From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S264420AbTLBW1a (ORCPT ); Tue, 2 Dec 2003 17:27:30 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S264422AbTLBW1a (ORCPT ); Tue, 2 Dec 2003 17:27:30 -0500 Received: from fujitsu1.fujitsu.com ([192.240.0.1]:2786 "EHLO fujitsu1.fujitsu.com") by vger.kernel.org with ESMTP id S264420AbTLBW06 (ORCPT ); Tue, 2 Dec 2003 17:26:58 -0500 Date: Tue, 02 Dec 2003 14:26:10 -0800 From: Yasunori Goto To: "Pavel Machek" Subject: Re: memory hotremove prototype, take 3 Cc: , "Luck, Tony" , IWAMOTO Toshihiro , Hirokazu Takahashi , Linux Hotplug Memory Support In-Reply-To: References: Message-Id: <20031202111944.57B2.YGOTO@fsw.fujitsu.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------_3FCCE5CF57D902BEC008_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.07.02 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --------_3FCCE5CF57D902BEC008_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Hello. > Pavel Machek wrote: > > > hotunplug seems cool... How do you deal with kernel data structures in > > memory "to be removed"? Or you simply don't allow kmalloc() to > > allocate there? > > You guessed right. Hot removeable memory can only be allocated > for uses that we can easily re-allocate. So kmalloc() etc. have > to get memory from some area that we promise not to ever try to > remove. IMHO, To hot-remove memory, memory attribute should be divided into Hotpluggable and no-Hotpluggable, and each attribute memory should be allocated each unit(ex. node). (I posted the following mail 2 month ago.) http://marc.theaimsgroup.com/?l=linux-kernel&m=106506389406876&w=2 Now, I'm making a Memory hot-ADD trial patch, but it don't work yet. (Kernel panic when memory enable command is executed.) After this patch will work, I will post it again. Thanks. -- Yasunori Goto --------_3FCCE5CF57D902BEC008_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="20031125.patch" Content-Disposition: attachment; filename="20031125.patch" Content-Transfer-Encoding: base64 ZGlmZiAtZHVwcmIgbGludXgtMi42LjAtdGVzdDcvTWFrZWZpbGUgdGVzdGRpci9NYWtlZmlsZQ0K LS0tIGxpbnV4LTIuNi4wLXRlc3Q3L01ha2VmaWxlCVdlZCBPY3QgIDggMTI6MjQ6MTcgMjAwMw0K KysrIHRlc3RkaXIvTWFrZWZpbGUJU2F0IE5vdiAyMiAxNzo1NToyMSAyMDAzDQpAQCAtMSw3ICsx LDcgQEANCiBWRVJTSU9OID0gMg0KIFBBVENITEVWRUwgPSA2DQogU1VCTEVWRUwgPSAwDQotRVhU UkFWRVJTSU9OID0gLXRlc3Q3DQorRVhUUkFWRVJTSU9OID0gLXRlc3Q3LW1lbS1ob3RwbHVnDQog DQogIyAqRE9DVU1FTlRBVElPTioNCiAjIFRvIHNlZSBhIGxpc3Qgb2YgdHlwaWNhbCB0YXJnZXRz IGV4ZWN1dGUgIm1ha2UgaGVscCINCmRpZmYgLWR1cHJiIGxpbnV4LTIuNi4wLXRlc3Q3L2FyY2gv aTM4Ni9LY29uZmlnIHRlc3RkaXIvYXJjaC9pMzg2L0tjb25maWcNCi0tLSBsaW51eC0yLjYuMC10 ZXN0Ny9hcmNoL2kzODYvS2NvbmZpZwlXZWQgT2N0ICA4IDEyOjI0OjAyIDIwMDMNCisrKyB0ZXN0 ZGlyL2FyY2gvaTM4Ni9LY29uZmlnCVNhdCBOb3YgMjIgMTc6NTI6MzYgMjAwMw0KQEAgLTcwNiwx NCArNzA2LDE4IEBAIGNvbW1lbnQgIk5VTUEgKE5VTUEtUSkgcmVxdWlyZXMgU01QLCA2NEcNCiBj b21tZW50ICJOVU1BIChTdW1taXQpIHJlcXVpcmVzIFNNUCwgNjRHQiBoaWdobWVtIHN1cHBvcnQs IGZ1bGwgQUNQSSINCiAJZGVwZW5kcyBvbiBYODZfU1VNTUlUICYmICghSElHSE1FTTY0RyB8fCAh QUNQSSB8fCBBQ1BJX0hUX09OTFkpDQogDQorY29uZmlnIE1FTUhPVFBMVUdURVNUDQorCWJvb2wg Ik1lbW9yeSBob3RwbHVnIHRlc3QiDQorCWRlZmF1bHQgbg0KKw0KIGNvbmZpZyBESVNDT05USUdN RU0NCiAJYm9vbA0KLQlkZXBlbmRzIG9uIE5VTUENCisJZGVwZW5kcyBvbiBOVU1BIHx8IE1FTUhP VFBMVUdURVNUDQogCWRlZmF1bHQgeQ0KIA0KIGNvbmZpZyBIQVZFX0FSQ0hfQk9PVE1FTV9OT0RF DQogCWJvb2wNCi0JZGVwZW5kcyBvbiBOVU1BDQorCWRlcGVuZHMgb24gTlVNQSB8fCBNRU1IT1RQ TFVHVEVTVA0KIAlkZWZhdWx0IHkNCiANCiBjb25maWcgSElHSFBURQ0KZGlmZiAtZHVwcmIgbGlu dXgtMi42LjAtdGVzdDcvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jIHRlc3RkaXIvYXJjaC9pMzg2 L2tlcm5lbC9zZXR1cC5jDQotLS0gbGludXgtMi42LjAtdGVzdDcvYXJjaC9pMzg2L2tlcm5lbC9z ZXR1cC5jCVdlZCBPY3QgIDggMTI6MjQ6MDUgMjAwMw0KKysrIHRlc3RkaXIvYXJjaC9pMzg2L2tl cm5lbC9zZXR1cC5jCVNhdCBOb3YgMjIgMTc6NTI6MzYgMjAwMw0KQEAgLTExNCw2ICsxMTQsOCBA QCBleHRlcm4gdm9pZCBnZW5lcmljX2FwaWNfcHJvYmUoY2hhciAqKTsNCiBleHRlcm4gaW50IHJv b3RfbW91bnRmbGFnczsNCiBleHRlcm4gY2hhciBfZW5kW107DQogDQorZXh0ZXJuIHVuc2lnbmVk IGxvbmcgbm9kZV9lbmRfcGZuW01BWF9OVU1OT0RFU107DQorDQogdW5zaWduZWQgbG9uZyBzYXZl ZF92aWRlb21vZGU7DQogDQogI2RlZmluZSBSQU1ESVNLX0lNQUdFX1NUQVJUX01BU0sgIAkweDA3 RkYNCkBAIC02MTEsNyArNjEzLDExIEBAIHVuc2lnbmVkIGxvbmcgX19pbml0IGZpbmRfbWF4X2xv d19wZm4odm8NCiB7DQogCXVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm47DQogDQorI2lmIENPTkZJ R19NRU1IT1RQTFVHVEVTVA0KKwltYXhfbG93X3BmbiA9IG5vZGVfZW5kX3BmblswXTsNCisjZWxz ZQ0KIAltYXhfbG93X3BmbiA9IG1heF9wZm47DQorI2VuZGlmDQogCWlmIChtYXhfbG93X3BmbiA+ IE1BWE1FTV9QRk4pIHsNCiAJCWlmIChoaWdobWVtX3BhZ2VzID09IC0xKQ0KIAkJCWhpZ2htZW1f cGFnZXMgPSBtYXhfcGZuIC0gTUFYTUVNX1BGTjsNCmRpZmYgLWR1cHJiIGxpbnV4LTIuNi4wLXRl c3Q3L2FyY2gvaTM4Ni9tbS9kaXNjb250aWcuYyB0ZXN0ZGlyL2FyY2gvaTM4Ni9tbS9kaXNjb250 aWcuYw0KLS0tIGxpbnV4LTIuNi4wLXRlc3Q3L2FyY2gvaTM4Ni9tbS9kaXNjb250aWcuYwlXZWQg T2N0ICA4IDEyOjI0OjA3IDIwMDMNCisrKyB0ZXN0ZGlyL2FyY2gvaTM4Ni9tbS9kaXNjb250aWcu YwlUdWUgTm92IDI1IDE5OjM0OjAzIDIwMDMNCkBAIC0yOCw2ICsyOCwxMiBAQA0KICNpbmNsdWRl IDxsaW51eC9tbXpvbmUuaD4NCiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPg0KICNpbmNsdWRl IDxsaW51eC9pbml0cmQuaD4NCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPg0KKw0KKyNpZmRl ZiBDT05GSUdfTUVNSE9UUExVRw0KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KKyNlbmRpZg0K Kw0KICNpbmNsdWRlIDxhc20vZTgyMC5oPg0KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4NCiAjaW5j bHVkZSA8YXNtL21tem9uZS5oPg0KQEAgLTgwLDYgKzg2LDEwIEBAIHVuc2lnbmVkIGxvbmcgbm9k ZV9yZW1hcF9vZmZzZXRbTUFYX05VTU4NCiB2b2lkICpub2RlX3JlbWFwX3N0YXJ0X3ZhZGRyW01B WF9OVU1OT0RFU107DQogdm9pZCBzZXRfcG1kX3Bmbih1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNp Z25lZCBsb25nIHBmbiwgcGdwcm90X3QgZmxhZ3MpOw0KIA0KKyNpZmRlZiBDT05GSUdfTUVNSE9U UExVR1RFU1QNCit2b2lkIHNldF9wbWRfcGZuX3dpdGhwZ2QodW5zaWduZWQgbG9uZyB2YWRkciwg dW5zaWduZWQgbG9uZyBwZm4scGdkX3QgKnBnZCwgcGdwcm90X3QgZmxhZ3MpOw0KKyNlbmRpZg0K Kw0KIC8qDQogICogRkxBVCAtIHN1cHBvcnQgZm9yIGJhc2ljIFBDIG1lbW9yeSBtb2RlbCB3aXRo IGRpc2NvbnRpZyBlbmFibGVkLCBlc3NlbnRpYWxseQ0KICAqICAgICAgICBhIHNpbmdsZSBub2Rl IHdpdGggYWxsIGF2YWlsYWJsZSBwcm9jZXNzb3JzIGluIGl0IHdpdGggYSBmbGF0DQpAQCAtMTEx LDYgKzEyMSw0NCBAQCBpbnQgX19pbml0IGdldF9tZW1jZmdfbnVtYV9mbGF0KHZvaWQpDQogCXJl dHVybiAxOw0KIH0NCiANCitpbnQgX19pbml0IGdldF9tZW1jZmdfbnVtYV9ibGtzKHZvaWQpDQor ew0KKwlpbnQgaSwgcGZuOw0KKw0KKwlwcmludGsoIk5VTUEgLSBzaW5nbGUgbm9kZSwgZmxhdCBt ZW1vcnkgbW9kZSwgYnV0IGJyb2tlbiBpbiBzZXZlcmFsIGJsb2Nrc1xuIik7DQorDQorCS8qIFJ1 biB0aGUgbWVtb3J5IGNvbmZpZ3VyYXRpb24gYW5kIGZpbmQgdGhlIHRvcCBvZiBtZW1vcnkuICov DQorCWZpbmRfbWF4X3BmbigpOw0KKwltYXhfcGZuID0gbWF4X3BmbiAmIH4oUFRSU19QRVJfUFRF IC0gMSk7DQorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykgew0KKwkJcGZuID0g UEZOX0RPV04oMjU2IDw8IDIwKSAqIGk7DQorCQlub2RlX3N0YXJ0X3BmbltpXSA9IHBmbjsNCisJ CXBmbiArPSBQRk5fRE9XTigyNTYgPDwgMjApOw0KKwkJaWYgKHBmbiA8IG1heF9wZm4pDQorCQkJ bm9kZV9lbmRfcGZuW2ldID0gcGZuOw0KKwkJZWxzZSB7DQorCQkJbm9kZV9lbmRfcGZuW2ldID0g bWF4X3BmbjsNCisJCQlpKys7DQorCQkJcHJpbnRrKCJ0b3RhbCAlZCBibG9ja3MsIG1heCAlZFxu IiwgaSwgKGludCltYXhfcGZuKTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKw0KKwkvKiBGaWxs IGluIHRoZSBwaHlzbm9kZV9tYXAgd2l0aCBvdXIgc2ltcGxpc3RpYyBtZW1vcnkgbW9kZWwsDQor CSAgICogYWxsIG1lbW9yeSBpcyBpbiBub2RlIDAuDQorCSAqLw0KKwlmb3IgKHBmbiA9IG5vZGVf c3RhcnRfcGZuWzBdOyBwZm4gPD0gbWF4X3BmbjsNCisJCXBmbiArPSBQQUdFU19QRVJfRUxFTUVO VCkgew0KKwkJcGh5c25vZGVfbWFwW3BmbiAvIFBBR0VTX1BFUl9FTEVNRU5UXSA9IHBmbiAvIFBG Tl9ET1dOKDI1NiA8PCAyMCk7DQorCX0NCisNCisJLyogSW5kaWNhdGUgdGhlcmUgaXMgb25lIG5v ZGUgYXZhaWxhYmxlLiAqLw0KKwlub2RlX3NldF9vbmxpbmUoMCk7DQorCW51bW5vZGVzID0gaTsN CisNCisJcmV0dXJuIDE7DQorfQ0KKw0KIC8qDQogICogRmluZCB0aGUgaGlnaGVzdCBwYWdlIGZy YW1lIG51bWJlciB3ZSBoYXZlIGF2YWlsYWJsZSBmb3IgdGhlIG5vZGUNCiAgKi8NCkBAIC0xMzQs NiArMTgyLDEyIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX21heF9wZm5fbm9kZShpbnQNCiAg Ki8NCiBzdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NhdGVfcGdkYXQoaW50IG5pZCkNCiB7DQorI2lm IENPTkZJR19NRU1IT1RQTFVHVEVTVA0KKwkvKiBwZ19kYXQgYWxsb2NhdGUgTm9kZSAwIHN0YXRp Y2FsbHkgKi8NCisJTk9ERV9EQVRBKG5pZCkgPSAocGdfZGF0YV90ICopKF9fdmEobWluX2xvd19w Zm4gPDwgUEFHRV9TSElGVCkpOw0KKwltaW5fbG93X3BmbiArPSBQRk5fVVAoc2l6ZW9mKHBnX2Rh dGFfdCkpOw0KKwltZW1zZXQoTk9ERV9EQVRBKG5pZCksIDAsIHNpemVvZihwZ19kYXRhX3QpKTsN CisjZWxzZQ0KIAlpZiAobmlkKQ0KIAkJTk9ERV9EQVRBKG5pZCkgPSAocGdfZGF0YV90ICopbm9k ZV9yZW1hcF9zdGFydF92YWRkcltuaWRdOw0KIAllbHNlIHsNCkBAIC0xNDEsNiArMTk1LDcgQEAg c3RhdGljIHZvaWQgX19pbml0IGFsbG9jYXRlX3BnZGF0KGludCBuaQ0KIAkJbWluX2xvd19wZm4g Kz0gUEZOX1VQKHNpemVvZihwZ19kYXRhX3QpKTsNCiAJCW1lbXNldChOT0RFX0RBVEEobmlkKSwg MCwgc2l6ZW9mKHBnX2RhdGFfdCkpOw0KIAl9DQorI2VuZGlmDQogfQ0KIA0KIC8qDQpAQCAtMTgz LDYgKzIzOCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCByZWdpc3Rlcl9ib290bWVtX2xvd18NCiAJ fQ0KIH0NCiANCisvKnN0YXRpYyBzdHJ1Y3Qga2NvcmVfbGlzdCBudW1hX2tjOyovDQogdm9pZCBf X2luaXQgcmVtYXBfbnVtYV9rdmEodm9pZCkNCiB7DQogCXZvaWQgKnZhZGRyOw0KQEAgLTE5Niw5 ICsyNTIsMzQgQEAgdm9pZCBfX2luaXQgcmVtYXBfbnVtYV9rdmEodm9pZCkNCiAJCQkJbm9kZV9y ZW1hcF9zdGFydF9wZm5bbm9kZV0gKyBwZm4sIA0KIAkJCQlQQUdFX0tFUk5FTF9MQVJHRSk7DQog CQl9DQorCS8qCW1lbXNldChub2RlX3JlbWFwX3N0YXJ0X3ZhZGRyW25vZGVdLCAwLG5vZGVfcmVt YXBfc2l6ZVtub2RlXSAqIFBBR0VfU0laRSk7ICovDQorCX0NCisvKglrY2xpc3RfYWRkKCZudW1h X2tjLCBub2RlX3JlbWFwX3N0YXJ0X3ZhZGRyW251bW5vZGVzIC0gMV0sDQorCQkgICBub2RlX3Jl bWFwX29mZnNldFtudW1ub2RlcyAtIDFdIDw8IFBBR0VfU0hJRlQpOyovDQorfQ0KKw0KK3ZvaWQg cmVtYXBfYWRkX25vZGVfa3ZhKGludCBub2RlKQ0KK3sNCisJdm9pZCAqdmFkZHI7DQorCXVuc2ln bmVkIGxvbmcgcGZuOw0KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7DQorCXBnZF90ICpwZ19kaXI7 DQorDQorCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7DQorCWZvcl9lYWNoX3Byb2Nlc3MocCl7 DQorCQlwZ19kaXIgPSBwLT5tbS0+cGdkOw0KKwkJZm9yKHBmbj0wOyBwZm4gPCBub2RlX3JlbWFw X3NpemVbbm9kZV07IHBmbiArPSBQVFJTX1BFUl9QVEUpew0KKwkJCXZhZGRyID0gbm9kZV9yZW1h cF9zdGFydF92YWRkcltub2RlXSsocGZuPDxQQUdFX1NISUZUKTsNCisJCQlzZXRfcG1kX3Bmbl93 aXRocGdkKCh1bG9uZykgdmFkZHIsDQorCQkJCW5vZGVfcmVtYXBfc3RhcnRfcGZuW25vZGVdICsg cGZuLA0KKwkJCQlwZ19kaXIgKyBwZ2RfaW5kZXgoICh1bG9uZyl2YWRkciApICwNCisJCQkJUEFH RV9LRVJORUxfTEFSR0UpOw0KKwkJfQ0KIAl9DQorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2Nr KTsNCiB9DQogDQorDQogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX251bWFfcmVtYXBf cGFnZXModm9pZCkNCiB7DQogCWludCBuaWQ7DQpAQCAtMjA2LDggKzI4NywxMyBAQCBzdGF0aWMg dW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfbnVtYV9yZW1hDQogDQogCWZvciAobmlkID0gMTsgbmlk IDwgbnVtbm9kZXM7IG5pZCsrKSB7DQogCQkvKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG1l bV9tYXAgbmVlZGVkIGluIGJ5dGVzICovDQorI2lmIENPTkZJR19NRU1IT1RQTFVHVEVTVA0KKwkJ c2l6ZSA9IChub2RlX2VuZF9wZm5bbmlkXSAtIG5vZGVfc3RhcnRfcGZuW25pZF0gKyAxKQ0KKwkJ CSogc2l6ZW9mKHN0cnVjdCBwYWdlKTsNCisjZWxzZQ0KIAkJc2l6ZSA9IChub2RlX2VuZF9wZm5b bmlkXSAtIG5vZGVfc3RhcnRfcGZuW25pZF0gKyAxKSANCiAJCQkqIHNpemVvZihzdHJ1Y3QgcGFn ZSkgKyBzaXplb2YocGdfZGF0YV90KTsNCisjZW5kaWYNCiAJCS8qIGNvbnZlcnQgc2l6ZSB0byBs YXJnZSAocG1kIHNpemUpIHBhZ2VzLCByb3VuZGluZyB1cCAqLw0KIAkJc2l6ZSA9IChzaXplICsg TEFSR0VfUEFHRV9CWVRFUyAtIDEpIC8gTEFSR0VfUEFHRV9CWVRFUzsNCiAJCS8qIG5vdyB0aGUg cm91bmR1cCBpcyBjb3JyZWN0LCBjb252ZXJ0IHRvIFBBR0VfU0laRSBwYWdlcyAqLw0KQEAgLTI0 OCw3ICszMzQsOSBAQCB1bnNpZ25lZCBsb25nIF9faW5pdCBzZXR1cF9tZW1vcnkodm9pZCkNCiAJ cHJpbnRrKEtFUk5fTk9USUNFICIlbGRNQiBISUdITUVNIGF2YWlsYWJsZS5cbiIsDQogCSAgICAg ICBwYWdlc190b19tYihoaWdoZW5kX3BmbiAtIGhpZ2hzdGFydF9wZm4pKTsNCiAjZW5kaWYNCisj aWZuZGVmIENPTkZJR19NRU1IT1RQTFVHVEVTVA0KIAlzeXN0ZW1fbWF4X2xvd19wZm4gPSBtYXhf bG93X3BmbiA9IG1heF9sb3dfcGZuIC0gcmVzZXJ2ZV9wYWdlczsNCisjZW5kaWYNCiAJcHJpbnRr KEtFUk5fTk9USUNFICIlbGRNQiBMT1dNRU0gYXZhaWxhYmxlLlxuIiwNCiAJCQlwYWdlc190b19t YihzeXN0ZW1fbWF4X2xvd19wZm4pKTsNCiAJcHJpbnRrKCJtaW5fbG93X3BmbiA9ICVsZCwgbWF4 X2xvd19wZm4gPSAlbGQsIGhpZ2hzdGFydF9wZm4gPSAlbGRcbiIsIA0KQEAgLTQyNiw3ICs1MTQs MTEgQEAgdm9pZCBfX2luaXQgc2V0X2hpZ2htZW1fcGFnZXNfaW5pdChpbnQgYg0KIHZvaWQgX19p bml0IHNldF9tYXhfbWFwbnJfaW5pdCh2b2lkKQ0KIHsNCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0N CisjaWZkZWYgQ09ORklHX01FTUhPVFBMVUdURVNUDQorCWhpZ2htZW1fc3RhcnRfcGFnZSA9IHBo eXNfdG9fdmlydChtYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKTsNCisjZWxzZSAgLyogIUNPTkZJ R19NRU1IT1RQTFVHVEVTVCAqLw0KIAloaWdobWVtX3N0YXJ0X3BhZ2UgPSBOT0RFX0RBVEEoMCkt Pm5vZGVfem9uZXNbWk9ORV9ISUdITUVNXS56b25lX21lbV9tYXA7DQorI2VuZGlmIC8qICFDT05G SUdfTUVNSE9UUExVR1RFU1QgKi8NCiAJbnVtX3BoeXNwYWdlcyA9IGhpZ2hlbmRfcGZuOw0KICNl bHNlDQogCW51bV9waHlzcGFnZXMgPSBtYXhfbG93X3BmbjsNCmRpZmYgLWR1cHJiIGxpbnV4LTIu Ni4wLXRlc3Q3L2FyY2gvaTM4Ni9tbS9wZ3RhYmxlLmMgdGVzdGRpci9hcmNoL2kzODYvbW0vcGd0 YWJsZS5jDQotLS0gbGludXgtMi42LjAtdGVzdDcvYXJjaC9pMzg2L21tL3BndGFibGUuYwlXZWQg T2N0ICA4IDEyOjI0OjUzIDIwMDMNCisrKyB0ZXN0ZGlyL2FyY2gvaTM4Ni9tbS9wZ3RhYmxlLmMJ VHVlIE5vdiAyNSAxOToyMzo0NiAyMDAzDQpAQCAtMTE4LDYgKzExOCwzMCBAQCB2b2lkIHNldF9w bWRfcGZuKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuDQogCSAqLw0KIAlfX2ZsdXNoX3RsYl9vbmUo dmFkZHIpOw0KIH0NCit2b2lkIHNldF9wbWRfcGZuX3dpdGhwZ2QodW5zaWduZWQgbG9uZyB2YWRk ciwgdW5zaWduZWQgbG9uZyBwZm4sIHBnZF90ICpwZ2QsIHBncHJvdF90IGZsYWdzKQ0KK3sNCisJ cG1kX3QgKnBtZDsNCisNCisJaWYgKHZhZGRyICYgKFBNRF9TSVpFLTEpKSB7CQkvKiB2YWRkciBp cyBtaXNhbGlnbmVkICovDQorCQlwcmludGsgKCJzZXRfcG1kX3BmbjogdmFkZHIgbWlzYWxpZ25l ZFxuIik7DQorCQlyZXR1cm47IC8qIEJVRygpOyAqLw0KKwl9DQorCWlmIChwZm4gJiAoUFRSU19Q RVJfUFRFLTEpKSB7CQkvKiBwZm4gaXMgbWlzYWxpZ25lZCAqLw0KKwkJcHJpbnRrICgic2V0X3Bt ZF9wZm46IHBmbiBtaXNhbGlnbmVkXG4iKTsNCisJCXJldHVybjsgLyogQlVHKCk7ICovDQorCX0N CisJaWYgKHBnZF9ub25lKCpwZ2QpKSB7DQorCQlwcmludGsgKCJzZXRfcG1kX3BmbjogcGdkX25v bmVcbiIpOw0KKwkJcmV0dXJuOyAvKiBCVUcoKTsgKi8NCisJfQ0KKwlwbWQgPSBwbWRfb2Zmc2V0 KHBnZCwgdmFkZHIpOw0KKwlzZXRfcG1kKHBtZCwgcGZuX3BtZChwZm4sIGZsYWdzKSk7DQorCS8q DQorCSAqIEl0J3MgZW5vdWdoIHRvIGZsdXNoIHRoaXMgb25lIG1hcHBpbmcuDQorCSAqIChQR0Ug bWFwcGluZ3MgZ2V0IGZsdXNoZWQgYXMgd2VsbCkNCisJICovDQorCV9fZmx1c2hfdGxiX29uZSh2 YWRkcik7DQorfQ0KIA0KIHZvaWQgX19zZXRfZml4bWFwIChlbnVtIGZpeGVkX2FkZHJlc3NlcyBp ZHgsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgZmxhZ3MpDQogew0KZGlmZiAtZHVwcmIg bGludXgtMi42LjAtdGVzdDcvZHJpdmVycy9jaGFyL21lbS5jIHRlc3RkaXIvZHJpdmVycy9jaGFy L21lbS5jDQotLS0gbGludXgtMi42LjAtdGVzdDcvZHJpdmVycy9jaGFyL21lbS5jCVdlZCBPY3Qg IDggMTI6MjQ6MDYgMjAwMw0KKysrIHRlc3RkaXIvZHJpdmVycy9jaGFyL21lbS5jCVNhdCBOb3Yg MjIgMTc6NTM6NDEgMjAwMw0KQEAgLTI0LDYgKzI0LDkgQEANCiAjaW5jbHVkZSA8bGludXgvc21w X2xvY2suaD4NCiAjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+DQogI2luY2x1ZGUg PGxpbnV4L3B0cmFjZS5oPg0KKyNpZmRlZiBDT05GSUdfSElHSE1FTQ0KKyNpbmNsdWRlIDxsaW51 eC9oaWdobWVtLmg+DQorI2VuZGlmDQogDQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQogI2lu Y2x1ZGUgPGFzbS9pby5oPg0KQEAgLTEwNCw2ICsxMDcsMzYgQEAgc3RhdGljIHNzaXplX3QgZG9f d3JpdGVfbWVtKHN0cnVjdCBmaWxlIA0KIAlyZXR1cm4gd3JpdHRlbjsNCiB9DQogDQorI2lmZGVm IENPTkZJR19ISUdITUVNDQorc3RhdGljIHNzaXplX3QgcmVhZF9oaWdobWVtKHN0cnVjdCBmaWxl ICogZmlsZSwgY2hhciAqIGJ1ZiwNCisgCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQor ew0KKwl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsNCisJc3NpemVfdCByZWFkID0gMDsNCisJaW50 IG9mZiwgcGZuID0gcCA+PiBQQUdFX1NISUZUOw0KKwljaGFyICpwcDsNCisJc3RydWN0IHBhZ2Ug KnBhZ2U7DQorDQorCWlmICghIHBmbl92YWxpZChwZm4pKQ0KKwkJcmV0dXJuIDA7DQorCXBhZ2Ug PSBwZm5fdG9fcGFnZShwZm4pOw0KKwlwcCA9IGttYXAocGFnZSk7DQorDQorCW9mZiA9IHAgJiAo UEFHRV9TSVpFIC0gMSk7DQorCWlmIChQQUdFX1NJWkUgLSBvZmYgPiBjb3VudCkNCisJCWNvdW50 ID0gUEFHRV9TSVpFIC0gb2ZmOw0KKw0KKwlpZiAoY29weV90b191c2VyKGJ1ZiwgcHAgKyBvZmYs IGNvdW50KSkgew0KKwkJa3VubWFwKHBhZ2UpOw0KKwkJcmV0dXJuIC1FRkFVTFQ7DQorCX0NCisJ cmVhZCArPSBjb3VudDsNCisJKnBwb3MgKz0gcmVhZDsNCisJa3VubWFwKHBhZ2UpOw0KKwlyZXR1 cm4gcmVhZDsNCit9DQorDQorI2VuZGlmDQogDQogLyoNCiAgKiBUaGlzIGZ1bmNpb24gcmVhZHMg dGhlICpwaHlzaWNhbCogbWVtb3J5LiBUaGUgZl9wb3MgcG9pbnRzIGRpcmVjdGx5IHRvIHRoZSAN CkBAIC0xMTgsNyArMTUxLDExIEBAIHN0YXRpYyBzc2l6ZV90IHJlYWRfbWVtKHN0cnVjdCBmaWxl ICogZmkNCiANCiAJZW5kX21lbSA9IF9fcGEoaGlnaF9tZW1vcnkpOw0KIAlpZiAocCA+PSBlbmRf bWVtKQ0KKyNpZmRlZiBDT05GSUdfSElHSE1FTQ0KKwkJcmV0dXJuIHJlYWRfaGlnaG1lbShmaWxl LCBidWYsIGNvdW50LCBwcG9zKTsNCisjZWxzZQ0KIAkJcmV0dXJuIDA7DQorI2VuZGlmDQogCWlm IChjb3VudCA+IGVuZF9tZW0gLSBwKQ0KIAkJY291bnQgPSBlbmRfbWVtIC0gcDsNCiAJcmVhZCA9 IDA7DQpkaWZmIC1kdXByYiBsaW51eC0yLjYuMC10ZXN0Ny9mcy9wcm9jL2tjb3JlLmMgdGVzdGRp ci9mcy9wcm9jL2tjb3JlLmMNCi0tLSBsaW51eC0yLjYuMC10ZXN0Ny9mcy9wcm9jL2tjb3JlLmMJ V2VkIE9jdCAgOCAxMjoyNDowNyAyMDAzDQorKysgdGVzdGRpci9mcy9wcm9jL2tjb3JlLmMJU2F0 IE5vdiAyMiAxNzo1NDo1OCAyMDAzDQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHJlYWRfa2NvcmUoc3Ry dWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2UNCiAJCQl9DQogCQkJa2ZyZWUoZWxmX2J1Zik7DQog CQl9IGVsc2Ugew0KLQkJCWlmIChrZXJuX2FkZHJfdmFsaWQoc3RhcnQpKSB7DQorCQkJaWYgKDEg LyprZXJuX2FkZHJfdmFsaWQoc3RhcnQpKi8pIHsNCiAJCQkJdW5zaWduZWQgbG9uZyBuOw0KIA0K IAkJCQluID0gY29weV90b191c2VyKGJ1ZmZlciwgKGNoYXIgKilzdGFydCwgdHN6KTsNCmRpZmYg LWR1cHJiIGxpbnV4LTIuNi4wLXRlc3Q3L2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmggdGVzdGRp ci9pbmNsdWRlL2FzbS1pMzg2L21tem9uZS5oDQotLS0gbGludXgtMi42LjAtdGVzdDcvaW5jbHVk ZS9hc20taTM4Ni9tbXpvbmUuaAlXZWQgT2N0ICA4IDEyOjI0OjA2IDIwMDMNCisrKyB0ZXN0ZGly L2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmgJU2F0IE5vdiAyMiAxNzo1NDo0MSAyMDAzDQpAQCAt MTI4LDYgKzEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBnbGlzdF9kYXRhICpwZm5fdG8N CiAjZW5kaWYgLyogQ09ORklHX1g4Nl9OVU1BUSAqLw0KIA0KIGV4dGVybiBpbnQgZ2V0X21lbWNm Z19udW1hX2ZsYXQodm9pZCApOw0KK2V4dGVybiBpbnQgZ2V0X21lbWNmZ19udW1hX2Jsa3Modm9p ZCApOw0KIC8qDQogICogVGhpcyBhbGxvd3MgYW55IG9uZSBOVU1BIGFyY2hpdGVjdHVyZSB0byBi ZSBjb21waWxlZA0KICAqIGZvciwgYW5kIHN0aWxsIGZhbGwgYmFjayB0byB0aGUgZmxhdCBmdW5j dGlvbiBpZiBpdA0KQEAgLTE0MCw2ICsxNDEsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X21l bWNmZ19udW1hKHZvaWQpDQogCQlyZXR1cm47DQogI2VsaWYgQ09ORklHX0FDUElfU1JBVA0KIAlp ZiAoZ2V0X21lbWNmZ19mcm9tX3NyYXQoKSkNCisJCXJldHVybjsNCisjZWxpZiBDT05GSUdfTUVN SE9UUExVR1RFU1QNCisJaWYgKGdldF9tZW1jZmdfbnVtYV9ibGtzKCkpDQogCQlyZXR1cm47DQog I2VuZGlmDQogDQpkaWZmIC1kdXByYiBsaW51eC0yLjYuMC10ZXN0Ny9pbmNsdWRlL2FzbS1pMzg2 L251bW5vZGVzLmggdGVzdGRpci9pbmNsdWRlL2FzbS1pMzg2L251bW5vZGVzLmgNCi0tLSBsaW51 eC0yLjYuMC10ZXN0Ny9pbmNsdWRlL2FzbS1pMzg2L251bW5vZGVzLmgJV2VkIE9jdCAgOCAxMjoy NDowMiAyMDAzDQorKysgdGVzdGRpci9pbmNsdWRlL2FzbS1pMzg2L251bW5vZGVzLmgJU2F0IE5v diAyMiAxNzo1NDo0MSAyMDAzDQpAQCAtMTMsNiArMTMsMTAgQEANCiAvKiBNYXggOCBOb2RlcyAq Lw0KICNkZWZpbmUgTk9ERVNfU0hJRlQJMw0KIA0KKyNlbGlmIGRlZmluZWQoQ09ORklHX01FTUhP VFBMVUdURVNUKQ0KKw0KKyNkZWZpbmUgTk9ERVNfU0hJRlQJMw0KKw0KICNlbmRpZiAvKiBDT05G SUdfWDg2X05VTUFRICovDQogDQogI2VuZGlmIC8qIF9BU01fTUFYX05VTU5PREVTX0ggKi8NCmRp ZmYgLWR1cHJiIGxpbnV4LTIuNi4wLXRlc3Q3L2luY2x1ZGUvbGludXgvbW0uaCB0ZXN0ZGlyL2lu Y2x1ZGUvbGludXgvbW0uaA0KLS0tIGxpbnV4LTIuNi4wLXRlc3Q3L2luY2x1ZGUvbGludXgvbW0u aAlXZWQgT2N0ICA4IDEyOjI0OjAxIDIwMDMNCisrKyB0ZXN0ZGlyL2luY2x1ZGUvbGludXgvbW0u aAlTYXQgTm92IDIyIDE3OjU0OjIxIDIwMDMNCkBAIC0yMTksNyArMjE5LDE0IEBAIHN0cnVjdCBw YWdlIHsNCiAgKi8NCiAjZGVmaW5lIHB1dF9wYWdlX3Rlc3R6ZXJvKHApCQkJCVwNCiAJKHsJCQkJ CQlcDQotCQlCVUdfT04ocGFnZV9jb3VudChwKSA9PSAwKTsJCVwNCisJCWlmIChwYWdlX2NvdW50 KHApID09IDApIHsJCVwNCisJCQlpbnQgaTsJCQkJCQlcDQorCQkJcHJpbnRrKCJQYWdlOiAlbHgg IiwgKGxvbmcpcCk7CQkJXA0KKwkJCWZvcihpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgcGFnZSk7 IGkrKykJXA0KKwkJCQlwcmludGsoIiAlMDJ4IiwgKCh1bnNpZ25lZCBjaGFyICopcClbaV0pOyBc DQorCQkJcHJpbnRrKCJcbiIpOwkJCQkJXA0KKwkJCUJVRygpOwkJCQlcDQorCQl9CQkJCQlcDQog CQlhdG9taWNfZGVjX2FuZF90ZXN0KCYocCktPmNvdW50KTsJXA0KIAl9KQ0KIA0KQEAgLTYyMiw1 ICs2MjksMTcgQEAga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IA0KIH0N CiAjZW5kaWYNCiANCisjaWZkZWYgQ09ORklHX01FTUhPVFBMVUdURVNUDQorI2RlZmluZQlwYWdl X3RyYWNlKHApCXBhZ2VfdHJhY2VfZnVuYyhwLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQ0KK2V4 dGVybiB2b2lkIHBhZ2VfdHJhY2VfZnVuYyhjb25zdCBzdHJ1Y3QgcGFnZSAqLCBjb25zdCBjaGFy ICosIGludCk7DQorI2Vsc2UNCisjZGVmaW5lCXBhZ2VfdHJhY2UocCkJZG8geyB9IHdoaWxlKDAp DQorI2VuZGlmDQorI2lmZGVmIENPTkZJR19NRU1IT1RQTFVHVEVTVA0KKyNkZWZpbmUJcGFnZV90 cmFjZShwKQlwYWdlX3RyYWNlX2Z1bmMocCwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykNCitleHRl cm4gdm9pZCBwYWdlX3RyYWNlX2Z1bmMoY29uc3Qgc3RydWN0IHBhZ2UgKiwgY29uc3QgY2hhciAq LCBpbnQpOw0KKyNlbHNlDQorI2RlZmluZQlwYWdlX3RyYWNlKHApCWRvIHsgfSB3aGlsZSgwKQ0K KyNlbmRpZiAvKiBDT05GSUdfTUVNSE9UUExVR1RFU1QgKi8gDQogI2VuZGlmIC8qIF9fS0VSTkVM X18gKi8NCiAjZW5kaWYgLyogX0xJTlVYX01NX0ggKi8NCmRpZmYgLWR1cHJiIGxpbnV4LTIuNi4w LXRlc3Q3L2luY2x1ZGUvbGludXgvbW16b25lLmggdGVzdGRpci9pbmNsdWRlL2xpbnV4L21tem9u ZS5oDQotLS0gbGludXgtMi42LjAtdGVzdDcvaW5jbHVkZS9saW51eC9tbXpvbmUuaAlXZWQgT2N0 ICA4IDEyOjI0OjA4IDIwMDMNCisrKyB0ZXN0ZGlyL2luY2x1ZGUvbGludXgvbW16b25lLmgJU2F0 IE5vdiAyMiAxNzo1NDoyMyAyMDAzDQpAQCAtMTc0LDYgKzE3NCw3IEBAIHN0cnVjdCB6b25lIHsN CiAgKiBmb290cHJpbnQgb2YgdGhpcyBjb25zdHJ1Y3QgaXMgdmVyeSBzbWFsbC4NCiAgKi8NCiBz dHJ1Y3Qgem9uZWxpc3Qgew0KKwlyd2xvY2tfdCB6b25lbGlzdF9sb2NrOyANCiAJc3RydWN0IHpv bmUgKnpvbmVzW01BWF9OVU1OT0RFUyAqIE1BWF9OUl9aT05FUyArIDFdOyAvLyBOVUxMIGRlbGlt aXRlZA0KIH07DQogDQpAQCAtMjM1LDEwICsyMzYsMjkgQEAgdm9pZCB3YWtldXBfa3N3YXBkKHN0 cnVjdCB6b25lICp6b25lKTsNCiAgKiBuZXh0X3pvbmUgLSBoZWxwZXIgbWFnaWMgZm9yIGZvcl9l YWNoX3pvbmUoKQ0KICAqIFRoYW5rcyB0byBXaWxsaWFtIExlZSBJcndpbiBJSUkgZm9yIHRoaXMg cGllY2Ugb2YgaW5nZW51aXR5Lg0KICAqLw0KK2V4dGVybiBjaGFyIHpvbmVfYWN0aXZlW107DQor DQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgem9uZSAqbmV4dF96b25lKHN0cnVjdCB6b25lICp6b25l KQ0KIHsNCiAJcGdfZGF0YV90ICpwZ2RhdCA9IHpvbmUtPnpvbmVfcGdkYXQ7DQogDQorI2lmZGVm IENPTkZJR19NRU1IT1RQTFVHVEVTVA0KKwl1bnNpZ25lZCBpbnQgem9uZV9pZHggPSB6b25lIC0g cGdkYXQtPm5vZGVfem9uZXM7DQorCWRvew0KKwkJaWYgKHpvbmVfaWR4IDwgTUFYX05SX1pPTkVT IC0xKXsNCisJCQl6b25lKys7DQorCQkJem9uZV9pZHgrKzsNCisJCX1lbHNlIGlmIChwZ2RhdC0+ cGdkYXRfbmV4dCl7DQorCQkJcGdkYXQgPSBwZ2RhdC0+cGdkYXRfbmV4dDsNCisJCQl6b25lID0g cGdkYXQtPm5vZGVfem9uZXM7DQorCQkJem9uZV9pZHg9MDsNCisJCX1lbHNlDQorCQkJcmV0dXJu IE5VTEw7DQorCX13aGlsZSghem9uZV9hY3RpdmVbcGdkYXQtPm5vZGVfaWQgKiBNQVhfTlJfWk9O RVMgKyB6b25lX2lkeF0pOw0KKw0KKwlyZXR1cm4gem9uZTsNCisNCisjZWxzZQ0KIAlpZiAoem9u ZSAtIHBnZGF0LT5ub2RlX3pvbmVzIDwgTUFYX05SX1pPTkVTIC0gMSkNCiAJCXpvbmUrKzsNCiAJ ZWxzZSBpZiAocGdkYXQtPnBnZGF0X25leHQpIHsNCkBAIC0yNDgsNiArMjY4LDcgQEAgc3RhdGlj IGlubGluZSBzdHJ1Y3Qgem9uZSAqbmV4dF96b25lKHN0cg0KIAkJem9uZSA9IE5VTEw7DQogDQog CXJldHVybiB6b25lOw0KKyNlbmRpZg0KIH0NCiANCiAvKioNCkBAIC0zNTksNiArMzgwLDEwIEBA IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG51bV9vbmxpbmVfbWUNCiAJfQ0KIAlyZXR1cm4g bnVtOw0KIH0NCisNCisjaWZkZWYgQ09ORklHX01FTUhPVFBMVUdURVNUDQoraW50IHpvbmVfYWN0 aXZlcChjb25zdCBzdHJ1Y3Qgem9uZSAqKTsNCisjZW5kaWYNCiANCiAjZWxzZSAvKiAhQ09ORklH X0RJU0NPTlRJR01FTSAmJiAhQ09ORklHX05VTUEgKi8NCiANCmRpZmYgLWR1cHJiIGxpbnV4LTIu Ni4wLXRlc3Q3L21tL3BhZ2VfYWxsb2MuYyB0ZXN0ZGlyL21tL3BhZ2VfYWxsb2MuYw0KLS0tIGxp bnV4LTIuNi4wLXRlc3Q3L21tL3BhZ2VfYWxsb2MuYwlXZWQgT2N0ICA4IDEyOjI0OjAxIDIwMDMN CisrKyB0ZXN0ZGlyL21tL3BhZ2VfYWxsb2MuYwlUdWUgTm92IDI1IDE4OjQ4OjAxIDIwMDMNCkBA IC0zMSw2ICszMSw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+DQogI2luY2x1ZGUg PGxpbnV4L3N5c2N0bC5oPg0KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4NCisjaW5jbHVkZSA8bGlu dXgvcHJvY19mcy5oPg0KIA0KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4NCiANCkBAIC01Miw2 ICs1MywxMSBAQCBFWFBPUlRfU1lNQk9MKG5yX3N3YXBfcGFnZXMpOw0KICAqLw0KIHN0cnVjdCB6 b25lICp6b25lX3RhYmxlW01BWF9OUl9aT05FUypNQVhfTlVNTk9ERVNdOw0KIEVYUE9SVF9TWU1C T0woem9uZV90YWJsZSk7DQorI2lmZGVmIENPTkZJR19NRU1IT1RQTFVHVEVTVA0KK2NoYXIgem9u ZV9hY3RpdmVbTUFYX05SX1pPTkVTKk1BWF9OVU1OT0RFU107DQorRVhQT1JUX1NZTUJPTCh6b25l X2FjdGl2ZSk7DQorc3RhdGljIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlX3RyYWNlX2xpc3RbMTBd Ow0KKyNlbmRpZg0KIA0KIHN0YXRpYyBjaGFyICp6b25lX25hbWVzW01BWF9OUl9aT05FU10gPSB7 ICJETUEiLCAiTm9ybWFsIiwgIkhpZ2hNZW0iIH07DQogaW50IG1pbl9mcmVlX2tieXRlcyA9IDEw MjQ7DQpAQCAtNTEyLDkgKzUxOCwyOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmJ1ZmZlcmVkX3Jt cXVldWUoc3RyDQogCQltb2RfcGFnZV9zdGF0ZShwZ2FsbG9jLCAxIDw8IG9yZGVyKTsNCiAJCXBy ZXBfbmV3X3BhZ2UocGFnZSwgb3JkZXIpOw0KIAl9DQorI2lmZGVmIENPTkZJR19NRU1IT1RQTFVH VEVTVA0KKwlpZiAoISB6b25lX2FjdGl2ZVtwYWdlLT5mbGFncyA+PiBaT05FX1NISUZUXSkNCisJ CUJVRygpOw0KKyNlbmRpZg0KIAlyZXR1cm4gcGFnZTsNCiB9DQogDQorI2lmZGVmIENPTkZJR19N RU1IT1RQTFVHVEVTVA0KK2ludA0KK3pvbmVfYWN0aXZlcChjb25zdCBzdHJ1Y3Qgem9uZSAqeikN Cit7DQorCWludCBpOw0KKw0KKwlmb3IoaSA9IDA7IDsgaSsrKSB7DQorCQlpZiAoem9uZV90YWJs ZVtpXSA9PSB6KQ0KKwkJCXJldHVybiB6b25lX2FjdGl2ZVtpXTsNCisJCWlmICh6b25lX3RhYmxl W2ldID09IE5VTEwpDQorCQkJQlVHKCk7DQorCX0NCit9DQorI2VuZGlmDQorDQogLyoNCiAgKiBU aGlzIGlzIHRoZSAnaGVhcnQnIG9mIHRoZSB6b25lZCBidWRkeSBhbGxvY2F0b3IuDQogICoNCkBA IC01NDQsNiArNTY5LDcgQEAgX19hbGxvY19wYWdlcyh1bnNpZ25lZCBpbnQgZ2ZwX21hc2ssIHVu cw0KIAlpbnQgaTsNCiAJaW50IGNvbGQ7DQogCWludCBkb19yZXRyeTsNCisJdW5zaWduZWQgbG9u ZyBmbGFnOw0KIA0KIAltaWdodF9zbGVlcF9pZih3YWl0KTsNCiANCkBAIC01NTEsMTAgKzU3Nywx MyBAQCBfX2FsbG9jX3BhZ2VzKHVuc2lnbmVkIGludCBnZnBfbWFzaywgdW5zDQogCWlmIChnZnBf bWFzayAmIF9fR0ZQX0NPTEQpDQogCQljb2xkID0gMTsNCiANCisJcmVhZF9sb2NrX2lycXNhdmUo JnpvbmVsaXN0LT56b25lbGlzdF9sb2NrLGZsYWcpOw0KIAl6b25lcyA9IHpvbmVsaXN0LT56b25l czsgIC8qIHRoZSBsaXN0IG9mIHpvbmVzIHN1aXRhYmxlIGZvciBnZnBfbWFzayAqLw0KIAljbGFz c3pvbmUgPSB6b25lc1swXTsgDQotCWlmIChjbGFzc3pvbmUgPT0gTlVMTCkgICAgLyogbm8gem9u ZXMgaW4gdGhlIHpvbmVsaXN0ICovDQorCWlmIChjbGFzc3pvbmUgPT0gTlVMTCl7ICAgIC8qIG5v IHpvbmVzIGluIHRoZSB6b25lbGlzdCAqLw0KKwkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmem9u ZWxpc3QtPnpvbmVsaXN0X2xvY2ssZmxhZyk7DQogCQlyZXR1cm4gTlVMTDsNCisJfQ0KIA0KIAkv KiBHbyB0aHJvdWdoIHRoZSB6b25lbGlzdCBvbmNlLCBsb29raW5nIGZvciBhIHpvbmUgd2l0aCBl bm91Z2ggZnJlZSAqLw0KIAltaW4gPSAxVUwgPDwgb3JkZXI7DQpAQCAtNTYyLDYgKzU5MSwxMCBA QCBfX2FsbG9jX3BhZ2VzKHVuc2lnbmVkIGludCBnZnBfbWFzaywgdW5zDQogCQlzdHJ1Y3Qgem9u ZSAqeiA9IHpvbmVzW2ldOw0KIAkJdW5zaWduZWQgbG9uZyBsb2NhbF9sb3c7DQogDQorI2lmZGVm IENPTkZJR19NRU1IT1RQTFVHVEVTVA0KKwkJaWYgKCEgem9uZV9hY3RpdmVwKHopKQ0KKwkJCWNv bnRpbnVlOw0KKyNlbmRpZg0KIAkJLyoNCiAJCSAqIFRoaXMgaXMgdGhlIGZhYmxlZCAnaW5jcmVt ZW50YWwgbWluJy4gV2UgbGV0IHJlYWwtdGltZSB0YXNrcw0KIAkJICogZGlwIHRoZWlyIHJlYWwt dGltZSBwYXdzIGEgbGl0dGxlIGRlZXBlciBpbnRvIHJlc2VydmVzLg0KQEAgLTU4OSw2ICs2MjIs MTAgQEAgX19hbGxvY19wYWdlcyh1bnNpZ25lZCBpbnQgZ2ZwX21hc2ssIHVucw0KIAlmb3IgKGkg PSAwOyB6b25lc1tpXSAhPSBOVUxMOyBpKyspIHsNCiAJCXVuc2lnbmVkIGxvbmcgbG9jYWxfbWlu Ow0KIAkJc3RydWN0IHpvbmUgKnogPSB6b25lc1tpXTsNCisjaWZkZWYgQ09ORklHX01FTUhPVFBM VUdURVNUDQorCQlpZiAoISB6b25lX2FjdGl2ZXAoeikpDQorCQkJY29udGludWU7DQorI2VuZGlm DQogDQogCQlsb2NhbF9taW4gPSB6LT5wYWdlc19taW47DQogCQlpZiAoZ2ZwX21hc2sgJiBfX0dG UF9ISUdIKQ0KQEAgLTYxMiw2ICs2NDksMTAgQEAgcmViYWxhbmNlOg0KIAkJLyogZ28gdGhyb3Vn aCB0aGUgem9uZWxpc3QgeWV0IGFnYWluLCBpZ25vcmluZyBtaW5zICovDQogCQlmb3IgKGkgPSAw OyB6b25lc1tpXSAhPSBOVUxMOyBpKyspIHsNCiAJCQlzdHJ1Y3Qgem9uZSAqeiA9IHpvbmVzW2ld Ow0KKyNpZmRlZiBDT05GSUdfTUVNSE9UUExVR1RFU1QNCisJCQlpZiAoISB6b25lX2FjdGl2ZXAo eikpDQorCQkJCWNvbnRpbnVlOw0KKyNlbmRpZg0KIA0KIAkJCXBhZ2UgPSBidWZmZXJlZF9ybXF1 ZXVlKHosIG9yZGVyLCBjb2xkKTsNCiAJCQlpZiAocGFnZSkNCkBAIC02NjgsNiArNzA5LDcgQEAg cmViYWxhbmNlOg0KIAl9DQogDQogbm9wYWdlOg0KKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ6 b25lbGlzdC0+em9uZWxpc3RfbG9jayxmbGFnKTsNCiAJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9O T1dBUk4pKSB7DQogCQlwcmludGsoIiVzOiBwYWdlIGFsbG9jYXRpb24gZmFpbHVyZS4iDQogCQkJ IiBvcmRlcjolZCwgbW9kZToweCV4XG4iLA0KQEAgLTY3Niw2ICs3MTgsMjQgQEAgbm9wYWdlOg0K IAlyZXR1cm4gTlVMTDsNCiBnb3RfcGc6DQogCWtlcm5lbF9tYXBfcGFnZXMocGFnZSwgMSA8PCBv cmRlciwgMSk7DQorI2lmIDEgLy8gZGVidWcNCisJLyogVmFsaWRhdGUgcGFnZSAqLw0KKwl7DQor CQlzdHJ1Y3Qgem9uZSAqeiA9IHBhZ2Vfem9uZShwYWdlKTsNCisJCWludCBpZHggPSBwYWdlIC0g ei0+em9uZV9tZW1fbWFwOw0KKwkJaWYgKGlkeCA8IDAgfHwgaWR4ID49IHotPnNwYW5uZWRfcGFn ZXMpIHsNCisJCQlwcmludGsoIjB4JTA4eCAlZFxuIiwgKGludCkocGFnZS0+ZmxhZ3MgPj4gWk9O RV9TSElGVCksIGlkeCk7DQorCQkJcmVhZF91bmxvY2soJnpvbmVsaXN0LT56b25lbGlzdF9sb2Nr KTsNCisJCQlCVUcoKTsNCisJCX0NCisJfQ0KKyNlbmRpZg0KKyNpZmRlZiBDT05GSUdfTUVNSE9U UExVR1RFU1QNCisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmem9uZWxpc3QtPnpvbmVsaXN0X2xv Y2ssZmxhZyk7DQorCWlmICghIHpvbmVfYWN0aXZlW3BhZ2UtPmZsYWdzID4+IFpPTkVfU0hJRlRd KXsNCisJCUJVRygpOw0KKwl9DQorI2VuZGlmDQogCXJldHVybiBwYWdlOw0KIH0NCiANCkBAIC0x MDQ2LDcgKzExMDYsMTEgQEAgdm9pZCBzaG93X2ZyZWVfYXJlYXModm9pZCkNCiAvKg0KICAqIEJ1 aWxkcyBhbGxvY2F0aW9uIGZhbGxiYWNrIHpvbmUgbGlzdHMuDQogICovDQorI2lmZGVmIENPTkZJ R19NRU1IT1RQTFVHVEVTVA0KK3N0YXRpYyBpbnQgYnVpbGRfem9uZWxpc3RzX25vZGUocGdfZGF0 YV90ICpwZ2RhdCwgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IGosIGludCBrKQ0KKyNl bHNlDQogc3RhdGljIGludCBfX2luaXQgYnVpbGRfem9uZWxpc3RzX25vZGUocGdfZGF0YV90ICpw Z2RhdCwgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IGosIGludCBrKQ0KKyNlbmRpZg0K IHsNCiAJc3dpdGNoIChrKSB7DQogCQlzdHJ1Y3Qgem9uZSAqem9uZTsNCkBAIC0xMDc2LDYgKzEx NDAsOSBAQCBzdGF0aWMgaW50IF9faW5pdCBidWlsZF96b25lbGlzdHNfbm9kZShwDQogc3RhdGlj IHZvaWQgX19pbml0IGJ1aWxkX3pvbmVsaXN0cyhwZ19kYXRhX3QgKnBnZGF0KQ0KIHsNCiAJaW50 IGksIGosIGssIG5vZGUsIGxvY2FsX25vZGU7DQorI2lmZGVmIENPTkZJR19NRU1IT1RQTFVHVEVT VA0KKwlzdHJ1Y3Qgem9uZSAqem9uZTsNCisjZW5kaWYNCiANCiAJbG9jYWxfbm9kZSA9IHBnZGF0 LT5ub2RlX2lkOw0KIAlwcmludGsoIkJ1aWxkaW5nIHpvbmVsaXN0IGZvciBub2RlIDogJWRcbiIs IGxvY2FsX25vZGUpOw0KQEAgLTEwOTIsNiArMTE1OSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBi dWlsZF96b25lbGlzdHMocGdfZGENCiAJCWlmIChpICYgX19HRlBfRE1BKQ0KIAkJCWsgPSBaT05F X0RNQTsNCiANCisjaWZuZGVmIENPTkZJR19NRU1IT1RQTFVHVEVTVA0KICAJCWogPSBidWlsZF96 b25lbGlzdHNfbm9kZShwZ2RhdCwgem9uZWxpc3QsIGosIGspOw0KICAJCS8qDQogIAkJICogTm93 IHdlIGJ1aWxkIHRoZSB6b25lbGlzdCBzbyB0aGF0IGl0IGNvbnRhaW5zIHRoZSB6b25lcw0KQEAg LTExMDcsNiArMTE3NSwyNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfem9uZWxpc3RzKHBn X2RhDQogIAkJCWogPSBidWlsZF96b25lbGlzdHNfbm9kZShOT0RFX0RBVEEobm9kZSksIHpvbmVs aXN0LCBqLCBrKTsNCiAgDQogCQl6b25lbGlzdC0+em9uZXNbaisrXSA9IE5VTEw7DQorI2Vsc2UN CisJCXJ3bG9ja19pbml0KCZ6b25lbGlzdC0+em9uZWxpc3RfbG9jayk7DQorCQlmb3IoOyBrID49 IDA7IGstLSkgew0KKwkJCXpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGs7DQorCQkJaWYgKCF6 b25lX2FjdGl2ZXAoem9uZSkpDQorCQkJCWNvbnRpbnVlOw0KKwkJCWlmICh6b25lLT5wcmVzZW50 X3BhZ2VzKQ0KKwkJCQl6b25lbGlzdC0+em9uZXNbaisrXSA9IHpvbmU7DQorCQkJZm9yIChub2Rl ID0gbG9jYWxfbm9kZSArIDE7IG5vZGUgPCBudW1ub2Rlczsgbm9kZSsrKSB7DQorCQkJCXpvbmUg PSBOT0RFX0RBVEEobm9kZSktPm5vZGVfem9uZXMgKyBrOw0KKwkJCQlpZiAoem9uZV9hY3RpdmVw KHpvbmUpICYmIHpvbmUtPnByZXNlbnRfcGFnZXMpDQorCQkJCQl6b25lbGlzdC0+em9uZXNbaisr XSA9IHpvbmU7DQorCQkJfQ0KKwkJCWZvciAobm9kZSA9IDA7IG5vZGUgPCBsb2NhbF9ub2RlOyBu b2RlKyspIHsNCisJCQkJem9uZSA9IE5PREVfREFUQShub2RlKS0+bm9kZV96b25lcyArIGs7DQor CQkJCWlmICh6b25lX2FjdGl2ZXAoem9uZSkgJiYgem9uZS0+cHJlc2VudF9wYWdlcykNCisJCQkJ CXpvbmVsaXN0LT56b25lc1tqKytdID0gem9uZTsNCisJCQl9DQorCQl9DQorI2VuZGlmDQogCX0g DQogfQ0KIA0KQEAgLTExNjIsOCArMTI1MCwxNCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxv bmcgd2FpdF90YWJsZV9iDQogDQogI2RlZmluZSBMT05HX0FMSUdOKHgpICgoKHgpKyhzaXplb2Yo bG9uZykpLTEpJn4oKHNpemVvZihsb25nKSktMSkpDQogDQorI2lmIENPTkZJR19NRU1IT1RQTFVH VEVTVA0KK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZV96b25lX3RvdGFscGFnZXMoc3RydWN0IHBnbGlz dF9kYXRhICpwZ2RhdCwNCisJCXVuc2lnbmVkIGxvbmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxv bmcgKnpob2xlc19zaXplKQ0KKyNlbHNlDQogc3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV96 b25lX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwNCiAJCXVuc2lnbmVkIGxv bmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgKnpob2xlc19zaXplKQ0KKyNlbmRpZg0KKw0K IHsNCiAJdW5zaWduZWQgbG9uZyByZWFsdG90YWxwYWdlcywgdG90YWxwYWdlcyA9IDA7DQogCWlu dCBpOw0KQEAgLTExOTksNiArMTI5MywyMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY2FsY3VsYXRl X3pvbmVfYml0bWFwDQogCX0NCiB9DQogDQorI2lmIENPTkZJR19NRU1IT1RQTFVHVEVTVA0KK3N0 YXRpYyB2b2lkIGNhbGN1bGF0ZV9hZGR6b25lX2JpdG1hcChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBn ZGF0LCB1bnNpZ25lZCBsb25nICp6b25lc19zaXplKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBzaXpl ID0gem9uZXNfc2l6ZVtaT05FX0hJR0hNRU1dOw0KKw0KKwlzaXplID0gTE9OR19BTElHTigoc2l6 ZSArIDcpID4+IDMpOw0KKwlpZiAoc2l6ZSkgew0KKwkJcGdkYXQtPnZhbGlkX2FkZHJfYml0bWFw ID0gKHVuc2lnbmVkIGxvbmcgKilrbWFsbG9jKHNpemUsR0ZQX0tFUk5FTCk7DQorCQltZW1zZXQo cGdkYXQtPnZhbGlkX2FkZHJfYml0bWFwLCAwLCBzaXplKTsNCisJfQ0KK30NCisNCisjZW5kaWYN CisNCiAvKg0KICAqIEluaXRpYWxseSBhbGwgcGFnZXMgYXJlIHJlc2VydmVkIC0gZnJlZSBvbmVz IGFyZSBmcmVlZA0KICAqIHVwIGJ5IGZyZWVfYWxsX2Jvb3RtZW0oKSBvbmNlIHRoZSBlYXJseSBi b290IHByb2Nlc3MgaXMNCkBAIC0xMjUyLDYgKzEzNjAsNDUgQEAgc3RhdGljIHZvaWQgX19pbml0 IGZyZWVfYXJlYV9pbml0X2NvcmUocw0KIAkJdW5zaWduZWQgbG9uZyBiYXRjaDsNCiANCiAJCXpv bmVfdGFibGVbbmlkICogTUFYX05SX1pPTkVTICsgal0gPSB6b25lOw0KKyNpZmRlZiBDT05GSUdf TUVNSE9UUExVR1RFU1QNCisJCQkJCQkJCQkJLyogb25seSBub2RlIDAgaXMgYWN0aXZlICovDQor CQlpZiAoIG5pZCApeyAJCQkJCQkJLyogIG5vZGUgMS0uLi4gYXJlIG5vZGUgYWN0aXZlICovDQor CQkJCQkJCQkJCS8qIFhYWCA6IFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQuICovDQorCQkJem9uZV9h Y3RpdmVbbmlkICogTUFYX05SX1pPTkVTICsgaiBdID0gMDsNCisJCQl6b25lLT5zcGFubmVkX3Bh Z2VzID0gMDsNCisJCQl6b25lLT5wcmVzZW50X3BhZ2VzID0gMDsNCisJCQl6b25lLT5uYW1lID0g em9uZV9uYW1lc1tqXTsNCisJCQlzcGluX2xvY2tfaW5pdCgmem9uZS0+bG9jayk7DQorCQkJc3Bp bl9sb2NrX2luaXQoJnpvbmUtPmxydV9sb2NrKTsNCisJCQl6b25lLT56b25lX3BnZGF0ID0gcGdk YXQ7DQorCQkJem9uZS0+ZnJlZV9wYWdlcyA9IDA7DQorCQkJZm9yIChjcHUgPSAwOyBjcHUgPCBO Ul9DUFVTOyBjcHUrKykgew0KKwkJCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOw0KKw0KKwkJ CQlwY3AgPSAmem9uZS0+cGFnZXNldFtjcHVdLnBjcFswXTsJLyogaG90ICovDQorCQkJCXBjcC0+ Y291bnQgPSAwOw0KKwkJCQlwY3AtPmxvdyA9IDA7DQorCQkJCXBjcC0+aGlnaCA9IDA7DQorCQkJ CXBjcC0+YmF0Y2ggPSAwOw0KKwkJCQlJTklUX0xJU1RfSEVBRCgmcGNwLT5saXN0KTsNCisNCisJ CQkJcGNwID0gJnpvbmUtPnBhZ2VzZXRbY3B1XS5wY3BbMV07CS8qIGNvbGQgKi8NCisJCQkJcGNw LT5jb3VudCA9IDA7DQorCQkJCXBjcC0+bG93ID0gMDsNCisJCQkJcGNwLT5oaWdoID0gMDsNCisJ CQkJcGNwLT5iYXRjaCA9IDA7DQorCQkJCUlOSVRfTElTVF9IRUFEKCZwY3AtPmxpc3QpOw0KKwkJ CX0NCisJCQlJTklUX0xJU1RfSEVBRCgmem9uZS0+YWN0aXZlX2xpc3QpOw0KKwkJCUlOSVRfTElT VF9IRUFEKCZ6b25lLT5pbmFjdGl2ZV9saXN0KTsNCisJCQlhdG9taWNfc2V0KCZ6b25lLT5yZWZp bGxfY291bnRlciwgMCk7DQorCQkJem9uZS0+bnJfYWN0aXZlID0gMDsNCisJCQl6b25lLT5ucl9p bmFjdGl2ZSA9IDA7DQorDQorCQkJY29udGludWU7DQorCQl9DQorCQl6b25lX2FjdGl2ZVtuaWQg KiBNQVhfTlJfWk9ORVMgKyBqIF0gPSAgMSA7CQkvKiBvbmx5IG5vZGUgMCBpcyBhY3RpdmUgKi8N CisjZW5kaWYNCiAJCXJlYWxzaXplID0gc2l6ZSA9IHpvbmVzX3NpemVbal07DQogCQlpZiAoemhv bGVzX3NpemUpDQogCQkJcmVhbHNpemUgLT0gemhvbGVzX3NpemVbal07DQpAQCAtMTI5NSw4ICsx NDQyLDggQEAgc3RhdGljIHZvaWQgX19pbml0IGZyZWVfYXJlYV9pbml0X2NvcmUocw0KIAkJCXBj cC0+YmF0Y2ggPSAxICogYmF0Y2g7DQogCQkJSU5JVF9MSVNUX0hFQUQoJnBjcC0+bGlzdCk7DQog CQl9DQotCQlwcmludGsoIiAgJXMgem9uZTogJWx1IHBhZ2VzLCBMSUZPIGJhdGNoOiVsdVxuIiwN Ci0JCQkJem9uZV9uYW1lc1tqXSwgcmVhbHNpemUsIGJhdGNoKTsNCisJCXByaW50aygiICAlcyB6 b25lOiAlbHUgcGFnZXMsIExJRk8gYmF0Y2g6JWx1IHN0YXJ0OiVsdVxuIiwNCisJCQkJem9uZV9u YW1lc1tqXSwgcmVhbHNpemUsIGJhdGNoLCB6b25lX3N0YXJ0X3Bmbik7DQogCQlJTklUX0xJU1Rf SEVBRCgmem9uZS0+YWN0aXZlX2xpc3QpOw0KIAkJSU5JVF9MSVNUX0hFQUQoJnpvbmUtPmluYWN0 aXZlX2xpc3QpOw0KIAkJYXRvbWljX3NldCgmem9uZS0+cmVmaWxsX2NvdW50ZXIsIDApOw0KQEAg LTEzODEsMTQgKzE1MjgsMjIgQEAgdm9pZCBfX2luaXQgZnJlZV9hcmVhX2luaXRfbm9kZShpbnQg bmlkLA0KIAlwZ2RhdC0+bm9kZV9pZCA9IG5pZDsNCiAJcGdkYXQtPm5vZGVfc3RhcnRfcGZuID0g bm9kZV9zdGFydF9wZm47DQogCWNhbGN1bGF0ZV96b25lX3RvdGFscGFnZXMocGdkYXQsIHpvbmVz X3NpemUsIHpob2xlc19zaXplKTsNCisjaWZkZWYgQ09ORklHX01FTUhPVFBMVUdURVNUDQorCWlm ICghbm9kZV9tZW1fbWFwICYmICFuaWQpIHsNCisjZWxzZQ0KIAlpZiAoIW5vZGVfbWVtX21hcCkg ew0KKyNlbmRpZg0KIAkJc2l6ZSA9IChwZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzICsgMSkgKiBz aXplb2Yoc3RydWN0IHBhZ2UpOw0KIAkJbm9kZV9tZW1fbWFwID0gYWxsb2NfYm9vdG1lbV9ub2Rl KHBnZGF0LCBzaXplKTsNCiAJfQ0KIAlwZ2RhdC0+bm9kZV9tZW1fbWFwID0gbm9kZV9tZW1fbWFw Ow0KIA0KIAlmcmVlX2FyZWFfaW5pdF9jb3JlKHBnZGF0LCB6b25lc19zaXplLCB6aG9sZXNfc2l6 ZSk7DQorI2lmZGVmIENPTkZJR19NRU1IT1RQTFVHVEVTVA0KKwlpZighbmlkKW1lbWJsa19zZXRf b25saW5lKG5vZGVfdG9fbWVtYmxrKG5pZCkpOwkJLyogb25seSBub2RlIDAgaXMgb25saW5lICov DQorI2Vsc2UNCiAJbWVtYmxrX3NldF9vbmxpbmUobm9kZV90b19tZW1ibGsobmlkKSk7DQorI2Vu ZGlmDQogDQogCWNhbGN1bGF0ZV96b25lX2JpdG1hcChwZ2RhdCwgem9uZXNfc2l6ZSk7DQogfQ0K QEAgLTE2NDQsMyArMTc5OSwzODcgQEAgaW50IG1pbl9mcmVlX2tieXRlc19zeXNjdGxfaGFuZGxl cihjdGxfdA0KIAlzZXR1cF9wZXJfem9uZV9wYWdlc19taW4oKTsNCiAJcmV0dXJuIDA7DQogfQ0K Kw0KKyNpZmRlZiBDT05GSUdfTUVNSE9UUExVR1RFU1QNCitzdGF0aWMgdm9pZCByZWJ1aWxkX2Fs bF96b25lbGlzdCh1bnNpZ25lZCBsb25nIG5pZCkNCit7DQorCXN0cnVjdCB6b25lbGlzdCAqem9u ZWxpc3Q7DQorCXVuc2lnbmVkIGxvbmcgbm9kZSwgcF9ub2RlLCBqPTA7DQorDQorDQorCXpvbmVs aXN0ID0gTk9ERV9EQVRBKG5pZCktPm5vZGVfem9uZWxpc3RzICsgWk9ORV9ISUdITUVNOw0KKwl3 cml0ZV9sb2NrKCZ6b25lbGlzdC0+em9uZWxpc3RfbG9jayk7DQorCW1lbXNldCh6b25lbGlzdCwg MCwgc2l6ZW9mKCp6b25lbGlzdCkpOw0KKw0KKwkvKiBidWlsZCB6b25lbGlzdCBmb3IgYWRkZWQg em9uZSAqLw0KKwlqPSBidWlsZF96b25lbGlzdHNfbm9kZSggTk9ERV9EQVRBKG5pZCksIHpvbmVs aXN0LCBqLCBaT05FX0hJR0hNRU0pOw0KKw0KKwlmb3IgKCBub2RlID0gbmlkICsgMTsgbm9kZSA8 IG51bW5vZGVzOyBub2RlKyspDQorCQlqID0gYnVpbGRfem9uZWxpc3RzX25vZGUoIE5PREVfREFU QShub2RlKSwgem9uZWxpc3QsIGosIFpPTkVfSElHSE1FTSk7DQorCWZvciAobm9kZSA9IDA7IG5v ZGUgPCBuaWQgOyBub2RlKyspDQorCQlqID0gYnVpbGRfem9uZWxpc3RzX25vZGUoIE5PREVfREFU QShub2RlKSwgem9uZWxpc3QsIGosIFpPTkVfSElHSE1FTSk7DQorDQorDQorCS8qIHJlYnVpbGQg em9uZWxpc3QgZm9yIG90aGVyIG5vZGUgKi8NCisJZm9yKCBwX25vZGUgPSAwOyBwX25vZGUgPCBu dW1ub2RlcyA7IHBfbm9kZSsrKXsNCisJCXpvbmVsaXN0ID0gTk9ERV9EQVRBKHBfbm9kZSktPm5v ZGVfem9uZWxpc3RzICsgWk9ORV9ISUdITUVNOw0KKwkJaj0wOw0KKw0KKwkJaiA9IGJ1aWxkX3pv bmVsaXN0c19ub2RlKCBOT0RFX0RBVEEocF9ub2RlKSwgem9uZWxpc3QsIGosIFpPTkVfSElHSE1F TSk7DQorDQorCQlmb3IgKCBub2RlID0gcF9ub2RlICsgMSA7IG5vZGUgPCBudW1ub2RlcyA7IG5v ZGUrKyApDQorCQkJaiA9IGJ1aWxkX3pvbmVsaXN0c19ub2RlKCBOT0RFX0RBVEEobm9kZSksIHpv bmVsaXN0LCBqLCBaT05FX0hJR0hNRU0pOw0KKwkJZm9yICggbm9kZSA9IDA7IG5vZGUgPCBwX25v ZGU7IG5vZGUrKyApDQorCQkJaiA9IGJ1aWxkX3pvbmVsaXN0c19ub2RlKCBOT0RFX0RBVEEobm9k ZSksIHpvbmVsaXN0LCBqLCBaT05FX0hJR0hNRU0pOw0KKwkJem9uZWxpc3QtPnpvbmVzW2orK10g PSBOVUxMOw0KKw0KKwl9DQorCXdyaXRlX3VubG9jaygmem9uZWxpc3QtPnpvbmVsaXN0X2xvY2sp Ow0KK30NCisNCisNCitzdGF0aWMgdm9pZCBmcmVlX2FyZWFfYWRkX2NvcmUoc3RydWN0IHBnbGlz dF9kYXRhICpwZ2RhdCwNCisJCXVuc2lnbmVkIGxvbmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxv bmcgKnpob2xlc19zaXplKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBpOw0KKwljb25zdCB1bnNpZ25l ZCBsb25nIHpvbmVfcmVxdWlyZWRfYWxpZ25tZW50ID0gMVVMIDw8IChNQVhfT1JERVItMSk7DQor CWludCBjcHUsIG5pZCA9IHBnZGF0LT5ub2RlX2lkOw0KKwlzdHJ1Y3QgcGFnZSAqbG1lbV9tYXAg PSBwZ2RhdC0+bm9kZV9tZW1fbWFwOw0KKwl1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuID0g cGdkYXQtPm5vZGVfc3RhcnRfcGZuOw0KKw0KKwlwZ2RhdC0+bnJfem9uZXMgPSAwOw0KKwlpbml0 X3dhaXRxdWV1ZV9oZWFkKCZwZ2RhdC0+a3N3YXBkX3dhaXQpOw0KKw0KKwl7DQorCQlzdHJ1Y3Qg em9uZSAqem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgWk9ORV9ISUdITUVNOw0KKwkJdW5zaWdu ZWQgbG9uZyBzaXplLCByZWFsc2l6ZTsNCisJCXVuc2lnbmVkIGxvbmcgYmF0Y2g7DQorDQorCQl6 b25lX3RhYmxlW25pZCAqIE1BWF9OUl9aT05FUyArIFpPTkVfSElHSE1FTV0gPSB6b25lOw0KKw0K KwkJcmVhbHNpemUgPSBzaXplID0gem9uZXNfc2l6ZVtaT05FX0hJR0hNRU1dOw0KKwkJaWYgKHpo b2xlc19zaXplKQ0KKwkJCXJlYWxzaXplIC09IHpob2xlc19zaXplW1pPTkVfSElHSE1FTV07DQor DQorCQl6b25lLT5zcGFubmVkX3BhZ2VzID0gc2l6ZTsNCisJCXpvbmUtPnByZXNlbnRfcGFnZXMg PSByZWFsc2l6ZTsNCisJCXpvbmUtPm5hbWUgPSB6b25lX25hbWVzW1pPTkVfSElHSE1FTV07DQor CQlzcGluX2xvY2tfaW5pdCgmem9uZS0+bG9jayk7DQorCQlzcGluX2xvY2tfaW5pdCgmem9uZS0+ bHJ1X2xvY2spOw0KKwkJem9uZS0+em9uZV9wZ2RhdCA9IHBnZGF0Ow0KKwkJem9uZS0+ZnJlZV9w YWdlcyA9IDA7DQorDQorCQkvKg0KKwkJICogVGhlIHBlci1jcHUtcGFnZXMgcG9vbHMgYXJlIHNl dCB0byBhcm91bmQgMTAwMHRoIG9mIHRoZQ0KKwkJICogc2l6ZSBvZiB0aGUgem9uZS4gIEJ1dCBu byBtb3JlIHRoYW4gMS80IG9mIGEgbWVnIC0gdGhlcmUncw0KKwkJICogbm8gcG9pbnQgaW4gZ29p bmcgYmV5b25kIHRoZSBzaXplIG9mIEwyIGNhY2hlLg0KKwkJICoNCisJCSAqIE9LLCBzbyB3ZSBk b24ndCBrbm93IGhvdyBiaWcgdGhlIGNhY2hlIGlzLiAgU28gZ3Vlc3MuDQorCQkgKi8NCisJCWJh dGNoID0gem9uZS0+cHJlc2VudF9wYWdlcyAvIDEwMjQ7DQorCQlpZiAoYmF0Y2ggKiBQQUdFX1NJ WkUgPiAyNTYgKiAxMDI0KQ0KKwkJCWJhdGNoID0gKDI1NiAqIDEwMjQpIC8gUEFHRV9TSVpFOw0K KwkJYmF0Y2ggLz0gNDsJCS8qIFdlIGVmZmVjdGl2ZWx5ICo9IDQgYmVsb3cgKi8NCisJCWlmIChi YXRjaCA8IDEpDQorCQkJYmF0Y2ggPSAxOw0KKw0KKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9D UFVTOyBjcHUrKykgew0KKwkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7DQorDQorCQkJcGNw ID0gJnpvbmUtPnBhZ2VzZXRbY3B1XS5wY3BbMF07CS8qIGhvdCAqLw0KKwkJCXBjcC0+Y291bnQg PSAwOw0KKwkJCXBjcC0+bG93ID0gMiAqIGJhdGNoOw0KKwkJCXBjcC0+aGlnaCA9IDYgKiBiYXRj aDsNCisJCQlwY3AtPmJhdGNoID0gMSAqIGJhdGNoOw0KKwkJCUlOSVRfTElTVF9IRUFEKCZwY3At Pmxpc3QpOw0KKw0KKwkJCXBjcCA9ICZ6b25lLT5wYWdlc2V0W2NwdV0ucGNwWzFdOwkvKiBjb2xk ICovDQorCQkJcGNwLT5jb3VudCA9IDA7DQorCQkJcGNwLT5sb3cgPSAwOw0KKwkJCXBjcC0+aGln aCA9IDIgKiBiYXRjaDsNCisJCQlwY3AtPmJhdGNoID0gMSAqIGJhdGNoOw0KKwkJCUlOSVRfTElT VF9IRUFEKCZwY3AtPmxpc3QpOw0KKwkJfQ0KKwkJcHJpbnRrKCIgICVzIHpvbmU6ICVsdSBwYWdl cywgTElGTyBiYXRjaDolbHUgc3RhcnQ6JWx1XG4iLA0KKwkJCQl6b25lX25hbWVzW1pPTkVfSElH SE1FTV0sIHJlYWxzaXplLCBiYXRjaCwgem9uZV9zdGFydF9wZm4pOw0KKwkJSU5JVF9MSVNUX0hF QUQoJnpvbmUtPmFjdGl2ZV9saXN0KTsNCisJCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5pbmFjdGl2 ZV9saXN0KTsNCisJCWF0b21pY19zZXQoJnpvbmUtPnJlZmlsbF9jb3VudGVyLCAwKTsNCisJCXpv bmUtPm5yX2FjdGl2ZSA9IDA7DQorCQl6b25lLT5ucl9pbmFjdGl2ZSA9IDA7DQorDQorCQkvKg0K KwkJICogVGhlIHBlci1wYWdlIHdhaXRxdWV1ZSBtZWNoYW5pc20gdXNlcyBoYXNoZWQgd2FpdHF1 ZXVlcw0KKwkJICogcGVyIHpvbmUuDQorCQkgKi8NCisJCXpvbmUtPndhaXRfdGFibGVfc2l6ZSA9 IHdhaXRfdGFibGVfc2l6ZShzaXplKTsNCisJCXpvbmUtPndhaXRfdGFibGVfYml0cyA9DQorCQkJ d2FpdF90YWJsZV9iaXRzKHpvbmUtPndhaXRfdGFibGVfc2l6ZSk7DQorCQl6b25lLT53YWl0X3Rh YmxlID0gKHdhaXRfcXVldWVfaGVhZF90ICopa21hbGxvYyh6b25lLT53YWl0X3RhYmxlX3NpemUN CisJCQkJCQkqIHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCksIEdGUF9LRVJORUwpOw0KKwkJCQkv KiBYWFg6IHdhaXRfdGFibGUgbWlnaHQgaGF2ZSB0byBiZSBhbGxvY2F0ZSBvd24gbm9kZS4gKi8N CisNCisJCWZvcihpID0gMDsgaSA8IHpvbmUtPndhaXRfdGFibGVfc2l6ZTsgKytpKQ0KKwkJCWlu aXRfd2FpdHF1ZXVlX2hlYWQoem9uZS0+d2FpdF90YWJsZSArIGkpOw0KKw0KKwkJcGdkYXQtPm5y X3pvbmVzID0gWk9ORV9ISUdITUVNKzE7DQorDQorCQl6b25lLT56b25lX21lbV9tYXAgPSBsbWVt X21hcDsNCisJCXpvbmUtPnpvbmVfc3RhcnRfcGZuID0gem9uZV9zdGFydF9wZm47DQorDQorCQlp ZiAoKHpvbmVfc3RhcnRfcGZuKSAmICh6b25lX3JlcXVpcmVkX2FsaWdubWVudC0xKSkNCisJCQlw cmludGsoIkJVRzogd3Jvbmcgem9uZSBhbGlnbm1lbnQsIGl0IHdpbGwgY3Jhc2hcbiIpOw0KKw0K KwkJbWVtbWFwX2luaXRfem9uZShsbWVtX21hcCwgc2l6ZSwgbmlkLCBaT05FX0hJR0hNRU0sIHpv bmVfc3RhcnRfcGZuKTsNCisNCisJCWZvciAoaSA9IDA7IDsgaSsrKSB7DQorCQkJdW5zaWduZWQg bG9uZyBiaXRtYXBfc2l6ZTsNCisNCisJCQlJTklUX0xJU1RfSEVBRCgmem9uZS0+ZnJlZV9hcmVh W2ldLmZyZWVfbGlzdCk7DQorCQkJaWYgKGkgPT0gTUFYX09SREVSLTEpIHsNCisJCQkJem9uZS0+ ZnJlZV9hcmVhW2ldLm1hcCA9IE5VTEw7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisNCisJCQkvKg0K KwkJCSAqIFBhZ2UgYnVkZHkgc3lzdGVtIHVzZXMgImluZGV4ID4+IChpKzEpIiwNCisJCQkgKiB3 aGVyZSAiaW5kZXgiIGlzIGF0IG1vc3QgInNpemUtMSIuDQorCQkJICoNCisJCQkgKiBUaGUgZXh0 cmEgIiszIiBpcyB0byByb3VuZCBkb3duIHRvIGJ5dGUNCisJCQkgKiBzaXplICg4IGJpdHMgcGVy IGJ5dGUgYXNzdW1wdGlvbikuIFRodXMNCisJCQkgKiB3ZSBnZXQgIihzaXplLTEpID4+IChpKzQp IiBhcyB0aGUgbGFzdCBieXRlDQorCQkJICogd2UgY2FuIGFjY2Vzcy4NCisJCQkgKg0KKwkJCSAq IFRoZSAiKzEiIGlzIGJlY2F1c2Ugd2Ugd2FudCB0byByb3VuZCB0aGUNCisJCQkgKiBieXRlIGFs bG9jYXRpb24gdXAgcmF0aGVyIHRoYW4gZG93bi4gU28NCisJCQkgKiB3ZSBzaG91bGQgaGF2ZSBo YWQgYSAiKzciIGJlZm9yZSB3ZSBzaGlmdGVkDQorCQkJICogZG93biBieSB0aHJlZS4gQWxzbywg d2UgaGF2ZSB0byBhZGQgb25lIGFzDQorCQkJICogd2UgYWN0dWFsbHkgX3VzZV8gdGhlIGxhc3Qg Yml0IChpdCdzIFswLG5dDQorCQkJICogaW5jbHVzaXZlLCBub3QgWzAsblspLg0KKwkJCSAqDQor CQkJICogU28gd2UgYWN0dWFsbHkgaGFkICs3KzEgYmVmb3JlIHdlIHNoaWZ0DQorCQkJICogZG93 biBieSAzLiBCdXQgKG4rOCkgPj4gMyA9PSAobiA+PiAzKSArIDENCisJCQkgKiAobW9kdWxvIG92 ZXJmbG93cywgd2hpY2ggd2UgZG8gbm90IGhhdmUpLg0KKwkJCSAqDQorCQkJICogRmluYWxseSwg d2UgTE9OR19BTElHTiBiZWNhdXNlIGFsbCBiaXRtYXANCisJCQkgKiBvcGVyYXRpb25zIGFyZSBv biBsb25ncy4NCisJCQkgKi8NCisJCQliaXRtYXBfc2l6ZSA9IChzaXplLTEpID4+IChpKzQpOw0K KwkJCWJpdG1hcF9zaXplID0gTE9OR19BTElHTihiaXRtYXBfc2l6ZSsxKTsNCisJCQl6b25lLT5m cmVlX2FyZWFbaV0ubWFwID0NCisJCQkgICh1bnNpZ25lZCBsb25nICopIGttYWxsb2MoYml0bWFw X3NpemUsIEdGUF9LRVJORUwpOw0KKwkJCQkvKiBYWFg6IGJpdG1hcCBtaWdodCBoYXZlIHRvIGJl IGFsbG9jYXRlIG93biBub2RlIHRvby4gKi8NCisJCX0NCisJfQ0KK30NCisNCitleHRlcm4gdm9p ZCAqbm9kZV9yZW1hcF9zdGFydF92YWRkcltdOw0KKw0KK3ZvaWQgZnJlZV9hcmVhX2FkZF9ub2Rl KGludCBuaWQsIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsdW5zaWduZWQgbG9uZyAqem9uZXNf c2l6ZSwNCisJCXVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgKnpo b2xlc19zaXplKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBzaXplOw0KKw0KKwljYWxjdWxhdGVfem9u ZV90b3RhbHBhZ2VzKHBnZGF0LCB6b25lc19zaXplLCB6aG9sZXNfc2l6ZSk7DQorDQorCXNpemUg PSAocGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlcyArIDEpICogc2l6ZW9mKHN0cnVjdCBwYWdlKTsN CisJcmVtYXBfYWRkX25vZGVfa3ZhKG5pZCk7DQorDQorCWZyZWVfYXJlYV9hZGRfY29yZShwZ2Rh dCwgem9uZXNfc2l6ZSwgemhvbGVzX3NpemUpOw0KKwljYWxjdWxhdGVfYWRkem9uZV9iaXRtYXAo cGdkYXQsIHpvbmVzX3NpemUpOw0KKw0KK30NCisNCitleHRlcm4gdW5zaWduZWQgbG9uZyBub2Rl X3N0YXJ0X3BmbltdOw0KK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfZW5kX3BmbltdOw0KKw0K K3N0YXRpYyB2b2lkIG5vZGVfZW5hYmxlKHVuc2lnbmVkIGxvbmcgbmlkKQ0KK3sNCisJdW5zaWdu ZWQgbG9uZyBpZHggPSBuaWQgKiBNQVhfTlJfWk9ORVMgKyBaT05FX0hJR0hNRU07DQorCXVuc2ln bmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdID0gIHswLCAwLCAwfTsNCisJdW5zaWdu ZWQgbG9uZyAqemhvbGVzX3NpemU7DQorDQorCWlmIChuaWQgPiBudW1ub2Rlcyl7CQkvKiBYWFgg OiBuaWQgc2hvdWxkIGhhcyBjb250aW51aXR5IG5vdyAqLw0KKwkJCQkJLyogICAgICAgYnV0IGl0 IHNob3VsZCBiZSBjaGFuZ2VkICovDQorCQlwcmludGsoIm5pZD0lZCBpc24mdCBwb3NzaWJsZSB0 byBlbmFibGUgXG4iLG5pZCk7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKG5vZGVfb25saW5l KG5pZCkpew0KKwkJcHJpbnRrKCJuaWQ9JWQgaXMgYWxyZWFkeSBlbmFibGUgXG4iLCBuaWQpOw0K KwkJcmV0dXJuOw0KKwl9DQorDQorCXpvbmVzX3NpemVbWk9ORV9ISUdITUVNXSA9IG5vZGVfZW5k X3BmbltuaWRdIC0gbm9kZV9zdGFydF9wZm5bbmlkXTsNCisJCQkJCS8qIFhYWDogVGhpcyBpbmZv cm1hdGlvbiBzaG91bGQgYmUgZ290IGZyb20gZmlybXdhcmUuDQorCQkJCQkgICAgICAgIEhvd2V2 ZXIsIHRoaXMgaXMgZW11bGF0aW9uLiAqLw0KKwlpZiggIXpvbmVzX3NpemVbWk9ORV9ISUdITUVN XSApew0KKwkJcHJpbnRrKCJuaWQ9JWQgaXMgc2l6ZSAwXG4iLG5pZCk7DQorCQlyZXR1cm47DQor CX0NCisNCisJemhvbGVzX3NpemUgPSBnZXRfemhvbGVzX3NpemUobmlkKTsNCisNCisJZnJlZV9h cmVhX2FkZF9ub2RlKG5pZCwgTk9ERV9EQVRBKG5pZCksIHpvbmVzX3NpemUsIG5vZGVfc3RhcnRf cGZuW25pZF0sIHpob2xlc19zaXplKTsNCisNCisJc2V0dXBfcGVyX3pvbmVfcGFnZXNfbWluKCk7 CS8qIHNldCB1cCBhZ2FpbiAqLw0KKw0KKwlyZWJ1aWxkX2FsbF96b25lbGlzdCggbmlkKTsNCisJ bWVtYmxrX3NldF9vbmxpbmUobm9kZV90b19tZW1ibGsobmlkKSk7DQorCW5vZGVfc2V0X29ubGlu ZShuaWQpOw0KKwl6b25lX2FjdGl2ZVtpZHhdID0gMTsNCisNCit9DQorDQorc3RhdGljIGludCBt aHRlc3RfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50 LA0KKyAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkNCit7DQorCWNoYXIgKnA7DQorCWludCBpLCBs ZW47DQorCWNvbnN0IHN0cnVjdCB6b25lICp6Ow0KKw0KKwlwID0gcGFnZTsNCisJZm9yKGkgPSAw OyA7IGkrKykgew0KKwkJeiA9IHpvbmVfdGFibGVbaV07DQorCQlpZiAoeiA9PSBOVUxMKQ0KKwkJ CWJyZWFrOw0KKwkJaWYgKCEgei0+cHJlc2VudF9wYWdlcykNCisJCQkvKiBza2lwIGVtcHR5IHpv bmUgKi8NCisJCQljb250aW51ZTsNCisJCWxlbiA9IHNwcmludGYocCwgIlpvbmUgJWQ6ICVzYWJs ZWQgZnJlZSAlZCwgYWN0aXZlICVkLCBwcmVzZW50ICVkXG4iLCBpLA0KKwkJICAgIHpvbmVfYWN0 aXZlW2ldID8gImVuIiA6ICJkaXMiLCAoaW50KXotPmZyZWVfcGFnZXMsIChpbnQpei0+bnJfYWN0 aXZlLA0KKwkJICAgIChpbnQpei0+cHJlc2VudF9wYWdlcyk7DQorCQlwICs9IGxlbjsNCisJfQ0K KwlsZW4gPSBwIC0gcGFnZTsNCisNCisJaWYgKGxlbiA8PSBvZmYgKyBjb3VudCkNCisJCSplb2Yg PSAxOw0KKwkqc3RhcnQgPSBwYWdlICsgb2ZmOw0KKwlsZW4gLT0gb2ZmOw0KKwlpZiAobGVuIDwg MCkNCisJCWxlbiA9IDA7DQorCWlmIChsZW4gPiBjb3VudCkNCisJCWxlbiA9IGNvdW50Ow0KKw0K KwlyZXR1cm4gbGVuOw0KK30NCisNCitzdGF0aWMgaW50IG1odGVzdF93cml0ZShzdHJ1Y3QgZmls ZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLA0KKyAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2 b2lkICpkYXRhKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBpZHg7DQorCWNoYXIgYnVmWzY0XSwgKnA7 DQorCWludCBpOw0KKw0KKwlpZiAoY291bnQgPiBzaXplb2YoYnVmKSAtIDEpDQorCQljb3VudCA9 IHNpemVvZihidWYpIC0gMTsNCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3Vu dCkpDQorCQlyZXR1cm4gLUVGQVVMVDsNCisNCisJYnVmW2NvdW50XSA9IDA7DQorDQorCXAgPSBz dHJjaHIoYnVmLCAnICcpOw0KKwlpZiAocCA9PSBOVUxMKQ0KKwkJZ290byBvdXQ7DQorDQorCSpw KysgPSAnXDAnOw0KKwlpZHggPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKTsNCisNCisJaWYg KHN0cmNtcChidWYsICJ0cmFjZSIpID09IDApIHsNCisJCWZvcihpID0gMDsgaSA8IHNpemVvZihw YWdlX3RyYWNlX2xpc3QpIC8NCisJCSAgICBzaXplb2YocGFnZV90cmFjZV9saXN0WzBdKTsgaSsr KQ0KKwkJCWlmIChwYWdlX3RyYWNlX2xpc3RbaV0gPT0gTlVMTCkgew0KKwkJCQlwYWdlX3RyYWNl X2xpc3RbaV0gPSAoc3RydWN0IHBhZ2UgKilpZHg7DQorCQkJCXByaW50aygiYWRkIHRyYWNlICVs eFxuIiwgKHVuc2lnbmVkIGxvbmcpaWR4KTsNCisJCQkJZ290byBvdXQ7DQorCQkJfQ0KKwkJcHJp bnRrKCJwYWdlX3RyYWNlX2xpc3QgaXMgZnVsbCAobm90IGFkZGVkKVxuIik7DQorCQlnb3RvIG91 dDsNCisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAidW50cmFjZSIpID09IDApIHsNCisJCWZvcihp ID0gMDsgaSA8IHNpemVvZihwYWdlX3RyYWNlX2xpc3QpIC8NCisJCSAgICBzaXplb2YocGFnZV90 cmFjZV9saXN0WzBdKTsgaSsrKQ0KKwkJCWlmIChwYWdlX3RyYWNlX2xpc3RbaV0gPT0gKHN0cnVj dCBwYWdlICopaWR4KQ0KKwkJCQlicmVhazsNCisJCWlmIChpID09IHNpemVvZihwYWdlX3RyYWNl X2xpc3QpIC8gc2l6ZW9mKHBhZ2VfdHJhY2VfbGlzdFswXSkpIHsNCisJCQlwcmludGsoIm5vdCBy ZWdpc3RlcmVkXG4iKTsNCisJCQlnb3RvIG91dDsNCisJCX0NCisJCWZvcig7IGkgPCBzaXplb2Yo cGFnZV90cmFjZV9saXN0KSAvDQorCQkgICAgc2l6ZW9mKHBhZ2VfdHJhY2VfbGlzdFswXSkgLSAx OyBpKyspDQorCQkJcGFnZV90cmFjZV9saXN0W2ldID0gcGFnZV90cmFjZV9saXN0W2kgKyAxXTsN CisJCXBhZ2VfdHJhY2VfbGlzdFtpXSA9IE5VTEw7DQorCQlnb3RvIG91dDsNCisJfQ0KKwlpZiAo aWR4ID4gTUFYX05VTU5PREVTKSB7DQorCQlwcmludGsoIkFyZ3VtZW50IG91dCBvZiByYW5nZVxu Iik7DQorCQlnb3RvIG91dDsNCisJfQ0KKwlpZiAoc3RyY21wKGJ1ZiwgImRpc2FibGUiKSA9PSAw KSB7DQorCQlwcmludGsoImRpc2FibGUgbm9kZSA9ICVkXG4iLCAoaW50KWlkeCk7CS8qIFhYWCAq Lw0KKwkJZ290byBvdXQ7DQorCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgInB1cmdlIikgPT0gMCkg ew0KKwkJLyogWFhYICovDQorCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgImVuYWJsZSIpID09IDAp IHsNCisJCXByaW50aygiZW5hYmxlIG5vZGUgPSAlZFxuIiwgKGludClpZHgpOw0KKwkJbm9kZV9l bmFibGUoaWR4KTsNCisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAiYWN0aXZlIikgPT0gMCkgew0K KwkJLyoNCisJCWlmICh6b25lX3RhYmxlW2lkeF0gPT0gTlVMTCkNCisJCQlnb3RvIG91dDsNCisJ CXNwaW5fbG9ja19pcnEoJnpvbmVfdGFibGVbaWR4XS0+bHJ1X2xvY2spOw0KKwkJaSA9IDA7DQor CQlsaXN0X2Zvcl9lYWNoKGwsICZ6b25lX3RhYmxlW2lkeF0tPmFjdGl2ZV9saXN0KSB7DQorCQkJ cHJpbnRrKCIgJWx4IiwgKHVuc2lnbmVkIGxvbmcpbGlzdF9lbnRyeShsLCBzdHJ1Y3QgcGFnZSwg bHJ1KSk7DQorCQkJaSsrOw0KKwkJCWlmIChpID09IDEwKQ0KKwkJCQlicmVhazsNCisJCX0NCisJ CXNwaW5fdW5sb2NrX2lycSgmem9uZV90YWJsZVtpZHhdLT5scnVfbG9jayk7DQorCQlwcmludGso IlxuIik7DQorCQkqLw0KKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJpbnVzZSIpID09IDApIHsN CisJCS8qDQorCQlpZiAoem9uZV90YWJsZVtpZHhdID09IE5VTEwpDQorCQkJZ290byBvdXQ7DQor CQlmb3IoaSA9IDA7IGkgPCB6b25lX3RhYmxlW2lkeF0tPnNwYW5uZWRfcGFnZXM7IGkrKykNCisJ CQlpZiAocGFnZV9jb3VudCgmem9uZV90YWJsZVtpZHhdLT56b25lX21lbV9tYXBbaV0pKQ0KKwkJ CQlwcmludGsoIiAlbHgiLCAodW5zaWduZWQgbG9uZykmem9uZV90YWJsZVtpZHhdLT56b25lX21l bV9tYXBbaV0pOw0KKwkJcHJpbnRrKCJcbiIpOw0KKwkJKi8NCisJfQ0KK291dDoNCisJcmV0dXJu IGNvdW50Ow0KK30NCisNCitzdGF0aWMgaW50IF9faW5pdCBwcm9jbWh0ZXN0X2luaXQodm9pZCkN Cit7DQorCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7DQorDQorCWVudHJ5ID0gY3JlYXRl X3Byb2NfZW50cnkoIm1lbWhvdHBsdWciLCAwLCBOVUxMKTsNCisJaWYgKGVudHJ5ID09IE5VTEwp DQorCQlyZXR1cm4gLTE7DQorDQorCWVudHJ5LT5yZWFkX3Byb2MgPSAmbWh0ZXN0X3JlYWQ7DQor CWVudHJ5LT53cml0ZV9wcm9jID0gJm1odGVzdF93cml0ZTsNCisJcmV0dXJuIDA7DQorfQ0KK19f aW5pdGNhbGwocHJvY21odGVzdF9pbml0KTsNCisNCit2b2lkDQorcGFnZV90cmFjZV9mdW5jKGNv bnN0IHN0cnVjdCBwYWdlICpwLCBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSkgew0KKwlpbnQg aTsNCisNCisJZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHBhZ2VfdHJhY2VfbGlzdCkgLw0KKwkgICAg c2l6ZW9mKHBhZ2VfdHJhY2VfbGlzdFswXSk7IGkrKykgew0KKwkJaWYgKHBhZ2VfdHJhY2VfbGlz dFtpXSA9PSBOVUxMKQ0KKwkJCXJldHVybjsNCisJCWlmIChwYWdlX3RyYWNlX2xpc3RbaV0gPT0g cCkNCisJCQlicmVhazsNCisJfQ0KKwlpZiAoaSA9PSBzaXplb2YocGFnZV90cmFjZV9saXN0KSAv IHNpemVvZihwYWdlX3RyYWNlX2xpc3RbMF0pKQ0KKwkJcmV0dXJuOw0KKw0KKwlwcmludGsoIlBh Z2UgJWx4LCAlcyAlZFxuIiwgKHVuc2lnbmVkIGxvbmcpcCwgZnVuYywgbGluZSk7DQorfQ0KKyNl bmRpZg0K --------_3FCCE5CF57D902BEC008_MULTIPART_MIXED_--