From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <459393DF.9040801@seskion.de> Date: Thu, 28 Dec 2006 10:52:31 +0100 From: Juergen Pfeiffer MIME-Version: 1.0 References: <1167297092.6795.17.camel@getafix.msbmicro.com> In-Reply-To: <1167297092.6795.17.camel@getafix.msbmicro.com> Content-Type: multipart/mixed; boundary="------------090108010108060604080703" Subject: Re: [Bridge] Is bridgeing possible with kernel 2.6.10 List-Id: Linux Ethernet Bridging List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: danny@msbmicro.com, bridge@lists.osdl.org, uclinux-dev@uclinux.org This is a multi-part message in MIME format. --------------090108010108060604080703 Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: 8bit Danny Stemmet schrieb: > Good day Jürgen, > > We're doing work for a client and need bridging of the 2 FEC on > Coldfire 5474. It uses the same driver as the one you mentioned in > your mail to the list. > > I've applied the code changes as you mentioned, but get an error > saying FEC_RCR_PROM is undefined.. > > Is there more I would need to add to the code to get it to work? > > Using LTIB to build the bridge-utils package. > Hi Danny FEC_RCR_PROM is defined in "fec.h". It's quite some time ago, and i also repaired a second problem. In promiscuous mode (allways with bridging), the packet that was sent, was also received by the own receiver. This received own packet made a wrong entry in the bridging tabel. So my second change was to disable receiving while transmitting. Because i do not remember the exact location of my changes, i append a file "fec.tar", including fec.c and fec.h. greetings -- ------------------------------------------------------------------------ Jürgen Pfeiffer * _mailto:j.pfeiffer@seskion.de_ SesKion Softwareentwicklung und System Konzeption GmbH ( : +49-711-9905814 Karlsruher Str. 11/1 Fax: +49-711-9905827 D-70771 Leinfelden-Echterdingen 1 _http://www.seskion.de_ ------------------------------------------------------------------------ --------------090108010108060604080703 Content-Type: application/x-tar; name="fec.tar" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="fec.tar" ZmVjLmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NjQA MDAwMDc2NAAwMDAwMTQ0ADAwMDAwMTEyNjMxADEwNTI0NDIwNTUzADAxMTQ3NgAgMAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHBmZWlm ZmVyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXNlcnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiNp bmNsdWRlIDxsaW51eC9jb25maWcuaD4KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1 ZGUgPGxpbnV4L3NjaGVkLmg+CiNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KI2luY2x1 ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1 ZGUgPGxpbnV4L3RpbWVyLmg+CiNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgojaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+CiNpbmNsdWRlIDxhc20vZG1hLmg+CiNpbmNsdWRlIDxhc20v TUNEX2RtYS5oPgojaW5jbHVkZSA8YXNtL2NvbGRmaXJlLmg+CiNpbmNsdWRlIDxhc20vc3lz X3NyYW0uaD4KI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgojaW5jbHVkZSA8YXNtL2ly cS5oPgojaW5jbHVkZSA8YXNtL201NDg1c2ltLmg+CgojaW5jbHVkZSAiZmVjLmgiCiNpbmNs dWRlICJrczg3MjEuaCIKCiNpZmRlZiAgIENPTkZJR19GRUNfNTQ4eF9FTkFCTEVfRkVDMgoj ZGVmaW5lICAgRkVDXzIKI2VuZGlmCgojZGVmaW5lIFZFUlNJT04gIjAuMTEiCk1PRFVMRV9E RVNDUklQVElPTiggIkZhc3QgRXRoZXJuZXQgQ29udHJvbGxlciBkcml2ZXIgdmVyICIgVkVS U0lPTik7CgoKCi8vIFRpbWVyIHNydWN0dXJlCnN0cnVjdCB0aW1lcl9saXN0IGZlY19yeF90 aW1lciA9IFRJTUVSX0lOSVRJQUxJWkVSKE5VTEwsIDAsIDApOwoKLy8gUHJpdmF0ZSBzdHJ1 Y3R1cmUKc3RydWN0IGZlY19wcml2IHsKCXZvaWQqIGZlY3ByaXZfdHhidWZbRkVDX1RYX0JV Rl9OVU1CRVJdOwkvL0FycmF5IG9mIHRyYW5zbWlzc2lvbiBidWZmZXJzCglNQ0RfYnVmRGVz Y0ZlYyAqZmVjcHJpdl90eGRlc2M7CS8vIEFycmF5IG9mIHRyYW5zbWlzc2lvbiBkZXNjcmlw dG9ycwoJdm9sYXRpbGUgdW5zaWduZWQgaW50IGZlY3ByaXZfY3VycmVudF90eDsJLy8gSW5l eCBvZiB0aGUgdHJhbnNtaXNzaW9uIGRlc2NyaXB0b3IgdGhhdCBpcyB1c2VkIGJ5IERNQQoJ dm9sYXRpbGUgdW5zaWduZWQgaW50IGZlY3ByaXZfbmV4dF90eDsJLy8gSW5leCBvZiB0aGUg dHJhbnNtaXNzaW9uIGRlc2NyaXB0b3IgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbmV3IGRhdGEK CXVuc2lnbmVkIGludCBmZWNwcml2X2N1cnJlbnRfcng7CS8vIEluZGV4IG9mIHRoZSByZWNl cHRpb24gZGVzY3JpcHRvciB0aGF0IGlzIHVzZWQgYnkgRE1BCglNQ0RfYnVmRGVzY0ZlYyAq ZmVjcHJpdl9yeGRlc2M7CQkvLyBBcnJheSBvZiByZWNlcHRpb24gZGVzY3JpcHRvcnMKCXVu c2lnbmVkIGNoYXIgKmZlY3ByaXZfcnhidWY7CQkvLyBBZGRyZXNzIG9mIHJlY2VwdGlvbiBi dWZmZXJzCgl1bnNpZ25lZCBpbnQgZmVjcHJpdl9pbml0aWF0b3Jfcng7CS8vIFJlY2VwdGlv biBETUEgaW5pdGlhdG9yCgl1bnNpZ25lZCBpbnQgZmVjcHJpdl9pbml0aWF0b3JfdHg7CS8v IFRyYW5zbWlzc2lvbiBETUEgaW5pdGlhdG9yCglpbnQgZmVjcHJpdl9mZWNfcnhfY2hhbm5l bDsJLy8gRE1BIHJlY2VwdGlvbiBjaGFubmVsCglpbnQgZmVjcHJpdl9mZWNfdHhfY2hhbm5l bDsJLy8gRE1BIHRyYW5zbWlzc2lvbiBjaGFubmVsCglpbnQgZmVjcHJpdl9yeF9yZXF1ZXN0 b3I7CS8vIERNQSByZWNlcHRpb24gcmVxdWVzdG9yCglpbnQgZmVjcHJpdl90eF9yZXF1ZXN0 b3I7CS8vIERNQSB0cmFuc21pc3Npb24gcmVxdWVzdG9yCgl2b2lkICpmZWNwcml2X2ludGVy cnVwdF9mZWNfcnhfaGFuZGxlcjsJLy8gRE1BIHJlY2VwdGlvbiBoYW5kbGVyCgl2b2lkICpm ZWNwcml2X2ludGVycnVwdF9mZWNfdHhfaGFuZGxlcjsJLy8gRE1BIHRyYW5zbWlzc2lvbiBo YW5kbGVyCgl1bnNpZ25lZCBjaGFyICpmZWNwcml2X21hY19hZGRyOwkvLyBQcml2YXRlIGNv cHkgb2YgRkVDIGFkZHJlc3MKCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIGZlY3ByaXZfc3Rh dDsJLy8gUG9pbnRlciB0byB0aGUgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24KCXNwaW5sb2Nr X3QgZmVjcHJpdl9sb2NrOwoJaW50IGZlY3ByaXZfcnhmbGFnOwoKfTsKCi8vIEZFQyBmdW5j dGlvbnMKaW50IF9faW5pdCBmZWNfaW5pdCh2b2lkKTsKdm9pZCBfX2V4aXQgZmVjX2NsZWFu dXAodm9pZCk7CnN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpmZWNfZ2V0X3N0YXQoc3RydWN0 IG5ldF9kZXZpY2UgKmRldik7CnZvaWQgZmVjX2luaXRpYWxpemVfY29udGludWUoc3RydWN0 IG5ldF9kZXZpY2UgKmRldik7CmludCBmZWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KTsKaW50IGZlY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmQpOwppbnQgZmVjX3R4KHN0 cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwp2b2lkIGZlY19z ZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kKTsKaW50IGZlY19zZXRf bWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7CnZvaWQgZmVj X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CnZvaWQgZmVjX2ludGVycnVw dF9mZWNfdHhfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKdm9pZCBmZWNfaW50 ZXJydXB0X2ZlY19yeF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CnZvaWQgZmVjX2lu dGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3Mg KnJlZ3MpOwp2b2lkIGZlY19pbnRlcnJ1cHRfZmVjX3R4X2hhbmRsZXJfZmVjMCh2b2lkKTsK dm9pZCBmZWNfaW50ZXJydXB0X2ZlY19yeF9oYW5kbGVyX2ZlYzAodm9pZCk7CgpzdHJ1Y3Qg ZmVjX3ByaXYgZmVjX3ByaXZfZmVjMDsJLy8gUHJpdmF0ZSBzdHJ1Y3R1cmUgb2YgRkVDMApz dHJ1Y3QgbmV0X2RldmljZSBmZWNfZGV2X2ZlYzA7CS8vIERldmljZSBzdHJ1Y3R1cmUgb2Yg RkVDMAp1bnNpZ25lZCBjaGFyICpmZWNfcnhidWZfZmVjMDsJLy8gUG9pbnRlciB0byByZWNl cHRpb24gYnVmZmVycwp1bnNpZ25lZCBjaGFyIGZlY19tYWNfYWRkcl9mZWMwWzZdID0geyAw eDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDUwIH07CS8vIERlZmF1bHQgYWRkcmVz cyBvZiBGRUMwCkRFQ0xBUkVfVEFTS0xFVChmZWNfdGFza2xldF9mZWMwLCBmZWNfaW50ZXJy dXB0X2ZlY19yeF9oYW5kbGVyLCAodW5zaWduZWQgbG9uZykmZmVjX2Rldl9mZWMwKTsgLy8g VGFza2xldCAwZiBGRUMwCgojaWZkZWYgICBGRUNfMgpzdHJ1Y3QgZmVjX3ByaXYgZmVjX3By aXZfZmVjMTsJLy8gUHJpdmF0ZSBzdHJ1Y3R1cmUgb2YgRkVDMQpzdHJ1Y3QgbmV0X2Rldmlj ZSBmZWNfZGV2X2ZlYzE7CS8vIFByaXZhdGUgc3RydWN0dXJlIG9mIEZFQzEKdW5zaWduZWQg Y2hhciAqZmVjX3J4YnVmX2ZlYzE7CS8vIFBvaW50ZXIgdG8gcmVjZXB0aW9uIGJ1ZmZlcnMK dW5zaWduZWQgY2hhciBmZWNfbWFjX2FkZHJfZmVjMVs2XSA9IHsgMHgwMCwgMHgxMSwgMHgy MiwgMHgzMywgMHg0NCwgMHg1MSB9OwkvLyBEZWZhdWx0IGFkZHJlc3Mgb2YgRkVDMQpERUNM QVJFX1RBU0tMRVQoZmVjX3Rhc2tsZXRfZmVjMSwgZmVjX2ludGVycnVwdF9mZWNfcnhfaGFu ZGxlciwgKHVuc2lnbmVkIGxvbmcpJmZlY19kZXZfZmVjMSk7IC8vIFRhc2tsZXQgMGYgRkVD MQojZW5kaWYKCiNpZm5kZWYgTU9EVUxFCmludCBmZWNfc3RyX3RvX21hYyggY2hhciAqc3Ry X21hYywgdW5zaWduZWQgY2hhciogYWRkcik7CmludCBfX2luaXQgZmVjX21hY19zZXR1cDAg KGNoYXIgKnMpOwojZW5kaWYKCgojaWZkZWYgICBGRUNfMgp2b2lkIGZlY19pbnRlcnJ1cHRf ZmVjX3R4X2hhbmRsZXJfZmVjMSh2b2lkKTsKdm9pZCBmZWNfaW50ZXJydXB0X2ZlY19yeF9o YW5kbGVyX2ZlYzEodm9pZCk7CgojaWZuZGVmIE1PRFVMRQppbnQgX19pbml0IGZlY19tYWNf c2V0dXAxIChjaGFyICpzKTsKI2VuZGlmCgojZW5kaWYKaW50IGZlY19yZWFkX21paSh1bnNp Z25lZCBpbnQgYmFzZV9hZGRyLCB1bnNpZ25lZCBpbnQgcGEsIHVuc2lnbmVkIGludCByYSwg dW5zaWduZWQgaW50ICpkYXRhKTsKaW50IGZlY193cml0ZV9taWkodW5zaWduZWQgaW50IGJh c2VfYWRkciwgdW5zaWduZWQgaW50IHBhLCB1bnNpZ25lZCBpbnQgcmEsIHVuc2lnbmVkIGlu dCBkYXRhKTsKdm9pZCBmZWNfcnhfdGltZXJfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEp OwoKbW9kdWxlX2luaXQoZmVjX2luaXQpOwptb2R1bGVfZXhpdChmZWNfY2xlYW51cCk7Cl9f c2V0dXAoIm1hYzA9IiwgZmVjX21hY19zZXR1cDApOwoKI2lmZGVmICAgRkVDXzIKX19zZXR1 cCgibWFjMT0iLCBmZWNfbWFjX3NldHVwMSk7CiNlbmRpZgoKLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgoqIE5BTUU6IGluaXRfbW9kdWxlCioKKiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBw ZXJmb3JtcyB0aGUgZ2VuZXJhbCBpbml0aWFsaXphdGlvbiBvZiBGRUMwICYKKiAgICAgICAg ICAgICAgRkVDMQoqCiogUkVUVVJOUzogSWYgbm8gZXJyb3Igb2NjdXJzLCB0aGlzIGZ1bmN0 aW9uIHJldHVybnMgemVyby4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmludCBfX2luaXQgZmVj X2luaXQodm9pZCkKewoKCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwoJcHJpbnRrKCJDb2xkRmly ZSBpbnRlcm5hbCBGRUMgZHJpdmVyIHZlcnNpb24gJXNcbiIsIFZFUlNJT04pOwoKCW1lbXNl dCgmZmVjX3ByaXZfZmVjMCwgMCwgc2l6ZW9mIChzdHJ1Y3QgZmVjX3ByaXYpKTsKI2lmZGVm ICAgRkVDXzIKCW1lbXNldCgmZmVjX3ByaXZfZmVjMSwgMCwgc2l6ZW9mIChzdHJ1Y3QgZmVj X3ByaXYpKTsKI2VuZGlmCgoJLy8gLS0tLS0tLS0gTWVtb3J5IGFsbG9jYXRpb24tLS0tLS0t LQoKCWZlY19yeGJ1Zl9mZWMwID0ga21hbGxvYyhGRUNfUlhfQlVGX05VTUJFUiAqIEZFQ19N QVhCVUZfU0laRSArIDE1LCBHRlBfRE1BKTsKCglpZiAoIWZlY19yeGJ1Zl9mZWMwKQoJCXJl dHVybiAtRU5PTUVNOwoKCW9mZnNldCA9ICgoKHVuc2lnbmVkIGludCl2aXJ0X3RvX3BoeXMo ZmVjX3J4YnVmX2ZlYzApICsgMTUpICYgMHhGRkZGRkZGMCkgLSAodW5zaWduZWQgaW50KXZp cnRfdG9fcGh5cyhmZWNfcnhidWZfZmVjMCk7CgoJZmVjX3ByaXZfZmVjMC5mZWNwcml2X3J4 YnVmID0gKHZvaWQqKSgodW5zaWduZWQgbG9uZylmZWNfcnhidWZfZmVjMCArIG9mZnNldCk7 CgojaWZkZWYgICBGRUNfMgoKCWZlY19yeGJ1Zl9mZWMxID0ga21hbGxvYyhGRUNfUlhfQlVG X05VTUJFUiAqIEZFQ19NQVhCVUZfU0laRSArIDE1LCBHRlBfRE1BKTsKCWlmICghZmVjX3J4 YnVmX2ZlYzEpCgl7CgkJa2ZyZWUoZmVjX3J4YnVmX2ZlYzApOwoJCXJldHVybiAtRU5PTUVN OwoJfQoKCW9mZnNldCA9ICgoKHVuc2lnbmVkIGludCl2aXJ0X3RvX3BoeXMoZmVjX3J4YnVm X2ZlYzEpICsgMTUpICYgMHhGRkZGRkZGMCkgLSAodW5zaWduZWQgaW50KXZpcnRfdG9fcGh5 cyhmZWNfcnhidWZfZmVjMSk7CgoJZmVjX3ByaXZfZmVjMS5mZWNwcml2X3J4YnVmID0gKHZv aWQqKSgodW5zaWduZWQgbG9uZylmZWNfcnhidWZfZmVjMSArIG9mZnNldCk7CgojZW5kaWYK CgkvLyAtLS0tLS0tLSBJbml0aWFsaXplIEZFQzAgLS0tLS0tLS0KCgkvLyBEaXNhYmxlIEZF QzAKCUZFQ19FQ1IoRkVDX0JBU0VfQUREUl9GRUMwKSA9IEZFQ19FQ1JfRElTQUJMRTsKCglt ZW1zZXQoJmZlY19kZXZfZmVjMCwgMCwgc2l6ZW9mIChzdHJ1Y3QgbmV0X2RldmljZSkpOwoK CS8vIFNldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgb2YgRkVDMAoJZmVjX2Rldl9mZWMwLmly cSA9IDY0ICsgSVNDX0ZFQzA7CgoJaWYgKHJlcXVlc3RfaXJxKGZlY19kZXZfZmVjMC5pcnEs IGZlY19pbnRlcnJ1cHRfaGFuZGxlciwgU0FfSU5URVJSVVBULCAiQ29sZEZpcmUgRkVDIDAi LCAmZmVjX2Rldl9mZWMwKSkKCXsKCQlmZWNfZGV2X2ZlYzAuaXJxID0gMDsKCQlwcmludGso IkNhbm5vdCBhbGxvY2F0ZSBGRUMwIElSUSAoMzkpXG4iKTsKCX1lbHNlCgl7CgkJLy8gU2V0 IHRoZSBpbnRlcnJ1cHQgcHJpb3JpdHkgYW5kIGxldmVsIG9mIEZFQzAKCQlNQ0ZfSUNSKElT Q19GRUMwKSA9IElMUF9GRUMwOwoKCQkvLyBFbmFibGUgdGhlIGludGVycnVwdCBvZiBGRUMw CgkJZW5hYmxlX2lycShmZWNfZGV2X2ZlYzAuaXJxKTsKCX0KCgkvLyBJbmlyaWFsaXplIHRo ZSBwb2ludGVycyB0byB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgb2YgRkVDMAoJZmVjX2Rldl9m ZWMwLnByaXYgPSAmZmVjX3ByaXZfZmVjMDsKCgkvLyBTZXQgdGhlIGJhc2UgYWRkcmVzcyBv ZiBGRUMwCglmZWNfZGV2X2ZlYzAuYmFzZV9hZGRyID0gRkVDX0JBU0VfQUREUl9GRUMwOwoK CS8vIFNldCB0aGUgcmVxdWVzdG9yIG51bWJlcnMKCWZlY19wcml2X2ZlYzAuZmVjcHJpdl9y eF9yZXF1ZXN0b3IgPSBETUFfRkVDMF9SWDsKCWZlY19wcml2X2ZlYzAuZmVjcHJpdl90eF9y ZXF1ZXN0b3IgPSBETUFfRkVDMF9UWDsKCgkvLyBTZXQgdGhlIHBvaW50ZXJzIG9mIHRoZSBo YW5kbGVycyBvZiBGRUMwCglmZWNfcHJpdl9mZWMwLmZlY3ByaXZfaW50ZXJydXB0X2ZlY19y eF9oYW5kbGVyID0gZmVjX2ludGVycnVwdF9mZWNfcnhfaGFuZGxlcl9mZWMwOwoJZmVjX3By aXZfZmVjMC5mZWNwcml2X2ludGVycnVwdF9mZWNfdHhfaGFuZGxlciA9IGZlY19pbnRlcnJ1 cHRfZmVjX3R4X2hhbmRsZXJfZmVjMDsKCgkvLyBJbml0aWFsaXplIHRoZSBwb2ludGVyIHRv IHRoZSB0cmFuc21pc3Npb24gYXJyYXkgb2YgRkVDMAoJZmVjX3ByaXZfZmVjMC5mZWNwcml2 X3R4ZGVzYyA9ICh2b2lkKilGRUNfVFhfREVTQ19GRUMwOwoKCS8vIEluaXRpYWxpemUgdGhl IHBvaW50ZXIgdG8gdGhlIHJlY2VwdGlvbiBhcnJheSBvZiBkZXNjcmlwdG9ycwoJZmVjX3By aXZfZmVjMC5mZWNwcml2X3J4ZGVzYyA9ICh2b2lkKilGRUNfUlhfREVTQ19GRUMwOwoKCS8v IFNldCB0aGUgIE1BQyBhZGRyZXNzIHRvIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBvZiBGRUMw CglmZWNfcHJpdl9mZWMwLmZlY3ByaXZfbWFjX2FkZHIgPSBmZWNfbWFjX2FkZHJfZmVjMDsK CgkvLyBDb250aW51ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgRkVDMAoJZmVjX2luaXRpYWxp emVfY29udGludWUoJmZlY19kZXZfZmVjMCk7CgojaWZkZWYgICBGRUNfMgoJLy8gLS0tLS0t LS0gSW5pdGlhbGl6ZSBGRUMxIC0tLS0tLS0tCgoJLy8gRGlzYWJsZSBGRUMxCglGRUNfRUNS KEZFQ19CQVNFX0FERFJfRkVDMSkgPSBGRUNfRUNSX0RJU0FCTEU7CgoJbWVtc2V0KCZmZWNf ZGV2X2ZlYzEsIDAsIHNpemVvZiAoc3RydWN0IG5ldF9kZXZpY2UpKTsKCglmZWNfZGV2X2Zl YzEuaXJxID0gNjQgKyBJU0NfRkVDMTsKCgkvLyBTZXQgdGhlIGludGVycnVwdCBoYW5kbGVy IG9mIEZFQzEKCWlmIChyZXF1ZXN0X2lycShmZWNfZGV2X2ZlYzEuaXJxLCBmZWNfaW50ZXJy dXB0X2hhbmRsZXIsIFNBX0lOVEVSUlVQVCwgIkNvbGRGaXJlIEZFQyAxIiwgJmZlY19kZXZf ZmVjMSkpCgl7CgkJZmVjX2Rldl9mZWMxLmlycSA9IDA7CgkJcHJpbnRrKCJDYW5ub3QgYWxs b2NhdGUgRkVDMSBJUlEgKDM4KVxuIik7Cgl9ZWxzZQoJewoJCS8vIFNldCB0aGUgaW50ZXJy dXB0IHByaW9yaXR5IGFuZCBsZXZlbCBvZiBGRUMxCgkJTUNGX0lDUihJU0NfRkVDMSkgPSBJ TFBfRkVDMTsKCgkJLy8gRW5hYmxlIHRoZSBpbnRlcnJ1cHQgb2YgRkVDMQoJCWVuYWJsZV9p cnEoZmVjX2Rldl9mZWMxLmlycSk7Cgl9CgoJLy8gSW5pcmlhbGl6ZSB0aGUgcG9pbnRlcnMg dG8gdGhlIHByaXZhdGUgc3RydWN0dXJlIG9mIEZFQzEKCWZlY19kZXZfZmVjMS5wcml2ID0g JmZlY19wcml2X2ZlYzE7CgoJLy8gU2V0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgRkVDMQoJZmVj X2Rldl9mZWMxLmJhc2VfYWRkciA9IEZFQ19CQVNFX0FERFJfRkVDMTsKCgkvLyBTZXQgdGhl IHJlcXVlc3RvciBudW1iZXJzCglmZWNfcHJpdl9mZWMxLmZlY3ByaXZfcnhfcmVxdWVzdG9y ID0gRE1BX0ZFQzFfUlg7CglmZWNfcHJpdl9mZWMxLmZlY3ByaXZfdHhfcmVxdWVzdG9yID0g RE1BX0ZFQzFfVFg7CgoJLy8gU2V0IHRoZSBwb2ludGVycyBvZiB0aGUgaGFuZGxlcnMgb2Yg RkVDMQoJZmVjX3ByaXZfZmVjMS5mZWNwcml2X2ludGVycnVwdF9mZWNfcnhfaGFuZGxlciA9 IGZlY19pbnRlcnJ1cHRfZmVjX3J4X2hhbmRsZXJfZmVjMTsKCWZlY19wcml2X2ZlYzEuZmVj cHJpdl9pbnRlcnJ1cHRfZmVjX3R4X2hhbmRsZXIgPSBmZWNfaW50ZXJydXB0X2ZlY190eF9o YW5kbGVyX2ZlYzE7CgoJLy8gSW5pdGlhbGl6ZSB0aGUgcG9pbnRlciB0byB0aGUgdHJhbnNt aXNzaW9uIGFycmF5IG9mIEZFQzEKCWZlY19wcml2X2ZlYzEuZmVjcHJpdl90eGRlc2MgPSAo dm9pZCopRkVDX1RYX0RFU0NfRkVDMTsKCgkvLyBJbml0aWFsaXplIHRoZSBwb2ludGVyIHRv IHRoZSByZWNlcHRpb24gYXJyYXkgb2YgZGVzY3JpcHRvcnMKCWZlY19wcml2X2ZlYzEuZmVj cHJpdl9yeGRlc2MgPSAodm9pZCopRkVDX1JYX0RFU0NfRkVDMTsKCgkvLyBTZXQgdGhlICBN QUMgYWRkcmVzcyB0byB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgb2YgRkVDMQoJZmVjX3ByaXZf ZmVjMS5mZWNwcml2X21hY19hZGRyID0gZmVjX21hY19hZGRyX2ZlYzE7CgoJLy8gQ29udGlu dWUgdGhlIGluaXRpYWxpemF0aW9uIG9mIEZFQzEKCWZlY19pbml0aWFsaXplX2NvbnRpbnVl KCZmZWNfZGV2X2ZlYzEpOwoKI2VuZGlmCgoJLy8gSW5pdGlhbGl6ZSBGRUMvSTJDL0lSUSBQ aW4gQXNzaWdubWVudCBSZWdpc3RlcgoJRkVDX0dQSU9fUEFSX0ZFQ0kyQ0lSUSAmPSAweEY7 CglGRUNfR1BJT19QQVJfRkVDSTJDSVJRIHw9IEZFQ19GRUNJMkNJUlE7CgoJLy8gQWRkIG5l dyB0aW1lcgoJLy9mZWNfcnhfdGltZXIubGlzdC5uZXh0ID0gTlVMTDsKCS8vZmVjX3J4X3Rp bWVyLmxpc3QucHJldiA9IE5VTEw7CglmZWNfcnhfdGltZXIuZXhwaXJlcyA9ICh1bnNpZ25l ZCBsb25nKSAoamlmZmllcyArIEhaICogRkVDX1JYX1RJTUVPVVQpOwoJZmVjX3J4X3RpbWVy LmRhdGEgPSAwOwoJZmVjX3J4X3RpbWVyLmZ1bmN0aW9uID0gZmVjX3J4X3RpbWVyX2hhbmRs ZXI7CglhZGRfdGltZXIoJmZlY19yeF90aW1lcik7CgoJcmV0dXJuIDA7Cgp9CgovKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCiogTkFNRTogY2xlYW51cF9tb2R1bGUKKgoqIERFU0NSSVBUSU9OOiBU aGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSByZXNvdXJjZXMKKgoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwp2b2lkIF9fZXhpdCBmZWNfY2xlYW51cCh2b2lkKQp7CgkvLyBSZWxlYXNlIHRoZSBy ZXNvdXJzZXMgb2YgRkVDMAoJZG1hX3JlbW92ZV9pbml0aWF0b3IoZmVjX3ByaXZfZmVjMC5m ZWNwcml2X2luaXRpYXRvcl90eCk7CglkbWFfcmVtb3ZlX2luaXRpYXRvcihmZWNfcHJpdl9m ZWMwLmZlY3ByaXZfaW5pdGlhdG9yX3J4KTsKCWlmIChmZWNfZGV2X2ZlYzAuaXJxKQoJCWZy ZWVfaXJxKGZlY19kZXZfZmVjMC5pcnEsICZmZWNfZGV2X2ZlYzApOwoJa2ZyZWUoZmVjX3J4 YnVmX2ZlYzApOwoJdW5yZWdpc3Rlcl9uZXRkZXYoJmZlY19kZXZfZmVjMCk7CgojaWZkZWYg ICBGRUNfMgoJLy8gUmVsZWFzZSB0aGUgcmVzb3Vyc2VzIG9mIEZFQzEKCWRtYV9yZW1vdmVf aW5pdGlhdG9yKGZlY19wcml2X2ZlYzEuZmVjcHJpdl9pbml0aWF0b3JfdHgpOwoJZG1hX3Jl bW92ZV9pbml0aWF0b3IoZmVjX3ByaXZfZmVjMS5mZWNwcml2X2luaXRpYXRvcl9yeCk7Cglp ZiAoZmVjX2Rldl9mZWMxLmlycSkKCQlmcmVlX2lycShmZWNfZGV2X2ZlYzEuaXJxLCAmZmVj X2Rldl9mZWMxKTsKCWtmcmVlKGZlY19yeGJ1Zl9mZWMxKTsKCXVucmVnaXN0ZXJfbmV0ZGV2 KCZmZWNfZGV2X2ZlYzEpOwojZW5kaWYKCglkZWxfdGltZXIoJmZlY19yeF90aW1lcik7Cgp9 CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCiogTkFNRTogZmVjX2luaXRpYWxpemVfY29udGludWUK KgoqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGNvbnRpbnVlIHRoZSBnZW5lcmFsIGlu aXRpYWxpemF0aW9uCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBmZWNfaW5pdGlhbGl6 ZV9jb250aW51ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CgkvL1JlY2VpdmUgdGhlIHBv aW50ZXIgdG8gdGhlIHByaXZhdGUgc3RydWN0dXJlCglzdHJ1Y3QgZmVjX3ByaXYgKmZwID0g KHN0cnVjdCBmZWNfcHJpdiAqKSBkZXYtPnByaXY7CgoJLy8gUmVjZWl2ZSB0aGUgYmFzZSBh ZGRyZXNzCgl1bnNpZ25lZCBsb25nIGJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOwoKCWlu dCBpOwoKCS8vIENsZWFyIE1JQgoJbWVtc2V0KCh2b2lkICopIChiYXNlX2FkZHIgKyAweDIw MCksIDAsIEZFQ19NSUJfTEVOKTsKCgkvLyBDbGVhciB0aGUgc3RhdGlzdGljcyBzdHJ1Y3R1 cmUKCW1lbXNldCgodm9pZCAqKSAmKGZwLT5mZWNwcml2X3N0YXQpLCAwLAoJICAgICAgIHNp emVvZiAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKCgkvLyBHcmFiIHRoZSBGRUMgaW5p dGlhdG9ycwoJZG1hX3NldF9pbml0aWF0b3IoZnAtPmZlY3ByaXZfdHhfcmVxdWVzdG9yKTsK CWZwLT5mZWNwcml2X2luaXRpYXRvcl90eCA9IGRtYV9nZXRfaW5pdGlhdG9yKGZwLT5mZWNw cml2X3R4X3JlcXVlc3Rvcik7CglkbWFfc2V0X2luaXRpYXRvcihmcC0+ZmVjcHJpdl9yeF9y ZXF1ZXN0b3IpOwoJZnAtPmZlY3ByaXZfaW5pdGlhdG9yX3J4ID0gZG1hX2dldF9pbml0aWF0 b3IoZnAtPmZlY3ByaXZfcnhfcmVxdWVzdG9yKTsKCgkvLyBSZXNldCB0aGUgRE1BIGNoYW5u ZWxzCglmcC0+ZmVjcHJpdl9mZWNfcnhfY2hhbm5lbCA9IC0xOwoJZnAtPmZlY3ByaXZfZmVj X3R4X2NoYW5uZWwgPSAtMTsKCglmb3IgKGkgPSAwOyBpIDwgRkVDX1JYX0JVRl9OVU1CRVI7 IGkrKykKCQlmcC0+ZmVjcHJpdl9yeGRlc2NbaV0uZGF0YVBvaW50ZXIgPSAodW5zaWduZWQg aW50KSB2aXJ0X3RvX3BoeXMoJmZwLT5mZWNwcml2X3J4YnVmW2kgKiBGRUNfTUFYQlVGX1NJ WkVdKTsKCgkvLyBJbml0aWFsaXplIHRoZSBwb2ludGVycyB0byB0aGUgc29ja2V0IGJ1ZmZl cnMKCWZvciAoaSA9IDA7IGkgPCBGRUNfVFhfQlVGX05VTUJFUjsgaSsrKQoJCWZwLT5mZWNw cml2X3R4YnVmW2ldID0gTlVMTDsKCglldGhlcl9zZXR1cChkZXYpOwoKCWRldi0+b3BlbiA9 IGZlY19vcGVuOwoJZGV2LT5zdG9wID0gZmVjX2Nsb3NlOwoJZGV2LT5oYXJkX3N0YXJ0X3ht aXQgPSBmZWNfdHg7CglkZXYtPmdldF9zdGF0cyA9IGZlY19nZXRfc3RhdDsKCWRldi0+c2V0 X211bHRpY2FzdF9saXN0ID0gZmVjX3NldF9tdWx0aWNhc3RfbGlzdDsKCWRldi0+c2V0X21h Y19hZGRyZXNzID0gZmVjX3NldF9tYWNfYWRkcmVzczsKCWRldi0+dHhfdGltZW91dCA9IGZl Y190eF90aW1lb3V0OwoJZGV2LT53YXRjaGRvZ190aW1lbyA9IEZFQ19UWF9USU1FT1VUICog SFo7CgoJc3Bpbl9sb2NrX2luaXQoJmZwLT5mZWNwcml2X2xvY2spOwoKCXJlZ2lzdGVyX25l dGRldihkZXYpOwoKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIE5BTUU6IGZlY19vcGVuCioK KiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgaW5pdGlhbGl6YXRp b24gb2YgCioJCQkJb2YgRkVDIGFuZCBjb3JyZXNwb25kaW5nIEtTODcyMSB0cmFuc2l2ZXIK KgoqIFJFVFVSTlM6IElmIG5vIGVycm9yIG9jY3VycywgdGhpcyBmdW5jdGlvbiByZXR1cm5z IHplcm8uIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKaW50IGZlY19vcGVuKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpCnsKCgkvL1JlY2VpdmUgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUg c3RydWN0dXJlCglzdHJ1Y3QgZmVjX3ByaXYgKmZwID0gKHN0cnVjdCBmZWNfcHJpdiAqKSBk ZXYtPnByaXY7CgoJLy8gUmVjZWl2ZSB0aGUgYmFzZSBhZGRyZXNzCgl1bnNpZ25lZCBsb25n IGJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSBkZXYtPmJhc2VfYWRkcjsKCgkvLyBGbGFn IG9mIHRoZSBkdXBsZXggbW9kZQoJaW50IGZkdXBsZXg7CgoJaW50IGk7CgoJLy8gQ2hhbm5l bCBudW1iZXIKCWludCBjaGFubmVsOwoKCWludCBlcnJvcl9jb2RlID0gLUVCVVNZOwoKCS8v UmVjZWl2ZSB0aGUgRE1BIGNoYW5uZWxzCgljaGFubmVsID0gZG1hX3NldF9jaGFubmVsX2Zl YyhmcC0+ZmVjcHJpdl9yeF9yZXF1ZXN0b3IpOwoKCWlmIChjaGFubmVsID09IC0xKQoJewoJ CXByaW50aygiRG1hIGNoYW5uZWwgY2Fubm90IGJlIHJlc2VydmVkXG4iKTsKCQlnb3RvIEVS Uk9SUzsKCX0KCglmcC0+ZmVjcHJpdl9mZWNfcnhfY2hhbm5lbCA9IGNoYW5uZWw7CgoJZG1h X2Nvbm5lY3QoY2hhbm5lbCwgKGludCkgZnAtPmZlY3ByaXZfaW50ZXJydXB0X2ZlY19yeF9o YW5kbGVyKTsKCgljaGFubmVsID0gZG1hX3NldF9jaGFubmVsX2ZlYyhmcC0+ZmVjcHJpdl90 eF9yZXF1ZXN0b3IpOwoKCWlmIChjaGFubmVsID09IC0xKQoJewoJCXByaW50aygiRG1hIGNo YW5uZWwgY2Fubm90IGJlIHJlc2VydmVkXG4iKTsKCQlnb3RvIEVSUk9SUzsKCX0KCglmcC0+ ZmVjcHJpdl9mZWNfdHhfY2hhbm5lbCA9IGNoYW5uZWw7CgoJZG1hX2Nvbm5lY3QoY2hhbm5l bCwgKGludCkgZnAtPmZlY3ByaXZfaW50ZXJydXB0X2ZlY190eF9oYW5kbGVyKTsKCgkvLyBS ZXNldCBhbmQgZGlzYWJsZSBGRUMKCUZFQ19FQ1IoYmFzZV9hZGRyKSA9IEZFQ19FQ1JfUkVT RVQ7CgoJLy8gV2FpdAoJdWRlbGF5KDEwKTsKCgkvLyBDbGVhciBhbGwgZXZlbnRzIAoJRkVD X0VJUihiYXNlX2FkZHIpID0gRkVDX0VJUl9DTEVBUjsKCgkvLyBDb3B5IHRoZSBkZWZhdWx0 IGFkZHJlc3MgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKCW1lbWNweShkZXYtPmRldl9hZGRy LCBmcC0+ZmVjcHJpdl9tYWNfYWRkciwgNik7CgoJLy8gU2V0IHRoZSBkZWZhdWx0IGFkZHJl c3MKCUZFQ19QQUxSKGJhc2VfYWRkcikgPSAoZnAtPmZlY3ByaXZfbWFjX2FkZHJbMF0gPDwg MjQpIHwgKGZwLT5mZWNwcml2X21hY19hZGRyWzFdIDw8IDE2KSB8IChmcC0+ZmVjcHJpdl9t YWNfYWRkclsyXSA8PCA4KSB8IGZwLT5mZWNwcml2X21hY19hZGRyWzNdOwoJRkVDX1BBVVIo YmFzZV9hZGRyKSA9IChmcC0+ZmVjcHJpdl9tYWNfYWRkcls0XSA8PCAyNCkgfCAoZnAtPmZl Y3ByaXZfbWFjX2FkZHJbNV0gPDwgMTYpIHwgMHg4ODA4OwoKCS8vIFJlc2V0IHRoZSBncm91 cCBhZGRyZXNzIGRlc2NyaXB0b3IKCUZFQ19HQUxSKGJhc2VfYWRkcikgPSAweDAwMDAwMDAw OwoJRkVDX0dBVVIoYmFzZV9hZGRyKSA9IDB4MDAwMDAwMDA7CgoJLy8gUmVzZXQgdGhlIGlu ZGl2aWR1YWwgYWRkcmVzcyBkZXNjcmlwdG9yCglGRUNfSUFMUihiYXNlX2FkZHIpID0gMHgw MDAwMDAwMDsKCUZFQ19JQVVSKGJhc2VfYWRkcikgPSAweDAwMDAwMDAwOwoKCS8vIFNldCB0 aGUgcmVjZWl2ZSBjb250cm9sIHJlZ2lzdGVyCglGRUNfUkNSKGJhc2VfYWRkcikgPSBGRUNf UkNSX01BWF9GUk1fU0laRSB8IEZFQ19SQ1JfTUlJOwoKCS8vIFNldCB0aGUgcmVjZWl2ZSBG SUZPIGNvbnRyb2wgcmVnaXN0ZXIKCUZFQ19GRUNSRkNSKGJhc2VfYWRkcikgPSBGRUNfRkVD UkZDUl9GUk0gfCBGRUNfRkVDUkZDUl9HUiB8IEZFQ19GRUNSRkNSX01TSzsKCgkvL1NldCB0 aGUgcmVjZWl2ZSBGSUZPIGFsYXJtIHJlZ2lzdGVyCglGRUNfRkVDUkZBUihiYXNlX2FkZHIp ID0gRkVDX0ZFQ1JGQVJfQUxBUk07CgoJLy8gU2V0IHRoZSB0cmFuc21pdCBGSUZPIGNvbnRy b2wgcmVnaXN0ZXIKCUZFQ19GRUNURkNSKGJhc2VfYWRkcikgPSBGRUNfRkVDVEZDUl9GUk0g fCBGRUNfRkVDVEZDUl9HUiB8IEZFQ19GRUNURkNSX01TSzsKCgkvL1NldCB0aGUgdHJhbnNt aXQgRklGTyBhbGFybSByZWdpc3RlcgoJRkVDX0ZFQ1RGQVIoYmFzZV9hZGRyKSA9IEZFQ19G RUNURkFSX0FMQVJNOwoKCS8vIFNldCB0aGUgVHggRklGTyB3YXRlcm1hcmsKCUZFQ19GRUNU RldSKGJhc2VfYWRkcikgPSBGRUNfRkVDVEZXUl9YV01SSzsKCgkvLyBFbmFibGUgdGhlIHRy YW5zbWl0dGVyIHRvIGFwcGVuZCB0aGUgQ1JDICAgICAKCUZFQ19DVENXUihiYXNlX2FkZHIp ID0gRkVDX0NUQ1dSX1RGQ1dfQ1JDOwoKCS8vIEVuYWJsZSB0aGUgZXRoZXJuZXQgaW50ZXJy dXB0cwoJRkVDX0VJTVIoYmFzZV9hZGRyKSA9IEZFQ19FSU1SX01BU0s7CgoJaWYgKChlcnJv cl9jb2RlID0gaW5pdF90cmFuc2NlaXZlcihiYXNlX2FkZHIsICZmZHVwbGV4KSkgIT0gMCkK CXsKCQlwcmludGsoIkluaXRpYWxpemF0aW9uIG9mIHRoZSB0cmFuc2NlaXZlciBpcyBmYWls ZWRcbiIpOwoJCWdvdG8gRVJST1JTOwoJfQoKCWlmIChmZHVwbGV4KQoJCS8vIEVuYWJsZSB0 aGUgZnVsbCBkdXBsZXggbW9kZQoJCUZFQ19UQ1IoYmFzZV9hZGRyKSA9IEZFQ19UQ1JfRkRF TiB8IEZFQ19UQ1JfSEJDOwoJZWxzZQoJCS8vIERpc2FibGUgcmVjZXB0aW9uIG9mIGZyYW1l cyB3aGlsZSB0cmFuc21pdHRpbmcKCQlGRUNfUkNSKGJhc2VfYWRkcikgfD0gRkVDX1JDUl9E UlQ7CgoJLy8gRW5hYmxlIE1JQgoJRkVDX01JQkMoYmFzZV9hZGRyKSA9IEZFQ19NSUJDX0VO QUJMRTsKCgkvLyBFbmFibGUgRkVDIAoJRkVDX0VDUihiYXNlX2FkZHIpIHw9IEZFQ19FQ1Jf RVRIRVJFTjsKCgkvLyBJbml0aWFsaXplIHRyYW5zbWlzc2lvbiBkZXNjcmlwdG9ycyBhbmQg c3RhcnQgRE1BIGZvciB0aGUgdHJhbnNtaXNzaW9uCglmb3IgKGkgPSAwOyBpIDwgRkVDX1RY X0JVRl9OVU1CRVI7IGkrKykKCQlmcC0+ZmVjcHJpdl90eGRlc2NbaV0uc3RhdEN0cmwgPSBN Q0RfRkVDX0lOVEVSUlVQVDsKCglmcC0+ZmVjcHJpdl90eGRlc2NbaSAtIDFdLnN0YXRDdHJs IHw9IE1DRF9GRUNfV1JBUDsKCglmcC0+ZmVjcHJpdl9jdXJyZW50X3R4ID0gZnAtPmZlY3By aXZfbmV4dF90eCA9IDA7CgoJTUNEX3N0YXJ0RG1hKGZwLT5mZWNwcml2X2ZlY190eF9jaGFu bmVsLCAoY2hhciAqKSBmcC0+ZmVjcHJpdl90eGRlc2MsIDAsCgkJICAgICAodW5zaWduZWQg Y2hhciAqKSAmKEZFQ19GRUNURkRSKGJhc2VfYWRkcikpLCAwLAoJCSAgICAgRkVDX01BWF9G Uk1fU0laRSwgMCwgZnAtPmZlY3ByaXZfaW5pdGlhdG9yX3R4LAoJCSAgICAgRkVDX1RYX0RN QV9QUkksIE1DRF9GRUNUWF9ETUEgfCBNQ0RfSU5URVJSVVBULAoJCSAgICAgTUNEX05PX0NT VU0gfCBNQ0RfTk9fQllURV9TV0FQKTsKCgkvLyBJbml0aWFsaXplIHJlY2VwdGlvbiBkZXNj cmlwdG9ycyBhbmQgc3RhcnQgRE1BIGZvciB0aGUgcmVjZXB0aW9uCglmb3IgKGkgPSAwOyBp IDwgRkVDX1JYX0JVRl9OVU1CRVI7IGkrKykKCXsKCQlmcC0+ZmVjcHJpdl9yeGRlc2NbaV0u c3RhdEN0cmwgPSBNQ0RfRkVDX0JVRl9SRUFEWSB8IE1DRF9GRUNfSU5URVJSVVBUOwoJCWZw LT5mZWNwcml2X3J4ZGVzY1tpXS5sZW5ndGggPSBGRUNfTUFYQlVGX1NJWkU7Cgl9CgoJZnAt PmZlY3ByaXZfcnhkZXNjW2kgLSAxXS5zdGF0Q3RybCB8PSBNQ0RfRkVDX1dSQVA7CglmcC0+ ZmVjcHJpdl9jdXJyZW50X3J4ID0gMDsKCglNQ0Rfc3RhcnREbWEoZnAtPmZlY3ByaXZfZmVj X3J4X2NoYW5uZWwsIChjaGFyICopIGZwLT5mZWNwcml2X3J4ZGVzYywgMCwKCQkgICAgICh1 bnNpZ25lZCBjaGFyICopICYoRkVDX0ZFQ1JGRFIoYmFzZV9hZGRyKSksIDAsCgkJICAgICBG RUNfTUFYX0ZSTV9TSVpFLCAwLCBmcC0+ZmVjcHJpdl9pbml0aWF0b3JfcngsCgkJICAgICBG RUNfUlhfRE1BX1BSSSwgTUNEX0ZFQ1JYX0RNQSB8IE1DRF9JTlRFUlJVUFQsCgkJICAgICBN Q0RfTk9fQ1NVTSB8IE1DRF9OT19CWVRFX1NXQVApOwoKCW5ldGlmX3N0YXJ0X3F1ZXVlKGRl dik7CgovLwlNT0RfSU5DX1VTRV9DT1VOVDsKCglyZXR1cm4gMDsKCkVSUk9SUzoKCgkvLyBS ZW1vdmUgdGhlIGNoYW5uZWxzIGFuZCByZXR1cm4gd2l0aCB0aGUgZXJyb3IgY29kZQoJaWYg KGZwLT5mZWNwcml2X2ZlY19yeF9jaGFubmVsICE9IC0xKQoJewoJCWRtYV9kaXNjb25uZWN0 KGZwLT5mZWNwcml2X2ZlY19yeF9jaGFubmVsKTsKCQlkbWFfcmVtb3ZlX2NoYW5uZWxfYnlf bnVtYmVyKGZwLT5mZWNwcml2X2ZlY19yeF9jaGFubmVsKTsKCQlmcC0+ZmVjcHJpdl9mZWNf cnhfY2hhbm5lbCA9IC0xOwoJfQoKCWlmIChmcC0+ZmVjcHJpdl9mZWNfdHhfY2hhbm5lbCAh PSAtMSkKCXsKCQlkbWFfZGlzY29ubmVjdChmcC0+ZmVjcHJpdl9mZWNfdHhfY2hhbm5lbCk7 CgkJZG1hX3JlbW92ZV9jaGFubmVsX2J5X251bWJlcihmcC0+ZmVjcHJpdl9mZWNfdHhfY2hh bm5lbCk7CgkJZnAtPmZlY3ByaXZfZmVjX3R4X2NoYW5uZWwgPSAtMTsKCX0KCglyZXR1cm4g ZXJyb3JfY29kZTsKCn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBOQU1FOiBmZWNfY2xvc2UK KgoqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBncmFjZWZ1bCBz dG9wIG9mIHRoZQoqCQkJCXRyYW5zbWlzc2lvbiBhbmQgZGlzYWJsZXMgRkVDCioKKiBSRVRV Uk5TOiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIHplcm8uCioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCmludCBmZWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJLy9SZWNl aXZlIHRoZSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIHN0cnVjdHVyZQoJc3RydWN0IGZlY19w cml2ICpmcCA9IChzdHJ1Y3QgZmVjX3ByaXYgKikgZGV2LT5wcml2OwoKCS8vIFJlY2VpdmUg dGhlIGJhc2UgYWRkcmVzcwoJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIgPSAodW5zaWduZWQg bG9uZykgZGV2LT5iYXNlX2FkZHI7CgoJdW5zaWduZWQgbG9uZyB0aW1lOwoKCWludCBpOwoK CW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKCgkvLyBQZXJmb3JtIHRoZSBncmFjZWZ1bCBzdG9w CglGRUNfVENSKGJhc2VfYWRkcikgfD0gRkVDX1RDUl9HVFM7CgoJdGltZSA9IGppZmZpZXM7 CgoJLy8gV2FpdCBmb3IgdGhlIGdyYWNlZnVsIHN0b3AgCgl3aGlsZSAoIShGRUNfRUlSKGJh c2VfYWRkcikgJiBGRUNfRUlSX0dSQSkgJiYgamlmZmllcyAtIHRpbWUgPCBGRUNfR1JfVElN RU9VVCAqIEhaKQoJCXNjaGVkdWxlKCk7CgoJLy8gRGlzYWJsZSBGRUMKCUZFQ19FQ1IoYmFz ZV9hZGRyKSA9IEZFQ19FQ1JfRElTQUJMRTsKCgkvLyBSZXNldCB0aGUgRE1BIGNoYW5uZWxz ICAgICAgCglNQ0Rfa2lsbERtYShmcC0+ZmVjcHJpdl9mZWNfdHhfY2hhbm5lbCk7CglkbWFf cmVtb3ZlX2NoYW5uZWxfYnlfbnVtYmVyKGZwLT5mZWNwcml2X2ZlY190eF9jaGFubmVsKTsK CWRtYV9kaXNjb25uZWN0KGZwLT5mZWNwcml2X2ZlY190eF9jaGFubmVsKTsKCWZwLT5mZWNw cml2X2ZlY190eF9jaGFubmVsID0gLTE7CgoJZm9yIChpID0gMDsgaSA8IEZFQ19UWF9CVUZf TlVNQkVSOyBpKyspCgkJaWYgKGZwLT5mZWNwcml2X3R4YnVmW2ldKQoJCXsKCQkJa2ZyZWUo ZnAtPmZlY3ByaXZfdHhidWZbaV0pOwoJCQlmcC0+ZmVjcHJpdl90eGJ1ZltpXSA9IE5VTEw7 CgkJfQoKCXNwaW5fbG9ja19pcnEoJmZwLT5mZWNwcml2X2xvY2spOwoJTUNEX2tpbGxEbWEo ZnAtPmZlY3ByaXZfZmVjX3J4X2NoYW5uZWwpOwoJc3Bpbl91bmxvY2tfaXJxKCZmcC0+ZmVj cHJpdl9sb2NrKTsKCglkbWFfcmVtb3ZlX2NoYW5uZWxfYnlfbnVtYmVyKGZwLT5mZWNwcml2 X2ZlY19yeF9jaGFubmVsKTsKCWRtYV9kaXNjb25uZWN0KGZwLT5mZWNwcml2X2ZlY19yeF9j aGFubmVsKTsKCWZwLT5mZWNwcml2X2ZlY19yeF9jaGFubmVsID0gLTE7CgovLwlNT0RfREVD X1VTRV9DT1VOVDsKCglyZXR1cm4gMDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqICtOQU1F OiBmZWNfZ2V0X3N0YXQKKgoqIFJFVFVSTlM6IFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUg c3RhdGlzdGljYWwgaW5mb3JtYXRpb24uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnN0cnVjdCBu ZXRfZGV2aWNlX3N0YXRzICogZmVjX2dldF9zdGF0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp CnsKCgkvL1JlY2VpdmUgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgc3RydWN0dXJlCglz dHJ1Y3QgZmVjX3ByaXYgKmZwID0gKHN0cnVjdCBmZWNfcHJpdiAqKSBkZXYtPnByaXY7CgoJ Ly8gUmVjZWl2ZSB0aGUgYmFzZSBhZGRyZXNzCgl1bnNpZ25lZCBsb25nIGJhc2VfYWRkciA9 IGRldi0+YmFzZV9hZGRyOwoKCS8vIFJlY2VpdmUgdGhlIHN0YXRpc3RpY2FsIGluZm9ybWF0 aW9uCglmcC0+ZmVjcHJpdl9zdGF0LnJ4X3BhY2tldHMgPSBGRUNTVEFUX1JNT05fUl9QQUNL RVRTKGJhc2VfYWRkcik7CglmcC0+ZmVjcHJpdl9zdGF0LnR4X3BhY2tldHMgPSBGRUNTVEFU X1JNT05fVF9QQUNLRVRTKGJhc2VfYWRkcik7CglmcC0+ZmVjcHJpdl9zdGF0LnJ4X2J5dGVz ID0gRkVDU1RBVF9STU9OX1JfT0NURVRTKGJhc2VfYWRkcik7CglmcC0+ZmVjcHJpdl9zdGF0 LnR4X2J5dGVzID0gRkVDU1RBVF9STU9OX1RfT0NURVRTKGJhc2VfYWRkcik7CgoJZnAtPmZl Y3ByaXZfc3RhdC5tdWx0aWNhc3QgPSBGRUNTVEFUX1JNT05fUl9NQ19QS1QoYmFzZV9hZGRy KTsKCWZwLT5mZWNwcml2X3N0YXQuY29sbGlzaW9ucyA9IEZFQ1NUQVRfUk1PTl9UX0NPTChi YXNlX2FkZHIpOwoKCWZwLT5mZWNwcml2X3N0YXQucnhfbGVuZ3RoX2Vycm9ycyA9IEZFQ1NU QVRfUk1PTl9SX1VOREVSU0laRShiYXNlX2FkZHIpICsgRkVDU1RBVF9STU9OX1JfT1ZFUlNJ WkUoYmFzZV9hZGRyKSArIEZFQ1NUQVRfUk1PTl9SX0ZSQUcoYmFzZV9hZGRyKSArIEZFQ1NU QVRfUk1PTl9SX0pBQihiYXNlX2FkZHIpOwoJZnAtPmZlY3ByaXZfc3RhdC5yeF9jcmNfZXJy b3JzID0gRkVDU1RBVF9JRUVFX1JfQ1JDKGJhc2VfYWRkcik7CglmcC0+ZmVjcHJpdl9zdGF0 LnJ4X2ZyYW1lX2Vycm9ycyA9IEZFQ1NUQVRfSUVFRV9SX0FMSUdOKGJhc2VfYWRkcik7Cglm cC0+ZmVjcHJpdl9zdGF0LnJ4X292ZXJfZXJyb3JzID0gRkVDU1RBVF9JRUVFX1JfTUFDRVJS KGJhc2VfYWRkcik7CgoJZnAtPmZlY3ByaXZfc3RhdC50eF9jYXJyaWVyX2Vycm9ycyA9IEZF Q1NUQVRfSUVFRV9UX0NTRVJSKGJhc2VfYWRkcik7CglmcC0+ZmVjcHJpdl9zdGF0LnR4X2Zp Zm9fZXJyb3JzID0gRkVDU1RBVF9JRUVFX1RfTUFDRVJSKGJhc2VfYWRkcik7CglmcC0+ZmVj cHJpdl9zdGF0LnR4X3dpbmRvd19lcnJvcnMgPSBGRUNTVEFUX0lFRUVfVF9MQ09MKGJhc2Vf YWRkcik7CgoJLy8gSSBob3BlIHRoYXQgb25lIGZyYW1lIGRvZXNuJ3QgaGF2ZSBtb3JlIHRo YW4gb25lIGVycm9yCglmcC0+ZmVjcHJpdl9zdGF0LnJ4X2Vycm9ycyA9IGZwLT5mZWNwcml2 X3N0YXQucnhfbGVuZ3RoX2Vycm9ycyArIGZwLT5mZWNwcml2X3N0YXQucnhfY3JjX2Vycm9y cyArIGZwLT5mZWNwcml2X3N0YXQucnhfZnJhbWVfZXJyb3JzICsgZnAtPmZlY3ByaXZfc3Rh dC5yeF9vdmVyX2Vycm9ycyArIGZwLT5mZWNwcml2X3N0YXQucnhfZHJvcHBlZDsKCWZwLT5m ZWNwcml2X3N0YXQudHhfZXJyb3JzID0gZnAtPmZlY3ByaXZfc3RhdC50eF9jYXJyaWVyX2Vy cm9ycyArIGZwLT5mZWNwcml2X3N0YXQudHhfZmlmb19lcnJvcnMgKyBmcC0+ZmVjcHJpdl9z dGF0LnR4X3dpbmRvd19lcnJvcnMgKyBmcC0+ZmVjcHJpdl9zdGF0LnR4X2Fib3J0ZWRfZXJy b3JzICsgZnAtPmZlY3ByaXZfc3RhdC50eF9oZWFydGJlYXRfZXJyb3JzICsgZnAtPmZlY3By aXZfc3RhdC50eF9kcm9wcGVkOwoKCXJldHVybiAmZnAtPmZlY3ByaXZfc3RhdDsKfQoKLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgoqIE5BTUU6IGZlY19zZXRfbXVsdGljYXN0X2xpc3QKKgoqIERF U0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGZyYW1lIGZpbHRlcmluZyBwYXJh bWV0ZXJzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgZmVjX3NldF9tdWx0aWNhc3RfbGlz dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CgkvLyBQb2ludGVyIHRvIHRoZSBhZGRyZXNz IGxpc3QKCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwoKCXVuc2lnbmVkIGludCBjcmMsIGRh dGE7CglpbnQgaSwgaiwgazsKCgkvLyBSZWNlaXZlIHRoZSBiYXNlIGFkZHJlc3MKCXVuc2ln bmVkIGxvbmcgYmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGRldi0+YmFzZV9hZGRyOwoK CWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCgl7CgkJLy8gQWxsb3cgYWxsIGluY29t aW5nIGZyYW1lcwoJCWlmICgoRkVDX1JDUihiYXNlX2FkZHIpICYgRkVDX1JDUl9QUk9NKT09 MCkgewoJCQlGRUNfRUNSKGJhc2VfYWRkcikgJj0gfkZFQ19FQ1JfRVRIRVJFTjsKCQkJRkVD X1JDUihiYXNlX2FkZHIpIHw9IEZFQ19SQ1JfUFJPTTsKCQkJCgkJCS8vIERpc2FibGUgcmVj ZXB0aW9uIG9mIGZyYW1lcyB3aGlsZSB0cmFuc21pdHRpbmcKCQkJRkVDX1JDUihiYXNlX2Fk ZHIpIHw9IEZFQ19SQ1JfRFJUOwoJCQkKCQkJRkVDX0VDUihiYXNlX2FkZHIpIHw9IEZFQ19F Q1JfRVRIRVJFTjsKCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMvNTQ4NS1GRUM6IElGRl9QUk9N SVNDIG9uIVxuIixkZXYtPm5hbWUpOwoJCX0KCQlyZXR1cm47Cgl9CglpZiAoKEZFQ19SQ1Io YmFzZV9hZGRyKSAmIEZFQ19SQ1JfUFJPTSkhPTApIHsKCQlGRUNfRUNSKGJhc2VfYWRkcikg Jj0gfkZFQ19FQ1JfRVRIRVJFTjsKCQlGRUNfUkNSKGJhc2VfYWRkcikgJj0gfkZFQ19SQ1Jf UFJPTTsKCQkKCQkvLyBFbmFibGUgcmVjZXB0aW9uIG9mIGZyYW1lcyB3aGlsZSB0cmFuc21p dHRpbmcKCQlGRUNfUkNSKGJhc2VfYWRkcikgJj0gfkZFQ19SQ1JfRFJUOwoJCQoJCQoJCUZF Q19FQ1IoYmFzZV9hZGRyKSB8PSBGRUNfRUNSX0VUSEVSRU47CgkJcHJpbnRrKEtFUk5fSU5G TyAiJXMvNTQ4NS1GRUM6IElGRl9QUk9NSVNDIG9mZiFcbiIsZGV2LT5uYW1lKTsKCX0KCWlm IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQoJewoJCS8vIEFsbG93IGFsbCBpbmNvbWlu ZyBmcmFtZXMKCQlGRUNfR0FMUihiYXNlX2FkZHIpID0gMHhGRkZGRkZGRjsKCQlGRUNfR0FV UihiYXNlX2FkZHIpID0gMHhGRkZGRkZGRjsKCQlyZXR1cm47Cgl9CgkvLyBSZXNldCB0aGUg Z3JvdXAgYWRkcmVzcyByZWdpc3RlcgoJRkVDX0dBTFIoYmFzZV9hZGRyKSA9IDB4MDAwMDAw MDA7CglGRUNfR0FVUihiYXNlX2FkZHIpID0gMHgwMDAwMDAwMDsKCgkvLyBQcm9jZXNzIGFs bCBhZGRyZXNzZXMKCWZvciAoaSA9IDAsIGRtaSA9IGRldi0+bWNfbGlzdDsgaSA8IGRldi0+ bWNfY291bnQ7IGkrKywgZG1pID0gZG1pLT5uZXh0KQoJewoJCS8vIFByb2Nlc3NpbmcgbXVz dCBiZSBvbmx5IGZvciB0aGUgZ3JvdXAgYWRkcmVzc2VzCgkJaWYgKCEoZG1pLT5kbWlfYWRk clswXSAmIDEpKQoJCQljb250aW51ZTsKCgkJLy8gQ2FsY3VsYXRlIGNyYyB2YWx1ZSBmb3Ig dGhlIGN1cnJlbnQgYWRkcmVzcwoJCWNyYyA9IDB4RkZGRkZGRkY7CgkJZm9yIChqID0gMDsg aiA8IGRtaS0+ZG1pX2FkZHJsZW47IGorKykKCQl7CgoJCQlmb3IgKGsgPSAwLCBkYXRhID0g ZG1pLT5kbWlfYWRkcltqXTsgayA8IDg7ICBrKyssIGRhdGEgPj49IDEpCgkJCXsKCQkJCWlm ICgoY3JjIF4gZGF0YSkgJiAxKQoJCQkJCWNyYyA9IChjcmMgPj4gMSkgXiBGRUNfQ1JDUE9M OwoJCQkJZWxzZQoJCQkJCWNyYyA+Pj0gMTsKCgkJCX0KCgkJfQoKCQkvLyBBZGQgdGhpcyB2 YWx1ZQoJCWNyYyA+Pj0gMjY7CgkJY3JjICY9IDB4M0Y7CgkJaWYgKGNyYyA+IDMxKQoJCQlG RUNfR0FVUihiYXNlX2FkZHIpIHw9IDB4MSA8PCAoY3JjIC0gMzIpOwoJCWVsc2UKCQkJRkVD X0dBTFIoYmFzZV9hZGRyKSB8PSAweDEgPDwgY3JjOwoKCX0KCn0KCi8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKiBOQU1FOiBmZWNfc2V0X21hY19hZGRyZXNzCioKKiBERVNDUklQVElPTjogVGhp cyBmdW5jdGlvbiBzZXRzIHRoZSBNQUMgYWRkcmVzcwoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpp bnQgZmVjX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpw KQp7CgkvL1JlY2VpdmUgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgc3RydWN0dXJlCglz dHJ1Y3QgZmVjX3ByaXYgKmZwID0gKHN0cnVjdCBmZWNfcHJpdiAqKSBkZXYtPnByaXY7CgoJ Ly8gUmVjZWl2ZSB0aGUgYmFzZSBhZGRyZXNzCgl1bnNpZ25lZCBsb25nIGJhc2VfYWRkciA9 ICh1bnNpZ25lZCBsb25nKSBkZXYtPmJhc2VfYWRkcjsKCglzdHJ1Y3Qgc29ja2FkZHIgKmFk ZHIgPSBwOwoKCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCgkJcmV0dXJuIC1FQlVTWTsKCgkv LyBDb3B5IGEgbmV3IGFkZHJlc3MgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKCW1lbWNweShk ZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKCgkvLyBDb3B5 IGEgbmV3IGFkZHJlc3MgdG8gdGhlIHByaXZhdGUgc3RydWN0dXJlCgltZW1jcHkoZnAtPmZl Y3ByaXZfbWFjX2FkZHIsIGFkZHItPnNhX2RhdGEsIDYpOwoKCS8vIFNldCB0aGUgYWRkcmVz cyB0byB0aGUgcmVnaXN0ZXJzCglGRUNfUEFMUihiYXNlX2FkZHIpID0gKGZwLT5mZWNwcml2 X21hY19hZGRyWzBdIDw8IDI0KSB8IChmcC0+ZmVjcHJpdl9tYWNfYWRkclsxXSA8PCAxNikg fCAoZnAtPmZlY3ByaXZfbWFjX2FkZHJbMl0gPDwgOCkgfCBmcC0+ZmVjcHJpdl9tYWNfYWRk clszXTsKCUZFQ19QQVVSKGJhc2VfYWRkcikgPSAoZnAtPmZlY3ByaXZfbWFjX2FkZHJbNF0g PDwgMjQpIHwgKGZwLT5mZWNwcml2X21hY19hZGRyWzVdIDw8IDE2KSB8IDB4ODgwODsKCgly ZXR1cm4gMDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIE5BTUU6IGZlY190eAoqCiogREVT Q1JJUFRJT046IFRoaXMgZnVuY3Rpb24gc3RhcnRzIHRyYW5zbWlzc2lvbiBvZiB0aGUgZnJh bWUgdXNpbmcgRE1BCioKKiBSRVRVUk5TOiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5z IHplcm8uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCmludCBmZWNfdHgoc3RydWN0IHNrX2J1ZmYg KnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoKCS8vUmVjZWl2ZSB0aGUgcG9pbnRl ciB0byB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKCXN0cnVjdCBmZWNfcHJpdiAqZnAgPSAoc3Ry dWN0IGZlY19wcml2ICopIGRldi0+cHJpdjsKCgl2b2lkICpkYXRhLCAqZGF0YV9hbGlnbmVk OwoJaW50IG9mZnNldDsKCglkYXRhID0ga21hbGxvYyhza2ItPmxlbiArIDE1LCBHRlBfRE1B IHwgR0ZQX0FUT01JQyk7CgoJaWYgKCFkYXRhKQoJewoJCWZwLT5mZWNwcml2X3N0YXQudHhf ZHJvcHBlZCsrOwoJCWRldl9rZnJlZV9za2Ioc2tiKTsKCQlyZXR1cm4gMDsKCX0KCglvZmZz ZXQgPSAoKCh1bnNpZ25lZCBsb25nKXZpcnRfdG9fcGh5cyhkYXRhKSArIDE1KSAmIDB4RkZG RkZGRjApIC0gKHVuc2lnbmVkIGxvbmcpdmlydF90b19waHlzKGRhdGEpOwoJZGF0YV9hbGln bmVkID0gKHZvaWQqKSgodW5zaWduZWQgbG9uZylkYXRhICsgb2Zmc2V0KTsKCW1lbWNweShk YXRhX2FsaWduZWQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwoKCglzcGluX2xvY2tfaXJxKCZm cC0+ZmVjcHJpdl9sb2NrKTsKCgkvLyBJbml0aWFsaXplIHRoZSBkZXNjcmlwdG9yCglmcC0+ ZmVjcHJpdl90eGJ1ZltmcC0+ZmVjcHJpdl9uZXh0X3R4XSA9IGRhdGE7CglmcC0+ZmVjcHJp dl90eGRlc2NbZnAtPmZlY3ByaXZfbmV4dF90eF0uZGF0YVBvaW50ZXIgPSAodW5zaWduZWQg aW50KSB2aXJ0X3RvX3BoeXMoZGF0YV9hbGlnbmVkKTsKCWZwLT5mZWNwcml2X3R4ZGVzY1tm cC0+ZmVjcHJpdl9uZXh0X3R4XS5sZW5ndGggPSBza2ItPmxlbjsKCWZwLT5mZWNwcml2X3R4 ZGVzY1tmcC0+ZmVjcHJpdl9uZXh0X3R4XS5zdGF0Q3RybCB8PSAoTUNEX0ZFQ19FTkRfRlJB TUUgfCBNQ0RfRkVDX0JVRl9SRUFEWSk7CglmcC0+ZmVjcHJpdl9uZXh0X3R4ID0gKGZwLT5m ZWNwcml2X25leHRfdHggKyAxKSAmIEZFQ19UWF9JTkRFWF9NQVNLOwoKCWlmIChmcC0+ZmVj cHJpdl90eGJ1ZltmcC0+ZmVjcHJpdl9jdXJyZW50X3R4XSAmJiBmcC0+ZmVjcHJpdl9jdXJy ZW50X3R4ID09IGZwLT5mZWNwcml2X25leHRfdHgpCgkJbmV0aWZfc3RvcF9xdWV1ZShkZXYp OwoKCXNwaW5fdW5sb2NrX2lycSgmZnAtPmZlY3ByaXZfbG9jayk7CgoJLy8gVGVsbCB0aGUg RE1BIHRvIGNvbnRpbnVlIHRoZSB0cmFuc21pc3Npb24KCU1DRF9jb250aW5EbWEoZnAtPmZl Y3ByaXZfZmVjX3R4X2NoYW5uZWwpOwoKCWRldl9rZnJlZV9za2Ioc2tiKTsKCglkZXYtPnRy YW5zX3N0YXJ0ID0gamlmZmllczsKCglyZXR1cm4gMDsKfQoKLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgoqIE5BTUU6IGZlY190eF90aW1lb3V0CioKKiBERVNDUklQVElPTjogSWYgdGhlIGludGVy cnVwdCBwcm9jZXNzaW5nIG9mIHJlY2VpdmVkIGZyYW1lcyB3YXMgbG9zdAoqICAgICAgICAg ICAgICBhbmQgRE1BIHN0b3BwZWQgdGhlIHJlY2VwdGlvbiwgdGhpcyBmdW5jdGlvbiBjbGVh cnMKKiAgICAgICAgICAgICAgdGhlIHRyYW5zbWlzc2lvbiBkZXNjcmlwdG9ycyBhbmQgc3Rh cnRzIERNQSAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIGZlY190eF90aW1lb3V0KHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCWludCBpOwoKCS8vUmVjZWl2ZSB0aGUgcG9pbnRl ciB0byB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKCXN0cnVjdCBmZWNfcHJpdiAqZnAgPSAoc3Ry dWN0IGZlY19wcml2ICopIGRldi0+cHJpdjsKCgkvLyBSZWNlaXZlIHRoZSBiYXNlIGFkZHJl c3MKCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGRldi0+YmFz ZV9hZGRyOwoKCU1DRF9raWxsRG1hKGZwLT5mZWNwcml2X2ZlY190eF9jaGFubmVsKTsKCWZv ciAoaSA9IDA7IGkgPCBGRUNfVFhfQlVGX05VTUJFUjsgaSsrKQoJewoJCWlmIChmcC0+ZmVj cHJpdl90eGJ1ZltpXSkKCQl7CgoJCQlrZnJlZShmcC0+ZmVjcHJpdl90eGJ1ZltpXSk7CgkJ CWZwLT5mZWNwcml2X3R4YnVmW2ldID0gTlVMTDsKCgkJfQoJCWZwLT5mZWNwcml2X3R4ZGVz Y1tpXS5zdGF0Q3RybCA9IE1DRF9GRUNfSU5URVJSVVBUOwoJfQoJZnAtPmZlY3ByaXZfdHhk ZXNjW2kgLSAxXS5zdGF0Q3RybCB8PSBNQ0RfRkVDX1dSQVA7CgoJZnAtPmZlY3ByaXZfY3Vy cmVudF90eCA9IGZwLT5mZWNwcml2X25leHRfdHggPSAwOwoKCU1DRF9zdGFydERtYShmcC0+ ZmVjcHJpdl9mZWNfdHhfY2hhbm5lbCwgKGNoYXIgKikgZnAtPmZlY3ByaXZfdHhkZXNjLCAw LAoJCSAgICAgKHVuc2lnbmVkIGNoYXIgKikgJihGRUNfRkVDVEZEUihiYXNlX2FkZHIpKSwg MCwKCQkgICAgIEZFQ19NQVhfRlJNX1NJWkUsIDAsIGZwLT5mZWNwcml2X2luaXRpYXRvcl90 eCwKCQkgICAgIEZFQ19UWF9ETUFfUFJJLCBNQ0RfRkVDVFhfRE1BIHwgTUNEX0lOVEVSUlVQ VCwKCQkgICAgIE1DRF9OT19DU1VNIHwgTUNEX05PX0JZVEVfU1dBUCk7CgoJbmV0aWZfd2Fr ZV9xdWV1ZShkZXYpOwoKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIE5BTUU6IGZlY19yZWFk X21paQoqCiogREVTQ1JJUFRJT046IFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHZhbHVlIGZy b20gdGhlIE1JSSByZWdpc3RlcgoqCiogUkVUVVJOUzogSWYgbm8gZXJyb3Igb2NjdXJzLCB0 aGlzIGZ1bmN0aW9uIHJldHVybnMgemVyby4KKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW50IGZl Y19yZWFkX21paSh1bnNpZ25lZCBpbnQgYmFzZV9hZGRyLCB1bnNpZ25lZCBpbnQgcGEsIHVu c2lnbmVkIGludCByYSwgdW5zaWduZWQgaW50ICpkYXRhKQp7Cgl1bnNpZ25lZCBsb25nIHRp bWU7CgoJLy8gQ2xlYXIgdGhlIE1JSSBpbnRlcnJ1cHQgYml0ICAgICAgIAoJRkVDX0VJUihi YXNlX2FkZHIpID0gRkVDX0VJUl9NSUk7CgoJLy8gV3JpdGUgdG8gdGhlIE1JSSBtYW5hZ2Vt ZW50IGZyYW1lIHJlZ2lzdGVyCglGRUNfTU1GUihiYXNlX2FkZHIpID0gRkVDX01NRlJfUkVB RCB8IChwYSA8PCAyMykgfCAocmEgPDwgMTgpOwoKCXRpbWUgPSBqaWZmaWVzOwoKCS8vIFdh aXQgZm9yIHRoZSByZWFkaW5nICAgICAgCgl3aGlsZSAoIShGRUNfRUlSKGJhc2VfYWRkcikg JiBGRUNfRUlSX01JSSkpCgl7CgkJaWYgKGppZmZpZXMgLSB0aW1lID4gRkVDX01JSV9USU1F T1VUICogSFopCgkJCXJldHVybiAtRVRJTUU7CgkJc2NoZWR1bGUoKTsKCX0KCgkvLyBDbGVh ciB0aGUgTUlJIGludGVycnVwdCBiaXQKCUZFQ19FSVIoYmFzZV9hZGRyKSA9IEZFQ19FSVJf TUlJOwoKCSpkYXRhID0gRkVDX01NRlIoYmFzZV9hZGRyKSAmIDB4MDAwMEZGRkY7CgoJcmV0 dXJuIDA7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBOQU1FOiBmZWNfd3JpdGVfbWlpCioK KiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIHZhbHVlIHRvIHRoZSBN SUkgcmVnaXN0ZXIKKgoqIFJFVFVSTlM6IElmIG5vIGVycm9yIG9jY3VycywgdGhpcyBmdW5j dGlvbiByZXR1cm5zIHplcm8uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmludCBmZWNfd3JpdGVf bWlpKHVuc2lnbmVkIGludCBiYXNlX2FkZHIsIHVuc2lnbmVkIGludCBwYSwgdW5zaWduZWQg aW50IHJhLCB1bnNpZ25lZCBpbnQgZGF0YSkKewoJdW5zaWduZWQgbG9uZyB0aW1lOwoKCS8v IENsZWFyIHRoZSBNSUkgaW50ZXJydXB0IGJpdCAgICAgICAKCUZFQ19FSVIoYmFzZV9hZGRy KSA9IEZFQ19FSVJfTUlJOwoKCS8vIFdyaXRlIHRvIHRoZSBNSUkgbWFuYWdlbWVudCBmcmFt ZSByZWdpc3RlcgoJRkVDX01NRlIoYmFzZV9hZGRyKSA9IEZFQ19NTUZSX1dSSVRFIHwgKHBh IDw8IDIzKSB8IChyYSA8PCAxOCkgfCBkYXRhOwoKCXRpbWUgPSBqaWZmaWVzOwoKCS8vIFdh aXQgZm9yIHRoZSB3cml0aW5nIAoKCXdoaWxlICghKEZFQ19FSVIoYmFzZV9hZGRyKSAmIEZF Q19FSVJfTUlJKSkKCXsKCQlpZiAoamlmZmllcyAtIHRpbWUgPiBGRUNfTUlJX1RJTUVPVVQg KiBIWikKCQkJcmV0dXJuIC1FVElNRTsKCgkJc2NoZWR1bGUoKTsKCX0KCgkvLyBDbGVhciB0 aGUgTUlJIGludGVycnVwdCBiaXQgICAgICAgCglGRUNfRUlSKGJhc2VfYWRkcikgPSBGRUNf RUlSX01JSTsKCglyZXR1cm4gMDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIE5BTUU6IGZl Y19pbnRlcnJ1cHRfdHhfaGFuZGxlcgoqCiogREVTQ1JJUFRJT046IFRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIHdoZW4gdGhlIGRhdGEgCiogICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiBm cm9tIHRoZSBidWZmZXIgdG8gdGhlIEZFQyBpcyBjb21wbGV0ZWQuCiogICAgICAgICAgICAg ICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBmZWNfaW50ZXJydXB0X2ZlY190eF9oYW5k bGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCgkvL1JlY2VpdmUgdGhlIHBvaW50ZXIg dG8gdGhlIHByaXZhdGUgc3RydWN0dXJlCglzdHJ1Y3QgZmVjX3ByaXYgKmZwID0gKHN0cnVj dCBmZWNfcHJpdiAqKSBkZXYtPnByaXY7CgoJLy9SZWxlYXNlIHRoZSBzb2NrZXQgYnVmZmVy CglpZihmcC0+ZmVjcHJpdl90eGJ1ZltmcC0+ZmVjcHJpdl9jdXJyZW50X3R4XSkKCXsKCQlr ZnJlZShmcC0+ZmVjcHJpdl90eGJ1ZltmcC0+ZmVjcHJpdl9jdXJyZW50X3R4XSk7CgkJZnAt PmZlY3ByaXZfdHhidWZbZnAtPmZlY3ByaXZfY3VycmVudF90eF0gPSBOVUxMOwoJfQoJZnAt PmZlY3ByaXZfY3VycmVudF90eCA9IChmcC0+ZmVjcHJpdl9jdXJyZW50X3R4ICsgMSkgJiBG RUNfVFhfSU5ERVhfTUFTSzsKCglpZiAoTUNEX2RtYVN0YXR1cyhmcC0+ZmVjcHJpdl9mZWNf dHhfY2hhbm5lbCkgPT0gTUNEX0RPTkUpCgkJZm9yICg7IGZwLT5mZWNwcml2X2N1cnJlbnRf dHggIT0gZnAtPmZlY3ByaXZfbmV4dF90eDsgZnAtPmZlY3ByaXZfY3VycmVudF90eCA9IChm cC0+ZmVjcHJpdl9jdXJyZW50X3R4ICsgMSkgJiBGRUNfVFhfSU5ERVhfTUFTSykKCQl7CgkJ CWlmKGZwLT5mZWNwcml2X3R4YnVmW2ZwLT5mZWNwcml2X2N1cnJlbnRfdHhdKQoJCQl7CgkJ CQlrZnJlZShmcC0+ZmVjcHJpdl90eGJ1ZltmcC0+ZmVjcHJpdl9jdXJyZW50X3R4XSk7CgkJ CQlmcC0+ZmVjcHJpdl90eGJ1ZltmcC0+ZmVjcHJpdl9jdXJyZW50X3R4XSA9IE5VTEw7CgkJ CX0KCQl9CgoJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKCQluZXRpZl93YWtlX3F1 ZXVlKGRldik7Cgp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogTkFNRTogZmVjX2ludGVycnVw dF9yeF9oYW5kbGVyCioKKiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg d2hlbiB0aGUgZGF0YQoqICAgICAgICAgICAgICByZWNlcHRpb24gZnJvbSB0aGUgRkVDIHRv IHRoZSByZWNlcHRpb24gYnVmZmVyIGlzIGNvbXBsZXRlZC4KKgoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwp2b2lkIGZlY19pbnRlcnJ1cHRfZmVjX3J4X2hhbmRsZXIodW5zaWduZWQgbG9uZyBk YXRhKQp7CgoJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSop ZGF0YTsKCgkvL1JlY2VpdmUgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgc3RydWN0dXJl CglzdHJ1Y3QgZmVjX3ByaXYgKmZwID0gKHN0cnVjdCBmZWNfcHJpdiAqKSBkZXYtPnByaXY7 CgoJc3RydWN0IHNrX2J1ZmYgKnNrYjsKCglpbnQgaTsKCglmcC0+ZmVjcHJpdl9yeGZsYWcg PSAxOwoKCS8vIFNvbWUgYnVmZmVycyBjYW4gYmUgbWlzc2VkCglpZighKGZwLT5mZWNwcml2 X3J4ZGVzY1tmcC0+ZmVjcHJpdl9jdXJyZW50X3J4XS5zdGF0Q3RybCAmIE1DRF9GRUNfRU5E X0ZSQU1FKSkKCXsKCQkvLyBGaW5kIGEgdmFsaWQgaW5kZXgKCQlmb3IoaSA9IDA7IGkgPCBG RUNfUlhfQlVGX05VTUJFUiAmJiAhKGZwLT5mZWNwcml2X3J4ZGVzY1tmcC0+ZmVjcHJpdl9j dXJyZW50X3J4XS5zdGF0Q3RybCAmIE1DRF9GRUNfRU5EX0ZSQU1FKTsgaSsrLCBmcC0+ZmVj cHJpdl9jdXJyZW50X3J4ID0gKGZwLT5mZWNwcml2X2N1cnJlbnRfcnggKyAxKSAmIEZFQ19S WF9JTkRFWF9NQVNLKTsKCgkJaWYoaSA9PSBGRUNfUlhfQlVGX05VTUJFUikKCQl7CgkJCS8v IFRoZXJlIGFyZSBubyBkYXRhIHRvIHByb2Nlc3MKCQkJLy8gVGVsbCB0aGUgRE1BIHRvIGNv bnRpbnVlIHRoZSByZWNlcHRpb24KCQkJTUNEX2NvbnRpbkRtYShmcC0+ZmVjcHJpdl9mZWNf cnhfY2hhbm5lbCk7CgoJCQlmcC0+ZmVjcHJpdl9yeGZsYWcgPSAwOwoKCQkJcmV0dXJuOwoJ CX0KCX0KCglmb3IgKDsgZnAtPmZlY3ByaXZfcnhkZXNjW2ZwLT5mZWNwcml2X2N1cnJlbnRf cnhdLnN0YXRDdHJsICYgTUNEX0ZFQ19FTkRfRlJBTUU7CWZwLT5mZWNwcml2X2N1cnJlbnRf cnggPSAoZnAtPmZlY3ByaXZfY3VycmVudF9yeCArIDEpICYgRkVDX1JYX0lOREVYX01BU0sp CgkgewoJICAgIGlmKCAoKGZwLT5mZWNwcml2X3J4ZGVzY1tmcC0+ZmVjcHJpdl9jdXJyZW50 X3J4XS5sZW5ndGggLSA0KSA8PSBGRUNfTUFYQlVGX1NJWkUpICYmCgkJKChmcC0+ZmVjcHJp dl9yeGRlc2NbZnAtPmZlY3ByaXZfY3VycmVudF9yeF0ubGVuZ3RoIC0gNCkgPj0gMCkpIC8v IC0tdHltLS0KCSAgICB7CgkJc2tiID0gZGV2X2FsbG9jX3NrYihmcC0+ZmVjcHJpdl9yeGRl c2NbZnAtPmZlY3ByaXZfY3VycmVudF9yeF0uIGxlbmd0aCAtIDIpOwoJCWlmICghc2tiKQoJ CSAgICBmcC0+ZmVjcHJpdl9zdGF0LnJ4X2Ryb3BwZWQrKzsKCQllbHNlCgkJewoJCQlza2Jf cmVzZXJ2ZShza2IsIDIpOwoKCQkJbWVtY3B5KCh2b2lkICopc2tiX3B1dChza2IsIGZwLT5m ZWNwcml2X3J4ZGVzY1tmcC0+ZmVjcHJpdl9jdXJyZW50X3J4XS5sZW5ndGggLSA0KSwgJmZw LT5mZWNwcml2X3J4YnVmW2ZwLT5mZWNwcml2X2N1cnJlbnRfcnggKiBGRUNfTUFYQlVGX1NJ WkVdLCBmcC0+ZmVjcHJpdl9yeGRlc2NbZnAtPmZlY3ByaXZfY3VycmVudF9yeF0ubGVuZ3Ro IC0gNCk7CgkJCXNrYi0+ZGV2ID0gZGV2OwoJCQlza2ItPnBrdF90eXBlPVBBQ0tFVF9IT1NU OyAvLyBkZWZhdWx0CgkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRl dik7CgkJCW5ldGlmX3J4KHNrYik7CgkJfQoJICAgICB9CgoJCWZwLT5mZWNwcml2X3J4ZGVz Y1tmcC0+ZmVjcHJpdl9jdXJyZW50X3J4XS5sZW5ndGggPSBGRUNfTUFYQlVGX1NJWkU7CgkJ ZnAtPmZlY3ByaXZfcnhkZXNjW2ZwLT5mZWNwcml2X2N1cnJlbnRfcnhdLnN0YXRDdHJsICY9 IH5NQ0RfRkVDX0VORF9GUkFNRTsKCQlmcC0+ZmVjcHJpdl9yeGRlc2NbZnAtPmZlY3ByaXZf Y3VycmVudF9yeF0uc3RhdEN0cmwgfD0gTUNEX0ZFQ19CVUZfUkVBRFk7CgoJfQoKCS8vIFRl bGwgdGhlIERNQSB0byBjb250aW51ZSB0aGUgcmVjZXB0aW9uCglNQ0RfY29udGluRG1hKGZw LT5mZWNwcml2X2ZlY19yeF9jaGFubmVsKTsKCglmcC0+ZmVjcHJpdl9yeGZsYWcgPSAwOwoK fQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgoqIE5BTUU6IGZlY19pbnRlcnJ1cHRfaGFuZGxlcgoq CiogREVTQ1JJUFRJT046IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gc29tZSBzcGVj aWFsIGVycm9ycyBvY2N1cgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgZmVjX2ludGVy cnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJl Z3MpCnsKCglzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICop IGRldl9pZDsKCgkvL1JlY2VpdmUgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgc3RydWN0 dXJlCglzdHJ1Y3QgZmVjX3ByaXYgKmZwID0gKHN0cnVjdCBmZWNfcHJpdiAqKSBkZXYtPnBy aXY7CgoJLy8gUmVjZWl2ZSB0aGUgYmFzZSBhZGRyZXNzCgl1bnNpZ25lZCBsb25nIGJhc2Vf YWRkciA9ICh1bnNpZ25lZCBsb25nKSBkZXYtPmJhc2VfYWRkcjsKCgkvLyBFdmVudHMKCXVu c2lnbmVkIGxvbmcgZXZlbnRzOwoJCgkvLyBSZWFkIGFuZCBjbGVhciB0aGUgZXZlbnRzIAoJ ZXZlbnRzID0gRkVDX0VJUihiYXNlX2FkZHIpICYgRkVDX0VJTVIoYmFzZV9hZGRyKTsKCUZF Q19FSVIoYmFzZV9hZGRyKSA9IGV2ZW50czsKCglpZiAoZXZlbnRzICYgRkVDX0VJUl9STCkK CQlmcC0+ZmVjcHJpdl9zdGF0LnR4X2Fib3J0ZWRfZXJyb3JzKys7CgoJaWYgKGV2ZW50cyAm IEZFQ19FSVJfSEJFUlIpCgkJZnAtPmZlY3ByaXZfc3RhdC50eF9oZWFydGJlYXRfZXJyb3Jz Kys7Cgp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCiogTkFNRTogZmVjX2ludGVycnVwdF90eF9o YW5kbGVyX2ZlYzAKKgoqIERFU0NSSVBUSU9OOiBUaGlzIGlzIHRoZSBETUEgaW50ZXJydXB0 IGhhbmRsZXIgdXNpbmcgIGZvciBGRUMwCiogICAgICAgICAgICAgIHRyYW5zbWlzc2lvbi4K KiAgICAgICAgICAgICAgIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIGZlY19pbnRlcnJ1 cHRfZmVjX3R4X2hhbmRsZXJfZmVjMCh2b2lkKQp7CglmZWNfaW50ZXJydXB0X2ZlY190eF9o YW5kbGVyKCZmZWNfZGV2X2ZlYzApOwp9CgojaWZkZWYgICBGRUNfMgovKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCiogTkFNRTogZmVjX2ludGVycnVwdF90eF9oYW5kbGVyX2ZlYzEKKgoqIERFU0NS SVBUSU9OOiBUaGlzIGlzIHRoZSBETUEgaW50ZXJydXB0IGhhbmRsZXIgdXNpbmcgZm9yIHRo ZSBGRUMxCiogICAgICAgICAgICAgIHRyYW5zbWlzc2lvbi4KKiAgICAgICAgICAgICAgIAoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwp2b2lkIGZlY19pbnRlcnJ1cHRfZmVjX3R4X2hhbmRsZXJf ZmVjMSh2b2lkKQp7CglmZWNfaW50ZXJydXB0X2ZlY190eF9oYW5kbGVyKCZmZWNfZGV2X2Zl YzEpOwp9CiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIE5BTUU6IGZlY19pbnRlcnJ1 cHRfcnhfaGFuZGxlcl9mZWMwCioKKiBERVNDUklQVElPTjogVGhpcyBpcyB0aGUgRE1BIGlu dGVycnVwdCBoYW5kbGVyIHVzaW5nIGZvciB0aGUgRkVDMAoqICAgICAgICAgICAgICByZWNl cHRpb24uCiogICAgICAgICAgICAgICAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBmZWNf aW50ZXJydXB0X2ZlY19yeF9oYW5kbGVyX2ZlYzAodm9pZCkKewoJdGFza2xldF9zY2hlZHVs ZSgmZmVjX3Rhc2tsZXRfZmVjMCk7Cn0KCiNpZmRlZiAgIEZFQ18yCi8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKiBOQU1FOiBmZWNfaW50ZXJydXB0X3J4X2hhbmRsZXJfZmVjMQoqCiogREVTQ1JJ UFRJT046IFRoaXMgaXMgdGhlIERNQSBpbnRlcnJ1cHQgaGFuZGxlciB1c2luZyBmb3IgdGhl IEZFQzEKKiAgICAgICAgICAgICAgcmVjZXB0aW9uLgoqCioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CnZvaWQgZmVjX2ludGVycnVwdF9mZWNfcnhfaGFuZGxlcl9mZWMxKHZvaWQpCnsKCXRhc2ts ZXRfc2NoZWR1bGUoJmZlY190YXNrbGV0X2ZlYzEpOwp9CgojZW5kaWYKCi8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKiBOQU1FOiBmZWNfcnhfdGltZXJfaGFuZGxlcgoqCiogREVTQ1JJUFRJT046 IElmIHRoZSBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiByZWNlaXZlZCBmcmFtZXMgd2FzIGxv c3QKKiAgICAgICAgICAgICAgYW5kIERNQSBzdG9wcGVkIHRoZSByZWNlcHRpb24sIHRoaXMg ZnVuY3Rpb24gY2xlYXJzCiogICAgICAgICAgICAgIHRoZSB0cmFuc21pc3Npb24gZGVzY3Jp cHRvcnMgYW5kIHN0YXJ0cyBETUEgCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBmZWNf cnhfdGltZXJfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCnsKCglzdHJ1Y3QgZmVjX3By aXYgKmZwOwoJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7CglpbnQgaTsKCQoJLy9SZWNlaXZl IHRoZSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBvZiBGRUMwCglmcCA9IChz dHJ1Y3QgZmVjX3ByaXYgKikgZmVjX2Rldl9mZWMwLnByaXY7CgliYXNlX2FkZHIgPSBmZWNf ZGV2X2ZlYzAuYmFzZV9hZGRyOwoKCS8vSWYgcmVjZXB0aW9uIGlzIHN0b3BwZWQsIHJlaW5p dGlhbGl6ZSBkZXNjcmlwdG9ycwoJaWYgKE1DRF9kbWFTdGF0dXMoZnAtPmZlY3ByaXZfZmVj X3J4X2NoYW5uZWwpID09IE1DRF9ET05FICYmICFmcC0+ZmVjcHJpdl9yeGZsYWcpCgl7CgoJ CS8vIEluaXRpYWxpemUgcmVjZXB0aW9uIGRlc2NyaXB0b3JzIGFuZCBzdGFydCBETUEgZm9y IHRoZSByZWNlcHRpb24KCQlmb3IgKGkgPSAwOyBpIDwgRkVDX1JYX0JVRl9OVU1CRVI7IGkr KykKCQl7CgkJCWZwLT5mZWNwcml2X3J4ZGVzY1tpXS5zdGF0Q3RybCA9IE1DRF9GRUNfQlVG X1JFQURZIHwgTUNEX0ZFQ19JTlRFUlJVUFQ7CgkJCWZwLT5mZWNwcml2X3J4ZGVzY1tpXS5s ZW5ndGggPSBGRUNfTUFYQlVGX1NJWkU7CgkJfQoKCQlmcC0+ZmVjcHJpdl9yeGRlc2NbaSAt IDFdLnN0YXRDdHJsIHw9IE1DRF9GRUNfV1JBUDsKCQlmcC0+ZmVjcHJpdl9jdXJyZW50X3J4 ID0gMDsKCgkJTUNEX3N0YXJ0RG1hKGZwLT5mZWNwcml2X2ZlY19yeF9jaGFubmVsLAoJCQkg ICAgIChjaGFyICopIGZwLT5mZWNwcml2X3J4ZGVzYywgMCwKCQkJICAgICAodW5zaWduZWQg Y2hhciAqKSAmKEZFQ19GRUNSRkRSKGJhc2VfYWRkcikpLCAwLAoJCQkgICAgIEZFQ19NQVhf RlJNX1NJWkUsIDAsIGZwLT5mZWNwcml2X2luaXRpYXRvcl9yeCwKCQkJICAgICBGRUNfUlhf RE1BX1BSSSwgTUNEX0ZFQ1JYX0RNQSB8IE1DRF9JTlRFUlJVUFQsCgkJCSAgICAgTUNEX05P X0NTVU0gfCBNQ0RfTk9fQllURV9TV0FQKTsKCX0KI2lmZGVmICAgRkVDXzIKCgkvL1JlY2Vp dmUgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgc3RydWN0dXJlIG9mIEZFQzEKCWZwID0g KHN0cnVjdCBmZWNfcHJpdiAqKSBmZWNfZGV2X2ZlYzEucHJpdjsKCWJhc2VfYWRkciA9IGZl Y19kZXZfZmVjMS5iYXNlX2FkZHI7CgoJLy9JZiByZWNlcHRpb24gaXMgc3RvcHBlZCwgcmVp bml0aWFsaXplIGRlc2NyaXB0b3JzCglpZiAoTUNEX2RtYVN0YXR1cyhmcC0+ZmVjcHJpdl9m ZWNfcnhfY2hhbm5lbCkgPT0gTUNEX0RPTkUgJiYgIWZwLT5mZWNwcml2X3J4ZmxhZykKCXsK CgkJLy8gSW5pdGlhbGl6ZSByZWNlcHRpb24gZGVzY3JpcHRvcnMgYW5kIHN0YXJ0IERNQSBm b3IgdGhlIHJlY2VwdGlvbgoJCWZvciAoaSA9IDA7IGkgPCBGRUNfUlhfQlVGX05VTUJFUjsg aSsrKQoJCXsKCQkJZnAtPmZlY3ByaXZfcnhkZXNjW2ldLnN0YXRDdHJsID0gTUNEX0ZFQ19C VUZfUkVBRFkgfCBNQ0RfRkVDX0lOVEVSUlVQVDsKCQkJZnAtPmZlY3ByaXZfcnhkZXNjW2ld Lmxlbmd0aCA9IEZFQ19NQVhCVUZfU0laRTsKCQl9CgoJCWZwLT5mZWNwcml2X3J4ZGVzY1tp IC0gMV0uc3RhdEN0cmwgfD0gTUNEX0ZFQ19XUkFQOwoJCWZwLT5mZWNwcml2X2N1cnJlbnRf cnggPSAwOwoKCQlNQ0Rfc3RhcnREbWEoZnAtPmZlY3ByaXZfZmVjX3J4X2NoYW5uZWwsCgkJ CSAgICAgKGNoYXIgKikgZnAtPmZlY3ByaXZfcnhkZXNjLCAwLAoJCQkgICAgICh1bnNpZ25l ZCBjaGFyICopICYoRkVDX0ZFQ1JGRFIoYmFzZV9hZGRyKSksIDAsCgkJCSAgICAgRkVDX01B WF9GUk1fU0laRSwgMCwgZnAtPmZlY3ByaXZfaW5pdGlhdG9yX3J4LAoJCQkgICAgIEZFQ19S WF9ETUFfUFJJLCBNQ0RfRkVDUlhfRE1BIHwgTUNEX0lOVEVSUlVQVCwKCQkJICAgICBNQ0Rf Tk9fQ1NVTSB8IE1DRF9OT19CWVRFX1NXQVApOwoJfQojZW5kaWYKCW1vZF90aW1lcigmZmVj X3J4X3RpbWVyLCBqaWZmaWVzICsgSFogKiBGRUNfUlhfVElNRU9VVCk7Cn0KCiNpZm5kZWYg TU9EVUxFCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCiogTkFNRTogZmVjX21hY19zZXR1cDAKKgoq IERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1BQyBhZGRyZXNzIG9mIEZF QzAgZnJvbSBjb21tYW5kIGxpbmUgCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW50IF9faW5p dCBmZWNfbWFjX3NldHVwMChjaGFyICpzKQp7CglpZighcyB8fCAhKnMpCgkJcmV0dXJuIDE7 CQoJCglpZihmZWNfc3RyX3RvX21hYyhzLCBmZWNfbWFjX2FkZHJfZmVjMCkpCgkJcHJpbnRr KCJUaGUgTUFDIGFkZHJlc3Mgb2YgRkVDMCBjYW5ub3QgYmUgc2V0IGZyb20gY29tbWFuZCBs aW5lIik7CglyZXR1cm4gMTsKCQp9CgojaWZkZWYgICBGRUNfMgoKLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgoqIE5BTUU6IGZlY19tYWNfc2V0dXAxCioKKiBERVNDUklQVElPTjogVGhpcyBmdW5j dGlvbiBzZXRzIHRoZSBNQUMgYWRkcmVzcyBvZiBGRUMxIGZyb20gY29tbWFuZCBsaW5lIAoq CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCmludCBfX2luaXQgZmVjX21hY19zZXR1cDEoY2hhciAq cykKewoJaWYoIXMgfHwgISpzKQoJCXJldHVybiAxOwkKCQoJCglpZihmZWNfc3RyX3RvX21h YyhzLCBmZWNfbWFjX2FkZHJfZmVjMSkpCgkJcHJpbnRrKCJUaGUgTUFDIGFkZHJlc3Mgb2Yg RkVDMSBjYW5ub3QgYmUgc2V0IGZyb20gY29tbWFuZCBsaW5lIik7CglyZXR1cm4gMTsKCQp9 CiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIE5BTUU6IGZlY19zdHJfdG9fbWFjCioK KiBERVNDUklQVElPTjogVGhpcyBmdW5jdGlvbiBpbnRlcnByZXRzIHRoZSBjaGFyYWN0ZXIg c3RyaW5nIGludG8gTUFDIGFkZHIgCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW50IGZlY19z dHJfdG9fbWFjKCBjaGFyICpzdHJfbWFjLCB1bnNpZ25lZCBjaGFyKiBhZGRyKQp7CiAgICB1 bnNpZ25lZCBsb25nIHZhbDsKCWNoYXIgYzsKCXVuc2lnbmVkIGxvbmcgb2N0ZXRbNl0sICpv Y3RldHB0ciA9IG9jdGV0OwoJaW50IGk7CmFnYWluOgoKCXZhbCA9IDA7Cgl3aGlsZSAoYyA9 ICpzdHJfbWFjKSAKCXsKCQlpZiAoKGM+PScwJykmJihjPD0nOScpKSAKCQl7CgkJCXZhbCA9 ICh2YWwgKiAxNikgKyAoYyAtICcwJyk7CgkJCXN0cl9tYWMrKzsKCQkJY29udGludWU7CgkJ fQoJCWVsc2UKCQlpZiAoKChjPj0nYScpJiYoYzw9J2YnKSl8fCgoYz49J0EnKSYmKGM8PSdG JykpKSAKCQl7CgkJCXZhbCA9ICh2YWwgPDwgNCkgKyAoYyArIDEwIC0gKCgoYz49J2EnKSYm KGM8PSdmJykpID8gJ2EnIDogJ0EnKSk7CgkJCXN0cl9tYWMrKzsKCQkJY29udGludWU7CgkJ fQoJCWJyZWFrOwoJfQoJaWYgKCpzdHJfbWFjID09ICc6JykgCgl7CgkJKm9jdGV0cHRyKysg PSB2YWwsIHN0cl9tYWMrKzsKCQlpZiAob2N0ZXRwdHIgPj0gb2N0ZXQgKyA2KQoJCQlyZXR1 cm4gMTsKCQlnb3RvIGFnYWluOwoJfQoJCgkgLy9DaGVjayBmb3IgdHJhaWxpbmcgY2hhcmFj dGVycy4KCWlmICgqc3RyX21hYyAmJiAhKCpzdHJfbWFjPT0nICcpKQoJCXJldHVybiAxOwoJ Km9jdGV0cHRyKysgPSB2YWw7CgoJaWYgKChvY3RldHB0ciAtIG9jdGV0KT09NikKCXsKCSAg IGZvcihpPTA7aTw9NjtpKyspCgkgICAgICBhZGRyW2ldPW9jdGV0W2ldOwoJfQogICAgZWxz ZQoJCXJldHVybiAxOwoKCXJldHVybiAwOwoJCn0KI2VuZGlmCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZWMuaAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY2NAAwMDAwNzY0ADAwMDAxNDQAMDAwMDAw MTY2NjcAMTA0NzAwNzYwMzcAMDExNTIzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcGZlaWZmZXIAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB1c2VycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAojZGVmaW5lICAgRkVDX0JBU0VfQUREUl9GRUMwICAgICAgICAgICAgICAgICgodW5z aWduZWQgaW50KU1DRl9NQkFSICsgMHg5MDAwKQojZGVmaW5lICAgRkVDX0JBU0VfQUREUl9G RUMxICAgICAgICAgICAgICAgICgodW5zaWduZWQgaW50KU1DRl9NQkFSICsgMHg5ODAwKQoK Ly8jZGVmaW5lICAgRkVDX0lOVENfSU1SSF9JTlRfTUFTSzM4ICAgICAgICAgICgweDAwMDAw MDQwKQovLyNkZWZpbmUgICBGRUNfSU5UQ19JTVJIX0lOVF9NQVNLMzkgICAgICAgICAgKDB4 MDAwMDAwODApCi8vI2RlZmluZSAgIEZFQ19JTlRDX0lDUl9GRUMwICAgICAgICAgICAgICAg ICAoMHgzMCkKLy8jZGVmaW5lICAgRkVDX0lOVENfSUNSX0ZFQzEgICAgICAgICAgICAgICAg ICgweDMxKQojZGVmaW5lICAgRkVDX0ZFQ0kyQ0lSUSAgICAgICAgICAgICAgICAgICAgICgw eEZGQzApCiNkZWZpbmUgICBGRUNfR1BJT19QQVJfRkVDSTJDSVJRICAgICAgICAgICAgKih2 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopKCh1bnNpZ25lZCBpbnQpTUNGX01CQVIgKyAweEE0 NCkKLy8jZGVmaW5lICAgRkVDX0lOVENfSUNSbih4KSAgICAgICAgICAgICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIGNoYXIgKikodm9pZCopKCh1bnNpZ25lZCBpbnQpIE1DRl9NQkFS ICsgMHgwMDA3NDArKCh4KSoweDAwMSkpKQovLyNkZWZpbmUgICBGRUNfSU5UQ19JTVJIICAg ICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSgodW5zaWduZWQg aW50KU1DRl9NQkFSICsgMHgwMDA3MDgpCgojZGVmaW5lICAgRkVDX0VDUl9ESVNBQkxFICAg ICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQoKI2RlZmluZSAgIEZFQ19FQ1IoeCkgICAg ICAgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSh4ICsgMHgw MjQpCiNkZWZpbmUgICBGRUNfRUlSKHgpICAgICAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgwMDQpCiNkZWZpbmUgICBGRUNfUEFMUih4KSAg ICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgw RTQpCiNkZWZpbmUgICBGRUNfUEFVUih4KSAgICAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgwRTgpCiNkZWZpbmUgICBGRUNfSUFMUih4KSAg ICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgx MUMpCiNkZWZpbmUgICBGRUNfSUFVUih4KSAgICAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgxMTgpCiNkZWZpbmUgICBGRUNfR0FMUih4KSAg ICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgx MjQpCiNkZWZpbmUgICBGRUNfR0FVUih4KSAgICAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgxMjApCiNkZWZpbmUgICBGRUNfUkNSKHgpICAg ICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgw ODQpCiNkZWZpbmUgICBGRUNfRkVDUkZDUih4KSAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgxOEMpCiNkZWZpbmUgICBGRUNfRkVDUkZBUih4 KSAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgx OTgpCiNkZWZpbmUgICBGRUNfRkVDVEZDUih4KSAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgxQUMpCiNkZWZpbmUgICBGRUNfRkVDVEZBUih4 KSAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgx QjgpCiNkZWZpbmUgICBGRUNfRkVDVEZXUih4KSAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgxNDQpCiNkZWZpbmUgICBGRUNfQ1RDV1IoeCkg ICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgx QzgpCiNkZWZpbmUgICBGRUNfRUlNUih4KSAgICAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgwMDgpCiNkZWZpbmUgICBGRUNfVENSKHgpICAg ICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgw QzQpCiNkZWZpbmUgICBGRUNfTUlCQyh4KSAgICAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgwNjQpCiNkZWZpbmUgICBGRUNfTVNDUih4KSAg ICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgw NDQpCiNkZWZpbmUgICBGRUNfRkVDVEZEUih4KSAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgxQTQpCiNkZWZpbmUgICBGRUNfRkVDUkZEUih4 KSAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgx ODQpCiNkZWZpbmUgICBGRUNfRkVDVEZTUih4KSAgICAgICAgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgxQTgpCiNkZWZpbmUgICBGRUNTVEFUX1JNT05f Ul9QQUNLRVRTKHgpICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy ODQpCiNkZWZpbmUgICBGRUNTVEFUX1JNT05fVF9QQUNLRVRTKHgpICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyMDQpCiNkZWZpbmUgICBGRUNTVEFUX1JNT05f Ul9PQ1RFVFMoeCkgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy QzQpCiNkZWZpbmUgICBGRUNTVEFUX1JNT05fVF9PQ1RFVFMoeCkgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyNDQpCiNkZWZpbmUgICBGRUNTVEFUX1JNT05f Ul9VTkRFUlNJWkUoeCkgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy OTQpCiNkZWZpbmUgICBGRUNTVEFUX1JNT05fUl9PVkVSU0laRSh4KSAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyOTgpCiNkZWZpbmUgICBGRUNTVEFUX1JNT05f Ul9GUkFHKHgpICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy OUMpCiNkZWZpbmUgICBGRUNTVEFUX1JNT05fUl9KQUIoeCkgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyQTApCiNkZWZpbmUgICBGRUNTVEFUX1JNT05f Ul9NQ19QS1QoeCkgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy OEMpCiNkZWZpbmUgICBGRUNTVEFUX1JNT05fVF9DT0woeCkgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyMjQpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVf Ul9BTElHTih4KSAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy RDQpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVfUl9DUkMoeCkgICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyRDApCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVf Ul9NQUNFUlIoeCkgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy RDgpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVfVF9DU0VSUih4KSAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyNjgpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVf VF9NQUNFUlIoeCkgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy NjQpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVfVF9MQ09MKHgpICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyNUMpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVf Ul9PQ1RFVFNfT0soeCkgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy RTApCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVfVF9PQ1RFVFNfT0soeCkgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyNzQpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVf Ul9EUk9QKHgpICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy QzgpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVfVF9EUk9QKHgpICAgICAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyNDgpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVf Ul9GUkFNRV9PSyh4KSAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgy Q0MpCiNkZWZpbmUgICBGRUNTVEFUX0lFRUVfVF9GUkFNRV9PSyh4KSAgICAgICAgKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgyNEMpCiNkZWZpbmUgICBGRUNfTU1GUih4KSAg ICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSh4ICsgMHgw NDApCgojZGVmaW5lICAgRkVDX01BWF9GUk1fU0laRSAgICAgICAgICAgICAgICAgICgxNTE4 KQojZGVmaW5lICAgRkVDX01BWEJVRl9TSVpFICAgICAgICAgICAgICAgICAgICgxNTIwKQoK I2RlZmluZSAgIEZFQ19FQ1JfUkVTRVQgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAw MSkKI2RlZmluZSAgIEZFQ19FSVJfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAoMHhGRkZG RkZGRikKI2RlZmluZSAgIEZFQ19FSVJfUkwgICAgICAgICAgICAgICAgICAgICAgICAoMHgw MDEwMDAwMCkKI2RlZmluZSAgIEZFQ19FSVJfSEJFUlIgICAgICAgICAgICAgICAgICAgICAo MHg4MDAwMDAwMCkKI2RlZmluZSAgIEZFQ19SQ1JfTUFYX0ZSTV9TSVpFICAgICAgICAgICAg ICAoRkVDX01BWF9GUk1fU0laRSA8PCAxNikKI2RlZmluZSAgIEZFQ19SQ1JfUFJPTSAgICAg ICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwOCkKI2RlZmluZSAgIEZFQ19SQ1JfTUlJICAg ICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKI2RlZmluZSAgIEZFQ19GRUNSRkNS X0ZSTSAgICAgICAgICAgICAgICAgICAoMHgwODAwMDAwMCkKI2RlZmluZSAgIEZFQ19GRUNS RkNSX0dSICAgICAgICAgICAgICAgICAgICAoMHg3IDw8IDI0KQojZGVmaW5lICAgRkVDX0ZF Q1JGQVJfQUxBUk0gICAgICAgICAgICAgICAgICgweDMwMCkKI2RlZmluZSAgIEZFQ19GRUNU RkNSX0ZSTSAgICAgICAgICAgICAgICAgICAoMHgwODAwMDAwMCkKI2RlZmluZSAgIEZFQ19G RUNURkNSX0dSICAgICAgICAgICAgICAgICAgICAoMHg3IDw8IDI0KQojZGVmaW5lICAgRkVD X0ZFQ1RGQVJfQUxBUk0gICAgICAgICAgICAgICAgICgweDEwMCkKI2RlZmluZSAgIEZFQ19G RUNURldSX1hXTVJLICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKI2RlZmluZSAgIEZF Q19DVENXUl9URkNXX0NSQyAgICAgICAgICAgICAgICAoMHgwMzAwMDAwMCkKI2RlZmluZSAg IEZFQ19UQ1JfRkRFTiAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKI2RlZmlu ZSAgIEZFQ19UQ1JfSEJDICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMikKI2Rl ZmluZSAgIEZFQ19SQ1JfRFJUICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMikK I2RlZmluZSAgIEZFQ19FSU1SX01BU0sgICAgICAgICAgICAgICAgICAgICAoRkVDX0VJUl9S TCB8IEZFQ19FSVJfSEJFUlIpCiNkZWZpbmUgICBGRUNfRUNSX0VUSEVSRU4gICAgICAgICAg ICAgICAgICAgKDB4MDAwMDAwMDIpCiNkZWZpbmUgICBGRUNfRkVDVEZDUl9NU0sgICAgICAg ICAgICAgICAgICAgKDB4MDBGODAwMDApCiNkZWZpbmUgICBGRUNfRkVDUkZDUl9NU0sgICAg ICAgICAgICAgICAgICAgKDB4MDBGODAwMDApCiNkZWZpbmUgICBGRUNfRUlSX0dSQSAgICAg ICAgICAgICAgICAgICAgICAgKDB4MTAwMDAwMDApCiNkZWZpbmUgICBGRUNfVENSX0dUUyAg ICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCiNkZWZpbmUgICBGRUNfTUlCQ19F TkFCTEUgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCiNkZWZpbmUgICBGRUNfTUlC X0xFTiAgICAgICAgICAgICAgICAgICAgICAgKDIyOCkKCiNpZmRlZiBDT05GSUdfQ09CUkE1 NDg1CiNkZWZpbmUgICBGRUNfUEhZX0FERFIgICAgICAgICAgICAgICAgICAgICAgKDB4MUYp CiNlbHNlIAojZGVmaW5lICAgRkVDX1BIWV9BRERSICAgICAgICAgICAgICAgICAgICAgICgw eDAxKQojZW5kaWYKCiNkZWZpbmUgRkVDX1JYX0RNQV9QUkkgICAgICAgICAgICAgICAgICAg ICAgKDYpCiNkZWZpbmUgRkVDX1RYX0RNQV9QUkkgICAgICAgICAgICAgICAgICAgICAgKDYp CgojZGVmaW5lICAgRkVDX1RYX0JVRl9OVU1CRVIgICAgICAgICAgICAgICAgICg4KQojZGVm aW5lICAgRkVDX1JYX0JVRl9OVU1CRVIgICAgICAgICAgICAgICAgICgxNikKCiNkZWZpbmUg ICBGRUNfUlhfREVTQ19GRUMwICAgICAgICAgICAgICAgICAgU1lTX1NSQU1fRkVDX1NUQVJU CiNkZWZpbmUgICBGRUNfVFhfREVTQ19GRUMwICAgICAgICAgICAgICAgICAgRkVDX1JYX0RF U0NfRkVDMCArIEZFQ19SWF9CVUZfTlVNQkVSICogc2l6ZW9mKE1DRF9idWZEZXNjRmVjKQoK I2RlZmluZSAgIEZFQ19SWF9ERVNDX0ZFQzEgICAgICAgICAgICAgICAgICBTWVNfU1JBTV9G RUNfU1RBUlQgKyBTWVNfU1JBTV9GRUNfU0laRS8yCiNkZWZpbmUgICBGRUNfVFhfREVTQ19G RUMxICAgICAgICAgICAgICAgICAgRkVDX1JYX0RFU0NfRkVDMSArIEZFQ19SWF9CVUZfTlVN QkVSICogc2l6ZW9mKE1DRF9idWZEZXNjRmVjKQoKI2RlZmluZSAgIEZFQ19UWF9JTkRFWF9N QVNLICAgICAgICAgICAgICAgICAoMHg3KQojZGVmaW5lICAgRkVDX1JYX0lOREVYX01BU0sg ICAgICAgICAgICAgICAgICgweGYpCgojZGVmaW5lICAgRkVDX0VJUl9NSUkgICAgICAgICAg ICAgICAgICAgICAgICgweDAwODAwMDAwKQojZGVmaW5lICAgRkVDX01NRlJfUkVBRCAgICAg ICAgICAgICAgICAgICAgICgweDYwMDIwMDAwKQojZGVmaW5lICAgRkVDX01NRlJfV1JJVEUg ICAgICAgICAgICAgICAgICAgICgweDUwMDIwMDAwKQoKI2RlZmluZSAgIEZFQ19GTEFHU19S WCAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKCiNkZWZpbmUgICBGRUNfQ1JD UE9MICAgICAgICAgICAgICAgICAgICAgICAgKDB4RURCODgzMjApCgojZGVmaW5lICAgRkVD X01JSV9USU1FT1VUICAgICAgICAgICAgICAgICAgICgyKQojZGVmaW5lICAgRkVDX0dSX1RJ TUVPVVQgICAgICAgICAgICAgICAgICAgICgxKQojZGVmaW5lICAgRkVDX1RYX1RJTUVPVVQg ICAgICAgICAgICAgICAgICAgICgxKQojZGVmaW5lICAgRkVDX1JYX1RJTUVPVVQgICAgICAg ICAgICAgICAgICAgICgxKQoKaW50IGZlY19yZWFkX21paSh1bnNpZ25lZCBpbnQgYmFzZV9h ZGRyLCB1bnNpZ25lZCBpbnQgcGEsIHVuc2lnbmVkIGludCByYSwKCQkgdW5zaWduZWQgaW50 ICpkYXRhKTsKaW50IGZlY193cml0ZV9taWkodW5zaWduZWQgaW50IGJhc2VfYWRkciwgdW5z aWduZWQgaW50IHBhLCB1bnNpZ25lZCBpbnQgcmEsCgkJICB1bnNpZ25lZCBpbnQgZGF0YSk7 CgojZGVmaW5lIGluaXRfdHJhbnNjZWl2ZXIga3M4NzIxX2luaXRfdHJhbnNjZWl2ZXIKAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAA= --------------090108010108060604080703--