From mboxrd@z Thu Jan 1 00:00:00 1970 From: jassi brar Subject: Re: [PATCH 1/3] [SPI] [OMAP] Add OMAP spi100k driver Date: Mon, 7 Dec 2009 14:33:18 +0900 Message-ID: <1b68c6790912062133kdc901dcnbb043ce14fc1049@mail.gmail.com> References: <1260161299-17656-1-git-send-email-darkstar6262@gmail.com> <1260161299-17656-2-git-send-email-darkstar6262@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Cory Maccarrone Return-path: In-Reply-To: <1260161299-17656-2-git-send-email-darkstar6262-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: spi-devel-general-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: linux-spi.vger.kernel.org T24gTW9uLCBEZWMgNywgMjAwOSBhdCAxOjQ4IFBNLCBDb3J5IE1hY2NhcnJvbmUgPGRhcmtzdGFy NjI2MkBnbWFpbC5jb20+IHdyb3RlOgo+IFRoaXMgY2hhbmdlIGFkZHMgdGhlIE9NQVAgU1BJIDEw MGsgZHJpdmVyIGNyZWF0ZWQgYnkKPiBGYWJyaWNlIENyb2hhcyA8ZmNyb2hhc0BnbWFpbC5jb20+ LiDCoFRoaXMgU1BJIGJ1cyBpcyBmb3VuZCBvbgo+IE9NQVA3eHgtc2VyaWVzIHNtYXJ0cGhvbmVz LCBhbmQgZm9yIG1hbnksIHRoZSB0b3VjaHNjcmVlbiBpcwo+IGF0dGFjaGVkIHRvIHRoaXMgYnVz Lgo+Cj4gVGhlIGxpb24ncyBzaGFyZSBvZiB0aGUgd29yayB3YXMgZG9uZSBieSBGYWJyaWNlIG9u IHRoaXMgZHJpdmVyIC0tCj4gSSBhbSBtZXJlbHkgcG9ydGluZyBpdCBmcm9tIHRoZSBMaW53aXph cmQgcHJvamVjdCBvbiBoaXMgYmVoYWxmLgo+Cj4gU2lnbmVkLW9mZi1ieTogQ29yeSBNYWNjYXJy b25lIDxkYXJrc3RhcjYyNjJAZ21haWwuY29tPgo+IC0tLQo+IMKgZHJpdmVycy9zcGkvS2NvbmZp ZyDCoCDCoCDCoCDCoCB8IMKgIMKgNiArCj4gwqBkcml2ZXJzL3NwaS9NYWtlZmlsZSDCoCDCoCDC oCDCoHwgwqAgwqAxICsKPiDCoGRyaXZlcnMvc3BpL29tYXBfc3BpXzEwMGsuYyB8IMKgNjQyICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoDMgZmlsZXMgY2hh bmdlZCwgNjQ5IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zcGkvb21hcF9zcGlfMTAway5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25maWcKPiBpbmRleCA0YjZmN2NiLi43ZWY5 YjEyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3BpL0tjb25maWcKPiArKysgYi9kcml2ZXJzL3Nw aS9LY29uZmlnCj4gQEAgLTE2NCw2ICsxNjQsMTIgQEAgY29uZmlnIFNQSV9PTUFQMjRYWAo+IMKg IMKgIMKgIMKgIMKgU1BJIG1hc3RlciBjb250cm9sbGVyIGZvciBPTUFQMjR4eC9PTUFQMzR4eCBN dWx0aWNoYW5uZWwgU1BJCj4gwqAgwqAgwqAgwqAgwqAoTWNTUEkpIG1vZHVsZXMuCj4KPiArY29u ZmlnIFNQSV9PTUFQXzEwMEsKPiArIMKgIMKgIMKgIHRyaXN0YXRlICJPTUFQIFNQSSAxMDBLIgo+ ICsgwqAgwqAgwqAgZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmIChBUkNIX09NQVA4NTAgfHwgQVJD SF9PTUFQNzMwKQo+ICsgwqAgwqAgwqAgaGVscAo+ICsgwqAgwqAgwqAgwqAgT01BUCBTUEkgMTAw SyBtYXN0ZXIgY29udHJvbGxlciBmb3Igb21hcDd4eCBib2FyZHMuCj4gKwo+IMKgY29uZmlnIFNQ SV9PUklPTgo+IMKgIMKgIMKgIMKgdHJpc3RhdGUgIk9yaW9uIFNQSSBtYXN0ZXIgKEVYUEVSSU1F TlRBTCkiCj4gwqAgwqAgwqAgwqBkZXBlbmRzIG9uIFBMQVRfT1JJT04gJiYgRVhQRVJJTUVOVEFM Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZp bGUKPiBpbmRleCAyMWExMTgyLi41NWY2NzBkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3BpL01h a2VmaWxlCj4gKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKPiBAQCAtMjIsNiArMjIsNyBAQCBv YmotJChDT05GSUdfU1BJX0xNNzBfTExQKSDCoCDCoCDCoCDCoCDCoCDCoCs9IHNwaV9sbTcwbGxw Lm8KPiDCoG9iai0kKENPTkZJR19TUElfUFhBMlhYKSDCoCDCoCDCoCDCoCDCoCDCoCDCoCArPSBw eGEyeHhfc3BpLm8KPiDCoG9iai0kKENPTkZJR19TUElfT01BUF9VV0lSRSkgwqAgwqAgwqAgwqAg wqAgKz0gb21hcF91d2lyZS5vCj4gwqBvYmotJChDT05GSUdfU1BJX09NQVAyNFhYKSDCoCDCoCDC oCDCoCDCoCDCoCArPSBvbWFwMl9tY3NwaS5vCj4gK29iai0kKENPTkZJR19TUElfT01BUF8xMDBL KSDCoCDCoCDCoCDCoCDCoCDCoCs9IG9tYXBfc3BpXzEwMGsubwo+IMKgb2JqLSQoQ09ORklHX1NQ SV9PUklPTikgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqArPSBvcmlvbl9zcGku bwo+IMKgb2JqLSQoQ09ORklHX1NQSV9QTDAyMikgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqArPSBhbWJhLXBsMDIyLm8KPiDCoG9iai0kKENPTkZJR19TUElfTVBDNTJ4eF9QU0Mp IMKgIMKgIMKgIMKgIMKgKz0gbXBjNTJ4eF9wc2Nfc3BpLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zcGkvb21hcF9zcGlfMTAway5jIGIvZHJpdmVycy9zcGkvb21hcF9zcGlfMTAway5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5kMGViZmE4Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvc3BpL29tYXBfc3BpXzEwMGsuYwo+IEBAIC0wLDAgKzEsNjQyIEBA Cj4gKy8qCj4gKyAqIE9NQVA3eHggU1BJIDEwMGsgY29udHJvbGxlciBkcml2ZXIKPiArICogQXV0 aG9yOiBGYWJyaWNlIENyb2hhcyA8ZmNyb2hhc0BnbWFpbC5jb20+Cj4gKyAqIGZyb20gb3JpZ2lu YWwgb21hcDFfbWNzcGkgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw NiBOb2tpYSBDb3Jwb3JhdGlvbgo+ICsgKiBBdXRob3I6IMKgIMKgIMKgU2FtdWVsIE9ydGl6IDxz YW11ZWwub3J0aXpAbm9raWEuY29tPiBhbmQKPiArICogwqAgwqAgwqAgwqAgwqAgwqAgwqBKdWhh IFlyau+/vWzvv70gPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiArICogKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2Vl IHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQo+ICsgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQo+ICsgKgo+ ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW5p dC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2lvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGlu dXgvc3BpL3NwaS5oPgo+ICsKPiArI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KPiArCj4gKyNkZWZp bmUgT01BUDFfU1BJMTAwS19NQVhfRlJFUSDCoCDCoCDCoCDCoCDCoDQ4MDAwMDAwCj4gKwo+ICsj ZGVmaW5lIElDUl9TUElUQVMgwqAgwqAgwqAoT01BUDdYWF9JQ1JfQkFTRSArIDB4MTIpCj4gKwo+ ICsjZGVmaW5lIFNQSV9TRVRVUDEgwqAgwqAgwqAweDAwCj4gKyNkZWZpbmUgU1BJX1NFVFVQMiDC oCDCoCDCoDB4MDIKPiArI2RlZmluZSBTUElfQ1RSTCDCoCDCoCDCoCDCoDB4MDQKPiArI2RlZmlu ZSBTUElfU1RBVFVTIMKgIMKgIMKgMHgwNgo+ICsjZGVmaW5lIFNQSV9UWF9MU0IgwqAgwqAgwqAw eDA4Cj4gKyNkZWZpbmUgU1BJX1RYX01TQiDCoCDCoCDCoDB4MGEKPiArI2RlZmluZSBTUElfUlhf TFNCIMKgIMKgIMKgMHgwYwo+ICsjZGVmaW5lIFNQSV9SWF9NU0IgwqAgwqAgwqAweDBlCj4gKwo+ ICsjZGVmaW5lIFNQSV9TRVRVUDFfSU5UX1JFQURfRU5BQkxFIMKgIMKgIMKgKDFVTCA8PCA1KQo+ ICsjZGVmaW5lIFNQSV9TRVRVUDFfSU5UX1dSSVRFX0VOQUJMRSDCoCDCoCAoMVVMIDw8IDQpCj4g KyNkZWZpbmUgU1BJX1NFVFVQMV9DTE9DS19ESVZJU09SKHgpIMKgIMKgICgoeCkgPDwgMSkKPiAr I2RlZmluZSBTUElfU0VUVVAxX0NMT0NLX0VOQUJMRSDCoCDCoCDCoCDCoCAoMVVMIDw8IDApCj4g Kwo+ICsjZGVmaW5lIFNQSV9TRVRVUDJfQUNUSVZFX0VER0VfRkFMTElORyDCoCgwVUwgPDwgMCkK PiArI2RlZmluZSBTUElfU0VUVVAyX0FDVElWRV9FREdFX1JJU0lORyDCoCAoMVVMIDw8IDApCj4g KyNkZWZpbmUgU1BJX1NFVFVQMl9ORUdBVElWRV9MRVZFTCDCoCDCoCDCoCAoMFVMIDw8IDUpCj4g KyNkZWZpbmUgU1BJX1NFVFVQMl9QT1NJVElWRV9MRVZFTCDCoCDCoCDCoCAoMVVMIDw8IDUpCj4g KyNkZWZpbmUgU1BJX1NFVFVQMl9MRVZFTF9UUklHR0VSIMKgIMKgIMKgIMKgKDBVTCA8PCAxMCkK PiArI2RlZmluZSBTUElfU0VUVVAyX0VER0VfVFJJR0dFUiDCoCDCoCDCoCDCoCAoMVVMIDw8IDEw KQo+ICsKPiArI2RlZmluZSBTUElfQ1RSTF9TRU4oeCkgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg KCh4KSA8PCA3KQo+ICsjZGVmaW5lIFNQSV9DVFJMX1dPUkRfU0laRSh4KSDCoCDCoCDCoCDCoCDC oCAoKCh4KSAtIDEpIDw8IDIpCj4gKyNkZWZpbmUgU1BJX0NUUkxfV1IgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKDFVTCA8PCAxKQo+ICsjZGVmaW5lIFNQSV9DVFJMX1JEIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgICgxVUwgPDwgMCkKPiArCj4gKyNkZWZpbmUgU1BJX1NUQVRV U19XRSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoMVVMIDw8IDEpCj4gKyNkZWZpbmUgU1BJ X1NUQVRVU19SRCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoMVVMIDw8IDApCj4gKwo+ICsj ZGVmaW5lIFdSSVRFIDAKPiArI2RlZmluZSBSRUFEIMKgMQo+ICsKPiArCj4gKy8qIHVzZSBQSU8g Zm9yIHNtYWxsIHRyYW5zZmVycywgYXZvaWRpbmcgRE1BIHNldHVwL3RlYXJkb3duIG92ZXJoZWFk IGFuZAo+ICsgKiBjYWNoZSBvcGVyYXRpb25zOyBiZXR0ZXIgaGV1cmlzdGljcyBjb25zaWRlciB3 b3Jkc2l6ZSBhbmQgYml0cmF0ZS4KPiArICovCj4gKyNkZWZpbmUgRE1BX01JTl9CWVRFUyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA4Cj4gKwo+ICtzdHJ1Y3Qgb21hcDFfc3BpMTAwayB7Cj4g KyDCoCDCoCDCoCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgwqAgwqAgwqB3b3JrOwo+ICsgwqAgwqAgwqAg LyogbG9jayBwcm90ZWN0cyBxdWV1ZSBhbmQgcmVnaXN0ZXJzICovCj4gKyDCoCDCoCDCoCBzcGlu bG9ja190IMKgIMKgIMKgIMKgIMKgIMKgIMKgbG9jazsKPiArIMKgIMKgIMKgIHN0cnVjdCBsaXN0 X2hlYWQgwqAgwqAgwqAgwqBtc2dfcXVldWU7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgc3BpX21hc3Rl ciDCoCDCoCDCoCAqbWFzdGVyOwo+ICsgwqAgwqAgwqAgc3RydWN0IGNsayDCoCDCoCDCoCDCoCDC oCDCoCDCoCppY2s7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgY2xrIMKgIMKgIMKgIMKgIMKgIMKgIMKg KmZjazsKPiArIMKgIMKgIMKgIC8qIFZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9s bGVyICovCj4gKyDCoCDCoCDCoCB2b2lkIF9faW9tZW0gwqAgwqAgwqAgwqAgwqAgwqAqYmFzZTsK PiArIMKgIMKgIMKgIHVuc2lnbmVkIGxvbmcgwqAgwqAgwqAgwqAgwqAgYmFzZV9hZGRyOwo+ICt9 Owo+ICsKPiArc3RydWN0IG9tYXAxX3NwaTEwMGtfY3Mgewo+ICsgwqAgwqAgwqAgdm9pZCBfX2lv bWVtIMKgIMKgIMKgIMKgIMKgIMKgKmJhc2U7Cj4gKyDCoCDCoCDCoCBpbnQgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgd29yZF9sZW47Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHdv cmtxdWV1ZV9zdHJ1Y3QgKm9tYXAxX3NwaTEwMGtfd3E7Cj4gKwo+ICsjZGVmaW5lIE1PRF9SRUdf QklUKHZhbCwgbWFzaywgc2V0KSBkbyB7IFwKPiArIMKgIMKgIMKgIGlmIChzZXQpIFwKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHZhbCB8PSBtYXNrOyBcCj4gKyDCoCDCoCDCoCBlbHNlIFwKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHZhbCAmPSB+bWFzazsgXAo+ICt9IHdoaWxlICgwKQo+ICsK PiArc3RhdGljIHZvaWQgc3BpMTAwa19lbmFibGVfY2xvY2soc3RydWN0IHNwaV9tYXN0ZXIgKm1h c3RlcikKPiArewo+ICsgwqAgwqAgwqAgdW5zaWduZWQgaW50IHZhbDsKPiArIMKgIMKgIMKgIHN0 cnVjdCBvbWFwMV9zcGkxMDBrICpzcGkxMDBrID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0 ZXIpOwo+ICsKPiArIMKgIMKgIMKgIC8qIGVuYWJsZSBTUEkgKi8KPiArIMKgIMKgIMKgIHZhbCA9 IG9tYXBfcmVhZHcoc3BpMTAway0+YmFzZV9hZGRyICsgU1BJX1NFVFVQMSk7Cj4gKyDCoCDCoCDC oCB2YWwgfD0gU1BJX1NFVFVQMV9DTE9DS19FTkFCTEU7Cj4gKyDCoCDCoCDCoCBvbWFwX3dyaXRl dyh2YWwsIHNwaTEwMGstPmJhc2VfYWRkciArIFNQSV9TRVRVUDEpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBzcGkxMDBrX2Rpc2FibGVfY2xvY2soc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcikK PiArewo+ICsgwqAgwqAgwqAgdW5zaWduZWQgaW50IHZhbDsKPiArIMKgIMKgIMKgIHN0cnVjdCBv bWFwMV9zcGkxMDBrICpzcGkxMDBrID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwo+ ICsKPiArIMKgIMKgIMKgIC8qIGRpc2FibGUgU1BJICovCj4gKyDCoCDCoCDCoCB2YWwgPSBvbWFw X3JlYWR3KHNwaTEwMGstPmJhc2VfYWRkciArIFNQSV9TRVRVUDEpOwo+ICsgwqAgwqAgwqAgdmFs ICY9IH5TUElfU0VUVVAxX0NMT0NLX0VOQUJMRTsKPiArIMKgIMKgIMKgIG9tYXBfd3JpdGV3KHZh bCwgc3BpMTAway0+YmFzZV9hZGRyICsgU1BJX1NFVFVQMSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHNwaTEwMGtfd3JpdGVfZGF0YShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLCBpbnQgbGVu LCBpbnQgZGF0YSkKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IG9tYXAxX3NwaTEwMGsgKnNwaTEw MGsgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Cj4gKwo+ICsgwqAgwqAgwqAgLyog d3JpdGUgMTYtYml0IHdvcmQgKi8KPiArIMKgIMKgIMKgIHNwaTEwMGtfZW5hYmxlX2Nsb2NrKG1h c3Rlcik7Cj4gKyDCoCDCoCDCoCBvbWFwX3dyaXRldyggZGF0YSAsIHNwaTEwMGstPmJhc2VfYWRk ciArIFNQSV9UWF9NU0IpOwo+ICsKPiArIMKgIMKgIMKgIG9tYXBfd3JpdGV3KFNQSV9DVFJMX1NF TigwKSB8Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfQ1RSTF9XT1JEX1NJWkUo bGVuKSB8Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfQ1RSTF9XUiwKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNwaTEwMGstPmJhc2VfYWRkciArIFNQSV9DVFJMKTsK PiArCj4gKyDCoCDCoCDCoCAvKiBXYWl0IGZvciBiaXQgYWNrIHNlbmQgY2hhbmdlICovCj4gKyDC oCDCoCDCoCB3aGlsZSgob21hcF9yZWFkdyhzcGkxMDBrLT5iYXNlX2FkZHIgKyBTUElfU1RBVFVT KSAmIFNQSV9TVEFUVVNfV0UpICE9IFNQSV9TVEFUVVNfV0UpOwo+ICsgwqAgwqAgwqAgdWRlbGF5 KDEwMDApOwo+ICsKPiArIMKgIMKgIMKgIHNwaTEwMGtfZGlzYWJsZV9jbG9jayhtYXN0ZXIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNwaTEwMGtfcmVhZF9kYXRhKHN0cnVjdCBzcGlfbWFzdGVy ICptYXN0ZXIsIGludCBsZW4pCj4gK3sKPiArIMKgIMKgIMKgIGludCBkYXRhSCxkYXRhTDsKPiAr IMKgIMKgIMKgIHN0cnVjdCBvbWFwMV9zcGkxMDBrICpzcGkxMDBrID0gc3BpX21hc3Rlcl9nZXRf ZGV2ZGF0YShtYXN0ZXIpOwo+ICsKPiArIMKgIMKgIMKgIHNwaTEwMGtfZW5hYmxlX2Nsb2NrKG1h c3Rlcik7Cj4gKyDCoCDCoCDCoCBvbWFwX3dyaXRldyhTUElfQ1RSTF9TRU4oMCkgfAo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX0NUUkxfV09SRF9TSVpFKGxlbikgfAo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgU1BJX0NUUkxfUkQsCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBzcGkxMDBrLT5iYXNlX2FkZHIgKyBTUElfQ1RSTCk7Cj4gKwo+ICsgwqAgwqAg wqAgd2hpbGUoKG9tYXBfcmVhZHcoc3BpMTAway0+YmFzZV9hZGRyICsgU1BJX1NUQVRVUykgJiBT UElfU1RBVFVTX1JEKSAhPSBTUElfU1RBVFVTX1JEKTsKPiArIMKgIMKgIMKgIHVkZWxheSgxMDAw KTsKPiArCj4gKyDCoCDCoCDCoCBkYXRhTCA9IG9tYXBfcmVhZHcoc3BpMTAway0+YmFzZV9hZGRy ICsgU1BJX1JYX0xTQik7Cj4gKyDCoCDCoCDCoCBkYXRhSCA9IG9tYXBfcmVhZHcoc3BpMTAway0+ YmFzZV9hZGRyICsgU1BJX1JYX01TQik7Cj4gKyDCoCDCoCDCoCBzcGkxMDBrX2Rpc2FibGVfY2xv Y2sobWFzdGVyKTsKPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gZGF0YUw7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHNwaTEwMGtfb3BlbihzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyKQo+ICt7Cj4g KyDCoCDCoCDCoCAvKiBnZXQgY29udHJvbCBvZiBTUEkgKi8KPiArIMKgIMKgIMKgIHN0cnVjdCBv bWFwMV9zcGkxMDBrICpzcGkxMDBrID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwo+ ICsKPiArIMKgIMKgIMKgIG9tYXBfd3JpdGV3KFNQSV9TRVRVUDFfSU5UX1JFQURfRU5BQkxFIHwK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFNQSV9TRVRVUDFfSU5UX1dSSVRFX0VOQUJM RSB8Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBTUElfU0VUVVAxX0NMT0NLX0RJVklT T1IoMCksIHNwaTEwMGstPmJhc2VfYWRkciArIFNQSV9TRVRVUDEpOwo+ICsKPiArIMKgIMKgIMKg IC8qIGNvbmZpZ3VyZSBjbG9jayBhbmQgaW50ZXJydXB0cyAqLwo+ICsgwqAgwqAgwqAgb21hcF93 cml0ZXcoU1BJX1NFVFVQMl9BQ1RJVkVfRURHRV9GQUxMSU5HIHwKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIFNQSV9TRVRVUDJfTkVHQVRJVkVfTEVWRUwgfAo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgU1BJX1NFVFVQMl9MRVZFTF9UUklHR0VSLCBzcGkxMDBrLT5iYXNlX2Fk ZHIgKyBTUElfU0VUVVAyKTsKPiArCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNwaTEwMGtfY2xv c2Uoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcikKPiArewo+ICt9CnNldHRpbmcgbWFzdGVyLT5j bGVhbnVwID0gTlVMTCBzaHVkIGRvCgo+ICtzdGF0aWMgdm9pZCBvbWFwMV9zcGkxMDBrX2ZvcmNl X2NzKHN0cnVjdCBvbWFwMV9zcGkxMDBrICpzcGkxMDBrLCBpbnQgZW5hYmxlKQo+ICt7Cj4gKyDC oCDCoCDCoCBpZiAoZW5hYmxlKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgb21hcF93cml0ZXco MHgwNWZjLCBzcGkxMDBrLT5iYXNlX2FkZHIgKyBTUElfQ1RSTCk7Cj4gKyDCoCDCoCDCoCBlbHNl Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvbWFwX3dyaXRldygweDA1ZmQsIHNwaTEwMGstPmJh c2VfYWRkciArIFNQSV9DVFJMKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgb21hcDFfc3BpMTAw a19zZXRfZW5hYmxlKHN0cnVjdCBvbWFwMV9zcGkxMDBrICpzcGkxMDBrLCBpbnQgZW5hYmxlKQo+ ICt7Cj4gK30KaG93IGFib3V0IGRyb3BwaW5nIGl0IGFsdG9nZXRoZXI/Cgo+ICtzdGF0aWMgdW5z aWduZWQKPiArb21hcDFfc3BpMTAwa190eHJ4X3BpbyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBz dHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyKQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgb21hcDFf c3BpMTAwayDCoCDCoCpzcGkxMDBrOwo+ICsgwqAgwqAgwqAgc3RydWN0IG9tYXAxX3NwaTEwMGtf Y3MgKmNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgaW50 IMKgIMKgIMKgIMKgIMKgIMKgY291bnQsIGM7Cj4gKyDCoCDCoCDCoCBpbnQgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgd29yZF9sZW47Cj4gKwo+ICsgwqAgwqAgwqAgc3BpMTAwayA9IHNw aV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwo+ICsgwqAgwqAgwqAgY291bnQgPSB4 ZmVyLT5sZW47Cj4gKyDCoCDCoCDCoCBjID0gY291bnQ7Cj4gKyDCoCDCoCDCoCB3b3JkX2xlbiA9 IGNzLT53b3JkX2xlbjsKPiArCj4gKyDCoCDCoCDCoCAvKiBSWF9PTkxZIG1vZGUgbmVlZHMgZHVt bXkgZGF0YSBpbiBUWCByZWcgKi8KPiArIMKgIMKgIMKgIGlmICh4ZmVyLT50eF9idWYgPT0gTlVM TCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNwaTEwMGtfd3JpdGVfZGF0YShzcGktPm1hc3Rl cix3b3JkX2xlbiwgMCk7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKHdvcmRfbGVuIDw9IDgpIHsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHU4IMKgIMKgIMKgIMKgIMKgIMKgIMKgKnJ4Owo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgY29uc3QgdTggwqAgwqAgwqAgwqAqdHg7Cj4gKwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcnggPSB4ZmVyLT5yeF9idWY7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCB0eCA9IHhmZXItPnR4X2J1ZjsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRvIHsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGMtPTE7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBpZiAoeGZlci0+dHhfYnVmICE9IE5VTEwpCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzcGkxMDBrX3dyaXRlX2RhdGEoc3Bp LT5tYXN0ZXIsd29yZF9sZW4sICp0eCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBpZiAoeGZlci0+cnhfYnVmICE9IE5VTEwpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqcnggPSBzcGkxMDBrX3JlYWRfZGF0YShzcGktPm1hc3Rl cix3b3JkX2xlbik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9IHdoaWxlKGMpOwo+ICsgwqAg wqAgwqAgfSBlbHNlIGlmICh3b3JkX2xlbiA8PSAxNikgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgdTE2IMKgIMKgIMKgIMKgIMKgIMKgICpyeDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNv bnN0IHUxNiDCoCDCoCDCoCAqdHg7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcnggPSB4 ZmVyLT5yeF9idWY7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0eCA9IHhmZXItPnR4X2J1ZjsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRvIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGMtPTI7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAo eGZlci0+dHhfYnVmICE9IE5VTEwpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBzcGkxMDBrX3dyaXRlX2RhdGEoc3BpLT5tYXN0ZXIsd29yZF9sZW4sICp0 eCsrKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh4ZmVyLT5yeF9i dWYgIT0gTlVMTCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgICpyeCsrID0gc3BpMTAwa19yZWFkX2RhdGEoc3BpLT5tYXN0ZXIsd29yZF9sZW4pOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgfSB3aGlsZShjKTsKPiArIMKgIMKgIMKgIH0gZWxzZSBpZiAo d29yZF9sZW4gPD0gMzIpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHUzMiDCoCDCoCDCoCDC oCDCoCDCoCAqcng7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjb25zdCB1MzIgwqAgwqAgwqAg KnR4Owo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJ4ID0geGZlci0+cnhfYnVmOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgdHggPSB4ZmVyLT50eF9idWY7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBkbyB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjLT00Owo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHhmZXItPnR4X2J1ZiAhPSBO VUxMKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3Bp MTAwa193cml0ZV9kYXRhKHNwaS0+bWFzdGVyLHdvcmRfbGVuLCAqdHgpOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHhmZXItPnJ4X2J1ZiAhPSBOVUxMKQo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKnJ4ID0gc3BpMTAwa19y ZWFkX2RhdGEoc3BpLT5tYXN0ZXIsd29yZF9sZW4pOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg fSB3aGlsZShjKTsKPiArIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIHJldHVybiBjb3VudCAtIGM7 Cj4gK30KPiArCj4gKy8qIGNhbGxlZCBvbmx5IHdoZW4gbm8gdHJhbnNmZXIgaXMgYWN0aXZlIHRv IHRoaXMgZGV2aWNlICovCj4gK3N0YXRpYyBpbnQgb21hcDFfc3BpMTAwa19zZXR1cF90cmFuc2Zl cihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3RydWN0 IHNwaV90cmFuc2ZlciAqdCkKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IG9tYXAxX3NwaTEwMGsg KnNwaTEwMGsgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKPiArIMKgIMKg IMKgIHN0cnVjdCBvbWFwMV9zcGkxMDBrX2NzICpjcyA9IHNwaS0+Y29udHJvbGxlcl9zdGF0ZTsK PiArIMKgIMKgIMKgIHU4IHdvcmRfbGVuID0gc3BpLT5iaXRzX3Blcl93b3JkOwo+ICsKPiArIMKg IMKgIMKgIGlmICh0ICE9IE5VTEwgJiYgdC0+Yml0c19wZXJfd29yZCkKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHdvcmRfbGVuID0gdC0+Yml0c19wZXJfd29yZDsKPiArIMKgIMKgIMKgIGlmICgh d29yZF9sZW4pCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3b3JkX2xlbiA9IDg7Cj4gKwo+ICsg wqAgwqAgwqAgaWYgKHNwaS0+Yml0c19wZXJfd29yZCA+IDMyKQo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gKyDCoCDCoCDCoCBjcy0+d29yZF9sZW4gPSB3b3JkX2xl bjsKPiArCj4gKyDCoCDCoCDCoCAvKiBTUEkgaW5pdCBiZWZvcmUgdHJhbnNmZXIgKi8KPiArIMKg IMKgIMKgIG9tYXBfd3JpdGV3KDB4M2UgLCBzcGkxMDBrLT5iYXNlX2FkZHIgKyBTUElfU0VUVVAx KTsKPiArIMKgIMKgIMKgIG9tYXBfd3JpdGV3KDB4MDAgLCBzcGkxMDBrLT5iYXNlX2FkZHIgKyBT UElfU1RBVFVTKTsKPiArIMKgIMKgIMKgIG9tYXBfd3JpdGV3KDB4M2UgLCBzcGkxMDBrLT5iYXNl X2FkZHIgKyBTUElfQ1RSTCk7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4g Ky8qIHRoZSBzcGktPm1vZGUgYml0cyB1bmRlcnN0b29kIGJ5IHRoaXMgZHJpdmVyOiAqLwo+ICsj ZGVmaW5lIE1PREVCSVRTIChTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0NTX0hJR0gpCj4gKwo+ ICtzdGF0aWMgaW50IG9tYXAxX3NwaTEwMGtfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkK PiArewo+ICsgwqAgwqAgwqAgaW50IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldDsK PiArIMKgIMKgIMKgIHN0cnVjdCBvbWFwMV9zcGkxMDBrIMKgIMKgKnNwaTEwMGs7Cj4gKyDCoCDC oCDCoCBzdHJ1Y3Qgb21hcDFfc3BpMTAwa19jcyAqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7 Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8IDQgfHwgc3BpLT5iaXRz X3Blcl93b3JkID4gMzIpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZGV2X2RiZygmc3Bp LT5kZXYsICJzZXR1cDogdW5zdXBwb3J0ZWQgJWQgYml0IHdvcmRzXG4iLAo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3BpLT5iaXRzX3Blcl93b3JkKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgcmV0dXJuIC1FSU5WQUw7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAg wqAgwqAgc3BpMTAwayA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwo+ICsK PiArIMKgIMKgIMKgIGlmICghY3MpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNzID0ga3ph bGxvYyhzaXplb2YgKmNzLCBHRlBfS0VSTkVMKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlm ICghY3MpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVOT01F TTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNzLT5iYXNlID0gc3BpMTAway0+YmFzZSArIHNw aS0+Y2hpcF9zZWxlY3QgKiAweDE0Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3BpLT5jb250 cm9sbGVyX3N0YXRlID0gY3M7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgc3BpMTAw a19vcGVuKHNwaS0+bWFzdGVyKTsKPiArCj4gKyDCoCDCoCDCoCBjbGtfZW5hYmxlKHNwaTEwMGst Pmljayk7Cj4gKyDCoCDCoCDCoCBjbGtfZW5hYmxlKHNwaTEwMGstPmZjayk7Cj4gKwo+ICsgwqAg wqAgwqAgcmV0ID0gb21hcDFfc3BpMTAwa19zZXR1cF90cmFuc2ZlcihzcGksIE5VTEwpOwo+ICsK PiArIMKgIMKgIMKgIGNsa19kaXNhYmxlKHNwaTEwMGstPmljayk7Cj4gKyDCoCDCoCDCoCBjbGtf ZGlzYWJsZShzcGkxMDBrLT5mY2spOwo+ICsKPiArIMKgIMKgIMKgIHJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIG9tYXAxX3NwaTEwMGtfY2xlYW51cChzdHJ1Y3Qgc3BpX2Rldmlj ZSAqc3BpKQo+ICt7Cj4gKyDCoCDCoCDCoCBzcGkxMDBrX2Nsb3NlKHNwaS0+bWFzdGVyKTsKPiAr fQpubyBuZWVkIGZvciBjbGVhbnVwIGNhbGxiYWNrIGlmIHUgaGF2ZSBub3RoaW5nIHRvIGRvIGlu IF9jbG9zZS4KCj4gK3N0YXRpYyB2b2lkIG9tYXAxX3NwaTEwMGtfd29yayhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspCj4gK3sKPiArIMKgIMKgIMKgIHN0cnVjdCBvbWFwMV9zcGkxMDBrIMKgIMKg KnNwaTEwMGs7Cj4gKyDCoCDCoCDCoCBpbnQgc3RhdHVzID0gMDsKPiArCj4gKyDCoCDCoCDCoCBz cGkxMDBrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvbWFwMV9zcGkxMDBrLCB3b3JrKTsK PiArIMKgIMKgIMKgIHNwaW5fbG9ja19pcnEoJnNwaTEwMGstPmxvY2spOwo+ICsKPiArIMKgIMKg IMKgIGNsa19lbmFibGUoc3BpMTAway0+aWNrKTsKPiArIMKgIMKgIMKgIGNsa19lbmFibGUoc3Bp MTAway0+ZmNrKTsKPiArCj4gKyDCoCDCoCDCoCAvKiBXZSBvbmx5IGVuYWJsZSBvbmUgY2hhbm5l bCBhdCBhIHRpbWUgLS0gdGhlIG9uZSB3aG9zZSBtZXNzYWdlIGlzCj4gKyDCoCDCoCDCoCDCoCog YXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIC0tIGFsdGhvdWdoIHRoaXMgY29udHJvbGxlciB3b3Vs ZCBnbGFkbHkKPiArIMKgIMKgIMKgIMKgKiBhcmJpdHJhdGUgYW1vbmcgbXVsdGlwbGUgY2hhbm5l bHMuIMKgVGhpcyBjb3JyZXNwb25kcyB0byAic2luZ2xlCj4gKyDCoCDCoCDCoCDCoCogY2hhbm5l bCIgbWFzdGVyIG1vZGUuIMKgQXMgYSBzaWRlIGVmZmVjdCwgd2UgbmVlZCB0byBtYW5hZ2UgdGhl Cj4gKyDCoCDCoCDCoCDCoCogY2hpcHNlbGVjdCB3aXRoIHRoZSBGT1JDRSBiaXQgLi4uIENTICE9 IGNoYW5uZWwgZW5hYmxlLgo+ICsgwqAgwqAgwqAgwqAqLwo+ICsgwqAgwqAgwqAgwqB3aGlsZSAo IWxpc3RfZW1wdHkoJnNwaTEwMGstPm1zZ19xdWV1ZSkpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHN0cnVjdCBzcGlfbWVzc2FnZSDCoCDCoCDCoCDCoCDCoCDCoCDCoCptOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgc3RydWN0IHNwaV9kZXZpY2UgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKnNw aTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0cnVjdCBzcGlfdHJhbnNmZXIgwqAgwqAgwqAg wqAgwqAgwqAgKnQgPSBOVUxMOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW50IMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNzX2FjdGl2ZSA9IDA7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCBzdHJ1Y3Qgb21hcDFfc3BpMTAwa19jcyDCoCDCoCDCoCDCoCAqY3M7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnQgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcGFyX292ZXJyaWRlID0gMDsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCBtID0gY29udGFpbmVyX29mKHNwaTEwMGstPm1zZ19xdWV1ZS5uZXh0LCBzdHJ1Y3Qgc3Bp X21lc3NhZ2UsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHF1ZXVlKTsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsaXN0X2RlbF9pbml0KCZt LT5xdWV1ZSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzcGluX3VubG9ja19pcnEoJnNwaTEw MGstPmxvY2spOwo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNwaSA9IG0tPnNwaTsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNzID0gc3BpLT5jb250cm9sbGVyX3N0YXRlOwo+ICsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9tYXAxX3NwaTEwMGtfc2V0X2VuYWJsZShzcGkxMDBrLCAx KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxpc3RfZm9yX2VhY2hfZW50cnkodCwgJm0tPnRy YW5zZmVycywgdHJhbnNmZXJfbGlzdCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgaWYgKHQtPnR4X2J1ZiA9PSBOVUxMICYmIHQtPnJ4X2J1ZiA9PSBOVUxMICYmIHQtPmxl bikgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3Rh dHVzID0gLUVJTlZBTDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGJyZWFrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHBhcl9vdmVycmlkZSB8fCB0LT5z cGVlZF9oeiB8fCB0LT5iaXRzX3Blcl93b3JkKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwYXJfb3ZlcnJpZGUgPSAxOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc3RhdHVzID0gb21hcDFfc3BpMTAwa19z ZXR1cF90cmFuc2ZlcihzcGksIHQpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaWYgKHN0YXR1cyA8IDApCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghdC0+c3BlZWRfaHogJiYgIXQt PmJpdHNfcGVyX3dvcmQpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBwYXJfb3ZlcnJpZGUgPSAwOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGlmICghY3NfYWN0aXZlKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBvbWFwMV9zcGkxMDBrX2ZvcmNlX2NzKHNwaTEwMGssIDEpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY3NfYWN0aXZlID0gMTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAodC0+bGVuKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1bnNpZ25lZCBjb3VudDsKPiArCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBSWF9PTkxZIG1vZGUg bmVlZHMgZHVtbXkgZGF0YSBpbiBUWCByZWcgKi8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0LT50eF9idWYgPT0gTlVMTCkKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNwaTEwMGtf d3JpdGVfZGF0YShzcGktPm1hc3RlciwgOCwgMCk7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY291bnQgPSBvbWFwMV9zcGkxMDBrX3R4cnhfcGlv KHNwaSwgdCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBtLT5hY3R1YWxfbGVuZ3RoICs9IGNvdW50Owo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChjb3VudCAhPSB0LT5sZW4pIHsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0YXR1 cyA9IC1FSU87Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiAr Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAodC0+ZGVsYXlfdXNlY3Mp Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1ZGVsYXko dC0+ZGVsYXlfdXNlY3MpOwo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IC8qIGlnbm9yZSB0aGUgImxlYXZlIGl0IG9uIGFmdGVyIGxhc3QgeGZlciIgaGludCAqLwo+ICsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0LT5jc19jaGFuZ2UpIHsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9tYXAxX3Nw aTEwMGtfZm9yY2VfY3Moc3BpMTAwaywgMCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBjc19hY3RpdmUgPSAwOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIC8qIFJlc3RvcmUgZGVmYXVsdHMgaWYgdGhleSB3ZXJlIG92ZXJyaWRl biAqLwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHBhcl9vdmVycmlkZSkgewo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcGFyX292ZXJyaWRlID0gMDsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0YXR1cyA9IG9tYXAxX3NwaTEwMGtfc2V0dXBf dHJhbnNmZXIoc3BpLCBOVUxMKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoY3NfYWN0aXZlKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgb21hcDFfc3BpMTAwa19mb3JjZV9jcyhzcGkxMDBrLCAwKTsKPiArCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvbWFwMV9zcGkxMDBrX3NldF9lbmFibGUoc3BpMTAwaywg MCk7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbS0+c3RhdHVzID0gc3RhdHVzOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgbS0+Y29tcGxldGUobS0+Y29udGV4dCk7Cj4gKwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgc3Bpbl9sb2NrX2lycSgmc3BpMTAway0+bG9jayk7Cj4gKyDCoCDC oCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgY2xrX2Rpc2FibGUoc3BpMTAway0+aWNrKTsKPiArIMKg IMKgIMKgIGNsa19kaXNhYmxlKHNwaTEwMGstPmZjayk7Cj4gKyDCoCDCoCDCoCBzcGluX3VubG9j a19pcnEoJnNwaTEwMGstPmxvY2spOwo+ICsKPiArIMKgIMKgIMKgIGlmIChzdGF0dXMgPCAwKSB7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcmludGsoS0VSTl9XQVJOSU5HICJzcGkgdHJhbnNm ZXIgZmFpbGVkIHdpdGggJWRcbiIsIHN0YXR1cyk7Cj4gKyDCoCDCoCDCoCB9Cm5vIG5lZWQgb2Yg e30KPiArfQo+ICsKPiArc3RhdGljIGludCBvbWFwMV9zcGkxMDBrX3RyYW5zZmVyKHN0cnVjdCBz cGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfbWVzc2FnZSAqbSkKPiArewo+ICsgwqAgwqAgwqAg c3RydWN0IG9tYXAxX3NwaTEwMGsgwqAgwqAqc3BpMTAwazsKPiArIMKgIMKgIMKgIHVuc2lnbmVk IGxvbmcgwqAgwqAgwqAgwqAgwqAgZmxhZ3M7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgc3BpX3RyYW5z ZmVyIMKgIMKgICp0Owo+ICsKPiArIMKgIMKgIMKgIG0tPmFjdHVhbF9sZW5ndGggPSAwOwo+ICsg wqAgwqAgwqAgbS0+c3RhdHVzID0gMDsKIHRoZSBzdGF0dXMgc2h1ZCBkZWZhdWx0IHRvIC1FSU5Q Uk9HUkVTUywgbm90IHN1Y2Nlc3MuCgo+ICsgwqAgwqAgwqAgLyogcmVqZWN0IGludmFsaWQgbWVz c2FnZXMgYW5kIHRyYW5zZmVycyAqLwo+ICsgwqAgwqAgwqAgaWYgKGxpc3RfZW1wdHkoJm0tPnRy YW5zZmVycykgfHwgIW0tPmNvbXBsZXRlKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJu IC1FSU5WQUw7Cj4gKwo+ICsgwqAgwqAgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmbS0+dHJh bnNmZXJzLCB0cmFuc2Zlcl9saXN0KSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjb25zdCB2 b2lkIMKgIMKgIMKgKnR4X2J1ZiA9IHQtPnR4X2J1ZjsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHZvaWQgwqAgwqAgwqAgwqAgwqAgwqAqcnhfYnVmID0gdC0+cnhfYnVmOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgdW5zaWduZWQgwqAgwqAgwqAgwqBsZW4gPSB0LT5sZW47Cj4gKwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgaWYgKHQtPnNwZWVkX2h6ID4gT01BUDFfU1BJMTAwS19NQVhfRlJF UQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfHwgKGxl biAmJiAhKHJ4X2J1ZiB8fCB0eF9idWYpKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgfHwgKHQtPmJpdHNfcGVyX3dvcmQgJiYKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICggwqB0LT5iaXRz X3Blcl93b3JkIDwgNAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgfHwgdC0+Yml0c19wZXJfd29yZCA+IDMyKSkpIHsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRldl9kYmcoJnNwaS0+ZGV2LCAidHJhbnNmZXI6 ICVkIEh6LCAlZCAlcyVzLCAlZCBicHdcbiIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0LT5zcGVlZF9oeiwKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiwKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHR4X2J1ZiA/ICJ0eCIgOiAiIiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJ4X2J1ZiA/ICJyeCIgOiAiIiwKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHQtPmJpdHNf cGVyX3dvcmQpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1F SU5WQUw7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgaWYgKHQtPnNwZWVkX2h6ICYmIHQtPnNwZWVkX2h6IDwgT01BUDFfU1BJMTAwS19NQVhf RlJFUS8oMTw8MTYpKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZXZf ZGJnKCZzcGktPmRldiwgIiVkIEh6IG1heCBleGNlZWRzICVkXG4iLAo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdC0+c3BlZWRfaHos Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBPTUFQMV9TUEkxMDBLX01BWF9GUkVRLygxPDwxNikpOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCB9Cj4gKwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIHNwaTEwMGsgPSBzcGlfbWFz dGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKPiArCj4gKyDCoCDCoCDCoCBzcGluX2xvY2tf aXJxc2F2ZSgmc3BpMTAway0+bG9jaywgZmxhZ3MpOwo+ICsgwqAgwqAgwqAgbGlzdF9hZGRfdGFp bCgmbS0+cXVldWUsICZzcGkxMDBrLT5tc2dfcXVldWUpOwo+ICsgwqAgwqAgwqAgcXVldWVfd29y ayhvbWFwMV9zcGkxMDBrX3dxLCAmc3BpMTAway0+d29yayk7Cj4gKyDCoCDCoCDCoCBzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZzcGkxMDBrLT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsgwqAgwqAgwqAg cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19pbml0IG9tYXAxX3NwaTEwMGtfcmVz ZXQoc3RydWN0IG9tYXAxX3NwaTEwMGsgKnNwaTEwMGspCj4gK3sKPiArIMKgIMKgIMKgIHJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMV9zcGkxMDBrX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArIMKgIMKgIMKgIHN0cnVjdCBz cGlfbWFzdGVyIMKgIMKgIMKgICptYXN0ZXI7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgb21hcDFfc3Bp MTAwayDCoCDCoCpzcGkxMDBrOwo+ICsgwqAgwqAgwqAgc3RydWN0IHJlc291cmNlIMKgIMKgIMKg IMKgICpyOwo+ICsgwqAgwqAgwqAgaW50IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0 YXR1cyA9IDA7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKCAhcGRldi0+aWQpCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyDCoCDCoCDCoCBtYXN0ZXIgPSBzcGlf YWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZiAqc3BpMTAwayk7Cj4gKyDCoCDCoCDCoCBp ZiAobWFzdGVyID09IE5VTEwpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRldl9kYmcoJnBk ZXYtPmRldiwgIm1hc3RlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCByZXR1cm4gLUVOT01FTTsKPiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCBp ZiAocGRldi0+aWQgIT0gLTEpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoG1hc3Rlci0+YnVzX251 bSA9IHBkZXYtPmlkOwo+ICsKPiArIMKgIMKgIMKgIG1hc3Rlci0+c2V0dXAgPSBvbWFwMV9zcGkx MDBrX3NldHVwOwo+ICsgwqAgwqAgwqAgbWFzdGVyLT50cmFuc2ZlciA9IG9tYXAxX3NwaTEwMGtf dHJhbnNmZXI7Cj4gKyDCoCDCoCDCoCBtYXN0ZXItPmNsZWFudXAgPSBvbWFwMV9zcGkxMDBrX2Ns ZWFudXA7Cj4gKyDCoCDCoCDCoCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0yOwo+ICsgwqAgwqAg wqAgbWFzdGVyLT5tb2RlX2JpdHMgPSBNT0RFQklUUzsKPiArCj4gKyDCoCDCoCDCoCBkZXZfc2V0 X2RydmRhdGEoJnBkZXYtPmRldiwgbWFzdGVyKTsKPiArCj4gKyDCoCDCoCDCoCBzcGkxMDBrID0g c3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwo+ICsgwqAgwqAgwqAgc3BpMTAway0+bWFz dGVyID0gbWFzdGVyOwo+ICsKPiArIMKgIMKgIMKgIHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uo cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICsgwqAgwqAgwqAgaWYgKHIgPT0gTlVMTCkgewo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzdGF0dXMgPSAtRU5PREVWOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBnb3RvIGVycjE7Cj4gKyDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCBpZiAo IXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgKHItPmVuZCAtIHItPnN0YXJ0KSArIDEsCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwZGV2LT5uYW1lKSkgewo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqBzdGF0dXMgPSAtRUJVU1k7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oGdvdG8gZXJyMTsKPiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCBzcGkxMDBrLT5iYXNl ID0gKHZvaWQgX19pb21lbSAqKSBPTUFQMl9MM19JT19BRERSRVNTKHItPnN0YXJ0KTsKPiArIMKg IMKgIMKgIHNwaTEwMGstPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKXItPnN0YXJ0Owo+ICsg wqAgwqAgwqAgSU5JVF9XT1JLKCZzcGkxMDBrLT53b3JrLCBvbWFwMV9zcGkxMDBrX3dvcmspOwo+ ICsKPiArIMKgIMKgIMKgIHNwaW5fbG9ja19pbml0KCZzcGkxMDBrLT5sb2NrKTsKPiArIMKgIMKg IMKgIElOSVRfTElTVF9IRUFEKCZzcGkxMDBrLT5tc2dfcXVldWUpOwo+ICsgwqAgwqAgwqAgc3Bp MTAway0+aWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7Cj4gKyDCoCDCoCDCoCBpZiAo SVNfRVJSKHNwaTEwMGstPmljaykpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRldl9kYmco JnBkZXYtPmRldiwgImNhbid0IGdldCBzcGkxMDBrX2lja1xuIik7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBzdGF0dXMgPSBQVFJfRVJSKHNwaTEwMGstPmljayk7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBnb3RvIGVycjFhOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIHNwaTEw MGstPmZjayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOwo+ICsgwqAgwqAgwqAgaWYgKElT X0VSUihzcGkxMDBrLT5mY2spKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZXZfZGJnKCZw ZGV2LT5kZXYsICJjYW4ndCBnZXQgc3BpMTAwa19mY2tcbiIpOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgc3RhdHVzID0gUFRSX0VSUihzcGkxMDBrLT5mY2spOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgZ290byBlcnIyOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIGlmIChvbWFw MV9zcGkxMDBrX3Jlc2V0KHNwaTEwMGspIDwgMCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdv dG8gZXJyMzsKPiArCj4gKyDCoCDCoCDCoCBzdGF0dXMgPSBzcGlfcmVnaXN0ZXJfbWFzdGVyKG1h c3Rlcik7Cj4gKyDCoCDCoCDCoCBpZiAoc3RhdHVzIDwgMCkKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGdvdG8gZXJyMzsKPiArCj4gKyDCoCDCoCDCoCBwcmludGsoS0VSTl9JTkZPICJzcGkgUmVn aXN0ZXJlZFxuIik7Cj4gKyDCoCDCoCDCoCByZXR1cm4gc3RhdHVzOwo+ICsKPiArZXJyMzoKPiAr IMKgIMKgIMKgIGNsa19wdXQoc3BpMTAway0+ZmNrKTsKPiArZXJyMjoKPiArIMKgIMKgIMKgIGNs a19wdXQoc3BpMTAway0+aWNrKTsKPiArZXJyMWE6Cj4gKyDCoCDCoCDCoCByZWxlYXNlX21lbV9y ZWdpb24oci0+c3RhcnQsIChyLT5lbmQgLSByLT5zdGFydCkgKyAxKTsKPiArZXJyMToKPiArIMKg IMKgIMKgIHNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7Cj4gKyDCoCDCoCDCoCBwcmludGsoS0VSTl9J TkZPICJFcnJvcjogc3BpXG4iKTsKPiArIMKgIMKgIMKgIHJldHVybiBzdGF0dXM7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgX19leGl0IG9tYXAxX3NwaTEwMGtfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArIMKgIMKgIMKgIHN0cnVjdCBzcGlfbWFzdGVyIMKgIMKg IMKgICptYXN0ZXI7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgb21hcDFfc3BpMTAwayDCoCDCoCpzcGkx MDBrOwo+ICsgwqAgwqAgwqAgc3RydWN0IHJlc291cmNlIMKgIMKgIMKgIMKgICpyOwo+ICsKPiAr IMKgIMKgIMKgIG1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKPiArIMKgIMKg IMKgIHNwaTEwMGsgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Cj4gKwo+ICsgwqAg wqAgwqAgY2xrX3B1dChzcGkxMDBrLT5mY2spOwo+ICsgwqAgwqAgwqAgY2xrX3B1dChzcGkxMDBr LT5pY2spOwo+ICsKPiArIMKgIMKgIMKgIHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwg SU9SRVNPVVJDRV9NRU0sIDApOwo+ICsgwqAgwqAgwqAgcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0 YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSk7Cj4gKwo+ICsgwqAgwqAgwqAgc3BpX3VucmVn aXN0ZXJfbWFzdGVyKG1hc3Rlcik7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gK30KSW4g cmVtb3ZlIHlvdSBtaWdodCB3YW50IHRvIHdhaXQgZm9yIG1zc2cgcXVldWUgdG8gYmUgZmx1c2hl ZD8KCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXAxX3NwaTEwMGtfZHJpdmVy ID0gewo+ICsgwqAgwqAgwqAgLmRyaXZlciA9IHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC5u YW1lIMKgIMKgIMKgIMKgIMKgID0gIm9tYXAxX3NwaTEwMGsiLAo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgLm93bmVyIMKgIMKgIMKgIMKgIMKgPSBUSElTX01PRFVMRSwKPiArIMKgIMKgIMKgIH0s Cj4gKyDCoCDCoCDCoCAucHJvYmUgwqAgwqAgwqAgwqAgwqA9IG9tYXAxX3NwaTEwMGtfcHJvYmUs Cj4gKyDCoCDCoCDCoCAucmVtb3ZlIMKgIMKgIMKgIMKgID0gX19leGl0X3Aob21hcDFfc3BpMTAw a19yZW1vdmUpLAo+ICt9Owo+ICsKPiArCj4gK3N0YXRpYyBpbnQgX19pbml0IG9tYXAxX3NwaTEw MGtfaW5pdCh2b2lkKQo+ICt7Cj4gKyDCoCDCoCDCoCBpbnQgcmV0Owo+ICsKPiArIMKgIMKgIMKg IHByaW50ayhLRVJOX0lORk8gIkluIHNwaSBpbml0XG4iKTsKPiArIMKgIMKgIMKgIG9tYXAxX3Nw aTEwMGtfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9tYXAxX3NwaTEwMGtfZHJpdmVyLmRyaXZlci5uYW1lKTsK PiArCj4gKyDCoCDCoCDCoCBpZiAob21hcDFfc3BpMTAwa193cSA9PSBOVUxMKSB7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCBwcmludGsoS0VSTl9JTkZPICJFcnJvcjogc3BpIGluaXRcbiIpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC0xOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiAr IMKgIMKgIMKgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcDFfc3BpMTAwa19k cml2ZXIpOwo+ICsgwqAgwqAgwqAgaWYgKHJldCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJl dHVybiByZXQ7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIF9fZXhpdCBvbWFwMV9zcGkxMDBrX2V4aXQodm9pZCkKPiArewo+ICsgwqAgwqAgwqAgcGxh dGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXAxX3NwaTEwMGtfZHJpdmVyKTsKPiArCj4gKyDC oCDCoCDCoCBkZXN0cm95X3dvcmtxdWV1ZShvbWFwMV9zcGkxMDBrX3dxKTsKPiArfQo+ICsKPiAr bW9kdWxlX2luaXQob21hcDFfc3BpMTAwa19pbml0KTsKPiArbW9kdWxlX2V4aXQob21hcDFfc3Bp MTAwa19leGl0KTsKPiArCj4gK01PRFVMRV9ERVNDUklQVElPTigiT01BUDd4eCBTUEkgMTAwayBj b250cm9sbGVyIGRyaXZlciIpOwo+ICtNT0RVTEVfQVVUSE9SKCJGYWJyaWNlIENyb2hhcyA8ZmNy b2hhc0BnbWFpbC5jb20+Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiArCj4gLS0KPiAx LjYuMy4zCj4KPgo+Cj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gSm9pbiB1cyBEZWNlbWJlciA5 LCAyMDA5IGZvciB0aGUgUmVkIEhhdCBWaXJ0dWFsIEV4cGVyaWVuY2UsCj4gYSBmcmVlIGV2ZW50 IGZvY3VzZWQgb24gdmlydHVhbGl6YXRpb24gYW5kIGNsb3VkIGNvbXB1dGluZy4KPiBBdHRlbmQg aW4tZGVwdGggc2Vzc2lvbnMgZnJvbSB5b3VyIGRlc2suIFlvdXIgY291Y2guIEFueXdoZXJlLgo+ IGh0dHA6Ly9wLnNmLm5ldC9zZnUvcmVkaGF0LXNmZGV2MmRldgo+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gc3BpLWRldmVsLWdlbmVyYWwgbWFpbGlu ZyBsaXN0Cj4gc3BpLWRldmVsLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Cj4gaHR0cHM6 Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3BpLWRldmVsLWdlbmVyYWwK Pgo+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpKb2luIHVzIERlY2VtYmVyIDksIDIwMDkgZm9yIHRo ZSBSZWQgSGF0IFZpcnR1YWwgRXhwZXJpZW5jZSwKYSBmcmVlIGV2ZW50IGZvY3VzZWQgb24gdmly dHVhbGl6YXRpb24gYW5kIGNsb3VkIGNvbXB1dGluZy4gCkF0dGVuZCBpbi1kZXB0aCBzZXNzaW9u cyBmcm9tIHlvdXIgZGVzay4gWW91ciBjb3VjaC4gQW55d2hlcmUuCmh0dHA6Ly9wLnNmLm5ldC9z ZnUvcmVkaGF0LXNmZGV2MmRldgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpzcGktZGV2ZWwtZ2VuZXJhbCBtYWlsaW5nIGxpc3QKc3BpLWRldmVsLWdlbmVy YWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xp c3RzL2xpc3RpbmZvL3NwaS1kZXZlbC1nZW5lcmFsCg==