From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jaegeuk Kim Subject: Re: [PATCH v5] F2FS support Date: Tue, 15 Dec 2015 10:14:39 -0800 Message-ID: <20151215181439.GA60773@jaegeuk.local> References: <1427185140-41120-1-git-send-email-jaegeuk@kernel.org> <20150403224908.GB25673@jaegeuk-mac02.mot.com> <20151119212824.GA11666@jaegeuk.local> <566E7DAA.4010202@gmail.com> <20151215003421.GD48918@jaegeuk.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from sog-mx-3.v43.ch3.sourceforge.com ([172.29.43.193] helo=mx.sourceforge.net) by sfs-ml-2.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1a8u7j-0003Dx-5r for linux-f2fs-devel@lists.sourceforge.net; Tue, 15 Dec 2015 18:14:55 +0000 Received: from mail.kernel.org ([198.145.29.136]) by sog-mx-3.v43.ch3.sourceforge.com with esmtp (Exim 4.76) id 1a8u7f-0007bx-Ss for linux-f2fs-devel@lists.sourceforge.net; Tue, 15 Dec 2015 18:14:55 +0000 Content-Disposition: inline In-Reply-To: <20151215003421.GD48918@jaegeuk.local> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net To: Andrei Borzenkov Cc: The development of GNU GRUB , linux-f2fs-devel@lists.sourceforge.net IENoYW5nZSBsb2cgZnJvbSB2NDoKICBvIGZpeCBncnViX3Rlc3RfYml0X2xlKCkKCi0tID44IC0t CkZyb20gYzUwNzkzN2M2ZTFmNzRlYTBmNWI3NWJhYjRiYmI5ODMzMzRkOTU4MSBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFlZ2V1ayBLaW0gPGphZWdldWtAa2VybmVsLm9yZz4KRGF0 ZTogVHVlLCAxNyBOb3YgMjAxNSAxMjo0NToxMyAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEYyRlMg c3VwcG9ydAoKIkYyRlMgKEZsYXNoLUZyaWVuZGx5IEZpbGUgU3lzdGVtKSBpcyBmbGFzaC1mcmll bmRseSBmaWxlIHN5c3RlbSB3aGljaCB3YXMgbWVyZ2VkCmludG8gTGludXgga2VybmVsIHYzLjgg aW4gMjAxMy4KClRoZSBtb3RpdmUgZm9yIEYyRlMgd2FzIHRvIGJ1aWxkIGEgZmlsZSBzeXN0ZW0g dGhhdCBmcm9tIHRoZSBzdGFydCwgdGFrZXMgaW50bwphY2NvdW50IHRoZSBjaGFyYWN0ZXJpc3Rp Y3Mgb2YgTkFORCBmbGFzaCBtZW1vcnktYmFzZWQgc3RvcmFnZSBkZXZpY2VzIChzdWNoIGFzCnNv bGlkLXN0YXRlIGRpc2tzLCBlTU1DLCBhbmQgU0QgY2FyZHMpLgoKRjJGUyB3YXMgZGVzaWduZWQg b24gYSBiYXNpcyBvZiBhIGxvZy1zdHJ1Y3R1cmVkIGZpbGUgc3lzdGVtIGFwcHJvYWNoLCB3aGlj aApyZW1lZGllcyBzb21lIGtub3duIGlzc3VlcyBvZiB0aGUgb2xkZXIgbG9nIHN0cnVjdHVyZWQg ZmlsZSBzeXN0ZW1zLCBzdWNoIGFzCnRoZSBzbm93YmFsbCBlZmZlY3Qgb2Ygd2FuZGVyaW5nIHRy ZWVzIGFuZCBoaWdoIGNsZWFuaW5nIG92ZXJoZWFkLiBJbiBhZGRpdGlvbiwKc2luY2UgYSBOQU5E LWJhc2VkIHN0b3JhZ2UgZGV2aWNlIHNob3dzIGRpZmZlcmVudCBjaGFyYWN0ZXJpc3RpY3MgYWNj b3JkaW5nIHRvCml0cyBpbnRlcm5hbCBnZW9tZXRyeSBvciBmbGFzaCBtZW1vcnkgbWFuYWdlbWVu dCBzY2hlbWUgKHN1Y2ggYXMgdGhlIEZsYXNoClRyYW5zbGF0aW9uIExheWVyIG9yIEZUTCksIGl0 IHN1cHBvcnRzIHZhcmlvdXMgcGFyYW1ldGVycyBub3Qgb25seSBmb3IKY29uZmlndXJpbmcgb24t ZGlzayBsYXlvdXQsIGJ1dCBhbHNvIGZvciBzZWxlY3RpbmcgYWxsb2NhdGlvbiBhbmQgY2xlYW5p bmcKYWxnb3JpdGhtLiIsIHF1b3RlIGJ5IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Yy RlMuCgpUaGUgc291cmNlIGNvZGVzIGZvciBGMkZTIGFyZSBhdmFpbGFibGUgZnJvbToKCmh0dHA6 Ly9naXQua2VybmVsLm9yZy9jZ2l0L2xpbnV4L2tlcm5lbC9naXQvamFlZ2V1ay9mMmZzLmdpdApo dHRwOi8vZ2l0Lmtlcm5lbC5vcmcvY2dpdC9saW51eC9rZXJuZWwvZ2l0L2phZWdldWsvZjJmcy10 b29scy5naXQKClNpZ25lZC1vZmYtYnk6IEphZWdldWsgS2ltIDxqYWVnZXVrQGtlcm5lbC5vcmc+ Ci0tLQogTWFrZWZpbGUudXRpbC5kZWYgICAgICAgICAgICB8ICAgIDcgKwogZG9jcy9ncnViLnRl eGkgICAgICAgICAgICAgICB8ICAgIDUgKy0KIGdydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZiAg fCAgICA1ICsKIGdydWItY29yZS9mcy9mMmZzLmMgICAgICAgICAgfCAxMjg3ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogcG8vZXhjbHVkZS5wb3QgICAgICAgICAg ICAgICB8ICAgIDEgKwogdGVzdHMvZjJmc190ZXN0LmluICAgICAgICAgICB8ICAgMTkgKwogdGVz dHMvdXRpbC9ncnViLWZzLXRlc3Rlci5pbiB8ICAgMTAgKy0KIDcgZmlsZXMgY2hhbmdlZCwgMTMz MCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdydWIt Y29yZS9mcy9mMmZzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9mMmZzX3Rlc3QuaW4KCmRp ZmYgLS1naXQgYS9NYWtlZmlsZS51dGlsLmRlZiBiL01ha2VmaWxlLnV0aWwuZGVmCmluZGV4IGRi N2U4ZWMuLjg0NjI3YmIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnV0aWwuZGVmCisrKyBiL01ha2Vm aWxlLnV0aWwuZGVmCkBAIC05OSw2ICs5OSw3IEBAIGxpYnJhcnkgPSB7CiAgIGNvbW1vbiA9IGdy dWItY29yZS9mcy9leHQyLmM7CiAgIGNvbW1vbiA9IGdydWItY29yZS9mcy9mYXQuYzsKICAgY29t bW9uID0gZ3J1Yi1jb3JlL2ZzL2V4ZmF0LmM7CisgIGNvbW1vbiA9IGdydWItY29yZS9mcy9mMmZz LmM7CiAgIGNvbW1vbiA9IGdydWItY29yZS9mcy9mc2hlbHAuYzsKICAgY29tbW9uID0gZ3J1Yi1j b3JlL2ZzL2hmcy5jOwogICBjb21tb24gPSBncnViLWNvcmUvZnMvaGZzcGx1cy5jOwpAQCAtNzY2 LDYgKzc2NywxMiBAQCBzY3JpcHQgPSB7CiAKIHNjcmlwdCA9IHsKICAgdGVzdGNhc2U7CisgIG5h bWUgPSBmMmZzX3Rlc3Q7CisgIGNvbW1vbiA9IHRlc3RzL2YyZnNfdGVzdC5pbjsKK307CisKK3Nj cmlwdCA9IHsKKyAgdGVzdGNhc2U7CiAgIG5hbWUgPSBuaWxmczJfdGVzdDsKICAgY29tbW9uID0g dGVzdHMvbmlsZnMyX3Rlc3QuaW47CiB9OwpkaWZmIC0tZ2l0IGEvZG9jcy9ncnViLnRleGkgYi9k b2NzL2dydWIudGV4aQppbmRleCAxZGYzZGIyLi5lNWE4MGYzIDEwMDY0NAotLS0gYS9kb2NzL2dy dWIudGV4aQorKysgYi9kb2NzL2dydWIudGV4aQpAQCAtMzYwLDcgKzM2MCw4IEBAIGJsb2NrbGlz dCBub3RhdGlvbi4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZmlsZXN5c3RlbSB0eXBlcyBhcmUg QGRmbntBbWlnYQogRmFzdCBGaWxlU3lzdGVtIChBRkZTKX0sIEBkZm57QXRoZU9TIGZzfSwgQGRm bntCZUZTfSwKIEBkZm57QnRyRlN9IChpbmNsdWRpbmcgcmFpZDAsIHJhaWQxLCByYWlkMTAsIGd6 aXAgYW5kIGx6byksCiBAZGZue2NwaW99IChsaXR0bGUtIGFuZCBiaWctZW5kaWFuIGJpbiwgb2Rj IGFuZCBuZXdjIHZhcmlhbnRzKSwKLUBkZm57TGludXggZXh0Mi9leHQzL2V4dDR9LCBAZGZue0RP UyBGQVQxMi9GQVQxNi9GQVQzMn0sIEBkZm57ZXhGQVR9LCBAZGZue0hGU30sCitAZGZue0xpbnV4 IGV4dDIvZXh0My9leHQ0fSwgQGRmbntET1MgRkFUMTIvRkFUMTYvRkFUMzJ9LCBAZGZue2V4RkFU fSwKK0BkZm57ZjJmc30sIEBkZm57SEZTfSwKIEBkZm57SEZTK30sIEBkZm57SVNPOTY2MH0gKGlu Y2x1ZGluZyBKb2xpZXQsIFJvY2stcmlkZ2UgYW5kIG11bHRpLWNodW5rIGZpbGVzKSwKIEBkZm57 SkZTfSwgQGRmbntNaW5peCBmc30gKHZlcnNpb25zIDEsIDIgYW5kIDMpLCBAZGZue25pbGZzMn0s CiBAZGZue05URlN9IChpbmNsdWRpbmcgY29tcHJlc3Npb24pLCBAZGZue1JlaXNlckZTfSwgQGRm bntST01GU30sCkBAIC01MzQ3LDcgKzUzNDgsNyBAQCBOVEZTLCBKRlMsIFVERiwgSEZTKywgZXhG QVQsIGxvbmcgZmlsZW5hbWVzIGluIEZBVCwgSm9saWV0IHBhcnQgb2YKIElTTzk2NjAgYXJlIHRy ZWF0ZWQgYXMgVVRGLTE2IGFzIHBlciBzcGVjaWZpY2F0aW9uLiBBRlMgYW5kIEJGUyBhcmUgcmVh ZAogYXMgVVRGLTgsIGFnYWluIGFjY29yZGluZyB0byBzcGVjaWZpY2F0aW9uLiBCdHJGUywgY3Bp bywgdGFyLCBzcXVhc2g0LCBtaW5peCwKIG1pbml4MiwgbWluaXgzLCBST01GUywgUmVpc2VyRlMs IFhGUywgZXh0MiwgZXh0MywgZXh0NCwgRkFUIChzaG9ydCBuYW1lcyksCi1Sb2NrUmlkZ2UgcGFy dCBvZiBJU085NjYwLCBuaWxmczIsIFVGUzEsIFVGUzIgYW5kIFpGUyBhcmUgYXNzdW1lZAorZjJm cywgUm9ja1JpZGdlIHBhcnQgb2YgSVNPOTY2MCwgbmlsZnMyLCBVRlMxLCBVRlMyIGFuZCBaRlMg YXJlIGFzc3VtZWQKIHRvIGJlIFVURi04LiBUaGlzIG1pZ2h0IGJlIGZhbHNlIG9uIHN5c3RlbXMg Y29uZmlndXJlZCB3aXRoIGxlZ2FjeSBjaGFyc2V0CiBidXQgYXMgbG9uZyBhcyB0aGUgY2hhcnNl dCB1c2VkIGlzIHN1cGVyc2V0IG9mIEFTQ0lJIHlvdSBzaG91bGQgYmUgYWJsZSB0bwogYWNjZXNz IEFTQ0lJLW5hbWVkIGZpbGVzLiBBbmQgaXQncyByZWNvbW1lbmRlZCB0byBjb25maWd1cmUgeW91 ciBzeXN0ZW0gdG8gdXNlCmRpZmYgLS1naXQgYS9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYg Yi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYKaW5kZXggZDlmYTBlMy4uYjU4NWFkZSAxMDA2 NDQKLS0tIGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCisrKyBiL2dydWItY29yZS9NYWtl ZmlsZS5jb3JlLmRlZgpAQCAtMTI3OCw2ICsxMjc4LDExIEBAIG1vZHVsZSA9IHsKIH07CiAKIG1v ZHVsZSA9IHsKKyAgbmFtZSA9IGYyZnM7CisgIGNvbW1vbiA9IGZzL2YyZnMuYzsKK307CisKK21v ZHVsZSA9IHsKICAgbmFtZSA9IGZzaGVscDsKICAgY29tbW9uID0gZnMvZnNoZWxwLmM7CiB9Owpk aWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2ZzL2YyZnMuYyBiL2dydWItY29yZS9mcy9mMmZzLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzMDJlMwotLS0gL2Rldi9udWxsCisr KyBiL2dydWItY29yZS9mcy9mMmZzLmMKQEAgLTAsMCArMSwxMjg3IEBACisvKgorICogIGYyZnMu YyAtIEZsYXNoLUZyaWVuZGx5IEZpbGUgU3lzdGVtCisgKgorICogIFdyaXR0ZW4gYnkgSmFlZ2V1 ayBLaW0gPGphZWdldWtAa2VybmVsLm9yZz4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1ICBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNvZnR3 YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg R1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLwor I2luY2x1ZGUgPGdydWIvZXJyLmg+CisjaW5jbHVkZSA8Z3J1Yi9maWxlLmg+CisjaW5jbHVkZSA8 Z3J1Yi9tbS5oPgorI2luY2x1ZGUgPGdydWIvbWlzYy5oPgorI2luY2x1ZGUgPGdydWIvZGlzay5o PgorI2luY2x1ZGUgPGdydWIvZGwuaD4KKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+CisjaW5jbHVk ZSA8Z3J1Yi9jaGFyc2V0Lmg+CisjaW5jbHVkZSA8Z3J1Yi9mc2hlbHAuaD4KKworR1JVQl9NT0Rf TElDRU5TRSAoIkdQTHYzKyIpOworCisvKiBGMkZTIE1hZ2ljIE51bWJlciAqLworI2RlZmluZSBG MkZTX1NVUEVSX01BR0lDCTB4RjJGNTIwMTAKKyNkZWZpbmUgQ0hFQ0tTVU1fT0ZGU0VUCQk0MDky CisKKy8qIGJ5dGUtc2l6ZSBvZmZzZXQgKi8KKyNkZWZpbmUgRjJGU19TVVBFUl9PRkZTRVQJKChn cnViX2Rpc2tfYWRkcl90KTEwMjQpCisjZGVmaW5lIEYyRlNfU1VQRVJfT0ZGU0VUMAkoRjJGU19T VVBFUl9PRkZTRVQgPj4gR1JVQl9ESVNLX1NFQ1RPUl9CSVRTKQorI2RlZmluZSBGMkZTX1NVUEVS X09GRlNFVDEJKChGMkZTX1NVUEVSX09GRlNFVCArIEYyRlNfQkxLU0laRSkgPj4JXAorCQkJCQkJ R1JVQl9ESVNLX1NFQ1RPUl9CSVRTKQorCisvKiA5IGJpdHMgZm9yIDUxMiBieXRlcyAqLworI2Rl ZmluZSBGMkZTX01JTl9MT0dfU0VDVE9SX1NJWkUJOQorCisvKiBzdXBwb3J0IG9ubHkgNEtCIGJs b2NrICovCisjZGVmaW5lIEYyRlNfQkxLX0JJVFMJMTIKKyNkZWZpbmUgRjJGU19CTEtTSVpFCSgx IDw8IEYyRlNfQkxLX0JJVFMpCisjZGVmaW5lIEYyRlNfQkxLX1NFQ19CSVRTCShGMkZTX0JMS19C SVRTIC0gR1JVQl9ESVNLX1NFQ1RPUl9CSVRTKQorCisjZGVmaW5lIFZFUlNJT05fTEVOCTI1Ngor I2RlZmluZSBGMkZTX01BWF9FWFRFTlNJT04JNjQKKworI2RlZmluZSBDUF9DT01QQUNUX1NVTV9G TEFHCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BfVU1PVU5UX0ZMQUcJMHgwMDAwMDAwMQorCisjZGVm aW5lIE1BWF9BQ1RJVkVfTE9HUwkxNgorI2RlZmluZSBNQVhfQUNUSVZFX05PREVfTE9HUwk4Cisj ZGVmaW5lIE1BWF9BQ1RJVkVfREFUQV9MT0dTCTgKKyNkZWZpbmUJTlJfQ1VSU0VHX0RBVEFfVFlQ RQkzCisjZGVmaW5lIE5SX0NVUlNFR19OT0RFX1RZUEUJMworI2RlZmluZSBOUl9DVVJTRUdfVFlQ RQkoTlJfQ1VSU0VHX0RBVEFfVFlQRSArIE5SX0NVUlNFR19OT0RFX1RZUEUpCisKKyNkZWZpbmUg RU5UUklFU19JTl9TVU0JNTEyCisjZGVmaW5lCVNVTU1BUllfU0laRQk3CisjZGVmaW5lCVNVTV9G T09URVJfU0laRQk1CisjZGVmaW5lIEpFTlRSWV9TSVpFCShzaXplb2Yoc3RydWN0IGdydWJfZjJm c19uYXRfamVudCkpCisjZGVmaW5lIFNVTV9FTlRSSUVTX1NJWkUJKFNVTU1BUllfU0laRSAqIEVO VFJJRVNfSU5fU1VNKQorI2RlZmluZSBTVU1fSk9VUk5BTF9TSVpFCShGMkZTX0JMS1NJWkUgLSBT VU1fRk9PVEVSX1NJWkUgLVwKKwkJCQlTVU1fRU5UUklFU19TSVpFKQorI2RlZmluZSBOQVRfSk9V Uk5BTF9FTlRSSUVTCSgoU1VNX0pPVVJOQUxfU0laRSAtIDIpIC8gSkVOVFJZX1NJWkUpCisjZGVm aW5lIE5BVF9KT1VSTkFMX1JFU0VSVkVECSgoU1VNX0pPVVJOQUxfU0laRSAtIDIpICUgSkVOVFJZ X1NJWkUpCisKKyNkZWZpbmUgTkFUX0VOVFJZX1NJWkUgKHNpemVvZihzdHJ1Y3QgZ3J1Yl9mMmZz X25hdF9lbnRyeSkpCisjZGVmaW5lIE5BVF9FTlRSWV9QRVJfQkxPQ0sgKEYyRlNfQkxLU0laRSAv IE5BVF9FTlRSWV9TSVpFKQorCisjZGVmaW5lIEYyRlNfTkFNRV9MRU4JMjU1CisjZGVmaW5lIEYy RlNfU0xPVF9MRU4JOAorI2RlZmluZSBOUl9ERU5UUllfSU5fQkxPQ0sJMjE0CisjZGVmaW5lIFNJ WkVfT0ZfRElSX0VOVFJZCTExCS8qIGJ5IGJ5dGUgKi8KKyNkZWZpbmUgQklUU19QRVJfQllURQk4 CisjZGVmaW5lIFNJWkVfT0ZfREVOVFJZX0JJVE1BUAkoKE5SX0RFTlRSWV9JTl9CTE9DSyArIEJJ VFNfUEVSX0JZVEUgLSAxKSAvIFwKKwkJCQlCSVRTX1BFUl9CWVRFKQorI2RlZmluZSBTSVpFX09G X1JFU0VSVkVECShGMkZTX0JMS1NJWkUgLSAoKFNJWkVfT0ZfRElSX0VOVFJZICsgXAorCQkJCUYy RlNfU0xPVF9MRU4pICogXAorCQkJCU5SX0RFTlRSWV9JTl9CTE9DSyArIFNJWkVfT0ZfREVOVFJZ X0JJVE1BUCkpCisKKyNkZWZpbmUgRjJGU19JTkxJTkVfWEFUVFJfQUREUlMJNTAJLyogMjAwIGJ5 dGVzIGZvciBpbmxpbmUgeGF0dHJzICovCisjZGVmaW5lIERFRl9BRERSU19QRVJfSU5PREUJOTIz CS8qIEFkZHJlc3MgUG9pbnRlcnMgaW4gYW4gSW5vZGUgKi8KKworI2RlZmluZSBBRERSU19QRVJf QkxPQ0sJMTAxOAkvKiBBZGRyZXNzIFBvaW50ZXJzIGluIGEgRGlyZWN0IEJsb2NrICovCisjZGVm aW5lIE5JRFNfUEVSX0JMT0NLCTEwMTgJLyogTm9kZSBJRHMgaW4gYW4gSW5kaXJlY3QgQmxvY2sg Ki8KKyNkZWZpbmUJTk9ERV9ESVIxX0JMT0NLCShERUZfQUREUlNfUEVSX0lOT0RFICsgMSkKKyNk ZWZpbmUJTk9ERV9ESVIyX0JMT0NLCShERUZfQUREUlNfUEVSX0lOT0RFICsgMikKKyNkZWZpbmUJ Tk9ERV9JTkQxX0JMT0NLCShERUZfQUREUlNfUEVSX0lOT0RFICsgMykKKyNkZWZpbmUJTk9ERV9J TkQyX0JMT0NLCShERUZfQUREUlNfUEVSX0lOT0RFICsgNCkKKyNkZWZpbmUJTk9ERV9ESU5EX0JM T0NLCShERUZfQUREUlNfUEVSX0lOT0RFICsgNSkKKworI2RlZmluZSBNQVhfSU5MSU5FX0RBVEEJ KDQgKiAoREVGX0FERFJTX1BFUl9JTk9ERSAtIFwKKwkJCUYyRlNfSU5MSU5FX1hBVFRSX0FERFJT IC0gMSkpCisjZGVmaW5lIE5SX0lOTElORV9ERU5UUlkJKE1BWF9JTkxJTkVfREFUQSAqIEJJVFNf UEVSX0JZVEUgLyBcCisJCQkoKFNJWkVfT0ZfRElSX0VOVFJZICsgRjJGU19TTE9UX0xFTikgKiBc CisJCQkgQklUU19QRVJfQllURSArIDEpKQorI2RlZmluZSBJTkxJTkVfREVOVFJZX0JJVE1BUF9T SVpFCSgoTlJfSU5MSU5FX0RFTlRSWSArIFwKKwkJCUJJVFNfUEVSX0JZVEUgLSAxKSAvIEJJVFNf UEVSX0JZVEUpCisjZGVmaW5lIElOTElORV9SRVNFUlZFRF9TSVpFCShNQVhfSU5MSU5FX0RBVEEg LSBcCisJCQkoKFNJWkVfT0ZfRElSX0VOVFJZICsgRjJGU19TTE9UX0xFTikgKiBcCisJCQkgTlJf SU5MSU5FX0RFTlRSWSArIElOTElORV9ERU5UUllfQklUTUFQX1NJWkUpKQorI2RlZmluZSBDVVJT RUdfSE9UX0RBVEEJMAorCisjZGVmaW5lIENLUFRfRkxBR19TRVQoY2twdCwgZikJXAorCQkoY2tw dCktPmNrcHRfZmxhZ3MgJiBncnViX2NwdV90b19sZTMyX2NvbXBpbGVfdGltZSAoZikKKworI2Rl ZmluZSBGMkZTX0lOTElORV9YQVRUUgkweDAxCS8qIGZpbGUgaW5saW5lIHhhdHRyIGZsYWcgKi8K KyNkZWZpbmUgRjJGU19JTkxJTkVfREFUQQkweDAyCS8qIGZpbGUgaW5saW5lIGRhdGEgZmxhZyAq LworI2RlZmluZSBGMkZTX0lOTElORV9ERU5UUlkJMHgwNAkvKiBmaWxlIGlubGluZSBkZW50cnkg ZmxhZyAqLworI2RlZmluZSBGMkZTX0RBVEFfRVhJU1QJCTB4MDgJLyogZmlsZSBpbmxpbmUgZGF0 YSBleGlzdCBmbGFnICovCisjZGVmaW5lIEYyRlNfSU5MSU5FX0RPVFMJMHgxMAkvKiBmaWxlIGhh dmluZyBpbXBsaWNpdCBkb3QgZGVudHJpZXMgKi8KKworZW51bSBGSUxFX1RZUEUKK3sKKyAgRjJG U19GVF9VTktOT1dOLAorICBGMkZTX0ZUX1JFR19GSUxFID0gMSwKKyAgRjJGU19GVF9ESVIgPSAy LAorICBGMkZTX0ZUX1NZTUxJTksgPSA3LAorfTsKKworI2RlZmluZSBNQVhfVk9MVU1FX05BTUUJ CTUxMgorCitzdHJ1Y3QgZ3J1Yl9mMmZzX3N1cGVyYmxvY2sKK3sKKyAgZ3J1Yl91aW50MzJfdCBt YWdpYzsKKyAgZ3J1Yl91aW50MTZfdCBkdW1teTFbMl07CisgIGdydWJfdWludDMyX3QgbG9nX3Nl Y3RvcnNpemU7CisgIGdydWJfdWludDMyX3QgbG9nX3NlY3RvcnNfcGVyX2Jsb2NrOworICBncnVi X3VpbnQzMl90IGxvZ19ibG9ja3NpemU7CisgIGdydWJfdWludDMyX3QgbG9nX2Jsb2Nrc19wZXJf c2VnOworICBncnViX3VpbnQzMl90IHNlZ3NfcGVyX3NlYzsKKyAgZ3J1Yl91aW50MzJfdCBzZWNz X3Blcl96b25lOworICBncnViX3VpbnQzMl90IGNoZWNrc3VtX29mZnNldDsKKyAgZ3J1Yl91aW50 OF90IGR1bW15Mls0MF07CisgIGdydWJfdWludDMyX3QgY3BfYmxrYWRkcjsKKyAgZ3J1Yl91aW50 MzJfdCBzaXRfYmxrYWRkcjsKKyAgZ3J1Yl91aW50MzJfdCBuYXRfYmxrYWRkcjsKKyAgZ3J1Yl91 aW50MzJfdCBzc2FfYmxrYWRkcjsKKyAgZ3J1Yl91aW50MzJfdCBtYWluX2Jsa2FkZHI7CisgIGdy dWJfdWludDMyX3Qgcm9vdF9pbm87CisgIGdydWJfdWludDMyX3Qgbm9kZV9pbm87CisgIGdydWJf dWludDMyX3QgbWV0YV9pbm87CisgIGdydWJfdWludDhfdCB1dWlkWzE2XTsKKyAgZ3J1Yl91aW50 MTZfdCB2b2x1bWVfbmFtZVtNQVhfVk9MVU1FX05BTUVdOworICBncnViX3VpbnQzMl90IGV4dGVu c2lvbl9jb3VudDsKKyAgZ3J1Yl91aW50OF90IGV4dGVuc2lvbl9saXN0W0YyRlNfTUFYX0VYVEVO U0lPTl1bOF07CisgIGdydWJfdWludDMyX3QgY3BfcGF5bG9hZDsKKyAgZ3J1Yl91aW50OF90IHZl cnNpb25bVkVSU0lPTl9MRU5dOworICBncnViX3VpbnQ4X3QgaW5pdF92ZXJzaW9uW1ZFUlNJT05f TEVOXTsKK30gR1JVQl9QQUNLRUQ7CisKK3N0cnVjdCBncnViX2YyZnNfY2hlY2twb2ludAorewor ICBncnViX3VpbnQ2NF90IGNoZWNrcG9pbnRfdmVyOworICBncnViX3VpbnQ2NF90IHVzZXJfYmxv Y2tfY291bnQ7CisgIGdydWJfdWludDY0X3QgdmFsaWRfYmxvY2tfY291bnQ7CisgIGdydWJfdWlu dDMyX3QgcnN2ZF9zZWdtZW50X2NvdW50OworICBncnViX3VpbnQzMl90IG92ZXJwcm92X3NlZ21l bnRfY291bnQ7CisgIGdydWJfdWludDMyX3QgZnJlZV9zZWdtZW50X2NvdW50OworICBncnViX3Vp bnQzMl90IGN1cl9ub2RlX3NlZ25vW01BWF9BQ1RJVkVfTk9ERV9MT0dTXTsKKyAgZ3J1Yl91aW50 MTZfdCBjdXJfbm9kZV9ibGtvZmZbTUFYX0FDVElWRV9OT0RFX0xPR1NdOworICBncnViX3VpbnQz Ml90IGN1cl9kYXRhX3NlZ25vW01BWF9BQ1RJVkVfREFUQV9MT0dTXTsKKyAgZ3J1Yl91aW50MTZf dCBjdXJfZGF0YV9ibGtvZmZbTUFYX0FDVElWRV9EQVRBX0xPR1NdOworICBncnViX3VpbnQzMl90 IGNrcHRfZmxhZ3M7CisgIGdydWJfdWludDMyX3QgY3BfcGFja190b3RhbF9ibG9ja19jb3VudDsK KyAgZ3J1Yl91aW50MzJfdCBjcF9wYWNrX3N0YXJ0X3N1bTsKKyAgZ3J1Yl91aW50MzJfdCB2YWxp ZF9ub2RlX2NvdW50OworICBncnViX3VpbnQzMl90IHZhbGlkX2lub2RlX2NvdW50OworICBncnVi X3VpbnQzMl90IG5leHRfZnJlZV9uaWQ7CisgIGdydWJfdWludDMyX3Qgc2l0X3Zlcl9iaXRtYXBf Ynl0ZXNpemU7CisgIGdydWJfdWludDMyX3QgbmF0X3Zlcl9iaXRtYXBfYnl0ZXNpemU7CisgIGdy dWJfdWludDMyX3QgY2hlY2tzdW1fb2Zmc2V0OworICBncnViX3VpbnQ2NF90IGVsYXBzZWRfdGlt ZTsKKyAgZ3J1Yl91aW50OF90IGFsbG9jX3R5cGVbTUFYX0FDVElWRV9MT0dTXTsKKyAgZ3J1Yl91 aW50OF90IHNpdF9uYXRfdmVyc2lvbl9iaXRtYXBbMzkwMF07CisgIGdydWJfdWludDMyX3QgY2hl Y2tzdW07Cit9IEdSVUJfUEFDS0VEOworCitzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9lbnRyeSB7Cisg IGdydWJfdWludDhfdCB2ZXJzaW9uOworICBncnViX3VpbnQzMl90IGlubzsKKyAgZ3J1Yl91aW50 MzJfdCBibG9ja19hZGRyOworfSBHUlVCX1BBQ0tFRDsKKworc3RydWN0IGdydWJfZjJmc19uYXRf amVudAoreworICBncnViX3VpbnQzMl90IG5pZDsKKyAgc3RydWN0IGdydWJfZjJmc19uYXRfZW50 cnkgbmU7Cit9IEdSVUJfUEFDS0VEOworCitzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9qb3VybmFsIHsK KyAgZ3J1Yl91aW50MTZfdCBuX25hdHM7CisgIHN0cnVjdCBncnViX2YyZnNfbmF0X2plbnQgZW50 cmllc1tOQVRfSk9VUk5BTF9FTlRSSUVTXTsKKyAgZ3J1Yl91aW50OF90IHJlc2VydmVkW05BVF9K T1VSTkFMX1JFU0VSVkVEXTsKK30gR1JVQl9QQUNLRUQ7CisKK3N0cnVjdCBncnViX2YyZnNfbmF0 X2Jsb2NrIHsKKyAgc3RydWN0IGdydWJfZjJmc19uYXRfZW50cnkgbmVbTkFUX0VOVFJZX1BFUl9C TE9DS107Cit9IEdSVUJfUEFDS0VEOworCitzdHJ1Y3QgZ3J1Yl9mMmZzX2Rpcl9lbnRyeQorewor ICBncnViX3VpbnQzMl90IGhhc2hfY29kZTsKKyAgZ3J1Yl91aW50MzJfdCBpbm87CisgIGdydWJf dWludDE2X3QgbmFtZV9sZW47CisgIGdydWJfdWludDhfdCBmaWxlX3R5cGU7Cit9IEdSVUJfUEFD S0VEOworCitzdHJ1Y3QgZ3J1Yl9mMmZzX2lubGluZV9kZW50cnkKK3sKKyAgZ3J1Yl91aW50OF90 IGRlbnRyeV9iaXRtYXBbSU5MSU5FX0RFTlRSWV9CSVRNQVBfU0laRV07CisgIGdydWJfdWludDhf dCByZXNlcnZlZFtJTkxJTkVfUkVTRVJWRURfU0laRV07CisgIHN0cnVjdCBncnViX2YyZnNfZGly X2VudHJ5IGRlbnRyeVtOUl9JTkxJTkVfREVOVFJZXTsKKyAgZ3J1Yl91aW50OF90IGZpbGVuYW1l W05SX0lOTElORV9ERU5UUlldW0YyRlNfU0xPVF9MRU5dOworfSBHUlVCX1BBQ0tFRDsKKworc3Ry dWN0IGdydWJfZjJmc19kZW50cnlfYmxvY2sgeworICBncnViX3VpbnQ4X3QgZGVudHJ5X2JpdG1h cFtTSVpFX09GX0RFTlRSWV9CSVRNQVBdOworICBncnViX3VpbnQ4X3QgcmVzZXJ2ZWRbU0laRV9P Rl9SRVNFUlZFRF07CisgIHN0cnVjdCBncnViX2YyZnNfZGlyX2VudHJ5IGRlbnRyeVtOUl9ERU5U UllfSU5fQkxPQ0tdOworICBncnViX3VpbnQ4X3QgZmlsZW5hbWVbTlJfREVOVFJZX0lOX0JMT0NL XVtGMkZTX1NMT1RfTEVOXTsKK30gR1JVQl9QQUNLRUQ7CisKK3N0cnVjdCBncnViX2YyZnNfaW5v ZGUKK3sKKyAgZ3J1Yl91aW50MTZfdCBpX21vZGU7CisgIGdydWJfdWludDhfdCBpX2FkdmlzZTsK KyAgZ3J1Yl91aW50OF90IGlfaW5saW5lOworICBncnViX3VpbnQzMl90IGlfdWlkOworICBncnVi X3VpbnQzMl90IGlfZ2lkOworICBncnViX3VpbnQzMl90IGlfbGlua3M7CisgIGdydWJfdWludDY0 X3QgaV9zaXplOworICBncnViX3VpbnQ2NF90IGlfYmxvY2tzOworICBncnViX3VpbnQ2NF90IGlf YXRpbWU7CisgIGdydWJfdWludDY0X3QgaV9jdGltZTsKKyAgZ3J1Yl91aW50NjRfdCBpX210aW1l OworICBncnViX3VpbnQzMl90IGlfYXRpbWVfbnNlYzsKKyAgZ3J1Yl91aW50MzJfdCBpX2N0aW1l X25zZWM7CisgIGdydWJfdWludDMyX3QgaV9tdGltZV9uc2VjOworICBncnViX3VpbnQzMl90IGlf Z2VuZXJhdGlvbjsKKyAgZ3J1Yl91aW50MzJfdCBpX2N1cnJlbnRfZGVwdGg7CisgIGdydWJfdWlu dDMyX3QgaV94YXR0cl9uaWQ7CisgIGdydWJfdWludDMyX3QgaV9mbGFnczsKKyAgZ3J1Yl91aW50 MzJfdCBpX3Bpbm87CisgIGdydWJfdWludDMyX3QgaV9uYW1lbGVuOworICBncnViX3VpbnQ4X3Qg aV9uYW1lW0YyRlNfTkFNRV9MRU5dOworICBncnViX3VpbnQ4X3QgaV9kaXJfbGV2ZWw7CisgIGdy dWJfdWludDhfdCBpX2V4dFsxMl07CisgIGdydWJfdWludDMyX3QgaV9hZGRyW0RFRl9BRERSU19Q RVJfSU5PREVdOworICBncnViX3VpbnQzMl90IGlfbmlkWzVdOworfSBHUlVCX1BBQ0tFRDsKKwor c3RydWN0IGdydWJfZGlyZWN0X25vZGUgeworICBncnViX3VpbnQzMl90IGFkZHJbQUREUlNfUEVS X0JMT0NLXTsKK30gR1JVQl9QQUNLRUQ7CisKK3N0cnVjdCBncnViX2luZGlyZWN0X25vZGUgewor ICBncnViX3VpbnQzMl90IG5pZFtOSURTX1BFUl9CTE9DS107Cit9IEdSVUJfUEFDS0VEOworCitz dHJ1Y3QgZ3J1Yl9mMmZzX25vZGUKK3sKKyAgdW5pb24KKyAgeworICAgIHN0cnVjdCBncnViX2Yy ZnNfaW5vZGUgaTsKKyAgICBzdHJ1Y3QgZ3J1Yl9kaXJlY3Rfbm9kZSBkbjsKKyAgICBzdHJ1Y3Qg Z3J1Yl9pbmRpcmVjdF9ub2RlIGluOworICAgIGNoYXIgYnVmW0YyRlNfQkxLU0laRSAtIDQwXTsJ LyogU2hvdWxkIG9jY3VweSBGMkZTX0JMS1NJWkUgdG90YWxseSAqLworICB9OworICBncnViX3Vp bnQ4X3QgZHVtbXlbNDBdOworfSBHUlVCX1BBQ0tFRDsKKworc3RydWN0IGdydWJfZnNoZWxwX25v ZGUKK3sKKyAgc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhOworICBzdHJ1Y3QgZ3J1Yl9mMmZz X25vZGUgaW5vZGU7CisgIGdydWJfdWludDMyX3QgaW5vOworICBpbnQgaW5vZGVfcmVhZDsKK307 CisKK3N0cnVjdCBncnViX2YyZnNfZGF0YQoreworICBzdHJ1Y3QgZ3J1Yl9mMmZzX3N1cGVyYmxv Y2sgc2Jsb2NrOworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNrcG9pbnQgY2twdDsKKworICBncnVi X3VpbnQzMl90IHJvb3RfaW5vOworICBncnViX3VpbnQzMl90IGJsb2Nrc19wZXJfc2VnOworICBn cnViX3VpbnQzMl90IGNwX2Jsa2FkZHI7CisgIGdydWJfdWludDMyX3QgbmF0X2Jsa2FkZHI7CisK KyAgc3RydWN0IGdydWJfZjJmc19uYXRfam91cm5hbCBuYXRfajsKKyAgY2hhciAqbmF0X2JpdG1h cDsKKworICBncnViX2Rpc2tfdCBkaXNrOworICBzdHJ1Y3QgZ3J1Yl9mMmZzX25vZGUgKmlub2Rl OworICBzdHJ1Y3QgZ3J1Yl9mc2hlbHBfbm9kZSBkaXJvcGVuOworfTsKKworc3RydWN0IGdydWJf ZjJmc19kaXJfaXRlcl9jdHgKK3sKKyAgc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhOworICBn cnViX2ZzaGVscF9pdGVyYXRlX2Rpcl9ob29rX3QgaG9vazsKKyAgdm9pZCAqaG9va19kYXRhOwor ICBncnViX3VpbnQ4X3QgKmJpdG1hcDsKKyAgZ3J1Yl91aW50OF90ICgqZmlsZW5hbWUpW0YyRlNf U0xPVF9MRU5dOworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2Rpcl9lbnRyeSAqZGVudHJ5OworICBpbnQg bWF4OworfTsKKworc3RydWN0IGdydWJfZjJmc19kaXJfY3R4Cit7CisgIGdydWJfZnNfZGlyX2hv b2tfdCBob29rOworICB2b2lkICpob29rX2RhdGE7CisgIHN0cnVjdCBncnViX2YyZnNfZGF0YSAq ZGF0YTsKK307CisKK3N0YXRpYyBncnViX2RsX3QgbXlfbW9kOworCitzdGF0aWMgaW5saW5lIGlu dAorZ3J1Yl9mMmZzX3Rlc3RfYml0X2xlIChpbnQgbnIsIGNvbnN0IGdydWJfdWludDhfdCAqYWRk cikKK3sKKyAgcmV0dXJuIGFkZHJbbnIgPj4gM10gJiAoMSA8PCAobnIgJiA3KSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgY2hhciAqCitfX2lubGluZV9hZGRyIChzdHJ1Y3QgZ3J1Yl9mMmZzX2lub2Rl ICppbm9kZSkKK3sKKyAgcmV0dXJuIChjaGFyICopJmlub2RlLT5pX2FkZHJbMV07Cit9CisKK3N0 YXRpYyBpbmxpbmUgZ3J1Yl91aW50NjRfdAorZ3J1Yl9mMmZzX2ZpbGVfc2l6ZSAoc3RydWN0IGdy dWJfZjJmc19pbm9kZSAqaW5vZGUpCit7CisgIHJldHVybiBncnViX2xlX3RvX2NwdTY0IChpbm9k ZS0+aV9zaXplKTsKK30KKworc3RhdGljIGlubGluZSBncnViX3VpbnQzMl90CitfX3N0YXJ0X2Nw X2FkZHIgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSkKK3sKKyAgc3RydWN0IGdydWJfZjJm c19jaGVja3BvaW50ICpja3B0ID0gJmRhdGEtPmNrcHQ7CisgIGdydWJfdWludDMyX3Qgc3RhcnRf YWRkciA9IGRhdGEtPmNwX2Jsa2FkZHI7CisKKyAgaWYgKCEoY2twdC0+Y2hlY2twb2ludF92ZXIg JiBncnViX2NwdV90b19sZTY0X2NvbXBpbGVfdGltZSgxKSkpCisgICAgcmV0dXJuIHN0YXJ0X2Fk ZHIgKyBkYXRhLT5ibG9ja3NfcGVyX3NlZzsKKyAgcmV0dXJuIHN0YXJ0X2FkZHI7Cit9CisKK3N0 YXRpYyBpbmxpbmUgZ3J1Yl91aW50MzJfdAorX19zdGFydF9zdW1fYmxvY2sgKHN0cnVjdCBncnVi X2YyZnNfZGF0YSAqZGF0YSkKK3sKKyAgc3RydWN0IGdydWJfZjJmc19jaGVja3BvaW50ICpja3B0 ID0gJmRhdGEtPmNrcHQ7CisKKyAgcmV0dXJuIF9fc3RhcnRfY3BfYWRkciAoZGF0YSkgKyBncnVi X2xlX3RvX2NwdTMyIChja3B0LT5jcF9wYWNrX3N0YXJ0X3N1bSk7Cit9CisKK3N0YXRpYyBpbmxp bmUgZ3J1Yl91aW50MzJfdAorX19zdW1fYmxrX2FkZHIgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAq ZGF0YSwgaW50IGJhc2UsIGludCB0eXBlKQoreworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNrcG9p bnQgKmNrcHQgPSAmZGF0YS0+Y2twdDsKKworICByZXR1cm4gX19zdGFydF9jcF9hZGRyIChkYXRh KSArCisJZ3J1Yl9sZV90b19jcHUzMiAoY2twdC0+Y3BfcGFja190b3RhbF9ibG9ja19jb3VudCkK KwktIChiYXNlICsgMSkgKyB0eXBlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorX19uYXRf Yml0bWFwX3B0ciAoc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhKQoreworICBzdHJ1Y3QgZ3J1 Yl9mMmZzX2NoZWNrcG9pbnQgKmNrcHQgPSAmZGF0YS0+Y2twdDsKKyAgZ3J1Yl91aW50MzJfdCBv ZmZzZXQ7CisKKyAgaWYgKGdydWJfbGVfdG9fY3B1MzIgKGRhdGEtPnNibG9jay5jcF9wYXlsb2Fk KSA+IDApCisgICAgcmV0dXJuIGNrcHQtPnNpdF9uYXRfdmVyc2lvbl9iaXRtYXA7CisKKyAgb2Zm c2V0ID0gZ3J1Yl9sZV90b19jcHUzMiAoY2twdC0+c2l0X3Zlcl9iaXRtYXBfYnl0ZXNpemUpOwor ICByZXR1cm4gY2twdC0+c2l0X25hdF92ZXJzaW9uX2JpdG1hcCArIG9mZnNldDsKK30KKworc3Rh dGljIGlubGluZSBncnViX3VpbnQzMl90CitfX2dldF9ub2RlX2lkIChzdHJ1Y3QgZ3J1Yl9mMmZz X25vZGUgKnJuLCBpbnQgb2ZmLCBpbnQgaW5vZGVfYmxvY2spCit7CisgIGlmIChpbm9kZV9ibG9j aykKKyAgICByZXR1cm4gZ3J1Yl9sZV90b19jcHUzMiAocm4tPmkuaV9uaWRbb2ZmIC0gTk9ERV9E SVIxX0JMT0NLXSk7CisgIHJldHVybiBncnViX2xlX3RvX2NwdTMyIChybi0+aW4ubmlkW29mZl0p OworfQorCitzdGF0aWMgaW5saW5lIGdydWJfZXJyX3QKK2dydWJfZjJmc19ibG9ja19yZWFkIChz dHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGEsIGdydWJfdWludDMyX3QgYmxrYWRkciwgdm9pZCAq YnVmKQoreworICByZXR1cm4gZ3J1Yl9kaXNrX3JlYWQgKGRhdGEtPmRpc2ssCisJCSgoZ3J1Yl9k aXNrX2FkZHJfdClibGthZGRyKSA8PCBGMkZTX0JMS19TRUNfQklUUywKKwkJMCwgRjJGU19CTEtT SVpFLCBidWYpOworfQorCisvKgorICogQ1JDMzIKKyovCisjZGVmaW5lIENSQ1BPTFlfTEUgMHhl ZGI4ODMyMAorCitzdGF0aWMgaW5saW5lIGdydWJfdWludDMyX3QKK2dydWJfZjJmc19jYWxfY3Jj MzIgKGNvbnN0IHZvaWQgKmJ1ZiwgY29uc3QgZ3J1Yl91aW50MzJfdCBsZW4pCit7CisgIGdydWJf dWludDMyX3QgY3JjID0gRjJGU19TVVBFUl9NQUdJQzsKKyAgdW5zaWduZWQgY2hhciAqcCA9ICh1 bnNpZ25lZCBjaGFyICopYnVmOworICBncnViX3VpbnQzMl90IHRtcCA9IGxlbjsKKyAgaW50IGk7 CisKKyAgd2hpbGUgKHRtcC0tKQorICAgIHsKKyAgICAgIGNyYyBePSAqcCsrOworICAgICAgZm9y IChpID0gMDsgaSA8IDg7IGkrKykKKyAgICAgICAgY3JjID0gKGNyYyA+PiAxKSBeICgoY3JjICYg MSkgPyBDUkNQT0xZX0xFIDogMCk7CisgICAgfQorICByZXR1cm4gY3JjOworfQorCitzdGF0aWMg aW5saW5lIGludAorZ3J1Yl9mMmZzX2NyY192YWxpZCAoZ3J1Yl91aW50MzJfdCBibGtfY3JjLCB2 b2lkICpidWYsIGNvbnN0IGdydWJfdWludDMyX3QgbGVuKQoreworICBncnViX3VpbnQzMl90IGNh bF9jcmMgPSAwOworCisgIGNhbF9jcmMgPSBncnViX2YyZnNfY2FsX2NyYzMyIChidWYsIGxlbik7 CisKKyAgcmV0dXJuIChjYWxfY3JjID09IGJsa19jcmMpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50CitncnViX2YyZnNfdGVzdF9iaXQgKGdydWJfdWludDMyX3QgbnIsIGNvbnN0IGNo YXIgKnApCit7CisgIGludCBtYXNrOworCisgIHAgKz0gKG5yID4+IDMpOworICBtYXNrID0gMSA8 PCAoNyAtIChuciAmIDB4MDcpKTsKKyAgcmV0dXJuIG1hc2sgJiAqcDsKK30KKworc3RhdGljIGlu dAorZ3J1Yl9mMmZzX3Nhbml0eV9jaGVja19zYiAoc3RydWN0IGdydWJfZjJmc19zdXBlcmJsb2Nr ICpzYikKK3sKKyAgZ3J1Yl91aW50MzJfdCBsb2dfc2VjdG9yc2l6ZSwgbG9nX3NlY3RvcnNfcGVy X2Jsb2NrOworCisgIGlmIChzYi0+bWFnaWMgIT0gZ3J1Yl9jcHVfdG9fbGUzMl9jb21waWxlX3Rp bWUgKEYyRlNfU1VQRVJfTUFHSUMpKQorICAgIHJldHVybiAtMTsKKworICBpZiAoc2ItPmxvZ19i bG9ja3NpemUgIT0gZ3J1Yl9jcHVfdG9fbGUzMl9jb21waWxlX3RpbWUgKEYyRlNfQkxLX0JJVFMp KQorICAgIHJldHVybiAtMTsKKworICBsb2dfc2VjdG9yc2l6ZSA9IGdydWJfbGVfdG9fY3B1MzIg KHNiLT5sb2dfc2VjdG9yc2l6ZSk7CisgIGxvZ19zZWN0b3JzX3Blcl9ibG9jayA9IGdydWJfbGVf dG9fY3B1MzIgKHNiLT5sb2dfc2VjdG9yc19wZXJfYmxvY2spOworCisgIGlmIChsb2dfc2VjdG9y c2l6ZSA+IEYyRlNfQkxLX0JJVFMpCisgICAgcmV0dXJuIC0xOworCisgIGlmIChsb2dfc2VjdG9y c2l6ZSA8IEYyRlNfTUlOX0xPR19TRUNUT1JfU0laRSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYg KGxvZ19zZWN0b3JzX3Blcl9ibG9jayArIGxvZ19zZWN0b3JzaXplICE9IEYyRlNfQkxLX0JJVFMp CisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitncnViX2Yy ZnNfcmVhZF9zYiAoc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhLCBncnViX2Rpc2tfYWRkcl90 IG9mZnNldCkKK3sKKyAgZ3J1Yl9kaXNrX3QgZGlzayA9IGRhdGEtPmRpc2s7CisgIGdydWJfZXJy X3QgZXJyOworCisgIC8qIFJlYWQgZmlyc3Qgc3VwZXIgYmxvY2suICovCisgIGVyciA9IGdydWJf ZGlza19yZWFkIChkaXNrLCBvZmZzZXQsIDAsIHNpemVvZiAoZGF0YS0+c2Jsb2NrKSwgJmRhdGEt PnNibG9jayk7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiBncnViX2Yy ZnNfc2FuaXR5X2NoZWNrX3NiICgmZGF0YS0+c2Jsb2NrKTsKK30KKworc3RhdGljIHZvaWQgKgor dmFsaWRhdGVfY2hlY2twb2ludCAoc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhLCBncnViX3Vp bnQzMl90IGNwX2FkZHIsCisJZ3J1Yl91aW50NjRfdCAqdmVyc2lvbikKK3sKKyAgdm9pZCAqY3Bf cGFnZV8xLCAqY3BfcGFnZV8yOworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNrcG9pbnQgKmNwX2Js b2NrOworICBncnViX3VpbnQ2NF90IGN1cl92ZXJzaW9uID0gMCwgcHJlX3ZlcnNpb24gPSAwOwor ICBncnViX3VpbnQzMl90IGNyYyA9IDA7CisgIGdydWJfdWludDMyX3QgY3JjX29mZnNldDsKKyAg Z3J1Yl9lcnJfdCBlcnI7CisKKyAgLyogUmVhZCB0aGUgMXN0IGNwIGJsb2NrIGluIHRoaXMgQ1Ag cGFjayAqLworICBjcF9wYWdlXzEgPSBncnViX21hbGxvYyAoRjJGU19CTEtTSVpFKTsKKyAgaWYg KCFjcF9wYWdlXzEpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZXJyID0gZ3J1Yl9mMmZzX2Jsb2Nr X3JlYWQgKGRhdGEsIGNwX2FkZHIsIGNwX3BhZ2VfMSk7CisgIGlmIChlcnIpCisgICAgZ290byBp bnZhbGlkX2NwMTsKKworICBjcF9ibG9jayA9IChzdHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNrcG9pbnQg KiljcF9wYWdlXzE7CisgIGNyY19vZmZzZXQgPSBncnViX2xlX3RvX2NwdTMyIChjcF9ibG9jay0+ Y2hlY2tzdW1fb2Zmc2V0KTsKKyAgaWYgKGNyY19vZmZzZXQgIT0gQ0hFQ0tTVU1fT0ZGU0VUKQor ICAgIGdvdG8gaW52YWxpZF9jcDE7CisKKyAgY3JjID0gZ3J1Yl9sZV90b19jcHUzMiAoKihncnVi X3VpbnQzMl90ICopKChjaGFyICopY3BfYmxvY2sgKyBjcmNfb2Zmc2V0KSk7CisgIGlmICghZ3J1 Yl9mMmZzX2NyY192YWxpZCAoY3JjLCBjcF9ibG9jaywgY3JjX29mZnNldCkpCisgICAgZ290byBp bnZhbGlkX2NwMTsKKworICBwcmVfdmVyc2lvbiA9IGdydWJfbGVfdG9fY3B1NjQgKGNwX2Jsb2Nr LT5jaGVja3BvaW50X3Zlcik7CisKKyAgLyogUmVhZCB0aGUgMm5kIGNwIGJsb2NrIGluIHRoaXMg Q1AgcGFjayAqLworICBjcF9wYWdlXzIgPSBncnViX21hbGxvYyAoRjJGU19CTEtTSVpFKTsKKyAg aWYgKCFjcF9wYWdlXzIpCisgICAgZ290byBpbnZhbGlkX2NwMTsKKworICBjcF9hZGRyICs9IGdy dWJfbGVfdG9fY3B1MzIgKGNwX2Jsb2NrLT5jcF9wYWNrX3RvdGFsX2Jsb2NrX2NvdW50KSAtIDE7 CisKKyAgZXJyID0gZ3J1Yl9mMmZzX2Jsb2NrX3JlYWQgKGRhdGEsIGNwX2FkZHIsIGNwX3BhZ2Vf Mik7CisgIGlmIChlcnIpCisgICAgZ290byBpbnZhbGlkX2NwMjsKKworICBjcF9ibG9jayA9IChz dHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNrcG9pbnQgKiljcF9wYWdlXzI7CisgIGNyY19vZmZzZXQgPSBn cnViX2xlX3RvX2NwdTMyIChjcF9ibG9jay0+Y2hlY2tzdW1fb2Zmc2V0KTsKKyAgaWYgKGNyY19v ZmZzZXQgIT0gQ0hFQ0tTVU1fT0ZGU0VUKQorICAgIGdvdG8gaW52YWxpZF9jcDI7CisKKyAgY3Jj ID0gZ3J1Yl9sZV90b19jcHUzMiAoKihncnViX3VpbnQzMl90ICopKChjaGFyICopY3BfYmxvY2sg KyBjcmNfb2Zmc2V0KSk7CisgIGlmICghZ3J1Yl9mMmZzX2NyY192YWxpZCAoY3JjLCBjcF9ibG9j aywgY3JjX29mZnNldCkpCisgICAgZ290byBpbnZhbGlkX2NwMjsKKworICBjdXJfdmVyc2lvbiA9 IGdydWJfbGVfdG9fY3B1NjQgKGNwX2Jsb2NrLT5jaGVja3BvaW50X3Zlcik7CisgIGlmIChjdXJf dmVyc2lvbiA9PSBwcmVfdmVyc2lvbikKKyAgICB7CisgICAgICAqdmVyc2lvbiA9IGN1cl92ZXJz aW9uOworICAgICAgZ3J1Yl9mcmVlIChjcF9wYWdlXzIpOworICAgICAgcmV0dXJuIGNwX3BhZ2Vf MTsKKyAgICB9CisKK2ludmFsaWRfY3AyOgorICBncnViX2ZyZWUgKGNwX3BhZ2VfMik7CitpbnZh bGlkX2NwMToKKyAgZ3J1Yl9mcmVlIChjcF9wYWdlXzEpOworICByZXR1cm4gTlVMTDsKK30KKwor c3RhdGljIGdydWJfZXJyX3QKK2dydWJfZjJmc19yZWFkX2NwIChzdHJ1Y3QgZ3J1Yl9mMmZzX2Rh dGEgKmRhdGEpCit7CisgIHZvaWQgKmNwMSwgKmNwMiwgKmN1cl9wYWdlOworICBncnViX3VpbnQ2 NF90IGNwMV92ZXJzaW9uID0gMCwgY3AyX3ZlcnNpb24gPSAwOworICBncnViX3VpbnQ2NF90IGNw X3N0YXJ0X2Jsa19ubzsKKworICAvKgorICAgKiBGaW5kaW5nIG91dCB2YWxpZCBjcCBibG9jayBp bnZvbHZlcyByZWFkIGJvdGgKKyAgICogc2V0cyAoY3AgcGFjazEgYW5kIGNwIHBhY2sgMikKKyAg ICovCisgIGNwX3N0YXJ0X2Jsa19ubyA9IGRhdGEtPmNwX2Jsa2FkZHI7CisgIGNwMSA9IHZhbGlk YXRlX2NoZWNrcG9pbnQgKGRhdGEsIGNwX3N0YXJ0X2Jsa19ubywgJmNwMV92ZXJzaW9uKTsKKyAg aWYgKCFjcDEgJiYgZ3J1Yl9lcnJubykKKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKworICAvKiBU aGUgc2Vjb25kIGNoZWNrcG9pbnQgcGFjayBzaG91bGQgc3RhcnQgYXQgdGhlIG5leHQgc2VnbWVu dCAqLworICBjcF9zdGFydF9ibGtfbm8gKz0gZGF0YS0+YmxvY2tzX3Blcl9zZWc7CisgIGNwMiA9 IHZhbGlkYXRlX2NoZWNrcG9pbnQgKGRhdGEsIGNwX3N0YXJ0X2Jsa19ubywgJmNwMl92ZXJzaW9u KTsKKyAgaWYgKCFjcDIgJiYgZ3J1Yl9lcnJubykKKyAgICB7CisgICAgICBncnViX2ZyZWUgKGNw MSk7CisgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICB9CisKKyAgaWYgKGNwMSAmJiBjcDIp CisgICAgY3VyX3BhZ2UgPSAoY3AyX3ZlcnNpb24gPiBjcDFfdmVyc2lvbikgPyBjcDIgOiBjcDE7 CisgIGVsc2UgaWYgKGNwMSkKKyAgICBjdXJfcGFnZSA9IGNwMTsKKyAgZWxzZSBpZiAoY3AyKQor ICAgIGN1cl9wYWdlID0gY3AyOworICBlbHNlCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GUywgIm5vIGNoZWNrcG9pbnRzIik7CisKKyAgZ3J1Yl9tZW1jcHkgKCZkYXRhLT5j a3B0LCBjdXJfcGFnZSwgRjJGU19CTEtTSVpFKTsKKworICBncnViX2ZyZWUgKGNwMSk7CisgIGdy dWJfZnJlZSAoY3AyKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitnZXRf bmF0X2pvdXJuYWwgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSkKK3sKKyAgZ3J1Yl91aW50 MzJfdCBibG9jazsKKyAgY2hhciAqYnVmOworICBncnViX2Vycl90IGVycjsKKworICBidWYgPSBn cnViX21hbGxvYyAoRjJGU19CTEtTSVpFKTsKKyAgaWYgKCFidWYpCisgICAgcmV0dXJuIGdydWJf ZXJybm87CisKKyAgaWYgKENLUFRfRkxBR19TRVQoJmRhdGEtPmNrcHQsIENQX0NPTVBBQ1RfU1VN X0ZMQUcpKQorICAgIGJsb2NrID0gX19zdGFydF9zdW1fYmxvY2sgKGRhdGEpOworICBlbHNlIGlm IChDS1BUX0ZMQUdfU0VUICgmZGF0YS0+Y2twdCwgQ1BfVU1PVU5UX0ZMQUcpKQorICAgIGJsb2Nr ID0gX19zdW1fYmxrX2FkZHIgKGRhdGEsIE5SX0NVUlNFR19UWVBFLCBDVVJTRUdfSE9UX0RBVEEp OworICBlbHNlCisgICAgYmxvY2sgPSBfX3N1bV9ibGtfYWRkciAoZGF0YSwgTlJfQ1VSU0VHX0RB VEFfVFlQRSwgQ1VSU0VHX0hPVF9EQVRBKTsKKworICBlcnIgPSBncnViX2YyZnNfYmxvY2tfcmVh ZCAoZGF0YSwgYmxvY2ssIGJ1Zik7CisgIGlmIChlcnIpCisgICAgZ290byBmYWlsOworCisgIGlm IChDS1BUX0ZMQUdfU0VUICgmZGF0YS0+Y2twdCwgQ1BfQ09NUEFDVF9TVU1fRkxBRykpCisgICAg Z3J1Yl9tZW1jcHkgKCZkYXRhLT5uYXRfaiwgYnVmLCBTVU1fSk9VUk5BTF9TSVpFKTsKKyAgZWxz ZQorICAgIGdydWJfbWVtY3B5ICgmZGF0YS0+bmF0X2osIGJ1ZiArIFNVTV9FTlRSSUVTX1NJWkUs IFNVTV9KT1VSTkFMX1NJWkUpOworCitmYWlsOgorICBncnViX2ZyZWUgKGJ1Zik7CisgIHJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBncnViX3VpbnQzMl90CitnZXRfYmxrYWRkcl9mcm9tX25hdF9q b3VybmFsIChzdHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGEsIGdydWJfdWludDMyX3QgbmlkKQor eworICBncnViX3VpbnQxNl90IG4gPSBncnViX2xlX3RvX2NwdTE2IChkYXRhLT5uYXRfai5uX25h dHMpOworICBncnViX3VpbnQzMl90IGJsa2FkZHIgPSAwOworICBncnViX3VpbnQxNl90IGk7CisK KyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKyAgICB7CisgICAgICBpZiAoZ3J1Yl9sZV90b19j cHUzMiAoZGF0YS0+bmF0X2ouZW50cmllc1tpXS5uaWQpID09IG5pZCkKKyAgICAgICAgeworICAg ICAgICAgIGJsa2FkZHIgPSBncnViX2xlX3RvX2NwdTMyIChkYXRhLT5uYXRfai5lbnRyaWVzW2ld Lm5lLmJsb2NrX2FkZHIpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICBy ZXR1cm4gYmxrYWRkcjsKK30KKworc3RhdGljIGdydWJfdWludDMyX3QKK2dldF9ub2RlX2Jsa2Fk ZHIgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSwgZ3J1Yl91aW50MzJfdCBuaWQpCit7Cisg IHN0cnVjdCBncnViX2YyZnNfbmF0X2Jsb2NrICpuYXRfYmxvY2s7CisgIGdydWJfdWludDMyX3Qg c2VnX29mZiwgYmxvY2tfb2ZmLCBlbnRyeV9vZmYsIGJsb2NrX2FkZHI7CisgIGdydWJfdWludDMy X3QgYmxrYWRkcjsKKyAgZ3J1Yl9lcnJfdCBlcnI7CisKKyAgYmxrYWRkciA9IGdldF9ibGthZGRy X2Zyb21fbmF0X2pvdXJuYWwgKGRhdGEsIG5pZCk7CisgIGlmIChibGthZGRyKQorICAgIHJldHVy biBibGthZGRyOworCisgIG5hdF9ibG9jayA9IGdydWJfbWFsbG9jIChGMkZTX0JMS1NJWkUpOwor ICBpZiAoIW5hdF9ibG9jaykKKyAgICByZXR1cm4gMDsKKworICBibG9ja19vZmYgPSBuaWQgLyBO QVRfRU5UUllfUEVSX0JMT0NLOworICBlbnRyeV9vZmYgPSBuaWQgJSBOQVRfRU5UUllfUEVSX0JM T0NLOworCisgIHNlZ19vZmYgPSBibG9ja19vZmYgLyBkYXRhLT5ibG9ja3NfcGVyX3NlZzsKKyAg YmxvY2tfYWRkciA9IGRhdGEtPm5hdF9ibGthZGRyICsKKwkoKHNlZ19vZmYgKiBkYXRhLT5ibG9j a3NfcGVyX3NlZykgPDwgMSkgKworCShibG9ja19vZmYgJiAoZGF0YS0+YmxvY2tzX3Blcl9zZWcg LSAxKSk7CisKKyAgaWYgKGdydWJfZjJmc190ZXN0X2JpdCAoYmxvY2tfb2ZmLCBkYXRhLT5uYXRf Yml0bWFwKSkKKyAgICBibG9ja19hZGRyICs9IGRhdGEtPmJsb2Nrc19wZXJfc2VnOworCisgIGVy ciA9IGdydWJfZjJmc19ibG9ja19yZWFkIChkYXRhLCBibG9ja19hZGRyLCBuYXRfYmxvY2spOwor ICBpZiAoZXJyKQorICAgIHsKKyAgICAgIGdydWJfZnJlZSAobmF0X2Jsb2NrKTsKKyAgICAgIHJl dHVybiAwOworICAgIH0KKworICBibGthZGRyID0gZ3J1Yl9sZV90b19jcHUzMiAobmF0X2Jsb2Nr LT5uZVtlbnRyeV9vZmZdLmJsb2NrX2FkZHIpOworCisgIGdydWJfZnJlZSAobmF0X2Jsb2NrKTsK KworICByZXR1cm4gYmxrYWRkcjsKK30KKworc3RhdGljIGludAorZ3J1Yl9nZXRfbm9kZV9wYXRo IChzdHJ1Y3QgZ3J1Yl9mMmZzX2lub2RlICppbm9kZSwgZ3J1Yl91aW50MzJfdCBibG9jaywKKwln cnViX3VpbnQzMl90IG9mZnNldFs0XSwgZ3J1Yl91aW50MzJfdCBub2Zmc2V0WzRdKQoreworICBn cnViX3VpbnQzMl90IGRpcmVjdF9ibGtzID0gQUREUlNfUEVSX0JMT0NLOworICBncnViX3VpbnQz Ml90IGRwdHJzX3Blcl9ibGsgPSBOSURTX1BFUl9CTE9DSzsKKyAgZ3J1Yl91aW50MzJfdCBpbmRp cmVjdF9ibGtzID0gQUREUlNfUEVSX0JMT0NLICogTklEU19QRVJfQkxPQ0s7CisgIGdydWJfdWlu dDMyX3QgZGluZGlyZWN0X2Jsa3MgPSBpbmRpcmVjdF9ibGtzICogTklEU19QRVJfQkxPQ0s7Cisg IGdydWJfdWludDMyX3QgZGlyZWN0X2luZGV4ID0gREVGX0FERFJTX1BFUl9JTk9ERTsKKyAgaW50 IG4gPSAwOworICBpbnQgbGV2ZWwgPSAwOworCisgIGlmIChpbm9kZS0+aV9pbmxpbmUgJiBGMkZT X0lOTElORV9YQVRUUikKKyAgICBkaXJlY3RfaW5kZXggLT0gRjJGU19JTkxJTkVfWEFUVFJfQURE UlM7CisKKyAgbm9mZnNldFswXSA9IDA7CisKKyAgaWYgKGJsb2NrIDwgZGlyZWN0X2luZGV4KQor ICAgIHsKKyAgICAgIG9mZnNldFtuXSA9IGJsb2NrOworICAgICAgZ290byBnb3Q7CisgICAgfQor CisgIGJsb2NrIC09IGRpcmVjdF9pbmRleDsKKyAgaWYgKGJsb2NrIDwgZGlyZWN0X2Jsa3MpCisg ICAgeworICAgICAgb2Zmc2V0W24rK10gPSBOT0RFX0RJUjFfQkxPQ0s7CisgICAgICBub2Zmc2V0 W25dID0gMTsKKyAgICAgIG9mZnNldFtuXSA9IGJsb2NrOworICAgICAgbGV2ZWwgPSAxOworICAg ICAgZ290byBnb3Q7CisgICAgfQorCisgIGJsb2NrIC09IGRpcmVjdF9ibGtzOworICBpZiAoYmxv Y2sgPCBkaXJlY3RfYmxrcykKKyAgICB7CisgICAgICBvZmZzZXRbbisrXSA9IE5PREVfRElSMl9C TE9DSzsKKyAgICAgIG5vZmZzZXRbbl0gPSAyOworICAgICAgb2Zmc2V0W25dID0gYmxvY2s7Cisg ICAgICBsZXZlbCA9IDE7CisgICAgICBnb3RvIGdvdDsKKyAgICB9CisKKyAgYmxvY2sgLT0gZGly ZWN0X2Jsa3M7CisgIGlmIChibG9jayA8IGluZGlyZWN0X2Jsa3MpCisgICAgeworICAgICAgb2Zm c2V0W24rK10gPSBOT0RFX0lORDFfQkxPQ0s7CisgICAgICBub2Zmc2V0W25dID0gMzsKKyAgICAg IG9mZnNldFtuKytdID0gYmxvY2sgLyBkaXJlY3RfYmxrczsKKyAgICAgIG5vZmZzZXRbbl0gPSA0 ICsgb2Zmc2V0W24gLSAxXTsKKyAgICAgIG9mZnNldFtuXSA9IGJsb2NrICUgZGlyZWN0X2Jsa3M7 CisgICAgICBsZXZlbCA9IDI7CisgICAgICBnb3RvIGdvdDsKKyAgICB9CisKKyAgYmxvY2sgLT0g aW5kaXJlY3RfYmxrczsKKyAgaWYgKGJsb2NrIDwgaW5kaXJlY3RfYmxrcykKKyAgICB7CisgICAg ICBvZmZzZXRbbisrXSA9IE5PREVfSU5EMl9CTE9DSzsKKyAgICAgIG5vZmZzZXRbbl0gPSA0ICsg ZHB0cnNfcGVyX2JsazsKKyAgICAgIG9mZnNldFtuKytdID0gYmxvY2sgLyBkaXJlY3RfYmxrczsK KyAgICAgIG5vZmZzZXRbbl0gPSA1ICsgZHB0cnNfcGVyX2JsayArIG9mZnNldFtuIC0gMV07Cisg ICAgICBvZmZzZXRbbl0gPSBibG9jayAlIGRpcmVjdF9ibGtzOworICAgICAgbGV2ZWwgPSAyOwor ICAgICAgZ290byBnb3Q7CisgICAgfQorCisgIGJsb2NrIC09IGluZGlyZWN0X2Jsa3M7CisgIGlm IChibG9jayA8IGRpbmRpcmVjdF9ibGtzKQorICAgIHsKKyAgICAgIG9mZnNldFtuKytdID0gTk9E RV9ESU5EX0JMT0NLOworICAgICAgbm9mZnNldFtuXSA9IDUgKyAoZHB0cnNfcGVyX2JsayAqIDIp OworICAgICAgb2Zmc2V0W24rK10gPSBibG9jayAvIGluZGlyZWN0X2Jsa3M7CisgICAgICBub2Zm c2V0W25dID0gNiArIChkcHRyc19wZXJfYmxrICogMikgKworICAgICAgb2Zmc2V0W24gLSAxXSAq IChkcHRyc19wZXJfYmxrICsgMSk7CisgICAgICBvZmZzZXRbbisrXSA9IChibG9jayAvIGRpcmVj dF9ibGtzKSAlIGRwdHJzX3Blcl9ibGs7CisgICAgICBub2Zmc2V0W25dID0gNyArIChkcHRyc19w ZXJfYmxrICogMikgKworCQlvZmZzZXRbbiAtIDJdICogKGRwdHJzX3Blcl9ibGsgKyAxKSArIG9m ZnNldFtuIC0gMV07CisgICAgICBvZmZzZXRbbl0gPSBibG9jayAlIGRpcmVjdF9ibGtzOworICAg ICAgbGV2ZWwgPSAzOworICAgICAgZ290byBnb3Q7CisgICAgfQorZ290OgorICByZXR1cm4gbGV2 ZWw7Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX2YyZnNfcmVhZF9ub2RlIChzdHJ1Y3Qg Z3J1Yl9mMmZzX2RhdGEgKmRhdGEsCisJZ3J1Yl91aW50MzJfdCBuaWQsIHN0cnVjdCBncnViX2Yy ZnNfbm9kZSAqbnApCit7CisgIGdydWJfdWludDMyX3QgYmxrYWRkcjsKKworICBibGthZGRyID0g Z2V0X25vZGVfYmxrYWRkciAoZGF0YSwgbmlkKTsKKyAgaWYgKCFibGthZGRyKQorICAgIHJldHVy biBncnViX2Vycm5vOworCisgIHJldHVybiBncnViX2YyZnNfYmxvY2tfcmVhZCAoZGF0YSwgYmxr YWRkciwgbnApOworfQorCitzdGF0aWMgc3RydWN0IGdydWJfZjJmc19kYXRhICoKK2dydWJfZjJm c19tb3VudCAoZ3J1Yl9kaXNrX3QgZGlzaykKK3sKKyAgc3RydWN0IGdydWJfZjJmc19kYXRhICpk YXRhOworICBncnViX2Vycl90IGVycjsKKworICBkYXRhID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAo KmRhdGEpKTsKKyAgaWYgKCFkYXRhKQorICAgIHJldHVybiBOVUxMOworCisgIGRhdGEtPmRpc2sg PSBkaXNrOworCisgIGlmIChncnViX2YyZnNfcmVhZF9zYiAoZGF0YSwgRjJGU19TVVBFUl9PRkZT RVQwKSkKKyAgICB7CisgICAgICBpZiAoZ3J1Yl9mMmZzX3JlYWRfc2IgKGRhdGEsIEYyRlNfU1VQ RVJfT0ZGU0VUMSkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZ3J1Yl9lcnJubyA9PSBHUlVC X0VSUl9OT05FKQorICAgICAgICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLAorCQkJ Im5vdCBhIEYyRlMgZmlsZXN5c3RlbSAobm8gc3VwZXJibG9jaykiKTsKKyAgICAgICAgICBnb3Rv IGZhaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgZGF0YS0+cm9vdF9pbm8gPSBncnViX2xlX3Rv X2NwdTMyIChkYXRhLT5zYmxvY2sucm9vdF9pbm8pOworICBkYXRhLT5jcF9ibGthZGRyID0gZ3J1 Yl9sZV90b19jcHUzMiAoZGF0YS0+c2Jsb2NrLmNwX2Jsa2FkZHIpOworICBkYXRhLT5uYXRfYmxr YWRkciA9IGdydWJfbGVfdG9fY3B1MzIgKGRhdGEtPnNibG9jay5uYXRfYmxrYWRkcik7CisgIGRh dGEtPmJsb2Nrc19wZXJfc2VnID0gMSA8PAorCWdydWJfbGVfdG9fY3B1MzIgKGRhdGEtPnNibG9j ay5sb2dfYmxvY2tzX3Blcl9zZWcpOworCisgIGVyciA9IGdydWJfZjJmc19yZWFkX2NwIChkYXRh KTsKKyAgaWYgKGVycikKKyAgICBnb3RvIGZhaWw7CisKKyAgZGF0YS0+bmF0X2JpdG1hcCA9IF9f bmF0X2JpdG1hcF9wdHIgKGRhdGEpOworCisgIGVyciA9IGdldF9uYXRfam91cm5hbCAoZGF0YSk7 CisgIGlmIChlcnIpCisgICAgZ290byBmYWlsOworCisgIGRhdGEtPmRpcm9wZW4uZGF0YSA9IGRh dGE7CisgIGRhdGEtPmRpcm9wZW4uaW5vID0gZGF0YS0+cm9vdF9pbm87CisgIGRhdGEtPmRpcm9w ZW4uaW5vZGVfcmVhZCA9IDE7CisgIGRhdGEtPmlub2RlID0gJmRhdGEtPmRpcm9wZW4uaW5vZGU7 CisKKyAgZXJyID0gZ3J1Yl9mMmZzX3JlYWRfbm9kZSAoZGF0YSwgZGF0YS0+cm9vdF9pbm8sIGRh dGEtPmlub2RlKTsKKyAgaWYgKGVycikKKyAgICBnb3RvIGZhaWw7CisKKyAgcmV0dXJuIGRhdGE7 CisKK2ZhaWw6CisgIGdydWJfZnJlZSAoZGF0YSk7CisgIHJldHVybiBOVUxMOworfQorCisvKiBn dWFyYW50ZWUgaW5saW5lX2RhdGEgd2FzIGhhbmRsZWQgYnkgY2FsbGVyICovCitzdGF0aWMgZ3J1 Yl9kaXNrX2FkZHJfdAorZ3J1Yl9mMmZzX2dldF9ibG9jayAoZ3J1Yl9mc2hlbHBfbm9kZV90IG5v ZGUsIGdydWJfZGlza19hZGRyX3QgYmxvY2tfb2ZzKQoreworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2Rh dGEgKmRhdGEgPSBub2RlLT5kYXRhOworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2lub2RlICppbm9kZSA9 ICZub2RlLT5pbm9kZS5pOworICBncnViX3VpbnQzMl90IG9mZnNldFs0XSwgbm9mZnNldFs0XSwg bmlkc1s0XTsKKyAgc3RydWN0IGdydWJfZjJmc19ub2RlICpub2RlX2Jsb2NrOworICBncnViX3Vp bnQzMl90IGJsb2NrX2FkZHIgPSAtMTsKKyAgaW50IGxldmVsLCBpOworCisgIGxldmVsID0gZ3J1 Yl9nZXRfbm9kZV9wYXRoIChpbm9kZSwgYmxvY2tfb2ZzLCBvZmZzZXQsIG5vZmZzZXQpOworICBp ZiAobGV2ZWwgPT0gMCkKKyAgICByZXR1cm4gZ3J1Yl9sZV90b19jcHUzMiAoaW5vZGUtPmlfYWRk cltvZmZzZXRbMF1dKTsKKworICBub2RlX2Jsb2NrID0gZ3J1Yl9tYWxsb2MgKEYyRlNfQkxLU0la RSk7CisgIGlmICghbm9kZV9ibG9jaykKKyAgICByZXR1cm4gLTE7CisKKyAgbmlkc1sxXSA9IF9f Z2V0X25vZGVfaWQgKCZub2RlLT5pbm9kZSwgb2Zmc2V0WzBdLCAxKTsKKworICAvKiBnZXQgaW5k aXJlY3Qgb3IgZGlyZWN0IG5vZGVzICovCisgIGZvciAoaSA9IDE7IGkgPD0gbGV2ZWw7IGkrKykK KyAgICB7CisgICAgICBncnViX2YyZnNfcmVhZF9ub2RlIChkYXRhLCBuaWRzW2ldLCBub2RlX2Js b2NrKTsKKyAgICAgIGlmIChncnViX2Vycm5vKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAg IGlmIChpIDwgbGV2ZWwpCisgICAgICAgIG5pZHNbaSArIDFdID0gX19nZXRfbm9kZV9pZCAobm9k ZV9ibG9jaywgb2Zmc2V0W2ldLCAwKTsKKyAgICB9CisKKyAgYmxvY2tfYWRkciA9IGdydWJfbGVf dG9fY3B1MzIgKG5vZGVfYmxvY2stPmRuLmFkZHJbb2Zmc2V0W2xldmVsXV0pOworZmFpbDoKKyAg Z3J1Yl9mcmVlIChub2RlX2Jsb2NrKTsKKyAgcmV0dXJuIGJsb2NrX2FkZHI7Cit9CisKK3N0YXRp YyBncnViX3NzaXplX3QKK2dydWJfZjJmc19yZWFkX2ZpbGUgKGdydWJfZnNoZWxwX25vZGVfdCBu b2RlLAorCQlncnViX2Rpc2tfcmVhZF9ob29rX3QgcmVhZF9ob29rLCB2b2lkICpyZWFkX2hvb2tf ZGF0YSwKKwkJZ3J1Yl9vZmZfdCBwb3MsIGdydWJfc2l6ZV90IGxlbiwgY2hhciAqYnVmKQorewor ICBzdHJ1Y3QgZ3J1Yl9mMmZzX2lub2RlICppbm9kZSA9ICZub2RlLT5pbm9kZS5pOworICBncnVi X29mZl90IGZpbGVzaXplID0gZ3J1Yl9mMmZzX2ZpbGVfc2l6ZSAoaW5vZGUpOworICBjaGFyICpp bmxpbmVfYWRkciA9IF9faW5saW5lX2FkZHIgKGlub2RlKTsKKworICBpZiAoaW5vZGUtPmlfaW5s aW5lICYgRjJGU19JTkxJTkVfREFUQSkKKyAgICB7CisgICAgICBpZiAocG9zID4gZmlsZXNpemUg fHwgZmlsZXNpemUgPiBNQVhfSU5MSU5FX0RBVEEpCisgICAgICAgIHsKKyAgICAgICAgICBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfRlMsICJjb3JydXB0ZWQgaW5saW5lX2RhdGE6IG5lZWQgZnNj ayIpOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgaWYgKGxlbiA+IGZp bGVzaXplIC0gcG9zKQorICAgICAgICBsZW4gPSBmaWxlc2l6ZSAtIHBvczsKKworICAgICAgZ3J1 Yl9tZW1jcHkgKGJ1ZiArIHBvcywgaW5saW5lX2FkZHIgKyBwb3MsIGxlbik7CisgICAgICByZXR1 cm4gbGVuOworICAgIH0KKworICByZXR1cm4gZ3J1Yl9mc2hlbHBfcmVhZF9maWxlIChub2RlLT5k YXRhLT5kaXNrLCBub2RlLAorCQkJcmVhZF9ob29rLCByZWFkX2hvb2tfZGF0YSwKKwkJCXBvcywg bGVuLCBidWYsIGdydWJfZjJmc19nZXRfYmxvY2ssCisJCQlmaWxlc2l6ZSwKKwkJCUYyRlNfQkxL X1NFQ19CSVRTLCAwKTsKK30KKworc3RhdGljIGNoYXIgKgorZ3J1Yl9mMmZzX3JlYWRfc3ltbGlu ayAoZ3J1Yl9mc2hlbHBfbm9kZV90IG5vZGUpCit7CisgIGNoYXIgKnN5bWxpbms7CisgIHN0cnVj dCBncnViX2ZzaGVscF9ub2RlICpkaXJvID0gbm9kZTsKKyAgZ3J1Yl91aW50NjRfdCBmaWxlc2l6 ZTsKKworICBpZiAoIWRpcm8tPmlub2RlX3JlYWQpCisgICAgeworICAgICAgZ3J1Yl9mMmZzX3Jl YWRfbm9kZSAoZGlyby0+ZGF0YSwgZGlyby0+aW5vLCAmZGlyby0+aW5vZGUpOworICAgICAgaWYg KGdydWJfZXJybm8pCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICBmaWxlc2l6ZSA9IGdy dWJfZjJmc19maWxlX3NpemUoJmRpcm8tPmlub2RlLmkpOworCisgIHN5bWxpbmsgPSBncnViX21h bGxvYyAoZmlsZXNpemUgKyAxKTsKKyAgaWYgKCFzeW1saW5rKQorICAgIHJldHVybiAwOworCisg IGdydWJfZjJmc19yZWFkX2ZpbGUgKGRpcm8sIDAsIDAsIDAsIGZpbGVzaXplLCBzeW1saW5rKTsK KyAgaWYgKGdydWJfZXJybm8pCisgICAgeworICAgICAgZ3J1Yl9mcmVlIChzeW1saW5rKTsKKyAg ICAgIHJldHVybiAwOworICAgIH0KKworICBzeW1saW5rW2ZpbGVzaXplXSA9ICdcMCc7CisgIHJl dHVybiBzeW1saW5rOworfQorCitzdGF0aWMgaW50CitncnViX2YyZnNfY2hlY2tfZGVudHJpZXMg KHN0cnVjdCBncnViX2YyZnNfZGlyX2l0ZXJfY3R4ICpjdHgpCit7CisgIHN0cnVjdCBncnViX2Zz aGVscF9ub2RlICpmZGlybzsKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGN0eC0+bWF4 OykKKyAgICB7CisgICAgICBjaGFyICpmaWxlbmFtZTsKKyAgICAgIGVudW0gZ3J1Yl9mc2hlbHBf ZmlsZXR5cGUgdHlwZSA9IEdSVUJfRlNIRUxQX1VOS05PV047CisgICAgICBlbnVtIEZJTEVfVFlQ RSBmdHlwZTsKKyAgICAgIGludCBuYW1lX2xlbjsKKyAgICAgIGludCByZXQ7CisKKyAgICAgIGlm IChncnViX2YyZnNfdGVzdF9iaXRfbGUgKGksIGN0eC0+Yml0bWFwKSA9PSAwKQorICAgICAgICB7 CisgICAgICAgICAgaSsrOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg IGZ0eXBlID0gY3R4LT5kZW50cnlbaV0uZmlsZV90eXBlOworICAgICAgbmFtZV9sZW4gPSBncnVi X2xlX3RvX2NwdTE2IChjdHgtPmRlbnRyeVtpXS5uYW1lX2xlbik7CisgICAgICBmaWxlbmFtZSA9 IGdydWJfbWFsbG9jIChuYW1lX2xlbiArIDEpOworICAgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAg ICAgcmV0dXJuIDA7CisKKyAgICAgIGdydWJfbWVtY3B5IChmaWxlbmFtZSwgY3R4LT5maWxlbmFt ZVtpXSwgbmFtZV9sZW4pOworICAgICAgZmlsZW5hbWVbbmFtZV9sZW5dID0gMDsKKworICAgICAg ZmRpcm8gPSBncnViX21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl9mc2hlbHBfbm9kZSkpOwor ICAgICAgaWYgKCFmZGlybykKKyAgICAgICAgeworICAgICAgICAgIGdydWJfZnJlZShmaWxlbmFt ZSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgaWYgKGZ0eXBlID09 IEYyRlNfRlRfRElSKQorICAgICAgICB0eXBlID0gR1JVQl9GU0hFTFBfRElSOworICAgICAgZWxz ZSBpZiAoZnR5cGUgPT0gRjJGU19GVF9TWU1MSU5LKQorICAgICAgICB0eXBlID0gR1JVQl9GU0hF TFBfU1lNTElOSzsKKyAgICAgIGVsc2UgaWYgKGZ0eXBlID09IEYyRlNfRlRfUkVHX0ZJTEUpCisg ICAgICAgIHR5cGUgPSBHUlVCX0ZTSEVMUF9SRUc7CisKKyAgICAgIGZkaXJvLT5kYXRhID0gY3R4 LT5kYXRhOworICAgICAgZmRpcm8tPmlubyA9IGdydWJfbGVfdG9fY3B1MzIgKGN0eC0+ZGVudHJ5 W2ldLmlubyk7CisgICAgICBmZGlyby0+aW5vZGVfcmVhZCA9IDA7CisKKyAgICAgIHJldCA9IGN0 eC0+aG9vayAoZmlsZW5hbWUsIHR5cGUsIGZkaXJvLCBjdHgtPmhvb2tfZGF0YSk7CisgICAgICBn cnViX2ZyZWUoZmlsZW5hbWUpOworICAgICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJuIDE7CisK KyAgICAgIGkgKz0gKG5hbWVfbGVuICsgRjJGU19TTE9UX0xFTiAtIDEpIC8gRjJGU19TTE9UX0xF TjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dydWJfZjJmc19pdGVy YXRlX2lubGluZV9kaXIgKHN0cnVjdCBncnViX2YyZnNfaW5vZGUgKmRpciwKKwlzdHJ1Y3QgZ3J1 Yl9mMmZzX2Rpcl9pdGVyX2N0eCAqY3R4KQoreworICBzdHJ1Y3QgZ3J1Yl9mMmZzX2lubGluZV9k ZW50cnkgKmRlX2JsazsKKworICBkZV9ibGsgPSAoc3RydWN0IGdydWJfZjJmc19pbmxpbmVfZGVu dHJ5ICopIF9faW5saW5lX2FkZHIgKGRpcik7CisKKyAgY3R4LT5iaXRtYXAgPSBkZV9ibGstPmRl bnRyeV9iaXRtYXA7CisgIGN0eC0+ZGVudHJ5ID0gZGVfYmxrLT5kZW50cnk7CisgIGN0eC0+Zmls ZW5hbWUgPSBkZV9ibGstPmZpbGVuYW1lOworICBjdHgtPm1heCA9IE5SX0lOTElORV9ERU5UUlk7 CisKKyAgcmV0dXJuIGdydWJfZjJmc19jaGVja19kZW50cmllcyAoY3R4KTsKK30KKworc3RhdGlj IGludAorZ3J1Yl9mMmZzX2l0ZXJhdGVfZGlyIChncnViX2ZzaGVscF9ub2RlX3QgZGlyLAorCWdy dWJfZnNoZWxwX2l0ZXJhdGVfZGlyX2hvb2tfdCBob29rLCB2b2lkICpob29rX2RhdGEpCit7Cisg IHN0cnVjdCBncnViX2ZzaGVscF9ub2RlICpkaXJvID0gKHN0cnVjdCBncnViX2ZzaGVscF9ub2Rl ICopIGRpcjsKKyAgc3RydWN0IGdydWJfZjJmc19pbm9kZSAqaW5vZGU7CisgIHN0cnVjdCBncnVi X2YyZnNfZGlyX2l0ZXJfY3R4IGN0eCA9IHsKKyAgICAuZGF0YSA9IGRpcm8tPmRhdGEsCisgICAg Lmhvb2sgPSBob29rLAorICAgIC5ob29rX2RhdGEgPSBob29rX2RhdGEKKyAgfTsKKyAgZ3J1Yl9v ZmZfdCBmcG9zID0gMDsKKworICBpZiAoIWRpcm8tPmlub2RlX3JlYWQpCisgICAgeworICAgICAg Z3J1Yl9mMmZzX3JlYWRfbm9kZSAoZGlyby0+ZGF0YSwgZGlyby0+aW5vLCAmZGlyby0+aW5vZGUp OworICAgICAgaWYgKGdydWJfZXJybm8pCisJcmV0dXJuIDA7CisgICAgfQorCisgIGlub2RlID0g JmRpcm8tPmlub2RlLmk7CisKKyAgaWYgKGlub2RlLT5pX2lubGluZSAmIEYyRlNfSU5MSU5FX0RF TlRSWSkKKyAgICByZXR1cm4gZ3J1Yl9mMmZzX2l0ZXJhdGVfaW5saW5lX2RpciAoaW5vZGUsICZj dHgpOworCisgIHdoaWxlIChmcG9zIDwgZ3J1Yl9mMmZzX2ZpbGVfc2l6ZSAoaW5vZGUpKQorICAg IHsKKyAgICAgIHN0cnVjdCBncnViX2YyZnNfZGVudHJ5X2Jsb2NrICpkZV9ibGs7CisgICAgICBj aGFyICpidWY7CisgICAgICBpbnQgcmV0OworCisgICAgICBidWYgPSBncnViX3phbGxvYyAoRjJG U19CTEtTSVpFKTsKKyAgICAgIGlmICghYnVmKQorICAgICAgICByZXR1cm4gMDsKKworICAgICAg Z3J1Yl9mMmZzX3JlYWRfZmlsZSAoZGlybywgMCwgMCwgZnBvcywgRjJGU19CTEtTSVpFLCBidWYp OworICAgICAgaWYgKGdydWJfZXJybm8pCisgICAgICAgIHsKKyAgICAgICAgICBncnViX2ZyZWUg KGJ1Zik7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgZGVfYmxrID0g KHN0cnVjdCBncnViX2YyZnNfZGVudHJ5X2Jsb2NrICopIGJ1ZjsKKworICAgICAgY3R4LmJpdG1h cCA9IGRlX2Jsay0+ZGVudHJ5X2JpdG1hcDsKKyAgICAgIGN0eC5kZW50cnkgPSBkZV9ibGstPmRl bnRyeTsKKyAgICAgIGN0eC5maWxlbmFtZSA9IGRlX2Jsay0+ZmlsZW5hbWU7CisgICAgICBjdHgu bWF4ID0gTlJfREVOVFJZX0lOX0JMT0NLOworCisgICAgICByZXQgPSBncnViX2YyZnNfY2hlY2tf ZGVudHJpZXMgKCZjdHgpOworICAgICAgZ3J1Yl9mcmVlIChidWYpOworICAgICAgaWYgKHJldCkK KyAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGZwb3MgKz0gRjJGU19CTEtTSVpFOworICAgIH0K KyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dydWJfZjJmc19kaXJfaXRlciAoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIGVudW0gZ3J1Yl9mc2hlbHBfZmlsZXR5cGUgZmlsZXR5cGUsCisJICAg ICAgZ3J1Yl9mc2hlbHBfbm9kZV90IG5vZGUsIHZvaWQgKmRhdGEpCit7CisgIHN0cnVjdCBncnVi X2YyZnNfZGlyX2N0eCAqY3R4ID0gZGF0YTsKKyAgc3RydWN0IGdydWJfZGlyaG9va19pbmZvIGlu Zm87CisKKyAgZ3J1Yl9tZW1zZXQgKCZpbmZvLCAwLCBzaXplb2YgKGluZm8pKTsKKyAgaWYgKCFu b2RlLT5pbm9kZV9yZWFkKQorICAgIHsKKyAgICAgIGdydWJfZjJmc19yZWFkX25vZGUgKGN0eC0+ ZGF0YSwgbm9kZS0+aW5vLCAmbm9kZS0+aW5vZGUpOworICAgICAgaWYgKCFncnViX2Vycm5vKQor ICAgICAgICBub2RlLT5pbm9kZV9yZWFkID0gMTsKKyAgICAgIGdydWJfZXJybm8gPSBHUlVCX0VS Ul9OT05FOworICAgIH0KKyAgaWYgKG5vZGUtPmlub2RlX3JlYWQpCisgICAgeworICAgICAgaW5m by5tdGltZXNldCA9IDE7CisgICAgICBpbmZvLm10aW1lID0gZ3J1Yl9sZV90b19jcHU2NCAobm9k ZS0+aW5vZGUuaS5pX210aW1lKTsKKyAgICB9CisKKyAgaW5mby5kaXIgPSAoKGZpbGV0eXBlICYg R1JVQl9GU0hFTFBfVFlQRV9NQVNLKSA9PSBHUlVCX0ZTSEVMUF9ESVIpOworICBncnViX2ZyZWUg KG5vZGUpOworICByZXR1cm4gY3R4LT5ob29rIChmaWxlbmFtZSwgJmluZm8sIGN0eC0+aG9va19k YXRhKTsKK30KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfZjJmc19kaXIgKGdydWJfZGV2aWNl X3QgZGV2aWNlLCBjb25zdCBjaGFyICpwYXRoLAorCWdydWJfZnNfZGlyX2hvb2tfdCBob29rLCB2 b2lkICpob29rX2RhdGEpCit7CisgIHN0cnVjdCBncnViX2YyZnNfZGlyX2N0eCBjdHggPSB7Cisg ICAgLmhvb2sgPSBob29rLAorICAgIC5ob29rX2RhdGEgPSBob29rX2RhdGEKKyAgfTsKKyAgc3Ry dWN0IGdydWJfZnNoZWxwX25vZGUgKmZkaXJvID0gMDsKKworICBncnViX2RsX3JlZiAobXlfbW9k KTsKKworICBjdHguZGF0YSA9IGdydWJfZjJmc19tb3VudCAoZGV2aWNlLT5kaXNrKTsKKyAgaWYg KCFjdHguZGF0YSkKKyAgICBnb3RvIGZhaWw7CisKKyAgZ3J1Yl9mc2hlbHBfZmluZF9maWxlIChw YXRoLCAmY3R4LmRhdGEtPmRpcm9wZW4sICZmZGlybywKKwkJZ3J1Yl9mMmZzX2l0ZXJhdGVfZGly LCBncnViX2YyZnNfcmVhZF9zeW1saW5rLAorCQlHUlVCX0ZTSEVMUF9ESVIpOworICBpZiAoZ3J1 Yl9lcnJubykKKyAgICBnb3RvIGZhaWw7CisKKyAgZ3J1Yl9mMmZzX2l0ZXJhdGVfZGlyIChmZGly bywgZ3J1Yl9mMmZzX2Rpcl9pdGVyLCAmY3R4KTsKKworZmFpbDoKKyAgaWYgKGZkaXJvICE9ICZj dHguZGF0YS0+ZGlyb3BlbikKKyAgICBncnViX2ZyZWUgKGZkaXJvKTsKKyBncnViX2ZyZWUgKGN0 eC5kYXRhKTsKKyBncnViX2RsX3VucmVmIChteV9tb2QpOworIHJldHVybiBncnViX2Vycm5vOwor fQorCisKKy8qIE9wZW4gYSBmaWxlIG5hbWVkIE5BTUUgYW5kIGluaXRpYWxpemUgRklMRS4gICov CitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9mMmZzX29wZW4gKHN0cnVjdCBncnViX2ZpbGUgKmZp bGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSA9 IE5VTEw7CisgIHN0cnVjdCBncnViX2ZzaGVscF9ub2RlICpmZGlybyA9IDA7CisKKyAgZ3J1Yl9k bF9yZWYgKG15X21vZCk7CisKKyAgZGF0YSA9IGdydWJfZjJmc19tb3VudCAoZmlsZS0+ZGV2aWNl LT5kaXNrKTsKKyAgaWYgKCFkYXRhKQorICAgIGdvdG8gZmFpbDsKKworICBncnViX2ZzaGVscF9m aW5kX2ZpbGUgKG5hbWUsICZkYXRhLT5kaXJvcGVuLCAmZmRpcm8sCisJCQlncnViX2YyZnNfaXRl cmF0ZV9kaXIsIGdydWJfZjJmc19yZWFkX3N5bWxpbmssCisJCQlHUlVCX0ZTSEVMUF9SRUcpOwor ICBpZiAoZ3J1Yl9lcnJubykKKyAgICBnb3RvIGZhaWw7CisKKyAgaWYgKCFmZGlyby0+aW5vZGVf cmVhZCkKKyAgICB7CisgICAgICBncnViX2YyZnNfcmVhZF9ub2RlIChkYXRhLCBmZGlyby0+aW5v LCAmZmRpcm8tPmlub2RlKTsKKyAgICAgIGlmIChncnViX2Vycm5vKQorCWdvdG8gZmFpbDsKKyAg ICB9CisKKyAgZ3J1Yl9tZW1jcHkgKGRhdGEtPmlub2RlLCAmZmRpcm8tPmlub2RlLCBzaXplb2Yg KCpkYXRhLT5pbm9kZSkpOworICBncnViX2ZyZWUgKGZkaXJvKTsKKworICBmaWxlLT5zaXplID0g Z3J1Yl9mMmZzX2ZpbGVfc2l6ZSAoJihkYXRhLT5pbm9kZS0+aSkpOworICBmaWxlLT5kYXRhID0g ZGF0YTsKKyAgZmlsZS0+b2Zmc2V0ID0gMDsKKworICByZXR1cm4gMDsKKworZmFpbDoKKyAgaWYg KGZkaXJvICE9ICZkYXRhLT5kaXJvcGVuKQorICAgIGdydWJfZnJlZSAoZmRpcm8pOworICBncnVi X2ZyZWUgKGRhdGEpOworCisgIGdydWJfZGxfdW5yZWYgKG15X21vZCk7CisKKyAgcmV0dXJuIGdy dWJfZXJybm87Cit9CisKK3N0YXRpYyBncnViX3NzaXplX3QKK2dydWJfZjJmc19yZWFkIChncnVi X2ZpbGVfdCBmaWxlLCBjaGFyICpidWYsIGdydWJfc2l6ZV90IGxlbikKK3sKKyAgc3RydWN0IGdy dWJfZjJmc19kYXRhICpkYXRhID0gKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqKSBmaWxlLT5kYXRh OworCisgIHJldHVybiBncnViX2YyZnNfcmVhZF9maWxlICgmZGF0YS0+ZGlyb3BlbiwKKwkJZmls ZS0+cmVhZF9ob29rLCBmaWxlLT5yZWFkX2hvb2tfZGF0YSwKKwkJZmlsZS0+b2Zmc2V0LCBsZW4s IGJ1Zik7Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX2YyZnNfY2xvc2UgKGdydWJfZmls ZV90IGZpbGUpCit7CisgIHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgZ3J1 Yl9mMmZzX2RhdGEgKikgZmlsZS0+ZGF0YTsKKworICBncnViX2ZyZWUgKGRhdGEpOworCisgIGdy dWJfZGxfdW5yZWYgKG15X21vZCk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0 YXRpYyBncnViX3VpbnQ4X3QgKgorZ3J1Yl9mMmZzX3V0ZjE2X3RvX3V0ZjggKGdydWJfdWludDE2 X3QgKmluX2J1Zl9sZSkKK3sKKyAgZ3J1Yl91aW50MTZfdCBpbl9idWZbTUFYX1ZPTFVNRV9OQU1F XTsKKyAgZ3J1Yl91aW50OF90ICpvdXRfYnVmOworICBpbnQgbGVuID0gMDsKKworICBvdXRfYnVm ID0gZ3J1Yl9tYWxsb2MgKE1BWF9WT0xVTUVfTkFNRSAqIEdSVUJfTUFYX1VURjhfUEVSX1VURjE2 ICsgMSk7CisgIGlmICghb3V0X2J1ZikKKyAgICByZXR1cm4gTlVMTDsKKworICB3aGlsZSAoKmlu X2J1Zl9sZSAhPSAwICYmIGxlbiA8IE1BWF9WT0xVTUVfTkFNRSkgeworICAgIGluX2J1ZltsZW5d ID0gZ3J1Yl9sZV90b19jcHUxNiAoaW5fYnVmX2xlW2xlbl0pOworICAgIGxlbisrOworICB9CisK KyAgKmdydWJfdXRmMTZfdG9fdXRmOCAob3V0X2J1ZiwgaW5fYnVmLCBsZW4pID0gJ1wwJzsKKyAg cmV0dXJuIG91dF9idWY7Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX2YyZnNfbGFiZWwg KGdydWJfZGV2aWNlX3QgZGV2aWNlLCBjaGFyICoqbGFiZWwpCit7CisgIHN0cnVjdCBncnViX2Yy ZnNfZGF0YSAqZGF0YTsKKyAgZ3J1Yl9kaXNrX3QgZGlzayA9IGRldmljZS0+ZGlzazsKKworICBn cnViX2RsX3JlZiAobXlfbW9kKTsKKworICBkYXRhID0gZ3J1Yl9mMmZzX21vdW50IChkaXNrKTsK KyAgaWYgKGRhdGEpCisgICAgKmxhYmVsID0gKGNoYXIgKikgZ3J1Yl9mMmZzX3V0ZjE2X3RvX3V0 ZjggKGRhdGEtPnNibG9jay52b2x1bWVfbmFtZSk7CisgIGVsc2UKKyAgICAqbGFiZWwgPSBOVUxM OworCisgIGdydWJfZnJlZSAoZGF0YSk7CisgIGdydWJfZGxfdW5yZWYgKG15X21vZCk7CisgIHJl dHVybiBncnViX2Vycm5vOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9mMmZzX3V1aWQg KGdydWJfZGV2aWNlX3QgZGV2aWNlLCBjaGFyICoqdXVpZCkKK3sKKyAgc3RydWN0IGdydWJfZjJm c19kYXRhICpkYXRhOworICBncnViX2Rpc2tfdCBkaXNrID0gZGV2aWNlLT5kaXNrOworCisgIGdy dWJfZGxfcmVmIChteV9tb2QpOworCisgIGRhdGEgPSBncnViX2YyZnNfbW91bnQgKGRpc2spOwor ICBpZiAoZGF0YSkKKyAgICB7CisgICAgICAqdXVpZCA9CisJZ3J1Yl94YXNwcmludGYKKwkoIiUw MnglMDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMnglMDJ4JTAy eCUwMnglMDJ4IiwKKwkJZGF0YS0+c2Jsb2NrLnV1aWRbMF0sIGRhdGEtPnNibG9jay51dWlkWzFd LAorCQlkYXRhLT5zYmxvY2sudXVpZFsyXSwgZGF0YS0+c2Jsb2NrLnV1aWRbM10sCisJCWRhdGEt PnNibG9jay51dWlkWzRdLCBkYXRhLT5zYmxvY2sudXVpZFs1XSwKKwkJZGF0YS0+c2Jsb2NrLnV1 aWRbNl0sIGRhdGEtPnNibG9jay51dWlkWzddLAorCQlkYXRhLT5zYmxvY2sudXVpZFs4XSwgZGF0 YS0+c2Jsb2NrLnV1aWRbOV0sCisJCWRhdGEtPnNibG9jay51dWlkWzEwXSwgZGF0YS0+c2Jsb2Nr LnV1aWRbMTFdLAorCQlkYXRhLT5zYmxvY2sudXVpZFsxMl0sIGRhdGEtPnNibG9jay51dWlkWzEz XSwKKwkJZGF0YS0+c2Jsb2NrLnV1aWRbMTRdLCBkYXRhLT5zYmxvY2sudXVpZFsxNV0pOworICAg IH0KKyAgZWxzZQorICAgICp1dWlkID0gTlVMTDsKKworICBncnViX2ZyZWUgKGRhdGEpOworICBn cnViX2RsX3VucmVmIChteV9tb2QpOworICByZXR1cm4gZ3J1Yl9lcnJubzsKK30KKworc3RhdGlj IHN0cnVjdCBncnViX2ZzIGdydWJfZjJmc19mcyA9IHsKKyAgLm5hbWUgPSAiZjJmcyIsCisgIC5k aXIgPSBncnViX2YyZnNfZGlyLAorICAub3BlbiA9IGdydWJfZjJmc19vcGVuLAorICAucmVhZCA9 IGdydWJfZjJmc19yZWFkLAorICAuY2xvc2UgPSBncnViX2YyZnNfY2xvc2UsCisgIC5sYWJlbCA9 IGdydWJfZjJmc19sYWJlbCwKKyAgLnV1aWQgPSBncnViX2YyZnNfdXVpZCwKKyNpZmRlZiBHUlVC X1VUSUwKKyAgLnJlc2VydmVkX2ZpcnN0X3NlY3RvciA9IDEsCisgIC5ibG9ja2xpc3RfaW5zdGFs bCA9IDAsCisjZW5kaWYKKyAgLm5leHQgPSAwCit9OworCitHUlVCX01PRF9JTklUIChmMmZzKQor eworICBncnViX2ZzX3JlZ2lzdGVyICgmZ3J1Yl9mMmZzX2ZzKTsKKyAgbXlfbW9kID0gbW9kOwor fQorCitHUlVCX01PRF9GSU5JIChmMmZzKQoreworICBncnViX2ZzX3VucmVnaXN0ZXIgKCZncnVi X2YyZnNfZnMpOworfQpkaWZmIC0tZ2l0IGEvcG8vZXhjbHVkZS5wb3QgYi9wby9leGNsdWRlLnBv dAppbmRleCAwYTliMjE1Li44MTYwODljIDEwMDY0NAotLS0gYS9wby9leGNsdWRlLnBvdAorKysg Yi9wby9leGNsdWRlLnBvdApAQCAtMTIxNCw2ICsxMjE0LDcgQEAgbXNnc3RyICIiCiAKICM6IGdy dWItY29yZS9jb21tYW5kcy94bnVfdXVpZC5jOjc1IGdydWItY29yZS9mcy9qZnMuYzo5MjQKICM6 IGdydWItY29yZS9mcy9uaWxmczIuYzoxMTM1CisjOiBncnViLWNvcmUvZnMvZjJmcy5jOjEyNTkK ICMsIGMtZm9ybWF0CiBtc2dpZCAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0l MDJ4JTAyeC0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiCiBtc2dzdHIgIiIKZGlmZiAtLWdpdCBh L3Rlc3RzL2YyZnNfdGVzdC5pbiBiL3Rlc3RzL2YyZnNfdGVzdC5pbgpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4xZWE3N2M4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZjJm c190ZXN0LmluCkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworaWYgWyAi eCRFVUlEIiA9ICJ4IiBdIDsgdGhlbgorIEVVSUQ9YGlkIC11YAorZmkKKworaWYgWyAiJEVVSUQi ICE9IDAgXSA7IHRoZW4KKyBleGl0IDc3CitmaQorCitpZiAhIHdoaWNoIG1rZnMuZjJmcyA+L2Rl di9udWxsIDI+JjE7IHRoZW4KKyBlY2hvICJta2ZzLmYyZnMgbm90IGluc3RhbGxlZDsgY2Fubm90 IHRlc3QgZjJmcy4iCisgZXhpdCA3NworZmkKKworCisiQGJ1aWxkZGlyQC9ncnViLWZzLXRlc3Rl ciIgZjJmcwpkaWZmIC0tZ2l0IGEvdGVzdHMvdXRpbC9ncnViLWZzLXRlc3Rlci5pbiBiL3Rlc3Rz L3V0aWwvZ3J1Yi1mcy10ZXN0ZXIuaW4KaW5kZXggNDI0ZGUyMi4uZTNlNDEwOSAxMDA2NDQKLS0t IGEvdGVzdHMvdXRpbC9ncnViLWZzLXRlc3Rlci5pbgorKysgYi90ZXN0cy91dGlsL2dydWItZnMt dGVzdGVyLmluCkBAIC0xNDIsNyArMTQyLDcgQEAgZm9yICgoTE9HU0VDU0laRT1NSU5MT0dTRUNT SVpFO0xPR1NFQ1NJWkU8PU1BWExPR1NFQ1NJWkU7TE9HU0VDU0laRT1MT0dTRUNTSVpFICsKIAl4 c3F1YXNoKikKIAkgICAgTUlOQkxLU0laRT00MDk2CiAJICAgIE1BWEJMS1NJWkU9MTA0ODU3Njs7 Ci0JeHhmcykKKwl4eGZzfHhmMmZzKQogCSAgICBNSU5CTEtTSVpFPSRTRUNTSVpFCiAJCSMgT1Mg TGltaXRhdGlvbjogR05VL0xpbnV4IGRvZXNuJ3QgYWNjZXB0ID4gNDA5NgogCSAgICBNQVhCTEtT SVpFPTQwOTY7OwpAQCAtMjY1LDYgKzI2NSwxMCBAQCBmb3IgKChMT0dTRUNTSVpFPU1JTkxPR1NF Q1NJWkU7TE9HU0VDU0laRTw9TUFYTE9HU0VDU0laRTtMT0dTRUNTSVpFPUxPR1NFQ1NJWkUgKwog CQl4ImJ0cmZzIiopCiAJCSAgICBGU0xBQkVMPSJncnViXzsvdGVzdMOp8K+mm/Cvpp3wn5iB0LrQ uNGA0LjRgmkgdXJld2ZjZW5pdWV3cnVldnJld251dWlyZXVyZXZ1ZXVybmlldnJld2ZuZXJmY25l dmlyaXZpbnJld3ZuaXJld25pdnJld2l1dmNyZXd2bnVld3ZycnJld25pdWVyd3JlaXV2aXVyZXdp dXZpdXJld251dmV3bnZyZW51cm51bnV2cmV2dXVyZXJlamlyZW12cmVpam52Y3JlaXZpcmUgbnZl cml2bnJlaXZyZXZudXJlaW9yZm5mcnZvZW9pcm9pcmVvaXJlb2lmcmVmb2llcm9pZm9pcmVvaWYi OzsKIAorCSAgICAjIEZTIExJTUlUQVRJT046IGYyZnMgbGFiZWwgaXMgYXQgbW9zdCA1MTIgVVRG LTE2IGNoYXJzCisJCXgiZjJmcyIpCisJCSAgICBGU0xBQkVMPSJncnViXzsvdGVzdMOp5I+M5JCT 5I+V0LrQuNGA0LjRgml1cmV3ZmNlbml1ZXdydWV3bnV1aXJldXJldnVldXJuaWV2cmV3Zm5lcmZj bmV2aXJpdmlucmV3dm5pcmV3bml2cmV3aXV2Y3Jld3ZudWV3dnJycmV3bml1ZXJ3cmVpdXZpdXJl d2l1dml1cmV3bnV2ZXdudnJlbnVybnVudXZyZXZ1dXJlcmVqaXJlbXZyZWlqbnZ2Y3JlaXZpcmUg bnZlcml2bnJlaXZyZXZudXJlaW9yZm5mcnZvZW9pcm9pcmVvaXJlb2lmcmVmb2llcm9pZm9pcnZj cmVpdmlyZSBudmVyaXZucmVpdnJldm51cmVpb3JmbmZydm9lb2lyb2lyZW9pcmVvaWZyZWZvaWVy b2lmb2lyY3JlaXZpcmUgbnZlcml2bnJlaXZyZXZudXJlaW9yZm5mcnZvZW9pcm9pcmVvaXJlb2lm cmVmb2llcm9pZm9pcmVvaWZvaXEiOzsKKwogCSAgICAjIEZTIExJTUlUQVRJT046IGV4ZmF0IGlz IGF0IG1vc3QgMTUgVVRGLTE2IGNoYXJzCiAJCXgiZXhmYXQiKQogCQkgICAgRlNMQUJFTD0iZ8Op 0YIgOy/wr6ab8K+mnfCfmIHQutC40YAiOzsKQEAgLTQ3NCw3ICs0NzgsNyBAQCBmb3IgKChMT0dT RUNTSVpFPU1JTkxPR1NFQ1NJWkU7TE9HU0VDU0laRTw9TUFYTE9HU0VDU0laRTtMT0dTRUNTSVpF PUxPR1NFQ1NJWkUgKwogCSAgICAjIEZJWE1FOiBOb3Qgc3VyZSBhYm91dCBCdHJGUywgTlRGUywg SkZTLCBBRlMsIFVERiBhbmQgU0ZTLiBDaGVjayBpdC4KIAkjIEZTIExJTUlUQVRJT046IGFzIGZh ciBhcyBJIGtub3cgdGhvc2UgRlMgZG9uJ3Qgc3RvcmUgdGhlaXIgbGFzdCBtb2RpZmljYXRpb24g ZGF0ZS4KIAkJeCJqZnNfY2FzZWlucyIgfCB4ImpmcyIgfCB4InhmcyIgfCB4Inhmc19jcmMiIHwg eCJidHJmcyIqIHwgeCJyZWlzZXJmc19vbGQiIHwgeCJyZWlzZXJmcyIgXAotCQkgICAgfCB4ImJm cyIgfCB4ImFmcyIgXAorCQkgICAgfCB4ImJmcyIgfCB4ImFmcyIgfCB4ImYyZnMiIFwKIAkJICAg IHwgeCJ0YXJmcyIgfCB4ImNwaW9fIiogfCB4Im1pbml4IiB8IHgibWluaXgyIiBcCiAJCSAgICB8 IHgibWluaXgzIiB8IHgibnRmcyIqIHwgeCJ1ZGYiIHwgeCJzZnMiKikKIAkJICAgIE5PRlNUSU1F PXk7OwpAQCAtNzUzLDYgKzc1Nyw4IEBAIGZvciAoKExPR1NFQ1NJWkU9TUlOTE9HU0VDU0laRTtM T0dTRUNTSVpFPD1NQVhMT0dTRUNTSVpFO0xPR1NFQ1NJWkU9TE9HU0VDU0laRSArCiAJCSAgICBN T1VOVERFVklDRT0iL2Rldi9tYXBwZXIvZ3J1Yl90ZXN0LXRlc3R2b2wiCiAJCSAgICBNT1VOVEZT PWV4dDIKIAkJICAgICJta2ZzLmV4dDIiIC1MICIkRlNMQUJFTCIgLXEgIiR7TU9VTlRERVZJQ0V9 IiAgOzsKKwkJeGYyZnMpCisJCSAgICAibWtmcy5mMmZzIiAtbCAiJEZTTEFCRUwiIC1xICIke0xP REVWSUNFU1swXX0iIDs7CiAJCXhuaWxmczIpCiAJCSAgICAibWtmcy5uaWxmczIiIC1MICIkRlNM QUJFTCIgLWIgJEJMS1NJWkUgIC1xICIke0xPREVWSUNFU1swXX0iIDs7CiAJCXhleHQyX29sZCkK LS0gCjIuNS40IChBcHBsZSBHaXQtNjEpCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LWYyZnMtZGV2ZWwg bWFpbGluZyBsaXN0CkxpbnV4LWYyZnMtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0dHBz Oi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2xpbnV4LWYyZnMtZGV2ZWwK