From mboxrd@z Thu Jan 1 00:00:00 1970 From: Evgeniy Polyakov Subject: Asynchronous crypto layer. Reincarnation #1. Date: Tue, 14 Dec 2004 19:03:56 +0300 Message-ID: <1103040236.3430.54.camel@uganda> Reply-To: johnpol@2ka.mipt.ru Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-84FmUi6+bypRF6VRBLEL" Cc: netdev@oss.sgi.com, cryptoapi@lists.logix.cz, jamal , Michal Ludvig Return-path: To: James Morris Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com List-Id: netdev.vger.kernel.org --=-84FmUi6+bypRF6VRBLEL Content-Type: multipart/mixed; boundary="=-6hXhvAybrmqrLjuzQFoX" --=-6hXhvAybrmqrLjuzQFoX Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Changed locking schema, coding style, symbol exporting. HIFN driver is ready and is waiting the latest test. It works several hours on a 4-way system without any problem (test crypto_provider and crypto consumer are also in patch). BTW, little note: System crypts with 128 bits aes in ecb mode, since only one CPU in a time performs crypto operations(crypto_provider is a wrapper over synchronous crypto layer) numbers are not so exciting: about 250-350 sessions per second, each one works with 32 bytes block. Test crypto consumer injects new session each 3 milliseconds. An interesting note about linux work_queues: when I inject new crypto_session each 2 msecs - work_queue's threads for 2 of 4 CPUs are loaded about the same 3-10% of the CPU time, but when I inject sessions each 3 or 1 msec - only one queue's thread gets all sessions callbacks and takes about 100% of the CPU time. With 2msec delay I get about 500 sessions per second, with 1msec - little more than 1000. pcix$ cat /sys/class/acrypto/crypto_provider/scompleted && sleep 1 &&cat /sys/class/acrypto/crypto_provider/scompleted 7044717 7045728 Please test, review and comment. Signed-off-by: Evgeniy Polyakov --=20 Evgeniy Polyakov Crash is better than data corruption -- Arthur Grabowski --=-6hXhvAybrmqrLjuzQFoX Content-Disposition: attachment; filename=acrypto.patch Content-Type: text/x-patch; name=acrypto.patch; charset=KOI8-R Content-Transfer-Encoding: base64 ZGlmZiAtTnJ1IC90bXAvZW1wdHkvYWNyeXB0by5oIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8v YWNyeXB0by5oDQotLS0gL3RtcC9lbXB0eS9hY3J5cHRvLmgJMTk3MC0wMS0wMSAwMzowMDowMC4w MDAwMDAwMDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvL2FjcnlwdG8uaAky MDA0LTEyLTE0IDE4OjUzOjExLjAwMDAwMDAwMCArMDMwMA0KQEAgLTAsMCArMSwyMjYgQEANCisv Kg0KKyAqIAlhY3J5cHRvLmgNCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBv bHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1Pg0KKyAqIA0KKyAqDQorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkN CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQ0KKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT dWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0ENCisgKi8NCisNCisjaWZuZGVmIF9f QUNSWVBUT19IDQorI2RlZmluZSBfX0FDUllQVE9fSA0KKw0KKyNkZWZpbmUgU0NBQ0hFX05BTUVM RU4JCTMyDQorDQorc3RydWN0IGNyeXB0b19zZXNzaW9uX2luaXRpYWxpemVyOw0KK3N0cnVjdCBj cnlwdG9fZGF0YTsNCit0eXBlZGVmIHZvaWQgKCpjcnlwdG9fY2FsbGJhY2tfdCkgKHN0cnVjdCBj cnlwdG9fc2Vzc2lvbl9pbml0aWFsaXplciAqLA0KKwkJCQkgICBzdHJ1Y3QgY3J5cHRvX2RhdGEg Kik7DQorDQorZXh0ZXJuIHZvaWQgY3J5cHRvX3dha2VfbGIodm9pZCk7DQorDQorI2RlZmluZSBT RVNTSU9OX0NPTVBMRVRFRAkoMTw8MTUpDQorI2RlZmluZSBTRVNTSU9OX0ZJTklTSEVECSgxPDwx NCkNCisjZGVmaW5lIFNFU1NJT05fU1RBUlRFRAkJKDE8PDEzKQ0KKyNkZWZpbmUgU0VTU0lPTl9Q Uk9DRVNTRUQJKDE8PDEyKQ0KKyNkZWZpbmUgU0VTU0lPTl9CSU5ERUQJCSgxPDwxMSkNCisjZGVm aW5lIFNFU1NJT05fQlJPS0VOCQkoMTw8MTApDQorDQorI2RlZmluZSBzZXNzaW9uX2NvbXBsZXRl ZChzKQkocy0+Y2kuZmxhZ3MgJiBTRVNTSU9OX0NPTVBMRVRFRCkNCisjZGVmaW5lIGNvbXBsZXRl X3Nlc3Npb24ocykJZG8ge3MtPmNpLmZsYWdzIHw9IFNFU1NJT05fQ09NUExFVEVEO30gd2hpbGUo MCkNCisjZGVmaW5lIHVuY29tcGxldGVfc2Vzc2lvbihzKQlkbyB7cy0+Y2kuZmxhZ3MgJj0gflNF U1NJT05fQ09NUExFVEVEO30gd2hpbGUgKDApDQorDQorI2RlZmluZSBzZXNzaW9uX2ZpbmlzaGVk KHMpCShzLT5jaS5mbGFncyAmIFNFU1NJT05fRklOSVNIRUQpDQorI2RlZmluZSBmaW5pc2hfc2Vz c2lvbihzKQlkbyB7cy0+Y2kuZmxhZ3MgfD0gU0VTU0lPTl9GSU5JU0hFRDt9IHdoaWxlKDApDQor I2RlZmluZSB1bmZpbmlzaF9zZXNzaW9uKHMpCWRvIHtzLT5jaS5mbGFncyAmPSB+U0VTU0lPTl9G SU5JU0hFRDt9IHdoaWxlICgwKQ0KKw0KKyNkZWZpbmUgc2Vzc2lvbl9zdGFydGVkKHMpCShzLT5j aS5mbGFncyAmIFNFU1NJT05fU1RBUlRFRCkNCisjZGVmaW5lIHN0YXJ0X3Nlc3Npb24ocykJZG8g e3MtPmNpLmZsYWdzIHw9IFNFU1NJT05fU1RBUlRFRDt9IHdoaWxlKDApDQorI2RlZmluZSB1bnN0 YXJ0X3Nlc3Npb24ocykJZG8ge3MtPmNpLmZsYWdzICY9IH5TRVNTSU9OX1NUQVJURUQ7fSB3aGls ZSAoMCkNCisNCisjZGVmaW5lIHNlc3Npb25faXNfcHJvY2Vzc2VkKHMpCQkocy0+Y2kuZmxhZ3Mg JiBTRVNTSU9OX1BST0NFU1NFRCkNCisjZGVmaW5lIHN0YXJ0X3Byb2Nlc3Nfc2Vzc2lvbihzKQlk byB7cy0+Y2kuZmxhZ3MgfD0gU0VTU0lPTl9QUk9DRVNTRUQ7IHMtPmNpLnB0aW1lID0gamlmZmll czt9IHdoaWxlKDApDQorI2RlZmluZSBzdG9wX3Byb2Nlc3Nfc2Vzc2lvbihzKQkJZG8ge3MtPmNp LmZsYWdzICY9IH5TRVNTSU9OX1BST0NFU1NFRDsgcy0+Y2kucHRpbWUgPSBqaWZmaWVzIC0gcy0+ Y2kucHRpbWU7IGNyeXB0b193YWtlX2xiKCk7fSB3aGlsZSAoMCkNCisNCisjZGVmaW5lIHNlc3Np b25fYmluZGVkKHMpCShzLT5jaS5mbGFncyAmIFNFU1NJT05fQklOREVEKQ0KKyNkZWZpbmUgYmlu ZF9zZXNzaW9uKHMpCQlkbyB7cy0+Y2kuZmxhZ3MgfD0gU0VTU0lPTl9CSU5ERUQ7fSB3aGlsZSgw KQ0KKyNkZWZpbmUgdW5iaW5kX3Nlc3Npb24ocykJZG8ge3MtPmNpLmZsYWdzICY9IH5TRVNTSU9O X0JJTkRFRDt9IHdoaWxlICgwKQ0KKyNkZWZpbmUgc2NpX2JpbmRlZChjaSkJCShjaS0+ZmxhZ3Mg JiBTRVNTSU9OX0JJTkRFRCkNCisNCisjZGVmaW5lIHNlc3Npb25fYnJva2VuKHMpCShzLT5jaS5m bGFncyAmIFNFU1NJT05fQlJPS0VOKQ0KKyNkZWZpbmUgYnJva2Vfc2Vzc2lvbihzKQlkbyB7cy0+ Y2kuZmxhZ3MgfD0gU0VTU0lPTl9CUk9LRU47fSB3aGlsZSgwKQ0KKyNkZWZpbmUgdW5icm9rZV9z ZXNzaW9uKHMpCWRvIHtzLT5jaS5mbGFncyAmPSB+U0VTU0lPTl9CUk9LRU47fSB3aGlsZSAoMCkN CisNCitzdHJ1Y3QgY3J5cHRvX2RldmljZV9zdGF0IHsNCisJX191NjQgc2NvbXBsZXRlZDsNCisJ X191NjQgc2ZpbmlzaGVkOw0KKwlfX3U2NCBzc3RhcnRlZDsNCisJX191NjQga21lbV9mYWlsZWQ7 DQorfTsNCisNCisjaWZkZWYgX19LRVJORUxfXw0KKw0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5o Pg0KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCisj aW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQor I2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPg0KKw0KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxp c3QuaD4NCisNCisjZGVmaW5lIERFQlVHDQorI2lmZGVmIERFQlVHDQorI2RlZmluZSBkcHJpbnRr KGYsIGEuLi4pIHByaW50aygiJWQgIiBmLCBzbXBfcHJvY2Vzc29yX2lkKCksICMjYSkNCisjZWxz ZQ0KKyNkZWZpbmUgZHByaW50ayhmLCBhLi4uKQ0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgQ1JZUFRP X01BWF9QUklWX1NJWkUJMTAyNA0KKw0KKyNkZWZpbmUgREVWSUNFX0JST0tFTgkJKDE8PDApDQor DQorI2RlZmluZSBkZXZpY2VfYnJva2VuKGRldikJKGRldi0+ZmxhZ3MgJiBERVZJQ0VfQlJPS0VO KQ0KKyNkZWZpbmUgYnJva2VfZGV2aWNlKGRldikJZG8ge2Rldi0+ZmxhZ3MgfD0gREVWSUNFX0JS T0tFTjt9IHdoaWxlKDApDQorI2RlZmluZSByZXBhaXJfZGV2aWNlKGRldikJZG8ge2Rldi0+Zmxh Z3MgJj0gfkRFVklDRV9CUk9LRU47fSB3aGlsZSgwKQ0KKw0KK3N0cnVjdCBjcnlwdG9fY2FwYWJp bGl0eSB7DQorCXUxNiAJCQlvcGVyYXRpb247DQorCXUxNiAJCQl0eXBlOw0KKwl1MTYgCQkJbW9k ZTsNCisJdTE2IAkJCXFsZW47DQorCXU2NCAJCQlwdGltZTsNCisJdTY0IAkJCXNjb21wOw0KK307 DQorDQorc3RydWN0IGNyeXB0b19zZXNzaW9uX2luaXRpYWxpemVyIHsNCisJdTE2IAkJCW9wZXJh dGlvbjsNCisJdTE2IAkJCXR5cGU7DQorCXUxNiAJCQltb2RlOw0KKwl1MTYgCQkJcHJpb3JpdHk7 DQorDQorCXU2NCAJCQlpZDsNCisJdTY0IAkJCWRldl9pZDsNCisNCisJdTMyIAkJCWZsYWdzOw0K Kw0KKwl1MzIgCQkJYmRldjsNCisNCisJdTY0IAkJCXB0aW1lOw0KKw0KKwljcnlwdG9fY2FsbGJh Y2tfdCAJY2FsbGJhY2s7DQorfTsNCisNCitzdHJ1Y3QgY3J5cHRvX2RhdGEgew0KKwlpbnQgCQkJ c2dfc3JjX251bTsNCisJc3RydWN0CQkJc2NhdHRlcmxpc3Qgc2dfc3JjOw0KKwlzdHJ1Y3QJCQlz Y2F0dGVybGlzdCBzZ19kc3Q7DQorCXN0cnVjdAkJCXNjYXR0ZXJsaXN0IHNnX2tleTsNCisJc3Ry dWN0CQkJc2NhdHRlcmxpc3Qgc2dfaXY7DQorDQorCXZvaWQgCQkJKnByaXY7DQorCXVuc2lnbmVk IGludCAJCXByaXZfc2l6ZTsNCit9Ow0KKw0KK3N0cnVjdCBjcnlwdG9fZGV2aWNlIHsNCisJY2hh ciAJCQluYW1lW1NDQUNIRV9OQU1FTEVOXTsNCisNCisJc3BpbmxvY2tfdCAJCXNlc3Npb25fbG9j azsNCisJc3RydWN0IGxpc3RfaGVhZCAJc2Vzc2lvbl9saXN0Ow0KKw0KKwl1NjQgCQkJc2lkOw0K KwlzcGlubG9ja190IAkJbG9jazsNCisNCisJYXRvbWljX3QgCQlyZWZjbnQ7DQorDQorCXUzMiAJ CQlmbGFnczsNCisNCisJdTMyIAkJCWlkOw0KKw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIAljZGV2X2Vu dHJ5Ow0KKw0KKwl2b2lkIAkJCSgqZGF0YV9yZWFkeSkoc3RydWN0IGNyeXB0b19kZXZpY2UgKik7 DQorDQorCXN0cnVjdCBkZXZpY2VfZHJpdmVyIAkqZHJpdmVyOw0KKwlzdHJ1Y3QgZGV2aWNlIAkJ ZGV2aWNlOw0KKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlIAljbGFzc19kZXZpY2U7DQorCXN0cnVjdCBj b21wbGV0aW9uIAlkZXZfcmVsZWFzZWQ7DQorDQorCXNwaW5sb2NrX3QgCQlzdGF0X2xvY2s7DQor CXN0cnVjdCBjcnlwdG9fZGV2aWNlX3N0YXQgc3RhdDsNCisNCisJc3RydWN0IGNyeXB0b19jYXBh YmlsaXR5ICpjYXA7DQorCWludCAJCQljYXBfbnVtYmVyOw0KKw0KKwl2b2lkIAkJCSpwcml2Ow0K K307DQorDQorc3RydWN0IGNyeXB0b19yb3V0ZV9oZWFkIHsNCisJc3RydWN0IGNyeXB0b19yb3V0 ZSAJKm5leHQ7DQorCXN0cnVjdCBjcnlwdG9fcm91dGUgCSpwcmV2Ow0KKw0KKwlfX3UzMiAJCQlx bGVuOw0KKwlzcGlubG9ja190IAkJbG9jazsNCit9Ow0KKw0KK3N0cnVjdCBjcnlwdG9fcm91dGUg ew0KKwlzdHJ1Y3QgY3J5cHRvX3JvdXRlIAkqbmV4dDsNCisJc3RydWN0IGNyeXB0b19yb3V0ZSAJ KnByZXY7DQorDQorCXN0cnVjdCBjcnlwdG9fcm91dGVfaGVhZCAqbGlzdDsNCisJc3RydWN0IGNy eXB0b19kZXZpY2UgCSpkZXY7DQorDQorCXN0cnVjdCBjcnlwdG9fc2Vzc2lvbl9pbml0aWFsaXpl ciBjaTsNCit9Ow0KKw0KK3N0cnVjdCBjcnlwdG9fc2Vzc2lvbiB7DQorCXN0cnVjdCBsaXN0X2hl YWQgCWRldl9xdWV1ZV9lbnRyeTsNCisJc3RydWN0IGxpc3RfaGVhZAltYWluX3F1ZXVlX2VudHJ5 Ow0KKw0KKwlzdHJ1Y3QgY3J5cHRvX3Nlc3Npb25faW5pdGlhbGl6ZXIgY2k7DQorDQorCXN0cnVj dCBjcnlwdG9fZGF0YSAJZGF0YTsNCisNCisJc3BpbmxvY2tfdCAJCWxvY2s7DQorDQorCXN0cnVj dCB3b3JrX3N0cnVjdCAJd29yazsNCisNCisJc3RydWN0IGNyeXB0b19yb3V0ZV9oZWFkIHJvdXRl X2xpc3Q7DQorfTsNCisNCitzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24gKmNyeXB0b19zZXNzaW9uX2Fs bG9jKHN0cnVjdCBjcnlwdG9fc2Vzc2lvbl9pbml0aWFsaXplciAqLCBzdHJ1Y3QgY3J5cHRvX2Rh dGEgKik7DQorc3RydWN0IGNyeXB0b19zZXNzaW9uICpjcnlwdG9fc2Vzc2lvbl9jcmVhdGUoc3Ry dWN0IGNyeXB0b19zZXNzaW9uX2luaXRpYWxpemVyICosIHN0cnVjdCBjcnlwdG9fZGF0YSAqKTsN Cit2b2lkIGNyeXB0b19zZXNzaW9uX2FkZChzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24gKik7DQordm9p ZCBjcnlwdG9fc2Vzc2lvbl9kZXF1ZXVlX21haW4oc3RydWN0IGNyeXB0b19zZXNzaW9uICopOw0K K3ZvaWQgX19jcnlwdG9fc2Vzc2lvbl9kZXF1ZXVlX21haW4oc3RydWN0IGNyeXB0b19zZXNzaW9u ICopOw0KK3ZvaWQgX19jcnlwdG9fc2Vzc2lvbl9kZXF1ZXVlX3JvdXRlKHN0cnVjdCBjcnlwdG9f c2Vzc2lvbiAqKTsNCit2b2lkIGNyeXB0b19zZXNzaW9uX2RlcXVldWVfcm91dGUoc3RydWN0IGNy eXB0b19zZXNzaW9uICopOw0KKw0KK3ZvaWQgY3J5cHRvX2RldmljZV9nZXQoc3RydWN0IGNyeXB0 b19kZXZpY2UgKik7DQordm9pZCBjcnlwdG9fZGV2aWNlX3B1dChzdHJ1Y3QgY3J5cHRvX2Rldmlj ZSAqKTsNCitzdHJ1Y3QgY3J5cHRvX2RldmljZSAqY3J5cHRvX2RldmljZV9nZXRfbmFtZShjaGFy ICopOw0KKw0KK2ludCBfX2NyeXB0b19kZXZpY2VfYWRkKHN0cnVjdCBjcnlwdG9fZGV2aWNlICop Ow0KK2ludCBjcnlwdG9fZGV2aWNlX2FkZChzdHJ1Y3QgY3J5cHRvX2RldmljZSAqKTsNCit2b2lk IF9fY3J5cHRvX2RldmljZV9yZW1vdmUoc3RydWN0IGNyeXB0b19kZXZpY2UgKik7DQordm9pZCBj cnlwdG9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgY3J5cHRvX2RldmljZSAqKTsNCitpbnQgbWF0Y2hf aW5pdGlhbGl6ZXIoc3RydWN0IGNyeXB0b19kZXZpY2UgKiwgc3RydWN0IGNyeXB0b19zZXNzaW9u X2luaXRpYWxpemVyICopOw0KK2ludCBfX21hdGNoX2luaXRpYWxpemVyKHN0cnVjdCBjcnlwdG9f Y2FwYWJpbGl0eSAqLCBzdHJ1Y3QgY3J5cHRvX3Nlc3Npb25faW5pdGlhbGl6ZXIgKik7DQorDQor dm9pZCBjcnlwdG9fc2Vzc2lvbl9pbnNlcnRfbWFpbihzdHJ1Y3QgY3J5cHRvX2RldmljZSAqZGV2 LCBzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24gKnMpOw0KK3ZvaWQgY3J5cHRvX3Nlc3Npb25faW5zZXJ0 KHN0cnVjdCBjcnlwdG9fZGV2aWNlICpkZXYsIHN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqcyk7DQor DQorI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8NCisjZW5kaWYJCQkJLyogX19BQ1JZUFRPX0gg Ki8NCmRpZmYgLU5ydSAvdG1wL2VtcHR5Ly5hcmNoLWlkcy9hY3J5cHRvLmguaWQgbGludXgtMi42 L2RyaXZlcnMvYWNyeXB0by8uYXJjaC1pZHMvYWNyeXB0by5oLmlkDQotLS0gL3RtcC9lbXB0eS8u YXJjaC1pZHMvYWNyeXB0by5oLmlkCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAw DQorKysgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by8uYXJjaC1pZHMvYWNyeXB0by5oLmlkCTIw MDQtMTItMTQgMTc6NTA6MDQuMDAwMDAwMDAwICswMzAwDQpAQCAtMCwwICsxIEBADQorRXZnZW5p eSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4gU3VuIE9jdCAgMyAyMDozMzoyNSAyMDA0 IDI5NTcuMA0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvLmFyY2gtaWRzL2NvbnN1bWVyLmMuaWQgbGlu dXgtMi42L2RyaXZlcnMvYWNyeXB0by8uYXJjaC1pZHMvY29uc3VtZXIuYy5pZA0KLS0tIC90bXAv ZW1wdHkvLmFyY2gtaWRzL2NvbnN1bWVyLmMuaWQJMTk3MC0wMS0wMSAwMzowMDowMC4wMDAwMDAw MDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvLy5hcmNoLWlkcy9jb25zdW1l ci5jLmlkCTIwMDQtMTItMTQgMTc6NTA6MDQuMDAwMDAwMDAwICswMzAwDQpAQCAtMCwwICsxIEBA DQorRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4gV2VkIE9jdCAgNiAwMjoz NDowNCAyMDA0IDQ5MDIuMA0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvLmFyY2gtaWRzL2NyeXB0b19j b25uLmMuaWQgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by8uYXJjaC1pZHMvY3J5cHRvX2Nvbm4u Yy5pZA0KLS0tIC90bXAvZW1wdHkvLmFyY2gtaWRzL2NyeXB0b19jb25uLmMuaWQJMTk3MC0wMS0w MSAwMzowMDowMC4wMDAwMDAwMDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRv Ly5hcmNoLWlkcy9jcnlwdG9fY29ubi5jLmlkCTIwMDQtMTItMTQgMTc6NTA6MDQuMDAwMDAwMDAw ICswMzAwDQpAQCAtMCwwICsxIEBADQorRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlw dC5ydT4gV2VkIE9jdCAgNiAwMzoxOTo0NCAyMDA0IDU1NTguMA0KZGlmZiAtTnJ1IC90bXAvZW1w dHkvLmFyY2gtaWRzL2NyeXB0b19jb25uLmguaWQgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by8u YXJjaC1pZHMvY3J5cHRvX2Nvbm4uaC5pZA0KLS0tIC90bXAvZW1wdHkvLmFyY2gtaWRzL2NyeXB0 b19jb25uLmguaWQJMTk3MC0wMS0wMSAwMzowMDowMC4wMDAwMDAwMDAgKzAzMDANCisrKyBsaW51 eC0yLjYvZHJpdmVycy9hY3J5cHRvLy5hcmNoLWlkcy9jcnlwdG9fY29ubi5oLmlkCTIwMDQtMTIt MTQgMTc6NTA6MDQuMDAwMDAwMDAwICswMzAwDQpAQCAtMCwwICsxIEBADQorRXZnZW5peSBQb2x5 YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4gV2VkIE9jdCAgNiAwMzoxOTo0NCAyMDA0IDU1NTgu MQ0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvLmFyY2gtaWRzL2NyeXB0b19kZWYuaC5pZCBsaW51eC0y LjYvZHJpdmVycy9hY3J5cHRvLy5hcmNoLWlkcy9jcnlwdG9fZGVmLmguaWQNCi0tLSAvdG1wL2Vt cHR5Ly5hcmNoLWlkcy9jcnlwdG9fZGVmLmguaWQJMTk3MC0wMS0wMSAwMzowMDowMC4wMDAwMDAw MDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvLy5hcmNoLWlkcy9jcnlwdG9f ZGVmLmguaWQJMjAwNC0xMi0xNCAxNzo1MDowNC4wMDAwMDAwMDAgKzAzMDANCkBAIC0wLDAgKzEg QEANCitFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PiBUdWUgT2N0IDI2IDIw OjI2OjUzIDIwMDQgMjkwMy4wDQpkaWZmIC1OcnUgL3RtcC9lbXB0eS8uYXJjaC1pZHMvY3J5cHRv X2Rldi5jLmlkIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vLmFyY2gtaWRzL2NyeXB0b19kZXYu Yy5pZA0KLS0tIC90bXAvZW1wdHkvLmFyY2gtaWRzL2NyeXB0b19kZXYuYy5pZAkxOTcwLTAxLTAx IDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8v LmFyY2gtaWRzL2NyeXB0b19kZXYuYy5pZAkyMDA0LTEyLTE0IDE3OjUwOjA0LjAwMDAwMDAwMCAr MDMwMA0KQEAgLTAsMCArMSBAQA0KK0V2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQu cnU+IFN1biBPY3QgIDMgMjI6Mjc6MTMgMjAwNCA0MjExLjANCmRpZmYgLU5ydSAvdG1wL2VtcHR5 Ly5hcmNoLWlkcy9jcnlwdG9fbGIuYy5pZCBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvLy5hcmNo LWlkcy9jcnlwdG9fbGIuYy5pZA0KLS0tIC90bXAvZW1wdHkvLmFyY2gtaWRzL2NyeXB0b19sYi5j LmlkCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42L2Ry aXZlcnMvYWNyeXB0by8uYXJjaC1pZHMvY3J5cHRvX2xiLmMuaWQJMjAwNC0xMi0xNCAxNzo1MDow NC4wMDAwMDAwMDAgKzAzMDANCkBAIC0wLDAgKzEgQEANCitFdmdlbml5IFBvbHlha292IDxqb2hu cG9sQDJrYS5taXB0LnJ1PiBTdW4gT2N0ICAzIDIyOjI3OjA5IDIwMDQgNDIxMC4wDQpkaWZmIC1O cnUgL3RtcC9lbXB0eS8uYXJjaC1pZHMvY3J5cHRvX2xiLmguaWQgbGludXgtMi42L2RyaXZlcnMv YWNyeXB0by8uYXJjaC1pZHMvY3J5cHRvX2xiLmguaWQNCi0tLSAvdG1wL2VtcHR5Ly5hcmNoLWlk cy9jcnlwdG9fbGIuaC5pZAkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysr IGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vLmFyY2gtaWRzL2NyeXB0b19sYi5oLmlkCTIwMDQt MTItMTQgMTc6NTA6MDQuMDAwMDAwMDAwICswMzAwDQpAQCAtMCwwICsxIEBADQorRXZnZW5peSBQ b2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4gU3VuIE9jdCAgMyAyMjoyNzowOSAyMDA0IDQy MTAuMQ0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvLmFyY2gtaWRzL2NyeXB0b19tYWluLmMuaWQgbGlu dXgtMi42L2RyaXZlcnMvYWNyeXB0by8uYXJjaC1pZHMvY3J5cHRvX21haW4uYy5pZA0KLS0tIC90 bXAvZW1wdHkvLmFyY2gtaWRzL2NyeXB0b19tYWluLmMuaWQJMTk3MC0wMS0wMSAwMzowMDowMC4w MDAwMDAwMDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvLy5hcmNoLWlkcy9j cnlwdG9fbWFpbi5jLmlkCTIwMDQtMTItMTQgMTc6NTA6MDQuMDAwMDAwMDAwICswMzAwDQpAQCAt MCwwICsxIEBADQorRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4gU3VuIE9j dCAgMyAyMDoyODowNSAyMDA0IDI5NTAuMQ0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvLmFyY2gtaWRz L2NyeXB0b19yb3V0ZS5oLmlkIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vLmFyY2gtaWRzL2Ny eXB0b19yb3V0ZS5oLmlkDQotLS0gL3RtcC9lbXB0eS8uYXJjaC1pZHMvY3J5cHRvX3JvdXRlLmgu aWQJMTk3MC0wMS0wMSAwMzowMDowMC4wMDAwMDAwMDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJp dmVycy9hY3J5cHRvLy5hcmNoLWlkcy9jcnlwdG9fcm91dGUuaC5pZAkyMDA0LTEyLTE0IDE3OjUw OjA0LjAwMDAwMDAwMCArMDMwMA0KQEAgLTAsMCArMSBAQA0KK0V2Z2VuaXkgUG9seWFrb3YgPGpv aG5wb2xAMmthLm1pcHQucnU+IFR1ZSBPY3QgMTIgMTk6MjU6MjcgMjAwNCAyNTE4LjANCmRpZmYg LU5ydSAvdG1wL2VtcHR5Ly5hcmNoLWlkcy9jcnlwdG9fc3RhdC5jLmlkIGxpbnV4LTIuNi9kcml2 ZXJzL2FjcnlwdG8vLmFyY2gtaWRzL2NyeXB0b19zdGF0LmMuaWQNCi0tLSAvdG1wL2VtcHR5Ly5h cmNoLWlkcy9jcnlwdG9fc3RhdC5jLmlkCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICsw MzAwDQorKysgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by8uYXJjaC1pZHMvY3J5cHRvX3N0YXQu Yy5pZAkyMDA0LTEyLTE0IDE3OjUwOjA0LjAwMDAwMDAwMCArMDMwMA0KQEAgLTAsMCArMSBAQA0K K0V2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+IFRodSBPY3QgIDcgMjM6MDg6 NDggMjAwNCA0Mzg0LjANCmRpZmYgLU5ydSAvdG1wL2VtcHR5Ly5hcmNoLWlkcy9jcnlwdG9fc3Rh dC5oLmlkIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vLmFyY2gtaWRzL2NyeXB0b19zdGF0Lmgu aWQNCi0tLSAvdG1wL2VtcHR5Ly5hcmNoLWlkcy9jcnlwdG9fc3RhdC5oLmlkCTE5NzAtMDEtMDEg MDM6MDA6MDAuMDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by8u YXJjaC1pZHMvY3J5cHRvX3N0YXQuaC5pZAkyMDA0LTEyLTE0IDE3OjUwOjA0LjAwMDAwMDAwMCAr MDMwMA0KQEAgLTAsMCArMSBAQA0KK0V2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQu cnU+IFRodSBPY3QgIDcgMjM6MDg6NDggMjAwNCA0Mzg0LjENCmRpZmYgLU5ydSAvdG1wL2VtcHR5 Ly5hcmNoLWlkcy9NYWtlZmlsZS5pZCBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvLy5hcmNoLWlk cy9NYWtlZmlsZS5pZA0KLS0tIC90bXAvZW1wdHkvLmFyY2gtaWRzL01ha2VmaWxlLmlkCTE5NzAt MDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42L2RyaXZlcnMvYWNy eXB0by8uYXJjaC1pZHMvTWFrZWZpbGUuaWQJMjAwNC0xMi0xNCAxNzo1MDowNC4wMDAwMDAwMDAg KzAzMDANCkBAIC0wLDAgKzEgQEANCitFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0 LnJ1PiBTdW4gT2N0ICAzIDIwOjI4OjA1IDIwMDQgMjk1MC4wDQpkaWZmIC1OcnUgL3RtcC9lbXB0 eS8uYXJjaC1pZHMvcHJvdmlkZXIuYy5pZCBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvLy5hcmNo LWlkcy9wcm92aWRlci5jLmlkDQotLS0gL3RtcC9lbXB0eS8uYXJjaC1pZHMvcHJvdmlkZXIuYy5p ZAkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2 ZXJzL2FjcnlwdG8vLmFyY2gtaWRzL3Byb3ZpZGVyLmMuaWQJMjAwNC0xMi0xNCAxNzo1MDowNC4w MDAwMDAwMDAgKzAzMDANCkBAIC0wLDAgKzEgQEANCitFdmdlbml5IFBvbHlha292IDxqb2hucG9s QDJrYS5taXB0LnJ1PiBXZWQgT2N0ICA2IDAyOjM0OjA0IDIwMDQgNDkwMi4xDQpkaWZmIC1OcnUg L3RtcC9lbXB0eS8uYXJjaC1pZHMvc2hhMV9wcm92aWRlci5jLmlkIGxpbnV4LTIuNi9kcml2ZXJz L2FjcnlwdG8vLmFyY2gtaWRzL3NoYTFfcHJvdmlkZXIuYy5pZA0KLS0tIC90bXAvZW1wdHkvLmFy Y2gtaWRzL3NoYTFfcHJvdmlkZXIuYy5pZAkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCAr MDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vLmFyY2gtaWRzL3NoYTFfcHJvdmlk ZXIuYy5pZAkyMDA0LTEyLTE0IDE3OjUwOjA0LjAwMDAwMDAwMCArMDMwMA0KQEAgLTAsMCArMSBA QA0KK0V2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+IFdlZCBPY3QgMjAgMjA6 MjY6NTMgMjAwNCAyNTY1NC4wDQpkaWZmIC1OcnUgL3RtcC9lbXB0eS8uYXJjaC1pZHMvc2ltcGxl X2xiLmMuaWQgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by8uYXJjaC1pZHMvc2ltcGxlX2xiLmMu aWQNCi0tLSAvdG1wL2VtcHR5Ly5hcmNoLWlkcy9zaW1wbGVfbGIuYy5pZAkxOTcwLTAxLTAxIDAz OjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vLmFy Y2gtaWRzL3NpbXBsZV9sYi5jLmlkCTIwMDQtMTItMTQgMTc6NTA6MDQuMDAwMDAwMDAwICswMzAw DQpAQCAtMCwwICsxIEBADQorRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4g TW9uIE9jdCAgNCAwMDo1ODowNyAyMDA0IDQ2OTEuMA0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvY29u c3VtZXIuYyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvL2NvbnN1bWVyLmMNCi0tLSAvdG1wL2Vt cHR5L2NvbnN1bWVyLmMJMTk3MC0wMS0wMSAwMzowMDowMC4wMDAwMDAwMDAgKzAzMDANCisrKyBs aW51eC0yLjYvZHJpdmVycy9hY3J5cHRvL2NvbnN1bWVyLmMJMjAwNC0xMi0xNCAxODo1MzoxMS4w MDAwMDAwMDAgKzAzMDANCkBAIC0wLDAgKzEsMjg4IEBADQorLyoNCisgKiAJY29uc3VtZXIuYw0K KyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmth Lm1pcHQucnU+DQorICogDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQor ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3INCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAq DQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisg KiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBN QSAwMjExMS0xMzA3IFVTQQ0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+ DQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCisj aW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KKyNp bmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCisjaW5jbHVkZSA8bGludXgvZXJyLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L21tLmg+DQorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4NCisNCisj dW5kZWYgREVCVUcNCisjaW5jbHVkZSAiYWNyeXB0by5oIg0KKyNpbmNsdWRlICJjcnlwdG9fZGVm LmgiDQorI2luY2x1ZGUgInZpYS1wYWRsb2NrL3BhZGxvY2suaCINCisNCisjdW5kZWYgZHByaW50 aw0KKyNkZWZpbmUgZHByaW50ayhmLCBhLi4uKSBkbyB7fSB3aGlsZSgwKQ0KKw0KKyNkZWZpbmUg S0VZX0xFTkdUSAkJMTYNCitzdGF0aWMgY2hhciBja2V5W0tFWV9MRU5HVEhdOw0KK3N0YXRpYyBp bnQga2V5X2xlbmd0aCA9IHNpemVvZihja2V5KTsNCisNCitzdGF0aWMgdm9pZCBjdGVzdF9jYWxs YmFjayhzdHJ1Y3QgY3J5cHRvX3Nlc3Npb25faW5pdGlhbGl6ZXIgKmNpLA0KKwkJCSAgIHN0cnVj dCBjcnlwdG9fZGF0YSAqZGF0YSk7DQorDQorc3RhdGljIHN0cnVjdCBjcnlwdG9fc2Vzc2lvbl9p bml0aWFsaXplciBjaSA9IHsNCisJLm9wZXJhdGlvbiAJPSBDUllQVE9fT1BfRU5DUllQVCwNCisJ LnR5cGUgCQk9IENSWVBUT19UWVBFX0FFU18xMjgsDQorCS5tb2RlIAkJPSBDUllQVE9fTU9ERV9F Q0IsDQorCS5wcmlvcml0eSAJPSA0LA0KKwkuY2FsbGJhY2sgCT0gY3Rlc3RfY2FsbGJhY2ssDQor fTsNCisNCitzdGF0aWMgc3RydWN0IGNyeXB0b19kYXRhIGNkYXRhOw0KKw0KKyNkZWZpbmUgQ1NF U1NJT05fTUFYCTEwMDANCitzdGF0aWMgc3RydWN0IGNyeXB0b19zZXNzaW9uICpzOw0KK3N0YXRp YyBpbnQgd2F0ZXJtYXJrOw0KKy8vc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIGNhbGxiYWNrX2Nv bXBsZXRlZDsNCitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY3RpbWVyOw0KKw0KK3N0YXRpYyB2 b2lkIGN0ZXN0X2NhbGxiYWNrKHN0cnVjdCBjcnlwdG9fc2Vzc2lvbl9pbml0aWFsaXplciAqY2ks DQorCQkJICAgc3RydWN0IGNyeXB0b19kYXRhICpkYXRhKQ0KK3sNCisJaW50IGksIG9mZiwgc2l6 ZSwgc3NpemU7DQorCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7DQorCXVuc2lnbmVkIGNoYXIgKnB0 cjsNCisNCisJd2F0ZXJtYXJrLS07DQorDQorCXByaW50aygiJXM6IHNlc3Npb24gJWxsdSBbJWxs dV1cbiIsIF9fZnVuY19fLCBjaS0+aWQsIGNpLT5kZXZfaWQpOw0KKwlkcHJpbnRrKCJzcmM9JXMs IGxlbj0lZC5cbiIsDQorCQkoKGNoYXIgKilwYWdlX2FkZHJlc3MoZGF0YS0+c2dfc3JjLnBhZ2Up KSArIGRhdGEtPnNnX3NyYy5vZmZzZXQsDQorCQlkYXRhLT5zZ19zcmMubGVuZ3RoKTsNCisNCisJ c2cgPSAmZGF0YS0+c2dfa2V5Ow0KKwlwdHIgPSAodW5zaWduZWQgY2hhciAqKXBhZ2VfYWRkcmVz cyhzZy0+cGFnZSk7DQorCW9mZiA9IHNnLT5vZmZzZXQ7DQorCXNpemUgPSBzZy0+bGVuZ3RoOw0K Kw0KKwlpZiAoc2l6ZSA+IDE2KSB7DQorCQlkcHJpbnRrKCJrZXkgc2cgaXMgYnJva2VuLCBzaXpl PSVkLlxuIiwgc2l6ZSk7DQorCQlnb3RvIGVycl9vdXQ7DQorCX0NCisNCisJZHByaW50aygia2V5 WyVkXT0iLCBzaXplKTsNCisJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkNCisJCWRwcmludGso IjB4JTAyeCwgIiwgcHRyW2kgKyBvZmZdKTsNCisJZHByaW50aygiXG4iKTsNCisNCisJc2cgPSAm ZGF0YS0+c2dfc3JjOw0KKwlwdHIgPSAodW5zaWduZWQgY2hhciAqKXBhZ2VfYWRkcmVzcyhzZy0+ cGFnZSk7DQorCW9mZiA9IHNnLT5vZmZzZXQ7DQorCXNzaXplID0gc2l6ZSA9IHNnLT5sZW5ndGg7 DQorCWlmIChzaXplID4gMzIpIHsNCisJCWRwcmludGsoInNyYyBzZyBpcyBicm9rZW4sIHNpemU9 JWQuXG4iLCBzaXplKTsNCisJCWdvdG8gZXJyX291dDsNCisJfQ0KKw0KKwlkcHJpbnRrKCJzcmNb JWRdPSIsIHNpemUpOw0KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKQ0KKwkJZHByaW50aygi MHglMDJ4LCAiLCBwdHJbaSArIG9mZl0pOw0KKwlkcHJpbnRrKCJcbiIpOw0KKw0KKwlzZyA9ICZk YXRhLT5zZ19kc3Q7DQorCXB0ciA9ICh1bnNpZ25lZCBjaGFyICopcGFnZV9hZGRyZXNzKHNnLT5w YWdlKTsNCisJb2ZmID0gc2ctPm9mZnNldDsNCisJc2l6ZSA9IHNnLT5sZW5ndGg7DQorCWlmIChz aXplID4gMzIpIHsNCisJCWRwcmludGsoImRzdCBzZyBpcyBicm9rZW4sIHNpemU9JWQuXG4iLCBz aXplKTsNCisJCWdvdG8gZXJyX291dDsNCisJfQ0KKw0KKwlpZiAoc2l6ZSA9PSAwKSB7DQorCQlk cHJpbnRrKCJzaXplPTAsIHNldHRpbmcgdG8gJWQuXG4iLCBzc2l6ZSk7DQorCQlzaXplID0gc3Np emU7DQorCX0NCisNCisJZHByaW50aygiZHN0WyVkXT0iLCBzaXplKTsNCisJZm9yIChpID0gMDsg aSA8IHNpemU7ICsraSkNCisJCWRwcmludGsoIjB4JTAyeCwgIiwgcHRyW2kgKyBvZmZdKTsNCisJ ZHByaW50aygiXG4iKTsNCisNCitlcnJfb3V0Og0KKwkvL2NvbXBsZXRlKCZjYWxsYmFja19jb21w bGV0ZWQpOw0KKwlyZXR1cm47DQorfQ0KKw0KK2ludCBjdGltZXJfZnVuYyh2b2lkICpkYXRhLCBp bnQgc2l6ZSwgaW50IG9wKQ0KK3sNCisJdTggKnB0cjsNCisNCisJaWYgKHNpemUgPiBQQUdFX1NJ WkUpDQorCQlzaXplID0gUEFHRV9TSVpFOw0KKw0KKwlwdHIgPSAodTggKilwYWdlX2FkZHJlc3Mo Y2RhdGEuc2dfc3JjLnBhZ2UpICsgY2RhdGEuc2dfc3JjLm9mZnNldDsNCisJbWVtY3B5KHB0ciwg ZGF0YSwgc2l6ZSk7DQorCWNkYXRhLnNnX3NyYy5sZW5ndGggPSBzaXplOw0KKwljZGF0YS5zZ19k c3QubGVuZ3RoID0gc2l6ZTsNCisNCisJY2kub3BlcmF0aW9uID0gb3A7DQorCXMgPSBjcnlwdG9f c2Vzc2lvbl9hbGxvYygmY2ksICZjZGF0YSk7DQorCWlmIChzKQ0KKwkJd2F0ZXJtYXJrKys7DQor CWVsc2UNCisJCWRwcmludGsoImFsbG9jYXRpb24gZmFpbGVkLlxuIik7DQorDQorCXJldHVybiAo cykgPyAwIDogLUVJTlZBTDsNCit9DQorDQorc3RhdGljIGludCBhbGxvY19zZyhzdHJ1Y3Qgc2Nh dHRlcmxpc3QgKnNnLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkNCit7DQorCXNnLT5vZmZzZXQgPSAw Ow0KKwlzZy0+cGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIGdldF9vcmRlcihzaXplKSk7 DQorCWlmICghc2ctPnBhZ2UpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9j YXRlIHBhZ2UuXG4iKTsNCisJCXJldHVybiAtRU5PTUVNOw0KKwl9DQorDQorCW1lbXNldChwYWdl X2FkZHJlc3Moc2ctPnBhZ2UpLCAwLCBQQUdFX1NJWkUpOw0KKw0KKwlpZiAoZGF0YSkNCisJCW1l bWNweShwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpLCBkYXRhLCBzaXplKTsNCisNCisJc2ctPmxlbmd0 aCA9IHNpemU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBjdGltZXJmKHVu c2lnbmVkIGxvbmcgZGF0YSkNCit7DQorCWNoYXIgc3RyW10gPSAidGVzdCBtZXNzYWdlIHF3ZXJ0 eSAgYXNkenhjXG4iOw0KKwlpbnQgc2l6ZSA9IHNpemVvZihzdHIpLCBlcnI7DQorDQorCXByaW50 aygiJXMgc3RhcnRlZFxuIiwgX19mdW5jX18pOw0KKw0KKwllcnIgPSBjdGltZXJfZnVuYyhzdHIs IHNpemUsIENSWVBUT19PUF9FTkNSWVBUKTsNCisNCisJaWYgKCFlcnIpDQorCQltb2RfdGltZXIo JmN0aW1lciwgamlmZmllcyArIDMpOw0KKwllbHNlDQorCQltb2RfdGltZXIoJmN0aW1lciwgamlm ZmllcyArIEhaKTsNCisNCisJcHJpbnRrKCIlcyBmaW5pc2hlZC5cbiIsIF9fZnVuY19fKTsNCit9 DQorDQoraW50IGNvbnN1bWVyX2luaXQodm9pZCkNCit7DQorCWludCBlcnI7DQorDQorCWNkYXRh LnNnX3NyY19udW0gPSAxOw0KKw0KKwllcnIgPSBhbGxvY19zZygmY2RhdGEuc2dfc3JjLCBOVUxM LCBQQUdFX1NJWkUpOw0KKwlpZiAoZXJyKQ0KKwkJZ290byBlcnJfb3V0X3JldHVybjsNCisNCisJ ZXJyID0gYWxsb2Nfc2coJmNkYXRhLnNnX2RzdCwgTlVMTCwgUEFHRV9TSVpFKTsNCisJaWYgKGVy cikNCisJCWdvdG8gZXJyX291dF9zcmM7DQorDQorCWVyciA9IGFsbG9jX3NnKCZjZGF0YS5zZ19r ZXksIGNrZXksIGtleV9sZW5ndGgpOw0KKwlpZiAoZXJyKQ0KKwkJZ290byBlcnJfb3V0X2RzdDsN CisNCisJZXJyID0gYWxsb2Nfc2coJmNkYXRhLnNnX2l2LCBOVUxMLCBQQUdFX1NJWkUpOw0KKwlp ZiAoZXJyKQ0KKwkJZ290byBlcnJfb3V0X2tleTsNCisNCisJY2RhdGEucHJpdl9zaXplID0gc2l6 ZW9mKHN0cnVjdCBhZXNfY3R4KTsNCisNCisJaW5pdF90aW1lcigmY3RpbWVyKTsNCisJY3RpbWVy LmZ1bmN0aW9uID0gJmN0aW1lcmY7DQorCWN0aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOw0K KwljdGltZXIuZGF0YSA9IDA7DQorDQorCWFkZF90aW1lcigmY3RpbWVyKTsNCisNCisJcmV0dXJu IDA7DQorI2lmIDANCisJY2hhciBzdHJbXSA9ICJ0ZXN0IG1lc3NhZ2UgcXdlcnR5ICBhc2R6eGNc biI7DQorCWludCBzaXplOw0KKw0KKwlpbml0X2NvbXBsZXRpb24oJmNhbGxiYWNrX2NvbXBsZXRl ZCk7DQorDQorCXNpemUgPSAzMjsNCisJZXJyID0gY3RpbWVyX2Z1bmMoc3RyLCBzaXplLCBDUllQ VE9fT1BfRU5DUllQVCk7DQorCWlmIChlcnIpDQorCQlnb3RvIGVycl9vdXRfaXY7DQorDQorCXdh aXRfZm9yX2NvbXBsZXRpb24oJmNhbGxiYWNrX2NvbXBsZXRlZCk7DQorCWluaXRfY29tcGxldGlv bigmY2FsbGJhY2tfY29tcGxldGVkKTsNCisNCisJZXJyID0NCisJICAgIGN0aW1lcl9mdW5jKHBh Z2VfYWRkcmVzcyhjZGF0YS5zZ19kc3QucGFnZSksIGNkYXRhLnNnX2RzdC5sZW5ndGgsDQorCQkJ Q1JZUFRPX09QX0RFQ1JZUFQpOw0KKwlpZiAoZXJyKQ0KKwkJZ290byBlcnJfb3V0X2l2Ow0KKw0K Kwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjYWxsYmFja19jb21wbGV0ZWQpOw0KKw0KKwlkcHJpbnRr KCJkc3Q6ICVzXG4iLA0KKwkJKChjaGFyICopcGFnZV9hZGRyZXNzKGNkYXRhLnNnX2RzdC5wYWdl KSkgKw0KKwkJY2RhdGEuc2dfZHN0Lm9mZnNldCk7DQorICAgICAgZXJyX291dF9pdjoNCisjZW5k aWYNCisNCisJX19mcmVlX3BhZ2VzKGNkYXRhLnNnX2l2LnBhZ2UsIGdldF9vcmRlcigxKSk7DQor ICAgICAgZXJyX291dF9rZXk6DQorCV9fZnJlZV9wYWdlcyhjZGF0YS5zZ19rZXkucGFnZSwgZ2V0 X29yZGVyKGtleV9sZW5ndGgpKTsNCisgICAgICBlcnJfb3V0X2RzdDoNCisJX19mcmVlX3BhZ2Vz KGNkYXRhLnNnX2RzdC5wYWdlLCBnZXRfb3JkZXIoMSkpOw0KKyAgICAgIGVycl9vdXRfc3JjOg0K KwlfX2ZyZWVfcGFnZXMoY2RhdGEuc2dfc3JjLnBhZ2UsIGdldF9vcmRlcigxKSk7DQorICAgICAg ZXJyX291dF9yZXR1cm46DQorCXJldHVybiAtRU5PREVWOw0KK30NCisNCit2b2lkIGNvbnN1bWVy X2Zpbmkodm9pZCkNCit7DQorCWRlbF90aW1lcl9zeW5jKCZjdGltZXIpOw0KKwl3aGlsZSAod2F0 ZXJtYXJrKSB7DQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7DQor CQlzY2hlZHVsZV90aW1lb3V0KEhaKTsNCisNCisJCXByaW50ayhLRVJOX0lORk8gIldhaXRpbmcg Zm9yIHNlc3Npb25zIHRvIGJlIGZyZWVkOiB3YXRlcm1hcms9JWQuXG4iLA0KKwkJCXdhdGVybWFy ayk7DQorCX0NCisNCisJaWYgKCFjZGF0YS5zZ19rZXkubGVuZ3RoKQ0KKwkJcHJpbnRrKCJCVUc6 IGtleSBsZW5ndGggaXMgMCBpbiAlcy5cbiIsIF9fZnVuY19fKTsNCisNCisJX19mcmVlX3BhZ2Vz KGNkYXRhLnNnX2l2LnBhZ2UsIGdldF9vcmRlcigxKSk7DQorCV9fZnJlZV9wYWdlcyhjZGF0YS5z Z19rZXkucGFnZSwgZ2V0X29yZGVyKGtleV9sZW5ndGgpKTsNCisJX19mcmVlX3BhZ2VzKGNkYXRh LnNnX2RzdC5wYWdlLCBnZXRfb3JkZXIoMSkpOw0KKwlfX2ZyZWVfcGFnZXMoY2RhdGEuc2dfc3Jj LnBhZ2UsIGdldF9vcmRlcigxKSk7DQorDQorCXByaW50ayhLRVJOX0lORk8gIlRlc3QgY3J5cHRv IG1vZHVsZSBjb25zdW1lciBpcyB1bmxvYWRlZC5cbiIpOw0KK30NCisNCittb2R1bGVfaW5pdChj b25zdW1lcl9pbml0KTsNCittb2R1bGVfZXhpdChjb25zdW1lcl9maW5pKTsNCisNCitNT0RVTEVf TElDRU5TRSgiR1BMIik7DQorTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBv bEAya2EubWlwdC5ydT4iKTsNCitNT0RVTEVfREVTQ1JJUFRJT04oIlRlc3QgY3J5cHRvIG1vZHVs ZSBjb25zdW1lci4iKTsNCkJpbmFyeSBmaWxlcyAvdG1wL2VtcHR5Ly5jb25zdW1lci5jLnN3cCBh bmQgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by8uY29uc3VtZXIuYy5zd3AgZGlmZmVyDQpkaWZm IC1OcnUgL3RtcC9lbXB0eS9jcnlwdG9fY29ubi5jIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8v Y3J5cHRvX2Nvbm4uYw0KLS0tIC90bXAvZW1wdHkvY3J5cHRvX2Nvbm4uYwkxOTcwLTAxLTAxIDAz OjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vY3J5 cHRvX2Nvbm4uYwkyMDA0LTEyLTE0IDE4OjUzOjExLjAwMDAwMDAwMCArMDMwMA0KQEAgLTAsMCAr MSwxOTEgQEANCisvKg0KKyAqIAljcnlwdG9fY29ubi5jDQorICoNCisgKiBDb3B5cmlnaHQgKGMp IDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4NCisgKiANCisgKg0K KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUNCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5 IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQorICov DQorDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCisjaW5jbHVkZSA8bGludXgvdHlw ZXMuaD4NCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ DQorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2Mu aD4NCisNCisjaW5jbHVkZSAiYWNyeXB0by5oIg0KKyNpbmNsdWRlICJjcnlwdG9fbGIuaCINCisN CisjaW5jbHVkZSAiLi4vY29ubmVjdG9yL2Nvbm5lY3Rvci5oIg0KKw0KKyNpbmNsdWRlICJjcnlw dG9fY29ubi5oIg0KKw0KK3N0YXRpYyBzdHJ1Y3QgY2JfaWQgY3J5cHRvX2Nvbm5faWQgPSB7IDB4 ZGVhZCwgMHgwMDAwIH07DQorc3RhdGljIGNoYXIgY3J5cHRvX2Nvbm5fbmFtZVtdID0gImNyY29u biI7DQorDQorc3RhdGljIHZvaWQgY3J5cHRvX2Nvbm5fY2FsbGJhY2sodm9pZCAqZGF0YSkNCit7 DQorCXN0cnVjdCBjbl9tc2cgKm1zZywgKnJlcGx5Ow0KKwlzdHJ1Y3QgY3J5cHRvX2Nvbm5fZGF0 YSAqZCwgKmNtZDsNCisJc3RydWN0IGNyeXB0b19kZXZpY2UgKmRldjsNCisJdTMyIHNlc3Npb25z Ow0KKw0KKwltc2cgPSAoc3RydWN0IGNuX21zZyAqKWRhdGE7DQorCWQgPSAoc3RydWN0IGNyeXB0 b19jb25uX2RhdGEgKiltc2ctPmRhdGE7DQorDQorCWlmIChtc2ctPmxlbiA8IHNpemVvZigqZCkp IHsNCisJCWRwcmludGsoS0VSTl9FUlIgIldyb25nIG1lc3NhZ2UgdG8gY3J5cHRvIGNvbm5lY3Rv cjogbXNnLT5sZW49JXUgPCAldS5cbiIsDQorCQkJbXNnLT5sZW4sIHNpemVvZigqZCkpOw0KKwkJ cmV0dXJuOw0KKwl9DQorDQorCWlmIChtc2ctPmxlbiAhPSBzaXplb2YoKmQpICsgZC0+bGVuKSB7 DQorCQlkcHJpbnRrKEtFUk5fRVJSICJXcm9uZyBtZXNzYWdlIHRvIGNyeXB0byBjb25uZWN0b3I6 IG1zZy0+bGVuPSV1ICE9ICV1LlxuIiwNCisJCQltc2ctPmxlbiwgc2l6ZW9mKCpkKSArIGQtPmxl bik7DQorCQlyZXR1cm47DQorCX0NCisNCisJZGV2ID0gY3J5cHRvX2RldmljZV9nZXRfbmFtZShk LT5uYW1lKTsNCisJaWYgKCFkZXYpIHsNCisJCWRwcmludGsoS0VSTl9JTkZPICJDcnlwdG8gZGV2 aWNlICVzIHdhcyBub3QgZm91bmQuXG4iLCBkLT5uYW1lKTsNCisJCXJldHVybjsNCisJfQ0KKw0K Kwlzd2l0Y2ggKGQtPmNtZCkgew0KKwljYXNlIENSWVBUT19DT05OX1JFQURfU0VTU0lPTlM6DQor CQlyZXBseSA9IGttYWxsb2Moc2l6ZW9mKCptc2cpICsgc2l6ZW9mKCpjbWQpICsgc2l6ZW9mKHNl c3Npb25zKSwgR0ZQX0FUT01JQyk7DQorCQlpZiAocmVwbHkpIHsNCisJCQltZW1jcHkocmVwbHks IG1zZywgc2l6ZW9mKCpyZXBseSkpOw0KKwkJCXJlcGx5LT5sZW4gPSBzaXplb2YoKmNtZCkgKyBz aXplb2Yoc2Vzc2lvbnMpOw0KKw0KKwkJCS8qDQorCQkJICogU2VlIHByb3RvY29sIGRlc2NyaXB0 aW9uIGluIGNvbm5lY3Rvci5jDQorCQkJICovDQorCQkJcmVwbHktPmFjaysrOw0KKw0KKwkJCWNt ZCA9IChzdHJ1Y3QgY3J5cHRvX2Nvbm5fZGF0YSAqKShyZXBseSArIDEpOw0KKwkJCW1lbWNweShj bWQsIGQsIHNpemVvZigqY21kKSk7DQorCQkJY21kLT5sZW4gPSBzaXplb2Yoc2Vzc2lvbnMpOw0K Kw0KKwkJCXNlc3Npb25zID0gYXRvbWljX3JlYWQoJmRldi0+cmVmY250KTsNCisNCisJCQltZW1j cHkoY21kICsgMSwgJnNlc3Npb25zLCBzaXplb2Yoc2Vzc2lvbnMpKTsNCisNCisJCQljbl9uZXRs aW5rX3NlbmQocmVwbHksIDApOw0KKw0KKwkJCWtmcmVlKHJlcGx5KTsNCisJCX0gZWxzZQ0KKwkJ CWRwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyBpbiByZXBseSB0 byBjb21hbW5kIDB4JXguXG4iLA0KKwkJCQlzaXplb2YoKm1zZykgKyBzaXplb2YoKmNtZCksIGQt PmNtZCk7DQorCQlicmVhazsNCisJY2FzZSBDUllQVE9fQ09OTl9EVU1QX1FVRVVFOg0KKwkJcmVw bHkgPSBrbWFsbG9jKHNpemVvZigqbXNnKSArIHNpemVvZigqY21kKSArIA0KKwkJCQkxMDI0ICog c2l6ZW9mKHN0cnVjdCBjcnlwdG9fc2Vzc2lvbl9pbml0aWFsaXplciksIEdGUF9BVE9NSUMpOw0K KwkJaWYgKHJlcGx5KSB7DQorCQkJc3RydWN0IGNyeXB0b19zZXNzaW9uICpzOw0KKwkJCXN0cnVj dCBjcnlwdG9fc2Vzc2lvbl9pbml0aWFsaXplciAqcHRyOw0KKw0KKwkJCW1lbWNweShyZXBseSwg bXNnLCBzaXplb2YoKnJlcGx5KSk7DQorDQorCQkJLyoNCisJCQkgKiBTZWUgcHJvdG9jb2wgZGVz Y3JpcHRpb24gaW4gY29ubmVjdG9yLmMNCisJCQkgKi8NCisJCQlyZXBseS0+YWNrKys7DQorDQor CQkJY21kID0gKHN0cnVjdCBjcnlwdG9fY29ubl9kYXRhICopKHJlcGx5ICsgMSk7DQorCQkJbWVt Y3B5KGNtZCwgZCwgc2l6ZW9mKCpjbWQpKTsNCisNCisJCQlwdHIgPSAoc3RydWN0IGNyeXB0b19z ZXNzaW9uX2luaXRpYWxpemVyICopKGNtZCArIDEpOw0KKw0KKwkJCXNlc3Npb25zID0gMDsNCisJ CQlzcGluX2xvY2tfaXJxKCZkZXYtPnNlc3Npb25fbG9jayk7DQorCQkJbGlzdF9mb3JfZWFjaF9l bnRyeShzLCAmZGV2LT5zZXNzaW9uX2xpc3QsIGRldl9xdWV1ZV9lbnRyeSkgew0KKwkJCQltZW1j cHkocHRyLCAmcy0+Y2ksIHNpemVvZigqcHRyKSk7DQorCQkJCXNlc3Npb25zKys7DQorCQkJCXB0 cisrOw0KKw0KKwkJCQlpZiAoc2Vzc2lvbnMgPj0gMTAyNCkNCisJCQkJCWJyZWFrOw0KKwkJCX0N CisJCQlzcGluX3VubG9ja19pcnEoJmRldi0+c2Vzc2lvbl9sb2NrKTsNCisNCisJCQljbWQtPmxl biA9IHNpemVvZigqcHRyKSAqIHNlc3Npb25zOw0KKwkJCXJlcGx5LT5sZW4gPSBzaXplb2YoKmNt ZCkgKyBjbWQtPmxlbjsNCisNCisJCQljbl9uZXRsaW5rX3NlbmQocmVwbHksIDApOw0KKw0KKwkJ CWtmcmVlKHJlcGx5KTsNCisJCX0gZWxzZQ0KKwkJCWRwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0 byBhbGxvY2F0ZSAlZCBieXRlcyBpbiByZXBseSB0byBjb21hbW5kIDB4JXguXG4iLA0KKwkJCQlz aXplb2YoKm1zZykgKyBzaXplb2YoKmNtZCksIGQtPmNtZCk7DQorCQlicmVhazsNCisJY2FzZSBD UllQVE9fR0VUX1NUQVQ6DQorCQlyZXBseSA9DQorCQkgICAga21hbGxvYyhzaXplb2YoKm1zZykg KyBzaXplb2YoKmNtZCkgKyBzaXplb2Yoc3RydWN0IGNyeXB0b19kZXZpY2Vfc3RhdCksIEdGUF9B VE9NSUMpOw0KKwkJaWYgKHJlcGx5KSB7DQorCQkJc3RydWN0IGNyeXB0b19kZXZpY2Vfc3RhdCAq cHRyOw0KKw0KKwkJCW1lbWNweShyZXBseSwgbXNnLCBzaXplb2YoKnJlcGx5KSk7DQorCQkJcmVw bHktPmxlbiA9IHNpemVvZigqY21kKSArIHNpemVvZigqcHRyKTsNCisNCisJCQkvKg0KKwkJCSAq IFNlZSBwcm90b2NvbCBkZXNjcmlwdGlvbiBpbiBjb25uZWN0b3IuYw0KKwkJCSAqLw0KKwkJCXJl cGx5LT5hY2srKzsNCisNCisJCQljbWQgPSAoc3RydWN0IGNyeXB0b19jb25uX2RhdGEgKikocmVw bHkgKyAxKTsNCisJCQltZW1jcHkoY21kLCBkLCBzaXplb2YoKmNtZCkpOw0KKwkJCWNtZC0+bGVu ID0gc2l6ZW9mKCpwdHIpOw0KKw0KKwkJCXB0ciA9IChzdHJ1Y3QgY3J5cHRvX2RldmljZV9zdGF0 ICopKGNtZCArIDEpOw0KKwkJCW1lbWNweShwdHIsICZkZXYtPnN0YXQsIHNpemVvZigqcHRyKSk7 DQorDQorCQkJY25fbmV0bGlua19zZW5kKHJlcGx5LCAwKTsNCisNCisJCQlrZnJlZShyZXBseSk7 DQorCQl9IGVsc2UNCisJCQlkcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgJWQg Ynl0ZXMgaW4gcmVwbHkgdG8gY29tYW1uZCAweCV4LlxuIiwNCisJCQkJc2l6ZW9mKCptc2cpICsg c2l6ZW9mKCpjbWQpLCBkLT5jbWQpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlkcHJpbnRr KEtFUk5fRVJSICJXcm9uZyBvcGVyYXRpb24gMHglMDR4IGZvciBjcnlwdG8gY29ubmVjdG9yLlxu IiwNCisJCQlkLT5jbWQpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWNyeXB0b19kZXZpY2VfcHV0 KGRldik7DQorfQ0KKw0KK2ludCBjcnlwdG9fY29ubl9pbml0KHZvaWQpDQorew0KKwlpbnQgZXJy Ow0KKw0KKwllcnIgPSBjbl9hZGRfY2FsbGJhY2soJmNyeXB0b19jb25uX2lkLCBjcnlwdG9fY29u bl9uYW1lLCBjcnlwdG9fY29ubl9jYWxsYmFjayk7DQorCWlmIChlcnIpDQorCQlyZXR1cm4gZXJy Ow0KKw0KKwlkcHJpbnRrKEtFUk5fSU5GTyAiQ3J5cHRvIGNvbm5lY3RvciBjYWxsYmFjayBpcyBy ZWdpc3RlcmVkLlxuIik7DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIGNyeXB0b19jb25u X2Zpbmkodm9pZCkNCit7DQorCWNuX2RlbF9jYWxsYmFjaygmY3J5cHRvX2Nvbm5faWQpOw0KKwlk cHJpbnRrKEtFUk5fSU5GTyAiQ3J5cHRvIGNvbm5lY3RvciBjYWxsYmFjayBpcyB1bnJlZ2lzdGVy ZWQuXG4iKTsNCit9DQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9jcnlwdG9fY29ubi5oIGxpbnV4LTIu Ni9kcml2ZXJzL2FjcnlwdG8vY3J5cHRvX2Nvbm4uaA0KLS0tIC90bXAvZW1wdHkvY3J5cHRvX2Nv bm4uaAkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9k cml2ZXJzL2FjcnlwdG8vY3J5cHRvX2Nvbm4uaAkyMDA0LTEyLTE0IDE4OjUzOjExLjAwMDAwMDAw MCArMDMwMA0KQEAgLTAsMCArMSw0NCBAQA0KKy8qDQorICogCWNyeXB0b19jb25uLmgNCisgKg0K KyAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0 LnJ1Pg0KKyAqIA0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yDQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAqIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91 bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIx MTEtMTMwNyBVU0ENCisgKi8NCisNCisjaWZuZGVmIF9fQ1JZUFRPX0NPTk5fSA0KKyNkZWZpbmUg X19DUllQVE9fQ09OTl9IDQorDQorI2luY2x1ZGUgImFjcnlwdG8uaCINCisNCisjZGVmaW5lIENS WVBUT19DT05OX1JFQURfU0VTU0lPTlMJCTANCisjZGVmaW5lIENSWVBUT19DT05OX0RVTVBfUVVF VUUJCQkxDQorI2RlZmluZSBDUllQVE9fR0VUX1NUQVQJCQkJMg0KKw0KK3N0cnVjdCBjcnlwdG9f Y29ubl9kYXRhIHsNCisJY2hhciAJCW5hbWVbU0NBQ0hFX05BTUVMRU5dOw0KKwlfX3UxNiAJCWNt ZDsNCisJX191MTYgCQlsZW47DQorCV9fdTggCQlkYXRhWzBdOw0KK307DQorDQorI2lmZGVmIF9f S0VSTkVMX18NCisNCitpbnQgY3J5cHRvX2Nvbm5faW5pdCh2b2lkKTsNCit2b2lkIGNyeXB0b19j b25uX2Zpbmkodm9pZCk7DQorDQorI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8NCisjZW5kaWYJ CQkJLyogX19DUllQVE9fQ09OTl9IICovDQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9jcnlwdG9fZGVm LmggbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by9jcnlwdG9fZGVmLmgNCi0tLSAvdG1wL2VtcHR5 L2NyeXB0b19kZWYuaAkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxp bnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vY3J5cHRvX2RlZi5oCTIwMDQtMTItMTQgMTg6NTM6MTEu MDAwMDAwMDAwICswMzAwDQpAQCAtMCwwICsxLDM4IEBADQorLyoNCisgKiAJY3J5cHRvX2RlZi5o DQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAy a2EubWlwdC5ydT4NCisgKiANCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkN CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcg0KKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQor ICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0K KyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s IE1BIDAyMTExLTEzMDcgVVNBDQorICovDQorDQorI2lmbmRlZiBfX0NSWVBUT19ERUZfSA0KKyNk ZWZpbmUgX19DUllQVE9fREVGX0gNCisNCisjZGVmaW5lIENSWVBUT19PUF9ERUNSWVBUCTANCisj ZGVmaW5lIENSWVBUT19PUF9FTkNSWVBUCTENCisjZGVmaW5lIENSWVBUT19PUF9ITUFDCQkyDQor DQorI2RlZmluZSBDUllQVE9fTU9ERV9FQ0IJCTANCisjZGVmaW5lIENSWVBUT19NT0RFX0NCQwkJ MQ0KKyNkZWZpbmUgQ1JZUFRPX01PREVfQ0ZCCQkyDQorI2RlZmluZSBDUllQVE9fTU9ERV9PRkIJ CTMNCisNCisjZGVmaW5lIENSWVBUT19UWVBFX0FFU18xMjgJMA0KKyNkZWZpbmUgQ1JZUFRPX1RZ UEVfQUVTXzE5MgkxDQorI2RlZmluZSBDUllQVE9fVFlQRV9BRVNfMjU2CTINCisNCisjZW5kaWYJ CQkJLyogX19DUllQVE9fREVGX0ggKi8NCmRpZmYgLU5ydSAvdG1wL2VtcHR5L2NyeXB0b19kZXYu YyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvL2NyeXB0b19kZXYuYw0KLS0tIC90bXAvZW1wdHkv Y3J5cHRvX2Rldi5jCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAwDQorKysgbGlu dXgtMi42L2RyaXZlcnMvYWNyeXB0by9jcnlwdG9fZGV2LmMJMjAwNC0xMi0xNCAxODo1MzoxMS4w MDAwMDAwMDAgKzAzMDANCkBAIC0wLDAgKzEsMzcxIEBADQorLyoNCisgKiAJY3J5cHRvX2Rldi5j DQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAy a2EubWlwdC5ydT4NCisgKiANCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkN CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcg0KKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQor ICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0K KyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s IE1BIDAyMTExLTEzMDcgVVNBDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0u aD4NCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0K KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0K KyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4N CisNCisjaW5jbHVkZSAiYWNyeXB0by5oIg0KKw0KK3N0YXRpYyBMSVNUX0hFQUQoY2Rldl9saXN0 KTsNCitzdGF0aWMgc3BpbmxvY2tfdCBjZGV2X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7DQor c3RhdGljIHUzMiBjZGV2X2lkczsNCisNCitzdHJ1Y3QgbGlzdF9oZWFkICpjcnlwdG9fZGV2aWNl X2xpc3QgPSAmY2Rldl9saXN0Ow0KK3NwaW5sb2NrX3QgKmNyeXB0b19kZXZpY2VfbG9jayA9ICZj ZGV2X2xvY2s7DQorDQorc3RhdGljIGludCBjcnlwdG9fbWF0Y2goc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQ0KK3sNCisJcmV0dXJuIDE7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgY3J5cHRvX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXJldHVybiAt RU5PREVWOw0KK30NCisNCitzdGF0aWMgaW50IGNyeXB0b19yZW1vdmUoc3RydWN0IGRldmljZSAq ZGV2KQ0KK3sNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGNyeXB0b19yZWxlYXNl KHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBjcnlwdG9fZGV2aWNlICpkID0gY29u dGFpbmVyX29mKGRldiwgc3RydWN0IGNyeXB0b19kZXZpY2UsIGRldmljZSk7DQorDQorCWNvbXBs ZXRlKCZkLT5kZXZfcmVsZWFzZWQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBjcnlwdG9fY2xhc3Nf cmVsZWFzZShzdHJ1Y3QgY2xhc3MgKmNsYXNzKQ0KK3sNCit9DQorDQorc3RhdGljIHZvaWQgY3J5 cHRvX2NsYXNzX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldikN Cit7DQorfQ0KKw0KK3N0cnVjdCBjbGFzcyBjcnlwdG9fY2xhc3MgPSB7DQorCS5uYW1lIAkJPSAi YWNyeXB0byIsDQorCS5jbGFzc19yZWxlYXNlIAk9IGNyeXB0b19jbGFzc19yZWxlYXNlLA0KKwku cmVsZWFzZSAJPSBjcnlwdG9fY2xhc3NfcmVsZWFzZV9kZXZpY2UNCit9Ow0KKw0KK3N0cnVjdCBi dXNfdHlwZSBjcnlwdG9fYnVzX3R5cGUgPSB7DQorCS5uYW1lIAkJPSAiYWNyeXB0byIsDQorCS5t YXRjaCAJCT0gY3J5cHRvX21hdGNoDQorfTsNCisNCitzdHJ1Y3QgZGV2aWNlX2RyaXZlciBjcnlw dG9fZHJpdmVyID0gew0KKwkubmFtZSAJCT0gImNyeXB0b19kcml2ZXIiLA0KKwkuYnVzIAkJPSAm Y3J5cHRvX2J1c190eXBlLA0KKwkucHJvYmUgCQk9IGNyeXB0b19wcm9iZSwNCisJLnJlbW92ZSAJ PSBjcnlwdG9fcmVtb3ZlLA0KK307DQorDQorc3RydWN0IGRldmljZSBjcnlwdG9fZGV2ID0gew0K KwkucGFyZW50IAk9IE5VTEwsDQorCS5idXMgCQk9ICZjcnlwdG9fYnVzX3R5cGUsDQorCS5idXNf aWQJCT0gIkFzeW5jaHJvbm91cyBjcnlwdG8iLA0KKwkuZHJpdmVyIAk9ICZjcnlwdG9fZHJpdmVy LA0KKwkucmVsZWFzZSAJPSAmY3J5cHRvX3JlbGVhc2UNCit9Ow0KKw0KK3N0YXRpYyBzc2l6ZV90 IHNlc3Npb25zX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpDQorew0K KwlzdHJ1Y3QgY3J5cHRvX2RldmljZSAqZCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcnlw dG9fZGV2aWNlLCBjbGFzc19kZXZpY2UpOw0KKw0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxu IiwgYXRvbWljX3JlYWQoJmQtPnJlZmNudCkpOw0KK30NCitzdGF0aWMgc3NpemVfdCBuYW1lX3No b3coc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpDQorew0KKwlzdHJ1Y3QgY3J5 cHRvX2RldmljZSAqZCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcnlwdG9fZGV2aWNlLCBj bGFzc19kZXZpY2UpOw0KKw0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZC0+bmFtZSk7 DQorfQ0KK3N0YXRpYyBzc2l6ZV90IGRldmljZXNfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpk ZXYsIGNoYXIgKmJ1ZikNCit7DQorCXN0cnVjdCBjcnlwdG9fZGV2aWNlICpkOw0KKwlpbnQgb2Zm ID0gMDsNCisNCisJc3Bpbl9sb2NrX2lycSgmY2Rldl9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9l bnRyeShkLCAmY2Rldl9saXN0LCBjZGV2X2VudHJ5KSB7DQorCQlvZmYgKz0gc3ByaW50ZihidWYg KyBvZmYsICIlcyAiLCBkLT5uYW1lKTsNCisJfQ0KKwlzcGluX3VubG9ja19pcnEoJmNkZXZfbG9j ayk7DQorDQorCWlmICghb2ZmKQ0KKwkJb2ZmID0gc3ByaW50ZihidWYsICJObyBkZXZpY2VzIHJl Z2lzdGVyZWQgeWV0LiIpOw0KKw0KKwlvZmYgKz0gc3ByaW50ZihidWYgKyBvZmYsICJcbiIpOw0K Kw0KKwlyZXR1cm4gb2ZmOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCBrbWVtX2ZhaWxlZF9zaG93 KHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQ0KK3sNCisJc3RydWN0IGNyeXB0 b19kZXZpY2UgKmQgPSAgY29udGFpbmVyX29mKGRldiwgc3RydWN0IGNyeXB0b19kZXZpY2UsIGNs YXNzX2RldmljZSk7DQorDQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIGQtPnN0YXQu a21lbV9mYWlsZWQpOw0KK30NCitzdGF0aWMgc3NpemVfdCBzc3RhcnRlZF9zaG93KHN0cnVjdCBj bGFzc19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQ0KK3sNCisJc3RydWN0IGNyeXB0b19kZXZpY2Ug KmQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgY3J5cHRvX2RldmljZSwgY2xhc3NfZGV2aWNl KTsNCisNCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgZC0+c3RhdC5zc3RhcnRlZCk7 DQorfQ0KK3N0YXRpYyBzc2l6ZV90IHNmaW5pc2hlZF9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2Ug KmRldiwgY2hhciAqYnVmKQ0KK3sNCisJc3RydWN0IGNyeXB0b19kZXZpY2UgKmQgPSBjb250YWlu ZXJfb2YoZGV2LCBzdHJ1Y3QgY3J5cHRvX2RldmljZSwgY2xhc3NfZGV2aWNlKTsNCisNCisJcmV0 dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgZC0+c3RhdC5zZmluaXNoZWQpOw0KK30NCitzdGF0 aWMgc3NpemVfdCBzY29tcGxldGVkX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFy ICpidWYpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX2RldmljZSAqZCA9IGNvbnRhaW5lcl9vZihkZXYs IHN0cnVjdCBjcnlwdG9fZGV2aWNlLCBjbGFzc19kZXZpY2UpOw0KKw0KKwlyZXR1cm4gc3ByaW50 ZihidWYsICIlbGx1XG4iLCBkLT5zdGF0LnNjb21wbGV0ZWQpOw0KK30NCisNCitzdGF0aWMgQ0xB U1NfREVWSUNFX0FUVFIoc2Vzc2lvbnMsIDA0NDQsIHNlc3Npb25zX3Nob3csIE5VTEwpOw0KK3N0 YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihuYW1lLCAwNDQ0LCBuYW1lX3Nob3csIE5VTEwpOw0KK0NM QVNTX0RFVklDRV9BVFRSKGRldmljZXMsIDA0NDQsIGRldmljZXNfc2hvdywgTlVMTCk7DQorc3Rh dGljIENMQVNTX0RFVklDRV9BVFRSKHNjb21wbGV0ZWQsIDA0NDQsIHNjb21wbGV0ZWRfc2hvdywg TlVMTCk7DQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHNzdGFydGVkLCAwNDQ0LCBzc3RhcnRl ZF9zaG93LCBOVUxMKTsNCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2ZpbmlzaGVkLCAwNDQ0 LCBzZmluaXNoZWRfc2hvdywgTlVMTCk7DQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGttZW1f ZmFpbGVkLCAwNDQ0LCBrbWVtX2ZhaWxlZF9zaG93LCBOVUxMKTsNCisNCitzdGF0aWMgaW50IGNv bXBhcmVfZGV2aWNlKHN0cnVjdCBjcnlwdG9fZGV2aWNlICpkMSwgc3RydWN0IGNyeXB0b19kZXZp Y2UgKmQyKQ0KK3sNCisJaWYgKCFzdHJuY21wKGQxLT5uYW1lLCBkMi0+bmFtZSwgc2l6ZW9mKGQx LT5uYW1lKSkpDQorCQlyZXR1cm4gMTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIGNyZWF0ZV9kZXZpY2VfYXR0cmlidXRlcyhzdHJ1Y3QgY3J5cHRvX2RldmljZSAqZGV2KQ0K K3sNCisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmNsYXNzX2RldmljZSwgJmNsYXNz X2RldmljZV9hdHRyX3Nlc3Npb25zKTsNCisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYt PmNsYXNzX2RldmljZSwgJmNsYXNzX2RldmljZV9hdHRyX25hbWUpOw0KKwljbGFzc19kZXZpY2Vf Y3JlYXRlX2ZpbGUoJmRldi0+Y2xhc3NfZGV2aWNlLCAmY2xhc3NfZGV2aWNlX2F0dHJfc2NvbXBs ZXRlZCk7DQorCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5jbGFzc19kZXZpY2UsICZj bGFzc19kZXZpY2VfYXR0cl9zc3RhcnRlZCk7DQorCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgm ZGV2LT5jbGFzc19kZXZpY2UsICZjbGFzc19kZXZpY2VfYXR0cl9zZmluaXNoZWQpOw0KKwljbGFz c19kZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+Y2xhc3NfZGV2aWNlLCAmY2xhc3NfZGV2aWNlX2F0 dHJfa21lbV9mYWlsZWQpOw0KK30NCisNCitzdGF0aWMgdm9pZCByZW1vdmVfZGV2aWNlX2F0dHJp YnV0ZXMoc3RydWN0IGNyeXB0b19kZXZpY2UgKmRldikNCit7DQorCWNsYXNzX2RldmljZV9yZW1v dmVfZmlsZSgmZGV2LT5jbGFzc19kZXZpY2UsICZjbGFzc19kZXZpY2VfYXR0cl9zZXNzaW9ucyk7 DQorCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5jbGFzc19kZXZpY2UsICZjbGFzc19k ZXZpY2VfYXR0cl9uYW1lKTsNCisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmNsYXNz X2RldmljZSwgJmNsYXNzX2RldmljZV9hdHRyX3Njb21wbGV0ZWQpOw0KKwljbGFzc19kZXZpY2Vf cmVtb3ZlX2ZpbGUoJmRldi0+Y2xhc3NfZGV2aWNlLCAmY2xhc3NfZGV2aWNlX2F0dHJfc3N0YXJ0 ZWQpOw0KKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+Y2xhc3NfZGV2aWNlLCAmY2xh c3NfZGV2aWNlX2F0dHJfc2ZpbmlzaGVkKTsNCisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZk ZXYtPmNsYXNzX2RldmljZSwgJmNsYXNzX2RldmljZV9hdHRyX2ttZW1fZmFpbGVkKTsNCit9DQor DQoraW50IF9fbWF0Y2hfaW5pdGlhbGl6ZXIoc3RydWN0IGNyeXB0b19jYXBhYmlsaXR5ICpjYXAs IHN0cnVjdCBjcnlwdG9fc2Vzc2lvbl9pbml0aWFsaXplciAqY2kpDQorew0KKwlpZiAoY2FwLT5v cGVyYXRpb24gPT0gY2ktPm9wZXJhdGlvbiAmJiBjYXAtPnR5cGUgPT0gY2ktPnR5cGUgJiYgDQor CQkJY2FwLT5tb2RlID09IChjaS0+bW9kZSAmIDB4MWZmZikpDQorCQlyZXR1cm4gMTsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtYXRjaF9pbml0aWFsaXplcihzdHJ1Y3QgY3J5cHRvX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgY3J5cHRvX3Nlc3Npb25faW5pdGlhbGl6ZXIgKmNpKQ0KK3sNCisJ aW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNhcF9udW1iZXI7ICsraSkgew0KKwkJ c3RydWN0IGNyeXB0b19jYXBhYmlsaXR5ICpjYXAgPSAmZGV2LT5jYXBbaV07DQorDQorCQlpZiAo X19tYXRjaF9pbml0aWFsaXplcihjYXAsIGNpKSkgew0KKwkJCWlmIChjYXAtPnFsZW4gPj0gYXRv bWljX3JlYWQoJmRldi0+cmVmY250KSArIDEpIHsNCisJCQkJZHByaW50aygiY2FwLT5sZW49JXUs IHJlcT0ldS5cbiIsDQorCQkJCQljYXAtPnFsZW4sIGF0b21pY19yZWFkKCZkZXYtPnJlZmNudCkg KyAxKTsNCisJCQkJcmV0dXJuIDE7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCXJldHVybiAwOw0K K30NCisNCit2b2lkIGNyeXB0b19kZXZpY2VfZ2V0KHN0cnVjdCBjcnlwdG9fZGV2aWNlICpkZXYp DQorew0KKwlhdG9taWNfaW5jKCZkZXYtPnJlZmNudCk7DQorfQ0KKw0KK3N0cnVjdCBjcnlwdG9f ZGV2aWNlICpjcnlwdG9fZGV2aWNlX2dldF9uYW1lKGNoYXIgKm5hbWUpDQorew0KKwlzdHJ1Y3Qg Y3J5cHRvX2RldmljZSAqZGV2Ow0KKwlpbnQgZm91bmQgPSAwOw0KKw0KKwlzcGluX2xvY2tfaXJx KCZjZGV2X2xvY2spOw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNkZXZfbGlzdCwgY2Rl dl9lbnRyeSkgew0KKwkJaWYgKCFzdHJjbXAoZGV2LT5uYW1lLCBuYW1lKSkgew0KKwkJCWZvdW5k ID0gMTsNCisJCQljcnlwdG9fZGV2aWNlX2dldChkZXYpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9 DQorCXNwaW5fdW5sb2NrX2lycSgmY2Rldl9sb2NrKTsNCisNCisJaWYgKCFmb3VuZCkNCisJCXJl dHVybiBOVUxMOw0KKw0KKwlyZXR1cm4gZGV2Ow0KK30NCisNCit2b2lkIGNyeXB0b19kZXZpY2Vf cHV0KHN0cnVjdCBjcnlwdG9fZGV2aWNlICpkZXYpDQorew0KKwlhdG9taWNfZGVjKCZkZXYtPnJl ZmNudCk7DQorfQ0KKw0KK2ludCBfX2NyeXB0b19kZXZpY2VfYWRkKHN0cnVjdCBjcnlwdG9fZGV2 aWNlICpkZXYpDQorew0KKwlpbnQgZXJyOw0KKw0KKwltZW1zZXQoJmRldi0+c3RhdCwgMCwgc2l6 ZW9mKGRldi0+c3RhdCkpOw0KKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5zdGF0X2xvY2spOw0KKwlz cGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsNCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2Vzc2lv bl9sb2NrKTsNCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+c2Vzc2lvbl9saXN0KTsNCisJYXRvbWlj X3NldCgmZGV2LT5yZWZjbnQsIDApOw0KKwlkZXYtPnNpZCA9IDA7DQorCWRldi0+ZmxhZ3MgPSAw Ow0KKwlpbml0X2NvbXBsZXRpb24oJmRldi0+ZGV2X3JlbGVhc2VkKTsNCisJbWVtY3B5KCZkZXYt PmRldmljZSwgJmNyeXB0b19kZXYsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7DQorCWRldi0+ZHJp dmVyID0gJmNyeXB0b19kcml2ZXI7DQorDQorCXNucHJpbnRmKGRldi0+ZGV2aWNlLmJ1c19pZCwg c2l6ZW9mKGRldi0+ZGV2aWNlLmJ1c19pZCksICIlcyIsIGRldi0+bmFtZSk7DQorCWVyciA9IGRl dmljZV9yZWdpc3RlcigmZGV2LT5kZXZpY2UpOw0KKwlpZiAoZXJyKSB7DQorCQlkcHJpbnRrKEtF Uk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY3J5cHRvIGRldmljZSAlczogZXJyPSVkLlxuIiwN CisJCQlkZXYtPm5hbWUsIGVycik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCXNucHJpbnRm KGRldi0+Y2xhc3NfZGV2aWNlLmNsYXNzX2lkLCBzaXplb2YoZGV2LT5jbGFzc19kZXZpY2UuY2xh c3NfaWQpLCAiJXMiLCBkZXYtPm5hbWUpOw0KKwlkZXYtPmNsYXNzX2RldmljZS5kZXYgPSAmZGV2 LT5kZXZpY2U7DQorCWRldi0+Y2xhc3NfZGV2aWNlLmNsYXNzID0gJmNyeXB0b19jbGFzczsNCisN CisJZXJyID0gY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmNsYXNzX2RldmljZSk7DQorCWlm IChlcnIpIHsNCisJCWRwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjcnlwdG8g Y2xhc3MgZGV2aWNlICVzOiBlcnI9JWQuXG4iLA0KKwkJCWRldi0+bmFtZSwgZXJyKTsNCisJCWRl dmljZV91bnJlZ2lzdGVyKCZkZXYtPmRldmljZSk7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQor CWNyZWF0ZV9kZXZpY2VfYXR0cmlidXRlcyhkZXYpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor dm9pZCBfX2NyeXB0b19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBjcnlwdG9fZGV2aWNlICpkZXYpDQor ew0KKwlyZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoZGV2KTsNCisJY2xhc3NfZGV2aWNlX3VucmVn aXN0ZXIoJmRldi0+Y2xhc3NfZGV2aWNlKTsNCisJZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+ZGV2 aWNlKTsNCit9DQorDQoraW50IGNyeXB0b19kZXZpY2VfYWRkKHN0cnVjdCBjcnlwdG9fZGV2aWNl ICpkZXYpDQorew0KKwlpbnQgZXJyOw0KKw0KKwllcnIgPSBfX2NyeXB0b19kZXZpY2VfYWRkKGRl dik7DQorCWlmIChlcnIpDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlzcGluX2xvY2tfaXJxKCZjZGV2 X2xvY2spOw0KKwlsaXN0X2FkZCgmZGV2LT5jZGV2X2VudHJ5LCAmY2Rldl9saXN0KTsNCisJZGV2 LT5pZCA9ICsrY2Rldl9pZHM7DQorCXNwaW5fdW5sb2NrX2lycSgmY2Rldl9sb2NrKTsNCisNCisJ ZHByaW50ayhLRVJOX0lORk8gIkNyeXB0byBkZXZpY2UgJXMgd2FzIHJlZ2lzdGVyZWQgd2l0aCBJ RD0leC5cbiIsDQorCQlkZXYtPm5hbWUsIGRldi0+aWQpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQordm9pZCBjcnlwdG9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgY3J5cHRvX2RldmljZSAqZGV2KQ0K K3sNCisJc3RydWN0IGNyeXB0b19kZXZpY2UgKl9fZGV2LCAqbjsNCisNCisJX19jcnlwdG9fZGV2 aWNlX3JlbW92ZShkZXYpOw0KKw0KKwlzcGluX2xvY2tfaXJxKCZjZGV2X2xvY2spOw0KKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX19kZXYsIG4sICZjZGV2X2xpc3QsIGNkZXZfZW50cnkpIHsN CisJCWlmIChjb21wYXJlX2RldmljZShfX2RldiwgZGV2KSkgew0KKwkJCWxpc3RfZGVsX2luaXQo Jl9fZGV2LT5jZGV2X2VudHJ5KTsNCisJCQlzcGluX3VubG9ja19pcnEoJmNkZXZfbG9jayk7DQor DQorCQkJLyoNCisJCQkgKiBJbiB0ZXN0IGNhc2VzIG9yIHdoZW4gY3J5cHRvIGRldmljZSBkcml2 ZXIgaXMgbm90IHdyaXR0ZW4gY29ycmVjdGx5LA0KKwkJCSAqIGl0J3MgLT5kYXRhX3JlYWR5KCkg bWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlbiBhbnltb3JlDQorCQkJICogYWZ0ZXIgZGV2aWNlIGlz IHJlbW92ZWQgZnJvbSBjcnlwdG8gZGV2aWNlIGxpc3QuDQorCQkJICoNCisJCQkgKiBGb3Igc3Vj aCBjYXNlcyB3ZSBlaXRoZXIgc2hvdWxkIHByb3ZpZGUgLT5mbHVzaCgpIGNhbGwNCisJCQkgKiBv ciBwcm9wZXJseSB3cml0ZSAtPmRhdGFfcmVhZHkoKSBtZXRob2QuDQorCQkJICovDQorDQorCQkJ d2hpbGUgKGF0b21pY19yZWFkKCZfX2Rldi0+cmVmY250KSkgew0KKw0KKwkJCQlkcHJpbnRrKEtF Uk5fSU5GTyAiV2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWU6IHJlZmNudD0lZC5cbiIsDQor CQkJCQlfX2Rldi0+bmFtZSwgYXRvbWljX3JlYWQoJmRldi0+cmVmY250KSk7DQorDQorCQkJCS8q DQorCQkJCSAqIEhhY2sgem9uZTogeW91IG5lZWQgdG8gd3JpdGUgZ29vZCAtPmRhdGFfcmVhZHko KQ0KKwkJCQkgKiBhbmQgY3J5cHRvIGRldmljZSBkcml2ZXIgaXRzZWxmLg0KKwkJCQkgKg0KKwkJ CQkgKiBEcml2ZXIgc2hvdWQgbm90IGJ1enogaWYgaXQgaGFzIHBlbmRpbmcgc2Vzc2lvbnMNCisJ CQkJICogaW4gaXQncyBxdWV1ZSBhbmQgaXQgd2FzIHJlbW92ZWQgZnJvbSBnbG9iYWwgZGV2aWNl IGxpc3QuDQorCQkJCSAqDQorCQkJCSAqIEFsdGhvdWdoIEkgY2FuIHdvcmthcm91bmQgaXQgaGVy ZSwgZm9yIGV4YW1wbGUgYnkNCisJCQkJICogZmx1c2hpbmcgdGhlIHdob2xlIHF1ZXVlIGFuZCBk cm9wIGFsbCBwZW5kaW5nIHNlc3Npb25zLg0KKwkJCQkgKi8NCisNCisJCQkJX19kZXYtPmRhdGFf cmVhZHkoX19kZXYpOw0KKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJM RSk7DQorCQkJCXNjaGVkdWxlX3RpbWVvdXQoSFopOw0KKwkJCX0NCisNCisJCQlkcHJpbnRrKEtF Uk5fRVJSICJDcnlwdG8gZGV2aWNlICVzIHdhcyB1bnJlZ2lzdGVyZWQuXG4iLA0KKwkJCQlkZXYt Pm5hbWUpOw0KKwkJCXJldHVybjsNCisJCX0NCisJfQ0KKwlzcGluX3VubG9ja19pcnEoJmNkZXZf bG9jayk7DQorDQorCWRwcmludGsoS0VSTl9FUlIgIkNyeXB0byBkZXZpY2UgJXMgd2FzIG5vdCBy ZWdpc3RlcmVkLlxuIiwgZGV2LT5uYW1lKTsNCit9DQorDQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5 cHRvX2RldmljZV9hZGQpOw0KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19kZXZpY2VfcmVtb3Zl KTsNCitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fZGV2aWNlX2dldCk7DQorRVhQT1JUX1NZTUJP TF9HUEwoY3J5cHRvX2RldmljZV9nZXRfbmFtZSk7DQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRv X2RldmljZV9wdXQpOw0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvY3J5cHRvX2xiLmMgbGludXgtMi42 L2RyaXZlcnMvYWNyeXB0by9jcnlwdG9fbGIuYw0KLS0tIC90bXAvZW1wdHkvY3J5cHRvX2xiLmMJ MTk3MC0wMS0wMSAwMzowMDowMC4wMDAwMDAwMDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVy cy9hY3J5cHRvL2NyeXB0b19sYi5jCTIwMDQtMTItMTQgMTg6NTM6MTEuMDAwMDAwMDAwICswMzAw DQpAQCAtMCwwICsxLDYzMSBAQA0KKy8qDQorICogCWNyeXB0b19sYi5jDQorICoNCisgKiBDb3B5 cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4NCisg KiANCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0K KyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwN CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24s IEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcg VVNBDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCisjaW5jbHVkZSA8 bGludXgvdHlwZXMuaD4NCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+DQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KKyNpbmNsdWRlIDxsaW51 eC9zcGlubG9jay5oPg0KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCisjaW5jbHVkZSA8 bGludXgvZXJyLmg+DQorDQorI2luY2x1ZGUgImFjcnlwdG8uaCINCisjaW5jbHVkZSAiY3J5cHRv X2xiLmgiDQorI2luY2x1ZGUgImNyeXB0b19zdGF0LmgiDQorI2luY2x1ZGUgImNyeXB0b19yb3V0 ZS5oIg0KKw0KK3N0YXRpYyBMSVNUX0hFQUQoY3J5cHRvX2xiX2xpc3QpOw0KK3N0YXRpYyBzcGlu bG9ja190IGNyeXB0b19sYl9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOw0KK3N0YXRpYyBpbnQg bGJfbnVtID0gMDsNCitzdGF0aWMgc3RydWN0IGNyeXB0b19sYiAqY3VycmVudF9sYiwgKmRlZmF1 bHRfbGI7DQorc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIHRocmVhZF9leGl0ZWQ7DQorc3RhdGlj IGludCBuZWVkX2V4aXQ7DQorc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjcnlwdG9f bGJfcXVldWU7DQorc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGNyeXB0b19sYl93YWl0 X3F1ZXVlKTsNCisNCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqY3J5cHRvX2RldmljZV9saXN0 Ow0KK2V4dGVybiBzcGlubG9ja190ICpjcnlwdG9fZGV2aWNlX2xvY2s7DQorDQorZXh0ZXJuIGlu dCBmb3JjZV9sYl9yZW1vdmU7DQorZXh0ZXJuIHN0cnVjdCBjcnlwdG9fZGV2aWNlIG1haW5fY3J5 cHRvX2RldmljZTsNCisNCitzdGF0aWMgaW50IGxiX2lzX2N1cnJlbnQoc3RydWN0IGNyeXB0b19s YiAqbCkNCit7DQorCXJldHVybiAobC0+Y3J5cHRvX2RldmljZV9saXN0ICE9IE5VTEwgJiYgbC0+ Y3J5cHRvX2RldmljZV9sb2NrICE9IE5VTEwpOw0KK30NCisNCitzdGF0aWMgaW50IGxiX2lzX2Rl ZmF1bHQoc3RydWN0IGNyeXB0b19sYiAqbCkNCit7DQorCXJldHVybiAobCA9PSBkZWZhdWx0X2xi KTsNCit9DQorDQorc3RhdGljIHZvaWQgX19sYl9zZXRfY3VycmVudChzdHJ1Y3QgY3J5cHRvX2xi ICpsKQ0KK3sNCisJc3RydWN0IGNyeXB0b19sYiAqYyA9IGN1cnJlbnRfbGI7DQorDQorCWlmIChj KSB7DQorCQlsLT5jcnlwdG9fZGV2aWNlX2xpc3QgPSBjcnlwdG9fZGV2aWNlX2xpc3Q7DQorCQls LT5jcnlwdG9fZGV2aWNlX2xvY2sgPSBjcnlwdG9fZGV2aWNlX2xvY2s7DQorCQljdXJyZW50X2xi ID0gbDsNCisJCWMtPmNyeXB0b19kZXZpY2VfbGlzdCA9IE5VTEw7DQorCQljLT5jcnlwdG9fZGV2 aWNlX2xvY2sgPSBOVUxMOw0KKwl9IGVsc2Ugew0KKwkJbC0+Y3J5cHRvX2RldmljZV9saXN0ID0g Y3J5cHRvX2RldmljZV9saXN0Ow0KKwkJbC0+Y3J5cHRvX2RldmljZV9sb2NrID0gY3J5cHRvX2Rl dmljZV9sb2NrOw0KKwkJY3VycmVudF9sYiA9IGw7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQg bGJfc2V0X2N1cnJlbnQoc3RydWN0IGNyeXB0b19sYiAqbCkNCit7DQorCXN0cnVjdCBjcnlwdG9f bGIgKmMgPSBjdXJyZW50X2xiOw0KKw0KKwlpZiAoYykgew0KKwkJc3Bpbl9sb2NrX2lycSgmYy0+ bG9jayk7DQorCQlfX2xiX3NldF9jdXJyZW50KGwpOw0KKwkJc3Bpbl91bmxvY2tfaXJxKCZjLT5s b2NrKTsNCisJfSBlbHNlDQorCQlfX2xiX3NldF9jdXJyZW50KGwpOw0KK30NCisNCitzdGF0aWMg dm9pZCBfX2xiX3NldF9kZWZhdWx0KHN0cnVjdCBjcnlwdG9fbGIgKmwpDQorew0KKwlkZWZhdWx0 X2xiID0gbDsNCit9DQorDQorc3RhdGljIHZvaWQgbGJfc2V0X2RlZmF1bHQoc3RydWN0IGNyeXB0 b19sYiAqbCkNCit7DQorCXN0cnVjdCBjcnlwdG9fbGIgKmMgPSBkZWZhdWx0X2xiOw0KKw0KKwlp ZiAoYykgew0KKwkJc3Bpbl9sb2NrX2lycSgmYy0+bG9jayk7DQorCQlfX2xiX3NldF9kZWZhdWx0 KGwpOw0KKwkJc3Bpbl91bmxvY2tfaXJxKCZjLT5sb2NrKTsNCisJfSBlbHNlDQorCQlfX2xiX3Nl dF9kZWZhdWx0KGwpOw0KK30NCisNCitzdGF0aWMgaW50IGNyeXB0b19sYl9tYXRjaChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpDQorew0KKwlyZXR1cm4gMTsN Cit9DQorDQorc3RhdGljIGludCBjcnlwdG9fbGJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQ0K K3sNCisJcmV0dXJuIC1FTk9ERVY7DQorfQ0KKw0KK3N0YXRpYyBpbnQgY3J5cHRvX2xiX3JlbW92 ZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZv aWQgY3J5cHRvX2xiX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGNy eXB0b19sYiAqZCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcnlwdG9fbGIsIGRldmljZSk7 DQorDQorCWNvbXBsZXRlKCZkLT5kZXZfcmVsZWFzZWQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBj cnlwdG9fbGJfY2xhc3NfcmVsZWFzZShzdHJ1Y3QgY2xhc3MgKmNsYXNzKQ0KK3sNCit9DQorDQor c3RhdGljIHZvaWQgY3J5cHRvX2xiX2NsYXNzX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBjbGFzc19k ZXZpY2UgKmNsYXNzX2RldikNCit7DQorfQ0KKw0KK3N0cnVjdCBjbGFzcyBjcnlwdG9fbGJfY2xh c3MgPSB7DQorCS5uYW1lIAkJPSAiY3J5cHRvX2xiIiwNCisJLmNsYXNzX3JlbGVhc2UgCT0gY3J5 cHRvX2xiX2NsYXNzX3JlbGVhc2UsDQorCS5yZWxlYXNlIAk9IGNyeXB0b19sYl9jbGFzc19yZWxl YXNlX2RldmljZQ0KK307DQorDQorc3RydWN0IGJ1c190eXBlIGNyeXB0b19sYl9idXNfdHlwZSA9 IHsNCisJLm5hbWUgCQk9ICJjcnlwdG9fbGIiLA0KKwkubWF0Y2ggCQk9IGNyeXB0b19sYl9tYXRj aA0KK307DQorDQorc3RydWN0IGRldmljZV9kcml2ZXIgY3J5cHRvX2xiX2RyaXZlciA9IHsNCisJ Lm5hbWUgCQk9ICJjcnlwdG9fbGJfZHJpdmVyIiwNCisJLmJ1cyAJCT0gJmNyeXB0b19sYl9idXNf dHlwZSwNCisJLnByb2JlIAkJPSBjcnlwdG9fbGJfcHJvYmUsDQorCS5yZW1vdmUgCT0gY3J5cHRv X2xiX3JlbW92ZSwNCit9Ow0KKw0KK3N0cnVjdCBkZXZpY2UgY3J5cHRvX2xiX2RldiA9IHsNCisJ LnBhcmVudCAJPSBOVUxMLA0KKwkuYnVzIAkJPSAmY3J5cHRvX2xiX2J1c190eXBlLA0KKwkuYnVz X2lkIAk9ICJjcnlwdG8gbG9hZCBiYWxhbmNlciIsDQorCS5kcml2ZXIgCT0gJmNyeXB0b19sYl9k cml2ZXIsDQorCS5yZWxlYXNlIAk9ICZjcnlwdG9fbGJfcmVsZWFzZQ0KK307DQorDQorc3RhdGlj IHNzaXplX3QgbmFtZV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQ0K K3sNCisJc3RydWN0IGNyeXB0b19sYiAqbGIgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgY3J5 cHRvX2xiLCBjbGFzc19kZXZpY2UpOw0KKw0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwg bGItPm5hbWUpOw0KK30NCisNCitzdGF0aWMgc3NpemVfdCBjdXJyZW50X3Nob3coc3RydWN0IGNs YXNzX2RldmljZSAqZGV2LCBjaGFyICpidWYpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX2xiICpsYjsN CisJaW50IG9mZiA9IDA7DQorDQorCXNwaW5fbG9ja19pcnEoJmNyeXB0b19sYl9sb2NrKTsNCisN CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsYiwgJmNyeXB0b19sYl9saXN0LCBsYl9lbnRyeSkgew0K KwkJaWYgKGxiX2lzX2N1cnJlbnQobGIpKQ0KKwkJCW9mZiArPSBzcHJpbnRmKGJ1ZiArIG9mZiwg IlsiKTsNCisJCWlmIChsYl9pc19kZWZhdWx0KGxiKSkNCisJCQlvZmYgKz0gc3ByaW50ZihidWYg KyBvZmYsICIoIik7DQorCQlvZmYgKz0gc3ByaW50ZihidWYgKyBvZmYsICIlcyIsIGxiLT5uYW1l KTsNCisJCWlmIChsYl9pc19kZWZhdWx0KGxiKSkNCisJCQlvZmYgKz0gc3ByaW50ZihidWYgKyBv ZmYsICIpIik7DQorCQlpZiAobGJfaXNfY3VycmVudChsYikpDQorCQkJb2ZmICs9IHNwcmludGYo YnVmICsgb2ZmLCAiXSIpOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2lycSgmY3J5cHRvX2xiX2xv Y2spOw0KKw0KKwlpZiAoIW9mZikNCisJCW9mZiA9IHNwcmludGYoYnVmLCAiTm8gbG9hZCBiYWxh bmNlcnMgcmVnaXRlcmVkIHlldC4iKTsNCisNCisJb2ZmICs9IHNwcmludGYoYnVmICsgb2ZmLCAi XG4iKTsNCisNCisJcmV0dXJuIG9mZjsNCit9DQorc3RhdGljIHNzaXplX3QgY3VycmVudF9zdG9y ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50 KQ0KK3sNCisJc3RydWN0IGNyeXB0b19sYiAqbGI7DQorDQorCXNwaW5fbG9ja19pcnEoJmNyeXB0 b19sYl9sb2NrKTsNCisNCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsYiwgJmNyeXB0b19sYl9saXN0 LCBsYl9lbnRyeSkgew0KKwkJaWYgKGNvdW50ID09IHN0cmxlbihsYi0+bmFtZSkgJiYgIXN0cmNt cChidWYsIGxiLT5uYW1lKSkgew0KKwkJCWxiX3NldF9jdXJyZW50KGxiKTsNCisJCQlsYl9zZXRf ZGVmYXVsdChsYik7DQorDQorCQkJZHByaW50ayhLRVJOX0lORk8gIkxvYWQgYmFsYW5jZXIgJXMg aXMgc2V0IGFzIGN1cnJlbnQgYW5kIGRlZmF1bHQuXG4iLA0KKwkJCQlsYi0+bmFtZSk7DQorDQor CQkJYnJlYWs7DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tfaXJxKCZjcnlwdG9fbGJfbG9jayk7 DQorDQorCXJldHVybiBjb3VudDsNCit9DQorDQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG5h bWUsIDA0NDQsIG5hbWVfc2hvdywgTlVMTCk7DQorQ0xBU1NfREVWSUNFX0FUVFIobGJzLCAwNjQ0 LCBjdXJyZW50X3Nob3csIGN1cnJlbnRfc3RvcmUpOw0KKw0KK3N0YXRpYyB2b2lkIGNyZWF0ZV9k ZXZpY2VfYXR0cmlidXRlcyhzdHJ1Y3QgY3J5cHRvX2xiICpsYikNCit7DQorCWNsYXNzX2Rldmlj ZV9jcmVhdGVfZmlsZSgmbGItPmNsYXNzX2RldmljZSwgJmNsYXNzX2RldmljZV9hdHRyX25hbWUp Ow0KK30NCisNCitzdGF0aWMgdm9pZCByZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMoc3RydWN0IGNy eXB0b19sYiAqbGIpDQorew0KKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoJmxiLT5jbGFzc19k ZXZpY2UsICZjbGFzc19kZXZpY2VfYXR0cl9uYW1lKTsNCit9DQorDQorc3RhdGljIGludCBjb21w YXJlX2xiKHN0cnVjdCBjcnlwdG9fbGIgKmwxLCBzdHJ1Y3QgY3J5cHRvX2xiICpsMikNCit7DQor CWlmICghc3RybmNtcChsMS0+bmFtZSwgbDItPm5hbWUsIHNpemVvZihsMS0+bmFtZSkpKQ0KKwkJ cmV0dXJuIDE7DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIGNyeXB0b19sYl9yZWhhc2go dm9pZCkNCit7DQorCWlmICghY3VycmVudF9sYikNCisJCXJldHVybjsNCisNCisJc3Bpbl9sb2Nr X2lycSgmY3VycmVudF9sYi0+bG9jayk7DQorDQorCWN1cnJlbnRfbGItPnJlaGFzaChjdXJyZW50 X2xiKTsNCisNCisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50X2xiLT5sb2NrKTsNCisNCisJd2Fr ZV91cF9pbnRlcnJ1cHRpYmxlKCZjcnlwdG9fbGJfd2FpdF9xdWV1ZSk7DQorfQ0KKw0KK3N0cnVj dCBjcnlwdG9fZGV2aWNlICpjcnlwdG9fbGJfZmluZF9kZXZpY2Uoc3RydWN0IGNyeXB0b19zZXNz aW9uX2luaXRpYWxpemVyICpjaSwgc3RydWN0IGNyeXB0b19kYXRhICpkYXRhKQ0KK3sNCisJc3Ry dWN0IGNyeXB0b19kZXZpY2UgKmRldjsNCisNCisJaWYgKCFjdXJyZW50X2xiKQ0KKwkJcmV0dXJu IE5VTEw7DQorDQorCWlmIChzY2lfYmluZGVkKGNpKSkgew0KKwkJaW50IGZvdW5kID0gMDsNCisN CisJCXNwaW5fbG9ja19pcnEoY3J5cHRvX2RldmljZV9sb2NrKTsNCisNCisJCWxpc3RfZm9yX2Vh Y2hfZW50cnkoZGV2LCBjcnlwdG9fZGV2aWNlX2xpc3QsIGNkZXZfZW50cnkpIHsNCisJCQlpZiAo ZGV2LT5pZCA9PSBjaS0+YmRldikgew0KKwkJCQlmb3VuZCA9IDE7DQorCQkJCWJyZWFrOw0KKwkJ CX0NCisJCX0NCisNCisJCXNwaW5fdW5sb2NrX2lycShjcnlwdG9fZGV2aWNlX2xvY2spOw0KKw0K KwkJcmV0dXJuIChmb3VuZCkgPyBkZXYgOiBOVUxMOw0KKwl9DQorDQorCXNwaW5fbG9ja19pcnEo JmN1cnJlbnRfbGItPmxvY2spOw0KKw0KKwljdXJyZW50X2xiLT5yZWhhc2goY3VycmVudF9sYik7 DQorDQorCXNwaW5fbG9jayhjcnlwdG9fZGV2aWNlX2xvY2spOw0KKw0KKwlkZXYgPSBjdXJyZW50 X2xiLT5maW5kX2RldmljZShjdXJyZW50X2xiLCBjaSwgZGF0YSk7DQorCWlmIChkZXYpDQorCQlj cnlwdG9fZGV2aWNlX2dldChkZXYpOw0KKw0KKwlzcGluX3VubG9jayhjcnlwdG9fZGV2aWNlX2xv Y2spOw0KKw0KKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnRfbGItPmxvY2spOw0KKw0KKwl3YWtl X3VwX2ludGVycnVwdGlibGUoJmNyeXB0b19sYl93YWl0X3F1ZXVlKTsNCisNCisJcmV0dXJuIGRl djsNCit9DQorDQorc3RhdGljIGludCBfX2NyeXB0b19sYl9yZWdpc3RlcihzdHJ1Y3QgY3J5cHRv X2xiICpsYikNCit7DQorCWludCBlcnI7DQorDQorCXNwaW5fbG9ja19pbml0KCZsYi0+bG9jayk7 DQorDQorCWluaXRfY29tcGxldGlvbigmbGItPmRldl9yZWxlYXNlZCk7DQorCW1lbWNweSgmbGIt PmRldmljZSwgJmNyeXB0b19sYl9kZXYsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7DQorCWxiLT5k cml2ZXIgPSAmY3J5cHRvX2xiX2RyaXZlcjsNCisNCisJc25wcmludGYobGItPmRldmljZS5idXNf aWQsIHNpemVvZihsYi0+ZGV2aWNlLmJ1c19pZCksICIlcyIsIGxiLT5uYW1lKTsNCisJZXJyID0g ZGV2aWNlX3JlZ2lzdGVyKCZsYi0+ZGV2aWNlKTsNCisJaWYgKGVycikgew0KKwkJZHByaW50ayhL RVJOX0VSUg0KKwkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgY3J5cHRvIGxvYWQgYmFsYW5jZXIgZGV2 aWNlICVzOiBlcnI9JWQuXG4iLA0KKwkJCWxiLT5uYW1lLCBlcnIpOw0KKwkJcmV0dXJuIGVycjsN CisJfQ0KKw0KKwlzbnByaW50ZihsYi0+Y2xhc3NfZGV2aWNlLmNsYXNzX2lkLCBzaXplb2YobGIt PmNsYXNzX2RldmljZS5jbGFzc19pZCksICIlcyIsIGxiLT5uYW1lKTsNCisJbGItPmNsYXNzX2Rl dmljZS5kZXYgPSAmbGItPmRldmljZTsNCisJbGItPmNsYXNzX2RldmljZS5jbGFzcyA9ICZjcnlw dG9fbGJfY2xhc3M7DQorDQorCWVyciA9IGNsYXNzX2RldmljZV9yZWdpc3RlcigmbGItPmNsYXNz X2RldmljZSk7DQorCWlmIChlcnIpIHsNCisJCWRwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBy ZWdpc3RlciBjcnlwdG8gbG9hZCBiYWxhbmNlciBjbGFzcyBkZXZpY2UgJXM6IGVycj0lZC5cbiIs DQorCQkJbGItPm5hbWUsIGVycik7DQorCQlkZXZpY2VfdW5yZWdpc3RlcigmbGItPmRldmljZSk7 DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWNyZWF0ZV9kZXZpY2VfYXR0cmlidXRlcyhsYik7 DQorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3J5cHRvX2xiX3dhaXRfcXVldWUpOw0KKw0KKwly ZXR1cm4gMDsNCisNCit9DQorDQorc3RhdGljIHZvaWQgX19jcnlwdG9fbGJfdW5yZWdpc3Rlcihz dHJ1Y3QgY3J5cHRvX2xiICpsYikNCit7DQorCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3J5cHRv X2xiX3dhaXRfcXVldWUpOw0KKwlyZW1vdmVfZGV2aWNlX2F0dHJpYnV0ZXMobGIpOw0KKwljbGFz c19kZXZpY2VfdW5yZWdpc3RlcigmbGItPmNsYXNzX2RldmljZSk7DQorCWRldmljZV91bnJlZ2lz dGVyKCZsYi0+ZGV2aWNlKTsNCit9DQorDQoraW50IGNyeXB0b19sYl9yZWdpc3RlcihzdHJ1Y3Qg Y3J5cHRvX2xiICpsYiwgaW50IHNldF9jdXJyZW50LCBpbnQgc2V0X2RlZmF1bHQpDQorew0KKwlz dHJ1Y3QgY3J5cHRvX2xiICpfX2xiOw0KKwlpbnQgZXJyOw0KKw0KKwlzcGluX2xvY2tfaXJxKCZj cnlwdG9fbGJfbG9jayk7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoX19sYiwgJmNyeXB0b19s Yl9saXN0LCBsYl9lbnRyeSkgew0KKwkJaWYgKHVubGlrZWx5KGNvbXBhcmVfbGIoX19sYiwgbGIp KSkgew0KKwkJCXNwaW5fdW5sb2NrX2lycSgmY3J5cHRvX2xiX2xvY2spOw0KKw0KKwkJCWRwcmlu dGsoS0VSTl9FUlIgIkNyeXB0byBsb2FkIGJhbGFuY2VyICVzIGlzIGFscmVhZHkgcmVnaXN0ZXJl ZC5cbiIsDQorCQkJCWxiLT5uYW1lKTsNCisJCQlyZXR1cm4gLUVJTlZBTDsNCisJCX0NCisJfQ0K Kw0KKwlsaXN0X2FkZCgmbGItPmxiX2VudHJ5LCAmY3J5cHRvX2xiX2xpc3QpOw0KKw0KKwlzcGlu X3VubG9ja19pcnEoJmNyeXB0b19sYl9sb2NrKTsNCisNCisJZXJyID0gX19jcnlwdG9fbGJfcmVn aXN0ZXIobGIpOw0KKwlpZiAoZXJyKSB7DQorCQlzcGluX2xvY2tfaXJxKCZjcnlwdG9fbGJfbG9j ayk7DQorCQlsaXN0X2RlbF9pbml0KCZsYi0+bGJfZW50cnkpOw0KKwkJc3Bpbl91bmxvY2tfaXJx KCZjcnlwdG9fbGJfbG9jayk7DQorDQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCWlmICghZGVm YXVsdF9sYiB8fCBzZXRfZGVmYXVsdCkNCisJCWxiX3NldF9kZWZhdWx0KGxiKTsNCisNCisJaWYg KCFjdXJyZW50X2xiIHx8IHNldF9jdXJyZW50KQ0KKwkJbGJfc2V0X2N1cnJlbnQobGIpOw0KKw0K KwlkcHJpbnRrKEtFUk5fSU5GTyAiQ3J5cHRvIGxvYWQgYmFsYW5jZXIgJXMgd2FzIHJlZ2lzdGVy ZWQgYW5kIHNldCB0byBiZSBbJXMuJXNdLlxuIiwNCisJCWxiLT5uYW1lLCAobGJfaXNfY3VycmVu dChsYikpID8gImN1cnJlbnQiIDogIm5vdCBjdXJyZW50IiwNCisJCShsYl9pc19kZWZhdWx0KGxi KSkgPyAiZGVmYXVsdCIgOiAibm90IGRlZmF1bHQiKTsNCisNCisJbGJfbnVtKys7DQorDQorCXJl dHVybiAwOw0KK30NCisNCit2b2lkIGNyeXB0b19sYl91bnJlZ2lzdGVyKHN0cnVjdCBjcnlwdG9f bGIgKmxiKQ0KK3sNCisJc3RydWN0IGNyeXB0b19sYiAqX19sYiwgKm47DQorDQorCWlmIChsYl9u dW0gPT0gMSkgew0KKwkJZHByaW50ayhLRVJOX0lORk8gIllvdSBhcmUgcmVtb3ZpbmcgY3J5cHRv IGxvYWQgYmFsYW5jZXIgJXMgd2hpY2ggaXMgY3VycmVudCBhbmQgZGVmYXVsdC5cbiINCisJCQki VGhlcmUgaXMgbm8gb3RoZXIgY3J5cHRvIGxvYWQgYmFsYW5jZXJzLiAiDQorCQkJIlJlbW92aW5n ICVzIGRlbGF5ZWQgdW50aWxsIG5ldyBsb2FkIGJhbGFuY2VyIGlzIHJlZ2lzdGVyZWQuXG4iLA0K KwkJCWxiLT5uYW1lLCAoZm9yY2VfbGJfcmVtb3ZlKSA/ICJpcyBub3QiIDogImlzIik7DQorCQl3 aGlsZSAobGJfbnVtID09IDEgJiYgIWZvcmNlX2xiX3JlbW92ZSkgew0KKwkJCXNldF9jdXJyZW50 X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7DQorCQkJc2NoZWR1bGVfdGltZW91dChIWik7DQor DQorCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQ0KKwkJCQlmbHVzaF9zaWduYWxzKGN1 cnJlbnQpOw0KKwkJfQ0KKwl9DQorDQorCV9fY3J5cHRvX2xiX3VucmVnaXN0ZXIobGIpOw0KKw0K KwlzcGluX2xvY2tfaXJxKCZjcnlwdG9fbGJfbG9jayk7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZShfX2xiLCBuLCAmY3J5cHRvX2xiX2xpc3QsIGxiX2VudHJ5KSB7DQorCQlpZiAoY29t cGFyZV9sYihfX2xiLCBsYikpIHsNCisJCQlsYl9udW0tLTsNCisJCQlsaXN0X2RlbF9pbml0KCZf X2xiLT5sYl9lbnRyeSk7DQorDQorCQkJZHByaW50ayhLRVJOX0VSUiAiQ3J5cHRvIGxvYWQgYmFs YW5jZXIgJXMgd2FzIHVucmVnaXN0ZXJlZC5cbiIsDQorCQkJCWxiLT5uYW1lKTsNCisJCX0gZWxz ZSBpZiAobGJfbnVtKSB7DQorCQkJaWYgKGxiX2lzX2RlZmF1bHQobGIpKQ0KKwkJCQlsYl9zZXRf ZGVmYXVsdChfX2xiKTsNCisJCQlpZiAobGJfaXNfY3VycmVudChsYikpDQorCQkJCWxiX3NldF9j dXJyZW50KGRlZmF1bHRfbGIpOw0KKwkJfQ0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2lycSgmY3J5 cHRvX2xiX2xvY2spOw0KK30NCisNCitzdGF0aWMgdm9pZCBjcnlwdG9fbGJfcXVldWVfd3JhcHBl cih2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IGNyeXB0b19kZXZpY2UgKmRldiA9ICZtYWluX2Ny eXB0b19kZXZpY2U7DQorCXN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqcyA9IChzdHJ1Y3QgY3J5cHRv X3Nlc3Npb24gKilkYXRhOw0KKw0KKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENhbGxpbmcgY2Fs bGJhY2sgZm9yIHNlc3Npb24gJWxsdSBbJWxsdV0gZmxhZ3M9JXgsICINCisJCSJvcD0lMDR1LCB0 eXBlPSUwNHgsIG1vZGU9JTA0eCwgcHJpb3JpdHk9JTA0eFxuIiwgX19mdW5jX18sDQorCQlzLT5j aS5pZCwgcy0+Y2kuZGV2X2lkLCBzLT5jaS5mbGFncywgcy0+Y2kub3BlcmF0aW9uLA0KKwkJcy0+ Y2kudHlwZSwgcy0+Y2kubW9kZSwgcy0+Y2kucHJpb3JpdHkpOw0KKw0KKwlzcGluX2xvY2tfaXJx KCZzLT5sb2NrKTsNCisJY3J5cHRvX3N0YXRfZmluaXNoX2luYyhzKTsNCisNCisJZmluaXNoX3Nl c3Npb24ocyk7DQorCXVuc3RhcnRfc2Vzc2lvbihzKTsNCisJc3Bpbl91bmxvY2tfaXJxKCZzLT5s b2NrKTsNCisNCisJcy0+Y2kuY2FsbGJhY2soJnMtPmNpLCAmcy0+ZGF0YSk7DQorDQorCWlmIChz ZXNzaW9uX2ZpbmlzaGVkKHMpKSB7DQorCQlrZnJlZShzKTsNCisJCXJldHVybjsNCisJfSBlbHNl IHsNCisJCS8qDQorCQkgKiBTcGVjaWFsIGNhc2U6IGNyeXB0byBjb25zdW1lciBtYXJrcyBzZXNz aW9uIGFzICJub3QgZmluaXNoZWQiDQorCQkgKiBpbiBpdCdzIGNhbGxiYWNrIC0gaXQgbWVhbnMg dGhhdCBjcnlwdG8gY29uc3VtZXIgd2FudHMgDQorCQkgKiB0aGlzIHNlc3Npb24gdG8gYmUgcHJv Y2Vzc2VkIGZ1cnRoZXIsIA0KKwkJICogZm9yIGV4YW1wbGUgY3J5cHRvIGNvbnN1bWVyIGNhbiBh ZGQgbmV3IHJvdXRlIGFuZCB0aGVuDQorCQkgKiBtYXJrIHNlc3Npb24gYXMgIm5vdCBmaW5pc2hl ZCIuDQorCQkgKi8NCisNCisJCXVuY29tcGxldGVfc2Vzc2lvbihzKTsNCisJCXVuc3RhcnRfc2Vz c2lvbihzKTsNCisJCWNyeXB0b19zZXNzaW9uX2luc2VydF9tYWluKGRldiwgcyk7DQorCX0NCisJ c3Bpbl91bmxvY2tfaXJxKCZzLT5sb2NrKTsNCit9DQorDQorc3RhdGljIHZvaWQgY3J5cHRvX2xi X3Byb2Nlc3NfbmV4dF9yb3V0ZShzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24gKnMpDQorew0KKwlzdHJ1 Y3QgY3J5cHRvX3JvdXRlICpydDsNCisJc3RydWN0IGNyeXB0b19kZXZpY2UgKmRldjsNCisNCisJ cnQgPSBjcnlwdG9fcm91dGVfZGVxdWV1ZShzKTsNCisJaWYgKHJ0KSB7DQorCQlkZXYgPSBydC0+ ZGV2Ow0KKw0KKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5zZXNzaW9uX2xvY2spOw0KKwkJbGlzdF9k ZWxfaW5pdCgmcy0+ZGV2X3F1ZXVlX2VudHJ5KTsNCisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5z ZXNzaW9uX2xvY2spOw0KKw0KKwkJY3J5cHRvX3JvdXRlX2ZyZWUocnQpOw0KKw0KKwkJZGV2ID0g Y3J5cHRvX3JvdXRlX2dldF9jdXJyZW50X2RldmljZShzKTsNCisJCWlmIChkZXYpIHsNCisJCQlk cHJpbnRrKEtFUk5fSU5GTyAiJXM6IHByb2Nlc3NpbmcgbmV3IHJvdXRlIHRvICVzLlxuIiwNCisJ CQkJX19mdW5jX18sIGRldi0+bmFtZSk7DQorDQorCQkJbWVtY3B5KCZzLT5jaSwgJnJ0LT5jaSwg c2l6ZW9mKHMtPmNpKSk7DQorCQkJY3J5cHRvX3Nlc3Npb25faW5zZXJ0KGRldiwgcyk7DQorDQor CQkJLyoNCisJCQkgKiBSZWZlcmVuY2UgdG8gdGhpcyBkZXZpY2Ugd2FzIGFscmVhZHkgaG9sZCB3 aGVuDQorCQkJICogbmV3IHJvdXRpbmcgd2FzIGFkZGVkLg0KKwkJCSAqLw0KKwkJCWNyeXB0b19k ZXZpY2VfcHV0KGRldik7DQorCQl9DQorCX0NCit9DQorDQordm9pZCBjcnlwdG9fd2FrZV9sYih2 b2lkKQ0KK3sNCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjcnlwdG9fbGJfd2FpdF9xdWV1ZSk7 DQorfQ0KKw0KK2ludCBjcnlwdG9fbGJfdGhyZWFkKHZvaWQgKmRhdGEpDQorew0KKwlzdHJ1Y3Qg Y3J5cHRvX3Nlc3Npb24gKnMsICpuOw0KKwlzdHJ1Y3QgY3J5cHRvX2RldmljZSAqZGV2ID0gKHN0 cnVjdCBjcnlwdG9fZGV2aWNlICopZGF0YTsNCisNCisJZGFlbW9uaXplKCIlcyIsIGRldi0+bmFt ZSk7DQorCWFsbG93X3NpZ25hbChTSUdURVJNKTsNCisNCisJd2hpbGUgKCFuZWVkX2V4aXQpIHsN CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzLCBuLCAmZGV2LT5zZXNzaW9uX2xpc3QsDQor CQkJCQkgbWFpbl9xdWV1ZV9lbnRyeSkgew0KKwkJCWRwcmludGsoInNlc3Npb24gJWxsdSBbJWxs dV06IGZsYWdzPSV4LCByb3V0ZV9udW09JWQsICVzLCVzLCVzLCVzLlxuIiwNCisJCQkgICAgIHMt PmNpLmlkLCBzLT5jaS5kZXZfaWQsIHMtPmNpLmZsYWdzLA0KKwkJCSAgICAgY3J5cHRvX3JvdXRl X3F1ZXVlX2xlbihzKSwNCisJCQkgICAgIChzZXNzaW9uX2NvbXBsZXRlZChzKSkgPyAiY29tcGxl dGVkIiA6ICJub3QgY29tcGxldGVkIiwNCisJCQkgICAgIChzZXNzaW9uX2ZpbmlzaGVkKHMpKSA/ ICJmaW5pc2hlZCIgOiAibm90IGZpbmlzaGVkIiwNCisJCQkgICAgIChzZXNzaW9uX3N0YXJ0ZWQo cykpID8gInN0YXJ0ZWQiIDogIm5vdCBzdGFydGVkIiwNCisJCQkgICAgIChzZXNzaW9uX2lzX3By b2Nlc3NlZChzKSkgPyAiaXMgYmVpbmcgcHJvY2Vzc2VkIiA6ICJpcyBub3QgYmVpbmcgcHJvY2Vz c2VkIik7DQorDQorCQkJaWYgKCFzcGluX3RyeWxvY2soJnMtPmxvY2spKQ0KKwkJCQljb250aW51 ZTsNCisNCisJCQlpZiAoc2Vzc2lvbl9pc19wcm9jZXNzZWQocykpDQorCQkJCWdvdG8gdW5sb2Nr Ow0KKwkJCWlmIChzZXNzaW9uX3N0YXJ0ZWQocykpDQorCQkJCWdvdG8gdW5sb2NrOw0KKw0KKwkJ CWlmIChzZXNzaW9uX2NvbXBsZXRlZChzKSkgew0KKwkJCQljcnlwdG9fc3RhdF9wdGltZV9pbmMo cyk7DQorDQorCQkJCWlmIChjcnlwdG9fcm91dGVfcXVldWVfbGVuKHMpID4gMSkgew0KKwkJCQkJ Y3J5cHRvX2xiX3Byb2Nlc3NfbmV4dF9yb3V0ZShzKTsNCisJCQkJfSBlbHNlIHsNCisJCQkJCXN0 YXJ0X3Nlc3Npb24ocyk7DQorCQkJCQljcnlwdG9fc3RhdF9zdGFydF9pbmMocyk7DQorDQorCQkJ CQlkcHJpbnRrKCIlczogZ29pbmcgdG8gcmVtb3ZlIHNlc3Npb24gJWxsdSBbJWxsdV0uXG4iLA0K KwkJCQkJICAgICBfX2Z1bmNfXywgcy0+Y2kuaWQsIHMtPmNpLmRldl9pZCk7DQorDQorCQkJCQlj cnlwdG9fc2Vzc2lvbl9kZXF1ZXVlX21haW4ocyk7DQorCQkJCQlzcGluX3VubG9jaygmcy0+bG9j ayk7DQorDQorCQkJCQlJTklUX1dPUksoJnMtPndvcmssICZjcnlwdG9fbGJfcXVldWVfd3JhcHBl ciwgcyk7DQorCQkJCQlxdWV1ZV93b3JrKGNyeXB0b19sYl9xdWV1ZSwgJnMtPndvcmspOw0KKwkJ CQkJY29udGludWU7DQorCQkJCX0NCisJCQl9DQorCQkgICAgICB1bmxvY2s6DQorCQkJc3Bpbl91 bmxvY2soJnMtPmxvY2spOw0KKwkJfQ0KKw0KKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1l b3V0KCZjcnlwdG9fbGJfd2FpdF9xdWV1ZSwgMTAwKTsNCisJfQ0KKw0KKwlmbHVzaF93b3JrcXVl dWUoY3J5cHRvX2xiX3F1ZXVlKTsNCisJY29tcGxldGVfYW5kX2V4aXQoJnRocmVhZF9leGl0ZWQs IDApOw0KK30NCisNCitpbnQgY3J5cHRvX2xiX2luaXQodm9pZCkNCit7DQorCWludCBlcnI7DQor CWxvbmcgcGlkOw0KKw0KKwllcnIgPSBidXNfcmVnaXN0ZXIoJmNyeXB0b19sYl9idXNfdHlwZSk7 DQorCWlmIChlcnIpIHsNCisJCWRwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBj cnlwdG8gbG9hZCBiYWxhbmNlciBidXM6IGVycj0lZC5cbiIsIGVycik7DQorCQlnb3RvIGVycl9v dXRfZXhpdDsNCisJfQ0KKw0KKwllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmNyeXB0b19sYl9kcml2 ZXIpOw0KKwlpZiAoZXJyKSB7DQorCQlkcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0 ZXIgY3J5cHRvIGxvYWQgYmFsYW5jZXIgZHJpdmVyOiBlcnI9JWQuXG4iLCBlcnIpOw0KKwkJZ290 byBlcnJfb3V0X2J1c191bnJlZ2lzdGVyOw0KKwl9DQorDQorCWNyeXB0b19sYl9jbGFzcy5jbGFz c19kZXZfYXR0cnMgPSAmY2xhc3NfZGV2aWNlX2F0dHJfbGJzOw0KKw0KKwllcnIgPSBjbGFzc19y ZWdpc3RlcigmY3J5cHRvX2xiX2NsYXNzKTsNCisJaWYgKGVycikgew0KKwkJZHByaW50ayhLRVJO X0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNyeXB0byBsb2FkIGJhbGFuY2VyIGNsYXNzOiBlcnI9 JWQuXG4iLCBlcnIpOw0KKwkJZ290byBlcnJfb3V0X2RyaXZlcl91bnJlZ2lzdGVyOw0KKwl9DQor DQorCWNyeXB0b19sYl9xdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoImNsYnEiKTsNCisJaWYgKCFj cnlwdG9fbGJfcXVldWUpIHsNCisJCWRwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBjcmVhdGUg Y3J5cHRvIGxvYWQgYmFsYW5lciB3b3JrIHF1ZXVlLlxuIik7DQorCQlnb3RvIGVycl9vdXRfY2xh c3NfdW5yZWdpc3RlcjsNCisJfQ0KKw0KKwlpbml0X2NvbXBsZXRpb24oJnRocmVhZF9leGl0ZWQp Ow0KKwlwaWQgPSBrZXJuZWxfdGhyZWFkKGNyeXB0b19sYl90aHJlYWQsICZtYWluX2NyeXB0b19k ZXZpY2UsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMpOw0KKwlpZiAoSVNfRVJSKCh2b2lkICopcGlk KSkgew0KKwkJZHByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBrZXJuZWwgbG9hZCBi YWxhbmNpbmcgdGhyZWFkLlxuIik7DQorCQlnb3RvIGVycl9vdXRfZGVzdHJveV93b3JrcXVldWU7 DQorCX0NCisNCisJcmV0dXJuIDA7DQorDQorZXJyX291dF9kZXN0cm95X3dvcmtxdWV1ZToNCisJ ZGVzdHJveV93b3JrcXVldWUoY3J5cHRvX2xiX3F1ZXVlKTsNCitlcnJfb3V0X2NsYXNzX3VucmVn aXN0ZXI6DQorCWNsYXNzX3VucmVnaXN0ZXIoJmNyeXB0b19sYl9jbGFzcyk7DQorZXJyX291dF9k cml2ZXJfdW5yZWdpc3RlcjoNCisJZHJpdmVyX3VucmVnaXN0ZXIoJmNyeXB0b19sYl9kcml2ZXIp Ow0KK2Vycl9vdXRfYnVzX3VucmVnaXN0ZXI6DQorCWJ1c191bnJlZ2lzdGVyKCZjcnlwdG9fbGJf YnVzX3R5cGUpOw0KK2Vycl9vdXRfZXhpdDoNCisJcmV0dXJuIGVycjsNCit9DQorDQordm9pZCBj cnlwdG9fbGJfZmluaSh2b2lkKQ0KK3sNCisJbmVlZF9leGl0ID0gMTsNCisJd2FpdF9mb3JfY29t cGxldGlvbigmdGhyZWFkX2V4aXRlZCk7DQorCWZsdXNoX3dvcmtxdWV1ZShjcnlwdG9fbGJfcXVl dWUpOw0KKwlkZXN0cm95X3dvcmtxdWV1ZShjcnlwdG9fbGJfcXVldWUpOw0KKwljbGFzc191bnJl Z2lzdGVyKCZjcnlwdG9fbGJfY2xhc3MpOw0KKwlkcml2ZXJfdW5yZWdpc3RlcigmY3J5cHRvX2xi X2RyaXZlcik7DQorCWJ1c191bnJlZ2lzdGVyKCZjcnlwdG9fbGJfYnVzX3R5cGUpOw0KK30NCisN CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fbGJfcmVnaXN0ZXIpOw0KK0VYUE9SVF9TWU1CT0xf R1BMKGNyeXB0b19sYl91bnJlZ2lzdGVyKTsNCitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fbGJf cmVoYXNoKTsNCitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fbGJfZmluZF9kZXZpY2UpOw0KK0VY UE9SVF9TWU1CT0xfR1BMKGNyeXB0b193YWtlX2xiKTsNCkJpbmFyeSBmaWxlcyAvdG1wL2VtcHR5 Ly5jcnlwdG9fbGIuYy5zd24gYW5kIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vLmNyeXB0b19s Yi5jLnN3biBkaWZmZXINCkJpbmFyeSBmaWxlcyAvdG1wL2VtcHR5Ly5jcnlwdG9fbGIuYy5zd28g YW5kIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vLmNyeXB0b19sYi5jLnN3byBkaWZmZXINCkJp bmFyeSBmaWxlcyAvdG1wL2VtcHR5Ly5jcnlwdG9fbGIuYy5zd3AgYW5kIGxpbnV4LTIuNi9kcml2 ZXJzL2FjcnlwdG8vLmNyeXB0b19sYi5jLnN3cCBkaWZmZXINCmRpZmYgLU5ydSAvdG1wL2VtcHR5 L2NyeXB0b19sYi5oIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vY3J5cHRvX2xiLmgNCi0tLSAv dG1wL2VtcHR5L2NyeXB0b19sYi5oCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAw DQorKysgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by9jcnlwdG9fbGIuaAkyMDA0LTEyLTE0IDE4 OjUzOjExLjAwMDAwMDAwMCArMDMwMA0KQEAgLTAsMCArMSw2MiBAQA0KKy8qDQorICogCWNyeXB0 b19sYi5oDQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9o bnBvbEAya2EubWlwdC5ydT4NCisgKiANCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkNCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisg KiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC b3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQorICovDQorDQorI2lmbmRlZiBfX0NSWVBUT19MQl9I DQorI2RlZmluZSBfX0NSWVBUT19MQl9IDQorDQorI2luY2x1ZGUgImFjcnlwdG8uaCINCisNCisj ZGVmaW5lIENSWVBUT19MQl9OQU1FTEVOCTMyDQorDQorc3RydWN0IGNyeXB0b19sYiB7DQorCXN0 cnVjdCBsaXN0X2hlYWQgCWxiX2VudHJ5Ow0KKw0KKwljaGFyIAkJCW5hbWVbQ1JZUFRPX0xCX05B TUVMRU5dOw0KKw0KKwl2b2lkIAkJCSgqcmVoYXNoKShzdHJ1Y3QgY3J5cHRvX2xiICopOw0KKwlz dHJ1Y3QgY3J5cHRvX2RldmljZSAqCSgqZmluZF9kZXZpY2UpIChzdHJ1Y3QgY3J5cHRvX2xiICos DQorCQkJCQkJc3RydWN0IGNyeXB0b19zZXNzaW9uX2luaXRpYWxpemVyICosIA0KKwkJCQkJCXN0 cnVjdCBjcnlwdG9fZGF0YSAqKTsNCisNCisJc3BpbmxvY2tfdCAJCWxvY2s7DQorDQorCXNwaW5s b2NrX3QgCQkqY3J5cHRvX2RldmljZV9sb2NrOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIAkqY3J5cHRv X2RldmljZV9saXN0Ow0KKw0KKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAJKmRyaXZlcjsNCisJc3Ry dWN0IGRldmljZSAJCWRldmljZTsNCisJc3RydWN0IGNsYXNzX2RldmljZSAJY2xhc3NfZGV2aWNl Ow0KKwlzdHJ1Y3QgY29tcGxldGlvbiAJZGV2X3JlbGVhc2VkOw0KKw0KK307DQorDQoraW50IGNy eXB0b19sYl9yZWdpc3RlcihzdHJ1Y3QgY3J5cHRvX2xiICpsYiwgaW50IHNldF9jdXJyZW50LCBp bnQgc2V0X2RlZmF1bHQpOw0KK3ZvaWQgY3J5cHRvX2xiX3VucmVnaXN0ZXIoc3RydWN0IGNyeXB0 b19sYiAqKTsNCisNCitpbmxpbmUgdm9pZCBjcnlwdG9fbGJfcmVoYXNoKHZvaWQpOw0KK3N0cnVj dCBjcnlwdG9fZGV2aWNlICpjcnlwdG9fbGJfZmluZF9kZXZpY2Uoc3RydWN0IGNyeXB0b19zZXNz aW9uX2luaXRpYWxpemVyICosIHN0cnVjdCBjcnlwdG9fZGF0YSAqKTsNCisNCit2b2lkIGNyeXB0 b193YWtlX2xiKHZvaWQpOw0KKw0KK2ludCBjcnlwdG9fbGJfaW5pdCh2b2lkKTsNCit2b2lkIGNy eXB0b19sYl9maW5pKHZvaWQpOw0KKw0KKyNlbmRpZgkJCQkvKiBfX0NSWVBUT19MQl9IICovDQpk aWZmIC1OcnUgL3RtcC9lbXB0eS9jcnlwdG9fbWFpbi5jIGxpbnV4LTIuNi9kcml2ZXJzL2Fjcnlw dG8vY3J5cHRvX21haW4uYw0KLS0tIC90bXAvZW1wdHkvY3J5cHRvX21haW4uYwkxOTcwLTAxLTAx IDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8v Y3J5cHRvX21haW4uYwkyMDA0LTEyLTE0IDE4OjUzOjExLjAwMDAwMDAwMCArMDMwMA0KQEAgLTAs MCArMSwzNDAgQEANCisvKg0KKyAqIAljcnlwdG9fbWFpbi5jDQorICoNCisgKiBDb3B5cmlnaHQg KGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4NCisgKiANCisg Kg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAqIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUNCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4s IDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQor ICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCisjaW5jbHVkZSA8bGludXgv dHlwZXMuaD4NCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9zcGlu bG9jay5oPg0KKw0KKyNpbmNsdWRlICJhY3J5cHRvLmgiDQorI2luY2x1ZGUgImNyeXB0b19sYi5o Ig0KKyNpbmNsdWRlICJjcnlwdG9fY29ubi5oIg0KKyNpbmNsdWRlICJjcnlwdG9fcm91dGUuaCIN CisNCitpbnQgZm9yY2VfbGJfcmVtb3ZlOw0KK21vZHVsZV9wYXJhbShmb3JjZV9sYl9yZW1vdmUs IGludCwgMCk7DQorDQorc3RydWN0IGNyeXB0b19kZXZpY2UgbWFpbl9jcnlwdG9fZGV2aWNlOw0K Kw0KK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgY3J5cHRvX2J1c190eXBlOw0KK2V4dGVybiBzdHJ1 Y3QgZGV2aWNlX2RyaXZlciBjcnlwdG9fZHJpdmVyOw0KK2V4dGVybiBzdHJ1Y3QgY2xhc3MgY3J5 cHRvX2NsYXNzOw0KK2V4dGVybiBzdHJ1Y3QgZGV2aWNlIGNyeXB0b19kZXY7DQorDQorZXh0ZXJu IHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGNsYXNzX2RldmljZV9hdHRyX2RldmljZXM7 DQorZXh0ZXJuIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGNsYXNzX2RldmljZV9hdHRy X2xiczsNCisNCitzdGF0aWMgdm9pZCBkdW1wX2NpKHN0cnVjdCBjcnlwdG9fc2Vzc2lvbl9pbml0 aWFsaXplciAqY2kpDQorew0KKwlkcHJpbnRrKCIlbGx1IFslbGx1XSBvcD0lMDR1LCB0eXBlPSUw NHgsIG1vZGU9JTA0eCwgcHJpb3JpdHk9JTA0eCIsDQorCQljaS0+aWQsIGNpLT5kZXZfaWQsDQor CQljaS0+b3BlcmF0aW9uLCBjaS0+dHlwZSwgY2ktPm1vZGUsIGNpLT5wcmlvcml0eSk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIF9fY3J5cHRvX3Nlc3Npb25faW5zZXJ0KHN0cnVjdCBjcnlwdG9fZGV2 aWNlICpkZXYsIHN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqcykNCit7DQorCXN0cnVjdCBjcnlwdG9f c2Vzc2lvbiAqX19zOw0KKw0KKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZGV2LT5zZXNzaW9u X2xpc3QpKSkgew0KKwkJbGlzdF9hZGQoJnMtPmRldl9xdWV1ZV9lbnRyeSwgJmRldi0+c2Vzc2lv bl9saXN0KTsNCisJfSBlbHNlIHsNCisJCWludCBpbnNlcnRlZCA9IDA7DQorDQorCQlsaXN0X2Zv cl9lYWNoX2VudHJ5KF9fcywgJmRldi0+c2Vzc2lvbl9saXN0LCBkZXZfcXVldWVfZW50cnkpIHsN CisJCQlpZiAoX19zLT5jaS5wcmlvcml0eSA8IHMtPmNpLnByaW9yaXR5KSB7DQorCQkJCWxpc3Rf YWRkX3RhaWwoJnMtPmRldl9xdWV1ZV9lbnRyeSwgJl9fcy0+ZGV2X3F1ZXVlX2VudHJ5KTsNCisJ CQkJaW5zZXJ0ZWQgPSAxOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorDQorCQlpZiAoIWlu c2VydGVkKQ0KKwkJCWxpc3RfYWRkX3RhaWwoJnMtPmRldl9xdWV1ZV9lbnRyeSwgJmRldi0+c2Vz c2lvbl9saXN0KTsNCisJfQ0KKw0KKwlkdW1wX2NpKCZzLT5jaSk7DQorCWRwcmludGsoIiBhZGRl ZCB0byBjcnlwdG8gZGV2aWNlICVzIFslZF0uXG4iLCBkZXYtPm5hbWUsIGF0b21pY19yZWFkKCZk ZXYtPnJlZmNudCkpOw0KK30NCisNCit2b2lkIGNyeXB0b19zZXNzaW9uX2luc2VydF9tYWluKHN0 cnVjdCBjcnlwdG9fZGV2aWNlICpkZXYsIHN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqcykNCit7DQor CXN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqX19zOw0KKw0KKwlzcGluX2xvY2tfaXJxKCZkZXYtPnNl c3Npb25fbG9jayk7DQorDQorCWNyeXB0b19kZXZpY2VfZ2V0KGRldik7DQorCWlmICh1bmxpa2Vs eShsaXN0X2VtcHR5KCZkZXYtPnNlc3Npb25fbGlzdCkpKSB7DQorCQlsaXN0X2FkZCgmcy0+bWFp bl9xdWV1ZV9lbnRyeSwgJmRldi0+c2Vzc2lvbl9saXN0KTsNCisJfSBlbHNlIHsNCisJCWludCBp bnNlcnRlZCA9IDA7DQorDQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fcywgJmRldi0+c2Vzc2lv bl9saXN0LCBtYWluX3F1ZXVlX2VudHJ5KSB7DQorCQkJaWYgKF9fcy0+Y2kucHJpb3JpdHkgPCBz LT5jaS5wcmlvcml0eSkgew0KKwkJCQlsaXN0X2FkZF90YWlsKCZzLT5tYWluX3F1ZXVlX2VudHJ5 LA0KKwkJCQkJICAgICAgJl9fcy0+bWFpbl9xdWV1ZV9lbnRyeSk7DQorCQkJCWluc2VydGVkID0g MTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJaWYgKCFpbnNlcnRlZCkNCisJCQls aXN0X2FkZF90YWlsKCZzLT5tYWluX3F1ZXVlX2VudHJ5LCAmZGV2LT5zZXNzaW9uX2xpc3QpOw0K Kwl9DQorDQorCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5zZXNzaW9uX2xvY2spOw0KK30NCisNCit2 b2lkIGNyeXB0b19zZXNzaW9uX2luc2VydChzdHJ1Y3QgY3J5cHRvX2RldmljZSAqZGV2LCBzdHJ1 Y3QgY3J5cHRvX3Nlc3Npb24gKnMpDQorew0KKwlzcGluX2xvY2tfaXJxKCZkZXYtPnNlc3Npb25f bG9jayk7DQorCV9fY3J5cHRvX3Nlc3Npb25faW5zZXJ0KGRldiwgcyk7DQorCXNwaW5fdW5sb2Nr X2lycSgmZGV2LT5zZXNzaW9uX2xvY2spOw0KK30NCisNCitzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24g KmNyeXB0b19zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgY3J5cHRvX3Nlc3Npb25faW5pdGlhbGl6ZXIg KmNpLCBzdHJ1Y3QgY3J5cHRvX2RhdGEgKmQpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX2RldmljZSAq ZGV2ID0gJm1haW5fY3J5cHRvX2RldmljZTsNCisJc3RydWN0IGNyeXB0b19kZXZpY2UgKmxkZXY7 DQorCXN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqczsNCisJaW50IGVycjsNCisNCisJaWYgKGQtPnBy aXZfc2l6ZSA+IENSWVBUT19NQVhfUFJJVl9TSVpFKSB7DQorCQlkcHJpbnRrKCJwcml2X3NpemUg JXUgaXMgdG9vIGJpZywgbWF4aW11bSBhbGxvd2VkICV1LlxuIiwNCisJCQlkLT5wcml2X3NpemUs IENSWVBUT19NQVhfUFJJVl9TSVpFKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorCQ0KKwlsZGV2 ID0gY3J5cHRvX2xiX2ZpbmRfZGV2aWNlKGNpLCBkKTsNCisJaWYgKCFsZGV2KSB7DQorCQlkcHJp bnRrKCJDYW5ub3QgZmluZCBzdWl0YWJsZSBkZXZpY2UuXG4iKTsNCisJCXJldHVybiBOVUxMOw0K Kwl9DQorCQ0KKwlzID0ga21hbGxvYyhzaXplb2YoKnMpICsgZC0+cHJpdl9zaXplLCBHRlBfQVRP TUlDKTsNCisJaWYgKCFzKSB7DQorCQlsZGV2LT5zdGF0LmttZW1fZmFpbGVkKys7DQorCQlnb3Rv IGVycl9vdXRfZGV2aWNlX3B1dDsNCisJfQ0KKw0KKwltZW1zZXQocywgMHhBQiwgc2l6ZW9mKCpz KSk7DQorDQorCWNyeXB0b19yb3V0ZV9oZWFkX2luaXQoJnMtPnJvdXRlX2xpc3QpOw0KKwlJTklU X0xJU1RfSEVBRCgmcy0+ZGV2X3F1ZXVlX2VudHJ5KTsNCisJSU5JVF9MSVNUX0hFQUQoJnMtPm1h aW5fcXVldWVfZW50cnkpOw0KKw0KKwlzcGluX2xvY2tfaW5pdCgmcy0+bG9jayk7DQorDQorCW1l bWNweSgmcy0+Y2ksIGNpLCBzaXplb2Yocy0+Y2kpKTsNCisJbWVtY3B5KCZzLT5kYXRhLCBkLCBz aXplb2Yocy0+ZGF0YSkpOw0KKwlzLT5kYXRhLnByaXYgPSBzICsgMTsNCisJaWYgKGQtPnByaXZf c2l6ZSkgew0KKwkJcy0+ZGF0YS5wcml2ID0gcyArIDE7DQorCQlpZiAoZC0+cHJpdikNCisJCQlt ZW1jcHkocy0+ZGF0YS5wcml2LCBkLT5wcml2LCBkLT5wcml2X3NpemUpOw0KKwl9DQorDQorCXMt PmNpLmlkID0gZGV2LT5zaWQrKzsNCisJcy0+Y2kuZGV2X2lkID0gbGRldi0+c2lkKys7DQorCXMt PmNpLmZsYWdzID0gMDsNCisNCisJZXJyID0gY3J5cHRvX3JvdXRlX2FkZF9kaXJlY3QobGRldiwg cywgY2kpOw0KKwlpZiAoZXJyKSB7DQorCQlkcHJpbnRrKCJDYW4gbm90IGFkZCByb3V0ZSB0byBk ZXZpY2UgJXMuXG4iLCBsZGV2LT5uYW1lKTsNCisJCWdvdG8gZXJyX291dF9zZXNzaW9uX2ZyZWU7 DQorCX0NCisNCisJcmV0dXJuIHM7DQorDQorZXJyX291dF9zZXNzaW9uX2ZyZWU6DQorCWtmcmVl KHMpOw0KK2Vycl9vdXRfZGV2aWNlX3B1dDoNCisJY3J5cHRvX2RldmljZV9wdXQobGRldik7DQor DQorCXJldHVybiBOVUxMOw0KK30NCisNCit2b2lkIGNyeXB0b19zZXNzaW9uX2FkZChzdHJ1Y3Qg Y3J5cHRvX3Nlc3Npb24gKnMpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX2RldmljZSAqbGRldjsNCisJ c3RydWN0IGNyeXB0b19kZXZpY2UgKmRldiA9ICZtYWluX2NyeXB0b19kZXZpY2U7DQorDQorCWxk ZXYgPSBjcnlwdG9fcm91dGVfZ2V0X2N1cnJlbnRfZGV2aWNlKHMpOw0KKwlCVUdfT04oIWxkZXYp OwkJLyogVGhpcyBjYW4gbm90IGhhcHBlbi4gKi8NCisNCisJc3Bpbl9sb2NrX2lycSgmcy0+bG9j ayk7DQorCWNyeXB0b19zZXNzaW9uX2luc2VydChsZGV2LCBzKTsNCisJY3J5cHRvX2RldmljZV9w dXQobGRldik7DQorCWNyeXB0b19zZXNzaW9uX2luc2VydF9tYWluKGRldiwgcyk7DQorCXNwaW5f dW5sb2NrX2lycSgmcy0+bG9jayk7DQorDQorCWlmIChsZGV2LT5kYXRhX3JlYWR5KQ0KKwkJbGRl di0+ZGF0YV9yZWFkeShsZGV2KTsNCit9DQorDQorc3RydWN0IGNyeXB0b19zZXNzaW9uICpjcnlw dG9fc2Vzc2lvbl9hbGxvYyhzdHJ1Y3QgY3J5cHRvX3Nlc3Npb25faW5pdGlhbGl6ZXIgKmNpLCBz dHJ1Y3QgY3J5cHRvX2RhdGEgKmQpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24gKnM7DQor DQorCXMgPSBjcnlwdG9fc2Vzc2lvbl9jcmVhdGUoY2ksIGQpOw0KKwlpZiAoIXMpDQorCQlyZXR1 cm4gTlVMTDsNCisNCisJY3J5cHRvX3Nlc3Npb25fYWRkKHMpOw0KKw0KKwlyZXR1cm4gczsNCit9 DQorDQordm9pZCBjcnlwdG9fc2Vzc2lvbl9kZXF1ZXVlX3JvdXRlKHN0cnVjdCBjcnlwdG9fc2Vz c2lvbiAqcykNCit7DQorCXN0cnVjdCBjcnlwdG9fcm91dGUgKnJ0Ow0KKwlzdHJ1Y3QgY3J5cHRv X2RldmljZSAqZGV2Ow0KKw0KKwlCVUdfT04oY3J5cHRvX3JvdXRlX3F1ZXVlX2xlbihzKSA+IDEp Ow0KKw0KKwl3aGlsZSAoKHJ0ID0gY3J5cHRvX3JvdXRlX2RlcXVldWUocykpKSB7DQorCQlkZXYg PSBydC0+ZGV2Ow0KKw0KKwkJZHByaW50ayhLRVJOX0lORk8gIlJlbW92aW5nIHJvdXRlIGVudHJ5 IGZvciBkZXZpY2UgJXMuXG4iLCBkZXYtPm5hbWUpOw0KKw0KKwkJc3Bpbl9sb2NrX2lycSgmZGV2 LT5zZXNzaW9uX2xvY2spOw0KKw0KKwkJbGlzdF9kZWxfaW5pdCgmcy0+ZGV2X3F1ZXVlX2VudHJ5 KTsNCisNCisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5zZXNzaW9uX2xvY2spOw0KKw0KKwkJY3J5 cHRvX3JvdXRlX2ZyZWUocnQpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgX19jcnlwdG9fc2Vzc2lvbl9k ZXF1ZXVlX21haW4oc3RydWN0IGNyeXB0b19zZXNzaW9uICpzKQ0KK3sNCisJc3RydWN0IGNyeXB0 b19kZXZpY2UgKmRldiA9ICZtYWluX2NyeXB0b19kZXZpY2U7DQorDQorCWxpc3RfZGVsKCZzLT5t YWluX3F1ZXVlX2VudHJ5KTsNCisJY3J5cHRvX2RldmljZV9wdXQoZGV2KTsNCit9DQorDQordm9p ZCBjcnlwdG9fc2Vzc2lvbl9kZXF1ZXVlX21haW4oc3RydWN0IGNyeXB0b19zZXNzaW9uICpzKQ0K K3sNCisJc3RydWN0IGNyeXB0b19kZXZpY2UgKmRldiA9ICZtYWluX2NyeXB0b19kZXZpY2U7DQor DQorCXNwaW5fbG9ja19pcnEoJmRldi0+c2Vzc2lvbl9sb2NrKTsNCisNCisJX19jcnlwdG9fc2Vz c2lvbl9kZXF1ZXVlX21haW4ocyk7DQorDQorCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5zZXNzaW9u X2xvY2spOw0KK30NCisNCitpbnQgX19kZXZpbml0IGNtYWluX2luaXQodm9pZCkNCit7DQorCXN0 cnVjdCBjcnlwdG9fZGV2aWNlICpkZXYgPSAmbWFpbl9jcnlwdG9fZGV2aWNlOw0KKwlpbnQgZXJy Ow0KKw0KKwlzbnByaW50ZihkZXYtPm5hbWUsIHNpemVvZihkZXYtPm5hbWUpLCAiY3J5cHRvX3Nl c3Npb25zIik7DQorDQorCWVyciA9IGJ1c19yZWdpc3RlcigmY3J5cHRvX2J1c190eXBlKTsNCisJ aWYgKGVycikgew0KKwkJZHByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNyeXB0 byBidXM6IGVycj0lZC5cbiIsDQorCQkJZXJyKTsNCisJCXJldHVybiBlcnI7DQorCX0NCisNCisJ ZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZjcnlwdG9fZHJpdmVyKTsNCisJaWYgKGVycikgew0KKwkJ ZHByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNyeXB0byBkcml2ZXI6IGVycj0l ZC5cbiIsDQorCQkJZXJyKTsNCisJCWdvdG8gZXJyX291dF9idXNfdW5yZWdpc3RlcjsNCisJfQ0K Kw0KKwllcnIgPSBjbGFzc19yZWdpc3RlcigmY3J5cHRvX2NsYXNzKTsNCisJaWYgKGVycikgew0K KwkJZHByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNyeXB0byBjbGFzczogZXJy PSVkLlxuIiwNCisJCQllcnIpOw0KKwkJZ290byBlcnJfb3V0X2RyaXZlcl91bnJlZ2lzdGVyOw0K Kwl9DQorDQorCWVyciA9IGNyeXB0b19sYl9pbml0KCk7DQorCWlmIChlcnIpDQorCQlnb3RvIGVy cl9vdXRfY2xhc3NfdW5yZWdpc3RlcjsNCisNCisJZXJyID0gY3J5cHRvX2Nvbm5faW5pdCgpOw0K KwlpZiAoZXJyKQ0KKwkJZ290byBlcnJfb3V0X2NyeXB0b19sYl9maW5pOw0KKw0KKwllcnIgPSBf X2NyeXB0b19kZXZpY2VfYWRkKGRldik7DQorCWlmIChlcnIpDQorCQlnb3RvIGVycl9vdXRfY3J5 cHRvX2Nvbm5fZmluaTsNCisNCisJZXJyID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYt PmNsYXNzX2RldmljZSwgJmNsYXNzX2RldmljZV9hdHRyX2RldmljZXMpOw0KKwlpZiAoZXJyKQ0K KwkJZHByaW50aygiRmFpbGVkIHRvIGNyZWF0ZSBcImRldmljZXNcIiBhdHRyaWJ1dGU6IGVycj0l ZC5cbiIsDQorCQkJZXJyKTsNCisJZXJyID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYt PmNsYXNzX2RldmljZSwgJmNsYXNzX2RldmljZV9hdHRyX2xicyk7DQorCWlmIChlcnIpDQorCQlk cHJpbnRrKCJGYWlsZWQgdG8gY3JlYXRlIFwibGJzXCIgYXR0cmlidXRlOiBlcnI9JWQuXG4iLCBl cnIpOw0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJfb3V0X2NyeXB0b19jb25uX2Zpbmk6DQorCWNy eXB0b19jb25uX2ZpbmkoKTsNCitlcnJfb3V0X2NyeXB0b19sYl9maW5pOg0KKwljcnlwdG9fbGJf ZmluaSgpOw0KK2Vycl9vdXRfY2xhc3NfdW5yZWdpc3RlcjoNCisJY2xhc3NfdW5yZWdpc3Rlcigm Y3J5cHRvX2NsYXNzKTsNCitlcnJfb3V0X2RyaXZlcl91bnJlZ2lzdGVyOg0KKwlkcml2ZXJfdW5y ZWdpc3RlcigmY3J5cHRvX2RyaXZlcik7DQorZXJyX291dF9idXNfdW5yZWdpc3RlcjoNCisJYnVz X3VucmVnaXN0ZXIoJmNyeXB0b19idXNfdHlwZSk7DQorDQorCXJldHVybiBlcnI7DQorfQ0KKw0K K3ZvaWQgX19kZXZleGl0IGNtYWluX2Zpbmkodm9pZCkNCit7DQorCXN0cnVjdCBjcnlwdG9fZGV2 aWNlICpkZXYgPSAmbWFpbl9jcnlwdG9fZGV2aWNlOw0KKw0KKwljbGFzc19kZXZpY2VfcmVtb3Zl X2ZpbGUoJmRldi0+Y2xhc3NfZGV2aWNlLCAmY2xhc3NfZGV2aWNlX2F0dHJfZGV2aWNlcyk7DQor CWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5jbGFzc19kZXZpY2UsICZjbGFzc19kZXZp Y2VfYXR0cl9sYnMpOw0KKwlfX2NyeXB0b19kZXZpY2VfcmVtb3ZlKGRldik7DQorDQorCWNyeXB0 b19jb25uX2ZpbmkoKTsNCisJY3J5cHRvX2xiX2ZpbmkoKTsNCisNCisJY2xhc3NfdW5yZWdpc3Rl cigmY3J5cHRvX2NsYXNzKTsNCisJZHJpdmVyX3VucmVnaXN0ZXIoJmNyeXB0b19kcml2ZXIpOw0K KwlidXNfdW5yZWdpc3RlcigmY3J5cHRvX2J1c190eXBlKTsNCit9DQorDQorbW9kdWxlX2luaXQo Y21haW5faW5pdCk7DQorbW9kdWxlX2V4aXQoY21haW5fZmluaSk7DQorDQorTU9EVUxFX0xJQ0VO U0UoIkdQTCIpOw0KK01PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmth Lm1pcHQucnU+Iik7DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJBc3luY2hyb25vdXMgY3J5cHRvIGxh eWVyLiIpOw0KKw0KK0VYUE9SVF9TWU1CT0woY3J5cHRvX3Nlc3Npb25fYWxsb2MpOw0KK0VYUE9S VF9TWU1CT0xfR1BMKGNyeXB0b19zZXNzaW9uX2NyZWF0ZSk7DQorRVhQT1JUX1NZTUJPTF9HUEwo Y3J5cHRvX3Nlc3Npb25fYWRkKTsNCitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fc2Vzc2lvbl9k ZXF1ZXVlX3JvdXRlKTsNCmRpZmYgLU5ydSAvdG1wL2VtcHR5L2NyeXB0b19wcm92aWRlci5jIGxp bnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vY3J5cHRvX3Byb3ZpZGVyLmMNCi0tLSAvdG1wL2VtcHR5 L2NyeXB0b19wcm92aWRlci5jCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAwDQor KysgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by9jcnlwdG9fcHJvdmlkZXIuYwkyMDA0LTEyLTE0 IDE4OjUzOjExLjAwMDAwMDAwMCArMDMwMA0KQEAgLTAsMCArMSwxODMgQEANCisvKg0KKyAqIAlj cnlwdG9fcHJvdmlkZXIuYw0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IEV2Z2VuaXkgUG9s eWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQorICogDQorICoNCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0K KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5DQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlDQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1 aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQ0KKyAqLw0KKw0KKyNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxp bnV4L21vZHVsZXBhcmFtLmg+DQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxsaW51 eC9pbnRlcnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCisjaW5jbHVkZSA8 bGludXgvd29ya3F1ZXVlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KKyNpbmNsdWRlIDxs aW51eC9jcnlwdG8uaD4NCisjaW5jbHVkZSA8bGludXgvbW0uaD4NCisNCisjZGVmaW5lIERFQlVH DQorI2luY2x1ZGUgImFjcnlwdG8uaCINCisjaW5jbHVkZSAiY3J5cHRvX3N0YXQuaCINCisjaW5j bHVkZSAiY3J5cHRvX2RlZi5oIg0KKw0KK3N0YXRpYyB2b2lkIHByb3ZfZGF0YV9yZWFkeShzdHJ1 Y3QgY3J5cHRvX2RldmljZSAqZGV2KTsNCisNCitzdGF0aWMgc3RydWN0IGNyeXB0b19jYXBhYmls aXR5IHByb3ZfY2Fwc1tdID0gew0KKwl7Q1JZUFRPX09QX0VOQ1JZUFQsIENSWVBUT19UWVBFX0FF U18xMjgsIENSWVBUT19NT0RFX0VDQiwgMTAwMH0sDQorCXtDUllQVE9fT1BfREVDUllQVCwgQ1JZ UFRPX1RZUEVfQUVTXzEyOCwgQ1JZUFRPX01PREVfRUNCLCAxMDAwfSwNCit9Ow0KK3N0YXRpYyBp bnQgcHJvdl9jYXBfbnVtYmVyID0gc2l6ZW9mKHByb3ZfY2FwcykgLyBzaXplb2YocHJvdl9jYXBz WzBdKTsNCisNCitzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gdGhyZWFkX2V4aXRlZDsNCitzdGF0 aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoY3J5cHRvX3dhaXRfcXVldWUpOw0KK3N0YXRpYyBp bnQgbmVlZF9leGl0Ow0KK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOw0KKw0KK3N0YXRp YyBzdHJ1Y3QgY3J5cHRvX2RldmljZSBwZGV2ID0gew0KKwkubmFtZSA9ICJjcnlwdG9fcHJvdmlk ZXIiLA0KKwkuZGF0YV9yZWFkeSA9IHByb3ZfZGF0YV9yZWFkeSwNCisJLmNhcCA9ICZwcm92X2Nh cHNbMF0sDQorfTsNCisNCitzdGF0aWMgdm9pZCBwcm92X2RhdGFfcmVhZHkoc3RydWN0IGNyeXB0 b19kZXZpY2UgKmRldikNCit7DQorCXdha2VfdXAoJmNyeXB0b193YWl0X3F1ZXVlKTsNCit9DQor DQorc3RhdGljIGludCBjcnlwdG9fdGhyZWFkKHZvaWQgKmRhdGEpDQorew0KKwlzdHJ1Y3QgY3J5 cHRvX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjcnlwdG9fZGV2aWNlICopZGF0YTsNCisJdTggKmtl eTsNCisJdW5zaWduZWQgaW50IGtleWxlbjsNCisJaW50IGVycjsNCisJc3RydWN0IGNyeXB0b19z ZXNzaW9uICpzLCAqbjsNCisNCisJZGFlbW9uaXplKCIlcyIsIGRldi0+bmFtZSk7DQorCWFsbG93 X3NpZ25hbChTSUdURVJNKTsNCisNCisJd2hpbGUgKCFuZWVkX2V4aXQpIHsNCisJCWludGVycnVw dGlibGVfc2xlZXBfb25fdGltZW91dCgmY3J5cHRvX3dhaXRfcXVldWUsIDEwMCk7DQorDQorCQlp ZiAobmVlZF9leGl0KQ0KKwkJCWJyZWFrOw0KKw0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHMsIG4sICZkZXYtPnNlc3Npb25fbGlzdCwgZGV2X3F1ZXVlX2VudHJ5KSB7DQorCQkJaWYgKCFz cGluX3RyeWxvY2soJnMtPmxvY2spKQ0KKwkJCQljb250aW51ZTsNCisNCisJCQlpZiAoc2Vzc2lv bl9jb21wbGV0ZWQocykpIHsNCisJCQkJZ290byB1bmxvY2s7DQorCQkJfQ0KKwkJCXN0YXJ0X3By b2Nlc3Nfc2Vzc2lvbihzKTsNCisNCisJCQlkcHJpbnRrKCJCZWdpbiB0byBwcm9jZXNzIHNlc3Np b24gJWxsdSBbJWxsdV0gaW4gJXMuXG4iLA0KKwkJCQlzLT5jaS5pZCwgcy0+Y2kuZGV2X2lkLCBw ZGV2Lm5hbWUpOw0KKw0KKwkJCWtleSA9ICgodTggKikgcGFnZV9hZGRyZXNzKHMtPmRhdGEuc2df a2V5LnBhZ2UpKSArIHMtPmRhdGEuc2dfa2V5Lm9mZnNldDsNCisJCQlrZXlsZW4gPSBzLT5kYXRh LnNnX2tleS5sZW5ndGg7DQorDQorCQkJZXJyID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCBr ZXksIGtleWxlbik7DQorCQkJaWYgKGVycikgew0KKwkJCQlkcHJpbnRrKEtFUk5fRVJSICJGYWls ZWQgdG8gc2V0IGtleSBba2V5bGVuPSVkXTogZXJyPSVkLlxuIiwNCisJCQkJICAgICBrZXlsZW4s IGVycik7DQorCQkJCWJyb2tlX3Nlc3Npb24ocyk7DQorCQkJCWdvdG8gb3V0Ow0KKwkJCX0NCisN CisJCQlpZiAocy0+Y2kub3BlcmF0aW9uID09IENSWVBUT19PUF9FTkNSWVBUKQ0KKwkJCQljcnlw dG9fY2lwaGVyX2VuY3J5cHQodGZtLCAmcy0+ZGF0YS5zZ19kc3QsICZzLT5kYXRhLnNnX3NyYywg cy0+ZGF0YS5zZ19zcmMubGVuZ3RoKTsNCisJCQllbHNlDQorCQkJCWNyeXB0b19jaXBoZXJfZGVj cnlwdCh0Zm0sICZzLT5kYXRhLnNnX2RzdCwgJnMtPmRhdGEuc2dfc3JjLCBzLT5kYXRhLnNnX3Ny Yy5sZW5ndGgpOw0KKw0KKwkJCXMtPmRhdGEuc2dfZHN0Lmxlbmd0aCA9IHMtPmRhdGEuc2dfc3Jj Lmxlbmd0aDsNCisJCQlzLT5kYXRhLnNnX2RzdC5vZmZzZXQgPSAwOw0KKw0KKwkJCWRwcmludGso S0VSTl9JTkZPICJDb21wbGV0aW5nIHNlc3Npb24gJWxsdSBbJWxsdV0gaW4gJXMuXG4iLA0KKwkJ CQlzLT5jaS5pZCwgcy0+Y2kuZGV2X2lkLCBwZGV2Lm5hbWUpOw0KKw0KK291dDoNCisJCQljcnlw dG9fc3RhdF9jb21wbGV0ZV9pbmMocyk7DQorCQkJY3J5cHRvX3Nlc3Npb25fZGVxdWV1ZV9yb3V0 ZShzKTsNCisJCQljb21wbGV0ZV9zZXNzaW9uKHMpOw0KKwkJCXN0b3BfcHJvY2Vzc19zZXNzaW9u KHMpOw0KK3VubG9jazoNCisJCQlzcGluX3VubG9jaygmcy0+bG9jayk7DQorCQl9DQorCX0NCisN CisJY29tcGxldGVfYW5kX2V4aXQoJnRocmVhZF9leGl0ZWQsIDApOw0KK30NCisNCitpbnQgcHJv dl9pbml0KHZvaWQpDQorew0KKwlpbnQgZXJyLCBwaWQ7DQorDQorCXRmbSA9IGNyeXB0b19hbGxv Y190Zm0oImFlcyIsIDApOw0KKwlpZiAoIXRmbSkgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJGYWls ZWQgdG8gYWxsb2NhdGUgU0hBMSB0Zm0uXG4iKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQor DQorCWluaXRfY29tcGxldGlvbigmdGhyZWFkX2V4aXRlZCk7DQorCXBpZCA9IGtlcm5lbF90aHJl YWQoY3J5cHRvX3RocmVhZCwgJnBkZXYsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMpOw0KKwlpZiAo SVNfRVJSKCh2b2lkICopcGlkKSkgew0KKwkJZXJyID0gLUVJTlZBTDsNCisJCWRwcmludGsoS0VS Tl9FUlIgIkZhaWxlZCB0byBjcmVhdGUga2VybmVsIGxvYWQgYmFsYW5jaW5nIHRocmVhZC5cbiIp Ow0KKwkJZ290byBlcnJfb3V0X2ZyZWVfdGZtOw0KKwl9DQorDQorCXBkZXYuY2FwX251bWJlciA9 IHByb3ZfY2FwX251bWJlcjsNCisNCisJZXJyID0gY3J5cHRvX2RldmljZV9hZGQoJnBkZXYpOw0K KwlpZiAoZXJyKQ0KKwkJZ290byBlcnJfb3V0X3JlbW92ZV90aHJlYWQ7DQorDQorCWRwcmludGso S0VSTl9JTkZPICJUZXN0IGNyeXB0byBwcm92aWRlciBtb2R1bGUgJXMgaXMgbG9hZGVkLlxuIiwg cGRldi5uYW1lKTsNCisNCisJcmV0dXJuIDA7DQorDQorZXJyX291dF9yZW1vdmVfdGhyZWFkOg0K KwluZWVkX2V4aXQgPSAxOw0KKwl3YWtlX3VwKCZjcnlwdG9fd2FpdF9xdWV1ZSk7DQorCXdhaXRf Zm9yX2NvbXBsZXRpb24oJnRocmVhZF9leGl0ZWQpOw0KK2Vycl9vdXRfZnJlZV90Zm06DQorCWNy eXB0b19mcmVlX3RmbSh0Zm0pOw0KKw0KKwlyZXR1cm4gZXJyOw0KK30NCisNCit2b2lkIHByb3Zf ZmluaSh2b2lkKQ0KK3sNCisJbmVlZF9leGl0ID0gMTsNCisJd2FrZV91cCgmY3J5cHRvX3dhaXRf cXVldWUpOw0KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ0aHJlYWRfZXhpdGVkKTsNCisNCisJY3J5 cHRvX2RldmljZV9yZW1vdmUoJnBkZXYpOw0KKwljcnlwdG9fZnJlZV90Zm0odGZtKTsNCisNCisJ ZHByaW50ayhLRVJOX0lORk8gIlRlc3QgY3J5cHRvIHByb3ZpZGVyIG1vZHVsZSAlcyBpcyB1bmxv YWRlZC5cbiIsIHBkZXYubmFtZSk7DQorfQ0KKw0KK21vZHVsZV9pbml0KHByb3ZfaW5pdCk7DQor bW9kdWxlX2V4aXQocHJvdl9maW5pKTsNCisNCitNT0RVTEVfTElDRU5TRSgiR1BMIik7DQorTU9E VUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4iKTsNCitN T0RVTEVfREVTQ1JJUFRJT04oIlRlc3QgY3J5cHRvIG1vZHVsZSBwcm92aWRlci4iKTsNCkJpbmFy eSBmaWxlcyAvdG1wL2VtcHR5Ly5jcnlwdG9fcHJvdmlkZXIuYy5zd3AgYW5kIGxpbnV4LTIuNi9k cml2ZXJzL2FjcnlwdG8vLmNyeXB0b19wcm92aWRlci5jLnN3cCBkaWZmZXINCmRpZmYgLU5ydSAv dG1wL2VtcHR5L2NyeXB0b19yb3V0ZS5oIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vY3J5cHRv X3JvdXRlLmgNCi0tLSAvdG1wL2VtcHR5L2NyeXB0b19yb3V0ZS5oCTE5NzAtMDEtMDEgMDM6MDA6 MDAuMDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by9jcnlwdG9f cm91dGUuaAkyMDA0LTEyLTE0IDE4OjUzOjExLjAwMDAwMDAwMCArMDMwMA0KQEAgLTAsMCArMSwy NDIgQEANCisvKg0KKyAqIAljcnlwdG9fcm91dGUuaA0KKyAqDQorICogQ29weXJpZ2h0IChjKSAy MDA0IEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQorICogDQorICoNCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgKiAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YN CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQ0KKyAqLw0K Kw0KKyNpZm5kZWYgX19DUllQVE9fUk9VVEVfSA0KKyNkZWZpbmUgX19DUllQVE9fUk9VVEVfSA0K Kw0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQor I2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQorDQorI2luY2x1ZGUgImFjcnlwdG8uaCINCisN CitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fcm91dGUgKmNyeXB0b19yb3V0ZV9hbGxvY19k aXJlY3Qoc3RydWN0IGNyeXB0b19kZXZpY2UgKmRldiwNCisJCQkJCQkJICAgICBzdHJ1Y3QgY3J5 cHRvX3Nlc3Npb25faW5pdGlhbGl6ZXIgKmNpKQ0KK3sNCisJc3RydWN0IGNyeXB0b19yb3V0ZSAq cnQ7DQorDQorCXJ0ID0ga21hbGxvYyhzaXplb2YoKnJ0KSwgR0ZQX0FUT01JQyk7DQorCWlmICgh cnQpIHsNCisJCWNyeXB0b19kZXZpY2VfcHV0KGRldik7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0K Kw0KKwltZW1zZXQocnQsIDAsIHNpemVvZigqcnQpKTsNCisJbWVtY3B5KCZydC0+Y2ksIGNpLCBz aXplb2YoKmNpKSk7DQorDQorCXJ0LT5kZXYgPSBkZXY7DQorDQorCXJldHVybiBydDsNCit9DQor DQorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3JvdXRlICpjcnlwdG9fcm91dGVfYWxsb2Mo c3RydWN0IGNyeXB0b19kZXZpY2UgKmRldiwNCisJCQkJCQkJc3RydWN0IGNyeXB0b19zZXNzaW9u X2luaXRpYWxpemVyICpjaSkNCit7DQorCXN0cnVjdCBjcnlwdG9fcm91dGUgKnJ0Ow0KKw0KKwlp ZiAoIW1hdGNoX2luaXRpYWxpemVyKGRldiwgY2kpKQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCXJ0 ID0gY3J5cHRvX3JvdXRlX2FsbG9jX2RpcmVjdChkZXYsIGNpKTsNCisNCisJcmV0dXJuIHJ0Ow0K K30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX3JvdXRlX2ZyZWUoc3RydWN0IGNyeXB0 b19yb3V0ZSAqcnQpDQorew0KKwljcnlwdG9fZGV2aWNlX3B1dChydC0+ZGV2KTsNCisJcnQtPmRl diA9IE5VTEw7DQorCWtmcmVlKHJ0KTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIF9fY3J5 cHRvX3JvdXRlX2RlbChzdHJ1Y3QgY3J5cHRvX3JvdXRlICpydCwgc3RydWN0IGNyeXB0b19yb3V0 ZV9oZWFkICpsaXN0KQ0KK3sNCisJc3RydWN0IGNyeXB0b19yb3V0ZSAqbmV4dCwgKnByZXY7DQor DQorCWxpc3QtPnFsZW4tLTsNCisJbmV4dCA9IHJ0LT5uZXh0Ow0KKwlwcmV2ID0gcnQtPnByZXY7 DQorCXJ0LT5uZXh0ID0gcnQtPnByZXYgPSBOVUxMOw0KKwlydC0+bGlzdCA9IE5VTEw7DQorCW5l eHQtPnByZXYgPSBwcmV2Ow0KKwlwcmV2LT5uZXh0ID0gbmV4dDsNCit9DQorDQorc3RhdGljIGlu bGluZSB2b2lkIGNyeXB0b19yb3V0ZV9kZWwoc3RydWN0IGNyeXB0b19yb3V0ZSAqcnQpDQorew0K KwlzdHJ1Y3QgY3J5cHRvX3JvdXRlX2hlYWQgKmxpc3QgPSBydC0+bGlzdDsNCisNCisJaWYgKGxp c3QpIHsNCisJCXNwaW5fbG9ja19pcnEoJmxpc3QtPmxvY2spOw0KKwkJaWYgKGxpc3QgPT0gcnQt Pmxpc3QpDQorCQkJX19jcnlwdG9fcm91dGVfZGVsKHJ0LCBydC0+bGlzdCk7DQorCQlzcGluX3Vu bG9ja19pcnEoJmxpc3QtPmxvY2spOw0KKw0KKwkJY3J5cHRvX3JvdXRlX2ZyZWUocnQpOw0KKwl9 DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19yb3V0ZSAqX19jcnlwdG9fcm91 dGVfZGVxdWV1ZShzdHJ1Y3QgY3J5cHRvX3JvdXRlX2hlYWQgKmxpc3QpDQorew0KKwlzdHJ1Y3Qg Y3J5cHRvX3JvdXRlICpuZXh0LCAqcHJldiwgKnJlc3VsdDsNCisNCisJcHJldiA9IChzdHJ1Y3Qg Y3J5cHRvX3JvdXRlICopbGlzdDsNCisJbmV4dCA9IHByZXYtPm5leHQ7DQorCXJlc3VsdCA9IE5V TEw7DQorCWlmIChuZXh0ICE9IHByZXYpIHsNCisJCXJlc3VsdCA9IG5leHQ7DQorCQluZXh0ID0g bmV4dC0+bmV4dDsNCisJCWxpc3QtPnFsZW4tLTsNCisJCW5leHQtPnByZXYgPSBwcmV2Ow0KKwkJ cHJldi0+bmV4dCA9IG5leHQ7DQorCQlyZXN1bHQtPm5leHQgPSByZXN1bHQtPnByZXYgPSBOVUxM Ow0KKwkJcmVzdWx0LT5saXN0ID0gTlVMTDsNCisJfQ0KKwlyZXR1cm4gcmVzdWx0Ow0KK30NCisN CitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fcm91dGUgKmNyeXB0b19yb3V0ZV9kZXF1ZXVl KHN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqcykNCit7DQorCXN0cnVjdCBjcnlwdG9fcm91dGUgKnJ0 Ow0KKw0KKwlzcGluX2xvY2tfaXJxKCZzLT5yb3V0ZV9saXN0LmxvY2spOw0KKw0KKwlydCA9IF9f Y3J5cHRvX3JvdXRlX2RlcXVldWUoJnMtPnJvdXRlX2xpc3QpOw0KKw0KKwlzcGluX3VubG9ja19p cnEoJnMtPnJvdXRlX2xpc3QubG9jayk7DQorDQorCXJldHVybiBydDsNCit9DQorDQorc3RhdGlj IGlubGluZSB2b2lkIF9fY3J5cHRvX3JvdXRlX3F1ZXVlKHN0cnVjdCBjcnlwdG9fcm91dGUgKnJ0 LCBzdHJ1Y3QgY3J5cHRvX3JvdXRlX2hlYWQgKmxpc3QpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX3Jv dXRlICpwcmV2LCAqbmV4dDsNCisNCisJcnQtPmxpc3QgPSBsaXN0Ow0KKwlsaXN0LT5xbGVuKys7 DQorCW5leHQgPSAoc3RydWN0IGNyeXB0b19yb3V0ZSAqKWxpc3Q7DQorCXByZXYgPSBuZXh0LT5w cmV2Ow0KKwlydC0+bmV4dCA9IG5leHQ7DQorCXJ0LT5wcmV2ID0gcHJldjsNCisJbmV4dC0+cHJl diA9IHByZXYtPm5leHQgPSBydDsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19y b3V0ZV9xdWV1ZShzdHJ1Y3QgY3J5cHRvX3JvdXRlICpydCwgc3RydWN0IGNyeXB0b19zZXNzaW9u ICpzKQ0KK3sNCisNCisJc3Bpbl9sb2NrX2lycSgmcy0+cm91dGVfbGlzdC5sb2NrKTsNCisNCisJ X19jcnlwdG9fcm91dGVfcXVldWUocnQsICZzLT5yb3V0ZV9saXN0KTsNCisNCisJc3Bpbl91bmxv Y2tfaXJxKCZzLT5yb3V0ZV9saXN0LmxvY2spOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBj cnlwdG9fcm91dGVfYWRkKHN0cnVjdCBjcnlwdG9fZGV2aWNlICpkZXYsIHN0cnVjdCBjcnlwdG9f c2Vzc2lvbiAqcywgDQorCQkJCQkJc3RydWN0IGNyeXB0b19zZXNzaW9uX2luaXRpYWxpemVyICpj aSkNCit7DQorCXN0cnVjdCBjcnlwdG9fcm91dGUgKnJ0Ow0KKw0KKwlydCA9IGNyeXB0b19yb3V0 ZV9hbGxvYyhkZXYsIGNpKTsNCisJaWYgKCFydCkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlj cnlwdG9fcm91dGVfcXVldWUocnQsIHMpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGlubGluZSBpbnQgY3J5cHRvX3JvdXRlX2FkZF9kaXJlY3Qoc3RydWN0IGNyeXB0b19kZXZpY2Ug KmRldiwgc3RydWN0IGNyeXB0b19zZXNzaW9uICpzLA0KKwkJCQkJCXN0cnVjdCBjcnlwdG9fc2Vz c2lvbl9pbml0aWFsaXplciAqY2kpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX3JvdXRlICpydDsNCisN CisJcnQgPSBjcnlwdG9fcm91dGVfYWxsb2NfZGlyZWN0KGRldiwgY2kpOw0KKwlpZiAoIXJ0KQ0K KwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWNyeXB0b19yb3V0ZV9xdWV1ZShydCwgcyk7DQorDQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fcm91dGVfcXVldWVf bGVuKHN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqcykNCit7DQorCXJldHVybiBzLT5yb3V0ZV9saXN0 LnFsZW47DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fcm91dGVfaGVhZF9pbml0 KHN0cnVjdCBjcnlwdG9fcm91dGVfaGVhZCAqbGlzdCkNCit7DQorCXNwaW5fbG9ja19pbml0KCZs aXN0LT5sb2NrKTsNCisJbGlzdC0+cHJldiA9IGxpc3QtPm5leHQgPSAoc3RydWN0IGNyeXB0b19y b3V0ZSAqKWxpc3Q7DQorCWxpc3QtPnFsZW4gPSAwOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBjcnlwdG9fcm91dGUgKl9fY3J5cHRvX3JvdXRlX2N1cnJlbnQoc3RydWN0IGNyeXB0b19y b3V0ZV9oZWFkICpsaXN0KQ0KK3sNCisJc3RydWN0IGNyeXB0b19yb3V0ZSAqbmV4dCwgKnByZXYs ICpyZXN1bHQ7DQorDQorCXByZXYgPSAoc3RydWN0IGNyeXB0b19yb3V0ZSAqKWxpc3Q7DQorCW5l eHQgPSBwcmV2LT5uZXh0Ow0KKwlyZXN1bHQgPSBOVUxMOw0KKwlpZiAobmV4dCAhPSBwcmV2KQ0K KwkJcmVzdWx0ID0gbmV4dDsNCisNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorc3RhdGljIGlu bGluZSBzdHJ1Y3QgY3J5cHRvX3JvdXRlICpjcnlwdG9fcm91dGVfY3VycmVudChzdHJ1Y3QgY3J5 cHRvX3Nlc3Npb24gKnMpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX3JvdXRlX2hlYWQgKmxpc3Q7DQor CXN0cnVjdCBjcnlwdG9fcm91dGUgKnJ0ID0gTlVMTDsNCisNCisJbGlzdCA9ICZzLT5yb3V0ZV9s aXN0Ow0KKw0KKwlpZiAobGlzdCkgew0KKwkJc3Bpbl9sb2NrX2lycSgmbGlzdC0+bG9jayk7DQor DQorCQlydCA9IF9fY3J5cHRvX3JvdXRlX2N1cnJlbnQobGlzdCk7DQorDQorCQlzcGluX3VubG9j a19pcnEoJmxpc3QtPmxvY2spOw0KKwl9DQorDQorCXJldHVybiBydDsNCit9DQorDQorc3RhdGlj IGlubGluZSBzdHJ1Y3QgY3J5cHRvX2RldmljZSAqY3J5cHRvX3JvdXRlX2dldF9jdXJyZW50X2Rl dmljZShzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24gKnMpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX3JvdXRl ICpydCA9IE5VTEw7DQorCXN0cnVjdCBjcnlwdG9fZGV2aWNlICpkZXYgPSBOVUxMOw0KKwlzdHJ1 Y3QgY3J5cHRvX3JvdXRlX2hlYWQgKmxpc3QgPSAmcy0+cm91dGVfbGlzdDsNCisNCisJc3Bpbl9s b2NrX2lycSgmbGlzdC0+bG9jayk7DQorDQorCXJ0ID0gX19jcnlwdG9fcm91dGVfY3VycmVudChs aXN0KTsNCisJaWYgKHJ0KSB7DQorCQlkZXYgPSBydC0+ZGV2Ow0KKwkJY3J5cHRvX2RldmljZV9n ZXQoZGV2KTsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19pcnEoJmxpc3QtPmxvY2spOw0KKw0KKwly ZXR1cm4gZGV2Ow0KK30NCisNCisjZW5kaWYJCQkJLyogX19DUllQVE9fUk9VVEVfSCAqLw0KZGlm ZiAtTnJ1IC90bXAvZW1wdHkvY3J5cHRvX3N0YXQuYyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRv L2NyeXB0b19zdGF0LmMNCi0tLSAvdG1wL2VtcHR5L2NyeXB0b19zdGF0LmMJMTk3MC0wMS0wMSAw MzowMDowMC4wMDAwMDAwMDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvL2Ny eXB0b19zdGF0LmMJMjAwNC0xMi0xNCAxODo1MzoxMS4wMDAwMDAwMDAgKzAzMDANCkBAIC0wLDAg KzEsMTAwIEBADQorLyoNCisgKiAJY3J5cHRvX3N0YXQuYw0KKyAqDQorICogQ29weXJpZ2h0IChj KSAyMDA0IEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQorICogDQorICoN CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgKiAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1 OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQ0KKyAq Lw0KKw0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+DQorI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5o Pg0KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgvc3Bpbmxv Y2suaD4NCisNCisjaW5jbHVkZSAiYWNyeXB0by5oIg0KKyNpbmNsdWRlICJjcnlwdG9fcm91dGUu aCINCisNCit2b2lkIGNyeXB0b19zdGF0X3N0YXJ0X2luYyhzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24g KnMpDQorew0KKwlzdHJ1Y3QgY3J5cHRvX2RldmljZSAqZGV2Ow0KKw0KKwlkZXYgPSBjcnlwdG9f cm91dGVfZ2V0X2N1cnJlbnRfZGV2aWNlKHMpOw0KKwlpZiAoZGV2KSB7DQorCQlzcGluX2xvY2tf aXJxKCZkZXYtPnN0YXRfbG9jayk7DQorCQlkZXYtPnN0YXQuc3N0YXJ0ZWQrKzsNCisJCXNwaW5f dW5sb2NrX2lycSgmZGV2LT5zdGF0X2xvY2spOw0KKw0KKwkJY3J5cHRvX2RldmljZV9wdXQoZGV2 KTsNCisJfQ0KK30NCisNCit2b2lkIGNyeXB0b19zdGF0X2ZpbmlzaF9pbmMoc3RydWN0IGNyeXB0 b19zZXNzaW9uICpzKQ0KK3sNCisJc3RydWN0IGNyeXB0b19kZXZpY2UgKmRldjsNCisNCisJZGV2 ID0gY3J5cHRvX3JvdXRlX2dldF9jdXJyZW50X2RldmljZShzKTsNCisJaWYgKGRldikgew0KKwkJ c3Bpbl9sb2NrX2lycSgmZGV2LT5zdGF0X2xvY2spOw0KKwkJZGV2LT5zdGF0LnNmaW5pc2hlZCsr Ow0KKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnN0YXRfbG9jayk7DQorDQorCQljcnlwdG9fZGV2 aWNlX3B1dChkZXYpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgY3J5cHRvX3N0YXRfY29tcGxldGVfaW5j KHN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqcykNCit7DQorCXN0cnVjdCBjcnlwdG9fZGV2aWNlICpk ZXY7DQorDQorCWRldiA9IGNyeXB0b19yb3V0ZV9nZXRfY3VycmVudF9kZXZpY2Uocyk7DQorCWlm IChkZXYpIHsNCisJCXNwaW5fbG9ja19pcnEoJmRldi0+c3RhdF9sb2NrKTsNCisJCWRldi0+c3Rh dC5zY29tcGxldGVkKys7DQorCQlzcGluX3VubG9ja19pcnEoJmRldi0+c3RhdF9sb2NrKTsNCisN CisJCWNyeXB0b19kZXZpY2VfcHV0KGRldik7DQorCX0NCit9DQorDQordm9pZCBjcnlwdG9fc3Rh dF9wdGltZV9pbmMoc3RydWN0IGNyeXB0b19zZXNzaW9uICpzKQ0KK3sNCisJc3RydWN0IGNyeXB0 b19kZXZpY2UgKmRldjsNCisNCisJZGV2ID0gY3J5cHRvX3JvdXRlX2dldF9jdXJyZW50X2Rldmlj ZShzKTsNCisJaWYgKGRldikgew0KKwkJaW50IGk7DQorDQorCQlzcGluX2xvY2tfaXJxKCZkZXYt PnN0YXRfbG9jayk7DQorCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXBfbnVtYmVyOyArK2kpIHsN CisJCQlpZiAoX19tYXRjaF9pbml0aWFsaXplcigmZGV2LT5jYXBbaV0sICZzLT5jaSkpIHsNCisJ CQkJZGV2LT5jYXBbaV0ucHRpbWUgKz0gcy0+Y2kucHRpbWU7DQorCQkJCWRldi0+Y2FwW2ldLnNj b21wKys7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisJCXNwaW5fdW5sb2NrX2lycSgmZGV2 LT5zdGF0X2xvY2spOw0KKw0KKwkJY3J5cHRvX2RldmljZV9wdXQoZGV2KTsNCisJfQ0KK30NCisN CitFWFBPUlRfU1lNQk9MKGNyeXB0b19zdGF0X3N0YXJ0X2luYyk7DQorRVhQT1JUX1NZTUJPTChj cnlwdG9fc3RhdF9maW5pc2hfaW5jKTsNCitFWFBPUlRfU1lNQk9MKGNyeXB0b19zdGF0X2NvbXBs ZXRlX2luYyk7DQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9jcnlwdG9fc3RhdC5oIGxpbnV4LTIuNi9k cml2ZXJzL2FjcnlwdG8vY3J5cHRvX3N0YXQuaA0KLS0tIC90bXAvZW1wdHkvY3J5cHRvX3N0YXQu aAkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2 ZXJzL2FjcnlwdG8vY3J5cHRvX3N0YXQuaAkyMDA0LTEyLTE0IDE4OjUzOjExLjAwMDAwMDAwMCAr MDMwMA0KQEAgLTAsMCArMSwzMiBAQA0KKy8qDQorICogCWNyeXB0b19zdGF0LmgNCisgKg0KKyAq IENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1 Pg0KKyAqIA0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yDQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAqIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRh dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEt MTMwNyBVU0ENCisgKi8NCisNCisjaWZuZGVmIF9fQ1JZUFRPX1NUQVRfSA0KKyNkZWZpbmUgX19D UllQVE9fU1RBVF9IDQorDQorI2luY2x1ZGUgImFjcnlwdG8uaCINCisNCit2b2lkIGNyeXB0b19z dGF0X3N0YXJ0X2luYyhzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24gKnMpOw0KK3ZvaWQgY3J5cHRvX3N0 YXRfZmluaXNoX2luYyhzdHJ1Y3QgY3J5cHRvX3Nlc3Npb24gKnMpOw0KK3ZvaWQgY3J5cHRvX3N0 YXRfY29tcGxldGVfaW5jKHN0cnVjdCBjcnlwdG9fc2Vzc2lvbiAqcyk7DQordm9pZCBjcnlwdG9f c3RhdF9wdGltZV9pbmMoc3RydWN0IGNyeXB0b19zZXNzaW9uICpzKTsNCisNCisjZW5kaWYJCQkJ LyogX19DUllQVE9fU1RBVF9IICovDQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9LY29uZmlnIGxpbnV4 LTIuNi9kcml2ZXJzL2FjcnlwdG8vS2NvbmZpZw0KLS0tIC90bXAvZW1wdHkvS2NvbmZpZwkxOTcw LTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2Fj cnlwdG8vS2NvbmZpZwkyMDA0LTEyLTE0IDE4OjA0OjM1LjAwMDAwMDAwMCArMDMwMA0KQEAgLTAs MCArMSw0MCBAQA0KK21lbnUgIkFzeW5jaHJvbm91cyBjcnlwdG8gbGF5ZXIiDQorDQorY29uZmln IEFDUllQVE8NCisJdHJpc3RhdGUgIkFzeW5jcm9ub3VzIGNyeXB0byBsYXllciINCisJZGVwZW5k cyBvbiBDT05ORUNUT1INCisJaGVscA0KKwkJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ug bmV3IExpbnV4IGFzeW5jaHJvbm91cyBjcnlwdG8gbGF5ZXIuDQorCQlUaGlzIHN1cHBvcnQgaXMg YWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZSANCisJCXdpbGwg YmUgY2FsbGVkIGFjcnlwdG8ua28uDQorDQorY29uZmlnIFNJTVBMRV9MQg0KKwl0cmlzdGF0ZSAi U2ltcGxlIGFzeW5jcm9ub3VzIGNyeXB0byBsb2FkIGJhbGFuY2VyIg0KKwlkZXBlbmRzIG9uIEFD UllQVE8NCisJaGVscA0KKwkJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIHNpbXBs ZSBsb2FkIGJhbGFuY2VyIHdoaWNoIHRha2VzIGludG8NCisJCWFjY291bnQgb25seSBjcnlwdG8g ZGV2aWNlJ3MgcXVldWUgbGVuZ3RoLg0KKwkJVGhpcyBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxl IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUgDQorCQl3aWxsIGJlIGNhbGxlZCBzaW1w bF9sYi5rby4NCisNCitjb25maWcgVEVTVF9DUllQVE9fUFJPVklERVINCisJdHJpc3RhdGUgIlNp bXBsZSBjcnlwdG8gcHJvdmlkZXIiDQorCWRlcGVuZHMgb24gQ1JZUFRPICYmIEFDUllQVE8NCisJ aGVscA0KKwkJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIHRlc3QgYnJpZGdlIGJl dHdlZW4gDQorCQlzeW5jaHJvbm91cyBjcnlwdG8gbGF5ZXIgYW5kIGFzeW5jcm9ub3VzIG9uZS4N CisJCUl0IHN1cHBvcnRzIG9ubHkgQUVTLTEyOC1FQ0IuDQorCQlUaGlzIHN1cHBvcnQgaXMgYWxz byBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZSANCisJCXdpbGwgYmUg Y2FsbGVkIGNyeXB0b19wcm92aWRlci5rby4NCisNCitjb25maWcgVEVTVF9DUllQVE9fQ09OU1VN RVINCisJdHJpc3RhdGUgIlNpbXBsZSBjcnlwdG8gY29uc3VtZXIiDQorCWRlcGVuZHMgb24gQUNS WVBUTw0KKwloZWxwDQorCQlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgdGVzdCBj cnlwdG8gY29uc3VtZXINCisJCXdoaWNoIGluamVjdHMgY3J5cHRvIHNlc3Npb24gb25lIHRpbWUg cGVyIGppZmZpZS4NCisJCUl0IHN1cHBvcnRzIG9ubHkgQUVTLTEyOC1FQ0IuDQorCQlUaGlzIHN1 cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZSAN CisJCXdpbGwgYmUgY2FsbGVkIGNvbnN1bWVyLmtvLg0KKw0KK2VuZG1lbnUNCmRpZmYgLU5ydSAv dG1wL2VtcHR5L01ha2VmaWxlIGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vTWFrZWZpbGUNCi0t LSAvdG1wL2VtcHR5L01ha2VmaWxlCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAw DQorKysgbGludXgtMi42L2RyaXZlcnMvYWNyeXB0by9NYWtlZmlsZQkyMDA0LTEyLTE0IDE3OjUy OjI1LjAwMDAwMDAwMCArMDMwMA0KQEAgLTAsMCArMSw2IEBADQorb2JqLSQoQ09ORklHX0FDUllQ VE8pCQkJKz0gYWNyeXB0by5vDQorb2JqLSQoQ09ORklHX1NJTVBMRV9MQikJCQkrPSBzaW1wbGVf bGIubw0KK29iai0kKENPTkZJR19URVNUX0NSWVBUT19QUk9WSURFUikJKz0gY3J5cHRvX3Byb3Zp ZGVyLm8NCitvYmotJChDT05GSUdfVEVTVF9DUllQVE9fQ09OU1VNRVIpCSs9IGNvbnN1bWVyLm8N CisNCithY3J5cHRvLW9ianMJOj0gY3J5cHRvX21haW4ubyBjcnlwdG9fbGIubyBjcnlwdG9fZGV2 Lm8gY3J5cHRvX2Nvbm4ubyBjcnlwdG9fc3RhdC5vDQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9zaW1w bGVfbGIuYyBsaW51eC0yLjYvZHJpdmVycy9hY3J5cHRvL3NpbXBsZV9sYi5jDQotLS0gL3RtcC9l bXB0eS9zaW1wbGVfbGIuYwkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysr IGxpbnV4LTIuNi9kcml2ZXJzL2FjcnlwdG8vc2ltcGxlX2xiLmMJMjAwNC0xMi0xNCAxODo1Mzox MS4wMDAwMDAwMDAgKzAzMDANCkBAIC0wLDAgKzEsOTEgQEANCisvKg0KKyAqIAlzaW1wbGVfbGIu Yw0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xA MmthLm1pcHQucnU+DQorICogDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 DQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3INCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0K KyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUN CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u LCBNQSAwMjExMS0xMzA3IFVTQQ0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4N CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFt Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4N CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKw0KKyNpbmNsdWRlICJjcnlwdG9fbGIuaCINCisN CitzdGF0aWMgdm9pZCBzaW1wbGVfbGJfcmVoYXNoKHN0cnVjdCBjcnlwdG9fbGIgKik7DQorc3Rh dGljIHN0cnVjdCBjcnlwdG9fZGV2aWNlICpzaW1wbGVfbGJfZmluZF9kZXZpY2Uoc3RydWN0IGNy eXB0b19sYiAqLA0KKwkJCQkJCSAgIHN0cnVjdA0KKwkJCQkJCSAgIGNyeXB0b19zZXNzaW9uX2lu aXRpYWxpemVyICosDQorCQkJCQkJICAgc3RydWN0IGNyeXB0b19kYXRhICopOw0KKw0KK3N0cnVj dCBjcnlwdG9fbGIgc2ltcGxlX2xiID0gew0KKwkubmFtZSA9ICJzaW1wbGVfbGIiLA0KKwkucmVo YXNoID0gc2ltcGxlX2xiX3JlaGFzaCwNCisJLmZpbmRfZGV2aWNlID0gc2ltcGxlX2xiX2ZpbmRf ZGV2aWNlDQorfTsNCisNCitzdGF0aWMgdm9pZCBzaW1wbGVfbGJfcmVoYXNoKHN0cnVjdCBjcnlw dG9fbGIgKmxiKQ0KK3sNCit9DQorDQorc3RhdGljIHN0cnVjdCBjcnlwdG9fZGV2aWNlICpzaW1w bGVfbGJfZmluZF9kZXZpY2Uoc3RydWN0IGNyeXB0b19sYiAqbGIsDQorCQkJCQkJICAgc3RydWN0 DQorCQkJCQkJICAgY3J5cHRvX3Nlc3Npb25faW5pdGlhbGl6ZXINCisJCQkJCQkgICAqY2ksDQor CQkJCQkJICAgc3RydWN0IGNyeXB0b19kYXRhICpkYXRhKQ0KK3sNCisJc3RydWN0IGNyeXB0b19k ZXZpY2UgKmRldiwgKl9fZGV2Ow0KKwlpbnQgbWluID0gMHg3ZmZmZmZmOw0KKw0KKwlfX2RldiA9 IE5VTEw7DQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBsYi0+Y3J5cHRvX2RldmljZV9saXN0 LCBjZGV2X2VudHJ5KSB7DQorCQlpZiAoZGV2aWNlX2Jyb2tlbihkZXYpKQ0KKwkJCWNvbnRpbnVl Ow0KKwkJaWYgKCFtYXRjaF9pbml0aWFsaXplcihkZXYsIGNpKSkNCisJCQljb250aW51ZTsNCisN CisJCWlmIChhdG9taWNfcmVhZCgmZGV2LT5yZWZjbnQpIDwgbWluKSB7DQorCQkJbWluID0gYXRv bWljX3JlYWQoJmRldi0+cmVmY250KTsNCisJCQlfX2RldiA9IGRldjsNCisJCX0NCisJfQ0KKw0K KwlyZXR1cm4gX19kZXY7DQorfQ0KKw0KK2ludCBfX2RldmluaXQgc2ltcGxlX2xiX2luaXQodm9p ZCkNCit7DQorCWRwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBzaW1wbGUgY3J5cHRvIGxv YWQgYmFsYW5jZXIuXG4iKTsNCisNCisJcmV0dXJuIGNyeXB0b19sYl9yZWdpc3Rlcigmc2ltcGxl X2xiLCAxLCAxKTsNCit9DQorDQordm9pZCBfX2RldmV4aXQgc2ltcGxlX2xiX2Zpbmkodm9pZCkN Cit7DQorCWRwcmludGsoS0VSTl9JTkZPICJVbnJlZ2lzdGVyaW5nIHNpbXBsZSBjcnlwdG8gbG9h ZCBiYWxhbmNlci5cbiIpOw0KKw0KKwljcnlwdG9fbGJfdW5yZWdpc3Rlcigmc2ltcGxlX2xiKTsN Cit9DQorDQorbW9kdWxlX2luaXQoc2ltcGxlX2xiX2luaXQpOw0KK21vZHVsZV9leGl0KHNpbXBs ZV9sYl9maW5pKTsNCisNCitNT0RVTEVfTElDRU5TRSgiR1BMIik7DQorTU9EVUxFX0FVVEhPUigi RXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4iKTsNCitNT0RVTEVfREVTQ1JJ UFRJT04oIlNpbXBsZSBjcnlwdG8gbG9hZCBiYWxhbmNlci4iKTsNCi== --=-6hXhvAybrmqrLjuzQFoX Content-Disposition: attachment; filename=connector.patch Content-Type: text/x-patch; name=connector.patch; charset=KOI8-R Content-Transfer-Encoding: base64 ZGlmZiAtTnJ1IC90bXAvZW1wdHkvS2NvbmZpZyBsaW51eC0yLjYvZHJpdmVycy9jb25uZWN0b3Iv S2NvbmZpZw0KLS0tIC90bXAvZW1wdHkvS2NvbmZpZwkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAw MDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmlnCTIwMDQt MDktMjYgMDA6MTI6NTcuMDAwMDAwMDAwICswNDAwDQpAQCAtMCwwICsxLDEzIEBADQorbWVudSAi Q29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlciINCisN Citjb25maWcgQ09OTkVDVE9SDQorCXRyaXN0YXRlICJDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJz cGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyIg0KKwlkZXBlbmRzIG9uIE5FVA0KKwktLS1oZWxw LS0tDQorCSAgVGhpcyBpcyB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgY29ubmVj dG9yIHdvcmtpbmcgb24gdG9wDQorCSAgb2YgdGhlIG5ldGxpbmsgc29ja2V0IHByb3RvY29sLg0K Kw0KKwkgIENvbm5lY3RvciBzdXBwb3J0IGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAg SWYgc28sIHRoZSBtb2R1bGUNCisJICB3aWxsIGJlIGNhbGxlZCBjb25uZWN0b3Iua28uDQorDQor ZW5kbWVudQ0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvTWFrZWZpbGUgbGludXgtMi42L2RyaXZlcnMv Y29ubmVjdG9yL01ha2VmaWxlDQotLS0gL3RtcC9lbXB0eS9NYWtlZmlsZQkxOTcwLTAxLTAxIDAz OjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL2Nvbm5lY3Rvci9N YWtlZmlsZQkyMDA0LTA5LTI2IDAwOjEyOjU3LjAwMDAwMDAwMCArMDQwMA0KQEAgLTAsMCArMSwy IEBADQorb2JqLSQoQ09ORklHX0NPTk5FQ1RPUikJCSs9IGNuLm8NCitjbi1vYmpzCQk6PSBjbl9x dWV1ZS5vIGNvbm5lY3Rvci5vDQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9jbl9xdWV1ZS5jIGxpbnV4 LTIuNi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jDQotLS0gL3RtcC9lbXB0eS9jbl9xdWV1 ZS5jCTE5NzAtMDEtMDEgMDM6MDA6MDAuMDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42L2Ry aXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMJMjAwNC0wOS0yNiAyMTo1MDoxMi4wMDAwMDAwMDAg KzA0MDANCkBAIC0wLDAgKzEsMjE5IEBADQorLyoNCisgKiAJY25fcXVldWUuYw0KKyAqIA0KKyAq IDIwMDQgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1 Pg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICogDQorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQ0KKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAz MzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KKyAqDQorICovDQorDQorI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8 bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCisjaW5jbHVkZSA8 bGludXgvc3BpbmxvY2suaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxs aW51eC9za2J1ZmYuaD4NCisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPg0KKw0KKyNpbmNsdWRl ICJjbl9xdWV1ZS5oIg0KKw0KK3N0YXRpYyB2b2lkIGNuX3F1ZXVlX3dyYXBwZXIodm9pZCAqZGF0 YSkNCit7DQorCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxID0gKHN0cnVjdCBjbl9jYWxs YmFja19lbnRyeSAqKWRhdGE7DQorDQorCWF0b21pY19pbmMoJmNicS0+Y2ItPnJlZmNudCk7DQor CWNicS0+Y2ItPmNhbGxiYWNrKGNicS0+Y2ItPnByaXYpOw0KKwlhdG9taWNfZGVjKCZjYnEtPmNi LT5yZWZjbnQpOw0KKw0KKwljYnEtPmRlc3RydWN0X2RhdGEoY2JxLT5kZGF0YSk7DQorfQ0KKw0K K3N0YXRpYyBzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNuX3F1ZXVlX2FsbG9jX2NhbGxiYWNr X2VudHJ5KHN0cnVjdA0KKwkJCQkJCQkgICAgICAgY25fY2FsbGJhY2sgKmNiKQ0KK3sNCisJc3Ry dWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnE7DQorDQorCWNicSA9IGttYWxsb2Moc2l6ZW9mKCpj YnEpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFjYnEpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiRmFp bGVkIHRvIGNyZWF0ZSBuZXcgY2FsbGJhY2sgcXVldWUuXG4iKTsNCisJCXJldHVybiBOVUxMOw0K Kwl9DQorDQorCW1lbXNldChjYnEsIDAsIHNpemVvZigqY2JxKSk7DQorDQorCWNicS0+Y2IgPSBj YjsNCisNCisJSU5JVF9XT1JLKCZjYnEtPndvcmssICZjbl9xdWV1ZV93cmFwcGVyLCBjYnEpOw0K Kw0KKwlyZXR1cm4gY2JxOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbl9xdWV1ZV9mcmVlX2NhbGxi YWNrKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxKQ0KK3sNCisJY2FuY2VsX2RlbGF5ZWRf d29yaygmY2JxLT53b3JrKTsNCisNCisJd2hpbGUgKGF0b21pY19yZWFkKCZjYnEtPmNiLT5yZWZj bnQpKSB7DQorCQlwcmludGsoS0VSTl9JTkZPICJXYWl0aW5nIGZvciAlcyB0byBiZWNvbWUgZnJl ZTogcmVmY250PSVkLlxuIiwNCisJCSAgICAgICBjYnEtPnBkZXYtPm5hbWUsIGF0b21pY19yZWFk KCZjYnEtPmNiLT5yZWZjbnQpKTsNCisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBU SUJMRSk7DQorCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsNCisNCisJCWlmIChjdXJyZW50LT5mbGFn cyAmIFBGX0ZSRUVaRSkNCisJCQlyZWZyaWdlcmF0b3IoUEZfRlJFRVpFKTsNCisNCisJCWlmIChz aWduYWxfcGVuZGluZyhjdXJyZW50KSkNCisJCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOw0KKwl9 DQorDQorCWtmcmVlKGNicSk7DQorfQ0KKw0KK2ludCBjbl9jYl9lcXVhbChzdHJ1Y3QgY2JfaWQg KmkxLCBzdHJ1Y3QgY2JfaWQgKmkyKQ0KK3sNCisJcmV0dXJuICgoaTEtPmlkeCA9PSBpMi0+aWR4 KSAmJiAoaTEtPnZhbCA9PSBpMi0+dmFsKSk7DQorfQ0KKw0KK2ludCBjbl9xdWV1ZV9hZGRfY2Fs bGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY25fY2FsbGJhY2sgKmNiKQ0K K3sNCisJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsICpuLCAqX19jYnE7DQorCWludCBm b3VuZCA9IDA7DQorDQorCWNicSA9IGNuX3F1ZXVlX2FsbG9jX2NhbGxiYWNrX2VudHJ5KGNiKTsN CisJaWYgKCFjYnEpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJYXRvbWljX2luYygmZGV2LT5y ZWZjbnQpOw0KKwljYnEtPnBkZXYgPSBkZXY7DQorDQorCXNwaW5fbG9jaygmZGV2LT5xdWV1ZV9s b2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKF9fY2JxLCBuLCAmZGV2LT5xdWV1ZV9s aXN0LCBjYWxsYmFja19lbnRyeSkgew0KKwkJaWYgKGNuX2NiX2VxdWFsKCZfX2NicS0+Y2ItPmlk LCAmY2ItPmlkKSkgew0KKwkJCWZvdW5kID0gMTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKwlp ZiAoIWZvdW5kKSB7DQorCQlhdG9taWNfc2V0KCZjYnEtPmNiLT5yZWZjbnQsIDEpOw0KKwkJbGlz dF9hZGRfdGFpbCgmY2JxLT5jYWxsYmFja19lbnRyeSwgJmRldi0+cXVldWVfbGlzdCk7DQorCX0N CisJc3Bpbl91bmxvY2soJmRldi0+cXVldWVfbG9jayk7DQorDQorCWlmIChmb3VuZCkgew0KKwkJ YXRvbWljX2RlYygmZGV2LT5yZWZjbnQpOw0KKwkJYXRvbWljX3NldCgmY2JxLT5jYi0+cmVmY250 LCAwKTsNCisJCWNuX3F1ZXVlX2ZyZWVfY2FsbGJhY2soY2JxKTsNCisJCXJldHVybiAtRUlOVkFM Ow0KKwl9DQorDQorCWNicS0+bmxzID0gZGV2LT5ubHM7DQorCWNicS0+c2VxID0gMDsNCisJLy9j YnEtPmdyb3VwID0gKytkZXYtPm5ldGxpbmtfZ3JvdXBzOw0KKwljYnEtPmdyb3VwID0gY2JxLT5j Yi0+aWQuaWR4Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBjbl9xdWV1ZV9kZWxfY2Fs bGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY25fY2FsbGJhY2sgKmNiKQ0K K3sNCisJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEgPSBOVUxMLCAqbjsNCisJaW50IGZv dW5kID0gMDsNCisNCisJc3Bpbl9sb2NrKCZkZXYtPnF1ZXVlX2xvY2spOw0KKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoY2JxLCBuLCAmZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkg ew0KKwkJaWYgKGNuX2NiX2VxdWFsKCZjYnEtPmNiLT5pZCwgJmNiLT5pZCkpIHsNCisJCQlsaXN0 X2RlbCgmY2JxLT5jYWxsYmFja19lbnRyeSk7DQorCQkJZm91bmQgPSAxOw0KKwkJCWJyZWFrOw0K KwkJfQ0KKwl9DQorCXNwaW5fdW5sb2NrKCZkZXYtPnF1ZXVlX2xvY2spOw0KKw0KKwlpZiAoZm91 bmQpIHsNCisJCWF0b21pY19kZWMoJmNicS0+Y2ItPnJlZmNudCk7DQorCQljbl9xdWV1ZV9mcmVl X2NhbGxiYWNrKGNicSk7DQorCQlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7DQorCX0NCit9DQor DQorc3RydWN0IGNuX3F1ZXVlX2RldiAqY25fcXVldWVfYWxsb2NfZGV2KGNoYXIgKm5hbWUsIHN0 cnVjdCBzb2NrICpubHMpDQorew0KKwlzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXY7DQorDQorCWRl diA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFkZXYpIHsNCisJ CXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBhbGxvY3RlIG5ldyBzdHJ1Y3QgY25fcXVl dWVfZGV2LlxuIiwNCisJCSAgICAgICBuYW1lKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQor CW1lbXNldChkZXYsIDAsIHNpemVvZigqZGV2KSk7DQorDQorCXNucHJpbnRmKGRldi0+bmFtZSwg c2l6ZW9mKGRldi0+bmFtZSksICIlcyIsIG5hbWUpOw0KKw0KKwlhdG9taWNfc2V0KCZkZXYtPnJl ZmNudCwgMCk7DQorCUlOSVRfTElTVF9IRUFEKCZkZXYtPnF1ZXVlX2xpc3QpOw0KKwlzcGluX2xv Y2tfaW5pdCgmZGV2LT5xdWV1ZV9sb2NrKTsNCisNCisJZGV2LT5ubHMgPSBubHM7DQorCWRldi0+ bmV0bGlua19ncm91cHMgPSAwOw0KKw0KKwlkZXYtPmNuX3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1 ZShkZXYtPm5hbWUpOw0KKwlpZiAoIWRldi0+Y25fcXVldWUpIHsNCisJCXByaW50ayhLRVJOX0VS UiAiRmFpbGVkIHRvIGNyZWF0ZSAlcyBxdWV1ZS5cbiIsIGRldi0+bmFtZSk7DQorCQlrZnJlZShk ZXYpOw0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisNCisJcmV0dXJuIGRldjsNCit9DQorDQordm9p ZCBjbl9xdWV1ZV9mcmVlX2RldihzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYpDQorew0KKwlzdHJ1 Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgKm47DQorDQorCWZsdXNoX3dvcmtxdWV1ZShkZXYt PmNuX3F1ZXVlKTsNCisJZGVzdHJveV93b3JrcXVldWUoZGV2LT5jbl9xdWV1ZSk7DQorDQorCXNw aW5fbG9jaygmZGV2LT5xdWV1ZV9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNi cSwgbiwgJmRldi0+cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsNCisJCWxpc3RfZGVsKCZj YnEtPmNhbGxiYWNrX2VudHJ5KTsNCisJCWF0b21pY19kZWMoJmNicS0+Y2ItPnJlZmNudCk7DQor CX0NCisJc3Bpbl91bmxvY2soJmRldi0+cXVldWVfbG9jayk7DQorDQorCXdoaWxlIChhdG9taWNf cmVhZCgmZGV2LT5yZWZjbnQpKSB7DQorCQlwcmludGsoS0VSTl9JTkZPICJXYWl0aW5nIGZvciAl cyB0byBiZWNvbWUgZnJlZTogcmVmY250PSVkLlxuIiwNCisJCSAgICAgICBkZXYtPm5hbWUsIGF0 b21pY19yZWFkKCZkZXYtPnJlZmNudCkpOw0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRF UlJVUFRJQkxFKTsNCisJCXNjaGVkdWxlX3RpbWVvdXQoSFopOw0KKw0KKwkJaWYgKGN1cnJlbnQt PmZsYWdzICYgUEZfRlJFRVpFKQ0KKwkJCXJlZnJpZ2VyYXRvcihQRl9GUkVFWkUpOw0KKw0KKwkJ aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQ0KKwkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7 DQorCX0NCisNCisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKCpkZXYpKTsNCisJa2ZyZWUoZGV2KTsN CisJZGV2ID0gTlVMTDsNCit9DQorDQorRVhQT1JUX1NZTUJPTChjbl9xdWV1ZV9hZGRfY2FsbGJh Y2spOw0KK0VYUE9SVF9TWU1CT0woY25fcXVldWVfZGVsX2NhbGxiYWNrKTsNCitFWFBPUlRfU1lN Qk9MKGNuX3F1ZXVlX2FsbG9jX2Rldik7DQorRVhQT1JUX1NZTUJPTChjbl9xdWV1ZV9mcmVlX2Rl dik7DQpkaWZmIC1OcnUgL3RtcC9lbXB0eS9jbl9xdWV1ZS5oIGxpbnV4LTIuNi9kcml2ZXJzL2Nv bm5lY3Rvci9jbl9xdWV1ZS5oDQotLS0gL3RtcC9lbXB0eS9jbl9xdWV1ZS5oCTE5NzAtMDEtMDEg MDM6MDA6MDAuMDAwMDAwMDAwICswMzAwDQorKysgbGludXgtMi42L2RyaXZlcnMvY29ubmVjdG9y L2NuX3F1ZXVlLmgJMjAwNC0wOS0yNiAwMDoxNDoxNi4wMDAwMDAwMDAgKzA0MDANCkBAIC0wLDAg KzEsOTAgQEANCisvKg0KKyAqIAljbl9xdWV1ZS5oDQorICogDQorICogMjAwNCBDb3B5cmlnaHQg KGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+DQorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4NCisgKiANCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICog dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3INCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgKiBG b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg MDIxMTEtMTMwNyAgVVNBDQorICovDQorDQorI2lmbmRlZiBfX0NOX1FVRVVFX0gNCisjZGVmaW5l IF9fQ05fUVVFVUVfSA0KKw0KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4NCisNCitzdHJ1Y3QgY2Jf aWQNCit7DQorCV9fdTMyCQkJaWR4Ow0KKwlfX3UzMgkJCXZhbDsNCit9Ow0KKw0KKyNpZmRlZiBf X0tFUk5FTF9fDQorDQorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4NCisNCisjaW5jbHVkZSA8bGlu dXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCisNCisjZGVmaW5lIENO X0NCUV9OQU1FTEVOCQkzMg0KKw0KK3N0cnVjdCBjbl9xdWV1ZV9kZXYNCit7DQorCWF0b21pY190 CQlyZWZjbnQ7DQorCXVuc2lnbmVkIGNoYXIJCW5hbWVbQ05fQ0JRX05BTUVMRU5dOw0KKw0KKwlz dHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqY25fcXVldWU7DQorCQ0KKwlzdHJ1Y3QgbGlzdF9oZWFk IAlxdWV1ZV9saXN0Ow0KKwlzcGlubG9ja190IAkJcXVldWVfbG9jazsNCisNCisJaW50CQkJbmV0 bGlua19ncm91cHM7DQorCXN0cnVjdCBzb2NrCQkqbmxzOw0KK307DQorDQorc3RydWN0IGNuX2Nh bGxiYWNrDQorew0KKwl1bnNpZ25lZCBjaGFyCQluYW1lW0NOX0NCUV9OQU1FTEVOXTsNCisJDQor CXN0cnVjdCBjYl9pZAkJaWQ7DQorCXZvaWQJCQkoKiBjYWxsYmFjaykodm9pZCAqKTsNCisJdm9p ZAkJCSpwcml2Ow0KKwkNCisJYXRvbWljX3QJCXJlZmNudDsNCit9Ow0KKw0KK3N0cnVjdCBjbl9j YWxsYmFja19lbnRyeQ0KK3sNCisJc3RydWN0IGxpc3RfaGVhZAljYWxsYmFja19lbnRyeTsNCisJ c3RydWN0IGNuX2NhbGxiYWNrCSpjYjsNCisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7DQorCXN0 cnVjdCBjbl9xdWV1ZV9kZXYJKnBkZXY7DQorCQ0KKwl2b2lkCQkJKCogZGVzdHJ1Y3RfZGF0YSko dm9pZCAqKTsNCisJdm9pZAkJCSpkZGF0YTsNCisNCisJaW50CQkJc2VxLCBncm91cDsNCisJc3Ry dWN0IHNvY2sJCSpubHM7DQorfTsNCisNCitpbnQgY25fcXVldWVfYWRkX2NhbGxiYWNrKHN0cnVj dCBjbl9xdWV1ZV9kZXYgKmRldiwgc3RydWN0IGNuX2NhbGxiYWNrICpjYik7DQordm9pZCBjbl9x dWV1ZV9kZWxfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBzdHJ1Y3QgY25fY2Fs bGJhY2sgKmNiKTsNCisNCitzdHJ1Y3QgY25fcXVldWVfZGV2ICpjbl9xdWV1ZV9hbGxvY19kZXYo Y2hhciAqbmFtZSwgc3RydWN0IHNvY2sgKik7DQordm9pZCBjbl9xdWV1ZV9mcmVlX2RldihzdHJ1 Y3QgY25fcXVldWVfZGV2ICpkZXYpOw0KKw0KK2ludCBjbl9jYl9lcXVhbChzdHJ1Y3QgY2JfaWQg Kiwgc3RydWN0IGNiX2lkICopOw0KKw0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovDQorI2VuZGlm IC8qIF9fQ05fUVVFVUVfSCAqLw0KZGlmZiAtTnJ1IC90bXAvZW1wdHkvY29ubmVjdG9yLmMgbGlu dXgtMi42L2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jDQotLS0gL3RtcC9lbXB0eS9jb25u ZWN0b3IuYwkxOTcwLTAxLTAxIDAzOjAwOjAwLjAwMDAwMDAwMCArMDMwMA0KKysrIGxpbnV4LTIu Ni9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwkyMDA0LTA5LTI2IDIxOjUyOjAyLjAwMDAw MDAwMCArMDQwMA0KQEAgLTAsMCArMSw0OTggQEANCisvKg0KKyAqIAljb25uZWN0b3IuYw0KKyAq IA0KKyAqIDIwMDQgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5t aXB0LnJ1Pg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICogDQorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkN CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQ0KKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT dWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQ0KKyAqLw0KKw0KKyNpbmNsdWRl IDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+DQorI2luY2x1ZGUgPGxp bnV4L25ldGxpbmsuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCisNCisjaW5j bHVkZSA8bmV0L3NvY2suaD4NCisNCisjaW5jbHVkZSAiLi4vY29ubmVjdG9yL2Nvbm5lY3Rvci5o Ig0KKyNpbmNsdWRlICIuLi9jb25uZWN0b3IvY25fcXVldWUuaCINCisNCitNT0RVTEVfTElDRU5T RSgiR1BMIik7DQorTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2Eu bWlwdC5ydT4iKTsNCitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgdXNlcnNwYWNlIDwtPiBr ZXJuZWxzcGFjZSBjb25uZWN0b3IuIik7DQorDQorc3RhdGljIGludCB1bml0ID0gTkVUTElOS19O RkxPRzsNCitzdGF0aWMgdTMyIGNuX2lkeCA9IC0xOw0KK3N0YXRpYyB1MzIgY25fdmFsID0gLTE7 DQorDQorbW9kdWxlX3BhcmFtKHVuaXQsIGludCwgMCk7DQorbW9kdWxlX3BhcmFtKGNuX2lkeCwg dWludCwgMCk7DQorbW9kdWxlX3BhcmFtKGNuX3ZhbCwgdWludCwgMCk7DQorDQorc3BpbmxvY2tf dCBub3RpZnlfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsNCitzdGF0aWMgTElTVF9IRUFEKG5v dGlmeV9saXN0KTsNCisNCitzdGF0aWMgc3RydWN0IGNuX2RldiBjZGV2Ow0KKw0KKy8qDQorICog bXNnLT5zZXEgYW5kIG1zZy0+YWNrIGFyZSB1c2VkIHRvIGRldGVybWluZSBtZXNzYWdlIGdlbmVh bG9neS4NCisgKiBXaGVuIHNvbWVvbmUgc2VuZHMgbWVzc2FnZSBpdCBwdXRzIHRoZXJlIGxvY2Fs bHkgdW5pcXVlIHNlcXVlbmNlIA0KKyAqIGFuZCByYW5kb20gYWNrbm93bGVkZ2UgbnVtYmVycy4N CisgKiBTZXF1ZW5jZSBudW1iZXIgbWF5IGJlIGNvcGllZCBpbnRvIG5sbXNnaGRyLT5ubG1zZ19z ZXEgdG9vLg0KKyAqDQorICogU2VxdWVuY2UgbnVtYmVyIGlzIGluY3JlbWVudGVkIHdpdGggZWFj aCBtZXNzYWdlIHRvIGJlIHNlbnQuDQorICoNCisgKiBJZiB3ZSBleHBlY3QgcmVwbHkgdG8gb3Vy IG1lc3NhZ2UsIA0KKyAqIHRoZW4gc2VxdWVuY2UgbnVtYmVyIGluIHJlY2VpdmVkIG1lc3NhZ2Ug TVVTVCBiZSB0aGUgc2FtZSBhcyBpbiBvcmlnaW5hbCBtZXNzYWdlLA0KKyAqIGFuZCBhY2tub3ds ZWRnZSBudW1iZXIgTVVTVCBiZSB0aGUgc2FtZSArIDEuDQorICoNCisgKiBJZiB3ZSByZWNlaXZl IG1lc3NhZ2UgYW5kIGl0J3Mgc2VxdWVuY2UgbnVtYmVyIGlzIG5vdCBlcXVhbCB0byBvbmUgd2Ug YXJlIGV4cGVjdGluZywgDQorICogdGhlbiBpdCBpcyBuZXcgbWVzc2FnZS4NCisgKiBJZiB3ZSBy ZWNlaXZlIG1lc3NhZ2UgYW5kIGl0J3Mgc2VxdWVuY2UgbnVtYmVyIGlzIHRoZSBzYW1lIGFzIG9u ZSB3ZSBhcmUgZXhwZWN0aW5nLA0KKyAqIGJ1dCBpdCdzIGFja25vd2xlZGdlIGlzIG5vdCBlcXVh bCBhY2tub3dsZWRnZSBudW1iZXIgaW4gb3JpZ2luYWwgbWVzc2FnZSArIDEsDQorICogdGhlbiBp dCBpcyBuZXcgbWVzc2FnZS4NCisgKg0KKyAqLw0KK3ZvaWQgY25fbmV0bGlua19zZW5kKHN0cnVj dCBjbl9tc2cgKm1zZywgdTMyIF9fZ3JvdXBzKQ0KK3sNCisJc3RydWN0IGNuX2NhbGxiYWNrX2Vu dHJ5ICpuLCAqX19jYnE7DQorCXVuc2lnbmVkIGludCBzaXplOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAq c2tiOw0KKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsNCisJc3RydWN0IGNuX21zZyAqZGF0YTsNCisJ c3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQorCXUzMiBncm91cHMgPSAwOw0KKwlpbnQgZm91 bmQgPSAwOw0KKw0KKwlpZiAoIV9fZ3JvdXBzKQ0KKwl7DQorCQlzcGluX2xvY2soJmRldi0+Y2Jk ZXYtPnF1ZXVlX2xvY2spOw0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKF9fY2JxLCBuLCAm ZGV2LT5jYmRldi0+cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsNCisJCQlpZiAoY25fY2Jf ZXF1YWwoJl9fY2JxLT5jYi0+aWQsICZtc2ctPmlkKSkgew0KKwkJCQlmb3VuZCA9IDE7DQorCQkJ CWdyb3VwcyA9IF9fY2JxLT5ncm91cDsNCisJCQl9DQorCQl9DQorCQlzcGluX3VubG9jaygmZGV2 LT5jYmRldi0+cXVldWVfbG9jayk7DQorDQorCQlpZiAoIWZvdW5kKSB7DQorCQkJcHJpbnRrKEtF Uk5fRVJSICJGYWlsZWQgdG8gZmluZCBtdWx0aWNhc3QgbmV0bGluayBncm91cCBmb3IgY2FsbGJh Y2tbMHgleC4weCV4XS4gc2VxPSV1XG4iLA0KKwkJCSAgICAgICBtc2ctPmlkLmlkeCwgbXNnLT5p ZC52YWwsIG1zZy0+c2VxKTsNCisJCQlyZXR1cm47DQorCQl9DQorCX0NCisJZWxzZQ0KKwkJZ3Jv dXBzID0gX19ncm91cHM7DQorDQorCXNpemUgPSBOTE1TR19TUEFDRShzaXplb2YoKm1zZykgKyBt c2ctPmxlbik7DQorDQorCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsNCisJaWYg KCFza2IpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBza2Ig d2l0aCBzaXplPSV1LlxuIiwgc2l6ZSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJbmxoID0gTkxN U0dfUFVUKHNrYiwgMCwgbXNnLT5zZXEsIE5MTVNHX0RPTkUsIHNpemUgLSBzaXplb2YoKm5saCkp Ow0KKw0KKwlkYXRhID0gKHN0cnVjdCBjbl9tc2cgKilOTE1TR19EQVRBKG5saCk7DQorDQorCW1l bWNweShkYXRhLCBtc2csIHNpemVvZigqZGF0YSkgKyBtc2ctPmxlbik7DQorI2lmIDANCisJcHJp bnRrKCIlczogbGVuPSV1LCBzZXE9JXUsIGFjaz0ldSwgZ3JvdXA9JXUuXG4iLA0KKwkgICAgICAg X19mdW5jX18sIG1zZy0+bGVuLCBtc2ctPnNlcSwgbXNnLT5hY2ssIGdyb3Vwcyk7DQorI2VuZGlm DQorCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXBzID0gZ3JvdXBzOw0KKwluZXRsaW5rX2Jyb2Fk Y2FzdChkZXYtPm5scywgc2tiLCAwLCBncm91cHMsIEdGUF9BVE9NSUMpOw0KKw0KKwlyZXR1cm47 DQorDQorICAgICAgbmxtc2dfZmFpbHVyZToNCisJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8g c2VuZCAldS4ldVxuIiwgbXNnLT5zZXEsIG1zZy0+YWNrKTsNCisJa2ZyZWVfc2tiKHNrYik7DQor CXJldHVybjsNCit9DQorDQorc3RhdGljIGludCBjbl9jYWxsX2NhbGxiYWNrKHN0cnVjdCBjbl9t c2cgKm1zZywgdm9pZCAoKmRlc3RydWN0X2RhdGEpICh2b2lkICopLCB2b2lkICpkYXRhKQ0KK3sN CisJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpuLCAqX19jYnE7DQorCXN0cnVjdCBjbl9kZXYg KmRldiA9ICZjZGV2Ow0KKwlpbnQgZm91bmQgPSAwOw0KKw0KKwlzcGluX2xvY2soJmRldi0+Y2Jk ZXYtPnF1ZXVlX2xvY2spOw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoX19jYnEsIG4sICZk ZXYtPmNiZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRyeSkgew0KKwkJaWYgKGNuX2NiX2Vx dWFsKCZfX2NicS0+Y2ItPmlkLCAmbXNnLT5pZCkpIHsNCisJCQlfX2NicS0+Y2ItPnByaXYgPSBt c2c7DQorDQorCQkJX19jYnEtPmRkYXRhID0gZGF0YTsNCisJCQlfX2NicS0+ZGVzdHJ1Y3RfZGF0 YSA9IGRlc3RydWN0X2RhdGE7DQorDQorCQkJcXVldWVfd29yayhkZXYtPmNiZGV2LT5jbl9xdWV1 ZSwgJl9fY2JxLT53b3JrKTsNCisJCQlmb3VuZCA9IDE7DQorCQkJYnJlYWs7DQorCQl9DQorCX0N CisJc3Bpbl91bmxvY2soJmRldi0+Y2JkZXYtPnF1ZXVlX2xvY2spOw0KKw0KKwlyZXR1cm4gZm91 bmQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19jbl9yeF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwg c3RydWN0IG5sbXNnaGRyICpubGgpDQorew0KKwl1MzIgcGlkLCB1aWQsIHNlcSwgZ3JvdXA7DQor CXN0cnVjdCBjbl9tc2cgKm1zZzsNCisNCisJcGlkID0gTkVUTElOS19DUkVEUyhza2IpLT5waWQ7 DQorCXVpZCA9IE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkOw0KKwlzZXEgPSBubGgtPm5sbXNnX3Nl cTsNCisJZ3JvdXAgPSBORVRMSU5LX0NCKChza2IpKS5ncm91cHM7DQorCW1zZyA9IChzdHJ1Y3Qg Y25fbXNnICopTkxNU0dfREFUQShubGgpOw0KKw0KKwlpZiAobXNnLT5sZW4gIT0gbmxoLT5ubG1z Z19sZW4gLSBzaXplb2YoKm1zZykgLSBzaXplb2YoKm5saCkpIHsNCisJCXByaW50ayhLRVJOX0VS UiAic2tiIGRvZXMgbm90IGhhdmUgZW5vdWdoIGxlbmd0aDogIg0KKwkJCQkicmVxdWVzdGVkIG1z Zy0+bGVuPSV1WyV1XSwgbmxoLT5ubG1zZ19sZW49JXVbJXVdLCBza2ItPmxlbj0ldVttdXN0IGJl ICV1XS5cbiIsIA0KKwkJCQltc2ctPmxlbiwgTkxNU0dfU1BBQ0UobXNnLT5sZW4pLCANCisJCQkJ bmxoLT5ubG1zZ19sZW4sIG5saC0+bmxtc2dfbGVuIC0gc2l6ZW9mKCpubGgpLA0KKwkJCQlza2It PmxlbiwgbXNnLT5sZW4gKyBzaXplb2YoKm1zZykpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0N CisjaWYgMA0KKwlwcmludGsoS0VSTl9JTkZPICJwaWQ9JXUsIHVpZD0ldSwgc2VxPSV1LCBncm91 cD0ldS5cbiIsDQorCSAgICAgICBwaWQsIHVpZCwgc2VxLCBncm91cCk7DQorI2VuZGlmDQorCXJl dHVybiBjbl9jYWxsX2NhbGxiYWNrKG1zZywgKHZvaWQgKCopKHZvaWQgKikpa2ZyZWVfc2tiLCBz a2IpOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbl9yeF9za2Ioc3RydWN0IHNrX2J1ZmYgKl9fc2ti KQ0KK3sNCisJc3RydWN0IG5sbXNnaGRyICpubGg7DQorCXUzMiBsZW47DQorCWludCBlcnI7DQor CXN0cnVjdCBza19idWZmICpza2I7DQorDQorCXNrYiA9IHNrYl9nZXQoX19za2IpOw0KKwlpZiAo IXNrYikgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVmZXJlbmNlIGFuIHNrYi5c biIpOw0KKwkJcmV0dXJuOw0KKwl9DQorI2lmIDANCisJcHJpbnRrKEtFUk5fSU5GTw0KKwkgICAg ICAgInNrYjogbGVuPSV1LCBkYXRhX2xlbj0ldSwgdHJ1ZXNpemU9JXUsIHByb3RvPSV1LCBjbG9u ZWQ9JWQsIHNoYXJlZD0lZC5cbiIsDQorCSAgICAgICBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbiwg c2tiLT50cnVlc2l6ZSwgc2tiLT5wcm90b2NvbCwNCisJICAgICAgIHNrYl9jbG9uZWQoc2tiKSwg c2tiX3NoYXJlZChza2IpKTsNCisjZW5kaWYNCisJd2hpbGUgKHNrYi0+bGVuID49IE5MTVNHX1NQ QUNFKDApKSB7DQorCQlubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhOw0KKwkJaWYg KG5saC0+bmxtc2dfbGVuIDwgc2l6ZW9mKHN0cnVjdCBjbl9tc2cpIHx8DQorCQkgICAgc2tiLT5s ZW4gPCBubGgtPm5sbXNnX2xlbiB8fA0KKwkJICAgIG5saC0+bmxtc2dfbGVuID4gQ09OTkVDVE9S X01BWF9NU0dfU0laRSkgew0KKwkJCXByaW50ayhLRVJOX0lORk8gIm5sbXNnX2xlbj0ldSwgc2l6 ZW9mKCpubGgpPSV1XG4iLA0KKwkJCSAgICAgICBubGgtPm5sbXNnX2xlbiwgc2l6ZW9mKCpubGgp KTsNCisJCQlicmVhazsNCisJCX0NCisNCisJCWxlbiA9IE5MTVNHX0FMSUdOKG5saC0+bmxtc2df bGVuKTsNCisJCWlmIChsZW4gPiBza2ItPmxlbikNCisJCQlsZW4gPSBza2ItPmxlbjsNCisNCisJ CWVyciA9IF9fY25fcnhfc2tiKHNrYiwgbmxoKTsNCisJCWlmIChlcnIpIHsNCisjaWYgMA0KKwkJ CWlmIChlcnIgPCAwICYmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQUNLKSkNCisJCQkJbmV0 bGlua19hY2soc2tiLCBubGgsIC1lcnIpOw0KKyNlbmRpZg0KKwkJCWtmcmVlX3NrYihza2IpOw0K KwkJCWJyZWFrOw0KKwkJfSBlbHNlIHsNCisjaWYgMA0KKwkJCWlmIChubGgtPm5sbXNnX2ZsYWdz ICYgTkxNX0ZfQUNLKQ0KKwkJCQluZXRsaW5rX2Fjayhza2IsIG5saCwgMCk7DQorI2VuZGlmDQor CQkJa2ZyZWVfc2tiKHNrYik7DQorCQkJYnJlYWs7DQorCQl9DQorCQlza2JfcHVsbChza2IsIGxl bik7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgY25faW5wdXQoc3RydWN0IHNvY2sgKnNrLCBp bnQgbGVuKQ0KK3sNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisNCisJd2hpbGUgKChza2IgPSBz a2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKQ0KKwkJY25fcnhfc2ti KHNrYik7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGNuX25vdGlmeShzdHJ1Y3QgY2JfaWQgKmlkLCB1 MzIgbm90aWZ5X2V2ZW50KQ0KK3sNCisJc3RydWN0IGNuX2N0bF9lbnRyeSAqZW50Ow0KKw0KKwlz cGluX2xvY2soJm5vdGlmeV9sb2NrKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnQsICZub3Rp ZnlfbGlzdCwgbm90aWZ5X2VudHJ5KSB7DQorCQlpbnQgaTsNCisJCXN0cnVjdCBjbl9ub3RpZnlf cmVxICpyZXE7DQorCQlzdHJ1Y3QgY25fY3RsX21zZyAqY3RsID0gZW50LT5tc2c7DQorCQlpbnQg YSwgYjsNCisNCisJCWEgPSBiID0gMDsNCisJCQ0KKwkJcmVxID0gKHN0cnVjdCBjbl9ub3RpZnlf cmVxICopY3RsLT5kYXRhOw0KKwkJZm9yIChpPTA7IGk8Y3RsLT5pZHhfbm90aWZ5X251bTsgKytp LCArK3JlcSkgew0KKwkJCWlmIChpZC0+aWR4ID49IHJlcS0+Zmlyc3QgJiYgaWQtPmlkeCA8IHJl cS0+Zmlyc3QgKyByZXEtPnJhbmdlKSB7DQorCQkJCWEgPSAxOw0KKwkJCQlicmVhazsNCisJCQl9 DQorCQl9DQorCQkNCisJCWZvciAoaT0wOyBpPGN0bC0+dmFsX25vdGlmeV9udW07ICsraSwgKyty ZXEpIHsNCisJCQlpZiAoaWQtPnZhbCA+PSByZXEtPmZpcnN0ICYmIGlkLT52YWwgPCByZXEtPmZp cnN0ICsgcmVxLT5yYW5nZSkgew0KKwkJCQliID0gMTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJ fQ0KKw0KKwkJaWYgKGEgJiYgYikgew0KKwkJCXN0cnVjdCBjbl9tc2cgbTsNCisJCQkNCisJCQlw cmludGsoS0VSTl9JTkZPICJOb3RpZnlpbmcgZ3JvdXAgJXggd2l0aCBldmVudCAldSBhYm91dCAl eC4leC5cbiIsIA0KKwkJCQkJY3RsLT5ncm91cCwgbm90aWZ5X2V2ZW50LCANCisJCQkJCWlkLT5p ZHgsIGlkLT52YWwpOw0KKw0KKwkJCW1lbXNldCgmbSwgMCwgc2l6ZW9mKG0pKTsNCisJCQltLmFj ayA9IG5vdGlmeV9ldmVudDsNCisNCisJCQltZW1jcHkoJm0uaWQsIGlkLCBzaXplb2YobS5pZCkp Ow0KKwkJCWNuX25ldGxpbmtfc2VuZCgmbSwgY3RsLT5ncm91cCk7DQorCQl9DQorCX0NCisJc3Bp bl91bmxvY2soJm5vdGlmeV9sb2NrKTsNCit9DQorDQoraW50IGNuX2FkZF9jYWxsYmFjayhzdHJ1 Y3QgY2JfaWQgKmlkLCBjaGFyICpuYW1lLCB2b2lkICgqY2FsbGJhY2spICh2b2lkICopKQ0KK3sN CisJaW50IGVycjsNCisJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQorCXN0cnVjdCBjbl9j YWxsYmFjayAqY2I7DQorDQorCWNiID0ga21hbGxvYyhzaXplb2YoKmNiKSwgR0ZQX0tFUk5FTCk7 DQorCWlmICghY2IpIHsNCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGYWlsZWQgdG8gYWxsb2Nh dGUgbmV3IHN0cnVjdCBjbl9jYWxsYmFjay5cbiIsDQorCQkgICAgICAgZGV2LT5jYmRldi0+bmFt ZSk7DQorCQlyZXR1cm4gLUVOT01FTTsNCisJfQ0KKw0KKwltZW1zZXQoY2IsIDAsIHNpemVvZigq Y2IpKTsNCisNCisJc25wcmludGYoY2ItPm5hbWUsIHNpemVvZihjYi0+bmFtZSksICIlcyIsIG5h bWUpOw0KKw0KKwltZW1jcHkoJmNiLT5pZCwgaWQsIHNpemVvZihjYi0+aWQpKTsNCisJY2ItPmNh bGxiYWNrID0gY2FsbGJhY2s7DQorDQorCWF0b21pY19zZXQoJmNiLT5yZWZjbnQsIDApOw0KKw0K KwllcnIgPSBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soZGV2LT5jYmRldiwgY2IpOw0KKwlpZiAoZXJy KSB7DQorCQlrZnJlZShjYik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorCQkJDQorCWNuX25vdGlm eShpZCwgMCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIGNuX2RlbF9jYWxsYmFjayhz dHJ1Y3QgY2JfaWQgKmlkKQ0KK3sNCisJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQorCXN0 cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqbiwgKl9fY2JxOw0KKw0KKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoX19jYnEsIG4sICZkZXYtPmNiZGV2LT5xdWV1ZV9saXN0LCBjYWxsYmFja19lbnRy eSkgew0KKwkJaWYgKGNuX2NiX2VxdWFsKCZfX2NicS0+Y2ItPmlkLCBpZCkpIHsNCisJCQljbl9x dWV1ZV9kZWxfY2FsbGJhY2soZGV2LT5jYmRldiwgX19jYnEtPmNiKTsNCisJCQljbl9ub3RpZnko aWQsIDEpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgY25fY3Rs X21zZ19lcXVhbHMoc3RydWN0IGNuX2N0bF9tc2cgKm0xLCBzdHJ1Y3QgY25fY3RsX21zZyAqbTIp DQorew0KKwlpbnQgaTsNCisJc3RydWN0IGNuX25vdGlmeV9yZXEgKnJlcTEsICpyZXEyOw0KKw0K KwlpZiAobTEtPmlkeF9ub3RpZnlfbnVtICE9IG0yLT5pZHhfbm90aWZ5X251bSkNCisJCXJldHVy biAwOw0KKwkNCisJaWYgKG0xLT52YWxfbm90aWZ5X251bSAhPSBtMi0+dmFsX25vdGlmeV9udW0p DQorCQlyZXR1cm4gMDsNCisJDQorCWlmIChtMS0+bGVuICE9IG0yLT5sZW4pDQorCQlyZXR1cm4g MDsNCisNCisJaWYgKChtMS0+aWR4X25vdGlmeV9udW0gKyBtMS0+dmFsX25vdGlmeV9udW0pKnNp emVvZigqcmVxMSkgIT0gbTEtPmxlbikgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJOb3RpZnkgZW50 cnlbaWR4X251bT0leCwgdmFsX251bT0leCwgbGVuPSV1XSBjb250YWlucyBnYXJiYWdlLiBSZW1v dmluZy5cbiIsIA0KKwkJCQltMS0+aWR4X25vdGlmeV9udW0sIG0xLT52YWxfbm90aWZ5X251bSwg bTEtPmxlbik7DQorCQlyZXR1cm4gMTsNCisJfQ0KKw0KKwlyZXExID0gKHN0cnVjdCBjbl9ub3Rp ZnlfcmVxICopbTEtPmRhdGE7DQorCXJlcTIgPSAoc3RydWN0IGNuX25vdGlmeV9yZXEgKiltMi0+ ZGF0YTsNCisJDQorCWZvciAoaT0wOyBpPG0xLT5pZHhfbm90aWZ5X251bTsgKytpKSB7DQorCQlp ZiAobWVtY21wKHJlcTEsIHJlcTIsIHNpemVvZigqcmVxMSkpKQ0KKwkJCXJldHVybiAwOw0KKw0K KwkJcmVxMSsrOw0KKwkJcmVxMisrOw0KKwl9DQorDQorCWZvciAoaT0wOyBpPG0xLT52YWxfbm90 aWZ5X251bTsgKytpKSB7DQorCQlpZiAobWVtY21wKHJlcTEsIHJlcTIsIHNpemVvZigqcmVxMSkp KQ0KKwkJCXJldHVybiAwOw0KKw0KKwkJcmVxMSsrOw0KKwkJcmVxMisrOw0KKwl9DQorDQorCXJl dHVybiAxOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbl9jYWxsYmFjayh2b2lkICogZGF0YSkNCit7 DQorCXN0cnVjdCBjbl9tc2cgKm1zZyA9IChzdHJ1Y3QgY25fbXNnICopZGF0YTsNCisJc3RydWN0 IGNuX2N0bF9tc2cgKmN0bDsNCisJc3RydWN0IGNuX2N0bF9lbnRyeSAqZW50Ow0KKwl1MzIgc2l6 ZTsNCisgDQorCWlmIChtc2ctPmxlbiA8IHNpemVvZigqY3RsKSkgew0KKwkJcHJpbnRrKEtFUk5f RVJSICJXcm9uZyBjb25uZWN0b3IgcmVxdWVzdCBzaXplICV1LCBtdXN0IGJlID49ICV1LlxuIiwg DQorCQkJCW1zZy0+bGVuLCBzaXplb2YoKmN0bCkpOw0KKwkJcmV0dXJuOw0KKwl9DQorCQ0KKwlj dGwgPSAoc3RydWN0IGNuX2N0bF9tc2cgKiltc2ctPmRhdGE7DQorDQorCXNpemUgPSBzaXplb2Yo KmN0bCkgKyAoY3RsLT5pZHhfbm90aWZ5X251bSArIGN0bC0+dmFsX25vdGlmeV9udW0pKnNpemVv ZihzdHJ1Y3QgY25fbm90aWZ5X3JlcSk7DQorDQorCWlmIChtc2ctPmxlbiAhPSBzaXplKSB7DQor CQlwcmludGsoS0VSTl9FUlIgIldyb25nIGNvbm5lY3RvciByZXF1ZXN0IHNpemUgJXUsIG11c3Qg YmUgPT0gJXUuXG4iLCANCisJCQkJbXNnLT5sZW4sIHNpemUpOw0KKwkJcmV0dXJuOw0KKwl9DQor DQorCWlmIChjdGwtPmxlbiArIHNpemVvZigqY3RsKSAhPSBtc2ctPmxlbikgew0KKwkJcHJpbnRr KEtFUk5fRVJSICJXcm9uZyBtZXNzYWdlOiBtc2ctPmxlbj0ldSBtdXN0IGJlIGVxdWFsIHRvIGlu bmVyX2xlbj0ldSBbKyV1XS5cbiIsIA0KKwkJCQltc2ctPmxlbiwgY3RsLT5sZW4sIHNpemVvZigq Y3RsKSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJLyoNCisJICogUmVtb3ZlIG5vdGlmaWNhdGlv bi4NCisJICovDQorCWlmIChjdGwtPmdyb3VwID09IDApIHsNCisJCXN0cnVjdCBjbl9jdGxfZW50 cnkgKm47DQorCQkNCisJCXNwaW5fbG9jaygmbm90aWZ5X2xvY2spOw0KKwkJbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKGVudCwgbiwgJm5vdGlmeV9saXN0LCBub3RpZnlfZW50cnkpIHsNCisJCQlp ZiAoY25fY3RsX21zZ19lcXVhbHMoZW50LT5tc2csIGN0bCkpIHsNCisJCQkJbGlzdF9kZWwoJmVu dC0+bm90aWZ5X2VudHJ5KTsNCisJCQkJa2ZyZWUoZW50KTsNCisJCQl9DQorCQl9DQorCQlzcGlu X3VubG9jaygmbm90aWZ5X2xvY2spOw0KKw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXNpemUgKz0g c2l6ZW9mKCplbnQpOw0KKw0KKwllbnQgPSBrbWFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOw0KKwlp ZiAoIWVudCkgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0 ZXMgZm9yIG5ldyBub3RpZnkgZW50cnkuXG4iLCBzaXplKTsNCisJCXJldHVybjsNCisJfQ0KKw0K KwltZW1zZXQoZW50LCAwLCBzaXplKTsNCisNCisJZW50LT5tc2cgPSAoc3RydWN0IGNuX2N0bF9t c2cgKikoZW50ICsgMSk7DQorDQorCW1lbWNweShlbnQtPm1zZywgY3RsLCBzaXplIC0gc2l6ZW9m KCplbnQpKTsNCisNCisJc3Bpbl9sb2NrKCZub3RpZnlfbG9jayk7DQorCWxpc3RfYWRkKCZlbnQt Pm5vdGlmeV9lbnRyeSwgJm5vdGlmeV9saXN0KTsNCisJc3Bpbl91bmxvY2soJm5vdGlmeV9sb2Nr KTsNCisNCisJew0KKwkJaW50IGk7DQorCQlzdHJ1Y3QgY25fbm90aWZ5X3JlcSAqcmVxOw0KKwkN CisJCXByaW50aygiTm90aWZ5IGdyb3VwICV4IGZvciBpZHg6ICIsIGN0bC0+Z3JvdXApOw0KKw0K KwkJcmVxID0gKHN0cnVjdCBjbl9ub3RpZnlfcmVxICopY3RsLT5kYXRhOw0KKwkJZm9yIChpPTA7 IGk8Y3RsLT5pZHhfbm90aWZ5X251bTsgKytpLCArK3JlcSkgew0KKwkJCXByaW50aygiJXUtJXUg IiwgcmVxLT5maXJzdCwgcmVxLT5maXJzdCtyZXEtPnJhbmdlLTEpOw0KKwkJfQ0KKwkJDQorCQlw cmludGsoIlxuTm90aWZ5IGdyb3VwICV4IGZvciB2YWw6ICIsIGN0bC0+Z3JvdXApOw0KKw0KKwkJ Zm9yIChpPTA7IGk8Y3RsLT52YWxfbm90aWZ5X251bTsgKytpLCArK3JlcSkgew0KKwkJCXByaW50 aygiJXUtJXUgIiwgcmVxLT5maXJzdCwgcmVxLT5maXJzdCtyZXEtPnJhbmdlLTEpOw0KKwkJfQ0K KwkJcHJpbnRrKCJcbiIpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQgY25faW5pdCh2b2lkKQ0K K3sNCisJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7DQorDQorCWRldi0+aW5wdXQgPSBjbl9p bnB1dDsNCisJZGV2LT5pZC5pZHggPSBjbl9pZHg7DQorCWRldi0+aWQudmFsID0gY25fdmFsOw0K Kw0KKwlkZXYtPm5scyA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSh1bml0LCBkZXYtPmlucHV0KTsN CisJaWYgKCFkZXYtPm5scykgew0KKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gY3JlYXRl IG5ldyBuZXRsaW5rIHNvY2tldCgldSkuXG4iLA0KKwkJICAgICAgIHVuaXQpOw0KKwkJcmV0dXJu IC1FSU87DQorCX0NCisNCisJZGV2LT5jYmRldiA9IGNuX3F1ZXVlX2FsbG9jX2RldigiY3F1ZXVl IiwgZGV2LT5ubHMpOw0KKwlpZiAoIWRldi0+Y2JkZXYpIHsNCisJCWlmIChkZXYtPm5scy0+c2tf c29ja2V0KQ0KKwkJCXNvY2tfcmVsZWFzZShkZXYtPm5scy0+c2tfc29ja2V0KTsNCisJCXJldHVy biAtRUlOVkFMOw0KKwl9DQorDQorCXJldHVybiBjbl9hZGRfY2FsbGJhY2soJmRldi0+aWQsICJj b25uZWN0b3IiLCAmY25fY2FsbGJhY2spOw0KK30NCisNCitzdGF0aWMgdm9pZCBjbl9maW5pKHZv aWQpDQorew0KKwlzdHJ1Y3QgY25fZGV2ICpkZXYgPSAmY2RldjsNCisNCisJY25fZGVsX2NhbGxi YWNrKCZkZXYtPmlkKTsNCisJY25fcXVldWVfZnJlZV9kZXYoZGV2LT5jYmRldik7DQorCWlmIChk ZXYtPm5scy0+c2tfc29ja2V0KQ0KKwkJc29ja19yZWxlYXNlKGRldi0+bmxzLT5za19zb2NrZXQp Ow0KK30NCisNCittb2R1bGVfaW5pdChjbl9pbml0KTsNCittb2R1bGVfZXhpdChjbl9maW5pKTsN CisNCitFWFBPUlRfU1lNQk9MKGNuX2FkZF9jYWxsYmFjayk7DQorRVhQT1JUX1NZTUJPTChjbl9k ZWxfY2FsbGJhY2spOw0KK0VYUE9SVF9TWU1CT0woY25fbmV0bGlua19zZW5kKTsNCmRpZmYgLU5y dSAvdG1wL2VtcHR5L2Nvbm5lY3Rvci5oIGxpbnV4LTIuNi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25u ZWN0b3IuaA0KLS0tIC90bXAvZW1wdHkvY29ubmVjdG9yLmgJMTk3MC0wMS0wMSAwMzowMDowMC4w MDAwMDAwMDAgKzAzMDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9y LmgJMjAwNC0wOS0yNiAwMDoxNDoxNi4wMDAwMDAwMDAgKzA0MDANCkBAIC0wLDAgKzEsODEgQEAN CisvKg0KKyAqIAljb25uZWN0b3IuaA0KKyAqIA0KKyAqIDIwMDQgQ29weXJpZ2h0IChjKSBFdmdl bml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1Pg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuDQorICogDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y DQorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAqIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlv biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEz MDcgIFVTQQ0KKyAqLw0KKw0KKyNpZm5kZWYgX19DT05ORUNUT1JfSA0KKyNkZWZpbmUgX19DT05O RUNUT1JfSA0KKw0KKyNpbmNsdWRlICIuLi9jb25uZWN0b3IvY25fcXVldWUuaCINCisNCisjZGVm aW5lIENPTk5FQ1RPUl9NQVhfTVNHX1NJWkUgCTEwMjQNCisNCitzdHJ1Y3QgY25fbXNnDQorew0K KwlzdHJ1Y3QgY2JfaWQgCQlpZDsNCisNCisJX191MzIJCQlzZXE7DQorCV9fdTMyCQkJYWNrOw0K Kw0KKwlfX3UzMgkJCWxlbjsJCS8qIExlbmd0aCBvZiB0aGUgZm9sbG93aW5nIGRhdGEgKi8NCisJ X191OAkJCWRhdGFbMF07DQorfTsNCisNCitzdHJ1Y3QgY25fbm90aWZ5X3JlcQ0KK3sNCisJX191 MzIJCQlmaXJzdDsNCisJX191MzIJCQlyYW5nZTsNCit9Ow0KKw0KK3N0cnVjdCBjbl9jdGxfbXNn DQorew0KKwlfX3UzMgkJCWlkeF9ub3RpZnlfbnVtOw0KKwlfX3UzMgkJCXZhbF9ub3RpZnlfbnVt Ow0KKwlfX3UzMgkJCWdyb3VwOw0KKwlfX3UzMgkJCWxlbjsNCisJX191OAkJCWRhdGFbMF07DQor fTsNCisNCisjaWZkZWYgX19LRVJORUxfXw0KKw0KKyNpbmNsdWRlIDxuZXQvc29jay5oPg0KKw0K K3N0cnVjdCBjbl9jdGxfZW50cnkNCit7DQorCXN0cnVjdCBsaXN0X2hlYWQJbm90aWZ5X2VudHJ5 Ow0KKwlzdHJ1Y3QgY25fY3RsX21zZwkqbXNnOw0KK307DQorDQorc3RydWN0IGNuX2Rldg0KK3sN CisJc3RydWN0IGNiX2lkIAkJaWQ7DQorDQorCXUzMgkJCXNlcSwgZ3JvdXBzOw0KKwlzdHJ1Y3Qg c29jayAJCSpubHM7DQorCXZvaWQgCQkJKCppbnB1dCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVu KTsNCisNCisJc3RydWN0IGNuX3F1ZXVlX2RldgkqY2JkZXY7DQorfTsNCisNCitpbnQgY25fYWRk X2NhbGxiYWNrKHN0cnVjdCBjYl9pZCAqLCBjaGFyICosIHZvaWQgKCogY2FsbGJhY2spKHZvaWQg KikpOw0KK3ZvaWQgY25fZGVsX2NhbGxiYWNrKHN0cnVjdCBjYl9pZCAqKTsNCit2b2lkIGNuX25l dGxpbmtfc2VuZChzdHJ1Y3QgY25fbXNnICosIHUzMik7DQorDQorI2VuZGlmIC8qIF9fS0VSTkVM X18gKi8NCisjZW5kaWYgLyogX19DT05ORUNUT1JfSCAqLw0K --=-6hXhvAybrmqrLjuzQFoX Content-Disposition: attachment; filename=Kconfig.connector.patch Content-Type: text/x-patch; name=Kconfig.connector.patch; charset=KOI8-R Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi9kcml2ZXJzL0tjb25maWcub3JpZwkyMDA0LTA5LTI2IDEzOjM0OjQ4LjAw MDAwMDAwMCArMDQwMA0KKysrIGxpbnV4LTIuNi9kcml2ZXJzL0tjb25maWcJMjAwNC0wOS0yNiAx MzozNDo1Ny4wMDAwMDAwMDAgKzA0MDANCkBAIC00NCw2ICs0NCw4IEBADQogDQogc291cmNlICJk cml2ZXJzL3cxL0tjb25maWciDQogDQorc291cmNlICJkcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmln Ig0KKw0KIHNvdXJjZSAiZHJpdmVycy9taXNjL0tjb25maWciDQogDQogc291cmNlICJkcml2ZXJz L21lZGlhL0tjb25maWciDQoNCg== --=-6hXhvAybrmqrLjuzQFoX Content-Disposition: attachment; filename=Kconfig.crypto.patch Content-Type: text/x-patch; name=Kconfig.crypto.patch; charset=KOI8-R Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi9kcml2ZXJzL0tjb25maWcubm9jcnlwdG8JMjAwNC0xMC0zMCAwOTowNTo1 Mi4wMDAwMDAwMDAgKzA0MDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9LY29uZmlnCTIwMDQtMTAt MzAgMDk6MDY6MTEuMDAwMDAwMDAwICswNDAwDQpAQCAtNDIsNiArNDIsOCBAQA0KIA0KIHNvdXJj ZSAiZHJpdmVycy9pMmMvS2NvbmZpZyINCiANCitzb3VyY2UgImRyaXZlcnMvYWNyeXB0by9LY29u ZmlnIg0KKw0KIHNvdXJjZSAiZHJpdmVycy93MS9LY29uZmlnIg0KIA0KIHNvdXJjZSAiZHJpdmVy cy9jb25uZWN0b3IvS2NvbmZpZyINCg== --=-6hXhvAybrmqrLjuzQFoX Content-Disposition: attachment; filename=Makefile.connector.patch Content-Type: text/x-patch; name=Makefile.connector.patch; charset=KOI8-R Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi9kcml2ZXJzL01ha2VmaWxlLm9yaWcJMjAwNC0wOS0yNSAyMzo0NzowOC4w MDAwMDAwMDAgKzA0MDANCisrKyBsaW51eC0yLjYvZHJpdmVycy9NYWtlZmlsZQkyMDA0LTA5LTI2 IDEzOjM0OjI1LjAwMDAwMDAwMCArMDQwMA0KQEAgLTQ0LDYgKzQ0LDcgQEANCiBvYmotJChDT05G SUdfSTJPKQkJKz0gbWVzc2FnZS8NCiBvYmotJChDT05GSUdfSTJDKQkJKz0gaTJjLw0KIG9iai0k KENPTkZJR19XMSkJCSs9IHcxLw0KK29iai0kKENPTkZJR19DT05ORUNUT1IpCSs9IGNvbm5lY3Rv ci8NCiBvYmotJChDT05GSUdfUEhPTkUpCQkrPSB0ZWxlcGhvbnkvDQogb2JqLSQoQ09ORklHX01E KQkJKz0gbWQvDQogb2JqLSQoQ09ORklHX0JUKQkJKz0gYmx1ZXRvb3RoLw0KDQo= --=-6hXhvAybrmqrLjuzQFoX Content-Disposition: attachment; filename=Makefile.crypto.patch Content-Type: text/x-patch; name=Makefile.crypto.patch; charset=KOI8-R Content-Transfer-Encoding: base64 LS0tIGxpbnV4LTIuNi9kcml2ZXJzL01ha2VmaWxlLm5vY3J5cHRvCTIwMDQtMTAtMzAgMDk6MDU6 MDIuMDAwMDAwMDAwICswNDAwDQorKysgbGludXgtMi42L2RyaXZlcnMvTWFrZWZpbGUJMjAwNC0x MC0zMCAwOTowNTozMS4wMDAwMDAwMDAgKzA0MDANCkBAIC00OSw1ICs0OSw2IEBADQogb2JqLSQo Q09ORklHX0dBTUVQT1JUKQkJKz0gaW5wdXQvZ2FtZXBvcnQvDQogb2JqLSQoQ09ORklHX0kyTykJ CSs9IG1lc3NhZ2UvDQogb2JqLSQoQ09ORklHX0kyQykJCSs9IGkyYy8NCitvYmotJChDT05GSUdf QUNSWVBUTykJCSs9IGFjcnlwdG8vDQogb2JqLSQoQ09ORklHX1cxKQkJKz0gdzEvDQogb2JqLSQo Q09ORklHX0NPTk5FQ1RPUikJCSs9IGNvbm5lY3Rvci8NCg== --=-6hXhvAybrmqrLjuzQFoX-- --=-84FmUi6+bypRF6VRBLEL Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.6 (GNU/Linux) iD8DBQBBvw7sIKTPhE+8wY0RAh0kAJ9siQOXijN5/uV4OgWtbeJbG2BrJgCeMjSQ JG07FP0FWSKjoWDu0GosujM= =NptR -----END PGP SIGNATURE----- --=-84FmUi6+bypRF6VRBLEL--