From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v2 02/16] drm/dp_mst: Introduce new refcounting scheme for mstbs and ports Date: Wed, 19 Dec 2018 19:19:46 -0500 Message-ID: <20181220001959.12486-3-lyude@redhat.com> References: <20181220001959.12486-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181220001959.12486-1-lyude@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, nouveau@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Cc: Jerry Zuo , David Airlie , Juston Li List-Id: intel-gfx@lists.freedesktop.org VGhlIGN1cnJlbnQgd2F5IG9mIGhhbmRsaW5nIHJlZmNvdW50aW5nIGluIHRoZSBEUCBNU1QgaGVs cGVycyBpcyByZWFsbHkKY29uZnVzaW5nIGFuZCBwcm9iYWJseSBqdXN0IHBsYWluIHdyb25nIGJl Y2F1c2UgaXQncyBiZWVuIGhhY2tlZCB1cCBtYW55CnRpbWVzIG92ZXIgdGhlIHllYXJzIHdpdGhv dXQgYW55b25lIGFjdHVhbGx5IGdvaW5nIG92ZXIgdGhlIGNvZGUgYW5kCnNlZWluZyBpZiB0aGlu Z3MgY291bGQgYmUgc2ltcGxpZmllZC4KClRvIHRoZSBiZXN0IG9mIG15IHVuZGVyc3RhbmRpbmcs IHRoZSBjdXJyZW50IHNjaGVtZSB3b3JrcyBsaWtlIHRoaXM6CmRybV9kcF9tc3RfcG9ydCBhbmQg ZHJtX2RwX21zdF9icmFuY2ggYm90aCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50LiBXaGVuCnRoaXMg cmVmY291bnQgaGl0cyAwIGZvciBlaXRoZXIgb2YgdGhlIHR3bywgdGhleSdyZSByZW1vdmVkIGZy b20gdGhlCnRvcG9sb2d5IHN0YXRlLCBidXQgbm90IGltbWVkaWF0ZWx5IGZyZWVkLiBCb3RoIHBv cnRzIGFuZCBicmFuY2ggZGV2aWNlcwp3aWxsIHJlaW5pdGlhbGl6ZSB0aGVpciBrcmVmIG9uY2Ug aXQncyBoaXQgMCBiZWZvcmUgYWN0dWFsbHkgZGVzdHJveWluZwp0aGVtc2VsdmVzLiBUaGUgaW50 ZW5kZWQgcHVycG9zZSBiZWhpbmQgdGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBhdm9pZApwcm9ibGVt cyBsaWtlIG5vdCBiZWluZyBhYmxlIHRvIGZyZWUgYSByZW1vdGUgcGF5bG9hZCB0aGF0IG1pZ2h0 IHN0aWxsCmJlIGFjdGl2ZSwgZHVlIHRvIHVzIGhhdmluZyByZW1vdmVkIGFsbCBvZiB0aGUgcG9y dC9icmFuY2ggZGV2aWNlCnN0cnVjdHVyZXMgaW4gbWVtb3J5LCBhcyBwZXI6Cgo5MWEyNWU0NjMx MzAgKCJkcm0vZHAvbXN0OiBkZWFsbG9jYXRlIHBheWxvYWQgb24gcG9ydCBkZXN0cnVjdGlvbiIp CgpXaGljaCBtYXkgaGF2ZSB3b3JrZWQsIGJ1dCB0aGVuIGl0IGNhdXNlZCB1c2UtYWZ0ZXItZnJl ZSBlcnJvcnMuIEJlaW5nCm5ldyB0byBNU1QgYXQgdGhlIHRpbWUsIEkgdHJpZWQgZml4aW5nIGl0 OwoKMjYzZWZkZTMxZjk3ICgiZHJtL2RwL21zdDogR2V0IHZhbGlkYXRlZCBwb3J0IHJlZiBpbiBk cm1fZHBfdXBkYXRlX3BheWxvYWRfcGFydDEoKSIpCgpCdXQsIHRoYXQgd2FzIGJyb2tlbjogYm90 aCBkcm1fZHBfbXN0X3BvcnQgYW5kIGRybV9kcF9tc3RfYnJhbmNoIHN0cnVjdHMKYXJlIHZhbGlk YXRlZCBpbiBhbG1vc3QgZXZlcnkgRFAgTVNUIGhlbHBlciBmdW5jdGlvbi4gU2ltcGx5IHB1dCwg dGhpcwptZWFucyB3ZSBnbyB0aHJvdWdoIHRoZSB0b3BvbG9neSBhbmQgdHJ5IHRvIHNlZSBpZiB0 aGUgZ2l2ZW4KZHJtX2RwX21zdF9icmFuY2ggb3IgZHJtX2RwX21zdF9wb3J0IGlzIHN0aWxsIGF0 dGFjaGVkIHRvIHNvbWV0aGluZwpiZWZvcmUgdHJ5aW5nIHRvIHVzZSBpdCBpbiBvcmRlciB0byBh dm9pZCBkZXJlZmVyZW5jaW5nIGZyZWVkIG1lbW9yeQooc29tZXRoaW5nIHRoYXQgaGFzIGhhcHBl bmVkIGEgTE9UIGluIHRoZSBwYXN0IHdpdGggdGhpcyBsaWJyYXJ5KS4KQmVjYXVzZSBvZiB0aGlz IGl0IGRvZXNuJ3QgYWN0dWFsbHkgbWF0dGVyIHdoZXRoZXIgb3Igbm90IHdlIGtlZXAga2VlcAp0 aGUgcG9ydHMgYW5kIGJyYW5jaGVzIGFyb3VuZCBpbiBtZW1vcnkgYXMgdGhhdCdzIG5vdCBlbm91 Z2gsIGJlY2F1c2UKYW55IGZ1bmN0aW9uIHRoYXQgdmFsaWRhdGVzIHRoZSBicmFuY2hlcyBhbmQg cG9ydHMgcGFzc2VkIHRvIGl0IHdpbGwKc3RpbGwgcmVqZWN0IHRoZW0gYW55d2F5IHNpbmNlIHRo ZXkncmUgbm8gbG9uZ2VyIGluIHRoZSB0b3BvbG9neQpzdHJ1Y3R1cmUuIFNvLCB1c2UtYWZ0ZXIt ZnJlZSBlcnJvcnMgd2VyZSBmaXhlZCBidXQgcGF5bG9hZCBkZWFsbG9jYXRpb24Kd2FzIGNvbXBs ZXRlbHkgYnJva2VuLgoKVHdvIHllYXJzIGxhdGVyLCBBTUQgaW5mb3JtZWQgbWUgYWJvdXQgdGhp cyBpc3N1ZSBhbmQgSSBhdHRlbXB0ZWQgdG8KY29tZSB1cCB3aXRoIGEgdGVtcG9yYXJ5IGZpeCwg cGVuZGluZyBhIGxvbmctb3ZlcmR1ZSBjbGVhbnVwIG9mIHRoaXMKbGlicmFyeToKCmM1NGM3Mzc0 ZmY0NCAoImRybS9kcF9tc3Q6IFNraXAgdmFsaWRhdGluZyBwb3J0cyBkdXJpbmcgZGVzdHJ1Y3Rp b24sIGp1c3QgcmVmIikKCkJ1dCB0aGVuIHRoYXQgaW50cm9kdWNlZCB1c2UtYWZ0ZXItZnJlZSBl cnJvcnMsIHNvIEkgcXVpY2tseSByZXZlcnRlZAppdDoKCjk3NjU2MzViMzA3NSAoIlJldmVydCAi ZHJtL2RwX21zdDogU2tpcCB2YWxpZGF0aW5nIHBvcnRzIGR1cmluZyBkZXN0cnVjdGlvbiwganVz dCByZWYiIikKCkFuZCBpbiB0aGUgcHJvY2VzcywgbGVhcm5lZCB0aGF0IHRoZXJlIGlzIGp1c3Qg bm8gc2ltcGxlIGZpeCBmb3IgdGhpczoKdGhlIGRlc2lnbiBpcyBqdXN0IGJyb2tlbi4gVW5mb3J0 dW50ZWx5LCB0aGUgdXNhZ2Ugb2YgdGhlc2UgaGVscGVycyBhcmUKcXVpdGUgYnJva2VuIGFzIHdl bGwuIFNvbWUgZHJpdmVycyBsaWtlIGk5MTUgaGF2ZSBiZWVuIHNtYXJ0IGVub3VnaCB0bwphdm9p ZCBhY2Nlc3NpbmcgYW55IGtpbmQgb2YgaW5mb3JtYXRpb24gZnJvbSBNU1QgcG9ydCBzdHJ1Y3R1 cmVzLCBidXQKb3RoZXJzIGxpa2Ugbm91dmVhdSBoYXZlIGFzc3VtZWQsIHVuZGVyc3RhbmRhYmx5 IHNvLCB0aGF0CmRybV9kcF9tc3RfcG9ydCBzdHJ1Y3R1cmVzIGFyZSBub3JtYWwgYW5kIGNhbiBq dXN0IGJlIGFjY2Vzc2VkIGF0IGFueQp0aW1lIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgdXNlLWFm dGVyLWZyZWUgZXJyb3JzLgoKQWZ0ZXIgYSBsb3Qgb2YgZGlzY3Vzc2lvbiwgbWUgYW5kIERhbmll bCBWZXR0ZXIgY2FtZSB1cCB3aXRoIGEgYmV0dGVyCmlkZWEgdG8gcmVwbGFjZSBhbGwgb2YgdGhp cy4KClRvIHN1bW1hcml6ZSwgc2luY2UgdGhpcyBpcyBkb2N1bWVudGVkIGZhciBtb3JlIGluZGVw dGggaW4gdGhlCmRvY3VtZW50YXRpb24gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLCB3ZSBtYWtlIGl0 IHNvIHRoYXQgZHJtX2RwX21zdF9wb3J0CmFuZCBkcm1fZHBfbXN0X2JyYW5jaCBzdHJ1Y3R1cmVz IGhhdmUgdHdvIGRpZmZlcmVudCBjbGFzc2VzIG9mCnJlZmNvdW50czogdG9wb2xvZ3lfa3JlZiwg YW5kIG1hbGxvY19rcmVmLiB0b3BvbG9neV9rcmVmIGNvcnJlc3BvbmRzIHRvCnRoZSBsaWZldGlt ZSBvZiB0aGUgZ2l2ZW4gZHJtX2RwX21zdF9wb3J0IG9yIGRybV9kcF9tc3RfYnJhbmNoIGluIGl0 J3MKZ2l2ZW4gdG9wb2xvZ3kuIE9uY2UgaXQgaGl0cyB6ZXJvLCBhbnkgYXNzb2NpYXRlZCBjb25u ZWN0b3JzIGFyZSByZW1vdmVkCmFuZCB0aGUgYnJhbmNoIG9yIHBvcnQgY2FuIG5vIGxvbmdlciBi ZSB2YWxpZGF0ZWQuIG1hbGxvY19rcmVmCmNvcnJlc3BvbmRzIHRvIHRoZSBsaWZldGltZSBvZiB0 aGUgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBhY3R1YWwKc3RydWN0dXJlLCBhbmQgd2lsbCBh bHdheXMgYmUgbm9uLXplcm8gc28gbG9uZyBhcyB0aGUgdG9wb2xvZ3lfa3JlZiBpcwpub24temVy by4gVGhpcyBnaXZlcyB1cyBhIHdheSB0byBhbGxvdyBjYWxsZXJzIHRvIGhvbGQgb250byBwb3J0 IGFuZApicmFuY2ggZGV2aWNlIHN0cnVjdHVyZXMgcGFzdCB0aGVpciB0b3BvbG9neSBsaWZldGlt ZSwgYW5kIGRyYW1hdGljYWxseQpzaW1wbGlmaWVzIHRoZSBsaWZldGltZXMgb2YgYm90aCBzdHJ1 Y3R1cmVzLiBUaGlzIGFsc28gZmluYWxseSBmaXhlcyB0aGUKcG9ydCBkZWFsbG9jYXRpb24gcHJv YmxlbSwgcHJvcGVybHkuCgpBZGRpdGlvbmFsbHk6IHNpbmNlIHRoaXMgbm93IG1lYW5zIHRoYXQg d2UgY2FuIGtlZXAgcG9ydHMgYW5kIGJyYW5jaApkZXZpY2VzIGFsbG9jYXRlZCBpbiBtZW1vcnkg Zm9yIGhvd2V2ZXIgbG9uZyB3ZSBuZWVkLCB3ZSBubyBsb25nZXIgbmVlZAphIHNpZ25pZmljYW50 IGFtb3VudCBvZiB0aGUgcG9ydCB2YWxpZGF0aW9uIHRoYXQgd2UgY3VycmVudGx5IGRvLgoKQWRk aXRpb25hbGx5LCB0aGVyZSBpcyBvbmUgbGFzdCBzY2VuYXJpbyB0aGF0IHRoaXMgZml4ZXMsIHdo aWNoIGNvdWxkbid0CmhhdmUgYmVlbiBmaXhlZCBwcm9wZXJseSBiZWZvcmVoYW5kOgoKLSBDUFUx IHVucmVmcyBwb3J0IGZyb20gdG9wb2xvZ3kgKHJlZmNvdW50IDEtPjApCi0gQ1BVMiByZWZzIHBv cnQgaW4gdG9wb2xvZ3kocmVmY291bnQgMC0+MSkKClNpbmNlIHdlIG5vdyBjYW4gZ3VhcmFudGVl IG1lbW9yeSBzYWZldHkgZm9yIHBvcnRzIGFuZCBicmFuY2hlcwphcy1uZWVkZWQsIHdlIGFsc28g Y2FuIG1ha2Ugb3VyIG1haW4gcmVmZXJlbmNlIGNvdW50aW5nIGZ1bmN0aW9ucyBmaXgKdGhpcyBw cm9ibGVtIGJ5IHVzaW5nIGtyZWZfZ2V0X3VubGVzc196ZXJvKCkgaW50ZXJuYWxseSBzbyB0aGF0 IHRvcG9sb2d5CnJlZmNvdW50cyBjYW4gb25seSBldmVyIHJlYWNoIDAgb25jZS4KCkNoYW5nZXMg c2luY2UgdjE6CiogUmVtb3ZlIGZvcndhcmQgZGVjbGFyYXRpb25zIC0gZGFudmV0CiogTW92ZSAi QnJhbmNoIGRldmljZSBhbmQgcG9ydCByZWZjb3VudGluZyIgc2VjdGlvbiBmcm9tIGRvY3VtZW50 YXRpb24KICBpbnRvIGtlcm5lbC1kb2MgY29tbWVudHMgLSBkYW52ZXQKKiBFeHBvcnQgaW50ZXJu YWwgdG9wb2xvZ3kgbGlmZXRpbWUgZnVuY3Rpb25zIGludG8gdGhlaXIgb3duIHNlY3Rpb24gaW4K ICB0aGUga2VybmVsLWRvY3MgLSBkYW52ZXQKKiBzL0AvJi9nIGZvciBzdHJ1Y3QgcmVmZXJlbmNl cyBpbiBrZXJuZWwtZG9jcyAtIGRhbnZldAoqIERyb3AgdGhlICJ3aGVuIHRoZXkgYXJlIG5vIGxv bmdlciBiZWluZyB1c2VkIiBiaXRzIGZyb20gdGhlIGtlcm5lbAogIGRvY3MgLSBkYW52ZXQKKiBN b2RpZnkgZGlhZ3JhbXMgdG8gc2hvdyBob3cgdGhlIERSTSBkcml2ZXIgaW50ZXJhY3RzIHdpdGgg dGhlIHRvcG9sb2d5CiAgYW5kIHBheWxvYWRzIC0gZGFudmV0CiogTWFrZSBzdWdnZXN0ZWQgZG9j dW1lbnRhdGlvbiBjaGFuZ2VzIGZvcgogIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGIoKSBh bmQgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydCgpIC0KICBkYW52ZXQKKiBCZXR0ZXIgZXhw bGFpbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gbWFsbG9jIHJlZnMgYW5kIHRvcG9sb2d5IGty ZWZzCiAgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3Bv cnQoKSBhbmQKICBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKCkgLSBkYW52ZXQKKiBGaXgg IlNlZSBhbHNvIiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKCkgLSBkYW52ZXQKKiBS ZW5hbWUgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfKHBvcnR8bXN0YikoKSAtPgogIGRybV9kcF9t c3RfdG9wb2xvZ3lfdHJ5X2dldF8ocG9ydHxtc3RiKSgpIGFuZAogIGRybV9kcF9tc3RfdG9wb2xv Z3lfcmVmXyhwb3J0fG1zdGIpKCkgLT4KICBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF8ocG9ydHxt c3RiKSgpIC0gZGFudmV0Ciogcy9zaG91bGQvbXVzdCBpbiBkb2NzIC0gZGFudmV0CiogV0FSTl9P TihyZWZjb3VudCA9PSAwKSBpbiB0b3BvbG9neV9nZXRfKG1zdGJ8cG9ydCkgLSBkYW52ZXQKKiBN b3ZlIGtkb2NzIGZvciBtc3RiL3BvcnQgc3RydWN0cyBpbmxpbmUgLSBkYW52ZXQKKiBTcGxpdCBk cm1fZHBfZ2V0X2xhc3RfY29ubmVjdGVkX3BvcnRfYW5kX21zdGIoKSBjaGFuZ2VzIGludG8gdGhl aXIgb3duCiAgY29tbWl0IC0gZGFudmV0CgpTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVk ZUByZWRoYXQuY29tPgpDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPgpDYzogRGF2 aWQgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CkNjOiBKZXJyeSBadW8gPEplcnJ5Llp1b0Bh bWQuY29tPgpDYzogSGFycnkgV2VudGxhbmQgPGhhcnJ5LndlbnRsYW5kQGFtZC5jb20+CkNjOiBK dXN0b24gTGkgPGp1c3Rvbi5saUBpbnRlbC5jb20+Ci0tLQogLi4uL2dwdS9kcC1tc3QvdG9wb2xv Z3ktZmlndXJlLTEuZG90ICAgICAgICAgIHwgIDUyICsrCiAuLi4vZ3B1L2RwLW1zdC90b3BvbG9n eS1maWd1cmUtMi5kb3QgICAgICAgICAgfCAgNTYgKysKIC4uLi9ncHUvZHAtbXN0L3RvcG9sb2d5 LWZpZ3VyZS0zLmRvdCAgICAgICAgICB8ICA1OSArKysKIERvY3VtZW50YXRpb24vZ3B1L2RybS1r bXMtaGVscGVycy5yc3QgICAgICAgICB8ICAyNiArLQogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9t c3RfdG9wb2xvZ3kuYyAgICAgICAgIHwgNDgxICsrKysrKysrKysrKysrKy0tLQogaW5jbHVkZS9k cm0vZHJtX2RwX21zdF9oZWxwZXIuaCAgICAgICAgICAgICAgIHwgIDMyICstCiA2IGZpbGVzIGNo YW5nZWQsIDYyOCBpbnNlcnRpb25zKCspLCA3OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBEb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTEuZG90CiBjcmVh dGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0y LmRvdAogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9n eS1maWd1cmUtMy5kb3QKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9w b2xvZ3ktZmlndXJlLTEuZG90IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZp Z3VyZS0xLmRvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE1N2Ux N2M3ZTBiMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3Bv bG9neS1maWd1cmUtMS5kb3QKQEAgLTAsMCArMSw1MiBAQAorZGlncmFwaCBUIHsKKyAgICAvKiBN YWtlIHN1cmUgb3VyIHBheWxvYWRzIGFyZSBhbHdheXMgZHJhd24gYmVsb3cgdGhlIGRyaXZlciBu b2RlICovCisgICAgc3ViZ3JhcGggY2x1c3Rlcl9kcml2ZXIgeworICAgICAgICBmaWxsY29sb3Ig PSBncmV5OworICAgICAgICBzdHlsZSA9IGZpbGxlZDsKKyAgICAgICAgZHJpdmVyIC0+IHtwYXls b2FkMSwgcGF5bG9hZDJ9IFtkaXI9bm9uZV07CisgICAgfQorCisgICAgLyogRHJpdmVyIG1hbGxv YyByZWZlcmVuY2VzICovCisgICAgZWRnZSBbc3R5bGU9ZGFzaGVkXTsKKyAgICBkcml2ZXIgLT4g cG9ydDE7CisgICAgZHJpdmVyIC0+IHBvcnQyOworICAgIGRyaXZlciAtPiBwb3J0MzplOworICAg IGRyaXZlciAtPiBwb3J0NDsKKworICAgIHBheWxvYWQxOnMgLT4gcG9ydDE6ZTsKKyAgICBwYXls b2FkMjpzIC0+IHBvcnQzOmU7CisgICAgZWRnZSBbc3R5bGU9IiJdOworCisgICAgc3ViZ3JhcGgg Y2x1c3Rlcl90b3BvbG9neSB7CisgICAgICAgIGxhYmVsPSJUb3BvbG9neSBNYW5hZ2VyIjsKKyAg ICAgICAgbGFiZWxsb2M9Ym90dG9tOworCisgICAgICAgIC8qIFRvcG9sb2d5IHJlZmVyZW5jZXMg Ki8KKyAgICAgICAgbXN0YjEgLT4ge3BvcnQxLCBwb3J0Mn07CisgICAgICAgIHBvcnQxIC0+IG1z dGIyOworICAgICAgICBwb3J0MiAtPiBtc3RiMyAtPiB7cG9ydDMsIHBvcnQ0fTsKKyAgICAgICAg cG9ydDMgLT4gbXN0YjQ7CisKKyAgICAgICAgLyogTWFsbG9jIHJlZmVyZW5jZXMgKi8KKyAgICAg ICAgZWRnZSBbc3R5bGU9ZGFzaGVkO2Rpcj1iYWNrXTsKKyAgICAgICAgbXN0YjEgLT4ge3BvcnQx LCBwb3J0Mn07CisgICAgICAgIHBvcnQxIC0+IG1zdGIyOworICAgICAgICBwb3J0MiAtPiBtc3Ri MyAtPiB7cG9ydDMsIHBvcnQ0fTsKKyAgICAgICAgcG9ydDMgLT4gbXN0YjQ7CisgICAgfQorCisg ICAgZHJpdmVyIFtsYWJlbD0iRFJNIGRyaXZlciI7c3R5bGU9ZmlsbGVkO3NoYXBlPWJveDtmaWxs Y29sb3I9bGlnaHRibHVlXTsKKworICAgIHBheWxvYWQxIFtsYWJlbD0iUGF5bG9hZCAjMSI7c3R5 bGU9ZmlsbGVkO3NoYXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVlXTsKKyAgICBwYXlsb2FkMiBb bGFiZWw9IlBheWxvYWQgIzIiO3N0eWxlPWZpbGxlZDtzaGFwZT1ib3g7ZmlsbGNvbG9yPWxpZ2h0 Ymx1ZV07CisKKyAgICBtc3RiMSBbbGFiZWw9Ik1TVEIgIzEiO3N0eWxlPWZpbGxlZDtmaWxsY29s b3I9cGFsZWdyZWVuO3NoYXBlPW92YWxdOworICAgIG1zdGIyIFtsYWJlbD0iTVNUQiAjMiI7c3R5 bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW47c2hhcGU9b3ZhbF07CisgICAgbXN0YjMgW2xh YmVsPSJNU1RCICMzIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbjtzaGFwZT1vdmFs XTsKKyAgICBtc3RiNCBbbGFiZWw9Ik1TVEIgIzQiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFs ZWdyZWVuO3NoYXBlPW92YWxdOworCisgICAgcG9ydDEgW2xhYmVsPSJQb3J0ICMxIjtzaGFwZT1v dmFsXTsKKyAgICBwb3J0MiBbbGFiZWw9IlBvcnQgIzIiO3NoYXBlPW92YWxdOworICAgIHBvcnQz IFtsYWJlbD0iUG9ydCAjMyI7c2hhcGU9b3ZhbF07CisgICAgcG9ydDQgW2xhYmVsPSJQb3J0ICM0 IjtzaGFwZT1vdmFsXTsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90 b3BvbG9neS1maWd1cmUtMi5kb3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3kt ZmlndXJlLTIuZG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDI0 M2RkMTczN2NiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3Rv cG9sb2d5LWZpZ3VyZS0yLmRvdApAQCAtMCwwICsxLDU2IEBACitkaWdyYXBoIFQgeworICAgIC8q IE1ha2Ugc3VyZSBvdXIgcGF5bG9hZHMgYXJlIGFsd2F5cyBkcmF3biBiZWxvdyB0aGUgZHJpdmVy IG5vZGUgKi8KKyAgICBzdWJncmFwaCBjbHVzdGVyX2RyaXZlciB7CisgICAgICAgIGZpbGxjb2xv ciA9IGdyZXk7CisgICAgICAgIHN0eWxlID0gZmlsbGVkOworICAgICAgICBkcml2ZXIgLT4ge3Bh eWxvYWQxLCBwYXlsb2FkMn0gW2Rpcj1ub25lXTsKKyAgICB9CisKKyAgICAvKiBEcml2ZXIgbWFs bG9jIHJlZmVyZW5jZXMgKi8KKyAgICBlZGdlIFtzdHlsZT1kYXNoZWRdOworICAgIGRyaXZlciAt PiBwb3J0MTsKKyAgICBkcml2ZXIgLT4gcG9ydDI7CisgICAgZHJpdmVyIC0+IHBvcnQzOmU7Cisg ICAgZHJpdmVyIC0+IHBvcnQ0IFtjb2xvcj1yZWRdOworCisgICAgcGF5bG9hZDE6cyAtPiBwb3J0 MTplOworICAgIHBheWxvYWQyOnMgLT4gcG9ydDM6ZTsKKyAgICBlZGdlIFtzdHlsZT0iIl07CisK KyAgICBzdWJncmFwaCBjbHVzdGVyX3RvcG9sb2d5IHsKKyAgICAgICAgbGFiZWw9IlRvcG9sb2d5 IE1hbmFnZXIiOworICAgICAgICBsYWJlbGxvYz1ib3R0b207CisKKyAgICAgICAgLyogVG9wb2xv Z3kgcmVmZXJlbmNlcyAqLworICAgICAgICBtc3RiMSAtPiB7cG9ydDEsIHBvcnQyfTsKKyAgICAg ICAgcG9ydDEgLT4gbXN0YjI7CisgICAgICAgIGVkZ2UgW2NvbG9yPXJlZF07CisgICAgICAgIHBv cnQyIC0+IG1zdGIzIC0+IHtwb3J0MywgcG9ydDR9OworICAgICAgICBwb3J0MyAtPiBtc3RiNDsK KyAgICAgICAgZWRnZSBbY29sb3I9IiJdOworCisgICAgICAgIC8qIE1hbGxvYyByZWZlcmVuY2Vz ICovCisgICAgICAgIGVkZ2UgW3N0eWxlPWRhc2hlZDtkaXI9YmFja107CisgICAgICAgIG1zdGIx IC0+IHtwb3J0MSwgcG9ydDJ9OworICAgICAgICBwb3J0MSAtPiBtc3RiMjsKKyAgICAgICAgcG9y dDIgLT4gbXN0YjMgLT4gcG9ydDM7CisgICAgICAgIGVkZ2UgW2NvbG9yPXJlZF07CisgICAgICAg IG1zdGIzIC0+IHBvcnQ0OworICAgICAgICBwb3J0MyAtPiBtc3RiNDsKKyAgICB9CisKKyAgICBt c3RiMSBbbGFiZWw9Ik1TVEIgIzEiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuXTsK KyAgICBtc3RiMiBbbGFiZWw9Ik1TVEIgIzIiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdy ZWVuXTsKKyAgICBtc3RiMyBbbGFiZWw9Ik1TVEIgIzMiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9 cGFsZWdyZWVuXTsKKyAgICBtc3RiNCBbbGFiZWw9Ik1TVEIgIzQiO3N0eWxlPWZpbGxlZDtmaWxs Y29sb3I9Z3JleV07CisKKyAgICBwb3J0MSBbbGFiZWw9IlBvcnQgIzEiXTsKKyAgICBwb3J0MiBb bGFiZWw9IlBvcnQgIzIiXTsKKyAgICBwb3J0MyBbbGFiZWw9IlBvcnQgIzMiXTsKKyAgICBwb3J0 NCBbbGFiZWw9IlBvcnQgIzQiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9Z3JleV07CisKKyAgICBk cml2ZXIgW2xhYmVsPSJEUk0gZHJpdmVyIjtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xv cj1saWdodGJsdWVdOworCisgICAgcGF5bG9hZDEgW2xhYmVsPSJQYXlsb2FkICMxIjtzdHlsZT1m aWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVdOworICAgIHBheWxvYWQyIFtsYWJl bD0iUGF5bG9hZCAjMiI7c3R5bGU9ZmlsbGVkO3NoYXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVl XTsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1 cmUtMy5kb3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTMuZG90 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNmNkNzhkMDY3NzhiCi0t LSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3Vy ZS0zLmRvdApAQCAtMCwwICsxLDU5IEBACitkaWdyYXBoIFQgeworICAgIC8qIE1ha2Ugc3VyZSBv dXIgcGF5bG9hZHMgYXJlIGFsd2F5cyBkcmF3biBiZWxvdyB0aGUgZHJpdmVyIG5vZGUgKi8KKyAg ICBzdWJncmFwaCBjbHVzdGVyX2RyaXZlciB7CisgICAgICAgIGZpbGxjb2xvciA9IGdyZXk7Cisg ICAgICAgIHN0eWxlID0gZmlsbGVkOworICAgICAgICBlZGdlIFtkaXI9bm9uZV07CisgICAgICAg IGRyaXZlciAtPiBwYXlsb2FkMTsKKyAgICAgICAgZHJpdmVyIC0+IHBheWxvYWQyIFtwZW53aWR0 aD0zXTsKKyAgICAgICAgZWRnZSBbZGlyPSIiXTsKKyAgICB9CisKKyAgICAvKiBEcml2ZXIgbWFs bG9jIHJlZmVyZW5jZXMgKi8KKyAgICBlZGdlIFtzdHlsZT1kYXNoZWRdOworICAgIGRyaXZlciAt PiBwb3J0MTsKKyAgICBkcml2ZXIgLT4gcG9ydDI7CisgICAgZHJpdmVyIC0+IHBvcnQzOmU7Cisg ICAgZHJpdmVyIC0+IHBvcnQ0IFtjb2xvcj1ncmV5XTsKKyAgICBwYXlsb2FkMTpzIC0+IHBvcnQx OmU7CisgICAgcGF5bG9hZDI6cyAtPiBwb3J0MzplIFtwZW53aWR0aD0zXTsKKyAgICBlZGdlIFtz dHlsZT0iIl07CisKKyAgICBzdWJncmFwaCBjbHVzdGVyX3RvcG9sb2d5IHsKKyAgICAgICAgbGFi ZWw9IlRvcG9sb2d5IE1hbmFnZXIiOworICAgICAgICBsYWJlbGxvYz1ib3R0b207CisKKyAgICAg ICAgLyogVG9wb2xvZ3kgcmVmZXJlbmNlcyAqLworICAgICAgICBtc3RiMSAtPiB7cG9ydDEsIHBv cnQyfTsKKyAgICAgICAgcG9ydDEgLT4gbXN0YjI7CisgICAgICAgIGVkZ2UgW2NvbG9yPWdyZXld OworICAgICAgICBwb3J0MiAtPiBtc3RiMyAtPiB7cG9ydDMsIHBvcnQ0fTsKKyAgICAgICAgcG9y dDMgLT4gbXN0YjQ7CisgICAgICAgIGVkZ2UgW2NvbG9yPSIiXTsKKworICAgICAgICAvKiBNYWxs b2MgcmVmZXJlbmNlcyAqLworICAgICAgICBlZGdlIFtzdHlsZT1kYXNoZWQ7ZGlyPWJhY2tdOwor ICAgICAgICBtc3RiMSAtPiB7cG9ydDEsIHBvcnQyfTsKKyAgICAgICAgcG9ydDEgLT4gbXN0YjI7 CisgICAgICAgIHBvcnQyIC0+IG1zdGIzIFtwZW53aWR0aD0zXTsKKyAgICAgICAgbXN0YjMgLT4g cG9ydDMgW3BlbndpZHRoPTNdOworICAgICAgICBlZGdlIFtjb2xvcj1ncmV5XTsKKyAgICAgICAg bXN0YjMgLT4gcG9ydDQ7CisgICAgICAgIHBvcnQzIC0+IG1zdGI0OworICAgIH0KKworICAgIG1z dGIxIFtsYWJlbD0iTVNUQiAjMSI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5dOwor ICAgIG1zdGIyIFtsYWJlbD0iTVNUQiAjMiI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3Jl ZW5dOworICAgIG1zdGIzIFtsYWJlbD0iTVNUQiAjMyI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1w YWxlZ3JlZW47cGVud2lkdGg9M107CisgICAgbXN0YjQgW2xhYmVsPSJNU1RCICM0IjtzdHlsZT1m aWxsZWQ7ZmlsbGNvbG9yPWdyZXldOworCisgICAgcG9ydDEgW2xhYmVsPSJQb3J0ICMxIl07Cisg ICAgcG9ydDIgW2xhYmVsPSJQb3J0ICMyIjtwZW53aWR0aD01XTsKKyAgICBwb3J0MyBbbGFiZWw9 IlBvcnQgIzMiO3BlbndpZHRoPTNdOworICAgIHBvcnQ0IFtsYWJlbD0iUG9ydCAjNCI7c3R5bGU9 ZmlsbGVkO2ZpbGxjb2xvcj1ncmV5XTsKKworICAgIGRyaXZlciBbbGFiZWw9IkRSTSBkcml2ZXIi O3N0eWxlPWZpbGxlZDtzaGFwZT1ib3g7ZmlsbGNvbG9yPWxpZ2h0Ymx1ZV07CisKKyAgICBwYXls b2FkMSBbbGFiZWw9IlBheWxvYWQgIzEiO3N0eWxlPWZpbGxlZDtzaGFwZT1ib3g7ZmlsbGNvbG9y PWxpZ2h0Ymx1ZV07CisgICAgcGF5bG9hZDIgW2xhYmVsPSJQYXlsb2FkICMyIjtzdHlsZT1maWxs ZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWU7cGVud2lkdGg9M107Cit9CmRpZmYgLS1n aXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0IGIvRG9jdW1lbnRhdGlv bi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdAppbmRleCBiNDIyZWI4ZWRmMTYuLjdhM2ZjNTY5YmM2 OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdAorKysg Yi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0CkBAIC0yMDgsMTggKzIwOCw0 MCBAQCBEaXNwbGF5IFBvcnQgRHVhbCBNb2RlIEFkYXB0b3IgSGVscGVyIEZ1bmN0aW9ucyBSZWZl cmVuY2UKIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2R1YWxfbW9kZV9o ZWxwZXIuYwogICAgOmV4cG9ydDoKIAotRGlzcGxheSBQb3J0IE1TVCBIZWxwZXIgRnVuY3Rpb25z IFJlZmVyZW5jZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor RGlzcGxheSBQb3J0IE1TVCBIZWxwZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworT3Zl cnZpZXcKKy0tLS0tLS0tCiAKIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2Rw X21zdF90b3BvbG9neS5jCiAgICA6ZG9jOiBkcCBtc3QgaGVscGVyCiAKKy4uIGtlcm5lbC1kb2M6 OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCisgICA6ZG9jOiBCcmFuY2gg ZGV2aWNlIGFuZCBwb3J0IHJlZmNvdW50aW5nCisKK0Z1bmN0aW9ucyBSZWZlcmVuY2UKKy0tLS0t LS0tLS0tLS0tLS0tLS0KKwogLi4ga2VybmVsLWRvYzo6IGluY2x1ZGUvZHJtL2RybV9kcF9tc3Rf aGVscGVyLmgKICAgIDppbnRlcm5hbDoKIAogLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2Ry bS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKICAgIDpleHBvcnQ6CiAKK1RvcG9sb2d5IExpZmV0aW1l IEludGVybmFscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGZ1bmN0aW9u cyBhcmVuJ3QgZXhwb3J0ZWQgdG8gZHJpdmVycywgYnV0IGFyZSBkb2N1bWVudGVkIGhlcmUgdG8g aGVscCBtYWtlCit0aGUgTVNUIHRvcG9sb2d5IGhlbHBlcnMgZWFzaWVyIHRvIHVuZGVyc3RhbmQK KworLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMK KyAgIDpmdW5jdGlvbnM6IGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiIGRybV9kcF9t c3RfdG9wb2xvZ3lfZ2V0X21zdGIKKyAgICAgICAgICAgICAgIGRybV9kcF9tc3RfdG9wb2xvZ3lf cHV0X21zdGIKKyAgICAgICAgICAgICAgIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9wb3J0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQKKyAgICAgICAgICAgICAgIGRybV9kcF9tc3Rf dG9wb2xvZ3lfcHV0X3BvcnQKKyAgICAgICAgICAgICAgIGRybV9kcF9tc3RfZ2V0X21zdGJfbWFs bG9jIGRybV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jCisKIE1JUEkgRFNJIEhlbHBlciBGdW5jdGlv bnMgUmVmZXJlbmNlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIGIvZHJpdmVycy9n cHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwppbmRleCA2ZjliMjExMDY5YTcuLmIzODBhZGEw OWU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCkBAIC04NTAsNDYgKzg1 MCwyMTEgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqZHJtX2RwX2FkZF9tc3Rf YnJhbmNoX2RldmljZSh1OCBsY3QsIHU4ICpyYWQpCiAJaWYgKGxjdCA+IDEpCiAJCW1lbWNweSht c3RiLT5yYWQsIHJhZCwgbGN0IC8gMik7CiAJSU5JVF9MSVNUX0hFQUQoJm1zdGItPnBvcnRzKTsK LQlrcmVmX2luaXQoJm1zdGItPmtyZWYpOworCWtyZWZfaW5pdCgmbXN0Yi0+dG9wb2xvZ3lfa3Jl Zik7CisJa3JlZl9pbml0KCZtc3RiLT5tYWxsb2Nfa3JlZik7CiAJcmV0dXJuIG1zdGI7CiB9CiAK LXN0YXRpYyB2b2lkIGRybV9kcF9mcmVlX21zdF9wb3J0KHN0cnVjdCBrcmVmICprcmVmKTsKLQog c3RhdGljIHZvaWQgZHJtX2RwX2ZyZWVfbXN0X2JyYW5jaF9kZXZpY2Uoc3RydWN0IGtyZWYgKmty ZWYpCiB7Ci0Jc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiID0gY29udGFpbmVyX29mKGty ZWYsIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCwga3JlZik7Ci0JaWYgKG1zdGItPnBvcnRfcGFy ZW50KSB7Ci0JCWlmIChsaXN0X2VtcHR5KCZtc3RiLT5wb3J0X3BhcmVudC0+bmV4dCkpCi0JCQlr cmVmX3B1dCgmbXN0Yi0+cG9ydF9wYXJlbnQtPmtyZWYsIGRybV9kcF9mcmVlX21zdF9wb3J0KTsK LQl9CisJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiID0KKwkJY29udGFpbmVyX29mKGty ZWYsIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCwgbWFsbG9jX2tyZWYpOworCisJaWYgKG1zdGIt PnBvcnRfcGFyZW50KQorCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhtc3RiLT5wb3J0X3Bh cmVudCk7CisKIAlrZnJlZShtc3RiKTsKIH0KIAorLyoqCisgKiBET0M6IEJyYW5jaCBkZXZpY2Ug YW5kIHBvcnQgcmVmY291bnRpbmcKKyAqCisgKiBUb3BvbG9neSByZWZjb3VudCBvdmVydmlldwor ICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBUaGUgcmVmY291bnRpbmcgc2No ZW1lcyBmb3IgJnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCBhbmQgJnN0cnVjdAorICogZHJtX2Rw X21zdF9wb3J0IGFyZSBzb21ld2hhdCB1bnVzdWFsLiBCb3RoIHBvcnRzIGFuZCBicmFuY2ggZGV2 aWNlcyBoYXZlCisgKiB0d28gZGlmZmVyZW50IGtpbmRzIG9mIHJlZmNvdW50czogdG9wb2xvZ3kg cmVmY291bnRzLCBhbmQgbWFsbG9jIHJlZmNvdW50cy4KKyAqCisgKiBUb3BvbG9neSByZWZjb3Vu dHMgYXJlIG5vdCBleHBvc2VkIHRvIGRyaXZlcnMsIGFuZCBhcmUgaGFuZGxlZCBpbnRlcm5hbGx5 CisgKiBieSB0aGUgRFAgTVNUIGhlbHBlcnMuIFRoZSBoZWxwZXJzIHVzZSB0aGVtIGluIG9yZGVy IHRvIHByZXZlbnQgdGhlCisgKiBpbi1tZW1vcnkgdG9wb2xvZ3kgc3RhdGUgZnJvbSBiZWluZyBj aGFuZ2VkIGluIHRoZSBtaWRkbGUgb2YgY3JpdGljYWwKKyAqIG9wZXJhdGlvbnMgbGlrZSBjaGFu Z2luZyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgcGF5bG9hZCBhbGxvY2F0aW9ucy4gVGhpcworICog bWVhbnMgZWFjaCBicmFuY2ggYW5kIHBvcnQgd2lsbCBiZSBjb25zaWRlcmVkIHRvIGJlIGNvbm5l Y3RlZCB0byB0aGUgcmVzdAorICogb2YgdGhlIHRvcG9sb2d5IHVudGlsIGl0J3MgdG9wb2xvZ3kg cmVmY291bnQgcmVhY2hlcyB6ZXJvLiBBZGRpdGlvbmFsbHksCisgKiBmb3IgcG9ydHMgdGhpcyBt ZWFucyB0aGF0IHRoZWlyIGFzc29jaWF0ZWQgJnN0cnVjdCBkcm1fY29ubmVjdG9yIHdpbGwgc3Rh eQorICogcmVnaXN0ZXJlZCB3aXRoIHVzZXJzcGFjZSB1bnRpbCB0aGUgcG9ydCdzIHJlZmNvdW50 IHJlYWNoZXMgMC4KKyAqCisgKiBNYWxsb2MgcmVmY291bnQgb3ZlcnZpZXcKKyAqIH5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIE1hbGxvYyByZWZlcmVuY2VzIGFyZSB1c2VkIHRvIGtl ZXAgYSAmc3RydWN0IGRybV9kcF9tc3RfcG9ydCBvciAmc3RydWN0CisgKiBkcm1fZHBfbXN0X2Jy YW5jaCBhbGxvY2F0ZWQgZXZlbiBhZnRlciBhbGwgb2YgaXRzIHRvcG9sb2d5IHJlZmVyZW5jZXMg aGF2ZQorICogYmVlbiBkcm9wcGVkLCBzbyB0aGF0IHRoZSBkcml2ZXIgb3IgTVNUIGhlbHBlcnMg Y2FuIHNhZmVseSBhY2Nlc3MgZWFjaAorICogYnJhbmNoJ3MgbGFzdCBrbm93biBzdGF0ZSBiZWZv cmUgaXQgd2FzIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSB0b3BvbG9neS4KKyAqIFdoZW4gdGhlIG1h bGxvYyByZWZjb3VudCBvZiBhIHBvcnQgb3IgYnJhbmNoIHJlYWNoZXMgMCwgdGhlIG1lbW9yeQor ICogYWxsb2NhdGlvbiBjb250YWluaW5nIHRoZSAmc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIG9y ICZzdHJ1Y3QKKyAqIGRybV9kcF9tc3RfcG9ydCByZXNwZWN0aXZlbHkgd2lsbCBiZSBmcmVlZC4K KyAqCisgKiBGb3IgJnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCwgbWFsbG9jIHJlZmNvdW50cyBh cmUgbm90IGN1cnJlbnRseSBleHBvc2VkCisgKiB0byBkcml2ZXJzLiBBcyBvZiB3cml0aW5nIHRo aXMgZG9jdW1lbnRhdGlvbiwgdGhlcmUgYXJlIG5vIGRyaXZlcnMgdGhhdAorICogaGF2ZSBhIHVz ZWNhc2UgZm9yIGFjY2Vzc2luZyAmc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIG91dHNpZGUgb2Yg dGhlIE1TVAorICogaGVscGVycy4gRXhwb3NpbmcgdGhpcyBBUEkgdG8gZHJpdmVycyBpbiBhIHJh Y2UtZnJlZSBtYW5uZXIgd291bGQgdGFrZSBtb3JlCisgKiB0d2Vha2luZyBvZiB0aGUgcmVmY291 bnRpbmcgc2NoZW1lLCBob3dldmVyIHBhdGNoZXMgYXJlIHdlbGNvbWUgcHJvdmlkZWQKKyAqIHRo ZXJlIGlzIGEgbGVnaXRpbWF0ZSBkcml2ZXIgdXNlY2FzZSBmb3IgdGhpcy4KKyAqCisgKiBSZWZj b3VudCByZWxhdGlvbnNoaXBzIGluIGEgdG9wb2xvZ3kKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIExldCdzIHRha2UgYSBsb29rIGF0IHdoeSB0aGUgcmVs YXRpb25zaGlwIGJldHdlZW4gdG9wb2xvZ3kgYW5kIG1hbGxvYworICogcmVmY291bnRzIGlzIGRl c2lnbmVkIHRoZSB3YXkgaXQgaXMuCisgKgorICogLi4ga2VybmVsLWZpZ3VyZTo6IGRwLW1zdC90 b3BvbG9neS1maWd1cmUtMS5kb3QKKyAqCisgKiAgICBBbiBleGFtcGxlIG9mIHRvcG9sb2d5IGFu ZCBtYWxsb2MgcmVmcyBpbiBhIERQIE1TVCB0b3BvbG9neSB3aXRoIHR3bworICogICAgYWN0aXZl IHBheWxvYWRzLiBUb3BvbG9neSByZWZjb3VudCBpbmNyZW1lbnRzIGFyZSBpbmRpY2F0ZWQgYnkg c29saWQKKyAqICAgIGxpbmVzLCBhbmQgbWFsbG9jIHJlZmNvdW50IGluY3JlbWVudHMgYXJlIGlu ZGljYXRlZCBieSBkYXNoZWQgbGluZXMuCisgKiAgICBFYWNoIHN0YXJ0cyBmcm9tIHRoZSBicmFu Y2ggd2hpY2ggaW5jcmVtZW50ZWQgdGhlIHJlZmNvdW50LCBhbmQgZW5kcyBhdAorICogICAgdGhl IGJyYW5jaCB0byB3aGljaCB0aGUgcmVmY291bnQgYmVsb25ncyB0by4KKyAqCisgKiBBcyB5b3Ug Y2FuIHNlZSBpbiBmaWd1cmUgMSwgZXZlcnkgYnJhbmNoIGluY3JlbWVudHMgdGhlIHRvcG9sb2d5 IHJlZmNvdW50CisgKiBvZiBpdCdzIGNoaWxkcmVuLCBhbmQgaW5jcmVtZW50cyB0aGUgbWFsbG9j IHJlZmNvdW50IG9mIGl0J3MgcGFyZW50LgorICogQWRkaXRpb25hbGx5LCBldmVyeSBwYXlsb2Fk IGluY3JlbWVudHMgdGhlIG1hbGxvYyByZWZjb3VudCBvZiBpdCdzIGFzc2lnbmVkCisgKiBwb3J0 IGJ5IDEuCisgKgorICogU28sIHdoYXQgd291bGQgaGFwcGVuIGlmIE1TVEIgIzMgZnJvbSB0aGUg YWJvdmUgZmlndXJlIHdhcyB1bnBsdWdnZWQgZnJvbQorICogdGhlIHN5c3RlbSwgYnV0IHRoZSBk cml2ZXIgaGFkbid0IHlldCByZW1vdmVkIHBheWxvYWQgIzIgZnJvbSBwb3J0ICMzPyBUaGUKKyAq IHRvcG9sb2d5IHdvdWxkIHN0YXJ0IHRvIGxvb2sgbGlrZSBmaWd1cmUgMi4KKyAqCisgKiAuLiBr ZXJuZWwtZmlndXJlOjogZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0yLmRvdAorICoKKyAqICAgIFBv cnRzIGFuZCBicmFuY2ggZGV2aWNlcyB3aGljaCBoYXZlIGJlZW4gcmVsZWFzZWQgZnJvbSBtZW1v cnkgYXJlCisgKiAgICBjb2xvcmVkIGdyZXksIGFuZCByZWZlcmVuY2VzIHdoaWNoIGhhdmUgYmVl biByZW1vdmVkIGFyZSBjb2xvcmVkIHJlZC4KKyAqCisgKiBXaGVuZXZlciBhIHBvcnQgb3IgYnJh bmNoIGRldmljZSdzIHRvcG9sb2d5IHJlZmNvdW50IHJlYWNoZXMgemVybywgaXQgd2lsbAorICog ZGVjcmVtZW50IHRoZSB0b3BvbG9neSByZWZjb3VudHMgb2YgYWxsIGl0cyBjaGlsZHJlbiwgdGhl IG1hbGxvYyByZWZjb3VudAorICogb2YgaXRzIHBhcmVudCwgYW5kIGZpbmFsbHkgaXRzIG93biBt YWxsb2MgcmVmY291bnQuIEZvciBNU1RCICM0IGFuZCBwb3J0CisgKiAjNCwgdGhpcyBtZWFucyB0 aGV5IGJvdGggaGF2ZSBiZWVuIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSB0b3BvbG9neSBhbmQgZnJl ZWQKKyAqIGZyb20gbWVtb3J5LiBCdXQsIGJlY2F1c2UgcGF5bG9hZCAjMiBpcyBzdGlsbCBob2xk aW5nIGEgcmVmZXJlbmNlIHRvIHBvcnQKKyAqICMzLCBwb3J0ICMzIGlzIHJlbW92ZWQgZnJvbSB0 aGUgdG9wb2xvZ3kgYnV0IGl0J3MgJnN0cnVjdCBkcm1fZHBfbXN0X3BvcnQKKyAqIGlzIHN0aWxs IGFjY2Vzc2libGUgZnJvbSBtZW1vcnkuIFRoaXMgYWxzbyBtZWFucyBwb3J0ICMzIGhhcyBub3Qg eWV0CisgKiBkZWNyZW1lbnRlZCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIE1TVEIgIzMsIHNvIGl0 J3MgJnN0cnVjdAorICogZHJtX2RwX21zdF9icmFuY2ggd2lsbCBhbHNvIHN0YXkgYWxsb2NhdGVk IGluIG1lbW9yeSB1bnRpbCBwb3J0ICMzJ3MKKyAqIG1hbGxvYyByZWZjb3VudCByZWFjaGVzIDAu CisgKgorICogVGhpcyByZWxhdGlvbnNoaXAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaW4gb3JkZXIg dG8gcmVsZWFzZSBwYXlsb2FkICMyLCB3ZQorICogbmVlZCB0byBiZSBhYmxlIHRvIGZpZ3VyZSBv dXQgdGhlIGxhc3QgcmVsYXRpdmUgb2YgcG9ydCAjMyB0aGF0J3Mgc3RpbGwKKyAqIGNvbm5lY3Rl ZCB0byB0aGUgdG9wb2xvZ3kuIEluIHRoaXMgY2FzZSwgd2Ugd291bGQgdHJhdmVsIHVwIHRoZSB0 b3BvbG9neSBhcworICogc2hvd24gaW4gZmlndXJlIDMuCisgKgorICogLi4ga2VybmVsLWZpZ3Vy ZTo6IGRwLW1zdC90b3BvbG9neS1maWd1cmUtMy5kb3QKKyAqCisgKiBBbmQgZmluYWxseSwgcmVt b3ZlIHBheWxvYWQgIzIgYnkgY29tbXVuaWNhdGluZyB3aXRoIHBvcnQgIzIgdGhyb3VnaAorICog c2lkZWJhbmQgdHJhbnNhY3Rpb25zLgorICovCisKKy8qKgorICogZHJtX2RwX21zdF9nZXRfbXN0 Yl9tYWxsb2MoKSAtIEluY3JlbWVudCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIGEgYnJhbmNoCisg KiBkZXZpY2UKKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB0byBpbmNy ZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudCBvZgorICoKKyAqIEluY3JlbWVudHMgJmRybV9kcF9t c3RfYnJhbmNoLm1hbGxvY19rcmVmLiBXaGVuCisgKiAmZHJtX2RwX21zdF9icmFuY2gubWFsbG9j X2tyZWYgcmVhY2hlcyAwLCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZm9yIEBtc3RiCisgKiB3aWxs IGJlIHJlbGVhc2VkIGFuZCBAbXN0YiBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuCisgKgorICogU2Vl IGFsc286IGRybV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jKCkKKyAqLworc3RhdGljIHZvaWQKK2Ry bV9kcF9tc3RfZ2V0X21zdGJfbWFsbG9jKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikK K3sKKwlrcmVmX2dldCgmbXN0Yi0+bWFsbG9jX2tyZWYpOworCURSTV9ERUJVRygibXN0YiAlcCAo JWQpXG4iLCBtc3RiLCBrcmVmX3JlYWQoJm1zdGItPm1hbGxvY19rcmVmKSk7Cit9CisKKy8qKgor ICogZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2MoKSAtIERlY3JlbWVudCB0aGUgbWFsbG9jIHJl ZmNvdW50IG9mIGEgYnJhbmNoCisgKiBkZXZpY2UKKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBkcm1f ZHBfbXN0X2JyYW5jaCB0byBkZWNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudCBvZgorICoKKyAq IERlY3JlbWVudHMgJmRybV9kcF9tc3RfYnJhbmNoLm1hbGxvY19rcmVmLiBXaGVuCisgKiAmZHJt X2RwX21zdF9icmFuY2gubWFsbG9jX2tyZWYgcmVhY2hlcyAwLCB0aGUgbWVtb3J5IGFsbG9jYXRp b24gZm9yIEBtc3RiCisgKiB3aWxsIGJlIHJlbGVhc2VkIGFuZCBAbXN0YiBtYXkgbm8gbG9uZ2Vy IGJlIHVzZWQuCisgKgorICogU2VlIGFsc286IGRybV9kcF9tc3RfZ2V0X21zdGJfbWFsbG9jKCkK KyAqLworc3RhdGljIHZvaWQKK2RybV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jKHN0cnVjdCBkcm1f ZHBfbXN0X2JyYW5jaCAqbXN0YikKK3sKKwlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxuIiwgbXN0 Yiwga3JlZl9yZWFkKCZtc3RiLT5tYWxsb2Nfa3JlZiktMSk7CisJa3JlZl9wdXQoJm1zdGItPm1h bGxvY19rcmVmLCBkcm1fZHBfZnJlZV9tc3RfYnJhbmNoX2RldmljZSk7Cit9CisKK3N0YXRpYyB2 b2lkIGRybV9kcF9mcmVlX21zdF9wb3J0KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBk cm1fZHBfbXN0X3BvcnQgKnBvcnQgPQorCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9k cF9tc3RfcG9ydCwgbWFsbG9jX2tyZWYpOworCisJZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2Mo cG9ydC0+cGFyZW50KTsKKwlrZnJlZShwb3J0KTsKK30KKworLyoqCisgKiBkcm1fZHBfbXN0X2dl dF9wb3J0X21hbGxvYygpIC0gSW5jcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQgb2YgYW4gTVNU IHBvcnQKKyAqIEBwb3J0OiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgdG8gaW5jcmVtZW50 IHRoZSBtYWxsb2MgcmVmY291bnQgb2YKKyAqCisgKiBJbmNyZW1lbnRzICZkcm1fZHBfbXN0X3Bv cnQubWFsbG9jX2tyZWYuIFdoZW4gJmRybV9kcF9tc3RfcG9ydC5tYWxsb2Nfa3JlZgorICogcmVh Y2hlcyAwLCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZm9yIEBwb3J0IHdpbGwgYmUgcmVsZWFzZWQg YW5kIEBwb3J0IG1heQorICogbm8gbG9uZ2VyIGJlIHVzZWQuCisgKgorICogQmVjYXVzZSBAcG9y dCBjb3VsZCBwb3RlbnRpYWxseSBiZSBmcmVlZCBhdCBhbnkgdGltZSBieSB0aGUgRFAgTVNUIGhl bHBlcnMKKyAqIGlmICZkcm1fZHBfbXN0X3BvcnQubWFsbG9jX2tyZWYgcmVhY2hlcyAwLCBpbmNs dWRpbmcgZHVyaW5nIGEgY2FsbCB0byB0aGlzCisgKiBmdW5jdGlvbiwgZHJpdmVycyB0aGF0IHdo aWNoIHRvIG1ha2UgdXNlIG9mICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHNob3VsZAorICogZW5z dXJlIHRoYXQgdGhleSBncmFiIGF0IGxlYXN0IG9uZSBtYWluIG1hbGxvYyByZWZlcmVuY2UgdG8g dGhlaXIgTVNUIHBvcnRzCisgKiBpbiAmZHJtX2RwX21zdF90b3BvbG9neV9jYnMuYWRkX2Nvbm5l Y3Rvci4gVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYmVmb3JlCisgKiB0aGVyZSBpcyBhbnkgY2hh bmNlIGZvciAmZHJtX2RwX21zdF9wb3J0Lm1hbGxvY19rcmVmIHRvIHJlYWNoIDAuCisgKgorICog U2VlIGFsc286IGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKCkKKyAqLwordm9pZAorZHJtX2Rw X21zdF9nZXRfcG9ydF9tYWxsb2Moc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKK3sKKwlr cmVmX2dldCgmcG9ydC0+bWFsbG9jX2tyZWYpOworCURSTV9ERUJVRygicG9ydCAlcCAoJWQpXG4i LCBwb3J0LCBrcmVmX3JlYWQoJnBvcnQtPm1hbGxvY19rcmVmKSk7Cit9CitFWFBPUlRfU1lNQk9M KGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKTsKKworLyoqCisgKiBkcm1fZHBfbXN0X3B1dF9w b3J0X21hbGxvYygpIC0gRGVjcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQgb2YgYW4gTVNUIHBv cnQKKyAqIEBwb3J0OiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgdG8gZGVjcmVtZW50IHRo ZSBtYWxsb2MgcmVmY291bnQgb2YKKyAqCisgKiBEZWNyZW1lbnRzICZkcm1fZHBfbXN0X3BvcnQu bWFsbG9jX2tyZWYuIFdoZW4gJmRybV9kcF9tc3RfcG9ydC5tYWxsb2Nfa3JlZgorICogcmVhY2hl cyAwLCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZm9yIEBwb3J0IHdpbGwgYmUgcmVsZWFzZWQgYW5k IEBwb3J0IG1heQorICogbm8gbG9uZ2VyIGJlIHVzZWQuCisgKgorICogU2VlIGFsc286IGRybV9k cF9tc3RfZ2V0X3BvcnRfbWFsbG9jKCkKKyAqLwordm9pZAorZHJtX2RwX21zdF9wdXRfcG9ydF9t YWxsb2Moc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKK3sKKwlEUk1fREVCVUcoInBvcnQg JXAgKCVkKVxuIiwgcG9ydCwga3JlZl9yZWFkKCZwb3J0LT5tYWxsb2Nfa3JlZiktMSk7CisJa3Jl Zl9wdXQoJnBvcnQtPm1hbGxvY19rcmVmLCBkcm1fZHBfZnJlZV9tc3RfcG9ydCk7Cit9CitFWFBP UlRfU1lNQk9MKGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKTsKKwogc3RhdGljIHZvaWQgZHJt X2RwX2Rlc3Ryb3lfbXN0X2JyYW5jaF9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpCiB7Ci0Jc3Ry dWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBk cm1fZHBfbXN0X2JyYW5jaCwga3JlZik7CisJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3Ri ID0KKwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCwgdG9wb2xv Z3lfa3JlZik7CisJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IgPSBtc3RiLT5t Z3I7CiAJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgKnRtcDsKIAlib29sIHdha2VfdHgg PSBmYWxzZTsKIAotCS8qCi0JICogaW5pdCBrcmVmIGFnYWluIHRvIGJlIHVzZWQgYnkgcG9ydHMg dG8gcmVtb3ZlIG1zdCBicmFuY2ggd2hlbiBpdCBpcwotCSAqIG5vdCBuZWVkZWQgYW55bW9yZQot CSAqLwotCWtyZWZfaW5pdChrcmVmKTsKLQotCWlmIChtc3RiLT5wb3J0X3BhcmVudCAmJiBsaXN0 X2VtcHR5KCZtc3RiLT5wb3J0X3BhcmVudC0+bmV4dCkpCi0JCWtyZWZfZ2V0KCZtc3RiLT5wb3J0 X3BhcmVudC0+a3JlZik7Ci0KLQkvKgotCSAqIGRlc3Ryb3kgYWxsIHBvcnRzIC0gZG9uJ3QgbmVl ZCBsb2NrCi0JICogYXMgdGhlcmUgYXJlIG5vIG1vcmUgcmVmZXJlbmNlcyB0byB0aGUgbXN0IGJy YW5jaAotCSAqIGRldmljZSBhdCB0aGlzIHBvaW50LgotCSAqLworCW11dGV4X2xvY2soJm1nci0+ bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHRtcCwgJm1zdGItPnBvcnRz LCBuZXh0KSB7CiAJCWxpc3RfZGVsKCZwb3J0LT5uZXh0KTsKIAkJZHJtX2RwX21zdF90b3BvbG9n eV9wdXRfcG9ydChwb3J0KTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2spOwogCiAJLyog ZHJvcCBhbnkgdHggc2xvdHMgbXNnICovCiAJbXV0ZXhfbG9jaygmbXN0Yi0+bWdyLT5xbG9jayk7 CkBAIC05MDgsMTQgKzEwNzMsODIgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lfbXN0X2Jy YW5jaF9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpCiAJaWYgKHdha2VfdHgpCiAJCXdha2VfdXBf YWxsKCZtc3RiLT5tZ3ItPnR4X3dhaXRxKTsKIAotCWtyZWZfcHV0KGtyZWYsIGRybV9kcF9mcmVl X21zdF9icmFuY2hfZGV2aWNlKTsKKwlkcm1fZHBfbXN0X3B1dF9tc3RiX21hbGxvYyhtc3RiKTsK K30KKworLyoqCisgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0YigpIC0gSW5jcmVt ZW50IHRoZSB0b3BvbG9neSByZWZjb3VudCBvZiBhCisgKiBicmFuY2ggZGV2aWNlIHVubGVzcyBp dHMgemVybworICogQG1zdGI6ICZzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggdG8gaW5jcmVtZW50 IHRoZSB0b3BvbG9neSByZWZjb3VudCBvZgorICoKKyAqIEF0dGVtcHRzIHRvIGdyYWIgYSB0b3Bv bG9neSByZWZlcmVuY2UgdG8gQG1zdGIsIGlmIGl0IGhhc24ndCB5ZXQgYmVlbgorICogcmVtb3Zl ZCBmcm9tIHRoZSB0b3BvbG9neSAoZS5nLiAmZHJtX2RwX21zdF9icmFuY2gudG9wb2xvZ3lfa3Jl ZiBoYXMKKyAqIHJlYWNoZWQgMCkuIEhvbGRpbmcgYSB0b3BvbG9neSByZWZlcmVuY2UgaW1wbGll cyB0aGF0IGEgbWFsbG9jIHJlZmVyZW5jZQorICogd2lsbCBiZSBoZWxkIHRvIEBtc3RiIGFzIGxv bmcgYXMgdGhlIHVzZXIgaG9sZHMgdGhlIHRvcG9sb2d5IHJlZmVyZW5jZS4KKyAqCisgKiBDYXJl IHNob3VsZCBiZSB0YWtlbiB0byBlbnN1cmUgdGhhdCB0aGUgdXNlciBoYXMgYXQgbGVhc3Qgb25l IG1hbGxvYworICogcmVmZXJlbmNlIHRvIEBtc3RiLiBJZiB5b3UgYWxyZWFkeSBoYXZlIGEgdG9w b2xvZ3kgcmVmZXJlbmNlIHRvIEBtc3RiLCB5b3UKKyAqIHNob3VsZCB1c2UgZHJtX2RwX21zdF90 b3BvbG9neV9nZXRfbXN0YigpIGluc3RlYWQuCisgKgorICogU2VlIGFsc286CisgKiBkcm1fZHBf bXN0X3RvcG9sb2d5X2dldF9tc3RiKCkKKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIo KQorICoKKyAqIFJldHVybnM6CisgKiAqIDE6IEEgdG9wb2xvZ3kgcmVmZXJlbmNlIHdhcyBncmFi YmVkIHN1Y2Nlc3NmdWxseQorICogKiAwOiBAcG9ydCBpcyBubyBsb25nZXIgaW4gdGhlIHRvcG9s b2d5LCBubyByZWZlcmVuY2Ugd2FzIGdyYWJiZWQKKyAqLworc3RhdGljIGludCBfX211c3RfY2hl Y2sKK2RybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiKHN0cnVjdCBkcm1fZHBfbXN0X2Jy YW5jaCAqbXN0YikKK3sKKwlpbnQgcmV0ID0ga3JlZl9nZXRfdW5sZXNzX3plcm8oJm1zdGItPnRv cG9sb2d5X2tyZWYpOworCisJaWYgKHJldCkKKwkJRFJNX0RFQlVHKCJtc3RiICVwICglZClcbiIs IG1zdGIsCisJCQkgIGtyZWZfcmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZikpOworCisJcmV0dXJu IHJldDsKIH0KIAotc3RhdGljIHZvaWQgZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0YihzdHJ1 Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCisvKioKKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lf Z2V0X21zdGIoKSAtIEluY3JlbWVudCB0aGUgdG9wb2xvZ3kgcmVmY291bnQgb2YgYQorICogYnJh bmNoIGRldmljZQorICogQG1zdGI6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIHRvIGlu Y3JlbWVudCB0aGUgdG9wb2xvZ3kgcmVmY291bnQgb2YKKyAqCisgKiBJbmNyZW1lbnRzICZkcm1f ZHBfbXN0X2JyYW5jaC50b3BvbG9neV9yZWZjb3VudCB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXIg b3IKKyAqIG5vdCBpdCdzIGFscmVhZHkgcmVhY2hlZCAwLiBUaGlzIGlzIG9ubHkgdmFsaWQgdG8g dXNlIGluIHNjZW5hcmlvcyB3aGVyZQorICogeW91IGFyZSBhbHJlYWR5IGd1YXJhbnRlZWQgdG8g aGF2ZSBhdCBsZWFzdCBvbmUgYWN0aXZlIHRvcG9sb2d5IHJlZmVyZW5jZQorICogdG8gQG1zdGIu IE90aGVyd2lzZSwgZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIoKSBtdXN0IGJlIHVz ZWQuCisgKgorICogU2VlIGFsc286CisgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0 YigpCisgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKCkKKyAqLworc3RhdGljIHZvaWQg ZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YihzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1z dGIpCiB7Ci0Ja3JlZl9wdXQoJm1zdGItPmtyZWYsIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hf ZGV2aWNlKTsKKwlXQVJOX09OKGtyZWZfcmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZikgPT0gMCk7 CisJa3JlZl9nZXQoJm1zdGItPnRvcG9sb2d5X2tyZWYpOworCURSTV9ERUJVRygibXN0YiAlcCAo JWQpXG4iLCBtc3RiLCBrcmVmX3JlYWQoJm1zdGItPnRvcG9sb2d5X2tyZWYpKTsKIH0KIAorLyoq CisgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKCkgLSByZWxlYXNlIGEgdG9wb2xvZ3kg cmVmZXJlbmNlIHRvIGEgYnJhbmNoCisgKiBkZXZpY2UKKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBk cm1fZHBfbXN0X2JyYW5jaCB0byByZWxlYXNlIHRoZSB0b3BvbG9neSByZWZlcmVuY2UgZnJvbQor ICoKKyAqIFJlbGVhc2VzIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIGZyb20gQG1zdGIgYnkgZGVjcmVt ZW50aW5nCisgKiAmZHJtX2RwX21zdF9icmFuY2gudG9wb2xvZ3lfa3JlZi4KKyAqCisgKiBTZWUg YWxzbzoKKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiKCkKKyAqIGRybV9kcF9t c3RfdG9wb2xvZ3lfZ2V0X21zdGIoKQorICovCitzdGF0aWMgdm9pZAorZHJtX2RwX21zdF90b3Bv bG9neV9wdXRfbXN0YihzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCit7CisJRFJNX0RF QlVHKCJtc3RiICVwICglZClcbiIsIG1zdGIsIGtyZWZfcmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3Jl ZiktMSk7CisJa3JlZl9wdXQoJm1zdGItPnRvcG9sb2d5X2tyZWYsIGRybV9kcF9kZXN0cm95X21z dF9icmFuY2hfZGV2aWNlKTsKK30KIAogc3RhdGljIHZvaWQgZHJtX2RwX3BvcnRfdGVhcmRvd25f cGR0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBvbGRfcGR0KQogewpAQCAtOTM3 LDcgKzExNzAsOCBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfcG9ydF90ZWFyZG93bl9wZHQoc3RydWN0 IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IG9sZF9wZHQpCiAKIHN0YXRpYyB2b2lkIGRybV9k cF9kZXN0cm95X3BvcnQoc3RydWN0IGtyZWYgKmtyZWYpCiB7Ci0Jc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0LCBr cmVmKTsKKwlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0ID0KKwkJY29udGFpbmVyX29mKGty ZWYsIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQsIHRvcG9sb2d5X2tyZWYpOwogCXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyID0gcG9ydC0+bWdyOwogCiAJaWYgKCFwb3J0LT5pbnB1 dCkgewpAQCAtOTU2LDcgKzExOTAsNiBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9wb3J0 KHN0cnVjdCBrcmVmICprcmVmKQogCQkJICogZnJvbSBhbiBFRElEIHJldHJpZXZhbCAqLwogCiAJ CQltdXRleF9sb2NrKCZtZ3ItPmRlc3Ryb3lfY29ubmVjdG9yX2xvY2spOwotCQkJa3JlZl9nZXQo JnBvcnQtPnBhcmVudC0+a3JlZik7CiAJCQlsaXN0X2FkZCgmcG9ydC0+bmV4dCwgJm1nci0+ZGVz dHJveV9jb25uZWN0b3JfbGlzdCk7CiAJCQltdXRleF91bmxvY2soJm1nci0+ZGVzdHJveV9jb25u ZWN0b3JfbG9jayk7CiAJCQlzY2hlZHVsZV93b3JrKCZtZ3ItPmRlc3Ryb3lfY29ubmVjdG9yX3dv cmspOwpAQCAtOTY3LDEyICsxMjAwLDc4IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X3Bv cnQoc3RydWN0IGtyZWYgKmtyZWYpCiAJCWRybV9kcF9wb3J0X3RlYXJkb3duX3BkdChwb3J0LCBw b3J0LT5wZHQpOwogCQlwb3J0LT5wZHQgPSBEUF9QRUVSX0RFVklDRV9OT05FOwogCX0KLQlrZnJl ZShwb3J0KTsKKwlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3J0KTsKIH0KIAorLyoqCisg KiBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfcG9ydCgpIC0gSW5jcmVtZW50IHRoZSB0b3Bv bG9neSByZWZjb3VudCBvZiBhCisgKiBwb3J0IHVubGVzcyBpdHMgemVybworICogQHBvcnQ6ICZz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHRvIGluY3JlbWVudCB0aGUgdG9wb2xvZ3kgcmVmY291bnQg b2YKKyAqCisgKiBBdHRlbXB0cyB0byBncmFiIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIHRvIEBwb3J0 LCBpZiBpdCBoYXNuJ3QgeWV0IGJlZW4KKyAqIHJlbW92ZWQgZnJvbSB0aGUgdG9wb2xvZ3kgKGUu Zy4gJmRybV9kcF9tc3RfcG9ydC50b3BvbG9neV9rcmVmIGhhcyByZWFjaGVkCisgKiAwKS4gSG9s ZGluZyBhIHRvcG9sb2d5IHJlZmVyZW5jZSBpbXBsaWVzIHRoYXQgYSBtYWxsb2MgcmVmZXJlbmNl IHdpbGwgYmUKKyAqIGhlbGQgdG8gQHBvcnQgYXMgbG9uZyBhcyB0aGUgdXNlciBob2xkcyB0aGUg dG9wb2xvZ3kgcmVmZXJlbmNlLgorICoKKyAqIENhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3Vy ZSB0aGF0IHRoZSB1c2VyIGhhcyBhdCBsZWFzdCBvbmUgbWFsbG9jCisgKiByZWZlcmVuY2UgdG8g QHBvcnQuIElmIHlvdSBhbHJlYWR5IGhhdmUgYSB0b3BvbG9neSByZWZlcmVuY2UgdG8gQHBvcnQs IHlvdQorICogc2hvdWxkIHVzZSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0KCkgaW5zdGVh ZC4KKyAqCisgKiBTZWUgYWxzbzoKKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQoKQor ICogZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydCgpCisgKgorICogUmV0dXJuczoKKyAqICog MTogQSB0b3BvbG9neSByZWZlcmVuY2Ugd2FzIGdyYWJiZWQgc3VjY2Vzc2Z1bGx5CisgKiAqIDA6 IEBwb3J0IGlzIG5vIGxvbmdlciBpbiB0aGUgdG9wb2xvZ3ksIG5vIHJlZmVyZW5jZSB3YXMgZ3Jh YmJlZAorICovCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjaworZHJtX2RwX21zdF90b3BvbG9neV90 cnlfZ2V0X3BvcnQoc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcmV0ID0g a3JlZl9nZXRfdW5sZXNzX3plcm8oJnBvcnQtPnRvcG9sb2d5X2tyZWYpOworCisJaWYgKHJldCkK KwkJRFJNX0RFQlVHKCJwb3J0ICVwICglZClcbiIsIHBvcnQsCisJCQkgIGtyZWZfcmVhZCgmcG9y dC0+dG9wb2xvZ3lfa3JlZikpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkcm1fZHBf bXN0X3RvcG9sb2d5X2dldF9wb3J0KCkgLSBJbmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50 IG9mIGEgcG9ydAorICogQHBvcnQ6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfcG9ydCB0byBpbmNy ZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mCisgKgorICogSW5jcmVtZW50cyAmZHJtX2Rw X21zdF9wb3J0LnRvcG9sb2d5X3JlZmNvdW50IHdpdGhvdXQgY2hlY2tpbmcgd2hldGhlciBvcgor ICogbm90IGl0J3MgYWxyZWFkeSByZWFjaGVkIDAuIFRoaXMgaXMgb25seSB2YWxpZCB0byB1c2Ug aW4gc2NlbmFyaW9zIHdoZXJlCisgKiB5b3UgYXJlIGFscmVhZHkgZ3VhcmFudGVlZCB0byBoYXZl IGF0IGxlYXN0IG9uZSBhY3RpdmUgdG9wb2xvZ3kgcmVmZXJlbmNlCisgKiB0byBAcG9ydC4gT3Ro ZXJ3aXNlLCBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfcG9ydCgpIG11c3QgYmUgdXNlZC4K KyAqCisgKiBTZWUgYWxzbzoKKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9wb3J0KCkK KyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQoKQorICovCitzdGF0aWMgdm9pZCBkcm1f ZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpCit7 CisJV0FSTl9PTihrcmVmX3JlYWQoJnBvcnQtPnRvcG9sb2d5X2tyZWYpID09IDApOworCWtyZWZf Z2V0KCZwb3J0LT50b3BvbG9neV9rcmVmKTsKKwlEUk1fREVCVUcoInBvcnQgJXAgKCVkKVxuIiwg cG9ydCwga3JlZl9yZWFkKCZwb3J0LT50b3BvbG9neV9rcmVmKSk7Cit9CisKKy8qKgorICogZHJt X2RwX21zdF90b3BvbG9neV9wdXRfcG9ydCgpIC0gcmVsZWFzZSBhIHRvcG9sb2d5IHJlZmVyZW5j ZSB0byBhIHBvcnQKKyAqIEBwb3J0OiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgdG8gcmVs ZWFzZSB0aGUgdG9wb2xvZ3kgcmVmZXJlbmNlIGZyb20KKyAqCisgKiBSZWxlYXNlcyBhIHRvcG9s b2d5IHJlZmVyZW5jZSBmcm9tIEBwb3J0IGJ5IGRlY3JlbWVudGluZworICogJmRybV9kcF9tc3Rf cG9ydC50b3BvbG9neV9rcmVmLgorICoKKyAqIFNlZSBhbHNvOgorICogZHJtX2RwX21zdF90b3Bv bG9neV90cnlfZ2V0X3BvcnQoKQorICogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydCgpCisg Ki8KIHN0YXRpYyB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQoc3RydWN0IGRybV9k cF9tc3RfcG9ydCAqcG9ydCkKIHsKLQlrcmVmX3B1dCgmcG9ydC0+a3JlZiwgZHJtX2RwX2Rlc3Ry b3lfcG9ydCk7CisJRFJNX0RFQlVHKCJwb3J0ICVwICglZClcbiIsIHBvcnQsIGtyZWZfcmVhZCgm cG9ydC0+dG9wb2xvZ3lfa3JlZiktMSk7CisJa3JlZl9wdXQoJnBvcnQtPnRvcG9sb2d5X2tyZWYs IGRybV9kcF9kZXN0cm95X3BvcnQpOwogfQogCiBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfYnJh bmNoICoKQEAgLTk4MSwxMCArMTI4MCwxMCBAQCBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3Ri X3ZhbGlkYXRlZF9sb2NrZWQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLAogewogCXN0 cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7CiAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpy bXN0YjsKLQlpZiAodG9fZmluZCA9PSBtc3RiKSB7Ci0JCWtyZWZfZ2V0KCZtc3RiLT5rcmVmKTsK KworCWlmICh0b19maW5kID09IG1zdGIpCiAJCXJldHVybiBtc3RiOwotCX0KKwogCWxpc3RfZm9y X2VhY2hfZW50cnkocG9ydCwgJm1zdGItPnBvcnRzLCBuZXh0KSB7CiAJCWlmIChwb3J0LT5tc3Ri KSB7CiAJCQlybXN0YiA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGJfdmFsaWRhdGVkX2xv Y2tlZCgKQEAgLTEwMDEsMjUgKzEzMDAsMzIgQEAgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0 Yl92YWxpZGF0ZWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCiAJCQkJICAg ICAgIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikKIHsKIAlzdHJ1Y3QgZHJtX2RwX21z dF9icmFuY2ggKnJtc3RiID0gTlVMTDsKKwogCW11dGV4X2xvY2soJm1nci0+bG9jayk7Ci0JaWYg KG1nci0+bXN0X3ByaW1hcnkpCisJaWYgKG1nci0+bXN0X3ByaW1hcnkpIHsKIAkJcm1zdGIgPSBk cm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiX3ZhbGlkYXRlZF9sb2NrZWQoCiAJCSAgICBtZ3It Pm1zdF9wcmltYXJ5LCBtc3RiKTsKKworCQlpZiAocm1zdGIgJiYgIWRybV9kcF9tc3RfdG9wb2xv Z3lfdHJ5X2dldF9tc3RiKHJtc3RiKSkKKwkJCXJtc3RiID0gTlVMTDsKKwl9CiAJbXV0ZXhfdW5s b2NrKCZtZ3ItPmxvY2spOwogCXJldHVybiBybXN0YjsKIH0KIAotc3RhdGljIHN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQgKmRybV9kcF9tc3RfZ2V0X3BvcnRfcmVmX2xvY2tlZChzdHJ1Y3QgZHJtX2Rw X21zdF9icmFuY2ggKm1zdGIsIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnRvX2ZpbmQpCitzdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqCitkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0 X3ZhbGlkYXRlZF9sb2NrZWQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLAorCQkJCQkg ICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICp0b19maW5kKQogewogCXN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQsICptcG9ydDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJm1z dGItPnBvcnRzLCBuZXh0KSB7Ci0JCWlmIChwb3J0ID09IHRvX2ZpbmQpIHsKLQkJCWtyZWZfZ2V0 KCZwb3J0LT5rcmVmKTsKKwkJaWYgKHBvcnQgPT0gdG9fZmluZCkKIAkJCXJldHVybiBwb3J0Owot CQl9CisKIAkJaWYgKHBvcnQtPm1zdGIpIHsKLQkJCW1wb3J0ID0gZHJtX2RwX21zdF9nZXRfcG9y dF9yZWZfbG9ja2VkKHBvcnQtPm1zdGIsIHRvX2ZpbmQpOworCQkJbXBvcnQgPSBkcm1fZHBfbXN0 X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZF9sb2NrZWQoCisJCQkgICAgcG9ydC0+bXN0Yiwg dG9fZmluZCk7CiAJCQlpZiAobXBvcnQpCiAJCQkJcmV0dXJuIG1wb3J0OwogCQl9CkBAIC0xMDMy LDkgKzEzMzgsMTUgQEAgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQoc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCiAJCQkJICAgICAgIHN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcnBvcnQgPSBO VUxMOworCiAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsKLQlpZiAobWdyLT5tc3RfcHJpbWFyeSkK LQkJcnBvcnQgPSBkcm1fZHBfbXN0X2dldF9wb3J0X3JlZl9sb2NrZWQobWdyLT5tc3RfcHJpbWFy eSwgcG9ydCk7CisJaWYgKG1nci0+bXN0X3ByaW1hcnkpIHsKKwkJcnBvcnQgPSBkcm1fZHBfbXN0 X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZF9sb2NrZWQoCisJCSAgICBtZ3ItPm1zdF9wcmlt YXJ5LCBwb3J0KTsKKworCQlpZiAocnBvcnQgJiYgIWRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dl dF9wb3J0KHJwb3J0KSkKKwkJCXJwb3J0ID0gTlVMTDsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZtZ3It PmxvY2spOwogCXJldHVybiBycG9ydDsKIH0KQEAgLTEwNDIsMTEgKzEzNTQsMTIgQEAgZHJtX2Rw X21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyICptZ3IsCiBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqZHJtX2RwX2dldF9w b3J0KHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwgdTggcG9ydF9udW0pCiB7CiAJc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKKwlpbnQgcmV0OwogCiAJbGlzdF9mb3JfZWFjaF9l bnRyeShwb3J0LCAmbXN0Yi0+cG9ydHMsIG5leHQpIHsKIAkJaWYgKHBvcnQtPnBvcnRfbnVtID09 IHBvcnRfbnVtKSB7Ci0JCQlrcmVmX2dldCgmcG9ydC0+a3JlZik7Ci0JCQlyZXR1cm4gcG9ydDsK KwkJCXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9wb3J0KHBvcnQpOworCQkJcmV0 dXJuIHJldCA/IHBvcnQgOiBOVUxMOwogCQl9CiAJfQogCkBAIC0xMDk1LDYgKzE0MDgsMTEgQEAg c3RhdGljIGJvb2wgZHJtX2RwX3BvcnRfc2V0dXBfcGR0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQg KnBvcnQpCiAJCWlmIChwb3J0LT5tc3RiKSB7CiAJCQlwb3J0LT5tc3RiLT5tZ3IgPSBwb3J0LT5t Z3I7CiAJCQlwb3J0LT5tc3RiLT5wb3J0X3BhcmVudCA9IHBvcnQ7CisJCQkvKgorCQkJICogTWFr ZSBzdXJlIHRoaXMgcG9ydCdzIG1lbW9yeSBhbGxvY2F0aW9uIHN0YXlzCisJCQkgKiBhcm91bmQg dW50aWwgaXQncyBjaGlsZCBNU1RCIHJlbGVhc2VzIGl0CisJCQkgKi8KKwkJCWRybV9kcF9tc3Rf Z2V0X3BvcnRfbWFsbG9jKHBvcnQpOwogCiAJCQlzZW5kX2xpbmsgPSB0cnVlOwogCQl9CkBAIC0x MTU1LDE3ICsxNDczLDI2IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9hZGRfcG9ydChzdHJ1Y3QgZHJt X2RwX21zdF9icmFuY2ggKm1zdGIsCiAJYm9vbCBjcmVhdGVkID0gZmFsc2U7CiAJaW50IG9sZF9w ZHQgPSAwOwogCWludCBvbGRfZGRwcyA9IDA7CisKIAlwb3J0ID0gZHJtX2RwX2dldF9wb3J0KG1z dGIsIHBvcnRfbXNnLT5wb3J0X251bWJlcik7CiAJaWYgKCFwb3J0KSB7CiAJCXBvcnQgPSBremFs bG9jKHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAoIXBvcnQpCiAJCQlyZXR1cm47 Ci0JCWtyZWZfaW5pdCgmcG9ydC0+a3JlZik7CisJCWtyZWZfaW5pdCgmcG9ydC0+dG9wb2xvZ3lf a3JlZik7CisJCWtyZWZfaW5pdCgmcG9ydC0+bWFsbG9jX2tyZWYpOwogCQlwb3J0LT5wYXJlbnQg PSBtc3RiOwogCQlwb3J0LT5wb3J0X251bSA9IHBvcnRfbXNnLT5wb3J0X251bWJlcjsKIAkJcG9y dC0+bWdyID0gbXN0Yi0+bWdyOwogCQlwb3J0LT5hdXgubmFtZSA9ICJEUE1TVCI7CiAJCXBvcnQt PmF1eC5kZXYgPSBkZXYtPmRldjsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIG1lbW9yeSBh bGxvY2F0aW9uIGZvciBvdXIgcGFyZW50IGJyYW5jaCBzdGF5cworCQkgKiBhcm91bmQgdW50aWwg b3VyIG93biBtZW1vcnkgYWxsb2NhdGlvbiBpcyByZWxlYXNlZAorCQkgKi8KKwkJZHJtX2RwX21z dF9nZXRfbXN0Yl9tYWxsb2MobXN0Yik7CisKIAkJY3JlYXRlZCA9IHRydWU7CiAJfSBlbHNlIHsK IAkJb2xkX3BkdCA9IHBvcnQtPnBkdDsKQEAgLTExODUsNyArMTUxMiw3IEBAIHN0YXRpYyB2b2lk IGRybV9kcF9hZGRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsCiAJICAgZm9y IHRoaXMgbGlzdCAqLwogCWlmIChjcmVhdGVkKSB7CiAJCW11dGV4X2xvY2soJm1zdGItPm1nci0+ bG9jayk7Ci0JCWtyZWZfZ2V0KCZwb3J0LT5rcmVmKTsKKwkJZHJtX2RwX21zdF90b3BvbG9neV9n ZXRfcG9ydChwb3J0KTsKIAkJbGlzdF9hZGQoJnBvcnQtPm5leHQsICZtc3RiLT5wb3J0cyk7CiAJ CW11dGV4X3VubG9jaygmbXN0Yi0+bWdyLT5sb2NrKTsKIAl9CkBAIC0xMjEwLDggKzE1MzcsMTEg QEAgc3RhdGljIHZvaWQgZHJtX2RwX2FkZF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAq bXN0YiwKIAlpZiAoY3JlYXRlZCAmJiAhcG9ydC0+aW5wdXQpIHsKIAkJY2hhciBwcm9wcGF0aFsy NTVdOwogCi0JCWJ1aWxkX21zdF9wcm9wX3BhdGgobXN0YiwgcG9ydC0+cG9ydF9udW0sIHByb3Bw YXRoLCBzaXplb2YocHJvcHBhdGgpKTsKLQkJcG9ydC0+Y29ubmVjdG9yID0gKCptc3RiLT5tZ3It PmNicy0+YWRkX2Nvbm5lY3RvcikobXN0Yi0+bWdyLCBwb3J0LCBwcm9wcGF0aCk7CisJCWJ1aWxk X21zdF9wcm9wX3BhdGgobXN0YiwgcG9ydC0+cG9ydF9udW0sIHByb3BwYXRoLAorCQkJCSAgICBz aXplb2YocHJvcHBhdGgpKTsKKwkJcG9ydC0+Y29ubmVjdG9yID0gKCptc3RiLT5tZ3ItPmNicy0+ YWRkX2Nvbm5lY3RvcikobXN0Yi0+bWdyLAorCQkJCQkJCQkgICBwb3J0LAorCQkJCQkJCQkgICBw cm9wcGF0aCk7CiAJCWlmICghcG9ydC0+Y29ubmVjdG9yKSB7CiAJCQkvKiByZW1vdmUgaXQgZnJv bSB0aGUgcG9ydCBsaXN0ICovCiAJCQltdXRleF9sb2NrKCZtc3RiLT5tZ3ItPmxvY2spOwpAQCAt MTIyMSw2ICsxNTUxLDcgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2FkZF9wb3J0KHN0cnVjdCBkcm1f ZHBfbXN0X2JyYW5jaCAqbXN0YiwKIAkJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9y dCk7CiAJCQlnb3RvIG91dDsKIAkJfQorCiAJCWlmICgocG9ydC0+cGR0ID09IERQX1BFRVJfREVW SUNFX0RQX0xFR0FDWV9DT05WIHx8CiAJCSAgICAgcG9ydC0+cGR0ID09IERQX1BFRVJfREVWSUNF X1NTVF9TSU5LKSAmJgogCQkgICAgcG9ydC0+cG9ydF9udW0gPj0gRFBfTVNUX0xPR0lDQUxfUE9S VF8wKSB7CkBAIC0xMjc4LDcgKzE2MDksNyBAQCBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfYnJh bmNoICpkcm1fZHBfZ2V0X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBkcm1fZHBfbXN0Xwogewog CXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YjsKIAlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 ICpwb3J0OwotCWludCBpOworCWludCBpLCByZXQ7CiAJLyogZmluZCB0aGUgcG9ydCBieSBpdGVy YXRpbmcgZG93biAqLwogCiAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsKQEAgLTEzMDMsNyArMTYz NCw5IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKmRybV9kcF9nZXRfbXN0X2Jy YW5jaF9kZXZpY2Uoc3RydWN0IGRybV9kcF9tc3RfCiAJCQl9CiAJCX0KIAl9Ci0Ja3JlZl9nZXQo Jm1zdGItPmtyZWYpOworCXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiKG1z dGIpOworCWlmICghcmV0KQorCQltc3RiID0gTlVMTDsKIG91dDoKIAltdXRleF91bmxvY2soJm1n ci0+bG9jayk7CiAJcmV0dXJuIG1zdGI7CkBAIC0xMzMzLDE5ICsxNjY2LDIyIEBAIHN0YXRpYyBz dHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKmdldF9tc3RfYnJhbmNoX2RldmljZV9ieV9ndWlkX2hl bHBlcigKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5j aCAqZHJtX2RwX2dldF9tc3RfYnJhbmNoX2RldmljZV9ieV9ndWlkKAotCXN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLAotCXVpbnQ4X3QgKmd1aWQpCitzdGF0aWMgc3RydWN0IGRy bV9kcF9tc3RfYnJhbmNoICoKK2RybV9kcF9nZXRfbXN0X2JyYW5jaF9kZXZpY2VfYnlfZ3VpZChz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKKwkJCQkgICAgIHVpbnQ4X3QgKmd1 aWQpCiB7CiAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiOworCWludCByZXQ7CiAKIAkv KiBmaW5kIHRoZSBwb3J0IGJ5IGl0ZXJhdGluZyBkb3duICovCiAJbXV0ZXhfbG9jaygmbWdyLT5s b2NrKTsKIAogCW1zdGIgPSBnZXRfbXN0X2JyYW5jaF9kZXZpY2VfYnlfZ3VpZF9oZWxwZXIobWdy LT5tc3RfcHJpbWFyeSwgZ3VpZCk7Ci0KLQlpZiAobXN0YikKLQkJa3JlZl9nZXQoJm1zdGItPmty ZWYpOworCWlmIChtc3RiKSB7CisJCXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9t c3RiKG1zdGIpOworCQlpZiAoIXJldCkKKwkJCW1zdGIgPSBOVUxMOworCX0KIAogCW11dGV4X3Vu bG9jaygmbWdyLT5sb2NrKTsKIAlyZXR1cm4gbXN0YjsKQEAgLTEzODQsMTEgKzE3MjAsMTQgQEAg c3RhdGljIHZvaWQgZHJtX2RwX21zdF9saW5rX3Byb2JlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQogewogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyID0gY29udGFp bmVyX29mKHdvcmssIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciwgd29yayk7CiAJc3Ry dWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiOworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZt Z3ItPmxvY2spOwogCW1zdGIgPSBtZ3ItPm1zdF9wcmltYXJ5OwogCWlmIChtc3RiKSB7Ci0JCWty ZWZfZ2V0KCZtc3RiLT5rcmVmKTsKKwkJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0 X21zdGIobXN0Yik7CisJCWlmICghcmV0KQorCQkJbXN0YiA9IE5VTEw7CiAJfQogCW11dGV4X3Vu bG9jaygmbWdyLT5sb2NrKTsKIAlpZiAobXN0YikgewpAQCAtMTcxNiw4ICsyMDU1LDExIEBAIHN0 YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKmRybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRf cG9ydF9hbmRfbXN0YihzdHJ1Y3QKIAogCQlpZiAoZm91bmRfcG9ydCkgewogCQkJcm1zdGIgPSBm b3VuZF9wb3J0LT5wYXJlbnQ7Ci0JCQlrcmVmX2dldCgmcm1zdGItPmtyZWYpOwotCQkJKnBvcnRf bnVtID0gZm91bmRfcG9ydC0+cG9ydF9udW07CisJCQlpZiAoZHJtX2RwX21zdF90b3BvbG9neV90 cnlfZ2V0X21zdGIocm1zdGIpKSB7CisJCQkJKnBvcnRfbnVtID0gZm91bmRfcG9ydC0+cG9ydF9u dW07CisJCQl9IGVsc2UgeworCQkJCXJtc3RiID0gTlVMTDsKKwkJCX0KIAkJfQogCX0KIAltdXRl eF91bmxvY2soJm1nci0+bG9jayk7CkBAIC0xNzQyLDcgKzIwODQsOSBAQCBzdGF0aWMgaW50IGRy bV9kcF9wYXlsb2FkX3NlbmRfbXNnKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LAogCXBvcnRfbnVtID0gcG9ydC0+cG9ydF9udW07CiAJbXN0YiA9IGRybV9kcF9tc3RfdG9wb2xv Z3lfZ2V0X21zdGJfdmFsaWRhdGVkKG1nciwgcG9ydC0+cGFyZW50KTsKIAlpZiAoIW1zdGIpIHsK LQkJbXN0YiA9IGRybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRfcG9ydF9hbmRfbXN0YihtZ3IsIHBv cnQtPnBhcmVudCwgJnBvcnRfbnVtKTsKKwkJbXN0YiA9IGRybV9kcF9nZXRfbGFzdF9jb25uZWN0 ZWRfcG9ydF9hbmRfbXN0YihtZ3IsCisJCQkJCQkJICAgICAgIHBvcnQtPnBhcmVudCwKKwkJCQkJ CQkgICAgICAgJnBvcnRfbnVtKTsKIAogCQlpZiAoIW1zdGIpIHsKIAkJCWRybV9kcF9tc3RfdG9w b2xvZ3lfcHV0X3BvcnQocG9ydCk7CkBAIC0yMTY4LDcgKzI1MTIsNyBAQCBpbnQgZHJtX2RwX21z dF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n ciwgYm9vbCBtcwogCiAJCS8qIGdpdmUgdGhpcyB0aGUgbWFpbiByZWZlcmVuY2UgKi8KIAkJbWdy LT5tc3RfcHJpbWFyeSA9IG1zdGI7Ci0JCWtyZWZfZ2V0KCZtZ3ItPm1zdF9wcmltYXJ5LT5rcmVm KTsKKwkJZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YihtZ3ItPm1zdF9wcmltYXJ5KTsKIAog CQlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIobWdyLT5hdXgsIERQX01TVE1fQ1RSTCwKIAkJCQkJ CQkgRFBfTVNUX0VOIHwgRFBfVVBfUkVRX0VOIHwgRFBfVVBTVFJFQU1fSVNfU1JDKTsKQEAgLTI3 NDMsMTEgKzMwODcsMTEgQEAgYm9vbCBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkoc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCiAJcmV0ID0gZHJtX2RwX2luaXRfdmNwaShtZ3Is ICZwb3J0LT52Y3BpLCBwYm4sIHNsb3RzKTsKIAlpZiAocmV0KSB7CiAJCURSTV9ERUJVR19LTVMo ImZhaWxlZCB0byBpbml0IHZjcGkgc2xvdHM9JWQgbWF4PTYzIHJldD0lZFxuIiwKLQkJCQlESVZf Uk9VTkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpLCByZXQpOworCQkJICAgICAgRElWX1JPVU5EX1VQ KHBibiwgbWdyLT5wYm5fZGl2KSwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCURSTV9ERUJVR19L TVMoImluaXRpbmcgdmNwaSBmb3IgcGJuPSVkIHNsb3RzPSVkXG4iLAotCQkJcGJuLCBwb3J0LT52 Y3BpLm51bV9zbG90cyk7CisJCSAgICAgIHBibiwgcG9ydC0+dmNwaS5udW1fc2xvdHMpOwogCiAJ ZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsKIAlyZXR1cm4gdHJ1ZTsKQEAgLTI3 OTEsNyArMzEzNSw4IEBAIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3Rz KTsKICAqIEBtZ3I6IG1hbmFnZXIgZm9yIHRoaXMgcG9ydAogICogQHBvcnQ6IHVudmVyaWZpZWQg cG9ydCB0byBkZWFsbG9jYXRlIHZjcGkgZm9yCiAgKi8KLXZvaWQgZHJtX2RwX21zdF9kZWFsbG9j YXRlX3ZjcGkoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIHN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQgKnBvcnQpCit2b2lkIGRybV9kcF9tc3RfZGVhbGxvY2F0ZV92Y3BpKHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAorCQkJCXN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQpCiB7CiAJcG9ydCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRh dGVkKG1nciwgcG9ydCk7CiAJaWYgKCFwb3J0KQpAQCAtMzA4NiwxMyArMzQzMSw2IEBAIHN0YXRp YyB2b2lkIGRybV9kcF90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAltdXRleF91 bmxvY2soJm1nci0+cWxvY2spOwogfQogCi1zdGF0aWMgdm9pZCBkcm1fZHBfZnJlZV9tc3RfcG9y dChzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0ID0g Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQsIGtyZWYpOwotCWtyZWZf cHV0KCZwb3J0LT5wYXJlbnQtPmtyZWYsIGRybV9kcF9mcmVlX21zdF9icmFuY2hfZGV2aWNlKTsK LQlrZnJlZShwb3J0KTsKLX0KLQogc3RhdGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lfY29ubmVjdG9y X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciwgZGVzdHJveV9jb25uZWN0b3Jfd29yayk7CkBAIC0zMTEzLDcgKzM0NTEsNiBA QCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspCiAJCWxpc3RfZGVsKCZwb3J0LT5uZXh0KTsKIAkJbXV0ZXhfdW5sb2NrKCZt Z3ItPmRlc3Ryb3lfY29ubmVjdG9yX2xvY2spOwogCi0JCWtyZWZfaW5pdCgmcG9ydC0+a3JlZik7 CiAJCUlOSVRfTElTVF9IRUFEKCZwb3J0LT5uZXh0KTsKIAogCQltZ3ItPmNicy0+ZGVzdHJveV9j b25uZWN0b3IobWdyLCBwb3J0LT5jb25uZWN0b3IpOwpAQCAtMzEyNyw3ICszNDY0LDcgQEAgc3Rh dGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lfY29ubmVjdG9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQogCQkJZHJtX2RwX21zdF9wdXRfcGF5bG9hZF9pZChtZ3IsIHBvcnQtPnZjcGkudmNw aSk7CiAJCX0KIAotCQlrcmVmX3B1dCgmcG9ydC0+a3JlZiwgZHJtX2RwX2ZyZWVfbXN0X3BvcnQp OworCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3J0KTsKIAkJc2VuZF9ob3RwbHVnID0g dHJ1ZTsKIAl9CiAJaWYgKHNlbmRfaG90cGx1ZykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bV9kcF9tc3RfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCmluZGV4 IDM3MWNjMjgxNjQ3Ny4uOGVjYTVmMjkyNDJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1f ZHBfbXN0X2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKQEAg LTQ0LDcgKzQ0LDYgQEAgc3RydWN0IGRybV9kcF92Y3BpIHsKIAogLyoqCiAgKiBzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0IC0gTVNUIHBvcnQKLSAqIEBrcmVmOiByZWZlcmVuY2UgY291bnQgZm9yIHRo aXMgcG9ydC4KICAqIEBwb3J0X251bTogcG9ydCBudW1iZXIKICAqIEBpbnB1dDogaWYgdGhpcyBw b3J0IGlzIGFuIGlucHV0IHBvcnQuCiAgKiBAbWNzOiBtZXNzYWdlIGNhcGFiaWxpdHkgc3RhdHVz IC0gRFAgMS4yIHNwZWMuCkBAIC02Nyw3ICs2NiwxOCBAQCBzdHJ1Y3QgZHJtX2RwX3ZjcGkgewog ICogaW4gdGhlIE1TVCB0b3BvbG9neS4KICAqLwogc3RydWN0IGRybV9kcF9tc3RfcG9ydCB7Ci0J c3RydWN0IGtyZWYga3JlZjsKKwkvKioKKwkgKiBAdG9wb2xvZ3lfa3JlZjogcmVmY291bnQgZm9y IHRoaXMgcG9ydCdzIGxpZmV0aW1lIGluIHRoZSB0b3BvbG9neSwKKwkgKiBvbmx5IHRoZSBEUCBN U1QgaGVscGVycyBzaG91bGQgbmVlZCB0byB0b3VjaCB0aGlzCisJICovCisJc3RydWN0IGtyZWYg dG9wb2xvZ3lfa3JlZjsKKworCS8qKgorCSAqIEBtYWxsb2Nfa3JlZjogcmVmY291bnQgZm9yIHRo ZSBtZW1vcnkgYWxsb2NhdGlvbiBjb250YWluaW5nIHRoaXMKKwkgKiBzdHJ1Y3R1cmUuIFNlZSBk cm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYygpIGFuZAorCSAqIGRybV9kcF9tc3RfcHV0X3BvcnRf bWFsbG9jKCkuCisJICovCisJc3RydWN0IGtyZWYgbWFsbG9jX2tyZWY7CiAKIAl1OCBwb3J0X251 bTsKIAlib29sIGlucHV0OwpAQCAtMTAyLDcgKzExMiw2IEBAIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgewogCiAvKioKICAqIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAtIE1TVCBicmFuY2ggZGV2 aWNlLgotICogQGtyZWY6IHJlZmVyZW5jZSBjb3VudCBmb3IgdGhpcyBwb3J0LgogICogQHJhZDog UmVsYXRpdmUgQWRkcmVzcyB0byB0YWxrIHRvIHRoaXMgYnJhbmNoIGRldmljZS4KICAqIEBsY3Q6 IExpbmsgY291bnQgdG90YWwgdG8gdGFsayB0byB0aGlzIGJyYW5jaCBkZXZpY2UuCiAgKiBAbnVt X3BvcnRzOiBudW1iZXIgb2YgcG9ydHMgb24gdGhlIGJyYW5jaC4KQEAgLTEyMSw3ICsxMzAsMTkg QEAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCB7CiAgKiB0byBkb3duc3RyZWFtIHBvcnQgb2YgcGFy ZW50IGJyYW5jaGVzLgogICovCiBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggewotCXN0cnVjdCBr cmVmIGtyZWY7CisJLyoqCisJICogQHRvcG9sb2d5X2tyZWY6IHJlZmNvdW50IGZvciB0aGlzIGJy YW5jaCBkZXZpY2UncyBsaWZldGltZSBpbiB0aGUKKwkgKiB0b3BvbG9neSwgb25seSB0aGUgRFAg TVNUIGhlbHBlcnMgc2hvdWxkIG5lZWQgdG8gdG91Y2ggdGhpcworCSAqLworCXN0cnVjdCBrcmVm IHRvcG9sb2d5X2tyZWY7CisKKwkvKioKKwkgKiBAbWFsbG9jX2tyZWY6IHJlZmNvdW50IGZvciB0 aGUgbWVtb3J5IGFsbG9jYXRpb24gY29udGFpbmluZyB0aGlzCisJICogc3RydWN0dXJlLiBTZWUg ZHJtX2RwX21zdF9nZXRfbXN0Yl9tYWxsb2MoKSBhbmQKKwkgKiBkcm1fZHBfbXN0X3B1dF9tc3Ri X21hbGxvYygpLgorCSAqLworCXN0cnVjdCBrcmVmIG1hbGxvY19rcmVmOworCiAJdTggcmFkWzhd OwogCXU4IGxjdDsKIAlpbnQgbnVtX3BvcnRzOwpAQCAtNjI2LDQgKzY0Nyw3IEBAIGludCBkcm1f ZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsCiBpbnQgZHJtX2RwX3NlbmRfcG93ZXJfdXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IgKm1nciwKIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9v bCBwb3dlcl91cCk7CiAKK3ZvaWQgZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2Moc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydCk7Cit2b2lkIGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKHN0 cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOworCiAjZW5kaWYKLS0gCjIuMTkuMgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==