ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4gYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCmluZGV4IGJlOWYyMWIuLjA0MGEyYzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgpAQCAtMzMsNiArMzMsMjEgQEAKIE5vcm1zOiBQQUwsIFNFQ0FNICg3MjB4NTc2IEAgMjUgZnBzKSwgTlRTQyAoNzIweDQ4MCBAIDI5Ljk3IGZwcykKIENhcmQgbnVtYmVyOiA3CiAKK0F2ZXJNZWRpYSA2IEV5ZXMgQVZTNkVZRVM6CisqIFpvcmFuIHpyMzYwNjcgUENJIGNvbnRyb2xsZXIKKyogWm9yYW4genIzNjA2MCBNSlBFRyBjb2RlYworKiBTYW1zdW5nIGtzMDEyNyBUViBkZWNvZGVyCisqIENvbmV4YW50IGJ0ODY2ICBUViBlbmNvZGVyCitEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCisJCXZpZGVvY29kZWMsIGtzMDEyNywgYnQ4NjYsIHpyMzYwNjAsIHpyMzYwNjcKK0lucHV0cy9vdXRwdXRzOiBTaXggcGh5c2ljYWwgaW5wdXRzLiAxLTYgYXJlIGNvbXBvc2l0ZSwKKwkJMS0yLCAzLTQsIDUtNiBkb3VibGVzIGFzIFMtdmlkZW8sCisJCTEtMyB0cmlwbGVzIGFzIGNvbXBvbmVudC4KKwkJT25lIGNvbXBvc2l0ZSBvdXRwdXQuCitOb3JtczogUEFMLCBTRUNBTSAoNzIweDU3NiBAIDI1IGZwcyksIE5UU0MgKDcyMHg0ODAgQCAyOS45NyBmcHMpCitDYXJkIG51bWJlcjogOAorTm90IGF1dG9kZXRlY3RlZCwgY2FyZD04IGlzIG5lY2Vzc2FyeS4KKwogTGludXggTWVkaWEgTGFicyBMTUwzMzoKICogWm9yYW4genIzNjA2NyBQQ0kgY29udHJvbGxlcgogKiBab3JhbiB6cjM2MDYwIE1KUEVHIGNvZGVjCkBAIC0xOTIsNiArMjA3LDEwIEBACiB3YXMgaW50cm9kdWNlZCBpbiAxOTk2LCBpcyB1c2VkIGluIHRoZSBEQzMwIGFuZCBEQzMwKyBhbmQKIGNhbiBoYW5kbGU6IFBBTCBCL0cvSC9JLCBQQUwgTiwgUEFMIE0sIE5UU0MgTSwgTlRTQyA0NCwgUEFMIDYwLCBTRUNBTSxOVFNDIENvbWIKIAorU2Ftc3VuZyBrczAxMjcgVFYgZGVjb2RlcgoraXMgdXNlZCBpbiB0aGUgQVZTNkVZRVMgY2FyZCBhbmQKK2NhbiBoYW5kbGU6IE5UU0MtTS9OLzQ0LCBQQUwtTS9OL0IvRy9IL0kvRC9LL0wgYW5kIFNFQ0FNCisKID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAxLjIgV2hhdCB0aGUgVFYgZW5jb2RlciBjYW4gZG8gYW4gd2hhdCBub3QKQEAgLTIyMSw2ICsyNDAsMTAgQEAKIHdhcyBpbnRyb2R1Y2VkIGluIDE5OTEsIGlzIHVzZWQgaW4gdGhlIERDMTAgb2xkCiBjYW4gZ2VuZXJhdGU6IFBBTCAsIE5UU0MgLCBTRUNBTQogCitDb25leGFudCBidDg2NiBUViBlbmNvZGVyCitpcyB1c2VkIGluIEFWUzZFWUVTLCBhbmQKK2NhbiBnZW5lcmF0ZTogTlRTQy9QQUwsIFBBTK1NLCBQQUytTgorCiBUaGUgYWR2NzE3eCwgc2hvdWxkIGJlIGFibGUgdG8gcHJvZHVjZSBQQUwgTi4gQnV0IHlvdSBmaW5kIG5vdGhpbmcgUEFMIE4KIHNwZWNpZmljIGluIHRoZSByZWdpc3RlcnMuIFNlZW0gdGhhdCB5b3UgaGF2ZSB0byByZXVzZSBhIG90aGVyIHN0YW5kYXJkCiB0byBnZW5lcmF0ZSBQQUwgTiwgbWF5YmUgaXQgd291bGQgd29yayBpZiB5b3UgdXNlIHRoZSBQQUwgTSBzZXR0aW5ncy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCA2YjQxOTcwLi41MTVlMTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0yMjQsNiArMjI0LDEyIEBACiAJICBzdXBwb3J0IGZvciB0aGUgTGludXggTWVkaWEgTGFicyBMTUwzM1IxMCBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCiAJICBjYXJkLgogCitjb25maWcgVklERU9fWk9SQU5fQVZTNkVZRVMKKwl0cmlzdGF0ZSAiQXZlck1lZGlhIDYgRXllcyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVklERU9fWk9SQU4gJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDEKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgQXZlck1lZGlhIDYgRXllcyB2aWRlbyBzdXJ2ZWlsbGFuY2UgY2FyZC4KKwogY29uZmlnIFZJREVPX1pSMzYxMjAKIAl0cmlzdGF0ZSAiWm9yYW4gWlIzNjEyMC8zNjEyNSBWaWRlbyBGb3IgTGludXgiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDEgJiYgQlJPS0VOCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCBlNWJmMjY4Li45N2U4OTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTMzLDYgKzMzLDcgQEAKIAl6cjM2MDE2Lm8KIG9iai0kKENPTkZJR19WSURFT19aT1JBTl9MTUwzMykgKz0gYnQ4MTkubyBidDg1Ni5vIHpyMzYwNjAubwogb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOX0xNTDMzUjEwKSArPSBzYWE3MTE0Lm8gYWR2NzE3MC5vIHpyMzYwNjAubworb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOX0FWUzZFWUVTKSArPSBidDg2Ni5vIGtzMDEyNy5vIHpyMzYwNjAubwogb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOKSArPSB6cjM2MDY3Lm8gdmlkZW9jb2RlYy5vCiBvYmotJChDT05GSUdfVklERU9fUE1TKSArPSBwbXMubwogb2JqLSQoQ09ORklHX1ZJREVPX1BMQU5CKSArPSBwbGFuYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlNDJiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAgICBidDg2NiAtIEJUODY2IERpZ2l0YWwgVmlkZW8gRW5jb2RlciAoUm9ja3dlbGwgUGFydCkKKworICAgIENvcHlyaWdodCAoQykgMTk5OSBNaWtlIEJlcm5zb24gPG1pa2VAbWxiLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggRGF2ZSBQZXJrcyA8ZHBlcmtzQGlibS5uZXQ+CisKKyAgICBNb2RpZmljYXRpb25zIGZvciBMTUwzMy9EQzEwcGx1cyB1bmlmaWVkIGRyaXZlcgorICAgIENvcHlyaWdodCAoQykgMjAwMCBTZXJndWVpIE1pcmlkb25vdiA8bWlyc2V2QGNpY2VzZS5teD4KKworICAgIFRoaXMgY29kZSB3YXMgbW9kaWZ5L3BvcnRlZCBmcm9tIHRoZSBzYWE3MTExIGRyaXZlciB3cml0dGVuCisgICAgYnkgRGF2ZSBQZXJrcy4KKworICAgIFRoaXMgY29kZSB3YXMgYWRhcHRlZCBmb3IgdGhlIGJ0ODY2IGJ5IENocmlzdGVyIFdlaW5pZ2VsIGFuZCBwb3J0ZWQKKyAgICB0byAyLjYgYnkgTWFydGluIFNhbXVlbHNzb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUJQlQ4NjZfREVWTkFNRQkiYnQ4NjYiCisjZGVmaW5lIEkyQ19CVDg2NgkweDg4CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBERUJVRyh4KQkJLyogRGVidWcgZHJpdmVyICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCBidDg2NiB7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKwlpbnQgYWRkcjsKKwl1bnNpZ25lZCBjaGFyIHJlZ1sxMjhdOworCisJaW50IG5vcm07CisJaW50IGVuYWJsZTsKKwlpbnQgYnJpZ2h0OworCWludCBjb250cmFzdDsKKwlpbnQgaHVlOworCWludCBzYXQ7Cit9OworCitzdGF0aWMgaW50IGJ0ODY2X3dyaXRlKHN0cnVjdCBidDg2NiAqZGV2LAorCQkJdW5zaWduZWQgY2hhciBzdWJhZGRyLCB1bnNpZ25lZCBjaGFyIGRhdGEpOworCitzdGF0aWMgaW50IGJ0ODY2X2RvX2NvbW1hbmQoc3RydWN0IGJ0ODY2ICplbmNvZGVyLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6CisJeworCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CisKKwkJREVCVUcocHJpbnRrCisJCSAgICAgIChLRVJOX0lORk8gIiVzOiBnZXQgY2FwYWJpbGl0aWVzXG4iLAorCQkgICAgICAgZW5jb2Rlci0+aTJjLT5uYW1lKSk7CisKKwkJY2FwLT5mbGFncworCQkJPSBWSURFT19FTkNPREVSX1BBTAorCQkJfCBWSURFT19FTkNPREVSX05UU0MKKwkJCXwgVklERU9fRU5DT0RFUl9DQ0lSOworCQljYXAtPmlucHV0cyA9IDI7CisJCWNhcC0+b3V0cHV0cyA9IDE7CisJfQorCWJyZWFrOworCisJY2FzZSBFTkNPREVSX1NFVF9OT1JNOgorCXsKKwkJaW50ICppYXJnID0gYXJnOworCisJCURFQlVHKHByaW50ayhLRVJOX0lORk8gIiVzOiBzZXQgbm9ybSAlZFxuIiwKKwkJCSAgICAgZW5jb2Rlci0+aTJjLT5uYW1lLCAqaWFyZykpOworCisJCXN3aXRjaCAoKmlhcmcpIHsKKworCQljYXNlIFZJREVPX01PREVfTlRTQzoKKwkJCWJyZWFrOworCisJCWNhc2UgVklERU9fTU9ERV9QQUw6CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJfQorCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7CisJfQorCWJyZWFrOworCisJY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKKwl7CisJCWludCAqaWFyZyA9IGFyZzsKKwkJc3RhdGljIGNvbnN0IF9fdTggaW5pdFtdID0geworCQkJMHhjOCwgMHhjYywgLyogQ1JTQ0FMRSAqLworCQkJMHhjYSwgMHg5MSwgLyogQ0JTQ0FMRSAqLworCQkJMHhjYywgMHgyNCwgLyogWUMxNiB8IE9TRE5VTSAqLworCQkJMHhkYSwgMHgwMCwgLyogICovCisJCQkweGRjLCAweDI0LCAvKiBTRVRNT0RFIHwgUEFMICovCisJCQkweGRlLCAweDAyLCAvKiBFQUNUSVZFICovCisKKwkJCS8qIG92ZXJsYXkgY29sb3JzICovCisJCQkweDcwLCAweEVCLCAweDkwLCAweDgwLCAweEIwLCAweDgwLCAvKiB3aGl0ZSAqLworCQkJMHg3MiwgMHhBMiwgMHg5MiwgMHg4RSwgMHhCMiwgMHgyQywgLyogeWVsbG93ICovCisJCQkweDc0LCAweDgzLCAweDk0LCAweDJDLCAweEI0LCAweDlDLCAvKiBjeWFuICovCisJCQkweDc2LCAweDcwLCAweDk2LCAweDNBLCAweEI2LCAweDQ4LCAvKiBncmVlbiAqLworCQkJMHg3OCwgMHg1NCwgMHg5OCwgMHhDNiwgMHhCOCwgMHhCOCwgLyogbWFnZW50YSAqLworCQkJMHg3QSwgMHg0MSwgMHg5QSwgMHhENCwgMHhCQSwgMHg2NCwgLyogcmVkICovCisJCQkweDdDLCAweDIzLCAweDlDLCAweDcyLCAweEJDLCAweEQ0LCAvKiBibHVlICovCisJCQkweDdFLCAweDEwLCAweDlFLCAweDgwLCAweEJFLCAweDgwLCAvKiBibGFjayAqLworCisJCQkweDYwLCAweEVCLCAweDgwLCAweDgwLCAweGMwLCAweDgwLCAvKiB3aGl0ZSAqLworCQkJMHg2MiwgMHhBMiwgMHg4MiwgMHg4RSwgMHhjMiwgMHgyQywgLyogeWVsbG93ICovCisJCQkweDY0LCAweDgzLCAweDg0LCAweDJDLCAweGM0LCAweDlDLCAvKiBjeWFuICovCisJCQkweDY2LCAweDcwLCAweDg2LCAweDNBLCAweGM2LCAweDQ4LCAvKiBncmVlbiAqLworCQkJMHg2OCwgMHg1NCwgMHg4OCwgMHhDNiwgMHhjOCwgMHhCOCwgLyogbWFnZW50YSAqLworCQkJMHg2QSwgMHg0MSwgMHg4QSwgMHhENCwgMHhjQSwgMHg2NCwgLyogcmVkICovCisJCQkweDZDLCAweDIzLCAweDhDLCAweDcyLCAweGNDLCAweEQ0LCAvKiBibHVlICovCisJCQkweDZFLCAweDEwLCAweDhFLCAweDgwLCAweGNFLCAweDgwLCAvKiBibGFjayAqLworCQl9OworCQlpbnQgaTsKKwkJdTggdmFsOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXQpIC8gMjsgaSArPSAyKQorCQkJYnQ4NjZfd3JpdGUoZW5jb2RlciwgaW5pdFtpXSwgaW5pdFtpKzFdKTsKKworCQl2YWwgPSBlbmNvZGVyLT5yZWdbMHhkY107CisKKwkJaWYgKCppYXJnID09IDApCisJCQl2YWwgfD0gMHg0MDsgLyogQ0JTV0FQICovCisJCWVsc2UKKwkJCXZhbCAmPSB+MHg0MDsgLyogIUNCU1dBUCAqLworCisJCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4ZGMsIHZhbCk7CisKKwkJdmFsID0gZW5jb2Rlci0+cmVnWzB4Y2NdOworCQlpZiAoKmlhcmcgPT0gMikKKwkJCXZhbCB8PSAweDAxOyAvKiBPU0RCQVIgKi8KKwkJZWxzZQorCQkJdmFsICY9IH4weDAxOyAvKiAhT1NEQkFSICovCisJCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4Y2MsIHZhbCk7CisKKwkJREVCVUcocHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNldCBpbnB1dCAlZFxuIiwKKwkJCSAgICAgZW5jb2Rlci0+aTJjLT5uYW1lLCAqaWFyZykpOworCisJCXN3aXRjaCAoKmlhcmcpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJfQorCX0KKwlicmVhazsKKworCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgorCXsKKwkJaW50ICppYXJnID0gYXJnOworCisJCURFQlVHKHByaW50ayhLRVJOX0lORk8gIiVzOiBzZXQgb3V0cHV0ICVkXG4iLAorCQkJICAgICBlbmNvZGVyLT5pMmMtPm5hbWUsICppYXJnKSk7CisKKwkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KKwkJaWYgKCppYXJnICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJYnJlYWs7CisKKwljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKKwl7CisJCWludCAqaWFyZyA9IGFyZzsKKwkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKKworCQlERUJVRyhwcmludGsKKwkJICAgICAgKEtFUk5fSU5GTyAiJXM6IGVuYWJsZSBvdXRwdXQgJWRcbiIsCisJCSAgICAgICBlbmNvZGVyLT5pMmMtPm5hbWUsIGVuY29kZXItPmVuYWJsZSkpOworCX0KKwlicmVhazsKKworCWNhc2UgNDcxMToKKwl7CisJCWludCAqaWFyZyA9IGFyZzsKKwkJX191OCB2YWw7CisKKwkJcHJpbnRrKCJidDg2Njogc3F1YXJlID0gJWRcbiIsICppYXJnKTsKKworCQl2YWwgPSBlbmNvZGVyLT5yZWdbMHhkY107CisJCWlmICgqaWFyZykKKwkJCXZhbCB8PSAxOyAvKiBTUVVBUkUgKi8KKwkJZWxzZQorCQkJdmFsICY9IH4xOyAvKiAhU1FVQVJFICovCisJCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4ZGMsIHZhbCk7CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0ODY2X3dyaXRlKHN0cnVjdCBidDg2NiAqZW5jb2RlciwKKwkJCXVuc2lnbmVkIGNoYXIgc3ViYWRkciwgdW5zaWduZWQgY2hhciBkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzJdOworCWludCBlcnI7CisKKwlidWZmZXJbMF0gPSBzdWJhZGRyOworCWJ1ZmZlclsxXSA9IGRhdGE7CisKKwllbmNvZGVyLT5yZWdbc3ViYWRkcl0gPSBkYXRhOworCisJREVCVUcocHJpbnRrCisJICAgICAgKCIlczogd3JpdGUgMHglMDJYID0gMHglMDJYXG4iLAorCSAgICAgICBlbmNvZGVyLT5pMmMtPm5hbWUsIHN1YmFkZHIsIGRhdGEpKTsKKworCWZvciAoZXJyID0gMDsgZXJyIDwgMzspIHsKKwkJaWYgKGkyY19tYXN0ZXJfc2VuZChlbmNvZGVyLT5pMmMsIGJ1ZmZlciwgMikgPT0gMikKKwkJCWJyZWFrOworCQllcnIrKzsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEkvTyBlcnJvciAjJWQgIgorCQkgICAgICAgIih3cml0ZSAweCUwMngvMHglMDJ4KVxuIiwKKwkJICAgICAgIGVuY29kZXItPmkyYy0+bmFtZSwgZXJyLCBlbmNvZGVyLT5hZGRyLCBzdWJhZGRyKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaLzEwKTsKKwl9CisJaWYgKGVyciA9PSAzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBnaXZpbmcgdXBcbiIsCisJCSAgICAgICBlbmNvZGVyLT5pMmMtPm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4NjZfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IGJ0ODY2X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgYnQ4NjZfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKKworLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10JPSB7STJDX0JUODY2Pj4xLCBJMkNfQ0xJRU5UX0VORH07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgcHJvYmVbMl0JCT0ge0kyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORH07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlWzJdCQk9IHtJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9OworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKKwlub3JtYWxfaTJjLAorCXByb2JlLAorCWlnbm9yZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2J0ODY2ID0geworCS5kcml2ZXIubmFtZSA9IEJUODY2X0RFVk5BTUUsCisJLmlkID0gSTJDX0RSSVZFUklEX0JUODY2LAorCS5hdHRhY2hfYWRhcHRlciA9IGJ0ODY2X2F0dGFjaCwKKwkuZGV0YWNoX2NsaWVudCA9IGJ0ODY2X2RldGFjaCwKKwkuY29tbWFuZCA9IGJ0ODY2X2NvbW1hbmQKK307CisKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGJ0ODY2X2NsaWVudF90bXBsID0KK3sKKwkubmFtZSA9ICIobmlsKSIsCisJLmFkZHIgPSAwLAorCS5hZGFwdGVyID0gTlVMTCwKKwkuZHJpdmVyID0gJmkyY19kcml2ZXJfYnQ4NjYsCisJLnVzYWdlX2NvdW50ID0gMAorfTsKKworc3RhdGljIGludCBidDg2Nl9mb3VuZF9wcm9jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICBpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0IGJ0ODY2ICplbmNvZGVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmYnQ4NjZfY2xpZW50X3RtcGwsIHNpemVvZigqY2xpZW50KSk7CisKKwllbmNvZGVyID0ga3phbGxvYyhzaXplb2YoKmVuY29kZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZW5jb2RlciA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKwlzcHJpbnRmKGNsaWVudC0+bmFtZSwgIiVzLSUwMngiLCBCVDg2Nl9ERVZOQU1FLCBhZGFwdGVyLT5pZCk7CisKKwllbmNvZGVyLT5pMmMgPSBjbGllbnQ7CisJZW5jb2Rlci0+YWRkciA9IGFkZHI7CisJLy9lbmNvZGVyLT5lbmNvZGVyX3R5cGUgPSBFTkNPREVSX1RZUEVfVU5LTk9XTjsKKworCS8qIGluaXRpYWxpemUgKi8KKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidDg2Nl9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3KQorCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGJ0ODY2X2ZvdW5kX3Byb2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0ODY2X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlrZnJlZShlbmNvZGVyKTsKKwlrZnJlZShjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4NjZfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlyZXR1cm4gYnQ4NjZfZG9fY29tbWFuZChlbmNvZGVyLCBjbWQsIGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJ0ODY2X2luaXQodm9pZCkKK3sKKwlpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9idDg2Nik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBidDg2Nl9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4NjYpOworfQorCittb2R1bGVfaW5pdChidDg2Nl9pbml0KTsKK21vZHVsZV9leGl0KGJ0ODY2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmN2FjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKQEAgLTAsMCArMSw4NDYgQEAKKy8qCisgKiBWaWRlbyBDYXB0dXJlIERyaXZlciAoVmlkZW8gZm9yIExpbnV4IDEvMikKKyAqIGZvciB0aGUgTWF0cm94IE1hcnZlbCBHMjAwLEc0MDAgYW5kIFJhaW5ib3cgUnVubmVyLUcgc2VyaWVzCisgKgorICogVGhpcyBtb2R1bGUgaXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBLUzAxMjcgdmlkZW8gZGVjb2RlciBjaGlwLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSAgUnlhbiBEcmFrZSA8c3RpbGV0dG9AbWVkaWFvbmUubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vZGlmaWVkIGFuZCBleHRlbmRlZCBieQorICoJTWlrZSBCZXJuc29uIDxtaWtlQG1sYi5vcmc+CisgKglHZXJhcmQgdi5kLiBIb3JzdAorICoJTGVvbiB2YW4gU3R1aXZlbmJlcmcgPGwudmFuc3R1aXZlbmJlcmdAY2hlbGxvLm5sPgorICoJR2Vybm90IFppZWdsZXIgPGd6QGx5c2F0b3IubGl1LnNlPgorICoKKyAqIFZlcnNpb24gSGlzdG9yeToKKyAqIFYxLjAgUnlhbiBEcmFrZQkgICBJbml0aWFsIHZlcnNpb24gYnkgUnlhbiBEcmFrZQorICogVjEuMSBHZXJhcmQgdi5kLiBIb3JzdCAgQWRkZWQgc29tZSBkZWJ1Z291dHB1dCwgcmVzZXQgdGhlIHZpZGVvLXN0YW5kYXJkCisgKi8KKworI2lmbmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIF9fS0VSTkVMX18KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgImtzMDEyNy5oIgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorCisjZGVmaW5lIGRwcmludGsgICAgIGlmIChkZWJ1ZykgcHJpbnRrCisKKy8qIGkyYyBpZGVudGlmaWNhdGlvbiAqLworI2RlZmluZSBJMkNfS1MwMTI3X0FERE9OICAgMHhEOAorI2RlZmluZSBJMkNfS1MwMTI3X09OQk9BUkQgMHhEQQorCisjZGVmaW5lIEtTX1RZUEVfVU5LTk9XTgkwCisjZGVmaW5lIEtTX1RZUEVfMDEyMlMJMQorI2RlZmluZSBLU19UWVBFXzAxMjcJMgorI2RlZmluZSBLU19UWVBFXzAxMjdCCTMKKworLyoga3MwMTI3IGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIEtTX1NUQVQgICAgIDB4MDAKKyNkZWZpbmUgS1NfQ01EQSAgICAgMHgwMQorI2RlZmluZSBLU19DTURCICAgICAweDAyCisjZGVmaW5lIEtTX0NNREMgICAgIDB4MDMKKyNkZWZpbmUgS1NfQ01ERCAgICAgMHgwNAorI2RlZmluZSBLU19IQVZCICAgICAweDA1CisjZGVmaW5lIEtTX0hBVkUgICAgIDB4MDYKKyNkZWZpbmUgS1NfSFMxQiAgICAgMHgwNworI2RlZmluZSBLU19IUzFFICAgICAweDA4CisjZGVmaW5lIEtTX0hTMkIgICAgIDB4MDkKKyNkZWZpbmUgS1NfSFMyRSAgICAgMHgwYQorI2RlZmluZSBLU19BR0MgICAgICAweDBiCisjZGVmaW5lIEtTX0hYVFJBICAgIDB4MGMKKyNkZWZpbmUgS1NfQ0RFTSAgICAgMHgwZAorI2RlZmluZSBLU19QT1JUQUIgICAweDBlCisjZGVmaW5lIEtTX0xVTUEgICAgIDB4MGYKKyNkZWZpbmUgS1NfQ09OICAgICAgMHgxMAorI2RlZmluZSBLU19CUlQgICAgICAweDExCisjZGVmaW5lIEtTX0NIUk9NQSAgIDB4MTIKKyNkZWZpbmUgS1NfQ0hST01CICAgMHgxMworI2RlZmluZSBLU19ERU1PRCAgICAweDE0CisjZGVmaW5lIEtTX1NBVCAgICAgIDB4MTUKKyNkZWZpbmUgS1NfSFVFICAgICAgMHgxNgorI2RlZmluZSBLU19WRVJUSUEgICAweDE3CisjZGVmaW5lIEtTX1ZFUlRJQiAgIDB4MTgKKyNkZWZpbmUgS1NfVkVSVElDICAgMHgxOQorI2RlZmluZSBLU19IU0NMTCAgICAweDFhCisjZGVmaW5lIEtTX0hTQ0xIICAgIDB4MWIKKyNkZWZpbmUgS1NfVlNDTEwgICAgMHgxYworI2RlZmluZSBLU19WU0NMSCAgICAweDFkCisjZGVmaW5lIEtTX09GTVRBICAgIDB4MWUKKyNkZWZpbmUgS1NfT0ZNVEIgICAgMHgxZgorI2RlZmluZSBLU19WQklDVEwgICAweDIwCisjZGVmaW5lIEtTX0NDREFUMiAgIDB4MjEKKyNkZWZpbmUgS1NfQ0NEQVQxICAgMHgyMgorI2RlZmluZSBLU19WQklMMzAgICAweDIzCisjZGVmaW5lIEtTX1ZCSUw3NCAgIDB4MjQKKyNkZWZpbmUgS1NfVkJJTDExOCAgMHgyNQorI2RlZmluZSBLU19WQklMMTUxMiAweDI2CisjZGVmaW5lIEtTX1RURlJBTSAgIDB4MjcKKyNkZWZpbmUgS1NfVEVTVEEgICAgMHgyOAorI2RlZmluZSBLU19VVk9GRkggICAweDI5CisjZGVmaW5lIEtTX1VWT0ZGTCAgIDB4MmEKKyNkZWZpbmUgS1NfVUdBSU4gICAgMHgyYgorI2RlZmluZSBLU19WR0FJTiAgICAweDJjCisjZGVmaW5lIEtTX1ZBVkIgICAgIDB4MmQKKyNkZWZpbmUgS1NfVkFWRSAgICAgMHgyZQorI2RlZmluZSBLU19DVFJBQ0sgICAweDJmCisjZGVmaW5lIEtTX1BPTENUTCAgIDB4MzAKKyNkZWZpbmUgS1NfUkVGQ09EICAgMHgzMQorI2RlZmluZSBLU19JTlZBTFkgICAweDMyCisjZGVmaW5lIEtTX0lOVkFMVSAgIDB4MzMKKyNkZWZpbmUgS1NfSU5WQUxWICAgMHgzNAorI2RlZmluZSBLU19VTlVTRVkgICAweDM1CisjZGVmaW5lIEtTX1VOVVNFVSAgIDB4MzYKKyNkZWZpbmUgS1NfVU5VU0VWICAgMHgzNworI2RlZmluZSBLU19VU1JTQVYgICAweDM4CisjZGVmaW5lIEtTX1VTUkVBViAgIDB4MzkKKyNkZWZpbmUgS1NfU0hTMUEgICAgMHgzYQorI2RlZmluZSBLU19TSFMxQiAgICAweDNiCisjZGVmaW5lIEtTX1NIUzFDICAgIDB4M2MKKyNkZWZpbmUgS1NfQ01ERSAgICAgMHgzZAorI2RlZmluZSBLU19WU0RFTCAgICAweDNlCisjZGVmaW5lIEtTX0NNREYgICAgIDB4M2YKKyNkZWZpbmUgS1NfR0FNTUEwICAgMHg0MAorI2RlZmluZSBLU19HQU1NQTEgICAweDQxCisjZGVmaW5lIEtTX0dBTU1BMiAgIDB4NDIKKyNkZWZpbmUgS1NfR0FNTUEzICAgMHg0MworI2RlZmluZSBLU19HQU1NQTQgICAweDQ0CisjZGVmaW5lIEtTX0dBTU1BNSAgIDB4NDUKKyNkZWZpbmUgS1NfR0FNTUE2ICAgMHg0NgorI2RlZmluZSBLU19HQU1NQTcgICAweDQ3CisjZGVmaW5lIEtTX0dBTU1BOCAgIDB4NDgKKyNkZWZpbmUgS1NfR0FNTUE5ICAgMHg0OQorI2RlZmluZSBLU19HQU1NQTEwICAweDRhCisjZGVmaW5lIEtTX0dBTU1BMTEgIDB4NGIKKyNkZWZpbmUgS1NfR0FNTUExMiAgMHg0YworI2RlZmluZSBLU19HQU1NQTEzICAweDRkCisjZGVmaW5lIEtTX0dBTU1BMTQgIDB4NGUKKyNkZWZpbmUgS1NfR0FNTUExNSAgMHg0ZgorI2RlZmluZSBLU19HQU1NQTE2ICAweDUwCisjZGVmaW5lIEtTX0dBTU1BMTcgIDB4NTEKKyNkZWZpbmUgS1NfR0FNTUExOCAgMHg1MgorI2RlZmluZSBLU19HQU1NQTE5ICAweDUzCisjZGVmaW5lIEtTX0dBTU1BMjAgIDB4NTQKKyNkZWZpbmUgS1NfR0FNTUEyMSAgMHg1NQorI2RlZmluZSBLU19HQU1NQTIyICAweDU2CisjZGVmaW5lIEtTX0dBTU1BMjMgIDB4NTcKKyNkZWZpbmUgS1NfR0FNTUEyNCAgMHg1OAorI2RlZmluZSBLU19HQU1NQTI1ICAweDU5CisjZGVmaW5lIEtTX0dBTU1BMjYgIDB4NWEKKyNkZWZpbmUgS1NfR0FNTUEyNyAgMHg1YgorI2RlZmluZSBLU19HQU1NQTI4ICAweDVjCisjZGVmaW5lIEtTX0dBTU1BMjkgIDB4NWQKKyNkZWZpbmUgS1NfR0FNTUEzMCAgMHg1ZQorI2RlZmluZSBLU19HQU1NQTMxICAweDVmCisjZGVmaW5lIEtTX0dBTU1BRDAgIDB4NjAKKyNkZWZpbmUgS1NfR0FNTUFEMSAgMHg2MQorI2RlZmluZSBLU19HQU1NQUQyICAweDYyCisjZGVmaW5lIEtTX0dBTU1BRDMgIDB4NjMKKyNkZWZpbmUgS1NfR0FNTUFENCAgMHg2NAorI2RlZmluZSBLU19HQU1NQUQ1ICAweDY1CisjZGVmaW5lIEtTX0dBTU1BRDYgIDB4NjYKKyNkZWZpbmUgS1NfR0FNTUFENyAgMHg2NworI2RlZmluZSBLU19HQU1NQUQ4ICAweDY4CisjZGVmaW5lIEtTX0dBTU1BRDkgIDB4NjkKKyNkZWZpbmUgS1NfR0FNTUFEMTAgMHg2YQorI2RlZmluZSBLU19HQU1NQUQxMSAweDZiCisjZGVmaW5lIEtTX0dBTU1BRDEyIDB4NmMKKyNkZWZpbmUgS1NfR0FNTUFEMTMgMHg2ZAorI2RlZmluZSBLU19HQU1NQUQxNCAweDZlCisjZGVmaW5lIEtTX0dBTU1BRDE1IDB4NmYKKyNkZWZpbmUgS1NfR0FNTUFEMTYgMHg3MAorI2RlZmluZSBLU19HQU1NQUQxNyAweDcxCisjZGVmaW5lIEtTX0dBTU1BRDE4IDB4NzIKKyNkZWZpbmUgS1NfR0FNTUFEMTkgMHg3MworI2RlZmluZSBLU19HQU1NQUQyMCAweDc0CisjZGVmaW5lIEtTX0dBTU1BRDIxIDB4NzUKKyNkZWZpbmUgS1NfR0FNTUFEMjIgMHg3NgorI2RlZmluZSBLU19HQU1NQUQyMyAweDc3CisjZGVmaW5lIEtTX0dBTU1BRDI0IDB4NzgKKyNkZWZpbmUgS1NfR0FNTUFEMjUgMHg3OQorI2RlZmluZSBLU19HQU1NQUQyNiAweDdhCisjZGVmaW5lIEtTX0dBTU1BRDI3IDB4N2IKKyNkZWZpbmUgS1NfR0FNTUFEMjggMHg3YworI2RlZmluZSBLU19HQU1NQUQyOSAweDdkCisjZGVmaW5lIEtTX0dBTU1BRDMwIDB4N2UKKyNkZWZpbmUgS1NfR0FNTUFEMzEgMHg3ZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIG1nYV9kZXYgOiByZXByZXNlbnRzIG9uZSBrczAxMjcgY2hpcC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBhZGp1c3QgeworCWludAljb250cmFzdDsKKwlpbnQJYnJpZ2h0OworCWludAlodWU7CisJaW50CXVnYWluOworCWludAl2Z2FpbjsKK307CisKK3N0cnVjdCBrczAxMjcgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJdW5zaWduZWQgY2hhcglhZGRyOworCWludAkJZm9ybWF0X3dpZHRoOworCWludAkJZm9ybWF0X2hlaWdodDsKKwlpbnQJCWNhcF93aWR0aDsKKwlpbnQJCWNhcF9oZWlnaHQ7CisJaW50CQlub3JtOworCWludAkJa3NfdHlwZTsKKwl1OCAJCXJlZ3NbMjU2XTsKK307CisKKworc3RhdGljIGludCBkZWJ1ZzsgLyogaW5zbW9kIHBhcmFtZXRlciAqLworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgb3V0cHV0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyB1OCByZWdfZGVmYXVsdHNbNjRdOworCisKKworc3RhdGljIHZvaWQgaW5pdF9yZWdfZGVmYXVsdHModm9pZCkKK3sKKwl1OCAqdGFibGUgPSByZWdfZGVmYXVsdHM7CisKKwl0YWJsZVtLU19DTURBXSAgICAgPSAweDJjOyAgLyogVlNFPTAsIENDSVIgNjAxLCBhdXRvZGV0ZWN0IHN0YW5kYXJkICovCisJdGFibGVbS1NfQ01EQl0gICAgID0gMHgxMjsgIC8qIFZBTElHTj0wLCBBR0MgY29udHJvbCBhbmQgaW5wdXQgKi8KKwl0YWJsZVtLU19DTURDXSAgICAgPSAweDAwOyAgLyogVGVzdCBvcHRpb25zICovCisJLyogY2xvY2sgJiBpbnB1dCBzZWxlY3QsIHdyaXRlIDEgdG8gUE9SVEEgKi8KKwl0YWJsZVtLU19DTUREXSAgICAgPSAweDAxOworCXRhYmxlW0tTX0hBVkJdICAgICA9IDB4MDA7ICAvKiBIQVYgU3RhcnQgQ29udHJvbCAqLworCXRhYmxlW0tTX0hBVkVdICAgICA9IDB4MDA7ICAvKiBIQVYgRW5kIENvbnRyb2wgKi8KKwl0YWJsZVtLU19IUzFCXSAgICAgPSAweDEwOyAgLyogSFMxIFN0YXJ0IENvbnRyb2wgKi8KKwl0YWJsZVtLU19IUzFFXSAgICAgPSAweDAwOyAgLyogSFMxIEVuZCBDb250cm9sICovCisJdGFibGVbS1NfSFMyQl0gICAgID0gMHgwMDsgIC8qIEhTMiBTdGFydCBDb250cm9sICovCisJdGFibGVbS1NfSFMyRV0gICAgID0gMHgwMDsgIC8qIEhTMiBFbmQgQ29udHJvbCAqLworCXRhYmxlW0tTX0FHQ10gICAgICA9IDB4NTM7ICAvKiBNYW51YWwgc2V0dGluZyBmb3IgQUdDICovCisJdGFibGVbS1NfSFhUUkFdICAgID0gMHgwMDsgIC8qIEV4dHJhIEJpdHMgZm9yIEhBViBhbmQgSFMxLzIgKi8KKwl0YWJsZVtLU19DREVNXSAgICAgPSAweDAwOyAgLyogQ2hyb21hIERlbW9kdWxhdGlvbiBDb250cm9sICovCisJdGFibGVbS1NfUE9SVEFCXSAgID0gMHgwZjsgIC8qIHBvcnQgQiBpcyBpbnB1dCwgcG9ydCBBIG91dHB1dCBHUFBPUlQgKi8KKwl0YWJsZVtLU19MVU1BXSAgICAgPSAweDAxOyAgLyogTHVtYSBjb250cm9sICovCisJdGFibGVbS1NfQ09OXSAgICAgID0gMHgwMDsgIC8qIENvbnRyYXN0IENvbnRyb2wgKi8KKwl0YWJsZVtLU19CUlRdICAgICAgPSAweDAwOyAgLyogQnJpZ2h0bmVzcyBDb250cm9sICovCisJdGFibGVbS1NfQ0hST01BXSAgID0gMHgyYTsgIC8qIENocm9tYSBjb250cm9sIEEgKi8KKwl0YWJsZVtLU19DSFJPTUJdICAgPSAweDkwOyAgLyogQ2hyb21hIGNvbnRyb2wgQiAqLworCXRhYmxlW0tTX0RFTU9EXSAgICA9IDB4MDA7ICAvKiBDaHJvbWEgRGVtb2R1bGF0aW9uIENvbnRyb2wgJiBTdGF0dXMgKi8KKwl0YWJsZVtLU19TQVRdICAgICAgPSAweDAwOyAgLyogQ29sb3IgU2F0dXJhdGlvbiBDb250cm9sKi8KKwl0YWJsZVtLU19IVUVdICAgICAgPSAweDAwOyAgLyogSHVlIENvbnRyb2wgKi8KKwl0YWJsZVtLU19WRVJUSUFdICAgPSAweDAwOyAgLyogVmVydGljYWwgUHJvY2Vzc2luZyBDb250cm9sIEEgKi8KKwkvKiBWZXJ0aWNhbCBQcm9jZXNzaW5nIENvbnRyb2wgQiwgbHVtYSAxIGxpbmUgZGVsYXllZCAqLworCXRhYmxlW0tTX1ZFUlRJQl0gICA9IDB4MTI7CisJdGFibGVbS1NfVkVSVElDXSAgID0gMHgwYjsgIC8qIFZlcnRpY2FsIFByb2Nlc3NpbmcgQ29udHJvbCBDICovCisJdGFibGVbS1NfSFNDTExdICAgID0gMHgwMDsgIC8qIEhvcml6b250YWwgU2NhbGluZyBSYXRpbyBMb3cgKi8KKwl0YWJsZVtLU19IU0NMSF0gICAgPSAweDAwOyAgLyogSG9yaXpvbnRhbCBTY2FsaW5nIFJhdGlvIEhpZ2ggKi8KKwl0YWJsZVtLU19WU0NMTF0gICAgPSAweDAwOyAgLyogVmVydGljYWwgU2NhbGluZyBSYXRpbyBMb3cgKi8KKwl0YWJsZVtLU19WU0NMSF0gICAgPSAweDAwOyAgLyogVmVydGljYWwgU2NhbGluZyBSYXRpbyBIaWdoICovCisJLyogMTYgYml0IFlDYkNyIDQ6MjoyIG91dHB1dDsgSSBjYW4ndCBtYWtlIHRoZSBidDg2NiBsaWtlIDggYml0IC9TYW0gKi8KKwl0YWJsZVtLU19PRk1UQV0gICAgPSAweDMwOworCXRhYmxlW0tTX09GTVRCXSAgICA9IDB4MDA7ICAvKiBPdXRwdXQgQ29udHJvbCBCICovCisJLyogVkJJIERlY29kZXIgQ29udHJvbDsgNGJpdCBmbXQ6IGF2b2lkIFkgb3ZlcmZsb3cgKi8KKwl0YWJsZVtLU19WQklDVExdICAgPSAweDVkOworCXRhYmxlW0tTX0NDREFUMl0gICA9IDB4MDA7ICAvKiBSZWFkIE9ubHkgcmVnaXN0ZXIgKi8KKwl0YWJsZVtLU19DQ0RBVDFdICAgPSAweDAwOyAgLyogUmVhZCBPbmx5IHJlZ2lzdGVyICovCisJdGFibGVbS1NfVkJJTDMwXSAgID0gMHhhODsgIC8qIFZCSSBkYXRhIGRlY29kaW5nIG9wdGlvbnMgKi8KKwl0YWJsZVtLU19WQklMNzRdICAgPSAweGFhOyAgLyogVkJJIGRhdGEgZGVjb2Rpbmcgb3B0aW9ucyAqLworCXRhYmxlW0tTX1ZCSUwxMThdICA9IDB4MmE7ICAvKiBWQkkgZGF0YSBkZWNvZGluZyBvcHRpb25zICovCisJdGFibGVbS1NfVkJJTDE1MTJdID0gMHgwMDsgIC8qIFZCSSBkYXRhIGRlY29kaW5nIG9wdGlvbnMgKi8KKwl0YWJsZVtLU19UVEZSQU1dICAgPSAweDAwOyAgLyogVGVsZXRleHQgZnJhbWUgYWxpZ25tZW50IHBhdHRlcm4gKi8KKwl0YWJsZVtLU19URVNUQV0gICAgPSAweDAwOyAgLyogdGVzdCByZWdpc3Rlciwgc2hvdWxkbid0IGJlIHdyaXR0ZW4gKi8KKwl0YWJsZVtLU19VVk9GRkhdICAgPSAweDAwOyAgLyogVVYgT2Zmc2V0IEFkanVzdG1lbnQgSGlnaCAqLworCXRhYmxlW0tTX1VWT0ZGTF0gICA9IDB4MDA7ICAvKiBVViBPZmZzZXQgQWRqdXN0bWVudCBMb3cgKi8KKwl0YWJsZVtLU19VR0FJTl0gICAgPSAweDAwOyAgLyogVSBDb21wb25lbnQgR2FpbiBBZGp1c3RtZW50ICovCisJdGFibGVbS1NfVkdBSU5dICAgID0gMHgwMDsgIC8qIFYgQ29tcG9uZW50IEdhaW4gQWRqdXN0bWVudCAqLworCXRhYmxlW0tTX1ZBVkJdICAgICA9IDB4MDc7ICAvKiBWQVYgQmVnaW4gKi8KKwl0YWJsZVtLU19WQVZFXSAgICAgPSAweDAwOyAgLyogVkFWIEVuZCAqLworCXRhYmxlW0tTX0NUUkFDS10gICA9IDB4MDA7ICAvKiBDaHJvbWEgVHJhY2tpbmcgQ29udHJvbCAqLworCXRhYmxlW0tTX1BPTENUTF0gICA9IDB4NDE7ICAvKiBUaW1pbmcgU2lnbmFsIFBvbGFyaXR5IENvbnRyb2wgKi8KKwl0YWJsZVtLU19SRUZDT0RdICAgPSAweDgwOyAgLyogUmVmZXJlbmNlIENvZGUgSW5zZXJ0aW9uIENvbnRyb2wgKi8KKwl0YWJsZVtLU19JTlZBTFldICAgPSAweDEwOyAgLyogSW52YWxpZCBZIENvZGUgKi8KKwl0YWJsZVtLU19JTlZBTFVdICAgPSAweDgwOyAgLyogSW52YWxpZCBVIENvZGUgKi8KKwl0YWJsZVtLU19JTlZBTFZdICAgPSAweDgwOyAgLyogSW52YWxpZCBWIENvZGUgKi8KKwl0YWJsZVtLU19VTlVTRVldICAgPSAweDEwOyAgLyogVW51c2VkIFkgQ29kZSAqLworCXRhYmxlW0tTX1VOVVNFVV0gICA9IDB4ODA7ICAvKiBVbnVzZWQgVSBDb2RlICovCisJdGFibGVbS1NfVU5VU0VWXSAgID0gMHg4MDsgIC8qIFVudXNlZCBWIENvZGUgKi8KKwl0YWJsZVtLU19VU1JTQVZdICAgPSAweDAwOyAgLyogcmVzZXJ2ZWQgKi8KKwl0YWJsZVtLU19VU1JFQVZdICAgPSAweDAwOyAgLyogcmVzZXJ2ZWQgKi8KKwl0YWJsZVtLU19TSFMxQV0gICAgPSAweDAwOyAgLyogVXNlciBEZWZpbmVkIFNIUzEgQSAqLworCS8qIFVzZXIgRGVmaW5lZCBTSFMxIEIsIEFMVDY1Nj0xIG9uIDAxMjdCICovCisJdGFibGVbS1NfU0hTMUJdICAgID0gMHg4MDsKKwl0YWJsZVtLU19TSFMxQ10gICAgPSAweDAwOyAgLyogVXNlciBEZWZpbmVkIFNIUzEgQyAqLworCXRhYmxlW0tTX0NNREVdICAgICA9IDB4MDA7ICAvKiBDb21tYW5kIFJlZ2lzdGVyIEUgKi8KKwl0YWJsZVtLU19WU0RFTF0gICAgPSAweDAwOyAgLyogVlMgRGVsYXkgQ29udHJvbCAqLworCS8qIENvbW1hbmQgUmVnaXN0ZXIgRiwgdXBkYXRlIC1pbW1lZGlhdGVseS0gKi8KKwkvKiAodGhlcmUgbWlnaHQgY29tZSBubyB2c3luYykqLworCXRhYmxlW0tTX0NNREZdICAgICA9IDB4MDI7Cit9CisKKworLyogV2UgbmVlZCB0byBtYW51YWxseSByZWFkIGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlIEtTMDEyNyBjaGlwLgorICoKKyAqIEFuIGV4cGxhbmF0aW9uIGZyb20ga2F5b3JrQG1haWwudXRleGFzLmVkdToKKyAqCisgKiBEdXJpbmcgSTJDIHJlYWRzLCB0aGUgS1MwMTI3IG9ubHkgc2FtcGxlcyBmb3IgYSBzdG9wIGNvbmRpdGlvbgorICogZHVyaW5nIHRoZSBwbGFjZSB3aGVyZSB0aGUgYWNrbm9sZWRnZSBiaXQgc2hvdWxkIGJlLiBBbnkgc3RhbmRhcmQKKyAqIEkyQyBpbXBsZW1lbnRhdGlvbiAoY29ycmVjdGx5KSB0aHJvd3MgaW4gYW5vdGhlciBjbG9jayB0cmFuc2l0aW9uCisgKiBhdCB0aGUgOXRoIGJpdCwgYW5kIHRoZSBLUzAxMjcgd2lsbCBub3QgcmVjb2duaXplIHRoZSBzdG9wIGNvbmRpdGlvbgorICogYW5kIHdpbGwgY29udGludWUgdG8gY2xvY2sgb3V0IGRhdGEuCisgKgorICogU28gd2UgaGF2ZSB0byBkbyB0aGUgcmVhZCBvdXJzZWxmLiAgQmlnIGRlYWwuCisJICAgd29ya2Fyb3VuZCBpbiBpMmMtYWxnby1iaXQKKyAqLworCisKK3N0YXRpYyB1OCBrczAxMjdfcmVhZChzdHJ1Y3Qga3MwMTI3ICprcywgdTggcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjID0ga3MtPmNsaWVudDsKKwljaGFyIHZhbCA9IDA7CisJc3RydWN0IGkyY19tc2cgbXNnc1tdID0geworCQl7Yy0+YWRkciwgMCwgc2l6ZW9mKHJlZyksICZyZWd9LAorCQl7Yy0+YWRkciwgSTJDX01fUkQgfCBJMkNfTV9OT19SRF9BQ0ssIHNpemVvZih2YWwpLCAmdmFsfX07CisJaW50IHJldDsKKworCXJldCA9IGkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKKwlpZiAocmV0ICE9IEFSUkFZX1NJWkUobXNncykpCisJCWRwcmludGsoImtzMDEyN193cml0ZSBlcnJvclxuIik7CisKKwlyZXR1cm4gdmFsOworfQorCisKK3N0YXRpYyB2b2lkIGtzMDEyN193cml0ZShzdHJ1Y3Qga3MwMTI3ICprcywgdTggcmVnLCB1OCB2YWwpCit7CisJY2hhciBtc2dbXSA9IHtyZWcsIHZhbH07CisKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGtzLT5jbGllbnQsIG1zZywgc2l6ZW9mKG1zZykpICE9IHNpemVvZihtc2cpKQorCQlkcHJpbnRrKCJrczAxMjdfd3JpdGUgZXJyb3JcbiIpOworCisJa3MtPnJlZ3NbcmVnXSA9IHZhbDsKK30KKworCisvKiBnZW5lcmljIGJpdC10d2lkZGxpbmcgKi8KK3N0YXRpYyB2b2lkIGtzMDEyN19hbmRfb3Ioc3RydWN0IGtzMDEyNyAqa3MsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCit7CisJdTggdmFsID0ga3MtPnJlZ3NbcmVnXTsKKwl2YWwgPSAodmFsICYgYW5kX3YpIHwgb3JfdjsKKwlrczAxMjdfd3JpdGUoa3MsIHJlZywgdmFsKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIGtzMDEyNyBwcml2YXRlIGFwaQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGtzMDEyN19yZXNldChzdHJ1Y3Qga3MwMTI3KiBrcykKK3sKKwlpbnQgaTsKKwl1OCAqdGFibGUgPSByZWdfZGVmYXVsdHM7CisKKwlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfVU5LTk9XTjsKKworCWRwcmludGsoImtzMDEyNzogcmVzZXRcbiIpOworCW1zbGVlcCgxKTsKKworCS8qIGluaXRpYWxpemUgYWxsIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KKwkvKiAoZXhjZXB0IFNUQVQsIDB4MjEsIDB4MjIsIFRFU1QgYW5kIDB4MzgsMHgzOSkgKi8KKworCWZvcihpID0gMTsgaSA8IDMzOyBpKyspCisJCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCisJZm9yKGkgPSAzNTsgaSA8IDQwOyBpKyspCisJCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCisJZm9yKGkgPSA0MTsgaSA8IDU2OyBpKyspCisJCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCisJZm9yKGkgPSA1ODsgaSA8IDY0OyBpKyspCisJCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCisKKwlpZiAoKGtzMDEyN19yZWFkKGtzLCBLU19TVEFUKSAmIDB4ODApID09IDApIHsKKwkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjJTOworCQlkcHJpbnRrKCJrczAxMjc6IGtzMDEyMnMgRm91bmRcbiIpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoKGtzMDEyN19yZWFkKGtzLCBLU19DTURFKSAmIDB4MGYpIHsKKworCWNhc2UgMDoKKwkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjc7CisJCWRwcmludGsoImtzMDEyNzoga3MwMTI3IGZvdW5kXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIDk6CisJCWtzLT5rc190eXBlID0gS1NfVFlQRV8wMTI3QjsKKwkJZHByaW50aygia3MwMTI3OiBrczAxMjdCIFJldmlzaW9uIEEgZm91bmRcbiIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRwcmludGsoImtzMDEyNzogdW5rbm93biByZXZpc2lvblxuIik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBrczAxMjdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWludAkJKmlhcmcgPSAoaW50Kilhcmc7CisKKwlpbnQJCXN0YXR1czsKKworCWlmICgha3MpCisJCXJldHVybiAtRU5PREVWOworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgREVDT0RFUl9JTklUOgorCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9JTklUXG4iKTsKKwkJa3MwMTI3X3Jlc2V0KGtzKTsKKwkJYnJlYWs7CisKKwljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgorCQlzd2l0Y2goKmlhcmcpIHsKKwkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMToKKwkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMjoKKwkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMzoKKwkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNDoKKwkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNToKKwkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNjoKKwkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9JTlBVVCAlZDogIgorCQkJCSJDb21wb3NpdGVcbiIsICppYXJnKTsKKwkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCQkvKiBWU0U9MCAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CisJCQkvKiBzZXQgaW5wdXQgbGluZSAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7CisJCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQywgICAweDcwLCAweDBhKTsKKwkJCS8qIGFuYWxvZyBpbnB1dCAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKKwkJCS8qIGVuYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOworCQkJLyogY2hyb21hIHRyYXAsIEhZQldSPTEgKi8KKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0xVTUEsICAgMHgwMCwKKwkJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19MVU1BXSl8MHgwYyk7CisJCQkvKiBzY2FsZXIgZnVsbGJ3LCBsdW1hIGNvbWIgb2ZmICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOworCQkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwgMHg5MCk7CisKKwkJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUIsIDB4MGYsIDB4OTApOworCisJCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKKwkJCWtzMDEyN193cml0ZShrcywgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOworCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKKwkJCWtzMDEyN193cml0ZShrcywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CisJCQlicmVhazsKKworCQljYXNlIEtTX0lOUFVUX1NWSURFT18xOgorCQljYXNlIEtTX0lOUFVUX1NWSURFT18yOgorCQljYXNlIEtTX0lOUFVUX1NWSURFT18zOgorCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX0lOUFVUICVkOiAiCisJCQkJIlMtVmlkZW9cbiIsICppYXJnKTsKKwkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCQkvKiBWU0U9MCAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CisJCQkvKiBzZXQgaW5wdXQgbGluZSAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7CisJCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQywgICAweDcwLCAweDBhKTsKKwkJCS8qIGFuYWxvZyBpbnB1dCAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKKwkJCS8qIGVuYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfTFVNQSwgMHgwMCwKKwkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0xVTUFdKTsKKwkJCS8qIGRpc2FibGUgbHVtYSBjb21iICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUEsIDB4MDgsCisJCQkJICAgICAgIChyZWdfZGVmYXVsdHNbS1NfVkVSVElBXSYweGYwKXwweDAxKTsKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwKKwkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CisKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0NIUk9NQl0mMHhmMCk7CisKKwkJCWtzMDEyN193cml0ZShrcywgS1NfVUdBSU4sIHJlZ19kZWZhdWx0c1tLU19VR0FJTl0pOworCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7CisJCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOworCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VVk9GRkwsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkxdKTsKKwkJCWJyZWFrOworCisJCWNhc2UgS1NfSU5QVVRfWVVWNjU2OgorCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX0lOUFVUIDE1OiAiCisJCQkJIllVVjY1NlxuIik7CisJCQlpZiAoa3MtPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDIHx8CisJCQkgICAga3MtPm5vcm0gPT0gS1NfU1REX1BBTF9NKQorCQkJCS8qIGZvcmNlIDYwIEh6ICovCisJCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAzKTsKKwkJCWVsc2UKKwkJCQkvKiBmb3JjZSA1MCBIeiAqLworCQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMik7CisKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmZiwgMHg0MCk7IC8qIFZTRT0xICovCisJCQkvKiBzZXQgaW5wdXQgbGluZSBhbmQgVkFMSUdOICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURCLCAgIDB4YjAsICgqaWFyZyB8IDB4NDApKTsKKwkJCS8qIGZyZWVydW5uaW5nIG1vZGUsICovCisJCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREMsICAgMHg3MCwgMHg4Nyk7CisJCQkvKiBkaWdpdGFsIGlucHV0LCBTWU5ESVIgPSAwIElOUFNMPTAxIENMS0RJUj0wIEVBVj0wICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOworCQkJLyogZGlzYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOworCQkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfTFVNQSwgICAweDAwLCAweDcxKTsKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwKKwkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CisKKwkJCS8qIHNjYWxlciBmdWxsYncsIGx1bWEgY29tYiBvZmYgKi8KKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQSwgMHgwOCwgMHg4MSk7CisKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0NIUk9NQl0mMHhmMCk7CisKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NPTiwgMHgwMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19CUlQsIDB4MDAsIDMyKTsJLyogc3BlYzogMzQgKi8KKwkJCQkvKiBzcGVjOiAyMjkgKGU1KSAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfU0FULCAweDAwLCAweGU4KTsKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0hVRSwgMHgwMCwgMCk7CisKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1VHQUlOLCAweDAwLCAyMzgpOworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkdBSU4sIDB4MDAsIDB4MDApOworCisJCQkvKlVPRkY6MHgzMCwgVk9GRjoweDMwLCBUU1RDR049MSAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVVZPRkZILCAweDAwLCAweDRmKTsKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1VWT0ZGTCwgMHgwMCwgMHgwMCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX0lOUFVUOiAiCisJCQkJIlVua25vd24gaW5wdXQgJWRcbiIsICppYXJnKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogaGFjazogQ0RNTFBGIHNvbWV0aW1lcyBzcG9udGFuZW91c2x5IHN3aXRjaGVzIG9uOyAqLworCQkvKiBmb3JjZSBiYWNrIG9mZiAqLworCQlrczAxMjdfd3JpdGUoa3MsIEtTX0RFTU9ELCByZWdfZGVmYXVsdHNbS1NfREVNT0RdKTsKKwkJYnJlYWs7CisKKwljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKKwkJc3dpdGNoKCppYXJnKSB7CisJCWNhc2UgS1NfT1VUUFVUX1lVVjY1NkU6CisJCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfT1VUUFVUOiAiCisJCQkJIk9VVFBVVF9ZVVY2NTZFIChNaXNzaW5nKVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCisJCWNhc2UgS1NfT1VUUFVUX0VYVjoKKwkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9PVVRQVVQ6ICIKKwkJCQkiT1VUUFVUX0VYVlxuIik7CisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19PRk1UQSwgMHhmMCwgMHgwOSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgREVDT0RFUl9TRVRfTk9STTogLy9zYW0gVGhpcyBibG9jayBtaXhlcyBvbGQgYW5kIG5ldyBub3JtIG5hbWVzLi4uCisJCS8qIFNldCB0byBhdXRvbWF0aWMgU0VDQU0vRnNjIG1vZGUgKi8KKwkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOworCisJCWtzLT5ub3JtID0gKmlhcmc7CisJCXN3aXRjaCgqaWFyZykKKwkJeworCQkvKiB0aGlzIGlzIHVudGVzdGVkICEhICovCisJCS8qIEl0IGp1c3QgZGV0ZWN0cyBQQUxfTi9OVFNDX00gKG5vIHNwZWNpYWwgZnJlcXVlbmNpZXMpICovCisJCS8qIEFuZCB5b3UgaGF2ZSB0byBzZXQgdGhlIHN0YW5kYXJkIGEgc2Vjb25kIHRpbWUgYWZ0ZXJ3YXJkcyAqLworCQljYXNlIFZJREVPX01PREVfQVVUTzoKKwkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiBBVVRPXG4iKTsKKworCQkJLyogVGhlIGNoaXAgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0ICovCisJCQkvKiBiYXNlZCBvbiB0aGUgY3VycmVudCBmaWVsZCByYXRlICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKKwkJCS8qIFRoaXMgaXMgd3JvbmcgZm9yIFBBTCAhIEFzIEkgc2FpZCwgKi8KKwkJCS8qIHlvdSBuZWVkIHRvIHNldCB0aGUgc3RhbmRhcmQgb25jZSBhZ2FpbiAhISAqLworCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyNDA7CisJCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OworCQkJYnJlYWs7CisKKwkJY2FzZSBWSURFT19NT0RFX05UU0M6CisJCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfTk9STTogTlRTQ19NXG4iKTsKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKKwkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CisJCQlicmVhazsKKworCQljYXNlIEtTX1NURF9OVFNDX046CisJCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgorCQkJCSJOVFNDX04gKGZpeG1lKVxuIik7CisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOworCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyNDA7CisJCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OworCQkJYnJlYWs7CisKKwkJY2FzZSBWSURFT19NT0RFX1BBTDoKKwkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiBQQUxfTlxuIik7CisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOworCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyOTA7CisJCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OworCQkJYnJlYWs7CisKKwkJY2FzZSBLU19TVERfUEFMX006CisJCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgorCQkJCSJQQUxfTSAoZml4bWUpXG4iKTsKKwkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CisJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKKwkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CisJCQlicmVhazsKKworCQljYXNlIFZJREVPX01PREVfU0VDQU06CisJCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgorCQkJCSJTRUNBTVxuIik7CisJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKKwkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CisKKwkJCS8qIHNldCB0byBzZWNhbSBhdXRvZGV0ZWN0aW9uICovCisJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4ZGYsIDB4MjApOworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaLzEwKzEpOworCisJCQkvKiBkaWQgaXQgYXV0b2RldGVjdD8gKi8KKwkJCWlmIChrczAxMjdfcmVhZChrcywgS1NfREVNT0QpICYgMHg0MCkKKwkJCQlicmVhazsKKworCQkJLyogZm9yY2UgdG8gc2VjYW0gbW9kZSAqLworCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiAiCisJCQkJIlVua25vd24gbm9ybSAlZFxuIiwgKmlhcmcpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CisJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9QSUNUVVJFICIKKwkJCSJub3QgeWV0IHN1cHBvcnRlZCAoZml4bWUpXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0JSSUdIVE5FU1M6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRQorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQ09OVFJBU1Q6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRQorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSFVFOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkU/CisJLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9TQVRVUkFUSU9OOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUKKwkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0FHQ19NT0RFOgorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQUdDOgorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQ0hST01BX01PREU6CisJLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9QSVhDTEtfTU9ERToKKwkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0dBTU1BX01PREU6CisJLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VR0FJTjoKKwkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1ZHQUlOOgorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxZOgorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxVOgorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxWOgorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VZOgorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VVOgorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VWOgorCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVlNBTElHTl9NT0RFOgorCisJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CisJeworCisJCWludCAqaWFyZyA9IGFyZzsKKwkJaW50IGVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKKwkJCWlmIChlbmFibGUpIHsKKwkJCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgIgorCQkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9uICIKKwkJCQkJIiglZClcbiIsIGVuYWJsZSk7CisJCQkJLyogQWxsIG91dHB1dCBwaW5zIG9uICovCisJCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfT0ZNVEEsIDB4Y2YsIDB4MzApOworCQkJCS8qIE9iZXkgdGhlIE9FTiBwaW4gKi8KKwkJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DREVNLCAweDdmLCAweDAwKTsKKwkJCX0gZWxzZSB7CisJCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kICIKKwkJCQkJIkRFQ09ERVJfRU5BQkxFX09VVFBVVCBvZmYgIgorCQkJCQkiKCVkKVxuIiwgZW5hYmxlKTsKKwkJCQkvKiBWaWRlbyBvdXRwdXQgcGlucyBvZmYgKi8KKwkJCQlrczAxMjdfYW5kX29yKGtzLCBLU19PRk1UQSwgMHhjZiwgMHgwMCk7CisJCQkJLyogSWdub3JlIHRoZSBPRU4gcGluICovCisJCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0RFTSwgMHg3ZiwgMHg4MCk7CisJCQl9CisJfQorCQlicmVhazsKKworCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfT1VUUFVUX01PREU6CisJLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDoKKwkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0hFSUdIVDoKKwkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0hTQ0FMRToKKworCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgorCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKKwkJKmlhcmcgPSAwOworCQlzdGF0dXMgPSBrczAxMjdfcmVhZChrcywgS1NfU1RBVCk7CisJCWlmICghKHN0YXR1cyAmIDB4MjApKQkJIC8qIE5PVklEIG5vdCBzZXQgKi8KKwkJCSppYXJnID0gKCppYXJnICYgREVDT0RFUl9TVEFUVVNfR09PRCk7CisJCWlmICgoc3RhdHVzICYgMHgwMSkpCQkgICAgICAvKiBDTE9DSyBzZXQgKi8KKwkJCSppYXJnID0gKCppYXJnICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpOworCQlpZiAoKHN0YXR1cyAmIDB4MDgpKQkJICAgLyogUEFMREVUIHNldCAqLworCQkJKmlhcmcgPSAoKmlhcmcgJiBERUNPREVSX1NUQVRVU19QQUwpOworCQllbHNlCisJCQkqaWFyZyA9ICgqaWFyZyAmIERFQ09ERVJfU1RBVFVTX05UU0MpOworCQlicmVhazsKKworCS8vQ2F0Y2ggYW55IHVua25vd24gY29tbWFuZAorCWRlZmF1bHQ6CisJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCB1bmtub3duOiAlMDRYXG4iLCBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCisKK3N0YXRpYyBpbnQga3MwMTI3X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IGtzMDEyN19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgaW50IGtzMDEyN19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKKworCisvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHtJMkNfS1MwMTI3X0FERE9OPj4xLAorCQkJCSAgICAgICBJMkNfS1MwMTI3X09OQk9BUkQ+PjEsIEkyQ19DTElFTlRfRU5EfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBwcm9iZVsyXSA9CXtJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZVsyXSA9IAl7STJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5EfTsKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0geworCW5vcm1hbF9pMmMsCisJcHJvYmUsCisJaWdub3JlLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfa3MwMTI3ID0geworCS5kcml2ZXIubmFtZSA9ICJrczAxMjciLAorCS5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9LUzAxMjcsCisJLmF0dGFjaF9hZGFwdGVyID0ga3MwMTI3X3Byb2JlLAorCS5kZXRhY2hfY2xpZW50ICA9IGtzMDEyN19kZXRhY2gsCisJLmNvbW1hbmQgICAgICAgID0ga3MwMTI3X2NvbW1hbmQKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBrczAxMjdfY2xpZW50X3RtcGwgPQoreworCS5uYW1lID0gIihrczAxMjcgdW5zZXQpIiwKKwkuYWRkciA9IDAsCisJLmFkYXB0ZXIgPSBOVUxMLAorCS5kcml2ZXIgPSAmaTJjX2RyaXZlcl9rczAxMjcsCisJLnVzYWdlX2NvdW50ID0gMAorfTsKKworc3RhdGljIGludCBrczAxMjdfZm91bmRfcHJvYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3Qga3MwMTI3ICprczsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwgJmtzMDEyN19jbGllbnRfdG1wbCwgc2l6ZW9mKCpjbGllbnQpKTsKKworCWtzID0ga3phbGxvYyhzaXplb2YoKmtzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGtzID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwga3MpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKwlzcHJpbnRmKGNsaWVudC0+bmFtZSwgImtzMDEyNy0lMDJ4IiwgYWRhcHRlci0+aWQpOworCisJa3MtPmNsaWVudCA9IGNsaWVudDsKKwlrcy0+YWRkciA9IGFkZHI7CisJa3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CisKKwkvKiBwb3dlciB1cCAqLworCWtzMDEyN193cml0ZShrcywgS1NfQ01EQSwgMHgyYyk7CisJbWRlbGF5KDEwKTsKKworCS8qIHJlc2V0IHRoZSBkZXZpY2UgKi8KKwlrczAxMjdfcmVzZXQoa3MpOworCXByaW50ayhLRVJOX0lORk8gImtzMDEyNzogYXR0YWNoOiAlcyB2aWRlbyBkZWNvZGVyXG4iLAorCSAgICAgICBrcy0+YWRkcj09KEkyQ19LUzAxMjdfQURET04+PjEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIpOworCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmlkID09IEkyQ19IV19CX1pSMzYwNjcpCisJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwga3MwMTI3X2ZvdW5kX3Byb2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtzMDEyN19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJa3MwMTI3X3dyaXRlKGtzLCBLU19PRk1UQSwgMHgyMCk7IC8qdHJpc3RhdGUqLworCWtzMDEyN193cml0ZShrcywgS1NfQ01EQSwgMHgyYyB8IDB4ODApOyAvKiBwb3dlciBkb3duICovCisKKwlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWtmcmVlKGtzKTsKKwlrZnJlZShjbGllbnQpOworCisJZHByaW50aygia3MwMTI3OiBkZXRhY2hcbiIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGtzMDEyN19pbml0X21vZHVsZSh2b2lkKQoreworCWluaXRfcmVnX2RlZmF1bHRzKCk7CisJaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfa3MwMTI3KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGtzMDEyN19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2tzMDEyNyk7Cit9CisKKworbW9kdWxlX2luaXQoa3MwMTI3X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGtzMDEyN19jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWM1Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogVmlkZW8gQ2FwdHVyZSBEcml2ZXIgKCBWaWRlbyBmb3IgTGludXggMS8yICkKKyAqIGZvciB0aGUgTWF0cm94IE1hcnZlbCBHMjAwLEc0MDAgYW5kIFJhaW5ib3cgUnVubmVyLUcgc2VyaWVzCisgKgorICogVGhpcyBtb2R1bGUgaXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBLUzAxMjcgdmlkZW8gZGVjb2RlciBjaGlwLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSAgUnlhbiBEcmFrZSA8c3RpbGV0dG9AbWVkaWFvbmUubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgS1MwMTI3X0gKKyNkZWZpbmUgS1MwMTI3X0gKKworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisKKy8qIGlucHV0IGNoYW5uZWxzICovCisjZGVmaW5lIEtTX0lOUFVUX0NPTVBPU0lURV8xICAgIDAKKyNkZWZpbmUgS1NfSU5QVVRfQ09NUE9TSVRFXzIgICAgMQorI2RlZmluZSBLU19JTlBVVF9DT01QT1NJVEVfMyAgICAyCisjZGVmaW5lIEtTX0lOUFVUX0NPTVBPU0lURV80ICAgIDQKKyNkZWZpbmUgS1NfSU5QVVRfQ09NUE9TSVRFXzUgICAgNQorI2RlZmluZSBLU19JTlBVVF9DT01QT1NJVEVfNiAgICA2CisKKyNkZWZpbmUgS1NfSU5QVVRfU1ZJREVPXzEgICAgICAgOAorI2RlZmluZSBLU19JTlBVVF9TVklERU9fMiAgICAgICA5CisjZGVmaW5lIEtTX0lOUFVUX1NWSURFT18zICAgICAgIDEwCisKKyNkZWZpbmUgS1NfSU5QVVRfWVVWNjU2CQkxNQorI2RlZmluZSBLU19JTlBVVF9DT1VOVCAgICAgICAgICAxMAorCisvKiBvdXRwdXQgY2hhbm5lbHMgKi8KKyNkZWZpbmUgS1NfT1VUUFVUX1lVVjY1NkUgICAgICAgMAorI2RlZmluZSBLU19PVVRQVVRfRVhWICAgICAgICAgICAxCisKKy8qIHZpZGVvIHN0YW5kYXJkcyAqLworI2RlZmluZSBLU19TVERfTlRTQ19OICAgICAgICAgICAxMTIgICAgICAgLyogNTAgSHogTlRTQyAqLworI2RlZmluZSBLU19TVERfUEFMX00gICAgICAgICAgICAxMTMgICAgICAgLyogNjAgSHogUEFMICAqLworCisjZW5kaWYgLyogS1MwMTI3X0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi5oCmluZGV4IDAxNjZmNTUuLmZmY2RhOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuLmgKQEAgLTE1OSw3ICsxNTksNyBAQAogI2RlZmluZSBCVVpfTUFYX0ZSQU1FICAgICAyNTYJLyogTXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KICNkZWZpbmUgQlVaX01BU0tfRlJBTUUgICAgMjU1CS8qIE11c3QgYmUgQlVaX01BWF9GUkFNRS0xICovCiAKLSNkZWZpbmUgQlVaX01BWF9JTlBVVCAgICAgICA4CisjZGVmaW5lIEJVWl9NQVhfSU5QVVQgICAgICAgMTYKIAogI2lmIFZJREVPX01BWF9GUkFNRSA8PSAzMgogIyAgIGRlZmluZSAgIFY0TF9NQVhfRlJBTUUgICAzMgpAQCAtMTkxLDYgKzE5MSw5IEBACiAJLyogSW9tZWdhICovCiAJQlVaLAogCisJLyogQXZlck1lZGlhICovCisJQVZTNkVZRVMsCisKIAkvKiB0b3RhbCBudW1iZXIgb2YgY2FyZHMgKi8KIAlOVU1fQ0FSRFMKIH07CkBAIC0zNzksNiArMzgyLDkgQEAKIAkvKiBpcyB0aGUgL0dXUyBsaW5lIGNvbmVjdGVkPyAqLwogCXU4IGd3c19ub3RfY29ubmVjdGVkOwogCisJLyogYXZzNmV5ZXMgbXV4IHNldHRpbmcgKi8KKwl1OCBpbnB1dF9tdXg7CisKIAl2b2lkICgqaW5pdCkgKHN0cnVjdCB6b3JhbiAqIHpyKTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMKaW5kZXggMGE4NWM5ZS4uNzk4MTM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMKQEAgLTI3LDYgKzI3LDggQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTkzLDYgKzk1LDExIEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfaW5wdXQsCiAJCSAiRGVmYXVsdCBpbnB1dCAoMD1Db21wb3NpdGUsIDE9Uy1WaWRlbywgMj1JbnRlcm5hbCkiKTsKIAorc3RhdGljIGludCBkZWZhdWx0X211eCA9IDE7CS8qIDYgRXllcyBpbnB1dCBzZWxlY3Rpb24gKi8KK21vZHVsZV9wYXJhbShkZWZhdWx0X211eCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF9tdXgsCisJCSAiRGVmYXVsdCA2IEV5ZXMgbXV4IHNldHRpbmcgKElucHV0IHNlbGVjdGlvbikiKTsKKwogc3RhdGljIGludCBkZWZhdWx0X25vcm0gPSAwOwkvKiAwPVBBTCwgMT1OVFNDIDI9U0VDQU0gKi8KIG1vZHVsZV9wYXJhbShkZWZhdWx0X25vcm0sIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfbm9ybSwgIkRlZmF1bHQgbm9ybSAoMD1QQUwsIDE9TlRTQywgMj1TRUNBTSkiKTsKQEAgLTMwMSw2ICszMDgsMzAgQEAKIAlHUElPKHpyLCAyLCAxKTsJCS8vIFNldCBDb21wb3NpdGUgaW5wdXQvb3V0cHV0CiB9CiAKK3N0YXRpYyB2b2lkCithdnM2ZXllc19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCS8vIEF2ZXJNZWRpYSA2LUV5ZXMgb3JpZ2luYWwgZHJpdmVyIGJ5IENocmlzdGVyIFdlaW5pZ2VsCisKKwkvLyBMaWZ0ZWQgc3RyYWlnaHQgZnJvbSBDaHJpc3RlcidzIG9sZCBkcml2ZXIgYW5kCisJLy8gbW9kaWZpZWQgc2xpZ2h0bHkgYnkgTWFydGluIFNhbXVlbHNzb24uCisKKwlpbnQgbXV4ID0gZGVmYXVsdF9tdXg7IC8qIDEgPSBCVDg2NiwgNyA9IFZJRDEgKi8KKworCUdQSU8oenIsIDQsIDEpOyAvKiBCdDg2NiBTTEVFUCBvbiAqLworCXVkZWxheSgyKTsKKworCUdQSU8oenIsIDAsIDEpOyAvKiBaUjM2MDYwIC9SRVNFVCBvbiAqLworCUdQSU8oenIsIDEsIDApOyAvKiBaUjM2MDYwIC9TTEVFUCBvbiAqLworCUdQSU8oenIsIDIsIG11eCAmIDEpOyAgIC8qIE1VWCBTMCAqLworCUdQSU8oenIsIDMsIDApOyAvKiAvRlJBTUUgb24gKi8KKwlHUElPKHpyLCA0LCAwKTsgLyogQnQ4NjYgU0xFRVAgb2ZmICovCisJR1BJTyh6ciwgNSwgbXV4ICYgMik7ICAgLyogTVVYIFMxICovCisJR1BJTyh6ciwgNiwgMCk7IC8qID8gKi8KKwlHUElPKHpyLCA3LCBtdXggJiA0KTsgICAvKiBNVVggUzIgKi8KKworfQorCiBzdGF0aWMgY2hhciAqCiBpMmNpZF90b19tb2R1bGVuYW1lICh1MTYgaTJjX2lkKQogewpAQCAtMzkxLDYgKzQyMiwxNCBAQAogc3RhdGljIHN0cnVjdCB0dm5vcm0gZjUwY2NpcjYwMV9sbTMzcjEwID0geyA4NjQsIDcyMCwgNzQrNTQsIDgwNCwgNjI1LCA1NzYsIDE4IH07CiBzdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBjY2lyNjAxX2xtMzNyMTAgPSB7IDg1OCwgNzIwLCA1Nis1NCwgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKIAorLyogRklYTUU6IFRoZSBrczAxMjcgc2VlbSBpbmNhcGFibGUgb2Ygc3dhcHBpbmcgVSBhbmQgViwgdG9vLCB3aGljaCBpcyB3aHkgSQorICogY29weSBNYXhpbSdzIGxlZnQgc2hpZnQgaGFjayBmb3IgdGhlIDYgRXllcy4KKyAqCisgKiBDaHJpc3RlcidzIGRyaXZlciB1c2VkIHRoZSB1bnNoaWZ0ZWQgbm9ybXMsIHRob3VnaC4uLgorICogL1NhbSAgKi8KK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MGNjaXI2MDFfYXZzNmV5ZXMgPSB7IDg2NCwgNzIwLCA3NCwgODA0LCA2MjUsIDU3NiwgMTggfTsKK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MGNjaXI2MDFfYXZzNmV5ZXMgPSB7IDg1OCwgNzIwLCA1NiwgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKKwogc3RhdGljIHN0cnVjdCBjYXJkX2luZm8gem9yYW5fY2FyZHNbTlVNX0NBUkRTXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLnR5cGUgPSBEQzEwX29sZCwKQEAgLTQxOSw2ICs0NTgsNyBAQAogCQkuZ3BjcyA9IHsgLTEsIDAgfSwKIAkJLnZmZV9wb2wgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKIAkJLmd3c19ub3RfY29ubmVjdGVkID0gMCwKKwkJLmlucHV0X211eCA9IDAsCiAJCS5pbml0ID0gJmRjMTBfaW5pdCwKIAl9LCB7CiAJCS50eXBlID0gREMxMF9uZXcsCkBAIC00NDUsNiArNDg1LDcgQEAKIAkJLmdwY3MgPSB7IC0xLCAxfSwKIAkJLnZmZV9wb2wgPSB7IDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAgfSwKIAkJLmd3c19ub3RfY29ubmVjdGVkID0gMCwKKwkJLmlucHV0X211eCA9IDAsCiAJCS5pbml0ID0gJmRjMTBwbHVzX2luaXQsCiAJfSwgewogCQkudHlwZSA9IERDMTBwbHVzLApAQCAtNDc0LDYgKzUxNSw3IEBACiAJCS5ncGNzID0geyAtMSwgMSB9LAogCQkudmZlX3BvbCA9IHsgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCB9LAogCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAwLAorCQkuaW5wdXRfbXV4ID0gMCwKIAkJLmluaXQgPSAmZGMxMHBsdXNfaW5pdCwKIAl9LCB7CiAJCS50eXBlID0gREMzMCwKQEAgLTUwMiw2ICs1NDQsNyBAQAogCQkuZ3BjcyA9IHsgLTEsIDAgfSwKIAkJLnZmZV9wb2wgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKIAkJLmd3c19ub3RfY29ubmVjdGVkID0gMCwKKwkJLmlucHV0X211eCA9IDAsCiAJCS5pbml0ID0gJmRjMTBfaW5pdCwKIAl9LCB7CiAJCS50eXBlID0gREMzMHBsdXMsCkBAIC01MzIsNiArNTc1LDcgQEAKIAkJLmdwY3MgPSB7IC0xLCAwIH0sCiAJCS52ZmVfcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCiAJCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDAsCisJCS5pbnB1dF9tdXggPSAwLAogCQkuaW5pdCA9ICZkYzEwX2luaXQsCiAJfSwgewogCQkudHlwZSA9IExNTDMzLApAQCAtNTU4LDYgKzYwMiw3IEBACiAJCS5ncGNzID0geyAzLCAxIH0sCiAJCS52ZmVfcG9sID0geyAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwIH0sCiAJCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDEsCisJCS5pbnB1dF9tdXggPSAwLAogCQkuaW5pdCA9ICZsbWwzM19pbml0LAogCX0sIHsKIAkJLnR5cGUgPSBMTUwzM1IxMCwKQEAgLTU4Niw2ICs2MzEsNyBAQAogCQkuZ3BjcyA9IHsgMywgMSB9LAogCQkudmZlX3BvbCA9IHsgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMCB9LAogCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAxLAorCQkuaW5wdXRfbXV4ID0gMCwKIAkJLmluaXQgPSAmbG1sMzNfaW5pdCwKIAl9LCB7CiAJCS50eXBlID0gQlVaLApAQCAtNjE0LDggKzY2MCw0OSBAQAogCQkuZ3BjcyA9IHsgMywgMSB9LAogCQkudmZlX3BvbCA9IHsgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMCB9LAogCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAxLAorCQkuaW5wdXRfbXV4ID0gMCwKIAkJLmluaXQgPSAmYnV6X2luaXQsCisJfSwgeworCQkudHlwZSA9IEFWUzZFWUVTLAorCQkubmFtZSA9ICI2LUV5ZXMiLAorCQkvKiBBdmVyTWVkaWEgY2hvc2Ugbm90IHRvIGJyYW5kIHRoZSA2LUV5ZXMuIFRodXMgaXQKKwkJICAgY2FuJ3QgYmUgYXV0b2RldGVjdGVkLCBhbmQgcmVxdWlyZXMgY2FyZD14LiAqLworCQkudmVuZG9yX2lkID0gLTEsCisJCS5kZXZpY2VfaWQgPSAtMSwKKwkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX0tTMDEyNywKKwkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0JUODY2LAorCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCisKKwkJLmlucHV0cyA9IDEwLAorCQkuaW5wdXQgPSB7CisJCQl7IDAsICJDb21wb3NpdGUgMSIgfSwKKwkJCXsgMSwgIkNvbXBvc2l0ZSAyIiB9LAorCQkJeyAyLCAiQ29tcG9zaXRlIDMiIH0sCisJCQl7IDQsICJDb21wb3NpdGUgNCIgfSwKKwkJCXsgNSwgIkNvbXBvc2l0ZSA1IiB9LAorCQkJeyA2LCAiQ29tcG9zaXRlIDYiIH0sCisJCQl7IDgsICJTLVZpZGVvIDEiIH0sCisJCQl7IDksICJTLVZpZGVvIDIiIH0sCisJCQl7MTAsICJTLVZpZGVvIDMiIH0sCisJCQl7MTUsICJZQ2JDciIgfQorCQl9LAorCQkubm9ybXMgPSAyLAorCQkudHZuID0geworCQkJJmY1MGNjaXI2MDFfYXZzNmV5ZXMsCisJCQkmZjYwY2NpcjYwMV9hdnM2ZXllcywKKwkJCU5VTEwKKwkJfSwKKwkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCisJCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKKwkJLmdwaW8gPSB7IDEsIDAsIDMsIC0xLCAtMSwgLTEsIC0xLCAtMSB9LC8vIFZhbGlkaXR5IHVua25vd24gL1NhbQorCQkuZ3Bpb19wb2wgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLy8gVmFsaWRpdHkgdW5rbm93biAvU2FtCisJCS5ncGNzID0geyAzLCAxIH0sCQkJLy8gVmFsaWRpdHkgdW5rbm93biAvU2FtCisJCS52ZmVfcG9sID0geyAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwIH0sICAvLyBWYWxpZGl0eSB1bmtub3duIC9TYW0KKwkJLmd3c19ub3RfY29ubmVjdGVkID0gMSwKKwkJLmlucHV0X211eCA9IDEsCisJCS5pbml0ID0gJmF2czZleWVzX2luaXQsCiAJfQorCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaCBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKaW5kZXggYzhiODFmNC4uNzQ4YmJmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCkBAIC0xMTIsNiArMTEyLDggQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX1gxMjA1CTgyCS8qIFhpY29yL0ludGVyc2lsIFgxMjA1IFJUQwkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfUENGODU2Mwk4MwkvKiBQaGlsaXBzIFBDRjg1NjMgUlRDCQkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfUlM1QzM3Mgk4NAkvKiBSaWNvaCBSUzVDMzcyIFJUQwkJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX0JUODY2CTg1CS8qIENvbmV4YW50IGJ0ODY2IHZpZGVvIGVuY29kZXIgKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX0tTMDEyNwk4NgkvKiBTYW1zdW5nIGtzMDEyNyB2aWRlbyBkZWNvZGVyICovCiAKICNkZWZpbmUgSTJDX0RSSVZFUklEX0kyQ0RFVgk5MDAKICNkZWZpbmUgSTJDX0RSSVZFUklEX0FSUCAgICAgICAgOTAyICAgIC8qIFNNQnVzIEFSUCBDbGllbnQgICAgICAgICAgICAgICovCg==