From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrei Borzenkov Subject: [2.02] Re: [f2fs-dev] [PATCH v7] F2FS support Date: Tue, 1 Mar 2016 22:52:09 +0300 Message-ID: <56D5F2E9.1070501@gmail.com> 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> <20151215181439.GA60773@jaegeuk.local> <20160108194132.GA17464@jaegeuk.aosp> <20160222182525.GD10875@jaegeuk.gateway> Reply-To: The development of GNU GRUB Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160222182525.GD10875@jaegeuk.gateway> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: grub-devel-bounces+gcbgd-grub-devel=m.gmane.org@gnu.org Sender: grub-devel-bounces+gcbgd-grub-devel=m.gmane.org@gnu.org To: Jaegeuk Kim Cc: The development of GNU GRUB , linux-f2fs-devel@lists.sourceforge.net List-Id: linux-f2fs-devel.lists.sourceforge.net QUNLIGZyb20gbXkgc2lkZS4gSXQgaXMgbGVhZiBjb2RlIHRoYXQgZG9lcyBub3QgYWZmZWN0IGFu eXRoaW5nIHNvCnNob3VsZCBub3QgY2F1c2UgYW55IHJlZ3Jlc3Npb24uCgoyMi4wMi4yMDE2IDIx OjI1LCBKYWVnZXVrIEtpbSDQv9C40YjQtdGCOgo+IENoYW5nIGxvZyBmcm9tIHY2Ogo+ICBvIHJl bW92ZSByZWR1bmRhbnQgZmlsZXNpemUgY2hlY2sgaW4gLT5yZWFkCj4gIG8gY2hlY2sgY29uc2lz dGVuY3kgaW4gLT5vcGVuIHJlZ2FyZGluZyB0byBpbmxpbmVfZGF0YQo+IAo+IC0tID44IC0tCj4g RnJvbSA1MWMxMjA2MTJmZGJjNGJjMzE1ZTljNGM2ZTkxY2E4ODhjM2YzNTk2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQo+IEZyb206IEphZWdldWsgS2ltIDxqYWVnZXVrQGtlcm5lbC5vcmc+Cj4g RGF0ZTogVHVlLCAxNyBOb3YgMjAxNSAxMjo0NToxMyAtMDgwMAo+IFN1YmplY3Q6IFtQQVRDSF0g RjJGUyBzdXBwb3J0Cj4gCj4gIkYyRlMgKEZsYXNoLUZyaWVuZGx5IEZpbGUgU3lzdGVtKSBpcyBm bGFzaC1mcmllbmRseSBmaWxlIHN5c3RlbSB3aGljaCB3YXMgbWVyZ2VkCj4gaW50byBMaW51eCBr ZXJuZWwgdjMuOCBpbiAyMDEzLgo+IAo+IFRoZSBtb3RpdmUgZm9yIEYyRlMgd2FzIHRvIGJ1aWxk IGEgZmlsZSBzeXN0ZW0gdGhhdCBmcm9tIHRoZSBzdGFydCwgdGFrZXMgaW50bwo+IGFjY291bnQg dGhlIGNoYXJhY3RlcmlzdGljcyBvZiBOQU5EIGZsYXNoIG1lbW9yeS1iYXNlZCBzdG9yYWdlIGRl dmljZXMgKHN1Y2ggYXMKPiBzb2xpZC1zdGF0ZSBkaXNrcywgZU1NQywgYW5kIFNEIGNhcmRzKS4K PiAKPiBGMkZTIHdhcyBkZXNpZ25lZCBvbiBhIGJhc2lzIG9mIGEgbG9nLXN0cnVjdHVyZWQgZmls ZSBzeXN0ZW0gYXBwcm9hY2gsIHdoaWNoCj4gcmVtZWRpZXMgc29tZSBrbm93biBpc3N1ZXMgb2Yg dGhlIG9sZGVyIGxvZyBzdHJ1Y3R1cmVkIGZpbGUgc3lzdGVtcywgc3VjaCBhcwo+IHRoZSBzbm93 YmFsbCBlZmZlY3Qgb2Ygd2FuZGVyaW5nIHRyZWVzIGFuZCBoaWdoIGNsZWFuaW5nIG92ZXJoZWFk LiBJbiBhZGRpdGlvbiwKPiBzaW5jZSBhIE5BTkQtYmFzZWQgc3RvcmFnZSBkZXZpY2Ugc2hvd3Mg ZGlmZmVyZW50IGNoYXJhY3RlcmlzdGljcyBhY2NvcmRpbmcgdG8KPiBpdHMgaW50ZXJuYWwgZ2Vv bWV0cnkgb3IgZmxhc2ggbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIChzdWNoIGFzIHRoZSBGbGFz aAo+IFRyYW5zbGF0aW9uIExheWVyIG9yIEZUTCksIGl0IHN1cHBvcnRzIHZhcmlvdXMgcGFyYW1l dGVycyBub3Qgb25seSBmb3IKPiBjb25maWd1cmluZyBvbi1kaXNrIGxheW91dCwgYnV0IGFsc28g Zm9yIHNlbGVjdGluZyBhbGxvY2F0aW9uIGFuZCBjbGVhbmluZwo+IGFsZ29yaXRobS4iLCBxdW90 ZSBieSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GMkZTLgo+IAo+IFRoZSBzb3VyY2Ug Y29kZXMgZm9yIEYyRlMgYXJlIGF2YWlsYWJsZSBmcm9tOgo+IAo+IGh0dHA6Ly9naXQua2VybmVs Lm9yZy9jZ2l0L2xpbnV4L2tlcm5lbC9naXQvamFlZ2V1ay9mMmZzLmdpdAo+IGh0dHA6Ly9naXQu a2VybmVsLm9yZy9jZ2l0L2xpbnV4L2tlcm5lbC9naXQvamFlZ2V1ay9mMmZzLXRvb2xzLmdpdAo+ IAo+IFNpZ25lZC1vZmYtYnk6IEphZWdldWsgS2ltIDxqYWVnZXVrQGtlcm5lbC5vcmc+Cj4gLS0t Cj4gIE1ha2VmaWxlLnV0aWwuZGVmICAgICAgICAgICAgfCAgICA3ICsKPiAgZG9jcy9ncnViLnRl eGkgICAgICAgICAgICAgICB8ICAgIDUgKy0KPiAgZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVm ICB8ICAgIDUgKwo+ICBncnViLWNvcmUvZnMvZjJmcy5jICAgICAgICAgIHwgMTI4OSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgcG8vZXhjbHVkZS5wb3QgICAg ICAgICAgICAgICB8ICAgIDEgKwo+ICB0ZXN0cy9mMmZzX3Rlc3QuaW4gICAgICAgICAgIHwgICAx OSArCj4gIHRlc3RzL3V0aWwvZ3J1Yi1mcy10ZXN0ZXIuaW4gfCAgIDEwICstCj4gIDcgZmlsZXMg Y2hhbmdlZCwgMTMzMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZ3J1Yi1jb3JlL2ZzL2YyZnMuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMv ZjJmc190ZXN0LmluCj4gCj4gZGlmZiAtLWdpdCBhL01ha2VmaWxlLnV0aWwuZGVmIGIvTWFrZWZp bGUudXRpbC5kZWYKPiBpbmRleCBkYjdlOGVjLi44NDYyN2JiIDEwMDY0NAo+IC0tLSBhL01ha2Vm aWxlLnV0aWwuZGVmCj4gKysrIGIvTWFrZWZpbGUudXRpbC5kZWYKPiBAQCAtOTksNiArOTksNyBA QCBsaWJyYXJ5ID0gewo+ICAgIGNvbW1vbiA9IGdydWItY29yZS9mcy9leHQyLmM7Cj4gICAgY29t bW9uID0gZ3J1Yi1jb3JlL2ZzL2ZhdC5jOwo+ICAgIGNvbW1vbiA9IGdydWItY29yZS9mcy9leGZh dC5jOwo+ICsgIGNvbW1vbiA9IGdydWItY29yZS9mcy9mMmZzLmM7Cj4gICAgY29tbW9uID0gZ3J1 Yi1jb3JlL2ZzL2ZzaGVscC5jOwo+ICAgIGNvbW1vbiA9IGdydWItY29yZS9mcy9oZnMuYzsKPiAg ICBjb21tb24gPSBncnViLWNvcmUvZnMvaGZzcGx1cy5jOwo+IEBAIC03NjYsNiArNzY3LDEyIEBA IHNjcmlwdCA9IHsKPiAgCj4gIHNjcmlwdCA9IHsKPiAgICB0ZXN0Y2FzZTsKPiArICBuYW1lID0g ZjJmc190ZXN0Owo+ICsgIGNvbW1vbiA9IHRlc3RzL2YyZnNfdGVzdC5pbjsKPiArfTsKPiArCj4g K3NjcmlwdCA9IHsKPiArICB0ZXN0Y2FzZTsKPiAgICBuYW1lID0gbmlsZnMyX3Rlc3Q7Cj4gICAg Y29tbW9uID0gdGVzdHMvbmlsZnMyX3Rlc3QuaW47Cj4gIH07Cj4gZGlmZiAtLWdpdCBhL2RvY3Mv Z3J1Yi50ZXhpIGIvZG9jcy9ncnViLnRleGkKPiBpbmRleCAxZGYzZGIyLi5lNWE4MGYzIDEwMDY0 NAo+IC0tLSBhL2RvY3MvZ3J1Yi50ZXhpCj4gKysrIGIvZG9jcy9ncnViLnRleGkKPiBAQCAtMzYw LDcgKzM2MCw4IEBAIGJsb2NrbGlzdCBub3RhdGlvbi4gVGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQg ZmlsZXN5c3RlbSB0eXBlcyBhcmUgQGRmbntBbWlnYQo+ICBGYXN0IEZpbGVTeXN0ZW0gKEFGRlMp fSwgQGRmbntBdGhlT1MgZnN9LCBAZGZue0JlRlN9LAo+ICBAZGZue0J0ckZTfSAoaW5jbHVkaW5n IHJhaWQwLCByYWlkMSwgcmFpZDEwLCBnemlwIGFuZCBsem8pLAo+ICBAZGZue2NwaW99IChsaXR0 bGUtIGFuZCBiaWctZW5kaWFuIGJpbiwgb2RjIGFuZCBuZXdjIHZhcmlhbnRzKSwKPiAtQGRmbntM aW51eCBleHQyL2V4dDMvZXh0NH0sIEBkZm57RE9TIEZBVDEyL0ZBVDE2L0ZBVDMyfSwgQGRmbntl eEZBVH0sIEBkZm57SEZTfSwKPiArQGRmbntMaW51eCBleHQyL2V4dDMvZXh0NH0sIEBkZm57RE9T IEZBVDEyL0ZBVDE2L0ZBVDMyfSwgQGRmbntleEZBVH0sCj4gK0BkZm57ZjJmc30sIEBkZm57SEZT fSwKPiAgQGRmbntIRlMrfSwgQGRmbntJU085NjYwfSAoaW5jbHVkaW5nIEpvbGlldCwgUm9jay1y aWRnZSBhbmQgbXVsdGktY2h1bmsgZmlsZXMpLAo+ICBAZGZue0pGU30sIEBkZm57TWluaXggZnN9 ICh2ZXJzaW9ucyAxLCAyIGFuZCAzKSwgQGRmbntuaWxmczJ9LAo+ICBAZGZue05URlN9IChpbmNs dWRpbmcgY29tcHJlc3Npb24pLCBAZGZue1JlaXNlckZTfSwgQGRmbntST01GU30sCj4gQEAgLTUz NDcsNyArNTM0OCw3IEBAIE5URlMsIEpGUywgVURGLCBIRlMrLCBleEZBVCwgbG9uZyBmaWxlbmFt ZXMgaW4gRkFULCBKb2xpZXQgcGFydCBvZgo+ICBJU085NjYwIGFyZSB0cmVhdGVkIGFzIFVURi0x NiBhcyBwZXIgc3BlY2lmaWNhdGlvbi4gQUZTIGFuZCBCRlMgYXJlIHJlYWQKPiAgYXMgVVRGLTgs IGFnYWluIGFjY29yZGluZyB0byBzcGVjaWZpY2F0aW9uLiBCdHJGUywgY3BpbywgdGFyLCBzcXVh c2g0LCBtaW5peCwKPiAgbWluaXgyLCBtaW5peDMsIFJPTUZTLCBSZWlzZXJGUywgWEZTLCBleHQy LCBleHQzLCBleHQ0LCBGQVQgKHNob3J0IG5hbWVzKSwKPiAtUm9ja1JpZGdlIHBhcnQgb2YgSVNP OTY2MCwgbmlsZnMyLCBVRlMxLCBVRlMyIGFuZCBaRlMgYXJlIGFzc3VtZWQKPiArZjJmcywgUm9j a1JpZGdlIHBhcnQgb2YgSVNPOTY2MCwgbmlsZnMyLCBVRlMxLCBVRlMyIGFuZCBaRlMgYXJlIGFz c3VtZWQKPiAgdG8gYmUgVVRGLTguIFRoaXMgbWlnaHQgYmUgZmFsc2Ugb24gc3lzdGVtcyBjb25m aWd1cmVkIHdpdGggbGVnYWN5IGNoYXJzZXQKPiAgYnV0IGFzIGxvbmcgYXMgdGhlIGNoYXJzZXQg dXNlZCBpcyBzdXBlcnNldCBvZiBBU0NJSSB5b3Ugc2hvdWxkIGJlIGFibGUgdG8KPiAgYWNjZXNz IEFTQ0lJLW5hbWVkIGZpbGVzLiBBbmQgaXQncyByZWNvbW1lbmRlZCB0byBjb25maWd1cmUgeW91 ciBzeXN0ZW0gdG8gdXNlCj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRl ZiBiL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgo+IGluZGV4IGQ5ZmEwZTMuLmI1ODVhZGUg MTAwNjQ0Cj4gLS0tIGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCj4gKysrIGIvZ3J1Yi1j b3JlL01ha2VmaWxlLmNvcmUuZGVmCj4gQEAgLTEyNzgsNiArMTI3OCwxMSBAQCBtb2R1bGUgPSB7 Cj4gIH07Cj4gIAo+ICBtb2R1bGUgPSB7Cj4gKyAgbmFtZSA9IGYyZnM7Cj4gKyAgY29tbW9uID0g ZnMvZjJmcy5jOwo+ICt9Owo+ICsKPiArbW9kdWxlID0gewo+ICAgIG5hbWUgPSBmc2hlbHA7Cj4g ICAgY29tbW9uID0gZnMvZnNoZWxwLmM7Cj4gIH07Cj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9m cy9mMmZzLmMgYi9ncnViLWNvcmUvZnMvZjJmcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi5jYjMxMmIzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2dydWItY29yZS9m cy9mMmZzLmMKPiBAQCAtMCwwICsxLDEyODkgQEAKPiArLyoKPiArICogIGYyZnMuYyAtIEZsYXNo LUZyaWVuZGx5IEZpbGUgU3lzdGVtCj4gKyAqCj4gKyAqICBXcml0dGVuIGJ5IEphZWdldWsgS2lt IDxqYWVnZXVrQGtlcm5lbC5vcmc+Cj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUgIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgo+ICsgKgo+ICsgKiAgR1JVQiBpcyBmcmVlIHNv ZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQo+ICsgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKPiArICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCj4gKyAqCj4gKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCj4gKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCj4gKyAqLwo+ICsjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KPiArI2lu Y2x1ZGUgPGdydWIvZmlsZS5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9tbS5oPgo+ICsjaW5jbHVkZSA8 Z3J1Yi9taXNjLmg+Cj4gKyNpbmNsdWRlIDxncnViL2Rpc2suaD4KPiArI2luY2x1ZGUgPGdydWIv ZGwuaD4KPiArI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KPiArI2luY2x1ZGUgPGdydWIvY2hhcnNl dC5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9mc2hlbHAuaD4KPiArCj4gK0dSVUJfTU9EX0xJQ0VOU0Ug KCJHUEx2MysiKTsKPiArCj4gKy8qIEYyRlMgTWFnaWMgTnVtYmVyICovCj4gKyNkZWZpbmUgRjJG U19TVVBFUl9NQUdJQwkweEYyRjUyMDEwCj4gKyNkZWZpbmUgQ0hFQ0tTVU1fT0ZGU0VUCQk0MDky CQkvKiBtdXN0IGJlIGFsaWduZWQgNCBieXRlcyAqLwo+ICsjZGVmaW5lIFUzMl9DSEVDS1NVTV9P RkZTRVQJKENIRUNLU1VNX09GRlNFVCA+PiAyKQo+ICsKPiArLyogYnl0ZS1zaXplIG9mZnNldCAq Lwo+ICsjZGVmaW5lIEYyRlNfU1VQRVJfT0ZGU0VUCSgoZ3J1Yl9kaXNrX2FkZHJfdCkxMDI0KQo+ ICsjZGVmaW5lIEYyRlNfU1VQRVJfT0ZGU0VUMAkoRjJGU19TVVBFUl9PRkZTRVQgPj4gR1JVQl9E SVNLX1NFQ1RPUl9CSVRTKQo+ICsjZGVmaW5lIEYyRlNfU1VQRVJfT0ZGU0VUMQkoKEYyRlNfU1VQ RVJfT0ZGU0VUICsgRjJGU19CTEtTSVpFKSA+PglcCj4gKwkJCQkJCUdSVUJfRElTS19TRUNUT1Jf QklUUykKPiArCj4gKy8qIDkgYml0cyBmb3IgNTEyIGJ5dGVzICovCj4gKyNkZWZpbmUgRjJGU19N SU5fTE9HX1NFQ1RPUl9TSVpFCTkKPiArCj4gKy8qIHN1cHBvcnQgb25seSA0S0IgYmxvY2sgKi8K PiArI2RlZmluZSBGMkZTX0JMS19CSVRTCTEyCj4gKyNkZWZpbmUgRjJGU19CTEtTSVpFCSgxIDw8 IEYyRlNfQkxLX0JJVFMpCj4gKyNkZWZpbmUgRjJGU19CTEtfU0VDX0JJVFMJKEYyRlNfQkxLX0JJ VFMgLSBHUlVCX0RJU0tfU0VDVE9SX0JJVFMpCj4gKwo+ICsjZGVmaW5lIFZFUlNJT05fTEVOCTI1 Ngo+ICsjZGVmaW5lIEYyRlNfTUFYX0VYVEVOU0lPTgk2NAo+ICsKPiArI2RlZmluZSBDUF9DT01Q QUNUX1NVTV9GTEFHCTB4MDAwMDAwMDQKPiArI2RlZmluZSBDUF9VTU9VTlRfRkxBRwkweDAwMDAw MDAxCj4gKwo+ICsjZGVmaW5lIE1BWF9BQ1RJVkVfTE9HUwkxNgo+ICsjZGVmaW5lIE1BWF9BQ1RJ VkVfTk9ERV9MT0dTCTgKPiArI2RlZmluZSBNQVhfQUNUSVZFX0RBVEFfTE9HUwk4Cj4gKyNkZWZp bmUJTlJfQ1VSU0VHX0RBVEFfVFlQRQkzCj4gKyNkZWZpbmUgTlJfQ1VSU0VHX05PREVfVFlQRQkz Cj4gKyNkZWZpbmUgTlJfQ1VSU0VHX1RZUEUJKE5SX0NVUlNFR19EQVRBX1RZUEUgKyBOUl9DVVJT RUdfTk9ERV9UWVBFKQo+ICsKPiArI2RlZmluZSBFTlRSSUVTX0lOX1NVTQk1MTIKPiArI2RlZmlu ZQlTVU1NQVJZX1NJWkUJNwo+ICsjZGVmaW5lCVNVTV9GT09URVJfU0laRQk1Cj4gKyNkZWZpbmUg SkVOVFJZX1NJWkUJKHNpemVvZihzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9qZW50KSkKPiArI2RlZmlu ZSBTVU1fRU5UUklFU19TSVpFCShTVU1NQVJZX1NJWkUgKiBFTlRSSUVTX0lOX1NVTSkKPiArI2Rl ZmluZSBTVU1fSk9VUk5BTF9TSVpFCShGMkZTX0JMS1NJWkUgLSBTVU1fRk9PVEVSX1NJWkUgLVwK PiArCQkJCVNVTV9FTlRSSUVTX1NJWkUpCj4gKyNkZWZpbmUgTkFUX0pPVVJOQUxfRU5UUklFUwko KFNVTV9KT1VSTkFMX1NJWkUgLSAyKSAvIEpFTlRSWV9TSVpFKQo+ICsjZGVmaW5lIE5BVF9KT1VS TkFMX1JFU0VSVkVECSgoU1VNX0pPVVJOQUxfU0laRSAtIDIpICUgSkVOVFJZX1NJWkUpCj4gKwo+ ICsjZGVmaW5lIE5BVF9FTlRSWV9TSVpFIChzaXplb2Yoc3RydWN0IGdydWJfZjJmc19uYXRfZW50 cnkpKQo+ICsjZGVmaW5lIE5BVF9FTlRSWV9QRVJfQkxPQ0sgKEYyRlNfQkxLU0laRSAvIE5BVF9F TlRSWV9TSVpFKQo+ICsKPiArI2RlZmluZSBGMkZTX05BTUVfTEVOCTI1NQo+ICsjZGVmaW5lIEYy RlNfU0xPVF9MRU4JOAo+ICsjZGVmaW5lIE5SX0RFTlRSWV9JTl9CTE9DSwkyMTQKPiArI2RlZmlu ZSBTSVpFX09GX0RJUl9FTlRSWQkxMQkvKiBieSBieXRlICovCj4gKyNkZWZpbmUgQklUU19QRVJf QllURQk4Cj4gKyNkZWZpbmUgU0laRV9PRl9ERU5UUllfQklUTUFQCSgoTlJfREVOVFJZX0lOX0JM T0NLICsgQklUU19QRVJfQllURSAtIDEpIC8gXAo+ICsJCQkJQklUU19QRVJfQllURSkKPiArI2Rl ZmluZSBTSVpFX09GX1JFU0VSVkVECShGMkZTX0JMS1NJWkUgLSAoKFNJWkVfT0ZfRElSX0VOVFJZ ICsgXAo+ICsJCQkJRjJGU19TTE9UX0xFTikgKiBcCj4gKwkJCQlOUl9ERU5UUllfSU5fQkxPQ0sg KyBTSVpFX09GX0RFTlRSWV9CSVRNQVApKQo+ICsKPiArI2RlZmluZSBGMkZTX0lOTElORV9YQVRU Ul9BRERSUwk1MAkvKiAyMDAgYnl0ZXMgZm9yIGlubGluZSB4YXR0cnMgKi8KPiArI2RlZmluZSBE RUZfQUREUlNfUEVSX0lOT0RFCTkyMwkvKiBBZGRyZXNzIFBvaW50ZXJzIGluIGFuIElub2RlICov Cj4gKwo+ICsjZGVmaW5lIEFERFJTX1BFUl9CTE9DSwkxMDE4CS8qIEFkZHJlc3MgUG9pbnRlcnMg aW4gYSBEaXJlY3QgQmxvY2sgKi8KPiArI2RlZmluZSBOSURTX1BFUl9CTE9DSwkxMDE4CS8qIE5v ZGUgSURzIGluIGFuIEluZGlyZWN0IEJsb2NrICovCj4gKyNkZWZpbmUJTk9ERV9ESVIxX0JMT0NL CShERUZfQUREUlNfUEVSX0lOT0RFICsgMSkKPiArI2RlZmluZQlOT0RFX0RJUjJfQkxPQ0sJKERF Rl9BRERSU19QRVJfSU5PREUgKyAyKQo+ICsjZGVmaW5lCU5PREVfSU5EMV9CTE9DSwkoREVGX0FE RFJTX1BFUl9JTk9ERSArIDMpCj4gKyNkZWZpbmUJTk9ERV9JTkQyX0JMT0NLCShERUZfQUREUlNf UEVSX0lOT0RFICsgNCkKPiArI2RlZmluZQlOT0RFX0RJTkRfQkxPQ0sJKERFRl9BRERSU19QRVJf SU5PREUgKyA1KQo+ICsKPiArI2RlZmluZSBNQVhfSU5MSU5FX0RBVEEJKDQgKiAoREVGX0FERFJT X1BFUl9JTk9ERSAtIFwKPiArCQkJRjJGU19JTkxJTkVfWEFUVFJfQUREUlMgLSAxKSkKPiArI2Rl ZmluZSBOUl9JTkxJTkVfREVOVFJZCShNQVhfSU5MSU5FX0RBVEEgKiBCSVRTX1BFUl9CWVRFIC8g XAo+ICsJCQkoKFNJWkVfT0ZfRElSX0VOVFJZICsgRjJGU19TTE9UX0xFTikgKiBcCj4gKwkJCSBC SVRTX1BFUl9CWVRFICsgMSkpCj4gKyNkZWZpbmUgSU5MSU5FX0RFTlRSWV9CSVRNQVBfU0laRQko KE5SX0lOTElORV9ERU5UUlkgKyBcCj4gKwkJCUJJVFNfUEVSX0JZVEUgLSAxKSAvIEJJVFNfUEVS X0JZVEUpCj4gKyNkZWZpbmUgSU5MSU5FX1JFU0VSVkVEX1NJWkUJKE1BWF9JTkxJTkVfREFUQSAt IFwKPiArCQkJKChTSVpFX09GX0RJUl9FTlRSWSArIEYyRlNfU0xPVF9MRU4pICogXAo+ICsJCQkg TlJfSU5MSU5FX0RFTlRSWSArIElOTElORV9ERU5UUllfQklUTUFQX1NJWkUpKQo+ICsjZGVmaW5l IENVUlNFR19IT1RfREFUQQkwCj4gKwo+ICsjZGVmaW5lIENLUFRfRkxBR19TRVQoY2twdCwgZikJ XAo+ICsJCShja3B0KS0+Y2twdF9mbGFncyAmIGdydWJfY3B1X3RvX2xlMzJfY29tcGlsZV90aW1l IChmKQo+ICsKPiArI2RlZmluZSBGMkZTX0lOTElORV9YQVRUUgkweDAxCS8qIGZpbGUgaW5saW5l IHhhdHRyIGZsYWcgKi8KPiArI2RlZmluZSBGMkZTX0lOTElORV9EQVRBCTB4MDIJLyogZmlsZSBp bmxpbmUgZGF0YSBmbGFnICovCj4gKyNkZWZpbmUgRjJGU19JTkxJTkVfREVOVFJZCTB4MDQJLyog ZmlsZSBpbmxpbmUgZGVudHJ5IGZsYWcgKi8KPiArI2RlZmluZSBGMkZTX0RBVEFfRVhJU1QJCTB4 MDgJLyogZmlsZSBpbmxpbmUgZGF0YSBleGlzdCBmbGFnICovCj4gKyNkZWZpbmUgRjJGU19JTkxJ TkVfRE9UUwkweDEwCS8qIGZpbGUgaGF2aW5nIGltcGxpY2l0IGRvdCBkZW50cmllcyAqLwo+ICsK PiArZW51bSBGSUxFX1RZUEUKPiArewo+ICsgIEYyRlNfRlRfVU5LTk9XTiwKPiArICBGMkZTX0ZU X1JFR19GSUxFID0gMSwKPiArICBGMkZTX0ZUX0RJUiA9IDIsCj4gKyAgRjJGU19GVF9TWU1MSU5L ID0gNywKPiArfTsKPiArCj4gKyNkZWZpbmUgTUFYX1ZPTFVNRV9OQU1FCQk1MTIKPiArCj4gK3N0 cnVjdCBncnViX2YyZnNfc3VwZXJibG9jawo+ICt7Cj4gKyAgZ3J1Yl91aW50MzJfdCBtYWdpYzsK PiArICBncnViX3VpbnQxNl90IGR1bW15MVsyXTsKPiArICBncnViX3VpbnQzMl90IGxvZ19zZWN0 b3JzaXplOwo+ICsgIGdydWJfdWludDMyX3QgbG9nX3NlY3RvcnNfcGVyX2Jsb2NrOwo+ICsgIGdy dWJfdWludDMyX3QgbG9nX2Jsb2Nrc2l6ZTsKPiArICBncnViX3VpbnQzMl90IGxvZ19ibG9ja3Nf cGVyX3NlZzsKPiArICBncnViX3VpbnQzMl90IHNlZ3NfcGVyX3NlYzsKPiArICBncnViX3VpbnQz Ml90IHNlY3NfcGVyX3pvbmU7Cj4gKyAgZ3J1Yl91aW50MzJfdCBjaGVja3N1bV9vZmZzZXQ7Cj4g KyAgZ3J1Yl91aW50OF90IGR1bW15Mls0MF07Cj4gKyAgZ3J1Yl91aW50MzJfdCBjcF9ibGthZGRy Owo+ICsgIGdydWJfdWludDMyX3Qgc2l0X2Jsa2FkZHI7Cj4gKyAgZ3J1Yl91aW50MzJfdCBuYXRf YmxrYWRkcjsKPiArICBncnViX3VpbnQzMl90IHNzYV9ibGthZGRyOwo+ICsgIGdydWJfdWludDMy X3QgbWFpbl9ibGthZGRyOwo+ICsgIGdydWJfdWludDMyX3Qgcm9vdF9pbm87Cj4gKyAgZ3J1Yl91 aW50MzJfdCBub2RlX2lubzsKPiArICBncnViX3VpbnQzMl90IG1ldGFfaW5vOwo+ICsgIGdydWJf dWludDhfdCB1dWlkWzE2XTsKPiArICBncnViX3VpbnQxNl90IHZvbHVtZV9uYW1lW01BWF9WT0xV TUVfTkFNRV07Cj4gKyAgZ3J1Yl91aW50MzJfdCBleHRlbnNpb25fY291bnQ7Cj4gKyAgZ3J1Yl91 aW50OF90IGV4dGVuc2lvbl9saXN0W0YyRlNfTUFYX0VYVEVOU0lPTl1bOF07Cj4gKyAgZ3J1Yl91 aW50MzJfdCBjcF9wYXlsb2FkOwo+ICsgIGdydWJfdWludDhfdCB2ZXJzaW9uW1ZFUlNJT05fTEVO XTsKPiArICBncnViX3VpbnQ4X3QgaW5pdF92ZXJzaW9uW1ZFUlNJT05fTEVOXTsKPiArfSBHUlVC X1BBQ0tFRDsKPiArCj4gK3N0cnVjdCBncnViX2YyZnNfY2hlY2twb2ludAo+ICt7Cj4gKyAgZ3J1 Yl91aW50NjRfdCBjaGVja3BvaW50X3ZlcjsKPiArICBncnViX3VpbnQ2NF90IHVzZXJfYmxvY2tf Y291bnQ7Cj4gKyAgZ3J1Yl91aW50NjRfdCB2YWxpZF9ibG9ja19jb3VudDsKPiArICBncnViX3Vp bnQzMl90IHJzdmRfc2VnbWVudF9jb3VudDsKPiArICBncnViX3VpbnQzMl90IG92ZXJwcm92X3Nl Z21lbnRfY291bnQ7Cj4gKyAgZ3J1Yl91aW50MzJfdCBmcmVlX3NlZ21lbnRfY291bnQ7Cj4gKyAg Z3J1Yl91aW50MzJfdCBjdXJfbm9kZV9zZWdub1tNQVhfQUNUSVZFX05PREVfTE9HU107Cj4gKyAg Z3J1Yl91aW50MTZfdCBjdXJfbm9kZV9ibGtvZmZbTUFYX0FDVElWRV9OT0RFX0xPR1NdOwo+ICsg IGdydWJfdWludDMyX3QgY3VyX2RhdGFfc2Vnbm9bTUFYX0FDVElWRV9EQVRBX0xPR1NdOwo+ICsg IGdydWJfdWludDE2X3QgY3VyX2RhdGFfYmxrb2ZmW01BWF9BQ1RJVkVfREFUQV9MT0dTXTsKPiAr ICBncnViX3VpbnQzMl90IGNrcHRfZmxhZ3M7Cj4gKyAgZ3J1Yl91aW50MzJfdCBjcF9wYWNrX3Rv dGFsX2Jsb2NrX2NvdW50Owo+ICsgIGdydWJfdWludDMyX3QgY3BfcGFja19zdGFydF9zdW07Cj4g KyAgZ3J1Yl91aW50MzJfdCB2YWxpZF9ub2RlX2NvdW50Owo+ICsgIGdydWJfdWludDMyX3QgdmFs aWRfaW5vZGVfY291bnQ7Cj4gKyAgZ3J1Yl91aW50MzJfdCBuZXh0X2ZyZWVfbmlkOwo+ICsgIGdy dWJfdWludDMyX3Qgc2l0X3Zlcl9iaXRtYXBfYnl0ZXNpemU7Cj4gKyAgZ3J1Yl91aW50MzJfdCBu YXRfdmVyX2JpdG1hcF9ieXRlc2l6ZTsKPiArICBncnViX3VpbnQzMl90IGNoZWNrc3VtX29mZnNl dDsKPiArICBncnViX3VpbnQ2NF90IGVsYXBzZWRfdGltZTsKPiArICBncnViX3VpbnQ4X3QgYWxs b2NfdHlwZVtNQVhfQUNUSVZFX0xPR1NdOwo+ICsgIGdydWJfdWludDhfdCBzaXRfbmF0X3ZlcnNp b25fYml0bWFwWzM5MDBdOwo+ICsgIGdydWJfdWludDMyX3QgY2hlY2tzdW07Cj4gK30gR1JVQl9Q QUNLRUQ7Cj4gKwo+ICtzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9lbnRyeSB7Cj4gKyAgZ3J1Yl91aW50 OF90IHZlcnNpb247Cj4gKyAgZ3J1Yl91aW50MzJfdCBpbm87Cj4gKyAgZ3J1Yl91aW50MzJfdCBi bG9ja19hZGRyOwo+ICt9IEdSVUJfUEFDS0VEOwo+ICsKPiArc3RydWN0IGdydWJfZjJmc19uYXRf amVudAo+ICt7Cj4gKyAgZ3J1Yl91aW50MzJfdCBuaWQ7Cj4gKyAgc3RydWN0IGdydWJfZjJmc19u YXRfZW50cnkgbmU7Cj4gK30gR1JVQl9QQUNLRUQ7Cj4gKwo+ICtzdHJ1Y3QgZ3J1Yl9mMmZzX25h dF9qb3VybmFsIHsKPiArICBncnViX3VpbnQxNl90IG5fbmF0czsKPiArICBzdHJ1Y3QgZ3J1Yl9m MmZzX25hdF9qZW50IGVudHJpZXNbTkFUX0pPVVJOQUxfRU5UUklFU107Cj4gKyAgZ3J1Yl91aW50 OF90IHJlc2VydmVkW05BVF9KT1VSTkFMX1JFU0VSVkVEXTsKPiArfSBHUlVCX1BBQ0tFRDsKPiAr Cj4gK3N0cnVjdCBncnViX2YyZnNfbmF0X2Jsb2NrIHsKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX25h dF9lbnRyeSBuZVtOQVRfRU5UUllfUEVSX0JMT0NLXTsKPiArfSBHUlVCX1BBQ0tFRDsKPiArCj4g K3N0cnVjdCBncnViX2YyZnNfZGlyX2VudHJ5Cj4gK3sKPiArICBncnViX3VpbnQzMl90IGhhc2hf Y29kZTsKPiArICBncnViX3VpbnQzMl90IGlubzsKPiArICBncnViX3VpbnQxNl90IG5hbWVfbGVu Owo+ICsgIGdydWJfdWludDhfdCBmaWxlX3R5cGU7Cj4gK30gR1JVQl9QQUNLRUQ7Cj4gKwo+ICtz dHJ1Y3QgZ3J1Yl9mMmZzX2lubGluZV9kZW50cnkKPiArewo+ICsgIGdydWJfdWludDhfdCBkZW50 cnlfYml0bWFwW0lOTElORV9ERU5UUllfQklUTUFQX1NJWkVdOwo+ICsgIGdydWJfdWludDhfdCBy ZXNlcnZlZFtJTkxJTkVfUkVTRVJWRURfU0laRV07Cj4gKyAgc3RydWN0IGdydWJfZjJmc19kaXJf ZW50cnkgZGVudHJ5W05SX0lOTElORV9ERU5UUlldOwo+ICsgIGdydWJfdWludDhfdCBmaWxlbmFt ZVtOUl9JTkxJTkVfREVOVFJZXVtGMkZTX1NMT1RfTEVOXTsKPiArfSBHUlVCX1BBQ0tFRDsKPiAr Cj4gK3N0cnVjdCBncnViX2YyZnNfZGVudHJ5X2Jsb2NrIHsKPiArICBncnViX3VpbnQ4X3QgZGVu dHJ5X2JpdG1hcFtTSVpFX09GX0RFTlRSWV9CSVRNQVBdOwo+ICsgIGdydWJfdWludDhfdCByZXNl cnZlZFtTSVpFX09GX1JFU0VSVkVEXTsKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX2Rpcl9lbnRyeSBk ZW50cnlbTlJfREVOVFJZX0lOX0JMT0NLXTsKPiArICBncnViX3VpbnQ4X3QgZmlsZW5hbWVbTlJf REVOVFJZX0lOX0JMT0NLXVtGMkZTX1NMT1RfTEVOXTsKPiArfSBHUlVCX1BBQ0tFRDsKPiArCj4g K3N0cnVjdCBncnViX2YyZnNfaW5vZGUKPiArewo+ICsgIGdydWJfdWludDE2X3QgaV9tb2RlOwo+ ICsgIGdydWJfdWludDhfdCBpX2FkdmlzZTsKPiArICBncnViX3VpbnQ4X3QgaV9pbmxpbmU7Cj4g KyAgZ3J1Yl91aW50MzJfdCBpX3VpZDsKPiArICBncnViX3VpbnQzMl90IGlfZ2lkOwo+ICsgIGdy dWJfdWludDMyX3QgaV9saW5rczsKPiArICBncnViX3VpbnQ2NF90IGlfc2l6ZTsKPiArICBncnVi X3VpbnQ2NF90IGlfYmxvY2tzOwo+ICsgIGdydWJfdWludDY0X3QgaV9hdGltZTsKPiArICBncnVi X3VpbnQ2NF90IGlfY3RpbWU7Cj4gKyAgZ3J1Yl91aW50NjRfdCBpX210aW1lOwo+ICsgIGdydWJf dWludDMyX3QgaV9hdGltZV9uc2VjOwo+ICsgIGdydWJfdWludDMyX3QgaV9jdGltZV9uc2VjOwo+ ICsgIGdydWJfdWludDMyX3QgaV9tdGltZV9uc2VjOwo+ICsgIGdydWJfdWludDMyX3QgaV9nZW5l cmF0aW9uOwo+ICsgIGdydWJfdWludDMyX3QgaV9jdXJyZW50X2RlcHRoOwo+ICsgIGdydWJfdWlu dDMyX3QgaV94YXR0cl9uaWQ7Cj4gKyAgZ3J1Yl91aW50MzJfdCBpX2ZsYWdzOwo+ICsgIGdydWJf dWludDMyX3QgaV9waW5vOwo+ICsgIGdydWJfdWludDMyX3QgaV9uYW1lbGVuOwo+ICsgIGdydWJf dWludDhfdCBpX25hbWVbRjJGU19OQU1FX0xFTl07Cj4gKyAgZ3J1Yl91aW50OF90IGlfZGlyX2xl dmVsOwo+ICsgIGdydWJfdWludDhfdCBpX2V4dFsxMl07Cj4gKyAgZ3J1Yl91aW50MzJfdCBpX2Fk ZHJbREVGX0FERFJTX1BFUl9JTk9ERV07Cj4gKyAgZ3J1Yl91aW50MzJfdCBpX25pZFs1XTsKPiAr fSBHUlVCX1BBQ0tFRDsKPiArCj4gK3N0cnVjdCBncnViX2RpcmVjdF9ub2RlIHsKPiArICBncnVi X3VpbnQzMl90IGFkZHJbQUREUlNfUEVSX0JMT0NLXTsKPiArfSBHUlVCX1BBQ0tFRDsKPiArCj4g K3N0cnVjdCBncnViX2luZGlyZWN0X25vZGUgewo+ICsgIGdydWJfdWludDMyX3QgbmlkW05JRFNf UEVSX0JMT0NLXTsKPiArfSBHUlVCX1BBQ0tFRDsKPiArCj4gK3N0cnVjdCBncnViX2YyZnNfbm9k ZQo+ICt7Cj4gKyAgdW5pb24KPiArICB7Cj4gKyAgICBzdHJ1Y3QgZ3J1Yl9mMmZzX2lub2RlIGk7 Cj4gKyAgICBzdHJ1Y3QgZ3J1Yl9kaXJlY3Rfbm9kZSBkbjsKPiArICAgIHN0cnVjdCBncnViX2lu ZGlyZWN0X25vZGUgaW47Cj4gKyAgICBjaGFyIGJ1ZltGMkZTX0JMS1NJWkUgLSA0MF07CS8qIFNo b3VsZCBvY2N1cHkgRjJGU19CTEtTSVpFIHRvdGFsbHkgKi8KPiArICB9Owo+ICsgIGdydWJfdWlu dDhfdCBkdW1teVs0MF07Cj4gK30gR1JVQl9QQUNLRUQ7Cj4gKwo+ICtzdHJ1Y3QgZ3J1Yl9mc2hl bHBfbm9kZQo+ICt7Cj4gKyAgc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhOwo+ICsgIHN0cnVj dCBncnViX2YyZnNfbm9kZSBpbm9kZTsKPiArICBncnViX3VpbnQzMl90IGlubzsKPiArICBpbnQg aW5vZGVfcmVhZDsKPiArfTsKPiArCj4gK3N0cnVjdCBncnViX2YyZnNfZGF0YQo+ICt7Cj4gKyAg c3RydWN0IGdydWJfZjJmc19zdXBlcmJsb2NrIHNibG9jazsKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZz X2NoZWNrcG9pbnQgY2twdDsKPiArCj4gKyAgZ3J1Yl91aW50MzJfdCByb290X2lubzsKPiArICBn cnViX3VpbnQzMl90IGJsb2Nrc19wZXJfc2VnOwo+ICsgIGdydWJfdWludDMyX3QgY3BfYmxrYWRk cjsKPiArICBncnViX3VpbnQzMl90IG5hdF9ibGthZGRyOwo+ICsKPiArICBzdHJ1Y3QgZ3J1Yl9m MmZzX25hdF9qb3VybmFsIG5hdF9qOwo+ICsgIGNoYXIgKm5hdF9iaXRtYXA7Cj4gKwo+ICsgIGdy dWJfZGlza190IGRpc2s7Cj4gKyAgc3RydWN0IGdydWJfZjJmc19ub2RlICppbm9kZTsKPiArICBz dHJ1Y3QgZ3J1Yl9mc2hlbHBfbm9kZSBkaXJvcGVuOwo+ICt9Owo+ICsKPiArc3RydWN0IGdydWJf ZjJmc19kaXJfaXRlcl9jdHgKPiArewo+ICsgIHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YTsK PiArICBncnViX2ZzaGVscF9pdGVyYXRlX2Rpcl9ob29rX3QgaG9vazsKPiArICB2b2lkICpob29r X2RhdGE7Cj4gKyAgZ3J1Yl91aW50OF90ICpiaXRtYXA7Cj4gKyAgZ3J1Yl91aW50OF90ICgqZmls ZW5hbWUpW0YyRlNfU0xPVF9MRU5dOwo+ICsgIHN0cnVjdCBncnViX2YyZnNfZGlyX2VudHJ5ICpk ZW50cnk7Cj4gKyAgaW50IG1heDsKPiArfTsKPiArCj4gK3N0cnVjdCBncnViX2YyZnNfZGlyX2N0 eAo+ICt7Cj4gKyAgZ3J1Yl9mc19kaXJfaG9va190IGhvb2s7Cj4gKyAgdm9pZCAqaG9va19kYXRh Owo+ICsgIHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YTsKPiArfTsKPiArCj4gK3N0YXRpYyBn cnViX2RsX3QgbXlfbW9kOwo+ICsKPiArc3RhdGljIGlubGluZSBpbnQKPiArZ3J1Yl9mMmZzX3Rl c3RfYml0X2xlIChpbnQgbnIsIGNvbnN0IGdydWJfdWludDhfdCAqYWRkcikKPiArewo+ICsgIHJl dHVybiBhZGRyW25yID4+IDNdICYgKDEgPDwgKG5yICYgNykpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW5saW5lIGNoYXIgKgo+ICtfX2lubGluZV9hZGRyIChzdHJ1Y3QgZ3J1Yl9mMmZzX2lub2RlICpp bm9kZSkKPiArewo+ICsgIHJldHVybiAoY2hhciAqKSZpbm9kZS0+aV9hZGRyWzFdOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIGdydWJfdWludDY0X3QKPiArZ3J1Yl9mMmZzX2ZpbGVfc2l6ZSAo c3RydWN0IGdydWJfZjJmc19pbm9kZSAqaW5vZGUpCj4gK3sKPiArICByZXR1cm4gZ3J1Yl9sZV90 b19jcHU2NCAoaW5vZGUtPmlfc2l6ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgZ3J1Yl91 aW50MzJfdAo+ICtfX3N0YXJ0X2NwX2FkZHIgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSkK PiArewo+ICsgIHN0cnVjdCBncnViX2YyZnNfY2hlY2twb2ludCAqY2twdCA9ICZkYXRhLT5ja3B0 Owo+ICsgIGdydWJfdWludDMyX3Qgc3RhcnRfYWRkciA9IGRhdGEtPmNwX2Jsa2FkZHI7Cj4gKwo+ ICsgIGlmICghKGNrcHQtPmNoZWNrcG9pbnRfdmVyICYgZ3J1Yl9jcHVfdG9fbGU2NF9jb21waWxl X3RpbWUoMSkpKQo+ICsgICAgcmV0dXJuIHN0YXJ0X2FkZHIgKyBkYXRhLT5ibG9ja3NfcGVyX3Nl ZzsKPiArICByZXR1cm4gc3RhcnRfYWRkcjsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBncnVi X3VpbnQzMl90Cj4gK19fc3RhcnRfc3VtX2Jsb2NrIChzdHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRh dGEpCj4gK3sKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNrcG9pbnQgKmNrcHQgPSAmZGF0YS0+ Y2twdDsKPiArCj4gKyAgcmV0dXJuIF9fc3RhcnRfY3BfYWRkciAoZGF0YSkgKyBncnViX2xlX3Rv X2NwdTMyIChja3B0LT5jcF9wYWNrX3N0YXJ0X3N1bSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxp bmUgZ3J1Yl91aW50MzJfdAo+ICtfX3N1bV9ibGtfYWRkciAoc3RydWN0IGdydWJfZjJmc19kYXRh ICpkYXRhLCBpbnQgYmFzZSwgaW50IHR5cGUpCj4gK3sKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX2No ZWNrcG9pbnQgKmNrcHQgPSAmZGF0YS0+Y2twdDsKPiArCj4gKyAgcmV0dXJuIF9fc3RhcnRfY3Bf YWRkciAoZGF0YSkgKwo+ICsJZ3J1Yl9sZV90b19jcHUzMiAoY2twdC0+Y3BfcGFja190b3RhbF9i bG9ja19jb3VudCkKPiArCS0gKGJhc2UgKyAxKSArIHR5cGU7Cj4gK30KPiArCj4gK3N0YXRpYyBp bmxpbmUgdm9pZCAqCj4gK19fbmF0X2JpdG1hcF9wdHIgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAq ZGF0YSkKPiArewo+ICsgIHN0cnVjdCBncnViX2YyZnNfY2hlY2twb2ludCAqY2twdCA9ICZkYXRh LT5ja3B0Owo+ICsgIGdydWJfdWludDMyX3Qgb2Zmc2V0Owo+ICsKPiArICBpZiAoZ3J1Yl9sZV90 b19jcHUzMiAoZGF0YS0+c2Jsb2NrLmNwX3BheWxvYWQpID4gMCkKPiArICAgIHJldHVybiBja3B0 LT5zaXRfbmF0X3ZlcnNpb25fYml0bWFwOwo+ICsKPiArICBvZmZzZXQgPSBncnViX2xlX3RvX2Nw dTMyIChja3B0LT5zaXRfdmVyX2JpdG1hcF9ieXRlc2l6ZSk7Cj4gKyAgcmV0dXJuIGNrcHQtPnNp dF9uYXRfdmVyc2lvbl9iaXRtYXAgKyBvZmZzZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUg Z3J1Yl91aW50MzJfdAo+ICtfX2dldF9ub2RlX2lkIChzdHJ1Y3QgZ3J1Yl9mMmZzX25vZGUgKnJu LCBpbnQgb2ZmLCBpbnQgaW5vZGVfYmxvY2spCj4gK3sKPiArICBpZiAoaW5vZGVfYmxvY2spCj4g KyAgICByZXR1cm4gZ3J1Yl9sZV90b19jcHUzMiAocm4tPmkuaV9uaWRbb2ZmIC0gTk9ERV9ESVIx X0JMT0NLXSk7Cj4gKyAgcmV0dXJuIGdydWJfbGVfdG9fY3B1MzIgKHJuLT5pbi5uaWRbb2ZmXSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgZ3J1Yl9lcnJfdAo+ICtncnViX2YyZnNfYmxvY2tf cmVhZCAoc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhLCBncnViX3VpbnQzMl90IGJsa2FkZHIs IHZvaWQgKmJ1ZikKPiArewo+ICsgIHJldHVybiBncnViX2Rpc2tfcmVhZCAoZGF0YS0+ZGlzaywK PiArCQkoKGdydWJfZGlza19hZGRyX3QpYmxrYWRkcikgPDwgRjJGU19CTEtfU0VDX0JJVFMsCj4g KwkJMCwgRjJGU19CTEtTSVpFLCBidWYpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBDUkMzMgo+ICsq Lwo+ICsjZGVmaW5lIENSQ1BPTFlfTEUgMHhlZGI4ODMyMAo+ICsKPiArc3RhdGljIGlubGluZSBn cnViX3VpbnQzMl90Cj4gK2dydWJfZjJmc19jYWxfY3JjMzIgKGNvbnN0IHZvaWQgKmJ1ZiwgY29u c3QgZ3J1Yl91aW50MzJfdCBsZW4pCj4gK3sKPiArICBncnViX3VpbnQzMl90IGNyYyA9IEYyRlNf U1VQRVJfTUFHSUM7Cj4gKyAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopYnVm Owo+ICsgIGdydWJfdWludDMyX3QgdG1wID0gbGVuOwo+ICsgIGludCBpOwo+ICsKPiArICB3aGls ZSAodG1wLS0pCj4gKyAgICB7Cj4gKyAgICAgIGNyYyBePSAqcCsrOwo+ICsgICAgICBmb3IgKGkg PSAwOyBpIDwgODsgaSsrKQo+ICsgICAgICAgIGNyYyA9IChjcmMgPj4gMSkgXiAoKGNyYyAmIDEp ID8gQ1JDUE9MWV9MRSA6IDApOwo+ICsgICAgfQo+ICsgIHJldHVybiBjcmM7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgaW50Cj4gK2dydWJfZjJmc19jcmNfdmFsaWQgKGdydWJfdWludDMyX3Qg YmxrX2NyYywgdm9pZCAqYnVmLCBjb25zdCBncnViX3VpbnQzMl90IGxlbikKPiArewo+ICsgIGdy dWJfdWludDMyX3QgY2FsX2NyYyA9IDA7Cj4gKwo+ICsgIGNhbF9jcmMgPSBncnViX2YyZnNfY2Fs X2NyYzMyIChidWYsIGxlbik7Cj4gKwo+ICsgIHJldHVybiAoY2FsX2NyYyA9PSBibGtfY3JjKSA/ IDEgOiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludAo+ICtncnViX2YyZnNfdGVzdF9i aXQgKGdydWJfdWludDMyX3QgbnIsIGNvbnN0IGNoYXIgKnApCj4gK3sKPiArICBpbnQgbWFzazsK PiArCj4gKyAgcCArPSAobnIgPj4gMyk7Cj4gKyAgbWFzayA9IDEgPDwgKDcgLSAobnIgJiAweDA3 KSk7Cj4gKyAgcmV0dXJuIG1hc2sgJiAqcDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtncnVi X2YyZnNfc2FuaXR5X2NoZWNrX3NiIChzdHJ1Y3QgZ3J1Yl9mMmZzX3N1cGVyYmxvY2sgKnNiKQo+ ICt7Cj4gKyAgZ3J1Yl91aW50MzJfdCBsb2dfc2VjdG9yc2l6ZSwgbG9nX3NlY3RvcnNfcGVyX2Js b2NrOwo+ICsKPiArICBpZiAoc2ItPm1hZ2ljICE9IGdydWJfY3B1X3RvX2xlMzJfY29tcGlsZV90 aW1lIChGMkZTX1NVUEVSX01BR0lDKSkKPiArICAgIHJldHVybiAtMTsKPiArCj4gKyAgaWYgKHNi LT5sb2dfYmxvY2tzaXplICE9IGdydWJfY3B1X3RvX2xlMzJfY29tcGlsZV90aW1lIChGMkZTX0JM S19CSVRTKSkKPiArICAgIHJldHVybiAtMTsKPiArCj4gKyAgbG9nX3NlY3RvcnNpemUgPSBncnVi X2xlX3RvX2NwdTMyIChzYi0+bG9nX3NlY3RvcnNpemUpOwo+ICsgIGxvZ19zZWN0b3JzX3Blcl9i bG9jayA9IGdydWJfbGVfdG9fY3B1MzIgKHNiLT5sb2dfc2VjdG9yc19wZXJfYmxvY2spOwo+ICsK PiArICBpZiAobG9nX3NlY3RvcnNpemUgPiBGMkZTX0JMS19CSVRTKQo+ICsgICAgcmV0dXJuIC0x Owo+ICsKPiArICBpZiAobG9nX3NlY3RvcnNpemUgPCBGMkZTX01JTl9MT0dfU0VDVE9SX1NJWkUp Cj4gKyAgICByZXR1cm4gLTE7Cj4gKwo+ICsgIGlmIChsb2dfc2VjdG9yc19wZXJfYmxvY2sgKyBs b2dfc2VjdG9yc2l6ZSAhPSBGMkZTX0JMS19CSVRTKQo+ICsgICAgcmV0dXJuIC0xOwo+ICsKPiAr ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtncnViX2YyZnNfcmVhZF9zYiAo c3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhLCBncnViX2Rpc2tfYWRkcl90IG9mZnNldCkKPiAr ewo+ICsgIGdydWJfZGlza190IGRpc2sgPSBkYXRhLT5kaXNrOwo+ICsgIGdydWJfZXJyX3QgZXJy Owo+ICsKPiArICAvKiBSZWFkIGZpcnN0IHN1cGVyIGJsb2NrLiAqLwo+ICsgIGVyciA9IGdydWJf ZGlza19yZWFkIChkaXNrLCBvZmZzZXQsIDAsIHNpemVvZiAoZGF0YS0+c2Jsb2NrKSwgJmRhdGEt PnNibG9jayk7Cj4gKyAgaWYgKGVycikKPiArICAgIHJldHVybiAtMTsKPiArCj4gKyAgcmV0dXJu IGdydWJfZjJmc19zYW5pdHlfY2hlY2tfc2IgKCZkYXRhLT5zYmxvY2spOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCAqCj4gK3ZhbGlkYXRlX2NoZWNrcG9pbnQgKHN0cnVjdCBncnViX2YyZnNfZGF0 YSAqZGF0YSwgZ3J1Yl91aW50MzJfdCBjcF9hZGRyLAo+ICsJZ3J1Yl91aW50NjRfdCAqdmVyc2lv bikKPiArewo+ICsgIGdydWJfdWludDMyX3QgKmNwX3BhZ2VfMSwgKmNwX3BhZ2VfMjsKPiArICBz dHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNrcG9pbnQgKmNwX2Jsb2NrOwo+ICsgIGdydWJfdWludDY0X3Qg Y3VyX3ZlcnNpb24gPSAwLCBwcmVfdmVyc2lvbiA9IDA7Cj4gKyAgZ3J1Yl91aW50MzJfdCBjcmMg PSAwOwo+ICsgIGdydWJfdWludDMyX3QgY3JjX29mZnNldDsKPiArICBncnViX2Vycl90IGVycjsK PiArCj4gKyAgLyogUmVhZCB0aGUgMXN0IGNwIGJsb2NrIGluIHRoaXMgQ1AgcGFjayAqLwo+ICsg IGNwX3BhZ2VfMSA9IGdydWJfbWFsbG9jIChGMkZTX0JMS1NJWkUpOwo+ICsgIGlmICghY3BfcGFn ZV8xKQo+ICsgICAgcmV0dXJuIE5VTEw7Cj4gKwo+ICsgIGVyciA9IGdydWJfZjJmc19ibG9ja19y ZWFkIChkYXRhLCBjcF9hZGRyLCBjcF9wYWdlXzEpOwo+ICsgIGlmIChlcnIpCj4gKyAgICBnb3Rv IGludmFsaWRfY3AxOwo+ICsKPiArICBjcF9ibG9jayA9IChzdHJ1Y3QgZ3J1Yl9mMmZzX2NoZWNr cG9pbnQgKiljcF9wYWdlXzE7Cj4gKyAgY3JjX29mZnNldCA9IGdydWJfbGVfdG9fY3B1MzIgKGNw X2Jsb2NrLT5jaGVja3N1bV9vZmZzZXQpOwo+ICsgIGlmIChjcmNfb2Zmc2V0ICE9IENIRUNLU1VN X09GRlNFVCkKPiArICAgIGdvdG8gaW52YWxpZF9jcDE7Cj4gKwo+ICsgIGNyYyA9IGdydWJfbGVf dG9fY3B1MzIgKCooY3BfcGFnZV8xICsgVTMyX0NIRUNLU1VNX09GRlNFVCkpOwo+ICsgIGlmICgh Z3J1Yl9mMmZzX2NyY192YWxpZCAoY3JjLCBjcF9ibG9jaywgY3JjX29mZnNldCkpCj4gKyAgICBn b3RvIGludmFsaWRfY3AxOwo+ICsKPiArICBwcmVfdmVyc2lvbiA9IGdydWJfbGVfdG9fY3B1NjQg KGNwX2Jsb2NrLT5jaGVja3BvaW50X3Zlcik7Cj4gKwo+ICsgIC8qIFJlYWQgdGhlIDJuZCBjcCBi bG9jayBpbiB0aGlzIENQIHBhY2sgKi8KPiArICBjcF9wYWdlXzIgPSBncnViX21hbGxvYyAoRjJG U19CTEtTSVpFKTsKPiArICBpZiAoIWNwX3BhZ2VfMikKPiArICAgIGdvdG8gaW52YWxpZF9jcDE7 Cj4gKwo+ICsgIGNwX2FkZHIgKz0gZ3J1Yl9sZV90b19jcHUzMiAoY3BfYmxvY2stPmNwX3BhY2tf dG90YWxfYmxvY2tfY291bnQpIC0gMTsKPiArCj4gKyAgZXJyID0gZ3J1Yl9mMmZzX2Jsb2NrX3Jl YWQgKGRhdGEsIGNwX2FkZHIsIGNwX3BhZ2VfMik7Cj4gKyAgaWYgKGVycikKPiArICAgIGdvdG8g aW52YWxpZF9jcDI7Cj4gKwo+ICsgIGNwX2Jsb2NrID0gKHN0cnVjdCBncnViX2YyZnNfY2hlY2tw b2ludCAqKWNwX3BhZ2VfMjsKPiArICBjcmNfb2Zmc2V0ID0gZ3J1Yl9sZV90b19jcHUzMiAoY3Bf YmxvY2stPmNoZWNrc3VtX29mZnNldCk7Cj4gKyAgaWYgKGNyY19vZmZzZXQgIT0gQ0hFQ0tTVU1f T0ZGU0VUKQo+ICsgICAgZ290byBpbnZhbGlkX2NwMjsKPiArCj4gKyAgY3JjID0gZ3J1Yl9sZV90 b19jcHUzMiAoKihjcF9wYWdlXzIgKyBVMzJfQ0hFQ0tTVU1fT0ZGU0VUKSk7Cj4gKyAgaWYgKCFn cnViX2YyZnNfY3JjX3ZhbGlkIChjcmMsIGNwX2Jsb2NrLCBjcmNfb2Zmc2V0KSkKPiArICAgIGdv dG8gaW52YWxpZF9jcDI7Cj4gKwo+ICsgIGN1cl92ZXJzaW9uID0gZ3J1Yl9sZV90b19jcHU2NCAo Y3BfYmxvY2stPmNoZWNrcG9pbnRfdmVyKTsKPiArICBpZiAoY3VyX3ZlcnNpb24gPT0gcHJlX3Zl cnNpb24pCj4gKyAgICB7Cj4gKyAgICAgICp2ZXJzaW9uID0gY3VyX3ZlcnNpb247Cj4gKyAgICAg IGdydWJfZnJlZSAoY3BfcGFnZV8yKTsKPiArICAgICAgcmV0dXJuIGNwX3BhZ2VfMTsKPiArICAg IH0KPiArCj4gK2ludmFsaWRfY3AyOgo+ICsgIGdydWJfZnJlZSAoY3BfcGFnZV8yKTsKPiAraW52 YWxpZF9jcDE6Cj4gKyAgZ3J1Yl9mcmVlIChjcF9wYWdlXzEpOwo+ICsgIHJldHVybiBOVUxMOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtncnViX2YyZnNfcmVhZF9jcCAoc3RydWN0 IGdydWJfZjJmc19kYXRhICpkYXRhKQo+ICt7Cj4gKyAgdm9pZCAqY3AxLCAqY3AyLCAqY3VyX3Bh Z2U7Cj4gKyAgZ3J1Yl91aW50NjRfdCBjcDFfdmVyc2lvbiA9IDAsIGNwMl92ZXJzaW9uID0gMDsK PiArICBncnViX3VpbnQ2NF90IGNwX3N0YXJ0X2Jsa19ubzsKPiArCj4gKyAgLyoKPiArICAgKiBG aW5kaW5nIG91dCB2YWxpZCBjcCBibG9jayBpbnZvbHZlcyByZWFkIGJvdGgKPiArICAgKiBzZXRz IChjcCBwYWNrMSBhbmQgY3AgcGFjayAyKQo+ICsgICAqLwo+ICsgIGNwX3N0YXJ0X2Jsa19ubyA9 IGRhdGEtPmNwX2Jsa2FkZHI7Cj4gKyAgY3AxID0gdmFsaWRhdGVfY2hlY2twb2ludCAoZGF0YSwg Y3Bfc3RhcnRfYmxrX25vLCAmY3AxX3ZlcnNpb24pOwo+ICsgIGlmICghY3AxICYmIGdydWJfZXJy bm8pCj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKPiArCj4gKyAgLyogVGhlIHNlY29uZCBjaGVj a3BvaW50IHBhY2sgc2hvdWxkIHN0YXJ0IGF0IHRoZSBuZXh0IHNlZ21lbnQgKi8KPiArICBjcF9z dGFydF9ibGtfbm8gKz0gZGF0YS0+YmxvY2tzX3Blcl9zZWc7Cj4gKyAgY3AyID0gdmFsaWRhdGVf Y2hlY2twb2ludCAoZGF0YSwgY3Bfc3RhcnRfYmxrX25vLCAmY3AyX3ZlcnNpb24pOwo+ICsgIGlm ICghY3AyICYmIGdydWJfZXJybm8pCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZnJlZSAoY3AxKTsK PiArICAgICAgcmV0dXJuIGdydWJfZXJybm87Cj4gKyAgICB9Cj4gKwo+ICsgIGlmIChjcDEgJiYg Y3AyKQo+ICsgICAgY3VyX3BhZ2UgPSAoY3AyX3ZlcnNpb24gPiBjcDFfdmVyc2lvbikgPyBjcDIg OiBjcDE7Cj4gKyAgZWxzZSBpZiAoY3AxKQo+ICsgICAgY3VyX3BhZ2UgPSBjcDE7Cj4gKyAgZWxz ZSBpZiAoY3AyKQo+ICsgICAgY3VyX3BhZ2UgPSBjcDI7Cj4gKyAgZWxzZQo+ICsgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GUywgIm5vIGNoZWNrcG9pbnRzIik7Cj4gKwo+ICsg IGdydWJfbWVtY3B5ICgmZGF0YS0+Y2twdCwgY3VyX3BhZ2UsIEYyRlNfQkxLU0laRSk7Cj4gKwo+ ICsgIGdydWJfZnJlZSAoY3AxKTsKPiArICBncnViX2ZyZWUgKGNwMik7Cj4gKyAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBncnViX2Vycl90Cj4gK2dldF9uYXRfam91cm5hbCAoc3RydWN0 IGdydWJfZjJmc19kYXRhICpkYXRhKQo+ICt7Cj4gKyAgZ3J1Yl91aW50MzJfdCBibG9jazsKPiAr ICBjaGFyICpidWY7Cj4gKyAgZ3J1Yl9lcnJfdCBlcnI7Cj4gKwo+ICsgIGJ1ZiA9IGdydWJfbWFs bG9jIChGMkZTX0JMS1NJWkUpOwo+ICsgIGlmICghYnVmKQo+ICsgICAgcmV0dXJuIGdydWJfZXJy bm87Cj4gKwo+ICsgIGlmIChDS1BUX0ZMQUdfU0VUKCZkYXRhLT5ja3B0LCBDUF9DT01QQUNUX1NV TV9GTEFHKSkKPiArICAgIGJsb2NrID0gX19zdGFydF9zdW1fYmxvY2sgKGRhdGEpOwo+ICsgIGVs c2UgaWYgKENLUFRfRkxBR19TRVQgKCZkYXRhLT5ja3B0LCBDUF9VTU9VTlRfRkxBRykpCj4gKyAg ICBibG9jayA9IF9fc3VtX2Jsa19hZGRyIChkYXRhLCBOUl9DVVJTRUdfVFlQRSwgQ1VSU0VHX0hP VF9EQVRBKTsKPiArICBlbHNlCj4gKyAgICBibG9jayA9IF9fc3VtX2Jsa19hZGRyIChkYXRhLCBO Ul9DVVJTRUdfREFUQV9UWVBFLCBDVVJTRUdfSE9UX0RBVEEpOwo+ICsKPiArICBlcnIgPSBncnVi X2YyZnNfYmxvY2tfcmVhZCAoZGF0YSwgYmxvY2ssIGJ1Zik7Cj4gKyAgaWYgKGVycikKPiArICAg IGdvdG8gZmFpbDsKPiArCj4gKyAgaWYgKENLUFRfRkxBR19TRVQgKCZkYXRhLT5ja3B0LCBDUF9D T01QQUNUX1NVTV9GTEFHKSkKPiArICAgIGdydWJfbWVtY3B5ICgmZGF0YS0+bmF0X2osIGJ1Ziwg U1VNX0pPVVJOQUxfU0laRSk7Cj4gKyAgZWxzZQo+ICsgICAgZ3J1Yl9tZW1jcHkgKCZkYXRhLT5u YXRfaiwgYnVmICsgU1VNX0VOVFJJRVNfU0laRSwgU1VNX0pPVVJOQUxfU0laRSk7Cj4gKwo+ICtm YWlsOgo+ICsgIGdydWJfZnJlZSAoYnVmKTsKPiArICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtz dGF0aWMgZ3J1Yl91aW50MzJfdAo+ICtnZXRfYmxrYWRkcl9mcm9tX25hdF9qb3VybmFsIChzdHJ1 Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGEsIGdydWJfdWludDMyX3QgbmlkKQo+ICt7Cj4gKyAgZ3J1 Yl91aW50MTZfdCBuID0gZ3J1Yl9sZV90b19jcHUxNiAoZGF0YS0+bmF0X2oubl9uYXRzKTsKPiAr ICBncnViX3VpbnQzMl90IGJsa2FkZHIgPSAwOwo+ICsgIGdydWJfdWludDE2X3QgaTsKPiArCj4g KyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKPiArICAgIHsKPiArICAgICAgaWYgKGdydWJfbGVf dG9fY3B1MzIgKGRhdGEtPm5hdF9qLmVudHJpZXNbaV0ubmlkKSA9PSBuaWQpCj4gKyAgICAgICAg ewo+ICsgICAgICAgICAgYmxrYWRkciA9IGdydWJfbGVfdG9fY3B1MzIgKGRhdGEtPm5hdF9qLmVu dHJpZXNbaV0ubmUuYmxvY2tfYWRkcik7Cj4gKyAgICAgICAgICBicmVhazsKPiArICAgICAgICB9 Cj4gKyAgICB9Cj4gKyAgcmV0dXJuIGJsa2FkZHI7Cj4gK30KPiArCj4gK3N0YXRpYyBncnViX3Vp bnQzMl90Cj4gK2dldF9ub2RlX2Jsa2FkZHIgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSwg Z3J1Yl91aW50MzJfdCBuaWQpCj4gK3sKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9ibG9jayAq bmF0X2Jsb2NrOwo+ICsgIGdydWJfdWludDMyX3Qgc2VnX29mZiwgYmxvY2tfb2ZmLCBlbnRyeV9v ZmYsIGJsb2NrX2FkZHI7Cj4gKyAgZ3J1Yl91aW50MzJfdCBibGthZGRyOwo+ICsgIGdydWJfZXJy X3QgZXJyOwo+ICsKPiArICBibGthZGRyID0gZ2V0X2Jsa2FkZHJfZnJvbV9uYXRfam91cm5hbCAo ZGF0YSwgbmlkKTsKPiArICBpZiAoYmxrYWRkcikKPiArICAgIHJldHVybiBibGthZGRyOwo+ICsK PiArICBuYXRfYmxvY2sgPSBncnViX21hbGxvYyAoRjJGU19CTEtTSVpFKTsKPiArICBpZiAoIW5h dF9ibG9jaykKPiArICAgIHJldHVybiAwOwo+ICsKPiArICBibG9ja19vZmYgPSBuaWQgLyBOQVRf RU5UUllfUEVSX0JMT0NLOwo+ICsgIGVudHJ5X29mZiA9IG5pZCAlIE5BVF9FTlRSWV9QRVJfQkxP Q0s7Cj4gKwo+ICsgIHNlZ19vZmYgPSBibG9ja19vZmYgLyBkYXRhLT5ibG9ja3NfcGVyX3NlZzsK PiArICBibG9ja19hZGRyID0gZGF0YS0+bmF0X2Jsa2FkZHIgKwo+ICsJKChzZWdfb2ZmICogZGF0 YS0+YmxvY2tzX3Blcl9zZWcpIDw8IDEpICsKPiArCShibG9ja19vZmYgJiAoZGF0YS0+YmxvY2tz X3Blcl9zZWcgLSAxKSk7Cj4gKwo+ICsgIGlmIChncnViX2YyZnNfdGVzdF9iaXQgKGJsb2NrX29m ZiwgZGF0YS0+bmF0X2JpdG1hcCkpCj4gKyAgICBibG9ja19hZGRyICs9IGRhdGEtPmJsb2Nrc19w ZXJfc2VnOwo+ICsKPiArICBlcnIgPSBncnViX2YyZnNfYmxvY2tfcmVhZCAoZGF0YSwgYmxvY2tf YWRkciwgbmF0X2Jsb2NrKTsKPiArICBpZiAoZXJyKQo+ICsgICAgewo+ICsgICAgICBncnViX2Zy ZWUgKG5hdF9ibG9jayk7Cj4gKyAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsKPiArICBibGth ZGRyID0gZ3J1Yl9sZV90b19jcHUzMiAobmF0X2Jsb2NrLT5uZVtlbnRyeV9vZmZdLmJsb2NrX2Fk ZHIpOwo+ICsKPiArICBncnViX2ZyZWUgKG5hdF9ibG9jayk7Cj4gKwo+ICsgIHJldHVybiBibGth ZGRyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2dydWJfZ2V0X25vZGVfcGF0aCAoc3RydWN0 IGdydWJfZjJmc19pbm9kZSAqaW5vZGUsIGdydWJfdWludDMyX3QgYmxvY2ssCj4gKwlncnViX3Vp bnQzMl90IG9mZnNldFs0XSwgZ3J1Yl91aW50MzJfdCBub2Zmc2V0WzRdKQo+ICt7Cj4gKyAgZ3J1 Yl91aW50MzJfdCBkaXJlY3RfYmxrcyA9IEFERFJTX1BFUl9CTE9DSzsKPiArICBncnViX3VpbnQz Ml90IGRwdHJzX3Blcl9ibGsgPSBOSURTX1BFUl9CTE9DSzsKPiArICBncnViX3VpbnQzMl90IGlu ZGlyZWN0X2Jsa3MgPSBBRERSU19QRVJfQkxPQ0sgKiBOSURTX1BFUl9CTE9DSzsKPiArICBncnVi X3VpbnQzMl90IGRpbmRpcmVjdF9ibGtzID0gaW5kaXJlY3RfYmxrcyAqIE5JRFNfUEVSX0JMT0NL Owo+ICsgIGdydWJfdWludDMyX3QgZGlyZWN0X2luZGV4ID0gREVGX0FERFJTX1BFUl9JTk9ERTsK PiArICBpbnQgbiA9IDA7Cj4gKyAgaW50IGxldmVsID0gMDsKPiArCj4gKyAgaWYgKGlub2RlLT5p X2lubGluZSAmIEYyRlNfSU5MSU5FX1hBVFRSKQo+ICsgICAgZGlyZWN0X2luZGV4IC09IEYyRlNf SU5MSU5FX1hBVFRSX0FERFJTOwo+ICsKPiArICBub2Zmc2V0WzBdID0gMDsKPiArCj4gKyAgaWYg KGJsb2NrIDwgZGlyZWN0X2luZGV4KQo+ICsgICAgewo+ICsgICAgICBvZmZzZXRbbl0gPSBibG9j azsKPiArICAgICAgZ290byBnb3Q7Cj4gKyAgICB9Cj4gKwo+ICsgIGJsb2NrIC09IGRpcmVjdF9p bmRleDsKPiArICBpZiAoYmxvY2sgPCBkaXJlY3RfYmxrcykKPiArICAgIHsKPiArICAgICAgb2Zm c2V0W24rK10gPSBOT0RFX0RJUjFfQkxPQ0s7Cj4gKyAgICAgIG5vZmZzZXRbbl0gPSAxOwo+ICsg ICAgICBvZmZzZXRbbl0gPSBibG9jazsKPiArICAgICAgbGV2ZWwgPSAxOwo+ICsgICAgICBnb3Rv IGdvdDsKPiArICAgIH0KPiArCj4gKyAgYmxvY2sgLT0gZGlyZWN0X2Jsa3M7Cj4gKyAgaWYgKGJs b2NrIDwgZGlyZWN0X2Jsa3MpCj4gKyAgICB7Cj4gKyAgICAgIG9mZnNldFtuKytdID0gTk9ERV9E SVIyX0JMT0NLOwo+ICsgICAgICBub2Zmc2V0W25dID0gMjsKPiArICAgICAgb2Zmc2V0W25dID0g YmxvY2s7Cj4gKyAgICAgIGxldmVsID0gMTsKPiArICAgICAgZ290byBnb3Q7Cj4gKyAgICB9Cj4g Kwo+ICsgIGJsb2NrIC09IGRpcmVjdF9ibGtzOwo+ICsgIGlmIChibG9jayA8IGluZGlyZWN0X2Js a3MpCj4gKyAgICB7Cj4gKyAgICAgIG9mZnNldFtuKytdID0gTk9ERV9JTkQxX0JMT0NLOwo+ICsg ICAgICBub2Zmc2V0W25dID0gMzsKPiArICAgICAgb2Zmc2V0W24rK10gPSBibG9jayAvIGRpcmVj dF9ibGtzOwo+ICsgICAgICBub2Zmc2V0W25dID0gNCArIG9mZnNldFtuIC0gMV07Cj4gKyAgICAg IG9mZnNldFtuXSA9IGJsb2NrICUgZGlyZWN0X2Jsa3M7Cj4gKyAgICAgIGxldmVsID0gMjsKPiAr ICAgICAgZ290byBnb3Q7Cj4gKyAgICB9Cj4gKwo+ICsgIGJsb2NrIC09IGluZGlyZWN0X2Jsa3M7 Cj4gKyAgaWYgKGJsb2NrIDwgaW5kaXJlY3RfYmxrcykKPiArICAgIHsKPiArICAgICAgb2Zmc2V0 W24rK10gPSBOT0RFX0lORDJfQkxPQ0s7Cj4gKyAgICAgIG5vZmZzZXRbbl0gPSA0ICsgZHB0cnNf cGVyX2JsazsKPiArICAgICAgb2Zmc2V0W24rK10gPSBibG9jayAvIGRpcmVjdF9ibGtzOwo+ICsg ICAgICBub2Zmc2V0W25dID0gNSArIGRwdHJzX3Blcl9ibGsgKyBvZmZzZXRbbiAtIDFdOwo+ICsg ICAgICBvZmZzZXRbbl0gPSBibG9jayAlIGRpcmVjdF9ibGtzOwo+ICsgICAgICBsZXZlbCA9IDI7 Cj4gKyAgICAgIGdvdG8gZ290Owo+ICsgICAgfQo+ICsKPiArICBibG9jayAtPSBpbmRpcmVjdF9i bGtzOwo+ICsgIGlmIChibG9jayA8IGRpbmRpcmVjdF9ibGtzKQo+ICsgICAgewo+ICsgICAgICBv ZmZzZXRbbisrXSA9IE5PREVfRElORF9CTE9DSzsKPiArICAgICAgbm9mZnNldFtuXSA9IDUgKyAo ZHB0cnNfcGVyX2JsayAqIDIpOwo+ICsgICAgICBvZmZzZXRbbisrXSA9IGJsb2NrIC8gaW5kaXJl Y3RfYmxrczsKPiArICAgICAgbm9mZnNldFtuXSA9IDYgKyAoZHB0cnNfcGVyX2JsayAqIDIpICsK PiArICAgICAgb2Zmc2V0W24gLSAxXSAqIChkcHRyc19wZXJfYmxrICsgMSk7Cj4gKyAgICAgIG9m ZnNldFtuKytdID0gKGJsb2NrIC8gZGlyZWN0X2Jsa3MpICUgZHB0cnNfcGVyX2JsazsKPiArICAg ICAgbm9mZnNldFtuXSA9IDcgKyAoZHB0cnNfcGVyX2JsayAqIDIpICsKPiArCQlvZmZzZXRbbiAt IDJdICogKGRwdHJzX3Blcl9ibGsgKyAxKSArIG9mZnNldFtuIC0gMV07Cj4gKyAgICAgIG9mZnNl dFtuXSA9IGJsb2NrICUgZGlyZWN0X2Jsa3M7Cj4gKyAgICAgIGxldmVsID0gMzsKPiArICAgICAg Z290byBnb3Q7Cj4gKyAgICB9Cj4gK2dvdDoKPiArICByZXR1cm4gbGV2ZWw7Cj4gK30KPiArCj4g K3N0YXRpYyBncnViX2Vycl90Cj4gK2dydWJfZjJmc19yZWFkX25vZGUgKHN0cnVjdCBncnViX2Yy ZnNfZGF0YSAqZGF0YSwKPiArCWdydWJfdWludDMyX3QgbmlkLCBzdHJ1Y3QgZ3J1Yl9mMmZzX25v ZGUgKm5wKQo+ICt7Cj4gKyAgZ3J1Yl91aW50MzJfdCBibGthZGRyOwo+ICsKPiArICBibGthZGRy ID0gZ2V0X25vZGVfYmxrYWRkciAoZGF0YSwgbmlkKTsKPiArICBpZiAoIWJsa2FkZHIpCj4gKyAg ICByZXR1cm4gZ3J1Yl9lcnJubzsKPiArCj4gKyAgcmV0dXJuIGdydWJfZjJmc19ibG9ja19yZWFk IChkYXRhLCBibGthZGRyLCBucCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZ3J1Yl9mMmZz X2RhdGEgKgo+ICtncnViX2YyZnNfbW91bnQgKGdydWJfZGlza190IGRpc2spCj4gK3sKPiArICBz dHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGE7Cj4gKyAgZ3J1Yl9lcnJfdCBlcnI7Cj4gKwo+ICsg IGRhdGEgPSBncnViX21hbGxvYyAoc2l6ZW9mICgqZGF0YSkpOwo+ICsgIGlmICghZGF0YSkKPiAr ICAgIHJldHVybiBOVUxMOwo+ICsKPiArICBkYXRhLT5kaXNrID0gZGlzazsKPiArCj4gKyAgaWYg KGdydWJfZjJmc19yZWFkX3NiIChkYXRhLCBGMkZTX1NVUEVSX09GRlNFVDApKQo+ICsgICAgewo+ ICsgICAgICBpZiAoZ3J1Yl9mMmZzX3JlYWRfc2IgKGRhdGEsIEYyRlNfU1VQRVJfT0ZGU0VUMSkp Cj4gKyAgICAgICAgewo+ICsgICAgICAgICAgaWYgKGdydWJfZXJybm8gPT0gR1JVQl9FUlJfTk9O RSkKPiArICAgICAgICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLAo+ICsJCQkibm90 IGEgRjJGUyBmaWxlc3lzdGVtIChubyBzdXBlcmJsb2NrKSIpOwo+ICsgICAgICAgICAgZ290byBm YWlsOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgZGF0YS0+cm9vdF9pbm8gPSBncnVi X2xlX3RvX2NwdTMyIChkYXRhLT5zYmxvY2sucm9vdF9pbm8pOwo+ICsgIGRhdGEtPmNwX2Jsa2Fk ZHIgPSBncnViX2xlX3RvX2NwdTMyIChkYXRhLT5zYmxvY2suY3BfYmxrYWRkcik7Cj4gKyAgZGF0 YS0+bmF0X2Jsa2FkZHIgPSBncnViX2xlX3RvX2NwdTMyIChkYXRhLT5zYmxvY2submF0X2Jsa2Fk ZHIpOwo+ICsgIGRhdGEtPmJsb2Nrc19wZXJfc2VnID0gMSA8PAo+ICsJZ3J1Yl9sZV90b19jcHUz MiAoZGF0YS0+c2Jsb2NrLmxvZ19ibG9ja3NfcGVyX3NlZyk7Cj4gKwo+ICsgIGVyciA9IGdydWJf ZjJmc19yZWFkX2NwIChkYXRhKTsKPiArICBpZiAoZXJyKQo+ICsgICAgZ290byBmYWlsOwo+ICsK PiArICBkYXRhLT5uYXRfYml0bWFwID0gX19uYXRfYml0bWFwX3B0ciAoZGF0YSk7Cj4gKwo+ICsg IGVyciA9IGdldF9uYXRfam91cm5hbCAoZGF0YSk7Cj4gKyAgaWYgKGVycikKPiArICAgIGdvdG8g ZmFpbDsKPiArCj4gKyAgZGF0YS0+ZGlyb3Blbi5kYXRhID0gZGF0YTsKPiArICBkYXRhLT5kaXJv cGVuLmlubyA9IGRhdGEtPnJvb3RfaW5vOwo+ICsgIGRhdGEtPmRpcm9wZW4uaW5vZGVfcmVhZCA9 IDE7Cj4gKyAgZGF0YS0+aW5vZGUgPSAmZGF0YS0+ZGlyb3Blbi5pbm9kZTsKPiArCj4gKyAgZXJy ID0gZ3J1Yl9mMmZzX3JlYWRfbm9kZSAoZGF0YSwgZGF0YS0+cm9vdF9pbm8sIGRhdGEtPmlub2Rl KTsKPiArICBpZiAoZXJyKQo+ICsgICAgZ290byBmYWlsOwo+ICsKPiArICByZXR1cm4gZGF0YTsK PiArCj4gK2ZhaWw6Cj4gKyAgZ3J1Yl9mcmVlIChkYXRhKTsKPiArICByZXR1cm4gTlVMTDsKPiAr fQo+ICsKPiArLyogZ3VhcmFudGVlIGlubGluZV9kYXRhIHdhcyBoYW5kbGVkIGJ5IGNhbGxlciAq Lwo+ICtzdGF0aWMgZ3J1Yl9kaXNrX2FkZHJfdAo+ICtncnViX2YyZnNfZ2V0X2Jsb2NrIChncnVi X2ZzaGVscF9ub2RlX3Qgbm9kZSwgZ3J1Yl9kaXNrX2FkZHJfdCBibG9ja19vZnMpCj4gK3sKPiAr ICBzdHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGEgPSBub2RlLT5kYXRhOwo+ICsgIHN0cnVjdCBn cnViX2YyZnNfaW5vZGUgKmlub2RlID0gJm5vZGUtPmlub2RlLmk7Cj4gKyAgZ3J1Yl91aW50MzJf dCBvZmZzZXRbNF0sIG5vZmZzZXRbNF0sIG5pZHNbNF07Cj4gKyAgc3RydWN0IGdydWJfZjJmc19u b2RlICpub2RlX2Jsb2NrOwo+ICsgIGdydWJfdWludDMyX3QgYmxvY2tfYWRkciA9IC0xOwo+ICsg IGludCBsZXZlbCwgaTsKPiArCj4gKyAgbGV2ZWwgPSBncnViX2dldF9ub2RlX3BhdGggKGlub2Rl LCBibG9ja19vZnMsIG9mZnNldCwgbm9mZnNldCk7Cj4gKyAgaWYgKGxldmVsID09IDApCj4gKyAg ICByZXR1cm4gZ3J1Yl9sZV90b19jcHUzMiAoaW5vZGUtPmlfYWRkcltvZmZzZXRbMF1dKTsKPiAr Cj4gKyAgbm9kZV9ibG9jayA9IGdydWJfbWFsbG9jIChGMkZTX0JMS1NJWkUpOwo+ICsgIGlmICgh bm9kZV9ibG9jaykKPiArICAgIHJldHVybiAtMTsKPiArCj4gKyAgbmlkc1sxXSA9IF9fZ2V0X25v ZGVfaWQgKCZub2RlLT5pbm9kZSwgb2Zmc2V0WzBdLCAxKTsKPiArCj4gKyAgLyogZ2V0IGluZGly ZWN0IG9yIGRpcmVjdCBub2RlcyAqLwo+ICsgIGZvciAoaSA9IDE7IGkgPD0gbGV2ZWw7IGkrKykK PiArICAgIHsKPiArICAgICAgZ3J1Yl9mMmZzX3JlYWRfbm9kZSAoZGF0YSwgbmlkc1tpXSwgbm9k ZV9ibG9jayk7Cj4gKyAgICAgIGlmIChncnViX2Vycm5vKQo+ICsgICAgICAgIGdvdG8gZmFpbDsK PiArCj4gKyAgICAgIGlmIChpIDwgbGV2ZWwpCj4gKyAgICAgICAgbmlkc1tpICsgMV0gPSBfX2dl dF9ub2RlX2lkIChub2RlX2Jsb2NrLCBvZmZzZXRbaV0sIDApOwo+ICsgICAgfQo+ICsKPiArICBi bG9ja19hZGRyID0gZ3J1Yl9sZV90b19jcHUzMiAobm9kZV9ibG9jay0+ZG4uYWRkcltvZmZzZXRb bGV2ZWxdXSk7Cj4gK2ZhaWw6Cj4gKyAgZ3J1Yl9mcmVlIChub2RlX2Jsb2NrKTsKPiArICByZXR1 cm4gYmxvY2tfYWRkcjsKPiArfQo+ICsKPiArc3RhdGljIGdydWJfc3NpemVfdAo+ICtncnViX2Yy ZnNfcmVhZF9maWxlIChncnViX2ZzaGVscF9ub2RlX3Qgbm9kZSwKPiArCQlncnViX2Rpc2tfcmVh ZF9ob29rX3QgcmVhZF9ob29rLCB2b2lkICpyZWFkX2hvb2tfZGF0YSwKPiArCQlncnViX29mZl90 IHBvcywgZ3J1Yl9zaXplX3QgbGVuLCBjaGFyICpidWYpCj4gK3sKPiArICBzdHJ1Y3QgZ3J1Yl9m MmZzX2lub2RlICppbm9kZSA9ICZub2RlLT5pbm9kZS5pOwo+ICsgIGdydWJfb2ZmX3QgZmlsZXNp emUgPSBncnViX2YyZnNfZmlsZV9zaXplIChpbm9kZSk7Cj4gKyAgY2hhciAqaW5saW5lX2FkZHIg PSBfX2lubGluZV9hZGRyIChpbm9kZSk7Cj4gKwo+ICsgIGlmIChpbm9kZS0+aV9pbmxpbmUgJiBG MkZTX0lOTElORV9EQVRBKQo+ICsgICAgewo+ICsgICAgICBpZiAoZmlsZXNpemUgPiBNQVhfSU5M SU5FX0RBVEEpCj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICBpZiAobGVuID4gZmlsZXNp emUgLSBwb3MpCj4gKyAgICAgICAgbGVuID0gZmlsZXNpemUgLSBwb3M7Cj4gKwo+ICsgICAgICBn cnViX21lbWNweSAoYnVmICsgcG9zLCBpbmxpbmVfYWRkciArIHBvcywgbGVuKTsKPiArICAgICAg cmV0dXJuIGxlbjsKPiArICAgIH0KPiArCj4gKyAgcmV0dXJuIGdydWJfZnNoZWxwX3JlYWRfZmls ZSAobm9kZS0+ZGF0YS0+ZGlzaywgbm9kZSwKPiArCQkJcmVhZF9ob29rLCByZWFkX2hvb2tfZGF0 YSwKPiArCQkJcG9zLCBsZW4sIGJ1ZiwgZ3J1Yl9mMmZzX2dldF9ibG9jaywKPiArCQkJZmlsZXNp emUsCj4gKwkJCUYyRlNfQkxLX1NFQ19CSVRTLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIGNoYXIg Kgo+ICtncnViX2YyZnNfcmVhZF9zeW1saW5rIChncnViX2ZzaGVscF9ub2RlX3Qgbm9kZSkKPiAr ewo+ICsgIGNoYXIgKnN5bWxpbms7Cj4gKyAgc3RydWN0IGdydWJfZnNoZWxwX25vZGUgKmRpcm8g PSBub2RlOwo+ICsgIGdydWJfdWludDY0X3QgZmlsZXNpemU7Cj4gKwo+ICsgIGlmICghZGlyby0+ aW5vZGVfcmVhZCkKPiArICAgIHsKPiArICAgICAgZ3J1Yl9mMmZzX3JlYWRfbm9kZSAoZGlyby0+ ZGF0YSwgZGlyby0+aW5vLCAmZGlyby0+aW5vZGUpOwo+ICsgICAgICBpZiAoZ3J1Yl9lcnJubykK PiArICAgICAgICByZXR1cm4gMDsKPiArICAgIH0KPiArCj4gKyAgZmlsZXNpemUgPSBncnViX2Yy ZnNfZmlsZV9zaXplKCZkaXJvLT5pbm9kZS5pKTsKPiArCj4gKyAgc3ltbGluayA9IGdydWJfbWFs bG9jIChmaWxlc2l6ZSArIDEpOwo+ICsgIGlmICghc3ltbGluaykKPiArICAgIHJldHVybiAwOwo+ ICsKPiArICBncnViX2YyZnNfcmVhZF9maWxlIChkaXJvLCAwLCAwLCAwLCBmaWxlc2l6ZSwgc3lt bGluayk7Cj4gKyAgaWYgKGdydWJfZXJybm8pCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZnJlZSAo c3ltbGluayk7Cj4gKyAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsKPiArICBzeW1saW5rW2Zp bGVzaXplXSA9ICdcMCc7Cj4gKyAgcmV0dXJuIHN5bWxpbms7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQKPiArZ3J1Yl9mMmZzX2NoZWNrX2RlbnRyaWVzIChzdHJ1Y3QgZ3J1Yl9mMmZzX2Rpcl9pdGVy X2N0eCAqY3R4KQo+ICt7Cj4gKyAgc3RydWN0IGdydWJfZnNoZWxwX25vZGUgKmZkaXJvOwo+ICsg IGludCBpOwo+ICsKPiArICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5tYXg7KQo+ICsgICAgewo+ICsg ICAgICBjaGFyICpmaWxlbmFtZTsKPiArICAgICAgZW51bSBncnViX2ZzaGVscF9maWxldHlwZSB0 eXBlID0gR1JVQl9GU0hFTFBfVU5LTk9XTjsKPiArICAgICAgZW51bSBGSUxFX1RZUEUgZnR5cGU7 Cj4gKyAgICAgIGludCBuYW1lX2xlbjsKPiArICAgICAgaW50IHJldDsKPiArCj4gKyAgICAgIGlm IChncnViX2YyZnNfdGVzdF9iaXRfbGUgKGksIGN0eC0+Yml0bWFwKSA9PSAwKQo+ICsgICAgICAg IHsKPiArICAgICAgICAgIGkrKzsKPiArICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIH0K PiArCj4gKyAgICAgIGZ0eXBlID0gY3R4LT5kZW50cnlbaV0uZmlsZV90eXBlOwo+ICsgICAgICBu YW1lX2xlbiA9IGdydWJfbGVfdG9fY3B1MTYgKGN0eC0+ZGVudHJ5W2ldLm5hbWVfbGVuKTsKPiAr ICAgICAgZmlsZW5hbWUgPSBncnViX21hbGxvYyAobmFtZV9sZW4gKyAxKTsKPiArICAgICAgaWYg KCFmaWxlbmFtZSkKPiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICAgIGdydWJfbWVtY3B5 IChmaWxlbmFtZSwgY3R4LT5maWxlbmFtZVtpXSwgbmFtZV9sZW4pOwo+ICsgICAgICBmaWxlbmFt ZVtuYW1lX2xlbl0gPSAwOwo+ICsKPiArICAgICAgZmRpcm8gPSBncnViX21hbGxvYyAoc2l6ZW9m IChzdHJ1Y3QgZ3J1Yl9mc2hlbHBfbm9kZSkpOwo+ICsgICAgICBpZiAoIWZkaXJvKQo+ICsgICAg ICAgIHsKPiArICAgICAgICAgIGdydWJfZnJlZShmaWxlbmFtZSk7Cj4gKyAgICAgICAgICByZXR1 cm4gMDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICBpZiAoZnR5cGUgPT0gRjJGU19GVF9ESVIp Cj4gKyAgICAgICAgdHlwZSA9IEdSVUJfRlNIRUxQX0RJUjsKPiArICAgICAgZWxzZSBpZiAoZnR5 cGUgPT0gRjJGU19GVF9TWU1MSU5LKQo+ICsgICAgICAgIHR5cGUgPSBHUlVCX0ZTSEVMUF9TWU1M SU5LOwo+ICsgICAgICBlbHNlIGlmIChmdHlwZSA9PSBGMkZTX0ZUX1JFR19GSUxFKQo+ICsgICAg ICAgIHR5cGUgPSBHUlVCX0ZTSEVMUF9SRUc7Cj4gKwo+ICsgICAgICBmZGlyby0+ZGF0YSA9IGN0 eC0+ZGF0YTsKPiArICAgICAgZmRpcm8tPmlubyA9IGdydWJfbGVfdG9fY3B1MzIgKGN0eC0+ZGVu dHJ5W2ldLmlubyk7Cj4gKyAgICAgIGZkaXJvLT5pbm9kZV9yZWFkID0gMDsKPiArCj4gKyAgICAg IHJldCA9IGN0eC0+aG9vayAoZmlsZW5hbWUsIHR5cGUsIGZkaXJvLCBjdHgtPmhvb2tfZGF0YSk7 Cj4gKyAgICAgIGdydWJfZnJlZShmaWxlbmFtZSk7Cj4gKyAgICAgIGlmIChyZXQpCj4gKyAgICAg ICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgICBpICs9IChuYW1lX2xlbiArIEYyRlNfU0xPVF9MRU4g LSAxKSAvIEYyRlNfU0xPVF9MRU47Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludAo+ICtncnViX2YyZnNfaXRlcmF0ZV9pbmxpbmVfZGlyIChzdHJ1Y3QgZ3J1 Yl9mMmZzX2lub2RlICpkaXIsCj4gKwlzdHJ1Y3QgZ3J1Yl9mMmZzX2Rpcl9pdGVyX2N0eCAqY3R4 KQo+ICt7Cj4gKyAgc3RydWN0IGdydWJfZjJmc19pbmxpbmVfZGVudHJ5ICpkZV9ibGs7Cj4gKwo+ ICsgIGRlX2JsayA9IChzdHJ1Y3QgZ3J1Yl9mMmZzX2lubGluZV9kZW50cnkgKikgX19pbmxpbmVf YWRkciAoZGlyKTsKPiArCj4gKyAgY3R4LT5iaXRtYXAgPSBkZV9ibGstPmRlbnRyeV9iaXRtYXA7 Cj4gKyAgY3R4LT5kZW50cnkgPSBkZV9ibGstPmRlbnRyeTsKPiArICBjdHgtPmZpbGVuYW1lID0g ZGVfYmxrLT5maWxlbmFtZTsKPiArICBjdHgtPm1heCA9IE5SX0lOTElORV9ERU5UUlk7Cj4gKwo+ ICsgIHJldHVybiBncnViX2YyZnNfY2hlY2tfZGVudHJpZXMgKGN0eCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQKPiArZ3J1Yl9mMmZzX2l0ZXJhdGVfZGlyIChncnViX2ZzaGVscF9ub2RlX3QgZGly LAo+ICsJZ3J1Yl9mc2hlbHBfaXRlcmF0ZV9kaXJfaG9va190IGhvb2ssIHZvaWQgKmhvb2tfZGF0 YSkKPiArewo+ICsgIHN0cnVjdCBncnViX2ZzaGVscF9ub2RlICpkaXJvID0gKHN0cnVjdCBncnVi X2ZzaGVscF9ub2RlICopIGRpcjsKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX2lub2RlICppbm9kZTsK PiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX2Rpcl9pdGVyX2N0eCBjdHggPSB7Cj4gKyAgICAuZGF0YSA9 IGRpcm8tPmRhdGEsCj4gKyAgICAuaG9vayA9IGhvb2ssCj4gKyAgICAuaG9va19kYXRhID0gaG9v a19kYXRhCj4gKyAgfTsKPiArICBncnViX29mZl90IGZwb3MgPSAwOwo+ICsKPiArICBpZiAoIWRp cm8tPmlub2RlX3JlYWQpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZjJmc19yZWFkX25vZGUgKGRp cm8tPmRhdGEsIGRpcm8tPmlubywgJmRpcm8tPmlub2RlKTsKPiArICAgICAgaWYgKGdydWJfZXJy bm8pCj4gKwlyZXR1cm4gMDsKPiArICAgIH0KPiArCj4gKyAgaW5vZGUgPSAmZGlyby0+aW5vZGUu aTsKPiArCj4gKyAgaWYgKGlub2RlLT5pX2lubGluZSAmIEYyRlNfSU5MSU5FX0RFTlRSWSkKPiAr ICAgIHJldHVybiBncnViX2YyZnNfaXRlcmF0ZV9pbmxpbmVfZGlyIChpbm9kZSwgJmN0eCk7Cj4g Kwo+ICsgIHdoaWxlIChmcG9zIDwgZ3J1Yl9mMmZzX2ZpbGVfc2l6ZSAoaW5vZGUpKQo+ICsgICAg ewo+ICsgICAgICBzdHJ1Y3QgZ3J1Yl9mMmZzX2RlbnRyeV9ibG9jayAqZGVfYmxrOwo+ICsgICAg ICBjaGFyICpidWY7Cj4gKyAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICBidWYgPSBncnViX3ph bGxvYyAoRjJGU19CTEtTSVpFKTsKPiArICAgICAgaWYgKCFidWYpCj4gKyAgICAgICAgcmV0dXJu IDA7Cj4gKwo+ICsgICAgICBncnViX2YyZnNfcmVhZF9maWxlIChkaXJvLCAwLCAwLCBmcG9zLCBG MkZTX0JMS1NJWkUsIGJ1Zik7Cj4gKyAgICAgIGlmIChncnViX2Vycm5vKQo+ICsgICAgICAgIHsK PiArICAgICAgICAgIGdydWJfZnJlZSAoYnVmKTsKPiArICAgICAgICAgIHJldHVybiAwOwo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgIGRlX2JsayA9IChzdHJ1Y3QgZ3J1Yl9mMmZzX2RlbnRyeV9i bG9jayAqKSBidWY7Cj4gKwo+ICsgICAgICBjdHguYml0bWFwID0gZGVfYmxrLT5kZW50cnlfYml0 bWFwOwo+ICsgICAgICBjdHguZGVudHJ5ID0gZGVfYmxrLT5kZW50cnk7Cj4gKyAgICAgIGN0eC5m aWxlbmFtZSA9IGRlX2Jsay0+ZmlsZW5hbWU7Cj4gKyAgICAgIGN0eC5tYXggPSBOUl9ERU5UUllf SU5fQkxPQ0s7Cj4gKwo+ICsgICAgICByZXQgPSBncnViX2YyZnNfY2hlY2tfZGVudHJpZXMgKCZj dHgpOwo+ICsgICAgICBncnViX2ZyZWUgKGJ1Zik7Cj4gKyAgICAgIGlmIChyZXQpCj4gKyAgICAg ICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgICBmcG9zICs9IEYyRlNfQkxLU0laRTsKPiArICAgIH0K PiArICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtncnViX2YyZnNfZGlyX2l0 ZXIgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBlbnVtIGdydWJfZnNoZWxwX2ZpbGV0eXBlIGZpbGV0 eXBlLAo+ICsJICAgICAgZ3J1Yl9mc2hlbHBfbm9kZV90IG5vZGUsIHZvaWQgKmRhdGEpCj4gK3sK PiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX2Rpcl9jdHggKmN0eCA9IGRhdGE7Cj4gKyAgc3RydWN0IGdy dWJfZGlyaG9va19pbmZvIGluZm87Cj4gKwo+ICsgIGdydWJfbWVtc2V0ICgmaW5mbywgMCwgc2l6 ZW9mIChpbmZvKSk7Cj4gKyAgaWYgKCFub2RlLT5pbm9kZV9yZWFkKQo+ICsgICAgewo+ICsgICAg ICBncnViX2YyZnNfcmVhZF9ub2RlIChjdHgtPmRhdGEsIG5vZGUtPmlubywgJm5vZGUtPmlub2Rl KTsKPiArICAgICAgaWYgKCFncnViX2Vycm5vKQo+ICsgICAgICAgIG5vZGUtPmlub2RlX3JlYWQg PSAxOwo+ICsgICAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKPiArICAgIH0KPiArICBp ZiAobm9kZS0+aW5vZGVfcmVhZCkKPiArICAgIHsKPiArICAgICAgaW5mby5tdGltZXNldCA9IDE7 Cj4gKyAgICAgIGluZm8ubXRpbWUgPSBncnViX2xlX3RvX2NwdTY0IChub2RlLT5pbm9kZS5pLmlf bXRpbWUpOwo+ICsgICAgfQo+ICsKPiArICBpbmZvLmRpciA9ICgoZmlsZXR5cGUgJiBHUlVCX0ZT SEVMUF9UWVBFX01BU0spID09IEdSVUJfRlNIRUxQX0RJUik7Cj4gKyAgZ3J1Yl9mcmVlIChub2Rl KTsKPiArICByZXR1cm4gY3R4LT5ob29rIChmaWxlbmFtZSwgJmluZm8sIGN0eC0+aG9va19kYXRh KTsKPiArfQo+ICsKPiArc3RhdGljIGdydWJfZXJyX3QKPiArZ3J1Yl9mMmZzX2RpciAoZ3J1Yl9k ZXZpY2VfdCBkZXZpY2UsIGNvbnN0IGNoYXIgKnBhdGgsCj4gKwlncnViX2ZzX2Rpcl9ob29rX3Qg aG9vaywgdm9pZCAqaG9va19kYXRhKQo+ICt7Cj4gKyAgc3RydWN0IGdydWJfZjJmc19kaXJfY3R4 IGN0eCA9IHsKPiArICAgIC5ob29rID0gaG9vaywKPiArICAgIC5ob29rX2RhdGEgPSBob29rX2Rh dGEKPiArICB9Owo+ICsgIHN0cnVjdCBncnViX2ZzaGVscF9ub2RlICpmZGlybyA9IDA7Cj4gKwo+ ICsgIGdydWJfZGxfcmVmIChteV9tb2QpOwo+ICsKPiArICBjdHguZGF0YSA9IGdydWJfZjJmc19t b3VudCAoZGV2aWNlLT5kaXNrKTsKPiArICBpZiAoIWN0eC5kYXRhKQo+ICsgICAgZ290byBmYWls Owo+ICsKPiArICBncnViX2ZzaGVscF9maW5kX2ZpbGUgKHBhdGgsICZjdHguZGF0YS0+ZGlyb3Bl biwgJmZkaXJvLAo+ICsJCWdydWJfZjJmc19pdGVyYXRlX2RpciwgZ3J1Yl9mMmZzX3JlYWRfc3lt bGluaywKPiArCQlHUlVCX0ZTSEVMUF9ESVIpOwo+ICsgIGlmIChncnViX2Vycm5vKQo+ICsgICAg Z290byBmYWlsOwo+ICsKPiArICBncnViX2YyZnNfaXRlcmF0ZV9kaXIgKGZkaXJvLCBncnViX2Yy ZnNfZGlyX2l0ZXIsICZjdHgpOwo+ICsKPiArZmFpbDoKPiArICBpZiAoZmRpcm8gIT0gJmN0eC5k YXRhLT5kaXJvcGVuKQo+ICsgICAgZ3J1Yl9mcmVlIChmZGlybyk7Cj4gKyBncnViX2ZyZWUgKGN0 eC5kYXRhKTsKPiArIGdydWJfZGxfdW5yZWYgKG15X21vZCk7Cj4gKyByZXR1cm4gZ3J1Yl9lcnJu bzsKPiArfQo+ICsKPiArCj4gKy8qIE9wZW4gYSBmaWxlIG5hbWVkIE5BTUUgYW5kIGluaXRpYWxp emUgRklMRS4gICovCj4gK3N0YXRpYyBncnViX2Vycl90Cj4gK2dydWJfZjJmc19vcGVuIChzdHJ1 Y3QgZ3J1Yl9maWxlICpmaWxlLCBjb25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKyAgc3RydWN0IGdy dWJfZjJmc19kYXRhICpkYXRhID0gTlVMTDsKPiArICBzdHJ1Y3QgZ3J1Yl9mc2hlbHBfbm9kZSAq ZmRpcm8gPSAwOwo+ICsgIHN0cnVjdCBncnViX2YyZnNfaW5vZGUgKmlub2RlOwo+ICsKPiArICBn cnViX2RsX3JlZiAobXlfbW9kKTsKPiArCj4gKyAgZGF0YSA9IGdydWJfZjJmc19tb3VudCAoZmls ZS0+ZGV2aWNlLT5kaXNrKTsKPiArICBpZiAoIWRhdGEpCj4gKyAgICBnb3RvIGZhaWw7Cj4gKwo+ ICsgIGdydWJfZnNoZWxwX2ZpbmRfZmlsZSAobmFtZSwgJmRhdGEtPmRpcm9wZW4sICZmZGlybywK PiArCQkJZ3J1Yl9mMmZzX2l0ZXJhdGVfZGlyLCBncnViX2YyZnNfcmVhZF9zeW1saW5rLAo+ICsJ CQlHUlVCX0ZTSEVMUF9SRUcpOwo+ICsgIGlmIChncnViX2Vycm5vKQo+ICsgICAgZ290byBmYWls Owo+ICsKPiArICBpZiAoIWZkaXJvLT5pbm9kZV9yZWFkKQo+ICsgICAgewo+ICsgICAgICBncnVi X2YyZnNfcmVhZF9ub2RlIChkYXRhLCBmZGlyby0+aW5vLCAmZmRpcm8tPmlub2RlKTsKPiArICAg ICAgaWYgKGdydWJfZXJybm8pCj4gKwlnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICsgIGdydWJf bWVtY3B5IChkYXRhLT5pbm9kZSwgJmZkaXJvLT5pbm9kZSwgc2l6ZW9mICgqZGF0YS0+aW5vZGUp KTsKPiArICBncnViX2ZyZWUgKGZkaXJvKTsKPiArCj4gKyAgaW5vZGUgPSAmKGRhdGEtPmlub2Rl LT5pKTsKPiArICBmaWxlLT5zaXplID0gZ3J1Yl9mMmZzX2ZpbGVfc2l6ZSAoaW5vZGUpOwo+ICsg IGZpbGUtPmRhdGEgPSBkYXRhOwo+ICsgIGZpbGUtPm9mZnNldCA9IDA7Cj4gKwo+ICsgIGlmIChp bm9kZS0+aV9pbmxpbmUgJiBGMkZTX0lOTElORV9EQVRBICYmIGZpbGUtPnNpemUgPiBNQVhfSU5M SU5FX0RBVEEpCj4gKyAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRlMsICJjb3JydXB0ZWQg aW5saW5lX2RhdGE6IG5lZWQgZnNjayIpOwo+ICsgIHJldHVybiAwOwo+ICsKPiArZmFpbDoKPiAr ICBpZiAoZmRpcm8gIT0gJmRhdGEtPmRpcm9wZW4pCj4gKyAgICBncnViX2ZyZWUgKGZkaXJvKTsK PiArICBncnViX2ZyZWUgKGRhdGEpOwo+ICsKPiArICBncnViX2RsX3VucmVmIChteV9tb2QpOwo+ ICsKPiArICByZXR1cm4gZ3J1Yl9lcnJubzsKPiArfQo+ICsKPiArc3RhdGljIGdydWJfc3NpemVf dAo+ICtncnViX2YyZnNfcmVhZCAoZ3J1Yl9maWxlX3QgZmlsZSwgY2hhciAqYnVmLCBncnViX3Np emVfdCBsZW4pCj4gK3sKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGEgPSAoc3RydWN0 IGdydWJfZjJmc19kYXRhICopIGZpbGUtPmRhdGE7Cj4gKwo+ICsgIHJldHVybiBncnViX2YyZnNf cmVhZF9maWxlICgmZGF0YS0+ZGlyb3BlbiwKPiArCQlmaWxlLT5yZWFkX2hvb2ssIGZpbGUtPnJl YWRfaG9va19kYXRhLAo+ICsJCWZpbGUtPm9mZnNldCwgbGVuLCBidWYpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgZ3J1Yl9lcnJfdAo+ICtncnViX2YyZnNfY2xvc2UgKGdydWJfZmlsZV90IGZpbGUpCj4g K3sKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGEgPSAoc3RydWN0IGdydWJfZjJmc19k YXRhICopIGZpbGUtPmRhdGE7Cj4gKwo+ICsgIGdydWJfZnJlZSAoZGF0YSk7Cj4gKwo+ICsgIGdy dWJfZGxfdW5yZWYgKG15X21vZCk7Cj4gKwo+ICsgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgZ3J1Yl91aW50OF90ICoKPiArZ3J1Yl9mMmZzX3V0ZjE2X3RvX3V0Zjgg KGdydWJfdWludDE2X3QgKmluX2J1Zl9sZSkKPiArewo+ICsgIGdydWJfdWludDE2X3QgaW5fYnVm W01BWF9WT0xVTUVfTkFNRV07Cj4gKyAgZ3J1Yl91aW50OF90ICpvdXRfYnVmOwo+ICsgIGludCBs ZW4gPSAwOwo+ICsKPiArICBvdXRfYnVmID0gZ3J1Yl9tYWxsb2MgKE1BWF9WT0xVTUVfTkFNRSAq IEdSVUJfTUFYX1VURjhfUEVSX1VURjE2ICsgMSk7Cj4gKyAgaWYgKCFvdXRfYnVmKQo+ICsgICAg cmV0dXJuIE5VTEw7Cj4gKwo+ICsgIHdoaWxlICgqaW5fYnVmX2xlICE9IDAgJiYgbGVuIDwgTUFY X1ZPTFVNRV9OQU1FKSB7Cj4gKyAgICBpbl9idWZbbGVuXSA9IGdydWJfbGVfdG9fY3B1MTYgKGlu X2J1Zl9sZVtsZW5dKTsKPiArICAgIGxlbisrOwo+ICsgIH0KPiArCj4gKyAgKmdydWJfdXRmMTZf dG9fdXRmOCAob3V0X2J1ZiwgaW5fYnVmLCBsZW4pID0gJ1wwJzsKPiArICByZXR1cm4gb3V0X2J1 ZjsKPiArfQo+ICsKPiArc3RhdGljIGdydWJfZXJyX3QKPiArZ3J1Yl9mMmZzX2xhYmVsIChncnVi X2RldmljZV90IGRldmljZSwgY2hhciAqKmxhYmVsKQo+ICt7Cj4gKyAgc3RydWN0IGdydWJfZjJm c19kYXRhICpkYXRhOwo+ICsgIGdydWJfZGlza190IGRpc2sgPSBkZXZpY2UtPmRpc2s7Cj4gKwo+ ICsgIGdydWJfZGxfcmVmIChteV9tb2QpOwo+ICsKPiArICBkYXRhID0gZ3J1Yl9mMmZzX21vdW50 IChkaXNrKTsKPiArICBpZiAoZGF0YSkKPiArICAgICpsYWJlbCA9IChjaGFyICopIGdydWJfZjJm c191dGYxNl90b191dGY4IChkYXRhLT5zYmxvY2sudm9sdW1lX25hbWUpOwo+ICsgIGVsc2UKPiAr ICAgICpsYWJlbCA9IE5VTEw7Cj4gKwo+ICsgIGdydWJfZnJlZSAoZGF0YSk7Cj4gKyAgZ3J1Yl9k bF91bnJlZiAobXlfbW9kKTsKPiArICByZXR1cm4gZ3J1Yl9lcnJubzsKPiArfQo+ICsKPiArc3Rh dGljIGdydWJfZXJyX3QKPiArZ3J1Yl9mMmZzX3V1aWQgKGdydWJfZGV2aWNlX3QgZGV2aWNlLCBj aGFyICoqdXVpZCkKPiArewo+ICsgIHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YTsKPiArICBn cnViX2Rpc2tfdCBkaXNrID0gZGV2aWNlLT5kaXNrOwo+ICsKPiArICBncnViX2RsX3JlZiAobXlf bW9kKTsKPiArCj4gKyAgZGF0YSA9IGdydWJfZjJmc19tb3VudCAoZGlzayk7Cj4gKyAgaWYgKGRh dGEpCj4gKyAgICB7Cj4gKyAgICAgICp1dWlkID0KPiArCWdydWJfeGFzcHJpbnRmCj4gKwkoIiUw MnglMDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMnglMDJ4JTAy eCUwMnglMDJ4IiwKPiArCQlkYXRhLT5zYmxvY2sudXVpZFswXSwgZGF0YS0+c2Jsb2NrLnV1aWRb MV0sCj4gKwkJZGF0YS0+c2Jsb2NrLnV1aWRbMl0sIGRhdGEtPnNibG9jay51dWlkWzNdLAo+ICsJ CWRhdGEtPnNibG9jay51dWlkWzRdLCBkYXRhLT5zYmxvY2sudXVpZFs1XSwKPiArCQlkYXRhLT5z YmxvY2sudXVpZFs2XSwgZGF0YS0+c2Jsb2NrLnV1aWRbN10sCj4gKwkJZGF0YS0+c2Jsb2NrLnV1 aWRbOF0sIGRhdGEtPnNibG9jay51dWlkWzldLAo+ICsJCWRhdGEtPnNibG9jay51dWlkWzEwXSwg ZGF0YS0+c2Jsb2NrLnV1aWRbMTFdLAo+ICsJCWRhdGEtPnNibG9jay51dWlkWzEyXSwgZGF0YS0+ c2Jsb2NrLnV1aWRbMTNdLAo+ICsJCWRhdGEtPnNibG9jay51dWlkWzE0XSwgZGF0YS0+c2Jsb2Nr LnV1aWRbMTVdKTsKPiArICAgIH0KPiArICBlbHNlCj4gKyAgICAqdXVpZCA9IE5VTEw7Cj4gKwo+ ICsgIGdydWJfZnJlZSAoZGF0YSk7Cj4gKyAgZ3J1Yl9kbF91bnJlZiAobXlfbW9kKTsKPiArICBy ZXR1cm4gZ3J1Yl9lcnJubzsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBncnViX2ZzIGdydWJf ZjJmc19mcyA9IHsKPiArICAubmFtZSA9ICJmMmZzIiwKPiArICAuZGlyID0gZ3J1Yl9mMmZzX2Rp ciwKPiArICAub3BlbiA9IGdydWJfZjJmc19vcGVuLAo+ICsgIC5yZWFkID0gZ3J1Yl9mMmZzX3Jl YWQsCj4gKyAgLmNsb3NlID0gZ3J1Yl9mMmZzX2Nsb3NlLAo+ICsgIC5sYWJlbCA9IGdydWJfZjJm c19sYWJlbCwKPiArICAudXVpZCA9IGdydWJfZjJmc191dWlkLAo+ICsjaWZkZWYgR1JVQl9VVElM Cj4gKyAgLnJlc2VydmVkX2ZpcnN0X3NlY3RvciA9IDEsCj4gKyAgLmJsb2NrbGlzdF9pbnN0YWxs ID0gMCwKPiArI2VuZGlmCj4gKyAgLm5leHQgPSAwCj4gK307Cj4gKwo+ICtHUlVCX01PRF9JTklU IChmMmZzKQo+ICt7Cj4gKyAgZ3J1Yl9mc19yZWdpc3RlciAoJmdydWJfZjJmc19mcyk7Cj4gKyAg bXlfbW9kID0gbW9kOwo+ICt9Cj4gKwo+ICtHUlVCX01PRF9GSU5JIChmMmZzKQo+ICt7Cj4gKyAg Z3J1Yl9mc191bnJlZ2lzdGVyICgmZ3J1Yl9mMmZzX2ZzKTsKPiArfQo+IGRpZmYgLS1naXQgYS9w by9leGNsdWRlLnBvdCBiL3BvL2V4Y2x1ZGUucG90Cj4gaW5kZXggMGE5YjIxNS4uODE2MDg5YyAx MDA2NDQKPiAtLS0gYS9wby9leGNsdWRlLnBvdAo+ICsrKyBiL3BvL2V4Y2x1ZGUucG90Cj4gQEAg LTEyMTQsNiArMTIxNCw3IEBAIG1zZ3N0ciAiIgo+ICAKPiAgIzogZ3J1Yi1jb3JlL2NvbW1hbmRz L3hudV91dWlkLmM6NzUgZ3J1Yi1jb3JlL2ZzL2pmcy5jOjkyNAo+ICAjOiBncnViLWNvcmUvZnMv bmlsZnMyLmM6MTEzNQo+ICsjOiBncnViLWNvcmUvZnMvZjJmcy5jOjEyNTkKPiAgIywgYy1mb3Jt YXQKPiAgbXNnaWQgIiUwMnglMDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngt JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4Igo+ICBtc2dzdHIgIiIKPiBkaWZmIC0tZ2l0IGEvdGVz dHMvZjJmc190ZXN0LmluIGIvdGVzdHMvZjJmc190ZXN0LmluCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwLi4xZWE3N2M4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3Rz L2YyZnNfdGVzdC5pbgo+IEBAIC0wLDAgKzEsMTkgQEAKPiArIyEvYmluL3NoCj4gKwo+ICtzZXQg LWUKPiArCj4gK2lmIFsgIngkRVVJRCIgPSAieCIgXSA7IHRoZW4KPiArIEVVSUQ9YGlkIC11YAo+ ICtmaQo+ICsKPiAraWYgWyAiJEVVSUQiICE9IDAgXSA7IHRoZW4KPiArIGV4aXQgNzcKPiArZmkK PiArCj4gK2lmICEgd2hpY2ggbWtmcy5mMmZzID4vZGV2L251bGwgMj4mMTsgdGhlbgo+ICsgZWNo byAibWtmcy5mMmZzIG5vdCBpbnN0YWxsZWQ7IGNhbm5vdCB0ZXN0IGYyZnMuIgo+ICsgZXhpdCA3 Nwo+ICtmaQo+ICsKPiArCj4gKyJAYnVpbGRkaXJAL2dydWItZnMtdGVzdGVyIiBmMmZzCj4gZGlm ZiAtLWdpdCBhL3Rlc3RzL3V0aWwvZ3J1Yi1mcy10ZXN0ZXIuaW4gYi90ZXN0cy91dGlsL2dydWIt ZnMtdGVzdGVyLmluCj4gaW5kZXggNDI0ZGUyMi4uZTNlNDEwOSAxMDA2NDQKPiAtLS0gYS90ZXN0 cy91dGlsL2dydWItZnMtdGVzdGVyLmluCj4gKysrIGIvdGVzdHMvdXRpbC9ncnViLWZzLXRlc3Rl ci5pbgo+IEBAIC0xNDIsNyArMTQyLDcgQEAgZm9yICgoTE9HU0VDU0laRT1NSU5MT0dTRUNTSVpF O0xPR1NFQ1NJWkU8PU1BWExPR1NFQ1NJWkU7TE9HU0VDU0laRT1MT0dTRUNTSVpFICsKPiAgCXhz cXVhc2gqKQo+ICAJICAgIE1JTkJMS1NJWkU9NDA5Ngo+ICAJICAgIE1BWEJMS1NJWkU9MTA0ODU3 Njs7Cj4gLQl4eGZzKQo+ICsJeHhmc3x4ZjJmcykKPiAgCSAgICBNSU5CTEtTSVpFPSRTRUNTSVpF Cj4gIAkJIyBPUyBMaW1pdGF0aW9uOiBHTlUvTGludXggZG9lc24ndCBhY2NlcHQgPiA0MDk2Cj4g IAkgICAgTUFYQkxLU0laRT00MDk2OzsKPiBAQCAtMjY1LDYgKzI2NSwxMCBAQCBmb3IgKChMT0dT RUNTSVpFPU1JTkxPR1NFQ1NJWkU7TE9HU0VDU0laRTw9TUFYTE9HU0VDU0laRTtMT0dTRUNTSVpF PUxPR1NFQ1NJWkUgKwo+ICAJCXgiYnRyZnMiKikKPiAgCQkgICAgRlNMQUJFTD0iZ3J1Yl87L3Rl c3TDqfCvppvwr6ad8J+YgdC60LjRgNC40YJpIHVyZXdmY2VuaXVld3J1ZXZyZXdudXVpcmV1cmV2 dWV1cm5pZXZyZXdmbmVyZmNuZXZpcml2aW5yZXd2bmlyZXduaXZyZXdpdXZjcmV3dm51ZXd2cnJy ZXduaXVlcndyZWl1dml1cmV3aXV2aXVyZXdudXZld252cmVudXJudW51dnJldnV1cmVyZWppcmVt dnJlaWpudmNyZWl2aXJlIG52ZXJpdm5yZWl2cmV2bnVyZWlvcmZuZnJ2b2VvaXJvaXJlb2lyZW9p ZnJlZm9pZXJvaWZvaXJlb2lmIjs7Cj4gIAo+ICsJICAgICMgRlMgTElNSVRBVElPTjogZjJmcyBs YWJlbCBpcyBhdCBtb3N0IDUxMiBVVEYtMTYgY2hhcnMKPiArCQl4ImYyZnMiKQo+ICsJCSAgICBG U0xBQkVMPSJncnViXzsvdGVzdMOp5I+M5JCT5I+V0LrQuNGA0LjRgml1cmV3ZmNlbml1ZXdydWV3 bnV1aXJldXJldnVldXJuaWV2cmV3Zm5lcmZjbmV2aXJpdmlucmV3dm5pcmV3bml2cmV3aXV2Y3Jl d3ZudWV3dnJycmV3bml1ZXJ3cmVpdXZpdXJld2l1dml1cmV3bnV2ZXdudnJlbnVybnVudXZyZXZ1 dXJlcmVqaXJlbXZyZWlqbnZ2Y3JlaXZpcmUgbnZlcml2bnJlaXZyZXZudXJlaW9yZm5mcnZvZW9p cm9pcmVvaXJlb2lmcmVmb2llcm9pZm9pcnZjcmVpdmlyZSBudmVyaXZucmVpdnJldm51cmVpb3Jm bmZydm9lb2lyb2lyZW9pcmVvaWZyZWZvaWVyb2lmb2lyY3JlaXZpcmUgbnZlcml2bnJlaXZyZXZu dXJlaW9yZm5mcnZvZW9pcm9pcmVvaXJlb2lmcmVmb2llcm9pZm9pcmVvaWZvaXEiOzsKPiArCj4g IAkgICAgIyBGUyBMSU1JVEFUSU9OOiBleGZhdCBpcyBhdCBtb3N0IDE1IFVURi0xNiBjaGFycwo+ ICAJCXgiZXhmYXQiKQo+ICAJCSAgICBGU0xBQkVMPSJnw6nRgiA7L/Cvppvwr6ad8J+YgdC60LjR gCI7Owo+IEBAIC00NzQsNyArNDc4LDcgQEAgZm9yICgoTE9HU0VDU0laRT1NSU5MT0dTRUNTSVpF O0xPR1NFQ1NJWkU8PU1BWExPR1NFQ1NJWkU7TE9HU0VDU0laRT1MT0dTRUNTSVpFICsKPiAgCSAg ICAjIEZJWE1FOiBOb3Qgc3VyZSBhYm91dCBCdHJGUywgTlRGUywgSkZTLCBBRlMsIFVERiBhbmQg U0ZTLiBDaGVjayBpdC4KPiAgCSMgRlMgTElNSVRBVElPTjogYXMgZmFyIGFzIEkga25vdyB0aG9z ZSBGUyBkb24ndCBzdG9yZSB0aGVpciBsYXN0IG1vZGlmaWNhdGlvbiBkYXRlLgo+ICAJCXgiamZz X2Nhc2VpbnMiIHwgeCJqZnMiIHwgeCJ4ZnMiIHwgeCJ4ZnNfY3JjIiB8IHgiYnRyZnMiKiB8IHgi cmVpc2VyZnNfb2xkIiB8IHgicmVpc2VyZnMiIFwKPiAtCQkgICAgfCB4ImJmcyIgfCB4ImFmcyIg XAo+ICsJCSAgICB8IHgiYmZzIiB8IHgiYWZzIiB8IHgiZjJmcyIgXAo+ICAJCSAgICB8IHgidGFy ZnMiIHwgeCJjcGlvXyIqIHwgeCJtaW5peCIgfCB4Im1pbml4MiIgXAo+ICAJCSAgICB8IHgibWlu aXgzIiB8IHgibnRmcyIqIHwgeCJ1ZGYiIHwgeCJzZnMiKikKPiAgCQkgICAgTk9GU1RJTUU9eTs7 Cj4gQEAgLTc1Myw2ICs3NTcsOCBAQCBmb3IgKChMT0dTRUNTSVpFPU1JTkxPR1NFQ1NJWkU7TE9H U0VDU0laRTw9TUFYTE9HU0VDU0laRTtMT0dTRUNTSVpFPUxPR1NFQ1NJWkUgKwo+ICAJCSAgICBN T1VOVERFVklDRT0iL2Rldi9tYXBwZXIvZ3J1Yl90ZXN0LXRlc3R2b2wiCj4gIAkJICAgIE1PVU5U RlM9ZXh0Mgo+ICAJCSAgICAibWtmcy5leHQyIiAtTCAiJEZTTEFCRUwiIC1xICIke01PVU5UREVW SUNFfSIgIDs7Cj4gKwkJeGYyZnMpCj4gKwkJICAgICJta2ZzLmYyZnMiIC1sICIkRlNMQUJFTCIg LXEgIiR7TE9ERVZJQ0VTWzBdfSIgOzsKPiAgCQl4bmlsZnMyKQo+ICAJCSAgICAibWtmcy5uaWxm czIiIC1MICIkRlNMQUJFTCIgLWIgJEJMS1NJWkUgIC1xICIke0xPREVWSUNFU1swXX0iIDs7Cj4g IAkJeGV4dDJfb2xkKQo+IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9yZwpodHRw czovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==