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 1vids9-00C360-3D for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 19:28:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vids8-008tOz-0V for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 19:28:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vidqR-008peT-1S for pgsql-hackers@lists.postgresql.org; Wed, 21 Jan 2026 19:26:24 +0000 Received: from mail-yw1-x1133.google.com ([2607:f8b0:4864:20::1133]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vidqM-001lxU-2l for pgsql-hackers@lists.postgresql.org; Wed, 21 Jan 2026 19:26:23 +0000 Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-78fb6c7874cso2043617b3.0 for ; Wed, 21 Jan 2026 11:26:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769023577; cv=none; d=google.com; s=arc-20240605; b=asr22KEfQsHUFQrLTOcGvDp17J3c4bcxzL0aA9HLPlj5dKQ0oQ/VOGrJQyzreuv1Jq bToFavEb8QpQ/xISJgua06lEoizRuwtd0Xb04b+t7ROa3WD5qb+3UVBwDxfLU5DJPdfp DN5XHn1K1WlldWHwoUNJSgB3r25YJ6mgQ8NdVgUSncGUEw/sKXFmwuhGRccYJIo3dfbm fOteJAsd7A8yQivn40tV3xJqRYW6yXyLIHBPPy1SsfFVo/aMBNCHrR8woojObARpp0wx QoD/uZK4i4iPtdkLja5izjpOHrtu0Gzq8O7tsN8P6sEir5G3oQw8qcm8Fx9phb9rNZ3H 1Lrg== 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=SFrTi2DfuxsMdcBUVm6EFeyGF5+CD69lu6qo+3V/7GM=; fh=8lvALhmZEoKi9Nc+LV99+NJDpvtWaalBXx/yvdiX7I8=; b=FQUHN2vOMrzUPWH9dDd9qySP/sSa3pEn6V5nUL8NLbEHDuaCpS0cuGAVhgB44uOC2z qL72/cmULjjs2S7NI3VNQMOKsOuQnrT9JpuQs98NMPCio8soKqIq1h2GD2GZ0JQoC7eL CVgFDVVEjho4feuIa8TINsuMvyqc/v8w7JOZ9vWLqPOflP3C0H6x6XqGq9tUP8n6gjAd DN5risgfBo/7T6XdWIs8XxQKiQH5OHqYSIL2ORLd5ibbkbs7PdfwkxHcRv3lBpDVe4LL sXOjuAdl6s0piTXGsCioMql0ouqtq93D9yPak3hQmKOhXeaPI9NcPiTmAIRlyoN2WiY6 GDJA==; 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=20230601; t=1769023577; x=1769628377; 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=SFrTi2DfuxsMdcBUVm6EFeyGF5+CD69lu6qo+3V/7GM=; b=MmN95WGiDlYPPwl2Y0fiqYEB3x0GSTF7tLTXfCPyNQt+L8UVkp0RUtL064flM7Xv90 nNF2UCADvZj8bwykw4Mg75F6Gz7Mu1bcFm7p5IuMIV/BPAHuQ8zzvH2TBBGmaaYBrbjS cvRbXxH0PIdG8iHCxG2fbaLKxt/es/8CqD5zkjNekwfwLe0X5bwwUIbXey1l6PXc19pH IKXsFAUkdMLD9h8MXGXcxU/wu6IfHOC3/NHebVcL87RsFGEka8U9IT7+ko+6MhueYS8f KgUe8YemicRGWPJ0Qp5yGhV3epDqDeL8SkunppbBwWG7xEx8vqy0VtTdO4GkSdAHbgII VnEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769023577; x=1769628377; 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=SFrTi2DfuxsMdcBUVm6EFeyGF5+CD69lu6qo+3V/7GM=; b=SA620pJ8HVLNxWWBAgTXtxuJpAysm4qh7BYAe6OkCchG/+nQcHeH8I1haKDBotYRwz QDni+nUNW3ANK1l+OjgZ+3eqNz/ioHRpqqJUKm4Gp5xSBbAKY/AHnO02NUFrJdA+gsly pzThC3SrNJv6YhSmbGUlVE4xq0cQbRqdTQ7cgiihV8v/zZZTNx3laOqu43Dts6z4bzlR se0ZSzW9u289xgzIq+xnBqJ36Eqir/ZjLYLpwXZ+LuMfEuQgAL9t/T/gGx+bJyAk8lzg c+fD609bBGod84f02EmS9z+mt1gF4m7kCWTK2FW6s9N40ZbNAxDRVhf6j+cBYHq3ebBD jtNQ== X-Forwarded-Encrypted: i=1; AJvYcCWJbdfslsfaOK9sl6XPeVILRXwo+VkGgXaYpwJKa5cdywHkc+URbg4c+mB93MjaLql3cfVndB5LmjMcP0nX@lists.postgresql.org X-Gm-Message-State: AOJu0YxL+QHRD12dIIdzx+G3xgsX0IqdUXDrSJl3siYVLcVWGNcdycJz CsJlvgVGRw6NFlh6B0/hXT670c5D7NR9pMXuSOXfuFJmjtEEwkJY8z03pstkBbn1Yk/t6Z25U6R 3PH5k5F21W+7FyUCMECJ7WYiKdXBzK5E= X-Gm-Gg: AZuq6aKnLIf8ozmXU9aBa2rHlMPVM6HxJe6+7OcyfApdyspoJ0dpLQOJ54/H7pMLiXz mJaOpZ2LF/e80uerkjDotnbpy508OZX9rcDkZIVdbML1uARK8k4QSM1C2GmvG7QP5ULU0FOvldr ZwgqKvyW/+FcUOxNZs+dEmpogX+ZkpDxggipGGGhWqYeZgwRCEUbxMJu3ZdluL8o/EV/eLbIFY2 PFFqqTKXJeBpK4h9ZVx3uJ+E9xkVwCEHOHZ3Jl68mNHRxQ3w/dLiz2brtEbJSLiX3Mjzp8Jygk7 c6+jhsq1B2p2nHMUTvmTI6zlDo8= X-Received: by 2002:a05:690e:1b48:b0:646:7b46:55c0 with SMTP id 956f58d0204a3-6491771e687mr12563442d50.74.1769023576980; Wed, 21 Jan 2026 11:26:16 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Wed, 21 Jan 2026 14:26:02 -0500 X-Gm-Features: AZwV_Qjv1pDZ5F_gQaaw0ymRiYAo6MFzWJ0oO8HUP_OGdt0b6mHC4ozyn5AumkI Message-ID: Subject: Re: pg_plan_advice To: Ajay Pal Cc: Jakub Wartak , Lukas Fittl , Jacob Champion , Dian Fay , Matheus Alcantara , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000e844b70648eae553" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e844b70648eae553 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 21, 2026 at 6:52=E2=80=AFAM Ajay Pal wro= te: > Subsequent testing revealed that UNION operations involving constants > which enforce empty subplans result in the generated partition-wise > plan not being recognized by the planner. Good catch, thank you. Should be fixed in this version. Changes in v11: - What was previously 0004 has been promoted to 0001. This is the pgs_mask stuff to allow extensions to control the planner more easily, which seems separately committable based on reviews to this point. - Fixed a bug found by Jacob wherein GATHER() and some other tags permitted multiple levels of nested sublists instead of, as intended, only a single one. - Added a test for that case, too. - Fixed JOIN_ORDER(justonerel) so that it correctly reports "matched" instead of incorrectly reporting "partially matched" even when justonerel was part of a join problem. - Add tests for specifying a prefix of the join order list. - Removed an XXX comment from the join order tests that now seems bogus to = me. - Fixed a bug in pg_plan_advice_explain_text_multiline that caused it to display nothing in text format when the label was empty, instead of when the value was empty. - Add COSTS OFF to various tests in syntax.sql. I initially omitted this because I thought it wouldn't be necessary, but I should know better. - Add a test for EXPLAIN (PLAN_ADVICE) in non-text format. - Add tests for SEMIJOIN_UNIQUE() and SEMIJOIN_NON_UNIQUE(). - Rewrite a bunch of buggy logic related to SEMIJOIN_UNIQUE() and SEMIJOIN_NON_UNIQUE(). - Show the join type in pg_plan_advice.trace_mask output. - Per this email from Ajay, apply the unique_nonjoin_rtekind() test to elided (Merge)Append nodes as we do to non-elided ones. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000e844b70648eae553 Content-Type: application/octet-stream; name="v11-0002-Store-information-about-range-table-flattening-i.patch" Content-Disposition: attachment; filename="v11-0002-Store-information-about-range-table-flattening-i.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkoey7nd1 RnJvbSA3MDU1YjM0MzBhM2Q1ZmEwNDUxNmRhZDU5Zjc4NDQ2NTM0MDg3NGE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMSAy LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHJhbmdlLXRhYmxlIGZsYXR0ZW5pbmcgaW4gdGhl CiBmaW5hbCBwbGFuLgoKU3VwcG9zZSB0aGF0IHdlJ3JlIGN1cnJlbnRseSBwbGFubmluZyBhIHF1 ZXJ5IGFuZCwgd2hlbiB0aGF0IHNhbWUKcXVlcnkgd2FzIHByZXZpb3VzbHkgcGxhbm5lZCBhbmQg ZXhlY3V0ZWQsIHdlIGxlYXJuZWQgc29tZXRoaW5nIGFib3V0CmhvdyBhIGNlcnRhaW4gdGFibGUg d2l0aGluIHRoYXQgcXVlcnkgc2hvdWxkIGJlIHBsYW5uZWQuIFdlIHdhbnQgdG8KdGFrZSBub3Rl IHdoZW4gdGhhdCBzYW1lIHRhYmxlIGlzIGJlaW5nIHBsYW5uZWQgZHVyaW5nIHRoZSBjdXJyZW50 CnBsYW5uaW5nIGN5Y2xlLCBidXQgdGhpcyBpcyBkaWZmaWN1bHQgdG8gZG8sIGJlY2F1c2UgdGhl IFJUSSBvZiB0aGUKdGFibGUgZnJvbSB0aGUgcHJldmlvdXMgcGxhbiB3b24ndCBuZWNlc3Nhcmls eSBiZSBlcXVhbCB0byB0aGUgUlRJCnRoYXQgd2Ugc2VlIGR1cmluZyB0aGUgY3VycmVudCBwbGFu bmluZyBjeWNsZS4gVGhpcyBpcyBiZWNhdXNlIGVhY2gKc3VicXVlcnkgaGFzIGEgc2VwYXJhdGUg cmFuZ2UgdGFibGUgZHVyaW5nIHBsYW5uaW5nLCBidXQgdGhlc2UgYXJlCmZsYXR0ZW5lZCBpbnRv IG9uZSByYW5nZSB0YWJsZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmluYWwgcGxhbiwKY2hhbmdp bmcgUlRJcy4KCkNvbW1pdCA4YzQ5YTQ4NGU4ZWJiMDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQw IGFsbG93cyB1cyB0byBtYXRjaCB1cApzdWJxdWVyaWVzIHNlZW4gaW4gdGhlIHByZXZpb3VzIHBs YW5uaW5nIGN5Y2xlcyB3aXRoIHRoZSBzdWJxdWVyaWVzCmN1cnJlbnRseSBiZWluZyBwbGFubmVk IGp1c3QgYnkgY29tcGFyaW5nIHRleHR1YWwgbmFtZXMsIGJ1dCB0aGF0J3MKbm90IHF1aXRlIGVu b3VnaCB0byBsZXQgdXMgZGVkdWNlIGFueXRoaW5nIGFib3V0IGluZGl2aWR1YWwgdGFibGVzLApi ZWNhdXNlIHdlIGRvbid0IGtub3cgd2hlcmUgZWFjaCBzdWJxdWVyeSdzIHJhbmdlIHRhYmxlIGFw cGVhcnMgaW4KdGhlIGZpbmFsLCBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuCgpUbyBmaXggdGhhdCwg c3RvcmUgYSBsaXN0IG9mIFN1YlBsYW5SVEluZm8gb2JqZWN0cyBpbiB0aGUgZmluYWwKcGxhbm5l ZCBzdGF0ZW1lbnQsIGVhY2ggaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBzdWJwbGFuLCB0aGUg b2Zmc2V0CmF0IHdoaWNoIGl0IGJlZ2lucyBpbiB0aGUgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLCBh bmQgd2hldGhlciBvciBub3QKaXQgd2FzIGEgZHVtbXkgc3VicGxhbiAtLSBpZiBpdCB3YXMsIHNv bWUgUlRJcyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQKZnJvbSB0aGUgZmluYWwgcmFuZ2UgdGFibGUs IGJ1dCBhbHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBjb250cm9sIGhvdwphIGR1bW15IHN1YnF1ZXJ5 IGdldHMgcGxhbm5lZC4gVGhlIHRvcGxldmVsIHN1YnF1ZXJ5IGhhcyBubyBuYW1lIGFuZAphbHdh eXMgYmVnaW5zIGF0IHJ0b2Zmc2V0IDAsIHNvIHdlIG1ha2Ugbm8gZW50cnkgZm9yIGl0LgoKVGhp cyBjb21taXQgdGVhY2hlcyBwZ19vdmVyZXhwbGFpbidzIFJBTkdFX1RBQkxFIG9wdGlvbiB0byBt YWtlIHVzZQpvZiB0aGlzIG5ldyBkYXRhIHRvIGRpc3BsYXkgdGhlIHN1YnF1ZXJ5IG5hbWUgZm9y IGVhY2ggcmFuZ2UgdGFibGUKZW50cnkuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2Fz QGZpdHRsLmNvbT4KUmV2aWV3ZWQtYnk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVy cHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3 ZWQtYnk6IEphY29iIENoYW1waW9uIDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpS ZXZpZXdlZC1ieTogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3 ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRw Oi8vcG9zdGdyLmVzL20vQ0ErVGdtb1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVu ND1aSG9LUHp3QG1haWwuZ21haWwuY29tCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggMzE2ZmZkMWM4 N2YuLmJmOGM3NjhlZDQ3IDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA3NTdiZGM3 YjFkZS4uMjk2ZjA5ZjBkNzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTY1NCw2ICs2NTQsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg MTZkMjAwY2ZiNDYuLmE1YjIzMTRlZjJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IGZiODA4ODIzYWNmLi5jMWU5Mzk3NjIzYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTIwOCw2ICsyMDgsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCA0YmM2ZmI1NjcwZS4uOWFl NzJhNjA3ZTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwlib29s CQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RFU19I ICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDFjODYxMGZkNDZjLi4yMDA3N2M5ZTkz ZCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI5MjYsNiArMjkyNiw3IEBAIFN1Ykxp bmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQbGFu U3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --000000000000e844b70648eae553 Content-Type: application/octet-stream; name="v11-0003-Store-information-about-elided-nodes-in-the-fina.patch" Content-Disposition: attachment; filename="v11-0003-Store-information-about-elided-nodes-in-the-fina.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkoey7nh2 RnJvbSA5YTE5ZWIxZGRjOTZjYzhkOWIzOWExYmIzNDhjMTQ2ZTk5MDNiOGNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMSAz LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGVsaWRlZCBub2RlcyBpbiB0aGUgZmluYWwKIHBs YW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0byByZWNvbnN0cnVj dCB0aGUgcGxhbm5lcidzCmNob2ljZSBvZiBqb2luIG9yZGVyIGZyb20gdGhlIGZpbmFsIHBsYW4u IFRvIGRvIHNvLCBpdCBtdXN0IGJlIHBvc3NpYmxlCnRvIGZpbmQgYWxsIG9mIHRoZSBSVElzIHRo YXQgd2VyZSBwYXJ0IG9mIHRoZSBqb2luIHByb2JsZW0gaW4gdGhhdCBwbGFuLgpUaGUgcHJldmlv dXMgY29tbWl0LCB0b2dldGhlciB3aXRoIHRoZSBlYXJsaWVyIHdvcmsgaW4KOGM0OWE0ODRlOGVi YjAxOTlmYmE0YmQ2OGVhYWVkYWY0OWI0OGVkMCwgaXMgZW5vdWdoIHRvIGxldCB1cyBtYXRjaCB1 cApSVElzIHdlIHNlZSBpbiB0aGUgZmluYWwgcGxhbiB3aXRoIFJUSXMgdGhhdCB3ZSBzZWUgZHVy aW5nIHRoZSBwbGFubmluZwpjeWNsZSwgYnV0IHdlIHN0aWxsIGhhdmUgYSBwcm9ibGVtIGlmIHRo ZSBwbGFubmVyIGRlY2lkZXMgdG8gZHJvcCBzb21lClJUSXMgb3V0IG9mIHRoZSBmaW5hbCBwbGFu IGFsdG9nZXRoZXIuCgpUbyBmaXggdGhhdCwgd2hlbiBzZXRyZWZzLmMgcmVtb3ZlcyBhIFN1YnF1 ZXJ5U2Nhbiwgc2luZ2xlLWNoaWxkIEFwcGVuZCwKb3Igc2luZ2xlLWNoaWxkIE1lcmdlQXBwZW5k IGZyb20gdGhlIGZpbmFsIFBsYW4gdHJlZSwgcmVjb3JkIHRoZSB0eXBlIG9mCnRoZSByZW1vdmVk IG5vZGUgYW5kIHRoZSBSVElzIHRoYXQgdGhlIHJlbW92ZWQgbm9kZSB3b3VsZCBoYXZlIHNjYW5u ZWQKaW4gdGhlIGZpbmFsIHBsYW4gdHJlZS4gSXQgd291bGQgYmUgbmF0dXJhbCB0byByZWNvcmQg dGhpcyBpbmZvcm1hdGlvbgpvbiB0aGUgY2hpbGQgb2YgdGhlIHJlbW92ZWQgcGxhbiBub2RlLCBi dXQgdGhhdCB3b3VsZCByZXF1aXJlIGFkZGluZwphbiBhZGRpdGlvbmFsIHBvaW50ZXIgZmllbGQg dG8gdHlwZSBQbGFuLCB3aGljaCBzZWVtcyB1bmRlc2lyYWJsZS4KU28sIGluc3RlYWQsIHN0b3Jl IHRoZSBpbmZvcm1hdGlvbiBpbiBhIHNlcGFyYXRlIGxpc3QgdGhhdCB0aGUKZXhlY3V0b3IgbmVl ZCBuZXZlciBjb25zdWx0LCBhbmQgdXNlIHRoZSBwbGFuX25vZGVfaWQgdG8gaWRlbnRpZnkKdGhl IHBsYW4gbm9kZSB3aXRoIHdoaWNoIHRoZSByZW1vdmVkIG5vZGUgaXMgbG9naWNhbGx5IGFzc29j aWF0ZWQuCgpBbHNvLCB1cGRhdGUgcGdfb3ZlcmV4cGxhaW4gdG8gZGlzcGxheSB0aGVzZSBkZXRh aWxzLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRsIDxsdWthc0BmaXR0bC5jb20+ClJldmlld2Vk LWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdl ZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlv biA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEFtaXQgTGFu Z290ZSA8YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRy aXN0YW4ueWltQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1Rn bW9aLUpoMVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWls LmNvbQotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAgICAgICAgICB8 ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgICAgICAgfCAz OSArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAg ICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgICAg ICAgIHwgNTIgKysrKysrKysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICAgICAgICAgIHwgIDMgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o ICAgICAgICAgICAgICAgICB8IDIwICsrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICAgICAgICAgICB8ICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgMTE3IGluc2VydGlv bnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFp bi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4 cGVjdGVkL3BnX292ZXJleHBsYWluLm91dAppbmRleCA1NWQzNDY2NmQ4Ny4uY2E5YTIzZWE2MWYg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CkBAIC00NTIsNiArNDUyLDggQEAgU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJF IGdlbnVzID0gJ2RhdWN1cyc7CiAgU2VxIFNjYW4gb24gZGF1Y3VzIHZlZ2V0YWJsZXMKICAgIEZp bHRlcjogKGdlbnVzID0gJ2RhdWN1cyc6OnRleHQpCiAgICBTY2FuIFJUSTogMgorICAgRWxpZGVk IE5vZGUgVHlwZTogQXBwZW5kCisgICBFbGlkZWQgTm9kZSBSVElzOiAxCiAgUlRJIDEgKHJlbGF0 aW9uLCBpbmhlcml0ZWQsIGluLWZyb20tY2xhdXNlKToKICAgIEVyZWY6IHZlZ2V0YWJsZXMgKGlk LCBuYW1lLCBnZW51cykKICAgIFJlbGF0aW9uOiB2ZWdldGFibGVzCkBAIC00NjUsNyArNDY3LDcg QEAgU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJFIGdlbnVzID0gJ2RhdWN1cyc7CiAgICBS ZWxhdGlvbiBLaW5kOiByZWxhdGlvbgogICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFy ZUxvY2sKICBVbnBydW5hYmxlIFJUSXM6IDEgMgotKDE2IHJvd3MpCisoMTggcm93cykKIAogLS0g QWxzbyB0ZXN0IGEgY2FzZSB0aGF0IGludm9sdmVzIGEgd3JpdGUuCiBFWFBMQUlOIChSQU5HRV9U QUJMRSwgQ09TVFMgT0ZGKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmlu ZGV4IGJmOGM3NjhlZDQ3Li5lMDE4NGJhMzE0YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVy ZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdf b3ZlcmV4cGxhaW4uYwpAQCAtMTkxLDYgKzE5MSw4IEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hv b2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkgKi8KIAlpZiAob3B0 aW9ucy0+cmFuZ2VfdGFibGUpCiAJeworCQlib29sCQlvcGVuZWRfZWxpZGVkX25vZGVzID0gZmFs c2U7CisKIAkJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCQl7CiAJCQljYXNlIFRfU2VxU2NhbjoK QEAgLTI1MSw2ICsyNTMsNDMgQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9vayhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJZGVmYXVsdDoKIAkJCQlicmVhazsKIAkJ fQorCisJCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCBlcy0+cHN0bXQtPmVsaWRlZE5vZGVz KQorCQl7CisJCQljaGFyCSAgICplbGlkZWRub2RldGFnOworCisJCQlpZiAobi0+cGxhbl9ub2Rl X2lkICE9IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFvcGVu ZWRfZWxpZGVkX25vZGVzKQorCQkJeworCQkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2Rl cyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMpOworCQkJCW9wZW5lZF9lbGlkZWRfbm9kZXMg PSB0cnVlOworCQkJfQorCisJCQlzd2l0Y2ggKG4tPmVsaWRlZF90eXBlKQorCQkJeworCQkJCWNh c2UgVF9BcHBlbmQ6CisJCQkJCWVsaWRlZG5vZGV0YWcgPSAiQXBwZW5kIjsKKwkJCQkJYnJlYWs7 CisJCQkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIk1lcmdlQXBw ZW5kIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJCQkJZWxpZGVk bm9kZXRhZyA9ICJTdWJxdWVyeVNjYW4iOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJ CQllbGlkZWRub2RldGFnID0gcHNwcmludGYoIiVkIiwgbi0+ZWxpZGVkX3R5cGUpOworCQkJCQli cmVhazsKKwkJCX0KKworCQkJRXhwbGFpbk9wZW5Hcm91cCgiRWxpZGVkIE5vZGUiLCBOVUxMLCB0 cnVlLCBlcyk7CisJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJFbGlkZWQgTm9kZSBUeXBlIiwgZWxp ZGVkbm9kZXRhZywgZXMpOworCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJFbGlkZWQgTm9kZSBS VElzIiwgbi0+cmVsaWRzLCBlcyk7CisJCQlFeHBsYWluQ2xvc2VHcm91cCgiRWxpZGVkIE5vZGUi LCBOVUxMLCB0cnVlLCBlcyk7CisJCX0KKwkJaWYgKG9wZW5lZF9lbGlkZWRfbm9kZXMpCisJCQlF eHBsYWluQ2xvc2VHcm91cCgiRWxpZGVkIE5vZGVzIiwgIkVsaWRlZCBOb2RlcyIsIGZhbHNlLCBl cyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggMjk2ZjA5 ZjBkNzMuLmU4NjI3OTJlYjQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBA IC02NjUsNiArNjY1LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJhbUV4ZWNU eXBlcyA9IGdsb2ItPnBhcmFtRXhlY1R5cGVzOwogCS8qIHV0aWxpdHlTdG10IHNob3VsZCBiZSBu dWxsLCBidXQgd2UgbWlnaHQgYXMgd2VsbCBjb3B5IGl0ICovCiAJcmVzdWx0LT51dGlsaXR5U3Rt dCA9IHBhcnNlLT51dGlsaXR5U3RtdDsKKwlyZXN1bHQtPmVsaWRlZE5vZGVzID0gZ2xvYi0+ZWxp ZGVkTm9kZXM7CiAJcmVzdWx0LT5zdG10X2xvY2F0aW9uID0gcGFyc2UtPnN0bXRfbG9jYXRpb247 CiAJcmVzdWx0LT5zdG10X2xlbiA9IHBhcnNlLT5zdG10X2xlbjsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCmluZGV4IGE1YjIzMTRlZjJhLi41YWQ2YzEzODMwYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMjExLDYgKzIxMSw5IEBAIHN0YXRpYyBMaXN0 ICpzZXRfd2luZG93YWdnX3J1bmNvbmRpdGlvbl9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCQkJICAgTGlzdCAqcnVuY29uZGl0aW9uLAogCQkJCQkJCQkJCQkJICAgUGxh biAqcGxhbik7CiAKK3N0YXRpYyB2b2lkIHJlY29yZF9lbGlkZWRfbm9kZShQbGFubmVyR2xvYmFs ICpnbG9iLCBpbnQgcGxhbl9ub2RlX2lkLAorCQkJCQkJCSAgIE5vZGVUYWcgZWxpZGVkX3R5cGUs IEJpdG1hcHNldCAqcmVsaWRzKTsKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0x NDYwLDEwICsxNDYzLDE3IEBAIHNldF9zdWJxdWVyeXNjYW5fcmVmZXJlbmNlcyhQbGFubmVySW5m byAqcm9vdCwKIAogCWlmICh0cml2aWFsX3N1YnF1ZXJ5c2NhbihwbGFuKSkKIAl7CisJCUluZGV4 CQlzY2FucmVsaWQ7CisKIAkJLyoKIAkJICogV2UgY2FuIG9taXQgdGhlIFN1YnF1ZXJ5U2NhbiBu b2RlIGFuZCBqdXN0IHB1bGwgdXAgdGhlIHN1YnBsYW4uCiAJCSAqLwogCQlyZXN1bHQgPSBjbGVh bl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikgcGxhbiwgcGxhbi0+c3VicGxhbik7CisK KwkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgU3VicXVlcnlTY2FuICovCisJCXNjYW5y ZWxpZCA9IHBsYW4tPnNjYW4uc2NhbnJlbGlkICsgcnRvZmZzZXQ7CisJCXJlY29yZF9lbGlkZWRf bm9kZShyb290LT5nbG9iLCBwbGFuLT5zdWJwbGFuLT5wbGFuX25vZGVfaWQsCisJCQkJCQkgICBU X1N1YnF1ZXJ5U2NhbiwgYm1zX21ha2Vfc2luZ2xldG9uKHNjYW5yZWxpZCkpOwogCX0KIAllbHNl CiAJewpAQCAtMTg5MSw3ICsxOTAxLDE3IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVy SW5mbyAqcm9vdCwKIAkJUGxhbgkgICAqcCA9IChQbGFuICopIGxpbml0aWFsKGFwbGFuLT5hcHBl bmRwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IGFwbGFuLT5wbGFuLnBhcmFs bGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAq KSBhcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsKKworCQkJcmVzdWx0ID0gY2xl YW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIGFwbGFuLCBwKTsKKworCQkJLyogUmVt ZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGFuIEFwcGVuZCAqLworCQkJcmVjb3JkX2VsaWRlZF9ub2Rl KHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9BcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0 X3JlbGlkX3NldChhcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVz dWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTE5NTksNyArMTk3OSwxNyBAQCBzZXRfbWVyZ2VhcHBl bmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJUGxhbgkgICAqcCA9IChQbGFuICop IGxpbml0aWFsKG1wbGFuLT5tZXJnZXBsYW5zKTsKIAogCQlpZiAocC0+cGFyYWxsZWxfYXdhcmUg PT0gbXBsYW4tPnBsYW4ucGFyYWxsZWxfYXdhcmUpCi0JCQlyZXR1cm4gY2xlYW5fdXBfcmVtb3Zl ZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFuLCBwKTsKKwkJeworCQkJUGxhbgkgICAqcmVzdWx0 OworCisJCQlyZXN1bHQgPSBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikgbXBs YW4sIHApOworCisJCQkvKiBSZW1lbWJlciB0aGF0IHdlIHJlbW92ZWQgYSBNZXJnZUFwcGVuZCAq LworCQkJcmVjb3JkX2VsaWRlZF9ub2RlKHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9N ZXJnZUFwcGVuZCwKKwkJCQkJCQkgICBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hcHByZWxpZHMs IHJ0b2Zmc2V0KSk7CisKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KIAl9CiAKIAkvKgpAQCAtMzc3 NCwzICszODA0LDIxIEBAIGV4dHJhY3RfcXVlcnlfZGVwZW5kZW5jaWVzX3dhbGtlcihOb2RlICpu b2RlLCBQbGFubmVySW5mbyAqY29udGV4dCkKIAlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtl cihub2RlLCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIsCiAJCQkJCQkJCSAgY29u dGV4dCk7CiB9CisKKy8qCisgKiBSZWNvcmQgc29tZSBkZXRhaWxzIGFib3V0IGEgbm9kZSByZW1v dmVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMKKyAqIHByb2Nlc3NpbmcsIGZvciB0aGUg YmVuZWZpdCBvZiBjb2RlIHRyeWluZyB0byByZWNvbnN0cnVjdCBwbGFubmVyIGRlY2lzaW9ucwor ICogZnJvbSBleGFtaW5hdGlvbiBvZiB0aGUgZmluYWwgcGxhbiB0cmVlLgorICovCitzdGF0aWMg dm9pZAorcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIGludCBwbGFuX25v ZGVfaWQsCisJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwgQml0bWFwc2V0ICpyZWxpZHMpCit7 CisJRWxpZGVkTm9kZSAqbiA9IG1ha2VOb2RlKEVsaWRlZE5vZGUpOworCisJbi0+cGxhbl9ub2Rl X2lkID0gcGxhbl9ub2RlX2lkOworCW4tPmVsaWRlZF90eXBlID0gZWxpZGVkX3R5cGU7CisJbi0+ cmVsaWRzID0gcmVsaWRzOworCisJZ2xvYi0+ZWxpZGVkTm9kZXMgPSBsYXBwZW5kKGdsb2ItPmVs aWRlZE5vZGVzLCBuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYzFlOTM5NzYyM2IuLjlj YzVkMmU3NDExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMjMyLDYgKzIzMiw5IEBAIHR5cGVk ZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFy YW1zICovCiAJTGlzdAkgICAqcGFyYW1FeGVjVHlwZXM7CiAKKwkvKiBpbmZvIGFib3V0IG5vZGVz IGVsaWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlMaXN0 CSAgICplbGlkZWROb2RlczsKKwogCS8qIGhpZ2hlc3QgUGxhY2VIb2xkZXJWYXIgSUQgYXNzaWdu ZWQgKi8KIAlJbmRleAkJbGFzdFBISWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggOWFlNzJh NjA3ZTIuLjBhZDBmZjQwNGM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTUyLDYgKzE1Miw5 IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJLyogbm9uLW51bGwgaWYgdGhpcyBpcyB1 dGlsaXR5IHN0bXQgKi8KIAlOb2RlCSAgICp1dGlsaXR5U3RtdDsKIAorCS8qIGluZm8gYWJvdXQg bm9kZXMgZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLwor CUxpc3QJICAgKmVsaWRlZE5vZGVzOworCiAJLyoKIAkgKiBEZWZFbGVtIG9iamVjdHMgYWRkZWQg YnkgZXh0ZW5zaW9ucywgZS5nLiB1c2luZyBwbGFubmVyX3NodXRkb3duX2hvb2sKIAkgKgpAQCAt MTgzOCw0ICsxODQxLDIxIEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW5SVEluZm8KIAlib29sCQlk dW1teTsKIH0gU3ViUGxhblJUSW5mbzsKIAorLyoKKyAqIEVsaWRlZE5vZGUKKyAqCisgKiBJbmZv cm1hdGlvbiBhYm91dCBub2RlcyBlbGlkZWQgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlOiB0cml2 aWFsIHN1YnF1ZXJ5CisgKiBzY2FucywgYW5kIHNpbmdsZS1jaGlsZCBBcHBlbmQgYW5kIE1lcmdl QXBwZW5kIG5vZGVzLgorICoKKyAqIHBsYW5fbm9kZV9pZCBpcyB0aGF0IG9mIHRoZSBzdXJ2aXZp bmcgcGxhbiBub2RlLCB0aGUgc29sZSBjaGlsZCBvZiB0aGUKKyAqIG9uZSB3aGljaCB3YXMgZWxp ZGVkLgorICovCit0eXBlZGVmIHN0cnVjdCBFbGlkZWROb2RlCit7CisJTm9kZVRhZwkJdHlwZTsK KwlpbnQJCQlwbGFuX25vZGVfaWQ7CisJTm9kZVRhZwkJZWxpZGVkX3R5cGU7CisJQml0bWFwc2V0 ICAqcmVsaWRzOworfSBFbGlkZWROb2RlOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5PREVTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMjAwNzdjOWU5M2QuLmE2MmEwOTFkMDIx IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNzEwLDYgKzcxMCw3IEBAIEVhY2hTdGF0 ZQogRWRnZQogRWRpdGFibGVPYmplY3RUeXBlCiBFbGVtZW50c1N0YXRlCitFbGlkZWROb2RlCiBF bmFibGVUaW1lb3V0UGFyYW1zCiBFbmREYXRhUHRyVHlwZQogRW5kRGlyZWN0TW9kaWZ5X2Z1bmN0 aW9uCi0tIAoyLjUxLjAKCg== --000000000000e844b70648eae553 Content-Type: application/octet-stream; name="v11-0001-Allow-for-plugin-control-over-path-generation-st.patch" Content-Disposition: attachment; filename="v11-0001-Allow-for-plugin-control-over-path-generation-st.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkoey7n30 RnJvbSAyY2QwYTFmMWVjYjdmZmZhZTU4MTMxOGFhOTM3YjNhYTc3ZmYyNmE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6Mzc6MjEgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSAx LzVdIEFsbG93IGZvciBwbHVnaW4gY29udHJvbCBvdmVyIHBhdGggZ2VuZXJhdGlvbgogc3RyYXRl Z2llcy4KCkVhY2ggUmVsT3B0SW5mbyBub3cgaGFzIGEgcGdzX21hc2sgbWVtYmVyIHdoaWNoIGlz IGEgbWFzayBvZiBhY2NlcHRhYmxlCnN0cmF0ZWdpZXMuIEZvciBtb3N0IHJlbHMsIHRoaXMgaXMg cG9wdWxhdGVkIGZyb20gUGxhbm5lckdsb2JhbCdzCmRlZmF1bHRfcGdzX21hc2ssIHdoaWNoIGlz IGNvbXB1dGVkIGZyb20gdGhlIHZhbHVlcyBvZiB0aGUgZW5hYmxlXyoKR1VDcyBhdCB0aGUgc3Rh cnQgb2YgcGxhbm5pbmcuCgpGb3IgYmFzZXJlbHMsIGdldF9yZWxhdGlvbl9pbmZvX2hvb2sgY2Fu IGJlIHVzZWQgdG8gYWRqdXN0IHBnc19tYXNrIGZvcgplYWNoIG5ldyBSZWxPcHRJbmZvLCBhdCBs ZWFzdCBmb3IgcmVscyBvZiB0eXBlIFJURV9SRUxBVElPTi4gQWRqdXN0aW5nCnBnc19tYXNrIGlz IGxlc3MgdXNlZnVsIGZvciBvdGhlciB0eXBlcyBvZiByZWxzLCBidXQgaWYgaXQgcHJvdmVzIHRv CmJlIG5lY2Vzc2FyeSwgd2UgY2FuIHJldmlzaXQgdGhlIHdheSB0aGlzIGhvb2sgd29ya3Mgb3Ig YWRkIGEgbmV3IG9uZS4KCkZvciBqb2lucmVscywgdHdvIG5ldyBob29rcyBhcmUgYWRkZWQuIGpv aW5yZWxfc2V0dXBfaG9vayBpcyBjYWxsZWQgZWFjaAp0aW1lIGEgam9pbnJlbCBpcyBjcmVhdGVk LCBhbmQgb25lIHRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgZnJvbSB0aGF0IGhvb2sKaXMgdG8gbWFu aXB1bGF0ZSBwZ3NfbWFzayBmb3IgdGhlIG5ldyBqb2lucmVsLiBqb2luX3BhdGhfc2V0dXBfaG9v ayBpcwpjYWxsZWQgZWFjaCB0aW1lIHdlJ3JlIGFib3V0IHRvIGFkZCBwYXRocyB0byBhIGpvaW5y ZWwgYnkgY29uc2lkZXJpbmcKc29tZSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIGFuIG91dGVy IHJlbCwgYW4gaW5uZXIgcmVsLCBhbmQgYSBqb2luCnR5cGUuIEl0IGNhbiBtb2RpZnkgdGhlIHBn c19tYXNrIHByb3BhZ2F0ZWQgaW50byBKb2luUGF0aEV4dHJhRGF0YSB0bwpyZXN0cmljdCBzdHJh dGVneSBjaG9pY2UgZm9yIHRoYXQgcGFyaWN1bGFyIGNvbWJpbmF0aW9uIG9mIHJlbHMuCgpUbyBt YWtlIGpvaW5yZWxfc2V0dXBfaG9vayB3b3JrIGFzIGludGVuZGVkLCB0aGUgZXhpc3RpbmcgY2Fs bHMgdG8KYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyBhcmUgbW92ZWQgbGF0ZXIgaW4gdGhl IGNhbGxpbmcgZnVuY3Rpb25zOwp0aGlzIGlzIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBjaGVja3Mg d2hldGhlciB0aGUgcmVsJ3MgcGdzX21hc2sgaW5jbHVkZXMKUEdTX0NPTlNJREVSX1BBUlRJVElP TldJU0UsIHNvIHdlIHdhbnQgaXQgdG8gb25seSBiZSBjYWxsZWQgYWZ0ZXIKcGx1Z2lucyBoYXZl IGhhZCBhIGNoYW5jZSB0byBhbHRlciBwZ3NfbWFzay4KClVwcGVyIHJlbHMgY3VycmVudGx5IGlu aGVyaXQgcGdzX21hc2sgZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24uIEl0J3MKdW5jbGVhciB0aGF0 IHRoaXMgaXMgdGhlIG1vc3QgdXNlZnVsIGJlaGF2aW9yLCBidXQgYXQgdGhlIG1vbWVudCB0aGVy ZQphcmUgbm8gaG9va3MgdG8gYWxsb3cgdGhlIG1hc2sgdG8gYmUgc2V0IGluIGFueSBvdGhlciB3 YXkuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQt Ynk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2Vk LWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1waW9u IDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW1pdCBMYW5n b3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJp c3Rhbi55aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdt b1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgIHwgICAyICst CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgfCAyMjIgKysrKysrKysr KysrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAg fCAgIDQgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMgICB8ICA4OSAr KysrKysrLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMgICAgfCAgIDcg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyB8ICAgNCArLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDU0ICsrKysrKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyAgIHwgIDE5ICstCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcmVsbm9kZS5jICAgIHwgIDQ0ICsrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCAgICAgICAgICAgfCAgODIgKysrKysrKystCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29z dC5oICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5o ICAgICAgICB8ICAxMiArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAg IHwgICA5ICstCiAxNCBmaWxlcyBjaGFuZ2VkLCA0NTcgaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggZTAwZDE3MDA4 MTcuLmI0NTgxZTU0ZDkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAg LTk1Miw3ICs5NTIsNyBAQCBzZXRfdGFibGVzYW1wbGVfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFJhbmdlVGJsRW50cnkgKgogCQkgYm1zX21lbWJlcnNo aXAocm9vdC0+YWxsX3F1ZXJ5X3JlbHMpICE9IEJNU19TSU5HTEVUT04pICYmCiAJCSEoR2V0VHNt Um91dGluZShydGUtPnRhYmxlc2FtcGxlLT50c21oYW5kbGVyKS0+cmVwZWF0YWJsZV9hY3Jvc3Nf c2NhbnMpKQogCXsKLQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwg cGF0aCk7CisJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHBhdGgs IHRydWUpOwogCX0KIAogCWFkZF9wYXRoKHJlbCwgcGF0aCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYwppbmRleCAxNmJmMWY2MWEwZi4uMmQ1ZjczMDAxMzUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMjc1LDYgKzI3NSw3IEBAIGNvc3Rfc2Vxc2Nh bihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlkb3VibGUJCXNwY19zZXFfcGFnZV9j b3N0OwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19TRVFTQ0FOOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBw bGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpA QCAtMzI3LDggKzMyOCwxMSBAQCBjb3N0X3NlcXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJCSAqLwogCQlwYXRoLT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8g cGFyYWxsZWxfZGl2aXNvcik7CiAJfQorCWVsc2UKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJ REVSX05PTlBBUlRJQUw7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9zZXFzY2Fu ID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sg JiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRoLT5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIGNw dV9ydW5fY29zdCArIGRpc2tfcnVuX2Nvc3Q7CiB9CkBAIC0zNTQsNiArMzU4LDcgQEAgY29zdF9z YW1wbGVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCXNwY19wYWdlX2Nv c3Q7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50 NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFz ZSByZWxhdGlvbnMgd2l0aCB0YWJsZXNhbXBsZSBjbGF1c2VzICovCiAJQXNzZXJ0KGJhc2VyZWwt PnJlbGlkID4gMCk7CkBAIC00MDEsNyArNDA2LDExIEBAIGNvc3Rfc2FtcGxlc2NhbihQYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdl dC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVy X3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAo cGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKKworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBn c19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJcGF0aC0+c3Rh cnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nv c3QgKyBydW5fY29zdDsKIH0KQEAgLTQ0MCw3ICs0NDksOCBAQCBjb3N0X2dhdGhlcihHYXRoZXJQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGFyYWxsZWxf c2V0dXBfY29zdDsKIAlydW5fY29zdCArPSBwYXJhbGxlbF90dXBsZV9jb3N0ICogcGF0aC0+cGF0 aC5yb3dzOwogCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgtPmRp c2FibGVkX25vZGVzOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBwYXRoLT5zdWJwYXRo LT5kaXNhYmxlZF9ub2RlcworCQkrICgocmVsLT5wZ3NfbWFzayAmIFBHU19HQVRIRVIpICE9IDAg PyAwIDogMSk7CiAJcGF0aC0+cGF0aC5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0 aC0+cGF0aC50b3RhbF9jb3N0ID0gKHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0KTsKIH0KQEAgLTUw Niw4ICs1MTYsOCBAQCBjb3N0X2dhdGhlcl9tZXJnZShHYXRoZXJNZXJnZVBhdGggKnBhdGgsIFBs YW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXJhbGxlbF9zZXR1cF9jb3N0Owog CXJ1bl9jb3N0ICs9IHBhcmFsbGVsX3R1cGxlX2Nvc3QgKiBwYXRoLT5wYXRoLnJvd3MgKiAxLjA1 OwogCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVzCi0J CSsgKGVuYWJsZV9nYXRoZXJtZXJnZSA/IDAgOiAxKTsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25v ZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlzYWJsZWRfbm9kZXMKKwkJKyAoKHJlbC0+cGdzX21hc2sg JiBQR1NfR0FUSEVSX01FUkdFKSAhPSAwID8gMCA6IDEpOwogCXBhdGgtPnBhdGguc3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0ICsgaW5wdXRfc3RhcnR1cF9jb3N0OwogCXBhdGgtPnBhdGgudG90 YWxfY29zdCA9IChzdGFydHVwX2Nvc3QgKyBydW5fY29zdCArIGlucHV0X3RvdGFsX2Nvc3QpOwog fQpAQCAtNTU3LDYgKzU2Nyw3IEBAIGNvc3RfaW5kZXgoSW5kZXhQYXRoICpwYXRoLCBQbGFubmVy SW5mbyAqcm9vdCwgZG91YmxlIGxvb3BfY291bnQsCiAJZG91YmxlCQlwYWdlc19mZXRjaGVkOwog CWRvdWJsZQkJcmFuZF9oZWFwX3BhZ2VzOwogCWRvdWJsZQkJaW5kZXhfcGFnZXM7CisJdWludDY0 CQllbmFibGVfbWFzazsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxh dGlvbnMgKi8KIAlBc3NlcnQoSXNBKGJhc2VyZWwsIFJlbE9wdEluZm8pICYmCkBAIC01ODgsOCAr NTk5LDExIEBAIGNvc3RfaW5kZXgoSW5kZXhQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwg ZG91YmxlIGxvb3BfY291bnQsCiAJCQkJCQkJCQkJCSAgcGF0aC0+aW5kZXhjbGF1c2VzKTsKIAl9 CiAKLQkvKiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGVuYWJsZV9pbmRleG9ubHlzY2FuOyBpbmR4 cGF0aC5jIGRvZXMgdGhhdCAqLwotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVf aW5kZXhzY2FuID8gMCA6IDE7CisJLyogaXMgdGhpcyBzY2FuIHR5cGUgZGlzYWJsZWQ/ICovCisJ ZW5hYmxlX21hc2sgPSAoaW5kZXhvbmx5ID8gUEdTX0lOREVYT05MWVNDQU4gOiBQR1NfSU5ERVhT Q0FOKQorCQl8IChwYXJ0aWFsX3BhdGggPyAwIDogUEdTX0NPTlNJREVSX05PTlBBUlRJQUwpOwor CXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAogCS8qCiAJICogQ2FsbCBpbmRleC1h Y2Nlc3MtbWV0aG9kLXNwZWNpZmljIGNvZGUgdG8gZXN0aW1hdGUgdGhlIHByb2Nlc3NpbmcgY29z dApAQCAtMTAxMCw2ICsxMDI0LDcgQEAgY29zdF9iaXRtYXBfaGVhcF9zY2FuKFBhdGggKnBhdGgs IFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAogCWRvdWJsZQkJc3BjX3Nl cV9wYWdlX2Nvc3QsCiAJCQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7CiAJZG91YmxlCQlUOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfQklUTUFQU0NBTjsKIAogCS8qIFNob3VsZCBvbmx5IGJl IGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoSXNBKGJhc2VyZWwsIFJlbE9w dEluZm8pKTsKQEAgLTEwNzUsNiArMTA5MCw4IEBAIGNvc3RfYml0bWFwX2hlYXBfc2NhbihQYXRo ICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKIAogCQlwYXRo LT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8gcGFyYWxsZWxfZGl2aXNvcik7CiAJ fQorCWVsc2UKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CiAKIAog CXJ1bl9jb3N0ICs9IGNwdV9ydW5fY29zdDsKQEAgLTEwODMsNyArMTEwMCw4IEBAIGNvc3RfYml0 bWFwX2hlYXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq YmFzZXJlbCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVw OwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+ cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxlX2JpdG1hcHNjYW4gPyAwIDog MTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJs ZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0 YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7 CiB9CkBAIC0xMjQwLDYgKzEyNTgsNyBAQCBjb3N0X3RpZHNjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJZG91YmxlCQludHVwbGVzOwogCUxpc3RDZWxsICAgKmw7CiAJZG91Ymxl CQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8q IFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFz ZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTEyNjEsMTAgKzEyODAsMTAgQEAgY29zdF90aWRzY2FuKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCiAJCS8qCiAJCSAqIFdlIG11c3QgdXNlIGEg VElEIHNjYW4gZm9yIEN1cnJlbnRPZkV4cHI7IGluIGFueSBvdGhlciBjYXNlLCB3ZQotCQkgKiBz aG91bGQgYmUgZ2VuZXJhdGluZyBhIFRJRCBzY2FuIG9ubHkgaWYgZW5hYmxlX3RpZHNjYW49dHJ1 ZS4gQWxzbywKLQkJICogaWYgQ3VycmVudE9mRXhwciBpcyB0aGUgcXVhbCwgdGhlcmUgc2hvdWxk IGJlIG9ubHkgb25lLgorCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGluZyBhIFRJRCBzY2FuIG9ubHkg aWYgVElEIHNjYW5zIGFyZSBhbGxvd2VkLgorCQkgKiBBbHNvLCBpZiBDdXJyZW50T2ZFeHByIGlz IHRoZSBxdWFsLCB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUuCiAJCSAqLwotCQlBc3NlcnQoZW5h YmxlX3RpZHNjYW4gfHwgSXNBKHF1YWwsIEN1cnJlbnRPZkV4cHIpKTsKKwkJQXNzZXJ0KChiYXNl cmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwIHx8IElzQShxdWFsLCBDdXJyZW50T2ZF eHByKSk7CiAJCUFzc2VydChsaXN0X2xlbmd0aCh0aWRxdWFscykgPT0gMSB8fCAhSXNBKHF1YWws IEN1cnJlbnRPZkV4cHIpKTsKIAogCQlpZiAoSXNBKHF1YWwsIFNjYWxhckFycmF5T3BFeHByKSkK QEAgLTEzMTYsMTAgKzEzMzUsMTQgQEAgY29zdF90aWRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJ bmZvICpyb290LAogCiAJLyoKIAkgKiBUaGVyZSBhcmUgYXNzZXJ0aW9ucyBhYm92ZSB2ZXJpZnlp bmcgdGhhdCB3ZSBvbmx5IHJlYWNoIHRoaXMgZnVuY3Rpb24KLQkgKiBlaXRoZXIgd2hlbiBlbmFi bGVfdGlkc2Nhbj10cnVlIG9yIHdoZW4gdGhlIFRJRCBzY2FuIGlzIHRoZSBvbmx5IGxlZ2FsCi0J ICogcGF0aCwgc28gaXQncyBzYWZlIHRvIHNldCBkaXNhYmxlZF9ub2RlcyB0byB6ZXJvIGhlcmUu CisJICogZWl0aGVyIHdoZW4gYmFzZXJlbC0+cGdzX21hc2sgaW5jbHVkZXMgUEdTX1RJRFNDQU4g b3Igd2hlbiB0aGUgVElEIHNjYW4KKwkgKiBpcyB0aGUgb25seSBsZWdhbCBwYXRoLCBzbyB3ZSBv bmx5IG5lZWQgdG8gY29uc2lkZXIgdGhlIGVmZmVjdHMgb2YKKwkgKiBQR1NfQ09OU0lERVJfTk9O UEFSVElBTCBoZXJlLgogCSAqLwotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0 aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFz ayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBf Y29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsg cnVuX2Nvc3Q7CiB9CkBAIC0xMzUwLDYgKzEzNzMsNyBAQCBjb3N0X3RpZHJhbmdlc2NhbihQYXRo ICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlkb3VibGUJCW5zZXFwYWdlczsKIAlkb3VibGUJ CXNwY19yYW5kb21fcGFnZV9jb3N0OwogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nvc3Q7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19USURTQ0FOOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBw bGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpA QCAtMTQyOCw4ICsxNDUyLDE1IEBAIGNvc3RfdGlkcmFuZ2VzY2FuKFBhdGggKnBhdGgsIFBsYW5u ZXJJbmZvICpyb290LAogCQlwYXRoLT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8g cGFyYWxsZWxfZGl2aXNvcik7CiAJfQogCi0JLyogd2Ugc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGlz IHBhdGggdHlwZSB3aGVuIGVuYWJsZV90aWRzY2FuPWZhbHNlICovCi0JQXNzZXJ0KGVuYWJsZV90 aWRzY2FuKTsKKwkvKgorCSAqIFdlIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUg d2hlbiBQR1NfVElEU0NBTiBpcyB1bnNldCwgYnV0IHdlCisJICogbWlnaHQgbmVlZCB0byBkaXNh YmxlIHRoaXMgcGF0aCBkdWUgdG8gUEdTX0NPTlNJREVSX05PTlBBUlRJQUwuCisJICovCisJQXNz ZXJ0KChiYXNlcmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwKTsKKwlpZiAocGF0aC0+ cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPmRpc2FibGVkX25v ZGVzID0gMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90 YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIGNwdV9ydW5fY29zdCArIGRpc2tfcnVuX2Nvc3Q7CkBA IC0xNDUzLDYgKzE0ODQsNyBAQCBjb3N0X3N1YnF1ZXJ5c2NhbihTdWJxdWVyeVNjYW5QYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlMaXN0CSAgICpxcHF1YWxzOwogCVF1YWxDb3N0CXFw cXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9 IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQg YXJlIHN1YnF1ZXJpZXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE0ODMs NyArMTUxNSwxMCBAQCBjb3N0X3N1YnF1ZXJ5c2NhbihTdWJxdWVyeVNjYW5QYXRoICpwYXRoLCBQ bGFubmVySW5mbyAqcm9vdCwKIAkgKiBTdWJxdWVyeVNjYW4gbm9kZSwgcGx1cyBjcHVfdHVwbGVf Y29zdCB0byBhY2NvdW50IGZvciBzZWxlY3Rpb24gYW5kCiAJICogcHJvamVjdGlvbiBvdmVyaGVh ZC4KIAkgKi8KLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlz YWJsZWRfbm9kZXM7CisJaWYgKHBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQll bmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5wYXRoLmRpc2Fi bGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlzYWJsZWRfbm9kZXMKKwkJKyAoKChiYXNlcmVs LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzaykgPyAxIDogMCk7CiAJcGF0 aC0+cGF0aC5zdGFydHVwX2Nvc3QgPSBwYXRoLT5zdWJwYXRoLT5zdGFydHVwX2Nvc3Q7CiAJcGF0 aC0+cGF0aC50b3RhbF9jb3N0ID0gcGF0aC0+c3VicGF0aC0+dG90YWxfY29zdDsKIApAQCAtMTUz NCw2ICsxNTY5LDcgQEAgY29zdF9mdW5jdGlvbnNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKIAlSYW5nZVRibEVudHJ5ICpydGU7CiAJUXVh bENvc3QJZXhwcmNvc3Q7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQg b25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIGZ1bmN0aW9ucyAqLwog CUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTU3NCw3ICsxNjEwLDEwIEBAIGNvc3Rf ZnVuY3Rpb25zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29z dCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+ cGF0aHRhcmdldC0+Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJs ZWRfbm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJs ZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVz ID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8g MSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFs X2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE1OTYsNiArMTYzNSw3IEBA IGNvc3RfdGFibGVmdW5jc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0 CQljcHVfcGVyX3R1cGxlOwogCVJhbmdlVGJsRW50cnkgKnJ0ZTsKIAlRdWFsQ29zdAlleHByY29z dDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxp ZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBhcmUgZnVuY3Rpb25zICovCiAJQXNzZXJ0KGJhc2Vy ZWwtPnJlbGlkID4gMCk7CkBAIC0xNjMxLDcgKzE2NzEsMTAgQEAgY29zdF90YWJsZWZ1bmNzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5w YXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+ Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAw OworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBH U19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2Vy ZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0 aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFy dHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE2NTEsNiArMTY5NCw3IEBAIGNvc3RfdmFsdWVz c2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0CQlydW5fY29zdCA9IDA7 CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSBy ZWxhdGlvbnMgdGhhdCBhcmUgdmFsdWVzIGxpc3RzICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlk ID4gMCk7CkBAIC0xNjc5LDcgKzE3MjMsMTAgQEAgY29zdF92YWx1ZXNzY2FuKFBhdGggKnBhdGgs IFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5j b3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJfdHVw bGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChwYXRo LT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9O T05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNr ICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBy dW5fY29zdDsKIH0KQEAgLTE3MDIsNiArMTc0OSw3IEBAIGNvc3RfY3Rlc2NhbihQYXRoICpwYXRo LCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJUXVhbENvc3QJcXBx dWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0g MDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBh cmUgQ1RFcyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTcyNyw3ICsxNzc1 LDEwIEBAIGNvc3RfY3Rlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFy dHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9 IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQor CQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVf bWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNzQ0LDYgKzE3 OTUsNyBAQCBjb3N0X25hbWVkdHVwbGVzdG9yZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNv c3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91 bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIFR1cGxlc3RvcmVz ICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xNzY1LDcgKzE4MTcsMTAgQEAg Y29zdF9uYW1lZHR1cGxlc3RvcmVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAog CWNwdV9wZXJfdHVwbGUgKz0gY3B1X3R1cGxlX2Nvc3QgKyBxcHF1YWxfY29zdC5wZXJfdHVwbGU7 CiAJcnVuX2Nvc3QgKz0gY3B1X3Blcl90dXBsZSAqIGJhc2VyZWwtPnR1cGxlczsKIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQor CQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVf bWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNzgyLDYgKzE4 MzcsNyBAQCBjb3N0X3Jlc3VsdHNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJ Q29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9w ZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBi ZSBhcHBsaWVkIHRvIFJURV9SRVNVTFQgYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJl bC0+cmVsaWQgPiAwKTsKQEAgLTE4MDAsNyArMTg1NiwxMCBAQCBjb3N0X3Jlc3VsdHNjYW4oUGF0 aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJY3B1X3Blcl90dXBsZSA9IGNwdV90dXBsZV9j b3N0ICsgcXBxdWFsX2Nvc3QucGVyX3R1cGxlOwogCXJ1bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUg KiBiYXNlcmVsLT50dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBh dGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVS X05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21h c2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVw X2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCAr IHJ1bl9jb3N0OwogfQpAQCAtMTgxOCw2ICsxODc3LDcgQEAgY29zdF9yZWN1cnNpdmVfdW5pb24o UGF0aCAqcnVuaW9uLCBQYXRoICpucnRlcm0sIFBhdGggKnJ0ZXJtKQogCUNvc3QJCXN0YXJ0dXBf Y29zdDsKIAlDb3N0CQl0b3RhbF9jb3N0OwogCWRvdWJsZQkJdG90YWxfcm93czsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFdlIHByb2JhYmx5IGhhdmUgZGVjZW50IGVzdGltYXRl cyBmb3IgdGhlIG5vbi1yZWN1cnNpdmUgdGVybSAqLwogCXN0YXJ0dXBfY29zdCA9IG5ydGVybS0+ c3RhcnR1cF9jb3N0OwpAQCAtMTg0MCw3ICsxOTAwLDEwIEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9u KFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKIAkgKi8KIAl0b3RhbF9j b3N0ICs9IGNwdV90dXBsZV9jb3N0ICogdG90YWxfcm93czsKIAotCXJ1bmlvbi0+ZGlzYWJsZWRf bm9kZXMgPSBucnRlcm0tPmRpc2FibGVkX25vZGVzICsgcnRlcm0tPmRpc2FibGVkX25vZGVzOwor CWlmIChydW5pb24tPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdT X0NPTlNJREVSX05PTlBBUlRJQUw7CisJcnVuaW9uLT5kaXNhYmxlZF9ub2RlcyA9CisJCShydW5p b24tPnBhcmVudC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDog MDsKIAlydW5pb24tPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlydW5pb24tPnRvdGFs X2Nvc3QgPSB0b3RhbF9jb3N0OwogCXJ1bmlvbi0+cm93cyA9IHRvdGFsX3Jvd3M7CkBAIC0yMTEw LDcgKzIxNzMsMTEgQEAgY29zdF9pbmNyZW1lbnRhbF9zb3J0KFBhdGggKnBhdGgsCiAKIAlwYXRo LT5yb3dzID0gaW5wdXRfdHVwbGVzOwogCi0JLyogc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGVzZSBw YXRocyB3aGVuIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0PWZhbHNlICovCisJLyoKKwkgKiBXZSBz aG91bGQgbm90IGdlbmVyYXRlIHRoZXNlIHBhdGhzIHdoZW4gZW5hYmxlX2luY3JlbWVudGFsX3Nv cnQ9ZmFsc2UuCisJICogV2UgY2FuIGlnbm9yZSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBoZXJl LCBiZWNhdXNlIGlmIGl0J3MgcmVsZXZhbnQsCisJICogaXQgd2lsbCBoYXZlIGFscmVhZHkgYWZm ZWN0ZWQgdGhlIGlucHV0IHBhdGguCisJICovCiAJQXNzZXJ0KGVuYWJsZV9pbmNyZW1lbnRhbF9z b3J0KTsKIAlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVzOwogCkBA IC0yMTQ4LDYgKzIyMTUsMTAgQEAgY29zdF9zb3J0KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCiAJc3RhcnR1cF9jb3N0ICs9IGlucHV0X2Nvc3Q7CiAKKwkvKgorCSAqIFdlIGNhbiBp Z25vcmUgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZSwgYmVjYXVzZSBpZiBpdCdzIHJlbGV2 YW50LAorCSAqIGl0IHdpbGwgaGF2ZSBhbHJlYWR5IGFmZmVjdGVkIHRoZSBpbnB1dCBwYXRoLgor CSAqLwogCXBhdGgtPnJvd3MgPSB0dXBsZXM7CiAJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1 dF9kaXNhYmxlZF9ub2RlcyArIChlbmFibGVfc29ydCA/IDAgOiAxKTsKIAlwYXRoLT5zdGFydHVw X2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CkBAIC0yMjM5LDkgKzIzMTAsMTUgQEAgYXBwZW5kX25vbnBh cnRpYWxfY29zdChMaXN0ICpzdWJwYXRocywgaW50IG51bXBhdGhzLCBpbnQgcGFyYWxsZWxfd29y a2VycykKIHZvaWQKIGNvc3RfYXBwZW5kKEFwcGVuZFBhdGggKmFwYXRoLCBQbGFubmVySW5mbyAq cm9vdCkKIHsKKwlSZWxPcHRJbmZvICpyZWwgPSBhcGF0aC0+cGF0aC5wYXJlbnQ7CiAJTGlzdENl bGwgICAqbDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX0FQUEVORDsKKworCWlmIChhcGF0 aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05T SURFUl9OT05QQVJUSUFMOwogCi0JYXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSAwOworCWFw YXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0KKwkJKHJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFz aykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlhcGF0aC0+cGF0aC5zdGFydHVwX2Nvc3QgPSAw OwogCWFwYXRoLT5wYXRoLnRvdGFsX2Nvc3QgPSAwOwogCWFwYXRoLT5wYXRoLnJvd3MgPSAwOwpA QCAtMjQ1MSwxMSArMjUyOCwxNiBAQCBjb3N0X21lcmdlX2FwcGVuZChQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0 X3RvdGFsX2Nvc3QsCiAJCQkJICBkb3VibGUgdHVwbGVzKQogeworCVJlbE9wdEluZm8gKnJlbCA9 IHBhdGgtPnBhcmVudDsKIAlDb3N0CQlzdGFydHVwX2Nvc3QgPSAwOwogCUNvc3QJCXJ1bl9jb3N0 ID0gMDsKIAlDb3N0CQljb21wYXJpc29uX2Nvc3Q7CiAJZG91YmxlCQlOOwogCWRvdWJsZQkJbG9n TjsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX01FUkdFX0FQUEVORDsKKworCWlmIChwYXRo LT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9O T05QQVJUSUFMOwogCiAJLyoKIAkgKiBBdm9pZCBsb2coMCkuLi4KQEAgLTI0NzgsNyArMjU2MCw5 IEBAIGNvc3RfbWVyZ2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCSAq LwogCXJ1bl9jb3N0ICs9IGNwdV90dXBsZV9jb3N0ICogQVBQRU5EX0NQVV9DT1NUX01VTFRJUExJ RVIgKiB0dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25v ZGVzOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKHJlbC0+cGdzX21hc2sgJiBlbmFibGVf bWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyArPSBp bnB1dF9kaXNhYmxlZF9ub2RlczsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Qg KyBpbnB1dF9zdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCAr IHJ1bl9jb3N0ICsgaW5wdXRfdG90YWxfY29zdDsKIH0KQEAgLTI0OTcsNyArMjU4MSw3IEBAIGNv c3RfbWVyZ2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogICovCiB2b2lk CiBjb3N0X21hdGVyaWFsKFBhdGggKnBhdGgsCi0JCQkgIGludCBpbnB1dF9kaXNhYmxlZF9ub2Rl cywKKwkJCSAgYm9vbCBlbmFibGVkLCBpbnQgaW5wdXRfZGlzYWJsZWRfbm9kZXMsCiAJCQkgIENv c3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCiAJCQkgIGRvdWJs ZSB0dXBsZXMsIGludCB3aWR0aCkKIHsKQEAgLTI1MDYsNiArMjU5MCwxMSBAQCBjb3N0X21hdGVy aWFsKFBhdGggKnBhdGgsCiAJZG91YmxlCQluYnl0ZXMgPSByZWxhdGlvbl9ieXRlX3NpemUodHVw bGVzLCB3aWR0aCk7CiAJZG91YmxlCQl3b3JrX21lbV9ieXRlcyA9IHdvcmtfbWVtICogKFNpemUp IDEwMjQ7CiAKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwICYmCisJCXBhdGgtPnBh cmVudCAhPSBOVUxMICYmCisJCShwYXRoLT5wYXJlbnQtPnBnc19tYXNrICYgUEdTX0NPTlNJREVS X05PTlBBUlRJQUwpID09IDApCisJCWVuYWJsZWQgPSBmYWxzZTsKKwogCXBhdGgtPnJvd3MgPSB0 dXBsZXM7CiAKIAkvKgpAQCAtMjUzNSw3ICsyNjI0LDcgQEAgY29zdF9tYXRlcmlhbChQYXRoICpw YXRoLAogCQlydW5fY29zdCArPSBzZXFfcGFnZV9jb3N0ICogbnBhZ2VzOwogCX0KIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMgKyAoZW5hYmxlX21hdGVyaWFs ID8gMCA6IDEpOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMg KyAoZW5hYmxlZCA/IDAgOiAxKTsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7 CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMzI4 Nyw3ICszMzc2LDcgQEAgY29zdF9ncm91cChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwK ICAqLwogdm9pZAogaW5pdGlhbF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBKb2lu Q29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAotCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJ CQkgIEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgZW5hYmxlX21hc2ssCiAJCQkJCSAgUGF0aCAq b3V0ZXJfcGF0aCwgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAq ZXh0cmEpCiB7CkBAIC0zMzAxLDcgKzMzOTAsNyBAQCBpbml0aWFsX2Nvc3RfbmVzdGxvb3AoUGxh bm5lckluZm8gKnJvb3QsIEpvaW5Db3N0V29ya3NwYWNlICp3b3Jrc3BhY2UsCiAJQ29zdAkJaW5u ZXJfcmVzY2FuX3J1bl9jb3N0OwogCiAJLyogQ291bnQgdXAgZGlzYWJsZWQgbm9kZXMuICovCi0J ZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfbmVzdGxvb3AgPyAwIDogMTsKKwlkaXNhYmxlZF9ub2Rl cyA9IChleHRyYS0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDog MTsKIAlkaXNhYmxlZF9ub2RlcyArPSBpbm5lcl9wYXRoLT5kaXNhYmxlZF9ub2RlczsKIAlkaXNh YmxlZF9ub2RlcyArPSBvdXRlcl9wYXRoLT5kaXNhYmxlZF9ub2RlczsKIApAQCAtMzcwMSw3ICsz NzkwLDE5IEBAIGluaXRpYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIEpvaW5D b3N0V29ya3NwYWNlICp3b3Jrc3BhY2UsCiAJQXNzZXJ0KG91dGVyc3RhcnRzZWwgPD0gb3V0ZXJl bmRzZWwpOwogCUFzc2VydChpbm5lcnN0YXJ0c2VsIDw9IGlubmVyZW5kc2VsKTsKIAotCWRpc2Fi bGVkX25vZGVzID0gZW5hYmxlX21lcmdlam9pbiA/IDAgOiAxOworCS8qCisJICogV2UgZG9uJ3Qg ZGVjaWRlIHdoZXRoZXIgdG8gbWF0ZXJpYWxpemUgdGhlIGlubmVyIHBhdGggdW50aWwgd2UgZ2V0 IHRvCisJICogZmluYWxfY29zdF9tZXJnZWpvaW4oKSwgc28gd2UgZG9uJ3Qga25vdyB3aGV0aGVy IHRvIGNoZWNrIHRoZSBwZ3NfbWFzaworCSAqIGFnYWluIFBHU19NRVJHRUpPSU5fUExBSU4gb3Ig UEdTX01FUkdFSk9JTl9NQVRFUklBTElaRS4gSW5zdGVhZCwgd2UKKwkgKiBqdXN0IGFjY291bnQg Zm9yIGFueSBjaGlsZCBub2RlcyBoZXJlIGFuZCBhc3N1bWUgdGhhdCB0aGlzIG5vZGUgaXMgbm90 CisJICogaXRzbGVmIGRpc2FibGVkOyB3ZSBjYW4gc29ydCBvdXQgdGhlIGRldGFpbHMgaW4gZmlu YWxfY29zdF9tZXJnZWpvaW4oKS4KKwkgKgorCSAqIChXZSBjb3VsZCBiZSBtb3JlIHByZWNpc2Ug aGVyZSBieSBzZXR0aW5nIGRpc2FibGVkX25vZGVzIHRvIDEgYXQgdGhpcworCSAqIHN0YWdlIGlm IGJvdGggUEdTX01FUkdFSk9JTl9QTEFJTiBhbmQgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRSBh cmUKKwkgKiBkaXNhYmxlZCwgYnV0IHRoYXQgc2VlbXMgdG8gYWdhaW5zdCB0aGUgaWRlYSBvZiBt YWtpbmcgdGhpcyBmdW5jdGlvbgorCSAqIHByb2R1Y2UgYSBxdWljaywgb3B0aW1pc3RpYyBhcHBy b3hpbWF0aW9uIG9mIHRoZSBmaW5hbCBjb3N0LikKKwkgKi8KKwlkaXNhYmxlZF9ub2RlcyA9IDA7 CiAKIAkvKiBjb3N0IG9mIHNvdXJjZSBkYXRhICovCiAKQEAgLTM4ODAsOSArMzk4MSw3IEBAIGZp bmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJ ZG91YmxlCQltZXJnZWpvaW50dXBsZXMsCiAJCQkJcmVzY2FubmVkdHVwbGVzOwogCWRvdWJsZQkJ cmVzY2FucmF0aW87Ci0KLQkvKiBTZXQgdGhlIG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcy4gKi8K LQlwYXRoLT5qcGF0aC5wYXRoLmRpc2FibGVkX25vZGVzID0gd29ya3NwYWNlLT5kaXNhYmxlZF9u b2RlczsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFByb3RlY3Qgc29tZSBhc3N1 bXB0aW9ucyBiZWxvdyB0aGF0IHJvd2NvdW50cyBhcmVuJ3QgemVybyAqLwogCWlmIChpbm5lcl9w YXRoX3Jvd3MgPD0gMCkKQEAgLTQwMTIsMTYgKzQxMTEsMjAgQEAgZmluYWxfY29zdF9tZXJnZWpv aW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAkJcGF0aC0+bWF0ZXJpYWxp emVfaW5uZXIgPSBmYWxzZTsKIAogCS8qCi0JICogUHJlZmVyIG1hdGVyaWFsaXppbmcgaWYgaXQg bG9va3MgY2hlYXBlciwgdW5sZXNzIHRoZSB1c2VyIGhhcyBhc2tlZCB0bwotCSAqIHN1cHByZXNz IG1hdGVyaWFsaXphdGlvbi4KKwkgKiBJZiBtZXJnZSBqb2lucyB3aXRoIG1hdGVyaWFsaXphdGlv biBhcmUgZW5hYmxlZCwgdGhlbiBjaG9vc2UKKwkgKiBtYXRlcmlhbGl6YXRpb24gaWYgZWl0aGVy IChhKSBpdCBsb29rcyBjaGVhcGVyIG9yIChiKSBtZXJnZSBqb2lucworCSAqIHdpdGhvdXQgbWF0 ZXJpYWxpemF0aW9uIGFyZSBkaXNhYmxlZC4KIAkgKi8KLQllbHNlIGlmIChlbmFibGVfbWF0ZXJp YWwgJiYgbWF0X2lubmVyX2Nvc3QgPCBiYXJlX2lubmVyX2Nvc3QpCisJZWxzZSBpZiAoKGV4dHJh LT5wZ3NfbWFzayAmIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUpICE9IDAgJiYKKwkJCSAobWF0 X2lubmVyX2Nvc3QgPCBiYXJlX2lubmVyX2Nvc3QgfHwKKwkJCSAgKGV4dHJhLT5wZ3NfbWFzayAm IFBHU19NRVJHRUpPSU5fUExBSU4pID09IDApKQogCQlwYXRoLT5tYXRlcmlhbGl6ZV9pbm5lciA9 IHRydWU7CiAKIAkvKgotCSAqIEV2ZW4gaWYgbWF0ZXJpYWxpemluZyBkb2Vzbid0IGxvb2sgY2hl YXBlciwgd2UgKm11c3QqIGRvIGl0IGlmIHRoZQotCSAqIGlubmVyIHBhdGggaXMgdG8gYmUgdXNl ZCBkaXJlY3RseSAod2l0aG91dCBzb3J0aW5nKSBhbmQgaXQgZG9lc24ndAotCSAqIHN1cHBvcnQg bWFyay9yZXN0b3JlLgorCSAqIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBwbGFuIHNoYXBlcyBhcmUgZW5h YmxlZCBhbmQgd2hhdCB0aGUgY29zdHMgc2VlbSB0bworCSAqIGJlLCB3ZSAqbXVzdCogbWF0ZXJp YWxpemUgaXQgaWYgdGhlIGlubmVyIHBhdGggaXMgdG8gYmUgdXNlZCBkaXJlY3RseQorCSAqICh3 aXRob3V0IHNvcnRpbmcpIGFuZCBpdCBkb2Vzbid0IHN1cHBvcnQgbWFyay9yZXN0b3JlLiBQbGFu bmVyIGZhaWx1cmUKKwkgKiBpcyBub3QgYW4gb3B0aW9uIQogCSAqCiAJICogU2luY2UgdGhlIGlu bmVyIHNpZGUgbXVzdCBiZSBvcmRlcmVkLCBhbmQgb25seSBTb3J0cyBhbmQgSW5kZXhTY2FucyBj YW4KIAkgKiBjcmVhdGUgb3JkZXIgdG8gYmVnaW4gd2l0aCwgYW5kIHRoZXkgYm90aCBzdXBwb3J0 IG1hcmsvcmVzdG9yZSwgeW91CkBAIC00MDI5LDEwICs0MTMyLDYgQEAgZmluYWxfY29zdF9tZXJn ZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAkgKiBtZXJnZSBqb2lu cyBjYW4gKnByZXNlcnZlKiB0aGUgb3JkZXIgb2YgdGhlaXIgaW5wdXRzLCBzbyB0aGV5IGNhbiBi ZQogCSAqIHNlbGVjdGVkIGFzIHRoZSBpbnB1dCBvZiBhIG1lcmdlam9pbiwgYW5kIHRoZXkgZG9u J3Qgc3VwcG9ydAogCSAqIG1hcmsvcmVzdG9yZSBhdCBwcmVzZW50LgotCSAqCi0JICogV2UgZG9u J3QgdGVzdCB0aGUgdmFsdWUgb2YgZW5hYmxlX21hdGVyaWFsIGhlcmUsIGJlY2F1c2UKLQkgKiBt YXRlcmlhbGl6YXRpb24gaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzIGluIHRoaXMgY2FzZSwg YW5kIHR1cm5pbmcKLQkgKiBpdCBvZmYgZG9lcyBub3QgZW50aXRsZSB1cyB0byBkZWxpdmVyIGFu IGludmFsaWQgcGxhbi4KIAkgKi8KIAllbHNlIGlmIChpbm5lcnNvcnRrZXlzID09IE5JTCAmJgog CQkJICFFeGVjU3VwcG9ydHNNYXJrUmVzdG9yZShpbm5lcl9wYXRoKSkKQEAgLTQwNDYsMTAgKzQx NDUsMTEgQEAgZmluYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0 aCAqcGF0aCwKIAkgKiB0aG91Z2guCiAJICoKIAkgKiBTaW5jZSBtYXRlcmlhbGl6YXRpb24gaXMg YSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gaW4gdGhpcyBjYXNlLAotCSAqIHJhdGhlciB0aGFu IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3MsIHdlIHNraXAgaXQgaWYgZW5hYmxlX21hdGVyaWFs IGlzCi0JICogb2ZmLgorCSAqIHJhdGhlciB0aGFuIG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3Ms IHdlIHNraXAgaXQgaWYgbWF0ZXJpYWxpemF0aW9uIGlzCisJICogc3dpdGNoZWQgb2ZmLgogCSAq LwotCWVsc2UgaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBpbm5lcnNvcnRrZXlzICE9IE5JTCAmJgor CWVsc2UgaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFKSAh PSAwICYmCisJCQkgaW5uZXJzb3J0a2V5cyAhPSBOSUwgJiYKIAkJCSByZWxhdGlvbl9ieXRlX3Np emUoaW5uZXJfcGF0aF9yb3dzLAogCQkJCQkJCQlpbm5lcl9wYXRoLT5wYXRodGFyZ2V0LT53aWR0 aCkgPgogCQkJIHdvcmtfbWVtICogKFNpemUpIDEwMjQpCkBAIC00MDU3LDExICs0MTU3LDI5IEBA IGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgs CiAJZWxzZQogCQlwYXRoLT5tYXRlcmlhbGl6ZV9pbm5lciA9IGZhbHNlOwogCi0JLyogQ2hhcmdl IHRoZSByaWdodCBpbmNyZW1lbnRhbCBjb3N0IGZvciB0aGUgY2hvc2VuIGNhc2UgKi8KKwkvKiBH ZXQgdGhlIG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcywgbm90IHlldCBpbmNsdWRpbmcgdGhpcyBv bmUuICovCisJcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdvcmtzcGFjZS0+ZGlz YWJsZWRfbm9kZXM7CisKKwkvKgorCSAqIENoYXJnZSB0aGUgcmlnaHQgaW5jcmVtZW50YWwgY29z dCBmb3IgdGhlIGNob3NlbiBjYXNlLCBhbmQgdXBkYXRlCisJICogZW5hYmxlX21hc2sgYXMgYXBw cm9wcmlhdGUuCisJICovCiAJaWYgKHBhdGgtPm1hdGVyaWFsaXplX2lubmVyKQorCXsKIAkJcnVu X2Nvc3QgKz0gbWF0X2lubmVyX2Nvc3Q7CisJCWVuYWJsZV9tYXNrIHw9IFBHU19NRVJHRUpPSU5f TUFURVJJQUxJWkU7CisJfQogCWVsc2UKKwl7CiAJCXJ1bl9jb3N0ICs9IGJhcmVfaW5uZXJfY29z dDsKKwkJZW5hYmxlX21hc2sgfD0gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwl9CisKKwkvKiBJbmNy ZW1lbnRhbCBjb3VudCBvZiBkaXNhYmxlZCBub2RlcyBpZiB0aGlzIG5vZGUgaXMgZGlzYWJsZWQu ICovCisJaWYgKHBhdGgtPmpwYXRoLnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFi bGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlpZiAoKGV4dHJhLT5wZ3NfbWFz ayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzaykKKwkJKytwYXRoLT5qcGF0aC5wYXRoLmRp c2FibGVkX25vZGVzOwogCiAJLyogQ1BVIGNvc3RzICovCiAKQEAgLTQxOTksOSArNDMxNywxMyBA QCBpbml0aWFsX2Nvc3RfaGFzaGpvaW4oUGxhbm5lckluZm8gKnJvb3QsIEpvaW5Db3N0V29ya3Nw YWNlICp3b3Jrc3BhY2UsCiAJaW50CQkJbnVtYmF0Y2hlczsKIAlpbnQJCQludW1fc2tld19tY3Zz OwogCXNpemVfdAkJc3BhY2VfYWxsb3dlZDsJLyogdW51c2VkICovCisJdWludDY0CQllbmFibGVf bWFzayA9IFBHU19IQVNISk9JTjsKKworCWlmIChvdXRlcl9wYXRoLT5wYXJhbGxlbF93b3JrZXJz ID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOwogCiAJLyog Q291bnQgdXAgZGlzYWJsZWQgbm9kZXMuICovCi0JZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfaGFz aGpvaW4gPyAwIDogMTsKKwlkaXNhYmxlZF9ub2RlcyA9IChleHRyYS0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlkaXNhYmxlZF9ub2RlcyArPSBpbm5l cl9wYXRoLT5kaXNhYmxlZF9ub2RlczsKIAlkaXNhYmxlZF9ub2RlcyArPSBvdXRlcl9wYXRoLT5k aXNhYmxlZF9ub2RlczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXgg MjljYjYwZDZiMzUuLjY3ZDlkYzM1ZjQ0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMKQEAgLTIyMzIsOCArMjIzMiw4IEBAIGNoZWNrX2luZGV4X29ubHkoUmVsT3B0SW5mbyAq cmVsLCBJbmRleE9wdEluZm8gKmluZGV4KQogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7CiAK LQkvKiBJbmRleC1vbmx5IHNjYW5zIG11c3QgYmUgZW5hYmxlZCAqLwotCWlmICghZW5hYmxlX2lu ZGV4b25seXNjYW4pCisJLyogSWYgd2UncmUgbm90IGFsbG93ZWQgdG8gY29uc2lkZXIgaW5kZXgt b25seSBzY2FucywgZ2l2ZSB1cCBub3cgKi8KKwlpZiAoKHJlbC0+cGdzX21hc2sgJiBQR1NfQ09O U0lERVJfSU5ERVhPTkxZKSA9PSAwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2pvaW5wYXRoLmMKaW5kZXggMzY5NzNlYWIzYmUuLjFlNDI0NmI0OWQ1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKQEAgLTI3LDggKzI3LDkgQEAKICNp bmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgog Ci0vKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIGFkZF9wYXRoc190b19qb2lu cmVsKCkgKi8KKy8qIEhvb2tzIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIGFkZF9wYXRo c190b19qb2lucmVsKCkgKi8KIHNldF9qb2luX3BhdGhsaXN0X2hvb2tfdHlwZSBzZXRfam9pbl9w YXRobGlzdF9ob29rID0gTlVMTDsKK2pvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUgam9pbl9wYXRo X3NldHVwX2hvb2sgPSBOVUxMOwogCiAvKgogICogUGF0aHMgcGFyYW1ldGVyaXplZCBieSBhIHBh cmVudCByZWwgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgcGFyYW1ldGVyaXplZApAQCAtMTQ5LDYg KzE1MCwzMyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5mbyAqcm9vdCwKIAlleHRy YS5tZXJnZWNsYXVzZV9saXN0ID0gTklMOwogCWV4dHJhLnNqaW5mbyA9IHNqaW5mbzsKIAlleHRy YS5wYXJhbV9zb3VyY2VfcmVscyA9IE5VTEw7CisJZXh0cmEucGdzX21hc2sgPSBqb2lucmVsLT5w Z3NfbWFzazsKKworCS8qCisJICogR2l2ZSBleHRlbnNpb25zIGEgY2hhbmNlIHRvIHRha2UgY29u dHJvbC4gSW4gcGFydGljdWxhciwgYW4gZXh0ZW5zaW9uCisJICogbWlnaHQgd2FudCB0byBtb2Rp ZnkgZXh0cmEucGdzX21hc2suIEl0J3MgcG9zc2libGUgdG8gb3ZlcnJpZGUgcGdzX21hc2sKKwkg KiBvbiBhIHF1ZXJ5LXdpZGUgYmFzaXMgdXNpbmcgam9pbl9zZWFyY2hfaG9vaywgb3IgZm9yIGEg cGFydGljdWxhcgorCSAqIHJlbGF0aW9uIHVzaW5nIGpvaW5yZWxfc2V0dXBfaG9vaywgYnV0IGV4 dGVuc2lvbnMgdGhhdCB3YW50IHRvIHByb3ZpZGUKKwkgKiBkaWZmZXJlbnQgYWR2aWNlIGZvciB0 aGUgc2FtZSBqb2lucmVsIGJhc2VkIG9uIHRoZSBjaG9pY2Ugb2YgaW5uZXJyZWwKKwkgKiBhbmQg b3V0ZXJyZWwgd2lsbCBuZWVkIHRvIHVzZSB0aGlzIGhvb2suCisJICoKKwkgKiBBIHZlcnkgc2lt cGxlIHdheSBmb3IgYW4gZXh0ZW5zaW9uIHRvIHVzZSB0aGlzIGhvb2sgaXMgdG8gc2V0CisJICog ZXh0cmEucGdzX21hc2sgJj0gflBHU19KT0lOX0FOWSwgaWYgaXQgc2ltcGx5IGRvZXNuJ3Qgd2Fu dCBhbnkgb2YgdGhlCisJICogcGF0aHMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbCB0byBhZGRfcGF0 aHNfdG9fam9pbnJlbCgpIHRvIGJlIHNlbGVjdGVkLgorCSAqIEFuIGV4dGVuc2lvbiBjb3VsZCB1 c2UgdGhpcyB0ZWNobmlxdWUgdG8gY29uc3RyYWluIHRoZSBqb2luIG9yZGVyLAorCSAqIHNpbmNl IGl0IGNvdWxkIHRoZXJlYnkgYXJyYW5nZSB0byByZWplY3QgYWxsIHBhdGhzIGZyb20gam9pbiBv cmRlcnMKKwkgKiB0aGF0IGl0IGRvZXMgbm90IGxpa2UuIEFuIGV4dGVuc2lvbiBjYW4gYWxzbyBz ZWxlY3RpdmVseSBjbGVhciBiaXRzCisJICogZnJvbSBleHRyYS5wZ3NfbWFzayB0byBydWxlIG91 dCBzcGVjaWZpYyB0ZWNobmlxdWVzIGZvciBzcGVjaWZpYyBqb2lucywKKwkgKiBvciBjb3VsZCBl dmVuIHNldCBhZGRpdGlvbmFsIGJpdHMgdG8gcmUtYWxsb3cgbWV0aG9kcyBkaXNhYmxlZCBhdCBz b21lCisJICogaGlnaGVyIGxldmVsLgorCSAqCisJICogTkI6IEJlbG93IHRoaXMgcG9pbnQsIHRo aXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhcmVmdWwgdG8gcmVmZXJlbmNlCisJICogZXh0cmEucGdz X21hc2sgcmF0aGVyIHRoYW4gcmVsLT5wZ3NfbWFzayB0byBhdm9pZCBkaXNyZWdhcmRpbmcgYW55 CisJICogY2hhbmdlcyBtYWRlIGJ5IHRoZSBob29rIHdlJ3JlIGFib3V0IHRvIGNhbGwuCisJICov CisJaWYgKGpvaW5fcGF0aF9zZXR1cF9ob29rKQorCQlqb2luX3BhdGhfc2V0dXBfaG9vayhyb290 LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJIGpvaW50eXBlLCAmZXh0cmEp OwogCiAJLyoKIAkgKiBTZWUgaWYgdGhlIGlubmVyIHJlbGF0aW9uIGlzIHByb3ZhYmx5IHVuaXF1 ZSBmb3IgdGhpcyBvdXRlciByZWwuCkBAIC0yMDgsMTAgKzIzNiwxMCBAQCBhZGRfcGF0aHNfdG9f am9pbnJlbChQbGFubmVySW5mbyAqcm9vdCwKIAkvKgogCSAqIEZpbmQgcG90ZW50aWFsIG1lcmdl am9pbiBjbGF1c2VzLiAgV2UgY2FuIHNraXAgdGhpcyBpZiB3ZSBhcmUgbm90CiAJICogaW50ZXJl c3RlZCBpbiBkb2luZyBhIG1lcmdlam9pbi4gIEhvd2V2ZXIsIG1lcmdlam9pbiBtYXkgYmUgb3Vy IG9ubHkKLQkgKiB3YXkgb2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBvdmVy cmlkZSBlbmFibGVfbWVyZ2Vqb2luIGlmCi0JICogaXQncyBhIGZ1bGwgam9pbi4KKwkgKiB3YXkg b2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBpbiB0aGF0IGNhc2Ugd2UgZG9u J3QgY2FyZQorCSAqIHdoZXRoZXIgbWVyZ2Vqb2lucyBhcmUgZGlzYWJsZWQuCiAJICovCi0JaWYg KGVuYWJsZV9tZXJnZWpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQorCWlmICgoZXh0cmEu cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX0FOWSkgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZV TEwpCiAJCWV4dHJhLm1lcmdlY2xhdXNlX2xpc3QgPSBzZWxlY3RfbWVyZ2Vqb2luX2NsYXVzZXMo cm9vdCwKIAkJCQkJCQkJCQkJCQkJICBqb2lucmVsLAogCQkJCQkJCQkJCQkJCQkgIG91dGVycmVs LApAQCAtMzE5LDEwICszNDcsMTAgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8g KnJvb3QsCiAKIAkvKgogCSAqIDQuIENvbnNpZGVyIHBhdGhzIHdoZXJlIGJvdGggb3V0ZXIgYW5k IGlubmVyIHJlbGF0aW9ucyBtdXN0IGJlIGhhc2hlZAotCSAqIGJlZm9yZSBiZWluZyBqb2luZWQu ICBBcyBhYm92ZSwgZGlzcmVnYXJkIGVuYWJsZV9oYXNoam9pbiBmb3IgZnVsbAotCSAqIGpvaW5z LCBiZWNhdXNlIHRoZXJlIG1heSBiZSBubyBvdGhlciBhbHRlcm5hdGl2ZS4KKwkgKiBiZWZvcmUg YmVpbmcgam9pbmVkLiAgQXMgYWJvdmUsIHdoZW4gaXQncyBhIGZ1bGwgam9pbiwgd2UgbXVzdCB0 cnkgdGhpcworCSAqIGV2ZW4gd2hlbiB0aGUgcGF0aCB0eXBlIGlzIGRpc2FibGVkLCBiZWNhdXNl IGl0IG1heSBiZSBvdXIgb25seSBvcHRpb24uCiAJICovCi0JaWYgKGVuYWJsZV9oYXNoam9pbiB8 fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCisJaWYgKChleHRyYS5wZ3NfbWFzayAmIFBHU19IQVNI Sk9JTikgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWhhc2hfaW5uZXJfYW5kX291 dGVyKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKIAkJCQkJCQkgam9pbnR5cGUs ICZleHRyYSk7CiAKQEAgLTMzMSw3ICszNTksNyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFu bmVySW5mbyAqcm9vdCwKIAkgKiB0byB0aGUgc2FtZSBzZXJ2ZXIgYW5kIGFzc2lnbmVkIHRvIHRo ZSBzYW1lIHVzZXIgdG8gY2hlY2sgYWNjZXNzCiAJICogcGVybWlzc2lvbnMgYXMsIGdpdmUgdGhl IEZEVyBhIGNoYW5jZSB0byBwdXNoIGRvd24gam9pbnMuCiAJICovCi0JaWYgKGpvaW5yZWwtPmZk d3JvdXRpbmUgJiYKKwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX0ZPUkVJR05KT0lOKSAhPSAw ICYmIGpvaW5yZWwtPmZkd3JvdXRpbmUgJiYKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9y ZWlnbkpvaW5QYXRocykKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5QYXRo cyhyb290LCBqb2lucmVsLAogCQkJCQkJCQkJCQkJIG91dGVycmVsLCBpbm5lcnJlbCwKQEAgLTM0 MCw4ICszNjgsMTMgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJ LyoKIAkgKiA2LiBGaW5hbGx5LCBnaXZlIGV4dGVuc2lvbnMgYSBjaGFuY2UgdG8gbWFuaXB1bGF0 ZSB0aGUgcGF0aCBsaXN0LiAgVGhleQogCSAqIGNvdWxkIGFkZCBuZXcgcGF0aHMgKHN1Y2ggYXMg Q3VzdG9tUGF0aHMpIGJ5IGNhbGxpbmcgYWRkX3BhdGgoKSwgb3IKLQkgKiBhZGRfcGFydGlhbF9w YXRoKCkgaWYgcGFyYWxsZWwgYXdhcmUuICBUaGV5IGNvdWxkIGFsc28gZGVsZXRlIG9yIG1vZGlm eQotCSAqIHBhdGhzIGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUuCisJICogYWRkX3BhcnRpYWxfcGF0 aCgpIGlmIHBhcmFsbGVsIGF3YXJlLgorCSAqCisJICogSW4gdGhlb3J5LCBleHRlbnNpb25zIGNv dWxkIGFsc28gdXNlIHRoaXMgaG9vayB0byBkZWxldGUgb3IgbW9kaWZ5CisJICogcGF0aHMgYWRk ZWQgYnkgdGhlIGNvcmUgY29kZSwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgZGlmZmljdWx0IHRv IG1ha2UKKwkgKiB3b3JrLCBzaW5jZSBpdCdzIHRvbyBsYXRlIHRvIGdldCBiYWNrIGFueSBwYXRo cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuCisJICogZGlzY2FyZGVkIGJ5IGFkZF9wYXRoKCkgb3Ig YWRkX3BhcnRpYWxfcGF0aCgpLiBJZiB5b3UncmUgdHJ5aW5nIHRvCisJICogc3VwcHJlc3MgcGF0 aHMsIGNvbnNpZGVyIHVzaW5nIGpvaW5fcGF0aF9zZXR1cF9ob29rIGluc3RlYWQuCiAJICovCiAJ aWYgKHNldF9qb2luX3BhdGhsaXN0X2hvb2spCiAJCXNldF9qb2luX3BhdGhsaXN0X2hvb2socm9v dCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLApAQCAtNjg4LDcgKzcyMSw3IEBAIGdldF9t ZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCUxp c3QJICAgKnBoX2xhdGVyYWxfdmFyczsKIAogCS8qIE9idmlvdXNseSBub3QgaWYgaXQncyBkaXNh YmxlZCAqLwotCWlmICghZW5hYmxlX21lbW9pemUpCisJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQ R1NfTkVTVExPT1BfTUVNT0laRSkgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAtODQz LDYgKzg3Niw3IEBAIHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAg UGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkgIExpc3QgKnBhdGhrZXlzLAogCQkJCSAgSm9pblR5cGUg am9pbnR5cGUsCisJCQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkgIEpvaW5QYXRo RXh0cmFEYXRhICpleHRyYSkKIHsKIAlSZWxpZHMJCXJlcXVpcmVkX291dGVyOwpAQCAtOTI1LDYg Kzk1OSw3IEBAIHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG1ldGhv ZG9sb2d5IHdvcnRod2hpbGUuCiAJICovCiAJaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3 b3Jrc3BhY2UsIGpvaW50eXBlLAorCQkJCQkJICBuZXN0bG9vcF9zdWJ0eXBlIHwgUEdTX0NPTlNJ REVSX05PTlBBUlRJQUwsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlubmVyX3BhdGgsIGV4dHJhKTsK IAogCWlmIChhZGRfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9k ZXMsCkBAIC05NjIsNiArOTk3LDcgQEAgdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCSAgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJCSAgTGlzdCAqcGF0 aGtleXMsCiAJCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJICB1aW50NjQgbmVzdGxv b3Bfc3VidHlwZSwKIAkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewogCUpvaW5D b3N0V29ya3NwYWNlIHdvcmtzcGFjZTsKQEAgLTEwMDksNyArMTA0NSw3IEBAIHRyeV9wYXJ0aWFs X25lc3Rsb29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogQmVmb3JlIGNyZWF0aW5nIGEg cGF0aCwgZ2V0IGEgcXVpY2sgbG93ZXIgYm91bmQgb24gd2hhdCBpdCBpcyBsaWtlbHkgdG8KIAkg KiBjb3N0LiAgQmFpbCBvdXQgcmlnaHQgYXdheSBpZiBpdCBsb29rcyB0ZXJyaWJsZS4KIAkgKi8K LQlpbml0aWFsX2Nvc3RfbmVzdGxvb3Aocm9vdCwgJndvcmtzcGFjZSwgam9pbnR5cGUsCisJaW5p dGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpvaW50eXBlLCBuZXN0bG9vcF9z dWJ0eXBlLAogCQkJCQkJICBvdXRlcl9wYXRoLCBpbm5lcl9wYXRoLCBleHRyYSk7CiAJaWYgKCFh ZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFjZS5kaXNhYmxlZF9ub2Rl cywKIAkJCQkJCQkJICAgd29ya3NwYWNlLnRvdGFsX2Nvc3QsIHBhdGhrZXlzKSkKQEAgLTE4NTcs MTQgKzE4OTMsMTQgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJ aWYgKG5lc3Rqb2luT0spCiAJewogCQkvKgotCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRo ZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1bmxlc3MKLQkJICogZW5hYmxlX21hdGVyaWFsIGlzIG9m ZiBvciB0aGUgcGF0aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzCi0JCSAqIG91dHB1dCBh bnl3YXkuCisJCSAqIENvbnNpZGVyIG1hdGVyaWFsaXppbmcgdGhlIGNoZWFwZXN0IGlubmVyIHBh dGgsIHVubGVzcyB0aGF0IGlzCisJCSAqIGRpc2FibGVkIG9yIHRoZSBwYXRoIGluIHF1ZXN0aW9u IG1hdGVyaWFsaXplcyBpdHMgb3V0cHV0IGFueXdheS4KIAkJICovCi0JCWlmIChlbmFibGVfbWF0 ZXJpYWwgJiYgaW5uZXJfY2hlYXBlc3RfdG90YWwgIT0gTlVMTCAmJgorCQlpZiAoKGV4dHJhLT5w Z3NfbWFzayAmIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJaW5uZXJfY2hl YXBlc3RfdG90YWwgIT0gTlVMTCAmJgogCQkJIUV4ZWNNYXRlcmlhbGl6ZXNPdXRwdXQoaW5uZXJf Y2hlYXBlc3RfdG90YWwtPnBhdGh0eXBlKSkKIAkJCW1hdHBhdGggPSAoUGF0aCAqKQotCQkJCWNy ZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQkJ Y3JlYXRlX21hdGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFwZXN0X3RvdGFsLCB0cnVl KTsKIAl9CiAKIAlmb3JlYWNoKGxjMSwgb3V0ZXJyZWwtPnBhdGhsaXN0KQpAQCAtMTkwNyw2ICsx OTQzLDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJ CSAgaW5uZXJwYXRoLAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAogCQkJCQkJCQkgIGpvaW50 eXBlLAorCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9QTEFJTiwKIAkJCQkJCQkJICBleHRyYSk7CiAK IAkJCQkvKgpAQCAtMTkyMyw2ICsxOTYwLDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgIG1wYXRoLAogCQkJCQkJCQkJICBtZXJnZV9wYXRoa2V5 cywKIAkJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpF LAogCQkJCQkJCQkJICBleHRyYSk7CiAJCQl9CiAKQEAgLTE5MzQsNiArMTk3Miw3IEBAIG1hdGNo X3Vuc29ydGVkX291dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIG1hdHBhdGgsCiAJ CQkJCQkJCSAgbWVyZ2VfcGF0aGtleXMsCiAJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCSAg UEdTX05FU1RMT09QX01BVEVSSUFMSVpFLAogCQkJCQkJCQkgIGV4dHJhKTsKIAkJfQogCkBAIC0y MDUwLDE2ICsyMDg5LDE3IEBAIGNvbnNpZGVyX3BhcmFsbGVsX25lc3Rsb29wKFBsYW5uZXJJbmZv ICpyb290LAogCiAJLyoKIAkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVzdCBp bm5lciBwYXRoLCB1bmxlc3M6IDEpCi0JICogZW5hYmxlX21hdGVyaWFsIGlzIG9mZiwgMikgdGhl IGNoZWFwZXN0IGlubmVyIHBhdGggaXMgbm90CisJICogbWF0ZXJpYWxpemF0aW9uIGlzIGRpc2Fi bGVkIGhlcmUsIDIpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5vdAogCSAqIHBhcmFsbGVs LXNhZmUsIDMpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIHBhcmFtZXRlcml6ZWQgYnkgdGhl IG91dGVyCiAJICogcmVsLCBvciA0KSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBtYXRlcmlhbGl6 ZXMgaXRzIG91dHB1dCBhbnl3YXkuCiAJICovCi0JaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBpbm5l cl9jaGVhcGVzdF90b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgorCWlmICgoZXh0cmEtPnBnc19tYXNr ICYgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFKSAhPSAwICYmCisJCWlubmVyX2NoZWFwZXN0X3Rv dGFsLT5wYXJhbGxlbF9zYWZlICYmCiAJCSFQQVRIX1BBUkFNX0JZX1JFTChpbm5lcl9jaGVhcGVz dF90b3RhbCwgb3V0ZXJyZWwpICYmCiAJCSFFeGVjTWF0ZXJpYWxpemVzT3V0cHV0KGlubmVyX2No ZWFwZXN0X3RvdGFsLT5wYXRodHlwZSkpCiAJewogCQltYXRwYXRoID0gKFBhdGggKikKLQkJCWNy ZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQlj cmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBlc3RfdG90YWwsIHRydWUp OwogCQlBc3NlcnQobWF0cGF0aC0+cGFyYWxsZWxfc2FmZSk7CiAJfQogCkBAIC0yMDg5LDcgKzIx MjksOCBAQCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQljb250aW51ZTsKIAogCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVs LCBvdXRlcnBhdGgsIGlubmVycGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBl eHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJCSAgUEdTX05F U1RMT09QX1BMQUlOLCBleHRyYSk7CiAKIAkJCS8qCiAJCQkgKiBUcnkgZ2VuZXJhdGluZyBhIG1l bW9pemUgcGF0aCBhbmQgc2VlIGlmIHRoYXQgbWFrZXMgdGhlIG5lc3RlZApAQCAtMjEwMCwxMyAr MjE0MSwxNSBAQCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCSBleHRyYSk7CiAJCQlpZiAobXBhdGggIT0gTlVMTCkKIAkJCQl0cnlfcGFydGlh bF9uZXN0bG9vcF9wYXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbXBhdGgsCi0JCQkJCQkJ CQkJICBwYXRoa2V5cywgam9pbnR5cGUsIGV4dHJhKTsKKwkJCQkJCQkJCQkgIHBhdGhrZXlzLCBq b2ludHlwZSwKKwkJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpFLCBleHRyYSk7CiAJCX0K IAogCQkvKiBBbHNvIGNvbnNpZGVyIG1hdGVyaWFsaXplZCBmb3JtIG9mIHRoZSBjaGVhcGVzdCBp bm5lciBwYXRoICovCiAJCWlmIChtYXRwYXRoICE9IE5VTEwpCiAJCQl0cnlfcGFydGlhbF9uZXN0 bG9vcF9wYXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbWF0cGF0aCwKLQkJCQkJCQkJCSAg cGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlw ZSwKKwkJCQkJCQkJCSAgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFLCBleHRyYSk7CiAJfQogfQog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMKaW5kZXggNTQ3M2Q5NzUxMmEuLjE4YTM2 NTQ3MjBiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5jCkBAIC00OTksMTggKzQ5 OSwxOSBAQCBjcmVhdGVfdGlkc2Nhbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsKQogCUxpc3QJICAgKnRpZHF1YWxzOwogCUxpc3QJICAgKnRpZHJhbmdlcXVhbHM7CiAJ Ym9vbAkJaXNDdXJyZW50T2Y7CisJYm9vbAkJZW5hYmxlZCA9IChyZWwtPnBnc19tYXNrICYgUEdT X1RJRFNDQU4pICE9IDA7CiAKIAkvKgogCSAqIElmIGFueSBzdWl0YWJsZSBxdWFscyBleGlzdCBp biB0aGUgcmVsJ3MgYmFzZXJlc3RyaWN0IGxpc3QsIGdlbmVyYXRlIGEKIAkgKiBwbGFpbiAodW5w YXJhbWV0ZXJpemVkKSBUaWRQYXRoIHdpdGggdGhlbS4KIAkgKgotCSAqIFdlIHNraXAgdGhpcyB3 aGVuIGVuYWJsZV90aWRzY2FuID0gZmFsc2UsIGV4Y2VwdCB3aGVuIHRoZSBxdWFsIGlzCisJICog V2Ugc2tpcCB0aGlzIHdoZW4gVElEIHNjYW5zIGFyZSBkaXNhYmxlZCwgZXhjZXB0IHdoZW4gdGhl IHF1YWwgaXMKIAkgKiBDdXJyZW50T2ZFeHByLiBJbiB0aGF0IGNhc2UsIGEgVElEIHNjYW4gaXMg dGhlIG9ubHkgY29ycmVjdCBwYXRoLgogCSAqLwogCXRpZHF1YWxzID0gVGlkUXVhbEZyb21SZXN0 cmljdEluZm9MaXN0KHJvb3QsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbywgcmVsLAogCQkJCQkJCQkJ CSAgICZpc0N1cnJlbnRPZik7CiAKLQlpZiAodGlkcXVhbHMgIT0gTklMICYmIChlbmFibGVfdGlk c2NhbiB8fCBpc0N1cnJlbnRPZikpCisJaWYgKHRpZHF1YWxzICE9IE5JTCAmJiAoZW5hYmxlZCB8 fCBpc0N1cnJlbnRPZikpCiAJewogCQkvKgogCQkgKiBUaGlzIHBhdGggdXNlcyBubyBqb2luIGNs YXVzZXMsIGJ1dCBpdCBjb3VsZCBzdGlsbCBoYXZlIHJlcXVpcmVkCkBAIC01MzIsNyArNTMzLDcg QEAgY3JlYXRlX3RpZHNjYW5fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCkKIAl9CiAKIAkvKiBTa2lwIHRoZSByZXN0IGlmIFRJRCBzY2FucyBhcmUgZGlzYWJsZWQuICov Ci0JaWYgKCFlbmFibGVfdGlkc2NhbikKKwlpZiAoIWVuYWJsZWQpCiAJCXJldHVybiBmYWxzZTsK IAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggZWI0ODA2 YjA4NGEuLmMyNmU4NDFmNTM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCkBAIC02NTA1LDcgKzY1MDUsNyBAQCBQbGFuICoKIG1hdGVyaWFsaXplX2ZpbmlzaGVkX3Bs YW4oUGxhbiAqc3VicGxhbikKIHsKIAlQbGFuCSAgICptYXRwbGFuOwotCVBhdGgJCW1hdHBhdGg7 CQkvKiBkdW1teSBmb3IgcmVzdWx0IG9mIGNvc3RfbWF0ZXJpYWwgKi8KKwlQYXRoCQltYXRwYXRo OwkJLyogZHVtbXkgZm9yIGNvc3RfbWF0ZXJpYWwgKi8KIAlDb3N0CQlpbml0cGxhbl9jb3N0Owog CWJvb2wJCXVuc2FmZV9pbml0cGxhbnM7CiAKQEAgLTY1MjcsNyArNjUyNyw5IEBAIG1hdGVyaWFs aXplX2ZpbmlzaGVkX3BsYW4oUGxhbiAqc3VicGxhbikKIAlzdWJwbGFuLT50b3RhbF9jb3N0IC09 IGluaXRwbGFuX2Nvc3Q7CiAKIAkvKiBTZXQgY29zdCBkYXRhICovCisJbWF0cGF0aC5wYXJlbnQg PSBOVUxMOwogCWNvc3RfbWF0ZXJpYWwoJm1hdHBhdGgsCisJCQkJICBlbmFibGVfbWF0ZXJpYWws CiAJCQkJICBzdWJwbGFuLT5kaXNhYmxlZF9ub2RlcywKIAkJCQkgIHN1YnBsYW4tPnN0YXJ0dXBf Y29zdCwKIAkJCQkgIHN1YnBsYW4tPnRvdGFsX2Nvc3QsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMKaW5kZXggN2E2YjhiNzQ5ZjIuLjc1N2JkYzdiMWRlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vcGxhbm5lci5jCkBAIC00NjIsNiArNDYyLDUzIEBAIHN0YW5kYXJkX3BsYW5uZXIo UXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25z LAogCQl0dXBsZV9mcmFjdGlvbiA9IDAuMDsKIAl9CiAKKwkvKgorCSAqIENvbXB1dGUgdGhlIGlu aXRpYWwgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2suCisJICoKKwkgKiBTb21lIHN0cmF0 ZWdpZXMsIHN1Y2ggYXMgUEdTX0ZPUkVJR05KT0lOLCBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgZW5h YmxlXyoKKwkgKiBHVUMsIGFuZCBzbyB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFyZSBhbHdheXMg c2V0IGluIHRoZSBkZWZhdWx0CisJICogc3RyYXRlZ3kgbWFzay4KKwkgKgorCSAqIEl0IG1heSBz ZWVtIHN1cnByaXNpbmcgdGhhdCBlbmFibGVfaW5kZXhzY2FuIHNldHMgYm90aCBQR1NfSU5ERVhT Q0FOCisJICogYW5kIFBHU19JTkRFWE9OTFlTQ0FOLiBIb3dldmVyLCB0aGUgaGlzdG9yaWNhbCBi ZWhhdmlvciBvZiB0aGlzIEdVQworCSAqIGNvcnJlc3BvbmRzIHRvIHRoaXMgZXhhY3RseTogZW5h YmxlX2luZGV4c2Nhbj1vZmYgZGlzYWJsZXMgYm90aAorCSAqIGluZGV4LXNjYW4gYW5kIGluZGV4 LW9ubHkgc2NhbiBwYXRocywgd2hlcmVhcyBlbmFibGVfaW5kZXhvbmx5c2Nhbj1vZmYKKwkgKiBj b252ZXJ0cyB0aGUgaW5kZXgtb25seSBzY2FuIHBhdGhzIHRoYXQgd2Ugd291bGQgaGF2ZSBjb25z aWRlcmVkIGludG8KKwkgKiBpbmRleCBzY2FuIHBhdGhzLgorCSAqLworCWdsb2ItPmRlZmF1bHRf cGdzX21hc2sgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCB8IFBHU19GT1JFSUdOSk9J TiB8CisJCVBHU19HQVRIRVIgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlpZiAoZW5hYmxl X3RpZHNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX1RJRFNDQU47CisJaWYg KGVuYWJsZV9zZXFzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19TRVFTQ0FO OworCWlmIChlbmFibGVfaW5kZXhzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBH U19JTkRFWFNDQU4gfCBQR1NfSU5ERVhPTkxZU0NBTjsKKwlpZiAoZW5hYmxlX2luZGV4b25seXNj YW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0NPTlNJREVSX0lOREVYT05MWTsK KwlpZiAoZW5hYmxlX2JpdG1hcHNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdT X0JJVE1BUFNDQU47CisJaWYgKGVuYWJsZV9tZXJnZWpvaW4pCisJeworCQlnbG9iLT5kZWZhdWx0 X3Bnc19tYXNrIHw9IFBHU19NRVJHRUpPSU5fUExBSU47CisJCWlmIChlbmFibGVfbWF0ZXJpYWwp CisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkU7 CisJfQorCWlmIChlbmFibGVfbmVzdGxvb3ApCisJeworCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNr IHw9IFBHU19ORVNUTE9PUF9QTEFJTjsKKwkJaWYgKGVuYWJsZV9tYXRlcmlhbCkKKwkJCWdsb2It PmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX05FU1RMT09QX01BVEVSSUFMSVpFOworCQlpZiAoZW5h YmxlX21lbW9pemUpCisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19ORVNUTE9PUF9N RU1PSVpFOworCX0KKwlpZiAoZW5hYmxlX2hhc2hqb2luKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19t YXNrIHw9IFBHU19IQVNISk9JTjsKKwlpZiAoZW5hYmxlX2dhdGhlcm1lcmdlKQorCQlnbG9iLT5k ZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19HQVRIRVJfTUVSR0U7CisJaWYgKGVuYWJsZV9wYXJ0aXRp b253aXNlX2pvaW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0NPTlNJREVSX1BB UlRJVElPTldJU0U7CisKIAkvKiBBbGxvdyBwbHVnaW5zIHRvIHRha2UgY29udHJvbCBhZnRlciB3 ZSd2ZSBpbml0aWFsaXplZCAiZ2xvYiIgKi8KIAlpZiAocGxhbm5lcl9zZXR1cF9ob29rKQogCQko KnBsYW5uZXJfc2V0dXBfaG9vaykgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJpbmcsICZ0dXBsZV9m cmFjdGlvbiwgZXMpOwpAQCAtMzk1Myw2ICs0MDAwLDkgQEAgbWFrZV9ncm91cGluZ19yZWwoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJaXNfcGFyYWxsZWxfc2Fm ZShyb290LCBoYXZpbmdRdWFsKSkKIAkJZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0g dHJ1ZTsKIAorCS8qIEFzc3VtZSB0aGF0IHRoZSBzYW1lIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVn aWVzIGFyZSBhbGxvd2VkICovCisJZ3JvdXBlZF9yZWwtPnBnc19tYXNrID0gaW5wdXRfcmVsLT5w Z3NfbWFzazsKKwogCS8qCiAJICogSWYgdGhlIGlucHV0IHJlbCBiZWxvbmdzIHRvIGEgc2luZ2xl IEZEVywgc28gZG9lcyB0aGUgZ3JvdXBlZCByZWwuCiAJICovCkBAIC01MzQ2LDYgKzUzOTYsOSBA QCBjcmVhdGVfb3JkZXJlZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAlpZiAoaW5wdXRfcmVs LT5jb25zaWRlcl9wYXJhbGxlbCAmJiB0YXJnZXRfcGFyYWxsZWxfc2FmZSkKIAkJb3JkZXJlZF9y ZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gdHJ1ZTsKIAorCS8qIEFzc3VtZSB0aGF0IHRoZSBzYW1l IHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVnaWVzIGFyZSBhbGxvd2VkLiAqLworCW9yZGVyZWRfcmVs LT5wZ3NfbWFzayA9IGlucHV0X3JlbC0+cGdzX21hc2s7CisKIAkvKgogCSAqIElmIHRoZSBpbnB1 dCByZWwgYmVsb25ncyB0byBhIHNpbmdsZSBGRFcsIHNvIGRvZXMgdGhlIG9yZGVyZWRfcmVsLgog CSAqLwpAQCAtNzQyNiw2ICs3NDc5LDcgQEAgY3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCWdyb3VwZWRfcmVsLT5yZWxpZHMpOwogCXBh cnRpYWxseV9ncm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPQogCQlncm91cGVkX3JlbC0+ Y29uc2lkZXJfcGFyYWxsZWw7CisJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wZ3NfbWFzayA9IGdy b3VwZWRfcmVsLT5wZ3NfbWFzazsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnJlbG9wdGtpbmQg PSBncm91cGVkX3JlbC0+cmVsb3B0a2luZDsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnNlcnZl cmlkID0gZ3JvdXBlZF9yZWwtPnNlcnZlcmlkOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+dXNl cmlkID0gZ3JvdXBlZF9yZWwtPnVzZXJpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jCmluZGV4IDBmMTI0MjFiYWMwLi43Mjk1NDM4YWQyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9wYXRobm9kZS5jCkBAIC0xNjUzLDcgKzE2NTMsNyBAQCBjcmVhdGVfZ3JvdXBfcmVzdWx0 X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKICAqCSAgcGF0aG5vZGUu CiAgKi8KIE1hdGVyaWFsUGF0aCAqCi1jcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpy ZWwsIFBhdGggKnN1YnBhdGgpCitjcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWws IFBhdGggKnN1YnBhdGgsIGJvb2wgZW5hYmxlZCkKIHsKIAlNYXRlcmlhbFBhdGggKnBhdGhub2Rl ID0gbWFrZU5vZGUoTWF0ZXJpYWxQYXRoKTsKIApAQCAtMTY3Miw2ICsxNjcyLDcgQEAgY3JlYXRl X21hdGVyaWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoKQogCXBhdGhub2Rl LT5zdWJwYXRoID0gc3VicGF0aDsKIAogCWNvc3RfbWF0ZXJpYWwoJnBhdGhub2RlLT5wYXRoLAor CQkJCSAgZW5hYmxlZCwKIAkJCQkgIHN1YnBhdGgtPmRpc2FibGVkX25vZGVzLAogCQkJCSAgc3Vi cGF0aC0+c3RhcnR1cF9jb3N0LAogCQkJCSAgc3VicGF0aC0+dG90YWxfY29zdCwKQEAgLTE3MjQs OCArMTcyNSwxNSBAQCBjcmVhdGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgsCiAJcGF0aG5vZGUtPmVzdF91bmlxdWVfa2V5cyA9 IDAuMDsKIAlwYXRobm9kZS0+ZXN0X2hpdF9yYXRpbyA9IDAuMDsKIAotCS8qIHdlIHNob3VsZCBu b3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBlbmFibGVfbWVtb2l6ZT1mYWxzZSAqLwot CUFzc2VydChlbmFibGVfbWVtb2l6ZSk7CisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGJlIGFza2Vk IHRvIGdlbmVyYXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4gbWVtb2l6YXRpb24gaXMKKwkgKiBkaXNh YmxlZCwgc28gc2V0IG91ciBjb3VudCBvZiBkaXNhYmxlZCBub2RlcyBlcXVhbCB0byB0aGUgc3Vi cGF0aCdzCisJICogY291bnQuCisJICoKKwkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGFsc28gQXNz ZXJ0IHRoYXQgbWVtb2l6YXRpb24gaXMgZW5hYmxlZCwgYnV0IHRoZQorCSAqIHZhbHVlIG9mIGVu YWJsZV9tZW1vaXplIGlzIG5vdCBjb250cm9sbGluZzogd2hhdCB3ZSB3b3VsZCBuZWVkIHRvIGNo ZWNrCisJICogaXMgdGhhdCB0aGUgSm9pblBhdGhFeHRyYURhdGEncyBwZ3NfbWFzayBpbmNsdWRl ZCBQR1NfTkVTVExPT1BfTUVNT0laRS4KKwkgKi8KIAlwYXRobm9kZS0+cGF0aC5kaXNhYmxlZF9u b2RlcyA9IHN1YnBhdGgtPmRpc2FibGVkX25vZGVzOwogCiAJLyoKQEAgLTM5NTgsMTMgKzM5NjYs MTYgQEAgcmVwYXJhbWV0ZXJpemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwK IAkJCXsKIAkJCQlNYXRlcmlhbFBhdGggKm1wYXRoID0gKE1hdGVyaWFsUGF0aCAqKSBwYXRoOwog CQkJCVBhdGgJICAgKnNwYXRoID0gbXBhdGgtPnN1YnBhdGg7CisJCQkJYm9vbAkJZW5hYmxlZDsK IAogCQkJCXNwYXRoID0gcmVwYXJhbWV0ZXJpemVfcGF0aChyb290LCBzcGF0aCwKIAkJCQkJCQkJ CQkJcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCWxvb3BfY291bnQpOworCQkJCWVuYWJsZWQg PQorCQkJCQkobXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPD0gc3BhdGgtPmRpc2FibGVkX25v ZGVzKTsKIAkJCQlpZiAoc3BhdGggPT0gTlVMTCkKIAkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJcmV0 dXJuIChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgc3BhdGgpOworCQkJCXJldHVy biAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHNwYXRoLCBlbmFibGVkKTsKIAkJ CX0KIAkJY2FzZSBUX01lbW9pemU6CiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0 LmMKaW5kZXggYTkwZTFjOWVlNmIuLjFiMjBiYzgwNWU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGxhbmNhdC5jCkBAIC01NzYsNiArNTc2LDkgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5l ckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkgKiBB bGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhlIGluZm8gd2Ugb2J0YWluZWQgZnJv bSB0aGUKIAkgKiBjYXRhbG9ncy4gIEFjdGlvbnMgbWlnaHQgaW5jbHVkZSBhbHRlcmluZyB0aGUg YXNzdW1lZCByZWxhdGlvbiBzaXplLAogCSAqIHJlbW92aW5nIGFuIGluZGV4LCBvciBhZGRpbmcg YSBoeXBvdGhldGljYWwgaW5kZXggdG8gdGhlIGluZGV4bGlzdC4KKwkgKgorCSAqIEFuIGV4dGVu c2lvbiBjYW4gYWxzbyBtb2RpZnkgcmVsLT5wZ3NfbWFzayBoZXJlIHRvIGNvbnRyb2wgcGF0aAor CSAqIGdlbmVyYXRpb24uCiAJICovCiAJaWYgKGdldF9yZWxhdGlvbl9pbmZvX2hvb2spCiAJCSgq Z2V0X3JlbGF0aW9uX2luZm9faG9vaykgKHJvb3QsIHJlbGF0aW9uT2JqZWN0SWQsIGluaHBhcmVu dCwgcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCBmNTc2MzFlODc2 Zi4uYTcxNGM4M2YxYmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jl bG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTQ3 LDYgKzQ3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSm9pbkhhc2hFbnRyeQogCVJlbE9wdEluZm8gKmpv aW5fcmVsOwogfSBKb2luSGFzaEVudHJ5OwogCisvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBj b250cm9sIGR1cmluZyBqb2lucmVsIHNldHVwICovCitqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBq b2lucmVsX3NldHVwX2hvb2sgPSBOVUxMOworCiBzdGF0aWMgdm9pZCBidWlsZF9qb2lucmVsX3Rs aXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQlSZWxP cHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkJCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLApAQCAt MjI1LDYgKzIyOCw3IEBAIGJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCBy ZWxpZCwgUmVsT3B0SW5mbyAqcGFyZW50KQogCXJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290 LT50dXBsZV9mcmFjdGlvbiA+IDApOwogCXJlbC0+Y29uc2lkZXJfcGFyYW1fc3RhcnR1cCA9IGZh bHNlOwkvKiBtaWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLwogCXJlbC0+Y29uc2lkZXJfcGFyYWxs ZWwgPSBmYWxzZTsgLyogbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8KKwlyZWwtPnBnc19tYXNr ID0gcm9vdC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsKIAlyZWwtPnJlbHRhcmdldCA9IGNyZWF0 ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CiAJcmVsLT5wYXRobGlzdCA9IE5JTDsKIAlyZWwtPnBwaWxp c3QgPSBOSUw7CkBAIC04MjIsNiArODI2LDcgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsCiAJam9pbnJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlv biA+IDApOwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsKIAlqb2lu cmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IGZhbHNlOworCWpvaW5yZWwtPnBnc19tYXNrID0gcm9v dC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsKIAlqb2lucmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVf ZW1wdHlfcGF0aHRhcmdldCgpOwogCWpvaW5yZWwtPnBhdGhsaXN0ID0gTklMOwogCWpvaW5yZWwt PnBwaWxpc3QgPSBOSUw7CkBAIC05MzQsMTAgKzkzOSw2IEBAIGJ1aWxkX2pvaW5fcmVsKFBsYW5u ZXJJbmZvICpyb290LAogCSAqLwogCWpvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnMgPSBoYXNfcmVs ZXZhbnRfZWNsYXNzX2pvaW5jbGF1c2Uocm9vdCwgam9pbnJlbCk7CiAKLQkvKiBTdG9yZSB0aGUg cGFydGl0aW9uIGluZm9ybWF0aW9uLiAqLwotCWJ1aWxkX2pvaW5yZWxfcGFydGl0aW9uX2luZm8o cm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywKLQkJCQkJCQkJIHJl c3RyaWN0bGlzdCk7Ci0KIAkvKgogCSAqIFNldCBlc3RpbWF0ZXMgb2YgdGhlIGpvaW5yZWwncyBz aXplLgogCSAqLwpAQCAtOTYzLDYgKzk2NCwxOSBAQCBidWlsZF9qb2luX3JlbChQbGFubmVySW5m byAqcm9vdCwKIAkJaXNfcGFyYWxsZWxfc2FmZShyb290LCAoTm9kZSAqKSBqb2lucmVsLT5yZWx0 YXJnZXQtPmV4cHJzKSkKIAkJam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJ LyoKKwkgKiBBbGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhlIG5ldyBqb2lucmVs J3MgcHJvcGVydGllcy4gQWN0aW9ucworCSAqIG1pZ2h0IGluY2x1ZGUgYWx0ZXJpbmcgdGhlIHNp emUgZXN0aW1hdGUsIGNsZWFyaW5nIGNvbnNpZGVyX3BhcmFsbGVsLAorCSAqIG9yIGFkanVzdGlu ZyBwZ3NfbWFzay4KKwkgKi8KKwlpZiAoam9pbnJlbF9zZXR1cF9ob29rKQorCQkoKmpvaW5yZWxf c2V0dXBfaG9vaykgKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8s CisJCQkJCQkJICAgcmVzdHJpY3RsaXN0KTsKKworCS8qIFN0b3JlIHRoZSBwYXJ0aXRpb24gaW5m b3JtYXRpb24uICovCisJYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVs LCBvdXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsK KwogCS8qIEFkZCB0aGUgam9pbnJlbCB0byB0aGUgUGxhbm5lckluZm8uICovCiAJYWRkX2pvaW5f cmVsKHJvb3QsIGpvaW5yZWwpOwogCkBAIC0xMDE5LDYgKzEwMzMsNyBAQCBidWlsZF9jaGlsZF9q b2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCWpvaW5y ZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlqb2lu cmVsLT5jb25zaWRlcl9wYXJhbV9zdGFydHVwID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJf cGFyYWxsZWwgPSBmYWxzZTsKKwlqb2lucmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1 bHRfcGdzX21hc2s7CiAJam9pbnJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJn ZXQoKTsKIAlqb2lucmVsLT5wYXRobGlzdCA9IE5JTDsKIAlqb2lucmVsLT5wcGlsaXN0ID0gTklM OwpAQCAtMTEwMiwxMCArMTExNyw2IEBAIGJ1aWxkX2NoaWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJICovCiAJam9pbnJlbC0+aGFzX2VjbGFz c19qb2lucyA9IHBhcmVudF9qb2lucmVsLT5oYXNfZWNsYXNzX2pvaW5zOwogCi0JLyogSXMgdGhl IGpvaW4gYmV0d2VlbiBwYXJ0aXRpb25zIGl0c2VsZiBwYXJ0aXRpb25lZD8gKi8KLQlidWlsZF9q b2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVs LCBzamluZm8sCi0JCQkJCQkJCSByZXN0cmljdGxpc3QpOwotCiAJLyogQ2hpbGQgam9pbnJlbCBp cyBwYXJhbGxlbCBzYWZlIGlmIHBhcmVudCBpcyBwYXJhbGxlbCBzYWZlLiAqLwogCWpvaW5yZWwt PmNvbnNpZGVyX3BhcmFsbGVsID0gcGFyZW50X2pvaW5yZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwog CkBAIC0xMTEzLDYgKzExMjQsMjAgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAlzZXRfam9pbnJlbF9zaXplX2VzdGltYXRl cyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3JlbCwKIAkJCQkJCQkgICBzamluZm8s IHJlc3RyaWN0bGlzdCk7CiAKKwkvKgorCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6 ZSBvbiB0aGUgbmV3IGpvaW5yZWwncyBwcm9wZXJ0aWVzLiBBY3Rpb25zCisJICogbWlnaHQgaW5j bHVkZSBhbHRlcmluZyB0aGUgc2l6ZSBlc3RpbWF0ZSwgY2xlYXJpbmcgY29uc2lkZXJfcGFyYWxs ZWwsCisJICogb3IgYWRqdXN0aW5nIHBnc19tYXNrLiAoSG93ZXZlciwgbm90ZSB0aGF0IGNsZWFy aW5nIGNvbnNpZGVyX3BhcmFsbGVsCisJICogd291bGQgYmUgYmV0dGVyIGRvbmUgaW4gdGhlIHBh cmVudCBqb2lucmVsIHJhdGhlciB0aGFuIGhlcmUuKQorCSAqLworCWlmIChqb2lucmVsX3NldHVw X2hvb2spCisJCSgqam9pbnJlbF9zZXR1cF9ob29rKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVs LCBpbm5lcl9yZWwsIHNqaW5mbywKKwkJCQkJCQkgICByZXN0cmljdGxpc3QpOworCisJLyogSXMg dGhlIGpvaW4gYmV0d2VlbiBwYXJ0aXRpb25zIGl0c2VsZiBwYXJ0aXRpb25lZD8gKi8KKwlidWls ZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJf cmVsLCBzamluZm8sCisJCQkJCQkJCSByZXN0cmljdGxpc3QpOworCiAJLyogV2UgYnVpbGQgdGhl IGpvaW4gb25seSBvbmNlLiAqLwogCUFzc2VydCghZmluZF9qb2luX3JlbChyb290LCBqb2lucmVs LT5yZWxpZHMpKTsKIApAQCAtMTYwMiw2ICsxNjI3LDcgQEAgZmV0Y2hfdXBwZXJfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBVcHBlclJlbGF0aW9uS2luZCBraW5kLCBSZWxpZHMgcmVsaWRzKQogCXVw cGVycmVsID0gbWFrZU5vZGUoUmVsT3B0SW5mbyk7CiAJdXBwZXJyZWwtPnJlbG9wdGtpbmQgPSBS RUxPUFRfVVBQRVJfUkVMOwogCXVwcGVycmVsLT5yZWxpZHMgPSBibXNfY29weShyZWxpZHMpOwor CXVwcGVycmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAKIAkv KiBjaGVhcCBzdGFydHVwIGNvc3QgaXMgaW50ZXJlc3RpbmcgaWZmIG5vdCBhbGwgdHVwbGVzIHRv IGJlIHJldHJpZXZlZCAqLwogCXVwcGVycmVsLT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1 cGxlX2ZyYWN0aW9uID4gMCk7CkBAIC0yMTE4LDcgKzIxNDQsNyBAQCBidWlsZF9qb2lucmVsX3Bh cnRpdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LAogCVBhcnRpdGlvblNjaGVtZSBwYXJ0X3Nj aGVtZTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgcGFydGl0aW9ud2lzZSBqb2luIHRlY2huaXF1 ZSBpcyBkaXNhYmxlZC4gKi8KLQlpZiAoIWVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4pCisJaWYg KChqb2lucmVsLT5wZ3NfbWFzayAmIFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFKSA9PSAwKQog CXsKIAkJQXNzZXJ0KCFJU19QQVJUSVRJT05FRF9SRUwoam9pbnJlbCkpOwogCQlyZXR1cm47CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCmluZGV4IDQ0OTg4NWI5MzE5Li5mYjgwODgyM2FjZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmgKQEAgLTIyLDYgKzIyLDc5IEBACiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rl cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKIAorLyoKKyAqIFBhdGggZ2VuZXJhdGlv biBzdHJhdGVnaWVzLgorICoKKyAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCB0byBzcGVjaWZ5 IHRoZSBzZXQgb2Ygc3RyYXRlZ2llcyB0aGF0IHRoZSBwbGFubmVyCisgKiBzaG91bGQgdXNlLCBl aXRoZXIgZm9yIHRoZSBxdWVyeSBhcyBhIHdob2xlIG9yIGZvciBhIHNwZWNpZmljIGJhc2VyZWwg b3IKKyAqIGpvaW5yZWwuIFRoZSB2YXJpb3VzIHBsYW5uZXItcmVsYXRlZCBlbmFibGVfKiBHVUNz IGFyZSB1c2VkIHRvIHNldCB0aGUKKyAqIFBsYW5uZXJHbG9iYWwncyBkZWZhdWx0X3Bnc19tYXNr LCBhbmQgdGhhdCBpbiB0dXJuIGlzIHVzZWQgdG8gc2V0IGVhY2gKKyAqIFJlbE9wdEluZm8ncyBw Z3NfbWFzay4gSW4gYm90aCBjYXNlcywgZXh0ZW5zaW9ucyBjYW4gdXNlIGhvb2tzIHRvIG1vZGlm eSB0aGUKKyAqIGRlZmF1bHQgdmFsdWUuICBOb3QgZXZlcnkgc3RyYXRlZ3kgbGlzdGVkIGhlcmUg aGFzIGEgY29ycmVzcG9uZGluZyBlbmFibGVfKgorICogR1VDOyB0aG9zZSB0aGF0IGRvbid0IGFy ZSBhbHdheXMgYWxsb3dlZCB1bmxlc3MgZGlzYWJsZWQgYnkgYW4gZXh0ZW5zaW9uLgorICogTm90 IGFsbCBzdHJhdGVnaWVzIGFyZSByZWxldmFudCBmb3IgZXZlcnkgUmVsT3B0SW5mbzsgZS5nLiBQ R1NfU0VRU0NBTgorICogZG9lc24ndCBhZmZlY3Qgam9pbnJlbHMgb25lIHdheSBvciB0aGUgb3Ro ZXIuCisgKgorICogSW4gbW9zdCBjYXNlcywgZGlzYWJsaW5nIGEgcGF0aCBnZW5lcmF0aW9uIHN0 cmF0ZWd5IG1lcmVseSBtZWFucyB0aGF0IGFueQorICogcGF0aHMgZ2VuZXJhdGVkIHVzaW5nIHRo YXQgc3RyYXRlZ3kgYXJlIG1hcmtlZCBhcyBkaXNhYmxlZCwgYnV0IGluIHNvbWUKKyAqIGNhc2Vz LCBwYXRoIGdlbmVyYXRpb24gaXMgc2tpcHBlZCBhbHRvZ2V0aGVyLiBUaGUgbGF0dGVyIHN0cmF0 ZWd5IGlzIG9ubHkKKyAqIHBlcm1pc3NpYmxlIHdoZW4gaXQgY2FuJ3QgcmVzdWx0IGluIHBsYW5u ZXIgZmFpbHVyZSAtLSBmb3IgaW5zdGFuY2UsIHdlCisgKiBjb3VsZG4ndCBkbyB0aGlzIGZvciBz ZXF1ZW50aWFsIHNjYW5zIG9uIGEgcGxhaW4gcmVsLCBiZWNhdXNlIHRoZXJlIG1pZ2h0CisgKiBu b3QgYmUgYW55IG90aGVyIHBvc3NpYmxlIHBhdGguIE5ldmVydGhlbGVzcywgdGhlIGJlaGF2aW9y cyBpbiBlYWNoCisgKiBpbmRpdmlkdWFsIGNhc2UgYXJlIHRvIHNvbWUgZXh0ZW50IHRoZSByZXN1 bHQgb2YgaGlzdG9yaWNhbCBhY2NpZGVudCwKKyAqIGNob3NlbiB0byBtYXRjaCB0aGUgcHJlZXhp c3RpbmcgYmVoYXZpb3JzIG9mIHRoZSBlbmFibGVfKiBHVUNzLgorICoKKyAqIEluIGEgZmV3IGNh c2VzLCB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgYml0IGZvciB0aGUgc2FtZSBzdHJhdGVneSwgY29u dHJvbGxpbmcKKyAqIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBwbGFubmVyIGJlaGF2aW9yLiBX aGVuIFBHU19DT05TSURFUl9JTkRFWE9OTFkgaXMKKyAqIHVuc2V0LCB3ZSBkb24ndCBldmVuIGNv bnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGFuZCBhbnkgc3VjaCBzY2FucyB0aGF0CisgKiB3b3Vs ZCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJlY29tZSBpbmRleCBzY2FucyBpbnN0ZWFkLiBPbiB0aGUg b3RoZXIgaGFuZCwKKyAqIHVuc2V0dGluZyBQR1NfSU5ERVhTQ0FOIG9yIFBHU19JTkRFWE9OTFlT Q0FOIGNhdXNlcyBnZW5lcmF0ZWQgcGF0aHMgb2YgdGhlCisgKiBjb3JyZXNwb25kaW5nIHR5cGVz IHRvIGJlIG1hcmtlZCBhcyBkaXNhYmxlZC4gU2ltaWxhcmx5LCB1bnNldHRpbmcKKyAqIFBHU19D T05TSURFUl9QQVJUSVRJT05XSVNFIHByZXZlbnRzIGFueSBzb3J0IG9mIHRoaW5raW5nIGFib3V0 IHBhcnRpdGlvbndpc2UKKyAqIGpvaW5zIGZvciB0aGUgY3VycmVudCByZWwsIHdoaWNoIGluY2lk ZW50YWxseSB3aWxsIHByZWNsdWRlIGhpZ2hlci1sZXZlbAorICogam9pbnJlbHMgZnJvbSBidWls ZGluZyBwYXJ0aXRpb253aXNlIHBhdGhzIHVzaW5nIHBhdGhzIHRha2VuIGZyb20gdGhlCisgKiBj dXJyZW50IHJlbCdzIGNoaWxkcmVuLiBPbiB0aGUgb3RoZXIgaGFuZCwgdW5zZXR0aW5nIFBHU19B UFBFTkQgb3IKKyAqIFBHU19NRVJHRV9BUFBFTkQgd2lsbCBvbmx5IGFycmFuZ2UgdG8gZGlzYWJs ZSBwYXRocyBvZiB0aGUgY29ycmVzcG9uZGluZworICogdHlwZXMgaWYgdGhleSBhcmUgZ2VuZXJh dGVkIGF0IHRoZSBsZXZlbCBvZiB0aGUgY3VycmVudCByZWwuCisgKgorICogRmluYWxseSwgdW5z ZXR0aW5nIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGRpc2FibGVzIGFsbCBub24tcGFydGlhbCBw YXRocworICogZXhjZXB0IHRob3NlIHRoYXQgdXNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UuIElu IG1vc3Qgb3RoZXIgY2FzZXMsIGEKKyAqIHBsdWdpbiBjYW4gbnVkZ2UgdGhlIHBsYW5uZXIgdG93 YXJkIGEgcGFydGljdWxhciBzdHJhdGVneSBieSBkaXNhYmxpbmcKKyAqIGFsbCBvZiB0aGUgb3Ro ZXJzLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgaGVyZTogdW5zZXR0aW5nIFBHU19TRVFTQ0FOLAor ICogZm9yIGluc3RhbmNlLCB3b3VsZCBkaXNhYmxlIGJvdGggcGFydGlhbCBhbmQgbm9uLXBhcnRp YWwgc2VxdWVudGlhbCBzY2Fucy4KKyAqLworI2RlZmluZSBQR1NfU0VRU0NBTgkJCQkJMHgwMDAw MDAwMQorI2RlZmluZSBQR1NfSU5ERVhTQ0FOCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUEdTX0lO REVYT05MWVNDQU4JCQkweDAwMDAwMDA0CisjZGVmaW5lIFBHU19CSVRNQVBTQ0FOCQkJCTB4MDAw MDAwMDgKKyNkZWZpbmUgUEdTX1RJRFNDQU4JCQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgUEdTX0ZP UkVJR05KT0lOCQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgUEdTX01FUkdFSk9JTl9QTEFJTgkJCTB4 MDAwMDAwNDAKKyNkZWZpbmUgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRQkweDAwMDAwMDgwCisj ZGVmaW5lIFBHU19ORVNUTE9PUF9QTEFJTgkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgUEdTX05FU1RM T09QX01BVEVSSUFMSVpFCTB4MDAwMDAyMDAKKyNkZWZpbmUgUEdTX05FU1RMT09QX01FTU9JWkUJ CTB4MDAwMDA0MDAKKyNkZWZpbmUgUEdTX0hBU0hKT0lOCQkJCTB4MDAwMDA4MDAKKyNkZWZpbmUg UEdTX0FQUEVORAkJCQkJMHgwMDAwMTAwMAorI2RlZmluZSBQR1NfTUVSR0VfQVBQRU5ECQkJMHgw MDAwMjAwMAorI2RlZmluZSBQR1NfR0FUSEVSCQkJCQkweDAwMDA0MDAwCisjZGVmaW5lIFBHU19H QVRIRVJfTUVSR0UJCQkweDAwMDA4MDAwCisjZGVmaW5lIFBHU19DT05TSURFUl9JTkRFWE9OTFkJ CTB4MDAwMTAwMDAKKyNkZWZpbmUgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UJMHgwMDAyMDAw MAorI2RlZmluZSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTAkJMHgwMDA0MDAwMAorCisvKgorICog Q29udmVuaWVuY2UgbWFjcm9zIGZvciB1c2VmdWwgY29tYmluYXRpb24gb2YgdGhlIGJpdHMgZGVm aW5lZCBhYm92ZS4KKyAqLworI2RlZmluZSBQR1NfU0NBTl9BTlkJCVwKKwkoUEdTX1NFUVNDQU4g fCBQR1NfSU5ERVhTQ0FOIHwgUEdTX0lOREVYT05MWVNDQU4gfCBQR1NfQklUTUFQU0NBTiB8IFwK KwkgUEdTX1RJRFNDQU4pCisjZGVmaW5lIFBHU19NRVJHRUpPSU5fQU5ZCVwKKwkoUEdTX01FUkdF Sk9JTl9QTEFJTiB8IFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUpCisjZGVmaW5lIFBHU19ORVNU TE9PUF9BTlkJXAorCShQR1NfTkVTVExPT1BfUExBSU4gfCBQR1NfTkVTVExPT1BfTUFURVJJQUxJ WkUgfCBQR1NfTkVTVExPT1BfTUVNT0laRSkKKyNkZWZpbmUgUEdTX0pPSU5fQU5ZCQlcCisJKFBH U19GT1JFSUdOSk9JTiB8IFBHU19NRVJHRUpPSU5fQU5ZIHwgUEdTX05FU1RMT09QX0FOWSB8IFBH U19IQVNISk9JTikKIAogLyoKICAqIFJlbGlkcwpAQCAtMTgwLDYgKzI1Myw5IEBAIHR5cGVkZWYg c3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB3b3JzdCBQUk9QQVJBTExFTCBoYXphcmQgbGV2ZWwg Ki8KIAljaGFyCQltYXhQYXJhbGxlbEhhemFyZDsKIAorCS8qIG1hc2sgb2YgYWxsb3dlZCBwYXRo IGdlbmVyYXRpb24gc3RyYXRlZ2llcyAqLworCXVpbnQ2NAkJZGVmYXVsdF9wZ3NfbWFzazsKKwog CS8qIHBhcnRpdGlvbiBkZXNjcmlwdG9ycyAqLwogCVBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0aXRp b25fZGlyZWN0b3J5IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAKQEAgLTkzMyw3 ICsxMDA5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCUNhcmRpbmFsaXR5IHJvd3M7 CiAKIAkvKgotCSAqIHBlci1yZWxhdGlvbiBwbGFubmVyIGNvbnRyb2wgZmxhZ3MKKwkgKiBwZXIt cmVsYXRpb24gcGxhbm5lciBjb250cm9sCiAJICovCiAJLyoga2VlcCBjaGVhcC1zdGFydHVwLWNv c3QgcGF0aHM/ICovCiAJYm9vbAkJY29uc2lkZXJfc3RhcnR1cDsKQEAgLTk0MSw2ICsxMDE3LDgg QEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCWJvb2wJCWNvbnNpZGVyX3BhcmFtX3N0YXJ0 dXA7CiAJLyogY29uc2lkZXIgcGFyYWxsZWwgcGF0aHM/ICovCiAJYm9vbAkJY29uc2lkZXJfcGFy YWxsZWw7CisJLyogcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2sgKi8KKwl1aW50NjQJCXBn c19tYXNrOwogCiAJLyoKIAkgKiBkZWZhdWx0IHJlc3VsdCB0YXJnZXRsaXN0IGZvciBQYXRocyBz Y2FubmluZyB0aGlzIHJlbGF0aW9uOyBsaXN0IG9mCkBAIC0zNDkwLDYgKzM1NjgsNyBAQCB0eXBl ZGVmIHN0cnVjdCBTZW1pQW50aUpvaW5GYWN0b3JzCiAgKiBzamluZm8gaXMgZXh0cmEgaW5mbyBh Ym91dCBzcGVjaWFsIGpvaW5zIGZvciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uCiAgKiBzZW1pZmFj dG9ycyBpcyBhcyBzaG93biBhYm92ZSAob25seSB2YWxpZCBmb3IgU0VNSS9BTlRJL2lubmVyX3Vu aXF1ZSBqb2lucykKICAqIHBhcmFtX3NvdXJjZV9yZWxzIGFyZSBPSyB0YXJnZXRzIGZvciBwYXJh bWV0ZXJpemF0aW9uIG9mIHJlc3VsdCBwYXRocworICogcGdzX21hc2sgaXMgYSBiaXRtYXNrIG9m IFBHU18qIGNvbnN0YW50cyB0byBsaW1pdCB0aGUgam9pbiBzdHJhdGVneQogICovCiB0eXBlZGVm IHN0cnVjdCBKb2luUGF0aEV4dHJhRGF0YQogewpAQCAtMzQ5OSw2ICszNTc4LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgSm9pblBhdGhFeHRyYURhdGEKIAlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbzsKIAlT ZW1pQW50aUpvaW5GYWN0b3JzIHNlbWlmYWN0b3JzOwogCVJlbGlkcwkJcGFyYW1fc291cmNlX3Jl bHM7CisJdWludDY0CQlwZ3NfbWFzazsKIH0gSm9pblBhdGhFeHRyYURhdGE7CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaAppbmRleCAwN2I4YmZhNjM3Ny4uZjJmZDVkMzE1MDcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaApAQCAtMTI1LDcgKzEyNSw3IEBAIGV4dGVybiB2b2lkIGNvc3RfbWVyZ2VfYXBwZW5kKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVw X2Nvc3QsIENvc3QgaW5wdXRfdG90YWxfY29zdCwKIAkJCQkJCQkgIGRvdWJsZSB0dXBsZXMpOwog ZXh0ZXJuIHZvaWQgY29zdF9tYXRlcmlhbChQYXRoICpwYXRoLAotCQkJCQkJICBpbnQgaW5wdXRf ZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkgIGJvb2wgZW5hYmxlZCwgaW50IGlucHV0X2Rpc2FibGVk X25vZGVzLAogCQkJCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3Rh bF9jb3N0LAogCQkJCQkJICBkb3VibGUgdHVwbGVzLCBpbnQgd2lkdGgpOwogZXh0ZXJuIHZvaWQg Y29zdF9hZ2coUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCkBAIC0xNDgsNyArMTQ4LDcg QEAgZXh0ZXJuIHZvaWQgY29zdF9ncm91cChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJICAgZG91YmxlIGlucHV0X3R1cGxlcyk7CiBleHRlcm4gdm9pZCBpbml0aWFsX2Nvc3Rf bmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgSm9pbkNvc3RXb3Jrc3BhY2Ug KndvcmtzcGFjZSwKLQkJCQkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJICBKb2lu VHlwZSBqb2ludHlwZSwgdWludDY0IGVuYWJsZV9tYXNrLAogCQkJCQkJCQkgIFBhdGggKm91dGVy X3BhdGgsIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4 dHJhKTsKIGV4dGVybiB2b2lkIGZpbmFsX2Nvc3RfbmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3Qs IE5lc3RQYXRoICpwYXRoLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCA5YjJjNGIzZTdl Zi4uMjI0NzUwODU5YzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9k ZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC0xOCw2ICsxOCwx NSBAQAogI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgogCiAKKy8qIEhvb2sgZm9yIHBsdWdp bnMgdG8gZ2V0IGNvbnRyb2wgZHVyaW5nIGpvaW5yZWwgc2V0dXAgKi8KK3R5cGVkZWYgdm9pZCAo KmpvaW5yZWxfc2V0dXBfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJ IFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCQkJIFJlbE9wdEluZm8gKm91dGVyX3JlbCwK KwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJfcmVsLAorCQkJCQkJCQkJCSBTcGVjaWFsSm9p bkluZm8gKnNqaW5mbywKKwkJCQkJCQkJCQkgTGlzdCAqcmVzdHJpY3RsaXN0KTsKK2V4dGVybiBQ R0RMTElNUE9SVCBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBqb2lucmVsX3NldHVwX2hvb2s7CisK IC8qCiAgKiBwcm90b3R5cGVzIGZvciBwYXRobm9kZS5jCiAgKi8KQEAgLTgzLDcgKzkyLDggQEAg ZXh0ZXJuIEdyb3VwUmVzdWx0UGF0aCAqY3JlYXRlX2dyb3VwX3Jlc3VsdF9wYXRoKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkJCQkJIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJCSBQ YXRoVGFyZ2V0ICp0YXJnZXQsCiAJCQkJCQkJCQkJCQkgTGlzdCAqaGF2aW5ncXVhbCk7Ci1leHRl cm4gTWF0ZXJpYWxQYXRoICpjcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWwsIFBh dGggKnN1YnBhdGgpOworZXh0ZXJuIE1hdGVyaWFsUGF0aCAqY3JlYXRlX21hdGVyaWFsX3BhdGgo UmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLAorCQkJCQkJCQkJCSAgYm9vbCBlbmFibGVk KTsKIGV4dGVybiBNZW1vaXplUGF0aCAqY3JlYXRlX21lbW9pemVfcGF0aChQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJUGF0aCAqc3VicGF0 aCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggNDcxZTQ5YzA1NTguLjg3NTFhZDczODFjIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aHMuaApAQCAtMjgsNyArMjgsMTQgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBt aW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5h YmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmc7CiAKLS8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNv bnRyb2wgaW4gc2V0X3JlbF9wYXRobGlzdCgpICovCisvKiBIb29rcyBmb3IgcGx1Z2lucyB0byBn ZXQgY29udHJvbCBpbiBzZXRfcmVsX3BhdGhsaXN0KCkgKi8KK3R5cGVkZWYgdm9pZCAoKmpvaW5f cGF0aF9zZXR1cF9ob29rX3R5cGUpIChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgICBS ZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLAor CQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCQkJCSAgIEpvaW5UeXBl IGpvaW50eXBlLAorCQkJCQkJCQkJCSAgIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSk7CitleHRl cm4gUEdETExJTVBPUlQgam9pbl9wYXRoX3NldHVwX2hvb2tfdHlwZSBqb2luX3BhdGhfc2V0dXBf aG9vazsKIHR5cGVkZWYgdm9pZCAoKnNldF9yZWxfcGF0aGxpc3RfaG9va190eXBlKSAoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJSW5k ZXggcnRpLAotLSAKMi41MS4wCgo= --000000000000e844b70648eae553 Content-Type: application/octet-stream; name="v11-0004-Store-information-about-Append-node-consolidatio.patch" Content-Disposition: attachment; filename="v11-0004-Store-information-about-Append-node-consolidatio.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkoey7nk3 RnJvbSBjOGJlZDkzMWI4M2VkZGIwYjU1OTU1M2NmN2FkMTA2Nzg4NjQ3MjE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6MTI6MjUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSA0 LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IEFwcGVuZCBub2RlIGNvbnNvbGlkYXRpb24gaW4K IHRoZSBmaW5hbCBwbGFuLgoKQW4gZXh0ZW5zaW9uIChvciBjb3JlIGNvZGUpIG1pZ2h0IHdhbnQg dG8gcmVjb25zdHJ1Y3QgdGhlIHBsYW5uZXIncwpkZWNpc2lvbnMgYWJvdXQgd2hldGhlciBhbmQg d2hlcmUgdG8gcGVyZm9ybSBwYXJ0aXRpb253aXNlIGpvaW5zIGZyb20KdGhlIGZpbmFsIHBsYW4u IFRvIGRvIHNvLCBpdCBtdXN0IGJlIHBvc3NpYmxlIHRvIGZpbmQgYWxsIG9mIHRoZSBSVElzCm9m IHBhcnRpdGlvbmVkIHRhYmxlcyBhcHBlYXJpbmcgaW4gdGhlIHBsYW4uIEJ1dCB3aGVuIGFuIEFw cGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoIHB1bGxzIHVwIGNoaWxkIHBhdGhzIGZyb20gYSBz dWJvcmRpbmF0ZSBBcHBlbmRQYXRoCm9yIE1lcmdlQXBwZW5kUGF0aCwgdGhlIFJUSXMgb2YgdGhl IHN1Ym9yZGluYXRlIHBhdGggZG8gbm90IGFwcGVhcgppbiB0aGUgZmluYWwgcGxhbiwgbWFraW5n IHRoaXMga2luZCBvZiByZWNvbnN0cnVjdGlvbiBpbXBvc3NpYmxlLgoKVG8gYXZvaWQgdGhpcywg cHJvcGFnYXRlIHRoZSBSVEkgc2V0cyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwcmVzZW50CmluIHRo ZSAnYXBwcmVsaWRzJyBmaWVsZCBvZiB0aGUgc3Vib3JkaW5hdGUgQXBwZW5kIG9yIE1lcmdlQXBw ZW5kCm5vZGVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW50byB0aGUgc3Vydml2aW5n IEFwcGVuZCBvcgpNZXJnZUFwcGVuZCBub2RlLCB1c2luZyBhIG5ldyAnY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMnIGZpZWxkIGZvcgp0aGF0IHB1cnBvc2UuIFRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxk IGlzIGEgbGlzdCBvZiBCaXRtYXBzZXRzLApiZWNhdXNlIGVhY2ggcmVsYXRpb24gd2hvc2UgYXBw ZW5kLWxpc3Qgd2FzIHB1bGxlZCB1cCBoYWQgaXRzIG93bgpzZXQgb2YgUlRJczoganVzdCBvbmUs IGlmIGl0IHdhcyBhIHBhcnRpdGlvbndpc2Ugc2Nhbiwgb3IgbW9yZSB0aGFuCm9uZSwgaWYgaXQg d2FzIGEgcGFydGl0aW9ud2lzZSBqb2luLiBTaW5jZSBvdXIgZ29hbCBpcyB0byBzZWUgd2hlcmUK cGFydGl0aW9ud2lzZSBqb2lucyB3ZXJlIGRvbmUsIGl0IGlzIGVzc2VudGlhbCB0byBhdm9pZCBs b3NpbmcgdGhlCmluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgUlRJcyB3ZXJlIGdyb3VwZWQgaW4g dGhlIHB1bGxlZC11cApyZWxhdGlvbnMuCgpUaGlzIGNvbW1pdCBhbHNvIHVwZGF0ZXMgcGdfb3Zl cmV4cGxhaW4gc28gdGhhdCBFWFBMQUlOIChSQU5HRV9UQUJMRSkKd2lsbCBkaXNwbGF5IHRoZSBz YXZlZCBSVEkgc2V0cy4KCkNvLWF1dGhvcmVkLWJ5OiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdy ZXNxbC5vcmc+CkNvLWF1dGhvcmVkLWJ5OiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpS ZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQtYnk6IEph a3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBH cmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1waW9uIDxqYWNv Yi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW1pdCBMYW5nb3RlIDxh bWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55 aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdtb1otSmgx VDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwuY29tCi0t LQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwgICA0ICst CiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgICAgICAgfCAgNTYgKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8IDE5NSAr KysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMg ICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5j ICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAg ICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgICAg ICAgIHwgIDQzICsrLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAg ICAgICB8ICAyNiArKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAg ICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgMTEgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgICAgICAg IHwgIDE4ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAg fCAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgMjY2IGluc2VydGlvbnMoKyksIDExMCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292 ZXJleHBsYWluLm91dCBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4 cGxhaW4ub3V0CmluZGV4IGNhOWEyM2VhNjFmLi5hMzc3ZmIyNTcxZCAxMDA2NDQKLS0tIGEvY29u dHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKKysrIGIvY29u dHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKQEAgLTEwNCw2 ICsxMDQsNyBAQCAkJCk7CiAgICAgICAgICAgICAgICBQYXJhbGxlbCBTYWZlOiB0cnVlCiAgICAg ICAgICAgICAgICBQbGFuIE5vZGUgSUQ6IDIKICAgICAgICAgICAgICAgIEFwcGVuZCBSVElzOiAx CisgICAgICAgICAgICAgICBDaGlsZCBBcHBlbmQgUlRJczogbm9uZQogICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGJyYXNzaWNhIHZlZ2V0YWJsZXNfMQogICAgICAgICAgICAgICAgICAg ICAgRGlzYWJsZWQgTm9kZXM6IDAKICAgICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKQEAgLTE0Miw3ICsxNDMsNyBAQCAkJCk7CiAgICBSZWxhdGlvbiBLaW5kOiByZWxhdGlv bgogICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFyZUxvY2sKICBVbnBydW5hYmxlIFJU SXM6IDEgMyA0Ci0oNTMgcm93cykKKyg1NCByb3dzKQogCiAtLSBUZXN0IGEgZGlmZmVyZW50IG91 dHB1dCBmb3JtYXQuCiBTRUxFQ1QgZXhwbGFpbl9maWx0ZXIoJCQKQEAgLTE5Nyw2ICsxOTgsNyBA QCAkJCk7CiAgICAgICAgICAgICAgICA8ZXh0UGFyYW0+bm9uZTwvZXh0UGFyYW0+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgICAgIDxhbGxQYXJhbT5ub25lPC9hbGxQ YXJhbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPEFwcGVu ZC1SVElzPjE8L0FwcGVuZC1SVElzPiAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAg ICAgICAgICA8Q2hpbGQtQXBwZW5kLVJUSXM+bm9uZTwvQ2hpbGQtQXBwZW5kLVJUSXM+ICAgICAg ICAgICsKICAgICAgICAgICAgICAgIDxTdWJwbGFucy1SZW1vdmVkPjA8L1N1YnBsYW5zLVJlbW92 ZWQ+ICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPFBsYW5zPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICAgIDxQbGFu PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdf b3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRleCBlMDE4NGJhMzE0YS4uMzZlNmFhYzBl MmMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwor KysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKQEAgLTU0LDYgKzU0 LDggQEAgc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5fYWxpYXMoY29uc3QgY2hhciAqcWxhYmVsLCBB bGlhcyAqYWxpYXMsCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIG92 ZXJleHBsYWluX2JpdG1hcHNldChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLAog CQkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0 bWFwc2V0X2xpc3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpibXNfbGlzdCwKKwkJCQkJCQkJ CSAgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5faW50bGlzdChj b25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmxpc3QsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMp OwogCkBAIC0yMzIsMTEgKzIzNCwxNyBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29rKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFw c2V0KCJBcHBlbmQgUlRJcyIsCiAJCQkJCQkJCQkgICgoQXBwZW5kICopIHBsYW4pLT5hcHByZWxp ZHMsCiAJCQkJCQkJCQkgIGVzKTsKKwkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXRfbGlzdCgiQ2hp bGQgQXBwZW5kIFJUSXMiLAorCQkJCQkJCQkJCSAgICgoQXBwZW5kICopIHBsYW4pLT5jaGlsZF9h cHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNl IFRfTWVyZ2VBcHBlbmQ6CiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIs CiAJCQkJCQkJCQkgICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcywKIAkJCQkJCQkJ CSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNldF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJ cyIsCisJCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsCisJCQkJCQkJCQkJICAgZXMpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUX1Jlc3Vs dDoKIApAQCAtODE1LDYgKzgyMyw1NCBAQCBvdmVyZXhwbGFpbl9iaXRtYXBzZXQoY29uc3QgY2hh ciAqcWxhYmVsLCBCaXRtYXBzZXQgKmJtcywgRXhwbGFpblN0YXRlICplcykKIAlwZnJlZShidWYu ZGF0YSk7CiB9CiAKKy8qCisgKiBFbWl0IGEgdGV4dCBwcm9wZXJ0eSBkZXNjcmliaW5nIHRoZSBj b250ZW50cyBvZiBhIGxpc3Qgb2YgYml0bWFwc2V0cy4KKyAqIElmIGEgYml0bWFwc2V0IGNvbnRh aW5zIGV4YWN0bHkgMSBtZW1iZXIsIHdlIGp1c3QgcHJpbnQgYW4gaW50ZWdlcjsKKyAqIG90aGVy d2lzZSwgd2Ugc3Vycm91bmQgdGhlIGxpc3Qgb2YgbWVtYmVycyBieSBwYXJlbnRoZXNlcy4KKyAq CisgKiBJZiB0aGVyZSBhcmUgbm8gYml0bWFwc2V0cyBpbiB0aGUgbGlzdCwgd2UgcHJpbnQgdGhl IHdvcmQgIm5vbmUiLgorICovCitzdGF0aWMgdm9pZAorb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xp c3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpibXNfbGlzdCwKKwkJCQkJCSAgIEV4cGxhaW5T dGF0ZSAqZXMpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1 Zik7CisKKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBibXMsIGJtc19saXN0KQorCXsKKwkJaWYg KGJtc19tZW1iZXJzaGlwKGJtcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oJmJ1ZiwgIiAlZCIsIGJtc19zaW5nbGV0b25fbWVtYmVyKGJtcykpOworCQllbHNlCisJCXsK KwkJCWludAkJCXggPSAtMTsKKwkJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmYnVmLCAiICgiKTsKKwkJCXdoaWxlICgoeCA9IGJtc19uZXh0X21lbWJl cihibXMsIHgpKSA+PSAwKQorCQkJeworCQkJCWlmIChmaXJzdCkKKwkJCQkJZmlyc3QgPSBmYWxz ZTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcgJyk7CisJCQkJ YXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCB4KTsKKwkJCX0KKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKCZidWYsICcpJyk7CisJCX0KKwl9CisKKwlpZiAoYnVmLmxlbiA9PSAwKQorCXsKKwkJ RXhwbGFpblByb3BlcnR5VGV4dChxbGFiZWwsICJub25lIiwgZXMpOworCQlyZXR1cm47CisJfQor CisJQXNzZXJ0KGJ1Zi5kYXRhWzBdID09ICcgJyk7CisJRXhwbGFpblByb3BlcnR5VGV4dChxbGFi ZWwsIGJ1Zi5kYXRhICsgMSwgZXMpOworCXBmcmVlKGJ1Zi5kYXRhKTsKK30KKwogLyoKICAqIEVt aXQgYSB0ZXh0IHByb3BlcnR5IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBp bnRlZ2VycywgT0lEcywKICAqIG9yIFhJRHMgLS0gZWl0aGVyIGEgc3BhY2Utc2VwYXJhdGVkIGxp c3Qgb2YgaW50ZWdlciBtZW1iZXJzLCBvciB0aGUgd29yZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2FsbHBhdGhzLmMKaW5kZXggYjQ1ODFlNTRkOTMuLjJjNzYyNDlkMjViIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTEyOCw4ICsxMjgsMTAgQEAgc3RhdGljIFBhdGgg KmdldF9jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX2NoaWxkX3BhdGgoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCQkgICBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogc3RhdGljIHZvaWQgYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLAogCQkJCQkJCQkJICBMaXN0ICoqc3Vi cGF0aHMsCi0JCQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKTsKLXN0YXRpYyBQYXRo ICpnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgpOworCQkJCQkJCQkJICBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzKTsKK3N0YXRpYyBQYXRoICpnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsCisJCQkJCQkJCQkJICBMaXN0ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwog c3RhdGljIHZvaWQgc2V0X2R1bW15X3JlbF9wYXRobGlzdChSZWxPcHRJbmZvICpyZWwpOwogc3Rh dGljIHZvaWQgc2V0X3N1YnF1ZXJ5X3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCQkJCQkJCSAgSW5kZXggcnRpLCBSYW5nZVRibEVudHJ5ICpydGUpOwpAQCAt MTQwNCwyMiArMTQwNiwyMSBAQCB2b2lkCiBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJTGlzdCAqbGl2ZV9jaGlsZHJlbHMp CiB7Ci0JTGlzdAkgICAqc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0 cnVlOwotCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3RhcnR1cF9z dWJwYXRoc192YWxpZCA9IHRydWU7Ci0JTGlzdAkgICAqcGFydGlhbF9zdWJwYXRocyA9IE5JTDsK LQlMaXN0CSAgICpwYV9wYXJ0aWFsX3N1YnBhdGhzID0gTklMOwotCUxpc3QJICAgKnBhX25vbnBh cnRpYWxfc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJcGFydGlhbF9zdWJwYXRoc192YWxpZCA9IHRy dWU7Ci0JYm9vbAkJcGFfc3VicGF0aHNfdmFsaWQ7CisJQXBwZW5kUGF0aElucHV0IHVucGFyYW1l dGVyaXplZCA9IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQgc3RhcnR1cCA9IHswfTsKKwlBcHBlbmRQ YXRoSW5wdXQgcGFydGlhbF9vbmx5ID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJhbGxlbF9h cHBlbmQgPSB7MH07CisJYm9vbAkJdW5wYXJhbWV0ZXJpemVkX3ZhbGlkID0gdHJ1ZTsKKwlib29s CQlzdGFydHVwX3ZhbGlkID0gdHJ1ZTsKKwlib29sCQlwYXJ0aWFsX29ubHlfdmFsaWQgPSB0cnVl OworCWJvb2wJCXBhcmFsbGVsX2FwcGVuZF92YWxpZCA9IHRydWU7CiAJTGlzdAkgICAqYWxsX2No aWxkX3BhdGhrZXlzID0gTklMOwogCUxpc3QJICAgKmFsbF9jaGlsZF9vdXRlcnMgPSBOSUw7CiAJ TGlzdENlbGwgICAqbDsKIAlkb3VibGUJCXBhcnRpYWxfcm93cyA9IC0xOwogCiAJLyogSWYgYXBw cm9wcmlhdGUsIGNvbnNpZGVyIHBhcmFsbGVsIGFwcGVuZCAqLwotCXBhX3N1YnBhdGhzX3ZhbGlk ID0gZW5hYmxlX3BhcmFsbGVsX2FwcGVuZCAmJiByZWwtPmNvbnNpZGVyX3BhcmFsbGVsOworCXBh cmFsbGVsX2FwcGVuZF92YWxpZCA9IGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQgJiYgcmVsLT5jb25z aWRlcl9wYXJhbGxlbDsKIAogCS8qCiAJICogRm9yIGV2ZXJ5IG5vbi1kdW1teSBjaGlsZCwgcmVt ZW1iZXIgdGhlIGNoZWFwZXN0IHBhdGguICBBbHNvLCBpZGVudGlmeQpAQCAtMTQ0Myw5ICsxNDQ0 LDkgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKIAkJaWYgKGNoaWxkcmVsLT5wYXRobGlzdCAhPSBOSUwgJiYKIAkJCWNoaWxkcmVs LT5jaGVhcGVzdF90b3RhbF9wYXRoLT5wYXJhbV9pbmZvID09IE5VTEwpCiAJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoaWxkcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLAotCQkJCQkJCQkJ ICAmc3VicGF0aHMsIE5VTEwpOworCQkJCQkJCQkJICAmdW5wYXJhbWV0ZXJpemVkLnN1YnBhdGhz LCBOVUxMLCAmdW5wYXJhbWV0ZXJpemVkLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJZWxz ZQotCQkJc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCXVucGFyYW1ldGVyaXplZF92YWxpZCA9 IGZhbHNlOwogCiAJCS8qCiAJCSAqIFdoZW4gdGhlIHBsYW5uZXIgaXMgY29uc2lkZXJpbmcgY2hl YXAgc3RhcnR1cCBwbGFucywgd2UnbGwgYWxzbwpAQCAtMTQ3MSwxMSArMTQ3MiwxMiBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQkJLyogY2hlYXBlc3Rfc3RhcnR1cF9wYXRoIG11c3Qgbm90IGJlIGEgcGFyYW1ldGVyaXplZCBw YXRoLiAqLwogCQkJQXNzZXJ0KGNoZWFwZXN0X3BhdGgtPnBhcmFtX2luZm8gPT0gTlVMTCk7CiAJ CQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhdGgsCi0JCQkJCQkJCQkgICZz dGFydHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCSAgJnN0YXJ0dXAu c3VicGF0aHMsCisJCQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2Fw cGVuZF9yZWxpZF9zZXRzKTsKIAkJfQogCQllbHNlCi0JCQlzdGFydHVwX3N1YnBhdGhzX3ZhbGlk ID0gZmFsc2U7CisJCQlzdGFydHVwX3ZhbGlkID0gZmFsc2U7CiAKIAogCQkvKiBTYW1lIGlkZWEs IGJ1dCBmb3IgYSBwYXJ0aWFsIHBsYW4uICovCkBAIC0xNDgzLDE2ICsxNDg1LDE3IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFs X3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlh bF9wYXRoLAotCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkg ICZwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnBhcnRp YWxfb25seS5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCX0KIAkJZWxzZQotCQkJcGFydGlh bF9zdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJcGFydGlhbF9vbmx5X3ZhbGlkID0gZmFsc2U7 CiAKIAkJLyoKIAkJICogU2FtZSBpZGVhLCBidXQgZm9yIGEgcGFyYWxsZWwgYXBwZW5kIG1peGlu ZyBwYXJ0aWFsIGFuZCBub24tcGFydGlhbAogCQkgKiBwYXRocy4KIAkJICovCi0JCWlmIChwYV9z dWJwYXRoc192YWxpZCkKKwkJaWYgKHBhcmFsbGVsX2FwcGVuZF92YWxpZCkKIAkJewogCQkJUGF0 aAkgICAqbnBwYXRoID0gTlVMTDsKIApAQCAtMTUwMiw3ICsxNTA1LDcgQEAgYWRkX3BhdGhzX3Rv X2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlmIChj aGVhcGVzdF9wYXJ0aWFsX3BhdGggPT0gTlVMTCAmJiBucHBhdGggPT0gTlVMTCkKIAkJCXsKIAkJ CQkvKiBOZWl0aGVyIGEgcGFydGlhbCBub3IgYSBwYXJhbGxlbC1zYWZlIHBhdGg/ICBGb3JnZXQg aXQuICovCi0JCQkJcGFfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCQlwYXJhbGxlbF9hcHBl bmRfdmFsaWQgPSBmYWxzZTsKIAkJCX0KIAkJCWVsc2UgaWYgKG5wcGF0aCA9PSBOVUxMIHx8CiAJ CQkJCSAoY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwgJiYKQEAgLTE1MTEsOCArMTUxNCw5 IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQkJLyogUGFydGlhbCBwYXRoIGlzIGNoZWFwZXIgb3IgdGhlIG9ubHkgb3B0aW9u LiAqLwogCQkJCUFzc2VydChjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCk7CiAJCQkJYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9wYXJ0aWFsX3BhdGgsCi0JCQkJCQkJCQkJ ICAmcGFfcGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgICZwYV9ub25wYXJ0aWFsX3N1YnBh dGhzKTsKKwkJCQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQucGFydGlhbF9zdWJwYXRocywKKwkJ CQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFyYWxs ZWxfYXBwZW5kLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsK QEAgLTE1MzAsOCArMTUzNCw5IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogZmlndXJlIHRoYXQgb3V0LgogCQkJCSAq LwogCQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgobnBwYXRoLAotCQkJCQkJCQkJCSAgJnBh X25vbnBhcnRpYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCQkgICZw YXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCSAg JnBhcmFsbGVsX2FwcGVuZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJCX0KIApA QCAtMTYwNSwyOCArMTYxMCwyOCBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIHVucGFyYW1ldGVyaXplZCBBcHBlbmQgcGF0 aCBmb3IgdGhlIHJlbC4gIChOb3RlOiB0aGlzIGlzIGNvcnJlY3QgZXZlbgogCSAqIGlmIHdlIGhh dmUgemVybyBvciBvbmUgbGl2ZSBzdWJwYXRoIGR1ZSB0byBjb25zdHJhaW50IGV4Y2x1c2lvbi4p CiAJICovCi0JaWYgKHN1YnBhdGhzX3ZhbGlkKQotCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLCBOSUwsCisJaWYgKHVucGFyYW1l dGVyaXplZF92YWxpZCkKKwkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3Bh dGgocm9vdCwgcmVsLCB1bnBhcmFtZXRlcml6ZWQsCiAJCQkJCQkJCQkJCQkgIE5JTCwgTlVMTCwg MCwgZmFsc2UsCiAJCQkJCQkJCQkJCQkgIC0xKSk7CiAKIAkvKiBidWlsZCBhbiBBcHBlbmRQYXRo IGZvciB0aGUgY2hlYXAgc3RhcnR1cCBwYXRocywgaWYgdmFsaWQgKi8KLQlpZiAoc3RhcnR1cF9z dWJwYXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3Bh dGgocm9vdCwgcmVsLCBzdGFydHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJICBOSUwsIE5JTCwg TlVMTCwgMCwgZmFsc2UsIC0xKSk7CisJaWYgKHN0YXJ0dXBfdmFsaWQpCisJCWFkZF9wYXRoKHJl bCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgc3RhcnR1cCwKKwkJCQkJ CQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIg YW4gYXBwZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBN YWtlCiAJICogaXQgcGFyYWxsZWwtYXdhcmUgaWYgcG9zc2libGUuCiAJICovCi0JaWYgKHBhcnRp YWxfc3VicGF0aHNfdmFsaWQgJiYgcGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcnRp YWxfb25seV92YWxpZCAmJiBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCiAJ ewogCQlBcHBlbmRQYXRoICphcHBlbmRwYXRoOwogCQlMaXN0Q2VsbCAgICpsYzsKIAkJaW50CQkJ cGFyYWxsZWxfd29ya2VycyA9IDA7CiAKIAkJLyogRmluZCB0aGUgaGlnaGVzdCBudW1iZXIgb2Yg d29ya2VycyByZXF1ZXN0ZWQgZm9yIGFueSBzdWJwYXRoLiAqLwotCQlmb3JlYWNoKGxjLCBwYXJ0 aWFsX3N1YnBhdGhzKQorCQlmb3JlYWNoKGxjLCBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRo cykKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTE2NTMsNyArMTY1 OCw3IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCUFzc2VydChwYXJhbGxlbF93b3JrZXJzID4gMCk7CiAKIAkJLyogR2VuZXJh dGUgYSBwYXJ0aWFsIGFwcGVuZCBwYXRoLiAqLwotCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgTklMLCBwYXJ0aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0g Y3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFydGlhbF9vbmx5LAogCQkJCQkJCQkJCU5J TCwgTlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJCQllbmFibGVfcGFyYWxsZWxfYXBw ZW5kLAogCQkJCQkJCQkJCS0xKTsKQEAgLTE2NzQsNyArMTY3OSw3IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICogYSBub24t cGFydGlhbCBwYXRoIHRoYXQgaXMgc3Vic3RhbnRpYWxseSBjaGVhcGVyIHRoYW4gYW55IHBhcnRp YWwgcGF0aDsKIAkgKiBvdGhlcndpc2UsIHdlIHNob3VsZCB1c2UgdGhlIGFwcGVuZCBwYXRoIGFk ZGVkIGluIHRoZSBwcmV2aW91cyBzdGVwLikKIAkgKi8KLQlpZiAocGFfc3VicGF0aHNfdmFsaWQg JiYgcGFfbm9ucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcmFsbGVsX2FwcGVuZF92 YWxpZCAmJiBwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMgIT0gTklMKQogCXsKIAkJQXBwZW5kUGF0 aCAqYXBwZW5kcGF0aDsKIAkJTGlzdENlbGwgICAqbGM7CkBAIC0xNjg0LDcgKzE2ODksNyBAQCBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkgKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJlcXVlc3RlZCBmb3Ig YW55IHBhcnRpYWwKIAkJICogc3VicGF0aC4KIAkJICovCi0JCWZvcmVhY2gobGMsIHBhX3BhcnRp YWxfc3VicGF0aHMpCisJCWZvcmVhY2gobGMsIHBhcmFsbGVsX2FwcGVuZC5wYXJ0aWFsX3N1YnBh dGhzKQogCQl7CiAJCQlQYXRoCSAgICpwYXRoID0gbGZpcnN0KGxjKTsKIApAQCAtMTcwMiw4ICsx NzA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkJCQkJCQkgICBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyKTsK IAkJQXNzZXJ0KHBhcmFsbGVsX3dvcmtlcnMgPiAwKTsKIAotCQlhcHBlbmRwYXRoID0gY3JlYXRl X2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJ CQlwYV9wYXJ0aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVuZF9wYXRo KHJvb3QsIHJlbCwgcGFyYWxsZWxfYXBwZW5kLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxs ZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlh bF9wYXRoKHJlbCwgKFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzEzLDcgKzE3MTcsNyBAQCBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCSAqIEFsc28gYnVpbGQgdW5wYXJhbWV0ZXJpemVkIG9yZGVyZWQgYXBwZW5kIHBhdGhzIGJh c2VkIG9uIHRoZSBjb2xsZWN0ZWQKIAkgKiBsaXN0IG9mIGNoaWxkIHBhdGhrZXlzLgogCSAqLwot CWlmIChzdWJwYXRoc192YWxpZCkKKwlpZiAodW5wYXJhbWV0ZXJpemVkX3ZhbGlkKQogCQlnZW5l cmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKHJvb3QsIHJlbCwgbGl2ZV9jaGlsZHJlbHMsCiAJCQkJ CQkJCQkgYWxsX2NoaWxkX3BhdGhrZXlzKTsKIApAQCAtMTczNCwxMCArMTczOCwxMCBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CXsKIAkJUmVsaWRzCQlyZXF1aXJlZF9vdXRlciA9IChSZWxpZHMpIGxmaXJzdChsKTsKIAkJTGlz dENlbGwgICAqbGNyOworCQlBcHBlbmRQYXRoSW5wdXQgcGFyYW1ldGVyaXplZCA9IHswfTsKKwkJ Ym9vbAkJcGFyYW1ldGVyaXplZF92YWxpZCA9IHRydWU7CiAKIAkJLyogU2VsZWN0IHRoZSBjaGls ZCBwYXRocyBmb3IgYW4gQXBwZW5kIHdpdGggdGhpcyBwYXJhbWV0ZXJpemF0aW9uICovCi0JCXN1 YnBhdGhzID0gTklMOwotCQlzdWJwYXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBs aXZlX2NoaWxkcmVscykKIAkJewogCQkJUmVsT3B0SW5mbyAqY2hpbGRyZWwgPSAoUmVsT3B0SW5m byAqKSBsZmlyc3QobGNyKTsKQEAgLTE3NDYsNyArMTc1MCw3IEBAIGFkZF9wYXRoc190b19hcHBl bmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlpZiAoY2hpbGRy ZWwtPnBhdGhsaXN0ID09IE5JTCkKIAkJCXsKIAkJCQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRh YmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJCQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOwor CQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxzZTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAt MTc1NiwxNSArMTc2MCwxNiBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN1YnBhdGggPT0gTlVMTCkKIAkJCXsKIAkJ CQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRhYmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJ CQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxz ZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0 aCwgJnN1YnBhdGhzLCBOVUxMKTsKKwkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0 aCwgJnBhcmFtZXRlcml6ZWQuc3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkgICZwYXJhbWV0ZXJp emVkLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJfQogCi0JCWlmIChzdWJwYXRoc192YWxp ZCkKKwkJaWYgKHBhcmFtZXRlcml6ZWRfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICop Ci0JCQkJCSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJ CQkgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFyYW1ldGVyaXplZCwKIAkJCQkJCQkJ CQlOSUwsIHJlcXVpcmVkX291dGVyLCAwLCBmYWxzZSwKIAkJCQkJCQkJCQktMSkpOwogCX0KQEAg LTE3ODUsMTMgKzE3OTAsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IChQYXRoICop IGxmaXJzdChsKTsKIAkJCUFwcGVuZFBhdGggKmFwcGVuZHBhdGg7CisJCQlBcHBlbmRQYXRoSW5w dXQgYXBwZW5kID0gezB9OworCisJCQlhcHBlbmQucGFydGlhbF9zdWJwYXRocyA9IGxpc3RfbWFr ZTEocGF0aCk7CisJCQlhcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBsaXN0X21ha2Ux KHJlbC0+cmVsaWRzKTsKIAogCQkJLyogc2tpcCBwYXRocyB3aXRoIG5vIHBhdGhrZXlzLiAqLwog CQkJaWYgKHBhdGgtPnBhdGhrZXlzID09IE5JTCkKIAkJCQljb250aW51ZTsKIAotCQkJYXBwZW5k cGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRo KSwKLQkJCQkJCQkJCQkJTklMLCBOVUxMLAorCQkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRf cGF0aChyb290LCByZWwsIGFwcGVuZCwgTklMLCBOVUxMLAogCQkJCQkJCQkJCQlwYXRoLT5wYXJh bGxlbF93b3JrZXJzLCB0cnVlLAogCQkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQkJYWRkX3Bh cnRpYWxfcGF0aChyZWwsIChQYXRoICopIGFwcGVuZHBhdGgpOwpAQCAtMTg3Myw5ICsxODgxLDkg QEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCWZvcmVhY2gobGNwLCBhbGxfY2hpbGRfcGF0aGtleXMpCiAJewogCQlMaXN0 CSAgICpwYXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwotCQlMaXN0CSAgICpzdGFydHVw X3N1YnBhdGhzID0gTklMOwotCQlMaXN0CSAgICp0b3RhbF9zdWJwYXRocyA9IE5JTDsKLQkJTGlz dAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJQXBwZW5kUGF0aElucHV0IHN0YXJ0 dXAgPSB7MH07CisJCUFwcGVuZFBhdGhJbnB1dCB0b3RhbCA9IHswfTsKKwkJQXBwZW5kUGF0aElu cHV0IGZyYWN0aW9uYWwgPSB7MH07CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3RvdGFsID0gZmFsc2U7 CiAJCWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29sCQltYXRjaF9wYXJ0 aXRpb25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDQ2LDIzIEBAIGdlbmVyYXRlX29yZGVyZWRhcHBl bmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkgKiBqdXN0 IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55dGhpbmcKIAkJCQkg KiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBnZXRfc2luZ2xldG9u X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFwZXN0X3RvdGFsID0g Z2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7CisJCQkJY2hlYXBl c3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3Rf c3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7 CisJCQkJY2hlYXBlc3RfdG90YWwgPQorCQkJCQlnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X3RvdGFsLAorCQkJCQkJCQkJCQkJICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyk7CiAKLQkJCQlzdGFydHVwX3N1YnBhdGhzID0gbGFwcGVuZChzdGFydHVwX3N1YnBhdGhz LCBjaGVhcGVzdF9zdGFydHVwKTsKLQkJCQl0b3RhbF9zdWJwYXRocyA9IGxhcHBlbmQodG90YWxf c3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKKwkJCQlzdGFydHVwLnN1YnBhdGhzID0gbGFwcGVu ZChzdGFydHVwLnN1YnBhdGhzLCBjaGVhcGVzdF9zdGFydHVwKTsKKwkJCQl0b3RhbC5zdWJwYXRo cyA9IGxhcHBlbmQodG90YWwuc3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKIAogCQkJCWlmIChj aGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCXsKLQkJCQkJY2hlYXBlc3RfZnJhY3Rpb25hbCA9IGdl dF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCk7Ci0JCQkJCWZy YWN0aW9uYWxfc3VicGF0aHMgPSBsYXBwZW5kKGZyYWN0aW9uYWxfc3VicGF0aHMsIGNoZWFwZXN0 X2ZyYWN0aW9uYWwpOworCQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0KKwkJCQkJCWdldF9zaW5n bGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCwKKwkJCQkJCQkJCQkJCQkg JmZyYWN0aW9uYWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOworCQkJCQlmcmFjdGlvbmFsLnN1 YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbC5zdWJwYXRocywgY2hlYXBlc3RfZnJh Y3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1NywxMyArMjA3MiwxNiBAQCBn ZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJnZUFwcGVuZC4KIAkJCQkgKi8K IAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXAsCi0JCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmc3RhcnR1cC5zdWJw YXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz KTsKIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3RvdGFsLAotCQkJCQkJ CQkJCSAgJnRvdGFsX3N1YnBhdGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkgICZ0b3RhbC5zdWJwYXRo cywgTlVMTCwKKwkJCQkJCQkJCQkgICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAK IAkJCQlpZiAoY2hlYXBlc3RfZnJhY3Rpb25hbCkKIAkJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3Vi cGF0aChjaGVhcGVzdF9mcmFjdGlvbmFsLAotCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBh dGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkJICAmZnJhY3Rpb25hbC5zdWJwYXRocywgTlVMTCwKKwkJ CQkJCQkJCQkJICAmZnJhY3Rpb25hbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJ CX0KIApAQCAtMjA3Myw4ICsyMDkxLDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJLyogV2Ugb25seSBuZWVkIEFw cGVuZCAqLwogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9v dCwKIAkJCQkJCQkJCQkJCQkgIHJlbCwKLQkJCQkJCQkJCQkJCQkgIHN0YXJ0dXBfc3VicGF0aHMs Ci0JCQkJCQkJCQkJCQkJICBOSUwsCisJCQkJCQkJCQkJCQkJICBzdGFydHVwLAogCQkJCQkJCQkJ CQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwK QEAgLTIwODMsMTkgKzIxMDAsMTcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFs KQogCQkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJ CQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhzLAotCQkJ CQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkJICB0b3RhbCwKIAkJCQkJCQkJCQkJCQkJ ICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCQkgIDAsCiAJ CQkJCQkJCQkJCQkJCSAgZmFsc2UsCiAJCQkJCQkJCQkJCQkJCSAgLTEpKTsKIAotCQkJaWYgKGZy YWN0aW9uYWxfc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQorCQkJaWYgKGZyYWN0aW9u YWwuc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJ CQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkJCSAgTklMLAor CQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWwsCiAJCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJ CQkJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJCQkJICAwLApAQCAtMjEwNywyMCArMjEy MiwyMyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkvKiBXZSBuZWVkIE1lcmdlQXBwZW5kICovCiAJCQlhZGRfcGF0 aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJ CQkJCQkJcmVsLAotCQkJCQkJCQkJCQkJCQkJc3RhcnR1cF9zdWJwYXRocywKKwkJCQkJCQkJCQkJ CQkJCXN0YXJ0dXAuc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQlzdGFydHVwLmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQlO VUxMKSk7CiAJCQlpZiAoc3RhcnR1cF9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgocmVsLCAoUGF0 aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkJCQlyZWws Ci0JCQkJCQkJCQkJCQkJCQkJdG90YWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwu c3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQkJTlVMTCkpOwogCi0J CQlpZiAoZnJhY3Rpb25hbF9zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCisJCQlpZiAo ZnJhY3Rpb25hbC5zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCQlyZWwsCi0JCQkJCQkJCQkJCQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocywKKwkJCQkJCQkJ CQkJCQkJCQlmcmFjdGlvbmFsLnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWwu Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJ CQkJCQkJCQkJCQkJTlVMTCkpOwogCQl9CkBAIC0yMjIzLDcgKzIyNDEsOCBAQCBnZXRfY2hlYXBl c3RfcGFyYW1ldGVyaXplZF9jaGlsZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAgKiBwYXRocykuCiAgKi8KIHN0YXRpYyB2b2lkCi1hY2N1bXVsYXRlX2FwcGVuZF9z dWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0 aHMpCithY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRo cywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMsCisJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cykKIHsKIAlpZiAoSXNBKHBhdGgsIEFwcGVuZFBhdGgpKQogCXsKQEAgLTIyMzIs NiArMjI1MSwxMSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3Qg KipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlmICghYXBhdGgtPnBhdGgu cGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aCA9PSAwKQogCQl7CiAJ CQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRoLT5zdWJwYXRocyk7CisJ CQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPQorCQkJCWxpc3RfY29uY2F0KCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJ CQlhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQkJcmV0dXJuOwogCQl9CiAJCWVs c2UgaWYgKHNwZWNpYWxfc3VicGF0aHMgIT0gTlVMTCkKQEAgLTIyNDYsNiArMjI3MCwxMSBAQCBh Y2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlz dCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCQkJCQkJCQkJCQkgIGFwYXRoLT5maXJzdF9wYXJ0aWFs X3BhdGgpOwogCQkJKnNwZWNpYWxfc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3BlY2lhbF9zdWJw YXRocywKIAkJCQkJCQkJCQkJbmV3X3NwZWNpYWxfc3VicGF0aHMpOworCQkJKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0 aC0+cGFyZW50LT5yZWxpZHMpOworCQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQls aXN0X2NvbmNhdCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJYXBhdGgtPmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTIyNTQsNiArMjI4 MywxMSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJw YXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGgg PSAoTWVyZ2VBcHBlbmRQYXRoICopIHBhdGg7CiAKIAkJKnN1YnBhdGhzID0gbGlzdF9jb25jYXQo KnN1YnBhdGhzLCBtcGF0aC0+c3VicGF0aHMpOworCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMg PQorCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVs aWRzKTsKKwkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCWxpc3RfY29uY2F0KCpjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCW1wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0 cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyNjUsMTAgKzIyOTksMTUgQEAgYWNjdW11bGF0ZV9h cHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFs X3N1YnBhdGhzKQogICoJCVJldHVybnMgdGhlIHNpbmdsZSBzdWJwYXRoIG9mIGFuIEFwcGVuZC9N ZXJnZUFwcGVuZCwgb3IganVzdAogICoJCXJldHVybiAncGF0aCcgaWYgaXQncyBub3QgYSBzaW5n bGUgc3ViLXBhdGggQXBwZW5kL01lcmdlQXBwZW5kLgogICoKKyAqIEFzIGEgc2lkZSBlZmZlY3Qs IHdoZW5ldmVyIHdlIHJldHVybiBhIHNpbmdsZSBzdWJwYXRoIHJhdGhlciB0aGFuIHRoZQorICog b3JpZ2luYWwgcGF0aCwgYWRkIHRoZSByZWxpZCBzZXQgZm9yIHRoZSBvcmlnaW5hbCBwYXRoIHRv CisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgc28gdGhhdCB0aG9zZSByZWxpZHMgZG9uJ3Qg ZW50aXJlbHkgZGlzYXBwZWFyCisgKiBmcm9tIHRoZSBmaW5hbCBwbGFuLgorICoKICAqIE5vdGU6 ICdwYXRoJyBtdXN0IG5vdCBiZSBhIHBhcmFsbGVsLWF3YXJlIHBhdGguCiAgKi8KIHN0YXRpYyBQ YXRoICoKLWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKK2dldF9zaW5n bGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKmNoaWxkX2FwcGVuZF9yZWxp ZF9zZXRzKQogewogCUFzc2VydCghcGF0aC0+cGFyYWxsZWxfYXdhcmUpOwogCkBAIC0yMjc3LDE0 ICsyMzE2LDIyIEBAIGdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKIAkJ QXBwZW5kUGF0aCAqYXBhdGggPSAoQXBwZW5kUGF0aCAqKSBwYXRoOwogCiAJCWlmIChsaXN0X2xl bmd0aChhcGF0aC0+c3VicGF0aHMpID09IDEpCisJCXsKKwkJCSpjaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVu dC0+cmVsaWRzKTsKIAkJCXJldHVybiAoUGF0aCAqKSBsaW5pdGlhbChhcGF0aC0+c3VicGF0aHMp OworCQl9CiAJfQogCWVsc2UgaWYgKElzQShwYXRoLCBNZXJnZUFwcGVuZFBhdGgpKQogCXsKIAkJ TWVyZ2VBcHBlbmRQYXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQlp ZiAobGlzdF9sZW5ndGgobXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBw YXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwobXBhdGgt PnN1YnBhdGhzKTsKKwkJfQogCX0KIAogCXJldHVybiBwYXRoOwpAQCAtMjMwNCw2ICsyMzUxLDgg QEAgZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoKQogc3RhdGljIHZvaWQK IHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQogeworCUFwcGVuZFBhdGhJ bnB1dCBpbiA9IHswfTsKKwogCS8qIFNldCBkdW1teSBzaXplIGVzdGltYXRlcyAtLS0gd2UgbGVh dmUgYXR0cl93aWR0aHNbXSBhcyB6ZXJvZXMgKi8KIAlyZWwtPnJvd3MgPSAwOwogCXJlbC0+cmVs dGFyZ2V0LT53aWR0aCA9IDA7CkBAIC0yMzEzLDcgKzIzNjIsNyBAQCBzZXRfZHVtbXlfcmVsX3Bh dGhsaXN0KFJlbE9wdEluZm8gKnJlbCkKIAlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CiAK IAkvKiBTZXQgdXAgdGhlIGR1bW15IHBhdGggKi8KLQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIE5JTCwgTklMLAorCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwgaW4sCiAJCQkJCQkJCQkJCSAgTklM LCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZhbHNlLCAtMSkpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCAyNjE1NjUxYzA3My4uNDQzZTJk Y2E3YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMTUxMyw2ICsx NTEzLDcgQEAgdm9pZAogbWFya19kdW1teV9yZWwoUmVsT3B0SW5mbyAqcmVsKQogewogCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwlBcHBlbmRQYXRoSW5wdXQgaW4gPSB7MH07CiAKIAkvKiBB bHJlYWR5IG1hcmtlZD8gKi8KIAlpZiAoaXNfZHVtbXlfcmVsKHJlbCkpCkBAIC0xNTI5LDcgKzE1 MzAsNyBAQCBtYXJrX2R1bW15X3JlbChSZWxPcHRJbmZvICpyZWwpCiAJcmVsLT5wYXJ0aWFsX3Bh dGhsaXN0ID0gTklMOwogCiAJLyogU2V0IHVwIHRoZSBkdW1teSBwYXRoICovCi0JYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgoTlVMTCwgcmVsLCBOSUwsIE5JTCwKKwlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIGluLAog CQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFsX3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBm YWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4 IGMyNmU4NDFmNTM3Li43NDg5NDY0N2NhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYwpAQCAtMTI2Myw2ICsxMjYzLDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFuLT5w bGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJcGxh bi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhrZXlz ICE9IE5JTCkKIAl7CkBAIC0xNDc1LDYgKzE0NzYsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bs YW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4t PmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFwcHJl bGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVz dF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBzb3J0 IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGU4NjI3OTJlYjQ1Li5kNGJmOGE5 NTVkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDA2Miw3ICs0MDYy LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICogbWlnaHQgZ2V0IGJldHdlZW4gMCBhbmQgTiBv dXRwdXQgcm93cy4gT2ZmaGFuZCBJIHRoaW5rIHRoYXQncwogCQkgKiBkZXNpcmVkLikKIAkJICov Ci0JCUxpc3QJICAgKnBhdGhzID0gTklMOworCQlBcHBlbmRQYXRoSW5wdXQgYXBwZW5kID0gezB9 OwogCiAJCXdoaWxlICgtLW5yb3dzID49IDApCiAJCXsKQEAgLTQwNzAsMTMgKzQwNzAsMTIgQEAg Y3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKmlucHV0X3JlbCwKIAkJCQljcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgocm9vdCwgZ3Jv dXBlZF9yZWwsCiAJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCiAJCQkJCQkJCQkJ IChMaXN0ICopIHBhcnNlLT5oYXZpbmdRdWFsKTsKLQkJCXBhdGhzID0gbGFwcGVuZChwYXRocywg cGF0aCk7CisJCQlhcHBlbmQuc3VicGF0aHMgPSBsYXBwZW5kKGFwcGVuZC5zdWJwYXRocywgcGF0 aCk7CiAJCX0KIAkJcGF0aCA9IChQYXRoICopCiAJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwK IAkJCQkJCQkgICBncm91cGVkX3JlbCwKLQkJCQkJCQkgICBwYXRocywKLQkJCQkJCQkgICBOSUws CisJCQkJCQkJICAgYXBwZW5kLAogCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCmluZGV4IDc4Yzk1 YzM2ZGQ1Li5mNTBjMjk2ZTNkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9u LmMKQEAgLTY5Niw5ICs2OTYsOSBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25T dG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJTGlzdENlbGwgICAqbGM7CiAJTGlzdENlbGwg ICAqbGMyOwogCUxpc3RDZWxsICAgKmxjMzsKLQlMaXN0CSAgICpjaGVhcGVzdF9wYXRobGlzdCA9 IE5JTDsKLQlMaXN0CSAgICpvcmRlcmVkX3BhdGhsaXN0ID0gTklMOwotCUxpc3QJICAgKnBhcnRp YWxfcGF0aGxpc3QgPSBOSUw7CisJQXBwZW5kUGF0aElucHV0IGNoZWFwZXN0ID0gezB9OworCUFw cGVuZFBhdGhJbnB1dCBvcmRlcmVkID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJ0aWFsID0g ezB9OwogCWJvb2wJCXBhcnRpYWxfcGF0aHNfdmFsaWQgPSB0cnVlOwogCWJvb2wJCWNvbnNpZGVy X3BhcmFsbGVsID0gdHJ1ZTsKIAlMaXN0CSAgICpyZWxsaXN0OwpAQCAtNzgzLDcgKzc4Myw3IEBA IGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJaWYgKGlzX2R1bW15X3JlbChyZWwpKQogCQkJY29udGludWU7CiAKLQkJY2hlYXBl c3RfcGF0aGxpc3QgPSBsYXBwZW5kKGNoZWFwZXN0X3BhdGhsaXN0LAorCQljaGVhcGVzdC5zdWJw YXRocyA9IGxhcHBlbmQoY2hlYXBlc3Quc3VicGF0aHMsCiAJCQkJCQkJCQlyZWwtPmNoZWFwZXN0 X3RvdGFsX3BhdGgpOwogCiAJCWlmICh0cnlfc29ydGVkKQpAQCAtNzk1LDcgKzc5NSw3IEBAIGdl bmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJCQkJCQkJICBmYWxzZSk7CiAKIAkJCWlmIChvcmRlcmVkX3BhdGggIT0gTlVM TCkKLQkJCQlvcmRlcmVkX3BhdGhsaXN0ID0gbGFwcGVuZChvcmRlcmVkX3BhdGhsaXN0LCBvcmRl cmVkX3BhdGgpOworCQkJCW9yZGVyZWQuc3VicGF0aHMgPSBsYXBwZW5kKG9yZGVyZWQuc3VicGF0 aHMsIG9yZGVyZWRfcGF0aCk7CiAJCQllbHNlCiAJCQl7CiAJCQkJLyoKQEAgLTgxOCwyMCArODE4 LDIwIEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVy SW5mbyAqcm9vdCwKIAkJCWVsc2UgaWYgKHJlbC0+cGFydGlhbF9wYXRobGlzdCA9PSBOSUwpCiAJ CQkJcGFydGlhbF9wYXRoc192YWxpZCA9IGZhbHNlOwogCQkJZWxzZQotCQkJCXBhcnRpYWxfcGF0 aGxpc3QgPSBsYXBwZW5kKHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJCQkJICAgbGluaXRpYWwo cmVsLT5wYXJ0aWFsX3BhdGhsaXN0KSk7CisJCQkJcGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzID0g bGFwcGVuZChwYXJ0aWFsLnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkgICBsaW5pdGlh bChyZWwtPnBhcnRpYWxfcGF0aGxpc3QpKTsKIAkJfQogCX0KIAogCS8qIEJ1aWxkIHJlc3VsdCBy ZWxhdGlvbi4gKi8KIAlyZXN1bHRfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsIFVQUEVSUkVM X1NFVE9QLCByZWxpZHMpOwogCXJlc3VsdF9yZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9zZXRvcF9w YXRodGFyZ2V0KHJvb3QsIHRsaXN0LAotCQkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhdGhsaXN0KTsK KwkJCQkJCQkJCQkJCQljaGVhcGVzdC5zdWJwYXRocyk7CiAJcmVzdWx0X3JlbC0+Y29uc2lkZXJf cGFyYWxsZWwgPSBjb25zaWRlcl9wYXJhbGxlbDsKIAlyZXN1bHRfcmVsLT5jb25zaWRlcl9zdGFy dHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAKIAkvKiBJZiBhbGwgVU5JT04gY2hp bGRyZW4gd2VyZSBkdW1teSByZWxzLCBtYWtlIHRoZSByZXN1bHRpbmcgcmVsIGR1bW15ICovCi0J aWYgKGNoZWFwZXN0X3BhdGhsaXN0ID09IE5JTCkKKwlpZiAoY2hlYXBlc3Quc3VicGF0aHMgPT0g TklMKQogCXsKIAkJbWFya19kdW1teV9yZWwocmVzdWx0X3JlbCk7CiAKQEAgLTg0Miw4ICs4NDIs OCBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJICogQXBwZW5kIHRoZSBjaGlsZCByZXN1bHRzIHRvZ2V0aGVyIHVzaW5nIHRo ZSBjaGVhcGVzdCBwYXRocyBmcm9tIGVhY2gKIAkgKiB1bmlvbiBjaGlsZC4KIAkgKi8KLQlhcGF0 aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVhcGVz dF9wYXRobGlzdCwKLQkJCQkJCQkJCQlOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2UsIC0xKTsKKwlh cGF0aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVh cGVzdCwKKwkJCQkJCQkJCQlOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CiAKIAkvKgogCSAqIEVz dGltYXRlIG51bWJlciBvZiBncm91cHMuICBGb3Igbm93IHdlIGp1c3QgYXNzdW1lIHRoZSBvdXRw dXQgaXMgdW5pcXVlCkBAIC04NjIsNyArODYyLDcgQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0 T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQlpbnQJCQlwYXJhbGxlbF93 b3JrZXJzID0gMDsKIAogCQkvKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJl cXVlc3RlZCBmb3IgYW55IHN1YnBhdGguICovCi0JCWZvcmVhY2gobGMsIHBhcnRpYWxfcGF0aGxp c3QpCisJCWZvcmVhY2gobGMsIHBhcnRpYWwucGFydGlhbF9zdWJwYXRocykKIAkJewogCQkJUGF0 aAkgICAqc3VicGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTg4MSwxNCArODgxLDE0IEBAIGdlbmVy YXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwK IAkJaWYgKGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQpCiAJCXsKIAkJCXBhcmFsbGVsX3dvcmtlcnMg PSBNYXgocGFyYWxsZWxfd29ya2VycywKLQkJCQkJCQkJICAgcGdfbGVmdG1vc3Rfb25lX3BvczMy KGxpc3RfbGVuZ3RoKHBhcnRpYWxfcGF0aGxpc3QpKSArIDEpOworCQkJCQkJCQkgICBwZ19sZWZ0 bW9zdF9vbmVfcG9zMzIobGlzdF9sZW5ndGgocGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzKSkgKyAx KTsKIAkJCXBhcmFsbGVsX3dvcmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJ ICAgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcik7CiAJCX0KIAkJQXNzZXJ0KHBhcmFs bGVsX3dvcmtlcnMgPiAwKTsKIAogCQlwYXBhdGggPSAoUGF0aCAqKQotCQkJY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIE5JTCwgcGFydGlhbF9wYXRobGlzdCwKKwkJCWNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBwYXJ0aWFsLAogCQkJCQkJCSAgIE5JTCwg TlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkgICBlbmFibGVfcGFyYWxsZWxfYXBwZW5k LCAtMSk7CiAJCWdwYXRoID0gKFBhdGggKikKQEAgLTkwMSw3ICs5MDEsNyBAQCBnZW5lcmF0ZV91 bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCWRv dWJsZQkJZE51bUdyb3VwczsKIAkJYm9vbAkJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0YWJs ZShncm91cExpc3QpOwogCQlib29sCQljYW5faGFzaCA9IGdyb3VwaW5nX2lzX2hhc2hhYmxlKGdy b3VwTGlzdCk7Ci0JCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdF9wYXRo bGlzdCk7CisJCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdC5zdWJwYXRo cyk7CiAKIAkJLyoKIAkJICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBVTklPTiBvdXRwdXQgcm93 cy4gIEluIHRoZSBjYXNlIHdoZW4gb25seSBhCkBAIC05MTEsNyArOTExLDcgQEAgZ2VuZXJhdGVf dW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkg KiBjb250YWluIFZhcnMgd2l0aCB2YXJubz09MCwgd2hpY2ggZXN0aW1hdGVfbnVtX2dyb3Vwcygp IHdvdWxkbid0CiAJCSAqIGxpa2UuCiAJCSAqLwotCQlpZiAobGlzdF9sZW5ndGgoY2hlYXBlc3Rf cGF0aGxpc3QpID09IDEgJiYKKwkJaWYgKGxpc3RfbGVuZ3RoKGNoZWFwZXN0LnN1YnBhdGhzKSA9 PSAxICYmCiAJCQlmaXJzdF9wYXRoLT5wYXJlbnQtPnJlbG9wdGtpbmQgIT0gUkVMT1BUX1VQUEVS X1JFTCkKIAkJewogCQkJZE51bUdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKQEAg LTEwMTcsNyArMTAxNyw4IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tZXJn ZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJCSByZXN1bHRfcmVsLAotCQkJCQkJCQkJ CQkJCSBvcmRlcmVkX3BhdGhsaXN0LAorCQkJCQkJCQkJCQkJCSBvcmRlcmVkLnN1YnBhdGhzLAor CQkJCQkJCQkJCQkJCSBOSUwsCiAJCQkJCQkJCQkJCQkJIHVuaW9uX3BhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCSBOVUxMKTsKIApAQCAtMTIxNiw2ICsxMjE3LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJaWYgKG9w LT5hbGwpCiAJCQl7CiAJCQkJUGF0aAkgICAqYXBhdGg7CisJCQkJQXBwZW5kUGF0aElucHV0IGFw cGVuZCA9IHswfTsKKworCQkJCWFwcGVuZC5zdWJwYXRocyA9IGxpc3RfbWFrZTEobHBhdGgpOwog CiAJCQkJLyoKIAkJCQkgKiBFWENFUFQgQUxMOiBJZiB0aGUgcmlnaHQtaGFuZCBpbnB1dCBpcyBk dW1teSB0aGVuIHdlIGNhbgpAQCAtMTIyNCw4ICsxMjI4LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAqIGJl dHdlZW4gdGhlIHNldCBvcCB0YXJnZXRsaXN0IGFuZCB0aGUgdGFyZ2V0bGlzdCBvZiB0aGUKIAkJ CQkgKiBsZWZ0IGlucHV0LiAgVGhlIEFwcGVuZCB3aWxsIGJlIHJlbW92ZWQgaW4gc2V0cmVmcy5j LgogCQkJCSAqLwotCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3Qs IHJlc3VsdF9yZWwsIGxpc3RfbWFrZTEobHBhdGgpLAotCQkJCQkJCQkJCQkJCU5JTCwgTklMLCBO VUxMLCAwLCBmYWxzZSwgLTEpOworCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9w YXRoKHJvb3QsIHJlc3VsdF9yZWwsCisJCQkJCQkJCQkJCQkJYXBwZW5kLCBOSUwsIE5VTEwsIDAs CisJCQkJCQkJCQkJCQkJZmFsc2UsIC0xKTsKIAogCQkJCWFkZF9wYXRoKHJlc3VsdF9yZWwsIGFw YXRoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggNzI5NTQzOGFk MjAuLmJiMzAxZDU5NjkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAg LTEyOTgsNyArMTI5OCw3IEBAIGNyZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogQXBwZW5kUGF0aCAqCiBjcmVhdGVfYXBwZW5kX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICAgUmVsT3B0SW5mbyAqcmVsLAotCQkJCSAgIExpc3Qg KnN1YnBhdGhzLCBMaXN0ICpwYXJ0aWFsX3N1YnBhdGhzLAorCQkJCSAgIEFwcGVuZFBhdGhJbnB1 dCBpbnB1dCwKIAkJCQkgICBMaXN0ICpwYXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyLAog CQkJCSAgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCSAg IGRvdWJsZSByb3dzKQpAQCAtMTMwOCw2ICsxMzA4LDcgQEAgY3JlYXRlX2FwcGVuZF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCiAJQXNzZXJ0KCFwYXJhbGxlbF9hd2FyZSB8fCBwYXJhbGxlbF93 b3JrZXJzID4gMCk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBpbnB1 dC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRf QXBwZW5kOwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5w YXRodGFyZ2V0ID0gcmVsLT5yZWx0YXJnZXQ7CkBAIC0xMzIzLDcgKzEzMjQsNyBAQCBjcmVhdGVf YXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogb24gdGhlIHNpbXBsZXIgZ2V0X2Fw cGVuZHJlbF9wYXJhbXBhdGhpbmZvLiAgVGhlcmUncyBubyBwb2ludCBpbiBkb2luZwogCSAqIHRo ZSBtb3JlIGV4cGVuc2l2ZSB0aGluZyBmb3IgYSBkdW1teSBwYXRoLCBlaXRoZXIuCiAJICovCi0J aWYgKHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCAmJiByb290ICYmIHN1YnBhdGhz ICE9IE5JTCkKKwlpZiAocmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMICYmIHJvb3Qg JiYgaW5wdXQuc3VicGF0aHMgIT0gTklMKQogCQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0g Z2V0X2Jhc2VyZWxfcGFyYW1wYXRoaW5mbyhyb290LAogCQkJCQkJCQkJCQkJCQkJICByZWwsCiAJ CQkJCQkJCQkJCQkJCQkgIHJlcXVpcmVkX291dGVyKTsKQEAgLTEzNTQsMTEgKzEzNTUsMTEgQEAg Y3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkgKi8KIAkJQXNzZXJ0KHBh dGhrZXlzID09IE5JTCk7CiAKLQkJbGlzdF9zb3J0KHN1YnBhdGhzLCBhcHBlbmRfdG90YWxfY29z dF9jb21wYXJlKTsKLQkJbGlzdF9zb3J0KHBhcnRpYWxfc3VicGF0aHMsIGFwcGVuZF9zdGFydHVw X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5zdWJwYXRocywgYXBwZW5kX3RvdGFs X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5wYXJ0aWFsX3N1YnBhdGhzLCBhcHBl bmRfc3RhcnR1cF9jb3N0X2NvbXBhcmUpOwogCX0KLQlwYXRobm9kZS0+Zmlyc3RfcGFydGlhbF9w YXRoID0gbGlzdF9sZW5ndGgoc3VicGF0aHMpOwotCXBhdGhub2RlLT5zdWJwYXRocyA9IGxpc3Rf Y29uY2F0KHN1YnBhdGhzLCBwYXJ0aWFsX3N1YnBhdGhzKTsKKwlwYXRobm9kZS0+Zmlyc3RfcGFy dGlhbF9wYXRoID0gbGlzdF9sZW5ndGgoaW5wdXQuc3VicGF0aHMpOworCXBhdGhub2RlLT5zdWJw YXRocyA9IGxpc3RfY29uY2F0KGlucHV0LnN1YnBhdGhzLCBpbnB1dC5wYXJ0aWFsX3N1YnBhdGhz KTsKIAogCS8qCiAJICogQXBwbHkgcXVlcnktd2lkZSBMSU1JVCBpZiBrbm93biBhbmQgcGF0aCBp cyBmb3Igc29sZSBiYXNlIHJlbGF0aW9uLgpAQCAtMTQ3MCw2ICsxNDcxLDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4NSw2ICsxNDg3LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5MzIsMTEgKzM5MzUsMTIgQEAgcmVwYXJhbWV0ZXJp emVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwKIAkJY2FzZSBUX0FwcGVuZDoK IAkJCXsKIAkJCQlBcHBlbmRQYXRoICphcGF0aCA9IChBcHBlbmRQYXRoICopIHBhdGg7Ci0JCQkJ TGlzdAkgICAqY2hpbGRwYXRocyA9IE5JTDsKLQkJCQlMaXN0CSAgICpwYXJ0aWFscGF0aHMgPSBO SUw7CisJCQkJQXBwZW5kUGF0aElucHV0IG5ld19hcHBlbmQgPSB7MH07CiAJCQkJaW50CQkJaTsK IAkJCQlMaXN0Q2VsbCAgICpsYzsKIAorCQkJCW5ld19hcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKIAkJCQkvKiBSZXBhcmFt ZXRlcml6ZSB0aGUgY2hpbGRyZW4gKi8KIAkJCQlpID0gMDsKIAkJCQlmb3JlYWNoKGxjLCBhcGF0 aC0+c3VicGF0aHMpCkBAIC0zOTUwLDEzICszOTU0LDEzIEBAIHJlcGFyYW1ldGVyaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQkJ LyogV2UgaGF2ZSB0byByZS1zcGxpdCB0aGUgcmVndWxhciBhbmQgcGFydGlhbCBwYXRocyAqLwog CQkJCQlpZiAoaSA8IGFwYXRoLT5maXJzdF9wYXJ0aWFsX3BhdGgpCi0JCQkJCQljaGlsZHBhdGhz ID0gbGFwcGVuZChjaGlsZHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdfYXBwZW5kLnN1YnBhdGhz ID0gbGFwcGVuZChuZXdfYXBwZW5kLnN1YnBhdGhzLCBzcGF0aCk7CiAJCQkJCWVsc2UKLQkJCQkJ CXBhcnRpYWxwYXRocyA9IGxhcHBlbmQocGFydGlhbHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdf YXBwZW5kLnBhcnRpYWxfc3VicGF0aHMgPSBsYXBwZW5kKG5ld19hcHBlbmQucGFydGlhbF9zdWJw YXRocywgc3BhdGgpOwogCQkJCQlpKys7CiAJCQkJfQogCQkJCXJldHVybiAoUGF0aCAqKQotCQkJ CQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBwYXJ0aWFscGF0aHMs CisJCQkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIG5ld19hcHBlbmQsCiAJCQkJCQkJ CQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgICBh cGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgtPnBhdGgucGFy YWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDljYzVkMmU3NDExLi5jMTc1ZWU5 NWI2OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIyNTAsNiArMjI1MCwxMiBAQCB0eXBlZGVm IHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJwYXRocycgY29u dGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRpYWwgc3VicGF0 aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgpIGFsbG93cyB1 cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBwYXRocyBkb3du IHRvIG9uZSwgd2Ugc3RvcmUgdGhlIFJUSSBzZXRzIGZvciB0aGUgb21pdHRlZAorICogcGF0aHMg aW4gY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMuIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgcGxh bm5pbmcgb3IKKyAqIGV4ZWN1dGlvbjsgd2UgZG8gaXQgZm9yIHRoZSBiZW5lZml0IG9mIGNvZGUg dGhhdCB3YW50cyB0byBpbnNwZWN0IHRoZQorICogZmluYWwgcGxhbiBhbmQgdW5kZXJzdGFuZCBo b3cgaXQgY2FtZSB0byBiZS4KKyAqCiAgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBmb3IgInN1YnBh dGhzIiB0byBjb250YWluIG9ubHkgb25lLCBvciBldmVuIG5vLAogICogZWxlbWVudHMuICBUaGVz ZSBjYXNlcyBhcmUgb3B0aW1pemVkIGR1cmluZyBjcmVhdGVfYXBwZW5kX3BsYW4uCiAgKiBJbiBw YXJ0aWN1bGFyLCBhbiBBcHBlbmRQYXRoIHdpdGggbm8gc3VicGF0aHMgaXMgYSAiZHVtbXkiIHBh dGggdGhhdApAQCAtMjI2NSw2ICsyMjcxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUGF0aAog CS8qIEluZGV4IG9mIGZpcnN0IHBhcnRpYWwgcGF0aCBpbiBzdWJwYXRoczsgbGlzdF9sZW5ndGgo c3VicGF0aHMpIGlmIG5vbmUgKi8KIAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BhdGg7CiAJQ2FyZGlu YWxpdHkgbGltaXRfdHVwbGVzOwkvKiBoYXJkIGxpbWl0IG9uIG91dHB1dCB0dXBsZXMsIG9yIC0x ICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiB9IEFwcGVuZFBhdGg7CiAK ICNkZWZpbmUgSVNfRFVNTVlfQVBQRU5EKHApIFwKQEAgLTIyODEsMTIgKzIyODgsMTUgQEAgZXh0 ZXJuIGJvb2wgaXNfZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCk7CiAvKgogICogTWVyZ2VBcHBl bmRQYXRoIHJlcHJlc2VudHMgYSBNZXJnZUFwcGVuZCBwbGFuLCBpZSwgdGhlIG1lcmdpbmcgb2Yg c29ydGVkCiAgKiByZXN1bHRzIGZyb20gc2V2ZXJhbCBtZW1iZXIgcGxhbnMgdG8gcHJvZHVjZSBz aW1pbGFybHktc29ydGVkIG91dHB1dC4KKyAqCisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyBo YXMgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIGZvciBBcHBlbmRQYXRoLgogICovCiB0eXBlZGVm IHN0cnVjdCBNZXJnZUFwcGVuZFBhdGgKIHsKIAlQYXRoCQlwYXRoOwogCUxpc3QJICAgKnN1YnBh dGhzOwkJLyogbGlzdCBvZiBjb21wb25lbnQgUGF0aHMgKi8KIAlDYXJkaW5hbGl0eSBsaW1pdF90 dXBsZXM7CS8qIGhhcmQgbGltaXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAg ICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIH0gTWVyZ2VBcHBlbmRQYXRoOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaAppbmRleCAwYWQwZmY0MDRjOS4uNDg1YmVjNWFhYmQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCkBAIC0zOTQsOSArMzk0LDE2IEBAIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87 CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIHR5cGVkZWYgc3RydWN0 IEFwcGVuZAogewogCVBsYW4JCXBsYW47CisKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3Jt ZWQgYnkgdGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOworCisJLyogc2V0cyBv ZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlz dAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlM aXN0CSAgICphcHBlbmRwbGFuczsKKwogCS8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCiAJ aW50CQkJbmFzeW5jcGxhbnM7CiAKQEAgLTQyNiw2ICs0MzMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3Qg TWVyZ2VBcHBlbmQKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkgdGhpcyBub2Rl ICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOwogCisJLyogc2V0cyBvZiBSVElzIG9mIGFwcGVu ZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlzdAkgICAqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlMaXN0CSAgICptZXJnZXBs YW5zOwogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8g aW4gc3RydWN0IFNvcnQ6ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDIyNDc1MDg1 OWMzLi5jZjhhNjU0ZmE1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTE3LDYgKzE3 LDIwIEBACiAjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMvcGF0 aG5vZGVzLmgiCiAKKy8qCisgKiBFdmVyeXRoaW5nIGluIHN1YnBhdGhzIG9yIHBhcnRpYWxfc3Vi cGF0aHMgd2lsbCBiZWNvbWUgcGFydCBvZiB0aGUKKyAqIEFwcGVuZCBub2RlJ3Mgc3VicGF0aHMg bGlzdC4gUGFydGlhbCBhbmQgbm9uLXBhcnRpYWwgc3VicGF0aHMgY2FuIGJlCisgKiBtaXhlZCBp biB0aGUgc2FtZSBBcHBlbmQgbm9kZSBvbmx5IGlmIGl0IGlzIHBhcmFsbGVsLWF3YXJlLgorICoK KyAqIFNlZSB0aGUgY29tbWVudHMgZm9yIEFwcGVuZFBhdGggZm9yIHRoZSBtZWFuaW5nIGFuZCBw dXJwb3NlIG9mIHRoZQorICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgZmllbGQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IEFwcGVuZFBhdGhJbnB1dAoreworCUxpc3QJICAgKnN1YnBhdGhzOworCUxp c3QJICAgKnBhcnRpYWxfc3VicGF0aHM7CisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHM7Cit9IEFwcGVuZFBhdGhJbnB1dDsKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29u dHJvbCBkdXJpbmcgam9pbnJlbCBzZXR1cCAqLwogdHlwZWRlZiB2b2lkICgqam9pbnJlbF9zZXR1 cF9ob29rX3R5cGUpIChQbGFubmVySW5mbyAqcm9vdCwKQEAgLTc4LDE0ICs5MiwxNiBAQCBleHRl cm4gVGlkUmFuZ2VQYXRoICpjcmVhdGVfdGlkcmFuZ2VzY2FuX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkJCSAgTGlzdCAqdGlkcmFuZ2VxdWFscywKIAkJCQkJCQkJCQkJICBSZWxp ZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCSAgaW50IHBhcmFsbGVsX3dvcmtlcnMpOwor CiBleHRlcm4gQXBwZW5kUGF0aCAqY3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCi0JCQkJCQkJCQkgIExpc3QgKnN1YnBhdGhzLCBMaXN0ICpwYXJ0 aWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBBcHBlbmRQYXRoSW5wdXQgaW5wdXQsCiAJCQkJCQkJ CQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGlu dCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3Vi bGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBlbmRQYXRoICpjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJ CQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJIExpc3QgKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJIExpc3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJ IFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBleHRlcm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVf Z3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IGE2MmEwOTFkMDIxLi42MDJlMDE3NjUyOSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTEyNSw2ICsxMjUsNyBAQCBBbmxJbmRleERhdGEKIEFueUFycmF5VHlwZQogQXBw ZW5kCiBBcHBlbmRQYXRoCitBcHBlbmRQYXRoSW5wdXQKIEFwcGVuZFJlbEluZm8KIEFwcGVuZFN0 YXRlCiBBcHBseUVycm9yQ2FsbGJhY2tBcmcKLS0gCjIuNTEuMAoK --000000000000e844b70648eae553 Content-Type: application/octet-stream; name="v11-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v11-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkoey7nn4 RnJvbSBkZjYzNzI2YmRhNDgwYjViMGU1Y2NkMjZhZTc3ZWVlNTlmOWRmMGQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMTUgSmFuIDIwMjYgMDk6MjE6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMSA1 LzVdIFdJUDogQWRkIHBnX3BsYW5fYWR2aWNlIGNvbnRyaWIgbW9kdWxlLgoKUHJvdmlkZSBhIGZh Y2lsaXR5IHRoYXQgKDEpIGNhbiBiZSB1c2VkIHRvIHN0YWJpbGl6ZSBjZXJ0YWluIHBsYW4gY2hv aWNlcwpzbyB0aGF0IHRoZSBwbGFubmVyIGNhbm5vdCByZXZlcnNlIGNvdXJzZSB3aXRob3V0IGF1 dGhvcml6YXRpb24gYW5kCigyKSBjYW4gYmUgdXNlZCBieSBrbm93bGVkZ2VhYmxlIHVzZXJzIHRv IGluc2lzdCBvbiBwbGFuIGNob2ljZXMgY29udHJhcnkKdG8gd2hhdCB0aGUgcGxhbm5lciBiZWxp ZXZlcyBiZXN0LiBJbiBib3RoIGNhc2VzLCB0ZXJyaWJsZSBvdXRjb21lcyBhcmUKcG9zc2libGU6 IHVzZXJzIHNob3VsZCB0aGluayB0d2ljZSBhbmQgcGVyaGFwcyB0aHJlZSB0aW1lcyBiZWZvcmUK Y29uc3RyYWluaW5nIHRoZSBwbGFubmVyJ3MgYWJpbGl0eSB0byBkbyBhcyBpdCB0aGlua3MgYmVz dDsgbmV2ZXJ0aGVsZXNzLAp0aGVyZSBhcmUgcHJvYmxlbXMgdGhhdCBhcmUgbXVjaCBtb3JlIGVh c2lseSBzb2x2ZWQgd2l0aCB0aGVzZSBmYWNpbGl0aWVzCnRoYW4gd2l0aG91dCB0aGVtLgoKVGhp cyBwYXRjaCB0YWtlcyB0aGUgYXBwcm9hY2ggb2YgYW5hbHl6aW5nIGEgZmluaXNoZWQgcGxhbiB0 byBwcm9kdWNlCnRleHR1YWwgb3V0cHV0LCB3aGljaCB3ZSBjYWxsICJwbGFuIGFkdmljZSIsIHRo YXQgZGVzY3JpYmVzIGtleQpkZWNpc2lvbnMgbWFkZSBkdXJpbmcgcGxhbjsgaWYgdGhhdCBwbGFu IGFkdmljZSBpcyBwcm92aWRlZCBkdXJpbmcKZnV0dXJlIHBsYW5uaW5nIGN5Y2xlcywgaXQgd2ls bCBmb3JjZSB0aG9zZSBrZXkgZGVjaXNpb25zIHRvIGJlIG1hZGUgaW4KdGhlIHNhbWUgd2F5LiAg Tm90IGFsbCBwbGFubmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7 CmZvciBleGFtcGxlLCBkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24g YXJlIGN1cnJlbnRseQpvdXQgb2Ygc2NvcGUsIGFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQ bGFuIGFkdmljZSBjYW4gYWxzbyBiZSBlZGl0ZWQKYnkgdGhlIHVzZXIsIG9yIGV2ZW4gd3JpdHRl biBmcm9tIHNjcmF0Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQKcG9zc2libGUgdG8gZ2Vu ZXJhdGUgb3V0Y29tZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4K UGFydGlhbCBhZHZpY2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91 dGNvbWVzIGJ1dCBub3QKb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2Vk IG9ubHkgb24gc3BlY2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBz ZXF1ZW50aWFsIHNjYW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3Rp bWF0ZXMgdGhhdCBtaWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEK cG9zc2libHktaW5jb3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBi ZSB1c2VmdWwgdG8KdXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQg YWZmZWN0cyBzZWxlY3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5n LCB0aGF0IGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxz LCBzZWUgY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUuCgpOT1RFOiBUaGlzIGNvZGUgaXMg anVzdCBhIHByb29mIG9mIGNvbmNlcHQuIEEgYnVuY2ggb2YgdGhpbmdzIGRvbid0CndvcmsgYW5k IGEgbG90IG9mIHRoZSBjb2RlIG5lZWRzIGNsZWFudXAuIEl0IGhhcyBubyBTR01MIGRvY3VtZW50 YXRpb24KYW5kIG5vdCBlbm91Z2ggdGVzdCBjYXNlcywgYW5kIHNvbWUgb2YgdGhlIGV4aXN0aW5n IHRlc3QgY2FzZXMgZG9uJ3QKZG8gYXMgd2Ugd291bGQgaG9wZS4gS25vd24gcHJvYmxlbXMgYXJl IGNhbGxlZCBvdXQgYnkgWFhYLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRsIDxsdWthc0BmaXR0 bC5jb20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNl ZGIuY29tPgpSZXZpZXdlZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ClJldmlld2VkLWJ5 OiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3 ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRGlh biBGYXkgPGRpQG5tZmF5LmNvbT4KUmV2aWV3ZWQtYnk6IEFqYXkgUGFsIDxhamF5LnBhbC5rQGdt YWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEpvaG4gTmF5bG9yIDxqb2huY25heWxvcmxzQGdtYWlsLmNv bT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9aLUpoMVQ2UXlXb0NPRE1W UWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWlsLmNvbQotLS0KIGNvbnRyaWIv TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogY29udHJpYi9t ZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAgfCAgICAzICsKIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgNTAgKwogY29udHJpYi9wZ19w bGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwgIDI2NyArKysKIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8ICAzNDQgKysrCiAuLi4vcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQgICAgfCAgNDEzICsrKysKIC4uLi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dCB8ICAyOTcgKysrCiAuLi4vZXhw ZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAgICAgICAgICAgICAgfCAgIDY1ICsKIC4uLi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dCB8ICAzNjQgKysrCiBjb250cmli L3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0ICAgICAgfCAgNzU3ICsrKysrKwogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zZW1pam9pbi5vdXQgIHwgIDMyNyArKysKIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dCAgICB8ICAxOTIgKysKIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgICAgICAgICAgICB8ICAgNzEgKwogLi4u L3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsICAgIHwgICA0MiArCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMgICAgICAgfCAgNDY4ICsrKysKIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbCB8ICAgIDUgKwogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oICAgICAgIHwgICA0MCArCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgICAgICAgICAgICAgfCAgMzk0ICsrKysKIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCAgICAgICAgICAgICB8ICAyMDQgKysKIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYyAgICAgICB8ICA2MzcgKysrKysr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmggICAgICAgfCAgIDE4ICsK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMgICAgICB8ICA0NzYgKysr KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaCAgICAgIHwgICA1MiAr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jICAgICAgICAgICAgfCAgNjI5ICsr KysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oICAgICAgICAgICAgfCAgMTA1 ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYyAgICAgICAgICB8ICA2Mjgg KysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaCAgICAgICAgICB8ICAg MjIgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55ICAgICAgICAgIHwgIDM0 MCArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgICAgICAgICB8IDIw MzggKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVy LmggICAgICAgICB8ICAgMTcgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYyAg ICAgICAgICAgIHwgIDMwNiArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgg ICAgICAgICAgICB8ICAgODUgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIu bCAgICAgICAgIHwgIDMwMiArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5j ICAgICAgICAgICB8ICA0OTIgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3Zl LmggICAgICAgICAgIHwgIDExMyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2Vy LmMgICAgICAgICAgfCAgOTUzICsrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf d2Fsa2VyLmggICAgICAgICAgfCAgMTQxICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9n YXRoZXIuc3FsICAgICAgICAgfCAgIDc5ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pv aW5fb3JkZXIuc3FsICAgICB8ICAxMjMgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9p bl9zdHJhdGVneS5zcWwgIHwgICA3NiArCiAuLi4vcGdfcGxhbl9hZHZpY2Uvc3FsL2xvY2FsX2Nv bGxlY3Rvci5zcWwgICAgfCAgIDQxICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRp dGlvbndpc2Uuc3FsICB8ICAgOTEgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5z cWwgICAgICAgICAgIHwgIDE5NSArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2VtaWpv aW4uc3FsICAgICAgIHwgIDEwMyArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXgu c3FsICAgICAgICAgfCAgIDY4ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVz cy5wbCAgICAgICB8ICAxNDcgKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICAgICAgICAgICB8ICAgMzggKwogNDggZmlsZXMgY2hhbmdlZCwgMTI2MjAgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pv aW5fc3RyYXRlZ3kub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91dAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4 Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVp bGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2 aWNlLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z19wbGFuX2FkdmljZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ19wbGFuX2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2FzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmli L3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29yZGVyLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRlZ3kuc3FsCiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uu c3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5z cWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zZW1pam9p bi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50 YXguc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS90LzAwMV9y ZWdyZXNzLnBsCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9NYWtlZmlsZSBiL2NvbnRyaWIvTWFrZWZp bGUKaW5kZXggMmYwYTg4ZDNmNzcuLmRkMDRjMjBhY2QyIDEwMDY0NAotLS0gYS9jb250cmliL01h a2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUKQEAgLTM0LDYgKzM0LDcgQEAgU1VCRElSUyA9 IFwKIAkJcGdfZnJlZXNwYWNlbWFwIFwKIAkJcGdfbG9naWNhbGluc3BlY3QgXAogCQlwZ19vdmVy ZXhwbGFpbiBcCisJCXBnX3BsYW5fYWR2aWNlIFwKIAkJcGdfcHJld2FybQlcCiAJCXBnX3N0YXRf c3RhdGVtZW50cyBcCiAJCXBnX3N1cmdlcnkJXApkaWZmIC0tZ2l0IGEvY29udHJpYi9tZXNvbi5i dWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5kZXggZGVmMTMyNTdjYmUuLjVhNzUyZWFjMzQ3 IDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvbWVzb24uYnVp bGQKQEAgLTQ4LDYgKzQ4LDcgQEAgc3ViZGlyKCdwZ2NyeXB0bycpCiBzdWJkaXIoJ3BnX2ZyZWVz cGFjZW1hcCcpCiBzdWJkaXIoJ3BnX2xvZ2ljYWxpbnNwZWN0JykKIHN1YmRpcigncGdfb3ZlcmV4 cGxhaW4nKQorc3ViZGlyKCdwZ19wbGFuX2FkdmljZScpCiBzdWJkaXIoJ3BnX3ByZXdhcm0nKQog c3ViZGlyKCdwZ3Jvd2xvY2tzJykKIHN1YmRpcigncGdfc3RhdF9zdGF0ZW1lbnRzJykKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZSBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uMTlhMTQyNTMwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvcGdwYV9wYXJzZXIuaAorL3BncGFfcGFyc2Vy LmMKKy9wZ3BhX3NjYW5uZXIuYwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9N YWtlZmlsZSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkNGM1NTlhZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQpAQCAtMCwwICsxLDUwIEBACisjIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9IHBnX3BsYW5fYWR2aWNl CitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ19wbGFuX2FkdmljZS5vIFwKKwlwZ3BhX2Fz dC5vIFwKKwlwZ3BhX2NvbGxlY3Rvci5vIFwKKwlwZ3BhX2lkZW50aWZpZXIubyBcCisJcGdwYV9q b2luLm8gXAorCXBncGFfb3V0cHV0Lm8gXAorCXBncGFfcGFyc2VyLm8gXAorCXBncGFfcGxhbm5l ci5vIFwKKwlwZ3BhX3NjYW4ubyBcCisJcGdwYV9zY2FubmVyLm8gXAorCXBncGFfdHJvdmUubyBc CisJcGdwYV93YWxrZXIubworCitFWFRFTlNJT04gPSBwZ19wbGFuX2FkdmljZQorREFUQSA9IHBn X3BsYW5fYWR2aWNlLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gInBnX3BsYW5fYWR2aWNlIC0gaGVs cCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4iCisKK1JFR1JFU1MgPSBnYXRoZXIgam9p bl9vcmRlciBqb2luX3N0cmF0ZWd5IHBhcnRpdGlvbndpc2Ugc2NhbgorVEFQX1RFU1RTID0gMQor CitFWFRSQV9DTEVBTiA9IHBncGFfcGFyc2VyLmggcGdwYV9wYXJzZXIuYyBwZ3BhX3NjYW5uZXIu YworCisjIHJlcXVpcmVkIGZvciAwMDFfcmVncmVzcy5wbAorUkVHUkVTU19TSExJQj0kKGFic190 b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgpCitleHBvcnQg UkVHUkVTU19TSExJQgorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQ R1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxz ZQorc3ViZGlyID0gY29udHJpYi9wZ19wbGFuX2FkdmljZQordG9wX2J1aWxkZGlyID0gLi4vLi4K K2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0 b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgorCisjIFNlZSBub3Rl cyBpbiBzcmMvYmFja2VuZC9wYXJzZXIvTWFrZWZpbGUgYWJvdXQgdGhlIGZvbGxvd2luZyB0d28g cnVsZXMKK3BncGFfcGFyc2VyLmg6IHBncGFfcGFyc2VyLmMKKwl0b3VjaCAkQAorCitwZ3BhX3Bh cnNlci5jOiBCSVNPTkZMQUdTICs9IC1kCisKKyMgRm9yY2UgdGhlc2UgZGVwZW5kZW5jaWVzIHRv IGJlIGtub3duIGV2ZW4gd2l0aG91dCBkZXBlbmRlbmN5IGluZm8gYnVpbHQ6CitwZ3BhX3BhcnNl ci5vIHBncGFfc2Nhbm5lci5vOiBwZ3BhX3BhcnNlci5oCmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL1JFQURNRSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNzc1MDhmNTAzYgotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FCkBAIC0wLDAgKzEsMjY3IEBA Citjb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQorCitQbGFuIEFkdmljZQorPT09PT09PT09 PT0KKworVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG1pbmktbGFuZ3VhZ2UgZm9yICJwbGFuIGFk dmljZSIgdGhhdCBhbGxvd3MgZm9yCitjb250cm9sIG9mIGNlcnRhaW4ga2V5IHBsYW5uZXIgZGVj aXNpb25zLiBHb2FscyBpbmNsdWRlICgxKSBlbmZvcmNpbmcgcGxhbgorc3RhYmlsaXR5IChteSBw cmV2aW91cyBwbGFuIHdhcyBnb29kIGFuZCBJIHdvdWxkIGxpa2UgdG8ga2VlcCBnZXR0aW5nIGEK K3NpbWlsYXIgb25lKSBhbmQgKDIpIGFsbG93aW5nIHVzZXJzIHRvIGV4cGVyaW1lbnQgd2l0aCBw bGFucyBvdGhlciB0aGFuCit0aGUgb25lIHByZWZlcnJlZCBieSB0aGUgb3B0aW1pemVyLiBOb24t Z29hbHMgaW5jbHVkZSAoMSkgY29udHJvbGxpbmcKK2V2ZXJ5IHBvc3NpYmxlIHBsYW5uZXIgZGVj aXNpb24gYW5kICgyKSBmb3JjaW5nIGNvbnNpZGVyYXRpb24gb2YgcGxhbnMKK3RoYXQgdGhlIG9w dGltaXplciByZWplY3RzIGZvciByZWFzb25zIG90aGVyIHRoYW4gY29zdC4gKFRoZXJlIGlzIHNv bWUKK3Jvb20gZm9yIGJpa2VzaGVkZGluZyBhYm91dCB3aGF0IGV4YWN0bHkgdGhpcyBub24tZ29h bCBtZWFuczogd2hhdCBpZgord2Ugc2tpcCBwYXRoIGdlbmVyYXRpb24gZW50aXJlbHkgZm9yIGEg Y2VydGFpbiBjYXNlIG9uIHRoZSB0aGVvcnkgdGhhdAord2Uga25vdyBpdCBjYW5ub3Qgd2luIG9u IGNvc3Q/IERvZXMgdGhhdCBjb3VudCBhcyBhIGNvc3QtYmFzZWQgcmVqZWN0aW9uCitldmVuIHRo b3VnaCBubyBjb3N0IHdhcyBldmVyIGNvbXB1dGVkPykKKworR2VuZXJhbGx5LCBwbGFuIGFkdmlj ZSBpcyBhIHNlcmllcyBvZiB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBhZHZpY2UgaXRlbXMsCitlYWNo IG9mIHdoaWNoIGFwcGxpZXMgYW4gYWR2aWNlIHRhZyB0byBhIGxpc3Qgb2YgYWR2aWNlIHRhcmdl dHMuIEZvcgorZXhhbXBsZSwgIlNFUV9TQ0FOKGZvbykgSEFTSF9KT0lOKGJhckBzcykiIGNvbnRh aW5zIHR3byBpdGVtcyBvZiBhZHZpY2UsCit0aGUgZmlyc3Qgb2Ygd2hpY2ggYXBwbGllcyB0aGUg U0VRX1NDQU4gdGFnIHRvICJmb28iIGFuZCB0aGUgc2Vjb25kIG9mCit3aGljaCBhcHBsaWVzIHRo ZSBIQVNIX0pPSU4gdGFnIHRvICJiYXJAc3MiLiBJbiB0aGlzIHNpbXBsZSBleGFtcGxlLCBlYWNo Cit0YXJnZXQgaWRlbnRpZmllcyBhIHNpbmdsZSByZWxhdGlvbjsgc2VlICJSZWxhdGlvbiBJZGVu dGlmaWVycyIsIGJlbG93LgorQWR2aWNlIHRhZ3MgY2FuIGFsc28gYmUgYXBwbGllZCB0byBncm91 cHMgb2YgcmVsYXRpb25zOyBmb3IgZXhhbXBsZSwKKyJIQVNIX0pPSU4oYmF6IChibGV0Y2ggcXV1 eCkpIiBhcHBsaWVzIHRoZSBIQVNIX0pPSU4gdGFnIHRvIHRoZSBzaW5nbGUKK3JlbGF0aW9uIGlk ZW50aWZpZXIgImJheiIgYXMgd2VsbCBhcyB0byB0aGUgMi1pdGVtIGxpc3QgY29udGFpbmluZwor ImJsZXRjaCIgYW5kICJxdXV4Ii4KKworQ3JpdGljYWxseSwgdGhpcyBtb2R1bGUga25vd3MgYm90 aCBob3cgdG8gZ2VuZXJhdGUgcGxhbiBhZHZpY2UgZnJvbSBhbgorYWxyZWFkeS1leGlzdGluZyBw bGFuLCBhbmQgYWxzbyBob3cgdG8gZW5mb3JjZSBpdCBkdXJpbmcgZnV0dXJlIHBsYW5uaW5nCitj eWNsZXMuIEV2ZXJ5dGhpbmcgaXQgZG9lcyBpcyBpbnRlbmRlZCB0byBiZSAicm91bmQtdHJpcCBz YWZlIjogaWYgeW91CitnZW5lcmF0ZSBhZHZpY2UgZnJvbSBhIHBsYW4gYW5kIHRoZW4gZmVlZCB0 aGF0IGJhY2sgaW50byBhIGZ1dHVyZSBwbGFuaW5nCitjeWNsZSwgZWFjaCBwaWVjZSBvZiBhZHZp Y2Ugc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYXBwbHkgdG8gdGhlIGV4YWN0bHkgdGhlCitzYW1l IHBhcnQgb2YgdGhlIHF1ZXJ5IGZyb20gd2hpY2ggaXQgd2FzIGdlbmVyYXRlZCB3aXRob3V0IGFt YmlndWl0eSBvcgorZ3Vlc3N3b3JrLCBhbmQgaXQgc2hvdWxkIHN1Y2Nlc2Z1bGx5IGVuZm9yY2Ug dGhlIHNhbWUgcGxhbm5pbmcgZGVjaXNpb24gdGhhdAorbGVkIHRvIGl0IGJlaW5nIGdlbmVyYXRl ZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE5vdGUgdGhhdCB0aGVyZSBpcyBubworaW50ZW50aW9uIHRo YXQgdGhlc2UgZ3VhcmFudGVlcyBob2xkIGluIHRoZSBwcmVzZW5jZSBvZiBpbnRlcnZlbmluZyBE REw7CitlLmcuIGlmIHlvdSBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgb2YgYSBmdW5jdGlvbiBzbyB0 aGF0IGEgc3VicXVlcnkgaXMgbm8KK2xvbmdlciBpbmxpbmVkLCBvciBpZiB5b3UgZHJvcCBhbiBp bmRleCBuYW1lZCBpbiB0aGUgcGxhbiBhZHZpY2UsIHRoZSBhZHZpY2UKK2lzbid0IGdvaW5nIHRv IHdvcmsgYW55IG1vcmUuIFRoYXQncyBleHBlY3RlZC4KKworVGhpcyBtb2R1bGUgYWltcyB0byBm b3JjZSB0aGUgcGxhbm5lciB0byBmb2xsb3cgYW55IHByb3ZpZGVkIGFkdmljZSB3aXRob3V0City ZWdhcmQgdG8gd2hldGhlciBpdCBpcyBhcHBlYXJzIHRvIGJlIGdvb2QgYWR2aWNlIG9yIGJhZCBh ZHZpY2UuICBJZiB0aGUKK3VzZXIgcHJvdmlkZXMgYmFkIGFkdmljZSwgd2hldGhlciBkZXJpdmVk IGZyb20gYSBwcmV2aW91c2x5LWdlbmVyYXRlZCBwbGFuCitvciBtYW51YWxseSB3cml0dGVuLCB0 aGV5IG1heSBnZXQgYSBiYWQgcGxhbi4gV2UgcmVnYXJkIHRoaXMgYXMgdXNlciBlcnJvciwKK25v dCBhIGRlZmVjdCBpbiB0aGlzIG1vZHVsZS4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgYXBwbHlpbmcg YWR2aWNlCitqdWRpY2lvdXNseSBhbmQgb25seSB3aGVuIHRydWx5IHJlcXVpcmVkIHRvIGF2b2lk IHByb2JsZW1zIHdpbGwgYmUgYSBtb3JlCitzdWNjZXNzZnVsIHN0cmF0ZWd5IHRoYW4gYXBwbHlp bmcgaXQgd2l0aCBhIGJyb2FkIGJydXNoLCBidXQgdXNlcnMgYXJlIGZyZWUKK3RvIGV4cGVyaW1l bnQgd2l0aCB3aGF0ZXZlciBzdHJhdGVnaWVzIHRoZXkgdGhpbmsgYmVzdC4KKworUmVsYXRpb24g SWRlbnRpZmllcnMKKz09PT09PT09PT09PT09PT09PT09CisKK1VuaXF1ZWx5IGlkZW50aWZ5aW5n IHRoZSBwYXJ0IG9mIGEgcXVlcnkgdG8gd2hpY2ggYSBjZXJ0YWluIHBpZWNlIG9mCithZHZpY2Ug YXBwbGllcyBpcyBoYXJkZXIgdGhhbiBpdCBzb3VuZHMuIE91ciBiYXNpYyBhcHByb2FjaCBpcyB0 byB1c2UKK3JlbGF0aW9uIGFsaWFzZXMgYXMgYSBzdGFydGluZyBwb2ludCwgYW5kIHRoZW4gZGlz YW1iaWd1YXRlLiBUaGVyZSBhcmUKK3RocmVlIHdheXMgdGhhdCBzYW1lIHJlbGF0aW9uIGFsaWFz IGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lczoKKworMS4gSXQgY2FuIGFwcGVhciBpbiBtb3JlIHRo YW4gb25lIHN1YnF1ZXJ5LgorCisyLiBJdCBjYW4gYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIHRo ZSBzYW1lIHN1YnF1ZXJ5LAorICAgZS5nLiAoZm9vIEpPSU4gYmFyKSB4IEpPSU4gZm9vLgorCisz LiBUaGUgdGFibGUgY2FuIGJlIHBhcnRpdGlvbmVkLgorCitBbnkgY29tYmluYXRpb24gb2YgdGhl c2UgdGhpbmdzIGNhbiBvY2N1ciBzaW11bHRhbmVvdXNseS4gIFRoZXJlZm9yZSwgb3VyCitnZW5l cmFsIHN5bnRheCBmb3IgYSByZWxhdGlvbiBpZGVudGlmaWVyIGlzOgorCithbGlhc19uYW1lI29j Y3VycmVuY2VfbnVtYmVyL3BhcnRpdGlvbl9zY2hlbWEucGFydGl0aW9uX25hbWVAcGxhbl9uYW1l CisKK0FsbCBjb21wb25lbnRzIGV4Y2VwdCBmb3IgdGhlIGFsaWFzX25hbWUgYXJlIG9wdGlvbmFs IGFuZCBpbmNsdWRlZCBvbmx5Cit3aGVuIHJlcXVpcmVkLiBXaGVuIGEgY29tcG9uZW50IGlzIG9t aXR0ZWQsIHRoZSBhc3NvY2lhdGVkIHB1bmN0dWF0aW9uCittdXN0IGFsc28gYmUgb21pdHRlZC4g T2NjdXJyZW5jZSBudW1iZXJzIGFyZSBjb3VudGVkIGlnbm9yaW5nIGNoaWxkcmVuIG9mCitwYXJ0 aXRpb25lZCB0YWJsZXMuICBXaGVuIHRoZSBnZW5lcmF0ZWQgb2NjdXJyZW5jZSBudW1iZXIgaXMg MSwgd2Ugb21pdAordGhlIG9jY3VycmVuY2UgbnVtYmVyLiBUaGUgcGFydGl0aW9uIHNjaGVtYSBh bmQgcGFydGl0aW9uIG5hbWUgYXJlIGluY2x1ZGVkCitvbmx5IGZvciBjaGlsZHJlbiBvZiBwYXJ0 aXRpb25lZCB0YWJsZXMuIEluIGdlbmVyYXRlZCBhZHZpY2UsIHRoZQorcGFydGl0aW9uX3NjaGVt YSBpcyBhbHdheXMgaW5jbHVkZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYSBwYXJ0aXRpb25fbmFtZSwK K2J1dCB1c2VyLXdyaXR0ZW4gYWR2aWNlIG1heSBtZW50aW9uIHRoZSBuYW1lIGFuZCBvbWl0IHRo ZSBzY2hlbWEuIFRoZQorcGxhbl9uYW1lIGlzIG9taXR0ZWQgZm9yIHRoZSB0b3AtbGV2ZWwgUGxh bm5lckluZm8uCisKK1NjYW4gQWR2aWNlCis9PT09PT09PT09PQorCitGb3IgbWFueSB0eXBlcyBv ZiBzY2FuLCBubyBhZHZpY2UgaXMgZ2VuZXJhdGVkIG9yIHBvc3NpYmxlOyBmb3IgaW5zdGFuY2Us CithIHN1YnF1ZXJ5IGlzIGFsd2F5cyBzY2FubmVkIHVzaW5nIGEgc3VicXVlcnkgc2Nhbi4gV2hp bGUgdGhhdCBzY2FuIG1heSBiZQorZWxpZGVkIHZpYSBzZXRyZWZzIHByb2Nlc3NpbmcsIHRoaXMg ZG9lc24ndCBjaGFuZ2UgdGhlIGZhY3QgdGhhdCBvbmx5IG9uZQorYmFzaWMgYXBwcm9hY2ggZXhp c3RzLiBIZW5jZSwgc2NhbiBhZHZpY2UgYXBwbGllcyBtb3N0bHkgdG8gcmVsYXRpb25zLCB3aGlj aAorY2FuIGJlIHNjYW5uZWQgaW4gbXVsdGlwbGUgd2F5cy4KKworV2UgdGVuZCB0byB0aGluayBv ZiBhIHNjYW4gYXMgdGFyZ2V0aW5nIGEgc2luZ2xlIHJlbGF0aW9uLCBhbmQgdGhhdCdzCitub3Jt YWxseSB0aGUgY2FzZSwgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS4gRm9yIGluc3RhbmNlLCBp ZiBhIGpvaW4gaXMKK3Byb3ZlbiBlbXB0eSwgdGhlIHdob2xlIHRoaW5nIG1heSBiZSByZXBsYWNl ZCB3aXRoIGEgc2luZ2xlIFJlc3VsdCBub2RlCit3aGljaCwgaW4gZWZmZWN0LCBpcyBhIGRlZ2Vu ZXJhdGUgc2NhbiBvZiBldmVyeSByZWxhdGlvbiBpbiB0aGUgY29sbGFwc2VkCitwb3J0aW9uIG9m IHRoZSBqb2luIHRyZWUuIFNpbWlsYXJseSwgaXQncyBwb3NzaWJsZSB0byBpbmplY3QgYSBjdXN0 b20gc2NhbgoraW4gc3VjaCBhIHdheSB0aGF0IGl0IHJlcGxhY2VzIGFuIGVudGlyZSBqb2luLiBJ ZiB3ZSBldmVyIGVtaXQgYWR2aWNlCitmb3IgdGhlc2UgY2FzZXMsIGl0IHdvdWxkIHRhcmdldCBz ZXRzIG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzIHN1cnJvdW5kZWQKK2J5IGN1cmx5IGJyYW5jZXMs IGUuZy4gU09NRV9TT1JUX09GX1NDQU4oZm9vIChiYXIgYmF6KSkgd291bGQgbWVhbiB0aGF0IHRo ZQordGhlIGdpdmVuIHNjYW4gdHlwZSB3b3VsZCBiZSB1c2VkIGZvciBmb28gYXMgYSBzaW5nbGUg cmVsYXRpb24gYW5kIGFsc28gdGhlCitjb21iaW5hdGlvbiBvZiBiYXIgYW5kIGJheiBhcyBhIGpv aW4gcHJvZHVjdC4gV2UgaGF2ZSBubyBzdWNoIGNhc2VzIGF0CitwcmVzZW50LgorCitGb3IgaW5k ZXggYW5kIGluZGV4LW9ubHkgc2NhbnMsIGJvdGggdGhlIHJlbGF0aW9uIGJlaW5nIHNjYW5uZWQg YW5kIHRoZQoraW5kZXggb3IgaW5kZXhlcyBiZWluZyB1c2VkIG11c3QgYmUgc3BlY2lmaWVkLiBG b3IgZXhhbXBsZSwgSU5ERVhfU0NBTihmb28KK2Zvb19hX2lkeCBiYXIgYmFyX2JfaWR4KSBpbmRp Y2F0ZXMgdGhhdCBhbiBpbmRleCBzY2FuIChub3QgYW4gaW5kZXgtb25seQorc2Nhbikgc2hvdWxk IGJlIHVzZWQgb24gZm9vX2FfaWR4IHdoZW4gc2Nhbm5pbmcgZm9vLCBhbmQgdGhhdCBhbiBpbmRl eCBzY2FuCitzaG91bGQgYmUgdXNlZCBvbiBiYXJfYl9pZHggd2hlbiBzY2FubmluZyBiYXIuCisK K0JpdG1hcCBoZWFwIHNjYW5zIGFsbG93IGZvciBhIG1vcmUgY29tcGxpY2F0ZWQgaW5kZXggc3Bl Y2lmaWNhdGlvbi4gRm9yCitleGFtcGxlLCBCSVRNQVBfSEVBUF9TQ0FOKGZvbyAmJihmb29fYV9p ZHggfHwoZm9vX2JfaWR4IGZvb19jX2lkeCkpKSBzYXlzCit0aGF0IGZvbyBzaG91bGQgYmUgc2Nh bm5lZCB1c2luZyBhIEJpdG1hcEhlYXBTY2FuIG92ZXIgYSBCaXRtYXBBbmQgYmV0d2VlbgorZm9v X2FfaWR4IGFuZCB0aGUgcmVzdWx0IG9mIGEgQml0bWFwT3IgYmV0d2VlbiBmb29fYl9pZHggYW5k IGZvb19jX2lkeC4KKworWFhYOiBDdXJyZW50bHksIEJJVE1BUF9IRUFQX1NDQU4gZG9lcyBub3Qg ZW5mb3JjZSB0aGUgaW5kZXggc3BlY2lmaWNhdGlvbiwKK2JlY2F1c2UgdGhlIGF2YWlsYWJsZSBo b29rcyBhcmUgaW5zdWZmaWNpZW50IHRvIGRvIHNvLiBJdCdzIHBvc3NpYmxlIHRoYXQKK3RoaXMg c2hvdWxkIGJlIGNoYW5nZWQgdG8gZXhjbHVkZSB0aGUgaW5kZXggc3BlY2lmaWNhdGlvbiBhbHRv Z2V0aGVyIGFuZAorc2ltcGx5IGluc2lzdCB0aGF0IHNvbWUgc29ydCBvZiBiaXRtYXAgaGVhcCBz Y2FuIGlzIHVzZWQ7IGFsdGVybmF0aXZlbHksCit3ZSBuZWVkIGJldHRlciBob29rcy4KKworSm9p biBPcmRlciBBZHZpY2UKKz09PT09PT09PT09PT09PT09CisKK1RoZSBKT0lOX09SREVSIHRhZyBz cGVjaWZpZXMgdGhlIG9yZGVyIGluIHdoaWNoIHNldmVyYWwgdGFibGVzIHRoYXQgYXJlCitwYXJ0 IG9mIHRoZSBzYW1lIGpvaW4gcHJvYmxlbSBzaG91bGQgYmUgam9pbmVkLiBFYWNoIHN1YnF1ZXJ5 IChleGNlcHQgZm9yCit0aG9zZSB0aGF0IGFyZSBpbmxpbmVkKSBpcyBhIHNlcGFyYXRlIGpvaW4g cHJvYmxlbS4gV2l0aGluIGEgc3VicXVlcnksCitwYXJ0aXRpb253aXNlIGpvaW5zIGNhbiBjcmVh dGUgYWRkaXRpb25hbCwgc2VwYXJhdGUgam9pbiBwcm9ibGVtcy4gSGVuY2UsCitxdWVyaWVzIGlu dm9sdmluZyBwYXJ0aXRpb253aXNlIGpvaW5zIG1heSB1c2UgSk9JTl9PUkRFUigpIG1hbnkgdGlt ZXMuCisKK1dlIHRha2UgdGhlIGNhbm9uaWNhbCBqb2luIHN0cnVjdHVyZSB0byBiZSBhbiBvdXRl ci1kZWVwIHRyZWUsIHNvCitKT0lOX09SREVSKHQxIHQyIHQzKSBzYXlzIHRoYXQgdDEgaXMgdGhl IGRyaXZpbmcgdGFibGUgYW5kIHNob3VsZCBiZSBqb2luZWQKK2ZpcnN0IHRvIHQyIGFuZCB0aGVu IHRvIHQzLiBJZiB0aGUgam9pbiBwcm9ibGVtIGludm9sdmVzIGFkZGl0aW9uYWwgdGFibGVzLAor dGhleSBjYW4gYmUgam9pbmVkIGluIGFueSBvcmRlciBhZnRlciB0aGUgam9pbiBiZXR3ZWVuIHQx LCB0MiwgYW5kIHQzIGhhcworYmVlbiBjb25zdHJ1Y3R1cmVkLiBHZW5lcmF0ZWQgam9pbiBhZHZp Y2UgYWx3YXlzIG1lbnRpb25zIGFsbCB0YWJsZXMKK2luIHRoZSBqb2luIHByb2JsZW0sIGJ1dCBt YW51YWxseSB3cml0dGVuIGpvaW4gYWR2aWNlIG5lZWQgbm90IGRvIHNvLgorCitGb3IgdHJlZXMg d2hpY2ggYXJlIG5vdCBvdXRlci1kZWVwLCBwYXJlbnRoZXNlcyBjYW4gYmUgdXNlZC4gRm9yIGV4 YW1wbGUsCitKT0lOX09SREVSKHQxICh0MiB0MykpIHNheXMgdGhhdCB0aGUgdG9wLWxldmVsIGpv aW4gc2hvdWxkIGhhdmUgdDEgb24gdGhlCitvdXRlciBzaWRlIGFuZCBhIGpvaW4gYmV0d2VlbiB0 MiBhbmQgdDMgb24gdGhlIGlubmVyIHNpZGUuIFRoYXQgam9pbiBzaG91bGQKK2JlIGNvbnN0cnVj dGVkIHNvIHRoYXQgdDIgaXMgb24gdGhlIG91dGVyIHNpZGUgYW5kIHQzIGlzIG9uIHRoZSBpbm5l ciBzaWRlLgorCitJbiBzb21lIGNhc2VzLCBpdCdzIG5vdCBwb3NzaWJsZSB0byBmdWxseSBzcGVj aWZ5IHRoZSBqb2luIG9yZGVyIGluIHRoaXMgd2F5LgorRm9yIGV4YW1wbGUsIGlmIHQyIGFuZCB0 MyBhcmUgYmVpbmcgc2Nhbm5lZCBieSBhIHNpbmdsZSBjdXN0b20gc2NhbiBvciBmb3JlaWduCitz Y2FuLCBvciBpZiBhIHBhcnRpdGlvbndpc2Ugam9pbiBpcyBiZWluZyBwZXJmb3JtZWQgYmV0d2Vl biB0aG9zZSB0YWJsZXMsIHRoZW4KK2l0J3MgaW1wb3NzaWJsZSB0byBzYXkgdGhhdCB0MiBpcyB0 aGUgb3V0ZXIgdGFibGUgYW5kIHQzIGlzIHRoZSBpbm5lciB0YWJsZSwKK29yIHRoZSBvdGhlciB3 YXkgYXJvdW5kOyBpdCdzIGp1c3QgdW5kZWZpbmVkLiBJbiBzdWNoIGNhc2VzLCB3ZSBnZW5lcmF0 ZQoram9pbiBhZHZpY2UgdGhhdCB1c2VzIGN1cmx5IGJyYWNlcywgaW50ZW5kaW5nIHRvIGluZGlj YXRlIGEgbGFjayBvZiBvcmRlcmluZzoKK0pPSU5fT1JERVIodDEge3QyIHQzfSkgc2F5cyB0aGF0 IHRoZSB1cHBlcm1vc3Qgam9pbiBzaG91bGQgaGF2ZSB0MSBvbiB0aGUgb3V0ZXIKK3NpZGUgYW5k IHNvbWUga2luZCBvZiBqb2luIGJldHdlZW4gdDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLCBi dXQgd2l0aG91dAorc2F5aW5nIGhvdyB0aGF0IGpvaW4gbXVzdCBiZSBwZXJmb3JtZWQgb3IgYW55 dGhpbmcgYWJvdXQgd2hpY2ggcmVsYXRpb24gc2hvdWxkCithcHBlYXIgb24gd2hpY2ggc2lkZSBv ZiB0aGUgam9pbiwgb3IgZXZlbiB3aGV0aGVyIHRoaXMga2luZCBvZiBqb2luIGhhcyBzaWRlcy4K KworSm9pbiBTdHJhdGVneSBBZHZpY2UKKz09PT09PT09PT09PT09PT09PT09CisKK1RhZ3Mgc3Vj aCBhcyBORVNURURfTE9PUF9QTEFJTiBzcGVjaWZ5IHRoZSBtZXRob2QgdGhhdCBzaG91bGQgYmUg dXNlZCB0bworcGVyZm9ybSBhIGNlcnRhaW4gam9pbi4gTW9yZSBzcGVjaWZpY2FsbHksIE5FU1RF RF9MT09QX1BMQUlOKHggKHkgeikpIHNheXMKK3RoYXQgdGhlIHBsYW4gc2hvdWxkIHB1dCB0aGUg cmVsYXRpb24gd2hvc2UgaWRlbnRpZmllciBpcyAieCIgb24gdGhlIGlubmVyCitzaWRlIG9mIGEg cGxhaW4gbmVzdGVkIGxvb3AgKG9uZSB3aXRob3V0IG1hdGVyaWFsaXphdGlvbiBvciBtZW1vaXph dGlvbikKK2FuZCB0aGF0IGl0IHNob3VsZCBhbHNvIHB1dCBhIGpvaW4gYmV0d2VlbiB0aGUgcmVs YXRpb24gd2hvc2UgaWRlbnRpZmllciBpcworInkiIGFuZCB0aGUgcmVsYXRpb24gd2hvc2UgaWRl bnRpZmllciBpcyAieiIgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBuZXN0ZWQKK2xvb3AuIEhlbmNl LCBmb3IgYW4gTi10YWJsZSBqb2luIHByb2JsZW0sIHRoZXJlIHdpbGwgYmUgTi0xIHBpZWNlcyBv ZiBqb2luCitzdHJhdGVneSBhZHZpY2U7IG5vIGpvaW4gc3RyYXRlZ3kgYWR2aWNlIGlzIHJlcXVp cmVkIGZvciB0aGUgb3V0ZXJtb3N0Cit0YWJsZSBpbiB0aGUgam9pbiBwcm9ibGVtLgorCitDb25z aWRlcmluZyB0aGF0IHdlIGhhdmUgYm90aCBqb2luIG9yZGVyIGFkdmljZSBhbmQgam9pbiBzdHJh dGVneSBhZHZpY2UsCitpdCBtaWdodCBzZWVtIG5hdHVyYWwgdG8gc2F5IHRoYXQgTkVTVEVEX0xP T1BfUExBSU4oeCkgc2hvdWxkIGJlIHJlZGVmaW5lZAordG8gbWVhbiB0aGF0IHggc2hvdWxkIGFw cGVhciBieSBpdHNlbGYgb24gb25lIHNpZGUgb3IgdGhlIG90aGVyIG9mIGEgbmVzdGVkCitsb29w LCByYXRoZXIgdGhhbiBzcGVjaWZpY2FsbHkgb24gdGhlIGlubmVyIHNpZGUsIGJ1dCB0aGlzIGRl ZmluaXRpb24gYXBwZWFycwordXNlbGVzcyBpbiBwcmFjdGljZS4gSXQgZ2l2ZXMgdGhlIHBsYW5u ZXIgdG9vIG11Y2ggZnJlZWRvbSB0byBkbyB0aGluZ3MgdGhhdAorYmVhciBsaXR0bGUgcmVzZW1i bGFuY2UgdG8gd2hhdCB0aGUgdXNlciBwcm9iYWJseSBoYWQgaW4gbWluZC4gVGhpcyBtYWtlcwor b25seSBhIGxpbWl0ZWQgYW1vdW50IG9mIHByYWN0aWNhbCBkaWZmZXJlbmNlIGluIHRoZSBjYXNl IG9mIGEgbWVyZ2Ugam9pbiBvcgordW5wYXJhbWV0ZXJpemVkIG5lc3RlZCBsb29wLCBidXQgZm9y IGEgcGFyYW1ldGVyaXplZCBuZXN0ZWQgbG9vcCBvciBhIGhhc2gKK2pvaW4sIHRoZSB0d28gc2lk ZXMgYXJlIHRyZWF0ZWQgdmVyeSBkaWZmZXJlbnRseSBhbmQgc2F5aW5nIHRoYXQgYSBjZXJ0YWlu CityZWxhdGlvbiBzaG91bGQgYmUgaW52b2x2ZWQgaW4gb25lIG9mIHRob3NlIG9wZXJhdGlvbnMg d2l0aG91dCBzYXlpbmcgd2hpY2gKK3JvbGUgaXQgc2hvdWxkIHRha2UgaXNuJ3Qgc2F5aW5nIG11 Y2guCisKK1RoaXMgY2hvaWNlIG9mIGRlZmluaXRpb24gaW1wbGllcyB0aGF0IGpvaW4gc3RyYXRl Z3kgYWR2aWNlIGFsc28gaW1wb3NlcyBzb21lCitqb2luIG9yZGVyIGNvbnN0cmFpbnRzLiBGb3Ig ZXhhbXBsZSwgZ2l2ZW4gYSBqb2luIGJldHdlZW4gZm9vIGFuZCBiYXIsCitIQVNIX0pPSU4oYmFy KSBpbXBsaWVzIHRoYXQgZm9vIGlzIHRoZSBkcml2aW5nIHRhYmxlLiBPdGhlcndpc2UsIGl0IHdv dWxkCitiZSBpbXBvc3NpYmxlIHRvIHB1dCBiYXIgYmVuZWF0aCB0aGUgaW5uZXIgc2lkZSBvZiBh IEhhc2ggSm9pbi4KKworTm90ZSB0aGF0LCBnaXZlbiB0aGlzIGRlZmluaXRpb24sIGl0J3MgcmVh c29uYWJsZSB0byBjb25zaWRlciBkZWxldGluZyB0aGUKK2pvaW4gb3JkZXIgYWR2aWNlIGJ1dCBh cHBseWluZyB0aGUgam9pbiBzdHJhdGVneSBhZHZpY2UuIEZvciBleGFtcGxlLAorY29uc2lkZXIg YSBzdGFyIHNjaGVtYSB3aXRoIHRhYmxlcyBmYWN0LCBkaW0xLCBkaW0yLCBkaW0zLCBkaW00LCBh bmQgZGltNS4KK1RoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhZHZpY2UgbWlnaHQgc3BlY2lm eSBKT0lOX09SREVSKGZhY3QgZGltMSBkaW0zCitkaW00IGRpbTIgZGltNSkgSEFTSF9KT0lOKGRp bTIgZGltNCkgTkVTVEVEX0xPT1BfUExBSU4oZGltMSBkaW0zIGRpbTUpLgorRGVsZXRpbmcgdGhl IEpPSU5fT1JERVIgYWR2aWNlIGFsbG93cyB0aGUgcGxhbm5lciB0byByZW9yZGVyIHRoZSBqb2lu cworaG93ZXZlciBpdCBsaWtlcyB3aGlsZSBzdGlsbCBmb3JjaW5nIHRoZSBzYW1lIGNob2ljZSBv ZiBqb2luIG1ldGhvZC4gVGhpcworc2VlbXMgcG90ZW50aWFsbHkgdXNlZnVsLCBhbmQgaXMgb25l IHJlYXNvbiB3aHkgYSB1bmlmaWVkIHN5bnRheCB0aGF0IGNvbnRyb2xzCitib3RoIGpvaW4gb3Jk ZXIgYW5kIGpvaW4gbWV0aG9kIGluIGEgc2luZ2xlIGxvY3V0aW9uIHdhcyBub3QgY2hvc2VuLgor CitBZHZpY2UgQ29tcGxldGVuZXNzCis9PT09PT09PT09PT09PT09PT09CisKK0FuIGVzc2VudGlh bCBndWlkaW5nIHByaW5jaXBsZSBpcyB0aGF0IG5vIGluZmVyZW5jZSBtYXkgbWFkZSBvbiB0aGUg YmFzaXMKK29mIHRoZSBhYnNlbmNlIG9mIGFkdmljZS4gVGhlIHVzZXIgaXMgZW50aXRsZWQgdG8g cmVtb3ZlIGFueSBwb3J0aW9uIG9mIHRoZQorZ2VuZXJhdGVkIGFkdmljZSB3aGljaCB0aGV5IGRl ZW0gdW5zdWl0YWJsZSBvciBjb3VudGVycHJvZHVjdGl2ZSBhbmQgdGhlCityZXN1bHQgc2hvdWxk IG9ubHkgYmUgdG8gaW5jcmVhc2UgdGhlIGZsZXhpYmlsaXR5IGFmZm9yZGVkIHRvIHRoZSBwbGFu bmVyLgorVGhpcyBtZWFucyB0aGF0IGlmIGFkdmljZSBjYW4gc2F5IHRoYXQgYSBjZXJ0YWluIG9w dGltaXphdGlvbiBvciB0ZWNobmlxdWUKK3Nob3VsZCBiZSB1c2VkLCBpdCBzaG91bGQgYWxzbyBi ZSBhYmxlIHRvIHNheSB0aGF0IHRoZSBvcHRpbWl6YXRpb24gb3IKK3RlY2huaXF1ZSBzaG91bGQg bm90IGJlIHVzZWQuIFdlIHNob3VsZCBuZXZlciBhc3N1bWUgdGhhdCB0aGUgYWJzZW5jZSBvZiBh bgoraW5zdHJ1Y3Rpb24gdG8gZG8gYSBjZXJ0YWluIHRoaW5nIG1lYW5zIHRoYXQgaXQgc2hvdWxk IG5vdCBiZSBkb25lOyBhbGwKK2luc3RydWN0aW9ucyBtdXN0IGJlIGV4cGxpY2l0LgorCitTZW1p am9pbiBVbmlxdWVuZXNzCis9PT09PT09PT09PT09PT09PT09CisKK0ZhY2VkIHdpdGggYSBzZW1p am9pbiwgdGhlIHBsYW5uZXIgY29uc2lkZXJzIGJvdGggYSBkaXJlY3QgaW1wbGVtZW50YXRpb24K K2FuZCBhIHBsYW4gd2hlcmUgdGhlIG9uZSBzaWRlIGlzIG1hZGUgdW5pcXVlIGFuZCB0aGVuIGFu IGlubmVyIGpvaW4gaXMKK3BlcmZvcm1lZC4gV2UgZW1pdCBTRU1JSk9JTl9VTklRVUUoKSBhZHZp Y2Ugd2hlbiB0aGlzIHRyYW5zZm9ybWF0aW9uIG9jY3VycworYW5kIFNFTUlKT0lOX05PTl9VTklR VUUoKSBhZHZpY2Ugd2hlbiBpdCBkb2Vzbid0LiBUaGVzZSBpdGVtcyB3b3JrIGxpa2UKK2pvaW4g c3RyYXRlZ3kgYWR2aWNlOiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgcmVsZXZhbnQgam9pbiBpcyBu YW1lZCwgYW5kIHRoZQorY2hvc2VuIGpvaW4gb3JkZXIgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGgg dGhlIGFkdmljZSBoYXZpbmcgc29tZSBlZmZlY3QuCisKK1BhcnRpdGlvbndpc2UKKz09PT09PT09 PT09PT0KKworUEFSVElUSU9OV0lTRSgpIGFkdmlzZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGJv dGggdGhvc2UgcGFydGl0aW9ud2lzZSBqb2lucword2hpY2ggc2hvdWxkIGJlIHBlcmZvcm1lZCBh bmQgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBwZXJmb3JtZWQ7IHRoZSBpZGVhCitpcyB0aGF0 IGVhY2ggYXJndW1lbnQgdG8gUEFSVElUSU9OV0lTRSBzcGVjaWZpZXMgYSBzZXQgb2YgcmVsYXRp b25zIHRoYXQKK3Nob3VsZCBiZSBzY2FubmVkIHBhcnRpdGlvbndpc2UgYWZ0ZXIgYmVpbmcgam9p bmVkIHRvIGVhY2ggb3RoZXIgYW5kIG5vdGhpbmcKK2Vsc2UuIEhlbmNlLCBmb3IgZXhhbXBsZSwg UEFSVElUSU9OV0lTRSgodDEgdDIpIHQzKSBzcGVjaWZpZXMgdGhhdCB0aGUKK3F1ZXJ5IHNob3Vs ZCBjb250YWluIGEgcGFydGl0aW9ud2lzZSBqb2luIGJldHdlZW4gdDEgYW5kIHQyIGFuZCB0aGF0 IHQzCitzaG91bGQgbm90IGJlIHBhcnQgb2YgYW55IHBhcnRpdGlvbndpc2Ugam9pbi4gSWYgdGhl cmUgYXJlIG5vIG90aGVyIHJlbHMKK2luIHRoZSBxdWVyeSwgc3BlY2lmeWluZyBqdXN0IFBBUlRJ VElPTldJU0UoKHQxIHQyKSkgd291bGQgaGF2ZSB0aGUgc2FtZQorZWZmZWN0LCBzaW5jZSB0aGVy ZSB3b3VsZCBiZSBubyBvdGhlciByZWxzIHRvIHdoaWNoIHQzIGNvdWxkIGJlIGpvaW5lZCBpbgor YSBwYXJ0aXRpb253aXNlIGZhc2hpb24uCisKK1BhcmFsbGVsIFF1ZXJ5IChHYXRoZXIsIGV0Yy4p Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFYWNoIGFyZ3VtZW50IHRvIEdBVEhF UigpIG9yIEdBVEhFUl9NRVJHRSgpIGlzIGEgc2luZ2xlIHJlbGF0aW9uIG9yIGFuCitleGFjdCBz ZXQgb2YgcmVsYXRpb25zIG9uIHRvcCBvZiB3aGljaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ug bm9kZSwKK3Jlc3BlY3RpdmVseSwgc2hvdWxkIGJlIHBsYWNlZC4gRWFjaCBhcmd1bWVudCB0byBO T19HQVRIRVIoKSBpcyBhIHNpbmdsZQorcmVsYXRpb24gdGhhdCBzaG91bGQgbm90IGFwcGVhciBi ZW5lYXRoIGFueSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGU7Cit0aGF0IGlzLCBwYXJhbGxl bGlzbSBzaG91bGQgbm90IGJlIHVzZWQuCisKK0ltcGxpY2l0IEpvaW4gT3JkZXIgQ29uc3RyYWlu dHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBKT0lOX09SREVSKCkg YWR2aWNlIGlzIG5vdCBwcm92aWRlZCBmb3IgYSBwYXJ0aWN1bGFyIGpvaW4gcHJvYmxlbSwKK290 aGVyIHBpZWNlcyBvZiBhZHZpY2UgbWF5IHN0aWxsIGluY2lkZW50YWxseSBjb25zdHJhaW50IHRo ZSBqb2luIG9yZGVyLgorRm9yIGV4YW1wbGUsIGEgdXNlciB3aG8gc3BlY2lmaWVzIEhBU0hfSk9J TigoZm9vIGJhcikpIGlzIGV4cGxpY2l0bHkgc2F5aW5nCit0aGF0IHRoZXJlIHNob3VsZCBiZSBh IGhhc2ggam9pbiB3aXRoIGV4YWN0bHkgZm9vIGFuZCBiYXIgb24gdGhlIG91dGVyCitzaWRlIG9m IGl0LCBidXQgdGhhdCBhbHNvIGltcGxpZXMgdGhhdCBmb28gYW5kIGJhciBtdXN0IGJlIGpvaW5l ZCB0bworZWFjaCBvdGhlciBiZWZvcmUgZWl0aGVyIG9mIHRoZW0gaXMgam9pbmVkIHRvIGFueXRo aW5nIGVsc2UuIE90aGVyd2lzZSwKK3RoZSBqb2luIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG8g Y29uc3RyYWludCB3b24ndCBhY3R1YWxseSBvY2N1ciBpbiB0aGUKK3F1ZXJ5LCB3aGljaCBlbmRz IHVwIGxvb2tpbmcgbGlrZSB0aGUgc3lzdGVtIGhhcyBqdXN0IGRlY2lkZWQgdG8gaWdub3JlCit0 aGUgYWR2aWNlIGFsdG9nZXRoZXIuCisKK0Z1dHVyZSBXb3JrCis9PT09PT09PT09PQorCitXZSBk b24ndCBoYW5kbGUgY2hvaWNlIG9mIGFnZ3JlZ2F0aW9uOiBpdCB3b3VsZCBiZSBuaWNlIHRvIGJl IGFibGUgdG8gZm9yY2UKK3NvcnRlZCBvciBncm91cGVkIGFnZ3JlZ2F0aW9uLiBJJ20gZ3Vlc3Np bmcgdGhpcyBjYW4gYmUgbGVmdCB0byBmdXR1cmUgd29yay4KKworTW9yZSBzZXJpb3VzbHksIHdl IGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgZWFnZXIgYWdncmVnYXRpb24sIHdoaWNoIGNvdWxk CitoYXZlIGEgbGFyZ2UgaW1wYWN0IG9uIHRoZSBzaGFwZSBvZiB0aGUgcGxhbiB0cmVlLiBYWFg6 IFRoaXMgbmVlZHMgc29tZSBzdHVkeQordG8gZGV0ZXJtaW5lIGhvdyBsYXJnZSBhIHByb2JsZW0g aXQgaXMsIGFuZCBtaWdodCBuZWVkIHRvIGJlIGZpeGVkIHNvb25lcgorcmF0aGVyIHRoYW4gbGF0 ZXIuCisKK1dlIGRvbid0IG9mZmVyIGFueSBjb250cm9sIG92ZXIgZXN0aW1hdGVzLCBvbmx5IG91 dGNvbWVzLiBJdCBzZWVtcyBsaWtlIGEKK2dvb2QgaWRlYSB0byBpbmNvcnBvcmF0ZSB0aGF0IGFi aWxpdHkgYXQgc29tZSBmdXR1cmUgcG9pbnQsIGFzIHBnX2hpbnRfcGxhbgorZG9lcy4gSG93ZXZl ciwgc2luY2UgcHJpbWFyeSBnb2FsIG9mIHRoZSBpbml0aWFsIGRldmVsb3BtZW50IHdvcmsgaXMg dG8gYmUKK2FibGUgdG8gaW5kdWNlIHRoZSBwbGFubmVyIHRvIHJlY3JlYXRlIGEgZGVzaXJlZCBw bGFuIHRoYXQgd29ya2VkIHdlbGwgaW4KK3RoZSBwYXN0LCB0aGlzIGhhcyBub3QgYmVlbiBpbmNs dWRlZCBpbiB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCBlZmZvcnQuCisKK1hYWCBOZWVkIHRvIGlu dmVzdGlnYXRlIHdoZXRoZXIgYW5kIGhvdyB3ZWxsIHN1cHBseWluZyBhZHZpY2Ugd29ya3Mgd2l0 aCBHRVFPCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhl ci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJkNGY0YzI0ZTI3Ci0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0CkBAIC0w LDAgKzEsMzQ0IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dv cmtlcnNfcGVyX2dhdGhlciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQg cGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6 ZSA9IDA7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CitDUkVBVEUgVEFCTEUgZ3Rf ZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9t KCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBn dF9kaW07CitDUkVBVEUgVEFCTEUgZ3RfZmFjdCAoCisJaWQgaW50IG5vdCBudWxsLAorCWRpbV9p ZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgZ3RfZGltIChpZCkKKykgV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZmFjdAorCVNFTEVDVCBnLCAo ZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUg Z3RfZmFjdDsKKy0tIEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBh cmFsbGVsIGhhc2ggam9pbi4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4g IFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVs IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQor ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRI RVJfTUVSR0UoKGYgZCkpCisoMTQgcm93cykKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBN ZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdv cmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9p ZAorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKChmIGQpKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4o ZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNiByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBK T0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAg IFNvcnQgS2V5OiBmLmRpbV9pZAorICAgLT4gIEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFu bmVkOiAxCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBI YXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwg U2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihk KQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKChmIGQpKQorKDE2IHJvd3MpCisKK0NPTU1J VDsKKy0tIEZvcmNlIGEgc2VwYXJhdGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24g Zm9yIGVhY2ggcmVsYXRpb24uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnZ2F0aGVyX21lcmdlKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkK KyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAg ICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEdhdGhlciBN ZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBT ZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01F UkdFKGYpIC8qIG1hdGNoZWQgKi8KKyAgIEdBVEhFUl9NRVJHRShkKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lO X1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoZiBkKQorKDIwIHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3Qg ZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAg TWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0 IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtl cnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0 X2ZhY3QgZgorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAt PiAgR2F0aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIEdBVEhFUihkKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJH RV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoZiBkKQorKDIwIHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChkIGQvZC5k KSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0 X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOwor ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9p bgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVyZ2UK KyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAg ICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNl cSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkg b24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUigoZCBkL2QuZCkp IC8qIHBhcnRpYWxseSBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAg SU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIEdBVEhFUl9NRVJHRShmKQorICAg Tk9fR0FUSEVSKGQpCisoMTcgcm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBHYXRoZXIgb3Ig R2F0aGVyIE1lcmdlIG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxsZWxpc20gb24gb3RoZXIu CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdl KGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9S REVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4g IEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FU SEVSX01FUkdFKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9K T0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9k aW1fcGtleSkKKyAgIEdBVEhFUl9NRVJHRShmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkgbm9f Z2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkg ZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJn ZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2Zh Y3QgZgorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAg ICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihm KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihm IGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJf TUVSR0UoZCkKKyAgIE5PX0dBVEhFUihmKQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAo ZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24g Z3RfZGltIGQKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAg ICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYp CisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihk IHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIEdBVEhFUihmKQorICAgTk9fR0FUSEVSKGQpCisoMTgg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9f Z2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkg ZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJn ZSBKb2luCisgICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2Zh Y3QgZgorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAg R2F0aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAg IC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJH RV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoZCkKKyAgIE5PX0dB VEhFUihmKQorKDE5IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBHYXRo ZXIgTWVyZ2UgdXNlIGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdub19nYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQK KyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0 X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNo ZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFf U0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIE5PX0dBVEhF UihmIGQpCisoMTUgcm93cykKKworQ09NTUlUOworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdl IHdpdGhvdXQgdGhlIE9SREVSIEJZIGNsYXVzZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBk KSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0 X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIKKyAgIERpc2FibGVkOiB0cnVl CisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAg ICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBT ZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4o ZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNSByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0 X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBh cmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQor ICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4g IFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBn dF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBI QVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNCByb3dz KQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVk L2pvaW5fb3JkZXIub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29y ZGVyLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGFkODc2YTFh NTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pv aW5fb3JkZXIub3V0CkBAIC0wLDAgKzEsNDEzIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitT RVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgam9f ZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0xIChpZCwg ZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMp ICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBq b19kaW0xOworQ1JFQVRFIFRBQkxFIGpvX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRp bTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gam9fZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZp bGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTI7CitDUkVBVEUgVEFCTEUgam9fZmFjdCAo CisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVu Y2VzIGpvX2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBq b19kaW0yIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gam9fZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CistLSBXZSBl eHBlY3QgdG8gam9pbiB0byBkMiBmaXJzdCBhbmQgdGhlbiBkMSwgc2luY2UgdGhlIGNvbmRpdGlv biBvbiBkMgorLS0gaXMgbW9yZSBzZWxlY3RpdmUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBP TiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9 IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlk KQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIu aWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNI X0pPSU4oZDIgZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIp CisoMTYgcm93cykKKworLS0gRm9yY2UgYSBmZXcgZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21l IG9mIHRoZXNlIGFyZSB2ZXJ5IGluZWZmaWNpZW50LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNp ZGVycyB0aGVtIGFsbCB2aWFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnam9pbl9vcmRlcihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBP TiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9 IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlk KQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEu aWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikKKyAg IEhBU0hfSk9JTihkMSBkMikKKyAgIFNFUV9TQ0FOKGYgZDEgZDIpCisgICBOT19HQVRIRVIoZiBk MSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pv aW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lk ID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9fZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4o ZDIgZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTgg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQx IGYgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJ TEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0g MSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4K KyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgSGFzaCBDb25kOiAoZDEuaWQgPSBmLmRpbTFfaWQpCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgor ICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZDEgZiBkMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZDEgZiBkMikKKyAgIEhBU0hfSk9JTihmIGQyKQorICAgU0VRX1NDQU4o ZDEgZiBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKChmLmRpbTJfaWQgPSBkMi5p ZCkgQU5EIChmLmRpbTFfaWQgPSBkMS5pZCkpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBL ZXk6IGYuZGltMl9pZCwgZi5kaW0xX2lkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFj dCBmCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQyLmlkLCBkMS5pZAorICAgICAg ICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGlt MSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAg ICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0g MSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIChkMSBk MikpCisgICBNRVJHRV9KT0lOX1BMQUlOKChkMSBkMikpCisgICBORVNURURfTE9PUF9NQVRFUklB TElaRShkMikKKyAgIFNFUV9TQ0FOKGYgZDEgZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygy MSByb3dzKQorCitDT01NSVQ7CistLSBGb3JjZSBhIGpvaW4gb3JkZXIgYnkgbWVudGlvbmluZyBq dXN0IGEgcHJlZml4IG9mIHRoZSBqb2luIGxpc3QuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChk Mi5pZCA9IGYuZGltMl9pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAg ICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGQyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiAoZiBkMSkpCisgICBIQVNIX0pPSU4oZDEgKGYgZDEp KQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMiBkMSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFj dCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2 YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoKGQyLmlk ID0gZi5kaW0yX2lkKSBBTkQgKGQxLmlkID0gZi5kaW0xX2lkKSkKKyAgIC0+ICBTb3J0CisgICAg ICAgICBTb3J0IEtleTogZDIuaWQsIGQxLmlkCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbTJfaWQsIGYuZGltMV9pZAorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBk MSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZDIgZDEgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFM SVpFKGQxKQorICAgU0VRX1NDQU4oZDIgZDEgZikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDIx IHJvd3MpCisKK0NPTU1JVDsKKy0tIGpvX2ZhY3QgaXMgbm90IHBhcnRpdGlvbmVkLCBidXQgbGV0 J3MgdHJ5IHByZXRlbmRpbmcgdGhhdCBpdCBpcyBhbmQKKy0tIHZlcmlmeWluZyB0aGF0IHRoZSBh ZHZpY2UgZG9lcyBub3QgYXBwbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBk MSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9p ZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICBEaXNhYmxlZDogdHJ1ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9fZGltMV9wa2V5IG9uIGpvX2RpbTEgZDEKKyAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltMV9pZCkKKyAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9fZGltMl9wa2V5 IG9uIGpvX2RpbTIgZDIKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltMl9pZCkKKyAg ICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihmL2QxIGQxIGQyKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikKKyAgIE5FU1RFRF9MT09QX1BMQUlO KGQxIGQyKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZDEgcHVibGljLmpvX2RpbTFf cGtleSBkMiBwdWJsaWMuam9fZGltMl9wa2V5KQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTkg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYv ZDEgKGQxIGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNh YmxlZDogdHJ1ZQorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIEFORCAoZDIu aWQgPSBmLmRpbTJfaWQpKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAg ICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBT ZXEgU2NhbiBvbiBqb19mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZi9kMSAoZDEgZDIpKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDEgZDIgZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYp CisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMikKKyAgIFNFUV9TQ0FOKGQxIGQyIGYpCisg ICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitDT01NSVQ7CistLSBUaGUgdW51c3Vh bCBmb3JtdWxhdGlvbiBvZiB0aGlzIHF1ZXJ5IGlzIGludGVuZGVkIHRvIHByZXZlbnQgdGhlIHF1 ZXJ5CistLSBwbGFubmVyIGZyb20gcmVkdWNpbmcgdGhlIEZVTEwgSk9JTiB0byBzb21lIG90aGVy IGpvaW4gdHlwZSwgc28gdGhhdCB3ZQorLS0gY2FuIHRlc3Qgd2hhdCBoYXBwZW5zIHdpdGggYSBq b2luIHR5cGUgdGhhdCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2Zh Y3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQor CU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYu ZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdl IENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9fR0FUSEVSKGQxIGYgZDIp CisoMTggcm93cykKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGZvcmNlIHRoZSBwbGFu bmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQorLS0gdGhhdCBpcyBub3QgYSB2YWxp ZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIK Ky0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZpbmcgdGFibGUuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQxIGQyKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQx CisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9p ZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElT IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBK b2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkK KyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIERpc2FibGVkOiB0cnVlCisgICAgICAg ICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAgICAg ICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEg ZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogcGFy dGlhbGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNURURfTE9PUF9QTEFJTihk MSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMSByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBk MSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9f ZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBm LmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGlt MV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjog KChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJn ZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGYuZGltMl9pZCArIDApKSA9ICgo ZDIuaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6 ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFj dCBmCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQg KyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAtPiAg TWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBNRVJHRV9K T0lOX1BMQUlOKGQyKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NB TihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGQxIGYgZDIpCisoMjAgcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGYgZDEpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5F UiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9 IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRp bTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisg ICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQor ICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgLT4g IFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihkMiBmIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQor ICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAg Tk9fR0FUSEVSKGQxIGYgZDIpCisoMjAgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcxZWUyNmEzMzdhCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dApAQCAtMCww ICsxLDI5NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIGpvaW5fZGltIChpZCBzZXJpYWwgcHJp bWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIGpvaW5fZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZGltOworQ1JFQVRF IFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbV9pZCBpbnRlZ2Vy IG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QKKwlTRUxFQ1QgZywgKGclMykr MSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBqb2luX2Zh Y3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5fZmFj dDsKKy0tIFdlIGV4cGVjdCBhIGhhc2ggam9pbiBieSBkZWZhdWx0LgorRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5f ZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9J TihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMCByb3dzKQorCist LSBUcnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2RpbSBhcyB0 aGUgaW5uZXIgdGFibGUuCistLSBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsgZXhjZXB0IGZvciBN RVJHRV9KT0lOX01BVEVSSUFMSVpFOyB0aGF0IHdpbGwKKy0tIGZhaWwsIGJlY2F1c2UgdGhlIHBs YW5uZXIga25vd3MgdGhhdCBqb2luX2RpbSAoaWQpIGlzIHVuaXF1ZSwgYW5kIHdpbGwKKy0tIHJl ZnVzZSB0byBhZGQgbWFyay9yZXN0b3JlIG92ZXJoZWFkLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0 IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQor ICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUoZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTWVyZ2UgSm9pbgorICAgRGlzYWJsZWQ6IHRydWUKKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9p ZCA9IGQuaWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpv aW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5f ZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUo ZCkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVi bGljLmpvaW5fZmFjdF9kaW1faWQgZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhF UihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdN RVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9u IGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpv aW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBk KQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2Zh Y3RfZGltX2lkIGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEx IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0 IGYKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGlt IGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQp IC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYg ZCkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBO T19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpv aW5fZmFjdCBmCisgICAtPiAgTWVtb2l6ZQorICAgICAgICAgQ2FjaGUgS2V5OiBmLmRpbV9pZAor ICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNp bmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09Q X01FTU9JWkUoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfTUVNT0laRShkKQorICAgU0VRX1NDQU4oZikK KyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQp CisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURf TE9PUF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK KyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2Nh biB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1Bf UExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJ TkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEy IHJvd3MpCisKK0NPTU1JVDsKKy0tIE5vdyB0cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGlu IHR1cm4gd2l0aCBqb2luX2ZhY3QgYXMgdGhlIGlubmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNl IHNob3VsZCB3b3JrLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK KyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGQuaWQgPSBm LmRpbV9pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgSGFzaAorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBIQVNIX0pPSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZCBmKQorICAgSEFTSF9KT0lOKGYpCisgICBTRVFfU0NBTihkIGYpCisg ICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBN ZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9p bl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJQUxJWkUoZikgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVS R0VfSk9JTl9NQVRFUklBTElaRShmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9w a2V5IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJ TihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g am9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQor ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pP SU5fUExBSU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSBmIHB1Ymxp Yy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMSByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2lu X2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoZi5k aW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShmKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURf TE9PUF9NQVRFUklBTElaRShmKQorICAgU0VRX1NDQU4oZCBmKQorICAgTk9fR0FUSEVSKGYgZCkK KygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9M T09QX01FTU9JWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGlt IGQKKyAgIC0+ICBNZW1vaXplCisgICAgICAgICBDYWNoZSBLZXk6IGQuaWQKKyAgICAgICAgIENh Y2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFj dF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChkaW1f aWQgPSBkLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUVNT0la RShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihkIGYpCisgICBORVNURURfTE9PUF9NRU1PSVpFKGYpCisgICBTRVFfU0NBTihkKQorICAgSU5E RVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygx NSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09Q X1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAgICAgICBJbmRl eCBDb25kOiAoZGltX2lkID0gZC5pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RF RF9MT09QX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpCisgICBTRVFfU0NBTihk KQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVS KGYgZCkKKygxMiByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4ndCBmb3JjZSBhIGZvcmVpZ24g am9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxlcywgYmVjYXVzZSB0aGV5CistLSBhcmVuJ3QgZm9yZWln biB0YWJsZXMuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9S RUlHTl9KT0lOKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2Zh Y3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBk CisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIEZPUkVJR05fSk9JTigoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9Q TEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1f cGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTMgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0 IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0IGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NmY1NTRiZjIzOQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9y Lm91dApAQCAtMCwwICsxLDY1IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlOwor U0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworLS0gVHJ5IGNsZWFyaW5nIGFkdmljZSBi ZWZvcmUgd2UndmUgY29sbGVjdGVkIGFueS4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBTZXQgYSBzbWFsbCBh ZHZpY2UgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2VlZCBpdC4KK1NFVCBwZ19w bGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKy0tIFNldCB1cCBhIGR1bW15 IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0 ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBwYXJhbGxlbF93b3JrZXJz ID0gMCk7CistLSBUZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1 bW15X3RhYmxlIGI7CisgYSB8IGIgfCBhIHwgYiAKKy0tLSstLS0rLS0tKy0tLQorKDAgcm93cykK KworU0VMRUNUICogRlJPTSBkdW1teV90YWJsZTsKKyBhIHwgYiAKKy0tLSstLS0KKygwIHJvd3Mp CisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVy eS4KK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpIE9S REVSIEJZIGlkIERFU0MgTElNSVQgMTsKKyAgICAgICAgIGFkdmljZSAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU0VRX1NDQU4oZHVtbXlfdGFibGUpICsKKyBOT19HQVRIRVIo ZHVtbXlfdGFibGUpCisoMSByb3cpCisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFnYWlu LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVhcl9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgdGhl IGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2Nh bF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKKy0tIFB1c2ggYSBidW5jaCBvZiBxdWVyaWVzIHRo cm91Z2ggdGhlIGNvbGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZPUiB4IElOIDEuLjIwMDAgTE9P UAorCQlFWEVDVVRFICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlJzsKKwlFTkQgTE9PUDsKK0VO RAorJCQ7CistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENPVU5U KCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBjb3VudCAKKy0tLS0t LS0KKyAgMjAwMAorKDEgcm93KQorCistLSBBbmQgY2xlYXIgb25lIG1vcmUgdGltZSwgdG8gdmVy aWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0gZXZlbiB3aXRoIGEgbGFy Z2VyIG51bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9h ZHZpY2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5lYTcwNGUzMWVhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQKQEAgLTAsMCArMSwz NjQgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19w ZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gdHJ1ZTsKK0NS RUFURSBUQUJMRSBwdDEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBp bnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQxYSBQQVJUSVRJ T04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWIgUEFSVElUSU9OIE9GIHB0MSBG T1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFjIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVF UyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBwdDEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29tZSBm aWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDE7CitDUkVBVEUgVEFCTEUgcHQyIChpZCBpbnRl Z2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVBBUlRJVElPTiBCWSBSQU5H RSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MmEgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZS T00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NS RUFURSBUQUJMRSBwdDJiIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0 byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFC TEUgcHQyYyBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQyIChp ZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgb3RoZXIgdGV4dCAnIHx8IGcsIChnICUg NSkgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDAsMikgZzsKK1ZBQ1VVTSBBTkFM WVpFIHB0MjsKK0NSRUFURSBUQUJMRSBwdDMgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTMg dGV4dCwgdmFsMyBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUg cHQzYSBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0M2IgUEFSVElU SU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNjIFBBUlRJVElPTiBPRiBw dDMgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDMgKGlkLCBkaW0zLCB2YWwzKQorCVNFTEVD VCBnLCAnYSB0aGlyZCByYW5kb20gdGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDMwMDAsMykgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MzsKK0NSRUFURSBU QUJMRSBwdG1pc21hdGNoIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW1tIHRleHQsIHZhbG0g aW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hh IFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTUw MSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHRt aXNtYXRjaGIgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDE1 MDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIHB0bWlzbWF0Y2ggKGlkLCBkaW1tLCB2YWxtKQorCVNFTEVDVCBnLCAneWV0IGFub3Ro ZXIgdGV4dCAnIHx8IGcsIChnICUgMikgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMw MDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdG1pc21hdGNoOworRVhQTEFJTiAoUExBTl9BRFZJQ0Us IENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBw dDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBB TkQgdmFsMyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8xLmlkID0gcHQzXzEu aWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgcHQxYV9wa2V5IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChpZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHB0Ml8yLmlkID0gcHQzXzIuaWQpCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQyYiBwdDJfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0M2IgcHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9u IHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8yLmlkKQor ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8zLmlk ID0gcHQzXzMuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJfMwor ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAg ICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDIvcHVi bGljLnB0MmEgcHQzL3B1YmxpYy5wdDNhIHB0MS9wdWJsaWMucHQxYSkKKyAgIEpPSU5fT1JERVIo cHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYiBwdDEvcHVibGljLnB0MWIpCisgICBKT0lO X09SREVSKHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MgcHQxL3B1YmxpYy5wdDFjKQor ICAgTkVTVEVEX0xPT1BfUExBSU4ocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEv cHVibGljLnB0MWMpCisgICBIQVNIX0pPSU4ocHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQz YiBwdDMvcHVibGljLnB0M2MpCisgICBTRVFfU0NBTihwdDIvcHVibGljLnB0MmEgcHQzL3B1Ymxp Yy5wdDNhIHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IKKyAgICBwdDIvcHVibGljLnB0 MmMgcHQzL3B1YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVibGlj LnB0MWFfcGtleSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9wdWJs aWMucHQxYyBwdWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MiBwdDMp KQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1Ymxp Yy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0 MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDcg cm93cykKKworLS0gU3VwcHJlc3MgcGFydGl0aW9ud2lzZSBqb2luLCBvciBkbyBpdCBqdXN0IHBh cnRpYWxseS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJU SVRJT05XSVNFKHB0MSBwdDIgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZG KQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQg cHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0g MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25k OiAocHQyLmlkID0gcHQzLmlkKQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDIgPSAxKQorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkK KyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBv biBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDIuaWQpCisg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoaWQgPSBwdDIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFBBUlRJVElPTldJU0UocHQx KSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJT05XSVNFKHB0MikgLyogbWF0Y2hlZCAqLworICAg UEFSVElUSU9OV0lTRShwdDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKHB0MiBwdDMgcHQxKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHQxKQor ICAgSEFTSF9KT0lOKHB0MykKKyAgIFNFUV9TQ0FOKHB0Mi9wdWJsaWMucHQyYSBwdDIvcHVibGlj LnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYQorICAgIHB0My9wdWJsaWMucHQz YiBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMu cHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1Ymxp Yy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKHB0MiBwdDMgcHQxKQor ICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5w dDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMg cHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDMgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChw dDEgcHQyKSBwdDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBw dDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggSm9pbgorICAgSGFzaCBDb25kOiAocHQxLmlkID0gcHQzLmlkKQorICAgLT4gIEFwcGVuZAor ICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQxXzEu aWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0MV8x CisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJf MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMi5pZCA9IHB0 Ml8yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQxXzIKKyAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0MV8zLmlkID0gcHQyXzMuaWQp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBwdDFfMworICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAg IC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAg ICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIpKSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJ T05XSVNFKHB0MykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIocHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJsaWMucHQyYSkKKyAgIEpPSU5fT1JERVIo cHQxL3B1YmxpYy5wdDFiIHB0Mi9wdWJsaWMucHQyYikKKyAgIEpPSU5fT1JERVIocHQxL3B1Ymxp Yy5wdDFjIHB0Mi9wdWJsaWMucHQyYykKKyAgIEpPSU5fT1JERVIoe3B0MSBwdDJ9IHB0MykKKyAg IEhBU0hfSk9JTihwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQy YyBwdDMpCisgICBTRVFfU0NBTihwdDEvcHVibGljLnB0MWEgcHQyL3B1YmxpYy5wdDJhIHB0MS9w dWJsaWMucHQxYiBwdDIvcHVibGljLnB0MmIKKyAgICBwdDEvcHVibGljLnB0MWMgcHQyL3B1Ymxp Yy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IKKyAgICBwdDMvcHVibGljLnB0 M2MpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSBwdDMpCisgICBOT19HQVRIRVIocHQxL3B1 YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJh CisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQz L3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0NyByb3dzKQorCitDT01NSVQ7CistLSBD YW4ndCBmb3JjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNF KChwdDEgcHRtaXNtYXRjaCkpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlk OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAor ICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDFhIHB0MV8xCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIHB0bWlzbWF0Y2hhX3BrZXkgb24gcHRtaXNtYXRjaGEgcHRtaXNt YXRjaF8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgICAgICAg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYl9wa2V5IG9uIHB0bWlzbWF0Y2hiIHB0 bWlzbWF0Y2hfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSAv KiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKHB0MSBwdG1pc21hdGNoKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHRtaXNtYXRjaCkKKyAg IFNFUV9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFj KQorICAgSU5ERVhfU0NBTihwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdWJsaWMucHRt aXNtYXRjaGFfcGtleQorICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiIHB1YmxpYy5w dG1pc21hdGNoYl9wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDEgcHRtaXNtYXRjaCkKKyAgIE5P X0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYwor ICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlz bWF0Y2hiKQorKDIyIHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGpvaW4gb3JkZXIgZm9yIGEg cGFydGljdWxhciBicmFuY2ggb2YgdGhlIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoCistLSBhbmQg d2l0aG91dCBtZW50aW9uaW5nIHRoZSBzY2hlbWEgbmFtZS4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVi bGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBB TkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwz ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQzXzEuaWQgPSBwdDJfMS5pZCkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFz aCBDb25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFs MyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBw dDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNf My5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0g MSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNh IHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGlj LnB0MmEgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQz L3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5w dDJjIHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJ TihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhB U0hfSk9JTihwdDIvcHVibGljLnB0MmEgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykK KyAgIFNFUV9TQ0FOKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5w dDJiIHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2Mp CisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJs aWMucHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFj X3BrZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQx L3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5w dDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2Eg cHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0OSByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIocHQzL3B0M2EgcHQyL3B0MmEgcHQx L3B0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQK KyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAor ICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICBIYXNoIENvbmQ6IChwdDNfMS5pZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMg PSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBw dDFhIHB0MV8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9 IHB0M18yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAg ICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNf cGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJf My5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDMvcHQzYSBwdDIvcHQyYSBwdDEvcHQxYSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1Ymxp Yy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0 Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9P UkRFUihwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAg IE5FU1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1 YmxpYy5wdDFjKQorICAgSEFTSF9KT0lOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2Ig cHQzL3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMu cHQyYSBwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJj IHB0My9wdWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5w dDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGlj LnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkK KyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMu cHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJj IHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ5IHJv d3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0 ZWQvc2Nhbi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hODBkZTc4ZDgyMwotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQKQEAg LTAsMCArMSw3NTcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0gMC4xOworU0VUIHJh bmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3QgPSAwOworU0VUIGNwdV9p bmRleF90dXBsZV9jb3N0ID0gMDsKK0NSRUFURSBUQUJMRSBzY2FuX3RhYmxlIChhIGludCBwcmlt YXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUgdGV4dCAnIHx8IGcgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIHNjYW5fdGFibGVfYiBP TiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFOQUxZWkUgc2Nhbl90YWJsZTsK Ky0tIFNlcXVlbnRpYWwgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgIFFVRVJZIFBMQU4gICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNCByb3dzKQorCistLSBJbmRleCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nh bl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBJ bmRleC1vbmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBh IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0g Qml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CisgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2Nh biBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4 dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAgICAgIElu ZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfYikK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gVElEIHNjYW4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHNjYW5fdGFi bGUKKyAgIFRJRCBDb25kOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNSByb3dzKQorCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScg QU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgUmFuZ2UgU2NhbiBvbiBz Y2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQgKGN0aWQg PCAnKDIsMSknOjp0aWQpKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNj YW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIFRyeSBm b3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1c2UgdGhlIHNjYW4gdHlwZSB0aGV5 CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91bGQgc3VjY2VlZC4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGU7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDYgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hF UkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2Fu X3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25s eSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25k OiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9w a2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhl YXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4 Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAg ICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfYikKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NB TihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQgPSAnKDAs MSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxl KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nh bl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUg Y3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQg UmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygxLDEpJzo6 dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkK Kyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0aGUg dGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdpbGwg ZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVudGlhbGx5 CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2VzIG5v dCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFjayBv ZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNF UV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9w a2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBv biBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVHJ5IGFnYWluIHRvIGZvcmNlIGluZGV4 IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRoZSBJTkRFWF9TQ0FOCistLSBhbmQg QklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZX1NDQU4gY2FuJ3QgYmUgZm9yY2Vk IGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVtbnMgbm90IGluY2x1ZGVkIGluIHRo ZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CisgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJ bmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBD b25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBGaWx0ZXI6IChhID4gMCkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDgg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFJlY2hlY2sgQ29uZDog KGEgPiAwKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfcGtleQorICAg ICAgICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgQklU TUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBw dWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOSByb3dz KQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBsb29rdXAgdG8gdXNl IGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0IHRvIHVzZSBhbiBp bmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBvciBhIFRJRCBzY2Fu IChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAg RmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2Fu X3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1ND QU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJs ZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQor ICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkg LyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nh bl90YWJsZSkKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn VElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBJbmRleCBDb25kOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKSAvKiBt YXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNpYmx5IGRvd25ncmFkZSBh biBpbmRleC1vbmx5IHNjYW4gdG8gYW4gaW5kZXggc2NhbiwgYnV0IHdlIGNhbid0CistLSBmb3Jj ZSB0aGUgdXNlIG9mIGFuIGluZGV4IHRoYXQgdGhlIHBsYW5uZXIgdGhpbmtzIGlzIGluYXBwbGlj YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRl eCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25k OiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFi bGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2Fu X3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAg IEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2Yg YSBzZXF1ZW50aWFsIHNjYW4gaW4gcGxhY2Ugb2YgYSBiaXRtYXAgaGVhcCBzY2FuLAorLS0gYnV0 IGEgcGxhaW4gaW5kZXggc2NhbiBvbiBhIEJSSU4gaW5kZXggaXMgbm90IHBvc3NpYmxlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNjYW5fdGFi bGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoYiA+ICdzb21lIHRleHQgOCc6 OnRleHQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90 YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9i KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQor ICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwg ZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJs ZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2Ug Y2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4gYSBUSUQg c2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAs MSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAg RmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso NyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoKGN0aWQgPiAn KDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBtb3JlIGNvbXBsZXggc2NlbmFy aW9zIHdpdGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNob3VsZCBzdGlsbCB3b3JrIGlmIHdl IG1lbnRpb24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn SU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBh ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkg b24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBj aWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVf cGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgY2lsYnVwLnNjYW5fdGFibGVfcGtl eSkgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEl0J3MgT0sgdG8gcmVwZWF0IHRoZSBz YW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAq LworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQor CistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0YXJnZXQgaXMgZXZlbiBub3Rp b25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHB1YmxpYy5zY2Fu X3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBjb25m bGljdGluZyAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgYXNzb3J0ZWQg aW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm90aGluZykgLyogbm90IG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihub3RoaW5nIHdoYXRzb2V2 ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf T05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAvKiBtYXRjaGVkLCBpbmFw cGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09O TFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIo c2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUK KyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVY X09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJs ZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25s eSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25k OiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBib2d1cykgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFi bGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOwor LS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhl IHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJs ZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAtPiAg TmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5l cmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9w a2V5IG9uIHNjYW5fdGFibGUgcworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcp CisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBz XzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMgcyMyKQor ICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkgcyMyIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVG VCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFi bGUgcyBPTiBnID0gcy5hOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIEhh c2ggTGVmdCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChnLmcgPSBzLmEpCisgICAgICAgICAt PiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHNfMQorICAgICAgICAg SW5kZXggQ29uZDogKGEgPSBnLmcpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB TihzKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihnIHMgcyMyKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocyMyKQorICAgSEFTSF9KT0lOKHMpCisg ICBTRVFfU0NBTihzKQorICAgSU5ERVhfU0NBTihzIzIgcHVibGljLnNjYW5fdGFibGVfcGtleSkK KyAgIE5PX0dBVEhFUihzIHMjMikKKygxNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBz Y2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04g ZyA9IHMuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChn LmcgPSBzXzEuYSkKKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBG dW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoYSA9IGcuZykKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gc2Nhbl90YWJsZSBzXzEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHMj MikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMpCisgICBIQVNIX0pPSU4ocyMyKQorICAg U0VRX1NDQU4ocyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIocyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBM RUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90 YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzXzEuYSkKKyAgIC0+ ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZy5nID0gcy5hKQorICAgICAg ICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVkICovCisgICBTRVFfU0NBTihz IzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGcgcyBzIzIpCisgICBIQVNIX0pPSU4ocyBzIzIpCisgICBTRVFfU0NBTihzIHMjMikKKyAgIE5P X0dBVEhFUihzIHMjMikKKygxNyByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IG91ciBhYmlsaXR5 IHRvIHJlZmVyIHRvIHNjYW5zIHdpdGhpbiBhIHN1YnF1ZXJ5LgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBz IFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nh bl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzQHggcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhF UihzQHgpCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VU IDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxl IHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAg Tk9fR0FUSEVSKHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hv dWxkIG5vdCBtYXRjaC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5 IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1YnF1ZXJ5 KQorKDcgcm93cykKKworLS0gU2hvdWxkIG1hdGNoIGZpcnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNAeCknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNj YW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihzQHgpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBTRVFfU0NBTihzQHgpCisgICBOT19HQVRIRVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG5vdCBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVl cnkgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHVubmFtZWRfc3VicXVl cnkpCisoNyByb3dzKQorCistLSBTaG91bGQgbWF0Y2ggc2Vjb25kIHF1ZXJ5IG9ubHkuCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVy eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2lu ZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkp IC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NB TihzQHggcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHgpCisoNyByb3dz KQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcwor ICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihz QHVubmFtZWRfc3VicXVlcnkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpCisgICBOT19HQVRIRVIoc0B1bm5hbWVk X3N1YnF1ZXJ5KQorKDcgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9leHBlY3RlZC9zZW1pam9pbi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL3NlbWlqb2luLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uMzAwNGZjYjRkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL3NlbWlqb2luLm91dApAQCAtMCwwICsxLDMyNyBAQAorTE9BRCAncGdfcGxh bl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JF QVRFIFRBQkxFIHNqX3dpZGUgKAorCWlkIGludGVnZXIgcHJpbWFyeSBrZXksCisJdmFsMSBpbnRl Z2VyLAorCXBhZGRpbmcgdGV4dCBzdG9yYWdlIHBsYWluCispIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNqX3dpZGUKKwlTRUxFQ1QgZywgZyUxMCsxLCBy ZXBlYXQoJyAnLCAzMDApIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGc7CitDUkVBVEUg SU5ERVggT04gc2pfd2lkZSAodmFsMSk7CitWQUNVVU0gQU5BTFlaRSBzal93aWRlOworQ1JFQVRF IFRBQkxFIHNqX25hcnJvdyAoCisJaWQgaW50ZWdlciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVn ZXIKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2pf bmFycm93CisJU0VMRUNUIGcsIGclMTArMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBn OworQ1JFQVRFIElOREVYIE9OIHNqX25hcnJvdyAodmFsMSk7CitWQUNVVU0gQU5BTFlaRSBzal9u YXJyb3c7CistLSBXZSBleHBlY3QgdGhpcyB0byBtYWtlIHRoZSBWQUxVRVMgbGlzdCB1bmlxdWUg YW5kIHVzZSBpbmRleCBsb29rdXBzIHRvCistLSBmaW5kIHRoZSByb3dzIGluIHNqX3dpZGUsIHNv IGFzIHRvIGF2b2lkIGEgZnVsbCBzY2FuIG9mIHNqX3dpZGUuCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJ TiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE5lc3RlZCBMb29wCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgR3JvdXAgS2V5 OiAiKlZBTFVFUyoiLmNvbHVtbjEsICIqVkFMVUVTKiIuY29sdW1uMgorICAgICAgICAgLT4gIFZh bHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNqX3dpZGVf cGtleSBvbiBzal93aWRlCisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSAiKlZBTFVFUyoiLmNv bHVtbjEpCisgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gIipWQUxVRVMqIi5jb2x1bW4yKQorIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoIipWQUxVRVMqIiBzal93aWRlKQor ICAgTkVTVEVEX0xPT1BfUExBSU4oc2pfd2lkZSkKKyAgIElOREVYX1NDQU4oc2pfd2lkZSBwdWJs aWMuc2pfd2lkZV9wa2V5KQorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19H QVRIRVIoc2pfd2lkZSkKKygxMyByb3dzKQorCistLSBJZiB3ZSBhc2sgZm9yIGEgdW5pcXVlIHNl bWlqb2luLCB3ZSBzaG91bGQgZ2V0IHRoZSBzYW1lIHBsYW4gYXMgd2l0aAorLS0gbm8gYWR2aWNl LiBJZiB3ZSBhc2sgZm9yIGEgbm9uLXVuaXF1ZSBzZW1pam9pbiwgd2Ugc2hvdWxkIHNlZSBhIFNl bWkKKy0tIEpvaW4gb3BlcmF0aW9uIGluIHRoZSBwbGFuIHRyZWUuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIqVkFMVUVTKiIpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUK KwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQs IDQpLCAoNSwgNSkpOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBIYXNoQWdncmVnYXRl CisgICAgICAgICBHcm91cCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMSwgIipWQUxVRVMqIi5jb2x1 bW4yCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgc2pfd2lkZV9wa2V5IG9uIHNqX3dpZGUKKyAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkKKyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAiKlZB TFVFUyoiLmNvbHVtbjIpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9VTklR VUUoIipWQUxVRVMqIikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoIipWQUxVRVMqIiBzal93aWRlKQorICAgTkVTVEVEX0xPT1BfUExBSU4oc2pf d2lkZSkKKyAgIElOREVYX1NDQU4oc2pfd2lkZSBwdWJsaWMuc2pfd2lkZV9wa2V5KQorICAgU0VN SUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfd2lkZSkKKygxNSByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlx dWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gc2pfd2lkZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgy LCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggU2VtaSBK b2luCisgICBIYXNoIENvbmQ6ICgoc2pfd2lkZS5pZCA9ICIqVkFMVUVTKiIuY29sdW1uMSkgQU5E IChzal93aWRlLnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9u IHNqX3dpZGUKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxV RVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fTk9OX1VOSVFVRSgiKlZB TFVFUyoiKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihzal93aWRlICIqVkFMVUVTKiIpCisgICBIQVNIX0pPSU4oIipWQUxVRVMqIikKKyAgIFNF UV9TQ0FOKHNqX3dpZGUpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBO T19HQVRIRVIoc2pfd2lkZSkKKygxMyByb3dzKQorCitDT01NSVQ7CistLSBCZWNhdXNlIHRoaXMg dGFibGUgaXMgbmFycm93ZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lLCBhIHNlcXVlbnRpYWwgc2Nh bgorLS0gaXMgbGVzcyBleHBlbnNpdmUsIGFuZCB3ZSBjaG9vc2UgYSBzdHJhaWdodGZvcndhcmQg U2VtaSBKb2luIHBsYW4gYnkKKy0tIGRlZmF1bHQuIChOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIHZl cnkgc2Vuc2l0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIElOCistLSBsaXN0LCB3aGljaCBhZmZl Y3RzIGhvdyBtYW55IGluZGV4IGxvb2t1cHMgdGhlIGFsdGVybmF0aXZlIHBsYW4gd2lsbCBuZWVk LikKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25h cnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMp LCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4K KyAgIEhhc2ggQ29uZDogKChzal9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAo c2pfbmFycm93LnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9u IHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZB TFVFUyoiCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cg IipWQUxVRVMqIikKKyAgIEhBU0hfSk9JTigiKlZBTFVFUyoiKQorICAgU0VRX1NDQU4oc2pfbmFy cm93KQorICAgU0VNSUpPSU5fTk9OX1VOSVFVRSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNq X25hcnJvdykKKygxMSByb3dzKQorCistLSBIZXJlLCB3ZSBleHBlY3QgYWR2aXNpbmcgYSB1bmlx dWUgc2VtaWpvaW4gdG8gc3dpdGggdG8gdGhlIHNhbWUgcGxhbiB0aGF0CistLSB3ZSBnb3Qgd2l0 aCBzal93aWRlLCBhbmQgYWR2aXNpbmcgYSBub24tdW5pcXVlIHNlbWlqb2luIHNob3VsZCBub3Qg Y2hhbmdlCistLSB0aGUgcGxhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdzZW1pam9pbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUgKGlkLCB2YWwx KSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKChzal9uYXJyb3cu aWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfbmFycm93LnZhbDEgPSAiKlZBTFVFUyoi LmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAg ICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6ICIqVkFM VUVTKiIuY29sdW1uMSwgIipWQUxVRVMqIi5jb2x1bW4yCisgICAgICAgICAgICAgICAtPiAgVmFs dWVzIFNjYW4gb24gIipWQUxVRVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpP SU5fVU5JUVVFKCIqVkFMVUVTKiIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIq VkFMVUVTKiIpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9VTklRVUUoIipW QUxVRVMqIikKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX25h cnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMsIDMp LCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpvaW4K KyAgIEhhc2ggQ29uZDogKChzal9uYXJyb3cuaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAo c2pfbmFycm93LnZhbDEgPSAiKlZBTFVFUyoiLmNvbHVtbjIpKQorICAgLT4gIFNlcSBTY2FuIG9u IHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZB TFVFUyoiCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIq VkFMVUVTKiIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKHNqX25hcnJvdyAiKlZBTFVFUyoiKQorICAgSEFTSF9KT0lOKCIqVkFMVUVTKiIpCisg ICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9OT05fVU5JUVVFKCIqVkFMVUVTKiIp CisgICBOT19HQVRIRVIoc2pfbmFycm93KQorKDEzIHJvd3MpCisKK0NPTU1JVDsKKy0tIEluIHRo ZSBhYm92ZSBleGFtcGxlLCB3ZSBtYWRlIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIHVuaXF1 ZSwgYnV0IGhlcmUsCistLSB3ZSBzaG91bGQgbWFrZSB0aGUgaW5uZXIgc2lkZSB1bmlxdWUuCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJy b3cpOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2gg Q29uZDogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2Vu ZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQorICAgU0VRX1ND QU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhF Uihzal9uYXJyb3cpCisoMTMgcm93cykKKworLS0gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2Ug YSBwbGFuIHdpdGggb3Igd2l0aG91dCB0aGUgbWFrZS11bmlxdWUgc3RyYXRlZ3ksCistLSB3aXRo IGVpdGhlciBzaWRlIGFzIHRoZSBkcml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7 CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2gg Q29uZDogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2Vu ZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VN SUpPSU5fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93 KQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykK KyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdyknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsK KyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBTZW1pIEpv aW4KKyAgIEhhc2ggQ29uZDogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9u IFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gc2pfbmFycm93CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9O T05fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZyBzal9uYXJyb3cpCisgICBIQVNIX0pPSU4oc2pfbmFycm93KQor ICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cp CisgICBOT19HQVRIRVIoc2pfbmFycm93KQorKDEzIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKHNqX25hcnJvdykgam9pbl9vcmRlcihz al9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFs MSBmcm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoc2pfbmFycm93LnZhbDEgPSBnLmcpCisg ICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworICAgLT4gIEhhc2gKKyAgICAgICAg IC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRU1JSk9JTl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgICBK T0lOX09SREVSKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93IGcpCisgICBIQVNIX0pPSU4oZykKKyAgIFNFUV9T Q0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRI RVIoc2pfbmFycm93KQorKDE2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpIGpvaW5fb3JkZXIoc2pfbmFycm93 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBz al9uYXJyb3cpOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoIFJpZ2h0IFNlbWkgSm9pbgorICAgSGFzaCBDb25kOiAoc2pfbmFycm93LnZhbDEgPSBnLmcp CisgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkICovCisgICBK T0lOX09SREVSKHNqX25hcnJvdykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93IGcpCisgICBIQVNIX0pPSU4oZykKKyAgIFNFUV9T Q0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9f R0FUSEVSKHNqX25hcnJvdykKKygxNCByb3dzKQorCitDT01NSVQ7CistLSBIb3dldmVyLCBtZW50 aW9uaW5nIHRoZSB3cm9uZyBzaWRlIG9mIHRoZSBqb2luIHNob3VsZCByZXN1bHQgaW4gYW4gYWR2 aWNlCistLSBmYWlsdXJlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ3NlbWlqb2luX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBp biAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRl cjogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg IEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9u YXJyb3cKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9VTklRVUUoZykgLyogbWF0Y2hlZCwgZmFpbGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgZykK KyAgIE5FU1RFRF9MT09QX1BMQUlOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1J Sk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygxNSByb3dz KQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlx dWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZy b20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKGcuZyA9 IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3VwIEtl eTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAg IC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKGcpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93IGcpCisgICBO RVNURURfTE9PUF9QTEFJTihnKQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5f VU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCisoMTUgcm93cykKKwor Q09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50 YXgub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZTYxNDAyYjU2OQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dApAQCAt MCwwICsxLDE5MiBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworLS0gQW4gZW1wdHkgc3RyaW5n IGlzIGFsbG93ZWQuIEVtcHR5IHRhcmdldCBsaXN0cyBhcmUgYWxsb3dlZCBmb3IgbW9zdCBhZHZp Y2UKKy0tIHRhZ3MsIGJ1dCBub3QgZm9yIEpPSU5fT1JERVIuICJTdXBwbGllZCBQbGFuIEFkdmlj ZSIgc2hvdWxkIGJlIG9taXR0ZWQgaW4KKy0tIHRleHQgZm9ybWF0IHdoZW4gdGhlcmUgaXMgbm8g YWN0dWFsIGFkdmljZSwgYnV0IG5vdCBpbiBub24tdGV4dCBmb3JtYXQuCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZ IFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdTRVFfU0NBTigpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7 CisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKCknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBGT1JNQVQgSlNPTikgU0VMRUNUIDE7CisgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBbICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCisgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAg ICAiUGxhbiI6IHsgICAgICAgICAgICAgICAgICsKKyAgICAgICAiTm9kZSBUeXBlIjogIlJlc3Vs dCIsICArCisgICAgICAgIlBhcmFsbGVsIEF3YXJlIjogZmFsc2UsKworICAgICAgICJBc3luYyBD YXBhYmxlIjogZmFsc2UsICsKKyAgICAgICAiRGlzYWJsZWQiOiBmYWxzZSAgICAgICArCisgICAg IH0sICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAiU3VwcGxpZWQgUGxhbiBBZHZpY2Ui OiAiIisKKyAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICArCisgXQorKDEgcm93KQorCitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoKSc7CitFUlJPUjogIGludmFs aWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkpPSU5fT1JE RVIoKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IEpPSU5fT1JERVIgbXVzdCBo YXZlIGF0IGxlYXN0IG9uZSB0YXJnZXQgYXQgb3IgbmVhciAiKSIKKy0tIFRlc3QgYXNzb3J0ZWQg dmFyaWF0aW9ucyBpbiBjYXBpdGFsaXphdGlvbiwgd2hpdGVzcGFjZSwgYW5kIHdoaWNoIHBhcnRz IG9mCistLSB0aGUgcmVsYXRpb24gaWRlbnRpZmllciBhcmUgaW5jbHVkZWQuIFRoZXNlIHNob3Vs ZCBhbGwgd29yay4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oeCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4KSAvKiBub3QgbWF0Y2hlZCAqLworKDMg cm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZXFfc2Nhbih4QHkpJzsKK0VY UExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHhAeSkgLyogbm90IG1hdGNoZWQgKi8K KygzIHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX3NjYW4oeCMyKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0 CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4IzIpIC8qIG5vdCBtYXRjaGVk ICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOICh4 L3kpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBS ZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHgveSkgLyogbm90IG1h dGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnICBTRVFf U0NBTiAoIHggLyB5IC4geiApICAnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNF UV9TQ0FOKHgveS56KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigieCIjMi8ieSIuInoiQCJ0IiknOworRVhQTEFJTiAo Q09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3Vs dAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCMyL3kuekB0KSAvKiBub3Qg bWF0Y2hlZCAqLworKDMgcm93cykKKworLS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRVUVOVElBTF9TQ0FOKHgpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1 ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRVUVOVElBTF9TQ0FO KHgpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9y IG5lYXIgIlNFUVVFTlRJQUxfU0NBTiIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4nOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2 aWNlLmFkdmljZSI6ICJTRVFfU0NBTiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6 IHN5bnRheCBlcnJvciBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnU0VRX1NDQU4oJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19w bGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNl IGFkdmljZTogc3ludGF4IGVycm9yIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTigiJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1l dGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIiIKK0RFVEFJTDogIENvdWxk IG5vdCBwYXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBxdW90ZWQgaWRlbnRpZmllciBhdCBlbmQg b2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIiIpJzsKK0VS Uk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2Ui OiAiU0VRX1NDQU4oIiIpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogemVyby1s ZW5ndGggZGVsaW1pdGVkIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiIiIKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oImEiJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oImEiIgorREVUQUlM OiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IGVuZCBvZiBpbnB1dAor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigjJzsKK0VSUk9SOiAgaW52YWxp ZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4o IyIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBu ZWFyICIjIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcoKSc7CitFUlJPUjogIGludmFs aWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIigpIgorREVU QUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigi CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CitFUlJPUjogIGludmFsaWQgdmFs dWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIjEyMyIKK0RFVEFJTDog IENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIxMjMiCist LSBUYWdzIGxpa2UgU0VRX1NDQU4gYW5kIE5PX0dBVEhFUiBkb24ndCBhbGxvdyBzdWJsaXN0cyBh dCBhbGw7IG90aGVyIHRhZ3MsCistLSBleGNlcHQgZm9yIEpPSU5fT1JERVIsIGFsbG93IGF0IG1v c3Qgb25lIGxldmVsIG9mIHN1Ymxpc3QuIEhlbmNlLCB0aGVzZQorLS0gZXhhbXBsZXMgc2hvdWxk IGVycm9yIG91dC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKHgpKSc7 CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2 aWNlIjogIlNFUV9TQ0FOKCh4KSkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBz eW50YXggZXJyb3IgYXQgb3IgbmVhciAiKCIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn R0FUSEVSKCgoeCkpKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdf cGxhbl9hZHZpY2UuYWR2aWNlIjogIkdBVEhFUigoKHgpKSkiCitERVRBSUw6ICBDb3VsZCBub3Qg cGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiKCIKKy0tIExlZ2FsIGNvbW1l bnRzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiovJzsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEg cm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihfKS8qKiovJzsK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0Cisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oXykgLyogbm90IG1hdGNoZWQgKi8K KygzIHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBI QVNIX0pPSU4oLyp4Ki95KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKHkp IC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKHkvLyp4Ki96KSc7CitFWFBMQUlOIChDT1NUUyBP RkYpIFNFTEVDVCAxOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEhBU0hfSk9JTih5L3opIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQor CistLSBVbnRlcm1pbmF0ZWQgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g Jy8qJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UiOiAiLyoiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1p bmF0ZWQgY29tbWVudCBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9y IHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkpPSU5fT1JERVIoImZPTyIpIC8q IG9vcHMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgY29t bWVudCBhdCBlbmQgb2YgaW5wdXQKKy0tIE5lc3RlZCBjb21tZW50cyBhcmUgbm90IHN1cHBvcnRl ZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2FsIGFuZAorLS0gdGhlIHNlY29uZCBpcyBu b3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyovJzsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEg cm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyogc3R1ZmYgKi8qLyc7CitF UlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNl IjogIi8qLyogc3R1ZmYgKi8qLyIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5 bnRheCBlcnJvciBhdCBvciBuZWFyICIqIgorLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRp cGxlIHJlbGF0aW9uIGlkZW50aWZpZXJzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdG T1JFSUdOX0pPSU4oYSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBn X3BsYW5fYWR2aWNlLmFkdmljZSI6ICJGT1JFSUdOX0pPSU4oYSkiCitERVRBSUw6ICBDb3VsZCBu b3QgcGFyc2UgYWR2aWNlOiBGT1JFSUdOX0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0 aGFuIG9uZSByZWxhdGlvbiBpZGVudGlmaWVyIGF0IG9yIG5lYXIgIikiCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTigoYSkpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1 ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiRk9SRUlHTl9KT0lOKChh KSkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBGT1JFSUdOX0pPSU4gdGFyZ2V0 cyBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpZGVudGlmaWVyIGF0IG9yIG5l YXIgIikiCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uMjI1YWY5M2ZjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsNzEgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDIyLTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3Bn X3BsYW5fYWR2aWNlX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3BnX3BsYW5fYWR2aWNlLmMnLAorICAn cGdwYV9hc3QuYycsCisgICdwZ3BhX2NvbGxlY3Rvci5jJywKKyAgJ3BncGFfaWRlbnRpZmllci5j JywKKyAgJ3BncGFfam9pbi5jJywKKyAgJ3BncGFfb3V0cHV0LmMnLAorICAncGdwYV9wbGFubmVy LmMnLAorICAncGdwYV9zY2FuLmMnLAorICAncGdwYV90cm92ZS5jJywKKyAgJ3BncGFfd2Fsa2Vy LmMnLAorKQorCitwZ3BhX3NjYW5uZXIgPSBjdXN0b21fdGFyZ2V0KCdwZ3BhX3NjYW5uZXInLAor ICBpbnB1dDogJ3BncGFfc2Nhbm5lci5sJywKKyAgb3V0cHV0OiAncGdwYV9zY2FubmVyLmMnLAor ICBjb21tYW5kOiBmbGV4X2NtZCwKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfc2Nhbm5l cgorcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSBwZ3BhX3NjYW5uZXIKKworcGdwYV9wYXJzZXIg PSBjdXN0b21fdGFyZ2V0KCdwZ3BhX3BhcnNlcicsCisgIGlucHV0OiAncGdwYV9wYXJzZXIueScs CisgIGt3YXJnczogYmlzb25fa3csCispCitnZW5lcmF0ZWRfc291cmNlcyArPSBwZ3BhX3BhcnNl ci50b19saXN0KCkKK3BnX3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcGdwYV9wYXJzZXIKKworaWYg aG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcmNf bGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScs ICdwZ19wbGFuX2FkdmljZScsCisgICAgJy0tRklMRURFU0MnLCAncGdfcGxhbl9hZHZpY2UgLSBo ZWxwIHRoZSBwbGFubmVyIGdldCB0aGUgcmlnaHQgcGxhbicsXSkKK2VuZGlmCisKK3BnX3BsYW5f YWR2aWNlID0gc2hhcmVkX21vZHVsZSgncGdfcGxhbl9hZHZpY2UnLAorICBwZ19wbGFuX2Fkdmlj ZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBpbmNsdWRlX2RpcmVjdG9yaWVzKCcu JyksCisgIGt3YXJnczogY29udHJpYl9tb2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBw Z19wbGFuX2FkdmljZQorCitpbnN0YWxsX2RhdGEoCisgICdwZ19wbGFuX2FkdmljZS0tMS4wLnNx bCcsCisgICdwZ19wbGFuX2FkdmljZS5jb250cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFf YXJncywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICdwZ19wbGFuX2FkdmljZScsCisgICdz ZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1 aWxkX2RpcigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ2dhdGhlcics CisgICAgICAnam9pbl9vcmRlcicsCisgICAgICAnam9pbl9zdHJhdGVneScsCisgICAgICAnbG9j YWxfY29sbGVjdG9yJywKKyAgICAgICdwYXJ0aXRpb253aXNlJywKKyAgICAgICdzY2FuJywKKyAg ICAgICdzZW1pam9pbicsCisgICAgICAnc3ludGF4JywKKyAgICBdLAorICB9LAorICAndGFwJzog eworICAgICd0ZXN0cyc6IFsKKyAgICAgICd0LzAwMV9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9 LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0t MS4wLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI5ZjRmMjI0ODY0Ci0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4w LnNxbApAQCAtMCwwICsxLDQyIEBACisvKiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5f YWR2aWNlLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGlu IHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFU RSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitD UkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpCitSRVRVUk5T IHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fk dmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29s bGVjdGVkX3NoYXJlZF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1F JywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7 CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgKKwlPVVQg aWQgYmlnaW50LAorCU9VVCB1c2VyaWQgb2lkLAorCU9VVCBkYmlkIG9pZCwKKwlPVVQgcXVlcnlp ZCBiaWdpbnQsCisJT1VUIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKwlPVVQgcXVlcnkg dGV4dCwKKwlPVVQgYWR2aWNlIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlJworTEFOR1VBR0Ug QyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZp Y2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJ T1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisJ T1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29y ZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2Un CitMQU5HVUFHRSBDIFNUUklDVDsKKworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfY29s bGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdfcGxhbl9hZHZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u ZTVlNzMzNmI3YWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn X3BsYW5fYWR2aWNlLmMKQEAgLTAsMCArMSw0NjggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHBnX3BsYW5fYWR2aWNlLmMKKyAqCSAgbWFpbiBlbnRyeXBvaW50cyBmb3IgZ2VuZXJhdGlu ZyBhbmQgYXBwbHlpbmcgcGxhbm5lciBhZHZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNl LmgiCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgor I2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisj aW5jbHVkZSAicGdwYV9wbGFubmVyLmgiCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorI2luY2x1 ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNs dWRlICJjb21tYW5kcy9leHBsYWluLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9mb3Jt YXQuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAiZnVu Y2FwaS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKworUEdfTU9EVUxFX01B R0lDOworCitzdGF0aWMgcGdwYV9zaGFyZWRfc3RhdGUgKnBncGFfc3RhdGUgPSBOVUxMOworc3Rh dGljIGRzYV9hcmVhICpwZ3BhX2RzYV9hcmVhID0gTlVMTDsKKworLyogR1VDIHZhcmlhYmxlcyAq LworY2hhcgkgICAqcGdfcGxhbl9hZHZpY2VfYWR2aWNlID0gTlVMTDsKK3N0YXRpYyBib29sIHBn X3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IHRydWU7Citib29s CQlwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrID0gZmFsc2U7CitpbnQJCQlwZ19wbGFuX2Fkdmlj ZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKK2ludAkJCXBnX3BsYW5fYWR2aWNlX3NoYXJl ZF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKKworLyogU2F2ZWQgaG9vayB2YWx1ZSAqLworc3RhdGlj IGV4cGxhaW5fcGVyX3BsYW5faG9va190eXBlIHByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IE5VTEw7 CisKKy8qIE90aGVyIGZpbGUtbGV2ZWwgZ2xvYmFscyAqLworc3RhdGljIGludAllc19leHRlbnNp b25faWQ7CitzdGF0aWMgTWVtb3J5Q29udGV4dCBwZ3BhX21lbW9yeV9jb250ZXh0ID0gTlVMTDsK Kworc3RhdGljIHZvaWQgcGdwYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFy Zyk7CitzdGF0aWMgdm9pZCBwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9oYW5kbGVyKEV4 cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkJCQkgIERlZkVsZW0gKm9wdCwKKwkJCQkJCQkJCQkJ CSAgUGFyc2VTdGF0ZSAqcHN0YXRlKTsKK3N0YXRpYyB2b2lkIHBnX3BsYW5fYWR2aWNlX2V4cGxh aW5fcGVyX3BsYW5faG9vayhQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsCisJCQkJCQkJCQkJCQkg SW50b0NsYXVzZSAqaW50bywKKwkJCQkJCQkJCQkJCSBFeHBsYWluU3RhdGUgKmVzLAorCQkJCQkJ CQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkJCQkJCQkJIFBhcmFtTGlzdElu Zm8gcGFyYW1zLAorCQkJCQkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKK3N0 YXRpYyBib29sIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rKGNoYXIgKipuZXd2YWws IHZvaWQgKipleHRyYSwKKwkJCQkJCQkJCQkJIEd1Y1NvdXJjZSBzb3VyY2UpOworc3RhdGljIERl ZkVsZW0gKmZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5h bWUpOworCisvKgorICogSW5pdGlhbGl6ZSB0aGlzIG1vZHVsZS4KKyAqLwordm9pZAorX1BHX2lu aXQodm9pZCkKK3sKKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2Uu YWR2aWNlIiwKKwkJCQkJCQkgICAiYWR2aWNlIHRvIGFwcGx5IGR1cmluZyBxdWVyeSBwbGFubmlu ZyIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAmcGdfcGxhbl9hZHZpY2VfYWR2aWNlLAor CQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgUEdDX1VTRVJTRVQsCisJCQkJCQkJICAgMCwKKwkJ CQkJCQkgICBwZ19wbGFuX2FkdmljZV9hZHZpY2VfY2hlY2tfaG9vaywKKwkJCQkJCQkgICBOVUxM LAorCQkJCQkJCSAgIE5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFu X2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UiLAorCQkJCQkJCSAiRVhQTEFJ TiBvdXRwdXQgaW5jbHVkZXMgc3VwcGxpZWQgYWR2aWNlIGV2ZW4gd2l0aG91dCBFWFBMQUlOIChQ TEFOX0FEVklDRSkiLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmcGdfcGxhbl9hZHZpY2VfYWx3 YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlLAorCQkJCQkJCSB0cnVlLAorCQkJCQkJCSBQR0Nf VVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJ CQkgTlVMTCk7CisKKwlEZWZpbmVDdXN0b21JbnRWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UubG9j YWxfY29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMgdG8gcmV0 YWluIGluIHBlci1iYWNrZW5kIG1lbW9yeSIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQkmcGdfcGxh bl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCwKKwkJCQkJCQkwLAorCQkJCQkJCTAsIElO VF9NQVgsCisJCQkJCQkJUEdDX1VTRVJTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJ CQkJCU5VTEwsCisJCQkJCQkJTlVMTCk7CisKKwlEZWZpbmVDdXN0b21JbnRWYXJpYWJsZSgicGdf cGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQiLAorCQkJCQkJCSIjIG9mIGFkdmlj ZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBzaGFyZWQgbWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJ CQkJCSZwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCwKKwkJCQkJCQkwLAor CQkJCQkJCTAsIElOVF9NQVgsCisJCQkJCQkJUEdDX1NVU0VULAorCQkJCQkJCTAsCisJCQkJCQkJ TlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZh cmlhYmxlKCJwZ19wbGFuX2FkdmljZS50cmFjZV9tYXNrIiwKKwkJCQkJCQkgIkVtaXQgZGVidWdn aW5nIG1lc3NhZ2VzIHNob3dpbmcgdGhlIGNvbXB1dGVkIHN0cmF0ZWd5IG1hc2sgZm9yIGVhY2gg cmVsYXRpb24iLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmcGdfcGxhbl9hZHZpY2VfdHJhY2Vf bWFzaywKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAor CQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsKKworCU1hcmtHVUNQ cmVmaXhSZXNlcnZlZCgicGdfcGxhbl9hZHZpY2UiKTsKKworCS8qIEdldCBhbiBJRCB0aGF0IHdl IGNhbiB1c2UgdG8gY2FjaGUgZGF0YSBpbiBhbiBFeHBsYWluU3RhdGUuICovCisJZXNfZXh0ZW5z aW9uX2lkID0gR2V0RXhwbGFpbkV4dGVuc2lvbklkKCJwZ19wbGFuX2FkdmljZSIpOworCisJLyog UmVnaXN0ZXIgdGhlIG5ldyBFWFBMQUlOIG9wdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBtb2R1 bGUuICovCisJUmVnaXN0ZXJFeHRlbnNpb25FeHBsYWluT3B0aW9uKCJwbGFuX2FkdmljZSIsCisJ CQkJCQkJCSAgIHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIpOworCisJLyog SW5zdGFsbCBob29rcyAqLworCXBncGFfcGxhbm5lcl9pbnN0YWxsX2hvb2tzKCk7CisJcHJldl9l eHBsYWluX3Blcl9wbGFuID0gZXhwbGFpbl9wZXJfcGxhbl9ob29rOworCWV4cGxhaW5fcGVyX3Bs YW5faG9vayA9IHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fcGVyX3BsYW5faG9vazsKK30KKworLyoK KyAqIEluaXRpYWxpemUgc2hhcmVkIHN0YXRlIHdoZW4gZmlyc3QgY3JlYXRlZC4KKyAqLworc3Rh dGljIHZvaWQKK3BncGFfaW5pdF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyLCB2b2lkICphcmcpCit7 CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gKHBncGFfc2hhcmVkX3N0YXRlICopIHB0cjsK KworCUxXTG9ja0luaXRpYWxpemUoJnN0YXRlLT5sb2NrLCBMV0xvY2tOZXdUcmFuY2hlSWQoInBn X3BsYW5fYWR2aWNlX2xvY2siKSk7CisJc3RhdGUtPmRzYV90cmFuY2hlID0gTFdMb2NrTmV3VHJh bmNoZUlkKCJwZ19wbGFuX2FkdmljZV9kc2EiKTsKKwlzdGF0ZS0+YXJlYSA9IERTQV9IQU5ETEVf SU5WQUxJRDsKKwlzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9IEludmFsaWREc2FQb2ludGVyOwor fQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byBhIG1lbW9yeSBjb250ZXh0IHdoZXJlIGxv bmctbGl2ZWQgZGF0YSBtYW5hZ2VkIGJ5IHRoaXMKKyAqIG1vZHVsZSBjYW4gYmUgc3RvcmVkLgor ICovCitNZW1vcnlDb250ZXh0CitwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCh2b2lkKQoreworCWlm IChwZ3BhX21lbW9yeV9jb250ZXh0ID09IE5VTEwpCisJCXBncGFfbWVtb3J5X2NvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkicGdf cGxhbl9hZHZpY2UiLAorCQkJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJ cmV0dXJuIHBncGFfbWVtb3J5X2NvbnRleHQ7Cit9CisKKy8qCisgKiBHZXQgYSBwb2ludGVyIHRv IG91ciBzaGFyZWQgc3RhdGUuCisgKgorICogSWYgbm8gc2hhcmVkIHN0YXRlIGV4aXN0cywgY3Jl YXRlIGFuZCBpbml0aWFsaXplIGl0LiBJZiBpdCBkb2VzIGV4aXN0IGJ1dAorICogdGhpcyBiYWNr ZW5kIGhhcyBub3QgeWV0IGFjY2Vzc2VkIGl0LCBhdHRhY2ggdG8gaXQuIE90aGVyd2lzZSwganVz dCByZXR1cm4KKyAqIG91ciBjYWNoZWQgcG9pbnRlci4KKyAqCisgKiBBbG9uZyB0aGUgd2F5LCBt YWtlIHN1cmUgdGhlIHJlbGV2YW50IExXTG9jayB0cmFuY2hlcyBhcmUgcmVnaXN0ZXJlZC4KKyAq LworcGdwYV9zaGFyZWRfc3RhdGUgKgorcGdfcGxhbl9hZHZpY2VfYXR0YWNoKHZvaWQpCit7CisJ aWYgKHBncGFfc3RhdGUgPT0gTlVMTCkKKwl7CisJCWJvb2wJCWZvdW5kOworCisJCXBncGFfc3Rh dGUgPQorCQkJR2V0TmFtZWREU01TZWdtZW50KCJwZ19wbGFuX2FkdmljZSIsIHNpemVvZihwZ3Bh X3NoYXJlZF9zdGF0ZSksCisJCQkJCQkJICAgcGdwYV9pbml0X3NoYXJlZF9zdGF0ZSwgJmZvdW5k LCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gcGdwYV9zdGF0ZTsKK30KKworLyoKKyAqIFJldHVybiBh IHBvaW50ZXIgdG8gcGdfcGxhbl9hZHZpY2UncyBEU0EgYXJlYSwgY3JlYXRpbmcgaXQgaWYgbmVl ZGVkLgorICovCitkc2FfYXJlYSAqCitwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSh2b2lkKQorewor CWlmIChwZ3BhX2RzYV9hcmVhID09IE5VTEwpCisJeworCQlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3Rh dGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwkJZHNhX2hhbmRsZQlhcmVhX2hhbmRsZTsK KwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQoKSk7CisKKwkJTFdMb2NrQWNxdWly ZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWFyZWFfaGFuZGxlID0gc3RhdGUtPmFy ZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lOVkFMSUQpCisJCXsKKwkJCXBn cGFfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHN0YXRlLT5kc2FfdHJhbmNoZSk7CisJCQlkc2FfcGlu KHBncGFfZHNhX2FyZWEpOworCQkJc3RhdGUtPmFyZWEgPSBkc2FfZ2V0X2hhbmRsZShwZ3BhX2Rz YV9hcmVhKTsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXBncGFfZHNhX2FyZWEgPSBk c2FfYXR0YWNoKGFyZWFfaGFuZGxlKTsKKwkJfQorCisJCWRzYV9waW5fbWFwcGluZyhwZ3BhX2Rz YV9hcmVhKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJ cmV0dXJuIHBncGFfZHNhX2FyZWE7Cit9CisKKy8qCisgKiBXYXMgdGhlIFBMQU5fQURWSUNFIG9w dGlvbiBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8gZmFsc2U/CisgKi8KK2Jvb2wKK3BnX3BsYW5f YWR2aWNlX3Nob3VsZF9leHBsYWluKEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJYm9vbAkgICAqcGxh bl9hZHZpY2UgPSBOVUxMOworCisJaWYgKGVzICE9IE5VTEwpCisJCXBsYW5fYWR2aWNlID0gR2V0 RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBlc19leHRlbnNpb25faWQpOworCXJldHVybiBwbGFu X2FkdmljZSAhPSBOVUxMICYmICpwbGFuX2FkdmljZTsKK30KKworLyoKKyAqIEhhbmRsZXIgZm9y IEVYUExBSU4gKFBMQU5fQURWSUNFKS4KKyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNl X2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRlICplcywgRGVmRWxlbSAqb3B0LAor CQkJCQkJCQkJICBQYXJzZVN0YXRlICpwc3RhdGUpCit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2U7 CisKKwlwbGFuX2FkdmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5z aW9uX2lkKTsKKworCWlmIChwbGFuX2FkdmljZSA9PSBOVUxMKQorCXsKKwkJcGxhbl9hZHZpY2Ug PSBwYWxsb2MwX29iamVjdChib29sKTsKKwkJU2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBl c19leHRlbnNpb25faWQsIHBsYW5fYWR2aWNlKTsKKwl9CisKKwkqcGxhbl9hZHZpY2UgPSBkZWZH ZXRCb29sZWFuKG9wdCk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgc3RyaW5nIHRoYXQgaXMgbGlr ZWx5IHRvIGNvbnNpc3Qgb2YgbXVsdGlwbGUgbGluZXMgaW4gRVhQTEFJTgorICogb3V0cHV0Lgor ICovCitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShF eHBsYWluU3RhdGUgKmVzLCBjaGFyICpxbGFiZWwsCisJCQkJCQkJCQkgIGNoYXIgKnZhbHVlKQor eworCWNoYXIJICAgKnM7CisKKwkvKiBGb3Igbm9uLXRleHQgZm9ybWF0cywgaXQncyBiZXN0IG5v dCB0byBhZGQgYW55IHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYgKGVzLT5mb3JtYXQgIT0gRVhQ TEFJTl9GT1JNQVRfVEVYVCkKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0eVRleHQocWxhYmVsLCB2YWx1 ZSwgZXMpOworCQlyZXR1cm47CisJfQorCisJLyogSW4gdGV4dCBmb3JtYXQsIGlmIHRoZXJlIGlz IG5vIGRhdGEsIGRpc3BsYXkgbm90aGluZy4gKi8KKwlpZiAoKnZhbHVlID09ICdcMCcpCisJCXJl dHVybjsKKworCS8qCisJICogSXQgbG9va3MgbmljZXN0IHRvIGluZGVudCBlYWNoIGxpbmUgb2Yg dGhlIGFkdmljZSBzZXBhcmF0ZWx5LCBiZWdpbm5pbmcKKwkgKiBvbiB0aGUgbGluZSBiZWxvdyB0 aGUgbGFiZWwuCisJICovCisJRXhwbGFpbkluZGVudFRleHQoZXMpOworCWFwcGVuZFN0cmluZ0lu Zm8oZXMtPnN0ciwgIiVzOlxuIiwgcWxhYmVsKTsKKwllcy0+aW5kZW50Kys7CisJd2hpbGUgKChz ID0gc3RyY2hyKHZhbHVlLCAnXG4nKSkgIT0gTlVMTCkKKwl7CisJCUV4cGxhaW5JbmRlbnRUZXh0 KGVzKTsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhlcy0+c3RyLCB2YWx1ZSwgKHMgLSB2YWx1 ZSkgKyAxKTsKKwkJdmFsdWUgPSBzICsgMTsKKwl9CisKKwkvKiBEb24ndCBpbnRlcnByZXQgYSB0 ZXJtaW5hbCBuZXdsaW5lIGFzIGEgcmVxdWVzdCBmb3IgYW4gZW1wdHkgbGluZS4gKi8KKwlpZiAo KnZhbHVlICE9ICdcMCcpCisJeworCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCWFwcGVuZFN0 cmluZ0luZm8oZXMtPnN0ciwgIiVzXG4iLCB2YWx1ZSk7CisJfQorCisJZXMtPmluZGVudC0tOwor fQorCisvKgorICogQWRkIGFkdmljZSBmZWVkYmFjayB0byB0aGUgRVhQTEFJTiBvdXRwdXQuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKEV4cGxhaW5T dGF0ZSAqZXMsIExpc3QgKmZlZWRiYWNrKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWlu aXRTdHJpbmdJbmZvKCZidWYpOworCWZvcmVhY2hfbm9kZShEZWZFbGVtLCBpdGVtLCBmZWVkYmFj aykKKwl7CisJCWludAkJCWZsYWdzID0gZGVmR2V0SW50MzIoaXRlbSk7CisKKwkJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAiJXMgLyogIiwgaXRlbS0+ZGVmbmFtZSk7CisJCWlmICgoZmxhZ3MgJiBQ R1BBX1RFX01BVENIX0ZVTEwpICE9IDApCisJCXsKKwkJCUFzc2VydCgoZmxhZ3MgJiBQR1BBX1RF X01BVENIX1BBUlRJQUwpICE9IDApOworCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAibWF0Y2hl ZCIpOworCQl9CisJCWVsc2UgaWYgKChmbGFncyAmIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCkgIT0g MCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgInBhcnRpYWxseSBtYXRjaGVkIik7CisJCWVs c2UKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIm5vdCBtYXRjaGVkIik7CisJCWlmICgoZmxh Z3MgJiBQR1BBX1RFX0lOQVBQTElDQUJMRSkgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIiwgaW5hcHBsaWNhYmxlIik7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0NPTkZMSUNUSU5H KSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBjb25mbGljdGluZyIpOworCQlp ZiAoKGZsYWdzICYgUEdQQV9URV9GQUlMRUQpICE9IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZi dWYsICIsIGZhaWxlZCIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIgKi9cbiIpOworCX0K KworCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUoZXMsICJTdXBwbGllZCBQ bGFuIEFkdmljZSIsCisJCQkJCQkJCQkJICBidWYuZGF0YSk7Cit9CisKKy8qCisgKiBBZGQgcmVs ZXZhbnQgZGV0YWlscywgaWYgYW55LCB0byB0aGUgRVhQTEFJTiBvdXRwdXQgZm9yIGEgc2luZ2xl IHBsYW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFu X2hvb2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJIEludG9DbGF1c2UgKmlu dG8sCisJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpx dWVyeVN0cmluZywKKwkJCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkJCSBR dWVyeUVudmlyb25tZW50ICpxdWVyeUVudikKK3sKKwlib29sCQlzaG91bGRfZXhwbGFpbjsKKwlE ZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJTGlzdAkgICAqcGdwYV9saXN0OworCisJaWYgKHByZXZf ZXhwbGFpbl9wZXJfcGxhbikKKwkJcHJldl9leHBsYWluX3Blcl9wbGFuKHBsYW5uZWRzdG10LCBp bnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywKKwkJCQkJCQkgIHF1ZXJ5RW52KTsKKworCS8q IFNob3VsZCBhbiBhZHZpY2Ugc3RyaW5nIGJlIHBhcnQgb2YgdGhlIEVYUExBSU4gb3V0cHV0PyAq LworCXNob3VsZF9leHBsYWluID0gcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oZXMpOwor CisJLyogRmluZCBhbnkgZGF0YSBwZ3BhX3BsYW5uZXJfc2h1dGRvd24gc3Rhc2hlZCBpbiB0aGUg UGxhbm5lZFN0bXQuICovCisJcGdwYV9pdGVtID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGxh bm5lZHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSwKKwkJCQkJCQkJCQkicGdfcGxhbl9hZHZpY2UiKTsK KwlwZ3BhX2xpc3QgPSBwZ3BhX2l0ZW0gPT0gTlVMTCA/IE5VTEwgOiAoTGlzdCAqKSBwZ3BhX2l0 ZW0tPmFyZzsKKworCS8qCisJICogQnkgZGVmYXVsdCwgaWYgdGhlcmUgaXMgYSByZWNvcmQgb2Yg YXR0ZW1wdGluZyB0byBhcHBseSBhZHZpY2UgZHVyaW5nCisJICogcXVlcnkgcGxhbm5pbmcsIHdl IGFsd2F5cyBvdXRwdXQgdGhhdCBpbmZvcm1hdGlvbiwgYnV0IHRoZSB1c2VyIGNhbiBzZXQKKwkg KiBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgPSBmYWxzZSB0 byBzdXBwcmVzcyB0aGF0CisJICogYmVoYXZpb3IuIElmIHRoZXkgZG8sIHdlJ2xsIG9ubHkgZGlz cGxheSBpdCB3aGVuIHRoZSBQTEFOX0FEVklDRSBvcHRpb24KKwkgKiB3YXMgc3BlY2lmaWVkIGFu ZCBub3Qgc2V0IHRvIGZhbHNlLgorCSAqCisJICogTkI6IElmIHdlJ3JlIGV4cGxhaW5pbmcgYSBx dWVyeSBwbGFubmVkIGJlZm9yZWhhbmQgLS0gaS5lLiBhIHByZXBhcmVkCisJICogc3RhdGVtZW50 IC0tIHRoZSBhcHBsaWNhdGlvbiBvZiBxdWVyeSBhZHZpY2UgbWF5IG5vdCBoYXZlIGJlZW4KKwkg KiByZWNvcmRlZCwgYW5kIHRoZXJlZm9yZSB0aGlzIHdvbid0IGJlIGFibGUgdG8gc2hvdyBhbnl0 aGluZy4KKwkgKi8KKwlpZiAocGdwYV9saXN0ICE9IE5VTEwgJiYgKHBnX3BsYW5fYWR2aWNlX2Fs d2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSB8fAorCQkJCQkJCSAgc2hvdWxkX2V4cGxhaW4p KQorCXsKKwkJRGVmRWxlbSAgICAqZmVlZGJhY2s7CisKKwkJZmVlZGJhY2sgPSBmaW5kX2RlZmVs ZW1fYnlfZGVmbmFtZShwZ3BhX2xpc3QsICJmZWVkYmFjayIpOworCQlpZiAoZmVlZGJhY2sgIT0g TlVMTCkKKwkJCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fZmVlZGJhY2soZXMsIChMaXN0ICopIGZl ZWRiYWNrLT5hcmcpOworCX0KKworCS8qCisJICogSWYgdGhlIFBMQU5fQURWSUNFIG9wdGlvbiB3 YXMgc3BlY2lmaWVkIC0tIGFuZCBub3Qgc2VudCB0byBGQUxTRSAtLQorCSAqIHNob3cgZ2VuZXJh dGVkIGFkdmljZS4KKwkgKi8KKwlpZiAoc2hvdWxkX2V4cGxhaW4pCisJeworCQlEZWZFbGVtICAg ICphZHZpY2Vfc3RyaW5nX2l0ZW07CisJCWNoYXIJICAgKmFkdmljZV9zdHJpbmcgPSBOVUxMOwor CisJCWFkdmljZV9zdHJpbmdfaXRlbSA9CisJCQlmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwZ3Bh X2xpc3QsICJhZHZpY2Vfc3RyaW5nIik7CisJCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0gIT0gTlVM TCkKKwkJeworCQkJLyogQWR2aWNlIGhhcyBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkOyB3ZSBjYW4g cmV1c2UgaXQuICovCisJCQlhZHZpY2Vfc3RyaW5nID0gc3RyVmFsKGFkdmljZV9zdHJpbmdfaXRl bS0+YXJnKTsKKwkJfQorCQlpZiAoYWR2aWNlX3N0cmluZyAhPSBOVUxMICYmIGFkdmljZV9zdHJp bmdbMF0gIT0gJ1wwJykKKwkJCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUo ZXMsICJHZW5lcmF0ZWQgUGxhbiBBZHZpY2UiLAorCQkJCQkJCQkJCQkJICBhZHZpY2Vfc3RyaW5n KTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayBob29rIGZvciBwZ19wbGFuX2FkdmljZS5hZHZpY2UK KyAqLworc3RhdGljIGJvb2wKK3BnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rKGNoYXIg KipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKK3sKKwlNZW1vcnlDb250 ZXh0IG9sZGNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCB0bXBjb250ZXh0OworCWNoYXIJICAgKmVy cm9yOworCisJaWYgKCpuZXd2YWwgPT0gTlVMTCkKKwkJcmV0dXJuIHRydWU7CisKKwl0bXBjb250 ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJ CQkJICAgInBnX3BsYW5fYWR2aWNlLmFkdmljZSIsCisJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZB VUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGNvbnRl eHQpOworCisJLyoKKwkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIHNhdmUgdGhlIHBhcnNlIHRyZWUg dGhhdCB3ZSBjb25zdHJ1Y3QgaGVyZSBmb3IKKwkgKiBldmVudHVhbCB1c2Ugd2hlbiBwbGFubmlu ZyB3aXRoIHRoaXMgYWR2aWNlLCBidXQgKmV4dHJhIGNhbiBvbmx5IHBvaW50CisJICogdG8gYSBz aW5nbGUgZ3VjX21hbGxvYydkIGNodW5rLCBhbmQgb3VyIHBhcnNlIHRyZWUgaW52b2x2ZXMgYW4K KwkgKiBhcmJpdHJhcnkgbnVtYmVyIG9mIG1lbW9yeSBhbGxvY2F0aW9ucy4KKwkgKi8KKwkodm9p ZCkgcGdwYV9wYXJzZSgqbmV3dmFsLCAmZXJyb3IpOworCisJaWYgKGVycm9yICE9IE5VTEwpCisJ eworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiAlcyIsIGVy cm9yKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj b250ZXh0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGNvbnRleHQpOworCisJcmV0dXJuIHRy dWU7Cit9CisKKy8qCisgKiBTZWFyY2ggYSBsaXN0IG9mIERlZkVsZW0gb2JqZWN0cyBmb3IgYSBn aXZlbiBkZWZuYW1lLgorICovCitzdGF0aWMgRGVmRWxlbSAqCitmaW5kX2RlZmVsZW1fYnlfZGVm bmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKQoreworCWZvcmVhY2hfbm9kZShEZWZF bGVtLCBpdGVtLCBkZWZsaXN0KQorCXsKKwkJaWYgKHN0cmNtcChpdGVtLT5kZWZuYW1lLCBkZWZu YW1lKSA9PSAwKQorCQkJcmV0dXJuIGl0ZW07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFhNmZkYzllN2IyCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jb250cm9sCkBAIC0wLDAg KzEsNSBAQAorIyBwZ19wbGFuX2FkdmljZSBleHRlbnNpb24KK2NvbW1lbnQgPSAnaGVscCB0aGUg cGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4nCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9k dWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdfcGxhbl9hZHZpY2UnCityZWxvY2F0YWJsZSA9IHRy dWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWMzNTNmMWE0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKQEAgLTAsMCArMSw0MCBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfcGxhbl9hZHZpY2UuaAorICoJICBtYWluIGhl YWRlciBmaWxlIGZvciBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZQorICoKKyAqIENvcHly aWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfUExBTl9BRFZJQ0VfSAorI2RlZmluZSBQ R19QTEFOX0FEVklDRV9ICisKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCisj aW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIK KyNpbmNsdWRlICJ1dGlscy9kc2EuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfc3Rh dGUKK3sKKwlMV0xvY2sJCWxvY2s7CisJaW50CQkJZHNhX3RyYW5jaGU7CisJZHNhX2hhbmRsZQlh cmVhOworCWRzYV9wb2ludGVyIHNoYXJlZF9jb2xsZWN0b3I7Cit9IHBncGFfc2hhcmVkX3N0YXRl OworCisvKiBHVUMgdmFyaWFibGVzICovCitleHRlcm4gY2hhciAqcGdfcGxhbl9hZHZpY2VfYWR2 aWNlOworZXh0ZXJuIGludAlwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0Owor ZXh0ZXJuIGludAlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVy biBib29sIHBnX3BsYW5fYWR2aWNlX3RyYWNlX21hc2s7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlw ZXMgKi8KK2V4dGVybiBNZW1vcnlDb250ZXh0IHBnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQp OworZXh0ZXJuIHBncGFfc2hhcmVkX3N0YXRlICpwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCk7 CitleHRlcm4gZHNhX2FyZWEgKnBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKHZvaWQpOworZXh0ZXJu IGJvb2wgcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oRXhwbGFpblN0YXRlICplcyk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4wZDYwMTBjNDdlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwpAQCAtMCwwICsxLDM5NCBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogcGdwYV9hc3QuYworICoJICBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgY29k ZSByZWxhdGVkIHRvIHBsYW4gYWR2aWNlIHBhcnNpbmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKwor I2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCisKK3N0YXRpYyBib29sIHBncGFfaWRlbnRpZmllcnNfY292ZXJf dGFyZ2V0KGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdw YV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCQkJICBib29sICpyaWRzX3VzZWQpOwor CisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVk IGFkdmljZSB0YWcuCisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9h ZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3RhZykKK3sKKwlzd2l0Y2ggKGFkdmljZV90YWcpCisJewor CQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU46CisJCQlyZXR1cm4gIkJJVE1BUF9IRUFQ X1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiAiRk9SRUlH Tl9KT0lOIjsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJ CWNhc2UgUEdQQV9UQUdfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRIRVJfTUVSR0UiOwor CQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCXJldHVybiAiSEFTSF9KT0lOIjsKKwkJY2Fz ZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46CisJCQlyZXR1cm4gIklOREVYX09OTFlfU0NBTiI7 CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJCXJldHVybiAiSU5ERVhfU0NBTiI7CisJ CWNhc2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJCXJldHVybiAiSk9JTl9PUkRFUiI7CisJCWNh c2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTUVSR0VfSk9J Tl9NQVRFUklBTElaRSI7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJl dHVybiAiTUVSR0VfSk9JTl9QTEFJTiI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQ R1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1P SVpFIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVT VEVEX0xPT1BfUExBSU4iOworCQljYXNlIFBHUEFfVEFHX05PX0dBVEhFUjoKKwkJCXJldHVybiAi Tk9fR0FUSEVSIjsKKwkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuICJQ QVJUSVRJT05XSVNFIjsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJ cmV0dXJuICJTRU1JSk9JTl9OT05fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9V TklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX1VOSVFVRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VR X1NDQU46CisJCQlyZXR1cm4gIlNFUV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoK KwkJCXJldHVybiAiVElEX1NDQU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJu IE5VTEw7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIGFkdmljZSB0YWcsIGZvcm1hdHRlZCBhcyBh IHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4KKyAqIGRvd25jYXNlZCBhcyBhcHByb3ByaWF0 ZSwgdG8gYSBwZ3BhX2FkdmljZV90YWdfdHlwZS4KKyAqCisgKiBJZiB3ZSBzdWNjZWVkLCBzZXQg KmZhaWwgPSBmYWxzZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQ7IGlmIHdlIGZhaWwsCisgKiBzZXQg KmZhaWwgPSB0cnVlIGFuZCByZXVybiBhbiBhcmJpdHJhcnkgdmFsdWUuCisgKi8KK3BncGFfYWR2 aWNlX3RhZ190eXBlCitwZ3BhX3BhcnNlX2FkdmljZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29s ICpmYWlsKQoreworCSpmYWlsID0gZmFsc2U7CisKKwlzd2l0Y2ggKHRhZ1swXSkKKwl7CisJCWNh c2UgJ2InOgorCQkJaWYgKHN0cmNtcCh0YWcsICJiaXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJ CQlyZXR1cm4gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdm JzoKKwkJCWlmIChzdHJjbXAodGFnLCAiZm9yZWlnbl9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4g UEdQQV9UQUdfRk9SRUlHTl9KT0lOOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKHN0 cmNtcCh0YWcsICJnYXRoZXIiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVI7CisJ CQlpZiAoc3RyY21wKHRhZywgImdhdGhlcl9tZXJnZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFf VEFHX0dBVEhFUl9NRVJHRTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCWlmIChzdHJjbXAo dGFnLCAiaGFzaF9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSEFTSF9KT0lOOwor CQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaWYgKHN0cmNtcCh0YWcsICJpbmRleF9zY2FuIikg PT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFn LCAiaW5kZXhfb25seV9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfT05M WV9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ2onOgorCQkJaWYgKHN0cmNtcCh0YWcsICJqb2lu X29yZGVyIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCWJyZWFr OworCQljYXNlICdtJzoKKwkJCWlmIChzdHJjbXAodGFnLCAibWVyZ2Vfam9pbl9tYXRlcmlhbGl6 ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJ CQlpZiAoc3RyY21wKHRhZywgIm1lcmdlX2pvaW5fcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQ R1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYg KHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJu IFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJu ZXN0ZWRfbG9vcF9tZW1vaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xP T1BfTUVNT0laRTsKKwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfcGxhaW4iKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjsKKwkJCWlmIChzdHJjbXAo dGFnLCAibm9fZ2F0aGVyIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTk9fR0FUSEVSOwor CQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJwYXJ0aXRpb253aXNl IikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfUEFSVElUSU9OV0lTRTsKKwkJCWJyZWFrOwor CQljYXNlICdzJzoKKwkJCWlmIChzdHJjbXAodGFnLCAic2VtaWpvaW5fbm9uX3VuaXF1ZSIpID09 IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU7CisJCQlpZiAoc3Ry Y21wKHRhZywgInNlbWlqb2luX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NF TUlKT0lOX1VOSVFVRTsKKwkJCWlmIChzdHJjbXAodGFnLCAic2VxX3NjYW4iKSA9PSAwKQorCQkJ CXJldHVybiBQR1BBX1RBR19TRVFfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlm IChzdHJjbXAodGFnLCAidGlkX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19USURf U0NBTjsKKwkJCWJyZWFrOworCX0KKworCS8qIGRpZG4ndCB3b3JrIG91dCAqLworCSpmYWlsID0g dHJ1ZTsKKworCS8qIHJldHVybiBhbiBhcmJpdHJhcnkgdmFsdWUgdG8gdW53aW5kIHRoZSBjYWxs IHN0YWNrICovCisJcmV0dXJuIFBHUEFfVEFHX1NFUV9TQ0FOOworfQorCisvKgorICogRm9ybWF0 IGEgcGdwYV9hZHZpY2VfdGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEg U3RyaW5nSW5mby4KKyAqLwordm9pZAorcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChTdHJpbmdJ bmZvIHN0ciwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJaWYgKHRhcmdldC0+dHR5 cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsK KwkJY2hhcgkgICAqZGVsaW1zOworCisJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VU X1VOT1JERVJFRF9MSVNUKQorCQkJZGVsaW1zID0gInt9IjsKKwkJZWxzZQorCQkJZGVsaW1zID0g IigpIjsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1swXSk7CisJCWZvcmVh Y2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVu KQorCQl7CisJCQlpZiAoZmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFy Z2V0KHN0ciwgY2hpbGRfdGFyZ2V0KTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIs IGRlbGltc1sxXSk7CisJfQorCWVsc2UKKwl7CisJCWNvbnN0IGNoYXIgKnJ0X2lkZW50aWZpZXI7 CisKKwkJcnRfaWRlbnRpZmllciA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnRhcmdldC0+cmlk KTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsIHJ0X2lkZW50aWZpZXIpOworCX0KK30K KworLyoKKyAqIEZvcm1hdCBhIHBncGFfaW5kZXhfdGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBl bmQgcmVzdWx0IHRvIGEgU3RyaW5nSW5mby4KKyAqLwordm9pZAorcGdwYV9mb3JtYXRfaW5kZXhf dGFyZ2V0KFN0cmluZ0luZm8gc3RyLCBwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCkKK3sKKwlp ZiAoaXRhcmdldC0+aXR5cGUgIT0gUEdQQV9JTkRFWF9OQU1FKQorCXsKKwkJYm9vbAkJZmlyc3Qg PSB0cnVlOworCisJCWlmIChpdGFyZ2V0LT5pdHlwZSA9PSBQR1BBX0lOREVYX0FORCkKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCAiJiYoIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoc3RyLCAifHwoIik7CisKKwkJZm9yZWFjaF9wdHIocGdwYV9pbmRleF90YXJn ZXQsIGNoaWxkX3RhcmdldCwgaXRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmIChmaXJzdCkK KwkJCQlmaXJzdCA9IGZhbHNlOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0 ciwgJyAnKTsKKwkJCXBncGFfZm9ybWF0X2luZGV4X3RhcmdldChzdHIsIGNoaWxkX3RhcmdldCk7 CisJCX0KKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAnKScpOworCX0KKwllbHNlCisJewor CQlpZiAoaXRhcmdldC0+aW5kbmFtZXNwYWNlICE9IE5VTEwpCisJCQlhcHBlbmRTdHJpbmdJbmZv KHN0ciwgIiVzLiIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZXNw YWNlKSk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCBxdW90ZV9pZGVudGlmaWVyKGl0 YXJnZXQtPmluZG5hbWUpKTsKKwl9Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgd2hldGhlciB0d28g cGdwYV9pbmRleF90YXJnZXQgb2JqZWN0cyBhcmUgZXhhY3RseSBpZGVudGljYWwuCisgKi8KK2Jv b2wKK3BncGFfaW5kZXhfdGFyZ2V0c19lcXVhbChwZ3BhX2luZGV4X3RhcmdldCAqaTEsIHBncGFf aW5kZXhfdGFyZ2V0ICppMikKK3sKKwlpZiAoaTEtPml0eXBlICE9IGkyLT5pdHlwZSkKKwkJcmV0 dXJuIGZhbHNlOworCisJaWYgKGkxLT5pdHlwZSA9PSBQR1BBX0lOREVYX05BTUUpCisJeworCQkv KiBpbmRuYW1lc3BhY2UgY2FuIGJlIE5VTEwsIGFuZCB0d28gTlVMTCB2YWx1ZXMgYXJlIGVxdWFs ICovCisJCWlmICgoaTEtPmluZG5hbWVzcGFjZSAhPSBOVUxMIHx8IGkyLT5pbmRuYW1lc3BhY2Ug IT0gTlVMTCkgJiYKKwkJCShpMS0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwgaTItPmluZG5hbWVz cGFjZSA9PSBOVUxMIHx8CisJCQkgc3RyY21wKGkxLT5pbmRuYW1lc3BhY2UsIGkyLT5pbmRuYW1l c3BhY2UpICE9IDApKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoc3RyY21wKGkxLT5pbmRuYW1l LCBpMi0+aW5kbmFtZSkgIT0gMCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJ aW50CQkJaTFfbGVuZ3RoID0gbGlzdF9sZW5ndGgoaTEtPmNoaWxkcmVuKTsKKworCQlpZiAoaTFf bGVuZ3RoICE9IGxpc3RfbGVuZ3RoKGkyLT5jaGlsZHJlbikpCisJCQlyZXR1cm4gZmFsc2U7CisJ CWZvciAoaW50IG4gPSAwOyBuIDwgaTFfbGVuZ3RoOyArK24pCisJCXsKKwkJCXBncGFfaW5kZXhf dGFyZ2V0ICpjMSA9IGxpc3RfbnRoKGkxLT5jaGlsZHJlbiwgbik7CisJCQlwZ3BhX2luZGV4X3Rh cmdldCAqYzIgPSBsaXN0X250aChpMi0+Y2hpbGRyZW4sIG4pOworCisJCQlpZiAoIXBncGFfaW5k ZXhfdGFyZ2V0c19lcXVhbChjMSwgYzIpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwor CXJldHVybiB0cnVlOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciBhbiBpZGVudGlmaWVyIG1h dGNoZXMgYW4gYW55IHBhcnQgb2YgYW4gYWR2aWNlIHRhcmdldC4KKyAqLworYm9vbAorcGdwYV9p ZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHBncGFfaWRlbnRpZmllciAqcmlkLCBwZ3BhX2Fkdmlj ZV90YXJnZXQgKnRhcmdldCkKK3sKKwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBjaGVjayBhbGwg ZGVzY2VuZGVudHMuICovCisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJ RklFUikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0 LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNf dGFyZ2V0KHJpZCwgY2hpbGRfdGFyZ2V0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJLyogU3RyYWlnaHRmb3J3YXJkIGNvbXBhcmlzb25zIG9mIGFsaWFz IG5hbWUgYW5kIG9jY2N1cnJlbmNlIG51bWJlci4gKi8KKwlpZiAoc3RyY21wKHJpZC0+YWxpYXNf bmFtZSwgdGFyZ2V0LT5yaWQuYWxpYXNfbmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCWlm IChyaWQtPm9jY3VycmVuY2UgIT0gdGFyZ2V0LT5yaWQub2NjdXJyZW5jZSkKKwkJcmV0dXJuIGZh bHNlOworCisJLyoKKwkgKiBJZiBhIHJlbGF0aW9uIGlkZW50aWZlciBtZW50aW9ucyBhIHBhcnRp dGlvbiBuYW1lLCBpdCBzaG91bGQgYWxzbworCSAqIHNwZWNpZnkgYSBwYXJ0aXRpb24gc2NoZW1h LiBCdXQgdGhlIHRhcmdldCBtYXkgbGVhdmUgdGhlIHNjaGVtYSBOVUxMIHRvCisJICogbWF0Y2gg YW55dGhpbmcuCisJICovCisJQXNzZXJ0KHJpZC0+cGFydG5zcCAhPSBOVUxMIHx8IHJpZC0+cGFy dHJlbCA9PSBOVUxMKTsKKwlpZiAocmlkLT5wYXJ0bnNwICE9IE5VTEwgJiYgdGFyZ2V0LT5yaWQu cGFydG5zcCAhPSBOVUxMICYmCisJCXN0cmNtcChyaWQtPnBhcnRuc3AsIHRhcmdldC0+cmlkLnBh cnRuc3ApICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogVGhlc2UgZmllbGRzIGNh biBiZSBOVUxMIG9uIGVpdGhlciBzaWRlLCBidXQgTlVMTCBvbmx5IG1hdGNoZXMgYW5vdGhlcgor CSAqIE5VTEwuCisJICovCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBh cnRyZWwsIHRhcmdldC0+cmlkLnBhcnRyZWwpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFzdHJp bmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBsYW5fbmFtZSwgdGFyZ2V0LT5yaWQucGxhbl9u YW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBNYXRj aCBpZGVudGlmaWVycyB0byBhZHZpY2UgdGFyZ2V0cyBhbmQgcmV0dXJuIGFuIGVudW0gdmFsdWUg aW5kaWNhdGluZworICogdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBzZXQgb2Yga2V5cyBh bmQgdGhlIHNldCBvZiB0YXJnZXRzLgorICoKKyAqIFNlZSB0aGUgY29tbWVudHMgZm9yIHBncGFf aXRtX3R5cGUuCisgKi8KK3BncGFfaXRtX3R5cGUKK3BncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFy Z2V0KGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV9hZHZp Y2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJYm9vbAkJYWxsX3JpZHNfdXNlZCA9IHRydWU7CisJYm9v bAkJYW55X3JpZHNfdXNlZCA9IGZhbHNlOworCWJvb2wJCWFsbF90YXJnZXRzX3VzZWQ7CisJYm9v bAkgICAqcmlkc191c2VkID0gcGFsbG9jMF9hcnJheShib29sLCBucmlkcyk7CisKKwlhbGxfdGFy Z2V0c191c2VkID0KKwkJcGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQobnJpZHMsIHJpZHMs IHRhcmdldCwgcmlkc191c2VkKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7ICsraSkK Kwl7CisJCWlmIChyaWRzX3VzZWRbaV0pCisJCQlhbnlfcmlkc191c2VkID0gdHJ1ZTsKKwkJZWxz ZQorCQkJYWxsX3JpZHNfdXNlZCA9IGZhbHNlOworCX0KKworCWlmIChhbGxfcmlkc191c2VkKQor CXsKKwkJaWYgKGFsbF90YXJnZXRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fRVFVQUw7CisJ CWVsc2UKKwkJCXJldHVybiBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQ7CisJfQorCWVsc2UKKwl7 CisJCWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX1RBUkdFVFNfQVJF X1NVQlNFVDsKKwkJZWxzZSBpZiAoYW55X3JpZHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9J TlRFUlNFQ1RJTkc7CisJCWVsc2UKKwkJCXJldHVybiBQR1BBX0lUTV9ESVNKT0lOVDsKKwl9Cit9 CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgZXZlcnkgdGFyZ2V0IG9yIHN1Yi10YXJnZXQgaXMg bWF0Y2hlZCBieSBhdCBsZWFzdCBvbmUKKyAqIGlkZW50aWZpZXIsIGFuZCBvdGhlcndpc2UgZmFs c2UuCisgKgorICogQWxzbyBzZXRzIHJpZHNfdXNlZFtpXSA9IHRydWUgZm9yIGVhY2ggaWRlbmlm aWVyIHRoYXQgbWF0Y2hlcyBhdCBsZWFzdCBvbmUKKyAqIHRhcmdldC4KKyAqLworc3RhdGljIGJv b2wKK3BncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KGludCBucmlkcywgcGdwYV9pZGVudGlm aWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsIGJvb2wgKnJp ZHNfdXNlZCkKK3sKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKworCWlmICh0YXJnZXQtPnR0eXBl ICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlyZXN1bHQgPSB0cnVlOworCisJCWZv cmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxk cmVuKQorCQl7CisJCQlpZiAoIXBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCBy aWRzLCBjaGlsZF90YXJnZXQsCisJCQkJCQkJCQkJCSAgIHJpZHNfdXNlZCkpCisJCQkJcmVzdWx0 ID0gZmFsc2U7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBucmlk czsgKytpKQorCQl7CisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KCZyaWRz W2ldLCB0YXJnZXQpKQorCQkJeworCQkJCXJpZHNfdXNlZFtpXSA9IHRydWU7CisJCQkJcmVzdWx0 ID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfYXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2 ZmU3MzBhNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X2FzdC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3Bh X2FzdC5oCisgKgkgIGFic3RyYWN0IHN5bnRheCB0cmVlcyBmb3IgcGxhbiBhZHZpY2UsIHBsdXMg cGFyc2VyL3NjYW5uZXIgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX2FzdC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5k ZWYgUEdQQV9BU1RfSAorI2RlZmluZSBQR1BBX0FTVF9ICisKKyNpbmNsdWRlICJwZ3BhX2lkZW50 aWZpZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKworLyoKKyAqIEFkdmljZSBp dGVtcyBnZW5lcmFsbHkgdGFrZSB0aGUgZm9ybSBTT01FX1RBRyhpdGVtIFsuLi5dKSwgd2hlcmUg YW4gaXRlbQorICogY2FuIHRha2UgdmFyaW91cyBmb3Jtcy4gVGhlIHNpbXBsZXN0IGNhc2UgaXMg YSByZWxhdGlvbiBpZGVudGlmaWVyLCBidXQKKyAqIHNvbWUgdGFncyBhbGxvdyBzdWJsaXN0cywg YW5kIEpPSU5fT1JERVIoKSBhbGxvd3MgYm90aCBvcmRlcmVkIGFuZCB1bm9yZGVyZWQKKyAqIHN1 Ymxpc3RzLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX1RBUkdFVF9JREVOVElGSUVSLAkJ LyogcmVsYXRpb24gaWRlbnRpZmllciAqLworCVBHUEFfVEFSR0VUX09SREVSRURfTElTVCwJLyog KGl0ZW0gLi4uKSAqLworCVBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUCS8qIHtpdGVtIC4uLn0g Ki8KK30gcGdwYV90YXJnZXRfdHlwZTsKKworLyoKKyAqIFdoZW4gYW4gYWR2aWNlIGl0ZW0gZGVz Y3JpYmVzIGEgYml0bWFwIGluZGV4IHNjYW4sIGl0IG1heSBuZWVkIHRvIGRlc2NyaWJlCisgKiB0 aGUgdXNlIG9mIG11bHRpcGxlIGluZGV4ZXMuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFf SU5ERVhfTkFNRSwJCQkvKiBpbmRleCBzY2hlbWEgKyBuYW1lICovCisJUEdQQV9JTkRFWF9BTkQs CQkJCS8qICYmKGl0ZW0gLi4uKSAqLworCVBHUEFfSU5ERVhfT1IJCQkJLyogfHwoaXRlbSAuLi4p ICovCit9IHBncGFfaW5kZXhfdHlwZTsKKworLyoKKyAqIEFuIGluZGV4IHNwZWNpZmljYXRpb24u IFdlIHVzZSB0aGlzIGZvciBJTkRFWF9TQ0FOLCBJTkRFWF9PTkxZX1NDQU4sCisgKiBhbmQgQklU TUFQX0hFQVBfU0NBTiBhZHZpY2UsIGJ1dCBpbiB0aGUgZm9ybWVyIHR3byBjYXNlcywgdGhlIHRh cmdldCBtdXN0CisgKiBiZSBvZiB0eXBlIFBHUEFfSU5ERVhfTkFNRS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9pbmRleF90YXJnZXQKK3sKKwlwZ3BhX2luZGV4X3R5cGUgaXR5cGU7CisKKwkv KiBJbmRleCBzY2hlbSBhbmQgbmFtZSwgd2hlbiBpdHlwZSA9PSBQR1BBX0lOREVYX05BTUUgKi8K KwljaGFyCSAgICppbmRuYW1lc3BhY2U7CisJY2hhcgkgICAqaW5kbmFtZTsKKworCS8qIExpc3Qg b2YgcGdwYV9pbmRleF90YXJnZXQgb2JqZWN0cywgd2hlbiBpdHlwZSAhPSBQR1BBX0lOREVYX05B TUUgKi8KKwlMaXN0CSAgICpjaGlsZHJlbjsKK30gcGdwYV9pbmRleF90YXJnZXQ7CisKKy8qCisg KiBBIHNpbmdsZSBpdGVtIGFib3V0IHdoaWNoIGFkdmljZSBpcyBiZWluZyBnaXZlbiwgd2hpY2gg Y291bGQgYmUgZWl0aGVyCisgKiBhIHJlbGF0aW9uIGlkZW50aWZpZXIgdGhhdCB3ZSB3YW50IHRv IGJyZWFrIG91dCBpbnRvIGl0cyBjb25zdGl0dWVudCBmaWVsZHMsCisgKiBvciBhIHN1Ymxpc3Qg b2Ygc29tZSBraW5kLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2FkdmljZV90YXJnZXQKK3sK KwlwZ3BhX3RhcmdldF90eXBlIHR0eXBlOworCisJLyoKKwkgKiBUaGlzIGZpZWxkIGlzIG1lYW5p bmdmdWwgd2hlbiB0dHlwZSBpcyBQR1BBX1RBUkdFVF9JREVOVElGSUVSLgorCSAqCisJICogQWxs IGlkZW50aWZpZXJzIG11c3QgaGF2ZSBhbiBhbGlhcyBuYW1lIGFuZCBhbiBvY2N1cnJlbmNlIG51 bWJlcjsgdGhlCisJICogcmVtYWluaW5nIGZpZWxkcyBjYW4gYmUgTlVMTC4gTm90ZSB0aGF0IGl0 J3MgcG9zc2libGUgdG8gc3BlY2lmeSBhCisJICogcGFydGl0aW9uIG5hbWUgd2l0aG91dCBhIHBh cnRpdGlvbiBzY2hlbWEsIGJ1dCBub3QgdGhlIHJldmVyc2UuCisJICovCisJcGdwYV9pZGVudGlm aWVyIHJpZDsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBzZXQgd2hlbiB0dHlwZSBpcyBQUEdB X1RBUkdFVF9JREVOVElGSUVSIGFuZCB0aGUgYWR2aWNlCisJICogdGFnIGlzIFBHUEFfVEFHX0lO REVYX1NDQU4sIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTiwgb3IKKwkgKiBQR1BBX1RBR19CSVRN QVBfSEVBUF9TQ0FOLgorCSAqLworCXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0OworCisJLyoK KwkgKiBXaGVuIHRoZSB0dHlwZSBpcyBQR1BBX1RBUkdFVF88YW55dGhpbmc+X0xJU1QsIHRoaXMg ZmllbGQgY29udGFpbnMgYQorCSAqIGxpc3Qgb2YgYWRkaXRpb25hbCBwZ3BhX2FkdmljZV90YXJn ZXQgb2JqZWN0cy4gT3RoZXJ3aXNlLCBpdCBpcyB1bnVzZWQuCisJICovCisJTGlzdAkgICAqY2hp bGRyZW47Cit9IHBncGFfYWR2aWNlX3RhcmdldDsKKworLyoKKyAqIFRoZXNlIGFyZSBhbGwgdGhl IGtpbmRzIG9mIGFkdmljZSB0aGF0IHdlIGtub3cgaG93IHRvIHBhcnNlLiBJZiBhIGtleXdvcmQK KyAqIGlzIGZvdW5kIGF0IHRoZSB0b3AgbGV2ZWwsIGl0IG11c3QgYmUgaW4gdGhpcyBsaXN0Lgor ICoKKyAqIElmIHlvdSBjaGFuZ2UgYW55dGhpbmcgaGVyZSwgYWxzbyB1cGRhdGUgcGdwYV9wYXJz ZV9hZHZpY2VfdGFnIGFuZAorICogcGdwYV9jc3RyaW5nX2FkdmljZV90YWcuCisgKi8KK3R5cGVk ZWYgZW51bSBwZ3BhX2FkdmljZV90YWdfdHlwZQoreworCVBHUEFfVEFHX0JJVE1BUF9IRUFQX1ND QU4sCisJUEdQQV9UQUdfRk9SRUlHTl9KT0lOLAorCVBHUEFfVEFHX0dBVEhFUiwKKwlQR1BBX1RB R19HQVRIRVJfTUVSR0UsCisJUEdQQV9UQUdfSEFTSF9KT0lOLAorCVBHUEFfVEFHX0lOREVYX09O TFlfU0NBTiwKKwlQR1BBX1RBR19JTkRFWF9TQ0FOLAorCVBHUEFfVEFHX0pPSU5fT1JERVIsCisJ UEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwlQR1BBX1RBR19NRVJHRV9KT0lOX1BM QUlOLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCVBHUEFfVEFHX05FU1RF RF9MT09QX01FTU9JWkUsCisJUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU4sCisJUEdQQV9UQUdf Tk9fR0FUSEVSLAorCVBHUEFfVEFHX1BBUlRJVElPTldJU0UsCisJUEdQQV9UQUdfU0VNSUpPSU5f Tk9OX1VOSVFVRSwKKwlQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUsCisJUEdQQV9UQUdfU0VRX1ND QU4sCisJUEdQQV9UQUdfVElEX1NDQU4KK30gcGdwYV9hZHZpY2VfdGFnX3R5cGU7CisKKy8qCisg KiBBbiBpdGVtIG9mIGFkdmljZSwgbWVhbmluZyBhIHRhZyBhbmQgdGhlIGxpc3Qgb2YgYWxsIHRh cmdldHMgdG8gd2hpY2gKKyAqIGl0IGlzIGJlaW5nIGFwcGxpZWQuCisgKgorICogInRhcmdldHMi IGlzIGEgbGlzdCBvZiBwZ3BhX2FkdmljZV90YXJnZXQgb2JqZWN0cy4KKyAqCisgKiBUaGUgTGlz dCByZXR1cm5lZCBmcm9tIHBncGFfeXlwYXJzZSBpcyBsaXN0IG9mIHBncGFfYWR2aWNlX2l0ZW0g b2JqZWN0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfaXRlbQoreworCXBncGFf YWR2aWNlX3RhZ190eXBlIHRhZzsKKwlMaXN0CSAgICp0YXJnZXRzOworfSBwZ3BhX2FkdmljZV9p dGVtOworCisvKgorICogUmVzdWx0IG9mIGNvbXBhcmluZyBhbiBhcnJheSBvZiBwZ3BhX3JlbGF0 aW9uX2lkZW50aWZpZXIgb2JqZWN0cyB0byBhCisgKiBwZ3BhX2FkdmljZV90YXJnZXQuCisgKgor ICogUEdQQV9JVE1fRVFVQUwgbWVhbnMgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQgYnkgc29tZSBp ZGVudGlmaWVyLCBhbmQKKyAqIGFsbCBpZGVudGlmaWVycyB3ZXJlIG1hdGNoZWQgdG8gYSB0YXJn ZXQuCisgKgorICogUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIG1lYW5zIHRoYXQgYWxsIGlkZW50 aWZpZXJzIG1hdGNoZWQgdG8gYSB0YXJnZXQsCisgKiBidXQgdGhlcmUgd2VyZSBsZWZ0b3ZlciB0 YXJnZXRzLiBHZW5lcmFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGlzCisgKiBsb29r aW5nIHRvIGFwcGx5IHRvIGFsbCBvZiB0aGUgcmVscyB3ZSBoYXZlIHBsdXMgc29tZSBhZGRpdGlv bmFsIG9uZXMgdGhhdAorICogd2UgZG9uJ3QgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9UQVJHRVRT X0FSRV9TVUJTRVQgbWVhbnMgdGhhdCBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBieSBhbgorICog aWRlbnRpZmllcnMsIGJ1dCB0aGVyZSB3ZXJlIGxlZnRvdmVyIGlkZW50aWZpZXJzLiBHZW5lcmFs bHksIHRoaXMgbWVhbnMKKyAqIHRoYXQgdGhlIGFkdmljZSBpcyBsb29raW5nIHRvIGFwcGx5IHRv IHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIHJlbHMgd2UgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9J TlRFUlNFQ1RJTkcgbWVhbnMgdGhhdCBzb21lIGlkZW50aWZlaXJzIGFuZCB0YXJnZXRzIHdlcmUg bWF0Y2hlZCwKKyAqIGJ1dCBuZWl0aGVyIGFsbCBpZGVudGlmaWVycyBub3IgYWxsIHRhcmdldHMg Y291bGQgYmUgbWF0Y2hlZCB0byBpdGVtcyBpbgorICogdGhlIG90aGVyIHNldC4KKyAqCisgKiBQ R1BBX0lUTV9ESVNKT0lOVCBtZWFucyB0aGF0IG5vIG1hdGNoZXMgYmV0d2VlbiBpZGVudGlmZWly cyBhbmQgdGFyZ2V0cyB3ZXJlCisgKiBmb3VuZC4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQ QV9JVE1fRVFVQUwsCisJUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULAorCVBHUEFfSVRNX1RBUkdF VFNfQVJFX1NVQlNFVCwKKwlQR1BBX0lUTV9JTlRFUlNFQ1RJTkcsCisJUEdQQV9JVE1fRElTSk9J TlQKK30gcGdwYV9pdG1fdHlwZTsKKworLyogZm9yIHBncGFfc2Nhbm5lci5sIGFuZCBwZ3BhX3Bh cnNlci55ICovCit1bmlvbiBZWVNUWVBFOworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJf VAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkICp5eXNjYW5f dDsKKyNlbmRpZgorCisvKiBpbiBwZ3BhX3NjYW5uZXIubCAqLworZXh0ZXJuIGludAlwZ3BhX3l5 bGV4KHVuaW9uIFlZU1RZUEUgKnl5bHZhbF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwKKwkJCQkJICAg Y2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIpOworZXh0ZXJuIHZv aWQgcGdwYV95eWVycm9yKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwK KwkJCQkJCSB5eXNjYW5fdCB5eXNjYW5uZXIsCisJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7 CitleHRlcm4gdm9pZCBwZ3BhX3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIsIHl5c2Nhbl90 ICp5eXNjYW5uZXJwKTsKK2V4dGVybiB2b2lkIHBncGFfc2Nhbm5lcl9maW5pc2goeXlzY2FuX3Qg eXlzY2FubmVyKTsKKworLyogaW4gcGdwYV9wYXJzZXIueSAqLworZXh0ZXJuIGludAlwZ3BhX3l5 cGFyc2UoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLAorCQkJCQkJIHl5 c2Nhbl90IHl5c2Nhbm5lcik7CitleHRlcm4gTGlzdCAqcGdwYV9wYXJzZShjb25zdCBjaGFyICph ZHZpY2Vfc3RyaW5nLCBjaGFyICoqZXJyb3JfcCk7CisKKy8qIGluIHBncGFfYXN0LmMgKi8KK2V4 dGVybiBjaGFyICpwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBh ZHZpY2VfdGFnKTsKK2V4dGVybiBib29sIHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChw Z3BhX2lkZW50aWZpZXIgKnJpZCwKKwkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldCk7CitleHRlcm4gcGdwYV9pdG1fdHlwZSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rhcmdl dChpbnQgbnJpZHMsCisJCQkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJ CQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gYm9vbCBwZ3Bh X2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLAorCQkJCQkJCQkJIHBn cGFfaW5kZXhfdGFyZ2V0ICppMik7CitleHRlcm4gcGdwYV9hZHZpY2VfdGFnX3R5cGUgcGdwYV9w YXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCk7CitleHRlcm4gdm9p ZCBwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLAorCQkJCQkJCQkJICBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9pbmRl eF90YXJnZXQoU3RyaW5nSW5mbyBzdHIsCisJCQkJCQkJCQkgcGdwYV9pbmRleF90YXJnZXQgKml0 YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9jb2xsZWN0b3IuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2E0NWI1MDMxZmUKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKQEAg LTAsMCArMSw2MzcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfY29sbGVjdG9y LmMKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50byBiYWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBtZW1v cnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xs ZWN0b3IuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxl Y3Rvci5oIgorCisjaW5jbHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAiZnVu Y2FwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3Qu aCIKKyNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgor I2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2Ns ZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVh cl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxl Y3RlZF9zaGFyZWRfYWR2aWNlKTsKKworI2RlZmluZSBBRFZJQ0VfQ0hVTktfU0laRQkJMTAyNAor I2RlZmluZSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRQk2NAorCisjZGVmaW5lCVBHX0dFVF9BRFZJ Q0VfQ09MVU1OUwk3CisKKy8qCisgKiBBZHZpY2UgZXh0cmFjdGVkIGZyb20gb25lIHF1ZXJ5IHBs YW4sIHRvZ2V0aGVyIHdpdGggdGhlIHF1ZXJ5IHN0cmluZworICogYW5kIHZhcmlvdXMgb3RoZXIg aWRlbnRpZnlpbmcgZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9jb2xsZWN0ZWRf YWR2aWNlCit7CisJT2lkCQkJdXNlcmlkOwkJCS8qIHVzZXIgT0lEICovCisJT2lkCQkJZGJpZDsJ CQkvKiBkYXRhYmFzZSBPSUQgKi8KKwl1aW50NjQJCXF1ZXJ5aWQ7CQkvKiBxdWVyeSBpZGVudGlm aWVyICovCisJVGltZXN0YW1wVHogdGltZXN0YW1wOwkJLyogcXVlcnkgdGltZXN0YW1wICovCisJ aW50CQkJYWR2aWNlX29mZnNldDsJLyogc3RhcnQgb2YgYWR2aWNlIGluIHRleHR1YWwgZGF0YSAq LworCWNoYXIJCXRleHR1YWxfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBwZ3BhX2Nv bGxlY3RlZF9hZHZpY2U7CisKKy8qCisgKiBBIGJ1bmNoIG9mIHBvaW50ZXJzIHRvIHBncGFfY29s bGVjdGVkX2FkdmljZSBvYmplY3RzLCBzdG9yZWQgaW4KKyAqIGJhY2tlbmQtbG9jYWwgbWVtb3J5 LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuaworeworCXBncGFf Y29sbGVjdGVkX2FkdmljZSAqZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBncGFfbG9j YWxfYWR2aWNlX2NodW5rOworCisvKgorICogSW5mb3JtYXRpb24gYWJvdXQgYWxsIG9mIHRoZSBw Z3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0cyB0aGF0IHdlJ3JlCisgKiBzdG9yaW5nIGluIGxv Y2FsIG1lbW9yeS4KKyAqCisgKiBXZSBhc3NpZ24gY29uc2VjdXRpdmUgSURzLCBzdGFydGluZyBm cm9tIDAsIHRvIGVhY2ggcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCisgKiBvYmplY3QgdGhhdCB3ZSBz dG9yZS4gVGhlIGFjdHVhbCBzdG9yYWdlIGlzIGFuIGFycmF5IG9mIGNodW5rcywgd2hpY2gKKyAq IGhlbHBzIGtlZXAgbWVtY3B5KCkgb3ZlcmhlYWQgbG93IHdoZW4gd2Ugc3RhcnQgZGlzY2FyZGlu ZyBvbGRlciBkYXRhLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2FkdmljZQorewor CXVpbnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7 CisJaW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJcGdwYV9sb2NhbF9hZHZpY2Vf Y2h1bmsgKipjaHVua3M7Cit9IHBncGFfbG9jYWxfYWR2aWNlOworCisvKgorICogSnVzdCBsaWtl IHBncGFfbG9jYWxfYWR2aWNlX2NodW5rLCBidXQgc3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQg YXJlYSwKKyAqIHNvIHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBv aW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsKK3sK Kwlkc2FfcG9pbnRlciBlbnRyaWVzW0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdwYV9zaGFyZWRf YWR2aWNlX2NodW5rOworCisvKgorICogSnVzdCBsaWtlIHBncGFfbG9jYWxfYWR2aWNlLCBidXQg c3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQgYXJlYSwgc28KKyAqIHdlIG11c3QgdXNlIGRzYV9w b2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBw Z3BhX3NoYXJlZF9hZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3Rf aWQ7CisJdWludDY0CQliYXNlX2lkOworCWludAkJCWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXpl OworCWRzYV9wb2ludGVyIGNodW5rczsKK30gcGdwYV9zaGFyZWRfYWR2aWNlOworCisvKiBQb2lu dGVycyB0byBsb2NhbCBhbmQgc2hhcmVkIGNvbGxlY3RvcnMgKi8KK3N0YXRpYyBwZ3BhX2xvY2Fs X2FkdmljZSAqbG9jYWxfY29sbGVjdG9yID0gTlVMTDsKK3N0YXRpYyBwZ3BhX3NoYXJlZF9hZHZp Y2UgKnNoYXJlZF9jb2xsZWN0b3IgPSBOVUxMOworCisvKiBTdGF0aWMgZnVuY3Rpb25zICovCitz dGF0aWMgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZShP aWQgdXNlcmlkLAorCQkJCQkJCQkJCQkJCQkgT2lkIGRiaWQsCisJCQkJCQkJCQkJCQkJCSB1aW50 NjQgcXVlcnlJZCwKKwkJCQkJCQkJCQkJCQkJIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJCQkJ CQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJCQkJIGNvbnN0 IGNoYXIgKmFkdmljZV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJCSBkc2FfYXJlYSAqYXJlYSwKKwkJ CQkJCQkJCQkJCQkJIGRzYV9wb2ludGVyICpyZXN1bHQpOworc3RhdGljIHZvaWQgcGdwYV9zdG9y ZV9sb2NhbF9hZHZpY2UocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSk7CitzdGF0aWMgdm9pZCBw Z3BhX3RyaW1fbG9jYWxfYWR2aWNlKGludCBsaW1pdCk7CitzdGF0aWMgdm9pZCBwZ3BhX3N0b3Jl X3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcik7CitzdGF0aWMgdm9pZCBwZ3Bh X3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwgaW50IGxpbWl0KTsKKworLyogSGVs cGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHBncGFfY29sbGVj dGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK3F1ZXJ5X3N0cmluZyhw Z3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVhbF9kYXRhOwor fQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgYWR2aWNlIHN0cmluZyBmcm9t IHBncGFfY29sbGVjdGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2Fk dmljZV9zdHJpbmcocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwlyZXR1cm4gY2EtPnRl eHR1YWxfZGF0YSArIGNhLT5hZHZpY2Vfb2Zmc2V0OworfQorCisvKgorICogU3RvcmUgY29sbGVj dGVkIHF1ZXJ5IGFkdmljZSBpbnRvIHRoZSBsb2NhbCBvciBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rv ciwKKyAqIGFzIGFwcHJvcHJpYXRlLgorICovCit2b2lkCitwZ3BhX2NvbGxlY3RfYWR2aWNlKHVp bnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCWNvbnN0IGNoYXIg KmFkdmljZV9zdHJpbmcpCit7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7CisJT2lkCQkJ ZGJpZCA9IE15RGF0YWJhc2VJZDsKKwlUaW1lc3RhbXBUeiBub3cgPSBHZXRDdXJyZW50VGltZXN0 YW1wKCk7CisKKwlpZiAocGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDAp CisJeworCQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQ7CisKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2Fk dmljZV9nZXRfbWN4dCgpKTsKKwkJY2EgPSBwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZSh1c2Vy aWQsIGRiaWQsIHF1ZXJ5SWQsIG5vdywKKwkJCQkJCQkJCQlxdWVyeV9zdHJpbmcsIGFkdmljZV9z dHJpbmcsCisJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisJCXBncGFfc3RvcmVfbG9jYWxfYWR2aWNl KGNhKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWlmIChw Z19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlkc2FfYXJl YSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwkJZHNhX3BvaW50ZXIgY2Ff cG9pbnRlciA9IEludmFsaWREc2FQb2ludGVyOyAvKiBwbGFjYXRlIGNvbXBpbGVyICovCisKKwkJ cGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJ CQkJCQkJCSAgIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywgYXJlYSwKKwkJCQkJCQkJICAg JmNhX3BvaW50ZXIpOworCQlwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7CisJ fQorfQorCisvKgorICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdwYV9jb2xsZWN0ZWRfYWR2 aWNlIG9iamVjdC4KKyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxsb2Nh dGUgdGhlIG5ldyBvYmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBpcyBy ZXR1cm5lZCB2aWEgKnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcgb2Jq ZWN0IGlzIGFsbG9jYXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFuZCBy ZXN1bHQgaXMgbm90IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdwYV9jb2xs ZWN0ZWRfYWR2aWNlICoKK3BncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1c2VyaWQsIE9p ZCBkYmlkLCB1aW50NjQgcXVlcnlJZCwKKwkJCQkJCSAgIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwK KwkJCQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIGNvbnN0IGNoYXIg KmFkdmljZV9zdHJpbmcsCisJCQkJCQkgICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJl c3VsdCkKK3sKKwlzaXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3Ry aW5nKSArIDE7CisJc2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vf c3RyaW5nKSArIDE7CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdwYV9jb2xsZWN0ZWRfYWR2 aWNlICpjYTsKKworCXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBncGFfY29sbGVjdGVkX2Fkdmlj ZSwgdGV4dHVhbF9kYXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5n X2xlbmd0aDsKKworCWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0 aCk7CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5n dGgpOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+ dXNlcmlkID0gR2V0VXNlcklkKCk7CisJY2EtPmRiaWQgPSBNeURhdGFiYXNlSWQ7CisJY2EtPnF1 ZXJ5aWQgPSBxdWVyeUlkOworCWNhLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJY2EtPmFkdmlj ZV9vZmZzZXQgPSBxdWVyeV9zdHJpbmdfbGVuZ3RoOworCisJbWVtY3B5KGNhLT50ZXh0dWFsX2Rh dGEsIHF1ZXJ5X3N0cmluZywgcXVlcnlfc3RyaW5nX2xlbmd0aCk7CisJbWVtY3B5KCZjYS0+dGV4 dHVhbF9kYXRhW2NhLT5hZHZpY2Vfb2Zmc2V0XSwKKwkJICAgYWR2aWNlX3N0cmluZywgYWR2aWNl X3N0cmluZ19sZW5ndGgpOworCisJcmV0dXJuIGNhOworfQorCisvKgorICogQWRkIGEgcGdfY29s bGVjdGVkX2FkdmljZSBvYmplY3QgdG8gb3VyIGJhY2tlbmQtbG9jYWwgYWR2aWNlIGNvbGxlY3Rp b24uCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzd2l0Y2hpbmcgdG8gdGhlIGFw cHJvcHJpYXRlIG1lbW9yeSBjb250ZXh0OworICogdGhlIHByb3ZpZGVkIG9iamVjdCBzaG91bGQg aGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGF0IHNhbWUgY29udGV4dC4KKyAqLworc3RhdGljIHZv aWQKK3BncGFfc3RvcmVfbG9jYWxfYWR2aWNlKHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2EpCit7 CisJdWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdwYV9s b2NhbF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCisJLyogSWYgdGhlIGxvY2FsIGFk dmljZSBjb2xsZWN0b3IgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBkbyB0aGF0IG5vdy4gKi8KKwlp ZiAobGEgPT0gTlVMTCkKKwl7CisJCWxhID0gcGFsbG9jMChzaXplb2YocGdwYV9sb2NhbF9hZHZp Y2UpKTsKKwkJbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FS UkFZX1NJWkU7CisJCWxhLT5jaHVua3MgPSBwYWxsb2MwX2FycmF5KHBncGFfbG9jYWxfYWR2aWNl X2NodW5rICosCisJCQkJCQkJCSAgIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7CisJ CWxvY2FsX2NvbGxlY3RvciA9IGxhOworCX0KKworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNl dCBhdCB3aGljaCB0byBzdG9yZSB0aGlzIGFkdmljZS4gKi8KKwljaHVua19udW1iZXIgPSAobGEt Pm5leHRfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZz ZXQgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKwor CS8qIEV4dGVuZCBjaHVuayBhcnJheSwgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19udW1iZXIg Pj0gbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7 CisKKwkJbmV3X3NpemUgPSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgKyBBRFZJQ0Vf Q0hVTktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5rcyA9IHJlcGFsbG9jMF9hcnJheShsYS0+Y2h1 bmtzLAorCQkJCQkJCQkJIHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICosCisJCQkJCQkJCQkgbGEt PmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplLAorCQkJCQkJCQkJIG5ld19zaXplKTsKKwkJbGEt PmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCisJLyogQWxsb2Nh dGUgbmV3IGNodW5rLCBpZiBuZWVkZWQuICovCisJaWYgKGxhLT5jaHVua3NbY2h1bmtfbnVtYmVy XSA9PSBOVUxMKQorCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0gPSBwYWxsb2MwX29iamVjdChw Z3BhX2xvY2FsX2FkdmljZV9jaHVuayk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4 dC1pZCBjb3VudGVyLiAqLworCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSA9PSBOVUxMKTsKKwlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVu dHJpZXNbY2h1bmtfb2Zmc2V0XSA9IGNhOworCSsrbGEtPm5leHRfaWQ7CisKKwkvKiBJZiB3ZSd2 ZSBleGNlZWRlZCB0aGUgc3RvcmFnZSBsaW1pdCwgZGlzY2FyZCBvbGQgZGF0YS4gKi8KKwlwZ3Bh X3RyaW1fbG9jYWxfYWR2aWNlKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQp OworfQorCisvKgorICogQWRkIGEgcGdfY29sbGVjdGVkX2FkdmljZSBvYmplY3QgdG8gdGhlIHNo YXJlZCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiAnY2FfcG9pbnRlcicgc2hvdWxkIGhhdmUg YmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGUgcGdfcGxhbl9hZHZpY2UgRFNBIGFyZWEKKyAqIGFuZCBz aG91bGQgcG9pbnQgdG8gYW4gb2JqZWN0IG9mIHR5cGUgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlLgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9zdG9yZV9zaGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNh X3BvaW50ZXIpCit7CisJdWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZz ZXQ7CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7 CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7CisJcGdwYV9z aGFyZWRfYWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJZHNhX3BvaW50ZXIgKmNodW5r X2FycmF5OworCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkvKiBMb2NrIHRo ZSBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xV U0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVkIGFk dmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3cuCisJICogSWYgd2UncmUgdGhlIGZpcnN0 IG9uZXMgdG8gYXR0YWNoLCB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdC4KKwkgKi8K KwlpZiAoc2EgPT0gTlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJ bnZhbGlkRHNhUG9pbnRlcikKKwkJCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0KKwkJCQlkc2Ff YWxsb2NhdGUwKGFyZWEsIHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2UpKTsKKwkJc2hhcmVkX2Nv bGxlY3RvciA9IHNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVj dG9yKTsKKwl9CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIGJhY2tl bmQgbWF5IGhhdmUgc3VjY2VlZGVkIGluIGNyZWF0aW5nCisJICogdGhlIG1haW4gY29sbGVjdG9y IG9iamVjdCBidXQgZmFpbGVkIHRvIGFsbG9jYXRlIGFuIGluaXRpYWwgY2h1bmsKKwkgKiBhcnJh eSwgc28gd2UgbXVzdCBiZSBwcmVwYXJlZCB0byBhbGxvY2F0ZSB0aGUgY2h1bmsgYXJyYXkgaGVy ZSB3aGV0aGVyCisJICogb3Igbm90IHdlIGNyZWF0ZWQgdGhlIGNvbGxlY3RvciBvYmplY3QuCisJ ICovCisJaWYgKHNoYXJlZF9jb2xsZWN0b3ItPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID09 IDApCisJeworCQlzYS0+Y2h1bmtzID0KKwkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwKKwkJCQkJCSAg c2l6ZW9mKGRzYV9wb2ludGVyKSAqIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFKTsKKwkJc2EtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJfQor CisJLyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2 aWNlLiAqLworCWNodW5rX251bWJlciA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFE VklDRV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNl X2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBj aHVuayBhcnJheSBhbmQsIGlmIG5lZWRlZCwgZXh0ZW5kIGl0LiAqLworCWlmIChjaHVua19udW1i ZXIgPj0gc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3Np emU7CisJCWRzYV9wb2ludGVyIG5ld19jaHVua3M7CisKKwkJLyoKKwkJICogRFNBIGNhbid0IGVu bGFyZ2UgYW4gZXhpc3RpbmcgYWxsb2NhdGlvbiwgc28gd2UgbXVzdCBtYWtlIGEgbmV3CisJCSAq IGFsbG9jYXRpb24gYW5kIGNvcHkgZGF0YSBvdmVyLgorCQkgKi8KKwkJbmV3X3NpemUgPSBzYS0+ Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJ bmV3X2NodW5rcyA9IGRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIG5l d19zaXplKTsKKwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgbmV3X2NodW5r cyk7CisJCW1lbWNweShjaHVua19hcnJheSwgZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVu a3MpLAorCQkJICAgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIHNhLT5jaHVua19hcnJheV9hbGxvY2F0 ZWRfc2l6ZSk7CisJCWRzYV9mcmVlKGFyZWEsIHNhLT5jaHVua3MpOworCQlzYS0+Y2h1bmtzID0g bmV3X2NodW5rczsKKwkJc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7 CisJfQorCWVsc2UKKwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNo dW5rcyk7CisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgY2h1bmssIGFsbG9j YXRpbmcgaXQgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19hcnJheVtjaHVua19udW1iZXJdID09 IEludmFsaWREc2FQb2ludGVyKQorCQljaHVua19hcnJheVtjaHVua19udW1iZXJdID0KKwkJCWRz YV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBncGFfc2hhcmVkX2FkdmljZV9jaHVuaykpOworCWNo dW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOwor CisJLyogU2F2ZSBwb2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQo Y2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9PSBJbnZhbGlkRHNhUG9pbnRlcik7CisJY2h1 bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9IGNhX3BvaW50ZXI7CisJKytzYS0+bmV4dF9pZDsK KworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBk YXRhLiAqLworCXBncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIHBnX3BsYW5fYWR2aWNlX3No YXJlZF9jb2xsZWN0aW9uX2xpbWl0KTsKKworCS8qIFJlbGVhc2UgbG9jayBvbiBzaGFyZWQgc3Rh dGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworfQorCisvKgorICogRGlzY2Fy ZCBjb2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeSBpbiBleGNl c3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ry aW1fbG9jYWxfYWR2aWNlKGludCBsaW1pdCkKK3sKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBs b2NhbF9jb2xsZWN0b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50OworCXVpbnQ2NAkJdHJpbV9j b3VudDsKKwl1aW50NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2NAkJdHJpbV9jaHVua19j b3VudDsKKwl1aW50NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKworCS8qIElmIHdlIGhhdmVu J3QgeWV0IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3Vy cmVudF9jb3VudCA9IGxhLT5uZXh0X2lkIC0gbGEtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9j b3VudCA8PSBsaW1pdCkKKwkJcmV0dXJuOworCisJLyogRnJlZSBlbm91Z2ggZW50cmllcyB0byBn ZXQgdXMgYmFjayBkb3duIHRvIHRoZSBsaW1pdC4gKi8KKwl0cmltX2NvdW50ID0gY3VycmVudF9j b3VudCAtIGxpbWl0OworCXdoaWxlICh0cmltX2NvdW50ID4gMCkKKwl7CisJCXVpbnQ2NAkJY2h1 bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKworCQljaHVua19udW1iZXIgPSAo bGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVu a19vZmZzZXQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19T SVpFOworCisJCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtf b2Zmc2V0XSAhPSBOVUxMKTsKKwkJcGZyZWUobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRy aWVzW2NodW5rX29mZnNldF0pOworCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSA9IE5VTEw7CisJCSsrbGEtPm9sZGVzdF9pZDsKKwkJLS10cmltX2NvdW50 OworCX0KKworCS8qIEZyZWUgYW55IGNodW5rcyB0aGF0IGFyZSBub3cgZW50aXJlbHkgdW51c2Vk LiAqLworCXRyaW1fY2h1bmtfY291bnQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAv IEFEVklDRV9DSFVOS19TSVpFOworCWZvciAodWludDY0IG4gPSAwOyBuIDwgdHJpbV9jaHVua19j b3VudDsgKytuKQorCQlwZnJlZShsYS0+Y2h1bmtzW25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmlu ZyBjaHVuayBwb2ludGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJ dG90YWxfY2h1bmtfY291bnQgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCArCisJCQkJCQkg QURWSUNFX0NIVU5LX1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19j aHVua19jb3VudCA9IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAo cmVtYWluaW5nX2NodW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmbGEtPmNodW5rc1swXSwgJmxh LT5jaHVua3NbdHJpbV9jaHVua19jb3VudF0sCisJCQkJc2l6ZW9mKHBncGFfbG9jYWxfYWR2aWNl X2NodW5rICopICogcmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERvbid0IGxlYXZlIHN0 YWxlIHBvaW50ZXJzIGFyb3VuZC4gKi8KKwltZW1zZXQoJmxhLT5jaHVua3NbcmVtYWluaW5nX2No dW5rX2NvdW50XSwgMCwKKwkJICAgc2l6ZW9mKHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICopCisJ CSAgICogKHRvdGFsX2NodW5rX2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50KSk7CisKKwkv KiBBZGp1c3QgYmFzZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlsYS0+YmFzZV9pZCArPSB0 cmltX2NodW5rX2NvdW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBEaXNjYXJk IGNvbGxlY3RlZCBhZHZpY2Ugc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRo ZQorICogc3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cmltX3NoYXJl ZF9hZHZpY2UoZHNhX2FyZWEgKmFyZWEsIGludCBsaW1pdCkKK3sKKwlwZ3BhX3NoYXJlZF9hZHZp Y2UgKnNhID0gc2hhcmVkX2NvbGxlY3RvcjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWlu dDY0CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0 cmltX2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCWRzYV9w b2ludGVyICpjaHVua19hcnJheTsKKworCS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhl IGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVudF9jb3VudCA9IHNhLT5u ZXh0X2lkIC0gc2EtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3VudCA8PSBsaW1pdCkKKwkJ cmV0dXJuOworCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICovCisJY2h1 bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkvKiBGcmVl IGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLworCXRy aW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQgPiAw KQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0Owor CQlwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCisJCWNodW5rX251bWJlciA9IChz YS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5r X29mZnNldCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJ WkU7CisKKwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtf bnVtYmVyXSk7CisJCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IEludmFs aWREc2FQb2ludGVyKTsKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zm c2V0XSk7CisJCWNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBJbnZhbGlkRHNhUG9pbnRl cjsKKwkJKytzYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBh bnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19j b3VudCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJZm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCWRzYV9m cmVlKGFyZWEsIGNodW5rX2FycmF5W25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVuayBw b2ludGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxfY2h1 bmtfY291bnQgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNFX0NI VU5LX1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19jb3Vu dCA9IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWluaW5n X2NodW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmY2h1bmtfYXJyYXlbMF0sICZjaHVua19hcnJh eVt0cmltX2NodW5rX2NvdW50XSwKKwkJCQlzaXplb2YoZHNhX3BvaW50ZXIpICogcmVtYWluaW5n X2NodW5rX2NvdW50KTsKKworCS8qIERvbid0IGxlYXZlIHN0YWxlIHBvaW50ZXJzIGFyb3VuZC4g Ki8KKwltZW1zZXQoJmNodW5rX2FycmF5W3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAg IHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtf Y291bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZh bHVlIGFjY29yZGluZ2x5LiAqLworCXNhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBB RFZJQ0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBmdW5jdGlvbiB0byBk aXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkKKyAqLworRGF0 dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlpZiAobG9jYWxfY29sbGVjdG9yICE9IE5VTEwpCisJCXBncGFfdHJpbV9sb2NhbF9hZHZpY2Uo MCk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0 aW9uIHRvIGRpc2NhcmQgYWR2aWNlIGNvbGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQor ICovCitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRh Y2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwor CUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJLyoKKwkgKiBJ ZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwg Zml4IHRoYXQgbm93OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZlbiBleGlz dCwgd2UgY2FuIHJldHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4KKwkgKi8K KwlpZiAoc2hhcmVkX2NvbGxlY3RvciA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRf Y29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZz dGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJlZF9jb2xsZWN0 b3IgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0K KworCS8qIERvIHRoZSByZWFsIHdvcmsgKi8KKwlwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShhcmVh LCAwKTsKKworCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKworCVBHX1JFVFVSTl9WT0lE KCk7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVj dGVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVk X2xvY2FsX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5m byA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ3BhX2xvY2FsX2Fk dmljZSAqbGEgPSBsb2NhbF9jb2xsZWN0b3I7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7 CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwlpZiAobGEgPT0gTlVMTCkK KwkJcmV0dXJuIChEYXR1bSkgMDsKKworCS8qIExvb3Agb3ZlciBhbGwgZW50cmllcy4gKi8KKwlm b3IgKHVpbnQ2NCBpZCA9IGxhLT5vbGRlc3RfaWQ7IGlkIDwgbGEtPm5leHRfaWQ7ICsraWQpCisJ eworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBn cGFfY29sbGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FEVklDRV9D T0xVTU5TXTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHswfTsKKwor CQljaHVua19udW1iZXIgPSAoaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsK KwkJY2h1bmtfb2Zmc2V0ID0gKGlkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7 CisKKwkJY2EgPSBsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0 XTsKKworCQlpZiAoIW1lbWJlcl9jYW5fc2V0X3JvbGUodXNlcmlkLCBjYS0+dXNlcmlkKSkKKwkJ CWNvbnRpbnVlOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJdmFsdWVz WzFdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0gT2JqZWN0 SWRHZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVtKGNhLT5x dWVyeWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0oY2EtPnRpbWVzdGFtcCk7 CisJCXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7CisJ CXZhbHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOworCisJ CXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2Ms CisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCXJldHVybiAoRGF0dW0pIDA7Cit9CisK Ky8qCisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGluIHNo YXJlZCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZShQ R19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJ bmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBw Z19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZp Y2VfZHNhX2FyZWEoKTsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdwYV9zaGFyZWRf YWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZj aW5mbywgMCk7CisKKwkvKiBMb2NrIHRoZSBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWly ZSgmc3RhdGUtPmxvY2ssIExXX1NIQVJFRCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRh Y2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJ ICogYnV0IGlmIHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJu IHdpdGhvdXQgZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzYSA9PSBOVUxM KQorCXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVy KQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVt KSAwOworCQl9CisJCXNoYXJlZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVh LCBzdGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogR2V0IGEgcG9pbnRlciB0byB0 aGUgY2h1bmsgYXJyYXkuICovCisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwg c2EtPmNodW5rcyk7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJZm9yICh1aW50 NjQgaWQgPSBzYS0+b2xkZXN0X2lkOyBpZCA8IHNhLT5uZXh0X2lkOyArK2lkKQorCXsKKwkJdWlu dDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ3BhX3NoYXJl ZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlE YXR1bQkJdmFsdWVzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dF VF9BRFZJQ0VfQ09MVU1OU10gPSB7MH07CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gc2EtPmJh c2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIHNhLT5i YXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNz KGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCQljYSA9IGRzYV9nZXRfYWRkcmVz cyhhcmVhLCBjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKworCQl2YWx1ZXNbMF0gPSBV SW50NjRHZXREYXR1bShpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVz ZXJpZCk7CisJCXZhbHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1 ZXNbM10gPSBVSW50NjRHZXREYXR1bShjYS0+cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVz dGFtcEdldERhdHVtKGNhLT50aW1lc3RhbXApOworCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4 dERhdHVtKHF1ZXJ5X3N0cmluZyhjYSkpOworCQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERh dHVtKGFkdmljZV9zdHJpbmcoY2EpKTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8t PnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9 CisKKwkvKiBSZWxlYXNlIGxvY2sgb24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja1JlbGVhc2Uo JnN0YXRlLT5sb2NrKTsKKworCXJldHVybiAoRGF0dW0pIDA7Cit9CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmggYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfY29sbGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmI2ZTc0NmEwNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsMTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfY29sbGVjdG9yLmgKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50byBiYWNrZW5k LWxvY2FsIG9yIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisjaWZuZGVmIFBHUEFfQ09MTEVDVE9SX0gKKyNkZWZpbmUgUEdQQV9DT0xMRUNUT1JfSAorCitl eHRlcm4gdm9pZCBwZ3BhX2NvbGxlY3RfYWR2aWNlKHVpbnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcpOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVy LmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MWI0YjBjNjBhNgotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKQEAgLTAsMCArMSw0 NzYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfaWRlbnRpZmllci5jCisgKgkg IGNyZWF0ZSBhcHByb3ByaWF0ZSBpZGVudGlmaWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcwor ICoKKyAqIFRoZSBnb2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIGJlIGFibGUgdG8gcHJvZHVjZSBp ZGVudGlmaWVycyBmb3IgcmFuZ2UKKyAqIHRhYmxlIGVudHJpZXMgdGhhdCBhcmUgdW5pcXVlLCB1 bmRlcnN0YW5kYWJsZSB0byBodW1hbiBiZWluZ3MsIGFuZAorICogYWJsZSB0byBiZSByZWNvbnN0 cnVjdGVkIGR1cmluZyBmdXR1cmUgcGxhbm5pbmcgY3ljbGVzLiBBcyBhbgorICogZXhjZXB0aW9u LCB3ZSBkbyBub3QgY2FyZSBhYm91dCwgb3Igd2FudCB0byBwcm9kdWNlLCBpZGVudGlmaWVycyBm b3IKKyAqIFJURV9KT0lOIGVudHJpZXMuIFRoaXMgaXMgYmVjYXVzZSAoMSkgd2Ugd291bGQgZW5k IHVwIHdpdGggYSB0b24gb2YKKyAqIFJURXMgd2l0aCB1bmhlbHBmdWwgbmFtZXMgbGlrZSB1bm5h bWVkX2pvaW5fMTc7ICgyKSBub3QgYWxsIGpvaW5zIGhhdmUKKyAqIFJURXM7IGFuZCAoMykgd2Ug aW50ZW5kIHRvIHJlZmVyIHRvIGpvaW5zIGJ5IHRoZWlyIGNvbnN0aXR1ZW50IG1lbWJlcnMKKyAq IHJhdGhlciB0aGFuIGJ5IHJlZmVyZW5jZSB0byB0aGUgam9pbiBSVEUuCisgKgorICogSW4gZ2Vu ZXJhbCwgd2UgY29uc3RydWN0IGlkZW50aWZpZXJzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAq CisgKiBhbGlhc19uYW1lI29jY3VycmVuY2VfbnVtYmVyL2NoaWxkX3RhYmxlX25hbWVAc3VicXVl cnlfbmFtZQorICoKKyAqIEhvd2V2ZXIsIG9jY3VycmVuY2VfbnVtYmVyIGlzIG9taXR0ZWQgd2hl biBpdCBpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZQorICogd2l0aGluIHRoZSBzYW1lIHN1YnF1ZXJ5 LCBjaGlsZF90YWJsZV9uYW1lIGlzIG9taXR0ZWQgZm9yIHJlbGF0aW9ucyB0aGF0CisgKiBhcmUg bm90IGNoaWxkIHRhYmxlcywgYW5kIHN1YnF1ZXJ5X25hbWUgaXMgb21pdHRlZCBmb3IgdGhlIHRv cG1vc3QKKyAqIHF1ZXJ5IGxldmVsLiBXaGVuZXZlciBhbiBpdGVtIGlzIG9taXR0ZWQsIHRoZSBw cmVjZWRpbmcgcHVuY3R1YXRpb24gbWFyaworICogaXMgYWxzbyBvbWl0dGVkLiAgSWRlbnRpZmll ci1zdHlsZSBlc2NhcGluZyBpcyBhcHBsaWVkIHRvIGFsaWFzX25hbWUgYW5kCisgKiBzdWJxdWVy eV9uYW1lLiAgV2hlbmV2ZXIgd2UgaW5jbHVkZSBjaGlsZF90YWJsZV9uYW1lLCB3ZSBhbHdheXMK KyAqIHNjaGVtYS1xdWFsaWZpZWQgbmFtZSwgYnV0IHdyaXRpbmcgdGhlaXIgb3duIHBsYW4gYWR2 aWNlIGFyZSBub3QgcmVxdWlyZWQKKyAqIHRvIGRvIHNvLiAgSWRlbnRpZmllci1zdHlsZSBlc2Nh cGluZyBpcyBhcHBsaWVkIHRvIHRoZSBzY2hlbWEgYW5kIHRvIHRoZQorICogcmVsYXRpb24gbmFt ZXMgc2VwYXJhdGVseS4KKyAqCisgKiBUaGUgdXBzaG90IG9mIGFsbCBvZiB0aGVzZSBydWxlcyBp cyB0aGF0IGluIHNpbXBsZSBjYXNlcywgdGhlIHJlbGF0aW9uCisgKiBpZGVudGlmaWVyIGlzIHRl eHR1YWxseSBpZGVudGljYWwgdG8gdGhlIGFsaWFzIG5hbWUsIG1ha2luZyBsaWZlIGVhc2llcgor ICogZm9yIHVzZXJzLiBIb3dldmVyLCBldmVuIGluIGNvbXBsZXggY2FzZXMsIGV2ZXJ5IHJlbGF0 aW9uIGlkZW50aWZpZXIKKyAqIGZvciBhIGdpdmVuIHF1ZXJ5IHdpbGwgYmUgdW5pcXVlIChvciBh dCBsZWFzdCB3ZSBob3BlIHNvOiBpZiBub3QsIHRoaXMKKyAqIGNvZGUgaXMgYnVnZ3kgYW5kIHRo ZSBpZGVudGlmaWVyIGZvcm1hdCBtaWdodCBuZWVkIHRvIGJlIHJldGhvdWdodCkuCisgKgorICog QSBrZXkgZ29hbCBvZiB0aGlzIHN5c3RlbSBpcyB0aGF0IHdlIHdhbnQgdG8gYmUgYWJsZSB0byBy ZWNvbnN0cnVjdCB0aGUKKyAqIHNhbWUgaWRlbnRpZmllcnMgZHVyaW5nIGEgZnV0dXJlIHBsYW5u aW5nIGN5Y2xlIGZvciB0aGUgc2FtZSBxdWVyeSwgc28KKyAqIHRoYXQgaWYgYSBjZXJ0YWluIGJl aGF2aW9yIGlzIHNwZWNpZmllZCBmb3IgYSBjZXJ0YWluIGlkZW50aWZpZXIsIHdlIGNhbgorICog cHJvcGVybHkgaWRlbnRpZnkgdGhlIFJUSSBmb3Igd2hpY2ggdGhhdCBiZWhhdmlvciBpcyBtYW5k YXRlZC4gSW4gb3JkZXIKKyAqIGZvciB0aGlzIHRvIHdvcmssIHN1YnF1ZXJ5IG5hbWVzIG11c3Qg YmUgdW5pcXVlIGFuZCBrbm93biBiZWZvcmUgdGhlCisgKiBzdWJxdWVyeSBpcyBwbGFubmVkLCBh bmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgaWRlbnRpZmllciBtdXN0IG5vdCBkZXBlbmQKKyAqIG9u IGFueSBwYXJ0IG9mIHRoZSBxdWVyeSBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHN1YnF1ZXJ5IGxl dmVsLiBJbgorICogcGFydGljdWxhciwgb2NjdXJyZW5jZV9udW1iZXIgbXVzdCBiZSBjYWxjdWxh dGVkIHJlbGF0aXZlIHRvIHRoZSByYW5nZQorICogdGFibGUgZm9yIHRoZSByZWxldmFudCBzdWJx dWVyeSwgbm90IHRoZSBmaW5hbCBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRl ICJwZ3BhX2lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgor CitzdGF0aWMgSW5kZXggKnBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0YWJsZV9sZW5n dGgsIExpc3QgKnJ0YWJsZSwKKwkJCQkJCQkJCSAgTGlzdCAqYXBwaW5mb3MpOworc3RhdGljIGlu dAlwZ3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXggKnRvcF9ydGlfbWFw LAorCQkJCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0aSk7CisKKy8qCisg KiBDcmVhdGUgYSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZyb20gc2NyYXRjaC4KKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgY2FsbGVyIHRvIGRvIGFsbCB0aGUgaGVhdnkgbGlmdGlu Zywgc28gaXQncworICogZ2VuZXJhbGx5IGJldHRlciB0byB1c2Ugb25lIG9mIHRoZSBmdW5jdGlv bnMgYmVsb3cgaW5zdGVhZC4KKyAqCisgKiBTZWUgdGhlIGZpbGUgaGVhZGVyIGNvbW1lbnRzIGZv ciBtb3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiBhbgorICogaWRlbnRpZmllci4KKyAqLwor Y29uc3QgY2hhciAqCitwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBncGFfaWRlbnRpZmll ciAqcmlkKQoreworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKworCUFzc2VydChyaWQtPmFsaWFzX25h bWUgIT0gTlVMTCk7CisJcmVzdWx0ID0gcXVvdGVfaWRlbnRpZmllcihyaWQtPmFsaWFzX25hbWUp OworCisJQXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAwKTsKKwlpZiAocmlkLT5vY2N1cnJlbmNl ID4gMSkKKwkJcmVzdWx0ID0gcHNwcmludGYoIiVzIyVkIiwgcmVzdWx0LCByaWQtPm9jY3VycmVu Y2UpOworCisJaWYgKHJpZC0+cGFydHJlbCAhPSBOVUxMKQorCXsKKwkJaWYgKHJpZC0+cGFydG5z cCA9PSBOVUxMKQorCQkJcmVzdWx0ID0gcHNwcmludGYoIiVzLyVzIiwgcmVzdWx0LAorCQkJCQkJ CSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRyZWwpKTsKKwkJZWxzZQorCQkJcmVzdWx0ID0g cHNwcmludGYoIiVzLyVzLiVzIiwgcmVzdWx0LAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihy aWQtPnBhcnRuc3ApLAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRyZWwpKTsK Kwl9CisKKwlpZiAocmlkLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJcmVzdWx0ID0gcHNwcmludGYo IiVzQCVzIiwgcmVzdWx0LCBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGxhbl9uYW1lKSk7CisKKwly ZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlkZW50aWZpZXIg Zm9yIGEgcGFydGljdWxhciBSVEkuCisgKgorICogVGhlIGNhbGxlciBwcm92aWRlcyByb290IGFu ZCBydGksIGFuZCBnZXRzIHRoZSBuZWNlc3NhcnkgZGV0YWlscyBiYWNrIHZpYQorICogdGhlIHJl bWFpbmluZyBwYXJhbWV0ZXJzLgorICovCit2b2lkCitwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9i eV9ydGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkgICBwZ3BhX2lkZW50 aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJdG9wX3J0aSA9IHJ0aTsKKwlpbnQJCQlvY2N1cnJlbmNl ID0gMTsKKwlSYW5nZVRibEVudHJ5ICpydGU7CisJUmFuZ2VUYmxFbnRyeSAqdG9wX3J0ZTsKKwlj aGFyCSAgICpwYXJ0bnNwID0gTlVMTDsKKwljaGFyCSAgICpwYXJ0cmVsID0gTlVMTDsKKworCS8q CisJICogSWYgdGhpcyBpcyBhIGNoaWxkIFJURSwgZmluZCB0aGUgdG9wbW9zdCBwYXJlbnQgdGhh dCBpcyBzdGlsbCBvZiB0eXBlCisJICogUlRFX1JFTEFUSU9OLiBXZSBkbyB0aGlzIGJlY2F1c2Ug d2UgaWRlbnRpZnkgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJsZXMgYnkgdGhlIG5h bWUgb2YgdGhlIGNoaWxkIHRhYmxlLCBidXQgc3VicXVlcmllcyBjYW4gYWxzbyBoYXZlCisJICog Y2hpbGQgcmVscyBhbmQgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9zZSBoZXJlLgorCSAqLworCWZv ciAoOzspCisJeworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCQlSYW5nZVRibEVudHJ5ICpw YXJlbnRfcnRlOworCisJCS8qIGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5VTEwgaWYgdGhlcmUg YXJlIG5vIGNoaWxkcmVuICovCisJCWlmIChyb290LT5hcHBlbmRfcmVsX2FycmF5ID09IE5VTEwg fHwKKwkJCShhcHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJheVt0b3BfcnRpXSkgPT0gTlVM TCkKKwkJCWJyZWFrOworCisJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKGFwcGluZm8t PnBhcmVudF9yZWxpZCwgcm9vdCk7CisJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kICE9IFJURV9S RUxBVElPTikKKwkJCWJyZWFrOworCisJCXRvcF9ydGkgPSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQ7 CisJfQorCisJLyogR2V0IHRoZSByYW5nZSB0YWJsZSBlbnRyaWVzIGZvciB0aGUgUlRJIGFuZCB0 b3AgUlRJLiAqLworCXJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocnRpLCByb290KTsKKwl0b3BfcnRl ID0gcGxhbm5lcl9ydF9mZXRjaCh0b3BfcnRpLCByb290KTsKKwlBc3NlcnQocnRlLT5ydGVraW5k ICE9IFJURV9KT0lOKTsKKwlBc3NlcnQodG9wX3J0ZS0+cnRla2luZCAhPSBSVEVfSk9JTik7CisK KwkvKiBXb3JrIG91dCB0aGUgY29ycmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwlmb3IgKElu ZGV4IHByaW9yX3J0aSA9IDE7IHByaW9yX3J0aSA8IHRvcF9ydGk7ICsrcHJpb3JfcnRpKQorCXsK KwkJUmFuZ2VUYmxFbnRyeSAqcHJpb3JfcnRlOworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOwor CisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwgb2YgYSBwYXJlbnQgdGhhdCBpcyBh IHJlbGF0aW9uLCBza2lwIGl0LgorCQkgKgorCQkgKiBTdWNoIHJhbmdlIHRhYmxlIGVudHJpZXMg YXJlIGRpc2FtYmlndWF0ZWQgYnkgbWVudGlvbmluZyB0aGUgc2NoZW1hCisJCSAqIGFuZCBuYW1l IG9mIHRoZSB0YWJsZSwgbm90IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2VwYXJhdGUgb2NjdXJyZW5j ZXMKKwkJICogb2YgdGhlIHNhbWUgdGFibGUuCisJCSAqCisJCSAqIE5COiBhcHBlbmRfcmVsX2Fy cmF5IGNhbiBiZSBOVUxMIGlmIHRoZXJlIGFyZSBubyBjaGlsZHJlbgorCQkgKi8KKwkJaWYgKHJv b3QtPmFwcGVuZF9yZWxfYXJyYXkgIT0gTlVMTCAmJgorCQkJKGFwcGluZm8gPSByb290LT5hcHBl bmRfcmVsX2FycmF5W3ByaW9yX3J0aV0pICE9IE5VTEwpCisJCXsKKwkJCVJhbmdlVGJsRW50cnkg KnBhcmVudF9ydGU7CisKKwkJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKGFwcGluZm8t PnBhcmVudF9yZWxpZCwgcm9vdCk7CisJCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCA9PSBSVEVf UkVMQVRJT04pCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBTa2lwIE5VTEwgZW50cmllcyBh bmQgam9pbnMuICovCisJCXByaW9yX3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocHJpb3JfcnRpLCBy b290KTsKKwkJaWYgKHByaW9yX3J0ZSA9PSBOVUxMIHx8IHByaW9yX3J0ZS0+cnRla2luZCA9PSBS VEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgdGhlIGFsaWFzIG5hbWUgZGlm ZmVycy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYtPmFsaWFzbmFtZSwgcnRlLT5l cmVmLT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiBMb29rcyBsaWtlIGEg dHJ1ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9CisKKwkvKiBJZiB0aGlzIGlz IGEgY2hpbGQgdGFibGUsIGdldCB0aGUgc2NoZW1hIGFuZCByZWxhdGlvbiBuYW1lcy4gKi8KKwlp ZiAocnRpICE9IHRvcF9ydGkpCisJeworCQlwYXJ0bnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29y X3RlbXAoZ2V0X3JlbF9uYW1lc3BhY2UocnRlLT5yZWxpZCkpOworCQlwYXJ0cmVsID0gZ2V0X3Jl bF9uYW1lKHJ0ZS0+cmVsaWQpOworCX0KKworCS8qIE9LLCB3ZSBoYXZlIGFsbCB0aGUgYW5zd2Vy cyB3ZSBuZWVkLiBSZXR1cm4gdGhlbSB0byB0aGUgY2FsbGVyLiAqLworCXJpZC0+YWxpYXNfbmFt ZSA9IHRvcF9ydGUtPmVyZWYtPmFsaWFzbmFtZTsKKwlyaWQtPm9jY3VycmVuY2UgPSBvY2N1cnJl bmNlOworCXJpZC0+cGFydG5zcCA9IHBhcnRuc3A7CisJcmlkLT5wYXJ0cmVsID0gcGFydHJlbDsK KwlyaWQtPnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKK30KKworLyoKKyAqIENvbXB1dGUg YSByZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIHNldCBvZiBSVElzLCBleGNlcHQgZm9yIGFueSBS VEVfSk9JTgorICogUlRJcyB0aGF0IG1heSBiZSBwcmVzZW50LgorICoKKyAqIFJURV9KT0lOIGVu dHJpZXMgYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgdGhleSBjYW5ub3QgYmUgbWVudGlvbmVkIGJ5IHBs YW4KKyAqIGFkdmljZS4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtp bmcgc3VyZSB0aGF0IHRoZSB0a2V5cyBhcnJheSBpcyBsYXJnZQorICogZW5vdWdoIHRvIHN0b3Jl IHRoZSByZXN1bHRzLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBp ZGVudGlmaWVycyBjb21wdXRlZC4KKyAqLworaW50CitwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNf YnlfcmVsaWRzKFBsYW5uZXJJbmZvICpyb290LCBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJ ICAgcGdwYV9pZGVudGlmaWVyICpyaWRzKQoreworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQly dGkgPSAtMTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkg Pj0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocnRpLCBy b290KTsKKworCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisJ CXBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCBydGksICZyaWRzW2NvdW50Kytd KTsKKwl9CisKKwlBc3NlcnQoY291bnQgPiAwKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisg KiBDcmVhdGUgYW4gYXJyYXkgb2YgcmFuZ2UgdGFibGUgaWRlbnRpZmllcnMgZm9yIGFsbCB0aGUg bm9uLU5VTEwsCisgKiBub24tUlRFX0pPSU4gZW50cmllcyBpbiB0aGUgUGxhbm5lZFN0bXQncyBy YW5nZSB0YWJsZS4KKyAqLworcGdwYV9pZGVudGlmaWVyICoKK3BncGFfY3JlYXRlX2lkZW50aWZp ZXJzX2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KQoreworCUluZGV4CQlydGFi bGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgocHN0bXQtPnJ0YWJsZSk7CisJcGdwYV9pZGVudGlmaWVy ICpyZXN1bHQgPSBwYWxsb2MwX2FycmF5KHBncGFfaWRlbnRpZmllciwgcnRhYmxlX2xlbmd0aCk7 CisJSW5kZXgJICAgKnRvcF9ydGlfbWFwOworCWludAkJCXJ0aW5mb2luZGV4ID0gMDsKKwlTdWJQ bGFuUlRJbmZvICpydGluZm8gPSBOVUxMOworCVN1YlBsYW5SVEluZm8gKm5leHRydGluZm8gPSBO VUxMOworCisJLyoKKwkgKiBBY2NvdW50IGZvciByZWxhdGlvbnMgYWRkZGVkIGJ5IGluaGVyaXRh bmNlIGV4cGFuc2lvbiBvZiBwYXJ0aXRpb25lZAorCSAqIHRhYmxlcy4KKwkgKi8KKwl0b3BfcnRp X21hcCA9IHBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKHJ0YWJsZV9sZW5ndGgsIHBzdG10LT5ydGFi bGUsCisJCQkJCQkJCQkJICBwc3RtdC0+YXBwZW5kUmVsYXRpb25zKTsKKworCS8qCisJICogV2hl biB3ZSBiZWdpbiBpdGVyYXRpbmcsIHdlJ3JlIHByb2Nlc3NpbmcgdGhlIHBvcnRpb24gb2YgdGhl IHJhbmdlCisJICogdGFibGUgdGhhdCBvcmlnaW5hdGVkIGZyb20gdGhlIHRvcC1sZXZlbCBQbGFu bmVySW5mbywgc28gc3VicnRpbmZvIGlzCisJICogTlVMTC4gTGF0ZXIsIHN1YnJ0aW5mbyB3aWxs IGJlIHRoZSBTdWJQbGFuUlRJbmZvIGZvciB0aGUgc3VicXVlcnkgd2hvc2UKKwkgKiBwb3J0aW9u IG9mIHRoZSByYW5nZSB0YWJsZSB3ZSBhcmUgcHJvY2Vzc2luZy4gbmV4dHJ0aW5mbyBpcyBhbHdh eXMgdGhlCisJICogU3ViUGxhblJUSW5mbyB0aGF0IGZvbGxvd3MgdGhlIGN1cnJlbnQgb25lLCBp ZiBhbnksIHNvIHdoZW4gd2UncmUKKwkgKiBwcm9jZXNzaW5nIHRoZSB0b3AtbGV2ZWwgcXVlcnkn cyBwb3J0aW9uIG9mIHRoZSByYW5nZSB0YWJsZSwgdGhlIG5leHQKKwkgKiBTdWJQbGFuUlRJbmZv IGlzIHRoZSB2ZXJ5IGZpcnN0IG9uZS4KKwkgKi8KKwlpZiAocHN0bXQtPnN1YnJ0aW5mb3MgIT0g TlVMTCkKKwkJbmV4dHJ0aW5mbyA9IGxpbml0aWFsKHBzdG10LT5zdWJydGluZm9zKTsKKworCS8q IE1haW4gbG9vcCBvdmVyIHRoZSByYW5nZSB0YWJsZS4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9IDE7 IHJ0aSA8PSBydGFibGVfbGVuZ3RoOyBydGkrKykKKwl7CisJCWNvbnN0IGNoYXIgKnBsYW5fbmFt ZTsKKwkJSW5kZXgJCXRvcF9ydGk7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwkJUmFuZ2VUYmxF bnRyeSAqdG9wX3J0ZTsKKwkJY2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJCWNoYXIJICAgKnBh cnRyZWwgPSBOVUxMOworCQlpbnQJCQlvY2N1cnJlbmNlOworCQlwZ3BhX2lkZW50aWZpZXIgKnJp ZDsKKworCQkvKgorCQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IFN1YlBsYW5SVEluZm8sIGlmIGl0 J3MgdGltZSB0byBkbyB0aGF0LgorCQkgKgorCQkgKiBUaGlzIGxvb3AgcHJvYmFibHkgc2hvdWxk bid0IGV2ZXIgaXRlcmF0ZSBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZQorCQkgKiB0aGF0IHdvdWxk IGltcGx5IHRoYXQgYSBzdWJxdWVyeSB3YXMgcGxhbm5lZCBidXQgYWRkZWQgbm90aGluZyB0bwor CQkgKiB0aGUgcmFuZ2UgdGFibGU7IGJ1dCBsZXQncyBiZSBkZWZlbnNpdmUgYW5kIGFzc3VtZSBp dCBjYW4gaGFwcGVuLgorCQkgKi8KKwkJd2hpbGUgKG5leHRydGluZm8gIT0gTlVMTCAmJiBydGkg PiBuZXh0cnRpbmZvLT5ydG9mZnNldCkKKwkJeworCQkJcnRpbmZvID0gbmV4dHJ0aW5mbzsKKwkJ CWlmICgrK3J0aW5mb2luZGV4ID49IGxpc3RfbGVuZ3RoKHBzdG10LT5zdWJydGluZm9zKSkKKwkJ CQluZXh0cnRpbmZvID0gTlVMTDsKKwkJCWVsc2UKKwkJCQluZXh0cnRpbmZvID0gbGlzdF9udGgo cHN0bXQtPnN1YnJ0aW5mb3MsIHJ0aW5mb2luZGV4KTsKKwkJfQorCisJCS8qIEZldGNoIHRoZSBy YW5nZSB0YWJsZSBlbnRyeSwgaWYgYW55LiAqLworCQlydGUgPSBydF9mZXRjaChydGksIHBzdG10 LT5ydGFibGUpOworCisJCS8qCisJCSAqIFdlIGNhbid0IGFuZCBkb24ndCBuZWVkIHRvIGlkZW50 aWZ5IG51bGwgZW50cmllcywgYW5kIHdlIGRvbid0IHdhbnQKKwkJICogdG8gaWRlbnRpZnkgam9p biBlbnRyaWVzLgorCQkgKi8KKwkJaWYgKHJ0ZSA9PSBOVUxMIHx8IHJ0ZS0+cnRla2luZCA9PSBS VEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcmVs YXRpb24gYWRkZWQgYnkgcGFydGl0aW9uZWQgdGFibGUgZXhwYW5zaW9uLAorCQkgKiB0aGVuIHRo ZSB0b3AgUlRJL1JURSBhcmUganVzdCB0aGUgc2FtZSBhcyB0aGlzIFJUSS9SVEUuIE90aGVyd2lz ZSwKKwkJICogd2UgbmVlZCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgUlRJL1JURSwgYW5k IG11c3QgYWxzbyBmZXRjaAorCQkgKiB0aGUgcGFydGl0aW9uIHNjaGVtYSBhbmQgbmFtZS4KKwkJ ICovCisJCXRvcF9ydGkgPSB0b3BfcnRpX21hcFtydGkgLSAxXTsKKwkJaWYgKHJ0aSA9PSB0b3Bf cnRpKQorCQkJdG9wX3J0ZSA9IHJ0ZTsKKwkJZWxzZQorCQl7CisJCQl0b3BfcnRlID0gcnRfZmV0 Y2godG9wX3J0aSwgcHN0bXQtPnJ0YWJsZSk7CisJCQlwYXJ0bnNwID0KKwkJCQlnZXRfbmFtZXNw YWNlX25hbWVfb3JfdGVtcChnZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7CisJCQlwYXJ0 cmVsID0gZ2V0X3JlbF9uYW1lKHJ0ZS0+cmVsaWQpOworCQl9CisKKwkJLyogQ29tcHV0ZSB0aGUg Y29ycmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwkJb2NjdXJyZW5jZSA9IHBncGFfb2NjdXJy ZW5jZV9udW1iZXIocHN0bXQtPnJ0YWJsZSwgdG9wX3J0aV9tYXAsCisJCQkJCQkJCQkJCXJ0aW5m bywgdG9wX3J0aSk7CisKKwkJLyogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHBsYW4gKE5V TEwgZm9yIHRvcGxldmVsIHF1ZXJ5KS4gKi8KKwkJcGxhbl9uYW1lID0gcnRpbmZvID09IE5VTEwg PyBOVUxMIDogcnRpbmZvLT5wbGFuX25hbWU7CisKKwkJLyogU2F2ZSBhbGwgdGhlIGRldGFpbHMg d2UndmUgZGVyaXZlZC4gKi8KKwkJcmlkID0gJnJlc3VsdFtydGkgLSAxXTsKKwkJcmlkLT5hbGlh c19uYW1lID0gdG9wX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lOworCQlyaWQtPm9jY3VycmVuY2UgPSBv Y2N1cnJlbmNlOworCQlyaWQtPnBhcnRuc3AgPSBwYXJ0bnNwOworCQlyaWQtPnBhcnRyZWwgPSBw YXJ0cmVsOworCQlyaWQtPnBsYW5fbmFtZSA9IHBsYW5fbmFtZTsKKwl9CisKKwlyZXR1cm4gcmVz dWx0OworfQorCisvKgorICogU2VhcmNoIGZvciBhIHBncGFfaWRlbnRpZmllciBpbiB0aGUgYXJy YXkgb2YgaWRlbnRpZmllcnMgY29tcHV0ZWQgZm9yIHRoZQorICogcmFuZ2UgdGFibGUuIElmIGV4 YWN0bHkgb25lIG1hdGNoIGlzIGZvdW5kLCByZXR1cm4gdGhlIG1hdGNoaW5nIFJUSTsgZWxzZQor ICogcmV0dXJuIDAuCisgKi8KK0luZGV4CitwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmll cihpbnQgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRp ZmllcnMsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJcmVzdWx0 ID0gMDsKKworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7ICsrcnRp KQorCXsKKwkJcGdwYV9pZGVudGlmaWVyICpydGlfcmlkID0gJnJ0X2lkZW50aWZpZXJzW3J0aSAt IDFdOworCisJCS8qIElmIHRoZXJlJ3Mgbm8gaWRlbnRpZmllciBmb3IgdGhpcyBSVEksIHNraXAg aXQuICovCisJCWlmIChydGlfcmlkLT5hbGlhc19uYW1lID09IE5VTEwpCisJCQljb250aW51ZTsK KworCQkvKgorCQkgKiBJZiBpdCBtYXRjaGVzLCByZXR1cm4gdGhpcyBSVEkuIEFzIHVzdWFsLCBh biBvbWl0dGVkIHBhcnRpdGlvbgorCQkgKiBzY2hlbWEgbWF0Y2hlcyBhbnl0aGluZywgYnV0IHBh cnRpdGlvbiBhbmQgcGxhbiBuYW1lcyBtdXN0IGVpdGhlcgorCQkgKiBtYXRjaCBleGFjdGx5IG9y IGJlIG9taXR0ZWQgb24gYm90aCBzaWRlcy4KKwkJICovCisJCWlmIChzdHJjbXAocmlkLT5hbGlh c19uYW1lLCBydGlfcmlkLT5hbGlhc19uYW1lKSA9PSAwICYmCisJCQlyaWQtPm9jY3VycmVuY2Ug PT0gcnRpX3JpZC0+b2NjdXJyZW5jZSAmJgorCQkJKHJpZC0+cGFydG5zcCA9PSBOVUxMIHx8IHJ0 aV9yaWQtPnBhcnRuc3AgPT0gTlVMTCB8fAorCQkJIHN0cmNtcChyaWQtPnBhcnRuc3AsIHJ0aV9y aWQtPnBhcnRuc3ApID09IDApICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQt PnBhcnRyZWwsIHJ0aV9yaWQtPnBhcnRyZWwpICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhf bnVsbChyaWQtPnBsYW5fbmFtZSwgcnRpX3JpZC0+cGxhbl9uYW1lKSkKKwkJeworCQkJaWYgKHJl c3VsdCAhPSAwKQorCQkJeworCQkJCS8qIE11bHRpcGxlIG1hdGNoZXMgd2VyZSBmb3VuZC4gKi8K KwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJlc3VsdCA9IHJ0aTsKKwkJfQorCX0KKworCXJldHVy biByZXN1bHQ7Cit9CisKKy8qCisgKiBCdWlsZCBhIG1hcHBpbmcgZnJvbSBlYWNoIFJUSSB0byB0 aGUgUlRJIHdob3NlIGFsaWFzX25hbWUgd2lsbCBiZSB1c2VkIHRvCisgKiBjb25zdHJ1Y3QgdGhl IHJhbmdlIHRhYmxlIGlkZW50aWZpZXIuCisgKgorICogRm9yIGNoaWxkIHJlbGF0aW9ucywgdGhp cyBpcyB0aGUgdG9wbW9zdCBwYXJlbnQgdGhhdCBpcyBzdGlsbCBvZiB0eXBlCisgKiBSVEVfUkVM QVRJT04uIEZvciBvdGhlciByZWxhdGlvbnMsIGl0J3MganVzdCB0aGUgb3JpZ2luYWwgUlRJLgor ICoKKyAqIFNpbmNlIHdlJ3JlIGV2ZW50dWFsbHkgZ29pbmcgdG8gbmVlZCB0aGlzIGluZm9ybWF0 aW9uIGZvciBldmVyeSBSVEkgaW4KKyAqIHRoZSByYW5nZSB0YWJsZSwgaXQncyBiZXN0IHRvIGNv bXB1dGUgYWxsIHRoZSBhbnN3ZXJzIGluIGEgc2luZ2xlIHBhc3Mgb3ZlcgorICogdGhlIEFwcGVu ZFJlbEluZm8gbGlzdC4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBlbmQgdXAgc2VhcmNoaW5nIHRocm91 Z2ggdGhhdAorICogbGlzdCByZXBlYXRlZGx5IGZvciBlbnRyaWVzIG9mIGludGVyZXN0LgorICoK KyAqIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgdXNlcyB6ZXJvLWJhc2VkIGluZGV4 aW5nLCB3aGlsZSBSVElzIHVzZQorICogMS1iYXNlZCBpbmRleGluZywgc28gc3VidHJhY3QgMSBm cm9tIHRoZSBSVEkgYmVmb3JlIGxvb2tpbmcgaXQgdXAgaW4gdGhlCisgKiBhcnJheS4KKyAqLwor c3RhdGljIEluZGV4ICoKK3BncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0YWJsZV9sZW5n dGgsIExpc3QgKnJ0YWJsZSwgTGlzdCAqYXBwaW5mb3MpCit7CisJSW5kZXgJICAgKnRvcF9ydGlf bWFwID0gcGFsbG9jMF9hcnJheShJbmRleCwgcnRhYmxlX2xlbmd0aCk7CisKKwkvKiBJbml0aWFs bHksIG1ha2UgZXZlcnkgUlRJIHBvaW50IHRvIGl0c2VsZi4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9 IDE7IHJ0aSA8PSBydGFibGVfbGVuZ3RoOyArK3J0aSkKKwkJdG9wX3J0aV9tYXBbcnRpIC0gMV0g PSBydGk7CisKKwkvKiBVcGRhdGUgdGhlIG1hcCBmb3IgZWFjaCBBcHBlbmRSZWxJbmZvIG9iamVj dC4gKi8KKwlmb3JlYWNoX25vZGUoQXBwZW5kUmVsSW5mbywgYXBwaW5mbywgYXBwaW5mb3MpCisJ eworCQlJbmRleAkJcGFyZW50X3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwkJUmFuZ2VU YmxFbnRyeSAqcGFyZW50X3J0ZSA9IHJ0X2ZldGNoKHBhcmVudF9ydGksIHJ0YWJsZSk7CisKKwkJ LyogSWYgdGhlIHBhcmVudCBpcyBub3QgUlRFX1JFTEFUSU9OLCBpZ25vcmUgdGhpcyBlbnRyeS4g Ki8KKwkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJY29udGlu dWU7CisKKwkJLyoKKwkJICogTWFwIHRoZSBjaGlsZCB0byB3aGVyZXZlciB3ZSBtYXBwZWQgdGhl IHBhcmVudC4gUGFyZW50cyBhbHdheXMKKwkJICogcHJlY2VkZSB0aGVpciBjaGlsZHJlbiBpbiB0 aGUgQXBwZW5kUmVsSW5mbyBsaXN0LCBzbyB0aGlzIHNob3VsZAorCQkgKiB3b3JrIG91dC4KKwkJ ICovCisJCXRvcF9ydGlfbWFwW2FwcGluZm8tPmNoaWxkX3JlbGlkIC0gMV0gPSB0b3BfcnRpX21h cFtwYXJlbnRfcnRpIC0gMV07CisJfQorCisJcmV0dXJuIHRvcF9ydGlfbWFwOworfQorCisvKgor ICogRmluZCB0aGUgb2NjdXJlbmNlIG51bWJlciBvZiBhIGNlcnRhaW4gcmVsYXRpb24gd2l0aGlu IGEgY2VydGFpbiBzdWJxdWVyeS4KKyAqCisgKiBUaGUgc2FtZSBhbGlhcyBuYW1lIGNhbiBvY2N1 ciBtdWx0aXBsZSB0aW1lcyB3aXRoaW4gYSBzdWJxdWVyeSwgYnV0IHdlIHdhbnQKKyAqIHRvIGRp c2FtYmlndWF0ZSBieSBnaXZpbmcgZGlmZmVyZW50IG9jY3VycmVuY2VzIGRpZmZlcmVudCBpbnRl Z2VyIGluZGV4ZXMuCisgKiBIb3dldmVyLCBjaGlsZCB0YWJsZXMgYXJlIGRpc2FtYmlndWF0ZWQg YnkgaW5jbHVkaW5nIHRoZSB0YWJsZSBuYW1lIHJhdGhlcgorICogdGhhbiBieSBpbmNyZW1lbnRp bmcgdGhlIG9jY3VycmVuY2UgbnVtYmVyOyBhbmQgam9pbnMgYXJlIG5vdCBuYW1lZCBhbmQgc28K KyAqIHNob3VsZG4ndCBpbmNyZW1lbnQgdGhlIG9jY3VyZW5jZSBudW1iZXIgZWl0aGVyLgorICov CitzdGF0aWMgaW50CitwZ3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXgg KnRvcF9ydGlfbWFwLAorCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0aSkK K3sKKwlJbmRleAkJcnRvZmZzZXQgPSAocnRpbmZvID09IE5VTEwpID8gMCA6IHJ0aW5mby0+cnRv ZmZzZXQ7CisJaW50CQkJb2NjdXJyZW5jZSA9IDE7CisJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRf ZmV0Y2gocnRpLCBydGFibGUpOworCisJZm9yIChJbmRleCBwcmlvcl9ydGkgPSBydG9mZnNldCAr IDE7IHByaW9yX3J0aSA8IHJ0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRibEVudHJ5ICpw cmlvcl9ydGU7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGNoaWxkIHJlbCBvZiBhIHBhcmVu dCB0aGF0IGlzIGEgcmVsYXRpb24sIHNraXAgaXQuCisJCSAqCisJCSAqIFN1Y2ggcmFuZ2UgdGFi bGUgZW50cmllcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBtZW50aW9uaW5nIHRoZSBzY2hlbWEKKwkJ ICogYW5kIG5hbWUgb2YgdGhlIHRhYmxlLCBub3QgYnkgY291bnRpbmcgdGhlbSBhcyBzZXBhcmF0 ZSBvY2N1cnJlbmNlcworCQkgKiBvZiB0aGUgc2FtZSB0YWJsZS4KKwkJICovCisJCWlmICh0b3Bf cnRpX21hcFtwcmlvcl9ydGkgLSAxXSAhPSBwcmlvcl9ydGkpCisJCQljb250aW51ZTsKKworCQkv KiBTa2lwIGpvaW5zLiAqLworCQlwcmlvcl9ydGUgPSBydF9mZXRjaChwcmlvcl9ydGksIHJ0YWJs ZSk7CisJCWlmIChwcmlvcl9ydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsK KworCQkvKiBTa2lwIGlmIHRoZSBhbGlhcyBuYW1lIGRpZmZlcnMuICovCisJCWlmIChzdHJjbXAo cHJpb3JfcnRlLT5lcmVmLT5hbGlhc25hbWUsIHJ0ZS0+ZXJlZi0+YWxpYXNuYW1lKSAhPSAwKQor CQkJY29udGludWU7CisKKwkJLyogTG9va3MgbGlrZSBhIHRydWUgZHVwbGljYXRlLiAqLworCQkr K29jY3VycmVuY2U7CisJfQorCisJcmV0dXJuIG9jY3VycmVuY2U7Cit9CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYjAwMGQyYjcwODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfaWRlbnRpZmllci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHBncGFfaWRlbnRpZmllci5oCisgKgkgIGNyZWF0ZSBhcHByb3ByaWF0ZSBp ZGVudGlmaWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcworICoKKyAqIENvcHlyaWdodCAoYykg MjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaAorICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpZm5kZWYgUEdQQV9JREVOVElGSUVSX0gKKyNkZWZpbmUgUEdQQV9J REVOVElGSUVSX0gKKworI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1ZGUgIm5v ZGVzL3BsYW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2lkZW50aWZpZXIKK3sKKwlj b25zdCBjaGFyICphbGlhc19uYW1lOworCWludAkJCW9jY3VycmVuY2U7CisJY29uc3QgY2hhciAq cGFydG5zcDsKKwljb25zdCBjaGFyICpwYXJ0cmVsOworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsK K30gcGdwYV9pZGVudGlmaWVyOworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY29tcGFy aW5nIHBvc3NpYmx5LU5VTEwgc3RyaW5ncy4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorc3RyaW5n c19lcXVhbF9vcl9ib3RoX251bGwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwlp ZiAoYSA9PSBiKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmIChhID09IE5VTEwgfHwgYiA9PSBO VUxMKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gc3RyY21wKGEsIGIpID09IDA7 Cit9CisKK2V4dGVybiBjb25zdCBjaGFyICpwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBn cGFfaWRlbnRpZmllciAqcmlkKTsKK2V4dGVybiB2b2lkIHBncGFfY29tcHV0ZV9pZGVudGlmaWVy X2J5X3J0aShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcnRpLAorCQkJCQkJCQkJCSAgIHBncGFf aWRlbnRpZmllciAqcmlkKTsKK2V4dGVybiBpbnQJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5 X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxp ZHMsCisJCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcyk7CitleHRlcm4gcGdwYV9p ZGVudGlmaWVyICpwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KFBsYW5u ZWRTdG10ICpwc3RtdCk7CisKK2V4dGVybiBJbmRleCBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRl bnRpZmllcihpbnQgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIg KnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZWM4ZTFhNjY2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jCkBAIC0wLDAgKzEsNjI5IEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ3BhX2pvaW4uYworICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQ bGFuIHRyZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfam9pbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIK KyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgi CisjaW5jbHVkZSAibm9kZXMvcHJpbnQuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgi CisKKy8qCisgKiBUZW1wb3Jhcnkgb2JqZWN0IHVzZWQgd2hlbiB1bnJvbGxpbmcgYSBqb2luIHRy ZWUuCisgKi8KK3N0cnVjdCBwZ3BhX2pvaW5fdW5yb2xsZXIKK3sKKwl1bnNpZ25lZAluYWxsb2Nh dGVkOworCXVuc2lnbmVkCW51c2VkOworCVBsYW4JICAgKm91dGVyX3N1YnBsYW47CisJRWxpZGVk Tm9kZSAqb3V0ZXJfZWxpZGVkX25vZGU7CisJYm9vbAkJb3V0ZXJfYmVuZWF0aF9hbnlfZ2F0aGVy OworCXBncGFfam9pbl9zdHJhdGVneSAqc3RyYXRlZ3k7CisJUGxhbgkgICoqaW5uZXJfc3VicGxh bnM7CisJRWxpZGVkTm9kZSAqKmlubmVyX2VsaWRlZF9ub2RlczsKKwlwZ3BhX2pvaW5fdW5yb2xs ZXIgKippbm5lcl91bnJvbGxlcnM7CisJYm9vbAkgICAqaW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVy OworfTsKKworc3RhdGljIHBncGFfam9pbl9zdHJhdGVneSBwZ3BhX2RlY29tcG9zZV9qb2luKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgIFBsYW4gKnBsYW4s CisJCQkJCQkJCQkJCSAgUGxhbiAqKnJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBQbGFuICoqcmVh bGlubmVyLAorCQkJCQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsCisJCQkJ CQkJCQkJCSAgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJCQkJCQkJICBib29s ICpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9p bm5lcl9nYXRoZXIpOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2VuZF9ub2RlKFBsYW5u ZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4pOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVz Y2VuZF9hbnlfZ2F0aGVyKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJ CQkJICAgYm9vbCAqZm91bmRfYW55X2dhdGhlcik7CitzdGF0aWMgYm9vbCBwZ3BhX2Rlc2NlbmRf YW55X3VuaXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJCQkJRWxp ZGVkTm9kZSAqKmVsaWRlZF9ub2RlKTsKKworc3RhdGljIGJvb2wgaXNfcmVzdWx0X25vZGVfd2l0 aF9jaGlsZChQbGFuICpwbGFuKTsKK3N0YXRpYyBib29sIGlzX3NvcnRpbmdfcGxhbihQbGFuICpw bGFuKTsKKworLyoKKyAqIENyZWF0ZSBhbiBpbml0aWFsbHktZW1wdHkgb2JqZWN0IGZvciB1bnJv bGxpbmcgam9pbnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgaGVscGVyIG9iamVj dCB0aGF0IGNhbiBsYXRlciBiZSB1c2VkIHRvIGNyZWF0ZSBhCisgKiBwZ3BhX3Vucm9sbGVkX2pv aW4sIGFmdGVyIGZpcnN0IGNhbGxpbmcgcGdwYV91bnJvbGxfam9pbiBvbmUgb3IgbW9yZSB0aW1l cy4KKyAqLworcGdwYV9qb2luX3Vucm9sbGVyICoKK3BncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIo dm9pZCkKK3sKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXI7CisKKwlqb2luX3Vu cm9sbGVyID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3Vucm9sbGVyKTsKKwlqb2luX3Vucm9s bGVyLT5uYWxsb2NhdGVkID0gNDsKKwlqb2luX3Vucm9sbGVyLT5zdHJhdGVneSA9CisJCXBhbGxv Y19hcnJheShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOwor CWpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zID0KKwkJcGFsbG9jX2FycmF5KFBsYW4gKiwg am9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVk X25vZGVzID0KKwkJcGFsbG9jX2FycmF5KEVsaWRlZE5vZGUgKiwgam9pbl91bnJvbGxlci0+bmFs bG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzID0KKwkJcGFsbG9jX2Fy cmF5KHBncGFfam9pbl91bnJvbGxlciAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlq b2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQlwYWxsb2NfYXJyYXko Ym9vbCwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisKKwlyZXR1cm4gam9pbl91bnJvbGxl cjsKK30KKworLyoKKyAqIFVucm9sbCBvbmUgbGV2ZWwgb2YgYW4gdW5yb2xsYWJsZSBqb2luIHRy ZWUuCisgKgorICogT3VyIGJhc2ljIGdvYWwgaGVyZSBpcyB0byB1bnJvbGwgam9pbiB0cmVlcyBh cyB0aGV5IG9jY3VyIGluIHRoZSBQbGFuCisgKiB0cmVlIGludG8gYSBzaW1wbGVyIGFuZCBtb3Jl IHJlZ3VsYXIgc3RydWN0dXJlIHRoYXQgd2UgY2FuIG1vcmUgZWFzaWx5CisgKiB1c2UgZm9yIGZ1 cnRoZXIgcHJvY2Vzc2luZy4gVW5yb2xsaW5nIGlzIG91dGVyLWRlZXAsIHNvIGlmIHRoZSBwbGFu IHRyZWUKKyAqIGhhcyBKb2luMShKb2luMihBLEIpLEpvaW4zKEMsRCkpLCB0aGUgc2FtZSBqb2lu IHVucm9sbGVyIG9iamVjdCBzaG91bGQgYmUKKyAqIHVzZWQgZm9yIEpvaW4xIGFuZCBKb2luMiwg YnV0IGEgZGlmZmVyZW50IG9uZSB3aWxsIGJlIG5lZWRlZCBmb3IgSm9pbjMsCisgKiBzaW5jZSB0 aGF0IGludm9sdmVzIGEgam9pbiB3aXRoaW4gdGhlICppbm5lciogc2lkZSBvZiBhbm90aGVyIGpv aW4uCisgKgorICogcGdwYV9wbGFuX3dhbGtlciBjcmVhdGVzIGEgInRvcCBsZXZlbCIgam9pbiB1 bnJvbGxlciBvYmplY3Qgd2hlbiBpdAorICogZW5jb3VudGVycyBhIGpvaW4gaW4gYSBwb3J0aW9u IG9mIHRoZSBwbGFuIHRyZWUgaW4gd2hpY2ggbm8gam9pbiB1bnJvbGxlcgorICogaXMgYWxyZWFk eSBhY3RpdmUuIEZyb20gdGhlcmUsIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRl dGVybWluZworICogdG8gd2hhdCBwb3J0aW9uIG9mIHRoZSBwbGFuIHRyZWUgdGhhdCBqb2luIHVu cm9sbGVyIGFwcGxpZXMsIGFuZCBmb3IKKyAqIGNyZWF0aW5nIGFueSBzdWJvcmRpbmF0ZSBqb2lu IHVucm9sbGVyIG9iamVjdHMgdGhhdCBhcmUgbmVlZGVkIGFzIGEgcmVzdWx0CisgKiBvZiBub24t b3V0ZXItZGVlcCBqb2luIHRyZWVzLiBXZSBkbyB0aGlzIGJ5IHJldHVybmluZyB0aGUgam9pbiB1 bnJvbGxlcgorICogb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBmdXJ0aGVyIHRyYXZl cnNhbCBvZiB0aGUgb3V0ZXIgYW5kIGlubmVyCisgKiBzdWJ0cmVlcyBvZiB0aGUgY3VycmVudCBw bGFuIG5vZGUgdmlhICpvdXRlcl9qb2luX3Vucm9sbGVyIGFuZAorICogKmlubmVyX2pvaW5fdW5y b2xsZXIsIHJlc3BlY3RpdmVseS4KKyAqLwordm9pZAorcGdwYV91bnJvbGxfam9pbihwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkgYm9vbCBiZW5lYXRo X2FueV9nYXRoZXIsCisJCQkJIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJ CQkgcGdwYV9qb2luX3Vucm9sbGVyICoqb3V0ZXJfam9pbl91bnJvbGxlciwKKwkJCQkgcGdwYV9q b2luX3Vucm9sbGVyICoqaW5uZXJfam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX2pvaW5fc3RyYXRl Z3kgc3RyYXRlZ3k7CisJUGxhbgkgICAqcmVhbGlubmVyLAorCQkJICAgKnJlYWxvdXRlcjsKKwlF bGlkZWROb2RlICplbGlkZWRpbm5lciwKKwkJCSAgICplbGlkZWRvdXRlcjsKKwlpbnQJCQluOwor CWJvb2wJCWZvdW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwlib29sCQlmb3VuZF9hbnlf aW5uZXJfZ2F0aGVyID0gZmFsc2U7CisKKwlBc3NlcnQoam9pbl91bnJvbGxlciAhPSBOVUxMKTsK KworCS8qCisJICogV2UgbmVlZCB0byBwYXNzIHRoZSBqb2luX3Vucm9sbGVyIG9iamVjdCBkb3du IHRocm91Z2ggY2VydGFpbiB0eXBlcyBvZgorCSAqIHBsYW4gbm9kZXMgLS0gYW55dGhpbmcgdGhh dCdzIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneSwgYW5kCisJICogYW55IG90 aGVyIG5vZGVzIHRoYXQgY2FuIG9jY3VyIGluIGEgam9pbiB0cmVlIGRlc3BpdGUgbm90IGJlaW5n IHNjYW5zCisJICogb3Igam9pbnMuCisJICoKKwkgKiBUaGlzIGluY2x1ZGVzOgorCSAqCisJICog KDEpIE1hdGVyaWFsaXplLCBNZW1vaXplLCBhbmQgSGFzaCBub2Rlcywgd2hpY2ggYXJlIHBhcnQg b2YgdGhlIGpvaW4KKwkgKiBzdHJhdGVneSwKKwkgKgorCSAqICgyKSBHYXRoZXIgYW5kIEdhdGhl ciBNZXJnZSBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGF0IGFueSBwb2ludCBpbiB0aGUKKwkgKiBq b2luIHRyZWUgd2hlcmUgdGhlIHBsYW5uZXIgZGVjaWRlZCB0byBpbml0aWF0ZSBwYXJhbGxlbGlz bSwKKwkgKgorCSAqICgzKSBTb3J0IGFuZCBJbmNyZW1lbnRhbFNvcnQgbm9kZXMsIHdoaWNoIGNh biBvY2N1ciBiZW5lYXRoIE1lcmdlSm9pbgorCSAqIG9yIEdhdGhlck1lcmdlLAorCSAqCisJICog KDQpIEFnZyBhbmQgVW5pcXVlIG5vZGVzLCB3aGljaCBjYW4gb2NjdXIgd2hlbiB3ZSBkZWNpZGUg dG8gbWFrZSB0aGUKKwkgKiBudWxsYWJsZSBzaWRlIG9mIGEgc2VtaWpvaW4gdW5pcXVlIGFuZCB0 aGVuIGpvaW4gdGhlIHJlc3VsdCwgYW5kCisJICoKKwkgKiAoNSkgUmVzdWx0IG5vZGVzIHdpdGgg Y2hpbGRyZW4sIHdoaWNoIGNhbiBiZSBhZGRlZCBlaXRoZXIgdG8gcHJvamVjdCB0bworCSAqIGVu Zm9yY2UgYSBvbmUtdGltZSBmaWx0ZXIgKGJ1dCBSZXN1bHQgbm9kZXMgd2l0aG91dCBjaGlsZHJl biBhcmUKKwkgKiBkZWdlbmVyYXRlIHNjYW5zIG9yIGpvaW5zKS4KKwkgKi8KKwlpZiAoSXNBKHBs YW4sIE1hdGVyaWFsKSB8fCBJc0EocGxhbiwgTWVtb2l6ZSkgfHwgSXNBKHBsYW4sIEhhc2gpCisJ CXx8IElzQShwbGFuLCBHYXRoZXIpIHx8IElzQShwbGFuLCBHYXRoZXJNZXJnZSkKKwkJfHwgaXNf c29ydGluZ19wbGFuKHBsYW4pIHx8IElzQShwbGFuLCBBZ2cpIHx8IElzQShwbGFuLCBVbmlxdWUp CisJCXx8IGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQocGxhbikpCisJeworCQkqb3V0ZXJfam9p bl91bnJvbGxlciA9IGpvaW5fdW5yb2xsZXI7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNp bmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCBub2RlcyB0aGF0IHJlcXVpcmUgcGFzcy10aHJvdWdo IHRyZWF0bWVudCwKKwkgKiB0aGlzIHNob3VsZCBiZSBhbiB1bnJvbGxhYmxlIGpvaW4uCisJICov CisJc3RyYXRlZ3kgPSBwZ3BhX2RlY29tcG9zZV9qb2luKHdhbGtlciwgcGxhbiwKKwkJCQkJCQkJ ICAgJnJlYWxvdXRlciwgJnJlYWxpbm5lciwKKwkJCQkJCQkJICAgJmVsaWRlZG91dGVyLCAmZWxp ZGVkaW5uZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkg ICAmZm91bmRfYW55X2lubmVyX2dhdGhlcik7CisKKwkvKiBJZiBvdXIgd29ya3NwYWNlIGlzIGZ1 bGwsIGV4cGFuZCBpdC4gKi8KKwlpZiAoam9pbl91bnJvbGxlci0+bnVzZWQgPj0gam9pbl91bnJv bGxlci0+bmFsbG9jYXRlZCkKKwl7CisJCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQgKj0gMjsK KwkJam9pbl91bnJvbGxlci0+c3RyYXRlZ3kgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJv bGxlci0+c3RyYXRlZ3ksCisJCQkJCQkgICBwZ3BhX2pvaW5fc3RyYXRlZ3ksCisJCQkJCQkgICBq b2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxh bnMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMsCisJ CQkJCQkgICBQbGFuICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJ am9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpv aW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcywKKwkJCQkJCSAgIEVsaWRlZE5vZGUgKiwK KwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5p bm5lcl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxl ci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJICAgYm9vbCwKKwkJCQkJCSAgIGpv aW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxl cnMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzLAor CQkJCQkJICAgcGdwYV9qb2luX3Vucm9sbGVyICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5u YWxsb2NhdGVkKTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdlJ3JlIGZsYXR0ZW5pbmcgb3V0ZXIt ZGVlcCBqb2luIHRyZWVzLCBpdCBmb2xsb3dzIHRoYXQgaWYgdGhlCisJICogb3V0ZXIgc2lkZSBp cyBzdGlsbCBhbiB1bnJvbGxhYmxlIGpvaW4sIGl0IHNob3VsZCBiZSB1bnJvbGxlZCBpbnRvIHRo aXMKKwkgKiBzYW1lIG9iamVjdC4gT3RoZXJ3aXNlLCB3ZSd2ZSByZWFjaGVkIHRoZSBsaW1pdCBv ZiB3aGF0IHdlIGNhbiB1bnJvbGwKKwkgKiBpbnRvIHRoaXMgb2JqZWN0IGFuZCBtdXN0IHJlbWVt YmVyIHRoZSBvdXRlciBzaWRlIGFzIHRoZSBmaW5hbCBvdXRlcgorCSAqIHN1YnBsYW4uCisJICov CisJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxvdXRlcikpCisJ CSpvdXRlcl9qb2luX3Vucm9sbGVyID0gam9pbl91bnJvbGxlcjsKKwllbHNlCisJeworCQlqb2lu X3Vucm9sbGVyLT5vdXRlcl9zdWJwbGFuID0gcmVhbG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5v dXRlcl9lbGlkZWRfbm9kZSA9IGVsaWRlZG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5vdXRlcl9i ZW5lYXRoX2FueV9nYXRoZXIgPQorCQkJYmVuZWF0aF9hbnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9v dXRlcl9nYXRoZXI7CisJfQorCisJLyoKKwkgKiBTdG9yZSB0aGUgaW5uZXIgc3VicGxhbi4gSWYg aXQncyBhbiB1bnJvbGxhYmxlIGpvaW4sIGl0IG5lZWRzIHRvIGJlCisJICogZmxhdHRlbmVkIGlu IHR1cm4sIGJ1dCBpbnRvIGEgbmV3IHVucm9sbGVyIG9iamVjdCwgbm90IHRoaXMgb25lLgorCSAq LworCW4gPSBqb2luX3Vucm9sbGVyLT5udXNlZCsrOworCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5 W25dID0gc3RyYXRlZ3k7CisJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNbbl0gPSByZWFs aW5uZXI7CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzW25dID0gZWxpZGVkaW5u ZXI7CisJam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW25dID0KKwkJYmVu ZWF0aF9hbnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9pbm5lcl9nYXRoZXI7CisJaWYgKGVsaWRlZGlu bmVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxpbm5lcikpCisJCSppbm5lcl9qb2luX3Vu cm9sbGVyID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcigpOworCWVsc2UKKwkJKmlubmVyX2pv aW5fdW5yb2xsZXIgPSBOVUxMOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1tuXSA9 ICppbm5lcl9qb2luX3Vucm9sbGVyOworfQorCisvKgorICogVXNlIHRoZSBkYXRhIHdlJ3ZlIGFj Y3VtdWxhdGVkIGluIGEgcGdwYV9qb2luX3Vucm9sbGVyIG9iamVjdCB0byBjb25zdHJ1Y3QKKyAq IGEgcGdwYV91bnJvbGxlZF9qb2luLgorICovCitwZ3BhX3Vucm9sbGVkX2pvaW4gKgorcGdwYV9i dWlsZF91bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJ CQkJIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX3Vucm9sbGVk X2pvaW4gKnVqb2luOworCWludAkJCWk7CisKKwkvKgorCSAqIFdlIHNob3VsZG4ndCBoYXZlIGdv bmUgZXZlbiBzbyBmYXIgYXMgdG8gY3JlYXRlIGEgam9pbiB1bnJvbGxlciB1bmxlc3MKKwkgKiB3 ZSBmb3VuZCBhdCBsZWFzdCBvbmUgdW5yb2xsYWJsZSBqb2luLgorCSAqLworCUFzc2VydChqb2lu X3Vucm9sbGVyLT5udXNlZCA+IDApOworCisJLyogQWxsb2NhdGUgcmVzdWx0IHN0cnVjdHVyZXMu ICovCisJdWpvaW4gPSBwYWxsb2MwX29iamVjdChwZ3BhX3Vucm9sbGVkX2pvaW4pOworCXVqb2lu LT5uaW5uZXIgPSBqb2luX3Vucm9sbGVyLT5udXNlZDsKKwl1am9pbi0+c3RyYXRlZ3kgPSBwYWxs b2MwX2FycmF5KHBncGFfam9pbl9zdHJhdGVneSwgam9pbl91bnJvbGxlci0+bnVzZWQpOworCXVq b2luLT5pbm5lciA9IHBhbGxvYzBfYXJyYXkocGdwYV9qb2luX21lbWJlciwgam9pbl91bnJvbGxl ci0+bnVzZWQpOworCisJLyogSGFuZGxlIHRoZSBvdXRlcm1vc3Qgam9pbi4gKi8KKwl1am9pbi0+ b3V0ZXIucGxhbiA9IGpvaW5fdW5yb2xsZXItPm91dGVyX3N1YnBsYW47CisJdWpvaW4tPm91dGVy LmVsaWRlZF9ub2RlID0gam9pbl91bnJvbGxlci0+b3V0ZXJfZWxpZGVkX25vZGU7CisJdWpvaW4t Pm91dGVyLnNjYW4gPQorCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+b3V0ZXIucGxh biwKKwkJCQkJCXVqb2luLT5vdXRlci5lbGlkZWRfbm9kZSwKKwkJCQkJCWpvaW5fdW5yb2xsZXIt Pm91dGVyX2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCXRydWUpOworCisJLyoKKwkgKiBXZSB3 YW50IHRoZSBqb2lucyBmcm9tIHRoZSBkZWVwZXN0IHBhcnQgb2YgdGhlIHBsYW4gdHJlZSB0byBh cHBlYXIKKwkgKiBmaXJzdCBpbiB0aGUgcmVzdWx0IG9iamVjdCwgYnV0IHRoZSBqb2luIHVucm9s bGVyIGFkZHMgdGhlbSBpbiBleGFjdGx5CisJICogdGhlIHJldmVyc2Ugb2YgdGhhdCBvcmRlciwg c28gd2UgbmVlZCB0byBmbGlwIHRoZSBvcmRlciBvZiB0aGUgYXJyYXlzCisJICogd2hlbiBjb25z dHJ1Y3RpbmcgdGhlIGZpbmFsIHJlc3VsdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgam9pbl91 bnJvbGxlci0+bnVzZWQ7ICsraSkKKwl7CisJCWludAkJCWsgPSBqb2luX3Vucm9sbGVyLT5udXNl ZCAtIGkgLSAxOworCisJCS8qIENvcHkgc3RyYXRlZ3ksIFBsYW4sIGFuZCBFbGlkZWROb2RlLiAq LworCQl1am9pbi0+c3RyYXRlZ3lbaV0gPSBqb2luX3Vucm9sbGVyLT5zdHJhdGVneVtrXTsKKwkJ dWpvaW4tPmlubmVyW2ldLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFuc1trXTsK KwkJdWpvaW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlID0gam9pbl91bnJvbGxlci0+aW5uZXJfZWxp ZGVkX25vZGVzW2tdOworCisJCS8qCisJCSAqIEZpbGwgaW4gcmVtYWluaW5nIGRldGFpbHMsIHVz aW5nIGVpdGhlciB0aGUgbmVzdGVkIGpvaW4gdW5yb2xsZXIsCisJCSAqIG9yIGJ5IGRlcml2aW5n IHRoZW0gZnJvbSB0aGUgcGxhbiBhbmQgZWxpZGVkIG5vZGVzLgorCQkgKi8KKwkJaWYgKGpvaW5f dW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1trXSAhPSBOVUxMKQorCQkJdWpvaW4tPmlubmVyW2ld LnVucm9sbGVkX2pvaW4gPQorCQkJCXBncGFfYnVpbGRfdW5yb2xsZWRfam9pbih3YWxrZXIsCisJ CQkJCQkJCQkJIGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1trXSk7CisJCWVsc2UKKwkJ CXVqb2luLT5pbm5lcltpXS5zY2FuID0KKwkJCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9p bi0+aW5uZXJbaV0ucGxhbiwKKwkJCQkJCQkJdWpvaW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlLAor CQkJCQkJCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXJba10sCisJCQkJ CQkJCXRydWUpOworCX0KKworCXJldHVybiB1am9pbjsKK30KKworLyoKKyAqIEZyZWUgbWVtb3J5 IGFsbG9jYXRlZCBmb3IgcGdwYV9qb2luX3Vucm9sbGVyLgorICovCit2b2lkCitwZ3BhX2Rlc3Ry b3lfam9pbl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7CisJ cGZyZWUoam9pbl91bnJvbGxlci0+c3RyYXRlZ3kpOworCXBmcmVlKGpvaW5fdW5yb2xsZXItPmlu bmVyX3N1YnBsYW5zKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMp OworCXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyk7CisJcGZyZWUoam9pbl91 bnJvbGxlcik7Cit9CisKKy8qCisgKiBJZGVudGlmeSB0aGUgam9pbiBzdHJhdGVneSB1c2VkIGJ5 IGEgam9pbiBhbmQgdGhlICJyZWFsIiBpbm5lciBhbmQgb3V0ZXIKKyAqIHBsYW5zLgorICoKKyAq IEZvciBleGFtcGxlLCBhIEhhc2ggSm9pbiBhbHdheXMgaGFzIGEgSGFzaCBub2RlIG9uIHRoZSBp bm5lciBzaWRlLCBidXQKKyAqIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgdGhlIHJlYWwg aW5uZXIgaW5wdXQgaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLAorICogbm90IHRoZSBIYXNoIG5v ZGUgaXRzZWxmLgorICoKKyAqIExpa2V3aXNlLCBhIE1lcmdlIEpvaW4gbWF5IGhhdmUgU29ydCBu b3RlIG9uIHRoZSBpbm5lciBvciBvdXRlciBzaWRlOyBpZgorICogaXQgZG9lcywgdGhlIHJlYWwg aW5wdXQgdG8gdGhlIGpvaW4gaXMgdGhlIFNvcnQgbm9kZSdzIGNoaWxkLCBub3QgdGhlCisgKiBT b3J0IG5vZGUgaXRzZWxmLgorICoKKyAqIEluIGFkZGl0aW9uLCB3aXRoIGEgTWVyZ2UgSm9pbiBv ciBhIE5lc3RlZCBMb29wLCB0aGUgam9pbiBwbGFubmluZyBjb2RlCisgKiBtYXkgYWRkIGFkZGl0 aW9uYWwgbm9kZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBvciBNZW1vaXplLiBXZSByZWdhcmQgdGhl c2UKKyAqIGFzIGFuIGFzcGVjdCBvZiB0aGUgam9pbiBzdHJhdGVneS4gQXMgaW4gdGhlIHByZXZp b3VzIGNhc2VzLCB0aGUgdHJ1ZSBpbnB1dAorICogdG8gdGhlIGpvaW4gaXMgdGhlIHVuZGVybHlp bmcgbm9kZS4KKyAqCisgKiBIb3dldmVyLCBpZiBhbnkgaW52b2x2ZWQgY2hpbGQgbm9kZSBwcmV2 aW91c2x5IGhhZCBhIG5vdy1lbGlkZWQgbm9kZSBzdGFja2VkCisgKiBvbiB0b3AsIHRoZW4gd2Ug Y2FuJ3QgImxvb2sgdGhyb3VnaCIgdGhhdCBub2RlIC0tIGluZGVlZCwgd2hhdCdzIGdvaW5nIHRv IGJlCisgKiByZWxldmFudCBmb3Igb3VyIHB1cnBvc2VzIGlzIHRoZSBFbGlkZWROb2RlIG9uIHRv cCBvZiB0aGF0IHBsYW4gbm9kZSwgcmF0aGVyCisgKiB0aGFuIHRoZSBwbGFuIG5vZGUgaXRzZWxm LgorICoKKyAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGlkZWQgbm9kZXMsIHdlIHdhbnQgdGhh dCBvbmUgdGhhdCB3b3VsZCBoYXZlIGJlZW4KKyAqIHVwcGVybW9zdCBpbiB0aGUgcGxhbiB0cmVl IHByaW9yIHRvIHNldHJlZnMgcHJvY2Vzc2luZzsgd2UgZXhwZWN0IHRvIGZpbmQKKyAqIHRoYXQg b25lIGxhc3QgaW4gdGhlIGxpc3Qgb2YgZWxpZGVkIG5vZGVzLgorICoKKyAqIE9uIHJldHVybiAq cmVhbG91dGVyIGFuZCAqcmVhbGlubmVyIHdpbGwgaGF2ZSBiZWVuIHNldCB0byB0aGUgcmVhbCBp bm5lcgorICogYW5kIHJlYWwgb3V0ZXIgcGxhbnMgdGhhdCB3ZSBpZGVudGlmaWVkLCBhbmQgKmVs aWRlZHJlYWxvdXRlciBhbmQKKyAqICplbGlkZWRyZWFsaW5uZXIgdG8gdGhlIGxhc3Qgb2YgYW55 IGNvcnJlc3BvZGluZyBlbGlkZWQgbm9kZXMuCisgKiBBZGRpdGlvbmFsbHksICpmb3VuZF9hbnlf b3V0ZXJfZ2F0aGVyIGFuZCAqZm91bmRfYW55X2lubmVyX2dhdGhlciB3aWxsCisgKiBiZSBzZXQg dG8gdHJ1ZSBpZiB3ZSBsb29rZWQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9k ZSBvbgorICogdGhhdCBzaWRlIG9mIHRoZSBqb2luLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICov CitzdGF0aWMgcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2RlY29tcG9zZV9qb2luKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQlQbGFuICoqcmVhbG91 dGVyLCBQbGFuICoqcmVhbGlubmVyLAorCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkcmVhbG91dGVy LCBFbGlkZWROb2RlICoqZWxpZGVkcmVhbGlubmVyLAorCQkJCQlib29sICpmb3VuZF9hbnlfb3V0 ZXJfZ2F0aGVyLCBib29sICpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKQoreworCVBsYW5uZWRTdG10 ICpwc3RtdCA9IHdhbGtlci0+cHN0bXQ7CisJSm9pblR5cGUJam9pbnR5cGUgPSAoKEpvaW4gKikg cGxhbiktPmpvaW50eXBlOworCVBsYW4JICAgKm91dGVycGxhbiA9IHBsYW4tPmxlZnR0cmVlOwor CVBsYW4JICAgKmlubmVycGxhbiA9IHBsYW4tPnJpZ2h0dHJlZTsKKwlFbGlkZWROb2RlICplbGlk ZWRvdXRlcjsKKwlFbGlkZWROb2RlICplbGlkZWRpbm5lcjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kg c3RyYXRlZ3k7CisJYm9vbAkJdW5pcXVlb3V0ZXI7CisJYm9vbAkJdW5pcXVlaW5uZXI7CisKKwll bGlkZWRvdXRlciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgb3V0ZXJwbGFuKTsKKwll bGlkZWRpbm5lciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgaW5uZXJwbGFuKTsKKwkq Zm91bmRfYW55X291dGVyX2dhdGhlciA9IGZhbHNlOworCSpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVy ID0gZmFsc2U7CisKKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfTWVyZ2VK b2luOgorCisJCQkvKgorCQkJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNl IGEgTWF0ZXJpYWwgbm9kZSBvbiB0aGUKKwkJCSAqIGlubmVyIHNpZGUgb2YgdGhlIE1lcmdlSm9p bjsgaWYgdGhpcyBpcyBwcmVzZW50LCB3ZSByZWNvcmQgaXQKKwkJCSAqIGFzIHBhcnQgb2YgdGhl IGpvaW4gc3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElz QShpbm5lcnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVz Y2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpTVFJBVF9NRVJH RV9KT0lOX01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5ID0gSlNUUkFU X01FUkdFX0pPSU5fUExBSU47CisKKwkJCS8qCisJCQkgKiBGb3IgYSBNZXJnZUpvaW4sIGVpdGhl ciB0aGUgb3V0ZXIgb3IgdGhlIGlubmVyIHN1YnBsYW4sIG9yCisJCQkgKiBib3RoLCBtYXkgaGF2 ZSBuZWVkZWQgdG8gYmUgc29ydGVkOyB3ZSBtdXN0IGRpc3JlZ2FyZCBhbnkgU29ydAorCQkJICog b3IgSW5jcmVtZW50YWxTb3J0IG5vZGUgdG8gZmluZCB0aGUgcmVhbCBpbm5lciBvciBvdXRlcgor CQkJICogc3VicGxhbi4KKwkJCSAqLworCQkJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNf c29ydGluZ19wbGFuKG91dGVycGxhbikpCisJCQkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRf bm9kZShwc3RtdCwgJm91dGVycGxhbik7CisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBp c19zb3J0aW5nX3BsYW4oaW5uZXJwbGFuKSkKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2Vu ZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9OZXN0TG9v cDoKKworCQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBwbGFjZSBh IE1hdGVyaWFsIG9yIE1lbW9pemUgbm9kZQorCQkJICogb24gdGhlIGlubmVyIHNpZGUgb2YgdGhl IE5lc3RMb29wOyBpZiB0aGlzIGlzIHByZXNlbnQsIHdlCisJCQkgKiByZWNvcmQgaXQgYXMgcGFy dCBvZiB0aGUgam9pbiBzdHJhdGVneS4KKwkJCSAqLworCQkJaWYgKGVsaWRlZGlubmVyID09IE5V TEwgJiYgSXNBKGlubmVycGxhbiwgTWF0ZXJpYWwpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0g cGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNU UkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZSBpZiAoZWxpZGVkaW5u ZXIgPT0gTlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBNZW1vaXplKSkKKwkJCXsKKwkJCQllbGlkZWRp bm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVn eSA9IEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0 ZWd5ID0gSlNUUkFUX05FU1RFRF9MT09QX1BMQUlOOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0hh c2hKb2luOgorCisJCQkvKgorCQkJICogVGhlIGlubmVyIHN1YnBsYW4gb2YgYSBIYXNoSm9pbiBp cyBhbHdheXMgYSBIYXNoIG5vZGU7IHRoZSByZWFsCisJCQkgKiBpbm5lciBzdWJwbGFuIGlzIHRo ZSBIYXNoIG5vZGUncyBjaGlsZC4KKwkJCSAqLworCQkJQXNzZXJ0KElzQShpbm5lcnBsYW4sIEhh c2gpKTsKKwkJCUFzc2VydChlbGlkZWRpbm5lciA9PSBOVUxMKTsKKwkJCWVsaWRlZGlubmVyID0g cGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJc3RyYXRlZ3kgPSBKU1RS QVRfSEFTSF9KT0lOOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCX0KKwor CS8qCisJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgZGVjaWRlZCB0byBpbXBsZW1lbnQgYSBzZW1p am9pbiBieSBmaXJzdCBtYWtpbmcKKwkgKiB0aGUgbnVsbGFibGUgc2lkZSBvZiB0aGUgcGxhbiB1 bmlxdWUsIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBub3JtYWwgam9pbgorCSAqIGFnYWluc3QgdGhl IHJlc3VsdC4gVGhlcmVmb3JlLCB3ZSBtaWdodCBuZWVkIHRvIGRlc2NlbmQgdGhyb3VnaCBhCisJ ICogdW5pcXVlIG5vZGUgb24gZWl0aGVyIHNpZGUgb2YgdGhlIHBsYW4uCisJICovCisJdW5pcXVl b3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJm91dGVycGxhbiwgJmVsaWRl ZG91dGVyKTsKKwl1bmlxdWVpbm5lciA9IHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAm aW5uZXJwbGFuLCAmZWxpZGVkaW5uZXIpOworCisJLyoKKwkgKiBUaGUgcGxhbm5lciBtYXkgaGF2 ZSBkZWNpZGVkIHRvIHBhcmFsbGVsaXplIHBhcnQgb2YgdGhlIGpvaW4gdHJlZSwgc28KKwkgKiB3 ZSBjb3VsZCBmaW5kIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIGhlcmUuIE5vdGUgdGhh dCwgaWYKKwkgKiBwcmVzZW50LCB0aGlzIHdpbGwgYXBwZWFyIGJlbG93IG5vZGVzIHdlIGNvbnNp ZGVyZWQgYXMgcGFydCBvZiB0aGUgam9pbgorCSAqIHN0cmF0ZWd5LCBidXQgd2UgY291bGQgZmlu ZCBhbm90aGVyIHVuaXF1ZW5lc3MtZW5mb3JjaW5nIG5vZGUgYmVsb3cgdGhlCisJICogR2F0aGVy IG9yIEdhdGhlciBNZXJnZSwgaWYgcHJlc2VudC4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0g TlVMTCkKKwl7CisJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIocHN0bXQs ICZvdXRlcnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X291dGVyX2dhdGhlcik7CisJCWlm IChmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShw c3RtdCwgJm91dGVycGxhbiwgJmVsaWRlZG91dGVyKSkKKwkJCXVuaXF1ZW91dGVyID0gdHJ1ZTsK Kwl9CisJaWYgKGVsaWRlZGlubmVyID09IE5VTEwpCisJeworCQllbGlkZWRpbm5lciA9IHBncGFf ZGVzY2VuZF9hbnlfZ2F0aGVyKHBzdG10LCAmaW5uZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZvdW5k X2FueV9pbm5lcl9nYXRoZXIpOworCQlpZiAoZm91bmRfYW55X2lubmVyX2dhdGhlciAmJgorCQkJ cGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRpbm5lcikp CisJCQl1bmlxdWVpbm5lciA9IHRydWU7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRo YXQgUmVzdWx0IG5vZGUgaGFzIGJlZW4gaW5zZXJ0ZWQgZWl0aGVyIHRvIHByb2plY3QgYQorCSAq IHRhcmdldCBsaXN0IG9yIHRvIGltcGxlbWVudCBhIG9uZS10aW1lIGZpbHRlci4gSWYgc28sIHdl IGNhbiBkZXNjZW5kCisJICogdGhyb3VnaHQgaXQuIE5vdGUgdGhhdCBhIHJlc3VsdCBub2RlIHdp dGhvdXQgYSBjaGlsZCB3b3VsZCBiZSBhCisJICogZGVnZW5lcmF0ZSBzY2FuIG9yIGpvaW4sIGFu ZCBub3Qgc29tZXRoaW5nIHdlIGNvdWxkIGRlc2NlbmQgdGhyb3VnaC4KKwkgKgorCSAqIFhYWC4g SSBzdXNwZWN0IGl0J3MgcG9zc2libGUgZm9yIHRoaXMgdG8gaGFwcGVuIGFib3ZlIHRoZSBHYXRo ZXIgb3IKKwkgKiBHYXRoZXIgTWVyZ2Ugbm9kZSwgdG9vLCBidXQgYXBwYXJlbnRseSB3ZSBoYXZl IG5vIHRlc3QgY2FzZSBmb3IgdGhhdAorCSAqIHNjZW5hcmlvLgorCSAqLworCWlmIChlbGlkZWRv dXRlciA9PSBOVUxMICYmIGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQob3V0ZXJwbGFuKSkKKwkJ ZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJm91dGVycGxhbik7CisJaWYg KGVsaWRlZGlubmVyID09IE5VTEwgJiYgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChpbm5lcnBs YW4pKQorCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFu KTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhIHNlbWlqb2luIHRoYXQgd2FzIGNvbnZlcnRlZCB0 byBhbiBpbm5lciBqb2luIGJ5IG1ha2luZyBvbmUKKwkgKiBzaWRlIG9yIHRoZSBvdGhlciB1bmlx dWUsIG1ha2UgYSBub3RlIHRoYXQgdGhlIGlubmVyIG9yIG91dGVyIHN1YnBsYW4sCisJICogYXMg YXBwcm9wcmlhdGUsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcXVlcnkgcGxhbiBmZWF0dXJlIHdo ZW4gdGhlIG1haW4KKwkgKiB0cmVlIHRyYXZlcnNhbCByZWFjaGVzIGl0LgorCSAqCisJICogQ29u dmVyc2VseSwgaWYgdGhlIHBsYW5uZXIgY291bGQgaGF2ZSBtYWRlIG9uZSBzaWRlIG9mIHRoZSBq b2luIHVuaXF1ZQorCSAqIGFuZCB0aGVyZWJ5IGNvbnZlcnRlZCBpdCB0byBhbiBpbm5lciBqb2lu LCBhbmQgY2hvc2Ugbm90IHRvIGRvIHNvLCB0aGF0CisJICogaXMgYWxzbyB3b3J0aCBub3Rpbmcu CisJICoKKwkgKiBOQjogVGhpcyBjb2RlIGNvdWxkIGFwcGVhciBzbGlnaHRseSBoaWdoZXIgdXAg aW4gaW4gdGhpcyBmdW5jdGlvbiwgYnV0CisJICogbm9uZSBvZiB0aGUgbm9kZXMgdGhyb3VnaCB3 aGljaCB3ZSBqdXN0IGRlc2NlbmRlZCBzaG91bGQgaGF2ZQorCSAqIGFzc29jaWF0ZWQgUlRJcy4K KwkgKgorCSAqIE5COiBUaGlzIHNlZW1zIGxpa2UgYSBzb21ld2hhdCBoYWNreSB3YXkgb2YgcGFz c2luZyBpbmZvcm1hdGlvbiB1cCB0bworCSAqIHRoZSBtYWluIHRyZWUgd2FsaywgYnV0IEkgZG9u J3QgY3VycmVudGx5IGhhdmUgYSBiZXR0ZXIgaWRlYS4KKwkgKi8KKwlpZiAodW5pcXVlb3V0ZXIp CisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX1VOSVFV RSwgb3V0ZXJwbGFuKTsKKwllbHNlIGlmIChqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkpCisJ CXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklR VUUsIG91dGVycGxhbik7CisJaWYgKHVuaXF1ZWlubmVyKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVh dHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1JSk9JTl9VTklRVUUsIGlubmVycGxhbik7CisJZWxzZSBp ZiAoam9pbnR5cGUgPT0gSk9JTl9TRU1JKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxr ZXIsIFBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFLCBpbm5lcnBsYW4pOworCisJLyogU2V0IG91 dHB1dCBwYXJhbWV0ZXJzLiAqLworCSpyZWFsb3V0ZXIgPSBvdXRlcnBsYW47CisJKnJlYWxpbm5l ciA9IGlubmVycGxhbjsKKwkqZWxpZGVkcmVhbG91dGVyID0gZWxpZGVkb3V0ZXI7CisJKmVsaWRl ZHJlYWxpbm5lciA9IGVsaWRlZGlubmVyOworCXJldHVybiBzdHJhdGVneTsKK30KKworLyoKKyAq IERlc2NlbmQgdGhyb3VnaCBhIFBsYW4gbm9kZSBpbiBhIGpvaW4gdHJlZSB0aGF0IHRoZSBjYWxs ZXIgaGFzIGRldGVybWluZWQKKyAqIHRvIGJlIGlycmVsZXZhbnQuCisgKgorICogVXBkYXRlcyAq cGxhbiwgYW5kIHJldHVybnMgdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBwZXJ0YWluaW5n IHRvIHRoZQorICogbmV3IHBsYW4gbm9kZS4KKyAqLworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdw YV9kZXNjZW5kX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbikKK3sKKwkqcGxh biA9ICgqcGxhbiktPmxlZnR0cmVlOworCXJldHVybiBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0 bXQsICpwbGFuKTsKK30KKworLyoKKyAqIERlc2NlbmQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRo ZXIgTWVyZ2Ugbm9kZSwgaWYgcHJlc2VudCwgYW5kIGFueSBTb3J0CisgKiBvciBJbmNyZW1lbnRh bFNvcnQgbm9kZSBvY2N1cnJpbmcgdW5kZXIgYSBHYXRoZXIgTWVyZ2UuCisgKgorICogQ2FsbGVy IHNob3VsZCBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlcmUgaXMgbm8gRWxpZGVkTm9kZSBwZXJ0YWlu aW5nIHRvCisgKiB0aGUgaW5pdGlhbCB2YWx1ZSBvZiAqcGxhbi4KKyAqCisgKiBVcGRhdGVzICpw bGFuLCBhbmQgcmV0dXJucyB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcg dG8gdGhlCisgKiBuZXcgcGxhbiBub2RlLiBTZXRzICpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1ZSBp ZiBlaXRoZXIgR2F0aGVyIG9yCisgKiBHYXRoZXIgTWVyZ2Ugd2FzIGZvdW5kLCBhbmQgb3RoZXJ3 aXNlIGxlYXZlcyBpdCB1bmNoYW5nZWQuCisgKi8KK3N0YXRpYyBFbGlkZWROb2RlICoKK3BncGFf ZGVzY2VuZF9hbnlfZ2F0aGVyKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJ CQlib29sICpmb3VuZF9hbnlfZ2F0aGVyKQoreworCWlmIChJc0EoKnBsYW4sIEdhdGhlcikpCisJ eworCQkqZm91bmRfYW55X2dhdGhlciA9IHRydWU7CisJCXJldHVybiBwZ3BhX2Rlc2NlbmRfbm9k ZShwc3RtdCwgcGxhbik7CisJfQorCisJaWYgKElzQSgqcGxhbiwgR2F0aGVyTWVyZ2UpKQorCXsK KwkJRWxpZGVkTm9kZSAqZWxpZGVkID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOwor CisJCWlmIChlbGlkZWQgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4oKnBsYW4pKQorCQkJZWxp ZGVkID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOworCisJCSpmb3VuZF9hbnlfZ2F0 aGVyID0gdHJ1ZTsKKwkJcmV0dXJuIGVsaWRlZDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwor LyoKKyAqIElmICpwbGFuIGlzIGFuIEFnZyBvciBVbmlxdWUgbm9kZSwgd2Ugd2FudCB0byBkZXNj ZW5kIHRocm91Z2ggaXQsIHVubGVzcworICogaXQgaGFzIGEgY29ycmVzcG9uZGluZyBlbGlkZWQg bm9kZS4gSWYgaXRzIGltbWVkaWF0ZSBjaGlsZCBpcyBhIFNvcnQgb3IKKyAqIEluY3JlbWVudGFs U29ydCwgd2UgYWxzbyB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCB0aGF0LCB1bmxlc3MgaXQgaGFz IGEKKyAqIGNvcnJlc3BvbmRpbmcgZWxpZGVkIG5vZGUuCisgKgorICogT24gZW50cnksICplbGlk ZWRfbm9kZSBtdXN0IGJlIHRoZSBsYXN0IG9mIGFueSBlbGlkZWQgbm9kZXMgY29ycmVzcG9uZGlu ZworICogdG8gKnBsYW47IG9uIGV4aXQsIHRoaXMgd2lsbCBzdGlsbCBiZSB0cnVlLCBidXQgKnBs YW4gbWF5IGhhdmUgYmVlbiB1cGRhdGVkLgorICoKKyAqIFRoZSByZWFzb24gd2UgZG9uJ3Qgd2Fu dCB0byBkZXNjZW5kIHRocm91Z2ggZWxpZGVkIG5vZGVzIGlzIHRoYXQgYSBzaW5nbGUKKyAqIGpv aW4gdHJlZSBjYW4ndCBjcm9zcyB0aHJvdWdoIGFueSBzb3J0IG9mIGVsaWRlZCBub2RlOiBzdWJx dWVyaWVzIGFyZQorICogcGxhbm5lZCBzZXBhcmF0ZWx5LCBhbmQgcGxhbm5pbmcgaW5zaWRlIGFu IEFwcGVuZCBvciBNZXJnZUFwcGVuZCBpcworICogc2VwYXJhdGUgZnJvbSBwbGFubmluZyBvdXRz aWRlIG9mIGl0LgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiB3ZSBkZXNjZW5k IHRocm91Z2ggYSBub2RlIHRoYXQgd2UgYmVsaWV2ZSBpcworICogbWFraW5nIG9uZSBzaWRlIG9m IGEgc2VtaWpvaW4gdW5pcXVlLCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgorICovCitzdGF0aWMgYm9v bAorcGdwYV9kZXNjZW5kX2FueV91bmlxdWUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxh biwKKwkJCQkJCUVsaWRlZE5vZGUgKiplbGlkZWRfbm9kZSkKK3sKKwlib29sCQlkZXNjZW5kID0g ZmFsc2U7CisJYm9vbAkJc2p1bmlxdWUgPSBmYWxzZTsKKworCWlmICgqZWxpZGVkX25vZGUgIT0g TlVMTCkKKwkJcmV0dXJuIHNqdW5pcXVlOworCisJaWYgKElzQSgqcGxhbiwgVW5pcXVlKSkKKwl7 CisJCWRlc2NlbmQgPSB0cnVlOworCQlzanVuaXF1ZSA9IHRydWU7CisJfQorCWVsc2UgaWYgKElz QSgqcGxhbiwgQWdnKSkKKwl7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBzaW1wbGUgQWdnIG5v ZGUsIHRoZW4gYXNzdW1lIGl0J3MgaGVyZSB0byBpbXBsZW1lbnQKKwkJICogc2VtaWpvaW4gdW5p cXVlbmVzcy4gT3RoZXJ3aXNlLCBhc3N1bWUgaXQncyBjb21wbGV0aW5nIGFuIGVhZ2VyCisJCSAq IGFnZ3JlZ2F0aW9uIG9yIHBhcnRpdGlvbndpc2UgYWdncmVnYXRpb24gb3BlcmF0aW9uIHRoYXQg YmVnYW4gYXQgYQorCQkgKiBoaWdoZXIgbGV2ZWwgb2YgdGhlIHBsYW4gdHJlZS4KKwkJICoKKwkJ ICogWFhYLiBJIHN1c3BlY3QgdGhpcyBsb2dpYyBkb2VzIG5vdCBjb3ZlciBhbGwgY2FzZXM6IGNv dWxkbid0IFNKCisJCSAqIHVuaXF1ZW5lc3MgYmUgaW1wbGVtZW50ZWQgaW4gdHdvIHN0ZXBzIHdp dGggYW4gaW50ZXJtZWRpYXRlIEdhdGhlcj8KKwkJICovCisJCWRlc2NlbmQgPSB0cnVlOworCQlz anVuaXF1ZSA9ICgoKEFnZyAqKSAqcGxhbiktPmFnZ3NwbGl0ID09IEFHR1NQTElUX1NJTVBMRSk7 CisJfQorCisJaWYgKGRlc2NlbmQpCisJeworCQkqZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRf bm9kZShwc3RtdCwgcGxhbik7CisKKwkJaWYgKCplbGlkZWRfbm9kZSA9PSBOVUxMICYmIGlzX3Nv cnRpbmdfcGxhbigqcGxhbikpCisJCQkqZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRfbm9kZShw c3RtdCwgcGxhbik7CisJfQorCisJcmV0dXJuIHNqdW5pcXVlOworfQorCisvKgorICogSXMgdGhp cyBhIFJlc3VsdCBub2RlIHRoYXQgaGFzIGEgY2hpbGQ/CisgKi8KK3N0YXRpYyBib29sCitpc19y ZXN1bHRfbm9kZV93aXRoX2NoaWxkKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBS ZXN1bHQpICYmIHBsYW4tPmxlZnR0cmVlICE9IE5VTEw7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEg UGxhbiBub2RlIHdob3NlIHB1cnBvc2UgaXMgcHV0IHRoZSBkYXRhIGluIGEgY2VydGFpbiBvcmRl cj8KKyAqLworc3RhdGljIGJvb2wKK2lzX3NvcnRpbmdfcGxhbihQbGFuICpwbGFuKQoreworCXJl dHVybiBJc0EocGxhbiwgU29ydCkgfHwgSXNBKHBsYW4sIEluY3JlbWVudGFsU29ydCk7Cit9CmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNGRjNzI5ODZhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfam9pbi5oCkBAIC0wLDAgKzEsMTA1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBwZ3BhX2pvaW4uaAorICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQbGFuIHRyZWVz CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5o CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9KT0lOX0gKKyNkZWZp bmUgUEdQQV9KT0lOX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorCit0eXBlZGVm IHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 OwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9qb2luX3Vucm9sbGVyIHBncGFfam9pbl91bnJvbGxlcjsK K3R5cGVkZWYgc3RydWN0IHBncGFfdW5yb2xsZWRfam9pbiBwZ3BhX3Vucm9sbGVkX2pvaW47CisK Ky8qCisgKiBBbHRob3VnaCB0aGVyZSBhcmUgdGhyZWUgbWFpbiBqb2luIHN0cmF0ZWdpZXMsIHdl IHRyeSB0byBjbGFzc2lmeSB0aGluZ3MKKyAqIG1vcmUgcHJlY2lzZWx5IGhlcmU6IG1lcmdlIGpv aW5zIGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBtYXRlcmlhbGl6YXRpb24KKyAqIG9uIHRoZSBp bm5lciBzaWRlLCBhbmQgbmVzdGVkIGxvb3BzIGNhbiB1c2UgZWl0aGVyIG1hdGVyaWFsaXphdGlv biBvcgorICogbWVtb2l6YXRpb24uCisgKi8KK3R5cGVkZWYgZW51bQoreworCUpTVFJBVF9NRVJH RV9KT0lOX1BMQUlOID0gMCwKKwlKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwlKU1RS QVRfTkVTVEVEX0xPT1BfUExBSU4sCisJSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAor CUpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFLAorCUpTVFJBVF9IQVNIX0pPSU4KKwkvKiB1cGRh dGUgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8KK30g cGdwYV9qb2luX3N0cmF0ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX0pPSU5fU1RSQVRFR1kJCSgo aW50KSBKU1RSQVRfSEFTSF9KT0lOICsgMSkKKworLyoKKyAqIEluIGFuIG91dGVyLWRlZXAgam9p biB0cmVlLCBldmVyeSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiB3aWxsIGJlIGEgc2NhbiwK KyAqIGJ1dCBqb2luIHRyZWVzIHdpdGggb3RoZXIgc2hhcGVzIGNhbiBjb250YWluIHVucm9sbGVk IGpvaW5zLgorICoKKyAqIFRoZSBwbGFuIG5vZGUgd2Ugc3RvcmUgaGVyZSB3aWxsIGJlIHRoZSBp bm5lciBvciBvdXRlciBjaGlsZCBvZiB0aGUgam9pbgorICogbm9kZSwgYXMgYXBwcm9wcmlhdGUs IGV4Y2VwdCB0aGF0IHdlIGxvb2sgdGhyb3VnaCBzdWJub2RlcyB0aGF0IHdlIHJlZ2FyZCBhcwor ICogcGFydCBvZiB0aGUgam9pbiBtZXRob2QgaXRzZWxmLiBGb3IgaW5zdGFuY2UsIGZvciBhIE5l c3RlZCBMb29wIHRoYXQKKyAqIG1hdGVyaWFsaXplcyB0aGUgaW5uZXIgaW5wdXQsIHdlJ2xsIHN0 b3JlIHRoZSBjaGlsZCBvZiB0aGUgTWF0ZXJpYWxpemUgbm9kZSwKKyAqIG5vdCB0aGUgTWF0ZXJp YWxpemUgbm9kZSBpdHNlbGYuCisgKgorICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBv bmUgb3IgbW9yZSBub2RlcyBmcm9tIHRoZSBwbGFuIHRyZWUsIHRoZW4KKyAqIHdlJ2xsIHN0b3Jl IGRldGFpbHMgYWJvdXQgdGhlIHRvcG1vc3Qgb2YgdGhvc2UgaW4gZWxpZGVkX25vZGU7IG90aGVy d2lzZSwKKyAqIGl0IHdpbGwgYmUgTlVMTC4KKyAqCisgKiBFeGFjdGx5IG9uZSBvZiBzY2FuIGFu ZCB1bnJvbGxlZF9qb2luIHdpbGwgYmUgbm9uLU5VTEwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7 CisJUGxhbgkgICAqcGxhbjsKKwlFbGlkZWROb2RlICplbGlkZWRfbm9kZTsKKwlzdHJ1Y3QgcGdw YV9zY2FuICpzY2FuOworCXBncGFfdW5yb2xsZWRfam9pbiAqdW5yb2xsZWRfam9pbjsKK30gcGdw YV9qb2luX21lbWJlcjsKKworLyoKKyAqIFdlIGNvbnZlcnQgb3V0ZXItZGVlcCBqb2luIHRyZWVz IHRvIGEgZmxhdCBzdHJ1Y3R1cmU7IHRoYXQgaXMsICgoQSBKT0lOIEIpCisgKiBKT0lOIEMpIEpP SU4gRCBnZXRzIGNvbnZlcnRlZCB0byBvdXRlciA9IEEsIGlubmVyID0gPEIgQyBEPi4gIFdoZW4g am9pbnMKKyAqIGFyZW4ndCBvdXRlci1kZWVwLCBzdWJzdHJ1Y3R1cmUgaXMgcmVxdWlyZWQsIGUu Zy4gKEEgSk9JTiBCKSBKT0lOIChDIEpPSU4gRCkKKyAqIGlzIHJlcHJlc2VudGVkIGFzIG91dGVy ID0gQSwgaW5uZXIgPSA8QiBYPiwgd2hlcmUgWCBpcyBhIHBncGFfdW5yb2xsZWRfam9pbgorICog Y292ZXJpbmcgQy1ELgorICovCitzdHJ1Y3QgcGdwYV91bnJvbGxlZF9qb2luCit7CisJLyogT3V0 ZXJtb3N0IG1lbWJlcjsgbXVzdCBub3QgaXRzZWxmIGJlIGFuIHVucm9sbGVkIGpvaW4uICovCisJ cGdwYV9qb2luX21lbWJlciBvdXRlcjsKKworCS8qIE51bWJlciBvZiBpbm5lciBtZW1iZXJzLiBM ZW5ndGggb2YgdGhlIHN0cmF0ZWd5IGFuZCBpbm5lciBhcnJheXMuICovCisJdW5zaWduZWQJbmlu bmVyOworCisJLyogQXJyYXkgb2Ygc3RyYXRlZ2llcywgb25lIHBlciBub24tb3V0ZXJtb3N0IG1l bWJlci4gKi8KKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCisJLyogQXJyYXkgb2Yg bWVtYmVycywgZXhjbHVkaW5nIHRoZSBvdXRlcm1vc3QuIERlZXBlc3QgZmlyc3QuICovCisJcGdw YV9qb2luX21lbWJlciAqaW5uZXI7Cit9OworCisvKgorICogRG9lcyB0aGlzIHBsYW4gbm9kZSBp bmhlcml0IGZyb20gSm9pbj8KKyAqLworc3RhdGljIGlubGluZSBib29sCitwZ3BhX2lzX2pvaW4o UGxhbiAqcGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIE5lc3RMb29wKSB8fCBJc0EocGxhbiwg TWVyZ2VKb2luKSB8fCBJc0EocGxhbiwgSGFzaEpvaW4pOworfQorCitleHRlcm4gcGdwYV9qb2lu X3Vucm9sbGVyICpwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKHZvaWQpOworZXh0ZXJuIHZvaWQg cGdwYV91bnJvbGxfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJ CQkgUGxhbiAqcGxhbiwgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkJIHBncGFfam9p bl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoq b3V0ZXJfam9pbl91bnJvbGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoqaW5uZXJf am9pbl91bnJvbGxlcik7CitleHRlcm4gcGdwYV91bnJvbGxlZF9qb2luICpwZ3BhX2J1aWxkX3Vu cm9sbGVkX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJ CQkJcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKK2V4dGVybiB2b2lkIHBncGFf ZGVzdHJveV9qb2luX3Vucm9sbGVyKHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcik7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1 dC5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OWE2NzVmZjkzZQotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpAQCAtMCwwICsxLDYyOCBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9vdXRwdXQuYworICoJICBwcm9kdWNlIHRl eHR1YWwgb3V0cHV0IGZyb20gdGhlIHJlc3VsdHMgb2YgYSBwbGFuIHRyZWUgd2FsaworICoKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNs dWRlICJwZ3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorCisjaW5jbHVkZSAi bm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCisv KgorICogQ29udGV4dCBvYmplY3QgZm9yIHRleHR1YWwgYWR2aWNlIGdlbmVyYXRpb24uCisgKgor ICogcnRfaWRlbnRpZmllcnMgaXMgdGhlIGNhbGxlci1wcm92aWRlZCBhcnJheSBvZiByYW5nZSB0 YWJsZSBpZGVudGlmaWVycy4KKyAqIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZiBwZ3Bh X2lkZW50aWZpZXIuYyBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGJ1ZiBpcyB0aGUgY2FsbGVy LXByb3ZpZGVkIG91dHB1dCBidWZmZXIuCisgKgorICogd3JhcF9jb2x1bW4gaXMgdGhlIHdyYXAg Y29sdW1uLCBzbyB0aGF0IHdlIGRvbid0IGNyZWF0ZSBvdXRwdXQgdGhhdCBpcworICogdG9vIHdp ZGUuIFNlZSBwZ3BhX21heWJlX2xpbmVicmVhaygpIGFuZCBjb21tZW50cyBpbiBwZ3BhX291dHB1 dF9hZHZpY2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfb3V0cHV0X2NvbnRleHQKK3sKKwlj b25zdCBjaGFyICoqcmlkX3N0cmluZ3M7CisJU3RyaW5nSW5mbwlidWY7CisJaW50CQkJd3JhcF9j b2x1bW47Cit9IHBncGFfb3V0cHV0X2NvbnRleHQ7CisKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0 X3Vucm9sbGVkX2pvaW4ocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCSAg cGdwYV91bnJvbGxlZF9qb2luICpqb2luKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X2pvaW5f bWVtYmVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQlwZ3BhX2pvaW5f bWVtYmVyICptZW1iZXIpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneShw Z3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRl Z3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkgIExpc3QgKnNjYW5zKTsKK3N0YXRpYyB2b2lkIHBncGFf b3V0cHV0X2JpdG1hcF9pbmRleF9kZXRhaWxzKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQs CisJCQkJCQkJCQkJCSBQbGFuICpwbGFuKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3JlbGF0 aW9uX25hbWUocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKTsKK3N0YXRp YyB2b2lkIHBncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUocGdwYV9vdXRwdXRfY29udGV4dCAqY29u dGV4dCwKKwkJCQkJCQkJCSAgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQkgIExpc3QgKnF1 ZXJ5X2ZlYXR1cmVzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3NpbXBsZV9zdHJhdGVneShw Z3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJCWNoYXIgKnN0cmF0ZWd5LAor CQkJCQkJCQkJCUxpc3QgKnJlbGlkX3NldHMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfbm9f Z2F0aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCSAgQml0bWFwc2V0 ICpyZWxpZHMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBncGFfb3V0cHV0 X2NvbnRleHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCQkgIEJpdG1hcHNldCAq cmVsaWRzKTsKKworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHBncGFf am9pbl9zdHJhdGVneSBzdHJhdGVneSk7CitzdGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX3NjYW5f c3RyYXRlZ3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFyICpwZ3Bh X2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBlKTsKKworc3RhdGlj IHZvaWQgcGdwYV9tYXliZV9saW5lYnJlYWsoU3RyaW5nSW5mbyBidWYsIGludCB3cmFwX2NvbHVt bik7CisKKy8qCisgKiBBcHBlbmQgcXVlcnkgYWR2aWNlIHRvIHRoZSBwcm92aWRlZCBidWZmZXIu CisgKgorICogQmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgJ3dhbGtlcicgbXVzdCBiZSB1 c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUKKyAqIG1haW4gcGxhbiB0cmVlIGFuZCBhbGwgc3VicGxh bnMgZnJvbSB0aGUgUGxhbm5lZFN0bXQuCisgKgorICogJ3J0X2lkZW50aWZpZXJzJyBpcyBhIHRh YmxlIG9mIHVuaXF1ZSBpZGVudGlmaWVycywgb25lIGZvciBlYWNoIFJUSS4KKyAqIFNlZSBwZ3Bh X2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KCkuCisgKgorICogUmVzdWx0cyB3 aWxsIGJlIGFwcGVuZGVkIHRvICdidWYnLgorICovCit2b2lkCitwZ3BhX291dHB1dF9hZHZpY2Uo U3RyaW5nSW5mbyBidWYsIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCSAg IHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5n dGggPSBsaXN0X2xlbmd0aCh3YWxrZXItPnBzdG10LT5ydGFibGUpOworCUxpc3RDZWxsICAgKmxj OworCXBncGFfb3V0cHV0X2NvbnRleHQgY29udGV4dDsKKworCS8qIEJhc2ljIGluaXRpYWxpemF0 aW9uLiAqLworCW1lbXNldCgmY29udGV4dCwgMCwgc2l6ZW9mKHBncGFfb3V0cHV0X2NvbnRleHQp KTsKKwljb250ZXh0LmJ1ZiA9IGJ1ZjsKKworCS8qCisJICogQ29udmVydCBpZGVudGlmaWVycyB0 byBzdHJpbmcgZm9ybS4gTm90ZSB0aGF0IHRoZSBsb29wIHZhcmlhYmxlIGhlcmUgaXMKKwkgKiBu b3QgYW4gUlRJLCBiZWNhdXNlIFJUSXMgYXJlIDEtYmFzZWQuIFNvbWUgUlRJcyB3aWxsIGhhdmUg bm8KKwkgKiBpZGVudGlmaWVyLCBlaXRoZXIgYmVjYXVzZSB0aGUgcmVsb3B0a2luZCBpcyBSVEVf Sk9JTiBvciBiZWNhdXNlIHRoYXQKKwkgKiBwb3J0aW9uIG9mIHRoZSBxdWVyeSBkaWRuJ3QgbWFr ZSBpdCBpbnRvIHRoZSBmaW5hbCBwbGFuLgorCSAqLworCWNvbnRleHQucmlkX3N0cmluZ3MgPSBw YWxsb2MwX2FycmF5KGNvbnN0IGNoYXIgKiwgcnRhYmxlX2xlbmd0aCk7CisJZm9yIChpbnQgaSA9 IDA7IGkgPCBydGFibGVfbGVuZ3RoOyArK2kpCisJCWlmIChydF9pZGVudGlmaWVyc1tpXS5hbGlh c19uYW1lICE9IE5VTEwpCisJCQljb250ZXh0LnJpZF9zdHJpbmdzW2ldID0gcGdwYV9pZGVudGlm aWVyX3N0cmluZygmcnRfaWRlbnRpZmllcnNbaV0pOworCisJLyoKKwkgKiBJZiB0aGUgdXNlciBj aG9vc2VzIHRvIHVzZSBFWFBMQUlOIChQTEFOX0FEVklDRSkgaW4gYW4gODAtY29sdW1uIHdpbmRv dworCSAqIGZyb20gYSBwc3FsIGNsaWVudCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MsIHBzcWwgd2ls bCBhZGQgb25lIHNwYWNlIHRvCisJICogdGhlIGxlZnQgb2YgdGhlIG91dHB1dCBhbmQgRVhQTEFJ TiB3aWxsIGFkZCB0d28gbW9yZSB0byB0aGUgbGVmdCBvZiB0aGUKKwkgKiBhZHZpY2UuIFRodXMs IGxpbmVzIG9mIG1vcmUgdGhhbiA3NyBjaGFyYWN0ZXJzIHdpbGwgd3JhcC4gV2Ugc2V0IHRoZQor CSAqIHdyYXAgbGltaXQgdG8gNzYgaGVyZSBzbyB0aGF0IHRoZSBvdXRwdXQgd29uJ3QgcmVhY2gg YWxsIHRoZSB3YXkgdG8gdGhlCisJICogdmVyeSBsYXN0IGNvbHVtbiBvZiB0aGUgdGVybWluYWwu CisJICoKKwkgKiBPZiBjb3Vyc2UsIHRoaXMgaXMgZmFpcmx5IGFyYml0cmFyeSBzZXQgb2YgYXNz dW1wdGlvbnMsIGFuZCBvbmUgY291bGQKKwkgKiB3ZWxsIG1ha2UgYW4gYXJndW1lbnQgZm9yIGEg ZGlmZmVyZW50IHdyYXAgbGltaXQsIG9yIGZvciBhIGNvbmZpZ3VyYWJsZQorCSAqIG9uZS4KKwkg Ki8KKwljb250ZXh0LndyYXBfY29sdW1uID0gNzY7CisKKwkvKgorCSAqIEVhY2ggcGllY2Ugb2Yg Sk9JTl9PUkRFUigpIGFkdmljZSBmdWxseSBkZXNjcmliZXMgdGhlIGpvaW4gb3JkZXIgZm9yIGEK KwkgKiBhIHNpbmdsZSB1bnJvbGxlZCBqb2luLiBNZXJnaW5nIGlzIG5vdCBwZXJtaXR0ZWQsIGJl Y2F1c2UgdGhhdCB3b3VsZAorCSAqIGNoYW5nZSB0aGUgbWVhbmluZywgZS5nLiBTRVFfU0NBTihh IGIgYyBkKSBtZWFucyBzaW1wbHkgdGhhdCBzZXF1ZW50aWFsCisJICogc2NhbnMgc2hvdWxkIGJl IHVzZWQgZm9yIGFsbCBvZiB0aG9zZSByZWxhdGlvbnMsIGFuZCBpcyB0aHVzIGVxdWl2YWxlbnQK KwkgKiB0byBTRVFfU0NBTihhIGIpIFNFUV9TQ0FOKGMgZCksIGJ1dCBKT0lOX09SREVSKGEgYiBj IGQpIG1lYW5zIHRoYXQgImEiCisJICogaXMgdGhlIGRyaXZpbmcgdGFibGUgd2hpY2ggaXMgdGhl biBqb2luZWQgdG8gImIiIHRoZW4gImMiIHRoZW4gImQiLAorCSAqIHdoaWNoIGlzIHRvdGFsbHkg ZGlmZmVyZW50IGZyb20gSk9JTl9PUkRFUihhIGIpIGFuZCBKT0lOX09SREVSKGMgZCkuCisJICov CisJZm9yZWFjaChsYywgd2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucykKKwl7CisJCXBn cGFfdW5yb2xsZWRfam9pbiAqdWpvaW4gPSBsZmlyc3QobGMpOworCisJCWlmIChidWYtPmxlbiA+ IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICdcbicpOworCQlhcHBlbmRTdHJpbmdJ bmZvKGNvbnRleHQuYnVmLCAiSk9JTl9PUkRFUigiKTsKKwkJcGdwYV9vdXRwdXRfdW5yb2xsZWRf am9pbigmY29udGV4dCwgdWpvaW4pOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LmJ1 ZiwgJyknKTsKKwkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC5idWYsIGNvbnRleHQud3Jh cF9jb2x1bW4pOworCX0KKworCS8qIEVtaXQgam9pbiBzdHJhdGVneSBhZHZpY2UuICovCisJZm9y IChpbnQgcyA9IDA7IHMgPCBOVU1fUEdQQV9KT0lOX1NUUkFURUdZOyArK3MpCisJeworCQljaGFy CSAgICpzdHJhdGVneSA9IHBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHMpOworCisJCXBncGFf b3V0cHV0X3NpbXBsZV9zdHJhdGVneSgmY29udGV4dCwKKwkJCQkJCQkJCXN0cmF0ZWd5LAorCQkJ CQkJCQkJd2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbc10pOworCX0KKworCS8qCisJICogRW1pdCBz Y2FuIHN0cmF0ZWd5IGFkdmljZSAoYnV0IG5vdCBmb3Igb3JkaW5hcnkgc2NhbnMsIHdoaWNoIGFy ZQorCSAqIGRlZmluaXRpb25hbGx5IHVuaW50ZXJlc3RpbmcpLgorCSAqLworCWZvciAoaW50IGMg PSAwOyBjIDwgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWTsgKytjKQorCQlpZiAoYyAhPSBQR1BBX1ND QU5fT1JESU5BUlkpCisJCQlwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KCZjb250ZXh0LCBjLCB3 YWxrZXItPnNjYW5zW2NdKTsKKworCS8qIEVtaXQgcXVlcnkgZmVhdHVyZSBhZHZpY2UuICovCisJ Zm9yIChpbnQgdCA9IDA7IHQgPCBOVU1fUEdQQV9RRl9UWVBFUzsgKyt0KQorCQlwZ3BhX291dHB1 dF9xdWVyeV9mZWF0dXJlKCZjb250ZXh0LCB0LCB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3RdKTsK KworCS8qIEVtaXQgTk9fR0FUSEVSIGFkdmljZS4gKi8KKwlwZ3BhX291dHB1dF9ub19nYXRoZXIo JmNvbnRleHQsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30KKworLyoKKyAqIE91dHB1dCB0 aGUgbWVtYmVycyBvZiBhbiB1bnJvbGxlZCBqb2luLCBmaXJzdCB0aGUgb3V0ZXJtb3N0IG1lbWJl ciwgYW5kCisgKiB0aGVuIHRoZSBpbm5lciBtZW1iZXJzIG9uZSBieSBvbmUsIGFzIHBhcnQgb2Yg Sk9JTl9PUkRFUigpIGFkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3Vucm9s bGVkX2pvaW4ocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV91bnJv bGxlZF9qb2luICpqb2luKQoreworCXBncGFfb3V0cHV0X2pvaW5fbWVtYmVyKGNvbnRleHQsICZq b2luLT5vdXRlcik7CisKKwlmb3IgKGludCBrID0gMDsgayA8IGpvaW4tPm5pbm5lcjsgKytrKQor CXsKKwkJcGdwYV9qb2luX21lbWJlciAqbWVtYmVyID0gJmpvaW4tPmlubmVyW2tdOworCisJCXBn cGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOwor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCXBncGFfb3V0cHV0 X2pvaW5fbWVtYmVyKGNvbnRleHQsIG1lbWJlcik7CisJfQorfQorCisvKgorICogT3V0cHV0IGEg c2luZ2xlIG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIGFzIHBhcnQgb2YgSk9JTl9PUkRFUigp IGFkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X2pvaW5fbWVtYmVyKHBncGFf b3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIp Cit7CisJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9q b2luKGNvbnRleHQsIG1lbWJlci0+dW5yb2xsZWRfam9pbik7CisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwl9CisJZWxzZQorCXsKKwkJcGdwYV9zY2FuICAqc2Nh biA9IG1lbWJlci0+c2NhbjsKKworCQlBc3NlcnQoc2NhbiAhPSBOVUxMKTsKKwkJaWYgKGJtc19t ZW1iZXJzaGlwKHNjYW4tPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0cHV0 X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCWVsc2UK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAneycpOworCQkJcGdw YV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ30nKTsKKwkJfQorCX0KK30K KworLyoKKyAqIE91dHB1dCBhZHZpY2UgZm9yIGEgTGlzdCBvZiBwZ3BhX3NjYW4gb2JqZWN0cy4K KyAqCisgKiBBbGwgdGhlIHNjYW5zIG11c3QgdXNlIHRoZSBzdHJhdGVneSBzcGVjaWZpZWQgYnkg dGhlICJzdHJhdGVneSIgYXJndW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9z Y2FuX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkgIHBncGFf c2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAgTGlzdCAqc2NhbnMpCit7CisJYm9vbAkJ Zmlyc3QgPSB0cnVlOworCisJaWYgKHNjYW5zID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYgKGNv bnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVm LCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsCisJCQkJCSBw Z3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShzdHJhdGVneSkpOworCisJZm9yZWFjaF9wdHIocGdw YV9zY2FuLCBzY2FuLCBzY2FucykKKwl7CisJCVBsYW4JICAgKnBsYW4gPSBzY2FuLT5wbGFuOwor CisJCWlmIChmaXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9t YXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQkvKiBPdXRw dXQgdGhlIHJlbGF0aW9uIGlkZW50aWZpZXJzLiAqLworCQlpZiAoYm1zX21lbWJlcnNoaXAoc2Nh bi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNv bnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9yZWxh dGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisKKwkJLyogRm9yIHNjYW5zIGlu dm9sdmluZyBpbmRleGVzLCBvdXRwdXQgaW5kZXggaW5mb3JtYXRpb24uICovCisJCWlmIChzdHJh dGVneSA9PSBQR1BBX1NDQU5fSU5ERVgpCisJCXsKKwkJCUFzc2VydChJc0EocGxhbiwgSW5kZXhT Y2FuKSk7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndy YXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsK KwkJCXBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwgKChJbmRleFNjYW4gKikgcGxh biktPmluZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9JTkRF WF9PTkxZKQorCQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4T25seVNjYW4pKTsKKwkJCXBn cGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOwor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJcGdwYV9vdXRw dXRfcmVsYXRpb25fbmFtZShjb250ZXh0LAorCQkJCQkJCQkJICAoKEluZGV4T25seVNjYW4gKikg cGxhbiktPmluZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9C SVRNQVBfSEVBUCkKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBj b250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5i dWYsICcgJyk7CisJCQlwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250ZXh0LCBw bGFuLT5sZWZ0dHJlZSk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0 LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0 LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggaW5kZXggb3IgaW5kZXhlcyBwb3dlciBhIEJpdG1hcEhlYXBTY2FuLgorICoKKyAqIFdlIGVt aXQgJiYoaTEgaTIgaTMpIGZvciBhIEJpdG1hcEFuZCBiZXR3ZWVuIGluZGV4ZXMgaTEsIGkyLCBh bmQgaTM7CisgKiBhbmQgbGlrZXdpc2UgfHwoaTEgaTIgaTMpIGZvciBhIHNpbWlsYXIgQml0bWFw T3Igb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4 X2RldGFpbHMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgUGxhbiAqcGxhbikKK3sKKwlj aGFyCSAgICpvcGVyYXRvcjsKKwlMaXN0CSAgICpiaXRtYXBwbGFuczsKKwlib29sCQlmaXJzdCA9 IHRydWU7CisKKwlpZiAoSXNBKHBsYW4sIEJpdG1hcEluZGV4U2NhbikpCisJeworCQlCaXRtYXBJ bmRleFNjYW4gKmJpdG1hcGluZGV4c2NhbiA9IChCaXRtYXBJbmRleFNjYW4gKikgcGxhbjsKKwor CQlwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsIGJpdG1hcGluZGV4c2Nhbi0+aW5k ZXhpZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoSXNBKHBsYW4sIEJpdG1hcE9yKSkKKwl7CisJ CW9wZXJhdG9yID0gInx8IjsKKwkJYml0bWFwcGxhbnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5i aXRtYXBwbGFuczsKKwl9CisJZWxzZSBpZiAoSXNBKHBsYW4sIEJpdG1hcEFuZCkpCisJeworCQlv cGVyYXRvciA9ICImJiI7CisJCWJpdG1hcHBsYW5zID0gKChCaXRtYXBBbmQgKikgcGxhbiktPmJp dG1hcHBsYW5zOworCX0KKwllbHNlCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIG5vZGUgdHlw ZTogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4 dC0+YnVmLCAiJXMoIiwgb3BlcmF0b3IpOworCWZvcmVhY2hfcHRyKFBsYW4sIGNoaWxkX3BsYW4s IGJpdG1hcHBsYW5zKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxz ZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndy YXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsK KwkJfQorCQlwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250ZXh0LCBjaGlsZF9w bGFuKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQor CisvKgorICogT3V0cHV0IGEgc2NoZW1hLXF1YWxpZmllZCByZWxhdGlvbiBuYW1lLgorICovCitz dGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0 ICpjb250ZXh0LCBPaWQgcmVsaWQpCit7CisJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3Bh Y2UocmVsaWQpOworCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9v cl90ZW1wKG5zcG9pZCk7CisJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxfbmFtZShyZWxpZCk7 CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmll cihyZWxuYW1lc3BhY2UpKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcu Jyk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3RlX2lkZW50aWZp ZXIocmVsbmFtZSkpOworfQorCisvKgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBn cGFfcXVlcnlfZmVhdHVyZSBvYmplY3RzLgorICoKKyAqIEFsbCBmZWF0dXJlcyBtdXN0IGJlIG9m IHRoZSB0eXBlIHNwZWNpZmllZCBieSB0aGUgInR5cGUiIGFyZ3VtZW50LgorICovCitzdGF0aWMg dm9pZAorcGdwYV9vdXRwdXRfcXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250 ZXh0LCBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpCit7 CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKHF1ZXJ5X2ZlYXR1cmVzID09IE5JTCkKKwkJ cmV0dXJuOworCisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1 ZiwgIiVzKCIsCisJCQkJCSBwZ3BhX2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHR5cGUpKTsK KworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQor CXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3Bh X21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChi bXNfbWVtYmVyc2hpcChxZi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRw dXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCWVsc2UK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdw YV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5l YnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBP dXRwdXQgInNpbXBsZSIgYWR2aWNlIGZvciBhIExpc3Qgb2YgQml0bWFwc2V0IG9iamVjdHMgZWFj aCBvZiB3aGljaAorICogY29udGFpbnMgb25lIG9yIG1vcmUgUlRJcy4KKyAqCisgKiBCeSBzaW1w bGUsIHdlIGp1c3QgbWVhbiB0aGF0IHRoZSBhZHZpY2UgZW1pdHRlZCBmb2xsb3dzIHRoZSBtb3N0 CisgKiBzdHJhaWdodGZvcndhcmQgcGF0dGVybjogdGhlIHN0cmF0ZWd5IG5hbWUsIGZvbGxvd2Vk IGJ5IGEgbGlzdCBvZiBpdGVtcworICogc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRl ZCBieSBwYXJlbnRoZXNlcy4gSW5kaXZpZHVhbCBpdGVtcyBpbgorICogdGhlIGxpc3QgYXJlIGEg c2luZ2xlIHJlbGF0aW9uIGlkZW50aWZpZXIgZm9yIGEgQml0bWFwc2V0IHRoYXQgY29udGFpbnMK KyAqIGp1c3Qgb25lIG1lbWJlciwgb3IgYSBzdWItbGlzdCBhZ2FpbiBzZXBhcmF0ZWQgYnkgc3Bh Y2VzIGFuZCBzdXJyb3VuZGVkCisgKiBieSBwYXJlbnRoZXNlcyBmb3IgYSBCaXRtYXBzZXQgd2l0 aCBtdWx0aXBsZSBtZW1iZXJzLiBCaXRtYXBzZXRzIHdpdGgKKyAqIG5vIG1lbWJlcnMgcHJvYmFi bHkgc2hvdWxkbid0IG9jY3VyIGhlcmUsIGJ1dCBpZiB0aGV5IGRvIHRoZXknbGwgYmUKKyAqIHJl bmRlcmVkIGFzIGFuIGVtcHR5IHN1Yi1saXN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRw dXRfc2ltcGxlX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnN0 cmF0ZWd5LAorCQkJCQkJCUxpc3QgKnJlbGlkX3NldHMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVl OworCisJaWYgKHJlbGlkX3NldHMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+ YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicp OworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwgc3RyYXRlZ3kpOworCisJ Zm9yZWFjaF9ub2RlKEJpdG1hcHNldCwgcmVsaWRzLCByZWxpZF9zZXRzKQorCXsKKwkJaWYgKGZp cnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVi cmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hp cChyZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29u dGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhj b250ZXh0LCBjb250ZXh0LT5idWYsIHJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihj b250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250 ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250 ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgTk9fR0FUSEVSIGFkdmljZSBm b3IgYWxsIHJlbGF0aW9ucyBub3QgYXBwZWFyaW5nIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3Ig R2F0aGVyIE1lcmdlIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9ub19nYXRo ZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJ aWYgKHJlbGlkcyA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4g MCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgIk5PX0dBVEhFUigiKTsKKwlwZ3BhX291dHB1 dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgaWRl bnRpZmllcnMgZm9yIGVhY2ggUlRJIGluIHRoZSBwcm92aWRlZCBzZXQuCisgKgorICogSWRlbnRp ZmllcnMgYXJlIHNlcGFyYXRlZCBieSBzcGFjZXMsIGFuZCBhIGxpbmUgYnJlYWsgaXMgcG9zc2li bGUgYWZ0ZXIKKyAqIGVhY2ggb25lLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVs YXRpb25zKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJ CQkgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0 ID0gdHJ1ZTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkg Pj0gMCkKKwl7CisJCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmcgPSBjb250ZXh0LT5yaWRfc3RyaW5n c1tydGkgLSAxXTsKKworCQlpZiAocmlkX3N0cmluZyA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwg Im5vIGlkZW50aWZpZXIgZm9yIFJUSSAlZCIsIHJ0aSk7CisKKwkJaWYgKGZpcnN0KQorCQl7CisJ CQlmaXJzdCA9IGZhbHNlOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHJpZF9zdHJp bmcpOworCQl9CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoYnVmLCBjb250 ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiAlcyIsIHJpZF9z dHJpbmcpOworCQl9CisJfQorfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNw b25kcyB0byB0aGUgc3BlY2lmaWVkIGpvaW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoK K3BncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSkK K3sKKwlzd2l0Y2ggKHN0cmF0ZWd5KQorCXsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJ TjoKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX01FUkdFX0pP SU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQlj YXNlIEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExB SU4iOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAi TkVTVEVEX0xPT1BfTUFURVJJQUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NRU1P SVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBKU1RSQVRfSEFT SF9KT0lOOgorCQkJcmV0dXJuICJIQVNIX0pPSU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7 CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3Bv bmRzIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgor cGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KQor eworCXN3aXRjaCAoc3RyYXRlZ3kpCisJeworCQljYXNlIFBHUEFfU0NBTl9PUkRJTkFSWToKKwkJ CXJldHVybiAiT1JESU5BUllfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1NFUToKKwkJCXJldHVy biAiU0VRX1NDQU4iOworCQljYXNlIFBHUEFfU0NBTl9CSVRNQVBfSEVBUDoKKwkJCXJldHVybiAi QklUTUFQX0hFQVBfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0ZPUkVJR046CisJCQlyZXR1cm4g IkZPUkVJR05fSk9JTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYOgorCQkJcmV0dXJuICJJTkRF WF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fSU5ERVhfT05MWToKKwkJCXJldHVybiAiSU5ERVhf T05MWV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiAi UEFSVElUSU9OV0lTRSI7CisJCWNhc2UgUEdQQV9TQ0FOX1RJRDoKKwkJCXJldHVybiAiVElEX1ND QU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisg KiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBz dHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVf dHlwZShwZ3BhX3FmX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpCisJeworCQljYXNlIFBH UEFRRl9HQVRIRVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQVFGX0dBVEhFUl9N RVJHRToKKwkJCXJldHVybiAiR0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5f Tk9OX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJCWNhc2UgUEdQ QVFGX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fVU5JUVVFIjsKKwl9CisK KworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJbnNlcnQg YSBsaW5lIGJyZWFrIGludG8gdGhlIFN0cmluZ0luZm9EYXRhLCBpZiBuZWVkZWQuCisgKgorICog SWYgd3JhcF9jb2x1bW4gaXMgemVybyBvciBuZWdhdGl2ZSwgdGhpcyBkb2VzIG5vdGhpbmcuIE90 aGVyd2lzZSwgd2UKKyAqIGNvbnNpZGVyIGluc2VydGluZyBhIG5ld2xpbmUuIFdlIG9ubHkgaW5z ZXJ0IGEgbmV3bGluZSBpZiB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgbGFzdCBsaW5lIGluIHRoZSBi dWZmZXIgZXhjZWVkcyB3cmFwX2NvbHVtbiwgYW5kIG5vdCBpZiB3ZSdkIGJlCisgKiBpbnNlcnRp bmcgYSBuZXdsaW5lIGF0IG9yIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IGxp bmUuCisgKgorICogVGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBuZXdsaW5lIGlzIGluc2VydGVk IGlzIHNpbXBseSB3aGVyZXZlciB0aGUKKyAqIGJ1ZmZlciBlbmRlZCB0aGUgbGFzdCB0aW1lIHRo aXMgZnVuY3Rpb24gd2FzIGNhbGxlZC4gSW4gb3RoZXIgd29yZHMsCisgKiB0aGUgY2FsbGVyIGlz IGV4cGVjdGVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeSB0aW1lIHdlIHJlYWNoIGEgZ29v ZAorICogcGxhY2UgZm9yIGEgbGluZSBicmVhay4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfbWF5 YmVfbGluZWJyZWFrKFN0cmluZ0luZm8gYnVmLCBpbnQgd3JhcF9jb2x1bW4pCit7CisJY2hhcgkg ICAqdHJhaWxpbmdfbmw7CisJaW50CQkJbGluZV9zdGFydDsKKwlpbnQJCQlzYXZlX2N1cnNvcjsK KworCS8qIElmIGxpbmUgd3JhcHBpbmcgaXMgZGlzYWJsZWQsIGV4aXQgcXVpY2tseS4gKi8KKwlp ZiAod3JhcF9jb2x1bW4gPD0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTZXQgbGluZV9zdGFy dCB0byB0aGUgYnl0ZSBvZmZzZXQgd2l0aGluIGJ1Zi0+ZGF0YSBvZiB0aGUgZmlyc3QKKwkgKiBj aGFyYWN0ZXIgb2YgdGhlIGN1cnJlbnQgbGluZSwgd2hlcmUgdGhlIGN1cnJlbnQgbGluZSBtZWFu cyB0aGUgbGFzdAorCSAqIG9uZSBpbiB0aGUgYnVmZmVyLiBOb3RlIHRoYXQgbGluZV9zdGFydCBj b3VsZCBiZSB0aGUgb2Zmc2V0IG9mIHRoZQorCSAqIHRyYWlsaW5nICdcMCcgaWYgdGhlIGxhc3Qg Y2hhcmFjdGVyIGluIHRoZSBidWZmZXIgaXMgYSBsaW5lIGJyZWFrLgorCSAqLworCXRyYWlsaW5n X25sID0gc3RycmNocihidWYtPmRhdGEsICdcbicpOworCWlmICh0cmFpbGluZ19ubCA9PSBOVUxM KQorCQlsaW5lX3N0YXJ0ID0gMDsKKwllbHNlCisJCWxpbmVfc3RhcnQgPSAodHJhaWxpbmdfbmwg LSBidWYtPmRhdGEpICsgMTsKKworCS8qCisJICogUmVtZW1iZXIgdGhhdCB0aGUgY3VycmVudCBl bmQgb2YgdGhlIGJ1ZmZlciBpcyBhIHBvdGVudGlhbCBsb2NhdGlvbiB0bworCSAqIGluc2VydCBh IGxpbmUgYnJlYWsgb24gYSBmdXR1cmUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCXNh dmVfY3Vyc29yID0gYnVmLT5jdXJzb3I7CisJYnVmLT5jdXJzb3IgPSBidWYtPmxlbjsKKworCS8q IElmIHdlIGhhdmVuJ3QgcGFzc2VkIHRoZSB3cmFwIGNvbHVtbiwgd2UgZG9uJ3QgbmVlZCBhIG5l d2xpbmUuICovCisJaWYgKGJ1Zi0+bGVuIC0gbGluZV9zdGFydCA8PSB3cmFwX2NvbHVtbikKKwkJ cmV0dXJuOworCisJLyoKKwkgKiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGluc2VydCBhIG5ld2xp bmUgYXQgYSBwb3NpdGlvbiBsYXRlciB0aGFuIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgY3Vy cmVudCBsaW5lLgorCSAqLworCWlmIChidWYtPmN1cnNvciA8PSBsaW5lX3N0YXJ0KQorCQlyZXR1 cm47CisKKwkvKiBJbnNlcnQgYSBuZXdsaW5lIGF0IHRoZSBwcmV2aW91cyBjdXJzb3IgbG9jYXRp b24uICovCisJZW5sYXJnZVN0cmluZ0luZm8oYnVmLCAxKTsKKwltZW1tb3ZlKCZidWYtPmRhdGFb c2F2ZV9jdXJzb3JdICsgMSwgJmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0sCisJCQlidWYtPmxlbiAt IHNhdmVfY3Vyc29yKTsKKwkrK2J1Zi0+Y3Vyc29yOworCWJ1Zi0+ZGF0YVsrK2J1Zi0+bGVuXSA9 ICdcMCc7CisJYnVmLT5kYXRhW3NhdmVfY3Vyc29yXSA9ICdcbic7Cit9CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmggYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfb3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjQ3NDk2ZDc2ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX291dHB1dC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHBncGFfb3V0cHV0LmgKKyAqCSAgcHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1 bHRzIG9mIGEgcGxhbiB0cmVlIHdhbGsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aWZuZGVmIFBHUEFfT1VUUFVUX0gKKyNkZWZpbmUgUEdQQV9PVVRQVVRfSAorCisjaW5jbHVkZSAi cGdwYV9pZGVudGlmaWVyLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworZXh0ZXJuIHZv aWQgcGdwYV9vdXRwdXRfYWR2aWNlKFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRf aWRlbnRpZmllcnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9wYXJzZXIueSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmYzMzcyNGRlMDIKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKQEAgLTAs MCArMSwzNDAgQEAKKyV7CisvKgorICogUGFyc2VyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENv cHlyaWdodCAoYykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQorICovCisKKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRo Lmg+CisKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisj aW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgorCisj aW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICog Qmlzb24gZG9lc24ndCBhbGxvY2F0ZSBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGxpdmUgYWNyb3Nz IHBhcnNlciBjYWxscywKKyAqIHNvIHdlIGNhbiBlYXNpbHkgaGF2ZSBpdCB1c2UgcGFsbG9jIGlu c3RlYWQgb2YgbWFsbG9jLiAgVGhpcyBwcmV2ZW50cworICogbWVtb3J5IGxlYWtzIGlmIHdlIGVy cm9yIG91dCBkdXJpbmcgcGFyc2luZy4KKyAqLworI2RlZmluZSBZWU1BTExPQyBwYWxsb2MKKyNk ZWZpbmUgWVlGUkVFICAgcGZyZWUKKyV9CisKKy8qIEJJU09OIERlY2xhcmF0aW9ucyAqLworJXBh cnNlLXBhcmFtIHtMaXN0ICoqcmVzdWx0fQorJXBhcnNlLXBhcmFtIHtjaGFyICoqcGFyc2VfZXJy b3JfbXNnX3B9CislcGFyc2UtcGFyYW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVsZXgtcGFyYW0g e0xpc3QgKipyZXN1bHR9CislbGV4LXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9Cisl bGV4LXBhcmFtIHt5eXNjYW5fdCB5eXNjYW5uZXJ9CislcHVyZS1wYXJzZXIKKyVleHBlY3QgMAor JW5hbWUtcHJlZml4PSJwZ3BhX3l5IgorCisldW5pb24KK3sKKwljaGFyCSAgICpzdHI7CisJaW50 CQkJaW50ZWdlcjsKKwlMaXN0CSAgICpsaXN0OworCXBncGFfYWR2aWNlX2l0ZW0gKml0ZW07CisJ cGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7 Cit9CisldG9rZW4gPHN0cj4gVE9LX0lERU5UIFRPS19UQUdfSk9JTl9PUkRFUiBUT0tfVEFHX0JJ VE1BUCBUT0tfVEFHX0lOREVYCisldG9rZW4gPHN0cj4gVE9LX1RBR19TSU1QTEUgVE9LX1RBR19H RU5FUklDCisldG9rZW4gPGludGVnZXI+IFRPS19JTlRFR0VSCisldG9rZW4gVE9LX09SIFRPS19B TkQKKworJXR5cGUgPGludGVnZXI+IG9wdF9yaV9vY2N1cnJlbmNlCisldHlwZSA8aXRlbT4gYWR2 aWNlX2l0ZW0KKyV0eXBlIDxsaXN0PiBhZHZpY2VfaXRlbV9saXN0IGJpdG1hcF9zdWJsaXN0IGJp dG1hcF90YXJnZXRfbGlzdCBnZW5lcmljX3RhcmdldF9saXN0CisldHlwZSA8bGlzdD4gaW5kZXhf dGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl90YXJnZXRfbGlzdAorJXR5cGUgPGxpc3Q+IG9wdF9wYXJ0 aXRpb24gc2ltcGxlX3RhcmdldF9saXN0CisldHlwZSA8c3RyPiBpZGVudGlmaWVyIG9wdF9wbGFu X25hbWUKKyV0eXBlIDx0YXJnZXQ+IGdlbmVyaWNfc3VibGlzdCBqb2luX29yZGVyX3N1Ymxpc3QK KyV0eXBlIDx0YXJnZXQ+IHJlbGF0aW9uX2lkZW50aWZpZXIKKyV0eXBlIDxpdGFyZ2V0PiBiaXRt YXBfdGFyZ2V0X2l0ZW0gaW5kZXhfbmFtZQorCislc3RhcnQgcGFyc2VfdG9wbGV2ZWwKKworLyog R3JhbW1hciBmb2xsb3dzICovCislJQorCitwYXJzZV90b3BsZXZlbDogYWR2aWNlX2l0ZW1fbGlz dAorCQl7CisJCQkodm9pZCkgeXluZXJyczsJCQkJLyogc3VwcHJlc3MgY29tcGlsZXIgd2Fybmlu ZyAqLworCQkJKnJlc3VsdCA9ICQxOworCQl9CisJOworCithZHZpY2VfaXRlbV9saXN0OiBhZHZp Y2VfaXRlbV9saXN0IGFkdmljZV9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8 CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2FkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIg JygnIGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfSk9JTl9PUkRFUjsK KwkJCSQkLT50YXJnZXRzID0gJDM7CisJCQlpZiAoJDMgPT0gTklMKQorCQkJCXBncGFfeXllcnJv cihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJICJKT0lOX09S REVSIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgdGFyZ2V0Iik7CisJCX0KKwl8IFRPS19UQUdfSU5E RVggJygnIGluZGV4X3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0 KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJaWYgKHN0cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIp ID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2Ug aWYgKHN0cmNtcCgkMSwgImluZGV4X3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RB R19JTkRFWF9TQ0FOOworCQkJZWxzZQorCQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWls ZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19CSVRN QVAgJygnIGJpdG1hcF90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVj dChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCSQkLT50YWcgPSBQR1BBX1RBR19CSVRNQVBfSEVBUF9T Q0FOOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19TSU1QTEUgJygnIHNp bXBsZV90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2Fk dmljZV9pdGVtKTsKKwkJCWlmIChzdHJjbXAoJDEsICJub19nYXRoZXIiKSA9PSAwKQorCQkJCSQk LT50YWcgPSBQR1BBX1RBR19OT19HQVRIRVI7CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJzZXFf c2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX1NFUV9TQ0FOOworCQkJZWxzZSBp ZiAoc3RyY21wKCQxLCAidGlkX3NjYW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19U SURfU0NBTjsKKwkJCWVsc2UKKwkJCQllbG9nKEVSUk9SLCAidGFnIHBhcnNpbmcgZmFpbGVkOiAl cyIsICQxKTsKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwl8IFRPS19UQUdfR0VORVJJQyAn KCcgZ2VuZXJpY190YXJnZXRfbGlzdCAnKScKKwkJeworCQkJYm9vbAlmYWlsOworCisJCQkkJCA9 IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJJCQtPnRhZyA9IHBncGFfcGFy c2VfYWR2aWNlX3RhZygkMSwgJmZhaWwpOworCQkJaWYgKGZhaWwpCisJCQl7CisJCQkJcGdwYV95 eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgInVu cmVjb2duaXplZCBhZHZpY2UgdGFnIik7CisJCQl9CisKKwkJCWlmICgkJC0+dGFnID09IFBHUEFf VEFHX0ZPUkVJR05fSk9JTikKKwkJCXsKKwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJn ZXQsIHRhcmdldCwgJDMpCisJCQkJeworCQkJCQlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RB UkdFVF9JREVOVElGSUVSIHx8CisJCQkJCQlsaXN0X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKSA9 PSAxKQorCQkJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNj YW5uZXIsCisJCQkJCQkJCQkJICJGT1JFSUdOX0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9y ZSB0aGFuIG9uZSByZWxhdGlvbiBpZGVudGlmaWVyIik7CisJCQkJfQorCQkJfQorCisJCQkkJC0+ dGFyZ2V0cyA9ICQzOworCQl9CisJOworCityZWxhdGlvbl9pZGVudGlmaWVyOiBpZGVudGlmaWVy IG9wdF9yaV9vY2N1cnJlbmNlIG9wdF9wYXJ0aXRpb24gb3B0X3BsYW5fbmFtZQorCQl7CisJCQkk JCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQ R1BBX1RBUkdFVF9JREVOVElGSUVSOworCQkJJCQtPnJpZC5hbGlhc19uYW1lID0gJDE7CisJCQkk JC0+cmlkLm9jY3VycmVuY2UgPSAkMjsKKwkJCWlmIChsaXN0X2xlbmd0aCgkMykgPT0gMikKKwkJ CXsKKwkJCQkkJC0+cmlkLnBhcnRuc3AgPSBsaW5pdGlhbCgkMyk7CisJCQkJJCQtPnJpZC5wYXJ0 cmVsID0gbHNlY29uZCgkMyk7CisJCQl9CisJCQllbHNlIGlmICgkMyAhPSBOSUwpCisJCQkJJCQt PnJpZC5wYXJ0cmVsID0gbGluaXRpYWwoJDMpOworCQkJJCQtPnJpZC5wbGFuX25hbWUgPSAkNDsK KwkJfQorCTsKKworaW5kZXhfbmFtZTogaWRlbnRpZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBf b2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfTkFN RTsKKwkJCSQkLT5pbmRuYW1lID0gJDE7CisJCX0KKwl8IGlkZW50aWZpZXIgJy4nIGlkZW50aWZp ZXIKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkk JC0+aXR5cGUgPSBQR1BBX0lOREVYX05BTUU7CisJCQkkJC0+aW5kbmFtZXNwYWNlID0gJDE7CisJ CQkkJC0+aW5kbmFtZSA9ICQzOworCQl9CisJOworCitvcHRfcmlfb2NjdXJyZW5jZToKKwknIycg VE9LX0lOVEVHRVIKKwkJeworCQkJaWYgKCQyIDw9IDApCisJCQkJcGdwYV95eWVycm9yKHJlc3Vs dCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgIm9ubHkgcG9zaXRpdmUg b2NjdXJyZW5jZSBudW1iZXJzIGFyZSBwZXJtaXR0ZWQiKTsKKwkJCSQkID0gJDI7CisJCX0KKwl8 CisJCXsKKwkJCS8qIFRoZSBkZWZhdWx0IG9jY3VycmVuY2UgbnVtYmVyIGlzIDEuICovCisJCQkk JCA9IDE7CisJCX0KKwk7CisKK2lkZW50aWZpZXI6IFRPS19JREVOVAorCXwgVE9LX1RBR19KT0lO X09SREVSCisJfCBUT0tfVEFHX0lOREVYCisJfCBUT0tfVEFHX0JJVE1BUAorCXwgVE9LX1RBR19T SU1QTEUKKwl8IFRPS19UQUdfR0VORVJJQworCTsKKworLyoKKyAqIFdoZW4gZ2VuZXJhdGluZyBh ZHZpY2UsIHdlIGFsd2F5cyBzY2hlbWEtcXVhbGlmeSB0aGUgcGFydGl0aW9uIG5hbWUsIGJ1dAor ICogd2hlbiBwYXJzaW5nIGFkdmljZSwgd2UgYWNjZXB0IGEgc3BlY2lmaWNhdGlvbiB0aGF0IGxh Y2tzIG9uZS4KKyAqLworb3B0X3BhcnRpdGlvbjoKKwknLycgVE9LX0lERU5UICcuJyBUT0tfSURF TlQKKwkJeyAkJCA9IGxpc3RfbWFrZTIoJDIsICQ0KTsgfQorCXwgJy8nIFRPS19JREVOVAorCQl7 ICQkID0gbGlzdF9tYWtlMSgkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK29wdF9w bGFuX25hbWU6CisJJ0AnIFRPS19JREVOVAorCQl7ICQkID0gJDI7IH0KKwl8CisJCXsgJCQgPSBO VUxMOyB9CisJOworCitiaXRtYXBfdGFyZ2V0X2xpc3Q6IGJpdG1hcF90YXJnZXRfbGlzdCByZWxh dGlvbl9pZGVudGlmaWVyIGJpdG1hcF90YXJnZXRfaXRlbQorCQl7CisJCQkkMi0+aXRhcmdldCA9 ICQzOworCQkJJCQgPSBsYXBwZW5kKCQxLCAkMik7CisJCX0KKwl8CisJCXsgJCQgPSBOSUw7IH0K Kwk7CisKK2JpdG1hcF90YXJnZXRfaXRlbTogaW5kZXhfbmFtZQorCQl7ICQkID0gJDE7IH0KKwl8 IFRPS19PUiAnKCcgYml0bWFwX3N1Ymxpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9pbmRleF90YXJnZXQpOworCQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9PUjsKKwkJ CSQkLT5jaGlsZHJlbiA9ICQzOworCQl9CisJfCBUT0tfQU5EICcoJyBiaXRtYXBfc3VibGlzdCAn KScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkk JC0+aXR5cGUgPSBQR1BBX0lOREVYX0FORDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQzOworCQl9CisJ OworCitiaXRtYXBfc3VibGlzdDogYml0bWFwX3N1Ymxpc3QgYml0bWFwX3RhcmdldF9pdGVtCisJ CXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8IGJpdG1hcF90YXJnZXRfaXRlbQorCQl7ICQk ID0gbGlzdF9tYWtlMSgkMSk7IH0KKwk7CisKK2dlbmVyaWNfdGFyZ2V0X2xpc3Q6IGdlbmVyaWNf dGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIp OyB9CisJfCBnZW5lcmljX3RhcmdldF9saXN0IGdlbmVyaWNfc3VibGlzdAorCQl7ICQkID0gbGFw cGVuZCgkMSwgJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCitnZW5lcmljX3N1Ymxp c3Q6ICcoJyBzaW1wbGVfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVS RURfTElTVDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQyOworCQl9CisJOworCitpbmRleF90YXJnZXRf bGlzdDoKKwkgIGluZGV4X3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIgaW5kZXhfbmFt ZQorCQl7CisJCQkkMi0+aXRhcmdldCA9ICQzOworCQkJJCQgPSBsYXBwZW5kKCQxLCAkMik7CisJ CX0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2pvaW5fb3JkZXJfdGFyZ2V0X2xpc3Q6IGpv aW5fb3JkZXJfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVu ZCgkMSwgJDIpOyB9CisJfCBqb2luX29yZGVyX3RhcmdldF9saXN0IGpvaW5fb3JkZXJfc3VibGlz dAorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAorCQl7ICQkID0gTklMOyB9CisJOwor Citqb2luX29yZGVyX3N1Ymxpc3Q6CisJJygnIGpvaW5fb3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJ CXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50 dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQyOwor CQl9CisJfCAneycgc2ltcGxlX3RhcmdldF9saXN0ICd9JworCQl7CisJCQkkJCA9IHBhbGxvYzBf b2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9V Tk9SREVSRURfTElTVDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQyOworCQl9CisJOworCitzaW1wbGVf dGFyZ2V0X2xpc3Q6IHNpbXBsZV90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyCisJCXsg JCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKKyUlCisK Ky8qCisgKiBQYXJzZSBhbiBhZHZpY2Vfc3RyaW5nIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBs aXN0IG9mIHBncGFfYWR2aWNlX2l0ZW0KKyAqIG9iamVjdHMuIElmIGEgcGFyc2UgZXJyb3Igb2Nj dXJzLCBpbnN0ZWFkIHJldHVybiBOVUxMLgorICoKKyAqIElmIHRoZSByZXR1cm4gdmFsdWUgaXMg TlVMTCwgKmVycm9yX3Agd2lsbCBiZSBzZXQgdG8gdGhlIGVycm9yIG1lc3NhZ2U7CisgKiBvdGhl cndpc2UsICplcnJvcl9wIHdpbGwgYmUgc2V0IHRvIE5VTEwuCisgKi8KK0xpc3QgKgorcGdwYV9w YXJzZShjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLCBjaGFyICoqZXJyb3JfcCkKK3sKKwl5eXNj YW5fdAlzY2FubmVyOworCUxpc3QJICAgKnJlc3VsdDsKKwljaGFyCSAgICplcnJvciA9IE5VTEw7 CisKKwlwZ3BhX3NjYW5uZXJfaW5pdChhZHZpY2Vfc3RyaW5nLCAmc2Nhbm5lcik7CisJcGdwYV95 eXBhcnNlKCZyZXN1bHQsICZlcnJvciwgc2Nhbm5lcik7CisJcGdwYV9zY2FubmVyX2ZpbmlzaChz Y2FubmVyKTsKKworCWlmIChlcnJvciAhPSBOVUxMKQorCXsKKwkJKmVycm9yX3AgPSBlcnJvcjsK KwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmVycm9yX3AgPSBOVUxMOworCXJldHVybiByZXN1bHQ7 Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZDM4M2QxMzM3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCkBAIC0wLDAgKzEsMjAzOCBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9wbGFubmVyLmMKKyAqCSAgcGxhbm5lciBob29r cworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5u ZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3Iu aCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3BhX291dHB1dC5o IgorI2luY2x1ZGUgInBncGFfcGxhbm5lci5oIgorI2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKyNp bmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJs ZS5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9l eHRlbmRwbGFuLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCisjaW5jbHVkZSAi b3B0aW1pemVyL3BhdGhzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIK KyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJ TkcKKworLyoKKyAqIFdoZW4gYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgd2UgdHJ5IGdlbmVyYXRp bmcgcmVsYXRpb24gaWRlbnRpZmllcnMgZHVyaW5nCisgKiBwbGFubmluZywgc2F2aW5nIHRoZW0g aW4gYSBoYXNoIHRhYmxlLCBhbmQgdGhlbiBjcm9zcy1jaGVja2luZyB0aGVtIGFnYWluc3QKKyAq IHRoZSBvbmVzIGdlbmVyYXRlZCBhZnRlciBwbGFubmluZyBpcyBjb21wbGV0ZS4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV9yaV9jaGVja2VyX2tleQoreworCWNoYXIJICAgKnBsYW5fbmFtZTsK KwlJbmRleAkJcnRpOworfSBwZ3BhX3JpX2NoZWNrZXJfa2V5OworCit0eXBlZGVmIHN0cnVjdCBw Z3BhX3JpX2NoZWNrZXIKK3sKKwlwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleTsKKwl1aW50MzIJCXN0 YXR1czsKKwljb25zdCBjaGFyICpyaWRfc3RyaW5nOworfSBwZ3BhX3JpX2NoZWNrZXI7CisKK3N0 YXRpYyB1aW50MzIgcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkg a2V5KTsKKworc3RhdGljIGlubGluZSBib29sCitwZ3BhX3JpX2NoZWNrZXJfY29tcGFyZV9rZXko cGdwYV9yaV9jaGVja2VyX2tleSBhLCBwZ3BhX3JpX2NoZWNrZXJfa2V5IGIpCit7CisJaWYgKGEu cnRpICE9IGIucnRpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGEucGxhbl9uYW1lID09IE5VTEwp CisJCXJldHVybiAoYi5wbGFuX25hbWUgPT0gTlVMTCk7CisJaWYgKGIucGxhbl9uYW1lID09IE5V TEwpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gc3RyY21wKGEucGxhbl9uYW1lLCBiLnBsYW5f bmFtZSkgPT0gMDsKK30KKworI2RlZmluZSBTSF9QUkVGSVgJCQlwZ3BhX3JpX2NoZWNrCisjZGVm aW5lIFNIX0VMRU1FTlRfVFlQRQkJcGdwYV9yaV9jaGVja2VyCisjZGVmaW5lIFNIX0tFWV9UWVBF CQkJcGdwYV9yaV9jaGVja2VyX2tleQorI2RlZmluZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5lIFNI X0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfcmlfY2hlY2tlcl9oYXNoX2tleShrZXkpCisjZGVmaW5l CVNIX0VRVUFMKHRiLCBhLCBiKQlwZ3BhX3JpX2NoZWNrZXJfY29tcGFyZV9rZXkoYSwgYikKKyNk ZWZpbmUgU0hfU0NPUEUJCQlzdGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNkZWZp bmUgU0hfREVGSU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworI2VuZGlmCisKK3R5 cGVkZWYgc3RydWN0IHBncGFfcGxhbm5lcl9zdGF0ZQoreworCUV4cGxhaW5TdGF0ZSAqZXhwbGFp bl9zdGF0ZTsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nOworCWJvb2wJCXdhbGtfcGxh bl90cmVlOworCXBncGFfdHJvdmUgKnRyb3ZlOworCU1lbW9yeUNvbnRleHQgdHJvdmVfY3h0Owor CUxpc3QJICAgKnNqX3VuaXF1ZV9yZWxzOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwor CXBncGFfcmlfY2hlY2tfaGFzaCAqcmlfY2hlY2tfaGFzaDsKKyNlbmRpZgorfSBwZ3BhX3BsYW5u ZXJfc3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IHBncGFfam9pbl9zdGF0ZQoreworCS8qIE1vc3Qt cmVjZW50bHktY29uc2lkZXJlZCBvdXRlciByZWwuICovCisJUmVsT3B0SW5mbyAqb3V0ZXJyZWw7 CisKKwkvKiBNb3N0LXJlY2VudGx5LWNvbnNpZGVyZWQgaW5uZXIgcmVsLiAqLworCVJlbE9wdElu Zm8gKmlubmVycmVsOworCisJLyoKKwkgKiBBcnJheSBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBm b3IgYWxsIG1lbWJlcnMgb2YgdGhpcyBqb2lucmVsLCB3aXRoCisJICogb3V0ZXJyZWwgaWRlbmlm aWVycyBiZWZvcmUgaW5uZXJyZWwgaWRlbnRpZmllcnMuCisJICovCisJcGdwYV9pZGVudGlmaWVy ICpyaWRzOworCisJLyogTnVtYmVyIG9mIG91dGVyIHJlbCBpZGVudGlmaWVycy4gKi8KKwlpbnQJ CQlvdXRlcl9jb3VudDsKKworCS8qIE51bWJlciBvZiBpbm5lciByZWwgaWRlbnRpZmllcnMuICov CisJaW50CQkJaW5uZXJfY291bnQ7CisKKwkvKgorCSAqIFRyb3ZlIGxvb2t1cCByZXN1bHRzLgor CSAqCisJICogam9pbl9lbnRyaWVzIGFuZCByZWxfZW50cmllcyBhcmUgYXJyYXlzIG9mIGVudHJp ZXMsIGFuZCBqb2luX2luZGV4ZXMKKwkgKiBhbmQgcmVsX2luZGV4ZXMgYXJlIHRoZSBpbnRlZ2Vy IG9mZnNldHMgd2l0aGluIHRob3NlIGFycmF5cyBvZiBlbnRyaWVzCisJICogcG90ZW50aWFsbHkg cmVsZXZhbnQgdG8gdXMuIFRoZSAiam9pbiIgZmllbGRzIGNvcnJlc3BvbmQgdG8gYSBsb29rdXAK KwkgKiB1c2luZyBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOIGFuZCB0aGUgInJlbCIgZmllbGRzIHRv IGEgbG9va3VwIHVzaW5nCisJICogUEdQQV9UUk9WRV9MT09LVVBfUkVMLgorCSAqLworCXBncGFf dHJvdmVfZW50cnkgKmpvaW5fZW50cmllczsKKwlCaXRtYXBzZXQgICpqb2luX2luZGV4ZXM7CisJ cGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXM7CisJQml0bWFwc2V0ICAqcmVsX2luZGV4ZXM7 Cit9IHBncGFfam9pbl9zdGF0ZTsKKworLyogU2F2ZWQgaG9vayB2YWx1ZXMgKi8KK3N0YXRpYyBn ZXRfcmVsYXRpb25faW5mb19ob29rX3R5cGUgcHJldl9nZXRfcmVsYXRpb25faW5mbyA9IE5VTEw7 CitzdGF0aWMgam9pbl9wYXRoX3NldHVwX2hvb2tfdHlwZSBwcmV2X2pvaW5fcGF0aF9zZXR1cCA9 IE5VTEw7CitzdGF0aWMgam9pbnJlbF9zZXR1cF9ob29rX3R5cGUgcHJldl9qb2lucmVsX3NldHVw ID0gTlVMTDsKK3N0YXRpYyBwbGFubmVyX3NldHVwX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfc2V0 dXAgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2h1dGRvd25faG9va190eXBlIHByZXZfcGxhbm5l cl9zaHV0ZG93biA9IE5VTEw7CisKKy8qIE90aGVyIGdsb2JhbCB2YXJpYWJlcyAqLworc3RhdGlj IGludAlwbGFubmVyX2V4dGVuc2lvbl9pZCA9IC0xOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVz LiAqLworc3RhdGljIHZvaWQgcGdwYV9nZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJCQkJICAgT2lkIHJlbGF0aW9uT2JqZWN0SWQsCisJCQkJCQkJCSAgIGJvb2wgaW5o cGFyZW50LAorCQkJCQkJCQkgICBSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIHZvaWQgcGdwYV9q b2lucmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKmpv aW5yZWwsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJICAgUmVsT3B0 SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJICAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJ CQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0KTsKK3N0YXRpYyB2b2lkIHBncGFfam9pbl9wYXRoX3Nl dHVwKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJ CQkJCQkJIFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJy ZWwsCisJCQkJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJIEpvaW5QYXRoRXh0cmFE YXRhICpleHRyYSk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfc2V0dXAoUGxhbm5lckdsb2Jh bCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmlu ZywKKwkJCQkJCQkgICBkb3VibGUgKnR1cGxlX2ZyYWN0aW9uLAorCQkJCQkJCSAgIEV4cGxhaW5T dGF0ZSAqZXMpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX3NodXRkb3duKFBsYW5uZXJHbG9i YWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJp bmcsIFBsYW5uZWRTdG10ICpwc3RtdCk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlf am9pbnJlbF9hZHZpY2UodWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJCQkgIGNoYXIgKnBs YW5fbmFtZSwKKwkJCQkJCQkJCQkJICBwZ3BhX2pvaW5fc3RhdGUgKnBqcyk7CitzdGF0aWMgdm9p ZCBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwK KwkJCQkJCQkJCQkJCXVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJCQkJCWNoYXIgKnBsYW5f bmFtZSwKKwkJCQkJCQkJCQkJCXBncGFfam9pbl9zdGF0ZSAqcGpzKTsKK3N0YXRpYyB2b2lkIHBn cGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJ ICAgcGdwYV90cm92ZV9lbnRyeSAqc2Nhbl9lbnRyaWVzLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNl dCAqc2Nhbl9pbmRleGVzLAorCQkJCQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnJlbF9lbnRy aWVzLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsX2luZGV4ZXMpOworc3RhdGljIHVpbnQ2 NCBwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFn X3R5cGUgdGFnKTsKK3N0YXRpYyBib29sIHBncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4oaW50 IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJIHBncGFfaWRlbnRpZmll ciAqcmlkcywKKwkJCQkJCQkJCQkgcGdwYV90cm92ZV9lbnRyeSAqZW50cnkpOworc3RhdGljIGJv b2wgcGdwYV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5u ZXJfY291bnQsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJ ICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21l dGhvZCk7CitzdGF0aWMgYm9vbCBwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0 ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAq cmlkcywKKwkJCQkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAg Ym9vbCAqcmVzdHJpY3RfbWV0aG9kKTsKK3N0YXRpYyBib29sIHBncGFfc2VtaWpvaW5fcGVybWl0 c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJICAgcGdw YV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnks CisJCQkJCQkJCQkgICBib29sIG91dGVyX3NpZGVfbnVsbGFibGUsCisJCQkJCQkJCQkgICBib29s ICpyZXN0cmljdF9tZXRob2QpOworCitzdGF0aWMgTGlzdCAqcGdwYV9wbGFubmVyX2FwcGVuZF9m ZWVkYmFjayhMaXN0ICpsaXN0LCBwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkJCQkgIHBncGFf dHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRf aWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtl cik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5u ZXJfc3RhdGUgKnBwcywKKwkJCQkJCQkJCQlQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlS ZWxPcHRJbmZvICpyZWwpOworc3RhdGljIHZvaWQgcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBn cGFfcGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCk7CisK K3N0YXRpYyBjaGFyICpwZ3BhX2Jtc190b19jc3RyaW5nKEJpdG1hcHNldCAqYm1zKTsKK3N0YXRp YyBjb25zdCBjaGFyICpwZ3BhX2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5cGUgam9pbnR5cGUp OworCisvKgorICogSW5zdGFsbCBwbGFubmVyLXJlbGF0ZWQgaG9va3MuCisgKi8KK3ZvaWQKK3Bn cGFfcGxhbm5lcl9pbnN0YWxsX2hvb2tzKHZvaWQpCit7CisJcGxhbm5lcl9leHRlbnNpb25faWQg PSBHZXRQbGFubmVyRXh0ZW5zaW9uSWQoInBnX3BsYW5fYWR2aWNlIik7CisJcHJldl9nZXRfcmVs YXRpb25faW5mbyA9IGdldF9yZWxhdGlvbl9pbmZvX2hvb2s7CisJZ2V0X3JlbGF0aW9uX2luZm9f aG9vayA9IHBncGFfZ2V0X3JlbGF0aW9uX2luZm87CisJcHJldl9qb2lucmVsX3NldHVwID0gam9p bnJlbF9zZXR1cF9ob29rOworCWpvaW5yZWxfc2V0dXBfaG9vayA9IHBncGFfam9pbnJlbF9zZXR1 cDsKKwlwcmV2X2pvaW5fcGF0aF9zZXR1cCA9IGpvaW5fcGF0aF9zZXR1cF9ob29rOworCWpvaW5f cGF0aF9zZXR1cF9ob29rID0gcGdwYV9qb2luX3BhdGhfc2V0dXA7CisJcHJldl9wbGFubmVyX3Nl dHVwID0gcGxhbm5lcl9zZXR1cF9ob29rOworCXBsYW5uZXJfc2V0dXBfaG9vayA9IHBncGFfcGxh bm5lcl9zZXR1cDsKKwlwcmV2X3BsYW5uZXJfc2h1dGRvd24gPSBwbGFubmVyX3NodXRkb3duX2hv b2s7CisJcGxhbm5lcl9zaHV0ZG93bl9ob29rID0gcGdwYV9wbGFubmVyX3NodXRkb3duOworfQor CisvKgorICogSG9vayBmdW5jdGlvbiBmb3IgZ2V0X3JlbGF0aW9uX2luZm8oKS4KKyAqCisgKiBX ZSBjYW4gYXBwbHkgc2NhbiBhZHZpY2UgYXQgdGhpcyBvcGludCwgYW5kIHdlIGFsc28gdXNlZSB0 aGlzIGFzIGFuCisgKiBvcHBvcnR1bml0eSB0byBkbyByYW5nZS10YWJsZSBpZGVudGlmaWVyIGNy b3NzLWNoZWNraW5nIGluIGFzc2VydC1lbmFibGVkCisgKiBidWlsZHMuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX2dldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRp b25PYmplY3RJZCwKKwkJCQkJICAgYm9vbCBpbmhwYXJlbnQsIFJlbE9wdEluZm8gKnJlbCkKK3sK KwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRl LCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5lckds b2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwor CS8qIFNhdmUgZGV0YWlscyBuZWVkZWQgZm9yIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgY3Jvc3Mt Y2hlY2tpbmcuICovCisJaWYgKHBwcyAhPSBOVUxMKQorCQlwZ3BhX3JpX2NoZWNrZXJfc2F2ZShw cHMsIHJvb3QsIHJlbCk7CisKKwkvKiBJZiBxdWVyeSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBzZWFy Y2ggZm9yIHJlbGV2YW50IGVudHJpZXMuICovCisJaWYgKHBwcyAhPSBOVUxMICYmIHBwcy0+dHJv dmUgIT0gTlVMTCkKKwl7CisJCXBncGFfaWRlbnRpZmllciByaWQ7CisJCXBncGFfdHJvdmVfcmVz dWx0IHRyZXN1bHRfc2NhbjsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9yZWw7CisKKwkJ LyogU2VhcmNoIGZvciBzY2FuIGFkdmljZSBhbmQgZ2VuZXJhbCByZWwgYWR2aWNlLiAqLworCQlw Z3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwgcmVsLT5yZWxpZCwgJnJpZCk7CisJ CXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4sIDEs ICZyaWQsCisJCQkJCQkgICZ0cmVzdWx0X3NjYW4pOworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMt PnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUwsIDEsICZyaWQsCisJCQkJCQkgICZ0cmVzdWx0 X3JlbCk7CisKKwkJLyogSWYgcmVsZXZhbnQgZW50cmllcyB3ZXJlIGZvdW5kLCBhcHBseSB0aGVt LiAqLworCQlpZiAodHJlc3VsdF9zY2FuLmluZGV4ZXMgIT0gTlVMTCB8fCB0cmVzdWx0X3JlbC5p bmRleGVzICE9IE5VTEwpCisJCXsKKwkJCXVpbnQ2NAkJb3JpZ2luYWxfbWFzayA9IHJlbC0+cGdz X21hc2s7CisKKwkJCXBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShyZWwsCisJCQkJCQkJ CQkJICAgdHJlc3VsdF9zY2FuLmVudHJpZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9zY2FuLmlu ZGV4ZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9yZWwuZW50cmllcywKKwkJCQkJCQkJCQkgICB0 cmVzdWx0X3JlbC5pbmRleGVzKTsKKworCQkJLyogRW1pdCBkZWJ1Z2dpbmcgbWVzc2FnZSwgaWYg ZW5hYmxlZC4gKi8KKwkJCWlmIChwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrICYmIG9yaWdpbmFs X21hc2sgIT0gcmVsLT5wZ3NfbWFzaykKKwkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkoZXJy bXNnKCJzdHJhdGVneSBtYXNrIGZvciBSVEkgJXUgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIg dG8gMHglIiBQUkl4NjQsCisJCQkJCQkJCXJlbC0+cmVsaWQsIG9yaWdpbmFsX21hc2ssIHJlbC0+ cGdzX21hc2spKSk7CisJCX0KKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4g Ki8KKwlpZiAocHJldl9nZXRfcmVsYXRpb25faW5mbykKKwkJKCpwcmV2X2dldF9yZWxhdGlvbl9p bmZvKSAocm9vdCwgcmVsYXRpb25PYmplY3RJZCwgaW5ocGFyZW50LCByZWwpOworfQorCisvKgor ICogU2VhcmNoIGZvciBhZHZpY2UgcGVydGFpbmluZyB0byBhIHByb3Bvc2VkIGpvaW4uCisgKi8K K3N0YXRpYyBwZ3BhX2pvaW5fc3RhdGUgKgorcGdwYV9nZXRfam9pbl9zdGF0ZShQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJUmVsT3B0SW5mbyAqb3V0ZXJyZWws IFJlbE9wdEluZm8gKmlubmVycmVsKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBn cGFfam9pbl9zdGF0ZSAqcGpzOworCWJvb2wJCW5ld19wanMgPSBmYWxzZTsKKworCS8qIEZldGNo IG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJ cHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJf ZXh0ZW5zaW9uX2lkKTsKKwlpZiAocHBzID09IE5VTEwgfHwgcHBzLT50cm92ZSA9PSBOVUxMKQor CXsKKwkJLyogTm8gYWR2aWNlIGFwcGxpZXMgdG8gdGhpcyBxdWVyeSwgaGVuY2Ugbm9uZSB0byB0 aGlzIGpvaW5yZWwuICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogU2VlIHdoZXRo ZXIgd2UndmUgcHJldmlvdXNseSBhc3NvY2lhdGVkIGEgcGdwYV9qb2luX3N0YXRlIHdpdGggdGhp cworCSAqIGpvaW5yZWwuIElmIHdlIGhhdmUgbm90LCB3ZSBuZWVkIHRvIHRyeSB0byBjb25zdHJ1 Y3Qgb25lLiBJZiB3ZSBoYXZlLAorCSAqIHRoZW4gdGhlcmUgYXJlIHR3byBjYXNlczogKGEpIGlm IGlubmVycmVsIGFuZCBvdXRlcnJlbCBhcmUgdW5jaGFuZ2VkLAorCSAqIHdlIGNhbiBzaW1wbHkg dXNlIGl0LCBhbmQgKGIpIGlmIHRoZXkgaGF2ZSBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJlamlnZ2Vy CisJICogdGhlIGFycmF5IG9mIGlkZW50aWZpZXJzIGJ1dCBjYW4gc3RpbGwgc2tpcCB0aGUgdHJv dmUgbG9va3VwLgorCSAqLworCXBqcyA9IEdldFJlbE9wdEluZm9FeHRlbnNpb25TdGF0ZShqb2lu cmVsLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBqcyAhPSBOVUxMKQorCXsKKwkJaWYg KHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYgcGpzLT5yZWxfaW5kZXhlcyA9PSBOVUxMKQor CQl7CisJCQkvKgorCQkJICogSWYgdGhlcmUncyBubyBwb3RlbnRpYWxseSByZWxldmFudCBhZHZp Y2UsIHRoZW4gdGhlIHByZXNlbmNlIG9mCisJCQkgKiB0aGlzIHBncGFfam9pbl9zdGF0ZSBhY3Rz IGxpa2UgYSBuZWdhdGl2ZSBjYWNoZSBlbnRyeTogaXQgdGVsbHMKKwkJCSAqIHVzIG5vdCB0byBi b3RoZXIgc2VhcmNoaW5nIHRoZSB0cm92ZSBmb3IgYWR2aWNlLCBiZWNhdXNlIHdlCisJCQkgKiB3 aWxsIG5vdCBmaW5kIGFueS4KKwkJCSAqLworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAo cGpzLT5vdXRlcnJlbCA9PSBvdXRlcnJlbCAmJiBwanMtPmlubmVycmVsID09IGlubmVycmVsKQor CQl7CisJCQkvKiBObyB1cGRhdGVzIHJlcXVpcmVkLCBzbyBqdXN0IHJldHVybi4gKi8KKwkJCS8q IFhYWC4gRG9lcyB0aGlzIG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZlcmVudCB1bmRlciBHRVFP PyAqLworCQkJcmV0dXJuIHBqczsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlcmUncyBubyBw Z3BhX2pvaW5fc3RhdGUgeWV0LCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG9uZS4gVHJvdmUga2V5cwor CSAqIHdpbGwgbm90IGdldCBidWlsdCBmb3IgUlRFX0pPSU4gUlRFcywgc28gdGhlIGFycmF5IG1h eSBlbmQgdXAgYmVpbmcKKwkgKiBsYXJnZXIgdGhhbiBuZWVkZWQuIEl0J3Mgbm90IHdvcnRoIHRy eWluZyB0byBjb21wdXRlIGEgcGVyZmVjdGx5CisJICogYWNjdXJhdGUgY291bnQgaGVyZS4KKwkg Ki8KKwlpZiAocGpzID09IE5VTEwpCisJeworCQlpbnQJCQlwZXNzaW1pc3RpY19jb3VudCA9IGJt c19udW1fbWVtYmVycyhqb2lucmVsLT5yZWxpZHMpOworCisJCXBqcyA9IHBhbGxvYzBfb2JqZWN0 KHBncGFfam9pbl9zdGF0ZSk7CisJCXBqcy0+cmlkcyA9IHBhbGxvY19hcnJheShwZ3BhX2lkZW50 aWZpZXIsIHBlc3NpbWlzdGljX2NvdW50KTsKKwkJbmV3X3BqcyA9IHRydWU7CisJfQorCisJLyoK KwkgKiBFaXRoZXIgd2UganVzdCBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0YXRlLCBvciB0 aGUgZXhpc3Rpbmcgb25lCisJICogbmVlZHMgcmVjb25maWd1cmluZyBmb3IgYSBuZXcgaW5uZXJy ZWwgYW5kIG91dGVycmVsLiBUaGUgcmVxdWlyZWQgYXJyYXkKKwkgKiBzaXplIGNhbid0IGNoYW5n ZSwgc28gd2UgY2FuIG92ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcgb25lLgorCSAqLworCXBqcy0+b3V0 ZXJyZWwgPSBvdXRlcnJlbDsKKwlwanMtPmlubmVycmVsID0gaW5uZXJyZWw7CisJcGpzLT5vdXRl cl9jb3VudCA9CisJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMocm9vdCwgb3V0 ZXJyZWwtPnJlbGlkcywgcGpzLT5yaWRzKTsKKwlwanMtPmlubmVyX2NvdW50ID0KKwkJcGdwYV9j b21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlkcyhyb290LCBpbm5lcnJlbC0+cmVsaWRzLAorCQkJ CQkJCQkJCSAgIHBqcy0+cmlkcyArIHBqcy0+b3V0ZXJfY291bnQpOworCisJLyoKKwkgKiBJZiB3 ZSBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0YXRlLCBzZWFyY2ggb3VyIHRyb3ZlIG9mIGFk dmljZSBmb3IKKwkgKiByZWxldmFudCBlbnRyaWVzLiBUaGUgdHJvdmUgbG9va3VwIHdpbGwgcmV0 dXJuIHRoZSBzYW1lIHJlc3VsdHMgZm9yCisJICogZXZlcnkgb3V0ZXJyZWwvaW5uZXJyZWwgY29t YmluYXRpb24sIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVwZWF0IHRoYXQKKwkgKiB3b3JrIGV2ZXJ5 IHRpbWUuCisJICovCisJaWYgKG5ld19wanMpCisJeworCQlwZ3BhX3Ryb3ZlX3Jlc3VsdCB0cmVz dWx0OworCisJCS8qIEZpbmQgam9pbiBlbnRyaWVzLiAqLworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChw cHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJCQkJICBwanMtPm91dGVyX2Nv dW50ICsgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCSAgcGpzLT5yaWRzLCAmdHJlc3VsdCk7CisJ CXBqcy0+am9pbl9lbnRyaWVzID0gdHJlc3VsdC5lbnRyaWVzOworCQlwanMtPmpvaW5faW5kZXhl cyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBGaW5kIHJlbCBlbnRyaWVzLiAqLworCQlwZ3Bh X3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUwsCisJCQkJCQkg IHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBwanMtPnJpZHMs ICZ0cmVzdWx0KTsKKwkJcGpzLT5yZWxfZW50cmllcyA9IHRyZXN1bHQuZW50cmllczsKKwkJcGpz LT5yZWxfaW5kZXhlcyA9IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBOb3cgdGhhdCB0aGUgbmV3 IHBncGFfam9pbl9zdGF0ZSBpcyBmdWxseSB2YWxpZCwgc2F2ZSBhIHBvaW50ZXIuICovCisJCVNl dFJlbE9wdEluZm9FeHRlbnNpb25TdGF0ZShqb2lucmVsLCBwbGFubmVyX2V4dGVuc2lvbl9pZCwg cGpzKTsKKworCQkvKgorCQkgKiBJZiB0aGVyZSB3YXMgbm8gcmVsZXZhbnQgYWR2aWNlIGZvdW5k LCBqdXN0IHJldHVybiBOVUxMLiBUaGlzCisJCSAqIHBncGFfam9pbl9zdGF0ZSB3aWxsIHN0aWNr IGFyb3VuZCBhcyBhIHNvcnQgb2YgbmVnYXRpdmUgY2FjaGUKKwkJICogZW50cnksIHNvIHRoYXQg ZnV0dXJlIGNhbGxzIGZvciB0aGlzIHNhbWUgam9pbnJlbCBxdWlja2x5IHJldHVybgorCQkgKiBO VUxMLgorCQkgKi8KKwkJaWYgKHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYgcGpzLT5yZWxf aW5kZXhlcyA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBqczsKK30K KworLyoKKyAqIEVuZm9yY2UgYW55IHByb3ZpZGVkIGFkdmljZSB0aGF0IGlzIHJlbGV2YW50IHRv IGFueSBtZXRob2Qgb2YgaW1wbGVtZW50aW5nCisgKiB0aGlzIGpvaW4uCisgKgorICogQWx0aG91 Z2ggd2UncmUgcGFzc2VkIHRoZSBvdXRlcnJlbCBhbmQgaW5uZXJyZWwgaGVyZSwgdGhvc2UgYXJl IGp1c3QKKyAqIHdoYXRldmVyIHZhbHVlcyBoYXBwZW5lZCB0byBwcm9tcHQgdGhlIGNyZWF0aW9u IG9mIHRoaXMgam9pbnJlbDsgdGhleQorICogc2hvdWxkbid0IHJlYWxseSBpbmZsdWVuY2Ugb3Vy IGNob2ljZSBvZiB3aGF0IGFkdmljZSB0byBhcHBseS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFf am9pbnJlbF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJ CQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJICAg U3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExpc3QgKnJlc3RyaWN0bGlzdCkKK3sKKwlwZ3BhX2pv aW5fc3RhdGUgKnBqczsKKworCUFzc2VydChibXNfbWVtYmVyc2hpcChqb2lucmVsLT5yZWxpZHMp ID09IEJNU19NVUxUSVBMRSk7CisKKwkvKiBHZXQgb3VyIHByaXZhdGUgc3RhdGUgaW5mb3JtYXRp b24gZm9yIHRoaXMgam9pbi4gKi8KKwlwanMgPSBwZ3BhX2dldF9qb2luX3N0YXRlKHJvb3QsIGpv aW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCk7CisKKwkvKiBJZiB0aGVyZSBpcyByZWxldmFudCBh ZHZpY2UsIGNhbGwgYSBoZWxwZXIgZnVuY3Rpb24gdG8gYXBwbHkgaXQuICovCisJaWYgKHBqcyAh PSBOVUxMKQorCXsKKwkJdWludDY0CQlvcmlnaW5hbF9tYXNrID0gam9pbnJlbC0+cGdzX21hc2s7 CisKKwkJcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlKCZqb2lucmVsLT5wZ3NfbWFz aywKKwkJCQkJCQkJCQkgIHJvb3QtPnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkgIHBqcyk7CisKKwkJ LyogRW1pdCBkZWJ1Z2dpbmcgbWVzc2FnZSwgaWYgZW5hYmxlZC4gKi8KKwkJaWYgKHBnX3BsYW5f YWR2aWNlX3RyYWNlX21hc2sgJiYgb3JpZ2luYWxfbWFzayAhPSBqb2lucmVsLT5wZ3NfbWFzaykK KwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycm1zZygic3RyYXRlZ3kgbWFzayBmb3Igam9p biBvbiBSVElzICVzIGNoYW5nZWQgZnJvbSAweCUiIFBSSXg2NCAiIHRvIDB4JSIgUFJJeDY0LAor CQkJCQkJCXBncGFfYm1zX3RvX2NzdHJpbmcoam9pbnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlvcmln aW5hbF9tYXNrLAorCQkJCQkJCWpvaW5yZWwtPnBnc19tYXNrKSkpOworCX0KKworCS8qIFBhc3Mg Y2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2pvaW5yZWxfc2V0dXApCisJCSgq cHJldl9qb2lucmVsX3NldHVwKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLAor CQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKK30KKworLyoKKyAqIEVuZm9yY2UgYW55 IHByb3ZpZGVkIGFkdmljZSB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBtZXRo b2Qgb2YKKyAqIGltcGxlbWVudGluZyB0aGlzIHBhcnRpY3VsYXIgam9pbi4KKyAqLworc3RhdGlj IHZvaWQKK3BncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpqb2lucmVsLAorCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVy cmVsLAorCQkJCQkgSm9pblR5cGUgam9pbnR5cGUsIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSkK K3sKKwlwZ3BhX2pvaW5fc3RhdGUgKnBqczsKKworCUFzc2VydChibXNfbWVtYmVyc2hpcChqb2lu cmVsLT5yZWxpZHMpID09IEJNU19NVUxUSVBMRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIGNvbnNp ZGVyaW5nIGltcGxlbWVudGluZyBhIHNlbWlqb2luIGJ5IG1ha2luZyBvbmUgc2lkZSB1bmlxdWUs CisJICogbWFrZSBhIG5vdGUgb2YgaXQgaW4gdGhlIHBncGFfcGxhbm5lcl9zdGF0ZS4gU2VlIGNv bW1lbnRzIGZvcgorCSAqIHBncGFfc2pfdW5pcXVlX3JlbCBmb3Igd2h5IHdlIGRvIHRoaXMuCisJ ICovCisJaWYgKGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSIHx8IGpvaW50eXBlID09IEpP SU5fVU5JUVVFX0lOTkVSKQorCXsKKwkJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisJCVJlbE9w dEluZm8gKnVuaXF1ZXJlbDsKKworCQl1bmlxdWVyZWwgPSBqb2ludHlwZSA9PSBKT0lOX1VOSVFV RV9PVVRFUiA/IG91dGVycmVsIDogaW5uZXJyZWw7CisJCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxF eHRlbnNpb25TdGF0ZShyb290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJCWlmIChw cHMgIT0gTlVMTCAmJiBwcHMtPndhbGtfcGxhbl90cmVlKQorCQl7CisJCQlib29sCQlmb3VuZCA9 IGZhbHNlOworCisJCQkvKiBBdm9pZCBhZGRpbmcgZHVwbGljYXRlcy4gKi8KKwkJCWZvcmVhY2hf cHRyKHBncGFfc2pfdW5pcXVlX3JlbCwgdXIsIHBwcy0+c2pfdW5pcXVlX3JlbHMpCisJCQl7CisJ CQkJLyoKKwkJCQkgKiBXZSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgc2FtZSBwb2ludGVyIGZvciB0 aGUgc2FtZSBwbGFuCisJCQkJICogbmFtZSwgc28gd2UgbmVlZCBub3QgdXNlIHN0cmNtcCgpIGhl cmUuCisJCQkJICovCisJCQkJaWYgKHJvb3QtPnBsYW5fbmFtZSA9PSB1ci0+cGxhbl9uYW1lICYm CisJCQkJCWJtc19lcXVhbCh1bmlxdWVyZWwtPnJlbGlkcywgdXItPnJlbGlkcykpCisJCQkJewor CQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogSWYg bm90IGEgZHVwbGljYXRlLCBhcHBlbmQgdG8gdGhlIGxpc3QuICovCisJCQlpZiAoIWZvdW5kKQor CQkJeworCQkJCXBncGFfc2pfdW5pcXVlX3JlbCAqdXIgPSBwYWxsb2Nfb2JqZWN0KHBncGFfc2pf dW5pcXVlX3JlbCk7CisKKwkJCQl1ci0+cGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworCQkJ CXVyLT5yZWxpZHMgPSB1bmlxdWVyZWwtPnJlbGlkczsKKwkJCQlwcHMtPnNqX3VuaXF1ZV9yZWxz ID0gbGFwcGVuZChwcHMtPnNqX3VuaXF1ZV9yZWxzLCB1cik7CisJCQl9CisJCX0KKwl9CisKKwkv KiBHZXQgb3VyIHByaXZhdGUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgam9pbi4gKi8KKwlw anMgPSBwZ3BhX2dldF9qb2luX3N0YXRlKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJl bCk7CisKKwkvKiBJZiB0aGVyZSBpcyByZWxldmFudCBhZHZpY2UsIGNhbGwgYSBoZWxwZXIgZnVu Y3Rpb24gdG8gYXBwbHkgaXQuICovCisJaWYgKHBqcyAhPSBOVUxMKQorCXsKKwkJdWludDY0CQlv cmlnaW5hbF9tYXNrID0gZXh0cmEtPnBnc19tYXNrOworCisJCXBncGFfcGxhbm5lcl9hcHBseV9q b2luX3BhdGhfYWR2aWNlKGpvaW50eXBlLAorCQkJCQkJCQkJCQkmZXh0cmEtPnBnc19tYXNrLAor CQkJCQkJCQkJCQlyb290LT5wbGFuX25hbWUsCisJCQkJCQkJCQkJCXBqcyk7CisKKwkJLyogRW1p dCBkZWJ1Z2dpbmcgbWVzc2FnZSwgaWYgZW5hYmxlZC4gKi8KKwkJaWYgKHBnX3BsYW5fYWR2aWNl X3RyYWNlX21hc2sgJiYgb3JpZ2luYWxfbWFzayAhPSBleHRyYS0+cGdzX21hc2spCisJCQllcmVw b3J0KFdBUk5JTkcsCisJCQkJCShlcnJtc2coInN0cmF0ZWd5IG1hc2sgZm9yICVzIGpvaW4gb24g JXMgd2l0aCBvdXRlciAlcyBhbmQgaW5uZXIgJXMgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIg dG8gMHglIiBQUkl4NjQsCisJCQkJCQkJcGdwYV9qb2ludHlwZV90b19jc3RyaW5nKGpvaW50eXBl KSwKKwkJCQkJCQlwZ3BhX2Jtc190b19jc3RyaW5nKGpvaW5yZWwtPnJlbGlkcyksCisJCQkJCQkJ cGdwYV9ibXNfdG9fY3N0cmluZyhvdXRlcnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlwZ3BhX2Jtc190 b19jc3RyaW5nKGlubmVycmVsLT5yZWxpZHMpLAorCQkJCQkJCW9yaWdpbmFsX21hc2ssCisJCQkJ CQkJZXh0cmEtPnBnc19tYXNrKSkpOworCX0KKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91cyBo b29rLiAqLworCWlmIChwcmV2X2pvaW5fcGF0aF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5fcGF0aF9z ZXR1cCkgKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkJIGpvaW50 eXBlLCBleHRyYSk7Cit9CisKKy8qCisgKiBDYXJyeSBvdXQgd2hhdGV2ZXIgc2V0dXAgd29yayB3 ZSBuZWVkIHRvIGRvIGJlZm9yZSBwbGFubmluZy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxh bm5lcl9zZXR1cChQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIg KnF1ZXJ5X3N0cmluZywKKwkJCQkgICBkb3VibGUgKnR1cGxlX2ZyYWN0aW9uLCBFeHBsYWluU3Rh dGUgKmVzKQoreworCXBncGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlwZ3BhX3BsYW5uZXJfc3Rh dGUgKnBwczsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7CisJYm9vbAkJ d2Fsa19wbGFuX3RyZWUgPSBmYWxzZTsKKwlib29sCQluZWVkc19wcHMgPSBmYWxzZTsKKworCS8q CisJICogRGVjaWRlIHdoZXRoZXIgd2UgbmVlZCB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5n LiBXZSBtdXN0IGRvIHRoaXMgaWYKKwkgKiBhdCBsZWFzdCBvbmUgY29sbGVjdG9yIGlzIGVuYWJs ZWQgb3IgaWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBpdCB1c2luZworCSAqIHRoZSBFWFBMQUlO IChQTEFOX0FEVklDRSkgb3B0aW9uLgorCSAqLworCWdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSAo cGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDAgfHwKKwkJCQkJCQkgIHBn X3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0ID4gMCB8fAorCQkJCQkJCSAgcGdf cGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oZXMpKTsKKwlpZiAoZ2VuZXJhdGVfYWR2aWNlX3N0 cmluZykKKwl7CisJCXdhbGtfcGxhbl90cmVlID0gdHJ1ZTsKKwkJbmVlZHNfcHBzID0gdHJ1ZTsK Kwl9CisKKwkvKgorCSAqIElmIGFueSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBidWlsZCBhIHRyb3Zl IG9mIGFkdmljZSBmb3IgdXNlIGR1cmluZworCSAqIHBsYW5uaW5nLgorCSAqLworCWlmIChwZ19w bGFuX2FkdmljZV9hZHZpY2UgIT0gTlVMTCAmJiBwZ19wbGFuX2FkdmljZV9hZHZpY2VbMF0gIT0g J1wwJykKKwl7CisJCUxpc3QJICAgKmFkdmljZV9pdGVtczsKKwkJY2hhcgkgICAqZXJyb3I7CisK KwkJLyoKKwkJICogUGFyc2luZyBzaG91bGRuJ3QgZmFpbCBoZXJlLCBiZWNhdXNlIHdlIG11c3Qg aGF2ZSBwcmV2aW91c2x5IHBhcnNlZAorCQkgKiBzdWNjZXNzZnVsbHkgaW4gcGdfcGxhbl9hZHZp Y2VfYWR2aWNlX2NoZWNrX2hvb2ssIGJ1dCBpZiBpdCBkb2VzLAorCQkgKiBlbWl0IGEgd2Fybmlu Zy4KKwkJICovCisJCWFkdmljZV9pdGVtcyA9IHBncGFfcGFyc2UocGdfcGxhbl9hZHZpY2VfYWR2 aWNlLCAmZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3Qg cGFyc2UgYWR2aWNlOiAlcyIsIGVycm9yKTsKKworCQkvKgorCQkgKiBJdCdzIHBvc3NpYmxlIHRo YXQgdGhlIGFkdmljZSBzdHJpbmcgd2FzIG5vbi1lbXB0eSBidXQgY29udGFpbmVkIG5vCisJCSAq IGFjdHVhbCBhZHZpY2UsIGUuZy4gaXQgd2FzIGFsbCB3aGl0ZXNwYWNlLgorCQkgKi8KKwkJaWYg KGFkdmljZV9pdGVtcyAhPSBOSUwpCisJCXsKKwkJCXRyb3ZlID0gcGdwYV9idWlsZF90cm92ZShh ZHZpY2VfaXRlbXMpOworCQkJd2Fsa19wbGFuX3RyZWUgPSB0cnVlOworCQkJbmVlZHNfcHBzID0g dHJ1ZTsKKwkJfQorCX0KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworCS8qCisJICog SWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwgYWx3YXlzIGJ1aWxkIGEgcHJpdmF0ZSBzdGF0ZSBvYmpl Y3QgZm9yCisJICogY3Jvc3MtY2hlY2tzLgorCSAqLworCW5lZWRzX3BwcyA9IHRydWU7CisjZW5k aWYKKworCS8qCisJICogV2Ugb25seSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBwcml2YXRlIHN0 YXRlIG9iamVjdCBpZiBpdCdzIG5lZWRlZCBmb3IKKwkgKiBzb21lIHB1cnBvc2UuIFRoYXQgY291 bGQgYmUgKDEpIHJlY29yZGluZyB0aGF0IHdlIHdpbGwgbmVlZCB0byBnZW5lcmF0ZQorCSAqIGFu IGFkdmljZSBzdHJpbmcsICgyKSBzdG9yaW5nIGEgdHJvdmUgb2Ygc3VwcGxpZWQgYWR2aWNlLCBv ciAoMykKKwkgKiBmYWNpbGl0YXRpbmcgZGVidWdnaW5nIGNyb3NzLWNoZWNrcyB3aGVuIGFzc2Vy dHMgYXJlIGVuYWJsZWQuCisJICovCisJaWYgKG5lZWRzX3BwcykKKwl7CisJCXBwcyA9IHBhbGxv YzBfb2JqZWN0KHBncGFfcGxhbm5lcl9zdGF0ZSk7CisJCXBwcy0+ZXhwbGFpbl9zdGF0ZSA9IGVz OworCQlwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSBnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5n OworCQlwcHMtPndhbGtfcGxhbl90cmVlID0gd2Fsa19wbGFuX3RyZWU7CisJCXBwcy0+dHJvdmUg PSB0cm92ZTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCXBwcy0+cmlfY2hlY2tfaGFz aCA9CisJCQlwZ3BhX3JpX2NoZWNrX2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwgMTAyNCwg TlVMTCk7CisjZW5kaWYKKwkJU2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2IsIHBs YW5uZXJfZXh0ZW5zaW9uX2lkLCBwcHMpOworCX0KK30KKworLyoKKyAqIENhcnJ5IG91dCB3aGF0 ZXZlciB3b3JrIHdlIHdhbnQgdG8gZG8gYWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUuCisgKi8K K3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwg UXVlcnkgKnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0 bXQgKnBzdG10KQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBncGFfdHJvdmUgKnRy b3ZlID0gTlVMTDsKKwlFeHBsYWluU3RhdGUgKmVzID0gTlVMTDsKKwlwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgd2Fsa2VyID0gezB9OwkvKiBwbGFjYXRlIGNvbXBpbGVyICovCisJYm9vbAkJZ2Vu ZXJhdGVfYWR2aWNlX3N0cmluZyA9IGZhbHNlOworCWJvb2wJCXdhbGtfcGxhbl90cmVlID0gZmFs c2U7CisJTGlzdAkgICAqcGdwYV9pdGVtcyA9IE5JTDsKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lk ZW50aWZpZXJzID0gTlVMTDsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAg YnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVu c2lvblN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocHBzICE9IE5VTEwp CisJeworCQl0cm92ZSA9IHBwcy0+dHJvdmU7CisJCWVzID0gcHBzLT5leHBsYWluX3N0YXRlOwor CQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gcHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nOwor CQl3YWxrX3BsYW5fdHJlZSA9IHBwcy0+d2Fsa19wbGFuX3RyZWU7CisJfQorCisJLyoKKwkgKiBJ ZiBhbnkgYWR2aWNlIHdhcyBzcGVjaWZpZWQsIGFuZCBpZiB3ZSdyZSBydW5uaW5nIHVuZGVyIEVY UExBSU4sIHRoZW4KKwkgKiB3ZSBzaG91bGQgdHJ5IHRyeSB0byBwcm92aWRlIGFkdmljZSBmZWVk YmFjay4KKwkgKgorCSAqIElmIHdlJ3JlIHRyeWluZyB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3Ry aW5nIG9yIGlmIHdlJ3JlIHRyeWluZyB0bworCSAqIHByb3ZpZGUgYWR2aWNlIGZlZWRiYWNrLCB0 aGVuIHdlIHdpbGwgbmVlZCB0byBjcmVhdGUgcmFuZ2UgdGFibGUKKwkgKiBpZGVudGlmaWVycy4K KwkgKi8KKwlpZiAod2Fsa19wbGFuX3RyZWUpCisJeworCQlwZ3BhX3BsYW5fd2Fsa2VyKCZ3YWxr ZXIsIHBzdG10LCBwcHMtPnNqX3VuaXF1ZV9yZWxzKTsKKwkJcnRfaWRlbnRpZmllcnMgPSBwZ3Bh X2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKwl9CisKKwkvKiBH ZW5lcmF0ZSB0aGUgYWR2aWNlIHN0cmluZywgaWYgd2UgbmVlZCB0byBkbyBzby4gKi8KKwlpZiAo Z2VuZXJhdGVfYWR2aWNlX3N0cmluZykKKwl7CisJCWNoYXIJICAgKmFkdmljZV9zdHJpbmc7CisJ CVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkvKiBHZW5lcmF0ZSBhIHRleHR1YWwgYWR2aWNlIHN0 cmluZy4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXBncGFfb3V0cHV0X2FkdmljZSgm YnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCWFkdmljZV9zdHJpbmcgPSBidWYuZGF0 YTsKKworCQkvKiBJZiB0aGUgYWR2aWNlIHN0cmluZyBpcyBlbXB0eSwgZG9uJ3QgYm90aGVyIGNv bGxlY3RpbmcgaXQuICovCisJCWlmIChhZHZpY2Vfc3RyaW5nWzBdICE9ICdcMCcpCisJCQlwZ3Bh X2NvbGxlY3RfYWR2aWNlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJp bmcpOworCisJCS8qCisJCSAqIElmIHdlJ3ZlIGdvbmUgdG8gdGhlIHRyb3VibGUgb2YgZ2VuZXJh dGluZyBhbiBhZHZpY2Ugc3RyaW5nLCBhbmQgaWYKKwkJICogd2UncmUgaW5zaWRlIEVYUExBSU4s IHNhdmUgdGhlIHN0cmluZyBzbyB3ZSBkb24ndCBuZWVkIHRvCisJCSAqIHJlZ2VuZXJhdGUgaXQu CisJCSAqLworCQlpZiAoZXMgIT0gTlVMTCkKKwkJCXBncGFfaXRlbXMgPSBsYXBwZW5kKHBncGFf aXRlbXMsCisJCQkJCQkJCSBtYWtlRGVmRWxlbSgiYWR2aWNlX3N0cmluZyIsCisJCQkJCQkJCQkJ CSAoTm9kZSAqKSBtYWtlU3RyaW5nKGFkdmljZV9zdHJpbmcpLAorCQkJCQkJCQkJCQkgLTEpKTsK Kwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBwbGFubmluZyB3aXRoaW4gRVhQTEFJTiwgbWFrZSBh cnJhbmdlbWVudHMgdG8gYWxsb3cgRVhQTEFJTgorCSAqIHRvIHRlbGwgdGhlIHVzZXIgd2hhdCBo YXMgaGFwcGVuZWQgd2l0aCB0aGUgcHJvdmlkZWQgYWR2aWNlLgorCSAqCisJICogTkI6IElmIEVY UExBSU4gaXMgdXNlZCBvbiBhIHByZXBhcmVkIGlzIGEgcHJlcGFyZWQgc3RhdGVtZW50LCBwbGFu bmluZworCSAqIHdpbGwgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGhhcHBlbmVkIHdpdGhvdXQgcmVj b3JkaW5nIHRoZXNlIGRldGFpbHMuIFdlCisJICogY291bGQgY29uc2lkZXIgYWRkaW5nIGEgR1VD IHRvIGNhdGVyIHRvIHRoYXQgc2NlbmFyaW87IG9yIHdlIGNvdWxkIGRvCisJICogdGhpcyB3b3Jr IGFsbCB0aGUgdGltZSwgYnV0IHRoYXQgc2VlbXMgbGlrZSB0b28gbXVjaCBvdmVyaGVhZC4KKwkg Ki8KKwlpZiAodHJvdmUgIT0gTlVMTCAmJiBlcyAhPSBOVUxMKQorCXsKKwkJTGlzdAkgICAqZmVl ZGJhY2sgPSBOSUw7CisKKwkJLyoKKwkJICogSW5qZWN0IGEgTm9kZS10cmVlIHJlcHJlc2VudGF0 aW9uIG9mIGFsbCB0aGUgdHJvdmUtZW50cnkgZmxhZ3MgaW50bworCQkgKiB0aGUgUGxhbm5lZFN0 bXQuCisJCSAqLworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVl ZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQ X1NDQU4sCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisJCWZlZWRiYWNr ID0gcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRy b3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCQkJCQkJCXJ0 X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5k X2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BB X1RST1ZFX0xPT0tVUF9SRUwsCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7 CisKKwkJcGdwYV9pdGVtcyA9IGxhcHBlbmQocGdwYV9pdGVtcywgbWFrZURlZkVsZW0oImZlZWRi YWNrIiwKKwkJCQkJCQkJCQkJCQkgKE5vZGUgKikgZmVlZGJhY2ssCisJCQkJCQkJCQkJCQkJIC0x KSk7CisJfQorCisJLyogUHVzaCB3aGF0ZXZlciBkYXRhIHdlJ3JlIHNhdmluZyBpbnRvIHRoZSBQ bGFubmVkU3RtdC4gKi8KKwlpZiAocGdwYV9pdGVtcyAhPSBOSUwpCisJCXBzdG10LT5leHRlbnNp b25fc3RhdGUgPQorCQkJbGFwcGVuZChwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAorCQkJCQltYWtl RGVmRWxlbSgicGdfcGxhbl9hZHZpY2UiLCAoTm9kZSAqKSBwZ3BhX2l0ZW1zLCAtMSkpOworCisJ LyoKKwkgKiBJZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBjcm9zcy1jaGVjayB0aGUgZ2VuZXJh dGVkIHJhbmdlIHRhYmxlCisJICogaWRlbnRpZmllcnMuCisJICovCisJaWYgKHBwcyAhPSBOVUxM KQorCQlwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocHBzLCBwc3RtdCk7Cit9CisKKy8qCisgKiBF bmZvcmNlIG92ZXJhbGwgcmVzdHJpY3Rpb25zIG9uIGEgam9pbiByZWxhdGlvbiB0aGF0IGFwcGx5 IHVuaWZvcm1seQorICogcmVnYXJkbGVzcyBvZiB0aGUgY2hvaWNlIG9mIGlubmVyIGFuZCBvdXRl ciByZWwuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZp Y2UodWludDY0ICpwZ3NfbWFza19wLCBjaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCSAgcGdwYV9q b2luX3N0YXRlICpwanMpCit7CisJaW50CQkJaSA9IC0xOworCWludAkJCWZsYWdzOworCWJvb2wJ CWdhdGhlcl9jb25mbGljdCA9IGZhbHNlOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOworCUJp dG1hcHNldCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpnYXRo ZXJfZnVsbF9tYXRjaCA9IE5VTEw7CisJYm9vbAkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IGZh bHNlOworCWludAkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IDA7CisJQml0bWFwc2V0ICAqcGFy dGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpwYXJ0aXRpb253 aXNlX2Z1bGxfbWF0Y2ggPSBOVUxMOworCisJLyogSXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJseS1y ZWxldmFudCBhZHZpY2UuICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+cmVs X2luZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpz LT5yZWxfZW50cmllc1tpXTsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisJCWJvb2wJCWZ1bGxfbWF0 Y2ggPSBmYWxzZTsKKwkJdWludDY0CQlteV9nYXRoZXJfbWFzayA9IDA7CisJCWludAkJCW15X3Bh cnRpdGlvbndpc2Vfb3V0Y29tZSA9IDA7CS8qID4wIHllcywgPDAgbm8gKi8KKworCQkvKgorCQkg KiBGb3IgR0FUSEVSIGFuZCBHQVRIRVJfTUVSR0UsIGlmIHRoZSBzcGVjaWZpZWQgcmVsYXRpb25z IGV4YWN0bHkKKwkJICogbWF0Y2ggdGhpcyBqb2lucmVsLCBkbyB3aGF0ZXZlciB0aGUgYWR2aWNl IHNheXM7IG90aGVyd2lzZSwgZG9uJ3QKKwkJICogYWxsb3cgR2F0aGVyIG9yIEdhdGhlciBNZXJn ZSBhdCB0aGlzIGxldmVsLiBGb3IgTk9fR0FUSEVSLCB0aGVyZQorCQkgKiBtdXN0IGJlIGEgc2lu Z2xlIHRhcmdldCByZWxhdGlvbiB3aGljaCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoaXMKKwkJICog am9pbnJlbCwgc28ganVzdCBkb24ndCBhbGxvdyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGhlcmUs IGZ1bGwKKwkJICogc3RvcC4KKwkJICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX05P X0dBVEhFUikKKwkJeworCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElB TDsKKwkJCWZ1bGxfbWF0Y2ggPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJaW50CQkJdG90 YWxfY291bnQ7CisKKwkJCXRvdGFsX2NvdW50ID0gcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5u ZXJfY291bnQ7CisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldCh0b3RhbF9j b3VudCwgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJZW50cnktPnRhcmdldCk7CisJCQlBc3NlcnQo aXRtICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKworCQkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVB TCkKKwkJCXsKKwkJCQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJCQlpZiAoZW50cnktPnRhZyA9PSBQ R1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAx OworCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSKQorCQkJCQlteV9n YXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BB X1RBR19HQVRIRVJfTUVSR0UpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUl9NRVJH RTsKKwkJCQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0YWc6ICVk IiwKKwkJCQkJCSAoaW50KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlp ZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJCXsKKwkJCQkJbXlf cGFydGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NP TlNJREVSX05PTlBBUlRJQUw7CisJCQkJfQorCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQ QV9UQUdfR0FUSEVSIHx8CisJCQkJCQkgZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVS R0UpCisJCQkJeworCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJCQkJbXlf Z2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJZWxzZQor CQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBhZHZpY2UgdGFnOiAlZCIsCisJCQkJCQkgKGlu dCkgZW50cnktPnRhZyk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlfZ2F0 aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2UgYSBub3RlIGlmIHRoZQorCQkgKiBh ZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMpIHJl bWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2guCisJ CSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJeworCQkJaWYgKGdhdGhlcl9tYXNr ICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0aGVyX2NvbmZs aWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0aGVyX21hc2s7CisJCQlpZiAoZnVs bF9tYXRjaCkKKwkJCQlnYXRoZXJfZnVsbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9m dWxsX21hdGNoLCBpKTsKKwkJCWVsc2UKKwkJCQlnYXRoZXJfcGFydGlhbF9tYXRjaCA9IGJtc19h ZGRfbWVtYmVyKGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCisJCS8qCisJCSAqIExp a2V3aXNlLCBpZiB3ZSBzZXQgbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lIHVwIGFib3ZlLCB0aGVu IHdlICgxKQorCQkgKiBtYWtlIGEgbm90ZSBpZiB0aGUgYWR2aWNlIGNvbmZsaWN0ZWQsICgyKSBy ZW1lbWJlciB3aGF0IHRoZSBkZXNpcmVkCisJCSAqIG91dGNvbWUgd2FzLCBhbmQgKDMpIHJlbWVt YmVyIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwKKwkJICogbWF0Y2guCisJCSAq LworCQlpZiAobXlfcGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDApCisJCXsKKwkJCWlmIChwYXJ0 aXRpb253aXNlX291dGNvbWUgIT0gMCAmJgorCQkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSBt eV9wYXJ0aXRpb253aXNlX291dGNvbWUpCisJCQkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IHRy dWU7CisJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgPSBteV9wYXJ0aXRpb253aXNlX291dGNvbWU7 CisJCQlpZiAoZnVsbF9tYXRjaCkKKwkJCQlwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2ggPQorCQkJ CQlibXNfYWRkX21lbWJlcihwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQor CQkJCXBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHBh cnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKgorCSAqIE1hcmsg ZXZlcnkgR2F0aGVyLXJlbGF0ZWQgcGllY2Ugb2YgYWR2aWNlIGFzIHBhcnRpYWxseSBtYXRjaGVk LCBhbmQgaWYKKwkgKiB0aGUgc2V0IG9mIHRhcmdldHMgZXhhY3RseSBtYXRjaGVkIHRoaXMgcmVs YXRpb24sIGZ1bGx5IG1hdGNoZWQuIElmCisJICogdGhlcmUgd2FzIGEgY29uZmxpY3QsIG1hcmsg dGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BB UlRJQUw7CisJaWYgKGdhdGhlcl9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElD VElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfcGFy dGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3Bh X3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfZnVsbF9tYXRjaCwgZmxh Z3MpOworCisJLyogTGlrZXdpc2UgZm9yIHBhcnRpdGlvbndpc2UgYWR2aWNlLiAqLworCWZsYWdz ID0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCWlmIChwYXJ0aXRpb253aXNlX2NvbmZsaWN0KQor CQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBq cy0+cmVsX2VudHJpZXMsIHBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZs YWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJl bF9lbnRyaWVzLCBwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRo ZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5nIGdhdGhlciBzcGVjaWZpY2F0aW9uLCBlbmZvcmNlIGl0 LiAqLworCWlmIChnYXRoZXJfbWFzayAhPSAwICYmICFnYXRoZXJfY29uZmxpY3QpCisJeworCQkq cGdzX21hc2tfcCAmPQorCQkJfihQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19D T05TSURFUl9OT05QQVJUSUFMKTsKKwkJKnBnc19tYXNrX3AgfD0gZ2F0aGVyX21hc2s7CisJfQor CisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIG5vbi1jb25mbGljdGluZyBwYXJ0aXRpb253aXNlIHNw ZWNpZmljYXRpb24sIGVuZm9yY2UuCisJICoKKwkgKiBUbyBmb3JjZSBhIHBhcnRpdGlvbndpc2Ug am9pbiwgd2UgZGlzYWJsZSBhbGwgdGhlIG9yZGluYXJ5IG1lYW5zIG9mCisJICogcGVyZm9ybWlu ZyBhIGpvaW4sIGFuZCBpbnN0ZWFkIG9ubHkgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBwYXRocyBo ZXJlLgorCSAqIFRvIHByZXZlbnQgb25lLCB3ZSBqdXN0IGRpc2FibGUgQXBwZW5kIGFuZCBNZXJn ZUFwcGVuZC4gIE5vdGUgdGhhdCB3ZQorCSAqIG11c3Qgbm90IHVuc2V0IFBHU19DT05TSURFUl9Q QVJUSVRJT05XSVNFIGV2ZW4gd2hlbiB3ZSBkb24ndCB3YW50IGEKKwkgKiBwYXJ0aXRpb253aXNl IGpvaW4gaGVyZSwgYmVjYXVzZSB3ZSBtaWdodCB3YW50IG9uZSBhdCBhIGhpZ2hlciBsZXZlbAor CSAqIHRoYXQgaXMgY29uc3RydWN0aW5nIHVzaW5nIHBhdGhzIGZyb20gdGhpcyBsZXZlbC4KKwkg Ki8KKwlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDAgJiYgIXBhcnRpdGlvbndpc2VfY29u ZmxpY3QpCisJeworCQlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lID4gMCkKKwkJCSpwZ3NfbWFz a19wID0gKCpwZ3NfbWFza19wICYgflBHU19KT0lOX0FOWSkgfAorCQkJCVBHU19BUFBFTkQgfCBQ R1NfTUVSR0VfQVBQRU5EIHwgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0U7CisJCWVsc2UKKwkJ CSpwZ3NfbWFza19wICY9IH4oUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQpOworCX0KK30K KworLyoKKyAqIEVuZm9yY2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBqb2luIG9yZGVyIG9yIGpvaW4g bWV0aG9kLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9h ZHZpY2UoSm9pblR5cGUgam9pbnR5cGUsIHVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJCWNo YXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJCXBncGFfam9pbl9zdGF0ZSAqcGpzKQoreworCWludAkJ CWkgPSAtMTsKKwlCaXRtYXBzZXQgICpqb19wZXJtaXRfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFw c2V0ICAqam9fZGVueV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqb19kZW55X3JlbF9p bmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqbV9pbmRleGVzID0gTlVMTDsKKwlib29sCQlq bV9jb25mbGljdCA9IGZhbHNlOworCXVpbnQzMgkJam9pbl9tYXNrID0gMDsKKwlCaXRtYXBzZXQg ICpzal9wZXJtaXRfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqc2pfZGVueV9pbmRleGVz ID0gTlVMTDsKKworCS8qCisJICogUmVjb25zaWRlciBQQVJUSVRJT05XSVNFKC4uLikgYWR2aWNl LgorCSAqCisJICogV2UgYWxyZWFkeSB0aG91Z2h0IGFib3V0IHRoaXMgZm9yIHRoZSBqb2lucmVs IGFzIGEgd2hvbGUsIGJ1dCBpbiBzb21lCisJICogY2FzZXMsIHBhcnRpdGlvbndpc2UgYWR2aWNl IGNhbiBhbHNvIGNvbnN0cmFpbiB0aGUgam9pbiBvcmRlci4gRm9yCisJICogaW5zdGFuY2UsIGlm IHRoZSBhZHZpY2Ugc2F5cyBQQVJUSVRJT05XSVNFKCh0MSB0MikpLCB3ZSBzaG91bGRuJ3QgYnVp bGQKKwkgKiBqb2luIHBhdGhzIGZvciBhIGFueSBqb2lucmVsIHRoYXQgaW5jbHVkZXMgdDEgb3Ig dDIgdW5sZXNzIGl0IGFsc28KKwkgKiBpbmNsdWRlcyB0aGUgb3RoZXIuIEluIGdlbmVyYWwsIHRo ZSBwYXJpdGlvbndpc2Ugb3BlcmF0aW9uIG11c3QgaGF2ZQorCSAqIGFscmVhZHkgYmVlbiBjb21w bGV0ZWQgd2l0aGluIG9uZSBzaWRlIG9mIHRoZSBjdXJyZW50IGpvaW4gb3IgdGhlCisJICogb3Ro ZXIsIGVsc2UgdGhlIGpvaW4gb3JkZXIgaXMgaW1wZXJtaXNzaWJsZS4KKwkgKgorCSAqIE5COiBJ dCBtaWdodCBzZWVtIHRlbXB0aW5nIHRvIHRyeSB0byBkZWFsIHdpdGggUEFSVElUSU9OV0lTRSBh ZHZpc2UKKwkgKiBlbnRpcmVseSBpbiB0aGlzIGZ1bmN0aW9uLCBidXQgdGhhdCBkb2Vzbid0IHdv cmsuIEhlcmUsIHdlIGNhbiBvbmx5CisJICogYWZmZWN0IHRoZSBwZ3NfbWFzayB3aXRoaW4gYSBw YXJ0aWN1bGFyIEpvaW5QYXRoRXh0cmFEYXRhLCB0aGF0IGlzLCBmb3IKKwkgKiBhIHBhcnRpY3Vs YXIgY2hvaWNlIG9mIGlubmVycmVsIGFuZCBvdXRlcnJlbC4gUGFydGl0aW9ud2lzZSBwYXRocyBh cmUKKwkgKiBub3QgYnVpbHQgdGhhdCB3YXksIHNvIHdlIG11c3Qgc2V0IHBnc19tYXNrIGZvciB0 aGUgUmVsT3B0SW5mbywgd2hpY2gKKwkgKiBpcyBiZXN0IGRvbmUgaW4gcGdwYV9wbGFubmVyX2Fw cGx5X2pvaW5yZWxfYWR2aWNlLgorCSAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihw anMtPnJlbF9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5 ID0gJnBqcy0+cmVsX2VudHJpZXNbaV07CisJCXBncGFfaXRtX3R5cGUgaW5uZXJfaXRtOworCQlw Z3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKworCQlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19Q QVJUSVRJT05XSVNFKQorCQkJY29udGludWU7CisKKwkJb3V0ZXJfaXRtID0gcGdwYV9pZGVudGlm aWVyc19tYXRjaF90YXJnZXQocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCSAgcGpzLT5y aWRzLCBlbnRyeS0+dGFyZ2V0KTsKKwkJaWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCB8 fAorCQkJb3V0ZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJCWNvbnRp bnVlOworCisJCWlubmVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KHBqcy0+ aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkgIHBqcy0+cmlkcyArIHBqcy0+b3V0ZXJfY291bnQs CisJCQkJCQkJCQkJCQkgIGVudHJ5LT50YXJnZXQpOworCQlpZiAoaW5uZXJfaXRtID09IFBHUEFf SVRNX0VRVUFMIHx8CisJCQlpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VU KQorCQkJY29udGludWU7CisKKwkJam9fZGVueV9yZWxfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVy KGpvX2RlbnlfcmVsX2luZGV4ZXMsIGkpOworCX0KKworCS8qIEl0ZXJhdGUgb3ZlciBhZHZpY2Ug dGhhdCBwZXJ0YWlucyB0byB0aGUgam9pbiBvcmRlciBhbmQgbWV0aG9kLiAqLworCWkgPSAtMTsK Kwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGpzLT5qb2luX2luZGV4ZXMsIGkpKSA+PSAw KQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpzLT5qb2luX2VudHJpZXNbaV07 CisJCXVpbnQzMgkJbXlfam9pbl9tYXNrOworCisJCS8qIEhhbmRsZSBqb2luIG9yZGVyIGFkdmlj ZS4gKi8KKwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJeworCQkJ aWYgKHBncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJ CQkJCQkJIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSBwanMtPnJpZHMsCisJCQkJCQkJ CQkJCSBlbnRyeSkpCisJCQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19w ZXJtaXRfaW5kZXhlcywgaSk7CisJCQllbHNlCisJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2Fk ZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyog SGFuZGxlIGpvaW4gbWV0aG9kIGFkdmljZS4gKi8KKwkJbXlfam9pbl9tYXNrID0gcGdwYV9qb2lu X3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKGVudHJ5LT50YWcpOworCQlpZiAobXlfam9p bl9tYXNrICE9IDApCisJCXsKKwkJCWJvb2wJCXBlcm1pdDsKKwkJCWJvb2wJCXJlc3RyaWN0X21l dGhvZDsKKworCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfRk9SRUlHTl9KT0lOKQorCQkJ CXBlcm1pdCA9IHBncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291bnQs CisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBwanMt PnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50cnksCisJCQkJCQkJCQkJCQkJICAgJnJlc3RyaWN0 X21ldGhvZCk7CisJCQllbHNlCisJCQkJcGVybWl0ID0gcGdwYV9qb2luX21ldGhvZF9wZXJtaXRz X2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBwanMtPmlubmVyX2NvdW50 LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJCQkgICBlbnRyeSwKKwkJ CQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKTsKKwkJCWlmICghcGVybWl0KQorCQkJCWpv X2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQll bHNlIGlmIChyZXN0cmljdF9tZXRob2QpCisJCQl7CisJCQkJam1faW5kZXhlcyA9IGJtc19hZGRf bWVtYmVyKGptX2luZGV4ZXMsIGkpOworCQkJCWlmIChqb2luX21hc2sgIT0gMCAmJiBqb2luX21h c2sgIT0gbXlfam9pbl9tYXNrKQorCQkJCQlqbV9jb25mbGljdCA9IHRydWU7CisJCQkJam9pbl9t YXNrID0gbXlfam9pbl9tYXNrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5k bGUgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UuICovCisJCWlmIChlbnRyeS0+dGFnID09IFBH UEFfVEFHX1NFTUlKT0lOX1VOSVFVRSB8fAorCQkJZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRU1J Sk9JTl9OT05fVU5JUVVFKQorCQl7CisJCQlib29sCQlvdXRlcl9zaWRlX251bGxhYmxlOworCQkJ Ym9vbAkJcmVzdHJpY3RfbWV0aG9kOworCisJCQkvKiBQbGFubmVyIGhhcyBudWxsYWJsZSBzaWRl IG9mIHRoZSBzZW1pam9pbiBvbiB0aGUgb3V0ZXIgc2lkZT8gKi8KKwkJCW91dGVyX3NpZGVfbnVs bGFibGUgPSAoam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfT1VURVIgfHwKKwkJCQkJCQkJICAgam9p bnR5cGUgPT0gSk9JTl9SSUdIVF9TRU1JKTsKKworCQkJaWYgKCFwZ3BhX3NlbWlqb2luX3Blcm1p dHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQlwanMtPmlubmVyX2NvdW50LAor CQkJCQkJCQkJCQlwanMtPnJpZHMsCisJCQkJCQkJCQkJCWVudHJ5LAorCQkJCQkJCQkJCQlvdXRl cl9zaWRlX251bGxhYmxlLAorCQkJCQkJCQkJCQkmcmVzdHJpY3RfbWV0aG9kKSkKKwkJCQlqb19k ZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJZWxz ZSBpZiAocmVzdHJpY3RfbWV0aG9kKQorCQkJeworCQkJCWJvb2wJCWFkdmljZV91bmlxdWU7CisJ CQkJYm9vbAkJanRfdW5pcXVlOworCQkJCWJvb2wJCWp0X25vbl91bmlxdWU7CisKKwkJCQkvKiBB ZHZpY2Ugd2FudHMgdG8gdW5pcXVlLWlmeSBhbmQgdXNlIGEgcmVndWxhciBqb2luPyAqLworCQkJ CWFkdmljZV91bmlxdWUgPSAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUp OworCisJCQkJLyogUGxhbm5lciBpcyB0cnlpbmcgdG8gdW5pcXVlLWlmeSBhbmQgdXNlIGEgcmVn dWxhciBqb2luPyAqLworCQkJCWp0X3VuaXF1ZSA9IChqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9J Tk5FUiB8fAorCQkJCQkJCSBqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9PVVRFUik7CisKKwkJCQkv KiBQbGFubmVyIGlzIHRyeWluZyBhIHNlbWktam9pbiwgd2l0aG91dCB1bmlxdWUtaWZ5aW5nPyAq LworCQkJCWp0X25vbl91bmlxdWUgPSAoam9pbnR5cGUgPT0gSk9JTl9TRU1JIHx8CisJCQkJCQkJ CSBqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkpOworCisJCQkJaWYgKCFqdF91bmlxdWUgJiYg IWp0X25vbl91bmlxdWUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBUaGlzIGRvZXNuJ3Qgc2Vl bSB0byBiZSBhIHNlbWlqb2luIHRvIHdoaWNoIFNKX1VOSVFVRQorCQkJCQkgKiBvciBTSl9OT05f VU5JUVVFIGNhbiBiZSBhcHBsaWVkLgorCQkJCQkgKi8KKwkJCQkJZW50cnktPmZsYWdzIHw9IFBH UEFfVEVfSU5BUFBMSUNBQkxFOworCQkJCX0KKwkJCQllbHNlIGlmIChhZHZpY2VfdW5pcXVlICE9 IGp0X3VuaXF1ZSkKKwkJCQkJc2pfZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoc2pfZGVu eV9pbmRleGVzLCBpKTsKKwkJCQllbHNlCisJCQkJCXNqX3Blcm1pdF9pbmRleGVzID0gYm1zX2Fk ZF9tZW1iZXIoc2pfcGVybWl0X2luZGV4ZXMsIGkpOworCQkJfQorCQkJY29udGludWU7CisJCX0K Kwl9CisKKwkvKgorCSAqIElmIHRoZSBhZHZpY2UgaW5kaWNhdGVzIGJvdGggdGhhdCB0aGlzIGpv aW4gb3JkZXIgaXMgcGVybWlzc2libGUgYW5kCisJICogYWxzbyB0aGF0IGl0IGlzbid0LCB0aGVu IG1hcmsgYWR2aWNlIHJlbGF0ZWQgdG8gdGhlIGpvaW4gb3JkZXIgYXMKKwkgKiBjb25mbGljdGlu Zy4KKwkgKi8KKwlpZiAoam9fcGVybWl0X2luZGV4ZXMgIT0gTlVMTCAmJgorCQkoam9fZGVueV9p bmRleGVzICE9IE5VTEwgfHwgam9fZGVueV9yZWxfaW5kZXhlcyAhPSBOVUxMKSkKKwl7CisJCXBn cGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBqb19wZXJtaXRfaW5kZXhlcywK KwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBq cy0+am9pbl9lbnRyaWVzLCBqb19kZW55X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJ Q1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBqb19kZW55 X3JlbF9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwl9CisKKwkvKgor CSAqIElmIG1vcmUgdGhhbiBvbmUgam9pbiBtZXRob2Qgc3BlY2lmaWNhdGlvbiBpcyByZWxldmFu dCBoZXJlIGFuZCB0aGV5CisJICogZGlmZmVyLCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5n LgorCSAqLworCWlmIChqbV9jb25mbGljdCkKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5q b2luX2VudHJpZXMsIGptX2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOwor CisJLyogSWYgc2VtaWpvaW4gYWR2aWNlIHNheXMgYm90aCB5ZXMgYW5kIG5vLCBtYXJrIGl0IGFs bCBhcyBjb25mbGljdGluZy4gKi8KKwlpZiAoc2pfcGVybWl0X2luZGV4ZXMgIT0gTlVMTCAmJiBz al9kZW55X2luZGV4ZXMgIT0gTlVMTCkKKwl7CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+ am9pbl9lbnRyaWVzLCBzal9wZXJtaXRfaW5kZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElD VElORyk7CisJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+am9pbl9lbnRyaWVzLCBzal9kZW55 X2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCX0KKworCS8qCisJICog SWYgd2Ugd2VyZSBhZHZpc2VkIHRvIGRlbnkgdGhpcyBqb2luIG9yZGVyLCB0aGVuIGRvIHNvLiBI b3dldmVyLCBpZiB3ZQorCSAqIHdlcmUgYWxzbyBhZHZpc2VkIHRvIHBlcm1pdCBpdCwgdGhlbiBk byBub3RoaW5nLCBzaW5jZSB0aGUgYWR2aWNlCisJICogY29uZmxpY3RzLgorCSAqLworCWlmICgo am9fZGVueV9pbmRleGVzICE9IE5VTEwgfHwgam9fZGVueV9yZWxfaW5kZXhlcyAhPSBOVUxMKSAm JgorCQlqb19wZXJtaXRfaW5kZXhlcyA9PSBOVUxMKQorCQkqcGdzX21hc2tfcCA9ICgqcGdzX21h c2tfcCAmIH5QR1NfSk9JTl9BTlkpIHwgam9pbl9tYXNrOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJl IGFkdmlzZWQgdG8gcmVzdHJpY3QgdGhlIGpvaW4gbWV0aG9kLCB0aGVuIGRvIHNvLiBIb3dldmVy LCBpZgorCSAqIHdlIGdvdCBjb25mbGljdGluZyBqb2luIG1ldGhvZCBhZHZpY2UsIHRoZW4gaW5z dGVhZCBkbyBub3RoaW5nLgorCSAqLworCWlmIChqb2luX21hc2sgIT0gMCAmJiAham1fY29uZmxp Y3QpCisJCSpwZ3NfbWFza19wID0gKCpwZ3NfbWFza19wICYgflBHU19KT0lOX0FOWSkgfCBqb2lu X21hc2s7CisKKwkvKgorCSAqIElmIHdlIHdlcmUgYWR2aXNlZCB0byBkZW55IHRoaXMgZHVlIHRv IHNlbWlqb2luLXJlbGF0ZWQgYWR2aWNlLCB0aGVuCisJICogZG8gc28uIEhvd2V2ZXIsIGlmIHdl IGdvdCBjb25mbGljdGluZyBzZW1pam9pbiBhZHZpY2UsIHRoZW4gaW5zdGVhZCBkbworCSAqIG5v dGhpbmcuCisJICovCisJaWYgKHNqX2RlbnlfaW5kZXhlcyAhPSBOVUxMICYmIHNqX3Blcm1pdF9p bmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wID0gKCpwZ3NfbWFza19wICYgflBHU19KT0lO X0FOWSkgfCBqb2luX21hc2s7Cit9CisKKy8qCisgKiBUcmFuc2xhdGUgYW4gYWR2aWNlIHRhZyBp bnRvIGEgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2suCisgKgorICogVGhpcyBmdW5jdGlv biBjYW4gYmUgY2FsbGVkIHdpdGggdGFnIHR5cGVzIHRoYXQgZG9uJ3QgcmVwcmVzZW50IGpvaW4K KyAqIHN0cmF0ZWdpZXMuIEluIHN1Y2ggY2FzZXMsIHdlIGp1c3QgcmV0dXJuIDAsIHdoaWNoIGNh bid0IGJlIGNvbmZ1c2VkIHdpdGgKKyAqIGEgdmFsaWQgbWFzay4KKyAqLworc3RhdGljIHVpbnQ2 NAorcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3Rh Z190eXBlIHRhZykKK3sKKwlzd2l0Y2ggKHRhZykKKwl7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlH Tl9KT0lOOgorCQkJcmV0dXJuIFBHU19GT1JFSUdOSk9JTjsKKwkJY2FzZSBQR1BBX1RBR19NRVJH RV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuIFBHU19NRVJHRUpPSU5fUExBSU47CisJCWNhc2UgUEdQ QV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiBQR1NfTUVSR0VKT0lOX01B VEVSSUFMSVpFOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJu IFBHU19ORVNUTE9PUF9QTEFJTjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklB TElaRToKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkU7CisJCWNhc2UgUEdQQV9U QUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfTUVNT0laRTsK KwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQlyZXR1cm4gUEdTX0hBU0hKT0lOOworCQlk ZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRl bSBvZiBqb2luIG9yZGVyIGFkdmljZSBwZXJtaXQgYSBjZXJ0YWluIGpvaW4/CisgKi8KK3N0YXRp YyBib29sCitwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50 IGlubmVyX2NvdW50LAorCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJIHBn cGFfdHJvdmVfZW50cnkgKmVudHJ5KQoreworCWJvb2wJCWxvb3AgPSB0cnVlOworCWJvb2wJCXN1 Ymxpc3QgPSBmYWxzZTsKKwlpbnQJCQlsZW5ndGg7CisJaW50CQkJb3V0ZXJfbGVuZ3RoOworCXBn cGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2FkdmljZV90 YXJnZXQgKnByZWZpeF90YXJnZXQ7CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3Qg YSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8 PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkvKgorCSAqIEZpbmQgdGhlIGlubmVybW9zdCBz dWJsaXN0IHRoYXQgY29udGFpbnMgYWxsIGtleXM7IGlmIG5vIHN1Ymxpc3QgZG9lcywKKwkgKiB0 aGVuIGNvbnRpbnVlIHByb2Nlc3Npbmcgd2l0aCB0aGUgdG9wbGV2ZWwgbGlzdC4KKwkgKgorCSAq IEZvciBleGFtcGxlLCBpZiB0aGUgYWR2aWNlIHNheXMgSk9JTl9PUkRFUih0MSB0MiAodDMgdDQg dDUpKSwgdGhlbiB3ZQorCSAqIHNob3VsZCBldmFsdWF0ZSBqb2lucyB0aGF0IG9ubHkgaW52b2x2 ZSB0MywgdDQsIGFuZC9vciB0NSBhZ2FpbnN0IHRoZQorCSAqICh0MyB0NCB0NSkgc3VibGlzdCwg YW5kIG90aGVycyBhZ2FpbnN0IHRoZSBmdWxsIGxpc3QuCisJICoKKwkgKiBOb3RlIHRoYXQgKDEp IG91dGVybW9zdCBzdWJsaXN0IGlzIGFsd2F5cyBvcmRlcmVkIGFuZCAoMikgd2hlbmV2ZXIgd2UK KwkgKiB6b29tIGludG8gYW4gdW5vcmRlcmVkIHN1Ymxpc3QsIHdlIGluc3RhbnRseSBhY2NlcHQg dGhlIHByb3Bvc2VkIGpvaW4uCisJICogSWYgdGhlIGFkdmljZSBzYXlzIEpPSU5fT1JERVIodDEg dDIge3QzIHQ0IHQ1fSksIGFueSBhcHByb2FjaCB0bworCSAqIGpvaW5pbmcgdDMsIHQ0LCBhbmQv b3IgdDUgaXMgYWNjZXB0YWJsZS4KKwkgKi8KKwl3aGlsZSAobG9vcCkKKwl7CisJCUFzc2VydCh0 YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisKKwkJbG9vcCA9IGZh bHNlOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFy Z2V0LT5jaGlsZHJlbikKKwkJeworCQkJcGdwYV9pdG1fdHlwZSBpdG07CisKKwkJCWlmIChjaGls ZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJCQkJY29udGludWU7 CisKKwkJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsg aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQlyaWRzLCBjaGlsZF90YXJnZXQpOworCQkJaWYgKGl0 bSA9PSBQR1BBX0lUTV9FUVVBTCB8fCBpdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUKQor CQkJeworCQkJCWlmIChjaGlsZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURf TElTVCkKKwkJCQl7CisJCQkJCXRhcmdldCA9IGNoaWxkX3RhcmdldDsKKwkJCQkJc3VibGlzdCA9 IHRydWU7CisJCQkJCWxvb3AgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZQor CQkJCXsKKwkJCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfVU5P UkRFUkVEX0xJU1QpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisK KwkvKgorCSAqIFRyeSB0byBmaW5kIGEgcHJlZml4IG9mIHRoZSBzZWxlY3RlZCBqb2luIG9yZGVy IGxpc3QgdGhhdCBpcyBleGFjdGx5CisJICogZXF1YWwgdG8gdGhlIG91dGVyIHNpZGUgb2YgdGhl IHByb3Bvc2VkIGpvaW4uCisJICovCisJbGVuZ3RoID0gbGlzdF9sZW5ndGgodGFyZ2V0LT5jaGls ZHJlbik7CisJcHJlZml4X3RhcmdldCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3Rhcmdl dCk7CisJcHJlZml4X3RhcmdldC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJ Zm9yIChvdXRlcl9sZW5ndGggPSAxOyBvdXRlcl9sZW5ndGggPD0gbGVuZ3RoOyArK291dGVyX2xl bmd0aCkKKwl7CisJCXBncGFfaXRtX3R5cGUgaXRtOworCisJCS8qIEF2b2lkIGxlYWtpbmcgbWVt b3J5IGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiAqLworCQlpZiAocHJlZml4X3RhcmdldC0+Y2hp bGRyZW4gIT0gTlVMTCkKKwkJCWxpc3RfZnJlZShwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbik7CisJ CXByZWZpeF90YXJnZXQtPmNoaWxkcmVuID0gbGlzdF9jb3B5X2hlYWQodGFyZ2V0LT5jaGlsZHJl biwKKwkJCQkJCQkJCQkJCSBvdXRlcl9sZW5ndGgpOworCisJCS8qIFNlYXJjaCwgaG9waW5nIHRv IGZpbmQgYW4gZXhhY3QgbWF0Y2guICovCisJCWl0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hf dGFyZ2V0KG91dGVyX2NvdW50LCByaWRzLCBwcmVmaXhfdGFyZ2V0KTsKKwkJaWYgKGl0bSA9PSBQ R1BBX0lUTV9FUVVBTCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIElmIHRoZSBwcmVmaXggb2Yg dGhlIGpvaW4gb3JkZXIgbGlzdCB0aGF0IHdlJ3JlIGNvbnNpZGVyaW5nCisJCSAqIGluY2x1ZGVz IHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIG91dGVyIHJlbHMsIHdlIGNhbiBtYWtlIHRoZSBwcmVm aXgKKwkJICogbG9uZ2VyIHRvIGZpbmQgYW4gZXhhY3QgbWF0Y2guIEJ1dCB0aGUgYWR2aWNlIGhh c24ndCBtZW50aW9uZWQKKwkJICogZXZlcnl0aGluZyB0aGF0J3MgcGFydCBvZiBvdXIgb3V0ZXIg cmVsIHlldCwgYnV0IGhhcyBtZW50aW9uZWQKKwkJICogdGhpbmdzIHRoYXQgYXJlIG5vdCwgdGhl biB0aGlzIGpvaW4gZG9lc24ndCBtYXRjaCB0aGUgam9pbiBvcmRlcgorCQkgKiBsaXN0LgorCQkg Ki8KKwkJaWYgKGl0bSAhPSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcHJldmlvdXMgbG9vcGVkIHN0b3BwZWQgYmVm b3JlIHRoZSBwcmVmaXhfdGFyZ2V0IGluY2x1ZGVkIHRoZQorCSAqIGVudGlyZSBqb2luIG9yZGVy IGxpc3QsIHRoZW4gdGhlIG5leHQgbWVtYmVyIG9mIHRoZSBqb2luIG9yZGVyIGxpc3QKKwkgKiBt dXN0IGV4YWN0bHkgbWF0Y2ggdGhlIGlubmVyIHNpZGUgb2YgdGhlIGpvaW4uCisJICoKKwkgKiBF eGFtcGxlOiBHaXZlbiBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0NSkpLCBpZiB0aGUgb3V0ZXIg c2lkZSBvZiB0aGUKKwkgKiBjdXJyZW50IGpvaW4gaW5jbHVkZXMgb25seSB0MSwgdGhlbiB0aGUg aW5uZXIgc2lkZSBtdXN0IGJlIGV4YWN0bHkgdDI7CisJICogaWYgdGhlIG91dGVyIHNpZGUgaW5j bHVkZXMgYm90aCB0MSBhbmQgdDIsIHRoZW4gdGhlIGlubmVyIHNpZGUgbXVzdAorCSAqIGluY2x1 ZGUgZXhhY3RseSB0MywgdDQsIGFuZCB0NS4KKwkgKi8KKwlpZiAob3V0ZXJfbGVuZ3RoIDwgbGVu Z3RoKQorCXsKKwkJcGdwYV9hZHZpY2VfdGFyZ2V0ICppbm5lcl90YXJnZXQ7CisJCXBncGFfaXRt X3R5cGUgaXRtOworCisJCWlubmVyX3RhcmdldCA9IGxpc3RfbnRoKHRhcmdldC0+Y2hpbGRyZW4s IG91dGVyX2xlbmd0aCk7CisKKwkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQo aW5uZXJfY291bnQsIHJpZHMgKyBvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJaW5uZXJfdGFyZ2V0 KTsKKworCQkvKgorCQkgKiBCZWZvcmUgcmV0dXJuaW5nLCBjb25zaWRlciB3aGV0aGVyIHdlIG5l ZWQgdG8gbWFyayB0aGlzIGVudHJ5IGFzCisJCSAqIGZ1bGx5IG1hdGNoZWQuIElmIHdlJ3JlIGNv bnNpZGVyaW5nIHRoZSBmdWxsIGxpc3QgcmF0aGVyIHRoYW4gYQorCQkgKiBzdWJsaXN0LCBhbmQg aWYgd2UgZm91bmQgZXZlcnkgaXRlbSBidXQgb25lIG9uIHRoZSBvdXRlciBzaWRlIG9mCisJCSAq IHRoZSBqb2luIGFuZCB0aGUgbGFzdCBpdGVtIG9uIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBqb2lu LCB0aGVuIHRoZQorCQkgKiBhbnN3ZXIgaXMgeWVzLgorCQkgKi8KKwkJaWYgKCFzdWJsaXN0ICYm IG91dGVyX2xlbmd0aCArIDEgPT0gbGVuZ3RoICYmIGl0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJ CWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisKKwkJcmV0dXJuIChpdG0gPT0g UEdQQV9JVE1fRVFVQUwpOworCX0KKworCS8qCisJICogSWYgd2UgZ2V0IGhlcmUsIHRoZW4gdGhl IG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gaW5jbHVkZXMgdGhlIGVudGlyZXR5CisJICogb2YgdGhl IGpvaW4gb3JkZXIgbGlzdC4gSW4gdGhpcyBjYXNlLCB3ZSBiZWhhdmUgZGlmZmVyZW50bHkgZGVw ZW5kaW5nCisJICogb24gd2hldGhlciB3ZSdyZSBsb29raW5nIGF0IHRoZSB0b3AtbGV2ZWwgam9p biBvcmRlciBsaXN0IG9yIHN1Ymxpc3QuCisJICogQXQgdGhlIHRvcC1sZXZlbCwgd2UgdHJlYXQg dGhlIHNwZWNpZmllZCBsaXN0IGFzIG1hbmRhdGluZyB0aGF0IHRoZQorCSAqIGFjdHVhbCBqb2lu IG9yZGVyIGhhcyB0aGUgZ2l2ZW4gbGlzdCBhcyBhIHByZWZpeCwgYnV0IGEgc3VibGlzdAorCSAq IHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoLgorCSAqCisJICogRXhtYXBsZTogR2l2ZW4gSk9JTl9P UkRFUih0MSB0MiAodDMgdDQgdDUpKSwgd2UgbXVzdCBzdGFydCBieSBqb2luaW5nCisJICogYWxs IGZpdmUgb2YgdGhvc2UgcmVsYXRpb25zIGFuZCBpbiB0aGF0IHNlcXVlbmNlLCBidXQgb25jZSB0 aGF0IGlzCisJICogZG9uZSwgaXQncyBPSyB0byBqb2luIGFueSBvdGhlciByZWxzIHRoYXQgYXJl IHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbS4KKwkgKiBUaGlzIGFsbG93cyBhIHVzZXIgdG8gc3Bl Y2lmeSB0aGUgZHJpdmluZyB0YWJsZSBhbmQgcGVyaGFwcyB0aGUgZmlyc3QKKwkgKiBmZXcgdGhp bmdzIHRvIHdoaWNoIGl0IHNob3VsZCBiZSBqb2luZWQgd2hpbGUgbGVhdmluZyB0aGUgcmVzdCBv ZiB0aGUKKwkgKiBqb2luIG9yZGVyIHVwIHRoZSBvcHRpbWl6ZXIuIEJ1dCBpdCBzZWVtcyBsaWtl IGl0IHdvdWxkIGJlIHN1cnByaXNpbmcsCisJICogZ2l2ZW4gdGhhdCBzcGVjaWZpY2F0aW9uLCBp ZiB0aGUgdXNlciBjb3VsZCBhZGQgdDYgdG8gdGhlICh0MyB0NCB0NSkKKwkgKiBzdWItam9pbiwg c28gd2UgZG9uJ3QgYWxsb3cgdGhhdC4gSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cgaXQsIHRoZSBs b2dpYworCSAqIGVhcmxpZXIgaW4gdGhpcyBmdW5jdGlvbiB3b3VsZCByZXF1aXJlIHN1YnN0YW50 aWFsIGFkanVzdG1lbnQ6IHdlIGNvdWxkCisJICogYWxsb3cgdGhlIHQzLXQ0LXQ1LXQ2IGpvaW4g dG8gYmUgYnVpbHQgaGVyZSwgYnV0IHRoZSBuZXh0IHN0ZXAgb2YKKwkgKiBqb2luaW5nIHQxLXQy IHRvIHRoZSByZXN1bHQgd291bGQgc3RpbGwgYmUgcmVqZWN0ZWQuCisJICovCisJaWYgKCFzdWJs aXN0KQorCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXJldHVybiAhc3Vi bGlzdDsKK30KKworLyoKKyAqIERvZXMgYSBjZXJ0YWluIGl0ZW0gb2Ygam9pbiBtZXRob2QgYWR2 aWNlIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqCisgKiBBZHZpY2Ugc3VjaCBhcyBIQVNIX0pP SU4oKHggeSkpIG1lYW5zIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgaGFzaCBqb2luIHdpdGgKKyAq IGV4YWN0bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZS4gT2J2aW91c2x5LCB0aGlzIG1lYW5z IHRoYXQgaWYgd2UgYXJlCisgKiBjb25zaWRlcmluZyBhIGpvaW4gd2l0aCBleGFjdGx5IHggYW5k IHkgb24gdGhlIGlubmVyIHNpZGUsIHdlIHNob3VsZCBlbmZvcmNlCisgKiB0aGUgdXNlIG9mIGEg aGFzaCBqb2luLiBIb3dldmVyLCBpdCBhbHNvIG1lYW5zIHRoYXQgd2UgbXVzdCByZWplY3Qgc29t ZQorICogaW5jb21wYXRpYmxlIGpvaW4gb3JkZXJzIGVudGlyZWx5LiAgRm9yIGV4YW1wbGUsIGEg am9pbiB3aXRoIGV4YWN0bHkgeAorICogYW5kIHkgb24gdGhlIG91dGVyIHNpZGUgc2hvdWxkbid0 IGJlIGFsbG93ZWQsIGJlY2F1c2Ugc3VjaCBwYXRocyBtaWdodCB3aW4KKyAqIG92ZXIgdGhlIGFk dmljZS1kcml2ZW4gcGF0aCBvbiBjb3N0LgorICoKKyAqIFRvIGFjY29tbW9kYXRlIHRoZXNlIHJl cXVpcmVtZW50cywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGpvaW4KKyAqIHNo b3VsZCBiZSBhbGxvd2VkIGFuZCBmYWxzZSBpZiBpdCBzaG91bGQgbm90LiBGdXJ0aGVybW9yZSwg KnJlc3RyaWN0X21ldGhvZAorICogaXMgc2V0IHRvIHRydWUgaWYgdGhlIGpvaW4gbWV0aG9kIHNo b3VsZCBiZSBlbmZvcmNlZCBhbmQgZmFsc2UgaWYgbm90LgorICovCitzdGF0aWMgYm9vbAorcGdw YV9qb2luX21ldGhvZF9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291 bnQsCisJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyeSwKKwkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCkKK3sKKwlwZ3Bh X2FkdmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9pdG1fdHlwZSBp bm5lcl9pdG07CisJcGdwYV9pdG1fdHlwZSBvdXRlcl9pdG07CisJcGdwYV9pdG1fdHlwZSBqb2lu X2l0bTsKKworCS8qIFdlIGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2gg Zm9yIHRoaXMgdHJvdmUgZW50cnkuICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hf UEFSVElBTDsKKworCSpyZXN0cmljdF9tZXRob2QgPSBmYWxzZTsKKworCS8qCisJICogSWYgb3Vy IGlubmVyIHJlbCBtZW50aW9ucyBleGFjdGx5IHRoZSBzYW1lIHJlbGF0aW9ucyBhcyB0aGUgYWR2 aWNlCisJICogdGFyZ2V0LCBhbGxvdyB0aGUgam9pbiBhbmQgZW5mb3JjZSB0aGUgam9pbiBtZXRo b2QgcmVzdHJpY3Rpb24uCisJICoKKwkgKiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25zIGEgc3Vw ZXJzZXQgb2YgdGhlIHRhcmdldCByZWxhdGlvbnMsIGFsbG93IHRoZQorCSAqIGpvaW4uIFRoZSBq b2luIHdlIGNhcmUgYWJvdXQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UsIGFuZCB0aGlzIGFkdmlj ZQorCSAqIGltcG9zZXMgbm8gZnVydGhlciByZXN0cmljdGlvbnMuCisJICovCisJaW5uZXJfaXRt ID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW5uZXJfY291bnQsCisJCQkJCQkJCQkJ CSAgcmlkcyArIG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHRhcmdldCk7CisJaWYgKGlubmVy X2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01B VENIX0ZVTEw7CisJCSpyZXN0cmljdF9tZXRob2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisJZWxzZSBpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJ cmV0dXJuIHRydWU7CisKKwkvKgorCSAqIElmIG91ciBvdXRlciByZWwgbWVudGlvbnMgYSBzdXBz ZXJzZXQgb2YgdGhlIHJlbGF0aW9ucyBpbiB0aGUgYWR2aWNlCisJICogdGFyZ2V0LCBubyByZXN0 cmljdGlvbnMgYXBwbHkuIFRoZSBqb2luIHdlIGNhcmUgaGFzIGFscmVhZHkgdGFrZW4KKwkgKiBw bGFjZSwgYW5kIHRoaXMgYWR2aWNlIGltcG9zZXMgbm8gZnVydGhlciByZXN0cmljdGlvbnMuCisJ ICoKKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgb3VyIG91dGVyIHJlbCBtZW50aW9ucyBleGFj dGx5IHRoZSByZWxhdGlvbnMKKwkgKiBtZW50aW9uZWQgaW4gdGhlIGFkdmljZSB0YXJnZXQsIHRo ZSBwbGFubmVyIGlzIHRyeWluZyB0byByZXZlcnNlIHRoZQorCSAqIHNpZGVzIG9mIHRoZSBqb2lu IGFzIGNvbXBhcmVkIHdpdGggb3VyIGRlc2lyZWQgb3V0Y29tZS4gUmVqZWN0IHRoYXQuCisJICov CisJb3V0ZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQs CisJCQkJCQkJCQkJCSAgcmlkcywgdGFyZ2V0KTsKKwlpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRN X1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAob3V0ZXJfaXRt ID09IFBHUEFfSVRNX0VRVUFMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIHRoZSBh ZHZpY2UgdGFyZ2V0IG1lbnRpb25zIG9ubHkgYSBzaW5nbGUgcmVsYXRpb24sIHRoZSB0ZXN0IGJl bG93CisJICogY2Fubm90IGV2ZXIgcGFzcywgc28gc2F2ZSBzb21lIHdvcmsgYnkgZXhpdGluZyBu b3cuCisJICovCisJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikK KwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiBldmVyeXRoaW5nIGluIHRoZSBqb2lucmVs IGFwcGVhcnMgaW4gdGhlIGFkdmljZSB0YXJnZXQsIHdlJ3JlCisJICogYmVsb3cgdGhlIGxldmVs IG9mIHRoZSBqb2luIHdlIHdhbnQgdG8gY29udHJvbC4KKwkgKgorCSAqIEZvciBleGFtcGxlLCBI QVNIX0pPSU4oKHggeSkpIGRvZXNuJ3QgcmVzdHJpY3QgaG93IHggYW5kIHkgY2FuIGJlCisJICog am9pbmVkLgorCSAqCisJICogVGhpcyBsb29rdXAgc2hvdWxkbid0IHJldHVybiBQR1BBX0lUTV9E SVNKT0lOVCwgYmVjYXVzZSBhbnkgc3VjaCBhZHZpY2UKKwkgKiBzaG91bGQgbm90IGhhdmUgYmVl biByZXR1cm5lZCBmcm9tIHRoZSB0cm92ZSBpbiB0aGUgZmlyc3QgcGxhY2UuCisJICovCisJam9p bl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVy X2NvdW50LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlBc3NlcnQoam9pbl9pdG0gIT0g UEdQQV9JVE1fRElTSk9JTlQpOworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9T VUJTRVQgfHwKKwkJam9pbl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiB0cnVlOwor CisJLyoKKwkgKiBXZSd2ZSBhbHJlYWR5IHBlcm1pdHRlZCBhbGwgYWxsb3dhYmxlIGNhc2VzLCBz byByZWplY3QgdGhpcy4KKwkgKgorCSAqIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQsIHRoZW4gdGhl IGFkdmljZSBvdmVybGFwcyB3aXRoIHRoaXMgam9pbiBidXQKKwkgKiBpc24ndCBlbnRpcmVseSBj b250YWluZWQgd2l0aGluIGVpdGhlciBzaWRlLCBhbmQgdGhlcmUncyBhbHNvIGF0IGxlYXN0CisJ ICogb25lIHJlbGF0aW9uIHByZXNlbnQgaW4gdGhlIGpvaW4gdGhhdCBpc24ndCBtZW50aW9uZWQg YnkgdGhlIGFkdmljZS4KKwkgKgorCSAqIEZvciBpbnN0YW5jZSwgaW4gdGhlIEhBU0hfSk9JTigo eCB5KSkgZXhhbXBsZSwgd2Ugd291bGQgcmVhY2ggaGVyZSBpZiB4CisJICogd2VyZSBvbiBvbmUg c2lkZSBvZiB0aGUgam9pbiwgeSBvbiB0aGUgb3RoZXIsIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhl CisJICogdHdvIHNpZGVzIGFsc28gaW5jbHVkZWQgc29tZSBvdGhlciByZWxhdGlvbiwgc2F5IHQu IEluIHRoYXQgY2FzZSwKKwkgKiBhY2NlcHRpbmcgdGhpcyBqb2luIHdvdWxkIGFsbG93IHRoZSAo eCB5IHQpIGpvaW5yZWwgdG8gY29udGFpbgorCSAqIG5vbi1kaXNhYmxlZCBwYXRocyB0aGF0IGRv IG5vdCBwdXQgKHggeSkgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBoYXNoCisJICogam9pbjsgd2Ug Y291bGQgaW5zdGVhZCBlbmQgdXAgd2l0aCBzb21ldGhpbmcgbGlrZSAoeCBKT0lOIHQpIEpPSU4g eS4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIGFkdmljZSBjb25jZXJu aW5nIGFuIG9wYXF1ZSBqb2luIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqCisgKiBCeSBhbiBv cGFxdWUgam9pbiwgd2UgbWVhbiBvbmUgd2hlcmUgdGhlIGV4YWN0IG1lY2hhbmlzbSBieSB3aGlj aCB0aGUKKyAqIGpvaW4gaXMgcGVyZm9ybWVkIGlzIG5vdCB2aXNpYmxlIHRvIFBvc3RncmVTUUwu IEN1cnJlbnRseSB0aGlzIGlzIHRoZQorICogY2FzZSBvbmx5IGZvciBmb3JlaWduIGpvaW5zOiBG T1JFSUdOX0pPSU4oKHggeSB6KSkgbWVhbnMgdGhhdCB4LCB5LCBhbmQKKyAqIHogYXJlIGpvaW5l ZCBvbiB0aGUgcmVtb3RlIHNpZGUsIGJ1dCB3ZSBrbm93IG5vdGhpbmcgYWJvdXQgdGhlIGpvaW4g b3JkZXIKKyAqIG9yIGpvaW4gbWV0aG9kcyB1c2VkIG92ZXIgdGhlcmUuCisgKgorICogVGhlIGxv Z2ljIGhlcmUgbmVlZHMgdG8gZGlmZmVyIGZyb20gcGdwYV9qb2luX21ldGhvZF9wZXJtaXRzX2pv aW4gYmVjYXVzZSwKKyAqIGZvciBvdGhlciBqb2luIHR5cGVzLCB0aGUgYWR2aWNlIHRhcmdldCBp cyB0aGUgc2V0IG9mIGlubmVyIHJlbHM7IGhlcmUsIGl0CisgKiBpbmNsdWRlcyBib3RoIGlubmVy IGFuZCBvdXRlciByZWxzLgorICovCitzdGF0aWMgYm9vbAorcGdwYV9vcGFxdWVfam9pbl9wZXJt aXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJICBwZ3Bh X2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJ CQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCkKK3sKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldCA9IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9pdG1fdHlwZSBqb2luX2l0bTsKKworCS8qIFdl IGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9yIHRoaXMgdHJvdmUg ZW50cnkuICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKworCSpy ZXN0cmljdF9tZXRob2QgPSBmYWxzZTsKKworCWpvaW5faXRtID0gcGdwYV9pZGVudGlmaWVyc19t YXRjaF90YXJnZXQob3V0ZXJfY291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHJpZHMs IHRhcmdldCk7CisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJLyoKKwkJ ICogV2UgaGF2ZSBhbiBleGFjdCBtYXRjaCwgYW5kIHNob3VsZCB0aGVyZWZvcmUgYWxsb3cgdGhl IGpvaW4gYW5kCisJCSAqIGVuZm9yY2UgdGhlIHVzZSBvZiB0aGUgcmVsZXZhbnQgb3BhcXVlIGpv aW4gbWV0aG9kLgorCQkgKi8KKwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsK KwkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7CisJCXJldHVybiB0cnVlOworCX0KKworCWlmIChq b2luX2l0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQgfHwKKwkJam9pbl9pdG0gPT0gUEdQ QV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCXsKKwkJLyoKKwkJICogSWYgam9pbl9pdG0gPT0g UEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VULCB0aGVuIHRoZSBqb2luIHdlIGNhcmUKKwkJICog YWJvdXQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UgYW5kIG5vIGZ1cnRoZXIgcmVzdHJpY3Rpb25z IGFwcGx5LgorCQkgKgorCQkgKiBJZiBqb2luX2l0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJT RVQsIHdlJ3JlIHN0aWxsIGJ1aWxkaW5nIHVwIHRvCisJCSAqIHRoZSBqb2luIHdlIGNhcmUgYWJv dXQgYW5kIGhhdmUgbm90IGludHJvZHVjZWQgYW55IGV4dHJhbmVvdXMKKwkJICogcmVsYXRpb25z IG5vdCBuYW1lZCBpbiB0aGUgYWR2aWNlLiBOb3RlIHRoYXQgRm9yZWlnblNjYW4gcGF0aHMgZm9y CisJCSAqIGpvaW5zIGFyZSBidWlsdCB1cCBmcm9tIEZvcmVpZ25TY2FuIHBhdGhzIGZyb20gdW5k ZXJseWluZyBqb2lucyBhbmQKKwkJICogc2NhbnMsIHNvIHdlIG11c3Qgbm90IGRpc2FibGUgdGhp cyBqb2luIHdoZW4gY29uc2lkZXJpbmcgYSBzdWJzZXQKKwkJICogb2YgdGhlIHJlbGF0aW9ucyB3 ZSB1bHRpbWF0ZWx5IHdhbnQuCisJCSAqLworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKgorCSAq IFRoZSBhZHZpY2Ugb3ZlcmxhcHMgdGhlIGpvaW4sIGJ1dCBhdCBsZWFzdCBvbmUgcmVsYXRpb24g aXMgcHJlc2VudCBpbgorCSAqIHRoZSBqb2luIHRoYXQgaXNuJ3QgbWVudGlvbmVkIGJ5IHRoZSBh ZHZpY2UuIFdlIHdhbnQgdG8gZGlzYWJsZSBzdWNoCisJICogcGF0aHMgc28gdGhhdCB3ZSBhY3R1 YWxseSBwdXNoIGRvd24gdGhlIGpvaW4gYXMgaW50ZW5kZWQuCisJICovCisJcmV0dXJuIGZhbHNl OworfQorCisvKgorICogRG9lcyBhZHZpY2UgY29uY2VybmluZyBhIHNlbWlqb2luIHBlcm1pdCBh IGNlcnRhaW4gam9pbj8KKyAqCisgKiBVbmxpa2Ugam9pbiBtZXRob2QgYWR2aWNlLCB3aGljaCBs aXN0cyB0aGUgcmVscyBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUKKyAqIGpvaW4sIHNlbWlqb2lu IHVuaXF1ZW5lc3MgYWR2aWNlIGxpc3RzIHRoZSByZWxzIG9uIHRoZSBudWxsYWJsZSBzaWRlIG9m IHRoZQorICogam9pbi4gVGhvc2UgY2FuIGJlIHRoZSBzYW1lLCBpZiB0aGUgam9pbiB0eXBlIGlz IEpPSU5fVU5JUVVFX0lOTkVSIG9yCisgKiBKT0lOX1NFTUksIG9yIHRoZXkgY2FuIGJlIGRpZmZl cmVudCwgaW4gY2FzZSBvZiBKT0lOX1VOSVFVRV9PVVRFUiBvcgorICogSk9JTl9SSUdIVF9TRU1J LgorICoKKyAqIFdlIGRvbid0IGtub3cgaGVyZSB3aGV0aGVyIHRoZSBjYWxsZXIgc3BlY2lmaWVk IFNFTUlKT0lOX1VOSVFVRSBvcgorICogU0VNSUpPSU5fTk9OX1VOSVFVRS4gVGhlIGNhbGxlciBz aG91bGQgY2hlY2sgdGhlIGpvaW4gdHlwZSBhZ2FpbnN0IHRoZQorICogYWR2aWNlIHR5cGUgaWYg YW5kIG9ubHkgaWYgd2Ugc2V0ICpyZXN0cmljdF9tZXRob2QgdG8gdHJ1ZS4KKyAqLworc3RhdGlj IGJvb2wKK3BncGFfc2VtaWpvaW5fcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50IGlu bmVyX2NvdW50LAorCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJICAgcGdw YV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkgICBib29sIG91dGVyX2lzX251bGxhYmxlLAor CQkJCQkJICAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAq dGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2l0bV90eXBlIGpvaW5faXRtOworCXBncGFf aXRtX3R5cGUgaW5uZXJfaXRtOworCXBncGFfaXRtX3R5cGUgb3V0ZXJfaXRtOworCisJKnJlc3Ry aWN0X21ldGhvZCA9IGZhbHNlOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEg cGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0g UEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJLyoKKwkgKiBJZiBvdXRlciByZWwgaXMgdGhlIG51 bGxhYmxlIHNpZGUgYW5kIGNvbnRhaW5zIGV4YWN0bHkgdGhlIHNhbWUKKwkgKiByZWxhdGlvbnMg YXMgdGhlIGFkdmljZSB0YXJnZXQsIHRoZW4gdGhlIGpvaW4gb3JkZXIgaXMgYWxsb3dhYmxlLCBi dXQKKwkgKiB0aGUgY2FsbGVyIG11c3QgY2hlY2sgd2hldGhlciB0aGUgYWR2aWNlIHRhZyAoZWl0 aGVyIFNFTUlKT0lOX1VOSVFVRSBvcgorCSAqIFNFTUlKT0lOX05PTl9VTklRVUUpIG1hdGNoZXMg dGhlIGpvaW4gdHlwZS4KKwkgKgorCSAqIElmIHRoZSBvdXRlciByZWwgaXMgYSBzdXBlcnNldCBv ZiB0aGUgdGFyZ2V0IHJlbGF0aW9ucywgdGhlIGpvaW4gd2UKKwkgKiBjYXJlIGFib3V0IGhhcyBh bHJlYWR5IHRha2VuIHBsYWNlLCBzbyB3ZSBzaG91bGQgaW1wb3NlIG5vIGZ1dGhlcgorCSAqIHJl c3RyaXRpb25zLgorCSAqLworCW91dGVyX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFy Z2V0KG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHJpZHMsIHRhcmdldCk7CisJaWYgKG91dGVy X2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01B VENIX0ZVTEw7CisJCWlmIChvdXRlcl9pc19udWxsYWJsZSkKKwkJeworCQkJKnJlc3RyaWN0X21l dGhvZCA9IHRydWU7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwllbHNlIGlmIChvdXRlcl9p dG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8q IEFzIGFib3ZlLCBidXQgZm9yIHRoZSBpbm5lciByZWwuICovCisJaW5uZXJfaXRtID0gcGdwYV9p ZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSAgcmlkcyAr IG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgIHRhcmdldCk7CisJaWYgKGlubmVyX2l0bSA9PSBQ R1BBX0lUTV9FUVVBTCkKKwl7CisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7 CisJCWlmICghb3V0ZXJfaXNfbnVsbGFibGUpCisJCXsKKwkJCSpyZXN0cmljdF9tZXRob2QgPSB0 cnVlOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJZWxzZSBpZiAoaW5uZXJfaXRtID09IFBH UEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIElm IGV2ZXJ5dGhpbmcgaW4gdGhlIGpvaW5yZWwgYXBwZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdldCwg d2UncmUKKwkgKiBiZWxvdyB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2FudCB0byBjb250cm9s LgorCSAqLworCWpvaW5faXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJf Y291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHJpZHMsIHRhcmdldCk7CisJQXNzZXJ0 KGpvaW5faXRtICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9J VE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQly ZXR1cm4gdHJ1ZTsKKworCS8qCisJICogV2UndmUgdGVzdGVkIGZvciBhbGwgYWxsb3dhYmxlIHBv c3NpYmlsaXRpZXMsIGFuZCBzbyBtdXN0IHJlamVjdCB0aGlzCisJICogam9pbiBvcmRlci4gVGhp cyBjYW4gaGFwcGVuIGluIHR3byB3YXlzLgorCSAqCisJICogRmlyc3QsIHdlIG1pZ2ggYmUgY29u c2lkZXJpbmcgYSBzZW1pam9pbiB0aGF0IG92ZXJsYXBzIGluY29tcGxldGVseQorCSAqIHdpdGgg b25lIG9yIGJvdGggc2lkZXMgb2YgdGhlIGpvaW4uIEZvciBleGFtcGxlLCBpZiB0aGUgdXNlciBo YXMKKwkgKiBzcGVjaWZpZWQgU0VNSUpPSU5fVU5JUVVFKCh0MSB0MikpIG9yIFNFTUlKT0lOX05P Tl9VTklRVUUoKHQxIHQyKSksIHdlCisJICogc2hvdWxkIHJlamVjdCBhIHByb3Bvc2VkIHQyLXQz IGpvaW4sIHNpbmNlIHRoYXQgY291bGQgbm90IHJlc3VsdCBpbiBhCisJICogZmluYWwgcGxhbiBj b21wYXRpYmxlIHdpdGggdGhlIGFkdmljZS4KKwkgKgorCSAqIFNlY29uZCwgd2UgbWlnaHQgYmUg Y29uc2lkZXJpbmcgYSBzZW1pam9pbiB3aGVyZSB0aGUgYWR2aWNlIHRhcmdldAorCSAqIHBlcmZl Y3RseSBtYXRjaGVzIG9uZSBzaWRlIG9mIHRoZSBqb2luLCBidXQgaXQncyB0aGUgd3Jvbmcgb25l LiBGb3IKKwkgKiBleGFtcGxlLCBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2UgbWlnaHQgc2VlIGEg My13YXkgam9pbiBiZXR3ZWVuIHQxLAorCSAqIHQyLCBhbmQgdDMsIHdpdGggKHQxIHQyKSBvbiB0 aGUgbm9uLW51bGxhYmxlIHNpZGUuIFRoYXQsIHRvbywgd291bGQgYmUKKwkgKiBpbmNvbXBhdGli bGUgd2l0aCB0aGUgYWR2aWNlLgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIEFw cGx5IHNjYW4gYWR2aWNlIHRvIGEgUmVsT3B0SW5mby4KKyAqCisgKiBYWFguIEZvciBiaXRtYXAg aGVhcCBzY2Fucywgd2UncmUganVzdCBpZ25vcmluZyB0aGUgaW5kZXggaW5mb3JtYXRpb24gZnJv bQorICogdGhlIGFkdmljZS4gVGhhdCdzIG5vdCBjb29sLgorICovCitzdGF0aWMgdm9pZAorcGdw YV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkgICBw Z3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJICAgQml0bWFwc2V0ICpzY2Fu X2luZGV4ZXMsCisJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMsCisJCQkJ CQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcykKK3sKKwlib29sCQlnYXRoZXJfY29uZmxpY3Qg PSBmYWxzZTsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0 bWFwc2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWludAkJCWkgPSAtMTsKKwlwZ3Bh X3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJ5ID0gTlVMTDsKKwlpbnQJCQlmbGFnczsKKwlib29sCQlz Y2FuX3R5cGVfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpzY2FuX3R5cGVfaW5kZXhl cyA9IE5VTEw7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX3JlbF9pbmRleGVzID0gTlVMTDsKKwl1 aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwl1aW50NjQJCXNjYW5fdHlwZSA9IDA7CisKKwkvKiBT Y3J1dGluaXplIGF2YWlsYWJsZSBzY2FuIGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4 dF9tZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkg Km15X2VudHJ5ID0gJnNjYW5fZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9zY2FuX3R5cGUgPSAw OworCisJCS8qIFRyYW5zbGF0ZSBvdXIgYWR2aWNlIHRhZ3MgdG8gYSBzY2FuIHN0cmF0ZWd5IGFk dmljZSB2YWx1ZS4gKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hF QVBfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19CSVRNQVBTQ0FOOworCQllbHNlIGlmICht eV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCW15X3NjYW5fdHlw ZSA9IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJZWxzZSBp ZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBl ID0gUEdTX0lOREVYU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19T RVFfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19TRVFTQ0FOOworCQllbHNlIGlmIChteV9l bnRyeS0+dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX1RJ RFNDQU47CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB1bmRlcnN0YW5kYWJsZSBzY2FuIGFkdmlj ZSwgaGFuZyBvbiB0byB0aGUgZW50cnksIHRoZQorCQkgKiBpbmZlcnJlZCBzY2FuIHR5cGUgdHlw ZSwgYW5kIHRoZSBpbmRleCBhdCB3aGljaCB3ZSBmb3VuZCBpdC4KKwkJICoKKwkJICogQWxzbyBt YWtlIGEgbm90ZSBpZiB3ZSBzZWUgY29uZmxpY3Rpbmcgc2NhbiB0eXBlIGFkdmljZS4gTm90ZSB0 aGF0CisJCSAqIHdlIHJlZ2FyZCB0d28gaW5kZXggc3BlY2lmaWNhdGlvbnMgYXMgY29uZmxpY3Rp bmcgdW5sZXNzIHRoZXkgbWF0Y2gKKwkJICogZXhhY3RseS4gSW4gdGhlb3J5LCBwZXJoYXBzIHdl IGNvdWxkIHJlZ2FyZCBJTkRFWF9TQ0FOKGEgYykgYW5kCisJCSAqIElOREVYX1NDQU4oYSBiLmMp IGFzIG5vbi1jb25mbGljdGluZyBpZiBpdCBoYXBwZW5zIHRoYXQgdGhlIG9ubHkKKwkJICogaW5k ZXggbmFtZWQgYyBpcyBpbiBzY2hlbWEgYiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUg Y29kZS4KKwkJICovCisJCWlmIChteV9zY2FuX3R5cGUgIT0gMCkKKwkJeworCQkJaWYgKHNjYW5f dHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJc2Nhbl90eXBlX2Nv bmZsaWN0ID0gdHJ1ZTsKKwkJCWlmICghc2Nhbl90eXBlX2NvbmZsaWN0ICYmIHNjYW5fZW50cnkg IT0gTlVMTCAmJgorCQkJCW15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCAmJgorCQkJ CXNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJIXBncGFfaW5kZXhf dGFyZ2V0c19lcXVhbChzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQsCisJCQkJCQkJCQkJICBt eV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KSkKKwkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVl OworCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJc2Nhbl90eXBlID0gbXlfc2Nhbl90eXBl OworCQkJc2Nhbl90eXBlX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2FuX3R5cGVfaW5kZXhl cywgaSk7CisJCX0KKwl9CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBnYXRoZXItcmVsYXRl ZCBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcihyZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2Vu dHJ5ICpteV9lbnRyeSA9ICZyZWxfZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9nYXRoZXJfbWFz ayA9IDA7CisJCWJvb2wJCWp1c3Rfb25lX3JlbDsKKworCQlqdXN0X29uZV9yZWwgPSBteV9lbnRy eS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSCisJCQl8fCBsaXN0X2xl bmd0aChteV9lbnRyeS0+dGFyZ2V0LT5jaGlsZHJlbikgPT0gMTsKKworCQkvKgorCQkgKiBQQVJU SVRJT05XSVNFIGJlaGF2ZXMgbGlrZSBhIHNjYW4gdHlwZSwgZXhjZXB0IHRoYXQgaWYgdGhlcmUn cyBtb3JlCisJCSAqIHRoYW4gb25lIHJlbGF0aW9uIHRhcmdldGVkLCBpdCBoYXMgbm8gZWZmZWN0 IGF0IHRoaXMgbGV2ZWwuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19Q QVJUSVRJT05XSVNFKQorCQl7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJeworCQkJCWNvbnN0 IHVpbnQ2NCBteV9zY2FuX3R5cGUgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORDsKKwor CQkJCWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90eXBlKQorCQkJ CQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJCXNjYW5fZW50cnkgPSBteV9lbnRyeTsK KwkJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQkJc2Nhbl90eXBlX3JlbF9pbmRleGVz ID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX3JlbF9pbmRleGVzLCBpKTsKKwkJCX0K KwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogR0FUSEVSIGFuZCBHQVRIRVJfTUVSR0Ug YXBwbGllZCB0byBhIHNpbmdsZSByZWwgbWVhbiB0aGF0IHdlIHNob3VsZAorCQkgKiB1c2UgdGhl IGNvcnJlc3BvbmRpbmdzIHN0cmF0ZWd5IGhlcmUsIHdoaWxlIGFwcGx5aW5nIGVpdGhlciB0byBt b3JlCisJCSAqIHRoYW4gb25lIHJlbCBtZWFucyB3ZSBzaG91bGQgbm90IHVzZSB0aG9zZSBzdHJh dGVnaWVzIGhlcmUsIGJ1dAorCQkgKiByYXRoZXIgYXQgdGhlIGxldmVsIG9mIHRoZSBqb2lucmVs IHRoYXQgY29ycmVzcG9uZHMgdG8gd2hhdCB3YXMKKwkJICogc3BlY2lmaWVkLiBOT19HQVRIRVIg Y2FuIG9ubHkgYmUgYXBwbGllZCB0byBzaW5nbGUgcmVscy4KKwkJICoKKwkJICogTm90ZSB0aGF0 IHNldHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaW4gbXlfZ2F0aGVyX21hc2sgaXMKKwkJ ICogZXF1aXZhbGVudCB0byBhbGxvd2luZyB0aGUgbm9uLXVzZSBvZiBlaXRoZXIgZm9ybSBvZiBH YXRoZXIgaGVyZS4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhF UiB8fAorCQkJbXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0UpCisJCXsKKwkJ CWlmICghanVzdF9vbmVfcmVsKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05P TlBBUlRJQUw7CisJCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUikK KwkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJCQkJbXlfZ2F0aGVy X21hc2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcg PT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9vbmVfcmVsKTsKKwkJ CW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCX0KKworCQkvKgor CQkgKiBJZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2Ug YSBub3RlIGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBt YXNrIHZhbHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxs IG9yIHBhcnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJ eworCQkJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21h c2spCisJCQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0 aGVyX21hc2s7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0g Ym1zX2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhl cl9wYXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkp OworCQl9CisJfQorCisJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICovCisJaWYgKHNjYW5f ZW50cnkgIT0gTlVMTCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShzY2FuX2VudHJ5LT50 YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+dGFnID09IFBHUEFf VEFHX0lOREVYX09OTFlfU0NBTikpCisJeworCQlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCA9 IHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZvICptYXRjaGVkX2lu ZGV4ID0gTlVMTDsKKworCQlBc3NlcnQoaXRhcmdldC0+aXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1F KTsKKworCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRleGxpc3Qp CisJCXsKKwkJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUoaW5kZXgtPmluZGV4b2lk KTsKKwkJCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4LT5pbmRleG9pZCk7 CisJCQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwb2lkKTsK KworCQkJaWYgKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1lLCByZWxuYW1lKSA9PSAwICYmCisJCQkJ KGl0YXJnZXQtPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8CisJCQkJIHN0cmNtcChpdGFyZ2V0LT5p bmRuYW1lc3BhY2UsIHJlbG5hbWVzcGFjZSkgPT0gMCkpCisJCQl7CisJCQkJbWF0Y2hlZF9pbmRl eCA9IGluZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG1hdGNoZWRfaW5kZXgg PT0gTlVMTCkKKwkJeworCQkJLyogRG9uJ3QgZm9yY2UgdGhlIHNjYW4gdHlwZSBpZiB0aGUgaW5k ZXggZG9lc24ndCBleGlzdC4gKi8KKwkJCXNjYW5fdHlwZSA9IDA7CisKKwkJCS8qIE1hcmsgYWR2 aWNlIGFzIGluYXBwbGljYWJsZS4gKi8KKwkJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHNjYW5fZW50 cmllcywgc2Nhbl90eXBlX2luZGV4ZXMsCisJCQkJCQkJCSBQR1BBX1RFX0lOQVBQTElDQUJMRSk7 CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBSZXRhaW4gdGhpcyBpbmRleCBhbmQgZGlzY2FyZCB0 aGUgcmVzdC4gKi8KKwkJCXJlbC0+aW5kZXhsaXN0ID0gbGlzdF9tYWtlMShtYXRjaGVkX2luZGV4 KTsKKwkJfQorCX0KKworCS8qCisJICogTWFyayBhbGwgdGhlIHNjYW4gbWV0aG9kIGVudHJpZXMg YXMgZnVsbHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lmeQorCSAqIGRpZmZlcmVudCB0aGlu Z3MsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RF X01BVENIX1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEw7CisJaWYgKHNjYW5fdHlwZV9jb25m bGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9m bGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7CisJcGdwYV90cm92 ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhlcywgZmxhZ3MpOwor CisJLyoKKwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBw YXJ0aWFsbHkgbWF0Y2hlZC4gTWFyaworCSAqIHRoZSBvbmVzIHRoYXQgaW5jbHVkZWQgdGhpcyBy ZWxhdGlvbiBhcyBhIHRhcmdldCBieSBpdHNlbGYgYXMgZnVsbHkKKwkgKiBtYXRjaGVkLiBJZiB0 aGVyZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8K KwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZsaWN0KQor CQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJl bF9lbnRyaWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFf VEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVy X2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5n IHNjYW4gc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoc2Nhbl90eXBlICE9IDAg JiYgIXNjYW5fdHlwZV9jb25mbGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdT X1NDQU5fQU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAorCQkJICBQR1NfQ09O U0lERVJfSU5ERVhPTkxZKTsKKwkJcmVsLT5wZ3NfbWFzayB8PSBzY2FuX3R5cGU7CisJfQorCisJ LyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNpZmljYXRpb24sIGVu Zm9yY2UgaXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkK Kwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBHU19HQVRIRVJfTUVS R0UgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCk7CisJCXJlbC0+cGdzX21hc2sgfD0gZ2F0aGVy X21hc2s7CisJfQorfQorCisvKgorICogQWRkIGZlZWRiYWNrIGVudHJpZXMgdG8gZm9yIG9uZSB0 cm92ZSBzbGljZSB0byB0aGUgcHJvdmlkZWQgbGlzdCBhbmQKKyAqIHJldHVybiB0aGUgcmVzdWx0 aW5nIGxpc3QuCisgKgorICogRmVlZGJhY2sgZW50cmllcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhl IHRyb3ZlIGVudHJ5J3MgZmxhZ3MuIEl0J3MgYXNzdW1lZAorICogdGhhdCB0aGUgY2FsbGVyIGhh cyBhbHJlYWR5IHNldCBhbGwgcmVsZXZhbnQgZmxhZ3Mgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisg KiBQR1BBX1RFX0ZBSUxFRC4gV2Ugc2V0IHRoYXQgZmxhZyBoZXJlIGlmIGFwcHJvcHJpYXRlLgor ICovCitzdGF0aWMgTGlzdCAqCitwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxp c3QsIHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5 cGUsCisJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJIHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKQoreworCXBncGFfdHJvdmVfZW50cnkgKmVu dHJpZXM7CisJaW50CQkJbmVudHJpZXM7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0 cmluZ0luZm8oJmJ1Zik7CisJcGdwYV90cm92ZV9sb29rdXBfYWxsKHRyb3ZlLCB0eXBlLCAmZW50 cmllcywgJm5lbnRyaWVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbnRyaWVzOyArK2kpCisJ eworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCQlEZWZFbGVtICAg ICppdGVtOworCisJCS8qCisJCSAqIElmIHRoaXMgZW50cnkgd2FzIGZ1bGx5IG1hdGNoZWQsIGNo ZWNrIHdoZXRoZXIgZ2VuZXJhdGluZyBhZHZpY2UKKwkJICogZnJvbSB0aGlzIHBsYW4gd291bGQg cHJvZHVjZSBzdWNoIGFuIGVudHJ5LiBJZiBub3QsIGxhYmVsIHRoZSBlbnRyeQorCQkgKiBhcyBm YWlsZWQuCisJCSAqLworCQlpZiAoKGVudHJ5LT5mbGFncyAmIFBHUEFfVEVfTUFUQ0hfRlVMTCkg IT0gMCAmJgorCQkJIXBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZSh3YWxrZXIsIHJ0X2lkZW50aWZp ZXJzLAorCQkJCQkJCQkJICBlbnRyeS0+dGFnLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCWVudHJ5LT5m bGFncyB8PSBQR1BBX1RFX0ZBSUxFRDsKKworCQlpdGVtID0gbWFrZURlZkVsZW0ocGdwYV9jc3Ry aW5nX3Ryb3ZlX2VudHJ5KGVudHJ5KSwKKwkJCQkJCSAgIChOb2RlICopIG1ha2VJbnRlZ2VyKGVu dHJ5LT5mbGFncyksIC0xKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgaXRlbSk7CisJfQorCisJ cmV0dXJuIGxpc3Q7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8qCisgKiBG YXN0IGhhc2ggZnVuY3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYW4gUlRJIGFuZCBwbGFu IG5hbWUuCisgKi8KK3N0YXRpYyB1aW50MzIKK3BncGFfcmlfY2hlY2tlcl9oYXNoX2tleShwZ3Bh X3JpX2NoZWNrZXJfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9zdGF0ZSBoczsKKwlpbnQJCQlzcF9s ZW47CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwlocy5hY2N1bSA9IGtleS5ydGk7CisJ ZmFzdGhhc2hfY29tYmluZSgmaHMpOworCisJLyogcGxhbl9uYW1lIGNhbiBiZSBOVUxMICovCisJ aWYgKGtleS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJc3BfbGVuID0gMDsKKwllbHNlCisJCXNwX2xl biA9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxhbl9uYW1lKTsKKworCS8qIGhh c2hmbl91bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBhcyB0d2VhayAq LworCXJldHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKworI2VuZGlmCisK Ky8qCisgKiBTYXZlIHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZvciBvbmUgcmVsYXRpb24g Zm9yIGZ1dHVyZSBjcm9zcy1jaGVja2luZy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcmlfY2hl Y2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVySW5mbyAqcm9vdCwKKwkJ CQkJIFJlbE9wdEluZm8gKnJlbCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdw YV9yaV9jaGVja2VyX2tleSBrZXk7CisJcGdwYV9yaV9jaGVja2VyICpjaGVjazsKKwlwZ3BhX2lk ZW50aWZpZXIgcmlkOworCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJYm9vbAkJZm91bmQ7CisK KwlrZXkucnRpID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIocmVsLT5yZWxpZHMpOworCWtleS5wbGFu X25hbWUgPSByb290LT5wbGFuX25hbWU7CisJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRp KHJvb3QsIGtleS5ydGksICZyaWQpOworCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50aWZpZXJfc3Ry aW5nKCZyaWQpOworCWNoZWNrID0gcGdwYV9yaV9jaGVja19pbnNlcnQocHBzLT5yaV9jaGVja19o YXNoLCBrZXksICZmb3VuZCk7CisJQXNzZXJ0KCFmb3VuZCB8fCBzdHJjbXAoY2hlY2stPnJpZF9z dHJpbmcsIHJpZF9zdHJpbmcpID09IDApOworCWNoZWNrLT5yaWRfc3RyaW5nID0gcmlkX3N0cmlu ZzsKKyNlbmRpZgorfQorCisvKgorICogVmFsaWRhdGUgdGhhdCB0aGUgcmFuZ2UgdGFibGUgaWRl bnRpZmllcnMgd2Ugd2VyZSBhYmxlIHRvIGdlbmVyYXRlIGR1cmluZworICogcGxhbm5pbmcgbWF0 Y2ggdGhlIG9uZXMgd2UgZ2VuZXJhdGVkIGZyb20gdGhlIGZpbmFsIHBsYW4uCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMs IFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdw YV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVyczsKKwlwZ3BhX3JpX2NoZWNrX2l0ZXJhdG9yIGl0 OworCXBncGFfcmlfY2hlY2tlciAqY2hlY2s7CisKKwkvKiBDcmVhdGUgaWRlbnRpZmllcnMgZnJv bSB0aGUgcGxhbm5lZCBzdGF0ZW1lbnQuICovCisJcnRfaWRlbnRpZmllcnMgPSBwZ3BhX2NyZWF0 ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKworCS8qIEl0ZXJhdGUgb3Zl ciBpZGVudGlmaWVycyBjcmVhdGVkIGR1cmluZyBwbGFubmluZywgc28gd2UgY2FuIGNvbXBhcmUu ICovCisJcGdwYV9yaV9jaGVja19zdGFydF9pdGVyYXRlKHBwcy0+cmlfY2hlY2tfaGFzaCwgJml0 KTsKKwl3aGlsZSAoKGNoZWNrID0gcGdwYV9yaV9jaGVja19pdGVyYXRlKHBwcy0+cmlfY2hlY2tf aGFzaCwgJml0KSkgIT0gTlVMTCkKKwl7CisJCWludAkJCXJ0b2Zmc2V0ID0gMDsKKwkJY29uc3Qg Y2hhciAqcmlkX3N0cmluZzsKKwkJSW5kZXgJCWZsYXRfcnRpOworCisJCS8qCisJCSAqIElmIHRo ZXJlJ3Mgbm8gcGxhbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudHJ5LCB0aGVuIHRoZQor CQkgKiBydG9mZnNldCBpcyAwLiBPdGhlcndpc2UsIHdlIGNhbiBzZWFyY2ggdGhlIFN1YlBsYW5S VEluZm8gbGlzdCB0bworCQkgKiBmaW5kIHRoZSBydG9mZnNldC4KKwkJICovCisJCWlmIChjaGVj ay0+a2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQl7CisJCQlmb3JlYWNoX25vZGUoU3ViUGxhblJU SW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIElm IHJ0aW5mby0+ZHVtbXkgaXMgc2V0LCB0aGVuIHRoZSBzdWJxdWVyeSdzIHJhbmdlIHRhYmxlCisJ CQkJICogd2lsbCBvbmx5IGhhdmUgYmVlbiBwYXJ0aWFsbHkgY29waWVkIHRvIHRoZSBmaW5hbCBy YW5nZQorCQkJCSAqIHRhYmxlLiBTcGVjaWZpY2FsbHksIG9ubHkgUlRFX1JFTEFUSU9OIGVudHJp ZXMgYW5kCisJCQkJICogUlRFX1NVQlFVRVJZIGVudHJpZXMgdGhhdCB3ZXJlIG9uY2UgUlRFX1JF TEFUSU9OIGVudHJpZXMKKwkJCQkgKiB3aWxsIGJlIGNvcGllZCwgYXMgcGVyIGFkZF9ydGVzX3Rv X2ZsYXRfcnRhYmxlLiBUaGVyZWZvcmUsCisJCQkJICogdGhlcmUncyBubyBmaXhlZCBydG9mZnNl dCB0aGF0IHdlIGNhbiBhcHBseSB0byB0aGUgUlRJcworCQkJCSAqIHVzZWQgZHVyaW5nIHBsYW5u aW5nIHRvIGxvY2F0ZSB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbnMKKwkJCQkgKiBpbiB0aGUg ZmluYWwgcnRhYmxlLgorCQkJCSAqCisJCQkJICogV2l0aCBtb3JlIGNvbXBsZXggbG9naWMsIHdl IGNvdWxkIHdvcmsgYXJvdW5kIHRoYXQgcHJvYmxlbQorCQkJCSAqIGJ5IHJlbWVtYmVyaW5nIHRo ZSB3aG9sZSBjb250ZW50cyBvZiB0aGUgc3VicXVlcnkncyBydGFibGUKKwkJCQkgKiBkdXJpbmcg cGxhbm5pbmcsIGRldGVybWluaW5nIHdoaWNoIG9mIHRob3NlIHdvdWxkIGhhdmUgYmVlbgorCQkJ CSAqIGNvcGllZCB0byB0aGUgZmluYWwgcnRhYmxlLCBhbmQgbWF0Y2hpbmcgdGhlbSB1cC4gQnV0 IGl0CisJCQkJICogZG9lc24ndCBzZWVtIGxpa2UgYSB3b3J0aHdoaWxlIGVuZGVhdm9yIGZvciBy aWdodCBub3csCisJCQkJICogYmVjYXVzZSBSVElzIGZyb20gc3VjaCBzdWJxdWVyaWVzIHdvbid0 IGFwcGVhciBpbiB0aGUgcGxhbgorCQkJCSAqIHRyZWUgaXRzZWxmLCBqdXN0IGluIHRoZSByYW5n ZSB0YWJsZS4gSGVuY2UsIHdlIGNhbiBuZWl0aGVyCisJCQkJICogZ2VuZXJhdGUgbm9yIGFjY2Vw dCBhZHZpY2UgZm9yIHRoZW0uCisJCQkJICovCisJCQkJaWYgKHN0cmNtcChjaGVjay0+a2V5LnBs YW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDAKKwkJCQkJJiYgIXJ0aW5mby0+ZHVtbXkp CisJCQkJeworCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CisJCQkJCUFzc2VydChy dG9mZnNldCA+IDApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qCisJCQkgKiBJ dCdzIG5vdCBhbiBlcnJvciBpZiB3ZSBkb24ndCBmaW5kIHRoZSBwbGFuIG5hbWU6IHRoYXQganVz dAorCQkJICogbWVhbnMgdGhhdCB3ZSBwbGFubmVkIGEgc3VicGxhbiBieSB0aGlzIG5hbWUgYnV0 IGl0IGVuZGVkIHVwCisJCQkgKiBiZWluZyBhIGR1bW15IHN1YnBsYW4gYW5kIHNvIHdhc24ndCBp bmNsdWRlZCBpbiB0aGUgZmluYWwgcGxhbgorCQkJICogdHJlZS4KKwkJCSAqLworCQkJaWYgKHJ0 b2Zmc2V0ID09IDApCisJCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBjaGVjay0+a2V5 LnJ0aSBpcyB0aGUgUlRJIHRoYXQgd2Ugc2F3IHByaW9yIHRvIHJhbmdlLXRhYmxlCisJCSAqIGZs YXR0ZW5pbmcsIHNvIHdlIG11c3QgYWRkIHRoZSBhcHByb3ByaWF0ZSBSVCBvZmZzZXQgdG8gZ2V0 IHRoZQorCQkgKiBmaW5hbCBSVEkuCisJCSAqLworCQlmbGF0X3J0aSA9IGNoZWNrLT5rZXkucnRp ICsgcnRvZmZzZXQ7CisJCUFzc2VydChmbGF0X3J0aSA8PSBsaXN0X2xlbmd0aChwc3RtdC0+cnRh YmxlKSk7CisKKwkJLyogQXNzZXJ0IHRoYXQgdGhlIHN0cmluZyB3ZSBjb21wdXRlIG5vdyBtYXRj aGVzIHRoZSBwcmV2aW91cyBvbmUuICovCisJCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50aWZpZXJf c3RyaW5nKCZydF9pZGVudGlmaWVyc1tmbGF0X3J0aSAtIDFdKTsKKwkJQXNzZXJ0KHN0cmNtcChy aWRfc3RyaW5nLCBjaGVjay0+cmlkX3N0cmluZykgPT0gMCk7CisJfQorI2VuZGlmCit9CisKKy8q CisgKiBDb252ZXJ0IGEgYml0bWFwc2V0IHRvIGEgQyBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVk IGludGVnZXJzLgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2Jtc190b19jc3RyaW5nKEJpdG1h cHNldCAqYm1zKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlpbnQJCQl4ID0gLTE7CisKKwlp ZiAoYm1zX2lzX2VtcHR5KGJtcykpCisJCXJldHVybiAibm9uZSI7CisKKwlpbml0U3RyaW5nSW5m bygmYnVmKTsKKwl3aGlsZSAoKHggPSBibXNfbmV4dF9tZW1iZXIoYm1zLCB4KSkgPj0gMCkKKwl7 CisJCWlmIChidWYubGVuID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwgJWQiLCB4 KTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCB4KTsKKwl9CisKKwly ZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgSm9pblR5cGUgdG8gYSBDIHN0 cmluZy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorcGdwYV9qb2ludHlwZV90b19jc3RyaW5n KEpvaW5UeXBlIGpvaW50eXBlKQoreworCXN3aXRjaCAoam9pbnR5cGUpCisJeworCQljYXNlIEpP SU5fSU5ORVI6CisJCQlyZXR1cm4gImlubmVyIjsKKwkJY2FzZSBKT0lOX0xFRlQ6CisJCQlyZXR1 cm4gImxlZnQiOworCQljYXNlIEpPSU5fRlVMTDoKKwkJCXJldHVybiAiZnVsbCI7CisJCWNhc2Ug Sk9JTl9SSUdIVDoKKwkJCXJldHVybiAicmlnaHQiOworCQljYXNlIEpPSU5fU0VNSToKKwkJCXJl dHVybiAic2VtaSI7CisJCWNhc2UgSk9JTl9BTlRJOgorCQkJcmV0dXJuICJhbnRpIjsKKwkJY2Fz ZSBKT0lOX1JJR0hUX1NFTUk6CisJCQlyZXR1cm4gInJpZ2h0IHNlbWkiOworCQljYXNlIEpPSU5f UklHSFRfQU5USToKKwkJCXJldHVybiAicmlnaHQgYW50aSI7CisJCWNhc2UgSk9JTl9VTklRVUVf T1VURVI6CisJCQlyZXR1cm4gInVuaXF1ZSBvdXRlciI7CisJCWNhc2UgSk9JTl9VTklRVUVfSU5O RVI6CisJCQlyZXR1cm4gInVuaXF1ZSBpbm5lciI7CisJfQorCXJldHVybiAiPz8/IjsKK30KZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmggYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi43ZDQwYjkxMGIwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKQEAgLTAsMCArMSwxNyBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogcGdwYV9wbGFubmVyLmgKKyAqCSAgcGxhbm5lciBob29rcworICoKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfUExBTk5FUl9ICisjZGVmaW5l IFBHUEFfUExBTk5FUl9ICisKK2V4dGVybiB2b2lkIHBncGFfcGxhbm5lcl9pbnN0YWxsX2hvb2tz KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9zY2FuLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xOTdkMTBiNjIwZAotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKQEAgLTAsMCArMSwzMDYgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfc2Nhbi5jCisgKgkgIGFuYWx5c2lzIG9m IHNjYW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9zY2FuLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1 ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKyNpbmNsdWRlICJwZ3Bh X3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgInBh cnNlci9wYXJzZXRyZWUuaCIKKworc3RhdGljIHBncGFfc2NhbiAqcGdwYV9tYWtlX3NjYW4ocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSBwZ3Bh X3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlkcywKKwkJ CQkJCQkJIGJvb2wgbmVlZHNfbm9fZ2F0aGVyKTsKKworCitzdGF0aWMgUlRFS2luZCB1bmlxdWVf bm9uam9pbl9ydGVraW5kKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0ICpydGFibGUpOworCisvKgor ICogQnVpbGQgYSBwZ3BhX3NjYW4gb2JqZWN0IGZvciBhIFBsYW4gbm9kZSBhbmQgdXBkYXRlIHRo ZSBwbGFuIHdhbGtlcgorICogY29udGV4dCBhcyBhcHBvcHJpYXRlLiAgSWYgdGhpcyBpcyBhbiBB cHBlbmQgb3IgTWVyZ2VBcHBlbmQgc2NhbiwgYWxzbworICogYnVpbGQgcGdwYV9zY2FuIGZvciBh bnkgc2NhbnMgdGhhdCB3ZXJlIGNvbnNvbGlkYXRlZCBpbnRvIHRoaXMgb25lIGJ5CisgKiBBcHBl bmQvTWVyZ2VBcHBlbmQgcHVsbC11cC4KKyAqCisgKiBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUg RWxpZGVkTm9kZSBmb3IgdGhpcyBwbGFuIG5vZGUsIHBhc3MgdGhlIHVwcGVybW9zdAorICogb25l IGFzIGVsaWRlZF9ub2RlLCBlbHNlIHBhc3MgTlVMTC4KKyAqCisgKiBTZXQgdGhlICdiZW5lYXRo X2FueV9nYXRoZXInIG5vZGUgaWYgd2UgYXJlIHVuZGVybmVhdGggYSBHYXRoZXIgb3IKKyAqIEdh dGhlciBNZXJnZSBub2RlLgorICoKKyAqIFNldCB0aGUgJ3dpdGhpbl9qb2luX3Byb2JsZW0nIGZs YWcgaWYgd2UncmUgaW5zaWRlIG9mIGEgam9pbiBwcm9ibGVtIGFuZAorICogbm90IG90aGVyd2lz ZS4KKyAqLworcGdwYV9zY2FuICoKK3BncGFfYnVpbGRfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQlFbGlkZWROb2RlICplbGlkZWRfbm9kZSwK KwkJCQlib29sIGJlbmVhdGhfYW55X2dhdGhlciwgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtKQor eworCXBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKwlC aXRtYXBzZXQgICpyZWxpZHMgPSBOVUxMOworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCW5lZWRz X25vX2dhdGhlciA9ICFiZW5lYXRoX2FueV9nYXRoZXI7CisJTGlzdAkgICAqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMgPSBOSUw7CisKKwlpZiAoZWxpZGVkX25vZGUgIT0gTlVMTCkKKwl7CisJCU5v ZGVUYWcJCWVsaWRlZF90eXBlID0gZWxpZGVkX25vZGUtPmVsaWRlZF90eXBlOworCisJCS8qCisJ CSAqIElmIHNldHJlZnMgcHJvY2Vzc2luZyBlbGlkZWQgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5k IG5vZGUgdGhhdCBoYWQKKwkJICogb25seSBvbmUgc3Vydml2aW5nIGNoaWxkLCBpdCBtaWdodCBi ZSBhIHBhcnRpdGlvbndpc2Ugb3BlcmF0aW9uLCBidXQKKwkJICogdGhlbiB0aGlzIGlzIGVpdGhl ciBhIHNldG9wIG92ZXIgc3VicXVlcmllcywgb3IgYSBwYXJ0aXRpb253aXNlCisJCSAqIG9wZXJh dGlvbiAod2hpY2ggbWlnaHQgYmUgYSBzY2FuIG9yIGEgam9pbiBpbiByZWFsaXR5LCBidXQgaGVy ZSB3ZQorCQkgKiBkb24ndCBjYXJlIGFib3V0IHRoZSBkaXN0aW5jdGlvbiBhbmQgY29uc2lkZXIg aXQgc2ltcGx5IGEgc2NhbikuCisJCSAqCisJCSAqIEEgc2V0b3Agb3ZlciBzdWJxdWVyaWVzLCBv ciBhIHRyaXZpYWwgU3ViUXVlcnlTY2FuIHRoYXQgd2FzIGVsaWRlZCwKKwkJICogaXMgYW4gIm9y ZGluYXJ5IiBzY2FuIGkuZS4gb25lIGZvciB3aGljaCB3ZSBuZWVkIHRvIGdlbmVyYXRlIGFkdmlj ZQorCQkgKiBiZWNhdXNlIHRoZSBwbGFubmVyIGhhcyBub3QgbWFkZSBhbnkgbWVhbmluZ2Z1bCBj aG9pY2UuCisJCSAqLworCQlyZWxpZHMgPSBlbGlkZWRfbm9kZS0+cmVsaWRzOworCQlpZiAoKGVs aWRlZF90eXBlID09IFRfQXBwZW5kIHx8IGVsaWRlZF90eXBlID09IFRfTWVyZ2VBcHBlbmQpICYm CisJCQl1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywKKwkJCQkJCQkJICAgd2Fsa2VyLT5w c3RtdC0+cnRhYmxlKSA9PSBSVEVfUkVMQVRJT04pCisJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9Q QVJUSVRJT05XSVNFOworCQllbHNlCisJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsK KworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGFuIGVsaWRlZCBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQg bm9kZSwgd2UgZG9uJ3QgbmVlZCB0bworCQkgKiBlbWl0IE5PX0dBVEhFUigpIGJlY2F1c2Ugd2Un bGwgYWxzbyBlbWl0IGl0IGZvciB0aGUgdW5kZXJseWluZworCQkgKiBzY2FuLCB3aGljaCBpcyBn b29kIGVub3VnaC4KKwkJICoKKwkJICogSWYgaXQncyBhbiBlbGlkZWQgU3VicXVlcnlTY2FuLCB0 aGUgc2FtZSBhcmd1bWVudCBpcyBsaWtlbHkgdG8KKwkJICogYXBwbHksIGJlY2F1c2UgdGhlIHN1 YnF1ZXJ5IHByb2JhYmx5IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gdGFibGVzLAorCQkgKiBhbmQg aWYgaXQgZG9lc24ndCwgdGhlbiBwbGFubmVyIGlzbid0IGxpa2VseSB0byB3YW50IHRvIGRvIGl0 IGluCisJCSAqIHBhcmFsbGVsIGFueXdheS4gQnV0IGFsc28sIHdlIGNhbid0IGltcGxlbWVudCBO T19HQVRIRVIoKSBhZHZpY2UKKwkJICogZm9yIGEgbm9uLXJlbGF0aW9uIFJURUtpbmQsIGJlY2F1 c2UgZ2V0X3JlbGF0aW9uX2luZm8oKSBpc24ndAorCQkgKiBjYWxsZWQgaW4gc3VjaCBjYXNlcy4g VGhhdCBzaG91bGQgcHJvYmFibHkgYmUgZml4ZWQgYXQgc29tZSBwb2ludCwKKwkJICogYnV0IHVu dGlsIHRoZW4gd2Ugc2hvdWxkbid0IGVtaXQgaXQuCisJCSAqLworCQluZWVkc19ub19nYXRoZXIg PSBmYWxzZTsKKworCQkvKiBKb2luIFJUSXMgY2FuIGJlIHByZXNlbnQsIGJ1dCBhZHZpY2UgbmV2 ZXIgcmVmZXJzIHRvIHRoZW0uICovCisJCXJlbGlkcyA9IHBncGFfZmlsdGVyX291dF9qb2luX3Jl bGlkcyhyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJfQorCWVsc2UgaWYgKChydGkg PSBwZ3BhX3NjYW5yZWxpZChwbGFuKSkgIT0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsK KworCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKworCQlzd2l0Y2ggKG5vZGVU YWcocGxhbikpCisJCXsKKwkJCWNhc2UgVF9TZXFTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9T Q0FOX1NFUTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKKwkJCQlzdHJh dGVneSA9IFBHUEFfU0NBTl9CSVRNQVBfSEVBUDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9JbmRl eFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fSU5ERVg7CisJCQkJYnJlYWs7CisJCQlj YXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9JTkRFWF9PTkxZ OworCQkJCWJyZWFrOworCQkJY2FzZSBUX1RpZFNjYW46CisJCQljYXNlIFRfVGlkUmFuZ2VTY2Fu OgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1RJRDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6 CisKKwkJCQkvKgorCQkJCSAqIFRoaXMgY2FzZSBpbmNsdWRlcyBhIEZvcmVpZ25TY2FuIHRhcmdl dGluZyBhIHNpbmdsZQorCQkJCSAqIHJlbGF0aW9uOyBubyBvdGhlciBzdHJhdGVneSBpcyBwb3Nz aWJsZSBpbiB0aGF0IGNhc2UsIGJ1dAorCQkJCSAqIHNlZSBiZWxvdywgd2hlcmUgdGhpbmdzIGFy ZSBkaWZmZXJlbnQgaW4gbXVsdGktcmVsYXRpb24KKwkJCQkgKiBjYXNlcy4KKwkJCQkgKi8KKwkJ CQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKworCQkJCS8qCisJCQkJICogV2UgY2Fu J3QgaGFuZGxlIE5PX0dBVEhFUigpIGZvciBub24tcmVsYXRpb24gUlRFcyBiZWNhdXNlCisJCQkJ ICogZ2V0X3JlbGF0aW9uX2luZm8gd29uJ3QgYmUgY2FsbGVkLgorCQkJCSAqLworCQkJCXJ0ZSA9 IHJ0X2ZldGNoKHJ0aSwgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwkJCQlpZiAocnRlLT5ydGVr aW5kICE9IFJURV9SRUxBVElPTikKKwkJCQkJbmVlZHNfbm9fZ2F0aGVyID0gZmFsc2U7CisKKwkJ CQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICgocmVsaWRzID0gcGdwYV9yZWxpZHMocGxhbikp ICE9IE5VTEwpCisJeworCQlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJCXsKKwkJCWNhc2UgVF9G b3JlaWduU2NhbjoKKworCQkJCS8qCisJCQkJICogSWYgbXVsdGlwbGUgcmVsYXRpb25zIGFyZSBi ZWluZyB0YXJnZXRlZCBieSBhIHNpbmdsZQorCQkJCSAqIGZvcmVpZ24gc2NhbiwgdGhlbiB0aGUg Zm9yZWlnbiBqb2luIGhhcyBiZWVuIHB1c2hlZCB0byB0aGUKKwkJCQkgKiByZW1vdGUgc2lkZSwg YW5kIHdlIHdhbnQgdGhhdCB0byBiZSByZWZsZWN0ZWQgaW4gdGhlCisJCQkJICogZ2VuZXJhdGVk IGFkdmljZS4KKwkJCQkgKi8KKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9GT1JFSUdOOworCQkJ CWJyZWFrOworCQkJY2FzZSBUX0FwcGVuZDoKKworCQkJCS8qCisJCQkJICogQXBwZW5kIG5vZGVz IGNhbiByZXByZXNlbnQgcGFydGl0aW9ud2lzZSBzY2FucyBvZiBhIGEKKwkJCQkgKiByZWxhdGlv biwgYnV0IHdoZW4gdGhleSBpbXBsZW1lbnQgYSBzZXQgb3BlcmF0aW9uLCB0aGV5IGFyZQorCQkJ CSAqIGp1c3Qgb3JkaW5hcnkgc2NhbnMuCisJCQkJICovCisJCQkJaWYgKHVuaXF1ZV9ub25qb2lu X3J0ZWtpbmQocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpCisJCQkJCT09IFJURV9SRUxB VElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJCQllbHNl CisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCQkJLyogTk9fR0FUSEVS KCkgc2hvdWxkIGJlIGVtaXR0ZWQgZm9yIHVuZGVybHlpbmcgcmVscyBvbmx5LiAqLworCQkJCW5l ZWRzX25vX2dhdGhlciA9IGZhbHNlOworCisJCQkJLyogQmUgc3VyZSB0byBhY2NvdW50IGZvciBw dWxsZWQtdXAgc2NhbnMuICovCisJCQkJY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCQko KEFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJYnJlYWs7CisJ CQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQkJLyogU29tZSBsb2dpYyBoZXJlIGFzIGZvciBBcHBl bmQsIGFib3ZlLiAqLworCQkJCWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlkcywgd2Fs a2VyLT5wc3RtdC0+cnRhYmxlKQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0cmF0ZWd5 ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVneSA9IFBH UEFfU0NBTl9PUkRJTkFSWTsKKworCQkJCS8qIE5PX0dBVEhFUigpIHNob3VsZCBiZSBlbWl0dGVk IGZvciB1bmRlcmx5aW5nIHJlbHMgb25seS4gKi8KKwkJCQluZWVkc19ub19nYXRoZXIgPSBmYWxz ZTsKKworCQkJCS8qIEJlIHN1cmUgdG8gYWNjb3VudCBmb3IgcHVsbGVkLXVwIHNjYW5zLiAqLwor CQkJCWNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQkJKChNZXJnZUFwcGVuZCAqKSBwbGFu KS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ CXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCQkJLyoKKwkJCQkgKiBXZSBjYW4n dCBoYW5kbGUgTk9fR0FUSEVSKCkgZm9yIHNpbmdsZSBub24tcmVsYXRpb24gUlRFcworCQkJCSAq IGJlY2F1c2UgZ2V0X3JlbGF0aW9uX2luZm8gd29uJ3QgYmUgY2FsbGVkLgorCQkJCSAqLworCQkJ CWlmIChibXNfbWVtYmVyc2hpcChyZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQkJeworCQkJ CQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJCQkJcnRlID0gcnRfZmV0Y2goYm1zX3NpbmdsZXRv bl9tZW1iZXIocmVsaWRzKSwKKwkJCQkJCQkJICAgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwkJ CQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQkJCQluZWVkc19ub19nYXRo ZXIgPSBmYWxzZTsKKwkJCQl9CisKKwkJCQlicmVhazsKKwkJfQorCisKKwkJLyogSm9pbiBSVElz IGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVyIHJlZmVycyB0byB0aGVtLiAqLworCQly ZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMocmVsaWRzLCB3YWxrZXItPnBzdG10 LT5ydGFibGUpOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyBhbiBBcHBlbmQgb3IgTWVyZ2VB cHBlbmQgbm9kZSBpbnRvIHdoaWNoIHN1Ym9yZGluYXRlIEFwcGVuZAorCSAqIG9yIE1lcmdlQXBw ZW5kIHBhdGhzIHdlcmUgbWVyZ2VkLCBlYWNoIG9mIHRob3NlIG1lcmdlZCBwYXRocyBpcworCSAq IGVmZmVjdGl2ZWx5IGFub3RoZXIgc2NhbiBmb3Igd2hpY2ggd2UgbmVlZCB0byBhY2NvdW50Lgor CSAqLworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGNoaWxkX3JlbGlkcywgY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMpCisJeworCQlCaXRtYXBzZXQgICpjaGlsZF9ub25qb2luX3JlbGlkczsKKwor CQljaGlsZF9ub25qb2luX3JlbGlkcyA9CisJCQlwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMo Y2hpbGRfcmVsaWRzLAorCQkJCQkJCQkJCXdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJCSh2b2lk KSBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4sIHN0cmF0ZWd5LAorCQkJCQkJCSAgY2hpbGRf bm9uam9pbl9yZWxpZHMsIGZhbHNlKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgcGxhbiBub2Rl IGhhcyBubyBhc3NvY2lhdGVkIFJUSXMsIGl0J3Mgbm90IGEgc2Nhbi4gV2hlbiB0aGUKKwkgKiAn d2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpcyBzZXQsIHRoYXQncyB1bmV4cGVjdGVkLCBzbyB0 aHJvdyBhbgorCSAqIGVycm9yLCBlbHNlIHJldHVybiBxdWlldGx5LgorCSAqLworCWlmIChyZWxp ZHMgPT0gTlVMTCkKKwl7CisJCWlmICh3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkJZWxvZyhFUlJP UiwgInBsYW4gbm9kZSBoYXMgbm8gUlRJczogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4pKTsKKwkJ cmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBncGFfbWFrZV9zY2FuKHdhbGtlciwgcGxhbiwg c3RyYXRlZ3ksIHJlbGlkcywgbmVlZHNfbm9fZ2F0aGVyKTsKK30KKworLyoKKyAqIENyZWF0ZSBh IHNpbmdsZSBwZ3BhX3NjYW4gb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHBncGFfcGxhbl93YWxrZXJf Y29udGV4dC4KKyAqLworc3RhdGljIHBncGFfc2NhbiAqCitwZ3BhX21ha2Vfc2NhbihwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCSAgIHBncGFfc2Nhbl9z dHJhdGVneSBzdHJhdGVneSwgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkgICBib29sIG5lZWRzX25v X2dhdGhlcikKK3sKKwlwZ3BhX3NjYW4gICpzY2FuOworCisJLyogQ3JlYXRlIHRoZSBzY2FuIG9i amVjdC4gKi8KKwlzY2FuID0gcGFsbG9jKHNpemVvZihwZ3BhX3NjYW4pKTsKKwlzY2FuLT5wbGFu ID0gcGxhbjsKKwlzY2FuLT5zdHJhdGVneSA9IHN0cmF0ZWd5OworCXNjYW4tPnJlbGlkcyA9IHJl bGlkczsKKworCS8qIEFkZCBpdCB0byB0aGUgYXBwcm9wcmlhdGUgbGlzdC4gKi8KKwl3YWxrZXIt PnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSA9IGxhcHBlbmQod2Fsa2VyLT5zY2Fuc1tzY2FuLT5zdHJh dGVneV0sCisJCQkJCQkJCQkJCXNjYW4pOworCisJLyogQ2FsbGVyIHRlbGxzIHVzIHdoZXRoZXIg Tk9fR0FUSEVSKCkgYWR2aWNlIGZvciB0aGlzIHNjYW4gaXMgbmVlZGVkLiAqLworCWlmIChuZWVk c19ub19nYXRoZXIpCisJCXdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zID0gYm1zX2FkZF9tZW1iZXJz KHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zLAorCQkJCQkJCQkJCQkJICBzY2FuLT5yZWxpZHMpOwor CisJcmV0dXJuIHNjYW47Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgdGhlIHVuaXF1ZSBydGVraW5k IG9mIGEgc2V0IG9mIHJlbGlkcy4KKyAqLworc3RhdGljIFJURUtpbmQKK3VuaXF1ZV9ub25qb2lu X3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkg PSAtMTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJUlRFS2luZAkJcnRla2luZDsKKworCUFzc2Vy dChyZWxpZHMgIT0gTlVMTCk7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxp ZHMsIHJ0aSkpID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGks IHJ0YWJsZSk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVl OworCisJCWlmIChmaXJzdCkKKwkJeworCQkJcnRla2luZCA9IHJ0ZS0+cnRla2luZDsKKwkJCWZp cnN0ID0gZmFsc2U7CisJCX0KKwkJZWxzZSBpZiAocnRla2luZCAhPSBydGUtPnJ0ZWtpbmQpCisJ CQllbG9nKEVSUk9SLCAicnRla2luZCBtaXNtYXRjaDogJWQgdnMuICVkIiwKKwkJCQkgcnRla2lu ZCwgcnRlLT5ydGVraW5kKTsKKwl9CisKKwlpZiAoZmlyc3QpCisJCWVsb2coRVJST1IsICJubyBu b24tUlRFX0pPSU4gUlRFcyBmb3VuZCIpOworCisJcmV0dXJuIHJ0ZWtpbmQ7Cit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3NjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uM2JiODcyNmZmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfc2Nhbi5oCkBAIC0wLDAgKzEsODUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHBncGFfc2Nhbi5oCisgKgkgIGFuYWx5c2lzIG9mIHNjYW5zIGluIFBsYW4gdHJlZXMKKyAqCisg KiBGb3IgcHVycG9zZXMgb2YgdGhpcyBtb2R1bGUsIGEgInNjYW4iIGluY2x1ZGVzICgxKSBzaW5n bGUgcGxhbiBub2RlcyB0aGF0CisgKiBzY2FuIG11bHRpcGxlIFJUSXMsIHN1Y2ggYXMgYSBkZWdl bmVyYXRlIFJlc3VsdCBub2RlIHRoYXQgcmVwbGFjZXMgd2hhdAorICogd291bGQgb3RoZXJ3aXNl IGhhdmUgYmVlbiBhIGpvaW4sIGFuZCAoMikgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub2Rlcwor ICogaW1wbGVtZW50aW5nIGEgcGFydGl0aW9ud2lzZSBzY2FuIG9yIGEgcGFydGl0aW9ud2lzZSBq b2luLiBTYWlkCisgKiBkaWZmZXJlbnRseSwgc2NhbnMgYXJlIHRoZSBsZWF2ZXMgb2YgdGhlIGpv aW4gdHJlZSBmb3IgYSBzaW5nbGUgam9pbgorICogcHJvYmxlbS4KKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1NDQU5fSAorI2RlZmluZSBQR1BBX1NDQU5fSAorCisj aW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7CisKKy8qCisgKiBTY2FuIHN0 cmF0ZWdpZXMuCisgKgorICogUEdQQV9TQ0FOX09SRElOQVJZIGlzIGFueSBzY2FuIHN0cmF0ZWd5 IHRoYXQgaXNuJ3QgaW50ZXJlc3RpbmcgdG8gdXMKKyAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gbWVh bmluZ2Z1bCBwbGFubmVyIGRlY2lzaW9uIGludm9sdmVkLiBGb3IgZXhhbXBsZSwKKyAqIHRoZSBv bmx5IHdheSB0byBzY2FuIGEgc3VicXVlcnkgaXMgYSBTdWJxdWVyeVNjYW4sIGFuZCB0aGUgb25s eSB3YXkgdG8KKyAqIHNjYW4gYSBWQUxVRVMgY29uc3RydWN0IGlzIGEgVmFsdWVzU2Nhbi4gV2Ug bmVlZCBub3QgY2FyZSBleGFjdGx5IHdoaWNoCisgKiB0eXBlIG9mIHBsYW5uZXIgbm9kZSB3YXMg dXNlZCBpbiBzdWNoIGNhc2VzLCBiZWNhdXNlIHRoZSBzYW1lIHRoaW5nIHdpbGwKKyAqIGhhcHBl biB3aGVuIHJlcGxhbm5pbmcuCisgKgorICogUEdQQV9TQ0FOX09SRElOQVJZIGFsc28gaW5jbHVk ZXMgUmVzdWx0IG5vZGVzIHRoYXQgY29ycmVzcG9uZCB0byBzY2FucworICogb3IgZXZlbiBqb2lu cyB0aGF0IGFyZSBwcm92ZWQgZW1wdHkuIFdlIGRvbid0IGtub3cgd2hldGhlciBvciBub3QgdGhl IHNjYW4KKyAqIG9yIGpvaW4gd2lsbCBzdGlsbCBiZSBwcm92YWJseSBlbXB0eSBhdCByZXBsYW5u aW5nIHRpbWUsIGJ1dCBpZiBpdCBpcywKKyAqIHRoZW4gbm8gc2Nhbi10eXBlIGFkdmljZSBpcyBu ZWVkZWQsIGFuZCBpZiBpdCdzIG5vdCwgd2UgY2FuJ3QgcmVjb21tZW5kCisgKiBhIHNjYW4gdHlw ZSBiYXNlZCBvbiB0aGUgY3VycmVudCBwbGFuLgorICoKKyAqIFBHUEFfU0NBTl9QQVJUSVRJT05X SVNFIGFsc28gbHVtcHMgdG9nZXRoZXIgc2NhbnMgYW5kIGpvaW5zOiB0aGlzIGNhbgorICogYmUg ZWl0aGVyIGEgcGFydGl0aW9ud2lzZSBzY2FuIG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb3IgYSBw YXJ0aXRpb253aXNlCisgKiBqb2luIGJldHdlZW4gc2V2ZXJhbCBwYXJ0aXRpb25lZCB0YWJsZXMu IE5vdGUgdGhhdCBhbGwgZGVjaXNpb25zIGFib3V0CisgKiB3aGV0aGVyIG9yIG5vdCB0byB1c2Ug cGFydGl0aW9ud2lzZSBqb2luIGFyZSBtZWFuaW5nZnVsOiBubyBtYXR0ZXIgd2hhdAorICogd2Ug ZGVjaWRlZCB0aGlzIHRpbWUsIHdlIGNvdWxkIGRvIG1vcmUgb3IgZmV3ZXIgdGhpbmdzIHBhcnRp dGlvbndpc2UgdGhlCisgKiBuZXh0IHRpbWUuCisgKgorICogUEdQQV9TQ0FOX0ZPUkVJR04gaXMg b25seSB1c2VkIHdoZW4gdGhlcmUncyBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGludm9sdmVkOwor ICogYSBzaW5nbGUtdGFibGUgZm9yZWlnbiBzY2FuIGlzIGNsYXNzaWZpZWQgYXMgb3JkaW5hcnks IHNpbmNlIHRoZXJlIGlzIG5vCisgKiBkZWNpc2lvbiB0byBtYWtlIGluIHRoYXQgY2FzZS4KKyAq CisgKiBPdGhlciBzY2FuIHN0cmF0ZWdpZXMgbWFwIG9uZS10by1vbmUgdG8gcGxhbiBub2Rlcy4K KyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9TQ0FOX09SRElOQVJZID0gMCwKKwlQR1BBX1ND QU5fU0VRLAorCVBHUEFfU0NBTl9CSVRNQVBfSEVBUCwKKwlQR1BBX1NDQU5fRk9SRUlHTiwKKwlQ R1BBX1NDQU5fSU5ERVgsCisJUEdQQV9TQ0FOX0lOREVYX09OTFksCisJUEdQQV9TQ0FOX1BBUlRJ VElPTldJU0UsCisJUEdQQV9TQ0FOX1RJRAorCS8qIHVwZGF0ZSBOVU1fUEdQQV9TQ0FOX1NUUkFU RUdZIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX3NjYW5fc3RyYXRlZ3k7CisK KyNkZWZpbmUgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWQkoKGludCkgUEdQQV9TQ0FOX1RJRCArIDEp CisKKy8qCisgKiBBbGwgb2YgdGhlIGRldGFpbHMgd2UgbmVlZCByZWdhcmRpbmcgYSBzY2FuLgor ICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NjYW4KK3sKKwlQbGFuCSAgICpwbGFuOworCXBncGFf c2Nhbl9zdHJhdGVneSBzdHJhdGVneTsKKwlCaXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFfc2Nh bjsKKworZXh0ZXJuIHBncGFfc2NhbiAqcGdwYV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgIEVsaWRlZE5vZGUgKmVsaWRl ZF9ub2RlLAorCQkJCQkJCQkgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJCQkgIGJv b2wgd2l0aGluX2pvaW5fcHJvYmxlbSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9zY2FubmVyLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM0OWIy OWQ5MDZkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Nj YW5uZXIubApAQCAtMCwwICsxLDMwMiBAQAorJXRvcHsKKy8qCisgKiBTY2FubmVyIGZvciBwbGFu IGFkdmljZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9z Y2FubmVyLmwKKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24v c3RyaW5nLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAicGFyc2Vy L3NjYW5zdXAuaCIKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9wYXJz ZXIuaCIKKworLyoKKyAqIEV4dHJhIGRhdGEgdGhhdCB3ZSBwYXNzIGFyb3VuZCB3aGVuIGR1cmlu ZyBzY2FubmluZy4KKyAqCisgKiAnbGl0YnVmJyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgPHhk PiBleGNsdXNpdmUgc3RhdGUsIHdoaWNoIGhhbmRsZXMKKyAqIGRvdWJsZS1xdW90ZWQgaWRlbnRp ZmllcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfeXlfZXh0cmFfdHlwZQoreworCVN0cmlu Z0luZm9EYXRhCWxpdGJ1ZjsKK30gcGdwYV95eV9leHRyYV90eXBlOworCit9CisKKyV7CisvKiBM Q09WX0VYQ0xfU1RBUlQgKi8KKworI2RlZmluZSBZWV9ERUNMIFwKKwlleHRlcm4gaW50IHBncGFf eXlsZXgodW5pb24gWVlTVFlQRSAqeXlsdmFsX3BhcmFtLCBMaXN0ICoqcmVzdWx0LCBcCisJCQkJ CQkgIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyKQorCisvKiBO byByZWFzb24gdG8gY29uc3RyYWluIGFtb3VudCBvZiBkYXRhIHNsdXJwZWQgKi8KKyNkZWZpbmUg WVlfUkVBRF9CVUZfU0laRSAxNjc3NzIxNgorCisvKiBBdm9pZCBleGl0KCkgb24gZmF0YWwgc2Nh bm5lciBlcnJvcnMgKGEgYml0IHVnbHkgLS0gc2VlIHl5X2ZhdGFsX2Vycm9yKSAqLworI3VuZGVm IGZwcmludGYKKyNkZWZpbmUgZnByaW50ZihmaWxlLCBmbXQsIG1zZykgIGZwcmludGZfdG9fZXJl cG9ydChmbXQsIG1zZykKKworc3RhdGljIHZvaWQKK2ZwcmludGZfdG9fZXJlcG9ydChjb25zdCBj aGFyICpmbXQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwllcmVwb3J0KEVSUk9SLCAoZXJybXNnX2lu dGVybmFsKCIlcyIsIG1zZykpKTsKK30KKyV9CisKKyVvcHRpb24gcmVlbnRyYW50Cislb3B0aW9u IGJpc29uLWJyaWRnZQorJW9wdGlvbiA4Yml0Cislb3B0aW9uIG5ldmVyLWludGVyYWN0aXZlCisl b3B0aW9uIG5vZGVmYXVsdAorJW9wdGlvbiBub2lucHV0Cislb3B0aW9uIG5vdW5wdXQKKyVvcHRp b24gbm95eXdyYXAKKyVvcHRpb24gbm95eWFsbG9jCislb3B0aW9uIG5veXlyZWFsbG9jCislb3B0 aW9uIG5veXlmcmVlCislb3B0aW9uIHdhcm4KKyVvcHRpb24gcHJlZml4PSJwZ3BhX3l5IgorJW9w dGlvbiBleHRyYS10eXBlPSJwZ3BhX3l5X2V4dHJhX3R5cGUgKiIKKworLyoKKyAqIFdoYXQgZm9s bG93cyBpcyBhIHNldmVyZWx5IHN0cmlwcGVkLWRvd24gdmVyc2lvbiBvZiB0aGUgY29yZSBzY2Fu bmVyLiBXZQorICogb25seSBjYXJlIGFib3V0IHJlY29nbml6aW5nIGlkZW50aWZpZXJzIHdpdGgg b3Igd2l0aG91dCBpZGVudGlmaWVyIHF1b3RpbmcKKyAqIChpLmUuIGRvdWJsZS1xdW90aW5nKSwg ZGVjaW1hbCBpbnRlZ2VycywgYW5kIGEgc21hbGwgaGFuZGZ1bCBvZiBvdGhlcgorICogdGhpbmdz LiBLZWVwIHRoZXNlIHJ1bGVzIGluIHN5bmMgd2l0aCBzcmMvYmFja2VuZC9wYXJzZXIvc2Nhbi5s LiBBcyBpbiB0aGF0CisgKiBmaWxlLCB3ZSB1c2UgYW4gZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAn eGMnIGZvciBDLXN0eWxlIGNvbW1lbnRzLCBhbmQgYW4KKyAqIGV4Y2x1c2l2ZSBzdGF0ZSBjYWxs ZWQgJ3hkJyBmb3IgZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycy4KKyAqLworJXggeGMKKyV4IHhk CisKK2lkZW50X3N0YXJ0CQlbQS1aYS16XDIwMC1cMzc3X10KK2lkZW50X2NvbnQJCVtBLVphLXpc MjAwLVwzNzdfMC05XCRdCisKK2lkZW50aWZpZXIJCXtpZGVudF9zdGFydH17aWRlbnRfY29udH0q CisKK2RlY2RpZ2l0CQlbMC05XQorZGVjaW50ZWdlcgkJe2RlY2RpZ2l0fShfP3tkZWNkaWdpdH0p KgorCitzcGFjZQkJCVsgXHRcblxyXGZcdl0KK3doaXRlc3BhY2UJCXtzcGFjZX0rCisKK2RxdW90 ZQkJCVwiCit4ZHN0YXJ0CQkJe2RxdW90ZX0KK3hkc3RvcAkJCXtkcXVvdGV9Cit4ZGRvdWJsZQkJ e2RxdW90ZX17ZHF1b3RlfQoreGRpbnNpZGUJCVteIl0rCisKK3hjc3RhcnQJCQlcL1wqCit4Y3N0 b3AJCQlcKitcLworeGNpbnNpZGUJCVteKi9dKworCislJQorCit7d2hpdGVzcGFjZX0JeyAvKiBp Z25vcmUgKi8gfQorCit7aWRlbnRpZmllcn0JeworCQkJCQljaGFyICAgKnN0cjsKKwkJCQkJYm9v bAlmYWlsOworCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZQl0YWc7CisKKwkJCQkJLyoKKwkJCQkJ ICogVW5saWtlIHRoZSBjb3JlIHNjYW5uZXIsIHdlIGRvbid0IHRydW5jYXRlIGlkZW50aWZpZXJz CisJCQkJCSAqIGhlcmUuIFRoZXJlIGlzIG5vIG9idmlvdXMgcmVhc29uIHRvIGRvIHNvLgorCQkJ CQkgKi8KKwkJCQkJc3RyID0gZG93bmNhc2VfaWRlbnRpZmllcih5eXRleHQsIHl5bGVuZywgZmFs c2UsIGZhbHNlKTsKKwkJCQkJeXlsdmFsLT5zdHIgPSBzdHI7CisKKwkJCQkJLyoKKwkJCQkJICog SWYgaXQncyBub3QgYSB0YWcsIGp1c3QgcmV0dXJuIFRPS19JREVOVDsgZWxzZSwgcmV0dXJuCisJ CQkJCSAqIGEgdG9rZW4gdHlwZSBiYXNlZCBvbiBob3cgZnVydGhlciBwYXJzaW5nIHNob3VsZAor CQkJCQkgKiBwcm9jZWVkLgorCQkJCQkgKi8KKwkJCQkJdGFnID0gcGdwYV9wYXJzZV9hZHZpY2Vf dGFnKHN0ciwgJmZhaWwpOworCQkJCQlpZiAoZmFpbCkKKwkJCQkJCXJldHVybiBUT0tfSURFTlQ7 CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19KT0lOX09SREVSKQorCQkJCQkJcmV0dXJu IFRPS19UQUdfSk9JTl9PUkRFUjsKKwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0lOREVY X1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCQkJ CXJldHVybiBUT0tfVEFHX0lOREVYOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfQklU TUFQX0hFQVBfU0NBTikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0JJVE1BUDsKKwkJCQkJZWxzZSBp ZiAodGFnID09IFBHUEFfVEFHX1NFUV9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19U SURfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQkJCQkJcmV0 dXJuIFRPS19UQUdfU0lNUExFOworCQkJCQllbHNlCisJCQkJCQlyZXR1cm4gVE9LX1RBR19HRU5F UklDOworCQkJCX0KKwore2RlY2ludGVnZXJ9CXsKKwkJCQkJY2hhciAgICplbmRwdHI7CisKKwkJ CQkJZXJybm8gPSAwOworCQkJCQl5eWx2YWwtPmludGVnZXIgPSBzdHJ0b2ludCh5eXRleHQsICZl bmRwdHIsIDEwKTsKKwkJCQkJaWYgKCplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyA9PSBFUkFOR0Up CisJCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVy LAorCQkJCQkJCQkJICJpbnRlZ2VyIG91dCBvZiByYW5nZSIpOworCQkJCQlyZXR1cm4gVE9LX0lO VEVHRVI7CisJCQkJfQorCit7eGNzdGFydH0JCXsKKwkJCQkJQkVHSU4oeGMpOworCQkJCX0KKwor e3hkc3RhcnR9CQl7CisJCQkJCUJFR0lOKHhkKTsKKwkJCQkJcmVzZXRTdHJpbmdJbmZvKCZ5eWV4 dHJhLT5saXRidWYpOworCQkJCX0KKworInx8IgkJCXsgcmV0dXJuIFRPS19PUjsgfQorCisiJiYi CQkJeyByZXR1cm4gVE9LX0FORDsgfQorCisuCQkJCXsgcmV0dXJuIHl5dGV4dFswXTsgfQorCis8 eGM+e3hjc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQl9CisKKzx4Yz57eGNpbnNp ZGV9CXsKKwkJCQkJLyogZGlzY2FyZCBtdWx0aXBsZSBjaGFyYWN0ZXJzIHdpdGhvdXQgc2xhc2gg b3IgYXN0ZXJpc2sgKi8KKwkJCQl9CisKKzx4Yz4uCQkJeworCQkJCQkvKgorCQkJCQkgKiBEaXNj YXJkIGFueSBzaW5nbGUgY2hhcmFjdGVyLiBmbGV4IHByZWZlcnMgbG9uZ2VyCisJCQkJCSAqIG1h dGNoZXMsIHNvIHRoaXMgcnVsZSB3aWxsIG5ldmVyIGJlIHBpY2tlZCB3aGVuIHdlIGNvdWxkCisJ CQkJCSAqIGhhdmUgbWF0Y2hlZCB4Y3N0b3AuCisJCQkJCSAqCisJCQkJCSAqIE5COiBBdCBwcmVz ZW50LCB3ZSBkb24ndCBib3RoZXIgdG8gc3VwcG9ydCBuZXN0ZWQKKwkJCQkJICogQy1zdHlsZSBj b21tZW50cyBoZXJlLCBidXQgdGhpcyBsb2dpYyBjb3VsZCBiZSBleHRlbmRlZAorCQkJCQkgKiBp ZiB0aGF0IHJlc3RyaWN0aW9uIHBvc2VzIGEgcHJvYmxlbS4KKwkJCQkJICovCisJCQkJfQorCis8 eGM+PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVycm9yKHJl c3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0 ZWQgY29tbWVudCIpOworCQkJCX0KKworPHhkPnt4ZHN0b3B9CXsKKwkJCQkJQkVHSU4oSU5JVElB TCk7CisJCQkJCWlmICh5eWV4dHJhLT5saXRidWYubGVuID09IDApCisJCQkJCQlwZ3BhX3l5ZXJy b3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkJICJ6ZXJv LWxlbmd0aCBkZWxpbWl0ZWQgaWRlbnRpZmllciIpOworCQkJCQl5eWx2YWwtPnN0ciA9IHBzdHJk dXAoeXlleHRyYS0+bGl0YnVmLmRhdGEpOworCQkJCQlyZXR1cm4gVE9LX0lERU5UOworCQkJCX0K KworPHhkPnt4ZGRvdWJsZX0JeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmeXlleHRyYS0+ bGl0YnVmLCAnIicpOworCQkJCX0KKworPHhkPnt4ZGluc2lkZX0JeworCQkJCQlhcHBlbmRCaW5h cnlTdHJpbmdJbmZvKCZ5eWV4dHJhLT5saXRidWYsIHl5dGV4dCwgeXlsZW5nKTsKKwkJCQl9CisK Kzx4ZD48PEVPRj4+CQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJyb3Io cmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVudGVybWlu YXRlZCBxdW90ZWQgaWRlbnRpZmllciIpOworCQkJCX0KKworJSUKKworLyogTENPVl9FWENMX1NU T1AgKi8KKworLyoKKyAqIEhhbmRsZXIgZm9yIGVycm9ycyB3aGlsZSBzY2FubmluZyBvciBwYXJz aW5nIGFkdmljZS4KKyAqCisgKiBiaXNvbiBwYXNzZXMgdGhlIGVycm9yIG1lc3NhZ2UgdG8gdXMg dmlhICdtZXNzYWdlJywgYW5kIHRoZSBjb250ZXh0IGlzCisgKiBhdmFpbGFibGUgdmlhIHRoZSAn eXl0ZXh0JyBtYWNyby4gV2UgYXNzZW1ibGUgdGhvc2UgdmFsdWVzIGludG8gYSBmaW5hbAorICog ZXJyb3IgdGV4dCBhbmQgdGhlbiBhcnJhbmdlIHRvIHBhc3MgaXQgYmFjayB0byB0aGUgY2FsbGVy IG9mIHBncGFfeXlwYXJzZSgpCisgKiBieSBzdG9yaW5nIGl0IGludG8gKnBhcnNlX2Vycm9yX21z Z19wLgorICovCit2b2lkCitwZ3BhX3l5ZXJyb3IoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBhcnNl X2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIsCisJCQkgY29uc3QgY2hhciAqbWVzc2Fn ZSkKK3sKKwlzdHJ1Y3QgeXlndXRzX3QgKnl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QgKikgeXlzY2Fu bmVyOwkvKiBuZWVkZWQgZm9yIHl5dGV4dAorCQkJCQkJCQkJCQkJCQkJICogbWFjcm8gKi8KKwor CisJLyogcmVwb3J0IG9ubHkgdGhlIGZpcnN0IGVycm9yIGluIGEgcGFyc2Ugb3BlcmF0aW9uICov CisJaWYgKCpwYXJzZV9lcnJvcl9tc2dfcCkKKwkJcmV0dXJuOworCisJaWYgKHl5dGV4dFswXSkK KwkJKnBhcnNlX2Vycm9yX21zZ19wID0gcHNwcmludGYoIiVzIGF0IG9yIG5lYXIgXCIlc1wiIiwg bWVzc2FnZSwgeXl0ZXh0KTsKKwllbHNlCisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBzcHJpbnRm KCIlcyBhdCBlbmQgb2YgaW5wdXQiLCBtZXNzYWdlKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUg dGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUg cGFyc2luZyBiZWdpbnMuCisgKi8KK3ZvaWQKK3BncGFfc2Nhbm5lcl9pbml0KGNvbnN0IGNoYXIg KnN0ciwgeXlzY2FuX3QgKnl5c2Nhbm5lcnApCit7CisJeXlzY2FuX3QJeXlzY2FubmVyOworCXBn cGFfeXlfZXh0cmFfdHlwZQkqeXlleHQgPSBwYWxsb2MwX29iamVjdChwZ3BhX3l5X2V4dHJhX3R5 cGUpOworCisJaWYgKHl5bGV4X2luaXQoeXlzY2FubmVycCkgIT0gMCkKKwkJZWxvZyhFUlJPUiwg Inl5bGV4X2luaXQoKSBmYWlsZWQ6ICVtIik7CisKKwl5eXNjYW5uZXIgPSAqeXlzY2FubmVycDsK KworCWluaXRTdHJpbmdJbmZvKCZ5eWV4dC0+bGl0YnVmKTsKKwlwZ3BhX3l5c2V0X2V4dHJhKHl5 ZXh0LCB5eXNjYW5uZXIpOworCisJeXlfc2Nhbl9zdHJpbmcoc3RyLCB5eXNjYW5uZXIpOworfQor CisKKy8qCisgKiBTaHV0IGRvd24gdGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRoaXMgc2hv dWxkIGJlIGNhbGxlZCBhZnRlciBwYXJzaW5nIGlzIGNvbXBsZXRlLgorICovCit2b2lkCitwZ3Bh X3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwl5eWxleF9kZXN0cm95KHl5 c2Nhbm5lcik7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgZnVuY3Rpb25zIHRvIG1ha2UgZmxleCB1 c2UgcGFsbG9jKCkgaW5zdGVhZCBvZiBtYWxsb2MoKS4KKyAqIEl0J2QgYmUgYmV0dGVyIHRvIG1h a2UgdGhlc2Ugc3RhdGljLCBidXQgZmxleCBpbnNpc3RzIG90aGVyd2lzZS4KKyAqLworCit2b2lk ICoKK3l5YWxsb2MoeXlfc2l6ZV90IHNpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1 cm4gcGFsbG9jKHNpemUpOworfQorCit2b2lkICoKK3l5cmVhbGxvYyh2b2lkICpwdHIsIHl5X3Np emVfdCBzaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYgKHB0cikKKwkJcmV0dXJuIHJl cGFsbG9jKHB0ciwgc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gcGFsbG9jKHNpemUpOworfQorCit2 b2lkCit5eWZyZWUodm9pZCAqcHRyLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYgKHB0cikK KwkJcGZyZWUocHRyKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV90cm92ZS5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlkYjEwNzdkNDg3Ci0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKQEAgLTAsMCArMSw0OTIg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfdHJvdmUuYworICoJICBBbGwgb2Yg dGhlIGFkdmljZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXJ5LCBhcHByb3ByaWF0ZWx5Cisg KiAgICBvcmdhbml6ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNzLgorICoKKyAqIFRoaXMgbmFtZSBj b21lcyBmcm9tIHRoZSBFbmdsaXNoIGV4cHJlc3Npb24gInRyb3ZlIG9mIGFkdmljZSIsIHdoaWNo CisgKiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygd2lzZG9tLiBUaGlzIHNsaWdodGx5IHVudXN1YWwg dGVybSBpcyBjaG9zZW4gdG8KKyAqIGF2b2lkIG5hbWluZyBjb25mdXNpb247IGZvciBleGFtcGxl LCAiY29sbGVjdGlvbiBvZiBhZHZpY2UiIHdvdWxkCisgKiBpbnZpdGUgY29uZnVzaW9uIHdpdGgg cGdwYV9jb2xsZWN0b3IuYy4gTm90ZSB0aGF0LCB3aGlsZSB3ZSBkb24ndCBrbm93CisgKiB3aGV0 aGVyIHRoZSBwcm92aWRlZCBhZHZpY2UgaXMgYWN0dWFsbHkgd2lzZSwgaXQncyBub3Qgb3VyIGpv YiB0bworICogcXVlc3Rpb24gdGhlIHVzZXIncyBjaG9pY2VzLgorICoKKyAqIFRoZSBnb2FsIG9m IHRoaXMgbW9kdWxlIGlzIHRvIG1ha2UgaXQgZWFzeSB0byBsb2NhdGUgdGhlIHNwZWNpZmljCisg KiBiaXRzIG9mIGFkdmljZSB0aGF0IHBlcnRhaW4gdG8gYW55IGdpdmVuIHBhcnQgb2YgYSBxdWVy eSwgb3IgdG8KKyAqIGRldGVybWluZSB0aGF0IHRoZXJlIGFyZSBub25lLgorICoKKyAqIENvcHly aWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3Bh X3Ryb3ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisKKy8qCisg KiBBbiBhZHZpY2UgdHJvdmUgaXMgb3JnYW5pemVkIGludG8gYSBzZXJpZXMgb2YgInNsaWNlcyIs IGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSB0b3BpYyBl LmcuIHNjYW4gbWV0aG9kcy4gRWFjaCBzbGljZSBjb25zaXN0cworICogb2YgYW4gYXJyYXkgb2Yg dHJvdmUgZW50cmllcyBwbHVzIGEgaGFzaCB0YWJsZSB0aGF0IHdlIGNhbiB1c2UgdG8gZGV0ZXJt aW5lCisgKiB3aGljaCBvbmVzIGFyZSByZWxldmFudCB0byBhIHBhcnRpY3VsYXIgcGFydCBvZiB0 aGUgcXVlcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfc2xpY2UKK3sKKwl1bnNp Z25lZAluYWxsb2NhdGVkOworCXVuc2lnbmVkCW51c2VkOworCXBncGFfdHJvdmVfZW50cnkgKmVu dHJpZXM7CisJc3RydWN0IHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaDsKK30gcGdwYV90cm92 ZV9zbGljZTsKKworLyoKKyAqIFNjYW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdzY2FuJzsgam9p biBhZHZpY2UgaXMgc3RvcmVkIGludG8gJ2pvaW4nOyBhbmQKKyAqIGFkdmljZSB0aGF0IGNhbiBh cHBseSB0byBib3RoIGNhc2VzIGlzIHN0b3JlZCBpbnRvICdyZWwnLiBUaGlzIGxldHMgY2FsbGVy cworICogYXNrIGp1c3QgZm9yIHdoYXQncyByZWxldmFudC4gVGhlc2Ugc2xpY2VzIGNvcnJlc3Bv bmQgdG8gdGhlIHBvc3NpYmxlIHZhbHVlcworICogb2YgcGdwYV90cm92ZV9sb29rdXBfdHlwZS4K KyAqLworc3RydWN0IHBncGFfdHJvdmUKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlIGpvaW47CisJcGdw YV90cm92ZV9zbGljZSByZWw7CisJcGdwYV90cm92ZV9zbGljZSBzY2FuOworfTsKKworLyoKKyAq IFdlJ3JlIGdvaW5nIHRvIGJ1aWxkIGEgaGFzaCB0YWJsZSB0byBhbGxvdyBjbGllbnRzIG9mIHRo aXMgbW9kdWxlIHRvIGZpbmQKKyAqIHJlbGV2YW50IGFkdmljZSBmb3IgYSBnaXZlbiBwYXJ0IG9m IHRoZSBxdWVyeSBxdWlja2x5LiBIb3dldmVyLCB3ZSdyZSBnb2luZworICogdG8gdXNlIG9ubHkg dGhyZWUgb2YgdGhlIGZpdmUga2V5IGZpZWxkcyBhcyBoYXNoIGtleXMuIFRoZXJlIGFyZSB0d28g cmVhc29ucworICogZm9yIHRoaXMuCisgKgorICogRmlyc3QsIGl0J3MgYWxsb3dhYmxlIHRvIHNl dCBwYXJ0aXRpb25fc2NoZW1hIHRvIE5VTEwgdG8gbWF0Y2ggYSBwYXJ0aXRpb24KKyAqIHdpdGgg dGhlIGNvcnJlY3QgbmFtZSBpbiBhbnkgc2NoZW1hLgorICoKKyAqIFNlY29uZCwgd2UgZXhwZWN0 IHRoZSAib2NjdXJyZW5jZSIgYW5kICJwYXJ0aXRpb25fc2NoZW1hIiBwb3J0aW9ucyBvZiB0aGUK KyAqIHJlbGF0aW9uIGlkZW50aWZpZXJzIHRvIGJlIG1vc3RseSB1bmludGVyZXN0aW5nLiBNb3N0 IG9mIHRoZSB0aW1lLCB0aGUKKyAqIG9jY3VycmVuY2UgZmllbGQgd2lsbCBiZSAxIGFuZCB0aGUg cGFydGl0aW9uX3NjaGVtYSB2YWx1ZXMgd2lsbCBhbGwgYmUgdGhlCisgKiBzYW1lLiBFdmVuIHdo ZW4gdGhlcmUgaXMgc29tZSB2YXJpYXRpb24sIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YgZW50cmll cworICogdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlcyBmb3IgYWxsIHRocmVlIG9mIHRoZXNlIGtl eSBmaWVsZHMgc2hvdWxkIGJlCisgKiBxdWl0ZSBzbWFsbC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QK K3sKKwljb25zdCBjaGFyICphbGlhc19uYW1lOworCWNvbnN0IGNoYXIgKnBhcnRpdGlvbl9uYW1l OworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30gcGdwYV90cm92ZV9lbnRyeV9rZXk7CisKK3R5 cGVkZWYgc3RydWN0Cit7CisJcGdwYV90cm92ZV9lbnRyeV9rZXkga2V5OworCWludAkJCXN0YXR1 czsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQ7CisK K3N0YXRpYyB1aW50MzIgcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3ZlX2VudHJ5 X2tleSBrZXkpOworCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfdHJvdmVfZW50cnlfY29tcGFy ZV9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkgYSwgcGdwYV90cm92ZV9lbnRyeV9rZXkgYikKK3sK KwlpZiAoc3RyY21wKGEuYWxpYXNfbmFtZSwgYi5hbGlhc19uYW1lKSAhPSAwKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGFydGl0aW9uX25h bWUsIGIucGFydGl0aW9uX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0cmluZ3Nf ZXF1YWxfb3JfYm90aF9udWxsKGEucGxhbl9uYW1lLCBiLnBsYW5fbmFtZSkpCisJCXJldHVybiBm YWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBncGFfdHJv dmVfZW50cnkKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1l bnQKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3Ryb3ZlX2VudHJ5X2tleQorI2RlZmluZSBT SF9LRVkJCQkJa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfdHJvdmVfZW50 cnlfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV90cm92ZV9l bnRyeV9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBpbmxpbmUK KyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJsaWIvc2lt cGxlaGFzaC5oIgorCitzdGF0aWMgdm9pZCBwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdwYV90cm92 ZV9zbGljZSAqdHNsaWNlKTsKK3N0YXRpYyB2b2lkIHBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKHBn cGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlIHRh ZywKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyB2b2lkIHBn cGFfdHJvdmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLAorCQkJCQkJ CQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJICAgaW50IGluZGV4KTsK K3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJvdmVfc2xp Y2UgKnRzbGljZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKworLyoKKyAq IEJ1aWxkIGEgdHJvdmUgb2YgYWR2aWNlIGZyb20gYSBsaXN0IG9mIGFkdmljZSBpdGVtcy4KKyAq CisgKiBDYWxsZXIgY2FuIG9idGFpbiBhIGxpc3Qgb2YgYWR2aWNlIGl0ZW1zIHRvIHBhc3MgdG8g dGhpcyBmdW5jdGlvbiBieQorICogY2FsbGluZyBwZ3BhX3BhcnNlKCkuCisgKi8KK3BncGFfdHJv dmUgKgorcGdwYV9idWlsZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpCit7CisJcGdwYV90cm92 ZSAqdHJvdmUgPSBwYWxsb2Nfb2JqZWN0KHBncGFfdHJvdmUpOworCisJcGdwYV9pbml0X3Ryb3Zl X3NsaWNlKCZ0cm92ZS0+am9pbik7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+cmVs KTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5zY2FuKTsKKworCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX2l0ZW0sIGl0ZW0sIGFkdmljZV9pdGVtcykKKwl7CisJCXN3aXRjaCAoaXRl bS0+dGFnKQorCQl7CisJCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkJeworCQkJCQlw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKworCQkJCQkvKgorCQkJCQkgKiBGb3IgbW9zdCBh ZHZpY2UgdHlwZXMsIGVhY2ggZWxlbWVudCBpbiB0aGUgdG9wLWxldmVsCisJCQkJCSAqIGxpc3Qg aXMgYSBzZXBhcmF0ZSB0YXJnZXQsIGJ1dCBpdCdzIG1vc3QgY29udmVuaWVudCB0bworCQkJCQkg KiByZWdhcmQgdGhlIGVudGlyZXR5IG9mIGEgSk9JTl9PUkRFUiBzcGVjaWZpY2F0aW9uIGFzIGEK KwkJCQkJICogc2luZ2xlIHRhcmdldC4gU2luY2UgaXQgd2Fzbid0IHJlcHJlc2VudGVkIHRoYXQg d2F5CisJCQkJCSAqIGR1cmluZyBwYXJzaW5nLCBidWlsZCBhIHN1cnJvZ2F0ZSBvYmplY3Qgbm93 LgorCQkJCQkgKi8KKwkJCQkJdGFyZ2V0ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFy Z2V0KTsKKwkJCQkJdGFyZ2V0LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsKKwkJ CQkJdGFyZ2V0LT5jaGlsZHJlbiA9IGl0ZW0tPnRhcmdldHM7CisKKwkJCQkJcGdwYV90cm92ZV9h ZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRhcmdldCk7 CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU46 CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfSU5E RVhfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX1RJ RF9TQ0FOOgorCisJCQkJLyoKKwkJCQkgKiBTY2FuIGFkdmljZS4KKwkJCQkgKi8KKwkJCQlmb3Jl YWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIEZvciBub3csIGFsbCBvZiBvdXIgc2NhbiB0eXBlcyB0YXJnZXQg c2luZ2xlIHJlbGF0aW9ucywKKwkJCQkJICogYnV0IGluIHRoZSBmdXR1cmUgdGhpcyBtaWdodCBu b3QgYmUgdHJ1ZSwgZS5nLiBhIGN1c3RvbQorCQkJCQkgKiBzY2FuIGNvdWxkIHJlcGxhY2UgYSBq b2luLgorCQkJCQkgKi8KKwkJCQkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRf SURFTlRJRklFUik7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+c2NhbiwK KwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJ Y2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoK KwkJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCWNhc2UgUEdQQV9U QUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQljYXNlIFBH UEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05f VU5JUVVFOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisKKwkJCQkvKgorCQkJ CSAqIEpvaW4gc3RyYXRlZ3kgYWR2aWNlLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFf YWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJcGdwYV90 cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRh cmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJ U0U6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCWNhc2UgUEdQQV9UQUdfR0FUSEVSX01F UkdFOgorCQkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisKKwkJCQkvKgorCQkJCSAqIEFkdmlj ZSBhYm91dCBhIFJlbE9wdEluZm8gcmVsZXZhbnQgdG8gYm90aCBzY2FucyBhbmQgam9pbnMuCisJ CQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQsIGl0ZW0t PnRhcmdldHMpCisJCQkJeworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUtPnJl bCwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ fQorCX0KKworCXJldHVybiB0cm92ZTsKK30KKworLyoKKyAqIFNlYXJjaCBhIHRyb3ZlIG9mIGFk dmljZSBmb3IgcmVsZXZhbnQgZW50cmllcy4KKyAqCisgKiBBbGwgcGFyYW1ldGVycyBhcmUgaW5w dXQgcGFyYW1ldGVycyBleGNlcHQgZm9yICpyZXN1bHQsIHdoaWNoIGlzIGFuIG91dHB1dAorICog cGFyYW1ldGVyIHVzZWQgdG8gcmV0dXJuIHJlc3VsdHMgdG8gdGhlIGNhbGxlci4KKyAqLwordm9p ZAorcGdwYV90cm92ZV9sb29rdXAocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVfbG9va3Vw X3R5cGUgdHlwZSwKKwkJCQkgIGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLCBwZ3Bh X3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KQoreworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGljZTsKKwlC aXRtYXBzZXQgICppbmRleGVzOworCisJQXNzZXJ0KG5yaWRzID4gMCk7CisKKwlpZiAodHlwZSA9 PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxz ZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUt PmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCWluZGV4ZXMgPSBwZ3Bh X3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzWzBdKTsKKwlmb3IgKGludCBpID0gMTsg aSA8IG5yaWRzOyArK2kpCisJeworCQlCaXRtYXBzZXQgICpvdGhlcl9pbmRleGVzOworCisJCS8q CisJCSAqIElmIHRoZSBjYWxsZXIgaXMgYXNraW5nIGFib3V0IHR3byByZWxhdGlvbnMgdGhhdCBh cmVuJ3QgcGFydCBvZiB0aGUKKwkJICogc2FtZSBzdWJxdWVyeSwgdGhleSd2ZSBtZXNzZWQgdXAu CisJCSAqLworCQlBc3NlcnQoc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkc1swXS5wbGFu X25hbWUsCisJCQkJCQkJCQkJICByaWRzW2ldLnBsYW5fbmFtZSkpOworCisJCW90aGVyX2luZGV4 ZXMgPSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzW2ldKTsKKwkJaW5kZXhl cyA9IGJtc191bmlvbihpbmRleGVzLCBvdGhlcl9pbmRleGVzKTsKKwl9CisKKwlyZXN1bHQtPmVu dHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJcmVzdWx0LT5pbmRleGVzID0gaW5kZXhlczsKK30K KworLyoKKyAqIFJldHVybiBhbGwgZW50cmllcyBpbiBhIHRyb3ZlIHNsaWNlIHRvIHRoZSBjYWxs ZXIuCisgKgorICogVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIGlucHV0IGFyZ3VtZW50cywg YW5kIHRoZSByZW1haW5kZXIgYXJlIG91dHB1dAorICogYXJndW1lbnRzLgorICovCit2b2lkCitw Z3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVfbG9va3Vw X3R5cGUgdHlwZSwKKwkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICoqZW50cmllcywgaW50ICpuZW50 cmllcykKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisKKwlpZiAodHlwZSA9PSBQR1BB X1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxzZSBpZiAo dHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUtPmpvaW47 CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCSplbnRyaWVzID0gdHNsaWNlLT5l bnRyaWVzOworCSpuZW50cmllcyA9IHRzbGljZS0+bnVzZWQ7Cit9CisKKy8qCisgKiBDb252ZXJ0 IGEgdHJvdmUgZW50cnkgdG8gYW4gaXRlbSBvZiBwbGFuIGFkdmljZSB0aGF0IHdvdWxkIHByb2R1 Y2UgaXQuCisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBncGFfdHJvdmVf ZW50cnkgKmVudHJ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZv KCZidWYpOworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIiwgcGdwYV9jc3RyaW5nX2Fkdmlj ZV90YWcoZW50cnktPnRhZykpOworCisJLyogSk9JTl9PUkRFUiB0YWdzIGFyZSB0cmFuc2Zvcm1l ZCBieSBwZ3BhX2J1aWxkX3Ryb3ZlOyB1bmRvIHRoYXQgaGVyZSAqLworCWlmIChlbnRyeS0+dGFn ICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICco Jyk7CisJZWxzZQorCQlBc3NlcnQoZW50cnktPnRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRf T1JERVJFRF9MSVNUKTsKKworCXBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoJmJ1ZiwgZW50cnkt PnRhcmdldCk7CisKKwlpZiAoZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMKQorCXsKKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyAnKTsKKwkJcGdwYV9mb3JtYXRfaW5kZXhfdGFy Z2V0KCZidWYsIGVudHJ5LT50YXJnZXQtPml0YXJnZXQpOworCX0KKworCWlmIChlbnRyeS0+dGFn ICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcp Jyk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCisgKiBTZXQgUEdQQV9URV8qIGZsYWdz IG9uIGEgc2V0IG9mIHRyb3ZlIGVudHJpZXMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfc2V0X2Zs YWdzKHBncGFfdHJvdmVfZW50cnkgKmVudHJpZXMsIEJpdG1hcHNldCAqaW5kZXhlcywgaW50IGZs YWdzKQoreworCWludAkJCWkgPSAtMTsKKworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihp bmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJmVudHJp ZXNbaV07CisKKwkJZW50cnktPmZsYWdzIHw9IGZsYWdzOworCX0KK30KKworLyoKKyAqIEFkZCBh IG5ldyBhZHZpY2UgdGFyZ2V0IHRvIGFuIGV4aXN0aW5nIHBncGFfdHJvdmVfc2xpY2Ugb2JqZWN0 LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UocGdwYV90cm92ZV9z bGljZSAqdHNsaWNlLAorCQkJCQkJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJcGdw YV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cnk7CisK KwlpZiAodHNsaWNlLT5udXNlZCA+PSB0c2xpY2UtPm5hbGxvY2F0ZWQpCisJeworCQlpbnQJCQlu ZXdfYWxsb2NhdGVkOworCisJCW5ld19hbGxvY2F0ZWQgPSB0c2xpY2UtPm5hbGxvY2F0ZWQgKiAy OworCQl0c2xpY2UtPmVudHJpZXMgPSByZXBhbGxvY19hcnJheSh0c2xpY2UtPmVudHJpZXMsIHBn cGFfdHJvdmVfZW50cnksCisJCQkJCQkJCQkJIG5ld19hbGxvY2F0ZWQpOworCQl0c2xpY2UtPm5h bGxvY2F0ZWQgPSBuZXdfYWxsb2NhdGVkOworCX0KKworCWVudHJ5ID0gJnRzbGljZS0+ZW50cmll c1t0c2xpY2UtPm51c2VkXTsKKwllbnRyeS0+dGFnID0gdGFnOworCWVudHJ5LT50YXJnZXQgPSB0 YXJnZXQ7CisJZW50cnktPmZsYWdzID0gMDsKKworCXBncGFfdHJvdmVfYWRkX3RvX2hhc2godHNs aWNlLT5oYXNoLCB0YXJnZXQsIHRzbGljZS0+bnVzZWQpOworCisJdHNsaWNlLT5udXNlZCsrOwor fQorCisvKgorICogVXBkYXRlIHRoZSBoYXNoIHRhYmxlIGZvciBhIG5ld2x5LWFkZGVkIGFkdmlj ZSB0YXJnZXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKHBncGFf dHJvdmVfZW50cnlfaGFzaCAqaGFzaCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJ CSAgIGludCBpbmRleCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdwYV90cm92 ZV9lbnRyeV9lbGVtZW50ICplbGVtZW50OworCWJvb2wJCWZvdW5kOworCisJLyogRm9yIG5vbi1p ZGVudGlmaWVycywgYWRkIGVudHJpZXMgZm9yIGFsbCBkZXNjZW5kZW50cy4gKi8KKwlpZiAodGFy Z2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFjaF9wdHIo cGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsK KwkJCXBncGFfdHJvdmVfYWRkX3RvX2hhc2goaGFzaCwgY2hpbGRfdGFyZ2V0LCBpbmRleCk7CisJ CX0KKwkJcmV0dXJuOworCX0KKworCS8qIFNhbml0eSBjaGVja3MuICovCisJQXNzZXJ0KHRhcmdl dC0+cmlkLm9jY3VycmVuY2UgPiAwKTsKKwlBc3NlcnQodGFyZ2V0LT5yaWQuYWxpYXNfbmFtZSAh PSBOVUxMKTsKKworCS8qIEFkZCBhbiBlbnRyeSBmb3IgdGhpcyByZWxhdGlvbiBpZGVudGlmaWVy LiAqLworCWtleS5hbGlhc19uYW1lID0gdGFyZ2V0LT5yaWQuYWxpYXNfbmFtZTsKKwlrZXkucGFy dGl0aW9uX25hbWUgPSB0YXJnZXQtPnJpZC5wYXJ0cmVsOworCWtleS5wbGFuX25hbWUgPSB0YXJn ZXQtPnJpZC5wbGFuX25hbWU7CisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50cnlfaW5zZXJ0KGhh c2gsIGtleSwgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCQllbGVtZW50LT5pbmRleGVzID0gTlVM TDsKKwllbGVtZW50LT5pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoZWxlbWVudC0+aW5kZXhlcywg aW5kZXgpOworfQorCisvKgorICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHBncGFfdHJv dmVfc2xpY2Ugb2JqZWN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9pbml0X3Ryb3ZlX3NsaWNl KHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSkKK3sKKwkvKgorCSAqIEluIGFuIGlkZWFsIHdvcmxk LCB3ZSdsbCBtYWtlIHRzbGljZS0+bmFsbG9jYXRlZCBiaWcgZW5vdWdoIHRoYXQgdGhlCisJICog YXJyYXkgYW5kIGhhc2ggdGFibGUgd2lsbCBiZSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUg bnVtYmVyIG9mCisJICogYWR2aWNlIGl0ZW1zIGluIHRoaXMgdHJvdmUgc2xpY2UsIGJ1dCBhIGdl bmVyb3VzIGRlZmF1bHQgdmFsdWUgaXMgbm90CisJICogZ29vZCBmb3IgcGVyZm9ybWFuY2UsIGJl Y2F1c2UgcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCkgaGFzIHRvIHplcm8gYW4KKwkgKiBhbW91bnQg b2YgbWVtb3J5IHByb3BvcnRpb25hbCB0byB0c2xpY2UtPm5hbGxvY2F0ZWQuIEhlbmNlLCB3ZSBr ZWVwIHRoZQorCSAqIHN0YXJ0aW5nIHZhbHVlIHF1aXRlIHNtYWxsLCBvbiB0aGUgdGhlb3J5IHRo YXQgYWR2aWNlIHN0cmluZ3Mgd2lsbAorCSAqIG9mdGVuIGJlIHJlbGF0aXZlbHkgc2hvcnQuCisJ ICovCisJdHNsaWNlLT5uYWxsb2NhdGVkID0gMTY7CisJdHNsaWNlLT5udXNlZCA9IDA7CisJdHNs aWNlLT5lbnRyaWVzID0gcGFsbG9jX2FycmF5KHBncGFfdHJvdmVfZW50cnksIHRzbGljZS0+bmFs bG9jYXRlZCk7CisJdHNsaWNlLT5oYXNoID0gcGdwYV90cm92ZV9lbnRyeV9jcmVhdGUoQ3VycmVu dE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICAgdHNsaWNlLT5uYWxsb2NhdGVkLCBOVUxMKTsK K30KKworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lzdGluZyBvZiBh bGlhc19uYW1lLCBwYXJ0aXRpb25fbmFtZSwKKyAqIGFuZCBwbGFuX25hbWUuCisgKi8KK3N0YXRp YyB1aW50MzIKK3BncGFfdHJvdmVfZW50cnlfaGFzaF9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkg a2V5KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOworCWludAkJCXNwX2xlbjsKKworCWZhc3RoYXNo X2luaXQoJmhzLCAwKTsKKworCS8qIGFsaWFzX25hbWUgbWF5IG5vdCBiZSBOVUxMICovCisJc3Bf bGVuID0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5hbGlhc19uYW1lKTsKKworCS8q IHBhcnRpdGlvbl9uYW1lIGFuZCBwbGFuX25hbWUsIGhvd2V2ZXIsIGNhbiBiZSBOVUxMICovCisJ aWYgKGtleS5wYXJ0aXRpb25fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4gKz0gZmFzdGhhc2hfYWNj dW1fY3N0cmluZygmaHMsIGtleS5wYXJ0aXRpb25fbmFtZSk7CisJaWYgKGtleS5wbGFuX25hbWUg IT0gTlVMTCkKKwkJc3BfbGVuICs9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxh bl9uYW1lKTsKKworCS8qCisJICogaGFzaGZuX3Vuc3RhYmxlLmggcmVjb21tZW5kcyB1c2luZyBz dHJpbmcgbGVuZ3RoIGFzIHR3ZWFrLiBJdCdzIG5vdAorCSAqIGNsZWFyIHRvIG1lIHdoYXQgdG8g ZG8gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHN0cmluZ3MsIHNvIGZvciBub3cgSSdtCisJICoganVz dCB1c2luZyB0aGUgdG90YWwgb2YgYWxsIG9mIHRoZSBsZW5ndGhzLgorCSAqLworCXJldHVybiBm YXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKworLyoKKyAqIExvb2sgZm9yIG1hdGNo aW5nIGVudHJpZXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGdwYV90cm92ZV9zbGljZV9s b29rdXAocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLCBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sK KwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50ICpl bGVtZW50OworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisKKwlBc3NlcnQocmlkLT5vY2N1 cnJlbmNlID49IDEpOworCisJa2V5LmFsaWFzX25hbWUgPSByaWQtPmFsaWFzX25hbWU7CisJa2V5 LnBhcnRpdGlvbl9uYW1lID0gcmlkLT5wYXJ0cmVsOworCWtleS5wbGFuX25hbWUgPSByaWQtPnBs YW5fbmFtZTsKKworCWVsZW1lbnQgPSBwZ3BhX3Ryb3ZlX2VudHJ5X2xvb2t1cCh0c2xpY2UtPmhh c2gsIGtleSk7CisKKwlpZiAoZWxlbWVudCAhPSBOVUxMKQorCXsKKwkJaW50CQkJaSA9IC0xOwor CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihlbGVtZW50LT5pbmRleGVzLCBpKSkgPj0g MCkKKwkJeworCQkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmdHNsaWNlLT5lbnRyaWVzW2ld OworCisJCQkvKgorCQkJICogV2Uga25vdyB0aGF0IHRoaXMgdGFyZ2V0IG9yIG9uZSBvZiBpdHMg ZGVzY2VuZGVudHMgbWF0Y2hlcyB0aGUKKwkJCSAqIGlkZW50aWZpZXIgb24gdGhlIHRocmVlIGtl eSBmaWVsZHMgYWJvdmUsIGJ1dCB3ZSBkb24ndCBrbm93CisJCQkgKiB3aGljaCBkZXNjZW5kZW50 IG9yIHdoZXRoZXIgdGhlIG9jY3VyZW5jZSBhbmQgc2NoZW1hIGFsc28KKwkJCSAqIG1hdGNoLgor CQkJICovCisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHJpZCwgZW50cnkt PnRhcmdldCkpCisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0LCBpKTsKKwkJfQor CX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfdHJvdmUuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NzljM2Y3NTc3OAotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCkBAIC0wLDAg KzEsMTEzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3Ryb3ZlLmgKKyAqCSAg QWxsIG9mIHRoZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGljdWxhciBxdWVyeSwgYXBwcm9wcmlh dGVseQorICogICAgb3JnYW5pemVkIGZvciBjb252ZW5pZW50IGFjY2Vzcy4KKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9UUk9WRV9ICisjZGVmaW5lIFBHUEFfVFJP VkVfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2luY2x1ZGUgIm5vZGVzL2JpdG1hcHNl dC5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlIHBncGFfdHJvdmU7CisKKy8qCisgKiBG bGFncyB0aGF0IGNhbiBiZSBzZXQgb24gYSBwZ3BhX3Ryb3ZlX2VudHJ5IHRvIGluZGljYXRlIHdo YXQgaGFwcGVuZWQgd2hlbgorICogdHJ5aW5nIHRvIHBsYW4gdXNpbmcgYWR2aWNlLgorICoKKyAq IFBHUEFfVEVfTUFUQ0hfUEFSVElBTCBtZWFucyB0aGF0IHdlIGZvdW5kIHNvbWUgcGFydCBvZiB0 aGUgcXVlcnkgdGhhdCBhdAorICogbGVhc3QgcGFydGlhbGx5IG1hdGNoZWQgdGhlIHRhcmdldDsg ZS5nLiBnaXZlbiBKT0lOX09SREVSKGEgYiksIHRoaXMgd291bGQKKyAqIGJlIHNldCBpZiB3ZSBl dmVyIHNhdyBhbnkgam9pbnJlbCBpbmNsdWRpbmcgZWl0aGVyICJhIiBvciAiYiIuCisgKgorICog UEdQQV9URV9NQVRDSF9GVUxMIG1lYW5zIHRoYXQgd2UgZm91bmQgYW4gZXhhY3QgbWF0Y2ggZm9y IHRoZSB0YXJnZXQ7IGUuZy4KKyAqIGdpdmVuIEpPSU5fT1JERVIoYSBiKSwgdGhpcyB3b3VsZCBi ZSBzZXQgaWYgd2Ugc2F3IGEgam9pbnJlbCBjb250YWluaW5nCisgKiBleGFjdGx5ICJhIiBhbmQg ImIiIGFuZCBub3RoaW5nIGVsc2UuCisgKgorICogUEdQQV9URV9JTkFQUExJQ0FCTEUgbWVhbnMg dGhhdCB0aGUgYWR2aWNlIGRvZXNuJ3QgcHJvcGVybHkgYXBwbHkgdG8gdGhlCisgKiB0YXJnZXQ7 IGUuZy4gSU5ERVhfU0NBTihmb28gYmFyX2lkeCkgd291bGQgYmUgc28gbWFya2VkIGlmIGJhcl9p ZHggZG9lcyBub3QKKyAqIGV4aXN0IG9uIGZvby4gVGhlIGZhY3QgdGhhdCB0aGlzIGJpdCBoYXMg YmVlbiBzZXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZQorICogYWR2aWNlIGhhZCBubyBlZmZlY3Qu CisgKgorICogUEdQQV9URV9DT05GTElDVElORyBtZWFucyB0aGF0IGEgY29uZmxpY3Qgd2FzIGRl dGVjdGVkIGJldHdlZW4gd2hhdCB0aGlzCisgKiBhZHZpY2Ugd2FudHMgYW5kIHdoYXQgc29tZSBv dGhlciBwbGFuIGFkdmljZSB3YW50czsgZS5nLiBKT0lOX09SREVSKGEgYikKKyAqIHdvdWxkIGNv bmZsaWN0IHdpdGggSEFTSF9KT0lOKGEpLCBiZWNhdXNlIHRoZSBmb3JtZXIgcmVxdWlyZXMgImEi IHRvIGJlIHRoZQorICogb3V0ZXIgdGFibGUgd2hpbGUgdGhlIGxhdHRlciByZXF1aXJlcyBpdCB0 byBiZSB0aGUgaW5uZXIgdGFibGUuCisgKgorICogUEdQQV9URV9GQUlMRUQgbWVhbnMgdGhhdCB0 aGUgcmVzdWx0aW5nIHBsYW4gZGlkIG5vdCBjb25mb3JtIHRvIHRoZSBhZHZpY2UuCisgKi8KKyNk ZWZpbmUgUEdQQV9URV9NQVRDSF9QQVJUSUFMCQkweDAwMDEKKyNkZWZpbmUgUEdQQV9URV9NQVRD SF9GVUxMCQkJMHgwMDAyCisjZGVmaW5lIFBHUEFfVEVfSU5BUFBMSUNBQkxFCQkweDAwMDQKKyNk ZWZpbmUgUEdQQV9URV9DT05GTElDVElORwkJCTB4MDAwOAorI2RlZmluZSBQR1BBX1RFX0ZBSUxF RAkJCQkweDAwMTAKKworLyoKKyAqIEVhY2ggZW50cnkgaW4gYSB0cm92ZSBvZiBhZHZpY2UgcmVw cmVzZW50cyB0aGUgYXBwbGljYXRpb24gb2YgYSB0YWcgdG8KKyAqIGEgc2luZ2xlIHRhcmdldC4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9lbnRyeQoreworCXBncGFfYWR2aWNlX3Rh Z190eXBlIHRhZzsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKwlpbnQJCQlmbGFnczsK K30gcGdwYV90cm92ZV9lbnRyeTsKKworLyoKKyAqIFdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBk b2VzIHRoZSBjYWxsZXIgd2FudCB0byBmaW5kIGluIGEgdHJvdmU/CisgKgorICogUEdQQV9UUk9W RV9MT09LVVBfU0NBTiBtZWFucyB3ZSdyZSBsb29raW5nIGZvciBzY2FuIGFkdmljZS4KKyAqCisg KiBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIGpvaW4tcmVs YXRlZCBhZHZpY2UuCisgKiBUaGlzIGluY2x1ZGVzIGpvaW4gb3JkZXIgYWR2aWNlLCBqb2luIG1l dGhvZCBhZHZpY2UsIGFuZCBzZW1pam9pbi11bmlxdWVuZXNzCisgKiBhZHZpY2UuCisgKgorICog UEdQQV9UUk9WRV9MT09LVVBfUkVMIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIGdlbmVyYWwgYWR2 aWNlIGFib3V0IHRoaXMKKyAqIGEgUmVsT3B0SW5mbyB0aGF0IG1heSBjb3JyZXNwb25kIHRvIGVp dGhlciBhIHNjYW4gb3IgYSBqb2luLiBUaGlzIGluY2x1ZGVzCisgKiBnYXRoZXItcmVsYXRlZCBh ZHZpY2UgYW5kIHBhcnRpdGlvbndpc2UgYWR2aWNlLiBOb3RlIHRoYXQgcGFydGl0aW9ud2lzZQor ICogYWR2aWNlIG1pZ2h0IHNlZW0gbGlrZSBqb2luIGFkdmljZSwgYnV0IHRoYXQncyBub3QgYSBo ZWxwZnVsIHdheSBvZiB2aWV3aW5nCisgKiB0aGUgbWF0dGVyIGJlY2F1c2UgKDEpIHBhcnRpdGlv bndpc2UgYWR2aWNlIGlzIGFsc28gcmVsZXZhbnQgYXQgdGhlIHNjYW4KKyAqIGxldmVsIGFuZCAo Mikgb3RoZXIgdHlwZXMgb2Ygam9pbiBhZHZpY2UgYWZmZWN0IG9ubHkgd2hhdCB0byBkbyBmcm9t CisgKiBqb2luX3BhdGhfc2V0dXBfaG9vaywgYnV0IHBhcnRpdGlvbndpc2UgYWR2aWNlIGFmZmVj dHMgd2hhdCB0byBkbyBpbgorICogam9pbnJlbF9zZXR1cF9ob29rLgorICovCit0eXBlZGVmIGVu dW0gcGdwYV90cm92ZV9sb29rdXBfdHlwZQoreworCVBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJ UEdQQV9UUk9WRV9MT09LVVBfUkVMLAorCVBHUEFfVFJPVkVfTE9PS1VQX1NDQU4KK30gcGdwYV90 cm92ZV9sb29rdXBfdHlwZTsKKworLyoKKyAqIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gc3RvcmUg dGhlIHJlc3VsdCBvZiBhIHRyb3ZlIGxvb2t1cC4gRm9yIGVhY2ggbWVtYmVyCisgKiBvZiAiaW5k ZXhlcyIsIHRoZSBlbnRyeSBhdCB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXQgd2l0aGluICJlbnRy aWVzIiBpcyBvbmUKKyAqIG9mIHRoZSByZXN1bHRzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3Bh X3Ryb3ZlX3Jlc3VsdAoreworCXBncGFfdHJvdmVfZW50cnkgKmVudHJpZXM7CisJQml0bWFwc2V0 ICAqaW5kZXhlczsKK30gcGdwYV90cm92ZV9yZXN1bHQ7CisKK2V4dGVybiBwZ3BhX3Ryb3ZlICpw Z3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmljZV9pdGVtcyk7CitleHRlcm4gdm9pZCBwZ3BhX3Ry b3ZlX2xvb2t1cChwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkgIHBncGFfdHJvdmVfbG9va3Vw X3R5cGUgdHlwZSwKKwkJCQkJCQkgIGludCBucmlkcywKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmll ciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVfcmVzdWx0ICpyZXN1bHQpOworZXh0ZXJuIHZv aWQgcGdwYV90cm92ZV9sb29rdXBfYWxsKHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCQkgIHBn cGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICoq ZW50cmllcywKKwkJCQkJCQkJICBpbnQgKm5lbnRyaWVzKTsKK2V4dGVybiBjaGFyICpwZ3BhX2Nz dHJpbmdfdHJvdmVfZW50cnkocGdwYV90cm92ZV9lbnRyeSAqZW50cnkpOworZXh0ZXJuIHZvaWQg cGdwYV90cm92ZV9zZXRfZmxhZ3MocGdwYV90cm92ZV9lbnRyeSAqZW50cmllcywKKwkJCQkJCQkJ IEJpdG1hcHNldCAqaW5kZXhlcywgaW50IGZsYWdzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfd2Fsa2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmMwYTg5MGU4M2RmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3dhbGtlci5jCkBAIC0wLDAgKzEsOTUzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX3dhbGtlci5jCisgKgkgIFBsYW4gdHJlZSBpdGVyYXRpb24KKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYworICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFf am9pbi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgi CisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0 cmVlLmgiCisKK3N0YXRpYyB2b2lkIHBncGFfd2Fsa19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJICBib29sIHdpdGhpbl9q b2luX3Byb2JsZW0sCisJCQkJCQkJCSAgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVy LAorCQkJCQkJCQkgIExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBib29s IGJlbmVhdGhfYW55X2dhdGhlcik7CitzdGF0aWMgQml0bWFwc2V0ICpwZ3BhX3Byb2Nlc3NfdW5y b2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJ IHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4pOworCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJl ICpwZ3BhX2FkZF9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJ CQkJCQkJCQlwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkJUGxhbiAqcGxhbik7CisKK3N0 YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIElu ZGV4IHJ0aSk7CitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVy eV9mZWF0dXJlcywgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIHZvaWQgcGdwYV9xZl9hZGRf cGxhbl9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxhbiAqcGxhbiwKKwkJCQkJ CQkJICBMaXN0ICpydGFibGUpOworCitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2luX29yZGVy X21hdGNoZXMocGdwYV91bnJvbGxlZF9qb2luICp1am9pbiwKKwkJCQkJCQkJCQkgICBJbmRleCBy dGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJCQkJCQkJ ICAgYm9vbCB0b3BsZXZlbCk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21h dGNoZXNfbWVtYmVyKHBncGFfam9pbl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCQkJCSAgSW5k ZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVu dGlmaWVycywKKwkJCQkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworc3Rh dGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlciwKKwkJCQkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJ CQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250 YWluc19mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJ CSBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpOworc3Rh dGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlciwKKwkJCQkJCQkJCSAgcGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJ CQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250 YWluc19ub19nYXRoZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJ CQkJICAgQml0bWFwc2V0ICpyZWxpZHMpOworCisvKgorICogVG9wLWxldmVsIGVudHJ5cG9pbnQg Zm9yIHRoZSBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBQb3B1bGF0ZXMgd2Fsa2VyIGJhc2VkIG9u IGEgdHJhdmVyc2FsIG9mIHRoZSBQbGFuIHRyZWVzIGluIHBzdG10LgorICoKKyAqIHNqX3VuaXF1 ZV9yZWxzIGlzIGEgbGlzdCBvZiBwZ3BhX3NqX3VuaXF1ZV9yZWwgb2JqZWN0cywgb25lIGZvciBl YWNoCisgKiByZWxhdGlvbiB3ZSBjb25zaWRlcmVkIG1ha2luZyB1bmlxdWUgYXMgcGFydCBvZiBz ZW1pam9pbiBwbGFubmluZy4KKyAqLwordm9pZAorcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5f d2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbm5lZFN0bXQgKnBzdG10LAorCQkJCSBMaXN0ICpz al91bmlxdWVfcmVscykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpzal91bmlxdWVf cnRpcyA9IE5VTEw7CisJTGlzdAkgICAqc2pfbm9udW5pcXVlX3FmcyA9IE5VTEw7CisKKwkvKiBJ bml0aWFsaXphdGlvbi4gKi8KKwltZW1zZXQod2Fsa2VyLCAwLCBzaXplb2YocGdwYV9wbGFuX3dh bGtlcl9jb250ZXh0KSk7CisJd2Fsa2VyLT5wc3RtdCA9IHBzdG10OworCisJLyogV2FsayB0aGUg bWFpbiBwbGFuIHRyZWUuICovCisJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcHN0bXQt PnBsYW5UcmVlLCAwLCBOVUxMLCBOSUwsIGZhbHNlKTsKKworCS8qIE1haW4gcGxhbiB0cmVlIHdh bGsgd29uJ3QgcmVhY2ggc3VicGxhbnMsIHNvIHdhbGsgdGhvc2UuICovCisJZm9yZWFjaChsYywg cHN0bXQtPnN1YnBsYW5zKQorCXsKKwkJUGxhbgkgICAqcGxhbiA9IGxmaXJzdChsYyk7CisKKwkJ aWYgKHBsYW4gIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4s IDAsIE5VTEwsIE5JTCwgZmFsc2UpOworCX0KKworCS8qIEFkanVzdCBSVElzIGZyb20gc2pfdW5p cXVlX3JlbHMgZm9yIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuICovCisJZm9yZWFjaF9wdHIo cGdwYV9zal91bmlxdWVfcmVsLCB1ciwgc2pfdW5pcXVlX3JlbHMpCisJeworCQlpbnQJCQlydGlu ZGV4ID0gLTE7CisJCWludAkJCXJ0b2Zmc2V0ID0gMDsKKwkJYm9vbAkJZHVtbXkgPSBmYWxzZTsK KwkJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKworCQkvKiBJZiB0aGlzIGlzIGEgc3VicGxh biwgZmluZCB0aGUgcmFuZ2UgdGFibGUgb2Zmc2V0LiAqLworCQlpZiAodXItPnBsYW5fbmFtZSAh PSBOVUxMKQorCQl7CisJCQlmb3JlYWNoX25vZGUoU3ViUGxhblJUSW5mbywgcnRpbmZvLCBwc3Rt dC0+c3VicnRpbmZvcykKKwkJCXsKKwkJCQlpZiAoc3RyY21wKHVyLT5wbGFuX25hbWUsIHJ0aW5m by0+cGxhbl9uYW1lKSA9PSAwKQorCQkJCXsKKwkJCQkJcnRvZmZzZXQgPSBydGluZm8tPnJ0b2Zm c2V0OworCQkJCQlkdW1teSA9IHJ0aW5mby0+ZHVtbXk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CX0KKworCQkJaWYgKHJ0b2Zmc2V0ID09IDApCisJCQkJZWxvZyhFUlJPUiwgIm5vIHJ0b2Zmc2V0 IGZvciBwbGFuICVzIiwgdXItPnBsYW5fbmFtZSk7CisJCX0KKworCQkvKiBJZiB0aGlzIGVudHJ5 IHBlcnRhaW5zIHRvIGEgZHVtbXkgc3VicXVlcnksIGlnbm9yZSBpdC4gKi8KKwkJaWYgKGR1bW15 KQorCQkJY29udGludWU7CisKKwkJLyogT2Zmc2V0IGVhY2ggZW50cnkgZnJvbSB0aGUgb3JpZ2lu YWwgc2V0LiAqLworCQl3aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIodXItPnJlbGlk cywgcnRpbmRleCkpID49IDApCisJCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHJ0 aW5kZXggKyBydG9mZnNldCk7CisKKwkJLyogU3RvcmUgdGhlIHJlc3VsdGluZyBzZXQuICovCisJ CXNqX3VuaXF1ZV9ydGlzID0gbGFwcGVuZChzal91bmlxdWVfcnRpcywgcmVsaWRzKTsKKwl9CisK KwkvKgorCSAqIFJlbW92ZSBhbnkgbm9uLXVuaXF1ZSBzZW1qb2luIHF1ZXJ5IGZlYXR1cmVzIGZv ciB3aGljaCBtYWtpbmcgdGhlIHJlbAorCSAqIHVuaXF1ZSB3YXNuJ3QgY29uc2lkZXJlZC4KKwkg Ki8KKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLAorCQkJCXdhbGtlci0+cXVl cnlfZmVhdHVyZXNbUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUVdKQorCXsKKwkJaWYgKGxpc3Rf bWVtYmVyKHNqX3VuaXF1ZV9ydGlzLCBxZi0+cmVsaWRzKSkKKwkJCXNqX25vbnVuaXF1ZV9xZnMg PSBsYXBwZW5kKHNqX25vbnVuaXF1ZV9xZnMsIHFmKTsKKwl9CisJd2Fsa2VyLT5xdWVyeV9mZWF0 dXJlc1tQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRV0gPSBzal9ub251bmlxdWVfcWZzOworCisJ LyoKKwkgKiBJZiB3ZSBmaW5kIGFueSBjYXNlcyB3aGVyZSBhbmFseXNpcyBvZiB0aGUgUGxhbiB0 cmVlIHNob3dzIHRoYXQgdGhlCisJICogc2VtaWpvaW4gd2FzIG1hZGUgdW5pcXVlIGJ1dCB0aGlz IHBvc3NpYmlsaXR5IHdhcyBuZXZlciBvYnNlcnZlZCB0byBiZQorCSAqIGNvbnNpZGVyZWQgZHVy aW5nIHBsYW5uaW5nLCB0aGVuIHdlIGhhdmUgYSBidWcgc29tZXdoZXJlLgorCSAqLworCWZvcmVh Y2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsCisJCQkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJl c1tQR1BBUUZfU0VNSUpPSU5fVU5JUVVFXSkKKwl7CisJCWlmICghbGlzdF9tZW1iZXIoc2pfdW5p cXVlX3J0aXMsIHFmLT5yZWxpZHMpKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJ CWluaXRTdHJpbmdJbmZvKCZidWYpOworCQkJb3V0Qml0bWFwc2V0KCZidWYsIHFmLT5yZWxpZHMp OworCQkJZWxvZyhFUlJPUiwKKwkJCQkgInVuaXF1ZSBzZW1pam9pbiBmb3VuZCBmb3IgcmVsaWRz ICVzIGJ1dCBub3Qgb2JzZXJ2ZWQgZHVyaW5nIHBsYW5uaW5nIiwKKwkJCQkgYnVmLmRhdGEpOwor CQl9CisJfQorfQorCisvKgorICogTWFpbiB3b3JraG9yc2UgZm9yIHRoZSBwbGFuIHRyZWUgd2Fs ay4KKyAqCisgKiBJZiB3aXRoaW5fam9pbl9wcm9ibGVtIGlzIHRydWUsIHdlIGVuY291bnRlcmVk IGEgam9pbiBhdCBzb21lIGhpZ2hlciBsZXZlbAorICogb2YgdGhlIHRyZWUgd2FsayBhbmQgaGF2 ZW4ndCB5ZXQgZGVzY2VuZGVkIG91dCBvZiB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJl ZSB0aGF0IGlzIHBhcnQgb2YgdGhhdCBzYW1lIGpvaW4gcHJvYmxlbS4gV2UncmUgbm8gbG9uZ2Vy IGluIHRoZSBzYW1lCisgKiBqb2luIHByb2JsZW0gaWYgKDEpIHdlIGNyb3NzIGludG8gYSBkaWZm ZXJlbnQgc3VicXVlcnkgb3IgKDIpIHdlIGRlc2NlbmQKKyAqIHRocm91Z2ggYW4gQXBwZW5kIG9y IE1lcmdlQXBwZW5kIG5vZGUsIGJlbG93IHdoaWNoIGFueSBmdXJ0aGVyIGpvaW5zIHdvdWxkCisg KiBiZSBwYXJ0aXRpb253aXNlIGpvaW5zIHBsYW5uZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBvdXRl ciBqb2luIHByb2JsZW0uCisgKgorICogSWYgam9pbl91bnJvbGxlciAhPSBOVUxMLCB0aGUgam9p biB1bnJvbGxlciBjb2RlIGV4cGVjdHMgdXMgdG8gZmluZCBhIGpvaW4KKyAqIHRoYXQgc2hvdWxk IGJlIHVucm9sbGVkIGludG8gdGhhdCBvYmplY3QuIFRoaXMgaW1wbGllcyB0aGF0IHdlJ3JlIHdp dGhpbiBhCisgKiBqb2luIHByb2JsZW0sIGJ1dCB0aGUgcmV2ZXJzZSBpcyBub3QgdHJ1ZTogd2hl biB3ZSd2ZSB0cmF2ZXJzZWQgYWxsIHRoZQorICogam9pbnMgYnV0IGFyZSBzdGlsbCBsb29raW5n IGZvciB0aGUgc2NhbiB0aGF0IGlzIHRoZSBsZWFmIG9mIHRoZSBqb2luIHRyZWUsCisgKiBqb2lu X3Vucm9sbGVyIHdpbGwgYmUgTlVMTCBidXQgd2l0aGluX2pvaW5fcHJvYmxlbSB3aWxsIGJlIHRy dWUuCisgKgorICogRWFjaCBlbGVtZW50IG9mIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBjb3JyZXNw b25kcyB0byBzb21lIGl0ZW0gb2YgYWR2aWNlCisgKiB0aGF0IG5lZWRzIHRvIGVudW1lcmF0ZSBh bGwgdGhlIHJlbGF0aW9ucyBpdCBhZmZlY3RzLiBXZSBhZGQgUlRJcyB3ZSBmaW5kCisgKiBkdXJp bmcgdHJlZSB0cmF2ZXJzYWwgdG8gZWFjaCBvZiB0aGVzZSBxdWVyeSBmZWF0dXJlcy4KKyAqCisg KiBJZiBiZW5lYXRoX2FueV9nYXRoZXIgPT0gdHJ1ZSwgc29tZSBoaWdoZXIgbGV2ZWwgb2YgdGhl IHRyZWUgdHJhdmVyc2FsIGZvdW5kCisgKiBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4K KyAqLworc3RhdGljIHZvaWQKK3BncGFfd2Fsa19yZWN1cnNpdmVseShwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJICBib29sIHdpdGhpbl9qb2luX3By b2JsZW0sCisJCQkJCSAgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCQkg IExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJICBib29sIGJlbmVhdGhfYW55X2dh dGhlcikKK3sKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKm91dGVyX2pvaW5fdW5yb2xsZXIgPSBOVUxM OworCXBncGFfam9pbl91bnJvbGxlciAqaW5uZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJYm9v bAkJam9pbl91bnJvbGxlcl90b3BsZXZlbCA9IGZhbHNlOworCUxpc3QJICAgKnB1c2hkb3duX3F1 ZXJ5X2ZlYXR1cmVzID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKmV4dHJhcGxh bnMgPSBOSUw7CisJTGlzdAkgICAqZWxpZGVkX25vZGVzID0gTklMOworCisJQXNzZXJ0KHdpdGhp bl9qb2luX3Byb2JsZW0gfHwgam9pbl91bnJvbGxlciA9PSBOVUxMKTsKKworCS8qCisJICogSWYg dGhpcyBpcyBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwgZGlyZWN0bHkgYWRkIGl0IHRv IHRoZSBsaXN0CisJICogb2YgY3VycmVudGx5LWFjdGl2ZSBxdWVyeSBmZWF0dXJlcy4KKwkgKgor CSAqIE90aGVyd2lzZSwgY2hlY2sgdGhlIGZ1dHVyZV9xdWVyeV9mZWF0dXJlcyBsaXN0IHRvIHNl ZSB3aGV0aGVyIHRoaXMgd2FzCisJICogcHJldmlvdXNseSBpZGVudGlmaWVkIGFzIGEgcGxhbiBu b2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJlYXRlZCBhcyBhCisJICogcXVlcnkgZmVhdHVyZS4KKwkg KgorCSAqIE5vdGUgdGhhdCB0aGUgY2FsbGVyIGFsc28gaGFzIGEgY29weSB0byBhY3RpdmVfcXVl cnlfZmVhdHVyZXMsIHNvIHdlCisJICogY2FuJ3QgZGVzdHJ1Y3RpdmVseSBtb2RpZnkgaXQgd2l0 aG91dCBtYWtpbmcgYSBjb3B5LgorCSAqLworCWlmIChJc0EocGxhbiwgR2F0aGVyKSkKKwl7CisJ CWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9CisJCQlsYXBwZW5kKGxpc3RfY29weShhY3RpdmVfcXVl cnlfZmVhdHVyZXMpLAorCQkJCQlwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX0dBVEhF UiwgcGxhbikpOworCQliZW5lYXRoX2FueV9nYXRoZXIgPSB0cnVlOworCX0KKwllbHNlIGlmIChJ c0EocGxhbiwgR2F0aGVyTWVyZ2UpKQorCXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJ CWxhcHBlbmQobGlzdF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBncGFfYWRk X2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZfR0FUSEVSX01FUkdFLCBwbGFuKSk7CisJCWJlbmVhdGhf YW55X2dhdGhlciA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfcXVl cnlfZmVhdHVyZSwgcWYsIHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzKQorCQl7CisJCQlp ZiAocWYtPnBsYW4gPT0gcGxhbikKKwkJCXsKKwkJCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBs aXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKTsKKwkJCQlhY3RpdmVfcXVlcnlfZmVhdHVy ZXMgPSBsYXBwZW5kKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgcWYpOworCQkJCXdhbGtlci0+ZnV0 dXJlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCQkJbGlzdF9kZWxldGVfcHRyKHdhbGtlci0+ZnV0dXJl X3F1ZXJ5X2ZlYXR1cmVzLCBwbGFuKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8q CisJICogRmluZCBhbGwgZWxpZGVkIG5vZGVzIGZvciB0aGlzIFBsYW4gbm9kZS4KKwkgKi8KKwlm b3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgd2Fsa2VyLT5wc3RtdC0+ZWxpZGVkTm9kZXMpCisJ eworCQlpZiAobi0+cGxhbl9ub2RlX2lkID09IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCWVsaWRl ZF9ub2RlcyA9IGxhcHBlbmQoZWxpZGVkX25vZGVzLCBuKTsKKwl9CisKKwkvKiBJZiB3ZSBmb3Vu ZCBhbnkgZWxpZGVkX25vZGVzLCBoYW5kbGUgdGhlbS4gKi8KKwlpZiAoZWxpZGVkX25vZGVzICE9 IE5JTCkKKwl7CisJCWludAkJCW51bV9lbGlkZWRfbm9kZXMgPSBsaXN0X2xlbmd0aChlbGlkZWRf bm9kZXMpOworCQlFbGlkZWROb2RlICpsYXN0X2VsaWRlZF9ub2RlOworCisJCS8qCisJCSAqIFJU SXMgZm9yIHRoZSBmaW5hbCAtLSBhbmQgdGh1cyBsb2dpY2FsbHkgdXBwZXJtb3N0IC0tIGVsaWRl ZCBub2RlCisJCSAqIHNob3VsZCBiZSBjb2xsZWN0ZWQgZm9yIHF1ZXJ5IGZlYXR1cmVzIHBhc3Nl ZCBkb3duIGJ5IHRoZSBjYWxsZXIuCisJCSAqIEhvd2V2ZXIsIGVsaWRlZCBub2RlcyBhY3QgYXMg YmFycmllcnMgdG8gcXVlcnkgZmVhdHVyZXMsIHdoaWNoCisJCSAqIG1lYW5zIHRoYXQgKDEpIHRo ZSByZW1haW5pbmcgZWxpZGVkIG5vZGVzLCBpZiBhbnksIHNob3VsZCBiZQorCQkgKiBpZ25vcmVk IGZvciBwdXJwb3NlcyBvZiBxdWVyeSBmZWF0dXJlcyBhbmQgKDIpIHRoZSBsaXN0IG9mIGFjdGl2 ZQorCQkgKiBxdWVyeSBmZWF0dXJlcyBzaG91bGQgYmUgcmVzZXQgdG8gZW1wdHkgc28gdGhhdCB3 ZSBkbyBub3QgYWRkIFJUSXMKKwkJICogZnJvbSB0aGUgcGxhbiBub2RlIHRoYXQgaXMgbG9naWNh bGx5IGJlbmVhdGggdGhlIGVsaWRlZCBub2RlIHRvIHRoZQorCQkgKiBxdWVyeSBmZWF0dXJlcyBw YXNzZWQgZG93biBmcm9tIHRoZSBjYWxsZXIuCisJCSAqLworCQlsYXN0X2VsaWRlZF9ub2RlID0g bGlzdF9udGgoZWxpZGVkX25vZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7CisJCXBncGFfcWZf YWRkX3J0aXMoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJIHBncGFfZmlsdGVyX291dF9q b2luX3JlbGlkcyhsYXN0X2VsaWRlZF9ub2RlLT5yZWxpZHMsCisJCQkJCQkJCQkJCQkJIHdhbGtl ci0+cHN0bXQtPnJ0YWJsZSkpOworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisKKwkJ LyoKKwkJICogSWYgd2UncmUgd2l0aGluIGEgam9pbiBwcm9ibGVtLCB0aGUgam9pbl91bnJvbGxl ciBpcyByZXNwb25zaWJsZQorCQkgKiBmb3IgYnVpbGRpbmcgdGhlIHNjYW4gZm9yIHRoZSBmaW5h bCBlbGlkZWQgbm9kZSwgc28gdGhyb3cgaXQgb3V0LgorCQkgKi8KKwkJaWYgKHdpdGhpbl9qb2lu X3Byb2JsZW0pCisJCQllbGlkZWRfbm9kZXMgPSBsaXN0X3RydW5jYXRlKGVsaWRlZF9ub2Rlcywg bnVtX2VsaWRlZF9ub2RlcyAtIDEpOworCisJCS8qIEJ1aWxkIHNjYW5zIGZvciBhbGwgKG9yIHRo ZSByZW1haW5pbmcpIGVsaWRlZCBub2Rlcy4gKi8KKwkJZm9yZWFjaF9ub2RlKEVsaWRlZE5vZGUs IGVsaWRlZF9ub2RlLCBlbGlkZWRfbm9kZXMpCisJCXsKKwkJCSh2b2lkKSBwZ3BhX2J1aWxkX3Nj YW4od2Fsa2VyLCBwbGFuLCBlbGlkZWRfbm9kZSwKKwkJCQkJCQkJICAgYmVuZWF0aF9hbnlfZ2F0 aGVyLCB3aXRoaW5fam9pbl9wcm9ibGVtKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZXJlIHdl cmUgYW55IGVsaWRlZCBub2RlcywgdGhlbiBldmVyeXRoaW5nIGJlbmVhdGggdGhvc2Ugbm9kZXMK KwkJICogaXMgbm90IHBhcnQgb2YgdGhlIHNhbWUgam9pbiBwcm9ibGVtLgorCQkgKgorCQkgKiBJ biBtb3JlIGRldGFpbCwgaWYgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHdhcyBlbGlkZWQsIHRo ZW4gYQorCQkgKiBwYXJ0aXRpb253aXNlIGpvaW4gd2FzIGNob3NlbiBhbmQgb25seSBhIHNpbmds ZSBjaGlsZCBzdXJ2aXZlZDsgaWYKKwkJICogYSBTdWJxdWVyeVNjYW4gd2FzIGVsaWRlZCwgdGhl IHN1YnF1ZXJ5IHdhcyBwbGFubmVkIHdpdGhvdXQKKwkJICogZmxhdHRlbmluZyBpdCBpbnRvIHRo ZSBwYXJlbnQuCisJCSAqLworCQl3aXRoaW5fam9pbl9wcm9ibGVtID0gZmFsc2U7CisJCWpvaW5f dW5yb2xsZXIgPSBOVUxMOworCX0KKworCS8qCisJICogSWYgd2UncmUgd2l0aGluIGEgam9pbiBw cm9ibGVtLCB0aGUgam9pbiB1bnJvbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKwkgKiBidWlsZGlu ZyBhbnkgcmVxdWlyZWQgc2NhbiBmb3IgdGhpcyBub2RlLiBJZiBub3QsIHdlIGRvIGl0IGhlcmUu CisJICovCisJaWYgKCF3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkodm9pZCkgcGdwYV9idWlsZF9z Y2FuKHdhbGtlciwgcGxhbiwgTlVMTCwgYmVuZWF0aF9hbnlfZ2F0aGVyLCBmYWxzZSk7CisKKwkv KgorCSAqIElmIHRoaXMgam9pbiBuZWVkcyB0byB1bnJvbGxlZCBidXQgdGhlcmUncyBubyBqb2lu IHVucm9sbGVyIGFscmVhZHkKKwkgKiBhdmFpbGFibGUsIGNyZWF0ZSBvbmUuCisJICovCisJaWYg KGpvaW5fdW5yb2xsZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pvaW4ocGxhbikpCisJeworCQlqb2lu X3Vucm9sbGVyID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcigpOworCQlqb2luX3Vucm9sbGVy X3RvcGxldmVsID0gdHJ1ZTsKKwkJd2l0aGluX2pvaW5fcHJvYmxlbSA9IHRydWU7CisJfQorCisJ LyoKKwkgKiBJZiB0aGlzIGpvaW4gaXMgdG8gYmUgdW5yb2xsZWQsIHBncGFfdW5yb2xsX2pvaW4o KSB3aWxsIHJldHVybiB0aGUgam9pbgorCSAqIHVucm9sbGVyIG9iamVjdCB0aGF0IHNob3VsZCBi ZSBwYXNzZWQgZG93biB3aGVuIHdlIHJlY3Vyc2UgaW50byB0aGUKKwkgKiBvdXRlciBhbmQgaW5u ZXIgc2lkZXMgb2YgdGhlIHBsYW4uCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXIgIT0gTlVMTCkK KwkJcGdwYV91bnJvbGxfam9pbih3YWxrZXIsIHBsYW4sIGJlbmVhdGhfYW55X2dhdGhlciwgam9p bl91bnJvbGxlciwKKwkJCQkJCSAmb3V0ZXJfam9pbl91bnJvbGxlciwgJmlubmVyX2pvaW5fdW5y b2xsZXIpOworCisJLyogQWRkIFJUSXMgZnJvbSB0aGUgcGxhbiBub2RlIHRvIGFsbCBhY3RpdmUg cXVlcnkgZmVhdHVyZXMuICovCisJcGdwYV9xZl9hZGRfcGxhbl9ydGlzKGFjdGl2ZV9xdWVyeV9m ZWF0dXJlcywgcGxhbiwgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKworCS8qCisJICogUmVjdXJz ZSBpbnRvIHRoZSBvdXRlciBhbmQgaW5uZXIgc3VidHJlZXMuCisJICoKKwkgKiBBcyBhbiBleGNl cHRpb24sIGlmIHRoaXMgaXMgYSBGb3JlaWduU2NhbiwgZG9uJ3QgcmVjdXJzZS4gcG9zdGdyZXNf ZmR3CisJICogc29tZXRpbWVzIHN0b3JlcyBhbiBFUFEgcmVjaGVjayBwbGFuIGluIHBsYW4tPmxl ZnRyZWUsIGJ1dCB0aGF0J3MgZ29pbmcKKwkgKiB0byBtZW50aW9uIHRoZSBzYW1lIHNldCBvZiBy ZWxhdGlvbnMgYXMgdGhlIEZvcmVpZ25TY2FuIGl0c2VsZiwgYW5kIHdlCisJICogaGF2ZSBubyB3 YXkgdG8gZW1pdCBhZHZpY2UgdGFyZ2V0aW5nIHRoZSBFUFEgY2FzZSB2cy4gdGhlIG5vbi1FUFEg Y2FzZS4KKwkgKiBNb3Jlb3ZlciwgaXQncyBub3QgZW50aXJlbHkgY2xlYXIgd2hhdCBvdGhlciBG RFdzIG1pZ2h0IGRvIHdpdGggdGhlCisJICogbGVmdCBhbmQgcmlnaHQgc3VidHJlZXMuIE1heWJl IHNvbWUgYmV0dGVyIGhhbmRsaW5nIGlzIG5lZWRlZCBoZXJlLCBidXQKKwkgKiBmb3Igbm93LCB3 ZSBqdXN0IHB1bnQuCisJICovCisJaWYgKCFJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCXsKKwkJ aWYgKHBsYW4tPmxlZnR0cmVlICE9IE5VTEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fs a2VyLCBwbGFuLT5sZWZ0dHJlZSwgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJCQkJICBvdXRl cl9qb2luX3Vucm9sbGVyLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYmVuZWF0 aF9hbnlfZ2F0aGVyKTsKKwkJaWYgKHBsYW4tPnJpZ2h0dHJlZSAhPSBOVUxMKQorCQkJcGdwYV93 YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcGxhbi0+cmlnaHR0cmVlLCB3aXRoaW5fam9pbl9wcm9i bGVtLAorCQkJCQkJCQkgIGlubmVyX2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0dXJl cywKKwkJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0KKworCS8qCisJICogSWYgd2Ug Y3JlYXRlZCBhIGpvaW4gdW5yb2xsZXIgdXAgYWJvdmUsIHRoZW4gaXQncyBhbHNvIG91ciBqb2lu IHRvIHVzZQorCSAqIGl0IHRvIGJ1aWxkIHRoZSBmaW5hbCBwZ3BhX3Vucm9sbGVkX2pvaW4sIGFu ZCB0byBkZXN0cm95IHRoZSBvYmplY3QuCisJICovCisJaWYgKGpvaW5fdW5yb2xsZXJfdG9wbGV2 ZWwpCisJeworCQlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luOworCisJCXVqb2luID0gcGdwYV9i dWlsZF91bnJvbGxlZF9qb2luKHdhbGtlciwgam9pbl91bnJvbGxlcik7CisJCXdhbGtlci0+dG9w bGV2ZWxfdW5yb2xsZWRfam9pbnMgPQorCQkJbGFwcGVuZCh3YWxrZXItPnRvcGxldmVsX3Vucm9s bGVkX2pvaW5zLCB1am9pbik7CisJCXBncGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKGpvaW5fdW5y b2xsZXIpOworCQkodm9pZCkgcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCB1am9p bik7CisJfQorCisJLyoKKwkgKiBTb21lIHBsYW4gdHlwZXMgY2FuIGhhdmUgYWRkaXRpb25hbCBj aGlsZHJlbi4gTm9kZXMgbGlrZSBBcHBlbmQgdGhhdAorCSAqIGNhbiBoYXZlIGFueSBudW1iZXIg b2YgY2hpbGRyZW4gc3RvcmUgdGhlbSBpbiBhIExpc3Q7IGEgU3VicXVlcnlTY2FuCisJICoganVz dCBoYXMgYSBmaWVsZCBmb3IgYSBzaW5nbGUgYWRkaXRpb25hbCBQbGFuLgorCSAqLworCXN3aXRj aCAobm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9BcHBlbmQ6CisJCQl7CisJCQkJQXBwZW5k CSAgICphcGxhbiA9IChBcHBlbmQgKikgcGxhbjsKKworCQkJCWV4dHJhcGxhbnMgPSBhcGxhbi0+ YXBwZW5kcGxhbnM7CisJCQkJaWYgKGJtc19pc19lbXB0eShhcGxhbi0+YXBwcmVsaWRzKSkKKwkJ CQkJcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBhY3RpdmVfcXVlcnlfZmVhdHVyZXM7CisJCQl9 CisJCQlicmVhazsKKwkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJeworCQkJCU1lcmdlQXBwZW5k ICptYXBsYW4gPSAoTWVyZ2VBcHBlbmQgKikgcGxhbjsKKworCQkJCWV4dHJhcGxhbnMgPSBtYXBs YW4tPm1lcmdlcGxhbnM7CisJCQkJaWYgKGJtc19pc19lbXB0eShtYXBsYW4tPmFwcHJlbGlkcykp CisJCQkJCXB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzID0gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzOwor CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRtYXBBbmQ6CisJCQlleHRyYXBsYW5zID0gKChC aXRtYXBBbmQgKikgcGxhbiktPmJpdG1hcHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9CaXRt YXBPcjoKKwkJCWV4dHJhcGxhbnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBwbGFuczsK KwkJCWJyZWFrOworCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCisJCQkvKgorCQkJICogV2UgZG9u J3QgcGFzcyBkb3duIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyBhY3Jvc3MgaGVyZSwgYmVjYXVzZQor CQkJICogdGhvc2UgYXJlIHNwZWNpZmljIHRvIGEgc3VicXVlcnkgbGV2ZWwuCisJCQkgKi8KKwkJ CXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsICgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5z dWJwbGFuLAorCQkJCQkJCQkgIDAsIE5VTEwsIE5JTCwgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwkJ CWJyZWFrOworCQljYXNlIFRfQ3VzdG9tU2NhbjoKKwkJCWV4dHJhcGxhbnMgPSAoKEN1c3RvbVNj YW4gKikgcGxhbiktPmN1c3RvbV9wbGFuczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJl YWs7CisJfQorCisJLyogSWYgd2UgZm91bmQgYSBsaXN0IG9mIGV4dHJhIGNoaWxkcmVuLCBpdGVy YXRlIG92ZXIgaXQuICovCisJZm9yZWFjaChsYywgZXh0cmFwbGFucykKKwl7CisJCVBsYW4JICAg KnN1YnBsYW4gPSBsZmlyc3QobGMpOworCisJCXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIs IHN1YnBsYW4sIDAsIE5VTEwsIHB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCSAgYmVu ZWF0aF9hbnlfZ2F0aGVyKTsKKwl9Cit9CisKKy8qCisgKiBQZXJmb3JtIGZpbmFsIHByb2Nlc3Np bmcgb2YgYSBuZXdseS1jb25zdHJ1Y3RlZCBwZ3BhX3Vucm9sbGVkX2pvaW4uIFRoaXMKKyAqIG9u bHkgbmVlZHMgdG8gYmUgY2FsbGVkIGZvciB0b3BsZXZlbCBwZ3BhX3Vucm9sbGVkX2pvaW4gb2Jq ZWN0cywgc2luY2UgaXQKKyAqIHJlY3Vyc2VzIHRvIHN1Yi1qb2lucyBhcyBuZWVkZWQuCisgKgor ICogT3VyIGdvYWwgaXMgdG8gYWRkIHRoZSBzZXQgb2YgaW5uZXIgcmVsaWRzIHRvIHRoZSByZWxl dmFudCBqb2luX3N0cmF0ZWdpZXMKKyAqIGxpc3QsIGFuZCB0byBkbyB0aGUgc2FtZSBmb3IgYW55 IHN1Yi1qb2lucy4gVG8gdGhhdCBlbmQsIHRoZSByZXR1cm4gdmFsdWUKKyAqIGlzIHRoZSBzZXQg b2YgcmVsaWRzIGZvdW5kIGJlbmVhdGggdGhlIHRoZSBqb2luLCBidXQgaXQgaXMgZXhwZWN0ZWQg dGhhdAorICogdGhlIHRvcGxldmVsIGNhbGxlciB3aWxsIGlnbm9yZSB0aGlzLgorICovCitzdGF0 aWMgQml0bWFwc2V0ICoKK3BncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICAgcGdwYV91bnJvbGxlZF9qb2luICp1am9pbikK K3sKKwlCaXRtYXBzZXQgICphbGxfcmVsaWRzID0gYm1zX2NvcHkodWpvaW4tPm91dGVyLnNjYW4t PnJlbGlkcyk7CisKKwkvKiBJZiB0aGlzIGZhaWxzLCB3ZSBkaWRuJ3QgdW5yb2xsIHByb3Blcmx5 LiAqLworCUFzc2VydCh1am9pbi0+b3V0ZXIudW5yb2xsZWRfam9pbiA9PSBOVUxMKTsKKworCWZv ciAoaW50IGsgPSAwOyBrIDwgdWpvaW4tPm5pbm5lcjsgKytrKQorCXsKKwkJcGdwYV9qb2luX21l bWJlciAqbWVtYmVyID0gJnVqb2luLT5pbm5lcltrXTsKKwkJQml0bWFwc2V0ICAqcmVsaWRzOwor CisJCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwkJCXJlbGlkcyA9IHBncGFf cHJvY2Vzc191bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJCW1lbWJlci0+dW5yb2xs ZWRfam9pbik7CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsK KwkJCXJlbGlkcyA9IG1lbWJlci0+c2Nhbi0+cmVsaWRzOworCQl9CisJCXdhbGtlci0+am9pbl9z dHJhdGVnaWVzW3Vqb2luLT5zdHJhdGVneVtrXV0gPQorCQkJbGFwcGVuZCh3YWxrZXItPmpvaW5f c3RyYXRlZ2llc1t1am9pbi0+c3RyYXRlZ3lba11dLCByZWxpZHMpOworCQlhbGxfcmVsaWRzID0g Ym1zX2FkZF9tZW1iZXJzKGFsbF9yZWxpZHMsIHJlbGlkcyk7CisJfQorCisJcmV0dXJuIGFsbF9y ZWxpZHM7Cit9CisKKy8qCisgKiBBcnJhbmdlIGZvciB0aGUgZ2l2ZW4gcGxhbiBub2RlIHRvIGJl IHRyZWF0ZWQgYXMgYSBxdWVyeSBmZWF0dXJlIHdoZW4gdGhlCisgKiB0cmVlIHdhbGsgcmVhY2hl cyBpdC4KKyAqCisgKiBNYWtlIHN1cmUgdG8gb25seSB1c2UgdGhpcyBmb3Igbm9kZXMgdGhhdCB0 aGUgdHJlZSB3YWxrIGNhbid0IGhhdmUgcmVhY2hlZAorICogeWV0IQorICovCit2b2lkCitwZ3Bh X2FkZF9mdXR1cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCXBncGFfcWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVy ZSAqcWYgPSBwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgdHlwZSwgcGxhbik7CisKKwl3YWxrZXIt PmZ1dHVyZV9xdWVyeV9mZWF0dXJlcyA9CisJCWxhcHBlbmQod2Fsa2VyLT5mdXR1cmVfcXVlcnlf ZmVhdHVyZXMsIHFmKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGFzdCBvZiBhbnkgZWxpZGVk IG5vZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBsYW4gbm9kZSBJRC4KKyAqCisgKiBUaGUgbGFz dCBlbGlkZWQgbm9kZSBpcyB0aGUgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuIHVwcGVybW9zdCBp biB0aGUgcGxhbgorICogdHJlZSBoYWQgaXQgbm90IGJlZW4gcmVtb3ZlZCBkdXJpbmcgc2V0cmVm cyBwcm9jZXNzaWcuCisgKi8KK0VsaWRlZE5vZGUgKgorcGdwYV9sYXN0X2VsaWRlZF9ub2RlKFBs YW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqcGxhbikKK3sKKwlFbGlkZWROb2RlICplbGlkZWRfbm9k ZSA9IE5VTEw7CisKKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgcHN0bXQtPmVsaWRlZE5v ZGVzKQorCXsKKwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJ CQllbGlkZWRfbm9kZSA9IG47CisJfQorCisJcmV0dXJuIGVsaWRlZF9ub2RlOworfQorCisvKgor ICogQ2VydGFpbiBwbGFuIG5vZGVzIGNhbiByZWZlciB0byBhIHNldCBvZiBSVElzLiBFeHRyYWN0 IGFuZCByZXR1cm4gdGhlIHNldC4KKyAqLworQml0bWFwc2V0ICoKK3BncGFfcmVsaWRzKFBsYW4g KnBsYW4pCit7CisJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQlyZXR1cm4gKChSZXN1bHQgKikg cGxhbiktPnJlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCQlyZXR1 cm4gKChGb3JlaWduU2NhbiAqKSBwbGFuKS0+ZnNfcmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFu LCBBcHBlbmQpKQorCQlyZXR1cm4gKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsKKwllbHNl IGlmIChJc0EocGxhbiwgTWVyZ2VBcHBlbmQpKQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBw bGFuKS0+YXBwcmVsaWRzOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFeHRyYWN0IHRo ZSBzY2FubmVkIFJUSSBmcm9tIGEgcGxhbiBub2RlLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGVy ZSBpc24ndCBvbmUuCisgKi8KK0luZGV4CitwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFuKQorewor CXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9TZXFTY2FuOgorCQljYXNlIFRf U2FtcGxlU2NhbjoKKwkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlkU2NhbjoK KwkJY2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJY2FzZSBU X0Z1bmN0aW9uU2NhbjoKKwkJY2FzZSBUX1RhYmxlRnVuY1NjYW46CisJCWNhc2UgVF9WYWx1ZXNT Y2FuOgorCQljYXNlIFRfQ3RlU2NhbjoKKwkJY2FzZSBUX05hbWVkVHVwbGVzdG9yZVNjYW46CisJ CWNhc2UgVF9Xb3JrVGFibGVTY2FuOgorCQljYXNlIFRfRm9yZWlnblNjYW46CisJCWNhc2UgVF9D dXN0b21TY2FuOgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoK KwkJCXJldHVybiAoKFNjYW4gKikgcGxhbiktPnNjYW5yZWxpZDsKKwkJZGVmYXVsdDoKKwkJCXJl dHVybiAwOworCX0KK30KKworLyoKKyAqIENvbnN0cnVjdCBhIG5ldyBCaXRtYXBzZXQgY29udGFp bmluZyBub24tUlRFX0pPSU4gbWVtYmVycyBvZiAncmVsaWRzJy4KKyAqLworQml0bWFwc2V0ICoK K3BncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRh YmxlKQoreworCWludAkJCXJ0aSA9IC0xOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisK Kwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJewor CQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0 ZS0+cnRla2luZCAhPSBSVEVfSk9JTikKKwkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3Vs dCwgcnRpKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ3JlYXRlIGEgcGdw YV9xdWVyeV9mZWF0dXJlIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsIHF1ZXJ5IGZlYXR1 cmVzCisgKiBmb3IgdGhpcyBwbGFuLgorICovCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICoK K3BncGFfYWRkX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ IHBncGFfcWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAq cWYgPSBwYWxsb2MwX29iamVjdChwZ3BhX3F1ZXJ5X2ZlYXR1cmUpOworCisJcWYtPnR5cGUgPSB0 eXBlOworCXFmLT5wbGFuID0gcGxhbjsKKworCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5 cGVdID0KKwkJbGFwcGVuZCh3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSwgcWYpOwor CisJcmV0dXJuIHFmOworfQorCisvKgorICogQWRkIGEgc2luZ2xlIFJUSSB0byBlYWNoIGFjdGl2 ZSBxdWVyeSBmZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRpKExpc3Qg KmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5kZXggcnRpKQoreworCWZvcmVhY2hfcHRyKHBncGFf cXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCXFmLT5yZWxp ZHMgPSBibXNfYWRkX21lbWJlcihxZi0+cmVsaWRzLCBydGkpOworCX0KK30KKworLyoKKyAqIEFk ZCBhIHNldCBvZiBSVElzIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0 bWFwc2V0ICpyZWxpZHMpCit7CisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwg YWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJcWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVy cyhxZi0+cmVsaWRzLCByZWxpZHMpOworCX0KK30KKworLyoKKyAqIEFkZCBSVElzIGRpcmVjdGx5 IGNvbnRhaW5lZCBpbiBhIHBsYW4gbm9kZSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLAor ICogYnV0IGZpbHRlciBvdXQgYW55IGpvaW4gUlRJcywgc2luY2UgYWR2aWNlIGRvZXNuJ3QgbWVu dGlvbiB0aG9zZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3BsYW5fcnRpcyhMaXN0 ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sIExpc3QgKnJ0YWJsZSkKK3sKKwlC aXRtYXBzZXQgICpyZWxpZHM7CisJSW5kZXgJCXJ0aTsKKworCWlmICgocmVsaWRzID0gcGdwYV9y ZWxpZHMocGxhbikpICE9IE5VTEwpCisJeworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9p bl9yZWxpZHMocmVsaWRzLCBydGFibGUpOworCQlwZ3BhX3FmX2FkZF9ydGlzKGFjdGl2ZV9xdWVy eV9mZWF0dXJlcywgcmVsaWRzKTsKKwl9CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlk KHBsYW4pKSAhPSAwKQorCQlwZ3BhX3FmX2FkZF9ydGkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBy dGkpOworfQorCisvKgorICogSWYgd2UgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlIHVzaW5nIHRoZSBw cm92aWRlZCB3YWxrZXIgb2JqZWN0IGFuZCBhcnJheQorICogb2YgaWRlbnRpZmllcnMsIHdvdWxk IHdlIGdlbmVyYXRlIHRoZSBzcGVjaWZpZWQgdGFnL3RhcmdldCBjb21iaW5hdGlvbj8KKyAqCisg KiBJZiB5ZXMsIHRoZSBwbGFuIGNvbmZvcm1zIHRvIHRoZSBhZHZpY2U7IGlmIG5vLCBpdCBkb2Vz IG5vdC4gTm90ZSB0aGF0CisgKiB3ZSBoYXZlIGtub3cgd2F5IG9mIGtub3dpbmcgd2hldGhlciB0 aGUgcGxhbm5lciB3YXMgZm9yY2VkIHRvIGVtaXQgYSBwbGFuCisgKiB0aGF0IGNvbmZvcm1lZCB0 byB0aGUgYWR2aWNlIG9yIGp1c3QgaGFwcGVuZWQgdG8gZG8gc28uCisgKi8KK2Jvb2wKK3BncGFf d2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJIHBncGFfYWR2aWNl X3RhZ190eXBlIHRhZywKKwkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlJ bmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7 CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKworCWlmICh0YWcgPT0gUEdQQV9UQUdfSk9J Tl9PUkRFUikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfdW5yb2xsZWRfam9pbiwgdWpvaW4sIHdh bGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMpCisJCXsKKwkJCWlmIChwZ3BhX3dhbGtlcl9q b2luX29yZGVyX21hdGNoZXModWpvaW4sIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0 X2lkZW50aWZpZXJzLCB0YXJnZXQsIHRydWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lE RU5USUZJRVIpCisJeworCQlJbmRleAkJcnRpOworCisJCXJ0aSA9IHBncGFfY29tcHV0ZV9ydGlf ZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJ CQkgICAmdGFyZ2V0LT5yaWQpOworCQlpZiAocnRpID09IDApCisJCQlyZXR1cm4gZmFsc2U7CisJ CXJlbGlkcyA9IGJtc19tYWtlX3NpbmdsZXRvbihydGkpOworCX0KKwllbHNlCisJeworCQlBc3Nl cnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCQlmb3JlYWNo X3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikK KwkJeworCQkJSW5kZXgJCXJ0aTsKKworCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5cGUgPT0g UEdQQV9UQVJHRVRfSURFTlRJRklFUik7CisJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21f aWRlbnRpZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMs CisJCQkJCQkJCQkJCQkgICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJaWYgKHJ0aSA9PSAwKQor CQkJCWVsb2coRVJST1IsICJjYW5ub3QgZGV0ZXJtaW5lIFJUSSBmb3IgYWR2aWNlIHRhcmdldCIp OworCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGkpOworCQl9CisJfQorCisJ c3dpdGNoICh0YWcpCisJeworCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkvKiBzaG91 bGQgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmUgKi8KKwkJCXBnX3VucmVhY2hhYmxlKCk7CisJCQli cmVhazsKKwkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuIHBncGFf d2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0JJVE1B UF9IRUFQLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pP SU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJ CQkJCSBQR1BBX1NDQU5fRk9SRUlHTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQ QV9UQUdfSU5ERVhfT05MWV9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3Nj YW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJ CSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQlyZXR1cm4gcGdwYV93 YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fSU5ERVgs CisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJ CQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQ R1BBX1NDQU5fUEFSVElUSU9OV0lTRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQ QV9UQUdfU0VRX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxr ZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fU0VRLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJ Y2FzZSBQR1BBX1RBR19USURfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19z Y2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9USUQsCisJCQkJCQkJCQkJCSByZWxp ZHMpOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250 YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVIsCisJCQkJCQkJ CQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiBw Z3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9H QVRIRVJfTUVSR0UsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlK T0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3 YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwkJCQkJCQkJ CQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJu IHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFG X1NFTUlKT0lOX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdf SEFTSF9KT0lOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAor CQkJCQkJCQkJCQkgSlNUUkFUX0hBU0hfSk9JTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNh c2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtl cl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lOX01B VEVSSUFMSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9K T0lOX1BMQUlOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAor CQkJCQkJCQkJCQkgSlNUUkFUX01FUkdFX0pPSU5fUExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMp OworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBn cGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RF RF9MT09QX01BVEVSSUFMSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RB R19ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pv aW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkUsCisJCQkJ CQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJ cmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNU UkFUX05FU1RFRF9MT09QX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BB X1RBR19OT19HQVRIRVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVy KHdhbGtlciwgcmVsaWRzKTsKKwl9CisKKwkvKiBzaG91bGQgbm90IGdldCBoZXJlICovCisJcmV0 dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIHRoZSBq b2luIG9yZGVyIHNwZWNpZmllZCBieSBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9v bAorcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAqdWpv aW4sCisJCQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkgICBwZ3BhX2lkZW50 aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFy Z2V0LAorCQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwpCit7CisJaW50CQkJbmNoaWxkcmVuID0gbGlz dF9sZW5ndGgodGFyZ2V0LT5jaGlsZHJlbik7CisKKwlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQ R1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCisJLyogQXQgdG9wbGV2ZWwsIHdlIGFsbG93IGEg cHJlZml4IG1hdGNoLiAqLworCWlmICh0b3BsZXZlbCkKKwl7CisJCWlmIChuY2hpbGRyZW4gPiB1 am9pbi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaWYg KG5jaGlsZHJlbiAhPSB1am9pbi0+bmlubmVyICsgMSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisK KwkvKiBPdXRlcm1vc3QgcmVsIG11c3QgbWF0Y2guICovCisJaWYgKCFwZ3BhX3dhbGtlcl9qb2lu X29yZGVyX21hdGNoZXNfbWVtYmVyKCZ1am9pbi0+b3V0ZXIsCisJCQkJCQkJCQkJCSAgIHJ0YWJs ZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICBs aW5pdGlhbCh0YXJnZXQtPmNoaWxkcmVuKSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEVhY2gg aW5uZXIgcmVsIG11c3QgbWF0Y2guICovCisJZm9yIChpbnQgbiA9IDA7IG4gPCBuY2hpbGRyZW4g LSAxOyArK24pCisJeworCQlwZ3BhX2FkdmljZV90YXJnZXQgKmNoaWxkX3RhcmdldCA9IGxpc3Rf bnRoKHRhcmdldC0+Y2hpbGRyZW4sIG4gKyAxKTsKKworCQlpZiAoIXBncGFfd2Fsa2VyX2pvaW5f b3JkZXJfbWF0Y2hlc19tZW1iZXIoJnVqb2luLT5pbm5lcltuXSwKKwkJCQkJCQkJCQkJCSAgIHJ0 YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJ CSAgIGNoaWxkX3RhcmdldCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7 Cit9CisKKy8qCisgKiBEb2VzIG9uZSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCBh biBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfam9pbl9vcmRl cl9tYXRjaGVzX21lbWJlcihwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkgIElu ZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRp ZmllcnMsCisJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCUJpdG1h cHNldCAgKnJlbGlkcyA9IE5VTEw7CisKKwlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5V TEwpCisJeworCQlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Qp CisJCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNo ZXMobWVtYmVyLT51bnJvbGxlZF9qb2luLAorCQkJCQkJCQkJCQkgIHJ0YWJsZV9sZW5ndGgsCisJ CQkJCQkJCQkJCSAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgdGFyZ2V0LAorCQkJCQkJ CQkJCQkgIGZhbHNlKTsKKwl9CisKKwlBc3NlcnQobWVtYmVyLT5zY2FuICE9IE5VTEwpOworCXN3 aXRjaCAodGFyZ2V0LT50dHlwZSkKKwl7CisJCWNhc2UgUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNU OgorCQkJLyogQ291bGQgb25seSBtYXRjaCBhbiB1bnJvbGxlZCBqb2luICovCisJCQlyZXR1cm4g ZmFsc2U7CisKKwkJY2FzZSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVDoKKwkJCXsKKwkJCQlm b3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGls ZHJlbikKKwkJCQl7CisJCQkJCUluZGV4CQlydGk7CisKKwkJCQkJcnRpID0gcGdwYV9jb21wdXRl X3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCQkJICAgcnRf aWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkJCSAgICZjaGlsZF90YXJnZXQtPnJpZCk7CisJCQkJ CWlmIChydGkgPT0gMCkKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJcmVsaWRzID0gYm1zX2Fk ZF9tZW1iZXIocmVsaWRzLCBydGkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQljYXNl IFBHUEFfVEFSR0VUX0lERU5USUZJRVI6CisJCQl7CisJCQkJSW5kZXgJCXJ0aTsKKworCQkJCXJ0 aSA9IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJ CQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkJICAgJnRhcmdldC0+cmlk KTsKKwkJCQlpZiAocnRpID09IDApCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQlyZWxpZHMgPSBi bXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlyZXR1cm4g Ym1zX2VxdWFsKG1lbWJlci0+c2Nhbi0+cmVsaWRzLCByZWxpZHMpOworfQorCisvKgorICogRG9l cyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gc2NhbiBzdHJhdGVneSBzaG91bGQgYmUg dXNlZCBmb3IgdGhlCisgKiBnaXZlbiByZWxpZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3Bh X3dhbGtlcl9jb250YWluc19zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAor CQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkgIEJpdG1hcHNldCAq cmVsaWRzKQoreworCUxpc3QJICAgKnNjYW5zID0gd2Fsa2VyLT5zY2Fuc1tzdHJhdGVneV07CisK Kwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5zKQorCXsKKwkJLyoKKwkJICogWFhY LiBJZiB0aGlzIGlzIGluZGV4LXJlbGF0ZWQgYWR2aWNlLCB3ZSBzaG91bGQgYWxzbyB2YWxpZGF0 ZSB0aGF0CisJCSAqIHRoZSBhZHZpY2UgdGFyZ2V0J3MgaW5kZXggdGFyZ2V0IG1hdGNoZXMgdGhl IFBsYW4gdHJlZS4KKwkJICovCisJCWlmIChibXNfZXF1YWwoc2Nhbi0+cmVsaWRzLCByZWxpZHMp KQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9l cyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gcXVlcnkgZmVhdHVyZSBhcHBsaWVzIHRv IHRoZSBnaXZlbgorICogcmVsaWQgc2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJf Y29udGFpbnNfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJ CQkgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxp c3QJICAgKnF1ZXJ5X2ZlYXR1cmVzID0gd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1t0eXBlXTsKKwor CWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsK KwkJaWYgKGJtc19lcXVhbChxZi0+cmVsaWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJ fQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyB0aGUgd2Fsa2VyIHNheSB0aGF0 IHRoZSBnaXZlbiBqb2luIHN0cmF0ZWd5IHNob3VsZCBiZSB1c2VkIGZvciB0aGUKKyAqIGdpdmVu IHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4o cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgIHBncGFfam9pbl9zdHJh dGVneSBzdHJhdGVneSwKKwkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkgICAq am9pbl9zdHJhdGVnaWVzID0gd2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbc3RyYXRlZ3ldOworCisJ Zm9yZWFjaF9wdHIoQml0bWFwc2V0LCBqc3JlbGlkcywgam9pbl9zdHJhdGVnaWVzKQorCXsKKwkJ aWYgKGJtc19lcXVhbChqc3JlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVybiB0cnVlOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtlciBzYXkgdGhhdCB0aGUg Z2l2ZW4gcmVsaWRzIHNob3VsZCBiZSBtYXJrZWQgYXMgTk9fR0FUSEVSPworICovCitzdGF0aWMg Ym9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsaWRzKQoreworCXJldHVybiBi bXNfaXNfc3Vic2V0KHJlbGlkcywgd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMpOworfQpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5iOTFhMzZjYTNkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV93YWxrZXIuaApAQCAtMCwwICsxLDE0MSBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogcGdwYV93YWxrZXIuaAorICoJICBQbGFuIHRyZWUgaXRlcmF0aW9uCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1dBTEtFUl9ICisjZGVmaW5lIFBH UEFfV0FMS0VSX0gKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9qb2lu LmgiCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisKKy8qCisgKiBXaGVuIGdlbmVyYXRpbmcgYWR2 aWNlLCB3ZSBzaG91bGQgZW1pdCBlaXRoZXIgU0VNSUpPSU5fVU5JUVVFIGFkdmljZSBvcgorICog U0VNSUpPSU5fTk9OX1VOSVFVRSBhZHZpY2UgZm9yIGVhY2ggc2VtaWpvaW4gZGVwZW5kaW5nIG9u IHdoZXRoZXIgd2UgY2hvc2UKKyAqIHRvIGltcGxlbWVudCBpdCBhcyBhIHNlbWlqb2luIG9yIHdo ZXRoZXIgd2UgaW5zdGVhZCBjaG9zZSB0byBtYWtlIHRoZQorICogbnVsbGFibGUgc2lkZSB1bmlx dWUgYW5kIHRoZW4gcGVyZm9ybSBhbiBpbm5lciBqb2luLiBXaGVuIHRoZSBtYWtlLXVuaXF1ZQor ICogc3RyYXRlZ3kgaXMgbm90IGNob3NlbiwgaXQncyBub3QgZWFzeSB0byB0ZWxsIGZyb20gdGhl IGZpbmFsIHBsYW4gdHJlZQorICogd2hldGhlciBpdCB3YXMgY29uc2lkZXJlZC4gVGhhdCdzIGF3 a3dhcmQsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBlbWl0CisgKiB1c2VsZXNzIFNFTUlKT0lO X05PTl9VTklRVUUgYWR2aWNlIHdoZW4gdGhlcmUgd2FzIG5vIGRlY2lzaW9uIHRvIGJlIG1hZGUu CisgKgorICogVG8gYXZvaWQgdGhhdCwgZHVyaW5nIHBsYW5uaW5nLCB3ZSBjcmVhdGUgYSBwZ3Bh X3NqX3VuaXF1ZV9yZWwgZm9yIGVhY2gKKyAqIHJlbGF0aW9uIHRoYXQgd2UgY29uc2lkZXJlZCBt YWtpbmcgdW5pcXVlIGZvciBwdXJwb3NlcyBvZiBzZW1pam9pbiBwbGFubmluZy4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV9zal91bmlxdWVfcmVsCit7CisJY2hhcgkgICAqcGxhbl9uYW1lOwor CUJpdG1hcHNldCAgKnJlbGlkczsKK30gcGdwYV9zal91bmlxdWVfcmVsOworCisvKgorICogV2Ug dXNlIHRoZSB0ZXJtICJxdWVyeSBmZWF0dXJlIiB0byByZWZlciB0byBwbGFuIG5vZGVzIHRoYXQg YXJlIGludGVyZXN0aW5nCisgKiBpbiB0aGUgZm9sbG93aW5nIHdheTogdG8gZ2VuZXJhdGUgYWR2 aWNlLCB3ZSdsbCBuZWVkIHRvIGtub3cgdGhlIHNldCBvZgorICogc2FtZS1zdWJxdWVyeSwgbm9u LWpvaW4gUlRJcyBvY2N1cmluZyBhdCBvciBiZWxvdyB0aGF0IHBsYW4gbm9kZSwgd2l0aG91dAor ICogYWRtaXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQgUlRJcy4KKyAqCisgKiBGb3IgZXhhbXBs ZSwgR2F0aGVyIG5vZGVzLCBkZXNpZ2luYXRlZCBieSBQR1BBUUZfR0FUSEVSLCBhbmQgR2F0aGVy IE1lcmdlCisgKiBub2RlcywgZGVzaWduYXRlZCBieSBQR1BBUUZfR0FUSEVSX01FUkdFLCBhcmUg cXVlcnkgZmVhdHVyZXMsIGJlY2F1c2Ugd2UnbGwKKyAqIHdhbnQgdG8gYWRtaXQgc29tZSBraW5k IG9mIGFkdmljZSB0aGF0IGRlc2NyaWJlcyB0aGUgcG9ydGlvbiBvZiB0aGUgcGxhbgorICogdHJl ZSB0aGF0IGFwcGVhcnMgYmVuZWF0aCB0aG9zZSBub2Rlcy4KKyAqCisgKiBFYWNoIHNlbWlqb2lu IGNhbiBiZSBpbXBsZW1lbnRlZCBlaXRoZXIgYnkgZGlyZWN0bHkgcGVyZm9ybWluZyBhIHNlbWlq b2luLAorICogb3IgYnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSBhbmQgdGhlbiBwZXJmb3JtaW5n IGEgbm9ybWFsIGpvaW4uIEVpdGhlciB3YXksCisgKiB3ZSB1c2UgYSBxdWVyeSBmZWF0dXJlIHRv IG5vdGljZSB3aGF0IGRlY2lzaW9uIHdhcyBtYWRlLCBzbyB0aGF0IHdlIGNhbgorICogZGVzY3Jp YmUgaXQgYnkgZW51bWVyYXRpbmcgdGhlIFJUSXMgb24gdGhhdCBzaWRlIG9mIHRoZSBqb2luLgor ICoKKyAqIFRvIGVsYWJvcmF0ZSBvbiB0aGUgIm5vIGFkbWl4dHVyZSBvZiBwYXJlbnQgYW5kIGNo aWxkIFJUSXMiIHJ1bGUsIGluIGFsbCBvZgorICogdGhlc2UgY2FzZXMsIGlmIHRoZSBlbnRpcmV0 eSBvZiBhbiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgYXBwZWFycyBiZW5lYXRoCisgKiB0aGUgcXVl cnkgZmVhdHVyZSwgd2Ugb25seSB3YW50IHRvIG5hbWUgdGhlIHBhcmVudCB0YWJsZS4gQnV0IGl0 J3MgYWxzbworICogcG9zc2libGUgdG8gaGF2ZSBjYXNlcyB3aGVyZSB3ZSBtdXN0IG5hbWUgY2hp bGQgdGFibGVzLiBUaGlzIGlzIHBhcnRpY3VsYXJseQorICogbGlrZWx5IHRvIGhhcHBlbiB3aGVu IHBhcnRpdGlvbndpc2Ugam9pbiBpcyBpbiB1c2UsIGJ1dCBjb3VsZCBoYXBwZW4gZm9yCisgKiBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIGV2ZW4gd2l0aG91dCB0aGF0LCBpZiBvbmUgb2YgdGhvc2Ug YXBwZWFycyBiZWxvdworICogYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIG5vZGUgZm9yIGEgc2lu Z2xlIHRhYmxlLgorICovCit0eXBlZGVmIGVudW0gcGdwYV9xZl90eXBlCit7CisJUEdQQVFGX0dB VEhFUiwKKwlQR1BBUUZfR0FUSEVSX01FUkdFLAorCVBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVF LAorCVBHUEFRRl9TRU1JSk9JTl9VTklRVUUKKwkvKiB1cGRhdGUgTlVNX1BHUEFfUUZfVFlQRVMg aWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICovCit9IHBncGFfcWZfdHlwZTsKKworI2RlZmluZSBO VU1fUEdQQV9RRl9UWVBFUyAoKGludCkgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSArIDEpCisKKy8q CisgKiBGb3IgZWFjaCBxdWVyeSBmZWF0dXJlLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBmZWF0dXJl IHR5cGUgYW5kIHRoZSBzZXQgb2YKKyAqIHJlbGlkcyB0aGF0IHdlIGZvdW5kIHVuZGVybmVhdGgg dGhlIHJlbGV2YW50IHBsYW4gbm9kZS4gU2VlIHRoZSBjb21tZW50cworICogb24gcGdwYV9xZl90 eXBlLCBhYm92ZSwgZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg cGdwYV9xdWVyeV9mZWF0dXJlCit7CisJcGdwYV9xZl90eXBlIHR5cGU7CisJUGxhbgkgICAqcGxh bjsKKwlCaXRtYXBzZXQgICpyZWxpZHM7Cit9IHBncGFfcXVlcnlfZmVhdHVyZTsKKworLyoKKyAq IENvbnRleHQgb2JqZWN0IGZvciBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBwc3RtdCBpcyB0aGUg UGxhbm5lZFN0bXQgd2UncmUgc3R1ZHlpbmcuCisgKgorICogc2NhbnMgaXMgYW4gYXJyYXkgb2Yg bGlzdHMgb2YgcGdwYV9zY2FuIG9iamVjdHMuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5CisgKiB0 aGUgc2NhbidzIHBncGFfc2Nhbl9zdHJhdGVneS4KKyAqCisgKiBub19nYXRoZXJfc2NhbnMgaXMg dGhlIHNldCBvZiBzY2FuIFJUSXMgdGhhdCBkbyBub3QgYXBwZWFyIGJlbmVhdGggYW55CisgKiBH YXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisgKgorICogdG9wbGV2ZWxfdW5yb2xsZWRfam9p bnMgaXMgYSBsaXN0IG9mIGFsbCBwZ3BhX3Vucm9sbGVkX2pvaW4gb2JqZWN0cyB0aGF0CisgKiBh cmUgbm90IGEgY2hpbGQgb2Ygc29tZSBvdGhlciBwZ3BhX3Vucm9sbGVkX2pvaW4uCisgKgorICog am9pbl9zdHJhdGVneSBpcyBhbiBhcnJheSBvZiBsaXN0cyBvZiBCaXRtYXBzZXQgb2JqZWN0cy4g RWFjaCBCaXRtYXBzZXQKKyAqIGlzIHRoZSBzZXQgb2YgcmVsaWRzIHRoYXQgYXBwZWFycyBvbiB0 aGUgaW5uZXIgc2lkZSBvZiBzb21lIGpvaW4gKGV4Y2x1ZGluZworICogUlRJcyBmcm9tIHBhcnRp dGlvbiBjaGlsZHJlbiBhbmQgc3VicXVlcmllcykuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5Cisg KiBwZ3BhX2pvaW5fc3RyYXRlZ3kuCisgKgorICogcXVlcnlfZmVhdHVyZXMgaXMgYW4gYXJyYXkg bGlzdHMgb2YgcGdwYV9xdWVyeV9mZWF0dXJlIG9iamVjdHMsIGluZGV4ZWQKKyAqIGJ5IHBncGFf cWZfdHlwZS4KKyAqCisgKiBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgaXMgb25seSB1c2VkIGR1cmlu ZyB0aGUgcGxhbiB0cmVlIHdhbGsgYW5kIHNob3VsZAorICogYmUgZW1wdHkgd2hlbiB0aGUgdHJl ZSB3YWxrIGNvbmNsdWRlcy4gSXQgaXMgYSBsaXN0IG9mIHBncGFfcXVlcnlfZmVhdHVyZQorICog b2JqZWN0cyBmb3IgUGxhbiBub2RlcyB0aGF0IHRoZSBwbGFuIHRyZWUgd2FsayBoYXMgbm90IHll dCBlbmNvdW50ZXJlZDsKKyAqIHdoZW4gZW5jb3VudGVyZWQsIHRoZXkgd2lsbCBiZSBtb3ZlZCB0 byB0aGUgbGlzdCBvZiBhY3RpdmUgcXVlcnkgZmVhdHVyZXMKKyAqIHRoYXQgaXMgcHJvcGFnYXRl ZCB2aWEgdGhlIGNhbGwgc3RhY2suCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxr ZXJfY29udGV4dAoreworCVBsYW5uZWRTdG10ICpwc3RtdDsKKwlMaXN0CSAgICpzY2Fuc1tOVU1f UEdQQV9TQ0FOX1NUUkFURUdZXTsKKwlCaXRtYXBzZXQgICpub19nYXRoZXJfc2NhbnM7CisJTGlz dAkgICAqdG9wbGV2ZWxfdW5yb2xsZWRfam9pbnM7CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVz W05VTV9QR1BBX0pPSU5fU1RSQVRFR1ldOworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzW05VTV9Q R1BBX1FGX1RZUEVTXTsKKwlMaXN0CSAgICpmdXR1cmVfcXVlcnlfZmVhdHVyZXM7Cit9IHBncGFf cGxhbl93YWxrZXJfY29udGV4dDsKKworZXh0ZXJuIHZvaWQgcGdwYV9wbGFuX3dhbGtlcihwZ3Bh X3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10 LAorCQkJCQkJCSBMaXN0ICpzal91bmlxdWVfcmVscyk7CisKK2V4dGVybiB2b2lkIHBncGFfYWRk X2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJ CQkJcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQlQbGFuICpwbGFuKTsKKworZXh0ZXJuIEVs aWRlZE5vZGUgKnBncGFfbGFzdF9lbGlkZWRfbm9kZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4g KnBsYW4pOworZXh0ZXJuIEJpdG1hcHNldCAqcGdwYV9yZWxpZHMoUGxhbiAqcGxhbik7CitleHRl cm4gSW5kZXggcGdwYV9zY2FucmVsaWQoUGxhbiAqcGxhbik7CitleHRlcm4gQml0bWFwc2V0ICpw Z3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJs ZSk7CisKK2V4dGVybiBib29sIHBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50 aWZpZXJzLAorCQkJCQkJCQkJIHBncGFfYWR2aWNlX3RhZ190eXBlIHRhZywKKwkJCQkJCQkJCSBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL2dhdGhlci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNi MDRlZDVjZjMwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv Z2F0aGVyLnNxbApAQCAtMCwwICsxLDc5IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBf Y29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdCA9IDA7CitTRVQgbWluX3BhcmFsbGVs X3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisK K0NSRUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJ V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZGltIChk aW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsK K1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsKKworQ1JFQVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlkIGlu dCBub3QgbnVsbCwKKwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGd0X2RpbSAo aWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0 X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkg ZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7CisKKy0tIEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBH YXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2ggam9pbi4KK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdh dGhlciBNZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04g Zi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgc2Vw YXJhdGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVsYXRpb24u CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdl KGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpP SU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZCBkL2QuZCkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9y Y2UgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9uIG9uZSByZWxhdGlvbiBidXQgbm8gcGFyYWxs ZWxpc20gb24gb3RoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyX21lcmdlKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ2dhdGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdnYXRoZXIoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnZ2F0aGVyKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIG5vIEdhdGhl ciBvciBHYXRoZXIgTWVyZ2UgdXNlIGF0IGFsbC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdub19nYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIEdh dGhlciBNZXJnZSB3aXRob3V0IHRoZSBPUkRFUiBCWSBjbGF1c2UsIGJ1dCBqdXN0IEdhdGhlciBp cyBPSy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJf bWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0 X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvam9pbl9vcmRlci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjU0OTAwOTE3MzQxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvam9pbl9vcmRlci5zcWwKQEAgLTAsMCArMSwxMjMgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2 aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRF IFRBQkxFIGpvX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBp bnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9f ZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwg ZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVN IEFOQUxZWkUgam9fZGltMTsKK0NSRUFURSBUQUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1h cnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2RpbTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBn LCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRl X3NlcmllcygxLDEwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0yOworCitDUkVBVEUgVEFC TEUgam9fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3Qg bnVsbCByZWZlcmVuY2VzIGpvX2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwg cmVmZXJlbmNlcyBqb19kaW0yIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworSU5TRVJUIElOVE8gam9fZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkr MSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2Zh Y3Q7CisKKy0tIFdlIGV4cGVjdCB0byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5j ZSB0aGUgY29uZGl0aW9uIG9uIGQyCistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9J TiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIg T04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0t IEZvcmNlIGEgZmV3IGRpZmZlcmVudCBqb2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVy eSBpbmVmZmljaWVudCwKKy0tIGJ1dCB0aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlh YmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3Jk ZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEu aWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZh bDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn am9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdqb2luX29yZGVyKGQxIGYgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9f ZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYu ZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOwor CistLSBGb3JjZSBhIGpvaW4gb3JkZXIgYnkgbWVudGlvbmluZyBqdXN0IGEgcHJlZml4IG9mIHRo ZSBqb2luIGxpc3QuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn am9pbl9vcmRlcihkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0g ZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJF IHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0x X2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAor CVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK0NPTU1JVDsKKworLS0gam9fZmFjdCBpcyBu b3QgcGFydGl0aW9uZWQsIGJ1dCBsZXQncyB0cnkgcHJldGVuZGluZyB0aGF0IGl0IGlzIGFuZAor LS0gdmVyaWZ5aW5nIHRoYXQgdGhlIGFkdmljZSBkb2VzIG5vdCBhcHBseS4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYvZDEgZDEgZDIpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3Qg ZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lO IGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFs MiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9k MSAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5p ZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFs MSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCistLSBUaGUgdW51c3VhbCBmb3JtdWxhdGlv biBvZiB0aGlzIHF1ZXJ5IGlzIGludGVuZGVkIHRvIHByZXZlbnQgdGhlIHF1ZXJ5CistLSBwbGFu bmVyIGZyb20gcmVkdWNpbmcgdGhlIEZVTEwgSk9JTiB0byBzb21lIG90aGVyIGpvaW4gdHlwZSwg c28gdGhhdCB3ZQorLS0gY2FuIHRlc3Qgd2hhdCBoYXBwZW5zIHdpdGggYSBqb2luIHR5cGUgdGhh dCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0g Zi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworCistLSBXZSBzaG91bGQgbm90IGJlIGFi bGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBiZWNhdXNlCist LSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0 byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0aGUgZHJpdmlu ZyB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2lu X29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpv X2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGlt MV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZV TEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEu aWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIgZiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpv X2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAw KQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworQ09NTUlUOwpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGViODIzZjFjMGUKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbApAQCAtMCww ICsxLDc2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBqb2luX2RpbSAoaWQgc2VyaWFsIHBy aW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb2luX2RpbTsKKworQ1JF QVRFIFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRpbV9pZCBpbnRl Z2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QKKwlTRUxFQ1QgZywgKGcl MykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NSRUFURSBJTkRFWCBqb2lu X2ZhY3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIGpvaW5f ZmFjdDsKKworLS0gV2UgZXhwZWN0IGEgaGFzaCBqb2luIGJ5IGRlZmF1bHQuCitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKworLS0gVHJ5IGZvcmNpbmcgZWFjaCBqb2lu IG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9kaW0gYXMgdGhlIGlubmVyIHRhYmxlLgorLS0gQWxs IG9mIHRoZXNlIHNob3VsZCB3b3JrIGV4Y2VwdCBmb3IgTUVSR0VfSk9JTl9NQVRFUklBTElaRTsg dGhhdCB3aWxsCistLSBmYWlsLCBiZWNhdXNlIHRoZSBwbGFubmVyIGtub3dzIHRoYXQgam9pbl9k aW0gKGlkKSBpcyB1bmlxdWUsIGFuZCB3aWxsCistLSByZWZ1c2UgdG8gYWRkIG1hcmsvcmVzdG9y ZSBvdmVyaGVhZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdI QVNIX0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFURVJJQUxJWkUo ZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpv aW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZCknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4g am9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9P UF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK0NP TU1JVDsKKworLS0gTm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRo IGpvaW5fZmFjdCBhcyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdv cmsuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lO KGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVE X0xPT1BfTUVNT0laRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4o ZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpv aW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitDT01NSVQ7CisK Ky0tIFdlIGNhbid0IGZvcmNlIGEgZm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFibGVzLCBi ZWNhdXNlIHRoZXkKKy0tIGFyZW4ndCBmb3JlaWduIHRhYmxlcy4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmZjODM4YjIyMDRkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCwwICsxLDQxIEBA CitDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1 ZXJ5ID0gb2ZmOworCistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0 ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0g U2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBleGNlZWQg aXQuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7CisKKy0t IFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBw cmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBw YXJhbGxlbF93b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00g ZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGU7 CisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVy eS4KK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpIE9S REVSIEJZIGlkIERFU0MgTElNSVQgMTsKKworLS0gTm93IHRyeSBjbGVhcmluZyBhZHZpY2UgYWdh aW4uCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworCistLSBSYWlz ZSB0aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3IgdXNlcyBtdWx0aXBs ZSBjaHVua3MuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDIw MDA7CisKKy0tIFB1c2ggYSBidW5jaCBvZiBxdWVyaWVzIHRocm91Z2ggdGhlIGNvbGxlY3Rvci4K K0RPICQkCitCRUdJTgorCUZPUiB4IElOIDEuLjIwMDAgTE9PUAorCQlFWEVDVVRFICdTRUxFQ1Qg KiBGUk9NIGR1bW15X3RhYmxlJzsKKwlFTkQgTE9PUDsKK0VORAorJCQ7CisKKy0tIENoZWNrIHRo YXQgdGhlIGNvbGxlY3RvciB3b3JrZWQuCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29s bGVjdGVkX2xvY2FsX2FkdmljZSgpOworCistLSBBbmQgY2xlYXIgb25lIG1vcmUgdGltZSwgdG8g dmVyaWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0gZXZlbiB3aXRoIGEg bGFyZ2VyIG51bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2Nh bF9hZHZpY2UoKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRp dGlvbndpc2Uuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRlYTM0NWIzYWFkCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lz ZS5zcWwKQEAgLTAsMCArMSw5MSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNl X2pvaW4gPSB0cnVlOworCitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5 LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRF IFRBQkxFIHB0MWEgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAx KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFi IFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJ T04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkK KwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQxOworCitDUkVB VEUgVEFCTEUgcHQyIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50 KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MmEgUEFSVElUSU9O IE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJiIFBBUlRJVElPTiBPRiBwdDIgRk9S IFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYyBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMg RlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gcHQyIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgb3Ro ZXIgdGV4dCAnIHx8IGcsIChnICUgNSkgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMw MDAsMikgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MjsKKworQ1JFQVRFIFRBQkxFIHB0MyAoaWQgaW50 ZWdlciBwcmltYXJ5IGtleSwgZGltMyB0ZXh0LCB2YWwzIGludCkKKwlQQVJUSVRJT04gQlkgUkFO R0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDNhIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBG Uk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitD UkVBVEUgVEFCTEUgcHQzYiBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkg dG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRB QkxFIHB0M2MgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAx KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MyAo aWQsIGRpbTMsIHZhbDMpCisJU0VMRUNUIGcsICdhIHRoaXJkIHJhbmRvbSB0ZXh0ICcgfHwgZywg KGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAwMCwzKSBnOworVkFDVVVN IEFOQUxZWkUgcHQzOworCitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmlt YXJ5IGtleSwgZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsK K0NSRUFURSBUQUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZP UiBWQUxVRVMgRlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNo CisgICAgRk9SIFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFs bSkKKwlTRUxFQ1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRj aDsKKworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQx LCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAg QU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisKKy0tIFN1cHByZXNzIHBh cnRpdGlvbndpc2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0Mykn OworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBw dDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5E IHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAo UExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVS RSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFO RCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIGEgcGFy dGl0aW9ud2lzZSBqb2luIHdpdGggYSBtaXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNo KSknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQx LCBwdG1pc21hdGNoIFdIRVJFIHB0MS5pZCA9IHB0bWlzbWF0Y2guaWQ7CitDT01NSVQ7CisKKy0t IEZvcmNlIGpvaW4gb3JkZXIgZm9yIGEgcGFydGljdWxhciBicmFuY2ggb2YgdGhlIHBhcnRpdGlv bndpc2Ugam9pbiB3aXRoCistLSBhbmQgd2l0aG91dCBtZW50aW9uaW5nIHRoZSBzY2hlbWEgbmFt ZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVS KHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5wdDFhKSc7CitFWFBM QUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQz IFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9 IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSk9JTl9PUkRFUihwdDMvcHQzYSBwdDIvcHQyYSBwdDEvcHQxYSknOworRVhQTEFJ TiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBX SEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAx IEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L3NjYW4uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNTQxNmE3 NWY0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4u c3FsCkBAIC0wLDAgKzEsMTk1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAuMTsK K1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsKK1NF VCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CisKK0NSRUFURSBUQUJMRSBzY2FuX3RhYmxlIChh IGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZh bHNlKTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUgdGV4dCAnIHx8 IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIHNjYW5f dGFibGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFOQUxZWkUgc2Nh bl90YWJsZTsKKworLS0gU2VxdWVudGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisKKy0tIEluZGV4IHNjYW4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisKKy0tIEJpdG1h cCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworCistLSBUSUQgc2Nhbgor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGN0aWQgPSAnKDAsMSknOworCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3Rp ZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworCistLSBUcnkgZm9yY2luZyBlYWNoIG9m IG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2FudGVkIHRv IHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4 JzsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJs ZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5E IGN0aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBUcnkgdG8gZm9yY2UgYSBmdWxsIHNjYW4g b2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxsCistLSBvZiB0aGVz ZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2NhbiBjb3VsZCBwb3Rl bnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQgdGhlIHBsYW5uZXIg ZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGllcyBkdWUgdG8gdGhl IGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGU7CitDT01NSVQ7CisKKy0tIFRyeSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2UuIFRoaXMgc2hv dWxkIG5vdyBzdWNjZWVkIGZvciB0aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1BUF9IRUFQX1ND QU4sIGJ1dCB0aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNhdXNlIHRoZQor LS0gcXVlcnkgZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5kZXguCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3Rh YmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn QklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PiAwOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBsb29rdXAgdG8g dXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0IHRvIHVzZSBh biBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBvciBhIFRJRCBz Y2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4 LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNlIHRoZSB1 c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVlbnRpYWwgc2Nh biBpbiBwbGFjZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4sCistLSBidXQgYSBwbGFpbiBpbmRleCBz Y2FuIG9uIGEgQlJJTiBpbmRleCBpcyBub3QgcG9zc2libGUuCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUg YiA+ICdzb21lIHRleHQgOCc7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK0NPTU1J VDsKKworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVy IHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIs MSknOworQ09NTUlUOworCistLSBUZXN0IG1vcmUgY29tcGxleCBzY2VuYXJpb3Mgd2l0aCBpbmRl eCBzY2Fucy4KK0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsgaWYgd2UgbWVudGlvbiB0aGUg c2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNj YW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0gQnV0 IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9w a2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBJdCdzIE9LIHRvIHJlcGVhdCB0aGUgc2FtZSBhZHZp Y2UuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKKy0tIEJ1dCBpdCBkb2Vzbid0IHdvcmsgaWYgdGhlIGluZGV4IHRhcmdldCBpcyBl dmVuIG5vdGlvbmFsbHkgZGlmZmVyZW50LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBUZXN0 IGFzc29ydGVkIGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZl ciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZl ciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJ TkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlU OworCistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIG11bHRpcGxlIGluc3RhbmNlcyBv ZiB0aGUgc2FtZSBhbGlhcy4KK0JFR0lOOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2Fu X3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9 IHMuYTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRl X3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAg IExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lO IHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBP TiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz KSBTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBz IE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitD T01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0aGluIGEg c3VicXVlcnkuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworQkVHSU47CistLSBTaG91 bGQgbm90IG1hdGNoLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxkIG1hdGNoIGZp cnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4Owor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKy0tIFNob3VsZCBtYXRj aCBzZWNvbmQgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUg YSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VU IDApOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Vt aWpvaW4uc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2VtaWpvaW4uc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45Y2QxMDUzYjliMgotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NlbWlqb2luLnNxbApAQCAtMCww ICsxLDEwMyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgc2pfd2lkZSAoCisJaWQgaW50ZWdl ciBwcmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIsCisJcGFkZGluZyB0ZXh0IHN0b3JhZ2UgcGxh aW4KKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2pf d2lkZQorCVNFTEVDVCBnLCBnJTEwKzEsIHJlcGVhdCgnICcsIDMwMCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBzal93aWRlICh2YWwxKTsKK1ZBQ1VV TSBBTkFMWVpFIHNqX3dpZGU7CisKK0NSRUFURSBUQUJMRSBzal9uYXJyb3cgKAorCWlkIGludGVn ZXIgcHJpbWFyeSBrZXksCisJdmFsMSBpbnRlZ2VyCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNqX25hcnJvdworCVNFTEVDVCBnLCBnJTEwKzEgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBzal9uYXJyb3cg KHZhbDEpOworVkFDVVVNIEFOQUxZWkUgc2pfbmFycm93OworCistLSBXZSBleHBlY3QgdGhpcyB0 byBtYWtlIHRoZSBWQUxVRVMgbGlzdCB1bmlxdWUgYW5kIHVzZSBpbmRleCBsb29rdXBzIHRvCist LSBmaW5kIHRoZSByb3dzIGluIHNqX3dpZGUsIHNvIGFzIHRvIGF2b2lkIGEgZnVsbCBzY2FuIG9m IHNqX3dpZGUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAo MywgMyksICg0LCA0KSwgKDUsIDUpKTsKKworLS0gSWYgd2UgYXNrIGZvciBhIHVuaXF1ZSBzZW1p am9pbiwgd2Ugc2hvdWxkIGdldCB0aGUgc2FtZSBwbGFuIGFzIHdpdGgKKy0tIG5vIGFkdmljZS4g SWYgd2UgYXNrIGZvciBhIG5vbi11bmlxdWUgc2VtaWpvaW4sIHdlIHNob3VsZCBzZWUgYSBTZW1p CistLSBKb2luIG9wZXJhdGlvbiBpbiB0aGUgcGxhbiB0cmVlLgorQkVHSU47CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal93aWRlCisJ V0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0 KSwgKDUsIDUpKTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5f bm9uX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVTICgx LCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKK0NPTU1JVDsKKworLS0gQmVj YXVzZSB0aGlzIHRhYmxlIGlzIG5hcnJvd2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSwgYSBzZXF1 ZW50aWFsIHNjYW4KKy0tIGlzIGxlc3MgZXhwZW5zaXZlLCBhbmQgd2UgY2hvb3NlIGEgc3RyYWln aHRmb3J3YXJkIFNlbWkgSm9pbiBwbGFuIGJ5CistLSBkZWZhdWx0LiAoTm90ZSB0aGF0IHRoaXMg aXMgYWxzbyB2ZXJ5IHNlbnNpdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBJTgorLS0gbGlzdCwg d2hpY2ggYWZmZWN0cyBob3cgbWFueSBpbmRleCBsb29rdXBzIHRoZSBhbHRlcm5hdGl2ZSBwbGFu IHdpbGwgbmVlZC4pCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwg MiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworCistLSBIZXJlLCB3ZSBleHBlY3QgYWR2aXNp bmcgYSB1bmlxdWUgc2VtaWpvaW4gdG8gc3dpdGggdG8gdGhlIHNhbWUgcGxhbiB0aGF0CistLSB3 ZSBnb3Qgd2l0aCBzal93aWRlLCBhbmQgYWR2aXNpbmcgYSBub24tdW5pcXVlIHNlbWlqb2luIHNo b3VsZCBub3QgY2hhbmdlCistLSB0aGUgcGxhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoIipWQUxVRVMqIiknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gc2pfbmFycm93CisJV0hFUkUg KGlkLCB2YWwxKSBJTiAoVkFMVUVTICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUs IDUpKTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3Vu aXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEp LCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworQ09NTUlUOworCistLSBJbiB0aGUg YWJvdmUgZXhhbXBsZSwgd2UgbWFkZSB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUgam9pbiB1bmlxdWUs IGJ1dCBoZXJlLAorLS0gd2Ugc2hvdWxkIG1ha2UgdGhlIGlubmVyIHNpZGUgdW5pcXVlLgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93 KTsKKworLS0gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgYSBwbGFuIHdpdGggb3Igd2l0aG91 dCB0aGUgbWFrZS11bmlxdWUgc3RyYXRlZ3ksCistLSB3aXRoIGVpdGhlciBzaWRlIGFzIHRoZSBk cml2aW5nIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVS RSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoc2pfbmFy cm93KSBqb2luX29yZGVyKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJF IGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpIGpvaW5fb3JkZXIo c2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZh bDEgZnJvbSBzal9uYXJyb3cpOworQ09NTUlUOworCistLSBIb3dldmVyLCBtZW50aW9uaW5nIHRo ZSB3cm9uZyBzaWRlIG9mIHRoZSBqb2luIHNob3VsZCByZXN1bHQgaW4gYW4gYWR2aWNlCistLSBm YWlsdXJlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlq b2luX3VuaXF1ZShnKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0 IHZhbDEgZnJvbSBzal9uYXJyb3cpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdzZW1pam9pbl9ub25fdW5pcXVlKGcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBn IGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvc3ludGF4LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uNTZhNWQ1NGUyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9zeW50YXguc3FsCkBAIC0wLDAgKzEsNjggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsK KworLS0gQW4gZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQuIEVtcHR5IHRhcmdldCBsaXN0cyBhcmUg YWxsb3dlZCBmb3IgbW9zdCBhZHZpY2UKKy0tIHRhZ3MsIGJ1dCBub3QgZm9yIEpPSU5fT1JERVIu ICJTdXBwbGllZCBQbGFuIEFkdmljZSIgc2hvdWxkIGJlIG9taXR0ZWQgaW4KKy0tIHRleHQgZm9y bWF0IHdoZW4gdGhlcmUgaXMgbm8gYWN0dWFsIGFkdmljZSwgYnV0IG5vdCBpbiBub24tdGV4dCBm b3JtYXQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyc7CitFWFBMQUlOIChDT1NUUyBP RkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigpJzsK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ05FU1RFRF9MT09QX1BMQUlOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBGT1JNQVQgSlNP TikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoKSc7 CisKKy0tIFRlc3QgYXNzb3J0ZWQgdmFyaWF0aW9ucyBpbiBjYXBpdGFsaXphdGlvbiwgd2hpdGVz cGFjZSwgYW5kIHdoaWNoIHBhcnRzIG9mCistLSB0aGUgcmVsYXRpb24gaWRlbnRpZmllciBhcmUg aW5jbHVkZWQuIFRoZXNlIHNob3VsZCBhbGwgd29yay4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VxX3NjYW4oeEB5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfc2Nhbih4IzIp JzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1NFUV9TQ0FOICh4L3kpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKCJ4IiMyLyJ5Ii4ieiJAInQiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCAxOworCistLSBTeW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFVRU5USUFMX1NDQU4oeCknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCc7CitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCInOworU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdTRVFfU0NBTigiIiknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTigiYSInOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigjJzsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnKCknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICcxMjMnOworCistLSBUYWdzIGxpa2UgU0VRX1NDQU4gYW5kIE5PX0dBVEhFUiBkb24ndCBh bGxvdyBzdWJsaXN0cyBhdCBhbGw7IG90aGVyIHRhZ3MsCistLSBleGNlcHQgZm9yIEpPSU5fT1JE RVIsIGFsbG93IGF0IG1vc3Qgb25lIGxldmVsIG9mIHN1Ymxpc3QuIEhlbmNlLCB0aGVzZQorLS0g ZXhhbXBsZXMgc2hvdWxkIGVycm9yIG91dC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oKHgpKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0dBVEhFUigoKHgp KSknOworCistLSBMZWdhbCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn LyoqLyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdIQVNIX0pPSU4oXykvKioqLyc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVD VCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiBjb21tZW50ICovIEhBU0hfSk9J TigvKngqL3kpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKHkvLyp4Ki96KSc7CitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworCistLSBVbnRlcm1pbmF0ZWQgY29tbWVudHMuCitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CisKKy0tIE5lc3RlZCBjb21tZW50cyBh cmUgbm90IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2FsIGFuZAorLS0g dGhlIHNlY29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyovJzsK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJy8qLyogc3R1ZmYgKi8qLyc7CisKKy0tIEZvcmVpZ24gam9pbiByZXF1aXJlcyBtdWx0aXBs ZSByZWxhdGlvbiBpZGVudGlmaWVycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9S RUlHTl9KT0lOKGEpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lO KChhKSknOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS90LzAwMV9yZWdyZXNz LnBsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41Zjc1ODRjM2EwMgotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbApAQCAtMCwwICsxLDE0 NyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKworIyBSdW4gdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyB1bmRlciBwZ19w bGFuX2FkdmljZSB0byBjaGVjayBmb3IgcHJvYmxlbXMuCit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgQ3dkICAgICAgICAgICAgcXcoYWJzX3BhdGgpOwor dXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwor CisjIEluaXRpYWxpemUgdGhlIHByaW1hcnkgbm9kZQorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0KCk7CisKKyMgU2V0IHVwIG91 ciBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisjCisjIFdlIHJ1biB3aXRoIHBnX3BsYW5fYWR2aWNl LnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0IHNldCB0byBlbnN1cmUgdGhhdCB0aGUKKyMgcGxhbiB0 cmVlIHdhbGtlciBjb2RlIHJ1bnMgYWdhaW5zdCBldmVyeSBxdWVyeSBpbiB0aGUgcmVncmVzc2lv biB0ZXN0cy4gSWYKKyMgd2UncmUgdW5hYmxlIHRvIHByb3Blcmx5IGFuYWx5emUgYW55IG9mIHRo b3NlIHBsYW4gdHJlZXMsIHRoaXMgdGVzdCBzaG91bGQgZmFpbC4KKyMKKyMgV2Ugc2V0IHBnX3Bs YW5fYWR2aWNlLmFkdmljZSB0byBhbiBhZHZpY2Ugc3RyaW5nIHRoYXQgd2lsbCBjYXVzZSB0aGUg YWR2aWNlCisjIHRyb3ZlIHRvIGJlIHBvcHVsYXRlZCB3aXRoIGEgZmV3IGVudHJpZXMgb2YgdmFy aW91cyBzb3J0cywgYnV0IHdoaWNoIHdlIGRvCisjIG5vdCBleHBlY3QgdG8gbWF0Y2ggYW55dGhp bmcgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBxdWVyaWVzLiBUaGlzIHdheSwgdGhlCisjIHBsYW5u ZXIgaG9va3Mgd2lsbCBiZSBjYWxsZWQsIGltcHJvdmluZyBjb2RlIGNvdmVyYWdlLCBidXQgbm8g cGxhbnMgc2hvdWxkCisjIGFjdHVhbGx5IGNoYW5nZS4KKyMKKyMgcGdfcGxhbl9hZHZpY2UuYWx3 YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlIGlzIG5lZWRlZCB0byBhdm9pZCBicmVh a2luZworIyByZWdyZXNzaW9uIHRlc3QgcXVlcmllcyB0aGF0IHVzZSBFWFBMQUlOLiBJbiB0aGUg cmVhbCB3b3JsZCwgaXQgc2VlbXMgbGlrZQorIyB1c2VycyB3aWxsIHdhbnQgRVhQTEFJTiBvdXRw dXQgdG8gc2hvdyBzdXBwbGllZCBhZHZpY2Ugc28gdGhhdCBpdCdzIGNsZWFyCisjIHdoZXRoZXIg bm9ybWFsIHBsYW5uZXIgYmVoYXZpb3IgaGFzIGJlZW4gYWx0ZXJlZCwgYnV0IGhlcmUgdGhhdCdz IHVuZGVzaXJhYmxlLgorJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCA8PEVP TSk7CitwZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdD0xMDAwMDAwCitzaGFy ZWRfcHJlbG9hZF9saWJyYXJpZXM9cGdfcGxhbl9hZHZpY2UKK3BnX3BsYW5fYWR2aWNlLmFkdmlj ZT0nU0VRX1NDQU4oZW50aXJlbHlfZmljdGl0aW91cykgSEFTSF9KT0lOKHRvdGFsX2ZhYnJpY2F0 aW9uKSBHQVRIRVIoY29tcGxldGVseV9pbWFnaW5hcnkpJworcGdfcGxhbl9hZHZpY2UuYWx3YXlz X2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitFT00KKyRub2RlLT5zdGFydDsKKworbXkg JHNyY2RpciA9IGFic19wYXRoKCIuLi8uLiIpOworCisjIC0tZGxwYXRoIGlzIG5lZWRlZCB0byBi ZSBhYmxlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jlc3Muc28KKyMgYW5kIGFueSBsaWJy YXJpZXMgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4KK215ICRkbHBhdGggPSBkaXJuYW1l KCRFTlZ7UkVHUkVTU19TSExJQn0pOworCisjIC0tb3V0cHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0 aCB3aGVyZSB0byBwbGFjZSB0aGUgb3V0cHV0IGZpbGVzLgorbXkgJG91dHB1dGRpciA9ICRQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1wX2NoZWNrOworCisjIC0taW5wdXRkaXIgcG9pbnRzIHRv IHRoZSBwYXRoIG9mIHRoZSBpbnB1dCBmaWxlcy4KK215ICRpbnB1dGRpciA9ICIkc3JjZGlyL3Ny Yy90ZXN0L3JlZ3Jlc3MiOworCisjIFJ1biB0aGUgdGVzdHMuCitteSAkcmMgPQorICBzeXN0ZW0o JEVOVntQR19SRUdSRVNTfSAuICIgIgorCSAgLiAiLS1iaW5kaXI9ICIKKwkgIC4gIi0tZGxwYXRo PVwiJGRscGF0aFwiICIKKwkgIC4gIi0taG9zdD0iIC4gJG5vZGUtPmhvc3QgLiAiICIKKwkgIC4g Ii0tcG9ydD0iIC4gJG5vZGUtPnBvcnQgLiAiICIKKwkgIC4gIi0tc2NoZWR1bGU9JHNyY2Rpci9z cmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIKKwkgIC4gIi0tbWF4LWNvbmN1cnJl bnQtdGVzdHM9MjAgIgorCSAgLiAiLS1pbnB1dGRpcj1cIiRpbnB1dGRpclwiICIKKwkgIC4gIi0t b3V0cHV0ZGlyPVwiJG91dHB1dGRpclwiIik7CisKKyMgRHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24g ZGlmZnMgZmlsZSwgaWYgdGhlcmUgaXMgb25lCitpZiAoJHJjICE9IDApCit7CisJbXkgJGRpZmZz ID0gIiRvdXRwdXRkaXIvcmVncmVzc2lvbi5kaWZmcyI7CisJaWYgKC1lICRkaWZmcykKKwl7CisJ CXByaW50ICI9PT0gZHVtcGluZyAkZGlmZnMgPT09XG4iOworCQlwcmludCBzbHVycF9maWxlKCRk aWZmcyk7CisJCXByaW50ICI9PT0gRU9GID09PVxuIjsKKwl9Cit9CisKKyMgUmVwb3J0IHJlc3Vs dHMKK2lzKCRyYywgMCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFzcycpOworCisjIENyZWF0ZSB0aGUg ZXh0ZW5zaW9uIHNvIHdlIGNhbiBhY2Nlc3MgdGhlIGNvbGxlY3RvcgorJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBwZ19wbGFuX2FkdmljZScpOworCisjIFZl cmlmeSB0aGF0IGEgbGFyZ2UgYW1vdW50IG9mIGFkdmljZSB3YXMgY29sbGVjdGVkCitteSAkYWxs X3F1ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRUxF Q1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTsKK0VPTQor Y21wX29rKCRhbGxfcXVlcnlfY291bnQsICc+JywgMjAwMDAsICJjb3Bpb3VzIGFkdmljZSBjb2xs ZWN0ZWQiKTsKKworIyBWZXJpZnkgdGhhdCBsb3RzIG9mIGRpZmZlcmVudCBhZHZpY2Ugc3RyaW5n cyB3ZXJlIGNvbGxlY3RlZAorbXkgJGRpc3RpbmN0X3F1ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTQorCShTRUxFQ1Qg RElTVElOQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkpOwor RU9NCitjbXBfb2soJGRpc3RpbmN0X3F1ZXJ5X2NvdW50LCAnPicsIDMwMDAsICJkaXZlcnNlIGFk dmljZSBjb2xsZWN0ZWQiKTsKKworIyBXZSB3YW50IHRvIHRlc3QgZm9yIHRoZSBwcmVzZW5jZSBv ZiBvdXIga25vd24gdGFncyBpbiB0aGUgY29sbGVjdGVkIGFkdmljZS4KKyMgUHV0IGFsbCB0YWdz IGludG8gdGhlIGhhc2ggdGhhdCBmb2xsb3dzOyBtYXAgYW55IHRhZ3MgdGhhdCBhcmVuJ3QgdGVz dGVkCisjIGJ5IHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMgdG8gMCwgYW5kIG90aGVycyB0byAx LgorbXkgJXRhZ19tYXAgPSAoCisJQklUTUFQX0hFQVBfU0NBTiA9PiAxLAorCUZPUkVJR05fSk9J TiA9PiAwLAorCUdBVEhFUiA9PiAxLAorCUdBVEhFUl9NRVJHRSA9PiAxLAorCUhBU0hfSk9JTiA9 PiAxLAorCUlOREVYX09OTFlfU0NBTiA9PiAxLAorCUlOREVYX1NDQU4gPT4gMSwKKwlKT0lOX09S REVSID0+IDEsCisJTUVSR0VfSk9JTl9NQVRFUklBTElaRSA9PiAxLAorCU1FUkdFX0pPSU5fUExB SU4gPT4gMSwKKwlORVNURURfTE9PUF9NQVRFUklBTElaRSA9PiAxLAorCU5FU1RFRF9MT09QX01F TU9JWkUgPT4gMSwKKwlORVNURURfTE9PUF9QTEFJTiA9PiAxLAorCU5PX0dBVEhFUiA9PiAxLAor CVBBUlRJVElPTldJU0UgPT4gMSwKKwlTRU1JSk9JTl9OT05fVU5JUVVFID0+IDEsCisJU0VNSUpP SU5fVU5JUVVFID0+IDEsCisJU0VRX1NDQU4gPT4gMSwKKwlUSURfU0NBTiA9PiAxLAorKTsKK2Zv ciBteSAkdGFnIChzb3J0IGtleXMgJXRhZ19tYXApCit7CisJbXkgJGNoZWNraXQgPSAkdGFnX21h cHskdGFnfTsKKworCSMgU2VhcmNoIGZvciB0aGUgZ2l2ZW4gdGFnLiBUaGlzIGlzIG5vdCBlbnRp cmVseSByb2J1c3Q6IGl0IGNvdWxkIGdldCB0aHJvd24KKwkjIG9mZiBieSBhIHRhYmxlIGFsaWFz IHN1Y2ggYXMgIkZPUkVJR05fSk9JTigiLCBidXQgdGhhdCBwcm9iYWJseSB3b24ndAorCSMgaGFw cGVuIGluIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMuCisJbXkgJHRhZ19jb3VudCA9ICRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VMRUNUIENPVU5UKCopIEZST00gcGdf Z2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKKwlXSEVSRSBhZHZpY2UgTElLRSAnJSR0YWco JScKK0VPTQorCisJIyBDaGVjayB0aGF0IHRoZSB0YWcgZ290IGEgbm9uLXRyaXZpYWwgYW1vdW50 IG9mIHVzZSwgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgorCWNtcF9vaygkdGFnX2NvdW50LCAnPics IDEwLCAibXVsdGlwbGUgdXNlcyBvZiAkdGFnIikgaWYgJGNoZWNraXQ7CisKKwkjIFJlZ2FyZGxl c3MsIG5vdGUgdGhlIGV4YWN0IGNvdW50IGluIHRoZSBsb2csIGZvciBodW1hbiBjb25zdW1wdGlv bi4KKwlub3RlKCJmb3VuZCAkdGFnX2NvdW50IGFkdmljZSBzdHJpbmdzIGNvbnRhaW5pbmcgJHRh ZyIpOworfQorCisjIFRyaWdnZXIgYSBwYXJ0aWFsIGNsZWFudXAgb2YgdGhlIHNoYXJlZCBhZHZp Y2UgY29sbGVjdG9yLCBhbmQgdGhlbiBhIGZ1bGwKKyMgY2xlYW51cC4KKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VUIHBnX3BsYW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0 aW9uX2xpbWl0PTUwMDsKK1NFTEVDVCAqIEZST00gcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9h ZHZpY2UoKTsKK0VPTQorCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK aW5kZXggNjAyZTAxNzY1MjkuLjk1MzlhNjY3MmUzIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dApAQCAtMzk3NSw2ICszOTc1LDQ0IEBAIHBnX3V1aWRfdAogcGdfd2NoYXIKIHBnX3djaGFyX3Ri bAogcGdwX2FybW9yX2hlYWRlcnNfc3RhdGUKK3BncGFfY29sbGVjdGVkX2FkdmljZQorcGdwYV9h ZHZpY2VfaXRlbQorcGdwYV9hZHZpY2VfdGFnX3R5cGUKK3BncGFfYWR2aWNlX3RhcmdldAorcGdw YV9pZGVudGlmaWVyCitwZ3BhX2luZGV4X3RhcmdldAorcGdwYV9pbmRleF90eXBlCitwZ3BhX2l0 bV90eXBlCitwZ3BhX2pvaW5fY2xhc3MKK3BncGFfam9pbl9tZW1iZXIKK3BncGFfam9pbl9zdGF0 ZQorcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2pvaW5fdW5yb2xsZXIKK3BncGFfbG9jYWxfYWR2 aWNlCitwZ3BhX2xvY2FsX2FkdmljZV9jaHVuaworcGdwYV9vdXRwdXRfY29udGV4dAorcGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0CitwZ3BhX3BsYW5uZXJfc3RhdGUKK3BncGFfcWZfdHlwZQorcGdw YV9xdWVyeV9mZWF0dXJlCitwZ3BhX3JpX2NoZWNrZXIKK3BncGFfcmlfY2hlY2tlcl9rZXkKK3Bn cGFfc2NhbgorcGdwYV9zY2FuX3N0cmF0ZWd5CitwZ3BhX3NoYXJlZF9hZHZpY2UKK3BncGFfc2hh cmVkX2FkdmljZV9jaHVuaworcGdwYV9zaGFyZWRfc3RhdGUKK3BncGFfc2pfdW5pcXVlX3JlbAor cGdwYV90YXJnZXRfdHlwZQorcGdwYV90cm92ZQorcGdwYV90cm92ZV9lbnRyeQorcGdwYV90cm92 ZV9lbnRyeV9lbGVtZW50CitwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2gKK3BncGFfdHJvdmVfZW50cnlf a2V5CitwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCitwZ3BhX3Ryb3ZlX3Jlc3VsdAorcGdwYV90cm92 ZV9zbGljZQorcGdwYV91bnJvbGxlZF9qb2luCiBwZ3NvY2tldAogcGdzcWxfdGhpbmdfdAogcGdz c0VudHJ5Ci0tIAoyLjUxLjAKCg== --000000000000e844b70648eae553--