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 1vRbvm-000Kcn-2I for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Dec 2025 19:57:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vRbvl-009kqd-0t for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Dec 2025 19:57:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vRbvk-009kqO-05 for pgsql-hackers@lists.postgresql.org; Fri, 05 Dec 2025 19:57:29 +0000 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vRbvg-003KTk-08 for pgsql-hackers@lists.postgresql.org; Fri, 05 Dec 2025 19:57:27 +0000 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-b735b89501fso295727966b.0 for ; Fri, 05 Dec 2025 11:57:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764964643; x=1765569443; 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=so1il8CXalHGNpoBnGp4E30kIN7JycjcLpBXfwU8tQ4=; b=jWO7FlzKHQ34POWprJLmRr95at92L5pt4hffpYeZCcu/4SBoxwkREoAUT3mxHCai83 Ez8hmehcXRqwMewFYMvDZJtJRntDydvJ7m/+uFvbI2GfeOVrQa9NuGYxukPOnKGiy9xT 8KLwA1MbQZz/wRcALZB9f0HOK8gbsJV3Aep7aEYt9RATjt2zx4xksgAwHfMrcVUnN6CK gI/bmKAnEBqnpHn4E0+kg0yTAO7mLN7kg5EBRKaTs4lQo+jwiyqElrJLZ0xmVsDFLp1P atMYHhuMgwHlPpzjTvU4YEDJWnCzEBReVRY1w93CS03Glsy78HuA5Fgir+RTx4M2tuio SjAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764964643; x=1765569443; 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=so1il8CXalHGNpoBnGp4E30kIN7JycjcLpBXfwU8tQ4=; b=j2akbfrxJ7MorZ5xKMhWJbFP6HJb3mWmE/CVoDD29Oud9n2EAz62kNbRKOIwEwKap3 B1F2VJWw593OgX0DqU+uS1+yZMA+vlM4lJTZg8L8H5YoggJk2kRl/XQb+DIRuOMhdD7W XFi/MVl0rxs2AhkeXtJYmuLvTWZiNq2VtE75rOlg2/TtnoSyqboOxlyjBvMxGG2xgzTt 7jZwFj5YaooHFzufeYwtFtMC/Co26xXEJwM+yOe7BKYND1Wxiwm7YhTh5St4nsSI58f1 DV2oY3WYwRdf5mUFnduqgSR5Stjr56CZdmLNqPQ3ka8XqE9YGEuqMoMSG7cXAxZK9Lsm dxXA== X-Forwarded-Encrypted: i=1; AJvYcCUy9eHTI8XBgb6Yp4Z+MnevlTni0xT8ZjgXEWNBatryFoiJfPHupGl5OFs4vYspAYQ+nSZjyhKa+iNquE7W@lists.postgresql.org X-Gm-Message-State: AOJu0YyvuRXcKNeCxfSrrHP0bI3dj+wdA9IfD/EpizH3xIeluyHY4eAl BANDdoczrfxEruvAbNiD+Px/J5PiMXJO2qASW3FZowmBCIhtFNV/GOcUoIYJ9dlB2hWHM5WAF1Z yY7Z8AsRkaNOGGvYvEsQcPPcaIiPOqKo= X-Gm-Gg: ASbGncvsWhdWNK1p0ZPR7J+1scisP00HL4E7Bt9d5sfUbAX0sAObPN9dBuC3pNMIEqy TTAi19tIQBV/EOYznAOTmcdG4hRZ4JKSJbNimeQuh0JDEWSV2aGr4PL19cxbOkTmbjN2vmdZU+8 i3ve0dktckMlsSrRsPMfT2oHYo0U498MVbP0YBiTzWmOOdzlkTXbG0i2wPd9TTTvF6ao/wLD2lL 90DCnqyvlX0MukisNZcQMUk909ayvRaqDZXCO8h7LV/qmV2FFaGBo2KgrOqpsuuvcOv1+FzqFmF XroYZ1ecJSUDvLMYybjIyn96YH8= X-Google-Smtp-Source: AGHT+IGXQQIRiX3SRcAY5T5rOAseZ7kB95SvJhVlMAw8Ok/sJZ//vNj4MvlH+FWHq7V8SbOG+VaCrabnKfkrHkPsx5w= X-Received: by 2002:a17:907:7f04:b0:b76:6c85:9b60 with SMTP id a640c23a62f3a-b7a23d30f4emr38809366b.0.1764964643122; Fri, 05 Dec 2025 11:57:23 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Fri, 5 Dec 2025 14:57:09 -0500 X-Gm-Features: AWmQ_blNxrV8AAcBjiLdYVWW5HQ0bzhAhLbEy0jn4P3k7MIs0n47JLjMRvgZYvI Message-ID: Subject: Re: pg_plan_advice To: Dian Fay Cc: Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000986f97064539da43" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000986f97064539da43 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Nov 29, 2025 at 10:17=E2=80=AFPM Dian Fay wrote: > Once we're closer to consensus on pg_plan_advice or something like it > landing, I'm interested in helping out on this end of things! Thanks! 014f9a831a320666bf2195949f41710f970c54ad removes the need for what was previously 0004, so here is a new patch series with that dropped, to avoid confusing cfbot or human reviewers. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000986f97064539da43 Content-Type: application/octet-stream; name="v5-0001-Store-information-about-range-table-flattening-in.patch" Content-Disposition: attachment; filename="v5-0001-Store-information-about-range-table-flattening-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mitachss0 RnJvbSBkODUzNDQzZWY4YzkyYTQ5NGY5ZDc0OTNkNmE1NTk3YWY1MDQ2N2UwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHY1IDEv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgcmFuZ2UtdGFibGUgZmxhdHRlbmluZyBpbiB0aGUK IGZpbmFsIHBsYW4uCgpTdXBwb3NlIHRoYXQgd2UncmUgY3VycmVudGx5IHBsYW5uaW5nIGEgcXVl cnkgYW5kLCB3aGVuIHRoYXQgc2FtZQpxdWVyeSB3YXMgcHJldmlvdXNseSBwbGFubmVkIGFuZCBl eGVjdXRlZCwgd2UgbGVhcm5lZCBzb21ldGhpbmcgYWJvdXQKaG93IGEgY2VydGFpbiB0YWJsZSB3 aXRoaW4gdGhhdCBxdWVyeSBzaG91bGQgYmUgcGxhbm5lZC4gV2Ugd2FudCB0bwp0YWtlIG5vdGUg d2hlbiB0aGF0IHNhbWUgdGFibGUgaXMgYmVpbmcgcGxhbm5lZCBkdXJpbmcgdGhlIGN1cnJlbnQK cGxhbm5pbmcgY3ljbGUsIGJ1dCB0aGlzIGlzIGRpZmZpY3VsdCB0byBkbywgYmVjYXVzZSB0aGUg UlRJIG9mIHRoZQp0YWJsZSBmcm9tIHRoZSBwcmV2aW91cyBwbGFuIHdvbid0IG5lY2Vzc2FyaWx5 IGJlIGVxdWFsIHRvIHRoZSBSVEkKdGhhdCB3ZSBzZWUgZHVyaW5nIHRoZSBjdXJyZW50IHBsYW5u aW5nIGN5Y2xlLiBUaGlzIGlzIGJlY2F1c2UgZWFjaApzdWJxdWVyeSBoYXMgYSBzZXBhcmF0ZSBy YW5nZSB0YWJsZSBkdXJpbmcgcGxhbm5pbmcsIGJ1dCB0aGVzZSBhcmUKZmxhdHRlbmVkIGludG8g b25lIHJhbmdlIHRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBwbGFuLApjaGFuZ2lu ZyBSVElzLgoKQ29tbWl0IDhjNDlhNDg0ZThlYmIwMTk5ZmJhNGJkNjhlYWFlZGFmNDliNDhlZDAg YWxsb3dzIHVzIHRvIG1hdGNoIHVwCnN1YnF1ZXJpZXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgcGxh bm5pbmcgY3ljbGVzIHdpdGggdGhlIHN1YnF1ZXJpZXMKY3VycmVudGx5IGJlaW5nIHBsYW5uZWQg anVzdCBieSBjb21wYXJpbmcgdGV4dHVhbCBuYW1lcywgYnV0IHRoYXQncwpub3QgcXVpdGUgZW5v dWdoIHRvIGxldCB1cyBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgaW5kaXZpZHVhbCB0YWJsZXMsCmJl Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBlYWNoIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUgYXBw ZWFycyBpbgp0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KClRvIGZpeCB0aGF0LCBz dG9yZSBhIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBvYmplY3RzIGluIHRoZSBmaW5hbApwbGFubmVk IHN0YXRlbWVudCwgZWFjaCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHN1YnBsYW4sIHRoZSBv ZmZzZXQKYXQgd2hpY2ggaXQgYmVnaW5zIGluIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUsIGFu ZCB3aGV0aGVyIG9yIG5vdAppdCB3YXMgYSBkdW1teSBzdWJwbGFuIC0tIGlmIGl0IHdhcywgc29t ZSBSVElzIG1heSBoYXZlIGJlZW4gZHJvcHBlZApmcm9tIHRoZSBmaW5hbCByYW5nZSB0YWJsZSwg YnV0IGFsc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbnRyb2wgaG93CmEgZHVtbXkgc3VicXVlcnkg Z2V0cyBwbGFubmVkLiBUaGUgdG9wbGV2ZWwgc3VicXVlcnkgaGFzIG5vIG5hbWUgYW5kCmFsd2F5 cyBiZWdpbnMgYXQgcnRvZmZzZXQgMCwgc28gd2UgbWFrZSBubyBlbnRyeSBmb3IgaXQuCgpUaGlz IGNvbW1pdCB0ZWFjaGVzIHBnX292ZXJleHBsYWluJ2UgUkFOR0VfVEFCTEUgb3B0aW9uIHRvIG1h a2UgdXNlCm9mIHRoaXMgbmV3IGRhdGEgdG8gZGlzcGxheSB0aGUgc3VicXVlcnkgbmFtZSBmb3Ig ZWFjaCByYW5nZSB0YWJsZQplbnRyeS4KCk5PVEUgVE8gUkVWSUVXRVJTOiBJZiB0aGVyZSdzIGEg Y2xlYW4gd2F5IHRvIG1ha2UgcGdfb3ZlcmV4cGxhaW4gZGlzcGxheQp0aGlzIGluZm9ybWF0aW9u IHdpdGhvdXQgdGhlIG5ldyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGlzIHBhdGNoLAp0 aGVuIHRoaXMgcGF0Y2ggaXMgdW5uZWNlc3NhcnkuIEkgdGhvdWdodCB0aGVyZSB3b3VsZCBiZSBh IHdheSB0byBkbwp0aGF0LCBidXQgSSBjb3VsZG4ndCBmaWd1cmUgYW55dGhpbmcgb3V0OiB0aGVy ZSBzZWVtcyB0byBiZSBub3RoaW5nIHRoYXQKcmVjb3JkcyBpbiB0aGUgZmluYWwgUGxhbm5lZFN0 bXQgd2hlcmUgc3VicXVlcnkncyByYW5nZSB0YWJsZSBlbmRzIGFuZAp0aGUgbmV4dCBvbmUgYmVn aW5zLiBJbiBwcmFjdGljZSwgb25lIGNvdWxkIHVzdWFsbHkgZmlndXJlIGl0IG91dCBieQptYXRj aGluZyB1cCB0YWJsZXMgYnkgcmVsYXRpb24gT0lELCBidXQgdGhhdCdzIG5laXRoZXIgY2xlYW4g bm9yCnRoZW9yZXRpY2FsbHkgc291bmQuCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggZmNkYzE3MDEy ZGEuLjFjNGM3OTZhZGIyIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 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 ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBmZDc3MzM0 ZTVmZC4uNTQzNmYyNjk2NTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTYwNyw2ICs2MDcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg Y2NkYzliYzI2NGEuLmFkYWJhZTA5YTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDQ2YTg2NTU2MjFkLi4zNzgyYmM2NDA3NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTEzNSw2ICsxMzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBjNDM5M2E5NDMyMS4uMTUy NmRkMmVjNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwli b29sCQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RF U19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGMxYWQ4MGE0MThkLi40MGQwMjkx MzA4MCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI4OTksNiArMjg5OSw3IEBAIFN1 YkxpbmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQ bGFuU3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --000000000000986f97064539da43 Content-Type: application/octet-stream; name="v5-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Disposition: attachment; filename="v5-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mitachsz1 RnJvbSBhYTAyODI5ZjNlN2FjOTJiMmNmZjI1OWJjZTg5MjYwZWFiZTQ5ZDZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY1IDIv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWxpZGVkIG5vZGVzIGluIHRoZSBmaW5hbAogcGxh bi4KCkFuIGV4dGVuc2lvbiAob3IgY29yZSBjb2RlKSBtaWdodCB3YW50IHRvIHJlY29uc3RydWN0 IHRoZSBwbGFubmVyJ3MKY2hvaWNlIG9mIGpvaW4gb3JkZXIgZnJvbSB0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUKdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMgdGhh dCB3ZXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbSBpbiB0aGF0IHBsYW4uClRoZSBwcmV2aW91 cyBjb21taXQsIHRvZ2V0aGVyIHdpdGggdGhlIGVhcmxpZXIgd29yayBpbgo4YzQ5YTQ4NGU4ZWJi MDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQwLCBpcyBlbm91Z2ggdG8gbGV0IHVzIG1hdGNoIHVw ClJUSXMgd2Ugc2VlIGluIHRoZSBmaW5hbCBwbGFuIHdpdGggUlRJcyB0aGF0IHdlIHNlZSBkdXJp bmcgdGhlIHBsYW5uaW5nCmN5Y2xlLCBidXQgd2Ugc3RpbGwgaGF2ZSBhIHByb2JsZW0gaWYgdGhl IHBsYW5uZXIgZGVjaWRlcyB0byBkcm9wIHNvbWUKUlRJcyBvdXQgb2YgdGhlIGZpbmFsIHBsYW4g YWx0b2dldGhlci4KClRvIGZpeCB0aGF0LCB3aGVuIHNldHJlZnMuYyByZW1vdmVzIGEgU3VicXVl cnlTY2FuLCBzaW5nbGUtY2hpbGQgQXBwZW5kLApvciBzaW5nbGUtY2hpbGQgTWVyZ2VBcHBlbmQg ZnJvbSB0aGUgZmluYWwgUGxhbiB0cmVlLCByZWNvcmQgdGhlIHR5cGUgb2YKdGhlIHJlbW92ZWQg bm9kZSBhbmQgdGhlIFJUSXMgdGhhdCB0aGUgcmVtb3ZlZCBub2RlIHdvdWxkIGhhdmUgc2Nhbm5l ZAppbiB0aGUgZmluYWwgcGxhbiB0cmVlLiBJdCB3b3VsZCBiZSBuYXR1cmFsIHRvIHJlY29yZCB0 aGlzIGluZm9ybWF0aW9uCm9uIHRoZSBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBwbGFuIG5vZGUsIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nCmFuIGFkZGl0aW9uYWwgcG9pbnRlciBmaWVsZCB0 byB0eXBlIFBsYW4sIHdoaWNoIHNlZW1zIHVuZGVzaXJhYmxlLgpTbywgaW5zdGVhZCwgc3RvcmUg dGhlIGluZm9ybWF0aW9uIGluIGEgc2VwYXJhdGUgbGlzdCB0aGF0IHRoZQpleGVjdXRvciBuZWVk IG5ldmVyIGNvbnN1bHQsIGFuZCB1c2UgdGhlIHBsYW5fbm9kZV9pZCB0byBpZGVudGlmeQp0aGUg cGxhbiBub2RlIHdpdGggd2hpY2ggdGhlIHJlbW92ZWQgbm9kZSBpcyBsb2dpY2FsbHkgYXNzb2Np YXRlZC4KCkFsc28sIHVwZGF0ZSBwZ19vdmVyZXhwbGFpbiB0byBkaXNwbGF5IHRoZXNlIGRldGFp bHMuCi0tLQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwg IDQgKy0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8IDM5 ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAg ICAgfCA1MiArKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCAgICAgICAgICAgICAgICAgfCAgMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTcgKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25z KCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4v ZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBl Y3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggNTVkMzQ2NjZkODcuLmNhOWEyM2VhNjFmIDEw MDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dApAQCAtNDUyLDYgKzQ1Miw4IEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBn ZW51cyA9ICdkYXVjdXMnOwogIFNlcSBTY2FuIG9uIGRhdWN1cyB2ZWdldGFibGVzCiAgICBGaWx0 ZXI6IChnZW51cyA9ICdkYXVjdXMnOjp0ZXh0KQogICAgU2NhbiBSVEk6IDIKKyAgIEVsaWRlZCBO b2RlIFR5cGU6IEFwcGVuZAorICAgRWxpZGVkIE5vZGUgUlRJczogMQogIFJUSSAxIChyZWxhdGlv biwgaW5oZXJpdGVkLCBpbi1mcm9tLWNsYXVzZSk6CiAgICBFcmVmOiB2ZWdldGFibGVzIChpZCwg bmFtZSwgZ2VudXMpCiAgICBSZWxhdGlvbjogdmVnZXRhYmxlcwpAQCAtNDY1LDcgKzQ2Nyw3IEBA IFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBnZW51cyA9ICdkYXVjdXMnOwogICAgUmVs YXRpb24gS2luZDogcmVsYXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVM b2NrCiAgVW5wcnVuYWJsZSBSVElzOiAxIDIKLSgxNiByb3dzKQorKDE4IHJvd3MpCiAKIC0tIEFs c28gdGVzdCBhIGNhc2UgdGhhdCBpbnZvbHZlcyBhIHdyaXRlLgogRVhQTEFJTiAoUkFOR0VfVEFC TEUsIENPU1RTIE9GRikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRl eCAxYzRjNzk2YWRiMi4uZTU0ZjhjZmMzMzIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4 cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKQEAgLTE5MSw2ICsxOTEsOCBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29r KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICovCiAJaWYgKG9wdGlv bnMtPnJhbmdlX3RhYmxlKQogCXsKKwkJYm9vbAkJb3BlbmVkX2VsaWRlZF9ub2RlcyA9IGZhbHNl OworCiAJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAkJewogCQkJY2FzZSBUX1NlcVNjYW46CkBA IC0yNTEsNiArMjUzLDQzIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpw bGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCX0K KworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgZXMtPnBzdG10LT5lbGlkZWROb2RlcykK KwkJeworCQkJY2hhcgkgICAqZWxpZGVkbm9kZXRhZzsKKworCQkJaWYgKG4tPnBsYW5fbm9kZV9p ZCAhPSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQkJY29udGludWU7CisKKwkJCWlmICghb3BlbmVk X2VsaWRlZF9ub2RlcykKKwkJCXsKKwkJCQlFeHBsYWluT3Blbkdyb3VwKCJFbGlkZWQgTm9kZXMi LCAiRWxpZGVkIE5vZGVzIiwgZmFsc2UsIGVzKTsKKwkJCQlvcGVuZWRfZWxpZGVkX25vZGVzID0g dHJ1ZTsKKwkJCX0KKworCQkJc3dpdGNoIChuLT5lbGlkZWRfdHlwZSkKKwkJCXsKKwkJCQljYXNl IFRfQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIkFwcGVuZCI7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkJZWxpZGVkbm9kZXRhZyA9ICJNZXJnZUFwcGVu ZCI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQkJCWVsaWRlZG5v ZGV0YWcgPSAiU3VicXVlcnlTY2FuIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJ ZWxpZGVkbm9kZXRhZyA9IHBzcHJpbnRmKCIlZCIsIG4tPmVsaWRlZF90eXBlKTsKKwkJCQkJYnJl YWs7CisJCQl9CisKKwkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2RlIiwgTlVMTCwgdHJ1 ZSwgZXMpOworCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiRWxpZGVkIE5vZGUgVHlwZSIsIGVsaWRl ZG5vZGV0YWcsIGVzKTsKKwkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiRWxpZGVkIE5vZGUgUlRJ cyIsIG4tPnJlbGlkcywgZXMpOworCQkJRXhwbGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlIiwg TlVMTCwgdHJ1ZSwgZXMpOworCQl9CisJCWlmIChvcGVuZWRfZWxpZGVkX25vZGVzKQorCQkJRXhw bGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlcyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMp OwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDU0MzZmMjY5 NjU1Li4yNzU1ZWYwMGU5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAt NjE4LDYgKzYxOCw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+cGFyYW1FeGVjVHlw ZXMgPSBnbG9iLT5wYXJhbUV4ZWNUeXBlczsKIAkvKiB1dGlsaXR5U3RtdCBzaG91bGQgYmUgbnVs bCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgY29weSBpdCAqLwogCXJlc3VsdC0+dXRpbGl0eVN0bXQg PSBwYXJzZS0+dXRpbGl0eVN0bXQ7CisJcmVzdWx0LT5lbGlkZWROb2RlcyA9IGdsb2ItPmVsaWRl ZE5vZGVzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5zdG10X2xvY2F0aW9uOwog CXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3NldHJlZnMuYwppbmRleCBhZGFiYWUwOWEyMy4uMjNhMDBkNDUyYjcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTIxMSw2ICsyMTEsOSBAQCBzdGF0aWMgTGlzdCAq c2V0X3dpbmRvd2FnZ19ydW5jb25kaXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAgIFBsYW4g KnBsYW4pOwogCitzdGF0aWMgdm9pZCByZWNvcmRfZWxpZGVkX25vZGUoUGxhbm5lckdsb2JhbCAq Z2xvYiwgaW50IHBsYW5fbm9kZV9pZCwKKwkJCQkJCQkgICBOb2RlVGFnIGVsaWRlZF90eXBlLCBC aXRtYXBzZXQgKnJlbGlkcyk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTQ2 MCwxMCArMTQ2MywxNyBAQCBzZXRfc3VicXVlcnlzY2FuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAKIAlpZiAodHJpdmlhbF9zdWJxdWVyeXNjYW4ocGxhbikpCiAJeworCQlJbmRleAkJ c2NhbnJlbGlkOworCiAJCS8qCiAJCSAqIFdlIGNhbiBvbWl0IHRoZSBTdWJxdWVyeVNjYW4gbm9k ZSBhbmQganVzdCBwdWxsIHVwIHRoZSBzdWJwbGFuLgogCQkgKi8KIAkJcmVzdWx0ID0gY2xlYW5f dXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIHBsYW4sIHBsYW4tPnN1YnBsYW4pOworCisJ CS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIFN1YnF1ZXJ5U2NhbiAqLworCQlzY2FucmVs aWQgPSBwbGFuLT5zY2FuLnNjYW5yZWxpZCArIHJ0b2Zmc2V0OworCQlyZWNvcmRfZWxpZGVkX25v ZGUocm9vdC0+Z2xvYiwgcGxhbi0+c3VicGxhbi0+cGxhbl9ub2RlX2lkLAorCQkJCQkJICAgVF9T dWJxdWVyeVNjYW4sIGJtc19tYWtlX3NpbmdsZXRvbihzY2FucmVsaWQpKTsKIAl9CiAJZWxzZQog CXsKQEAgLTE4OTEsNyArMTkwMSwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5k cGxhbnMpOwogCiAJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxhbi5wYXJhbGxl bF9hd2FyZSkKLQkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg YXBsYW4sIHApOworCQl7CisJCQlQbGFuCSAgICpyZXN1bHQ7CisKKwkJCXJlc3VsdCA9IGNsZWFu X3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBhcGxhbiwgcCk7CisKKwkJCS8qIFJlbWVt YmVyIHRoYXQgd2UgcmVtb3ZlZCBhbiBBcHBlbmQgKi8KKwkJCXJlY29yZF9lbGlkZWRfbm9kZShy b290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAorCQkJCQkJCSAgIG9mZnNldF9y ZWxpZF9zZXQoYXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKworCQkJcmV0dXJuIHJlc3Vs dDsKKwkJfQogCX0KIAogCS8qCkBAIC0xOTU5LDcgKzE5NzksMTcgQEAgc2V0X21lcmdlYXBwZW5k X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBs aW5pdGlhbChtcGxhbi0+bWVyZ2VwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09 IG1wbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRf cGxhbl9sZXZlbCgoUGxhbiAqKSBtcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsK KworCQkJcmVzdWx0ID0gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFu LCBwKTsKKworCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgTWVyZ2VBcHBlbmQgKi8K KwkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfTWVy Z2VBcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBy dG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTM3NzQs MyArMzgwNCwyMSBAQCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIoTm9kZSAqbm9k ZSwgUGxhbm5lckluZm8gKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIo bm9kZSwgZXh0cmFjdF9xdWVyeV9kZXBlbmRlbmNpZXNfd2Fsa2VyLAogCQkJCQkJCQkgIGNvbnRl eHQpOwogfQorCisvKgorICogUmVjb3JkIHNvbWUgZGV0YWlscyBhYm91dCBhIG5vZGUgcmVtb3Zl ZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzCisgKiBwcm9jZXNpbmcsIGZvciB0aGUgYmVu ZWZpdCBvZiBjb2RlIHRyeWluZyB0byByZWNvbnN0cnVjdCBwbGFubmVyIGRlY2lzaW9ucworICog ZnJvbSBleGFtaW5hdGlvbiBvZiB0aGUgZmluYWwgcGxhbiB0cmVlLgorICovCitzdGF0aWMgdm9p ZAorcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIGludCBwbGFuX25vZGVf aWQsCisJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJ RWxpZGVkTm9kZSAqbiA9IG1ha2VOb2RlKEVsaWRlZE5vZGUpOworCisJbi0+cGxhbl9ub2RlX2lk ID0gcGxhbl9ub2RlX2lkOworCW4tPmVsaWRlZF90eXBlID0gZWxpZGVkX3R5cGU7CisJbi0+cmVs aWRzID0gcmVsaWRzOworCisJZ2xvYi0+ZWxpZGVkTm9kZXMgPSBsYXBwZW5kKGdsb2ItPmVsaWRl ZE5vZGVzLCBuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMzc4MmJjNjQwNzUuLjQyYzE0 NmQ4MDJhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTU5LDYgKzE1OSw5IEBAIHR5cGVkZWYg c3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFyYW1z ICovCiAJTGlzdAkgICAqcGFyYW1FeGVjVHlwZXM7CiAKKwkvKiBpbmZvIGFib3V0IG5vZGVzIGVs aWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlMaXN0CSAg ICplbGlkZWROb2RlczsKKwogCS8qIGhpZ2hlc3QgUGxhY2VIb2xkZXJWYXIgSUQgYXNzaWduZWQg Ki8KIAlJbmRleAkJbGFzdFBISWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggMTUyNmRkMmVj NmIuLjVkMDUyMGQ1ZTU4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTUyLDYgKzE1Miw5IEBA IHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJLyogbm9uLW51bGwgaWYgdGhpcyBpcyB1dGls aXR5IHN0bXQgKi8KIAlOb2RlCSAgICp1dGlsaXR5U3RtdDsKIAorCS8qIGluZm8gYWJvdXQgbm9k ZXMgZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLworCUxp c3QJICAgKmVsaWRlZE5vZGVzOworCiAJLyoKIAkgKiBEZWZFbGVtIG9iamVjdHMgYWRkZWQgYnkg ZXh0ZW5zaW9ucywgZS5nLiB1c2luZyBwbGFubmVyX3NodXRkb3duX2hvb2sKIAkgKgpAQCAtMTgz OCw0ICsxODQxLDE4IEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW5SVEluZm8KIAlib29sCQlkdW1t eTsKIH0gU3ViUGxhblJUSW5mbzsKIAorLyoKKyAqIEVsaWRlZE5vZGUKKyAqCisgKiBJbmZvcm1h dGlvbiBhYm91dCBub2RlcyBlbGlkZWQgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlOiB0cml2aWFs IHN1YnF1ZXJ5CisgKiBzY2FucywgYW5kIHNpbmdsZS1jaGlsZCBBcHBlbmQgYW5kIE1lcmdlQXBw ZW5kIG5vZGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBFbGlkZWROb2RlCit7CisJTm9kZVRhZwkJ dHlwZTsKKwlpbnQJCQlwbGFuX25vZGVfaWQ7CisJTm9kZVRhZwkJZWxpZGVkX3R5cGU7CisJQml0 bWFwc2V0ICAqcmVsaWRzOworfSBFbGlkZWROb2RlOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5P REVTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNDBkMDI5MTMwODAuLjUzYTcw YzIxMGE3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNzAxLDYgKzcwMSw3IEBAIEVh Y2hTdGF0ZQogRWRnZQogRWRpdGFibGVPYmplY3RUeXBlCiBFbGVtZW50c1N0YXRlCitFbGlkZWRO b2RlCiBFbmFibGVUaW1lb3V0UGFyYW1zCiBFbmREYXRhUHRyVHlwZQogRW5kRGlyZWN0TW9kaWZ5 X2Z1bmN0aW9uCi0tIAoyLjUxLjAKCg== --000000000000986f97064539da43 Content-Type: application/octet-stream; name="v5-0003-Store-information-about-Append-node-consolidation.patch" Content-Disposition: attachment; filename="v5-0003-Store-information-about-Append-node-consolidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mitacht12 RnJvbSBjYTE3Y2Y0Mzk3MzJiMjEwNWU1MzI4NTNmMWM5ZWRhOWE0MmU1NDBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHY1IDMv Nl0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbiBpbgog dGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFuZCB3 aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMKb2Yg cGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4gQXBw ZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBhIHN1 Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0aGUg c3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtpbmcg dGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlzLCBw cm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4gdGhl ICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZpbmcg QXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQg aXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBhcHBl bmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9uZSwg aWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBpdCB3 YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVyZQpw YXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGxv c2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBpbiB0 aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19vdmVy ZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhlIHNh dmVkIFJUSSBzZXRzLgotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAg ICAgICAgICB8ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg ICAgICAgfCA1NiArKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYyAgICAgICAgIHwgOTggKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvam9pbnJlbHMuYyAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyAgICAgICB8ICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jICAgICAgICB8IDExICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYyAgICAgICAgIHwgIDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTAgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAg ICAgICAgICAgICAgICB8IDExICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgICAgICAgIHwgIDIgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyks IDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhw ZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3Rl ZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggY2E5YTIzZWE2MWYuLmEzNzdmYjI1NzFkIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dApAQCAtMTA0LDYgKzEwNCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKICAgICAgICAgICAgICAgIFBsYW4gTm9kZSBJRDogMgogICAgICAgICAgICAgICAgQXBw ZW5kIFJUSXM6IDEKKyAgICAgICAgICAgICAgIENoaWxkIEFwcGVuZCBSVElzOiBub25lCiAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnJhc3NpY2EgdmVnZXRhYmxlc18xCiAgICAgICAg ICAgICAgICAgICAgICBEaXNhYmxlZCBOb2RlczogMAogICAgICAgICAgICAgICAgICAgICAgUGFy YWxsZWwgU2FmZTogdHJ1ZQpAQCAtMTQyLDcgKzE0Myw3IEBAICQkKTsKICAgIFJlbGF0aW9uIEtp bmQ6IHJlbGF0aW9uCiAgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJlTG9jawogIFVu cHJ1bmFibGUgUlRJczogMSAzIDQKLSg1MyByb3dzKQorKDU0IHJvd3MpCiAKIC0tIFRlc3QgYSBk aWZmZXJlbnQgb3V0cHV0IGZvcm1hdC4KIFNFTEVDVCBleHBsYWluX2ZpbHRlcigkJApAQCAtMTk3 LDYgKzE5OCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIDxleHRQYXJhbT5ub25lPC9leHRQYXJh bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPGFsbFBhcmFt Pm5vbmU8L2FsbFBhcmFtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAg ICAgICA8QXBwZW5kLVJUSXM+MTwvQXBwZW5kLVJUSXM+ICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgICAgICAgICAgIDxDaGlsZC1BcHBlbmQtUlRJcz5ub25lPC9DaGlsZC1BcHBlbmQt UlRJcz4gICAgICAgICAgKwogICAgICAgICAgICAgICAgPFN1YnBsYW5zLVJlbW92ZWQ+MDwvU3Vi cGxhbnMtUmVtb3ZlZD4gICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8UGxhbnM+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAg ICAgICAgPFBsYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIv Y29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGU1NGY4Y2ZjMzMy Li5jMjgzNDhlYTk2NiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVy ZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpA QCAtNTQsNiArNTQsOCBAQCBzdGF0aWMgdm9pZCBvdmVyZXhwbGFpbl9hbGlhcyhjb25zdCBjaGFy ICpxbGFiZWwsIEFsaWFzICphbGlhcywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0bWFwc2V0KGNvbnN0IGNoYXIgKnFsYWJlbCwgQml0bWFw c2V0ICpibXMsCiAJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBvdmVy ZXhwbGFpbl9iaXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0 LAorCQkJCQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBvdmVyZXhwbGFp bl9pbnRsaXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqbGlzdCwKIAkJCQkJCQkJRXhwbGFp blN0YXRlICplcyk7CiAKQEAgLTIzMiwxMSArMjM0LDE3IEBAIG92ZXJleHBsYWluX3Blcl9ub2Rl X2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlvdmVyZXhw bGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxh biktPmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNl dF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCisJCQkJCQkJCQkJICAgKChBcHBlbmQgKikgcGxh biktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVh azsKIAkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFw cGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRz LAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xpc3QoIkNoaWxk IEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQlj YXNlIFRfUmVzdWx0OgogCkBAIC04MTUsNiArODIzLDU0IEBAIG92ZXJleHBsYWluX2JpdG1hcHNl dChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLCBFeHBsYWluU3RhdGUgKmVzKQog CXBmcmVlKGJ1Zi5kYXRhKTsKIH0KIAorLyoKKyAqIEVtaXQgYSB0ZXh0IHByb3BlcnR5IGRlc2Ny aWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBiaXRtYXBzZXRzLgorICogSWYgYSBiaXRt YXBzZXQgY29udGFpbnMgZXhhY3RseSAxIG1lbWJlciwgd2UganVzdCBwcmludCBhbiBpbnRlZ2Vy OworICogb3RoZXJ3aXNlLCB3ZSBzdXJyb3VuZCB0aGUgbGlzdCBvZiBtZW1iZXJzIGJ5IHBhcmVu dGhlc2VzLgorICoKKyAqIElmIHRoZXJlIGFyZSBubyBiaXRtYXBzZXRzIGluIHRoZSBsaXN0LCB3 ZSBwcmludCB0aGUgd29yZCAibm9uZSIuCisgKi8KK3N0YXRpYyB2b2lkCitvdmVyZXhwbGFpbl9i aXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0LAorCQkJCQkJ ICAgRXhwbGFpblN0YXRlICplcykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGJtcywgYm1zX2xpc3Qp CisJeworCQlpZiAoYm1zX21lbWJlcnNoaXAoYm1zKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiICVkIiwgYm1zX3NpbmdsZXRvbl9tZW1iZXIoYm1zKSk7CisJ CWVsc2UKKwkJeworCQkJaW50CQkJeCA9IC0xOworCQkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIgKCIpOworCQkJd2hpbGUgKCh4ID0gYm1z X25leHRfbWVtYmVyKGJtcywgeCkpID49IDApCisJCQl7CisJCQkJaWYgKGZpcnN0KQorCQkJCQlm aXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JyAnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCQkJfQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWlmIChidWYubGVuID09 IDApCisJeworCQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgIm5vbmUiLCBlcyk7CisJCXJl dHVybjsKKwl9CisKKwlBc3NlcnQoYnVmLmRhdGFbMF0gPT0gJyAnKTsKKwlFeHBsYWluUHJvcGVy dHlUZXh0KHFsYWJlbCwgYnVmLmRhdGEgKyAxLCBlcyk7CisJcGZyZWUoYnVmLmRhdGEpOworfQor CiAvKgogICogRW1pdCBhIHRleHQgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2Yg YSBsaXN0IG9mIGludGVnZXJzLCBPSURzLAogICogb3IgWElEcyAtLSBlaXRoZXIgYSBzcGFjZS1z ZXBhcmF0ZWQgbGlzdCBvZiBpbnRlZ2VyIG1lbWJlcnMsIG9yIHRoZSB3b3JkCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA0YzQzZmQwYjE5Yi4uOTI4YjhkODRhZDggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtMTI4LDggKzEyOCwxMCBAQCBz dGF0aWMgUGF0aCAqZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBzdGF0 aWMgdm9pZCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsCiAJCQkJCQkJCQkg IExpc3QgKipzdWJwYXRocywKLQkJCQkJCQkJCSAgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpOwot c3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCk7CisJ CQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBMaXN0ICoqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMpOworc3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5k X3N1YnBhdGgoUGF0aCAqcGF0aCwKKwkJCQkJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cyk7CiBzdGF0aWMgdm9pZCBzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJlbE9wdEluZm8g KnJlbCk7CiBzdGF0aWMgdm9pZCBzZXRfc3VicXVlcnlfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICBJbmRleCBydGksIFJhbmdlVGJsRW50cnkg KnJ0ZSk7CkBAIC0xNDA2LDExICsxNDA4LDE1IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiB7CiAJTGlzdAkgICAqc3VicGF0aHMg PSBOSUw7CiAJYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN1YnBhdGhf Y2FycyA9IE5JTDsKIAlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0gTklMOwogCWJvb2wJCXN0 YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aF9j YXJzID0gTklMOwogCUxpc3QJICAgKnBhcnRpYWxfc3VicGF0aHMgPSBOSUw7CisJTGlzdAkgICAq cGFydGlhbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJTGlzdAkgICAqcGFfcGFydGlhbF9zdWJwYXRo cyA9IE5JTDsKIAlMaXN0CSAgICpwYV9ub25wYXJ0aWFsX3N1YnBhdGhzID0gTklMOworCUxpc3QJ ICAgKnBhX3N1YnBhdGhfY2FycyA9IE5JTDsKIAlib29sCQlwYXJ0aWFsX3N1YnBhdGhzX3ZhbGlk ID0gdHJ1ZTsKIAlib29sCQlwYV9zdWJwYXRoc192YWxpZDsKIAlMaXN0CSAgICphbGxfY2hpbGRf cGF0aGtleXMgPSBOSUw7CkBAIC0xNDQzLDcgKzE0NDksNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5k X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlpZiAoY2hpbGRyZWwt PnBhdGhsaXN0ICE9IE5JTCAmJgogCQkJY2hpbGRyZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgtPnBh cmFtX2luZm8gPT0gTlVMTCkKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hpbGRyZWwt PmNoZWFwZXN0X3RvdGFsX3BhdGgsCi0JCQkJCQkJCQkgICZzdWJwYXRocywgTlVMTCk7CisJCQkJ CQkJCQkgICZzdWJwYXRocywgTlVMTCwgJnN1YnBhdGhfY2Fycyk7CiAJCWVsc2UKIAkJCXN1YnBh dGhzX3ZhbGlkID0gZmFsc2U7CiAKQEAgLTE0NzIsNyArMTQ3OCw4IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlBc3NlcnQo Y2hlYXBlc3RfcGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5k X3N1YnBhdGgoY2hlYXBlc3RfcGF0aCwKIAkJCQkJCQkJCSAgJnN0YXJ0dXBfc3VicGF0aHMsCi0J CQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJICAmc3RhcnR1cF9z dWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXN0YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSBm YWxzZTsKQEAgLTE0ODMsNyArMTQ5MCw4IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxf cGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxh dGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAotCQkJCQkJCQkJICAmcGFy dGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkgICZwYXJ0aWFsX3N1YnBhdGhzLCBOVUxM LAorCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXBh cnRpYWxfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKQEAgLTE1MTIsNyArMTUyMCw4IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKTsKIAkJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCwKIAkJCQkJCQkJCQkgICZwYV9w YXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMpOwor CQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFfc3Vi cGF0aF9jYXJzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE1MzEsNyArMTU0MCw4IEBAIGFk ZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJICovCiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChucHBhdGgsCiAJCQkJCQkJ CQkJICAmcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJ CQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkgICZwYV9zdWJwYXRoX2NhcnMpOwogCQkJfQogCQl9CiAK QEAgLTE2MDYsMTQgKzE2MTYsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBpZiB3ZSBoYXZlIHplcm8gb3Igb25lIGxp dmUgc3VicGF0aCBkdWUgdG8gY29uc3RyYWludCBleGNsdXNpb24uKQogCSAqLwogCWlmIChzdWJw YXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo cm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLAorCQkJCQkJCQkJCQkJICBOSUwsIHN1 YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwKIAkJCQkJCQkJ CQkJCSAgLTEpKTsKIAogCS8qIGJ1aWxkIGFuIEFwcGVuZFBhdGggZm9yIHRoZSBjaGVhcCBzdGFy dHVwIHBhdGhzLCBpZiB2YWxpZCAqLwogCWlmIChzdGFydHVwX3N1YnBhdGhzX3ZhbGlkKQogCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN0YXJ0 dXBfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkgIE5JTCwgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEp KTsKKwkJCQkJCQkJCQkJCSAgTklMLCBzdGFydHVwX3N1YnBhdGhfY2FycywKKwkJCQkJCQkJCQkJ CSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIgYW4gYXBw ZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBNYWtlCkBA IC0xNjU0LDYgKzE2NjYsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIEdlbmVyYXRlIGEgcGFydGlhbCBhcHBlbmQg cGF0aC4gKi8KIAkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5J TCwgcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCQlwYXJ0aWFsX3N1YnBhdGhfY2FycywKIAkJ CQkJCQkJCQlOSUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCQkJZW5hYmxlX3Bh cmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQktMSk7CkBAIC0xNzA0LDYgKzE3MTcsNyBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CiAJCWFwcGVuZHBhdGggPSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBwYV9ub25wYXJ0 aWFsX3N1YnBhdGhzLAogCQkJCQkJCQkJCXBhX3BhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJ cGFfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2Vycywg dHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlhbF9wYXRoKHJlbCwg KFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzM3LDYgKzE3NTEsNyBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIFNl bGVjdCB0aGUgY2hpbGQgcGF0aHMgZm9yIGFuIEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXph dGlvbiAqLwogCQlzdWJwYXRocyA9IE5JTDsKKwkJc3VicGF0aF9jYXJzID0gTklMOwogCQlzdWJw YXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBsaXZlX2NoaWxkcmVscykKIAkJewpA QCAtMTc1OSwxMiArMTc3NCwxMyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCXN1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CiAJ CQkJYnJlYWs7CiAJCQl9Ci0JCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCk7CisJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnN1YnBhdGhfY2Fycyk7CiAJCX0KIAogCQlpZiAo c3VicGF0aHNfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopCi0JCQkJCSBjcmVhdGVf YXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJCQkgY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgc3VicGF0aHMsIE5JTCwgc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJ CU5JTCwgcmVxdWlyZWRfb3V0ZXIsIDAsIGZhbHNlLAogCQkJCQkJCQkJCS0xKSk7CiAJfQpAQCAt MTc5MSw2ICsxODA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQljb250aW51ZTsKIAogCQkJYXBwZW5kcGF0aCA9IGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRoKSwKKwkJCQkJ CQkJCQkJbGlzdF9tYWtlMShyZWwtPnJlbGlkcyksCiAJCQkJCQkJCQkJCU5JTCwgTlVMTCwKIAkJ CQkJCQkJCQkJcGF0aC0+cGFyYWxsZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQkJcGFydGlh bF9yb3dzKTsKQEAgLTE4NzQsOCArMTg5MSwxMSBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlMaXN0CSAgICpw YXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwogCQlMaXN0CSAgICpzdGFydHVwX3N1YnBh dGhzID0gTklMOworCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhfY2FycyA9IE5JTDsKIAkJTGlz dAkgICAqdG90YWxfc3VicGF0aHMgPSBOSUw7CisJCUxpc3QJICAgKnRvdGFsX3N1YnBhdGhfY2Fy cyA9IE5JTDsKIAkJTGlzdAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJTGlzdAkg ICAqZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3Rv dGFsID0gZmFsc2U7CiAJCWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29s CQltYXRjaF9wYXJ0aXRpb25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDU4LDIzIEBAIGdlbmVyYXRl X29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCQkgKiBqdXN0IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55 dGhpbmcKIAkJCQkgKiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBn ZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFw ZXN0X3RvdGFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7 CisJCQkJY2hlYXBlc3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBh dGgoY2hlYXBlc3Rfc3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cF9zdWJwYXRoX2NhcnMp OworCQkJCWNoZWFwZXN0X3RvdGFsID0KKwkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0 aChjaGVhcGVzdF90b3RhbCwKKwkJCQkJCQkJCQkJCSAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAog CQkJCXN0YXJ0dXBfc3VicGF0aHMgPSBsYXBwZW5kKHN0YXJ0dXBfc3VicGF0aHMsIGNoZWFwZXN0 X3N0YXJ0dXApOwogCQkJCXRvdGFsX3N1YnBhdGhzID0gbGFwcGVuZCh0b3RhbF9zdWJwYXRocywg Y2hlYXBlc3RfdG90YWwpOwogCiAJCQkJaWYgKGNoZWFwZXN0X2ZyYWN0aW9uYWwpCiAJCQkJewot CQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChj aGVhcGVzdF9mcmFjdGlvbmFsKTsKLQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocyA9IGxhcHBlbmQo ZnJhY3Rpb25hbF9zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CisJCQkJCWNoZWFwZXN0 X2ZyYWN0aW9uYWwgPQorCQkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVz dF9mcmFjdGlvbmFsLAorCQkJCQkJCQkJCQkJCSAmZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMpOwor CQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbF9zdWJw YXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1 NywxMyArMjA4NCwxNiBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJn ZUFwcGVuZC4KIAkJCQkgKi8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0 X3N0YXJ0dXAsCi0JCQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwX3N1YnBh dGhfY2Fycyk7CiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCwK LQkJCQkJCQkJCQkgICZ0b3RhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmdG90YWxf c3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkJICAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAogCQkJ CWlmIChjaGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X2ZyYWN0aW9uYWwsCi0JCQkJCQkJCQkJCSAgJmZyYWN0aW9uYWxfc3VicGF0aHMs IE5VTEwpOworCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhzLCBOVUxMLAorCQkJCQkJ CQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhfY2Fycyk7CiAJCQl9CiAJCX0KIApAQCAtMjA3NSw2 ICsyMTA1LDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCSAg c3RhcnR1cF9zdWJwYXRocywKIAkJCQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkgIHN0 YXJ0dXBfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJ CQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwKQEAgLTIwODUsNiArMjExNiw3IEBAIGdlbmVy YXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJCQkJCQkJICByZWwsCiAJCQkJCQkJCQkJCQkJCSAgdG90YWxfc3VicGF0aHMs CiAJCQkJCQkJCQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhfY2Fy cywKIAkJCQkJCQkJCQkJCQkJICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJ CQkJCQkJCQkJCQkgIDAsCkBAIC0yMDk2LDYgKzIxMjgsNyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBw ZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJ CQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCiAJCQkJCQkJ CQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAog CQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJ CQkJCQkJCSAgMCwKQEAgLTIxMDgsMTIgKzIxNDEsMTQgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVu ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCXN0YXJ0dXBfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJ CQlzdGFydHVwX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCQkJTlVMTCkpOwogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRo KHJlbCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJ CQkJCQkJcmVsLAogCQkJCQkJCQkJCQkJCQkJCXRvdGFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJ CQkJCXRvdGFsX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJ CQkJCQkJCQkJCQlOVUxMKSk7CiAKQEAgLTIxMjEsNiArMjE1Niw3IEBAIGdlbmVyYXRlX29yZGVy ZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJ CQkJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzLAor CQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCQkJ CXBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkJCU5VTEwpKTsKIAkJfQpAQCAtMjIyMyw3ICsyMjU5 LDggQEAgZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogICogcGF0aHMpLgogICovCiBzdGF0aWMgdm9pZAotYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3Qg KipzcGVjaWFsX3N1YnBhdGhzKQorYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRo LCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJICBMaXN0 ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCiB7CiAJaWYgKElzQShwYXRoLCBBcHBlbmRQYXRo KSkKIAl7CkBAIC0yMjMyLDYgKzIyNjksOCBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlm ICghYXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0 aCA9PSAwKQogCQl7CiAJCQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRo LT5zdWJwYXRocyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQo KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1 cm47CiAJCX0KIAkJZWxzZSBpZiAoc3BlY2lhbF9zdWJwYXRocyAhPSBOVUxMKQpAQCAtMjI0Niw2 ICsyMjg1LDggQEAgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoq c3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKQogCQkJCQkJCQkJCQkJICBhcGF0aC0+ Zmlyc3RfcGFydGlhbF9wYXRoKTsKIAkJCSpzcGVjaWFsX3N1YnBhdGhzID0gbGlzdF9jb25jYXQo KnNwZWNpYWxfc3VicGF0aHMsCiAJCQkJCQkJCQkJCW5ld19zcGVjaWFsX3N1YnBhdGhzKTsKKwkJ CSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVsaWRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAg LTIyNTQsNiArMjI5NSw4IEBAIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwg TGlzdCAqKnN1YnBhdGhzLCBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocykKIAkJTWVyZ2VBcHBlbmRQ YXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQkqc3VicGF0aHMgPSBs aXN0X2NvbmNhdCgqc3VicGF0aHMsIG1wYXRoLT5zdWJwYXRocyk7CisJCSpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+ cGFyZW50LT5yZWxpZHMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjY1LDEwICsyMzA4LDE1IEBA IGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhzLCBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocykKICAqCQlSZXR1cm5zIHRoZSBzaW5nbGUgc3VicGF0aCBv ZiBhbiBBcHBlbmQvTWVyZ2VBcHBlbmQsIG9yIGp1c3QKICAqCQlyZXR1cm4gJ3BhdGgnIGlmIGl0 J3Mgbm90IGEgc2luZ2xlIHN1Yi1wYXRoIEFwcGVuZC9NZXJnZUFwcGVuZC4KICAqCisgKiBBcyBh IHNpZGUgZWZmZWN0LCB3aGVuZXZlciB3ZSByZXR1cm4gYSBzaW5nbGUgc3VicGF0aCByYXRoZXIg dGhhbiB0aGUKKyAqIG9yaWdpbmFsIHBhdGgsIGFkZCB0aGUgcmVsaWQgc2V0IGZvciB0aGUgb3Jp Z2luYWwgcGF0aCB0bworICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHNvIHRoYXQgdGhvc2Ug cmVsaWRzIGRvbid0IGVudGlyZWx5IGRpc2FwcGVhcgorICogZnJvbSB0aGUgZmluYWwgcGxhbi4K KyAqCiAgKiBOb3RlOiAncGF0aCcgbXVzdCBub3QgYmUgYSBwYXJhbGxlbC1hd2FyZSBwYXRoLgog ICovCiBzdGF0aWMgUGF0aCAqCi1nZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBh dGgpCitnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cykKIHsKIAlBc3NlcnQoIXBhdGgtPnBhcmFsbGVsX2F3YXJlKTsK IApAQCAtMjI3NywxNCArMjMyNSwyMiBAQCBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgpCiAJCUFwcGVuZFBhdGggKmFwYXRoID0gKEFwcGVuZFBhdGggKikgcGF0aDsKIAog CQlpZiAobGlzdF9sZW5ndGgoYXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz LCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwoYXBh dGgtPnN1YnBhdGhzKTsKKwkJfQogCX0KIAllbHNlIGlmIChJc0EocGF0aCwgTWVyZ2VBcHBlbmRQ YXRoKSkKIAl7CiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGggPSAoTWVyZ2VBcHBlbmRQYXRoICop IHBhdGg7CiAKIAkJaWYgKGxpc3RfbGVuZ3RoKG1wYXRoLT5zdWJwYXRocykgPT0gMSkKKwkJewor CQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cywgcGF0aC0+cGFyZW50LT5yZWxpZHMpOwogCQkJcmV0dXJuIChQYXRoICopIGxp bml0aWFsKG1wYXRoLT5zdWJwYXRocyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gcGF0aDsKQEAgLTIz MTMsNyArMjM2OSw3IEBAIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQog CXJlbC0+cGFydGlhbF9wYXRobGlzdCA9IE5JTDsKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0 aCAqLwotCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJl bCwgTklMLCBOSUwsCisJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo TlVMTCwgcmVsLCBOSUwsIE5JTCwgTklMLAogCQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFs X3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBmYWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2pvaW5yZWxzLmMKaW5kZXggNWQxZmMzODk5ZGEuLmMxZWQwZDM4NzBmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTE1MzAsNyArMTUzMCw3IEBAIG1hcmtf ZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCkKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0aCAq LwogCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwg TklMLCBOSUwsCi0JCQkJCQkJCQkJCSAgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAorCQkJCQkJ CQkJCQkgIE5JTCwgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZh bHNlLCAtMSkpOwogCiAJLyogU2V0IG9yIHVwZGF0ZSBjaGVhcGVzdF90b3RhbF9wYXRoIGFuZCBy ZWxhdGVkIGZpZWxkcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmlu ZGV4IDhhZjA5MWJhNjQ3Li44OGI0YzU5MDFiMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwpAQCAtMTI2NSw2ICsxMjY1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBs YW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFu LT5wbGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJ cGxhbi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhr ZXlzICE9IE5JTCkKIAl7CkBAIC0xNDc3LDYgKzE0NzgsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5k X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBs YW4tPmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFw cHJlbGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g YmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBz b3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVk LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDI3NTVlZjAwZTkwLi5iYWYw ZDk0MjBhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDAyNyw2ICs0 MDI3LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkgICBwYXRocywKIAkJCQkJCQkgICBO SUwsCiAJCQkJCQkJICAgTklMLAorCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCiAJCQkJCQkJICAgZmFsc2UsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jCmluZGV4IGY1MjhmMDk2YTU2Li5jYTIyNThlNDRkMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTg0Myw3ICs4NDMsNyBAQCBnZW5lcmF0ZV91bmlvbl9w YXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogdW5pb24g Y2hpbGQuCiAJICovCiAJYXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVzdWx0X3JlbCwgY2hlYXBlc3RfcGF0aGxpc3QsCi0JCQkJCQkJCQkJTklMLCBOSUwsIE5VTEws IDAsIGZhbHNlLCAtMSk7CisJCQkJCQkJCQkJTklMLCBOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2Us IC0xKTsKIAogCS8qCiAJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4gIEZvciBub3cgd2Ug anVzdCBhc3N1bWUgdGhlIG91dHB1dCBpcyB1bmlxdWUKQEAgLTg4OSw3ICs4ODksNyBAQCBnZW5l cmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3Qs CiAKIAkJcGFwYXRoID0gKFBhdGggKikKIAkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1 bHRfcmVsLCBOSUwsIHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJICAgTklMLCBOVUxMLCBwYXJh bGxlbF93b3JrZXJzLAorCQkJCQkJCSAgIE5JTCwgTklMLCBOVUxMLCBwYXJhbGxlbF93b3JrZXJz LAogCQkJCQkJCSAgIGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQsIC0xKTsKIAkJZ3BhdGggPSAoUGF0 aCAqKQogCQkJY3JlYXRlX2dhdGhlcl9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIHBhcGF0aCwKQEAg LTEwMTgsNiArMTAxOCw3IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbCwKIAkJCQkJCQkJCQkJ CQkgb3JkZXJlZF9wYXRobGlzdCwKKwkJCQkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCQkJCSB1 bmlvbl9wYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkgTlVMTCk7CiAKQEAgLTEyMjQsOCArMTIyNSwx MCBAQCBnZW5lcmF0ZV9ub251bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJICogYmV0d2VlbiB0aGUgc2V0IG9wIHRhcmdldGxpc3QgYW5kIHRo ZSB0YXJnZXRsaXN0IG9mIHRoZQogCQkJCSAqIGxlZnQgaW5wdXQuICBUaGUgQXBwZW5kIHdpbGwg YmUgcmVtb3ZlZCBpbiBzZXRyZWZzLmMuCiAJCQkJICovCi0JCQkJYXBhdGggPSAoUGF0aCAqKSBj cmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgbGlzdF9tYWtlMShscGF0aCksCi0J CQkJCQkJCQkJCQkJTklMLCBOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CisJCQkJYXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwKKwkJCQkJCQkJCQkJ CQlsaXN0X21ha2UxKGxwYXRoKSwKKwkJCQkJCQkJCQkJCQlOSUwsIE5JTCwgTklMLCBOVUxMLCAw LAorCQkJCQkJCQkJCQkJCWZhbHNlLCAtMSk7CiAKIAkJCQlhZGRfcGF0aChyZXN1bHRfcmVsLCBh cGF0aCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IGI2YmU0ZGRi ZDAxLi4zM2NlMzRmMDA4OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBA IC0xMzAxLDYgKzEzMDEsNyBAQCBBcHBlbmRQYXRoICoKIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgICBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICAgTGlzdCAqc3Vi cGF0aHMsIExpc3QgKnBhcnRpYWxfc3VicGF0aHMsCisJCQkJICAgTGlzdCAqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMsCiAJCQkJICAgTGlzdCAqcGF0aGtleXMsIFJlbGlkcyByZXF1aXJlZF9vdXRl ciwKIAkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2VycywgYm9vbCBwYXJhbGxlbF9hd2FyZSwKIAkJ CQkgICBkb3VibGUgcm93cykKQEAgLTEzMTAsNiArMTMxMSw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAogCUFzc2VydCghcGFyYWxsZWxfYXdhcmUgfHwgcGFyYWxs ZWxfd29ya2VycyA+IDApOwogCisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0Fw cGVuZDsKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0 aHRhcmdldCA9IHJlbC0+cmVsdGFyZ2V0OwpAQCAtMTQ3Miw2ICsxNDc0LDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4Nyw2ICsxNDkwLDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5NTEsNiArMzk1NSw3IEBAIHJlcGFyYW1ldGVyaXpl X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJfQogCQkJCXJldHVybiAo UGF0aCAqKQogCQkJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBw YXJ0aWFscGF0aHMsCisJCQkJCQkJCQkgICBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJ CQkJCQkgICBhcGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgt PnBhdGgucGFyYWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDQyYzE0NmQ4MDJh Li5lMTY4YjE3Y2QyOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIxNzIsNiArMjE3MiwxMiBA QCB0eXBlZGVmIHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJw YXRocycgY29udGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRp YWwgc3VicGF0aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgp IGFsbG93cyB1cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBw YXRocyBhcmUgY29uc29saWRhdGVkIGRvd24gdG8gb25lLCB3ZSBzdG9yZSB0aGUgUlRJCisgKiBz ZXRzIGZvciB0aGUgb21pdHRlZCBwYXRocyBpbiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cy4gVGhp cyBpcyBub3QgbmVjZXNzYXJ5CisgKiBmb3IgcGxhbm5pbmcgb3IgZXhlY3V0aW9uOyB3ZSBkbyBp dCBmb3IgdGhlIGJlbmVmaXQgb2YgY29kZSB0aGF0IHdhbnRzCisgKiB0byBpbnNwZWN0IHRoZSBm aW5hbCBwbGFuIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBjYW1lIHRvIGJlLgorICoKICAqIE5vdGU6 IGl0IGlzIHBvc3NpYmxlIGZvciAic3VicGF0aHMiIHRvIGNvbnRhaW4gb25seSBvbmUsIG9yIGV2 ZW4gbm8sCiAgKiBlbGVtZW50cy4gIFRoZXNlIGNhc2VzIGFyZSBvcHRpbWl6ZWQgZHVyaW5nIGNy ZWF0ZV9hcHBlbmRfcGxhbi4KICAqIEluIHBhcnRpY3VsYXIsIGFuIEFwcGVuZFBhdGggd2l0aCBu byBzdWJwYXRocyBpcyBhICJkdW1teSIgcGF0aCB0aGF0CkBAIC0yMTg3LDYgKzIxOTMsNyBAQCB0 eXBlZGVmIHN0cnVjdCBBcHBlbmRQYXRoCiAJLyogSW5kZXggb2YgZmlyc3QgcGFydGlhbCBwYXRo IGluIHN1YnBhdGhzOyBsaXN0X2xlbmd0aChzdWJwYXRocykgaWYgbm9uZSAqLwogCWludAkJCWZp cnN0X3BhcnRpYWxfcGF0aDsKIAlDYXJkaW5hbGl0eSBsaW1pdF90dXBsZXM7CS8qIGhhcmQgbGlt aXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKIH0gQXBwZW5kUGF0aDsKIAogI2RlZmluZSBJU19EVU1NWV9BUFBFTkQocCkgXApA QCAtMjIwMywxMiArMjIxMCwxNSBAQCBleHRlcm4gYm9vbCBpc19kdW1teV9yZWwoUmVsT3B0SW5m byAqcmVsKTsKIC8qCiAgKiBNZXJnZUFwcGVuZFBhdGggcmVwcmVzZW50cyBhIE1lcmdlQXBwZW5k IHBsYW4sIGllLCB0aGUgbWVyZ2luZyBvZiBzb3J0ZWQKICAqIHJlc3VsdHMgZnJvbSBzZXZlcmFs IG1lbWJlciBwbGFucyB0byBwcm9kdWNlIHNpbWlsYXJseS1zb3J0ZWQgb3V0cHV0LgorICoKKyAq IGNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgZm9y IEFwcGVuZFBhdGguCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kUGF0aAogewogCVBh dGgJCXBhdGg7CiAJTGlzdAkgICAqc3VicGF0aHM7CQkvKiBsaXN0IG9mIGNvbXBvbmVudCBQYXRo cyAqLwogCUNhcmRpbmFsaXR5IGxpbWl0X3R1cGxlczsJLyogaGFyZCBsaW1pdCBvbiBvdXRwdXQg dHVwbGVzLCBvciAtMSAqLworCUxpc3QJICAgKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogfSBN ZXJnZUFwcGVuZFBhdGg7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDVkMDUyMGQ1ZTU4 Li4wNDViN2VlODRhNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTM5NCw5ICszOTQsMTYgQEAg c3RydWN0IFBhcnRpdGlvblBydW5lSW5mbzsJCS8qIGZvcndhcmQgcmVmZXJlbmNlIHRvIHN0cnVj dCBiZWxvdyAqLwogdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiB7CiAJUGxhbgkJcGxhbjsKKwogCS8q IFJUSXMgb2YgYXBwZW5kcmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQg ICphcHByZWxpZHM7CisKKwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0 ZWQgaW50byB0aGlzIG5vZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsK KworCS8qIHBsYW5zIHRvIHJ1biAqLwogCUxpc3QJICAgKmFwcGVuZHBsYW5zOworCiAJLyogIyBv ZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KIAlpbnQJCQluYXN5bmNwbGFuczsKIApAQCAtNDI2LDYg KzQzMywxMCBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCS8qIFJUSXMgb2YgYXBwZW5k cmVsKHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KIAlCaXRtYXBzZXQgICphcHByZWxpZHM7CiAK KwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG5v ZGUgKi8KKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKworCS8qIHBsYW5zIHRv IHJ1biAqLwogCUxpc3QJICAgKm1lcmdlcGxhbnM7CiAKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIGp1 c3QgbGlrZSB0aGUgc29ydC1rZXkgaW5mbyBpbiBzdHJ1Y3QgU29ydDogKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BhdGhub2RlLmgKaW5kZXggNmIwMTBmMGIxYTUuLmRiZjQ3MDJhY2M5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaApAQCAtNzEsMTIgKzcxLDE0IEBAIGV4dGVybiBUaWRSYW5nZVBhdGggKmNy ZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJICBp bnQgcGFyYWxsZWxfd29ya2Vycyk7CiBleHRlcm4gQXBwZW5kUGF0aCAqY3JlYXRlX2FwcGVuZF9w YXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkgIExpc3Qg KnN1YnBhdGhzLCBMaXN0ICpwYXJ0aWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBMaXN0ICpjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJCQkJCQkJCSAgTGlzdCAqcGF0aGtleXMsIFJlbGlkcyBy ZXF1aXJlZF9vdXRlciwKIAkJCQkJCQkJCSAgaW50IHBhcmFsbGVsX3dvcmtlcnMsIGJvb2wgcGFy YWxsZWxfYXdhcmUsCiAJCQkJCQkJCQkgIGRvdWJsZSByb3dzKTsKIGV4dGVybiBNZXJnZUFwcGVu ZFBhdGggKmNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJ CQkJCQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJ CQkJCQkJCQkJCQkgTGlzdCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkJCQkg TGlzdCAqcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKIGV4 dGVybiBHcm91cFJlc3VsdFBhdGggKmNyZWF0ZV9ncm91cF9yZXN1bHRfcGF0aChQbGFubmVySW5m byAqcm9vdCwKLS0gCjIuNTEuMAoK --000000000000986f97064539da43 Content-Type: application/octet-stream; name="v5-0004-Allow-for-plugin-control-over-path-generation-str.patch" Content-Disposition: attachment; filename="v5-0004-Allow-for-plugin-control-over-path-generation-str.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mitacht23 RnJvbSA2MzEzNjgxYjE4Njc4ZjAzMTM5ODY1MzJkOWYwYzFmZDk5NmIzZGFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjQgT2N0IDIwMjUgMTU6MTE6NDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHY1IDQv Nl0gQWxsb3cgZm9yIHBsdWdpbiBjb250cm9sIG92ZXIgcGF0aCBnZW5lcmF0aW9uCiBzdHJhdGVn aWVzLgoKRWFjaCBSZWxPcHRJbmZvIG5vdyBoYXMgYSBwZ3NfbWFzayBtZW1iZXIgd2hpY2ggaXMg YSBtYXNrIG9mIGFjY2VwdGFibGUKc3RyYXRlZ2llcy4gRm9yIG1vc3QgcmVscywgdGhpcyBpcyBw b3B1bGF0ZWQgZnJvbSBQbGFubmVyR2xvYmFsJ3MKZGVmYXVsdF9wZ3NfbWFzaywgd2hpY2ggaXMg Y29tcHV0ZWQgZnJvbSB0aGUgdmFsdWVzIG9mIHRoZSBlbmFibGVfKgpHVUNzIGF0IHRoZSBzdGFy dCBvZiBwbGFubmluZy4KCkZvciBiYXNlcmVscywgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBjYW4g YmUgdXNlZCB0byBhZGp1c3QgcGdzX21hc2sgZm9yCmVhY2ggbmV3IFJlbE9wdEluZm8sIGF0IGxl YXN0IGZvciByZWxzIG9mIHR5cGUgUlRFX1JFTEFUSU9OLiBBZGp1c3RpbmcKcGdzX21hc2sgaXMg bGVzcyB1c2VmdWwgZm9yIG90aGVyIHR5cGVzIG9mIHJlbHMsIGJ1dCBpZiBpdCBwcm92ZXMgdG8K YmUgbmVjZXNzYXJ5LCB3ZSBjYW4gcmV2aXNpdCB0aGUgd2F5IHRoaXMgaG9vayB3b3JrcyBvciBh ZGQgYSBuZXcgb25lLgoKRm9yIGpvaW5yZWxzLCB0d28gbmV3IGhvb2tzIGFyZSBhZGRlZC4gam9p bnJlbF9zZXR1cF9ob29rIGlzIGNhbGxlZCBlYWNoCnRpbWUgYSBqb2lucmVsIGlzIGNyZWF0ZWQs IGFuZCBvbmUgdGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHRoYXQgaG9vawppcyB0byBtYW5p cHVsYXRlIHBnc19tYXNrIGZvciB0aGUgbmV3IGpvaW5yZWwuIGpvaW5fcGF0aF9zZXR1cF9ob29r IGlzCmNhbGxlZCBlYWNoIHRpbWUgd2UncmUgYWJvdXQgdG8gYWRkIHBhdGhzIHRvIGEgam9pbnJl bCBieSBjb25zaWRlcmluZwpzb21lIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgYW4gb3V0ZXIg cmVsLCBhbiBpbm5lciByZWwsIGFuZCBhIGpvaW4KdHlwZS4gSXQgY2FuIG1vZGlmeSB0aGUgcGdz X21hc2sgcHJvcGFnYXRlZCBpbnRvIEpvaW5QYXRoRXh0cmFEYXRhIHRvCnJlc3RyaWN0IHN0cmF0 ZWd5IGNob2ljZSBmb3IgdGhhdCBwYXJpY3VsYXIgY29tYmluYXRpb24gb2YgcmVscy4KClRvIG1h a2Ugam9pbnJlbF9zZXR1cF9ob29rIHdvcmsgYXMgaW50ZW5kZWQsIHRoZSBleGlzdGluZyBjYWxs cyB0bwpidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvIGFyZSBtb3ZlZCBsYXRlciBpbiB0aGUg Y2FsbGluZyBmdW5jdGlvbnM7CnRoaXMgaXMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGNoZWNrcyB3 aGV0aGVyIHRoZSByZWwncyBwZ3NfbWFzayBpbmNsdWRlcwpQR1NfQ09OU0lERVJfUEFSVElUSU9O V0lTRSwgc28gd2Ugd2FudCBpdCB0byBvbmx5IGJlIGNhbGxlZCBhZnRlcgpwbHVnaW5zIGhhdmUg aGFkIGEgY2hhbmNlIHRvIGFsdGVyIHBnc19tYXNrLgoKVXBwZXIgcmVscyBjdXJyZW50bHkgaW5o ZXJpdCBwZ3NfbWFzayBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gSXQncwp1bmNsZWFyIHRoYXQg dGhpcyBpcyB0aGUgbW9zdCB1c2VmdWwgYmVoYXZpb3IsIGJ1dCBhdCB0aGUgbW9tZW50IHRoZXJl CmFyZSBubyBob29rcyB0byBhbGxvdyB0aGUgbWFzayB0byBiZSBzZXQgaW4gYW55IG90aGVyIHdh eS4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICB8IDIyMiArKysrKysrKysr KysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgIHwgIDg4ICsr KysrKystLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYyAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgICA0ICstCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgNTQgKysrKysrCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgfCAgMTkgKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYyAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9yZWxub2RlLmMgICAgfCAgNDMgKysrKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICAgICB8ICA4MiArKysrKysrKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0 LmggICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgIHwgIDExICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAg fCAgIDkgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDQ1NCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA5MjhiOGQ4NGFk OC4uOGU5ZGRlM2QxOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Fs bHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAt OTU0LDcgKzk1NCw3IEBAIHNldF90YWJsZXNhbXBsZV9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUmFuZ2VUYmxFbnRyeSAqCiAJCSBibXNfbWVtYmVyc2hp cChyb290LT5hbGxfcXVlcnlfcmVscykgIT0gQk1TX1NJTkdMRVRPTikgJiYKIAkJIShHZXRUc21S b3V0aW5lKHJ0ZS0+dGFibGVzYW1wbGUtPnRzbWhhbmRsZXIpLT5yZXBlYXRhYmxlX2Fjcm9zc19z Y2FucykpCiAJewotCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBw YXRoKTsKKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgcGF0aCwg dHJ1ZSk7CiAJfQogCiAJYWRkX3BhdGgocmVsLCBwYXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCmluZGV4IDVhNzI4M2JkMmY1Li41YjAyNDBmNjBkMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0yNzUsNiArMjc1LDcgQEAgY29zdF9zZXFzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nv c3Q7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50 NjQJCWVuYWJsZV9tYXNrID0gUEdTX1NFUVNDQU47CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBs aWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBA IC0zMjcsOCArMzI4LDExIEBAIGNvc3Rfc2Vxc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJICovCiAJCXBhdGgtPnJvd3MgPSBjbGFtcF9yb3dfZXN0KHBhdGgtPnJvd3MgLyBw YXJhbGxlbF9kaXZpc29yKTsKIAl9CisJZWxzZQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxlX3NlcXNjYW4g PyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgY3B1 X3J1bl9jb3N0ICsgZGlza19ydW5fY29zdDsKIH0KQEAgLTM1NCw2ICszNTgsNyBAQCBjb3N0X3Nh bXBsZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJc3BjX3BhZ2VfY29z dDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2 NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNl IHJlbGF0aW9ucyB3aXRoIHRhYmxlc2FtcGxlIGNsYXVzZXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+ cmVsaWQgPiAwKTsKQEAgLTQwMSw3ICs0MDYsMTEgQEAgY29zdF9zYW1wbGVzY2FuKFBhdGggKnBh dGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0 LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJf dHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChw YXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOworCisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdz X21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRoLT5zdGFy dHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29z dCArIHJ1bl9jb3N0OwogfQpAQCAtNDQwLDcgKzQ0OSw4IEBAIGNvc3RfZ2F0aGVyKEdhdGhlclBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXJhbGxlbF9z ZXR1cF9jb3N0OwogCXJ1bl9jb3N0ICs9IHBhcmFsbGVsX3R1cGxlX2Nvc3QgKiBwYXRoLT5wYXRo LnJvd3M7CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlz YWJsZWRfbm9kZXM7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgt PmRpc2FibGVkX25vZGVzCisJCSsgKChyZWwtPnBnc19tYXNrICYgUEdTX0dBVEhFUikgIT0gMCA/ IDAgOiAxKTsKIAlwYXRoLT5wYXRoLnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT5wYXRoLnRvdGFsX2Nvc3QgPSAoc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3QpOwogfQpAQCAtNTA2 LDggKzUxNiw4IEBAIGNvc3RfZ2F0aGVyX21lcmdlKEdhdGhlck1lcmdlUGF0aCAqcGF0aCwgUGxh bm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhcmFsbGVsX3NldHVwX2Nvc3Q7CiAJ cnVuX2Nvc3QgKz0gcGFyYWxsZWxfdHVwbGVfY29zdCAqIHBhdGgtPnBhdGgucm93cyAqIDEuMDU7 CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMKLQkJ KyAoZW5hYmxlX2dhdGhlcm1lcmdlID8gMCA6IDEpOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9k ZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNhYmxlZF9ub2RlcworCQkrICgocmVsLT5wZ3NfbWFzayAm IFBHU19HQVRIRVJfTUVSR0UpICE9IDAgPyAwIDogMSk7CiAJcGF0aC0+cGF0aC5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBpbnB1dF9zdGFydHVwX2Nvc3Q7CiAJcGF0aC0+cGF0aC50b3Rh bF9jb3N0ID0gKHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0ICsgaW5wdXRfdG90YWxfY29zdCk7CiB9 CkBAIC01NTcsNiArNTY3LDcgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJ bmZvICpyb290LCBkb3VibGUgbG9vcF9jb3VudCwKIAlkb3VibGUJCXBhZ2VzX2ZldGNoZWQ7CiAJ ZG91YmxlCQlyYW5kX2hlYXBfcGFnZXM7CiAJZG91YmxlCQlpbmRleF9wYWdlczsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0 aW9ucyAqLwogCUFzc2VydChJc0EoYmFzZXJlbCwgUmVsT3B0SW5mbykgJiYKQEAgLTU4OCw4ICs1 OTksMTEgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBk b3VibGUgbG9vcF9jb3VudCwKIAkJCQkJCQkJCQkJICBwYXRoLT5pbmRleGNsYXVzZXMpOwogCX0K IAotCS8qIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZW5hYmxlX2luZGV4b25seXNjYW47IGluZHhw YXRoLmMgZG9lcyB0aGF0ICovCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9p bmRleHNjYW4gPyAwIDogMTsKKwkvKiBpcyB0aGlzIHNjYW4gdHlwZSBkaXNhYmxlZD8gKi8KKwll bmFibGVfbWFzayA9IChpbmRleG9ubHkgPyBQR1NfSU5ERVhPTkxZU0NBTiA6IFBHU19JTkRFWFND QU4pCisJCXwgKHBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwID8gUEdTX0NPTlNJREVS X05PTlBBUlRJQUwgOiAwKTsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2Vy ZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAKIAkv KgogCSAqIENhbGwgaW5kZXgtYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBjb2RlIHRvIGVzdGltYXRl IHRoZSBwcm9jZXNzaW5nIGNvc3QKQEAgLTEwMTAsNiArMTAyNCw3IEBAIGNvc3RfYml0bWFwX2hl YXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJl bCwKIAlkb3VibGUJCXNwY19zZXFfcGFnZV9jb3N0LAogCQkJCXNwY19yYW5kb21fcGFnZV9jb3N0 OwogCWRvdWJsZQkJVDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX0JJVE1BUFNDQU47CiAK IAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0 KElzQShiYXNlcmVsLCBSZWxPcHRJbmZvKSk7CkBAIC0xMDc1LDYgKzEwOTAsOCBAQCBjb3N0X2Jp dG1hcF9oZWFwX3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmJhc2VyZWwsCiAKIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jvd19lc3QocGF0aC0+cm93cyAvIHBh cmFsbGVsX2Rpdmlzb3IpOwogCX0KKwllbHNlCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOwogCiAKIAlydW5fY29zdCArPSBjcHVfcnVuX2Nvc3Q7CkBAIC0xMDgzLDcg KzExMDAsOCBAQCBjb3N0X2JpdG1hcF9oZWFwX3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0 YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0 LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGVuYWJs ZV9iaXRtYXBzY2FuID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJl bC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRo LT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0 dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTI0MCw2ICsxMjU4LDcgQEAgY29zdF90aWRzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJbnR1cGxlczsKIAlMaXN0 Q2VsbCAgICpsOwogCWRvdWJsZQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7CisJdWludDY0CQllbmFi bGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRp b25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xMjYxLDEwICsxMjgwLDEw IEBAIGNvc3RfdGlkc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCQkvKgog CQkgKiBXZSBtdXN0IHVzZSBhIFRJRCBzY2FuIGZvciBDdXJyZW50T2ZFeHByOyBpbiBhbnkgb3Ro ZXIgY2FzZSwgd2UKLQkJICogc2hvdWxkIGJlIGdlbmVyYXRpbmcgYSBUSUQgc2NhbiBvbmx5IGlm IGVuYWJsZV90aWRzY2FuPXRydWUuIEFsc28sCi0JCSAqIGlmIEN1cnJlbnRPZkV4cHIgaXMgdGhl IHF1YWwsIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZS4KKwkJICogc2hvdWxkIGJlIGdlbmVyYXRp bmcgYSBUSUQgc2NhbiBvbmx5IGlmIFRJRCBzY2FucyBhcmUgYWxsb3dlZC4KKwkJICogQWxzbywg aWYgQ3VycmVudE9mRXhwciBpcyB0aGUgcXVhbCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lLgog CQkgKi8KLQkJQXNzZXJ0KGVuYWJsZV90aWRzY2FuIHx8IElzQShxdWFsLCBDdXJyZW50T2ZFeHBy KSk7CisJCUFzc2VydCgoYmFzZXJlbC0+cGdzX21hc2sgJiBQR1NfVElEU0NBTikgIT0gMCB8fCBJ c0EocXVhbCwgQ3VycmVudE9mRXhwcikpOwogCQlBc3NlcnQobGlzdF9sZW5ndGgodGlkcXVhbHMp ID09IDEgfHwgIUlzQShxdWFsLCBDdXJyZW50T2ZFeHByKSk7CiAKIAkJaWYgKElzQShxdWFsLCBT Y2FsYXJBcnJheU9wRXhwcikpCkBAIC0xMzE2LDEwICsxMzM1LDE0IEBAIGNvc3RfdGlkc2NhbihQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qCiAJICogVGhlcmUgYXJlIGFzc2Vy dGlvbnMgYWJvdmUgdmVyaWZ5aW5nIHRoYXQgd2Ugb25seSByZWFjaCB0aGlzIGZ1bmN0aW9uCi0J ICogZWl0aGVyIHdoZW4gZW5hYmxlX3RpZHNjYW49dHJ1ZSBvciB3aGVuIHRoZSBUSUQgc2NhbiBp cyB0aGUgb25seSBsZWdhbAotCSAqIHBhdGgsIHNvIGl0J3Mgc2FmZSB0byBzZXQgZGlzYWJsZWRf bm9kZXMgdG8gemVybyBoZXJlLgorCSAqIGVpdGhlciB3aGVuIGJhc2VyZWwtPnBnc19tYXNrIGlu Y2x1ZGVzIFBHU19USURTQ0FOIG9yIHdoZW4gdGhlIFRJRCBzY2FuCisJICogaXMgdGhlIG9ubHkg bGVnYWwgcGF0aCwgc28gd2Ugb25seSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBlZmZlY3RzIG9mCisJ ICogUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZS4KIAkgKi8KLQlwYXRoLT5kaXNhYmxlZF9u b2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21h c2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQor CQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDog MDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29z dCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTM1MCw2ICsxMzczLDcgQEAgY29z dF90aWRyYW5nZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQlu c2VxcGFnZXM7CiAJZG91YmxlCQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKIAlkb3VibGUJCXNwY19z ZXFfcGFnZV9jb3N0OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfVElEU0NBTjsKIAogCS8q IFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFz ZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE0MjgsOCArMTQ1MiwxNSBAQCBjb3N0X3RpZHJhbmdlc2Nh bihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jv d19lc3QocGF0aC0+cm93cyAvIHBhcmFsbGVsX2Rpdmlzb3IpOwogCX0KIAotCS8qIHdlIHNob3Vs ZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBlbmFibGVfdGlkc2Nhbj1mYWxzZSAq LwotCUFzc2VydChlbmFibGVfdGlkc2Nhbik7CisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGdlbmVy YXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4gUEdTX1RJRFNDQU4gaXMgdW5zZXQsIGJ1dCB3ZQorCSAq IG1pZ2h0IG5lZWQgdG8gZGlzYWJsZSB0aGlzIHBhdGggZHVlIHRvIFBHU19DT05TSURFUl9OT05Q QVJUSUFMLgorCSAqLworCUFzc2VydCgoYmFzZXJlbC0+cGdzX21hc2sgJiBQR1NfVElEU0NBTikg IT0gMCk7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sg fD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQko YmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsK IAlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1 cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBjcHVfcnVuX2Nvc3Qg KyBkaXNrX3J1bl9jb3N0OwpAQCAtMTQ1Myw2ICsxNDg0LDcgQEAgY29zdF9zdWJxdWVyeXNjYW4o U3VicXVlcnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJTGlzdAkgICAqcXBx dWFsczsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBi YXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBzdWJxdWVyaWVzICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJl bGlkID4gMCk7CkBAIC0xNDgzLDcgKzE1MTUsMTAgQEAgY29zdF9zdWJxdWVyeXNjYW4oU3VicXVl cnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogU3VicXVlcnlTY2FuIG5v ZGUsIHBsdXMgY3B1X3R1cGxlX2Nvc3QgdG8gYWNjb3VudCBmb3Igc2VsZWN0aW9uIGFuZAogCSAq IHByb2plY3Rpb24gb3ZlcmhlYWQuCiAJICovCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9 IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzOworCWlmIChwYXRoLT5wYXRoLnBhcmFsbGVs X3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7 CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25v ZGVzCisJCSsgKCgoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21h c2spID8gMSA6IDApOwogCXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ID0gcGF0aC0+c3VicGF0aC0+ c3RhcnR1cF9jb3N0OwogCXBhdGgtPnBhdGgudG90YWxfY29zdCA9IHBhdGgtPnN1YnBhdGgtPnRv dGFsX2Nvc3Q7CiAKQEAgLTE1MzQsNiArMTU2OSw3IEBAIGNvc3RfZnVuY3Rpb25zY2FuKFBhdGgg KnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CiAJUmFuZ2VU YmxFbnRyeSAqcnRlOwogCVF1YWxDb3N0CWV4cHJjb3N0OworCXVpbnQ2NAkJZW5hYmxlX21hc2sg PSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0 IGFyZSBmdW5jdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE1NzQs NyArMTYxMCwxMCBAQCBjb3N0X2Z1bmN0aW9uc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwog CXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93 czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29y a2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlw YXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNr KSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBf Y29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBA IC0xNTk2LDYgKzE2MzUsNyBAQCBjb3N0X3RhYmxlZnVuY3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKIAlSYW5nZVRibEVudHJ5ICpydGU7 CiAJUXVhbENvc3QJZXhwcmNvc3Q7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBT aG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIGZ1bmN0aW9u cyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTYzMSw3ICsxNjcxLDEwIEBA IGNvc3RfdGFibGVmdW5jc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFy dHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9 IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQor CQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVf bWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNjUxLDYgKzE2 OTQsNyBAQCBjb3N0X3ZhbHVlc3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJ Q29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9w ZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBi ZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIHZhbHVlcyBsaXN0cyAqLwogCUFz c2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTY3OSw3ICsxNzIzLDEwIEBAIGNvc3RfdmFs dWVzc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0g cGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0 YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25v ZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFz ayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJ CShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAw OwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0 ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNzAyLDYgKzE3NDksNyBAQCBjb3N0 X2N0ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3Qg PSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJh c2UgcmVsYXRpb25zIHRoYXQgYXJlIENURXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAw KTsKQEAgLTE3MjcsNyArMTc3NSwxMCBAQCBjb3N0X2N0ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3Quc3Rh cnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnBlcl90dXBsZSAqIHBh dGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFs bGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBz dGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0 OwogfQpAQCAtMTc0NCw2ICsxNzk1LDcgQEAgY29zdF9uYW1lZHR1cGxlc3RvcmVzY2FuKFBhdGgg KnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29z dAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21h c2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0 aGF0IGFyZSBUdXBsZXN0b3JlcyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAt MTc2NSw3ICsxODE3LDEwIEBAIGNvc3RfbmFtZWR0dXBsZXN0b3Jlc2NhbihQYXRoICpwYXRoLCBQ bGFubmVySW5mbyAqcm9vdCwKIAljcHVfcGVyX3R1cGxlICs9IGNwdV90dXBsZV9jb3N0ICsgcXBx dWFsX2Nvc3QucGVyX3R1cGxlOwogCXJ1bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUgKiBiYXNlcmVs LT50dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFs bGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBz dGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0 OwogfQpAQCAtMTc4Miw2ICsxODM3LDcgQEAgY29zdF9yZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBs YW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxf Y29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwog CiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBSVEVfUkVTVUxUIGJhc2UgcmVsYXRpb25z ICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xODAwLDcgKzE4NTYsMTAgQEAg Y29zdF9yZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWNwdV9wZXJf dHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIHFwcXVhbF9jb3N0LnBlcl90dXBsZTsKIAlydW5fY29z dCArPSBjcHVfcGVyX3R1cGxlICogYmFzZXJlbC0+dHVwbGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRf bm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9t YXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0K KwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6 IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE4MTgsNiArMTg3Nyw3IEBAIGNv c3RfcmVjdXJzaXZlX3VuaW9uKFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVy bSkKIAlDb3N0CQlzdGFydHVwX2Nvc3Q7CiAJQ29zdAkJdG90YWxfY29zdDsKIAlkb3VibGUJCXRv dGFsX3Jvd3M7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBXZSBwcm9iYWJseSBo YXZlIGRlY2VudCBlc3RpbWF0ZXMgZm9yIHRoZSBub24tcmVjdXJzaXZlIHRlcm0gKi8KIAlzdGFy dHVwX2Nvc3QgPSBucnRlcm0tPnN0YXJ0dXBfY29zdDsKQEAgLTE4NDAsNyArMTkwMCwxMCBAQCBj b3N0X3JlY3Vyc2l2ZV91bmlvbihQYXRoICpydW5pb24sIFBhdGggKm5ydGVybSwgUGF0aCAqcnRl cm0pCiAJICovCiAJdG90YWxfY29zdCArPSBjcHVfdHVwbGVfY29zdCAqIHRvdGFsX3Jvd3M7CiAK LQlydW5pb24tPmRpc2FibGVkX25vZGVzID0gbnJ0ZXJtLT5kaXNhYmxlZF9ub2RlcyArIHJ0ZXJt LT5kaXNhYmxlZF9ub2RlczsKKwlpZiAocnVuaW9uLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJ CWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXJ1bmlvbi0+ZGlzYWJs ZWRfbm9kZXMgPQorCQkocnVuaW9uLT5wYXJlbnQtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9 IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcnVuaW9uLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nv c3Q7CiAJcnVuaW9uLT50b3RhbF9jb3N0ID0gdG90YWxfY29zdDsKIAlydW5pb24tPnJvd3MgPSB0 b3RhbF9yb3dzOwpAQCAtMjExMCw3ICsyMTczLDExIEBAIGNvc3RfaW5jcmVtZW50YWxfc29ydChQ YXRoICpwYXRoLAogCiAJcGF0aC0+cm93cyA9IGlucHV0X3R1cGxlczsKIAotCS8qIHNob3VsZCBu b3QgZ2VuZXJhdGUgdGhlc2UgcGF0aHMgd2hlbiBlbmFibGVfaW5jcmVtZW50YWxfc29ydD1mYWxz ZSAqLworCS8qCisJICogV2Ugc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGVzZSBwYXRocyB3aGVuIGVu YWJsZV9pbmNyZW1lbnRhbF9zb3J0PWZhbHNlLgorCSAqIFdlIGNhbiBpZ25vcmUgUEdTX0NPTlNJ REVSX05PTlBBUlRJQUwgaGVyZSwgYmVjYXVzZSBpZiBpdCdzIHJlbGV2YW50LAorCSAqIGl0IHdp bGwgaGF2ZSBhbHJlYWR5IGFmZmVjdGVkIHRoZSBpbnB1dCBwYXRoLgorCSAqLwogCUFzc2VydChl bmFibGVfaW5jcmVtZW50YWxfc29ydCk7CiAJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9k aXNhYmxlZF9ub2RlczsKIApAQCAtMjE0OCw2ICsyMjE1LDEwIEBAIGNvc3Rfc29ydChQYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCXN0YXJ0dXBfY29zdCArPSBpbnB1dF9jb3N0Owog CisJLyoKKwkgKiBXZSBjYW4gaWdub3JlIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGhlcmUsIGJl Y2F1c2UgaWYgaXQncyByZWxldmFudCwKKwkgKiBpdCB3aWxsIGhhdmUgYWxyZWFkeSBhZmZlY3Rl ZCB0aGUgaW5wdXQgcGF0aC4KKwkgKi8KIAlwYXRoLT5yb3dzID0gdHVwbGVzOwogCXBhdGgtPmRp c2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMgKyAoZW5hYmxlX3NvcnQgPyAwIDog MSk7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwpAQCAtMjIzOSw5ICsyMzEw LDE1IEBAIGFwcGVuZF9ub25wYXJ0aWFsX2Nvc3QoTGlzdCAqc3VicGF0aHMsIGludCBudW1wYXRo cywgaW50IHBhcmFsbGVsX3dvcmtlcnMpCiB2b2lkCiBjb3N0X2FwcGVuZChBcHBlbmRQYXRoICph cGF0aCwgUGxhbm5lckluZm8gKnJvb3QpCiB7CisJUmVsT3B0SW5mbyAqcmVsID0gYXBhdGgtPnBh dGgucGFyZW50OwogCUxpc3RDZWxsICAgKmw7CisJdWludDY0CQllbmFibGVfbWFzayA9IFBHU19B UFBFTkQ7CisKKwlpZiAoYXBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFi bGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAotCWFwYXRoLT5wYXRoLmRpc2Fi bGVkX25vZGVzID0gMDsKKwlhcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9CisJCShyZWwtPnBn c19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJYXBhdGgtPnBh dGguc3RhcnR1cF9jb3N0ID0gMDsKIAlhcGF0aC0+cGF0aC50b3RhbF9jb3N0ID0gMDsKIAlhcGF0 aC0+cGF0aC5yb3dzID0gMDsKQEAgLTI0NTEsMTEgKzI1MjgsMTYgQEAgY29zdF9tZXJnZV9hcHBl bmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICBDb3N0IGlucHV0X3N0YXJ0 dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJCSAgZG91YmxlIHR1cGxlcykKIHsK KwlSZWxPcHRJbmZvICpyZWwgPSBwYXRoLT5wYXJlbnQ7CiAJQ29zdAkJc3RhcnR1cF9jb3N0ID0g MDsKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJQ29zdAkJY29tcGFyaXNvbl9jb3N0OwogCWRvdWJs ZQkJTjsKIAlkb3VibGUJCWxvZ047CisJdWludDY0CQllbmFibGVfbWFzayA9IFBHU19NRVJHRV9B UFBFTkQ7CisKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFz ayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAogCS8qCiAJICogQXZvaWQgbG9nKDApLi4u CkBAIC0yNDc4LDcgKzI1NjAsOSBAQCBjb3N0X21lcmdlX2FwcGVuZChQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAkgKi8KIAlydW5fY29zdCArPSBjcHVfdHVwbGVfY29zdCAqIEFQUEVO RF9DUFVfQ09TVF9NVUxUSVBMSUVSICogdHVwbGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMg PSBpbnB1dF9kaXNhYmxlZF9ub2RlczsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShyZWwt PnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CisJcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgKz0gaW5wdXRfZGlzYWJsZWRfbm9kZXM7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0ICsgaW5wdXRfc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdCArIGlucHV0X3RvdGFsX2Nvc3Q7CiB9CkBAIC0y NDk3LDcgKzI1ODEsNyBAQCBjb3N0X21lcmdlX2FwcGVuZChQYXRoICpwYXRoLCBQbGFubmVySW5m byAqcm9vdCwKICAqLwogdm9pZAogY29zdF9tYXRlcmlhbChQYXRoICpwYXRoLAotCQkJICBpbnQg aW5wdXRfZGlzYWJsZWRfbm9kZXMsCisJCQkgIGJvb2wgZW5hYmxlZCwgaW50IGlucHV0X2Rpc2Fi bGVkX25vZGVzLAogCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3Rh bF9jb3N0LAogCQkJICBkb3VibGUgdHVwbGVzLCBpbnQgd2lkdGgpCiB7CkBAIC0yNTA2LDYgKzI1 OTAsMTEgQEAgY29zdF9tYXRlcmlhbChQYXRoICpwYXRoLAogCWRvdWJsZQkJbmJ5dGVzID0gcmVs YXRpb25fYnl0ZV9zaXplKHR1cGxlcywgd2lkdGgpOwogCWRvdWJsZQkJd29ya19tZW1fYnl0ZXMg PSB3b3JrX21lbSAqIChTaXplKSAxMDI0OwogCisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMg PT0gMCAmJgorCQlwYXRoLT5wYXJlbnQgIT0gTlVMTCAmJgorCQkocGF0aC0+cGFyZW50LT5wZ3Nf bWFzayAmIFBHU19DT05TSURFUl9OT05QQVJUSUFMKSA9PSAwKQorCQllbmFibGVkID0gZmFsc2U7 CisKIAlwYXRoLT5yb3dzID0gdHVwbGVzOwogCiAJLyoKQEAgLTI1MzUsNyArMjYyNCw3IEBAIGNv c3RfbWF0ZXJpYWwoUGF0aCAqcGF0aCwKIAkJcnVuX2Nvc3QgKz0gc2VxX3BhZ2VfY29zdCAqIG5w YWdlczsKIAl9CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVz ICsgKGVuYWJsZV9tYXRlcmlhbCA/IDAgOiAxKTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlu cHV0X2Rpc2FibGVkX25vZGVzICsgKGVuYWJsZWQgPyAwIDogMSk7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBy dW5fY29zdDsKIH0KQEAgLTMyODcsNyArMzM3Niw3IEBAIGNvc3RfZ3JvdXAoUGF0aCAqcGF0aCwg UGxhbm5lckluZm8gKnJvb3QsCiAgKi8KIHZvaWQKIGluaXRpYWxfY29zdF9uZXN0bG9vcChQbGFu bmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3BhY2UgKndvcmtzcGFjZSwKLQkJCQkJICBKb2lu VHlwZSBqb2ludHlwZSwKKwkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwgdWludDY0IGVuYWJsZV9t YXNrLAogCQkJCQkgIFBhdGggKm91dGVyX3BhdGgsIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJCSAg Sm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewpAQCAtMzMwMSw3ICszMzkwLDcgQEAgaW5pdGlh bF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29y a3NwYWNlLAogCUNvc3QJCWlubmVyX3Jlc2Nhbl9ydW5fY29zdDsKIAogCS8qIENvdW50IHVwIGRp c2FibGVkIG5vZGVzLiAqLwotCWRpc2FibGVkX25vZGVzID0gZW5hYmxlX25lc3Rsb29wID8gMCA6 IDE7CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0cmEtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09 IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJZGlzYWJsZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlz YWJsZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9kZXMgKz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9k ZXM7CiAKQEAgLTM3MDEsNyArMzc5MCwxOSBAQCBpbml0aWFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5u ZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCUFzc2VydChvdXRl cnN0YXJ0c2VsIDw9IG91dGVyZW5kc2VsKTsKIAlBc3NlcnQoaW5uZXJzdGFydHNlbCA8PSBpbm5l cmVuZHNlbCk7CiAKLQlkaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9tZXJnZWpvaW4gPyAwIDogMTsK KwkvKgorCSAqIFdlIGRvbid0IGRlY2lkZSB3aGV0aGVyIHRvIG1hdGVyaWFsaXplIHRoZSBpbm5l ciBwYXRoIHVudGlsIHdlIGdldCB0bworCSAqIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCksIHNvIHdl IGRvbid0IGtub3cgd2hldGhlciB0byBjaGVjayB0aGUgcGdzX21hc2sKKwkgKiBhZ2FpbiBQR1Nf TUVSR0VKT0lOX1BMQUlOIG9yIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUuIEluc3RlYWQsIHdl CisJICoganVzdCBhY2NvdW50IGZvciBhbnkgY2hpbGQgbm9kZXMgaGVyZSBhbmQgYXNzdW1lIHRo YXQgdGhpcyBub2RlIGlzIG5vdAorCSAqIGl0c2xlZiBkaXNhYmxlZDsgd2UgY2FuIHNvcnQgb3V0 IHRoZSBkZXRhaWxzIGluIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCkuCisJICoKKwkgKiAoV2UgY291 bGQgYmUgbW9yZSBwcmVjaXNlIGhlcmUgYnkgc2V0dGluZyBkaXNhYmxlZF9ub2RlcyB0byAxIGF0 IHRoaXMKKwkgKiBzdGFnZSBpZiBib3RoIFBHU19NRVJHRUpPSU5fUExBSU4gYW5kIFBHU19NRVJH RUpPSU5fTUFURVJJQUxJWkUgYXJlCisJICogZGlzYWJsZWQsIGJ1dCB0aGF0IHNlZW1zIHRvIGFn YWluc3QgdGhlIGlkZWEgb2YgbWFraW5nIHRoaXMgZnVuY3Rpb24KKwkgKiBwcm9kdWNlIGEgcXVp Y2ssIG9wdGltaXN0aWMgYXBwcm94aW1hdGlvbiBvZiB0aGUgZmluYWwgY29zdC4pCisJICovCisJ ZGlzYWJsZWRfbm9kZXMgPSAwOwogCiAJLyogY29zdCBvZiBzb3VyY2UgZGF0YSAqLwogCkBAIC0z ODgwLDkgKzM5ODEsNyBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwg TWVyZ2VQYXRoICpwYXRoLAogCWRvdWJsZQkJbWVyZ2Vqb2ludHVwbGVzLAogCQkJCXJlc2Nhbm5l ZHR1cGxlczsKIAlkb3VibGUJCXJlc2NhbnJhdGlvOwotCi0JLyogU2V0IHRoZSBudW1iZXIgb2Yg ZGlzYWJsZWQgbm9kZXMuICovCi0JcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdv cmtzcGFjZS0+ZGlzYWJsZWRfbm9kZXM7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkv KiBQcm90ZWN0IHNvbWUgYXNzdW1wdGlvbnMgYmVsb3cgdGhhdCByb3djb3VudHMgYXJlbid0IHpl cm8gKi8KIAlpZiAoaW5uZXJfcGF0aF9yb3dzIDw9IDApCkBAIC00MDEyLDE2ICs0MTExLDIwIEBA IGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgs CiAJCXBhdGgtPm1hdGVyaWFsaXplX2lubmVyID0gZmFsc2U7CiAKIAkvKgotCSAqIFByZWZlciBt YXRlcmlhbGl6aW5nIGlmIGl0IGxvb2tzIGNoZWFwZXIsIHVubGVzcyB0aGUgdXNlciBoYXMgYXNr ZWQgdG8KLQkgKiBzdXBwcmVzcyBtYXRlcmlhbGl6YXRpb24uCisJICogSWYgbWVyZ2Ugam9pbnMg d2l0aCBtYXRlcmlhbGl6YXRpb24gYXJlIGVuYWJsZWQsIHRoZW4gY2hvb3NlCisJICogbWF0ZXJp YWxpemF0aW9uIGlmIGVpdGhlciAoYSkgaXQgbG9va3MgY2hlYXBlciBvciAoYikgbWVyZ2Ugam9p bnMKKwkgKiB3aXRob3V0IG1hdGVyaWFsaXphdGlvbiBhcmUgZGlzYWJsZWQuCiAJICovCi0JZWxz ZSBpZiAoZW5hYmxlX21hdGVyaWFsICYmIG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0 KQorCWVsc2UgaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpF KSAhPSAwICYmCisJCQkgKG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0IHx8CisJCQkg IChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX1BMQUlOKSA9PSAwKSkKIAkJcGF0aC0+ bWF0ZXJpYWxpemVfaW5uZXIgPSB0cnVlOwogCiAJLyoKLQkgKiBFdmVuIGlmIG1hdGVyaWFsaXpp bmcgZG9lc24ndCBsb29rIGNoZWFwZXIsIHdlICptdXN0KiBkbyBpdCBpZiB0aGUKLQkgKiBpbm5l ciBwYXRoIGlzIHRvIGJlIHVzZWQgZGlyZWN0bHkgKHdpdGhvdXQgc29ydGluZykgYW5kIGl0IGRv ZXNuJ3QKLQkgKiBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkgKiBSZWdhcmRsZXNzIG9mIHdoYXQg cGxhbiBzaGFwZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQgdGhlIGNvc3RzIHNlZW0gdG8KKwkgKiBi ZSwgd2UgKm11c3QqIG1hdGVyaWFsaXplIGl0IGlmIHRoZSBpbm5lciBwYXRoIGlzIHRvIGJlIHVz ZWQgZGlyZWN0bHkKKwkgKiAod2l0aG91dCBzb3J0aW5nKSBhbmQgaXQgZG9lc24ndCBzdXBwb3J0 IG1hcmsvcmVzdG9yZS4gUGxhbm5lciBmYWlsdXJlCisJICogaXMgbm90IGFuIG9wdGlvbiEKIAkg KgogCSAqIFNpbmNlIHRoZSBpbm5lciBzaWRlIG11c3QgYmUgb3JkZXJlZCwgYW5kIG9ubHkgU29y dHMgYW5kIEluZGV4U2NhbnMgY2FuCiAJICogY3JlYXRlIG9yZGVyIHRvIGJlZ2luIHdpdGgsIGFu ZCB0aGV5IGJvdGggc3VwcG9ydCBtYXJrL3Jlc3RvcmUsIHlvdQpAQCAtNDAyOSwxMCArNDEzMiw2 IEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBh dGgsCiAJICogbWVyZ2Ugam9pbnMgY2FuICpwcmVzZXJ2ZSogdGhlIG9yZGVyIG9mIHRoZWlyIGlu cHV0cywgc28gdGhleSBjYW4gYmUKIAkgKiBzZWxlY3RlZCBhcyB0aGUgaW5wdXQgb2YgYSBtZXJn ZWpvaW4sIGFuZCB0aGV5IGRvbid0IHN1cHBvcnQKIAkgKiBtYXJrL3Jlc3RvcmUgYXQgcHJlc2Vu dC4KLQkgKgotCSAqIFdlIGRvbid0IHRlc3QgdGhlIHZhbHVlIG9mIGVuYWJsZV9tYXRlcmlhbCBo ZXJlLCBiZWNhdXNlCi0JICogbWF0ZXJpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0 bmVzcyBpbiB0aGlzIGNhc2UsIGFuZCB0dXJuaW5nCi0JICogaXQgb2ZmIGRvZXMgbm90IGVudGl0 bGUgdXMgdG8gZGVsaXZlciBhbiBpbnZhbGlkIHBsYW4uCiAJICovCiAJZWxzZSBpZiAoaW5uZXJz b3J0a2V5cyA9PSBOSUwgJiYKIAkJCSAhRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoaW5uZXJfcGF0 aCkpCkBAIC00MDQ2LDEwICs0MTQ1LDExIEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJ bmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJICogdGhvdWdoLgogCSAqCiAJICogU2luY2Ug bWF0ZXJpYWxpemF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIHRoaXMgY2Fz ZSwKLQkgKiByYXRoZXIgdGhhbiBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0 IGlmIGVuYWJsZV9tYXRlcmlhbCBpcwotCSAqIG9mZi4KKwkgKiByYXRoZXIgdGhhbiBuZWNlc3Nh cnkgZm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0IGlmIG1hdGVyaWFsaXphdGlvbiBpcworCSAq IHN3aXRjaGVkIG9mZi4KIAkgKi8KLQllbHNlIGlmIChlbmFibGVfbWF0ZXJpYWwgJiYgaW5uZXJz b3J0a2V5cyAhPSBOSUwgJiYKKwllbHNlIGlmICgoZXh0cmEtPnBnc19tYXNrICYgUEdTX01FUkdF Sk9JTl9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJIGlubmVyc29ydGtleXMgIT0gTklMICYmCiAJ CQkgcmVsYXRpb25fYnl0ZV9zaXplKGlubmVyX3BhdGhfcm93cywKIAkJCQkJCQkJaW5uZXJfcGF0 aC0+cGF0aHRhcmdldC0+d2lkdGgpID4KIAkJCSB3b3JrX21lbSAqIChTaXplKSAxMDI0KQpAQCAt NDA1NywxMSArNDE1NywyOSBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9v dCwgTWVyZ2VQYXRoICpwYXRoLAogCWVsc2UKIAkJcGF0aC0+bWF0ZXJpYWxpemVfaW5uZXIgPSBm YWxzZTsKIAotCS8qIENoYXJnZSB0aGUgcmlnaHQgaW5jcmVtZW50YWwgY29zdCBmb3IgdGhlIGNo b3NlbiBjYXNlICovCisJLyogR2V0IHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMsIG5vdCB5 ZXQgaW5jbHVkaW5nIHRoaXMgb25lLiAqLworCXBhdGgtPmpwYXRoLnBhdGguZGlzYWJsZWRfbm9k ZXMgPSB3b3Jrc3BhY2UtPmRpc2FibGVkX25vZGVzOworCisJLyoKKwkgKiBDaGFyZ2UgdGhlIHJp Z2h0IGluY3JlbWVudGFsIGNvc3QgZm9yIHRoZSBjaG9zZW4gY2FzZSwgYW5kIHVwZGF0ZQorCSAq IGVuYWJsZV9tYXNrIGFzIGFwcHJvcHJpYXRlLgorCSAqLwogCWlmIChwYXRoLT5tYXRlcmlhbGl6 ZV9pbm5lcikKKwl7CiAJCXJ1bl9jb3N0ICs9IG1hdF9pbm5lcl9jb3N0OworCQllbmFibGVfbWFz ayB8PSBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFOworCX0KIAllbHNlCisJewogCQlydW5fY29z dCArPSBiYXJlX2lubmVyX2Nvc3Q7CisJCWVuYWJsZV9tYXNrIHw9IFBHU19NRVJHRUpPSU5fUExB SU47CisJfQorCisJLyogSW5jcmVtZW50YWwgY291bnQgb2YgZGlzYWJsZWQgbm9kZXMgaWYgdGhp cyBub2RlIGlzIGRpc2FibGVkLiAqLworCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFsbGVsX3dv cmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJ aWYgKChleHRyYS0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2spCisJCSsr cGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlczsKIAogCS8qIENQVSBjb3N0cyAqLwogCkBA IC00MTk5LDkgKzQzMTcsMTMgQEAgaW5pdGlhbF9jb3N0X2hhc2hqb2luKFBsYW5uZXJJbmZvICpy b290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCWludAkJCW51bWJhdGNoZXM7CiAJ aW50CQkJbnVtX3NrZXdfbWN2czsKIAlzaXplX3QJCXNwYWNlX2FsbG93ZWQ7CS8qIHVudXNlZCAq LworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfSEFTSEpPSU47CisKKwlpZiAob3V0ZXJfcGF0 aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTDsKIAogCS8qIENvdW50IHVwIGRpc2FibGVkIG5vZGVzLiAqLwotCWRpc2FibGVk X25vZGVzID0gZW5hYmxlX2hhc2hqb2luID8gMCA6IDE7CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0 cmEtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJZGlz YWJsZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9k ZXMgKz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9pbmR4cGF0aC5jCmluZGV4IDI2NTRjNTljNGM2Li40NTk5OGJiZTgyOSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0yMjMzLDggKzIyMzMsOCBAQCBjaGVja19pbmRl eF9vbmx5KFJlbE9wdEluZm8gKnJlbCwgSW5kZXhPcHRJbmZvICppbmRleCkKIAlMaXN0Q2VsbCAg ICpsYzsKIAlpbnQJCQlpOwogCi0JLyogSW5kZXgtb25seSBzY2FucyBtdXN0IGJlIGVuYWJsZWQg Ki8KLQlpZiAoIWVuYWJsZV9pbmRleG9ubHlzY2FuKQorCS8qIElmIHdlJ3JlIG5vdCBhbGxvd2Vk IHRvIGNvbnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGdpdmUgdXAgbm93ICovCisJaWYgKChyZWwt PnBnc19tYXNrICYgUEdTX0NPTlNJREVSX0lOREVYT05MWSkgPT0gMCkKIAkJcmV0dXJuIGZhbHNl OwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRo LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCmluZGV4IGVhNWI2NDE1 MTg2Li4zODhkODQ1NmZmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv am9pbnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBA IC0yOSw4ICsyOSw5IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvdHlwY2FjaGUuaCIKIAotLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBp biBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCisvKiBIb29rcyBmb3IgcGx1Z2lucyB0byBnZXQg Y29udHJvbCBpbiBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCiBzZXRfam9pbl9wYXRobGlzdF9o b29rX3R5cGUgc2V0X2pvaW5fcGF0aGxpc3RfaG9vayA9IE5VTEw7Citqb2luX3BhdGhfc2V0dXBf aG9va190eXBlIGpvaW5fcGF0aF9zZXR1cF9ob29rID0gTlVMTDsKIAogLyoKICAqIFBhdGhzIHBh cmFtZXRlcml6ZWQgYnkgYSBwYXJlbnQgcmVsIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHBhcmFt ZXRlcml6ZWQKQEAgLTE1MSw2ICsxNTIsNyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVy SW5mbyAqcm9vdCwKIAlleHRyYS5tZXJnZWNsYXVzZV9saXN0ID0gTklMOwogCWV4dHJhLnNqaW5m byA9IHNqaW5mbzsKIAlleHRyYS5wYXJhbV9zb3VyY2VfcmVscyA9IE5VTEw7CisJZXh0cmEucGdz X21hc2sgPSBqb2lucmVsLT5wZ3NfbWFzazsKIAogCS8qCiAJICogU2VlIGlmIHRoZSBpbm5lciBy ZWxhdGlvbiBpcyBwcm92YWJseSB1bmlxdWUgZm9yIHRoaXMgb3V0ZXIgcmVsLgpAQCAtMjA3LDEz ICsyMDksMzggQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJaWYg KGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSIHx8IGpvaW50eXBlID09IEpPSU5fVU5JUVVF X0lOTkVSKQogCQlqb2ludHlwZSA9IEpPSU5fSU5ORVI7CiAKKwkvKgorCSAqIEdpdmUgZXh0ZW5z aW9ucyBhIGNoYW5jZSB0byB0YWtlIGNvbnRyb2wuIEluIHBhcnRpY3VsYXIsIGFuIGV4dGVuc2lv bgorCSAqIG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IGV4dHJhLnBnc19tYXNrLiBJdCdzIHBvc3NpYmxl IHRvIG92ZXJyaWRlIHBnc19tYXNrCisJICogb24gYSBxdWVyeS13aWRlIGJhc2lzIHVzaW5nIGpv aW5fc2VhcmNoX2hvb2ssIG9yIGZvciBhIHBhcnRpY3VsYXIKKwkgKiByZWxhdGlvbiB1c2luZyBq b2lucmVsX3NldHVwX2hvb2ssIGJ1dCBleHRlbnNpb25zIHRoYXQgd2FudCB0byBwcm92aWRlCisJ ICogZGlmZmVyZW50IGFkdmljZSBmb3IgdGhlIHNhbWUgam9pbnJlbCBiYXNlZCBvbiB0aGUgY2hv aWNlIG9mIGlubmVycmVsCisJICogYW5kIG91dGVycmVsIHdpbGwgbmVlZCB0byB1c2UgdGhpcyBo b29rLgorCSAqCisJICogQSB2ZXJ5IHNpbXBsZSB3YXkgZm9yIGFuIGV4dGVuc2lvbiB0byB1c2Ug dGhpcyBob29rIGlzIHRvIHNldAorCSAqIGV4dHJhLnBnc19tYXNrID0gMCwgaWYgaXQgc2ltcGx5 IGRvZXNuJ3Qgd2FudCBhbnkgb2YgdGhlIHBhdGhzCisJICogZ2VuZXJhdGVkIGJ5IHRoaXMgY2Fs bCB0byBhZGRfcGF0aHNfdG9fam9pbnJlbCgpIHRvIGJlIHNlbGVjdGVkLiBBbgorCSAqIGV4dGVu c2lvbiBjb3VsZCB1c2UgdGhpcyB0ZWNobmlxdWUgdG8gY29uc3RyYWluIHRoZSBqb2luIG9yZGVy LCBzaW5jZQorCSAqIGl0IGNvdWxkIHRoZXJlYnkgYXJyYW5nZSB0byByZWplY3QgYWxsIHBhdGhz IGZyb20gam9pbiBvcmRlcnMgdGhhdCBpdAorCSAqIGRvZXMgbm90IGxpa2UuIEFuIGV4dGVuc2lv biBjYW4gYWxzbyBzZWxlY3RpdmVseSBjbGVhciBiaXRzIGZyb20KKwkgKiBleHRyYS5wZ3NfbWFz ayB0byBydWxlIG91dCBzcGVjaWZpYyB0ZWNobmlxdWVzIGZvciBzcGVjaWZpYyBqb2lucywgb3IK KwkgKiBldmVuIHJlcGxhY2UgdGhlIG1hc2sgZW50aXJlbHkuCisJICoKKwkgKiBOQjogQmVsb3cg dGhpcyBwb2ludCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FyZWZ1bCB0byByZWZlcmVuY2UK KwkgKiBleHRyYS5wZ3NfbWFzayByYXRoZXIgdGhhbiByZWwtPnBnc19tYXNrIHRvIGF2b2lkIGRp c3JlZ2FyZGluZyBhbnkKKwkgKiBjaGFuZ2VzIG1hZGUgYnkgdGhlIGhvb2sgd2UncmUgYWJvdXQg dG8gY2FsbC4KKwkgKi8KKwlpZiAoam9pbl9wYXRoX3NldHVwX2hvb2spCisJCWpvaW5fcGF0aF9z ZXR1cF9ob29rKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkgam9p bnR5cGUsICZleHRyYSk7CisKIAkvKgogCSAqIEZpbmQgcG90ZW50aWFsIG1lcmdlam9pbiBjbGF1 c2VzLiAgV2UgY2FuIHNraXAgdGhpcyBpZiB3ZSBhcmUgbm90CiAJICogaW50ZXJlc3RlZCBpbiBk b2luZyBhIG1lcmdlam9pbi4gIEhvd2V2ZXIsIG1lcmdlam9pbiBtYXkgYmUgb3VyIG9ubHkKLQkg KiB3YXkgb2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBvdmVycmlkZSBlbmFi bGVfbWVyZ2Vqb2luIGlmCi0JICogaXQncyBhIGZ1bGwgam9pbi4KKwkgKiB3YXkgb2YgaW1wbGVt ZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBpbiB0aGF0IGNhc2Ugd2UgZG9uJ3QgY2FyZQor CSAqIHdoZXRoZXIgbWVyZ2Vqb2lucyBhcmUgZGlzYWJsZWQuCiAJICovCi0JaWYgKGVuYWJsZV9t ZXJnZWpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQorCWlmICgoZXh0cmEucGdzX21hc2sg JiBQR1NfTUVSR0VKT0lOX0FOWSkgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWV4 dHJhLm1lcmdlY2xhdXNlX2xpc3QgPSBzZWxlY3RfbWVyZ2Vqb2luX2NsYXVzZXMocm9vdCwKIAkJ CQkJCQkJCQkJCQkJICBqb2lucmVsLAogCQkJCQkJCQkJCQkJCQkgIG91dGVycmVsLApAQCAtMzIx LDEwICszNDgsMTAgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAK IAkvKgogCSAqIDQuIENvbnNpZGVyIHBhdGhzIHdoZXJlIGJvdGggb3V0ZXIgYW5kIGlubmVyIHJl bGF0aW9ucyBtdXN0IGJlIGhhc2hlZAotCSAqIGJlZm9yZSBiZWluZyBqb2luZWQuICBBcyBhYm92 ZSwgZGlzcmVnYXJkIGVuYWJsZV9oYXNoam9pbiBmb3IgZnVsbAotCSAqIGpvaW5zLCBiZWNhdXNl IHRoZXJlIG1heSBiZSBubyBvdGhlciBhbHRlcm5hdGl2ZS4KKwkgKiBiZWZvcmUgYmVpbmcgam9p bmVkLiAgQXMgYWJvdmUsIHdoZW4gaXQncyBhIGZ1bGwgam9pbiwgd2UgbXVzdCB0cnkgdGhpcwor CSAqIGV2ZW4gd2hlbiB0aGUgcGF0aCB0eXBlIGlzIGRpc2FibGVkLCBiZWNhdXNlIGl0IG1heSBi ZSBvdXIgb25seSBvcHRpb24uCiAJICovCi0JaWYgKGVuYWJsZV9oYXNoam9pbiB8fCBqb2ludHlw ZSA9PSBKT0lOX0ZVTEwpCisJaWYgKChleHRyYS5wZ3NfbWFzayAmIFBHU19IQVNISk9JTikgIT0g MCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWhhc2hfaW5uZXJfYW5kX291dGVyKHJvb3Qs IGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKIAkJCQkJCQkgam9pbnR5cGUsICZleHRyYSk7 CiAKQEAgLTMzMyw3ICszNjAsNyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5mbyAq cm9vdCwKIAkgKiB0byB0aGUgc2FtZSBzZXJ2ZXIgYW5kIGFzc2lnbmVkIHRvIHRoZSBzYW1lIHVz ZXIgdG8gY2hlY2sgYWNjZXNzCiAJICogcGVybWlzc2lvbnMgYXMsIGdpdmUgdGhlIEZEVyBhIGNo YW5jZSB0byBwdXNoIGRvd24gam9pbnMuCiAJICovCi0JaWYgKGpvaW5yZWwtPmZkd3JvdXRpbmUg JiYKKwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX0ZPUkVJR05KT0lOKSAhPSAwICYmIGpvaW5y ZWwtPmZkd3JvdXRpbmUgJiYKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5Q YXRocykKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5QYXRocyhyb290LCBq b2lucmVsLAogCQkJCQkJCQkJCQkJIG91dGVycmVsLCBpbm5lcnJlbCwKQEAgLTM0Miw4ICszNjks MTMgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJLyoKIAkgKiA2 LiBGaW5hbGx5LCBnaXZlIGV4dGVuc2lvbnMgYSBjaGFuY2UgdG8gbWFuaXB1bGF0ZSB0aGUgcGF0 aCBsaXN0LiAgVGhleQogCSAqIGNvdWxkIGFkZCBuZXcgcGF0aHMgKHN1Y2ggYXMgQ3VzdG9tUGF0 aHMpIGJ5IGNhbGxpbmcgYWRkX3BhdGgoKSwgb3IKLQkgKiBhZGRfcGFydGlhbF9wYXRoKCkgaWYg cGFyYWxsZWwgYXdhcmUuICBUaGV5IGNvdWxkIGFsc28gZGVsZXRlIG9yIG1vZGlmeQotCSAqIHBh dGhzIGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUuCisJICogYWRkX3BhcnRpYWxfcGF0aCgpIGlmIHBh cmFsbGVsIGF3YXJlLgorCSAqCisJICogSW4gdGhlb3J5LCBleHRlbnNpb25zIGNvdWxkIGFsc28g dXNlIHRoaXMgaG9vayB0byBkZWxldGUgb3IgbW9kaWZ5CisJICogcGF0aHMgYWRkZWQgYnkgdGhl IGNvcmUgY29kZSwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgZGlmZmljdWx0IHRvIG1ha2UKKwkg KiB3b3JrLCBzaW5jZSBpdCdzIHRvbyBsYXRlIHRvIGdldCBiYWNrIGFueSBwYXRocyB0aGF0IGhh dmUgYWxyZWFkeSBiZWVuCisJICogZGlzY2FyZGVkIGJ5IGFkZF9wYXRoKCkgb3IgYWRkX3BhcnRp YWxfcGF0aCgpLiBJZiB5b3UncmUgdHJ5aW5nIHRvCisJICogc3VwcHJlc3MgcGF0aHMsIGNvbnNp ZGVyIHVzaW5nIGpvaW5fcGF0aF9zZXR1cF9ob29rIGluc3RlYWQuCiAJICovCiAJaWYgKHNldF9q b2luX3BhdGhsaXN0X2hvb2spCiAJCXNldF9qb2luX3BhdGhsaXN0X2hvb2socm9vdCwgam9pbnJl bCwgb3V0ZXJyZWwsIGlubmVycmVsLApAQCAtNjkwLDcgKzcyMiw3IEBAIGdldF9tZW1vaXplX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCUxpc3QJICAgKnBo X2xhdGVyYWxfdmFyczsKIAogCS8qIE9idmlvdXNseSBub3QgaWYgaXQncyBkaXNhYmxlZCAqLwot CWlmICghZW5hYmxlX21lbW9pemUpCisJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTkVTVExP T1BfTUVNT0laRSkgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAtODQ1LDYgKzg3Nyw3 IEBAIHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAgUGF0aCAqaW5u ZXJfcGF0aCwKIAkJCQkgIExpc3QgKnBhdGhrZXlzLAogCQkJCSAgSm9pblR5cGUgam9pbnR5cGUs CisJCQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkgIEpvaW5QYXRoRXh0cmFEYXRh ICpleHRyYSkKIHsKIAlSZWxpZHMJCXJlcXVpcmVkX291dGVyOwpAQCAtOTI3LDYgKzk2MCw3IEBA IHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG1ldGhvZG9sb2d5IHdv cnRod2hpbGUuCiAJICovCiAJaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2Us IGpvaW50eXBlLAorCQkJCQkJICBuZXN0bG9vcF9zdWJ0eXBlIHwgUEdTX0NPTlNJREVSX05PTlBB UlRJQUwsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlubmVyX3BhdGgsIGV4dHJhKTsKIAogCWlmIChh ZGRfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9kZXMsCkBAIC05 NjQsNiArOTk4LDcgQEAgdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCSAgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJCSAgTGlzdCAqcGF0aGtleXMsCiAJ CQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlw ZSwKIAkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewogCUpvaW5Db3N0V29ya3Nw YWNlIHdvcmtzcGFjZTsKQEAgLTEwMTEsNyArMTA0Niw3IEBAIHRyeV9wYXJ0aWFsX25lc3Rsb29w X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogQmVmb3JlIGNyZWF0aW5nIGEgcGF0aCwgZ2V0 IGEgcXVpY2sgbG93ZXIgYm91bmQgb24gd2hhdCBpdCBpcyBsaWtlbHkgdG8KIAkgKiBjb3N0LiAg QmFpbCBvdXQgcmlnaHQgYXdheSBpZiBpdCBsb29rcyB0ZXJyaWJsZS4KIAkgKi8KLQlpbml0aWFs X2Nvc3RfbmVzdGxvb3Aocm9vdCwgJndvcmtzcGFjZSwgam9pbnR5cGUsCisJaW5pdGlhbF9jb3N0 X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpvaW50eXBlLCBuZXN0bG9vcF9zdWJ0eXBlLAog CQkJCQkJICBvdXRlcl9wYXRoLCBpbm5lcl9wYXRoLCBleHRyYSk7CiAJaWYgKCFhZGRfcGFydGlh bF9wYXRoX3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFjZS5kaXNhYmxlZF9ub2RlcywKIAkJCQkJ CQkJICAgd29ya3NwYWNlLnRvdGFsX2Nvc3QsIHBhdGhrZXlzKSkKQEAgLTE4NTksMTQgKzE4OTQs MTQgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJaWYgKG5lc3Rq b2luT0spCiAJewogCQkvKgotCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVz dCBpbm5lciBwYXRoLCB1bmxlc3MKLQkJICogZW5hYmxlX21hdGVyaWFsIGlzIG9mZiBvciB0aGUg cGF0aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzCi0JCSAqIG91dHB1dCBhbnl3YXkuCisJ CSAqIENvbnNpZGVyIG1hdGVyaWFsaXppbmcgdGhlIGNoZWFwZXN0IGlubmVyIHBhdGgsIHVubGVz cyB0aGF0IGlzCisJCSAqIGRpc2FibGVkIG9yIHRoZSBwYXRoIGluIHF1ZXN0aW9uIG1hdGVyaWFs aXplcyBpdHMgb3V0cHV0IGFueXdheS4KIAkJICovCi0JCWlmIChlbmFibGVfbWF0ZXJpYWwgJiYg aW5uZXJfY2hlYXBlc3RfdG90YWwgIT0gTlVMTCAmJgorCQlpZiAoKGV4dHJhLT5wZ3NfbWFzayAm IFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJaW5uZXJfY2hlYXBlc3RfdG90 YWwgIT0gTlVMTCAmJgogCQkJIUV4ZWNNYXRlcmlhbGl6ZXNPdXRwdXQoaW5uZXJfY2hlYXBlc3Rf dG90YWwtPnBhdGh0eXBlKSkKIAkJCW1hdHBhdGggPSAoUGF0aCAqKQotCQkJCWNyZWF0ZV9tYXRl cmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQkJY3JlYXRlX21h dGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFwZXN0X3RvdGFsLCB0cnVlKTsKIAl9CiAK IAlmb3JlYWNoKGxjMSwgb3V0ZXJyZWwtPnBhdGhsaXN0KQpAQCAtMTkwOSw2ICsxOTQ0LDcgQEAg bWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgaW5uZXJw YXRoLAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAogCQkJCQkJCQkgIGpvaW50eXBlLAorCQkJ CQkJCQkgIFBHU19ORVNUTE9PUF9QTEFJTiwKIAkJCQkJCQkJICBleHRyYSk7CiAKIAkJCQkvKgpA QCAtMTkyNSw2ICsxOTYxLDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkgIG1wYXRoLAogCQkJCQkJCQkJICBtZXJnZV9wYXRoa2V5cywKIAkJCQkJ CQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpFLAogCQkJCQkJ CQkJICBleHRyYSk7CiAJCQl9CiAKQEAgLTE5MzYsNiArMTk3Myw3IEBAIG1hdGNoX3Vuc29ydGVk X291dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIG1hdHBhdGgsCiAJCQkJCQkJCSAg bWVyZ2VfcGF0aGtleXMsCiAJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCSAgUEdTX05FU1RM T09QX01BVEVSSUFMSVpFLAogCQkJCQkJCQkgIGV4dHJhKTsKIAkJfQogCkBAIC0yMDUyLDE2ICsy MDkwLDE3IEBAIGNvbnNpZGVyX3BhcmFsbGVsX25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LAog CiAJLyoKIAkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRo LCB1bmxlc3M6IDEpCi0JICogZW5hYmxlX21hdGVyaWFsIGlzIG9mZiwgMikgdGhlIGNoZWFwZXN0 IGlubmVyIHBhdGggaXMgbm90CisJICogbWF0ZXJpYWxpemF0aW9uIGlzIGRpc2FibGVkIGhlcmUs IDIpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5vdAogCSAqIHBhcmFsbGVsLXNhZmUsIDMp IHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIHBhcmFtZXRlcml6ZWQgYnkgdGhlIG91dGVyCiAJ ICogcmVsLCBvciA0KSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBtYXRlcmlhbGl6ZXMgaXRzIG91 dHB1dCBhbnl3YXkuCiAJICovCi0JaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBpbm5lcl9jaGVhcGVz dF90b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgorCWlmICgoZXh0cmEtPnBnc19tYXNrICYgUEdTX05F U1RMT09QX01BVEVSSUFMSVpFKSAhPSAwICYmCisJCWlubmVyX2NoZWFwZXN0X3RvdGFsLT5wYXJh bGxlbF9zYWZlICYmCiAJCSFQQVRIX1BBUkFNX0JZX1JFTChpbm5lcl9jaGVhcGVzdF90b3RhbCwg b3V0ZXJyZWwpICYmCiAJCSFFeGVjTWF0ZXJpYWxpemVzT3V0cHV0KGlubmVyX2NoZWFwZXN0X3Rv dGFsLT5wYXRodHlwZSkpCiAJewogCQltYXRwYXRoID0gKFBhdGggKikKLQkJCWNyZWF0ZV9tYXRl cmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQljcmVhdGVfbWF0 ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBlc3RfdG90YWwsIHRydWUpOwogCQlBc3Nl cnQobWF0cGF0aC0+cGFyYWxsZWxfc2FmZSk7CiAJfQogCkBAIC0yMDkxLDcgKzIxMzAsOCBAQCBj b25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQljb250aW51 ZTsKIAogCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVsLCBvdXRlcnBh dGgsIGlubmVycGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJ CQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJCSAgUEdTX05FU1RMT09QX1BM QUlOLCBleHRyYSk7CiAKIAkJCS8qCiAJCQkgKiBUcnkgZ2VuZXJhdGluZyBhIG1lbW9pemUgcGF0 aCBhbmQgc2VlIGlmIHRoYXQgbWFrZXMgdGhlIG5lc3RlZApAQCAtMjEwMiwxMyArMjE0MiwxNSBA QCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJ CSBleHRyYSk7CiAJCQlpZiAobXBhdGggIT0gTlVMTCkKIAkJCQl0cnlfcGFydGlhbF9uZXN0bG9v cF9wYXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbXBhdGgsCi0JCQkJCQkJCQkJICBwYXRo a2V5cywgam9pbnR5cGUsIGV4dHJhKTsKKwkJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwK KwkJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpFLCBleHRyYSk7CiAJCX0KIAogCQkvKiBB bHNvIGNvbnNpZGVyIG1hdGVyaWFsaXplZCBmb3JtIG9mIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRo ICovCiAJCWlmIChtYXRwYXRoICE9IE5VTEwpCiAJCQl0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRo KHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbWF0cGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMs IGpvaW50eXBlLCBleHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJ CQkJCSAgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFLCBleHRyYSk7CiAJfQogfQogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMKaW5kZXggM2RkYmMxMGJiZGYuLjE1MDExNWMyOTNmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5jCkBAIC00OTksMTggKzQ5OSwxOSBAQCBj cmVhdGVfdGlkc2Nhbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQog CUxpc3QJICAgKnRpZHF1YWxzOwogCUxpc3QJICAgKnRpZHJhbmdlcXVhbHM7CiAJYm9vbAkJaXND dXJyZW50T2Y7CisJYm9vbAkJZW5hYmxlZCA9IChyZWwtPnBnc19tYXNrICYgUEdTX1RJRFNDQU4p ICE9IDA7CiAKIAkvKgogCSAqIElmIGFueSBzdWl0YWJsZSBxdWFscyBleGlzdCBpbiB0aGUgcmVs J3MgYmFzZXJlc3RyaWN0IGxpc3QsIGdlbmVyYXRlIGEKIAkgKiBwbGFpbiAodW5wYXJhbWV0ZXJp emVkKSBUaWRQYXRoIHdpdGggdGhlbS4KIAkgKgotCSAqIFdlIHNraXAgdGhpcyB3aGVuIGVuYWJs ZV90aWRzY2FuID0gZmFsc2UsIGV4Y2VwdCB3aGVuIHRoZSBxdWFsIGlzCisJICogV2Ugc2tpcCB0 aGlzIHdoZW4gVElEIHNjYW5zIGFyZSBkaXNhYmxlZCwgZXhjZXB0IHdoZW4gdGhlIHF1YWwgaXMK IAkgKiBDdXJyZW50T2ZFeHByLiBJbiB0aGF0IGNhc2UsIGEgVElEIHNjYW4gaXMgdGhlIG9ubHkg Y29ycmVjdCBwYXRoLgogCSAqLwogCXRpZHF1YWxzID0gVGlkUXVhbEZyb21SZXN0cmljdEluZm9M aXN0KHJvb3QsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbywgcmVsLAogCQkJCQkJCQkJCSAgICZpc0N1 cnJlbnRPZik7CiAKLQlpZiAodGlkcXVhbHMgIT0gTklMICYmIChlbmFibGVfdGlkc2NhbiB8fCBp c0N1cnJlbnRPZikpCisJaWYgKHRpZHF1YWxzICE9IE5JTCAmJiAoZW5hYmxlZCB8fCBpc0N1cnJl bnRPZikpCiAJewogCQkvKgogCQkgKiBUaGlzIHBhdGggdXNlcyBubyBqb2luIGNsYXVzZXMsIGJ1 dCBpdCBjb3VsZCBzdGlsbCBoYXZlIHJlcXVpcmVkCkBAIC01MzIsNyArNTMzLDcgQEAgY3JlYXRl X3RpZHNjYW5fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAl9CiAK IAkvKiBTa2lwIHRoZSByZXN0IGlmIFRJRCBzY2FucyBhcmUgZGlzYWJsZWQuICovCi0JaWYgKCFl bmFibGVfdGlkc2NhbikKKwlpZiAoIWVuYWJsZWQpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggODhiNGM1OTAxYjAuLjBh MmU2ODhiMjMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC02 NTAzLDcgKzY1MDMsNyBAQCBQbGFuICoKIG1hdGVyaWFsaXplX2ZpbmlzaGVkX3BsYW4oUGxhbiAq c3VicGxhbikKIHsKIAlQbGFuCSAgICptYXRwbGFuOwotCVBhdGgJCW1hdHBhdGg7CQkvKiBkdW1t eSBmb3IgcmVzdWx0IG9mIGNvc3RfbWF0ZXJpYWwgKi8KKwlQYXRoCQltYXRwYXRoOwkJLyogZHVt bXkgZm9yIGNvc3RfbWF0ZXJpYWwgKi8KIAlDb3N0CQlpbml0cGxhbl9jb3N0OwogCWJvb2wJCXVu c2FmZV9pbml0cGxhbnM7CiAKQEAgLTY1MjUsNyArNjUyNSw5IEBAIG1hdGVyaWFsaXplX2Zpbmlz aGVkX3BsYW4oUGxhbiAqc3VicGxhbikKIAlzdWJwbGFuLT50b3RhbF9jb3N0IC09IGluaXRwbGFu X2Nvc3Q7CiAKIAkvKiBTZXQgY29zdCBkYXRhICovCisJbWF0cGF0aC5wYXJlbnQgPSBOVUxMOwog CWNvc3RfbWF0ZXJpYWwoJm1hdHBhdGgsCisJCQkJICBlbmFibGVfbWF0ZXJpYWwsCiAJCQkJICBz dWJwbGFuLT5kaXNhYmxlZF9ub2RlcywKIAkJCQkgIHN1YnBsYW4tPnN0YXJ0dXBfY29zdCwKIAkJ CQkgIHN1YnBsYW4tPnRvdGFsX2Nvc3QsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMK aW5kZXggYmFmMGQ5NDIwYTIuLjY5NWIwZGEwMTdkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCkBAIC00NjIsNiArNDYyLDUzIEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBh cnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCQl0dXBs ZV9mcmFjdGlvbiA9IDAuMDsKIAl9CiAKKwkvKgorCSAqIENvbXB1dGUgdGhlIGluaXRpYWwgcGF0 aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2suCisJICoKKwkgKiBTb21lIHN0cmF0ZWdpZXMsIHN1 Y2ggYXMgUEdTX0ZPUkVJR05KT0lOLCBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgZW5hYmxlXyoKKwkg KiBHVUMsIGFuZCBzbyB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFyZSBhbHdheXMgc2V0IGluIHRo ZSBkZWZhdWx0CisJICogc3RyYXRlZ3kgbWFzay4KKwkgKgorCSAqIEl0IG1heSBzZWVtIHN1cnBy aXNpbmcgdGhhdCBlbmFibGVfaW5kZXhzY2FuIHNldHMgYm90aCBQR1NfSU5ERVhTQ0FOCisJICog YW5kIFBHU19JTkRFWE9OTFlTQ0FOLiBIb3dldmVyLCB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvciBv ZiB0aGlzIEdVQworCSAqIGNvcnJlc3BvbmRzIHRvIHRoaXMgZXhhY3RseTogZW5hYmxlX2luZGV4 c2Nhbj1vZmYgZGlzYWJsZXMgYm90aAorCSAqIGluZGV4LXNjYW4gYW5kIGluZGV4LW9ubHkgc2Nh biBwYXRocywgd2hlcmVhcyBlbmFibGVfaW5kZXhvbmx5c2Nhbj1vZmYKKwkgKiBjb252ZXJ0cyB0 aGUgaW5kZXgtb25seSBzY2FuIHBhdGhzIHRoYXQgd2Ugd291bGQgaGF2ZSBjb25zaWRlcmVkIGlu dG8KKwkgKiBpbmRleCBzY2FuIHBhdGhzLgorCSAqLworCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sg PSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCB8IFBHU19GT1JFSUdOSk9JTiB8CisJCVBH U19HQVRIRVIgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlpZiAoZW5hYmxlX3RpZHNjYW4p CisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX1RJRFNDQU47CisJaWYgKGVuYWJsZV9z ZXFzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19TRVFTQ0FOOworCWlmIChl bmFibGVfaW5kZXhzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19JTkRFWFND QU4gfCBQR1NfSU5ERVhPTkxZU0NBTjsKKwlpZiAoZW5hYmxlX2luZGV4b25seXNjYW4pCisJCWds b2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwlpZiAoZW5h YmxlX2JpdG1hcHNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0JJVE1BUFND QU47CisJaWYgKGVuYWJsZV9tZXJnZWpvaW4pCisJeworCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNr IHw9IFBHU19NRVJHRUpPSU5fUExBSU47CisJCWlmIChlbmFibGVfbWF0ZXJpYWwpCisJCQlnbG9i LT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkU7CisJfQorCWlm IChlbmFibGVfbmVzdGxvb3ApCisJeworCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19O RVNUTE9PUF9QTEFJTjsKKwkJaWYgKGVuYWJsZV9tYXRlcmlhbCkKKwkJCWdsb2ItPmRlZmF1bHRf cGdzX21hc2sgfD0gUEdTX05FU1RMT09QX01BVEVSSUFMSVpFOworCQlpZiAoZW5hYmxlX21lbW9p emUpCisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19ORVNUTE9PUF9NRU1PSVpFOwor CX0KKwlpZiAoZW5hYmxlX2hhc2hqb2luKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBH U19IQVNISk9JTjsKKwlpZiAoZW5hYmxlX2dhdGhlcm1lcmdlKQorCQlnbG9iLT5kZWZhdWx0X3Bn c19tYXNrIHw9IFBHU19HQVRIRVJfTUVSR0U7CisJaWYgKGVuYWJsZV9wYXJ0aXRpb253aXNlX2pv aW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0NPTlNJREVSX1BBUlRJVElPTldJ U0U7CisKIAkvKiBBbGxvdyBwbHVnaW5zIHRvIHRha2UgY29udHJvbCBhZnRlciB3ZSd2ZSBpbml0 aWFsaXplZCAiZ2xvYiIgKi8KIAlpZiAocGxhbm5lcl9zZXR1cF9ob29rKQogCQkoKnBsYW5uZXJf c2V0dXBfaG9vaykgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJpbmcsICZ0dXBsZV9mcmFjdGlvbiwg ZXMpOwpAQCAtMzk1NCw2ICs0MDAxLDkgQEAgbWFrZV9ncm91cGluZ19yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJaXNfcGFyYWxsZWxfc2FmZShyb290LCBo YXZpbmdRdWFsKSkKIAkJZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gdHJ1ZTsKIAor CS8qIEFzc3VtZSB0aGF0IHRoZSBzYW1lIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVnaWVzIGFyZSBh bGxvd2VkICovCisJZ3JvdXBlZF9yZWwtPnBnc19tYXNrID0gaW5wdXRfcmVsLT5wZ3NfbWFzazsK KwogCS8qCiAJICogSWYgdGhlIGlucHV0IHJlbCBiZWxvbmdzIHRvIGEgc2luZ2xlIEZEVywgc28g ZG9lcyB0aGUgZ3JvdXBlZCByZWwuCiAJICovCkBAIC01MzQ4LDYgKzUzOTgsOSBAQCBjcmVhdGVf b3JkZXJlZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAlpZiAoaW5wdXRfcmVsLT5jb25zaWRl cl9wYXJhbGxlbCAmJiB0YXJnZXRfcGFyYWxsZWxfc2FmZSkKIAkJb3JkZXJlZF9yZWwtPmNvbnNp ZGVyX3BhcmFsbGVsID0gdHJ1ZTsKIAorCS8qIEFzc3VtZSB0aGF0IHRoZSBzYW1lIHBhdGggZ2Vu ZXJhdGlvbiBzdHJhdGVnaWVzIGFyZSBhbGxvd2VkLiAqLworCW9yZGVyZWRfcmVsLT5wZ3NfbWFz ayA9IGlucHV0X3JlbC0+cGdzX21hc2s7CisKIAkvKgogCSAqIElmIHRoZSBpbnB1dCByZWwgYmVs b25ncyB0byBhIHNpbmdsZSBGRFcsIHNvIGRvZXMgdGhlIG9yZGVyZWRfcmVsLgogCSAqLwpAQCAt NzQyOCw2ICs3NDgxLDcgQEAgY3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCQkJCQkJCWdyb3VwZWRfcmVsLT5yZWxpZHMpOwogCXBhcnRpYWxseV9n cm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPQogCQlncm91cGVkX3JlbC0+Y29uc2lkZXJf cGFyYWxsZWw7CisJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wZ3NfbWFzayA9IGdyb3VwZWRfcmVs LT5wZ3NfbWFzazsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnJlbG9wdGtpbmQgPSBncm91cGVk X3JlbC0+cmVsb3B0a2luZDsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnNlcnZlcmlkID0gZ3Jv dXBlZF9yZWwtPnNlcnZlcmlkOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+dXNlcmlkID0gZ3Jv dXBlZF9yZWwtPnVzZXJpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4 IDMzY2UzNGYwMDg4Li43ZGQ5YTdjNDYwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRo bm9kZS5jCkBAIC0xNjU5LDcgKzE2NTksNyBAQCBjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKICAqCSAgcGF0aG5vZGUuCiAgKi8KIE1h dGVyaWFsUGF0aCAqCi1jcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWwsIFBhdGgg KnN1YnBhdGgpCitjcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1 YnBhdGgsIGJvb2wgZW5hYmxlZCkKIHsKIAlNYXRlcmlhbFBhdGggKnBhdGhub2RlID0gbWFrZU5v ZGUoTWF0ZXJpYWxQYXRoKTsKIApAQCAtMTY3OCw2ICsxNjc4LDcgQEAgY3JlYXRlX21hdGVyaWFs X3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoKQogCXBhdGhub2RlLT5zdWJwYXRo ID0gc3VicGF0aDsKIAogCWNvc3RfbWF0ZXJpYWwoJnBhdGhub2RlLT5wYXRoLAorCQkJCSAgZW5h YmxlZCwKIAkJCQkgIHN1YnBhdGgtPmRpc2FibGVkX25vZGVzLAogCQkJCSAgc3VicGF0aC0+c3Rh cnR1cF9jb3N0LAogCQkJCSAgc3VicGF0aC0+dG90YWxfY29zdCwKQEAgLTE3MzAsOCArMTczMSwx NSBAQCBjcmVhdGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsIFBhdGggKnN1YnBhdGgsCiAJcGF0aG5vZGUtPmVzdF91bmlxdWVfa2V5cyA9IDAuMDsKIAlw YXRobm9kZS0+ZXN0X2hpdF9yYXRpbyA9IDAuMDsKIAotCS8qIHdlIHNob3VsZCBub3QgZ2VuZXJh dGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBlbmFibGVfbWVtb2l6ZT1mYWxzZSAqLwotCUFzc2VydChl bmFibGVfbWVtb2l6ZSk7CisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGJlIGFza2VkIHRvIGdlbmVy YXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4gbWVtb2l6YXRpb24gaXMKKwkgKiBkaXNhYmxlZCwgc28g c2V0IG91ciBjb3VudCBvZiBkaXNhYmxlZCBub2RlcyBlcXVhbCB0byB0aGUgc3VicGF0aCdzCisJ ICogY291bnQuCisJICoKKwkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGFsc28gQXNzZXJ0IHRoYXQg bWVtb2l6YXRpb24gaXMgZW5hYmxlZCwgYnV0IHRoZQorCSAqIHZhbHVlIG9mIGVuYWJsZV9tZW1v aXplIGlzIG5vdCBjb250cm9sbGluZzogd2hhdCB3ZSB3b3VsZCBuZWVkIHRvIGNoZWNrCisJICog aXMgdGhhdCB0aGUgSm9pblBhdGhFeHRyYURhdGEncyBwZ3NfbWFzayBpbmNsdWRlZCBQR1NfTkVT VExPT1BfTUVNT0laRS4KKwkgKi8KIAlwYXRobm9kZS0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHN1 YnBhdGgtPmRpc2FibGVkX25vZGVzOwogCiAJLyoKQEAgLTM5NjUsMTMgKzM5NzMsMTYgQEAgcmVw YXJhbWV0ZXJpemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwKIAkJCXsKIAkJ CQlNYXRlcmlhbFBhdGggKm1wYXRoID0gKE1hdGVyaWFsUGF0aCAqKSBwYXRoOwogCQkJCVBhdGgJ ICAgKnNwYXRoID0gbXBhdGgtPnN1YnBhdGg7CisJCQkJYm9vbAkJZW5hYmxlZDsKIAogCQkJCXNw YXRoID0gcmVwYXJhbWV0ZXJpemVfcGF0aChyb290LCBzcGF0aCwKIAkJCQkJCQkJCQkJcmVxdWly ZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCWxvb3BfY291bnQpOworCQkJCWVuYWJsZWQgPQorCQkJCQko bXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPD0gc3BhdGgtPmRpc2FibGVkX25vZGVzKTsKIAkJ CQlpZiAoc3BhdGggPT0gTlVMTCkKIAkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJcmV0dXJuIChQYXRo ICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgc3BhdGgpOworCQkJCXJldHVybiAoUGF0aCAq KSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHNwYXRoLCBlbmFibGVkKTsKIAkJCX0KIAkJY2Fz ZSBUX01lbW9pemU6CiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXgg MDdmOTJmYWMyMzkuLmE2ZGY4NWRhMTA1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNh dC5jCkBAIC01NTcsNiArNTU3LDkgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJv b3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkgKiBBbGxvdyBhIHBs dWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhlIGluZm8gd2Ugb2J0YWluZWQgZnJvbSB0aGUKIAkg KiBjYXRhbG9ncy4gIEFjdGlvbnMgbWlnaHQgaW5jbHVkZSBhbHRlcmluZyB0aGUgYXNzdW1lZCBy ZWxhdGlvbiBzaXplLAogCSAqIHJlbW92aW5nIGFuIGluZGV4LCBvciBhZGRpbmcgYSBoeXBvdGhl dGljYWwgaW5kZXggdG8gdGhlIGluZGV4bGlzdC4KKwkgKgorCSAqIEFuIGV4dGVuc2lvbiBjYW4g YWxzbyBtb2RpZnkgcmVsLT5wZ3NfbWFzayBoZXJlIHRvIGNvbnRyb2wgcGF0aAorCSAqIGdlbmVy YXRpb24uCiAJICovCiAJaWYgKGdldF9yZWxhdGlvbl9pbmZvX2hvb2spCiAJCSgqZ2V0X3JlbGF0 aW9uX2luZm9faG9vaykgKHJvb3QsIHJlbGF0aW9uT2JqZWN0SWQsIGluaHBhcmVudCwgcmVsKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCAxMTU4YmMxOTRjMy4uMDM0ZDBj OWM4N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTQ3LDYgKzQ3LDkg QEAgdHlwZWRlZiBzdHJ1Y3QgSm9pbkhhc2hFbnRyeQogCVJlbE9wdEluZm8gKmpvaW5fcmVsOwog fSBKb2luSGFzaEVudHJ5OwogCisvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGR1 cmluZyBqb2lucmVsIHNldHVwICovCitqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBqb2lucmVsX3Nl dHVwX2hvb2sgPSBOVUxMOworCiBzdGF0aWMgdm9pZCBidWlsZF9qb2lucmVsX3RsaXN0KFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQlSZWxPcHRJbmZvICpp bnB1dF9yZWwsCiAJCQkJCQkJCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLApAQCAtMjI1LDYgKzIy OCw3IEBAIGJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVs T3B0SW5mbyAqcGFyZW50KQogCXJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9m cmFjdGlvbiA+IDApOwogCXJlbC0+Y29uc2lkZXJfcGFyYW1fc3RhcnR1cCA9IGZhbHNlOwkvKiBt aWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLwogCXJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSBmYWxz ZTsgLyogbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8KKwlyZWwtPnBnc19tYXNrID0gcm9vdC0+ Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsKIAlyZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9lbXB0eV9w YXRodGFyZ2V0KCk7CiAJcmVsLT5wYXRobGlzdCA9IE5JTDsKIAlyZWwtPnBwaWxpc3QgPSBOSUw7 CkBAIC04MjIsNiArODI2LDcgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJ am9pbnJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlvbiA+IDApOwog CWpvaW5yZWwtPmNvbnNpZGVyX3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsKIAlqb2lucmVsLT5jb25z aWRlcl9wYXJhbGxlbCA9IGZhbHNlOworCWpvaW5yZWwtPnBnc19tYXNrID0gcm9vdC0+Z2xvYi0+ ZGVmYXVsdF9wZ3NfbWFzazsKIAlqb2lucmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0 aHRhcmdldCgpOwogCWpvaW5yZWwtPnBhdGhsaXN0ID0gTklMOwogCWpvaW5yZWwtPnBwaWxpc3Qg PSBOSUw7CkBAIC05MzQsMTAgKzkzOSw2IEBAIGJ1aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpy b290LAogCSAqLwogCWpvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnMgPSBoYXNfcmVsZXZhbnRfZWNs YXNzX2pvaW5jbGF1c2Uocm9vdCwgam9pbnJlbCk7CiAKLQkvKiBTdG9yZSB0aGUgcGFydGl0aW9u IGluZm9ybWF0aW9uLiAqLwotCWJ1aWxkX2pvaW5yZWxfcGFydGl0aW9uX2luZm8ocm9vdCwgam9p bnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywKLQkJCQkJCQkJIHJlc3RyaWN0bGlz dCk7Ci0KIAkvKgogCSAqIFNldCBlc3RpbWF0ZXMgb2YgdGhlIGpvaW5yZWwncyBzaXplLgogCSAq LwpAQCAtOTYzLDYgKzk2NCwxOCBAQCBidWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwK IAkJaXNfcGFyYWxsZWxfc2FmZShyb290LCAoTm9kZSAqKSBqb2lucmVsLT5yZWx0YXJnZXQtPmV4 cHJzKSkKIAkJam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJLyoKKwkgKiBB bGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhlIG5ldyBqb2lucmVsJ3MgcHJvcGVy dGllcy4gQWN0aW9ucworCSAqIG1pZ2h0IGluY2x1ZGUgYWx0ZXJpbmcgdGhlIHNpemUgZXN0aW1h dGUgb3IgY2xlYXJpbmcgY29uc2lkZXJfcGFyYWxsZWwuCisJICovCisJaWYgKGpvaW5yZWxfc2V0 dXBfaG9vaykKKwkJKCpqb2lucmVsX3NldHVwX2hvb2spIChyb290LCBqb2lucmVsLCBvdXRlcl9y ZWwsIGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCSAgIHJlc3RyaWN0bGlzdCk7CisKKwkvKiBT dG9yZSB0aGUgcGFydGl0aW9uIGluZm9ybWF0aW9uLiAqLworCWJ1aWxkX2pvaW5yZWxfcGFydGl0 aW9uX2luZm8ocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywKKwkJ CQkJCQkJIHJlc3RyaWN0bGlzdCk7CisKIAkvKiBBZGQgdGhlIGpvaW5yZWwgdG8gdGhlIFBsYW5u ZXJJbmZvLiAqLwogCWFkZF9qb2luX3JlbChyb290LCBqb2lucmVsKTsKIApAQCAtMTAxOSw2ICsx MDMyLDcgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKm91dGVyX3JlbCwKIAlqb2lucmVsLT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1cGxl X2ZyYWN0aW9uID4gMCk7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFyYW1fc3RhcnR1cCA9IGZhbHNl OwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gZmFsc2U7CisJam9pbnJlbC0+cGdzX21h c2sgPSByb290LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwogCWpvaW5yZWwtPnJlbHRhcmdldCA9 IGNyZWF0ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CiAJam9pbnJlbC0+cGF0aGxpc3QgPSBOSUw7CiAJ am9pbnJlbC0+cHBpbGlzdCA9IE5JTDsKQEAgLTExMDIsMTAgKzExMTYsNiBAQCBidWlsZF9jaGls ZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCSAq LwogCWpvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnMgPSBwYXJlbnRfam9pbnJlbC0+aGFzX2VjbGFz c19qb2luczsKIAotCS8qIElzIHRoZSBqb2luIGJldHdlZW4gcGFydGl0aW9ucyBpdHNlbGYgcGFy dGl0aW9uZWQ/ICovCi0JYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVs LCBvdXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAotCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsK LQogCS8qIENoaWxkIGpvaW5yZWwgaXMgcGFyYWxsZWwgc2FmZSBpZiBwYXJlbnQgaXMgcGFyYWxs ZWwgc2FmZS4gKi8KIAlqb2lucmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IHBhcmVudF9qb2lucmVs LT5jb25zaWRlcl9wYXJhbGxlbDsKIApAQCAtMTExMyw2ICsxMTIzLDIwIEBAIGJ1aWxkX2NoaWxk X2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJc2V0 X2pvaW5yZWxfc2l6ZV9lc3RpbWF0ZXMocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9y ZWwsCiAJCQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOwogCisJLyoKKwkgKiBBbGxvdyBh IHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhlIG5ldyBqb2lucmVsJ3MgcHJvcGVydGllcy4g QWN0aW9ucworCSAqIG1pZ2h0IGluY2x1ZGUgYWx0ZXJpbmcgdGhlIHNpemUgZXN0aW1hdGUgb3Ig Y2xlYXJpbmcgY29uc2lkZXJfcGFyYWxsZWwsCisJICogYWx0aG91Z2ggdGhlIGxhdHRlciB3b3Vs ZCBiZSBiZXR0ZXIgZG9uZSBpbiB0aGUgcGFyZW50IGpvaW5yZWwgcmF0aGVyCisJICogdGhhbiBo ZXJlLgorCSAqLworCWlmIChqb2lucmVsX3NldHVwX2hvb2spCisJCSgqam9pbnJlbF9zZXR1cF9o b29rKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywKKwkJCQkJ CQkgICByZXN0cmljdGxpc3QpOworCisJLyogSXMgdGhlIGpvaW4gYmV0d2VlbiBwYXJ0aXRpb25z IGl0c2VsZiBwYXJ0aXRpb25lZD8gKi8KKwlidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJv b3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCisJCQkJCQkJCSByZXN0 cmljdGxpc3QpOworCiAJLyogV2UgYnVpbGQgdGhlIGpvaW4gb25seSBvbmNlLiAqLwogCUFzc2Vy dCghZmluZF9qb2luX3JlbChyb290LCBqb2lucmVsLT5yZWxpZHMpKTsKIApAQCAtMTYwMiw2ICsx NjI2LDcgQEAgZmV0Y2hfdXBwZXJfcmVsKFBsYW5uZXJJbmZvICpyb290LCBVcHBlclJlbGF0aW9u S2luZCBraW5kLCBSZWxpZHMgcmVsaWRzKQogCXVwcGVycmVsID0gbWFrZU5vZGUoUmVsT3B0SW5m byk7CiAJdXBwZXJyZWwtPnJlbG9wdGtpbmQgPSBSRUxPUFRfVVBQRVJfUkVMOwogCXVwcGVycmVs LT5yZWxpZHMgPSBibXNfY29weShyZWxpZHMpOworCXVwcGVycmVsLT5wZ3NfbWFzayA9IHJvb3Qt Pmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAKIAkvKiBjaGVhcCBzdGFydHVwIGNvc3QgaXMgaW50 ZXJlc3RpbmcgaWZmIG5vdCBhbGwgdHVwbGVzIHRvIGJlIHJldHJpZXZlZCAqLwogCXVwcGVycmVs LT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CkBAIC0yMTE4 LDcgKzIxNDMsNyBAQCBidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpy b290LAogCVBhcnRpdGlvblNjaGVtZSBwYXJ0X3NjaGVtZTsKIAogCS8qIE5vdGhpbmcgdG8gZG8g aWYgcGFydGl0aW9ud2lzZSBqb2luIHRlY2huaXF1ZSBpcyBkaXNhYmxlZC4gKi8KLQlpZiAoIWVu YWJsZV9wYXJ0aXRpb253aXNlX2pvaW4pCisJaWYgKChqb2lucmVsLT5wZ3NfbWFzayAmIFBHU19D T05TSURFUl9QQVJUSVRJT05XSVNFKSA9PSAwKQogCXsKIAkJQXNzZXJ0KCFJU19QQVJUSVRJT05F RF9SRUwoam9pbnJlbCkpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGUxNjhi MTdjZDI4Li44NjUxY2NiY2MzMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIyLDYgKzIyLDc5 IEBACiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYmxv Y2suaCIKIAorLyoKKyAqIFBhdGggZ2VuZXJhdGlvbiBzdHJhdGVnaWVzLgorICoKKyAqIFRoZXNl IGNvbnN0YW50cyBhcmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBzZXQgb2Ygc3RyYXRlZ2llcyB0aGF0 IHRoZSBwbGFubmVyCisgKiBzaG91bGQgdXNlLCBlaXRoZXIgZm9yIHRoZSBxdWVyeSBhcyBhIHdo b2xlIG9yIGZvciBhIHNwZWNpZmljIGJhc2VyZWwgb3IKKyAqIGpvaW5yZWwuIFRoZSB2YXJpb3Vz IHBsYW5uZXItcmVsYXRlZCBlbmFibGVfKiBHVUNzIGFyZSB1c2VkIHRvIHNldCB0aGUKKyAqIFBs YW5uZXJHbG9iYWwncyBkZWZhdWx0X3Bnc19tYXNrLCBhbmQgdGhhdCBpbiB0dXJuIGlzIHVzZWQg dG8gc2V0IGVhY2gKKyAqIFJlbE9wdEluZm8ncyBwZ3NfbWFzay4gSW4gYm90aCBjYXNlcywgZXh0 ZW5zaW9ucyBjYW4gdXNlIGhvb2tzIHRvIG1vZGlmeSB0aGUKKyAqIGRlZmF1bHQgdmFsdWUuICBO b3QgZXZlcnkgc3RyYXRlZ3kgbGlzdGVkIGhlcmUgaGFzIGEgY29ycmVzcG9uZGluZyBlbmFibGVf KgorICogR1VDOyB0aG9zZSB0aGF0IGRvbid0IGFyZSBhbHdheXMgYWxsb3dlZCB1bmxlc3MgZGlz YWJsZWQgYnkgYW4gZXh0ZW5zaW9uLgorICogTm90IGFsbCBzdHJhdGVnaWVzIGFyZSByZWxldmFu dCBmb3IgZXZlcnkgUmVsT3B0SW5mbzsgZS5nLiBQR1NfU0VRU0NBTgorICogZG9lc24ndCBhZmZl Y3Qgam9pbnJlbHMgb25lIHdheSBvciB0aGUgb3RoZXIuCisgKgorICogSW4gbW9zdCBjYXNlcywg ZGlzYWJsaW5nIGEgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1lcmVseSBtZWFucyB0aGF0IGFu eQorICogcGF0aHMgZ2VuZXJhdGVkIHVzaW5nIHRoYXQgc3RyYXRlZ3kgYXJlIG1hcmtlZCBhcyBk aXNhYmxlZCwgYnV0IGluIHNvbWUKKyAqIGNhc2VzLCBwYXRoIGdlbmVyYXRpb24gaXMgc2tpcHBl ZCBhbHRvZ2V0aGVyLiBUaGUgbGF0dGVyIHN0cmF0ZWd5IGlzIG9ubHkKKyAqIHBlcm1pc3NpYmxl IHdoZW4gaXQgY2FuJ3QgcmVzdWx0IGluIHBsYW5uZXIgZmFpbHVyZSAtLSBmb3IgaW5zdGFuY2Us IHdlCisgKiBjb3VsZG4ndCBkbyB0aGlzIGZvciBzZXF1ZW50aWFsIHNjYW5zIG9uIGEgcGxhaW4g cmVsLCBiZWNhdXNlIHRoZXJlIG1pZ2h0CisgKiBub3QgYmUgYW55IG90aGVyIHBvc3NpYmxlIHBh dGguIE5ldmVydGhlbGVzcywgdGhlIGJlaGF2aW9ycyBpbiBlYWNoCisgKiBpbmRpdmlkdWFsIGNh c2UgYXJlIHRvIHNvbWUgZXh0ZW50IHRoZSByZXN1bHQgb2YgaGlzdG9yaWNhbCBhY2NpZGVudCwK KyAqIGNob3NlbiB0byBtYXRjaCB0aGUgcHJlZXhpc3RpbmcgYmVoYXZpb3JzIG9mIHRoZSBlbmFi bGVfKiBHVUNzLgorICoKKyAqIEluIGEgZmV3IGNhc2VzLCB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUg Yml0IGZvciB0aGUgc2FtZSBzdHJhdGVneSwgY29udHJvbGxpbmcKKyAqIGRpZmZlcmVudCBhc3Bl Y3RzIG9mIHRoZSBwbGFubmVyIGJlaGF2aW9yLiBXaGVuIFBHU19DT05TSURFUl9JTkRFWE9OTFkg aXMKKyAqIHVuc2V0LCB3ZSBkb24ndCBldmVuIGNvbnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGFu ZCBhbnkgc3VjaCBzY2FucyB0aGF0CisgKiB3b3VsZCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJlY29t ZSBpbmRleCBzY2FucyBpbnN0ZWFkLiBPbiB0aGUgb3RoZXIgaGFuZCwKKyAqIHVuc2V0dGluZyBQ R1NfSU5ERVhTQ0FOIG9yIFBHU19JTkRFWE9OTFlTQ0FOIGNhdXNlcyBnZW5lcmF0ZWQgcGF0aHMg b2YgdGhlCisgKiBjb3JyZXNwb25kaW5nIHR5cGVzIHRvIGJlIG1hcmtlZCBhcyBkaXNhYmxlZC4g U2ltaWxhcmx5LCB1bnNldHRpbmcKKyAqIFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFIHByZXZl bnRzIGFueSBzb3J0IG9mIHRoaW5raW5nIGFib3V0IHBhcnRpdGlvbndpc2UKKyAqIGpvaW5zIGZv ciB0aGUgY3VycmVudCByZWwsIHdoaWNoIGluY2lkZW50YWxseSB3aWxsIHByZWNsdWRlIGhpZ2hl ci1sZXZlbAorICogam9pbnJlbHMgZnJvbSBidWlsZGluZyBwYXJpdGl0b253aXNlIHBhdGhzIHVz aW5nIHBhdGhzIHRha2VuIGZyb20gdGhlCisgKiBjdXJyZW50IHJlbCdzIGNoaWxkcmVuLiBPbiB0 aGUgb3RoZXIgaGFuZCwgdW5zZXR0aW5nIFBHU19BUFBFTkQgb3IKKyAqIFBHU19NRVJHRV9BUFBF TkQgd2lsbCBvbmx5IGFycmFuZ2UgdG8gZGlzYWJsZSBwYXRocyBvZiB0aGUgY29ycmVzcG9uZGlu ZworICogdHlwZXMgaWYgdGhleSBhcmUgZ2VuZXJhdGVkIGF0IHRoZSBsZXZlbCBvZiB0aGUgY3Vy cmVudCByZWwuCisgKgorICogRmluYWxseSwgdW5zZXR0aW5nIFBHU19DT05TSURFUl9OT05QQVJU SUFMIGRpc2FibGVzIGFsbCBub24tcGFydGlhbCBwYXRocworICogZXhjZXB0IHRob3NlIHRoYXQg dXNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UuIEluIG1vc3Qgb3RoZXIgY2FzZXMsIGEKKyAqIHBs dWdpbiBjYW4gbnVkZ2UgdGhlIHBsYW5uZXIgdG93YXJkIGEgcGFydGljdWxhciBzdHJhdGVneSBi eSBkaXNhYmxpbmcKKyAqIGFsbCBvZiB0aGUgb3RoZXJzLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsg aGVyZTogdW5zZXR0aW5nIFBHU19TRVFTQ0FOLAorICogZm9yIGluc3RhbmNlLCB3b3VsZCBkaXNh YmxlIGJvdGggcGFydGlhbCBhbmQgbm9uLXBhcnRpYWwgc2VxdWVudGlhbCBzY2Fucy4KKyAqLwor I2RlZmluZSBQR1NfU0VRU0NBTgkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBQR1NfSU5ERVhTQ0FO CQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUEdTX0lOREVYT05MWVNDQU4JCQkweDAwMDAwMDA0Cisj ZGVmaW5lIFBHU19CSVRNQVBTQ0FOCQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgUEdTX1RJRFNDQU4J CQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgUEdTX0ZPUkVJR05KT0lOCQkJCTB4MDAwMDAwMjAKKyNk ZWZpbmUgUEdTX01FUkdFSk9JTl9QTEFJTgkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgUEdTX01FUkdF Sk9JTl9NQVRFUklBTElaRQkweDAwMDAwMDgwCisjZGVmaW5lIFBHU19ORVNUTE9PUF9QTEFJTgkJ CTB4MDAwMDAxMDAKKyNkZWZpbmUgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFCTB4MDAwMDAyMDAK KyNkZWZpbmUgUEdTX05FU1RMT09QX01FTU9JWkUJCTB4MDAwMDA0MDAKKyNkZWZpbmUgUEdTX0hB U0hKT0lOCQkJCTB4MDAwMDA4MDAKKyNkZWZpbmUgUEdTX0FQUEVORAkJCQkJMHgwMDAwMTAwMAor I2RlZmluZSBQR1NfTUVSR0VfQVBQRU5ECQkJMHgwMDAwMjAwMAorI2RlZmluZSBQR1NfR0FUSEVS CQkJCQkweDAwMDA0MDAwCisjZGVmaW5lIFBHU19HQVRIRVJfTUVSR0UJCQkweDAwMDA4MDAwCisj ZGVmaW5lIFBHU19DT05TSURFUl9JTkRFWE9OTFkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgUEdTX0NP TlNJREVSX1BBUlRJVElPTldJU0UJMHgwMDAyMDAwMAorI2RlZmluZSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTAkJMHgwMDA0MDAwMAorCisvKgorICogQ29udmVuaWVuY2UgbWFjcm9zIGZvciB1c2Vm dWwgY29tYmluYXRpb24gb2YgdGhlIGJpdHMgZGVmaW5lZCBhYm92ZS4KKyAqLworI2RlZmluZSBQ R1NfU0NBTl9BTlkJCVwKKwkoUEdTX1NFUVNDQU4gfCBQR1NfSU5ERVhTQ0FOIHwgUEdTX0lOREVY T05MWVNDQU4gfCBQR1NfQklUTUFQU0NBTiB8IFwKKwkgUEdTX1RJRFNDQU4pCisjZGVmaW5lIFBH U19NRVJHRUpPSU5fQU5ZCVwKKwkoUEdTX01FUkdFSk9JTl9QTEFJTiB8IFBHU19NRVJHRUpPSU5f TUFURVJJQUxJWkUpCisjZGVmaW5lIFBHU19ORVNUTE9PUF9BTlkJXAorCShQR1NfTkVTVExPT1Bf UExBSU4gfCBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkUgfCBQR1NfTkVTVExPT1BfTUVNT0laRSkK KyNkZWZpbmUgUEdTX0pPSU5fQU5ZCQlcCisJKFBHU19GT1JFSUdOSk9JTiB8IFBHU19NRVJHRUpP SU5fQU5ZIHwgUEdTX05FU1RMT09QX0FOWSB8IFBHU19IQVNISk9JTikKIAogLyoKICAqIFJlbGlk cwpAQCAtMTg2LDYgKzI1OSw5IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB3 b3JzdCBQUk9QQVJBTExFTCBoYXphcmQgbGV2ZWwgKi8KIAljaGFyCQltYXhQYXJhbGxlbEhhemFy ZDsKIAorCS8qIG1hc2sgb2YgYWxsb3dlZCBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ2llcyAqLwor CXVpbnQ2NAkJZGVmYXVsdF9wZ3NfbWFzazsKKwogCS8qIHBhcnRpdGlvbiBkZXNjcmlwdG9ycyAq LwogCVBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0aXRpb25fZGlyZWN0b3J5IHBnX25vZGVfYXR0cihy ZWFkX3dyaXRlX2lnbm9yZSk7CiAKQEAgLTkzOSw3ICsxMDE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmVsT3B0SW5mbwogCUNhcmRpbmFsaXR5IHJvd3M7CiAKIAkvKgotCSAqIHBlci1yZWxhdGlvbiBw bGFubmVyIGNvbnRyb2wgZmxhZ3MKKwkgKiBwZXItcmVsYXRpb24gcGxhbm5lciBjb250cm9sCiAJ ICovCiAJLyoga2VlcCBjaGVhcC1zdGFydHVwLWNvc3QgcGF0aHM/ICovCiAJYm9vbAkJY29uc2lk ZXJfc3RhcnR1cDsKQEAgLTk0Nyw2ICsxMDIzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5m bwogCWJvb2wJCWNvbnNpZGVyX3BhcmFtX3N0YXJ0dXA7CiAJLyogY29uc2lkZXIgcGFyYWxsZWwg cGF0aHM/ICovCiAJYm9vbAkJY29uc2lkZXJfcGFyYWxsZWw7CisJLyogcGF0aCBnZW5lcmF0aW9u IHN0cmF0ZWd5IG1hc2sgKi8KKwl1aW50NjQJCXBnc19tYXNrOwogCiAJLyoKIAkgKiBkZWZhdWx0 IHJlc3VsdCB0YXJnZXRsaXN0IGZvciBQYXRocyBzY2FubmluZyB0aGlzIHJlbGF0aW9uOyBsaXN0 IG9mCkBAIC0zNTA2LDYgKzM1ODQsNyBAQCB0eXBlZGVmIHN0cnVjdCBTZW1pQW50aUpvaW5GYWN0 b3JzCiAgKiBzamluZm8gaXMgZXh0cmEgaW5mbyBhYm91dCBzcGVjaWFsIGpvaW5zIGZvciBzZWxl Y3Rpdml0eSBlc3RpbWF0aW9uCiAgKiBzZW1pZmFjdG9ycyBpcyBhcyBzaG93biBhYm92ZSAob25s eSB2YWxpZCBmb3IgU0VNSS9BTlRJL2lubmVyX3VuaXF1ZSBqb2lucykKICAqIHBhcmFtX3NvdXJj ZV9yZWxzIGFyZSBPSyB0YXJnZXRzIGZvciBwYXJhbWV0ZXJpemF0aW9uIG9mIHJlc3VsdCBwYXRo cworICogcGdzX21hc2sgaXMgYSBiaXRtYXNrIG9mIFBHU18qIGNvbnN0YW50cyB0byBsaW1pdCB0 aGUgam9pbiBzdHJhdGVneQogICovCiB0eXBlZGVmIHN0cnVjdCBKb2luUGF0aEV4dHJhRGF0YQog ewpAQCAtMzUxNSw2ICszNTk0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSm9pblBhdGhFeHRyYURhdGEK IAlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbzsKIAlTZW1pQW50aUpvaW5GYWN0b3JzIHNlbWlmYWN0 b3JzOwogCVJlbGlkcwkJcGFyYW1fc291cmNlX3JlbHM7CisJdWludDY0CQlwZ3NfbWFzazsKIH0g Sm9pblBhdGhFeHRyYURhdGE7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRleCBiNTIzYmNkYThm My4uMmQ4MDQ2MmJlY2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgK KysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtMTI1LDcgKzEyNSw3IEBAIGV4 dGVybiB2b2lkIGNvc3RfbWVyZ2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRfdG90YWxfY29z dCwKIAkJCQkJCQkgIGRvdWJsZSB0dXBsZXMpOwogZXh0ZXJuIHZvaWQgY29zdF9tYXRlcmlhbChQ YXRoICpwYXRoLAotCQkJCQkJICBpbnQgaW5wdXRfZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkgIGJv b2wgZW5hYmxlZCwgaW50IGlucHV0X2Rpc2FibGVkX25vZGVzLAogCQkJCQkJICBDb3N0IGlucHV0 X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJCQkJICBkb3VibGUgdHVw bGVzLCBpbnQgd2lkdGgpOwogZXh0ZXJuIHZvaWQgY29zdF9hZ2coUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCkBAIC0xNDgsNyArMTQ4LDcgQEAgZXh0ZXJuIHZvaWQgY29zdF9ncm91cChQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJICAgZG91YmxlIGlucHV0X3R1cGxl cyk7CiBleHRlcm4gdm9pZCBpbml0aWFsX2Nvc3RfbmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCSAgSm9pbkNvc3RXb3Jrc3BhY2UgKndvcmtzcGFjZSwKLQkJCQkJCQkJICBKb2lu VHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwgdWludDY0IGVuYWJs ZV9tYXNrLAogCQkJCQkJCQkgIFBhdGggKm91dGVyX3BhdGgsIFBhdGggKmlubmVyX3BhdGgsCiAJ CQkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKTsKIGV4dGVybiB2b2lkIGZpbmFsX2Nv c3RfbmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3QsIE5lc3RQYXRoICpwYXRoLApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaAppbmRleCBkYmY0NzAyYWNjOS4uMTIzYjc4Y2JmMTEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRobm9kZS5oCkBAIC0xNyw2ICsxNywxNCBAQAogI2luY2x1ZGUgIm5vZGVzL2JpdG1h cHNldC5oIgogI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgogCisvKiBIb29rIGZvciBwbHVn aW5zIHRvIGdldCBjb250cm9sIGR1cmluZyBqb2lucmVsIHNldHVwICovCit0eXBlZGVmIHZvaWQg KCpqb2lucmVsX3NldHVwX2hvb2tfdHlwZSkgKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJ CSBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpvdXRlcl9yZWws CisJCQkJCQkJCQkJIFJlbE9wdEluZm8gKmlubmVyX3JlbCwKKwkJCQkJCQkJCQkgU3BlY2lhbEpv aW5JbmZvICpzamluZm8sCisJCQkJCQkJCQkJIExpc3QgKnJlc3RyaWN0bGlzdCk7CitleHRlcm4g UEdETExJTVBPUlQgam9pbnJlbF9zZXR1cF9ob29rX3R5cGUgam9pbnJlbF9zZXR1cF9ob29rOwog CiAvKgogICogcHJvdG90eXBlcyBmb3IgcGF0aG5vZGUuYwpAQCAtODUsNyArOTMsOCBAQCBleHRl cm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJIFBhdGhU YXJnZXQgKnRhcmdldCwKIAkJCQkJCQkJCQkJCSBMaXN0ICpoYXZpbmdxdWFsKTsKLWV4dGVybiBN YXRlcmlhbFBhdGggKmNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAq c3VicGF0aCk7CitleHRlcm4gTWF0ZXJpYWxQYXRoICpjcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxP cHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgsCisJCQkJCQkJCQkJICBib29sIGVuYWJsZWQpOwog ZXh0ZXJuIE1lbW9pemVQYXRoICpjcmVhdGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQlQYXRoICpzdWJwYXRoLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aHMuaAppbmRleCBmNmE2MmRmMGI0My4uNjFjMTYwN2Y4NzIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oCkBAIC0yOCw3ICsyOCwxNCBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IG1p bl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1pbl9w YXJhbGxlbF9pbmRleF9zY2FuX3NpemU7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf Z3JvdXBfYnlfcmVvcmRlcmluZzsKIAotLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJv bCBpbiBzZXRfcmVsX3BhdGhsaXN0KCkgKi8KKy8qIEhvb2tzIGZvciBwbHVnaW5zIHRvIGdldCBj b250cm9sIGluIHNldF9yZWxfcGF0aGxpc3QoKSAqLwordHlwZWRlZiB2b2lkICgqam9pbl9wYXRo X3NldHVwX2hvb2tfdHlwZSkgKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCSAgIFJlbE9w dEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCQkJICAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJ CQkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCQkJICAgSm9pblR5cGUgam9p bnR5cGUsCisJCQkJCQkJCQkJICAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKTsKK2V4dGVybiBQ R0RMTElNUE9SVCBqb2luX3BhdGhfc2V0dXBfaG9va190eXBlIGpvaW5fcGF0aF9zZXR1cF9ob29r OwogdHlwZWRlZiB2b2lkICgqc2V0X3JlbF9wYXRobGlzdF9ob29rX3R5cGUpIChQbGFubmVySW5m byAqcm9vdCwKIAkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQlJbmRleCBy dGksCi0tIAoyLjUxLjAKCg== --000000000000986f97064539da43 Content-Type: application/octet-stream; name="v5-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v5-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mitacht44 RnJvbSAyYmUxMDI1YTI5YjE2NDliYjFhOTJiNjA4NzllYTc0ZWQ5NTQxZGIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgNCBOb3YgMjAyNSAxNDo0NTozMSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjUgNS82 XSBXSVA6IEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNp bGl0eSB0aGF0ICgxKSBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgY2VydGFpbiBwbGFuIGNob2lj ZXMKc28gdGhhdCB0aGUgcGxhbm5lciBjYW5ub3QgcmV2ZXJzZSBjb3Vyc2Ugd2l0aG91dCBhdXRo b3JpemF0aW9uIGFuZAooMikgY2FuIGJlIHVzZWQgYnkga25vd2xlZGdlYWJsZSB1c2VycyB0byBp bnNpc3Qgb24gcGxhbiBjaG9pY2VzIGNvbnRyYXJ5CnRvIHdoYXQgdGhlIHBsYW5uZXIgYmVsaWV2 ZXMgYmVzdC4gSW4gYm90aCBjYXNlcywgdGVycmlibGUgb3V0Y29tZXMgYXJlCnBvc3NpYmxlOiB1 c2VycyBzaG91bGQgdGhpbmsgdHdpY2UgYW5kIHBlcmhhcHMgdGhyZWUgdGltZXMgYmVmb3JlCmNv bnN0cmFpbmluZyB0aGUgcGxhbm5lcidzIGFiaWxpdHkgdG8gZG8gYXMgaXQgdGhpbmtzIGJlc3Q7 IG5ldmVydGhlbGVzcywKdGhlcmUgYXJlIHByb2JsZW1zIHRoYXQgYXJlIG11Y2ggbW9yZSBlYXNp bHkgc29sdmVkIHdpdGggdGhlc2UgZmFjaWxpdGllcwp0aGFuIHdpdGhvdXQgdGhlbS4KCldlIHRh a2UgdGhlIGFwcHJvYWNoIG9mIGFuYWx5emluZyBhIGZpbmlzaGVkIHBsYW4gdG8gcHJvZHVjZSB0 ZXh0dWFsCm91dHB1dCwgd2hpY2ggd2UgY2FsbCAicGxhbiBhZHZpY2UiLCB0aGF0IGRlc2NyaWJl cyBrZXkgZGVjaXNpb25zIG1hZGUKZHVyaW5nIHBsYW47IGlmIHRoYXQgcGxhbiBhZHZpY2UgaXMg cHJvdmlkZWQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZwpjeWNsZXMsIGl0IHdpbGwgZm9yY2UgdGhv c2Uga2V5IGRlY2lzaW9ucyB0byBiZSBtYWRlIGluIHRoZSBzYW1lIHdheS4KTm90IGFsbCBwbGFu bmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7IGZvciBleGFtcGxl LApkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24gYXJlIGN1cnJlbnRs eSBvdXQgb2Ygc2NvcGUsCmFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQbGFuIGFkdmljZSBj YW4gYWxzbyBiZSBlZGl0ZWQgYnkgdGhlIHVzZXIsCm9yIGV2ZW4gd3JpdHRlbiBmcm9tIHNjcmF0 Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQgcG9zc2libGUgdG8KZ2VuZXJhdGUgb3V0Y29t ZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4gUGFydGlhbAphZHZp Y2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91dGNvbWVzIGJ1dCBu b3Qgb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2VkIG9ubHkgb24gc3Bl Y2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBzZXF1ZW50aWFsIHNj YW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3RpbWF0ZXMgdGhhdCBt aWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEKcG9zc2libHktaW5j b3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBiZSB1c2VmdWwgdG8K dXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQgYWZmZWN0cyBzZWxl Y3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5nLCB0aGF0IGlzIG91 dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxzLCBzZWUgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9SRUFETUUuCgpOT1RFOiBUaGlzIGNvZGUgaXMganVzdCBhIHByb29m IG9mIGNvbmNlcHQuIEEgYnVuY2ggb2YgdGhpbmdzIGRvbid0CndvcmsgYW5kIGEgbG90IG9mIHRo ZSBjb2RlIG5lZWRzIGNsZWFudXAuIEl0IGhhcyBubyBTR01MIGRvY3VtZW50YXRpb24KYW5kIG5v dCBlbm91Z2ggdGVzdCBjYXNlcywgYW5kIHNvbWUgb2YgdGhlIGV4aXN0aW5nIHRlc3QgY2FzZXMg ZG9uJ3QKZG8gYXMgd2Ugd291bGQgaG9wZS4gS25vd24gcHJvYmxlbXMgYXJlIGNhbGxlZCBvdXQg YnkgWFhYLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAg fCAgICAzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgNTAgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwg IDI3NSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8 ICAzMjAgKysrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0ICAg IHwgIDI5MiArKysKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91 dCB8ICAyOTcgKysrCiAuLi4vZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAgICAgICAgICAg ICAgfCAgIDY1ICsKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91 dCB8ICAyNDMgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0ICAg ICAgfCAgNzU3ICsrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRh eC5vdXQgICAgfCAgIDU5ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgICAg ICAgICAgICB8ICAgNzAgKwogLi4uL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAu c3FsICAgIHwgICA0MiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMg ICAgICAgfCAgNDU0ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmNvbnRyb2wgfCAgICA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2Uu aCAgICAgICB8ICAgMzcgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jICAgICAg ICAgICAgIHwgIDM5MiArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggICAg ICAgICAgICAgfCAgMjA0ICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9y LmMgICAgICAgfCAgNjM3ICsrKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxl Y3Rvci5oICAgICAgIHwgICAxOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRp Zmllci5jICAgICAgfCAgNDc2ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRl bnRpZmllci5oICAgICAgfCAgIDUyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2lu LmMgICAgICAgICAgICB8ICA2MTUgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf am9pbi5oICAgICAgICAgICAgfCAgMTA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9v dXRwdXQuYyAgICAgICAgICB8ICA2MjggKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfb3V0cHV0LmggICAgICAgICAgfCAgIDIyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wYXJzZXIueSAgICAgICAgICB8ICAzMzcgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BsYW5uZXIuYyAgICAgICAgIHwgMTcwNiArKysrKysrKysrKysrKysrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaCAgICAgICAgIHwgICAxNyArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jICAgICAgICAgICAgfCAgMjU4ICsrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaCAgICAgICAgICAgIHwgICA4NiArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sICAgICAgICAgfCAgMjk5ICsrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMgICAgICAgICAgIHwgIDQ5MCArKysrKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmggICAgICAgICAgIHwgIDExMyArKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jICAgICAgICAgIHwgIDg5MCArKysrKysrKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCAgICAgICAgICB8ICAxMjIgKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwgICAgICAgICB8ICAgNzYgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwgICAgIHwgICA5NiArCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbCAgfCAgIDc2ICsKIC4u Li9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCAgICB8ICAgNDEgKwogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgIHwgICA3OCArCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCAgICAgICAgICAgfCAgMTk1ICsrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsICAgICAgICAgfCAgIDQyICsKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbCAgICAgICB8ICAxNDcgKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMzcgKwogNDYgZmls ZXMgY2hhbmdlZCwgMTEyMjYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL1JFQURNRQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvZ2F0aGVyLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0CiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9w YXJ0aXRpb253aXNlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvc2Nhbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0 ZWd5LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xv Y2FsX2NvbGxlY3Rvci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZp bGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IDJmMGE4OGQzZjc3Li5kZDA0YzIwYWNkMiAxMDA2 NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zNCw2 ICszNCw3IEBAIFNVQkRJUlMgPSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJCXBnX2xvZ2ljYWxp bnNwZWN0IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXAorCQlwZ19wbGFuX2FkdmljZSBcCiAJCXBnX3By ZXdhcm0JXAogCQlwZ19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKZGlmZiAtLWdp dCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGVkMzBl ZTdkNjM5Li5jYjcxOGRiZGFjMCAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysg Yi9jb250cmliL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigncGdjcnlwdG8n KQogc3ViZGlyKCdwZ19mcmVlc3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2FsaW5zcGVjdCcp CiBzdWJkaXIoJ3BnX292ZXJleHBsYWluJykKK3N1YmRpcigncGdfcGxhbl9hZHZpY2UnKQogc3Vi ZGlyKCdwZ19wcmV3YXJtJykKIHN1YmRpcigncGdyb3dsb2NrcycpCiBzdWJkaXIoJ3BnX3N0YXRf c3RhdGVtZW50cycpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25v cmUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE5YTE0MjUzMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3BncGFfcGFy c2VyLmgKKy9wZ3BhX3BhcnNlci5jCisvcGdwYV9zY2FubmVyLmMKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZDRjNTU5YWVkOAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAs MCArMSw1MCBAQAorIyBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9i aWcgPSBwZ19wbGFuX2FkdmljZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJcGdfcGxhbl9h ZHZpY2UubyBcCisJcGdwYV9hc3QubyBcCisJcGdwYV9jb2xsZWN0b3IubyBcCisJcGdwYV9pZGVu dGlmaWVyLm8gXAorCXBncGFfam9pbi5vIFwKKwlwZ3BhX291dHB1dC5vIFwKKwlwZ3BhX3BhcnNl ci5vIFwKKwlwZ3BhX3BsYW5uZXIubyBcCisJcGdwYV9zY2FuLm8gXAorCXBncGFfc2Nhbm5lci5v IFwKKwlwZ3BhX3Ryb3ZlLm8gXAorCXBncGFfd2Fsa2VyLm8KKworRVhURU5TSU9OID0gcGdfcGxh bl9hZHZpY2UKK0RBVEEgPSBwZ19wbGFuX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJw Z19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuIgorCitS RUdSRVNTID0gZ2F0aGVyIGpvaW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNlIHNj YW4KK1RBUF9URVNUUyA9IDEKKworRVhUUkFfQ0xFQU4gPSBwZ3BhX3BhcnNlci5oIHBncGFfcGFy c2VyLmMgcGdwYV9zY2FubmVyLmMKKworIyByZXF1aXJlZCBmb3IgMDAxX3JlZ3Jlc3MucGwKK1JF R1JFU1NfU0hMSUI9JChhYnNfdG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3Mk KERMU1VGRklYKQorZXhwb3J0IFJFR1JFU1NfU0hMSUIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NP TkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitp bmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3Rv cF9idWlsZGRpciA9IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUu Z2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5tawor ZW5kaWYKKworIyBTZWUgbm90ZXMgaW4gc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGFib3V0 IHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzCitwZ3BhX3BhcnNlci5oOiBwZ3BhX3BhcnNlci5jCisJ dG91Y2ggJEAKKworcGdwYV9wYXJzZXIuYzogQklTT05GTEFHUyArPSAtZAorCisjIEZvcmNlIHRo ZXNlIGRlcGVuZGVuY2llcyB0byBiZSBrbm93biBldmVuIHdpdGhvdXQgZGVwZW5kZW5jeSBpbmZv IGJ1aWx0OgorcGdwYV9wYXJzZXIubyBwZ3BhX3NjYW5uZXIubzogcGdwYV9wYXJzZXIuaApkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDU5 MGNkMDNjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURN RQpAQCAtMCwwICsxLDI3NSBAQAorY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKKworUGxh biBBZHZpY2UKKz09PT09PT09PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtaW5pLWxh bmd1YWdlIGZvciAicGxhbiBhZHZpY2UiIHRoYXQgYWxsb3dzIGZvcgorY29udHJvbCBvZiBjZXJ0 YWluIGtleSBwbGFubmVyIGRlY2lzaW9ucy4gR29hbHMgaW5jbHVkZSAoMSkgZW5mb3JjaW5nIHBs YW4KK3N0YWJpbGl0eSAobXkgcHJldmlvdXMgcGxhbiB3YXMgZ29vZCBhbmQgSSB3b3VsZCBsaWtl IHRvIGtlZXAgZ2V0dGluZyBhCitzaW1pbGFyIG9uZSkgYW5kICgyKSBhbGxvd2luZyB1c2VycyB0 byBleHBlcmltZW50IHdpdGggcGxhbnMgb3RoZXIgdGhhbgordGhlIG9uZSBwcmVmZXJyZWQgYnkg dGhlIG9wdGltaXplci4gTm9uLWdvYWxzIGluY2x1ZGUgKDEpIGNvbnRyb2xsaW5nCitldmVyeSBw b3NzaWJsZSBwbGFubmVyIGRlY2lzaW9uIGFuZCAoMikgZm9yY2luZyBjb25zaWRlcmF0aW9uIG9m IHBsYW5zCit0aGF0IHRoZSBvcHRpbWl6ZXIgcmVqZWN0cyBmb3IgcmVhc29ucyBvdGhlciB0aGFu IGNvc3QuIChUaGVyZSBpcyBzb21lCityb29tIGZvciBiaWtlc2hlZGRpbmcgYWJvdXQgd2hhdCBl eGFjdGx5IHRoaXMgbm9uLWdvYWwgbWVhbnM6IHdoYXQgaWYKK3dlIHNraXAgcGF0aCBnZW5lcmF0 aW9uIGVudGlyZWx5IGZvciBhIGNlcnRhaW4gY2FzZSBvbiB0aGUgdGhlb3J5IHRoYXQKK3dlIGtu b3cgaXQgY2Fubm90IHdpbiBvbiBjb3N0PyBEb2VzIHRoYXQgY291bnQgYXMgYSBjb3N0LWJhc2Vk IHJlamVjdGlvbgorZXZlbiB0aG91Z2ggbm8gY29zdCB3YXMgZXZlciBjb21wdXRlZD8pCisKK0dl bmVyYWxseSwgcGxhbiBhZHZpY2UgaXMgYSBzZXJpZXMgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQg YWR2aWNlIGl0ZW1zLAorZWFjaCBvZiB3aGljaCBhcHBsaWVzIGFuIGFkdmljZSB0YWcgdG8gYSBs aXN0IG9mIGFkdmljZSB0YXJnZXRzLiBGb3IKK2V4YW1wbGUsICJTRVFfU0NBTihmb28pIEhBU0hf Sk9JTihiYXJAc3MpIiBjb250YWlucyB0d28gaXRlbXMgb2YgYWR2aWNlLAordGhlIGZpcnN0IG9m IHdoaWNoIGFwcGxpZXMgdGhlIFNFUV9TQ0FOIHRhZyB0byAiZm9vIiBhbmQgdGhlIHNlY29uZCBv Zgord2hpY2ggYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byAiYmFyQHNzIi4gSW4gdGhpcyBz aW1wbGUgZXhhbXBsZSwgZWFjaAordGFyZ2V0IGlkZW50aWZpZXMgYSBzaW5nbGUgcmVsYXRpb247 IHNlZSAiUmVsYXRpb24gSWRlbnRpZmllcnMiLCBiZWxvdy4KK0FkdmljZSB0YWdzIGNhbiBhbHNv IGJlIGFwcGxpZWQgdG8gZ3JvdXBzIG9mIHJlbGF0aW9uczsgZm9yIGV4YW1wbGUsCisiSEFTSF9K T0lOKGJheiAoYmxldGNoIHF1dXgpKSIgYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byB0aGUg c2luZ2xlCityZWxhdGlvbiBpZGVudGlmaWVyICJiYXoiIGFzIHdlbGwgYXMgdG8gdGhlIDItaXRl bSBsaXN0IGNvbnRhaW5pbmcKKyJibGV0Y2giIGFuZCAicXV1eCIuCisKK0NyaXRpY2FsbHksIHRo aXMgbW9kdWxlIGtub3dzIGJvdGggaG93IHRvIGdlbmVyYXRlIHBsYW4gYWR2aWNlIGZyb20gYW4K K2FscmVhZHktZXhpc3RpbmcgcGxhbiwgYW5kIGFsc28gaG93IHRvIGVuZm9yY2UgaXQgZHVyaW5n IGZ1dHVyZSBwbGFubmluZworY3ljbGVzLiBFdmVyeXRoaW5nIGl0IGRvZXMgaXMgaW50ZW5kZWQg dG8gYmUgInJvdW5kLXRyaXAgc2FmZSI6IGlmIHlvdQorZ2VuZXJhdGUgYWR2aWNlIGZyb20gYSBw bGFuIGFuZCB0aGVuIGZlZWQgdGhhdCBiYWNrIGludG8gYSBmdXR1cmUgcGxhbmluZworY3ljbGUs IGVhY2ggcGllY2Ugb2YgYWR2aWNlIHNob3VsZCBiZSBndWFyYW50ZWVkIHRvIGFwcGx5IHRvIHRo ZSBleGFjdGx5IHRoZQorc2FtZSBwYXJ0IG9mIHRoZSBxdWVyeSBmcm9tIHdoaWNoIGl0IHdhcyBn ZW5lcmF0ZWQgd2l0aG91dCBhbWJpZ3VpdHkgb3IKK2d1ZXNzd29yaywgYW5kIGl0IHNob3VsZCBz dWNjZXNmdWxseSBlbmZvcmNlIHRoZSBzYW1lIHBsYW5uaW5nIGRlY2lzaW9uIHRoYXQKK2xlZCB0 byBpdCBiZWluZyBnZW5lcmF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBOb3RlIHRoYXQgdGhlcmUg aXMgbm8KK2ludGVudGlvbiB0aGF0IHRoZXNlIGd1YXJhbnRlZXMgaG9sZCBpbiB0aGUgcHJlc2Vu Y2Ugb2YgaW50ZXJ2ZW5pbmcgRERMOworZS5nLiBpZiB5b3UgY2hhbmdlIHRoZSBwcm9wZXJ0aWVz IG9mIGEgZnVuY3Rpb24gc28gdGhhdCBhIHN1YnF1ZXJ5IGlzIG5vCitsb25nZXIgaW5saW5lZCwg b3IgaWYgeW91IGRyb3AgYW4gaW5kZXggbmFtZWQgaW4gdGhlIHBsYW4gYWR2aWNlLCB0aGUgYWR2 aWNlCitpc24ndCBnb2luZyB0byB3b3JrIGFueSBtb3JlLiBUaGF0J3MgZXhwZWN0ZWQuCisKK1Ro aXMgbW9kdWxlIGFpbXMgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gZm9sbG93IGFueSBwcm92aWRl ZCBhZHZpY2Ugd2l0aG91dAorcmVnYXJkIHRvIHdoZXRoZXIgaXQgaXMgYXBwZWFycyB0byBiZSBn b29kIGFkdmljZSBvciBiYWQgYWR2aWNlLiAgSWYgdGhlCit1c2VyIHByb3ZpZGVzIGJhZCBhZHZp Y2UsIHdoZXRoZXIgZGVyaXZlZCBmcm9tIGEgcHJldmlvdXNseS1nZW5lcmF0ZWQgcGxhbgorb3Ig bWFudWFsbHkgd3JpdHRlbiwgdGhleSBtYXkgZ2V0IGEgYmFkIHBsYW4uIFdlIHJlZ2FyZCB0aGlz IGFzIHVzZXIgZXJyb3IsCitub3QgYSBkZWZlY3QgaW4gdGhpcyBtb2R1bGUuIEl0IHNlZW1zIGxp a2VseSB0aGF0IGFwcGx5aW5nIGFkdmljZQoranVkaWNpb3VzbHkgYW5kIG9ubHkgd2hlbiB0cnVs eSByZXF1aXJlZCB0byBhdm9pZCBwcm9ibGVtcyB3aWxsIGJlIGEgbW9yZQorc3VjY2Vzc2Z1bCBz dHJhdGVneSB0aGFuIGFwcGx5aW5nIGl0IHdpdGggYSBicm9hZCBicnVzaCwgYnV0IHVzZXJzIGFy ZSBmcmVlCit0byBleHBlcmltZW50IHdpdGggd2hhdGV2ZXIgc3RyYXRlZ2llcyB0aGV5IHRoaW5r IGJlc3QuCisKK1JlbGF0aW9uIElkZW50aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitV bmlxdWVseSBpZGVudGlmeWluZyB0aGUgcGFydCBvZiBhIHF1ZXJ5IHRvIHdoaWNoIGEgY2VydGFp biBwaWVjZSBvZgorYWR2aWNlIGFwcGxpZXMgaXMgaGFyZGVyIHRoYW4gaXQgc291bmRzLiBPdXIg YmFzaWMgYXBwcm9hY2ggaXMgdG8gdXNlCityZWxhdGlvbiBhbGlhc2VzIGFzIGEgc3RhcnRpbmcg cG9pbnQsIGFuZCB0aGVuIGRpc2FtYmlndWF0ZS4gVGhlcmUgYXJlCit0aHJlZSB3YXlzIHRoYXQg c2FtZSByZWxhdGlvbiBhbGlhcyBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXM6CisKKzEuIEl0IGNh biBhcHBlYXIgaW4gbW9yZSB0aGFuIG9uZSBzdWJxdWVyeS4KKworMi4gSXQgY2FuIGFwcGVhciBt b3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZSBzdWJxdWVyeSwKKyAgIGUuZy4gKGZvbyBKT0lOIGJh cikgeCBKT0lOIGZvby4KKworMy4gVGhlIHRhYmxlIGNhbiBiZSBwYXJ0aXRpb25lZC4KKworQW55 IGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHkuICBU aGVyZWZvcmUsIG91cgorZ2VuZXJhbCBzeW50YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmllciBp czoKKworYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRp dGlvbl9uYW1lQHBsYW5fbmFtZQorCitBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSBhbGlh c19uYW1lIGFyZSBvcHRpb25hbCBhbmQgaW5jbHVkZWQgb25seQord2hlbiByZXF1aXJlZC4gV2hl biBhIGNvbXBvbmVudCBpcyBvbWl0dGVkLCB0aGUgYXNzb2NpYXRlZCBwdW5jdHVhdGlvbgorbXVz dCBhbHNvIGJlIG9taXR0ZWQuIE9jY3VycmVuY2UgbnVtYmVycyBhcmUgY291bnRlZCBpZ25vcmlu ZyBjaGlsZHJlbiBvZgorcGFydGl0aW9uZWQgdGFibGVzLiAgV2hlbiB0aGUgZ2VuZXJhdGVkIG9j Y3VycmVuY2UgbnVtYmVyIGlzIDEsIHdlIG9taXQKK3RoZSBvY2N1cnJlbmNlIG51bWJlci4gVGhl IHBhcnRpdGlvbiBzY2hlbWEgYW5kIHBhcnRpdGlvbiBuYW1lIGFyZSBpbmNsdWRlZAorb25seSBm b3IgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQgdGFibGVzLiBJbiBnZW5lcmF0ZWQgYWR2aWNlLCB0 aGUKK3BhcnRpdGlvbl9zY2hlbWEgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW5ldmVyIHRoZXJlIGlz IGEgcGFydGl0aW9uX25hbWUsCitidXQgdXNlci13cml0dGVuIGFkdmljZSBtYXkgbWVudGlvbiB0 aGUgbmFtZSBhbmQgb21pdCB0aGUgc2NoZW1hLiBUaGUKK3BsYW5fbmFtZSBpcyBvbWl0dGVkIGZv ciB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLgorCitTY2FuIEFkdmljZQorPT09PT09PT09PT0K KworRm9yIG1hbnkgdHlwZXMgb2Ygc2Nhbiwgbm8gYWR2aWNlIGlzIGdlbmVyYXRlZCBvciBwb3Nz aWJsZTsgZm9yIGluc3RhbmNlLAorYSBzdWJxdWVyeSBpcyBhbHdheXMgc2Nhbm5lZCB1c2luZyBh IHN1YnF1ZXJ5IHNjYW4uIFdoaWxlIHRoYXQgc2NhbiBtYXkgYmUKK2VsaWRlZCB2aWEgc2V0cmVm cyBwcm9jZXNzaW5nLCB0aGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQgb25seSBvbmUK K2Jhc2ljIGFwcHJvYWNoIGV4aXN0cy4gSGVuY2UsIHNjYW4gYWR2aWNlIGFwcGxpZXMgbW9zdGx5 IHRvIHJlbGF0aW9ucywgd2hpY2gKK2NhbiBiZSBzY2FubmVkIGluIG11bHRpcGxlIHdheXMuCisK K1dlIHRlbmQgdG8gdGhpbmsgb2YgYSBzY2FuIGFzIHRhcmdldGluZyBhIHNpbmdsZSByZWxhdGlv biwgYW5kIHRoYXQncworbm9ybWFsbHkgdGhlIGNhc2UsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8g YmUuIEZvciBpbnN0YW5jZSwgaWYgYSBqb2luIGlzCitwcm92ZW4gZW1wdHksIHRoZSB3aG9sZSB0 aGluZyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBSZXN1bHQgbm9kZQord2hpY2gsIGlu IGVmZmVjdCwgaXMgYSBkZWdlbmVyYXRlIHNjYW4gb2YgZXZlcnkgcmVsYXRpb24gaW4gdGhlIGNv bGxhcHNlZAorcG9ydGlvbiBvZiB0aGUgam9pbiB0cmVlLiBTaW1pbGFybHksIGl0J3MgcG9zc2li bGUgdG8gaW5qZWN0IGEgY3VzdG9tIHNjYW4KK2luIHN1Y2ggYSB3YXkgdGhhdCBpdCByZXBsYWNl cyBhbiBlbnRpcmUgam9pbi4gSWYgd2UgZXZlciBlbWl0IGFkdmljZQorZm9yIHRoZXNlIGNhc2Vz LCBpdCB3b3VsZCB0YXJnZXQgc2V0cyBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBzdXJyb3VuZGVk CitieSBjdXJseSBicmFuY2VzLCBlLmcuIFNPTUVfU09SVF9PRl9TQ0FOKGZvbyAoYmFyIGJheikp IHdvdWxkIG1lYW4gdGhhdCB0aGUKK3RoZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBm b3IgZm9vIGFzIGEgc2luZ2xlIHJlbGF0aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2Yg YmFyIGFuZCBiYXogYXMgYSBqb2luIHByb2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAor cHJlc2VudC4KKworRm9yIGluZGV4IGFuZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxh dGlvbiBiZWluZyBzY2FubmVkIGFuZCB0aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBt dXN0IGJlIHNwZWNpZmllZC4gRm9yIGV4YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHgg YmFyIGJhcl9iX2lkeCkgaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4 LW9ubHkKK3NjYW4pIHNob3VsZCBiZSB1c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZv bywgYW5kIHRoYXQgYW4gaW5kZXggc2Nhbgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdo ZW4gc2Nhbm5pbmcgYmFyLgorCitCaXRtYXAgaGVhcCBzY2FucyBhbGxvdyBmb3IgYSBtb3JlIGNv bXBsaWNhdGVkIGluZGV4IHNwZWNpZmljYXRpb24uIEZvcgorZXhhbXBsZSwgQklUTUFQX0hFQVBf U0NBTihmb28gJiYoZm9vX2FfaWR4IHx8KGZvb19iX2lkeCBmb29fY19pZHgpKSkgc2F5cwordGhh dCBmb28gc2hvdWxkIGJlIHNjYW5uZWQgdXNpbmcgYSBCaXRtYXBIZWFwU2NhbiBvdmVyIGEgQml0 bWFwQW5kIGJldHdlZW4KK2Zvb19hX2lkeCBhbmQgdGhlIHJlc3VsdCBvZiBhIEJpdG1hcE9yIGJl dHdlZW4gZm9vX2JfaWR4IGFuZCBmb29fY19pZHguCisKK1hYWDogQ3VycmVudGx5LCBCSVRNQVBf SEVBUF9TQ0FOIGRvZXMgbm90IGVuZm9yY2UgdGhlIGluZGV4IHNwZWNpZmljYXRpb24sCitiZWNh dXNlIHRoZSBhdmFpbGFibGUgaG9va3MgYXJlIGluc3VmZmljaWVudCB0byBkbyBzby4gSXQncyBw b3NzaWJsZSB0aGF0Cit0aGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGV4Y2x1ZGUgdGhlIGluZGV4 IHNwZWNpZmljYXRpb24gYWx0b2dldGhlciBhbmQKK3NpbXBseSBpbnNpc3QgdGhhdCBzb21lIHNv cnQgb2YgYml0bWFwIGhlYXAgc2NhbiBpcyB1c2VkOyBhbHRlcm5hdGl2ZWx5LAord2UgbmVlZCBi ZXR0ZXIgaG9va3MuCisKK0pvaW4gT3JkZXIgQWR2aWNlCis9PT09PT09PT09PT09PT09PQorCitU aGUgSk9JTl9PUkRFUiB0YWcgc3BlY2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCBzZXZlcmFsIHRh YmxlcyB0aGF0IGFyZQorcGFydCBvZiB0aGUgc2FtZSBqb2luIHByb2JsZW0gc2hvdWxkIGJlIGpv aW5lZC4gRWFjaCBzdWJxdWVyeSAoZXhjZXB0IGZvcgordGhvc2UgdGhhdCBhcmUgaW5saW5lZCkg aXMgYSBzZXBhcmF0ZSBqb2luIHByb2JsZW0uIFdpdGhpbiBhIHN1YnF1ZXJ5LAorcGFydGl0aW9u d2lzZSBqb2lucyBjYW4gY3JlYXRlIGFkZGl0aW9uYWwsIHNlcGFyYXRlIGpvaW4gcHJvYmxlbXMu IEhlbmNlLAorcXVlcmllcyBpbnZvbHZpbmcgcGFydGl0aW9ud2lzZSBqb2lucyBtYXkgdXNlIEpP SU5fT1JERVIoKSBtYW55IHRpbWVzLgorCitXZSB0YWtlIHRoZSBjYW5vbmljYWwgam9pbiBzdHJ1 Y3R1cmUgdG8gYmUgYW4gb3V0ZXItZGVlcCB0cmVlLCBzbworSk9JTl9PUkRFUih0MSB0MiB0Mykg c2F5cyB0aGF0IHQxIGlzIHRoZSBkcml2aW5nIHRhYmxlIGFuZCBzaG91bGQgYmUgam9pbmVkCitm aXJzdCB0byB0MiBhbmQgdGhlbiB0byB0My4gSWYgdGhlIGpvaW4gcHJvYmxlbSBpbnZvbHZlcyBh ZGRpdGlvbmFsIHRhYmxlcywKK3RoZXkgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIgYWZ0ZXIg dGhlIGpvaW4gYmV0d2VlbiB0MSwgdDIsIGFuZCB0MyBoYXMKK2JlZW4gY29uc3RydWN0dXJlZC4g R2VuZXJhdGVkIGpvaW4gYWR2aWNlIGFsd2F5cyBtZW50aW9ucyBhbGwgdGFibGVzCitpbiB0aGUg am9pbiBwcm9ibGVtLCBidXQgbWFudWFsbHkgd3JpdHRlbiBqb2luIGFkdmljZSBuZWVkIG5vdCBk byBzby4KKworRm9yIHRyZWVzIHdoaWNoIGFyZSBub3Qgb3V0ZXItZGVlcCwgcGFyZW50aGVzZXMg Y2FuIGJlIHVzZWQuIEZvciBleGFtcGxlLAorSk9JTl9PUkRFUih0MSAodDIgdDMpKSBzYXlzIHRo YXQgdGhlIHRvcC1sZXZlbCBqb2luIHNob3VsZCBoYXZlIHQxIG9uIHRoZQorb3V0ZXIgc2lkZSBh bmQgYSBqb2luIGJldHdlZW4gdDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLiBUaGF0IGpvaW4g c2hvdWxkCitiZSBjb25zdHJ1Y3RlZCBzbyB0aGF0IHQyIGlzIG9uIHRoZSBvdXRlciBzaWRlIGFu ZCB0MyBpcyBvbiB0aGUgaW5uZXIgc2lkZS4KKworSW4gc29tZSBjYXNlcywgaXQncyBub3QgcG9z c2libGUgdG8gZnVsbHkgc3BlY2lmeSB0aGUgam9pbiBvcmRlciBpbiB0aGlzIHdheS4KK0ZvciBl eGFtcGxlLCBpZiB0MiBhbmQgdDMgYXJlIGJlaW5nIHNjYW5uZWQgYnkgYSBzaW5nbGUgY3VzdG9t IHNjYW4gb3IgZm9yZWlnbgorc2Nhbiwgb3IgaWYgYSBwYXJ0aXRpb253aXNlIGpvaW4gaXMgYmVp bmcgcGVyZm9ybWVkIGJldHdlZW4gdGhvc2UgdGFibGVzLCB0aGVuCitpdCdzIGltcG9zc2libGUg dG8gc2F5IHRoYXQgdDIgaXMgdGhlIG91dGVyIHRhYmxlIGFuZCB0MyBpcyB0aGUgaW5uZXIgdGFi bGUsCitvciB0aGUgb3RoZXIgd2F5IGFyb3VuZDsgaXQncyBqdXN0IHVuZGVmaW5lZC4gSW4gc3Vj aCBjYXNlcywgd2UgZ2VuZXJhdGUKK2pvaW4gYWR2aWNlIHRoYXQgdXNlcyBjdXJseSBicmFjZXMs IGludGVuZGluZyB0byBpbmRpY2F0ZSBhIGxhY2sgb2Ygb3JkZXJpbmc6CitKT0lOX09SREVSKHQx IHt0MiB0M30pIHNheXMgdGhhdCB0aGUgdXBwZXJtb3N0IGpvaW4gc2hvdWxkIGhhdmUgdDEgb24g dGhlIG91dGVyCitzaWRlIGFuZCBzb21lIGtpbmQgb2Ygam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBv biB0aGUgaW5uZXIgc2lkZSwgYnV0IHdpdGhvdXQKK3NheWluZyBob3cgdGhhdCBqb2luIG11c3Qg YmUgcGVyZm9ybWVkIG9yIGFueXRoaW5nIGFib3V0IHdoaWNoIHJlbGF0aW9uIHNob3VsZAorYXBw ZWFyIG9uIHdoaWNoIHNpZGUgb2YgdGhlIGpvaW4sIG9yIGV2ZW4gd2hldGhlciB0aGlzIGtpbmQg b2Ygam9pbiBoYXMgc2lkZXMuCisKK0pvaW4gU3RyYXRlZ3kgQWR2aWNlCis9PT09PT09PT09PT09 PT09PT09PQorCitUYWdzIHN1Y2ggYXMgTkVTVEVEX0xPT1BfUExBSU4gc3BlY2lmeSB0aGUgbWV0 aG9kIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8KK3BlcmZvcm0gYSBjZXJ0YWluIGpvaW4uIE1vcmUg c3BlY2lmaWNhbGx5LCBORVNURURfTE9PUF9QTEFJTih4ICh5IHopKSBzYXlzCit0aGF0IHRoZSBw bGFuIHNob3VsZCBwdXQgdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgIngiIG9uIHRo ZSBpbm5lcgorc2lkZSBvZiBhIHBsYWluIG5lc3RlZCBsb29wIChvbmUgd2l0aG91dCBtYXRlcmlh bGl6YXRpb24gb3IgbWVtb2l6YXRpb24pCithbmQgdGhhdCBpdCBzaG91bGQgYWxzbyBwdXQgYSBq b2luIGJldHdlZW4gdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMKKyJ5IiBhbmQgdGhl IHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgInoiIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEg bmVzdGVkCitsb29wLiBIZW5jZSwgZm9yIGFuIE4tdGFibGUgam9pbiBwcm9ibGVtLCB0aGVyZSB3 aWxsIGJlIE4tMSBwaWVjZXMgb2Ygam9pbgorc3RyYXRlZ3kgYWR2aWNlOyBubyBqb2luIHN0cmF0 ZWd5IGFkdmljZSBpcyByZXF1aXJlZCBmb3IgdGhlIG91dGVybW9zdAordGFibGUgaW4gdGhlIGpv aW4gcHJvYmxlbS4KKworQ29uc2lkZXJpbmcgdGhhdCB3ZSBoYXZlIGJvdGggam9pbiBvcmRlciBh ZHZpY2UgYW5kIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLAoraXQgbWlnaHQgc2VlbSBuYXR1cmFsIHRv IHNheSB0aGF0IE5FU1RFRF9MT09QX1BMQUlOKHgpIHNob3VsZCBiZSByZWRlZmluZWQKK3RvIG1l YW4gdGhhdCB4IHNob3VsZCBhcHBlYXIgYnkgaXRzZWxmIG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhl ciBvZiBhIG5lc3RlZAorbG9vcCwgcmF0aGVyIHRoYW4gc3BlY2lmaWNhbGx5IG9uIHRoZSBpbm5l ciBzaWRlLCBidXQgdGhpcyBkZWZpbml0aW9uIGFwcGVhcnMKK3VzZWxlc3MgaW4gcHJhY3RpY2Uu IEl0IGdpdmVzIHRoZSBwbGFubmVyIHRvbyBtdWNoIGZyZWVkb20gdG8gZG8gdGhpbmdzIHRoYXQK K2JlYXIgbGl0dGxlIHJlc2VtYmxhbmNlIHRvIHdoYXQgdGhlIHVzZXIgcHJvYmFibHkgaGFkIGlu IG1pbmQuIFRoaXMgbWFrZXMKK29ubHkgYSBsaW1pdGVkIGFtb3VudCBvZiBwcmFjdGljYWwgZGlm ZmVyZW5jZSBpbiB0aGUgY2FzZSBvZiBhIG1lcmdlIGpvaW4gb3IKK3VucGFyYW1ldGVyaXplZCBu ZXN0ZWQgbG9vcCwgYnV0IGZvciBhIHBhcmFtZXRlcml6ZWQgbmVzdGVkIGxvb3Agb3IgYSBoYXNo Citqb2luLCB0aGUgdHdvIHNpZGVzIGFyZSB0cmVhdGVkIHZlcnkgZGlmZmVyZW50bHkgYW5kIHNh eWluZyB0aGF0IGEgY2VydGFpbgorcmVsYXRpb24gc2hvdWxkIGJlIGludm9sdmVkIGluIG9uZSBv ZiB0aG9zZSBvcGVyYXRpb25zIHdpdGhvdXQgc2F5aW5nIHdoaWNoCityb2xlIGl0IHNob3VsZCB0 YWtlIGlzbid0IHNheWluZyBtdWNoLgorCitUaGlzIGNob2ljZSBvZiBkZWZpbml0aW9uIGltcGxp ZXMgdGhhdCBqb2luIHN0cmF0ZWd5IGFkdmljZSBhbHNvIGltcG9zZXMgc29tZQoram9pbiBvcmRl ciBjb25zdHJhaW50cy4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgam9pbiBiZXR3ZWVuIGZvbyBhbmQg YmFyLAorSEFTSF9KT0lOKGJhcikgaW1wbGllcyB0aGF0IGZvbyBpcyB0aGUgZHJpdmluZyB0YWJs ZS4gT3RoZXJ3aXNlLCBpdCB3b3VsZAorYmUgaW1wb3NzaWJsZSB0byBwdXQgYmFyIGJlbmVhdGgg dGhlIGlubmVyIHNpZGUgb2YgYSBIYXNoIEpvaW4uCisKK05vdGUgdGhhdCwgZ2l2ZW4gdGhpcyBk ZWZpbml0aW9uLCBpdCdzIHJlYXNvbmFibGUgdG8gY29uc2lkZXIgZGVsZXRpbmcgdGhlCitqb2lu IG9yZGVyIGFkdmljZSBidXQgYXBwbHlpbmcgdGhlIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiBGb3Ig ZXhhbXBsZSwKK2NvbnNpZGVyIGEgc3RhciBzY2hlbWEgd2l0aCB0YWJsZXMgZmFjdCwgZGltMSwg ZGltMiwgZGltMywgZGltNCwgYW5kIGRpbTUuCitUaGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg YWR2aWNlIG1pZ2h0IHNwZWNpZnkgSk9JTl9PUkRFUihmYWN0IGRpbTEgZGltMworZGltNCBkaW0y IGRpbTUpIEhBU0hfSk9JTihkaW0yIGRpbTQpIE5FU1RFRF9MT09QX1BMQUlOKGRpbTEgZGltMyBk aW01KS4KK0RlbGV0aW5nIHRoZSBKT0lOX09SREVSIGFkdmljZSBhbGxvd3MgdGhlIHBsYW5uZXIg dG8gcmVvcmRlciB0aGUgam9pbnMKK2hvd2V2ZXIgaXQgbGlrZXMgd2hpbGUgc3RpbGwgZm9yY2lu ZyB0aGUgc2FtZSBjaG9pY2Ugb2Ygam9pbiBtZXRob2QuIFRoaXMKK3NlZW1zIHBvdGVudGlhbGx5 IHVzZWZ1bCwgYW5kIGlzIG9uZSByZWFzb24gd2h5IGEgdW5pZmllZCBzeW50YXggdGhhdCBjb250 cm9scworYm90aCBqb2luIG9yZGVyIGFuZCBqb2luIG1ldGhvZCBpbiBhIHNpbmdsZSBsb2N1dGlv biB3YXMgbm90IGNob3Nlbi4KKworQWR2aWNlIENvbXBsZXRlbmVzcworPT09PT09PT09PT09PT09 PT09PQorCitBbiBlc3NlbnRpYWwgZ3VpZGluZyBwcmluY2lwbGUgaXMgdGhhdCBubyBpbmZlcmVu Y2UgbWF5IG1hZGUgb24gdGhlIGJhc2lzCitvZiB0aGUgYWJzZW5jZSBvZiBhZHZpY2UuIFRoZSB1 c2VyIGlzIGVudGl0bGVkIHRvIHJlbW92ZSBhbnkgcG9ydGlvbiBvZiB0aGUKK2dlbmVyYXRlZCBh ZHZpY2Ugd2hpY2ggdGhleSBkZWVtIHVuc3VpdGFibGUgb3IgY291bnRlcnByb2R1Y3RpdmUgYW5k IHRoZQorcmVzdWx0IHNob3VsZCBvbmx5IGJlIHRvIGluY3JlYXNlIHRoZSBmbGV4aWJpbGl0eSBh ZmZvcmRlZCB0byB0aGUgcGxhbm5lci4KK1RoaXMgbWVhbnMgdGhhdCBpZiBhZHZpY2UgY2FuIHNh eSB0aGF0IGEgY2VydGFpbiBvcHRpbWl6YXRpb24gb3IgdGVjaG5pcXVlCitzaG91bGQgYmUgdXNl ZCwgaXQgc2hvdWxkIGFsc28gYmUgYWJsZSB0byBzYXkgdGhhdCB0aGUgb3B0aW1pemF0aW9uIG9y Cit0ZWNobmlxdWUgc2hvdWxkIG5vdCBiZSB1c2VkLiBXZSBzaG91bGQgbmV2ZXIgYXNzdW1lIHRo YXQgdGhlIGFic2VuY2Ugb2YgYW4KK2luc3RydWN0aW9uIHRvIGRvIGEgY2VydGFpbiB0aGluZyBt ZWFucyB0aGF0IGl0IHNob3VsZCBub3QgYmUgZG9uZTsgYWxsCitpbnN0cnVjdGlvbnMgbXVzdCBi ZSBleHBsaWNpdC4KKworU2VtaWpvaW4gVW5pcXVlbmVzcworPT09PT09PT09PT09PT09PT09PQor CitGYWNlZCB3aXRoIGEgc2VtaWpvaW4sIHRoZSBwbGFubmVyIGNvbnNpZGVycyBib3RoIGEgZGly ZWN0IGltcGxlbWVudGF0aW9uCithbmQgYSBwbGFuIHdoZXJlIHRoZSBvbmUgc2lkZSBpcyBtYWRl IHVuaXF1ZSBhbmQgdGhlbiBhbiBpbm5lciBqb2luIGlzCitwZXJmb3JtZWQuIFdlIGVtaXQgU0VN SUpPSU5fVU5JUVVFKCkgYWR2aWNlIHdoZW4gdGhpcyB0cmFuc2Zvcm1hdGlvbiBvY2N1cnMKK2Fu ZCBTRU1JSk9JTl9OT05fVU5JUVVFKCkgYWR2aWNlIHdoZW4gaXQgZG9lc24ndC4gVGhlc2UgaXRl bXMgd29yayBsaWtlCitqb2luIHN0cmF0ZWd5IGFkdmljZTogdGhlIGlubmVyIHNpZGUgb2YgdGhl IHJlbGV2YW50IGpvaW4gaXMgbmFtZWQsIGFuZCB0aGUKK2Nob3NlbiBqb2luIG9yZGVyIG11c3Qg YmUgY29tcGF0aWJsZSB3aXRoIHRoZSBhZHZpY2UgaGF2aW5nIHNvbWUgZWZmZWN0LgorCitYWFg6 IEN1cnJlbnRseSwgU0VNSUpPSU5fTk9OX1VOSVFVRSgpIGFkdmljZSBpcyBlbWl0dGVkIGluIHNv bWUgc2l0dWF0aW9ucword2hlcmUgdGhlIFNFTUlKT0lOX1VOSVFVRSgpIGFwcHJvYWNoIHdhcyBk ZXRlcm1pbmVkIHRvIGJlIG5vbi12aWFibGU7IGlkZWFsbHksCit3ZSBzaG91bGQgYXZvaWQgdGhh dC4KKworWFhYOiBSaWdodCBzZW1pam9pbnMgaGF2ZW4ndCBiZWVuIHByb3Blcmx5IHRob3VnaHQg dGhyb3VnaC4gVGhlIGFzc29jaWF0ZWQKK2NvZGUgcHJvYmFibHkganVzdCBkb2Vzbid0IHdvcmsu CisKK1hYWDogU2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UgaGFzIG5vIGF1dG9tYXRlZCB0ZXN0 cyBhbmQgbmVlZCBzdWJzdGFudGlhbGx5Cittb3JlIG1hbnVhbCB0ZXN0aW5nLgorCitQYXJ0aXRp b253aXNlCis9PT09PT09PT09PT09CisKK1BBUlRJVElPTldJU0UoKSBhZHZpc2UgY2FuIGJlIHVz ZWQgdG8gc3BlY2lmeSBib3RoIHRob3NlIHBhcnRpdGlvbndpc2Ugam9pbnMKK3doaWNoIHNob3Vs ZCBiZSBwZXJmb3JtZWQgYW5kIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgcGVyZm9ybWVkOyB0 aGUgaWRlYQoraXMgdGhhdCBlYWNoIGFyZ3VtZW50IHRvIFBBUlRJVElPTldJU0Ugc3BlY2lmaWVz IGEgc2V0IG9mIHJlbGF0aW9ucyB0aGF0CitzaG91bGQgYmUgc2Nhbm5lZCBwYXJ0aXRpb253aXNl IGFmdGVyIGJlaW5nIGpvaW5lZCB0byBlYWNoIG90aGVyIGFuZCBub3RoaW5nCitlbHNlLiBIZW5j ZSwgZm9yIGV4YW1wbGUsIFBBUlRJVElPTldJU0UoKHQxIHQyKSB0Mykgc3BlY2lmaWVzIHRoYXQg dGhlCitxdWVyeSBzaG91bGQgY29udGFpbiBhIHBhcnRpdGlvbndpc2Ugam9pbiBiZXR3ZWVuIHQx IGFuZCB0MiBhbmQgdGhhdCB0Mworc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIGFueSBwYXJ0aXRpb253 aXNlIGpvaW4uIElmIHRoZXJlIGFyZSBubyBvdGhlciByZWxzCitpbiB0aGUgcXVlcnksIHNwZWNp ZnlpbmcganVzdCBQQVJUSVRJT05XSVNFKCh0MSB0MikpIHdvdWxkIGhhdmUgdGhlIHNhbWUKK2Vm ZmVjdCwgc2luY2UgdGhlcmUgd291bGQgYmUgbm8gb3RoZXIgcmVscyB0byB3aGljaCB0MyBjb3Vs ZCBiZSBqb2luZWQgaW4KK2EgcGFydGl0aW9ud2lzZSBmYXNoaW9uLgorCitQYXJhbGxlbCBRdWVy eSAoR2F0aGVyLCBldGMuKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRWFjaCBh cmd1bWVudCB0byBHQVRIRVIoKSBvciBHQVRIRVJfTUVSR0UoKSBpcyBhIHNpbmdsZSByZWxhdGlv biBvciBhbgorZXhhY3Qgc2V0IG9mIHJlbGF0aW9ucyBvbiB0b3Agb2Ygd2hpY2ggYSBHYXRoZXIg b3IgR2F0aGVyIE1lcmdlIG5vZGUsCityZXNwZWN0aXZlbHksIHNob3VsZCBiZSBwbGFjZWQuIEVh Y2ggYXJndW1lbnQgdG8gTk9fR0FUSEVSKCkgaXMgYSBzaW5nbGUKK3JlbGF0aW9uIHRoYXQgc2hv dWxkIG5vdCBhcHBlYXIgYmVuZWF0aCBhbnkgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlOwor dGhhdCBpcywgcGFyYWxsZWxpc20gc2hvdWxkIG5vdCBiZSB1c2VkLgorCitJbXBsaWNpdCBKb2lu IE9yZGVyIENvbnN0cmFpbnRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1do ZW4gSk9JTl9PUkRFUigpIGFkdmljZSBpcyBub3QgcHJvdmlkZWQgZm9yIGEgcGFydGljdWxhciBq b2luIHByb2JsZW0sCitvdGhlciBwaWVjZXMgb2YgYWR2aWNlIG1heSBzdGlsbCBpbmNpZGVudGFs bHkgY29uc3RyYWludCB0aGUgam9pbiBvcmRlci4KK0ZvciBleGFtcGxlLCBhIHVzZXIgd2hvIHNw ZWNpZmllcyBIQVNIX0pPSU4oKGZvbyBiYXIpKSBpcyBleHBsaWNpdGx5IHNheWluZwordGhhdCB0 aGVyZSBzaG91bGQgYmUgYSBoYXNoIGpvaW4gd2l0aCBleGFjdGx5IGZvbyBhbmQgYmFyIG9uIHRo ZSBvdXRlcgorc2lkZSBvZiBpdCwgYnV0IHRoYXQgYWxzbyBpbXBsaWVzIHRoYXQgZm9vIGFuZCBi YXIgbXVzdCBiZSBqb2luZWQgdG8KK2VhY2ggb3RoZXIgYmVmb3JlIGVpdGhlciBvZiB0aGVtIGlz IGpvaW5lZCB0byBhbnl0aGluZyBlbHNlLiBPdGhlcndpc2UsCit0aGUgam9pbiB0aGUgdXNlciBp cyBhdHRlbXB0aW5nIHRvIGNvbnN0cmFpbnQgd29uJ3QgYWN0dWFsbHkgb2NjdXIgaW4gdGhlCitx dWVyeSwgd2hpY2ggZW5kcyB1cCBsb29raW5nIGxpa2UgdGhlIHN5c3RlbSBoYXMganVzdCBkZWNp ZGVkIHRvIGlnbm9yZQordGhlIGFkdmljZSBhbHRvZ2V0aGVyLgorCitGdXR1cmUgV29yaworPT09 PT09PT09PT0KKworV2UgZG9uJ3QgaGFuZGxlIGNob2ljZSBvZiBhZ2dyZWdhdGlvbjogaXQgd291 bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGZvcmNlCitzb3J0ZWQgb3IgZ3JvdXBlZCBhZ2dyZWdh dGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMgY2FuIGJlIGxlZnQgdG8gZnV0dXJlIHdvcmsuCisKK01v cmUgc2VyaW91c2x5LCB3ZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IGVhZ2VyIGFnZ3JlZ2F0 aW9uLCB3aGljaCBjb3VsZAoraGF2ZSBhIGxhcmdlIGltcGFjdCBvbiB0aGUgc2hhcGUgb2YgdGhl IHBsYW4gdHJlZS4gWFhYOiBUaGlzIG5lZWRzIHNvbWUgc3R1ZHkKK3RvIGRldGVybWluZSBob3cg bGFyZ2UgYSBwcm9ibGVtIGl0IGlzLCBhbmQgbWlnaHQgbmVlZCB0byBiZSBmaXhlZCBzb29uZXIK K3JhdGhlciB0aGFuIGxhdGVyLgorCitXZSBkb24ndCBvZmZlciBhbnkgY29udHJvbCBvdmVyIGVz dGltYXRlcywgb25seSBvdXRjb21lcy4gSXQgc2VlbXMgbGlrZSBhCitnb29kIGlkZWEgdG8gaW5j b3Jwb3JhdGUgdGhhdCBhYmlsaXR5IGF0IHNvbWUgZnV0dXJlIHBvaW50LCBhcyBwZ19oaW50X3Bs YW4KK2RvZXMuIEhvd2V2ZXIsIHNpbmNlIHByaW1hcnkgZ29hbCBvZiB0aGUgaW5pdGlhbCBkZXZl bG9wbWVudCB3b3JrIGlzIHRvIGJlCithYmxlIHRvIGluZHVjZSB0aGUgcGxhbm5lciB0byByZWNy ZWF0ZSBhIGRlc2lyZWQgcGxhbiB0aGF0IHdvcmtlZCB3ZWxsIGluCit0aGUgcGFzdCwgdGhpcyBo YXMgbm90IGJlZW4gaW5jbHVkZWQgaW4gdGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgZWZmb3J0Lgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0IGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMDIyNGEyYWVlNwotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dApAQCAtMCwwICsxLDMy MCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAxOworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworU0VUIHBhcmFsbGVs X3R1cGxlX2Nvc3QgPSAwOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUgPSAwOwor U0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworQ1JFQVRFIFRBQkxFIGd0X2RpbSAoaWQg c2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZGltOwor Q1JFQVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlkIGludCBub3QgbnVsbCwKKwlkaW1faWQgaW50ZWdl ciBub3QgbnVsbCByZWZlcmVuY2VzIGd0X2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7 CistLSBCeSBkZWZhdWx0LCB3ZSBleHBlY3QgR2F0aGVyIE1lcmdlIHdpdGggYSBwYXJhbGxlbCBo YXNoIGpvaW4uCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQu aWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgR2F0aGVyIE1lcmdlCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBTb3J0Cisg ICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAg ICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgICAgICAg IC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gZ3RfZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdF KChmIGQpKQorKDE0IHJvd3MpCisKKy0tIEZvcmNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb2Yg Ym90aCByZWxhdGlvbnMgdG9nZXRoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyIE1lcmdlCisgICBXb3JrZXJzIFBs YW5uZWQ6IDEKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAg ICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYu ZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBn dF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBT RVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTYgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9k aW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBTb3J0IEtl eTogZi5kaW1faWQKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQor ICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNF UV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNiByb3dzKQorCitDT01NSVQ7CistLSBG b3JjZSBhIHNlcGFyYXRlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb3BlcmF0aW9uIGZvciBlYWNo IHJlbGF0aW9uLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dh dGhlcl9tZXJnZShmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAg R2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBT b3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAg ICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAg ICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4g b24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRShmKSAv KiBtYXRjaGVkICovCisgICBHQVRIRVJfTUVSR0UoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihk KQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKGYgZCkKKygyMCByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmIGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENv bmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYu ZGltX2lkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5u ZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYK KyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgLT4gIEdhdGhl cgorICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEdBVEhFUihmKSAvKiBtYXRjaGVkICovCisgICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9Q TEFJTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKGYgZCkKKygyMCByb3dzKQorCitD T01NSVQ7CistLSBGb3JjZSBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9u IGJ1dCBubyBwYXJhbGxlbGlzbSBvbiBvdGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENv bmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3Jr ZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtl eTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9m YWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9wa2V5IG9uIGd0X2RpbSBkCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZikgLyogbWF0Y2hlZCAqLwor ICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYp CisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FUSEVSX01FUkdFKGYp CisgICBOT19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2dhdGhlcl9tZXJnZShkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgR2F0aGVyIE1lcmdlCisg ICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAg ICAgICBTb3J0IEtleTogZC5pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2Fu IG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoZCkg LyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkK KyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUl9NRVJHRShkKQorICAgTk9fR0FUSEVSKGYpCiso MTkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZikg bm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIg QlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAg ICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIEdhdGhlcgorICAgICAgICAgICAg ICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZikgLyog bWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAg IFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmd0X2RpbV9wa2V5KQorICAgR0FU SEVSKGYpCisgICBOT19HQVRIRVIoZCkKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihkKSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRp bV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IGQuaWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtl cnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0 X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoZCkgLyogbWF0Y2hlZCAq LworICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIFNFUV9TQ0FO KGYgZCkKKyAgIEdBVEhFUihkKQorICAgTk9fR0FUSEVSKGYpCisoMTkgcm93cykKKworQ09NTUlU OworLS0gRm9yY2Ugbm8gR2F0aGVyIG9yIEdhdGhlciBNZXJnZSB1c2UgYXQgYWxsLgorQkVHSU47 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ25vX2dhdGhlcihmIGQpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYg Sk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2Ug Q29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9w a2V5IG9uIGd0X2RpbSBkCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lk CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBOT19HQVRIRVIoZikgLyogbWF0Y2hlZCAqLworICAgTk9fR0FUSEVSKGQpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAg IE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVi bGljLmd0X2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitDT01NSVQ7 CistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91dCB0aGUgT1JERVIgQlkgY2xhdXNl LCBidXQganVzdCBHYXRoZXIgaXMgT0suCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5k aW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEdhdGhlcgorICAgRGlzYWJsZWQ6IHRydWUKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAg LT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBk LmlkKQorICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAg ICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKChm IGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FU SEVSKChmIGQpKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlcgorICAg V29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICBI YXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBk KQorICAgR0FUSEVSKChmIGQpKQorKDE0IHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5lODc2NTIzNzBjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKQEAgLTAsMCArMSwyOTIg QEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBqb19kaW0xIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5 LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl KTsKK0lOU0VSVCBJTlRPIGpvX2RpbTEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29t ZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTE7CitDUkVBVEUgVEFCTEUgam9fZGlt MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0yIChpZCwgZGlt MiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDcpICsg MQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9f ZGltMjsKK0NSRUFURSBUQUJMRSBqb19mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGlt MV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMSAoaWQpLAorCWRpbTJfaWQg aW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19mYWN0CisJU0VMRUNUIGcsIChn JTEwMCkrMSwgKGclMTAwKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFD VVVNIEFOQUxZWkUgam9fZmFjdDsKKy0tIFdlIGV4cGVjdCB0byBqb2luIHRvIGQyIGZpcnN0IGFu ZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9uIG9uIGQyCistLSBpcyBtb3JlIHNlbGVjdGl2 ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIEhBU0hfSk9JTihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYg ZDIgZDEpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxNiByb3dzKQorCistLSBGb3JjZSBhIGZl dyBkaWZmZXJlbnQgam9pbiBvcmRlcnMuIFNvbWUgb2YgdGhlc2UgYXJlIHZlcnkgaW5lZmZpY2ll bnQsCistLSBidXQgdGhlIHBsYW5uZXIgY29uc2lkZXJzIHRoZW0gYWxsIHZpYWJsZS4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmIGQxIGQyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQxIGQyKQorICAgSEFTSF9KT0lOKGQxIGQyKQorICAgU0VRX1ND QU4oZiBkMSBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZU IEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOwor ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDog KGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25k OiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBm CisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Rp bTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhh c2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZiBkMiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkMiBkMSkKKyAgIEhBU0hfSk9JTihkMiBkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEp CisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDEgZiBkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0g ZDIuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChkMS5pZCA9IGYu ZGltMV9pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBmIGQyKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMSBmIGQyKQorICAg SEFTSF9KT0lOKGYgZDIpCisgICBTRVFfU0NBTihkMSBmIGQyKQorICAgTk9fR0FUSEVSKGYgZDEg ZDIpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2lu X29yZGVyKGYgKGQxIGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lk ID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNo IENvbmQ6ICgoZi5kaW0xX2lkID0gZDEuaWQpIEFORCAoZi5kaW0yX2lkID0gZDIuaWQpKQorICAg LT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBOZXN0 ZWQgTG9vcAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIE1h dGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBk MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQyKSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKQorICAgTkVT VEVEX0xPT1BfTUFURVJJQUxJWkUoZDIpCisgICBIQVNIX0pPSU4oZDIpCisgICBTRVFfU0NBTihm IGQxIGQyKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworQ09NTUlUOworLS0g VGhlIHVudXN1YWwgZm9ybXVsYXRpb24gb2YgdGhpcyBxdWVyeSBpcyBpbnRlbmRlZCB0byBwcmV2 ZW50IHRoZSBxdWVyeQorLS0gcGxhbm5lciBmcm9tIHJlZHVjaW5nIHRoZSBGVUxMIEpPSU4gdG8g c29tZSBvdGhlciBqb2luIHR5cGUsIHNvIHRoYXQgd2UKKy0tIGNhbiB0ZXN0IHdoYXQgaGFwcGVu cyB3aXRoIGEgam9pbiB0eXBlIHRoYXQgY2Fubm90IGJlIHJlb3JkZXJlZC4KK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBK T0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQy LmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFf aWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAg ICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAg ICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RF RF9MT09QX01BVEVSSUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhF UihkMSBmIGQyKQorKDE4IHJvd3MpCisKKy0tIFdlIHNob3VsZCBub3QgYmUgYWJsZSB0byBmb3Jj ZSB0aGUgcGxhbm5lciB0byBqb2luIGYgdG8gZDEgZmlyc3QsIGJlY2F1c2UKKy0tIHRoYXQgaXMg bm90IGEgdmFsaWQgam9pbiBvcmRlciwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIHRo ZSBwbGFubmVyCistLSB0byBtYWtlIGVpdGhlciBkMiBvciBmIHRoZSBkcml2aW5nIHRhYmxlLgor QkVHSU47CistLSBYWFg6IFRoZSBhZHZpY2UgZmVlZGJhY2sgc2F5cyAncGFydGlhbGx5IG1hdGNo ZWQnIGhlcmUgd2hpY2ggaXNuJ3QgZXhhY3RseQorLS0gd3JvbmcgZ2l2ZW4gdGhlIHdheSB0aGF0 IGZsYWcgaXMgaGFuZGxlZCBpbiB0aGUgY29kZSwgYnV0IGl0J3MgYXQgdGhlIHZlcnkKKy0tIGxl YXN0IGNvbmZ1c2luZy4gU29tZXRoaW5nIHNob3VsZCBwcm9iYWJseSBiZSBpbXByb3ZlZCBoZXJl LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Rp bTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFf aWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUK KyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5V TEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgRGlzYWJsZWQ6IHRydWUKKyAg ICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAv KiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZDIgZiBkMSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX1BM QUlOKGQxKQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihkMSBmIGQyKQorKDIx IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihm IGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQy IE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1Ig Zi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmls dGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4g IE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZi5kaW0yX2lkICsgMCkp ID0gKChkMi5pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0 IEtleTogKChmLmRpbTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19mYWN0IGYKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChk Mi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAg IC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMiBkMSkKKyAgIE1F UkdFX0pPSU5fUExBSU4oZDIpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNF UV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMCByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZDIgZiBkMSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQor CUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQg KyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBO VUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9 IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpv aW4KKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAw KSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQg KyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAg ICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxp emUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlO KGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEp CisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMCByb3dzKQorCitDT01NSVQ7CistLSBYWFg6IGFk ZCB0ZXN0cyBmb3Igam9pbiBvcmRlciBwcmVmaXggbWF0Y2hpbmcKKy0tIFhYWDogam9pbl9vcmRl cihqdXN0b25lcmVsKSBzaG91bGRuJ3QgcmVwb3J0IHBhcnRpYWxseSBtYXRjaGVkCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0IGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91dApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzFlZTI2YTMzN2EKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0 CkBAIC0wLDAgKzEsMjk3IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFs bGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgam9pbl9kaW0gKGlkIHNl cmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9pbl9kaW07 CitDUkVBVEUgVEFCTEUgam9pbl9mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltX2lk IGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb2luX2RpbSAoaWQpCispIFdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZmFjdAorCVNFTEVDVCBn LCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworQ1JFQVRFIElOREVY IGpvaW5fZmFjdF9kaW1faWQgT04gam9pbl9mYWN0IChkaW1faWQpOworVkFDVVVNIEFOQUxZWkUg am9pbl9mYWN0OworLS0gV2UgZXhwZWN0IGEgaGFzaCBqb2luIGJ5IGRlZmF1bHQuCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFz aCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4g b24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9p bl9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAg SEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEwIHJv d3MpCisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRoIGpvaW5f ZGltIGFzIHRoZSBpbm5lciB0YWJsZS4KKy0tIEFsbCBvZiB0aGVzZSBzaG91bGQgd29yayBleGNl cHQgZm9yIE1FUkdFX0pPSU5fTUFURVJJQUxJWkU7IHRoYXQgd2lsbAorLS0gZmFpbCwgYmVjYXVz ZSB0aGUgcGxhbm5lciBrbm93cyB0aGF0IGpvaW5fZGltIChpZCkgaXMgdW5pcXVlLCBhbmQgd2ls bAorLS0gcmVmdXNlIHRvIGFkZCBtYXJrL3Jlc3RvcmUgb3ZlcmhlYWQuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGQpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2Rp bSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oZCkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9K T0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTEla RShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g am9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBEaXNhYmxlZDogdHJ1ZQorICAgTWVyZ2UgQ29uZDog KGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1f aWQgb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkg b24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9NQVRF UklBTElaRShkKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZCkKKyAgIElOREVYX1ND QU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCBkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAg Tk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29u ZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9k aW1faWQgb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3Br ZXkgb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9Q TEFJTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGlj LmpvaW5fZmFjdF9kaW1faWQgZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTEgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNU RURfTE9PUF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w CisgICBKb2luIEZpbHRlcjogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBq b2luX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g am9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkUoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCkKKyAgIFNFUV9TQ0FOKGYg ZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNj YW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBNZW1vaXplCisgICAgICAgICBDYWNoZSBLZXk6IGYu ZGltX2lkCisgICAgICAgICBDYWNoZSBNb2RlOiBsb2dpY2FsCisgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVT VEVEX0xPT1BfTUVNT0laRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9NRU1PSVpFKGQpCisgICBTRVFf U0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FU SEVSKGYgZCkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J05FU1RFRF9MT09QX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQg PSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNU RURfTE9PUF9QTEFJTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9PUF9QTEFJTihkKQorICAgU0VRX1NDQU4o ZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihm IGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gTm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBt ZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZmFjdCBhcyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwg b2YgdGhlc2Ugc2hvdWxkIHdvcmsuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSEFTSF9KT0lOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQg PSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAo ZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBI YXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEhBU0hfSk9JTihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBIQVNIX0pPSU4oZikKKyAgIFNFUV9TQ0FO KGQgZikKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpv aW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpv aW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAg ICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3Qg ZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYp CisgICBNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpv aW5fZGltX3BrZXkgZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQp CisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9K T0lOX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5k aW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGlt IGQKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0 IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAg TUVSR0VfSk9JTl9QTEFJTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5 IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDExIHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBG Uk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0 ZXI6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAg LT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAg IE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpCisgICBTRVFfU0NBTihkIGYpCisgICBOT19HQVRI RVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn TkVTVEVEX0xPT1BfTUVNT0laRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24g am9pbl9kaW0gZAorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogZC5pZAorICAg ICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg am9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKGRpbV9pZCA9IGQuaWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9P UF9NRU1PSVpFKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZikKKyAgIFNFUV9TQ0FOKGQp CisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIo ZiBkKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVT VEVEX0xPT1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgICAg ICAgIEluZGV4IENvbmQ6IChkaW1faWQgPSBkLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgTkVTVEVEX0xPT1BfUExBSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZikKKyAgIFNF UV9TQ0FOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBO T19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbid0IGZvcmNlIGEg Zm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2UgdGFibGVzLCBiZWNhdXNlIHRoZXkKKy0tIGFyZW4n dCBmb3JlaWduIHRhYmxlcy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIFNlcSBTY2FuIG9u IGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpv aW5fZGltIGQKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgRk9SRUlHTl9KT0lOKChmIGQpKSAvKiBtYXRjaGVkLCBmYWlsZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RF RF9MT09QX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5q b2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMyByb3dzKQorCitDT01NSVQ7CmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rv ci5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgwMjRhMDYzYTA0Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9j b2xsZWN0b3Iub3V0CkBAIC0wLDAgKzEsNjUgQEAKK0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9h ZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CistLSBUcnkgY2xlYXJpbmcg YWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIFNldCBh IHNtYWxsIGFkdmljZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgd2UnbGwgZXhjZWVkIGl0Lgor U0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyOworLS0gU2V0IHVw IGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUgZHVtbXlfdGFibGUgKGEgaW50IHByaW1hcnkg a2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UsIHBhcmFsbGVs X3dvcmtlcnMgPSAwKTsKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00gZHVtbXlfdGFi bGUgYSwgZHVtbXlfdGFibGUgYjsKKyBhIHwgYiB8IGEgfCBiIAorLS0tKy0tLSstLS0rLS0tCiso MCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworIGEgfCBiIAorLS0tKy0tLQor KDAgcm93cykKKworLS0gU2hvdWxkIHJldHVybiB0aGUgYWR2aWNlIGZyb20gdGhlIHNlY29uZCB0 ZXN0IHF1ZXJ5LgorU0VMRUNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCkgT1JERVIgQlkgaWQgTElNSVQgMTsKKyAgICAgICAgIGFkdmljZSAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU0VRX1NDQU4oZHVtbXlfdGFibGUpICsKKyBOT19HQVRI RVIoZHVtbXlfdGFibGUpCisoMSByb3cpCisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFn YWluLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQg dGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19wbGFuX2FkdmljZS5s b2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKKy0tIFB1c2ggYSBidW5jaCBvZiBxdWVyaWVz IHRocm91Z2ggdGhlIGNvbGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZPUiB4IElOIDEuLjIwMDAg TE9PUAorCQlFWEVDVVRFICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlJzsKKwlFTkQgTE9PUDsK K0VORAorJCQ7CistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENP VU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBjb3VudCAKKy0t LS0tLS0KKyAgMjAwMAorKDEgcm93KQorCistLSBBbmQgY2xlYXIgb25lIG1vcmUgdGltZSwgdG8g dmVyaWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0gZXZlbiB3aXRoIGEg bGFyZ2VyIG51bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2Nh bF9hZHZpY2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZjBmMDU1MzFkNQotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQKQEAgLTAsMCAr MSwyNDMgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luID0gdHJ1ZTsK K0NSRUFURSBUQUJMRSBwdDEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFs MSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQxYSBQQVJU SVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWIgUEFSVElUSU9OIE9GIHB0 MSBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFjIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZB TFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitJTlNFUlQgSU5UTyBwdDEgKGlkLCBkaW0xLCB2YWwxKQorCVNFTEVDVCBnLCAnc29t ZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDE7CitDUkVBVEUgVEFCTEUgcHQyIChpZCBp bnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVBBUlRJVElPTiBCWSBS QU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MmEgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVT IEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0NSRUFURSBUQUJMRSBwdDJiIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxMDAx KSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUg VEFCTEUgcHQyYyBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMw MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQy IChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgb3RoZXIgdGV4dCAnIHx8IGcsIChn ICUgNSkgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5B TFlaRSBwdDI7CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0z IHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxF IHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBBUlRJ VElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04gT0Yg cHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlTRUxF Q1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQzOworQ1JFQVRFIFRB QkxFIHB0bWlzbWF0Y2ggKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbW0gdGV4dCwgdmFsbSBp bnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGEg UEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxNTAx KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdG1p c21hdGNoYiBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMTUw MSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gcHRtaXNtYXRjaCAoaWQsIGRpbW0sIHZhbG0pCisJU0VMRUNUIGcsICd5ZXQgYW5vdGhl ciB0ZXh0ICcgfHwgZywgKGcgJSAyKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzAw MCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0bWlzbWF0Y2g7CitFWFBMQUlOIChQTEFOX0FEVklDRSwg Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0 Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFO RCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzEuaWQgPSBwdDNfMS5p ZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKGlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwy ID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24g cHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQg PSBwdDNfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwxID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0Mi9wdWJs aWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQxL3B1YmxpYy5wdDFhKQorICAgSk9JTl9PUkRFUihw dDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMucHQxYikKKyAgIEpPSU5f T1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBwdDEvcHVibGljLnB0MWMpCisg ICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9w dWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNi IHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGlj LnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgorICAgIHB0Mi9wdWJsaWMucHQy YyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdWJsaWMu cHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5CisgICAgcHQxL3B1Ymxp Yy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyIHB0Mykp CisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGlj LnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQy YyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0NyBy b3dzKQorCistLSBTdXBwcmVzcyBwYXJ0aXRpb253aXNlIGpvaW4sIG9yIGRvIGl0IGp1c3QgcGFy dGlhbGx5LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJ VElPTldJU0UocHQxIHB0MiBwdDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBw dDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAx OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAocHQxLmlkID0gcHQyLmlkKQorICAgLT4g IEFwcGVuZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQx XzIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHB0Mi5pZCA9IHB0My5pZCkKKyAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0 Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgQXBwZW5kCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBQQVJUSVRJT05XSVNFKHB0MSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShw dDIpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDEgKHB0MiBwdDMpKQorICAg SEFTSF9KT0lOKHB0MyBwdDMpCisgICBTRVFfU0NBTihwdDEvcHVibGljLnB0MWEgcHQxL3B1Ymxp Yy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0 MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IKKyAgICBw dDMvcHVibGljLnB0M2MpCisgICBQQVJUSVRJT05XSVNFKHB0MSBwdDIgcHQzKQorICAgTk9fR0FU SEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9w dWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1Ymxp Yy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDAgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHQyKSBw dDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0 MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAg IEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAocHQxLmlkID0gcHQzLmlkKQorICAgLT4gIEFwcGVuZAorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQxXzEuaWQgPSBwdDJf MS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0MV8xCisgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMi5pZCA9IHB0Ml8yLmlkKQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0MV8zLmlkID0gcHQyXzMuaWQpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBBcHBl bmQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18zCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFBB UlRJVElPTldJU0UoKHB0MSBwdDIpKSAvKiBtYXRjaGVkICovCisgICBQQVJUSVRJT05XSVNFKHB0 MykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo cHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJsaWMucHQyYSkKKyAgIEpPSU5fT1JERVIocHQxL3B1Ymxp Yy5wdDFiIHB0Mi9wdWJsaWMucHQyYikKKyAgIEpPSU5fT1JERVIocHQxL3B1YmxpYy5wdDFjIHB0 Mi9wdWJsaWMucHQyYykKKyAgIEpPSU5fT1JERVIoe3B0MSBwdDJ9IHB0MykKKyAgIEhBU0hfSk9J TihwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMpCisg ICBTRVFfU0NBTihwdDEvcHVibGljLnB0MWEgcHQyL3B1YmxpYy5wdDJhIHB0MS9wdWJsaWMucHQx YiBwdDIvcHVibGljLnB0MmIKKyAgICBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJjIHB0 My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IKKyAgICBwdDMvcHVibGljLnB0M2MpCisgICBQ QVJUSVRJT05XSVNFKChwdDEgcHQyKSBwdDMpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFh IHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQy L3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5w dDNiIHB0My9wdWJsaWMucHQzYykKKyg0NyByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBmb3Jj ZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHRt aXNtYXRjaCkpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJs ZWQ6IHRydWUKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0 MV8xCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHB0bWlzbWF0Y2hhX3BrZXkgb24gcHRtaXNtYXRjaGEgcHRtaXNtYXRjaF8xCisg ICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgICAgICAgICAtPiAgSW5k ZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYl9wa2V5IG9uIHB0bWlzbWF0Y2hiIHB0bWlzbWF0Y2hf MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSAvKiBtYXRjaGVk LCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MSBw dG1pc21hdGNoKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHRtaXNtYXRjaCkKKyAgIFNFUV9TQ0FO KHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSU5E RVhfU0NBTihwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdWJsaWMucHRtaXNtYXRjaGFf cGtleQorICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiIHB1YmxpYy5wdG1pc21hdGNo Yl9wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDEgcHRtaXNtYXRjaCkKKyAgIE5PX0dBVEhFUihw dDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYworICAgIHB0bWlz bWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiKQor KDIyIHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv ZXhwZWN0ZWQvc2Nhbi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4u b3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MWYzNjFmY2Y5Ywot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5v dXQKQEAgLTAsMCArMSw3NTcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0gMC4xOwor U0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3QgPSAwOworU0VU IGNwdV9pbmRleF90dXBsZV9jb3N0ID0gMDsKK0NSRUFURSBUQUJMRSBzY2FuX3RhYmxlIChhIGlu dCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl KTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUgdGV4dCAnIHx8IGcg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIHNjYW5fdGFi bGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFOQUxZWkUgc2Nhbl90 YWJsZTsKKy0tIFNlcXVlbnRpYWwgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgIFFVRVJZIFBMQU4gICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVS KHNjYW5fdGFibGUpCisoNCByb3dzKQorCistLSBJbmRleCBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQor CistLSBJbmRleC1vbmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5n IHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykK KworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CisgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhl YXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4 Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IKKyAgICAg ICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFi bGVfYikKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gVElEIHNjYW4K K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRpZCBTY2FuIG9uIHNj YW5fdGFibGUKKyAgIFRJRCBDb25kOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNSByb3dzKQorCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICco MSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgUmFuZ2UgU2Nh biBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQg KGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9T Q0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0t IFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1c2UgdGhlIHNjYW4gdHlw ZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91bGQgc3VjY2VlZC4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3Rh YmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGU7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxl CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDYgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBz Y2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5k ZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBz Y2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0 bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChiID4gJ3NvbWUg dGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX2IK KyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X2IpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVB UF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfYikKKyAgIE5PX0dBVEhFUihzY2Fu X3RhYmxlKQorKDkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdU SURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0aWQg PSAnKDAsMSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2Fu X3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1ND QU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygx LDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBv ZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNl IHdpbGwgZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVu dGlhbGx5CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBk b2VzIG5vdCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUg bGFjayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRy dWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2Fu X3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9T Q0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5f dGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVHJ5IGFnYWluIHRvIGZvcmNl IGluZGV4IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRoZSBJTkRFWF9TQ0FOCist LSBhbmQgQklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZX1NDQU4gY2FuJ3QgYmUg Zm9yY2VkIGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVtbnMgbm90IGluY2x1ZGVk IGluIHRoZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7 CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJ bmRleCBDb25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBGaWx0ZXI6IChhID4g MCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxl KQorKDggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBf SEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFJlY2hlY2sg Q29uZDogKGEgPiAwKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHNjYW5fdGFibGVfcGtl eQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90 YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCiso OSByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBsb29rdXAg dG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0IHRvIHVz ZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBvciBhIFRJ RCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZQorICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB TihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRI RVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90 YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBJbmRleCBDb25k OiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxl KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNpYmx5IGRvd25n cmFkZSBhbiBpbmRleC1vbmx5IHNjYW4gdG8gYW4gaW5kZXggc2NhbiwgYnV0IHdlIGNhbid0Cist LSBmb3JjZSB0aGUgdXNlIG9mIGFuIGluZGV4IHRoYXQgdGhlIHBsYW5uZXIgdGhpbmtzIGlzIGlu YXBwbGljYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJ TkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp CisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00g c2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2lu ZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRy dWUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1 c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gaW4gcGxhY2Ugb2YgYSBiaXRtYXAgaGVhcCBzY2FuLAor LS0gYnV0IGEgcGxhaW4gaW5kZXggc2NhbiBvbiBhIEJSSU4gaW5kZXggaXMgbm90IHBvc3NpYmxl LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHNj YW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoYiA+ICdzb21lIHRl eHQgOCc6OnRleHQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3Rh YmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4o c2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90 YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0 Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nh bl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOwor LS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gcmF0aGVyIHRoYW4g YSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQg PSAnKDAsMSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZQorICAgRmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwx KSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoKGN0 aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRpZCkpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhF UihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBtb3JlIGNvbXBsZXgg c2NlbmFyaW9zIHdpdGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNob3VsZCBzdGlsbCB3b3Jr IGlmIHdlIG1lbnRpb24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBX SEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDcgcm93cykKKworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hl bWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgY2lsYnVwLnNjYW5fdGFi bGVfcGtleSkgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEl0J3MgT0sgdG8gcmVwZWF0 IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5E RVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0 Y2hlZCAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJs ZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCBy b3dzKQorCistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRleCB0YXJnZXQgaXMgZXZl biBub3Rpb25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBv biBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk LCBjb25mbGljdGluZyAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgYXNz b3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4obm90aGluZykgLyog bm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5f dGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihub3RoaW5nIHdo YXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAg SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAvKiBtYXRjaGVk LCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElO REVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5f dGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IElOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU IGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5k ZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRl eCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1ND QU4oc2Nhbl90YWJsZSBib2d1cykgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNj YW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09N TUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0aXBsZSBpbnN0YW5jZXMg b2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nh bl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcg PSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisg ICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBv biBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90 YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEg PSBnLmcpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMg cyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkgcyMyIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoZyBzIHMjMikKKygxMiByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwx MCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4g c2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisg ICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGcuZyA9IHMuYSkKKyAg ICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgc18xCisg ICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzIzIpCisgICBIQVNIX0pP SU4ocykKKyAgIFNFUV9TQ0FOKHMpCisgICBJTkRFWF9TQ0FOKHMjMiBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBM RUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90 YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAgSGFz aCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAg ICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJTihzKQorICAgSEFTSF9KT0lO KHMjMikKKyAgIFNFUV9TQ0FOKHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KQorICAgTk9fR0FUSEVSKGcgcyBzIzIpCisoMTcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBz XzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZy5nID0g cy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJs ZSBzCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18x CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVkICovCisg ICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBIQVNIX0pPSU4ocyBzIzIpCisgICBTRVFfU0NBTihz IHMjMikKKyAgIE5PX0dBVEhFUihnIHMgcyMyKQorKDE3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRl c3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0aGluIGEgc3VicXVlcnkuCitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CisgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5 KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdI RVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3Br ZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5f dGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJx dWVyeSkKKyg1IHJvd3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRjaC4KK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoeCBzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFNFUV9TQ0FOKHMpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3 IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBmaXJzdCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHgpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg cyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3Rh YmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc0B4KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc0B4KQorICAgTk9fR0FUSEVSKHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2Fu X3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG5vdCBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUih1bm5hbWVkX3N1YnF1ZXJ5IHNA dW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRjaCBzZWNvbmQgcXVl cnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B1 bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VU IDApIHg7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJ bmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4 IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNAdW5u YW1lZF9zdWJxdWVyeSkgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVS KHggc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNF VCAwKTsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkp CisgICBOT19HQVRIRVIodW5uYW1lZF9zdWJxdWVyeSBzQHVubmFtZWRfc3VicXVlcnkpCisoNyBy b3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3N5bnRheC5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRkZGIxMmNhZTU4Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgu b3V0CkBAIC0wLDAgKzEsNTkgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKKy0tIEFuIGVtcHR5 IHN0cmluZyBpcyBhbGxvd2VkLCBhbmQgc28gaXMgYW4gZW1wdHkgdGFyZ2V0IGxpc3QuCitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKCknOworLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25zIGluIGNhcGl0YWxpemF0 aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRoZSByZWxhdGlvbiBpZGVu dGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgorU0VUIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ3NlcV9zY2FuKHhAeSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfc2Nh bih4IzIpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcgIFNFUV9TQ0FOICggeCAvIHkgLiB6ICkgICc7 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJ4IiMyLyJ5Ii4ieiJAInQi KSc7CistLSBTeW50YXggZXJyb3JzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFV RU5USUFMX1NDQU4oeCknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBn X3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFVRU5USUFMX1NDQU4oeCkiCitERVRBSUw6ICBDb3Vs ZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAiU0VRVUVOVElBTF9T Q0FOIgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTic7CitFUlJPUjogIGlu dmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9T Q0FOIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IGVu ZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworRVJS T1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6 ICJTRVFfU0NBTigiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJy b3IgYXQgZW5kIG9mIGlucHV0CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KCInOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNl LmFkdmljZSI6ICJTRVFfU0NBTigiIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTog dW50ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlmaWVyIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigjJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBm b3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIyIKK0RFVEFJ TDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIjIgor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcoKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUg Zm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIigpIgorREVUQUlMOiAgQ291 bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBh cmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIjEyMyIKK0RFVEFJTDogIENvdWxkIG5v dCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIxMjMiCistLSBMZWdhbCBj b21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyoqLyc7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihfKS8qKiovJzsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4oLyp4Ki95KSc7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKHkvLyp4Ki96KSc7Cist LSBVbnRlcm1pbmF0ZWQgY29tbWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8q JzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5h ZHZpY2UiOiAiLyoiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0 ZWQgY29tbWVudCBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Sk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBh cmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkpPSU5fT1JERVIoImZPTyIpIC8qIG9v cHMiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgY29tbWVu dCBhdCBlbmQgb2YgaW5wdXQKKy0tIE5lc3RlZCBjb21tZW50cyBhcmUgbm90IHN1cHBvcnRlZCwg c28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2FsIGFuZAorLS0gdGhlIHNlY29uZCBpcyBub3Qu CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qLyovJzsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiLyovKiBzdHVmZiAqLyovIgorREVU QUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIioi CistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUgcmVsYXRpb24gaWRlbnRpZmllcnMu CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05fSk9JTihhKSc7CitFUlJPUjog IGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkZP UkVJR05fSk9JTihhKSIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IEZPUkVJR05f Sk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50aWZp ZXIgYXQgb3IgbmVhciAiKSIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRk9SRUlHTl9K T0lOKChhKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5f YWR2aWNlLmFkdmljZSI6ICJGT1JFSUdOX0pPSU4oKGEpKSIKK0RFVEFJTDogIENvdWxkIG5vdCBw YXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4g b25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL21l c29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNDUyZTVh ZDQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVp bGQKQEAgLTAsMCArMSw3MCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNCwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfcGxhbl9hZHZpY2Vfc291cmNlcyA9IGZp bGVzKAorICAncGdfcGxhbl9hZHZpY2UuYycsCisgICdwZ3BhX2FzdC5jJywKKyAgJ3BncGFfY29s bGVjdG9yLmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAorICAncGdwYV9qb2luLmMnLAorICAn cGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycsCisgICdwZ3BhX3NjYW4uYycsCisg ICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycsCispCisKK3BncGFfc2Nhbm5lciA9 IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlucHV0OiAncGdwYV9zY2FubmVyLmwn LAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNvbW1hbmQ6IGZsZXhfY21kLAorKQor Z2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitwZ19wbGFuX2FkdmljZV9zb3VyY2Vz ICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfcGFy c2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAga3dhcmdzOiBiaXNvbl9rdywKKykK K2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRvX2xpc3QoKQorcGdfcGxhbl9hZHZp Y2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycK KyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJf cmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3BnX3BsYW5fYWR2aWNlJywKKyAgICAn LS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSBy aWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCdw Z19wbGFuX2FkdmljZScsCisgIHBnX3BsYW5fYWR2aWNlX3NvdXJjZXMsCisgIGluY2x1ZGVfZGly ZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwKKyAga3dhcmdzOiBjb250cmliX21v ZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX3BsYW5fYWR2aWNlCisKK2luc3RhbGxf ZGF0YSgKKyAgJ3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsJywKKyAgJ3BnX3BsYW5fYWR2aWNlLmNv bnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAorKQorCit0ZXN0cyArPSB7Cisg ICduYW1lJzogJ3BnX3BsYW5fYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2Vf ZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzog eworICAgICdzcWwnOiBbCisgICAgICAnZ2F0aGVyJywKKyAgICAgICdqb2luX29yZGVyJywKKyAg ICAgICdqb2luX3N0cmF0ZWd5JywKKyAgICAgICdsb2NhbF9jb2xsZWN0b3InLAorICAgICAgJ3Bh cnRpdGlvbndpc2UnLAorICAgICAgJ3NjYW4nLAorICAgICAgJ3N5bnRheCcsCisgICAgXSwKKyAg fSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfcmVncmVzcy5wbCcs CisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdf cGxhbl9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2 aWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yOWY0 ZjIyNDg2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxh bl9hZHZpY2UtLTEuMC5zcWwKQEAgLTAsMCArMSw0MiBAQAorLyogY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQg aXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVj aG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlIiB0byBsb2FkIHRoaXMgZmls ZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZp Y2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9O IHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKK1JFVFVSTlMgdm9pZAorQVMgJ01P RFVMRV9QQVRITkFNRScsICdwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZScKK0xBTkdV QUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9h ZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQs CisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHos CisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJl Y29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3Rl ZF9zaGFyZWRfYWR2aWNlKAorCU9VVCBpZCBiaWdpbnQsCisJT1VUIHVzZXJpZCBvaWQsCisJT1VU IGRiaWQgb2lkLAorCU9VVCBxdWVyeWlkIGJpZ2ludCwKKwlPVVQgY29sbGVjdGlvbl90aW1lIHRp bWVzdGFtcHR6LAorCU9VVCBxdWVyeSB0ZXh0LAorCU9VVCBhZHZpY2UgdGV4dAorKQorUkVUVVJO UyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2NvbGxlY3RlZF9z aGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK1JFVk9LRSBBTEwgT04gRlVOQ1RJ T04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgRlJPTSBQVUJMSUM7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmYzMmU4YjdhMGQzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCkBAIC0wLDAgKzEsNDU0IEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5jCisgKgkgIG1haW4gZW50cnlwb2ludHMg Zm9yIGdlbmVyYXRpbmcgYW5kIGFwcGx5aW5nIHBsYW5uZXIgYWR2aWNlCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJw Z19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9j b2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3Bh X291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5lci5oIgorI2luY2x1ZGUgInBncGFfdHJv dmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAiY29tbWFuZHMvZGVm cmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgorI2luY2x1ZGUgImNvbW1hbmRz L2V4cGxhaW5fZm9ybWF0LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgor I2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisK K1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIHBncGFfc2hhcmVkX3N0YXRlICpwZ3BhX3N0YXRl ID0gTlVMTDsKK3N0YXRpYyBkc2FfYXJlYSAqcGdwYV9kc2FfYXJlYSA9IE5VTEw7CisKKy8qIEdV QyB2YXJpYWJsZXMgKi8KK2NoYXIJICAgKnBnX3BsYW5fYWR2aWNlX2FkdmljZSA9IE5VTEw7Citz dGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2Ug PSB0cnVlOworaW50CQkJcGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDA7 CitpbnQJCQlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA9IDA7CisKKy8q IFNhdmVkIGhvb2sgdmFsdWUgKi8KK3N0YXRpYyBleHBsYWluX3Blcl9wbGFuX2hvb2tfdHlwZSBw cmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBOVUxMOworCisvKiBPdGhlciBmaWxlLWxldmVsIGdsb2Jh bHMgKi8KK3N0YXRpYyBpbnQJZXNfZXh0ZW5zaW9uX2lkOworc3RhdGljIE1lbW9yeUNvbnRleHQg cGdwYV9tZW1vcnlfY29udGV4dCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHBnX3BsYW5fYWR2aWNl X2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRlICplcywKKwkJCQkJCQkJCQkJCSAg RGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJCQkJICBQYXJzZVN0YXRlICpwc3RhdGUpOworc3RhdGlj IHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwKKwkJCQkJCQkJCQkJCSBJbnRvQ2xhdXNlICppbnRvLAorCQkJCQkJCQkJCQkJ IEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcs CisJCQkJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCQkJCQkgUXVlcnlF bnZpcm9ubWVudCAqcXVlcnlFbnYpOworc3RhdGljIGJvb2wgcGdfcGxhbl9hZHZpY2VfYWR2aWNl X2NoZWNrX2hvb2soY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJCQkgR3Vj U291cmNlIHNvdXJjZSk7CitzdGF0aWMgRGVmRWxlbSAqZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUo TGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoaXMg bW9kdWxlLgorICovCit2b2lkCitfUEdfaW5pdCh2b2lkKQoreworCURlZmluZUN1c3RvbVN0cmlu Z1ZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAorCQkJCQkJCSAgICJhZHZpY2UgdG8g YXBwbHkgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAg ICZwZ19wbGFuX2FkdmljZV9hZHZpY2UsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBQR0Nf VVNFUlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAgIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9j aGVja19ob29rLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTlVMTCk7CisKKwlEZWZpbmVD dXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVk X2FkdmljZSIsCisJCQkJCQkJICJFWFBMQUlOIG91dHB1dCBpbmNsdWRlcyBzdXBwbGllZCBhZHZp Y2UgZXZlbiB3aXRob3V0IEVYUExBSU4gKFBMQU5fQURWSUNFKSIsCisJCQkJCQkJIE5VTEwsCisJ CQkJCQkJICZwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UsCisJ CQkJCQkJIHRydWUsCisJCQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBO VUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZh cmlhYmxlKCJwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQki IyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gcGVyLWJhY2tlbmQgbWVtb3J5IiwKKwkJ CQkJCQlOVUxMLAorCQkJCQkJCSZwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0NfVVNFUlNFVCwKKwkJ CQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCURl ZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9s aW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMgdG8gcmV0YWluIGluIHNoYXJlZCBt ZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xs ZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0Nf U1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVM TCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3BsYW5fYWR2aWNlIik7CisKKwkvKiBH ZXQgYW4gSUQgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhY2hlIGRhdGEgaW4gYW4gRXhwbGFpblN0YXRl LiAqLworCWVzX2V4dGVuc2lvbl9pZCA9IEdldEV4cGxhaW5FeHRlbnNpb25JZCgicGdfcGxhbl9h ZHZpY2UiKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXcgRVhQTEFJTiBvcHRpb25zIGltcGxlbWVu dGVkIGJ5IHRoaXMgbW9kdWxlLiAqLworCVJlZ2lzdGVyRXh0ZW5zaW9uRXhwbGFpbk9wdGlvbigi cGxhbl9hZHZpY2UiLAorCQkJCQkJCQkgICBwZ19wbGFuX2FkdmljZV9leHBsYWluX29wdGlvbl9o YW5kbGVyKTsKKworCS8qIEluc3RhbGwgaG9va3MgKi8KKwlwZ3BhX3BsYW5uZXJfaW5zdGFsbF9o b29rcygpOworCXByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IGV4cGxhaW5fcGVyX3BsYW5faG9vazsK KwlleHBsYWluX3Blcl9wbGFuX2hvb2sgPSBwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFu X2hvb2s7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBzdGF0ZSB3aGVuIGZpcnN0IGNy ZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0 cikKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSAocGdwYV9zaGFyZWRfc3RhdGUgKikg cHRyOworCisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdGUtPmxvY2ssIExXTG9ja05ld1RyYW5jaGVJ ZCgicGdfcGxhbl9hZHZpY2VfbG9jayIpKTsKKwlzdGF0ZS0+ZHNhX3RyYW5jaGUgPSBMV0xvY2tO ZXdUcmFuY2hlSWQoInBnX3BsYW5fYWR2aWNlX2RzYSIpOworCXN0YXRlLT5hcmVhID0gRFNBX0hB TkRMRV9JTlZBTElEOworCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0gSW52YWxpZERzYVBvaW50 ZXI7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbWVtb3J5IGNvbnRleHQgd2hl cmUgbG9uZy1saXZlZCBkYXRhIG1hbmFnZWQgYnkgdGhpcworICogbW9kdWxlIGNhbiBiZSBzdG9y ZWQuCisgKi8KK01lbW9yeUNvbnRleHQKK3BnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpCit7 CisJaWYgKHBncGFfbWVtb3J5X2NvbnRleHQgPT0gTlVMTCkKKwkJcGdwYV9tZW1vcnlfY29udGV4 dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJ CSJwZ19wbGFuX2FkdmljZSIsCisJCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7 CisKKwlyZXR1cm4gcGdwYV9tZW1vcnlfY29udGV4dDsKK30KKworLyoKKyAqIEdldCBhIHBvaW50 ZXIgdG8gb3VyIHNoYXJlZCBzdGF0ZS4KKyAqCisgKiBJZiBubyBzaGFyZWQgc3RhdGUgZXhpc3Rz LCBjcmVhdGUgYW5kIGluaXRpYWxpemUgaXQuIElmIGl0IGRvZXMgZXhpc3QgYnV0CisgKiB0aGlz IGJhY2tlbmQgaGFzIG5vdCB5ZXQgYWNjZXNzZWQgaXQsIGF0dGFjaCB0byBpdC4gT3RoZXJ3aXNl LCBqdXN0IHJldHVybgorICogb3VyIGNhY2hlZCBwb2ludGVyLgorICoKKyAqIEFsb25nIHRoZSB3 YXksIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgTFdMb2NrIHRyYW5jaGVzIGFyZSByZWdpc3RlcmVk LgorICovCitwZ3BhX3NoYXJlZF9zdGF0ZSAqCitwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCkK K3sKKwlpZiAocGdwYV9zdGF0ZSA9PSBOVUxMKQorCXsKKwkJYm9vbAkJZm91bmQ7CisKKwkJcGdw YV9zdGF0ZSA9CisJCQlHZXROYW1lZERTTVNlZ21lbnQoInBnX3BsYW5fYWR2aWNlIiwgc2l6ZW9m KHBncGFfc2hhcmVkX3N0YXRlKSwKKwkJCQkJCQkgICBwZ3BhX2luaXRfc2hhcmVkX3N0YXRlLCAm Zm91bmQpOworCX0KKworCXJldHVybiBwZ3BhX3N0YXRlOworfQorCisvKgorICogUmV0dXJuIGEg cG9pbnRlciB0byBwZ19wbGFuX2FkdmljZSdzIERTQSBhcmVhLCBjcmVhdGluZyBpdCBpZiBuZWVk ZWQuCisgKi8KK2RzYV9hcmVhICoKK3BnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKHZvaWQpCit7CisJ aWYgKHBncGFfZHNhX2FyZWEgPT0gTlVMTCkKKwl7CisJCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0 ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCQlkc2FfaGFuZGxlCWFyZWFfaGFuZGxlOwor CQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCgpKTsKKworCQlMV0xvY2tBY3F1aXJl KCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJYXJlYV9oYW5kbGUgPSBzdGF0ZS0+YXJl YTsKKwkJaWYgKGFyZWFfaGFuZGxlID09IERTQV9IQU5ETEVfSU5WQUxJRCkKKwkJeworCQkJcGdw YV9kc2FfYXJlYSA9IGRzYV9jcmVhdGUoc3RhdGUtPmRzYV90cmFuY2hlKTsKKwkJCWRzYV9waW4o cGdwYV9kc2FfYXJlYSk7CisJCQlzdGF0ZS0+YXJlYSA9IGRzYV9nZXRfaGFuZGxlKHBncGFfZHNh X2FyZWEpOworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQl9CisJCWVsc2UKKwkJ eworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcGdwYV9kc2FfYXJlYSA9IGRz YV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9CisKKwkJZHNhX3Bpbl9tYXBwaW5nKHBncGFfZHNh X2FyZWEpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwly ZXR1cm4gcGdwYV9kc2FfYXJlYTsKK30KKworLyoKKyAqIEhhbmRsZXIgZm9yIEVYUExBSU4gKFBM QU5fQURWSUNFKS4KKyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0 aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRlICplcywgRGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJICBQ YXJzZVN0YXRlICpwc3RhdGUpCit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2U7CisKKwlwbGFuX2Fk dmljZSA9IEdldEV4cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lkKTsKKwor CWlmIChwbGFuX2FkdmljZSA9PSBOVUxMKQorCXsKKwkJcGxhbl9hZHZpY2UgPSBwYWxsb2MwX29i amVjdChib29sKTsKKwkJU2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBlc19leHRlbnNpb25f aWQsIHBsYW5fYWR2aWNlKTsKKwl9CisKKwkqcGxhbl9hZHZpY2UgPSBkZWZHZXRCb29sZWFuKG9w dCk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgc3RyaW5nIHRoYXQgaXMgbGlrZWx5IHRvIGNvbnNp c3Qgb2YgbXVsdGlwbGUgbGluZXMgaW4gRVhQTEFJTgorICogb3V0cHV0LgorICovCitzdGF0aWMg dm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShFeHBsYWluU3RhdGUg KmVzLCBjaGFyICpxbGFiZWwsCisJCQkJCQkJCQkgIGNoYXIgKnZhbHVlKQoreworCWNoYXIJICAg KnM7CisKKwkvKiBGb3Igbm9uLXRleHQgZm9ybWF0cywgaXQncyBiZXN0IG5vdCB0byBhZGQgYW55 IHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYgKGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRf VEVYVCkKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0eVRleHQocWxhYmVsLCB2YWx1ZSwgZXMpOworCQly ZXR1cm47CisJfQorCisJLyogSW4gdGV4dCBmb3JtYXQsIGlmIHRoZXJlIGlzIG5vIGRhdGEsIGRp c3BsYXkgbm90aGluZy4gKi8KKwlpZiAoKnFsYWJlbCA9PSAnXDAnKQorCQlyZXR1cm47CisKKwkv KgorCSAqIEl0IGxvb2tzIG5pY2VzdCB0byBpbmRlbnQgZWFjaCBsaW5lIG9mIHRoZSBhZHZpY2Ug c2VwYXJhdGVseSwgYmVnaW5uaW5nCisJICogb24gdGhlIGxpbmUgYmVsb3cgdGhlIGxhYmVsLgor CSAqLworCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIs ICIlczpcbiIsIHFsYWJlbCk7CisJZXMtPmluZGVudCsrOworCXdoaWxlICgocyA9IHN0cmNocih2 YWx1ZSwgJ1xuJykpICE9IE5VTEwpCisJeworCQlFeHBsYWluSW5kZW50VGV4dChlcyk7CisJCWFw cGVuZEJpbmFyeVN0cmluZ0luZm8oZXMtPnN0ciwgdmFsdWUsIChzIC0gdmFsdWUpICsgMSk7CisJ CXZhbHVlID0gcyArIDE7CisJfQorCisJLyogRG9uJ3QgaW50ZXJwcmV0IGEgdGVybWluYWwgbmV3 bGluZSBhcyBhIHJlcXVlc3QgZm9yIGFuIGVtcHR5IGxpbmUuICovCisJaWYgKCp2YWx1ZSAhPSAn XDAnKQorCXsKKwkJRXhwbGFpbkluZGVudFRleHQoZXMpOworCQlhcHBlbmRTdHJpbmdJbmZvKGVz LT5zdHIsICIlc1xuIiwgdmFsdWUpOworCX0KKworCWVzLT5pbmRlbnQtLTsKK30KKworLyoKKyAq IEFkZCBhZHZpY2UgZmVlZGJhY2sgdG8gdGhlIEVYUExBSU4gb3V0cHV0LgorICovCitzdGF0aWMg dm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9mZWVkYmFjayhFeHBsYWluU3RhdGUgKmVzLCBM aXN0ICpmZWVkYmFjaykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5m bygmYnVmKTsKKwlmb3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZmVlZGJhY2spCisJeworCQlp bnQJCQlmbGFncyA9IGRlZkdldEludDMyKGl0ZW0pOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIiVzIC8qICIsIGl0ZW0tPmRlZm5hbWUpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9NQVRD SF9GVUxMKSAhPSAwKQorCQl7CisJCQlBc3NlcnQoKGZsYWdzICYgUEdQQV9URV9NQVRDSF9QQVJU SUFMKSAhPSAwKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIm1hdGNoZWQiKTsKKwkJfQor CQllbHNlIGlmICgoZmxhZ3MgJiBQR1BBX1RFX01BVENIX1BBUlRJQUwpICE9IDApCisJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICJwYXJ0aWFsbHkgbWF0Y2hlZCIpOworCQllbHNlCisJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICJub3QgbWF0Y2hlZCIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9U RV9JTkFQUExJQ0FCTEUpICE9IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIsIGluYXBw bGljYWJsZSIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9DT05GTElDVElORykgIT0gMCkKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwgY29uZmxpY3RpbmciKTsKKwkJaWYgKChmbGFncyAm IFBHUEFfVEVfRkFJTEVEKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCBmYWls ZWQiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiICovXG4iKTsKKwl9CisKKwlwZ19wbGFu X2FkdmljZV9leHBsYWluX3RleHRfbXVsdGlsaW5lKGVzLCAiU3VwcGxpZWQgUGxhbiBBZHZpY2Ui LAorCQkJCQkJCQkJCSAgYnVmLmRhdGEpOworfQorCisvKgorICogQWRkIHJlbGV2YW50IGRldGFp bHMsIGlmIGFueSwgdG8gdGhlIEVYUExBSU4gb3V0cHV0IGZvciBhIHNpbmdsZSBwbGFuLgorICov CitzdGF0aWMgdm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJfcGxhbl9ob29rKFBsYW5u ZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJCSBJbnRvQ2xhdXNlICppbnRvLAorCQkJCQkJ CQkJIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcs CisJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCQkgUXVlcnlFbnZpcm9u bWVudCAqcXVlcnlFbnYpCit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2UgPSBHZXRFeHBsYWluRXh0 ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCk7CisJRGVmRWxlbSAgICAqcGdwYV9pdGVt OworCUxpc3QJICAgKnBncGFfbGlzdDsKKworCWlmIChwcmV2X2V4cGxhaW5fcGVyX3BsYW4pCisJ CXByZXZfZXhwbGFpbl9wZXJfcGxhbihwbGFubmVkc3RtdCwgaW50bywgZXMsIHF1ZXJ5U3RyaW5n LCBwYXJhbXMsCisJCQkJCQkJICBxdWVyeUVudik7CisKKwkvKiBGaW5kIGFueSBkYXRhIHBncGFf cGxhbm5lcl9zaHV0ZG93biBzdGFzaGVkIGluIHRoZSBQbGFubmVkU3RtdC4gKi8KKwlwZ3BhX2l0 ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwbGFubmVkc3RtdC0+ZXh0ZW5zaW9uX3N0YXRl LAorCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIpOworCXBncGFfbGlzdCA9IHBncGFfaXRlbSA9 PSBOVUxMID8gTlVMTCA6IChMaXN0ICopIHBncGFfaXRlbS0+YXJnOworCisJLyoKKwkgKiBCeSBk ZWZhdWx0LCBpZiB0aGVyZSBpcyBhIHJlY29yZCBvZiBhdHRlbXB0aW5nIHRvIGFwcGx5IGFkdmlj ZSBkdXJpbmcKKwkgKiBxdWVyeSBwbGFubmluZywgd2UgYWx3YXlzIG91dHB1dCB0aGF0IGluZm9y bWF0aW9uLCBidXQgdGhlIHVzZXIgY2FuIHNldAorCSAqIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19l eHBsYWluX3N1cHBsaWVkX2FkdmljZSA9IGZhbHNlIHRvIHN1cHByZXNzIHRoYXQKKwkgKiBiZWhh dmlvci4gSWYgdGhleSBkbywgd2UnbGwgb25seSBkaXNwbGF5IGl0IHdoZW4gdGhlIFBMQU5fQURW SUNFIG9wdGlvbgorCSAqIHdhcyBzcGVjaWZpZWQgYW5kIG5vdCBzZXQgdG8gZmFsc2UuCisJICoK KwkgKiBOQjogSWYgd2UncmUgZXhwbGFpbmluZyBhIHF1ZXJ5IHBsYW5uZWQgYmVmb3JlaGFuZCAt LSBpLmUuIGEgcHJlcGFyZWQKKwkgKiBzdGF0ZW1lbnQgLS0gdGhlIGFwcGxpY2F0aW9uIG9mIHF1 ZXJ5IGFkdmljZSBtYXkgbm90IGhhdmUgYmVlbgorCSAqIHJlY29yZGVkLCBhbmQgdGhlcmVmb3Jl IHRoaXMgd29uJ3QgYmUgYWJsZSB0byBzaG93IGFueXRoaW5nLgorCSAqLworCWlmIChwZ3BhX2xp c3QgIT0gTlVMTCAmJiAocGdfcGxhbl9hZHZpY2VfYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2 aWNlIHx8CisJCQkJCQkJICAocGxhbl9hZHZpY2UgIT0gTlVMTCAmJiAqcGxhbl9hZHZpY2UpKSkK Kwl7CisJCURlZkVsZW0gICAgKmZlZWRiYWNrOworCisJCWZlZWRiYWNrID0gZmluZF9kZWZlbGVt X2J5X2RlZm5hbWUocGdwYV9saXN0LCAiZmVlZGJhY2siKTsKKwkJaWYgKGZlZWRiYWNrICE9IE5V TEwpCisJCQlwZ19wbGFuX2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKGVzLCAoTGlzdCAqKSBmZWVk YmFjay0+YXJnKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBQTEFOX0FEVklDRSBvcHRpb24gd2Fz IHNwZWNpZmllZCAtLSBhbmQgbm90IHNlbnQgdG8gRkFMU0UgLS0KKwkgKiBzaG93IGdlbmVyYXRl ZCBhZHZpY2UuCisJICovCisJaWYgKHBsYW5fYWR2aWNlICE9IE5VTEwgJiYgKnBsYW5fYWR2aWNl KQorCXsKKwkJRGVmRWxlbSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCQljaGFyCSAgICphZHZp Y2Vfc3RyaW5nOworCisJCWFkdmljZV9zdHJpbmdfaXRlbSA9CisJCQlmaW5kX2RlZmVsZW1fYnlf ZGVmbmFtZShwZ3BhX2xpc3QsICJhZHZpY2Vfc3RyaW5nIik7CisJCWlmIChhZHZpY2Vfc3RyaW5n X2l0ZW0gIT0gTlVMTCkKKwkJeworCQkJLyogQWR2aWNlIGhhcyBhbHJlYWR5IGJlZW4gZ2VuZXJh dGVkOyB3ZSBjYW4gcmV1c2UgaXQuICovCisJCQlhZHZpY2Vfc3RyaW5nID0gc3RyVmFsKGFkdmlj ZV9zdHJpbmdfaXRlbS0+YXJnKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBncGFfcGxhbl93YWxr ZXJfY29udGV4dCB3YWxrZXI7CisJCQlTdHJpbmdJbmZvRGF0YSBidWY7CisJCQlwZ3BhX2lkZW50 aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCisJCQkvKiBBZHZpY2Ugbm90IHlldCBnZW5lcmF0ZWQ7 IGRvIHRoYXQgbm93LiAqLworCQkJcGdwYV9wbGFuX3dhbGtlcigmd2Fsa2VyLCBwbGFubmVkc3Rt dCk7CisJCQlydF9pZGVudGlmaWVycyA9CisJCQkJcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9y X3BsYW5uZWRfc3RtdChwbGFubmVkc3RtdCk7CisJCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJ CXBncGFfb3V0cHV0X2FkdmljZSgmYnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCQlh ZHZpY2Vfc3RyaW5nID0gYnVmLmRhdGE7CisJCX0KKworCQlpZiAoYWR2aWNlX3N0cmluZ1swXSAh PSAnXDAnKQorCQkJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShlcywgIkdl bmVyYXRlZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcpOworCX0K K30KKworLyoKKyAqIENoZWNrIGhvb2sgZm9yIHBnX3BsYW5fYWR2aWNlLmFkdmljZQorICovCitz dGF0aWMgYm9vbAorcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3Zh bCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQoreworCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKKwlNZW1vcnlDb250ZXh0IHRtcGNvbnRleHQ7CisJY2hhcgkgICAqZXJyb3I7CisK KwlpZiAoKm5ld3ZhbCA9PSBOVUxMKQorCQlyZXR1cm4gdHJ1ZTsKKworCXRtcGNvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgICAi cGdfcGxhbl9hZHZpY2UuYWR2aWNlIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0la RVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY29udGV4dCk7CisK KwkvKgorCSAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gc2F2ZSB0aGUgcGFyc2UgdHJlZSB0aGF0IHdl IGNvbnN0cnVjdCBoZXJlIGZvcgorCSAqIGV2ZW50dWFsIHVzZSB3aGVuIHBsYW5uaW5nIHdpdGgg dGhpcyBhZHZpY2UsIGJ1dCAqZXh0cmEgY2FuIG9ubHkgcG9pbnQKKwkgKiB0byBhIHNpbmdsZSBn dWNfbWFsbG9jJ2QgY2h1bmssIGFuZCBvdXIgcGFyc2UgdHJlZSBpbnZvbHZlcyBhbgorCSAqIGFy Yml0cmFyeSBudW1iZXIgb2YgbWVtb3J5IGFsbG9jYXRpb25zLgorCSAqLworCSh2b2lkKSBwZ3Bh X3BhcnNlKCpuZXd2YWwsICZlcnJvcik7CisKKwlpZiAoZXJyb3IgIT0gTlVMTCkKKwl7CisJCUdV Q19jaGVja19lcnJkZXRhaWwoIkNvdWxkIG5vdCBwYXJzZSBhZHZpY2U6ICVzIiwgZXJyb3IpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY29udGV4dCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30K KworLyoKKyAqIFNlYXJjaCBhIGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRl Zm5hbWUuCisgKi8KK3N0YXRpYyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExp c3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0 ZW0sIGRlZmxpc3QpCisJeworCQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09 IDApCisJCQlyZXR1cm4gaXRlbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYWE2ZmRjOWU3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBA CisjIHBnX3BsYW5fYWR2aWNlIGV4dGVuc2lvbgorY29tbWVudCA9ICdoZWxwIHRoZSBwbGFubmVy IGdldCB0aGUgcmlnaHQgcGxhbicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0 aG5hbWUgPSAnJGxpYmRpci9wZ19wbGFuX2FkdmljZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi44NmVmYjNiNjExMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaApAQCAtMCwwICsxLDM3IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5oCisgKgkgIG1haW4gaGVhZGVyIGZp bGUgZm9yIHBnX3BsYW5fYWR2aWNlIGNvbnRyaWIgbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJ ICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19QTEFOX0FEVklDRV9ICisjZGVmaW5lIFBHX1BMQU5f QURWSUNFX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2luY2x1ZGUgInN0b3Jh Z2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCisKK3R5cGVkZWYgc3RydWN0IHBn cGFfc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hlOwor CWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFyZWRfY29sbGVjdG9yOworfSBwZ3Bh X3NoYXJlZF9zdGF0ZTsKKworLyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJuIGludAlwZ19wbGFu X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGludAlwZ19wbGFuX2Fkdmlj ZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBjaGFyICpwZ19wbGFuX2FkdmljZV9h ZHZpY2U7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2V4dGVybiBNZW1vcnlDb250ZXh0 IHBnX3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpOworZXh0ZXJuIHBncGFfc2hhcmVkX3N0YXRl ICpwZ19wbGFuX2FkdmljZV9hdHRhY2godm9pZCk7CitleHRlcm4gZHNhX2FyZWEgKnBnX3BsYW5f YWR2aWNlX2RzYV9hcmVhKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9hc3QuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDJmZmJmYTM3NjAKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKQEAgLTAs MCArMSwzOTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfYXN0LmMKKyAqCSAg YWRkaXRpb25hbCBzdXBwb3J0aW5nIGNvZGUgcmVsYXRlZCB0byBwbGFuIGFkdmljZSBwYXJzaW5n CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgInBncGFfYXN0LmgiCisKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAi dXRpbHMvYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorCitzdGF0aWMgYm9v bCBwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmll ciAqcmlkcywKKwkJCQkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJ CQkJCSAgYm9vbCAqcmlkc191c2VkKTsKKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29y cmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBhZHZpY2UgdGFnLgorICovCitjaGFyICoKK3BncGFf Y3N0cmluZ19hZHZpY2VfdGFnKHBncGFfYWR2aWNlX3RhZ190eXBlIGFkdmljZV90YWcpCit7CisJ c3dpdGNoIChhZHZpY2VfdGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FO OgorCQkJcmV0dXJuICJCSVRNQVBfSEVBUF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdO X0pPSU46CisJCQlyZXR1cm4gIkZPUkVJR05fSk9JTiI7CisJCWNhc2UgUEdQQV9UQUdfR0FUSEVS OgorCQkJcmV0dXJuICJHQVRIRVIiOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJ CXJldHVybiAiR0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQly ZXR1cm4gIkhBU0hfSk9JTiI7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgorCQkJ cmV0dXJuICJJTkRFWF9PTkxZX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJ CQlyZXR1cm4gIklOREVYX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQly ZXR1cm4gIkpPSU5fT1JERVIiOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJ WkU6CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIFBHUEFfVEFH X01FUkdFX0pPSU5fUExBSU46CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fUExBSU4iOworCQljYXNl IFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9P UF9NQVRFUklBTElaRSI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJ CXJldHVybiAiTkVTVEVEX0xPT1BfTUVNT0laRSI7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xP T1BfUExBSU46CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX1BMQUlOIjsKKwkJY2FzZSBQR1BBX1RB R19OT19HQVRIRVI6CisJCQlyZXR1cm4gIk5PX0dBVEhFUiI7CisJCWNhc2UgUEdQQV9UQUdfUEFS VElUSU9OV0lTRToKKwkJCXJldHVybiAiUEFSVElUSU9OV0lTRSI7CisJCWNhc2UgUEdQQV9UQUdf U0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJ CWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9VTklR VUUiOworCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJcmV0dXJuICJTRVFfU0NBTiI7CisJ CWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CisJCQlyZXR1cm4gIlRJRF9TQ0FOIjsKKwl9CisKKwlw Z191bnJlYWNoYWJsZSgpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogQ29udmVydCBhbiBh ZHZpY2UgdGFnLCBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCisg KiBkb3duY2FzZWQgYXMgYXBwcm9wcmlhdGUsIHRvIGEgcGdwYV9hZHZpY2VfdGFnX3R5cGUuCisg KgorICogSWYgd2Ugc3VjY2VlZCwgc2V0ICpmYWlsID0gZmFsc2UgYW5kIHJldHVybiB0aGUgcmVz dWx0OyBpZiB3ZSBmYWlsLAorICogc2V0ICpmYWlsID0gdHJ1ZSBhbmQgcmV1cm4gYW4gYXJiaXRy YXJ5IHZhbHVlLgorICovCitwZ3BhX2FkdmljZV90YWdfdHlwZQorcGdwYV9wYXJzZV9hZHZpY2Vf dGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCkKK3sKKwkqZmFpbCA9IGZhbHNlOworCisJ c3dpdGNoICh0YWdbMF0pCisJeworCQljYXNlICdiJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiYml0 bWFwX2hlYXBfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1ND QU47CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlpZiAoc3RyY21wKHRhZywgImZvcmVpZ25f am9pbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjsKKwkJCWJyZWFr OworCQljYXNlICdnJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiZ2F0aGVyIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfR0FUSEVSOworCQkJaWYgKHN0cmNtcCh0YWcsICJnYXRoZXJfbWVyZ2Ui KSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19HQVRIRVJfTUVSR0U7CisJCQlicmVhazsKKwkJ Y2FzZSAnaCc6CisJCQlpZiAoc3RyY21wKHRhZywgImhhc2hfam9pbiIpID09IDApCisJCQkJcmV0 dXJuIFBHUEFfVEFHX0hBU0hfSk9JTjsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWlmIChz dHJjbXAodGFnLCAiaW5kZXhfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0lOREVY X1NDQU47CisJCQlpZiAoc3RyY21wKHRhZywgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdqJzoK KwkJCWlmIChzdHJjbXAodGFnLCAiam9pbl9vcmRlciIpID09IDApCisJCQkJcmV0dXJuIFBHUEFf VEFHX0pPSU5fT1JERVI7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAoc3RyY21wKHRh ZywgIm1lcmdlX2pvaW5fbWF0ZXJpYWxpemUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19N RVJHRV9KT0lOX01BVEVSSUFMSVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJtZXJnZV9qb2luX3Bs YWluIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjsKKwkJCWJy ZWFrOworCQljYXNlICduJzoKKwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfbWF0ZXJp YWxpemUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTEla RTsKKwkJCWlmIChzdHJjbXAodGFnLCAibmVzdGVkX2xvb3BfbWVtb2l6ZSIpID09IDApCisJCQkJ cmV0dXJuIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU7CisJCQlpZiAoc3RyY21wKHRhZywg Im5lc3RlZF9sb29wX3BsYWluIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xP T1BfUExBSU47CisJCQlpZiAoc3RyY21wKHRhZywgIm5vX2dhdGhlciIpID09IDApCisJCQkJcmV0 dXJuIFBHUEFfVEFHX05PX0dBVEhFUjsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCWlmIChz dHJjbXAodGFnLCAicGFydGl0aW9ud2lzZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1BB UlRJVElPTldJU0U7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlpZiAoc3RyY21wKHRhZywg InNlbWlqb2luX25vbl91bmlxdWUiKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19TRU1JSk9J Tl9OT05fVU5JUVVFOworCQkJaWYgKHN0cmNtcCh0YWcsICJzZW1pam9pbl91bmlxdWUiKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRh ZywgInNlcV9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VRX1NDQU47CisJCQli cmVhazsKKwkJY2FzZSAndCc6CisJCQlpZiAoc3RyY21wKHRhZywgInRpZF9zY2FuIikgPT0gMCkK KwkJCQlyZXR1cm4gUEdQQV9UQUdfVElEX1NDQU47CisJCQlicmVhazsKKwl9CisKKwkvKiBkaWRu J3Qgd29yayBvdXQgKi8KKwkqZmFpbCA9IHRydWU7CisKKwkvKiByZXR1cm4gYW4gYXJiaXRyYXJ5 IHZhbHVlIHRvIHVud2luZCB0aGUgY2FsbCBzdGFjayAqLworCXJldHVybiBQR1BBX1RBR19TRVFf U0NBTjsKK30KKworLyoKKyAqIEZvcm1hdCBhIHBncGFfYWR2aWNlX3RhcmdldCBhcyBhIHN0cmlu ZyBhbmQgYXBwZW5kIHJlc3VsdCB0byBhIFN0cmluZ0luZm8uCisgKi8KK3ZvaWQKK3BncGFfZm9y bWF0X2FkdmljZV90YXJnZXQoU3RyaW5nSW5mbyBzdHIsIHBncGFfYWR2aWNlX3RhcmdldCAqdGFy Z2V0KQoreworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJ eworCQlib29sCQlmaXJzdCA9IHRydWU7CisJCWNoYXIJICAgKmRlbGltczsKKworCQlpZiAodGFy Z2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVCkKKwkJCWRlbGltcyA9ICJ7 fSI7CisJCWVsc2UKKwkJCWRlbGltcyA9ICIoKSI7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo c3RyLCBkZWxpbXNbMF0pOworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIGNoaWxk X3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKGZpcnN0KQorCQkJCWZpcnN0 ID0gZmFsc2U7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAnICcpOwor CQkJcGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldChzdHIsIGNoaWxkX3RhcmdldCk7CisJCX0KKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCBkZWxpbXNbMV0pOworCX0KKwllbHNlCisJeworCQlj b25zdCBjaGFyICpydF9pZGVudGlmaWVyOworCisJCXJ0X2lkZW50aWZpZXIgPSBwZ3BhX2lkZW50 aWZpZXJfc3RyaW5nKCZ0YXJnZXQtPnJpZCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3Ry LCBydF9pZGVudGlmaWVyKTsKKwl9Cit9CisKKy8qCisgKiBGb3JtYXQgYSBwZ3BhX2luZGV4X3Rh cmdldCBhcyBhIHN0cmluZyBhbmQgYXBwZW5kIHJlc3VsdCB0byBhIFN0cmluZ0luZm8uCisgKi8K K3ZvaWQKK3BncGFfZm9ybWF0X2luZGV4X3RhcmdldChTdHJpbmdJbmZvIHN0ciwgcGdwYV9pbmRl eF90YXJnZXQgKml0YXJnZXQpCit7CisJaWYgKGl0YXJnZXQtPml0eXBlICE9IFBHUEFfSU5ERVhf TkFNRSkKKwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQlpZiAoaXRhcmdldC0+aXR5cGUg PT0gUEdQQV9JTkRFWF9BTkQpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgIiYmKCIp OworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgInx8KCIpOworCisJCWZv cmVhY2hfcHRyKHBncGFfaW5kZXhfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIGl0YXJnZXQtPmNoaWxk cmVuKQorCQl7CisJCQlpZiAoZmlyc3QpCisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsICcgJyk7CisJCQlwZ3BhX2Zvcm1hdF9pbmRleF90 YXJnZXQoc3RyLCBjaGlsZF90YXJnZXQpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0 ciwgJyknKTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGl0YXJnZXQtPmluZG5hbWVzcGFjZSAhPSBO VUxMKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhzdHIsICIlcy4iLAorCQkJCQkJCSBxdW90ZV9pZGVu dGlmaWVyKGl0YXJnZXQtPmluZG5hbWVzcGFjZSkpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KHN0ciwgcXVvdGVfaWRlbnRpZmllcihpdGFyZ2V0LT5pbmRuYW1lKSk7CisJfQorfQorCisvKgor ICogRGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHBncGFfaW5kZXhfdGFyZ2V0IG9iamVjdHMgYXJlIGV4 YWN0bHkgaWRlbnRpY2FsLgorICovCitib29sCitwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdw YV9pbmRleF90YXJnZXQgKmkxLCBwZ3BhX2luZGV4X3RhcmdldCAqaTIpCit7CisJaWYgKGkxLT5p dHlwZSAhPSBpMi0+aXR5cGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpMS0+aXR5cGUgPT0g UEdQQV9JTkRFWF9OQU1FKQorCXsKKwkJLyogaW5kbmFtZXNwYWNlIGNhbiBiZSBOVUxMLCBhbmQg dHdvIE5VTEwgdmFsdWVzIGFyZSBlcXVhbCAqLworCQlpZiAoKGkxLT5pbmRuYW1lc3BhY2UgIT0g TlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNlICE9IE5VTEwpICYmCisJCQkoaTEtPmluZG5hbWVzcGFj ZSA9PSBOVUxMIHx8IGkyLT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8fAorCQkJIHN0cmNtcChpMS0+ aW5kbmFtZXNwYWNlLCBpMi0+aW5kbmFtZXNwYWNlKSAhPSAwKSkKKwkJCXJldHVybiBmYWxzZTsK KwkJaWYgKHN0cmNtcChpMS0+aW5kbmFtZSwgaTItPmluZG5hbWUpICE9IDApCisJCQlyZXR1cm4g ZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCWludAkJCWkxX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKGkx LT5jaGlsZHJlbik7CisKKwkJaWYgKGkxX2xlbmd0aCAhPSBsaXN0X2xlbmd0aChpMi0+Y2hpbGRy ZW4pKQorCQkJcmV0dXJuIGZhbHNlOworCQlmb3IgKGludCBuID0gMDsgbiA8IGkxX2xlbmd0aDsg KytuKQorCQl7CisJCQlwZ3BhX2luZGV4X3RhcmdldCAqYzEgPSBsaXN0X250aChpMS0+Y2hpbGRy ZW4sIG4pOworCQkJcGdwYV9pbmRleF90YXJnZXQgKmMyID0gbGlzdF9udGgoaTItPmNoaWxkcmVu LCBuKTsKKworCQkJaWYgKCFwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwoYzEsIGMyKSkKKwkJCQly ZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENoZWNr IHdoZXRoZXIgYW4gaWRlbnRpZmllciBtYXRjaGVzIGFuIGFueSBwYXJ0IG9mIGFuIGFkdmljZSB0 YXJnZXQuCisgKi8KK2Jvb2wKK3BncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lk ZW50aWZpZXIgKnJpZCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJLyogRm9yIG5v bi1pZGVudGlmaWVycywgY2hlY2sgYWxsIGRlc2NlbmRlbnRzLiAqLworCWlmICh0YXJnZXQtPnR0 eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2Fk dmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYg KHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGNoaWxkX3RhcmdldCkpCisJCQkJ cmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzdHJjbXAocmlk LT5hbGlhc19uYW1lLCB0YXJnZXQtPnJpZC5hbGlhc19uYW1lKSAhPSAwKQorCQlyZXR1cm4gZmFs c2U7CisJaWYgKHJpZC0+b2NjdXJyZW5jZSAhPSB0YXJnZXQtPnJpZC5vY2N1cnJlbmNlKQorCQly ZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFRoZSBpZGVudGlmaWVyIG11c3Qgc3BlY2lmeSBhIHNj aGVtYSwgYnV0IHRoZSB0YXJnZXQgbWF5IGxlYXZlIHRoZQorCSAqIHNjaGVtYSBOVUxMIHRvIG1h dGNoIGFueXRoaW5nLgorCSAqLworCWlmICh0YXJnZXQtPnJpZC5wYXJ0bnNwICE9IE5VTEwgJiYK KwkJc3RyY21wKHJpZC0+cGFydG5zcCwgdGFyZ2V0LT5yaWQucGFydG5zcCkgIT0gMCkKKwkJcmV0 dXJuIGZhbHNlOworCisKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBjYW4gYmUgTlVMTCBvbiBlaXRo ZXIgc2lkZSwgYnV0IE5VTEwgb25seSBtYXRjaGVzIGFub3RoZXIKKwkgKiBOVUxMLgorCSAqLwor CWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wYXJ0cmVsLCB0YXJnZXQtPnJp ZC5wYXJ0cmVsKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3Ro X251bGwocmlkLT5wbGFuX25hbWUsIHRhcmdldC0+cmlkLnBsYW5fbmFtZSkpCisJCXJldHVybiBm YWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogTWF0Y2ggaWRlbnRpZmllcnMgdG8g YWR2aWNlIHRhcmdldHMgYW5kIHJldHVybiBhbiBlbnVtIHZhbHVlIGluZGljYXRpbmcKKyAqIHRo ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgc2V0IG9mIGtleXMgYW5kIHRoZSBzZXQgb2YgdGFy Z2V0cy4KKyAqCisgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBwZ3BhX2l0bV90eXBlLgorICovCitw Z3BhX2l0bV90eXBlCitwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJpZHMsIHBn cGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0 KQoreworCWJvb2wJCWFsbF9yaWRzX3VzZWQgPSB0cnVlOworCWJvb2wJCWFueV9yaWRzX3VzZWQg PSBmYWxzZTsKKwlib29sCQlhbGxfdGFyZ2V0c191c2VkOworCWJvb2wJICAgKnJpZHNfdXNlZCA9 IHBhbGxvYzBfYXJyYXkoYm9vbCwgbnJpZHMpOworCisJYWxsX3RhcmdldHNfdXNlZCA9CisJCXBn cGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCB0YXJnZXQsIHJpZHNfdXNl ZCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5yaWRzOyArK2kpCisJeworCQlpZiAocmlkc191 c2VkW2ldKQorCQkJYW55X3JpZHNfdXNlZCA9IHRydWU7CisJCWVsc2UKKwkJCWFsbF9yaWRzX3Vz ZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoYWxsX3JpZHNfdXNlZCkKKwl7CisJCWlmIChhbGxfdGFy Z2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX0VRVUFMOworCQllbHNlCisJCQlyZXR1cm4g UEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUOworCX0KKwllbHNlCisJeworCQlpZiAoYWxsX3Rhcmdl dHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQ7CisJCWVsc2Ug aWYgKGFueV9yaWRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fSU5URVJTRUNUSU5HOworCQll bHNlCisJCQlyZXR1cm4gUEdQQV9JVE1fRElTSk9JTlQ7CisJfQorfQorCisvKgorICogUmV0dXJu cyB0cnVlIGlmIGV2ZXJ5IHRhcmdldCBvciBzdWItdGFyZ2V0IGlzIG1hdGNoZWQgYnkgYXQgbGVh c3Qgb25lCisgKiBpZGVudGlmaWVyLCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgorICoKKyAqIEFsc28g c2V0cyByaWRzX3VzZWRbaV0gPSB0cnVlIGZvciBlYWNoIGlkZW5pZmllciB0aGF0IG1hdGNoZXMg YXQgbGVhc3Qgb25lCisgKiB0YXJnZXQuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2lkZW50aWZp ZXJzX2NvdmVyX3RhcmdldChpbnQgbnJpZHMsIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJ CQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LCBib29sICpyaWRzX3VzZWQpCit7CisJYm9v bAkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9J REVOVElGSUVSKQorCXsKKwkJcmVzdWx0ID0gdHJ1ZTsKKworCQlmb3JlYWNoX3B0cihwZ3BhX2Fk dmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYg KCFwZ3BhX2lkZW50aWZpZXJzX2NvdmVyX3RhcmdldChucmlkcywgcmlkcywgY2hpbGRfdGFyZ2V0 LAorCQkJCQkJCQkJCQkgICByaWRzX3VzZWQpKQorCQkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisJ fQorCWVsc2UKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7ICsraSkKKwkJeworCQkJ aWYgKHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldCgmcmlkc1tpXSwgdGFyZ2V0KSkKKwkJ CXsKKwkJCQlyaWRzX3VzZWRbaV0gPSB0cnVlOworCQkJCXJlc3VsdCA9IHRydWU7CisJCQl9CisJ CX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2FzdC5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNmZlNzMwYTRkNAotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaApAQCAtMCwwICsx LDIwNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9hc3QuaAorICoJICBhYnN0 cmFjdCBzeW50YXggdHJlZXMgZm9yIHBsYW4gYWR2aWNlLCBwbHVzIHBhcnNlci9zY2FubmVyIHN1 cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9h c3QuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfQVNUX0gKKyNk ZWZpbmUgUEdQQV9BU1RfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVyLmgiCisKKyNpbmNs dWRlICJub2Rlcy9wZ19saXN0LmgiCisKKy8qCisgKiBBZHZpY2UgaXRlbXMgZ2VuZXJhbGx5IHRh a2UgdGhlIGZvcm0gU09NRV9UQUcoaXRlbSBbLi4uXSksIHdoZXJlIGFuIGl0ZW0KKyAqIGNhbiB0 YWtlIHZhcmlvdXMgZm9ybXMuIFRoZSBzaW1wbGVzdCBjYXNlIGlzIGEgcmVsYXRpb24gaWRlbnRp ZmllciwgYnV0CisgKiBzb21lIHRhZ3MgYWxsb3cgc3VibGlzdHMsIGFuZCBKT0lOX09SREVSKCkg YWxsb3dzIGJvdGggb3JkZXJlZCBhbmQgdW5vcmRlcmVkCisgKiBzdWJsaXN0cy4KKyAqLwordHlw ZWRlZiBlbnVtCit7CisJUEdQQV9UQVJHRVRfSURFTlRJRklFUiwJCS8qIHJlbGF0aW9uIGlkZW50 aWZpZXIgKi8KKwlQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QsCS8qIChpdGVtIC4uLikgKi8KKwlQ R1BBX1RBUkdFVF9VTk9SREVSRURfTElTVAkvKiB7aXRlbSAuLi59ICovCit9IHBncGFfdGFyZ2V0 X3R5cGU7CisKKy8qCisgKiBXaGVuIGFuIGFkdmljZSBpdGVtIGRlc2NyaWJlcyBhIGJpdG1hcCBp bmRleCBzY2FuLCBpdCBtYXkgbmVlZCB0byBkZXNjcmliZQorICogdGhlIHVzZSBvZiBtdWx0aXBs ZSBpbmRleGVzLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX0lOREVYX05BTUUsCQkJLyog aW5kZXggc2NoZW1hICsgbmFtZSAqLworCVBHUEFfSU5ERVhfQU5ELAkJCQkvKiAmJihpdGVtIC4u LikgKi8KKwlQR1BBX0lOREVYX09SCQkJCS8qIHx8KGl0ZW0gLi4uKSAqLworfSBwZ3BhX2luZGV4 X3R5cGU7CisKKy8qCisgKiBBbiBpbmRleCBzcGVjaWZpY2F0aW9uLiBXZSB1c2UgdGhpcyBmb3Ig SU5ERVhfU0NBTiwgSU5ERVhfT05MWV9TQ0FOLAorICogYW5kIEJJVE1BUF9IRUFQX1NDQU4gYWR2 aWNlLCBidXQgaW4gdGhlIGZvcm1lciB0d28gY2FzZXMsIHRoZSB0YXJnZXQgbXVzdAorICogYmUg b2YgdHlwZSBQR1BBX0lOREVYX05BTUUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfaW5kZXhf dGFyZ2V0Cit7CisJcGdwYV9pbmRleF90eXBlIGl0eXBlOworCisJLyogSW5kZXggc2NoZW0gYW5k IG5hbWUsIHdoZW4gaXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1FICovCisJY2hhcgkgICAqaW5kbmFt ZXNwYWNlOworCWNoYXIJICAgKmluZG5hbWU7CisKKwkvKiBMaXN0IG9mIHBncGFfaW5kZXhfdGFy Z2V0IG9iamVjdHMsIHdoZW4gaXR5cGUgIT0gUEdQQV9JTkRFWF9OQU1FICovCisJTGlzdAkgICAq Y2hpbGRyZW47Cit9IHBncGFfaW5kZXhfdGFyZ2V0OworCisvKgorICogQSBzaW5nbGUgaXRlbSBh Ym91dCB3aGljaCBhZHZpY2UgaXMgYmVpbmcgZ2l2ZW4sIHdoaWNoIGNvdWxkIGJlIGVpdGhlcgor ICogYSByZWxhdGlvbiBpZGVudGlmaWVyIHRoYXQgd2Ugd2FudCB0byBicmVhayBvdXQgaW50byBp dHMgY29uc3RpdHVlbnQgZmllbGRzLAorICogb3IgYSBzdWJsaXN0IG9mIHNvbWUga2luZC4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfdGFyZ2V0Cit7CisJcGdwYV90YXJnZXRfdHlw ZSB0dHlwZTsKKworCS8qCisJICogVGhpcyBmaWVsZCBpcyBtZWFuaW5nZnVsIHdoZW4gdHR5cGUg aXMgUEdQQV9UQVJHRVRfSURFTlRJRklFUi4KKwkgKgorCSAqIEFsbCBpZGVudGlmaWVycyBtdXN0 IGhhdmUgYW4gYWxpYXMgbmFtZSBhbmQgYW4gb2NjdXJyZW5jZSBudW1iZXI7IHRoZQorCSAqIHJl bWFpbmluZyBmaWVsZHMgY2FuIGJlIE5VTEwuIE5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIHNw ZWNpZnkgYQorCSAqIHBhcnRpdGlvbiBuYW1lIHdpdGhvdXQgYSBwYXJ0aXRpb24gc2NoZW1hLCBi dXQgbm90IHRoZSByZXZlcnNlLgorCSAqLworCXBncGFfaWRlbnRpZmllciByaWQ7CisKKwkvKgor CSAqIFRoaXMgZmllbGQgaXMgc2V0IHdoZW4gdHR5cGUgaXMgUFBHQV9UQVJHRVRfSURFTlRJRklF UiBhbmQgdGhlIGFkdmljZQorCSAqIHRhZyBpcyBQR1BBX1RBR19JTkRFWF9TQ0FOLCBQR1BBX1RB R19JTkRFWF9PTkxZX1NDQU4sIG9yCisJICogUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTi4KKwkg Ki8KKwlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldDsKKworCS8qCisJICogV2hlbiB0aGUgdHR5 cGUgaXMgUEdQQV9UQVJHRVRfPGFueXRoaW5nPl9MSVNULCB0aGlzIGZpZWxkIGNvbnRhaW5zIGEK KwkgKiBsaXN0IG9mIGFkZGl0aW9uYWwgcGdwYV9hZHZpY2VfdGFyZ2V0IG9iamVjdHMuIE90aGVy d2lzZSwgaXQgaXMgdW51c2VkLgorCSAqLworCUxpc3QJICAgKmNoaWxkcmVuOworfSBwZ3BhX2Fk dmljZV90YXJnZXQ7CisKKy8qCisgKiBUaGVzZSBhcmUgYWxsIHRoZSBraW5kcyBvZiBhZHZpY2Ug dGhhdCB3ZSBrbm93IGhvdyB0byBwYXJzZS4gSWYgYSBrZXl3b3JkCisgKiBpcyBmb3VuZCBhdCB0 aGUgdG9wIGxldmVsLCBpdCBtdXN0IGJlIGluIHRoaXMgbGlzdC4KKyAqCisgKiBJZiB5b3UgY2hh bmdlIGFueXRoaW5nIGhlcmUsIGFsc28gdXBkYXRlIHBncGFfcGFyc2VfYWR2aWNlX3RhZyBhbmQK KyAqIHBncGFfY3N0cmluZ19hZHZpY2VfdGFnLgorICovCit0eXBlZGVmIGVudW0gcGdwYV9hZHZp Y2VfdGFnX3R5cGUKK3sKKwlQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOLAorCVBHUEFfVEFHX0ZP UkVJR05fSk9JTiwKKwlQR1BBX1RBR19HQVRIRVIsCisJUEdQQV9UQUdfR0FUSEVSX01FUkdFLAor CVBHUEFfVEFHX0hBU0hfSk9JTiwKKwlQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU4sCisJUEdQQV9U QUdfSU5ERVhfU0NBTiwKKwlQR1BBX1RBR19KT0lOX09SREVSLAorCVBHUEFfVEFHX01FUkdFX0pP SU5fTUFURVJJQUxJWkUsCisJUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTiwKKwlQR1BBX1RBR19O RVNURURfTE9PUF9NQVRFUklBTElaRSwKKwlQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFLAor CVBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOLAorCVBHUEFfVEFHX05PX0dBVEhFUiwKKwlQR1BB X1RBR19QQVJUSVRJT05XSVNFLAorCVBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUsCisJUEdQ QV9UQUdfU0VNSUpPSU5fVU5JUVVFLAorCVBHUEFfVEFHX1NFUV9TQ0FOLAorCVBHUEFfVEFHX1RJ RF9TQ0FOCit9IHBncGFfYWR2aWNlX3RhZ190eXBlOworCisvKgorICogQW4gaXRlbSBvZiBhZHZp Y2UsIG1lYW5pbmcgYSB0YWcgYW5kIHRoZSBsaXN0IG9mIGFsbCB0YXJnZXRzIHRvIHdoaWNoCisg KiBpdCBpcyBiZWluZyBhcHBsaWVkLgorICoKKyAqICJ0YXJnZXRzIiBpcyBhIGxpc3Qgb2YgcGdw YV9hZHZpY2VfdGFyZ2V0IG9iamVjdHMuCisgKgorICogVGhlIExpc3QgcmV0dXJuZWQgZnJvbSBw Z3BhX3l5cGFyc2UgaXMgbGlzdCBvZiBwZ3BhX2FkdmljZV9pdGVtIG9iamVjdHMuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHBncGFfYWR2aWNlX2l0ZW0KK3sKKwlwZ3BhX2FkdmljZV90YWdfdHlwZSB0 YWc7CisJTGlzdAkgICAqdGFyZ2V0czsKK30gcGdwYV9hZHZpY2VfaXRlbTsKKworLyoKKyAqIFJl c3VsdCBvZiBjb21wYXJpbmcgYW4gYXJyYXkgb2YgcGdwYV9yZWxhdGlvbl9pZGVudGlmaWVyIG9i amVjdHMgdG8gYQorICogcGdwYV9hZHZpY2VfdGFyZ2V0LgorICoKKyAqIFBHUEFfSVRNX0VRVUFM IG1lYW5zIGFsbCB0YXJnZXRzIGFyZSBtYXRjaGVkIGJ5IHNvbWUgaWRlbnRpZmllciwgYW5kCisg KiBhbGwgaWRlbnRpZmllcnMgd2VyZSBtYXRjaGVkIHRvIGEgdGFyZ2V0LgorICoKKyAqIFBHUEFf SVRNX0tFWVNfQVJFX1NVQlNFVCBtZWFucyB0aGF0IGFsbCBpZGVudGlmaWVycyBtYXRjaGVkIHRv IGEgdGFyZ2V0LAorICogYnV0IHRoZXJlIHdlcmUgbGVmdG92ZXIgdGFyZ2V0cy4gR2VuZXJhbGx5 LCB0aGlzIG1lYW5zIHRoYXQgdGhlIGFkdmljZSBpcworICogbG9va2luZyB0byBhcHBseSB0byBh bGwgb2YgdGhlIHJlbHMgd2UgaGF2ZSBwbHVzIHNvbWUgYWRkaXRpb25hbCBvbmVzIHRoYXQKKyAq IHdlIGRvbid0IGhhdmUuCisgKgorICogUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUIG1lYW5z IHRoYXQgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQgYnkgYW4KKyAqIGlkZW50aWZpZXJzLCBidXQg dGhlcmUgd2VyZSBsZWZ0b3ZlciBpZGVudGlmaWVycy4gR2VuZXJhbGx5LCB0aGlzIG1lYW5zCisg KiB0aGF0IHRoZSBhZHZpY2UgaXMgbG9va2luZyB0byBhcHBseSB0byBzb21lIGJ1dCBub3QgYWxs IG9mIHRoZSByZWxzIHdlIGhhdmUuCisgKgorICogUEdQQV9JVE1fSU5URVJTRUNUSU5HIG1lYW5z IHRoYXQgc29tZSBpZGVudGlmZWlycyBhbmQgdGFyZ2V0cyB3ZXJlIG1hdGNoZWQsCisgKiBidXQg bmVpdGhlciBhbGwgaWRlbnRpZmllcnMgbm9yIGFsbCB0YXJnZXRzIGNvdWxkIGJlIG1hdGNoZWQg dG8gaXRlbXMgaW4KKyAqIHRoZSBvdGhlciBzZXQuCisgKgorICogUEdQQV9JVE1fRElTSk9JTlQg bWVhbnMgdGhhdCBubyBtYXRjaGVzIGJldHdlZW4gaWRlbnRpZmVpcnMgYW5kIHRhcmdldHMgd2Vy ZQorICogZm91bmQuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFfSVRNX0VRVUFMLAorCVBH UEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwKKwlQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQsCisJ UEdQQV9JVE1fSU5URVJTRUNUSU5HLAorCVBHUEFfSVRNX0RJU0pPSU5UCit9IHBncGFfaXRtX3R5 cGU7CisKKy8qIGZvciBwZ3BhX3NjYW5uZXIubCBhbmQgcGdwYV9wYXJzZXIueSAqLwordW5pb24g WVlTVFlQRTsKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNkZWZpbmUgWVlfVFlQ RURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCAqeXlzY2FuX3Q7CisjZW5kaWYKKworLyog aW4gcGdwYV9zY2FubmVyLmwgKi8KK2V4dGVybiBpbnQJcGdwYV95eWxleCh1bmlvbiBZWVNUWVBF ICp5eWx2YWxfcGFyYW0sIExpc3QgKipyZXN1bHQsCisJCQkJCSAgIGNoYXIgKipwYXJzZV9lcnJv cl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyKTsKK2V4dGVybiB2b2lkIHBncGFfeXllcnJvcihM aXN0ICoqcmVzdWx0LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsCisJCQkJCQkgeXlzY2FuX3Qg eXlzY2FubmVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgcGdw YV9zY2FubmVyX2luaXQoY29uc3QgY2hhciAqc3RyLCB5eXNjYW5fdCAqeXlzY2FubmVycCk7Citl eHRlcm4gdm9pZCBwZ3BhX3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nhbm5lcik7CisKKy8q IGluIHBncGFfcGFyc2VyLnkgKi8KK2V4dGVybiBpbnQJcGdwYV95eXBhcnNlKExpc3QgKipyZXN1 bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5fdCB5eXNjYW5uZXIp OworZXh0ZXJuIExpc3QgKnBncGFfcGFyc2UoY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywgY2hh ciAqKmVycm9yX3ApOworCisvKiBpbiBwZ3BhX2FzdC5jICovCitleHRlcm4gY2hhciAqcGdwYV9j c3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3RhZyk7CitleHRl cm4gYm9vbCBwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocGdwYV9pZGVudGlmaWVyICpy aWQsCisJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIHBn cGFfaXRtX3R5cGUgcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQoaW50IG5yaWRzLAorCQkJ CQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCQkJICAgcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIGJvb2wgcGdwYV9pbmRleF90YXJnZXRzX2Vx dWFsKHBncGFfaW5kZXhfdGFyZ2V0ICppMSwKKwkJCQkJCQkJCSBwZ3BhX2luZGV4X3RhcmdldCAq aTIpOworZXh0ZXJuIHBncGFfYWR2aWNlX3RhZ190eXBlIHBncGFfcGFyc2VfYWR2aWNlX3RhZyhj b25zdCBjaGFyICp0YWcsIGJvb2wgKmZhaWwpOworZXh0ZXJuIHZvaWQgcGdwYV9mb3JtYXRfYWR2 aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0ciwKKwkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0 ICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KFN0cmluZ0lu Zm8gc3RyLAorCQkJCQkJCQkJIHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0KTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEyMDg1ZDlkNzVmCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5jCkBAIC0wLDAgKzEsNjM3IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2NvbGxlY3Rvci5jCisgKgkgIGNvbGxlY3Qg YWR2aWNlIGludG8gYmFja2VuZC1sb2NhbCBvciBzaGFyZWQgbWVtb3J5CisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg InBnX3BsYW5fYWR2aWNlLmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKworI2luY2x1 ZGUgImRhdGF0eXBlL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAidXRp bHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy90 aW1lc3RhbXAuaCIKKworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVhcl9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xlYXJfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2Fk dmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZSk7CisKKyNkZWZpbmUgQURWSUNFX0NIVU5LX1NJWkUJCTEwMjQKKyNkZWZpbmUgQURWSUNFX0NI VU5LX0FSUkFZX1NJWkUJNjQKKworI2RlZmluZQlQR19HRVRfQURWSUNFX0NPTFVNTlMJNworCisv KgorICogQWR2aWNlIGV4dHJhY3RlZCBmcm9tIG9uZSBxdWVyeSBwbGFuLCB0b2dldGhlciB3aXRo IHRoZSBxdWVyeSBzdHJpbmcKKyAqIGFuZCB2YXJpb3VzIG90aGVyIGlkZW50aWZ5aW5nIGRldGFp bHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfY29sbGVjdGVkX2FkdmljZQoreworCU9pZAkJ CXVzZXJpZDsJCQkvKiB1c2VyIE9JRCAqLworCU9pZAkJCWRiaWQ7CQkJLyogZGF0YWJhc2UgT0lE ICovCisJdWludDY0CQlxdWVyeWlkOwkJLyogcXVlcnkgaWRlbnRpZmllciAqLworCVRpbWVzdGFt cFR6IHRpbWVzdGFtcDsJCS8qIHF1ZXJ5IHRpbWVzdGFtcCAqLworCWludAkJCWFkdmljZV9vZmZz ZXQ7CS8qIHN0YXJ0IG9mIGFkdmljZSBpbiB0ZXh0dWFsIGRhdGEgKi8KKwljaGFyCQl0ZXh0dWFs X2RhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gcGdwYV9jb2xsZWN0ZWRfYWR2aWNlOwor CisvKgorICogQSBidW5jaCBvZiBwb2ludGVycyB0byBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2Jq ZWN0cywgc3RvcmVkIGluCisgKiBiYWNrZW5kLWxvY2FsIG1lbW9yeS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3sKKwlwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ug KmVudHJpZXNbQURWSUNFX0NIVU5LX1NJWkVdOworfSBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuazsK KworLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IGFsbCBvZiB0aGUgcGdwYV9jb2xsZWN0ZWRfYWR2 aWNlIG9iamVjdHMgdGhhdCB3ZSdyZQorICogc3RvcmluZyBpbiBsb2NhbCBtZW1vcnkuCisgKgor ICogV2UgYXNzaWduIGNvbnNlY3V0aXZlIElEcywgc3RhcnRpbmcgZnJvbSAwLCB0byBlYWNoIHBn cGFfY29sbGVjdGVkX2FkdmljZQorICogb2JqZWN0IHRoYXQgd2Ugc3RvcmUuIFRoZSBhY3R1YWwg c3RvcmFnZSBpcyBhbiBhcnJheSBvZiBjaHVua3MsIHdoaWNoCisgKiBoZWxwcyBrZWVwIG1lbWNw eSgpIG92ZXJoZWFkIGxvdyB3aGVuIHdlIHN0YXJ0IGRpc2NhcmRpbmcgb2xkZXIgZGF0YS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9sb2NhbF9hZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7 CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0CQliYXNlX2lkOworCWludAkJCWNodW5rX2Fy cmF5X2FsbG9jYXRlZF9zaXplOworCXBncGFfbG9jYWxfYWR2aWNlX2NodW5rICoqY2h1bmtzOwor fSBwZ3BhX2xvY2FsX2FkdmljZTsKKworLyoKKyAqIEp1c3QgbGlrZSBwZ3BhX2xvY2FsX2Fkdmlj ZV9jaHVuaywgYnV0IHN0b3JlZCBpbiBhIGR5bmFtaWMgc2hhcmVkIGFyZWEsCisgKiBzbyB3ZSBt dXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9mIG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rCit7CisJZHNhX3BvaW50ZXIgZW50 cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBncGFfc2hhcmVkX2FkdmljZV9jaHVuazsKKwor LyoKKyAqIEp1c3QgbGlrZSBwZ3BhX2xvY2FsX2FkdmljZSwgYnV0IHN0b3JlZCBpbiBhIGR5bmFt aWMgc2hhcmVkIGFyZWEsIHNvCisgKiB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9m IG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zaGFyZWRfYWR2aWNl Cit7CisJdWludDY0CQluZXh0X2lkOworCXVpbnQ2NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFz ZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZTsKKwlkc2FfcG9pbnRlciBj aHVua3M7Cit9IHBncGFfc2hhcmVkX2FkdmljZTsKKworLyogUG9pbnRlcnMgdG8gbG9jYWwgYW5k IHNoYXJlZCBjb2xsZWN0b3JzICovCitzdGF0aWMgcGdwYV9sb2NhbF9hZHZpY2UgKmxvY2FsX2Nv bGxlY3RvciA9IE5VTEw7CitzdGF0aWMgcGdwYV9zaGFyZWRfYWR2aWNlICpzaGFyZWRfY29sbGVj dG9yID0gTlVMTDsKKworLyogU3RhdGljIGZ1bmN0aW9ucyAqLworc3RhdGljIHBncGFfY29sbGVj dGVkX2FkdmljZSAqcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVzZXJpZCwKKwkJCQkJ CQkJCQkJCQkJIE9pZCBkYmlkLAorCQkJCQkJCQkJCQkJCQkgdWludDY0IHF1ZXJ5SWQsCisJCQkJ CQkJCQkJCQkJCSBUaW1lc3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICphZHZpY2Vfc3Ry aW5nLAorCQkJCQkJCQkJCQkJCQkgZHNhX2FyZWEgKmFyZWEsCisJCQkJCQkJCQkJCQkJCSBkc2Ff cG9pbnRlciAqcmVzdWx0KTsKK3N0YXRpYyB2b2lkIHBncGFfc3RvcmVfbG9jYWxfYWR2aWNlKHBn cGFfY29sbGVjdGVkX2FkdmljZSAqY2EpOworc3RhdGljIHZvaWQgcGdwYV90cmltX2xvY2FsX2Fk dmljZShpbnQgbGltaXQpOworc3RhdGljIHZvaWQgcGdwYV9zdG9yZV9zaGFyZWRfYWR2aWNlKGRz YV9wb2ludGVyIGNhX3BvaW50ZXIpOworc3RhdGljIHZvaWQgcGdwYV90cmltX3NoYXJlZF9hZHZp Y2UoZHNhX2FyZWEgKmFyZWEsIGludCBsaW1pdCk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBl eHRyYWN0IHRoZSBxdWVyeSBzdHJpbmcgZnJvbSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKi8KK3N0 YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitxdWVyeV9zdHJpbmcocGdwYV9jb2xsZWN0ZWRfYWR2 aWNlICpjYSkKK3sKKwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YTsKK30KKworLyogSGVscGVyIGZ1 bmN0aW9uIHRvIGV4dHJhY3QgdGhlIGFkdmljZSBzdHJpbmcgZnJvbSBwZ3BhX2NvbGxlY3RlZF9h ZHZpY2UgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCithZHZpY2Vfc3RyaW5nKHBncGFf Y29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGEgKyBjYS0+ YWR2aWNlX29mZnNldDsKK30KKworLyoKKyAqIFN0b3JlIGNvbGxlY3RlZCBxdWVyeSBhZHZpY2Ug aW50byB0aGUgbG9jYWwgb3Igc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IsCisgKiBhcyBhcHByb3By aWF0ZS4KKyAqLwordm9pZAorcGdwYV9jb2xsZWN0X2FkdmljZSh1aW50NjQgcXVlcnlJZCwgY29u c3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQljb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKQor eworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgpOworCU9pZAkJCWRiaWQgPSBNeURhdGFiYXNl SWQ7CisJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJaWYgKHBn X3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJcGdwYV9jb2xs ZWN0ZWRfYWR2aWNlICpjYTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCW9sZGNv bnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQoKSk7 CisJCWNhID0gcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlk LCBub3csCisJCQkJCQkJCQkJcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkJ CU5VTEwsIE5VTEwpOworCQlwZ3BhX3N0b3JlX2xvY2FsX2FkdmljZShjYSk7CisJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlpZiAocGdfcGxhbl9hZHZpY2Vfc2hh cmVkX2NvbGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJZHNhX2FyZWEgICAqYXJlYSA9IHBnX3Bs YW5fYWR2aWNlX2RzYV9hcmVhKCk7CisJCWRzYV9wb2ludGVyIGNhX3BvaW50ZXI7CisKKwkJcGdw YV9tYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJCQkJ CQkJCSAgIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywgYXJlYSwKKwkJCQkJCQkJICAgJmNh X3BvaW50ZXIpOworCQlwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7CisJfQor fQorCisvKgorICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdwYV9jb2xsZWN0ZWRfYWR2aWNl IG9iamVjdC4KKyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxsb2NhdGUg dGhlIG5ldyBvYmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBpcyByZXR1 cm5lZCB2aWEgKnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcgb2JqZWN0 IGlzIGFsbG9jYXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFuZCByZXN1 bHQgaXMgbm90IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdwYV9jb2xsZWN0 ZWRfYWR2aWNlICoKK3BncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1c2VyaWQsIE9pZCBk YmlkLCB1aW50NjQgcXVlcnlJZCwKKwkJCQkJCSAgIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJ CQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmFk dmljZV9zdHJpbmcsCisJCQkJCQkgICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJlc3Vs dCkKK3sKKwlzaXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3RyaW5n KSArIDE7CisJc2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vfc3Ry aW5nKSArIDE7CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdwYV9jb2xsZWN0ZWRfYWR2aWNl ICpjYTsKKworCXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBncGFfY29sbGVjdGVkX2FkdmljZSwg dGV4dHVhbF9kYXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5nX2xl bmd0aDsKKworCWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0aCk7 CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5ndGgp OworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+dXNl cmlkID0gR2V0VXNlcklkKCk7CisJY2EtPmRiaWQgPSBNeURhdGFiYXNlSWQ7CisJY2EtPnF1ZXJ5 aWQgPSBxdWVyeUlkOworCWNhLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJY2EtPmFkdmljZV9v ZmZzZXQgPSBxdWVyeV9zdHJpbmdfbGVuZ3RoOworCisJbWVtY3B5KGNhLT50ZXh0dWFsX2RhdGEs IHF1ZXJ5X3N0cmluZywgcXVlcnlfc3RyaW5nX2xlbmd0aCk7CisJbWVtY3B5KCZjYS0+dGV4dHVh bF9kYXRhW2NhLT5hZHZpY2Vfb2Zmc2V0XSwKKwkJICAgYWR2aWNlX3N0cmluZywgYWR2aWNlX3N0 cmluZ19sZW5ndGgpOworCisJcmV0dXJuIGNhOworfQorCisvKgorICogQWRkIGEgcGdfY29sbGVj dGVkX2FkdmljZSBvYmplY3QgdG8gb3VyIGJhY2tlbmQtbG9jYWwgYWR2aWNlIGNvbGxlY3Rpb24u CisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzd2l0Y2hpbmcgdG8gdGhlIGFwcHJv cHJpYXRlIG1lbW9yeSBjb250ZXh0OworICogdGhlIHByb3ZpZGVkIG9iamVjdCBzaG91bGQgaGF2 ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGF0IHNhbWUgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQK K3BncGFfc3RvcmVfbG9jYWxfYWR2aWNlKHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJ dWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdwYV9sb2Nh bF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCisJLyogSWYgdGhlIGxvY2FsIGFkdmlj ZSBjb2xsZWN0b3IgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBkbyB0aGF0IG5vdy4gKi8KKwlpZiAo bGEgPT0gTlVMTCkKKwl7CisJCWxhID0gcGFsbG9jMChzaXplb2YocGdwYV9sb2NhbF9hZHZpY2Up KTsKKwkJbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZ X1NJWkU7CisJCWxhLT5jaHVua3MgPSBwYWxsb2MwX2FycmF5KHBncGFfbG9jYWxfYWR2aWNlX2No dW5rICosCisJCQkJCQkJCSAgIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7CisJCWxv Y2FsX2NvbGxlY3RvciA9IGxhOworCX0KKworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNldCBh dCB3aGljaCB0byBzdG9yZSB0aGlzIGFkdmljZS4gKi8KKwljaHVua19udW1iZXIgPSAobGEtPm5l eHRfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZzZXQg PSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCS8q IEV4dGVuZCBjaHVuayBhcnJheSwgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19udW1iZXIgPj0g bGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7CisK KwkJbmV3X3NpemUgPSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hV TktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5rcyA9IHJlcGFsbG9jMF9hcnJheShsYS0+Y2h1bmtz LAorCQkJCQkJCQkJIHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICosCisJCQkJCQkJCQkgbGEtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplLAorCQkJCQkJCQkJIG5ld19zaXplKTsKKwkJbGEtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCisJLyogQWxsb2NhdGUg bmV3IGNodW5rLCBpZiBuZWVkZWQuICovCisJaWYgKGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXSA9 PSBOVUxMKQorCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0gPSBwYWxsb2MwX29iamVjdChwZ3Bh X2xvY2FsX2FkdmljZV9jaHVuayk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4dC1p ZCBjb3VudGVyLiAqLworCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSA9PSBOVUxMKTsKKwlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSA9IGNhOworCSsrbGEtPm5leHRfaWQ7CisKKwkvKiBJZiB3ZSd2ZSBl eGNlZWRlZCB0aGUgc3RvcmFnZSBsaW1pdCwgZGlzY2FyZCBvbGQgZGF0YS4gKi8KKwlwZ3BhX3Ry aW1fbG9jYWxfYWR2aWNlKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQpOwor fQorCisvKgorICogQWRkIGEgcGdfY29sbGVjdGVkX2FkdmljZSBvYmplY3QgdG8gdGhlIHNoYXJl ZCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiAnY2FfcG9pbnRlcicgc2hvdWxkIGhhdmUgYmVl biBhbGxvY2F0ZWQgZnJvbSB0aGUgcGdfcGxhbl9hZHZpY2UgRFNBIGFyZWEKKyAqIGFuZCBzaG91 bGQgcG9pbnQgdG8gYW4gb2JqZWN0IG9mIHR5cGUgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlLgorICov CitzdGF0aWMgdm9pZAorcGdwYV9zdG9yZV9zaGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3Bv aW50ZXIpCit7CisJdWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7 CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJ ZHNhX2FyZWEgICAqYXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7CisJcGdwYV9zaGFy ZWRfYWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJZHNhX3BvaW50ZXIgKmNodW5rX2Fy cmF5OworCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkvKiBMb2NrIHRoZSBz aGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lW RSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVkIGFkdmlj ZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3cuCisJICogSWYgd2UncmUgdGhlIGZpcnN0IG9u ZXMgdG8gYXR0YWNoLCB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdC4KKwkgKi8KKwlp ZiAoc2EgPT0gTlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZh bGlkRHNhUG9pbnRlcikKKwkJCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0KKwkJCQlkc2FfYWxs b2NhdGUwKGFyZWEsIHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2UpKTsKKwkJc2hhcmVkX2NvbGxl Y3RvciA9IHNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9y KTsKKwl9CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIGJhY2tlbmQg bWF5IGhhdmUgc3VjY2VlZGVkIGluIGNyZWF0aW5nCisJICogdGhlIG1haW4gY29sbGVjdG9yIG9i amVjdCBidXQgZmFpbGVkIHRvIGFsbG9jYXRlIGFuIGluaXRpYWwgY2h1bmsKKwkgKiBhcnJheSwg c28gd2UgbXVzdCBiZSBwcmVwYXJlZCB0byBhbGxvY2F0ZSB0aGUgY2h1bmsgYXJyYXkgaGVyZSB3 aGV0aGVyCisJICogb3Igbm90IHdlIGNyZWF0ZWQgdGhlIGNvbGxlY3RvciBvYmplY3QuCisJICov CisJaWYgKHNoYXJlZF9jb2xsZWN0b3ItPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID09IDAp CisJeworCQlzYS0+Y2h1bmtzID0KKwkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwKKwkJCQkJCSAgc2l6 ZW9mKGRzYV9wb2ludGVyKSAqIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFKTsKKwkJc2EtPmNodW5r X2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJfQorCisJ LyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2aWNl LiAqLworCWNodW5rX251bWJlciA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklD RV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lk KSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBjaHVu ayBhcnJheSBhbmQsIGlmIG5lZWRlZCwgZXh0ZW5kIGl0LiAqLworCWlmIChjaHVua19udW1iZXIg Pj0gc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7 CisJCWRzYV9wb2ludGVyIG5ld19jaHVua3M7CisKKwkJLyoKKwkJICogRFNBIGNhbid0IGVubGFy Z2UgYW4gZXhpc3RpbmcgYWxsb2NhdGlvbiwgc28gd2UgbXVzdCBtYWtlIGEgbmV3CisJCSAqIGFs bG9jYXRpb24gYW5kIGNvcHkgZGF0YSBvdmVyLgorCQkgKi8KKwkJbmV3X3NpemUgPSBzYS0+Y2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbmV3 X2NodW5rcyA9IGRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIG5ld19z aXplKTsKKwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgbmV3X2NodW5rcyk7 CisJCW1lbWNweShjaHVua19hcnJheSwgZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3Mp LAorCQkJICAgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRf c2l6ZSk7CisJCWRzYV9mcmVlKGFyZWEsIHNhLT5jaHVua3MpOworCQlzYS0+Y2h1bmtzID0gbmV3 X2NodW5rczsKKwkJc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJ fQorCWVsc2UKKwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5r cyk7CisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgY2h1bmssIGFsbG9jYXRp bmcgaXQgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19hcnJheVtjaHVua19udW1iZXJdID09IElu dmFsaWREc2FQb2ludGVyKQorCQljaHVua19hcnJheVtjaHVua19udW1iZXJdID0KKwkJCWRzYV9h bGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBncGFfc2hhcmVkX2FkdmljZV9jaHVuaykpOworCWNodW5r ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCisJ LyogU2F2ZSBwb2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQoY2h1 bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9PSBJbnZhbGlkRHNhUG9pbnRlcik7CisJY2h1bmst PmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9IGNhX3BvaW50ZXI7CisJKytzYS0+bmV4dF9pZDsKKwor CS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRh LiAqLworCXBncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIHBnX3BsYW5fYWR2aWNlX3NoYXJl ZF9jb2xsZWN0aW9uX2xpbWl0KTsKKworCS8qIFJlbGVhc2UgbG9jayBvbiBzaGFyZWQgc3RhdGUu ICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworfQorCisvKgorICogRGlzY2FyZCBj b2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeSBpbiBleGNlc3Mg b2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3RyaW1f bG9jYWxfYWR2aWNlKGludCBsaW1pdCkKK3sKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2Nh bF9jb2xsZWN0b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50OworCXVpbnQ2NAkJdHJpbV9jb3Vu dDsKKwl1aW50NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2NAkJdHJpbV9jaHVua19jb3Vu dDsKKwl1aW50NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKworCS8qIElmIHdlIGhhdmVuJ3Qg eWV0IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVu dF9jb3VudCA9IGxhLT5uZXh0X2lkIC0gbGEtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3Vu dCA8PSBsaW1pdCkKKwkJcmV0dXJuOworCisJLyogRnJlZSBlbm91Z2ggZW50cmllcyB0byBnZXQg dXMgYmFjayBkb3duIHRvIHRoZSBsaW1pdC4gKi8KKwl0cmltX2NvdW50ID0gY3VycmVudF9jb3Vu dCAtIGxpbWl0OworCXdoaWxlICh0cmltX2NvdW50ID4gMCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtf bnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKworCQljaHVua19udW1iZXIgPSAobGEt Pm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19v ZmZzZXQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpF OworCisJCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zm c2V0XSAhPSBOVUxMKTsKKwkJcGZyZWUobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVz W2NodW5rX29mZnNldF0pOworCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1 bmtfb2Zmc2V0XSA9IE5VTEw7CisJCSsrbGEtPm9sZGVzdF9pZDsKKwkJLS10cmltX2NvdW50Owor CX0KKworCS8qIEZyZWUgYW55IGNodW5rcyB0aGF0IGFyZSBub3cgZW50aXJlbHkgdW51c2VkLiAq LworCXRyaW1fY2h1bmtfY291bnQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFE VklDRV9DSFVOS19TSVpFOworCWZvciAodWludDY0IG4gPSAwOyBuIDwgdHJpbV9jaHVua19jb3Vu dDsgKytuKQorCQlwZnJlZShsYS0+Y2h1bmtzW25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBj aHVuayBwb2ludGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90 YWxfY2h1bmtfY291bnQgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCArCisJCQkJCQkgQURW SUNFX0NIVU5LX1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVu a19jb3VudCA9IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVt YWluaW5nX2NodW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmbGEtPmNodW5rc1swXSwgJmxhLT5j aHVua3NbdHJpbV9jaHVua19jb3VudF0sCisJCQkJc2l6ZW9mKHBncGFfbG9jYWxfYWR2aWNlX2No dW5rICopICogcmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERvbid0IGxlYXZlIHN0YWxl IHBvaW50ZXJzIGFyb3VuZC4gKi8KKwltZW1zZXQoJmxhLT5jaHVua3NbcmVtYWluaW5nX2NodW5r X2NvdW50XSwgMCwKKwkJICAgc2l6ZW9mKHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICopCisJCSAg ICogKHRvdGFsX2NodW5rX2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50KSk7CisKKwkvKiBB ZGp1c3QgYmFzZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlsYS0+YmFzZV9pZCArPSB0cmlt X2NodW5rX2NvdW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNv bGxlY3RlZCBhZHZpY2Ugc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQor ICogc3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cmltX3NoYXJlZF9h ZHZpY2UoZHNhX2FyZWEgKmFyZWEsIGludCBsaW1pdCkKK3sKKwlwZ3BhX3NoYXJlZF9hZHZpY2Ug KnNhID0gc2hhcmVkX2NvbGxlY3RvcjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0 CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmlt X2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCWRzYV9wb2lu dGVyICpjaHVua19hcnJheTsKKworCS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIGxp bWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVudF9jb3VudCA9IHNhLT5uZXh0 X2lkIC0gc2EtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3VudCA8PSBsaW1pdCkKKwkJcmV0 dXJuOworCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICovCisJY2h1bmtf YXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkvKiBGcmVlIGVu b3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLworCXRyaW1f Y291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQgPiAwKQor CXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlw Z3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCisJCWNodW5rX251bWJlciA9IChzYS0+ b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29m ZnNldCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7 CisKKwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVt YmVyXSk7CisJCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IEludmFsaWRE c2FQb2ludGVyKTsKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0 XSk7CisJCWNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBJbnZhbGlkRHNhUG9pbnRlcjsK KwkJKytzYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkg Y2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3Vu dCA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJ Zm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCWRzYV9mcmVl KGFyZWEsIGNodW5rX2FycmF5W25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVuayBwb2lu dGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxfY2h1bmtf Y291bnQgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNFX0NIVU5L X1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19jb3VudCA9 IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWluaW5nX2No dW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmY2h1bmtfYXJyYXlbMF0sICZjaHVua19hcnJheVt0 cmltX2NodW5rX2NvdW50XSwKKwkJCQlzaXplb2YoZHNhX3BvaW50ZXIpICogcmVtYWluaW5nX2No dW5rX2NvdW50KTsKKworCS8qIERvbid0IGxlYXZlIHN0YWxlIHBvaW50ZXJzIGFyb3VuZC4gKi8K KwltZW1zZXQoJmNodW5rX2FycmF5W3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAgIHNp emVvZihwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtfY291 bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZhbHVl IGFjY29yZGluZ2x5LiAqLworCXNhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBBRFZJ Q0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBmdW5jdGlvbiB0byBkaXNj YXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkKKyAqLworRGF0dW0K K3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlp ZiAobG9jYWxfY29sbGVjdG9yICE9IE5VTEwpCisJCXBncGFfdHJpbV9sb2NhbF9hZHZpY2UoMCk7 CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9u IHRvIGRpc2NhcmQgYWR2aWNlIGNvbGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICov CitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2go KTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKworCUxX TG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJLyoKKwkgKiBJZiB3 ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4 IHRoYXQgbm93OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZlbiBleGlzdCwg d2UgY2FuIHJldHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4KKwkgKi8KKwlp ZiAoc2hhcmVkX2NvbGxlY3RvciA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRfY29s bGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0 ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJlZF9jb2xsZWN0b3Ig PSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKwor CS8qIERvIHRoZSByZWFsIHdvcmsgKi8KKwlwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShhcmVhLCAw KTsKKworCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7 Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVk IGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVkX2xv Y2FsX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9 IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ3BhX2xvY2FsX2Fkdmlj ZSAqbGEgPSBsb2NhbF9jb2xsZWN0b3I7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7CisK KwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwlpZiAobGEgPT0gTlVMTCkKKwkJ cmV0dXJuIChEYXR1bSkgMDsKKworCS8qIExvb3Agb3ZlciBhbGwgZW50cmllcy4gKi8KKwlmb3Ig KHVpbnQ2NCBpZCA9IGxhLT5vbGRlc3RfaWQ7IGlkIDwgbGEtPm5leHRfaWQ7ICsraWQpCisJewor CQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFf Y29sbGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FEVklDRV9DT0xV TU5TXTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHswfTsKKworCQlj aHVua19udW1iZXIgPSAoaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJ Y2h1bmtfb2Zmc2V0ID0gKGlkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisK KwkJY2EgPSBsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XTsK KworCQlpZiAoIW1lbWJlcl9jYW5fc2V0X3JvbGUodXNlcmlkLCBjYS0+dXNlcmlkKSkKKwkJCWNv bnRpbnVlOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJdmFsdWVzWzFd ID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0gT2JqZWN0SWRH ZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVtKGNhLT5xdWVy eWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0oY2EtPnRpbWVzdGFtcCk7CisJ CXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7CisJCXZh bHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOworCisJCXR1 cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJ CQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCXJldHVybiAoRGF0dW0pIDA7Cit9CisKKy8q CisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGluIHNoYXJl ZCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZShQR19G VU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZv ICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19w bGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2Vf ZHNhX2FyZWEoKTsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdwYV9zaGFyZWRfYWR2 aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5m bywgMCk7CisKKwkvKiBMb2NrIHRoZSBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgm c3RhdGUtPmxvY2ssIExXX1NIQVJFRCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hl ZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICog YnV0IGlmIHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdp dGhvdXQgZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzYSA9PSBOVUxMKQor CXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQor CQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAw OworCQl9CisJCXNoYXJlZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBz dGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUg Y2h1bmsgYXJyYXkuICovCisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2Et PmNodW5rcyk7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJZm9yICh1aW50NjQg aWQgPSBzYS0+b2xkZXN0X2lkOyBpZCA8IHNhLT5uZXh0X2lkOyArK2lkKQorCXsKKwkJdWludDY0 CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ3BhX3NoYXJlZF9h ZHZpY2VfY2h1bmsgKmNodW5rOworCQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1 bQkJdmFsdWVzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9B RFZJQ0VfQ09MVU1OU10gPSB7MH07CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gc2EtPmJhc2Vf aWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIHNhLT5iYXNl X2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFy ZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhh cmVhLCBjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKworCQl2YWx1ZXNbMF0gPSBVSW50 NjRHZXREYXR1bShpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJp ZCk7CisJCXZhbHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNb M10gPSBVSW50NjRHZXREYXR1bShjYS0+cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFt cEdldERhdHVtKGNhLT50aW1lc3RhbXApOworCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4dERh dHVtKHF1ZXJ5X3N0cmluZyhjYSkpOworCQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVt KGFkdmljZV9zdHJpbmcoY2EpKTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNl dFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9CisK KwkvKiBSZWxlYXNlIGxvY2sgb24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja1JlbGVhc2UoJnN0 YXRlLT5sb2NrKTsKKworCXJldHVybiAoRGF0dW0pIDA7Cit9CmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfY29sbGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmI2ZTc0NmEwNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsMTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIHBncGFfY29sbGVjdG9yLmgKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50byBiYWNrZW5kLWxv Y2FsIG9yIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aWZuZGVmIFBHUEFfQ09MTEVDVE9SX0gKKyNkZWZpbmUgUEdQQV9DT0xMRUNUT1JfSAorCitleHRl cm4gdm9pZCBwZ3BhX2NvbGxlY3RfYWR2aWNlKHVpbnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFyICpx dWVyeV9zdHJpbmcsCisJCQkJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcpOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZmE4MDc1ZDY2ZQotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKQEAgLTAsMCArMSw0NzYg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfaWRlbnRpZmllci5jCisgKgkgIGNy ZWF0ZSBhcHByb3ByaWF0ZSBpZGVudGlmaWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcworICoK KyAqIFRoZSBnb2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIGJlIGFibGUgdG8gcHJvZHVjZSBpZGVu dGlmaWVycyBmb3IgcmFuZ2UKKyAqIHRhYmxlIGVudHJpZXMgdGhhdCBhcmUgdW5pcXVlLCB1bmRl cnN0YW5kYWJsZSB0byBodW1hbiBiZWluZ3MsIGFuZAorICogYWJsZSB0byBiZSByZWNvbnN0cnVj dGVkIGR1cmluZyBmdXR1cmUgcGxhbm5pbmcgY3ljbGVzLiBBcyBhbgorICogZXhjZXB0aW9uLCB3 ZSBkbyBub3QgY2FyZSBhYm91dCwgb3Igd2FudCB0byBwcm9kdWNlLCBpZGVudGlmaWVycyBmb3IK KyAqIFJURV9KT0lOIGVudHJpZXMuIFRoaXMgaXMgYmVjYXVzZSAoMSkgd2Ugd291bGQgZW5kIHVw IHdpdGggYSB0b24gb2YKKyAqIFJURXMgd2l0aCB1bmhlbHBmdWwgbmFtZXMgbGlrZSB1bm5hbWVk X2pvaW5fMTc7ICgyKSBub3QgYWxsIGpvaW5zIGhhdmUKKyAqIFJURXM7IGFuZCAoMykgd2UgaW50 ZW5kIHRvIHJlZmVyIHRvIGpvaW5zIGJ5IHRoZWlyIGNvbnN0aXR1ZW50IG1lbWJlcnMKKyAqIHJh dGhlciB0aGFuIGJ5IHJlZmVyZW5jZSB0byB0aGUgam9pbiBSVEUuCisgKgorICogSW4gZ2VuZXJh bCwgd2UgY29uc3RydWN0IGlkZW50aWZpZXJzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAqCisg KiBhbGlhc19uYW1lI29jY3VycmVuY2VfbnVtYmVyL2NoaWxkX3RhYmxlX25hbWVAc3VicXVlcnlf bmFtZQorICoKKyAqIEhvd2V2ZXIsIG9jY3VycmVuY2VfbnVtYmVyIGlzIG9taXR0ZWQgd2hlbiBp dCBpcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZQorICogd2l0aGluIHRoZSBzYW1lIHN1YnF1ZXJ5LCBj aGlsZF90YWJsZV9uYW1lIGlzIG9taXR0ZWQgZm9yIHJlbGF0aW9ucyB0aGF0CisgKiBhcmUgbm90 IGNoaWxkIHRhYmxlcywgYW5kIHN1YnF1ZXJ5X25hbWUgaXMgb21pdHRlZCBmb3IgdGhlIHRvcG1v c3QKKyAqIHF1ZXJ5IGxldmVsLiBXaGVuZXZlciBhbiBpdGVtIGlzIG9taXR0ZWQsIHRoZSBwcmVj ZWRpbmcgcHVuY3R1YXRpb24gbWFyaworICogaXMgYWxzbyBvbWl0dGVkLiAgSWRlbnRpZmllci1z dHlsZSBlc2NhcGluZyBpcyBhcHBsaWVkIHRvIGFsaWFzX25hbWUgYW5kCisgKiBzdWJxdWVyeV9u YW1lLiAgV2hlbmV2ZXIgd2UgaW5jbHVkZSBjaGlsZF90YWJsZV9uYW1lLCB3ZSBhbHdheXMKKyAq IHNjaGVtYS1xdWFsaWZpZWQgbmFtZSwgYnV0IHdyaXRpbmcgdGhlaXIgb3duIHBsYW4gYWR2aWNl IGFyZSBub3QgcmVxdWlyZWQKKyAqIHRvIGRvIHNvLiAgSWRlbnRpZmllci1zdHlsZSBlc2NhcGlu ZyBpcyBhcHBsaWVkIHRvIHRoZSBzY2hlbWEgYW5kIHRvIHRoZQorICogcmVsYXRpb24gbmFtZXMg c2VwYXJhdGVseS4KKyAqCisgKiBUaGUgdXBzaG90IG9mIGFsbCBvZiB0aGVzZSBydWxlcyBpcyB0 aGF0IGluIHNpbXBsZSBjYXNlcywgdGhlIHJlbGF0aW9uCisgKiBpZGVudGlmaWVyIGlzIHRleHR1 YWxseSBpZGVudGljYWwgdG8gdGhlIGFsaWFzIG5hbWUsIG1ha2luZyBsaWZlIGVhc2llcgorICog Zm9yIHVzZXJzLiBIb3dldmVyLCBldmVuIGluIGNvbXBsZXggY2FzZXMsIGV2ZXJ5IHJlbGF0aW9u IGlkZW50aWZpZXIKKyAqIGZvciBhIGdpdmVuIHF1ZXJ5IHdpbGwgYmUgdW5pcXVlIChvciBhdCBs ZWFzdCB3ZSBob3BlIHNvOiBpZiBub3QsIHRoaXMKKyAqIGNvZGUgaXMgYnVnZ3kgYW5kIHRoZSBp ZGVudGlmaWVyIGZvcm1hdCBtaWdodCBuZWVkIHRvIGJlIHJldGhvdWdodCkuCisgKgorICogQSBr ZXkgZ29hbCBvZiB0aGlzIHN5c3RlbSBpcyB0aGF0IHdlIHdhbnQgdG8gYmUgYWJsZSB0byByZWNv bnN0cnVjdCB0aGUKKyAqIHNhbWUgaWRlbnRpZmllcnMgZHVyaW5nIGEgZnV0dXJlIHBsYW5uaW5n IGN5Y2xlIGZvciB0aGUgc2FtZSBxdWVyeSwgc28KKyAqIHRoYXQgaWYgYSBjZXJ0YWluIGJlaGF2 aW9yIGlzIHNwZWNpZmllZCBmb3IgYSBjZXJ0YWluIGlkZW50aWZpZXIsIHdlIGNhbgorICogcHJv cGVybHkgaWRlbnRpZnkgdGhlIFJUSSBmb3Igd2hpY2ggdGhhdCBiZWhhdmlvciBpcyBtYW5kYXRl ZC4gSW4gb3JkZXIKKyAqIGZvciB0aGlzIHRvIHdvcmssIHN1YnF1ZXJ5IG5hbWVzIG11c3QgYmUg dW5pcXVlIGFuZCBrbm93biBiZWZvcmUgdGhlCisgKiBzdWJxdWVyeSBpcyBwbGFubmVkLCBhbmQg dGhlIHJlbWFpbmRlciBvZiB0aGUgaWRlbnRpZmllciBtdXN0IG5vdCBkZXBlbmQKKyAqIG9uIGFu eSBwYXJ0IG9mIHRoZSBxdWVyeSBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHN1YnF1ZXJ5IGxldmVs LiBJbgorICogcGFydGljdWxhciwgb2NjdXJyZW5jZV9udW1iZXIgbXVzdCBiZSBjYWxjdWxhdGVk IHJlbGF0aXZlIHRvIHRoZSByYW5nZQorICogdGFibGUgZm9yIHRoZSByZWxldmFudCBzdWJxdWVy eSwgbm90IHRoZSBmaW5hbCBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJw Z3BhX2lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCitz dGF0aWMgSW5kZXggKnBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0YWJsZV9sZW5ndGgs IExpc3QgKnJ0YWJsZSwKKwkJCQkJCQkJCSAgTGlzdCAqYXBwaW5mb3MpOworc3RhdGljIGludAlw Z3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXggKnRvcF9ydGlfbWFwLAor CQkJCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0aSk7CisKKy8qCisgKiBD cmVhdGUgYSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZyb20gc2NyYXRjaC4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIGxlYXZlcyB0aGUgY2FsbGVyIHRvIGRvIGFsbCB0aGUgaGVhdnkgbGlmdGluZywg c28gaXQncworICogZ2VuZXJhbGx5IGJldHRlciB0byB1c2Ugb25lIG9mIHRoZSBmdW5jdGlvbnMg YmVsb3cgaW5zdGVhZC4KKyAqCisgKiBTZWUgdGhlIGZpbGUgaGVhZGVyIGNvbW1lbnRzIGZvciBt b3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiBhbgorICogaWRlbnRpZmllci4KKyAqLworY29u c3QgY2hhciAqCitwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBncGFfaWRlbnRpZmllciAq cmlkKQoreworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKworCUFzc2VydChyaWQtPmFsaWFzX25hbWUg IT0gTlVMTCk7CisJcmVzdWx0ID0gcXVvdGVfaWRlbnRpZmllcihyaWQtPmFsaWFzX25hbWUpOwor CisJQXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAwKTsKKwlpZiAocmlkLT5vY2N1cnJlbmNlID4g MSkKKwkJcmVzdWx0ID0gcHNwcmludGYoIiVzIyVkIiwgcmVzdWx0LCByaWQtPm9jY3VycmVuY2Up OworCisJaWYgKHJpZC0+cGFydHJlbCAhPSBOVUxMKQorCXsKKwkJaWYgKHJpZC0+cGFydG5zcCA9 PSBOVUxMKQorCQkJcmVzdWx0ID0gcHNwcmludGYoIiVzLyVzIiwgcmVzdWx0LAorCQkJCQkJCSAg cXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRuc3ApKTsKKwkJZWxzZQorCQkJcmVzdWx0ID0gcHNw cmludGYoIiVzLyVzLiVzIiwgcmVzdWx0LAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQt PnBhcnRuc3ApLAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRyZWwpKTsKKwl9 CisKKwlpZiAocmlkLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJcmVzdWx0ID0gcHNwcmludGYoIiVz QCVzIiwgcmVzdWx0LCBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGxhbl9uYW1lKSk7CisKKwlyZXR1 cm4gcmVzdWx0OworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlkZW50aWZpZXIgZm9y IGEgcGFydGljdWxhciBSVEkuCisgKgorICogVGhlIGNhbGxlciBwcm92aWRlcyByb290IGFuZCBy dGksIGFuZCBnZXRzIHRoZSBuZWNlc3NhcnkgZGV0YWlscyBiYWNrIHZpYQorICogdGhlIHJlbWFp bmluZyBwYXJhbWV0ZXJzLgorICovCit2b2lkCitwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9y dGkoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZp ZXIgKnJpZCkKK3sKKwlJbmRleAkJdG9wX3J0aSA9IHJ0aTsKKwlpbnQJCQlvY2N1cnJlbmNlID0g MTsKKwlSYW5nZVRibEVudHJ5ICpydGU7CisJUmFuZ2VUYmxFbnRyeSAqdG9wX3J0ZTsKKwljaGFy CSAgICpwYXJ0bnNwID0gTlVMTDsKKwljaGFyCSAgICpwYXJ0cmVsID0gTlVMTDsKKworCS8qCisJ ICogSWYgdGhpcyBpcyBhIGNoaWxkIFJURSwgZmluZCB0aGUgdG9wbW9zdCBwYXJlbnQgdGhhdCBp cyBzdGlsbCBvZiB0eXBlCisJICogUlRFX1JFTEFUSU9OLiBXZSBkbyB0aGlzIGJlY2F1c2Ugd2Ug aWRlbnRpZnkgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJsZXMgYnkgdGhlIG5hbWUg b2YgdGhlIGNoaWxkIHRhYmxlLCBidXQgc3VicXVlcmllcyBjYW4gYWxzbyBoYXZlCisJICogY2hp bGQgcmVscyBhbmQgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9zZSBoZXJlLgorCSAqLworCWZvciAo OzspCisJeworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCQlSYW5nZVRibEVudHJ5ICpwYXJl bnRfcnRlOworCisJCS8qIGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5VTEwgaWYgdGhlcmUgYXJl IG5vIGNoaWxkcmVuICovCisJCWlmIChyb290LT5hcHBlbmRfcmVsX2FycmF5ID09IE5VTEwgfHwK KwkJCShhcHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJheVt0b3BfcnRpXSkgPT0gTlVMTCkK KwkJCWJyZWFrOworCisJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKGFwcGluZm8tPnBh cmVudF9yZWxpZCwgcm9vdCk7CisJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kICE9IFJURV9SRUxB VElPTikKKwkJCWJyZWFrOworCisJCXRvcF9ydGkgPSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQ7CisJ fQorCisJLyogR2V0IHRoZSByYW5nZSB0YWJsZSBlbnRyaWVzIGZvciB0aGUgUlRJIGFuZCB0b3Ag UlRJLiAqLworCXJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocnRpLCByb290KTsKKwl0b3BfcnRlID0g cGxhbm5lcl9ydF9mZXRjaCh0b3BfcnRpLCByb290KTsKKwlBc3NlcnQocnRlLT5ydGVraW5kICE9 IFJURV9KT0lOKTsKKwlBc3NlcnQodG9wX3J0ZS0+cnRla2luZCAhPSBSVEVfSk9JTik7CisKKwkv KiBXb3JrIG91dCB0aGUgY29ycmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwlmb3IgKEluZGV4 IHByaW9yX3J0aSA9IDE7IHByaW9yX3J0aSA8IHRvcF9ydGk7ICsrcHJpb3JfcnRpKQorCXsKKwkJ UmFuZ2VUYmxFbnRyeSAqcHJpb3JfcnRlOworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCisJ CS8qCisJCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwgb2YgYSBwYXJlbnQgdGhhdCBpcyBhIHJl bGF0aW9uLCBza2lwIGl0LgorCQkgKgorCQkgKiBTdWNoIHJhbmdlIHRhYmxlIGVudHJpZXMgYXJl IGRpc2FtYmlndWF0ZWQgYnkgbWVudGlvbmluZyB0aGUgc2NoZW1hCisJCSAqIGFuZCBuYW1lIG9m IHRoZSB0YWJsZSwgbm90IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2VwYXJhdGUgb2NjdXJyZW5jZXMK KwkJICogb2YgdGhlIHNhbWUgdGFibGUuCisJCSAqCisJCSAqIE5COiBhcHBlbmRfcmVsX2FycmF5 IGNhbiBiZSBOVUxMIGlmIHRoZXJlIGFyZSBubyBjaGlsZHJlbgorCQkgKi8KKwkJaWYgKHJvb3Qt PmFwcGVuZF9yZWxfYXJyYXkgIT0gTlVMTCAmJgorCQkJKGFwcGluZm8gPSByb290LT5hcHBlbmRf cmVsX2FycmF5W3ByaW9yX3J0aV0pICE9IE5VTEwpCisJCXsKKwkJCVJhbmdlVGJsRW50cnkgKnBh cmVudF9ydGU7CisKKwkJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKGFwcGluZm8tPnBh cmVudF9yZWxpZCwgcm9vdCk7CisJCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCA9PSBSVEVfUkVM QVRJT04pCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBTa2lwIE5VTEwgZW50cmllcyBhbmQg am9pbnMuICovCisJCXByaW9yX3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocHJpb3JfcnRpLCByb290 KTsKKwkJaWYgKHByaW9yX3J0ZSA9PSBOVUxMIHx8IHByaW9yX3J0ZS0+cnRla2luZCA9PSBSVEVf Sk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgdGhlIGFsaWFzIG5hbWUgZGlmZmVy cy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYtPmFsaWFzbmFtZSwgcnRlLT5lcmVm LT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiBMb29rcyBsaWtlIGEgdHJ1 ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9CisKKwkvKiBJZiB0aGlzIGlzIGEg Y2hpbGQgdGFibGUsIGdldCB0aGUgc2NoZW1hIGFuZCByZWxhdGlvbiBuYW1lcy4gKi8KKwlpZiAo cnRpICE9IHRvcF9ydGkpCisJeworCQlwYXJ0bnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3Rl bXAoZ2V0X3JlbF9uYW1lc3BhY2UocnRlLT5yZWxpZCkpOworCQlwYXJ0cmVsID0gZ2V0X3JlbF9u YW1lKHJ0ZS0+cmVsaWQpOworCX0KKworCS8qIE9LLCB3ZSBoYXZlIGFsbCB0aGUgYW5zd2VycyB3 ZSBuZWVkLiBSZXR1cm4gdGhlbSB0byB0aGUgY2FsbGVyLiAqLworCXJpZC0+YWxpYXNfbmFtZSA9 IHRvcF9ydGUtPmVyZWYtPmFsaWFzbmFtZTsKKwlyaWQtPm9jY3VycmVuY2UgPSBvY2N1cnJlbmNl OworCXJpZC0+cGFydG5zcCA9IHBhcnRuc3A7CisJcmlkLT5wYXJ0cmVsID0gcGFydHJlbDsKKwly aWQtPnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKK30KKworLyoKKyAqIENvbXB1dGUgYSBy ZWxhdGlvbiBpZGVudGlmaWVyIGZvciBhIHNldCBvZiBSVElzLCBleGNlcHQgZm9yIGFueSBSVEVf Sk9JTgorICogUlRJcyB0aGF0IG1heSBiZSBwcmVzZW50LgorICoKKyAqIFJURV9KT0lOIGVudHJp ZXMgYXJlIGV4Y2x1ZGVkIGJlY2F1c2UgdGhleSBjYW5ub3QgYmUgbWVudGlvbmVkIGJ5IHBsYW4K KyAqIGFkdmljZS4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcg c3VyZSB0aGF0IHRoZSB0a2V5cyBhcnJheSBpcyBsYXJnZQorICogZW5vdWdoIHRvIHN0b3JlIHRo ZSByZXN1bHRzLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBpZGVu dGlmaWVycyBjb21wdXRlZC4KKyAqLworaW50CitwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlf cmVsaWRzKFBsYW5uZXJJbmZvICpyb290LCBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJICAg cGdwYV9pZGVudGlmaWVyICpyaWRzKQoreworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQlydGkg PSAtMTsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0g MCkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocnRpLCByb290 KTsKKworCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisJCXBn cGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCBydGksICZyaWRzW2NvdW50KytdKTsK Kwl9CisKKwlBc3NlcnQoY291bnQgPiAwKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBD cmVhdGUgYW4gYXJyYXkgb2YgcmFuZ2UgdGFibGUgaWRlbnRpZmllcnMgZm9yIGFsbCB0aGUgbm9u LU5VTEwsCisgKiBub24tUlRFX0pPSU4gZW50cmllcyBpbiB0aGUgUGxhbm5lZFN0bXQncyByYW5n ZSB0YWJsZS4KKyAqLworcGdwYV9pZGVudGlmaWVyICoKK3BncGFfY3JlYXRlX2lkZW50aWZpZXJz X2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KQoreworCUluZGV4CQlydGFibGVf bGVuZ3RoID0gbGlzdF9sZW5ndGgocHN0bXQtPnJ0YWJsZSk7CisJcGdwYV9pZGVudGlmaWVyICpy ZXN1bHQgPSBwYWxsb2MwX2FycmF5KHBncGFfaWRlbnRpZmllciwgcnRhYmxlX2xlbmd0aCk7CisJ SW5kZXgJICAgKnRvcF9ydGlfbWFwOworCWludAkJCXJ0aW5mb2luZGV4ID0gMDsKKwlTdWJQbGFu UlRJbmZvICpydGluZm8gPSBOVUxMOworCVN1YlBsYW5SVEluZm8gKm5leHRydGluZm8gPSBOVUxM OworCisJLyoKKwkgKiBBY2NvdW50IGZvciByZWxhdGlvbnMgYWRkZGVkIGJ5IGluaGVyaXRhbmNl IGV4cGFuc2lvbiBvZiBwYXJ0aXRpb25lZAorCSAqIHRhYmxlcy4KKwkgKi8KKwl0b3BfcnRpX21h cCA9IHBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKHJ0YWJsZV9sZW5ndGgsIHBzdG10LT5ydGFibGUs CisJCQkJCQkJCQkJICBwc3RtdC0+YXBwZW5kUmVsYXRpb25zKTsKKworCS8qCisJICogV2hlbiB3 ZSBiZWdpbiBpdGVyYXRpbmcsIHdlJ3JlIHByb2Nlc3NpbmcgdGhlIHBvcnRpb24gb2YgdGhlIHJh bmdlCisJICogdGFibGUgdGhhdCBvcmlnaW5hdGVkIGZyb20gdGhlIHRvcC1sZXZlbCBQbGFubmVy SW5mbywgc28gc3VicnRpbmZvIGlzCisJICogTlVMTC4gTGF0ZXIsIHN1YnJ0aW5mbyB3aWxsIGJl IHRoZSBTdWJQbGFuUlRJbmZvIGZvciB0aGUgc3VicXVlcnkgd2hvc2UKKwkgKiBwb3J0aW9uIG9m IHRoZSByYW5nZSB0YWJsZSB3ZSBhcmUgcHJvY2Vzc2luZy4gbmV4dHJ0aW5mbyBpcyBhbHdheXMg dGhlCisJICogU3ViUGxhblJUSW5mbyB0aGF0IGZvbGxvd3MgdGhlIGN1cnJlbnQgb25lLCBpZiBh bnksIHNvIHdoZW4gd2UncmUKKwkgKiBwcm9jZXNzaW5nIHRoZSB0b3AtbGV2ZWwgcXVlcnkncyBw b3J0aW9uIG9mIHRoZSByYW5nZSB0YWJsZSwgdGhlIG5leHQKKwkgKiBTdWJQbGFuUlRJbmZvIGlz IHRoZSB2ZXJ5IGZpcnN0IG9uZS4KKwkgKi8KKwlpZiAocHN0bXQtPnN1YnJ0aW5mb3MgIT0gTlVM TCkKKwkJbmV4dHJ0aW5mbyA9IGxpbml0aWFsKHBzdG10LT5zdWJydGluZm9zKTsKKworCS8qIE1h aW4gbG9vcCBvdmVyIHRoZSByYW5nZSB0YWJsZS4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0 aSA8PSBydGFibGVfbGVuZ3RoOyBydGkrKykKKwl7CisJCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsK KwkJSW5kZXgJCXRvcF9ydGk7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwkJUmFuZ2VUYmxFbnRy eSAqdG9wX3J0ZTsKKwkJY2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJCWNoYXIJICAgKnBhcnRy ZWwgPSBOVUxMOworCQlpbnQJCQlvY2N1cnJlbmNlOworCQlwZ3BhX2lkZW50aWZpZXIgKnJpZDsK KworCQkvKgorCQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IFN1YlBsYW5SVEluZm8sIGlmIGl0J3Mg dGltZSB0byBkbyB0aGF0LgorCQkgKgorCQkgKiBUaGlzIGxvb3AgcHJvYmFibHkgc2hvdWxkbid0 IGV2ZXIgaXRlcmF0ZSBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZQorCQkgKiB0aGF0IHdvdWxkIGlt cGx5IHRoYXQgYSBzdWJxdWVyeSB3YXMgcGxhbm5lZCBidXQgYWRkZWQgbm90aGluZyB0bworCQkg KiB0aGUgcmFuZ2UgdGFibGU7IGJ1dCBsZXQncyBiZSBkZWZlbnNpdmUgYW5kIGFzc3VtZSBpdCBj YW4gaGFwcGVuLgorCQkgKi8KKwkJd2hpbGUgKG5leHRydGluZm8gIT0gTlVMTCAmJiBydGkgPiBu ZXh0cnRpbmZvLT5ydG9mZnNldCkKKwkJeworCQkJcnRpbmZvID0gbmV4dHJ0aW5mbzsKKwkJCWlm ICgrK3J0aW5mb2luZGV4ID49IGxpc3RfbGVuZ3RoKHBzdG10LT5zdWJydGluZm9zKSkKKwkJCQlu ZXh0cnRpbmZvID0gTlVMTDsKKwkJCWVsc2UKKwkJCQluZXh0cnRpbmZvID0gbGlzdF9udGgocHN0 bXQtPnN1YnJ0aW5mb3MsIHJ0aW5mb2luZGV4KTsKKwkJfQorCisJCS8qIEZldGNoIHRoZSByYW5n ZSB0YWJsZSBlbnRyeSwgaWYgYW55LiAqLworCQlydGUgPSBydF9mZXRjaChydGksIHBzdG10LT5y dGFibGUpOworCisJCS8qCisJCSAqIFdlIGNhbid0IGFuZCBkb24ndCBuZWVkIHRvIGlkZW50aWZ5 IG51bGwgZW50cmllcywgYW5kIHdlIGRvbid0IHdhbnQKKwkJICogdG8gaWRlbnRpZnkgam9pbiBl bnRyaWVzLgorCQkgKi8KKwkJaWYgKHJ0ZSA9PSBOVUxMIHx8IHJ0ZS0+cnRla2luZCA9PSBSVEVf Sk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcmVsYXRp b24gYWRkZWQgYnkgcGFydGl0aW9uZWQgdGFibGUgZXhwYW5zaW9uLAorCQkgKiB0aGVuIHRoZSB0 b3AgUlRJL1JURSBhcmUganVzdCB0aGUgc2FtZSBhcyB0aGlzIFJUSS9SVEUuIE90aGVyd2lzZSwK KwkJICogd2UgbmVlZCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgUlRJL1JURSwgYW5kIG11 c3QgYWxzbyBmZXRjaAorCQkgKiB0aGUgcGFydGl0aW9uIHNjaGVtYSBhbmQgbmFtZS4KKwkJICov CisJCXRvcF9ydGkgPSB0b3BfcnRpX21hcFtydGkgLSAxXTsKKwkJaWYgKHJ0aSA9PSB0b3BfcnRp KQorCQkJdG9wX3J0ZSA9IHJ0ZTsKKwkJZWxzZQorCQl7CisJCQl0b3BfcnRlID0gcnRfZmV0Y2go dG9wX3J0aSwgcHN0bXQtPnJ0YWJsZSk7CisJCQlwYXJ0bnNwID0KKwkJCQlnZXRfbmFtZXNwYWNl X25hbWVfb3JfdGVtcChnZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7CisJCQlwYXJ0cmVs ID0gZ2V0X3JlbF9uYW1lKHJ0ZS0+cmVsaWQpOworCQl9CisKKwkJLyogQ29tcHV0ZSB0aGUgY29y cmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwkJb2NjdXJyZW5jZSA9IHBncGFfb2NjdXJyZW5j ZV9udW1iZXIocHN0bXQtPnJ0YWJsZSwgdG9wX3J0aV9tYXAsCisJCQkJCQkJCQkJCXJ0aW5mbywg dG9wX3J0aSk7CisKKwkJLyogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHBsYW4gKE5VTEwg Zm9yIHRvcGxldmVsIHF1ZXJ5KS4gKi8KKwkJcGxhbl9uYW1lID0gcnRpbmZvID09IE5VTEwgPyBO VUxMIDogcnRpbmZvLT5wbGFuX25hbWU7CisKKwkJLyogU2F2ZSBhbGwgdGhlIGRldGFpbHMgd2Un dmUgZGVyaXZlZC4gKi8KKwkJcmlkID0gJnJlc3VsdFtydGkgLSAxXTsKKwkJcmlkLT5hbGlhc19u YW1lID0gdG9wX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lOworCQlyaWQtPm9jY3VycmVuY2UgPSBvY2N1 cnJlbmNlOworCQlyaWQtPnBhcnRuc3AgPSBwYXJ0bnNwOworCQlyaWQtPnBhcnRyZWwgPSBwYXJ0 cmVsOworCQlyaWQtPnBsYW5fbmFtZSA9IHBsYW5fbmFtZTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0 OworfQorCisvKgorICogU2VhcmNoIGZvciBhIHBncGFfaWRlbnRpZmllciBpbiB0aGUgYXJyYXkg b2YgaWRlbnRpZmllcnMgY29tcHV0ZWQgZm9yIHRoZQorICogcmFuZ2UgdGFibGUuIElmIGV4YWN0 bHkgb25lIG1hdGNoIGlzIGZvdW5kLCByZXR1cm4gdGhlIG1hdGNoaW5nIFJUSTsgZWxzZQorICog cmV0dXJuIDAuCisgKi8KK0luZGV4CitwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihp bnQgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJcmVzdWx0ID0g MDsKKworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7ICsrcnRpKQor CXsKKwkJcGdwYV9pZGVudGlmaWVyICpydGlfcmlkID0gJnJ0X2lkZW50aWZpZXJzW3J0aSAtIDFd OworCisJCS8qIElmIHRoZXJlJ3Mgbm8gaWRlbnRpZmllciBmb3IgdGhpcyBSVEksIHNraXAgaXQu ICovCisJCWlmIChydGlfcmlkLT5hbGlhc19uYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKwor CQkvKgorCQkgKiBJZiBpdCBtYXRjaGVzLCByZXR1cm4gdGhpcyBSVEkuIEFzIHVzdWFsLCBhbiBv bWl0dGVkIHBhcnRpdGlvbgorCQkgKiBzY2hlbWEgbWF0Y2hlcyBhbnl0aGluZywgYnV0IHBhcnRp dGlvbiBhbmQgcGxhbiBuYW1lcyBtdXN0IGVpdGhlcgorCQkgKiBtYXRjaCBleGFjdGx5IG9yIGJl IG9taXR0ZWQgb24gYm90aCBzaWRlcy4KKwkJICovCisJCWlmIChzdHJjbXAocmlkLT5hbGlhc19u YW1lLCBydGlfcmlkLT5hbGlhc19uYW1lKSA9PSAwICYmCisJCQlyaWQtPm9jY3VycmVuY2UgPT0g cnRpX3JpZC0+b2NjdXJyZW5jZSAmJgorCQkJKHJpZC0+cGFydG5zcCA9PSBOVUxMIHx8IHJ0aV9y aWQtPnBhcnRuc3AgPT0gTlVMTCB8fAorCQkJIHN0cmNtcChyaWQtPnBhcnRuc3AsIHJ0aV9yaWQt PnBhcnRuc3ApID09IDApICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBh cnRyZWwsIHJ0aV9yaWQtPnBhcnRyZWwpICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVs bChyaWQtPnBsYW5fbmFtZSwgcnRpX3JpZC0+cGxhbl9uYW1lKSkKKwkJeworCQkJaWYgKHJlc3Vs dCAhPSAwKQorCQkJeworCQkJCS8qIE11bHRpcGxlIG1hdGNoZXMgd2VyZSBmb3VuZC4gKi8KKwkJ CQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJlc3VsdCA9IHJ0aTsKKwkJfQorCX0KKworCXJldHVybiBy ZXN1bHQ7Cit9CisKKy8qCisgKiBCdWlsZCBhIG1hcHBpbmcgZnJvbSBlYWNoIFJUSSB0byB0aGUg UlRJIHdob3NlIGFsaWFzX25hbWUgd2lsbCBiZSB1c2VkIHRvCisgKiBjb25zdHJ1Y3QgdGhlIHJh bmdlIHRhYmxlIGlkZW50aWZpZXIuCisgKgorICogRm9yIGNoaWxkIHJlbGF0aW9ucywgdGhpcyBp cyB0aGUgdG9wbW9zdCBwYXJlbnQgdGhhdCBpcyBzdGlsbCBvZiB0eXBlCisgKiBSVEVfUkVMQVRJ T04uIEZvciBvdGhlciByZWxhdGlvbnMsIGl0J3MganVzdCB0aGUgb3JpZ2luYWwgUlRJLgorICoK KyAqIFNpbmNlIHdlJ3JlIGV2ZW50dWFsbHkgZ29pbmcgdG8gbmVlZCB0aGlzIGluZm9ybWF0aW9u IGZvciBldmVyeSBSVEkgaW4KKyAqIHRoZSByYW5nZSB0YWJsZSwgaXQncyBiZXN0IHRvIGNvbXB1 dGUgYWxsIHRoZSBhbnN3ZXJzIGluIGEgc2luZ2xlIHBhc3Mgb3ZlcgorICogdGhlIEFwcGVuZFJl bEluZm8gbGlzdC4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBlbmQgdXAgc2VhcmNoaW5nIHRocm91Z2gg dGhhdAorICogbGlzdCByZXBlYXRlZGx5IGZvciBlbnRyaWVzIG9mIGludGVyZXN0LgorICoKKyAq IE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgdXNlcyB6ZXJvLWJhc2VkIGluZGV4aW5n LCB3aGlsZSBSVElzIHVzZQorICogMS1iYXNlZCBpbmRleGluZywgc28gc3VidHJhY3QgMSBmcm9t IHRoZSBSVEkgYmVmb3JlIGxvb2tpbmcgaXQgdXAgaW4gdGhlCisgKiBhcnJheS4KKyAqLworc3Rh dGljIEluZGV4ICoKK3BncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0YWJsZV9sZW5ndGgs IExpc3QgKnJ0YWJsZSwgTGlzdCAqYXBwaW5mb3MpCit7CisJSW5kZXgJICAgKnRvcF9ydGlfbWFw ID0gcGFsbG9jMF9hcnJheShJbmRleCwgcnRhYmxlX2xlbmd0aCk7CisKKwkvKiBJbml0aWFsbHks IG1ha2UgZXZlcnkgUlRJIHBvaW50IHRvIGl0c2VsZi4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9IDE7 IHJ0aSA8PSBydGFibGVfbGVuZ3RoOyArK3J0aSkKKwkJdG9wX3J0aV9tYXBbcnRpIC0gMV0gPSBy dGk7CisKKwkvKiBVcGRhdGUgdGhlIG1hcCBmb3IgZWFjaCBBcHBlbmRSZWxJbmZvIG9iamVjdC4g Ki8KKwlmb3JlYWNoX25vZGUoQXBwZW5kUmVsSW5mbywgYXBwaW5mbywgYXBwaW5mb3MpCisJewor CQlJbmRleAkJcGFyZW50X3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwkJUmFuZ2VUYmxF bnRyeSAqcGFyZW50X3J0ZSA9IHJ0X2ZldGNoKHBhcmVudF9ydGksIHJ0YWJsZSk7CisKKwkJLyog SWYgdGhlIHBhcmVudCBpcyBub3QgUlRFX1JFTEFUSU9OLCBpZ25vcmUgdGhpcyBlbnRyeS4gKi8K KwkJaWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJY29udGludWU7 CisKKwkJLyoKKwkJICogTWFwIHRoZSBjaGlsZCB0byB3aGVyZXZlciB3ZSBtYXBwZWQgdGhlIHBh cmVudC4gUGFyZW50cyBhbHdheXMKKwkJICogcHJlY2VkZSB0aGVpciBjaGlsZHJlbiBpbiB0aGUg QXBwZW5kUmVsSW5mbyBsaXN0LCBzbyB0aGlzIHNob3VsZAorCQkgKiB3b3JrIG91dC4KKwkJICov CisJCXRvcF9ydGlfbWFwW2FwcGluZm8tPmNoaWxkX3JlbGlkIC0gMV0gPSB0b3BfcnRpX21hcFtw YXJlbnRfcnRpIC0gMV07CisJfQorCisJcmV0dXJuIHRvcF9ydGlfbWFwOworfQorCisvKgorICog RmluZCB0aGUgb2NjdXJlbmNlIG51bWJlciBvZiBhIGNlcnRhaW4gcmVsYXRpb24gd2l0aGluIGEg Y2VydGFpbiBzdWJxdWVyeS4KKyAqCisgKiBUaGUgc2FtZSBhbGlhcyBuYW1lIGNhbiBvY2N1ciBt dWx0aXBsZSB0aW1lcyB3aXRoaW4gYSBzdWJxdWVyeSwgYnV0IHdlIHdhbnQKKyAqIHRvIGRpc2Ft YmlndWF0ZSBieSBnaXZpbmcgZGlmZmVyZW50IG9jY3VycmVuY2VzIGRpZmZlcmVudCBpbnRlZ2Vy IGluZGV4ZXMuCisgKiBIb3dldmVyLCBjaGlsZCB0YWJsZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkg aW5jbHVkaW5nIHRoZSB0YWJsZSBuYW1lIHJhdGhlcgorICogdGhhbiBieSBpbmNyZW1lbnRpbmcg dGhlIG9jY3VycmVuY2UgbnVtYmVyOyBhbmQgam9pbnMgYXJlIG5vdCBuYW1lZCBhbmQgc28KKyAq IHNob3VsZG4ndCBpbmNyZW1lbnQgdGhlIG9jY3VyZW5jZSBudW1iZXIgZWl0aGVyLgorICovCitz dGF0aWMgaW50CitwZ3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXggKnRv cF9ydGlfbWFwLAorCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0aSkKK3sK KwlJbmRleAkJcnRvZmZzZXQgPSAocnRpbmZvID09IE5VTEwpID8gMCA6IHJ0aW5mby0+cnRvZmZz ZXQ7CisJaW50CQkJb2NjdXJyZW5jZSA9IDE7CisJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0 Y2gocnRpLCBydGFibGUpOworCisJZm9yIChJbmRleCBwcmlvcl9ydGkgPSBydG9mZnNldCArIDE7 IHByaW9yX3J0aSA8IHJ0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRibEVudHJ5ICpwcmlv cl9ydGU7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGNoaWxkIHJlbCBvZiBhIHBhcmVudCB0 aGF0IGlzIGEgcmVsYXRpb24sIHNraXAgaXQuCisJCSAqCisJCSAqIFN1Y2ggcmFuZ2UgdGFibGUg ZW50cmllcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBtZW50aW9uaW5nIHRoZSBzY2hlbWEKKwkJICog YW5kIG5hbWUgb2YgdGhlIHRhYmxlLCBub3QgYnkgY291bnRpbmcgdGhlbSBhcyBzZXBhcmF0ZSBv Y2N1cnJlbmNlcworCQkgKiBvZiB0aGUgc2FtZSB0YWJsZS4KKwkJICovCisJCWlmICh0b3BfcnRp X21hcFtwcmlvcl9ydGkgLSAxXSAhPSBwcmlvcl9ydGkpCisJCQlicmVhazsKKworCQkvKiBTa2lw IGpvaW5zLiAqLworCQlwcmlvcl9ydGUgPSBydF9mZXRjaChwcmlvcl9ydGksIHJ0YWJsZSk7CisJ CWlmIChwcmlvcl9ydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkv KiBTa2lwIGlmIHRoZSBhbGlhcyBuYW1lIGRpZmZlcnMuICovCisJCWlmIChzdHJjbXAocHJpb3Jf cnRlLT5lcmVmLT5hbGlhc25hbWUsIHJ0ZS0+ZXJlZi0+YWxpYXNuYW1lKSAhPSAwKQorCQkJY29u dGludWU7CisKKwkJLyogTG9va3MgbGlrZSBhIHRydWUgZHVwbGljYXRlLiAqLworCQkrK29jY3Vy cmVuY2U7CisJfQorCisJcmV0dXJuIG9jY3VycmVuY2U7Cit9CmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2lkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uYjAwMGQyYjcwODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfaWRlbnRpZmllci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfaWRlbnRpZmllci5oCisgKgkgIGNyZWF0ZSBhcHByb3ByaWF0ZSBpZGVudGlm aWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0y MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKyNpZm5kZWYgUEdQQV9JREVOVElGSUVSX0gKKyNkZWZpbmUgUEdQQV9JREVOVElG SUVSX0gKKworI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3Bs YW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2lkZW50aWZpZXIKK3sKKwljb25zdCBj aGFyICphbGlhc19uYW1lOworCWludAkJCW9jY3VycmVuY2U7CisJY29uc3QgY2hhciAqcGFydG5z cDsKKwljb25zdCBjaGFyICpwYXJ0cmVsOworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30gcGdw YV9pZGVudGlmaWVyOworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHBv c3NpYmx5LU5VTEwgc3RyaW5ncy4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorc3RyaW5nc19lcXVh bF9vcl9ib3RoX251bGwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwlpZiAoYSA9 PSBiKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmIChhID09IE5VTEwgfHwgYiA9PSBOVUxMKQor CQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gc3RyY21wKGEsIGIpID09IDA7Cit9CisK K2V4dGVybiBjb25zdCBjaGFyICpwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBncGFfaWRl bnRpZmllciAqcmlkKTsKK2V4dGVybiB2b2lkIHBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0 aShQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcnRpLAorCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRp ZmllciAqcmlkKTsKK2V4dGVybiBpbnQJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlk cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxpZHMsCisJ CQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkcyk7CitleHRlcm4gcGdwYV9pZGVudGlm aWVyICpwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KFBsYW5uZWRTdG10 ICpwc3RtdCk7CisKK2V4dGVybiBJbmRleCBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmll cihpbnQgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lk ZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uODhmNTMyNzg4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfam9pbi5jCkBAIC0wLDAgKzEsNjE1IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBwZ3BhX2pvaW4uYworICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQbGFuIHRy ZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9p bi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgi CisKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKyNpbmNs dWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCisjaW5j bHVkZSAibm9kZXMvcHJpbnQuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisKKy8q CisgKiBUZW1wb3Jhcnkgb2JqZWN0IHVzZWQgd2hlbiB1bnJvbGxpbmcgYSBqb2luIHRyZWUuCisg Ki8KK3N0cnVjdCBwZ3BhX2pvaW5fdW5yb2xsZXIKK3sKKwl1bnNpZ25lZAluYWxsb2NhdGVkOwor CXVuc2lnbmVkCW51c2VkOworCVBsYW4JICAgKm91dGVyX3N1YnBsYW47CisJRWxpZGVkTm9kZSAq b3V0ZXJfZWxpZGVkX25vZGU7CisJYm9vbAkJb3V0ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyOworCXBn cGFfam9pbl9zdHJhdGVneSAqc3RyYXRlZ3k7CisJUGxhbgkgICoqaW5uZXJfc3VicGxhbnM7CisJ RWxpZGVkTm9kZSAqKmlubmVyX2VsaWRlZF9ub2RlczsKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKipp bm5lcl91bnJvbGxlcnM7CisJYm9vbAkgICAqaW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyOworfTsK Kworc3RhdGljIHBncGFfam9pbl9zdHJhdGVneSBwZ3BhX2RlY29tcG9zZV9qb2luKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgIFBsYW4gKnBsYW4sCisJCQkJ CQkJCQkJCSAgUGxhbiAqKnJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBQbGFuICoqcmVhbGlubmVy LAorCQkJCQkJCQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsCisJCQkJCQkJCQkJ CSAgRWxpZGVkTm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJCQkJCQkJICBib29sICpmb3Vu ZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9pbm5lcl9n YXRoZXIpOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2VuZF9ub2RlKFBsYW5uZWRTdG10 ICpwc3RtdCwgUGxhbiAqKnBsYW4pOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2VuZF9h bnlfZ2F0aGVyKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJCQkJICAg Ym9vbCAqZm91bmRfYW55X2dhdGhlcik7CitzdGF0aWMgYm9vbCBwZ3BhX2Rlc2NlbmRfYW55X3Vu aXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJCQkJRWxpZGVkTm9k ZSAqKmVsaWRlZF9ub2RlKTsKKworc3RhdGljIGJvb2wgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGls ZChQbGFuICpwbGFuKTsKK3N0YXRpYyBib29sIGlzX3NvcnRpbmdfcGxhbihQbGFuICpwbGFuKTsK KworLyoKKyAqIENyZWF0ZSBhbiBpbml0aWFsbHktZW1wdHkgb2JqZWN0IGZvciB1bnJvbGxpbmcg am9pbnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgaGVscGVyIG9iamVjdCB0aGF0 IGNhbiBsYXRlciBiZSB1c2VkIHRvIGNyZWF0ZSBhCisgKiBwZ3BhX3Vucm9sbGVkX2pvaW4sIGFm dGVyIGZpcnN0IGNhbGxpbmcgcGdwYV91bnJvbGxfam9pbiBvbmUgb3IgbW9yZSB0aW1lcy4KKyAq LworcGdwYV9qb2luX3Vucm9sbGVyICoKK3BncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIodm9pZCkK K3sKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXI7CisKKwlqb2luX3Vucm9sbGVy ID0gcGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3Vucm9sbGVyKTsKKwlqb2luX3Vucm9sbGVyLT5u YWxsb2NhdGVkID0gNDsKKwlqb2luX3Vucm9sbGVyLT5zdHJhdGVneSA9CisJCXBhbGxvY19hcnJh eShwZ3BhX2pvaW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5f dW5yb2xsZXItPmlubmVyX3N1YnBsYW5zID0KKwkJcGFsbG9jX2FycmF5KFBsYW4gKiwgam9pbl91 bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVz ID0KKwkJcGFsbG9jX2FycmF5KEVsaWRlZE5vZGUgKiwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRl ZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzID0KKwkJcGFsbG9jX2FycmF5KHBn cGFfam9pbl91bnJvbGxlciAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vu cm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQlwYWxsb2NfYXJyYXkoYm9vbCwg am9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisKKwlyZXR1cm4gam9pbl91bnJvbGxlcjsKK30K KworLyoKKyAqIFVucm9sbCBvbmUgbGV2ZWwgb2YgYW4gdW5yb2xsYWJsZSBqb2luIHRyZWUuCisg KgorICogT3VyIGJhc2ljIGdvYWwgaGVyZSBpcyB0byB1bnJvbGwgam9pbiB0cmVlcyBhcyB0aGV5 IG9jY3VyIGluIHRoZSBQbGFuCisgKiB0cmVlIGludG8gYSBzaW1wbGVyIGFuZCBtb3JlIHJlZ3Vs YXIgc3RydWN0dXJlIHRoYXQgd2UgY2FuIG1vcmUgZWFzaWx5CisgKiB1c2UgZm9yIGZ1cnRoZXIg cHJvY2Vzc2luZy4gVW5yb2xsaW5nIGlzIG91dGVyLWRlZXAsIHNvIGlmIHRoZSBwbGFuIHRyZWUK KyAqIGhhcyBKb2luMShKb2luMihBLEIpLEpvaW4zKEMsRCkpLCB0aGUgc2FtZSBqb2luIHVucm9s bGVyIG9iamVjdCBzaG91bGQgYmUKKyAqIHVzZWQgZm9yIEpvaW4xIGFuZCBKb2luMiwgYnV0IGEg ZGlmZmVyZW50IG9uZSB3aWxsIGJlIG5lZWRlZCBmb3IgSm9pbjMsCisgKiBzaW5jZSB0aGF0IGlu dm9sdmVzIGEgam9pbiB3aXRoaW4gdGhlICppbm5lciogc2lkZSBvZiBhbm90aGVyIGpvaW4uCisg KgorICogcGdwYV9wbGFuX3dhbGtlciBjcmVhdGVzIGEgInRvcCBsZXZlbCIgam9pbiB1bnJvbGxl ciBvYmplY3Qgd2hlbiBpdAorICogZW5jb3VudGVycyBhIGpvaW4gaW4gYSBwb3J0aW9uIG9mIHRo ZSBwbGFuIHRyZWUgaW4gd2hpY2ggbm8gam9pbiB1bnJvbGxlcgorICogaXMgYWxyZWFkeSBhY3Rp dmUuIEZyb20gdGhlcmUsIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWlu ZworICogdG8gd2hhdCBwb3J0aW9uIG9mIHRoZSBwbGFuIHRyZWUgdGhhdCBqb2luIHVucm9sbGVy IGFwcGxpZXMsIGFuZCBmb3IKKyAqIGNyZWF0aW5nIGFueSBzdWJvcmRpbmF0ZSBqb2luIHVucm9s bGVyIG9iamVjdHMgdGhhdCBhcmUgbmVlZGVkIGFzIGEgcmVzdWx0CisgKiBvZiBub24tb3V0ZXIt ZGVlcCBqb2luIHRyZWVzLiBXZSBkbyB0aGlzIGJ5IHJldHVybmluZyB0aGUgam9pbiB1bnJvbGxl cgorICogb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBmdXJ0aGVyIHRyYXZlcnNhbCBv ZiB0aGUgb3V0ZXIgYW5kIGlubmVyCisgKiBzdWJ0cmVlcyBvZiB0aGUgY3VycmVudCBwbGFuIG5v ZGUgdmlhICpvdXRlcl9qb2luX3Vucm9sbGVyIGFuZAorICogKmlubmVyX2pvaW5fdW5yb2xsZXIs IHJlc3BlY3RpdmVseS4KKyAqLwordm9pZAorcGdwYV91bnJvbGxfam9pbihwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkgYm9vbCBiZW5lYXRoX2FueV9n YXRoZXIsCisJCQkJIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkgcGdw YV9qb2luX3Vucm9sbGVyICoqb3V0ZXJfam9pbl91bnJvbGxlciwKKwkJCQkgcGdwYV9qb2luX3Vu cm9sbGVyICoqaW5uZXJfam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgc3Ry YXRlZ3k7CisJUGxhbgkgICAqcmVhbGlubmVyLAorCQkJICAgKnJlYWxvdXRlcjsKKwlFbGlkZWRO b2RlICplbGlkZWRpbm5lciwKKwkJCSAgICplbGlkZWRvdXRlcjsKKwlpbnQJCQluOworCWJvb2wJ CWZvdW5kX2FueV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwlib29sCQlmb3VuZF9hbnlfaW5uZXJf Z2F0aGVyID0gZmFsc2U7CisKKwlBc3NlcnQoam9pbl91bnJvbGxlciAhPSBOVUxMKTsKKworCS8q CisJICogV2UgbmVlZCB0byBwYXNzIHRoZSBqb2luX3Vucm9sbGVyIG9iamVjdCBkb3duIHRocm91 Z2ggY2VydGFpbiB0eXBlcyBvZgorCSAqIHBsYW4gbm9kZXMgLS0gYW55dGhpbmcgdGhhdCdzIGNv bnNpZGVyZWQgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneSwgYW5kCisJICogYW55IG90aGVyIG5v ZGVzIHRoYXQgY2FuIG9jY3VyIGluIGEgam9pbiB0cmVlIGRlc3BpdGUgbm90IGJlaW5nIHNjYW5z CisJICogb3Igam9pbnMuCisJICoKKwkgKiBUaGlzIGluY2x1ZGVzOgorCSAqCisJICogKDEpIE1h dGVyaWFsaXplLCBNZW1vaXplLCBhbmQgSGFzaCBub2Rlcywgd2hpY2ggYXJlIHBhcnQgb2YgdGhl IGpvaW4KKwkgKiBzdHJhdGVneSwKKwkgKgorCSAqICgyKSBHYXRoZXIgYW5kIEdhdGhlciBNZXJn ZSBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGF0IGFueSBwb2ludCBpbiB0aGUKKwkgKiBqb2luIHRy ZWUgd2hlcmUgdGhlIHBsYW5uZXIgZGVjaWRlZCB0byBpbml0aWF0ZSBwYXJhbGxlbGlzbSwKKwkg KgorCSAqICgzKSBTb3J0IGFuZCBJbmNyZW1lbnRhbFNvcnQgbm9kZXMsIHdoaWNoIGNhbiBvY2N1 ciBiZW5lYXRoIE1lcmdlSm9pbgorCSAqIG9yIEdhdGhlck1lcmdlLAorCSAqCisJICogKDQpIEFn ZyBhbmQgVW5pcXVlIG5vZGVzLCB3aGljaCBjYW4gb2NjdXIgd2hlbiB3ZSBkZWNpZGUgdG8gbWFr ZSB0aGUKKwkgKiBudWxsYWJsZSBzaWRlIG9mIGEgc2VtaWpvaW4gdW5pcXVlIGFuZCB0aGVuIGpv aW4gdGhlIHJlc3VsdCwgYW5kCisJICoKKwkgKiAoNSkgUmVzdWx0IG5vZGVzIHdpdGggY2hpbGRy ZW4sIHdoaWNoIGNhbiBiZSBhZGRlZCBlaXRoZXIgdG8gcHJvamVjdCB0bworCSAqIGVuZm9yY2Ug YSBvbmUtdGltZSBmaWx0ZXIgKGJ1dCBSZXN1bHQgbm9kZXMgd2l0aG91dCBjaGlsZHJlbiBhcmUK KwkgKiBkZWdlbmVyYXRlIHNjYW5zIG9yIGpvaW5zKS4KKwkgKi8KKwlpZiAoSXNBKHBsYW4sIE1h dGVyaWFsKSB8fCBJc0EocGxhbiwgTWVtb2l6ZSkgfHwgSXNBKHBsYW4sIEhhc2gpCisJCXx8IElz QShwbGFuLCBHYXRoZXIpIHx8IElzQShwbGFuLCBHYXRoZXJNZXJnZSkKKwkJfHwgaXNfc29ydGlu Z19wbGFuKHBsYW4pIHx8IElzQShwbGFuLCBBZ2cpIHx8IElzQShwbGFuLCBVbmlxdWUpCisJCXx8 IGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQocGxhbikpCisJeworCQkqb3V0ZXJfam9pbl91bnJv bGxlciA9IGpvaW5fdW5yb2xsZXI7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdl J3ZlIGFscmVhZHkgaGFuZGxlZCBub2RlcyB0aGF0IHJlcXVpcmUgcGFzcy10aHJvdWdoIHRyZWF0 bWVudCwKKwkgKiB0aGlzIHNob3VsZCBiZSBhbiB1bnJvbGxhYmxlIGpvaW4uCisJICovCisJc3Ry YXRlZ3kgPSBwZ3BhX2RlY29tcG9zZV9qb2luKHdhbGtlciwgcGxhbiwKKwkJCQkJCQkJICAgJnJl YWxvdXRlciwgJnJlYWxpbm5lciwKKwkJCQkJCQkJICAgJmVsaWRlZG91dGVyLCAmZWxpZGVkaW5u ZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkgICAmZm91 bmRfYW55X2lubmVyX2dhdGhlcik7CisKKwkvKiBJZiBvdXIgd29ya3NwYWNlIGlzIGZ1bGwsIGV4 cGFuZCBpdC4gKi8KKwlpZiAoam9pbl91bnJvbGxlci0+bnVzZWQgPj0gam9pbl91bnJvbGxlci0+ bmFsbG9jYXRlZCkKKwl7CisJCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQgKj0gMjsKKwkJam9p bl91bnJvbGxlci0+c3RyYXRlZ3kgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+ c3RyYXRlZ3ksCisJCQkJCQkgICBwZ3BhX2pvaW5fc3RyYXRlZ3ksCisJCQkJCQkgICBqb2luX3Vu cm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMgPQor CQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMsCisJCQkJCQkg ICBQbGFuICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91 bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5y b2xsZXItPmlubmVyX2VsaWRlZF9ub2RlcywKKwkJCQkJCSAgIEVsaWRlZE5vZGUgKiwKKwkJCQkJ CSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9i ZW5lYXRoX2FueV9nYXRoZXIgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5u ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJICAgYm9vbCwKKwkJCQkJCSAgIGpvaW5fdW5y b2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMgPQor CQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzLAorCQkJCQkJ ICAgcGdwYV9qb2luX3Vucm9sbGVyICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2Nh dGVkKTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdlJ3JlIGZsYXR0ZW5pbmcgb3V0ZXItZGVlcCBq b2luIHRyZWVzLCBpdCBmb2xsb3dzIHRoYXQgaWYgdGhlCisJICogb3V0ZXIgc2lkZSBpcyBzdGls bCBhbiB1bnJvbGxhYmxlIGpvaW4sIGl0IHNob3VsZCBiZSB1bnJvbGxlZCBpbnRvIHRoaXMKKwkg KiBzYW1lIG9iamVjdC4gT3RoZXJ3aXNlLCB3ZSd2ZSByZWFjaGVkIHRoZSBsaW1pdCBvZiB3aGF0 IHdlIGNhbiB1bnJvbGwKKwkgKiBpbnRvIHRoaXMgb2JqZWN0IGFuZCBtdXN0IHJlbWVtYmVyIHRo ZSBvdXRlciBzaWRlIGFzIHRoZSBmaW5hbCBvdXRlcgorCSAqIHN1YnBsYW4uCisJICovCisJaWYg KGVsaWRlZG91dGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxvdXRlcikpCisJCSpvdXRl cl9qb2luX3Vucm9sbGVyID0gam9pbl91bnJvbGxlcjsKKwllbHNlCisJeworCQlqb2luX3Vucm9s bGVyLT5vdXRlcl9zdWJwbGFuID0gcmVhbG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5vdXRlcl9l bGlkZWRfbm9kZSA9IGVsaWRlZG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5vdXRlcl9iZW5lYXRo X2FueV9nYXRoZXIgPQorCQkJYmVuZWF0aF9hbnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9vdXRlcl9n YXRoZXI7CisJfQorCisJLyoKKwkgKiBTdG9yZSB0aGUgaW5uZXIgc3VicGxhbi4gSWYgaXQncyBh biB1bnJvbGxhYmxlIGpvaW4sIGl0IG5lZWRzIHRvIGJlCisJICogZmxhdHRlbmVkIGluIHR1cm4s IGJ1dCBpbnRvIGEgbmV3IHVucm9sbGVyIG9iamVjdCwgbm90IHRoaXMgb25lLgorCSAqLworCW4g PSBqb2luX3Vucm9sbGVyLT5udXNlZCsrOworCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5W25dID0g c3RyYXRlZ3k7CisJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNbbl0gPSByZWFsaW5uZXI7 CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzW25dID0gZWxpZGVkaW5uZXI7CisJ am9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW25dID0KKwkJYmVuZWF0aF9h bnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9pbm5lcl9nYXRoZXI7CisJaWYgKGVsaWRlZGlubmVyID09 IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxpbm5lcikpCisJCSppbm5lcl9qb2luX3Vucm9sbGVy ID0gcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcigpOworCWVsc2UKKwkJKmlubmVyX2pvaW5fdW5y b2xsZXIgPSBOVUxMOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1tuXSA9ICppbm5l cl9qb2luX3Vucm9sbGVyOworfQorCisvKgorICogVXNlIHRoZSBkYXRhIHdlJ3ZlIGFjY3VtdWxh dGVkIGluIGEgcGdwYV9qb2luX3Vucm9sbGVyIG9iamVjdCB0byBjb25zdHJ1Y3QKKyAqIGEgcGdw YV91bnJvbGxlZF9qb2luLgorICovCitwZ3BhX3Vucm9sbGVkX2pvaW4gKgorcGdwYV9idWlsZF91 bnJvbGxlZF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJIHBn cGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX3Vucm9sbGVkX2pvaW4g KnVqb2luOworCWludAkJCWk7CisKKwkvKgorCSAqIFdlIHNob3VsZG4ndCBoYXZlIGdvbmUgZXZl biBzbyBmYXIgYXMgdG8gY3JlYXRlIGEgam9pbiB1bnJvbGxlciB1bmxlc3MKKwkgKiB3ZSBmb3Vu ZCBhdCBsZWFzdCBvbmUgdW5yb2xsYWJsZSBqb2luLgorCSAqLworCUFzc2VydChqb2luX3Vucm9s bGVyLT5udXNlZCA+IDApOworCisJLyogQWxsb2NhdGUgcmVzdWx0IHN0cnVjdHVyZXMuICovCisJ dWpvaW4gPSBwYWxsb2MwX29iamVjdChwZ3BhX3Vucm9sbGVkX2pvaW4pOworCXVqb2luLT5uaW5u ZXIgPSBqb2luX3Vucm9sbGVyLT5udXNlZDsKKwl1am9pbi0+c3RyYXRlZ3kgPSBwYWxsb2MwX2Fy cmF5KHBncGFfam9pbl9zdHJhdGVneSwgam9pbl91bnJvbGxlci0+bnVzZWQpOworCXVqb2luLT5p bm5lciA9IHBhbGxvYzBfYXJyYXkocGdwYV9qb2luX21lbWJlciwgam9pbl91bnJvbGxlci0+bnVz ZWQpOworCisJLyogSGFuZGxlIHRoZSBvdXRlcm1vc3Qgam9pbi4gKi8KKwl1am9pbi0+b3V0ZXIu cGxhbiA9IGpvaW5fdW5yb2xsZXItPm91dGVyX3N1YnBsYW47CisJdWpvaW4tPm91dGVyLmVsaWRl ZF9ub2RlID0gam9pbl91bnJvbGxlci0+b3V0ZXJfZWxpZGVkX25vZGU7CisJdWpvaW4tPm91dGVy LnNjYW4gPQorCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+b3V0ZXIucGxhbiwKKwkJ CQkJCXVqb2luLT5vdXRlci5lbGlkZWRfbm9kZSwKKwkJCQkJCWpvaW5fdW5yb2xsZXItPm91dGVy X2JlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkJCXRydWUpOworCisJLyoKKwkgKiBXZSB3YW50IHRo ZSBqb2lucyBmcm9tIHRoZSBkZWVwZXN0IHBhcnQgb2YgdGhlIHBsYW4gdHJlZSB0byBhcHBlYXIK KwkgKiBmaXJzdCBpbiB0aGUgcmVzdWx0IG9iamVjdCwgYnV0IHRoZSBqb2luIHVucm9sbGVyIGFk ZHMgdGhlbSBpbiBleGFjdGx5CisJICogdGhlIHJldmVyc2Ugb2YgdGhhdCBvcmRlciwgc28gd2Ug bmVlZCB0byBmbGlwIHRoZSBvcmRlciBvZiB0aGUgYXJyYXlzCisJICogd2hlbiBjb25zdHJ1Y3Rp bmcgdGhlIGZpbmFsIHJlc3VsdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgam9pbl91bnJvbGxl ci0+bnVzZWQ7ICsraSkKKwl7CisJCWludAkJCWsgPSBqb2luX3Vucm9sbGVyLT5udXNlZCAtIGkg LSAxOworCisJCS8qIENvcHkgc3RyYXRlZ3ksIFBsYW4sIGFuZCBFbGlkZWROb2RlLiAqLworCQl1 am9pbi0+c3RyYXRlZ3lbaV0gPSBqb2luX3Vucm9sbGVyLT5zdHJhdGVneVtrXTsKKwkJdWpvaW4t PmlubmVyW2ldLnBsYW4gPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFuc1trXTsKKwkJdWpv aW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlID0gam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25v ZGVzW2tdOworCisJCS8qCisJCSAqIEZpbGwgaW4gcmVtYWluaW5nIGRldGFpbHMsIHVzaW5nIGVp dGhlciB0aGUgbmVzdGVkIGpvaW4gdW5yb2xsZXIsCisJCSAqIG9yIGJ5IGRlcml2aW5nIHRoZW0g ZnJvbSB0aGUgcGxhbiBhbmQgZWxpZGVkIG5vZGVzLgorCQkgKi8KKwkJaWYgKGpvaW5fdW5yb2xs ZXItPmlubmVyX3Vucm9sbGVyc1trXSAhPSBOVUxMKQorCQkJdWpvaW4tPmlubmVyW2ldLnVucm9s bGVkX2pvaW4gPQorCQkJCXBncGFfYnVpbGRfdW5yb2xsZWRfam9pbih3YWxrZXIsCisJCQkJCQkJ CQkJIGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1trXSk7CisJCWVsc2UKKwkJCXVqb2lu LT5pbm5lcltpXS5zY2FuID0KKwkJCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+aW5u ZXJbaV0ucGxhbiwKKwkJCQkJCQkJdWpvaW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlLAorCQkJCQkJ CQlqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXJbaV0sCisJCQkJCQkJCXRy dWUpOworCX0KKworCXJldHVybiB1am9pbjsKK30KKworLyoKKyAqIEZyZWUgbWVtb3J5IGFsbG9j YXRlZCBmb3IgcGdwYV9qb2luX3Vucm9sbGVyLgorICovCit2b2lkCitwZ3BhX2Rlc3Ryb3lfam9p bl91bnJvbGxlcihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7CisJcGZyZWUo am9pbl91bnJvbGxlci0+c3RyYXRlZ3kpOworCXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX3N1 YnBsYW5zKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMpOworCXBm cmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyk7CisJcGZyZWUoam9pbl91bnJvbGxl cik7Cit9CisKKy8qCisgKiBJZGVudGlmeSB0aGUgam9pbiBzdHJhdGVneSB1c2VkIGJ5IGEgam9p biBhbmQgdGhlICJyZWFsIiBpbm5lciBhbmQgb3V0ZXIKKyAqIHBsYW5zLgorICoKKyAqIEZvciBl eGFtcGxlLCBhIEhhc2ggSm9pbiBhbHdheXMgaGFzIGEgSGFzaCBub2RlIG9uIHRoZSBpbm5lciBz aWRlLCBidXQKKyAqIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgdGhlIHJlYWwgaW5uZXIg aW5wdXQgaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLAorICogbm90IHRoZSBIYXNoIG5vZGUgaXRz ZWxmLgorICoKKyAqIExpa2V3aXNlLCBhIE1lcmdlIEpvaW4gbWF5IGhhdmUgU29ydCBub3RlIG9u IHRoZSBpbm5lciBvciBvdXRlciBzaWRlOyBpZgorICogaXQgZG9lcywgdGhlIHJlYWwgaW5wdXQg dG8gdGhlIGpvaW4gaXMgdGhlIFNvcnQgbm9kZSdzIGNoaWxkLCBub3QgdGhlCisgKiBTb3J0IG5v ZGUgaXRzZWxmLgorICoKKyAqIEluIGFkZGl0aW9uLCB3aXRoIGEgTWVyZ2UgSm9pbiBvciBhIE5l c3RlZCBMb29wLCB0aGUgam9pbiBwbGFubmluZyBjb2RlCisgKiBtYXkgYWRkIGFkZGl0aW9uYWwg bm9kZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBvciBNZW1vaXplLiBXZSByZWdhcmQgdGhlc2UKKyAq IGFzIGFuIGFzcGVjdCBvZiB0aGUgam9pbiBzdHJhdGVneS4gQXMgaW4gdGhlIHByZXZpb3VzIGNh c2VzLCB0aGUgdHJ1ZSBpbnB1dAorICogdG8gdGhlIGpvaW4gaXMgdGhlIHVuZGVybHlpbmcgbm9k ZS4KKyAqCisgKiBIb3dldmVyLCBpZiBhbnkgaW52b2x2ZWQgY2hpbGQgbm9kZSBwcmV2aW91c2x5 IGhhZCBhIG5vdy1lbGlkZWQgbm9kZSBzdGFja2VkCisgKiBvbiB0b3AsIHRoZW4gd2UgY2FuJ3Qg Imxvb2sgdGhyb3VnaCIgdGhhdCBub2RlIC0tIGluZGVlZCwgd2hhdCdzIGdvaW5nIHRvIGJlCisg KiByZWxldmFudCBmb3Igb3VyIHB1cnBvc2VzIGlzIHRoZSBFbGlkZWROb2RlIG9uIHRvcCBvZiB0 aGF0IHBsYW4gbm9kZSwgcmF0aGVyCisgKiB0aGFuIHRoZSBwbGFuIG5vZGUgaXRzZWxmLgorICoK KyAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGlkZWQgbm9kZXMsIHdlIHdhbnQgdGhhdCBvbmUg dGhhdCB3b3VsZCBoYXZlIGJlZW4KKyAqIHVwcGVybW9zdCBpbiB0aGUgcGxhbiB0cmVlIHByaW9y IHRvIHNldHJlZnMgcHJvY2Vzc2luZzsgd2UgZXhwZWN0IHRvIGZpbmQKKyAqIHRoYXQgb25lIGxh c3QgaW4gdGhlIGxpc3Qgb2YgZWxpZGVkIG5vZGVzLgorICoKKyAqIE9uIHJldHVybiAqcmVhbG91 dGVyIGFuZCAqcmVhbGlubmVyIHdpbGwgaGF2ZSBiZWVuIHNldCB0byB0aGUgcmVhbCBpbm5lcgor ICogYW5kIHJlYWwgb3V0ZXIgcGxhbnMgdGhhdCB3ZSBpZGVudGlmaWVkLCBhbmQgKmVsaWRlZHJl YWxvdXRlciBhbmQKKyAqICplbGlkZWRyZWFsaW5uZXIgdG8gdGhlIGxhc3Qgb2YgYW55IGNvcnJl c3BvZGluZyBlbGlkZWQgbm9kZXMuCisgKiBBZGRpdGlvbmFsbHksICpmb3VuZF9hbnlfb3V0ZXJf Z2F0aGVyIGFuZCAqZm91bmRfYW55X2lubmVyX2dhdGhlciB3aWxsCisgKiBiZSBzZXQgdG8gdHJ1 ZSBpZiB3ZSBsb29rZWQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSBvbgor ICogdGhhdCBzaWRlIG9mIHRoZSBqb2luLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0 aWMgcGdwYV9qb2luX3N0cmF0ZWd5CitwZ3BhX2RlY29tcG9zZV9qb2luKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQlQbGFuICoqcmVhbG91dGVyLCBQ bGFuICoqcmVhbGlubmVyLAorCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkcmVhbG91dGVyLCBFbGlk ZWROb2RlICoqZWxpZGVkcmVhbGlubmVyLAorCQkJCQlib29sICpmb3VuZF9hbnlfb3V0ZXJfZ2F0 aGVyLCBib29sICpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKQoreworCVBsYW5uZWRTdG10ICpwc3Rt dCA9IHdhbGtlci0+cHN0bXQ7CisJSm9pblR5cGUJam9pbnR5cGUgPSAoKEpvaW4gKikgcGxhbikt PmpvaW50eXBlOworCVBsYW4JICAgKm91dGVycGxhbiA9IHBsYW4tPmxlZnR0cmVlOworCVBsYW4J ICAgKmlubmVycGxhbiA9IHBsYW4tPnJpZ2h0dHJlZTsKKwlFbGlkZWROb2RlICplbGlkZWRvdXRl cjsKKwlFbGlkZWROb2RlICplbGlkZWRpbm5lcjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRl Z3k7CisJYm9vbAkJdW5pcXVlb3V0ZXI7CisJYm9vbAkJdW5pcXVlaW5uZXI7CisKKwllbGlkZWRv dXRlciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgb3V0ZXJwbGFuKTsKKwllbGlkZWRp bm5lciA9IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgaW5uZXJwbGFuKTsKKwkqZm91bmRf YW55X291dGVyX2dhdGhlciA9IGZhbHNlOworCSpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyID0gZmFs c2U7CisKKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfTWVyZ2VKb2luOgor CisJCQkvKgorCQkJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0 ZXJpYWwgbm9kZSBvbiB0aGUKKwkJCSAqIGlubmVyIHNpZGUgb2YgdGhlIE1lcmdlSm9pbjsgaWYg dGhpcyBpcyBwcmVzZW50LCB3ZSByZWNvcmQgaXQKKwkJCSAqIGFzIHBhcnQgb2YgdGhlIGpvaW4g c3RyYXRlZ3kuCisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShpbm5l cnBsYW4sIE1hdGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9u b2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpTVFJBVF9NRVJHRV9KT0lO X01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01FUkdF X0pPSU5fUExBSU47CisKKwkJCS8qCisJCQkgKiBGb3IgYSBNZXJnZUpvaW4sIGVpdGhlciB0aGUg b3V0ZXIgb3IgdGhlIGlubmVyIHN1YnBsYW4sIG9yCisJCQkgKiBib3RoLCBtYXkgaGF2ZSBuZWVk ZWQgdG8gYmUgc29ydGVkOyB3ZSBtdXN0IGRpc3JlZ2FyZCBhbnkgU29ydAorCQkJICogb3IgSW5j cmVtZW50YWxTb3J0IG5vZGUgdG8gZmluZCB0aGUgcmVhbCBpbm5lciBvciBvdXRlcgorCQkJICog c3VicGxhbi4KKwkJCSAqLworCQkJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNfc29ydGlu Z19wbGFuKG91dGVycGxhbikpCisJCQkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShw c3RtdCwgJm91dGVycGxhbik7CisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBpc19zb3J0 aW5nX3BsYW4oaW5uZXJwbGFuKSkKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2Rl KHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9OZXN0TG9vcDoKKwor CQkJLyoKKwkJCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBwbGFjZSBhIE1hdGVy aWFsIG9yIE1lbW9pemUgbm9kZQorCQkJICogb24gdGhlIGlubmVyIHNpZGUgb2YgdGhlIE5lc3RM b29wOyBpZiB0aGlzIGlzIHByZXNlbnQsIHdlCisJCQkgKiByZWNvcmQgaXQgYXMgcGFydCBvZiB0 aGUgam9pbiBzdHJhdGVneS4KKwkJCSAqLworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYg SXNBKGlubmVycGxhbiwgTWF0ZXJpYWwpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9k ZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05F U1RFRF9MT09QX01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZSBpZiAoZWxpZGVkaW5uZXIgPT0g TlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBNZW1vaXplKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9 IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpT VFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5ID0g SlNUUkFUX05FU1RFRF9MT09QX1BMQUlOOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0hhc2hKb2lu OgorCisJCQkvKgorCQkJICogVGhlIGlubmVyIHN1YnBsYW4gb2YgYSBIYXNoSm9pbiBpcyBhbHdh eXMgYSBIYXNoIG5vZGU7IHRoZSByZWFsCisJCQkgKiBpbm5lciBzdWJwbGFuIGlzIHRoZSBIYXNo IG5vZGUncyBjaGlsZC4KKwkJCSAqLworCQkJQXNzZXJ0KElzQShpbm5lcnBsYW4sIEhhc2gpKTsK KwkJCUFzc2VydChlbGlkZWRpbm5lciA9PSBOVUxMKTsKKwkJCWVsaWRlZGlubmVyID0gcGdwYV9k ZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJc3RyYXRlZ3kgPSBKU1RSQVRfSEFT SF9KT0lOOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29n bml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCX0KKworCS8qCisJ ICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgZGVjaWRlZCB0byBpbXBsZW1lbnQgYSBzZW1pam9pbiBi eSBmaXJzdCBtYWtpbmcKKwkgKiB0aGUgbnVsbGFibGUgc2lkZSBvZiB0aGUgcGxhbiB1bmlxdWUs IGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBub3JtYWwgam9pbgorCSAqIGFnYWluc3QgdGhlIHJlc3Vs dC4gVGhlcmVmb3JlLCB3ZSBtaWdodCBuZWVkIHRvIGRlc2NlbmQgdGhyb3VnaCBhCisJICogdW5p cXVlIG5vZGUgb24gZWl0aGVyIHNpZGUgb2YgdGhlIHBsYW4uCisJICovCisJdW5pcXVlb3V0ZXIg PSBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJm91dGVycGxhbiwgJmVsaWRlZG91dGVy KTsKKwl1bmlxdWVpbm5lciA9IHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmaW5uZXJw bGFuLCAmZWxpZGVkaW5uZXIpOworCisJLyoKKwkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBkZWNp ZGVkIHRvIHBhcmFsbGVsaXplIHBhcnQgb2YgdGhlIGpvaW4gdHJlZSwgc28KKwkgKiB3ZSBjb3Vs ZCBmaW5kIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIGhlcmUuIE5vdGUgdGhhdCwgaWYK KwkgKiBwcmVzZW50LCB0aGlzIHdpbGwgYXBwZWFyIGJlbG93IG5vZGVzIHdlIGNvbnNpZGVyZWQg YXMgcGFydCBvZiB0aGUgam9pbgorCSAqIHN0cmF0ZWd5LCBidXQgd2UgY291bGQgZmluZCBhbm90 aGVyIHVuaXF1ZW5lc3MtZW5mb3JjaW5nIG5vZGUgYmVsb3cgdGhlCisJICogR2F0aGVyIG9yIEdh dGhlciBNZXJnZSwgaWYgcHJlc2VudC4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCkK Kwl7CisJCWVsaWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIocHN0bXQsICZvdXRl cnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X291dGVyX2dhdGhlcik7CisJCWlmIChmb3Vu ZF9hbnlfb3V0ZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwg Jm91dGVycGxhbiwgJmVsaWRlZG91dGVyKSkKKwkJCXVuaXF1ZW91dGVyID0gdHJ1ZTsKKwl9CisJ aWYgKGVsaWRlZGlubmVyID09IE5VTEwpCisJeworCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2Vu ZF9hbnlfZ2F0aGVyKHBzdG10LCAmaW5uZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZvdW5kX2FueV9p bm5lcl9nYXRoZXIpOworCQlpZiAoZm91bmRfYW55X2lubmVyX2dhdGhlciAmJgorCQkJcGdwYV9k ZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRpbm5lcikpCisJCQl1 bmlxdWVpbm5lciA9IHRydWU7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgUmVz dWx0IG5vZGUgaGFzIGJlZW4gaW5zZXJ0ZWQgZWl0aGVyIHRvIHByb2plY3QgYQorCSAqIHRhcmdl dCBsaXN0IG9yIHRvIGltcGxlbWVudCBhIG9uZS10aW1lIGZpbHRlci4gSWYgc28sIHdlIGNhbiBk ZXNjZW5kCisJICogdGhyb3VnaHQgaXQuIE5vdGUgdGhhdCBhIHJlc3VsdCBub2RlIHdpdGhvdXQg YSBjaGlsZCB3b3VsZCBiZSBhCisJICogZGVnZW5lcmF0ZSBzY2FuIG9yIGpvaW4sIGFuZCBub3Qg c29tZXRoaW5nIHdlIGNvdWxkIGRlc2NlbmQgdGhyb3VnaC4KKwkgKgorCSAqIFhYWC4gSSBzdXNw ZWN0IGl0J3MgcG9zc2libGUgZm9yIHRoaXMgdG8gaGFwcGVuIGFib3ZlIHRoZSBHYXRoZXIgb3IK KwkgKiBHYXRoZXIgTWVyZ2Ugbm9kZSwgdG9vLCBidXQgYXBwYXJlbnRseSB3ZSBoYXZlIG5vIHRl c3QgY2FzZSBmb3IgdGhhdAorCSAqIHNjZW5hcmlvLgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9 PSBOVUxMICYmIGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQob3V0ZXJwbGFuKSkKKwkJZWxpZGVk b3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJm91dGVycGxhbik7CisJaWYgKGVsaWRl ZGlubmVyID09IE5VTEwgJiYgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChpbm5lcnBsYW4pKQor CQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwor CS8qCisJICogSWYgdGhpcyBpcyBhIHNlbWlqb2luIHRoYXQgd2FzIGNvbnZlcnRlZCB0byBhbiBp bm5lciBqb2luIGJ5IG1ha2luZyBvbmUKKwkgKiBzaWRlIG9yIHRoZSBvdGhlciB1bmlxdWUsIG1h a2UgYSBub3RlIHRoYXQgdGhlIGlubmVyIG9yIG91dGVyIHN1YnBsYW4sCisJICogYXMgYXBwcm9w cmlhdGUsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcXVlcnkgcGxhbiBmZWF0dXJlIHdoZW4gdGhl IG1haW4KKwkgKiB0cmVlIHRyYXZlcnNhbCByZWFjaGVzIGl0LgorCSAqCisJICogQ29udmVyc2Vs eSwgaWYgdGhlIHBsYW5uZXIgY291bGQgaGF2ZSBtYWRlIG9uZSBzaWRlIG9mIHRoZSBqb2luIHVu aXF1ZQorCSAqIGFuZCB0aGVyZWJ5IGNvbnZlcnRlZCBpdCB0byBhbiBpbm5lciBqb2luLCBhbmQg Y2hvc2Ugbm90IHRvIGRvIHNvLCB0aGF0CisJICogaXMgYWxzbyB3b3J0aCBub3RpbmcuCisJICoK KwkgKiBYWFg6IFdlIGFkbWl0IHRvbyBtdWNoIG5vbi11bmlxdWUgYWR2aWNlLCBhcyBpbiB0aGUg Zm9sbG93aW5nIGV4YW1wbGUKKwkgKiBmcm9tIHRoZSByZWdyZXNzaW9uIHRlc3RzOiBFWFBMQUlO IChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKSBERUxFVEUgRlJPTQorCSAqIHBydDFfbCBXSEVSRSBF WElTVFMgKFNFTEVDVCAxIEZST00gaW50NF90YmwsIExBVEVSQUwgKFNFTEVDVAorCSAqIGludDRf dGJsLmYxIEZST00gaW50OF90YmwgTElNSVQgMikgc3MgV0hFUkUgcHJ0MV9sLmMgSVMgTlVMTCku IFdlIGVtaXQKKwkgKiBTRU1JSk9JTl9OT05fVU5JUVVFKChpbnQ0X3RibCBzcykpIGJ1dCBjcmVh dGVfdW5pcXVlX3BhdGgoKSBmYWlscyBpbgorCSAqIHRoaXMgY2FzZSwgc28gdGhlcmUncyBubyBz ai11bmlxdWUgdmVyc2lvbiBwb3NzaWJsZS4KKwkgKgorCSAqIE5COiBUaGlzIGNvZGUgY291bGQg YXBwZWFyIHNsaWdodGx5IGhpZ2hlciB1cCBpbiBpbiB0aGlzIGZ1bmN0aW9uLCBidXQKKwkgKiBu b25lIG9mIHRoZSBub2RlcyB0aHJvdWdoIHdoaWNoIHdlIGp1c3QgZGVzY2VuZGVkIHNob3VsZCBo YXZlCisJICogYXNzb2NpYXRlZCBSVElzLgorCSAqCisJICogTkI6IFRoaXMgc2VlbXMgbGlrZSBh IHNvbWV3aGF0IGhhY2t5IHdheSBvZiBwYXNzaW5nIGluZm9ybWF0aW9uIHVwIHRvCisJICogdGhl IG1haW4gdHJlZSB3YWxrLCBidXQgSSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGJldHRlciBpZGVh LgorCSAqLworCWlmICh1bmlxdWVvdXRlcikKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fs a2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBvdXRlcnBsYW4pOworCWVsc2UgaWYgKGpvaW50 eXBlID09IEpPSU5fUklHSFRfU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUod2Fsa2Vy LCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgb3V0ZXJwbGFuKTsKKwlpZiAodW5pcXVlaW5u ZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX1VO SVFVRSwgaW5uZXJwbGFuKTsKKwllbHNlIGlmIChqb2ludHlwZSA9PSBKT0lOX1NFTUkpCisJCXBn cGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUs IGlubmVycGxhbik7CisKKwkvKiBTZXQgb3V0cHV0IHBhcmFtZXRlcnMuICovCisJKnJlYWxvdXRl ciA9IG91dGVycGxhbjsKKwkqcmVhbGlubmVyID0gaW5uZXJwbGFuOworCSplbGlkZWRyZWFsb3V0 ZXIgPSBlbGlkZWRvdXRlcjsKKwkqZWxpZGVkcmVhbGlubmVyID0gZWxpZGVkaW5uZXI7CisJcmV0 dXJuIHN0cmF0ZWd5OworfQorCisvKgorICogRGVzY2VuZCB0aHJvdWdoIGEgUGxhbiBub2RlIGlu IGEgam9pbiB0cmVlIHRoYXQgdGhlIGNhbGxlciBoYXMgZGV0ZXJtaW5lZAorICogdG8gYmUgaXJy ZWxldmFudC4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJucyB0aGUgbGFzdCBvZiBh bnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcgcGxhbiBub2RlLgorICov CitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfbm9kZShQbGFubmVkU3RtdCAqcHN0 bXQsIFBsYW4gKipwbGFuKQoreworCSpwbGFuID0gKCpwbGFuKS0+bGVmdHRyZWU7CisJcmV0dXJu IHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgKnBsYW4pOworfQorCisvKgorICogRGVzY2Vu ZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBpZiBwcmVzZW50LCBhbmQg YW55IFNvcnQKKyAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIG9jY3VycmluZyB1bmRlciBhIEdh dGhlciBNZXJnZS4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVy ZSBpcyBubyBFbGlkZWROb2RlIHBlcnRhaW5pbmcgdG8KKyAqIHRoZSBpbml0aWFsIHZhbHVlIG9m ICpwbGFuLgorICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0IG9mIGFu eSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUuIFNldHMg KmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlIGlmIGVpdGhlciBHYXRoZXIgb3IKKyAqIEdhdGhlciBN ZXJnZSB3YXMgZm91bmQsIGFuZCBvdGhlcndpc2UgbGVhdmVzIGl0IHVuY2hhbmdlZC4KKyAqLwor c3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxhbm5lZFN0bXQg KnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCWJvb2wgKmZvdW5kX2FueV9nYXRoZXIpCit7CisJ aWYgKElzQSgqcGxhbiwgR2F0aGVyKSkKKwl7CisJCSpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1ZTsK KwkJcmV0dXJuIHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisKKwlpZiAoSXNB KCpwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlFbGlkZWROb2RlICplbGlkZWQgPSBwZ3BhX2Rl c2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJaWYgKGVsaWRlZCA9PSBOVUxMICYmIGlzX3Nv cnRpbmdfcGxhbigqcGxhbikpCisJCQllbGlkZWQgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwg cGxhbik7CisKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4gZWxpZGVkOwor CX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogSWYgKnBsYW4gaXMgYW4gQWdnIG9yIFVu aXF1ZSBub2RlLCB3ZSB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBpdCwgdW5sZXNzCisgKiBpdCBo YXMgYSBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLiBJZiBpdHMgaW1tZWRpYXRlIGNoaWxkIGlz IGEgU29ydCBvcgorICogSW5jcmVtZW50YWxTb3J0LCB3ZSBhbHNvIHdhbnQgdG8gZGVzY2VuZCB0 aHJvdWdoIHRoYXQsIHVubGVzcyBpdCBoYXMgYQorICogY29ycmVzcG9uZGluZyBlbGlkZWQgbm9k ZS4KKyAqCisgKiBPbiBlbnRyeSwgKmVsaWRlZF9ub2RlIG11c3QgYmUgdGhlIGxhc3Qgb2YgYW55 IGVsaWRlZCBub2RlcyBjb3JyZXNwb25kaW5nCisgKiB0byAqcGxhbjsgb24gZXhpdCwgdGhpcyB3 aWxsIHN0aWxsIGJlIHRydWUsIGJ1dCAqcGxhbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQuCisgKgor ICogVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBlbGlkZWQgbm9k ZXMgaXMgdGhhdCBhIHNpbmdsZQorICogam9pbiB0cmVlIGNhbid0IGNyb3NzIHRocm91Z2ggYW55 IHNvcnQgb2YgZWxpZGVkIG5vZGU6IHN1YnF1ZXJpZXMgYXJlCisgKiBwbGFubmVkIHNlcGFyYXRl bHksIGFuZCBwbGFubmluZyBpbnNpZGUgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIGlzCisgKiBz ZXBhcmF0ZSBmcm9tIHBsYW5uaW5nIG91dHNpZGUgb2YgaXQuCisgKgorICogVGhlIHJldHVybiB2 YWx1ZSBpcyB0cnVlIGlmIHdlIGRlc2NlbmQgdGhyb3VnaCBhdCBsZWFzdCBvbmUgbm9kZSwgYW5k CisgKiBvdGhlcndpc2UgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2Rlc2NlbmRfYW55 X3VuaXF1ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJRWxpZGVkTm9k ZSAqKmVsaWRlZF9ub2RlKQoreworCWlmICgqZWxpZGVkX25vZGUgIT0gTlVMTCkKKwkJcmV0dXJu IGZhbHNlOworCisJaWYgKElzQSgqcGxhbiwgQWdnKSB8fCBJc0EoKnBsYW4sIFVuaXF1ZSkpCisJ eworCQkqZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJ aWYgKCplbGlkZWRfbm9kZSA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbigqcGxhbikpCisJCQkq ZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJcmV0dXJu IHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogSXMgdGhpcyBhIFJlc3Vs dCBub2RlIHRoYXQgaGFzIGEgY2hpbGQ/CisgKi8KK3N0YXRpYyBib29sCitpc19yZXN1bHRfbm9k ZV93aXRoX2NoaWxkKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBSZXN1bHQpICYm IHBsYW4tPmxlZnR0cmVlICE9IE5VTEw7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUGxhbiBub2Rl IHdob3NlIHB1cnBvc2UgaXMgcHV0IHRoZSBkYXRhIGluIGEgY2VydGFpbiBvcmRlcj8KKyAqLwor c3RhdGljIGJvb2wKK2lzX3NvcnRpbmdfcGxhbihQbGFuICpwbGFuKQoreworCXJldHVybiBJc0Eo cGxhbiwgU29ydCkgfHwgSXNBKHBsYW4sIEluY3JlbWVudGFsU29ydCk7Cit9CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX2pvaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NGRjNzI5ODZhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfam9pbi5oCkBAIC0wLDAgKzEsMTA1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBw Z3BhX2pvaW4uaAorICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQbGFuIHRyZWVzCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9KT0lOX0gKKyNkZWZpbmUgUEdQQV9K T0lOX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0OwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV9qb2luX3Vucm9sbGVyIHBncGFfam9pbl91bnJvbGxlcjsKK3R5cGVkZWYg c3RydWN0IHBncGFfdW5yb2xsZWRfam9pbiBwZ3BhX3Vucm9sbGVkX2pvaW47CisKKy8qCisgKiBB bHRob3VnaCB0aGVyZSBhcmUgdGhyZWUgbWFpbiBqb2luIHN0cmF0ZWdpZXMsIHdlIHRyeSB0byBj bGFzc2lmeSB0aGluZ3MKKyAqIG1vcmUgcHJlY2lzZWx5IGhlcmU6IG1lcmdlIGpvaW5zIGhhdmUg dGhlIG9wdGlvbiBvZiB1c2luZyBtYXRlcmlhbGl6YXRpb24KKyAqIG9uIHRoZSBpbm5lciBzaWRl LCBhbmQgbmVzdGVkIGxvb3BzIGNhbiB1c2UgZWl0aGVyIG1hdGVyaWFsaXphdGlvbiBvcgorICog bWVtb2l6YXRpb24uCisgKi8KK3R5cGVkZWYgZW51bQoreworCUpTVFJBVF9NRVJHRV9KT0lOX1BM QUlOID0gMCwKKwlKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwlKU1RSQVRfTkVTVEVE X0xPT1BfUExBSU4sCisJSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCUpTVFJBVF9O RVNURURfTE9PUF9NRU1PSVpFLAorCUpTVFJBVF9IQVNIX0pPSU4KKwkvKiB1cGRhdGUgTlVNX1BH UEFfSk9JTl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8KK30gcGdwYV9qb2lu X3N0cmF0ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX0pPSU5fU1RSQVRFR1kJCSgoaW50KSBKU1RS QVRfSEFTSF9KT0lOICsgMSkKKworLyoKKyAqIEluIGFuIG91dGVyLWRlZXAgam9pbiB0cmVlLCBl dmVyeSBtZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiB3aWxsIGJlIGEgc2NhbiwKKyAqIGJ1dCBq b2luIHRyZWVzIHdpdGggb3RoZXIgc2hhcGVzIGNhbiBjb250YWluIHVucm9sbGVkIGpvaW5zLgor ICoKKyAqIFRoZSBwbGFuIG5vZGUgd2Ugc3RvcmUgaGVyZSB3aWxsIGJlIHRoZSBpbm5lciBvciBv dXRlciBjaGlsZCBvZiB0aGUgam9pbgorICogbm9kZSwgYXMgYXBwcm9wcmlhdGUsIGV4Y2VwdCB0 aGF0IHdlIGxvb2sgdGhyb3VnaCBzdWJub2RlcyB0aGF0IHdlIHJlZ2FyZCBhcworICogcGFydCBv ZiB0aGUgam9pbiBtZXRob2QgaXRzZWxmLiBGb3IgaW5zdGFuY2UsIGZvciBhIE5lc3RlZCBMb29w IHRoYXQKKyAqIG1hdGVyaWFsaXplcyB0aGUgaW5uZXIgaW5wdXQsIHdlJ2xsIHN0b3JlIHRoZSBj aGlsZCBvZiB0aGUgTWF0ZXJpYWxpemUgbm9kZSwKKyAqIG5vdCB0aGUgTWF0ZXJpYWxpemUgbm9k ZSBpdHNlbGYuCisgKgorICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBvbmUgb3IgbW9y ZSBub2RlcyBmcm9tIHRoZSBwbGFuIHRyZWUsIHRoZW4KKyAqIHdlJ2xsIHN0b3JlIGRldGFpbHMg YWJvdXQgdGhlIHRvcG1vc3Qgb2YgdGhvc2UgaW4gZWxpZGVkX25vZGU7IG90aGVyd2lzZSwKKyAq IGl0IHdpbGwgYmUgTlVMTC4KKyAqCisgKiBFeGFjdGx5IG9uZSBvZiBzY2FuIGFuZCB1bnJvbGxl ZF9qb2luIHdpbGwgYmUgbm9uLU5VTEwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUGxhbgkg ICAqcGxhbjsKKwlFbGlkZWROb2RlICplbGlkZWRfbm9kZTsKKwlzdHJ1Y3QgcGdwYV9zY2FuICpz Y2FuOworCXBncGFfdW5yb2xsZWRfam9pbiAqdW5yb2xsZWRfam9pbjsKK30gcGdwYV9qb2luX21l bWJlcjsKKworLyoKKyAqIFdlIGNvbnZlcnQgb3V0ZXItZGVlcCBqb2luIHRyZWVzIHRvIGEgZmxh dCBzdHJ1Y3R1cmU7IHRoYXQgaXMsICgoQSBKT0lOIEIpCisgKiBKT0lOIEMpIEpPSU4gRCBnZXRz IGNvbnZlcnRlZCB0byBvdXRlciA9IEEsIGlubmVyID0gPEIgQyBEPi4gIFdoZW4gam9pbnMKKyAq IGFyZW4ndCBvdXRlci1kZWVwLCBzdWJzdHJ1Y3R1cmUgaXMgcmVxdWlyZWQsIGUuZy4gKEEgSk9J TiBCKSBKT0lOIChDIEpPSU4gRCkKKyAqIGlzIHJlcHJlc2VudGVkIGFzIG91dGVyID0gQSwgaW5u ZXIgPSA8QiBYPiwgd2hlcmUgWCBpcyBhIHBncGFfdW5yb2xsZWRfam9pbgorICogY292ZXJpbmcg Qy1ELgorICovCitzdHJ1Y3QgcGdwYV91bnJvbGxlZF9qb2luCit7CisJLyogT3V0ZXJtb3N0IG1l bWJlcjsgbXVzdCBub3QgaXRzZWxmIGJlIGFuIHVucm9sbGVkIGpvaW4uICovCisJcGdwYV9qb2lu X21lbWJlciBvdXRlcjsKKworCS8qIE51bWJlciBvZiBpbm5lciBtZW1iZXJzLiBMZW5ndGggb2Yg dGhlIHN0cmF0ZWd5IGFuZCBpbm5lciBhcnJheXMuICovCisJdW5zaWduZWQJbmlubmVyOworCisJ LyogQXJyYXkgb2Ygc3RyYXRlZ2llcywgb25lIHBlciBub24tb3V0ZXJtb3N0IG1lbWJlci4gKi8K KwlwZ3BhX2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCisJLyogQXJyYXkgb2YgbWVtYmVycywg ZXhjbHVkaW5nIHRoZSBvdXRlcm1vc3QuIERlZXBlc3QgZmlyc3QuICovCisJcGdwYV9qb2luX21l bWJlciAqaW5uZXI7Cit9OworCisvKgorICogRG9lcyB0aGlzIHBsYW4gbm9kZSBpbmhlcml0IGZy b20gSm9pbj8KKyAqLworc3RhdGljIGlubGluZSBib29sCitwZ3BhX2lzX2pvaW4oUGxhbiAqcGxh bikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIE5lc3RMb29wKSB8fCBJc0EocGxhbiwgTWVyZ2VKb2lu KSB8fCBJc0EocGxhbiwgSGFzaEpvaW4pOworfQorCitleHRlcm4gcGdwYV9qb2luX3Vucm9sbGVy ICpwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgcGdwYV91bnJv bGxfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgUGxhbiAq cGxhbiwgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxl ciAqam9pbl91bnJvbGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoqb3V0ZXJfam9p bl91bnJvbGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoqaW5uZXJfam9pbl91bnJv bGxlcik7CitleHRlcm4gcGdwYV91bnJvbGxlZF9qb2luICpwZ3BhX2J1aWxkX3Vucm9sbGVkX2pv aW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCQkJcGdwYV9q b2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKK2V4dGVybiB2b2lkIHBncGFfZGVzdHJveV9q b2luX3Vucm9sbGVyKHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcik7CisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi44OWE2NzVmZjkzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpAQCAtMCwwICsxLDYyOCBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogcGdwYV9vdXRwdXQuYworICoJICBwcm9kdWNlIHRleHR1YWwgb3V0 cHV0IGZyb20gdGhlIHJlc3VsdHMgb2YgYSBwbGFuIHRyZWUgd2FsaworICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3Bh X291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorCisjaW5jbHVkZSAibm9kZXMvcGFy c2Vub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCisvKgorICogQ29u dGV4dCBvYmplY3QgZm9yIHRleHR1YWwgYWR2aWNlIGdlbmVyYXRpb24uCisgKgorICogcnRfaWRl bnRpZmllcnMgaXMgdGhlIGNhbGxlci1wcm92aWRlZCBhcnJheSBvZiByYW5nZSB0YWJsZSBpZGVu dGlmaWVycy4KKyAqIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZiBwZ3BhX2lkZW50aWZp ZXIuYyBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGJ1ZiBpcyB0aGUgY2FsbGVyLXByb3ZpZGVk IG91dHB1dCBidWZmZXIuCisgKgorICogd3JhcF9jb2x1bW4gaXMgdGhlIHdyYXAgY29sdW1uLCBz byB0aGF0IHdlIGRvbid0IGNyZWF0ZSBvdXRwdXQgdGhhdCBpcworICogdG9vIHdpZGUuIFNlZSBw Z3BhX21heWJlX2xpbmVicmVhaygpIGFuZCBjb21tZW50cyBpbiBwZ3BhX291dHB1dF9hZHZpY2Uu CisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfb3V0cHV0X2NvbnRleHQKK3sKKwljb25zdCBjaGFy ICoqcmlkX3N0cmluZ3M7CisJU3RyaW5nSW5mbwlidWY7CisJaW50CQkJd3JhcF9jb2x1bW47Cit9 IHBncGFfb3V0cHV0X2NvbnRleHQ7CisKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3Vucm9sbGVk X2pvaW4ocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCSAgcGdwYV91bnJv bGxlZF9qb2luICpqb2luKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X2pvaW5fbWVtYmVyKHBn cGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQlwZ3BhX2pvaW5fbWVtYmVyICpt ZW1iZXIpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneShwZ3BhX291dHB1 dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRl Z3ksCisJCQkJCQkJCQkgIExpc3QgKnNjYW5zKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X2Jp dG1hcF9pbmRleF9kZXRhaWxzKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJ CQkJCSBQbGFuICpwbGFuKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUo cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKTsKK3N0YXRpYyB2b2lkIHBn cGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJ CQkJCQkJCSAgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQkgIExpc3QgKnF1ZXJ5X2ZlYXR1 cmVzKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3NpbXBsZV9zdHJhdGVneShwZ3BhX291dHB1 dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJCWNoYXIgKnN0cmF0ZWd5LAorCQkJCQkJCQkJ CUxpc3QgKnJlbGlkX3NldHMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfbm9fZ2F0aGVyKHBn cGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMp Oworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBncGFfb3V0cHV0X2NvbnRleHQg KmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsK Kworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHBncGFfam9pbl9zdHJh dGVneSBzdHJhdGVneSk7CitzdGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3ko cGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdf cXVlcnlfZmVhdHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBlKTsKKworc3RhdGljIHZvaWQgcGdw YV9tYXliZV9saW5lYnJlYWsoU3RyaW5nSW5mbyBidWYsIGludCB3cmFwX2NvbHVtbik7CisKKy8q CisgKiBBcHBlbmQgcXVlcnkgYWR2aWNlIHRvIHRoZSBwcm92aWRlZCBidWZmZXIuCisgKgorICog QmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgJ3dhbGtlcicgbXVzdCBiZSB1c2VkIHRvIGl0 ZXJhdGUgb3ZlciB0aGUKKyAqIG1haW4gcGxhbiB0cmVlIGFuZCBhbGwgc3VicGxhbnMgZnJvbSB0 aGUgUGxhbm5lZFN0bXQuCisgKgorICogJ3J0X2lkZW50aWZpZXJzJyBpcyBhIHRhYmxlIG9mIHVu aXF1ZSBpZGVudGlmaWVycywgb25lIGZvciBlYWNoIFJUSS4KKyAqIFNlZSBwZ3BhX2NyZWF0ZV9p ZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KCkuCisgKgorICogUmVzdWx0cyB3aWxsIGJlIGFw cGVuZGVkIHRvICdidWYnLgorICovCit2b2lkCitwZ3BhX291dHB1dF9hZHZpY2UoU3RyaW5nSW5m byBidWYsIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCSAgIHBncGFfaWRl bnRpZmllciAqcnRfaWRlbnRpZmllcnMpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0 X2xlbmd0aCh3YWxrZXItPnBzdG10LT5ydGFibGUpOworCUxpc3RDZWxsICAgKmxjOworCXBncGFf b3V0cHV0X2NvbnRleHQgY29udGV4dDsKKworCS8qIEJhc2ljIGluaXRpYWxpemF0aW9uLiAqLwor CW1lbXNldCgmY29udGV4dCwgMCwgc2l6ZW9mKHBncGFfb3V0cHV0X2NvbnRleHQpKTsKKwljb250 ZXh0LmJ1ZiA9IGJ1ZjsKKworCS8qCisJICogQ29udmVydCBpZGVudGlmaWVycyB0byBzdHJpbmcg Zm9ybS4gTm90ZSB0aGF0IHRoZSBsb29wIHZhcmlhYmxlIGhlcmUgaXMKKwkgKiBub3QgYW4gUlRJ LCBiZWNhdXNlIFJUSXMgYXJlIDEtYmFzZWQuIFNvbWUgUlRJcyB3aWxsIGhhdmUgbm8KKwkgKiBp ZGVudGlmaWVyLCBlaXRoZXIgYmVjYXVzZSB0aGUgcmVsb3B0a2luZCBpcyBSVEVfSk9JTiBvciBi ZWNhdXNlIHRoYXQKKwkgKiBwb3J0aW9uIG9mIHRoZSBxdWVyeSBkaWRuJ3QgbWFrZSBpdCBpbnRv IHRoZSBmaW5hbCBwbGFuLgorCSAqLworCWNvbnRleHQucmlkX3N0cmluZ3MgPSBwYWxsb2MwX2Fy cmF5KGNvbnN0IGNoYXIgKiwgcnRhYmxlX2xlbmd0aCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBy dGFibGVfbGVuZ3RoOyArK2kpCisJCWlmIChydF9pZGVudGlmaWVyc1tpXS5hbGlhc19uYW1lICE9 IE5VTEwpCisJCQljb250ZXh0LnJpZF9zdHJpbmdzW2ldID0gcGdwYV9pZGVudGlmaWVyX3N0cmlu ZygmcnRfaWRlbnRpZmllcnNbaV0pOworCisJLyoKKwkgKiBJZiB0aGUgdXNlciBjaG9vc2VzIHRv IHVzZSBFWFBMQUlOIChQTEFOX0FEVklDRSkgaW4gYW4gODAtY29sdW1uIHdpbmRvdworCSAqIGZy b20gYSBwc3FsIGNsaWVudCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MsIHBzcWwgd2lsbCBhZGQgb25l IHNwYWNlIHRvCisJICogdGhlIGxlZnQgb2YgdGhlIG91dHB1dCBhbmQgRVhQTEFJTiB3aWxsIGFk ZCB0d28gbW9yZSB0byB0aGUgbGVmdCBvZiB0aGUKKwkgKiBhZHZpY2UuIFRodXMsIGxpbmVzIG9m IG1vcmUgdGhhbiA3NyBjaGFyYWN0ZXJzIHdpbGwgd3JhcC4gV2Ugc2V0IHRoZQorCSAqIHdyYXAg bGltaXQgdG8gNzYgaGVyZSBzbyB0aGF0IHRoZSBvdXRwdXQgd29uJ3QgcmVhY2ggYWxsIHRoZSB3 YXkgdG8gdGhlCisJICogdmVyeSBsYXN0IGNvbHVtbiBvZiB0aGUgdGVybWluYWwuCisJICoKKwkg KiBPZiBjb3Vyc2UsIHRoaXMgaXMgZmFpcmx5IGFyYml0cmFyeSBzZXQgb2YgYXNzdW1wdGlvbnMs IGFuZCBvbmUgY291bGQKKwkgKiB3ZWxsIG1ha2UgYW4gYXJndW1lbnQgZm9yIGEgZGlmZmVyZW50 IHdyYXAgbGltaXQsIG9yIGZvciBhIGNvbmZpZ3VyYWJsZQorCSAqIG9uZS4KKwkgKi8KKwljb250 ZXh0LndyYXBfY29sdW1uID0gNzY7CisKKwkvKgorCSAqIEVhY2ggcGllY2Ugb2YgSk9JTl9PUkRF UigpIGFkdmljZSBmdWxseSBkZXNjcmliZXMgdGhlIGpvaW4gb3JkZXIgZm9yIGEKKwkgKiBhIHNp bmdsZSB1bnJvbGxlZCBqb2luLiBNZXJnaW5nIGlzIG5vdCBwZXJtaXR0ZWQsIGJlY2F1c2UgdGhh dCB3b3VsZAorCSAqIGNoYW5nZSB0aGUgbWVhbmluZywgZS5nLiBTRVFfU0NBTihhIGIgYyBkKSBt ZWFucyBzaW1wbHkgdGhhdCBzZXF1ZW50aWFsCisJICogc2NhbnMgc2hvdWxkIGJlIHVzZWQgZm9y IGFsbCBvZiB0aG9zZSByZWxhdGlvbnMsIGFuZCBpcyB0aHVzIGVxdWl2YWxlbnQKKwkgKiB0byBT RVFfU0NBTihhIGIpIFNFUV9TQ0FOKGMgZCksIGJ1dCBKT0lOX09SREVSKGEgYiBjIGQpIG1lYW5z IHRoYXQgImEiCisJICogaXMgdGhlIGRyaXZpbmcgdGFibGUgd2hpY2ggaXMgdGhlbiBqb2luZWQg dG8gImIiIHRoZW4gImMiIHRoZW4gImQiLAorCSAqIHdoaWNoIGlzIHRvdGFsbHkgZGlmZmVyZW50 IGZyb20gSk9JTl9PUkRFUihhIGIpIGFuZCBKT0lOX09SREVSKGMgZCkuCisJICovCisJZm9yZWFj aChsYywgd2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucykKKwl7CisJCXBncGFfdW5yb2xs ZWRfam9pbiAqdWpvaW4gPSBsZmlyc3QobGMpOworCisJCWlmIChidWYtPmxlbiA+IDApCisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICdcbicpOworCQlhcHBlbmRTdHJpbmdJbmZvKGNvbnRl eHQuYnVmLCAiSk9JTl9PUkRFUigiKTsKKwkJcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbigmY29u dGV4dCwgdWpvaW4pOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LmJ1ZiwgJyknKTsK KwkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC5idWYsIGNvbnRleHQud3JhcF9jb2x1bW4p OworCX0KKworCS8qIEVtaXQgam9pbiBzdHJhdGVneSBhZHZpY2UuICovCisJZm9yIChpbnQgcyA9 IDA7IHMgPCBOVU1fUEdQQV9KT0lOX1NUUkFURUdZOyArK3MpCisJeworCQljaGFyCSAgICpzdHJh dGVneSA9IHBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHMpOworCisJCXBncGFfb3V0cHV0X3Np bXBsZV9zdHJhdGVneSgmY29udGV4dCwKKwkJCQkJCQkJCXN0cmF0ZWd5LAorCQkJCQkJCQkJd2Fs a2VyLT5qb2luX3N0cmF0ZWdpZXNbc10pOworCX0KKworCS8qCisJICogRW1pdCBzY2FuIHN0cmF0 ZWd5IGFkdmljZSAoYnV0IG5vdCBmb3Igb3JkaW5hcnkgc2NhbnMsIHdoaWNoIGFyZQorCSAqIGRl ZmluaXRpb25hbGx5IHVuaW50ZXJlc3RpbmcpLgorCSAqLworCWZvciAoaW50IGMgPSAwOyBjIDwg TlVNX1BHUEFfU0NBTl9TVFJBVEVHWTsgKytjKQorCQlpZiAoYyAhPSBQR1BBX1NDQU5fT1JESU5B UlkpCisJCQlwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KCZjb250ZXh0LCBjLCB3YWxrZXItPnNj YW5zW2NdKTsKKworCS8qIEVtaXQgcXVlcnkgZmVhdHVyZSBhZHZpY2UuICovCisJZm9yIChpbnQg dCA9IDA7IHQgPCBOVU1fUEdQQV9RRl9UWVBFUzsgKyt0KQorCQlwZ3BhX291dHB1dF9xdWVyeV9m ZWF0dXJlKCZjb250ZXh0LCB0LCB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3RdKTsKKworCS8qIEVt aXQgTk9fR0FUSEVSIGFkdmljZS4gKi8KKwlwZ3BhX291dHB1dF9ub19nYXRoZXIoJmNvbnRleHQs IHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgbWVtYmVy cyBvZiBhbiB1bnJvbGxlZCBqb2luLCBmaXJzdCB0aGUgb3V0ZXJtb3N0IG1lbWJlciwgYW5kCisg KiB0aGVuIHRoZSBpbm5lciBtZW1iZXJzIG9uZSBieSBvbmUsIGFzIHBhcnQgb2YgSk9JTl9PUkRF UigpIGFkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3Vucm9sbGVkX2pvaW4o cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV91bnJvbGxlZF9qb2lu ICpqb2luKQoreworCXBncGFfb3V0cHV0X2pvaW5fbWVtYmVyKGNvbnRleHQsICZqb2luLT5vdXRl cik7CisKKwlmb3IgKGludCBrID0gMDsgayA8IGpvaW4tPm5pbm5lcjsgKytrKQorCXsKKwkJcGdw YV9qb2luX21lbWJlciAqbWVtYmVyID0gJmpvaW4tPmlubmVyW2tdOworCisJCXBncGFfbWF5YmVf bGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCXBncGFfb3V0cHV0X2pvaW5fbWVt YmVyKGNvbnRleHQsIG1lbWJlcik7CisJfQorfQorCisvKgorICogT3V0cHV0IGEgc2luZ2xlIG1l bWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIGFzIHBhcnQgb2YgSk9JTl9PUkRFUigpIGFkdmljZS4K KyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X2pvaW5fbWVtYmVyKHBncGFfb3V0cHV0X2Nv bnRleHQgKmNvbnRleHQsCisJCQkJCQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIpCit7CisJaWYg KG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0No YXIoY29udGV4dC0+YnVmLCAnKCcpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9qb2luKGNvbnRl eHQsIG1lbWJlci0+dW5yb2xsZWRfam9pbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJyknKTsKKwl9CisJZWxzZQorCXsKKwkJcGdwYV9zY2FuICAqc2NhbiA9IG1lbWJl ci0+c2NhbjsKKworCQlBc3NlcnQoc2NhbiAhPSBOVUxMKTsKKwkJaWYgKGJtc19tZW1iZXJzaGlw KHNjYW4tPnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9u cyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCWVsc2UKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAneycpOworCQkJcGdwYV9vdXRwdXRf cmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ30nKTsKKwkJfQorCX0KK30KKworLyoKKyAq IE91dHB1dCBhZHZpY2UgZm9yIGEgTGlzdCBvZiBwZ3BhX3NjYW4gb2JqZWN0cy4KKyAqCisgKiBB bGwgdGhlIHNjYW5zIG11c3QgdXNlIHRoZSBzdHJhdGVneSBzcGVjaWZpZWQgYnkgdGhlICJzdHJh dGVneSIgYXJndW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9zY2FuX3N0cmF0 ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkgIHBncGFfc2Nhbl9zdHJh dGVneSBzdHJhdGVneSwKKwkJCQkJCSAgTGlzdCAqc2NhbnMpCit7CisJYm9vbAkJZmlyc3QgPSB0 cnVlOworCisJaWYgKHNjYW5zID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRleHQtPmJ1 Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsK KwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsCisJCQkJCSBwZ3BhX2NzdHJp bmdfc2Nhbl9zdHJhdGVneShzdHJhdGVneSkpOworCisJZm9yZWFjaF9wdHIocGdwYV9zY2FuLCBz Y2FuLCBzY2FucykKKwl7CisJCVBsYW4JICAgKnBsYW4gPSBzY2FuLT5wbGFuOworCisJCWlmIChm aXJzdCkKKwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5l YnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQkvKiBPdXRwdXQgdGhlIHJl bGF0aW9uIGlkZW50aWZpZXJzLiAqLworCQlpZiAoYm1zX21lbWJlcnNoaXAoc2Nhbi0+cmVsaWRz KSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNv bnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29u dGV4dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0No YXIoY29udGV4dC0+YnVmLCAnKScpOworCQl9CisKKwkJLyogRm9yIHNjYW5zIGludm9sdmluZyBp bmRleGVzLCBvdXRwdXQgaW5kZXggaW5mb3JtYXRpb24uICovCisJCWlmIChzdHJhdGVneSA9PSBQ R1BBX1NDQU5fSU5ERVgpCisJCXsKKwkJCUFzc2VydChJc0EocGxhbiwgSW5kZXhTY2FuKSk7CisJ CQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1u KTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFf b3V0cHV0X3JlbGF0aW9uX25hbWUoY29udGV4dCwgKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4 aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9JTkRFWF9PTkxZKQor CQl7CisJCQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4T25seVNjYW4pKTsKKwkJCXBncGFfbWF5YmVf bGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRp b25fbmFtZShjb250ZXh0LAorCQkJCQkJCQkJICAoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmlu ZGV4aWQpOworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9CSVRNQVBfSEVB UCkKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53 cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7 CisJCQlwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250ZXh0LCBwbGFuLT5sZWZ0 dHJlZSk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcp Jyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2Nv bHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggaW5kZXgg b3IgaW5kZXhlcyBwb3dlciBhIEJpdG1hcEhlYXBTY2FuLgorICoKKyAqIFdlIGVtaXQgJiYoaTEg aTIgaTMpIGZvciBhIEJpdG1hcEFuZCBiZXR3ZWVuIGluZGV4ZXMgaTEsIGkyLCBhbmQgaTM7Cisg KiBhbmQgbGlrZXdpc2UgfHwoaTEgaTIgaTMpIGZvciBhIHNpbWlsYXIgQml0bWFwT3Igb3BlcmF0 aW9uLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2RldGFpbHMo cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgUGxhbiAqcGxhbikKK3sKKwljaGFyCSAgICpv cGVyYXRvcjsKKwlMaXN0CSAgICpiaXRtYXBwbGFuczsKKwlib29sCQlmaXJzdCA9IHRydWU7CisK KwlpZiAoSXNBKHBsYW4sIEJpdG1hcEluZGV4U2NhbikpCisJeworCQlCaXRtYXBJbmRleFNjYW4g KmJpdG1hcGluZGV4c2NhbiA9IChCaXRtYXBJbmRleFNjYW4gKikgcGxhbjsKKworCQlwZ3BhX291 dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQsIGJpdG1hcGluZGV4c2Nhbi0+aW5kZXhpZCk7CisJ CXJldHVybjsKKwl9CisKKwlpZiAoSXNBKHBsYW4sIEJpdG1hcE9yKSkKKwl7CisJCW9wZXJhdG9y ID0gInx8IjsKKwkJYml0bWFwcGxhbnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBwbGFu czsKKwl9CisJZWxzZSBpZiAoSXNBKHBsYW4sIEJpdG1hcEFuZCkpCisJeworCQlvcGVyYXRvciA9 ICImJiI7CisJCWJpdG1hcHBsYW5zID0gKChCaXRtYXBBbmQgKikgcGxhbiktPmJpdG1hcHBsYW5z OworCX0KKwllbHNlCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIG5vZGUgdHlwZTogJWQiLCAo aW50KSBub2RlVGFnKHBsYW4pKTsKKworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAi JXMoIiwgb3BlcmF0b3IpOworCWZvcmVhY2hfcHRyKFBsYW4sIGNoaWxkX3BsYW4sIGJpdG1hcHBs YW5zKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJ CQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1u KTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCQlw Z3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250ZXh0LCBjaGlsZF9wbGFuKTsKKwl9 CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQorCisvKgorICog T3V0cHV0IGEgc2NoZW1hLXF1YWxpZmllZCByZWxhdGlvbiBuYW1lLgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0 LCBPaWQgcmVsaWQpCit7CisJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQp OworCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKG5z cG9pZCk7CisJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxfbmFtZShyZWxpZCk7CisKKwlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1l c3BhY2UpKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcuJyk7CisJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3RlX2lkZW50aWZpZXIocmVsbmFt ZSkpOworfQorCisvKgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfcXVlcnlf ZmVhdHVyZSBvYmplY3RzLgorICoKKyAqIEFsbCBmZWF0dXJlcyBtdXN0IGJlIG9mIHRoZSB0eXBl IHNwZWNpZmllZCBieSB0aGUgInR5cGUiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9pZAorcGdw YV9vdXRwdXRfcXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBwZ3Bh X3FmX3R5cGUgdHlwZSwKKwkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpCit7CisJYm9vbAkJ Zmlyc3QgPSB0cnVlOworCisJaWYgKHF1ZXJ5X2ZlYXR1cmVzID09IE5JTCkKKwkJcmV0dXJuOwor CisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29u dGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIs CisJCQkJCSBwZ3BhX2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHR5cGUpKTsKKworCWZvcmVh Y2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJaWYg KGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xp bmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVy c2hpcChxZi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRp b25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCWVsc2UKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9vdXRwdXRf cmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJp bmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29u dGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgInNp bXBsZSIgYWR2aWNlIGZvciBhIExpc3Qgb2YgQml0bWFwc2V0IG9iamVjdHMgZWFjaCBvZiB3aGlj aAorICogY29udGFpbnMgb25lIG9yIG1vcmUgUlRJcy4KKyAqCisgKiBCeSBzaW1wbGUsIHdlIGp1 c3QgbWVhbiB0aGF0IHRoZSBhZHZpY2UgZW1pdHRlZCBmb2xsb3dzIHRoZSBtb3N0CisgKiBzdHJh aWdodGZvcndhcmQgcGF0dGVybjogdGhlIHN0cmF0ZWd5IG5hbWUsIGZvbGxvd2VkIGJ5IGEgbGlz dCBvZiBpdGVtcworICogc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZCBieSBwYXJl bnRoZXNlcy4gSW5kaXZpZHVhbCBpdGVtcyBpbgorICogdGhlIGxpc3QgYXJlIGEgc2luZ2xlIHJl bGF0aW9uIGlkZW50aWZpZXIgZm9yIGEgQml0bWFwc2V0IHRoYXQgY29udGFpbnMKKyAqIGp1c3Qg b25lIG1lbWJlciwgb3IgYSBzdWItbGlzdCBhZ2FpbiBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFuZCBz dXJyb3VuZGVkCisgKiBieSBwYXJlbnRoZXNlcyBmb3IgYSBCaXRtYXBzZXQgd2l0aCBtdWx0aXBs ZSBtZW1iZXJzLiBCaXRtYXBzZXRzIHdpdGgKKyAqIG5vIG1lbWJlcnMgcHJvYmFibHkgc2hvdWxk bid0IG9jY3VyIGhlcmUsIGJ1dCBpZiB0aGV5IGRvIHRoZXknbGwgYmUKKyAqIHJlbmRlcmVkIGFz IGFuIGVtcHR5IHN1Yi1saXN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfc2ltcGxl X3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnN0cmF0ZWd5LAor CQkJCQkJCUxpc3QgKnJlbGlkX3NldHMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYg KHJlbGlkX3NldHMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4g PiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVu ZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwgc3RyYXRlZ3kpOworCisJZm9yZWFjaF9u b2RlKEJpdG1hcHNldCwgcmVsaWRzLCByZWxpZF9zZXRzKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJ Zmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250 ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChyZWxpZHMp ID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29u dGV4dC0+YnVmLCByZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBj b250ZXh0LT5idWYsIHJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5i dWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFw X2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgTk9fR0FUSEVSIGFkdmljZSBmb3IgYWxsIHJl bGF0aW9ucyBub3QgYXBwZWFyaW5nIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3IgR2F0aGVyIE1l cmdlIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJaWYgKHJlbGlk cyA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGNvbnRleHQtPmJ1ZiwgIk5PX0dBVEhFUigiKTsKKwlwZ3BhX291dHB1dF9yZWxhdGlv bnMoY29udGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCWFwcGVuZFN0cmluZ0luZm9DaGFy KGNvbnRleHQtPmJ1ZiwgJyknKTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgaWRlbnRpZmllcnMg Zm9yIGVhY2ggUlRJIGluIHRoZSBwcm92aWRlZCBzZXQuCisgKgorICogSWRlbnRpZmllcnMgYXJl IHNlcGFyYXRlZCBieSBzcGFjZXMsIGFuZCBhIGxpbmUgYnJlYWsgaXMgcG9zc2libGUgYWZ0ZXIK KyAqIGVhY2ggb25lLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBn cGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkgIEJpdG1h cHNldCAqcmVsaWRzKQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsK KworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7 CisJCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmcgPSBjb250ZXh0LT5yaWRfc3RyaW5nc1tydGkgLSAx XTsKKworCQlpZiAocmlkX3N0cmluZyA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwgIm5vIGlkZW50 aWZpZXIgZm9yIFJUSSAlZCIsIHJ0aSk7CisKKwkJaWYgKGZpcnN0KQorCQl7CisJCQlmaXJzdCA9 IGZhbHNlOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHJpZF9zdHJpbmcpOworCQl9 CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoYnVmLCBjb250ZXh0LT53cmFw X2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiAlcyIsIHJpZF9zdHJpbmcpOwor CQl9CisJfQorfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0 aGUgc3BlY2lmaWVkIGpvaW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0 cmluZ19qb2luX3N0cmF0ZWd5KHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlzd2l0 Y2ggKHN0cmF0ZWd5KQorCXsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJl dHVybiAiTUVSR0VfSk9JTl9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJ QUxJWkU6CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIEpTVFJB VF9ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExBSU4iOworCQlj YXNlIEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTkVTVEVEX0xP T1BfTUFURVJJQUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJ cmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBKU1RSQVRfSEFTSF9KT0lOOgor CQkJcmV0dXJuICJIQVNIX0pPSU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJu IE5VTEw7Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRo ZSBzcGVjaWZpZWQgc2NhbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3Ry aW5nX3NjYW5fc3RyYXRlZ3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3aXRj aCAoc3RyYXRlZ3kpCisJeworCQljYXNlIFBHUEFfU0NBTl9PUkRJTkFSWToKKwkJCXJldHVybiAi T1JESU5BUllfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1NFUToKKwkJCXJldHVybiAiU0VRX1ND QU4iOworCQljYXNlIFBHUEFfU0NBTl9CSVRNQVBfSEVBUDoKKwkJCXJldHVybiAiQklUTUFQX0hF QVBfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0ZPUkVJR046CisJCQlyZXR1cm4gIkZPUkVJR05f Sk9JTiI7CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsK KwkJY2FzZSBQR1BBX1NDQU5fSU5ERVhfT05MWToKKwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FO IjsKKwkJY2FzZSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiAiUEFSVElUSU9O V0lTRSI7CisJCWNhc2UgUEdQQV9TQ0FOX1RJRDoKKwkJCXJldHVybiAiVElEX1NDQU4iOworCX0K KworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgYSBD IHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBzdHJhdGVneS4K KyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShwZ3Bh X3FmX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpCisJeworCQljYXNlIFBHUEFRRl9HQVRI RVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQVFGX0dBVEhFUl9NRVJHRToKKwkJ CXJldHVybiAiR0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFV RToKKwkJCXJldHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJCWNhc2UgUEdQQVFGX1NFTUlK T0lOX1VOSVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fVU5JUVVFIjsKKwl9CisKKworCXBnX3Vu cmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBsaW5lIGJy ZWFrIGludG8gdGhlIFN0cmluZ0luZm9EYXRhLCBpZiBuZWVkZWQuCisgKgorICogSWYgd3JhcF9j b2x1bW4gaXMgemVybyBvciBuZWdhdGl2ZSwgdGhpcyBkb2VzIG5vdGhpbmcuIE90aGVyd2lzZSwg d2UKKyAqIGNvbnNpZGVyIGluc2VydGluZyBhIG5ld2xpbmUuIFdlIG9ubHkgaW5zZXJ0IGEgbmV3 bGluZSBpZiB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgbGFzdCBsaW5lIGluIHRoZSBidWZmZXIgZXhj ZWVkcyB3cmFwX2NvbHVtbiwgYW5kIG5vdCBpZiB3ZSdkIGJlCisgKiBpbnNlcnRpbmcgYSBuZXds aW5lIGF0IG9yIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IGxpbmUuCisgKgor ICogVGhlIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBuZXdsaW5lIGlzIGluc2VydGVkIGlzIHNpbXBs eSB3aGVyZXZlciB0aGUKKyAqIGJ1ZmZlciBlbmRlZCB0aGUgbGFzdCB0aW1lIHRoaXMgZnVuY3Rp b24gd2FzIGNhbGxlZC4gSW4gb3RoZXIgd29yZHMsCisgKiB0aGUgY2FsbGVyIGlzIGV4cGVjdGVk IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBldmVyeSB0aW1lIHdlIHJlYWNoIGEgZ29vZAorICogcGxh Y2UgZm9yIGEgbGluZSBicmVhay4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfbWF5YmVfbGluZWJy ZWFrKFN0cmluZ0luZm8gYnVmLCBpbnQgd3JhcF9jb2x1bW4pCit7CisJY2hhcgkgICAqdHJhaWxp bmdfbmw7CisJaW50CQkJbGluZV9zdGFydDsKKwlpbnQJCQlzYXZlX2N1cnNvcjsKKworCS8qIElm IGxpbmUgd3JhcHBpbmcgaXMgZGlzYWJsZWQsIGV4aXQgcXVpY2tseS4gKi8KKwlpZiAod3JhcF9j b2x1bW4gPD0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTZXQgbGluZV9zdGFydCB0byB0aGUg Ynl0ZSBvZmZzZXQgd2l0aGluIGJ1Zi0+ZGF0YSBvZiB0aGUgZmlyc3QKKwkgKiBjaGFyYWN0ZXIg b2YgdGhlIGN1cnJlbnQgbGluZSwgd2hlcmUgdGhlIGN1cnJlbnQgbGluZSBtZWFucyB0aGUgbGFz dAorCSAqIG9uZSBpbiB0aGUgYnVmZmVyLiBOb3RlIHRoYXQgbGluZV9zdGFydCBjb3VsZCBiZSB0 aGUgb2Zmc2V0IG9mIHRoZQorCSAqIHRyYWlsaW5nICdcMCcgaWYgdGhlIGxhc3QgY2hhcmFjdGVy IGluIHRoZSBidWZmZXIgaXMgYSBsaW5lIGJyZWFrLgorCSAqLworCXRyYWlsaW5nX25sID0gc3Ry cmNocihidWYtPmRhdGEsICdcbicpOworCWlmICh0cmFpbGluZ19ubCA9PSBOVUxMKQorCQlsaW5l X3N0YXJ0ID0gMDsKKwllbHNlCisJCWxpbmVfc3RhcnQgPSAodHJhaWxpbmdfbmwgLSBidWYtPmRh dGEpICsgMTsKKworCS8qCisJICogUmVtZW1iZXIgdGhhdCB0aGUgY3VycmVudCBlbmQgb2YgdGhl IGJ1ZmZlciBpcyBhIHBvdGVudGlhbCBsb2NhdGlvbiB0bworCSAqIGluc2VydCBhIGxpbmUgYnJl YWsgb24gYSBmdXR1cmUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCXNhdmVfY3Vyc29y ID0gYnVmLT5jdXJzb3I7CisJYnVmLT5jdXJzb3IgPSBidWYtPmxlbjsKKworCS8qIElmIHdlIGhh dmVuJ3QgcGFzc2VkIHRoZSB3cmFwIGNvbHVtbiwgd2UgZG9uJ3QgbmVlZCBhIG5ld2xpbmUuICov CisJaWYgKGJ1Zi0+bGVuIC0gbGluZV9zdGFydCA8PSB3cmFwX2NvbHVtbikKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGluc2VydCBhIG5ld2xpbmUgYXQgYSBw b3NpdGlvbiBsYXRlciB0aGFuIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5l LgorCSAqLworCWlmIChidWYtPmN1cnNvciA8PSBsaW5lX3N0YXJ0KQorCQlyZXR1cm47CisKKwkv KiBJbnNlcnQgYSBuZXdsaW5lIGF0IHRoZSBwcmV2aW91cyBjdXJzb3IgbG9jYXRpb24uICovCisJ ZW5sYXJnZVN0cmluZ0luZm8oYnVmLCAxKTsKKwltZW1tb3ZlKCZidWYtPmRhdGFbc2F2ZV9jdXJz b3JdICsgMSwgJmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0sCisJCQlidWYtPmxlbiAtIHNhdmVfY3Vy c29yKTsKKwkrK2J1Zi0+Y3Vyc29yOworCWJ1Zi0+ZGF0YVsrK2J1Zi0+bGVuXSA9ICdcMCc7CisJ YnVmLT5kYXRhW3NhdmVfY3Vyc29yXSA9ICdcbic7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf b3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3NDk2ZDc2 ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1 dC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0 cHV0LmgKKyAqCSAgcHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEg cGxhbiB0cmVlIHdhbGsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9vdXRwdXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBH UEFfT1VUUFVUX0gKKyNkZWZpbmUgUEdQQV9PVVRQVVRfSAorCisjaW5jbHVkZSAicGdwYV9pZGVu dGlmaWVyLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworZXh0ZXJuIHZvaWQgcGdwYV9v dXRwdXRfYWR2aWNlKFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmll cnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9w YXJzZXIueSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDYxN2U3ZjJmNjQKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKQEAgLTAsMCArMSwzMzcg QEAKKyV7CisvKgorICogUGFyc2VyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENvcHlyaWdodCAo YykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQorICovCisKKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNp bmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgorCisjaW5jbHVkZSAi cGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogQmlzb24gZG9l c24ndCBhbGxvY2F0ZSBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGxpdmUgYWNyb3NzIHBhcnNlciBj YWxscywKKyAqIHNvIHdlIGNhbiBlYXNpbHkgaGF2ZSBpdCB1c2UgcGFsbG9jIGluc3RlYWQgb2Yg bWFsbG9jLiAgVGhpcyBwcmV2ZW50cworICogbWVtb3J5IGxlYWtzIGlmIHdlIGVycm9yIG91dCBk dXJpbmcgcGFyc2luZy4KKyAqLworI2RlZmluZSBZWU1BTExPQyBwYWxsb2MKKyNkZWZpbmUgWVlG UkVFICAgcGZyZWUKKyV9CisKKy8qIEJJU09OIERlY2xhcmF0aW9ucyAqLworJXBhcnNlLXBhcmFt IHtMaXN0ICoqcmVzdWx0fQorJXBhcnNlLXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9 CislcGFyc2UtcGFyYW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVsZXgtcGFyYW0ge0xpc3QgKipy ZXN1bHR9CislbGV4LXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9CislbGV4LXBhcmFt IHt5eXNjYW5fdCB5eXNjYW5uZXJ9CislcHVyZS1wYXJzZXIKKyVleHBlY3QgMAorJW5hbWUtcHJl Zml4PSJwZ3BhX3l5IgorCisldW5pb24KK3sKKwljaGFyCSAgICpzdHI7CisJaW50CQkJaW50ZWdl cjsKKwlMaXN0CSAgICpsaXN0OworCXBncGFfYWR2aWNlX2l0ZW0gKml0ZW07CisJcGdwYV9hZHZp Y2VfdGFyZ2V0ICp0YXJnZXQ7CisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7Cit9CisldG9r ZW4gPHN0cj4gVE9LX0lERU5UIFRPS19UQUdfSk9JTl9PUkRFUiBUT0tfVEFHX0JJVE1BUCBUT0tf VEFHX0lOREVYCisldG9rZW4gPHN0cj4gVE9LX1RBR19TSU1QTEUgVE9LX1RBR19HRU5FUklDCisl dG9rZW4gPGludGVnZXI+IFRPS19JTlRFR0VSCisldG9rZW4gVE9LX09SIFRPS19BTkQKKworJXR5 cGUgPGludGVnZXI+IG9wdF9yaV9vY2N1cnJlbmNlCisldHlwZSA8aXRlbT4gYWR2aWNlX2l0ZW0K KyV0eXBlIDxsaXN0PiBhZHZpY2VfaXRlbV9saXN0IGJpdG1hcF9zdWJsaXN0IGJpdG1hcF90YXJn ZXRfbGlzdCBnZW5lcmljX3RhcmdldF9saXN0CisldHlwZSA8bGlzdD4gaW5kZXhfdGFyZ2V0X2xp c3Qgam9pbl9vcmRlcl90YXJnZXRfbGlzdAorJXR5cGUgPGxpc3Q+IG9wdF9wYXJ0aXRpb24gc2lt cGxlX3RhcmdldF9saXN0CisldHlwZSA8c3RyPiBpZGVudGlmaWVyIG9wdF9wbGFuX25hbWUKKyV0 eXBlIDx0YXJnZXQ+IGdlbmVyaWNfc3VibGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKyV0eXBlIDx0 YXJnZXQ+IHJlbGF0aW9uX2lkZW50aWZpZXIKKyV0eXBlIDxpdGFyZ2V0PiBiaXRtYXBfdGFyZ2V0 X2l0ZW0gaW5kZXhfbmFtZQorCislc3RhcnQgcGFyc2VfdG9wbGV2ZWwKKworLyogR3JhbW1hciBm b2xsb3dzICovCislJQorCitwYXJzZV90b3BsZXZlbDogYWR2aWNlX2l0ZW1fbGlzdAorCQl7CisJ CQkodm9pZCkgeXluZXJyczsJCQkJLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLworCQkJ KnJlc3VsdCA9ICQxOworCQl9CisJOworCithZHZpY2VfaXRlbV9saXN0OiBhZHZpY2VfaXRlbV9s aXN0IGFkdmljZV9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQg PSBOSUw7IH0KKwk7CisKK2FkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIgJygnIGpvaW5f b3JkZXJfdGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9h ZHZpY2VfaXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCSQkLT50 YXJnZXRzID0gJDM7CisJCX0KKwl8IFRPS19UQUdfSU5ERVggJygnIGluZGV4X3RhcmdldF9saXN0 ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJ aWYgKHN0cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBH UEFfVEFHX0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgImluZGV4X3Nj YW4iKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRFWF9TQ0FOOworCQkJZWxzZQor CQkJCWVsb2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRh cmdldHMgPSAkMzsKKwkJfQorCXwgVE9LX1RBR19CSVRNQVAgJygnIGJpdG1hcF90YXJnZXRfbGlz dCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJ CSQkLT50YWcgPSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOworCQkJJCQtPnRhcmdldHMgPSAk MzsKKwkJfQorCXwgVE9LX1RBR19TSU1QTEUgJygnIHNpbXBsZV90YXJnZXRfbGlzdCAnKScKKwkJ eworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCWlmIChzdHJj bXAoJDEsICJub19nYXRoZXIiKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19OT19HQVRI RVI7CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJzZXFfc2NhbiIpID09IDApCisJCQkJJCQtPnRh ZyA9IFBHUEFfVEFHX1NFUV9TQ0FOOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAidGlkX3NjYW4i KSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19USURfU0NBTjsKKwkJCWVsc2UKKwkJCQll bG9nKEVSUk9SLCAidGFnIHBhcnNpbmcgZmFpbGVkOiAlcyIsICQxKTsKKwkJCSQkLT50YXJnZXRz ID0gJDM7CisJCX0KKwl8IFRPS19UQUdfR0VORVJJQyAnKCcgZ2VuZXJpY190YXJnZXRfbGlzdCAn KScKKwkJeworCQkJYm9vbAlmYWlsOworCisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2 aWNlX2l0ZW0pOworCQkJJCQtPnRhZyA9IHBncGFfcGFyc2VfYWR2aWNlX3RhZygkMSwgJmZhaWwp OworCQkJaWYgKGZhaWwpCisJCQl7CisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJy b3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgInVucmVjb2duaXplZCBhZHZpY2UgdGFnIik7 CisJCQl9CisKKwkJCWlmICgkJC0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9JTikKKwkJCXsK KwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgJDMpCisJCQkJewor CQkJCQlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSIHx8CisJCQkJ CQlsaXN0X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKSA9PSAxKQorCQkJCQkJCXBncGFfeXllcnJv cihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkJICJGT1JF SUdOX0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpZGVu dGlmaWVyIik7CisJCQkJfQorCQkJfQorCisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJOwor CityZWxhdGlvbl9pZGVudGlmaWVyOiBpZGVudGlmaWVyIG9wdF9yaV9vY2N1cnJlbmNlIG9wdF9w YXJ0aXRpb24gb3B0X3BsYW5fbmFtZQorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFf YWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSOwor CQkJJCQtPnJpZC5hbGlhc19uYW1lID0gJDE7CisJCQkkJC0+cmlkLm9jY3VycmVuY2UgPSAkMjsK KwkJCWlmIChsaXN0X2xlbmd0aCgkMykgPT0gMikKKwkJCXsKKwkJCQkkJC0+cmlkLnBhcnRuc3Ag PSBsaW5pdGlhbCgkMyk7CisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbHNlY29uZCgkMyk7CisJCQl9 CisJCQllbHNlIGlmICgkMyAhPSBOSUwpCisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbGluaXRpYWwo JDMpOworCQkJJCQtPnJpZC5wbGFuX25hbWUgPSAkNDsKKwkJfQorCTsKKworaW5kZXhfbmFtZTog aWRlbnRpZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0 KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfTkFNRTsKKwkJCSQkLT5pbmRuYW1lID0gJDE7 CisJCX0KKwl8IGlkZW50aWZpZXIgJy4nIGlkZW50aWZpZXIKKwkJeworCQkJJCQgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX05B TUU7CisJCQkkJC0+aW5kbmFtZXNwYWNlID0gJDE7CisJCQkkJC0+aW5kbmFtZSA9ICQzOworCQl9 CisJOworCitvcHRfcmlfb2NjdXJyZW5jZToKKwknIycgVE9LX0lOVEVHRVIKKwkJeworCQkJaWYg KCQyIDw9IDApCisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5 c2Nhbm5lciwKKwkJCQkJCQkgIm9ubHkgcG9zaXRpdmUgb2NjdXJyZW5jZSBudW1iZXJzIGFyZSBw ZXJtaXR0ZWQiKTsKKwkJCSQkID0gJDI7CisJCX0KKwl8CisJCXsKKwkJCS8qIFRoZSBkZWZhdWx0 IG9jY3VycmVuY2UgbnVtYmVyIGlzIDEuICovCisJCQkkJCA9IDE7CisJCX0KKwk7CisKK2lkZW50 aWZpZXI6IFRPS19JREVOVAorCXwgVE9LX1RBR19KT0lOX09SREVSCisJfCBUT0tfVEFHX0lOREVY CisJfCBUT0tfVEFHX0JJVE1BUAorCXwgVE9LX1RBR19TSU1QTEUKKwl8IFRPS19UQUdfR0VORVJJ QworCTsKKworLyoKKyAqIFdoZW4gZ2VuZXJhdGluZyBhZHZpY2UsIHdlIGFsd2F5cyBzY2hlbWEt cXVhbGlmeSB0aGUgcGFydGl0aW9uIG5hbWUsIGJ1dAorICogd2hlbiBwYXJzaW5nIGFkdmljZSwg d2UgYWNjZXB0IGEgc3BlY2lmaWNhdGlvbiB0aGF0IGxhY2tzIG9uZS4KKyAqLworb3B0X3BhcnRp dGlvbjoKKwknLycgVE9LX0lERU5UICcuJyBUT0tfSURFTlQKKwkJeyAkJCA9IGxpc3RfbWFrZTIo JDIsICQ0KTsgfQorCXwgJy8nIFRPS19JREVOVAorCQl7ICQkID0gbGlzdF9tYWtlMSgkMik7IH0K Kwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK29wdF9wbGFuX25hbWU6CisJJ0AnIFRPS19JREVO VAorCQl7ICQkID0gJDI7IH0KKwl8CisJCXsgJCQgPSBOVUxMOyB9CisJOworCitiaXRtYXBfdGFy Z2V0X2xpc3Q6IGJpdG1hcF90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGJpdG1hcF90 YXJnZXRfaXRlbQorCQl7CisJCQkkMi0+aXRhcmdldCA9ICQzOworCQkJJCQgPSBsYXBwZW5kKCQx LCAkMik7CisJCX0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2JpdG1hcF90YXJnZXRfaXRl bTogaW5kZXhfbmFtZQorCQl7ICQkID0gJDE7IH0KKwl8IFRPS19PUiAnKCcgYml0bWFwX3N1Ymxp c3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQpOwor CQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9PUjsKKwkJCSQkLT5jaGlsZHJlbiA9ICQzOworCQl9 CisJfCBUT0tfQU5EICcoJyBiaXRtYXBfc3VibGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2Mw X29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX0FO RDsKKwkJCSQkLT5jaGlsZHJlbiA9ICQzOworCQl9CisJOworCitiaXRtYXBfc3VibGlzdDogYml0 bWFwX3N1Ymxpc3QgYml0bWFwX3RhcmdldF9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7 IH0KKwl8IGJpdG1hcF90YXJnZXRfaXRlbQorCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0KKwk7 CisKK2dlbmVyaWNfdGFyZ2V0X2xpc3Q6IGdlbmVyaWNfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRl bnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfCBnZW5lcmljX3RhcmdldF9s aXN0IGdlbmVyaWNfc3VibGlzdAorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAorCQl7 ICQkID0gTklMOyB9CisJOworCitnZW5lcmljX3N1Ymxpc3Q6ICcoJyBnZW5lcmljX3RhcmdldF9s aXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7 CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRy ZW4gPSAkMjsKKwkJfQorCTsKKworaW5kZXhfdGFyZ2V0X2xpc3Q6CisJICBpbmRleF90YXJnZXRf bGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGluZGV4X25hbWUKKwkJeworCQkJJDItPml0YXJnZXQg PSAkMzsKKwkJCSQkID0gbGFwcGVuZCgkMSwgJDIpOworCQl9CisJfAorCQl7ICQkID0gTklMOyB9 CisJOworCitqb2luX29yZGVyX3RhcmdldF9saXN0OiBqb2luX29yZGVyX3RhcmdldF9saXN0IHJl bGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwgam9pbl9v cmRlcl90YXJnZXRfbGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKwkJeyAkJCA9IGxhcHBlbmQoJDEs ICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworam9pbl9vcmRlcl9zdWJsaXN0Ogor CScoJyBqb2luX29yZGVyX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2Jq ZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRF UkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCXwgJ3snIHNpbXBsZV90YXJn ZXRfbGlzdCAnfScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJn ZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1Q7CisJCQkkJC0+ Y2hpbGRyZW4gPSAkMjsKKwkJfQorCTsKKworc2ltcGxlX3RhcmdldF9saXN0OiBzaW1wbGVfdGFy Z2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9 CisJfAorCQl7ICQkID0gTklMOyB9CisJOworCislJQorCisvKgorICogUGFyc2UgYW4gYWR2aWNl X3N0cmluZyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBvZiBwZ3BhX2FkdmljZV9pdGVt CisgKiBvYmplY3RzLiBJZiBhIHBhcnNlIGVycm9yIG9jY3VycywgaW5zdGVhZCByZXR1cm4gTlVM TC4KKyAqCisgKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIE5VTEwsICplcnJvcl9wIHdpbGwgYmUg c2V0IHRvIHRoZSBlcnJvciBtZXNzYWdlOworICogb3RoZXJ3aXNlLCAqZXJyb3JfcCB3aWxsIGJl IHNldCB0byBOVUxMLgorICovCitMaXN0ICoKK3BncGFfcGFyc2UoY29uc3QgY2hhciAqYWR2aWNl X3N0cmluZywgY2hhciAqKmVycm9yX3ApCit7CisJeXlzY2FuX3QJc2Nhbm5lcjsKKwlMaXN0CSAg ICpyZXN1bHQ7CisJY2hhcgkgICAqZXJyb3IgPSBOVUxMOworCisJcGdwYV9zY2FubmVyX2luaXQo YWR2aWNlX3N0cmluZywgJnNjYW5uZXIpOworCXBncGFfeXlwYXJzZSgmcmVzdWx0LCAmZXJyb3Is IHNjYW5uZXIpOworCXBncGFfc2Nhbm5lcl9maW5pc2goc2Nhbm5lcik7CisKKwlpZiAoZXJyb3Ig IT0gTlVMTCkKKwl7CisJCSplcnJvcl9wID0gZXJyb3I7CisJCXJldHVybiBOVUxMOworCX0KKwor CSplcnJvcl9wID0gTlVMTDsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9wbGFubmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJm MWVkYTNiOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X3BsYW5uZXIuYwpAQCAtMCwwICsxLDE3MDYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHBncGFfcGxhbm5lci5jCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkg IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19wbGFuX2Fk dmljZS5oIgorI2luY2x1ZGUgInBncGFfY29sbGVjdG9yLmgiCisjaW5jbHVkZSAicGdwYV9pZGVu dGlmaWVyLmgiCisjaW5jbHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3BsYW5u ZXIuaCIKKyNpbmNsdWRlICJwZ3BhX3Ryb3ZlLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIK KworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKKyNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvZXh0ZW5kcGxhbi5oIgorI2luY2x1ZGUg Im9wdGltaXplci9wYXRobm9kZS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgorI2lu Y2x1ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIu aCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8qCisgKiBXaGVuIGFzc2Vy dGlvbnMgYXJlIGVuYWJsZWQsIHdlIHRyeSBnZW5lcmF0aW5nIHJlbGF0aW9uIGlkZW50aWZpZXJz IGR1cmluZworICogcGxhbm5pbmcsIHNhdmluZyB0aGVtIGluIGEgaGFzaCB0YWJsZSwgYW5kIHRo ZW4gY3Jvc3MtY2hlY2tpbmcgdGhlbSBhZ2FpbnN0CisgKiB0aGUgb25lcyBnZW5lcmF0ZWQgYWZ0 ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcmlfY2hl Y2tlcl9rZXkKK3sKKwljaGFyCSAgICpwbGFuX25hbWU7CisJSW5kZXgJCXJ0aTsKK30gcGdwYV9y aV9jaGVja2VyX2tleTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9jaGVja2VyCit7CisJcGdw YV9yaV9jaGVja2VyX2tleSBrZXk7CisJdWludDMyCQlzdGF0dXM7CisJY29uc3QgY2hhciAqcmlk X3N0cmluZzsKK30gcGdwYV9yaV9jaGVja2VyOworCitzdGF0aWMgdWludDMyIHBncGFfcmlfY2hl Y2tlcl9oYXNoX2tleShwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleSk7CisKK3N0YXRpYyBpbmxpbmUg Ym9vbAorcGdwYV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkgYSwg cGdwYV9yaV9jaGVja2VyX2tleSBiKQoreworCWlmIChhLnJ0aSAhPSBiLnJ0aSkKKwkJcmV0dXJu IGZhbHNlOworCWlmIChhLnBsYW5fbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gKGIucGxhbl9uYW1l ID09IE5VTEwpOworCWlmIChiLnBsYW5fbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisJ cmV0dXJuIHN0cmNtcChhLnBsYW5fbmFtZSwgYi5wbGFuX25hbWUpID09IDA7Cit9CisKKyNkZWZp bmUgU0hfUFJFRklYCQkJcGdwYV9yaV9jaGVjaworI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJCXBn cGFfcmlfY2hlY2tlcgorI2RlZmluZSBTSF9LRVlfVFlQRQkJCXBncGFfcmlfY2hlY2tlcl9rZXkK KyNkZWZpbmUgU0hfS0VZCQkJCWtleQorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KQlwZ3Bh X3JpX2NoZWNrZXJfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdw YV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KGEsIGIpCisjZGVmaW5lIFNIX1NDT1BFCQkJc3RhdGlj IGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNIX0RFRklORQorI2luY2x1ZGUg ImxpYi9zaW1wbGVoYXNoLmgiCisKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5u ZXJfc3RhdGUKK3sKKwlFeHBsYWluU3RhdGUgKmV4cGxhaW5fc3RhdGU7CisJcGdwYV90cm92ZSAq dHJvdmU7CisJTWVtb3J5Q29udGV4dCB0cm92ZV9jeHQ7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NI RUNLSU5HCisJcGdwYV9yaV9jaGVja19oYXNoICpyaV9jaGVja19oYXNoOworI2VuZGlmCit9IHBn cGFfcGxhbm5lcl9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9qb2luX3N0YXRlCit7CisJ LyogTW9zdC1yZWNlbnRseS1jb25zaWRlcmVkIG91dGVyIHJlbC4gKi8KKwlSZWxPcHRJbmZvICpv dXRlcnJlbDsKKworCS8qIE1vc3QtcmVjZW50bHktY29uc2lkZXJlZCBpbm5lciByZWwuICovCisJ UmVsT3B0SW5mbyAqaW5uZXJyZWw7CisKKwkvKgorCSAqIEFycmF5IG9mIHJlbGF0aW9uIGlkZW50 aWZpZXJzIGZvciBhbGwgbWVtYmVycyBvZiB0aGlzIGpvaW5yZWwsIHdpdGgKKwkgKiBvdXRlcnJl bCBpZGVuaWZpZXJzIGJlZm9yZSBpbm5lcnJlbCBpZGVudGlmaWVycy4KKwkgKi8KKwlwZ3BhX2lk ZW50aWZpZXIgKnJpZHM7CisKKwkvKiBOdW1iZXIgb2Ygb3V0ZXIgcmVsIGlkZW50aWZpZXJzLiAq LworCWludAkJCW91dGVyX2NvdW50OworCisJLyogTnVtYmVyIG9mIGlubmVyIHJlbCBpZGVudGlm aWVycy4gKi8KKwlpbnQJCQlpbm5lcl9jb3VudDsKKworCS8qCisJICogVHJvdmUgbG9va3VwIHJl c3VsdHMuCisJICoKKwkgKiBqb2luX2VudHJpZXMgYW5kIHJlbF9lbnRyaWVzIGFyZSBhcnJheXMg b2YgZW50cmllcywgYW5kIGpvaW5faW5kZXhlcworCSAqIGFuZCByZWxfaW5kZXhlcyBhcmUgdGhl IGludGVnZXIgb2Zmc2V0cyB3aXRoaW4gdGhvc2UgYXJyYXlzIG9mIGVudHJpZXMKKwkgKiBwb3Rl bnRpYWxseSByZWxldmFudCB0byB1cy4gVGhlICJqb2luIiBmaWVsZHMgY29ycmVzcG9uZCB0byBh IGxvb2t1cAorCSAqIHVzaW5nIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4gYW5kIHRoZSAicmVsIiBm aWVsZHMgdG8gYSBsb29rdXAgdXNpbmcKKwkgKiBQR1BBX1RST1ZFX0xPT0tVUF9SRUwuCisJICov CisJcGdwYV90cm92ZV9lbnRyeSAqam9pbl9lbnRyaWVzOworCUJpdG1hcHNldCAgKmpvaW5faW5k ZXhlczsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50cmllczsKKwlCaXRtYXBzZXQgICpyZWxf aW5kZXhlczsKK30gcGdwYV9qb2luX3N0YXRlOworCisvKiBTYXZlZCBob29rIHZhbHVlcyAqLwor c3RhdGljIGdldF9yZWxhdGlvbl9pbmZvX2hvb2tfdHlwZSBwcmV2X2dldF9yZWxhdGlvbl9pbmZv ID0gTlVMTDsKK3N0YXRpYyBqb2luX3BhdGhfc2V0dXBfaG9va190eXBlIHByZXZfam9pbl9wYXRo X3NldHVwID0gTlVMTDsKK3N0YXRpYyBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBwcmV2X2pvaW5y ZWxfc2V0dXAgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2V0dXBfaG9va190eXBlIHByZXZfcGxh bm5lcl9zZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zaHV0ZG93bl9ob29rX3R5cGUgcHJl dl9wbGFubmVyX3NodXRkb3duID0gTlVMTDsKKworLyogT3RoZXIgZ2xvYmFsIHZhcmlhYmVzICov CitzdGF0aWMgaW50CXBsYW5uZXJfZXh0ZW5zaW9uX2lkID0gLTE7CisKKy8qIEZ1bmN0aW9uIHBy b3RvdHlwZXMuICovCitzdGF0aWMgdm9pZCBwZ3BhX2dldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJ bmZvICpyb290LAorCQkJCQkJCQkgICBPaWQgcmVsYXRpb25PYmplY3RJZCwKKwkJCQkJCQkJICAg Ym9vbCBpbmhwYXJlbnQsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgdm9p ZCBwZ3BhX2pvaW5yZWxfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJICAgUmVsT3B0 SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkgICBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJCQkg ICBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5m bywKKwkJCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QpOworc3RhdGljIHZvaWQgcGdwYV9qb2lu X3BhdGhfc2V0dXAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSBSZWxPcHRJbmZvICpqb2lu cmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJCSBSZWxPcHRJbmZv ICppbm5lcnJlbCwKKwkJCQkJCQkJIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkgSm9pblBh dGhFeHRyYURhdGEgKmV4dHJhKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9zZXR1cChQbGFu bmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkJICAgY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nLAorCQkJCQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJhY3Rpb24sCisJCQkJCQkJICAg RXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxh bm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1 ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5l cl9hcHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQkJCSAg Y2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJCQkgIHBncGFfam9pbl9zdGF0ZSAqcGpzKTsKK3N0 YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2aWNlKEpvaW5UeXBlIGpv aW50eXBlLAorCQkJCQkJCQkJCQkJdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJCQkJY2hh ciAqcGxhbl9uYW1lLAorCQkJCQkJCQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMpOworc3RhdGlj IHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJ CQkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJCQkJICAg Qml0bWFwc2V0ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAq cmVsX2VudHJpZXMsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcyk7CitzdGF0 aWMgdWludDY0IHBncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2Fk dmljZV90YWdfdHlwZSB0YWcpOworc3RhdGljIGJvb2wgcGdwYV9qb2luX29yZGVyX3Blcm1pdHNf am9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgcGdwYV9p ZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSk7Citz dGF0aWMgYm9vbCBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQs IGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJ CQkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAgYm9vbCAqcmVz dHJpY3RfbWV0aG9kKTsKK3N0YXRpYyBib29sIHBncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2lu KGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAgcGdwYV9pZGVu dGlmaWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJ CQkJCQkJICBib29sICpyZXN0cmljdF9tZXRob2QpOworCitzdGF0aWMgTGlzdCAqcGdwYV9wbGFu bmVyX2FwcGVuZF9mZWVkYmFjayhMaXN0ICpsaXN0LCBwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJ CQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRl bnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICBwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfc2F2 ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywKKwkJCQkJCQkJCQlQbGFubmVySW5mbyAqcm9vdCwK KwkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIHZvaWQgcGdwYV9yaV9jaGVja2Vy X3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJIFBsYW5uZWRTdG10 ICpwc3RtdCk7CisKKy8qCisgKiBJbnN0YWxsIHBsYW5uZXItcmVsYXRlZCBob29rcy4KKyAqLwor dm9pZAorcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCkKK3sKKwlwbGFubmVyX2V4dGVu c2lvbl9pZCA9IEdldFBsYW5uZXJFeHRlbnNpb25JZCgicGdfcGxhbl9hZHZpY2UiKTsKKwlwcmV2 X2dldF9yZWxhdGlvbl9pbmZvID0gZ2V0X3JlbGF0aW9uX2luZm9faG9vazsKKwlnZXRfcmVsYXRp b25faW5mb19ob29rID0gcGdwYV9nZXRfcmVsYXRpb25faW5mbzsKKwlwcmV2X2pvaW5yZWxfc2V0 dXAgPSBqb2lucmVsX3NldHVwX2hvb2s7CisJam9pbnJlbF9zZXR1cF9ob29rID0gcGdwYV9qb2lu cmVsX3NldHVwOworCXByZXZfam9pbl9wYXRoX3NldHVwID0gam9pbl9wYXRoX3NldHVwX2hvb2s7 CisJam9pbl9wYXRoX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5fcGF0aF9zZXR1cDsKKwlwcmV2X3Bs YW5uZXJfc2V0dXAgPSBwbGFubmVyX3NldHVwX2hvb2s7CisJcGxhbm5lcl9zZXR1cF9ob29rID0g cGdwYV9wbGFubmVyX3NldHVwOworCXByZXZfcGxhbm5lcl9zaHV0ZG93biA9IHBsYW5uZXJfc2h1 dGRvd25faG9vazsKKwlwbGFubmVyX3NodXRkb3duX2hvb2sgPSBwZ3BhX3BsYW5uZXJfc2h1dGRv d247Cit9CisKKy8qCisgKiBIb29rIGZ1bmN0aW9uIGZvciBnZXRfcmVsYXRpb25faW5mbygpLgor ICoKKyAqIFdlIGNhbiBhcHBseSBzY2FuIGFkdmljZSBhdCB0aGlzIG9waW50LCBhbmQgd2UgYWxz byB1c2VlIHRoaXMgYXMgYW4KKyAqIG9wcG9ydHVuaXR5IHRvIGRvIHJhbmdlLXRhYmxlIGlkZW50 aWZpZXIgY3Jvc3MtY2hlY2tpbmcgaW4gYXNzZXJ0LWVuYWJsZWQKKyAqIGJ1aWxkcy4KKyAqCisg KiBYWFg6IFdlIGN1cnJlbnRseSBlbWl0IHVzZWxlc3MgYWR2aWNlIGxpa2UgTk9fR0FUSEVSKCIq UkVTVUxUKiIpIGZvciB0cml2aWFsCisgKiBxdWVyaWVzLiBUaGUgYWR2aWNlIGlzIHVzZWxlc3Mg YmVjYXVzZSBnZXRfcmVsYXRpb25faW5mbyBpc24ndCBjYWxsZWQgZm9yCisgKiBub24tcmVsYXRp b24gUlRFcy4gV2Ugc2hvdWxkIGVpdGhlciBzdXBwcmVzcyB0aGUgYWR2aWNlIGluIHN1Y2ggY2Fz ZXMsIG9yCisgKiBhZGQgYSBob29rIHRoYXQgY2FuIGFwcGx5IGl0LgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9nZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9u T2JqZWN0SWQsCisJCQkJCSAgIGJvb2wgaW5ocGFyZW50LCBSZWxPcHRJbmZvICpyZWwpCit7CisJ cGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwg c2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9i YWxFeHRlbnNpb25TdGF0ZShyb290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisKKwkv KiBTYXZlIGRldGFpbHMgbmVlZGVkIGZvciByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGNyb3NzLWNo ZWNraW5nLiAqLworCWlmIChwcHMgIT0gTlVMTCkKKwkJcGdwYV9yaV9jaGVja2VyX3NhdmUocHBz LCByb290LCByZWwpOworCisJLyogSWYgcXVlcnkgYWR2aWNlIHdhcyBwcm92aWRlZCwgc2VhcmNo IGZvciByZWxldmFudCBlbnRyaWVzLiAqLworCWlmIChwcHMgIT0gTlVMTCAmJiBwcHMtPnRyb3Zl ICE9IE5VTEwpCisJeworCQlwZ3BhX2lkZW50aWZpZXIgcmlkOworCQlwZ3BhX3Ryb3ZlX3Jlc3Vs dCB0cmVzdWx0X3NjYW47CisJCXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHRfcmVsOworCisJCS8q IFNlYXJjaCBmb3Igc2NhbiBhZHZpY2UgYW5kIGdlbmVyYWwgcmVsIGFkdmljZS4gKi8KKwkJcGdw YV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKHJvb3QsIHJlbC0+cmVsaWQsICZyaWQpOworCQlw Z3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOLCAxLCAm cmlkLAorCQkJCQkJICAmdHJlc3VsdF9zY2FuKTsKKwkJcGdwYV90cm92ZV9sb29rdXAocHBzLT50 cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfUkVMLCAxLCAmcmlkLAorCQkJCQkJICAmdHJlc3VsdF9y ZWwpOworCisJCS8qIElmIHJlbGV2YW50IGVudHJpZXMgd2VyZSBmb3VuZCwgYXBwbHkgdGhlbS4g Ki8KKwkJaWYgKHRyZXN1bHRfc2Nhbi5pbmRleGVzICE9IE5VTEwgfHwgdHJlc3VsdF9yZWwuaW5k ZXhlcyAhPSBOVUxMKQorCQkJcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKHJlbCwKKwkJ CQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uZW50cmllcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3Nj YW4uaW5kZXhlcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3JlbC5lbnRyaWVzLAorCQkJCQkJCQkJ CSAgIHRyZXN1bHRfcmVsLmluZGV4ZXMpOworCX0KKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91 cyBob29rLiAqLworCWlmIChwcmV2X2dldF9yZWxhdGlvbl9pbmZvKQorCQkoKnByZXZfZ2V0X3Jl bGF0aW9uX2luZm8pIChyb290LCByZWxhdGlvbk9iamVjdElkLCBpbmhwYXJlbnQsIHJlbCk7Cit9 CisKKy8qCisgKiBTZWFyY2ggZm9yIGFkdmljZSBwZXJ0YWluaW5nIHRvIGEgcHJvcG9zZWQgam9p bi4KKyAqLworc3RhdGljIHBncGFfam9pbl9zdGF0ZSAqCitwZ3BhX2dldF9qb2luX3N0YXRlKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQlSZWxPcHRJbmZvICpv dXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwpCit7CisJcGdwYV9wbGFubmVyX3N0YXRlICpw cHM7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisJYm9vbAkJbmV3X3BqcyA9IGZhbHNlOworCisJ LyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJfc2V0dXAo KS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+Z2xvYiwg cGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMgPT0gTlVMTCB8fCBwcHMtPnRyb3ZlID09 IE5VTEwpCisJeworCQkvKiBObyBhZHZpY2UgYXBwbGllcyB0byB0aGlzIHF1ZXJ5LCBoZW5jZSBu b25lIHRvIHRoaXMgam9pbnJlbC4gKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBT ZWUgd2hldGhlciB3ZSd2ZSBwcmV2aW91c2x5IGFzc29jaWF0ZWQgYSBwZ3BhX2pvaW5fc3RhdGUg d2l0aCB0aGlzCisJICogam9pbnJlbC4gSWYgd2UgaGF2ZSBub3QsIHdlIG5lZWQgdG8gdHJ5IHRv IGNvbnN0cnVjdCBvbmUuIElmIHdlIGhhdmUsCisJICogdGhlbiB0aGVyZSBhcmUgdHdvIGNhc2Vz OiAoYSkgaWYgaW5uZXJyZWwgYW5kIG91dGVycmVsIGFyZSB1bmNoYW5nZWQsCisJICogd2UgY2Fu IHNpbXBseSB1c2UgaXQsIGFuZCAoYikgaWYgdGhleSBoYXZlIGNoYW5nZWQsIHdlIG5lZWQgdG8g cmVqaWdnZXIKKwkgKiB0aGUgYXJyYXkgb2YgaWRlbnRpZmllcnMgYnV0IGNhbiBzdGlsbCBza2lw IHRoZSB0cm92ZSBsb29rdXAuCisJICovCisJcGpzID0gR2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0 YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocGpzICE9IE5VTEwpCisJ eworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVMTCAmJiBwanMtPnJlbF9pbmRleGVzID09 IE5VTEwpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIG5vIHBvdGVudGlhbGx5IHJlbGV2 YW50IGFkdmljZSwgdGhlbiB0aGUgcHJlc2VuY2Ugb2YKKwkJCSAqIHRoaXMgcGdwYV9qb2luX3N0 YXRlIGFjdHMgbGlrZSBhIG5lZ2F0aXZlIGNhY2hlIGVudHJ5OiBpdCB0ZWxscworCQkJICogdXMg bm90IHRvIGJvdGhlciBzZWFyY2hpbmcgdGhlIHRyb3ZlIGZvciBhZHZpY2UsIGJlY2F1c2Ugd2UK KwkJCSAqIHdpbGwgbm90IGZpbmQgYW55LgorCQkJICovCisJCQlyZXR1cm4gTlVMTDsKKwkJfQor CisJCWlmIChwanMtPm91dGVycmVsID09IG91dGVycmVsICYmIHBqcy0+aW5uZXJyZWwgPT0gaW5u ZXJyZWwpCisJCXsKKwkJCS8qIE5vIHVwZGF0ZXMgcmVxdWlyZWQsIHNvIGp1c3QgcmV0dXJuLiAq LworCQkJLyogWFhYLiBEb2VzIHRoaXMgbmVlZCB0byBkbyBzb21ldGhpbmcgZGlmZmVyZW50IHVu ZGVyIEdFUU8/ICovCisJCQlyZXR1cm4gcGpzOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGVy ZSdzIG5vIHBncGFfam9pbl9zdGF0ZSB5ZXQsIHdlIG5lZWQgdG8gYWxsb2NhdGUgb25lLiBUcm92 ZSBrZXlzCisJICogd2lsbCBub3QgZ2V0IGJ1aWx0IGZvciBSVEVfSk9JTiBSVEVzLCBzbyB0aGUg YXJyYXkgbWF5IGVuZCB1cCBiZWluZworCSAqIGxhcmdlciB0aGFuIG5lZWRlZC4gSXQncyBub3Qg d29ydGggdHJ5aW5nIHRvIGNvbXB1dGUgYSBwZXJmZWN0bHkKKwkgKiBhY2N1cmF0ZSBjb3VudCBo ZXJlLgorCSAqLworCWlmIChwanMgPT0gTlVMTCkKKwl7CisJCWludAkJCXBlc3NpbWlzdGljX2Nv dW50ID0gYm1zX251bV9tZW1iZXJzKGpvaW5yZWwtPnJlbGlkcyk7CisKKwkJcGpzID0gcGFsbG9j MF9vYmplY3QocGdwYV9qb2luX3N0YXRlKTsKKwkJcGpzLT5yaWRzID0gcGFsbG9jX2FycmF5KHBn cGFfaWRlbnRpZmllciwgcGVzc2ltaXN0aWNfY291bnQpOworCQluZXdfcGpzID0gdHJ1ZTsKKwl9 CisKKwkvKgorCSAqIEVpdGhlciB3ZSBqdXN0IGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pvaW5fc3Rh dGUsIG9yIHRoZSBleGlzdGluZyBvbmUKKwkgKiBuZWVkcyByZWNvbmZpZ3VyaW5nIGZvciBhIG5l dyBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFRoZSByZXF1aXJlZCBhcnJheQorCSAqIHNpemUgY2Fu J3QgY2hhbmdlLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBvbmUuCisJICovCisJ cGpzLT5vdXRlcnJlbCA9IG91dGVycmVsOworCXBqcy0+aW5uZXJyZWwgPSBpbm5lcnJlbDsKKwlw anMtPm91dGVyX2NvdW50ID0KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlkcyhy b290LCBvdXRlcnJlbC0+cmVsaWRzLCBwanMtPnJpZHMpOworCXBqcy0+aW5uZXJfY291bnQgPQor CQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJvb3QsIGlubmVycmVsLT5yZWxp ZHMsCisJCQkJCQkJCQkJICAgcGpzLT5yaWRzICsgcGpzLT5vdXRlcl9jb3VudCk7CisKKwkvKgor CSAqIElmIHdlIGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pvaW5fc3RhdGUsIHNlYXJjaCBvdXIgdHJv dmUgb2YgYWR2aWNlIGZvcgorCSAqIHJlbGV2YW50IGVudHJpZXMuIFRoZSB0cm92ZSBsb29rdXAg d2lsbCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cyBmb3IKKwkgKiBldmVyeSBvdXRlcnJlbC9pbm5l cnJlbCBjb21iaW5hdGlvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byByZXBlYXQgdGhhdAorCSAqIHdv cmsgZXZlcnkgdGltZS4KKwkgKi8KKwlpZiAobmV3X3BqcykKKwl7CisJCXBncGFfdHJvdmVfcmVz dWx0IHRyZXN1bHQ7CisKKwkJLyogRmluZCBqb2luIGVudHJpZXMuICovCisJCXBncGFfdHJvdmVf bG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJCQkJCQkgIHBqcy0+ b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBwanMtPnJpZHMsICZ0cmVz dWx0KTsKKwkJcGpzLT5qb2luX2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7CisJCXBqcy0+am9p bl9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIEZpbmQgcmVsIGVudHJpZXMuICov CisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1JFTCwK KwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkgIHBq cy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPnJlbF9lbnRyaWVzID0gdHJlc3VsdC5lbnRyaWVz OworCQlwanMtPnJlbF9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIE5vdyB0aGF0 IHRoZSBuZXcgcGdwYV9qb2luX3N0YXRlIGlzIGZ1bGx5IHZhbGlkLCBzYXZlIGEgcG9pbnRlci4g Ki8KKwkJU2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5z aW9uX2lkLCBwanMpOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBubyByZWxldmFudCBhZHZp Y2UgZm91bmQsIGp1c3QgcmV0dXJuIE5VTEwuIFRoaXMKKwkJICogcGdwYV9qb2luX3N0YXRlIHdp bGwgc3RpY2sgYXJvdW5kIGFzIGEgc29ydCBvZiBuZWdhdGl2ZSBjYWNoZQorCQkgKiBlbnRyeSwg c28gdGhhdCBmdXR1cmUgY2FsbHMgZm9yIHRoaXMgc2FtZSBqb2lucmVsIHF1aWNrbHkgcmV0dXJu CisJCSAqIE5VTEwuCisJCSAqLworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVMTCAmJiBw anMtPnJlbF9pbmRleGVzID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4g cGpzOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVs ZXZhbnQgdG8gYW55IG1ldGhvZCBvZiBpbXBsZW1lbnRpbmcKKyAqIHRoaXMgam9pbi4KKyAqCisg KiBBbHRob3VnaCB3ZSdyZSBwYXNzZWQgdGhlIG91dGVycmVsIGFuZCBpbm5lcnJlbCBoZXJlLCB0 aG9zZSBhcmUganVzdAorICogd2hhdGV2ZXIgdmFsdWVzIGhhcHBlbmVkIHRvIHByb21wdCB0aGUg Y3JlYXRpb24gb2YgdGhpcyBqb2lucmVsOyB0aGV5CisgKiBzaG91bGRuJ3QgcmVhbGx5IGluZmx1 ZW5jZSBvdXIgY2hvaWNlIG9mIHdoYXQgYWR2aWNlIHRvIGFwcGx5LgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lu cmVsLAorCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5lcnJlbCwK KwkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3RsaXN0KQorewor CXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwt PnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8qIEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBp bmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUo cm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRoZXJlIGlzIHJl bGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBpdC4gKi8KKwlp ZiAocGpzICE9IE5VTEwpCisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2FkdmljZSgmam9p bnJlbC0+cGdzX21hc2ssCisJCQkJCQkJCQkJICByb290LT5wbGFuX25hbWUsCisJCQkJCQkJCQkJ ICBwanMpOworCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZf am9pbnJlbF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5yZWxfc2V0dXApIChyb290LCBqb2lucmVsLCBv dXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOworfQor CisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZhbnQgdG8g dGhpcyBwYXJ0aWN1bGFyIG1ldGhvZCBvZgorICogaW1wbGVtZW50aW5nIHRoaXMgcGFydGljdWxh ciBqb2luLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2luX3BhdGhfc2V0dXAoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCSBSZWxPcHRJbmZvICpvdXRlcnJl bCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwgSm9pblBh dGhFeHRyYURhdGEgKmV4dHJhKQoreworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0 KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8q IEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLworCXBq cyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVs KTsKKworCS8qIElmIHRoZXJlIGlzIHJlbGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBmdW5j dGlvbiB0byBhcHBseSBpdC4gKi8KKwlpZiAocGpzICE9IE5VTEwpCisJCXBncGFfcGxhbm5lcl9h cHBseV9qb2luX3BhdGhfYWR2aWNlKGpvaW50eXBlLAorCQkJCQkJCQkJCQkmZXh0cmEtPnBnc19t YXNrLAorCQkJCQkJCQkJCQlyb290LT5wbGFuX25hbWUsCisJCQkJCQkJCQkJCXBqcyk7CisKKwkv KiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9qb2luX3BhdGhfc2V0 dXApCisJCSgqcHJldl9qb2luX3BhdGhfc2V0dXApIChyb290LCBqb2lucmVsLCBvdXRlcnJlbCwg aW5uZXJyZWwsCisJCQkJCQkJCSBqb2ludHlwZSwgZXh0cmEpOworfQorCisvKgorICogUHJlcGFy ZSBhZHZpY2UgZm9yIHVzZSBieSBhIHF1ZXJ5LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFu bmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAq cXVlcnlfc3RyaW5nLAorCQkJCSAgIGRvdWJsZSAqdHVwbGVfZnJhY3Rpb24sIEV4cGxhaW5TdGF0 ZSAqZXMpCit7CisJcGdwYV90cm92ZSAqdHJvdmUgPSBOVUxMOworCXBncGFfcGxhbm5lcl9zdGF0 ZSAqcHBzOworCWJvb2wJCW5lZWRzX3BwcyA9IGZhbHNlOworCisJLyoKKwkgKiBJZiBhbnkgYWR2 aWNlIHdhcyBwcm92aWRlZCwgYnVpbGQgYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHVzZSBkdXJpbmcK KwkgKiBwbGFubmluZy4KKwkgKi8KKwlpZiAocGdfcGxhbl9hZHZpY2VfYWR2aWNlICE9IE5VTEwg JiYgcGdfcGxhbl9hZHZpY2VfYWR2aWNlWzBdICE9ICdcMCcpCisJeworCQlMaXN0CSAgICphZHZp Y2VfaXRlbXM7CisJCWNoYXIJICAgKmVycm9yOworCisJCS8qCisJCSAqIFBhcnNpbmcgc2hvdWxk bid0IGZhaWwgaGVyZSwgYmVjYXVzZSB3ZSBtdXN0IGhhdmUgcHJldmlvdXNseSBwYXJzZWQKKwkJ ICogc3VjY2Vzc2Z1bGx5IGluIHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rLCBidXQg aWYgaXQgZG9lcywKKwkJICogZW1pdCBhIHdhcm5pbmcuCisJCSAqLworCQlhZHZpY2VfaXRlbXMg PSBwZ3BhX3BhcnNlKHBnX3BsYW5fYWR2aWNlX2FkdmljZSwgJmVycm9yKTsKKwkJaWYgKGVycm9y KQorCQkJZWxvZyhXQVJOSU5HLCAiY291bGQgbm90IHBhcnNlIGFkdmljZTogJXMiLCBlcnJvcik7 CisKKwkJLyoKKwkJICogSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBhZHZpY2Ugc3RyaW5nIHdhcyBu b24tZW1wdHkgYnV0IGNvbnRhaW5lZCBubworCQkgKiBhY3R1YWwgYWR2aWNlLCBlLmcuIGl0IHdh cyBhbGwgd2hpdGVzcGFjZS4KKwkJICovCisJCWlmIChhZHZpY2VfaXRlbXMgIT0gTklMKQorCQl7 CisJCQl0cm92ZSA9IHBncGFfYnVpbGRfdHJvdmUoYWR2aWNlX2l0ZW1zKTsKKwkJCW5lZWRzX3Bw cyA9IHRydWU7CisJCX0KKwl9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKwkvKgor CSAqIElmIGFzc2VydHMgYXJlIGVuYWJsZWQsIGFsd2F5cyBidWlsZCBhIHByaXZhdGUgc3RhdGUg b2JqZWN0IGZvcgorCSAqIGNyb3NzLWNoZWNrcy4KKwkgKi8KKwluZWVkc19wcHMgPSB0cnVlOwor I2VuZGlmCisKKwkvKiBJbml0aWFsaXplIGFuZCBzdG9yZSBwcml2YXRlIHN0YXRlLCBpZiByZXF1 aXJlZC4gKi8KKwlpZiAobmVlZHNfcHBzKQorCXsKKwkJcHBzID0gcGFsbG9jMF9vYmplY3QocGdw YV9wbGFubmVyX3N0YXRlKTsKKwkJcHBzLT5leHBsYWluX3N0YXRlID0gZXM7CisJCXBwcy0+dHJv dmUgPSB0cm92ZTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCXBwcy0+cmlfY2hlY2tf aGFzaCA9CisJCQlwZ3BhX3JpX2NoZWNrX2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwgMTAy NCwgTlVMTCk7CisjZW5kaWYKKwkJU2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2Is IHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwcHMpOworCX0KK30KKworLyoKKyAqIENhcnJ5IG91dCB3 aGF0ZXZlciB3b3JrIHdlIHdhbnQgdG8gZG8gYWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xv YiwgUXVlcnkgKnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5l ZFN0bXQgKnBzdG10KQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBncGFfdHJvdmUg KnRyb3ZlID0gTlVMTDsKKwlFeHBsYWluU3RhdGUgKmVzID0gTlVMTDsKKwlwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgd2Fsa2VyID0gezB9OwkvKiBwbGFjYXRlIGNvbXBpbGVyICovCisJYm9vbAkJ ZG9fYWR2aWNlX2ZlZWRiYWNrOworCWJvb2wJCWRvX2NvbGxlY3RfYWR2aWNlOworCUxpc3QJICAg KnBncGFfaXRlbXMgPSBOSUw7CisJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycyA9IE5V TEw7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5l cl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShnbG9i LCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBwcyAhPSBOVUxMKQorCXsKKwkJdHJvdmUg PSBwcHMtPnRyb3ZlOworCQllcyA9IHBwcy0+ZXhwbGFpbl9zdGF0ZTsKKwl9CisKKwkvKiBJZiBh dCBsZWFzdCBvbmUgY29sbGVjdG9yIGlzIGVuYWJsZWQsIGdlbmVyYXRlIGFkdmljZS4gKi8KKwlk b19jb2xsZWN0X2FkdmljZSA9IChwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 ID4gMCB8fAorCQkJCQkJIHBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0ID4g MCk7CisKKwkvKiBJZiB3ZSBhcHBsaWVkIGFkdmljZSwgZ2VuZXJhdGUgZmVlZGJhY2suICovCisJ ZG9fYWR2aWNlX2ZlZWRiYWNrID0gKHRyb3ZlICE9IE5VTEwgJiYgZXMgIT0gTlVMTCk7CisKKwkv KiBJZiBlaXRoZXIgb2YgdGhlIGFib3ZlIGFwcGx5LCBhbmFseXplIHRoZSByZXN1bHRpbmcgUGxh bm5lZFN0bXQuICovCisJaWYgKGRvX2NvbGxlY3RfYWR2aWNlIHx8IGRvX2FkdmljZV9mZWVkYmFj aykKKwl7CisJCXBncGFfcGxhbl93YWxrZXIoJndhbGtlciwgcHN0bXQpOworCQlydF9pZGVudGlm aWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQpOwor CX0KKworCS8qCisJICogSWYgYWR2aWNlIGNvbGxlY3Rpb24gaXMgZW5hYmxlZCwgcHV0IHRoZSBh ZHZpY2UgaW4gc3RyaW5nIGZvcm0gYW5kIHNlbmQKKwkgKiBpdCB0byB0aGUgY29sbGVjdG9yLgor CSAqLworCWlmIChkb19jb2xsZWN0X2FkdmljZSkKKwl7CisJCWNoYXIJICAgKmFkdmljZV9zdHJp bmc7CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkvKiBHZW5lcmF0ZSBhIHRleHR1YWwgYWR2 aWNlIHN0cmluZy4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXBncGFfb3V0cHV0X2Fk dmljZSgmYnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCWFkdmljZV9zdHJpbmcgPSBi dWYuZGF0YTsKKworCQkvKiBJZiB0aGUgYWR2aWNlIHN0cmluZyBpcyBlbXB0eSwgZG9uJ3QgYm90 aGVyIGNvbGxlY3RpbmcgaXQuICovCisJCWlmIChhZHZpY2Vfc3RyaW5nWzBdICE9ICdcMCcpCisJ CQlwZ3BhX2NvbGxlY3RfYWR2aWNlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9zdHJpbmcsIGFkdmlj ZV9zdHJpbmcpOworCisJCS8qCisJCSAqIElmIHdlJ3ZlIGdvbmUgdG8gdGhlIHRyb3VibGUgb2Yg Z2VuZXJhdGluZyBhbiBhZHZpY2Ugc3RyaW5nLCBhbmQgaWYKKwkJICogd2UncmUgaW5zaWRlIEVY UExBSU4sIHNhdmUgdGhlIHN0cmluZyBzbyB3ZSBkb24ndCBuZWVkIHRvCisJCSAqIHJlZ2VuZXJh dGUgaXQuCisJCSAqLworCQlpZiAoZXMgIT0gTlVMTCkKKwkJCXBncGFfaXRlbXMgPSBsYXBwZW5k KHBncGFfaXRlbXMsCisJCQkJCQkJCSBtYWtlRGVmRWxlbSgiYWR2aWNlX3N0cmluZyIsCisJCQkJ CQkJCQkJCSAoTm9kZSAqKSBtYWtlU3RyaW5nKGFkdmljZV9zdHJpbmcpLAorCQkJCQkJCQkJCQkg LTEpKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBwbGFubmluZyB3aXRoaW4gRVhQTEFJTiwg bWFrZSBhcnJhbmdlbWVudHMgdG8gYWxsb3cgRVhQTEFJTgorCSAqIHRvIHRlbGwgdGhlIHVzZXIg d2hhdCBoYXMgaGFwcGVuZWQgd2l0aCB0aGUgcHJvdmlkZWQgYWR2aWNlLgorCSAqCisJICogTkI6 IElmIEVYUExBSU4gaXMgdXNlZCBvbiBhIHByZXBhcmVkIGlzIGEgcHJlcGFyZWQgc3RhdGVtZW50 LCBwbGFubmluZworCSAqIHdpbGwgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGhhcHBlbmVkIHdpdGhv dXQgcmVjb3JkaW5nIHRoZXNlIGRldGFpbHMuIFdlCisJICogY291bGQgY29uc2lkZXIgYWRkaW5n IGEgR1VDIHRvIGNhdGVyIHRvIHRoYXQgc2NlbmFyaW87IG9yIHdlIGNvdWxkIGRvCisJICogdGhp cyB3b3JrIGFsbCB0aGUgdGltZSwgYnV0IHRoYXQgc2VlbXMgbGlrZSB0b28gbXVjaCBvdmVyaGVh ZC4KKwkgKi8KKwlpZiAoZG9fYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJTGlzdAkgICAqZmVlZGJh Y2sgPSBOSUw7CisKKwkJLyoKKwkJICogSW5qZWN0IGEgTm9kZS10cmVlIHJlcHJlc2VudGF0aW9u IG9mIGFsbCB0aGUgdHJvdmUtZW50cnkgZmxhZ3MgaW50bworCQkgKiB0aGUgUGxhbm5lZFN0bXQu CisJCSAqLworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJh Y2ssCisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX1ND QU4sCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisJCWZlZWRiYWNrID0g cGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3Zl LAorCQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwkJCQkJCQkJCQkJCXJ0X2lk ZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2Zl ZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RS T1ZFX0xPT0tVUF9SRUwsCisJCQkJCQkJCQkJCQlydF9pZGVudGlmaWVycywgJndhbGtlcik7CisK KwkJcGdwYV9pdGVtcyA9IGxhcHBlbmQocGdwYV9pdGVtcywgbWFrZURlZkVsZW0oImZlZWRiYWNr IiwKKwkJCQkJCQkJCQkJCQkgKE5vZGUgKikgZmVlZGJhY2ssCisJCQkJCQkJCQkJCQkJIC0xKSk7 CisJfQorCisJLyogUHVzaCB3aGF0ZXZlciBkYXRhIHdlJ3JlIHNhdmluZyBpbnRvIHRoZSBQbGFu bmVkU3RtdC4gKi8KKwlpZiAocGdwYV9pdGVtcyAhPSBOSUwpCisJCXBzdG10LT5leHRlbnNpb25f c3RhdGUgPQorCQkJbGFwcGVuZChwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAorCQkJCQltYWtlRGVm RWxlbSgicGdfcGxhbl9hZHZpY2UiLCAoTm9kZSAqKSBwZ3BhX2l0ZW1zLCAtMSkpOworCisJLyoK KwkgKiBJZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBjcm9zcy1jaGVjayB0aGUgZ2VuZXJhdGVk IHJhbmdlIHRhYmxlCisJICogaWRlbnRpZmllcnMuCisJICovCisJaWYgKHBwcyAhPSBOVUxMKQor CQlwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocHBzLCBwc3RtdCk7Cit9CisKKy8qCisgKiBFbmZv cmNlIG92ZXJhbGwgcmVzdHJpY3Rpb25zIG9uIGEgam9pbiByZWxhdGlvbiB0aGF0IGFwcGx5IHVu aWZvcm1seQorICogcmVnYXJkbGVzcyBvZiB0aGUgY2hvaWNlIG9mIGlubmVyIGFuZCBvdXRlciBy ZWwuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2Uo dWludDY0ICpwZ3NfbWFza19wLCBjaGFyICpwbGFuX25hbWUsCisJCQkJCQkJCSAgcGdwYV9qb2lu X3N0YXRlICpwanMpCit7CisJaW50CQkJaSA9IC0xOworCWludAkJCWZsYWdzOworCWJvb2wJCWdh dGhlcl9jb25mbGljdCA9IGZhbHNlOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOworCUJpdG1h cHNldCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpnYXRoZXJf ZnVsbF9tYXRjaCA9IE5VTEw7CisJYm9vbAkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IGZhbHNl OworCWludAkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IDA7CisJQml0bWFwc2V0ICAqcGFydGl0 aW9ud2lzZV9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpwYXJ0aXRpb253aXNl X2Z1bGxfbWF0Y2ggPSBOVUxMOworCisJLyogSXRlcmF0ZSBvdmVyIGFsbCBwb3NzaWJseS1yZWxl dmFudCBhZHZpY2UuICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+cmVsX2lu ZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpzLT5y ZWxfZW50cmllc1tpXTsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisJCWJvb2wJCWZ1bGxfbWF0Y2gg PSBmYWxzZTsKKwkJdWludDY0CQlteV9nYXRoZXJfbWFzayA9IDA7CisJCWludAkJCW15X3BhcnRp dGlvbndpc2Vfb3V0Y29tZSA9IDA7CS8qID4wIHllcywgPDAgbm8gKi8KKworCQkvKgorCQkgKiBG b3IgR0FUSEVSIGFuZCBHQVRIRVJfTUVSR0UsIGlmIHRoZSBzcGVjaWZpZWQgcmVsYXRpb25zIGV4 YWN0bHkKKwkJICogbWF0Y2ggdGhpcyBqb2lucmVsLCBkbyB3aGF0ZXZlciB0aGUgYWR2aWNlIHNh eXM7IG90aGVyd2lzZSwgZG9uJ3QKKwkJICogYWxsb3cgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBh dCB0aGlzIGxldmVsLiBGb3IgTk9fR0FUSEVSLCB0aGVyZQorCQkgKiBtdXN0IGJlIGEgc2luZ2xl IHRhcmdldCByZWxhdGlvbiB3aGljaCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoaXMKKwkJICogam9p bnJlbCwgc28ganVzdCBkb24ndCBhbGxvdyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGhlcmUsIGZ1 bGwKKwkJICogc3RvcC4KKwkJICovCisJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX05PX0dB VEhFUikKKwkJeworCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsK KwkJCWZ1bGxfbWF0Y2ggPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJaW50CQkJdG90YWxf Y291bnQ7CisKKwkJCXRvdGFsX2NvdW50ID0gcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJf Y291bnQ7CisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldCh0b3RhbF9jb3Vu dCwgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJZW50cnktPnRhcmdldCk7CisJCQlBc3NlcnQoaXRt ICE9IFBHUEFfSVRNX0RJU0pPSU5UKTsKKworCQkJaWYgKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCkK KwkJCXsKKwkJCQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJCQlpZiAoZW50cnktPnRhZyA9PSBQR1BB X1RBR19QQVJUSVRJT05XSVNFKQorCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAxOwor CQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSKQorCQkJCQlteV9nYXRo ZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RB R19HQVRIRVJfTUVSR0UpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dBVEhFUl9NRVJHRTsK KwkJCQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGFkdmljZSB0YWc6ICVkIiwK KwkJCQkJCSAoaW50KSBlbnRyeS0+dGFnKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAo ZW50cnktPnRhZyA9PSBQR1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQkJCXsKKwkJCQkJbXlfcGFy dGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJ REVSX05PTlBBUlRJQUw7CisJCQkJfQorCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9U QUdfR0FUSEVSIHx8CisJCQkJCQkgZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0Up CisJCQkJeworCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNvbWUgPSAtMTsKKwkJCQkJbXlfZ2F0 aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCQl9CisJCQkJZWxzZQorCQkJ CQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBhZHZpY2UgdGFnOiAlZCIsCisJCQkJCQkgKGludCkg ZW50cnktPnRhZyk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlfZ2F0aGVy X21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2UgYSBub3RlIGlmIHRoZQorCQkgKiBhZHZp Y2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMpIHJlbWVt YmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2guCisJCSAq LworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJeworCQkJaWYgKGdhdGhlcl9tYXNrICE9 IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21hc2spCisJCQkJZ2F0aGVyX2NvbmZsaWN0 ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0aGVyX21hc2s7CisJCQlpZiAoZnVsbF9t YXRjaCkKKwkJCQlnYXRoZXJfZnVsbF9tYXRjaCA9IGJtc19hZGRfbWVtYmVyKGdhdGhlcl9mdWxs X21hdGNoLCBpKTsKKwkJCWVsc2UKKwkJCQlnYXRoZXJfcGFydGlhbF9tYXRjaCA9IGJtc19hZGRf bWVtYmVyKGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBpKTsKKwkJfQorCisJCS8qCisJCSAqIExpa2V3 aXNlLCBpZiB3ZSBzZXQgbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lIHVwIGFib3ZlLCB0aGVuIHdl ICgxKQorCQkgKiBtYWtlIGEgbm90ZSBpZiB0aGUgYWR2aWNlIGNvbmZsaWN0ZWQsICgyKSByZW1l bWJlciB3aGF0IHRoZSBkZXNpcmVkCisJCSAqIG91dGNvbWUgd2FzLCBhbmQgKDMpIHJlbWVtYmVy IHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9yIHBhcnRpYWwKKwkJICogbWF0Y2guCisJCSAqLwor CQlpZiAobXlfcGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDApCisJCXsKKwkJCWlmIChwYXJ0aXRp b253aXNlX291dGNvbWUgIT0gMCAmJgorCQkJCXBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSBteV9w YXJ0aXRpb253aXNlX291dGNvbWUpCisJCQkJcGFydGl0aW9ud2lzZV9jb25mbGljdCA9IHRydWU7 CisJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgPSBteV9wYXJ0aXRpb253aXNlX291dGNvbWU7CisJ CQlpZiAoZnVsbF9tYXRjaCkKKwkJCQlwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2ggPQorCQkJCQli bXNfYWRkX21lbWJlcihwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJ CXBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHBhcnRp dGlvbndpc2VfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKgorCSAqIE1hcmsgZXZl cnkgR2F0aGVyLXJlbGF0ZWQgcGllY2Ugb2YgYWR2aWNlIGFzIHBhcnRpYWxseSBtYXRjaGVkLCBh bmQgaWYKKwkgKiB0aGUgc2V0IG9mIHRhcmdldHMgZXhhY3RseSBtYXRjaGVkIHRoaXMgcmVsYXRp b24sIGZ1bGx5IG1hdGNoZWQuIElmCisJICogdGhlcmUgd2FzIGEgY29uZmxpY3QsIG1hcmsgdGhl bSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BBUlRJ QUw7CisJaWYgKGdhdGhlcl9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElO RzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfcGFydGlh bF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ry b3ZlX3NldF9mbGFncyhwanMtPnJlbF9lbnRyaWVzLCBnYXRoZXJfZnVsbF9tYXRjaCwgZmxhZ3Mp OworCisJLyogTGlrZXdpc2UgZm9yIHBhcnRpdGlvbndpc2UgYWR2aWNlLiAqLworCWZsYWdzID0g UEdQQV9URV9NQVRDSF9QQVJUSUFMOworCWlmIChwYXJ0aXRpb253aXNlX2NvbmZsaWN0KQorCQlm bGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+ cmVsX2VudHJpZXMsIHBhcnRpdGlvbndpc2VfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdz IHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPnJlbF9l bnRyaWVzLCBwYXJ0aXRpb253aXNlX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRoZXJl IGlzIGEgbm9uLWNvbmZsaWN0aW5nIGdhdGhlciBzcGVjaWZpY2F0aW9uLCBlbmZvcmNlIGl0LiAq LworCWlmIChnYXRoZXJfbWFzayAhPSAwICYmICFnYXRoZXJfY29uZmxpY3QpCisJeworCQkqcGdz X21hc2tfcCAmPQorCQkJfihQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19DT05T SURFUl9OT05QQVJUSUFMKTsKKwkJKnBnc19tYXNrX3AgfD0gZ2F0aGVyX21hc2s7CisJfQorCisJ LyoKKwkgKiBJZiB0aGVyZSBpcyBhIG5vbi1jb25mbGljdGluZyBwYXJ0aXRpb253aXNlIHNwZWNp ZmljYXRpb24sIGVuZm9yY2UuCisJICoKKwkgKiBUbyBmb3JjZSBhIHBhcnRpdGlvbndpc2Ugam9p biwgd2UgZGlzYWJsZSBhbGwgdGhlIG9yZGluYXJ5IG1lYW5zIG9mCisJICogcGVyZm9ybWluZyBh IGpvaW4sIGFuZCBpbnN0ZWFkIG9ubHkgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBwYXRocyBoZXJl LgorCSAqIFRvIHByZXZlbnQgb25lLCB3ZSBqdXN0IGRpc2FibGUgQXBwZW5kIGFuZCBNZXJnZUFw cGVuZC4gIE5vdGUgdGhhdCB3ZQorCSAqIG11c3Qgbm90IHVuc2V0IFBHU19DT05TSURFUl9QQVJU SVRJT05XSVNFIGV2ZW4gd2hlbiB3ZSBkb24ndCB3YW50IGEKKwkgKiBwYXJ0aXRpb253aXNlIGpv aW4gaGVyZSwgYmVjYXVzZSB3ZSBtaWdodCB3YW50IG9uZSBhdCBhIGhpZ2hlciBsZXZlbAorCSAq IHRoYXQgaXMgY29uc3RydWN0aW5nIHVzaW5nIHBhdGhzIGZyb20gdGhpcyBsZXZlbC4KKwkgKi8K KwlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lICE9IDAgJiYgIXBhcnRpdGlvbndpc2VfY29uZmxp Y3QpCisJeworCQlpZiAocGFydGl0aW9ud2lzZV9vdXRjb21lID4gMCkKKwkJCSpwZ3NfbWFza19w ID0gKCpwZ3NfbWFza19wICYgflBHU19KT0lOX0FOWSkgfAorCQkJCVBHU19BUFBFTkQgfCBQR1Nf TUVSR0VfQVBQRU5EIHwgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0U7CisJCWVsc2UKKwkJCSpw Z3NfbWFza19wICY9IH4oUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQpOworCX0KK30KKwor LyoKKyAqIEVuZm9yY2UgcmVzdHJpY3Rpb25zIG9uIHRoZSBqb2luIG9yZGVyIG9yIGpvaW4gbWV0 aG9kLgorICoKKyAqIE5vdGUgdGhhdCwgYWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8gdmlldyBQ QVJUSVRJT05XSVNFIGFkdmljZSBhcworICogY29udHJvbGxpbmcgdGhlIGpvaW4gbWV0aG9kLCB3 ZSBjYW4ndCBlbmZvcmNlIGl0IGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUKKyAqIHBhdGggd2hlcmUg dGhpcyBleGVjdXRlcyBvbmx5IGRlYWxzIHdpdGggam9pbiBwYXRocyB0aGF0IGFyZSBidWlsdCBk aXJlY3RseQorICogZnJvbSBhIHNpbmdsZSBvdXRlciBwYXRoIGFuZCBhIHNpbmdsZSBpbm5lciBw YXRoLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZp Y2UoSm9pblR5cGUgam9pbnR5cGUsIHVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJCWNoYXIg KnBsYW5fbmFtZSwKKwkJCQkJCQkJCXBncGFfam9pbl9zdGF0ZSAqcGpzKQoreworCWludAkJCWkg PSAtMTsKKwlCaXRtYXBzZXQgICpqb19wZXJtaXRfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0 ICAqam9fZGVueV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqbV9pbmRleGVzID0gTlVM TDsKKwlib29sCQlqbV9jb25mbGljdCA9IGZhbHNlOworCXVpbnQzMgkJam9pbl9tYXNrID0gMDsK KworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgcG9zc2libHktcmVsZXZhbnQgYWR2aWNlLiAqLworCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwanMtPmpvaW5faW5kZXhlcywgaSkpID49IDApCisJ eworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZwanMtPmpvaW5fZW50cmllc1tpXTsKKwkJ dWludDMyCQlteV9qb2luX21hc2s7CisKKwkJLyogSGFuZGxlIGpvaW4gb3JkZXIgYWR2aWNlLiAq LworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19KT0lOX09SREVSKQorCQl7CisJCQlpZiAo cGdwYV9qb2luX29yZGVyX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJ CQkgcGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJ IGVudHJ5KSkKKwkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1p dF9pbmRleGVzLCBpKTsKKwkJCWVsc2UKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21l bWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5k bGUgam9pbiBzdHJhdGVneSBhZHZpY2UuICovCisJCW15X2pvaW5fbWFzayA9IHBncGFfam9pbl9z dHJhdGVneV9tYXNrX2Zyb21fYWR2aWNlX3RhZyhlbnRyeS0+dGFnKTsKKwkJaWYgKG15X2pvaW5f bWFzayAhPSAwKQorCQl7CisJCQlib29sCQlwZXJtaXQ7CisJCQlib29sCQlyZXN0cmljdF9tZXRo b2Q7CisKKwkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9JTikKKwkJCQlw ZXJtaXQgPSBwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAor CQkJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5y aWRzLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJCSAgICZyZXN0cmljdF9t ZXRob2QpOworCQkJZWxzZQorCQkJCXBlcm1pdCA9IHBncGFfam9pbl9tZXRob2RfcGVybWl0c19q b2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAgcGpzLT5pbm5lcl9jb3VudCwK KwkJCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCQkJICAgZW50cnksCisJCQkJ CQkJCQkJCQkJICAgJnJlc3RyaWN0X21ldGhvZCk7CisJCQlpZiAoIXBlcm1pdCkKKwkJCQlqb19k ZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJZWxz ZSBpZiAocmVzdHJpY3RfbWV0aG9kKQorCQkJeworCQkJCWpvX3Blcm1pdF9pbmRleGVzID0gYm1z X2FkZF9tZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJCWptX2luZGV4ZXMgPSBibXNf YWRkX21lbWJlcihqb19wZXJtaXRfaW5kZXhlcywgaSk7CisJCQkJaWYgKGpvaW5fbWFzayAhPSAw ICYmIGpvaW5fbWFzayAhPSBteV9qb2luX21hc2spCisJCQkJCWptX2NvbmZsaWN0ID0gdHJ1ZTsK KwkJCQlqb2luX21hc2sgPSBteV9qb2luX21hc2s7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQor CisJCS8qIEhhbmRsZSBzZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZS4gKi8KKwkJaWYgKGVudHJ5 LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFIHx8CisJCQllbnRyeS0+dGFnID09IFBH UEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUpCisJCXsKKwkJCWJvb2wJCWFkdmljZV91bmlxdWU7 CisJCQlib29sCQlqdF91bmlxdWU7CisJCQlib29sCQlqdF9ub25fdW5pcXVlOworCQkJYm9vbAkJ cmVzdHJpY3RfbWV0aG9kOworCisJCQkvKiBBZHZpY2Ugd2FudHMgdG8gdW5pcXVlLWlmeSBhbmQg dXNlIGEgcmVndWxhciBqb2luPyAqLworCQkJYWR2aWNlX3VuaXF1ZSA9IChlbnRyeS0+dGFnID09 IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSk7CisKKwkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5nIHRv IHVuaXF1ZS1pZnkgYW5kIHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCWp0X3VuaXF1ZSA9IChq b2ludHlwZSA9PSBKT0lOX1VOSVFVRV9JTk5FUiB8fAorCQkJCQkJIGpvaW50eXBlID09IEpPSU5f VU5JUVVFX09VVEVSKTsKKworCQkJLyogUGxhbm5lciBpcyB0cnlpbmcgYSBzZW1pLWpvaW4sIHdp dGhvdXQgdW5pcXVlLWlmeWluZz8gKi8KKwkJCWp0X25vbl91bmlxdWUgPSAoam9pbnR5cGUgPT0g Sk9JTl9TRU1JIHx8CisJCQkJCQkJIGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VNSSk7CisKKwkJ CS8qCisJCQkgKiBUaGVzZSBhZHZpY2UgdGFncyBiZWhhdmUgdmVyeSBtdWNoIGxpa2Ugam9pbiBt ZXRob2QgYWR2aWNlLCBpbgorCQkJICogdGhhdCB0aGV5IHdhbnQgdGhlIGlubmVyIHNpZGUgb2Yg dGhlIHNlbWlqb2luIHRvIG1hdGNoIHRoZQorCQkJICogcmVsYXRpb25zIGxpc3RlZCBpbiB0aGUg YWR2aWNlLiBIZW5jZSwgd2UgdGVzdCB3aGV0aGVyIGpvaW4KKwkJCSAqIG1ldGhvZCBhZHZpY2Ug d291bGQgZW5mb3JjZSBhIGpvaW4gb3JkZXIgcmVzdHJpY3Rpb24gaGVyZSwgYW5kCisJCQkgKiBk aXNhbGxvdyB0aGUgam9pbiBpZiBub3QuCisJCQkgKgorCQkJICogWFhYLiBUaGluayBoYXJkZXIg YWJvdXQgcmlnaHQgc2VtaWpvaW5zLgorCQkJICovCisJCQlpZiAoIXBncGFfam9pbl9tZXRob2Rf cGVybWl0c19qb2luKHBqcy0+b3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJf Y291bnQsCisJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJICAgZW50cnksCisJ CQkJCQkJCQkJCSAgICZyZXN0cmljdF9tZXRob2QpKQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJt c19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQllbHNlIGlmIChyZXN0cmljdF9t ZXRob2QpCisJCQl7CisJCQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19w ZXJtaXRfaW5kZXhlcywgaSk7CisJCQkJaWYgKCFqdF91bmlxdWUgJiYgIWp0X25vbl91bmlxdWUp CisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHNlbWlq b2luIHRvIHdoaWNoIFNKX1VOSVFVRQorCQkJCQkgKiBvciBTSl9OT05fVU5JUVVFIGNhbiBiZSBh cHBsaWVkLgorCQkJCQkgKi8KKwkJCQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfSU5BUFBMSUNB QkxFOworCQkJCX0KKwkJCQllbHNlIGlmIChhZHZpY2VfdW5pcXVlICE9IGp0X3VuaXF1ZSkKKwkJ CQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsK KwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGUgYWR2aWNlIGlu ZGljYXRlcyBib3RoIHRoYXQgdGhpcyBqb2luIG9yZGVyIGlzIHBlcm1pc3NpYmxlIGFuZAorCSAq IGFsc28gdGhhdCBpdCBpc24ndCwgdGhlbiBtYXJrIGFkdmljZSByZWxhdGVkIHRvIHRoZSBqb2lu IG9yZGVyIGFzCisJICogY29uZmxpY3RpbmcuCisJICovCisJaWYgKGpvX3Blcm1pdF9pbmRleGVz ICE9IE5VTEwgJiYgam9fZGVueV9pbmRleGVzICE9IE5VTEwpCisJeworCQlwZ3BhX3Ryb3ZlX3Nl dF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam9fcGVybWl0X2luZGV4ZXMsCisJCQkJCQkJIFBH UEFfVEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50 cmllcywgam9fZGVueV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwl9 CisKKwkvKgorCSAqIElmIG1vcmUgdGhhbiBvbmUgam9pbiBtZXRob2Qgc3BlY2lmaWNhdGlvbiBp cyByZWxldmFudCBoZXJlIGFuZCB0aGV5CisJICogZGlmZmVyLCBtYXJrIHRoZW0gYWxsIGFzIGNv bmZsaWN0aW5nLgorCSAqLworCWlmIChqbV9jb25mbGljdCkKKwkJcGdwYV90cm92ZV9zZXRfZmxh Z3MocGpzLT5qb2luX2VudHJpZXMsIGptX2luZGV4ZXMsCisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJ Q1RJTkcpOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGFkdmlzZWQgdG8gZGVueSB0aGlzIGpvaW4g b3JkZXIsIHRoZW4gZG8gc28uIEhvd2V2ZXIsIGlmIHdlCisJICogd2VyZSBhbHNvIGFkdmlzZWQg dG8gcGVybWl0IGl0LCB0aGVuIGRvIG5vdGhpbmcsIHNpbmNlIHRoZSBhZHZpY2UKKwkgKiBjb25m bGljdHMuCisJICovCisJaWYgKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMICYmIGpvX3Blcm1pdF9p bmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wID0gMDsKKworCS8qCisJICogSWYgd2Ugd2Vy ZSBhZHZpc2VkIHRvIHJlc3RyaWN0IHRoZSBqb2luIG1ldGhvZCwgdGhlbiBkbyBzby4gSG93ZXZl ciwgaWYKKwkgKiB3ZSBnb3QgY29uZmxpY3Rpbmcgam9pbiBtZXRob2QgYWR2aWNlIG9yIHdlcmUg YWxzbyBhZHZpc2VkIHRvIHJlamVjdAorCSAqIHRoaXMgam9pbiBvcmRlciBjb21wbGV0ZWx5LCB0 aGVuIGluc3RlYWQgZG8gbm90aGluZy4KKwkgKi8KKwlpZiAoam9pbl9tYXNrICE9IDAgJiYgIWpt X2NvbmZsaWN0ICYmIGpvX2RlbnlfaW5kZXhlcyA9PSBOVUxMKQorCQkqcGdzX21hc2tfcCA9ICgq cGdzX21hc2tfcCAmIH5QR1NfSk9JTl9BTlkpIHwgam9pbl9tYXNrOworfQorCisvKgorICogVHJh bnNsYXRlIGFuIGFkdmljZSB0YWcgaW50byBhIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNr LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIHRhZyB0eXBlcyB0aGF0 IGRvbid0IHJlcHJlc2VudCBqb2luCisgKiBzdHJhdGVnaWVzLiBJbiBzdWNoIGNhc2VzLCB3ZSBq dXN0IHJldHVybiAwLCB3aGljaCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoCisgKiBhIHZhbGlkIG1h c2suCisgKi8KK3N0YXRpYyB1aW50NjQKK3BncGFfam9pbl9zdHJhdGVneV9tYXNrX2Zyb21fYWR2 aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcpCit7CisJc3dpdGNoICh0YWcpCisJewor CQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBQR1NfRk9SRUlHTkpPSU47 CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiBQR1NfTUVSR0VK T0lOX1BMQUlOOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQly ZXR1cm4gUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURf TE9PUF9QTEFJTjoKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfUExBSU47CisJCWNhc2UgUEdQQV9U QUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX01BVEVS SUFMSVpFOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1cm4g UEdTX05FU1RMT09QX01FTU9JWkU7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJcmV0 dXJuIFBHU19IQVNISk9JTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCX0KK30KKworLyoK KyAqIERvZXMgYSBjZXJ0YWluIGl0ZW0gb2Ygam9pbiBvcmRlciBhZHZpY2UgcGVybWl0IGEgY2Vy dGFpbiBqb2luPworICovCitzdGF0aWMgYm9vbAorcGdwYV9qb2luX29yZGVyX3Blcm1pdHNfam9p bihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgcGdwYV9pZGVudGlm aWVyICpyaWRzLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sKKwlib29sCQls b29wID0gdHJ1ZTsKKwlib29sCQlzdWJsaXN0ID0gZmFsc2U7CisJaW50CQkJbGVuZ3RoOworCWlu dAkJCW91dGVyX2xlbmd0aDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCA9IGVudHJ5LT50 YXJnZXQ7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICpwcmVmaXhfdGFyZ2V0OworCisJLyogV2UgZGVm aW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRy eS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJLyoKKwkg KiBGaW5kIHRoZSBpbm5lcm1vc3Qgc3VibGlzdCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzOyBpZiBu byBzdWJsaXN0IGRvZXMsCisJICogdGhlbiBjb250aW51ZSBwcm9jZXNzaW5nIHdpdGggdGhlIHRv cGxldmVsIGxpc3QuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFkdmljZSBzYXlzIEpP SU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHRoZW4gd2UKKwkgKiBzaG91bGQgZXZhbHVhdGUg am9pbnMgdGhhdCBvbmx5IGludm9sdmUgdDMsIHQ0LCBhbmQvb3IgdDUgYWdhaW5zdCB0aGUKKwkg KiAodDMgdDQgdDUpIHN1Ymxpc3QsIGFuZCBvdGhlcnMgYWdhaW5zdCB0aGUgZnVsbCBsaXN0Lgor CSAqCisJICogTm90ZSB0aGF0ICgxKSBvdXRlcm1vc3Qgc3VibGlzdCBpcyBhbHdheXMgb3JkZXJl ZCBhbmQgKDIpIHdoZW5ldmVyIHdlCisJICogem9vbSBpbnRvIGFuIHVub3JkZXJlZCBzdWJsaXN0 LCB3ZSBpbnN0YW50bHkgYWNjZXB0IHRoZSBwcm9wb3NlZCBqb2luLgorCSAqIElmIHRoZSBhZHZp Y2Ugc2F5cyBKT0lOX09SREVSKHQxIHQyIHt0MyB0NCB0NX0pLCBhbnkgYXBwcm9hY2ggdG8KKwkg KiBqb2luaW5nIHQzLCB0NCwgYW5kL29yIHQ1IGlzIGFjY2VwdGFibGUuCisJICovCisJd2hpbGUg KGxvb3ApCisJeworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVE X0xJU1QpOworCisJCWxvb3AgPSBmYWxzZTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFy Z2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCXBncGFfaXRtX3R5 cGUgaXRtOworCisJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVO VElGSUVSKQorCQkJCWNvbnRpbnVlOworCisJCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNo X3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJcmlkcywgY2hp bGRfdGFyZ2V0KTsKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwgaXRtID09IFBHUEFf SVRNX0tFWVNfQVJFX1NVQlNFVCkKKwkJCXsKKwkJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9 PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQkJeworCQkJCQl0YXJnZXQgPSBjaGlsZF90 YXJnZXQ7CisJCQkJCXN1Ymxpc3QgPSB0cnVlOworCQkJCQlsb29wID0gdHJ1ZTsKKwkJCQkJYnJl YWs7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChjaGlsZF90YXJnZXQtPnR0 eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKTsKKwkJCQkJcmV0dXJuIHRydWU7CisJ CQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBUcnkgdG8gZmluZCBhIHByZWZpeCBvZiB0 aGUgc2VsZWN0ZWQgam9pbiBvcmRlciBsaXN0IHRoYXQgaXMgZXhhY3RseQorCSAqIGVxdWFsIHRv IHRoZSBvdXRlciBzaWRlIG9mIHRoZSBwcm9wb3NlZCBqb2luLgorCSAqLworCWxlbmd0aCA9IGxp c3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pOworCXByZWZpeF90YXJnZXQgPSBwYWxsb2MwX29i amVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCXByZWZpeF90YXJnZXQtPnR0eXBlID0gUEdQQV9U QVJHRVRfT1JERVJFRF9MSVNUOworCWZvciAob3V0ZXJfbGVuZ3RoID0gMTsgb3V0ZXJfbGVuZ3Ro IDw9IGxlbmd0aDsgKytvdXRlcl9sZW5ndGgpCisJeworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKwor CQkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBpbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4gKi8KKwkJ aWYgKHByZWZpeF90YXJnZXQtPmNoaWxkcmVuICE9IE5VTEwpCisJCQlsaXN0X2ZyZWUocHJlZml4 X3RhcmdldC0+Y2hpbGRyZW4pOworCQlwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbiA9IGxpc3RfY29w eV9oZWFkKHRhcmdldC0+Y2hpbGRyZW4sCisJCQkJCQkJCQkJCQkgb3V0ZXJfbGVuZ3RoKTsKKwor CQkvKiBTZWFyY2gsIGhvcGluZyB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiAqLworCQlpdG0gPSBw Z3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwgcmlkcywgcHJlZml4X3Rh cmdldCk7CisJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQlicmVhazsKKworCQkvKgor CQkgKiBJZiB0aGUgcHJlZml4IG9mIHRoZSBqb2luIG9yZGVyIGxpc3QgdGhhdCB3ZSdyZSBjb25z aWRlcmluZworCQkgKiBpbmNsdWRlcyBzb21lIGJ1dCBub3QgYWxsIG9mIHRoZSBvdXRlciByZWxz LCB3ZSBjYW4gbWFrZSB0aGUgcHJlZml4CisJCSAqIGxvbmdlciB0byBmaW5kIGFuIGV4YWN0IG1h dGNoLiBCdXQgdGhlIGFkdmljZSBoYXNuJ3QgbWVudGlvbmVkCisJCSAqIGV2ZXJ5dGhpbmcgdGhh dCdzIHBhcnQgb2Ygb3VyIG91dGVyIHJlbCB5ZXQsIGJ1dCBoYXMgbWVudGlvbmVkCisJCSAqIHRo aW5ncyB0aGF0IGFyZSBub3QsIHRoZW4gdGhpcyBqb2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGpvaW4g b3JkZXIKKwkJICogbGlzdC4KKwkJICovCisJCWlmIChpdG0gIT0gUEdQQV9JVE1fVEFSR0VUU19B UkVfU1VCU0VUKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogSWYgdGhlIHByZXZp b3VzIGxvb3BlZCBzdG9wcGVkIGJlZm9yZSB0aGUgcHJlZml4X3RhcmdldCBpbmNsdWRlZCB0aGUK KwkgKiBlbnRpcmUgam9pbiBvcmRlciBsaXN0LCB0aGVuIHRoZSBuZXh0IG1lbWJlciBvZiB0aGUg am9pbiBvcmRlciBsaXN0CisJICogbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBpbm5lciBzaWRlIG9m IHRoZSBqb2luLgorCSAqCisJICogRXhhbXBsZTogR2l2ZW4gSk9JTl9PUkRFUih0MSB0MiAodDMg dDQgdDUpKSwgaWYgdGhlIG91dGVyIHNpZGUgb2YgdGhlCisJICogY3VycmVudCBqb2luIGluY2x1 ZGVzIG9ubHkgdDEsIHRoZW4gdGhlIGlubmVyIHNpZGUgbXVzdCBiZSBleGFjdGx5IHQyOworCSAq IGlmIHRoZSBvdXRlciBzaWRlIGluY2x1ZGVzIGJvdGggdDEgYW5kIHQyLCB0aGVuIHRoZSBpbm5l ciBzaWRlIG11c3QKKwkgKiBpbmNsdWRlIGV4YWN0bHkgdDMsIHQ0LCBhbmQgdDUuCisJICovCisJ aWYgKG91dGVyX2xlbmd0aCA8IGxlbmd0aCkKKwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAqaW5u ZXJfdGFyZ2V0OworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQlpbm5lcl90YXJnZXQgPSBsaXN0 X250aCh0YXJnZXQtPmNoaWxkcmVuLCBvdXRlcl9sZW5ndGgpOworCisJCWl0bSA9IHBncGFfaWRl bnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50LCByaWRzICsgb3V0ZXJfY291bnQsCisJ CQkJCQkJCQkJCWlubmVyX3RhcmdldCk7CisKKwkJLyoKKwkJICogQmVmb3JlIHJldHVybmluZywg Y29uc2lkZXIgd2hldGhlciB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBlbnRyeSBhcworCQkgKiBmdWxs eSBtYXRjaGVkLiBJZiB3ZSBmb3VuZCBldmVyeSBpdGVtIGJ1dCBvbmUgb24gdGhlIGxlZnRoYW5k IHNpZGUKKwkJICogb2YgdGhlIGpvaW4gYW5kIHRoZSBsYXN0IGl0ZW0gb24gdGhlIHJpZ2h0aGFu ZCBzaWRlIG9mIHRoZSBqb2luLAorCQkgKiB0aGVuIHRoZSBhbnN3ZXIgaXMgeWVzLgorCQkgKi8K KwkJaWYgKG91dGVyX2xlbmd0aCArIDEgPT0gbGVuZ3RoICYmIGl0bSA9PSBQR1BBX0lUTV9FUVVB TCkKKwkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisKKwkJcmV0dXJuIChp dG0gPT0gUEdQQV9JVE1fRVFVQUwpOworCX0KKworCS8qCisJICogSWYgd2UgZ2V0IGhlcmUsIHRo ZW4gdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gaW5jbHVkZXMgdGhlIGVudGlyZXR5CisJICog b2YgdGhlIGpvaW4gb3JkZXIgbGlzdC4gSW4gdGhpcyBjYXNlLCB3ZSBiZWhhdmUgZGlmZmVyZW50 bHkgZGVwZW5kaW5nCisJICogb24gd2hldGhlciB3ZSdyZSBsb29raW5nIGF0IHRoZSB0b3AtbGV2 ZWwgam9pbiBvcmRlciBsaXN0IG9yIHN1Ymxpc3QuCisJICogQXQgdGhlIHRvcC1sZXZlbCwgd2Ug dHJlYXQgdGhlIHNwZWNpZmllZCBsaXN0IGFzIG1hbmRhdGluZyB0aGF0IHRoZQorCSAqIGFjdHVh bCBqb2luIG9yZGVyIGhhcyB0aGUgZ2l2ZW4gbGlzdCBhcyBhIHByZWZpeCwgYnV0IGEgc3VibGlz dAorCSAqIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoLgorCSAqCisJICogRXhtYXBsZTogR2l2ZW4g Sk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgd2UgbXVzdCBzdGFydCBieSBqb2luaW5nCisJ ICogYWxsIGZpdmUgb2YgdGhvc2UgcmVsYXRpb25zIGFuZCBpbiB0aGF0IHNlcXVlbmNlLCBidXQg b25jZSB0aGF0IGlzCisJICogZG9uZSwgaXQncyBPSyB0byBqb2luIGFueSBvdGhlciByZWxzIHRo YXQgYXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbS4KKwkgKiBUaGlzIGFsbG93cyBhIHVzZXIg dG8gc3BlY2lmeSB0aGUgZHJpdmluZyB0YWJsZSBhbmQgcGVyaGFwcyB0aGUgZmlyc3QKKwkgKiBm ZXcgdGhpbmdzIHRvIHdoaWNoIGl0IHNob3VsZCBiZSBqb2luZWQgd2hpbGUgbGVhdmluZyB0aGUg cmVzdCBvZiB0aGUKKwkgKiBqb2luIG9yZGVyIHVwIHRoZSBvcHRpbWl6ZXIuIEJ1dCBpdCBzZWVt cyBsaWtlIGl0IHdvdWxkIGJlIHN1cnByaXNpbmcsCisJICogZ2l2ZW4gdGhhdCBzcGVjaWZpY2F0 aW9uLCBpZiB0aGUgdXNlciBjb3VsZCBhZGQgdDYgdG8gdGhlICh0MyB0NCB0NSkKKwkgKiBzdWIt am9pbiwgc28gd2UgZG9uJ3QgYWxsb3cgdGhhdC4gSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cgaXQs IHRoZSBsb2dpYworCSAqIGVhcmxpZXIgaW4gdGhpcyBmdW5jdGlvbiB3b3VsZCByZXF1aXJlIHN1 YnN0YW50aWFsIGFkanVzdG1lbnQ6IHdlIGNvdWxkCisJICogYWxsb3cgdGhlIHQzLXQ0LXQ1LXQ2 IGpvaW4gdG8gYmUgYnVpbHQgaGVyZSwgYnV0IHRoZSBuZXh0IHN0ZXAgb2YKKwkgKiBqb2luaW5n IHQxLXQyIHRvIHRoZSByZXN1bHQgd291bGQgc3RpbGwgYmUgcmVqZWN0ZWQuCisJICovCisJcmV0 dXJuICFzdWJsaXN0OworfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRlbSBvZiBqb2luIG1l dGhvZCBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIEFkdmljZSBzdWNoIGFz IEhBU0hfSk9JTigoeCB5KSkgbWVhbnMgdGhhdCB0aGVyZSBzaG91bGQgYmUgYSBoYXNoIGpvaW4g d2l0aAorICogZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLiBPYnZpb3VzbHksIHRo aXMgbWVhbnMgdGhhdCBpZiB3ZSBhcmUKKyAqIGNvbnNpZGVyaW5nIGEgam9pbiB3aXRoIGV4YWN0 bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZSwgd2Ugc2hvdWxkIGVuZm9yY2UKKyAqIHRoZSB1 c2Ugb2YgYSBoYXNoIGpvaW4uIEhvd2V2ZXIsIGl0IGFsc28gbWVhbnMgdGhhdCB3ZSBtdXN0IHJl amVjdCBzb21lCisgKiBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgZW50aXJlbHkuICBGb3IgZXhh bXBsZSwgYSBqb2luIHdpdGggZXhhY3RseSB4CisgKiBhbmQgeSBvbiB0aGUgb3V0ZXIgc2lkZSBz aG91bGRuJ3QgYmUgYWxsb3dlZCwgYmVjYXVzZSBzdWNoIHBhdGhzIG1pZ2h0IHdpbgorICogb3Zl ciB0aGUgYWR2aWNlLWRyaXZlbiBwYXRoIG9uIGNvc3QuCisgKgorICogVG8gYWNjb21tb2RhdGUg dGhlc2UgcmVxdWlyZW1lbnRzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgam9p bgorICogc2hvdWxkIGJlIGFsbG93ZWQgYW5kIGZhbHNlIGlmIGl0IHNob3VsZCBub3QuIEZ1cnRo ZXJtb3JlLCAqcmVzdHJpY3RfbWV0aG9kCisgKiBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGUgam9pbiBt ZXRob2Qgc2hvdWxkIGJlIGVuZm9yY2VkIGFuZCBmYWxzZSBpZiBub3QuCisgKi8KK3N0YXRpYyBi b29sCitwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBp bm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBn cGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKQor eworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2l0 bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsKKwlwZ3BhX2l0bV90 eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlh bCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9U RV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNlOworCisJLyoKKwkg KiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHNhbWUgcmVsYXRpb25zIGFz IHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIGFsbG93IHRoZSBqb2luIGFuZCBlbmZvcmNlIHRoZSBq b2luIG1ldGhvZCByZXN0cmljdGlvbi4KKwkgKgorCSAqIElmIG91ciBpbm5lciByZWwgbWVudGlv bnMgYSBzdXBlcnNldCBvZiB0aGUgdGFyZ2V0IHJlbGF0aW9ucywgYWxsb3cgdGhlCisJICogam9p bi4gVGhlIGpvaW4gd2UgY2FyZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSwgYW5kIHRo aXMgYWR2aWNlCisJICogaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucy4KKwkgKi8KKwlp bm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwKKwkJ CQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAgdGFyZ2V0KTsKKwlp ZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnktPmZsYWdzIHw9IFBH UEFfVEVfTUFUQ0hfRlVMTDsKKwkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7CisJCXJldHVybiB0 cnVlOworCX0KKwllbHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VC U0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgb3VyIG91dGVyIHJlbCBtZW50aW9u cyBhIHN1cHNlcnNldCBvZiB0aGUgcmVsYXRpb25zIGluIHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQs IG5vIHJlc3RyaWN0aW9ucyBhcHBseS4gVGhlIGpvaW4gd2UgY2FyZSBoYXMgYWxyZWFkeSB0YWtl bgorCSAqIHBsYWNlLCBhbmQgdGhpcyBhZHZpY2UgaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0 aW9ucy4KKwkgKgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBvdXIgb3V0ZXIgcmVsIG1lbnRp b25zIGV4YWN0bHkgdGhlIHJlbGF0aW9ucworCSAqIG1lbnRpb25lZCBpbiB0aGUgYWR2aWNlIHRh cmdldCwgdGhlIHBsYW5uZXIgaXMgdHJ5aW5nIHRvIHJldmVyc2UgdGhlCisJICogc2lkZXMgb2Yg dGhlIGpvaW4gYXMgY29tcGFyZWQgd2l0aCBvdXIgZGVzaXJlZCBvdXRjb21lLiBSZWplY3QgdGhh dC4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRl cl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzLCB0YXJnZXQpOworCWlmIChvdXRlcl9pdG0gPT0g UEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmIChv dXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICog SWYgdGhlIGFkdmljZSB0YXJnZXQgbWVudGlvbnMgb25seSBhIHNpbmdsZSByZWxhdGlvbiwgdGhl IHRlc3QgYmVsb3cKKwkgKiBjYW5ub3QgZXZlciBwYXNzLCBzbyBzYXZlIHNvbWUgd29yayBieSBl eGl0aW5nIG5vdy4KKwkgKi8KKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVO VElGSUVSKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIGV2ZXJ5dGhpbmcgaW4gdGhl IGpvaW5yZWwgaXMgYXBwZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdldCwgd2UncmUKKwkgKiBiZWxv dyB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2FudCB0byBjb250cm9sLgorCSAqCisJICogRm9y IGV4YW1wbGUsIEhBU0hfSk9JTigoeCB5KSkgZG9lc24ndCByZXN0cmljdCBob3cgeCBhbmQgeSBj YW4gYmUKKwkgKiBqb2luZWQuCisJICoKKwkgKiBUaGlzIGxvb2t1cCBzaG91bGRuJ3QgcmV0dXJu IFBHUEFfSVRNX0RJU0pPSU5ULCBiZWNhdXNlIGFueSBzdWNoIGFkdmljZQorCSAqIHNob3VsZCBu b3QgaGF2ZSBiZWVuIHJldHVybmVkIGZyb20gdGhlIHRyb3ZlIGluIHRoZSBmaXJzdCBwbGFjZS4K KwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2Nv dW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQpOworCUFzc2VydChq b2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRN X0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJcmV0 dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIGFscmVhZHkgcGVybWl0dGVkIGFsbCBhbGxvd2Fi bGUgY2FzZXMsIHNvIHJlamVjdCB0aGlzLgorCSAqCisJICogSWYgd2UgcmVhY2ggdGhpcyBwb2lu dCwgdGhlbiB0aGUgYWR2aWNlIG92ZXJsYXBzIHdpdGggdGhpcyBqb2luIGJ1dAorCSAqIGlzbid0 IGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gZWl0aGVyIHNpZGUsIGFuZCB0aGVyZSdzIGFsc28g YXQgbGVhc3QKKwkgKiBvbmUgcmVsYXRpb24gcHJlc2VudCBpbiB0aGUgam9pbiB0aGF0IGlzbid0 IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLgorCSAqCisJICogRm9yIGluc3RhbmNlLCBpbiB0aGUg SEFTSF9KT0lOKCh4IHkpKSBleGFtcGxlLCB3ZSB3b3VsZCByZWFjaCBoZXJlIGlmIHgKKwkgKiB3 ZXJlIG9uIG9uZSBzaWRlIG9mIHRoZSBqb2luLCB5IG9uIHRoZSBvdGhlciwgYW5kIGF0IGxlYXN0 IG9uZSBvZiB0aGUKKwkgKiB0d28gc2lkZXMgYWxzbyBpbmNsdWRlZCBzb21lIG90aGVyIHJlbGF0 aW9uLCBzYXkgdC4gSW4gdGhhdCBjYXNlLAorCSAqIGFjY2VwdGluZyB0aGlzIGpvaW4gd291bGQg YWxsb3cgdGhlICh4IHkgdCkgam9pbnJlbCB0byBjb250YWluCisJICogbm9uLWRpc2FibGVkIHBh dGhzIHRoYXQgZG8gbm90IHB1dCAoeCB5KSBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIGhhc2gKKwkg KiBqb2luOyB3ZSBjb3VsZCBpbnN0ZWFkIGVuZCB1cCB3aXRoIHNvbWV0aGluZyBsaWtlICh4IEpP SU4gdCkgSk9JTiB5LgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgYWR2 aWNlIGNvbmNlcm5pbmcgYW4gb3BhcXVlIGpvaW4gcGVybWl0IGEgY2VydGFpbiBqb2luPworICoK KyAqIEJ5IGFuIG9wYXF1ZSBqb2luLCB3ZSBtZWFuIG9uZSB3aGVyZSB0aGUgZXhhY3QgbWVjaGFu aXNtIGJ5IHdoaWNoIHRoZQorICogam9pbiBpcyBwZXJmb3JtZWQgaXMgbm90IHZpc2libGUgdG8g UG9zdGdyZVNRTC4gQ3VycmVudGx5IHRoaXMgaXMgdGhlCisgKiBjYXNlIG9ubHkgZm9yIGZvcmVp Z24gam9pbnM6IEZPUkVJR05fSk9JTigoeCB5IHopKSBtZWFucyB0aGF0IHgsIHksIGFuZAorICog eiBhcmUgam9pbmVkIG9uIHRoZSByZW1vdGUgc2lkZSwgYnV0IHdlIGtub3cgbm90aGluZyBhYm91 dCB0aGUgam9pbiBvcmRlcgorICogb3Igam9pbiBtZXRob2RzIHVzZWQgb3ZlciB0aGVyZS4KKyAq Lworc3RhdGljIGJvb2wKK3BncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2luKGludCBvdXRlcl9j b3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAor CQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBib29sICpyZXN0cmlj dF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFyZ2V0 OworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQg bGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5m bGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFs c2U7CisKKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2Nv dW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQpOworCWlmIChqb2lu X2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCS8qCisJCSAqIFdlIGhhdmUgYW4gZXhhY3Qg bWF0Y2gsIGFuZCBzaG91bGQgdGhlcmVmb3JlIGFsbG93IHRoZSBqb2luIGFuZAorCQkgKiBlbmZv cmNlIHRoZSB1c2Ugb2YgdGhlIHJlbGV2YW50IG9wYXF1ZSBqb2luIG1ldGhvZC4KKwkJICovCisJ CWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJCSpyZXN0cmljdF9tZXRob2Qg PSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoam9pbl9pdG0gPT0gUEdQQV9JVE1f S0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NV QlNFVCkKKwl7CisJCS8qCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFfSVRNX1RBUkdFVFNfQVJF X1NVQlNFVCwgdGhlbiB0aGUgam9pbiB3ZSBjYXJlCisJCSAqIGFib3V0IGhhcyBhbHJlYWR5IHRh a2VuIHBsYWNlIGFuZCBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBhcHBseS4KKwkJICoKKwkJICog SWYgam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULCB3ZSdyZSBzdGlsbCBidWls ZGluZyB1cCB0bworCQkgKiB0aGUgam9pbiB3ZSBjYXJlIGFib3V0IGFuZCBoYXZlIG5vdCBpbnRy b2R1Y2VkIGFueSBleHRyYW5lb3VzCisJCSAqIHJlbGF0aW9ucyBub3QgbmFtZWQgaW4gdGhlIGFk dmljZS4gTm90ZSB0aGF0IEZvcmVpZ25TY2FuIHBhdGhzIGZvcgorCQkgKiBqb2lucyBhcmUgYnVp bHQgdXAgZnJvbSBGb3JlaWduU2NhbiBwYXRocyBmcm9tIHVuZGVybHlpbmcgam9pbnMgYW5kCisJ CSAqIHNjYW5zLCBzbyB3ZSBtdXN0IG5vdCBkaXNhYmxlIHRoaXMgam9pbiB3aGVuIGNvbnNpZGVy aW5nIGEgc3Vic2V0CisJCSAqIG9mIHRoZSByZWxhdGlvbnMgd2UgdWx0aW1hdGVseSB3YW50Lgor CQkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBUaGUgYWR2aWNlIG92ZXJsYXBz IHRoZSBqb2luLCBidXQgYXQgbGVhc3Qgb25lIHJlbGF0aW9uIGlzIHByZXNlbnQgaW4KKwkgKiB0 aGUgam9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLiBXZSB3YW50IHRvIGRp c2FibGUgc3VjaAorCSAqIHBhdGhzIHNvIHRoYXQgd2UgYWN0dWFsbHkgcHVzaCBkb3duIHRoZSBq b2luIGFzIGludGVuZGVkLgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIEFwcGx5 IHNjYW4gYWR2aWNlIHRvIGEgUmVsT3B0SW5mby4KKyAqCisgKiBYWFguIEZvciBiaXRtYXAgaGVh cCBzY2Fucywgd2UncmUganVzdCBpZ25vcmluZyB0aGUgaW5kZXggaW5mb3JtYXRpb24gZnJvbQor ICogdGhlIGFkdmljZS4gVGhhdCdzIG5vdCBjb29sLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9w bGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQkgICBwZ3Bh X3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJICAgQml0bWFwc2V0ICpzY2FuX2lu ZGV4ZXMsCisJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMsCisJCQkJCQkJ ICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcykKK3sKKwlib29sCQlnYXRoZXJfY29uZmxpY3QgPSBm YWxzZTsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFw c2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWludAkJCWkgPSAtMTsKKwlwZ3BhX3Ry b3ZlX2VudHJ5ICpzY2FuX2VudHJ5ID0gTlVMTDsKKwlpbnQJCQlmbGFnczsKKwlib29sCQlzY2Fu X3R5cGVfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpzY2FuX3R5cGVfaW5kZXhlcyA9 IE5VTEw7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX3JlbF9pbmRleGVzID0gTlVMTDsKKwl1aW50 NjQJCWdhdGhlcl9tYXNrID0gMDsKKwl1aW50NjQJCXNjYW5fdHlwZSA9IDA7CisKKwkvKiBTY3J1 dGluaXplIGF2YWlsYWJsZSBzY2FuIGFkdmljZS4gKi8KKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9t ZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKm15 X2VudHJ5ID0gJnNjYW5fZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9zY2FuX3R5cGUgPSAwOwor CisJCS8qIFRyYW5zbGF0ZSBvdXIgYWR2aWNlIHRhZ3MgdG8gYSBzY2FuIHN0cmF0ZWd5IGFkdmlj ZSB2YWx1ZS4gKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBf U0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19CSVRNQVBTQ0FOOworCQllbHNlIGlmIChteV9l bnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9 IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwkJZWxzZSBpZiAo bXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0g UEdTX0lOREVYU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19TRVFf U0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19TRVFTQ0FOOworCQllbHNlIGlmIChteV9lbnRy eS0+dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX1RJRFND QU47CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB1bmRlcnN0YW5kYWJsZSBzY2FuIGFkdmljZSwg aGFuZyBvbiB0byB0aGUgZW50cnksIHRoZQorCQkgKiBpbmZlcnJlZCBzY2FuIHR5cGUgdHlwZSwg YW5kIHRoZSBpbmRleCBhdCB3aGljaCB3ZSBmb3VuZCBpdC4KKwkJICoKKwkJICogQWxzbyBtYWtl IGEgbm90ZSBpZiB3ZSBzZWUgY29uZmxpY3Rpbmcgc2NhbiB0eXBlIGFkdmljZS4gTm90ZSB0aGF0 CisJCSAqIHdlIHJlZ2FyZCB0d28gaW5kZXggc3BlY2lmaWNhdGlvbnMgYXMgY29uZmxpY3Rpbmcg dW5sZXNzIHRoZXkgbWF0Y2gKKwkJICogZXhhY3RseS4gSW4gdGhlb3J5LCBwZXJoYXBzIHdlIGNv dWxkIHJlZ2FyZCBJTkRFWF9TQ0FOKGEgYykgYW5kCisJCSAqIElOREVYX1NDQU4oYSBiLmMpIGFz IG5vbi1jb25mbGljdGluZyBpZiBpdCBoYXBwZW5zIHRoYXQgdGhlIG9ubHkKKwkJICogaW5kZXgg bmFtZWQgYyBpcyBpbiBzY2hlbWEgYiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUgY29k ZS4KKwkJICovCisJCWlmIChteV9zY2FuX3R5cGUgIT0gMCkKKwkJeworCQkJaWYgKHNjYW5fdHlw ZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJc2Nhbl90eXBlX2NvbmZs aWN0ID0gdHJ1ZTsKKwkJCWlmICghc2Nhbl90eXBlX2NvbmZsaWN0ICYmIHNjYW5fZW50cnkgIT0g TlVMTCAmJgorCQkJCW15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVMTCAmJgorCQkJCXNj YW5fZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJIXBncGFfaW5kZXhfdGFy Z2V0c19lcXVhbChzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQsCisJCQkJCQkJCQkJICBteV9l bnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KSkKKwkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOwor CQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJc2Nhbl90eXBlID0gbXlfc2Nhbl90eXBlOwor CQkJc2Nhbl90eXBlX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2FuX3R5cGVfaW5kZXhlcywg aSk7CisJCX0KKwl9CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBnYXRoZXItcmVsYXRlZCBh bmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19u ZXh0X21lbWJlcihyZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5 ICpteV9lbnRyeSA9ICZyZWxfZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9nYXRoZXJfbWFzayA9 IDA7CisJCWJvb2wJCWp1c3Rfb25lX3JlbDsKKworCQlqdXN0X29uZV9yZWwgPSBteV9lbnRyeS0+ dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSCisJCQl8fCBsaXN0X2xlbmd0 aChteV9lbnRyeS0+dGFyZ2V0LT5jaGlsZHJlbikgPT0gMTsKKworCQkvKgorCQkgKiBQQVJUSVRJ T05XSVNFIGJlaGF2ZXMgbGlrZSBhIHNjYW4gdHlwZSwgZXhjZXB0IHRoYXQgaWYgdGhlcmUncyBt b3JlCisJCSAqIHRoYW4gb25lIHJlbGF0aW9uIHRhcmdldGVkLCBpdCBoYXMgbm8gZWZmZWN0IGF0 IHRoaXMgbGV2ZWwuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19QQVJU SVRJT05XSVNFKQorCQl7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJeworCQkJCWNvbnN0IHVp bnQ2NCBteV9zY2FuX3R5cGUgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORDsKKworCQkJ CWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90eXBlKQorCQkJCQlz Y2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJCXNjYW5fZW50cnkgPSBteV9lbnRyeTsKKwkJ CQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQkJc2Nhbl90eXBlX3JlbF9pbmRleGVzID0K KwkJCQkJYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX3JlbF9pbmRleGVzLCBpKTsKKwkJCX0KKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogR0FUSEVSIGFuZCBHQVRIRVJfTUVSR0UgYXBw bGllZCB0byBhIHNpbmdsZSByZWwgbWVhbiB0aGF0IHdlIHNob3VsZAorCQkgKiB1c2UgdGhlIGNv cnJlc3BvbmRpbmdzIHN0cmF0ZWd5IGhlcmUsIHdoaWxlIGFwcGx5aW5nIGVpdGhlciB0byBtb3Jl CisJCSAqIHRoYW4gb25lIHJlbCBtZWFucyB3ZSBzaG91bGQgbm90IHVzZSB0aG9zZSBzdHJhdGVn aWVzIGhlcmUsIGJ1dAorCQkgKiByYXRoZXIgYXQgdGhlIGxldmVsIG9mIHRoZSBqb2lucmVsIHRo YXQgY29ycmVzcG9uZHMgdG8gd2hhdCB3YXMKKwkJICogc3BlY2lmaWVkLiBOT19HQVRIRVIgY2Fu IG9ubHkgYmUgYXBwbGllZCB0byBzaW5nbGUgcmVscy4KKwkJICoKKwkJICogTm90ZSB0aGF0IHNl dHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaW4gbXlfZ2F0aGVyX21hc2sgaXMKKwkJICog ZXF1aXZhbGVudCB0byBhbGxvd2luZyB0aGUgbm9uLXVzZSBvZiBlaXRoZXIgZm9ybSBvZiBHYXRo ZXIgaGVyZS4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUiB8 fAorCQkJbXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0UpCisJCXsKKwkJCWlm ICghanVzdF9vbmVfcmVsKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBB UlRJQUw7CisJCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUikKKwkJ CQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJCQkJbXlfZ2F0aGVyX21h c2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0g UEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9vbmVfcmVsKTsKKwkJCW15 X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCX0KKworCQkvKgorCQkg KiBJZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2UgKDEpIG1ha2UgYSBu b3RlIGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHRoZSBtYXNr IHZhbHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3YXMgYSBmdWxsIG9y IHBhcnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sgIT0gMCkKKwkJewor CQkJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlfZ2F0aGVyX21hc2sp CisJCQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNrID0gbXlfZ2F0aGVy X21hc2s7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9mdWxsX21hdGNoID0gYm1z X2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQorCQkJCWdhdGhlcl9w YXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxfbWF0Y2gsIGkpOwor CQl9CisJfQorCisJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICovCisJaWYgKHNjYW5fZW50 cnkgIT0gTlVMTCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShzY2FuX2VudHJ5LT50YWcg PT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+dGFnID09IFBHUEFfVEFH X0lOREVYX09OTFlfU0NBTikpCisJeworCQlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldCA9IHNj YW5fZW50cnktPnRhcmdldC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZvICptYXRjaGVkX2luZGV4 ID0gTlVMTDsKKworCQlBc3NlcnQoaXRhcmdldC0+aXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1FKTsK KworCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5pbmRleGxpc3QpCisJ CXsKKwkJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUoaW5kZXgtPmluZGV4b2lkKTsK KwkJCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4LT5pbmRleG9pZCk7CisJ CQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwb2lkKTsKKwor CQkJaWYgKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1lLCByZWxuYW1lKSA9PSAwICYmCisJCQkJKGl0 YXJnZXQtPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8CisJCQkJIHN0cmNtcChpdGFyZ2V0LT5pbmRu YW1lc3BhY2UsIHJlbG5hbWVzcGFjZSkgPT0gMCkpCisJCQl7CisJCQkJbWF0Y2hlZF9pbmRleCA9 IGluZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG1hdGNoZWRfaW5kZXggPT0g TlVMTCkKKwkJeworCQkJLyogRG9uJ3QgZm9yY2UgdGhlIHNjYW4gdHlwZSBpZiB0aGUgaW5kZXgg ZG9lc24ndCBleGlzdC4gKi8KKwkJCXNjYW5fdHlwZSA9IDA7CisKKwkJCS8qIE1hcmsgYWR2aWNl IGFzIGluYXBwbGljYWJsZS4gKi8KKwkJCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHNjYW5fZW50cmll cywgc2Nhbl90eXBlX2luZGV4ZXMsCisJCQkJCQkJCSBQR1BBX1RFX0lOQVBQTElDQUJMRSk7CisJ CX0KKwkJZWxzZQorCQl7CisJCQkvKiBSZXRhaW4gdGhpcyBpbmRleCBhbmQgZGlzY2FyZCB0aGUg cmVzdC4gKi8KKwkJCXJlbC0+aW5kZXhsaXN0ID0gbGlzdF9tYWtlMShtYXRjaGVkX2luZGV4KTsK KwkJfQorCX0KKworCS8qCisJICogTWFyayBhbGwgdGhlIHNjYW4gbWV0aG9kIGVudHJpZXMgYXMg ZnVsbHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lmeQorCSAqIGRpZmZlcmVudCB0aGluZ3Ms IG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3MgPSBQR1BBX1RFX01B VENIX1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEw7CisJaWYgKHNjYW5fdHlwZV9jb25mbGlj dCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFn cyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7CisJcGdwYV90cm92ZV9z ZXRfZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhlcywgZmxhZ3MpOworCisJ LyoKKwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBwYXJ0 aWFsbHkgbWF0Y2hlZC4gTWFyaworCSAqIHRoZSBvbmVzIHRoYXQgaW5jbHVkZWQgdGhpcyByZWxh dGlvbiBhcyBhIHRhcmdldCBieSBpdHNlbGYgYXMgZnVsbHkKKwkgKiBtYXRjaGVkLiBJZiB0aGVy ZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGluZy4KKwkgKi8KKwlm bGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2NvbmZsaWN0KQorCQlm bGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9l bnRyaWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdzIHw9IFBHUEFfVEVf TUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmllcywgZ2F0aGVyX2Z1 bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGEgbm9uLWNvbmZsaWN0aW5nIHNj YW4gc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoc2Nhbl90eXBlICE9IDAgJiYg IXNjYW5fdHlwZV9jb25mbGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdTX1ND QU5fQU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAorCQkJICBQR1NfQ09OU0lE RVJfSU5ERVhPTkxZKTsKKwkJcmVsLT5wZ3NfbWFzayB8PSBzY2FuX3R5cGU7CisJfQorCisJLyog SWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNpZmljYXRpb24sIGVuZm9y Y2UgaXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkKKwl7 CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBHU19HQVRIRVJfTUVSR0Ug fCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCk7CisJCXJlbC0+cGdzX21hc2sgfD0gZ2F0aGVyX21h c2s7CisJfQorfQorCisvKgorICogQWRkIGZlZWRiYWNrIGVudHJpZXMgdG8gZm9yIG9uZSB0cm92 ZSBzbGljZSB0byB0aGUgcHJvdmlkZWQgbGlzdCBhbmQKKyAqIHJldHVybiB0aGUgcmVzdWx0aW5n IGxpc3QuCisgKgorICogRmVlZGJhY2sgZW50cmllcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIHRy b3ZlIGVudHJ5J3MgZmxhZ3MuIEl0J3MgYXNzdW1lZAorICogdGhhdCB0aGUgY2FsbGVyIGhhcyBh bHJlYWR5IHNldCBhbGwgcmVsZXZhbnQgZmxhZ3Mgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCisgKiBQ R1BBX1RFX0ZBSUxFRC4gV2Ugc2V0IHRoYXQgZmxhZyBoZXJlIGlmIGFwcHJvcHJpYXRlLgorICov CitzdGF0aWMgTGlzdCAqCitwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxpc3Qs IHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUs CisJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJIHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKQoreworCXBncGFfdHJvdmVfZW50cnkgKmVudHJp ZXM7CisJaW50CQkJbmVudHJpZXM7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmlu Z0luZm8oJmJ1Zik7CisJcGdwYV90cm92ZV9sb29rdXBfYWxsKHRyb3ZlLCB0eXBlLCAmZW50cmll cywgJm5lbnRyaWVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbnRyaWVzOyArK2kpCisJewor CQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCQlEZWZFbGVtICAgICpp dGVtOworCisJCS8qCisJCSAqIElmIHRoaXMgZW50cnkgd2FzIGZ1bGx5IG1hdGNoZWQsIGNoZWNr IHdoZXRoZXIgZ2VuZXJhdGluZyBhZHZpY2UKKwkJICogZnJvbSB0aGlzIHBsYW4gd291bGQgcHJv ZHVjZSBzdWNoIGFuIGVudHJ5LiBJZiBub3QsIGxhYmVsIHRoZSBlbnRyeQorCQkgKiBhcyBmYWls ZWQuCisJCSAqLworCQlpZiAoKGVudHJ5LT5mbGFncyAmIFBHUEFfVEVfTUFUQ0hfRlVMTCkgIT0g MCAmJgorCQkJIXBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZSh3YWxrZXIsIHJ0X2lkZW50aWZpZXJz LAorCQkJCQkJCQkJICBlbnRyeS0+dGFnLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCWVudHJ5LT5mbGFn cyB8PSBQR1BBX1RFX0ZBSUxFRDsKKworCQlpdGVtID0gbWFrZURlZkVsZW0ocGdwYV9jc3RyaW5n X3Ryb3ZlX2VudHJ5KGVudHJ5KSwKKwkJCQkJCSAgIChOb2RlICopIG1ha2VJbnRlZ2VyKGVudHJ5 LT5mbGFncyksIC0xKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgaXRlbSk7CisJfQorCisJcmV0 dXJuIGxpc3Q7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8qCisgKiBGYXN0 IGhhc2ggZnVuY3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYW4gUlRJIGFuZCBwbGFuIG5h bWUuCisgKi8KK3N0YXRpYyB1aW50MzIKK3BncGFfcmlfY2hlY2tlcl9oYXNoX2tleShwZ3BhX3Jp X2NoZWNrZXJfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9zdGF0ZSBoczsKKwlpbnQJCQlzcF9sZW47 CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwlocy5hY2N1bSA9IGtleS5ydGk7CisJZmFz dGhhc2hfY29tYmluZSgmaHMpOworCisJLyogcGxhbl9uYW1lIGNhbiBiZSBOVUxMICovCisJaWYg KGtleS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJc3BfbGVuID0gMDsKKwllbHNlCisJCXNwX2xlbiA9 IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxhbl9uYW1lKTsKKworCS8qIGhhc2hm bl91bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBhcyB0d2VhayAqLwor CXJldHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKworI2VuZGlmCisKKy8q CisgKiBTYXZlIHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZvciBvbmUgcmVsYXRpb24gZm9y IGZ1dHVyZSBjcm9zcy1jaGVja2luZy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcmlfY2hlY2tl cl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJ IFJlbE9wdEluZm8gKnJlbCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdwYV9y aV9jaGVja2VyX2tleSBrZXk7CisJcGdwYV9yaV9jaGVja2VyICpjaGVjazsKKwlwZ3BhX2lkZW50 aWZpZXIgcmlkOworCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJYm9vbAkJZm91bmQ7CisKKwlr ZXkucnRpID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIocmVsLT5yZWxpZHMpOworCWtleS5wbGFuX25h bWUgPSByb290LT5wbGFuX25hbWU7CisJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKHJv b3QsIGtleS5ydGksICZyaWQpOworCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5n KCZyaWQpOworCWNoZWNrID0gcGdwYV9yaV9jaGVja19pbnNlcnQocHBzLT5yaV9jaGVja19oYXNo LCBrZXksICZmb3VuZCk7CisJQXNzZXJ0KCFmb3VuZCB8fCBzdHJjbXAoY2hlY2stPnJpZF9zdHJp bmcsIHJpZF9zdHJpbmcpID09IDApOworCWNoZWNrLT5yaWRfc3RyaW5nID0gcmlkX3N0cmluZzsK KyNlbmRpZgorfQorCisvKgorICogVmFsaWRhdGUgdGhhdCB0aGUgcmFuZ2UgdGFibGUgaWRlbnRp ZmllcnMgd2Ugd2VyZSBhYmxlIHRvIGdlbmVyYXRlIGR1cmluZworICogcGxhbm5pbmcgbWF0Y2gg dGhlIG9uZXMgd2UgZ2VuZXJhdGVkIGZyb20gdGhlIGZpbmFsIHBsYW4uCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBs YW5uZWRTdG10ICpwc3RtdCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJcGdwYV9p ZGVudGlmaWVyICpydF9pZGVudGlmaWVyczsKKwlwZ3BhX3JpX2NoZWNrX2l0ZXJhdG9yIGl0Owor CXBncGFfcmlfY2hlY2tlciAqY2hlY2s7CisKKwkvKiBDcmVhdGUgaWRlbnRpZmllcnMgZnJvbSB0 aGUgcGxhbm5lZCBzdGF0ZW1lbnQuICovCisJcnRfaWRlbnRpZmllcnMgPSBwZ3BhX2NyZWF0ZV9p ZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKworCS8qIEl0ZXJhdGUgb3ZlciBp ZGVudGlmaWVycyBjcmVhdGVkIGR1cmluZyBwbGFubmluZywgc28gd2UgY2FuIGNvbXBhcmUuICov CisJcGdwYV9yaV9jaGVja19zdGFydF9pdGVyYXRlKHBwcy0+cmlfY2hlY2tfaGFzaCwgJml0KTsK Kwl3aGlsZSAoKGNoZWNrID0gcGdwYV9yaV9jaGVja19pdGVyYXRlKHBwcy0+cmlfY2hlY2tfaGFz aCwgJml0KSkgIT0gTlVMTCkKKwl7CisJCWludAkJCXJ0b2Zmc2V0ID0gMDsKKwkJY29uc3QgY2hh ciAqcmlkX3N0cmluZzsKKwkJSW5kZXgJCWZsYXRfcnRpOworCisJCS8qCisJCSAqIElmIHRoZXJl J3Mgbm8gcGxhbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudHJ5LCB0aGVuIHRoZQorCQkg KiBydG9mZnNldCBpcyAwLiBPdGhlcndpc2UsIHdlIGNhbiBzZWFyY2ggdGhlIFN1YlBsYW5SVElu Zm8gbGlzdCB0bworCQkgKiBmaW5kIHRoZSBydG9mZnNldC4KKwkJICovCisJCWlmIChjaGVjay0+ a2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQl7CisJCQlmb3JlYWNoX25vZGUoU3ViUGxhblJUSW5m bywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIElmIHJ0 aW5mby0+ZHVtbXkgaXMgc2V0LCB0aGVuIHRoZSBzdWJxdWVyeSdzIHJhbmdlIHRhYmxlCisJCQkJ ICogd2lsbCBvbmx5IGhhdmUgYmVlbiBwYXJ0aWFsbHkgY29waWVkIHRvIHRoZSBmaW5hbCByYW5n ZQorCQkJCSAqIHRhYmxlLiBTcGVjaWZpY2FsbHksIG9ubHkgUlRFX1JFTEFUSU9OIGVudHJpZXMg YW5kCisJCQkJICogUlRFX1NVQlFVRVJZIGVudHJpZXMgdGhhdCB3ZXJlIG9uY2UgUlRFX1JFTEFU SU9OIGVudHJpZXMKKwkJCQkgKiB3aWxsIGJlIGNvcGllZCwgYXMgcGVyIGFkZF9ydGVzX3RvX2Zs YXRfcnRhYmxlLiBUaGVyZWZvcmUsCisJCQkJICogdGhlcmUncyBubyBmaXhlZCBydG9mZnNldCB0 aGF0IHdlIGNhbiBhcHBseSB0byB0aGUgUlRJcworCQkJCSAqIHVzZWQgZHVyaW5nIHBsYW5uaW5n IHRvIGxvY2F0ZSB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbnMKKwkJCQkgKiBpbiB0aGUgZmlu YWwgcnRhYmxlLgorCQkJCSAqCisJCQkJICogV2l0aCBtb3JlIGNvbXBsZXggbG9naWMsIHdlIGNv dWxkIHdvcmsgYXJvdW5kIHRoYXQgcHJvYmxlbQorCQkJCSAqIGJ5IHJlbWVtYmVyaW5nIHRoZSB3 aG9sZSBjb250ZW50cyBvZiB0aGUgc3VicXVlcnkncyBydGFibGUKKwkJCQkgKiBkdXJpbmcgcGxh bm5pbmcsIGRldGVybWluaW5nIHdoaWNoIG9mIHRob3NlIHdvdWxkIGhhdmUgYmVlbgorCQkJCSAq IGNvcGllZCB0byB0aGUgZmluYWwgcnRhYmxlLCBhbmQgbWF0Y2hpbmcgdGhlbSB1cC4gQnV0IGl0 CisJCQkJICogZG9lc24ndCBzZWVtIGxpa2UgYSB3b3J0aHdoaWxlIGVuZGVhdm9yIGZvciByaWdo dCBub3csCisJCQkJICogYmVjYXVzZSBSVElzIGZyb20gc3VjaCBzdWJxdWVyaWVzIHdvbid0IGFw cGVhciBpbiB0aGUgcGxhbgorCQkJCSAqIHRyZWUgaXRzZWxmLCBqdXN0IGluIHRoZSByYW5nZSB0 YWJsZS4gSGVuY2UsIHdlIGNhbiBuZWl0aGVyCisJCQkJICogZ2VuZXJhdGUgbm9yIGFjY2VwdCBh ZHZpY2UgZm9yIHRoZW0uCisJCQkJICovCisJCQkJaWYgKHN0cmNtcChjaGVjay0+a2V5LnBsYW5f bmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDAKKwkJCQkJJiYgIXJ0aW5mby0+ZHVtbXkpCisJ CQkJeworCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CisJCQkJCUFzc2VydChydG9m ZnNldCA+IDApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8qCisJCQkgKiBJdCdz IG5vdCBhbiBlcnJvciBpZiB3ZSBkb24ndCBmaW5kIHRoZSBwbGFuIG5hbWU6IHRoYXQganVzdAor CQkJICogbWVhbnMgdGhhdCB3ZSBwbGFubmVkIGEgc3VicGxhbiBieSB0aGlzIG5hbWUgYnV0IGl0 IGVuZGVkIHVwCisJCQkgKiBiZWluZyBhIGR1bW15IHN1YnBsYW4gYW5kIHNvIHdhc24ndCBpbmNs dWRlZCBpbiB0aGUgZmluYWwgcGxhbgorCQkJICogdHJlZS4KKwkJCSAqLworCQkJaWYgKHJ0b2Zm c2V0ID09IDApCisJCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBjaGVjay0+a2V5LnJ0 aSBpcyB0aGUgUlRJIHRoYXQgd2Ugc2F3IHByaW9yIHRvIHJhbmdlLXRhYmxlCisJCSAqIGZsYXR0 ZW5pbmcsIHNvIHdlIG11c3QgYWRkIHRoZSBhcHByb3ByaWF0ZSBSVCBvZmZzZXQgdG8gZ2V0IHRo ZQorCQkgKiBmaW5hbCBSVEkuCisJCSAqLworCQlmbGF0X3J0aSA9IGNoZWNrLT5rZXkucnRpICsg cnRvZmZzZXQ7CisJCUFzc2VydChmbGF0X3J0aSA8PSBsaXN0X2xlbmd0aChwc3RtdC0+cnRhYmxl KSk7CisKKwkJLyogQXNzZXJ0IHRoYXQgdGhlIHN0cmluZyB3ZSBjb21wdXRlIG5vdyBtYXRjaGVz IHRoZSBwcmV2aW91cyBvbmUuICovCisJCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50aWZpZXJfc3Ry aW5nKCZydF9pZGVudGlmaWVyc1tmbGF0X3J0aSAtIDFdKTsKKwkJQXNzZXJ0KHN0cmNtcChyaWRf c3RyaW5nLCBjaGVjay0+cmlkX3N0cmluZykgPT0gMCk7CisJfQorI2VuZGlmCit9CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uN2Q0MGI5MTBiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfcGxhbm5lci5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIHBncGFfcGxhbm5lci5oCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1BMQU5ORVJfSAorI2RlZmluZSBQR1BB X1BMQU5ORVJfSAorCitleHRlcm4gdm9pZCBwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcyh2b2lk KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nh bi5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjM1MWQzZGJmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCkBAIC0wLDAgKzEsMjU4IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uYworICoJICBhbmFseXNpcyBvZiBzY2Fu cyBpbiBQbGFuIHRyZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfc2Nhbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisjaW5jbHVkZSAicGdwYV93YWxr ZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIv cGFyc2V0cmVlLmgiCisKK3N0YXRpYyBwZ3BhX3NjYW4gKnBncGFfbWFrZV9zY2FuKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgcGdwYV9zY2Fu X3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkJCQkJ CSBib29sIGJlbmVhdGhfYW55X2dhdGhlcik7CisKKworc3RhdGljIFJURUtpbmQgdW5pcXVlX25v bmpvaW5fcnRla2luZChCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKTsKKworLyoKKyAq IEJ1aWxkIGEgcGdwYV9zY2FuIG9iamVjdCBmb3IgYSBQbGFuIG5vZGUgYW5kIHVwZGF0ZSB0aGUg cGxhbiB3YWxrZXIKKyAqIGNvbnRleHQgYXMgYXBwb3ByaWF0ZS4gIElmIHRoaXMgaXMgYW4gQXBw ZW5kIG9yIE1lcmdlQXBwZW5kIHNjYW4sIGFsc28KKyAqIGJ1aWxkIHBncGFfc2NhbiBmb3IgYW55 IHNjYW5zIHRoYXQgd2VyZSBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG9uZSBieQorICogQXBwZW5k L01lcmdlQXBwZW5kIHB1bGwtdXAuCisgKgorICogSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIEVs aWRlZE5vZGUgZm9yIHRoaXMgcGxhbiBub2RlLCBwYXNzIHRoZSB1cHBlcm1vc3QKKyAqIG9uZSBh cyBlbGlkZWRfbm9kZSwgZWxzZSBwYXNzIE5VTEwuCisgKgorICogU2V0IHRoZSAnYmVuZWF0aF9h bnlfZ2F0aGVyJyBub2RlIGlmIHdlIGFyZSB1bmRlcm5lYXRoIGEgR2F0aGVyIG9yCisgKiBHYXRo ZXIgTWVyZ2Ugbm9kZS4KKyAqCisgKiBTZXQgdGhlICd3aXRoaW5fam9pbl9wcm9ibGVtJyBmbGFn IGlmIHdlJ3JlIGluc2lkZSBvZiBhIGpvaW4gcHJvYmxlbSBhbmQKKyAqIG5vdCBvdGhlcndpc2Uu CisgKi8KK3BncGFfc2NhbiAqCitwZ3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUsCisJ CQkJYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSkKK3sK KwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJQml0 bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKwlpbnQJCQlydGkgPSAtMTsKKwlMaXN0CSAgICpjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cyA9IE5JTDsKKworCWlmIChlbGlkZWRfbm9kZSAhPSBOVUxMKQor CXsKKwkJTm9kZVRhZwkJZWxpZGVkX3R5cGUgPSBlbGlkZWRfbm9kZS0+ZWxpZGVkX3R5cGU7CisK KwkJLyoKKwkJICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBhbiBBcHBlbmQgb3IgTWVy Z2VBcHBlbmQgbm9kZSB0aGF0IGhhZAorCQkgKiBvbmx5IG9uZSBzdXJ2aXZpbmcgY2hpbGQsIHRo ZW4gdGhpcyBpcyBhIHBhcnRpdGlvbndpc2UgInNjYW4iIC0tCisJCSAqIHdoaWNoIG1heSByZWFs bHkgYmUgYSBwYXJ0aXRpb253aXNlIGpvaW4sIGJ1dCB0aGVyZSdzIG5vIG5lZWQgdG8KKwkJICog ZGlzdGluZ3Vpc2guCisJCSAqCisJCSAqIElmIGl0J3MgYSB0cml2aWFsIFN1YnF1ZXJ5U2NhbiB0 aGF0IHdhcyBlbGlkZWQsIHRoZW4gdGhpcyBpcyBhbgorCQkgKiAib3JkaW5hcnkiIHNjYW4gaS5l LiBvbmUgZm9yIHdoaWNoIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYWR2aWNlCisJCSAqIGJlY2F1c2Ug dGhlIHBsYW5uZXIgaGFzIG5vdCBtYWRlIGFueSBtZWFuaW5nZnVsIGNob2ljZS4KKwkJICovCisJ CXJlbGlkcyA9IGVsaWRlZF9ub2RlLT5yZWxpZHM7CisJCWlmIChlbGlkZWRfdHlwZSA9PSBUX0Fw cGVuZCB8fCBlbGlkZWRfdHlwZSA9PSBUX01lcmdlQXBwZW5kKQorCQkJc3RyYXRlZ3kgPSBQR1BB X1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJZWxzZQorCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JE SU5BUlk7CisKKwkJLyogSm9pbiBSVElzIGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVy IHJlZmVycyB0byB0aGVtLiAqLworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxp ZHMocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCX0KKwllbHNlIGlmICgocnRpID0g cGdwYV9zY2FucmVsaWQocGxhbikpICE9IDApCisJeworCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5n bGV0b24ocnRpKTsKKworCQlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJCXsKKwkJCWNhc2UgVF9T ZXFTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1NFUTsKKwkJCQlicmVhazsKKwkJCWNh c2UgVF9CaXRtYXBIZWFwU2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9CSVRNQVBfSEVB UDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9JbmRleFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BB X1NDQU5fSU5ERVg7CisJCQkJYnJlYWs7CisJCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJCQlz dHJhdGVneSA9IFBHUEFfU0NBTl9JTkRFWF9PTkxZOworCQkJCWJyZWFrOworCQkJY2FzZSBUX1Rp ZFNjYW46CisJCQljYXNlIFRfVGlkUmFuZ2VTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FO X1RJRDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisKKwkJCQkvKgorCQkJCSAqIFRoaXMgY2Fz ZSBpbmNsdWRlcyBhIEZvcmVpZ25TY2FuIHRhcmdldGluZyBhIHNpbmdsZQorCQkJCSAqIHJlbGF0 aW9uOyBubyBvdGhlciBzdHJhdGVneSBpcyBwb3NzaWJsZSBpbiB0aGF0IGNhc2UsIGJ1dAorCQkJ CSAqIHNlZSBiZWxvdywgd2hlcmUgdGhpbmdzIGFyZSBkaWZmZXJlbnQgaW4gbXVsdGktcmVsYXRp b24KKwkJCQkgKiBjYXNlcy4KKwkJCQkgKi8KKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJ TkFSWTsKKwkJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICgocmVsaWRzID0gcGdwYV9yZWxp ZHMocGxhbikpICE9IE5VTEwpCisJeworCQlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJCXsKKwkJ CWNhc2UgVF9Gb3JlaWduU2NhbjoKKworCQkJCS8qCisJCQkJICogSWYgbXVsdGlwbGUgcmVsYXRp b25zIGFyZSBiZWluZyB0YXJnZXRlZCBieSBhIHNpbmdsZQorCQkJCSAqIGZvcmVpZ24gc2Nhbiwg dGhlbiB0aGUgZm9yZWlnbiBqb2luIGhhcyBiZWVuIHB1c2hlZCB0byB0aGUKKwkJCQkgKiByZW1v dGUgc2lkZSwgYW5kIHdlIHdhbnQgdGhhdCB0byBiZSByZWZsZWN0ZWQgaW4gdGhlCisJCQkJICog Z2VuZXJhdGVkIGFkdmljZS4KKwkJCQkgKi8KKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9GT1JF SUdOOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0FwcGVuZDoKKworCQkJCS8qCisJCQkJICogQXBw ZW5kIG5vZGVzIGNhbiByZXByZXNlbnQgcGFydGl0aW9ud2lzZSBzY2FucyBvZiBhIGEKKwkJCQkg KiByZWxhdGlvbiwgYnV0IHdoZW4gdGhleSBpbXBsZW1lbnQgYSBzZXQgb3BlcmF0aW9uLCB0aGV5 IGFyZQorCQkJCSAqIGp1c3Qgb3JkaW5hcnkgc2NhbnMuCisJCQkJICovCisJCQkJaWYgKHVuaXF1 ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpCisJCQkJCT09 IFJURV9SRUxBVElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsK KwkJCQllbHNlCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCQkJCWNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQkJKChBcHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzOworCQkJCWJyZWFrOworCQkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJCS8q IFNvbWUgbG9naWMgaGVyZSBhcyBmb3IgQXBwZW5kLCBhYm92ZS4gKi8KKwkJCQlpZiAodW5pcXVl X25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSkKKwkJCQkJPT0g UlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFOwor CQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CisJCQkJY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCQkoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGlsZF9h cHBlbmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RyYXRlZ3kg PSBQR1BBX1NDQU5fT1JESU5BUlk7CisJCQkJYnJlYWs7CisJCX0KKworCisJCS8qIEpvaW4gUlRJ cyBjYW4gYmUgcHJlc2VudCwgYnV0IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4gKi8KKwkJ cmVsaWRzID0gcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2VyLT5wc3Rt dC0+cnRhYmxlKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYW4gQXBwZW5kIG9yIE1lcmdl QXBwZW5kIG5vZGUgaW50byB3aGljaCBzdWJvcmRpbmF0ZSBBcHBlbmQKKwkgKiBvciBNZXJnZUFw cGVuZCBwYXRocyB3ZXJlIG1lcmdlZCwgZWFjaCBvZiB0aG9zZSBtZXJnZWQgcGF0aHMgaXMKKwkg KiBlZmZlY3RpdmVseSBhbm90aGVyIHNjYW4gZm9yIHdoaWNoIHdlIG5lZWQgdG8gYWNjb3VudC4K KwkgKi8KKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBjaGlsZF9yZWxpZHMsIGNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzKQorCXsKKwkJQml0bWFwc2V0ICAqY2hpbGRfbm9uam9pbl9yZWxpZHM7CisK KwkJY2hpbGRfbm9uam9pbl9yZWxpZHMgPQorCQkJcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRz KGNoaWxkX3JlbGlkcywKKwkJCQkJCQkJCQl3YWxrZXItPnBzdG10LT5ydGFibGUpOworCQkodm9p ZCkgcGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVneSwKKwkJCQkJCQkgIGNoaWxk X25vbmpvaW5fcmVsaWRzLAorCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwl9CisKKwkv KgorCSAqIElmIHRoaXMgcGxhbiBub2RlIGhhcyBubyBhc3NvY2lhdGVkIFJUSXMsIGl0J3Mgbm90 IGEgc2Nhbi4gV2hlbiB0aGUKKwkgKiAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpcyBzZXQs IHRoYXQncyB1bmV4cGVjdGVkLCBzbyB0aHJvdyBhbgorCSAqIGVycm9yLCBlbHNlIHJldHVybiBx dWlldGx5LgorCSAqLworCWlmIChyZWxpZHMgPT0gTlVMTCkKKwl7CisJCWlmICh3aXRoaW5fam9p bl9wcm9ibGVtKQorCQkJZWxvZyhFUlJPUiwgInBsYW4gbm9kZSBoYXMgbm8gUlRJczogJWQiLCAo aW50KSBub2RlVGFnKHBsYW4pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBncGFf bWFrZV9zY2FuKHdhbGtlciwgcGxhbiwgc3RyYXRlZ3ksIHJlbGlkcywgYmVuZWF0aF9hbnlfZ2F0 aGVyKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHNpbmdsZSBwZ3BhX3NjYW4gb2JqZWN0IGFuZCB1 cGRhdGUgdGhlIHBncGFfcGxhbl93YWxrZXJfY29udGV4dC4KKyAqLworc3RhdGljIHBncGFfc2Nh biAqCitwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxh biAqcGxhbiwKKwkJCSAgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwgQml0bWFwc2V0ICpy ZWxpZHMsCisJCQkgICBib29sIGJlbmVhdGhfYW55X2dhdGhlcikKK3sKKwlwZ3BhX3NjYW4gICpz Y2FuOworCisJLyogQ3JlYXRlIHRoZSBzY2FuIG9iamVjdC4gKi8KKwlzY2FuID0gcGFsbG9jKHNp emVvZihwZ3BhX3NjYW4pKTsKKwlzY2FuLT5wbGFuID0gcGxhbjsKKwlzY2FuLT5zdHJhdGVneSA9 IHN0cmF0ZWd5OworCXNjYW4tPnJlbGlkcyA9IHJlbGlkczsKKwlzY2FuLT5iZW5lYXRoX2FueV9n YXRoZXIgPSBiZW5lYXRoX2FueV9nYXRoZXI7CisKKwkvKiBBZGQgaXQgdG8gdGhlIGFwcHJvcHJp YXRlIGxpc3QuICovCisJd2Fsa2VyLT5zY2Fuc1tzY2FuLT5zdHJhdGVneV0gPSBsYXBwZW5kKHdh bGtlci0+c2NhbnNbc2Nhbi0+c3RyYXRlZ3ldLAorCQkJCQkJCQkJCQlzY2FuKTsKKworCS8qCisJ ICogV2UgaW50ZW5kIHRvIGVtaXQgTk9fR0FUSEVSKCkgYWR2aWNlIGZvciBlYWNoIHNjYW4gdGhh dCBkb2Vzbid0IGFwcGVhcgorCSAqIGJlbmVhdGggYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5v ZGUsIGJ1dCB3ZSBuZWVkIG5vdCBkbyB0aGlzIGZvcgorCSAqIHBhcnRpdGlvbndpc2Ugc2NhbnMs IGJlY2F1c2UgZW1pdHRpbmcgTk9fR0FUSEVSKCkgZm9yIHRoZSBjaGlsZCBzY2FucworCSAqIHN1 ZmZpY2VzLgorCSAqLworCWlmICghc2Nhbi0+YmVuZWF0aF9hbnlfZ2F0aGVyICYmIHNjYW4tPnN0 cmF0ZWd5ICE9IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFKQorCQl3YWxrZXItPm5vX2dhdGhlcl9z Y2FucyA9IGJtc19hZGRfbWVtYmVycyh3YWxrZXItPm5vX2dhdGhlcl9zY2FucywKKwkJCQkJCQkJ CQkJCSAgc2Nhbi0+cmVsaWRzKTsKKworCXJldHVybiBzY2FuOworfQorCisvKgorICogRGV0ZXJt aW5lIHRoZSB1bmlxdWUgcnRla2luZCBvZiBhIHNldCBvZiByZWxpZHMuCisgKi8KK3N0YXRpYyBS VEVLaW5kCit1bmlxdWVfbm9uam9pbl9ydGVraW5kKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0ICpy dGFibGUpCit7CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVJURUtp bmQJCXJ0ZWtpbmQ7CisKKwlBc3NlcnQocmVsaWRzICE9IE5VTEwpOworCisJd2hpbGUgKChydGkg PSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRy eSAqcnRlID0gcnRfZmV0Y2gocnRpLCBydGFibGUpOworCisJCWlmIChydGUtPnJ0ZWtpbmQgPT0g UlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQlpZiAoZmlyc3QpCisJCXsKKwkJCXJ0ZWtpbmQg PSBydGUtPnJ0ZWtpbmQ7CisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisJCWVsc2UgaWYgKHJ0ZWtp bmQgIT0gcnRlLT5ydGVraW5kKQorCQkJZWxvZyhFUlJPUiwgInJ0ZWtpbmQgbWlzbWF0Y2g6ICVk IHZzLiAlZCIsCisJCQkJIHJ0ZWtpbmQsIHJ0ZS0+cnRla2luZCk7CisJfQorCisJaWYgKGZpcnN0 KQorCQllbG9nKEVSUk9SLCAibm8gbm9uLVJURV9KT0lOIFJURXMgZm91bmQiKTsKKworCXJldHVy biBydGVraW5kOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Nj YW4uaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkwYTA4YjQxYzViCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApAQCAtMCwwICsxLDg2IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uaAorICoJICBhbmFseXNpcyBvZiBzY2Fu cyBpbiBQbGFuIHRyZWVzCisgKgorICogRm9yIHB1cnBvc2VzIG9mIHRoaXMgbW9kdWxlLCBhICJz Y2FuIiBpbmNsdWRlcyAoMSkgc2luZ2xlIHBsYW4gbm9kZXMgdGhhdAorICogc2NhbiBtdWx0aXBs ZSBSVElzLCBzdWNoIGFzIGEgZGVnZW5lcmF0ZSBSZXN1bHQgbm9kZSB0aGF0IHJlcGxhY2VzIHdo YXQKKyAqIHdvdWxkIG90aGVyd2lzZSBoYXZlIGJlZW4gYSBqb2luLCBhbmQgKDIpIEFwcGVuZCBh bmQgTWVyZ2VBcHBlbmQgbm9kZXMKKyAqIGltcGxlbWVudGluZyBhIHBhcnRpdGlvbndpc2Ugc2Nh biBvciBhIHBhcnRpdGlvbndpc2Ugam9pbi4gU2FpZAorICogZGlmZmVyZW50bHksIHNjYW5zIGFy ZSB0aGUgbGVhdmVzIG9mIHRoZSBqb2luIHRyZWUgZm9yIGEgc2luZ2xlIGpvaW4KKyAqIHByb2Js ZW0uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nh bi5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9TQ0FOX0gKKyNk ZWZpbmUgUEdQQV9TQ0FOX0gKKworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorCit0eXBl ZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0OworCisvKgorICogU2NhbiBzdHJhdGVnaWVzLgorICoKKyAqIFBHUEFfU0NBTl9PUkRJTkFS WSBpcyBhbnkgc2NhbiBzdHJhdGVneSB0aGF0IGlzbid0IGludGVyZXN0aW5nIHRvIHVzCisgKiBi ZWNhdXNlIHRoZXJlIGlzIG5vIG1lYW5pbmdmdWwgcGxhbm5lciBkZWNpc2lvbiBpbnZvbHZlZC4g Rm9yIGV4YW1wbGUsCisgKiB0aGUgb25seSB3YXkgdG8gc2NhbiBhIHN1YnF1ZXJ5IGlzIGEgU3Vi cXVlcnlTY2FuLCBhbmQgdGhlIG9ubHkgd2F5IHRvCisgKiBzY2FuIGEgVkFMVUVTIGNvbnN0cnVj dCBpcyBhIFZhbHVlc1NjYW4uIFdlIG5lZWQgbm90IGNhcmUgZXhhY3RseSB3aGljaAorICogdHlw ZSBvZiBwbGFubmVyIG5vZGUgd2FzIHVzZWQgaW4gc3VjaCBjYXNlcywgYmVjYXVzZSB0aGUgc2Ft ZSB0aGluZyB3aWxsCisgKiBoYXBwZW4gd2hlbiByZXBsYW5uaW5nLgorICoKKyAqIFBHUEFfU0NB Tl9PUkRJTkFSWSBhbHNvIGluY2x1ZGVzIFJlc3VsdCBub2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8g c2NhbnMKKyAqIG9yIGV2ZW4gam9pbnMgdGhhdCBhcmUgcHJvdmVkIGVtcHR5LiBXZSBkb24ndCBr bm93IHdoZXRoZXIgb3Igbm90IHRoZSBzY2FuCisgKiBvciBqb2luIHdpbGwgc3RpbGwgYmUgcHJv dmFibHkgZW1wdHkgYXQgcmVwbGFubmluZyB0aW1lLCBidXQgaWYgaXQgaXMsCisgKiB0aGVuIG5v IHNjYW4tdHlwZSBhZHZpY2UgaXMgbmVlZGVkLCBhbmQgaWYgaXQncyBub3QsIHdlIGNhbid0IHJl Y29tbWVuZAorICogYSBzY2FuIHR5cGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGxhbi4KKyAqCisg KiBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSBhbHNvIGx1bXBzIHRvZ2V0aGVyIHNjYW5zIGFuZCBq b2luczogdGhpcyBjYW4KKyAqIGJlIGVpdGhlciBhIHBhcnRpdGlvbndpc2Ugc2NhbiBvZiBhIHBh cnRpdGlvbmVkIHRhYmxlIG9yIGEgcGFydGl0aW9ud2lzZQorICogam9pbiBiZXR3ZWVuIHNldmVy YWwgcGFydGl0aW9uZWQgdGFibGVzLiBOb3RlIHRoYXQgYWxsIGRlY2lzaW9ucyBhYm91dAorICog d2hldGhlciBvciBub3QgdG8gdXNlIHBhcnRpdGlvbndpc2Ugam9pbiBhcmUgbWVhbmluZ2Z1bDog bm8gbWF0dGVyIHdoYXQKKyAqIHdlIGRlY2lkZWQgdGhpcyB0aW1lLCB3ZSBjb3VsZCBkbyBtb3Jl IG9yIGZld2VyIHRoaW5ncyBwYXJ0aXRpb253aXNlIHRoZQorICogbmV4dCB0aW1lLgorICoKKyAq IFBHUEFfU0NBTl9GT1JFSUdOIGlzIG9ubHkgdXNlZCB3aGVuIHRoZXJlJ3MgbW9yZSB0aGFuIG9u ZSByZWxhdGlvbiBpbnZvbHZlZDsKKyAqIGEgc2luZ2xlLXRhYmxlIGZvcmVpZ24gc2NhbiBpcyBj bGFzc2lmaWVkIGFzIG9yZGluYXJ5LCBzaW5jZSB0aGVyZSBpcyBubworICogZGVjaXNpb24gdG8g bWFrZSBpbiB0aGF0IGNhc2UuCisgKgorICogT3RoZXIgc2NhbiBzdHJhdGVnaWVzIG1hcCBvbmUt dG8tb25lIHRvIHBsYW4gbm9kZXMuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFfU0NBTl9P UkRJTkFSWSA9IDAsCisJUEdQQV9TQ0FOX1NFUSwKKwlQR1BBX1NDQU5fQklUTUFQX0hFQVAsCisJ UEdQQV9TQ0FOX0ZPUkVJR04sCisJUEdQQV9TQ0FOX0lOREVYLAorCVBHUEFfU0NBTl9JTkRFWF9P TkxZLAorCVBHUEFfU0NBTl9QQVJUSVRJT05XSVNFLAorCVBHUEFfU0NBTl9USUQKKwkvKiB1cGRh dGUgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8KK30g cGdwYV9zY2FuX3N0cmF0ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX1NDQU5fU1RSQVRFR1kJKChp bnQpIFBHUEFfU0NBTl9USUQgKyAxKQorCisvKgorICogQWxsIG9mIHRoZSBkZXRhaWxzIHdlIG5l ZWQgcmVnYXJkaW5nIGEgc2Nhbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9zY2FuCit7CisJ UGxhbgkgICAqcGxhbjsKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3k7CisJQml0bWFwc2V0 ICAqcmVsaWRzOworCWJvb2wJCWJlbmVhdGhfYW55X2dhdGhlcjsKK30gcGdwYV9zY2FuOworCitl eHRlcm4gcGdwYV9zY2FuICpwZ3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUs CisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkJCSAgYm9vbCB3aXRo aW5fam9pbl9wcm9ibGVtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfc2Nhbm5lci5sIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5u ZXIubApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmU3ZDdiYTEzYTYK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5s CkBAIC0wLDAgKzEsMjk5IEBACisldG9weworLyoKKyAqIFNjYW5uZXIgZm9yIHBsYW4gYWR2aWNl CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIu bAorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcu aCIKKyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvc2NhbnN1 cC5oIgorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgor CisvKgorICogRXh0cmEgZGF0YSB0aGF0IHdlIHBhc3MgYXJvdW5kIHdoZW4gZHVyaW5nIHNjYW5u aW5nLgorICoKKyAqICdsaXRidWYnIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSA8eGQ+IGV4Y2x1 c2l2ZSBzdGF0ZSwgd2hpY2ggaGFuZGxlcworICogZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycy4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV95eV9leHRyYV90eXBlCit7CisJU3RyaW5nSW5mb0Rh dGEJbGl0YnVmOworfSBwZ3BhX3l5X2V4dHJhX3R5cGU7CisKK30KKworJXsKKy8qIExDT1ZfRVhD TF9TVEFSVCAqLworCisjZGVmaW5lIFlZX0RFQ0wgXAorCWV4dGVybiBpbnQgcGdwYV95eWxleCh1 bmlvbiBZWVNUWVBFICp5eWx2YWxfcGFyYW0sIExpc3QgKipyZXN1bHQsIFwKKwkJCQkJCSAgY2hh ciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKKy8qIE5vIHJlYXNv biB0byBjb25zdHJhaW4gYW1vdW50IG9mIGRhdGEgc2x1cnBlZCAqLworI2RlZmluZSBZWV9SRUFE X0JVRl9TSVpFIDE2Nzc3MjE2CisKKy8qIEF2b2lkIGV4aXQoKSBvbiBmYXRhbCBzY2FubmVyIGVy cm9ycyAoYSBiaXQgdWdseSAtLSBzZWUgeXlfZmF0YWxfZXJyb3IpICovCisjdW5kZWYgZnByaW50 ZgorI2RlZmluZSBmcHJpbnRmKGZpbGUsIGZtdCwgbXNnKSAgZnByaW50Zl90b19lcmVwb3J0KGZt dCwgbXNnKQorCitzdGF0aWMgdm9pZAorZnByaW50Zl90b19lcmVwb3J0KGNvbnN0IGNoYXIgKmZt dCwgY29uc3QgY2hhciAqbXNnKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJtc2dfaW50ZXJuYWwo IiVzIiwgbXNnKSkpOworfQorJX0KKworJW9wdGlvbiByZWVudHJhbnQKKyVvcHRpb24gYmlzb24t YnJpZGdlCislb3B0aW9uIDhiaXQKKyVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24g bm9kZWZhdWx0Cislb3B0aW9uIG5vaW5wdXQKKyVvcHRpb24gbm91bnB1dAorJW9wdGlvbiBub3l5 d3JhcAorJW9wdGlvbiBub3l5YWxsb2MKKyVvcHRpb24gbm95eXJlYWxsb2MKKyVvcHRpb24gbm95 eWZyZWUKKyVvcHRpb24gd2FybgorJW9wdGlvbiBwcmVmaXg9InBncGFfeXkiCislb3B0aW9uIGV4 dHJhLXR5cGU9InBncGFfeXlfZXh0cmFfdHlwZSAqIgorCisvKgorICogV2hhdCBmb2xsb3dzIGlz IGEgc2V2ZXJlbHkgc3RyaXBwZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBjb3JlIHNjYW5uZXIuIFdl CisgKiBvbmx5IGNhcmUgYWJvdXQgcmVjb2duaXppbmcgaWRlbnRpZmllcnMgd2l0aCBvciB3aXRo b3V0IGlkZW50aWZpZXIgcXVvdGluZworICogKGkuZS4gZG91YmxlLXF1b3RpbmcpLCBkZWNpbWFs IGludGVnZXJzLCBhbmQgYSBzbWFsbCBoYW5kZnVsIG9mIG90aGVyCisgKiB0aGluZ3MuIEtlZXAg dGhlc2UgcnVsZXMgaW4gc3luYyB3aXRoIHNyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwuIEFzIGlu IHRoYXQKKyAqIGZpbGUsIHdlIHVzZSBhbiBleGNsdXNpdmUgc3RhdGUgY2FsbGVkICd4YycgZm9y IEMtc3R5bGUgY29tbWVudHMsIGFuZCBhbgorICogZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAneGQn IGZvciBkb3VibGUtcXVvdGVkIGlkZW50aWZpZXJzLgorICovCisleCB4YworJXggeGQKKworaWRl bnRfc3RhcnQJCVtBLVphLXpcMjAwLVwzNzdfXQoraWRlbnRfY29udAkJW0EtWmEtelwyMDAtXDM3 N18wLTlcJF0KKworaWRlbnRpZmllcgkJe2lkZW50X3N0YXJ0fXtpZGVudF9jb250fSoKKworZGVj ZGlnaXQJCVswLTldCitkZWNpbnRlZ2VyCQl7ZGVjZGlnaXR9KF8/e2RlY2RpZ2l0fSkqCisKK3Nw YWNlCQkJWyBcdFxuXHJcZlx2XQord2hpdGVzcGFjZQkJe3NwYWNlfSsKKworZHF1b3RlCQkJXCIK K3hkc3RhcnQJCQl7ZHF1b3RlfQoreGRzdG9wCQkJe2RxdW90ZX0KK3hkZG91YmxlCQl7ZHF1b3Rl fXtkcXVvdGV9Cit4ZGluc2lkZQkJW14iXSsKKworeGNzdGFydAkJCVwvXCoKK3hjc3RvcAkJCVwq K1wvCit4Y2luc2lkZQkJW14qL10rCisKKyUlCisKK3t3aGl0ZXNwYWNlfQl7IC8qIGlnbm9yZSAq LyB9CisKK3tpZGVudGlmaWVyfQl7CisJCQkJCWNoYXIgICAqc3RyOworCQkJCQlib29sCWZhaWw7 CisJCQkJCXBncGFfYWR2aWNlX3RhZ190eXBlCXRhZzsKKworCQkJCQkvKgorCQkJCQkgKiBVbmxp a2UgdGhlIGNvcmUgc2Nhbm5lciwgd2UgZG9uJ3QgdHJ1bmNhdGUgaWRlbnRpZmllcnMKKwkJCQkJ ICogaGVyZS4gVGhlcmUgaXMgbm8gb2J2aW91cyByZWFzb24gdG8gZG8gc28uCisJCQkJCSAqLwor CQkJCQlzdHIgPSBkb3duY2FzZV9pZGVudGlmaWVyKHl5dGV4dCwgeXlsZW5nLCBmYWxzZSwgZmFs c2UpOworCQkJCQl5eWx2YWwtPnN0ciA9IHN0cjsKKworCQkJCQkvKgorCQkJCQkgKiBJZiBpdCdz IG5vdCBhIHRhZywganVzdCByZXR1cm4gVE9LX0lERU5UOyBlbHNlLCByZXR1cm4KKwkJCQkJICog YSB0b2tlbiB0eXBlIGJhc2VkIG9uIGhvdyBmdXJ0aGVyIHBhcnNpbmcgc2hvdWxkCisJCQkJCSAq IHByb2NlZWQuCisJCQkJCSAqLworCQkJCQl0YWcgPSBwZ3BhX3BhcnNlX2FkdmljZV90YWcoc3Ry LCAmZmFpbCk7CisJCQkJCWlmIChmYWlsKQorCQkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQkJ ZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCQkJCQlyZXR1cm4gVE9LX1RB R19KT0lOX09SREVSOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8 fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKQorCQkJCQkJcmV0dXJu IFRPS19UQUdfSU5ERVg7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19CSVRNQVBfSEVB UF9TQ0FOKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfQklUTUFQOworCQkJCQllbHNlIGlmICh0YWcg PT0gUEdQQV9UQUdfU0VRX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX1RJRF9TQ0FO IHx8CisJCQkJCQkJIHRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCQkJCQlyZXR1cm4gVE9L X1RBR19TSU1QTEU7CisJCQkJCWVsc2UKKwkJCQkJCXJldHVybiBUT0tfVEFHX0dFTkVSSUM7CisJ CQkJfQorCit7ZGVjaW50ZWdlcn0JeworCQkJCQljaGFyICAgKmVuZHB0cjsKKworCQkJCQllcnJu byA9IDA7CisJCQkJCXl5bHZhbC0+aW50ZWdlciA9IHN0cnRvaW50KHl5dGV4dCwgJmVuZHB0ciwg MTApOworCQkJCQlpZiAoKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vID09IEVSQU5HRSkKKwkJCQkJ CXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJ CQkJCQkgImludGVnZXIgb3V0IG9mIHJhbmdlIik7CisJCQkJCXJldHVybiBUT0tfSU5URUdFUjsK KwkJCQl9CisKK3t4Y3N0YXJ0fQkJeworCQkJCQlCRUdJTih4Yyk7CisJCQkJfQorCit7eGRzdGFy dH0JCXsKKwkJCQkJQkVHSU4oeGQpOworCQkJCQlyZXNldFN0cmluZ0luZm8oJnl5ZXh0cmEtPmxp dGJ1Zik7CisJCQkJfQorCisifHwiCQkJeyByZXR1cm4gVE9LX09SOyB9CisKKyImJiIJCQl7IHJl dHVybiBUT0tfQU5EOyB9CisKKy4JCQkJeyByZXR1cm4geXl0ZXh0WzBdOyB9CisKKzx4Yz57eGNz dG9wfQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCX0KKworPHhjPnt4Y2luc2lkZX0Jewor CQkJCQkvKiBkaXNjYXJkIG11bHRpcGxlIGNoYXJhY3RlcnMgd2l0aG91dCBzbGFzaCBvciBhc3Rl cmlzayAqLworCQkJCX0KKworPHhjPi4JCQl7CisJCQkJCS8qCisJCQkJCSAqIERpc2NhcmQgYW55 IHNpbmdsZSBjaGFyYWN0ZXIuIGZsZXggcHJlZmVycyBsb25nZXIKKwkJCQkJICogbWF0Y2hlcywg c28gdGhpcyBydWxlIHdpbGwgbmV2ZXIgYmUgcGlja2VkIHdoZW4gd2UgY291bGQKKwkJCQkJICog aGF2ZSBtYXRjaGVkIHhjc3RvcC4KKwkJCQkJICoKKwkJCQkJICogTkI6IEF0IHByZXNlbnQsIHdl IGRvbid0IGJvdGhlciB0byBzdXBwb3J0IG5lc3RlZAorCQkJCQkgKiBDLXN0eWxlIGNvbW1lbnRz IGhlcmUsIGJ1dCB0aGlzIGxvZ2ljIGNvdWxkIGJlIGV4dGVuZGVkCisJCQkJCSAqIGlmIHRoYXQg cmVzdHJpY3Rpb24gcG9zZXMgYSBwcm9ibGVtLgorCQkJCQkgKi8KKwkJCQl9CisKKzx4Yz48PEVP Rj4+CQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBw YXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVudGVybWluYXRlZCBjb21t ZW50Iik7CisJCQkJfQorCis8eGQ+e3hkc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJ CQkJeXlsdmFsLT5zdHIgPSBwc3RyZHVwKHl5ZXh0cmEtPmxpdGJ1Zi5kYXRhKTsKKwkJCQkJcmV0 dXJuIFRPS19JREVOVDsKKwkJCQl9CisKKzx4ZD57eGRkb3VibGV9CXsKKwkJCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoJnl5ZXh0cmEtPmxpdGJ1ZiwgJyInKTsKKwkJCQl9CisKKzx4ZD57eGRpbnNp ZGV9CXsKKwkJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmeXlleHRyYS0+bGl0YnVmLCB5eXRl eHQsIHl5bGVuZyk7CisJCQkJfQorCis8eGQ+PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJTklUSUFM KTsKKwkJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5l ciwKKwkJCQkJCQkJICJ1bnRlcm1pbmF0ZWQgcXVvdGVkIGlkZW50aWZpZXIiKTsKKwkJCQl9CisK KyUlCisKKy8qIExDT1ZfRVhDTF9TVE9QICovCisKKy8qCisgKiBIYW5kbGVyIGZvciBlcnJvcnMg d2hpbGUgc2Nhbm5pbmcgb3IgcGFyc2luZyBhZHZpY2UuCisgKgorICogYmlzb24gcGFzc2VzIHRo ZSBlcnJvciBtZXNzYWdlIHRvIHVzIHZpYSAnbWVzc2FnZScsIGFuZCB0aGUgY29udGV4dCBpcwor ICogYXZhaWxhYmxlIHZpYSB0aGUgJ3l5dGV4dCcgbWFjcm8uIFdlIGFzc2VtYmxlIHRob3NlIHZh bHVlcyBpbnRvIGEgZmluYWwKKyAqIGVycm9yIHRleHQgYW5kIHRoZW4gYXJyYW5nZSB0byBwYXNz IGl0IGJhY2sgdG8gdGhlIGNhbGxlciBvZiBwZ3BhX3l5cGFyc2UoKQorICogYnkgc3RvcmluZyBp dCBpbnRvICpwYXJzZV9lcnJvcl9tc2dfcC4KKyAqLwordm9pZAorcGdwYV95eWVycm9yKExpc3Qg KipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyLAor CQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJc3RydWN0IHl5Z3V0c190ICp5eWcgPSAoc3Ry dWN0IHl5Z3V0c190ICopIHl5c2Nhbm5lcjsJLyogbmVlZGVkIGZvciB5eXRleHQKKwkJCQkJCQkJ CQkJCQkJCSAqIG1hY3JvICovCisKKworCS8qIHJlcG9ydCBvbmx5IHRoZSBmaXJzdCBlcnJvciBp biBhIHBhcnNlIG9wZXJhdGlvbiAqLworCWlmICgqcGFyc2VfZXJyb3JfbXNnX3ApCisJCXJldHVy bjsKKworCWlmICh5eXRleHRbMF0pCisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBzcHJpbnRmKCIl cyBhdCBvciBuZWFyIFwiJXNcIiIsIG1lc3NhZ2UsIHl5dGV4dCk7CisJZWxzZQorCQkqcGFyc2Vf ZXJyb3JfbXNnX3AgPSBwc3ByaW50ZigiJXMgYXQgZW5kIG9mIGlucHV0IiwgbWVzc2FnZSk7Cit9 CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBhZHZpY2Ugc2Nhbm5lci4KKyAqCisgKiBUaGlzIHNo b3VsZCBiZSBjYWxsZWQgYmVmb3JlIHBhcnNpbmcgYmVnaW5zLgorICovCit2b2lkCitwZ3BhX3Nj YW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJwKQoreworCXl5 c2Nhbl90CXl5c2Nhbm5lcjsKKwlwZ3BhX3l5X2V4dHJhX3R5cGUJKnl5ZXh0ID0gcGFsbG9jMF9v YmplY3QocGdwYV95eV9leHRyYV90eXBlKTsKKworCWlmICh5eWxleF9pbml0KHl5c2Nhbm5lcnAp ICE9IDApCisJCWVsb2coRVJST1IsICJ5eWxleF9pbml0KCkgZmFpbGVkOiAlbSIpOworCisJeXlz Y2FubmVyID0gKnl5c2Nhbm5lcnA7CisKKwlpbml0U3RyaW5nSW5mbygmeXlleHQtPmxpdGJ1Zik7 CisJcGdwYV95eXNldF9leHRyYSh5eWV4dCwgeXlzY2FubmVyKTsKKworCXl5X3NjYW5fc3RyaW5n KHN0ciwgeXlzY2FubmVyKTsKK30KKworCisvKgorICogU2h1dCBkb3duIHRoZSBhZHZpY2Ugc2Nh bm5lci4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcGFyc2luZyBpcyBjb21w bGV0ZS4KKyAqLwordm9pZAorcGdwYV9zY2FubmVyX2ZpbmlzaCh5eXNjYW5fdCB5eXNjYW5uZXIp Cit7CisJeXlsZXhfZGVzdHJveSh5eXNjYW5uZXIpOworfQorCisvKgorICogSW50ZXJmYWNlIGZ1 bmN0aW9ucyB0byBtYWtlIGZsZXggdXNlIHBhbGxvYygpIGluc3RlYWQgb2YgbWFsbG9jKCkuCisg KiBJdCdkIGJlIGJldHRlciB0byBtYWtlIHRoZXNlIHN0YXRpYywgYnV0IGZsZXggaW5zaXN0cyBv dGhlcndpc2UuCisgKi8KKwordm9pZCAqCit5eWFsbG9jKHl5X3NpemVfdCBzaXplLCB5eXNjYW5f dCB5eXNjYW5uZXIpCit7CisJcmV0dXJuIHBhbGxvYyhzaXplKTsKK30KKwordm9pZCAqCit5eXJl YWxsb2Modm9pZCAqcHRyLCB5eV9zaXplX3Qgc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKQorewor CWlmIChwdHIpCisJCXJldHVybiByZXBhbGxvYyhwdHIsIHNpemUpOworCWVsc2UKKwkJcmV0dXJu IHBhbGxvYyhzaXplKTsKK30KKwordm9pZAoreXlmcmVlKHZvaWQgKnB0ciwgeXlzY2FuX3QgeXlz Y2FubmVyKQoreworCWlmIChwdHIpCisJCXBmcmVlKHB0cik7Cit9CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV90cm92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hOTIx MjFmZWIxZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90 cm92ZS5jCkBAIC0wLDAgKzEsNDkwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3Bh X3Ryb3ZlLmMKKyAqCSAgQWxsIG9mIHRoZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGljdWxhciBx dWVyeSwgYXBwcm9wcmlhdGVseQorICogICAgb3JnYW5pemVkIGZvciBjb252ZW5pZW50IGFjY2Vz cy4KKyAqCisgKiBUaGlzIG5hbWUgY29tZXMgZnJvbSB0aGUgRW5nbGlzaCBleHByZXNzaW9uICJ0 cm92ZSBvZiBhZHZpY2UiLCB3aGljaAorICogbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHdpc2RvbS4g VGhpcyBzbGlnaHRseSB1bnVzdWFsIHRlcm0gaXMgY2hvc2VuIHRvCisgKiBhdm9pZCBuYW1pbmcg Y29uZnVzaW9uOyBmb3IgZXhhbXBsZSwgImNvbGxlY3Rpb24gb2YgYWR2aWNlIiB3b3VsZAorICog aW52aXRlIGNvbmZ1c2lvbiB3aXRoIHBncGFfY29sbGVjdG9yLmMuIE5vdGUgdGhhdCwgd2hpbGUg d2UgZG9uJ3Qga25vdworICogd2hldGhlciB0aGUgcHJvdmlkZWQgYWR2aWNlIGlzIGFjdHVhbGx5 IHdpc2UsIGl0J3Mgbm90IG91ciBqb2IgdG8KKyAqIHF1ZXN0aW9uIHRoZSB1c2VyJ3MgY2hvaWNl cy4KKyAqCisgKiBUaGUgZ29hbCBvZiB0aGlzIG1vZHVsZSBpcyB0byBtYWtlIGl0IGVhc3kgdG8g bG9jYXRlIHRoZSBzcGVjaWZpYworICogYml0cyBvZiBhZHZpY2UgdGhhdCBwZXJ0YWluIHRvIGFu eSBnaXZlbiBwYXJ0IG9mIGEgcXVlcnksIG9yIHRvCisgKiBkZXRlcm1pbmUgdGhhdCB0aGVyZSBh cmUgbm9uZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV90cm92ZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2hhc2hm bl91bnN0YWJsZS5oIgorCisvKgorICogQW4gYWR2aWNlIHRyb3ZlIGlzIG9yZ2FuaXplZCBpbnRv IGEgc2VyaWVzIG9mICJzbGljZXMiLCBlYWNoIG9mIHdoaWNoCisgKiBjb250YWlucyBpbmZvcm1h dGlvbiBhYm91dCBvbmUgdG9waWMgZS5nLiBzY2FuIG1ldGhvZHMuIEVhY2ggc2xpY2UgY29uc2lz dHMKKyAqIG9mIGFuIGFycmF5IG9mIHRyb3ZlIGVudHJpZXMgcGx1cyBhIGhhc2ggdGFibGUgdGhh dCB3ZSBjYW4gdXNlIHRvIGRldGVybWluZQorICogd2hpY2ggb25lcyBhcmUgcmVsZXZhbnQgdG8g YSBwYXJ0aWN1bGFyIHBhcnQgb2YgdGhlIHF1ZXJ5LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3Bh X3Ryb3ZlX3NsaWNlCit7CisJdW5zaWduZWQJbmFsbG9jYXRlZDsKKwl1bnNpZ25lZAludXNlZDsK KwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCXN0cnVjdCBwZ3BhX3Ryb3ZlX2VudHJ5X2hh c2ggKmhhc2g7Cit9IHBncGFfdHJvdmVfc2xpY2U7CisKKy8qCisgKiBTY2FuIGFkdmljZSBpcyBz dG9yZWQgaW50byAnc2Nhbic7IGpvaW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdqb2luJzsgYW5k CisgKiBhZHZpY2UgdGhhdCBjYW4gYXBwbHkgdG8gYm90aCBjYXNlcyBpcyBzdG9yZWQgaW50byAn cmVsJy4gVGhpcyBsZXRzIGNhbGxlcnMKKyAqIGFzayBqdXN0IGZvciB3aGF0J3MgcmVsZXZhbnQu IFRoZXNlIHNsaWNlcyBjb3JyZXNwb25kIHRvIHRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAqIG9mIHBn cGFfdHJvdmVfbG9va3VwX3R5cGUuCisgKi8KK3N0cnVjdCBwZ3BhX3Ryb3ZlCit7CisJcGdwYV90 cm92ZV9zbGljZSBqb2luOworCXBncGFfdHJvdmVfc2xpY2UgcmVsOworCXBncGFfdHJvdmVfc2xp Y2Ugc2NhbjsKK307CisKKy8qCisgKiBXZSdyZSBnb2luZyB0byBidWlsZCBhIGhhc2ggdGFibGUg dG8gYWxsb3cgY2xpZW50cyBvZiB0aGlzIG1vZHVsZSB0byBmaW5kCisgKiByZWxldmFudCBhZHZp Y2UgZm9yIGEgZ2l2ZW4gcGFydCBvZiB0aGUgcXVlcnkgcXVpY2tseS4gSG93ZXZlciwgd2UncmUg Z29pbmcKKyAqIHRvIHVzZSBvbmx5IHRocmVlIG9mIHRoZSBmaXZlIGtleSBmaWVsZHMgYXMgaGFz aCBrZXlzLiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMKKyAqIGZvciB0aGlzLgorICoKKyAqIEZpcnN0 LCBpdCdzIGFsbG93YWJsZSB0byBzZXQgcGFydGl0aW9uX3NjaGVtYSB0byBOVUxMIHRvIG1hdGNo IGEgcGFydGl0aW9uCisgKiB3aXRoIHRoZSBjb3JyZWN0IG5hbWUgaW4gYW55IHNjaGVtYS4KKyAq CisgKiBTZWNvbmQsIHdlIGV4cGVjdCB0aGUgIm9jY3VycmVuY2UiIGFuZCAicGFydGl0aW9uX3Nj aGVtYSIgcG9ydGlvbnMgb2YgdGhlCisgKiByZWxhdGlvbiBpZGVudGlmaWVycyB0byBiZSBtb3N0 bHkgdW5pbnRlcmVzdGluZy4gTW9zdCBvZiB0aGUgdGltZSwgdGhlCisgKiBvY2N1cnJlbmNlIGZp ZWxkIHdpbGwgYmUgMSBhbmQgdGhlIHBhcnRpdGlvbl9zY2hlbWEgdmFsdWVzIHdpbGwgYWxsIGJl IHRoZQorICogc2FtZS4gRXZlbiB3aGVuIHRoZXJlIGlzIHNvbWUgdmFyaWF0aW9uLCB0aGUgYWJz b2x1dGUgbnVtYmVyIG9mIGVudHJpZXMKKyAqIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgZm9y IGFsbCB0aHJlZSBvZiB0aGVzZSBrZXkgZmllbGRzIHNob3VsZCBiZQorICogcXVpdGUgc21hbGwu CisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY29uc3QgY2hhciAqYWxpYXNfbmFtZTsKKwljb25z dCBjaGFyICpwYXJ0aXRpb25fbmFtZTsKKwljb25zdCBjaGFyICpwbGFuX25hbWU7Cit9IHBncGFf dHJvdmVfZW50cnlfa2V5OworCit0eXBlZGVmIHN0cnVjdAoreworCXBncGFfdHJvdmVfZW50cnlf a2V5IGtleTsKKwlpbnQJCQlzdGF0dXM7CisJQml0bWFwc2V0ICAqaW5kZXhlczsKK30gcGdwYV90 cm92ZV9lbnRyeV9lbGVtZW50OworCitzdGF0aWMgdWludDMyIHBncGFfdHJvdmVfZW50cnlfaGFz aF9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkga2V5KTsKKworc3RhdGljIGlubGluZSBib29sCitw Z3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5KHBncGFfdHJvdmVfZW50cnlfa2V5IGEsIHBncGFf dHJvdmVfZW50cnlfa2V5IGIpCit7CisJaWYgKHN0cmNtcChhLmFsaWFzX25hbWUsIGIuYWxpYXNf bmFtZSkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2Jv dGhfbnVsbChhLnBhcnRpdGlvbl9uYW1lLCBiLnBhcnRpdGlvbl9uYW1lKSkKKwkJcmV0dXJuIGZh bHNlOworCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChhLnBsYW5fbmFtZSwgYi5w bGFuX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2RlZmlu ZSBTSF9QUkVGSVgJCQlwZ3BhX3Ryb3ZlX2VudHJ5CisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRQkJ cGdwYV90cm92ZV9lbnRyeV9lbGVtZW50CisjZGVmaW5lIFNIX0tFWV9UWVBFCQkJcGdwYV90cm92 ZV9lbnRyeV9rZXkKKyNkZWZpbmUgU0hfS0VZCQkJCWtleQorI2RlZmluZSBTSF9IQVNIX0tFWSh0 Yiwga2V5KQlwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2hfa2V5KGtleSkKKyNkZWZpbmUJU0hfRVFVQUwo dGIsIGEsIGIpCXBncGFfdHJvdmVfZW50cnlfY29tcGFyZV9rZXkoYSwgYikKKyNkZWZpbmUgU0hf U0NPUEUJCQlzdGF0aWMgaW5saW5lCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNkZWZpbmUgU0hfREVG SU5FCisjaW5jbHVkZSAibGliL3NpbXBsZWhhc2guaCIKKworc3RhdGljIHZvaWQgcGdwYV9pbml0 X3Ryb3ZlX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSk7CitzdGF0aWMgdm9pZCBwZ3Bh X3Ryb3ZlX2FkZF90b19zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQkJCQlw Z3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldCk7CitzdGF0aWMgdm9pZCBwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKHBncGFfdHJvdmVfZW50 cnlfaGFzaCAqaGFzaCwKKwkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJ CQkJCQkJCSAgIGludCBpbmRleCk7CitzdGF0aWMgQml0bWFwc2V0ICpwZ3BhX3Ryb3ZlX3NsaWNl X2xvb2t1cChwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50 aWZpZXIgKnJpZCk7CisKKy8qCisgKiBCdWlsZCBhIHRyb3ZlIG9mIGFkdmljZSBmcm9tIGEgbGlz dCBvZiBhZHZpY2UgaXRlbXMuCisgKgorICogQ2FsbGVyIGNhbiBvYnRhaW4gYSBsaXN0IG9mIGFk dmljZSBpdGVtcyB0byBwYXNzIHRvIHRoaXMgZnVuY3Rpb24gYnkKKyAqIGNhbGxpbmcgcGdwYV9w YXJzZSgpLgorICovCitwZ3BhX3Ryb3ZlICoKK3BncGFfYnVpbGRfdHJvdmUoTGlzdCAqYWR2aWNl X2l0ZW1zKQoreworCXBncGFfdHJvdmUgKnRyb3ZlID0gcGFsbG9jX29iamVjdChwZ3BhX3Ryb3Zl KTsKKworCXBncGFfaW5pdF90cm92ZV9zbGljZSgmdHJvdmUtPmpvaW4pOworCXBncGFfaW5pdF90 cm92ZV9zbGljZSgmdHJvdmUtPnJlbCk7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+ c2Nhbik7CisKKwlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV9pdGVtLCBpdGVtLCBhZHZpY2VfaXRl bXMpCisJeworCQlzd2l0Y2ggKGl0ZW0tPnRhZykKKwkJeworCQkJY2FzZSBQR1BBX1RBR19KT0lO X09SREVSOgorCQkJCXsKKwkJCQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisKKwkJCQkJ LyoKKwkJCQkJICogRm9yIG1vc3QgYWR2aWNlIHR5cGVzLCBlYWNoIGVsZW1lbnQgaW4gdGhlIHRv cC1sZXZlbAorCQkJCQkgKiBsaXN0IGlzIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQgaXQncyBtb3N0 IGNvbnZlbmllbnQgdG8KKwkJCQkJICogcmVnYXJkIHRoZSBlbnRpcmV0eSBvZiBhIEpPSU5fT1JE RVIgc3BlY2lmaWNhdGlvbiBhcyBhCisJCQkJCSAqIHNpbmdsZSB0YXJnZXQuIFNpbmNlIGl0IHdh c24ndCByZXByZXNlbnRlZCB0aGF0IHdheQorCQkJCQkgKiBkdXJpbmcgcGFyc2luZywgYnVpbGQg YSBzdXJyb2dhdGUgb2JqZWN0IG5vdy4KKwkJCQkJICovCisJCQkJCXRhcmdldCA9IHBhbGxvYzBf b2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkJCXRhcmdldC0+dHR5cGUgPSBQR1BBX1RB UkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkJCXRhcmdldC0+Y2hpbGRyZW4gPSBpdGVtLT50YXJnZXRz OworCisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+am9pbiwKKwkJCQkJCQkJ CQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBQR1BB X1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46 CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FO OgorCQkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoKKworCQkJCS8qCisJCQkJICogU2NhbiBhZHZp Y2UuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQs IGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3Igbm93LCBhbGwgb2Yg b3VyIHNjYW4gdHlwZXMgdGFyZ2V0IHNpbmdsZSByZWxhdGlvbnMsCisJCQkJCSAqIGJ1dCBpbiB0 aGUgZnV0dXJlIHRoaXMgbWlnaHQgbm90IGJlIHRydWUsIGUuZy4gYSBjdXN0b20KKwkJCQkJICog c2NhbiBjb3VsZCByZXBsYWNlIGEgam9pbi4KKwkJCQkJICovCisJCQkJCUFzc2VydCh0YXJnZXQt PnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpOworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90 b19zbGljZSgmdHJvdmUtPnNjYW4sCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJ CQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJY2Fz ZSBQR1BBX1RBR19IQVNIX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJ QUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJCQljYXNlIFBHUEFf VEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9P UF9NRU1PSVpFOgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCWNhc2Ug UEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5f VU5JUVVFOgorCisJCQkJLyoKKwkJCQkgKiBKb2luIHN0cmF0ZWd5IGFkdmljZS4KKwkJCQkgKi8K KwkJCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0 cykKKwkJCQl7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+am9pbiwKKwkJ CQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2Fz ZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJY2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQlj YXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgor CisJCQkJLyoKKwkJCQkgKiBBZHZpY2UgYWJvdXQgYSBSZWxPcHRJbmZvIHJlbGV2YW50IHRvIGJv dGggc2NhbnMgYW5kIGpvaW5zLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNl X3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJcGdwYV90cm92ZV9h ZGRfdG9fc2xpY2UoJnRyb3ZlLT5yZWwsCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsK KwkJCQl9CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJvdmU7Cit9CisKKy8qCisg KiBTZWFyY2ggYSB0cm92ZSBvZiBhZHZpY2UgZm9yIHJlbGV2YW50IGVudHJpZXMuCisgKgorICog QWxsIHBhcmFtZXRlcnMgYXJlIGlucHV0IHBhcmFtZXRlcnMgZXhjZXB0IGZvciAqcmVzdWx0LCB3 aGljaCBpcyBhbiBvdXRwdXQKKyAqIHBhcmFtZXRlciB1c2VkIHRvIHJldHVybiByZXN1bHRzIHRv IHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfbG9va3VwKHBncGFfdHJvdmUgKnRy b3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJICBpbnQgbnJpZHMsIHBncGFf aWRlbnRpZmllciAqcmlkcywgcGdwYV90cm92ZV9yZXN1bHQgKnJlc3VsdCkKK3sKKwlwZ3BhX3Ry b3ZlX3NsaWNlICp0c2xpY2U7CisJQml0bWFwc2V0ICAqaW5kZXhlczsKKworCUFzc2VydChucmlk cyA+IDApOworCisJaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfU0NBTikKKwkJdHNsaWNl ID0gJnRyb3ZlLT5zY2FuOworCWVsc2UgaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfSk9J TikKKwkJdHNsaWNlID0gJnRyb3ZlLT5qb2luOworCWVsc2UKKwkJdHNsaWNlID0gJnRyb3ZlLT5y ZWw7CisKKwlpbmRleGVzID0gcGdwYV90cm92ZV9zbGljZV9sb29rdXAodHNsaWNlLCAmcmlkc1sw XSk7CisJZm9yIChpbnQgaSA9IDE7IGkgPCBucmlkczsgKytpKQorCXsKKwkJQml0bWFwc2V0ICAq b3RoZXJfaW5kZXhlczsKKworCQkvKgorCQkgKiBJZiB0aGUgY2FsbGVyIGlzIGFza2luZyBhYm91 dCB0d28gcmVsYXRpb25zIHRoYXQgYXJlbid0IHBhcnQgb2YgdGhlCisJCSAqIHNhbWUgc3VicXVl cnksIHRoZXkndmUgbWVzc2VkIHVwLgorCQkgKi8KKwkJQXNzZXJ0KHN0cmluZ3NfZXF1YWxfb3Jf Ym90aF9udWxsKHJpZHNbMF0ucGxhbl9uYW1lLAorCQkJCQkJCQkJCSAgcmlkc1tpXS5wbGFuX25h bWUpKTsKKworCQlvdGhlcl9pbmRleGVzID0gcGdwYV90cm92ZV9zbGljZV9sb29rdXAodHNsaWNl LCAmcmlkc1tpXSk7CisJCWluZGV4ZXMgPSBibXNfdW5pb24oaW5kZXhlcywgb3RoZXJfaW5kZXhl cyk7CisJfQorCisJcmVzdWx0LT5lbnRyaWVzID0gdHNsaWNlLT5lbnRyaWVzOworCXJlc3VsdC0+ aW5kZXhlcyA9IGluZGV4ZXM7Cit9CisKKy8qCisgKiBSZXR1cm4gYWxsIGVudHJpZXMgaW4gYSB0 cm92ZSBzbGljZSB0byB0aGUgY2FsbGVyLgorICoKKyAqIFRoZSBmaXJzdCB0d28gYXJndW1lbnRz IGFyZSBpbnB1dCBhcmd1bWVudHMsIGFuZCB0aGUgcmVtYWluZGVyIGFyZSBvdXRwdXQKKyAqIGFy Z3VtZW50cy4KKyAqLwordm9pZAorcGdwYV90cm92ZV9sb29rdXBfYWxsKHBncGFfdHJvdmUgKnRy b3ZlLCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCSAgcGdwYV90cm92ZV9lbnRy eSAqKmVudHJpZXMsIGludCAqbmVudHJpZXMpCit7CisJcGdwYV90cm92ZV9zbGljZSAqdHNsaWNl OworCisJaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfU0NBTikKKwkJdHNsaWNlID0gJnRy b3ZlLT5zY2FuOworCWVsc2UgaWYgKHR5cGUgPT0gUEdQQV9UUk9WRV9MT09LVVBfSk9JTikKKwkJ dHNsaWNlID0gJnRyb3ZlLT5qb2luOworCWVsc2UKKwkJdHNsaWNlID0gJnRyb3ZlLT5yZWw7CisK KwkqZW50cmllcyA9IHRzbGljZS0+ZW50cmllczsKKwkqbmVudHJpZXMgPSB0c2xpY2UtPm51c2Vk OworfQorCisvKgorICogQ29udmVydCBhIHRyb3ZlIGVudHJ5IHRvIGFuIGl0ZW0gb2YgcGxhbiBh ZHZpY2UgdGhhdCB3b3VsZCBwcm9kdWNlIGl0LgorICovCitjaGFyICoKK3BncGFfY3N0cmluZ190 cm92ZV9lbnRyeShwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBi dWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIl cyIsIHBncGFfY3N0cmluZ19hZHZpY2VfdGFnKGVudHJ5LT50YWcpKTsKKworCS8qIEpPSU5fT1JE RVIgdGFncyBhcmUgdHJhbnNmb3JtZWQgYnkgcGdwYV9idWlsZF90cm92ZTsgdW5kbyB0aGF0IGhl cmUgKi8KKwlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19KT0lOX09SREVSKQorCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcigmYnVmLCAnKCcpOworCWVsc2UKKwkJQXNzZXJ0KGVudHJ5LT50YXJnZXQt PnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisKKwlwZ3BhX2Zvcm1hdF9hZHZp Y2VfdGFyZ2V0KCZidWYsIGVudHJ5LT50YXJnZXQpOworCisJaWYgKGVudHJ5LT50YXJnZXQtPml0 YXJnZXQgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcgJyk7CisJ CXBncGFfZm9ybWF0X2luZGV4X3RhcmdldCgmYnVmLCBlbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KTsK Kwl9CisKKwlpZiAoZW50cnktPnRhZyAhPSBQR1BBX1RBR19KT0lOX09SREVSKQorCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcigmYnVmLCAnKScpOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCisvKgor ICogU2V0IFBHUEFfVEVfKiBmbGFncyBvbiBhIHNldCBvZiB0cm92ZSBlbnRyaWVzLgorICovCit2 b2lkCitwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzLCBCaXRt YXBzZXQgKmluZGV4ZXMsIGludCBmbGFncykKK3sKKwlpbnQJCQlpID0gLTE7CisKKwl3aGlsZSAo KGkgPSBibXNfbmV4dF9tZW1iZXIoaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCisJCWVudHJ5LT5mbGFncyB8PSBmbGFnczsK Kwl9Cit9CisKKy8qCisgKiBBZGQgYSBuZXcgYWR2aWNlIHRhcmdldCB0byBhbiBleGlzdGluZyBw Z3BhX3Ryb3ZlX3NsaWNlIG9iamVjdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJvdmVfYWRk X3RvX3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCXBncGFfYWR2aWNlX3Rh Z190eXBlIHRhZywKKwkJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQoreworCXBncGFf dHJvdmVfZW50cnkgKmVudHJ5OworCisJaWYgKHRzbGljZS0+bnVzZWQgPj0gdHNsaWNlLT5uYWxs b2NhdGVkKQorCXsKKwkJaW50CQkJbmV3X2FsbG9jYXRlZDsKKworCQluZXdfYWxsb2NhdGVkID0g dHNsaWNlLT5uYWxsb2NhdGVkICogMjsKKwkJdHNsaWNlLT5lbnRyaWVzID0gcmVwYWxsb2NfYXJy YXkodHNsaWNlLT5lbnRyaWVzLCBwZ3BhX3Ryb3ZlX2VudHJ5LAorCQkJCQkJCQkJCSBuZXdfYWxs b2NhdGVkKTsKKwkJdHNsaWNlLT5uYWxsb2NhdGVkID0gbmV3X2FsbG9jYXRlZDsKKwl9CisKKwll bnRyeSA9ICZ0c2xpY2UtPmVudHJpZXNbdHNsaWNlLT5udXNlZF07CisJZW50cnktPnRhZyA9IHRh ZzsKKwllbnRyeS0+dGFyZ2V0ID0gdGFyZ2V0OworCWVudHJ5LT5mbGFncyA9IDA7CisKKwlwZ3Bh X3Ryb3ZlX2FkZF90b19oYXNoKHRzbGljZS0+aGFzaCwgdGFyZ2V0LCB0c2xpY2UtPm51c2VkKTsK KworCXRzbGljZS0+bnVzZWQrKzsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgaGFzaCB0YWJsZSBm b3IgYSBuZXdseS1hZGRlZCBhZHZpY2UgdGFyZ2V0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90 cm92ZV9hZGRfdG9faGFzaChwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2gsIHBncGFfYWR2aWNl X3RhcmdldCAqdGFyZ2V0LAorCQkJCQkgICBpbnQgaW5kZXgpCit7CisJcGdwYV90cm92ZV9lbnRy eV9rZXkga2V5OworCXBncGFfdHJvdmVfZW50cnlfZWxlbWVudCAqZWxlbWVudDsKKwlib29sCQlm b3VuZDsKKworCS8qIEZvciBub24taWRlbnRpZmllcnMsIGFkZCBlbnRyaWVzIGZvciBhbGwgZGVz Y2VuZGVudHMuICovCisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklF UikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0 YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlwZ3BhX3Ryb3ZlX2FkZF90b19oYXNoKGhhc2gsIGNo aWxkX3RhcmdldCwgaW5kZXgpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKiBTYW5pdHkgY2hl Y2tzLiAqLworCUFzc2VydCh0YXJnZXQtPnJpZC5vY2N1cnJlbmNlID4gMCk7CisJQXNzZXJ0KHRh cmdldC0+cmlkLmFsaWFzX25hbWUgIT0gTlVMTCk7CisKKwkvKiBBZGQgYW4gZW50cnkgZm9yIHRo aXMgcmVsYXRpb24gaWRlbnRpZmllci4gKi8KKwlrZXkuYWxpYXNfbmFtZSA9IHRhcmdldC0+cmlk LmFsaWFzX25hbWU7CisJa2V5LnBhcnRpdGlvbl9uYW1lID0gdGFyZ2V0LT5yaWQucGFydHJlbDsK KwlrZXkucGxhbl9uYW1lID0gdGFyZ2V0LT5yaWQucGxhbl9uYW1lOworCWVsZW1lbnQgPSBwZ3Bh X3Ryb3ZlX2VudHJ5X2luc2VydChoYXNoLCBrZXksICZmb3VuZCk7CisJZWxlbWVudC0+aW5kZXhl cyA9IGJtc19hZGRfbWVtYmVyKGVsZW1lbnQtPmluZGV4ZXMsIGluZGV4KTsKK30KKworLyoKKyAq IENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBwZ3BhX3Ryb3ZlX3NsaWNlIG9iamVjdC4KKyAq Lworc3RhdGljIHZvaWQKK3BncGFfaW5pdF90cm92ZV9zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0 c2xpY2UpCit7CisJLyoKKwkgKiBJbiBhbiBpZGVhbCB3b3JsZCwgd2UnbGwgbWFrZSB0c2xpY2Ut Pm5hbGxvY2F0ZWQgYmlnIGVub3VnaCB0aGF0IHRoZQorCSAqIGFycmF5IGFuZCBoYXNoIHRhYmxl IHdpbGwgYmUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIG51bWJlciBvZgorCSAqIGFkdmlj ZSBpdGVtcyBpbiB0aGlzIHRyb3ZlIHNsaWNlLCBidXQgYSBnZW5lcm91cyBkZWZhdWx0IHZhbHVl IGlzIG5vdAorCSAqIGdvb2QgZm9yIHBlcmZvcm1hbmNlLCBiZWNhdXNlIHBncGFfaW5pdF90cm92 ZV9zbGljZSgpIGhhcyB0byB6ZXJvIGFuCisJICogYW1vdW50IG9mIG1lbW9yeSBwcm9wb3J0aW9u YWwgdG8gdHNsaWNlLT5uYWxsb2NhdGVkLiBIZW5jZSwgd2Uga2VlcCB0aGUKKwkgKiBzdGFydGlu ZyB2YWx1ZSBxdWl0ZSBzbWFsbCwgb24gdGhlIHRoZW9yeSB0aGF0IGFkdmljZSBzdHJpbmdzIHdp bGwKKwkgKiBvZnRlbiBiZSByZWxhdGl2ZWx5IHNob3J0LgorCSAqLworCXRzbGljZS0+bmFsbG9j YXRlZCA9IDE2OworCXRzbGljZS0+bnVzZWQgPSAwOworCXRzbGljZS0+ZW50cmllcyA9IHBhbGxv Y19hcnJheShwZ3BhX3Ryb3ZlX2VudHJ5LCB0c2xpY2UtPm5hbGxvY2F0ZWQpOworCXRzbGljZS0+ aGFzaCA9IHBncGFfdHJvdmVfZW50cnlfY3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJ CQkJCQkJCSAgIHRzbGljZS0+bmFsbG9jYXRlZCwgTlVMTCk7Cit9CisKKy8qCisgKiBGYXN0IGhh c2ggZnVuY3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYWxpYXNfbmFtZSwgcGFydGl0aW9u X25hbWUsCisgKiBhbmQgcGxhbl9uYW1lLgorICovCitzdGF0aWMgdWludDMyCitwZ3BhX3Ryb3Zl X2VudHJ5X2hhc2hfa2V5KHBncGFfdHJvdmVfZW50cnlfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9z dGF0ZSBoczsKKwlpbnQJCQlzcF9sZW47CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwkv KiBhbGlhc19uYW1lIG1heSBub3QgYmUgTlVMTCAqLworCXNwX2xlbiA9IGZhc3RoYXNoX2FjY3Vt X2NzdHJpbmcoJmhzLCBrZXkuYWxpYXNfbmFtZSk7CisKKwkvKiBwYXJ0aXRpb25fbmFtZSBhbmQg cGxhbl9uYW1lLCBob3dldmVyLCBjYW4gYmUgTlVMTCAqLworCWlmIChrZXkucGFydGl0aW9uX25h bWUgIT0gTlVMTCkKKwkJc3BfbGVuICs9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXku cGFydGl0aW9uX25hbWUpOworCWlmIChrZXkucGxhbl9uYW1lICE9IE5VTEwpCisJCXNwX2xlbiAr PSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5LnBsYW5fbmFtZSk7CisKKwkvKgorCSAq IGhhc2hmbl91bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBhcyB0d2Vh ay4gSXQncyBub3QKKwkgKiBjbGVhciB0byBtZSB3aGF0IHRvIGRvIGlmIHRoZXJlIGFyZSBtdWx0 aXBsZSBzdHJpbmdzLCBzbyBmb3Igbm93IEknbQorCSAqIGp1c3QgdXNpbmcgdGhlIHRvdGFsIG9m IGFsbCBvZiB0aGUgbGVuZ3Rocy4KKwkgKi8KKwlyZXR1cm4gZmFzdGhhc2hfZmluYWwzMigmaHMs IHNwX2xlbik7Cit9CisKKy8qCisgKiBMb29rIGZvciBtYXRjaGluZyBlbnRyaWVzLgorICovCitz dGF0aWMgQml0bWFwc2V0ICoKK3BncGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJvdmVfc2xp Y2UgKnRzbGljZSwgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJcGdwYV90cm92ZV9lbnRyeV9r ZXkga2V5OworCXBncGFfdHJvdmVfZW50cnlfZWxlbWVudCAqZWxlbWVudDsKKwlCaXRtYXBzZXQg ICpyZXN1bHQgPSBOVUxMOworCisJQXNzZXJ0KHJpZC0+b2NjdXJyZW5jZSA+PSAxKTsKKworCWtl eS5hbGlhc19uYW1lID0gcmlkLT5hbGlhc19uYW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHJp ZC0+cGFydHJlbDsKKwlrZXkucGxhbl9uYW1lID0gcmlkLT5wbGFuX25hbWU7CisKKwllbGVtZW50 ID0gcGdwYV90cm92ZV9lbnRyeV9sb29rdXAodHNsaWNlLT5oYXNoLCBrZXkpOworCisJaWYgKGVs ZW1lbnQgIT0gTlVMTCkKKwl7CisJCWludAkJCWkgPSAtMTsKKworCQl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIoZWxlbWVudC0+aW5kZXhlcywgaSkpID49IDApCisJCXsKKwkJCXBncGFfdHJv dmVfZW50cnkgKmVudHJ5ID0gJnRzbGljZS0+ZW50cmllc1tpXTsKKworCQkJLyoKKwkJCSAqIFdl IGtub3cgdGhhdCB0aGlzIHRhcmdldCBvciBvbmUgb2YgaXRzIGRlc2NlbmRlbnRzIG1hdGNoZXMg dGhlCisJCQkgKiBpZGVudGlmaWVyIG9uIHRoZSB0aHJlZSBrZXkgZmllbGRzIGFib3ZlLCBidXQg d2UgZG9uJ3Qga25vdworCQkJICogd2hpY2ggZGVzY2VuZGVudCBvciB3aGV0aGVyIHRoZSBvY2N1 cmVuY2UgYW5kIHNjaGVtYSBhbHNvCisJCQkgKiBtYXRjaC4KKwkJCSAqLworCQkJaWYgKHBncGFf aWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChyaWQsIGVudHJ5LT50YXJnZXQpKQorCQkJCXJlc3Vs dCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwgaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0 OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmggYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNDc5YzNmNzU3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaApAQCAtMCwwICsxLDExMyBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogcGdwYV90cm92ZS5oCisgKgkgIEFsbCBvZiB0aGUgYWR2aWNlIGdp dmVuIGZvciBhIHBhcnRpY3VsYXIgcXVlcnksIGFwcHJvcHJpYXRlbHkKKyAqICAgIG9yZ2FuaXpl ZCBmb3IgY29udmVuaWVudCBhY2Nlc3MuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aWZuZGVmIFBHUEFfVFJPVkVfSAorI2RlZmluZSBQR1BBX1RST1ZFX0gKKworI2luY2x1ZGUgInBn cGFfYXN0LmgiCisKKyNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKKwordHlwZWRlZiBzdHJ1 Y3QgcGdwYV90cm92ZSBwZ3BhX3Ryb3ZlOworCisvKgorICogRmxhZ3MgdGhhdCBjYW4gYmUgc2V0 IG9uIGEgcGdwYV90cm92ZV9lbnRyeSB0byBpbmRpY2F0ZSB3aGF0IGhhcHBlbmVkIHdoZW4KKyAq IHRyeWluZyB0byBwbGFuIHVzaW5nIGFkdmljZS4KKyAqCisgKiBQR1BBX1RFX01BVENIX1BBUlRJ QUwgbWVhbnMgdGhhdCB3ZSBmb3VuZCBzb21lIHBhcnQgb2YgdGhlIHF1ZXJ5IHRoYXQgYXQKKyAq IGxlYXN0IHBhcnRpYWxseSBtYXRjaGVkIHRoZSB0YXJnZXQ7IGUuZy4gZ2l2ZW4gSk9JTl9PUkRF UihhIGIpLCB0aGlzIHdvdWxkCisgKiBiZSBzZXQgaWYgd2UgZXZlciBzYXcgYW55IGpvaW5yZWwg aW5jbHVkaW5nIGVpdGhlciAiYSIgb3IgImIiLgorICoKKyAqIFBHUEFfVEVfTUFUQ0hfRlVMTCBt ZWFucyB0aGF0IHdlIGZvdW5kIGFuIGV4YWN0IG1hdGNoIGZvciB0aGUgdGFyZ2V0OyBlLmcuCisg KiBnaXZlbiBKT0lOX09SREVSKGEgYiksIHRoaXMgd291bGQgYmUgc2V0IGlmIHdlIHNhdyBhIGpv aW5yZWwgY29udGFpbmluZworICogZXhhY3RseSAiYSIgYW5kICJiIiBhbmQgbm90aGluZyBlbHNl LgorICoKKyAqIFBHUEFfVEVfSU5BUFBMSUNBQkxFIG1lYW5zIHRoYXQgdGhlIGFkdmljZSBkb2Vz bid0IHByb3Blcmx5IGFwcGx5IHRvIHRoZQorICogdGFyZ2V0OyBlLmcuIElOREVYX1NDQU4oZm9v IGJhcl9pZHgpIHdvdWxkIGJlIHNvIG1hcmtlZCBpZiBiYXJfaWR4IGRvZXMgbm90CisgKiBleGlz dCBvbiBmb28uIFRoZSBmYWN0IHRoYXQgdGhpcyBiaXQgaGFzIGJlZW4gc2V0IGRvZXMgbm90IG1l YW4gdGhhdCB0aGUKKyAqIGFkdmljZSBoYWQgbm8gZWZmZWN0LgorICoKKyAqIFBHUEFfVEVfQ09O RkxJQ1RJTkcgbWVhbnMgdGhhdCBhIGNvbmZsaWN0IHdhcyBkZXRlY3RlZCBiZXR3ZWVuIHdoYXQg dGhpcworICogYWR2aWNlIHdhbnRzIGFuZCB3aGF0IHNvbWUgb3RoZXIgcGxhbiBhZHZpY2Ugd2Fu dHM7IGUuZy4gSk9JTl9PUkRFUihhIGIpCisgKiB3b3VsZCBjb25mbGljdCB3aXRoIEhBU0hfSk9J TihhKSwgYmVjYXVzZSB0aGUgZm9ybWVyIHJlcXVpcmVzICJhIiB0byBiZSB0aGUKKyAqIG91dGVy IHRhYmxlIHdoaWxlIHRoZSBsYXR0ZXIgcmVxdWlyZXMgaXQgdG8gYmUgdGhlIGlubmVyIHRhYmxl LgorICoKKyAqIFBHUEFfVEVfRkFJTEVEIG1lYW5zIHRoYXQgdGhlIHJlc3VsdGluZyBwbGFuIGRp ZCBub3QgY29uZm9ybSB0byB0aGUgYWR2aWNlLgorICovCisjZGVmaW5lIFBHUEFfVEVfTUFUQ0hf UEFSVElBTAkJMHgwMDAxCisjZGVmaW5lIFBHUEFfVEVfTUFUQ0hfRlVMTAkJCTB4MDAwMgorI2Rl ZmluZSBQR1BBX1RFX0lOQVBQTElDQUJMRQkJMHgwMDA0CisjZGVmaW5lIFBHUEFfVEVfQ09ORkxJ Q1RJTkcJCQkweDAwMDgKKyNkZWZpbmUgUEdQQV9URV9GQUlMRUQJCQkJMHgwMDEwCisKKy8qCisg KiBFYWNoIGVudHJ5IGluIGEgdHJvdmUgb2YgYWR2aWNlIHJlcHJlc2VudHMgdGhlIGFwcGxpY2F0 aW9uIG9mIGEgdGFnIHRvCisgKiBhIHNpbmdsZSB0YXJnZXQuCisgKi8KK3R5cGVkZWYgc3RydWN0 IHBncGFfdHJvdmVfZW50cnkKK3sKKwlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWc7CisJcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQ7CisJaW50CQkJZmxhZ3M7Cit9IHBncGFfdHJvdmVfZW50cnk7 CisKKy8qCisgKiBXaGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gZG9lcyB0aGUgY2FsbGVyIHdhbnQg dG8gZmluZCBpbiBhIHRyb3ZlPworICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4gbWVhbnMg d2UncmUgbG9va2luZyBmb3Igc2NhbiBhZHZpY2UuCisgKgorICogUEdQQV9UUk9WRV9MT09LVVBf Sk9JTiBtZWFucyB3ZSdyZSBsb29raW5nIGZvciBqb2luLXJlbGF0ZWQgYWR2aWNlLgorICogVGhp cyBpbmNsdWRlcyBqb2luIG9yZGVyIGFkdmljZSwgam9pbiBtZXRob2QgYWR2aWNlLCBhbmQgc2Vt aWpvaW4tdW5pcXVlbmVzcworICogYWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQX1JF TCBtZWFucyB3ZSdyZSBsb29raW5nIGZvciBnZW5lcmFsIGFkdmljZSBhYm91dCB0aGlzCisgKiBh IFJlbE9wdEluZm8gdGhhdCBtYXkgY29ycmVzcG9uZCB0byBlaXRoZXIgYSBzY2FuIG9yIGEgam9p bi4gVGhpcyBpbmNsdWRlcworICogZ2F0aGVyLXJlbGF0ZWQgYWR2aWNlIGFuZCBwYXJ0aXRpb253 aXNlIGFkdmljZS4gTm90ZSB0aGF0IHBhcnRpdGlvbndpc2UKKyAqIGFkdmljZSBtaWdodCBzZWVt IGxpa2Ugam9pbiBhZHZpY2UsIGJ1dCB0aGF0J3Mgbm90IGEgaGVscGZ1bCB3YXkgb2Ygdmlld2lu ZworICogdGhlIG1hdHRlciBiZWNhdXNlICgxKSBwYXJ0aXRpb253aXNlIGFkdmljZSBpcyBhbHNv IHJlbGV2YW50IGF0IHRoZSBzY2FuCisgKiBsZXZlbCBhbmQgKDIpIG90aGVyIHR5cGVzIG9mIGpv aW4gYWR2aWNlIGFmZmVjdCBvbmx5IHdoYXQgdG8gZG8gZnJvbQorICogam9pbl9wYXRoX3NldHVw X2hvb2ssIGJ1dCBwYXJ0aXRpb253aXNlIGFkdmljZSBhZmZlY3RzIHdoYXQgdG8gZG8gaW4KKyAq IGpvaW5yZWxfc2V0dXBfaG9vay4KKyAqLwordHlwZWRlZiBlbnVtIHBncGFfdHJvdmVfbG9va3Vw X3R5cGUKK3sKKwlQR1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCVBHUEFfVFJPVkVfTE9PS1VQX1JF TCwKKwlQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOCit9IHBncGFfdHJvdmVfbG9va3VwX3R5cGU7CisK Ky8qCisgKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgYSB0cm92 ZSBsb29rdXAuIEZvciBlYWNoIG1lbWJlcgorICogb2YgImluZGV4ZXMiLCB0aGUgZW50cnkgYXQg dGhlIGNvcnJlc3BvbmRpbmcgb2Zmc2V0IHdpdGhpbiAiZW50cmllcyIgaXMgb25lCisgKiBvZiB0 aGUgcmVzdWx0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9yZXN1bHQKK3sKKwlw Z3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzOworCUJpdG1hcHNldCAgKmluZGV4ZXM7Cit9IHBncGFf dHJvdmVfcmVzdWx0OworCitleHRlcm4gcGdwYV90cm92ZSAqcGdwYV9idWlsZF90cm92ZShMaXN0 ICphZHZpY2VfaXRlbXMpOworZXh0ZXJuIHZvaWQgcGdwYV90cm92ZV9sb29rdXAocGdwYV90cm92 ZSAqdHJvdmUsCisJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlIHR5cGUsCisJCQkJCQkJ ICBpbnQgbnJpZHMsCisJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJICBw Z3BhX3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfbG9va3Vw X2FsbChwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBl IHR5cGUsCisJCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqKmVudHJpZXMsCisJCQkJCQkJCSAg aW50ICpuZW50cmllcyk7CitleHRlcm4gY2hhciAqcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBn cGFfdHJvdmVfZW50cnkgKmVudHJ5KTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfc2V0X2ZsYWdz KHBncGFfdHJvdmVfZW50cnkgKmVudHJpZXMsCisJCQkJCQkJCSBCaXRtYXBzZXQgKmluZGV4ZXMs IGludCBmbGFncyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3dhbGtlci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZWQyMjI5MTA5NgotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAtMCww ICsxLDg5MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV93YWxrZXIuYworICoJ ICBQbGFuIHRyZWUgaXRlcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJw Z3BhX3NjYW4uaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMv cGxhbm5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorCitzdGF0aWMgdm9p ZCBwZ3BhX3dhbGtfcmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs IFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJ CQkgIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJCQkJICBMaXN0ICph Y3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIp Oworc3RhdGljIEJpdG1hcHNldCAqcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4ocGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCSBwZ3BhX3Vucm9sbGVkX2pvaW4g KnVqb2luKTsKKworc3RhdGljIHBncGFfcXVlcnlfZmVhdHVyZSAqcGdwYV9hZGRfZmVhdHVyZShw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJcGdwYV9xZl90eXBl IHR5cGUsCisJCQkJCQkJCQkJCVBsYW4gKnBsYW4pOworCitzdGF0aWMgdm9pZCBwZ3BhX3FmX2Fk ZF9ydGkoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBJbmRleCBydGkpOworc3RhdGljIHZv aWQgcGdwYV9xZl9hZGRfcnRpcyhMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEJpdG1hcHNl dCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3BsYW5fcnRpcyhMaXN0ICphY3Rp dmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sCisJCQkJCQkJCSAgTGlzdCAqcnRhYmxlKTsK Kworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xs ZWRfam9pbiAqdWpvaW4sCisJCQkJCQkJCQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJ CQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCSAgIHBn cGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJCQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwpOwor c3RhdGljIGJvb2wgcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJlcihwZ3BhX2pv aW5fbWVtYmVyICptZW1iZXIsCisJCQkJCQkJCQkJCQkgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJ CQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJ CQkgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJ CQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFwc2V0ICpy ZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkgcGdwYV9xZl90eXBlIHR5cGUs CisJCQkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJ CQkgIHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAgQml0bWFwc2V0ICpy ZWxpZHMpOworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVs aWRzKTsKK3N0YXRpYyBJbmRleCBwZ3BhX3dhbGtlcl9nZXRfcnRpKEluZGV4IHJ0YWJsZV9sZW5n dGgsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkg cGdwYV9pZGVudGlmaWVyICpyaWQpOworCisvKgorICogVG9wLWxldmVsIGVudHJ5cG9pbnQgZm9y IHRoZSBwbGFuIHRyZWUgd2Fsay4KKyAqCisgKiBQb3B1bGF0ZXMgd2Fsa2VyIGJhc2VkIG9uIGEg dHJhdmVyc2FsIG9mIHRoZSBQbGFuIHRyZWVzIGluIHBzdG10LgorICovCit2b2lkCitwZ3BhX3Bs YW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3RtdCAq cHN0bXQpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwkvKiBJbml0aWFsaXphdGlvbi4gKi8KKwlt ZW1zZXQod2Fsa2VyLCAwLCBzaXplb2YocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0KSk7CisJd2Fs a2VyLT5wc3RtdCA9IHBzdG10OworCisJLyogV2FsayB0aGUgbWFpbiBwbGFuIHRyZWUuICovCisJ cGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgcHN0bXQtPnBsYW5UcmVlLCAwLCBOVUxMLCBO SUwsIGZhbHNlKTsKKworCS8qIE1haW4gcGxhbiB0cmVlIHdhbGsgd29uJ3QgcmVhY2ggc3VicGxh bnMsIHNvIHdhbGsgdGhvc2UuICovCisJZm9yZWFjaChsYywgcHN0bXQtPnN1YnBsYW5zKQorCXsK KwkJUGxhbgkgICAqcGxhbiA9IGxmaXJzdChsYyk7CisKKwkJaWYgKHBsYW4gIT0gTlVMTCkKKwkJ CXBncGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4sIDAsIE5VTEwsIE5JTCwgZmFsc2Up OworCX0KK30KKworLyoKKyAqIE1haW4gd29ya2hvcnNlIGZvciB0aGUgcGxhbiB0cmVlIHdhbGsu CisgKgorICogSWYgd2l0aGluX2pvaW5fcHJvYmxlbSBpcyB0cnVlLCB3ZSBlbmNvdW50ZXJlZCBh IGpvaW4gYXQgc29tZSBoaWdoZXIgbGV2ZWwKKyAqIG9mIHRoZSB0cmVlIHdhbGsgYW5kIGhhdmVu J3QgeWV0IGRlc2NlbmRlZCBvdXQgb2YgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRyZWUg dGhhdCBpcyBwYXJ0IG9mIHRoYXQgc2FtZSBqb2luIHByb2JsZW0uIFdlJ3JlIG5vIGxvbmdlciBp biB0aGUgc2FtZQorICogam9pbiBwcm9ibGVtIGlmICgxKSB3ZSBjcm9zcyBpbnRvIGEgZGlmZmVy ZW50IHN1YnF1ZXJ5IG9yICgyKSB3ZSBkZXNjZW5kCisgKiB0aHJvdWdoIGFuIEFwcGVuZCBvciBN ZXJnZUFwcGVuZCBub2RlLCBiZWxvdyB3aGljaCBhbnkgZnVydGhlciBqb2lucyB3b3VsZAorICog YmUgcGFydGl0aW9ud2lzZSBqb2lucyBwbGFubmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgb3V0ZXIg am9pbiBwcm9ibGVtLgorICoKKyAqIElmIGpvaW5fdW5yb2xsZXIgIT0gTlVMTCwgdGhlIGpvaW4g dW5yb2xsZXIgY29kZSBleHBlY3RzIHVzIHRvIGZpbmQgYSBqb2luCisgKiB0aGF0IHNob3VsZCBi ZSB1bnJvbGxlZCBpbnRvIHRoYXQgb2JqZWN0LiBUaGlzIGltcGxpZXMgdGhhdCB3ZSdyZSB3aXRo aW4gYQorICogam9pbiBwcm9ibGVtLCBidXQgdGhlIHJldmVyc2UgaXMgbm90IHRydWU6IHdoZW4g d2UndmUgdHJhdmVyc2VkIGFsbCB0aGUKKyAqIGpvaW5zIGJ1dCBhcmUgc3RpbGwgbG9va2luZyBm b3IgdGhlIHNjYW4gdGhhdCBpcyB0aGUgbGVhZiBvZiB0aGUgam9pbiB0cmVlLAorICogam9pbl91 bnJvbGxlciB3aWxsIGJlIE5VTEwgYnV0IHdpdGhpbl9qb2luX3Byb2JsZW0gd2lsbCBiZSB0cnVl LgorICoKKyAqIEVhY2ggZWxlbWVudCBvZiBhY3RpdmVfcXVlcnlfZmVhdHVyZXMgY29ycmVzcG9u ZHMgdG8gc29tZSBpdGVtIG9mIGFkdmljZQorICogdGhhdCBuZWVkcyB0byBlbnVtZXJhdGUgYWxs IHRoZSByZWxhdGlvbnMgaXQgYWZmZWN0cy4gV2UgYWRkIFJUSXMgd2UgZmluZAorICogZHVyaW5n IHRyZWUgdHJhdmVyc2FsIHRvIGVhY2ggb2YgdGhlc2UgcXVlcnkgZmVhdHVyZXMuCisgKgorICog SWYgYmVuZWF0aF9hbnlfZ2F0aGVyID09IHRydWUsIHNvbWUgaGlnaGVyIGxldmVsIG9mIHRoZSB0 cmVlIHRyYXZlcnNhbCBmb3VuZAorICogYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX3dhbGtfcmVjdXJzaXZlbHkocGdwYV9wbGFuX3dhbGtlcl9j b250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9i bGVtLAorCQkJCQkgIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkJICBM aXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCSAgYm9vbCBiZW5lYXRoX2FueV9nYXRo ZXIpCit7CisJcGdwYV9qb2luX3Vucm9sbGVyICpvdXRlcl9qb2luX3Vucm9sbGVyID0gTlVMTDsK KwlwZ3BhX2pvaW5fdW5yb2xsZXIgKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBOVUxMOworCWJvb2wJ CWpvaW5fdW5yb2xsZXJfdG9wbGV2ZWwgPSBmYWxzZTsKKwlMaXN0CSAgICpwdXNoZG93bl9xdWVy eV9mZWF0dXJlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpleHRyYXBsYW5z ID0gTklMOworCUxpc3QJICAgKmVsaWRlZF9ub2RlcyA9IE5JTDsKKworCUFzc2VydCh3aXRoaW5f am9pbl9wcm9ibGVtIHx8IGpvaW5fdW5yb2xsZXIgPT0gTlVMTCk7CisKKwkvKgorCSAqIElmIHRo aXMgaXMgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGUsIGRpcmVjdGx5IGFkZCBpdCB0byB0 aGUgbGlzdAorCSAqIG9mIGN1cnJlbnRseS1hY3RpdmUgcXVlcnkgZmVhdHVyZXMuCisJICoKKwkg KiBPdGhlcndpc2UsIGNoZWNrIHRoZSBmdXR1cmVfcXVlcnlfZmVhdHVyZXMgbGlzdCB0byBzZWUg d2hldGhlciB0aGlzIHdhcworCSAqIHByZXZpb3VzbHkgaWRlbnRpZmllZCBhcyBhIHBsYW4gbm9k ZSB0aGF0IG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXMgYQorCSAqIHF1ZXJ5IGZlYXR1cmUuCisJICoK KwkgKiBOb3RlIHRoYXQgdGhlIGNhbGxlciBhbHNvIGhhcyBhIGNvcHkgdG8gYWN0aXZlX3F1ZXJ5 X2ZlYXR1cmVzLCBzbyB3ZQorCSAqIGNhbid0IGRlc3RydWN0aXZlbHkgbW9kaWZ5IGl0IHdpdGhv dXQgbWFraW5nIGEgY29weS4KKwkgKi8KKwlpZiAoSXNBKHBsYW4sIEdhdGhlcikpCisJeworCQlh Y3RpdmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5 X2ZlYXR1cmVzKSwKKwkJCQkJcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9HQVRIRVIs IHBsYW4pKTsKKwkJYmVuZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNB KHBsYW4sIEdhdGhlck1lcmdlKSkKKwl7CisJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9CisJCQls YXBwZW5kKGxpc3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVyZXMpLAorCQkJCQlwZ3BhX2FkZF9m ZWF0dXJlKHdhbGtlciwgUEdQQVFGX0dBVEhFUl9NRVJHRSwgcGxhbikpOworCQliZW5lYXRoX2Fu eV9nYXRoZXIgPSB0cnVlOworCX0KKwllbHNlCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5 X2ZlYXR1cmUsIHFmLCB3YWxrZXItPmZ1dHVyZV9xdWVyeV9mZWF0dXJlcykKKwkJeworCQkJaWYg KHFmLT5wbGFuID09IHBsYW4pCisJCQl7CisJCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gbGlz dF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyk7CisJCQkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz ID0gbGFwcGVuZChhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHFmKTsKKwkJCQl3YWxrZXItPmZ1dHVy ZV9xdWVyeV9mZWF0dXJlcyA9CisJCQkJCWxpc3RfZGVsZXRlX3B0cih3YWxrZXItPmZ1dHVyZV9x dWVyeV9mZWF0dXJlcywgcGxhbik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKgor CSAqIEZpbmQgYWxsIGVsaWRlZCBub2RlcyBmb3IgdGhpcyBQbGFuIG5vZGUuCisJICovCisJZm9y ZWFjaF9ub2RlKEVsaWRlZE5vZGUsIG4sIHdhbGtlci0+cHN0bXQtPmVsaWRlZE5vZGVzKQorCXsK KwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQllbGlkZWRf bm9kZXMgPSBsYXBwZW5kKGVsaWRlZF9ub2Rlcywgbik7CisJfQorCisJLyogSWYgd2UgZm91bmQg YW55IGVsaWRlZF9ub2RlcywgaGFuZGxlIHRoZW0uICovCisJaWYgKGVsaWRlZF9ub2RlcyAhPSBO SUwpCisJeworCQlpbnQJCQludW1fZWxpZGVkX25vZGVzID0gbGlzdF9sZW5ndGgoZWxpZGVkX25v ZGVzKTsKKwkJRWxpZGVkTm9kZSAqbGFzdF9lbGlkZWRfbm9kZTsKKworCQkvKgorCQkgKiBSVElz IGZvciB0aGUgZmluYWwgLS0gYW5kIHRodXMgbG9naWNhbGx5IHVwcGVybW9zdCAtLSBlbGlkZWQg bm9kZQorCQkgKiBzaG91bGQgYmUgY29sbGVjdGVkIGZvciBxdWVyeSBmZWF0dXJlcyBwYXNzZWQg ZG93biBieSB0aGUgY2FsbGVyLgorCQkgKiBIb3dldmVyLCBlbGlkZWQgbm9kZXMgYWN0IGFzIGJh cnJpZXJzIHRvIHF1ZXJ5IGZlYXR1cmVzLCB3aGljaAorCQkgKiBtZWFucyB0aGF0ICgxKSB0aGUg cmVtYWluaW5nIGVsaWRlZCBub2RlcywgaWYgYW55LCBzaG91bGQgYmUKKwkJICogaWdub3JlZCBm b3IgcHVycG9zZXMgb2YgcXVlcnkgZmVhdHVyZXMgYW5kICgyKSB0aGUgbGlzdCBvZiBhY3RpdmUK KwkJICogcXVlcnkgZmVhdHVyZXMgc2hvdWxkIGJlIHJlc2V0IHRvIGVtcHR5IHNvIHRoYXQgd2Ug ZG8gbm90IGFkZCBSVElzCisJCSAqIGZyb20gdGhlIHBsYW4gbm9kZSB0aGF0IGlzIGxvZ2ljYWxs eSBiZW5lYXRoIHRoZSBlbGlkZWQgbm9kZSB0byB0aGUKKwkJICogcXVlcnkgZmVhdHVyZXMgcGFz c2VkIGRvd24gZnJvbSB0aGUgY2FsbGVyLgorCQkgKi8KKwkJbGFzdF9lbGlkZWRfbm9kZSA9IGxp c3RfbnRoKGVsaWRlZF9ub2RlcywgbnVtX2VsaWRlZF9ub2RlcyAtIDEpOworCQlwZ3BhX3FmX2Fk ZF9ydGlzKGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCSBwZ3BhX2ZpbHRlcl9vdXRfam9p bl9yZWxpZHMobGFzdF9lbGlkZWRfbm9kZS0+cmVsaWRzLAorCQkJCQkJCQkJCQkJCSB3YWxrZXIt PnBzdG10LT5ydGFibGUpKTsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0gTklMOworCisJCS8q CisJCSAqIElmIHdlJ3JlIHdpdGhpbiBhIGpvaW4gcHJvYmxlbSwgdGhlIGpvaW5fdW5yb2xsZXIg aXMgcmVzcG9uc2libGUKKwkJICogZm9yIGJ1aWxkaW5nIHRoZSBzY2FuIGZvciB0aGUgZmluYWwg ZWxpZGVkIG5vZGUsIHNvIHRocm93IGl0IG91dC4KKwkJICovCisJCWlmICh3aXRoaW5fam9pbl9w cm9ibGVtKQorCQkJZWxpZGVkX25vZGVzID0gbGlzdF90cnVuY2F0ZShlbGlkZWRfbm9kZXMsIG51 bV9lbGlkZWRfbm9kZXMgLSAxKTsKKworCQkvKiBCdWlsZCBzY2FucyBmb3IgYWxsIChvciB0aGUg cmVtYWluaW5nKSBlbGlkZWQgbm9kZXMuICovCisJCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBl bGlkZWRfbm9kZSwgZWxpZGVkX25vZGVzKQorCQl7CisJCQkodm9pZCkgcGdwYV9idWlsZF9zY2Fu KHdhbGtlciwgcGxhbiwgZWxpZGVkX25vZGUsCisJCQkJCQkJCSAgIGJlbmVhdGhfYW55X2dhdGhl ciwgd2l0aGluX2pvaW5fcHJvYmxlbSk7CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGVyZSB3ZXJl IGFueSBlbGlkZWQgbm9kZXMsIHRoZW4gZXZlcnl0aGluZyBiZW5lYXRoIHRob3NlIG5vZGVzCisJ CSAqIGlzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIGpvaW4gcHJvYmxlbS4KKwkJICoKKwkJICogSW4g bW9yZSBkZXRhaWwsIGlmIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCB3YXMgZWxpZGVkLCB0aGVu IGEKKwkJICogcGFydGl0aW9ud2lzZSBqb2luIHdhcyBjaG9zZW4gYW5kIG9ubHkgYSBzaW5nbGUg Y2hpbGQgc3Vydml2ZWQ7IGlmCisJCSAqIGEgU3VicXVlcnlTY2FuIHdhcyBlbGlkZWQsIHRoZSBz dWJxdWVyeSB3YXMgcGxhbm5lZCB3aXRob3V0CisJCSAqIGZsYXR0ZW5pbmcgaXQgaW50byB0aGUg cGFyZW50LgorCQkgKi8KKwkJd2l0aGluX2pvaW5fcHJvYmxlbSA9IGZhbHNlOworCQlqb2luX3Vu cm9sbGVyID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHdpdGhpbiBhIGpvaW4gcHJv YmxlbSwgdGhlIGpvaW4gdW5yb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yCisJICogYnVpbGRpbmcg YW55IHJlcXVpcmVkIHNjYW4gZm9yIHRoaXMgbm9kZS4gSWYgbm90LCB3ZSBkbyBpdCBoZXJlLgor CSAqLworCWlmICghd2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJKHZvaWQpIHBncGFfYnVpbGRfc2Nh bih3YWxrZXIsIHBsYW4sIE5VTEwsIGJlbmVhdGhfYW55X2dhdGhlciwgZmFsc2UpOworCisJLyoK KwkgKiBJZiB0aGlzIGpvaW4gbmVlZHMgdG8gdW5yb2xsZWQgYnV0IHRoZXJlJ3Mgbm8gam9pbiB1 bnJvbGxlciBhbHJlYWR5CisJICogYXZhaWxhYmxlLCBjcmVhdGUgb25lLgorCSAqLworCWlmIChq b2luX3Vucm9sbGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHBsYW4pKQorCXsKKwkJam9pbl91 bnJvbGxlciA9IHBncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIoKTsKKwkJam9pbl91bnJvbGxlcl90 b3BsZXZlbCA9IHRydWU7CisJCXdpdGhpbl9qb2luX3Byb2JsZW0gPSB0cnVlOworCX0KKworCS8q CisJICogSWYgdGhpcyBqb2luIGlzIHRvIGJlIHVucm9sbGVkLCBwZ3BhX3Vucm9sbF9qb2luKCkg d2lsbCByZXR1cm4gdGhlIGpvaW4KKwkgKiB1bnJvbGxlciBvYmplY3QgdGhhdCBzaG91bGQgYmUg cGFzc2VkIGRvd24gd2hlbiB3ZSByZWN1cnNlIGludG8gdGhlCisJICogb3V0ZXIgYW5kIGlubmVy IHNpZGVzIG9mIHRoZSBwbGFuLgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyICE9IE5VTEwpCisJ CXBncGFfdW5yb2xsX2pvaW4od2Fsa2VyLCBwbGFuLCBiZW5lYXRoX2FueV9nYXRoZXIsIGpvaW5f dW5yb2xsZXIsCisJCQkJCQkgJm91dGVyX2pvaW5fdW5yb2xsZXIsICZpbm5lcl9qb2luX3Vucm9s bGVyKTsKKworCS8qIEFkZCBSVElzIGZyb20gdGhlIHBsYW4gbm9kZSB0byBhbGwgYWN0aXZlIHF1 ZXJ5IGZlYXR1cmVzLiAqLworCXBncGFfcWZfYWRkX3BsYW5fcnRpcyhhY3RpdmVfcXVlcnlfZmVh dHVyZXMsIHBsYW4sIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisKKwkvKgorCSAqIFJlY3Vyc2Ug aW50byB0aGUgb3V0ZXIgYW5kIGlubmVyIHN1YnRyZWVzLgorCSAqCisJICogQXMgYW4gZXhjZXB0 aW9uLCBpZiB0aGlzIGlzIGEgRm9yZWlnblNjYW4sIGRvbid0IHJlY3Vyc2UuIHBvc3RncmVzX2Zk dworCSAqIHNvbWV0aW1lcyBzdG9yZXMgYW4gRVBRIHJlY2hlY2sgcGxhbiBpbiBwbGFuLT5sZWZ0 cmVlLCBidXQgdGhhdCdzIGdvaW5nCisJICogdG8gbWVudGlvbiB0aGUgc2FtZSBzZXQgb2YgcmVs YXRpb25zIGFzIHRoZSBGb3JlaWduU2NhbiBpdHNlbGYsIGFuZCB3ZQorCSAqIGhhdmUgbm8gd2F5 IHRvIGVtaXQgYWR2aWNlIHRhcmdldGluZyB0aGUgRVBRIGNhc2UgdnMuIHRoZSBub24tRVBRIGNh c2UuCisJICogTW9yZW92ZXIsIGl0J3Mgbm90IGVudGlyZWx5IGNsZWFyIHdoYXQgb3RoZXIgRkRX cyBtaWdodCBkbyB3aXRoIHRoZQorCSAqIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzLiBNYXliZSBz b21lIGJldHRlciBoYW5kbGluZyBpcyBuZWVkZWQgaGVyZSwgYnV0CisJICogZm9yIG5vdywgd2Ug anVzdCBwdW50LgorCSAqLworCWlmICghSXNBKHBsYW4sIEZvcmVpZ25TY2FuKSkKKwl7CisJCWlm IChwbGFuLT5sZWZ0dHJlZSAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtl ciwgcGxhbi0+bGVmdHRyZWUsIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAgb3V0ZXJf am9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJlbmVhdGhf YW55X2dhdGhlcik7CisJCWlmIChwbGFuLT5yaWdodHRyZWUgIT0gTlVMTCkKKwkJCXBncGFfd2Fs a19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4tPnJpZ2h0dHJlZSwgd2l0aGluX2pvaW5fcHJvYmxl bSwKKwkJCQkJCQkJICBpbm5lcl9qb2luX3Vucm9sbGVyLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMs CisJCQkJCQkJCSAgYmVuZWF0aF9hbnlfZ2F0aGVyKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGNy ZWF0ZWQgYSBqb2luIHVucm9sbGVyIHVwIGFib3ZlLCB0aGVuIGl0J3MgYWxzbyBvdXIgam9pbiB0 byB1c2UKKwkgKiBpdCB0byBidWlsZCB0aGUgZmluYWwgcGdwYV91bnJvbGxlZF9qb2luLCBhbmQg dG8gZGVzdHJveSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChqb2luX3Vucm9sbGVyX3RvcGxldmVs KQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2luICp1am9pbjsKKworCQl1am9pbiA9IHBncGFfYnVp bGRfdW5yb2xsZWRfam9pbih3YWxrZXIsIGpvaW5fdW5yb2xsZXIpOworCQl3YWxrZXItPnRvcGxl dmVsX3Vucm9sbGVkX2pvaW5zID0KKwkJCWxhcHBlbmQod2Fsa2VyLT50b3BsZXZlbF91bnJvbGxl ZF9qb2lucywgdWpvaW4pOworCQlwZ3BhX2Rlc3Ryb3lfam9pbl91bnJvbGxlcihqb2luX3Vucm9s bGVyKTsKKwkJKHZvaWQpIHBncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHdhbGtlciwgdWpvaW4p OworCX0KKworCS8qCisJICogU29tZSBwbGFuIHR5cGVzIGNhbiBoYXZlIGFkZGl0aW9uYWwgY2hp bGRyZW4uIE5vZGVzIGxpa2UgQXBwZW5kIHRoYXQKKwkgKiBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9m IGNoaWxkcmVuIHN0b3JlIHRoZW0gaW4gYSBMaXN0OyBhIFN1YnF1ZXJ5U2NhbgorCSAqIGp1c3Qg aGFzIGEgZmllbGQgZm9yIGEgc2luZ2xlIGFkZGl0aW9uYWwgUGxhbi4KKwkgKi8KKwlzd2l0Y2gg KG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJeworCQkJCUFwcGVuZAkg ICAqYXBsYW4gPSAoQXBwZW5kICopIHBsYW47CisKKwkJCQlleHRyYXBsYW5zID0gYXBsYW4tPmFw cGVuZHBsYW5zOworCQkJCWlmIChibXNfaXNfZW1wdHkoYXBsYW4tPmFwcHJlbGlkcykpCisJCQkJ CXB1c2hkb3duX3F1ZXJ5X2ZlYXR1cmVzID0gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzOworCQkJfQor CQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCXsKKwkJCQlNZXJnZUFwcGVuZCAq bWFwbGFuID0gKE1lcmdlQXBwZW5kICopIHBsYW47CisKKwkJCQlleHRyYXBsYW5zID0gbWFwbGFu LT5tZXJnZXBsYW5zOworCQkJCWlmIChibXNfaXNfZW1wdHkobWFwbGFuLT5hcHByZWxpZHMpKQor CQkJCQlwdXNoZG93bl9xdWVyeV9mZWF0dXJlcyA9IGFjdGl2ZV9xdWVyeV9mZWF0dXJlczsKKwkJ CX0KKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwQW5kOgorCQkJZXh0cmFwbGFucyA9ICgoQml0 bWFwQW5kICopIHBsYW4pLT5iaXRtYXBwbGFuczsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFw T3I6CisJCQlleHRyYXBsYW5zID0gKChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJ CQlicmVhazsKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKworCQkJLyoKKwkJCSAqIFdlIGRvbid0 IHBhc3MgZG93biBhY3RpdmVfcXVlcnlfZmVhdHVyZXMgYWNyb3NzIGhlcmUsIGJlY2F1c2UKKwkJ CSAqIHRob3NlIGFyZSBzcGVjaWZpYyB0byBhIHN1YnF1ZXJ5IGxldmVsLgorCQkJICovCisJCQlw Z3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCAoKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuKS0+c3Vi cGxhbiwKKwkJCQkJCQkJICAwLCBOVUxMLCBOSUwsIGJlbmVhdGhfYW55X2dhdGhlcik7CisJCQli cmVhazsKKwkJY2FzZSBUX0N1c3RvbVNjYW46CisJCQlleHRyYXBsYW5zID0gKChDdXN0b21TY2Fu ICopIHBsYW4pLT5jdXN0b21fcGxhbnM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFr OworCX0KKworCS8qIElmIHdlIGZvdW5kIGEgbGlzdCBvZiBleHRyYSBjaGlsZHJlbiwgaXRlcmF0 ZSBvdmVyIGl0LiAqLworCWZvcmVhY2gobGMsIGV4dHJhcGxhbnMpCisJeworCQlQbGFuCSAgICpz dWJwbGFuID0gbGZpcnN0KGxjKTsKKworCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBz dWJwbGFuLCAwLCBOVUxMLCBwdXNoZG93bl9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkgIGJlbmVh dGhfYW55X2dhdGhlcik7CisJfQorfQorCisvKgorICogUGVyZm9ybSBmaW5hbCBwcm9jZXNzaW5n IG9mIGEgbmV3bHktY29uc3RydWN0ZWQgcGdwYV91bnJvbGxlZF9qb2luLiBUaGlzCisgKiBvbmx5 IG5lZWRzIHRvIGJlIGNhbGxlZCBmb3IgdG9wbGV2ZWwgcGdwYV91bnJvbGxlZF9qb2luIG9iamVj dHMsIHNpbmNlIGl0CisgKiByZWN1cnNlcyB0byBzdWItam9pbnMgYXMgbmVlZGVkLgorICoKKyAq IE91ciBnb2FsIGlzIHRvIGFkZCB0aGUgc2V0IG9mIGlubmVyIHJlbGlkcyB0byB0aGUgcmVsZXZh bnQgam9pbl9zdHJhdGVnaWVzCisgKiBsaXN0LCBhbmQgdG8gZG8gdGhlIHNhbWUgZm9yIGFueSBz dWItam9pbnMuIFRvIHRoYXQgZW5kLCB0aGUgcmV0dXJuIHZhbHVlCisgKiBpcyB0aGUgc2V0IG9m IHJlbGlkcyBmb3VuZCBiZW5lYXRoIHRoZSBpbm5lciBzaWRlIG9mIHRoZSBqb2luLCBidXQgaXQg aXMKKyAqIGV4cGVjdGVkIHRoYXQgdGhlIHRvcGxldmVsIGNhbGxlciB3aWxsIGlnbm9yZSB0aGlz LgorICovCitzdGF0aWMgQml0bWFwc2V0ICoKK3BncGFfcHJvY2Vzc191bnJvbGxlZF9qb2luKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJICAgcGdwYV91bnJvbGxlZF9q b2luICp1am9pbikKK3sKKwlCaXRtYXBzZXQgICphbGxfcmVsaWRzID0gTlVMTDsKKworCWZvciAo aW50IGsgPSAwOyBrIDwgdWpvaW4tPm5pbm5lcjsgKytrKQorCXsKKwkJcGdwYV9qb2luX21lbWJl ciAqbWVtYmVyID0gJnVqb2luLT5pbm5lcltrXTsKKwkJQml0bWFwc2V0ICAqcmVsaWRzOworCisJ CWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwkJCXJlbGlkcyA9IHBncGFfcHJv Y2Vzc191bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJCW1lbWJlci0+dW5yb2xsZWRf am9pbik7CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsKKwkJ CXJlbGlkcyA9IG1lbWJlci0+c2Nhbi0+cmVsaWRzOworCQl9CisJCXdhbGtlci0+am9pbl9zdHJh dGVnaWVzW3Vqb2luLT5zdHJhdGVneVtrXV0gPQorCQkJbGFwcGVuZCh3YWxrZXItPmpvaW5fc3Ry YXRlZ2llc1t1am9pbi0+c3RyYXRlZ3lba11dLCByZWxpZHMpOworCQlhbGxfcmVsaWRzID0gYm1z X2FkZF9tZW1iZXJzKGFsbF9yZWxpZHMsIHJlbGlkcyk7CisJfQorCisJcmV0dXJuIGFsbF9yZWxp ZHM7Cit9CisKKy8qCisgKiBBcnJhbmdlIGZvciB0aGUgZ2l2ZW4gcGxhbiBub2RlIHRvIGJlIHRy ZWF0ZWQgYXMgYSBxdWVyeSBmZWF0dXJlIHdoZW4gdGhlCisgKiB0cmVlIHdhbGsgcmVhY2hlcyBp dC4KKyAqCisgKiBNYWtlIHN1cmUgdG8gb25seSB1c2UgdGhpcyBmb3Igbm9kZXMgdGhhdCB0aGUg dHJlZSB3YWxrIGNhbid0IGhhdmUgcmVhY2hlZAorICogeWV0IQorICovCit2b2lkCitwZ3BhX2Fk ZF9mdXR1cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJ CXBncGFfcWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAq cWYgPSBwZ3BhX2FkZF9mZWF0dXJlKHdhbGtlciwgdHlwZSwgcGxhbik7CisKKwl3YWxrZXItPmZ1 dHVyZV9xdWVyeV9mZWF0dXJlcyA9CisJCWxhcHBlbmQod2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVh dHVyZXMsIHFmKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5v ZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBsYW4gbm9kZSBJRC4KKyAqCisgKiBUaGUgbGFzdCBl bGlkZWQgbm9kZSBpcyB0aGUgb25lIHRoYXQgd291bGQgaGF2ZSBiZWVuIHVwcGVybW9zdCBpbiB0 aGUgcGxhbgorICogdHJlZSBoYWQgaXQgbm90IGJlZW4gcmVtb3ZlZCBkdXJpbmcgc2V0cmVmcyBw cm9jZXNzaWcuCisgKi8KK0VsaWRlZE5vZGUgKgorcGdwYV9sYXN0X2VsaWRlZF9ub2RlKFBsYW5u ZWRTdG10ICpwc3RtdCwgUGxhbiAqcGxhbikKK3sKKwlFbGlkZWROb2RlICplbGlkZWRfbm9kZSA9 IE5VTEw7CisKKwlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgcHN0bXQtPmVsaWRlZE5vZGVz KQorCXsKKwkJaWYgKG4tPnBsYW5fbm9kZV9pZCA9PSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQll bGlkZWRfbm9kZSA9IG47CisJfQorCisJcmV0dXJuIGVsaWRlZF9ub2RlOworfQorCisvKgorICog Q2VydGFpbiBwbGFuIG5vZGVzIGNhbiByZWZlciB0byBhIHNldCBvZiBSVElzLiBFeHRyYWN0IGFu ZCByZXR1cm4gdGhlIHNldC4KKyAqLworQml0bWFwc2V0ICoKK3BncGFfcmVsaWRzKFBsYW4gKnBs YW4pCit7CisJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQlyZXR1cm4gKChSZXN1bHQgKikgcGxh biktPnJlbGlkczsKKwllbHNlIGlmIChJc0EocGxhbiwgRm9yZWlnblNjYW4pKQorCQlyZXR1cm4g KChGb3JlaWduU2NhbiAqKSBwbGFuKS0+ZnNfcmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBB cHBlbmQpKQorCQlyZXR1cm4gKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsKKwllbHNlIGlm IChJc0EocGxhbiwgTWVyZ2VBcHBlbmQpKQorCQlyZXR1cm4gKChNZXJnZUFwcGVuZCAqKSBwbGFu KS0+YXBwcmVsaWRzOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFeHRyYWN0IHRoZSBz Y2FubmVkIFJUSSBmcm9tIGEgcGxhbiBub2RlLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGVyZSBp c24ndCBvbmUuCisgKi8KK0luZGV4CitwZ3BhX3NjYW5yZWxpZChQbGFuICpwbGFuKQoreworCXN3 aXRjaCAobm9kZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9TZXFTY2FuOgorCQljYXNlIFRfU2Ft cGxlU2NhbjoKKwkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlkU2NhbjoKKwkJ Y2FzZSBUX1RpZFJhbmdlU2NhbjoKKwkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJY2FzZSBUX0Z1 bmN0aW9uU2NhbjoKKwkJY2FzZSBUX1RhYmxlRnVuY1NjYW46CisJCWNhc2UgVF9WYWx1ZXNTY2Fu OgorCQljYXNlIFRfQ3RlU2NhbjoKKwkJY2FzZSBUX05hbWVkVHVwbGVzdG9yZVNjYW46CisJCWNh c2UgVF9Xb3JrVGFibGVTY2FuOgorCQljYXNlIFRfRm9yZWlnblNjYW46CisJCWNhc2UgVF9DdXN0 b21TY2FuOgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJ CXJldHVybiAoKFNjYW4gKikgcGxhbiktPnNjYW5yZWxpZDsKKwkJZGVmYXVsdDoKKwkJCXJldHVy biAwOworCX0KK30KKworLyoKKyAqIENvbnN0cnVjdCBhIG5ldyBCaXRtYXBzZXQgY29udGFpbmlu ZyBub24tUlRFX0pPSU4gbWVtYmVycyBvZiAncmVsaWRzJy4KKyAqLworQml0bWFwc2V0ICoKK3Bn cGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxl KQoreworCWludAkJCXJ0aSA9IC0xOworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisKKwl3 aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQlS YW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0ZS0+ cnRla2luZCAhPSBSVEVfSk9JTikKKwkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwg cnRpKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ3JlYXRlIGEgcGdwYV9x dWVyeV9mZWF0dXJlIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsIHF1ZXJ5IGZlYXR1cmVz CisgKiBmb3IgdGhpcyBwbGFuLgorICovCitzdGF0aWMgcGdwYV9xdWVyeV9mZWF0dXJlICoKK3Bn cGFfYWRkX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJIHBn cGFfcWZfdHlwZSB0eXBlLCBQbGFuICpwbGFuKQoreworCXBncGFfcXVlcnlfZmVhdHVyZSAqcWYg PSBwYWxsb2MwX29iamVjdChwZ3BhX3F1ZXJ5X2ZlYXR1cmUpOworCisJcWYtPnR5cGUgPSB0eXBl OworCXFmLT5wbGFuID0gcGxhbjsKKworCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5cGVd ID0KKwkJbGFwcGVuZCh3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSwgcWYpOworCisJ cmV0dXJuIHFmOworfQorCisvKgorICogQWRkIGEgc2luZ2xlIFJUSSB0byBlYWNoIGFjdGl2ZSBx dWVyeSBmZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRpKExpc3QgKmFj dGl2ZV9xdWVyeV9mZWF0dXJlcywgSW5kZXggcnRpKQoreworCWZvcmVhY2hfcHRyKHBncGFfcXVl cnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCXFmLT5yZWxpZHMg PSBibXNfYWRkX21lbWJlcihxZi0+cmVsaWRzLCBydGkpOworCX0KK30KKworLyoKKyAqIEFkZCBh IHNldCBvZiBSVElzIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0bWFw c2V0ICpyZWxpZHMpCit7CisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgYWN0 aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJcWYtPnJlbGlkcyA9IGJtc19hZGRfbWVtYmVycyhx Zi0+cmVsaWRzLCByZWxpZHMpOworCX0KK30KKworLyoKKyAqIEFkZCBSVElzIGRpcmVjdGx5IGNv bnRhaW5lZCBpbiBhIHBsYW4gbm9kZSB0byBlYWNoIGFjdGl2ZSBxdWVyeSBmZWF0dXJlLAorICog YnV0IGZpbHRlciBvdXQgYW55IGpvaW4gUlRJcywgc2luY2UgYWR2aWNlIGRvZXNuJ3QgbWVudGlv biB0aG9zZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3BsYW5fcnRpcyhMaXN0ICph Y3RpdmVfcXVlcnlfZmVhdHVyZXMsIFBsYW4gKnBsYW4sIExpc3QgKnJ0YWJsZSkKK3sKKwlCaXRt YXBzZXQgICpyZWxpZHM7CisJSW5kZXgJCXJ0aTsKKworCWlmICgocmVsaWRzID0gcGdwYV9yZWxp ZHMocGxhbikpICE9IE5VTEwpCisJeworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9y ZWxpZHMocmVsaWRzLCBydGFibGUpOworCQlwZ3BhX3FmX2FkZF9ydGlzKGFjdGl2ZV9xdWVyeV9m ZWF0dXJlcywgcmVsaWRzKTsKKwl9CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlkKHBs YW4pKSAhPSAwKQorCQlwZ3BhX3FmX2FkZF9ydGkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBydGkp OworfQorCisvKgorICogSWYgd2UgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlIHVzaW5nIHRoZSBwcm92 aWRlZCB3YWxrZXIgb2JqZWN0IGFuZCBhcnJheQorICogb2YgaWRlbnRpZmllcnMsIHdvdWxkIHdl IGdlbmVyYXRlIHRoZSBzcGVjaWZpZWQgdGFnL3RhcmdldCBjb21iaW5hdGlvbj8KKyAqCisgKiBJ ZiB5ZXMsIHRoZSBwbGFuIGNvbmZvcm1zIHRvIHRoZSBhZHZpY2U7IGlmIG5vLCBpdCBkb2VzIG5v dC4gTm90ZSB0aGF0CisgKiB3ZSBoYXZlIGtub3cgd2F5IG9mIGtub3dpbmcgd2hldGhlciB0aGUg cGxhbm5lciB3YXMgZm9yY2VkIHRvIGVtaXQgYSBwbGFuCisgKiB0aGF0IGNvbmZvcm1lZCB0byB0 aGUgYWR2aWNlIG9yIGp1c3QgaGFwcGVuZWQgdG8gZG8gc28uCisgKi8KK2Jvb2wKK3BncGFfd2Fs a2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJ CSBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJIHBncGFfYWR2aWNlX3Rh Z190eXBlIHRhZywKKwkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlJbmRl eAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJ Qml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKworCWlmICh0YWcgPT0gUEdQQV9UQUdfSk9JTl9P UkRFUikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFfdW5yb2xsZWRfam9pbiwgdWpvaW4sIHdhbGtl ci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMpCisJCXsKKwkJCWlmIChwZ3BhX3dhbGtlcl9qb2lu X29yZGVyX21hdGNoZXModWpvaW4sIHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCSAgIHJ0X2lk ZW50aWZpZXJzLCB0YXJnZXQsIHRydWUpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5U SUZJRVIpCisJeworCQlJbmRleAkJcnRpOworCisJCXJ0aSA9IHBncGFfd2Fsa2VyX2dldF9ydGko cnRhYmxlX2xlbmd0aCwgcnRfaWRlbnRpZmllcnMsICZ0YXJnZXQtPnJpZCk7CisJCXJlbGlkcyA9 IGJtc19tYWtlX3NpbmdsZXRvbihydGkpOworCX0KKwllbHNlCisJeworCQlBc3NlcnQodGFyZ2V0 LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCQlmb3JlYWNoX3B0cihwZ3Bh X2FkdmljZV90YXJnZXQsIGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJ SW5kZXgJCXJ0aTsKKworCQkJQXNzZXJ0KGNoaWxkX3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJH RVRfSURFTlRJRklFUik7CisJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmll cihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJ CQkJCQkgICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJaWYgKHJ0aSA9PSAwKQorCQkJCWVsb2co RVJST1IsICJjYW5ub3QgZGV0ZXJtaW5lIFJUSSBmb3IgYWR2aWNlIHRhcmdldCIpOworCQkJcmVs aWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBydGkpOworCQl9CisJfQorCisJc3dpdGNoICh0 YWcpCisJeworCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkvKiBzaG91bGQgaGF2ZSBi ZWVuIGhhbmRsZWQgYWJvdmUgKi8KKwkJCXBnX3VucmVhY2hhYmxlKCk7CisJCQlicmVhazsKKwkJ Y2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2Nv bnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0JJVE1BUF9IRUFQLAor CQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQly ZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BB X1NDQU5fRk9SRUlHTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfSU5E RVhfT05MWV9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2Vy LAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJCSByZWxpZHMp OworCQljYXNlIFBHUEFfVEFHX0lOREVYX1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29u dGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fSU5ERVgsCisJCQkJCQkJ CQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4g cGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5f UEFSVElUSU9OV0lTRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfU0VR X1NDQU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJ CQkJCQkJCSBQR1BBX1NDQU5fU0VRLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BB X1RBR19USURfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdhbGtl ciwKKwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9USUQsCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQlj YXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0 dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVIsCisJCQkJCQkJCQkJCQlyZWxp ZHMpOworCQljYXNlIFBHUEFfVEFHX0dBVEhFUl9NRVJHRToKKwkJCXJldHVybiBwZ3BhX3dhbGtl cl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9HQVRIRVJfTUVS R0UsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9V TklRVUU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJ CQkJCQkJCQkJCQlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJlbGlk cyk7CisJCWNhc2UgUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOgorCQkJcmV0dXJuIHBncGFfd2Fs a2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX1NFTUlKT0lO X1VOSVFVRSwKKwkJCQkJCQkJCQkJCXJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lO OgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJ CQkgSlNUUkFUX0hBU0hfSk9JTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9U QUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWlu c19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFMSVpF LAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlO OgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJ CQkgSlNUUkFUX01FUkdFX0pPSU5fUExBSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNl IFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01B VEVSSUFMSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURf TE9PUF9NRU1PSVpFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2Vy LAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkUsCisJCQkJCQkJCQkJCSBy ZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuIHBn cGFfd2Fsa2VyX2NvbnRhaW5zX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgSlNUUkFUX05FU1RF RF9MT09QX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19OT19H QVRIRVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHdhbGtlciwg cmVsaWRzKTsKKwl9CisKKwkvKiBzaG91bGQgbm90IGdldCBoZXJlICovCisJcmV0dXJuIGZhbHNl OworfQorCisvKgorICogRG9lcyBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIHRoZSBqb2luIG9yZGVy IHNwZWNpZmllZCBieSBhbiBhZHZpY2UgdGFyZ2V0PworICovCitzdGF0aWMgYm9vbAorcGdwYV93 YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4sCisJCQkJ CQkJICAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJ0 X2lkZW50aWZpZXJzLAorCQkJCQkJCSAgIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0LAorCQkJ CQkJCSAgIGJvb2wgdG9wbGV2ZWwpCit7CisJaW50CQluY2hpbGRyZW4gPSBsaXN0X2xlbmd0aCh0 YXJnZXQtPmNoaWxkcmVuKTsKKworCUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VU X09SREVSRURfTElTVCk7CisKKwkvKiBBdCB0b3BsZXZlbCwgd2UgYWxsb3cgYSBwcmVmaXggbWF0 Y2guICovCisJaWYgKHRvcGxldmVsKQorCXsKKwkJaWYgKG5jaGlsZHJlbiA+IHVqb2luLT5uaW5u ZXIgKyAxKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlpZiAobmNoaWxkcmVu ICE9IHVqb2luLT5uaW5uZXIgKyAxKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIE91dGVy bW9zdCByZWwgbXVzdCBtYXRjaC4gKi8KKwlpZiAoIXBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0 Y2hlc19tZW1iZXIoJnVqb2luLT5vdXRlciwKKwkJCQkJCQkJCQkJICAgcnRhYmxlX2xlbmd0aCwK KwkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCSAgIGxpbml0aWFsKHRh cmdldC0+Y2hpbGRyZW4pKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogRWFjaCBpbm5lciByZWwg bXVzdCBtYXRjaC4gKi8KKwlmb3IgKGludCBuID0gMDsgbiA8IG5jaGlsZHJlbiAtIDE7ICsrbikK Kwl7CisJCXBncGFfYWR2aWNlX3RhcmdldCAqY2hpbGRfdGFyZ2V0ID0gbGlzdF9udGgodGFyZ2V0 LT5jaGlsZHJlbiwgbiArIDEpOworCisJCWlmICghcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRj aGVzX21lbWJlcigmdWpvaW4tPmlubmVyW25dLAorCQkJCQkJCQkJCQkJICAgcnRhYmxlX2xlbmd0 aCwKKwkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICAgY2hpbGRf dGFyZ2V0KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIERvZXMgb25lIG1lbWJlciBvZiBhbiB1bnJvbGxlZCBqb2luIG1hdGNoIGFuIGFkdmljZSB0 YXJnZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNf bWVtYmVyKHBncGFfam9pbl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCSAgSW5kZXggcnRhYmxl X2xlbmd0aCwKKwkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJ CQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJQml0bWFwc2V0ICAqcmVs aWRzID0gTlVMTDsKKworCWlmIChtZW1iZXItPnVucm9sbGVkX2pvaW4gIT0gTlVMTCkKKwl7CisJ CWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCkKKwkJCXJldHVy biBmYWxzZTsKKwkJcmV0dXJuIHBncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhtZW1iZXIt PnVucm9sbGVkX2pvaW4sCisJCQkJCQkJCQkJCSAgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJ ICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICB0YXJnZXQsCisJCQkJCQkJCQkJCSAgZmFs c2UpOworCX0KKworCUFzc2VydChtZW1iZXItPnNjYW4gIT0gTlVMTCk7CisJc3dpdGNoICh0YXJn ZXQtPnR0eXBlKQorCXsKKwkJY2FzZSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q6CisJCQkvKiBD b3VsZCBvbmx5IG1hdGNoIGFuIHVucm9sbGVkIGpvaW4gKi8KKwkJCXJldHVybiBmYWxzZTsKKwor CQljYXNlIFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUOgorCQkJeworCQkJCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQkJ CXsKKwkJCQkJSW5kZXgJCXJ0aTsKKworCQkJCQlydGkgPSBwZ3BhX3dhbGtlcl9nZXRfcnRpKHJ0 YWJsZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkgICZjaGlsZF90YXJnZXQt PnJpZCk7CisJCQkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgcnRpKTsKKwkJCQl9 CisJCQkJYnJlYWs7CisJCQl9CisKKwkJY2FzZSBQR1BBX1RBUkdFVF9JREVOVElGSUVSOgorCQkJ eworCQkJCUluZGV4CQlydGk7CisKKwkJCQlydGkgPSBwZ3BhX3dhbGtlcl9nZXRfcnRpKHJ0YWJs ZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCSAgJnRhcmdldC0+cmlkKTsKKwkJ CQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwkJCQlicmVhazsKKwkJCX0KKwl9 CisKKwlyZXR1cm4gYm1zX2VxdWFsKG1lbWJlci0+c2Nhbi0+cmVsaWRzLCByZWxpZHMpOworfQor CisvKgorICogRG9lcyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gc2NhbiBzdHJhdGVn eSBzaG91bGQgYmUgdXNlZCBmb3IgdGhlCisgKiBnaXZlbiByZWxpZCBzZXQ/CisgKi8KK3N0YXRp YyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLAorCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkg IEJpdG1hcHNldCAqcmVsaWRzKQoreworCUxpc3QJICAgKnNjYW5zID0gd2Fsa2VyLT5zY2Fuc1tz dHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5zKQorCXsKKwkJ LyoKKwkJICogWFhYLiBJZiB0aGlzIGlzIGluZGV4LXJlbGF0ZWQgYWR2aWNlLCB3ZSBzaG91bGQg YWxzbyB2YWxpZGF0ZSB0aGF0CisJCSAqIHRoZSBhZHZpY2UgdGFyZ2V0J3MgaW5kZXggdGFyZ2V0 IG1hdGNoZXMgdGhlIFBsYW4gdHJlZS4KKwkJICovCisJCWlmIChibXNfZXF1YWwoc2Nhbi0+cmVs aWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogRG9lcyB0aGlzIHdhbGtlciBzYXkgdGhhdCB0aGUgZ2l2ZW4gcXVlcnkgZmVhdHVy ZSBhcHBsaWVzIHRvIHRoZSBnaXZlbgorICogcmVsaWQgc2V0PworICovCitzdGF0aWMgYm9vbAor cGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndh bGtlciwKKwkJCQkJCQkgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJIEJpdG1hcHNldCAqcmVs aWRzKQoreworCUxpc3QJICAgKnF1ZXJ5X2ZlYXR1cmVzID0gd2Fsa2VyLT5xdWVyeV9mZWF0dXJl c1t0eXBlXTsKKworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2Zl YXR1cmVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChxZi0+cmVsaWRzLCByZWxpZHMpKQorCQkJcmV0 dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogRG9lcyB0aGUgd2Fs a2VyIHNheSB0aGF0IHRoZSBnaXZlbiBqb2luIHN0cmF0ZWd5IHNob3VsZCBiZSB1c2VkIGZvciB0 aGUKKyAqIGdpdmVuIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2Nv bnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgIHBn cGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpCit7 CisJTGlzdAkgICAqam9pbl9zdHJhdGVnaWVzID0gd2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbc3Ry YXRlZ3ldOworCisJZm9yZWFjaF9wdHIoQml0bWFwc2V0LCBqc3JlbGlkcywgam9pbl9zdHJhdGVn aWVzKQorCXsKKwkJaWYgKGJtc19lcXVhbChqc3JlbGlkcywgcmVsaWRzKSkKKwkJCXJldHVybiB0 cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgdGhlIHdhbGtlciBz YXkgdGhhdCB0aGUgZ2l2ZW4gcmVsaWRzIHNob3VsZCBiZSBtYXJrZWQgYXMgTk9fR0FUSEVSPwor ICovCitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqcmVsaWRzKQor eworCXJldHVybiBibXNfaXNfc3Vic2V0KHJlbGlkcywgd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMp OworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY29udmVydCBhIHJlbGF0aW9u IGlkZW50aWZpZXIgdG8gYW4gUlRJLgorICoKKyAqIFdlIHRocm93IGFuIGVycm9yIGhlcmUgYmVj YXVzZSB3ZSBleHBlY3QgdGhpcyB0byBiZSB1c2VkIG9uIHN5c3RlbS1nZW5lcmF0ZWQKKyAqIGFk dmljZS4gSGVuY2UsIGZhaWx1cmUgaGVyZSBpbmRpY2F0ZXMgYW4gYWR2aWNlIGdlbmVyYXRpb24g YnVnLgorICovCitzdGF0aWMgSW5kZXgKK3BncGFfd2Fsa2VyX2dldF9ydGkoSW5kZXggcnRhYmxl X2xlbmd0aCwKKwkJCQkJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJcGdw YV9pZGVudGlmaWVyICpyaWQpCit7CisJSW5kZXgJCXJ0aTsKKworCXJ0aSA9IHBncGFfY29tcHV0 ZV9ydGlfZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJICAgcnRfaWRl bnRpZmllcnMsCisJCQkJCQkJCQkJICAgcmlkKTsKKwlpZiAocnRpID09IDApCisJCWVsb2coRVJS T1IsICJjYW5ub3QgZGV0ZXJtaW5lIFJUSSBmb3IgYWR2aWNlIHRhcmdldCIpOworCXJldHVybiBy dGk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYyNDRmNDQyOGE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCkBAIC0wLDAgKzEsMTIyIEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5oCisgKgkgIFBsYW4gdHJlZSBpdGVy YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93 YWxrZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfV0FMS0VS X0gKKyNkZWZpbmUgUEdQQV9XQUxLRVJfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNs dWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKworLyoKKyAqIFdlIHVz ZSB0aGUgdGVybSAicXVlcnkgZmVhdHVyZSIgdG8gcmVmZXIgdG8gcGxhbiBub2RlcyB0aGF0IGFy ZSBpbnRlcmVzdGluZworICogaW4gdGhlIGZvbGxvd2luZyB3YXk6IHRvIGdlbmVyYXRlIGFkdmlj ZSwgd2UnbGwgbmVlZCB0byBrbm93IHRoZSBzZXQgb2YKKyAqIHNhbWUtc3VicXVlcnksIG5vbi1q b2luIFJUSXMgb2NjdXJpbmcgYXQgb3IgYmVsb3cgdGhhdCBwbGFuIG5vZGUsIHdpdGhvdXQKKyAq IGFkbWl4dHVyZSBvZiBwYXJlbnQgYW5kIGNoaWxkIFJUSXMuCisgKgorICogRm9yIGV4YW1wbGUs IEdhdGhlciBub2RlcywgZGVzaWdpbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUiwgYW5kIEdhdGhlciBN ZXJnZQorICogbm9kZXMsIGRlc2lnbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUl9NRVJHRSwgYXJlIHF1 ZXJ5IGZlYXR1cmVzLCBiZWNhdXNlIHdlJ2xsCisgKiB3YW50IHRvIGFkbWl0IHNvbWUga2luZCBv ZiBhZHZpY2UgdGhhdCBkZXNjcmliZXMgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRyZWUg dGhhdCBhcHBlYXJzIGJlbmVhdGggdGhvc2Ugbm9kZXMuCisgKgorICogRWFjaCBzZW1pam9pbiBj YW4gYmUgaW1wbGVtZW50ZWQgZWl0aGVyIGJ5IGRpcmVjdGx5IHBlcmZvcm1pbmcgYSBzZW1pam9p biwKKyAqIG9yIGJ5IG1ha2luZyBvbmUgc2lkZSB1bmlxdWUgYW5kIHRoZW4gcGVyZm9ybWluZyBh IG5vcm1hbCBqb2luLiBFaXRoZXIgd2F5LAorICogd2UgdXNlIGEgcXVlcnkgZmVhdHVyZSB0byBu b3RpY2Ugd2hhdCBkZWNpc2lvbiB3YXMgbWFkZSwgc28gdGhhdCB3ZSBjYW4KKyAqIGRlc2NyaWJl IGl0IGJ5IGVudW1lcmF0aW5nIHRoZSBSVElzIG9uIHRoYXQgc2lkZSBvZiB0aGUgam9pbi4KKyAq CisgKiBUbyBlbGFib3JhdGUgb24gdGhlICJubyBhZG1peHR1cmUgb2YgcGFyZW50IGFuZCBjaGls ZCBSVElzIiBydWxlLCBpbiBhbGwgb2YKKyAqIHRoZXNlIGNhc2VzLCBpZiB0aGUgZW50aXJldHkg b2YgYW4gaW5oZXJpdGFuY2UgaGllcmFyY2h5IGFwcGVhcnMgYmVuZWF0aAorICogdGhlIHF1ZXJ5 IGZlYXR1cmUsIHdlIG9ubHkgd2FudCB0byBuYW1lIHRoZSBwYXJlbnQgdGFibGUuIEJ1dCBpdCdz IGFsc28KKyAqIHBvc3NpYmxlIHRvIGhhdmUgY2FzZXMgd2hlcmUgd2UgbXVzdCBuYW1lIGNoaWxk IHRhYmxlcy4gVGhpcyBpcyBwYXJ0aWN1bGFybHkKKyAqIGxpa2VseSB0byBoYXBwZW4gd2hlbiBw YXJ0aXRpb253aXNlIGpvaW4gaXMgaW4gdXNlLCBidXQgY291bGQgaGFwcGVuIGZvcgorICogR2F0 aGVyIG9yIEdhdGhlciBNZXJnZSBldmVuIHdpdGhvdXQgdGhhdCwgaWYgb25lIG9mIHRob3NlIGFw cGVhcnMgYmVsb3cKKyAqIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIGZvciBhIHNpbmds ZSB0YWJsZS4KKyAqLwordHlwZWRlZiBlbnVtIHBncGFfcWZfdHlwZQoreworCVBHUEFRRl9HQVRI RVIsCisJUEdQQVFGX0dBVEhFUl9NRVJHRSwKKwlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwK KwlQR1BBUUZfU0VNSUpPSU5fVU5JUVVFCisJLyogdXBkYXRlIE5VTV9QR1BBX1FGX1RZUEVTIGlm IHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX3FmX3R5cGU7CisKKyNkZWZpbmUgTlVN X1BHUEFfUUZfVFlQRVMgKChpbnQpIFBHUEFRRl9TRU1JSk9JTl9VTklRVUUgKyAxKQorCisvKgor ICogRm9yIGVhY2ggcXVlcnkgZmVhdHVyZSwgd2Uga2VlcCB0cmFjayBvZiB0aGUgZmVhdHVyZSB0 eXBlIGFuZCB0aGUgc2V0IG9mCisgKiByZWxpZHMgdGhhdCB3ZSBmb3VuZCB1bmRlcm5lYXRoIHRo ZSByZWxldmFudCBwbGFuIG5vZGUuIFNlZSB0aGUgY29tbWVudHMKKyAqIG9uIHBncGFfcWZfdHlw ZSwgYWJvdmUsIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBn cGFfcXVlcnlfZmVhdHVyZQoreworCXBncGFfcWZfdHlwZSB0eXBlOworCVBsYW4JICAgKnBsYW47 CisJQml0bWFwc2V0ICAqcmVsaWRzOworfSBwZ3BhX3F1ZXJ5X2ZlYXR1cmU7CisKKy8qCisgKiBD b250ZXh0IG9iamVjdCBmb3IgcGxhbiB0cmVlIHdhbGsuCisgKgorICogcHN0bXQgaXMgdGhlIFBs YW5uZWRTdG10IHdlJ3JlIHN0dWR5aW5nLgorICoKKyAqIHNjYW5zIGlzIGFuIGFycmF5IG9mIGxp c3RzIG9mIHBncGFfc2NhbiBvYmplY3RzLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICogdGhl IHNjYW4ncyBwZ3BhX3NjYW5fc3RyYXRlZ3kuCisgKgorICogbm9fZ2F0aGVyX3NjYW5zIGlzIHRo ZSBzZXQgb2Ygc2NhbiBSVElzIHRoYXQgZG8gbm90IGFwcGVhciBiZW5lYXRoIGFueQorICogR2F0 aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLgorICoKKyAqIHRvcGxldmVsX3Vucm9sbGVkX2pvaW5z IGlzIGEgbGlzdCBvZiBhbGwgcGdwYV91bnJvbGxlZF9qb2luIG9iamVjdHMgdGhhdAorICogYXJl IG5vdCBhIGNoaWxkIG9mIHNvbWUgb3RoZXIgcGdwYV91bnJvbGxlZF9qb2luLgorICoKKyAqIGpv aW5fc3RyYXRlZ3kgaXMgYW4gYXJyYXkgb2YgbGlzdHMgb2YgQml0bWFwc2V0IG9iamVjdHMuIEVh Y2ggQml0bWFwc2V0CisgKiBpcyB0aGUgc2V0IG9mIHJlbGlkcyB0aGF0IGFwcGVhcnMgb24gdGhl IGlubmVyIHNpZGUgb2Ygc29tZSBqb2luIChleGNsdWRpbmcKKyAqIFJUSXMgZnJvbSBwYXJ0aXRp b24gY2hpbGRyZW4gYW5kIHN1YnF1ZXJpZXMpLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICog cGdwYV9qb2luX3N0cmF0ZWd5LgorICoKKyAqIHF1ZXJ5X2ZlYXR1cmVzIGlzIGFuIGFycmF5IGxp c3RzIG9mIHBncGFfcXVlcnlfZmVhdHVyZSBvYmplY3RzLCBpbmRleGVkCisgKiBieSBwZ3BhX3Fm X3R5cGUuCisgKgorICogZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGlzIG9ubHkgdXNlZCBkdXJpbmcg dGhlIHBsYW4gdHJlZSB3YWxrIGFuZCBzaG91bGQKKyAqIGJlIGVtcHR5IHdoZW4gdGhlIHRyZWUg d2FsayBjb25jbHVkZXMuIEl0IGlzIGEgbGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUKKyAqIG9i amVjdHMgZm9yIFBsYW4gbm9kZXMgdGhhdCB0aGUgcGxhbiB0cmVlIHdhbGsgaGFzIG5vdCB5ZXQg ZW5jb3VudGVyZWQ7CisgKiB3aGVuIGVuY291bnRlcmVkLCB0aGV5IHdpbGwgYmUgbW92ZWQgdG8g dGhlIGxpc3Qgb2YgYWN0aXZlIHF1ZXJ5IGZlYXR1cmVzCisgKiB0aGF0IGlzIHByb3BhZ2F0ZWQg dmlhIHRoZSBjYWxsIHN0YWNrLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQKK3sKKwlQbGFubmVkU3RtdCAqcHN0bXQ7CisJTGlzdAkgICAqc2NhbnNbTlVNX1BH UEFfU0NBTl9TVFJBVEVHWV07CisJQml0bWFwc2V0ICAqbm9fZ2F0aGVyX3NjYW5zOworCUxpc3QJ ICAgKnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zOworCUxpc3QJICAgKmpvaW5fc3RyYXRlZ2llc1tO VU1fUEdQQV9KT0lOX1NUUkFURUdZXTsKKwlMaXN0CSAgICpxdWVyeV9mZWF0dXJlc1tOVU1fUEdQ QV9RRl9UWVBFU107CisJTGlzdAkgICAqZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzOworfSBwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQ7CisKK2V4dGVybiB2b2lkIHBncGFfcGxhbl93YWxrZXIocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCk7 CisKK2V4dGVybiB2b2lkIHBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQlQ bGFuICpwbGFuKTsKKworZXh0ZXJuIEVsaWRlZE5vZGUgKnBncGFfbGFzdF9lbGlkZWRfbm9kZShQ bGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4pOworZXh0ZXJuIEJpdG1hcHNldCAqcGdwYV9y ZWxpZHMoUGxhbiAqcGxhbik7CitleHRlcm4gSW5kZXggcGdwYV9zY2FucmVsaWQoUGxhbiAqcGxh bik7CitleHRlcm4gQml0bWFwc2V0ICpwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoQml0bWFw c2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKK2V4dGVybiBib29sIHBncGFfd2Fsa2VyX3dv dWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSBw Z3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJIHBncGFfYWR2aWNlX3Rh Z190eXBlIHRhZywKKwkJCQkJCQkJCSBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbCBi L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4MjgwMDQzOTEzCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbApAQCAtMCwwICsxLDc2IEBACitMT0FE ICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9 IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29z dCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVidWdf cGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKK0NSRUFURSBUQUJMRSBndF9kaW0gKGlkIHNlcmlhbCBw cmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gZ3RfZGltIChkaW0pIFNFTEVDVCByYW5kb20oKTo6dGV4dCBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2RpbTsKKworQ1JFQVRF IFRBQkxFIGd0X2ZhY3QgKAorCWlkIGludCBub3QgbnVsbCwKKwlkaW1faWQgaW50ZWdlciBub3Qg bnVsbCByZWZlcmVuY2VzIGd0X2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QKKwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGd0X2ZhY3Q7CisKKy0t IEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2gg am9pbi4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsK KworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvZiBib3RoIHJlbGF0aW9ucyB0b2dl dGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJf bWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIg QlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQp KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3Rf ZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitD T01NSVQ7CisKKy0tIEZvcmNlIGEgc2VwYXJhdGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVy YXRpb24gZm9yIGVhY2ggcmVsYXRpb24uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdnYXRoZXIoZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9S REVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJn ZSBvbiBvbmUgcmVsYXRpb24gYnV0IG5vIHBhcmFsbGVsaXNtIG9uIG90aGVyLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmKSBub19nYXRo ZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkgbm9f Z2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkg ZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYpIG5vX2dh dGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQu aWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihkKSBub19nYXRo ZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworQ09NTUlUOworCistLSBGb3JjZSBubyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIHVzZSBhdCBh bGwuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnbm9fZ2F0aGVy KGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworQ09NTUlUOworCistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91dCB0aGUgT1JE RVIgQlkgY2xhdXNlLCBidXQganVzdCBHYXRoZXIgaXMgT0suCitCRUdJTjsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3Rf ZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX29y ZGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YWEyZmM2MmQzNAotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCkBAIC0w LDAgKzEsOTYgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29y a2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlkIGludGVnZXIg cHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFi bGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VM RUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsKK0NSRUFURSBU QUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50 KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2Rp bTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcs IChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNVVU0g QU5BTFlaRSBqb19kaW0yOworCitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQgaW50IHByaW1h cnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTEgKGlk KSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0yIChpZCkKKykg V0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZmFjdAor CVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CisKKy0tIFdlIGV4cGVjdCB0byBqb2lu IHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9uIG9uIGQyCistLSBp cyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9 IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVS RSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIEZvcmNlIGEgZmV3IGRpZmZlcmVudCBqb2lu IG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVudCwKKy0tIGJ1dCB0aGUg cGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lO IGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQxKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlM RUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19k aW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAx OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxIGYgZDIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2Zh Y3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIo ZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5p ZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFs MSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCistLSBUaGUgdW51c3VhbCBmb3JtdWxhdGlv biBvZiB0aGlzIHF1ZXJ5IGlzIGludGVuZGVkIHRvIHByZXZlbnQgdGhlIHF1ZXJ5CistLSBwbGFu bmVyIGZyb20gcmVkdWNpbmcgdGhlIEZVTEwgSk9JTiB0byBzb21lIG90aGVyIGpvaW4gdHlwZSwg c28gdGhhdCB3ZQorLS0gY2FuIHRlc3Qgd2hhdCBoYXBwZW5zIHdpdGggYSBqb2luIHR5cGUgdGhh dCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0g Zi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworCistLSBXZSBzaG91bGQgbm90IGJlIGFi bGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBiZWNhdXNlCist LSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0 byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0aGUgZHJpdmlu ZyB0YWJsZS4KK0JFR0lOOworLS0gWFhYOiBUaGUgYWR2aWNlIGZlZWRiYWNrIHNheXMgJ3BhcnRp YWxseSBtYXRjaGVkJyBoZXJlIHdoaWNoIGlzbid0IGV4YWN0bHkKKy0tIHdyb25nIGdpdmVuIHRo ZSB3YXkgdGhhdCBmbGFnIGlzIGhhbmRsZWQgaW4gdGhlIGNvZGUsIGJ1dCBpdCdzIGF0IHRoZSB2 ZXJ5CistLSBsZWFzdCBjb25mdXNpbmcuIFNvbWV0aGluZyBzaG91bGQgcHJvYmFibHkgYmUgaW1w cm92ZWQgaGVyZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRl cihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQg T1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0g Zi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGYgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0 IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlP TiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK0NPTU1JVDsKKworLS0g WFhYOiBhZGQgdGVzdHMgZm9yIGpvaW4gb3JkZXIgcHJlZml4IG1hdGNoaW5nCistLSBYWFg6IGpv aW5fb3JkZXIoanVzdG9uZXJlbCkgc2hvdWxkbid0IHJlcG9ydCBwYXJ0aWFsbHkgbWF0Y2hlZApk 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 aW5kZXggMDAwMDAwMDAwMDAuLjA4NTAyNTczYzhmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCwwICsxLDQxIEBA CitDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1 ZXJ5ID0gb2ZmOworCistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0 ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0g U2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBleGNlZWQg aXQuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7CisKKy0t IFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBw cmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBw YXJhbGxlbF93b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00g ZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGU7 CisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVy eS4KK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpIE9S REVSIEJZIGlkIExJTUlUIDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFnYWluLgor U0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gUmFpc2UgdGhl IGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlwbGUgY2h1 bmtzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyMDAwOwor CistLSBQdXNoIGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAk JAorQkVHSU4KKwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJP TSBkdW1teV90YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworCistLSBDaGVjayB0aGF0IHRo ZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlm eSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdl ciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCk7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253 aXNlLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNDJjMDYxMTc2MAotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3BhcnRpdGlvbndpc2Uuc3Fs CkBAIC0wLDAgKzEsNzggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2lu ID0gdHJ1ZTsKKworQ1JFQVRFIFRBQkxFIHB0MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGlt MSB0ZXh0LCB2YWwxIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJM RSBwdDFhIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYiBQQVJU SVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWMgUEFSVElUSU9OIE9G IHB0MSBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0MSAoaWQsIGRpbTEsIHZhbDEpCisJU0VM RUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0MTsKKworQ1JFQVRFIFRB QkxFIHB0MiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQ QVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBw dDIgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxV RVMgRlJPTSAoMTAwMSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworQ1JFQVRFIFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00g KDIwMDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lO U0VSVCBJTlRPIHB0MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRl eHQgJyB8fCBnLCAoZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBn OworVkFDVVVNIEFOQUxZWkUgcHQyOworCitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHBy aW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQp OworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEp IHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBU QUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAw MSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQz YyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGlt MywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcp ICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUg cHQzOworCitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwg ZGltbSB0ZXh0LCB2YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBwdG1pc21hdGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMg RlJPTSAoMSkgdG8gKDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor Q1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9S IFZBTFVFUyBGUk9NICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlTRUxF Q1QgZywgJ3lldCBhbm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKKworRVhQ TEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0 MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEg PSAxIEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CisKKy0tIFN1cHByZXNzIHBhcnRpdGlvbndp c2Ugam9pbiwgb3IgZG8gaXQganVzdCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQTEFJ TiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBX SEVSRSBwdDEuaWQgPSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAx IEFORCB2YWwyID0gMSBBTkQgdmFsMyA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdDIpIHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJ Q0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQg PSBwdDIuaWQgQU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0g MSBBTkQgdmFsMyA9IDE7CitDT01NSVQ7CisKKy0tIENhbid0IGZvcmNlIGEgcGFydGl0aW9ud2lz ZSBqb2luIHdpdGggYSBtaXNtYXRjaGVkIHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1BBUlRJVElPTldJU0UoKHB0MSBwdG1pc21hdGNoKSknOworRVhQ TEFJTiAoUExBTl9BRFZJQ0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdG1pc21h dGNoIFdIRVJFIHB0MS5pZCA9IHB0bWlzbWF0Y2guaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3NjYW4uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4y NTQxNmE3NWY0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3Fs L3NjYW4uc3FsCkBAIC0wLDAgKzEsMTk1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQg bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9 IDAuMTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4xOworU0VUIGNwdV90dXBsZV9jb3N0ID0g MDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7CisKK0NSRUFURSBUQUJMRSBzY2FuX3Rh YmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3NvbWUgdGV4 dCAnIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRFIElOREVY IHNjYW5fdGFibGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVNIEFOQUxZ WkUgc2Nhbl90YWJsZTsKKworLS0gU2VxdWVudGlhbCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisKKy0tIEluZGV4IHNjYW4K K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID0gMTsKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisKKy0t IEJpdG1hcCBoZWFwIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworCistLSBUSUQg c2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hF UkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworCistLSBUcnkgZm9yY2luZyBl YWNoIG9mIG91ciB0ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2Fu dGVkIHRvIHVzZSBhbnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBf SEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUg dGV4dCA4JzsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nh bl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwx KScgQU5EIGN0aWQgPCAnKDIsMSknOworQ09NTUlUOworCistLSBUcnkgdG8gZm9yY2UgYSBmdWxs IHNjYW4gb2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90aGVyIHNjYW4gdHlwZS4gQWxsCistLSBv ZiB0aGVzZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4gb3IgYml0bWFwIGhlYXAgc2NhbiBjb3Vs ZCBwb3RlbnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgYW5zd2VyLCBidXQgdGhlIHBs YW5uZXIgZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVzZQorLS0gcG9zc2liaWxpdGllcyBkdWUg dG8gdGhlIGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3Rh YmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGU7CitDT01NSVQ7CisKKy0tIFRyeSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2UuIFRo aXMgc2hvdWxkIG5vdyBzdWNjZWVkIGZvciB0aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1BUF9I RUFQX1NDQU4sIGJ1dCB0aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNhdXNl IHRoZQorLS0gcXVlcnkgZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5kZXgu CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID4gMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPiAwOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgYSBwcmltYXJ5IGtleSBsb29r dXAgdG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0IGZvcmNlIGl0IHRv IHVzZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxpc3QpCistLSBvciBh IFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCkuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9P TkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFu IGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBidXQgd2UgY2FuJ3QKKy0tIGZvcmNl IHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5lciB0aGlua3MgaXMgaW5hcHBsaWNh YmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVlbnRp YWwgc2NhbiBpbiBwbGFjZSBvZiBhIGJpdG1hcCBoZWFwIHNjYW4sCistLSBidXQgYSBwbGFpbiBp bmRleCBzY2FuIG9uIGEgQlJJTiBpbmRleCBpcyBub3QgcG9zc2libGUuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK K0NPTU1JVDsKKworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4g cmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGN0aWQgPSAnKDAsMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQg PCAnKDIsMSknOworQ09NTUlUOworCistLSBUZXN0IG1vcmUgY29tcGxleCBzY2VuYXJpb3Mgd2l0 aCBpbmRleCBzY2Fucy4KK0JFR0lOOworLS0gU2hvdWxkIHN0aWxsIHdvcmsgaWYgd2UgbWVudGlv biB0aGUgc2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9T Q0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor LS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9uIHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90 YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBJdCdzIE9LIHRvIHJlcGVhdCB0aGUgc2Ft ZSBhZHZpY2UuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID0gMTsKKy0tIEJ1dCBpdCBkb2Vzbid0IHdvcmsgaWYgdGhlIGluZGV4IHRhcmdl dCBpcyBldmVuIG5vdGlvbmFsbHkgZGlmZmVyZW50LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5IHNjYW5fdGFi bGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOworCist LSBUZXN0IGFzc29ydGVkIGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKG5vdGhpbmcgd2hh dHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hh dHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor Q09NTUlUOworCistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIG11bHRpcGxlIGluc3Rh bmNlcyBvZiB0aGUgc2FtZSBhbGlhcy4KK0JFR0lOOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9J TiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMg T04gZyA9IHMuYTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdl bmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkg eAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVG VCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFi bGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTihzKSBTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90 YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBz LmE7CitDT01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gc2NhbnMgd2l0 aGluIGEgc3VicXVlcnkuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNU ICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDAp IHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworQkVHSU47Cist LSBTaG91bGQgbm90IG1hdGNoLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdT RVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxkIG1h dGNoIGZpcnN0IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1NFUV9TQ0FOKHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAw KSB4OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKy0tIFNob3Vs ZCBtYXRjaCBzZWNvbmQgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMg V0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApOworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9z cWwvc3ludGF4LnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiYzFiNzFiZWJlCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbApAQCAtMCww ICsxLDQyIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CisKKy0tIEFuIGVtcHR5IHN0cmluZyBp cyBhbGxvd2VkLCBhbmQgc28gaXMgYW4gZW1wdHkgdGFyZ2V0IGxpc3QuCitTRVQgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KCknOworCistLSBUZXN0IGFzc29ydGVkIHZhcmlhdGlvbnMgaW4gY2FwaXRhbGl6YXRpb24sIHdo aXRlc3BhY2UsIGFuZCB3aGljaCBwYXJ0cyBvZgorLS0gdGhlIHJlbGF0aW9uIGlkZW50aWZpZXIg YXJlIGluY2x1ZGVkLiBUaGVzZSBzaG91bGQgYWxsIHdvcmsuCitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKHgpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2Vx X3NjYW4oeEB5KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgjMikn OworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTiAoeC95KSc7CitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJyAgU0VRX1NDQU4gKCB4IC8geSAuIHogKSAgJzsKK1NFVCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngiIzIvInkiLiJ6IkAidCIpJzsKKwor LS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRVUVOVElB TF9TQ0FOKHgpJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4nOworU0VU IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTignOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTigiJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4oIyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJygpJzsKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnMTIzJzsKKworLS0gTGVnYWwgY29tbWVudHMuCitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJy8qKi8nOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdI QVNIX0pPSU4oXykvKioqLyc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1l bnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcv KiBjb21tZW50ICovIEhBU0hfSk9JTih5Ly8qeCoveiknOworCistLSBVbnRlcm1pbmF0ZWQgY29t bWVudHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qJzsKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigiZk9PIikgLyogb29wcyc7CisKKy0tIE5lc3RlZCBj b21tZW50cyBhcmUgbm90IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNlIGlzIGxlZ2Fs IGFuZAorLS0gdGhlIHNlY29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g Jy8qLyovJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsK KworLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlkZW50aWZpZXJz LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSknOworU0VUIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjczNWY1NGQ1N2VjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTQ3IEBACisjIENvcHlyaWdodCAoYykg MjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1biB0 aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNrIGZv ciBwcm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisK K3VzZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXco ZGlybmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJp bWFyeSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFp bicpOworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29uZmlndXJhdGlv bi4KKyMKKyMgV2UgcnVuIHdpdGggcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGlt aXQgc2V0IHRvIGVuc3VyZSB0aGF0IHRoZQorIyBwbGFuIHRyZWUgd2Fsa2VyIGNvZGUgcnVucyBh Z2FpbnN0IGV2ZXJ5IHF1ZXJ5IGluIHRoZSByZWdyZXNzaW9uIHRlc3RzLiBJZgorIyB3ZSdyZSB1 bmFibGUgdG8gcHJvcGVybHkgYW5hbHl6ZSBhbnkgb2YgdGhvc2UgcGxhbiB0cmVlcywgdGhpcyB0 ZXN0IHNob3VsZCBmYWlsLgorIworIyBXZSBzZXQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlIHRvIGFu IGFkdmljZSBzdHJpbmcgdGhhdCB3aWxsIGNhdXNlIHRoZSBhZHZpY2UKKyMgdHJvdmUgdG8gYmUg cG9wdWxhdGVkIHdpdGggYSBmZXcgZW50cmllcyBvZiB2YXJpb3VzIHNvcnRzLCBidXQgd2hpY2gg d2UgZG8KKyMgbm90IGV4cGVjdCB0byBtYXRjaCBhbnl0aGluZyBpbiB0aGUgcmVncmVzc2lvbiB0 ZXN0IHF1ZXJpZXMuIFRoaXMgd2F5LCB0aGUKKyMgcGxhbm5lciBob29rcyB3aWxsIGJlIGNhbGxl ZCwgaW1wcm92aW5nIGNvZGUgY292ZXJhZ2UsIGJ1dCBubyBwbGFucyBzaG91bGQKKyMgYWN0dWFs bHkgY2hhbmdlLgorIworIyBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9h ZHZpY2U9ZmFsc2UgaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nCisjIHJlZ3Jlc3Npb24gdGVz dCBxdWVyaWVzIHRoYXQgdXNlIEVYUExBSU4uIEluIHRoZSByZWFsIHdvcmxkLCBpdCBzZWVtcyBs aWtlCisjIHVzZXJzIHdpbGwgd2FudCBFWFBMQUlOIG91dHB1dCB0byBzaG93IHN1cHBsaWVkIGFk dmljZSBzbyB0aGF0IGl0J3MgY2xlYXIKKyMgd2hldGhlciBub3JtYWwgcGxhbm5lciBiZWhhdmlv ciBoYXMgYmVlbiBhbHRlcmVkLCBidXQgaGVyZSB0aGF0J3MgdW5kZXNpcmFibGUuCiskbm9kZS0+ YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIDw8RU9NKTsKK3BnX3BsYW5fYWR2aWNlLnNo YXJlZF9jb2xsZWN0aW9uX2xpbWl0PTEwMDAwMDAKK3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz1w Z19wbGFuX2FkdmljZQorcGdfcGxhbl9hZHZpY2UuYWR2aWNlPSdTRVFfU0NBTihlbnRpcmVseV9m aWN0aXRpb3VzKSBIQVNIX0pPSU4odG90YWxfZmFicmljYXRpb24pIEdBVEhFUihjb21wbGV0ZWx5 X2ltYWdpbmFyeSknCitwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZp Y2U9ZmFsc2UKK0VPTQorJG5vZGUtPnN0YXJ0OworCitteSAkc3JjZGlyID0gYWJzX3BhdGgoIi4u Ly4uIik7CisKKyMgLS1kbHBhdGggaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gZmluZCB0aGUgbG9j YXRpb24gb2YgcmVncmVzcy5zbworIyBhbmQgYW55IGxpYnJhcmllcyB0aGUgcmVncmVzc2lvbiB0 ZXN0cyByZXF1aXJlLgorbXkgJGRscGF0aCA9IGRpcm5hbWUoJEVOVntSRUdSRVNTX1NITElCfSk7 CisKKyMgLS1vdXRwdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIHdoZXJlIHRvIHBsYWNlIHRoZSBv dXRwdXQgZmlsZXMuCitteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0 bXBfY2hlY2s7CisKKyMgLS1pbnB1dGRpciBwb2ludHMgdG8gdGhlIHBhdGggb2YgdGhlIGlucHV0 IGZpbGVzLgorbXkgJGlucHV0ZGlyID0gIiRzcmNkaXIvc3JjL3Rlc3QvcmVncmVzcyI7CisKKyMg UnVuIHRoZSB0ZXN0cy4KK215ICRyYyA9CisgIHN5c3RlbSgkRU5We1BHX1JFR1JFU1N9IC4gIiAi CisJICAuICItLWJpbmRpcj0gIgorCSAgLiAiLS1kbHBhdGg9XCIkZGxwYXRoXCIgIgorCSAgLiAi LS1ob3N0PSIgLiAkbm9kZS0+aG9zdCAuICIgIgorCSAgLiAiLS1wb3J0PSIgLiAkbm9kZS0+cG9y dCAuICIgIgorCSAgLiAiLS1zY2hlZHVsZT0kc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxs ZWxfc2NoZWR1bGUgIgorCSAgLiAiLS1tYXgtY29uY3VycmVudC10ZXN0cz0yMCAiCisJICAuICIt LWlucHV0ZGlyPVwiJGlucHV0ZGlyXCIgIgorCSAgLiAiLS1vdXRwdXRkaXI9XCIkb3V0cHV0ZGly XCIiKTsKKworIyBEdW1wIG91dCB0aGUgcmVncmVzc2lvbiBkaWZmcyBmaWxlLCBpZiB0aGVyZSBp cyBvbmUKK2lmICgkcmMgIT0gMCkKK3sKKwlteSAkZGlmZnMgPSAiJG91dHB1dGRpci9yZWdyZXNz aW9uLmRpZmZzIjsKKwlpZiAoLWUgJGRpZmZzKQorCXsKKwkJcHJpbnQgIj09PSBkdW1waW5nICRk aWZmcyA9PT1cbiI7CisJCXByaW50IHNsdXJwX2ZpbGUoJGRpZmZzKTsKKwkJcHJpbnQgIj09PSBF T0YgPT09XG4iOworCX0KK30KKworIyBSZXBvcnQgcmVzdWx0cworaXMoJHJjLCAwLCAncmVncmVz c2lvbiB0ZXN0cyBwYXNzJyk7CisKKyMgQ3JlYXRlIHRoZSBleHRlbnNpb24gc28gd2UgY2FuIGFj Y2VzcyB0aGUgY29sbGVjdG9yCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUg RVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlJyk7CisKKyMgVmVyaWZ5IHRoYXQgYSBsYXJnZSBhbW91 bnQgb2YgYWR2aWNlIHdhcyBjb2xsZWN0ZWQKK215ICRhbGxfcXVlcnlfY291bnQgPSAkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dl dF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9NCitjbXBfb2soJGFsbF9xdWVyeV9jb3Vu dCwgJz4nLCAzNTAwMCwgImNvcGlvdXMgYWR2aWNlIGNvbGxlY3RlZCIpOworCisjIFZlcmlmeSB0 aGF0IGxvdHMgb2YgZGlmZmVyZW50IGFkdmljZSBzdHJpbmdzIHdlcmUgY29sbGVjdGVkCitteSAk ZGlzdGluY3RfcXVlcnlfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9N KTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NCisJKFNFTEVDVCBESVNUSU5DVCBhZHZpY2UgRlJPTSBw Z19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSk7CitFT00KK2NtcF9vaygkZGlzdGluY3Rf cXVlcnlfY291bnQsICc+JywgMzAwMCwgImRpdmVyc2UgYWR2aWNlIGNvbGxlY3RlZCIpOworCisj IFdlIHdhbnQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIG91ciBrbm93biB0YWdzIGluIHRo ZSBjb2xsZWN0ZWQgYWR2aWNlLgorIyBQdXQgYWxsIHRhZ3MgaW50byB0aGUgaGFzaCB0aGF0IGZv bGxvd3M7IG1hcCBhbnkgdGFncyB0aGF0IGFyZW4ndCB0ZXN0ZWQKKyMgYnkgdGhlIGNvcmUgcmVn cmVzc2lvbiB0ZXN0cyB0byAwLCBhbmQgb3RoZXJzIHRvIDEuCitteSAldGFnX21hcCA9ICgKKwlC SVRNQVBfSEVBUF9TQ0FOID0+IDEsCisJRk9SRUlHTl9KT0lOID0+IDAsCisJR0FUSEVSID0+IDEs CisJR0FUSEVSX01FUkdFID0+IDEsCisJSEFTSF9KT0lOID0+IDEsCisJSU5ERVhfT05MWV9TQ0FO ID0+IDEsCisJSU5ERVhfU0NBTiA9PiAxLAorCUpPSU5fT1JERVIgPT4gMSwKKwlNRVJHRV9KT0lO X01BVEVSSUFMSVpFID0+IDEsCisJTUVSR0VfSk9JTl9QTEFJTiA9PiAxLAorCU5FU1RFRF9MT09Q X01BVEVSSUFMSVpFID0+IDEsCisJTkVTVEVEX0xPT1BfTUVNT0laRSA9PiAxLAorCU5FU1RFRF9M T09QX1BMQUlOID0+IDEsCisJTk9fR0FUSEVSID0+IDEsCisJUEFSVElUSU9OV0lTRSA9PiAxLAor CVNFTUlKT0lOX05PTl9VTklRVUUgPT4gMSwKKwlTRU1JSk9JTl9VTklRVUUgPT4gMSwKKwlTRVFf U0NBTiA9PiAxLAorCVRJRF9TQ0FOID0+IDEsCispOworZm9yIG15ICR0YWcgKHNvcnQga2V5cyAl dGFnX21hcCkKK3sKKwlteSAkY2hlY2tpdCA9ICR0YWdfbWFweyR0YWd9OworCisJIyBTZWFyY2gg Zm9yIHRoZSBnaXZlbiB0YWcuIFRoaXMgaXMgbm90IGVudGlyZWx5IHJvYnVzdDogaXQgY291bGQg Z2V0IHRocm93bgorCSMgb2ZmIGJ5IGEgdGFibGUgYWxpYXMgc3VjaCBhcyAiRk9SRUlHTl9KT0lO KCIsIGJ1dCB0aGF0IHByb2JhYmx5IHdvbid0CisJIyBoYXBwZW4gaW4gdGhlIGNvcmUgcmVncmVz c2lvbiB0ZXN0cy4KKwlteSAkdGFnX2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9h ZHZpY2UoKQorCVdIRVJFIGFkdmljZSBMSUtFICclJHRhZyglJworRU9NCisKKwkjIENoZWNrIHRo YXQgdGhlIHRhZyBnb3QgYSBub24tdHJpdmlhbCBhbW91bnQgb2YgdXNlLCB1bmxlc3MgdG9sZCBv dGhlcndpc2UuCisJY21wX29rKCR0YWdfY291bnQsICc+JywgMTAsICJtdWx0aXBsZSB1c2VzIG9m ICR0YWciKSBpZiAkY2hlY2tpdDsKKworCSMgUmVnYXJkbGVzcywgbm90ZSB0aGUgZXhhY3QgY291 bnQgaW4gdGhlIGxvZywgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLgorCW5vdGUoImZvdW5kICR0YWdf Y291bnQgYWR2aWNlIHN0cmluZ3MgY29udGFpbmluZyAkdGFnIik7Cit9CisKKyMgVHJpZ2dlciBh IHBhcnRpYWwgY2xlYW51cCBvZiB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IsIGFuZCB0aGVu IGEgZnVsbAorIyBjbGVhbnVwLgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7 CitTRVQgcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ9NTAwOworU0VMRUNU ICogRlJPTSBwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9NCisKK2RvbmVf dGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1M2E3MGMyMTBhNy4uMTg1 ODY5MWIyNGMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTQzLDYgKzM5NDMsNDMg QEAgcGdfd2NfcHJvYmVmdW5jCiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBwZ3BfYXJtb3JfaGVh ZGVyc19zdGF0ZQorcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ3BhX2FkdmljZV9pdGVtCitwZ3Bh X2FkdmljZV90YWdfdHlwZQorcGdwYV9hZHZpY2VfdGFyZ2V0CitwZ3BhX2lkZW50aWZpZXIKK3Bn cGFfaW5kZXhfdGFyZ2V0CitwZ3BhX2luZGV4X3R5cGUKK3BncGFfaXRtX3R5cGUKK3BncGFfam9p bl9jbGFzcworcGdwYV9qb2luX21lbWJlcgorcGdwYV9qb2luX3N0YXRlCitwZ3BhX2pvaW5fc3Ry YXRlZ3kKK3BncGFfam9pbl91bnJvbGxlcgorcGdwYV9sb2NhbF9hZHZpY2UKK3BncGFfbG9jYWxf YWR2aWNlX2NodW5rCitwZ3BhX291dHB1dF9jb250ZXh0CitwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQKK3BncGFfcGxhbm5lcl9zdGF0ZQorcGdwYV9xZl90eXBlCitwZ3BhX3F1ZXJ5X2ZlYXR1cmUK K3BncGFfcmlfY2hlY2tlcgorcGdwYV9yaV9jaGVja2VyX2tleQorcGdwYV9zY2FuCitwZ3BhX3Nj YW5fc3RyYXRlZ3kKK3BncGFfc2hhcmVkX2FkdmljZQorcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5r CitwZ3BhX3NoYXJlZF9zdGF0ZQorcGdwYV90YXJnZXRfdHlwZQorcGdwYV90cm92ZQorcGdwYV90 cm92ZV9lbnRyeQorcGdwYV90cm92ZV9lbnRyeV9lbGVtZW50CitwZ3BhX3Ryb3ZlX2VudHJ5X2hh c2gKK3BncGFfdHJvdmVfZW50cnlfa2V5CitwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCitwZ3BhX3Ry b3ZlX3Jlc3VsdAorcGdwYV90cm92ZV9zbGljZQorcGdwYV91bnJvbGxlZF9qb2luCiBwZ3NvY2tl dAogcGdzcWxfdGhpbmdfdAogcGdzc0VudHJ5Ci0tIAoyLjUxLjAKCg== --000000000000986f97064539da43--