ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSVBNSS50eHQgYi9Eb2N1bWVudGF0aW9uL0lQTUkudHh0CmluZGV4IDMxZDFkNjUuLmMwZDg3ODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vSVBNSS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9JUE1JLnR4dApAQCAtNTg3LDcgKzU4Nyw3IEBACiAKICAgbW9kcHJvYmUgaXBtaV93YXRjaGRvZyB0aW1lb3V0PTx0PiBwcmV0aW1lb3V0PTx0PiBhY3Rpb249PGFjdGlvbiB0eXBlPgogICAgICAgcHJlYWN0aW9uPTxwcmVhY3Rpb24gdHlwZT4gcHJlb3A9PHByZW9wIHR5cGU+IHN0YXJ0X25vdz14Ci0gICAgICBub3dheW91dD14IGlmbnVtX3RvX3VzZT1uCisgICAgICBub3dheW91dD14IGlmbnVtX3RvX3VzZT1uIHBhbmljX3dkdF90aW1lb3V0PTx0PgogCiBpZm51bV90b191c2Ugc3BlY2lmaWVzIHdoaWNoIGludGVyZmFjZSB0aGUgd2F0Y2hkb2cgdGltZXIgc2hvdWxkIHVzZS4KIFRoZSBkZWZhdWx0IGlzIC0xLCB3aGljaCBtZWFucyB0byBwaWNrIHRoZSBmaXJzdCBvbmUgcmVnaXN0ZXJlZC4KQEAgLTU5Nyw3ICs1OTcsOSBAQAogb2NjdXIgKGlmIHByZXRpbWVvdXQgaXMgemVybywgdGhlbiBwcmV0aW1lb3V0IHdpbGwgbm90IGJlIGVuYWJsZWQpLiAgTm90ZQogdGhhdCB0aGUgcHJldGltZW91dCBpcyB0aGUgdGltZSBiZWZvcmUgdGhlIGZpbmFsIHRpbWVvdXQuICBTbyBpZiB0aGUKIHRpbWVvdXQgaXMgNTAgc2Vjb25kcyBhbmQgdGhlIHByZXRpbWVvdXQgaXMgMTAgc2Vjb25kcywgdGhlbiB0aGUgcHJldGltZW91dAotd2lsbCBvY2N1ciBpbiA0MCBzZWNvbmQgKDEwIHNlY29uZHMgYmVmb3JlIHRoZSB0aW1lb3V0KS4KK3dpbGwgb2NjdXIgaW4gNDAgc2Vjb25kICgxMCBzZWNvbmRzIGJlZm9yZSB0aGUgdGltZW91dCkuIFRoZSBwYW5pY193ZHRfdGltZW91dAoraXMgdGhlIHZhbHVlIG9mIHRpbWVvdXQgd2hpY2ggaXMgc2V0IG9uIGtlcm5lbCBwYW5pYywgaW4gb3JkZXIgdG8gbGV0IGFjdGlvbnMKK3N1Y2ggYXMga2R1bXAgdG8gb2NjdXIgZHVyaW5nIHBhbmljLgogCiBUaGUgYWN0aW9uIG1heSBiZSAicmVzZXQiLCAicG93ZXJfY3ljbGUiLCBvciAicG93ZXJfb2ZmIiwgYW5kCiBzcGVjaWZpZXMgd2hhdCB0byBkbyB3aGVuIHRoZSB0aW1lciB0aW1lcyBvdXQsIGFuZCBkZWZhdWx0cyB0bwpAQCAtNjM0LDYgKzYzNiw3IEBACiAJaXBtaV93YXRjaGRvZy5wcmVvcD08cHJlb3AgdHlwZT4KIAlpcG1pX3dhdGNoZG9nLnN0YXJ0X25vdz14CiAJaXBtaV93YXRjaGRvZy5ub3dheW91dD14CisJaXBtaV93YXRjaGRvZy5wYW5pY193ZHRfdGltZW91dD08dD4KIAogVGhlIG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBtb2R1bGUgcGFyYW1ldGVyIG9wdGlvbnMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL2tleXN0b25lL092ZXJ2aWV3LnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL2tleXN0b25lL092ZXJ2aWV3LnR4dAppbmRleCBmMTdiYzRjLi40MDBjMGMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9rZXlzdG9uZS9PdmVydmlldy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0va2V5c3RvbmUvT3ZlcnZpZXcudHh0CkBAIC00OSwyNCArNDksNiBAQAogVGhlIGRldmljZSB0cmVlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBrZXlzdG9uZSBtYWNoaW5lcyBhcmUgbG9jYXRlZCBhdAogICAgICAgICBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2tleXN0b25lL2tleXN0b25lLnR4dAogCi1Lbm93biBpc3N1ZXMgJiB3b3JrYXJvdW5kCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNvbWUgb2YgdGhlIGRldmljZSBkcml2ZXJzIHVzZWQgb24ga2V5c3RvbmUgYXJlIHJlLXVzZWQgZnJvbSB0aGF0IGZyb20KLURhVmluY2kgYW5kIG90aGVyIFRJIFNvQ3MuIFRoZXNlIGRldmljZSBkcml2ZXJzIG1heSB1c2UgY2xvY2sgQVBJcyBkaXJlY3RseS4KLVNvbWUgb2YgdGhlIGtleXN0b25lIHNwZWNpZmljIGRyaXZlcnMgc3VjaCBhcyBuZXRjcCB1c2VzIHJ1biB0aW1lIHBvd2VyCi1tYW5hZ2VtZW50IEFQSSBpbnN0ZWFkIHRvIGVuYWJsZSBjbG9jay4gQXMgdGhpcyBBUEkgaGFzIGxpbWl0YXRpb25zIG9uCi1rZXlzdG9uZSwgZm9sbG93aW5nIHdvcmthcm91bmQgaXMgbmVlZGVkIHRvIGJvb3QgTGludXguCi0KLSAgIEFkZCAnY2xrX2lnbm9yZV91bnVzZWQnIHRvIHRoZSBib290YXJncyBlbnYgdmFyaWFibGUgaW4gdS1ib290LiBPdGhlcndpc2UKLSAgIGNsb2NrIGZyYW1ld29ya3Mgd2lsbCB0cnkgdG8gZGlzYWJsZSBjbG9ja3MgdGhhdCBhcmUgdW51c2VkIGFuZCBkaXNhYmxlCi0gICB0aGUgaGFyZHdhcmUuIFRoaXMgaXMgYmVjYXVzZSBuZXRjcCByZWxhdGVkIHBvd2VyIGRvbWFpbiBhbmQgY2xvY2sKLSAgIGRvbWFpbnMgYXJlIGVuYWJsZWQgaW4gdS1ib290IGFzIHJ1biB0aW1lIHBvd2VyIG1hbmFnZW1lbnQgQVBJIGN1cnJlbnRseQotICAgZG9lc24ndCBlbmFibGUgY2xvY2tzIGZvciBuZXRjcCBkdWUgdG8gYSBsaW1pdGF0aW9uLiBUaGlzIHdvcmthcm91bmQgaXMKLSAgIGV4cGVjdGVkIHRvIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB3aGVuIHByb3BlciBBUEkgc3VwcG9ydCBiZWNvbWVzCi0gICBhdmFpbGFibGUuIFVudGlsIHRoZW4sIHRoaXMgd29yayBhcm91bmQgaXMgbmVlZGVkLgotCi0KIERvY3VtZW50IEF1dGhvcgogLS0tLS0tLS0tLS0tLS0tCiBNdXJhbGkgS2FyaWNoZXJpIDxtLWthcmljaGVyaTJAdGkuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9udWxsX2Jsay50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnR4dAppbmRleCAyZjZjNmZmLi5kODg4MGNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnR4dApAQCAtNzAsMyArNzAsNiBAQAogICAgICBwYXJhbWV0ZXIuCiAgIDE6IFRoZSBtdWx0aS1xdWV1ZSBibG9jayBsYXllciBpcyBpbnN0YW50aWF0ZWQgd2l0aCBhIGhhcmR3YXJlIGRpc3BhdGNoCiAgICAgIHF1ZXVlIGZvciBlYWNoIENQVSBub2RlIGluIHRoZSBzeXN0ZW0uCisKK3VzZV9saWdodG52bT1bMC8xXTogRGVmYXVsdDogMAorICBSZWdpc3RlciBkZXZpY2Ugd2l0aCBMaWdodE5WTS4gUmVxdWlyZXMgYmxrLW1xIHRvIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3RpLWVkbWEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS90aS1lZG1hLnR4dAppbmRleCBkM2QwYTRmLi4wNzliNDJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3RpLWVkbWEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kbWEvdGktZWRtYS50eHQKQEAgLTIyLDggKzIyLDcgQEAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIHRpLGh3bW9kczoJTmFtZSBvZiB0aGUgaHdtb2RzIGFzc29jaWF0ZWQgdG8gdGhlIGVETUEgQ0MKIC0gdGksZWRtYS1tZW1jcHktY2hhbm5lbHM6IExpc3Qgb2YgY2hhbm5lbHMgYWxsb2NhdGVkIHRvIGJlIHVzZWQgZm9yIG1lbWNweSwgaW93Ci0JCXRoZXNlIGNoYW5uZWxzIHdpbGwgYmUgU1cgdHJpZ2dlcmVkIGNoYW5uZWxzLiBUaGUgbGlzdCBtdXN0Ci0JCWNvbnRhaW4gMTYgYml0cyBudW1iZXJzLCBzZWUgZXhhbXBsZS4KKwkJdGhlc2UgY2hhbm5lbHMgd2lsbCBiZSBTVyB0cmlnZ2VyZWQgY2hhbm5lbHMuIFNlZSBleGFtcGxlLgogLSB0aSxlZG1hLXJlc2VydmVkLXNsb3QtcmFuZ2VzOiBQYVJBTSBzbG90IHJhbmdlcyB3aGljaCBzaG91bGQgbm90IGJlIHVzZWQgYnkKIAkJdGhlIGRyaXZlciwgdGhleSBhcmUgYWxsb2NhdGVkIHRvIGJlIHVzZWQgYnkgZm9yIGV4YW1wbGUgdGhlCiAJCURTUC4gU2VlIGV4YW1wbGUuCkBAIC01NiwxMCArNTUsOSBAQAogCXRpLHRwdGNzID0gPCZlZG1hX3RwdGMwIDc+LCA8JmVkbWFfdHB0YzEgNz4sIDwmZWRtYV90cHRjMiAwPjsKIAogCS8qIENoYW5uZWwgMjAgYW5kIDIxIGlzIGFsbG9jYXRlZCBmb3IgbWVtY3B5ICovCi0JdGksZWRtYS1tZW1jcHktY2hhbm5lbHMgPSAvYml0cy8gMTYgPDIwIDIxPjsKLQkvKiBUaGUgZm9sbG93aW5nIFBhUkFNIHNsb3RzIGFyZSByZXNlcnZlZDogMzUtNDUgYW5kIDEwMC0xMTAgKi8KLQl0aSxlZG1hLXJlc2VydmVkLXNsb3QtcmFuZ2VzID0gL2JpdHMvIDE2IDwzNSAxMD4sCi0JCQkJICAgICAgIC9iaXRzLyAxNiA8MTAwIDEwPjsKKwl0aSxlZG1hLW1lbWNweS1jaGFubmVscyA9IDwyMCAyMT47CisJLyogVGhlIGZvbGxvd2luZyBQYVJBTSBzbG90cyBhcmUgcmVzZXJ2ZWQ6IDM1LTQ0IGFuZCAxMDAtMTA5ICovCisJdGksZWRtYS1yZXNlcnZlZC1zbG90LXJhbmdlcyA9IDwzNSAxMD4sIDwxMDAgMTA+OwogfTsKIAogZWRtYV90cHRjMDogdHB0Y0A0OTgwMDAwMCB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLW1wYzh4eHgudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpby1tcGM4eHh4LnR4dAppbmRleCBmMjQ1NWM1Li4xMjBiYzQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLW1wYzh4eHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8tbXBjOHh4eC50eHQKQEAgLTExLDYgKzExLDEwIEBACiAgICAgICAwID0gYWN0aXZlIGhpZ2gKICAgICAgIDEgPSBhY3RpdmUgbG93CiAKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGxpdHRsZS1lbmRpYW4gOiBHUElPIHJlZ2lzdGVycyBhcmUgdXNlZCBhcyBsaXR0bGUgZW5kaWFuLiBJZiBub3QKKyAgICAgICAgICAgICAgICAgIHByZXNlbnQgcmVnaXN0ZXJzIGFyZSB1c2VkIGFzIGJpZyBlbmRpYW4gYnkgZGVmYXVsdC4KKwogRXhhbXBsZToKIAogZ3BpbzA6IGdwaW9AMTEwMCB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvc3VuNGktbHJhZGMta2V5cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvc3VuNGktbHJhZGMta2V5cy50eHQKaW5kZXggYjljMzJmNi4uNDM1N2U0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3N1bjRpLWxyYWRjLWtleXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC9zdW40aS1scmFkYy1rZXlzLnR4dApAQCAtMTIsNyArMTIsNyBAQAogUmVxdWlyZWQgc3Vibm9kZS1wcm9wZXJ0aWVzOgogCS0gbGFiZWw6IERlc2NyaXB0aXZlIG5hbWUgb2YgdGhlIGtleS4KIAktIGxpbnV4LGNvZGU6IEtleWNvZGUgdG8gZW1pdC4KLQktIGNoYW5uZWw6IENoYW5uZWwgdGhpcyBrZXkgaXMgYXR0YWNoZWQgdG8sIG11dCBiZSAwIG9yIDEuCisJLSBjaGFubmVsOiBDaGFubmVsIHRoaXMga2V5IGlzIGF0dGFjaGVkIHRvLCBtdXN0IGJlIDAgb3IgMS4KIAktIHZvbHRhZ2U6IFZvbHRhZ2UgaW4gwrVWIGF0IGxyYWRjIGlucHV0IHdoZW4gdGhpcyBrZXkgaXMgcHJlc3NlZC4KIAogRXhhbXBsZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvcGFydGl0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvcGFydGl0aW9uLnR4dAppbmRleCBmMWUyYTAyLi4xYzYzZTQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL3BhcnRpdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb24udHh0CkBAIC02LDcgKzYsOSBAQAogYXMgUmVkQm9vdC4KIAogVGhlIHBhcnRpdGlvbiB0YWJsZSBzaG91bGQgYmUgYSBzdWJub2RlIG9mIHRoZSBtdGQgbm9kZSBhbmQgc2hvdWxkIGJlIG5hbWVkCi0ncGFydGl0aW9ucycuIFBhcnRpdGlvbnMgYXJlIGRlZmluZWQgaW4gc3Vibm9kZXMgb2YgdGhlIHBhcnRpdGlvbnMgbm9kZS4KKydwYXJ0aXRpb25zJy4gVGhpcyBub2RlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHk6CistIGNvbXBhdGlibGUgOiAocmVxdWlyZWQpIG11c3QgYmUgImZpeGVkLXBhcnRpdGlvbnMiCitQYXJ0aXRpb25zIGFyZSB0aGVuIGRlZmluZWQgaW4gc3Vibm9kZXMgb2YgdGhlIHBhcnRpdGlvbnMgbm9kZS4KIAogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHBhcnRpdGlvbnMgYXMgZGlyZWN0IHN1Ym5vZGVzIG9mIHRoZSBtdGQgZGV2aWNlIGFyZQogc3VwcG9ydGVkLiBUaGlzIHVzZSBpcyBkaXNjb3VyYWdlZC4KQEAgLTM2LDYgKzM4LDcgQEAKIAogZmxhc2hAMCB7CiAJcGFydGl0aW9ucyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIApAQCAtNTMsNiArNTYsNyBAQAogCiBmbGFzaEAxIHsKIAlwYXJ0aXRpb25zIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCkBAIC02Niw2ICs3MCw3IEBACiAKIGZsYXNoQDIgewogCXBhcnRpdGlvbnMgeworCQljb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY3Bzdy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nwc3cudHh0CmluZGV4IDk4NTNmOGUuLjI4YTQ3ODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY3Bzdy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jcHN3LnR4dApAQCAtNDAsMTggKzQwLDE4IEBACiAKIFNsYXZlIFByb3BlcnRpZXM6CiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBwaHlfaWQJCTogU3BlY2lmaWVzIHNsYXZlIHBoeSBpZAogLSBwaHktbW9kZQkJOiBTZWUgZXRoZXJuZXQudHh0IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIGR1YWxfZW1hY19yZXNfdmxhbgk6IFNwZWNpZmllcyBWSUQgdG8gYmUgdXNlZCB0byBzZWdyZWdhdGUgdGhlIHBvcnRzCiAtIG1hYy1hZGRyZXNzCQk6IFNlZSBldGhlcm5ldC50eHQgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKy0gcGh5X2lkCQk6IFNwZWNpZmllcyBzbGF2ZSBwaHkgaWQKIC0gcGh5LWhhbmRsZQkJOiBTZWUgZXRoZXJuZXQudHh0IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CiAKIFNsYXZlIHN1Yi1ub2RlczoKIC0gZml4ZWQtbGluawkJOiBTZWUgZml4ZWQtbGluay50eHQgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKLQkJCSAgRWl0aGVyIHRoZSBwcm9wZXJ0aWVzIHBoeV9pZCBhbmQgcGh5LW1vZGUsCi0JCQkgIG9yIHRoZSBzdWItbm9kZSBmaXhlZC1saW5rIGNhbiBiZSBzcGVjaWZpZWQKKwkJCSAgRWl0aGVyIHRoZSBwcm9wZXJ0eSBwaHlfaWQsIG9yIHRoZSBzdWItbm9kZQorCQkJICBmaXhlZC1saW5rIGNhbiBiZSBzcGVjaWZpZWQKIAogTm90ZTogInRpLGh3bW9kcyIgZmllbGQgaXMgdXNlZCB0byBmZXRjaCB0aGUgYmFzZSBhZGRyZXNzIGFuZCBpcnEKIHJlc291cmNlcyBmcm9tIFRJLCBvbWFwIGh3bW9kIGRhdGEgYmFzZSBkdXJpbmcgZGV2aWNlIHJlZ2lzdHJhdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWFydmVsbC1hcm1hZGEtMzcwLW5ldGEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tYXJ2ZWxsLWFybWFkYS0zNzAtbmV0YS50eHQKaW5kZXggZjVhOGNhMi4uYWVlYTUwYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tYXJ2ZWxsLWFybWFkYS0zNzAtbmV0YS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tYXJ2ZWxsLWFybWFkYS0zNzAtbmV0YS50eHQKQEAgLTgsNiArOCwxMSBAQAogLSBwaHktbW9kZTogU2VlIGV0aGVybmV0LnR4dCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeQogLSBjbG9ja3M6IGEgcG9pbnRlciB0byB0aGUgcmVmZXJlbmNlIGNsb2NrIGZvciB0aGlzIGRldmljZS4KIAorT3B0aW9uYWwgcHJvcGVydGllczoKKy0gdHgtY3N1bS1saW1pdDogbWF4aW11bSBtdHUgc3VwcG9ydGVkIGJ5IHBvcnQgdGhhdCBhbGxvdyBUWCBjaGVja3N1bS4KKyAgVmFsdWUgaXMgcHJlc2VudGVkIGluIGJ5dGVzLiBJZiBub3QgdXNlZCwgYnkgZGVmYXVsdCAxNjAwQiBpcyBzZXQgZm9yCisgICJtYXJ2ZWxsLGFybWFkYS0zNzAtbmV0YSIgYW5kIDk4MDBCIGZvciBvdGhlcnMuCisKIEV4YW1wbGU6CiAKIGV0aGVybmV0QGQwMDcwMDAwIHsKQEAgLTE1LDYgKzIwLDcgQEAKIAlyZWcgPSA8MHhkMDA3MDAwMCAweDI1MDA+OwogCWludGVycnVwdHMgPSA8OD47CiAJY2xvY2tzID0gPCZnYXRlX2NsayA0PjsKKwl0eC1jc3VtLWxpbWl0ID0gPDk4MDA+CiAJc3RhdHVzID0gIm9rYXkiOwogCXBoeSA9IDwmcGh5MD47CiAJcGh5LW1vZGUgPSAicmdtaWktaWQiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2FrNDYxMy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvYWs0NjEzLnR4dAppbmRleCAxNWE5MTk1Li4xNzgzZjllIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvYWs0NjEzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvYWs0NjEzLnR4dApAQCAtNyw2ICs3LDE2IEBACiAtIGNvbXBhdGlibGUgOiAiYXNhaGkta2FzZWksYWs0NjEzIgogLSByZWcgOiBUaGUgY2hpcCBzZWxlY3QgbnVtYmVyIG9uIHRoZSBJMkMgYnVzCiAKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGFzYWhpLWthc2VpLGluMS1zaW5nbGUtZW5kCTogQm9vbGVhbi4gSW5kaWNhdGUgaW5wdXQgLyBvdXRwdXQgcGlucyBhcmUgc2luZ2xlLWVuZGVkLgorLSBhc2FoaS1rYXNlaSxpbjItc2luZ2xlLWVuZAkgIHJhdGhlciB0aGFuIGRpZmZlcmVudGlhbC4KKy0gYXNhaGkta2FzZWksb3V0MS1zaW5nbGUtZW5kCistIGFzYWhpLWthc2VpLG91dDItc2luZ2xlLWVuZAorLSBhc2FoaS1rYXNlaSxvdXQzLXNpbmdsZS1lbmQKKy0gYXNhaGkta2FzZWksb3V0NC1zaW5nbGUtZW5kCistIGFzYWhpLWthc2VpLG91dDUtc2luZ2xlLWVuZAorLSBhc2FoaS1rYXNlaSxvdXQ2LXNpbmdsZS1lbmQKKwogRXhhbXBsZToKIAogJmkyYyB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvYXRtZWwtY2xhc3NkLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9hdG1lbC1jbGFzc2QudHh0CmluZGV4IDAwMTg0NTEuLjU0OWU3MDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9hdG1lbC1jbGFzc2QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9hdG1lbC1jbGFzc2QudHh0CkBAIC0xNiw2ICsxNiwxMCBAQAogCVJlcXVpcmVkIGVsZW1lbnRzOiAicGNsayIsICJnY2xrIiBhbmQgImFjbGsiLgogLSBjbG9ja3MKIAlQbGVhc2UgcmVmZXIgdG8gY2xvY2stYmluZGluZ3MudHh0LgorLSBhc3NpZ25lZC1jbG9ja3MKKwlTaG91bGQgYmUgPCZjbGFzc2RfZ2Nsaz4uCistIGFzc2lnbmVkLWNsb2NrLXBhcmVudHMKKwlTaG91bGQgYmUgPCZhdWRpb19wbGxfcG1jPi4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKIC0gcGluY3RybC1uYW1lcywgcGluY3RybC0wCkBAIC00Myw2ICs0Nyw4IEBACiAJCWRtYS1uYW1lcyA9ICJ0eCI7CiAJCWNsb2NrcyA9IDwmY2xhc3NkX2Nsaz4sIDwmY2xhc3NkX2djbGs+LCA8JmF1ZGlvX3BsbF9wbWM+OwogCQljbG9jay1uYW1lcyA9ICJwY2xrIiwgImdjbGsiLCAiYWNsayI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xhc3NkX2djbGs+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZhdWRpb19wbGxfcG1jPjsKIAogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfY2xhc3NkX2RlZmF1bHQ+OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2F0bWVsLXBkbWljLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9hdG1lbC1wZG1pYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4NzVmMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9hdG1lbC1wZG1pYy50eHQKQEAgLTAsMCArMSw1NSBAQAorKiBBdG1lbCBQRE1JQyBkcml2ZXIgdW5kZXIgQUxTQSBTb0MgYXJjaGl0ZWN0dXJlCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUKKwlTaG91bGQgYmUgImF0bWVsLHNhbWE1ZDItcGRtaWMiLgorLSByZWcKKwlTaG91bGQgY29udGFpbiBQRE1JQyByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aC4KKy0gaW50ZXJydXB0cworCVNob3VsZCBjb250YWluIHRoZSBJUlEgbGluZSBmb3IgdGhlIFBETUlDLgorLSBkbWFzCisJT25lIERNQSBzcGVjaWZpZXJzIGFzIGRlc2NyaWJlZCBpbiBhdG1lbC1kbWEudHh0IGFuZCBkbWEudHh0IGZpbGVzLgorLSBkbWEtbmFtZXMKKwlNdXN0IGJlICJyeCIuCistIGNsb2NrLW5hbWVzCisJUmVxdWlyZWQgZWxlbWVudHM6CisJLSAicGNsayIJcGVyaXBoZXJhbCBjbG9jaworCS0gImdjbGsiCWdlbmVyYXRlZCBjbG9jaworLSBjbG9ja3MKKwlNdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIGVhY2ggcmVxdWlyZWQgZW50cnkgaW4gY2xvY2stbmFtZXMuCisJUGxlYXNlIHJlZmVyIHRvIGNsb2NrLWJpbmRpbmdzLnR4dC4KKy0gYXRtZWwsbWljLW1pbi1mcmVxCisJVGhlIG1pbmltYWwgZnJlcXVlbmN5IHRoYXQgdGhlIG1pY3Bob25lIHN1cHBvcnRzLgorLSBhdG1lbCxtaWMtbWF4LWZyZXEKKwlUaGUgbWF4aW1hbCBmcmVxdWVuY3kgdGhhdCB0aGUgbWljcGhvbmUgc3VwcG9ydHMuCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIHBpbmN0cmwtbmFtZXMsIHBpbmN0cmwtMAorCVBsZWFzZSByZWZlciB0byBwaW5jdHJsLWJpbmRpbmdzLnR4dC4KKy0gYXRtZWwsbW9kZWwKKwlUaGUgdXNlci12aXNpYmxlIG5hbWUgb2YgdGhpcyBzb3VuZCBjYXJkLgorCVRoZSBkZWZhdWx0IHZhbHVlIGlzICJQRE1JQyIuCistIGF0bWVsLG1pYy1vZmZzZXQKKwlUaGUgb2Zmc2V0IHRoYXQgc2hvdWxkIGJlIGFkZGVkLgorCVRoZSByYW5nZSBpcyBmcm9tIC0zMjc2OCB0byAzMjc2Ny4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLgorCitFeGFtcGxlOgorCXBkbWljQGY4MDE4MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDItcGRtaWMiOworCQkJCXJlZyA9IDwweGY4MDE4MDAwIDB4MTI0PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQ4IElSUV9UWVBFX0xFVkVMX0hJR0ggNz47CisJCQkJZG1hcyA9IDwmZG1hMAorCQkJCQkoQVQ5MV9YRE1BQ19EVF9NRU1fSUYoMCkgfCBBVDkxX1hETUFDX0RUX1BFUl9JRigxKQorCQkJCQl8IEFUOTFfWERNQUNfRFRfUEVSSUQoNTApKT47CisJCQkJZG1hLW5hbWVzID0gInJ4IjsKKwkJCQljbG9ja3MgPSA8JnBkbWljX2Nsaz4sIDwmcGRtaWNfZ2Nsaz47CisJCQkJY2xvY2stbmFtZXMgPSAicGNsayIsICJnY2xrIjsKKworCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3BkbWljX2RlZmF1bHQ+OworCQkJCWF0bWVsLG1vZGVsID0gIlBETUlDIEAgc2FtYTVkMl94cGxhaW5lZCI7CisJCQkJYXRtZWwsbWljLW1pbi1mcmVxID0gPDEwMDAwMDA+OworCQkJCWF0bWVsLG1pYy1tYXgtZnJlcSA9IDwzMjQ2MDAwPjsKKwkJCQlhdG1lbCxtaWMtb2Zmc2V0ID0gPDB4MD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9kYTcyMTgudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2RhNzIxOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNWE3MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9kYTcyMTgudHh0CkBAIC0wLDAgKzEsMTA0IEBACitEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTcyMTggQXVkaW8gQ29kZWMgYmluZGluZ3MKKworREE3MjE4IGlzIGFuIGF1ZGlvIGNvZGVjIHdpdGggSFAgZGV0ZWN0IGZlYXR1cmUuCisKKz09PT09PQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlIDogU2hvdWxkIGJlICJkbGcsZGE3MjE3IiBvciAiZGxnLGRhNzIxOCIKKy0gcmVnOiBTcGVjaWZpZXMgdGhlIEkyQyBzbGF2ZSBhZGRyZXNzCisKKy0gVkRELXN1cHBseTogVkREIHBvd2VyIHN1cHBseSBmb3IgdGhlIGRldmljZQorLSBWRERNSUMtc3VwcGx5OiBWRERNSUMgcG93ZXIgc3VwcGx5IGZvciB0aGUgZGV2aWNlCistIFZERElPLXN1cHBseTogVkRESU8gcG93ZXIgc3VwcGx5IGZvciB0aGUgZGV2aWNlCisgIChTZWUgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0IGZvciBmdXJ0aGVyCisgICBpbmZvcm1hdGlvbiByZWxhdGluZyB0byByZWd1bGF0b3JzKQorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBpbnRlcnJ1cHQtcGFyZW50OiBTcGVjaWZpZXMgdGhlIHBoYW5kbGUgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRvIHdoaWNoCisgIHRoZSBJUlFzIGZyb20gREE3MjE4IGFyZSBkZWxpdmVyZWQgdG8uCistIGludGVycnVwdHM6IElSUSBsaW5lIGluZm8gZm9yIERBNzIxOCBjaGlwLgorICAoU2VlIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pbnRlcnJ1cHRzLnR4dCBmb3IKKyAgIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaW50ZXJydXB0IHByb3BlcnRpZXMpCistIGludGVycnVwdC1uYW1lcyA6IE5hbWUgYXNzb2NpYXRlZCB3aXRoIGludGVycnVwdCBsaW5lLiBTaG91bGQgYmUgIndha2V1cCIgaWYKKyAgaW50ZXJydXB0IGlzIHRvIGJlIHVzZWQgdG8gd2FrZSBzeXN0ZW0sIG90aGVyd2lzZSAiaXJxIiBzaG91bGQgYmUgdXNlZC4KKy0gd2FrZXVwLXNvdXJjZTogRmxhZyB0byBpbmRpY2F0ZSB0aGlzIGRldmljZSBjYW4gd2FrZSBzeXN0ZW0gKHN1c3BlbmQvcmVzdW1lKS4KKworLSBjbG9ja3MgOiBwaGFuZGxlIGFuZCBjbG9jayBzcGVjaWZpZXIgZm9yIGNvZGVjIE1DTEsuCistIGNsb2NrLW5hbWVzIDogQ2xvY2sgbmFtZSBzdHJpbmcgZm9yICdjbG9ja3MnIGF0dHJpYnV0ZSwgc2hvdWxkIGJlICJtY2xrIi4KKworLSBkbGcsbWljYmlhczEtbHZsLW1pbGxpdm9sdCA6IFZvbHRhZ2UgKG1WKSBmb3IgTWljIEJpYXMgMQorCVs8MTIwMD4sIDwxNjAwPiwgPDE4MDA+LCA8MjAwMD4sIDwyMjAwPiwgPDI0MDA+LCA8MjYwMD4sIDwyODAwPiwgPDMwMDA+XQorLSBkbGcsbWljYmlhczItbHZsLW1pbGxpdm9sdCA6IFZvbHRhZ2UgKG1WKSBmb3IgTWljIEJpYXMgMgorCVs8MTIwMD4sIDwxNjAwPiwgPDE4MDA+LCA8MjAwMD4sIDwyMjAwPiwgPDI0MDA+LCA8MjYwMD4sIDwyODAwPiwgPDMwMDA+XQorLSBkbGcsbWljMS1hbXAtaW4tc2VsIDogTWljMSBpbnB1dCBzb3VyY2UgdHlwZQorCVsiZGlmZiIsICJzZV9wIiwgInNlX24iXQorLSBkbGcsbWljMi1hbXAtaW4tc2VsIDogTWljMiBpbnB1dCBzb3VyY2UgdHlwZQorCVsiZGlmZiIsICJzZV9wIiwgInNlX24iXQorLSBkbGcsZG1pYzEtZGF0YS1zZWwgOiBETUlDMSBjaGFubmVsIHNlbGVjdCBiYXNlZCBvbiBjbG9jayBlZGdlLgorCVsibHJpc2VfcmZhbGwiLCAibGZhbGxfcnJpc2UiXQorLSBkbGcsZG1pYzEtc2FtcGxlcGhhc2UgOiBXaGVuIHRvIHNhbXBsZSBhdWRpbyBmcm9tIERNSUMxLgorCVsib25fY2xrZWRnZSIsICJiZXR3ZWVuX2Nsa2VkZ2UiXQorLSBkbGcsZG1pYzEtY2xrcmF0ZS1oeiA6IERNaWMxIGNsb2NrIGZyZXF1ZW5jeSAoSHopLgorCVs8MTUwMDAwMD4sIDwzMDAwMDAwPl0KKy0gZGxnLGRtaWMyLWRhdGEtc2VsIDogRE1pYzIgY2hhbm5lbCBzZWxlY3QgYmFzZWQgb24gY2xvY2sgZWRnZS4KKwlbImxyaXNlX3JmYWxsIiwgImxmYWxsX3JyaXNlIl0KKy0gZGxnLGRtaWMyLXNhbXBsZXBoYXNlIDogV2hlbiB0byBzYW1wbGUgYXVkaW8gZnJvbSBETWljMi4KKwlbIm9uX2Nsa2VkZ2UiLCAiYmV0d2Vlbl9jbGtlZGdlIl0KKy0gZGxnLGRtaWMyLWNsa3JhdGUtaHogOiBETWljMiBjbG9jayBmcmVxdWVuY3kgKEh6KS4KKwlbPDE1MDAwMDA+LCA8MzAwMDAwMD5dCistIGRsZyxocC1kaWZmLXNpbmdsZS1zdXBwbHkgOiBCb29sZWFuIGZsYWcsIHVzZSBzaW5nbGUgc3VwcGx5IGZvciBIUAorCQkJICAgICAgKERBNzIxNyBvbmx5KQorCis9PT09PT0KKworT3B0aW9uYWwgQ2hpbGQgbm9kZSAtICdkYTcyMThfaHBsZGV0JyAoREE3MjE4IG9ubHkpOgorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBkbGcsamFjay1yYXRlLXVzIDogVGltZSBiZXR3ZWVuIGphY2sgZGV0ZWN0IG1lYXN1cmVtZW50cyAodXMpCisJWzw1PiwgPDEwPiwgPDIwPiwgPDQwPiwgPDgwPiwgPDE2MD4sIDwzMjA+LCA8NjQwPl0KKy0gZGxnLGphY2stZGVib3VuY2UgOiBOdW1iZXIgb2YgZGVib3VuY2UgbWVhc3VyZW1lbnRzIHRha2VuIGZvciBqYWNrIGRldGVjdAorCVs8MD4sIDwyPiwgPDM+LCA8ND5dCistIGRsZyxqYWNrLXRocmVzaG9sZC1wY3QgOiBUaHJlc2hvbGQgbGV2ZWwgZm9yIGphY2sgZGV0ZWN0aW9uICglIG9mIFZERCkKKwlbPDg0PiwgPDg4PiwgPDkyPiwgPDk2Pl0KKy0gZGxnLGNvbXAtaW52IDogQm9vbGVhbiBmbGFnLCBpbnZlcnQgY29tcGFyYXRvciBvdXRwdXQKKy0gZGxnLGh5c3QgOiBCb29sZWFuIGZsYWcsIGVuYWJsZSBoeXN0ZXJlc2lzCistIGRsZyxkaXNjaGFyZ2UgOiBCb29sZWFuIGZsYWcsIGF1dG8gZGlzY2hhcmdlIG9mIE1pYyBCaWFzIG9uIGphY2sgcmVtb3ZhbAorCis9PT09PT0KKworRXhhbXBsZToKKworCWNvZGVjOiBkYTcyMThAMWEgeworCQljb21wYXRpYmxlID0gImRsZyxkYTcyMTgiOworCQlyZWcgPSA8MHgxYT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW82PjsKKwkJaW50ZXJydXB0cyA9IDwxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJd2FrZXVwLXNvdXJjZTsKKworCQlWREQtc3VwcGx5ID0gPCZyZWdfYXVkaW8+OworCQlWRERNSUMtc3VwcGx5ID0gPCZyZWdfYXVkaW8+OworCQlWRERJTy1zdXBwbHkgPSA8JnJlZ19hdWRpbz47CisKKwkJY2xvY2tzID0gPCZjbGtzIDIwMT47CisJCWNsb2NrLW5hbWVzID0gIm1jbGsiOworCisJCWRsZyxtaWNiaWFzMS1sdmwtbWlsbGl2b2x0ID0gPDI2MDA+OworCQlkbGcsbWljYmlhczItbHZsLW1pbGxpdm9sdCA9IDwyNjAwPjsKKwkJZGxnLG1pYzEtYW1wLWluLXNlbCA9ICJkaWZmIjsKKwkJZGxnLG1pYzItYW1wLWluLXNlbCA9ICJkaWZmIjsKKworCQlkbGcsZG1pYzEtZGF0YS1zZWwgPSAibHJpc2VfcmZhbGwiOworCQlkbGcsZG1pYzEtc2FtcGxlcGhhc2UgPSAib25fY2xrZWRnZSI7CisJCWRsZyxkbWljMS1jbGtyYXRlLWh6ID0gPDMwMDAwMDA+OworCQlkbGcsZG1pYzItZGF0YS1zZWwgPSAibHJpc2VfcmZhbGwiOworCQlkbGcsZG1pYzItc2FtcGxlcGhhc2UgPSAib25fY2xrZWRnZSI7CisJCWRsZyxkbWljMi1jbGtyYXRlLWh6ID0gPDMwMDAwMDA+OworCisJCWRhNzIxOF9ocGxkZXQgeworCQkJZGxnLGphY2stcmF0ZS11cyA9IDw0MD47CisJCQlkbGcsamFjay1kZWJvdW5jZSA9IDwyPjsKKwkJCWRsZyxqYWNrLXRocmVzaG9sZC1wY3QgPSA8ODQ+OworCQkJZGxnLGh5c3Q7CisJCX07CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9kYTcyMTkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2RhNzIxOS50eHQKaW5kZXggMWI3MDMwOS4uY2Y2MTY4MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2RhNzIxOS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2RhNzIxOS50eHQKQEAgLTI4LDEzICsyOCwxNSBAQAogLSBjbG9ja3MgOiBwaGFuZGxlIGFuZCBjbG9jayBzcGVjaWZpZXIgZm9yIGNvZGVjIE1DTEsuCiAtIGNsb2NrLW5hbWVzIDogQ2xvY2sgbmFtZSBzdHJpbmcgZm9yICdjbG9ja3MnIGF0dHJpYnV0ZSwgc2hvdWxkIGJlICJtY2xrIi4KIAotLSBkbGcsbGRvLWx2bCA6IFJlcXVpcmVkIGludGVybmFsIExETyB2b2x0YWdlIChtVikgbGV2ZWwgZm9yIGRpZ2l0YWwgZW5naW5lCi0JWzwxMDUwPiwgPDExMDA+LCA8MTIwMD4sIDwxNDAwPl0KIC0gZGxnLG1pY2JpYXMtbHZsIDogVm9sdGFnZSAobVYpIGZvciBNaWMgQmlhcwotCVs8MTgwMD4sIDwyMDAwPiwgPDIyMDA+LCA8MjQwMD4sIDwyNjAwPl0KKwlbPDE2MDA+LCA8MTgwMD4sIDwyMDAwPiwgPDIyMDA+LCA8MjQwMD4sIDwyNjAwPl0KIC0gZGxnLG1pYy1hbXAtaW4tc2VsIDogTWljIGlucHV0IHNvdXJjZSB0eXBlCiAJWyJkaWZmIiwgInNlX3AiLCAic2VfbiJdCiAKK0RlcHJlY2F0ZWQgcHJvcGVydGllczoKKy0gZGxnLGxkby1sdmwgOiBSZXF1aXJlZCBpbnRlcm5hbCBMRE8gdm9sdGFnZSAobVYpIGxldmVsIGZvciBkaWdpdGFsIGVuZ2luZQorICAoTERPIHVuYXZhaWxhYmxlIGluIHByb2R1Y3Rpb24gSFcgc28gcHJvcGVydHkgbm8gbG9uZ2VyIHJlcXVpcmVkKS4KKwogPT09PT09CiAKIENoaWxkIG5vZGUgLSAnZGE3MjE5X2FhZCc6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvZnNsLGFzcmMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ZzbCxhc3JjLnR4dAppbmRleCBiOTMzNjJhLi4zZTI2YTk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvZnNsLGFzcmMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9mc2wsYXNyYy50eHQKQEAgLTI1LDYgKzI1LDExIEBACiAJIm1lbSIJCSAgUGVyaXBoZXJhbCBhY2Nlc3MgY2xvY2sgdG8gYWNjZXNzIHJlZ2lzdGVycy4KIAkiaXBnIgkJICBQZXJpcGhlcmFsIGNsb2NrIHRvIGRyaXZlciBtb2R1bGUuCiAJImFzcmNrXzwwLWY+IgkgIENsb2NrIHNvdXJjZXMgZm9yIGlucHV0IGFuZCBvdXRwdXQgY2xvY2suCisJInNwYmEiCQkgIFRoZSBzcGJhIGNsb2NrIGlzIHJlcXVpcmVkIHdoZW4gQVNSQyBpcyBwbGFjZWQgYXMgYQorCQkJICBidXMgc2xhdmUgb2YgdGhlIFNoYXJlZCBQZXJpcGhlcmFsIEJ1cyBhbmQgd2hlbiB0d28KKwkJCSAgb3IgbW9yZSBidXMgbWFzdGVycyAoQ1BVLCBETUEgb3IgRFNQKSB0cnkgdG8gYWNjZXNzCisJCQkgIGl0LiBUaGlzIHByb3BlcnR5IGlzIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgU29DCisJCQkgIGRlc2lnbi4KIAogICAgLSBiaWctZW5kaWFuCQk6IElmIHRoaXMgcHJvcGVydHkgaXMgYWJzZW50LCB0aGUgbGl0dGxlIGVuZGlhbiBtb2RlCiAJCQkgIHdpbGwgYmUgaW4gdXNlIGFzIGRlZmF1bHQuIE90aGVyd2lzZSwgdGhlIGJpZyBlbmRpYW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9mc2wsZXNhaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvZnNsLGVzYWkudHh0CmluZGV4IGQzYjZiNWYuLmNkM2VlNWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9mc2wsZXNhaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ZzbCxlc2FpLnR4dApAQCAtMjcsNiArMjcsMTEgQEAKIAkJCSAgZGVyaXZlIEhDSywgU0NLIGFuZCBGUy4KIAkiZnN5cyIJCSAgVGhlIHN5c3RlbSBjbG9jayBkZXJpdmVkIGZyb20gYWhiIGNsb2NrIHVzZWQgdG8KIAkJCSAgZGVyaXZlIEhDSywgU0NLIGFuZCBGUy4KKwkic3BiYSIJCSAgVGhlIHNwYmEgY2xvY2sgaXMgcmVxdWlyZWQgd2hlbiBFU0FJIGlzIHBsYWNlZCBhcyBhCisJCQkgIGJ1cyBzbGF2ZSBvZiB0aGUgU2hhcmVkIFBlcmlwaGVyYWwgQnVzIGFuZCB3aGVuIHR3bworCQkJICBvciBtb3JlIGJ1cyBtYXN0ZXJzIChDUFUsIERNQSBvciBEU1ApIHRyeSB0byBhY2Nlc3MKKwkJCSAgaXQuIFRoaXMgcHJvcGVydHkgaXMgb3B0aW9uYWwgZGVwZW5kaW5nIG9uIHRoZSBTb0MKKwkJCSAgZGVzaWduLgogCiAgIC0gZnNsLGZpZm8tZGVwdGgJOiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZQogCQkJICBGSUZPcy4gVGhpcyBudW1iZXIgaXMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSBmb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9mc2wsc3BkaWYudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ZzbCxzcGRpZi50eHQKaW5kZXggYjVlZTMyZS4uNGNhMzlkZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ZzbCxzcGRpZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ZzbCxzcGRpZi50eHQKQEAgLTI3LDYgKzI3LDExIEBACiAJCQkgIFRyYW5zY2VpdmVyIENsb2NrIERpYWdyYW0iIG9mIFNvQyByZWZlcmVuY2UgbWFudWFsLgogCQkJICBJdCBjYW4gYWxzbyBiZSByZWZlcnJlZCB0byBUeENsa19Tb3VyY2UgYml0IG9mCiAJCQkgIHJlZ2lzdGVyIFNQRElGX1NUQy4KKwkic3BiYSIJCSAgVGhlIHNwYmEgY2xvY2sgaXMgcmVxdWlyZWQgd2hlbiBTUERJRiBpcyBwbGFjZWQgYXMgYQorCQkJICBidXMgc2xhdmUgb2YgdGhlIFNoYXJlZCBQZXJpcGhlcmFsIEJ1cyBhbmQgd2hlbiB0d28KKwkJCSAgb3IgbW9yZSBidXMgbWFzdGVycyAoQ1BVLCBETUEgb3IgRFNQKSB0cnkgdG8gYWNjZXNzCisJCQkgIGl0LiBUaGlzIHByb3BlcnR5IGlzIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB0aGUgU29DCisJCQkgIGRlc2lnbi4KIAogICAgLSBiaWctZW5kaWFuCQk6IElmIHRoaXMgcHJvcGVydHkgaXMgYWJzZW50LCB0aGUgbmF0aXZlIGVuZGlhbiBtb2RlCiAJCQkgIHdpbGwgYmUgaW4gdXNlIGFzIGRlZmF1bHQsIG9yIHRoZSBiaWcgZW5kaWFuIG1vZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbWcsaTJzLWluLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbWcsaTJzLWluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjMyNjVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ltZyxpMnMtaW4udHh0CkBAIC0wLDAgKzEsNDcgQEAKK0ltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBJMlMgSW5wdXQgQ29udHJvbGxlcgorCitSZXF1aXJlZCBQcm9wZXJ0aWVzOgorCisgIC0gY29tcGF0aWJsZSA6IENvbXBhdGlibGUgbGlzdCwgbXVzdCBjb250YWluICJpbWcsaTJzLWluIgorCisgIC0gI3NvdW5kLWRhaS1jZWxscyA6IE11c3QgYmUgZXF1YWwgdG8gMAorCisgIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZQorCisgIC0gY2xvY2tzIDogQ29udGFpbnMgYW4gZW50cnkgZm9yIGVhY2ggZW50cnkgaW4gY2xvY2stbmFtZXMKKworICAtIGNsb2NrLW5hbWVzIDogTXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZW50cnk6CisJInN5cyIJVGhlIHN5c3RlbSBjbG9jaworCisgIC0gZG1hczogQ29udGFpbnMgYW4gZW50cnkgZm9yIGVhY2ggZW50cnkgaW4gZG1hLW5hbWVzLgorCisgIC0gZG1hLW5hbWVzOiBNdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBlbnRyeToKKwkicngiCVNpbmdsZSBETUEgY2hhbm5lbCB1c2VkIGJ5IGFsbCBhY3RpdmUgSTJTIGNoYW5uZWxzCisKKyAgLSBpbWcsaTJzLWNoYW5uZWxzIDogTnVtYmVyIG9mIEkyUyBjaGFubmVscyBpbnN0YW50aWF0ZWQgaW4gdGhlIEkyUyBpbiBibG9jaworCitPcHRpb25hbCBQcm9wZXJ0aWVzOgorCisgIC0gaW50ZXJydXB0cyA6IENvbnRhaW5zIHRoZSBJMlMgaW4gaW50ZXJydXB0cy4gRGVwZW5kaW5nIG9uCisJdGhlIGNvbmZpZ3VyYXRpb24sIHRoZXJlIG1heSBiZSBubyBpbnRlcnJ1cHRzLCBvbmUgaW50ZXJydXB0LAorCW9yIGFuIGludGVycnVwdCBwZXIgSTJTIGNoYW5uZWwuIEZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcworCW9uZSBpbnRlcnJ1cHQgcGVyIGNoYW5uZWwsIHRoZSBpbnRlcnJ1cHRzIHNob3VsZCBiZSBsaXN0ZWQKKwlpbiBhc2NlbmRpbmcgY2hhbm5lbCBvcmRlcgorCisgIC0gcmVzZXRzOiBDb250YWlucyBhIHBoYW5kbGUgdG8gdGhlIEkyUyBpbiByZXNldCBzaWduYWwKKworICAtIHJlc2V0LW5hbWVzOiBDb250YWlucyB0aGUgcmVzZXQgc2lnbmFsIG5hbWUgInJzdCIKKworRXhhbXBsZToKKworaTJzX2luOiBpMnMtaW5AMTgxMDA4MDAgeworCWNvbXBhdGlibGUgPSAiaW1nLGkycy1pbiI7CisJcmVnID0gPDB4MTgxMDA4MDAgMHgyMDA+OworCWludGVycnVwdHMgPSA8R0lDX1NIQVJFRCA3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCWRtYXMgPSA8Jm1kYyAzMCAweGZmZmZmZmZmIDA+OworCWRtYS1uYW1lcyA9ICJyeCI7CisJY2xvY2tzID0gPCZjcl9wZXJpcGggU1lTX0NMS19JMlNfSU4+OworCWNsb2NrLW5hbWVzID0gInN5cyI7CisJaW1nLGkycy1jaGFubmVscyA9IDw2PjsKKwkjc291bmQtZGFpLWNlbGxzID0gPDA+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbWcsaTJzLW91dC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvaW1nLGkycy1vdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTk0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvaW1nLGkycy1vdXQudHh0CkBAIC0wLDAgKzEsNTEgQEAKK0ltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBJMlMgT3V0cHV0IENvbnRyb2xsZXIKKworUmVxdWlyZWQgUHJvcGVydGllczoKKworICAtIGNvbXBhdGlibGUgOiBDb21wYXRpYmxlIGxpc3QsIG11c3QgY29udGFpbiAiaW1nLGkycy1vdXQiCisKKyAgLSAjc291bmQtZGFpLWNlbGxzIDogTXVzdCBiZSBlcXVhbCB0byAwCisKKyAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCisKKyAgLSBjbG9ja3MgOiBDb250YWlucyBhbiBlbnRyeSBmb3IgZWFjaCBlbnRyeSBpbiBjbG9jay1uYW1lcworCisgIC0gY2xvY2stbmFtZXMgOiBNdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBlbnRyaWVzOgorCSJzeXMiCVRoZSBzeXN0ZW0gY2xvY2sKKwkicmVmIglUaGUgcmVmZXJlbmNlIGNsb2NrCisKKyAgLSBkbWFzOiBDb250YWlucyBhbiBlbnRyeSBmb3IgZWFjaCBlbnRyeSBpbiBkbWEtbmFtZXMuCisKKyAgLSBkbWEtbmFtZXM6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJ5OgorCSJ0eCIJU2luZ2xlIERNQSBjaGFubmVsIHVzZWQgYnkgYWxsIGFjdGl2ZSBJMlMgY2hhbm5lbHMKKworICAtIGltZyxpMnMtY2hhbm5lbHMgOiBOdW1iZXIgb2YgSTJTIGNoYW5uZWxzIGluc3RhbnRpYXRlZCBpbiB0aGUgSTJTIG91dCBibG9jaworCisgIC0gcmVzZXRzOiBDb250YWlucyBhIHBoYW5kbGUgdG8gdGhlIEkyUyBvdXQgcmVzZXQgc2lnbmFsCisKKyAgLSByZXNldC1uYW1lczogQ29udGFpbnMgdGhlIHJlc2V0IHNpZ25hbCBuYW1lICJyc3QiCisKK09wdGlvbmFsIFByb3BlcnRpZXM6CisKKyAgLSBpbnRlcnJ1cHRzIDogQ29udGFpbnMgdGhlIEkyUyBvdXQgaW50ZXJydXB0cy4gRGVwZW5kaW5nIG9uCisJdGhlIGNvbmZpZ3VyYXRpb24sIHRoZXJlIG1heSBiZSBubyBpbnRlcnJ1cHRzLCBvbmUgaW50ZXJydXB0LAorCW9yIGFuIGludGVycnVwdCBwZXIgSTJTIGNoYW5uZWwuIEZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcworCW9uZSBpbnRlcnJ1cHQgcGVyIGNoYW5uZWwsIHRoZSBpbnRlcnJ1cHRzIHNob3VsZCBiZSBsaXN0ZWQKKwlpbiBhc2NlbmRpbmcgY2hhbm5lbCBvcmRlcgorCitFeGFtcGxlOgorCitpMnNfb3V0OiBpMnMtb3V0QDE4MTAwQTAwIHsKKwljb21wYXRpYmxlID0gImltZyxpMnMtb3V0IjsKKwlyZWcgPSA8MHgxODEwMEEwMCAweDIwMD47CisJaW50ZXJydXB0cyA9IDxHSUNfU0hBUkVEIDEzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCWRtYXMgPSA8Jm1kYyAyMyAweGZmZmZmZmZmIDA+OworCWRtYS1uYW1lcyA9ICJ0eCI7CisJY2xvY2tzID0gPCZjcl9wZXJpcGggU1lTX0NMS19JMlNfT1VUPiwKKwkJIDwmY2xrX2NvcmUgQ0xLX0kyUz47CisJY2xvY2stbmFtZXMgPSAic3lzIiwgInJlZiI7CisJaW1nLGkycy1jaGFubmVscyA9IDw2PjsKKwlyZXNldHMgPSA8JnBpc3RhY2hpb19yZXNldCBQSVNUQUNISU9fUkVTRVRfSTJTX09VVD47CisJcmVzZXQtbmFtZXMgPSAicnN0IjsKKwkjc291bmQtZGFpLWNlbGxzID0gPDA+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbWcscGFyYWxsZWwtb3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbWcscGFyYWxsZWwtb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzAxNWQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ltZyxwYXJhbGxlbC1vdXQudHh0CkBAIC0wLDAgKzEsNDQgQEAKK0ltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBQYXJhbGxlbCBPdXRwdXQgQ29udHJvbGxlcgorCitSZXF1aXJlZCBQcm9wZXJ0aWVzOgorCisgIC0gY29tcGF0aWJsZSA6IENvbXBhdGlibGUgbGlzdCwgbXVzdCBjb250YWluICJpbWcscGFyYWxsZWwtb3V0Ii4KKworICAtICNzb3VuZC1kYWktY2VsbHMgOiBNdXN0IGJlIGVxdWFsIHRvIDAKKworICAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UuCisKKyAgLSBkbWFzOiBDb250YWlucyBhbiBlbnRyeSBmb3IgZWFjaCBlbnRyeSBpbiBkbWEtbmFtZXMuCisKKyAgLSBkbWEtbmFtZXM6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJ5OgorCSJ0eCIKKworICAtIGNsb2NrcyA6IENvbnRhaW5zIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgorCisgIC0gY2xvY2stbmFtZXMgOiBJbmNsdWRlcyB0aGUgZm9sbG93aW5nIGVudHJpZXM6CisJInN5cyIJVGhlIHN5c3RlbSBjbG9jaworCSJyZWYiCVRoZSByZWZlcmVuY2UgY2xvY2sKKworICAtIHJlc2V0czogQ29udGFpbnMgYSBwaGFuZGxlIHRvIHRoZSBwYXJhbGxlbCBvdXQgcmVzZXQgc2lnbmFsCisKKyAgLSByZXNldC1uYW1lczogQ29udGFpbnMgdGhlIHJlc2V0IHNpZ25hbCBuYW1lICJyc3QiCisKK09wdGlvbmFsIFByb3BlcnRpZXM6CisKKyAgLSBpbnRlcnJ1cHRzIDogQ29udGFpbnMgdGhlIHBhcmFsbGVsIG91dCBpbnRlcnJ1cHQsIGlmIHByZXNlbnQKKworRXhhbXBsZToKKworcGFyYWxsZWxfb3V0OiBwYXJhbGxlbC1vdXRAMTgxMDBDMDAgeworCWNvbXBhdGlibGUgPSAiaW1nLHBhcmFsbGVsLW91dCI7CisJcmVnID0gPDB4MTgxMDBDMDAgMHgxMDA+OworCWludGVycnVwdHMgPSA8R0lDX1NIQVJFRCAxOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwlkbWFzID0gPCZtZGMgMTYgMHhmZmZmZmZmZiAwPjsKKwlkbWEtbmFtZXMgPSAidHgiOworCWNsb2NrcyA9IDwmY3JfcGVyaXBoIFNZU19DTEtfUEFVRF9PVVQ+LAorCQkgPCZjbGtfY29yZSBDTEtfQVVESU9fREFDPjsKKwljbG9jay1uYW1lcyA9ICJzeXMiLCAicmVmIjsKKwlyZXNldHMgPSA8JnBpc3RhY2hpb19yZXNldCBQSVNUQUNISU9fUkVTRVRfUFJMX09VVD47CisJcmVzZXQtbmFtZXMgPSAicnN0IjsKKwkjc291bmQtZGFpLWNlbGxzID0gPDA+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbWcscGlzdGFjaGlvLWludGVybmFsLWRhYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvaW1nLHBpc3RhY2hpby1pbnRlcm5hbC1kYWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzE4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvaW1nLHBpc3RhY2hpby1pbnRlcm5hbC1kYWMudHh0CkBAIC0wLDAgKzEsMTggQEAKK1Bpc3RhY2hpbyBpbnRlcm5hbCBEQUMgRFQgYmluZGluZ3MKKworUmVxdWlyZWQgcHJvcGVydGllczoKKworICAtIGNvbXBhdGlibGU6ICJpbWcscGlzdGFjaGlvLWludGVybmFsLWRhYyIKKworICAtIGltZyxjci10b3AgOiBNdXN0IGNvbnRhaW4gYSBwaGFuZGxlIHRvIHRoZSB0b3AgbGV2ZWwgY29udHJvbCBzeXNjb24KKwkJIG5vZGUgd2hpY2ggY29udGFpbnMgdGhlIGludGVybmFsIGRhYyBjb250cm9sIHJlZ2lzdGVycworCisgIC0gVkRELXN1cHBseSA6IERpZ2l0YWwgcG93ZXIgc3VwcGx5IHJlZ3VsYXRvciAoKzEuOFYgb3IgKzMuM1YpCisKK0V4YW1wbGVzOgorCitpbnRlcm5hbF9kYWM6IGludGVybmFsLWRhYyB7CisJY29tcGF0aWJsZSA9ICJpbWcscGlzdGFjaGlvLWludGVybmFsLWRhYyI7CisJaW1nLGNyLXRvcCA9IDwmY3JfdG9wPjsKKwlWREQtc3VwcGx5ID0gPCZzdXBwbHkzdjM+OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbWcsc3BkaWYtaW4udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ltZyxzcGRpZi1pbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiOWE4MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbWcsc3BkaWYtaW4udHh0CkBAIC0wLDAgKzEsNDEgQEAKK0ltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBTUERJRiBJbnB1dCBDb250cm9sbGVyCisKK1JlcXVpcmVkIFByb3BlcnRpZXM6CisKKyAgLSBjb21wYXRpYmxlIDogQ29tcGF0aWJsZSBsaXN0LCBtdXN0IGNvbnRhaW4gImltZyxzcGRpZi1pbiIKKworICAtICNzb3VuZC1kYWktY2VsbHMgOiBNdXN0IGJlIGVxdWFsIHRvIDAKKworICAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UKKworICAtIGRtYXM6IENvbnRhaW5zIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGRtYS1uYW1lcy4KKworICAtIGRtYS1uYW1lczogTXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZW50cnk6CisJInJ4IgorCisgIC0gY2xvY2tzIDogQ29udGFpbnMgYW4gZW50cnkgZm9yIGVhY2ggZW50cnkgaW4gY2xvY2stbmFtZXMKKworICAtIGNsb2NrLW5hbWVzIDogSW5jbHVkZXMgdGhlIGZvbGxvd2luZyBlbnRyaWVzOgorCSJzeXMiCVRoZSBzeXN0ZW0gY2xvY2sKKworT3B0aW9uYWwgUHJvcGVydGllczoKKworICAtIHJlc2V0czogU2hvdWxkIGNvbnRhaW4gYSBwaGFuZGxlIHRvIHRoZSBzcGRpZiBpbiByZXNldCBzaWduYWwsIGlmIGFueQorCisgIC0gcmVzZXQtbmFtZXM6IFNob3VsZCBjb250YWluIHRoZSByZXNldCBzaWduYWwgbmFtZSAicnN0IiwgaWYgYQorCXJlc2V0IHBoYW5kbGUgaXMgZ2l2ZW4KKworICAtIGludGVycnVwdHMgOiBDb250YWlucyB0aGUgc3BkaWYgaW4gaW50ZXJydXB0LCBpZiBwcmVzZW50CisKK0V4YW1wbGU6CisKK3NwZGlmX2luOiBzcGRpZi1pbkAxODEwMEUwMCB7CisJY29tcGF0aWJsZSA9ICJpbWcsc3BkaWYtaW4iOworCXJlZyA9IDwweDE4MTAwRTAwIDB4MTAwPjsKKwlpbnRlcnJ1cHRzID0gPEdJQ19TSEFSRUQgMjAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJZG1hcyA9IDwmbWRjIDE1IDB4ZmZmZmZmZmYgMD47CisJZG1hLW5hbWVzID0gInJ4IjsKKwljbG9ja3MgPSA8JmNyX3BlcmlwaCBTWVNfQ0xLX1NQRElGX0lOPjsKKwljbG9jay1uYW1lcyA9ICJzeXMiOworCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ltZyxzcGRpZi1vdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2ltZyxzcGRpZi1vdXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MGE1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvaW1nLHNwZGlmLW91dC50eHQKQEAgLTAsMCArMSw0NCBAQAorSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIFNQRElGIE91dHB1dCBDb250cm9sbGVyCisKK1JlcXVpcmVkIFByb3BlcnRpZXM6CisKKyAgLSBjb21wYXRpYmxlIDogQ29tcGF0aWJsZSBsaXN0LCBtdXN0IGNvbnRhaW4gImltZyxzcGRpZi1vdXQiCisKKyAgLSAjc291bmQtZGFpLWNlbGxzIDogTXVzdCBiZSBlcXVhbCB0byAwCisKKyAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCisKKyAgLSBkbWFzOiBDb250YWlucyBhbiBlbnRyeSBmb3IgZWFjaCBlbnRyeSBpbiBkbWEtbmFtZXMuCisKKyAgLSBkbWEtbmFtZXM6IE11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGVudHJ5OgorCSJ0eCIKKworICAtIGNsb2NrcyA6IENvbnRhaW5zIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgorCisgIC0gY2xvY2stbmFtZXMgOiBJbmNsdWRlcyB0aGUgZm9sbG93aW5nIGVudHJpZXM6CisJInN5cyIJVGhlIHN5c3RlbSBjbG9jaworCSJyZWYiCVRoZSByZWZlcmVuY2UgY2xvY2sKKworICAtIHJlc2V0czogQ29udGFpbnMgYSBwaGFuZGxlIHRvIHRoZSBzcGRpZiBvdXQgcmVzZXQgc2lnbmFsCisKKyAgLSByZXNldC1uYW1lczogQ29udGFpbnMgdGhlIHJlc2V0IHNpZ25hbCBuYW1lICJyc3QiCisKK09wdGlvbmFsIFByb3BlcnRpZXM6CisKKyAgLSBpbnRlcnJ1cHRzIDogQ29udGFpbnMgdGhlIHBhcmFsbGVsIG91dCBpbnRlcnJ1cHQsIGlmIHByZXNlbnQKKworRXhhbXBsZToKKworc3BkaWZfb3V0OiBzcGRpZi1vdXRAMTgxMDBEMDAgeworCWNvbXBhdGlibGUgPSAiaW1nLHNwZGlmLW91dCI7CisJcmVnID0gPDB4MTgxMDBEMDAgMHgxMDA+OworCWludGVycnVwdHMgPSA8R0lDX1NIQVJFRCAyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwlkbWFzID0gPCZtZGMgMTQgMHhmZmZmZmZmZiAwPjsKKwlkbWEtbmFtZXMgPSAidHgiOworCWNsb2NrcyA9IDwmY3JfcGVyaXBoIFNZU19DTEtfU1BESUZfT1VUPiwKKwkJIDwmY2xrX2NvcmUgQ0xLX1NQRElGPjsKKwljbG9jay1uYW1lcyA9ICJzeXMiLCAicmVmIjsKKwlyZXNldHMgPSA8JnBpc3RhY2hpb19yZXNldCBQSVNUQUNISU9fUkVTRVRfU1BESUZfT1VUPjsKKwlyZXNldC1uYW1lcyA9ICJyc3QiOworCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2lubm8tcmszMDM2LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbm5vLXJrMzAzNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4ZGU4ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9pbm5vLXJrMzAzNi50eHQKQEAgLTAsMCArMSwyMCBAQAorSW5ubyBhdWRpbyBjb2RlYyBmb3IgUkszMDM2CisKK0lubm8gYXVkaW8gY29kZWMgaXMgaW50ZWdyYXRlZCBpbnNpZGUgUkszMDM2IFNvQy4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6IFNob3VsZCBiZSAicm9ja2NoaXAscmszMDM2LWNvZGVjIi4KKy0gcmVnIDogVGhlIHJlZ2lzdGVycyBvZiBjb2RlYy4KKy0gY2xvY2stbmFtZXMgOiBTaG91bGQgYmUgImFjb2RlY19wY2xrIi4KKy0gY2xvY2tzIDogVGhlIGNsb2NrIG9mIGNvZGVjLgorLSByb2NrY2hpcCxncmYgOiBUaGUgcGhhbmRsZSBvZiBncmYgZGV2aWNlIG5vZGUuCisKK0V4YW1wbGU6CisKKwlhY29kZWM6IGFjb2RlYy1hbmFAMjAwMzAwMDAgeworCQljb21wYXRpYmxlID0gInJrMzAzNi1jb2RlYyI7CisJCXJlZyA9IDwweDIwMDMwMDAwIDB4NDAwMD47CisJCXJvY2tjaGlwLGdyZiA9IDwmZ3JmPjsKKwkJY2xvY2stbmFtZXMgPSAiYWNvZGVjX3BjbGsiOworCQljbG9ja3MgPSA8JmNydSBBQ0xLX1ZDT0RFQz47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9wY20xNzkyYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcGNtMTc5eC50eHQKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3BjbTE3OTJhLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3BjbTE3OXgudHh0CmluZGV4IDk3MGJhMWUuLjRhZTcwZDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9wY20xNzkyYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3BjbTE3OXgudHh0CkBAIC0xLDQgKzEsNCBAQAotVGV4YXMgSW5zdHJ1bWVudHMgcGNtMTc5MmEgRFQgYmluZGluZ3MKK1RleGFzIEluc3RydW1lbnRzIHBjbTE3OXggRFQgYmluZGluZ3MKIAogVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFNQSSBidXMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9yZW5lc2FzLHJzbmQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3JlbmVzYXMscnNuZC50eHQKaW5kZXggYzU3Y2JkNi4uOGVlMGZhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3JlbmVzYXMscnNuZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3JlbmVzYXMscnNuZC50eHQKQEAgLTcsOCArNywxMSBAQAogCQkJCSAgInJlbmVzYXMscmNhcl9zb3VuZC1nZW4zIiBpZiBnZW5lcmF0aW9uMwogCQkJCSAgRXhhbXBsZXMgd2l0aCBzb2N0eXBlcyBhcmU6CiAJCQkJICAgIC0gInJlbmVzYXMscmNhcl9zb3VuZC1yOGE3Nzc4IiAoUi1DYXIgTTFBKQorCQkJCSAgICAtICJyZW5lc2FzLHJjYXJfc291bmQtcjhhNzc3OSIgKFItQ2FyIEgxKQogCQkJCSAgICAtICJyZW5lc2FzLHJjYXJfc291bmQtcjhhNzc5MCIgKFItQ2FyIEgyKQogCQkJCSAgICAtICJyZW5lc2FzLHJjYXJfc291bmQtcjhhNzc5MSIgKFItQ2FyIE0yLVcpCisJCQkJICAgIC0gInJlbmVzYXMscmNhcl9zb3VuZC1yOGE3NzkzIiAoUi1DYXIgTTItTikKKwkJCQkgICAgLSAicmVuZXNhcyxyY2FyX3NvdW5kLXI4YTc3OTQiIChSLUNhciBFMikKIAkJCQkgICAgLSAicmVuZXNhcyxyY2FyX3NvdW5kLXI4YTc3OTUiIChSLUNhciBIMykKIC0gcmVnCQkJCTogU2hvdWxkIGNvbnRhaW4gdGhlIHJlZ2lzdGVyIHBoeXNpY2FsIGFkZHJlc3MuCiAJCQkJICByZXF1aXJlZCByZWdpc3RlciBpcwpAQCAtMzQsNiArMzcsOCBAQAogCQkJCSAgc2VlIGJlbG93IGZvciBkZXRhaWwuCiAtICNzb3VuZC1kYWktY2VsbHMJCTogaXQgbXVzdCBiZSAwIGlmIHlvdXIgc3lzdGVtIGlzIHVzaW5nIHNpbmdsZSBEQUkKIAkJCQkgIGl0IG11c3QgYmUgMSBpZiB5b3VyIHN5c3RlbSBpcyB1c2luZyBtdWx0aSAgREFJCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CiAtICNjbG9jay1jZWxscwkJCTogaXQgbXVzdCBiZSAwIGlmIHlvdXIgc3lzdGVtIGhhcyBhdWRpb19jbGtvdXQKIAkJCQkgIGl0IG11c3QgYmUgMSBpZiB5b3VyIHN5c3RlbSBoYXMgYXVkaW9fY2xrb3V0MC8xLzIvMwogLSBjbG9jay1mcmVxdWVuY3kJCTogZm9yIGFsbCBhdWRpb19jbGtvdXQwLzEvMi8zCkBAIC0yNDQsMyArMjQ5LDgwIEBACiAJCX07CiAJfTsKIH07CisKK0V4YW1wbGU6IHNpbXBsZSBzb3VuZCBjYXJkCisKKwlyc25kX2FrNDY0Mzogc291bmQgeworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKKworCQlzaW1wbGUtYXVkaW8tY2FyZCxmb3JtYXQgPSAibGVmdF9qIjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsYml0Y2xvY2stbWFzdGVyID0gPCZzbmRjb2RlYz47CisJCXNpbXBsZS1hdWRpby1jYXJkLGZyYW1lLW1hc3RlciA9IDwmc25kY29kZWM+OworCisJCXNuZGNwdTogc2ltcGxlLWF1ZGlvLWNhcmQsY3B1IHsKKwkJCXNvdW5kLWRhaSA9IDwmcmNhcl9zb3VuZD47CisJCX07CisKKwkJc25kY29kZWM6IHNpbXBsZS1hdWRpby1jYXJkLGNvZGVjIHsKKwkJCXNvdW5kLWRhaSA9IDwmYWs0NjQzPjsKKwkJCWNsb2NrcyA9IDwmYXVkaW9fY2xvY2s+OworCQl9OworCX07CisKKyZyY2FyX3NvdW5kIHsKKwlwaW5jdHJsLTAgPSA8JnNvdW5kX3BpbnMgJnNvdW5kX2Nsa19waW5zPjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCisJLyogU2luZ2xlIERBSSAqLworCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CisKKwlzdGF0dXMgPSAib2theSI7CisKKwlyY2FyX3NvdW5kLGRhaSB7CisJCWRhaTAgeworCQkJcGxheWJhY2sgPSA8JnNzaTAgJnNyYzIgJmR2YzA+OworCQkJY2FwdHVyZSAgPSA8JnNzaTEgJnNyYzMgJmR2YzE+OworCQl9OworCX07Cit9OworCismc3NpMSB7CisJc2hhcmVkLXBpbjsKK307CisKK0V4YW1wbGU6IHNpbXBsZSBzb3VuZCBjYXJkIGZvciBURE0KKworCXJzbmRfdGRtOiBzb3VuZCB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWF1ZGlvLWNhcmQiOworCisJCXNpbXBsZS1hdWRpby1jYXJkLGZvcm1hdCA9ICJsZWZ0X2oiOworCQlzaW1wbGUtYXVkaW8tY2FyZCxiaXRjbG9jay1tYXN0ZXIgPSA8JnNuZGNvZGVjPjsKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZnJhbWUtbWFzdGVyID0gPCZzbmRjb2RlYz47CisKKwkJc25kY3B1OiBzaW1wbGUtYXVkaW8tY2FyZCxjcHUgeworCQkJc291bmQtZGFpID0gPCZyY2FyX3NvdW5kPjsKKwkJCWRhaS10ZG0tc2xvdC1udW0gPSA8Nj47CisJCX07CisKKwkJc25kY29kZWM6IHNpbXBsZS1hdWRpby1jYXJkLGNvZGVjIHsKKwkJCXNvdW5kLWRhaSA9IDwmeHh4PjsKKwkJfTsKKwl9OworCitFeGFtcGxlOiBzaW1wbGUgc291bmQgY2FyZCBmb3IgTXVsdGkgY2hhbm5lbAorCismcmNhcl9zb3VuZCB7CisJcGluY3RybC0wID0gPCZzb3VuZF9waW5zICZzb3VuZF9jbGtfcGlucz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKworCS8qIFNpbmdsZSBEQUkgKi8KKwkjc291bmQtZGFpLWNlbGxzID0gPDA+OworCisJc3RhdHVzID0gIm9rYXkiOworCisJcmNhcl9zb3VuZCxkYWkgeworCQlkYWkwIHsKKwkJCXBsYXliYWNrID0gPCZzc2kwICZzc2kxICZzc2kyICZzcmMwICZkdmMwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9yZW5lc2FzLHJzcmMtY2FyZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcmVuZXNhcyxyc3JjLWNhcmQudHh0CmluZGV4IDk2Mjc0OGEuLjJiMmNhYTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9yZW5lc2FzLHJzcmMtY2FyZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3JlbmVzYXMscnNyYy1jYXJkLnR4dApAQCAtNCw4ICs0LDggQEAKIAogUmVxdWlyZWQgcHJvcGVydGllczoKIAotLSBjb21wYXRpYmxlCQkJCTogInJlbmVzYXMscnNyYy1jYXJkLDxib2FyZD4iCi0JCQkJCSAgRXhhbXBsZXMgd2l0aCBzb2N0eXBlcyBhcmU6CistIGNvbXBhdGlibGUJCQkJOiAicmVuZXNhcyxyc3JjLWNhcmR7LDxib2FyZD59IgorCQkJCQkgIEV4YW1wbGVzIHdpdGggYm9hcmRzIGFyZToKIAkJCQkJICAgIC0gInJlbmVzYXMscnNyYy1jYXJkIgogCQkJCQkgICAgLSAicmVuZXNhcyxyc3JjLWNhcmQsbGFnZXIiCiAJCQkJCSAgICAtICJyZW5lc2FzLHJzcmMtY2FyZCxrb2Vsc2NoIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3J0NTYxNi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcnQ1NjE2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM0OGM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3J0NTYxNi50eHQKQEAgLTAsMCArMSwyNiBAQAorUlQ1NjE2IGF1ZGlvIENPREVDCisKK1RoaXMgZGV2aWNlIHN1cHBvcnRzIEkyQyBvbmx5LgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCistIGNvbXBhdGlibGUgOiAicmVhbHRlayxydDU2MTYiLgorCistIHJlZyA6IFRoZSBJMkMgYWRkcmVzcyBvZiB0aGUgZGV2aWNlLgorCitQaW5zIG9uIHRoZSBkZXZpY2UgKGZvciBsaW5raW5nIGludG8gYXVkaW8gcm91dGVzKSBmb3IgUlQ1NjE2OgorCisgICogSU4xUAorICAqIElOMlAKKyAgKiBJTjJOCisgICogTE9VVEwKKyAgKiBMT1VUUgorICAqIEhQT0wKKyAgKiBIUE9SCisKK0V4YW1wbGU6CisKK2NvZGVjOiBydDU2MTZAMWIgeworCWNvbXBhdGlibGUgPSAicmVhbHRlayxydDU2MTYiOworCXJlZyA9IDwweDFiPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcnQ1NjU5LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9ydDU2NTkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNzllN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcnQ1NjU5LnR4dApAQCAtMCwwICsxLDc1IEBACitSVDU2NTkvUlQ1NjU4IGF1ZGlvIENPREVDCisKK1RoaXMgZGV2aWNlIHN1cHBvcnRzIEkyQyBvbmx5LgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorCistIGNvbXBhdGlibGUgOiBPbmUgb2YgInJlYWx0ZWsscnQ1NjU5IiBvciAicmVhbHRlayxydDU2NTgiLgorCistIHJlZyA6IFRoZSBJMkMgYWRkcmVzcyBvZiB0aGUgZGV2aWNlLgorCistIGludGVycnVwdHMgOiBUaGUgQ09ERUMncyBpbnRlcnJ1cHQgb3V0cHV0LgorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorCistIHJlYWx0ZWssaW4xLWRpZmZlcmVudGlhbAorLSByZWFsdGVrLGluMy1kaWZmZXJlbnRpYWwKKy0gcmVhbHRlayxpbjQtZGlmZmVyZW50aWFsCisgIEJvb2xlYW4uIEluZGljYXRlIE1JQzEvMy80IGlucHV0IGFyZSBkaWZmZXJlbnRpYWwsIHJhdGhlciB0aGFuIHNpbmdsZS1lbmRlZC4KKworLSByZWFsdGVrLGRtaWMxLWRhdGEtcGluCisgIDA6IGRtaWMxIGlzIG5vdCB1c2VkCisgIDE6IHVzaW5nIElOMk4gcGluIGFzIGRtaWMxIGRhdGEgcGluCisgIDI6IHVzaW5nIEdQSU81IHBpbiBhcyBkbWljMSBkYXRhIHBpbgorICAzOiB1c2luZyBHUElPOSBwaW4gYXMgZG1pYzEgZGF0YSBwaW4KKyAgNDogdXNpbmcgR1BJTzExIHBpbiBhcyBkbWljMSBkYXRhIHBpbgorCistIHJlYWx0ZWssZG1pYzItZGF0YS1waW4KKyAgMDogZG1pYzIgaXMgbm90IHVzZWQKKyAgMTogdXNpbmcgSU4yUCBwaW4gYXMgZG1pYzIgZGF0YSBwaW4KKyAgMjogdXNpbmcgR1BJTzYgcGluIGFzIGRtaWMyIGRhdGEgcGluCisgIDM6IHVzaW5nIEdQSU8xMCBwaW4gYXMgZG1pYzIgZGF0YSBwaW4KKyAgNDogdXNpbmcgR1BJTzEyIHBpbiBhcyBkbWljMiBkYXRhIHBpbgorCistIHJlYWx0ZWssamQtc3JjCisgIDA6IE5vIEpEIGlzIHVzZWQKKyAgMTogdXNpbmcgSkQzIGFzIEpEIHNvdXJjZQorCistIHJlYWx0ZWssbGRvMS1lbi1ncGlvcyA6IFRoZSBHUElPIHRoYXQgY29udHJvbHMgdGhlIENPREVDJ3MgTERPMV9FTiBwaW4uCistIHJlYWx0ZWsscmVzZXQtZ3Bpb3MgOiBUaGUgR1BJTyB0aGF0IGNvbnRyb2xzIHRoZSBDT0RFQydzIFJFU0VUIHBpbi4KKworUGlucyBvbiB0aGUgZGV2aWNlIChmb3IgbGlua2luZyBpbnRvIGF1ZGlvIHJvdXRlcykgZm9yIFJUNTY1OS9SVDU2NTg6CisKKyAgKiBETUlDIEwxCisgICogRE1JQyBSMQorICAqIERNSUMgTDIKKyAgKiBETUlDIFIyCisgICogSU4xUAorICAqIElOMU4KKyAgKiBJTjJQCisgICogSU4yTgorICAqIElOM1AKKyAgKiBJTjNOCisgICogSU40UAorICAqIElONE4KKyAgKiBIUE9MCisgICogSFBPUgorICAqIFNQT0wKKyAgKiBTUE9SCisgICogTE9VVEwKKyAgKiBMT1VUUgorICAqIE1PTk9PVVQKKyAgKiBQRE1MCisgICogUERNUgorICAqIFNQRElGCisKK0V4YW1wbGU6CisKK3J0NTY1OSB7CisJY29tcGF0aWJsZSA9ICJyZWFsdGVrLHJ0NTY1OSI7CisJcmVnID0gPDB4MWI+OworCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW8+OworCWludGVycnVwdHMgPSA8VEVHUkFfR1BJTyhXLCAzKSBHUElPX0FDVElWRV9ISUdIPjsKKwlyZWFsdGVrLGxkbzEtZW4tZ3Bpb3MgPQorCQk8JmdwaW8gVEVHUkFfR1BJTyhWLCAzKSBHUElPX0FDVElWRV9ISUdIPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcnQ1Njc3LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9ydDU2NzcudHh0CmluZGV4IGYwNzA3ODkuLjFiM2MxM2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9ydDU2NzcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9ydDU2NzcudHh0CkBAIC0xOCw3ICsxOCw3IEBACiBPcHRpb25hbCBwcm9wZXJ0aWVzOgogCiAtIHJlYWx0ZWsscG93LWxkbzItZ3BpbyA6IFRoZSBHUElPIHRoYXQgY29udHJvbHMgdGhlIENPREVDJ3MgUE9XX0xETzIgcGluLgotLSByZWFsdGVrLHJlc2V0LWdwaW8gOiBUaGUgR1BJTyB0aGF0IGNvbnRyb2xzIHRoZSBDT0RFQydzIFJFU0VUIHBpbi4KKy0gcmVhbHRlayxyZXNldC1ncGlvIDogVGhlIEdQSU8gdGhhdCBjb250cm9scyB0aGUgQ09ERUMncyBSRVNFVCBwaW4uIEFjdGl2ZSBsb3cuCiAKIC0gcmVhbHRlayxpbjEtZGlmZmVyZW50aWFsCiAtIHJlYWx0ZWssaW4yLWRpZmZlcmVudGlhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3N1bjRpLWNvZGVjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9zdW40aS1jb2RlYy50eHQKaW5kZXggYzkyOTY2Yi4uMGRjZTY5MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3N1bjRpLWNvZGVjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvc3VuNGktY29kZWMudHh0CkBAIC0xNCw2ICsxNCw5IEBACiAgICAtICJhcGIiOiB0aGUgcGFyZW50IEFQQiBjbG9jayBmb3IgdGhpcyBjb250cm9sbGVyCiAgICAtICJjb2RlYyI6IHRoZSBwYXJlbnQgbW9kdWxlIGNsb2NrCiAKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGFsbHdpbm5lcixwYS1ncGlvczogZ3BpbyB0byBlbmFibGUgZXh0ZXJuYWwgYW1wbGlmaWVyCisKIEV4YW1wbGU6CiBjb2RlYzogY29kZWNAMDFjMjJjMDAgewogCSNzb3VuZC1kYWktY2VsbHMgPSA8MD47CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvdGkscGNtMzE2OGEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3RpLHBjbTMxNjhhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDljYjg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3RpLHBjbTMxNjhhLnR4dApAQCAtMCwwICsxLDQ4IEBACitUZXhhcyBJbnN0cnVtZW50cyBwY20zMTY4YSBEVCBiaW5kaW5ncworCitUaGlzIGRyaXZlciBzdXBwb3J0cyBib3RoIFNQSSBhbmQgSTJDIGJ1cyBhY2Nlc3MgZm9yIHRoaXMgY29kZWMKKworUmVxdWlyZWQgcHJvcGVydGllczoKKworICAtIGNvbXBhdGlibGU6ICJ0aSxwY20zMTY4YSIKKworICAtIGNsb2NrcyA6IENvbnRhaW5zIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzCisKKyAgLSBjbG9jay1uYW1lcyA6IEluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZW50cmllczoKKwkic2NraSIJVGhlIHN5c3RlbSBjbG9jaworCisgIC0gVkREMS1zdXBwbHkgOiBEaWdpdGFsIHBvd2VyIHN1cHBseSByZWd1bGF0b3IgMSAoKzMuM1YpCisKKyAgLSBWREQyLXN1cHBseSA6IERpZ2l0YWwgcG93ZXIgc3VwcGx5IHJlZ3VsYXRvciAyICgrMy4zVikKKworICAtIFZDQ0FEMS1zdXBwbHkgOiBBREMgcG93ZXIgc3VwcGx5IHJlZ3VsYXRvciAxICgrNVYpCisKKyAgLSBWQ0NBRDItc3VwcGx5IDogQURDIHBvd2VyIHN1cHBseSByZWd1bGF0b3IgMiAoKzVWKQorCisgIC0gVkNDREExLXN1cHBseSA6IERBQyBwb3dlciBzdXBwbHkgcmVndWxhdG9yIDEgKCs1VikKKworICAtIFZDQ0RBMi1zdXBwbHkgOiBEQUMgcG93ZXIgc3VwcGx5IHJlZ3VsYXRvciAyICgrNVYpCisKK0ZvciByZXF1aXJlZCBwcm9wZXJ0aWVzIG9uIFNQSS9JMkMsIGNvbnN1bHQgU1BJL0kyQyBkZXZpY2UgdHJlZSBkb2N1bWVudGF0aW9uCisKK0V4YW1wbGVzOgorCitpMmMwOiBpMmMwQDAgeworCisJLi4uCisKKwlwY20zMTY4YTogYXVkaW8tY29kZWNANDQgeworCQljb21wYXRpYmxlID0gInRpLHBjbTMxNjhhIjsKKwkJcmVnID0gPDB4NDQ+OworCQljbG9ja3MgPSA8JmNsa19jb3JlIENMS19BVURJTz47CisJCWNsb2NrLW5hbWVzID0gInNja2kiOworCQlWREQxLXN1cHBseSA9IDwmc3VwcGx5M3YzPjsKKwkJVkREMi1zdXBwbHkgPSA8JnN1cHBseTN2Mz47CisJCVZDQ0FEMS1zdXBwbHkgPSA8JnN1cHBseTV2MD47CisJCVZDQ0FEMi1zdXBwbHkgPSA8JnN1cHBseTV2MD47CisJCVZDQ0RBMS1zdXBwbHkgPSA8JnN1cHBseTV2MD47CisJCVZDQ0RBMi1zdXBwbHkgPSA8JnN1cHBseTV2MD47CisJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCXBpbmN0cmwtMCA9IDwmZGFjX2Nsa19waW4+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3dsZix3bTg5NzQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3dsZix3bTg5NzQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZDNhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvd2xmLHdtODk3NC50eHQKQEAgLTAsMCArMSwxNSBAQAorV004OTc0IGF1ZGlvIENPREVDCisKK1RoaXMgZGV2aWNlIHN1cHBvcnRzIGJvdGggSTJDIGFuZCBTUEkgKGNvbmZpZ3VyZWQgd2l0aCBwaW4gc3RyYXBwaW5nCitvbiB0aGUgYm9hcmQpLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAtIGNvbXBhdGlibGU6ICJ3bGYsd204OTc0IgorICAtIHJlZzogdGhlIEkyQyBhZGRyZXNzIG9yIFNQSSBjaGlwIHNlbGVjdCBudW1iZXIgb2YgdGhlIGRldmljZQorCitFeGFtcGxlczoKKworY29kZWM6IHdtODk3NEAxYSB7CisJY29tcGF0aWJsZSA9ICJ3bGYsd204OTc0IjsKKwlyZWcgPSA8MHgxYT47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3RoZXJtYWwvcm9ja2NoaXAtdGhlcm1hbC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGhlcm1hbC9yb2NrY2hpcC10aGVybWFsLnR4dAppbmRleCBiMzgyMDBkLi4wZGZhNjBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGhlcm1hbC9yb2NrY2hpcC10aGVybWFsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdGhlcm1hbC9yb2NrY2hpcC10aGVybWFsLnR4dApAQCAtMSw3ICsxLDkgQEAKICogVGVtcGVyYXR1cmUgU2Vuc29yIEFEQyAoVFNBREMpIG9uIHJvY2tjaGlwIFNvQ3MKIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZSA6ICJyb2NrY2hpcCxyazMyODgtdHNhZGMiCistIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgInJvY2tjaGlwLDxuYW1lPi10c2FkYyIKKyAgICJyb2NrY2hpcCxyazMyODgtdHNhZGMiOiBmb3VuZCBvbiBSSzMyODggU29DcworICAgInJvY2tjaGlwLHJrMzM2OC10c2FkYyI6IGZvdW5kIG9uIFJLMzM2OCBTb0NzCiAtIHJlZyA6IHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiB0aGUgY29udHJvbGxlciBhbmQgbGVuZ3RoIG9mIG1lbW9yeSBtYXBwZWQKIAlyZWdpb24uCiAtIGludGVycnVwdHMgOiBUaGUgaW50ZXJydXB0IG51bWJlciB0byB0aGUgY3B1LiBUaGUgaW50ZXJydXB0IHNwZWNpZmllciBmb3JtYXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMQppbmRleCA2YTRiMWFmLi4xYmJhMzhkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCkBAIC0zMiw2ICszMiw3IEBACiAgICogSW50ZWwgU3VucmlzZSBQb2ludC1MUCAoUENIKQogICAqIEludGVsIEROViAoU09DKQogICAqIEludGVsIEJyb3h0b24gKFNPQykKKyAgKiBJbnRlbCBMZXdpc2J1cmcgKFBDSCkKICAgIERhdGFzaGVldHM6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSW50ZWwgd2Vic2l0ZQogCiBPbiBJbnRlbCBQYXRzYnVyZyBhbmQgbGF0ZXIgY2hpcHNldHMsIGJvdGggdGhlIG5vcm1hbCBob3N0IFNNQnVzIGNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggZjhhYWU2My4uNzQyZjY5ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTE1ODMsOSArMTU4Myw2IEBACiAJCWh3cF9vbmx5CiAJCQlPbmx5IGxvYWQgaW50ZWxfcHN0YXRlIG9uIHN5c3RlbXMgd2hpY2ggc3VwcG9ydAogCQkJaGFyZHdhcmUgUCBzdGF0ZSBjb250cm9sIChIV1ApIGlmIGF2YWlsYWJsZS4KLQkJbm9fYWNwaQotCQkJRG9uJ3QgdXNlIEFDUEkgcHJvY2Vzc29yIHBlcmZvcm1hbmNlIGNvbnRyb2wgb2JqZWN0cwotCQkJX1BTUyBhbmQgX1BQQyBzcGVjaWZpZWQgbGltaXRzLgogCiAJaW50cmVtYXA9CVtYODYtNjQsIEludGVsLUlPTU1VXQogCQkJb24JZW5hYmxlIEludGVycnVwdCBSZW1hcHBpbmcgKGRlZmF1bHQpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQKaW5kZXggZjg2MmNmMy4uNDJkZGJkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwLnR4dApAQCAtMTgxLDE3ICsxODEsMyBAQAogSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCiBrZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUKIGlzc3VlIHRvIGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldC4KLQotCi1MaWNlbnNlCi09PT09PT09Ci0KLVRoaXMgc29mdHdhcmUgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIGFncmVlbWVudAotYmV0d2VlbiB5b3UgKCdMaWNlbnNlZScpIGFuZCBJbnRlbC4gRG8gbm90IHVzZSBvciBsb2FkIHRoaXMgc29mdHdhcmUgb3IgYW55Ci1hc3NvY2lhdGVkIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5LCB0aGUgJ1NvZnR3YXJlJykgdW50aWwgeW91IGhhdmUgY2FyZWZ1bGx5Ci1yZWFkIHRoZSBmdWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBmaWxlIENPUFlJTkcgbG9jYXRlZCBpbiB0aGlzIHNvZnR3YXJlCi1wYWNrYWdlLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzCi1BZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGRvIG5vdCBpbnN0YWxsCi1vciB1c2UgdGhlIFNvZnR3YXJlLgotCi0qIE90aGVyIG5hbWVzIGFuZCBicmFuZHMgbWF5IGJlIGNsYWltZWQgYXMgdGhlIHByb3BlcnR5IG9mIG90aGVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9pbWcsc3BkaWYtaW4udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL2ltZyxzcGRpZi1pbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI3NTA1NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9pbWcsc3BkaWYtaW4udHh0CkBAIC0wLDAgKzEsNDkgQEAKK1RoZSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgU1BESUYgSW5wdXQgY29udHJvbGxlciBjb250YWlucyB0aGUgZm9sbG93aW5nCitjb250cm9sczoKKworbmFtZT0nSUVDOTU4IENhcHR1cmUgTWFzaycsaW5kZXg9MAorCitUaGlzIGNvbnRyb2wgcmV0dXJucyBhIG1hc2sgdGhhdCBzaG93cyB3aGljaCBvZiB0aGUgSUVDOTU4IHN0YXR1cyBiaXRzCitjYW4gYmUgcmVhZCB1c2luZyB0aGUgJ0lFQzk1OCBDYXB0dXJlIERlZmF1bHQnIGNvbnRyb2wuCisKK25hbWU9J0lFQzk1OCBDYXB0dXJlIERlZmF1bHQnLGluZGV4PTAKKworVGhpcyBjb250cm9sIHJldHVybnMgdGhlIHN0YXR1cyBiaXRzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNQRElGIHN0cmVhbSB0aGF0CitpcyBiZWluZyByZWNlaXZlZC4gVGhlICdJRUM5NTggQ2FwdHVyZSBNYXNrJyBzaG93cyB3aGljaCBiaXRzIGNhbiBiZSByZWFkCitmcm9tIHRoaXMgY29udHJvbC4KKworbmFtZT0nU1BESUYgSW4gTXVsdGkgRnJlcXVlbmN5IEFjcXVpcmUnLGluZGV4PTAKK25hbWU9J1NQRElGIEluIE11bHRpIEZyZXF1ZW5jeSBBY3F1aXJlJyxpbmRleD0xCituYW1lPSdTUERJRiBJbiBNdWx0aSBGcmVxdWVuY3kgQWNxdWlyZScsaW5kZXg9MgorbmFtZT0nU1BESUYgSW4gTXVsdGkgRnJlcXVlbmN5IEFjcXVpcmUnLGluZGV4PTMKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW1wdCBhY3F1aXNpdGlvbiBvZiB1cCB0byBmb3VyIGRpZmZlcmVudCBzYW1wbGUKK3JhdGVzLiBUaGUgYWN0aXZlIHJhdGUgY2FuIGJlIG9idGFpbmVkIGJ5IHJlYWRpbmcgdGhlICdTUERJRiBJbiBMb2NrIEZyZXF1ZW5jeScKK2NvbnRyb2wuCisKK1doZW4gdGhlIHZhbHVlIG9mIHRoaXMgY29udHJvbCBpcyBzZXQgdG8gezAsMCwwLDB9LCB0aGUgcmF0ZSBnaXZlbiB0byBod19wYXJhbXMKK3dpbGwgZGV0ZXJtaW5lIHRoZSBzaW5nbGUgcmF0ZSB0aGUgYmxvY2sgd2lsbCBjYXB0dXJlLiBFbHNlLCB0aGUgcmF0ZSBnaXZlbiB0bworaHdfcGFyYW1zIHdpbGwgYmUgaWdub3JlZCwgYW5kIHRoZSBibG9jayB3aWxsIGF0dGVtcHQgY2FwdHVyZSBmb3IgZWFjaCBvZiB0aGUKK2ZvdXIgc2FtcGxlIHJhdGVzIHNldCBoZXJlLgorCitJZiBsZXNzIHRoYW4gZm91ciByYXRlcyBhcmUgcmVxdWlyZWQsIHRoZSBzYW1lIHJhdGUgY2FuIGJlIHNwZWNpZmllZCBtb3JlIHRoYW4KK29uY2UKKworbmFtZT0nU1BESUYgSW4gTG9jayBGcmVxdWVuY3knLGluZGV4PTAKKworVGhpcyBjb250cm9sIHJldHVybnMgdGhlIGFjdGl2ZSBjYXB0dXJlIHJhdGUsIG9yIDAgaWYgYSBsb2NrIGhhcyBub3QgYmVlbgorYWNxdWlyZWQKKworbmFtZT0nU1BESUYgSW4gTG9jayBUUksnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gbW9kaWZ5IHRoZSBsb2NraW5nL2ppdHRlciByZWplY3Rpb24gY2hhcmFjdGVyaXN0aWNzCitvZiB0aGUgYmxvY2suIExhcmdlciB2YWx1ZXMgaW5jcmVhc2UgdGhlIGxvY2tpbmcgcmFuZ2UsIGJ1dCByZWR1Y2Ugaml0dGVyCityZWplY3Rpb24uCisKK25hbWU9J1NQRElGIEluIExvY2sgQWNxdWlyZSBUaHJlc2hvbGQnLGluZGV4PTAKKworVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSB0aHJlc2hvbGQgYXQgd2hpY2ggYSBsb2NrIGlzIGFjcXVpcmVkLgorCituYW1lPSdTUERJRiBJbiBMb2NrIFJlbGVhc2UgVGhyZXNob2xkJyxpbmRleD0wCisKK1RoaXMgY29udHJvbCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgdGhyZXNob2xkIGF0IHdoaWNoIGEgbG9jayBpcyByZWxlYXNlZC4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZTljYWE0Yi4uMjMzZjgzNCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTMxOCw3ICszMTgsNyBAQAogTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHBzOi8vMDEub3JnL2xpbnV4LWFjcGkKIFM6CVN1cHBvcnRlZAotRjoJZHJpdmVycy9hY3BpL3ZpZGVvLmMKK0Y6CWRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMKIAogQUNQSSBXTUkgRFJJVkVSCiBMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwpAQCAtMTg0Nyw3ICsxODQ3LDcgQEAKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvCiAKIFdJTE9DSVRZIFdJTDYyMTAgV0lSRUxFU1MgRFJJVkVSCi1NOglWbGFkaW1pciBLb25kcmF0aWV2IDxxY2FfdmtvbmRyYXRAcWNhLnF1YWxjb21tLmNvbT4KK006CU1heWEgRXJleiA8cWNhX21lcmV6QHFjYS5xdWFsY29tbS5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKIEw6CXdpbDYyMTBAcWNhLnF1YWxjb21tLmNvbQogUzoJU3VwcG9ydGVkCkBAIC0xOTMxLDcgKzE5MzEsNyBAQAogRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hdDkxLmMKIAogQVRNRUwgSVNJIERSSVZFUgotTToJSm9zaCBXdSA8am9zaC53dUBhdG1lbC5jb20+CitNOglMdWRvdmljIERlc3JvY2hlcyA8bHVkb3ZpYy5kZXNyb2NoZXNAYXRtZWwuY29tPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9hdG1lbC1pc2kuYwpAQCAtMTk1MCw3ICsxOTUwLDggQEAKIEY6CWRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvCiAKIEFUTUVMIE5BTkQgRFJJVkVSCi1NOglKb3NoIFd1IDxqb3NoLnd1QGF0bWVsLmNvbT4KK006CVdlbnlvdSBZYW5nIDx3ZW55b3UueWFuZ0BhdG1lbC5jb20+CitNOglKb3NoIFd1IDxyYWlueWZlZWxpbmdAb3V0bG9vay5jb20+CiBMOglsaW51eC1tdGRAbGlzdHMuaW5mcmFkZWFkLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQqCkBAIC0yNDQ5LDcgKzI0NTAsOSBAQAogCiBCUk9BRENPTSBTVEIgTkFORCBGTEFTSCBEUklWRVIKIE06CUJyaWFuIE5vcnJpcyA8Y29tcHV0ZXJzZm9ycGVhY2VAZ21haWwuY29tPgorTToJS2FtYWwgRGFzdSA8a2Rhc3Uua2RldkBnbWFpbC5jb20+CiBMOglsaW51eC1tdGRAbGlzdHMuaW5mcmFkZWFkLm9yZworTDoJYmNtLWtlcm5lbC1mZWVkYmFjay1saXN0QGJyb2FkY29tLmNvbQogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9tdGQvbmFuZC9icmNtbmFuZC8KIApAQCAtMjU0Niw3ICsyNTQ5LDcgQEAKIAogQ0FDSEVGSUxFUzogRlMtQ0FDSEUgQkFDS0VORCBGT1IgQ0FDSElORyBPTiBNT1VOVEVEIEZJTEVTWVNURU1TCiBNOglEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgotTDoJbGludXgtY2FjaGVmc0ByZWRoYXQuY29tCitMOglsaW51eC1jYWNoZWZzQHJlZGhhdC5jb20gKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy50eHQKIEY6CWZzL2NhY2hlZmlsZXMvCkBAIC0yOTI5LDEwICsyOTMyLDkgQEAKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwogCiBDT05FWEFOVCBBQ0NFU1NSVU5ORVIgVVNCIERSSVZFUgotTToJU2ltb24gQXJsb3R0IDxjeGFjcnVAZmlyZS5scDAuZXU+CiBMOglhY2Nlc3NydW5uZXItZ2VuZXJhbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9hY2Nlc3NydW5uZXIuc291cmNlZm9yZ2UubmV0LwotUzoJTWFpbnRhaW5lZAorUzoJT3JwaGFuCiBGOglkcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKIAogQ09ORklHRlMKQEAgLTI5NzMsNiArMjk3NSw3IEBACiBDT05UUk9MIEdST1VQIC0gTUVNT1JZIFJFU09VUkNFIENPTlRST0xMRVIgKE1FTUNHKQogTToJSm9oYW5uZXMgV2VpbmVyIDxoYW5uZXNAY21weGNoZy5vcmc+CiBNOglNaWNoYWwgSG9ja28gPG1ob2Nrb0BrZXJuZWwub3JnPgorTToJVmxhZGltaXIgRGF2eWRvdiA8dmRhdnlkb3ZAdmlydHVvenpvLmNvbT4KIEw6CWNncm91cHNAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eC1tbUBrdmFjay5vcmcKIFM6CU1haW50YWluZWQKQEAgLTQ0MDksNiArNDQxMiw3IEBACiAKIEZQR0EgTUFOQUdFUiBGUkFNRVdPUksKIE06CUFsYW4gVHVsbCA8YXR1bGxAb3BlbnNvdXJjZS5hbHRlcmEuY29tPgorUjoJTW9yaXR6IEZpc2NoZXIgPG1vcml0ei5maXNjaGVyQGV0dHVzLmNvbT4KIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZnBnYS8KIEY6CWluY2x1ZGUvbGludXgvZnBnYS9mcGdhLW1nci5oCkBAIC00NTU5LDcgKzQ1NjMsNyBAQAogCiBGUy1DQUNIRTogTE9DQUwgQ0FDSElORyBGT1IgTkVUV09SSyBGSUxFU1lTVEVNUwogTToJRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KLUw6CWxpbnV4LWNhY2hlZnNAcmVkaGF0LmNvbQorTDoJbGludXgtY2FjaGVmc0ByZWRoYXQuY29tIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nLwogRjoJZnMvZnNjYWNoZS8KQEAgLTU1NzQsNyArNTU3OCw3IEBACiBSOglTaGFubm9uIE5lbHNvbiA8c2hhbm5vbi5uZWxzb25AaW50ZWwuY29tPgogUjoJQ2Fyb2x5biBXeWJvcm55IDxjYXJvbHluLnd5Ym9ybnlAaW50ZWwuY29tPgogUjoJRG9uIFNraWRtb3JlIDxkb25hbGQuYy5za2lkbW9yZUBpbnRlbC5jb20+Ci1SOglNYXR0aGV3IFZpY2sgPG1hdHRoZXcudmlja0BpbnRlbC5jb20+CitSOglCcnVjZSBBbGxhbiA8YnJ1Y2Uudy5hbGxhbkBpbnRlbC5jb20+CiBSOglKb2huIFJvbmNpYWsgPGpvaG4ucm9uY2lha0BpbnRlbC5jb20+CiBSOglNaXRjaCBXaWxsaWFtcyA8bWl0Y2guYS53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglpbnRlbC13aXJlZC1sYW5AbGlzdHMub3N1b3NsLm9yZwpAQCAtNTcxMSwxMyArNTcxNSw2IEBACiBTOglNYWludGFpbmVkCiBGOgluZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwogCi1JUDEwMDBBIDEwLzEwMC8xMDAwIEdJR0FCSVQgRVRIRVJORVQgRFJJVkVSCi1NOglGcmFuY29pcyBSb21pZXUgPHJvbWlldUBmci56b3JlaWwuY29tPgotTToJU29yYmljYSBTaGllaCA8c29yYmljYUBpY3BsdXMuY29tLnR3PgotTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvaWNwbHVzL2lwZy4qCi0KIElQQVRIIERSSVZFUgogTToJTWlrZSBNYXJjaW5pc3p5biA8aW5maW5pcGF0aEBpbnRlbC5jb20+CiBMOglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZwpAQCAtNjM3MSw2ICs2MzY4LDcgQEAKIExJR0hUTlZNIFBMQVRGT1JNIFNVUFBPUlQKIE06CU1hdGlhcyBCam9ybGluZyA8bWJAbGlnaHRudm0uaW8+CiBXOglodHRwOi8vZ2l0aHViL09wZW5DaGFubmVsU1NECitMOglsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbGlnaHRudm0vCiBGOglpbmNsdWRlL2xpbnV4L2xpZ2h0bnZtLmgKQEAgLTY5MjMsMTMgKzY5MjEsMjEgQEAKIEY6CWRyaXZlcnMvc2NzaS9tZWdhcmFpZC8KIAogTUVMTEFOT1ggRVRIRVJORVQgRFJJVkVSIChtbHg0X2VuKQotTToJQW1pciBWYWRhaSA8YW1pcnZAbWVsbGFub3guY29tPgorTTogCUV1Z2VuaWEgRW1hbnRheWV2IDxldWdlbmlhQG1lbGxhbm94LmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogVzoJaHR0cDovL3d3dy5tZWxsYW5veC5jb20KIFE6CWh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L25ldGRldi9saXN0LwogRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl8qCiAKK01FTExBTk9YIEVUSEVSTkVUIERSSVZFUiAobWx4NWUpCitNOglTYWVlZCBNYWhhbWVlZCA8c2FlZWRtQG1lbGxhbm94LmNvbT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorVzoJaHR0cDovL3d3dy5tZWxsYW5veC5jb20KK1E6CWh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L25ldGRldi9saXN0LworRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuXyoKKwogTUVMTEFOT1ggRVRIRVJORVQgU1dJVENIIERSSVZFUlMKIE06CUppcmkgUGlya28gPGppcmlAbWVsbGFub3guY29tPgogTToJSWRvIFNjaGltbWVsIDxpZG9zY2hAbWVsbGFub3guY29tPgpAQCAtNzkwMSw2ICs3OTA3LDE4IEBACiBGOgluZXQvb3BlbnZzd2l0Y2gvCiBGOglpbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaAogCitPUEVSQVRJTkcgUEVSRk9STUFOQ0UgUE9JTlRTIChPUFApCitNOglWaXJlc2ggS3VtYXIgPHZpcmVzaGtAa2VybmVsLm9yZz4KK006CU5pc2hhbnRoIE1lbm9uIDxubUB0aS5jb20+CitNOglTdGVwaGVuIEJveWQgPHNib3lkQGNvZGVhdXJvcmEub3JnPgorTDoJbGludXgtcG1Admdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3ZpcmVzaGsvcG0uZ2l0CitGOglkcml2ZXJzL2Jhc2UvcG93ZXIvb3BwLworRjoJaW5jbHVkZS9saW51eC9wbV9vcHAuaAorRjoJRG9jdW1lbnRhdGlvbi9wb3dlci9vcHAudHh0CitGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvb3BwLworCiBPUEw0IERSSVZFUgogTToJQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CiBMOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQpAQCAtODI2OSw3ICs4Mjg3LDcgQEAKIEY6CWtlcm5lbC9kZWxheWFjY3QuYwogCiBQRVJGT1JNQU5DRSBFVkVOVFMgU1VCU1lTVEVNCi1NOglQZXRlciBaaWpsc3RyYSA8YS5wLnppamxzdHJhQGNoZWxsby5ubD4KK006CVBldGVyIFppamxzdHJhIDxwZXRlcnpAaW5mcmFkZWFkLm9yZz4KIE06CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgogTToJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGtlcm5lbC5vcmc+CiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCkBAIC04MzYyLDYgKzgzODAsMTQgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGluY3RybC9zYW1zdW5nLwogCitQSU4gQ09OVFJPTExFUiAtIFNJTkdMRQorTToJVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KK006CUhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BsaW5hcm8ub3JnPgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL3BpbmN0cmwvcGluY3RybC1zaW5nbGUuYworCiBQSU4gQ09OVFJPTExFUiAtIFNUIFNQRUFSCiBNOglWaXJlc2ggS3VtYXIgPHZpcmVzaGtAa2VybmVsLm9yZz4KIEw6CXNwZWFyLWRldmVsQGxpc3Quc3QuY29tCkBAIC04OTI4LDYgKzg5NTQsMTMgQEAKIEY6CURvY3VtZW50YXRpb24vcnBtc2cudHh0CiBGOglpbmNsdWRlL2xpbnV4L3JwbXNnLmgKIAorUkVORVNBUyBFVEhFUk5FVCBEUklWRVJTCitSOglTZXJnZWkgU2h0eWx5b3YgPHNlcmdlaS5zaHR5bHlvdkBjb2dlbnRlbWJlZGRlZC5jb20+CitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC1zaEB2Z2VyLmtlcm5lbC5vcmcKK0Y6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvCitGOglpbmNsdWRlL2xpbnV4L3NoX2V0aC5oCisKIFJFU0VUIENPTlRST0xMRVIgRlJBTUVXT1JLCiBNOglQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgogUzoJTWFpbnRhaW5lZApAQCAtOTMxNCw3ICs5MzQ3LDYgQEAKIEY6CWluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9pMmMtZGVzaWdud2FyZS5oCiAKIFNZTk9QU1lTIERFU0lHTldBUkUgTU1DL1NEL1NESU8gRFJJVkVSCi1NOglTZXVuZ3dvbiBKZW9uIDx0Z2loLmp1bkBzYW1zdW5nLmNvbT4KIE06CUphZWhvb24gQ2h1bmcgPGpoODAuY2h1bmdAc2Ftc3VuZy5jb20+CiBMOglsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCkBAIC05NDExLDggKzk0NDMsMTAgQEAKIAogU0NTSSBTVUJTWVNURU0KIE06CSJKYW1lcyBFLkouIEJvdHRvbWxleSIgPEpCb3R0b21sZXlAb2Rpbi5jb20+Ci1MOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qZWpiL3Njc2kuZ2l0CitNOgkiTWFydGluIEsuIFBldGVyc2VuIiA8bWFydGluLnBldGVyc2VuQG9yYWNsZS5jb20+CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21rcC9zY3NpLmdpdAorTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvc2NzaS8KIEY6CWluY2x1ZGUvc2NzaS8KQEAgLTEwODg3LDkgKzEwOTIxLDkgQEAKIEY6CWRyaXZlcnMvbWVkaWEvdHVuZXJzL3R1YTkwMDEqCiAKIFRVTElQIE5FVFdPUksgRFJJVkVSUwotTToJR3JhbnQgR3J1bmRsZXIgPGdydW5kbGVyQHBhcmlzYy1saW51eC5vcmc+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1TOglNYWludGFpbmVkCitMOglsaW51eC1wYXJpc2NAdmdlci5rZXJuZWwub3JnCitTOglPcnBoYW4KIEY6CWRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC8KIAogVFVOL1RBUCBkcml2ZXIKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggM2EwMjM0Zi4uOWQ5NGFkZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gNAogUEFUQ0hMRVZFTCA9IDQKIFNVQkxFVkVMID0gMAotRVhUUkFWRVJTSU9OID0gLXJjMQorRVhUUkFWRVJTSU9OID0gLXJjOAogTkFNRSA9IEJsdXJyeSBGaXNoIEJ1dHQKIAogIyAqRE9DVU1FTlRBVElPTioKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL0tjb25maWcgYi9hcmNoL2FyYy9LY29uZmlnCmluZGV4IDJjMmFjM2YuLjYzMTJmNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL0tjb25maWcKKysrIGIvYXJjaC9hcmMvS2NvbmZpZwpAQCAtNDQ1LDYgKzQ0NSw3IEBACiAJICBIb3dldmVyIHNvbWUgY3VzdG9tZXJzIGhhdmUgcGVyaXBoZXJhbHMgbWFwcGVkIGF0IHRoaXMgYWRkciwgc28KIAkgIExpbnV4IG5lZWRzIHRvIGJlIHNjb290ZWQgYSBiaXQuCiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoZSBhYm92ZSBtZWFucywgbGVhdmUgdGhpcyBzZXR0aW5nIGFsb25lLgorCSAgVGhpcyBuZWVkcyB0byBtYXRjaCBtZW1vcnkgc3RhcnQgYWRkcmVzcyBzcGVjaWZpZWQgaW4gRGV2aWNlIFRyZWUKIAogY29uZmlnIEhJR0hNRU0KIAlib29sICJIaWdoIE1lbW9yeSBTdXBwb3J0IgpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvTWFrZWZpbGUgYi9hcmNoL2FyYy9NYWtlZmlsZQppbmRleCBjZjBjZjM0Li5hZWIxOTAyIDEwMDY0NAotLS0gYS9hcmNoL2FyYy9NYWtlZmlsZQorKysgYi9hcmNoL2FyYy9NYWtlZmlsZQpAQCAtODEsNyArODEsNyBAQAogTElCR0NDCTo9ICQoc2hlbGwgJChDQykgJChjZmxhZ3MteSkgLS1wcmludC1saWJnY2MtZmlsZS1uYW1lKQogCiAjIE1vZHVsZXMgd2l0aCBzaG9ydCBjYWxscyBtaWdodCBicmVhayBmb3IgY2FsbHMgaW50byBidWlsdGluLWtlcm5lbAotS0JVSUxEX0NGTEFHU19NT0RVTEUJKz0gLW1sb25nLWNhbGxzCitLQlVJTERfQ0ZMQUdTX01PRFVMRQkrPSAtbWxvbmctY2FsbHMgLW1uby1taWxsaWNvZGUKIAogIyBGaW5hbGx5IGR1bXAgZXZleXRoaW5nIGludG8ga2VybmVsIGJ1aWxkIHN5c3RlbQogS0JVSUxEX0NGTEFHUwkrPSAkKGNmbGFncy15KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvYm9vdC9kdHMvYXhzMTB4X21iLmR0c2kgYi9hcmNoL2FyYy9ib290L2R0cy9heHMxMHhfbWIuZHRzaQppbmRleCBmM2RiMzIxLi40NGE1NzhjIDEwMDY0NAotLS0gYS9hcmNoL2FyYy9ib290L2R0cy9heHMxMHhfbWIuZHRzaQorKysgYi9hcmNoL2FyYy9ib290L2R0cy9heHMxMHhfbWIuZHRzaQpAQCAtNDYsNiArNDYsNyBAQAogCQkJc25wcyxwYmwgPSA8IDMyID47CiAJCQljbG9ja3MgPSA8JmFwYmNsaz47CiAJCQljbG9jay1uYW1lcyA9ICJzdG1tYWNldGgiOworCQkJbWF4LXNwZWVkID0gPDEwMD47CiAJCX07CiAKIAkJZWhjaUAweDQwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2Jvb3QvZHRzL25zaW1faHMuZHRzIGIvYXJjaC9hcmMvYm9vdC9kdHMvbnNpbV9ocy5kdHMKaW5kZXggYjBlYjBlNy4uZmM4MTg3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvYm9vdC9kdHMvbnNpbV9ocy5kdHMKKysrIGIvYXJjaC9hcmMvYm9vdC9kdHMvbnNpbV9ocy5kdHMKQEAgLTE3LDcgKzE3LDggQEAKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7Ci0JCXJlZyA9IDwweDAgMHg4MDAwMDAwMCAweDAgMHg0MDAwMDAwMAkvKiAxIEdCIGxvdyBtZW0gKi8KKwkJLyogQ09ORklHX0xJTlVYX0xJTktfQkFTRSBuZWVkcyB0byBtYXRjaCBsb3cgbWVtIHN0YXJ0ICovCisJCXJlZyA9IDwweDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAkvKiA1MTIgTUIgbG93IG1lbSAqLwogCQkgICAgICAgMHgxIDB4MDAwMDAwMDAgMHgwIDB4NDAwMDAwMDA+OwkvKiAxIEdCIGhpZ2htZW0gKi8KIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWcgYi9hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWcKaW5kZXggYzkyYzBlZi4uZjFhYzk4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvY29uZmlncy9heHMxMDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJjL2NvbmZpZ3MvYXhzMTAxX2RlZmNvbmZpZwpAQCAtMSw0ICsxLDQgQEAKLUNPTkZJR19DUk9TU19DT01QSUxFPSJhcmMtbGludXgtdWNsaWJjLSIKK0NPTkZJR19DUk9TU19DT01QSUxFPSJhcmMtbGludXgtIgogQ09ORklHX0RFRkFVTFRfSE9TVE5BTUU9IkFSQ0xpbnV4IgogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9jb25maWdzL2F4czEwM19kZWZjb25maWcgYi9hcmNoL2FyYy9jb25maWdzL2F4czEwM19kZWZjb25maWcKaW5kZXggY2ZhYzI0ZS4uMzIzNDg2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvY29uZmlncy9heHMxMDNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX2RlZmNvbmZpZwpAQCAtMSw0ICsxLDQgQEAKLUNPTkZJR19DUk9TU19DT01QSUxFPSJhcmMtbGludXgtdWNsaWJjLSIKK0NPTkZJR19DUk9TU19DT01QSUxFPSJhcmMtbGludXgtIgogQ09ORklHX0RFRkFVTFRfSE9TVE5BTUU9IkFSQ0xpbnV4IgogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnIGIvYXJjaC9hcmMvY29uZmlncy9heHMxMDNfc21wX2RlZmNvbmZpZwppbmRleCA5OTIyYTExLi42NjE5MWNkIDEwMDY0NAotLS0gYS9hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX3NtcF9kZWZjb25maWcKQEAgLTEsNCArMSw0IEBACi1DT05GSUdfQ1JPU1NfQ09NUElMRT0iYXJjLWxpbnV4LXVjbGliYy0iCitDT05GSUdfQ1JPU1NfQ09NUElMRT0iYXJjLWxpbnV4LSIKIENPTkZJR19ERUZBVUxUX0hPU1ROQU1FPSJBUkNMaW51eCIKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvY29uZmlncy9uc2ltX2hzX2RlZmNvbmZpZyBiL2FyY2gvYXJjL2NvbmZpZ3MvbnNpbV9oc19kZWZjb25maWcKaW5kZXggZjc2MWE3Yy4uZjY4ODM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvY29uZmlncy9uc2ltX2hzX2RlZmNvbmZpZworKysgYi9hcmNoL2FyYy9jb25maWdzL25zaW1faHNfZGVmY29uZmlnCkBAIC0xLDQgKzEsNCBAQAotQ09ORklHX0NST1NTX0NPTVBJTEU9ImFyYy1saW51eC11Y2xpYmMtIgorQ09ORklHX0NST1NTX0NPTVBJTEU9ImFyYy1saW51eC0iCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9IT1NUTkFNRT0iQVJDTGludXgiCiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2NvbmZpZ3MvbnNpbV9oc19zbXBfZGVmY29uZmlnIGIvYXJjaC9hcmMvY29uZmlncy9uc2ltX2hzX3NtcF9kZWZjb25maWcKaW5kZXggZGM2Zjc0Zi4uOTZiZDFjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvY29uZmlncy9uc2ltX2hzX3NtcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcmMvY29uZmlncy9uc2ltX2hzX3NtcF9kZWZjb25maWcKQEAgLTEsNCArMSw0IEBACi1DT05GSUdfQ1JPU1NfQ09NUElMRT0iYXJjLWxpbnV4LXVjbGliYy0iCitDT05GSUdfQ1JPU1NfQ09NUElMRT0iYXJjLWxpbnV4LSIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0hPU1ROQU1FPSJBUkNMaW51eCIKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19kZWZjb25maWcgYi9hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZwppbmRleCAzZmVmMGEyLi5mY2FlNjY2IDEwMDY0NAotLS0gYS9hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZworKysgYi9hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZwpAQCAtMSw0ICsxLDQgQEAKLUNPTkZJR19DUk9TU19DT01QSUxFPSJhcmMtbGludXgtdWNsaWJjLSIKK0NPTkZJR19DUk9TU19DT01QSUxFPSJhcmMtbGludXgtIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSE9TVE5BTUU9IkFSQ0xpbnV4IgogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX3NtcF9kZWZjb25maWcgYi9hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX3NtcF9kZWZjb25maWcKaW5kZXggNTE3ODQ4My4uYjAxYjY1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJjL2NvbmZpZ3MvbnNpbW9zY2lfaHNfc21wX2RlZmNvbmZpZwpAQCAtMSw0ICsxLDQgQEAKLUNPTkZJR19DUk9TU19DT01QSUxFPSJhcmMtbGludXgtdWNsaWJjLSIKK0NPTkZJR19DUk9TU19DT01QSUxFPSJhcmMtbGludXgtIgogQ09ORklHX0RFRkFVTFRfSE9TVE5BTUU9IkFSQ0xpbnV4IgogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9jb25maWdzL3Zka19oczM4X2RlZmNvbmZpZyBiL2FyY2gvYXJjL2NvbmZpZ3MvdmRrX2hzMzhfZGVmY29uZmlnCmluZGV4IGVmMzVlZjMuLmEwN2YyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2NvbmZpZ3MvdmRrX2hzMzhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJjL2NvbmZpZ3MvdmRrX2hzMzhfZGVmY29uZmlnCkBAIC0xLDQgKzEsNCBAQAotQ09ORklHX0NST1NTX0NPTVBJTEU9ImFyYy1saW51eC11Y2xpYmMtIgorQ09ORklHX0NST1NTX0NPTVBJTEU9ImFyYy1saW51eC0iCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9IT1NUTkFNRT0iQVJDTGludXgiCiAjIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2NvbmZpZ3MvdmRrX2hzMzhfc21wX2RlZmNvbmZpZyBiL2FyY2gvYXJjL2NvbmZpZ3MvdmRrX2hzMzhfc21wX2RlZmNvbmZpZwppbmRleCA2MzQ1MDllLi5mMzZjMDQ3IDEwMDY0NAotLS0gYS9hcmNoL2FyYy9jb25maWdzL3Zka19oczM4X3NtcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcmMvY29uZmlncy92ZGtfaHMzOF9zbXBfZGVmY29uZmlnCkBAIC0xLDQgKzEsNCBAQAotQ09ORklHX0NST1NTX0NPTVBJTEU9ImFyYy1saW51eC11Y2xpYmMtIgorQ09ORklHX0NST1NTX0NPTVBJTEU9ImFyYy1saW51eC0iCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9IT1NUTkFNRT0iQVJDTGludXgiCiAjIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IGFiZjA2ZTguLjIxMGVmM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2NhY2hlLmgKKysrIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtNjIsOSArNjIsNyBAQAogI2RlZmluZSBBUkNfUkVHX0lDX0lWSUMJCTB4MTAKICNkZWZpbmUgQVJDX1JFR19JQ19DVFJMCQkweDExCiAjZGVmaW5lIEFSQ19SRUdfSUNfSVZJTAkJMHgxOQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ19NTVVfVjMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ19NTVVfVjQpCiAjZGVmaW5lIEFSQ19SRUdfSUNfUFRBRwkJMHgxRQotI2VuZGlmCiAjZGVmaW5lIEFSQ19SRUdfSUNfUFRBR19ISQkweDFGCiAKIC8qIEJpdCB2YWwgaW4gSUNfQ1RSTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vaXJxZmxhZ3MtYXJjdjIuaCBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2lycWZsYWdzLWFyY3YyLmgKaW5kZXggYWQ0ODFjMi4uMjU4YjBlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vaXJxZmxhZ3MtYXJjdjIuaAorKysgYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9pcnFmbGFncy1hcmN2Mi5oCkBAIC0zNyw2ICszNyw5IEBACiAjZGVmaW5lIElTQV9JTklUX1NUQVRVU19CSVRTCShTVEFUVVNfSUVfTUFTSyB8IFNUQVRVU19BRF9NQVNLIHwgXAogCQkJCQkoQVJDVjJfSVJRX0RFRl9QUklPIDw8IDEpKQogCisvKiBTTEVFUCBuZWVkcyBkZWZhdWx0IGlycSBwcmlvcml0eSAoPD0pIHdoaWNoIGNhbiBpbnRlcnJ1cHQgdGhlIGRvemUgKi8KKyNkZWZpbmUgSVNBX1NMRUVQX0FSRwkJKDB4MTAgfCBBUkNWMl9JUlFfREVGX1BSSU8pCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9pcnFmbGFncy1jb21wYWN0LmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9pcnFmbGFncy1jb21wYWN0LmgKaW5kZXggZDhjNjA4MS4uYzFkMzY0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vaXJxZmxhZ3MtY29tcGFjdC5oCisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL2lycWZsYWdzLWNvbXBhY3QuaApAQCAtNDMsNiArNDMsOCBAQAogCiAjZGVmaW5lIElTQV9JTklUX1NUQVRVU19CSVRTCVNUQVRVU19JRV9NQVNLCiAKKyNkZWZpbmUgSVNBX1NMRUVQX0FSRwkJMHgzCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL21hY2hfZGVzYy5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vbWFjaF9kZXNjLmgKaW5kZXggNmZmNjU3YS4uYzI4ZTZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vbWFjaF9kZXNjLmgKKysrIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vbWFjaF9kZXNjLmgKQEAgLTIzLDcgKzIzLDcgQEAKICAqIEBkdF9jb21wYXQ6CQlBcnJheSBvZiBkZXZpY2UgdHJlZSAnY29tcGF0aWJsZScgc3RyaW5ncwogICogCQkJKFhYWDogYWx0aG91Z2ggb25seSAxc3QgZW50cnkgaXMgbG9va2VkIGF0KQogICogQGluaXRfZWFybHk6CQlWZXJ5IGVhcmx5IGNhbGxiYWNrIFtjYWxsZWQgZnJvbSBzZXR1cF9hcmNoKCldCi0gKiBAaW5pdF9jcHVfc21wOglmb3IgZWFjaCBDUFUgYXMgaXQgaXMgY29taW5nIHVwIChTTVAgYXMgd2VsbCBhcyBVUCkKKyAqIEBpbml0X3Blcl9jcHU6CWZvciBlYWNoIENQVSBhcyBpdCBpcyBjb21pbmcgdXAgKFNNUCBhcyB3ZWxsIGFzIFVQKQogICogCQkJWyhNKTppbml0X0lSUSgpLCAobyk6c3RhcnRfa2VybmVsX3NlY29uZGFyeSgpXQogICogQGluaXRfbWFjaGluZToJYXJjaCBpbml0Y2FsbCBsZXZlbCBjYWxsYmFjayAoZS5nLiBwb3B1bGF0ZSBzdGF0aWMKICAqIAkJCXBsYXRmb3JtIGRldmljZXMgb3IgcGFyc2UgRGV2aWNldHJlZSkKQEAgLTM1LDcgKzM1LDcgQEAKIAljb25zdCBjaGFyCQkqKmR0X2NvbXBhdDsKIAl2b2lkCQkJKCppbml0X2Vhcmx5KSh2b2lkKTsKICNpZmRlZiBDT05GSUdfU01QCi0Jdm9pZAkJCSgqaW5pdF9jcHVfc21wKSh1bnNpZ25lZCBpbnQpOworCXZvaWQJCQkoKmluaXRfcGVyX2NwdSkodW5zaWduZWQgaW50KTsKICNlbmRpZgogCXZvaWQJCQkoKmluaXRfbWFjaGluZSkodm9pZCk7CiAJdm9pZAkJCSgqaW5pdF9sYXRlKSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMTMzYzg2Ny4uOTkxMzgwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vc21wLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKICAqIEBpbml0X2Vhcmx5X3NtcDoJQSBTTVAgc3BlY2lmaWMgaC93IGJsb2NrIGNhbiBpbml0IGl0c2VsZgogICogCQkJQ291bGQgYmUgY29tbW9uIGFjcm9zcyBwbGF0Zm9ybXMgc28gbm90IGNvdmVyZWQgYnkKICAqIAkJCW1hY2hfZGVzYy0+aW5pdF9lYXJseSgpCi0gKiBAaW5pdF9pcnFfY3B1OglDYWxsZWQgZm9yIGVhY2ggY29yZSBzbyBTTVAgaC93IGJsb2NrIGRyaXZlciBjYW4gZG8KKyAqIEBpbml0X3Blcl9jcHU6CUNhbGxlZCBmb3IgZWFjaCBjb3JlIHNvIFNNUCBoL3cgYmxvY2sgZHJpdmVyIGNhbiBkbwogICogCQkJYW55IG5lZWRlZCBzZXR1cCBwZXIgY3B1IChlLmcuIElQSSByZXF1ZXN0KQogICogQGNwdV9raWNrOgkJRm9yIE1hc3RlciB0byBraWNrc3RhcnQgYSBjcHUgKG9wdGlvbmFsbHkgYXQgYSBQQykKICAqIEBpcGlfc2VuZDoJCVRvIHNlbmQgSVBJIHRvIGEgQGNwdQpAQCAtNTcsNyArNTcsNyBAQAogc3RydWN0IHBsYXRfc21wX29wcyB7CiAJY29uc3QgY2hhciAJKmluZm87CiAJdm9pZAkJKCppbml0X2Vhcmx5X3NtcCkodm9pZCk7Ci0Jdm9pZAkJKCppbml0X2lycV9jcHUpKGludCBjcHUpOworCXZvaWQJCSgqaW5pdF9wZXJfY3B1KShpbnQgY3B1KTsKIAl2b2lkCQkoKmNwdV9raWNrKShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHBjKTsKIAl2b2lkCQkoKmlwaV9zZW5kKShpbnQgY3B1KTsKIAl2b2lkCQkoKmlwaV9jbGVhcikoaW50IGlycSk7CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS91bndpbmQuaCBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3Vud2luZC5oCmluZGV4IDdjYTYyOGIuLmMxMWEyNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3Vud2luZC5oCisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3Vud2luZC5oCkBAIC0xMTIsNyArMTEyLDYgQEAKIAogZXh0ZXJuIGludCBhcmNfdW53aW5kKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqZnJhbWUpOwogZXh0ZXJuIHZvaWQgYXJjX3Vud2luZF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgYXJjX3Vud2luZF9zZXR1cCh2b2lkKTsKIGV4dGVybiB2b2lkICp1bndpbmRfYWRkX3RhYmxlKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgY29uc3Qgdm9pZCAqdGFibGVfc3RhcnQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIHRhYmxlX3NpemUpOwogZXh0ZXJuIHZvaWQgdW53aW5kX3JlbW92ZV90YWJsZSh2b2lkICpoYW5kbGUsIGludCBpbml0X29ubHkpOwpAQCAtMTUyLDkgKzE1MSw2IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNfdW53aW5kX3NldHVwKHZvaWQpCi17Ci19CiAjZGVmaW5lIHVud2luZF9hZGRfdGFibGUoYSwgYiwgYykKICNkZWZpbmUgdW53aW5kX3JlbW92ZV90YWJsZShhLCBiKQogCmRpZmYgLS1naXQgYS9hcmNoL2FyYy9rZXJuZWwvY3R4X3N3LmMgYi9hcmNoL2FyYy9rZXJuZWwvY3R4X3N3LmMKaW5kZXggYzE0YTViZS4uNWQ0NDZkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcmMva2VybmVsL2N0eF9zdy5jCisrKyBiL2FyY2gvYXJjL2tlcm5lbC9jdHhfc3cuYwpAQCAtNTgsOCArNTgsNiBAQAogCQkic3QgICAgICBzcCwgW3IyNF0gICAgICAgXG5cdCIKICNlbmRpZgogCi0JCSJzeW5jICAgXG5cdCIKLQogCQkvKgogCQkgKiBzZXR1cCBfY3VycmVudF90YXNrIHdpdGggaW5jb21pbmcgdHNrLgogCQkgKiBvcHRpb25hbGx5LCBzZXQgcjI1IHRvIHRoYXQgYXMgd2VsbApkaWZmIC0tZ2l0IGEvYXJjaC9hcmMva2VybmVsL2N0eF9zd19hc20uUyBiL2FyY2gvYXJjL2tlcm5lbC9jdHhfc3dfYXNtLlMKaW5kZXggZTI0ODU5NC4uZTY4OTBiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMva2VybmVsL2N0eF9zd19hc20uUworKysgYi9hcmNoL2FyYy9rZXJuZWwvY3R4X3N3X2FzbS5TCkBAIC00NCw5ICs0NCw2IEBACiAJKiBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gcmV0dXJuIGl0CiAJKi8KIAotCS8qIGhhcmR3YXJlIG1lbW9yeSBiYXJyaWVyICovCi0Jc3luYwotCiAJLyoKIAkgKiBzd2l0Y2ggdG8gbmV3IHRhc2ssIGNvbnRhaW5lZCBpbiByMQogCSAqIFRlbXAgcmVnIHIzIGlzIHJlcXVpcmVkIHRvIGdldCB0aGUgcHRyIHRvIHN0b3JlIHZhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcmMva2VybmVsL2ludGMtYXJjdjIuYyBiL2FyY2gvYXJjL2tlcm5lbC9pbnRjLWFyY3YyLmMKaW5kZXggMjZjMTU2OC4uMDM5NGY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcmMva2VybmVsL2ludGMtYXJjdjIuYworKysgYi9hcmNoL2FyYy9rZXJuZWwvaW50Yy1hcmN2Mi5jCkBAIC0xMDYsMTAgKzEwNiwyMSBAQAogc3RhdGljIGludCBhcmN2Ml9pcnFfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaXJxLAogCQkJIGlycV9od19udW1iZXJfdCBodykKIHsKLQlpZiAoaXJxID09IFRJTUVSMF9JUlEgfHwgaXJxID09IElQSV9JUlEpCisJLyoKKwkgKiBjb3JlIGludGMgSVJRcyBbMTYsIDIzXToKKwkgKiBTdGF0aWNhbGx5IGFzc2lnbmVkIGFsd2F5cyBwcml2YXRlLXBlci1jb3JlIChUaW1lcnMsIFdEVCwgSVBJLCBQQ1QpCisJICovCisJaWYgKGh3IDwgMjQpIHsKKwkJLyoKKwkJICogQSBzdWJzZXF1ZW50IHJlcXVlc3RfcGVyY3B1X2lycSgpIGZhaWxzIGlmIHBlcmNwdV9kZXZpZCBpcworCQkgKiBub3Qgc2V0LiBUaGF0IGluIHR1cm5zIHNldHMgTk9BVVRPRU4sIG1lYW5pbmcgZWFjaCBjb3JlIG5lZWRzCisJCSAqIHRvIGNhbGwgZW5hYmxlX3BlcmNwdV9pcnEoKQorCQkgKi8KKwkJaXJxX3NldF9wZXJjcHVfZGV2aWQoaXJxKTsKIAkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJmFyY3YyX2lycV9jaGlwLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZhcmN2Ml9pcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9rZXJuZWwvaXJxLmMgYi9hcmNoL2FyYy9rZXJuZWwvaXJxLmMKaW5kZXggMmVlMjI2NS4uYmExN2Y4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJjL2tlcm5lbC9pcnEuYwpAQCAtMjksMTEgKzI5LDExIEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogYSBTTVAgSC93IGJsb2NrIGNvdWxkIGRvIElQSSBJUlEgcmVxdWVzdCBoZXJlICovCi0JaWYgKHBsYXRfc21wX29wcy5pbml0X2lycV9jcHUpCi0JCXBsYXRfc21wX29wcy5pbml0X2lycV9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAocGxhdF9zbXBfb3BzLmluaXRfcGVyX2NwdSkKKwkJcGxhdF9zbXBfb3BzLmluaXRfcGVyX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCi0JaWYgKG1hY2hpbmVfZGVzYy0+aW5pdF9jcHVfc21wKQotCQltYWNoaW5lX2Rlc2MtPmluaXRfY3B1X3NtcChzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmIChtYWNoaW5lX2Rlc2MtPmluaXRfcGVyX2NwdSkKKwkJbWFjaGluZV9kZXNjLT5pbml0X3Blcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKICNlbmRpZgogfQogCkBAIC01MSw2ICs1MSwxOCBAQAogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CiAKKy8qCisgKiBBUEkgY2FsbGVkIGZvciByZXF1ZXN0aW5nIHBlcmNwdSBpbnRlcnJ1cHRzIC0gY2FsbGVkIGJ5IGVhY2ggQ1BVCisgKiAgLSBGb3IgYm9vdCBDUFUsIGFjdHVhbGx5IHJlcXVlc3QgdGhlIElSUSB3aXRoIGdlbmlycSBjb3JlICsgZW5hYmxlcworICogIC0gRm9yIHN1YnNlcXVlbnQgY2FsbGVycyBvbmx5IGVuYWJsZSBjYWxsZWQgbG9jYWxseQorICoKKyAqIFJlbGllcyBvbiBiZWluZyBjYWxsZWQgYnkgYm9vdCBjcHUgZmlyc3QgKGkuZS4gcmVxdWVzdCBjYWxsZWQgYWhlYWQpIG9mCisgKiBhbnkgZW5hYmxlIGFzIGV4cGVjdGVkIGJ5IGdlbmlycS4gSGVuY2UgU3VpdGFibGUgb25seSBmb3IgVElNRVIsIElQSQorICogd2hpY2ggYXJlIGd1YXJhbnRlZWQgdG8gYmUgc2V0dXAgb24gYm9vdCBjb3JlIGZpcnN0LgorICogTGF0ZSBwcm9iZWQgcGVyaXBoZXJhbHMgc3VjaCBhcyBwZXJmIGNhbid0IHVzZSB0aGlzIGFzIHRoZXJlIG5vIGd1YXJhbnRlZQorICogb2YgYmVpbmcgY2FsbGVkIG9uIGJvb3QgQ1BVIGZpcnN0LgorICovCisKIHZvaWQgYXJjX3JlcXVlc3RfcGVyY3B1X2lycShpbnQgaXJxLCBpbnQgY3B1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycXJldHVybl90ICgqaXNyKShpbnQgaXJxLCB2b2lkICpkZXYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlycV9ubSwKQEAgLTYwLDE0ICs3MiwxNyBAQAogCWlmICghY3B1KSB7CiAJCWludCByYzsKIAorI2lmZGVmIENPTkZJR19JU0FfQVJDT01QQUNUCiAJCS8qCi0JCSAqIFRoZXNlIDIgY2FsbHMgYXJlIGVzc2VudGlhbCB0byBtYWtpbmcgcGVyY3B1IElSUSBBUElzIHdvcmsKLQkJICogSWRlYWxseSB0aGVzZSBkZXRhaWxzIGNvdWxkIGJlIGhpZGRlbiBpbiBpcnEgY2hpcCBtYXAgZnVuY3Rpb24KLQkJICogYnV0IHRoZSBpc3N1ZSBpcyBJUElzIElSUXMgYmVpbmcgc3RhdGljIChub24tRFQpIGFuZCBwbGF0Zm9ybQotCQkgKiBzcGVjaWZpYywgc28gd2UgY2FuJ3QgaWRlbnRpZnkgdGhlbSB0aGVyZS4KKwkJICogQSBzdWJzZXF1ZW50IHJlcXVlc3RfcGVyY3B1X2lycSgpIGZhaWxzIGlmIHBlcmNwdV9kZXZpZCBpcworCQkgKiBub3Qgc2V0LiBUaGF0IGluIHR1cm5zIHNldHMgTk9BVVRPRU4sIG1lYW5pbmcgZWFjaCBjb3JlIG5lZWRzCisJCSAqIHRvIGNhbGwgZW5hYmxlX3BlcmNwdV9pcnEoKQorCQkgKgorCQkgKiBGb3IgQVJDdjIsIHRoaXMgaXMgZG9uZSBpbiBpcnEgbWFwIGZ1bmN0aW9uIHNpbmNlIHdlIGtub3cKKwkJICogd2hpY2ggaXJxcyBhcmUgc3RyaWN0bHkgcGVyIGNwdQogCQkgKi8KIAkJaXJxX3NldF9wZXJjcHVfZGV2aWQoaXJxKTsKLQkJaXJxX21vZGlmeV9zdGF0dXMoaXJxLCBJUlFfTk9BVVRPRU4sIDApOyAgLyogQGlycSwgQGNsciwgQHNldCAqLworI2VuZGlmCiAKIAkJcmMgPSByZXF1ZXN0X3BlcmNwdV9pcnEoaXJxLCBpc3IsIGlycV9ubSwgcGVyY3B1X2Rldik7CiAJCWlmIChyYykKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2tlcm5lbC9tY2lwLmMgYi9hcmNoL2FyYy9rZXJuZWwvbWNpcC5jCmluZGV4IDc0YTliMDcuLmJkMjM3YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2tlcm5lbC9tY2lwLmMKKysrIGIvYXJjaC9hcmMva2VybmVsL21jaXAuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiBzdHJ1Y3QgcGxhdF9zbXBfb3BzIHBsYXRfc21wX29wcyA9IHsKIAkuaW5mbwkJPSBzbXBfY3B1aW5mb19idWYsCiAJLmluaXRfZWFybHlfc21wCT0gbWNpcF9wcm9iZV9uX3NldHVwLAotCS5pbml0X2lycV9jcHUJPSBtY2lwX3NldHVwX3Blcl9jcHUsCisJLmluaXRfcGVyX2NwdQk9IG1jaXBfc2V0dXBfcGVyX2NwdSwKIAkuaXBpX3NlbmQJPSBtY2lwX2lwaV9zZW5kLAogCS5pcGlfY2xlYXIJPSBtY2lwX2lwaV9jbGVhciwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9hcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCAwYzA4YmIxLi44YjEzNGNmIDEwMDY0NAotLS0gYS9hcmNoL2FyYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTQyOCwxMiArNDI4LDExIEBACiAKICNlbmRpZiAvKiBDT05GSUdfSVNBX0FSQ1YyICovCiAKLXZvaWQgYXJjX2NwdV9wbXVfaXJxX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGFyY19jcHVfcG11X2lycV9pbml0KHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGFyY19wbXVfY3B1ICpwbXVfY3B1ID0gdGhpc19jcHVfcHRyKCZhcmNfcG11X2NwdSk7CisJaW50IGlycSA9ICooaW50ICopZGF0YTsKIAotCWFyY19yZXF1ZXN0X3BlcmNwdV9pcnEoYXJjX3BtdS0+aXJxLCBzbXBfcHJvY2Vzc29yX2lkKCksIGFyY19wbXVfaW50ciwKLQkJCSAgICAgICAiQVJDIHBlcmYgY291bnRlcnMiLCBwbXVfY3B1KTsKKwllbmFibGVfcGVyY3B1X2lycShpcnEsIElSUV9UWVBFX05PTkUpOwogCiAJLyogQ2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0IGZsYWdzICovCiAJd3JpdGVfYXV4X3JlZyhBUkNfUkVHX1BDVF9JTlRfQUNULCAweGZmZmZmZmZmKTsKQEAgLTUxNSw3ICs1MTQsNiBAQAogCiAJaWYgKGhhc19pbnRlcnJ1cHRzKSB7CiAJCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCWlmIChpcnEgPCAwKSB7CiAJCQlwcl9lcnIoIkNhbm5vdCBnZXQgSVJRIG51bWJlciBmb3IgdGhlIHBsYXRmb3JtXG4iKTsKQEAgLTUyNCwyNCArNTIyLDEyIEBACiAKIAkJYXJjX3BtdS0+aXJxID0gaXJxOwogCi0JCS8qCi0JCSAqIGFyY19jcHVfcG11X2lycV9pbml0KCkgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIGFsbCBjb3JlcyBmb3IKLQkJICogdGhlaXIgcmVzcGVjdGl2ZSBsb2NhbCBQTVUuCi0JCSAqIEhvd2V2ZXIgd2UgdXNlIG9wZW5jb2RlZCBvbl9lYWNoX2NwdSgpIHRvIGVuc3VyZSBpdCBpcyBjYWxsZWQKLQkJICogb24gY29yZTAgZmlyc3QsIHNvIHRoYXQgYXJjX3JlcXVlc3RfcGVyY3B1X2lycSgpIHNldHMgdXAKLQkJICogQVVUT0VOIGV0Yy4gT3RoZXJ3aXNlIGVuYWJsZV9wZXJjcHVfaXJxKCkgZmFpbHMgdG8gZW5hYmxlCi0JCSAqIHBlcmYgSVJRIG9uIG5vbiBtYXN0ZXIgY29yZXMuCi0JCSAqIHNlZSBhcmNfcmVxdWVzdF9wZXJjcHVfaXJxKCkKLQkJICovCi0JCXByZWVtcHRfZGlzYWJsZSgpOwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWFyY19jcHVfcG11X2lycV9pbml0KCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJc21wX2NhbGxfZnVuY3Rpb24oKHNtcF9jYWxsX2Z1bmNfdClhcmNfY3B1X3BtdV9pcnFfaW5pdCwgMCwgMSk7Ci0JCXByZWVtcHRfZW5hYmxlKCk7CisJCS8qIGludGMgbWFwIGZ1bmN0aW9uIGVuc3VyZXMgaXJxX3NldF9wZXJjcHVfZGV2aWQoKSBjYWxsZWQgKi8KKwkJcmVxdWVzdF9wZXJjcHVfaXJxKGlycSwgYXJjX3BtdV9pbnRyLCAiQVJDIHBlcmYgY291bnRlcnMiLAorCQkJCSAgIHRoaXNfY3B1X3B0cigmYXJjX3BtdV9jcHUpKTsKIAotCQkvKiBDbGVhbiBhbGwgcGVuZGluZyBpbnRlcnJ1cHQgZmxhZ3MgKi8KLQkJd3JpdGVfYXV4X3JlZyhBUkNfUkVHX1BDVF9JTlRfQUNULCAweGZmZmZmZmZmKTsKKwkJb25fZWFjaF9jcHUoYXJjX2NwdV9wbXVfaXJxX2luaXQsICZpcnEsIDEpOworCiAJfSBlbHNlCiAJCWFyY19wbXUtPnBtdS5jYXBhYmlsaXRpZXMgfD0gUEVSRl9QTVVfQ0FQX05PX0lOVEVSUlVQVDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOTFkNWEwZi4uYTNmNzUwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FyYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC00NCwxMSArNDQsMTAgQEAKIHZvaWQgYXJjaF9jcHVfaWRsZSh2b2lkKQogewogCS8qIHNsZWVwLCBidXQgZW5hYmxlIGFsbCBpbnRlcnJ1cHRzIGJlZm9yZSBjb21taXR0aW5nICovCi0JaWYgKGlzX2lzYV9hcmNvbXBhY3QoKSkgewotCQlfX2FzbV9fKCJzbGVlcCAweDMiKTsKLQl9IGVsc2UgewotCQlfX2FzbV9fKCJzbGVlcCAweDEwIik7Ci0JfQorCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkic2xlZXAgJTAJXG4iCisJCToKKwkJOiJJIihJU0FfU0xFRVBfQVJHKSk7IC8qIGNhbid0IGJlICJyIiBoYXMgdG8gYmUgZW1iZWRkZWQgY29uc3QgKi8KIH0KIAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJjL2tlcm5lbC9zZXR1cC5jCmluZGV4IGMzM2U3N2MuLmUxYjg3NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJjL2tlcm5lbC9zZXR1cC5jCkBAIC00MjksNyArNDI5LDYgQEAKICNlbmRpZgogCiAJYXJjX3Vud2luZF9pbml0KCk7Ci0JYXJjX3Vud2luZF9zZXR1cCgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBjdXN0b21pemVfbWFjaGluZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMva2VybmVsL3NtcC5jIGIvYXJjaC9hcmMva2VybmVsL3NtcC5jCmluZGV4IDU4MDU4NzguLmVmNmU5ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FyYy9rZXJuZWwvc21wLmMKQEAgLTEzMiwxMSArMTMyLDExIEBACiAJcHJfaW5mbygiIyMgQ1BVJXUgTElWRSAjIzogRXhlY3V0aW5nIENvZGUuLi5cbiIsIGNwdSk7CiAKIAkvKiBTb21lIFNNUCBIL3cgc2V0dXAgLSBmb3IgZWFjaCBjcHUgKi8KLQlpZiAocGxhdF9zbXBfb3BzLmluaXRfaXJxX2NwdSkKLQkJcGxhdF9zbXBfb3BzLmluaXRfaXJxX2NwdShjcHUpOworCWlmIChwbGF0X3NtcF9vcHMuaW5pdF9wZXJfY3B1KQorCQlwbGF0X3NtcF9vcHMuaW5pdF9wZXJfY3B1KGNwdSk7CiAKLQlpZiAobWFjaGluZV9kZXNjLT5pbml0X2NwdV9zbXApCi0JCW1hY2hpbmVfZGVzYy0+aW5pdF9jcHVfc21wKGNwdSk7CisJaWYgKG1hY2hpbmVfZGVzYy0+aW5pdF9wZXJfY3B1KQorCQltYWNoaW5lX2Rlc2MtPmluaXRfcGVyX2NwdShjcHUpOwogCiAJYXJjX2xvY2FsX3RpbWVyX3NldHVwKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvYXJjL2tlcm5lbC91bndpbmQuYwppbmRleCA5M2M2ZWE1Li41ZWI3MDc2IDEwMDY0NAotLS0gYS9hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9hcmMva2VybmVsL3Vud2luZC5jCkBAIC0xNzAsNiArMTcwLDIzIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfcG9pbnRlcihjb25zdCB1OCAqKnBMb2MsCiAJCQkJICBjb25zdCB2b2lkICplbmQsIHNpZ25lZCBwdHJUeXBlKTsKK3N0YXRpYyB2b2lkIGluaXRfdW53aW5kX2hkcihzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWJsZSwKKwkJCSAgICB2b2lkICooKmFsbG9jKSAodW5zaWduZWQgbG9uZykpOworCisvKgorICogd3JhcHBlcnMgZm9yIGhlYWRlciBhbGxvYyAodnMuIGNhbGxpbmcgb25lIHZzLiBvdGhlciBhdCBjYWxsIHNpdGUpCisgKiB0byBlbGlkZSBzZWN0aW9uIG1pc21hdGNoZXMgd2FybmluZ3MKKyAqLworc3RhdGljIHZvaWQgKl9faW5pdCB1bndfaGRyX2FsbG9jX2Vhcmx5KHVuc2lnbmVkIGxvbmcgc3opCit7CisJcmV0dXJuIF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHN6LCBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJCQkgICAgICAgTUFYX0RNQV9BRERSRVNTKTsKK30KKworc3RhdGljIHZvaWQgKnVud19oZHJfYWxsb2ModW5zaWduZWQgbG9uZyBzeikKK3sKKwlyZXR1cm4ga21hbGxvYyhzeiwgR0ZQX0tFUk5FTCk7Cit9CiAKIHN0YXRpYyB2b2lkIGluaXRfdW53aW5kX3RhYmxlKHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlLCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgY29uc3Qgdm9pZCAqY29yZV9zdGFydCwgdW5zaWduZWQgbG9uZyBjb3JlX3NpemUsCkBAIC0yMDksNiArMjI2LDggQEAKIAkJCSAgX19zdGFydF91bndpbmQsIF9fZW5kX3Vud2luZCAtIF9fc3RhcnRfdW53aW5kLAogCQkJICBOVUxMLCAwKTsKIAkgIC8qX19zdGFydF91bndpbmRfaGRyLCBfX2VuZF91bndpbmRfaGRyIC0gX19zdGFydF91bndpbmRfaGRyKTsqLworCisJaW5pdF91bndpbmRfaGRyKCZyb290X3RhYmxlLCB1bndfaGRyX2FsbG9jX2Vhcmx5KTsKIH0KIAogc3RhdGljIGNvbnN0IHUzMiBiYWRfY2llLCBub3RfZmRlOwpAQCAtMjQxLDggKzI2MCw4IEBACiAJZTItPmZkZSA9IHY7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF91bndpbmRfdGFibGUoc3RydWN0IHVud2luZF90YWJsZSAqdGFibGUsCi0JCQkJICAgICAgdm9pZCAqKCphbGxvYykgKHVuc2lnbmVkIGxvbmcpKQorc3RhdGljIHZvaWQgaW5pdF91bndpbmRfaGRyKHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlLAorCQkJICAgIHZvaWQgKigqYWxsb2MpICh1bnNpZ25lZCBsb25nKSkKIHsKIAljb25zdCB1OCAqcHRyOwogCXVuc2lnbmVkIGxvbmcgdGFibGVTaXplID0gdGFibGUtPnNpemUsIGhkclNpemU7CkBAIC0yNzcsMTAgKzI5NiwxMCBAQAogCQlpZiAoY2llID09ICZub3RfZmRlKQogCQkJY29udGludWU7CiAJCWlmIChjaWUgPT0gTlVMTCB8fCBjaWUgPT0gJmJhZF9jaWUpCi0JCQlyZXR1cm47CisJCQlnb3RvIHJldF9lcnI7CiAJCXB0clR5cGUgPSBmZGVfcG9pbnRlcl90eXBlKGNpZSk7CiAJCWlmIChwdHJUeXBlIDwgMCkKLQkJCXJldHVybjsKKwkJCWdvdG8gcmV0X2VycjsKIAogCQlwdHIgPSAoY29uc3QgdTggKikoZmRlICsgMik7CiAJCWlmICghcmVhZF9wb2ludGVyKCZwdHIsIChjb25zdCB1OCAqKShmZGUgKyAxKSArICpmZGUsCkBAIC0yOTYsMTMgKzMxNSwxNSBAQAogCX0KIAogCWlmICh0YWJsZVNpemUgfHwgIW4pCi0JCXJldHVybjsKKwkJZ290byByZXRfZXJyOwogCiAJaGRyU2l6ZSA9IDQgKyBzaXplb2YodW5zaWduZWQgbG9uZykgKyBzaXplb2YodW5zaWduZWQgaW50KQogCSAgICArIDIgKiBuICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCiAJaGVhZGVyID0gYWxsb2MoaGRyU2l6ZSk7CiAJaWYgKCFoZWFkZXIpCi0JCXJldHVybjsKKwkJZ290byByZXRfZXJyOworCiAJaGVhZGVyLT52ZXJzaW9uID0gMTsKIAloZWFkZXItPmVoX2ZyYW1lX3B0cl9lbmMgPSBEV19FSF9QRV9hYnMgfCBEV19FSF9QRV9uYXRpdmU7CiAJaGVhZGVyLT5mZGVfY291bnRfZW5jID0gRFdfRUhfUEVfYWJzIHwgRFdfRUhfUEVfZGF0YTQ7CkBAIC0zNDAsMTggKzM2MSwxMCBAQAogCXRhYmxlLT5oZHJzeiA9IGhkclNpemU7CiAJc21wX3dtYigpOwogCXRhYmxlLT5oZWFkZXIgPSAoY29uc3Qgdm9pZCAqKWhlYWRlcjsKLX0KKwlyZXR1cm47CiAKLXN0YXRpYyB2b2lkICpfX2luaXQgYmFsbG9jKHVuc2lnbmVkIGxvbmcgc3opCi17Ci0JcmV0dXJuIF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHN6LAotCQkJCSAgICAgICBzaXplb2YodW5zaWduZWQgaW50KSwKLQkJCQkgICAgICAgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKLX0KLQotdm9pZCBfX2luaXQgYXJjX3Vud2luZF9zZXR1cCh2b2lkKQotewotCXNldHVwX3Vud2luZF90YWJsZSgmcm9vdF90YWJsZSwgYmFsbG9jKTsKK3JldF9lcnI6CisJcGFuaWMoIkF0dGVudGlvbiAhISEgRHdhcmYgRkRFIHBhcnNpbmcgZXJyb3JzXG4iKTs7CiB9CiAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwpAQCAtMzc3LDYgKzM5MCw4IEBACiAJCQkgIHRhYmxlX3N0YXJ0LCB0YWJsZV9zaXplLAogCQkJICBOVUxMLCAwKTsKIAorCWluaXRfdW53aW5kX2hkcih0YWJsZSwgdW53X2hkcl9hbGxvYyk7CisKICNpZmRlZiBVTldJTkRfREVCVUcKIAl1bndfZGVidWcoIlRhYmxlIGFkZGVkIGZvciBbJXNdICVseCAlbHhcbiIsCiAJCW1vZHVsZS0+bmFtZSwgdGFibGUtPmNvcmUucGMsIHRhYmxlLT5jb3JlLnJhbmdlKTsKQEAgLTQzOSw2ICs0NTQsNyBAQAogCWluZm8uaW5pdF9vbmx5ID0gaW5pdF9vbmx5OwogCiAJdW5saW5rX3RhYmxlKCZpbmZvKTsgLyogWFhYOiBTTVAgKi8KKwlrZnJlZSh0YWJsZS0+aGVhZGVyKTsKIAlrZnJlZSh0YWJsZSk7CiB9CiAKQEAgLTU4OCw5ICs2MDQsNiBAQAogCWNvbnN0IHU4ICpwdHIgPSAoY29uc3QgdTggKikoY2llICsgMik7CiAJdW5zaWduZWQgdmVyc2lvbiA9ICpwdHI7CiAKLQlpZiAodmVyc2lvbiAhPSAxKQotCQlyZXR1cm4gLTE7CS8qIHVuc3VwcG9ydGVkICovCi0KIAlpZiAoKisrcHRyKSB7CiAJCWNvbnN0IGNoYXIgKmF1ZzsKIAkJY29uc3QgdTggKmVuZCA9IChjb25zdCB1OCAqKShjaWUgKyAxKSArICpjaWU7CkBAIC05ODYsNDIgKzk5OSwxMyBAQAogCQkJCQkJCSAgICAoY29uc3QgdTggKikoZmRlICsKIAkJCQkJCQkJCSAxKSArCiAJCQkJCQkJICAgICpmZGUsIHB0clR5cGUpOwotCQkJCWlmIChwYyA+PSBlbmRMb2MpCisJCQkJaWYgKHBjID49IGVuZExvYykgewogCQkJCQlmZGUgPSBOVUxMOwotCQkJfSBlbHNlCi0JCQkJZmRlID0gTlVMTDsKLQkJfQotCQlpZiAoZmRlID09IE5VTEwpIHsKLQkJCWZvciAoZmRlID0gdGFibGUtPmFkZHJlc3MsIHRhYmxlU2l6ZSA9IHRhYmxlLT5zaXplOwotCQkJICAgICBjaWUgPSBOVUxMLCB0YWJsZVNpemUgPiBzaXplb2YoKmZkZSkKLQkJCSAgICAgJiYgdGFibGVTaXplIC0gc2l6ZW9mKCpmZGUpID49ICpmZGU7Ci0JCQkgICAgIHRhYmxlU2l6ZSAtPSBzaXplb2YoKmZkZSkgKyAqZmRlLAotCQkJICAgICBmZGUgKz0gMSArICpmZGUgLyBzaXplb2YoKmZkZSkpIHsKLQkJCQljaWUgPSBjaWVfZm9yX2ZkZShmZGUsIHRhYmxlKTsKLQkJCQlpZiAoY2llID09ICZiYWRfY2llKSB7CiAJCQkJCWNpZSA9IE5VTEw7Ci0JCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlpZiAoY2llID09IE5VTEwKLQkJCQkgICAgfHwgY2llID09ICZub3RfZmRlCi0JCQkJICAgIHx8IChwdHJUeXBlID0gZmRlX3BvaW50ZXJfdHlwZShjaWUpKSA8IDApCi0JCQkJCWNvbnRpbnVlOwotCQkJCXB0ciA9IChjb25zdCB1OCAqKShmZGUgKyAyKTsKLQkJCQlzdGFydExvYyA9IHJlYWRfcG9pbnRlcigmcHRyLAotCQkJCQkJCShjb25zdCB1OCAqKShmZGUgKyAxKSArCi0JCQkJCQkJKmZkZSwgcHRyVHlwZSk7Ci0JCQkJaWYgKCFzdGFydExvYykKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKCEocHRyVHlwZSAmIERXX0VIX1BFX2luZGlyZWN0KSkKLQkJCQkJcHRyVHlwZSAmPQotCQkJCQkgICAgRFdfRUhfUEVfRk9STSB8IERXX0VIX1BFX3NpZ25lZDsKLQkJCQllbmRMb2MgPQotCQkJCSAgICBzdGFydExvYyArIHJlYWRfcG9pbnRlcigmcHRyLAotCQkJCQkJCSAgICAoY29uc3QgdTggKikoZmRlICsKLQkJCQkJCQkJCSAxKSArCi0JCQkJCQkJICAgICpmZGUsIHB0clR5cGUpOwotCQkJCWlmIChwYyA+PSBzdGFydExvYyAmJiBwYyA8IGVuZExvYykKLQkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWZkZSA9IE5VTEw7CisJCQkJY2llID0gTlVMTDsKIAkJCX0KIAkJfQogCX0KQEAgLTEwMzEsOSArMTAxNSw3IEBACiAJCXB0ciA9IChjb25zdCB1OCAqKShjaWUgKyAyKTsKIAkJZW5kID0gKGNvbnN0IHU4ICopKGNpZSArIDEpICsgKmNpZTsKIAkJZnJhbWUtPmNhbGxfZnJhbWUgPSAxOwotCQlpZiAoKHN0YXRlLnZlcnNpb24gPSAqcHRyKSAhPSAxKQotCQkJY2llID0gTlVMTDsJLyogdW5zdXBwb3J0ZWQgdmVyc2lvbiAqLwotCQllbHNlIGlmICgqKytwdHIpIHsKKwkJaWYgKCorK3B0cikgewogCQkJLyogY2hlY2sgaWYgYXVnbWVudGF0aW9uIHNpemUgaXMgZmlyc3QgKHRodXMgcHJlc2VudCkgKi8KIAkJCWlmICgqcHRyID09ICd6JykgewogCQkJCXdoaWxlICgrK3B0ciA8IGVuZCAmJiAqcHRyKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FyYy9tbS9oaWdobWVtLmMgYi9hcmNoL2FyYy9tbS9oaWdobWVtLmMKaW5kZXggMDY1ZWU2Yi4uOTJkZDkyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcmMvbW0vaGlnaG1lbS5jCisrKyBiL2FyY2gvYXJjL21tL2hpZ2htZW0uYwpAQCAtMTExLDcgKzExMSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fa3VubWFwX2F0b21pYyk7CiAKLW5vaW5saW5lIHB0ZV90ICphbGxvY19rbWFwX3BndGFibGUodW5zaWduZWQgbG9uZyBrdmFkZHIpCitzdGF0aWMgbm9pbmxpbmUgcHRlX3QgKiBfX2luaXQgYWxsb2Nfa21hcF9wZ3RhYmxlKHVuc2lnbmVkIGxvbmcga3ZhZGRyKQogewogCXBnZF90ICpwZ2RfazsKIAlwdWRfdCAqcHVkX2s7CkBAIC0xMjcsNyArMTI3LDcgQEAKIAlyZXR1cm4gcHRlX2s7CiB9CiAKLXZvaWQga21hcF9pbml0KHZvaWQpCit2b2lkIF9faW5pdCBrbWFwX2luaXQodm9pZCkKIHsKIAkvKiBEdWUgdG8gcmVjdXJzaXZlIGluY2x1ZGUgaGVsbCwgd2UgY2FuJ3QgZG8gdGhpcyBpbiBwcm9jZXNzb3IuaCAqLwogCUJVSUxEX0JVR19PTihQQUdFX09GRlNFVCA8IChWTUFMTE9DX0VORCArIEZJWE1BUF9TSVpFICsgUEtNQVBfU0laRSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvbW0vaW5pdC5jIGIvYXJjaC9hcmMvbW0vaW5pdC5jCmluZGV4IGE5MzA1YjUuLjdkMmM0ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL21tL2luaXQuYworKysgYi9hcmNoL2FyYy9tbS9pbml0LmMKQEAgLTUxLDcgKzUxLDkgQEAKIAlpbnQgaW5fdXNlID0gMDsKIAogCWlmICghbG93X21lbV9zeikgewotCQlCVUdfT04oYmFzZSAhPSBsb3dfbWVtX3N0YXJ0KTsKKwkJaWYgKGJhc2UgIT0gbG93X21lbV9zdGFydCkKKwkJCXBhbmljKCJDT05GSUdfTElOVVhfTElOS19CQVNFICE9IERUIG1lbW9yeSB7IH0iKTsKKwogCQlsb3dfbWVtX3N6ID0gc2l6ZTsKIAkJaW5fdXNlID0gMTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvbW0vdGxiLmMgYi9hcmNoL2FyYy9tbS90bGIuYwppbmRleCAwZWU3Mzk4Li5kYWYyYmY1IDEwMDY0NAotLS0gYS9hcmNoL2FyYy9tbS90bGIuYworKysgYi9hcmNoL2FyYy9tbS90bGIuYwpAQCAtNjE5LDEwICs2MTksMTAgQEAKIAogCQlpbnQgZGlydHkgPSAhdGVzdF9hbmRfc2V0X2JpdChQR19kY19jbGVhbiwgJnBhZ2UtPmZsYWdzKTsKIAkJaWYgKGRpcnR5KSB7Ci0JCQkvKiB3YmFjayArIGludiBkY2FjaGUgbGluZXMgKi8KKwkJCS8qIHdiYWNrICsgaW52IGRjYWNoZSBsaW5lcyAoSy1tYXBwaW5nKSAqLwogCQkJX19mbHVzaF9kY2FjaGVfcGFnZShwYWRkciwgcGFkZHIpOwogCi0JCQkvKiBpbnZhbGlkYXRlIGFueSBleGlzdGluZyBpY2FjaGUgbGluZXMgKi8KKwkJCS8qIGludmFsaWRhdGUgYW55IGV4aXN0aW5nIGljYWNoZSBsaW5lcyAoVS1tYXBwaW5nKSAqLwogCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQogCQkJCV9faW52X2ljYWNoZV9wYWdlKHBhZGRyLCB2YWRkcik7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDAzNjVjYmIuLjM0ZTE1NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtNzYsNiArNzYsOCBAQAogCXNlbGVjdCBJUlFfRk9SQ0VEX1RIUkVBRElORwogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMCiAJc2VsZWN0IE5PX0JPT1RNRU0KKwlzZWxlY3QgT0ZfRUFSTFlfRkxBVFRSRUUgaWYgT0YKKwlzZWxlY3QgT0ZfUkVTRVJWRURfTUVNIGlmIE9GCiAJc2VsZWN0IE9MRF9TSUdBQ1RJT04KIAlzZWxlY3QgT0xEX1NJR1NVU1BFTkQzCiAJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKQEAgLTE4MjIsOCArMTgyNCw2IEBACiAJYm9vbCAiRmxhdHRlbmVkIERldmljZSBUcmVlIHN1cHBvcnQiCiAJc2VsZWN0IElSUV9ET01BSU4KIAlzZWxlY3QgT0YKLQlzZWxlY3QgT0ZfRUFSTFlfRkxBVFRSRUUKLQlzZWxlY3QgT0ZfUkVTRVJWRURfTUVNCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBmbGF0dGVuZWQgZGV2aWNlIHRyZWUgbWFjaGluZSBkZXNjcmlwdGlvbnMuCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDM3Mi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00MzcyLmR0c2kKaW5kZXggZDgzZmY5Yy4uZGU4NzkxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00MzcyLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00MzcyLmR0c2kKQEAgLTc0LDcgKzc0LDcgQEAKIAkJcmVnID0gPDB4NDgyNDAyMDAgMHgxMDA+OwogCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTEgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47Ci0JCWNsb2NrcyA9IDwmZHBsbF9tcHVfbTJfY2s+OworCQljbG9ja3MgPSA8Jm1wdV9wZXJpcGhjbGs+OwogCX07CiAKIAlsb2NhbF90aW1lcjogdGltZXJANDgyNDA2MDAgewpAQCAtODIsNyArODIsNyBAQAogCQlyZWcgPSA8MHg0ODI0MDYwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8R0lDX1BQSSAxMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKLQkJY2xvY2tzID0gPCZkcGxsX21wdV9tMl9jaz47CisJCWNsb2NrcyA9IDwmbXB1X3BlcmlwaGNsaz47CiAJfTsKIAogCWwyLWNhY2hlLWNvbnRyb2xsZXJANDgyNDIwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW00M3h4LWNsb2Nrcy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW00M3h4LWNsb2Nrcy5kdHNpCmluZGV4IGNjODg3MjguLmEzOGFmMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNDN4eC1jbG9ja3MuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTQzeHgtY2xvY2tzLmR0c2kKQEAgLTI1OSw2ICsyNTksMTQgQEAKIAkJdGksaW52ZXJ0LWF1dG9pZGxlLWJpdDsKIAl9OwogCisJbXB1X3BlcmlwaGNsazogbXB1X3BlcmlwaGNsayB7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOworCQljbG9ja3MgPSA8JmRwbGxfbXB1X20yX2NrPjsKKwkJY2xvY2stbXVsdCA9IDwxPjsKKwkJY2xvY2stZGl2ID0gPDI+OworCX07CisKIAlkcGxsX2Rkcl9jazogZHBsbF9kZHJfY2sgewogCQkjY2xvY2stY2VsbHMgPSA8MD47CiAJCWNvbXBhdGlibGUgPSAidGksYW0zLWRwbGwtY2xvY2siOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW01N3h4LWJlYWdsZS14MTUuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW01N3h4LWJlYWdsZS14MTUuZHRzCmluZGV4IGQ5YmE2YjguLjAwMzUyZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtNTd4eC1iZWFnbGUteDE1LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTU3eHgtYmVhZ2xlLXgxNS5kdHMKQEAgLTYwNCw2ICs2MDQsNyBAQAogCQlyZWcgPSA8MHg2Zj47CiAJCWludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmNyb3NzYmFyX21wdSBHSUNfU1BJIDIgSVJRX1RZUEVfRURHRV9SSVNJTkc+LAogCQkJCSAgICAgIDwmZHJhN19wbXhfY29yZSAweDQyND47CisJCWludGVycnVwdC1uYW1lcyA9ICJpcnEiLCAid2FrZXVwIjsKIAogCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCQlwaW5jdHJsLTAgPSA8Jm1jcDc5NDEwX3BpbnNfZGVmYXVsdD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbmltZW9faXAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYW5pbWVvX2lwLmR0cwppbmRleCA0ZTBhZDNiLi4wOTYyZjJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbmltZW9faXAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FuaW1lb19pcC5kdHMKQEAgLTE1NSwyMSArMTU1LDIxIEBACiAJCQlsYWJlbCA9ICJrZXlzd2l0Y2hfaW4iOwogCQkJZ3Bpb3MgPSA8JnBpb0IgMSBHUElPX0FDVElWRV9ISUdIPjsKIAkJCWxpbnV4LGNvZGUgPSA8Mjg+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAogCQllcnJvcl9pbiB7CiAJCQlsYWJlbCA9ICJlcnJvcl9pbiI7CiAJCQlncGlvcyA9IDwmcGlvQiAyIEdQSU9fQUNUSVZFX0hJR0g+OwogCQkJbGludXgsY29kZSA9IDwyOT47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCiAJCWJ0biB7CiAJCQlsYWJlbCA9ICJidG4iOwogCQkJZ3Bpb3MgPSA8JnBpb0MgMjMgR1BJT19BQ1RJVkVfSElHSD47CiAJCQlsaW51eCxjb2RlID0gPDMxPjsKLQkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCXdha2V1cC1zb3VyY2U7CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hcm1hZGEtMzh4LmR0c2kKaW5kZXggYzZhMGU5ZC4uZThiN2Y2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXJtYWRhLTM4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FybWFkYS0zOHguZHRzaQpAQCAtNDk4LDYgKzQ5OCw3IEBACiAJCQkJcmVnID0gPDB4NzAwMDAgMHg0MDAwPjsKIAkJCQlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZtcGljIDg+OwogCQkJCWNsb2NrcyA9IDwmZ2F0ZWNsayA0PjsKKwkJCQl0eC1jc3VtLWxpbWl0ID0gPDk4MDA+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxLWZveGcyMC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxLWZveGcyMC5kdHMKaW5kZXggZjg5NTk4YS4uNmJmODczZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1mb3hnMjAuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtZm94ZzIwLmR0cwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJCQlsYWJlbCA9ICJCdXR0b24iOwogCQkJZ3Bpb3MgPSA8JnBpb0MgNCBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwweDEwMz47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1raXpib3guZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1raXpib3guZHRzCmluZGV4IGJmMThlY2UuLjIyOWU5ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEta2l6Ym94LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxLWtpemJveC5kdHMKQEAgLTI0LDE1ICsyNCw2IEBACiAJfTsKIAogCWNsb2NrcyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmFuZ2VzOwotCi0JCW1haW5fY2xvY2s6IGNsb2NrQDAgewotCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxvc2MiLCAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE4NDMyMDAwPjsKLQkJfTsKLQogCQltYWluX3h0YWwgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE4NDMyMDAwPjsKIAkJfTsKQEAgLTk0LDE0ICs4NSwxNCBAQAogCQkJbGFiZWwgPSAiUEJfUlNUIjsKIAkJCWdwaW9zID0gPCZwaW9CIDMwIEdQSU9fQUNUSVZFX0hJR0g+OwogCQkJbGludXgsY29kZSA9IDwweDEwMD47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCiAJCXVzZXIgewogCQkJbGFiZWwgPSAiUEJfVVNFUiI7CiAJCQlncGlvcyA9IDwmcGlvQiAzMSBHUElPX0FDVElWRV9ISUdIPjsKIAkJCWxpbnV4LGNvZGUgPSA8MHgxMDE+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxLWtpemJveDIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1raXpib3gyLmR0cwppbmRleCBmMGIxNTYzLi41MGExNDU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxLWtpemJveDIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEta2l6Ym94Mi5kdHMKQEAgLTE3MSwyMSArMTcxLDIxIEBACiAJCQlsYWJlbCA9ICJQQl9QUk9HIjsKIAkJCWdwaW9zID0gPCZwaW9FIDI3IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPDB4MTAyPjsKLQkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCXdha2V1cC1zb3VyY2U7CiAJCX07CiAKIAkJcmVzZXQgewogCQkJbGFiZWwgPSAiUEJfUlNUIjsKIAkJCWdwaW9zID0gPCZwaW9FIDI5IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPDB4MTAwPjsKLQkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCXdha2V1cC1zb3VyY2U7CiAJCX07CiAKIAkJdXNlciB7CiAJCQlsYWJlbCA9ICJQQl9VU0VSIjsKIAkJCWdwaW9zID0gPCZwaW9FIDMxIEdQSU9fQUNUSVZFX0hJR0g+OwogCQkJbGludXgsY29kZSA9IDwweDEwMT47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEta2l6Ym94bWluaS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxLWtpemJveG1pbmkuZHRzCmluZGV4IDlmNzJiNDkuLjk2ODJkMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEta2l6Ym94bWluaS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1raXpib3htaW5pLmR0cwpAQCAtOTgsMTQgKzk4LDE0IEBACiAJCQlsYWJlbCA9ICJQQl9QUk9HIjsKIAkJCWdwaW9zID0gPCZwaW9DIDE3IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPDB4MTAyPjsKLQkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCXdha2V1cC1zb3VyY2U7CiAJCX07CiAKIAkJcmVzZXQgewogCQkJbGFiZWwgPSAiUEJfUlNUIjsKIAkJCWdwaW9zID0gPCZwaW9DIDE2IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPDB4MTAwPjsKLQkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCXdha2V1cC1zb3VyY2U7CiAJCX07CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1xaWxfYTkyNjAuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1xaWxfYTkyNjAuZHRzCmluZGV4IGE5YWVmNTMuLjRmMmVlYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtcWlsX2E5MjYwLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxLXFpbF9hOTI2MC5kdHMKQEAgLTE4Myw3ICsxODMsNyBAQAogCQkJbGFiZWwgPSAidXNlcl9wYiI7CiAJCQlncGlvcyA9IDwmcGlvQiAxMCBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwyOD47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtc2FtYTVkMl94cGxhaW5lZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxLXNhbWE1ZDJfeHBsYWluZWQuZHRzCmluZGV4IGUwN2MyYjIuLmU3NGRmMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtc2FtYTVkMl94cGxhaW5lZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1zYW1hNWQyX3hwbGFpbmVkLmR0cwpAQCAtNDUsNiArNDUsNyBAQAogL2R0cy12MS87CiAjaW5jbHVkZSAic2FtYTVkMi5kdHNpIgogI2luY2x1ZGUgInNhbWE1ZDItcGluZnVuYy5oIgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL21mZC9hdG1lbC1mbGV4Y29tLmg+CiAKIC8gewogCW1vZGVsID0gIkF0bWVsIFNBTUE1RDIgWHBsYWluZWQiOwpAQCAtNTksMTUgKzYwLDYgQEAKIAl9OwogCiAJY2xvY2tzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlyYW5nZXM7Ci0KLQkJbWFpbl9jbG9jazogY2xvY2tAMCB7Ci0JCQljb21wYXRpYmxlID0gImF0bWVsLG9zYyIsICJmaXhlZC1jbG9jayI7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OwotCQl9OwotCiAJCXNsb3dfeHRhbCB7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OwogCQl9OwpAQCAtOTEsNiArODMsMjIgQEAKIAkJCXN0YXR1cyA9ICJva2F5IjsKIAkJfTsKIAorCQlzZG1tYzA6IHNkaW8taG9zdEBhMDAwMDAwMCB7CisJCQlidXMtd2lkdGggPSA8OD47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3NkbW1jMF9kZWZhdWx0PjsKKwkJCW5vbi1yZW1vdmFibGU7CisJCQltbWMtZGRyLTFfOHY7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJc2RtbWMxOiBzZGlvLWhvc3RAYjAwMDAwMDAgeworCQkJYnVzLXdpZHRoID0gPDQ+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9zZG1tYzFfZGVmYXVsdD47CisJCQlzdGF0dXMgPSAib2theSI7IC8qIGNvbmZsaWN0IHdpdGggcXNwaTAgKi8KKwkJfTsKKwogCQlhcGIgewogCQkJc3BpMDogc3BpQGY4MDAwMDAwIHsKIAkJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpAQCAtMTc2LDE3ICsxODQsNTUgQEAKIAkJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWRERfU0RIQ18xVjgiOwogCQkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwogCQkJCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQkJCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJCQl9OwogCQkJCQl9OwogCQkJCX07CiAJCQl9OwogCisJCQlmbHgwOiBmbGV4Y29tQGY4MDM0MDAwIHsKKwkJCQlhdG1lbCxmbGV4Y29tLW1vZGUgPSA8QVRNRUxfRkxFWENPTV9NT0RFX1VTQVJUPjsKKwkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOyAvKiBjb25mbGljdCB3aXRoIElTQ19EMiAmIElTQ19EMyBkYXRhIHBpbnMgKi8KKworCQkJCXVhcnQ1OiBzZXJpYWxAMjAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxhdDkxc2FtOTI2MC11c2FydCI7CisJCQkJCXJlZyA9IDwweDIwMCAweDIwMD47CisJCQkJCWludGVycnVwdHMgPSA8MTkgSVJRX1RZUEVfTEVWRUxfSElHSCA3PjsKKwkJCQkJY2xvY2tzID0gPCZmbHgwX2Nsaz47CisJCQkJCWNsb2NrLW5hbWVzID0gInVzYXJ0IjsKKwkJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX2ZseDBfZGVmYXVsdD47CisJCQkJCWF0bWVsLGZpZm8tc2l6ZSA9IDwzMj47CisJCQkJCXN0YXR1cyA9ICJva2F5IjsKKwkJCQl9OworCQkJfTsKKwogCQkJdWFydDM6IHNlcmlhbEBmYzAwODAwMCB7CiAJCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJCQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfdWFydDNfZGVmYXVsdD47CiAJCQkJc3RhdHVzID0gIm9rYXkiOwogCQkJfTsKIAorCQkJZmx4NDogZmxleGNvbUBmYzAxODAwMCB7CisJCQkJYXRtZWwsZmxleGNvbS1tb2RlID0gPEFUTUVMX0ZMRVhDT01fTU9ERV9UV0k+OworCQkJCXN0YXR1cyA9ICJva2F5IjsKKworCQkJCWkyYzI6IGkyY0A2MDAgeworCQkJCQljb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDItaTJjIjsKKwkJCQkJcmVnID0gPDB4NjAwIDB4MjAwPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMyBJUlFfVFlQRV9MRVZFTF9ISUdIIDc+OworCQkJCQlkbWFzID0gPDA+LCA8MD47CisJCQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQkJY2xvY2tzID0gPCZmbHg0X2Nsaz47CisJCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJCQkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF9mbHg0X2RlZmF1bHQ+OworCQkJCQlhdG1lbCxmaWZvLXNpemUgPSA8MTY+OworCQkJCQlzdGF0dXMgPSAib2theSI7CisJCQkJfTsKKwkJCX07CisKIAkJCWkyYzE6IGkyY0BmYzAyODAwMCB7CiAJCQkJZG1hcyA9IDwwPiwgPDA+OwogCQkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CkBAIC0yMDEsNiArMjQ3LDE4IEBACiAJCQl9OwogCiAJCQlwaW5jdHJsQGZjMDM4MDAwIHsKKwkJCQlwaW5jdHJsX2ZseDBfZGVmYXVsdDogZmx4MF9kZWZhdWx0IHsKKwkJCQkJcGlubXV4ID0gPFBJTl9QQjI4X19GTEVYQ09NMF9JTzA+LAorCQkJCQkJIDxQSU5fUEIyOV9fRkxFWENPTTBfSU8xPjsKKwkJCQkJYmlhcy1kaXNhYmxlOworCQkJCX07CisKKwkJCQlwaW5jdHJsX2ZseDRfZGVmYXVsdDogZmx4NF9kZWZhdWx0IHsKKwkJCQkJcGlubXV4ID0gPFBJTl9QRDEyX19GTEVYQ09NNF9JTzA+LAorCQkJCQkJIDxQSU5fUEQxM19fRkxFWENPTTRfSU8xPjsKKwkJCQkJYmlhcy1kaXNhYmxlOworCQkJCX07CisKIAkJCQlwaW5jdHJsX2kyYzBfZGVmYXVsdDogaTJjMF9kZWZhdWx0IHsKIAkJCQkJcGlubXV4ID0gPFBJTl9QRDIxX19UV0QwPiwKIAkJCQkJCSA8UElOX1BEMjJfX1RXQ0swPjsKQEAgLTIyNyw2ICsyODUsNDYgQEAKIAkJCQkJYmlhcy1kaXNhYmxlOwogCQkJCX07CiAKKwkJCQlwaW5jdHJsX3NkbW1jMF9kZWZhdWx0OiBzZG1tYzBfZGVmYXVsdCB7CisJCQkJCWNtZF9kYXRhIHsKKwkJCQkJCXBpbm11eCA9IDxQSU5fUEExX19TRE1NQzBfQ01EPiwKKwkJCQkJCQkgPFBJTl9QQTJfX1NETU1DMF9EQVQwPiwKKwkJCQkJCQkgPFBJTl9QQTNfX1NETU1DMF9EQVQxPiwKKwkJCQkJCQkgPFBJTl9QQTRfX1NETU1DMF9EQVQyPiwKKwkJCQkJCQkgPFBJTl9QQTVfX1NETU1DMF9EQVQzPiwKKwkJCQkJCQkgPFBJTl9QQTZfX1NETU1DMF9EQVQ0PiwKKwkJCQkJCQkgPFBJTl9QQTdfX1NETU1DMF9EQVQ1PiwKKwkJCQkJCQkgPFBJTl9QQThfX1NETU1DMF9EQVQ2PiwKKwkJCQkJCQkgPFBJTl9QQTlfX1NETU1DMF9EQVQ3PjsKKwkJCQkJCWJpYXMtcHVsbC11cDsKKwkJCQkJfTsKKworCQkJCQlja19jZF9yc3RuX3ZkZHNlbCB7CisJCQkJCQlwaW5tdXggPSA8UElOX1BBMF9fU0RNTUMwX0NLPiwKKwkJCQkJCQkgPFBJTl9QQTEwX19TRE1NQzBfUlNUTj4sCisJCQkJCQkJIDxQSU5fUEExMV9fU0RNTUMwX1ZERFNFTD4sCisJCQkJCQkJIDxQSU5fUEExM19fU0RNTUMwX0NEPjsKKwkJCQkJCWJpYXMtZGlzYWJsZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcGluY3RybF9zZG1tYzFfZGVmYXVsdDogc2RtbWMxX2RlZmF1bHQgeworCQkJCQljbWRfZGF0YSB7CisJCQkJCQlwaW5tdXggPSA8UElOX1BBMjhfX1NETU1DMV9DTUQ+LAorCQkJCQkJCSA8UElOX1BBMThfX1NETU1DMV9EQVQwPiwKKwkJCQkJCQkgPFBJTl9QQTE5X19TRE1NQzFfREFUMT4sCisJCQkJCQkJIDxQSU5fUEEyMF9fU0RNTUMxX0RBVDI+LAorCQkJCQkJCSA8UElOX1BBMjFfX1NETU1DMV9EQVQzPjsKKwkJCQkJCWJpYXMtcHVsbC11cDsKKwkJCQkJfTsKKworCQkJCQljb25mLWNrX2NkIHsKKwkJCQkJCXBpbm11eCA9IDxQSU5fUEEyMl9fU0RNTUMxX0NLPiwKKwkJCQkJCQkgPFBJTl9QQTMwX19TRE1NQzFfQ0Q+OworCQkJCQkJYmlhcy1kaXNhYmxlOworCQkJCQl9OworCQkJCX07CisKIAkJCQlwaW5jdHJsX3NwaTBfZGVmYXVsdDogc3BpMF9kZWZhdWx0IHsKIAkJCQkJcGlubXV4ID0gPFBJTl9QQTE0X19TUEkwX1NQQ0s+LAogCQkJCQkJIDxQSU5fUEExNV9fU1BJMF9NT1NJPiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtc2FtYTVkM194cGxhaW5lZC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxLXNhbWE1ZDNfeHBsYWluZWQuZHRzCmluZGV4IDg0ODhhYzUuLmZmODg4ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtc2FtYTVkM194cGxhaW5lZC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1zYW1hNWQzX3hwbGFpbmVkLmR0cwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJCQlsYWJlbCA9ICJQQl9VU0VSIjsKIAkJCWdwaW9zID0gPCZwaW9FIDI5IEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPDB4MTA0PjsKLQkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCXdha2V1cC1zb3VyY2U7CiAJCX07CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1zYW1hNWQ0X3hwbGFpbmVkLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtc2FtYTVkNF94cGxhaW5lZC5kdHMKaW5kZXggNDUzNzFhMS4uMTMxNjE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1zYW1hNWQ0X3hwbGFpbmVkLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxLXNhbWE1ZDRfeHBsYWluZWQuZHRzCkBAIC01MCw3ICs1MCw2IEBACiAJY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQ0LXhwbGFpbmVkIiwgImF0bWVsLHNhbWE1ZDQiLCAiYXRtZWwsc2FtYTUiOwogCiAJY2hvc2VuIHsKLQkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIGVhcmx5cHJpbnRrIjsKIAkJc3Rkb3V0LXBhdGggPSAic2VyaWFsMDoxMTUyMDBuOCI7CiAJfTsKIApAQCAtNTksMTUgKzU4LDYgQEAKIAl9OwogCiAJY2xvY2tzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlyYW5nZXM7Ci0KLQkJbWFpbl9jbG9jazogY2xvY2tAMCB7Ci0JCQljb21wYXRpYmxlID0gImF0bWVsLG9zYyIsICJmaXhlZC1jbG9jayI7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OwotCQl9OwotCiAJCXNsb3dfeHRhbCB7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OwogCQl9OwpAQCAtMjM1LDcgKzIyNSw3IEBACiAJCQlsYWJlbCA9ICJwYl91c2VyMSI7CiAJCQlncGlvcyA9IDwmcGlvRSA4IEdQSU9fQUNUSVZFX0hJR0g+OwogCQkJbGludXgsY29kZSA9IDwweDEwMD47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtc2FtYTVkNGVrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtc2FtYTVkNGVrLmR0cwppbmRleCA2ZDI3MmMwLi4yZDRhMzMxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MS1zYW1hNWQ0ZWsuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTEtc2FtYTVkNGVrLmR0cwpAQCAtNTAsNyArNTAsNiBAQAogCWNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkNGVrIiwgImF0bWVsLHNhbWE1ZDQiLCAiYXRtZWwsc2FtYTUiOwogCiAJY2hvc2VuIHsKLQkJYm9vdGFyZ3MgPSAiaWdub3JlX2xvZ2xldmVsIGVhcmx5cHJpbnRrIjsKIAkJc3Rkb3V0LXBhdGggPSAic2VyaWFsMDoxMTUyMDBuOCI7CiAJfTsKIApAQCAtNTksMTUgKzU4LDYgQEAKIAl9OwogCiAJY2xvY2tzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlyYW5nZXM7Ci0KLQkJbWFpbl9jbG9jazogY2xvY2tAMCB7Ci0JCQljb21wYXRpYmxlID0gImF0bWVsLG9zYyIsICJmaXhlZC1jbG9jayI7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OwotCQl9OwotCiAJCXNsb3dfeHRhbCB7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MzI3Njg+OwogCQl9OwpAQCAtMzA0LDcgKzI5NCw3IEBACiAJCQlsYWJlbCA9ICJwYl91c2VyMSI7CiAJCQlncGlvcyA9IDwmcGlvRSAxMyBHUElPX0FDVElWRV9ISUdIPjsKIAkJCWxpbnV4LGNvZGUgPSA8MHgxMDA+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxcm05MjAwZWsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXJtOTIwMGVrLmR0cwppbmRleCA4ZGFiNGI3Li5mOTBlMWMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxcm05MjAwZWsuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFybTkyMDBlay5kdHMKQEAgLTIxLDE1ICsyMSw2IEBACiAJfTsKIAogCWNsb2NrcyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmFuZ2VzOwotCi0JCW1haW5fY2xvY2s6IGNsb2NrQDAgewotCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxvc2MiLCAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE4NDMyMDAwPjsKLQkJfTsKLQogCQlzbG93X3h0YWwgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKIAkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYxZWsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjFlay5kdHMKaW5kZXggMmU5MmFjMC4uNTViZDUxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjFlay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjFlay5kdHMKQEAgLTIyLDE1ICsyMiw2IEBACiAJfTsKIAogCWNsb2NrcyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmFuZ2VzOwotCi0JCW1haW5fY2xvY2s6IGNsb2NrQDAgewotCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxvc2MiLCAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE4NDMyMDAwPjsKLQkJfTsKLQogCQlzbG93X3h0YWwgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKIAkJfTsKQEAgLTE0OSw3ICsxNDAsNyBAQAogCQkJCQl0aSxkZWJvdW5jZS10b2wgPSAvYml0cy8gMTYgPDY1NTM1PjsKIAkJCQkJdGksZGVib3VuY2UtbWF4ID0gL2JpdHMvIDE2IDwxPjsKIAotCQkJCQlsaW51eCx3YWtldXA7CisJCQkJCXdha2V1cC1zb3VyY2U7CiAJCQkJfTsKIAkJCX07CiAKQEAgLTE5MywyOCArMTg0LDI4IEBACiAJCQlsYWJlbCA9ICJidXR0b25fMCI7CiAJCQlncGlvcyA9IDwmcGlvQSAyNyBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwyNTY+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAogCQlidXR0b25fMSB7CiAJCQlsYWJlbCA9ICJidXR0b25fMSI7CiAJCQlncGlvcyA9IDwmcGlvQSAyNiBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwyNTc+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAogCQlidXR0b25fMiB7CiAJCQlsYWJlbCA9ICJidXR0b25fMiI7CiAJCQlncGlvcyA9IDwmcGlvQSAyNSBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwyNTg+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAogCQlidXR0b25fMyB7CiAJCQlsYWJlbCA9ICJidXR0b25fMyI7CiAJCQlncGlvcyA9IDwmcGlvQSAyNCBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwyNTk+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05MjYzZWsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjNlay5kdHMKaW5kZXggMjMzODEyNy4uNTlkZjlkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjNlay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTkyNjNlay5kdHMKQEAgLTIyLDE1ICsyMiw2IEBACiAJfTsKIAogCWNsb2NrcyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmFuZ2VzOwotCi0JCW1haW5fY2xvY2s6IGNsb2NrQDAgewotCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxvc2MiLCAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE2MzY3NjYwPjsKLQkJfTsKLQogCQlzbG93X3h0YWwgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKIAkJfTsKQEAgLTIxMywxNCArMjA0LDE0IEBACiAJCQlsYWJlbCA9ICJsZWZ0X2NsaWNrIjsKIAkJCWdwaW9zID0gPCZwaW9DIDUgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8MjcyPjsKLQkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCXdha2V1cC1zb3VyY2U7CiAJCX07CiAKIAkJcmlnaHRfY2xpY2sgewogCQkJbGFiZWwgPSAicmlnaHRfY2xpY2siOwogCQkJZ3Bpb3MgPSA8JnBpb0MgNCBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwyNzM+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOWcyMGVrX2NvbW1vbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTlnMjBla19jb21tb24uZHRzaQppbmRleCA1NzU0OGEyLi5lOWNjOTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOWcyMGVrX2NvbW1vbi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05ZzIwZWtfY29tbW9uLmR0c2kKQEAgLTE5LDE1ICsxOSw2IEBACiAJfTsKIAogCWNsb2NrcyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmFuZ2VzOwotCi0JCW1haW5fY2xvY2s6IGNsb2NrQDAgewotCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxvc2MiLCAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE4NDMyMDAwPjsKLQkJfTsKLQogCQlzbG93X3h0YWwgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKIAkJfTsKQEAgLTIwNiwxNCArMTk3LDE0IEBACiAJCQlsYWJlbCA9ICJCdXR0b24gMyI7CiAJCQlncGlvcyA9IDwmcGlvQSAzMCBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwweDEwMz47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCiAJCWJ0bjQgewogCQkJbGFiZWwgPSAiQnV0dG9uIDQiOwogCQkJZ3Bpb3MgPSA8JnBpb0EgMzEgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8MHgxMDQ+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOW0xMGc0NWVrLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05bTEwZzQ1ZWsuZHRzCmluZGV4IDlkMTZlZjguLjI0MDBjOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05bTEwZzQ1ZWsuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05bTEwZzQ1ZWsuZHRzCkBAIC0yNCwxNSArMjQsNiBAQAogCX07CiAKIAljbG9ja3MgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJhbmdlczsKLQotCQltYWluX2Nsb2NrOiBjbG9ja0AwIHsKLQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsb3NjIiwgImZpeGVkLWNsb2NrIjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMjAwMDAwMD47Ci0JCX07Ci0KIAkJc2xvd194dGFsIHsKIAkJICAgICAgY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKIAkJfTsKQEAgLTMyMywxNCArMzE0LDE0IEBACiAJCQlsYWJlbCA9ICJsZWZ0X2NsaWNrIjsKIAkJCWdwaW9zID0gPCZwaW9CIDYgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8MjcyPjsKLQkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCXdha2V1cC1zb3VyY2U7CiAJCX07CiAKIAkJcmlnaHRfY2xpY2sgewogCQkJbGFiZWwgPSAicmlnaHRfY2xpY2siOwogCQkJZ3Bpb3MgPSA8JnBpb0IgNyBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwyNzM+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAogCQlsZWZ0IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05bjEyZWsuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTluMTJlay5kdHMKaW5kZXggYWNmMzQ1MS4uY2E0ZGRmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTluMTJlay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTluMTJlay5kdHMKQEAgLTIzLDE1ICsyMyw2IEBACiAJfTsKIAogCWNsb2NrcyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmFuZ2VzOwotCi0JCW1haW5fY2xvY2s6IGNsb2NrQDAgewotCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxvc2MiLCAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE2MDAwMDAwPjsKLQkJfTsKLQogCQlzbG93X3h0YWwgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKIAkJfTsKQEAgLTIxOSw3ICsyMTAsNyBAQAogCQkJbGFiZWwgPSAiRW50ZXIiOwogCQkJZ3Bpb3MgPSA8JnBpb0IgMyBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwyOD47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05cmxlay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9hdDkxc2FtOXJsZWsuZHRzCmluZGV4IDU1OGM5ZjIuLmYxMDU2NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05cmxlay5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTlybGVrLmR0cwpAQCAtMjIsMTUgKzIyLDYgQEAKIAl9OwogCiAJY2xvY2tzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlyYW5nZXM7Ci0KLQkJbWFpbl9jbG9jazogY2xvY2sgewotCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxvc2MiLCAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKLQkJfTsKLQogCQlzbG93X3h0YWwgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKIAkJfTsKQEAgLTIyNSwxNCArMjE2LDE0IEBACiAJCQlsYWJlbCA9ICJyaWdodF9jbGljayI7CiAJCQlncGlvcyA9IDwmcGlvQiAwIEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPDI3Mz47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCiAJCWxlZnRfY2xpY2sgewogCQkJbGFiZWwgPSAibGVmdF9jbGljayI7CiAJCQlncGlvcyA9IDwmcGlvQiAxIEdQSU9fQUNUSVZFX0xPVz47CiAJCQlsaW51eCxjb2RlID0gPDI3Mj47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2F0OTFzYW05eDVjbS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NWNtLmR0c2kKaW5kZXggMjYxMTJlYi4uYjA5OGFkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NWNtLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXQ5MXNhbTl4NWNtLmR0c2kKQEAgLTEzLDE3ICsxMyw2IEBACiAJfTsKIAogCWNsb2NrcyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJcmFuZ2VzOwotCi0JCW1haW5fY2xvY2s6IGNsb2NrQDAgewotCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxvc2MiLCAiZml4ZWQtY2xvY2siOwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKLQkJfTsKLQl9OwotCi0JY2xvY2tzIHsKIAkJc2xvd194dGFsIHsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMjc2OD47CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvYmVybGluMnEuZHRzaQppbmRleCA4ZWExNzdmLi5mYjFkYTk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9iZXJsaW4ycS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2JlcmxpbjJxLmR0c2kKQEAgLTExOCw3ICsxMTgsOCBAQAogCQlzZGhjaTA6IHNkaGNpQGFiMDAwMCB7CiAJCQljb21wYXRpYmxlID0gIm1ydmwscHhhdjMtbW1jIjsKIAkJCXJlZyA9IDwweGFiMDAwMCAweDIwMD47Ci0JCQljbG9ja3MgPSA8JmNoaXBfY2xrIENMS0lEX1NESU8xWElOPjsKKwkJCWNsb2NrcyA9IDwmY2hpcF9jbGsgQ0xLSURfU0RJTzFYSU4+LCA8JmNoaXBfY2xrIENMS0lEX1NESU8+OworCQkJY2xvY2stbmFtZXMgPSAiaW8iLCAiY29yZSI7CiAJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwpAQCAtMTI2LDcgKzEyNyw4IEBACiAJCXNkaGNpMTogc2RoY2lAYWIwODAwIHsKIAkJCWNvbXBhdGlibGUgPSAibXJ2bCxweGF2My1tbWMiOwogCQkJcmVnID0gPDB4YWIwODAwIDB4MjAwPjsKLQkJCWNsb2NrcyA9IDwmY2hpcF9jbGsgQ0xLSURfU0RJTzFYSU4+OworCQkJY2xvY2tzID0gPCZjaGlwX2NsayBDTEtJRF9TRElPMVhJTj4sIDwmY2hpcF9jbGsgQ0xLSURfU0RJTz47CisJCQljbG9jay1uYW1lcyA9ICJpbyIsICJjb3JlIjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CkBAIC0xMzUsNyArMTM3LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAibXJ2bCxweGF2My1tbWMiOwogCQkJcmVnID0gPDB4YWIxMDAwIDB4MjAwPjsKIAkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyOCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKLQkJCWNsb2NrcyA9IDwmY2hpcF9jbGsgQ0xLSURfTkZDX0VDQz4sIDwmY2hpcF9jbGsgQ0xLSURfTkZDPjsKKwkJCWNsb2NrcyA9IDwmY2hpcF9jbGsgQ0xLSURfTkZDX0VDQz4sIDwmY2hpcF9jbGsgQ0xLSURfU0RJTz47CiAJCQljbG9jay1uYW1lcyA9ICJpbyIsICJjb3JlIjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9kbTgxNnguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RtODE2eC5kdHNpCmluZGV4IDNjOTljZmEuLmVlZTYzNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RtODE2eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RtODE2eC5kdHNpCkBAIC0yMTgsNiArMjE4LDcgQEAKIAkJCXJlZyA9IDwweDQ4MGM4MDAwIDB4MjAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDc3PjsKIAkJCXRpLGh3bW9kcyA9ICJtYWlsYm94IjsKKwkJCSNtYm94LWNlbGxzID0gPDE+OwogCQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47CiAJCQl0aSxtYm94LW51bS1maWZvcyA9IDwxMj47CiAJCQltYm94X2RzcDogbWJveF9kc3AgewpAQCAtMjc5LDggKzI4MCwxMSBAQAogCQkJdGksc3BpLW51bS1jcyA9IDw0PjsKIAkJCXRpLGh3bW9kcyA9ICJtY3NwaTEiOwogCQkJZG1hcyA9IDwmZWRtYSAxNiAmZWRtYSAxNwotCQkJCSZlZG1hIDE4ICZlZG1hIDE5PjsKLQkJCWRtYS1uYW1lcyA9ICJ0eDAiLCAicngwIiwgInR4MSIsICJyeDEiOworCQkJCSZlZG1hIDE4ICZlZG1hIDE5CisJCQkJJmVkbWEgMjAgJmVkbWEgMjEKKwkJCQkmZWRtYSAyMiAmZWRtYSAyMz47CisJCQlkbWEtbmFtZXMgPSAidHgwIiwgInJ4MCIsICJ0eDEiLCAicngxIiwKKwkJCQkgICAgInR4MiIsICJyeDIiLCAidHgzIiwgInJ4MyI7CiAJCX07CiAKIAkJbW1jMTogbW1jQDQ4MDYwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2RyYTcuZHRzaQppbmRleCBiYzY3MmZiLi5mZTk5MjMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9kcmE3LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZHJhNy5kdHNpCkBAIC0xNDU5LDggKzE0NTksOCBAQAogCQkJaW50ZXJydXB0LW5hbWVzID0gInR4IiwgInJ4IjsKIAkJCWRtYXMgPSA8JnNkbWFfeGJhciAxMzM+LCA8JnNkbWFfeGJhciAxMzI+OwogCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKLQkJCWNsb2NrcyA9IDwmbWNhc3AzX2FoY2xreF9tdXg+OwotCQkJY2xvY2stbmFtZXMgPSAiZmNrIjsKKwkJCWNsb2NrcyA9IDwmbWNhc3AzX2F1eF9nZmNsa19tdXg+LCA8Jm1jYXNwM19haGNsa3hfbXV4PjsKKwkJCWNsb2NrLW5hbWVzID0gImZjayIsICJhaGNsa3giOwogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjcuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDI3LmR0c2kKaW5kZXggZmViOWQzNC4uZjgxOGVhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14MjcuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXgyNy5kdHNpCkBAIC00ODYsNyArNDg2LDEwIEBACiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsaW14MjctdXNiIjsKIAkJCQlyZWcgPSA8MHgxMDAyNDAwMCAweDIwMD47CiAJCQkJaW50ZXJydXB0cyA9IDw1Nj47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIElNWDI3X0NMS19VU0JfSVBHX0dBVEU+OworCQkJCWNsb2NrcyA9IDwmY2xrcyBJTVgyN19DTEtfVVNCX0lQR19HQVRFPiwKKwkJCQkJPCZjbGtzIElNWDI3X0NMS19VU0JfQUhCX0dBVEU+LAorCQkJCQk8JmNsa3MgSU1YMjdfQ0xLX1VTQl9ESVY+OworCQkJCWNsb2NrLW5hbWVzID0gImlwZyIsICJhaGIiLCAicGVyIjsKIAkJCQlmc2wsdXNibWlzYyA9IDwmdXNibWlzYyAwPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKQEAgLTQ5NSw3ICs0OTgsMTAgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXgyNy11c2IiOwogCQkJCXJlZyA9IDwweDEwMDI0MjAwIDB4MjAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDU0PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YMjdfQ0xLX1VTQl9JUEdfR0FURT47CisJCQkJY2xvY2tzID0gPCZjbGtzIElNWDI3X0NMS19VU0JfSVBHX0dBVEU+LAorCQkJCQk8JmNsa3MgSU1YMjdfQ0xLX1VTQl9BSEJfR0FURT4sCisJCQkJCTwmY2xrcyBJTVgyN19DTEtfVVNCX0RJVj47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwZXIiOwogCQkJCWZzbCx1c2JtaXNjID0gPCZ1c2JtaXNjIDE+OwogCQkJCWRyX21vZGUgPSAiaG9zdCI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUwNSw3ICs1MTEsMTAgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXgyNy11c2IiOwogCQkJCXJlZyA9IDwweDEwMDI0NDAwIDB4MjAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDU1PjsKLQkJCQljbG9ja3MgPSA8JmNsa3MgSU1YMjdfQ0xLX1VTQl9JUEdfR0FURT47CisJCQkJY2xvY2tzID0gPCZjbGtzIElNWDI3X0NMS19VU0JfSVBHX0dBVEU+LAorCQkJCQk8JmNsa3MgSU1YMjdfQ0xLX1VTQl9BSEJfR0FURT4sCisJCQkJCTwmY2xrcyBJTVgyN19DTEtfVVNCX0RJVj47CisJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwZXIiOwogCQkJCWZzbCx1c2JtaXNjID0gPCZ1c2JtaXNjIDI+OwogCQkJCWRyX21vZGUgPSAiaG9zdCI7CiAJCQkJc3RhdHVzID0gImRpc2FibGVkIjsKQEAgLTUxNSw3ICs1MjQsNiBAQAogCQkJCSNpbmRleC1jZWxscyA9IDwxPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxpbXgyNy11c2JtaXNjIjsKIAkJCQlyZWcgPSA8MHgxMDAyNDYwMCAweDIwMD47Ci0JCQkJY2xvY2tzID0gPCZjbGtzIElNWDI3X0NMS19VU0JfQUhCX0dBVEU+OwogCQkJfTsKIAogCQkJc2FoYXJhMjogc2FoYXJhQDEwMDI1MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLWd3NTQwMC1hLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxLWd3NTQwMC1hLmR0cwppbmRleCA1OGFkZjE3Li5hNTE4MzRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cS1ndzU0MDAtYS5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnEtZ3c1NDAwLWEuZHRzCkBAIC0xNTQsNyArMTU0LDcgQEAKICZmZWMgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2VuZXQ+OwotCXBoeS1tb2RlID0gInJnbWlpIjsKKwlwaHktbW9kZSA9ICJyZ21paS1pZCI7CiAJcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMSAzMCBHUElPX0FDVElWRV9ISUdIPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUxeHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1MXh4LmR0c2kKaW5kZXggN2IzMWZkYi4uZGMwY2ViZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUxeHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTF4eC5kdHNpCkBAIC05NCw3ICs5NCw3IEBACiAmZmVjIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0PjsKLQlwaHktbW9kZSA9ICJyZ21paSI7CisJcGh5LW1vZGUgPSAicmdtaWktaWQiOwogCXBoeS1yZXNldC1ncGlvcyA9IDwmZ3BpbzEgMzAgR1BJT19BQ1RJVkVfTE9XPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUyeHguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1Mnh4LmR0c2kKaW5kZXggMWI2NjMyOC4uMThjZDQxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUyeHguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTJ4eC5kdHNpCkBAIC0xNTQsNyArMTU0LDcgQEAKICZmZWMgewogCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CiAJcGluY3RybC0wID0gPCZwaW5jdHJsX2VuZXQ+OwotCXBoeS1tb2RlID0gInJnbWlpIjsKKwlwaHktbW9kZSA9ICJyZ21paS1pZCI7CiAJcGh5LXJlc2V0LWdwaW9zID0gPCZncGlvMSAzMCBHUElPX0FDVElWRV9MT1c+OwogCXN0YXR1cyA9ICJva2F5IjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTN4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzUzeHguZHRzaQppbmRleCA3YzUxODM5Li5lZWE5MGYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTN4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1M3h4LmR0c2kKQEAgLTE1NSw3ICsxNTUsNyBAQAogJmZlYyB7CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldD47Ci0JcGh5LW1vZGUgPSAicmdtaWkiOworCXBoeS1tb2RlID0gInJnbWlpLWlkIjsKIAlwaHktcmVzZXQtZ3Bpb3MgPSA8JmdwaW8xIDMwIEdQSU9fQUNUSVZFX0xPVz47CiAJc3RhdHVzID0gIm9rYXkiOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1NHh4LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLWd3NTR4eC5kdHNpCmluZGV4IDkyOWUwYjMuLjZjMTFhMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtZ3c1NHh4LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1ndzU0eHguZHRzaQpAQCAtMTQ1LDcgKzE0NSw3IEBACiAmZmVjIHsKIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwogCXBpbmN0cmwtMCA9IDwmcGluY3RybF9lbmV0PjsKLQlwaHktbW9kZSA9ICJyZ21paSI7CisJcGh5LW1vZGUgPSAicmdtaWktaWQiOwogCXBoeS1yZXNldC1ncGlvcyA9IDwmZ3BpbzEgMzAgR1BJT19BQ1RJVkVfTE9XPjsKIAlzdGF0dXMgPSAib2theSI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZWF1dG8uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2lteDZxZGwtc2FicmVhdXRvLmR0c2kKaW5kZXggODI2M2ZjMS4uZDM1NGQ0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnFkbC1zYWJyZWF1dG8uZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2cWRsLXNhYnJlYXV0by5kdHNpCkBAIC0xMTMsMTQgKzExMywxNCBAQAogJmNsa3MgewogCWFzc2lnbmVkLWNsb2NrcyA9IDwmY2xrcyBJTVg2UURMX1BMTDRfQllQQVNTX1NSQz4sCiAJCQkgIDwmY2xrcyBJTVg2UURMX1BMTDRfQllQQVNTPiwKLQkJCSAgPCZjbGtzIElNWDZRRExfQ0xLX1BMTDRfUE9TVF9ESVY+LAogCQkJICA8JmNsa3MgSU1YNlFETF9DTEtfTERCX0RJMF9TRUw+LAotCQkJICA8JmNsa3MgSU1YNlFETF9DTEtfTERCX0RJMV9TRUw+OworCQkJICA8JmNsa3MgSU1YNlFETF9DTEtfTERCX0RJMV9TRUw+LAorCQkJICA8JmNsa3MgSU1YNlFETF9DTEtfUExMNF9QT1NUX0RJVj47CiAJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmY2xrcyBJTVg2UURMX0NMS19MVkRTMl9JTj4sCiAJCQkJIDwmY2xrcyBJTVg2UURMX1BMTDRfQllQQVNTX1NSQz4sCiAJCQkJIDwmY2xrcyBJTVg2UURMX0NMS19QTEwzX1VTQl9PVEc+LAogCQkJCSA8JmNsa3MgSU1YNlFETF9DTEtfUExMM19VU0JfT1RHPjsKLQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDA+LCA8MjQ1NzYwMDA+OworCWFzc2lnbmVkLWNsb2NrLXJhdGVzID0gPDA+LCA8MD4sIDwwPiwgPDA+LCA8MjQ1NzYwMDA+OwogfTsKIAogJmVjc3BpMSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9rMmwtbmV0Y3AuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2sybC1uZXRjcC5kdHNpCmluZGV4IDAxYWVmMjMuLjVhY2JkMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2sybC1uZXRjcC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2sybC1uZXRjcC5kdHNpCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkvKiBOZXRDUCBhZGRyZXNzIHJhbmdlICovCiAJcmFuZ2VzID0gPDAgMHgyNjAwMDAwMCAweDEwMDAwMDA+OwogCi0JY2xvY2tzID0gPCZwYXBsbGNsaz4sIDwmY2xrY3BnbWFjPiwgPCZjaGlwY2xrMTI+OworCWNsb2NrcyA9IDwmY2xrb3NyPiwgPCZwYXBsbGNsaz4sIDwmY2xrY3BnbWFjPiwgPCZjaGlwY2xrMTI+OwogCWRtYS1jb2hlcmVudDsKIAogCXRpLG5hdmlnYXRvci1kbWFzID0gPCZkbWFfZ2JlIDA+LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdHMyMTkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpcmt3b29kLXRzMjE5LmR0c2kKaW5kZXggYzU2YWI2Yi4uMGU0NjU2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMva2lya3dvb2QtdHMyMTkuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9raXJrd29vZC10czIxOS5kdHNpCkBAIC00MCw3ICs0MCw3IEBACiAJCX07CiAJCXBvd2Vyb2ZmQDEyMTAwIHsKIAkJCWNvbXBhdGlibGUgPSAicW5hcCxwb3dlci1vZmYiOwotCQkJcmVnID0gPDB4MTIwMDAgMHgxMDA+OworCQkJcmVnID0gPDB4MTIxMDAgMHgxMDA+OwogCQkJY2xvY2tzID0gPCZnYXRlX2NsayA3PjsKIAkJfTsKIAkJc3BpQDEwNjAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LWR1b3Zlcm8tcGFybG9yLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL29tYXA0LWR1b3Zlcm8tcGFybG9yLmR0cwppbmRleCAxYTc4ZjAxLi5iNzVmN2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9vbWFwNC1kdW92ZXJvLXBhcmxvci5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvb21hcDQtZHVvdmVyby1wYXJsb3IuZHRzCkBAIC0xODksMyArMTg5LDcgQEAKIAl9OwogfTsKIAorJnVhcnQzIHsKKwlpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZ3YWtldXBnZW4gR0lDX1NQSSA3NCBJUlFfVFlQRV9MRVZFTF9ISUdICisJCQkgICAgICAgJm9tYXA0X3BteF9jb3JlIE9NQVA0X1VBUlQzX1JYPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMyODgtdmV5cm9uLW1pbm5pZS5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtdmV5cm9uLW1pbm5pZS5kdHMKaW5kZXggOGZkOGVmMi4uODVmMDM3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LXZleXJvbi1taW5uaWUuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC12ZXlyb24tbWlubmllLmR0cwpAQCAtODYsNiArODYsMTAgQEAKIAl9OwogfTsKIAorJmVtbWMgeworCS9kZWxldGUtcHJvcGVydHkvbW1jLWhzMjAwLTFfOHY7Cit9OworCiAmZ3Bpb19rZXlzIHsKIAlwaW5jdHJsLTAgPSA8JnB3cl9rZXlfbCAmYXBfbGlkX2ludF9sICZ2b2x1bV9kb3duX2wgJnZvbHVtX3VwX2w+OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC5kdHNpCmluZGV4IDZhNzljOWMuLjA0ZWEyMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC5kdHNpCkBAIC00NTIsOCArNDUyLDEwIEBACiAJCWNsb2NrLW5hbWVzID0gInRzYWRjIiwgImFwYl9wY2xrIjsKIAkJcmVzZXRzID0gPCZjcnUgU1JTVF9UU0FEQz47CiAJCXJlc2V0LW5hbWVzID0gInRzYWRjLWFwYiI7Ci0JCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0JCXBpbmN0cmwtMCA9IDwmb3RwX291dD47CisJCXBpbmN0cmwtbmFtZXMgPSAiaW5pdCIsICJkZWZhdWx0IiwgInNsZWVwIjsKKwkJcGluY3RybC0wID0gPCZvdHBfZ3Bpbz47CisJCXBpbmN0cmwtMSA9IDwmb3RwX291dD47CisJCXBpbmN0cmwtMiA9IDwmb3RwX2dwaW8+OwogCQkjdGhlcm1hbC1zZW5zb3ItY2VsbHMgPSA8MT47CiAJCXJvY2tjaGlwLGh3LXRzaHV0LXRlbXAgPSA8OTUwMDA+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwpAQCAtMTM5NSw2ICsxMzk3LDEwIEBACiAJCX07CiAKIAkJdHNhZGMgeworCQkJb3RwX2dwaW86IG90cC1ncGlvIHsKKwkJCQlyb2NrY2hpcCxwaW5zID0gPDAgMTAgUktfRlVOQ19HUElPICZwY2ZnX3B1bGxfbm9uZT47CisJCQl9OworCiAJCQlvdHBfb3V0OiBvdHAtb3V0IHsKIAkJCQlyb2NrY2hpcCxwaW5zID0gPDAgMTAgUktfRlVOQ18xICZwY2ZnX3B1bGxfbm9uZT47CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkMzVlay5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzNWVrLmR0cwppbmRleCBkOWE5YWNhLi5lODEyZjVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzNWVrLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQzNWVrLmR0cwpAQCAtNDksNyArNDksNyBAQAogCQkJbGFiZWwgPSAicGJfdXNlcjEiOwogCQkJZ3Bpb3MgPSA8JnBpb0UgMjcgR1BJT19BQ1RJVkVfSElHSD47CiAJCQlsaW51eCxjb2RlID0gPDB4MTAwPjsKLQkJCWdwaW8ta2V5LHdha2V1cDsKKwkJCXdha2V1cC1zb3VyY2U7CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQ0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zYW1hNWQ0LmR0c2kKaW5kZXggMTViYmFmNi4uMjE5MzYzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc2FtYTVkNC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3NhbWE1ZDQuZHRzaQpAQCAtMTMwMCw3ICsxMzAwLDcgQEAKIAkJCX07CiAKIAkJCXdhdGNoZG9nQGZjMDY4NjQwIHsKLQkJCQljb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYwLXdkdCI7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQ0LXdkdCI7CiAJCQkJcmVnID0gPDB4ZmMwNjg2NDAgMHgxMD47CiAJCQkJY2xvY2tzID0gPCZjbGszMms+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzFzLXByaW1vODEuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNmktYTMxcy1wcmltbzgxLmR0cwppbmRleCAyZDQyNTBiLi42OGI0NzliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzFzLXByaW1vODEuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMXMtcHJpbW84MS5kdHMKQEAgLTgzLDYgKzgzLDcgQEAKIAkJcmVnID0gPDB4NWQ+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZwaW8+OwogCQlpbnRlcnJ1cHRzID0gPDAgMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsgLyogUEEzICovCisJCXRvdWNoc2NyZWVuLXN3YXBwZWQteC15OwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC1ueWFuLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy90ZWdyYTEyNC1ueWFuLmR0c2kKaW5kZXggNDBjMjNhMC4uZWMxYWE2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGVncmExMjQtbnlhbi5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RlZ3JhMTI0LW55YW4uZHRzaQpAQCAtMzk5LDcgKzM5OSw3IEBACiAKIAkvKiBDUFUgREZMTCBjbG9jayAqLwogCWNsb2NrQDAsNzAxMTAwMDAgewotCQlzdGF0dXMgPSAib2theSI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCXZkZC1jcHUtc3VwcGx5ID0gPCZ2ZGRfY3B1PjsKIAkJbnZpZGlhLGkyYy1mcy1yYXRlID0gPDQwMDAwMD47CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3VzYl9hOTI2MF9jb21tb24uZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3VzYl9hOTI2MF9jb21tb24uZHRzaQppbmRleCAxMmVkYWZlLi45YmVlYTg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy91c2JfYTkyNjBfY29tbW9uLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdXNiX2E5MjYwX2NvbW1vbi5kdHNpCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJCWxhYmVsID0gInVzZXJfcGIiOwogCQkJZ3Bpb3MgPSA8JnBpb0IgMTAgR1BJT19BQ1RJVkVfTE9XPjsKIAkJCWxpbnV4LGNvZGUgPSA8Mjg+OwotCQkJZ3Bpby1rZXksd2FrZXVwOworCQkJd2FrZXVwLXNvdXJjZTsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy91c2JfYTkyNjMuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdXNiX2E5MjYzLmR0cwppbmRleCA2OGMwZGUzLi44Y2M2ZWRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy91c2JfYTkyNjMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3VzYl9hOTI2My5kdHMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQkJbGFiZWwgPSAidXNlcl9wYiI7CiAJCQlncGlvcyA9IDwmcGlvQiAxMCBHUElPX0FDVElWRV9MT1c+OwogCQkJbGludXgsY29kZSA9IDwyOD47Ci0JCQlncGlvLWtleSx3YWtldXA7CisJCQl3YWtldXAtc291cmNlOwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmkuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLWNvbGlicmkuZHRzaQppbmRleCAxOWZlMDQ1Li4yZDdlYWI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92ZjYxMC1jb2xpYnJpLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAtY29saWJyaS5kdHNpCkBAIC0xOCw4ICsxOCwzIEBACiAJCXJlZyA9IDwweDgwMDAwMDAwIDB4MTAwMDAwMDA+OwogCX07CiB9OwotCi0mTDIgewotCWFybSxkYXRhLWxhdGVuY3kgPSA8MiAxIDI+OwotCWFybSx0YWctbGF0ZW5jeSA9IDwzIDIgMz47Ci19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmNjEwLmR0c2kKaW5kZXggNWY4ZWIxYi4uNThiYzZlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdmY2MTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy92ZjYxMC5kdHNpCkBAIC0xOSw3ICsxOSw3IEBACiAJCXJlZyA9IDwweDQwMDA2MDAwIDB4MTAwMD47CiAJCWNhY2hlLXVuaWZpZWQ7CiAJCWNhY2hlLWxldmVsID0gPDI+OwotCQlhcm0sZGF0YS1sYXRlbmN5ID0gPDEgMSAxPjsKKwkJYXJtLGRhdGEtbGF0ZW5jeSA9IDwzIDMgMz47CiAJCWFybSx0YWctbGF0ZW5jeSA9IDwyIDIgMj47CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92Znh4eC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmZ4eHguZHRzaQppbmRleCA2NzM2YmFlLi4zY2QxYjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92Znh4eC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZmeHh4LmR0c2kKQEAgLTE1OCw3ICsxNTgsNyBAQAogCQkJCWludGVycnVwdHMgPSA8NjcgSVJRX1RZUEVfTEVWRUxfSElHSD47CiAJCQkJY2xvY2tzID0gPCZjbGtzIFZGNjEwX0NMS19EU1BJMD47CiAJCQkJY2xvY2stbmFtZXMgPSAiZHNwaSI7Ci0JCQkJc3BpLW51bS1jaGlwc2VsZWN0cyA9IDw1PjsKKwkJCQlzcGktbnVtLWNoaXBzZWxlY3RzID0gPDY+OwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCQl9OwogCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDY4IElSUV9UWVBFX0xFVkVMX0hJR0g+OwogCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfRFNQSTE+OwogCQkJCWNsb2NrLW5hbWVzID0gImRzcGkiOwotCQkJCXNwaS1udW0tY2hpcHNlbGVjdHMgPSA8NT47CisJCQkJc3BpLW51bS1jaGlwc2VsZWN0cyA9IDw0PjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQkJfTsKIApAQCAtMTc4LDggKzE3OCwxMCBAQAogCQkJCWNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXNhaSI7CiAJCQkJcmVnID0gPDB4NDAwMzEwMDAgMHgxMDAwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDg2IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCQkJCWNsb2NrcyA9IDwmY2xrcyBWRjYxMF9DTEtfU0FJMj47Ci0JCQkJY2xvY2stbmFtZXMgPSAic2FpIjsKKwkJCQljbG9ja3MgPSA8JmNsa3MgVkY2MTBfQ0xLX1NBSTI+LAorCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX1NBSTJfRElWPiwKKwkJCQkJPCZjbGtzIDA+LCA8JmNsa3MgMD47CisJCQkJY2xvY2stbmFtZXMgPSAiYnVzIiwgIm1jbGsxIiwgIm1jbGsyIiwgIm1jbGszIjsKIAkJCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwogCQkJCWRtYXMgPSA8JmVkbWEwIDAgMjE+LAogCQkJCQk8JmVkbWEwIDAgMjA+OwpAQCAtNDYxLDYgKzQ2Myw4IEBACiAJCQkJY2xvY2stbmFtZXMgPSAiYWRjIjsKIAkJCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKIAkJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQkJCWZzbCxhZGNrLW1heC1mcmVxdWVuY3kgPSA8MzAwMDAwMDA+LCA8NDAwMDAwMDA+LAorCQkJCQkJCTwyMDAwMDAwMD47CiAJCQl9OwogCiAJCQllc2RoYzA6IGVzZGhjQDQwMGIxMDAwIHsKQEAgLTQ3Miw4ICs0NzYsNiBAQAogCQkJCQk8JmNsa3MgVkY2MTBfQ0xLX0VTREhDMD47CiAJCQkJY2xvY2stbmFtZXMgPSAiaXBnIiwgImFoYiIsICJwZXIiOwogCQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0JCQkJZnNsLGFkY2stbWF4LWZyZXF1ZW5jeSA9IDwzMDAwMDAwMD4sIDw0MDAwMDAwMD4sCi0JCQkJCQkJPDIwMDAwMDAwPjsKIAkJCX07CiAKIAkJCWVzZGhjMTogZXNkaGNANDAwYjIwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxX2R0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MV9kdF9kZWZjb25maWcKaW5kZXggMWIxZTVhYy4uZTRiMWJlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxX2R0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFfZHRfZGVmY29uZmlnCkBAIC0xMjUsNyArMTI1LDYgQEAKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKLUNPTkZJR19TU0I9bQogQ09ORklHX01GRF9BVE1FTF9ITENEQz15CiBDT05GSUdfUkVHVUxBVE9SPXkKIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NhbWE1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtYTVfZGVmY29uZmlnCmluZGV4IGEwYzU3YWMuLjYzZjdlNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtYTVfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2FtYTVfZGVmY29uZmlnCkBAIC0xMjksNyArMTI5LDYgQEAKIENPTkZJR19QT1dFUl9TVVBQTFk9eQogQ09ORklHX1BPV0VSX1JFU0VUPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19TU0I9bQogQ09ORklHX01GRF9BVE1FTF9GTEVYQ09NPXkKIENPTkZJR19SRUdVTEFUT1I9eQogQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2hfZ2ljdjMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2FyY2hfZ2ljdjMuaAppbmRleCA2NjA3ZDk3Li43ZGE1NTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hcmNoX2dpY3YzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXJjaF9naWN2My5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAjZGVmaW5lIF9fQUNDRVNTX0NQMTUoQ1JuLCBPcDEsIENSbSwgT3AyKQlwMTUsIE9wMSwgJTAsIENSbiwgQ1JtLCBPcDIKICNkZWZpbmUgX19BQ0NFU1NfQ1AxNV82NChPcDEsIENSbSkJCXAxNSwgT3AxLCAlUTAsICVSMCwgQ1JtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IGJlMWQwN2QuLjFiZDk1MTBkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaXJxLmgKQEAgLTQwLDYgKzQwLDExIEBACiAjZGVmaW5lIGFyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh4KSBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoeCkKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIGludCBucl9sZWdhY3lfaXJxcyh2b2lkKQoreworCXJldHVybiBOUl9JUlFTX0xFR0FDWTsKK30KKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKaW5kZXggYTljODBhMi4uMzA5NWRmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC0yOCw2ICsyOCwxOCBAQAogdW5zaWduZWQgbG9uZyAqdmNwdV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCByZWdfbnVtKTsKIHVuc2lnbmVkIGxvbmcgKnZjcHVfc3BzcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmNwdV9nZXRfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJIHU4IHJlZ19udW0pCit7CisJcmV0dXJuICp2Y3B1X3JlZyh2Y3B1LCByZWdfbnVtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZjcHVfc2V0X3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IHJlZ19udW0sCisJCQkJdW5zaWduZWQgbG9uZyB2YWwpCit7CisJKnZjcHVfcmVnKHZjcHUsIHJlZ19udW0pID0gdmFsOworfQorCiBib29sIGt2bV9jb25kaXRpb25fdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3NraXBfaW5zdHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGlzX3dpZGVfaW5zdHIpOwogdm9pZCBrdm1faW5qZWN0X3VuZGVmaW5lZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDhjYzg1YTQuLjM1YzlkYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTUxMCwxMCArNTEwLDE0IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCiBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKKyNpZm5kZWYgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkKIAl1bnNpZ25lZCBpbnQgX191YV9mbGFncyA9IHVhY2Nlc3Nfc2F2ZV9hbmRfZW5hYmxlKCk7CiAJbiA9IGFybV9jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pOwogCXVhY2Nlc3NfcmVzdG9yZShfX3VhX2ZsYWdzKTsKIAlyZXR1cm4gbjsKKyNlbHNlCisJcmV0dXJuIGFybV9jb3B5X3RvX3VzZXIodG8sIGZyb20sIG4pOworI2VuZGlmCiB9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjawpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKaW5kZXggN2EyYTMyYTEuLmVkZTY5MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtNDE2LDYgKzQxNiw3IEBACiAjZGVmaW5lIF9fTlJfZXhlY3ZlYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzg3KQogI2RlZmluZSBfX05SX3VzZXJmYXVsdGZkCQkoX19OUl9TWVNDQUxMX0JBU0UrMzg4KQogI2RlZmluZSBfX05SX21lbWJhcnJpZXIJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzg5KQorI2RlZmluZSBfX05SX21sb2NrMgkJCShfX05SX1NZU0NBTExfQkFTRSszOTApCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIFNXSXMgYXJlIEFSTSBwcml2YXRlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCmluZGV4IDY1NTFkMjguLjA2NmY3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKQEAgLTE3LDExICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAKIHN0YXRpYyBpbnQgZGVidWdfcGNpOwotc3RhdGljIHJlc291cmNlX3NpemVfdCAoKmFsaWduX3Jlc291cmNlKShzdHJ1Y3QgcGNpX2RldiAqZGV2LAotCQkgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkgIHJlc291cmNlX3NpemVfdCBzdGFydCwKLQkJICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKLQkJICByZXNvdXJjZV9zaXplX3QgYWxpZ24pID0gTlVMTDsKIAogLyoKICAqIFdlIGNhbid0IHVzZSBwY2lfZ2V0X2RldmljZSgpIGhlcmUgc2luY2Ugd2UgYXJlCkBAIC00NjEsNyArNDU2LDYgQEAKIAkJc3lzLT5idXNuciAgID0gYnVzbnI7CiAJCXN5cy0+c3dpenpsZSA9IGh3LT5zd2l6emxlOwogCQlzeXMtPm1hcF9pcnEgPSBody0+bWFwX2lycTsKLQkJYWxpZ25fcmVzb3VyY2UgPSBody0+YWxpZ25fcmVzb3VyY2U7CiAJCUlOSVRfTElTVF9IRUFEKCZzeXMtPnJlc291cmNlcyk7CiAKIAkJaWYgKGh3LT5wcml2YXRlX2RhdGEpCkBAIC00NzAsNiArNDY0LDggQEAKIAkJcmV0ID0gaHctPnNldHVwKG5yLCBzeXMpOwogCiAJCWlmIChyZXQgPiAwKSB7CisJCQlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpob3N0X2JyaWRnZTsKKwogCQkJcmV0ID0gcGNpYmlvc19pbml0X3Jlc291cmNlcyhuciwgc3lzKTsKIAkJCWlmIChyZXQpICB7CiAJCQkJa2ZyZWUoc3lzKTsKQEAgLTQ5MSw2ICs0ODcsOSBAQAogCQkJYnVzbnIgPSBzeXMtPmJ1cy0+YnVzbl9yZXMuZW5kICsgMTsKIAogCQkJbGlzdF9hZGQoJnN5cy0+bm9kZSwgaGVhZCk7CisKKwkJCWhvc3RfYnJpZGdlID0gcGNpX2ZpbmRfaG9zdF9icmlkZ2Uoc3lzLT5idXMpOworCQkJaG9zdF9icmlkZ2UtPmFsaWduX3Jlc291cmNlID0gaHctPmFsaWduX3Jlc291cmNlOwogCQl9IGVsc2UgewogCQkJa2ZyZWUoc3lzKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtNTc4LDE0ICs1NzcsMTggQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGF0YTsKIAlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OworCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3RfYnJpZGdlOwogCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPICYmIHN0YXJ0ICYgMHgzMDApCiAJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwogCiAJc3RhcnQgPSAoc3RhcnQgKyBhbGlnbiAtIDEpICYgfihhbGlnbiAtIDEpOwogCi0JaWYgKGFsaWduX3Jlc291cmNlKQotCQlyZXR1cm4gYWxpZ25fcmVzb3VyY2UoZGV2LCByZXMsIHN0YXJ0LCBzaXplLCBhbGlnbik7CisJaG9zdF9icmlkZ2UgPSBwY2lfZmluZF9ob3N0X2JyaWRnZShkZXYtPmJ1cyk7CisKKwlpZiAoaG9zdF9icmlkZ2UtPmFsaWduX3Jlc291cmNlKQorCQlyZXR1cm4gaG9zdF9icmlkZ2UtPmFsaWduX3Jlc291cmNlKGRldiwgcmVzLAorCQkJCXN0YXJ0LCBzaXplLCBhbGlnbik7CiAKIAlyZXR1cm4gc3RhcnQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCmluZGV4IGZkZTZjODguLmFjMzY4YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCkBAIC0zOTksNiArMzk5LDcgQEAKIAkJQ0FMTChzeXNfZXhlY3ZlYXQpCiAJCUNBTEwoc3lzX3VzZXJmYXVsdGZkKQogCQlDQUxMKHN5c19tZW1iYXJyaWVyKQorCQlDQUxMKHN5c19tbG9jazIpCiAjaWZuZGVmIHN5c2NhbGxzX2NvdW50ZWQKIC5lcXUgc3lzY2FsbHNfcGFkZGluZywgKChOUl9zeXNjYWxscyArIDMpICYgfjMpIC0gTlJfc3lzY2FsbHMKICNkZWZpbmUgc3lzY2FsbHNfY291bnRlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggN2E3YzRjZS4uNGFkZmI0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC05NSw2ICs5NSwyMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY2hhciBidWZbNjRdOworI2lmbmRlZiBDT05GSUdfQ1BVX1Y3TQorCXVuc2lnbmVkIGludCBkb21haW47CisjaWZkZWYgQ09ORklHX0NQVV9TV19ET01BSU5fUEFOCisJLyoKKwkgKiBHZXQgdGhlIGRvbWFpbiByZWdpc3RlciBmb3IgdGhlIHBhcmVudCBjb250ZXh0LiBJbiB1c2VyCisJICogbW9kZSwgd2UgZG9uJ3Qgc2F2ZSB0aGUgREFDUiwgc28gbGV0cyB1c2Ugd2hhdCBpdCBzaG91bGQKKwkgKiBiZS4gRm9yIG90aGVyIG1vZGVzLCB3ZSBwbGFjZSBpdCBhZnRlciB0aGUgcHRfcmVncyBzdHJ1Y3QuCisJICovCisJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJZG9tYWluID0gREFDUl9VQUNDRVNTX0VOQUJMRTsKKwllbHNlCisJCWRvbWFpbiA9ICoodW5zaWduZWQgaW50ICopKHJlZ3MgKyAxKTsKKyNlbHNlCisJZG9tYWluID0gZ2V0X2RvbWFpbigpOworI2VuZGlmCisjZW5kaWYKIAogCXNob3dfcmVnc19wcmludF9pbmZvKEtFUk5fREVGQVVMVCk7CiAKQEAgLTEyMywyMSArMTM5LDggQEAKIAogI2lmbmRlZiBDT05GSUdfQ1BVX1Y3TQogCXsKLQkJdW5zaWduZWQgaW50IGRvbWFpbiA9IGdldF9kb21haW4oKTsKIAkJY29uc3QgY2hhciAqc2VnbWVudDsKIAotI2lmZGVmIENPTkZJR19DUFVfU1dfRE9NQUlOX1BBTgotCQkvKgotCQkgKiBHZXQgdGhlIGRvbWFpbiByZWdpc3RlciBmb3IgdGhlIHBhcmVudCBjb250ZXh0LiBJbiB1c2VyCi0JCSAqIG1vZGUsIHdlIGRvbid0IHNhdmUgdGhlIERBQ1IsIHNvIGxldHMgdXNlIHdoYXQgaXQgc2hvdWxkCi0JCSAqIGJlLiBGb3Igb3RoZXIgbW9kZXMsIHdlIHBsYWNlIGl0IGFmdGVyIHRoZSBwdF9yZWdzIHN0cnVjdC4KLQkJICovCi0JCWlmICh1c2VyX21vZGUocmVncykpCi0JCQlkb21haW4gPSBEQUNSX1VBQ0NFU1NfRU5BQkxFOwotCQllbHNlCi0JCQlkb21haW4gPSAqKHVuc2lnbmVkIGludCAqKShyZWdzICsgMSk7Ci0jZW5kaWYKLQogCQlpZiAoKGRvbWFpbiAmIGRvbWFpbl9tYXNrKERPTUFJTl9VU0VSKSkgPT0KIAkJICAgIGRvbWFpbl92YWwoRE9NQUlOX1VTRVIsIERPTUFJTl9OT0FDQ0VTUykpCiAJCQlzZWdtZW50ID0gIm5vbmUiOwpAQCAtMTYzLDExICsxNjYsMTEgQEAKIAkJYnVmWzBdID0gJ1wwJzsKICNpZmRlZiBDT05GSUdfQ1BVX0NQMTVfTU1VCiAJCXsKLQkJCXVuc2lnbmVkIGludCB0cmFuc2Jhc2UsIGRhYyA9IGdldF9kb21haW4oKTsKKwkJCXVuc2lnbmVkIGludCB0cmFuc2Jhc2U7CiAJCQlhc20oIm1yYyBwMTUsIDAsICUwLCBjMiwgYzBcblx0IgogCQkJICAgIDogIj1yIiAodHJhbnNiYXNlKSk7CiAJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiICBUYWJsZTogJTA4eCAgREFDOiAlMDh4IiwKLQkJCSAgCXRyYW5zYmFzZSwgZGFjKTsKKwkJCQl0cmFuc2Jhc2UsIGRvbWFpbik7CiAJCX0KICNlbmRpZgogCQlhc20oIm1yYyBwMTUsIDAsICUwLCBjMSwgYzBcbiIgOiAiPXIiIChjdHJsKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc3dwX2VtdWxhdGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9zd3BfZW11bGF0ZS5jCmluZGV4IDViMjZlN2UuLmMzZmU3NjlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc3dwX2VtdWxhdGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc3dwX2VtdWxhdGUuYwpAQCAtMzYsMTAgKzM2LDEwIEBACiAgKi8KICNkZWZpbmUgX191c2VyX3N3cFhfYXNtKGRhdGEsIGFkZHIsIHJlcywgdGVtcCwgQikJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKLQkiCW1vdgkJJTIsICUxXG4iCQkJXAotCSIwOglsZHJleCJCIgklMSwgWyUzXVxuIgkJCVwKLQkiMToJc3RyZXgiQiIJJTAsICUyLCBbJTNdXG4iCQkJXAorCSIwOglsZHJleCJCIgklMiwgWyUzXVxuIgkJCVwKKwkiMToJc3RyZXgiQiIJJTAsICUxLCBbJTNdXG4iCQkJXAogCSIJY21wCQklMCwgIzBcbiIJCQlcCisJIgltb3ZlcQkJJTEsICUyXG4iCQkJXAogCSIJbW92bmUJCSUwLCAlNFxuIgkJCVwKIAkiMjpcbiIJCQkJCQkJXAogCSIJLnNlY3Rpb24JIC50ZXh0LmZpeHVwLFwiYXhcIlxuIgkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jIGIvYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jCmluZGV4IGI4M2YzYjcuLjA4N2FjYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMKQEAgLTE5MywxNSArMTkzLDQ0IEBACiAJcGlkX3QJbF9waWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsYWxpZ25lZCg0KSkpOwogCitzdGF0aWMgbG9uZyBkb19sb2Nrcyh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBmbG9jazY0IGtlcm5lbDsKKwlzdHJ1Y3Qgb2FiaV9mbG9jazY0IHVzZXI7CisJbW1fc2VnbWVudF90IGZzOworCWxvbmcgcmV0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyLCAoc3RydWN0IG9hYmlfZmxvY2s2NCBfX3VzZXIgKilhcmcsCisJCQkgICBzaXplb2YodXNlcikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlrZXJuZWwubF90eXBlCT0gdXNlci5sX3R5cGU7CisJa2VybmVsLmxfd2hlbmNlCT0gdXNlci5sX3doZW5jZTsKKwlrZXJuZWwubF9zdGFydAk9IHVzZXIubF9zdGFydDsKKwlrZXJuZWwubF9sZW4JPSB1c2VyLmxfbGVuOworCWtlcm5lbC5sX3BpZAk9IHVzZXIubF9waWQ7CisKKwlmcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCXJldCA9IHN5c19mY250bDY0KGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKSZrZXJuZWwpOworCXNldF9mcyhmcyk7CisKKwlpZiAoIXJldCAmJiAoY21kID09IEZfR0VUTEs2NCB8fCBjbWQgPT0gRl9PRkRfR0VUTEspKSB7CisJCXVzZXIubF90eXBlCT0ga2VybmVsLmxfdHlwZTsKKwkJdXNlci5sX3doZW5jZQk9IGtlcm5lbC5sX3doZW5jZTsKKwkJdXNlci5sX3N0YXJ0CT0ga2VybmVsLmxfc3RhcnQ7CisJCXVzZXIubF9sZW4JPSBrZXJuZWwubF9sZW47CisJCXVzZXIubF9waWQJPSBrZXJuZWwubF9waWQ7CisJCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBvYWJpX2Zsb2NrNjQgX191c2VyICopYXJnLAorCQkJCSAmdXNlciwgc2l6ZW9mKHVzZXIpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfb2FiaV9mY250bDY0KHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQkgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IG9hYmlfZmxvY2s2NCB1c2VyOwotCXN0cnVjdCBmbG9jazY0IGtlcm5lbDsKLQltbV9zZWdtZW50X3QgZnMgPSBVU0VSX0RTOyAvKiBpbml0aWFsaXplZCB0byBraWxsIGEgd2FybmluZyAqLwotCXVuc2lnbmVkIGxvbmcgbG9jYWxfYXJnID0gYXJnOwotCWludCByZXQ7Ci0KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRl9PRkRfR0VUTEs6CiAJY2FzZSBGX09GRF9TRVRMSzoKQEAgLTIwOSwzOSArMjM4LDExIEBACiAJY2FzZSBGX0dFVExLNjQ6CiAJY2FzZSBGX1NFVExLNjQ6CiAJY2FzZSBGX1NFVExLVzY0OgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXIsIChzdHJ1Y3Qgb2FiaV9mbG9jazY0IF9fdXNlciAqKWFyZywKLQkJCQkgICBzaXplb2YodXNlcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWtlcm5lbC5sX3R5cGUJPSB1c2VyLmxfdHlwZTsKLQkJa2VybmVsLmxfd2hlbmNlCT0gdXNlci5sX3doZW5jZTsKLQkJa2VybmVsLmxfc3RhcnQJPSB1c2VyLmxfc3RhcnQ7Ci0JCWtlcm5lbC5sX2xlbgk9IHVzZXIubF9sZW47Ci0JCWtlcm5lbC5sX3BpZAk9IHVzZXIubF9waWQ7Ci0JCWxvY2FsX2FyZyA9ICh1bnNpZ25lZCBsb25nKSZrZXJuZWw7Ci0JCWZzID0gZ2V0X2ZzKCk7Ci0JCXNldF9mcyhLRVJORUxfRFMpOworCQlyZXR1cm4gZG9fbG9ja3MoZmQsIGNtZCwgYXJnKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiBzeXNfZmNudGw2NChmZCwgY21kLCBhcmcpOwogCX0KLQotCXJldCA9IHN5c19mY250bDY0KGZkLCBjbWQsIGxvY2FsX2FyZyk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgRl9HRVRMSzY0OgotCQlpZiAoIXJldCkgewotCQkJdXNlci5sX3R5cGUJPSBrZXJuZWwubF90eXBlOwotCQkJdXNlci5sX3doZW5jZQk9IGtlcm5lbC5sX3doZW5jZTsKLQkJCXVzZXIubF9zdGFydAk9IGtlcm5lbC5sX3N0YXJ0OwotCQkJdXNlci5sX2xlbgk9IGtlcm5lbC5sX2xlbjsKLQkJCXVzZXIubF9waWQJPSBrZXJuZWwubF9waWQ7Ci0JCQlpZiAoY29weV90b191c2VyKChzdHJ1Y3Qgb2FiaV9mbG9jazY0IF9fdXNlciAqKWFyZywKLQkJCQkJICZ1c2VyLCBzaXplb2YodXNlcikpKQotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCX0KLQljYXNlIEZfU0VUTEs2NDoKLQljYXNlIEZfU0VUTEtXNjQ6Ci0JCXNldF9mcyhmcyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKIH0KIAogc3RydWN0IG9hYmlfZXBvbGxfZXZlbnQgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2FybS5jIGIvYXJjaC9hcm0va3ZtL2FybS5jCmluZGV4IGVhYjgzYjIuLmUwNmZkMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS9hcm0uYworKysgYi9hcmNoL2FybS9rdm0vYXJtLmMKQEAgLTU2NCwxNyArNTY0LDEyIEBACiAJCQl2Y3B1X3NsZWVwKHZjcHUpOwogCiAJCS8qCi0JCSAqIERpc2FybWluZyB0aGUgYmFja2dyb3VuZCB0aW1lciBtdXN0IGJlIGRvbmUgaW4gYQotCQkgKiBwcmVlbXB0aWJsZSBjb250ZXh0LCBhcyB0aGlzIGNhbGwgbWF5IHNsZWVwLgotCQkgKi8KLQkJa3ZtX3RpbWVyX2ZsdXNoX2h3c3RhdGUodmNwdSk7Ci0KLQkJLyoKIAkJICogUHJlcGFyaW5nIHRoZSBpbnRlcnJ1cHRzIHRvIGJlIGluamVjdGVkIGFsc28KIAkJICogaW52b2x2ZXMgcG9raW5nIHRoZSBHSUMsIHdoaWNoIG11c3QgYmUgZG9uZSBpbiBhCiAJCSAqIG5vbi1wcmVlbXB0aWJsZSBjb250ZXh0LgogCQkgKi8KIAkJcHJlZW1wdF9kaXNhYmxlKCk7CisJCWt2bV90aW1lcl9mbHVzaF9od3N0YXRlKHZjcHUpOwogCQlrdm1fdmdpY19mbHVzaF9od3N0YXRlKHZjcHUpOwogCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vbW1pby5jIGIvYXJjaC9hcm0va3ZtL21taW8uYwppbmRleCA5NzRiMWM2Li4zYTEwYzlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rdm0vbW1pby5jCisrKyBiL2FyY2gvYXJtL2t2bS9tbWlvLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCQl0cmFjZV9rdm1fbW1pbyhLVk1fVFJBQ0VfTU1JT19SRUFELCBsZW4sIHJ1bi0+bW1pby5waHlzX2FkZHIsCiAJCQkgICAgICAgZGF0YSk7CiAJCWRhdGEgPSB2Y3B1X2RhdGFfaG9zdF90b19ndWVzdCh2Y3B1LCBkYXRhLCBsZW4pOwotCQkqdmNwdV9yZWcodmNwdSwgdmNwdS0+YXJjaC5tbWlvX2RlY29kZS5ydCkgPSBkYXRhOworCQl2Y3B1X3NldF9yZWcodmNwdSwgdmNwdS0+YXJjaC5tbWlvX2RlY29kZS5ydCwgZGF0YSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xODYsNyArMTg2LDggQEAKIAlydCA9IHZjcHUtPmFyY2gubW1pb19kZWNvZGUucnQ7CiAKIAlpZiAoaXNfd3JpdGUpIHsKLQkJZGF0YSA9IHZjcHVfZGF0YV9ndWVzdF90b19ob3N0KHZjcHUsICp2Y3B1X3JlZyh2Y3B1LCBydCksIGxlbik7CisJCWRhdGEgPSB2Y3B1X2RhdGFfZ3Vlc3RfdG9faG9zdCh2Y3B1LCB2Y3B1X2dldF9yZWcodmNwdSwgcnQpLAorCQkJCQkgICAgICAgbGVuKTsKIAogCQl0cmFjZV9rdm1fbW1pbyhLVk1fVFJBQ0VfTU1JT19XUklURSwgbGVuLCBmYXVsdF9pcGEsIGRhdGEpOwogCQltbWlvX3dyaXRlX2J1ZihkYXRhX2J1ZiwgbGVuLCBkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2t2bS9tbXUuYyBiL2FyY2gvYXJtL2t2bS9tbXUuYwppbmRleCA2OTg0MzQyLi42MWQ5NmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rdm0vbW11LmMKKysrIGIvYXJjaC9hcm0va3ZtL21tdS5jCkBAIC05OCw2ICs5OCwxMSBAQAogCV9fa3ZtX2ZsdXNoX2RjYWNoZV9wdWQocHVkKTsKIH0KIAorc3RhdGljIGJvb2wga3ZtX2lzX2RldmljZV9wZm4odW5zaWduZWQgbG9uZyBwZm4pCit7CisJcmV0dXJuICFwZm5fdmFsaWQocGZuKTsKK30KKwogLyoqCiAgKiBzdGFnZTJfZGlzc29sdmVfcG1kKCkgLSBjbGVhciBhbmQgZmx1c2ggaHVnZSBQTUQgZW50cnkKICAqIEBrdm06CXBvaW50ZXIgdG8ga3ZtIHN0cnVjdHVyZS4KQEAgLTIxMyw3ICsyMTgsNyBAQAogCQkJa3ZtX3RsYl9mbHVzaF92bWlkX2lwYShrdm0sIGFkZHIpOwogCiAJCQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIGZvciBkZXZpY2UgbWFwcGluZ3MgKi8KLQkJCWlmICgocHRlX3ZhbChvbGRfcHRlKSAmIFBBR0VfUzJfREVWSUNFKSAhPSBQQUdFX1MyX0RFVklDRSkKKwkJCWlmICgha3ZtX2lzX2RldmljZV9wZm4ocHRlX3BmbihvbGRfcHRlKSkpCiAJCQkJa3ZtX2ZsdXNoX2RjYWNoZV9wdGUob2xkX3B0ZSk7CiAKIAkJCXB1dF9wYWdlKHZpcnRfdG9fcGFnZShwdGUpKTsKQEAgLTMwNSw4ICszMTAsNyBAQAogCiAJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKIAlkbyB7Ci0JCWlmICghcHRlX25vbmUoKnB0ZSkgJiYKLQkJICAgIChwdGVfdmFsKCpwdGUpICYgUEFHRV9TMl9ERVZJQ0UpICE9IFBBR0VfUzJfREVWSUNFKQorCQlpZiAoIXB0ZV9ub25lKCpwdGUpICYmICFrdm1faXNfZGV2aWNlX3BmbihwdGVfcGZuKCpwdGUpKSkKIAkJCWt2bV9mbHVzaF9kY2FjaGVfcHRlKCpwdGUpOwogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogfQpAQCAtMTAzNywxMSArMTA0MSw2IEBACiAJcmV0dXJuIGt2bV92Y3B1X2RhYnRfaXN3cml0ZSh2Y3B1KTsKIH0KIAotc3RhdGljIGJvb2wga3ZtX2lzX2RldmljZV9wZm4odW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JcmV0dXJuICFwZm5fdmFsaWQocGZuKTsKLX0KLQogLyoqCiAgKiBzdGFnZTJfd3BfcHRlcyAtIHdyaXRlIHByb3RlY3QgUE1EIHJhbmdlCiAgKiBAcG1kOglwb2ludGVyIHRvIHBtZCBlbnRyeQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL3BzY2kuYyBiL2FyY2gvYXJtL2t2bS9wc2NpLmMKaW5kZXggMGI1NTY5Ni4uYTliM2I5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL3BzY2kuYworKysgYi9hcmNoL2FybS9rdm0vcHNjaS5jCkBAIC03NSw3ICs3NSw3IEBACiAJdW5zaWduZWQgbG9uZyBjb250ZXh0X2lkOwogCXBoeXNfYWRkcl90IHRhcmdldF9wYzsKIAotCWNwdV9pZCA9ICp2Y3B1X3JlZyhzb3VyY2VfdmNwdSwgMSkgJiBNUElEUl9IV0lEX0JJVE1BU0s7CisJY3B1X2lkID0gdmNwdV9nZXRfcmVnKHNvdXJjZV92Y3B1LCAxKSAmIE1QSURSX0hXSURfQklUTUFTSzsKIAlpZiAodmNwdV9tb2RlX2lzXzMyYml0KHNvdXJjZV92Y3B1KSkKIAkJY3B1X2lkICY9IH4oKHUzMikgMCk7CiAKQEAgLTk0LDggKzk0LDggQEAKIAkJCXJldHVybiBQU0NJX1JFVF9JTlZBTElEX1BBUkFNUzsKIAl9CiAKLQl0YXJnZXRfcGMgPSAqdmNwdV9yZWcoc291cmNlX3ZjcHUsIDIpOwotCWNvbnRleHRfaWQgPSAqdmNwdV9yZWcoc291cmNlX3ZjcHUsIDMpOworCXRhcmdldF9wYyA9IHZjcHVfZ2V0X3JlZyhzb3VyY2VfdmNwdSwgMik7CisJY29udGV4dF9pZCA9IHZjcHVfZ2V0X3JlZyhzb3VyY2VfdmNwdSwgMyk7CiAKIAlrdm1fcmVzZXRfdmNwdSh2Y3B1KTsKIApAQCAtMTE0LDcgKzExNCw3IEBACiAJICogTk9URTogV2UgYWx3YXlzIHVwZGF0ZSByMCAob3IgeDApIGJlY2F1c2UgZm9yIFBTQ0kgdjAuMQogCSAqIHRoZSBnZW5lcmFsIHB1c3Bvc2UgcmVnaXN0ZXJzIGFyZSB1bmRlZmluZWQgdXBvbiBDUFVfT04uCiAJICovCi0JKnZjcHVfcmVnKHZjcHUsIDApID0gY29udGV4dF9pZDsKKwl2Y3B1X3NldF9yZWcodmNwdSwgMCwgY29udGV4dF9pZCk7CiAJdmNwdS0+YXJjaC5wb3dlcl9vZmYgPSBmYWxzZTsKIAlzbXBfbWIoKTsJCS8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgaXMgdmlzaWJsZSAqLwogCkBAIC0xMzQsOCArMTM0LDggQEAKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LT5rdm07CiAJc3RydWN0IGt2bV92Y3B1ICp0bXA7CiAKLQl0YXJnZXRfYWZmaW5pdHkgPSAqdmNwdV9yZWcodmNwdSwgMSk7Ci0JbG93ZXN0X2FmZmluaXR5X2xldmVsID0gKnZjcHVfcmVnKHZjcHUsIDIpOworCXRhcmdldF9hZmZpbml0eSA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCAxKTsKKwlsb3dlc3RfYWZmaW5pdHlfbGV2ZWwgPSB2Y3B1X2dldF9yZWcodmNwdSwgMik7CiAKIAkvKiBEZXRlcm1pbmUgdGFyZ2V0IGFmZmluaXR5IG1hc2sgKi8KIAl0YXJnZXRfYWZmaW5pdHlfbWFzayA9IHBzY2lfYWZmaW5pdHlfbWFzayhsb3dlc3RfYWZmaW5pdHlfbGV2ZWwpOwpAQCAtMjA5LDcgKzIwOSw3IEBACiBzdGF0aWMgaW50IGt2bV9wc2NpXzBfMl9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnQgcmV0ID0gMTsKLQl1bnNpZ25lZCBsb25nIHBzY2lfZm4gPSAqdmNwdV9yZWcodmNwdSwgMCkgJiB+KCh1MzIpIDApOworCXVuc2lnbmVkIGxvbmcgcHNjaV9mbiA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCAwKSAmIH4oKHUzMikgMCk7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAlzd2l0Y2ggKHBzY2lfZm4pIHsKQEAgLTI3MywxMyArMjczLDEzIEBACiAJCWJyZWFrOwogCX0KIAotCSp2Y3B1X3JlZyh2Y3B1LCAwKSA9IHZhbDsKKwl2Y3B1X3NldF9yZWcodmNwdSwgMCwgdmFsKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGt2bV9wc2NpXzBfMV9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIHBzY2lfZm4gPSAqdmNwdV9yZWcodmNwdSwgMCkgJiB+KCh1MzIpIDApOworCXVuc2lnbmVkIGxvbmcgcHNjaV9mbiA9IHZjcHVfZ2V0X3JlZyh2Y3B1LCAwKSAmIH4oKHUzMikgMCk7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAlzd2l0Y2ggKHBzY2lfZm4pIHsKQEAgLTI5NSw3ICsyOTUsNyBAQAogCQlicmVhazsKIAl9CiAKLQkqdmNwdV9yZWcodmNwdSwgMCkgPSB2YWw7CisJdmNwdV9zZXRfcmVnKHZjcHUsIDAsIHZhbCk7CiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi91YWNjZXNzX3dpdGhfbWVtY3B5LmMgYi9hcmNoL2FybS9saWIvdWFjY2Vzc193aXRoX21lbWNweS5jCmluZGV4IGQ3MmI5MDkuLjU4OGJiYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi91YWNjZXNzX3dpdGhfbWVtY3B5LmMKKysrIGIvYXJjaC9hcm0vbGliL3VhY2Nlc3Nfd2l0aF9tZW1jcHkuYwpAQCAtODgsNiArODgsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbm9pbmxpbmUKIF9fY29weV90b191c2VyX21lbWNweSh2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKKwl1bnNpZ25lZCBsb25nIHVhX2ZsYWdzOwogCWludCBhdG9taWM7CiAKIAlpZiAodW5saWtlbHkoc2VnbWVudF9lcShnZXRfZnMoKSwgS0VSTkVMX0RTKSkpIHsKQEAgLTExOCw3ICsxMTksOSBAQAogCQlpZiAodG9jb3B5ID4gbikKIAkJCXRvY29weSA9IG47CiAKKwkJdWFfZmxhZ3MgPSB1YWNjZXNzX3NhdmVfYW5kX2VuYWJsZSgpOwogCQltZW1jcHkoKHZvaWQgKil0bywgZnJvbSwgdG9jb3B5KTsKKwkJdWFjY2Vzc19yZXN0b3JlKHVhX2ZsYWdzKTsKIAkJdG8gKz0gdG9jb3B5OwogCQlmcm9tICs9IHRvY29weTsKIAkJbiAtPSB0b2NvcHk7CkBAIC0xNDUsMTQgKzE0OCwyMSBAQAogCSAqIFdpdGggZnJhbWUgcG9pbnRlciBkaXNhYmxlZCwgdGFpbCBjYWxsIG9wdGltaXphdGlvbiBraWNrcyBpbgogCSAqIGFzIHdlbGwgbWFraW5nIHRoaXMgdGVzdCBhbG1vc3QgaW52aXNpYmxlLgogCSAqLwotCWlmIChuIDwgNjQpCi0JCXJldHVybiBfX2NvcHlfdG9fdXNlcl9zdGQodG8sIGZyb20sIG4pOwotCXJldHVybiBfX2NvcHlfdG9fdXNlcl9tZW1jcHkodG8sIGZyb20sIG4pOworCWlmIChuIDwgNjQpIHsKKwkJdW5zaWduZWQgbG9uZyB1YV9mbGFncyA9IHVhY2Nlc3Nfc2F2ZV9hbmRfZW5hYmxlKCk7CisJCW4gPSBfX2NvcHlfdG9fdXNlcl9zdGQodG8sIGZyb20sIG4pOworCQl1YWNjZXNzX3Jlc3RvcmUodWFfZmxhZ3MpOworCX0gZWxzZSB7CisJCW4gPSBfX2NvcHlfdG9fdXNlcl9tZW1jcHkodG8sIGZyb20sIG4pOworCX0KKwlyZXR1cm4gbjsKIH0KIAkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5vaW5saW5lCiBfX2NsZWFyX3VzZXJfbWVtc2V0KHZvaWQgX191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIG4pCiB7CisJdW5zaWduZWQgbG9uZyB1YV9mbGFnczsKKwogCWlmICh1bmxpa2VseShzZWdtZW50X2VxKGdldF9mcygpLCBLRVJORUxfRFMpKSkgewogCQltZW1zZXQoKHZvaWQgKilhZGRyLCAwLCBuKTsKIAkJcmV0dXJuIDA7CkBAIC0xNzUsNyArMTg1LDkgQEAKIAkJaWYgKHRvY29weSA+IG4pCiAJCQl0b2NvcHkgPSBuOwogCisJCXVhX2ZsYWdzID0gdWFjY2Vzc19zYXZlX2FuZF9lbmFibGUoKTsKIAkJbWVtc2V0KCh2b2lkICopYWRkciwgMCwgdG9jb3B5KTsKKwkJdWFjY2Vzc19yZXN0b3JlKHVhX2ZsYWdzKTsKIAkJYWRkciArPSB0b2NvcHk7CiAJCW4gLT0gdG9jb3B5OwogCkBAIC0xOTMsOSArMjA1LDE0IEBACiB1bnNpZ25lZCBsb25nIGFybV9jbGVhcl91c2VyKHZvaWQgX191c2VyICphZGRyLCB1bnNpZ25lZCBsb25nIG4pCiB7CiAJLyogU2VlIHJhdGlvbmFsIGZvciB0aGlzIGluIF9fY29weV90b191c2VyKCkgYWJvdmUuICovCi0JaWYgKG4gPCA2NCkKLQkJcmV0dXJuIF9fY2xlYXJfdXNlcl9zdGQoYWRkciwgbik7Ci0JcmV0dXJuIF9fY2xlYXJfdXNlcl9tZW1zZXQoYWRkciwgbik7CisJaWYgKG4gPCA2NCkgeworCQl1bnNpZ25lZCBsb25nIHVhX2ZsYWdzID0gdWFjY2Vzc19zYXZlX2FuZF9lbmFibGUoKTsKKwkJbiA9IF9fY2xlYXJfdXNlcl9zdGQoYWRkciwgbik7CisJCXVhY2Nlc3NfcmVzdG9yZSh1YV9mbGFncyk7CisJfSBlbHNlIHsKKwkJbiA9IF9fY2xlYXJfdXNlcl9tZW1zZXQoYWRkciwgbik7CisJfQorCXJldHVybiBuOwogfQogCiAjaWYgMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwppbmRleCA5MjY3MzAwLi4yODY1NmMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwpAQCAtNCw3ICs0LDYgQEAKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgQ09NTU9OX0NMS19BVDkxCiAJc2VsZWN0IFBJTkNUUkwKLQlzZWxlY3QgUElOQ1RSTF9BVDkxCiAJc2VsZWN0IFNPQ19CVVMKIAogaWYgQVJDSF9BVDkxCkBAIC0xNyw2ICsxNiw3IEBACiAJc2VsZWN0IEhBVkVfQVQ5MV9VU0JfQ0xLCiAJc2VsZWN0IEhBVkVfQVQ5MV9IMzJNWAogCXNlbGVjdCBIQVZFX0FUOTFfR0VORVJBVEVEX0NMSworCXNlbGVjdCBQSU5DVFJMX0FUOTFQSU80CiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgb3UgYXJlIHVzaW5nIG9uZSBvZiBBdG1lbCdzIFNBTUE1RDIgZmFtaWx5IFNvQy4KIApAQCAtMjcsNiArMjcsNyBAQAogCXNlbGVjdCBIQVZFX0FUOTFfVVRNSQogCXNlbGVjdCBIQVZFX0FUOTFfU01ECiAJc2VsZWN0IEhBVkVfQVQ5MV9VU0JfQ0xLCisJc2VsZWN0IFBJTkNUUkxfQVQ5MQogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgb25lIG9mIEF0bWVsJ3MgU0FNQTVEMyBmYW1pbHkgU29DLgogCSAgVGhpcyBzdXBwb3J0IGNvdmVycyBTQU1BNUQzMSwgU0FNQTVEMzMsIFNBTUE1RDM0LCBTQU1BNUQzNSwgU0FNQTVEMzYuCkBAIC00MCw2ICs0MSw3IEBACiAJc2VsZWN0IEhBVkVfQVQ5MV9TTUQKIAlzZWxlY3QgSEFWRV9BVDkxX1VTQl9DTEsKIAlzZWxlY3QgSEFWRV9BVDkxX0gzMk1YCisJc2VsZWN0IFBJTkNUUkxfQVQ5MQogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgb25lIG9mIEF0bWVsJ3MgU0FNQTVENCBmYW1pbHkgU29DLgogCkBAIC01MCw2ICs1Miw3IEBACiAJc2VsZWN0IENQVV9BUk05MjBUCiAJc2VsZWN0IEhBVkVfQVQ5MV9VU0JfQ0xLCiAJc2VsZWN0IE1JR0hUX0hBVkVfUENJCisJc2VsZWN0IFBJTkNUUkxfQVQ5MQogCXNlbGVjdCBTT0NfU0FNX1Y0X1Y1CiAJc2VsZWN0IFNSQU0gaWYgUE0KIAloZWxwCkBAIC02NSw2ICs2OCw3IEBACiAJc2VsZWN0IEhBVkVfQVQ5MV9VVE1JCiAJc2VsZWN0IEhBVkVfRkJfQVRNRUwKIAlzZWxlY3QgTUVNT1JZCisJc2VsZWN0IFBJTkNUUkxfQVQ5MQogCXNlbGVjdCBTT0NfU0FNX1Y0X1Y1CiAJc2VsZWN0IFNSQU0gaWYgUE0KIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCmluZGV4IDgwZTI3N2MuLjIzNzI2ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCkBAIC00MSw4ICs0MSwxMCBAQAogICogaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIG1vdmVkIGRvd24gaW50byB0aGUgcGluY3RybCBkcml2ZXIgYW5kIGdldAogICogY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGdlbmVyaWMgc3VzcGVuZC9yZXN1bWUgcGF0aC4KICAqLworI2lmZGVmIENPTkZJR19QSU5DVFJMX0FUOTEKIGV4dGVybiB2b2lkIGF0OTFfcGluY3RybF9ncGlvX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBhdDkxX3BpbmN0cmxfZ3Bpb19yZXN1bWUodm9pZCk7CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyB1aHBfdWRwX21hc2s7CkBAIC0xNTEsOCArMTUzLDkgQEAKIAogc3RhdGljIGludCBhdDkxX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKKyNpZmRlZiBDT05GSUdfUElOQ1RSTF9BVDkxCiAJYXQ5MV9waW5jdHJsX2dwaW9fc3VzcGVuZCgpOwotCisjZW5kaWYKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJLyoKIAkgKiBTdXNwZW5kLXRvLVJBTSBpcyBsaWtlIFNUQU5EQlkgcGx1cyBzbG93IGNsb2NrIG1vZGUsIHNvCkBAIC0xOTIsNyArMTk1LDkgQEAKIGVycm9yOgogCXRhcmdldF9zdGF0ZSA9IFBNX1NVU1BFTkRfT047CiAKKyNpZmRlZiBDT05GSUdfUElOQ1RSTF9BVDkxCiAJYXQ5MV9waW5jdHJsX2dwaW9fcmVzdW1lKCk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IDcyZDYyMmJhLi5kZjFkNDRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xOCwxMyArMTgsMTMgQEAKIAlAIGNoZWNrIGxvdyBpbnRlcnJ1cHRzCiAJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICNJUlFfQ0FVU0VfTE9XX09GRl0KIAlsZHIJXHRtcCwgW1xiYXNlLCAjSVJRX01BU0tfTE9XX09GRl0KLQltb3YJXGlycW5yLCAjMzEKKwltb3YJXGlycW5yLCAjMzIKIAlhbmRzCVxpcnFzdGF0LCBcaXJxc3RhdCwgXHRtcAogCiAJQCBpZiBubyBsb3cgaW50ZXJydXB0cyBzZXQsIGNoZWNrIGhpZ2ggaW50ZXJydXB0cwogCWxkcmVxCVxpcnFzdGF0LCBbXGJhc2UsICNJUlFfQ0FVU0VfSElHSF9PRkZdCiAJbGRyZXEJXHRtcCwgW1xiYXNlLCAjSVJRX01BU0tfSElHSF9PRkZdCi0JbW92ZXEJXGlycW5yLCAjNjMKKwltb3ZlcQlcaXJxbnIsICM2NAogCWFuZGVxcwlcaXJxc3RhdCwgXGlycXN0YXQsIFx0bXAKIAogCUAgZmluZCBmaXJzdCBhY3RpdmUgaW50ZXJydXB0IHNvdXJjZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3MvcG11LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYwppbmRleCBkZTY4OTM4Li5jMjFlNDFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vcy9wbXUuYwpAQCAtNzQ4LDggKzc0OCwxMiBAQAogdm9pZCBleHlub3Nfc3lzX3Bvd2VyZG93bl9jb25mKGVudW0gc3lzX3Bvd2VyZG93biBtb2RlKQogewogCXVuc2lnbmVkIGludCBpOworCWNvbnN0IHN0cnVjdCBleHlub3NfcG11X2RhdGEgKnBtdV9kYXRhOwogCi0JY29uc3Qgc3RydWN0IGV4eW5vc19wbXVfZGF0YSAqcG11X2RhdGEgPSBwbXVfY29udGV4dC0+cG11X2RhdGE7CisJaWYgKCFwbXVfY29udGV4dCkKKwkJcmV0dXJuOworCisJcG11X2RhdGEgPSBwbXVfY29udGV4dC0+cG11X2RhdGE7CiAKIAlpZiAocG11X2RhdGEtPnBvd2VyZG93bl9jb25mKQogCQlwbXVfZGF0YS0+cG93ZXJkb3duX2NvbmYobW9kZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9ncGMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2dwYy5jCmluZGV4IDhlNzk3NmEuLmNmYzY5NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2dwYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2dwYy5jCkBAIC0xNzcsNiArMTc3LDcgQEAKIAkuaXJxX3VubWFzawkJPSBpbXhfZ3BjX2lycV91bm1hc2ssCiAJLmlycV9yZXRyaWdnZXIJCT0gaXJxX2NoaXBfcmV0cmlnZ2VyX2hpZXJhcmNoeSwKIAkuaXJxX3NldF93YWtlCQk9IGlteF9ncGNfaXJxX3NldF93YWtlLAorCS5pcnFfc2V0X3R5cGUgICAgICAgICAgID0gaXJxX2NoaXBfc2V0X3R5cGVfcGFyZW50LAogI2lmZGVmIENPTkZJR19TTVAKIAkuaXJxX3NldF9hZmZpbml0eQk9IGlycV9jaGlwX3NldF9hZmZpbml0eV9wYXJlbnQsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggYjAyNDM5MC4uN2EwYzEzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQl3cml0ZWwoKnZhZGRyKyssIGJ1c19hZGRyKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIF9faW5kaXJlY3RfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpwKQorc3RhdGljIGlubGluZSB1OCBfX2luZGlyZWN0X3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqcCkKIHsKIAl1MzIgYWRkciA9ICh1MzIpcDsKIAl1MzIgbiwgYnl0ZV9lbmFibGVzLCBkYXRhOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCSp2YWRkcisrID0gcmVhZGIoYnVzX2FkZHIpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IF9faW5kaXJlY3RfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpwKQorc3RhdGljIGlubGluZSB1MTYgX19pbmRpcmVjdF9yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnApCiB7CiAJdTMyIGFkZHIgPSAodTMyKXA7CiAJdTMyIG4sIGJ5dGVfZW5hYmxlcywgZGF0YTsKQEAgLTE4OSw3ICsxODksNyBAQAogCQkqdmFkZHIrKyA9IHJlYWR3KGJ1c19hZGRyKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9faW5kaXJlY3RfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpwKQorc3RhdGljIGlubGluZSB1MzIgX19pbmRpcmVjdF9yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnApCiB7CiAJdTMyIGFkZHIgPSAoX19mb3JjZSB1MzIpcDsKIAl1MzIgZGF0YTsKQEAgLTM1MCw3ICszNTAsNyBAQAogCQkJCQkoKHVuc2lnbmVkIGxvbmcpcCA8PSAoUElPX01BU0sgKyBQSU9fT0ZGU0VUKSkpCiAKICNkZWZpbmUJaW9yZWFkOChwKQkJCWlvcmVhZDgocCkKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvcmVhZDgoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQorc3RhdGljIGlubGluZSB1OCBpb3JlYWQ4KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHI7CiAJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKQEAgLTM3OCw3ICszNzgsNyBAQAogfQogCiAjZGVmaW5lCWlvcmVhZDE2KHApCQkJaW9yZWFkMTYocCkKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvcmVhZDE2KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdTE2IGlvcmVhZDE2KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHI7CiAJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKQEAgLTQwNyw3ICs0MDcsNyBAQAogfQogCiAjZGVmaW5lCWlvcmVhZDMyKHApCQkJaW9yZWFkMzIocCkKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvcmVhZDMyKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdTMyIGlvcmVhZDMyKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHI7CiAJaWYgKF9faXNfaW9fYWRkcmVzcyhwb3J0KSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwppbmRleCA1MDc2ZDNmLi4wNTE3ZjBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCkBAIC02NSw2ICs2NSw4IEBACiAJc2VsZWN0IE1BQ0hfT01BUF9HRU5FUklDCiAJc2VsZWN0IE1JR0hUX0hBVkVfQ0FDSEVfTDJYMAogCXNlbGVjdCBIQVZFX0FSTV9TQ1UKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKKwlzZWxlY3QgSEFWRV9BUk1fVFdECiAKIGNvbmZpZyBTT0NfRFJBN1hYCiAJYm9vbCAiVEkgRFJBN1hYIgpAQCAtMTIxLDYgKzEyMyw3IEBACiAJc2VsZWN0IE5FT04gaWYgQ1BVX1Y3CiAJc2VsZWN0IFBNCiAJc2VsZWN0IFJFR1VMQVRPUgorCXNlbGVjdCBSRUdVTEFUT1JfRklYRURfVk9MVEFHRQogCXNlbGVjdCBUV0w0MDMwX0NPUkUgaWYgQVJDSF9PTUFQMyB8fCBBUkNIX09NQVA0CiAJc2VsZWN0IFRXTDQwMzBfUE9XRVIgaWYgQVJDSF9PTUFQMyB8fCBBUkNIX09NQVA0CiAJc2VsZWN0IFZGUApAQCAtMjAxLDcgKzIwNCw2IEBACiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKLQlzZWxlY3QgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaWYgUkVHVUxBVE9SCiAKIGNvbmZpZyBNQUNIX05PS0lBX044MTAKICAgICAgICBib29sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMKaW5kZXggNTMwNWVjNy4uNzllMWY4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLXNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1zbXAuYwpAQCAtMTQzLDkgKzE0Myw5IEBACiAJCSAqIEVuc3VyZSB0aGF0IENQVSBwb3dlciBzdGF0ZSBpcyBzZXQgdG8gT04gdG8gYXZvaWQgQ1BVCiAJCSAqIHBvd2VyZG9tYWluIHRyYW5zaXRpb24gb24gd2ZpCiAJCSAqLwotCQljbGtkbV93YWtldXAoY3B1MV9jbGtkbSk7Ci0JCW9tYXBfc2V0X3B3cmRtX3N0YXRlKGNwdTFfcHdyZG0sIFBXUkRNX1BPV0VSX09OKTsKLQkJY2xrZG1fYWxsb3dfaWRsZShjcHUxX2Nsa2RtKTsKKwkJY2xrZG1fd2FrZXVwX25vbG9jayhjcHUxX2Nsa2RtKTsKKwkJcHdyZG1fc2V0X25leHRfcHdyc3QoY3B1MV9wd3JkbSwgUFdSRE1fUE9XRVJfT04pOworCQljbGtkbV9hbGxvd19pZGxlX25vbG9jayhjcHUxX2Nsa2RtKTsKIAogCQlpZiAoSVNfUE00NFhYX0VSUkFUVU0oUE1fT01BUDRfUk9NX1NNUF9CT09UX0VSUkFUVU1fR0lDRCkpIHsKIAkJCXdoaWxlIChnaWNfZGlzdF9kaXNhYmxlZCgpKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCmluZGV4IGNjOGE5ODcuLjQ4NDk1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCkBAIC04OTAsNiArODkwLDM2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgX2VuYWJsZV9vcHRpb25hbF9jbG9ja3Moc3RydWN0IG9tYXBfaHdtb2QgKm9oKQoreworCXN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgKm9jOworCWludCBpOworCisJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBlbmFibGluZyBvcHRpb25hbCBjbG9ja3NcbiIsIG9oLT5uYW1lKTsKKworCWZvciAoaSA9IG9oLT5vcHRfY2xrc19jbnQsIG9jID0gb2gtPm9wdF9jbGtzOyBpID4gMDsgaS0tLCBvYysrKQorCQlpZiAob2MtPl9jbGspIHsKKwkJCXByX2RlYnVnKCJvbWFwX2h3bW9kOiBlbmFibGUgJXM6JXNcbiIsIG9jLT5yb2xlLAorCQkJCSBfX2Nsa19nZXRfbmFtZShvYy0+X2NsaykpOworCQkJY2xrX2VuYWJsZShvYy0+X2Nsayk7CisJCX0KK30KKworc3RhdGljIHZvaWQgX2Rpc2FibGVfb3B0aW9uYWxfY2xvY2tzKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKK3sKKwlzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrICpvYzsKKwlpbnQgaTsKKworCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogZGlzYWJsaW5nIG9wdGlvbmFsIGNsb2Nrc1xuIiwgb2gtPm5hbWUpOworCisJZm9yIChpID0gb2gtPm9wdF9jbGtzX2NudCwgb2MgPSBvaC0+b3B0X2Nsa3M7IGkgPiAwOyBpLS0sIG9jKyspCisJCWlmIChvYy0+X2NsaykgeworCQkJcHJfZGVidWcoIm9tYXBfaHdtb2Q6IGRpc2FibGUgJXM6JXNcbiIsIG9jLT5yb2xlLAorCQkJCSBfX2Nsa19nZXRfbmFtZShvYy0+X2NsaykpOworCQkJY2xrX2Rpc2FibGUob2MtPl9jbGspOworCQl9Cit9CisKIC8qKgogICogX2VuYWJsZV9jbG9ja3MgLSBlbmFibGUgaHdtb2QgbWFpbiBjbG9jayBhbmQgaW50ZXJmYWNlIGNsb2NrcwogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCkBAIC05MTcsNiArOTQ3LDkgQEAKIAkJCWNsa19lbmFibGUob3MtPl9jbGspOwogCX0KIAorCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF9PUFRfQ0xLU19ORUVERUQpCisJCV9lbmFibGVfb3B0aW9uYWxfY2xvY2tzKG9oKTsKKwogCS8qIFRoZSBvcHQgY2xvY2tzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBkZXZpY2UgZHJpdmVyLiAqLwogCiAJcmV0dXJuIDA7CkBAIC05NDgsNDEgKzk4MSwxNCBAQAogCQkJY2xrX2Rpc2FibGUob3MtPl9jbGspOwogCX0KIAorCWlmIChvaC0+ZmxhZ3MgJiBIV01PRF9PUFRfQ0xLU19ORUVERUQpCisJCV9kaXNhYmxlX29wdGlvbmFsX2Nsb2NrcyhvaCk7CisKIAkvKiBUaGUgb3B0IGNsb2NrcyBhcmUgY29udHJvbGxlZCBieSB0aGUgZGV2aWNlIGRyaXZlci4gKi8KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfZW5hYmxlX29wdGlvbmFsX2Nsb2NrcyhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCi17Ci0Jc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayAqb2M7Ci0JaW50IGk7Ci0KLQlwcl9kZWJ1Zygib21hcF9od21vZDogJXM6IGVuYWJsaW5nIG9wdGlvbmFsIGNsb2Nrc1xuIiwgb2gtPm5hbWUpOwotCi0JZm9yIChpID0gb2gtPm9wdF9jbGtzX2NudCwgb2MgPSBvaC0+b3B0X2Nsa3M7IGkgPiAwOyBpLS0sIG9jKyspCi0JCWlmIChvYy0+X2NsaykgewotCQkJcHJfZGVidWcoIm9tYXBfaHdtb2Q6IGVuYWJsZSAlczolc1xuIiwgb2MtPnJvbGUsCi0JCQkJIF9fY2xrX2dldF9uYW1lKG9jLT5fY2xrKSk7Ci0JCQljbGtfZW5hYmxlKG9jLT5fY2xrKTsKLQkJfQotfQotCi1zdGF0aWMgdm9pZCBfZGlzYWJsZV9vcHRpb25hbF9jbG9ja3Moc3RydWN0IG9tYXBfaHdtb2QgKm9oKQotewotCXN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgKm9jOwotCWludCBpOwotCi0JcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBkaXNhYmxpbmcgb3B0aW9uYWwgY2xvY2tzXG4iLCBvaC0+bmFtZSk7Ci0KLQlmb3IgKGkgPSBvaC0+b3B0X2Nsa3NfY250LCBvYyA9IG9oLT5vcHRfY2xrczsgaSA+IDA7IGktLSwgb2MrKykKLQkJaWYgKG9jLT5fY2xrKSB7Ci0JCQlwcl9kZWJ1Zygib21hcF9od21vZDogZGlzYWJsZSAlczolc1xuIiwgb2MtPnJvbGUsCi0JCQkJIF9fY2xrX2dldF9uYW1lKG9jLT5fY2xrKSk7Ci0JCQljbGtfZGlzYWJsZShvYy0+X2Nsayk7Ci0JCX0KLX0KLQogLyoqCiAgKiBfb21hcDRfZW5hYmxlX21vZHVsZSAtIGVuYWJsZSBDTEtDVFJMIG1vZHVsZW1vZGUgb24gT01BUDQKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuaAppbmRleCBjYTZkZjFhLi43NmJjZTExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuaApAQCAtNTIzLDYgKzUyMyw4IEBACiAgKiBIV01PRF9SRUNPTkZJR19JT19DSEFJTjogb21hcF9od21vZCBjb2RlIG5lZWRzIHRvIHJlY29uZmlndXJlIHdha2UtdXAgCiAgKiAgICAgZXZlbnRzIGJ5IGNhbGxpbmcgX3JlY29uZmlndXJlX2lvX2NoYWluKCkgd2hlbiBhIGRldmljZSBpcyBlbmFibGVkCiAgKiAgICAgb3IgaWRsZWQuCisgKiBIV01PRF9PUFRfQ0xLU19ORUVERUQ6IFRoZSBvcHRpb25hbCBjbG9ja3MgYXJlIG5lZWRlZCBmb3IgdGhlIG1vZHVsZSB0bworICogICAgIG9wZXJhdGUgYW5kIHRoZXkgbmVlZCB0byBiZSBoYW5kbGVkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIG1haW5fY2xrLgogICovCiAjZGVmaW5lIEhXTU9EX1NXU1VQX1NJRExFCQkJKDEgPDwgMCkKICNkZWZpbmUgSFdNT0RfU1dTVVBfTVNUQU5EQlkJCQkoMSA8PCAxKQpAQCAtNTM4LDYgKzU0MCw3IEBACiAjZGVmaW5lIEhXTU9EX0ZPUkNFX01TVEFOREJZCQkJKDEgPDwgMTEpCiAjZGVmaW5lIEhXTU9EX1NXU1VQX1NJRExFX0FDVAkJCSgxIDw8IDEyKQogI2RlZmluZSBIV01PRF9SRUNPTkZJR19JT19DSEFJTgkJCSgxIDw8IDEzKQorI2RlZmluZSBIV01PRF9PUFRfQ0xLU19ORUVERUQJCQkoMSA8PCAxNCkKIAogLyoKICAqIG9tYXBfaHdtb2QuX2ludF9mbGFncyBkZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzd4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfN3h4X2RhdGEuYwppbmRleCA1MWQxZWNiLi5lZTRlMDQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfN3h4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfN3h4X2RhdGEuYwpAQCAtMTI5OCw2ICsxMjk4LDQ0IEBACiB9OwogCiAvKgorICogJ21jYXNwJyBjbGFzcworICoKKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBkcmE3eHhfbWNhc3Bfc3lzYyA9IHsKKwkuc3lzY19vZmZzCT0gMHgwMDA0LAorCS5zeXNjX2ZsYWdzCT0gU1lTQ19IQVNfU0lETEVNT0RFLAorCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKKwkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUzLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIGRyYTd4eF9tY2FzcF9od21vZF9jbGFzcyA9IHsKKwkubmFtZQk9ICJtY2FzcCIsCisJLnN5c2MJPSAmZHJhN3h4X21jYXNwX3N5c2MsCit9OworCisvKiBtY2FzcDMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIG1jYXNwM19vcHRfY2xrc1tdID0geworCXsgLnJvbGUgPSAiYWhjbGt4IiwgLmNsayA9ICJtY2FzcDNfYWhjbGt4X211eCIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBkcmE3eHhfbWNhc3AzX2h3bW9kID0geworCS5uYW1lCQk9ICJtY2FzcDMiLAorCS5jbGFzcwkJPSAmZHJhN3h4X21jYXNwX2h3bW9kX2NsYXNzLAorCS5jbGtkbV9uYW1lCT0gImw0cGVyMl9jbGtkbSIsCisJLm1haW5fY2xrCT0gIm1jYXNwM19hdXhfZ2ZjbGtfbXV4IiwKKwkuZmxhZ3MJCT0gSFdNT0RfT1BUX0NMS1NfTkVFREVELAorCS5wcmNtID0geworCQkub21hcDQgPSB7CisJCQkuY2xrY3RybF9vZmZzID0gRFJBN1hYX0NNX0w0UEVSMl9NQ0FTUDNfQ0xLQ1RSTF9PRkZTRVQsCisJCQkuY29udGV4dF9vZmZzID0gRFJBN1hYX1JNX0w0UEVSMl9NQ0FTUDNfQ09OVEVYVF9PRkZTRVQsCisJCQkubW9kdWxlbW9kZSAgID0gTU9EVUxFTU9ERV9TV0NUUkwsCisJCX0sCisJfSwKKwkub3B0X2Nsa3MJPSBtY2FzcDNfb3B0X2Nsa3MsCisJLm9wdF9jbGtzX2NudAk9IEFSUkFZX1NJWkUobWNhc3AzX29wdF9jbGtzKSwKK307CisKKy8qCiAgKiAnbW1jJyBjbGFzcwogICoKICAqLwpAQCAtMjU2Niw2ICsyNjA0LDIyIEBACiAJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKKy8qIGw0X3BlcjIgLT4gbWNhc3AzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIGRyYTd4eF9sNF9wZXIyX19tY2FzcDMgPSB7CisJLm1hc3RlcgkJPSAmZHJhN3h4X2w0X3BlcjJfaHdtb2QsCisJLnNsYXZlCQk9ICZkcmE3eHhfbWNhc3AzX2h3bW9kLAorCS5jbGsJCT0gImw0X3Jvb3RfY2xrX2RpdiIsCisJLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIGwzX21haW5fMSAtPiBtY2FzcDMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgZHJhN3h4X2wzX21haW5fMV9fbWNhc3AzID0geworCS5tYXN0ZXIJCT0gJmRyYTd4eF9sM19tYWluXzFfaHdtb2QsCisJLnNsYXZlCQk9ICZkcmE3eHhfbWNhc3AzX2h3bW9kLAorCS5jbGsJCT0gImwzX2ljbGtfZGl2IiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKwogLyogbDRfcGVyMSAtPiBlbG0gKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgZHJhN3h4X2w0X3BlcjFfX2VsbSA9IHsKIAkubWFzdGVyCQk9ICZkcmE3eHhfbDRfcGVyMV9od21vZCwKQEAgLTMzMDgsNiArMzM2Miw4IEBACiAJJmRyYTd4eF9sNF93a3VwX19kY2FuMSwKIAkmZHJhN3h4X2w0X3BlcjJfX2RjYW4yLAogCSZkcmE3eHhfbDRfcGVyMl9fY3BnbWFjMCwKKwkmZHJhN3h4X2w0X3BlcjJfX21jYXNwMywKKwkmZHJhN3h4X2wzX21haW5fMV9fbWNhc3AzLAogCSZkcmE3eHhfZ21hY19fbWRpbywKIAkmZHJhN3h4X2w0X2NmZ19fZG1hX3N5c3RlbSwKIAkmZHJhN3h4X2wzX21haW5fMV9fZHNzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzgxeHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzgxeHhfZGF0YS5jCmluZGV4IGIxMjg4ZjUuLjYyNTYwNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF84MXh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfODF4eF9kYXRhLmMKQEAgLTE0NCw2ICsxNDQsNyBAQAogCS5uYW1lCQk9ICJsNF9scyIsCiAJLmNsa2RtX25hbWUJPSAiYWx3b25fbDNzX2Nsa2RtIiwKIAkuY2xhc3MJCT0gJmw0X2h3bW9kX2NsYXNzLAorCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCiB9OwogCiAvKgpAQCAtMTU1LDYgKzE1Niw3IEBACiAJLm5hbWUJCT0gImw0X2hzIiwKIAkuY2xrZG1fbmFtZQk9ICJhbHdvbl9sM19tZWRfY2xrZG0iLAogCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKIC8qIEwzIHNsb3cgLT4gTDQgbHMgcGVyaXBoZXJhbCBpbnRlcmZhY2UgcnVubmluZyBhdCAxMjVNSHogKi8KQEAgLTg1MCw2ICs4NTIsNyBAQAogCS5uYW1lCQk9ICJlbWFjMCIsCiAJLmNsa2RtX25hbWUJPSAiYWx3b25fZXRoZXJuZXRfY2xrZG0iLAogCS5jbGFzcwkJPSAmZG04MTZ4X2VtYWNfaHdtb2RfY2xhc3MsCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgZG04MXh4X2w0X2hzX19lbWFjMCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcGRhdGEtcXVpcmtzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5jCmluZGV4IDFkZmUzNDYuLjU4MTQ0NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcGRhdGEtcXVpcmtzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3MuYwpAQCAtMjQsOSArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaW9tbXUtb21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvd2t1cF9tMy5oPgogCi0jaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KLSNpbmNsdWRlIDxhc20vc2lnbmFsLmg+Ci0KICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJjb21tb24tYm9hcmQtZGV2aWNlcy5oIgogI2luY2x1ZGUgImRzcy1jb21tb24uaCIKQEAgLTM4NSwyOSArMzgyLDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMyAqLwogCi0jaWZkZWYgQ09ORklHX1NPQ19USTgxWFgKLXN0YXRpYyBpbnQgZmF1bHRfZml4ZWRfdXA7Ci0KLXN0YXRpYyBpbnQgdDQxMF9hYm9ydF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKLQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWlmICgoZnNyID09IDB4NDA2IHx8IGZzciA9PSAweGMwNikgJiYgIWZhdWx0X2ZpeGVkX3VwKSB7Ci0JCXByX3dhcm4oIkV4dGVybmFsIGltcHJlY2lzZSBEYXRhIGFib3J0IGF0IGFkZHI9JSNseCwgZnNyPSUjeCBpZ25vcmVkLlxuIiwKLQkJCWFkZHIsIGZzcik7Ci0JCWZhdWx0X2ZpeGVkX3VwID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB0NDEwX2Fib3J0X2luaXQodm9pZCkKLXsKLQlob29rX2ZhdWx0X2NvZGUoMTYgKyA2LCB0NDEwX2Fib3J0X2hhbmRsZXIsIFNJR0JVUywgQlVTX09CSkVSUiwKLQkJCSJpbXByZWNpc2UgZXh0ZXJuYWwgYWJvcnQiKTsKLX0KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkgfHwgZGVmaW5lZChDT05GSUdfU09DX09NQVA1KQogc3RhdGljIHN0cnVjdCBpb21tdV9wbGF0Zm9ybV9kYXRhIG9tYXA0X2lvbW11X3BkYXRhID0gewogCS5yZXNldF9uYW1lID0gIm1tdV9jYWNoZSIsCkBAIC01MzYsOSArNTEwLDYgQEAKIAl7ICJvcGVucGFuZG9yYSxvbWFwMy1wYW5kb3JhLTYwMG1oeiIsIG9tYXAzX3BhbmRvcmFfbGVnYWN5X2luaXQsIH0sCiAJeyAib3BlbnBhbmRvcmEsb21hcDMtcGFuZG9yYS0xZ2h6Iiwgb21hcDNfcGFuZG9yYV9sZWdhY3lfaW5pdCwgfSwKICNlbmRpZgotI2lmZGVmIENPTkZJR19TT0NfVEk4MVhYCi0JeyAiaHAsdDQxMCIsIHQ0MTBfYWJvcnRfaW5pdCwgfSwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19TT0NfT01BUDUKIAl7ICJ0aSxvbWFwNS11ZXZtIiwgb21hcDVfdWV2bV9sZWdhY3lfaW5pdCwgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggODdiOThiZjkuLjJkYmQzNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtMzAxLDExICszMDEsMTEgQEAKIAlpZiAob21hcF9pcnFfcGVuZGluZygpKQogCQlyZXR1cm47CiAKLQl0cmFjZV9jcHVfaWRsZSgxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXRyYWNlX2NwdV9pZGxlX3JjdWlkbGUoMSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCW9tYXBfc3JhbV9pZGxlKCk7CiAKLQl0cmFjZV9jcHVfaWRsZShQV1JfRVZFTlRfRVhJVCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl0cmFjZV9jcHVfaWRsZV9yY3VpZGxlKFBXUl9FVkVOVF9FWElULCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXIuYwppbmRleCBiMThlYmJlLi5mODY2OTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci5jCkBAIC0zMjAsNiArMzIwLDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKKyNpZiAhZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVCkKK3ZvaWQgdGlja19icm9hZGNhc3QoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCit7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX2Nsb2NrZXZlbnRfaW5pdChpbnQgZ3B0aW1lcl9pZCwKIAkJCQkJCWNvbnN0IGNoYXIgKmZja19zb3VyY2UsCiAJCQkJCQljb25zdCBjaGFyICpwcm9wZXJ0eSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCA3OWViNTAyLi43MzkxOWEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0yMSw1ICsyMSw1IEBACiAJQCBmaW5kIGNhdXNlIGJpdHMgdGhhdCBhcmUgdW5tYXNrZWQKIAlhbmRzCVxpcnFzdGF0LCBcaXJxc3RhdCwgXHRtcAlAIGNsZWFyIFogZmxhZyBpZiBhbnkKIAljbHpuZQlcaXJxbnIsCVxpcnFzdGF0CQlAIGNhbGMgaXJxbnIKLQlyc2JuZQlcaXJxbnIsIFxpcnFuciwgIzMxCisJcnNibmUJXGlycW5yLCBcaXJxbnIsICMzMgogCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lenguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2V6eC5jCmluZGV4IDlhOWMxNWIuLjdjMGQ1NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2V6eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2V6eC5jCkBAIC04ODksNiArODg5LDcgQEAKIAogCXB4YV9zZXRfa2V5cGFkX2luZm8oJmU2ODBfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOwogCisJcHdtX2FkZF90YWJsZShlenhfcHdtX2xvb2t1cCwgQVJSQVlfU0laRShlenhfcHdtX2xvb2t1cCkpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKEFSUkFZX0FORF9TSVpFKGV6eF9kZXZpY2VzKSk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoQVJSQVlfQU5EX1NJWkUoZTY4MF9kZXZpY2VzKSk7CiB9CkBAIC05NTYsNiArOTU3LDcgQEAKIAogCXB4YV9zZXRfa2V5cGFkX2luZm8oJmExMjAwX2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKIAorCXB3bV9hZGRfdGFibGUoZXp4X3B3bV9sb29rdXAsIEFSUkFZX1NJWkUoZXp4X3B3bV9sb29rdXApKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShlenhfZGV2aWNlcykpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKEFSUkFZX0FORF9TSVpFKGExMjAwX2RldmljZXMpKTsKIH0KQEAgLTExNDgsNiArMTE1MCw3IEBACiAJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYTkxMF9jYW1lcmEpOwogCX0KIAorCXB3bV9hZGRfdGFibGUoZXp4X3B3bV9sb29rdXAsIEFSUkFZX1NJWkUoZXp4X3B3bV9sb29rdXApKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShlenhfZGV2aWNlcykpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKEFSUkFZX0FORF9TSVpFKGE5MTBfZGV2aWNlcykpOwogfQpAQCAtMTIxNSw2ICsxMjE4LDcgQEAKIAogCXB4YV9zZXRfa2V5cGFkX2luZm8oJmU2X2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKIAorCXB3bV9hZGRfdGFibGUoZXp4X3B3bV9sb29rdXAsIEFSUkFZX1NJWkUoZXp4X3B3bV9sb29rdXApKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShlenhfZGV2aWNlcykpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKEFSUkFZX0FORF9TSVpFKGU2X2RldmljZXMpKTsKIH0KQEAgLTEyNTYsNiArMTI2MCw3IEBACiAKIAlweGFfc2V0X2tleXBhZF9pbmZvKCZlMl9rZXlwYWRfcGxhdGZvcm1fZGF0YSk7CiAKKwlwd21fYWRkX3RhYmxlKGV6eF9wd21fbG9va3VwLCBBUlJBWV9TSVpFKGV6eF9wd21fbG9va3VwKSk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoQVJSQVlfQU5EX1NJWkUoZXp4X2RldmljZXMpKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShlMl9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMKaW5kZXggMTNlYmEyYi4uOGZiZmIxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG0yN3guYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiB7CiAJcGFsbV9ibF9wb3dlcgk9IGJsOwogCXBhbG1fbGNkX3Bvd2VyCT0gbGNkOwotCXB3bV9hZGRfbG9va3VwKHBhbG0yN3hfcHdtX2xvb2t1cCwgQVJSQVlfU0laRShwYWxtMjd4X3B3bV9sb29rdXApKTsKKwlwd21fYWRkX3RhYmxlKHBhbG0yN3hfcHdtX2xvb2t1cCwgQVJSQVlfU0laRShwYWxtMjd4X3B3bV9sb29rdXApKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBhbG0yN3hfYmFja2xpZ2h0KTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYwppbmRleCBhZWJmNmRlLi4wYjVjMzg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX1BXTSkgfHwgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX1BXTV9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHB3bV9sb29rdXAgcGFsbXRjX3B3bV9sb29rdXBbXSA9IHsKIAlQV01fTE9PS1VQKCJweGEyNXgtcHdtLjEiLCAwLCAicHdtLWJhY2tsaWdodC4wIiwgTlVMTCwgUEFMTVRDX1BFUklPRF9OUywKLQkJICAgUFdNX1BFUklPRF9OT1JNQUwpLAorCQkgICBQV01fUE9MQVJJVFlfTk9STUFMKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHBhbG10Y19iYWNrbGlnaHRfZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjR4eC9wbGwtczNjMjQ0MC0xMjAwMDAwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3BsbC1zM2MyNDQwLTEyMDAwMDAwLmMKaW5kZXggYTE5NDYwZS4uYjM1NWZjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3BsbC1zM2MyNDQwLTEyMDAwMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3BsbC1zM2MyNDQwLTEyMDAwMDAwLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEtY29yZS5oPgogCi1zdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHMzYzI0NDBfcGxsc18xMltdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHMzYzI0NDBfcGxsc18xMltdID0gewogCXsgLmZyZXF1ZW5jeSA9IDc1MDAwMDAwLAkuZHJpdmVyX2RhdGEgPSBQTExWQUwoMHg3NSwgMywgMyksICB9LCAJLyogRlZjbyA2MDAuMDAwMDAwICovCiAJeyAuZnJlcXVlbmN5ID0gODAwMDAwMDAsCS5kcml2ZXJfZGF0YSA9IFBMTFZBTCgweDk4LCA0LCAzKSwgIH0sIAkvKiBGVmNvIDY0MC4wMDAwMDAgKi8KIAl7IC5mcmVxdWVuY3kgPSA5MDAwMDAwMCwJLmRyaXZlcl9kYXRhID0gUExMVkFMKDB4NzAsIDIsIDMpLCAgfSwgCS8qIEZWY28gNzIwLjAwMDAwMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L3BsbC1zM2MyNDQwLTE2OTM0NDAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvcGxsLXMzYzI0NDAtMTY5MzQ0MDAuYwppbmRleCAxMTkxYjI5Li5iZTlhMjQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0eHgvcGxsLXMzYzI0NDAtMTY5MzQ0MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0eHgvcGxsLXMzYzI0NDAtMTY5MzQ0MDAuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgczNjMjQ0MF9wbGxzXzE2OTM0NFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHMzYzI0NDBfcGxsc18xNjkzNDRbXSA9IHsKIAl7IC5mcmVxdWVuY3kgPSA3ODAxOTIwMCwJLmRyaXZlcl9kYXRhID0gUExMVkFMKDEyMSwgNSwgMyksIAl9LCAJLyogRlZjbyA2MjQuMTUzNjAwICovCiAJeyAuZnJlcXVlbmN5ID0gODQwNjcyMDAsCS5kcml2ZXJfZGF0YSA9IFBMTFZBTCgxMzEsIDUsIDMpLCAJfSwgCS8qIEZWY28gNjcyLjUzNzYwMCAqLwogCXsgLmZyZXF1ZW5jeSA9IDkwMTE1MjAwLAkuZHJpdmVyX2RhdGEgPSBQTExWQUwoMTQxLCA1LCAzKSwgCX0sIAkvKiBGVmNvIDcyMC45MjE2MDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtYXVkaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtYXVkaW8uYwppbmRleCBmZjc4MGE4Li5iNTc3ODMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZGV2LWF1ZGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi1hdWRpby5jCkBAIC01NCwxMiArNTQsMTMgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X2lpczBfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSBERUZJTkVfUkVTX01FTShTM0M2NFhYX1BBX0lJUzAsIFNaXzI1NiksCi0JWzFdID0gREVGSU5FX1JFU19ETUEoRE1BQ0hfSTJTMF9PVVQpLAotCVsyXSA9IERFRklORV9SRVNfRE1BKERNQUNIX0kyUzBfSU4pLAogfTsKIAotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgaTJzdjNfcGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBpMnMwX3BkYXRhID0gewogCS5jZmdfZ3BpbyA9IHMzYzY0eHhfaTJzX2NmZ19ncGlvLAorCS5kbWFfZmlsdGVyID0gcGwwOHhfZmlsdGVyX2lkLAorCS5kbWFfcGxheWJhY2sgPSBETUFDSF9JMlMwX09VVCwKKwkuZG1hX2NhcHR1cmUgPSBETUFDSF9JMlMwX0lOLAogfTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9paXMwID0gewpAQCAtNjgsMTUgKzY5LDIwIEBACiAJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9paXMwX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJICA9IHMzYzY0eHhfaWlzMF9yZXNvdXJjZSwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZpMnN2M19wZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaTJzMF9wZGF0YSwKIAl9LAogfTsKIEVYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2VfaWlzMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF9paXMxX3Jlc291cmNlW10gPSB7CiAJWzBdID0gREVGSU5FX1JFU19NRU0oUzNDNjRYWF9QQV9JSVMxLCBTWl8yNTYpLAotCVsxXSA9IERFRklORV9SRVNfRE1BKERNQUNIX0kyUzFfT1VUKSwKLQlbMl0gPSBERUZJTkVfUkVTX0RNQShETUFDSF9JMlMxX0lOKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIGkyczFfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczNjNjR4eF9pMnNfY2ZnX2dwaW8sCisJLmRtYV9maWx0ZXIgPSBwbDA4eF9maWx0ZXJfaWQsCisJLmRtYV9wbGF5YmFjayA9IERNQUNIX0kyUzFfT1VULAorCS5kbWFfY2FwdHVyZSA9IERNQUNIX0kyUzFfSU4sCiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX2lpczEgPSB7CkBAIC04NSwxOSArOTEsMjAgQEAKIAkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2M2NHh4X2lpczFfcmVzb3VyY2UpLAogCS5yZXNvdXJjZQkgID0gczNjNjR4eF9paXMxX3Jlc291cmNlLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmkyc3YzX3BkYXRhLAorCQkucGxhdGZvcm1fZGF0YSA9ICZpMnMxX3BkYXRhLAogCX0sCiB9OwogRVhQT1JUX1NZTUJPTChzM2M2NHh4X2RldmljZV9paXMxKTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X2lpc3Y0X3Jlc291cmNlW10gPSB7CiAJWzBdID0gREVGSU5FX1JFU19NRU0oUzNDNjRYWF9QQV9JSVNWNCwgU1pfMjU2KSwKLQlbMV0gPSBERUZJTkVfUkVTX0RNQShETUFDSF9IU0lfSTJTVjQwX1RYKSwKLQlbMl0gPSBERUZJTkVfUkVTX0RNQShETUFDSF9IU0lfSTJTVjQwX1JYKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIGkyc3Y0X3BkYXRhID0gewogCS5jZmdfZ3BpbyA9IHMzYzY0eHhfaTJzX2NmZ19ncGlvLAorCS5kbWFfZmlsdGVyID0gcGwwOHhfZmlsdGVyX2lkLAorCS5kbWFfcGxheWJhY2sgPSBETUFDSF9IU0lfSTJTVjQwX1RYLAorCS5kbWFfY2FwdHVyZSA9IERNQUNIX0hTSV9JMlNWNDBfUlgsCiAJLnR5cGUgPSB7CiAJCS5pMnMgPSB7CiAJCQkucXVpcmtzID0gUVVJUktfUFJJXzZDSEFOLApAQCAtMTQyLDEyICsxNDksMTMgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X3BjbTBfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSBERUZJTkVfUkVTX01FTShTM0M2NFhYX1BBX1BDTTAsIFNaXzI1NiksCi0JWzFdID0gREVGSU5FX1JFU19ETUEoRE1BQ0hfUENNMF9UWCksCi0JWzJdID0gREVGSU5FX1JFU19ETUEoRE1BQ0hfUENNMF9SWCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBzM2NfcGNtMF9wZGF0YSA9IHsKIAkuY2ZnX2dwaW8gPSBzM2M2NHh4X3BjbV9jZmdfZ3BpbywKKwkuZG1hX2ZpbHRlciA9IHBsMDh4X2ZpbHRlcl9pZCwKKwkuZG1hX2NhcHR1cmUgPSBETUFDSF9QQ00wX1JYLAorCS5kbWFfcGxheWJhY2sgPSBETUFDSF9QQ00wX1RYLAogfTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9wY20wID0gewpAQCAtMTYzLDEyICsxNzEsMTMgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X3BjbTFfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSBERUZJTkVfUkVTX01FTShTM0M2NFhYX1BBX1BDTTEsIFNaXzI1NiksCi0JWzFdID0gREVGSU5FX1JFU19ETUEoRE1BQ0hfUENNMV9UWCksCi0JWzJdID0gREVGSU5FX1JFU19ETUEoRE1BQ0hfUENNMV9SWCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBzM2NfcGNtMV9wZGF0YSA9IHsKIAkuY2ZnX2dwaW8gPSBzM2M2NHh4X3BjbV9jZmdfZ3BpbywKKwkuZG1hX2ZpbHRlciA9IHBsMDh4X2ZpbHRlcl9pZCwKKwkuZG1hX3BsYXliYWNrID0gRE1BQ0hfUENNMV9UWCwKKwkuZG1hX2NhcHR1cmUgPSBETUFDSF9QQ00xX1JYLAogfTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9wY20xID0gewpAQCAtMTk2LDEzICsyMDUsMTUgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X2FjOTdfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSBERUZJTkVfUkVTX01FTShTM0M2NFhYX1BBX0FDOTcsIFNaXzI1NiksCi0JWzFdID0gREVGSU5FX1JFU19ETUEoRE1BQ0hfQUM5N19QQ01PVVQpLAotCVsyXSA9IERFRklORV9SRVNfRE1BKERNQUNIX0FDOTdfUENNSU4pLAotCVszXSA9IERFRklORV9SRVNfRE1BKERNQUNIX0FDOTdfTUlDSU4pLAotCVs0XSA9IERFRklORV9SRVNfSVJRKElSUV9BQzk3KSwKKwlbMV0gPSBERUZJTkVfUkVTX0lSUShJUlFfQUM5NyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBzM2NfYWM5N19wZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHMzY19hYzk3X3BkYXRhID0geworCS5kbWFfcGxheWJhY2sgPSBETUFDSF9BQzk3X1BDTU9VVCwKKwkuZG1hX2ZpbHRlciA9IHBsMDh4X2ZpbHRlcl9pZCwKKwkuZG1hX2NhcHR1cmUgPSBETUFDSF9BQzk3X1BDTUlOLAorCS5kbWFfY2FwdHVyZV9taWMgPSBETUFDSF9BQzk3X01JQ0lOLAorfTsKIAogc3RhdGljIHU2NCBzM2M2NHh4X2FjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2RtYS5oCmluZGV4IDA5NmUxNDAuLjljNzM5ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMTQsMzggKzE0LDM4IEBACiAjZGVmaW5lIFMzQzY0WFhfRE1BX0NIQU4obmFtZSkJCSgodW5zaWduZWQgbG9uZykobmFtZSkpCiAKIC8qIERNQTAvU0RNQTAgKi8KLSNkZWZpbmUgRE1BQ0hfVUFSVDAJCVMzQzY0WFhfRE1BX0NIQU4oInVhcnQwX3R4IikKLSNkZWZpbmUgRE1BQ0hfVUFSVDBfU1JDMglTM0M2NFhYX0RNQV9DSEFOKCJ1YXJ0MF9yeCIpCi0jZGVmaW5lIERNQUNIX1VBUlQxCQlTM0M2NFhYX0RNQV9DSEFOKCJ1YXJ0MV90eCIpCi0jZGVmaW5lIERNQUNIX1VBUlQxX1NSQzIJUzNDNjRYWF9ETUFfQ0hBTigidWFydDFfcngiKQotI2RlZmluZSBETUFDSF9VQVJUMgkJUzNDNjRYWF9ETUFfQ0hBTigidWFydDJfdHgiKQotI2RlZmluZSBETUFDSF9VQVJUMl9TUkMyCVMzQzY0WFhfRE1BX0NIQU4oInVhcnQyX3J4IikKLSNkZWZpbmUgRE1BQ0hfVUFSVDMJCVMzQzY0WFhfRE1BX0NIQU4oInVhcnQzX3R4IikKLSNkZWZpbmUgRE1BQ0hfVUFSVDNfU1JDMglTM0M2NFhYX0RNQV9DSEFOKCJ1YXJ0M19yeCIpCi0jZGVmaW5lIERNQUNIX1BDTTBfVFgJCVMzQzY0WFhfRE1BX0NIQU4oInBjbTBfdHgiKQotI2RlZmluZSBETUFDSF9QQ00wX1JYCQlTM0M2NFhYX0RNQV9DSEFOKCJwY20wX3J4IikKLSNkZWZpbmUgRE1BQ0hfSTJTMF9PVVQJCVMzQzY0WFhfRE1BX0NIQU4oImkyczBfdHgiKQotI2RlZmluZSBETUFDSF9JMlMwX0lOCQlTM0M2NFhYX0RNQV9DSEFOKCJpMnMwX3J4IikKKyNkZWZpbmUgRE1BQ0hfVUFSVDAJCSJ1YXJ0MF90eCIKKyNkZWZpbmUgRE1BQ0hfVUFSVDBfU1JDMgkidWFydDBfcngiCisjZGVmaW5lIERNQUNIX1VBUlQxCQkidWFydDFfdHgiCisjZGVmaW5lIERNQUNIX1VBUlQxX1NSQzIJInVhcnQxX3J4IgorI2RlZmluZSBETUFDSF9VQVJUMgkJInVhcnQyX3R4IgorI2RlZmluZSBETUFDSF9VQVJUMl9TUkMyCSJ1YXJ0Ml9yeCIKKyNkZWZpbmUgRE1BQ0hfVUFSVDMJCSJ1YXJ0M190eCIKKyNkZWZpbmUgRE1BQ0hfVUFSVDNfU1JDMgkidWFydDNfcngiCisjZGVmaW5lIERNQUNIX1BDTTBfVFgJCSJwY20wX3R4IgorI2RlZmluZSBETUFDSF9QQ00wX1JYCQkicGNtMF9yeCIKKyNkZWZpbmUgRE1BQ0hfSTJTMF9PVVQJCSJpMnMwX3R4IgorI2RlZmluZSBETUFDSF9JMlMwX0lOCQkiaTJzMF9yeCIKICNkZWZpbmUgRE1BQ0hfU1BJMF9UWAkJUzNDNjRYWF9ETUFfQ0hBTigic3BpMF90eCIpCiAjZGVmaW5lIERNQUNIX1NQSTBfUlgJCVMzQzY0WFhfRE1BX0NIQU4oInNwaTBfcngiKQotI2RlZmluZSBETUFDSF9IU0lfSTJTVjQwX1RYCVMzQzY0WFhfRE1BX0NIQU4oImkyczJfdHgiKQotI2RlZmluZSBETUFDSF9IU0lfSTJTVjQwX1JYCVMzQzY0WFhfRE1BX0NIQU4oImkyczJfcngiKQorI2RlZmluZSBETUFDSF9IU0lfSTJTVjQwX1RYCSJpMnMyX3R4IgorI2RlZmluZSBETUFDSF9IU0lfSTJTVjQwX1JYCSJpMnMyX3J4IgogCiAvKiBETUExL1NETUExICovCi0jZGVmaW5lIERNQUNIX1BDTTFfVFgJCVMzQzY0WFhfRE1BX0NIQU4oInBjbTFfdHgiKQotI2RlZmluZSBETUFDSF9QQ00xX1JYCQlTM0M2NFhYX0RNQV9DSEFOKCJwY20xX3J4IikKLSNkZWZpbmUgRE1BQ0hfSTJTMV9PVVQJCVMzQzY0WFhfRE1BX0NIQU4oImkyczFfdHgiKQotI2RlZmluZSBETUFDSF9JMlMxX0lOCQlTM0M2NFhYX0RNQV9DSEFOKCJpMnMxX3J4IikKKyNkZWZpbmUgRE1BQ0hfUENNMV9UWAkJInBjbTFfdHgiCisjZGVmaW5lIERNQUNIX1BDTTFfUlgJCSJwY20xX3J4IgorI2RlZmluZSBETUFDSF9JMlMxX09VVAkJImkyczFfdHgiCisjZGVmaW5lIERNQUNIX0kyUzFfSU4JCSJpMnMxX3J4IgogI2RlZmluZSBETUFDSF9TUEkxX1RYCQlTM0M2NFhYX0RNQV9DSEFOKCJzcGkxX3R4IikKICNkZWZpbmUgRE1BQ0hfU1BJMV9SWAkJUzNDNjRYWF9ETUFfQ0hBTigic3BpMV9yeCIpCi0jZGVmaW5lIERNQUNIX0FDOTdfUENNT1VUCVMzQzY0WFhfRE1BX0NIQU4oImFjOTdfb3V0IikKLSNkZWZpbmUgRE1BQ0hfQUM5N19QQ01JTglTM0M2NFhYX0RNQV9DSEFOKCJhYzk3X2luIikKLSNkZWZpbmUgRE1BQ0hfQUM5N19NSUNJTglTM0M2NFhYX0RNQV9DSEFOKCJhYzk3X21pYyIpCi0jZGVmaW5lIERNQUNIX1BXTQkJUzNDNjRYWF9ETUFfQ0hBTigicHdtIikKLSNkZWZpbmUgRE1BQ0hfSVJEQQkJUzNDNjRYWF9ETUFfQ0hBTigiaXJkYSIpCi0jZGVmaW5lIERNQUNIX0VYVEVSTkFMCQlTM0M2NFhYX0RNQV9DSEFOKCJleHRlcm5hbCIpCi0jZGVmaW5lIERNQUNIX1NFQ1VSSVRZX1JYCVMzQzY0WFhfRE1BX0NIQU4oInNlY19yeCIpCi0jZGVmaW5lIERNQUNIX1NFQ1VSSVRZX1RYCVMzQzY0WFhfRE1BX0NIQU4oInNlY190eCIpCisjZGVmaW5lIERNQUNIX0FDOTdfUENNT1VUCSJhYzk3X291dCIKKyNkZWZpbmUgRE1BQ0hfQUM5N19QQ01JTgkiYWM5N19pbiIKKyNkZWZpbmUgRE1BQ0hfQUM5N19NSUNJTgkiYWM5N19taWMiCisjZGVmaW5lIERNQUNIX1BXTQkJInB3bSIKKyNkZWZpbmUgRE1BQ0hfSVJEQQkJImlyZGEiCisjZGVmaW5lIERNQUNIX0VYVEVSTkFMCQkiZXh0ZXJuYWwiCisjZGVmaW5lIERNQUNIX1NFQ1VSSVRZX1JYCSJzZWNfcngiCisjZGVmaW5lIERNQUNIX1NFQ1VSSVRZX1RYCSJzZWNfdHgiCiAKIGVudW0gZG1hX2NoIHsKIAlETUFDSF9NQVggPSAzMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yOGE3NzkzLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3OTMuYwppbmRleCAxZDI4MjVjLi41ZmNlODdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3OTMuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXI4YTc3OTMuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgInJjYXItZ2VuMi5oIgogCi1zdGF0aWMgY29uc3QgY2hhciAqcjhhNzc5M19ib2FyZHNfY29tcGF0X2R0W10gX19pbml0Y29uc3QgPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHI4YTc3OTNfYm9hcmRzX2NvbXBhdF9kdFtdIF9faW5pdGNvbnN0ID0gewogCSJyZW5lc2FzLHI4YTc3OTMiLAogCU5VTEwsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC16eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC16eC9LY29uZmlnCmluZGV4IDdmZGM1YmYuLjQ0NjMzNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtengvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXp4L0tjb25maWcKQEAgLTEzLDcgKzEzLDcgQEAKIAlzZWxlY3QgQVJNX0dMT0JBTF9USU1FUgogCXNlbGVjdCBIQVZFX0FSTV9TQ1UgaWYgU01QCiAJc2VsZWN0IEhBVkVfQVJNX1RXRCBpZiBTTVAKLQlzZWxlY3QgUE1fR0VORVJJQ19ET01BSU5TCisJc2VsZWN0IFBNX0dFTkVSSUNfRE9NQUlOUyBpZiBQTQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFpURSBaWDI5NjcwMiBTb0Mgd2hpY2ggaXMgYSBkdWFsIGNvcmUgQ29ydGV4QTlNUAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnRleHQuYyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwppbmRleCA4NDU3NjllLi5jOGM4YjllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb250ZXh0LmMKKysrIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCkBAIC0xNjUsMTMgKzE2NSwyOCBAQAogCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIH0KIAotc3RhdGljIGludCBpc19yZXNlcnZlZF9hc2lkKHU2NCBhc2lkKQorc3RhdGljIGJvb2wgY2hlY2tfdXBkYXRlX3Jlc2VydmVkX2FzaWQodTY0IGFzaWQsIHU2NCBuZXdhc2lkKQogewogCWludCBjcHU7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJaWYgKHBlcl9jcHUocmVzZXJ2ZWRfYXNpZHMsIGNwdSkgPT0gYXNpZCkKLQkJCXJldHVybiAxOwotCXJldHVybiAwOworCWJvb2wgaGl0ID0gZmFsc2U7CisKKwkvKgorCSAqIEl0ZXJhdGUgb3ZlciB0aGUgc2V0IG9mIHJlc2VydmVkIEFTSURzIGxvb2tpbmcgZm9yIGEgbWF0Y2guCisJICogSWYgd2UgZmluZCBvbmUsIHRoZW4gd2UgY2FuIHVwZGF0ZSBvdXIgbW0gdG8gdXNlIG5ld2FzaWQKKwkgKiAoaS5lLiB0aGUgc2FtZSBBU0lEIGluIHRoZSBjdXJyZW50IGdlbmVyYXRpb24pIGJ1dCB3ZSBjYW4ndAorCSAqIGV4aXQgdGhlIGxvb3AgZWFybHksIHNpbmNlIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsIGNvcGllcworCSAqIG9mIHRoZSBvbGQgQVNJRCBhcmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBtbS4gRmFpbHVyZSB0byBkbworCSAqIHNvIGNvdWxkIHJlc3VsdCBpbiB1cyBtaXNzaW5nIHRoZSByZXNlcnZlZCBBU0lEIGluIGEgZnV0dXJlCisJICogZ2VuZXJhdGlvbi4KKwkgKi8KKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWlmIChwZXJfY3B1KHJlc2VydmVkX2FzaWRzLCBjcHUpID09IGFzaWQpIHsKKwkJCWhpdCA9IHRydWU7CisJCQlwZXJfY3B1KHJlc2VydmVkX2FzaWRzLCBjcHUpID0gbmV3YXNpZDsKKwkJfQorCX0KKworCXJldHVybiBoaXQ7CiB9CiAKIHN0YXRpYyB1NjQgbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBjcHUpCkBAIC0xODEsMTIgKzE5NiwxNCBAQAogCXU2NCBnZW5lcmF0aW9uID0gYXRvbWljNjRfcmVhZCgmYXNpZF9nZW5lcmF0aW9uKTsKIAogCWlmIChhc2lkICE9IDApIHsKKwkJdTY0IG5ld2FzaWQgPSBnZW5lcmF0aW9uIHwgKGFzaWQgJiB+QVNJRF9NQVNLKTsKKwogCQkvKgogCQkgKiBJZiBvdXIgY3VycmVudCBBU0lEIHdhcyBhY3RpdmUgZHVyaW5nIGEgcm9sbG92ZXIsIHdlCiAJCSAqIGNhbiBjb250aW51ZSB0byB1c2UgaXQgYW5kIHRoaXMgd2FzIGp1c3QgYSBmYWxzZSBhbGFybS4KIAkJICovCi0JCWlmIChpc19yZXNlcnZlZF9hc2lkKGFzaWQpKQotCQkJcmV0dXJuIGdlbmVyYXRpb24gfCAoYXNpZCAmIH5BU0lEX01BU0spOworCQlpZiAoY2hlY2tfdXBkYXRlX3Jlc2VydmVkX2FzaWQoYXNpZCwgbmV3YXNpZCkpCisJCQlyZXR1cm4gbmV3YXNpZDsKIAogCQkvKgogCQkgKiBXZSBoYWQgYSB2YWxpZCBBU0lEIGluIGEgcHJldmlvdXMgbGlmZSwgc28gdHJ5IHRvIHJlLXVzZQpAQCAtMTk0LDcgKzIxMSw3IEBACiAJCSAqLwogCQlhc2lkICY9IH5BU0lEX01BU0s7CiAJCWlmICghX190ZXN0X2FuZF9zZXRfYml0KGFzaWQsIGFzaWRfbWFwKSkKLQkJCWdvdG8gYnVtcF9nZW47CisJCQlyZXR1cm4gbmV3YXNpZDsKIAl9CiAKIAkvKgpAQCAtMjE2LDExICsyMzMsOCBAQAogCiAJX19zZXRfYml0KGFzaWQsIGFzaWRfbWFwKTsKIAljdXJfaWR4ID0gYXNpZDsKLQotYnVtcF9nZW46Ci0JYXNpZCB8PSBnZW5lcmF0aW9uOwogCWNwdW1hc2tfY2xlYXIobW1fY3B1bWFzayhtbSkpOwotCXJldHVybiBhc2lkOworCXJldHVybiBhc2lkIHwgZ2VuZXJhdGlvbjsKIH0KIAogdm9pZCBjaGVja19hbmRfc3dpdGNoX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggZTYyNDAwZS4uNTM0YTYwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC0xNTIxLDcgKzE1MjEsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoY291bnQgPSAwLCBzID0gc2c7IGNvdW50IDwgKHNpemUgPj4gUEFHRV9TSElGVCk7IHMgPSBzZ19uZXh0KHMpKSB7Ci0JCXBoeXNfYWRkcl90IHBoeXMgPSBzZ19waHlzKHMpICYgUEFHRV9NQVNLOworCQlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHNnX3BhZ2UocykpOwogCQl1bnNpZ25lZCBpbnQgbGVuID0gUEFHRV9BTElHTihzLT5vZmZzZXQgKyBzLT5sZW5ndGgpOwogCiAJCWlmICghaXNfY29oZXJlbnQgJiYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCA4YTYzYjRjLi43ZjhjZDFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtY29udGlndW91cy5oPgogI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAKICNpbmNsdWRlIDxhc20vY3AxNS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC02MjcsMTIgKzYyOCwxMCBAQAogICogc2FmZSB0byBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLCBhcyB1bmRlciBzdG9wX21hY2hpbmUoKS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNlY3Rpb25fdXBkYXRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kdmFsX3QgbWFzaywKLQkJCQkgIHBtZHZhbF90IHByb3QpCisJCQkJICBwbWR2YWxfdCBwcm90LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlwbWRfdCAqcG1kOwogCi0JbW0gPSBjdXJyZW50LT5hY3RpdmVfbW07CiAJcG1kID0gcG1kX29mZnNldChwdWRfb2Zmc2V0KHBnZF9vZmZzZXQobW0sIGFkZHIpLCBhZGRyKSwgYWRkcik7CiAKICNpZmRlZiBDT05GSUdfQVJNX0xQQUUKQEAgLTY1Niw0OSArNjU1LDgyIEBACiAJcmV0dXJuICEhKGdldF9jcigpICYgQ1JfWFApOwogfQogCi0jZGVmaW5lIHNldF9zZWN0aW9uX3Blcm1zKHBlcm1zLCBmaWVsZCkJewkJCQlcCi0Jc2l6ZV90IGk7CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGFkZHI7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmICghYXJjaF9oYXNfc3RyaWN0X3Blcm1zKCkpCQkJCQlcCi0JCXJldHVybjsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlcm1zKTsgaSsrKSB7CQkJXAotCQlpZiAoIUlTX0FMSUdORUQocGVybXNbaV0uc3RhcnQsIFNFQ1RJT05fU0laRSkgfHwJXAotCQkgICAgIUlTX0FMSUdORUQocGVybXNbaV0uZW5kLCBTRUNUSU9OX1NJWkUpKSB7CQlcCi0JCQlwcl9lcnIoIkJVRzogc2VjdGlvbiAlbHgtJWx4IG5vdCBhbGlnbmVkIHRvICVseFxuIiwgXAotCQkJCXBlcm1zW2ldLnN0YXJ0LCBwZXJtc1tpXS5lbmQsCQlcCi0JCQkJU0VDVElPTl9TSVpFKTsJCQkJXAotCQkJY29udGludWU7CQkJCQlcCi0JCX0JCQkJCQkJXAotCQkJCQkJCQkJXAotCQlmb3IgKGFkZHIgPSBwZXJtc1tpXS5zdGFydDsJCQkJXAotCQkgICAgIGFkZHIgPCBwZXJtc1tpXS5lbmQ7CQkJCVwKLQkJICAgICBhZGRyICs9IFNFQ1RJT05fU0laRSkJCQkJXAotCQkJc2VjdGlvbl91cGRhdGUoYWRkciwgcGVybXNbaV0ubWFzaywJCVwKLQkJCQkgICAgICAgcGVybXNbaV0uZmllbGQpOwkJCVwKLQl9CQkJCQkJCQlcCit2b2lkIHNldF9zZWN0aW9uX3Blcm1zKHN0cnVjdCBzZWN0aW9uX3Blcm0gKnBlcm1zLCBpbnQgbiwgYm9vbCBzZXQsCisJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzaXplX3QgaTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlpZiAoIWFyY2hfaGFzX3N0cmljdF9wZXJtcygpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmICghSVNfQUxJR05FRChwZXJtc1tpXS5zdGFydCwgU0VDVElPTl9TSVpFKSB8fAorCQkgICAgIUlTX0FMSUdORUQocGVybXNbaV0uZW5kLCBTRUNUSU9OX1NJWkUpKSB7CisJCQlwcl9lcnIoIkJVRzogc2VjdGlvbiAlbHgtJWx4IG5vdCBhbGlnbmVkIHRvICVseFxuIiwKKwkJCQlwZXJtc1tpXS5zdGFydCwgcGVybXNbaV0uZW5kLAorCQkJCVNFQ1RJT05fU0laRSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoYWRkciA9IHBlcm1zW2ldLnN0YXJ0OworCQkgICAgIGFkZHIgPCBwZXJtc1tpXS5lbmQ7CisJCSAgICAgYWRkciArPSBTRUNUSU9OX1NJWkUpCisJCQlzZWN0aW9uX3VwZGF0ZShhZGRyLCBwZXJtc1tpXS5tYXNrLAorCQkJCXNldCA/IHBlcm1zW2ldLnByb3QgOiBwZXJtc1tpXS5jbGVhciwgbW0pOworCX0KKwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZml4X2tlcm5tZW1fcGVybXModm9pZCkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9zZWN0aW9uc19lYXJseShzdHJ1Y3Qgc2VjdGlvbl9wZXJtIHBlcm1zW10sIGludCBuKQogewotCXNldF9zZWN0aW9uX3Blcm1zKG54X3Blcm1zLCBwcm90KTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsICpzOworCisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlmb3JfZWFjaF9wcm9jZXNzKHQpIHsKKwkJaWYgKHQtPmZsYWdzICYgUEZfS1RIUkVBRCkKKwkJCWNvbnRpbnVlOworCQlmb3JfZWFjaF90aHJlYWQodCwgcykKKwkJCXNldF9zZWN0aW9uX3Blcm1zKHBlcm1zLCBuLCB0cnVlLCBzLT5tbSk7CisJfQorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlzZXRfc2VjdGlvbl9wZXJtcyhwZXJtcywgbiwgdHJ1ZSwgY3VycmVudC0+YWN0aXZlX21tKTsKKwlzZXRfc2VjdGlvbl9wZXJtcyhwZXJtcywgbiwgdHJ1ZSwgJmluaXRfbW0pOworfQorCitpbnQgX19maXhfa2Vybm1lbV9wZXJtcyh2b2lkICp1bnVzZWQpCit7CisJdXBkYXRlX3NlY3Rpb25zX2Vhcmx5KG54X3Blcm1zLCBBUlJBWV9TSVpFKG54X3Blcm1zKSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZml4X2tlcm5tZW1fcGVybXModm9pZCkKK3sKKwlzdG9wX21hY2hpbmUoX19maXhfa2Vybm1lbV9wZXJtcywgTlVMTCwgTlVMTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfREVCVUdfUk9EQVRBCitpbnQgX19tYXJrX3JvZGF0YV9ybyh2b2lkICp1bnVzZWQpCit7CisJdXBkYXRlX3NlY3Rpb25zX2Vhcmx5KHJvX3Blcm1zLCBBUlJBWV9TSVpFKHJvX3Blcm1zKSk7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQgbWFya19yb2RhdGFfcm8odm9pZCkKIHsKLQlzZXRfc2VjdGlvbl9wZXJtcyhyb19wZXJtcywgcHJvdCk7CisJc3RvcF9tYWNoaW5lKF9fbWFya19yb2RhdGFfcm8sIE5VTEwsIE5VTEwpOwogfQogCiB2b2lkIHNldF9rZXJuZWxfdGV4dF9ydyh2b2lkKQogewotCXNldF9zZWN0aW9uX3Blcm1zKHJvX3Blcm1zLCBjbGVhcik7CisJc2V0X3NlY3Rpb25fcGVybXMocm9fcGVybXMsIEFSUkFZX1NJWkUocm9fcGVybXMpLCBmYWxzZSwKKwkJCQljdXJyZW50LT5hY3RpdmVfbW0pOwogfQogCiB2b2lkIHNldF9rZXJuZWxfdGV4dF9ybyh2b2lkKQogewotCXNldF9zZWN0aW9uX3Blcm1zKHJvX3Blcm1zLCBwcm90KTsKKwlzZXRfc2VjdGlvbl9wZXJtcyhyb19wZXJtcywgQVJSQVlfU0laRShyb19wZXJtcyksIHRydWUsCisJCQkJY3VycmVudC0+YWN0aXZlX21tKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfREVCVUdfUk9EQVRBICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwppbmRleCBkZTJiMjQ2Li44ZTFlYTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC05NSw3ICs5NSw3IEBACiAuZXF1CWNwdV92N19zdXNwZW5kX3NpemUsIDQgKiA5CiAjaWZkZWYgQ09ORklHX0FSTV9DUFVfU1VTUEVORAogRU5UUlkoY3B1X3Y3X2RvX3N1c3BlbmQpCi0Jc3RtZmQJc3AhLCB7cjQgLSByMTAsIGxyfQorCXN0bWZkCXNwISwge3I0IC0gcjExLCBscn0KIAltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECiAJbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDMJQCBVc2VyIHIvbyB0aHJlYWQgSUQKIAlzdG1pYQlyMCEsIHtyNCAtIHI1fQpAQCAtMTEyLDcgKzExMiw3IEBACiAJbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMQlAIEF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyCiAJbXJjCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDIJQCBDby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2wKIAlzdG1pYQlyMCwge3I1IC0gcjExfQotCWxkbWZkCXNwISwge3I0IC0gcjEwLCBwY30KKwlsZG1mZAlzcCEsIHtyNCAtIHIxMSwgcGN9CiBFTkRQUk9DKGNwdV92N19kb19zdXNwZW5kKQogCiBFTlRSWShjcHVfdjdfZG9fcmVzdW1lKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYyBiL2FyY2gvYXJtL25ldC9icGZfaml0XzMyLmMKaW5kZXggMmY0YjE0Yy4uNTkxZjlkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYworKysgYi9hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jCkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogCX0KIAlidWlsZF9lcGlsb2d1ZSgmY3R4KTsKIAotCWZsdXNoX2ljYWNoZV9yYW5nZSgodTMyKWN0eC50YXJnZXQsICh1MzIpKGN0eC50YXJnZXQgKyBjdHguaWR4KSk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1MzIpaGVhZGVyLCAodTMyKShjdHgudGFyZ2V0ICsgY3R4LmlkeCkpOwogCiAjaWYgX19MSU5VWF9BUk1fQVJDSF9fIDwgNwogCWlmIChjdHguaW1tX2NvdW50KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2RldnMuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXZzLmMKaW5kZXggODIwNzQ2Mi4uNzI2M2U5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2RldnMuYworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2cy5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS91c2Itb2hjaS1zM2MyNDEwLmg+CiAjaW5jbHVkZSA8cGxhdC91c2ItcGh5Lmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYXNvYy1zM2MuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1zM2M2NHh4Lmg+CiAKIHN0YXRpYyB1NjQgc2Ftc3VuZ19kZXZpY2VfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwpAQCAtNzQsOSArNzUsMTUgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX2FjOTdfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSBERUZJTkVfUkVTX01FTShTM0MyNDQwX1BBX0FDOTcsIFMzQzI0NDBfU1pfQUM5NyksCiAJWzFdID0gREVGSU5FX1JFU19JUlEoSVJRX1MzQzI0NFhfQUM5NyksCi0JWzJdID0gREVGSU5FX1JFU19ETUFfTkFNRUQoRE1BQ0hfUENNX09VVCwgIlBDTSBvdXQiKSwKLQlbM10gPSBERUZJTkVfUkVTX0RNQV9OQU1FRChETUFDSF9QQ01fSU4sICJQQ00gaW4iKSwKLQlbNF0gPSBERUZJTkVfUkVTX0RNQV9OQU1FRChETUFDSF9NSUNfSU4sICJNaWMgaW4iKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHMzY19hYzk3X3BkYXRhID0geworI2lmZGVmIENPTkZJR19TM0MyNFhYX0RNQUMKKwkuZG1hX2ZpbHRlciA9IHMzYzI0eHhfZG1hX2ZpbHRlciwKKyNlbmRpZgorCS5kbWFfcGxheWJhY2sgPSAodm9pZCAqKURNQUNIX1BDTV9PVVQsCisJLmRtYV9jYXB0dXJlID0gKHZvaWQgKilETUFDSF9QQ01fSU4sCisJLmRtYV9jYXB0dXJlX21pYyA9ICh2b2lkICopRE1BQ0hfTUlDX0lOLAogfTsKIAogc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2FjOTcgPSB7CkBAIC04Nyw2ICs5NCw3IEBACiAJLmRldgkJPSB7CiAJCS5kbWFfbWFzawkJPSAmc2Ftc3VuZ19kZXZpY2VfZG1hX21hc2ssCiAJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZzM2NfYWM5N19wZGF0YSwKIAl9CiB9OwogI2VuZGlmIC8qIENPTkZJR19DUFVfUzNDMjQ0MCAqLwpAQCAtNTY2LDYgKzU3NCwxNCBAQAogCVswXSA9IERFRklORV9SRVNfTUVNKFMzQzI0WFhfUEFfSUlTLCBTM0MyNFhYX1NaX0lJUyksCiB9OwogCitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBzM2NfaWlzX3BsYXRkYXRhID0geworI2lmZGVmIENPTkZJR19TM0MyNFhYX0RNQUMKKwkuZG1hX2ZpbHRlciA9IHMzYzI0eHhfZG1hX2ZpbHRlciwKKyNlbmRpZgorCS5kbWFfcGxheWJhY2sgPSAodm9pZCAqKURNQUNIX0kyU19PVVQsCisJLmRtYV9jYXB0dXJlID0gKHZvaWQgKilETUFDSF9JMlNfSU4sCit9OworCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaWlzID0gewogCS5uYW1lCQk9ICJzM2MyNHh4LWlpcyIsCiAJLmlkCQk9IC0xLApAQCAtNTc0LDYgKzU5MCw3IEBACiAJLmRldgkJPSB7CiAJCS5kbWFfbWFzawkJPSAmc2Ftc3VuZ19kZXZpY2VfZG1hX21hc2ssCiAJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZzM2NfaWlzX3BsYXRkYXRhLAogCX0KIH07CiAjZW5kaWYgLyogQ09ORklHX1BMQVRfUzNDMjRYWCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IDlhYzE2YTQuLjg3MWYyMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZworKysgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTAogCXNlbGVjdCBIQVZFX0FSQ0hfQklUUkVWRVJTRQogCXNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTAotCXNlbGVjdCBIQVZFX0FSQ0hfS0FTQU4gaWYgU1BBUlNFTUVNX1ZNRU1NQVAKKwlzZWxlY3QgSEFWRV9BUkNIX0tBU0FOIGlmIFNQQVJTRU1FTV9WTUVNTUFQICYmICEoQVJNNjRfMTZLX1BBR0VTICYmIEFSTTY0X1ZBX0JJVFNfNDgpCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCkBAIC0zMTYsNiArMzE2LDI3IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBBUk02NF9FUlJBVFVNXzgzNDIyMAorCWJvb2wgIkNvcnRleC1BNTc6IDgzNDIyMDogU3RhZ2UgMiB0cmFuc2xhdGlvbiBmYXVsdCBtaWdodCBiZSBpbmNvcnJlY3RseSByZXBvcnRlZCBpbiBwcmVzZW5jZSBvZiBhIFN0YWdlIDEgZmF1bHQiCisJZGVwZW5kcyBvbiBLVk0KKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2UgdG8gd29yayBhcm91bmQgQVJNCisJICBlcnJhdHVtIDgzNDIyMCBvbiBDb3J0ZXgtQTU3IHBhcnRzIHVwIHRvIHIxcDIuCisKKwkgIEFmZmVjdGVkIENvcnRleC1BNTcgcGFydHMgbWlnaHQgcmVwb3J0IGEgU3RhZ2UgMiB0cmFuc2xhdGlvbgorCSAgZmF1bHQgYXMgdGhlIHJlc3VsdCBvZiBhIFN0YWdlIDEgZmF1bHQgZm9yIGxvYWQgY3Jvc3NpbmcgYQorCSAgcGFnZSBib3VuZGFyeSB3aGVuIHRoZXJlIGlzIGEgcGVybWlzc2lvbiBvciBkZXZpY2UgbWVtb3J5CisJICBhbGlnbm1lbnQgZmF1bHQgYXQgU3RhZ2UgMSBhbmQgYSB0cmFuc2xhdGlvbiBmYXVsdCBhdCBTdGFnZSAyLgorCisJICBUaGUgd29ya2Fyb3VuZCBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgU3RhZ2UgMSB0cmFuc2xhdGlvbgorCSAgZG9lc24ndCBnZW5lcmF0ZSBhIGZhdWx0IGJlZm9yZSBoYW5kbGluZyB0aGUgU3RhZ2UgMiBmYXVsdC4KKwkgIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBlbmFibGUgdGhlIHdvcmthcm91bmQsCisJICBhcyBpdCBkZXBlbmRzIG9uIHRoZSBhbHRlcm5hdGl2ZSBmcmFtZXdvcmssIHdoaWNoIHdpbGwgb25seSBwYXRjaAorCSAgdGhlIGtlcm5lbCBpZiBhbiBhZmZlY3RlZCBDUFUgaXMgZGV0ZWN0ZWQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBBUk02NF9FUlJBVFVNXzg0NTcxOQogCWJvb2wgIkNvcnRleC1BNTM6IDg0NTcxOTogYSBsb2FkIG1pZ2h0IHJlYWQgaW5jb3JyZWN0IGRhdGEiCiAJZGVwZW5kcyBvbiBDT01QQVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczIwODBhLmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9mc2wtbHMyMDgwYS5kdHNpCmluZGV4IGU4MWNkNDguLjkyNTU1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2ZzbC1sczIwODBhLmR0c2kKKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvZnNsLWxzMjA4MGEuZHRzaQpAQCAtMjY5LDYgKzI2OSw3IEBACiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CS8qIFVwZGF0ZWQgYnkgYm9vdGxvYWRlciAqLwogCQkJdm9sdGFnZS1yYW5nZXMgPSA8MTgwMCAxODAwIDMzMDAgMzMwMD47CiAJCQlzZGhjaSxhdXRvLWNtZDEyOworCQkJbGl0dGxlLWVuZGlhbjsKIAkJCWJ1cy13aWR0aCA9IDw0PjsKIAkJfTsKIApAQCAtMjc3LDYgKzI3OCw3IEBACiAJCQlyZWcgPSA8MHgwIDB4MjMwMDAwMCAweDAgMHgxMDAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDAgMzYgMHg0PjsgLyogTGV2ZWwgaGlnaCB0eXBlICovCiAJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlsaXR0bGUtZW5kaWFuOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CkBAIC0yODcsNiArMjg5LDcgQEAKIAkJCXJlZyA9IDwweDAgMHgyMzEwMDAwIDB4MCAweDEwMDAwPjsKIAkJCWludGVycnVwdHMgPSA8MCAzNiAweDQ+OyAvKiBMZXZlbCBoaWdoIHR5cGUgKi8KIAkJCWdwaW8tY29udHJvbGxlcjsKKwkJCWxpdHRsZS1lbmRpYW47CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKQEAgLTI5Nyw2ICszMDAsNyBAQAogCQkJcmVnID0gPDB4MCAweDIzMjAwMDAgMHgwIDB4MTAwMDA+OwogCQkJaW50ZXJydXB0cyA9IDwwIDM3IDB4ND47IC8qIExldmVsIGhpZ2ggdHlwZSAqLwogCQkJZ3Bpby1jb250cm9sbGVyOworCQkJbGl0dGxlLWVuZGlhbjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpAQCAtMzA3LDYgKzMxMSw3IEBACiAJCQlyZWcgPSA8MHgwIDB4MjMzMDAwMCAweDAgMHgxMDAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDAgMzcgMHg0PjsgLyogTGV2ZWwgaGlnaCB0eXBlICovCiAJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlsaXR0bGUtZW5kaWFuOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2lwaGVyLmMgYi9hcmNoL2FybTY0L2NyeXB0by9hZXMtY2UtY2lwaGVyLmMKaW5kZXggY2U0Nzc5Mi4uZjdiZDliZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vYWVzLWNlLWNpcGhlci5jCisrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL2Flcy1jZS1jaXBoZXIuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWVzX2FsZyA9IHsKIAkuY3JhX25hbWUJCT0gImFlcyIsCiAJLmNyYV9kcml2ZXJfbmFtZQk9ICJhZXMtY2UiLAotCS5jcmFfcHJpb3JpdHkJCT0gMzAwLAorCS5jcmFfcHJpb3JpdHkJCT0gMjUwLAogCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCksCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FyY2hfZ2ljdjMuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYXJjaF9naWN2My5oCmluZGV4IDAzMGNkY2IuLjI3MzFkM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYXJjaF9naWN2My5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYXJjaF9naWN2My5oCkBAIC03Nyw2ICs3Nyw3IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KIAogLyoKICAqIExvdy1sZXZlbCBhY2Nlc3NvcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYmFycmllci5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKaW5kZXggNjI0Zjk2Ny4uOTYyMmViNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKQEAgLTY0LDI3ICs2NCwzMSBAQAogCiAjZGVmaW5lIHNtcF9sb2FkX2FjcXVpcmUocCkJCQkJCQlcCiAoewkJCQkJCQkJCVwKLQl0eXBlb2YoKnApIF9fX3AxOwkJCQkJCVwKKwl1bmlvbiB7IHR5cGVvZigqcCkgX192YWw7IGNoYXIgX19jWzFdOyB9IF9fdTsJCQlcCiAJY29tcGlsZXRpbWVfYXNzZXJ0X2F0b21pY190eXBlKCpwKTsJCQkJXAogCXN3aXRjaCAoc2l6ZW9mKCpwKSkgewkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCQlcCiAJCWFzbSB2b2xhdGlsZSAoImxkYXJiICV3MCwgJTEiCQkJCVwKLQkJCTogIj1yIiAoX19fcDEpIDogIlEiICgqcCkgOiAibWVtb3J5Iik7CQlcCisJCQk6ICI9ciIgKCooX191OCAqKV9fdS5fX2MpCQkJXAorCQkJOiAiUSIgKCpwKSA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCWNhc2UgMjoJCQkJCQkJCVwKIAkJYXNtIHZvbGF0aWxlICgibGRhcmggJXcwLCAlMSIJCQkJXAotCQkJOiAiPXIiIChfX19wMSkgOiAiUSIgKCpwKSA6ICJtZW1vcnkiKTsJCVwKKwkJCTogIj1yIiAoKihfX3UxNiAqKV9fdS5fX2MpCQkJXAorCQkJOiAiUSIgKCpwKSA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJCVwKIAkJYXNtIHZvbGF0aWxlICgibGRhciAldzAsICUxIgkJCQlcCi0JCQk6ICI9ciIgKF9fX3AxKSA6ICJRIiAoKnApIDogIm1lbW9yeSIpOwkJXAorCQkJOiAiPXIiICgqKF9fdTMyICopX191Ll9fYykJCQlcCisJCQk6ICJRIiAoKnApIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQkJXAogCQlhc20gdm9sYXRpbGUgKCJsZGFyICUwLCAlMSIJCQkJXAotCQkJOiAiPXIiIChfX19wMSkgOiAiUSIgKCpwKSA6ICJtZW1vcnkiKTsJCVwKKwkJCTogIj1yIiAoKihfX3U2NCAqKV9fdS5fX2MpCQkJXAorCQkJOiAiUSIgKCpwKSA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCX0JCQkJCQkJCVwKLQlfX19wMTsJCQkJCQkJCVwKKwlfX3UuX192YWw7CQkJCQkJCVwKIH0pCiAKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQkJZG8geyB9IHdoaWxlKDApCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NvbXBhdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jb21wYXQuaAppbmRleCA3ZmJlZDY5Li5lYjg0MzJiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NvbXBhdC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY29tcGF0LmgKQEAgLTIzLDcgKzIzLDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KIAogI2RlZmluZSBDT01QQVRfVVNFUl9IWgkJMTAwCiAjaWZkZWYgX19BQVJDSDY0RUJfXwpAQCAtMjM0LDcgKzIzMyw3IEBACiAJcmV0dXJuICh1MzIpKHVuc2lnbmVkIGxvbmcpdXB0cjsKIH0KIAotI2RlZmluZSBjb21wYXRfdXNlcl9zdGFja19wb2ludGVyKCkgKHVzZXJfc3RhY2tfcG9pbnRlcihjdXJyZW50X3B0X3JlZ3MoKSkpCisjZGVmaW5lIGNvbXBhdF91c2VyX3N0YWNrX3BvaW50ZXIoKSAodXNlcl9zdGFja19wb2ludGVyKHRhc2tfcHRfcmVncyhjdXJyZW50KSkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKmFyY2hfY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UobG9uZyBsZW4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IDExZDViYjBmLi44ZjI3MWI4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMjksOCArMjksOSBAQAogI2RlZmluZSBBUk02NF9IQVNfUEFOCQkJCTQKICNkZWZpbmUgQVJNNjRfSEFTX0xTRV9BVE9NSUNTCQkJNQogI2RlZmluZSBBUk02NF9XT1JLQVJPVU5EX0NBVklVTV8yMzE1NAkJNgorI2RlZmluZSBBUk02NF9XT1JLQVJPVU5EXzgzNDIyMAkJCTcKIAotI2RlZmluZSBBUk02NF9OQ0FQUwkJCQk3CisjZGVmaW5lIEFSTTY0X05DQVBTCQkJCTgKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtNDYsOCArNDcsMTIgQEAKICNkZWZpbmUgRlRSX1NUUklDVAl0cnVlCS8qIFNBTklUWSBjaGVjayBzdHJpY3QgbWF0Y2hpbmcgcmVxdWlyZWQgKi8KICNkZWZpbmUgRlRSX05PTlNUUklDVAlmYWxzZQkvKiBTQU5JVFkgY2hlY2sgaWdub3JlZCAqLwogCisjZGVmaW5lIEZUUl9TSUdORUQJdHJ1ZQkvKiBWYWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBzaWduZWQgKi8KKyNkZWZpbmUgRlRSX1VOU0lHTkVECWZhbHNlCS8qIFZhbHVlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHVuc2lnbmVkICovCisKIHN0cnVjdCBhcm02NF9mdHJfYml0cyB7Ci0JYm9vbAkJc3RyaWN0OwkgIC8qIENQVSBTYW5pdHkgY2hlY2s6IHN0cmljdCBtYXRjaGluZyByZXF1aXJlZCA/ICovCisJYm9vbAkJc2lnbjsJLyogVmFsdWUgaXMgc2lnbmVkID8gKi8KKwlib29sCQlzdHJpY3Q7CS8qIENQVSBTYW5pdHkgY2hlY2s6IHN0cmljdCBtYXRjaGluZyByZXF1aXJlZCA/ICovCiAJZW51bSBmdHJfdHlwZQl0eXBlOwogCXU4CQlzaGlmdDsKIAl1OAkJd2lkdGg7CkBAIC0xMjMsNiArMTI4LDE4IEBACiAJcmV0dXJuIGNwdWlkX2ZlYXR1cmVfZXh0cmFjdF9maWVsZF93aWR0aChmZWF0dXJlcywgZmllbGQsIDQpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9jb25zdF9fCitjcHVpZF9mZWF0dXJlX2V4dHJhY3RfdW5zaWduZWRfZmllbGRfd2lkdGgodTY0IGZlYXR1cmVzLCBpbnQgZmllbGQsIGludCB3aWR0aCkKK3sKKwlyZXR1cm4gKHU2NCkoZmVhdHVyZXMgPDwgKDY0IC0gd2lkdGggLSBmaWVsZCkpID4+ICg2NCAtIHdpZHRoKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfY29uc3RfXworY3B1aWRfZmVhdHVyZV9leHRyYWN0X3Vuc2lnbmVkX2ZpZWxkKHU2NCBmZWF0dXJlcywgaW50IGZpZWxkKQoreworCXJldHVybiBjcHVpZF9mZWF0dXJlX2V4dHJhY3RfdW5zaWduZWRfZmllbGRfd2lkdGgoZmVhdHVyZXMsIGZpZWxkLCA0KTsKK30KKwogc3RhdGljIGlubGluZSB1NjQgYXJtNjRfZnRyX21hc2soc3RydWN0IGFybTY0X2Z0cl9iaXRzICpmdHJwKQogewogCXJldHVybiAodTY0KUdFTk1BU0soZnRycC0+c2hpZnQgKyBmdHJwLT53aWR0aCAtIDEsIGZ0cnAtPnNoaWZ0KTsKQEAgLTEzMCw3ICsxNDcsOSBAQAogCiBzdGF0aWMgaW5saW5lIHM2NCBhcm02NF9mdHJfdmFsdWUoc3RydWN0IGFybTY0X2Z0cl9iaXRzICpmdHJwLCB1NjQgdmFsKQogewotCXJldHVybiBjcHVpZF9mZWF0dXJlX2V4dHJhY3RfZmllbGRfd2lkdGgodmFsLCBmdHJwLT5zaGlmdCwgZnRycC0+d2lkdGgpOworCXJldHVybiBmdHJwLT5zaWduID8KKwkJY3B1aWRfZmVhdHVyZV9leHRyYWN0X2ZpZWxkX3dpZHRoKHZhbCwgZnRycC0+c2hpZnQsIGZ0cnAtPndpZHRoKSA6CisJCWNwdWlkX2ZlYXR1cmVfZXh0cmFjdF91bnNpZ25lZF9maWVsZF93aWR0aCh2YWwsIGZ0cnAtPnNoaWZ0LCBmdHJwLT53aWR0aCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpZF9hYTY0bW1mcjBfbWl4ZWRfZW5kaWFuX2VsMCh1NjQgbW1mcjApCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggNTRkMGVhZC4uNjFlMDhmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTgsNyArMTgsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCkBAIC0yNiwyMiArMjUsMTYgQEAKICNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KIAogI2RlZmluZSBETUFfRVJST1JfQ09ERQkofihkbWFfYWRkcl90KTApCi1leHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICpkbWFfb3BzOwogZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyBkdW1teV9kbWFfb3BzOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfbWFwX29wcyAqX19nZW5lcmljX2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmICh1bmxpa2VseSghZGV2KSkKLQkJcmV0dXJuIGRtYV9vcHM7Ci0JZWxzZSBpZiAoZGV2LT5hcmNoZGF0YS5kbWFfb3BzKQorCWlmIChkZXYgJiYgZGV2LT5hcmNoZGF0YS5kbWFfb3BzKQogCQlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfb3BzOwotCWVsc2UgaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybiBkbWFfb3BzOwogCiAJLyoKLQkgKiBXaGVuIEFDUEkgaXMgZW5hYmxlZCwgaWYgYXJjaF9zZXRfZG1hX29wcyBpcyBub3QgY2FsbGVkLAotCSAqIHdlIHdpbGwgZGlzYWJsZSBkZXZpY2UgRE1BIGNhcGFiaWxpdHkgYnkgc2V0dGluZyBpdAotCSAqIHRvIGR1bW15X2RtYV9vcHMuCisJICogV2UgZXhwZWN0IG5vIElTQSBkZXZpY2VzLCBhbmQgYWxsIG90aGVyIERNQSBtYXN0ZXJzIGFyZSBleHBlY3RlZCB0bworCSAqIGhhdmUgc29tZW9uZSBjYWxsIGFyY2hfc2V0dXBfZG1hX29wcyBhdCBkZXZpY2UgY3JlYXRpb24gdGltZS4KIAkgKi8KIAlyZXR1cm4gJmR1bW15X2RtYV9vcHM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCmluZGV4IGU1NDQxNWUuLjk3MzI5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCkBAIC0xMzgsMTYgKzEzOCwxOCBAQAogLyogRGV0ZXJtaW5lIG51bWJlciBvZiBCUlAgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdldF9udW1fYnJwcyh2b2lkKQogeworCXU2NCBkZnIwID0gcmVhZF9zeXN0ZW1fcmVnKFNZU19JRF9BQTY0REZSMF9FTDEpOwogCXJldHVybiAxICsKLQkJY3B1aWRfZmVhdHVyZV9leHRyYWN0X2ZpZWxkKHJlYWRfc3lzdGVtX3JlZyhTWVNfSURfQUE2NERGUjBfRUwxKSwKKwkJY3B1aWRfZmVhdHVyZV9leHRyYWN0X3Vuc2lnbmVkX2ZpZWxkKGRmcjAsCiAJCQkJCQlJRF9BQTY0REZSMF9CUlBTX1NISUZUKTsKIH0KIAogLyogRGV0ZXJtaW5lIG51bWJlciBvZiBXUlAgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdldF9udW1fd3Jwcyh2b2lkKQogeworCXU2NCBkZnIwID0gcmVhZF9zeXN0ZW1fcmVnKFNZU19JRF9BQTY0REZSMF9FTDEpOwogCXJldHVybiAxICsKLQkJY3B1aWRfZmVhdHVyZV9leHRyYWN0X2ZpZWxkKHJlYWRfc3lzdGVtX3JlZyhTWVNfSURfQUE2NERGUjBfRUwxKSwKKwkJY3B1aWRfZmVhdHVyZV9leHRyYWN0X3Vuc2lnbmVkX2ZpZWxkKGRmcjAsCiAJCQkJCQlJRF9BQTY0REZSMF9XUlBTX1NISUZUKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggMjNlYjQ1MC4uOGU4ZDMwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lycS5oCkBAIC03LDQgKzcsOSBAQAogCiBleHRlcm4gdm9pZCBzZXRfaGFuZGxlX2lycSh2b2lkICgqaGFuZGxlX2lycSkoc3RydWN0IHB0X3JlZ3MgKikpOwogCitzdGF0aWMgaW5saW5lIGludCBucl9sZWdhY3lfaXJxcyh2b2lkKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAppbmRleCAxN2U5MmYwLi4yNWE0MDIxIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC05OSwxMiArOTksMjIgQEAKIAkqdmNwdV9jcHNyKHZjcHUpIHw9IENPTVBBVF9QU1JfVF9CSVQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqdmNwdV9yZWcoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCByZWdfbnVtKQorLyoKKyAqIHZjcHVfZ2V0X3JlZyBhbmQgdmNwdV9zZXRfcmVnIHNob3VsZCBhbHdheXMgYmUgcGFzc2VkIGEgcmVnaXN0ZXIgbnVtYmVyCisgKiBjb21pbmcgZnJvbSBhIHJlYWQgb2YgRVNSX0VMMi4gT3RoZXJ3aXNlLCBpdCBtYXkgZ2l2ZSB0aGUgd3JvbmcgcmVzdWx0IG9uCisgKiBBQXJjaDMyIHdpdGggYmFua2VkIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZjcHVfZ2V0X3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCSB1OCByZWdfbnVtKQogewotCWlmICh2Y3B1X21vZGVfaXNfMzJiaXQodmNwdSkpCi0JCXJldHVybiB2Y3B1X3JlZzMyKHZjcHUsIHJlZ19udW0pOworCXJldHVybiAocmVnX251bSA9PSAzMSkgPyAwIDogdmNwdV9ncF9yZWdzKHZjcHUpLT5yZWdzLnJlZ3NbcmVnX251bV07Cit9CiAKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikmdmNwdV9ncF9yZWdzKHZjcHUpLT5yZWdzLnJlZ3NbcmVnX251bV07CitzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9zZXRfcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggcmVnX251bSwKKwkJCQl1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlpZiAocmVnX251bSAhPSAzMSkKKwkJdmNwdV9ncF9yZWdzKHZjcHUpLT5yZWdzLnJlZ3NbcmVnX251bV0gPSB2YWw7CiB9CiAKIC8qIEdldCB2Y3B1IFNQU1IgZm9yIGN1cnJlbnQgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IGMwZTg3ODkuLjI0MTY1NzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogI2RlZmluZSBkZXN0cm95X2NvbnRleHQobW0pCQlkbyB7IH0gd2hpbGUoMCkKIHZvaWQgY2hlY2tfYW5kX3N3aXRjaF9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgY3B1KTsKIAotI2RlZmluZSBpbml0X25ld19jb250ZXh0KHRzayxtbSkJKHsgYXRvbWljNjRfc2V0KCZtbS0+Y29udGV4dC5pZCwgMCk7IDA7IH0pCisjZGVmaW5lIGluaXRfbmV3X2NvbnRleHQodHNrLG1tKQkoeyBhdG9taWM2NF9zZXQoJihtbSktPmNvbnRleHQuaWQsIDApOyAwOyB9KQogCiAvKgogICogVGhpcyBpcyBjYWxsZWQgd2hlbiAidHNrIiBpcyBhYm91dCB0byBlbnRlciBsYXp5IFRMQiBtb2RlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA5ODE5YTk0Li42M2Y1MmI1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtODEsNiArODEsNyBAQAogCiAjZGVmaW5lIFBBR0VfS0VSTkVMCQlfX3BncHJvdChfUEFHRV9ERUZBVUxUIHwgUFRFX1BYTiB8IFBURV9VWE4gfCBQVEVfRElSVFkgfCBQVEVfV1JJVEUpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1JPCQlfX3BncHJvdChfUEFHRV9ERUZBVUxUIHwgUFRFX1BYTiB8IFBURV9VWE4gfCBQVEVfRElSVFkgfCBQVEVfUkRPTkxZKQorI2RlZmluZSBQQUdFX0tFUk5FTF9ST1gJX19wZ3Byb3QoX1BBR0VfREVGQVVMVCB8IFBURV9VWE4gfCBQVEVfRElSVFkgfCBQVEVfUkRPTkxZKQogI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDCV9fcGdwcm90KF9QQUdFX0RFRkFVTFQgfCBQVEVfVVhOIHwgUFRFX0RJUlRZIHwgUFRFX1dSSVRFKQogI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDX0NPTlQJX19wZ3Byb3QoX1BBR0VfREVGQVVMVCB8IFBURV9VWE4gfCBQVEVfRElSVFkgfCBQVEVfV1JJVEUgfCBQVEVfQ09OVCkKIApAQCAtMjc1LDEwICsyNzYsMTQgQEAKIAkgKiBoYXJkd2FyZSB1cGRhdGVzIG9mIHRoZSBwdGUgKHB0ZXBfc2V0X2FjY2Vzc19mbGFncyBzYWZlbHkgY2hhbmdlcwogCSAqIHZhbGlkIHB0ZXMgd2l0aG91dCBnb2luZyB0aHJvdWdoIGFuIGludmFsaWQgZW50cnkpLgogCSAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR19ERUJVR19WTSkgJiYgSVNfRU5BQkxFRChDT05GSUdfQVJNNjRfSFdfQUZEQk0pICYmCi0JICAgIHB0ZV92YWxpZCgqcHRlcCkpIHsKLQkJQlVHX09OKCFwdGVfeW91bmcocHRlKSk7Ci0JCUJVR19PTihwdGVfd3JpdGUoKnB0ZXApICYmICFwdGVfZGlydHkocHRlKSk7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FSTTY0X0hXX0FGREJNKSAmJgorCSAgICBwdGVfdmFsaWQoKnB0ZXApICYmIHB0ZV92YWxpZChwdGUpKSB7CisJCVZNX1dBUk5fT05DRSghcHRlX3lvdW5nKHB0ZSksCisJCQkgICAgICIlczogcmFjeSBhY2Nlc3MgZmxhZyBjbGVhcmluZzogMHglMDE2bGx4IC0+IDB4JTAxNmxseCIsCisJCQkgICAgIF9fZnVuY19fLCBwdGVfdmFsKCpwdGVwKSwgcHRlX3ZhbChwdGUpKTsKKwkJVk1fV0FSTl9PTkNFKHB0ZV93cml0ZSgqcHRlcCkgJiYgIXB0ZV9kaXJ0eShwdGUpLAorCQkJICAgICAiJXM6IHJhY3kgZGlydHkgc3RhdGUgY2xlYXJpbmc6IDB4JTAxNmxseCAtPiAweCUwMTZsbHgiLAorCQkJICAgICBfX2Z1bmNfXywgcHRlX3ZhbCgqcHRlcCksIHB0ZV92YWwocHRlKSk7CiAJfQogCiAJc2V0X3B0ZShwdGVwLCBwdGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1X2VycmF0YS5jCmluZGV4IDI0OTI2ZjIuLmZlYjZiNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdV9lcnJhdGEuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVfZXJyYXRhLmMKQEAgLTc1LDYgKzc1LDE1IEBACiAJCQkgICAoMSA8PCBNSURSX1ZBUklBTlRfU0hJRlQpIHwgMiksCiAJfSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUk02NF9FUlJBVFVNXzgzNDIyMAorCXsKKwkvKiBDb3J0ZXgtQTU3IHIwcDAgLSByMXAyICovCisJCS5kZXNjID0gIkFSTSBlcnJhdHVtIDgzNDIyMCIsCisJCS5jYXBhYmlsaXR5ID0gQVJNNjRfV09SS0FST1VORF84MzQyMjAsCisJCU1JRFJfUkFOR0UoTUlEUl9DT1JURVhfQTU3LCAweDAwLAorCQkJICAgKDEgPDwgTUlEUl9WQVJJQU5UX1NISUZUKSB8IDIpLAorCX0sCisjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJNNjRfRVJSQVRVTV84NDU3MTkKIAl7CiAJLyogQ29ydGV4LUE1MyByMHBbMDEyMzRdICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMKaW5kZXggYzhjZjg5Mi4uMDY2OWM2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYwpAQCAtNDQsOCArNDQsOSBAQAogCiBERUNMQVJFX0JJVE1BUChjcHVfaHdjYXBzLCBBUk02NF9OQ0FQUyk7CiAKLSNkZWZpbmUgQVJNNjRfRlRSX0JJVFMoU1RSSUNULCBUWVBFLCBTSElGVCwgV0lEVEgsIFNBRkVfVkFMKSBcCisjZGVmaW5lIF9fQVJNNjRfRlRSX0JJVFMoU0lHTkVELCBTVFJJQ1QsIFRZUEUsIFNISUZULCBXSURUSCwgU0FGRV9WQUwpIFwKIAl7CQkJCQkJXAorCQkuc2lnbiA9IFNJR05FRCwJCQkJXAogCQkuc3RyaWN0ID0gU1RSSUNULAkJCVwKIAkJLnR5cGUgPSBUWVBFLAkJCQlcCiAJCS5zaGlmdCA9IFNISUZULAkJCQlcCkBAIC01Myw2ICs1NCwxNCBAQAogCQkuc2FmZV92YWwgPSBTQUZFX1ZBTCwJCQlcCiAJfQogCisvKiBEZWZpbmUgYSBmZWF0dXJlIHdpdGggc2lnbmVkIHZhbHVlcyAqLworI2RlZmluZSBBUk02NF9GVFJfQklUUyhTVFJJQ1QsIFRZUEUsIFNISUZULCBXSURUSCwgU0FGRV9WQUwpIFwKKwlfX0FSTTY0X0ZUUl9CSVRTKEZUUl9TSUdORUQsIFNUUklDVCwgVFlQRSwgU0hJRlQsIFdJRFRILCBTQUZFX1ZBTCkKKworLyogRGVmaW5lIGEgZmVhdHVyZSB3aXRoIHVuc2lnbmVkIHZhbHVlICovCisjZGVmaW5lIFVfQVJNNjRfRlRSX0JJVFMoU1RSSUNULCBUWVBFLCBTSElGVCwgV0lEVEgsIFNBRkVfVkFMKSBcCisJX19BUk02NF9GVFJfQklUUyhGVFJfVU5TSUdORUQsIFNUUklDVCwgVFlQRSwgU0hJRlQsIFdJRFRILCBTQUZFX1ZBTCkKKwogI2RlZmluZSBBUk02NF9GVFJfRU5ECQkJCQlcCiAJewkJCQkJCVwKIAkJLndpZHRoID0gMCwJCQkJXApAQCAtOTksNyArMTA4LDcgQEAKIAkgKiBEaWZmZXJpbmcgUEFSYW5nZSBpcyBmaW5lIGFzIGxvbmcgYXMgYWxsIHBlcmlwaGVyYWxzIGFuZCBtZW1vcnkgYXJlIG1hcHBlZAogCSAqIHdpdGhpbiB0aGUgbWluaW11bSBQQVJhbmdlIG9mIGFsbCBDUFVzCiAJICovCi0JQVJNNjRfRlRSX0JJVFMoRlRSX05PTlNUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSMF9QQVJBTkdFX1NISUZULCA0LCAwKSwKKwlVX0FSTTY0X0ZUUl9CSVRTKEZUUl9OT05TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCBJRF9BQTY0TU1GUjBfUEFSQU5HRV9TSElGVCwgNCwgMCksCiAJQVJNNjRfRlRSX0VORCwKIH07CiAKQEAgLTExNSwxOCArMTI0LDE4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGFybTY0X2Z0cl9iaXRzIGZ0cl9jdHJbXSA9IHsKLQlBUk02NF9GVFJfQklUUyhGVFJfU1RSSUNULCBGVFJfRVhBQ1QsIDMxLCAxLCAxKSwJLyogUkFPICovCisJVV9BUk02NF9GVFJfQklUUyhGVFJfU1RSSUNULCBGVFJfRVhBQ1QsIDMxLCAxLCAxKSwJLyogUkFPICovCiAJQVJNNjRfRlRSX0JJVFMoRlRSX1NUUklDVCwgRlRSX0VYQUNULCAyOCwgMywgMCksCi0JQVJNNjRfRlRSX0JJVFMoRlRSX1NUUklDVCwgRlRSX0hJR0hFUl9TQUZFLCAyNCwgNCwgMCksCS8qIENXRyAqLwotCUFSTTY0X0ZUUl9CSVRTKEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCAyMCwgNCwgMCksCS8qIEVSRyAqLwotCUFSTTY0X0ZUUl9CSVRTKEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCAxNiwgNCwgMSksCS8qIERtaW5MaW5lICovCisJVV9BUk02NF9GVFJfQklUUyhGVFJfU1RSSUNULCBGVFJfSElHSEVSX1NBRkUsIDI0LCA0LCAwKSwJLyogQ1dHICovCisJVV9BUk02NF9GVFJfQklUUyhGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgMjAsIDQsIDApLAkvKiBFUkcgKi8KKwlVX0FSTTY0X0ZUUl9CSVRTKEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCAxNiwgNCwgMSksCS8qIERtaW5MaW5lICovCiAJLyoKIAkgKiBMaW51eCBjYW4gaGFuZGxlIGRpZmZlcmluZyBJLWNhY2hlIHBvbGljaWVzLiBVc2Vyc3BhY2UgSklUcyB3aWxsCiAJICogbWFrZSB1c2Ugb2YgKm1pbkxpbmUKIAkgKi8KLQlBUk02NF9GVFJfQklUUyhGVFJfTk9OU1RSSUNULCBGVFJfRVhBQ1QsIDE0LCAyLCAwKSwJLyogTDFJcCAqLworCVVfQVJNNjRfRlRSX0JJVFMoRlRSX05PTlNUUklDVCwgRlRSX0VYQUNULCAxNCwgMiwgMCksCS8qIEwxSXAgKi8KIAlBUk02NF9GVFJfQklUUyhGVFJfU1RSSUNULCBGVFJfRVhBQ1QsIDQsIDEwLCAwKSwJLyogUkFaICovCi0JQVJNNjRfRlRSX0JJVFMoRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIDAsIDQsIDApLAkvKiBJbWluTGluZSAqLworCVVfQVJNNjRfRlRSX0JJVFMoRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIDAsIDQsIDApLAkvKiBJbWluTGluZSAqLwogCUFSTTY0X0ZUUl9FTkQsCiB9OwogCkBAIC0xNDQsMTIgKzE1MywxMiBAQAogCiBzdGF0aWMgc3RydWN0IGFybTY0X2Z0cl9iaXRzIGZ0cl9pZF9hYTY0ZGZyMFtdID0gewogCUFSTTY0X0ZUUl9CSVRTKEZUUl9TVFJJQ1QsIEZUUl9FWEFDVCwgMzIsIDMyLCAwKSwKLQlBUk02NF9GVFJfQklUUyhGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NERGUjBfQ1RYX0NNUFNfU0hJRlQsIDQsIDApLAotCUFSTTY0X0ZUUl9CSVRTKEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCBJRF9BQTY0REZSMF9XUlBTX1NISUZULCA0LCAwKSwKLQlBUk02NF9GVFJfQklUUyhGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NERGUjBfQlJQU19TSElGVCwgNCwgMCksCi0JQVJNNjRfRlRSX0JJVFMoRlRSX1NUUklDVCwgRlRSX0VYQUNULCBJRF9BQTY0REZSMF9QTVVWRVJfU0hJRlQsIDQsIDApLAotCUFSTTY0X0ZUUl9CSVRTKEZUUl9TVFJJQ1QsIEZUUl9FWEFDVCwgSURfQUE2NERGUjBfVFJBQ0VWRVJfU0hJRlQsIDQsIDApLAotCUFSTTY0X0ZUUl9CSVRTKEZUUl9TVFJJQ1QsIEZUUl9FWEFDVCwgSURfQUE2NERGUjBfREVCVUdWRVJfU0hJRlQsIDQsIDB4NiksCisJVV9BUk02NF9GVFJfQklUUyhGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NERGUjBfQ1RYX0NNUFNfU0hJRlQsIDQsIDApLAorCVVfQVJNNjRfRlRSX0JJVFMoRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRERlIwX1dSUFNfU0hJRlQsIDQsIDApLAorCVVfQVJNNjRfRlRSX0JJVFMoRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRERlIwX0JSUFNfU0hJRlQsIDQsIDApLAorCVVfQVJNNjRfRlRSX0JJVFMoRlRSX1NUUklDVCwgRlRSX0VYQUNULCBJRF9BQTY0REZSMF9QTVVWRVJfU0hJRlQsIDQsIDApLAorCVVfQVJNNjRfRlRSX0JJVFMoRlRSX1NUUklDVCwgRlRSX0VYQUNULCBJRF9BQTY0REZSMF9UUkFDRVZFUl9TSElGVCwgNCwgMCksCisJVV9BUk02NF9GVFJfQklUUyhGVFJfU1RSSUNULCBGVFJfRVhBQ1QsIElEX0FBNjRERlIwX0RFQlVHVkVSX1NISUZULCA0LCAweDYpLAogCUFSTTY0X0ZUUl9FTkQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMKaW5kZXggNzA2Njc5ZC4uMjEyYWU2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAvKgogICogSW4gY2FzZSB0aGUgYm9vdCBDUFUgaXMgaG90cGx1Z2dhYmxlLCB3ZSByZWNvcmQgaXRzIGluaXRpYWwgc3RhdGUgYW5kCkBAIC0xMTIsNiArMTEzLDEwIEBACiAJCSAqLwogCQlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdDogJWRcbiIsIGkpOwogCisJCXNlcV9wcmludGYobSwgIkJvZ29NSVBTXHQ6ICVsdS4lMDJsdVxuIiwKKwkJCSAgIGxvb3BzX3Blcl9qaWZmeSAvICg1MDAwMDBVTC9IWiksCisJCQkgICBsb29wc19wZXJfamlmZnkgLyAoNTAwMFVML0haKSAlIDEwMCk7CisKIAkJLyoKIAkJICogRHVtcCBvdXQgdGhlIGNvbW1vbiBwcm9jZXNzb3IgZmVhdHVyZXMgaW4gYSBzaW5nbGUgbGluZS4KIAkJICogVXNlcnNwYWNlIHNob3VsZCByZWFkIHRoZSBod2NhcHMgd2l0aCBnZXRhdXh2YWwoQVRfSFdDQVApCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvYXJtNjQva2VybmVsL2VmaS5jCmluZGV4IGRlNDZiNTAuLjRlZWIxNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2VmaS5jCkBAIC0xMjcsNyArMTI3LDExIEBACiAJdGFibGVfc2l6ZSA9IHNpemVvZihlZmlfY29uZmlnX3RhYmxlXzY0X3QpICogZWZpLnN5c3RhYi0+bnJfdGFibGVzOwogCWNvbmZpZ190YWJsZXMgPSBlYXJseV9tZW1yZW1hcChlZmlfdG9fcGh5cyhlZmkuc3lzdGFiLT50YWJsZXMpLAogCQkJCSAgICAgICB0YWJsZV9zaXplKTsKLQorCWlmIChjb25maWdfdGFibGVzID09IE5VTEwpIHsKKwkJcHJfd2FybigiVW5hYmxlIHRvIG1hcCBFRkkgY29uZmlnIHRhYmxlIGFycmF5LlxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAlyZXR2YWwgPSBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25maWdfdGFibGVzLCBlZmkuc3lzdGFiLT5ucl90YWJsZXMsCiAJCQkJCSBzaXplb2YoZWZpX2NvbmZpZ190YWJsZV82NF90KSwgTlVMTCk7CiAKQEAgLTIwOSw2ICsyMTMsMTQgQEAKIAkJCSBQQUdFX0FMSUdOKHBhcmFtcy5tbWFwX3NpemUgKyAocGFyYW1zLm1tYXAgJiB+UEFHRV9NQVNLKSkpOwogCW1lbW1hcC5waHlzX21hcCA9IHBhcmFtcy5tbWFwOwogCW1lbW1hcC5tYXAgPSBlYXJseV9tZW1yZW1hcChwYXJhbXMubW1hcCwgcGFyYW1zLm1tYXBfc2l6ZSk7CisJaWYgKG1lbW1hcC5tYXAgPT0gTlVMTCkgeworCQkvKgorCQkqIElmIHdlIGFyZSBib290aW5nIHZpYSBVRUZJLCB0aGUgVUVGSSBtZW1vcnkgbWFwIGlzIHRoZSBvbmx5CisJCSogZGVzY3JpcHRpb24gb2YgbWVtb3J5IHdlIGhhdmUsIHNvIHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbgorCQkqIHByb2NlZWRpbmcgaWYgd2UgY2Fubm90IGFjY2VzcyBpdC4KKwkJKi8KKwkJcGFuaWMoIlVuYWJsZSB0byBtYXAgRUZJIG1lbW9yeSBtYXAuXG4iKTsKKwl9CiAJbWVtbWFwLm1hcF9lbmQgPSBtZW1tYXAubWFwICsgcGFyYW1zLm1tYXBfc2l6ZTsKIAltZW1tYXAuZGVzY19zaXplID0gcGFyYW1zLmRlc2Nfc2l6ZTsKIAltZW1tYXAuZGVzY192ZXJzaW9uID0gcGFyYW1zLmRlc2NfdmVyOwpAQCAtMjI0LDggKzIzNiw5IEBACiB7CiAJZWZpX21lbW9yeV9kZXNjX3QgKm1kOwogCisJaW5pdF9uZXdfY29udGV4dChOVUxMLCAmZWZpX21tKTsKKwogCWZvcl9lYWNoX2VmaV9tZW1vcnlfZGVzYygmbWVtbWFwLCBtZCkgewotCQl1NjQgcGFkZHIsIG5wYWdlcywgc2l6ZTsKIAkJcGdwcm90X3QgcHJvdDsKIAogCQlpZiAoIShtZC0+YXR0cmlidXRlICYgRUZJX01FTU9SWV9SVU5USU1FKSkKQEAgLTIzMywxMSArMjQ2LDYgQEAKIAkJaWYgKG1kLT52aXJ0X2FkZHIgPT0gMCkKIAkJCXJldHVybiBmYWxzZTsKIAotCQlwYWRkciA9IG1kLT5waHlzX2FkZHI7Ci0JCW5wYWdlcyA9IG1kLT5udW1fcGFnZXM7Ci0JCW1lbXJhbmdlX2VmaV90b19uYXRpdmUoJnBhZGRyLCAmbnBhZ2VzKTsKLQkJc2l6ZSA9IG5wYWdlcyA8PCBQQUdFX1NISUZUOwotCiAJCXByX2luZm8oIiAgRUZJIHJlbWFwIDB4JTAxNmxseCA9PiAlcFxuIiwKIAkJCW1kLT5waHlzX2FkZHIsICh2b2lkICopbWQtPnZpcnRfYWRkcik7CiAKQEAgLTI1NCw3ICsyNjIsOSBAQAogCQllbHNlCiAJCQlwcm90ID0gUEFHRV9LRVJORUw7CiAKLQkJY3JlYXRlX3BnZF9tYXBwaW5nKCZlZmlfbW0sIHBhZGRyLCBtZC0+dmlydF9hZGRyLCBzaXplLCBwcm90KTsKKwkJY3JlYXRlX3BnZF9tYXBwaW5nKCZlZmlfbW0sIG1kLT5waHlzX2FkZHIsIG1kLT52aXJ0X2FkZHIsCisJCQkJICAgbWQtPm51bV9wYWdlcyA8PCBFRklfUEFHRV9TSElGVCwgCisJCQkJICAgX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IFBURV9ORykpOwogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTI3MCwxMiArMjgwLDEyIEBACiAKIAlpZiAoIWVmaV9lbmFibGVkKEVGSV9CT09UKSkgewogCQlwcl9pbmZvKCJFRkkgc2VydmljZXMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLlxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGVmaV9ydW50aW1lX2Rpc2FibGVkKCkpIHsKIAkJcHJfaW5mbygiRUZJIHJ1bnRpbWUgc2VydmljZXMgd2lsbCBiZSBkaXNhYmxlZC5cbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOwogCX0KIAogCXByX2luZm8oIlJlbWFwcGluZyBhbmQgZW5hYmxpbmcgRUZJIHNlcnZpY2VzLlxuIik7CkBAIC0yODUsNyArMjk1LDcgQEAKIAkJCQkJCSAgIG1hcHNpemUpOwogCWlmICghbWVtbWFwLm1hcCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byByZW1hcCBFRkkgbWVtb3J5IG1hcFxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbW1hcC5tYXBfZW5kID0gbWVtbWFwLm1hcCArIG1hcHNpemU7CiAJZWZpLm1lbW1hcCA9ICZtZW1tYXA7CkBAIC0yOTQsMTMgKzMwNCwxMyBAQAogCQkJCQkJICAgc2l6ZW9mKGVmaV9zeXN0ZW1fdGFibGVfdCkpOwogCWlmICghZWZpLnN5c3RhYikgewogCQlwcl9lcnIoIkZhaWxlZCB0byByZW1hcCBFRkkgU3lzdGVtIFRhYmxlXG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc2V0X2JpdChFRklfU1lTVEVNX1RBQkxFUywgJmVmaS5mbGFncyk7CiAKIAlpZiAoIWVmaV92aXJ0bWFwX2luaXQoKSkgewogCQlwcl9lcnIoIk5vIFVFRkkgdmlydHVhbCBtYXBwaW5nIHdhcyBpbnN0YWxsZWQgLS0gcnVudGltZSBzZXJ2aWNlcyB3aWxsIG5vdCBiZSBhdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCS8qIFNldCB1cCBydW50aW1lIHNlcnZpY2VzIGZ1bmN0aW9uIHBvaW50ZXJzICovCkBAIC0zMjksMTQgKzMzOSw3IEBACiAKIHN0YXRpYyB2b2lkIGVmaV9zZXRfcGdkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCWlmIChtbSA9PSAmaW5pdF9tbSkKLQkJY3B1X3NldF9yZXNlcnZlZF90dGJyMCgpOwotCWVsc2UKLQkJY3B1X3N3aXRjaF9tbShtbS0+cGdkLCBtbSk7Ci0KLQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7Ci0JaWYgKGljYWNoZV9pc19haXZpdnQoKSkKLQkJX19sb2NhbF9mbHVzaF9pY2FjaGVfYWxsKCk7CisJc3dpdGNoX21tKE5VTEwsIG1tLCBOVUxMKTsKIH0KIAogdm9pZCBlZmlfdmlydG1hcF9sb2FkKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zdXNwZW5kLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zdXNwZW5kLmMKaW5kZXggZmNlOTVlMS4uMTA5NWFhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYwpAQCAtMSwzICsxLDQgQEAKKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTcxLDYgKzcyLDEzIEBACiAJbG9jYWxfZGJnX3NhdmUoZmxhZ3MpOwogCiAJLyoKKwkgKiBGdW5jdGlvbiBncmFwaCB0cmFjZXIgc3RhdGUgZ2V0cyBpbmNvc2lzdGVudCB3aGVuIHRoZSBrZXJuZWwKKwkgKiBjYWxscyBmdW5jdGlvbnMgdGhhdCBuZXZlciByZXR1cm4gKGFrYSBzdXNwZW5kIGZpbmlzaGVycykgaGVuY2UKKwkgKiBkaXNhYmxlIGdyYXBoIHRyYWNpbmcgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvbi4KKwkgKi8KKwlwYXVzZV9ncmFwaF90cmFjaW5nKCk7CisKKwkvKgogCSAqIG1tIGNvbnRleHQgc2F2ZWQgb24gdGhlIHN0YWNrLCBpdCB3aWxsIGJlIHJlc3RvcmVkIHdoZW4KIAkgKiB0aGUgY3B1IGNvbWVzIG91dCBvZiByZXNldCB0aHJvdWdoIHRoZSBpZGVudGl0eSBtYXBwZWQKIAkgKiBwYWdlIHRhYmxlcywgc28gdGhhdCB0aGUgdGhyZWFkIGFkZHJlc3Mgc3BhY2UgaXMgcHJvcGVybHkKQEAgLTExMSw2ICsxMTksOCBAQAogCQkJaHdfYnJlYWtwb2ludF9yZXN0b3JlKE5VTEwpOwogCX0KIAorCXVucGF1c2VfZ3JhcGhfdHJhY2luZygpOworCiAJLyoKIAkgKiBSZXN0b3JlIHBzdGF0ZSBmbGFncy4gT1MgbG9jayBhbmQgbWRzY3IgaGF2ZSBiZWVuIGFscmVhZHkKIAkgKiByZXN0b3JlZCwgc28gZnJvbSB0aGlzIHBvaW50IG9ud2FyZHMsIGRlYnVnZ2luZyBpcyBmdWxseQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMWVlMmMzOS4uNzE0MjZhNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNSw2ICs1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20va2VybmVsLXBndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CkBAIC0xNDAsNyArMTQxLDcgQEAKIAkJQVJNX0VYSVRfS0VFUChFWElUX0RBVEEpCiAJfQogCi0JUEVSQ1BVX1NFQ1RJT04oNjQpCisJUEVSQ1BVX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMpCiAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsKQEAgLTE1OCw3ICsxNTksNyBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9kYXRhID0gLjsKIAlfc2RhdGEgPSAuOwotCVJXX0RBVEFfU0VDVElPTig2NCwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKKwlSV19EQVRBX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAJUEVDT0ZGX0VEQVRBX1BBRERJTkcKIAlfZWRhdGEgPSAuOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oYW5kbGVfZXhpdC5jIGIvYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYwppbmRleCA2OGEwNzU5Li4xNWYwNDc3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oYW5kbGVfZXhpdC5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMKQEAgLTM3LDcgKzM3LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JdHJhY2Vfa3ZtX2h2Y19hcm02NCgqdmNwdV9wYyh2Y3B1KSwgKnZjcHVfcmVnKHZjcHUsIDApLAorCXRyYWNlX2t2bV9odmNfYXJtNjQoKnZjcHVfcGModmNwdSksIHZjcHVfZ2V0X3JlZyh2Y3B1LCAwKSwKIAkJCSAgICBrdm1fdmNwdV9odmNfZ2V0X2ltbSh2Y3B1KSk7CiAKIAlyZXQgPSBrdm1fcHNjaV9jYWxsKHZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwLlMgYi9hcmNoL2FybTY0L2t2bS9oeXAuUwppbmRleCAxNTk5NzAxLi44NmMyODk4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAuUworKysgYi9hcmNoL2FybTY0L2t2bS9oeXAuUwpAQCAtODY0LDYgKzg2NCwxMCBAQAogRU5EUFJPQyhfX2t2bV9mbHVzaF92bV9jb250ZXh0KQogCiBfX2t2bV9oeXBfcGFuaWM6CisJLy8gU3Rhc2ggUEFSX0VMMSBiZWZvcmUgY29ycnVwdGluZyBpdCBpbiBfX3Jlc3RvcmVfc3lzcmVncworCW1ycwl4MCwgcGFyX2VsMQorCXB1c2gJeDAsIHh6cgorCiAJLy8gR3Vlc3MgdGhlIGNvbnRleHQgYnkgbG9va2luZyBhdCBWVFRCUjoKIAkvLyBJZiB6ZXJvLCB0aGVuIHdlJ3JlIGFscmVhZHkgYSBob3N0LgogCS8vIE90aGVyd2lzZSByZXN0b3JlIGEgbWluaW1hbCBob3N0IGNvbnRleHQgYmVmb3JlIHBhbmljaW5nLgpAQCAtODk4LDcgKzkwMiw3IEBACiAJbXJzCXgzLCBlc3JfZWwyCiAJbXJzCXg0LCBmYXJfZWwyCiAJbXJzCXg1LCBocGZhcl9lbDIKLQltcnMJeDYsIHBhcl9lbDEKKwlwb3AJeDYsIHh6cgkJLy8gYWN0aXZlIGNvbnRleHQgUEFSX0VMMQogCW1ycwl4NywgdHBpZHJfZWwyCiAKIAltb3YJbHIsICMoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgUFNSX0FfQklUIHwgUFNSX0RfQklUIHxcCkBAIC05MTQsNyArOTE4LDcgQEAKIEVORFBST0MoX19rdm1faHlwX3BhbmljKQogCiBfX2h5cF9wYW5pY19zdHI6Ci0JLmFzY2lpCSJIWVAgcGFuaWM6XG5QUzolMDh4IFBDOiVwIEVTUjolcFxuRkFSOiVwIEhQRkFSOiVwIFBBUjolcFxuVkNQVTolcFxuXDAiCisJLmFzY2lpCSJIWVAgcGFuaWM6XG5QUzolMDh4IFBDOiUwMTZ4IEVTUjolMDh4XG5GQVI6JTAxNnggSFBGQVI6JTAxNnggUEFSOiUwMTZ4XG5WQ1BVOiVwXG5cMCIKIAogCS5hbGlnbgkyCiAKQEAgLTEwMTUsOSArMTAxOSwxNSBAQAogCWIubmUJMWYJCS8vIE5vdCBhbiBhYm9ydCB3ZSBjYXJlIGFib3V0CiAKIAkvKiBUaGlzIGlzIGFuIGFib3J0LiBDaGVjayBmb3IgcGVybWlzc2lvbiBmYXVsdCAqLworYWx0ZXJuYXRpdmVfaWZfbm90IEFSTTY0X1dPUktBUk9VTkRfODM0MjIwCiAJYW5kCXgyLCB4MSwgI0VTUl9FTHhfRlNDX1RZUEUKIAljbXAJeDIsICNGU0NfUEVSTQogCWIubmUJMWYJCS8vIE5vdCBhIHBlcm1pc3Npb24gZmF1bHQKK2FsdGVybmF0aXZlX2Vsc2UKKwlub3AJCQkvLyBVc2UgdGhlIHBlcm1pc3Npb24gZmF1bHQgcGF0aCB0bworCW5vcAkJCS8vIGNoZWNrIGZvciBhIHZhbGlkIFMxIHRyYW5zbGF0aW9uLAorCW5vcAkJCS8vIHJlZ2FyZGxlc3Mgb2YgdGhlIEVTUiB2YWx1ZS4KK2FsdGVybmF0aXZlX2VuZGlmCiAKIAkvKgogCSAqIENoZWNrIGZvciBTdGFnZS0xIHBhZ2UgdGFibGUgd2Fsaywgd2hpY2ggaXMgZ3VhcmFudGVlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmMgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuYwppbmRleCA4NWM1NzE1Li42NDgxMTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuYworKysgYi9hcmNoL2FybTY0L2t2bS9pbmplY3RfZmF1bHQuYwpAQCAtNDgsNyArNDgsNyBAQAogCiAJLyogTm90ZTogVGhlc2Ugbm93IHBvaW50IHRvIHRoZSBiYW5rZWQgY29waWVzICovCiAJKnZjcHVfc3Bzcih2Y3B1KSA9IG5ld19zcHNyX3ZhbHVlOwotCSp2Y3B1X3JlZyh2Y3B1LCAxNCkgPSAqdmNwdV9wYyh2Y3B1KSArIHJldHVybl9vZmZzZXQ7CisJKnZjcHVfcmVnMzIodmNwdSwgMTQpID0gKnZjcHVfcGModmNwdSkgKyByZXR1cm5fb2Zmc2V0OwogCiAJLyogQnJhbmNoIHRvIGV4Y2VwdGlvbiB2ZWN0b3IgKi8KIAlpZiAoc2N0bHIgJiAoMSA8PCAxMykpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwppbmRleCA4N2E2NGU4Li5kMjY1MGU4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKQEAgLTc4LDcgKzc4LDcgQEAKICAqIFNlZSBub3RlIGF0IEFSTXY3IEFSTSBCMS4xNC40IChUTDtEUjogUy9XIG9wcyBhcmUgbm90IGVhc2lseSB2aXJ0dWFsaXplZCkuCiAgKi8KIHN0YXRpYyBib29sIGFjY2Vzc19kY3N3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCWNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKKwkJCXN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAkJCWNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpCiB7CiAJaWYgKCFwLT5pc193cml0ZSkKQEAgLTk0LDIxICs5NCwxOSBAQAogICogc3lzX3JlZ3MgYW5kIGxlYXZlIGl0IGluIGNvbXBsZXRlIGNvbnRyb2wgb2YgdGhlIGNhY2hlcy4KICAqLwogc3RhdGljIGJvb2wgYWNjZXNzX3ZtX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKKwkJCSAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCQkJICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewotCXVuc2lnbmVkIGxvbmcgdmFsOwogCWJvb2wgd2FzX2VuYWJsZWQgPSB2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpOwogCiAJQlVHX09OKCFwLT5pc193cml0ZSk7CiAKLQl2YWwgPSAqdmNwdV9yZWcodmNwdSwgcC0+UnQpOwogCWlmICghcC0+aXNfYWFyY2gzMikgewotCQl2Y3B1X3N5c19yZWcodmNwdSwgci0+cmVnKSA9IHZhbDsKKwkJdmNwdV9zeXNfcmVnKHZjcHUsIHItPnJlZykgPSBwLT5yZWd2YWw7CiAJfSBlbHNlIHsKIAkJaWYgKCFwLT5pc18zMmJpdCkKLQkJCXZjcHVfY3AxNV82NF9oaWdoKHZjcHUsIHItPnJlZykgPSB2YWwgPj4gMzI7Ci0JCXZjcHVfY3AxNV82NF9sb3codmNwdSwgci0+cmVnKSA9IHZhbCAmIDB4ZmZmZmZmZmZVTDsKKwkJCXZjcHVfY3AxNV82NF9oaWdoKHZjcHUsIHItPnJlZykgPSB1cHBlcl8zMl9iaXRzKHAtPnJlZ3ZhbCk7CisJCXZjcHVfY3AxNV82NF9sb3codmNwdSwgci0+cmVnKSA9IGxvd2VyXzMyX2JpdHMocC0+cmVndmFsKTsKIAl9CiAKIAlrdm1fdG9nZ2xlX2NhY2hlKHZjcHUsIHdhc19lbmFibGVkKTsKQEAgLTEyMiwyMiArMTIwLDE5IEBACiAgKiBmb3IgYm90aCBBQXJjaDY0IGFuZCBBQXJjaDMyIGFjY2Vzc2VzLgogICovCiBzdGF0aWMgYm9vbCBhY2Nlc3NfZ2ljX3NnaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCisJCQkgICBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQkgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewotCXU2NCB2YWw7Ci0KIAlpZiAoIXAtPmlzX3dyaXRlKQogCQlyZXR1cm4gcmVhZF9mcm9tX3dyaXRlX29ubHkodmNwdSwgcCk7CiAKLQl2YWwgPSAqdmNwdV9yZWcodmNwdSwgcC0+UnQpOwotCXZnaWNfdjNfZGlzcGF0Y2hfc2dpKHZjcHUsIHZhbCk7CisJdmdpY192M19kaXNwYXRjaF9zZ2kodmNwdSwgcC0+cmVndmFsKTsKIAogCXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCB0cmFwX3Jhel93aShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCisJCQlzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewogCWlmIChwLT5pc193cml0ZSkKQEAgLTE0NywxOSArMTQyLDE5IEBACiB9CiAKIHN0YXRpYyBib29sIHRyYXBfb3Nsc3JfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKKwkJCSAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAkJCSAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpCiB7CiAJaWYgKHAtPmlzX3dyaXRlKSB7CiAJCXJldHVybiBpZ25vcmVfd3JpdGUodmNwdSwgcCk7CiAJfSBlbHNlIHsKLQkJKnZjcHVfcmVnKHZjcHUsIHAtPlJ0KSA9ICgxIDw8IDMpOworCQlwLT5yZWd2YWwgPSAoMSA8PCAzKTsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQogCiBzdGF0aWMgYm9vbCB0cmFwX2RiZ2F1dGhzdGF0dXNfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCisJCQkJICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpCiB7CiAJaWYgKHAtPmlzX3dyaXRlKSB7CkBAIC0xNjcsNyArMTYyLDcgQEAKIAl9IGVsc2UgewogCQl1MzIgdmFsOwogCQlhc20gdm9sYXRpbGUoIm1ycyAlMCwgZGJnYXV0aHN0YXR1c19lbDEiIDogIj1yIiAodmFsKSk7Ci0JCSp2Y3B1X3JlZyh2Y3B1LCBwLT5SdCkgPSB2YWw7CisJCXAtPnJlZ3ZhbCA9IHZhbDsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQpAQCAtMjAwLDE3ICsxOTUsMTcgQEAKICAqICAgbm93IHVzZSB0aGUgZGVidWcgcmVnaXN0ZXJzLgogICovCiBzdGF0aWMgYm9vbCB0cmFwX2RlYnVnX3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKKwkJCSAgICBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQkgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcikKIHsKIAlpZiAocC0+aXNfd3JpdGUpIHsKLQkJdmNwdV9zeXNfcmVnKHZjcHUsIHItPnJlZykgPSAqdmNwdV9yZWcodmNwdSwgcC0+UnQpOworCQl2Y3B1X3N5c19yZWcodmNwdSwgci0+cmVnKSA9IHAtPnJlZ3ZhbDsKIAkJdmNwdS0+YXJjaC5kZWJ1Z19mbGFncyB8PSBLVk1fQVJNNjRfREVCVUdfRElSVFk7CiAJfSBlbHNlIHsKLQkJKnZjcHVfcmVnKHZjcHUsIHAtPlJ0KSA9IHZjcHVfc3lzX3JlZyh2Y3B1LCByLT5yZWcpOworCQlwLT5yZWd2YWwgPSB2Y3B1X3N5c19yZWcodmNwdSwgci0+cmVnKTsKIAl9CiAKLQl0cmFjZV90cmFwX3JlZyhfX2Z1bmNfXywgci0+cmVnLCBwLT5pc193cml0ZSwgKnZjcHVfcmVnKHZjcHUsIHAtPlJ0KSk7CisJdHJhY2VfdHJhcF9yZWcoX19mdW5jX18sIHItPnJlZywgcC0+aXNfd3JpdGUsIHAtPnJlZ3ZhbCk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTIyNSwxMCArMjIwLDEwIEBACiAgKiBoeXAuUyBjb2RlIHN3aXRjaGVzIGJldHdlZW4gaG9zdCBhbmQgZ3Vlc3QgdmFsdWVzIGluIGZ1dHVyZS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIHJlZ190b19kYmcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAorCQkJICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCQkJICAgICAgdTY0ICpkYmdfcmVnKQogewotCXU2NCB2YWwgPSAqdmNwdV9yZWcodmNwdSwgcC0+UnQpOworCXU2NCB2YWwgPSBwLT5yZWd2YWw7CiAKIAlpZiAocC0+aXNfMzJiaXQpIHsKIAkJdmFsICY9IDB4ZmZmZmZmZmZVTDsKQEAgLTI0MCwxOSArMjM1LDE2IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkYmdfdG9fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKKwkJCSAgICAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAkJCSAgICAgIHU2NCAqZGJnX3JlZykKIHsKLQl1NjQgdmFsID0gKmRiZ19yZWc7Ci0KKwlwLT5yZWd2YWwgPSAqZGJnX3JlZzsKIAlpZiAocC0+aXNfMzJiaXQpCi0JCXZhbCAmPSAweGZmZmZmZmZmVUw7Ci0KLQkqdmNwdV9yZWcodmNwdSwgcC0+UnQpID0gdmFsOworCQlwLT5yZWd2YWwgJj0gMHhmZmZmZmZmZlVMOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHJhcF9idnIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKKwkJCSAgICBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQkgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQpCiB7CiAJdTY0ICpkYmdfcmVnID0gJnZjcHUtPmFyY2gudmNwdV9kZWJ1Z19zdGF0ZS5kYmdfYnZyW3JkLT5yZWddOwpAQCAtMjk0LDcgKzI4Niw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0cmFwX2JjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAorCQkJICAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAkJCSAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZCkKIHsKIAl1NjQgKmRiZ19yZWcgPSAmdmNwdS0+YXJjaC52Y3B1X2RlYnVnX3N0YXRlLmRiZ19iY3JbcmQtPnJlZ107CkBAIC0zMzcsNyArMzI5LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBib29sIHRyYXBfd3ZyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCisJCQkgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCQkJICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnJkKQogewogCXU2NCAqZGJnX3JlZyA9ICZ2Y3B1LT5hcmNoLnZjcHVfZGVidWdfc3RhdGUuZGJnX3d2cltyZC0+cmVnXTsKQEAgLTM4MCw3ICszNzIsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHJhcF93Y3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKKwkJCSAgICBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQkgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcmQpCiB7CiAJdTY0ICpkYmdfcmVnID0gJnZjcHUtPmFyY2gudmNwdV9kZWJ1Z19zdGF0ZS5kYmdfd2NyW3JkLT5yZWddOwpAQCAtNjg3LDcgKzY3OSw3IEBACiB9OwogCiBzdGF0aWMgYm9vbCB0cmFwX2RiZ2lkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCisJCQlzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQljb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyKQogewogCWlmIChwLT5pc193cml0ZSkgewpAQCAtNjk3LDIzICs2ODksMjMgQEAKIAkJdTY0IHBmciA9IHJlYWRfc3lzdGVtX3JlZyhTWVNfSURfQUE2NFBGUjBfRUwxKTsKIAkJdTMyIGVsMyA9ICEhY3B1aWRfZmVhdHVyZV9leHRyYWN0X2ZpZWxkKHBmciwgSURfQUE2NFBGUjBfRUwzX1NISUZUKTsKIAotCQkqdmNwdV9yZWcodmNwdSwgcC0+UnQpID0gKCgoKGRmciA+PiBJRF9BQTY0REZSMF9XUlBTX1NISUZUKSAmIDB4ZikgPDwgMjgpIHwKLQkJCQkJICAoKChkZnIgPj4gSURfQUE2NERGUjBfQlJQU19TSElGVCkgJiAweGYpIDw8IDI0KSB8Ci0JCQkJCSAgKCgoZGZyID4+IElEX0FBNjRERlIwX0NUWF9DTVBTX1NISUZUKSAmIDB4ZikgPDwgMjApIHwKLQkJCQkJICAoNiA8PCAxNikgfCAoZWwzIDw8IDE0KSB8IChlbDMgPDwgMTIpKTsKKwkJcC0+cmVndmFsID0gKCgoKGRmciA+PiBJRF9BQTY0REZSMF9XUlBTX1NISUZUKSAmIDB4ZikgPDwgMjgpIHwKKwkJCSAgICAgKCgoZGZyID4+IElEX0FBNjRERlIwX0JSUFNfU0hJRlQpICYgMHhmKSA8PCAyNCkgfAorCQkJICAgICAoKChkZnIgPj4gSURfQUE2NERGUjBfQ1RYX0NNUFNfU0hJRlQpICYgMHhmKSA8PCAyMCkKKwkJCSAgICAgfCAoNiA8PCAxNikgfCAoZWwzIDw8IDE0KSB8IChlbDMgPDwgMTIpKTsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQogCiBzdGF0aWMgYm9vbCB0cmFwX2RlYnVnMzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKKwkJCSBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQkgY29uc3Qgc3RydWN0IHN5c19yZWdfZGVzYyAqcikKIHsKIAlpZiAocC0+aXNfd3JpdGUpIHsKLQkJdmNwdV9jcDE0KHZjcHUsIHItPnJlZykgPSAqdmNwdV9yZWcodmNwdSwgcC0+UnQpOworCQl2Y3B1X2NwMTQodmNwdSwgci0+cmVnKSA9IHAtPnJlZ3ZhbDsKIAkJdmNwdS0+YXJjaC5kZWJ1Z19mbGFncyB8PSBLVk1fQVJNNjRfREVCVUdfRElSVFk7CiAJfSBlbHNlIHsKLQkJKnZjcHVfcmVnKHZjcHUsIHAtPlJ0KSA9IHZjcHVfY3AxNCh2Y3B1LCByLT5yZWcpOworCQlwLT5yZWd2YWwgPSB2Y3B1X2NwMTQodmNwdSwgci0+cmVnKTsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTczMSw3ICs3MjMsNyBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0cmFwX3h2cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAorCQkJICAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAkJCSAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICpyZCkKIHsKIAl1NjQgKmRiZ19yZWcgPSAmdmNwdS0+YXJjaC52Y3B1X2RlYnVnX3N0YXRlLmRiZ19idnJbcmQtPnJlZ107CkBAIC03NDAsMTIgKzczMiwxMiBAQAogCQl1NjQgdmFsID0gKmRiZ19yZWc7CiAKIAkJdmFsICY9IDB4ZmZmZmZmZmZVTDsKLQkJdmFsIHw9ICp2Y3B1X3JlZyh2Y3B1LCBwLT5SdCkgPDwgMzI7CisJCXZhbCB8PSBwLT5yZWd2YWwgPDwgMzI7CiAJCSpkYmdfcmVnID0gdmFsOwogCiAJCXZjcHUtPmFyY2guZGVidWdfZmxhZ3MgfD0gS1ZNX0FSTTY0X0RFQlVHX0RJUlRZOwogCX0gZWxzZSB7Ci0JCSp2Y3B1X3JlZyh2Y3B1LCBwLT5SdCkgPSAqZGJnX3JlZyA+PiAzMjsKKwkJcC0+cmVndmFsID0gKmRiZ19yZWcgPj4gMzI7CiAJfQogCiAJdHJhY2VfdHJhcF9yZWcoX19mdW5jX18sIHJkLT5yZWcsIHAtPmlzX3dyaXRlLCAqZGJnX3JlZyk7CkBAIC05OTEsNyArOTgzLDcgQEAKICAqIFJldHVybiAwIGlmIHRoZSBhY2Nlc3MgaGFzIGJlZW4gaGFuZGxlZCwgYW5kIC0xIGlmIG5vdC4KICAqLwogc3RhdGljIGludCBlbXVsYXRlX2NwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJICAgICAgY29uc3Qgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwYXJhbXMsCisJCSAgICAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcGFyYW1zLAogCQkgICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICp0YWJsZSwKIAkJICAgICAgc2l6ZV90IG51bSkKIHsKQEAgLTEwNjIsMTIgKzEwNTQsMTIgQEAKIHsKIAlzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgcGFyYW1zOwogCXUzMiBoc3IgPSBrdm1fdmNwdV9nZXRfaHNyKHZjcHUpOworCWludCBSdCA9IChoc3IgPj4gNSkgJiAweGY7CiAJaW50IFJ0MiA9IChoc3IgPj4gMTApICYgMHhmOwogCiAJcGFyYW1zLmlzX2FhcmNoMzIgPSB0cnVlOwogCXBhcmFtcy5pc18zMmJpdCA9IGZhbHNlOwogCXBhcmFtcy5DUm0gPSAoaHNyID4+IDEpICYgMHhmOwotCXBhcmFtcy5SdCA9IChoc3IgPj4gNSkgJiAweGY7CiAJcGFyYW1zLmlzX3dyaXRlID0gKChoc3IgJiAxKSA9PSAwKTsKIAogCXBhcmFtcy5PcDAgPSAwOwpAQCAtMTA3NiwxNSArMTA2OCwxMiBAQAogCXBhcmFtcy5DUm4gPSAwOwogCiAJLyoKLQkgKiBNYXNzaXZlIGhhY2sgaGVyZS4gU3RvcmUgUnQyIGluIHRoZSB0b3AgMzJiaXRzIHNvIHdlIG9ubHkKLQkgKiBoYXZlIG9uZSByZWdpc3RlciB0byBkZWFsIHdpdGguIEFzIHdlIHVzZSB0aGUgc2FtZSB0cmFwCisJICogTWFrZSBhIDY0LWJpdCB2YWx1ZSBvdXQgb2YgUnQgYW5kIFJ0Mi4gQXMgd2UgdXNlIHRoZSBzYW1lIHRyYXAKIAkgKiBiYWNrZW5kcyBiZXR3ZWVuIEFBcmNoMzIgYW5kIEFBcmNoNjQsIHdlIGdldCBhd2F5IHdpdGggaXQuCiAJICovCiAJaWYgKHBhcmFtcy5pc193cml0ZSkgewotCQl1NjQgdmFsID0gKnZjcHVfcmVnKHZjcHUsIHBhcmFtcy5SdCk7Ci0JCXZhbCAmPSAweGZmZmZmZmZmOwotCQl2YWwgfD0gKnZjcHVfcmVnKHZjcHUsIFJ0MikgPDwgMzI7Ci0JCSp2Y3B1X3JlZyh2Y3B1LCBwYXJhbXMuUnQpID0gdmFsOworCQlwYXJhbXMucmVndmFsID0gdmNwdV9nZXRfcmVnKHZjcHUsIFJ0KSAmIDB4ZmZmZmZmZmY7CisJCXBhcmFtcy5yZWd2YWwgfD0gdmNwdV9nZXRfcmVnKHZjcHUsIFJ0MikgPDwgMzI7CiAJfQogCiAJaWYgKCFlbXVsYXRlX2NwKHZjcHUsICZwYXJhbXMsIHRhcmdldF9zcGVjaWZpYywgbnJfc3BlY2lmaWMpKQpAQCAtMTA5NSwxMSArMTA4NCwxMCBAQAogCXVuaGFuZGxlZF9jcF9hY2Nlc3ModmNwdSwgJnBhcmFtcyk7CiAKIG91dDoKLQkvKiBEbyB0aGUgb3Bwb3NpdGUgaGFjayBmb3IgdGhlIHJlYWQgc2lkZSAqLworCS8qIFNwbGl0IHVwIHRoZSB2YWx1ZSBiZXR3ZWVuIHJlZ2lzdGVycyBmb3IgdGhlIHJlYWQgc2lkZSAqLwogCWlmICghcGFyYW1zLmlzX3dyaXRlKSB7Ci0JCXU2NCB2YWwgPSAqdmNwdV9yZWcodmNwdSwgcGFyYW1zLlJ0KTsKLQkJdmFsID4+PSAzMjsKLQkJKnZjcHVfcmVnKHZjcHUsIFJ0MikgPSB2YWw7CisJCXZjcHVfc2V0X3JlZyh2Y3B1LCBSdCwgbG93ZXJfMzJfYml0cyhwYXJhbXMucmVndmFsKSk7CisJCXZjcHVfc2V0X3JlZyh2Y3B1LCBSdDIsIHVwcGVyXzMyX2JpdHMocGFyYW1zLnJlZ3ZhbCkpOwogCX0KIAogCXJldHVybiAxOwpAQCAtMTExOCwyMSArMTEwNiwyNCBAQAogewogCXN0cnVjdCBzeXNfcmVnX3BhcmFtcyBwYXJhbXM7CiAJdTMyIGhzciA9IGt2bV92Y3B1X2dldF9oc3IodmNwdSk7CisJaW50IFJ0ICA9IChoc3IgPj4gNSkgJiAweGY7CiAKIAlwYXJhbXMuaXNfYWFyY2gzMiA9IHRydWU7CiAJcGFyYW1zLmlzXzMyYml0ID0gdHJ1ZTsKIAlwYXJhbXMuQ1JtID0gKGhzciA+PiAxKSAmIDB4ZjsKLQlwYXJhbXMuUnQgID0gKGhzciA+PiA1KSAmIDB4ZjsKKwlwYXJhbXMucmVndmFsID0gdmNwdV9nZXRfcmVnKHZjcHUsIFJ0KTsKIAlwYXJhbXMuaXNfd3JpdGUgPSAoKGhzciAmIDEpID09IDApOwogCXBhcmFtcy5DUm4gPSAoaHNyID4+IDEwKSAmIDB4ZjsKIAlwYXJhbXMuT3AwID0gMDsKIAlwYXJhbXMuT3AxID0gKGhzciA+PiAxNCkgJiAweDc7CiAJcGFyYW1zLk9wMiA9IChoc3IgPj4gMTcpICYgMHg3OwogCi0JaWYgKCFlbXVsYXRlX2NwKHZjcHUsICZwYXJhbXMsIHRhcmdldF9zcGVjaWZpYywgbnJfc3BlY2lmaWMpKQorCWlmICghZW11bGF0ZV9jcCh2Y3B1LCAmcGFyYW1zLCB0YXJnZXRfc3BlY2lmaWMsIG5yX3NwZWNpZmljKSB8fAorCSAgICAhZW11bGF0ZV9jcCh2Y3B1LCAmcGFyYW1zLCBnbG9iYWwsIG5yX2dsb2JhbCkpIHsKKwkJaWYgKCFwYXJhbXMuaXNfd3JpdGUpCisJCQl2Y3B1X3NldF9yZWcodmNwdSwgUnQsIHBhcmFtcy5yZWd2YWwpOwogCQlyZXR1cm4gMTsKLQlpZiAoIWVtdWxhdGVfY3AodmNwdSwgJnBhcmFtcywgZ2xvYmFsLCBucl9nbG9iYWwpKQotCQlyZXR1cm4gMTsKKwl9CiAKIAl1bmhhbmRsZWRfY3BfYWNjZXNzKHZjcHUsICZwYXJhbXMpOwogCXJldHVybiAxOwpAQCAtMTE3NSw3ICsxMTY2LDcgQEAKIH0KIAogc3RhdGljIGludCBlbXVsYXRlX3N5c19yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgY29uc3Qgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwYXJhbXMpCisJCQkgICBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnBhcmFtcykKIHsKIAlzaXplX3QgbnVtOwogCWNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnRhYmxlLCAqcjsKQEAgLTEyMzAsNiArMTIyMSw4IEBACiB7CiAJc3RydWN0IHN5c19yZWdfcGFyYW1zIHBhcmFtczsKIAl1bnNpZ25lZCBsb25nIGVzciA9IGt2bV92Y3B1X2dldF9oc3IodmNwdSk7CisJaW50IFJ0ID0gKGVzciA+PiA1KSAmIDB4MWY7CisJaW50IHJldDsKIAogCXRyYWNlX2t2bV9oYW5kbGVfc3lzX3JlZyhlc3IpOwogCkBAIC0xMjQwLDEwICsxMjMzLDE0IEBACiAJcGFyYW1zLkNSbiA9IChlc3IgPj4gMTApICYgMHhmOwogCXBhcmFtcy5DUm0gPSAoZXNyID4+IDEpICYgMHhmOwogCXBhcmFtcy5PcDIgPSAoZXNyID4+IDE3KSAmIDB4NzsKLQlwYXJhbXMuUnQgPSAoZXNyID4+IDUpICYgMHgxZjsKKwlwYXJhbXMucmVndmFsID0gdmNwdV9nZXRfcmVnKHZjcHUsIFJ0KTsKIAlwYXJhbXMuaXNfd3JpdGUgPSAhKGVzciAmIDEpOwogCi0JcmV0dXJuIGVtdWxhdGVfc3lzX3JlZyh2Y3B1LCAmcGFyYW1zKTsKKwlyZXQgPSBlbXVsYXRlX3N5c19yZWcodmNwdSwgJnBhcmFtcyk7CisKKwlpZiAoIXBhcmFtcy5pc193cml0ZSkKKwkJdmNwdV9zZXRfcmVnKHZjcHUsIFJ0LCBwYXJhbXMucmVndmFsKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5oIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuaAppbmRleCBlYWEzMjRlLi5kYmJiMDFjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5oCisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAl1OAlDUm47CiAJdTgJQ1JtOwogCXU4CU9wMjsKLQl1OAlSdDsKKwl1NjQJcmVndmFsOwogCWJvb2wJaXNfd3JpdGU7CiAJYm9vbAlpc19hYXJjaDMyOwogCWJvb2wJaXNfMzJiaXQ7CS8qIE9ubHkgdmFsaWQgaWYgaXNfYWFyY2gzMiBpcyB0cnVlICovCkBAIC00NCw3ICs0NCw3IEBACiAKIAkvKiBUcmFwcGVkIGFjY2VzcyBmcm9tIGd1ZXN0LCBpZiBub24tTlVMTC4gKi8KIAlib29sICgqYWNjZXNzKShzdHJ1Y3Qga3ZtX3ZjcHUgKiwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqLAorCQkgICAgICAgc3RydWN0IHN5c19yZWdfcGFyYW1zICosCiAJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19kZXNjICopOwogCiAJLyogSW5pdGlhbGl6YXRpb24gZm9yIHZjcHUuICovCkBAIC03Nyw5ICs3Nyw5IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCByZWFkX3plcm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnApCisJCQkgICAgIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCkKIHsKLQkqdmNwdV9yZWcodmNwdSwgcC0+UnQpID0gMDsKKwlwLT5yZWd2YWwgPSAwOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVnc19nZW5lcmljX3Y4LmMgYi9hcmNoL2FybTY0L2t2bS9zeXNfcmVnc19nZW5lcmljX3Y4LmMKaW5kZXggMWU0NTc2OC4uZWQ5MDU3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3NfZ2VuZXJpY192OC5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzX2dlbmVyaWNfdjguYwpAQCAtMzEsMTMgKzMxLDEzIEBACiAjaW5jbHVkZSAic3lzX3JlZ3MuaCIKIAogc3RhdGljIGJvb2wgYWNjZXNzX2FjdGxyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCisJCQkgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAogCQkJIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpCiB7CiAJaWYgKHAtPmlzX3dyaXRlKQogCQlyZXR1cm4gaWdub3JlX3dyaXRlKHZjcHUsIHApOwogCi0JKnZjcHVfcmVnKHZjcHUsIHAtPlJ0KSA9IHZjcHVfc3lzX3JlZyh2Y3B1LCBBQ1RMUl9FTDEpOworCXAtPnJlZ3ZhbCA9IHZjcHVfc3lzX3JlZyh2Y3B1LCBBQ1RMUl9FTDEpOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2NvbnRleHQuYyBiL2FyY2gvYXJtNjQvbW0vY29udGV4dC5jCmluZGV4IGY2MzZhMjYuLmU4N2Y1M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vY29udGV4dC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vY29udGV4dC5jCkBAIC03NiwxMyArNzYsMjggQEAKIAkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiB9CiAKLXN0YXRpYyBpbnQgaXNfcmVzZXJ2ZWRfYXNpZCh1NjQgYXNpZCkKK3N0YXRpYyBib29sIGNoZWNrX3VwZGF0ZV9yZXNlcnZlZF9hc2lkKHU2NCBhc2lkLCB1NjQgbmV3YXNpZCkKIHsKIAlpbnQgY3B1OwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCWlmIChwZXJfY3B1KHJlc2VydmVkX2FzaWRzLCBjcHUpID09IGFzaWQpCi0JCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKKwlib29sIGhpdCA9IGZhbHNlOworCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgdGhlIHNldCBvZiByZXNlcnZlZCBBU0lEcyBsb29raW5nIGZvciBhIG1hdGNoLgorCSAqIElmIHdlIGZpbmQgb25lLCB0aGVuIHdlIGNhbiB1cGRhdGUgb3VyIG1tIHRvIHVzZSBuZXdhc2lkCisJICogKGkuZS4gdGhlIHNhbWUgQVNJRCBpbiB0aGUgY3VycmVudCBnZW5lcmF0aW9uKSBidXQgd2UgY2FuJ3QKKwkgKiBleGl0IHRoZSBsb29wIGVhcmx5LCBzaW5jZSB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFsbCBjb3BpZXMKKwkgKiBvZiB0aGUgb2xkIEFTSUQgYXJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgbW0uIEZhaWx1cmUgdG8gZG8KKwkgKiBzbyBjb3VsZCByZXN1bHQgaW4gdXMgbWlzc2luZyB0aGUgcmVzZXJ2ZWQgQVNJRCBpbiBhIGZ1dHVyZQorCSAqIGdlbmVyYXRpb24uCisJICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlpZiAocGVyX2NwdShyZXNlcnZlZF9hc2lkcywgY3B1KSA9PSBhc2lkKSB7CisJCQloaXQgPSB0cnVlOworCQkJcGVyX2NwdShyZXNlcnZlZF9hc2lkcywgY3B1KSA9IG5ld2FzaWQ7CisJCX0KKwl9CisKKwlyZXR1cm4gaGl0OwogfQogCiBzdGF0aWMgdTY0IG5ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgY3B1KQpAQCAtOTIsMTIgKzEwNywxNCBAQAogCXU2NCBnZW5lcmF0aW9uID0gYXRvbWljNjRfcmVhZCgmYXNpZF9nZW5lcmF0aW9uKTsKIAogCWlmIChhc2lkICE9IDApIHsKKwkJdTY0IG5ld2FzaWQgPSBnZW5lcmF0aW9uIHwgKGFzaWQgJiB+QVNJRF9NQVNLKTsKKwogCQkvKgogCQkgKiBJZiBvdXIgY3VycmVudCBBU0lEIHdhcyBhY3RpdmUgZHVyaW5nIGEgcm9sbG92ZXIsIHdlCiAJCSAqIGNhbiBjb250aW51ZSB0byB1c2UgaXQgYW5kIHRoaXMgd2FzIGp1c3QgYSBmYWxzZSBhbGFybS4KIAkJICovCi0JCWlmIChpc19yZXNlcnZlZF9hc2lkKGFzaWQpKQotCQkJcmV0dXJuIGdlbmVyYXRpb24gfCAoYXNpZCAmIH5BU0lEX01BU0spOworCQlpZiAoY2hlY2tfdXBkYXRlX3Jlc2VydmVkX2FzaWQoYXNpZCwgbmV3YXNpZCkpCisJCQlyZXR1cm4gbmV3YXNpZDsKIAogCQkvKgogCQkgKiBXZSBoYWQgYSB2YWxpZCBBU0lEIGluIGEgcHJldmlvdXMgbGlmZSwgc28gdHJ5IHRvIHJlLXVzZQpAQCAtMTA1LDcgKzEyMiw3IEBACiAJCSAqLwogCQlhc2lkICY9IH5BU0lEX01BU0s7CiAJCWlmICghX190ZXN0X2FuZF9zZXRfYml0KGFzaWQsIGFzaWRfbWFwKSkKLQkJCWdvdG8gYnVtcF9nZW47CisJCQlyZXR1cm4gbmV3YXNpZDsKIAl9CiAKIAkvKgpAQCAtMTI5LDEwICsxNDYsNyBAQAogc2V0X2FzaWQ6CiAJX19zZXRfYml0KGFzaWQsIGFzaWRfbWFwKTsKIAljdXJfaWR4ID0gYXNpZDsKLQotYnVtcF9nZW46Ci0JYXNpZCB8PSBnZW5lcmF0aW9uOwotCXJldHVybiBhc2lkOworCXJldHVybiBhc2lkIHwgZ2VuZXJhdGlvbjsKIH0KIAogdm9pZCBjaGVja19hbmRfc3dpdGNoX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBjcHUpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybTY0L21tL2RtYS1tYXBwaW5nLmMKaW5kZXggMTMxYTE5OS4uNzk2M2FhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYXJtNjQvbW0vZG1hLW1hcHBpbmcuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmFsbG9jLmg+CkBAIC0yOCw5ICsyOSw2IEBACiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCi1zdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7Ci1FWFBPUlRfU1lNQk9MKGRtYV9vcHMpOwotCiBzdGF0aWMgcGdwcm90X3QgX19nZXRfZG1hX3BncHJvdChzdHJ1Y3QgZG1hX2F0dHJzICphdHRycywgcGdwcm90X3QgcHJvdCwKIAkJCQkgYm9vbCBjb2hlcmVudCkKIHsKQEAgLTUxNSwxMyArNTEzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXJtNjRfZG1hX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OwotCi0JZG1hX29wcyA9ICZzd2lvdGxiX2RtYV9vcHM7Ci0KLQlyZXQgPSBhdG9taWNfcG9vbF9pbml0KCk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBhdG9taWNfcG9vbF9pbml0KCk7CiB9CiBhcmNoX2luaXRjYWxsKGFybTY0X2RtYV9pbml0KTsKIApAQCAtNTUyLDEwICs1NDQsMTQgQEAKIHsKIAlib29sIGNvaGVyZW50ID0gaXNfZGV2aWNlX2RtYV9jb2hlcmVudChkZXYpOwogCWludCBpb3Byb3QgPSBkbWFfZGlyZWN0aW9uX3RvX3Byb3QoRE1BX0JJRElSRUNUSU9OQUwsIGNvaGVyZW50KTsKKwlzaXplX3QgaW9zaXplID0gc2l6ZTsKIAl2b2lkICphZGRyOwogCiAJaWYgKFdBUk4oIWRldiwgImNhbm5vdCBjcmVhdGUgSU9NTVUgbWFwcGluZyBmb3IgdW5rbm93biBkZXZpY2VcbiIpKQogCQlyZXR1cm4gTlVMTDsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCiAJLyoKIAkgKiBTb21lIGRyaXZlcnMgcmVseSBvbiB0aGlzLCBhbmQgd2UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGUKIAkgKiBwb3NzaWJpbGl0eSBvZiBzdGFsZSBrZXJuZWwgZGF0YSBiZWluZyByZWFkIGJ5IGRldmljZXMgYW55d2F5LgpAQCAtNTY2LDcgKzU2Miw3IEBACiAJCXN0cnVjdCBwYWdlICoqcGFnZXM7CiAJCXBncHJvdF90IHByb3QgPSBfX2dldF9kbWFfcGdwcm90KGF0dHJzLCBQQUdFX0tFUk5FTCwgY29oZXJlbnQpOwogCi0JCXBhZ2VzID0gaW9tbXVfZG1hX2FsbG9jKGRldiwgc2l6ZSwgZ2ZwLCBpb3Byb3QsCWhhbmRsZSwKKwkJcGFnZXMgPSBpb21tdV9kbWFfYWxsb2MoZGV2LCBpb3NpemUsIGdmcCwgaW9wcm90LCBoYW5kbGUsCiAJCQkJCWZsdXNoX3BhZ2UpOwogCQlpZiAoIXBhZ2VzKQogCQkJcmV0dXJuIE5VTEw7CkBAIC01NzQsNyArNTcwLDcgQEAKIAkJYWRkciA9IGRtYV9jb21tb25fcGFnZXNfcmVtYXAocGFnZXMsIHNpemUsIFZNX1VTRVJNQVAsIHByb3QsCiAJCQkJCSAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJCWlmICghYWRkcikKLQkJCWlvbW11X2RtYV9mcmVlKGRldiwgcGFnZXMsIHNpemUsIGhhbmRsZSk7CisJCQlpb21tdV9kbWFfZnJlZShkZXYsIHBhZ2VzLCBpb3NpemUsIGhhbmRsZSk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCS8qCkBAIC01OTEsNyArNTg3LDcgQEAKIAkJaWYgKCFhZGRyKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJKmhhbmRsZSA9IGlvbW11X2RtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIDAsIHNpemUsIGlvcHJvdCk7CisJCSpoYW5kbGUgPSBpb21tdV9kbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCAwLCBpb3NpemUsIGlvcHJvdCk7CiAJCWlmIChpb21tdV9kbWFfbWFwcGluZ19lcnJvcihkZXYsICpoYW5kbGUpKSB7CiAJCQlpZiAoY29oZXJlbnQpCiAJCQkJX19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7CkBAIC02MDYsNiArNjAyLDkgQEAKIHN0YXRpYyB2b2lkIF9faW9tbXVfZnJlZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKIAkJCSAgICAgICBkbWFfYWRkcl90IGhhbmRsZSwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CisJc2l6ZV90IGlvc2l6ZSA9IHNpemU7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKIAkvKgogCSAqIEBjcHVfYWRkciB3aWxsIGJlIG9uZSBvZiAzIHRoaW5ncyBkZXBlbmRpbmcgb24gaG93IGl0IHdhcyBhbGxvY2F0ZWQ6CiAJICogLSBBIHJlbWFwcGVkIGFycmF5IG9mIHBhZ2VzIGZyb20gaW9tbXVfZG1hX2FsbG9jKCksIGZvciBhbGwKQEAgLTYxNywxNyArNjE2LDE3IEBACiAJICogSGVuY2UgaG93IGRvZGd5IHRoZSBiZWxvdyBsb2dpYyBsb29rcy4uLgogCSAqLwogCWlmIChfX2luX2F0b21pY19wb29sKGNwdV9hZGRyLCBzaXplKSkgewotCQlpb21tdV9kbWFfdW5tYXBfcGFnZShkZXYsIGhhbmRsZSwgc2l6ZSwgMCwgTlVMTCk7CisJCWlvbW11X2RtYV91bm1hcF9wYWdlKGRldiwgaGFuZGxlLCBpb3NpemUsIDAsIE5VTEwpOwogCQlfX2ZyZWVfZnJvbV9wb29sKGNwdV9hZGRyLCBzaXplKTsKIAl9IGVsc2UgaWYgKGlzX3ZtYWxsb2NfYWRkcihjcHVfYWRkcikpewogCQlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhID0gZmluZF92bV9hcmVhKGNwdV9hZGRyKTsKIAogCQlpZiAoV0FSTl9PTighYXJlYSB8fCAhYXJlYS0+cGFnZXMpKQogCQkJcmV0dXJuOwotCQlpb21tdV9kbWFfZnJlZShkZXYsIGFyZWEtPnBhZ2VzLCBzaXplLCAmaGFuZGxlKTsKKwkJaW9tbXVfZG1hX2ZyZWUoZGV2LCBhcmVhLT5wYWdlcywgaW9zaXplLCAmaGFuZGxlKTsKIAkJZG1hX2NvbW1vbl9mcmVlX3JlbWFwKGNwdV9hZGRyLCBzaXplLCBWTV9VU0VSTUFQKTsKIAl9IGVsc2UgewotCQlpb21tdV9kbWFfdW5tYXBfcGFnZShkZXYsIGhhbmRsZSwgc2l6ZSwgMCwgTlVMTCk7CisJCWlvbW11X2RtYV91bm1hcF9wYWdlKGRldiwgaGFuZGxlLCBpb3NpemUsIDAsIE5VTEwpOwogCQlfX2ZyZWVfcGFnZXModmlydF90b19wYWdlKGNwdV9hZGRyKSwgZ2V0X29yZGVyKHNpemUpKTsKIAl9CiB9CkBAIC05ODQsOCArOTgzLDggQEAKIHZvaWQgYXJjaF9zZXR1cF9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9iYXNlLCB1NjQgc2l6ZSwKIAkJCXN0cnVjdCBpb21tdV9vcHMgKmlvbW11LCBib29sIGNvaGVyZW50KQogewotCWlmICghYWNwaV9kaXNhYmxlZCAmJiAhZGV2LT5hcmNoZGF0YS5kbWFfb3BzKQotCQlkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPSBkbWFfb3BzOworCWlmICghZGV2LT5hcmNoZGF0YS5kbWFfb3BzKQorCQlkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPSAmc3dpb3RsYl9kbWFfb3BzOwogCiAJZGV2LT5hcmNoZGF0YS5kbWFfY29oZXJlbnQgPSBjb2hlcmVudDsKIAlfX2lvbW11X3NldHVwX2RtYV9vcHMoZGV2LCBkbWFfYmFzZSwgc2l6ZSwgaW9tbXUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jIGIvYXJjaC9hcm02NC9tbS9mYXVsdC5jCmluZGV4IDE5MjExYzQuLjkyZGRhYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmMKQEAgLTM5MywxNiArMzkzLDE2IEBACiAJeyBkb190cmFuc2xhdGlvbl9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJsZXZlbCAxIHRyYW5zbGF0aW9uIGZhdWx0Igl9LAogCXsgZG9fdHJhbnNsYXRpb25fZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkibGV2ZWwgMiB0cmFuc2xhdGlvbiBmYXVsdCIJfSwKIAl7IGRvX3BhZ2VfZmF1bHQsCVNJR1NFR1YsIFNFR1ZfTUFQRVJSLAkibGV2ZWwgMyB0cmFuc2xhdGlvbiBmYXVsdCIJfSwKLQl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkicmVzZXJ2ZWQgYWNjZXNzIGZsYWcgZmF1bHQiCX0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gOCIJCQl9LAogCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJsZXZlbCAxIGFjY2VzcyBmbGFnIGZhdWx0Igl9LAogCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJsZXZlbCAyIGFjY2VzcyBmbGFnIGZhdWx0Igl9LAogCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJsZXZlbCAzIGFjY2VzcyBmbGFnIGZhdWx0Igl9LAotCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJyZXNlcnZlZCBwZXJtaXNzaW9uIGZhdWx0Igl9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDEyIgkJCX0sCiAJeyBkb19wYWdlX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJImxldmVsIDEgcGVybWlzc2lvbiBmYXVsdCIJfSwKIAl7IGRvX3BhZ2VfZmF1bHQsCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkibGV2ZWwgMiBwZXJtaXNzaW9uIGZhdWx0Igl9LAogCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJsZXZlbCAzIHBlcm1pc3Npb24gZmF1bHQiCX0sCiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0Igl9LAotCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJhc3luY2hyb25vdXMgZXh0ZXJuYWwgYWJvcnQiCX0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTciCQkJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxOCIJCQl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDE5IgkJCX0sCiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInN5bmNocm9ub3VzIGFib3J0ICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKSIgfSwKQEAgLTQxMCwxNiArNDEwLDE2IEBACiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInN5bmNocm9ub3VzIGFib3J0ICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKSIgfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkic3luY2hyb25vdXMgYWJvcnQgKHRyYW5zbGF0aW9uIHRhYmxlIHdhbGspIiB9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJzeW5jaHJvbm91cyBwYXJpdHkgZXJyb3IiCX0sCi0JeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJImFzeW5jaHJvbm91cyBwYXJpdHkgZXJyb3IiCX0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjUiCQkJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyNiIJCQl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI3IgkJCX0sCi0JeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsayIgfSwKLQl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkic3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrIiB9LAotCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJzeW5jaHJvbm91cyBwYXJpdHkgZXJyb3IgKHRyYW5zbGF0aW9uIHRhYmxlIHdhbGsiIH0sCi0JeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInN5bmNocm9ub3VzIHBhcml0eSBlcnJvciAodHJhbnNsYXRpb24gdGFibGUgd2FsayIgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkic3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKSIgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkic3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKSIgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkic3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKSIgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkic3luY2hyb25vdXMgcGFyaXR5IGVycm9yICh0cmFuc2xhdGlvbiB0YWJsZSB3YWxrKSIgfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAzMiIJCQl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgQlVTX0FEUkFMTiwJImFsaWdubWVudCBmYXVsdCIJCX0sCi0JeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJImRlYnVnIGV2ZW50IgkJCX0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMzQiCQkJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAzNSIJCQl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDM2IgkJCX0sCiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMzciCQkJfSwKQEAgLTQzMywyMSArNDMzLDIxIEBACiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gNDUiCQkJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biA0NiIJCQl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDQ3IgkJCX0sCi0JeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gNDgiCQkJfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkiVExCIGNvbmZsaWN0IGFib3J0IgkJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biA0OSIJCQl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDUwIgkJCX0sCiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gNTEiCQkJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkiaW1wbGVtZW50YXRpb24gZmF1bHQgKGxvY2tkb3duIGFib3J0KSIgfSwKLQl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biA1MyIJCQl9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJpbXBsZW1lbnRhdGlvbiBmYXVsdCAodW5zdXBwb3J0ZWQgZXhjbHVzaXZlKSIgfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biA1NCIJCQl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDU1IgkJCX0sCiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gNTYiCQkJfSwKIAl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biA1NyIJCQl9LAotCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJpbXBsZW1lbnRhdGlvbiBmYXVsdCAoY29wcm9jZXNzb3IgYWJvcnQpIiB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDU4IiAJCQl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDU5IgkJCX0sCiAJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gNjAiCQkJfSwKLQl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biA2MSIJCQl9LAotCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDYyIgkJCX0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInNlY3Rpb24gZG9tYWluIGZhdWx0IgkJfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkicGFnZSBkb21haW4gZmF1bHQiCQl9LAogCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDYzIgkJCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuYwppbmRleCBlM2Y1NjNjLi44NzNlMzYzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTY0LDggKzY0LDEyIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCAqZWFybHlfYWxsb2ModW5zaWduZWQgbG9uZyBzeikKIHsKLQl2b2lkICpwdHIgPSBfX3ZhKG1lbWJsb2NrX2FsbG9jKHN6LCBzeikpOwotCUJVR19PTighcHRyKTsKKwlwaHlzX2FkZHJfdCBwaHlzOworCXZvaWQgKnB0cjsKKworCXBoeXMgPSBtZW1ibG9ja19hbGxvYyhzeiwgc3opOworCUJVR19PTighcGh5cyk7CisJcHRyID0gX192YShwaHlzKTsKIAltZW1zZXQocHRyLCAwLCBzeik7CiAJcmV0dXJuIHB0cjsKIH0KQEAgLTgxLDU1ICs4NSwxOSBAQAogCWRvIHsKIAkJLyoKIAkJICogTmVlZCB0byBoYXZlIHRoZSBsZWFzdCByZXN0cmljdGl2ZSBwZXJtaXNzaW9ucyBhdmFpbGFibGUKLQkJICogcGVybWlzc2lvbnMgd2lsbCBiZSBmaXhlZCB1cCBsYXRlci4gRGVmYXVsdCB0aGUgbmV3IHBhZ2UKLQkJICogcmFuZ2UgYXMgY29udGlndW91cyBwdGVzLgorCQkgKiBwZXJtaXNzaW9ucyB3aWxsIGJlIGZpeGVkIHVwIGxhdGVyCiAJCSAqLwotCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwZm4sIFBBR0VfS0VSTkVMX0VYRUNfQ09OVCkpOworCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwZm4sIFBBR0VfS0VSTkVMX0VYRUMpKTsKIAkJcGZuKys7CiAJfSB3aGlsZSAocHRlKyssIGkrKywgaSA8IFBUUlNfUEVSX1BURSk7CiB9CiAKLS8qCi0gKiBHaXZlbiBhIFBURSB3aXRoIHRoZSBDT05UIGJpdCBzZXQsIGRldGVybWluZSB3aGVyZSB0aGUgQ09OVCByYW5nZQotICogc3RhcnRzLCBhbmQgY2xlYXIgdGhlIGVudGlyZSByYW5nZSBvZiBQVEUgQ09OVCBiaXRzLgotICovCi1zdGF0aWMgdm9pZCBjbGVhcl9jb250X3B0ZV9yYW5nZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaW50IGk7Ci0KLQlwdGUgLT0gQ09OVF9SQU5HRV9PRkZTRVQoYWRkcik7Ci0JZm9yIChpID0gMDsgaSA8IENPTlRfUFRFUzsgaSsrKSB7Ci0JCXNldF9wdGUocHRlLCBwdGVfbWtub25jb250KCpwdGUpKTsKLQkJcHRlKys7Ci0JfQotCWZsdXNoX3RsYl9hbGwoKTsKLX0KLQotLyoKLSAqIEdpdmVuIGEgcmFuZ2Ugb2YgUFRFcyBzZXQgdGhlIHBmbiBhbmQgcHJvdmlkZWQgcGFnZSBwcm90ZWN0aW9uIGZsYWdzCi0gKi8KLXN0YXRpYyB2b2lkIF9fcG9wdWxhdGVfaW5pdF9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCXVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzLAotCQkJCXBncHJvdF90IHByb3QpCi17Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSBfX3BoeXNfdG9fcGZuKHBoeXMpOwotCi0JZG8gewotCQkvKiBjbGVhciBhbGwgdGhlIGJpdHMgZXhjZXB0IHRoZSBwZm4sIHRoZW4gYXBwbHkgdGhlIHByb3QgKi8KLQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7Ci0JCXB0ZSsrOwotCQlwZm4rKzsKLQkJYWRkciArPSBQQUdFX1NJWkU7Ci0JfSB3aGlsZSAoYWRkciAhPSBlbmQpOwotfQotCiBzdGF0aWMgdm9pZCBhbGxvY19pbml0X3B0ZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5cywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHBmbiwKIAkJCQkgIHBncHJvdF90IHByb3QsCiAJCQkJICB2b2lkICooKmFsbG9jKSh1bnNpZ25lZCBsb25nIHNpemUpKQogewogCXB0ZV90ICpwdGU7Ci0JdW5zaWduZWQgbG9uZyBuZXh0OwogCiAJaWYgKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9zZWN0KCpwbWQpKSB7CiAJCXB0ZSA9IGFsbG9jKFBUUlNfUEVSX1BURSAqIHNpemVvZihwdGVfdCkpOwpAQCAtMTQyLDI3ICsxMTAsOSBAQAogCiAJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyKTsKIAlkbyB7Ci0JCW5leHQgPSBtaW4oZW5kLCAoYWRkciArIENPTlRfU0laRSkgJiBDT05UX01BU0spOwotCQlpZiAoKChhZGRyIHwgbmV4dCB8IHBoeXMpICYgfkNPTlRfTUFTSykgPT0gMCkgewotCQkJLyogYSBibG9jayBvZiBDT05UX1BURVMgICovCi0JCQlfX3BvcHVsYXRlX2luaXRfcHRlKHB0ZSwgYWRkciwgbmV4dCwgcGh5cywKLQkJCQkJICAgIF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCkpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIElmIHRoZSByYW5nZSBiZWluZyBzcGxpdCBpcyBhbHJlYWR5IGluc2lkZSBvZiBhCi0JCQkgKiBjb250aWd1b3VzIHJhbmdlIGJ1dCB0aGlzIFBURSBpc24ndCBnb2luZyB0byBiZQotCQkJICogY29udGlndW91cywgdGhlbiB3ZSB3YW50IHRvIHVubWFyayB0aGUgYWRqYWNlbnQKLQkJCSAqIHJhbmdlcywgdGhlbiB1cGRhdGUgdGhlIHBvcnRpb24gb2YgdGhlIHJhbmdlIHdlCi0JCQkgKiBhcmUgaW50ZXJyZXN0ZWQgaW4uCi0JCQkgKi8KLQkJCSBjbGVhcl9jb250X3B0ZV9yYW5nZShwdGUsIGFkZHIpOwotCQkJIF9fcG9wdWxhdGVfaW5pdF9wdGUocHRlLCBhZGRyLCBuZXh0LCBwaHlzLCBwcm90KTsKLQkJfQotCi0JCXB0ZSArPSAobmV4dCAtIGFkZHIpID4+IFBBR0VfU0hJRlQ7Ci0JCXBoeXMgKz0gbmV4dCAtIGFkZHI7Ci0JCWFkZHIgPSBuZXh0OwotCX0gd2hpbGUgKGFkZHIgIT0gZW5kKTsKKwkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7CisJCXBmbisrOworCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogfQogCiBzdGF0aWMgdm9pZCBzcGxpdF9wdWQocHVkX3QgKm9sZF9wdWQsIHBtZF90ICpwbWQpCkBAIC0yMjMsNyArMTczLDggQEAKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlhbGxvY19pbml0X3B0ZShwbWQsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsIGFsbG9jKTsKKwkJCWFsbG9jX2luaXRfcHRlKHBtZCwgYWRkciwgbmV4dCwgX19waHlzX3RvX3BmbihwaHlzKSwKKwkJCQkgICAgICAgcHJvdCwgYWxsb2MpOwogCQl9CiAJCXBoeXMgKz0gbmV4dCAtIGFkZHI7CiAJfSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CkBAIC0zNjIsOCArMzEzLDggQEAKIAkgKiBmb3Igbm93LiBUaGlzIHdpbGwgZ2V0IG1vcmUgZmluZSBncmFpbmVkIGxhdGVyIG9uY2UgYWxsIG1lbW9yeQogCSAqIGlzIG1hcHBlZAogCSAqLwotCXVuc2lnbmVkIGxvbmcga2VybmVsX3hfc3RhcnQgPSByb3VuZF9kb3duKF9fcGEoX3N0ZXh0KSwgU0VDVElPTl9TSVpFKTsKLQl1bnNpZ25lZCBsb25nIGtlcm5lbF94X2VuZCA9IHJvdW5kX3VwKF9fcGEoX19pbml0X2VuZCksIFNFQ1RJT05fU0laRSk7CisJdW5zaWduZWQgbG9uZyBrZXJuZWxfeF9zdGFydCA9IHJvdW5kX2Rvd24oX19wYShfc3RleHQpLCBTV0FQUEVSX0JMT0NLX1NJWkUpOworCXVuc2lnbmVkIGxvbmcga2VybmVsX3hfZW5kID0gcm91bmRfdXAoX19wYShfX2luaXRfZW5kKSwgU1dBUFBFUl9CTE9DS19TSVpFKTsKIAogCWlmIChlbmQgPCBrZXJuZWxfeF9zdGFydCkgewogCQljcmVhdGVfbWFwcGluZyhzdGFydCwgX19waHlzX3RvX3ZpcnQoc3RhcnQpLApAQCAtNDUxLDE4ICs0MDIsMTggQEAKIHsKICNpZmRlZiBDT05GSUdfREVCVUdfUk9EQVRBCiAJLyogbm93IHRoYXQgd2UgYXJlIGFjdHVhbGx5IGZ1bGx5IG1hcHBlZCwgbWFrZSB0aGUgc3RhcnQvZW5kIG1vcmUgZmluZSBncmFpbmVkICovCi0JaWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKV9zdGV4dCwgU0VDVElPTl9TSVpFKSkgeworCWlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylfc3RleHQsIFNXQVBQRVJfQkxPQ0tfU0laRSkpIHsKIAkJdW5zaWduZWQgbG9uZyBhbGlnbmVkX3N0YXJ0ID0gcm91bmRfZG93bihfX3BhKF9zdGV4dCksCi0JCQkJCQkJU0VDVElPTl9TSVpFKTsKKwkJCQkJCQkgU1dBUFBFUl9CTE9DS19TSVpFKTsKIAogCQljcmVhdGVfbWFwcGluZyhhbGlnbmVkX3N0YXJ0LCBfX3BoeXNfdG9fdmlydChhbGlnbmVkX3N0YXJ0KSwKIAkJCQlfX3BhKF9zdGV4dCkgLSBhbGlnbmVkX3N0YXJ0LAogCQkJCVBBR0VfS0VSTkVMKTsKIAl9CiAKLQlpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpX19pbml0X2VuZCwgU0VDVElPTl9TSVpFKSkgeworCWlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylfX2luaXRfZW5kLCBTV0FQUEVSX0JMT0NLX1NJWkUpKSB7CiAJCXVuc2lnbmVkIGxvbmcgYWxpZ25lZF9lbmQgPSByb3VuZF91cChfX3BhKF9faW5pdF9lbmQpLAotCQkJCQkJCVNFQ1RJT05fU0laRSk7CisJCQkJCQkJICBTV0FQUEVSX0JMT0NLX1NJWkUpOwogCQljcmVhdGVfbWFwcGluZyhfX3BhKF9faW5pdF9lbmQpLCAodW5zaWduZWQgbG9uZylfX2luaXRfZW5kLAogCQkJCWFsaWduZWRfZW5kIC0gX19wYShfX2luaXRfZW5kKSwKIAkJCQlQQUdFX0tFUk5FTCk7CkBAIC00NzUsNyArNDI2LDcgQEAKIHsKIAljcmVhdGVfbWFwcGluZ19sYXRlKF9fcGEoX3N0ZXh0KSwgKHVuc2lnbmVkIGxvbmcpX3N0ZXh0LAogCQkJCSh1bnNpZ25lZCBsb25nKV9ldGV4dCAtICh1bnNpZ25lZCBsb25nKV9zdGV4dCwKLQkJCQlQQUdFX0tFUk5FTF9FWEVDIHwgUFRFX1JET05MWSk7CisJCQkJUEFHRV9LRVJORUxfUk9YKTsKIAogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGNmM2M3ZDQuLmIxNjJhZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC01MCw3ICs1MCw3IEBACiAJW0JQRl9SRUdfOF0gPSBBNjRfUigyMSksCiAJW0JQRl9SRUdfOV0gPSBBNjRfUigyMiksCiAJLyogcmVhZC1vbmx5IGZyYW1lIHBvaW50ZXIgdG8gYWNjZXNzIHN0YWNrICovCi0JW0JQRl9SRUdfRlBdID0gQTY0X0ZQLAorCVtCUEZfUkVHX0ZQXSA9IEE2NF9SKDI1KSwKIAkvKiB0ZW1wb3JhcnkgcmVnaXN0ZXIgZm9yIGludGVybmFsIEJQRiBKSVQgKi8KIAlbVE1QX1JFR18xXSA9IEE2NF9SKDIzKSwKIAlbVE1QX1JFR18yXSA9IEE2NF9SKDI0KSwKQEAgLTEzOSw2ICsxMzksMTIgQEAKIC8qIFN0YWNrIG11c3QgYmUgbXVsdGlwbGVzIG9mIDE2QiAqLwogI2RlZmluZSBTVEFDS19BTElHTihzeikgKCgoc3opICsgMTUpICYgfjE1KQogCisjZGVmaW5lIF9TVEFDS19TSVpFIFwKKwkoTUFYX0JQRl9TVEFDSyBcCisJICsgNCAvKiBleHRyYSBmb3Igc2tiX2NvcHlfYml0cyBidWZmZXIgKi8pCisKKyNkZWZpbmUgU1RBQ0tfU0laRSBTVEFDS19BTElHTihfU1RBQ0tfU0laRSkKKwogc3RhdGljIHZvaWQgYnVpbGRfcHJvbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCkKIHsKIAljb25zdCB1OCByNiA9IGJwZjJhNjRbQlBGX1JFR182XTsKQEAgLTE1MCwxMCArMTU2LDM1IEBACiAJY29uc3QgdTggcnggPSBicGYyYTY0W0JQRl9SRUdfWF07CiAJY29uc3QgdTggdG1wMSA9IGJwZjJhNjRbVE1QX1JFR18xXTsKIAljb25zdCB1OCB0bXAyID0gYnBmMmE2NFtUTVBfUkVHXzJdOwotCWludCBzdGFja19zaXplID0gTUFYX0JQRl9TVEFDSzsKIAotCXN0YWNrX3NpemUgKz0gNDsgLyogZXh0cmEgZm9yIHNrYl9jb3B5X2JpdHMgYnVmZmVyICovCi0Jc3RhY2tfc2l6ZSA9IFNUQUNLX0FMSUdOKHN0YWNrX3NpemUpOworCS8qCisJICogQlBGIHByb2cgc3RhY2sgbGF5b3V0CisJICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoCisJICogb3JpZ2luYWwgQTY0X1NQID0+ICAgMDorLS0tLS0rIEJQRiBwcm9sb2d1ZQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgfEZQL0xSfAorCSAqIGN1cnJlbnQgQTY0X0ZQID0+ICAtMTY6Ky0tLS0tKworCSAqICAgICAgICAgICAgICAgICAgICAgICAgfCAuLi4gfCBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzCisJICogICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rCisJICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IHgyNS94MjYKKwkgKiBCUEYgZnAgcmVnaXN0ZXIgPT4gLTgwOistLS0tLSsgPD0gKEJQRl9GUCkKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4uIHwgQlBGIHByb2cgc3RhY2sKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSsgPD0gKEJQRl9GUCAtIE1BWF9CUEZfU1RBQ0spCisJICogICAgICAgICAgICAgICAgICAgICAgICB8UlNWRCB8IEpJVCBzY3JhdGNocGFkCisJICogY3VycmVudCBBNjRfU1AgPT4gICAgICArLS0tLS0rIDw9IChCUEZfRlAgLSBTVEFDS19TSVpFKQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgfCAuLi4gfCBGdW5jdGlvbiBjYWxsIHN0YWNrCisJICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8CisJICogICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rCisJICogICAgICAgICAgICAgICAgICAgICAgICAgIGxvdworCSAqCisJICovCisKKwkvKiBTYXZlIEZQIGFuZCBMUiByZWdpc3RlcnMgdG8gc3RheSBhbGlnbiB3aXRoIEFSTTY0IEFBUENTICovCisJZW1pdChBNjRfUFVTSChBNjRfRlAsIEE2NF9MUiwgQTY0X1NQKSwgY3R4KTsKKwllbWl0KEE2NF9NT1YoMSwgQTY0X0ZQLCBBNjRfU1ApLCBjdHgpOwogCiAJLyogU2F2ZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXIgKi8KIAllbWl0KEE2NF9QVVNIKHI2LCByNywgQTY0X1NQKSwgY3R4KTsKQEAgLTE2MSwxMiArMTkyLDE1IEBACiAJaWYgKGN0eC0+dG1wX3VzZWQpCiAJCWVtaXQoQTY0X1BVU0godG1wMSwgdG1wMiwgQTY0X1NQKSwgY3R4KTsKIAotCS8qIFNldCB1cCBCUEYgc3RhY2sgKi8KLQllbWl0KEE2NF9TVUJfSSgxLCBBNjRfU1AsIEE2NF9TUCwgc3RhY2tfc2l6ZSksIGN0eCk7CisJLyogU2F2ZSBmcCAoeDI1KSBhbmQgeDI2LiBTUCByZXF1aXJlcyAxNiBieXRlcyBhbGlnbm1lbnQgKi8KKwllbWl0KEE2NF9QVVNIKGZwLCBBNjRfUigyNiksIEE2NF9TUCksIGN0eCk7CiAKLQkvKiBTZXQgdXAgZnJhbWUgcG9pbnRlciAqLworCS8qIFNldCB1cCBCUEYgcHJvZyBzdGFjayBiYXNlIHJlZ2lzdGVyICh4MjUpICovCiAJZW1pdChBNjRfTU9WKDEsIGZwLCBBNjRfU1ApLCBjdHgpOwogCisJLyogU2V0IHVwIGZ1bmN0aW9uIGNhbGwgc3RhY2sgKi8KKwllbWl0KEE2NF9TVUJfSSgxLCBBNjRfU1AsIEE2NF9TUCwgU1RBQ0tfU0laRSksIGN0eCk7CisKIAkvKiBDbGVhciByZWdpc3RlcnMgQSBhbmQgWCAqLwogCWVtaXRfYTY0X21vdl9pNjQocmEsIDAsIGN0eCk7CiAJZW1pdF9hNjRfbW92X2k2NChyeCwgMCwgY3R4KTsKQEAgLTE4MiwxMyArMjE2LDEyIEBACiAJY29uc3QgdTggZnAgPSBicGYyYTY0W0JQRl9SRUdfRlBdOwogCWNvbnN0IHU4IHRtcDEgPSBicGYyYTY0W1RNUF9SRUdfMV07CiAJY29uc3QgdTggdG1wMiA9IGJwZjJhNjRbVE1QX1JFR18yXTsKLQlpbnQgc3RhY2tfc2l6ZSA9IE1BWF9CUEZfU1RBQ0s7Ci0KLQlzdGFja19zaXplICs9IDQ7IC8qIGV4dHJhIGZvciBza2JfY29weV9iaXRzIGJ1ZmZlciAqLwotCXN0YWNrX3NpemUgPSBTVEFDS19BTElHTihzdGFja19zaXplKTsKIAogCS8qIFdlJ3JlIGRvbmUgd2l0aCBCUEYgc3RhY2sgKi8KLQllbWl0KEE2NF9BRERfSSgxLCBBNjRfU1AsIEE2NF9TUCwgc3RhY2tfc2l6ZSksIGN0eCk7CisJZW1pdChBNjRfQUREX0koMSwgQTY0X1NQLCBBNjRfU1AsIFNUQUNLX1NJWkUpLCBjdHgpOworCisJLyogUmVzdG9yZSBmcyAoeDI1KSBhbmQgeDI2ICovCisJZW1pdChBNjRfUE9QKGZwLCBBNjRfUigyNiksIEE2NF9TUCksIGN0eCk7CiAKIAkvKiBSZXN0b3JlIGNhbGxlZS1zYXZlZCByZWdpc3RlciAqLwogCWlmIChjdHgtPnRtcF91c2VkKQpAQCAtMTk2LDggKzIyOSw4IEBACiAJZW1pdChBNjRfUE9QKHI4LCByOSwgQTY0X1NQKSwgY3R4KTsKIAllbWl0KEE2NF9QT1AocjYsIHI3LCBBNjRfU1ApLCBjdHgpOwogCi0JLyogUmVzdG9yZSBmcmFtZSBwb2ludGVyICovCi0JZW1pdChBNjRfTU9WKDEsIGZwLCBBNjRfU1ApLCBjdHgpOworCS8qIFJlc3RvcmUgRlAvTFIgcmVnaXN0ZXJzICovCisJZW1pdChBNjRfUE9QKEE2NF9GUCwgQTY0X0xSLCBBNjRfU1ApLCBjdHgpOwogCiAJLyogU2V0IHJldHVybiB2YWx1ZSAqLwogCWVtaXQoQTY0X01PVigxLCBBNjRfUigwKSwgcjApLCBjdHgpOwpAQCAtNTU3LDcgKzU5MCwyNSBAQAogCWNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9IOgogCWNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COgogCWNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzoKLQkJZ290byBub3R5ZXQ7CisJCS8qIExvYWQgaW1tIHRvIGEgcmVnaXN0ZXIgdGhlbiBzdG9yZSBpdCAqLworCQljdHgtPnRtcF91c2VkID0gMTsKKwkJZW1pdF9hNjRfbW92X2koMSwgdG1wMiwgb2ZmLCBjdHgpOworCQllbWl0X2E2NF9tb3ZfaSgxLCB0bXAsIGltbSwgY3R4KTsKKwkJc3dpdGNoIChCUEZfU0laRShjb2RlKSkgeworCQljYXNlIEJQRl9XOgorCQkJZW1pdChBNjRfU1RSMzIodG1wLCBkc3QsIHRtcDIpLCBjdHgpOworCQkJYnJlYWs7CisJCWNhc2UgQlBGX0g6CisJCQllbWl0KEE2NF9TVFJIKHRtcCwgZHN0LCB0bXAyKSwgY3R4KTsKKwkJCWJyZWFrOworCQljYXNlIEJQRl9COgorCQkJZW1pdChBNjRfU1RSQih0bXAsIGRzdCwgdG1wMiksIGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBCUEZfRFc6CisJCQllbWl0KEE2NF9TVFI2NCh0bXAsIGRzdCwgdG1wMiksIGN0eCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAogCS8qIFNUWDogKihzaXplICopKGRzdCArIG9mZikgPSBzcmMgKi8KIAljYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX1c6CkBAIC02MjQsNyArNjc1LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWVtaXRfYTY0X21vdl9pNjQocjMsIHNpemUsIGN0eCk7Ci0JCWVtaXQoQTY0X0FERF9JKDEsIHI0LCBmcCwgTUFYX0JQRl9TVEFDSyksIGN0eCk7CisJCWVtaXQoQTY0X1NVQl9JKDEsIHI0LCBmcCwgU1RBQ0tfU0laRSksIGN0eCk7CiAJCWVtaXRfYTY0X21vdl9pNjQocjUsICh1bnNpZ25lZCBsb25nKWJwZl9sb2FkX3BvaW50ZXIsIGN0eCk7CiAJCWVtaXQoQTY0X1BVU0goQTY0X0ZQLCBBNjRfTFIsIEE2NF9TUCksIGN0eCk7CiAJCWVtaXQoQTY0X01PVigxLCBBNjRfRlAsIEE2NF9TUCksIGN0eCk7CkBAIC03NTgsNyArODA5LDcgQEAKIAlpZiAoYnBmX2ppdF9lbmFibGUgPiAxKQogCQlicGZfaml0X2R1bXAocHJvZy0+bGVuLCBpbWFnZV9zaXplLCAyLCBjdHguaW1hZ2UpOwogCi0JYnBmX2ZsdXNoX2ljYWNoZShjdHguaW1hZ2UsIGN0eC5pbWFnZSArIGN0eC5pZHgpOworCWJwZl9mbHVzaF9pY2FjaGUoaGVhZGVyLCBjdHguaW1hZ2UgKyBjdHguaWR4KTsKIAogCXNldF9tZW1vcnlfcm8oKHVuc2lnbmVkIGxvbmcpaGVhZGVyLCBoZWFkZXItPnBhZ2VzKTsKIAlwcm9nLT5icGZfZnVuYyA9ICh2b2lkICopY3R4LmltYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDFlOWM4YjAuLjE3MGQ3ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgogICogIENvcHlyaWdodCAoQykgMjAwOSBKYXN3aW5kZXIgU2luZ2ggUmFqcHV0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4sIFJvYmVydCBSaWNodGVyCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24sIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbT4KICAqCiAgKiBwcGM6CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggZGI3MzM5MC4uNzRjMTMyZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMTEsNyArMTEsNyBAQAogCiAKIAotI2RlZmluZSBOUl9zeXNjYWxscwkJCTMyMiAvKiBsZW5ndGggb2Ygc3lzY2FsbCB0YWJsZSAqLworI2RlZmluZSBOUl9zeXNjYWxscwkJCTMyMyAvKiBsZW5ndGggb2Ygc3lzY2FsbCB0YWJsZSAqLwogCiAvKgogICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIHN0b3Agc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoIGZyb20gY29tcGxhaW5pbmcgYWJvdXQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKaW5kZXggOTAzODcyNi4uNzYyZWRjZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKQEAgLTMzNSw1ICszMzUsNiBAQAogI2RlZmluZSBfX05SX3VzZXJmYXVsdGZkCQkxMzQzCiAjZGVmaW5lIF9fTlJfbWVtYmFycmllcgkJCTEzNDQKICNkZWZpbmUgX19OUl9rY21wCQkJMTM0NQorI2RlZmluZSBfX05SX21sb2NrMgkJCTEzNDYKIAogI2VuZGlmIC8qIF9VQVBJX0FTTV9JQTY0X1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggZGNkOTdmOC4uNTM0YTc0YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTc3MSw1ICsxNzcxLDYgQEAKIAlkYXRhOCBzeXNfdXNlcmZhdWx0ZmQKIAlkYXRhOCBzeXNfbWVtYmFycmllcgogCWRhdGE4IHN5c19rY21wCQkJCS8vIDEzNDUKKwlkYXRhOCBzeXNfbWxvY2syCiAKIAkub3JnIHN5c19jYWxsX3RhYmxlICsgOCpOUl9zeXNjYWxscwkvLyBndWFyZCBhZ2FpbnN0IGZhaWx1cmVzIHRvIGluY3JlYXNlIE5SX3N5c2NhbGxzCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL0tidWlsZAppbmRleCBmZDEwNGJkLi44NjBlNDQwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vS2J1aWxkCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTMsNiArMyw3IEBACiBnZW5lcmljLXkgKz0gY3B1dGltZS5oCiBnZW5lcmljLXkgKz0gZXhlYy5oCiBnZW5lcmljLXkgKz0gaXJxX3dvcmsuaAorZ2VuZXJpYy15ICs9IGt2bV9wYXJhLmgKIGdlbmVyaWMteSArPSBtY3Nfc3BpbmxvY2suaAogZ2VuZXJpYy15ICs9IG1tLWFyY2gtaG9va3MuaAogZ2VuZXJpYy15ICs9IG1vZHVsZS5oCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDYxYjg5MzEuLjRiMGY1ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oCkBAIC0xNjgsMTMgKzE2OCwyMSBAQAogI2RlZmluZSB3cml0ZXdfcmVsYXhlZCB3cml0ZXcKICNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQgd3JpdGVsCiAKLSNkZWZpbmUgaW9yZWFkOCByZWFkCisjZGVmaW5lIGlvcmVhZDggcmVhZGIKICNkZWZpbmUgaW9yZWFkMTYgcmVhZHcKICNkZWZpbmUgaW9yZWFkMzIgcmVhZGwKICNkZWZpbmUgaW93cml0ZTggd3JpdGViCiAjZGVmaW5lIGlvd3JpdGUxNiB3cml0ZXcKICNkZWZpbmUgaW93cml0ZTMyIHdyaXRlbAogCisjZGVmaW5lIGlvcmVhZDhfcmVwKHAsIGRzdCwgY291bnQpIGluc2IoKHVuc2lnbmVkIGxvbmcpKHApLCAoZHN0KSwgKGNvdW50KSkKKyNkZWZpbmUgaW9yZWFkMTZfcmVwKHAsIGRzdCwgY291bnQpIGluc3coKHVuc2lnbmVkIGxvbmcpKHApLCAoZHN0KSwgKGNvdW50KSkKKyNkZWZpbmUgaW9yZWFkMzJfcmVwKHAsIGRzdCwgY291bnQpIGluc2woKHVuc2lnbmVkIGxvbmcpKHApLCAoZHN0KSwgKGNvdW50KSkKKworI2RlZmluZSBpb3dyaXRlOF9yZXAocCwgc3JjLCBjb3VudCkgb3V0c2IoKHVuc2lnbmVkIGxvbmcpKHApLCAoc3JjKSwgKGNvdW50KSkKKyNkZWZpbmUgaW93cml0ZTE2X3JlcChwLCBzcmMsIGNvdW50KSBvdXRzdygodW5zaWduZWQgbG9uZykocCksIChzcmMpLCAoY291bnQpKQorI2RlZmluZSBpb3dyaXRlMzJfcmVwKHAsIHNyYywgY291bnQpIG91dHNsKCh1bnNpZ25lZCBsb25nKShwKSwgKHNyYyksIChjb3VudCkpCisKICNkZWZpbmUgaW9yZWFkMTZiZShhZGRyKQliZTE2X3RvX2NwdShyZWFkdyhhZGRyKSkKICNkZWZpbmUgaW9yZWFkMzJiZShhZGRyKQliZTMyX3RvX2NwdShyZWFkbChhZGRyKSkKICNkZWZpbmUgaW93cml0ZTE2YmUodiwgYWRkcikJd3JpdGV3KGNwdV90b19iZTE2KHYpLCAoYWRkcikpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29sZGZpcmUvbTU0eHguYyBiL2FyY2gvbTY4ay9jb2xkZmlyZS9tNTR4eC5jCmluZGV4IGY3ODM2YzYuLmMzMmY3NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb2xkZmlyZS9tNTR4eC5jCisrKyBiL2FyY2gvbTY4ay9jb2xkZmlyZS9tNTR4eC5jCkBAIC05OCw3ICs5OCw3IEBACiAJbWVtc3RhcnQgPSBQQUdFX0FMSUdOKF9yYW1zdGFydCk7CiAJbWluX2xvd19wZm4gPSBQRk5fRE9XTihfcmFtYmFzZSk7CiAJc3RhcnRfcGZuID0gUEZOX0RPV04obWVtc3RhcnQpOwotCW1heF9sb3dfcGZuID0gUEZOX0RPV04oX3JhbWVuZCk7CisJbWF4X3BmbiA9IG1heF9sb3dfcGZuID0gUEZOX0RPV04oX3JhbWVuZCk7CiAJaGlnaF9tZW1vcnkgPSAodm9pZCAqKV9yYW1lbmQ7CiAKIAltNjhrX3ZpcnRfdG9fbm9kZV9zaGlmdCA9IGZscyhfcmFtZW5kIC0gX3JhbWJhc2UgLSAxKSAtIDY7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMDc5M2E3Zi4uZjlkOTZiZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtNCw3ICs0LDcgQEAKICNpbmNsdWRlIDx1YXBpL2FzbS91bmlzdGQuaD4KIAogCi0jZGVmaW5lIE5SX3N5c2NhbGxzCQkzNzUKKyNkZWZpbmUgTlJfc3lzY2FsbHMJCTM3NgogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IDVlNmZhZTYuLjM2Y2YxMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCkBAIC0zODAsNSArMzgwLDYgQEAKICNkZWZpbmUgX19OUl9zZW5kbW1zZwkJMzcyCiAjZGVmaW5lIF9fTlJfdXNlcmZhdWx0ZmQJMzczCiAjZGVmaW5lIF9fTlJfbWVtYmFycmllcgkJMzc0CisjZGVmaW5lIF9fTlJfbWxvY2syCQkzNzUKIAogI2VuZGlmIC8qIF9VQVBJX0FTTV9NNjhLX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9uby5jCmluZGV4IDg4YzI3ZDkuLjc2YjkxMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbm8uYworKysgYi9hcmNoL202OGsva2VybmVsL3NldHVwX25vLmMKQEAgLTIzOCwxMSArMjM4LDE0IEBACiAJICogR2l2ZSBhbGwgdGhlIG1lbW9yeSB0byB0aGUgYm9vdG1hcCBhbGxvY2F0b3IsIHRlbGwgaXQgdG8gcHV0IHRoZQogCSAqIGJvb3QgbWVtX21hcCBhdCB0aGUgc3RhcnQgb2YgbWVtb3J5LgogCSAqLworCW1pbl9sb3dfcGZuID0gUEZOX0RPV04obWVtb3J5X3N0YXJ0KTsKKwltYXhfcGZuID0gbWF4X2xvd19wZm4gPSBQRk5fRE9XTihtZW1vcnlfZW5kKTsKKwogCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKAogCQkJTk9ERV9EQVRBKDApLAotCQkJbWVtb3J5X3N0YXJ0ID4+IFBBR0VfU0hJRlQsIC8qIG1hcCBnb2VzIGhlcmUgKi8KLQkJCVBBR0VfT0ZGU0VUID4+IFBBR0VfU0hJRlQsCS8qIDAgb24gY29sZGZpcmUgKi8KLQkJCW1lbW9yeV9lbmQgPj4gUEFHRV9TSElGVCk7CisJCQltaW5fbG93X3BmbiwJCS8qIG1hcCBnb2VzIGhlcmUgKi8KKwkJCVBGTl9ET1dOKFBBR0VfT0ZGU0VUKSwKKwkJCW1heF9wZm4pOwogCS8qCiAJICogRnJlZSB0aGUgdXNhYmxlIG1lbW9yeSwgd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgZG8gbm90IGZyZWUKIAkgKiB0aGUgYm9vdG1lbSBiaXRtYXAgc28gd2UgdGhlbiByZXNlcnZlIGl0IGFmdGVyIGZyZWVpbmcgaXQgOi0pCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUwppbmRleCA1ZGQwZTgwLi4yODJjZDkwIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKQEAgLTM5NSwzICszOTUsNCBAQAogCS5sb25nIHN5c19zZW5kbW1zZwogCS5sb25nIHN5c191c2VyZmF1bHRmZAogCS5sb25nIHN5c19tZW1iYXJyaWVyCisJLmxvbmcgc3lzX21sb2NrMgkJLyogMzc1ICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vbW90b3JvbGEuYyBiL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCmluZGV4IGI5NTg5MTYuLjhmMzdmZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCisrKyBiL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAloaWdoX21lbW9yeSA9IHBoeXNfdG9fdmlydChtYXhfYWRkcik7CiAKIAltaW5fbG93X3BmbiA9IGF2YWlsbWVtID4+IFBBR0VfU0hJRlQ7Ci0JbWF4X2xvd19wZm4gPSBtYXhfYWRkciA+PiBQQUdFX1NISUZUOworCW1heF9wZm4gPSBtYXhfbG93X3BmbiA9IG1heF9hZGRyID4+IFBBR0VfU0hJRlQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspIHsKIAkJYWRkciA9IG02OGtfbWVtb3J5W2ldLmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9jb25maWcuYyBiL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jCmluZGV4IGE4Yjk0MmIuLjJhNWY0M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jCkBAIC0xMTgsMTMgKzExOCwxMyBAQAogCW1lbW9yeV9lbmQgPSBtZW1vcnlfZW5kICYgUEFHRV9NQVNLOwogCiAJc3RhcnRfcGFnZSA9IF9fcGEobWVtb3J5X3N0YXJ0KSA+PiBQQUdFX1NISUZUOwotCW51bV9wYWdlcyA9IF9fcGEobWVtb3J5X2VuZCkgPj4gUEFHRV9TSElGVDsKKwltYXhfcGZuID0gbnVtX3BhZ2VzID0gX19wYShtZW1vcnlfZW5kKSA+PiBQQUdFX1NISUZUOwogCiAJaGlnaF9tZW1vcnkgPSAodm9pZCAqKW1lbW9yeV9lbmQ7CiAJYXZhaWxtZW0gPSBtZW1vcnlfc3RhcnQ7CiAKIAltNjhrX3NldHVwX25vZGUoMCk7Ci0JYXZhaWxtZW0gKz0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBzdGFydF9wYWdlLCAwLCBudW1fcGFnZXMpOworCWF2YWlsbWVtICs9IGluaXRfYm9vdG1lbShzdGFydF9wYWdlLCBudW1fcGFnZXMpOwogCWF2YWlsbWVtID0gKGF2YWlsbWVtICsgKFBBR0VfU0laRS0xKSkgJiBQQUdFX01BU0s7CiAKIAlmcmVlX2Jvb3RtZW0oX19wYShhdmFpbG1lbSksIG1lbW9yeV9lbmQgLSAoYXZhaWxtZW0pKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZG1hLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2RtYS5jCmluZGV4IGM4OWRhNjMuLmJmNGRlYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZG1hLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9kbWEuYwpAQCAtNjEsNyArNjEsOCBAQAogCS8qIEZJWE1FIHRoaXMgcGFydCBvZiBjb2RlIGlzIHVudGVzdGVkICovCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVudHMsIGkpIHsKIAkJc2ctPmRtYV9hZGRyZXNzID0gc2dfcGh5cyhzZyk7Ci0JCV9fZG1hX3N5bmMoc2dfcGh5cyhzZyksIHNnLT5sZW5ndGgsIGRpcmVjdGlvbik7CisJCV9fZG1hX3N5bmMocGFnZV90b19waHlzKHNnX3BhZ2Uoc2cpKSArIHNnLT5vZmZzZXQsCisJCQkJCQkJc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKIAl9CiAKIAlyZXR1cm4gbmVudHM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXRoNzkvc2V0dXAuYyBiL2FyY2gvbWlwcy9hdGg3OS9zZXR1cC5jCmluZGV4IDFiYTIxMjAuLjg3NTVkNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdGg3OS9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hdGg3OS9zZXR1cC5jCkBAIC0yMTYsOSArMjE2LDkgQEAKIAkJCQkJICAgQVI3MVhYX1JFU0VUX1NJWkUpOwogCWF0aDc5X3BsbF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKEFSNzFYWF9QTExfQkFTRSwKIAkJCQkJIEFSNzFYWF9QTExfU0laRSk7CisJYXRoNzlfZGV0ZWN0X3N5c190eXBlKCk7CiAJYXRoNzlfZGRyX2N0cmxfaW5pdCgpOwogCi0JYXRoNzlfZGV0ZWN0X3N5c190eXBlKCk7CiAJaWYgKG1pcHNfbWFjaHR5cGUgIT0gQVRINzlfTUFDSF9HRU5FUklDX09GKQogCQlkZXRlY3RfbWVtb3J5X3JlZ2lvbigwLCBBVEg3OV9NRU1fU0laRV9NSU4sIEFUSDc5X01FTV9TSVpFX01BWCk7CiAKQEAgLTI4MSwzICsyODEsOCBAQAogCSAgICAgIkdlbmVyaWMiLAogCSAgICAgIkdlbmVyaWMgQVI3MVhYL0FSNzI0WC9BUjkxM1ggYmFzZWQgYm9hcmQiLAogCSAgICAgYXRoNzlfZ2VuZXJpY19pbml0KTsKKworTUlQU19NQUNISU5FKEFUSDc5X01BQ0hfR0VORVJJQ19PRiwKKwkgICAgICJEVEIiLAorCSAgICAgIkdlbmVyaWMgQVI3MVhYL0FSNzI0WC9BUjkxM1ggYmFzZWQgYm9hcmQgKERUKSIsCisJICAgICBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2R0cy9xY2EvYXI5MTMyLmR0c2kgYi9hcmNoL21pcHMvYm9vdC9kdHMvcWNhL2FyOTEzMi5kdHNpCmluZGV4IGZiNzczNGUuLjEzZDA0MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2R0cy9xY2EvYXI5MTMyLmR0c2kKKysrIGIvYXJjaC9taXBzL2Jvb3QvZHRzL3FjYS9hcjkxMzIuZHRzaQpAQCAtMTA3LDcgKzEwNyw3IEBACiAJCQltaXNjaW50YzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTgwNjAwMTAgewogCQkJCWNvbXBhdGlibGUgPSAicWNhLGFyOTEzMi1taXNjLWludGMiLAogCQkJCQkgICAicWNhLGFyNzEwMC1taXNjLWludGMiOwotCQkJCXJlZyA9IDwweDE4MDYwMDEwIDB4ND47CisJCQkJcmVnID0gPDB4MTgwNjAwMTAgMHg4PjsKIAogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmNwdWludGM+OwogCQkJCWludGVycnVwdHMgPSA8Nj47CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBhZDFmY2NkLi4yMDQ2YzAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTIwMCw4ICsyMDAsOSBAQAogewogCS8qIGF2b2lkIDxsaW51eC9tbS5oPiBpbmNsdWRlIGhlbGwgKi8KIAlleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbWFwbnI7CisJdW5zaWduZWQgbG9uZyBwZm5fb2Zmc2V0ID0gQVJDSF9QRk5fT0ZGU0VUOwogCi0JcmV0dXJuIHBmbiA+PSBBUkNIX1BGTl9PRkZTRVQgJiYgcGZuIDwgbWF4X21hcG5yOworCXJldHVybiBwZm4gPj0gcGZuX29mZnNldCAmJiBwZm4gPCBtYXhfbWFwbnI7CiB9CiAKICNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJTRU1FTSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDUzMDVkNjkuLjA5NWVjYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtNTk5LDcgKzU5OSw3IEBACiAgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgogICovCiAjZGVmaW5lIF9fZ2V0X3VzZXJfdW5hbGlnbmVkKHgscHRyKSBcCi0JX19nZXRfdXNlcl9fdW5hbGlnbmVkbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCisJX19nZXRfdXNlcl91bmFsaWduZWRfbm9jaGVjaygoeCksKHB0ciksc2l6ZW9mKCoocHRyKSkpCiAKIC8qCiAgKiBZdWNrLiAgV2UgbmVlZCB0d28gdmFyaWFudHMsIG9uZSBmb3IgNjRiaXQgb3BlcmF0aW9uIGFuZCBvbmUKQEAgLTYyMCw4ICs2MjAsOCBAQAogZG8gewkJCQkJCQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAogCWNhc2UgMTogX19nZXRfZGF0YV9hc20odmFsLCAibGIiLCBwdHIpOyBicmVhazsJCQlcCi0JY2FzZSAyOiBfX2dldF91c2VyX3VuYWxpZ25lZF9hc20odmFsLCAidWxoIiwgcHRyKTsgYnJlYWs7CVwKLQljYXNlIDQ6IF9fZ2V0X3VzZXJfdW5hbGlnbmVkX2FzbSh2YWwsICJ1bHciLCBwdHIpOyBicmVhazsJXAorCWNhc2UgMjogX19nZXRfZGF0YV91bmFsaWduZWRfYXNtKHZhbCwgInVsaCIsIHB0cik7IGJyZWFrOwlcCisJY2FzZSA0OiBfX2dldF9kYXRhX3VuYWxpZ25lZF9hc20odmFsLCAidWx3IiwgcHRyKTsgYnJlYWs7CVwKIAljYXNlIDg6IF9fR0VUX1VTRVJfVU5BTElHTkVEX0RXKHZhbCwgcHRyKTsgYnJlYWs7CQlcCiAJZGVmYXVsdDogX19nZXRfdXNlcl91bmFsaWduZWRfdW5rbm93bigpOyBicmVhazsJCQlcCiAJfQkJCQkJCQkJXApAQCAtMTEyMiw5ICsxMTIyLDE1IEBACiAJX19jdV90byA9ICh0byk7CQkJCQkJCVwKIAlfX2N1X2Zyb20gPSAoZnJvbSk7CQkJCQkJXAogCV9fY3VfbGVuID0gKG4pOwkJCQkJCQlcCi0JbWlnaHRfZmF1bHQoKTsJCQkJCQkJXAotCV9fY3VfbGVuID0gX19pbnZva2VfY29weV9mcm9tX3VzZXIoX19jdV90bywgX19jdV9mcm9tLAkJXAotCQkJCQkgICBfX2N1X2xlbik7CQkJXAorCWlmIChldmFfa2VybmVsX2FjY2VzcygpKSB7CQkJCQlcCisJCV9fY3VfbGVuID0gX19pbnZva2VfY29weV9mcm9tX2tlcm5lbChfX2N1X3RvLAkJXAorCQkJCQkJICAgICBfX2N1X2Zyb20sCQlcCisJCQkJCQkgICAgIF9fY3VfbGVuKTsJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCW1pZ2h0X2ZhdWx0KCk7CQkJCQkJXAorCQlfX2N1X2xlbiA9IF9faW52b2tlX2NvcHlfZnJvbV91c2VyKF9fY3VfdG8sIF9fY3VfZnJvbSwJXAorCQkJCQkJICAgX19jdV9sZW4pOwkJXAorCX0JCQkJCQkJCVwKIAlfX2N1X2xlbjsJCQkJCQkJXAogfSkKIApAQCAtMTIyOSwxNiArMTIzNSwyOCBAQAogewogCV9fa2VybmVsX3NpemVfdCByZXM7CiAKLQltaWdodF9mYXVsdCgpOwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkibW92ZVx0JDQsICUxXG5cdCIKLQkJIm1vdmVcdCQ1LCAkMFxuXHQiCi0JCSJtb3ZlXHQkNiwgJTJcblx0IgotCQlfX01PRFVMRV9KQUwoX19iemVybykKLQkJIm1vdmVcdCUwLCAkNiIKLQkJOiAiPXIiIChyZXMpCi0JCTogInIiIChhZGRyKSwgInIiIChzaXplKQotCQk6ICIkNCIsICIkNSIsICIkNiIsIF9fVUFfdDAsIF9fVUFfdDEsICIkMzEiKTsKKwlpZiAoZXZhX2tlcm5lbF9hY2Nlc3MoKSkgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSJtb3ZlXHQkNCwgJTFcblx0IgorCQkJIm1vdmVcdCQ1LCAkMFxuXHQiCisJCQkibW92ZVx0JDYsICUyXG5cdCIKKwkJCV9fTU9EVUxFX0pBTChfX2J6ZXJvX2tlcm5lbCkKKwkJCSJtb3ZlXHQlMCwgJDYiCisJCQk6ICI9ciIgKHJlcykKKwkJCTogInIiIChhZGRyKSwgInIiIChzaXplKQorCQkJOiAiJDQiLCAiJDUiLCAiJDYiLCBfX1VBX3QwLCBfX1VBX3QxLCAiJDMxIik7CisJfSBlbHNlIHsKKwkJbWlnaHRfZmF1bHQoKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkibW92ZVx0JDQsICUxXG5cdCIKKwkJCSJtb3ZlXHQkNSwgJDBcblx0IgorCQkJIm1vdmVcdCQ2LCAlMlxuXHQiCisJCQlfX01PRFVMRV9KQUwoX19iemVybykKKwkJCSJtb3ZlXHQlMCwgJDYiCisJCQk6ICI9ciIgKHJlcykKKwkJCTogInIiIChhZGRyKSwgInIiIChzaXplKQorCQkJOiAiJDQiLCAiJDUiLCAiJDYiLCBfX1VBX3QwLCBfX1VBX3QxLCAiJDMxIik7CisJfQogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTEzODQsNyArMTQwMiw3IEBACiAJCW1pZ2h0X2ZhdWx0KCk7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkJIm1vdmVcdCQ0LCAlMVxuXHQiCi0JCQlfX01PRFVMRV9KQUwoX19zdHJsZW5fa2VybmVsX2FzbSkKKwkJCV9fTU9EVUxFX0pBTChfX3N0cmxlbl91c2VyX2FzbSkKIAkJCSJtb3ZlXHQlMCwgJDIiCiAJCQk6ICI9ciIgKHJlcykKIAkJCTogInIiIChzKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHMtdmVjLlMgYi9hcmNoL21pcHMva2VybmVsL2Nwcy12ZWMuUwppbmRleCA4ZmQ1YTI3Li5hYzgxZWRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2Nwcy12ZWMuUworKysgYi9hcmNoL21pcHMva2VybmVsL2Nwcy12ZWMuUwpAQCAtMjU3LDcgKzI1Nyw2IEBACiAJaGFzX210CXQwLCAzZgogCiAJLnNldAlwdXNoCi0JLnNldAltaXBzNjRyMgogCS5zZXQJbXQKIAogCS8qIE9ubHkgYWxsb3cgMSBUQyBwZXIgVlBFIHRvIGV4ZWN1dGUuLi4gKi8KQEAgLTM3Niw3ICszNzUsNiBAQAogCSBub3AKIAogCS5zZXQJcHVzaAotCS5zZXQJbWlwczY0cjIKIAkuc2V0CW10CiAKIDE6CS8qIEVudGVyIFZQRSBjb25maWd1cmF0aW9uIHN0YXRlICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL21pcHNfa3N5bXMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbWlwc19rc3ltcy5jCmluZGV4IDI5MWFmMGIuLmUyYjZhYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbWlwc19rc3ltcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbWlwc19rc3ltcy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9tc2EuaD4KIAorZXh0ZXJuIHZvaWQgKl9fYnplcm9fa2VybmVsKHZvaWQgKl9fcywgc2l6ZV90IF9fY291bnQpOwogZXh0ZXJuIHZvaWQgKl9fYnplcm8odm9pZCAqX19zLCBzaXplX3QgX19jb3VudCk7CiBleHRlcm4gbG9uZyBfX3N0cm5jcHlfZnJvbV9rZXJuZWxfbm9jaGVja19hc20oY2hhciAqX190bywKIAkJCQkJICAgICAgY29uc3QgY2hhciAqX19mcm9tLCBsb25nIF9fbGVuKTsKQEAgLTY0LDYgKzY1LDcgQEAKIEVYUE9SVF9TWU1CT0woX19jb3B5X2luX3VzZXJfZXZhKTsKIEVYUE9SVF9TWU1CT0woX19jb3B5X3RvX3VzZXJfZXZhKTsKIEVYUE9SVF9TWU1CT0woX19jb3B5X3VzZXJfaW5hdG9taWNfZXZhKTsKK0VYUE9SVF9TWU1CT0woX19iemVyb19rZXJuZWwpOwogI2VuZGlmCiBFWFBPUlRfU1lNQk9MKF9fYnplcm8pOwogRVhQT1JUX1NZTUJPTChfX3N0cm5jcHlfZnJvbV9rZXJuZWxfbm9jaGVja19hc20pOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2t2bS9lbXVsYXRlLmMgYi9hcmNoL21pcHMva3ZtL2VtdWxhdGUuYwppbmRleCBkNWZhM2VhLi40MWIxYjA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL21pcHMva3ZtL2VtdWxhdGUuYwpAQCAtMTU4MSw3ICsxNTgxLDcgQEAKIAogCWJhc2UgPSAoaW5zdCA+PiAyMSkgJiAweDFmOwogCW9wX2luc3QgPSAoaW5zdCA+PiAxNikgJiAweDFmOwotCW9mZnNldCA9IGluc3QgJiAweGZmZmY7CisJb2Zmc2V0ID0gKGludDE2X3QpaW5zdDsKIAljYWNoZSA9IChpbnN0ID4+IDE2KSAmIDB4MzsKIAlvcCA9IChpbnN0ID4+IDE4KSAmIDB4NzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2t2bS9sb2NvcmUuUyBiL2FyY2gvbWlwcy9rdm0vbG9jb3JlLlMKaW5kZXggN2JhYjNhNC4uN2UyMjEwOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2t2bS9sb2NvcmUuUworKysgYi9hcmNoL21pcHMva3ZtL2xvY29yZS5TCkBAIC0xNTcsOSArMTU3LDExIEBACiAKIEZFWFBPUlQoX19rdm1fbWlwc19sb2FkX2FzaWQpCiAJLyogU2V0IHRoZSBBU0lEIGZvciB0aGUgR3Vlc3QgS2VybmVsICovCi0JSU5UX1NMTAl0MCwgdDAsIDEJLyogd2l0aCBrc2VnMCBAIDB4NDAwMDAwMDAsIGtlcm5lbCAqLwotCQkJICAgICAgICAvKiBhZGRyZXNzZXMgc2hpZnQgdG8gMHg4MDAwMDAwMCAqLwotCWJsdHoJdDAsIDFmCQkvKiBJZiBrZXJuZWwgKi8KKwlQVFJfTAl0MCwgVkNQVV9DT1AwKGsxKQorCUxPTkdfTAl0MCwgQ09QMF9TVEFUVVModDApCisJYW5kaQl0MCwgS1NVX1VTRVIgfCBTVDBfRVJMIHwgU1QwX0VYTAorCXhvcmkJdDAsIEtTVV9VU0VSCisJYm5legl0MCwgMWYJCS8qIElmIGtlcm5lbCAqLwogCSBJTlRfQURESVUgdDEsIGsxLCBWQ1BVX0dVRVNUX0tFUk5FTF9BU0lEICAvKiAoQkQpICAqLwogCUlOVF9BRERJVSB0MSwgazEsIFZDUFVfR1VFU1RfVVNFUl9BU0lEICAgIC8qIGVsc2UgdXNlciAqLwogMToKQEAgLTQ3NCw5ICs0NzYsMTEgQEAKIAltdGMwCXQwLCBDUDBfRVBDCiAKIAkvKiBTZXQgdGhlIEFTSUQgZm9yIHRoZSBHdWVzdCBLZXJuZWwgKi8KLQlJTlRfU0xMCXQwLCB0MCwgMQkvKiB3aXRoIGtzZWcwIEAgMHg0MDAwMDAwMCwga2VybmVsICovCi0JCQkJLyogYWRkcmVzc2VzIHNoaWZ0IHRvIDB4ODAwMDAwMDAgKi8KLQlibHR6CXQwLCAxZgkJLyogSWYga2VybmVsICovCisJUFRSX0wJdDAsIFZDUFVfQ09QMChrMSkKKwlMT05HX0wJdDAsIENPUDBfU1RBVFVTKHQwKQorCWFuZGkJdDAsIEtTVV9VU0VSIHwgU1QwX0VSTCB8IFNUMF9FWEwKKwl4b3JpCXQwLCBLU1VfVVNFUgorCWJuZXoJdDAsIDFmCQkvKiBJZiBrZXJuZWwgKi8KIAkgSU5UX0FERElVIHQxLCBrMSwgVkNQVV9HVUVTVF9LRVJORUxfQVNJRCAgLyogKEJEKSAgKi8KIAlJTlRfQURESVUgdDEsIGsxLCBWQ1BVX0dVRVNUX1VTRVJfQVNJRCAgICAvKiBlbHNlIHVzZXIgKi8KIDE6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva3ZtL21pcHMuYyBiL2FyY2gvbWlwcy9rdm0vbWlwcy5jCmluZGV4IDQ5ZmYzYmYuLmI5YjgwM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rdm0vbWlwcy5jCisrKyBiL2FyY2gvbWlwcy9rdm0vbWlwcy5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAogCWlmICghZ2ViYXNlKSB7CiAJCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWVfY3B1OworCQlnb3RvIG91dF91bmluaXRfY3B1OwogCX0KIAlrdm1fZGVidWcoIkFsbG9jYXRlZCAlZCBieXRlcyBmb3IgS1ZNIEV4Y2VwdGlvbiBIYW5kbGVycyBAICVwXG4iLAogCQkgIEFMSUdOKHNpemUsIFBBR0VfU0laRSksIGdlYmFzZSk7CkBAIC0zNDMsNiArMzQzLDkgQEAKIG91dF9mcmVlX2dlYmFzZToKIAlrZnJlZShnZWJhc2UpOwogCitvdXRfdW5pbml0X2NwdToKKwlrdm1fdmNwdV91bmluaXQodmNwdSk7CisKIG91dF9mcmVlX2NwdToKIAlrZnJlZSh2Y3B1KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9tZW1zZXQuUyBiL2FyY2gvbWlwcy9saWIvbWVtc2V0LlMKaW5kZXggYjhlNjNmZC4uOGYwMDE5YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9tZW1zZXQuUworKysgYi9hcmNoL21pcHMvbGliL21lbXNldC5TCkBAIC0yODMsNiArMjgzLDggQEAKIDE6CiAjaWZuZGVmIENPTkZJR19FVkEKIEZFWFBPUlQoX19iemVybykKKyNlbHNlCitGRVhQT1JUKF9fYnplcm9fa2VybmVsKQogI2VuZGlmCiAJX19CVUlMRF9CWkVSTyBMRUdBQ1lfTU9ERQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYyBiL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCmluZGV4IGQ4MTE3YmUuLjczMGQzOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9kbWEtZGVmYXVsdC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAogCWdmcCA9IG1hc3NhZ2VfZ2ZwX2ZsYWdzKGRldiwgZ2ZwKTsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ01BKSAmJiAhKGdmcCAmIEdGUF9BVE9NSUMpKQorCWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfQ01BKSAmJiBnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApKQogCQlwYWdlID0gZG1hX2FsbG9jX2Zyb21fY29udGlndW91cyhkZXYsCiAJCQkJCWNvdW50LCBnZXRfb3JkZXIoc2l6ZSkpOwogCWlmICghcGFnZSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLXJ0Mjg4MC5jIGIvYXJjaC9taXBzL3BjaS9wY2ktcnQyODgwLmMKaW5kZXggOGE5NzgwMi4uYTI0NWNhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktcnQyODgwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktcnQyODgwLmMKQEAgLTExLDYgKzExLDcgQEAKICAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTIyMCw3ICsyMjEsNiBAQAogc3RhdGljIGludCBydDI4OHhfcGNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJdm9pZCBfX2lvbWVtICppb19tYXBfYmFzZTsKLQlpbnQgaTsKIAogCXJ0Mjg4MF9wY2lfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShSVDI4ODBfUENJX0JBU0UsIFBBR0VfU0laRSk7CiAKQEAgLTIzMiw4ICsyMzIsNyBAQAogCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSBSVDI4ODBfUENJX0lPX0JBU0UgKyBSVDI4ODBfUENJX0lPX1NJWkUgLSAxOwogCiAJcnQyODgwX3BjaV9yZWdfd3JpdGUoMCwgUlQyODgwX1BDSV9SRUdfUENJQ0ZHX0FERFIpOwotCWZvciAoaSA9IDA7IGkgPCAweGZmZmZmOyBpKyspCi0JCTsKKwl1ZGVsYXkoMSk7CiAKIAlydDI4ODBfcGNpX3JlZ193cml0ZSgweDc5LCBSVDI4ODBfUENJX1JFR19BUkJDVEwpOwogCXJ0Mjg4MF9wY2lfcmVnX3dyaXRlKDB4MDdGRjAwMDEsIFJUMjg4MF9QQ0lfUkVHX0JBUjBTRVRVUF9BRERSKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWNzLW1zcDcxeHgvbXNwX3NldHVwLmMgYi9hcmNoL21pcHMvcG1jcy1tc3A3MXh4L21zcF9zZXR1cC5jCmluZGV4IDRmOTI1ZTAuLjlkMjkzYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWNzLW1zcDcxeHgvbXNwX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3BtY3MtbXNwNzF4eC9tc3Bfc2V0dXAuYwpAQCAtMTAsNiArMTAsOCBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKwogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KQEAgLTM3LDcgKzM5LDYgQEAKIHZvaWQgbXNwNzEyMF9yZXNldCh2b2lkKQogewogCXZvaWQgKnN0YXJ0LCAqZW5kLCAqaXB0cjsKLQlyZWdpc3RlciBpbnQgaTsKIAogCS8qIERpYXNibGUgYWxsIGludGVycnVwdHMgKi8KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwpAQCAtNzcsNyArNzgsNyBAQAogCSAqLwogCiAJLyogV2FpdCBhIGJpdCBmb3IgdGhlIEREUkMgdG8gc2V0dGxlICovCi0JZm9yIChpID0gMDsgaSA8IDEwMDAwMDAwMDsgaSsrKTsKKwltZGVsYXkoMTI1KTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNQ19NU1A3MTIwX0dXKQogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3Jlc2V0LmMgYi9hcmNoL21pcHMvc25pL3Jlc2V0LmMKaW5kZXggMjQ0Zjk0Mi4uNmFmYTM0MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcmVzZXQuYwpAQCAtMyw2ICszLDggQEAKICAqCiAgKiAgUmVzZXQgYSBTTkkgbWFjaGluZS4KICAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3NuaS5oPgpAQCAtMjQsNyArMjYsNyBAQAogLyogWFhYIFRoaXMgZW5kcyB1cCBhdCB0aGUgQVJDIGZpcm13YXJlIHByb21wdCAuLi4gICovCiB2b2lkIHNuaV9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKIHsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAogCS8qIFRoaXMgZG9lcyBhIG5vcm1hbCB2aWEgdGhlIGtleWJvYXJkIGNvbnRyb2xsZXIgbGlrZSBhIFBDLgogCSAgIFdlIGNhbiBkbyB0aGF0IGVhc2llciAuLi4gICovCkBAIC0zMiw5ICszNCw5IEBACiAJZm9yICg7OykgewogCQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKIAkJCWtiX3dhaXQoKTsKLQkJCWZvciAoaiA9IDA7IGogPCAxMDAwMDAgOyBqKyspCi0JCQkJLyogbm90aGluZyAqLzsKKwkJCXVkZWxheSg1MCk7CiAJCQlvdXRiX3AoMHhmZSwgMHg2NCk7CSAvKiBwdWxzZSByZXNldCBsb3cgKi8KKwkJCXVkZWxheSg1MCk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdmRzby9NYWtlZmlsZSBiL2FyY2gvbWlwcy92ZHNvL01ha2VmaWxlCmluZGV4IGVmNWYzNDguLjE0NTY4OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92ZHNvL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy92ZHNvL01ha2VmaWxlCkBAIC0yNiw4ICsyNiw4IEBACiAjIHRoZSBjb21tZW50cyBvbiB0aGF0IGZpbGUuCiAjCiBpZm5kZWYgQ09ORklHX0NQVV9NSVBTUjYKLSAgaWZlcSAoJChjYWxsIGxkLWlmdmVyc2lvbiwgLWd0LCAyMjQwMDAwMCwgeSksKQotICAgICQod2FybmluZyBNSVBTIFZEU08gcmVxdWlyZXMgYmludXRpbHMgPiAyLjI0KQorICBpZmVxICgkKGNhbGwgbGQtaWZ2ZXJzaW9uLCAtbHQsIDIyNTAwMDAwLCB5KSx5KQorICAgICQod2FybmluZyBNSVBTIFZEU08gcmVxdWlyZXMgYmludXRpbHMgPj0gMi4yNSkKICAgICBvYmotdmRzby15IDo9ICQoZmlsdGVyLW91dCBnZXR0aW1lb2ZkYXkubywgJChvYmotdmRzby15KSkKICAgICBjY2ZsYWdzLXZkc28gKz0gLURESVNBQkxFX01JUFNfVkRTTwogICBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL0tjb25maWcgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwppbmRleCA0NDM0YjU0Li43OGFlNTU1IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvS2NvbmZpZworKysgYi9hcmNoL21uMTAzMDAvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBNTjEwMzAwCiAJZGVmX2Jvb2wgeQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCisJc2VsZWN0IEhBVkVfVUlEMTYKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVwogCXNlbGVjdCBBUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwpAQCAtMzcsOSArMzgsNiBAQAogY29uZmlnIE5VTUEKIAlkZWZfYm9vbCBuCiAKLWNvbmZpZyBVSUQxNgotCWRlZl9ib29sIHkKLQogY29uZmlnIFJXU0VNX0dFTkVSSUNfU1BJTkxPQ0sKIAlkZWZfYm9vbCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvbmlvczIvbW0vY2FjaGVmbHVzaC5jIGIvYXJjaC9uaW9zMi9tbS9jYWNoZWZsdXNoLmMKaW5kZXggMjIzY2RjYy4uODdiZjg4ZSAxMDA2NDQKLS0tIGEvYXJjaC9uaW9zMi9tbS9jYWNoZWZsdXNoLmMKKysrIGIvYXJjaC9uaW9zMi9tbS9jYWNoZWZsdXNoLmMKQEAgLTIzLDIyICsyMyw2IEBACiAJZW5kICs9IChjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKIAllbmQgJj0gfihjcHVpbmZvLmRjYWNoZV9saW5lX3NpemUgLSAxKTsKIAotCWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSkgewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiAgIGZsdXNoZGEgMCglMClcbiIKLQkJCQkJOiAvKiBPdXRwdXRzICovCi0JCQkJCTogLyogSW5wdXRzICAqLyAiciIoYWRkcikKLQkJCQkJLyogOiBObyBjbG9iYmVyICovKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZmx1c2hfZGNhY2hlX2FsbCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQlzdGFydCAmPSB+KGNwdWluZm8uZGNhY2hlX2xpbmVfc2l6ZSAtIDEpOwotCWVuZCArPSAoY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7Ci0JZW5kICY9IH4oY3B1aW5mby5kY2FjaGVfbGluZV9zaXplIC0gMSk7Ci0KIAlpZiAoZW5kID4gc3RhcnQgKyBjcHVpbmZvLmRjYWNoZV9zaXplKQogCQllbmQgPSBzdGFydCArIGNwdWluZm8uZGNhY2hlX3NpemU7CiAKQEAgLTExMiw3ICs5Niw3IEBACiAKIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpCiB7Ci0JX19mbHVzaF9kY2FjaGVfYWxsKDAsIGNwdWluZm8uZGNhY2hlX3NpemUpOworCV9fZmx1c2hfZGNhY2hlKDAsIGNwdWluZm8uZGNhY2hlX3NpemUpOwogCV9fZmx1c2hfaWNhY2hlKDAsIGNwdWluZm8uaWNhY2hlX3NpemUpOwogfQogCkBAIC0xODIsNyArMTY2LDcgQEAKIAkgKi8KIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwogCi0JX19mbHVzaF9kY2FjaGVfYWxsKHN0YXJ0LCBzdGFydCArIFBBR0VfU0laRSk7CisJX19mbHVzaF9kY2FjaGUoc3RhcnQsIHN0YXJ0ICsgUEFHRV9TSVpFKTsKIH0KIAogdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTI2OCw3ICsyNTIsNyBAQAogewogCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB1c2VyX3ZhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7CiAJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwotCV9fZmx1c2hfZGNhY2hlX2FsbCgodW5zaWduZWQgbG9uZylzcmMsICh1bnNpZ25lZCBsb25nKXNyYyArIGxlbik7CisJX19mbHVzaF9kY2FjaGUoKHVuc2lnbmVkIGxvbmcpc3JjLCAodW5zaWduZWQgbG9uZylzcmMgKyBsZW4pOwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykKIAkJX19mbHVzaF9pY2FjaGUoKHVuc2lnbmVkIGxvbmcpc3JjLCAodW5zaWduZWQgbG9uZylzcmMgKyBsZW4pOwogfQpAQCAtMjc5LDcgKzI2Myw3IEBACiB7CiAJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHVzZXJfdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKIAltZW1jcHkoZHN0LCBzcmMsIGxlbik7Ci0JX19mbHVzaF9kY2FjaGVfYWxsKCh1bnNpZ25lZCBsb25nKWRzdCwgKHVuc2lnbmVkIGxvbmcpZHN0ICsgbGVuKTsKKwlfX2ZsdXNoX2RjYWNoZSgodW5zaWduZWQgbG9uZylkc3QsICh1bnNpZ25lZCBsb25nKWRzdCArIGxlbik7CiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQogCQlfX2ZsdXNoX2ljYWNoZSgodW5zaWduZWQgbG9uZylkc3QsICh1bnNpZ25lZCBsb25nKWRzdCArIGxlbik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCBjMzY1NDY5Li43MjlmODkxIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTEwOCw2ICsxMDgsOSBAQAogCWRlZmF1bHQgMyBpZiA2NEJJVCAmJiBQQVJJU0NfUEFHRV9TSVpFXzRLQgogCWRlZmF1bHQgMgogCitjb25maWcgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUworCWRlZl9ib29sIHkgaWYgUEEyMAorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaHVnZXRsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNTZhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9odWdldGxiLmgKQEAgLTAsMCArMSw4NSBAQAorI2lmbmRlZiBfQVNNX1BBUklTQzY0X0hVR0VUTEJfSAorI2RlZmluZSBfQVNNX1BBUklTQzY0X0hVR0VUTEJfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9odWdldGxiLmg+CisKKwordm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKKworcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHB0ZV90ICpwdGVwKTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfaHVnZXBhZ2Vfb25seV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgbGVuKSB7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJZiB0aGUgYXJjaCBkb2Vzbid0IHN1cHBseSBzb21ldGhpbmcgZWxzZSwgYXNzdW1lIHRoYXQgaHVnZXBhZ2UKKyAqIHNpemUgYWxpZ25lZCByZWdpb25zIGFyZSBvayB3aXRob3V0IGZ1cnRoZXIgcHJlcGFyYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWlmIChsZW4gJiB+SFBBR0VfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGFkZHIgJiB+SFBBR0VfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2ZyZWVfcGdkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGZsb29yLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgY2VpbGluZykKK3sKKwlmcmVlX3BnZF9yYW5nZSh0bGIsIGFkZHIsIGVuZCwgZmxvb3IsIGNlaWxpbmcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgaHVnZV9wdGVfbm9uZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV9ub25lKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gcHRlX3dycHJvdGVjdChwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCit7CisJcHRlX3Qgb2xkX3B0ZSA9ICpwdGVwOworCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlX3dycHJvdGVjdChvbGRfcHRlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCisJCQkJCSAgICAgcHRlX3QgcHRlLCBpbnQgZGlydHkpCit7CisJaW50IGNoYW5nZWQgPSAhcHRlX3NhbWUoKnB0ZXAsIHB0ZSk7CisJaWYgKGNoYW5nZWQpIHsKKwkJc2V0X2h1Z2VfcHRlX2F0KHZtYS0+dm1fbW0sIGFkZHIsIHB0ZXAsIHB0ZSk7CisJCWZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcik7CisJfQorCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQocHRlX3QgKnB0ZXApCit7CisJcmV0dXJuICpwdGVwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9jbGVhcl9odWdlcGFnZV9mbGFncyhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKK30KKworI2VuZGlmIC8qIF9BU01fUEFSSVNDNjRfSFVHRVRMQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggNjBkNWQxNy4uODBlNzQyYSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTQ1LDExICsxNDUsMjIgQEAKICNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0jZGVmaW5lIEhQQUdFX1NISUZUCQkyMgkvKiA0TUIgKGlzIHRoaXMgZml4ZWQ/KSAqLworI2RlZmluZSBIUEFHRV9TSElGVAkJUE1EX1NISUZUIC8qIGZpeGVkIGZvciB0cmFuc3BhcmVudCBodWdlIHBhZ2VzICovCiAjZGVmaW5lIEhQQUdFX1NJWkUgICAgICAJKCgxVUwpIDw8IEhQQUdFX1NISUZUKQogI2RlZmluZSBIUEFHRV9NQVNLCQkofihIUEFHRV9TSVpFIC0gMSkpCiAjZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQorCisjaWYgZGVmaW5lZChDT05GSUdfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQorIyBkZWZpbmUgUkVBTF9IUEFHRV9TSElGVAkyMCAvKiAyMCA9IDFNQiAqLworIyBkZWZpbmUgX0hVR0VfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQgX1BBR0VfU0laRV9FTkNPRElOR18xTQorI2VsaWYgIWRlZmluZWQoQ09ORklHXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQikKKyMgZGVmaW5lIFJFQUxfSFBBR0VfU0hJRlQJMjIgLyogMjIgPSA0TUIgKi8KKyMgZGVmaW5lIF9IVUdFX1BBR0VfU0laRV9FTkNPRElOR19ERUZBVUxUIF9QQUdFX1NJWkVfRU5DT0RJTkdfNE0KKyNlbHNlCisjIGRlZmluZSBSRUFMX0hQQUdFX1NISUZUCTI0IC8qIDI0ID0gMTZNQiAqLworIyBkZWZpbmUgX0hVR0VfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQgX1BBR0VfU0laRV9FTkNPRElOR18xNk0KICNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KIAogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggM2VkYmI5Zi4uZjJmZDMyNyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMzUsNyArMzUsNyBAQAogCQkJCSAgICAgICAgUHhEX0ZMQUdfVkFMSUQgfCAKIAkJCQkJUHhEX0ZMQUdfQVRUQUNIRUQpIAogCQkJKyAoX191MzIpKF9fcGEoKHVuc2lnbmVkIGxvbmcpcGdkKSA+PiBQeERfVkFMVUVfU0hJRlQpKTsKLQkJLyogVGhlIGZpcnN0IHBtZCBlbnRyeSBhbHNvIGlzIG1hcmtlZCB3aXRoIF9QQUdFX0dBVEVXQVkgYXMKKwkJLyogVGhlIGZpcnN0IHBtZCBlbnRyeSBhbHNvIGlzIG1hcmtlZCB3aXRoIFB4RF9GTEFHX0FUVEFDSEVEIGFzCiAJCSAqIGEgc2lnbmFsIHRoYXQgdGhpcyBwbWQgbWF5IG5vdCBiZSBmcmVlZCAqLwogCQlfX3BnZF92YWxfc2V0KCpwZ2QsIFB4RF9GTEFHX0FUVEFDSEVEKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGY5M2M0YTQuLjI5MWNlZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTgzLDcgKzgzLDExIEBACiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHVuc2lnbmVkIGxvbmcpcGdkX3ZhbChlKSkKIAogLyogVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgaW5pdGlhbGx5IG1hcHBlZCBrZXJuZWwgbWVtb3J5ICovCi0jZGVmaW5lIEtFUk5FTF9JTklUSUFMX09SREVSCTI0CS8qIDAgdG8gMTw8MjQgPSAxNk1CICovCisjaWZkZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIEtFUk5FTF9JTklUSUFMX09SREVSCTI1CS8qIDE8PDI1ID0gMzJNQiAqLworI2Vsc2UKKyNkZWZpbmUgS0VSTkVMX0lOSVRJQUxfT1JERVIJMjQJLyogMTw8MjQgPSAxNk1CICovCisjZW5kaWYKICNkZWZpbmUgS0VSTkVMX0lOSVRJQUxfU0laRQkoMSA8PCBLRVJORUxfSU5JVElBTF9PUkRFUikKIAogI2lmIENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSAzCkBAIC0xNjcsNyArMTcxLDcgQEAKICNkZWZpbmUgX1BBR0VfTk9fQ0FDSEVfQklUIDI0ICAgLyogKDB4MDgwKSBVbmNhY2hlZCBQYWdlIChVIGJpdCkgKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRURfQklUIDIzICAgLyogKDB4MTAwKSBTb2Z0d2FyZTogUGFnZSBBY2Nlc3NlZCAqLwogI2RlZmluZSBfUEFHRV9QUkVTRU5UX0JJVCAgMjIgICAvKiAoMHgyMDApIFNvZnR3YXJlOiB0cmFuc2xhdGlvbiB2YWxpZCAqLwotLyogYml0IDIxIHdhcyBmb3JtZXJseSB0aGUgRkxVU0ggYml0IGJ1dCBpcyBub3cgdW51c2VkICovCisjZGVmaW5lIF9QQUdFX0hQQUdFX0JJVCAgICAyMSAgIC8qICgweDQwMCkgU29mdHdhcmU6IEh1Z2UgUGFnZSAqLwogI2RlZmluZSBfUEFHRV9VU0VSX0JJVCAgICAgMjAgICAvKiAoMHg4MDApIFNvZnR3YXJlOiBVc2VyIGFjY2Vzc2libGUgcGFnZSAqLwogCiAvKiBOLkIuIFRoZSBiaXRzIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIGEgMzIgYml0IHdvcmQgYWJvdmUsIHNvIHRoZSAqLwpAQCAtMTk0LDYgKzE5OCw3IEBACiAjZGVmaW5lIF9QQUdFX05PX0NBQ0hFICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX05PX0NBQ0hFX0JJVCkpCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX0FDQ0VTU0VEX0JJVCkpCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX1BSRVNFTlRfQklUKSkKKyNkZWZpbmUgX1BBR0VfSFVHRSAgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1BBR0VfSFBBR0VfQklUKSkKICNkZWZpbmUgX1BBR0VfVVNFUiAgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1BBR0VfVVNFUl9CSVQpKQogCiAjZGVmaW5lIF9QQUdFX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgIF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQpCkBAIC0yMTcsNyArMjIyLDcgQEAKICNkZWZpbmUgUHhEX0ZMQUdfVkFMSUQgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1B4RF9WQUxJRF9CSVQpKQogI2RlZmluZSBQeERfRkxBR19NQVNLICAgICAoMHhmKQogI2RlZmluZSBQeERfRkxBR19TSElGVCAgICAoNCkKLSNkZWZpbmUgUHhEX1ZBTFVFX1NISUZUICAgKDgpIC8qIChQQUdFX1NISUZULVB4RF9GTEFHX1NISUZUKSAqLworI2RlZmluZSBQeERfVkFMVUVfU0hJRlQgICAoUEZOX1BURV9TSElGVC1QeERfRkxBR19TSElGVCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMzYzLDYgKzM2OCwxOSBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtzcGVjaWFsKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlOyB9CiAKIC8qCisgKiBIdWdlIHB0ZSBkZWZpbml0aW9ucy4KKyAqLworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKyNkZWZpbmUgcHRlX2h1Z2UocHRlKSAgICAgICAgICAgKHB0ZV92YWwocHRlKSAmIF9QQUdFX0hVR0UpCisjZGVmaW5lIHB0ZV9ta2h1Z2UocHRlKSAgICAgICAgIChfX3B0ZShwdGVfdmFsKHB0ZSkgfCBcCisJCQkJIChwYXJpc2NfcmVxdWlyZXNfY29oZXJlbmN5KCkgPyAwIDogX1BBR0VfSFVHRSkpKQorI2Vsc2UKKyNkZWZpbmUgcHRlX2h1Z2UocHRlKSAgICAgICAgICAgKDApCisjZGVmaW5lIHB0ZV9ta2h1Z2UocHRlKSAgICAgICAgIChwdGUpCisjZW5kaWYKKworCisvKgogICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKICAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCiAgKi8KQEAgLTQxMCw4ICs0MjgsOSBAQAogLyogRmluZCBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUuLiAqLwogCiAjaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDMKKyNkZWZpbmUgcG1kX2luZGV4KGFkZHIpICAgICAgICAgKCgoYWRkcikgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSkKICNkZWZpbmUgcG1kX29mZnNldChkaXIsYWRkcmVzcykgXAotKChwbWRfdCAqKSBwZ2RfcGFnZV92YWRkcigqKGRpcikpICsgKCgoYWRkcmVzcyk+PlBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1ELTEpKSkKKygocG1kX3QgKikgcGdkX3BhZ2VfdmFkZHIoKihkaXIpKSArIHBtZF9pbmRleChhZGRyZXNzKSkKICNlbHNlCiAjZGVmaW5lIHBtZF9vZmZzZXQoZGlyLGFkZHIpICgocG1kX3QgKikgZGlyKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDU0YWRiNjAuLjdlNzU5ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xOTIsMzMgKzE5Miw2IEBACiAgKi8KIHR5cGVkZWYgdW5zaWduZWQgaW50IGVsZl9jYWRkcl90OwogCi0jZGVmaW5lIHN0YXJ0X3RocmVhZF9zb20ocmVncywgbmV3X3BjLCBuZXdfc3ApIGRvIHsJXAotCXVuc2lnbmVkIGxvbmcgKnNwID0gKHVuc2lnbmVkIGxvbmcgKiluZXdfc3A7CVwKLQlfX3UzMiBzcGFjZWlkID0gKF9fdTMyKWN1cnJlbnQtPm1tLT5jb250ZXh0OwlcCi0JdW5zaWduZWQgbG9uZyBwYyA9ICh1bnNpZ25lZCBsb25nKW5ld19wYzsJXAotCS8qIG9mZnNldCBwYyBmb3IgcHJpdi4gbGV2ZWwgKi8JCQlcCi0JcGMgfD0gMzsJCQkJCVwKLQkJCQkJCQlcCi0JcmVncy0+aWFzcVswXSA9IHNwYWNlaWQ7CQkJXAotCXJlZ3MtPmlhc3FbMV0gPSBzcGFjZWlkOwkJCVwKLQlyZWdzLT5pYW9xWzBdID0gcGM7CQkJCVwKLQlyZWdzLT5pYW9xWzFdID0gcGMgKyA0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JcmVncy0+c3JbMl0gPSBMSU5VWF9HQVRFV0FZX1NQQUNFOyAgICAgICAgICAgICAgXAotCXJlZ3MtPnNyWzNdID0gMHhmZmZmOwkJCQlcCi0JcmVncy0+c3JbNF0gPSBzcGFjZWlkOwkJCQlcCi0JcmVncy0+c3JbNV0gPSBzcGFjZWlkOwkJCQlcCi0JcmVncy0+c3JbNl0gPSBzcGFjZWlkOwkJCQlcCi0JcmVncy0+c3JbN10gPSBzcGFjZWlkOwkJCQlcCi0JcmVncy0+Z3JbIDBdID0gVVNFUl9QU1c7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCXJlZ3MtPmdyWzMwXSA9ICgobmV3X3NwKSs2MykmfjYzOwkJXAotCXJlZ3MtPmdyWzMxXSA9IHBjOwkJCQlcCi0JCQkJCQkJXAotCWdldF91c2VyKHJlZ3MtPmdyWzI2XSwmc3BbMF0pOwkJCVwKLQlnZXRfdXNlcihyZWdzLT5nclsyNV0sJnNwWy0xXSk7IAkJXAotCWdldF91c2VyKHJlZ3MtPmdyWzI0XSwmc3BbLTJdKTsgCQlcCi0JZ2V0X3VzZXIocmVncy0+Z3JbMjNdLCZzcFstM10pOyAJCVwKLX0gd2hpbGUoMCkKLQogLyogVGhlIEVMRiBhYmkgd2FudHMgdGhpbmdzIGRvbmUgYSAid2VlIGJpdCIgZGlmZmVyZW50bHkgdGhhbgogICogc29tIGRvZXMuICBTdXBwb3J0aW5nIHRoaXMgYmVoYXZpb3IgaGVyZSBhdm9pZHMKICAqIGhhdmluZyBvdXIgb3duIHZlcnNpb24gb2YgY3JlYXRlX2VsZl90YWJsZXMuCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCmluZGV4IGVjYzNhZTEuLmRkNGQxODcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oCkBAIC00OSwxNiArNDksNiBAQAogI2RlZmluZSBNQURWX0RPTlRGT1JLCTEwCQkvKiBkb24ndCBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAjZGVmaW5lIE1BRFZfRE9GT1JLCTExCQkvKiBkbyBpbmhlcml0IGFjcm9zcyBmb3JrICovCiAKLS8qIFRoZSByYW5nZSAxMi02NCBpcyByZXNlcnZlZCBmb3IgcGFnZSBzaXplIHNwZWNpZmljYXRpb24uICovCi0jZGVmaW5lIE1BRFZfNEtfUEFHRVMgICAxMiAgICAgICAgICAgICAgLyogVXNlIDRLIHBhZ2VzICAqLwotI2RlZmluZSBNQURWXzE2S19QQUdFUyAgMTQgICAgICAgICAgICAgIC8qIFVzZSAxNksgcGFnZXMgKi8KLSNkZWZpbmUgTUFEVl82NEtfUEFHRVMgIDE2ICAgICAgICAgICAgICAvKiBVc2UgNjRLIHBhZ2VzICovCi0jZGVmaW5lIE1BRFZfMjU2S19QQUdFUyAxOCAgICAgICAgICAgICAgLyogVXNlIDI1NksgcGFnZXMgKi8KLSNkZWZpbmUgTUFEVl8xTV9QQUdFUyAgIDIwICAgICAgICAgICAgICAvKiBVc2UgMSBNZWdhYnl0ZSBwYWdlcyAqLwotI2RlZmluZSBNQURWXzRNX1BBR0VTICAgMjIgICAgICAgICAgICAgIC8qIFVzZSA0IE1lZ2FieXRlIHBhZ2VzICovCi0jZGVmaW5lIE1BRFZfMTZNX1BBR0VTICAyNCAgICAgICAgICAgICAgLyogVXNlIDE2IE1lZ2FieXRlIHBhZ2VzICovCi0jZGVmaW5lIE1BRFZfNjRNX1BBR0VTICAyNiAgICAgICAgICAgICAgLyogVXNlIDY0IE1lZ2FieXRlIHBhZ2VzICovCi0KICNkZWZpbmUgTUFEVl9NRVJHRUFCTEUgICA2NQkJLyogS1NNIG1heSBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi8KICNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSA2NgkJLyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IDMzMTcwMzguLjM1YmRjY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMzYwLDggKzM2MCw5IEBACiAjZGVmaW5lIF9fTlJfZXhlY3ZlYXQJCShfX05SX0xpbnV4ICsgMzQyKQogI2RlZmluZSBfX05SX21lbWJhcnJpZXIJCShfX05SX0xpbnV4ICsgMzQzKQogI2RlZmluZSBfX05SX3VzZXJmYXVsdGZkCShfX05SX0xpbnV4ICsgMzQ0KQorI2RlZmluZSBfX05SX21sb2NrMgkJKF9fTlJfTGludXggKyAzNDUpCiAKLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkoX19OUl91c2VyZmF1bHRmZCArIDEpCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJKF9fTlJfbWxvY2syICsgMSkKIAogCiAjZGVmaW5lIF9fSUdOT1JFX3NlbGVjdAkJLyogbmV3c2VsZWN0ICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDU5MDAxY2UuLmQyZjYyNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yOTAsNiArMjkwLDE0IEBACiAJREVGSU5FKEFTTV9QRk5fUFRFX1NISUZULCBQRk5fUFRFX1NISUZUKTsKIAlERUZJTkUoQVNNX1BUX0lOSVRJQUwsIFBUX0lOSVRJQUwpOwogCUJMQU5LKCk7CisJLyogSFVHRVBBR0VfU0laRSBpcyBvbmx5IHVzZWQgaW4gdm1saW51eC5sZHMuUyB0byBhbGlnbiBrZXJuZWwgdGV4dAorCSAqIGFuZCBrZXJuZWwgZGF0YSBvbiBwaHlzaWNhbCBodWdlIHBhZ2VzICovCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorCURFRklORShIVUdFUEFHRV9TSVpFLCAxVUwgPDwgUkVBTF9IUEFHRV9TSElGVCk7CisjZWxzZQorCURFRklORShIVUdFUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworI2VuZGlmCisJQkxBTksoKTsKIAlERUZJTkUoRVhDREFUQV9JUCwgb2Zmc2V0b2Yoc3RydWN0IGV4Y2VwdGlvbl9kYXRhLCBmYXVsdF9pcCkpOwogCURFRklORShFWENEQVRBX1NQQUNFLCBvZmZzZXRvZihzdHJ1Y3QgZXhjZXB0aW9uX2RhdGEsIGZhdWx0X3NwYWNlKSk7CiAJREVGSU5FKEVYQ0RBVEFfQUREUiwgb2Zmc2V0b2Yoc3RydWN0IGV4Y2VwdGlvbl9kYXRhLCBmYXVsdF9hZGRyKSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCmluZGV4IGM1ZWY0MDguLjYyMzQ5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCkBAIC01MDIsMjEgKzUwMiwzOCBAQAogCVNUUkVHCQlccHRlLDAoXHB0cCkKIAkuZW5kbQogCisJLyogV2UgaGF2ZSAoZGVwZW5kaW5nIG9uIHRoZSBwYWdlIHNpemUpOgorCSAqIC0gMzggdG8gNTItYml0IFBoeXNpY2FsIFBhZ2UgTnVtYmVyCisJICogLSAxMiB0byAyNi1iaXQgcGFnZSBvZmZzZXQKKwkgKi8KIAkvKiBiaXRzaGlmdCBkaWZmZXJlbmNlIGJldHdlZW4gYSBQRk4gKGJhc2VkIG9uIGtlcm5lbCdzIFBBR0VfU0laRSkKIAkgKiB0byBhIENQVSBUTEIgNGsgUEZOICg0ayA9PiAxMiBiaXRzIHRvIHNoaWZ0KSAqLwotCSNkZWZpbmUgUEFHRV9BRERfU0hJRlQgIChQQUdFX1NISUZULTEyKQorCSNkZWZpbmUgUEFHRV9BRERfU0hJRlQJCShQQUdFX1NISUZULTEyKQorCSNkZWZpbmUgUEFHRV9BRERfSFVHRV9TSElGVAkoUkVBTF9IUEFHRV9TSElGVC0xMikKIAogCS8qIERyb3AgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWl0bGJ0IGFuZCBpZHRsYnQgKi8KLQkubWFjcm8JCWNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBwdGUKKwkubWFjcm8JCWNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBwdGUsdG1wCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorCWNvcHkJCVxwdGUsXHRtcAorCWV4dHJkLHUJCVx0bXAsKDYzLUFTTV9QRk5fUFRFX1NISUZUKSsoNjMtNTgpK1BBR0VfQUREX1NISUZULFwKKwkJCQk2NC1QQUdFX1NISUZULVBBR0VfQUREX1NISUZULFxwdGUKKworCWRlcGRpCQlfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQsNjMsXAorCQkJCSg2My01OCkrUEFHRV9BRERfU0hJRlQsXHB0ZQorCWV4dHJkLHUsKj0JXHRtcCxfUEFHRV9IUEFHRV9CSVQrMzIsMSwlcjAKKwlkZXBkaQkJX0hVR0VfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQsNjMsXAorCQkJCSg2My01OCkrUEFHRV9BRERfSFVHRV9TSElGVCxccHRlCisjZWxzZSAvKiBIdWdlIHBhZ2VzIGRpc2FibGVkICovCiAJZXh0cmQsdQkJXHB0ZSwoNjMtQVNNX1BGTl9QVEVfU0hJRlQpKyg2My01OCkrUEFHRV9BRERfU0hJRlQsXAogCQkJCTY0LVBBR0VfU0hJRlQtUEFHRV9BRERfU0hJRlQsXHB0ZQogCWRlcGRpCQlfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQsNjMsXAogCQkJCSg2My01OCkrUEFHRV9BRERfU0hJRlQsXHB0ZQorI2VuZGlmCiAJLmVuZG0KIAogCS8qIENvbnZlcnQgdGhlIHB0ZSBhbmQgcHJvdCB0byB0bGIgaW5zZXJ0aW9uIHZhbHVlcy4gIEhvdwogCSAqIHRoaXMgaGFwcGVucyBpcyBxdWl0ZSBzdWJ0bGUsIHJlYWQgYmVsb3cgKi8KLQkubWFjcm8JCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QKKwkubWFjcm8JCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QsdG1wCiAJc3BhY2VfdG9fcHJvdCAgIFxzcGMgXHByb3QgICAgICAgIC8qIGNyZWF0ZSBwcm90IGlkIGZyb20gc3BhY2UgKi8KIAkvKiBUaGUgZm9sbG93aW5nIGlzIHRoZSByZWFsIHN1YnRsZXR5LiAgVGhpcyBpcyBkZXBvc2l0aW5nCiAJICogVCA8LT4gX1BBR0VfUkVGVFJBUApAQCAtNTUzLDcgKzU3MCw3IEBACiAJZGVwZGkJCTEsMTIsMSxccHJvdAogCiAJLyogRHJvcCBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpaXRsYnQgYW5kIGlkdGxidCAqLwotCWNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBccHRlCisJY29udmVydF9mb3JfdGxiX2luc2VydDIwIFxwdGUgXHRtcAogCS5lbmRtCiAKIAkvKiBJZGVudGljYWwgbWFjcm8gdG8gbWFrZV9pbnNlcnRfdGxiIGFib3ZlLCBleGNlcHQgaXQKQEAgLTY0NiwxNyArNjYzLDEyIEBACiAKIAogCS8qCi0JICogQWxpZ24gZmF1bHRfdmVjdG9yXzIwIG9uIDRLIGJvdW5kYXJ5IHNvIHRoYXQgYm90aAotCSAqIGZhdWx0X3ZlY3Rvcl8xMSBhbmQgZmF1bHRfdmVjdG9yXzIwIGFyZSBvbiB0aGUKLQkgKiBzYW1lIHBhZ2UuIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3ZQotCSAqIHdyaXRlIHByb3RlY3QgdGhlIGtlcm5lbCB0ZXh0LCB3aGljaCB3ZSBtYXkgc3RvcAotCSAqIGRvaW5nIG9uY2Ugd2UgdXNlIGxhcmdlIHBhZ2UgdHJhbnNsYXRpb25zIHRvIGNvdmVyCi0JICogdGhlIHN0YXRpYyBwYXJ0IG9mIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KKwkgKiBGYXVsdF92ZWN0b3JzIGFyZSBhcmNoaXRlY3R1cmFsbHkgcmVxdWlyZWQgdG8gYmUgYWxpZ25lZCBvbiBhIDJLCisJICogYm91bmRhcnkKIAkgKi8KIAogCS50ZXh0Ci0KLQkuYWxpZ24gNDA5NgorCS5hbGlnbiAyMDQ4CiAKIEVOVFJZKGZhdWx0X3ZlY3Rvcl8yMCkKIAkvKiBGaXJzdCB2ZWN0b3IgaXMgaW52YWxpZCAoMCkgKi8KQEAgLTExNDcsNyArMTE1OSw3IEBACiAJdGxiX2xvY2sJc3BjLHB0cCxwdGUsdDAsdDEsZHRsYl9jaGVja19hbGlhc18yMHcKIAl1cGRhdGVfYWNjZXNzZWQJcHRwLHB0ZSx0MCx0MQogCi0JbWFrZV9pbnNlcnRfdGxiCXNwYyxwdGUscHJvdAorCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QsdDEKIAkKIAlpZHRsYnQgICAgICAgICAgcHRlLHByb3QKIApAQCAtMTE3Myw3ICsxMTg1LDcgQEAKIAl0bGJfbG9jawlzcGMscHRwLHB0ZSx0MCx0MSxuYWR0bGJfY2hlY2tfYWxpYXNfMjB3CiAJdXBkYXRlX2FjY2Vzc2VkCXB0cCxwdGUsdDAsdDEKIAotCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QKKwltYWtlX2luc2VydF90bGIJc3BjLHB0ZSxwcm90LHQxCiAKIAlpZHRsYnQgICAgICAgICAgcHRlLHByb3QKIApAQCAtMTI2Nyw3ICsxMjc5LDcgQEAKIAl0bGJfbG9jawlzcGMscHRwLHB0ZSx0MCx0MSxkdGxiX2NoZWNrX2FsaWFzXzIwCiAJdXBkYXRlX2FjY2Vzc2VkCXB0cCxwdGUsdDAsdDEKIAotCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QKKwltYWtlX2luc2VydF90bGIJc3BjLHB0ZSxwcm90LHQxCiAKIAlmX2V4dGVuZAlwdGUsdDEKIApAQCAtMTI5NSw3ICsxMzA3LDcgQEAKIAl0bGJfbG9jawlzcGMscHRwLHB0ZSx0MCx0MSxuYWR0bGJfY2hlY2tfYWxpYXNfMjAKIAl1cGRhdGVfYWNjZXNzZWQJcHRwLHB0ZSx0MCx0MQogCi0JbWFrZV9pbnNlcnRfdGxiCXNwYyxwdGUscHJvdAorCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QsdDEKIAogCWZfZXh0ZW5kCXB0ZSx0MQogCQpAQCAtMTQwNCw3ICsxNDE2LDcgQEAKIAl0bGJfbG9jawlzcGMscHRwLHB0ZSx0MCx0MSxpdGxiX2ZhdWx0CiAJdXBkYXRlX2FjY2Vzc2VkCXB0cCxwdGUsdDAsdDEKIAotCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QKKwltYWtlX2luc2VydF90bGIJc3BjLHB0ZSxwcm90LHQxCiAJCiAJaWl0bGJ0ICAgICAgICAgIHB0ZSxwcm90CiAKQEAgLTE0MjgsNyArMTQ0MCw3IEBACiAJdGxiX2xvY2sJc3BjLHB0cCxwdGUsdDAsdDEsbmFpdGxiX2NoZWNrX2FsaWFzXzIwdwogCXVwZGF0ZV9hY2Nlc3NlZAlwdHAscHRlLHQwLHQxCiAKLQltYWtlX2luc2VydF90bGIJc3BjLHB0ZSxwcm90CisJbWFrZV9pbnNlcnRfdGxiCXNwYyxwdGUscHJvdCx0MQogCiAJaWl0bGJ0ICAgICAgICAgIHB0ZSxwcm90CiAKQEAgLTE1MTQsNyArMTUyNiw3IEBACiAJdGxiX2xvY2sJc3BjLHB0cCxwdGUsdDAsdDEsaXRsYl9mYXVsdAogCXVwZGF0ZV9hY2Nlc3NlZAlwdHAscHRlLHQwLHQxCiAKLQltYWtlX2luc2VydF90bGIJc3BjLHB0ZSxwcm90CisJbWFrZV9pbnNlcnRfdGxiCXNwYyxwdGUscHJvdCx0MQogCiAJZl9leHRlbmQJcHRlLHQxCiAKQEAgLTE1MzQsNyArMTU0Niw3IEBACiAJdGxiX2xvY2sJc3BjLHB0cCxwdGUsdDAsdDEsbmFpdGxiX2NoZWNrX2FsaWFzXzIwCiAJdXBkYXRlX2FjY2Vzc2VkCXB0cCxwdGUsdDAsdDEKIAotCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QKKwltYWtlX2luc2VydF90bGIJc3BjLHB0ZSxwcm90LHQxCiAKIAlmX2V4dGVuZAlwdGUsdDEKIApAQCAtMTU2Niw3ICsxNTc4LDcgQEAKIAl0bGJfbG9jawlzcGMscHRwLHB0ZSx0MCx0MSxkYml0X2ZhdWx0CiAJdXBkYXRlX2RpcnR5CXB0cCxwdGUsdDEKIAotCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QKKwltYWtlX2luc2VydF90bGIJc3BjLHB0ZSxwcm90LHQxCiAJCQogCWlkdGxidCAgICAgICAgICBwdGUscHJvdAogCkBAIC0xNjEwLDcgKzE2MjIsNyBAQAogCXRsYl9sb2NrCXNwYyxwdHAscHRlLHQwLHQxLGRiaXRfZmF1bHQKIAl1cGRhdGVfZGlydHkJcHRwLHB0ZSx0MQogCi0JbWFrZV9pbnNlcnRfdGxiCXNwYyxwdGUscHJvdAorCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QsdDEKIAogCWZfZXh0ZW5kCXB0ZSx0MQogCQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKaW5kZXggZTdkNjQ1Mi4uNzVhYTBkYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCkBAIC02OSw3ICs2OSw3IEBACiAJc3R3LG1hICAgICAgICAgICVhcmcyLDQoJXIxKQogCXN0dyxtYSAgICAgICAgICAlYXJnMyw0KCVyMSkKIAotCS8qIEluaXRpYWxpemUgc3RhcnR1cCBWTS4gSnVzdCBtYXAgZmlyc3QgOC8xNiBNQiBvZiBtZW1vcnkgKi8KKwkvKiBJbml0aWFsaXplIHN0YXJ0dXAgVk0uIEp1c3QgbWFwIGZpcnN0IDE2LzMyIE1CIG9mIG1lbW9yeSAqLwogCWxvYWQzMgkJUEEoc3dhcHBlcl9wZ19kaXIpLCVyNAogCW10Y3RsCQklcjQsJWNyMjQJLyogSW5pdGlhbGl6ZSBrZXJuZWwgcm9vdCBwb2ludGVyICovCiAJbXRjdGwJCSVyNCwlY3IyNQkvKiBJbml0aWFsaXplIHVzZXIgcm9vdCBwb2ludGVyICovCkBAIC0xMDcsNyArMTA3LDcgQEAKIAkvKiBOb3cgaW5pdGlhbGl6ZSB0aGUgUFRFcyB0aGVtc2VsdmVzLiAgV2UgdXNlIFJXWCBmb3IKIAkgKiBldmVyeXRoaW5nIC4uLiBpdCB3aWxsIGdldCByZW1hcHBlZCBjb3JyZWN0bHkgbGF0ZXIgKi8KIAlsZG8JCTArX1BBR0VfS0VSTkVMX1JXWCglcjApLCVyMyAvKiBIYXJkd2lyZWQgMCBwaHlzIGFkZHIgc3RhcnQgKi8KLQlsZGkJCSgxPDwoS0VSTkVMX0lOSVRJQUxfT1JERVItUEFHRV9TSElGVCkpLCVyMTEgLyogUEZOIGNvdW50ICovCisJbG9hZDMyCQkoMTw8KEtFUk5FTF9JTklUSUFMX09SREVSLVBBR0VfU0hJRlQpKSwlcjExIC8qIFBGTiBjb3VudCAqLwogCWxvYWQzMgkJUEEocGcwKSwlcjEKIAogJHBndF9maWxsX2xvb3A6CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMKaW5kZXggNjRmMjc2NC4uYzk5ZjNkZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYwpAQCAtMTcxLDI0ICsxNzEsNiBAQAogfQogCiAKLXZvaWQgX19pbml0IHBjaWJpb3NfaW5pdF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gYnVzLT5zZWxmOwotCXVuc2lnbmVkIHNob3J0IGJyaWRnZV9jdGw7Ci0KLQkvKiBXZSBkZWFsIG9ubHkgd2l0aCBwY2kgY29udHJvbGxlcnMgYW5kIHBjaS1wY2kgYnJpZGdlcy4gKi8KLQlpZiAoIWRldiB8fCAoZGV2LT5jbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSkKLQkJcmV0dXJuOwotCi0JLyogUENJLVBDSSBicmlkZ2UgLSBzZXQgdGhlIGNhY2hlIGxpbmUgYW5kIGRlZmF1bHQgbGF0ZW5jeQotCSAgICgzMikgZm9yIHByaW1hcnkgYW5kIHNlY29uZGFyeSBidXNlcy4gKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfU0VDX0xBVEVOQ1lfVElNRVIsIDMyKTsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0JSSURHRV9DT05UUk9MLCAmYnJpZGdlX2N0bCk7Ci0JYnJpZGdlX2N0bCB8PSBQQ0lfQlJJREdFX0NUTF9QQVJJVFkgfCBQQ0lfQlJJREdFX0NUTF9TRVJSOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgYnJpZGdlX2N0bCk7Ci19Ci0KIC8qCiAgKiBwY2liaW9zIGFsaWduIHJlc291cmNlcygpIGlzIGNhbGxlZCBldmVyeSB0aW1lIGdlbmVyaWMgUENJIGNvZGUKICAqIHdhbnRzIHRvIGdlbmVyYXRlIGEgbmV3IGFkZHJlc3MuIFRoZSBwcm9jZXNzIG9mIGxvb2tpbmcgZm9yCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jCmluZGV4IDcyYTNjNjUuLmY3ZWE2MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zZXR1cC5jCkBAIC0xMzAsNyArMTMwLDE2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiVGhlIDMyLWJpdCBLZXJuZWwgaGFzIHN0YXJ0ZWQuLi5cbiIpOwogI2VuZGlmCiAKLQlwcmludGsoS0VSTl9JTkZPICJEZWZhdWx0IHBhZ2Ugc2l6ZSBpcyAlZEtCLlxuIiwgKGludCkoUEFHRV9TSVpFIC8gMTAyNCkpOworCXByaW50ayhLRVJOX0lORk8gIktlcm5lbCBkZWZhdWx0IHBhZ2Ugc2l6ZSBpcyAlZCBLQi4gSHVnZSBwYWdlcyAiLAorCQkoaW50KShQQUdFX1NJWkUgLyAxMDI0KSk7CisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorCXByaW50ayhLRVJOX0NPTlQgImVuYWJsZWQgd2l0aCAlZCBNQiBwaHlzaWNhbCBhbmQgJWQgTUIgdmlydHVhbCBzaXplIiwKKwkJIDEgPDwgKFJFQUxfSFBBR0VfU0hJRlQgLSAyMCksIDEgPDwgKEhQQUdFX1NISUZUIC0gMjApKTsKKyNlbHNlCisJcHJpbnRrKEtFUk5fQ09OVCAiZGlzYWJsZWQiKTsKKyNlbmRpZgorCXByaW50ayhLRVJOX0NPTlQgIi5cbiIpOworCiAKIAlwZGNfY29uc29sZV9pbml0KCk7CiAKQEAgLTM3Nyw2ICszODYsNyBAQAogdm9pZCBzdGFydF9wYXJpc2Modm9pZCkKIHsKIAlleHRlcm4gdm9pZCBzdGFydF9rZXJuZWwodm9pZCk7CisJZXh0ZXJuIHZvaWQgZWFybHlfdHJhcF9pbml0KHZvaWQpOwogCiAJaW50IHJldCwgY3B1bnVtOwogCXN0cnVjdCBwZGNfY29wcm9jX2NmZyBjb3Byb2NfY2ZnOwpAQCAtMzk3LDYgKzQwNyw4IEBACiAJCXBhbmljKCJtdXN0IGhhdmUgYW4gZnB1IHRvIGJvb3QgbGludXgiKTsKIAl9CiAKKwllYXJseV90cmFwX2luaXQoKTsgLyogaW5pdGlhbGl6ZSBjaGVja3N1bSBvZiBmYXVsdF92ZWN0b3IgKi8KKwogCXN0YXJ0X2tlcm5lbCgpOwogCS8vIG5vdCByZWFjaGVkCiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZGMxZWE3OS4uMjI2NGY2OCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwpAQCAtNDM1LDYgKzQzNSw1NSBAQAogCQlyZWdzLT5nclsyOF0pOwogfQogCisvKgorICogQ2hlY2sgaG93IHRoZSBzeXNjYWxsIG51bWJlciBnZXRzIGxvYWRlZCBpbnRvICVyMjAgd2l0aGluCisgKiB0aGUgZGVsYXkgYnJhbmNoIGluIHVzZXJzcGFjZSBhbmQgYWRqdXN0IGFzIG5lZWRlZC4KKyAqLworCitzdGF0aWMgdm9pZCBjaGVja19zeXNjYWxsbm9faW5fZGVsYXlfYnJhbmNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXUzMiBvcGNvZGUsIHNvdXJjZV9yZWc7CisJdTMyIF9fdXNlciAqdWFkZHI7CisJaW50IGVycjsKKworCS8qIFVzdWFsbHkgd2UgZG9uJ3QgaGF2ZSB0byByZXN0b3JlICVyMjAgKHRoZSBzeXN0ZW0gY2FsbCBudW1iZXIpCisJICogYmVjYXVzZSBpdCBnZXRzIGxvYWRlZCBpbiB0aGUgZGVsYXkgc2xvdCBvZiB0aGUgYnJhbmNoIGV4dGVybmFsCisJICogaW5zdHJ1Y3Rpb24gdmlhIHRoZSBsZGkgaW5zdHJ1Y3Rpb24uCisJICogSW4gc29tZSBjYXNlcyBhIHJlZ2lzdGVyLXRvLXJlZ2lzdGVyIGNvcHkgaW5zdHJ1Y3Rpb24gbWlnaHQgaGF2ZQorCSAqIGJlZW4gdXNlZCBpbnN0ZWFkLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gY29weSB0aGUgc3lzY2FsbAorCSAqIG51bWJlciBpbnRvIHRoZSBzb3VyY2UgcmVnaXN0ZXIgYmVmb3JlIHJldHVybmluZyB0byB1c2Vyc3BhY2UuCisJICovCisKKwkvKiBBIHN5c2NhbGwgaXMganVzdCBhIGJyYW5jaCwgc28gYWxsIHdlIGhhdmUgdG8gZG8gaXMgZmlkZGxlIHRoZQorCSAqIHJldHVybiBwb2ludGVyIHNvIHRoYXQgdGhlIGJsZSBpbnN0cnVjdGlvbiBnZXRzIGV4ZWN1dGVkIGFnYWluLgorCSAqLworCXJlZ3MtPmdyWzMxXSAtPSA4OyAvKiBkZWxheWVkIGJyYW5jaGluZyAqLworCisJLyogR2V0IGFzc2VtYmxlciBvcGNvZGUgb2YgY29kZSBpbiBkZWxheSBicmFuY2ggKi8KKwl1YWRkciA9ICh1bnNpZ25lZCBpbnQgKikgKChyZWdzLT5nclszMV0gJiB+MykgKyA0KTsKKwllcnIgPSBnZXRfdXNlcihvcGNvZGUsIHVhZGRyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiBkZWxheSBicmFuY2ggdXNlcyAibGRpIGludCwlcjIwIiAqLworCWlmICgob3Bjb2RlICYgMHhmZmZmMDAwMCkgPT0gMHgzNDE0MDAwMCkKKwkJcmV0dXJuOwkvKiBldmVyeXRoaW5nIG9rLCBqdXN0IHJldHVybiAqLworCisJLyogQ2hlY2sgaWYgZGVsYXkgYnJhbmNoIHVzZXMgIm5vcCIgKi8KKwlpZiAob3Bjb2RlID09IElOU05fTk9QKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiBkZWxheSBicmFuY2ggdXNlcyAiY29weSAlclgsJXIyMCIgKi8KKwlpZiAoKG9wY29kZSAmIDB4ZmZlMGZmZmYpID09IDB4MDgwMDAyNTQpIHsKKwkJc291cmNlX3JlZyA9IChvcGNvZGUgPj4gMTYpICYgMzE7CisJCXJlZ3MtPmdyW3NvdXJjZV9yZWddID0gcmVncy0+Z3JbMjBdOworCQlyZXR1cm47CisJfQorCisJcHJfd2Fybigic3lzY2FsbCByZXN0YXJ0OiAlcyAocGlkICVkKTogdW5leHBlY3RlZCBvcGNvZGUgMHglMDh4XG4iLAorCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgb3Bjb2RlKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBzeXNjYWxsX3Jlc3RhcnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EpCiB7CkBAIC00NTcsMTAgKzUwNiw3IEBACiAJCX0KIAkJLyogZmFsbHRocm91Z2ggKi8KIAljYXNlIC1FUkVTVEFSVE5PSU5UUjoKLQkJLyogQSBzeXNjYWxsIGlzIGp1c3QgYSBicmFuY2gsIHNvIGFsbAotCQkgKiB3ZSBoYXZlIHRvIGRvIGlzIGZpZGRsZSB0aGUgcmV0dXJuIHBvaW50ZXIuCi0JCSAqLwotCQlyZWdzLT5nclszMV0gLT0gODsgLyogZGVsYXllZCBicmFuY2hpbmcgKi8KKwkJY2hlY2tfc3lzY2FsbG5vX2luX2RlbGF5X2JyYW5jaChyZWdzKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNTEwLDE1ICs1NTYsOSBAQAogCX0KIAljYXNlIC1FUkVTVEFSVE5PSEFORDoKIAljYXNlIC1FUkVTVEFSVFNZUzoKLQljYXNlIC1FUkVTVEFSVE5PSU5UUjogewotCQkvKiBIb29yYXkgZm9yIGRlbGF5ZWQgYnJhbmNoaW5nLiAgV2UgZG9uJ3QKLQkJICogaGF2ZSB0byByZXN0b3JlICVyMjAgKHRoZSBzeXN0ZW0gY2FsbAotCQkgKiBudW1iZXIpIGJlY2F1c2UgaXQgZ2V0cyBsb2FkZWQgaW4gdGhlIGRlbGF5Ci0JCSAqIHNsb3Qgb2YgdGhlIGJyYW5jaCBleHRlcm5hbCBpbnN0cnVjdGlvbi4KLQkJICovCi0JCXJlZ3MtPmdyWzMxXSAtPSA4OworCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgorCQljaGVja19zeXNjYWxsbm9faW5fZGVsYXlfYnJhbmNoKHJlZ3MpOwogCQlyZXR1cm47Ci0JfQogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCmluZGV4IDBiOGQyNmQuLjNmYmQ3MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJbGRvCS0xNiglcjMwKSwlcjI5CQkJLyogUmVmZXJlbmNlIHBhcmFtIHNhdmUgYXJlYSAqLwogI2VuZGlmCiAJbGRvCVRBU0tfUkVHUyglcjEpLCVyMjYKLQlibAlkb19zeXNjYWxsX3RyYWNlX2V4aXQsJXIyCisJQkwJZG9fc3lzY2FsbF90cmFjZV9leGl0LCVyMgogCVNUUkVHICAgJXIyOCxUQVNLX1BUX0dSMjgoJXIxKSAgICAgICAgICAvKiBzYXZlIHJldHVybiB2YWx1ZSBub3cgKi8KIAlsZG8gICAgIC1USFJFQURfU1pfQUxHTi1GUkFNRV9TSVpFKCVyMzApLCVyMSAgICAgIC8qIGdldCB0YXNrIHB0ciAqLwogCUxEUkVHCVRJX1RBU0soJXIxKSwgJXIxCkBAIC0zOTAsNyArMzkwLDcgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAlsZG8JLTE2KCVyMzApLCVyMjkJCQkvKiBSZWZlcmVuY2UgcGFyYW0gc2F2ZSBhcmVhICovCiAjZW5kaWYKLQlibAlkb19zeXNjYWxsX3RyYWNlX2V4aXQsJXIyCisJQkwJZG9fc3lzY2FsbF90cmFjZV9leGl0LCVyMgogCWxkbwlUQVNLX1JFR1MoJXIxKSwlcjI2CiAKIAlsZGlsCUwlc3lzY2FsbF9leGl0X3JmaSwlcjEKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IDc4YzNlZjguLmQ0ZmZjZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtNDQwLDYgKzQ0MCw3IEBACiAJRU5UUllfQ09NUChleGVjdmVhdCkKIAlFTlRSWV9TQU1FKG1lbWJhcnJpZXIpCiAJRU5UUllfU0FNRSh1c2VyZmF1bHRmZCkKKwlFTlRSWV9TQU1FKG1sb2NrMikJCS8qIDM0NSAqLwogCiAKIC5pZm5lICguIC0gOTBiKSAtIChfX05SX0xpbnV4X3N5c2NhbGxzICogKDkxYiAtIDkwYikpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jCmluZGV4IGI5OWIzOWYuLjU1M2IwOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90cmFwcy5jCkBAIC04MDcsNyArODA3LDcgQEAKIH0KIAogCi1pbnQgX19pbml0IGNoZWNrX2l2dCh2b2lkICppdmEpCit2b2lkIF9faW5pdCBpbml0aWFsaXplX2l2dChjb25zdCB2b2lkICppdmEpCiB7CiAJZXh0ZXJuIHUzMiBvc19ocG1jX3NpemU7CiAJZXh0ZXJuIGNvbnN0IHUzMiBvc19ocG1jW107CkBAIC04MTgsOCArODE4LDggQEAKIAl1MzIgKmhwbWNwOwogCXUzMiBsZW5ndGg7CiAKLQlpZiAoc3RyY21wKChjaGFyICopaXZhLCAiY293cyBjYW4gZmx5IikpCi0JCXJldHVybiAtMTsKKwlpZiAoc3RyY21wKChjb25zdCBjaGFyICopaXZhLCAiY293cyBjYW4gZmx5IikpCisJCXBhbmljKCJJVlQgaW52YWxpZCIpOwogCiAJaXZhcCA9ICh1MzIgKilpdmE7CiAKQEAgLTgzOSwyOCArODM5LDIzIEBACiAJICAgIGNoZWNrICs9IGl2YXBbaV07CiAKIAlpdmFwWzVdID0gLWNoZWNrOwotCi0JcmV0dXJuIDA7CiB9CiAJCisKKy8qIGVhcmx5X3RyYXBfaW5pdCgpIGlzIGNhbGxlZCBiZWZvcmUgd2Ugc2V0IHVwIGtlcm5lbCBtYXBwaW5ncyBhbmQKKyAqIHdyaXRlLXByb3RlY3QgdGhlIGtlcm5lbCAqLwordm9pZCAgX19pbml0IGVhcmx5X3RyYXBfaW5pdCh2b2lkKQoreworCWV4dGVybiBjb25zdCB2b2lkIGZhdWx0X3ZlY3Rvcl8yMDsKKwogI2lmbmRlZiBDT05GSUdfNjRCSVQKLWV4dGVybiBjb25zdCB2b2lkIGZhdWx0X3ZlY3Rvcl8xMTsKKwlleHRlcm4gY29uc3Qgdm9pZCBmYXVsdF92ZWN0b3JfMTE7CisJaW5pdGlhbGl6ZV9pdnQoJmZhdWx0X3ZlY3Rvcl8xMSk7CiAjZW5kaWYKLWV4dGVybiBjb25zdCB2b2lkIGZhdWx0X3ZlY3Rvcl8yMDsKKworCWluaXRpYWxpemVfaXZ0KCZmYXVsdF92ZWN0b3JfMjApOworfQogCiB2b2lkIF9faW5pdCB0cmFwX2luaXQodm9pZCkKIHsKLQl2b2lkICppdmE7Ci0KLQlpZiAoYm9vdF9jcHVfZGF0YS5jcHVfdHlwZSA+PSBwY3h1KQotCQlpdmEgPSAodm9pZCAqKSAmZmF1bHRfdmVjdG9yXzIwOwotCWVsc2UKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJcGFuaWMoIkNhbid0IGJvb3QgNjQtYml0IE9TIG9uIFBBMS4xIHByb2Nlc3NvciEiKTsKLSNlbHNlCi0JCWl2YSA9ICh2b2lkICopICZmYXVsdF92ZWN0b3JfMTE7Ci0jZW5kaWYKLQotCWlmIChjaGVja19pdnQoaXZhKSkKLQkJcGFuaWMoIklWVCBpbnZhbGlkIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDBkYWNjNWMuLjMwOGYyOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02MCw3ICs2MCw3IEBACiAJCUVYSVRfREFUQQogCX0KIAlQRVJDUFVfU0VDVElPTig4KQotCS4gPSBBTElHTihQQUdFX1NJWkUpOworCS4gPSBBTElHTihIVUdFUEFHRV9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsKIAkvKiBmcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkgKiB0aGF0IHdlIGNhbiBwcm9wZXJseSBsZWF2ZSB0aGVzZQogCSAqIGFzIHdyaXRhYmxlCiAJICovCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJLiA9IEFMSUdOKEhVR0VQQUdFX1NJWkUpOwogCWRhdGFfc3RhcnQgPSAuOwogCiAJRVhDRVBUSU9OX1RBQkxFKDgpCkBAIC0xMzUsOCArMTM1LDExIEBACiAJX2VkYXRhID0gLjsKIAogCS8qIEJTUyAqLwotCUJTU19TRUNUSU9OKFBBR0VfU0laRSwgUEFHRV9TSVpFLCA4KQorCUJTU19TRUNUSU9OKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpCiAKKwkvKiBib290bWFwIGlzIGFsbG9jYXRlZCBpbiBzZXR1cF9ib290bWVtKCkgZGlyZWN0bHkgYmVoaW5kIGJzcy4gKi8KKworCS4gPSBBTElHTihIVUdFUEFHRV9TSVpFKTsKIAlfZW5kID0gLiA7CiAKIAlTVEFCU19ERUJVRwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vTWFrZWZpbGUgYi9hcmNoL3BhcmlzYy9tbS9NYWtlZmlsZQppbmRleCA3NThjZWVmLi4xMzQzOTNkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3BhcmlzYy9tbS9NYWtlZmlsZQpAQCAtMywzICszLDQgQEAKICMKIAogb2JqLXkJIDo9IGluaXQubyBmYXVsdC5vIGlvcmVtYXAubworb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgKz0gaHVnZXRsYnBhZ2UubwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvcGFyaXNjL21tL2h1Z2V0bGJwYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmZGM3NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBQQVJJU0M2NCBIdWdlIFRMQiBwYWdlIHN1cHBvcnQuCisgKgorICogVGhpcyBwYXJpc2MgaW1wbGVtZW50YXRpb24gaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgU1BBUkMgYW5kIHg4NiBjb2RlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBIZWxnZSBEZWxsZXIgPGRlbGxlckBnbXguZGU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorCisjaW5jbHVkZSA8YXNtL21tYW4uaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorCisKK3Vuc2lnbmVkIGxvbmcKK2h1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpOworCisJaWYgKGxlbiAmIH5odWdlX3BhZ2VfbWFzayhoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGxlbiA+IFRBU0tfU0laRSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoZmxhZ3MgJiBNQVBfRklYRUQpCisJCWlmIChwcmVwYXJlX2h1Z2VwYWdlX3JhbmdlKGZpbGUsIGFkZHIsIGxlbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGRyKQorCQlhZGRyID0gQUxJR04oYWRkciwgaHVnZV9wYWdlX3NpemUoaCkpOworCisJLyogd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNvbG91cmluZyBpcyBPSyAqLworCXJldHVybiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzKTsKK30KKworCitwdGVfdCAqaHVnZV9wdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc3opCit7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZSA9IE5VTEw7CisKKwkvKiBXZSBtdXN0IGFsaWduIHRoZSBhZGRyZXNzLCBiZWNhdXNlIG91ciBjYWxsZXIgd2lsbCBydW4KKwkgKiBzZXRfaHVnZV9wdGVfYXQoKSBvbiB3aGF0ZXZlciB3ZSByZXR1cm4sIHdoaWNoIHdyaXRlcyBvdXQKKwkgKiBhbGwgb2YgdGhlIHN1Yi1wdGVzIGZvciB0aGUgaHVnZXBhZ2UgcmFuZ2UuICBTbyB3ZSBoYXZlCisJICogdG8gZ2l2ZSBpdCB0aGUgZmlyc3Qgc3VjaCBzdWItcHRlLgorCSAqLworCWFkZHIgJj0gSFBBR0VfTUFTSzsKKworCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOworCXB1ZCA9IHB1ZF9hbGxvYyhtbSwgcGdkLCBhZGRyKTsKKwlpZiAocHVkKSB7CisJCXBtZCA9IHBtZF9hbGxvYyhtbSwgcHVkLCBhZGRyKTsKKwkJaWYgKHBtZCkKKwkJCXB0ZSA9IHB0ZV9hbGxvY19tYXAobW0sIE5VTEwsIHBtZCwgYWRkcik7CisJfQorCXJldHVybiBwdGU7Cit9CisKK3B0ZV90ICpodWdlX3B0ZV9vZmZzZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlID0gTlVMTDsKKworCWFkZHIgJj0gSFBBR0VfTUFTSzsKKworCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOworCWlmICghcGdkX25vbmUoKnBnZCkpIHsKKwkJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCQlpZiAoIXB1ZF9ub25lKCpwdWQpKSB7CisJCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJCQlpZiAoIXBtZF9ub25lKCpwbWQpKQorCQkJCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CisJCX0KKwl9CisJcmV0dXJuIHB0ZTsKK30KKworLyogUHVyZ2UgZGF0YSBhbmQgaW5zdHJ1Y3Rpb24gVExCIGVudHJpZXMuICBNdXN0IGJlIGNhbGxlZCBob2xkaW5nCisgKiB0aGUgcGFfdGxiX2xvY2suICBUaGUgVExCIHB1cmdlIGluc3RydWN0aW9ucyBhcmUgc2xvdyBvbiBTTVAKKyAqIG1hY2hpbmVzIHNpbmNlIHRoZSBwdXJnZSBtdXN0IGJlIGJyb2FkY2FzdCB0byBhbGwgQ1BVcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHB1cmdlX3RsYl9lbnRyaWVzX2h1Z2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpbnQgaTsKKworCS8qIFdlIG1heSB1c2UgbXVsdGlwbGUgcGh5c2ljYWwgaHVnZSBwYWdlcyAoZS5nLiAyeDEgTUIpIHRvIGVtdWxhdGUKKwkgKiBMaW51eCBzdGFuZGFyZCBodWdlIHBhZ2VzIChlLmcuIDIgTUIpICovCisJQlVJTERfQlVHX09OKFJFQUxfSFBBR0VfU0hJRlQgPiBIUEFHRV9TSElGVCk7CisKKwlhZGRyICY9IEhQQUdFX01BU0s7CisJYWRkciB8PSBfSFVHRV9QQUdFX1NJWkVfRU5DT0RJTkdfREVGQVVMVDsKKworCWZvciAoaSA9IDA7IGkgPCAoMSA8PCAoSFBBR0VfU0hJRlQtUkVBTF9IUEFHRV9TSElGVCkpOyBpKyspIHsKKwkJbXRzcChtbS0+Y29udGV4dCwgMSk7CisJCXBkdGxiKGFkZHIpOworCQlpZiAodW5saWtlbHkoc3BsaXRfdGxiKSkKKwkJCXBpdGxiKGFkZHIpOworCQlhZGRyICs9ICgxVUwgPDwgUkVBTF9IUEFHRV9TSElGVCk7CisJfQorfQorCit2b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHJfc3RhcnQ7CisJaW50IGk7CisKKwlhZGRyICY9IEhQQUdFX01BU0s7CisJYWRkcl9zdGFydCA9IGFkZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgSFVHRVRMQl9QQUdFX09SREVSKTsgaSsrKSB7CisJCS8qIERpcmVjdGx5IHdyaXRlIHB0ZSBlbnRyeS4gIFdlIGNvdWxkIGNhbGwgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgZW50cnkpCisJCSAqIGluc3RlYWQsIGJ1dCB0aGVuIHdlIGdldCBkb3VibGUgbG9ja2luZyBvbiBwYV90bGJfbG9jay4gKi8KKwkJKnB0ZXAgPSBlbnRyeTsKKwkJcHRlcCsrOworCisJCS8qIERyb3AgdGhlIFBBR0VfU0laRS9ub24taHVnZSB0bGIgZW50cnkgKi8KKwkJcHVyZ2VfdGxiX2VudHJpZXMobW0sIGFkZHIpOworCisJCWFkZHIgKz0gUEFHRV9TSVpFOworCQlwdGVfdmFsKGVudHJ5KSArPSBQQUdFX1NJWkU7CisJfQorCisJcHVyZ2VfdGxiX2VudHJpZXNfaHVnZShtbSwgYWRkcl9zdGFydCk7Cit9CisKKworcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHB0ZV90ICpwdGVwKQoreworCXB0ZV90IGVudHJ5OworCisJZW50cnkgPSAqcHRlcDsKKwlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIF9fcHRlKDApKTsKKworCXJldHVybiBlbnRyeTsKK30KKworaW50IHBtZF9odWdlKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHB1ZF9odWdlKHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2luaXQuYyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwppbmRleCBjNWZlYzQ4Li4xYjM2NmM0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCkBAIC00MDksMTUgKzQwOSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgdmFkZHI7CiAJdW5zaWduZWQgbG9uZyByb19zdGFydDsKIAl1bnNpZ25lZCBsb25nIHJvX2VuZDsKLQl1bnNpZ25lZCBsb25nIGZ2X2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBnd19hZGRyOwotCWV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIGZhdWx0X3ZlY3Rvcl8yMDsKLQlleHRlcm4gdm9pZCAqIGNvbnN0IGxpbnV4X2dhdGV3YXlfcGFnZTsKKwl1bnNpZ25lZCBsb25nIGtlcm5lbF9lbmQ7CiAKIAlyb19zdGFydCA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpX3RleHQpOwogCXJvX2VuZCAgID0gX19wYSgodW5zaWduZWQgbG9uZykmZGF0YV9zdGFydCk7Ci0JZnZfYWRkciAgPSBfX3BhKCh1bnNpZ25lZCBsb25nKSZmYXVsdF92ZWN0b3JfMjApICYgUEFHRV9NQVNLOwotCWd3X2FkZHIgID0gX19wYSgodW5zaWduZWQgbG9uZykmbGludXhfZ2F0ZXdheV9wYWdlKSAmIFBBR0VfTUFTSzsKKwlrZXJuZWxfZW5kICA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpJl9lbmQpOwogCiAJZW5kX3BhZGRyID0gc3RhcnRfcGFkZHIgKyBzaXplOwogCkBAIC00NzUsMjQgKzQ3MSwyNSBAQAogCQkJZm9yICh0bXAyID0gc3RhcnRfcHRlOyB0bXAyIDwgUFRSU19QRVJfUFRFOyB0bXAyKyssIHBnX3RhYmxlKyspIHsKIAkJCQlwdGVfdCBwdGU7CiAKLQkJCQkvKgotCQkJCSAqIE1hcCB0aGUgZmF1bHQgdmVjdG9yIHdyaXRhYmxlIHNvIHdlIGNhbgotCQkJCSAqIHdyaXRlIHRoZSBIUE1DIGNoZWNrc3VtLgotCQkJCSAqLwogCQkJCWlmIChmb3JjZSkKIAkJCQkJcHRlID0gIF9fbWtfcHRlKGFkZHJlc3MsIHBncHJvdCk7Ci0JCQkJZWxzZSBpZiAocGFyaXNjX3RleHRfYWRkcmVzcyh2YWRkcikgJiYKLQkJCQkJIGFkZHJlc3MgIT0gZnZfYWRkcikKKwkJCQllbHNlIGlmIChwYXJpc2NfdGV4dF9hZGRyZXNzKHZhZGRyKSkgewogCQkJCQlwdGUgPSBfX21rX3B0ZShhZGRyZXNzLCBQQUdFX0tFUk5FTF9FWEVDKTsKKwkJCQkJaWYgKGFkZHJlc3MgPj0gcm9fc3RhcnQgJiYgYWRkcmVzcyA8IGtlcm5lbF9lbmQpCisJCQkJCQlwdGUgPSBwdGVfbWtodWdlKHB0ZSk7CisJCQkJfQogCQkJCWVsc2UKICNpZiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQikKLQkJCQlpZiAoYWRkcmVzcyA+PSByb19zdGFydCAmJiBhZGRyZXNzIDwgcm9fZW5kCi0JCQkJCQkJJiYgYWRkcmVzcyAhPSBmdl9hZGRyCi0JCQkJCQkJJiYgYWRkcmVzcyAhPSBnd19hZGRyKQotCQkJCQlwdGUgPSBfX21rX3B0ZShhZGRyZXNzLCBQQUdFX0tFUk5FTF9STyk7Ci0JCQkJZWxzZQorCQkJCWlmIChhZGRyZXNzID49IHJvX3N0YXJ0ICYmIGFkZHJlc3MgPCByb19lbmQpIHsKKwkJCQkJcHRlID0gX19ta19wdGUoYWRkcmVzcywgUEFHRV9LRVJORUxfRVhFQyk7CisJCQkJCXB0ZSA9IHB0ZV9ta2h1Z2UocHRlKTsKKwkJCQl9IGVsc2UKICNlbmRpZgorCQkJCXsKIAkJCQkJcHRlID0gX19ta19wdGUoYWRkcmVzcywgcGdwcm90KTsKKwkJCQkJaWYgKGFkZHJlc3MgPj0gcm9fc3RhcnQgJiYgYWRkcmVzcyA8IGtlcm5lbF9lbmQpCisJCQkJCQlwdGUgPSBwdGVfbWtodWdlKHB0ZSk7CisJCQkJfQogCiAJCQkJaWYgKGFkZHJlc3MgPj0gZW5kX3BhZGRyKSB7CiAJCQkJCWlmIChmb3JjZSkKQEAgLTUzNiwxNSArNTMzLDEyIEBACiAKIAkvKiBmb3JjZSB0aGUga2VybmVsIHRvIHNlZSB0aGUgbmV3IFRMQiBlbnRyaWVzICovCiAJX19mbHVzaF90bGJfcmFuZ2UoMCwgaW5pdF9iZWdpbiwgaW5pdF9lbmQpOwotCS8qIEF0dGVtcHQgdG8gY2F0Y2ggYW55b25lIHRyeWluZyB0byBleGVjdXRlIGNvZGUgaGVyZQotCSAqIGJ5IGZpbGxpbmcgdGhlIHBhZ2Ugd2l0aCBCUksgaW5zbnMuCi0JICovCi0JbWVtc2V0KCh2b2lkICopaW5pdF9iZWdpbiwgMHgwMCwgaW5pdF9lbmQgLSBpbml0X2JlZ2luKTsKKwogCS8qIGZpbmFsbHkgZHVtcCBhbGwgdGhlIGluc3RydWN0aW9ucyB3aGljaCB3ZXJlIGNhY2hlZCwgc2luY2UgdGhlCiAJICogcGFnZXMgYXJlIG5vLWxvbmdlciBleGVjdXRhYmxlICovCiAJZmx1c2hfaWNhY2hlX3JhbmdlKGluaXRfYmVnaW4sIGluaXRfZW5kKTsKIAkKLQlmcmVlX2luaXRtZW1fZGVmYXVsdCgtMSk7CisJZnJlZV9pbml0bWVtX2RlZmF1bHQoUE9JU09OX0ZSRUVfSU5JVE1FTSk7CiAKIAkvKiBzZXQgdXAgYSBuZXcgbGVkIHN0YXRlIG9uIHN5c3RlbXMgc2hpcHBlZCBMRUQgU3RhdGUgcGFuZWwgKi8KIAlwZGNfY2hhc3Npc19zZW5kX3N0YXR1cyhQRENfQ0hBU1NJU19ESVJFQ1RfQkNPTVBMRVRFKTsKQEAgLTcyOCw4ICs3MjIsOCBAQAogCQl1bnNpZ25lZCBsb25nIHNpemU7CiAKIAkJc3RhcnRfcGFkZHIgPSBwbWVtX3Jhbmdlc1tyYW5nZV0uc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JCWVuZF9wYWRkciA9IHN0YXJ0X3BhZGRyICsgKHBtZW1fcmFuZ2VzW3JhbmdlXS5wYWdlcyA8PCBQQUdFX1NISUZUKTsKIAkJc2l6ZSA9IHBtZW1fcmFuZ2VzW3JhbmdlXS5wYWdlcyA8PCBQQUdFX1NISUZUOworCQllbmRfcGFkZHIgPSBzdGFydF9wYWRkciArIHNpemU7CiAKIAkJbWFwX3BhZ2VzKCh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnRfcGFkZHIpLCBzdGFydF9wYWRkciwKIAkJCSAgc2l6ZSwgUEFHRV9LRVJORUwsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg2NDFkLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NjQxZC5kdHMKaW5kZXggNjMxZWRlNy4uNjhmMGVkNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg2NDFkLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODY0MWQuZHRzCkBAIC0yMjcsMjMgKzIyNywxNSBAQAogCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKIAogCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxZiB7Ci0JCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwogCQkJCQlyZWcgPSA8MHgxZj47CiAJCQkJfTsKIAkJCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwogCQkJCQlyZWcgPSA8MD47CiAJCQkJfTsKIAkJCQlwaHkyOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwogCQkJCQlyZWcgPSA8MT47CiAJCQkJfTsKIAkJCQlwaHkzOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwogCQkJCQlyZWcgPSA8Mj47CiAJCQkJfTsKIAkJCQl0YmkwOiB0YmktcGh5QDExIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAppbmRleCBhOTA4YWRhLi4yMjIwZjdhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCkBAIC0xMDgsNiArMTA4LDcgQEAKICNkZWZpbmUgTVNSX1RTX1QJX19NQVNLKE1TUl9UU19UX0xHKQkvKiAgVHJhbnNhY3Rpb24gVHJhbnNhY3Rpb25hbCAqLwogI2RlZmluZSBNU1JfVFNfTUFTSwkoTVNSX1RTX1QgfCBNU1JfVFNfUykgICAvKiBUcmFuc2FjdGlvbiBTdGF0ZSBiaXRzICovCiAjZGVmaW5lIE1TUl9UTV9BQ1RJVkUoeCkgKCgoeCkgJiBNU1JfVFNfTUFTSykgIT0gMCkgLyogVHJhbnNhY3Rpb24gYWN0aXZlPyAqLworI2RlZmluZSBNU1JfVE1fUkVTVih4KSAoKCh4KSAmIE1TUl9UU19NQVNLKSA9PSBNU1JfVFNfTUFTSykgLyogUmVzZXJ2ZWQgKi8KICNkZWZpbmUgTVNSX1RNX1RSQU5TQUNUSU9OQUwoeCkJKCgoeCkgJiBNU1JfVFNfTUFTSykgPT0gTVNSX1RTX1QpCiAjZGVmaW5lIE1TUl9UTV9TVVNQRU5ERUQoeCkJKCgoeCkgJiBNU1JfVFNfTUFTSykgPT0gTVNSX1RTX1MpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAppbmRleCBjOWUyNmNiLi41NjU0ZWNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC0zNzAsMTUgKzM3MCwxNiBAQAogUFBDNjRPTkxZKHN3aXRjaF9lbmRpYW4pCiBTWVNDQUxMX1NQVSh1c2VyZmF1bHRmZCkKIFNZU0NBTExfU1BVKG1lbWJhcnJpZXIpCi1TWVNDQUxMKHNlbW9wKQotU1lTQ0FMTChzZW1nZXQpCi1DT01QQVRfU1lTKHNlbWN0bCkKLUNPTVBBVF9TWVMoc2VtdGltZWRvcCkKLUNPTVBBVF9TWVMobXNnc25kKQotQ09NUEFUX1NZUyhtc2dyY3YpCi1TWVNDQUxMKG1zZ2dldCkKLUNPTVBBVF9TWVMobXNnY3RsKQotQ09NUEFUX1NZUyhzaG1hdCkKLVNZU0NBTEwoc2htZHQpCi1TWVNDQUxMKHNobWdldCkKLUNPTVBBVF9TWVMoc2htY3RsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQorU1lTQ0FMTChtbG9jazIpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggNmQ4ZjgwMi4uNGI2YjhhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPHVhcGkvYXNtL3VuaXN0ZC5oPgogCiAKLSNkZWZpbmUgX19OUl9zeXNjYWxscwkJMzc4CisjZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTM3OQogCiAjZGVmaW5lIF9fTlJfX2V4aXQgX19OUl9leGl0CiAjZGVmaW5lIE5SX3N5c2NhbGxzCV9fTlJfc3lzY2FsbHMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKaW5kZXggODE1NzllOS4uMTJhMDU2NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKQEAgLTM4OCwxNyArMzg4LDYgQEAKICNkZWZpbmUgX19OUl9zd2l0Y2hfZW5kaWFuCTM2MwogI2RlZmluZSBfX05SX3VzZXJmYXVsdGZkCTM2NAogI2RlZmluZSBfX05SX21lbWJhcnJpZXIJCTM2NQotI2RlZmluZSBfX05SX3NlbW9wCQkzNjYKLSNkZWZpbmUgX19OUl9zZW1nZXQJCTM2NwotI2RlZmluZSBfX05SX3NlbWN0bAkJMzY4Ci0jZGVmaW5lIF9fTlJfc2VtdGltZWRvcAkJMzY5Ci0jZGVmaW5lIF9fTlJfbXNnc25kCQkzNzAKLSNkZWZpbmUgX19OUl9tc2dyY3YJCTM3MQotI2RlZmluZSBfX05SX21zZ2dldAkJMzcyCi0jZGVmaW5lIF9fTlJfbXNnY3RsCQkzNzMKLSNkZWZpbmUgX19OUl9zaG1hdAkJMzc0Ci0jZGVmaW5lIF9fTlJfc2htZHQJCTM3NQotI2RlZmluZSBfX05SX3NobWdldAkJMzc2Ci0jZGVmaW5lIF9fTlJfc2htY3RsCQkzNzcKKyNkZWZpbmUgX19OUl9tbG9jazIJCTM3OAogCiAjZW5kaWYgLyogX1VBUElfQVNNX1BPV0VSUENfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9kcml2ZXIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jCmluZGV4IDgwZGZlODkuLjhkMTRmZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jCkBAIC01OTAsMTYgKzU5MCwxMCBAQAogCWVlaF9vcHMtPmNvbmZpZ3VyZV9icmlkZ2UocGUpOwogCWVlaF9wZV9yZXN0b3JlX2JhcnMocGUpOwogCi0JLyoKLQkgKiBJZiBpdCdzIFBIQiBQRSwgdGhlIGZyb3plbiBzdGF0ZSBvbiBhbGwgYXZhaWxhYmxlIFBFcyBzaG91bGQgaGF2ZQotCSAqIGJlZW4gY2xlYXJlZCBieSB0aGUgUEhCIHJlc2V0LiBPdGhlcndpc2UsIHdlIHVuZnJlZXplIHRoZSBQRSBhbmQgaXRzCi0JICogY2hpbGQgUEVzIGJlY2F1c2UgdGhleSBtaWdodCBiZSBpbiBmcm96ZW4gc3RhdGUuCi0JICovCi0JaWYgKCEocGUtPnR5cGUgJiBFRUhfUEVfUEhCKSkgewotCQlyYyA9IGVlaF9jbGVhcl9wZV9mcm96ZW5fc3RhdGUocGUsIGZhbHNlKTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCX0KKwkvKiBDbGVhciBmcm96ZW4gc3RhdGUgKi8KKwlyYyA9IGVlaF9jbGVhcl9wZV9mcm96ZW5fc3RhdGUocGUsIGZhbHNlKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCS8qIEdpdmUgdGhlIHN5c3RlbSA1IHNlY29uZHMgdG8gZmluaXNoIHJ1bm5pbmcgdGhlIHVzZXItc3BhY2UKIAkgKiBob3RwbHVnIHNodXRkb3duIHNjcmlwdHMsIGUuZy4gaWZkb3duIGZvciBldGhlcm5ldC4gIFllcywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNzViNjY3Ni4uNjQ2YmY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTU1MSw2ICs1NTEsMjQgQEAKIAkJbXNyX2RpZmYgJj0gTVNSX0ZQIHwgTVNSX1ZFQyB8IE1TUl9WU1ggfCBNU1JfRkUwIHwgTVNSX0ZFMTsKIAl9CiAKKwkvKgorCSAqIFVzZSB0aGUgY3VycmVudCBNU1IgVE0gc3VzcGVuZGVkIGJpdCB0byB0cmFjayBpZiB3ZSBoYXZlCisJICogY2hlY2twb2ludGVkIHN0YXRlIG91dHN0YW5kaW5nLgorCSAqIE9uIHNpZ25hbCBkZWxpdmVyeSwgd2UnZCBub3JtYWxseSByZWNsYWltIHRoZSBjaGVja3BvaW50ZWQKKwkgKiBzdGF0ZSB0byBvYnRhaW4gc3RhY2sgcG9pbnRlciAoc2VlOmdldF90bV9zdGFja3BvaW50ZXIoKSkuCisJICogVGhpcyB3aWxsIHRoZW4gZGlyZWN0bHkgcmV0dXJuIHRvIHVzZXJzcGFjZSB3aXRob3V0IGdvaW5nCisJICogdGhyb3VnaCBfX3N3aXRjaF90bygpLiBIb3dldmVyLCBpZiB0aGUgc3RhY2sgZnJhbWUgaXMgYmFkLAorCSAqIHdlIG5lZWQgdG8gZXhpdCB0aGlzIHRocmVhZCB3aGljaCBjYWxscyBfX3N3aXRjaF90bygpIHdoaWNoCisJICogd2lsbCBhZ2FpbiBhdHRlbXB0IHRvIHJlY2xhaW0gdGhlIGFscmVhZHkgc2F2ZWQgdG0gc3RhdGUuCisJICogSGVuY2Ugd2UgbmVlZCB0byBjaGVjayB0aGF0IHdlJ3ZlIG5vdCBhbHJlYWR5IHJlY2xhaW1lZAorCSAqIHRoaXMgc3RhdGUuCisJICogV2UgZG8gdGhpcyB1c2luZyB0aGUgY3VycmVudCBNU1IsIHJhdGhlciB0cmFja2luZyBpdCBpbgorCSAqIHNvbWUgc3BlY2lmaWMgdGhyZWFkX3N0cnVjdCBiaXQsIGFzIGl0IGhhcyB0aGUgYWRkaXRpb25hbAorCSAqIGJlbmlmaXQgb2YgY2hlY2tpbmcgZm9yIGEgcG90ZW50aWFsIFRNIGJhZCB0aGluZyBleGNlcHRpb24uCisJICovCisJaWYgKCFNU1JfVE1fU1VTUEVOREVEKG1mbXNyKCkpKQorCQlyZXR1cm47CisKIAl0bV9yZWNsYWltKHRociwgdGhyLT5yZWdzLT5tc3IsIGNhdXNlKTsKIAogCS8qIEhhdmluZyBkb25lIHRoZSByZWNsYWltLCB3ZSBub3cgaGF2ZSB0aGUgY2hlY2twb2ludGVkCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCAwZGJlZTQ2Li5lZjdjMjRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTg3NSw2ICs4NzUsMTUgQEAKIAkJcmV0dXJuIDE7CiAjZW5kaWYgLyogQ09ORklHX1NQRSAqLwogCisJLyogR2V0IHRoZSB0b3AgaGFsZiBvZiB0aGUgTVNSIGZyb20gdGhlIHVzZXIgY29udGV4dCAqLworCWlmIChfX2dldF91c2VyKG1zcl9oaSwgJnRtX3NyLT5tY19ncmVnc1tQVF9NU1JdKSkKKwkJcmV0dXJuIDE7CisJbXNyX2hpIDw8PSAzMjsKKwkvKiBJZiBUTSBiaXRzIGFyZSBzZXQgdG8gdGhlIHJlc2VydmVkIHZhbHVlLCBpdCdzIGFuIGludmFsaWQgY29udGV4dCAqLworCWlmIChNU1JfVE1fUkVTVihtc3JfaGkpKQorCQlyZXR1cm4gMTsKKwkvKiBQdWxsIGluIHRoZSBNU1IgVE0gYml0cyBmcm9tIHRoZSB1c2VyIGNvbnRleHQgKi8KKwlyZWdzLT5tc3IgPSAocmVncy0+bXNyICYgfk1TUl9UU19NQVNLKSB8IChtc3JfaGkgJiBNU1JfVFNfTUFTSyk7CiAJLyogTm93LCByZWNoZWNrcG9pbnQuICBUaGlzIGxvYWRzIHVwIGFsbCBvZiB0aGUgY2hlY2twb2ludGVkIChvbGRlcikKIAkgKiByZWdpc3RlcnMsIGluY2x1ZGluZyBGUCBhbmQgVltTXVJzLiAgQWZ0ZXIgcmVjaGVja3BvaW50aW5nLCB0aGUKIAkgKiB0cmFuc2FjdGlvbmFsIHZlcnNpb25zIHNob3VsZCBiZSBsb2FkZWQuCkBAIC04ODQsMTEgKzg5Myw2IEBACiAJY3VycmVudC0+dGhyZWFkLnRtX3RleGFzciB8PSBURVhBU1JfRlM7CiAJLyogVGhpcyBsb2FkcyB0aGUgY2hlY2twb2ludGVkIEZQL1ZFQyBzdGF0ZSwgaWYgdXNlZCAqLwogCXRtX3JlY2hlY2twb2ludCgmY3VycmVudC0+dGhyZWFkLCBtc3IpOwotCS8qIEdldCB0aGUgdG9wIGhhbGYgb2YgdGhlIE1TUiAqLwotCWlmIChfX2dldF91c2VyKG1zcl9oaSwgJnRtX3NyLT5tY19ncmVnc1tQVF9NU1JdKSkKLQkJcmV0dXJuIDE7Ci0JLyogUHVsbCBpbiBNU1IgVE0gZnJvbSB1c2VyIGNvbnRleHQgKi8KLQlyZWdzLT5tc3IgPSAocmVncy0+bXNyICYgfk1TUl9UU19NQVNLKSB8ICgobXNyX2hpPDwzMikgJiBNU1JfVFNfTUFTSyk7CiAKIAkvKiBUaGlzIGxvYWRzIHRoZSBzcGVjdWxhdGl2ZSBGUC9WRUMgc3RhdGUsIGlmIHVzZWQgKi8KIAlpZiAobXNyICYgTVNSX0ZQKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCAyMDc1NmRmLi5jNjc2ZWNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTQzOCw2ICs0MzgsMTAgQEAKIAogCS8qIGdldCBNU1Igc2VwYXJhdGVseSwgdHJhbnNmZXIgdGhlIExFIGJpdCBpZiBkb2luZyBzaWduYWwgcmV0dXJuICovCiAJZXJyIHw9IF9fZ2V0X3VzZXIobXNyLCAmc2MtPmdwX3JlZ3NbUFRfTVNSXSk7CisJLyogRG9uJ3QgYWxsb3cgcmVzZXJ2ZWQgbW9kZS4gKi8KKwlpZiAoTVNSX1RNX1JFU1YobXNyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBwdWxsIGluIE1TUiBUTSBmcm9tIHVzZXIgY29udGV4dCAqLwogCXJlZ3MtPm1zciA9IChyZWdzLT5tc3IgJiB+TVNSX1RTX01BU0spIHwgKG1zciAmIE1TUl9UU19NQVNLKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKaW5kZXggNTRiNDViNy4uYTczNTJiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCkBAIC0yMjQsNiArMjI0LDEyIEBACiAKIHN0YXRpYyB2b2lkIGt2bXBwY19zZXRfbXNyX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1zcikKIHsKKwkvKgorCSAqIENoZWNrIGZvciBpbGxlZ2FsIHRyYW5zYWN0aW9uYWwgc3RhdGUgYml0IGNvbWJpbmF0aW9uCisJICogYW5kIGlmIHdlIGZpbmQgaXQsIGZvcmNlIHRoZSBUUyBmaWVsZCB0byBhIHNhZmUgc3RhdGUuCisJICovCisJaWYgKChtc3IgJiBNU1JfVFNfTUFTSykgPT0gTVNSX1RTX01BU0spCisJCW1zciAmPSB+TVNSX1RTX01BU0s7CiAJdmNwdS0+YXJjaC5zaHJlZ3MubXNyID0gbXNyOwogCWt2bXBwY19lbmRfY2VkZSh2Y3B1KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWlycWNoaXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWlycWNoaXAuYwppbmRleCA2Y2NmYjZjLi5lNTA1MjIzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwtaXJxY2hpcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLWlycWNoaXAuYwpAQCAtNDMsMTEgKzQzLDM0IEBACiBzdGF0aWMgdW5zaWduZWQgaW50ICpvcGFsX2lycXM7CiAKIHN0YXRpYyB2b2lkIG9wYWxfaGFuZGxlX2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7Ci1zdGF0aWMgX19iZTY0IGxhc3Rfb3V0c3RhbmRpbmdfZXZlbnRzOworc3RhdGljIHU2NCBsYXN0X291dHN0YW5kaW5nX2V2ZW50czsKIHN0YXRpYyBzdHJ1Y3QgaXJxX3dvcmsgb3BhbF9ldmVudF9pcnFfd29yayA9IHsKIAkuZnVuYyA9IG9wYWxfaGFuZGxlX2lycV93b3JrLAogfTsKIAordm9pZCBvcGFsX2hhbmRsZV9ldmVudHModWludDY0X3QgZXZlbnRzKQoreworCWludCB2aXJxLCBod2lycSA9IDA7CisJdTY0IG1hc2sgPSBvcGFsX2V2ZW50X2lycWNoaXAubWFzazsKKworCWlmICghaW5faXJxKCkgJiYgKGV2ZW50cyAmIG1hc2spKSB7CisJCWxhc3Rfb3V0c3RhbmRpbmdfZXZlbnRzID0gZXZlbnRzOworCQlpcnFfd29ya19xdWV1ZSgmb3BhbF9ldmVudF9pcnFfd29yayk7CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoZXZlbnRzICYgbWFzaykgeworCQlod2lycSA9IGZsczY0KGV2ZW50cykgLSAxOworCQlpZiAoQklUX1VMTChod2lycSkgJiBtYXNrKSB7CisJCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhvcGFsX2V2ZW50X2lycWNoaXAuZG9tYWluLAorCQkJCQkJaHdpcnEpOworCQkJaWYgKHZpcnEpCisJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOworCQl9CisJCWV2ZW50cyAmPSB+QklUX1VMTChod2lycSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBvcGFsX2V2ZW50X21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCWNsZWFyX2JpdChkLT5od2lycSwgJm9wYWxfZXZlbnRfaXJxY2hpcC5tYXNrKTsKQEAgLTU1LDkgKzc4LDIxIEBACiAKIHN0YXRpYyB2b2lkIG9wYWxfZXZlbnRfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwlfX2JlNjQgZXZlbnRzOworCiAJc2V0X2JpdChkLT5od2lycSwgJm9wYWxfZXZlbnRfaXJxY2hpcC5tYXNrKTsKIAotCW9wYWxfcG9sbF9ldmVudHMoJmxhc3Rfb3V0c3RhbmRpbmdfZXZlbnRzKTsKKwlvcGFsX3BvbGxfZXZlbnRzKCZldmVudHMpOworCWxhc3Rfb3V0c3RhbmRpbmdfZXZlbnRzID0gYmU2NF90b19jcHUoZXZlbnRzKTsKKworCS8qCisJICogV2UgY2FuJ3QganVzdCBoYW5kbGUgdGhlIGV2ZW50cyBub3cgd2l0aCBvcGFsX2hhbmRsZV9ldmVudHMoKS4KKwkgKiBJZiB3ZSBkaWQgd2Ugd291bGQgZGVhZGxvY2sgd2hlbiBvcGFsX2V2ZW50X3VubWFzaygpIGlzIGNhbGxlZCBmcm9tCisJICogaGFuZGxlX2xldmVsX2lycSgpIHdpdGggdGhlIGlycSBkZXNjcmlwdG9yIGxvY2sgaGVsZCwgYmVjYXVzZQorCSAqIGNhbGxpbmcgb3BhbF9oYW5kbGVfZXZlbnRzKCkgd291bGQgY2FsbCBnZW5lcmljX2hhbmRsZV9pcnEoKSBhbmQKKwkgKiB0aGVuIGhhbmRsZV9sZXZlbF9pcnEoKSB3aGljaCB3b3VsZCB0cnkgdG8gdGFrZSB0aGUgZGVzY3JpcHRvciBsb2NrCisJICogYWdhaW4uIEluc3RlYWQgcXVldWUgdGhlIGV2ZW50cyBmb3IgbGF0ZXIuCisJICovCiAJaWYgKGxhc3Rfb3V0c3RhbmRpbmdfZXZlbnRzICYgb3BhbF9ldmVudF9pcnFjaGlwLm1hc2spCiAJCS8qIE5lZWQgdG8gcmV0cmlnZ2VyIHRoZSBpbnRlcnJ1cHQgKi8KIAkJaXJxX3dvcmtfcXVldWUoJm9wYWxfZXZlbnRfaXJxX3dvcmspOwpAQCAtOTYsMjkgKzEzMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgb3BhbF9oYW5kbGVfZXZlbnRzKHVpbnQ2NF90IGV2ZW50cykKLXsKLQlpbnQgdmlycSwgaHdpcnEgPSAwOwotCXU2NCBtYXNrID0gb3BhbF9ldmVudF9pcnFjaGlwLm1hc2s7Ci0KLQlpZiAoIWluX2lycSgpICYmIChldmVudHMgJiBtYXNrKSkgewotCQlsYXN0X291dHN0YW5kaW5nX2V2ZW50cyA9IGV2ZW50czsKLQkJaXJxX3dvcmtfcXVldWUoJm9wYWxfZXZlbnRfaXJxX3dvcmspOwotCQlyZXR1cm47Ci0JfQotCi0Jd2hpbGUgKGV2ZW50cyAmIG1hc2spIHsKLQkJaHdpcnEgPSBmbHM2NChldmVudHMpIC0gMTsKLQkJaWYgKEJJVF9VTEwoaHdpcnEpICYgbWFzaykgewotCQkJdmlycSA9IGlycV9maW5kX21hcHBpbmcob3BhbF9ldmVudF9pcnFjaGlwLmRvbWFpbiwKLQkJCQkJCWh3aXJxKTsKLQkJCWlmICh2aXJxKQotCQkJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsKLQkJfQotCQlldmVudHMgJj0gfkJJVF9VTEwoaHdpcnEpOwotCX0KLX0KLQogc3RhdGljIGlycXJldHVybl90IG9wYWxfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJX19iZTY0IGV2ZW50czsKQEAgLTEzMSw3ICsxNDMsNyBAQAogCiBzdGF0aWMgdm9pZCBvcGFsX2hhbmRsZV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspCiB7Ci0Jb3BhbF9oYW5kbGVfZXZlbnRzKGJlNjRfdG9fY3B1KGxhc3Rfb3V0c3RhbmRpbmdfZXZlbnRzKSk7CisJb3BhbF9oYW5kbGVfZXZlbnRzKGxhc3Rfb3V0c3RhbmRpbmdfZXZlbnRzKTsKIH0KIAogc3RhdGljIGludCBvcGFsX2V2ZW50X21hdGNoKHN0cnVjdCBpcnFfZG9tYWluICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwuYwppbmRleCA0Mjk2ZDU1Li41N2NmZmI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLmMKQEAgLTI3OCw3ICsyNzgsNyBAQAogCiAJLyogU2FuaXR5IGNoZWNrICovCiAJaWYgKHR5cGUgPj0gT1BBTF9NU0dfVFlQRV9NQVgpIHsKLQkJcHJfd2FybmluZygiJXM6IFVua25vd24gbWVzc2FnZSB0eXBlOiAldVxuIiwgX19mdW5jX18sIHR5cGUpOworCQlwcl93YXJuX29uY2UoIiVzOiBVbmtub3duIG1lc3NhZ2UgdHlwZTogJXVcbiIsIF9fZnVuY19fLCB0eXBlKTsKIAkJcmV0dXJuOwogCX0KIAlvcGFsX21lc3NhZ2VfZG9fbm90aWZ5KHR5cGUsICh2b2lkICopJm1zZyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmgKaW5kZXggMGM1ZDhlZS4uZDFlN2IwYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaApAQCAtMzEyLDYgKzMxMiw3IEBACiBleHRlcm4gdm9pZCByZWlwbF9jY3dfZGV2KHN0cnVjdCBjY3dfZGV2X2lkICppZCk7CiAKIHN0cnVjdCBjaW9faXBsaW5mbyB7CisJdTggc3NpZDsKIAl1MTYgZGV2bm87CiAJaW50IGlzX3FkaW87CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDNhZDQ4ZjIuLmJhYjY3MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTIwNiw5ICsyMDYsMTYgQEAKIH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtbWFwX3JuZF9tYXNrOwotCi0jZGVmaW5lIFNUQUNLX1JORF9NQVNLCSh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCkgPyAweDdmZiA6IG1tYXBfcm5kX21hc2spCisvKgorICogQ2FjaGUgYWxpYXNpbmcgb24gdGhlIGxhdGVzdCBtYWNoaW5lcyBjYWxscyBmb3IgYSBtYXBwaW5nIGdyYW51bGFyaXR5CisgKiBvZiA1MTJLQi4gRm9yIDY0LWJpdCBwcm9jZXNzZXMgdXNlIGEgNTEyS0IgYWxpZ25tZW50IGFuZCBhIHJhbmRvbWl6YXRpb24KKyAqIG9mIHVwIHRvIDFHQi4gRm9yIDMxLWJpdCBwcm9jZXNzZXMgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBpcyBsaW1pdGVkLAorICogdXNlIG5vIGFsaWdubWVudCBhbmQgbGltaXQgdGhlIHJhbmRvbWl6YXRpb24gdG8gOE1CLgorICovCisjZGVmaW5lIEJSS19STkRfTUFTSwkoaXNfMzJiaXRfdGFzaygpID8gMHg3ZmZVTCA6IDB4M2ZmZmZVTCkKKyNkZWZpbmUgTU1BUF9STkRfTUFTSwkoaXNfMzJiaXRfdGFzaygpID8gMHg3ZmZVTCA6IDB4M2ZmODBVTCkKKyNkZWZpbmUgTU1BUF9BTElHTl9NQVNLCShpc18zMmJpdF90YXNrKCkgPyAwIDogMHg3ZlVMKQorI2RlZmluZSBTVEFDS19STkRfTUFTSwlNTUFQX1JORF9NQVNLCiAKICNkZWZpbmUgQVJDSF9ETElORk8JCQkJCQkJICAgIFwKIGRvIHsJCQkJCQkJCQkgICAgXApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lwbC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lwbC5oCmluZGV4IDM5YWU2YTMuLjg2NjM0ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcGwuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXBsLmgKQEAgLTY0LDcgKzY0LDggQEAKIAogc3RydWN0IGlwbF9ibG9ja19jY3cgewogCXU4ICByZXNlcnZlZDFbODRdOwotCXU4ICByZXNlcnZlZDJbMl07CisJdTE2IHJlc2VydmVkMiA6IDEzOworCXU4ICBzc2lkIDogMzsKIAl1MTYgZGV2bm87CiAJdTggIHZtX2ZsYWdzOwogCXU4ICByZXNlcnZlZDNbM107CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGNpX2RtYS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BjaV9kbWEuaAppbmRleCA3YTdhYmYxLi4xYWFjNDFlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGNpX2RtYS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wY2lfZG1hLmgKQEAgLTE5NSw1ICsxOTUsNyBAQAogdm9pZCBkbWFfZnJlZV9zZWdfdGFibGUodW5zaWduZWQgbG9uZyk7CiB1bnNpZ25lZCBsb25nICpkbWFfYWxsb2NfY3B1X3RhYmxlKHZvaWQpOwogdm9pZCBkbWFfY2xlYW51cF90YWJsZXModW5zaWduZWQgbG9uZyAqKTsKLXZvaWQgZG1hX3VwZGF0ZV9jcHVfdHJhbnModW5zaWduZWQgbG9uZyAqLCB2b2lkICosIGRtYV9hZGRyX3QsIGludCk7Cit1bnNpZ25lZCBsb25nICpkbWFfd2Fsa19jcHVfdHJhbnModW5zaWduZWQgbG9uZyAqcnRvLCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKK3ZvaWQgZG1hX3VwZGF0ZV9jcHVfdHJhbnModW5zaWduZWQgbG9uZyAqZW50cnksIHZvaWQgKnBhZ2VfYWRkciwgaW50IGZsYWdzKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdHJhY2UvZGlhZy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RyYWNlL2RpYWcuaAppbmRleCA3NzZmMzA3Li5jYzZjZmU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdHJhY2UvZGlhZy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90cmFjZS9kaWFnLmgKQEAgLTE5LDcgKzE5LDcgQEAKICNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIGFzbS90cmFjZQogI2RlZmluZSBUUkFDRV9JTkNMVURFX0ZJTEUgZGlhZwogCi1UUkFDRV9FVkVOVChkaWFnbm9zZSwKK1RSQUNFX0VWRU5UKHMzOTBfZGlhZ25vc2UsCiAJVFBfUFJPVE8odW5zaWduZWQgc2hvcnQgbnIpLAogCVRQX0FSR1MobnIpLAogCVRQX1NUUlVDVF9fZW50cnkoCkBAIC0zMiw5ICszMiw5IEBACiApOwogCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi12b2lkIHRyYWNlX2RpYWdub3NlX25vcmVjdXJzaW9uKGludCBkaWFnX25yKTsKK3ZvaWQgdHJhY2VfczM5MF9kaWFnbm9zZV9ub3JlY3Vyc2lvbihpbnQgZGlhZ19ucik7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2RpYWdub3NlX25vcmVjdXJzaW9uKGludCBkaWFnX25yKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9zMzkwX2RpYWdub3NlX25vcmVjdXJzaW9uKGludCBkaWFnX25yKSB7IH0KICNlbmRpZgogCiAjZW5kaWYgLyogX1RSQUNFX1MzOTBfRElBR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaCBiL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IGE4NDhhZGIuLjM0ZWMyMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCkBAIC0xOTIsMTQgKzE5MiwxNCBAQAogI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkyNTIKICNkZWZpbmUgX19OUl9mYWR2aXNlNjQJCTI1MwogI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZQkyNTQKLSNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSsxKQotI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUJKF9fTlJfdGltZXJfY3JlYXRlKzIpCi0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgkoX19OUl90aW1lcl9jcmVhdGUrMykKLSNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUJKF9fTlJfdGltZXJfY3JlYXRlKzQpCi0jZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZQkoX19OUl90aW1lcl9jcmVhdGUrNSkKLSNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lCShfX05SX3RpbWVyX2NyZWF0ZSs2KQotI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkoX19OUl90aW1lcl9jcmVhdGUrNykKLSNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJKF9fTlJfdGltZXJfY3JlYXRlKzgpCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZQkyNTUKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lCTI1NgorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4JMjU3CisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlCTI1OAorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUJMjU5CisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZQkyNjAKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMJMjYxCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwCTI2MgogLyogTnVtYmVyIDI2MyBpcyByZXNlcnZlZCBmb3IgdnNlcnZlciAqLwogI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjUKICNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NgpAQCAtMzA5LDcgKzMwOSw4IEBACiAjZGVmaW5lIF9fTlJfcmVjdmZyb20JCTM3MQogI2RlZmluZSBfX05SX3JlY3Ztc2cJCTM3MgogI2RlZmluZSBfX05SX3NodXRkb3duCQkzNzMKLSNkZWZpbmUgTlJfc3lzY2FsbHMgMzc0CisjZGVmaW5lIF9fTlJfbWxvY2syCQkzNzQKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzc1CiAKIC8qIAogICogVGhlcmUgYXJlIHNvbWUgc3lzdGVtIGNhbGxzIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9uIDY0IGJpdCwgc29tZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5jCmluZGV4IDA5ZjE5NDAuLmZhYzRlZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLmMKQEAgLTE3NiwzICsxNzYsNCBAQAogQ09NUEFUX1NZU0NBTExfV1JBUDMoZ2V0c29ja25hbWUsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXNvY2thZGRyLCBpbnQgX191c2VyICosIHVzb2NrYWRkcl9sZW4pOwogQ09NUEFUX1NZU0NBTExfV1JBUDMoZ2V0cGVlcm5hbWUsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXNvY2thZGRyLCBpbnQgX191c2VyICosIHVzb2NrYWRkcl9sZW4pOwogQ09NUEFUX1NZU0NBTExfV1JBUDYoc2VuZHRvLCBpbnQsIGZkLCB2b2lkIF9fdXNlciAqLCBidWZmLCBzaXplX3QsIGxlbiwgdW5zaWduZWQgaW50LCBmbGFncywgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBhZGRyLCBpbnQsIGFkZHJfbGVuKTsKK0NPTVBBVF9TWVNDQUxMX1dSQVAzKG1sb2NrMiwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuLCBpbnQsIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGlhZy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMKaW5kZXggZjk4NzY2ZS4uNDhiMzdiOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMKQEAgLTEyMSwxNCArMTIxLDE0IEBACiB2b2lkIGRpYWdfc3RhdF9pbmMoZW51bSBkaWFnX3N0YXRfZW51bSBucikKIHsKIAl0aGlzX2NwdV9pbmMoZGlhZ19zdGF0LmNvdW50ZXJbbnJdKTsKLQl0cmFjZV9kaWFnbm9zZShkaWFnX21hcFtucl0uY29kZSk7CisJdHJhY2VfczM5MF9kaWFnbm9zZShkaWFnX21hcFtucl0uY29kZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRpYWdfc3RhdF9pbmMpOwogCiB2b2lkIGRpYWdfc3RhdF9pbmNfbm9yZWN1cnNpb24oZW51bSBkaWFnX3N0YXRfZW51bSBucikKIHsKIAl0aGlzX2NwdV9pbmMoZGlhZ19zdGF0LmNvdW50ZXJbbnJdKTsKLQl0cmFjZV9kaWFnbm9zZV9ub3JlY3Vyc2lvbihkaWFnX21hcFtucl0uY29kZSk7CisJdHJhY2VfczM5MF9kaWFnbm9zZV9ub3JlY3Vyc2lvbihkaWFnX21hcFtucl0uY29kZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRpYWdfc3RhdF9pbmNfbm9yZWN1cnNpb24pOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Rpcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYwppbmRleCA4MTQwZDEwLi42ZTcyOTYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKQEAgLTE5MjAsMTYgKzE5MjAsMjMgQEAKIAkJCX0KIAkJCWlmIChzZXBhcmF0b3IpCiAJCQkJcHRyICs9IHNwcmludGYocHRyLCAiJWMiLCBzZXBhcmF0b3IpOworCQkJLyoKKwkJCSAqIFVzZSBmb3VyICclJyBjaGFyYWN0ZXJzIGJlbG93IGJlY2F1c2Ugb2YgdGhlCisJCQkgKiBmb2xsb3dpbmcgdHdvIGNvbnZlcnNpb25zOgorCQkJICoKKwkJCSAqICAxKSBzcHJpbnRmOiAlJSUlciAtPiAlJXIKKwkJCSAqICAyKSBwcmludGsgOiAlJXIgICAtPiAlcgorCQkJICovCiAJCQlpZiAob3BlcmFuZC0+ZmxhZ3MgJiBPUEVSQU5EX0dQUikKLQkJCQlwdHIgKz0gc3ByaW50ZihwdHIsICIlJXIlaSIsIHZhbHVlKTsKKwkJCQlwdHIgKz0gc3ByaW50ZihwdHIsICIlJSUlciVpIiwgdmFsdWUpOwogCQkJZWxzZSBpZiAob3BlcmFuZC0+ZmxhZ3MgJiBPUEVSQU5EX0ZQUikKLQkJCQlwdHIgKz0gc3ByaW50ZihwdHIsICIlJWYlaSIsIHZhbHVlKTsKKwkJCQlwdHIgKz0gc3ByaW50ZihwdHIsICIlJSUlZiVpIiwgdmFsdWUpOwogCQkJZWxzZSBpZiAob3BlcmFuZC0+ZmxhZ3MgJiBPUEVSQU5EX0FSKQotCQkJCXB0ciArPSBzcHJpbnRmKHB0ciwgIiUlYSVpIiwgdmFsdWUpOworCQkJCXB0ciArPSBzcHJpbnRmKHB0ciwgIiUlJSVhJWkiLCB2YWx1ZSk7CiAJCQllbHNlIGlmIChvcGVyYW5kLT5mbGFncyAmIE9QRVJBTkRfQ1IpCi0JCQkJcHRyICs9IHNwcmludGYocHRyLCAiJSVjJWkiLCB2YWx1ZSk7CisJCQkJcHRyICs9IHNwcmludGYocHRyLCAiJSUlJWMlaSIsIHZhbHVlKTsKIAkJCWVsc2UgaWYgKG9wZXJhbmQtPmZsYWdzICYgT1BFUkFORF9WUikKLQkJCQlwdHIgKz0gc3ByaW50ZihwdHIsICIlJXYlaSIsIHZhbHVlKTsKKwkJCQlwdHIgKz0gc3ByaW50ZihwdHIsICIlJSUldiVpIiwgdmFsdWUpOwogCQkJZWxzZSBpZiAob3BlcmFuZC0+ZmxhZ3MgJiBPUEVSQU5EX1BDUkVMKQogCQkJCXB0ciArPSBzcHJpbnRmKHB0ciwgIiVseCIsIChzaWduZWQgaW50KSB2YWx1ZQogCQkJCQkJCQkgICAgICArIGFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwppbmRleCAxMjU1YzZjLi4zMDFlZTljIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAjZGVmaW5lIEFSQ0hfT0ZGU0VUCTQKIApAQCAtNTksMTkgKzYwLDYgQEAKIAkubG9uZwkweDAyMDAwNmUwLDB4MjAwMDAwNTAKIAogCS5vcmcJMHgyMDAKLSMKLSMgc3Vicm91dGluZSB0byBzZXQgYXJjaGl0ZWN0dXJlIG1vZGUKLSMKLS5Mc2V0bW9kZToKLQltdmkJX19MQ19BUl9NT0RFX0lELDEJIyBzZXQgZXNhbWUgZmxhZwotCXNscgklcjAsJXIwIAkJIyBzZXQgY3B1aWQgdG8gemVybwotCWxoaQklcjEsMgkJCSMgbW9kZSAyID0gZXNhbWUgKGR1bXApCi0Jc2lncAklcjEsJXIwLDB4MTIJCSMgc3dpdGNoIHRvIGVzYW1lIG1vZGUKLQlicmFzCSVyMTMsMGYKLQkuZmlsbAkxNiw0LDB4MAotMDoJbG1oCSVyMCwlcjE1LDAoJXIxMykJIyBjbGVhciBoaWdoLW9yZGVyIGhhbGYgb2YgZ3BycwotCXNhbTMxCQkJCSMgc3dpdGNoIHRvIDMxIGJpdCBhZGRyZXNzaW5nIG1vZGUKLQlicgklcjE0CiAKICMKICMgc3Vicm91dGluZSB0byB3YWl0IGZvciBlbmQgSS9PCkBAIC0xNTksNyArMTQ3LDE0IEBACiAJLmxvbmcJMHgwMjIwMDA1MCwweDAwMDAwMDAwCiAKIGlwbHN0YXJ0OgotCWJhcwklcjE0LC5Mc2V0bW9kZQkJIyBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gNjQgYml0IG1vZGUKKwltdmkJX19MQ19BUl9NT0RFX0lELDEJIyBzZXQgZXNhbWUgZmxhZworCXNscgklcjAsJXIwCQkJIyBzZXQgY3B1aWQgdG8gemVybworCWxoaQklcjEsMgkJCSMgbW9kZSAyID0gZXNhbWUgKGR1bXApCisJc2lncAklcjEsJXIwLDB4MTIJCSMgc3dpdGNoIHRvIGVzYW1lIG1vZGUKKwlicmFzCSVyMTMsMGYKKwkuZmlsbAkxNiw0LDB4MAorMDoJbG1oCSVyMCwlcjE1LDAoJXIxMykJIyBjbGVhciBoaWdoLW9yZGVyIGhhbGYgb2YgZ3BycworCXNhbTMxCQkJCSMgc3dpdGNoIHRvIDMxIGJpdCBhZGRyZXNzaW5nIG1vZGUKIAlsaAklcjEsMHhiOAkJIyB0ZXN0IGlmIHN1YmNoYW5uZWwgbnVtYmVyCiAJYmN0CSVyMSwuTG5vbG9hZAkJIyAgaXMgdmFsaWQKIAlsCSVyMSwweGI4CQkjIGxvYWQgaXBsIHN1YmNoYW5uZWwgbnVtYmVyCkBAIC0yNjksNzEgKzI2NCw2IEBACiAuTGNwdWlkOi5maWxsCTgsMSwwCiAKICMKLSMgU0FMSVBMIGxvYWRlciBzdXBwb3J0LiBCYXNlZCBvbiBhIHBhdGNoIGJ5IFJvYiB2YW4gZGVyIEhlaWouCi0jIFRoaXMgZW50cnkgcG9pbnQgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIFNBTElQTCBsb2FkZXIgYW5kCi0jIGRvZXNuJ3QgbmVlZCBhIGJ1aWx0aW4gaXBsIHJlY29yZC4KLSMKLQkub3JnCTB4ODAwCi1FTlRSWShzdGFydCkKLQlzdG0JJXIwLCVyMTUsMHgwN2IwCQkjIHN0b3JlIHJlZ2lzdGVycwotCWJhcwklcjE0LC5Mc2V0bW9kZQkJIyBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gNjQgYml0IG1vZGUKLQliYXNyCSVyMTIsJXIwCi0uYmFzZToKLQlsCSVyMTEsLnBhcm0KLQlsCSVyOCwuY21kCQkjIHBvaW50ZXIgdG8gY29tbWFuZCBidWZmZXIKLQotCWx0cgklcjksJXI5CQkJIyBkbyB3ZSBoYXZlIFNBTElQTCBwYXJhbWV0ZXJzPwotCWJwCS5zazh4OAotCi0JbXZjCTAoNjQsJXI4KSwweDAwYjAJIyBjb3B5IHNhdmVkIHJlZ2lzdGVycwotCXhjCTY0KDI0MC02NCwlcjgpLDAoJXI4KQkjIHJlbWFpbmRlciBvZiBidWZmZXIKLQl0cgkwKDY0LCVyOCksLmxvd2Nhc2UKLQliCS5nb3RyCi0uc2s4eDg6Ci0JbXZjCTAoMjQwLCVyOCksMCglcjkpCSMgY29weSBpcGxwYXJtcyBpbnRvIGJ1ZmZlcgotLmdvdHI6Ci0Jc2xyCSVyMCwlcjAKLQlzdAklcjAsSU5JVFJEX1NJWkUrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMSkKLQlzdAklcjAsSU5JVFJEX1NUQVJUK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTEpCi0JaglzdGFydHVwIAkJIyBjb250aW51ZSB3aXRoIHN0YXJ0dXAKLS5jbWQ6CS5sb25nCUNPTU1BTkRfTElORQkJIyBhZGRyZXNzIG9mIGNvbW1hbmQgbGluZSBidWZmZXIKLS5wYXJtOgkubG9uZwlQQVJNQVJFQQotLmxvd2Nhc2U6Ci0JLmJ5dGUgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3Ci0JLmJ5dGUgMHgwOCwweDA5LDB4MGEsMHgwYiwweDBjLDB4MGQsMHgwZSwweDBmCi0JLmJ5dGUgMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3Ci0JLmJ5dGUgMHgxOCwweDE5LDB4MWEsMHgxYiwweDFjLDB4MWQsMHgxZSwweDFmCi0JLmJ5dGUgMHgyMCwweDIxLDB4MjIsMHgyMywweDI0LDB4MjUsMHgyNiwweDI3Ci0JLmJ5dGUgMHgyOCwweDI5LDB4MmEsMHgyYiwweDJjLDB4MmQsMHgyZSwweDJmCi0JLmJ5dGUgMHgzMCwweDMxLDB4MzIsMHgzMywweDM0LDB4MzUsMHgzNiwweDM3Ci0JLmJ5dGUgMHgzOCwweDM5LDB4M2EsMHgzYiwweDNjLDB4M2QsMHgzZSwweDNmCi0JLmJ5dGUgMHg0MCwweDQxLDB4NDIsMHg0MywweDQ0LDB4NDUsMHg0NiwweDQ3Ci0JLmJ5dGUgMHg0OCwweDQ5LDB4NGEsMHg0YiwweDRjLDB4NGQsMHg0ZSwweDRmCi0JLmJ5dGUgMHg1MCwweDUxLDB4NTIsMHg1MywweDU0LDB4NTUsMHg1NiwweDU3Ci0JLmJ5dGUgMHg1OCwweDU5LDB4NWEsMHg1YiwweDVjLDB4NWQsMHg1ZSwweDVmCi0JLmJ5dGUgMHg2MCwweDYxLDB4NjIsMHg2MywweDY0LDB4NjUsMHg2NiwweDY3Ci0JLmJ5dGUgMHg2OCwweDY5LDB4NmEsMHg2YiwweDZjLDB4NmQsMHg2ZSwweDZmCi0JLmJ5dGUgMHg3MCwweDcxLDB4NzIsMHg3MywweDc0LDB4NzUsMHg3NiwweDc3Ci0JLmJ5dGUgMHg3OCwweDc5LDB4N2EsMHg3YiwweDdjLDB4N2QsMHg3ZSwweDdmCi0KLQkuYnl0ZSAweDgwLDB4ODEsMHg4MiwweDgzLDB4ODQsMHg4NSwweDg2LDB4ODcKLQkuYnl0ZSAweDg4LDB4ODksMHg4YSwweDhiLDB4OGMsMHg4ZCwweDhlLDB4OGYKLQkuYnl0ZSAweDkwLDB4OTEsMHg5MiwweDkzLDB4OTQsMHg5NSwweDk2LDB4OTcKLQkuYnl0ZSAweDk4LDB4OTksMHg5YSwweDliLDB4OWMsMHg5ZCwweDllLDB4OWYKLQkuYnl0ZSAweGEwLDB4YTEsMHhhMiwweGEzLDB4YTQsMHhhNSwweGE2LDB4YTcKLQkuYnl0ZSAweGE4LDB4YTksMHhhYSwweGFiLDB4YWMsMHhhZCwweGFlLDB4YWYKLQkuYnl0ZSAweGIwLDB4YjEsMHhiMiwweGIzLDB4YjQsMHhiNSwweGI2LDB4YjcKLQkuYnl0ZSAweGI4LDB4YjksMHhiYSwweGJiLDB4YmMsMHhiZCwweGJlLDB4YmYKLQkuYnl0ZSAweGMwLDB4ODEsMHg4MiwweDgzLDB4ODQsMHg4NSwweDg2LDB4ODcJIyAuYWJjZGVmZwotCS5ieXRlIDB4ODgsMHg4OSwweGNhLDB4Y2IsMHhjYywweGNkLDB4Y2UsMHhjZgkjIGhpCi0JLmJ5dGUgMHhkMCwweDkxLDB4OTIsMHg5MywweDk0LDB4OTUsMHg5NiwweDk3CSMgLmprbG1ub3AKLQkuYnl0ZSAweDk4LDB4OTksMHhkYSwweGRiLDB4ZGMsMHhkZCwweGRlLDB4ZGYJIyBxcgotCS5ieXRlIDB4ZTAsMHhlMSwweGEyLDB4YTMsMHhhNCwweGE1LDB4YTYsMHhhNwkjIC4uc3R1dnd4Ci0JLmJ5dGUgMHhhOCwweGE5LDB4ZWEsMHhlYiwweGVjLDB4ZWQsMHhlZSwweGVmCSMgeXoKLQkuYnl0ZSAweGYwLDB4ZjEsMHhmMiwweGYzLDB4ZjQsMHhmNSwweGY2LDB4ZjcKLQkuYnl0ZSAweGY4LDB4ZjksMHhmYSwweGZiLDB4ZmMsMHhmZCwweGZlLDB4ZmYKLQotIwogIyBzdGFydHVwLWNvZGUgYXQgMHgxMDAwMCwgcnVubmluZyBpbiBhYnNvbHV0ZSBhZGRyZXNzaW5nIG1vZGUKICMgdGhpcyBpcyBjYWxsZWQgZWl0aGVyIGJ5IHRoZSBpcGwgbG9hZGVyIG9yIGRpcmVjdGx5IGJ5IFBTVyByZXN0YXJ0CiAjIG9yIGxpbmxvYWQgb3IgU0FMSVBMCkBAIC0zNjQsNyArMjk0LDcgQEAKIAlicmFzCSVyMTMsMGYKIAkuZmlsbAkxNiw0LDB4MAogMDoJbG1oCSVyMCwlcjE1LDAoJXIxMykJIyBjbGVhciBoaWdoLW9yZGVyIGhhbGYgb2YgZ3BycwotCXNhbTMxCQkJCSMgc3dpdGNoIHRvIDMxIGJpdCBhZGRyZXNzaW5nIG1vZGUKKwlzYW02NAkJCQkjIHN3aXRjaCB0byA2NCBiaXQgYWRkcmVzc2luZyBtb2RlCiAJYmFzcgklcjEzLDAJCQkjIGdldCBiYXNlCiAuTFBHMDoKIAl4YwkweDIwMCgyNTYpLDB4MjAwCSMgcGFydGlhbGx5IGNsZWFyIGxvd2NvcmUKQEAgLTM5NSw3ICszMjUsNyBAQAogCWpuegkxYgogCWoJNGYKIDI6CWwJJXIxNSwuTHN0YWNrLS5MUEcwKCVyMTMpCi0JYWhpCSVyMTUsLTk2CisJYWhpCSVyMTUsLVNUQUNLX0ZSQU1FX09WRVJIRUFECiAJbGEJJXIyLC5MYWxzX3N0cmluZy0uTFBHMCglcjEzKQogCWwJJXIzLC5Mc2NscF9wcmludC0uTFBHMCglcjEzKQogCWJhc3IJJXIxNCwlcjMKQEAgLTQyOSw4ICszNTksNyBAQAogCS5sb25nIDEsIDB4YzAwMDAwMDAKICNlbmRpZgogNDoKLQkvKiBDb250aW51ZSB3aXRoIDY0Yml0IHN0YXJ0dXAgY29kZSBpbiBoZWFkNjQuUyAqLwotCXNhbTY0CQkJCSMgc3dpdGNoIHRvIDY0IGJpdCBtb2RlCisJLyogQ29udGludWUgd2l0aCBzdGFydHVwIGNvZGUgaW4gaGVhZDY0LlMgKi8KIAlqZwlzdGFydHVwX2NvbnRpbnVlCiAKIAkuYWxpZ24JOApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggZjZkOGFjZC4uYjFmMGE5MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC0xMjEsNiArMTIxLDcgQEAKICAqIE11c3QgYmUgaW4gZGF0YSBzZWN0aW9uIHNpbmNlIHRoZSBic3Mgc2VjdGlvbgogICogaXMgbm90IGNsZWFyZWQgd2hlbiB0aGVzZSBhcmUgYWNjZXNzZWQuCiAgKi8KK3N0YXRpYyB1OCBpcGxfc3NpZCBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEiKSkpID0gMDsKIHN0YXRpYyB1MTYgaXBsX2Rldm5vIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YSIpKSkgPSAwOwogdTMyIGlwbF9mbGFncyBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEiKSkpID0gMDsKIApAQCAtMTk3LDYgKzE5OCwzMyBAQAogCXJldHVybiBzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsIF9mb3JtYXQsICMjYXJncyk7CQlcCiB9CiAKKyNkZWZpbmUgSVBMX0FUVFJfQ0NXX1NUT1JFX0ZOKF9wcmVmaXgsIF9uYW1lLCBfaXBsX2JsaykJCQlcCitzdGF0aWMgc3NpemVfdCBzeXNfIyNfcHJlZml4IyNfIyNfbmFtZSMjX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAlcCisJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwJCQkJXAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCQkJCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBsb25nIHNzaWQsIGRldm5vOwkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChzc2NhbmYoYnVmLCAiMC4lbGx4LiVsbHhcbiIsICZzc2lkLCAmZGV2bm8pICE9IDIpCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc3NpZCA+IF9fTUFYX1NTSUQgfHwgZGV2bm8gPiBfX01BWF9TVUJDSEFOTkVMKQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJCQkJCQkJCQlcCisJX2lwbF9ibGsuc3NpZCA9IHNzaWQ7CQkJCQkJXAorCV9pcGxfYmxrLmRldm5vID0gZGV2bm87CQkJCQkJXAorCXJldHVybiBsZW47CQkJCQkJCVwKK30KKworI2RlZmluZSBERUZJTkVfSVBMX0NDV19BVFRSX1JXKF9wcmVmaXgsIF9uYW1lLCBfaXBsX2JsaykJCVwKK0lQTF9BVFRSX1NIT1dfRk4oX3ByZWZpeCwgX25hbWUsICIwLiV4LiUwNHhcbiIsCQkJCVwKKwkJIF9pcGxfYmxrLnNzaWQsIF9pcGxfYmxrLmRldm5vKTsJCQlcCitJUExfQVRUUl9DQ1dfU1RPUkVfRk4oX3ByZWZpeCwgX25hbWUsIF9pcGxfYmxrKTsJCQlcCitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIHN5c18jI19wcmVmaXgjI18jI19uYW1lIyNfYXR0ciA9CQlcCisJX19BVFRSKF9uYW1lLCAoU19JUlVHTyB8IFNfSVdVU1IpLAkJCQlcCisJICAgICAgIHN5c18jI19wcmVmaXgjI18jI19uYW1lIyNfc2hvdywJCQkJXAorCSAgICAgICBzeXNfIyNfcHJlZml4IyNfIyNfbmFtZSMjX3N0b3JlKQkJCQlcCisKICNkZWZpbmUgREVGSU5FX0lQTF9BVFRSX1JPKF9wcmVmaXgsIF9uYW1lLCBfZm9ybWF0LCBfdmFsdWUpCQlcCiBJUExfQVRUUl9TSE9XX0ZOKF9wcmVmaXgsIF9uYW1lLCBfZm9ybWF0LCBfdmFsdWUpCQkJXAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBzeXNfIyNfcHJlZml4IyNfIyNfbmFtZSMjX2F0dHIgPQkJXApAQCAtMzk1LDcgKzQyMyw3IEBACiAKIAlzd2l0Y2ggKGlwbF9pbmZvLnR5cGUpIHsKIAljYXNlIElQTF9UWVBFX0NDVzoKLQkJcmV0dXJuIHNwcmludGYocGFnZSwgIjAuMC4lMDR4XG4iLCBpcGxfZGV2bm8pOworCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiMC4leC4lMDR4XG4iLCBpcGxfc3NpZCwgaXBsX2Rldm5vKTsKIAljYXNlIElQTF9UWVBFX0ZDUDoKIAljYXNlIElQTF9UWVBFX0ZDUF9EVU1QOgogCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiMC4wLiUwNHhcbiIsIGlwbC0+aXBsX2luZm8uZmNwLmRldm5vKTsKQEAgLTY4NywyMSArNzE1LDE0IEBACiAJCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAogCQkJCSAgICAgICBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKIHsKKwlzaXplX3Qgc2NwZGF0YV9sZW4gPSBjb3VudDsKIAlzaXplX3QgcGFkZGluZzsKLQlzaXplX3Qgc2NwZGF0YV9sZW47CiAKLQlpZiAob2ZmIDwgMCkKKworCWlmIChvZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG9mZiA+PSBESUFHMzA4X1NDUERBVEFfU0laRSkKLQkJcmV0dXJuIC1FTk9TUEM7Ci0KLQlpZiAoY291bnQgPiBESUFHMzA4X1NDUERBVEFfU0laRSAtIG9mZikKLQkJY291bnQgPSBESUFHMzA4X1NDUERBVEFfU0laRSAtIG9mZjsKLQotCW1lbWNweShyZWlwbF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC5zY3BfZGF0YSwgYnVmICsgb2ZmLCBjb3VudCk7Ci0Jc2NwZGF0YV9sZW4gPSBvZmYgKyBjb3VudDsKLQorCW1lbWNweShyZWlwbF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC5zY3BfZGF0YSwgYnVmLCBjb3VudCk7CiAJaWYgKHNjcGRhdGFfbGVuICUgOCkgewogCQlwYWRkaW5nID0gOCAtIChzY3BkYXRhX2xlbiAlIDgpOwogCQltZW1zZXQocmVpcGxfYmxvY2tfZmNwLT5pcGxfaW5mby5mY3Auc2NwX2RhdGEgKyBzY3BkYXRhX2xlbiwKQEAgLTcxNyw3ICs3MzgsNyBAQAogfQogc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIHN5c19yZWlwbF9mY3Bfc2NwX2RhdGFfYXR0ciA9CiAJX19CSU5fQVRUUihzY3BfZGF0YSwgKFNfSVJVR08gfCBTX0lXVVNSKSwgcmVpcGxfZmNwX3NjcGRhdGFfcmVhZCwKLQkJICAgcmVpcGxfZmNwX3NjcGRhdGFfd3JpdGUsIFBBR0VfU0laRSk7CisJCSAgIHJlaXBsX2ZjcF9zY3BkYXRhX3dyaXRlLCBESUFHMzA4X1NDUERBVEFfU0laRSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqcmVpcGxfZmNwX2Jpbl9hdHRyc1tdID0gewogCSZzeXNfcmVpcGxfZmNwX3NjcF9kYXRhX2F0dHIsCkBAIC04MTQsOSArODM1LDcgQEAKIH07CiAKIC8qIENDVyByZWlwbCBkZXZpY2UgYXR0cmlidXRlcyAqLwotCi1ERUZJTkVfSVBMX0FUVFJfUlcocmVpcGxfY2N3LCBkZXZpY2UsICIwLjAuJTA0bGx4XG4iLCAiMC4wLiVsbHhcbiIsCi0JcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8pOworREVGSU5FX0lQTF9DQ1dfQVRUUl9SVyhyZWlwbF9jY3csIGRldmljZSwgcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cpOwogCiAvKiBOU1Mgd3JhcHBlciAqLwogc3RhdGljIHNzaXplX3QgcmVpcGxfbnNzX2xvYWRwYXJtX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC0xMDU2LDggKzEwNzUsOCBAQAogCiAJc3dpdGNoIChyZWlwbF9tZXRob2QpIHsKIAljYXNlIFJFSVBMX01FVEhPRF9DQ1dfQ0lPOgorCQlkZXZpZC5zc2lkICA9IHJlaXBsX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LnNzaWQ7CiAJCWRldmlkLmRldm5vID0gcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm87Ci0JCWRldmlkLnNzaWQgID0gMDsKIAkJcmVpcGxfY2N3X2RldigmZGV2aWQpOwogCQlicmVhazsKIAljYXNlIFJFSVBMX01FVEhPRF9DQ1dfVk06CkBAIC0xMTkyLDYgKzEyMTEsNyBAQAogCiAJcmVpcGxfYmxvY2tfY2N3X2luaXQocmVpcGxfYmxvY2tfY2N3KTsKIAlpZiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9DQ1cpIHsKKwkJcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuc3NpZCA9IGlwbF9zc2lkOwogCQlyZWlwbF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubyA9IGlwbF9kZXZubzsKIAkJcmVpcGxfYmxvY2tfY2N3X2ZpbGxfcGFybXMocmVpcGxfYmxvY2tfY2N3KTsKIAl9CkBAIC0xMzM2LDkgKzEzNTYsNyBAQAogfTsKIAogLyogQ0NXIGR1bXAgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KLQotREVGSU5FX0lQTF9BVFRSX1JXKGR1bXBfY2N3LCBkZXZpY2UsICIwLjAuJTA0bGx4XG4iLCAiMC4wLiVsbHhcbiIsCi0JCSAgIGR1bXBfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8pOworREVGSU5FX0lQTF9DQ1dfQVRUUl9SVyhkdW1wX2NjdywgZGV2aWNlLCBkdW1wX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3KTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmR1bXBfY2N3X2F0dHJzW10gPSB7CiAJJnN5c19kdW1wX2Njd19kZXZpY2VfYXR0ci5hdHRyLApAQCAtMTQxOCw4ICsxNDM2LDggQEAKIAogCXN3aXRjaCAoZHVtcF9tZXRob2QpIHsKIAljYXNlIERVTVBfTUVUSE9EX0NDV19DSU86CisJCWRldmlkLnNzaWQgID0gZHVtcF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5zc2lkOwogCQlkZXZpZC5kZXZubyA9IGR1bXBfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm87Ci0JCWRldmlkLnNzaWQgID0gMDsKIAkJcmVpcGxfY2N3X2RldigmZGV2aWQpOwogCQlicmVhazsKIAljYXNlIERVTVBfTUVUSE9EX0NDV19WTToKQEAgLTE5MzksMTQgKzE5NTcsMTQgQEAKIAlpcGxfaW5mby50eXBlID0gZ2V0X2lwbF90eXBlKCk7CiAJc3dpdGNoIChpcGxfaW5mby50eXBlKSB7CiAJY2FzZSBJUExfVFlQRV9DQ1c6CisJCWlwbF9pbmZvLmRhdGEuY2N3LmRldl9pZC5zc2lkID0gaXBsX3NzaWQ7CiAJCWlwbF9pbmZvLmRhdGEuY2N3LmRldl9pZC5kZXZubyA9IGlwbF9kZXZubzsKLQkJaXBsX2luZm8uZGF0YS5jY3cuZGV2X2lkLnNzaWQgPSAwOwogCQlicmVhazsKIAljYXNlIElQTF9UWVBFX0ZDUDoKIAljYXNlIElQTF9UWVBFX0ZDUF9EVU1QOgorCQlpcGxfaW5mby5kYXRhLmZjcC5kZXZfaWQuc3NpZCA9IDA7CiAJCWlwbF9pbmZvLmRhdGEuZmNwLmRldl9pZC5kZXZubyA9CiAJCQlJUExfUEFSTUJMT0NLX1NUQVJULT5pcGxfaW5mby5mY3AuZGV2bm87Ci0JCWlwbF9pbmZvLmRhdGEuZmNwLmRldl9pZC5zc2lkID0gMDsKIAkJaXBsX2luZm8uZGF0YS5mY3Aud3dwbiA9IElQTF9QQVJNQkxPQ0tfU1RBUlQtPmlwbF9pbmZvLmZjcC53d3BuOwogCQlpcGxfaW5mby5kYXRhLmZjcC5sdW4gPSBJUExfUEFSTUJMT0NLX1NUQVJULT5pcGxfaW5mby5mY3AubHVuOwogCQlicmVhazsKQEAgLTE5NzgsNiArMTk5Niw3IEBACiAJaWYgKGNpb19nZXRfaXBsaW5mbygmaXBsaW5mbykpCiAJCXJldHVybjsKIAorCWlwbF9zc2lkID0gaXBsaW5mby5zc2lkOwogCWlwbF9kZXZubyA9IGlwbGluZm8uZGV2bm87CiAJaXBsX2ZsYWdzIHw9IElQTF9ERVZOT19WQUxJRDsKIAlpZiAoIWlwbGluZm8uaXNfcWRpbykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNjg4YTNhYS4uMTE0ZWU4YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI0MywxMSArMjQzLDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJya19ybmQodm9pZCkKIHsKLQkvKiA4TUIgZm9yIDMyYml0LCAxR0IgZm9yIDY0Yml0ICovCi0JaWYgKGlzXzMyYml0X3Rhc2soKSkKLQkJcmV0dXJuIChnZXRfcmFuZG9tX2ludCgpICYgMHg3ZmZVTCkgPDwgUEFHRV9TSElGVDsKLQllbHNlCi0JCXJldHVybiAoZ2V0X3JhbmRvbV9pbnQoKSAmIDB4M2ZmZmZVTCkgPDwgUEFHRV9TSElGVDsKKwlyZXR1cm4gKGdldF9yYW5kb21faW50KCkgJiBCUktfUk5EX01BU0spIDw8IFBBR0VfU0hJRlQ7CiB9CiAKIHVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zY2xwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuYwppbmRleCBmYTBiZGZmLi45ZmU3NzgxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NjbHAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuYwpAQCAtMjEsNyArMjEsNyBAQAogCV9fY3RsX2xvYWQoY3IwX25ldywgMCwgMCk7CiAKIAlwc3dfZXh0X3NhdmUgPSBTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfbmV3X3BzdzsKLQlwc3dfbWFzayA9IF9fZXh0cmFjdF9wc3coKSAmIChQU1dfTUFTS19FQSB8IFBTV19NQVNLX0JBKTsKKwlwc3dfbWFzayA9IF9fZXh0cmFjdF9wc3coKTsKIAlTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfbmV3X3Bzdy5tYXNrID0gcHN3X21hc2s7CiAJcHN3X3dhaXQubWFzayA9IHBzd19tYXNrIHwgUFNXX01BU0tfRVhUIHwgUFNXX01BU0tfV0FJVDsKIAlTMzkwX2xvd2NvcmUuZXh0X2ludF9jb2RlID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCBjZTBjYmQ2Li5jODM3YmNhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC03NjQsOSArNzY0LDYgQEAKIAlnZXRfY3B1X2lkKCZjcHVfaWQpOwogCWFkZF9kZXZpY2VfcmFuZG9tbmVzcygmY3B1X2lkLCBzaXplb2YoY3B1X2lkKSk7CiAJc3dpdGNoIChjcHVfaWQubWFjaGluZSkgewotCWNhc2UgMHg5NjcyOgotCQlzdHJjcHkoZWxmX3BsYXRmb3JtLCAiZzUiKTsKLQkJYnJlYWs7CiAJY2FzZSAweDIwNjQ6CiAJY2FzZSAweDIwNjY6CiAJZGVmYXVsdDoJLyogVXNlICJ6OTAwIiBhcyBkZWZhdWx0IGZvciA2NCBiaXQga2VybmVscy4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCA4YzU2OTI5Li41Mzc4YzNlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCkBAIC0zODIsMyArMzgyLDQgQEAKIFNZU0NBTEwoc3lzX3JlY3Zmcm9tLGNvbXBhdF9zeXNfcmVjdmZyb20pCiBTWVNDQUxMKHN5c19yZWN2bXNnLGNvbXBhdF9zeXNfcmVjdm1zZykKIFNZU0NBTEwoc3lzX3NodXRkb3duLHN5c19zaHV0ZG93bikKK1NZU0NBTEwoc3lzX21sb2NrMixjb21wYXRfc3lzX21sb2NrMikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhY2UuYwppbmRleCA3MzIzOWJiLi4yMWE1ZGY5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFjZS5jCkBAIC05LDExICs5LDExIEBACiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlIDxhc20vdHJhY2UvZGlhZy5oPgogCi1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woZGlhZ25vc2UpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKHMzOTBfZGlhZ25vc2UpOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBkaWFnbm9zZV90cmFjZV9kZXB0aCk7CiAKLXZvaWQgdHJhY2VfZGlhZ25vc2Vfbm9yZWN1cnNpb24oaW50IGRpYWdfbnIpCit2b2lkIHRyYWNlX3MzOTBfZGlhZ25vc2Vfbm9yZWN1cnNpb24oaW50IGRpYWdfbnIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgKmRlcHRoOwpAQCAtMjIsNyArMjIsNyBAQAogCWRlcHRoID0gdGhpc19jcHVfcHRyKCZkaWFnbm9zZV90cmFjZV9kZXB0aCk7CiAJaWYgKCpkZXB0aCA9PSAwKSB7CiAJCSgqZGVwdGgpKys7Ci0JCXRyYWNlX2RpYWdub3NlKGRpYWdfbnIpOworCQl0cmFjZV9zMzkwX2RpYWdub3NlKGRpYWdfbnIpOwogCQkoKmRlcHRoKS0tOwogCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCAzNzNlMzIzLi42YTc1MzUyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTEwMzAsOCArMTAzMCw3IEBACiAJCQkJICAgc3JjX2lkLCAwKTsKIAogCS8qIHNlbmRpbmcgdmNwdSBpbnZhbGlkICovCi0JaWYgKHNyY19pZCA+PSBLVk1fTUFYX1ZDUFVTIHx8Ci0JICAgIGt2bV9nZXRfdmNwdSh2Y3B1LT5rdm0sIHNyY19pZCkgPT0gTlVMTCkKKwlpZiAoa3ZtX2dldF92Y3B1X2J5X2lkKHZjcHUtPmt2bSwgc3JjX2lkKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChzY2xwLmhhc19zaWdwaWYpCkBAIC0xMTEwLDYgKzExMDksMTAgQEAKIAl0cmFjZV9rdm1fczM5MF9pbmplY3RfdmNwdSh2Y3B1LT52Y3B1X2lkLCBLVk1fUzM5MF9JTlRfRU1FUkdFTkNZLAogCQkJCSAgIGlycS0+dS5lbWVyZy5jb2RlLCAwKTsKIAorCS8qIHNlbmRpbmcgdmNwdSBpbnZhbGlkICovCisJaWYgKGt2bV9nZXRfdmNwdV9ieV9pZCh2Y3B1LT5rdm0sIGlycS0+dS5lbWVyZy5jb2RlKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNldF9iaXQoaXJxLT51LmVtZXJnLmNvZGUsIGxpLT5zaWdwX2VtZXJnX3BlbmRpbmcpOwogCXNldF9iaXQoSVJRX1BFTkRfRVhUX0VNRVJHRU5DWSwgJmxpLT5wZW5kaW5nX2lycXMpOwogCWF0b21pY19vcihDUFVTVEFUX0VYVF9JTlQsIGxpLT5jcHVmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggOGZlMmYxYy4uODQ2NTg5MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtMzQyLDEyICszNDIsMTYgQEAKIAkJciA9IDA7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9TMzkwX1ZFQ1RPUl9SRUdJU1RFUlM6Ci0JCWlmIChNQUNISU5FX0hBU19WWCkgeworCQltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCQlpZiAoYXRvbWljX3JlYWQoJmt2bS0+b25saW5lX3ZjcHVzKSkgeworCQkJciA9IC1FQlVTWTsKKwkJfSBlbHNlIGlmIChNQUNISU5FX0hBU19WWCkgewogCQkJc2V0X2t2bV9mYWNpbGl0eShrdm0tPmFyY2gubW9kZWwuZmFjLT5tYXNrLCAxMjkpOwogCQkJc2V0X2t2bV9mYWNpbGl0eShrdm0tPmFyY2gubW9kZWwuZmFjLT5saXN0LCAxMjkpOwogCQkJciA9IDA7CiAJCX0gZWxzZQogCQkJciA9IC1FSU5WQUw7CisJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAkJVk1fRVZFTlQoa3ZtLCAzLCAiRU5BQkxFOiBDQVBfUzM5MF9WRUNUT1JfUkVHSVNURVJTICVzIiwKIAkJCSByID8gIihub3QgYXZhaWxhYmxlKSIgOiAiKHN1Y2Nlc3MpIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCA3NzE5MWI4Li5kNzZiNTFjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYworKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtNjYwLDcgKzY2MCw3IEBACiAKIAlrdm1fczM5MF9nZXRfcmVnc19ycmUodmNwdSwgJnJlZzEsICZyZWcyKTsKIAotCWlmICghTUFDSElORV9IQVNfUEZNRikKKwlpZiAoIXRlc3Rfa3ZtX2ZhY2lsaXR5KHZjcHUtPmt2bSwgOCkpCiAJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwgUEdNX09QRVJBVElPTik7CiAKIAlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3cubWFzayAmIFBTV19NQVNLX1BTVEFURSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vc2lncC5jIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKaW5kZXggZGE2OTBiNi4uNzdjMjJkNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKQEAgLTI5MSwxMiArMjkxLDggQEAKIAkJCSAgIHUxNiBjcHVfYWRkciwgdTMyIHBhcmFtZXRlciwgdTY0ICpzdGF0dXNfcmVnKQogewogCWludCByYzsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKmRzdF92Y3B1OworCXN0cnVjdCBrdm1fdmNwdSAqZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHVfYnlfaWQodmNwdS0+a3ZtLCBjcHVfYWRkcik7CiAKLQlpZiAoY3B1X2FkZHIgPj0gS1ZNX01BWF9WQ1BVUykKLQkJcmV0dXJuIFNJR1BfQ0NfTk9UX09QRVJBVElPTkFMOwotCi0JZHN0X3ZjcHUgPSBrdm1fZ2V0X3ZjcHUodmNwdS0+a3ZtLCBjcHVfYWRkcik7CiAJaWYgKCFkc3RfdmNwdSkKIAkJcmV0dXJuIFNJR1BfQ0NfTk9UX09QRVJBVElPTkFMOwogCkBAIC00NzgsNyArNDc0LDcgQEAKIAl0cmFjZV9rdm1fczM5MF9oYW5kbGVfc2lncF9wZWkodmNwdSwgb3JkZXJfY29kZSwgY3B1X2FkZHIpOwogCiAJaWYgKG9yZGVyX2NvZGUgPT0gU0lHUF9FWFRFUk5BTF9DQUxMKSB7Ci0JCWRlc3RfdmNwdSA9IGt2bV9nZXRfdmNwdSh2Y3B1LT5rdm0sIGNwdV9hZGRyKTsKKwkJZGVzdF92Y3B1ID0ga3ZtX2dldF92Y3B1X2J5X2lkKHZjcHUtPmt2bSwgY3B1X2FkZHIpOwogCQlCVUdfT04oZGVzdF92Y3B1ID09IE5VTEwpOwogCiAJCWt2bV9zMzkwX3ZjcHVfd2FrZXVwKGRlc3RfdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vaW5pdC5jIGIvYXJjaC9zMzkwL21tL2luaXQuYwppbmRleCBjM2MwN2QzLi5jNzIyNDAwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vaW5pdC5jCisrKyBiL2FyY2gvczM5MC9tbS9pbml0LmMKQEAgLTQ4LDM3ICs0OCwxMyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfemVyb19wYWdlcyh2b2lkKQogewotCXN0cnVjdCBjcHVpZCBjcHVfaWQ7CiAJdW5zaWduZWQgaW50IG9yZGVyOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBpOwogCi0JZ2V0X2NwdV9pZCgmY3B1X2lkKTsKLQlzd2l0Y2ggKGNwdV9pZC5tYWNoaW5lKSB7Ci0JY2FzZSAweDk2NzI6CS8qIGc1ICovCi0JY2FzZSAweDIwNjQ6CS8qIHo5MDAgKi8KLQljYXNlIDB4MjA2NjoJLyogejkwMCAqLwotCWNhc2UgMHgyMDg0OgkvKiB6OTkwICovCi0JY2FzZSAweDIwODY6CS8qIHo5OTAgKi8KLQljYXNlIDB4MjA5NDoJLyogejktMTA5ICovCi0JY2FzZSAweDIwOTY6CS8qIHo5LTEwOSAqLwotCQlvcmRlciA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMHgyMDk3OgkvKiB6MTAgKi8KLQljYXNlIDB4MjA5ODoJLyogejEwICovCi0JY2FzZSAweDI4MTc6CS8qIHoxOTYgKi8KLQljYXNlIDB4MjgxODoJLyogejE5NiAqLwotCQlvcmRlciA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgMHgyODI3OgkvKiB6RUMxMiAqLwotCWNhc2UgMHgyODI4OgkvKiB6RUMxMiAqLwotCQlvcmRlciA9IDU7Ci0JCWJyZWFrOwotCWNhc2UgMHgyOTY0OgkvKiB6MTMgKi8KLQlkZWZhdWx0OgotCQlvcmRlciA9IDc7Ci0JCWJyZWFrOwotCX0KKwkvKiBMYXRlc3QgbWFjaGluZXMgcmVxdWlyZSBhIG1hcHBpbmcgZ3JhbnVsYXJpdHkgb2YgNTEyS0IgKi8KKwlvcmRlciA9IDc7CisKIAkvKiBMaW1pdCBudW1iZXIgb2YgZW1wdHkgemVybyBwYWdlcyBmb3Igc21hbGwgbWVtb3J5IHNpemVzICovCiAJd2hpbGUgKG9yZGVyID4gMiAmJiAodG90YWxyYW1fcGFnZXMgPj4gMTApIDwgKDFVTCA8PCBvcmRlcikpCiAJCW9yZGVyLS07CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vbW1hcC5jIGIvYXJjaC9zMzkwL21tL21tYXAuYwppbmRleCA2ZTU1MmFmLi5lYTAxNDc3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vbW1hcC5jCisrKyBiL2FyY2gvczM5MC9tbS9tbWFwLmMKQEAgLTMxLDkgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAKLXVuc2lnbmVkIGxvbmcgbW1hcF9ybmRfbWFzazsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1tYXBfYWxpZ25fbWFzazsKLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhY2tfbWF4cmFuZG9tX3NpemUodm9pZCkKIHsKIAlpZiAoIShjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkpCkBAIC02MiwxMCArNTksNyBAQAogCiB1bnNpZ25lZCBsb25nIGFyY2hfbW1hcF9ybmQodm9pZCkKIHsKLQlpZiAoaXNfMzJiaXRfdGFzaygpKQotCQlyZXR1cm4gKGdldF9yYW5kb21faW50KCkgJiAweDdmZikgPDwgUEFHRV9TSElGVDsKLQllbHNlCi0JCXJldHVybiAoZ2V0X3JhbmRvbV9pbnQoKSAmIG1tYXBfcm5kX21hc2spIDw8IFBBR0VfU0hJRlQ7CisJcmV0dXJuIChnZXRfcmFuZG9tX2ludCgpICYgTU1BUF9STkRfTUFTSykgPDwgUEFHRV9TSElGVDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW1hcF9iYXNlX2xlZ2FjeSh1bnNpZ25lZCBsb25nIHJuZCkKQEAgLTkyLDcgKzg2LDYgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mbzsKLQlpbnQgZG9fY29sb3JfYWxpZ247CiAKIAlpZiAobGVuID4gVEFTS19TSVpFIC0gbW1hcF9taW5fYWRkcikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDgsMTUgKzEwMSwxNCBAQAogCQkJcmV0dXJuIGFkZHI7CiAJfQogCi0JZG9fY29sb3JfYWxpZ24gPSAwOwotCWlmIChmaWxwIHx8IChmbGFncyAmIE1BUF9TSEFSRUQpKQotCQlkb19jb2xvcl9hbGlnbiA9ICFpc18zMmJpdF90YXNrKCk7Ci0KIAlpbmZvLmZsYWdzID0gMDsKIAlpbmZvLmxlbmd0aCA9IGxlbjsKIAlpbmZvLmxvd19saW1pdCA9IG1tLT5tbWFwX2Jhc2U7CiAJaW5mby5oaWdoX2xpbWl0ID0gVEFTS19TSVpFOwotCWluZm8uYWxpZ25fbWFzayA9IGRvX2NvbG9yX2FsaWduID8gKG1tYXBfYWxpZ25fbWFzayA8PCBQQUdFX1NISUZUKSA6IDA7CisJaWYgKGZpbHAgfHwgKGZsYWdzICYgTUFQX1NIQVJFRCkpCisJCWluZm8uYWxpZ25fbWFzayA9IE1NQVBfQUxJR05fTUFTSyA8PCBQQUdFX1NISUZUOworCWVsc2UKKwkJaW5mby5hbGlnbl9tYXNrID0gMDsKIAlpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIDw8IFBBR0VfU0hJRlQ7CiAJcmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoJmluZm8pOwogfQpAQCAtMTMwLDcgKzEyMiw2IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBhZGRyMDsKIAlzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm87Ci0JaW50IGRvX2NvbG9yX2FsaWduOwogCiAJLyogcmVxdWVzdGVkIGxlbmd0aCB0b28gYmlnIGZvciBlbnRpcmUgYWRkcmVzcyBzcGFjZSAqLwogCWlmIChsZW4gPiBUQVNLX1NJWkUgLSBtbWFwX21pbl9hZGRyKQpAQCAtMTQ4LDE1ICsxMzksMTQgQEAKIAkJCXJldHVybiBhZGRyOwogCX0KIAotCWRvX2NvbG9yX2FsaWduID0gMDsKLQlpZiAoZmlscCB8fCAoZmxhZ3MgJiBNQVBfU0hBUkVEKSkKLQkJZG9fY29sb3JfYWxpZ24gPSAhaXNfMzJiaXRfdGFzaygpOwotCiAJaW5mby5mbGFncyA9IFZNX1VOTUFQUEVEX0FSRUFfVE9QRE9XTjsKIAlpbmZvLmxlbmd0aCA9IGxlbjsKIAlpbmZvLmxvd19saW1pdCA9IG1heChQQUdFX1NJWkUsIG1tYXBfbWluX2FkZHIpOwogCWluZm8uaGlnaF9saW1pdCA9IG1tLT5tbWFwX2Jhc2U7Ci0JaW5mby5hbGlnbl9tYXNrID0gZG9fY29sb3JfYWxpZ24gPyAobW1hcF9hbGlnbl9tYXNrIDw8IFBBR0VfU0hJRlQpIDogMDsKKwlpZiAoZmlscCB8fCAoZmxhZ3MgJiBNQVBfU0hBUkVEKSkKKwkJaW5mby5hbGlnbl9tYXNrID0gTU1BUF9BTElHTl9NQVNLIDw8IFBBR0VfU0hJRlQ7CisJZWxzZQorCQlpbmZvLmFsaWduX21hc2sgPSAwOwogCWluZm8uYWxpZ25fb2Zmc2V0ID0gcGdvZmYgPDwgUEFHRV9TSElGVDsKIAlhZGRyID0gdm1fdW5tYXBwZWRfYXJlYSgmaW5mbyk7CiAKQEAgLTI1NCwzNSArMjQ0LDMgQEAKIAkJbW0tPmdldF91bm1hcHBlZF9hcmVhID0gczM5MF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duOwogCX0KIH0KLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfbW1hcF9ybmQodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1aWQgY3B1X2lkOwotCi0JZ2V0X2NwdV9pZCgmY3B1X2lkKTsKLQlzd2l0Y2ggKGNwdV9pZC5tYWNoaW5lKSB7Ci0JY2FzZSAweDk2NzI6Ci0JY2FzZSAweDIwNjQ6Ci0JY2FzZSAweDIwNjY6Ci0JY2FzZSAweDIwODQ6Ci0JY2FzZSAweDIwODY6Ci0JY2FzZSAweDIwOTQ6Ci0JY2FzZSAweDIwOTY6Ci0JY2FzZSAweDIwOTc6Ci0JY2FzZSAweDIwOTg6Ci0JY2FzZSAweDI4MTc6Ci0JY2FzZSAweDI4MTg6Ci0JY2FzZSAweDI4Mjc6Ci0JY2FzZSAweDI4Mjg6Ci0JCW1tYXBfcm5kX21hc2sgPSAweDdmZlVMOwotCQltbWFwX2FsaWduX21hc2sgPSAwVUw7Ci0JCWJyZWFrOwotCWNhc2UgMHgyOTY0OgkvKiB6MTMgKi8KLQlkZWZhdWx0OgotCQltbWFwX3JuZF9tYXNrID0gMHgzZmY4MFVMOwotCQltbWFwX2FsaWduX21hc2sgPSAweDdmVUw7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X2luaXRjYWxsKHNldHVwX21tYXBfcm5kKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9wY2kvcGNpX2RtYS5jIGIvYXJjaC9zMzkwL3BjaS9wY2lfZG1hLmMKaW5kZXggMzdkMTBmNy4uZDM0OGYyYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL3BjaS9wY2lfZG1hLmMKKysrIGIvYXJjaC9zMzkwL3BjaS9wY2lfZG1hLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlmb3IgKGVudHJ5ID0gdGFibGU7IGVudHJ5IDwgdGFibGUgKyBaUENJX1RBQkxFX0VOVFJJRVM7IGVudHJ5KyspCi0JCSplbnRyeSA9IFpQQ0lfVEFCTEVfSU5WQUxJRCB8IFpQQ0lfVEFCTEVfUFJPVEVDVEVEOworCQkqZW50cnkgPSBaUENJX1RBQkxFX0lOVkFMSUQ7CiAJcmV0dXJuIHRhYmxlOwogfQogCkBAIC01MSw3ICs1MSw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJZm9yIChlbnRyeSA9IHRhYmxlOyBlbnRyeSA8IHRhYmxlICsgWlBDSV9QVF9FTlRSSUVTOyBlbnRyeSsrKQotCQkqZW50cnkgPSBaUENJX1BURV9JTlZBTElEIHwgWlBDSV9UQUJMRV9QUk9URUNURUQ7CisJCSplbnRyeSA9IFpQQ0lfUFRFX0lOVkFMSUQ7CiAJcmV0dXJuIHRhYmxlOwogfQogCkBAIC05NSw3ICs5NSw3IEBACiAJcmV0dXJuIHB0bzsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgKmRtYV93YWxrX2NwdV90cmFucyh1bnNpZ25lZCBsb25nICpydG8sIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit1bnNpZ25lZCBsb25nICpkbWFfd2Fsa19jcHVfdHJhbnModW5zaWduZWQgbG9uZyAqcnRvLCBkbWFfYWRkcl90IGRtYV9hZGRyKQogewogCXVuc2lnbmVkIGxvbmcgKnN0bywgKnB0bzsKIAl1bnNpZ25lZCBpbnQgcnR4LCBzeCwgcHg7CkBAIC0xMTQsMjAgKzExNCwxMCBAQAogCXJldHVybiAmcHRvW3B4XTsKIH0KIAotdm9pZCBkbWFfdXBkYXRlX2NwdV90cmFucyh1bnNpZ25lZCBsb25nICpkbWFfdGFibGUsIHZvaWQgKnBhZ2VfYWRkciwKLQkJCSAgZG1hX2FkZHJfdCBkbWFfYWRkciwgaW50IGZsYWdzKQordm9pZCBkbWFfdXBkYXRlX2NwdV90cmFucyh1bnNpZ25lZCBsb25nICplbnRyeSwgdm9pZCAqcGFnZV9hZGRyLCBpbnQgZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyAqZW50cnk7Ci0KLQllbnRyeSA9IGRtYV93YWxrX2NwdV90cmFucyhkbWFfdGFibGUsIGRtYV9hZGRyKTsKLQlpZiAoIWVudHJ5KSB7Ci0JCVdBUk5fT05fT05DRSgxKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChmbGFncyAmIFpQQ0lfUFRFX0lOVkFMSUQpIHsKIAkJaW52YWxpZGF0ZV9wdF9lbnRyeShlbnRyeSk7Ci0JCXJldHVybjsKIAl9IGVsc2UgewogCQlzZXRfcHRfcGZhYShlbnRyeSwgcGFnZV9hZGRyKTsKIAkJdmFsaWRhdGVfcHRfZW50cnkoZW50cnkpOwpAQCAtMTQ2LDE4ICsxMzYsMjUgQEAKIAl1OCAqcGFnZV9hZGRyID0gKHU4ICopIChwYSAmIFBBR0VfTUFTSyk7CiAJZG1hX2FkZHJfdCBzdGFydF9kbWFfYWRkciA9IGRtYV9hZGRyOwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgKmVudHJ5OwogCWludCBpLCByYyA9IDA7CiAKIAlpZiAoIW5yX3BhZ2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ6ZGV2LT5kbWFfdGFibGVfbG9jaywgaXJxX2ZsYWdzKTsKLQlpZiAoIXpkZXYtPmRtYV90YWJsZSkKKwlpZiAoIXpkZXYtPmRtYV90YWJsZSkgeworCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gbm9fcmVmcmVzaDsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQlkbWFfdXBkYXRlX2NwdV90cmFucyh6ZGV2LT5kbWFfdGFibGUsIHBhZ2VfYWRkciwgZG1hX2FkZHIsCi0JCQkJICAgICBmbGFncyk7CisJCWVudHJ5ID0gZG1hX3dhbGtfY3B1X3RyYW5zKHpkZXYtPmRtYV90YWJsZSwgZG1hX2FkZHIpOworCQlpZiAoIWVudHJ5KSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIHVuZG9fY3B1X3RyYW5zOworCQl9CisJCWRtYV91cGRhdGVfY3B1X3RyYW5zKGVudHJ5LCBwYWdlX2FkZHIsIGZsYWdzKTsKIAkJcGFnZV9hZGRyICs9IFBBR0VfU0laRTsKIAkJZG1hX2FkZHIgKz0gUEFHRV9TSVpFOwogCX0KQEAgLTE3Niw2ICsxNzMsMTggQEAKIAogCXJjID0genBjaV9yZWZyZXNoX3RyYW5zKCh1NjQpIHpkZXYtPmZoIDw8IDMyLCBzdGFydF9kbWFfYWRkciwKIAkJCQlucl9wYWdlcyAqIFBBR0VfU0laRSk7Cit1bmRvX2NwdV90cmFuczoKKwlpZiAocmMgJiYgKChmbGFncyAmIFpQQ0lfUFRFX1ZBTElEX01BU0spID09IFpQQ0lfUFRFX1ZBTElEKSkgeworCQlmbGFncyA9IFpQQ0lfUFRFX0lOVkFMSUQ7CisJCXdoaWxlIChpLS0gPiAwKSB7CisJCQlwYWdlX2FkZHIgLT0gUEFHRV9TSVpFOworCQkJZG1hX2FkZHIgLT0gUEFHRV9TSVpFOworCQkJZW50cnkgPSBkbWFfd2Fsa19jcHVfdHJhbnMoemRldi0+ZG1hX3RhYmxlLCBkbWFfYWRkcik7CisJCQlpZiAoIWVudHJ5KQorCQkJCWJyZWFrOworCQkJZG1hX3VwZGF0ZV9jcHVfdHJhbnMoZW50cnksIHBhZ2VfYWRkciwgZmxhZ3MpOworCQl9CisJfQogCiBub19yZWZyZXNoOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpkZXYtPmRtYV90YWJsZV9sb2NrLCBpcnFfZmxhZ3MpOwpAQCAtMjYwLDYgKzI2OSwxNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpkZXYtPmlvbW11X2JpdG1hcF9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB6cGNpX2Vycl9kbWEodW5zaWduZWQgbG9uZyByYywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgcmM7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl9IF9fcGFja2VkIGRhdGEgPSB7cmMsIGFkZHJ9OworCisJenBjaV9lcnJfaGV4KCZkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCiBzdGF0aWMgZG1hX2FkZHJfdCBzMzkwX2RtYV9tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKIAkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKQEAgLTI3MCwzMyArMjg5LDQwIEBACiAJdW5zaWduZWQgbG9uZyBwYSA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKIAlpbnQgZmxhZ3MgPSBaUENJX1BURV9WQUxJRDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCByZXQ7CiAKIAkvKiBUaGlzIHJvdW5kcyB1cCBudW1iZXIgb2YgcGFnZXMgYmFzZWQgb24gc2l6ZSBhbmQgb2Zmc2V0ICovCiAJbnJfcGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGEsIHNpemUsIFBBR0VfU0laRSk7CiAJaW9tbXVfcGFnZV9pbmRleCA9IGRtYV9hbGxvY19pb21tdSh6ZGV2LCBucl9wYWdlcyk7Ci0JaWYgKGlvbW11X3BhZ2VfaW5kZXggPT0gLTEpCisJaWYgKGlvbW11X3BhZ2VfaW5kZXggPT0gLTEpIHsKKwkJcmV0ID0gLUVOT1NQQzsKIAkJZ290byBvdXRfZXJyOworCX0KIAogCS8qIFVzZSByb3VuZGVkIHVwIHNpemUgKi8KIAlzaXplID0gbnJfcGFnZXMgKiBQQUdFX1NJWkU7CiAKIAlkbWFfYWRkciA9IHpkZXYtPnN0YXJ0X2RtYSArIGlvbW11X3BhZ2VfaW5kZXggKiBQQUdFX1NJWkU7Ci0JaWYgKGRtYV9hZGRyICsgc2l6ZSA+IHpkZXYtPmVuZF9kbWEpCisJaWYgKGRtYV9hZGRyICsgc2l6ZSA+IHpkZXYtPmVuZF9kbWEpIHsKKwkJcmV0ID0gLUVSQU5HRTsKIAkJZ290byBvdXRfZnJlZTsKKwl9CiAKIAlpZiAoZGlyZWN0aW9uID09IERNQV9OT05FIHx8IGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQogCQlmbGFncyB8PSBaUENJX1RBQkxFX1BST1RFQ1RFRDsKIAotCWlmICghZG1hX3VwZGF0ZV90cmFucyh6ZGV2LCBwYSwgZG1hX2FkZHIsIHNpemUsIGZsYWdzKSkgewotCQlhdG9taWM2NF9hZGQobnJfcGFnZXMsICZ6ZGV2LT5tYXBwZWRfcGFnZXMpOwotCQlyZXR1cm4gZG1hX2FkZHIgKyAob2Zmc2V0ICYgflBBR0VfTUFTSyk7Ci0JfQorCXJldCA9IGRtYV91cGRhdGVfdHJhbnMoemRldiwgcGEsIGRtYV9hZGRyLCBzaXplLCBmbGFncyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKworCWF0b21pYzY0X2FkZChucl9wYWdlcywgJnpkZXYtPm1hcHBlZF9wYWdlcyk7CisJcmV0dXJuIGRtYV9hZGRyICsgKG9mZnNldCAmIH5QQUdFX01BU0spOwogCiBvdXRfZnJlZToKIAlkbWFfZnJlZV9pb21tdSh6ZGV2LCBpb21tdV9wYWdlX2luZGV4LCBucl9wYWdlcyk7CiBvdXRfZXJyOgogCXpwY2lfZXJyKCJtYXAgZXJyb3I6XG4iKTsKLQl6cGNpX2Vycl9oZXgoJnBhLCBzaXplb2YocGEpKTsKKwl6cGNpX2Vycl9kbWEocmV0LCBwYSk7CiAJcmV0dXJuIERNQV9FUlJPUl9DT0RFOwogfQogCkBAIC0zMDYsMTQgKzMzMiwxNiBAQAogewogCXN0cnVjdCB6cGNpX2RldiAqemRldiA9IHRvX3pwY2kodG9fcGNpX2RldihkZXYpKTsKIAl1bnNpZ25lZCBsb25nIGlvbW11X3BhZ2VfaW5kZXg7Ci0JaW50IG5wYWdlczsKKwlpbnQgbnBhZ2VzLCByZXQ7CiAKIAlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2FkZHIsIHNpemUsIFBBR0VfU0laRSk7CiAJZG1hX2FkZHIgPSBkbWFfYWRkciAmIFBBR0VfTUFTSzsKLQlpZiAoZG1hX3VwZGF0ZV90cmFucyh6ZGV2LCAwLCBkbWFfYWRkciwgbnBhZ2VzICogUEFHRV9TSVpFLAotCQkJICAgICBaUENJX1RBQkxFX1BST1RFQ1RFRCB8IFpQQ0lfUFRFX0lOVkFMSUQpKSB7CisJcmV0ID0gZG1hX3VwZGF0ZV90cmFucyh6ZGV2LCAwLCBkbWFfYWRkciwgbnBhZ2VzICogUEFHRV9TSVpFLAorCQkJICAgICAgIFpQQ0lfUFRFX0lOVkFMSUQpOworCWlmIChyZXQpIHsKIAkJenBjaV9lcnIoInVubWFwIGVycm9yOlxuIik7Ci0JCXpwY2lfZXJyX2hleCgmZG1hX2FkZHIsIHNpemVvZihkbWFfYWRkcikpOworCQl6cGNpX2Vycl9kbWEocmV0LCBkbWFfYWRkcik7CisJCXJldHVybjsKIAl9CiAKIAlhdG9taWM2NF9hZGQobnBhZ2VzLCAmemRldi0+dW5tYXBwZWRfcGFnZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZF82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZF82NC5oCmluZGV4IGU2ODIwYzguLjQ3ZWJkNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS91YXBpL2FzbS91bmlzdGRfNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkXzY0LmgKQEAgLTI3OCw3ICsyNzgsNyBAQAogI2RlZmluZSBfX05SX2ZzZXR4YXR0cgkJMjU2CiAjZGVmaW5lIF9fTlJfZ2V0eGF0dHIJCTI1NwogI2RlZmluZSBfX05SX2xnZXR4YXR0cgkJMjU4Ci0jZGVmaW5lIF9fTlJfZmdldHhhdHRyCQkyNjkKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIJCTI1OQogI2RlZmluZSBfX05SX2xpc3R4YXR0cgkJMjYwCiAjZGVmaW5lIF9fTlJfbGxpc3R4YXR0cgkJMjYxCiAjZGVmaW5lIF9fTlJfZmxpc3R4YXR0cgkJMjYyCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3NoL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggN2NmZDdmMS4uNGRjYTE4MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTAsNyArMTAsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEphc3dpbmRlciBTaW5naCBSYWpwdXQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiwgUm9iZXJ0IFJpY2h0ZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYQogICogIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiwgPG1hcmt1cy50Lm1ldHpnZXJAaW50ZWwuY29tPgogICoKICAqIHBwYzoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl82NC5oCmluZGV4IDM3MGNhMWUuLjkzMzEwODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfNjQuaApAQCAtOTUsNiArOTUsNyBAQAogICogcmVhbGx5IGF2YWlsYWJsZS4gIFNvIHdlIHNpbXBseSBhZHZlcnRpc2Ugb25seSAiY3J5cHRvIiBzdXBwb3J0LgogICovCiAjZGVmaW5lIEhXQ0FQX1NQQVJDX0NSWVBUTwkweDA0MDAwMDAwIC8qIENSWVBUTyBpbnNucyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgSFdDQVBfU1BBUkNfQURJCQkweDA4MDAwMDAwIC8qIEFESSBhdmFpbGFibGUgKi8KIAogI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKaW5kZXggZWZlOTQ3OS4uMWMyNmQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtNDE3LDggKzQxNywxMyBAQAogI2RlZmluZSBfX05SX2JwZgkJMzQ5CiAjZGVmaW5lIF9fTlJfZXhlY3ZlYXQJCTM1MAogI2RlZmluZSBfX05SX21lbWJhcnJpZXIJCTM1MQorI2RlZmluZSBfX05SX3VzZXJmYXVsdGZkCTM1MgorI2RlZmluZSBfX05SX2JpbmQJCTM1MworI2RlZmluZSBfX05SX2xpc3RlbgkJMzU0CisjZGVmaW5lIF9fTlJfc2V0c29ja29wdAkJMzU1CisjZGVmaW5lIF9fTlJfbWxvY2syCQkzNTYKIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMzUyCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzNTcKIAogLyogQml0bWFzayB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBrZXJuX2ZlYXR1cmVzIHN5c3RlbSBjYWxsLiAgKi8KICNkZWZpbmUgS0VSTl9GRUFUVVJFX01JWEVEX01PREVfU1RBQ0sJMHgwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDNkNjFmY2EuLmYyZDMwY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTk0Niw2ICs5NDYsMTIgQEAKIAkgbW92CTEsICVvMAogRU5EUFJPQyhfX3JldGxfb25lKQogCitFTlRSWShfX3JldGxfb25lX2ZwKQorCVZJU0V4aXRIYWxmCisJcmV0bAorCSBtb3YJMSwgJW8wCitFTkRQUk9DKF9fcmV0bF9vbmVfZnApCisKIEVOVFJZKF9fcmV0X29uZV9hc2kpCiAJd3IJJWcwLCBBU0lfQUlVUywgJWFzaQogCXJldApAQCAtOTU4LDYgKzk2NCwxMyBAQAogCSBtb3YJMSwgJW8wCiBFTkRQUk9DKF9fcmV0bF9vbmVfYXNpKQogCitFTlRSWShfX3JldGxfb25lX2FzaV9mcCkKKwl3cgklZzAsIEFTSV9BSVVTLCAlYXNpCisJVklTRXhpdEhhbGYKKwlyZXRsCisJIG1vdgkxLCAlbzAKK0VORFBST0MoX19yZXRsX29uZV9hc2lfZnApCisKIEVOVFJZKF9fcmV0bF9vMSkKIAlyZXRsCiAJIG1vdgklbzEsICVvMApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGIwZGE1YWUuLjY1OTZmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTksNyArOSw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSmFzd2luZGVyIFNpbmdoIFJhanB1dAogICogIENvcHlyaWdodCAoQykgMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuLCBSb2JlcnQgUmljaHRlcgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KQEAgLTE4MjgsMTEgKzE4MjgsMTggQEAKIHZvaWQKIHBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJdTY0IHNhdmVkX2ZhdWx0X2FkZHJlc3MgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZhdWx0X2FkZHJlc3M7CisJdTggc2F2ZWRfZmF1bHRfY29kZSA9IGdldF90aHJlYWRfZmF1bHRfY29kZSgpOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisKIAlwZXJmX2NhbGxjaGFpbl9zdG9yZShlbnRyeSwgcmVncy0+dHBjKTsKIAogCWlmICghY3VycmVudC0+bW0pCiAJCXJldHVybjsKIAorCW9sZF9mcyA9IGdldF9mcygpOworCXNldF9mcyhVU0VSX0RTKTsKKwogCWZsdXNod191c2VyKCk7CiAKIAlwYWdlZmF1bHRfZGlzYWJsZSgpOwpAQCAtMTg0Myw0ICsxODUwLDggQEAKIAkJcGVyZl9jYWxsY2hhaW5fdXNlcl82NChlbnRyeSwgcmVncyk7CiAKIAlwYWdlZmF1bHRfZW5hYmxlKCk7CisKKwlzZXRfZnMob2xkX2ZzKTsKKwlzZXRfdGhyZWFkX2ZhdWx0X2NvZGUoc2F2ZWRfZmF1bHRfY29kZSk7CisJY3VycmVudF90aHJlYWRfaW5mbygpLT5mYXVsdF9hZGRyZXNzID0gc2F2ZWRfZmF1bHRfYWRkcmVzczsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3J0cmFwXzY0LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9ydHJhcF82NC5TCmluZGV4IDM5ZjBjNjYuLmQwOGJkYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3J0cmFwXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcnRyYXBfNjQuUwpAQCAtNzMsNyArNzMsMTMgQEAKIAkJYW5kbgkJCSVsMSwgJWw0LCAlbDEKIAkJc3JsCQkJJWw0LCAyMCwgJWw0CiAJCWJhLHB0CQkJJXhjYywgcnRyYXBfbm9faXJxX2VuYWJsZQotCQkgd3JwcgkJCSVsNCwgJXBpbAorCQlub3AKKwkJLyogRG8gbm90IGFjdHVhbGx5IHNldCB0aGUgJXBpbCBoZXJlLiAgV2Ugd2lsbCBkbyB0aGF0CisJCSAqIGJlbG93IGFmdGVyIHdlIGNsZWFyIFBTVEFURV9JRSBpbiB0aGUgJXBzdGF0ZSByZWdpc3Rlci4KKwkJICogSWYgd2UgcmUtZW5hYmxlIGludGVycnVwdHMgaGVyZSwgd2UgY2FuIHJlY3Vyc2UgZG93bgorCQkgKiB0aGUgaGFyZGlycSBzdGFjayBwb3RlbnRpYWxseSBlbmRsZXNzbHksIGNhdXNpbmcgYQorCQkgKiBzdGFjayBvdmVyZmxvdy4KKwkJICovCiAKIAkJLmFsaWduCQkJNjQKIAkJLmdsb2JsCQkJcnRyYXBfaXJxLCBydHJhcCwgaXJxc3pfcGF0Y2htZSwgcnRyYXBfeGNhbGwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IGY3YjI2MTcuLmYzMTg1ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtMzgwLDcgKzM4MCw4IEBACiAJICovCiAJIm11bDMyIiwgImRpdjMyIiwgImZzbXVsZCIsICJ2OHBsdXMiLCAicG9wYyIsICJ2aXMiLCAidmlzMiIsCiAJIkFTSUJsa0luaXQiLCAiZm1hZiIsICJ2aXMzIiwgImhwYyIsICJyYW5kb20iLCAidHJhbnMiLCAiZmpmbWF1IiwKLQkiaW1hIiwgImNzcGFyZSIsICJwYXVzZSIsICJjYmNvbmQiLAorCSJpbWEiLCAiY3NwYXJlIiwgInBhdXNlIiwgImNiY29uZCIsIE5VTEwgLypyZXNlcnZlZCBmb3IgY3J5cHRvICovLAorCSJhZHAiLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNyeXB0b19od2NhcHNbXSA9IHsKQEAgLTM5Niw3ICszOTcsNyBAQAogCXNlcV9wdXRzKG0sICJjcHVjYXBzXHRcdDogIik7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdjYXBzKTsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgYml0ID0gMVVMIDw8IGk7Ci0JCWlmIChjYXBzICYgYml0KSB7CisJCWlmIChod2NhcHNbaV0gJiYgKGNhcHMgJiBiaXQpKSB7CiAJCQlzZXFfcHJpbnRmKG0sICIlcyVzIiwKIAkJCQkgICBwcmludGVkID8gIiwiIDogIiIsIGh3Y2Fwc1tpXSk7CiAJCQlwcmludGVkKys7CkBAIC00NTAsNyArNDUxLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh3Y2Fwcyk7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCBpOwotCQlpZiAoY2FwcyAmIGJpdCkKKwkJaWYgKGh3Y2Fwc1tpXSAmJiAoY2FwcyAmIGJpdCkpCiAJCQlyZXBvcnRfb25lX2h3Y2FwKCZwcmludGVkLCBod2NhcHNbaV0pOwogCX0KIAlpZiAoY2FwcyAmIEhXQ0FQX1NQQVJDX0NSWVBUTykKQEAgLTQ4NSw3ICs0ODYsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShod2NhcHMpOyBpKyspIHsKIAkJCXVuc2lnbmVkIGxvbmcgYml0ID0gMVVMIDw8IGk7CiAKLQkJCWlmICghc3RyY21wKHByb3AsIGh3Y2Fwc1tpXSkpIHsKKwkJCWlmIChod2NhcHNbaV0gJiYgIXN0cmNtcChwcm9wLCBod2NhcHNbaV0pKSB7CiAJCQkJY2FwcyB8PSBiaXQ7CiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKaW5kZXggY2MyM2I2Mi4uZTY2M2I2YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUwpAQCAtMzUsMTggKzM1LDE4IEBACiAvKjgwKi8JLmxvbmcgc3lzX3NldGdyb3VwczE2LCBzeXNfZ2V0cGdycCwgc3lzX3NldGdyb3Vwcywgc3lzX3NldGl0aW1lciwgc3lzX2Z0cnVuY2F0ZTY0CiAvKjg1Ki8JLmxvbmcgc3lzX3N3YXBvbiwgc3lzX2dldGl0aW1lciwgc3lzX3NldHVpZCwgc3lzX3NldGhvc3RuYW1lLCBzeXNfc2V0Z2lkCiAvKjkwKi8JLmxvbmcgc3lzX2R1cDIsIHN5c19zZXRmc3VpZCwgc3lzX2ZjbnRsLCBzeXNfc2VsZWN0LCBzeXNfc2V0ZnNnaWQKLS8qOTUqLwkubG9uZyBzeXNfZnN5bmMsIHN5c19zZXRwcmlvcml0eSwgc3lzX25pc19zeXNjYWxsLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19uaXNfc3lzY2FsbAorLyo5NSovCS5sb25nIHN5c19mc3luYywgc3lzX3NldHByaW9yaXR5LCBzeXNfc29ja2V0LCBzeXNfY29ubmVjdCwgc3lzX2FjY2VwdAogLyoxMDAqLwkubG9uZyBzeXNfZ2V0cHJpb3JpdHksIHN5c19ydF9zaWdyZXR1cm4sIHN5c19ydF9zaWdhY3Rpb24sIHN5c19ydF9zaWdwcm9jbWFzaywgc3lzX3J0X3NpZ3BlbmRpbmcKIC8qMTA1Ki8JLmxvbmcgc3lzX3J0X3NpZ3RpbWVkd2FpdCwgc3lzX3J0X3NpZ3F1ZXVlaW5mbywgc3lzX3J0X3NpZ3N1c3BlbmQsIHN5c19zZXRyZXN1aWQsIHN5c19nZXRyZXN1aWQKLS8qMTEwKi8JLmxvbmcgc3lzX3NldHJlc2dpZCwgc3lzX2dldHJlc2dpZCwgc3lzX3NldHJlZ2lkLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19uaXNfc3lzY2FsbAotLyoxMTUqLwkubG9uZyBzeXNfZ2V0Z3JvdXBzLCBzeXNfZ2V0dGltZW9mZGF5LCBzeXNfZ2V0cnVzYWdlLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19nZXRjd2QKKy8qMTEwKi8JLmxvbmcgc3lzX3NldHJlc2dpZCwgc3lzX2dldHJlc2dpZCwgc3lzX3NldHJlZ2lkLCBzeXNfcmVjdm1zZywgc3lzX3NlbmRtc2cKKy8qMTE1Ki8JLmxvbmcgc3lzX2dldGdyb3Vwcywgc3lzX2dldHRpbWVvZmRheSwgc3lzX2dldHJ1c2FnZSwgc3lzX2dldHNvY2tvcHQsIHN5c19nZXRjd2QKIC8qMTIwKi8JLmxvbmcgc3lzX3JlYWR2LCBzeXNfd3JpdGV2LCBzeXNfc2V0dGltZW9mZGF5LCBzeXNfZmNob3duMTYsIHN5c19mY2htb2QKLS8qMTI1Ki8JLmxvbmcgc3lzX25pc19zeXNjYWxsLCBzeXNfc2V0cmV1aWQxNiwgc3lzX3NldHJlZ2lkMTYsIHN5c19yZW5hbWUsIHN5c190cnVuY2F0ZQotLyoxMzAqLwkubG9uZyBzeXNfZnRydW5jYXRlLCBzeXNfZmxvY2ssIHN5c19sc3RhdDY0LCBzeXNfbmlzX3N5c2NhbGwsIHN5c19uaXNfc3lzY2FsbAotLyoxMzUqLwkubG9uZyBzeXNfbmlzX3N5c2NhbGwsIHN5c19ta2Rpciwgc3lzX3JtZGlyLCBzeXNfdXRpbWVzLCBzeXNfc3RhdDY0Ci0vKjE0MCovCS5sb25nIHN5c19zZW5kZmlsZTY0LCBzeXNfbmlzX3N5c2NhbGwsIHN5c19mdXRleCwgc3lzX2dldHRpZCwgc3lzX2dldHJsaW1pdAorLyoxMjUqLwkubG9uZyBzeXNfcmVjdmZyb20sIHN5c19zZXRyZXVpZDE2LCBzeXNfc2V0cmVnaWQxNiwgc3lzX3JlbmFtZSwgc3lzX3RydW5jYXRlCisvKjEzMCovCS5sb25nIHN5c19mdHJ1bmNhdGUsIHN5c19mbG9jaywgc3lzX2xzdGF0NjQsIHN5c19zZW5kdG8sIHN5c19zaHV0ZG93bgorLyoxMzUqLwkubG9uZyBzeXNfc29ja2V0cGFpciwgc3lzX21rZGlyLCBzeXNfcm1kaXIsIHN5c191dGltZXMsIHN5c19zdGF0NjQKKy8qMTQwKi8JLmxvbmcgc3lzX3NlbmRmaWxlNjQsIHN5c19nZXRwZWVybmFtZSwgc3lzX2Z1dGV4LCBzeXNfZ2V0dGlkLCBzeXNfZ2V0cmxpbWl0CiAvKjE0NSovCS5sb25nIHN5c19zZXRybGltaXQsIHN5c19waXZvdF9yb290LCBzeXNfcHJjdGwsIHN5c19wY2ljb25maWdfcmVhZCwgc3lzX3BjaWNvbmZpZ193cml0ZQotLyoxNTAqLwkubG9uZyBzeXNfbmlzX3N5c2NhbGwsIHN5c19pbm90aWZ5X2luaXQsIHN5c19pbm90aWZ5X2FkZF93YXRjaCwgc3lzX3BvbGwsIHN5c19nZXRkZW50czY0CisvKjE1MCovCS5sb25nIHN5c19nZXRzb2NrbmFtZSwgc3lzX2lub3RpZnlfaW5pdCwgc3lzX2lub3RpZnlfYWRkX3dhdGNoLCBzeXNfcG9sbCwgc3lzX2dldGRlbnRzNjQKIC8qMTU1Ki8JLmxvbmcgc3lzX2ZjbnRsNjQsIHN5c19pbm90aWZ5X3JtX3dhdGNoLCBzeXNfc3RhdGZzLCBzeXNfZnN0YXRmcywgc3lzX29sZHVtb3VudAogLyoxNjAqLwkubG9uZyBzeXNfc2NoZWRfc2V0YWZmaW5pdHksIHN5c19zY2hlZF9nZXRhZmZpbml0eSwgc3lzX2dldGRvbWFpbm5hbWUsIHN5c19zZXRkb21haW5uYW1lLCBzeXNfbmlzX3N5c2NhbGwKIC8qMTY1Ki8JLmxvbmcgc3lzX3F1b3RhY3RsLCBzeXNfc2V0X3RpZF9hZGRyZXNzLCBzeXNfbW91bnQsIHN5c191c3RhdCwgc3lzX3NldHhhdHRyCkBAIC04Nyw0ICs4Nyw1IEBACiAvKjMzNSovCS5sb25nIHN5c19zeW5jZnMsIHN5c19zZW5kbW1zZywgc3lzX3NldG5zLCBzeXNfcHJvY2Vzc192bV9yZWFkdiwgc3lzX3Byb2Nlc3Nfdm1fd3JpdGV2CiAvKjM0MCovCS5sb25nIHN5c19uaV9zeXNjYWxsLCBzeXNfa2NtcCwgc3lzX2Zpbml0X21vZHVsZSwgc3lzX3NjaGVkX3NldGF0dHIsIHN5c19zY2hlZF9nZXRhdHRyCiAvKjM0NSovCS5sb25nIHN5c19yZW5hbWVhdDIsIHN5c19zZWNjb21wLCBzeXNfZ2V0cmFuZG9tLCBzeXNfbWVtZmRfY3JlYXRlLCBzeXNfYnBmCi0vKjM1MCovCS5sb25nIHN5c19leGVjdmVhdCwgc3lzX21lbWJhcnJpZXIKKy8qMzUwKi8JLmxvbmcgc3lzX2V4ZWN2ZWF0LCBzeXNfbWVtYmFycmllciwgc3lzX3VzZXJmYXVsdGZkLCBzeXNfYmluZCwgc3lzX2xpc3RlbgorLyozNTUqLwkubG9uZyBzeXNfc2V0c29ja29wdCwgc3lzX21sb2NrMgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCmluZGV4IGYyMjk0NjguLjE1NTcxMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKQEAgLTM3LDE1ICszNywxNSBAQAogLyo4MCovCS53b3JkIHN5c19zZXRncm91cHMxNiwgc3lzX2dldHBncnAsIHN5c19zZXRncm91cHMsIGNvbXBhdF9zeXNfc2V0aXRpbWVyLCBzeXMzMl9mdHJ1bmNhdGU2NAogCS53b3JkIHN5c19zd2Fwb24sIGNvbXBhdF9zeXNfZ2V0aXRpbWVyLCBzeXNfc2V0dWlkLCBzeXNfc2V0aG9zdG5hbWUsIHN5c19zZXRnaWQKIC8qOTAqLwkud29yZCBzeXNfZHVwMiwgc3lzX3NldGZzdWlkLCBjb21wYXRfc3lzX2ZjbnRsLCBzeXMzMl9zZWxlY3QsIHN5c19zZXRmc2dpZAotCS53b3JkIHN5c19mc3luYywgc3lzX3NldHByaW9yaXR5LCBzeXNfbmlzX3N5c2NhbGwsIHN5c19uaXNfc3lzY2FsbCwgc3lzX25pc19zeXNjYWxsCisJLndvcmQgc3lzX2ZzeW5jLCBzeXNfc2V0cHJpb3JpdHksIHN5c19zb2NrZXQsIHN5c19jb25uZWN0LCBzeXNfYWNjZXB0CiAvKjEwMCovIC53b3JkIHN5c19nZXRwcmlvcml0eSwgc3lzMzJfcnRfc2lncmV0dXJuLCBjb21wYXRfc3lzX3J0X3NpZ2FjdGlvbiwgY29tcGF0X3N5c19ydF9zaWdwcm9jbWFzaywgY29tcGF0X3N5c19ydF9zaWdwZW5kaW5nCiAJLndvcmQgY29tcGF0X3N5c19ydF9zaWd0aW1lZHdhaXQsIGNvbXBhdF9zeXNfcnRfc2lncXVldWVpbmZvLCBjb21wYXRfc3lzX3J0X3NpZ3N1c3BlbmQsIHN5c19zZXRyZXN1aWQsIHN5c19nZXRyZXN1aWQKLS8qMTEwKi8JLndvcmQgc3lzX3NldHJlc2dpZCwgc3lzX2dldHJlc2dpZCwgc3lzX3NldHJlZ2lkLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19uaXNfc3lzY2FsbAotCS53b3JkIHN5c19nZXRncm91cHMsIGNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5LCBjb21wYXRfc3lzX2dldHJ1c2FnZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfZ2V0Y3dkCisvKjExMCovCS53b3JkIHN5c19zZXRyZXNnaWQsIHN5c19nZXRyZXNnaWQsIHN5c19zZXRyZWdpZCwgY29tcGF0X3N5c19yZWN2bXNnLCBjb21wYXRfc3lzX3NlbmRtc2cKKwkud29yZCBzeXNfZ2V0Z3JvdXBzLCBjb21wYXRfc3lzX2dldHRpbWVvZmRheSwgY29tcGF0X3N5c19nZXRydXNhZ2UsIGNvbXBhdF9zeXNfZ2V0c29ja29wdCwgc3lzX2dldGN3ZAogLyoxMjAqLwkud29yZCBjb21wYXRfc3lzX3JlYWR2LCBjb21wYXRfc3lzX3dyaXRldiwgY29tcGF0X3N5c19zZXR0aW1lb2ZkYXksIHN5c19mY2hvd24xNiwgc3lzX2ZjaG1vZAotCS53b3JkIHN5c19uaXNfc3lzY2FsbCwgc3lzX3NldHJldWlkMTYsIHN5c19zZXRyZWdpZDE2LCBzeXNfcmVuYW1lLCBjb21wYXRfc3lzX3RydW5jYXRlCi0vKjEzMCovCS53b3JkIGNvbXBhdF9zeXNfZnRydW5jYXRlLCBzeXNfZmxvY2ssIGNvbXBhdF9zeXNfbHN0YXQ2NCwgc3lzX25pc19zeXNjYWxsLCBzeXNfbmlzX3N5c2NhbGwKLQkud29yZCBzeXNfbmlzX3N5c2NhbGwsIHN5c19ta2Rpciwgc3lzX3JtZGlyLCBjb21wYXRfc3lzX3V0aW1lcywgY29tcGF0X3N5c19zdGF0NjQKKwkud29yZCBzeXNfcmVjdmZyb20sIHN5c19zZXRyZXVpZDE2LCBzeXNfc2V0cmVnaWQxNiwgc3lzX3JlbmFtZSwgY29tcGF0X3N5c190cnVuY2F0ZQorLyoxMzAqLwkud29yZCBjb21wYXRfc3lzX2Z0cnVuY2F0ZSwgc3lzX2Zsb2NrLCBjb21wYXRfc3lzX2xzdGF0NjQsIHN5c19zZW5kdG8sIHN5c19zaHV0ZG93bgorCS53b3JkIHN5c19zb2NrZXRwYWlyLCBzeXNfbWtkaXIsIHN5c19ybWRpciwgY29tcGF0X3N5c191dGltZXMsIGNvbXBhdF9zeXNfc3RhdDY0CiAvKjE0MCovCS53b3JkIHN5c19zZW5kZmlsZTY0LCBzeXNfbmlzX3N5c2NhbGwsIHN5czMyX2Z1dGV4LCBzeXNfZ2V0dGlkLCBjb21wYXRfc3lzX2dldHJsaW1pdAogCS53b3JkIGNvbXBhdF9zeXNfc2V0cmxpbWl0LCBzeXNfcGl2b3Rfcm9vdCwgc3lzX3ByY3RsLCBzeXNfcGNpY29uZmlnX3JlYWQsIHN5c19wY2ljb25maWdfd3JpdGUKIC8qMTUwKi8JLndvcmQgc3lzX25pc19zeXNjYWxsLCBzeXNfaW5vdGlmeV9pbml0LCBzeXNfaW5vdGlmeV9hZGRfd2F0Y2gsIHN5c19wb2xsLCBzeXNfZ2V0ZGVudHM2NApAQCAtODgsNyArODgsOCBAQAogCS53b3JkIHN5c19zeW5jZnMsIGNvbXBhdF9zeXNfc2VuZG1tc2csIHN5c19zZXRucywgY29tcGF0X3N5c19wcm9jZXNzX3ZtX3JlYWR2LCBjb21wYXRfc3lzX3Byb2Nlc3Nfdm1fd3JpdGV2CiAvKjM0MCovCS53b3JkIHN5c19rZXJuX2ZlYXR1cmVzLCBzeXNfa2NtcCwgc3lzX2Zpbml0X21vZHVsZSwgc3lzX3NjaGVkX3NldGF0dHIsIHN5c19zY2hlZF9nZXRhdHRyCiAJLndvcmQgc3lzMzJfcmVuYW1lYXQyLCBzeXNfc2VjY29tcCwgc3lzX2dldHJhbmRvbSwgc3lzX21lbWZkX2NyZWF0ZSwgc3lzX2JwZgotLyozNTAqLwkud29yZCBzeXMzMl9leGVjdmVhdCwgc3lzX21lbWJhcnJpZXIKKy8qMzUwKi8JLndvcmQgc3lzMzJfZXhlY3ZlYXQsIHN5c19tZW1iYXJyaWVyLCBzeXNfdXNlcmZhdWx0ZmQsIHN5c19iaW5kLCBzeXNfbGlzdGVuCisJLndvcmQgY29tcGF0X3N5c19zZXRzb2Nrb3B0LCBzeXNfbWxvY2syCiAKICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKQEAgLTE2OCw0ICsxNjksNSBAQAogCS53b3JkIHN5c19zeW5jZnMsIHN5c19zZW5kbW1zZywgc3lzX3NldG5zLCBzeXNfcHJvY2Vzc192bV9yZWFkdiwgc3lzX3Byb2Nlc3Nfdm1fd3JpdGV2CiAvKjM0MCovCS53b3JkIHN5c19rZXJuX2ZlYXR1cmVzLCBzeXNfa2NtcCwgc3lzX2Zpbml0X21vZHVsZSwgc3lzX3NjaGVkX3NldGF0dHIsIHN5c19zY2hlZF9nZXRhdHRyCiAJLndvcmQgc3lzX3JlbmFtZWF0Miwgc3lzX3NlY2NvbXAsIHN5c19nZXRyYW5kb20sIHN5c19tZW1mZF9jcmVhdGUsIHN5c19icGYKLS8qMzUwKi8JLndvcmQgc3lzNjRfZXhlY3ZlYXQsIHN5c19tZW1iYXJyaWVyCisvKjM1MCovCS53b3JkIHN5czY0X2V4ZWN2ZWF0LCBzeXNfbWVtYmFycmllciwgc3lzX3VzZXJmYXVsdGZkLCBzeXNfYmluZCwgc3lzX2xpc3RlbgorCS53b3JkIHN5c19zZXRzb2Nrb3B0LCBzeXNfbWxvY2syCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9ORzJjb3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvTkcyY29weV9mcm9tX3VzZXIuUwppbmRleCAxMTljY2I5Li5kNTI0MmI4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9ORzJjb3B5X2Zyb21fdXNlci5TCisrKyBiL2FyY2gvc3BhcmMvbGliL05HMmNvcHlfZnJvbV91c2VyLlMKQEAgLTExLDYgKzExLDE0IEBACiAJLnRleHQ7CQkJXAogCS5hbGlnbiA0OwogCisjZGVmaW5lIEVYX0xEX0ZQKHgpCQlcCis5ODoJeDsJCQlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAorCS5hbGlnbiA0OwkJXAorCS53b3JkIDk4YiwgX19yZXRsX29uZV9hc2lfZnA7XAorCS50ZXh0OwkJCVwKKwkuYWxpZ24gNDsKKwogI2lmbmRlZiBBU0lfQUlVUwogI2RlZmluZSBBU0lfQUlVUwkweDExCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL05HMmNvcHlfdG9fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvTkcyY29weV90b191c2VyLlMKaW5kZXggN2ZlMWNjZS4uNGU5NjJkOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvTkcyY29weV90b191c2VyLlMKKysrIGIvYXJjaC9zcGFyYy9saWIvTkcyY29weV90b191c2VyLlMKQEAgLTExLDYgKzExLDE0IEBACiAJLnRleHQ7CQkJXAogCS5hbGlnbiA0OwogCisjZGVmaW5lIEVYX1NUX0ZQKHgpCQlcCis5ODoJeDsJCQlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAorCS5hbGlnbiA0OwkJXAorCS53b3JkIDk4YiwgX19yZXRsX29uZV9hc2lfZnA7XAorCS50ZXh0OwkJCVwKKwkuYWxpZ24gNDsKKwogI2lmbmRlZiBBU0lfQUlVUwogI2RlZmluZSBBU0lfQUlVUwkweDExCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL05HMm1lbWNweS5TIGIvYXJjaC9zcGFyYy9saWIvTkcybWVtY3B5LlMKaW5kZXggMzBlZWU2ZS4uZDVmNTg1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvTkcybWVtY3B5LlMKKysrIGIvYXJjaC9zcGFyYy9saWIvTkcybWVtY3B5LlMKQEAgLTM0LDEwICszNCwxNiBAQAogI2lmbmRlZiBFWF9MRAogI2RlZmluZSBFWF9MRCh4KQl4CiAjZW5kaWYKKyNpZm5kZWYgRVhfTERfRlAKKyNkZWZpbmUgRVhfTERfRlAoeCkJeAorI2VuZGlmCiAKICNpZm5kZWYgRVhfU1QKICNkZWZpbmUgRVhfU1QoeCkJeAogI2VuZGlmCisjaWZuZGVmIEVYX1NUX0ZQCisjZGVmaW5lIEVYX1NUX0ZQKHgpCXgKKyNlbmRpZgogCiAjaWZuZGVmIEVYX1JFVFZBTAogI2RlZmluZSBFWF9SRVRWQUwoeCkJeApAQCAtMTM0LDQwICsxNDAsNDAgQEAKIAlmc3JjMgkJJXg2LCAlZjEyOyBcCiAJZnNyYzIJCSV4NywgJWYxNDsKICNkZWZpbmUgRlJFR19MT0FEXzEoYmFzZSwgeDApIFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MDAsICV4MCkpCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDAwLCAleDApKQogI2RlZmluZSBGUkVHX0xPQURfMihiYXNlLCB4MCwgeDEpIFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MDAsICV4MCkpOyBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDA4LCAleDEpKTsKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MDAsICV4MCkpOyBcCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDA4LCAleDEpKTsKICNkZWZpbmUgRlJFR19MT0FEXzMoYmFzZSwgeDAsIHgxLCB4MikgXAotCUVYX0xEKExPQUQobGRkLCBiYXNlICsgMHgwMCwgJXgwKSk7IFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MDgsICV4MSkpOyBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDEwLCAleDIpKTsKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MDAsICV4MCkpOyBcCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDA4LCAleDEpKTsgXAorCUVYX0xEX0ZQKExPQUQobGRkLCBiYXNlICsgMHgxMCwgJXgyKSk7CiAjZGVmaW5lIEZSRUdfTE9BRF80KGJhc2UsIHgwLCB4MSwgeDIsIHgzKSBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDAwLCAleDApKTsgXAotCUVYX0xEKExPQUQobGRkLCBiYXNlICsgMHgwOCwgJXgxKSk7IFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MTAsICV4MikpOyBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDE4LCAleDMpKTsKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MDAsICV4MCkpOyBcCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDA4LCAleDEpKTsgXAorCUVYX0xEX0ZQKExPQUQobGRkLCBiYXNlICsgMHgxMCwgJXgyKSk7IFwKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MTgsICV4MykpOwogI2RlZmluZSBGUkVHX0xPQURfNShiYXNlLCB4MCwgeDEsIHgyLCB4MywgeDQpIFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MDAsICV4MCkpOyBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDA4LCAleDEpKTsgXAotCUVYX0xEKExPQUQobGRkLCBiYXNlICsgMHgxMCwgJXgyKSk7IFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MTgsICV4MykpOyBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDIwLCAleDQpKTsKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MDAsICV4MCkpOyBcCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDA4LCAleDEpKTsgXAorCUVYX0xEX0ZQKExPQUQobGRkLCBiYXNlICsgMHgxMCwgJXgyKSk7IFwKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MTgsICV4MykpOyBcCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDIwLCAleDQpKTsKICNkZWZpbmUgRlJFR19MT0FEXzYoYmFzZSwgeDAsIHgxLCB4MiwgeDMsIHg0LCB4NSkgXAotCUVYX0xEKExPQUQobGRkLCBiYXNlICsgMHgwMCwgJXgwKSk7IFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MDgsICV4MSkpOyBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDEwLCAleDIpKTsgXAotCUVYX0xEKExPQUQobGRkLCBiYXNlICsgMHgxOCwgJXgzKSk7IFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MjAsICV4NCkpOyBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDI4LCAleDUpKTsKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MDAsICV4MCkpOyBcCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDA4LCAleDEpKTsgXAorCUVYX0xEX0ZQKExPQUQobGRkLCBiYXNlICsgMHgxMCwgJXgyKSk7IFwKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MTgsICV4MykpOyBcCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDIwLCAleDQpKTsgXAorCUVYX0xEX0ZQKExPQUQobGRkLCBiYXNlICsgMHgyOCwgJXg1KSk7CiAjZGVmaW5lIEZSRUdfTE9BRF83KGJhc2UsIHgwLCB4MSwgeDIsIHgzLCB4NCwgeDUsIHg2KSBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDAwLCAleDApKTsgXAotCUVYX0xEKExPQUQobGRkLCBiYXNlICsgMHgwOCwgJXgxKSk7IFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MTAsICV4MikpOyBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDE4LCAleDMpKTsgXAotCUVYX0xEKExPQUQobGRkLCBiYXNlICsgMHgyMCwgJXg0KSk7IFwKLQlFWF9MRChMT0FEKGxkZCwgYmFzZSArIDB4MjgsICV4NSkpOyBcCi0JRVhfTEQoTE9BRChsZGQsIGJhc2UgKyAweDMwLCAleDYpKTsKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MDAsICV4MCkpOyBcCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDA4LCAleDEpKTsgXAorCUVYX0xEX0ZQKExPQUQobGRkLCBiYXNlICsgMHgxMCwgJXgyKSk7IFwKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MTgsICV4MykpOyBcCisJRVhfTERfRlAoTE9BRChsZGQsIGJhc2UgKyAweDIwLCAleDQpKTsgXAorCUVYX0xEX0ZQKExPQUQobGRkLCBiYXNlICsgMHgyOCwgJXg1KSk7IFwKKwlFWF9MRF9GUChMT0FEKGxkZCwgYmFzZSArIDB4MzAsICV4NikpOwogCiAJLnJlZ2lzdGVyCSVnMiwjc2NyYXRjaAogCS5yZWdpc3RlcgklZzMsI3NjcmF0Y2gKQEAgLTI3NSwxMSArMjgxLDExIEBACiAJIG5vcAogCS8qIGZhbGwgdGhyb3VnaCBmb3IgMCA8IGxvdyBiaXRzIDwgOCAqLwogMTEwOglzdWIJCSVvNCwgNjQsICVnMgotCUVYX0xEKExPQURfQkxLKCVnMiwgJWYwKSkKLTE6CUVYX1NUKFNUT1JFX0lOSVQoJWcwLCAlbzQgKyAlZzMpKQotCUVYX0xEKExPQURfQkxLKCVvNCwgJWYxNikpCisJRVhfTERfRlAoTE9BRF9CTEsoJWcyLCAlZjApKQorMToJRVhfU1RfRlAoU1RPUkVfSU5JVCglZzAsICVvNCArICVnMykpCisJRVhfTERfRlAoTE9BRF9CTEsoJW80LCAlZjE2KSkKIAlGUkVHX0ZST0IoZjAsIGYyLCBmNCwgZjYsIGY4LCBmMTAsIGYxMiwgZjE0LCBmMTYpCi0JRVhfU1QoU1RPUkVfQkxLKCVmMCwgJW80ICsgJWczKSkKKwlFWF9TVF9GUChTVE9SRV9CTEsoJWYwLCAlbzQgKyAlZzMpKQogCUZSRUdfTU9WRV84KGYxNiwgZjE4LCBmMjAsIGYyMiwgZjI0LCBmMjYsIGYyOCwgZjMwKQogCXN1YmNjCQklZzEsIDY0LCAlZzEKIAlhZGQJCSVvNCwgNjQsICVvNApAQCAtMjkwLDEwICsyOTYsMTAgQEAKIAogMTIwOglzdWIJCSVvNCwgNTYsICVnMgogCUZSRUdfTE9BRF83KCVnMiwgZjAsIGYyLCBmNCwgZjYsIGY4LCBmMTAsIGYxMikKLTE6CUVYX1NUKFNUT1JFX0lOSVQoJWcwLCAlbzQgKyAlZzMpKQotCUVYX0xEKExPQURfQkxLKCVvNCwgJWYxNikpCisxOglFWF9TVF9GUChTVE9SRV9JTklUKCVnMCwgJW80ICsgJWczKSkKKwlFWF9MRF9GUChMT0FEX0JMSyglbzQsICVmMTYpKQogCUZSRUdfRlJPQihmMCwgZjIsIGY0LCBmNiwgZjgsIGYxMCwgZjEyLCBmMTYsIGYxOCkKLQlFWF9TVChTVE9SRV9CTEsoJWYwLCAlbzQgKyAlZzMpKQorCUVYX1NUX0ZQKFNUT1JFX0JMSyglZjAsICVvNCArICVnMykpCiAJRlJFR19NT1ZFXzcoZjE4LCBmMjAsIGYyMiwgZjI0LCBmMjYsIGYyOCwgZjMwKQogCXN1YmNjCQklZzEsIDY0LCAlZzEKIAlhZGQJCSVvNCwgNjQsICVvNApAQCAtMzA0LDEwICszMTAsMTAgQEAKIAogMTMwOglzdWIJCSVvNCwgNDgsICVnMgogCUZSRUdfTE9BRF82KCVnMiwgZjAsIGYyLCBmNCwgZjYsIGY4LCBmMTApCi0xOglFWF9TVChTVE9SRV9JTklUKCVnMCwgJW80ICsgJWczKSkKLQlFWF9MRChMT0FEX0JMSyglbzQsICVmMTYpKQorMToJRVhfU1RfRlAoU1RPUkVfSU5JVCglZzAsICVvNCArICVnMykpCisJRVhfTERfRlAoTE9BRF9CTEsoJW80LCAlZjE2KSkKIAlGUkVHX0ZST0IoZjAsIGYyLCBmNCwgZjYsIGY4LCBmMTAsIGYxNiwgZjE4LCBmMjApCi0JRVhfU1QoU1RPUkVfQkxLKCVmMCwgJW80ICsgJWczKSkKKwlFWF9TVF9GUChTVE9SRV9CTEsoJWYwLCAlbzQgKyAlZzMpKQogCUZSRUdfTU9WRV82KGYyMCwgZjIyLCBmMjQsIGYyNiwgZjI4LCBmMzApCiAJc3ViY2MJCSVnMSwgNjQsICVnMQogCWFkZAkJJW80LCA2NCwgJW80CkBAIC0zMTgsMTAgKzMyNCwxMCBAQAogCiAxNDA6CXN1YgkJJW80LCA0MCwgJWcyCiAJRlJFR19MT0FEXzUoJWcyLCBmMCwgZjIsIGY0LCBmNiwgZjgpCi0xOglFWF9TVChTVE9SRV9JTklUKCVnMCwgJW80ICsgJWczKSkKLQlFWF9MRChMT0FEX0JMSyglbzQsICVmMTYpKQorMToJRVhfU1RfRlAoU1RPUkVfSU5JVCglZzAsICVvNCArICVnMykpCisJRVhfTERfRlAoTE9BRF9CTEsoJW80LCAlZjE2KSkKIAlGUkVHX0ZST0IoZjAsIGYyLCBmNCwgZjYsIGY4LCBmMTYsIGYxOCwgZjIwLCBmMjIpCi0JRVhfU1QoU1RPUkVfQkxLKCVmMCwgJW80ICsgJWczKSkKKwlFWF9TVF9GUChTVE9SRV9CTEsoJWYwLCAlbzQgKyAlZzMpKQogCUZSRUdfTU9WRV81KGYyMiwgZjI0LCBmMjYsIGYyOCwgZjMwKQogCXN1YmNjCQklZzEsIDY0LCAlZzEKIAlhZGQJCSVvNCwgNjQsICVvNApAQCAtMzMyLDEwICszMzgsMTAgQEAKIAogMTUwOglzdWIJCSVvNCwgMzIsICVnMgogCUZSRUdfTE9BRF80KCVnMiwgZjAsIGYyLCBmNCwgZjYpCi0xOglFWF9TVChTVE9SRV9JTklUKCVnMCwgJW80ICsgJWczKSkKLQlFWF9MRChMT0FEX0JMSyglbzQsICVmMTYpKQorMToJRVhfU1RfRlAoU1RPUkVfSU5JVCglZzAsICVvNCArICVnMykpCisJRVhfTERfRlAoTE9BRF9CTEsoJW80LCAlZjE2KSkKIAlGUkVHX0ZST0IoZjAsIGYyLCBmNCwgZjYsIGYxNiwgZjE4LCBmMjAsIGYyMiwgZjI0KQotCUVYX1NUKFNUT1JFX0JMSyglZjAsICVvNCArICVnMykpCisJRVhfU1RfRlAoU1RPUkVfQkxLKCVmMCwgJW80ICsgJWczKSkKIAlGUkVHX01PVkVfNChmMjQsIGYyNiwgZjI4LCBmMzApCiAJc3ViY2MJCSVnMSwgNjQsICVnMQogCWFkZAkJJW80LCA2NCwgJW80CkBAIC0zNDYsMTAgKzM1MiwxMCBAQAogCiAxNjA6CXN1YgkJJW80LCAyNCwgJWcyCiAJRlJFR19MT0FEXzMoJWcyLCBmMCwgZjIsIGY0KQotMToJRVhfU1QoU1RPUkVfSU5JVCglZzAsICVvNCArICVnMykpCi0JRVhfTEQoTE9BRF9CTEsoJW80LCAlZjE2KSkKKzE6CUVYX1NUX0ZQKFNUT1JFX0lOSVQoJWcwLCAlbzQgKyAlZzMpKQorCUVYX0xEX0ZQKExPQURfQkxLKCVvNCwgJWYxNikpCiAJRlJFR19GUk9CKGYwLCBmMiwgZjQsIGYxNiwgZjE4LCBmMjAsIGYyMiwgZjI0LCBmMjYpCi0JRVhfU1QoU1RPUkVfQkxLKCVmMCwgJW80ICsgJWczKSkKKwlFWF9TVF9GUChTVE9SRV9CTEsoJWYwLCAlbzQgKyAlZzMpKQogCUZSRUdfTU9WRV8zKGYyNiwgZjI4LCBmMzApCiAJc3ViY2MJCSVnMSwgNjQsICVnMQogCWFkZAkJJW80LCA2NCwgJW80CkBAIC0zNjAsMTAgKzM2NiwxMCBAQAogCiAxNzA6CXN1YgkJJW80LCAxNiwgJWcyCiAJRlJFR19MT0FEXzIoJWcyLCBmMCwgZjIpCi0xOglFWF9TVChTVE9SRV9JTklUKCVnMCwgJW80ICsgJWczKSkKLQlFWF9MRChMT0FEX0JMSyglbzQsICVmMTYpKQorMToJRVhfU1RfRlAoU1RPUkVfSU5JVCglZzAsICVvNCArICVnMykpCisJRVhfTERfRlAoTE9BRF9CTEsoJW80LCAlZjE2KSkKIAlGUkVHX0ZST0IoZjAsIGYyLCBmMTYsIGYxOCwgZjIwLCBmMjIsIGYyNCwgZjI2LCBmMjgpCi0JRVhfU1QoU1RPUkVfQkxLKCVmMCwgJW80ICsgJWczKSkKKwlFWF9TVF9GUChTVE9SRV9CTEsoJWYwLCAlbzQgKyAlZzMpKQogCUZSRUdfTU9WRV8yKGYyOCwgZjMwKQogCXN1YmNjCQklZzEsIDY0LCAlZzEKIAlhZGQJCSVvNCwgNjQsICVvNApAQCAtMzc0LDEwICszODAsMTAgQEAKIAogMTgwOglzdWIJCSVvNCwgOCwgJWcyCiAJRlJFR19MT0FEXzEoJWcyLCBmMCkKLTE6CUVYX1NUKFNUT1JFX0lOSVQoJWcwLCAlbzQgKyAlZzMpKQotCUVYX0xEKExPQURfQkxLKCVvNCwgJWYxNikpCisxOglFWF9TVF9GUChTVE9SRV9JTklUKCVnMCwgJW80ICsgJWczKSkKKwlFWF9MRF9GUChMT0FEX0JMSyglbzQsICVmMTYpKQogCUZSRUdfRlJPQihmMCwgZjE2LCBmMTgsIGYyMCwgZjIyLCBmMjQsIGYyNiwgZjI4LCBmMzApCi0JRVhfU1QoU1RPUkVfQkxLKCVmMCwgJW80ICsgJWczKSkKKwlFWF9TVF9GUChTVE9SRV9CTEsoJWYwLCAlbzQgKyAlZzMpKQogCUZSRUdfTU9WRV8xKGYzMCkKIAlzdWJjYwkJJWcxLCA2NCwgJWcxCiAJYWRkCQklbzQsIDY0LCAlbzQKQEAgLTM4NywxMCArMzkzLDEwIEBACiAJIG5vcAogCiAxOTA6Ci0xOglFWF9TVChTVE9SRV9JTklUKCVnMCwgJW80ICsgJWczKSkKKzE6CUVYX1NUX0ZQKFNUT1JFX0lOSVQoJWcwLCAlbzQgKyAlZzMpKQogCXN1YmNjCQklZzEsIDY0LCAlZzEKLQlFWF9MRChMT0FEX0JMSyglbzQsICVmMCkpCi0JRVhfU1QoU1RPUkVfQkxLKCVmMCwgJW80ICsgJWczKSkKKwlFWF9MRF9GUChMT0FEX0JMSyglbzQsICVmMCkpCisJRVhfU1RfRlAoU1RPUkVfQkxLKCVmMCwgJW80ICsgJWczKSkKIAlhZGQJCSVvNCwgNjQsICVvNAogCWJuZSxwdAkJJXhjYywgMWIKIAkgTE9BRChwcmVmZXRjaCwgJW80ICsgNjQsICNvbmVfcmVhZCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL05HNGNvcHlfZnJvbV91c2VyLlMgYi9hcmNoL3NwYXJjL2xpYi9ORzRjb3B5X2Zyb21fdXNlci5TCmluZGV4IGZkOWY5MDMuLjJlOGVlN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL05HNGNvcHlfZnJvbV91c2VyLlMKKysrIGIvYXJjaC9zcGFyYy9saWIvTkc0Y29weV9mcm9tX3VzZXIuUwpAQCAtMTEsNiArMTEsMTQgQEAKIAkudGV4dDsJCQlcCiAJLmFsaWduIDQ7CiAKKyNkZWZpbmUgRVhfTERfRlAoeCkJCVwKKzk4Ogl4OwkJCVwKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIjtcCisJLmFsaWduIDQ7CQlcCisJLndvcmQgOThiLCBfX3JldGxfb25lX2FzaV9mcDtcCisJLnRleHQ7CQkJXAorCS5hbGlnbiA0OworCiAjaWZuZGVmIEFTSV9BSVVTCiAjZGVmaW5lIEFTSV9BSVVTCTB4MTEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvTkc0Y29weV90b191c2VyLlMgYi9hcmNoL3NwYXJjL2xpYi9ORzRjb3B5X3RvX3VzZXIuUwppbmRleCA5NzQ0YzQ1NC4uYmUwYmY0NSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvTkc0Y29weV90b191c2VyLlMKKysrIGIvYXJjaC9zcGFyYy9saWIvTkc0Y29weV90b191c2VyLlMKQEAgLTExLDYgKzExLDE0IEBACiAJLnRleHQ7CQkJXAogCS5hbGlnbiA0OwogCisjZGVmaW5lIEVYX1NUX0ZQKHgpCQlcCis5ODoJeDsJCQlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAorCS5hbGlnbiA0OwkJXAorCS53b3JkIDk4YiwgX19yZXRsX29uZV9hc2lfZnA7XAorCS50ZXh0OwkJCVwKKwkuYWxpZ24gNDsKKwogI2lmbmRlZiBBU0lfQUlVUwogI2RlZmluZSBBU0lfQUlVUwkweDExCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL05HNG1lbWNweS5TIGIvYXJjaC9zcGFyYy9saWIvTkc0bWVtY3B5LlMKaW5kZXggODNhZWViMS4uOGUxM2VlMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvTkc0bWVtY3B5LlMKKysrIGIvYXJjaC9zcGFyYy9saWIvTkc0bWVtY3B5LlMKQEAgLTQ4LDEwICs0OCwxNiBAQAogI2lmbmRlZiBFWF9MRAogI2RlZmluZSBFWF9MRCh4KQl4CiAjZW5kaWYKKyNpZm5kZWYgRVhfTERfRlAKKyNkZWZpbmUgRVhfTERfRlAoeCkJeAorI2VuZGlmCiAKICNpZm5kZWYgRVhfU1QKICNkZWZpbmUgRVhfU1QoeCkJeAogI2VuZGlmCisjaWZuZGVmIEVYX1NUX0ZQCisjZGVmaW5lIEVYX1NUX0ZQKHgpCXgKKyNlbmRpZgogCiAjaWZuZGVmIEVYX1JFVFZBTAogI2RlZmluZSBFWF9SRVRWQUwoeCkJeApAQCAtMjEwLDE3ICsyMTYsMTcgQEAKIAlzdWIJCSVvMiwgJW80LCAlbzIKIAlhbGlnbmFkZHIJJW8xLCAlZzAsICVnMQogCWFkZAkJJW8xLCAlbzQsICVvMQotCUVYX0xEKExPQUQobGRkLCAlZzEgKyAweDAwLCAlZjApKQotMToJRVhfTEQoTE9BRChsZGQsICVnMSArIDB4MDgsICVmMikpCisJRVhfTERfRlAoTE9BRChsZGQsICVnMSArIDB4MDAsICVmMCkpCisxOglFWF9MRF9GUChMT0FEKGxkZCwgJWcxICsgMHgwOCwgJWYyKSkKIAlzdWJjYwkJJW80LCAweDQwLCAlbzQKLQlFWF9MRChMT0FEKGxkZCwgJWcxICsgMHgxMCwgJWY0KSkKLQlFWF9MRChMT0FEKGxkZCwgJWcxICsgMHgxOCwgJWY2KSkKLQlFWF9MRChMT0FEKGxkZCwgJWcxICsgMHgyMCwgJWY4KSkKLQlFWF9MRChMT0FEKGxkZCwgJWcxICsgMHgyOCwgJWYxMCkpCi0JRVhfTEQoTE9BRChsZGQsICVnMSArIDB4MzAsICVmMTIpKQotCUVYX0xEKExPQUQobGRkLCAlZzEgKyAweDM4LCAlZjE0KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJWcxICsgMHgxMCwgJWY0KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJWcxICsgMHgxOCwgJWY2KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJWcxICsgMHgyMCwgJWY4KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJWcxICsgMHgyOCwgJWYxMCkpCisJRVhfTERfRlAoTE9BRChsZGQsICVnMSArIDB4MzAsICVmMTIpKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlZzEgKyAweDM4LCAlZjE0KSkKIAlmYWxpZ25kYXRhCSVmMCwgJWYyLCAlZjE2Ci0JRVhfTEQoTE9BRChsZGQsICVnMSArIDB4NDAsICVmMCkpCisJRVhfTERfRlAoTE9BRChsZGQsICVnMSArIDB4NDAsICVmMCkpCiAJZmFsaWduZGF0YQklZjIsICVmNCwgJWYxOAogCWFkZAkJJWcxLCAweDQwLCAlZzEKIAlmYWxpZ25kYXRhCSVmNCwgJWY2LCAlZjIwCkBAIC0yMjksMTQgKzIzNSwxNCBAQAogCWZhbGlnbmRhdGEJJWYxMCwgJWYxMiwgJWYyNgogCWZhbGlnbmRhdGEJJWYxMiwgJWYxNCwgJWYyOAogCWZhbGlnbmRhdGEJJWYxNCwgJWYwLCAlZjMwCi0JRVhfU1QoU1RPUkUoc3RkLCAlZjE2LCAlbzAgKyAweDAwKSkKLQlFWF9TVChTVE9SRShzdGQsICVmMTgsICVvMCArIDB4MDgpKQotCUVYX1NUKFNUT1JFKHN0ZCwgJWYyMCwgJW8wICsgMHgxMCkpCi0JRVhfU1QoU1RPUkUoc3RkLCAlZjIyLCAlbzAgKyAweDE4KSkKLQlFWF9TVChTVE9SRShzdGQsICVmMjQsICVvMCArIDB4MjApKQotCUVYX1NUKFNUT1JFKHN0ZCwgJWYyNiwgJW8wICsgMHgyOCkpCi0JRVhfU1QoU1RPUkUoc3RkLCAlZjI4LCAlbzAgKyAweDMwKSkKLQlFWF9TVChTVE9SRShzdGQsICVmMzAsICVvMCArIDB4MzgpKQorCUVYX1NUX0ZQKFNUT1JFKHN0ZCwgJWYxNiwgJW8wICsgMHgwMCkpCisJRVhfU1RfRlAoU1RPUkUoc3RkLCAlZjE4LCAlbzAgKyAweDA4KSkKKwlFWF9TVF9GUChTVE9SRShzdGQsICVmMjAsICVvMCArIDB4MTApKQorCUVYX1NUX0ZQKFNUT1JFKHN0ZCwgJWYyMiwgJW8wICsgMHgxOCkpCisJRVhfU1RfRlAoU1RPUkUoc3RkLCAlZjI0LCAlbzAgKyAweDIwKSkKKwlFWF9TVF9GUChTVE9SRShzdGQsICVmMjYsICVvMCArIDB4MjgpKQorCUVYX1NUX0ZQKFNUT1JFKHN0ZCwgJWYyOCwgJW8wICsgMHgzMCkpCisJRVhfU1RfRlAoU1RPUkUoc3RkLCAlZjMwLCAlbzAgKyAweDM4KSkKIAlhZGQJCSVvMCwgMHg0MCwgJW8wCiAJYm5lLHB0CQklaWNjLCAxYgogCSBMT0FEKHByZWZldGNoLCAlZzEgKyAweDIwMCwgI25fcmVhZHNfc3Ryb25nKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvVTFjb3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvVTFjb3B5X2Zyb21fdXNlci5TCmluZGV4IGE2YWUyZWEuLmVjYzU2OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL1UxY29weV9mcm9tX3VzZXIuUworKysgYi9hcmNoL3NwYXJjL2xpYi9VMWNvcHlfZnJvbV91c2VyLlMKQEAgLTExLDYgKzExLDE0IEBACiAJLnRleHQ7CQkJXAogCS5hbGlnbiA0OwogCisjZGVmaW5lIEVYX0xEX0ZQKHgpCQlcCis5ODoJeDsJCQlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAorCS5hbGlnbiA0OwkJXAorCS53b3JkIDk4YiwgX19yZXRsX29uZV9mcDtcCisJLnRleHQ7CQkJXAorCS5hbGlnbiA0OworCiAjZGVmaW5lIEZVTkNfTkFNRQkJX19fY29weV9mcm9tX3VzZXIKICNkZWZpbmUgTE9BRCh0eXBlLGFkZHIsZGVzdCkJdHlwZSMjYSBbYWRkcl0gJWFzaSwgZGVzdAogI2RlZmluZSBMT0FEX0JMSyhhZGRyLGRlc3QpCWxkZGEgW2FkZHJdIEFTSV9CTEtfQUlVUywgZGVzdApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvVTFjb3B5X3RvX3VzZXIuUyBiL2FyY2gvc3BhcmMvbGliL1UxY29weV90b191c2VyLlMKaW5kZXggZjRiOTcwZS4uOWVlYTM5MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvVTFjb3B5X3RvX3VzZXIuUworKysgYi9hcmNoL3NwYXJjL2xpYi9VMWNvcHlfdG9fdXNlci5TCkBAIC0xMSw2ICsxMSwxNCBAQAogCS50ZXh0OwkJCVwKIAkuYWxpZ24gNDsKIAorI2RlZmluZSBFWF9TVF9GUCh4KQkJXAorOTg6CXg7CQkJXAorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiO1wKKwkuYWxpZ24gNDsJCVwKKwkud29yZCA5OGIsIF9fcmV0bF9vbmVfZnA7XAorCS50ZXh0OwkJCVwKKwkuYWxpZ24gNDsKKwogI2RlZmluZSBGVU5DX05BTUUJCV9fX2NvcHlfdG9fdXNlcgogI2RlZmluZSBTVE9SRSh0eXBlLHNyYyxhZGRyKQl0eXBlIyNhIHNyYywgW2FkZHJdIEFTSV9BSVVTCiAjZGVmaW5lIFNUT1JFX0JMSyhzcmMsYWRkcikJc3RkYSBzcmMsIFthZGRyXSBBU0lfQkxLX0FJVVMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL1UxbWVtY3B5LlMgYi9hcmNoL3NwYXJjL2xpYi9VMW1lbWNweS5TCmluZGV4IGI2NzE0MmIuLjNlNjIwOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL1UxbWVtY3B5LlMKKysrIGIvYXJjaC9zcGFyYy9saWIvVTFtZW1jcHkuUwpAQCAtMjUsMTAgKzI1LDE2IEBACiAjaWZuZGVmIEVYX0xECiAjZGVmaW5lIEVYX0xEKHgpCXgKICNlbmRpZgorI2lmbmRlZiBFWF9MRF9GUAorI2RlZmluZSBFWF9MRF9GUCh4KQl4CisjZW5kaWYKIAogI2lmbmRlZiBFWF9TVAogI2RlZmluZSBFWF9TVCh4KQl4CiAjZW5kaWYKKyNpZm5kZWYgRVhfU1RfRlAKKyNkZWZpbmUgRVhfU1RfRlAoeCkJeAorI2VuZGlmCiAKICNpZm5kZWYgRVhfUkVUVkFMCiAjZGVmaW5lIEVYX1JFVFZBTCh4KQl4CkBAIC03Myw4ICs3OSw4IEBACiAJZmFsaWduZGF0YQkJJWY4LCAlZjksICVmNjI7CiAKICNkZWZpbmUgTUFJTl9MT09QX0NIVU5LKHNyYywgZGVzdCwgZmRlc3QsIGZzcmMsIGxlbiwgam1wdGd0KQlcCi0JRVhfTEQoTE9BRF9CTEsoJXNyYywgJWZkZXN0KSk7CQkJCVwKLQlFWF9TVChTVE9SRV9CTEsoJWZzcmMsICVkZXN0KSk7CQkJCVwKKwlFWF9MRF9GUChMT0FEX0JMSyglc3JjLCAlZmRlc3QpKTsJCQkJXAorCUVYX1NUX0ZQKFNUT1JFX0JMSyglZnNyYywgJWRlc3QpKTsJCQkJXAogCWFkZAkJCSVzcmMsIDB4NDAsICVzcmM7CQlcCiAJc3ViY2MJCQklbGVuLCAweDQwLCAlbGVuOwkJXAogCWJlLHBuCQkJJXhjYywgam1wdGd0OwkJCVwKQEAgLTg5LDEyICs5NSwxMiBAQAogCiAjZGVmaW5lIERPX1NZTkMJCQltZW1iYXIJI1N5bmM7CiAjZGVmaW5lIFNUT1JFX1NZTkMoZGVzdCwgZnNyYykJCQkJXAotCUVYX1NUKFNUT1JFX0JMSyglZnNyYywgJWRlc3QpKTsJCQlcCisJRVhfU1RfRlAoU1RPUkVfQkxLKCVmc3JjLCAlZGVzdCkpOwkJCVwKIAlhZGQJCQklZGVzdCwgMHg0MCwgJWRlc3Q7CVwKIAlET19TWU5DCiAKICNkZWZpbmUgU1RPUkVfSlVNUChkZXN0LCBmc3JjLCB0YXJnZXQpCQkJXAotCUVYX1NUKFNUT1JFX0JMSyglZnNyYywgJWRlc3QpKTsJCQlcCisJRVhfU1RfRlAoU1RPUkVfQkxLKCVmc3JjLCAlZGVzdCkpOwkJCVwKIAlhZGQJCQklZGVzdCwgMHg0MCwgJWRlc3Q7CVwKIAliYSxwdAkJCSV4Y2MsIHRhcmdldDsJCVwKIAkgbm9wOwpAQCAtMTAzLDcgKzEwOSw3IEBACiAJc3ViY2MJCQklbGVmdCwgOCwgJWxlZnQ7XAogCWJsLHBuCQkJJXhjYywgOTVmOwlcCiAJIGZhbGlnbmRhdGEJCSVmMCwgJWYxLCAlZjQ4OwlcCi0JRVhfU1QoU1RPUkUoc3RkLCAlZjQ4LCAlZGVzdCkpOwkJXAorCUVYX1NUX0ZQKFNUT1JFKHN0ZCwgJWY0OCwgJWRlc3QpKTsJCVwKIAlhZGQJCQklZGVzdCwgOCwgJWRlc3Q7CiAKICNkZWZpbmUgVU5FVkVOX1ZJU0NIVU5LX0xBU1QoZGVzdCwgZjAsIGYxLCBsZWZ0KQlcCkBAIC0xNjAsOCArMTY2LDggQEAKIAkgYW5kCQklZzIsIDB4MzgsICVnMgogCiAxOglzdWJjYwkJJWcxLCAweDEsICVnMQotCUVYX0xEKExPQUQobGR1YiwgJW8xICsgMHgwMCwgJW8zKSkKLQlFWF9TVChTVE9SRShzdGIsICVvMywgJW8xICsgJUdMT0JBTF9TUEFSRSkpCisJRVhfTERfRlAoTE9BRChsZHViLCAlbzEgKyAweDAwLCAlbzMpKQorCUVYX1NUX0ZQKFNUT1JFKHN0YiwgJW8zLCAlbzEgKyAlR0xPQkFMX1NQQVJFKSkKIAliZ3UscHQJCSVYQ0MsIDFiCiAJIGFkZAkJJW8xLCAweDEsICVvMQogCkBAIC0xNzIsMjAgKzE3OCwyMCBAQAogCWJlLHB0CQklaWNjLCAzZgogCSBhbGlnbmFkZHIJJW8xLCAlZzAsICVvMQogCi0JRVhfTEQoTE9BRChsZGQsICVvMSwgJWY0KSkKLTE6CUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDgsICVmNikpCisJRVhfTERfRlAoTE9BRChsZGQsICVvMSwgJWY0KSkKKzE6CUVYX0xEX0ZQKExPQUQobGRkLCAlbzEgKyAweDgsICVmNikpCiAJYWRkCQklbzEsIDB4OCwgJW8xCiAJc3ViY2MJCSVnMiwgMHg4LCAlZzIKIAlmYWxpZ25kYXRhCSVmNCwgJWY2LCAlZjAKLQlFWF9TVChTVE9SRShzdGQsICVmMCwgJW8wKSkKKwlFWF9TVF9GUChTVE9SRShzdGQsICVmMCwgJW8wKSkKIAliZSxwbgkJJWljYywgM2YKIAkgYWRkCQklbzAsIDB4OCwgJW8wCiAKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHg4LCAlZjQpKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlbzEgKyAweDgsICVmNCkpCiAJYWRkCQklbzEsIDB4OCwgJW8xCiAJc3ViY2MJCSVnMiwgMHg4LCAlZzIKIAlmYWxpZ25kYXRhCSVmNiwgJWY0LCAlZjAKLQlFWF9TVChTVE9SRShzdGQsICVmMCwgJW8wKSkKKwlFWF9TVF9GUChTVE9SRShzdGQsICVmMCwgJW8wKSkKIAlibmUscHQJCSVpY2MsIDFiCiAJIGFkZAkJJW8wLCAweDgsICVvMAogCkBAIC0yMDgsMTMgKzIxNCwxMyBAQAogCWFkZAkJJWcxLCAlR0xPQkFMX1NQQVJFLCAlZzEKIAlzdWJjYwkJJW8yLCAlZzMsICVvMgogCi0JRVhfTEQoTE9BRF9CTEsoJW8xLCAlZjApKQorCUVYX0xEX0ZQKExPQURfQkxLKCVvMSwgJWYwKSkKIAlhZGQJCSVvMSwgMHg0MCwgJW8xCiAJYWRkCQklZzEsICVnMywgJWcxCi0JRVhfTEQoTE9BRF9CTEsoJW8xLCAlZjE2KSkKKwlFWF9MRF9GUChMT0FEX0JMSyglbzEsICVmMTYpKQogCWFkZAkJJW8xLCAweDQwLCAlbzEKIAlzdWIJCSVHTE9CQUxfU1BBUkUsIDB4ODAsICVHTE9CQUxfU1BBUkUKLQlFWF9MRChMT0FEX0JMSyglbzEsICVmMzIpKQorCUVYX0xEX0ZQKExPQURfQkxLKCVvMSwgJWYzMikpCiAJYWRkCQklbzEsIDB4NDAsICVvMQogCiAJLyogVGhlcmUgYXJlIDggaW5zdGFuY2VzIG9mIHRoZSB1bnJvbGxlZCBsb29wLApAQCAtNDI2LDI4ICs0MzIsMjggQEAKIDYyOglGSU5JU0hfVklTQ0hVTksobzAsIGY0NCwgZjQ2LCBnMykKIDYzOglVTkVWRU5fVklTQ0hVTktfTEFTVChvMCwgZjQ2LCBmMCwgIGczKQogCi05MzoJRVhfTEQoTE9BRChsZGQsICVvMSwgJWYyKSkKKzkzOglFWF9MRF9GUChMT0FEKGxkZCwgJW8xLCAlZjIpKQogCWFkZAkJJW8xLCA4LCAlbzEKIAlzdWJjYwkJJWczLCA4LCAlZzMKIAlmYWxpZ25kYXRhCSVmMCwgJWYyLCAlZjgKLQlFWF9TVChTVE9SRShzdGQsICVmOCwgJW8wKSkKKwlFWF9TVF9GUChTVE9SRShzdGQsICVmOCwgJW8wKSkKIAlibCxwbgkJJXhjYywgOTVmCiAJIGFkZAkJJW8wLCA4LCAlbzAKLQlFWF9MRChMT0FEKGxkZCwgJW8xLCAlZjApKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlbzEsICVmMCkpCiAJYWRkCQklbzEsIDgsICVvMQogCXN1YmNjCQklZzMsIDgsICVnMwogCWZhbGlnbmRhdGEJJWYyLCAlZjAsICVmOAotCUVYX1NUKFNUT1JFKHN0ZCwgJWY4LCAlbzApKQorCUVYX1NUX0ZQKFNUT1JFKHN0ZCwgJWY4LCAlbzApKQogCWJnZSxwdAkJJXhjYywgOTNiCiAJIGFkZAkJJW8wLCA4LCAlbzAKIAogOTU6CWJyeixwdAkJJW8yLCAyZgogCSBtb3YJCSVnMSwgJW8xCiAKLTE6CUVYX0xEKExPQUQobGR1YiwgJW8xLCAlbzMpKQorMToJRVhfTERfRlAoTE9BRChsZHViLCAlbzEsICVvMykpCiAJYWRkCQklbzEsIDEsICVvMQogCXN1YmNjCQklbzIsIDEsICVvMgotCUVYX1NUKFNUT1JFKHN0YiwgJW8zLCAlbzApKQorCUVYX1NUX0ZQKFNUT1JFKHN0YiwgJW8zLCAlbzApKQogCWJuZSxwdAkJJXhjYywgMWIKIAkgYWRkCQklbzAsIDEsICVvMAogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9VM2NvcHlfZnJvbV91c2VyLlMgYi9hcmNoL3NwYXJjL2xpYi9VM2NvcHlfZnJvbV91c2VyLlMKaW5kZXggYjFhY2QxMy4uODhhZDczZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvVTNjb3B5X2Zyb21fdXNlci5TCisrKyBiL2FyY2gvc3BhcmMvbGliL1UzY29weV9mcm9tX3VzZXIuUwpAQCAtMTEsNiArMTEsMTQgQEAKIAkudGV4dDsJCQlcCiAJLmFsaWduIDQ7CiAKKyNkZWZpbmUgRVhfTERfRlAoeCkJCVwKKzk4Ogl4OwkJCVwKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIjtcCisJLmFsaWduIDQ7CQlcCisJLndvcmQgOThiLCBfX3JldGxfb25lX2ZwO1wKKwkudGV4dDsJCQlcCisJLmFsaWduIDQ7CisKICNkZWZpbmUgRlVOQ19OQU1FCQlVM2NvcHlfZnJvbV91c2VyCiAjZGVmaW5lIExPQUQodHlwZSxhZGRyLGRlc3QpCXR5cGUjI2EgW2FkZHJdICVhc2ksIGRlc3QKICNkZWZpbmUgRVhfUkVUVkFMKHgpCQkwCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9VM2NvcHlfdG9fdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvVTNjb3B5X3RvX3VzZXIuUwppbmRleCBlZjFlNDkzLi44NDUxMzlkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9VM2NvcHlfdG9fdXNlci5TCisrKyBiL2FyY2gvc3BhcmMvbGliL1UzY29weV90b191c2VyLlMKQEAgLTExLDYgKzExLDE0IEBACiAJLnRleHQ7CQkJXAogCS5hbGlnbiA0OwogCisjZGVmaW5lIEVYX1NUX0ZQKHgpCQlcCis5ODoJeDsJCQlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAorCS5hbGlnbiA0OwkJXAorCS53b3JkIDk4YiwgX19yZXRsX29uZV9mcDtcCisJLnRleHQ7CQkJXAorCS5hbGlnbiA0OworCiAjZGVmaW5lIEZVTkNfTkFNRQkJVTNjb3B5X3RvX3VzZXIKICNkZWZpbmUgU1RPUkUodHlwZSxzcmMsYWRkcikJdHlwZSMjYSBzcmMsIFthZGRyXSBBU0lfQUlVUwogI2RlZmluZSBTVE9SRV9CTEsoc3JjLGFkZHIpCXN0ZGEgc3JjLCBbYWRkcl0gQVNJX0JMS19BSVVTCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9VM21lbWNweS5TIGIvYXJjaC9zcGFyYy9saWIvVTNtZW1jcHkuUwppbmRleCA3Y2FlOWNjLi40OTFlZTY5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9VM21lbWNweS5TCisrKyBiL2FyY2gvc3BhcmMvbGliL1UzbWVtY3B5LlMKQEAgLTI0LDEwICsyNCwxNiBAQAogI2lmbmRlZiBFWF9MRAogI2RlZmluZSBFWF9MRCh4KQl4CiAjZW5kaWYKKyNpZm5kZWYgRVhfTERfRlAKKyNkZWZpbmUgRVhfTERfRlAoeCkJeAorI2VuZGlmCiAKICNpZm5kZWYgRVhfU1QKICNkZWZpbmUgRVhfU1QoeCkJeAogI2VuZGlmCisjaWZuZGVmIEVYX1NUX0ZQCisjZGVmaW5lIEVYX1NUX0ZQKHgpCXgKKyNlbmRpZgogCiAjaWZuZGVmIEVYX1JFVFZBTAogI2RlZmluZSBFWF9SRVRWQUwoeCkJeApAQCAtMTIwLDggKzEyNiw4IEBACiAJIGFuZAkJJWcyLCAweDM4LCAlZzIKIAogMToJc3ViY2MJCSVnMSwgMHgxLCAlZzEKLQlFWF9MRChMT0FEKGxkdWIsICVvMSArIDB4MDAsICVvMykpCi0JRVhfU1QoU1RPUkUoc3RiLCAlbzMsICVvMSArIEdMT0JBTF9TUEFSRSkpCisJRVhfTERfRlAoTE9BRChsZHViLCAlbzEgKyAweDAwLCAlbzMpKQorCUVYX1NUX0ZQKFNUT1JFKHN0YiwgJW8zLCAlbzEgKyBHTE9CQUxfU1BBUkUpKQogCWJndSxwdAkJJVhDQywgMWIKIAkgYWRkCQklbzEsIDB4MSwgJW8xCiAKQEAgLTEzMiwyMCArMTM4LDIwIEBACiAJYmUscHQJCSVpY2MsIDNmCiAJIGFsaWduYWRkcgklbzEsICVnMCwgJW8xCiAKLQlFWF9MRChMT0FEKGxkZCwgJW8xLCAlZjQpKQotMToJRVhfTEQoTE9BRChsZGQsICVvMSArIDB4OCwgJWY2KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xLCAlZjQpKQorMToJRVhfTERfRlAoTE9BRChsZGQsICVvMSArIDB4OCwgJWY2KSkKIAlhZGQJCSVvMSwgMHg4LCAlbzEKIAlzdWJjYwkJJWcyLCAweDgsICVnMgogCWZhbGlnbmRhdGEJJWY0LCAlZjYsICVmMAotCUVYX1NUKFNUT1JFKHN0ZCwgJWYwLCAlbzApKQorCUVYX1NUX0ZQKFNUT1JFKHN0ZCwgJWYwLCAlbzApKQogCWJlLHBuCQklaWNjLCAzZgogCSBhZGQJCSVvMCwgMHg4LCAlbzAKIAotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDgsICVmNCkpCisJRVhfTERfRlAoTE9BRChsZGQsICVvMSArIDB4OCwgJWY0KSkKIAlhZGQJCSVvMSwgMHg4LCAlbzEKIAlzdWJjYwkJJWcyLCAweDgsICVnMgogCWZhbGlnbmRhdGEJJWY2LCAlZjQsICVmMgotCUVYX1NUKFNUT1JFKHN0ZCwgJWYyLCAlbzApKQorCUVYX1NUX0ZQKFNUT1JFKHN0ZCwgJWYyLCAlbzApKQogCWJuZSxwdAkJJWljYywgMWIKIAkgYWRkCQklbzAsIDB4OCwgJW8wCiAKQEAgLTE1NSwyNSArMTYxLDI1IEBACiAJTE9BRChwcmVmZXRjaCwgJW8xICsgMHgwODAsICNvbmVfcmVhZCkKIAlMT0FEKHByZWZldGNoLCAlbzEgKyAweDBjMCwgI29uZV9yZWFkKQogCUxPQUQocHJlZmV0Y2gsICVvMSArIDB4MTAwLCAjb25lX3JlYWQpCi0JRVhfTEQoTE9BRChsZGQsICVvMSArIDB4MDAwLCAlZjApKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlbzEgKyAweDAwMCwgJWYwKSkKIAlMT0FEKHByZWZldGNoLCAlbzEgKyAweDE0MCwgI29uZV9yZWFkKQotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAwOCwgJWYyKSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMDgsICVmMikpCiAJTE9BRChwcmVmZXRjaCwgJW8xICsgMHgxODAsICNvbmVfcmVhZCkKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHgwMTAsICVmNCkpCisJRVhfTERfRlAoTE9BRChsZGQsICVvMSArIDB4MDEwLCAlZjQpKQogCUxPQUQocHJlZmV0Y2gsICVvMSArIDB4MWMwLCAjb25lX3JlYWQpCiAJZmFsaWduZGF0YQklZjAsICVmMiwgJWYxNgotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAxOCwgJWY2KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMTgsICVmNikpCiAJZmFsaWduZGF0YQklZjIsICVmNCwgJWYxOAotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAyMCwgJWY4KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMjAsICVmOCkpCiAJZmFsaWduZGF0YQklZjQsICVmNiwgJWYyMAotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAyOCwgJWYxMCkpCisJRVhfTERfRlAoTE9BRChsZGQsICVvMSArIDB4MDI4LCAlZjEwKSkKIAlmYWxpZ25kYXRhCSVmNiwgJWY4LCAlZjIyCiAKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHgwMzAsICVmMTIpKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlbzEgKyAweDAzMCwgJWYxMikpCiAJZmFsaWduZGF0YQklZjgsICVmMTAsICVmMjQKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHgwMzgsICVmMTQpKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlbzEgKyAweDAzOCwgJWYxNCkpCiAJZmFsaWduZGF0YQklZjEwLCAlZjEyLCAlZjI2Ci0JRVhfTEQoTE9BRChsZGQsICVvMSArIDB4MDQwLCAlZjApKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlbzEgKyAweDA0MCwgJWYwKSkKIAogCXN1YmNjCQlHTE9CQUxfU1BBUkUsIDB4ODAsIEdMT0JBTF9TUEFSRQogCWFkZAkJJW8xLCAweDQwLCAlbzEKQEAgLTE4NCwyNiArMTkwLDI2IEBACiAKIAkuYWxpZ24JCTY0CiAxOgotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAwOCwgJWYyKSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMDgsICVmMikpCiAJZmFsaWduZGF0YQklZjEyLCAlZjE0LCAlZjI4Ci0JRVhfTEQoTE9BRChsZGQsICVvMSArIDB4MDEwLCAlZjQpKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlbzEgKyAweDAxMCwgJWY0KSkKIAlmYWxpZ25kYXRhCSVmMTQsICVmMCwgJWYzMAotCUVYX1NUKFNUT1JFX0JMSyglZjE2LCAlbzApKQotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAxOCwgJWY2KSkKKwlFWF9TVF9GUChTVE9SRV9CTEsoJWYxNiwgJW8wKSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMTgsICVmNikpCiAJZmFsaWduZGF0YQklZjAsICVmMiwgJWYxNgogCWFkZAkJJW8wLCAweDQwLCAlbzAKIAotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAyMCwgJWY4KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMjAsICVmOCkpCiAJZmFsaWduZGF0YQklZjIsICVmNCwgJWYxOAotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAyOCwgJWYxMCkpCisJRVhfTERfRlAoTE9BRChsZGQsICVvMSArIDB4MDI4LCAlZjEwKSkKIAlmYWxpZ25kYXRhCSVmNCwgJWY2LCAlZjIwCi0JRVhfTEQoTE9BRChsZGQsICVvMSArIDB4MDMwLCAlZjEyKSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMzAsICVmMTIpKQogCXN1YmNjCQklbzMsIDB4MDEsICVvMwogCWZhbGlnbmRhdGEJJWY2LCAlZjgsICVmMjIKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHgwMzgsICVmMTQpKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlbzEgKyAweDAzOCwgJWYxNCkpCiAKIAlmYWxpZ25kYXRhCSVmOCwgJWYxMCwgJWYyNAotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDA0MCwgJWYwKSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwNDAsICVmMCkpCiAJTE9BRChwcmVmZXRjaCwgJW8xICsgMHgxYzAsICNvbmVfcmVhZCkKIAlmYWxpZ25kYXRhCSVmMTAsICVmMTIsICVmMjYKIAliZyxwdAkJJVhDQywgMWIKQEAgLTIxMSwyOSArMjE3LDI5IEBACiAKIAkvKiBGaW5hbGx5IHdlIGNvcHkgdGhlIGxhc3QgZnVsbCA2NC1ieXRlIGJsb2NrLiAqLwogMjoKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHgwMDgsICVmMikpCisJRVhfTERfRlAoTE9BRChsZGQsICVvMSArIDB4MDA4LCAlZjIpKQogCWZhbGlnbmRhdGEJJWYxMiwgJWYxNCwgJWYyOAotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAxMCwgJWY0KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMTAsICVmNCkpCiAJZmFsaWduZGF0YQklZjE0LCAlZjAsICVmMzAKLQlFWF9TVChTVE9SRV9CTEsoJWYxNiwgJW8wKSkKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHgwMTgsICVmNikpCisJRVhfU1RfRlAoU1RPUkVfQkxLKCVmMTYsICVvMCkpCisJRVhfTERfRlAoTE9BRChsZGQsICVvMSArIDB4MDE4LCAlZjYpKQogCWZhbGlnbmRhdGEJJWYwLCAlZjIsICVmMTYKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHgwMjAsICVmOCkpCisJRVhfTERfRlAoTE9BRChsZGQsICVvMSArIDB4MDIwLCAlZjgpKQogCWZhbGlnbmRhdGEJJWYyLCAlZjQsICVmMTgKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHgwMjgsICVmMTApKQorCUVYX0xEX0ZQKExPQUQobGRkLCAlbzEgKyAweDAyOCwgJWYxMCkpCiAJZmFsaWduZGF0YQklZjQsICVmNiwgJWYyMAotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAzMCwgJWYxMikpCisJRVhfTERfRlAoTE9BRChsZGQsICVvMSArIDB4MDMwLCAlZjEyKSkKIAlmYWxpZ25kYXRhCSVmNiwgJWY4LCAlZjIyCi0JRVhfTEQoTE9BRChsZGQsICVvMSArIDB4MDM4LCAlZjE0KSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMzgsICVmMTQpKQogCWZhbGlnbmRhdGEJJWY4LCAlZjEwLCAlZjI0CiAJY21wCQklZzEsIDAKIAliZSxwdAkJJVhDQywgMWYKIAkgYWRkCQklbzAsIDB4NDAsICVvMAotCUVYX0xEKExPQUQobGRkLCAlbzEgKyAweDA0MCwgJWYwKSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwNDAsICVmMCkpCiAxOglmYWxpZ25kYXRhCSVmMTAsICVmMTIsICVmMjYKIAlmYWxpZ25kYXRhCSVmMTIsICVmMTQsICVmMjgKIAlmYWxpZ25kYXRhCSVmMTQsICVmMCwgJWYzMAotCUVYX1NUKFNUT1JFX0JMSyglZjE2LCAlbzApKQorCUVYX1NUX0ZQKFNUT1JFX0JMSyglZjE2LCAlbzApKQogCWFkZAkJJW8wLCAweDQwLCAlbzAKIAlhZGQJCSVvMSwgMHg0MCwgJW8xCiAJbWVtYmFyCQkjU3luYwpAQCAtMjUzLDIwICsyNTksMjAgQEAKIAogCXN1YgkJJW8yLCAlZzIsICVvMgogCWJlLGEscHQJCSVYQ0MsIDFmCi0JIEVYX0xEKExPQUQobGRkLCAlbzEgKyAweDAwLCAlZjApKQorCSBFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwMCwgJWYwKSkKIAotMToJRVhfTEQoTE9BRChsZGQsICVvMSArIDB4MDgsICVmMikpCisxOglFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwOCwgJWYyKSkKIAlhZGQJCSVvMSwgMHg4LCAlbzEKIAlzdWJjYwkJJWcyLCAweDgsICVnMgogCWZhbGlnbmRhdGEJJWYwLCAlZjIsICVmOAotCUVYX1NUKFNUT1JFKHN0ZCwgJWY4LCAlbzApKQorCUVYX1NUX0ZQKFNUT1JFKHN0ZCwgJWY4LCAlbzApKQogCWJlLHBuCQklWENDLCAyZgogCSBhZGQJCSVvMCwgMHg4LCAlbzAKLQlFWF9MRChMT0FEKGxkZCwgJW8xICsgMHgwOCwgJWYwKSkKKwlFWF9MRF9GUChMT0FEKGxkZCwgJW8xICsgMHgwOCwgJWYwKSkKIAlhZGQJCSVvMSwgMHg4LCAlbzEKIAlzdWJjYwkJJWcyLCAweDgsICVnMgogCWZhbGlnbmRhdGEJJWYyLCAlZjAsICVmOAotCUVYX1NUKFNUT1JFKHN0ZCwgJWY4LCAlbzApKQorCUVYX1NUX0ZQKFNUT1JFKHN0ZCwgJWY4LCAlbzApKQogCWJuZSxwbgkJJVhDQywgMWIKIAkgYWRkCQklbzAsIDB4OCwgJW8wCiAKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC90aWxlL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggYmI1MDljZS4uODc2NzA2MCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTIxLDcgKzIxLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgogICogIENvcHlyaWdodCAoQykgMjAwOSBKYXN3aW5kZXIgU2luZ2ggUmFqcHV0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4sIFJvYmVydCBSaWNodGVyCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24sIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuLCBTdGVwaGFuZSBFcmFuaWFuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vTWFrZWZpbGUgYi9hcmNoL3VtL01ha2VmaWxlCmluZGV4IDI1ZWQ0MDkuLmUzYWJlNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vTWFrZWZpbGUKKysrIGIvYXJjaC91bS9NYWtlZmlsZQpAQCAtMTMxLDcgKzEzMSw3IEBACiAjIFRoZSB3cmFwcGVycyB3aWxsIHNlbGVjdCB3aGV0aGVyIHVzaW5nICJtYWxsb2MiIG9yIHRoZSBrZXJuZWwgYWxsb2NhdG9yLgogTElOS19XUkFQUyA9IC1XbCwtLXdyYXAsbWFsbG9jIC1XbCwtLXdyYXAsZnJlZSAtV2wsLS13cmFwLGNhbGxvYwogCi1MRF9GTEFHU19DTURMSU5FID0gJChmb3JlYWNoIG9wdCwkKExERkxBR1MpLC1XbCwkKG9wdCkpIC1scnQKK0xEX0ZMQUdTX0NNRExJTkUgPSAkKGZvcmVhY2ggb3B0LCQoTERGTEFHUyksLVdsLCQob3B0KSkKIAogIyBVc2VkIGJ5IGxpbmstdm1saW51eC5zaCB3aGljaCBoYXMgc3BlY2lhbCBzdXBwb3J0IGZvciB1bSBsaW5rCiBleHBvcnQgQ0ZMQUdTX3ZtbGludXggOj0gJChMSU5LLXkpICQoTElOS19XUkFQUykgJChMRF9GTEFHU19DTURMSU5FKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X3VzZXIuYwppbmRleCBlNjk3YTQxLi5lOWY4NDQ1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X3VzZXIuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X3VzZXIuYwpAQCAtMjQ5LDIxICsyNDksMjMgQEAKIAogY2hhciAqc3BsaXRfaWZfc3BlYyhjaGFyICpzdHIsIC4uLikKIHsKLQljaGFyICoqYXJnLCAqZW5kOworCWNoYXIgKiphcmcsICplbmQsICpyZXQgPSBOVUxMOwogCXZhX2xpc3QgYXA7CiAKIAl2YV9zdGFydChhcCwgc3RyKTsKIAl3aGlsZSAoKGFyZyA9IHZhX2FyZyhhcCwgY2hhciAqKikpICE9IE5VTEwpIHsKIAkJaWYgKCpzdHIgPT0gJ1wwJykKLQkJCXJldHVybiBOVUxMOworCQkJZ290byBvdXQ7CiAJCWVuZCA9IHN0cmNocihzdHIsICcsJyk7CiAJCWlmIChlbmQgIT0gc3RyKQogCQkJKmFyZyA9IHN0cjsKIAkJaWYgKGVuZCA9PSBOVUxMKQotCQkJcmV0dXJuIE5VTEw7CisJCQlnb3RvIG91dDsKIAkJKmVuZCsrID0gJ1wwJzsKIAkJc3RyID0gZW5kOwogCX0KKwlyZXQgPSBzdHI7CitvdXQ6CiAJdmFfZW5kKGFwKTsKLQlyZXR1cm4gc3RyOworCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvdW0va2VybmVsL3NpZ25hbC5jCmluZGV4IDU3YWNiZDYuLmZjOGJlMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvdW0va2VybmVsL3NpZ25hbC5jCkBAIC02OSw3ICs2OSw3IEBACiAJc3RydWN0IGtzaWduYWwga3NpZzsKIAlpbnQgaGFuZGxlZF9zaWcgPSAwOwogCi0Jd2hpbGUgKGdldF9zaWduYWwoJmtzaWcpKSB7CisJaWYgKGdldF9zaWduYWwoJmtzaWcpKSB7CiAJCWhhbmRsZWRfc2lnID0gMTsKIAkJLyogV2hlZSEgIEFjdHVhbGx5IGRlbGl2ZXIgdGhlIHNpZ25hbC4gICovCiAJCWhhbmRsZV9zaWduYWwoJmtzaWcsIHJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9ib290LmggYi9hcmNoL3g4Ni9ib290L2Jvb3QuaAppbmRleCAwMDMzZTk2Li45MDExYTg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2Jvb3QuaAorKysgYi9hcmNoL3g4Ni9ib290L2Jvb3QuaApAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZWRkLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3QuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlICJiaXRvcHMuaCIKICNpbmNsdWRlICJjdHlwZS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby1tb2RlLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLW1vZGUuYwppbmRleCBhYThhOTZiLi45NWM3YTgxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLW1vZGUuYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLW1vZGUuYwpAQCAtMTksNiArMTksOCBAQAogI2luY2x1ZGUgInZpZGVvLmgiCiAjaW5jbHVkZSAidmVzYS5oIgogCisjaW5jbHVkZSA8dWFwaS9hc20vYm9vdC5oPgorCiAvKgogICogQ29tbW9uIHZhcmlhYmxlcwogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmMKaW5kZXggMDUxMTFiYi4uNzc3ODBlMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uYwpAQCAtMTMsNiArMTMsOCBAQAogICogU2VsZWN0IHZpZGVvIG1vZGUKICAqLwogCisjaW5jbHVkZSA8dWFwaS9hc20vYm9vdC5oPgorCiAjaW5jbHVkZSAiYm9vdC5oIgogI2luY2x1ZGUgInZpZGVvLmgiCiAjaW5jbHVkZSAidmVzYS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvZW50cnkvZW50cnlfNjQuUyBiL2FyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMKaW5kZXggNTM2MTZjYS4uYTU1Njk3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvZW50cnkvZW50cnlfNjQuUworKysgYi9hcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TCkBAIC01MDksNiArNTA5LDE3IEBACiAJICogdHJhY2tpbmcgdGhhdCB3ZSdyZSBpbiBrZXJuZWwgbW9kZS4KIAkgKi8KIAlTV0FQR1MKKworCS8qCisJICogV2UgbmVlZCB0byB0ZWxsIGxvY2tkZXAgdGhhdCBJUlFzIGFyZSBvZmYuICBXZSBjYW4ndCBkbyB0aGlzIHVudGlsCisJICogd2UgZml4IGdzYmFzZSwgYW5kIHdlIHNob3VsZCBkbyBpdCBiZWZvcmUgZW50ZXJfZnJvbV91c2VyX21vZGUKKwkgKiAod2hpY2ggY2FuIHRha2UgbG9ja3MpLiAgU2luY2UgVFJBQ0VfSVJRU19PRkYgaWRlbXBvdGVudCwKKwkgKiB0aGUgc2ltcGxlc3Qgd2F5IHRvIGhhbmRsZSBpdCBpcyB0byBqdXN0IGNhbGwgaXQgdHdpY2UgaWYKKwkgKiB3ZSBlbnRlciBmcm9tIHVzZXIgbW9kZS4gIFRoZXJlJ3Mgbm8gcmVhc29uIHRvIG9wdGltaXplIHRoaXMgc2luY2UKKwkgKiBUUkFDRV9JUlFTX09GRiBpcyBhIG5vLW9wIGlmIGxvY2tkZXAgaXMgb2ZmLgorCSAqLworCVRSQUNFX0lSUVNfT0ZGCisKICNpZmRlZiBDT05GSUdfQ09OVEVYVF9UUkFDS0lORwogCWNhbGwgZW50ZXJfZnJvbV91c2VyX21vZGUKICNlbmRpZgpAQCAtMTA0OSwxMiArMTA2MCwxOCBAQAogCVNXQVBHUwogCiAuTGVycm9yX2VudHJ5X2Zyb21fdXNlcm1vZGVfYWZ0ZXJfc3dhcGdzOgorCS8qCisJICogV2UgbmVlZCB0byB0ZWxsIGxvY2tkZXAgdGhhdCBJUlFzIGFyZSBvZmYuICBXZSBjYW4ndCBkbyB0aGlzIHVudGlsCisJICogd2UgZml4IGdzYmFzZSwgYW5kIHdlIHNob3VsZCBkbyBpdCBiZWZvcmUgZW50ZXJfZnJvbV91c2VyX21vZGUKKwkgKiAod2hpY2ggY2FuIHRha2UgbG9ja3MpLgorCSAqLworCVRSQUNFX0lSUVNfT0ZGCiAjaWZkZWYgQ09ORklHX0NPTlRFWFRfVFJBQ0tJTkcKIAljYWxsIGVudGVyX2Zyb21fdXNlcl9tb2RlCiAjZW5kaWYKKwlyZXQKIAogLkxlcnJvcl9lbnRyeV9kb25lOgotCiAJVFJBQ0VfSVJRU19PRkYKIAlyZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCA5ZjM5MDU2Li42OTBiNDAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBNU1JfSUEzMl9QRVJGQ1RSMAkJMHgwMDAwMDBjMQogI2RlZmluZSBNU1JfSUEzMl9QRVJGQ1RSMQkJMHgwMDAwMDBjMgogI2RlZmluZSBNU1JfRlNCX0ZSRVEJCQkweDAwMDAwMGNkCi0jZGVmaW5lIE1TUl9OSE1fUExBVEZPUk1fSU5GTwkJMHgwMDAwMDBjZQorI2RlZmluZSBNU1JfUExBVEZPUk1fSU5GTwkJMHgwMDAwMDBjZQogCiAjZGVmaW5lIE1TUl9OSE1fU05CX1BLR19DU1RfQ0ZHX0NUTAkweDAwMDAwMGUyCiAjZGVmaW5lIE5ITV9DM19BVVRPX0RFTU9URQkJKDFVTCA8PCAyNSkKQEAgLTQ0LDcgKzQ0LDYgQEAKICNkZWZpbmUgU05CX0MxX0FVVE9fVU5ERU1PVEUJCSgxVUwgPDwgMjcpCiAjZGVmaW5lIFNOQl9DM19BVVRPX1VOREVNT1RFCQkoMVVMIDw8IDI4KQogCi0jZGVmaW5lIE1TUl9QTEFURk9STV9JTkZPCQkweDAwMDAwMGNlCiAjZGVmaW5lIE1TUl9NVFJSY2FwCQkJMHgwMDAwMDBmZQogI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1JfQ1RMCQkweDAwMDAwMTE5CiAjZGVmaW5lIE1TUl9JQTMyX0JCTF9DUl9DVEwzCQkweDAwMDAwMTFlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKaW5kZXggYzViN2ZiMi4uY2MwNzFjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaApAQCAtOSwyMCArOSwyMiBAQAogI2RlZmluZSBQQUdFX1NJWkUJKF9BQygxLFVMKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQogCi0jZGVmaW5lIF9fUEhZU0lDQUxfTUFTSwkJKChwaHlzX2FkZHJfdCkoKDFVTEwgPDwgX19QSFlTSUNBTF9NQVNLX1NISUZUKSAtIDEpKQotI2RlZmluZSBfX1ZJUlRVQUxfTUFTSwkJKCgxVUwgPDwgX19WSVJUVUFMX01BU0tfU0hJRlQpIC0gMSkKLQotLyogQ2FzdCBQQUdFX01BU0sgdG8gYSBzaWduZWQgdHlwZSBzbyB0aGF0IGl0IGlzIHNpZ24tZXh0ZW5kZWQgaWYKLSAgIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSAzMi1iaXRzIGJ1dCBwaHlzaWNhbCBhZGRyZXNzZXMgYXJlIGxhcmdlcgotICAgKGllLCAzMi1iaXQgUEFFKS4gKi8KLSNkZWZpbmUgUEhZU0lDQUxfUEFHRV9NQVNLCSgoKHNpZ25lZCBsb25nKVBBR0VfTUFTSykgJiBfX1BIWVNJQ0FMX01BU0spCi0KICNkZWZpbmUgUE1EX1BBR0VfU0laRQkJKF9BQygxLCBVTCkgPDwgUE1EX1NISUZUKQogI2RlZmluZSBQTURfUEFHRV9NQVNLCQkofihQTURfUEFHRV9TSVpFLTEpKQogCiAjZGVmaW5lIFBVRF9QQUdFX1NJWkUJCShfQUMoMSwgVUwpIDw8IFBVRF9TSElGVCkKICNkZWZpbmUgUFVEX1BBR0VfTUFTSwkJKH4oUFVEX1BBR0VfU0laRS0xKSkKIAorI2RlZmluZSBfX1BIWVNJQ0FMX01BU0sJCSgocGh5c19hZGRyX3QpKCgxVUxMIDw8IF9fUEhZU0lDQUxfTUFTS19TSElGVCkgLSAxKSkKKyNkZWZpbmUgX19WSVJUVUFMX01BU0sJCSgoMVVMIDw8IF9fVklSVFVBTF9NQVNLX1NISUZUKSAtIDEpCisKKy8qIENhc3QgKlBBR0VfTUFTSyB0byBhIHNpZ25lZCB0eXBlIHNvIHRoYXQgaXQgaXMgc2lnbi1leHRlbmRlZCBpZgorICAgdmlydHVhbCBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgYnV0IHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgbGFyZ2VyCisgICAoaWUsIDMyLWJpdCBQQUUpLiAqLworI2RlZmluZSBQSFlTSUNBTF9QQUdFX01BU0sJKCgoc2lnbmVkIGxvbmcpUEFHRV9NQVNLKSAmIF9fUEhZU0lDQUxfTUFTSykKKyNkZWZpbmUgUEhZU0lDQUxfUE1EX1BBR0VfTUFTSwkoKChzaWduZWQgbG9uZylQTURfUEFHRV9NQVNLKSAmIF9fUEhZU0lDQUxfTUFTSykKKyNkZWZpbmUgUEhZU0lDQUxfUFVEX1BBR0VfTUFTSwkoKChzaWduZWQgbG9uZylQVURfUEFHRV9NQVNLKSAmIF9fUEhZU0lDQUxfTUFTSykKKwogI2RlZmluZSBIUEFHRV9TSElGVAkJUE1EX1NISUZUCiAjZGVmaW5lIEhQQUdFX1NJWkUJCShfQUMoMSxVTCkgPDwgSFBBR0VfU0hJRlQpCiAjZGVmaW5lIEhQQUdFX01BU0sJCSh+KEhQQUdFX1NJWkUgLSAxKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAppbmRleCBkZDViMGFhLi5hNDcxY2FkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCkBAIC0yNzksMTcgKzI3OSwxNCBAQAogc3RhdGljIGlubGluZSBwdWR2YWxfdCBwdWRfcGZuX21hc2socHVkX3QgcHVkKQogewogCWlmIChuYXRpdmVfcHVkX3ZhbChwdWQpICYgX1BBR0VfUFNFKQotCQlyZXR1cm4gUFVEX1BBR0VfTUFTSyAmIFBIWVNJQ0FMX1BBR0VfTUFTSzsKKwkJcmV0dXJuIFBIWVNJQ0FMX1BVRF9QQUdFX01BU0s7CiAJZWxzZQogCQlyZXR1cm4gUFRFX1BGTl9NQVNLOwogfQogCiBzdGF0aWMgaW5saW5lIHB1ZHZhbF90IHB1ZF9mbGFnc19tYXNrKHB1ZF90IHB1ZCkKIHsKLQlpZiAobmF0aXZlX3B1ZF92YWwocHVkKSAmIF9QQUdFX1BTRSkKLQkJcmV0dXJuIH4oUFVEX1BBR0VfTUFTSyAmIChwdWR2YWxfdClQSFlTSUNBTF9QQUdFX01BU0spOwotCWVsc2UKLQkJcmV0dXJuIH5QVEVfUEZOX01BU0s7CisJcmV0dXJuIH5wdWRfcGZuX21hc2socHVkKTsKIH0KIAogc3RhdGljIGlubGluZSBwdWR2YWxfdCBwdWRfZmxhZ3MocHVkX3QgcHVkKQpAQCAtMzAwLDE3ICsyOTcsMTQgQEAKIHN0YXRpYyBpbmxpbmUgcG1kdmFsX3QgcG1kX3Bmbl9tYXNrKHBtZF90IHBtZCkKIHsKIAlpZiAobmF0aXZlX3BtZF92YWwocG1kKSAmIF9QQUdFX1BTRSkKLQkJcmV0dXJuIFBNRF9QQUdFX01BU0sgJiBQSFlTSUNBTF9QQUdFX01BU0s7CisJCXJldHVybiBQSFlTSUNBTF9QTURfUEFHRV9NQVNLOwogCWVsc2UKIAkJcmV0dXJuIFBURV9QRk5fTUFTSzsKIH0KIAogc3RhdGljIGlubGluZSBwbWR2YWxfdCBwbWRfZmxhZ3NfbWFzayhwbWRfdCBwbWQpCiB7Ci0JaWYgKG5hdGl2ZV9wbWRfdmFsKHBtZCkgJiBfUEFHRV9QU0UpCi0JCXJldHVybiB+KFBNRF9QQUdFX01BU0sgJiAocG1kdmFsX3QpUEhZU0lDQUxfUEFHRV9NQVNLKTsKLQllbHNlCi0JCXJldHVybiB+UFRFX1BGTl9NQVNLOworCXJldHVybiB+cG1kX3Bmbl9tYXNrKHBtZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcG1kdmFsX3QgcG1kX2ZsYWdzKHBtZF90IHBtZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BsYXRmb3JtX3NzdF9hdWRpby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGxhdGZvcm1fc3N0X2F1ZGlvLmgKaW5kZXggNzI0OWU2ZC4uNTk3M2EyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGxhdGZvcm1fc3N0X2F1ZGlvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGxhdGZvcm1fc3N0X2F1ZGlvLmgKQEAgLTU1LDYgKzU1LDcgQEAKIAlQSVBFX01FRElBMF9JTiA9IDB4OEYsCiAJUElQRV9NRURJQTFfSU4gPSAweDkwLAogCVBJUEVfTUVESUEyX0lOID0gMHg5MSwKKwlQSVBFX01FRElBM19JTiA9IDB4OUMsCiAJUElQRV9SU1ZEID0gMHhGRiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCmluZGV4IDQ4ZDM0ZDIuLmNkMGZjMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9YODZfUExBVEZPUk1fSAogI2RlZmluZSBfQVNNX1g4Nl9QTEFURk9STV9ICiAKLSNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KIAogc3RydWN0IG1wY19idXM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCA0ZGRkNzgwLi5jMmI3NTIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTI3MywxMCArMjczLDkgQEAKIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldHVwX3NtYXAoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCXVuc2lnbmVkIGxvbmcgZWZsYWdzOworCXVuc2lnbmVkIGxvbmcgZWZsYWdzID0gbmF0aXZlX3NhdmVfZmwoKTsKIAogCS8qIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGxvbmcgYWdvICovCi0JcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZWZsYWdzKTsKIAlCVUdfT04oZWZsYWdzICYgWDg2X0VGTEFHU19BQyk7CiAKIAlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9TTUFQKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZS5jCmluZGV4IDdmYzI3ZjEuLmIzZTk0ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlLmMKQEAgLTY5OCwzICs2OTgsNCBAQAogCXJldHVybiBlcnJvcjsKIAogfQorbGF0ZV9pbml0Y2FsbChtaWNyb2NvZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCmluZGV4IDQ1NjJjZjAuLjJiZjc5ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCkBAIC01LDcgKzUsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEphc3dpbmRlciBTaW5naCBSYWpwdXQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiwgUm9iZXJ0IFJpY2h0ZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYQogICogIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiwgPG1hcmt1cy50Lm1ldHpnZXJAaW50ZWwuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4sIFN0ZXBoYW5lIEVyYW5pYW4KICAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5oCmluZGV4IDQ5OWY1MzMuLmQwZTM1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5oCkBAIC01LDcgKzUsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEphc3dpbmRlciBTaW5naCBSYWpwdXQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiwgUm9iZXJ0IFJpY2h0ZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYQogICogIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiwgPG1hcmt1cy50Lm1ldHpnZXJAaW50ZWwuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4sIFN0ZXBoYW5lIEVyYW5pYW4KICAqCkBAIC0zODcsNyArMzg3LDcgQEAKIC8qIENoZWNrIGZsYWdzIGFuZCBldmVudCBjb2RlL3VtYXNrLCBhbmQgc2V0IHRoZSBIU1cgTi9BIGZsYWcgKi8KICNkZWZpbmUgSU5URUxfRkxBR1NfVUVWRU5UX0NPTlNUUkFJTlRfREFUQUxBX05BKGNvZGUsIG4pIFwKIAlfX0VWRU5UX0NPTlNUUkFJTlQoY29kZSwgbiwgCQkJXAotCQkJICBJTlRFTF9BUkNIX0VWRU5UX01BU0t8SU5URUxfQVJDSF9FVkVOVF9NQVNLLCBcCisJCQkgIElOVEVMX0FSQ0hfRVZFTlRfTUFTS3xYODZfQUxMX0VWRU5UX0ZMQUdTLCBcCiAJCQkgIEhXRUlHSFQobiksIDAsIFBFUkZfWDg2X0VWRU5UX1BFQlNfTkFfSFNXKQogCiAKQEAgLTYyNyw2ICs2MjcsNyBAQAogCXU2NCBsYnJfZnJvbVtNQVhfTEJSX0VOVFJJRVNdOwogCXU2NCBsYnJfdG9bTUFYX0xCUl9FTlRSSUVTXTsKIAl1NjQgbGJyX2luZm9bTUFYX0xCUl9FTlRSSUVTXTsKKwlpbnQgdG9zOwogCWludCBsYnJfY2FsbHN0YWNrX3VzZXJzOwogCWludCBsYnJfc3RhY2tfc3RhdGU7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwppbmRleCBmNjMzNjBiLi5lMmE0MzAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDAwYzAsIDApLCAvKiBJTlNUX1JFVElSRUQuQU5ZICovCiAJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDAwM2MsIDEpLCAvKiBDUFVfQ0xLX1VOSEFMVEVELkNPUkUgKi8KIAlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4MDMwMCwgMiksIC8qIENQVV9DTEtfVU5IQUxURUQuUkVGICovCi0JSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQ4LCAweDQpLCAvKiBMMURfUEVORF9NSVNTLiogKi8KKwlJTlRFTF9VRVZFTlRfQ09OU1RSQUlOVCgweDE0OCwgMHg0KSwJLyogTDFEX1BFTkRfTUlTUy5QRU5ESU5HICovCiAJSU5URUxfVUVWRU5UX0NPTlNUUkFJTlQoMHgwMWMwLCAweDIpLCAvKiBJTlNUX1JFVElSRUQuUFJFQ19ESVNUICovCiAJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGNkLCAweDgpLCAvKiBNRU1fVFJBTlNfUkVUSVJFRC5MT0FEX0xBVEVOQ1kgKi8KIAkvKiBDWUNMRV9BQ1RJVklUWS5DWUNMRVNfTDFEX1BFTkRJTkcgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9jcW0uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9jcW0uYwppbmRleCAzNzdlOGY4Li5hMzE2Y2E5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfY3FtLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2NxbS5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBlcmZfY2dyb3VwICpldmVudF90b19jZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCWlmIChldmVudC0+YXR0YWNoX3N0YXRlICYgUEVSRl9BVFRBQ0hfVEFTSykKLQkJcmV0dXJuIHBlcmZfY2dyb3VwX2Zyb21fdGFzayhldmVudC0+aHcudGFyZ2V0KTsKKwkJcmV0dXJuIHBlcmZfY2dyb3VwX2Zyb21fdGFzayhldmVudC0+aHcudGFyZ2V0LCBldmVudC0+Y3R4KTsKIAogCXJldHVybiBldmVudC0+Y2dycDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9sYnIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9sYnIuYwppbmRleCBiZmQwYjcxLi42NTlmMDFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfbGJyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX2xici5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAl9CiAKIAltYXNrID0geDg2X3BtdS5sYnJfbnIgLSAxOwotCXRvcyA9IGludGVsX3BtdV9sYnJfdG9zKCk7CisJdG9zID0gdGFza19jdHgtPnRvczsKIAlmb3IgKGkgPSAwOyBpIDwgdG9zOyBpKyspIHsKIAkJbGJyX2lkeCA9ICh0b3MgLSBpKSAmIG1hc2s7CiAJCXdybXNybCh4ODZfcG11Lmxicl9mcm9tICsgbGJyX2lkeCwgdGFza19jdHgtPmxicl9mcm9tW2ldKTsKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCQlpZiAoeDg2X3BtdS5pbnRlbF9jYXAubGJyX2Zvcm1hdCA9PSBMQlJfRk9STUFUX0lORk8pCiAJCQl3cm1zcmwoTVNSX0xCUl9JTkZPXzAgKyBsYnJfaWR4LCB0YXNrX2N0eC0+bGJyX2luZm9baV0pOwogCX0KKwl3cm1zcmwoeDg2X3BtdS5sYnJfdG9zLCB0b3MpOwogCXRhc2tfY3R4LT5sYnJfc3RhY2tfc3RhdGUgPSBMQlJfTk9ORTsKIH0KIApAQCAtMjcwLDYgKzI3MSw3IEBACiAJCWlmICh4ODZfcG11LmludGVsX2NhcC5sYnJfZm9ybWF0ID09IExCUl9GT1JNQVRfSU5GTykKIAkJCXJkbXNybChNU1JfTEJSX0lORk9fMCArIGxicl9pZHgsIHRhc2tfY3R4LT5sYnJfaW5mb1tpXSk7CiAJfQorCXRhc2tfY3R4LT50b3MgPSB0b3M7CiAJdGFza19jdHgtPmxicl9zdGFja19zdGF0ZSA9IExCUl9WQUxJRDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2ZwdS9zaWduYWwuYyBiL2FyY2gveDg2L2tlcm5lbC9mcHUvc2lnbmFsLmMKaW5kZXggZWYyOWI3NC4uMzFjNmE2MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2ZwdS9zaWduYWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZnB1L3NpZ25hbC5jCkBAIC0zODUsMjAgKzM4NSwxOSBAQAogICovCiB2b2lkIGZwdV9faW5pdF9wcmVwYXJlX2Z4X3N3X2ZyYW1lKHZvaWQpCiB7Ci0JaW50IGZzYXZlX2hlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBmcmVnc19zdGF0ZSk7CiAJaW50IHNpemUgPSB4c3RhdGVfc2l6ZSArIEZQX1hTVEFURV9NQUdJQzJfU0laRTsKIAotCWlmIChjb25maWdfZW5hYmxlZChDT05GSUdfWDg2XzMyKSkKLQkJc2l6ZSArPSBmc2F2ZV9oZWFkZXJfc2l6ZTsKLQogCWZ4X3N3X3Jlc2VydmVkLm1hZ2ljMSA9IEZQX1hTVEFURV9NQUdJQzE7CiAJZnhfc3dfcmVzZXJ2ZWQuZXh0ZW5kZWRfc2l6ZSA9IHNpemU7CiAJZnhfc3dfcmVzZXJ2ZWQueGZlYXR1cmVzID0geGZlYXR1cmVzX21hc2s7CiAJZnhfc3dfcmVzZXJ2ZWQueHN0YXRlX3NpemUgPSB4c3RhdGVfc2l6ZTsKIAotCWlmIChjb25maWdfZW5hYmxlZChDT05GSUdfSUEzMl9FTVVMQVRJT04pKSB7CisJaWYgKGNvbmZpZ19lbmFibGVkKENPTkZJR19JQTMyX0VNVUxBVElPTikgfHwKKwkgICAgY29uZmlnX2VuYWJsZWQoQ09ORklHX1g4Nl8zMikpIHsKKwkJaW50IGZzYXZlX2hlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBmcmVnc19zdGF0ZSk7CisKIAkJZnhfc3dfcmVzZXJ2ZWRfaWEzMiA9IGZ4X3N3X3Jlc2VydmVkOwotCQlmeF9zd19yZXNlcnZlZF9pYTMyLmV4dGVuZGVkX3NpemUgKz0gZnNhdmVfaGVhZGVyX3NpemU7CisJCWZ4X3N3X3Jlc2VydmVkX2lhMzIuZXh0ZW5kZWRfc2l6ZSA9IHNpemUgKyBmc2F2ZV9oZWFkZXJfc2l6ZTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jCmluZGV4IDY0NTRmMjcuLjcwZmMzMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYwpAQCAtNjk0LDcgKzY5NCw2IEBACiAJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWFNBVkUpKQogCQlyZXR1cm4gTlVMTDsKIAotCXhzYXZlID0gJmN1cnJlbnQtPnRocmVhZC5mcHUuc3RhdGUueHNhdmU7CiAJLyoKIAkgKiBXZSBzaG91bGQgbm90IGV2ZXIgYmUgcmVxdWVzdGluZyBmZWF0dXJlcyB0aGF0IHdlCiAJICogaGF2ZSBub3QgZW5hYmxlZC4gIFJlbWVtYmVyIHRoYXQgcGNudHh0X21hc2sgaXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFfd29yay5jIGIvYXJjaC94ODYva2VybmVsL2lycV93b3JrLmMKaW5kZXggZGM1ZmE2YS4uMzUxMmJhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV93b3JrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycV93b3JrLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogeDg2IHNwZWNpZmljIGNvZGUgZm9yIGlycV93b3JrCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21jb3VudF82NC5TIGIvYXJjaC94ODYva2VybmVsL21jb3VudF82NC5TCmluZGV4IDk0ZWExMjAuLjg3ZTE3NjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tY291bnRfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWNvdW50XzY0LlMKQEAgLTI3OCw2ICsyNzgsMTIgQEAKIAkvKiBzYXZlX21jb3VudF9yZWdzIGZpbGxzIGluIGZpcnN0IHR3byBwYXJhbWV0ZXJzICovCiAJc2F2ZV9tY291bnRfcmVncwogCisJLyoKKwkgKiBXaGVuIERZTkFNSUNfRlRSQUNFIGlzIG5vdCBkZWZpbmVkLCBBUkNIX1NVUFBPUlRTX0ZUUkFDRV9PUFMgaXMgbm90CisJICogc2V0IChzZWUgaW5jbHVkZS9hc20vZnRyYWNlLmggYW5kIGluY2x1ZGUvbGludXgvZnRyYWNlLmgpLiAgT25seSB0aGUKKwkgKiBpcCBhbmQgcGFyZW50IGlwIGFyZSB1c2VkIGFuZCB0aGUgbGlzdCBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbgorCSAqIGZ1bmN0aW9uIHRyYWNpbmcgaXMgZW5hYmxlZC4KKwkgKi8KIAljYWxsICAgKmZ0cmFjZV90cmFjZV9mdW5jdGlvbgogCiAJcmVzdG9yZV9tY291bnRfcmVncwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BtZW0uYyBiL2FyY2gveDg2L2tlcm5lbC9wbWVtLmMKaW5kZXggNGYwMGI2My4uMTQ0MTVhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BtZW0uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcG1lbS5jCkBAIC00LDEwICs0LDIyIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworc3RhdGljIGludCBmb3VuZCh1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDE7Cit9CiAKIHN0YXRpYyBfX2luaXQgaW50IHJlZ2lzdGVyX2U4MjBfcG1lbSh2b2lkKQogeworCWNoYXIgKnBtZW0gPSAiUGVyc2lzdGVudCBNZW1vcnkgKGxlZ2FjeSkiOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IHJjOworCisJcmMgPSB3YWxrX2lvbWVtX3JlcyhwbWVtLCBJT1JFU09VUkNFX01FTSwgMCwgLTEsIE5VTEwsIGZvdW5kKTsKKwlpZiAocmMgPD0gMCkKKwkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIFNlZSBkcml2ZXJzL252ZGltbS9lODIwLmMgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiwgdGhpcyBpcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCAyOWRiMjVmLi5kMmJiZTM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtMTI1MCw4ICsxMjUwLDYgQEAKIAlpZiAoZWZpX2VuYWJsZWQoRUZJX0JPT1QpKQogCQllZmlfYXBwbHlfbWVtbWFwX3F1aXJrcygpOwogI2VuZGlmCi0KLQltaWNyb2NvZGVfaW5pdCgpOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCmluZGV4IGI3ZmZiN2MuLmNiNjI4MmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKQEAgLTY5MCwxMiArNjkwLDE1IEBACiAJc2lnbmFsX3NldHVwX2RvbmUoZmFpbGVkLCBrc2lnLCBzdGVwcGluZyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIE5SX3Jlc3RhcnRfc3lzY2FsbAlfX05SX3Jlc3RhcnRfc3lzY2FsbAotI2Vsc2UgLyogIUNPTkZJR19YODZfMzIgKi8KLSNkZWZpbmUgTlJfcmVzdGFydF9zeXNjYWxsCVwKLQl0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSA/IF9fTlJfaWEzMl9yZXN0YXJ0X3N5c2NhbGwgOiBfX05SX3Jlc3RhcnRfc3lzY2FsbAotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbnJfcmVzdGFydF9zeXNjYWxsKGNvbnN0IHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgfHwgIWRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwlyZXR1cm4gX19OUl9yZXN0YXJ0X3N5c2NhbGw7CisjZWxzZSAvKiAhQ09ORklHX1g4Nl8zMiAmJiBDT05GSUdfWDg2XzY0ICovCisJcmV0dXJuIHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpID8gX19OUl9pYTMyX3Jlc3RhcnRfc3lzY2FsbCA6CisJCV9fTlJfcmVzdGFydF9zeXNjYWxsIHwgKHJlZ3MtPm9yaWdfYXggJiBfX1gzMl9TWVNDQUxMX0JJVCk7CisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiB8fCAhQ09ORklHX1g4Nl82NCAqLworfQogCiAvKgogICogTm90ZSB0aGF0ICdpbml0JyBpcyBhIHNwZWNpYWwgcHJvY2VzczogaXQgZG9lc24ndCBnZXQgc2lnbmFscyBpdCBkb2Vzbid0CkBAIC03MjQsNyArNzI3LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKLQkJCXJlZ3MtPmF4ID0gTlJfcmVzdGFydF9zeXNjYWxsOworCQkJcmVncy0+YXggPSBnZXRfbnJfcmVzdGFydF9zeXNjYWxsKHJlZ3MpOwogCQkJcmVncy0+aXAgLT0gMjsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCA4OTJlZTJlNS4uZmJhYmU0ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC01MDksNyArNTA5LDcgQEAKICAqLwogI2RlZmluZSBVREVMQVlfMTBNU19ERUZBVUxUIDEwMDAwCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF91ZGVsYXkgPSBJTlRfTUFYOworc3RhdGljIHVuc2lnbmVkIGludCBpbml0X3VkZWxheSA9IFVJTlRfTUFYOwogCiBzdGF0aWMgaW50IF9faW5pdCBjcHVfaW5pdF91ZGVsYXkoY2hhciAqc3RyKQogewpAQCAtNTIyLDE0ICs1MjIsMTUgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfcXVpcmtfaW5pdF91ZGVsYXkodm9pZCkKIHsKIAkvKiBpZiBjbWRsaW5lIGNoYW5nZWQgaXQgZnJvbSBkZWZhdWx0LCBsZWF2ZSBpdCBhbG9uZSAqLwotCWlmIChpbml0X3VkZWxheSAhPSBJTlRfTUFYKQorCWlmIChpbml0X3VkZWxheSAhPSBVSU5UX01BWCkKIAkJcmV0dXJuOwogCiAJLyogaWYgbW9kZXJuIHByb2Nlc3NvciwgdXNlIG5vIGRlbGF5ICovCiAJaWYgKCgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpICYmIChib290X2NwdV9kYXRhLng4NiA9PSA2KSkgfHwKLQkgICAgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmIChib290X2NwdV9kYXRhLng4NiA+PSAweEYpKSkKKwkgICAgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmIChib290X2NwdV9kYXRhLng4NiA+PSAweEYpKSkgewogCQlpbml0X3VkZWxheSA9IDA7Ci0KKwkJcmV0dXJuOworCX0KIAkvKiBlbHNlLCB1c2UgbGVnYWN5IGRlbGF5ICovCiAJaW5pdF91ZGVsYXkgPSBVREVMQVlfMTBNU19ERUZBVUxUOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmggYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaAppbmRleCAwNjMzMmNiLi4zZjVjNDhkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuaAorKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuaApAQCAtMzgsNiArMzgsMTQgQEAKIAlyZXR1cm4gYmVzdCAmJiAoYmVzdC0+ZWN4ICYgYml0KFg4Nl9GRUFUVVJFX1hTQVZFKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBndWVzdF9jcHVpZF9oYXNfbXRycihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7CisKKwliZXN0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMSwgMCk7CisJcmV0dXJuIGJlc3QgJiYgKGJlc3QtPmVkeCAmIGJpdChYODZfRkVBVFVSRV9NVFJSKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBndWVzdF9jcHVpZF9oYXNfdHNjX2FkanVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmJlc3Q7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbXRyci5jIGIvYXJjaC94ODYva3ZtL210cnIuYwppbmRleCA5ZThiZjEzLi4zZjhjNzMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbXRyci5jCisrKyBiL2FyY2gveDg2L2t2bS9tdHJyLmMKQEAgLTEyMCwxNCArMTIwLDIyIEBACiAJcmV0dXJuIG10cnJfc3RhdGUtPmRlZnR5cGUgJiBJQTMyX01UUlJfREVGX1RZUEVfVFlQRV9NQVNLOwogfQogCi1zdGF0aWMgdTggbXRycl9kaXNhYmxlZF90eXBlKHZvaWQpCitzdGF0aWMgdTggbXRycl9kaXNhYmxlZF90eXBlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAkvKgogCSAqIEludGVsIFNETSAxMS4xMS4yLjI6IGFsbCBNVFJScyBhcmUgZGlzYWJsZWQgd2hlbgogCSAqIElBMzJfTVRSUl9ERUZfVFlQRS5FIGJpdCBpcyBjbGVhcmVkLCBhbmQgdGhlIFVDCiAJICogbWVtb3J5IHR5cGUgaXMgYXBwbGllZCB0byBhbGwgb2YgcGh5c2ljYWwgbWVtb3J5LgorCSAqCisJICogSG93ZXZlciwgdmlydHVhbCBtYWNoaW5lcyBjYW4gYmUgcnVuIHdpdGggQ1BVSUQgc3VjaCB0aGF0CisJICogdGhlcmUgYXJlIG5vIE1UUlJzLiAgSW4gdGhhdCBjYXNlLCB0aGUgZmlybXdhcmUgd2lsbCBuZXZlcgorCSAqIGVuYWJsZSBNVFJScyBhbmQgaXQgaXMgb2J2aW91c2x5IHVuZGVzaXJhYmxlIHRvIHJ1biB0aGUKKwkgKiBndWVzdCBlbnRpcmVseSB3aXRoIFVDIG1lbW9yeSBhbmQgd2UgdXNlIFdCLgogCSAqLwotCXJldHVybiBNVFJSX1RZUEVfVU5DQUNIQUJMRTsKKwlpZiAoZ3Vlc3RfY3B1aWRfaGFzX210cnIodmNwdSkpCisJCXJldHVybiBNVFJSX1RZUEVfVU5DQUNIQUJMRTsKKwllbHNlCisJCXJldHVybiBNVFJSX1RZUEVfV1JCQUNLOwogfQogCiAvKgpAQCAtMjY3LDcgKzI3NSw3IEBACiAKIAlmb3IgKHNlZyA9IDA7IHNlZyA8IHNlZ19udW07IHNlZysrKSB7CiAJCW10cnJfc2VnID0gJmZpeGVkX3NlZ190YWJsZVtzZWddOwotCQlpZiAobXRycl9zZWctPnN0YXJ0ID49IGFkZHIgJiYgYWRkciA8IG10cnJfc2VnLT5lbmQpCisJCWlmIChtdHJyX3NlZy0+c3RhcnQgPD0gYWRkciAmJiBhZGRyIDwgbXRycl9zZWctPmVuZCkKIAkJCXJldHVybiBzZWc7CiAJfQogCkBAIC0zMDAsNyArMzA4LDYgQEAKIAkqc3RhcnQgPSByYW5nZS0+YmFzZSAmIFBBR0VfTUFTSzsKIAogCW1hc2sgPSByYW5nZS0+bWFzayAmIFBBR0VfTUFTSzsKLQltYXNrIHw9IH4wVUxMIDw8IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0czsKIAogCS8qIFRoaXMgY2Fubm90IG92ZXJmbG93IGJlY2F1c2Ugd3JpdGluZyB0byB0aGUgcmVzZXJ2ZWQgYml0cyBvZgogCSAqIHZhcmlhYmxlIE1UUlJzIGNhdXNlcyBhICNHUC4KQEAgLTM1NiwxMCArMzYzLDE0IEBACiAJaWYgKHZhcl9tdHJyX3JhbmdlX2lzX3ZhbGlkKGN1cikpCiAJCWxpc3RfZGVsKCZtdHJyX3N0YXRlLT52YXJfcmFuZ2VzW2luZGV4XS5ub2RlKTsKIAorCS8qIEV4dGVuZCB0aGUgbWFzayB3aXRoIGFsbCAxIGJpdHMgdG8gdGhlIGxlZnQsIHNpbmNlIHRob3NlCisJICogYml0cyBtdXN0IGltcGxpY2l0bHkgYmUgMC4gIFRoZSBiaXRzIGFyZSB0aGVuIGNsZWFyZWQKKwkgKiB3aGVuIHJlYWRpbmcgdGhlbS4KKwkgKi8KIAlpZiAoIWlzX210cnJfbWFzaykKIAkJY3VyLT5iYXNlID0gZGF0YTsKIAllbHNlCi0JCWN1ci0+bWFzayA9IGRhdGE7CisJCWN1ci0+bWFzayA9IGRhdGEgfCAoLTFMTCA8PCBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpKTsKIAogCS8qIGFkZCBpdCB0byB0aGUgbGlzdCBpZiBpdCdzIGVuYWJsZWQuICovCiAJaWYgKHZhcl9tdHJyX3JhbmdlX2lzX3ZhbGlkKGN1cikpIHsKQEAgLTQyNiw2ICs0MzcsOCBAQAogCQkJKnBkYXRhID0gdmNwdS0+YXJjaC5tdHJyX3N0YXRlLnZhcl9yYW5nZXNbaW5kZXhdLmJhc2U7CiAJCWVsc2UKIAkJCSpwZGF0YSA9IHZjcHUtPmFyY2gubXRycl9zdGF0ZS52YXJfcmFuZ2VzW2luZGV4XS5tYXNrOworCisJCSpwZGF0YSAmPSAoMVVMTCA8PCBjcHVpZF9tYXhwaHlhZGRyKHZjcHUpKSAtIDE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC02NzAsNyArNjgzLDcgQEAKIAl9CiAKIAlpZiAoaXRlci5tdHJyX2Rpc2FibGVkKQotCQlyZXR1cm4gbXRycl9kaXNhYmxlZF90eXBlKCk7CisJCXJldHVybiBtdHJyX2Rpc2FibGVkX3R5cGUodmNwdSk7CiAKIAkvKiBub3QgY29udGFpbmVkIGluIGFueSBNVFJScy4gKi8KIAlpZiAodHlwZSA9PSAtMSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCA4M2ExYzY0Li44OTljNDBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC0zNDIyLDYgKzM0MjIsOCBAQAogCXN0cnVjdCBrdm1fcnVuICprdm1fcnVuID0gdmNwdS0+cnVuOwogCXUzMiBleGl0X2NvZGUgPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlOwogCisJdHJhY2Vfa3ZtX2V4aXQoZXhpdF9jb2RlLCB2Y3B1LCBLVk1fSVNBX1NWTSk7CisKIAlpZiAoIWlzX2NyX2ludGVyY2VwdChzdm0sIElOVEVSQ0VQVF9DUjBfV1JJVEUpKQogCQl2Y3B1LT5hcmNoLmNyMCA9IHN2bS0+dm1jYi0+c2F2ZS5jcjA7CiAJaWYgKG5wdF9lbmFibGVkKQpAQCAtMzg5Miw4ICszODk0LDYgQEAKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF0gPSBzdm0tPnZtY2ItPnNhdmUucnNwOwogCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yaXA7CiAKLQl0cmFjZV9rdm1fZXhpdChzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlLCB2Y3B1LCBLVk1fSVNBX1NWTSk7Ci0KIAlpZiAodW5saWtlbHkoc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSA9PSBTVk1fRVhJVF9OTUkpKQogCQlrdm1fYmVmb3JlX2hhbmRsZV9ubWkoJnN2bS0+dmNwdSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2L2t2bS92bXguYwppbmRleCA4N2FjYzUyLi40NDk3NmE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC0yODAzLDcgKzI4MDMsNyBAQAogCQltc3JfaW5mby0+ZGF0YSA9IHZjcHUtPmFyY2guaWEzMl94c3M7CiAJCWJyZWFrOwogCWNhc2UgTVNSX1RTQ19BVVg6Ci0JCWlmICghZ3Vlc3RfY3B1aWRfaGFzX3JkdHNjcCh2Y3B1KSkKKwkJaWYgKCFndWVzdF9jcHVpZF9oYXNfcmR0c2NwKHZjcHUpICYmICFtc3JfaW5mby0+aG9zdF9pbml0aWF0ZWQpCiAJCQlyZXR1cm4gMTsKIAkJLyogT3RoZXJ3aXNlIGZhbGxzIHRocm91Z2ggKi8KIAlkZWZhdWx0OgpAQCAtMjkwOSw3ICsyOTA5LDcgQEAKIAkJCWNsZWFyX2F0b21pY19zd2l0Y2hfbXNyKHZteCwgTVNSX0lBMzJfWFNTKTsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfVFNDX0FVWDoKLQkJaWYgKCFndWVzdF9jcHVpZF9oYXNfcmR0c2NwKHZjcHUpKQorCQlpZiAoIWd1ZXN0X2NwdWlkX2hhc19yZHRzY3AodmNwdSkgJiYgIW1zcl9pbmZvLT5ob3N0X2luaXRpYXRlZCkKIAkJCXJldHVybiAxOwogCQkvKiBDaGVjayByZXNlcnZlZCBiaXQsIGhpZ2hlciAzMiBiaXRzIHNob3VsZCBiZSB6ZXJvICovCiAJCWlmICgoZGF0YSA+PiAzMikgIT0gMCkKQEAgLTczOTQsMTEgKzczOTQsNiBAQAogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBWTVhfVlBJRF9FWFRFTlRfQUxMX0NPTlRFWFQ6Ci0JCWlmIChnZXRfdm1jczEyKHZjcHUpLT52aXJ0dWFsX3Byb2Nlc3Nvcl9pZCA9PSAwKSB7Ci0JCQluZXN0ZWRfdm14X2ZhaWxWYWxpZCh2Y3B1LAotCQkJCVZNWEVSUl9JTlZBTElEX09QRVJBTkRfVE9fSU5WRVBUX0lOVlZQSUQpOwotCQkJcmV0dXJuIDE7Ci0JCX0KIAkJX192bXhfZmx1c2hfdGxiKHZjcHUsIHRvX3ZteCh2Y3B1KS0+bmVzdGVkLnZwaWQwMik7CiAJCW5lc3RlZF92bXhfc3VjY2VlZCh2Y3B1KTsKIAkJYnJlYWs7CkBAIC04MDQ3LDYgKzgwNDIsOCBAQAogCXUzMiBleGl0X3JlYXNvbiA9IHZteC0+ZXhpdF9yZWFzb247CiAJdTMyIHZlY3RvcmluZ19pbmZvID0gdm14LT5pZHRfdmVjdG9yaW5nX2luZm87CiAKKwl0cmFjZV9rdm1fZXhpdChleGl0X3JlYXNvbiwgdmNwdSwgS1ZNX0lTQV9WTVgpOworCiAJLyoKIAkgKiBGbHVzaCBsb2dnZWQgR1BBcyBQTUwgYnVmZmVyLCB0aGlzIHdpbGwgbWFrZSBkaXJ0eV9iaXRtYXAgbW9yZQogCSAqIHVwZGF0ZWQuIEFub3RoZXIgZ29vZCBpcywgaW4ga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2csIGJlZm9yZQpAQCAtODY3Myw3ICs4NjcwLDYgQEAKIAl2bXgtPmxvYWRlZF92bWNzLT5sYXVuY2hlZCA9IDE7CiAKIAl2bXgtPmV4aXRfcmVhc29uID0gdm1jc19yZWFkMzIoVk1fRVhJVF9SRUFTT04pOwotCXRyYWNlX2t2bV9leGl0KHZteC0+ZXhpdF9yZWFzb24sIHZjcHUsIEtWTV9JU0FfVk1YKTsKIAogCS8qCiAJICogdGhlIEtWTV9SRVFfRVZFTlQgb3B0aW1pemF0aW9uIGJpdCBpcyBvbmx5IG9uIGZvciBvbmUgZW50cnksIGFuZCBpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDAwNDYyYmQuLjdmZmMyMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTI3NjMsNiArMjc2MywyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGt2bV9jcHVfYWNjZXB0X2RtX2ludHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiAoIWxhcGljX2luX2tlcm5lbCh2Y3B1KSB8fAorCQlrdm1fYXBpY19hY2NlcHRfcGljX2ludHIodmNwdSkpOworfQorCisvKgorICogaWYgdXNlcnNwYWNlIHJlcXVlc3RlZCBhbiBpbnRlcnJ1cHQgd2luZG93LCBjaGVjayB0aGF0IHRoZQorICogaW50ZXJydXB0IHdpbmRvdyBpcyBvcGVuLgorICoKKyAqIE5vIG5lZWQgdG8gZXhpdCB0byB1c2Vyc3BhY2UgaWYgd2UgYWxyZWFkeSBoYXZlIGFuIGludGVycnVwdCBxdWV1ZWQuCisgKi8KK3N0YXRpYyBpbnQga3ZtX3ZjcHVfcmVhZHlfZm9yX2ludGVycnVwdF9pbmplY3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZCh2Y3B1KSAmJgorCQkha3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpICYmCisJCSFrdm1fZXZlbnRfbmVlZHNfcmVpbmplY3Rpb24odmNwdSkgJiYKKwkJa3ZtX2NwdV9hY2NlcHRfZG1faW50cih2Y3B1KTsKK30KKwogc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAqaXJxKQogewpAQCAtMjc4Niw2ICsyODA2LDcgQEAKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKIAl2Y3B1LT5hcmNoLnBlbmRpbmdfZXh0ZXJuYWxfdmVjdG9yID0gaXJxLT5pcnE7CisJa3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0VWRU5ULCB2Y3B1KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzU1MSw5ICszNTcyLDExIEBACiAKIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9waXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSAqcHMpCiB7CisJaW50IGk7CiAJbXV0ZXhfbG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAltZW1jcHkoJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUsIHBzLCBzaXplb2Yoc3RydWN0IGt2bV9waXRfc3RhdGUpKTsKLQlrdm1fcGl0X2xvYWRfY291bnQoa3ZtLCAwLCBwcy0+Y2hhbm5lbHNbMF0uY291bnQsIDApOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWt2bV9waXRfbG9hZF9jb3VudChrdm0sIGksIHBzLT5jaGFubmVsc1tpXS5jb3VudCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCXJldHVybiAwOwogfQpAQCAtMzU3Miw2ICszNTk1LDcgQEAKIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9waXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9waXRfc3RhdGUyICpwcykKIHsKIAlpbnQgc3RhcnQgPSAwOworCWludCBpOwogCXUzMiBwcmV2X2xlZ2FjeSwgY3VyX2xlZ2FjeTsKIAltdXRleF9sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCXByZXZfbGVnYWN5ID0ga3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5mbGFncyAmIEtWTV9QSVRfRkxBR1NfSFBFVF9MRUdBQ1k7CkBAIC0zNTgxLDcgKzM2MDUsOCBAQAogCW1lbWNweSgma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5jaGFubmVscywgJnBzLT5jaGFubmVscywKIAkgICAgICAgc2l6ZW9mKGt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuY2hhbm5lbHMpKTsKIAlrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmZsYWdzID0gcHMtPmZsYWdzOwotCWt2bV9waXRfbG9hZF9jb3VudChrdm0sIDAsIGt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuY2hhbm5lbHNbMF0uY291bnQsIHN0YXJ0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlrdm1fcGl0X2xvYWRfY291bnQoa3ZtLCBpLCBrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmNoYW5uZWxzW2ldLmNvdW50LCBzdGFydCk7CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCXJldHVybiAwOwogfQpAQCAtNTkxMCwyMyArNTkzNSwxMCBAQAogCXJldHVybiBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChjdHh0LCByaXAsIGluc3RydWN0aW9uLCAzLCBOVUxMKTsKIH0KIAotLyoKLSAqIENoZWNrIGlmIHVzZXJzcGFjZSByZXF1ZXN0ZWQgYW4gaW50ZXJydXB0IHdpbmRvdywgYW5kIHRoYXQgdGhlCi0gKiBpbnRlcnJ1cHQgd2luZG93IGlzIG9wZW4uCi0gKgotICogTm8gbmVlZCB0byBleGl0IHRvIHVzZXJzcGFjZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW50ZXJydXB0IHF1ZXVlZC4KLSAqLwogc3RhdGljIGludCBkbV9yZXF1ZXN0X2Zvcl9pcnFfaW5qZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAoIXZjcHUtPnJ1bi0+cmVxdWVzdF9pbnRlcnJ1cHRfd2luZG93IHx8IHBpY19pbl9rZXJuZWwodmNwdS0+a3ZtKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIChpcnFjaGlwX3NwbGl0KHZjcHUtPmt2bSkKLQkJPyBrdm1fYXBpY19hY2NlcHRfcGljX2ludHIodmNwdSkKLQkJOiBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZCh2Y3B1KSk7CisJcmV0dXJuIHZjcHUtPnJ1bi0+cmVxdWVzdF9pbnRlcnJ1cHRfd2luZG93ICYmCisJCWxpa2VseSghcGljX2luX2tlcm5lbCh2Y3B1LT5rdm0pKTsKIH0KIAogc3RhdGljIHZvaWQgcG9zdF9rdm1fcnVuX3NhdmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNTkzNywxNyArNTk0OSw5IEBACiAJa3ZtX3J1bi0+ZmxhZ3MgPSBpc19zbW0odmNwdSkgPyBLVk1fUlVOX1g4Nl9TTU0gOiAwOwogCWt2bV9ydW4tPmNyOCA9IGt2bV9nZXRfY3I4KHZjcHUpOwogCWt2bV9ydW4tPmFwaWNfYmFzZSA9IGt2bV9nZXRfYXBpY19iYXNlKHZjcHUpOwotCWlmICghaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkKLQkJa3ZtX3J1bi0+cmVhZHlfZm9yX2ludGVycnVwdF9pbmplY3Rpb24gPQotCQkJa3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWQodmNwdSkgJiYKLQkJCSFrdm1fY3B1X2hhc19pbnRlcnJ1cHQodmNwdSkgJiYKLQkJCSFrdm1fZXZlbnRfbmVlZHNfcmVpbmplY3Rpb24odmNwdSk7Ci0JZWxzZSBpZiAoIXBpY19pbl9rZXJuZWwodmNwdS0+a3ZtKSkKLQkJa3ZtX3J1bi0+cmVhZHlfZm9yX2ludGVycnVwdF9pbmplY3Rpb24gPQotCQkJa3ZtX2FwaWNfYWNjZXB0X3BpY19pbnRyKHZjcHUpICYmCi0JCQkha3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpOwotCWVsc2UKLQkJa3ZtX3J1bi0+cmVhZHlfZm9yX2ludGVycnVwdF9pbmplY3Rpb24gPSAxOworCWt2bV9ydW4tPnJlYWR5X2Zvcl9pbnRlcnJ1cHRfaW5qZWN0aW9uID0KKwkJcGljX2luX2tlcm5lbCh2Y3B1LT5rdm0pIHx8CisJCWt2bV92Y3B1X3JlYWR5X2Zvcl9pbnRlcnJ1cHRfaW5qZWN0aW9uKHZjcHUpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfY3I4X2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC02MzYwLDggKzYzNjQsMTAgQEAKIHN0YXRpYyBpbnQgdmNwdV9lbnRlcl9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJaW50IHI7Ci0JYm9vbCByZXFfaW50X3dpbiA9ICFsYXBpY19pbl9rZXJuZWwodmNwdSkgJiYKLQkJdmNwdS0+cnVuLT5yZXF1ZXN0X2ludGVycnVwdF93aW5kb3c7CisJYm9vbCByZXFfaW50X3dpbiA9CisJCWRtX3JlcXVlc3RfZm9yX2lycV9pbmplY3Rpb24odmNwdSkgJiYKKwkJa3ZtX2NwdV9hY2NlcHRfZG1faW50cih2Y3B1KTsKKwogCWJvb2wgcmVxX2ltbWVkaWF0ZV9leGl0ID0gZmFsc2U7CiAKIAlpZiAodmNwdS0+cmVxdWVzdHMpIHsKQEAgLTY1MTMsNiArNjUxOSw4IEBACiAJaWYgKHJlcV9pbW1lZGlhdGVfZXhpdCkKIAkJc21wX3NlbmRfcmVzY2hlZHVsZSh2Y3B1LT5jcHUpOwogCisJdHJhY2Vfa3ZtX2VudHJ5KHZjcHUtPnZjcHVfaWQpOworCXdhaXRfbGFwaWNfZXhwaXJlKHZjcHUpOwogCV9fa3ZtX2d1ZXN0X2VudGVyKCk7CiAKIAlpZiAodW5saWtlbHkodmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncykpIHsKQEAgLTY1MjUsOCArNjUzMyw2IEBACiAJCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgJj0gfktWTV9ERUJVR1JFR19SRUxPQUQ7CiAJfQogCi0JdHJhY2Vfa3ZtX2VudHJ5KHZjcHUtPnZjcHVfaWQpOwotCXdhaXRfbGFwaWNfZXhwaXJlKHZjcHUpOwogCWt2bV94ODZfb3BzLT5ydW4odmNwdSk7CiAKIAkvKgpAQCAtNjY2Myw3ICs2NjY5LDggQEAKIAkJaWYgKGt2bV9jcHVfaGFzX3BlbmRpbmdfdGltZXIodmNwdSkpCiAJCQlrdm1faW5qZWN0X3BlbmRpbmdfdGltZXJfaXJxcyh2Y3B1KTsKIAotCQlpZiAoZG1fcmVxdWVzdF9mb3JfaXJxX2luamVjdGlvbih2Y3B1KSkgeworCQlpZiAoZG1fcmVxdWVzdF9mb3JfaXJxX2luamVjdGlvbih2Y3B1KSAmJgorCQkJa3ZtX3ZjcHVfcmVhZHlfZm9yX2ludGVycnVwdF9pbmplY3Rpb24odmNwdSkpIHsKIAkJCXIgPSAwOwogCQkJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lSUV9XSU5ET1dfT1BFTjsKIAkJCSsrdmNwdS0+c3RhdC5yZXF1ZXN0X2lycV9leGl0czsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKaW5kZXggYTAzNWMyYS4uMGYxYzZmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKKysrIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAl7IDAvKiBWTUFMTE9DX1NUQVJUICovLCAidm1hbGxvYygpIEFyZWEiIH0sCiAJeyAwLypWTUFMTE9DX0VORCovLCAgICAgInZtYWxsb2MoKSBFbmQiIH0sCiAjIGlmZGVmIENPTkZJR19ISUdITUVNCi0JeyAwLypQS01BUF9CQVNFKi8sICAgICAgIlBlcnNpc2VudCBrbWFwKCkgQXJlYSIgfSwKKwl7IDAvKlBLTUFQX0JBU0UqLywgICAgICAiUGVyc2lzdGVudCBrbWFwKCkgQXJlYSIgfSwKICMgZW5kaWYKIAl7IDAvKkZJWEFERFJfU1RBUlQqLywgICAiRml4bWFwIEFyZWEiIH0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21weC5jIGIvYXJjaC94ODYvbW0vbXB4LmMKaW5kZXggYjBhZTg1Zi4uYjJmZDY3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbXB4LmMKKysrIGIvYXJjaC94ODYvbW0vbXB4LmMKQEAgLTEwMSwxOSArMTAxLDE5IEBACiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBSRUdfVFlQRV9STToKIAkJcmVnbm8gPSBYODZfTU9EUk1fUk0oaW5zbi0+bW9kcm0udmFsdWUpOwotCQlpZiAoWDg2X1JFWF9CKGluc24tPnJleF9wcmVmaXgudmFsdWUpID09IDEpCisJCWlmIChYODZfUkVYX0IoaW5zbi0+cmV4X3ByZWZpeC52YWx1ZSkpCiAJCQlyZWdubyArPSA4OwogCQlicmVhazsKIAogCWNhc2UgUkVHX1RZUEVfSU5ERVg6CiAJCXJlZ25vID0gWDg2X1NJQl9JTkRFWChpbnNuLT5zaWIudmFsdWUpOwotCQlpZiAoWDg2X1JFWF9YKGluc24tPnJleF9wcmVmaXgudmFsdWUpID09IDEpCisJCWlmIChYODZfUkVYX1goaW5zbi0+cmV4X3ByZWZpeC52YWx1ZSkpCiAJCQlyZWdubyArPSA4OwogCQlicmVhazsKIAogCWNhc2UgUkVHX1RZUEVfQkFTRToKIAkJcmVnbm8gPSBYODZfU0lCX0JBU0UoaW5zbi0+c2liLnZhbHVlKTsKLQkJaWYgKFg4Nl9SRVhfQihpbnNuLT5yZXhfcHJlZml4LnZhbHVlKSA9PSAxKQorCQlpZiAoWDg2X1JFWF9CKGluc24tPnJleF9wcmVmaXgudmFsdWUpKQogCQkJcmVnbm8gKz0gODsKIAkJYnJlYWs7CiAKQEAgLTU4Niw2ICs1ODYsMjkgQEAKIH0KIAogLyoKKyAqIFdlIG9ubHkgd2FudCB0byBkbyBhIDQtYnl0ZSBnZXRfdXNlcigpIG9uIDMyLWJpdC4gIE90aGVyd2lzZSwKKyAqIHdlIG1pZ2h0IHJ1biBvZmYgdGhlIGVuZCBvZiB0aGUgYm91bmRzIHRhYmxlIGlmIHdlIGFyZSBvbgorICogYSA2NC1iaXQga2VybmVsIGFuZCB0cnkgdG8gZ2V0IDggYnl0ZXMuCisgKi8KK2ludCBnZXRfdXNlcl9iZF9lbnRyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqYmRfZW50cnlfcmV0LAorCQlsb25nIF9fdXNlciAqYmRfZW50cnlfcHRyKQoreworCXUzMiBiZF9lbnRyeV8zMjsKKwlpbnQgcmV0OworCisJaWYgKGlzXzY0Yml0X21tKG1tKSkKKwkJcmV0dXJuIGdldF91c2VyKCpiZF9lbnRyeV9yZXQsIGJkX2VudHJ5X3B0cik7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBnZXRfdXNlcigpIHVzZXMgdGhlIHR5cGUgb2YgdGhlICpwb2ludGVyKiB0bworCSAqIGVzdGFibGlzaCB0aGUgc2l6ZSBvZiB0aGUgZ2V0LCBub3QgdGhlIGRlc3RpbmF0aW9uLgorCSAqLworCXJldCA9IGdldF91c2VyKGJkX2VudHJ5XzMyLCAodTMyIF9fdXNlciAqKWJkX2VudHJ5X3B0cik7CisJKmJkX2VudHJ5X3JldCA9IGJkX2VudHJ5XzMyOworCXJldHVybiByZXQ7Cit9CisKKy8qCiAgKiBHZXQgdGhlIGJhc2Ugb2YgYm91bmRzIHRhYmxlcyBwb2ludGVkIGJ5IHNwZWNpZmljIGJvdW5kcwogICogZGlyZWN0b3J5IGVudHJ5LgogICovCkBAIC02MDUsNyArNjI4LDcgQEAKIAkJaW50IG5lZWRfd3JpdGUgPSAwOwogCiAJCXBhZ2VmYXVsdF9kaXNhYmxlKCk7Ci0JCXJldCA9IGdldF91c2VyKGJkX2VudHJ5LCBiZF9lbnRyeV9wdHIpOworCQlyZXQgPSBnZXRfdXNlcl9iZF9lbnRyeShtbSwgJmJkX2VudHJ5LCBiZF9lbnRyeV9wdHIpOwogCQlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJCWlmICghcmV0KQogCQkJYnJlYWs7CkBAIC03MDAsMTEgKzcyMywyMyBAQAogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYmRfZW50cnlfdmlydF9zcGFjZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdmlydF9zcGFjZSA9ICgxVUxMIDw8IGJvb3RfY3B1X2RhdGEueDg2X3ZpcnRfYml0cyk7Ci0JaWYgKGlzXzY0Yml0X21tKG1tKSkKLQkJcmV0dXJuIHZpcnRfc3BhY2UgLyBNUFhfQkRfTlJfRU5UUklFU182NDsKLQllbHNlCi0JCXJldHVybiB2aXJ0X3NwYWNlIC8gTVBYX0JEX05SX0VOVFJJRVNfMzI7CisJdW5zaWduZWQgbG9uZyBsb25nIHZpcnRfc3BhY2U7CisJdW5zaWduZWQgbG9uZyBsb25nIEdCID0gKDFVTEwgPDwgMzApOworCisJLyoKKwkgKiBUaGlzIGNvdmVycyAzMi1iaXQgZW11bGF0aW9uIGFzIHdlbGwgYXMgMzItYml0IGtlcm5lbHMKKwkgKiBydW5uaW5nIG9uIDY0LWJpdCBoYXJ3YXJlLgorCSAqLworCWlmICghaXNfNjRiaXRfbW0obW0pKQorCQlyZXR1cm4gKDRVTEwgKiBHQikgLyBNUFhfQkRfTlJfRU5UUklFU18zMjsKKworCS8qCisJICogJ3g4Nl92aXJ0X2JpdHMnIHJldHVybnMgd2hhdCB0aGUgaGFyZHdhcmUgaXMgY2FwYWJsZQorCSAqIG9mLCBhbmQgcmV0dXJucyB0aGUgZnVsbCA+MzItYml0IGFkZGRyZXNzIHNwYWNlIHdoZW4KKwkgKiBydW5uaW5nIDMyLWJpdCBrZXJuZWxzIG9uIDY0LWJpdCBoYXJkd2FyZS4KKwkgKi8KKwl2aXJ0X3NwYWNlID0gKDFVTEwgPDwgYm9vdF9jcHVfZGF0YS54ODZfdmlydF9iaXRzKTsKKwlyZXR1cm4gdmlydF9zcGFjZSAvIE1QWF9CRF9OUl9FTlRSSUVTXzY0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmMgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYwppbmRleCA3YmNmMDZhLi42ZWIzYzhhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYworKysgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYwpAQCAtNTAsMTggKzUwLDkgQEAKIAlpZiAoIWZvdW5kKQogCQlwY2lfYWRkX3Jlc291cmNlKHJlc291cmNlcywgJmluZm8tPmJ1c24pOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyb290X3JlcywgJmluZm8tPnJlc291cmNlcywgbGlzdCkgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQkJc3RydWN0IHJlc291cmNlICpyb290OworCWxpc3RfZm9yX2VhY2hfZW50cnkocm9vdF9yZXMsICZpbmZvLT5yZXNvdXJjZXMsIGxpc3QpCisJCXBjaV9hZGRfcmVzb3VyY2UocmVzb3VyY2VzLCAmcm9vdF9yZXMtPnJlcyk7CiAKLQkJcmVzID0gJnJvb3RfcmVzLT5yZXM7Ci0JCXBjaV9hZGRfcmVzb3VyY2UocmVzb3VyY2VzLCByZXMpOwotCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQlyb290ID0gJmlvcG9ydF9yZXNvdXJjZTsKLQkJZWxzZQotCQkJcm9vdCA9ICZpb21lbV9yZXNvdXJjZTsKLQkJaW5zZXJ0X3Jlc291cmNlKHJvb3QsIHJlcyk7Ci0JfQogCXJldHVybjsKIAogZGVmYXVsdF9yZXNvdXJjZXM6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni91bS9zaWduYWwuYyBiL2FyY2gveDg2L3VtL3NpZ25hbC5jCmluZGV4IDA2OTM0YTguLjE0ZmNkMDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3VtL3NpZ25hbC5jCisrKyBiL2FyY2gveDg2L3VtL3NpZ25hbC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiAxOwogCi0JCWVyciA9IGNvbnZlcnRfZnhzcl9mcm9tX3VzZXIoJmZweCwgc2MuZnBzdGF0ZSk7CisJCWVyciA9IGNvbnZlcnRfZnhzcl9mcm9tX3VzZXIoJmZweCwgKHZvaWQgKilzYy5mcHN0YXRlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiAxOwogCkBAIC0yMjcsNyArMjI3LDcgQEAKIAl7CiAJCXN0cnVjdCB1c2VyX2kzODdfc3RydWN0IGZwOwogCi0JCWVyciA9IGNvcHlfZnJvbV91c2VyKCZmcCwgc2MuZnBzdGF0ZSwKKwkJZXJyID0gY29weV9mcm9tX3VzZXIoJmZwLCAodm9pZCAqKXNjLmZwc3RhdGUsCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QpKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiAxOwpAQCAtMjkxLDcgKzI5MSw3IEBACiAjZW5kaWYKICN1bmRlZiBQVVRSRUcKIAlzYy5vbGRtYXNrID0gbWFzazsKLQlzYy5mcHN0YXRlID0gdG9fZnA7CisJc2MuZnBzdGF0ZSA9ICh1bnNpZ25lZCBsb25nKXRvX2ZwOwogCiAJZXJyID0gY29weV90b191c2VyKHRvLCAmc2MsIHNpemVvZihzdHJ1Y3Qgc2lnY29udGV4dCkpOwogCWlmIChlcnIpCkBAIC00NjgsMTIgKzQ2OCwxMCBAQAogCXN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKmZyYW1lID0gKHN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKikoc3AgLSA4KTsKIAlzaWdzZXRfdCBzZXQ7CiAJc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYyA9ICZmcmFtZS0+c2M7Ci0JdW5zaWduZWQgbG9uZyBfX3VzZXIgKm9sZG1hc2sgPSAmc2MtPm9sZG1hc2s7Ci0JdW5zaWduZWQgbG9uZyBfX3VzZXIgKmV4dHJhbWFzayA9IGZyYW1lLT5leHRyYW1hc2s7CiAJaW50IHNpZ19zaXplID0gKF9OU0lHX1dPUkRTIC0gMSkgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnNldC5zaWdbMF0sIG9sZG1hc2ssIHNpemVvZihzZXQuc2lnWzBdKSkgfHwKLQkgICAgY29weV9mcm9tX3VzZXIoJnNldC5zaWdbMV0sIGV4dHJhbWFzaywgc2lnX3NpemUpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmc2V0LnNpZ1swXSwgJnNjLT5vbGRtYXNrLCBzaXplb2Yoc2V0LnNpZ1swXSkpIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKCZzZXQuc2lnWzFdLCBmcmFtZS0+ZXh0cmFtYXNrLCBzaWdfc2l6ZSkpCiAJCWdvdG8gc2VnZmF1bHQ7CiAKIAlzZXRfY3VycmVudF9ibG9ja2VkKCZzZXQpOwpAQCAtNTA1LDYgKzUwMyw3IEBACiB7CiAJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CiAJaW50IGVyciA9IDAsIHNpZyA9IGtzaWctPnNpZzsKKwl1bnNpZ25lZCBsb25nIGZwX3RvOwogCiAJZnJhbWUgPSAoc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqKQogCQlyb3VuZF9kb3duKHN0YWNrX3RvcCAtIHNpemVvZihzdHJ1Y3QgcnRfc2lnZnJhbWUpLCAxNik7CkBAIC01MjYsNyArNTI1LDEwIEBACiAJZXJyIHw9IF9fc2F2ZV9hbHRzdGFjaygmZnJhbWUtPnVjLnVjX3N0YWNrLCBQVF9SRUdTX1NQKHJlZ3MpKTsKIAllcnIgfD0gY29weV9zY190b191c2VyKCZmcmFtZS0+dWMudWNfbWNvbnRleHQsICZmcmFtZS0+ZnBzdGF0ZSwgcmVncywKIAkJCSAgICAgICBzZXQtPnNpZ1swXSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoJmZyYW1lLT5mcHN0YXRlLCAmZnJhbWUtPnVjLnVjX21jb250ZXh0LmZwc3RhdGUpOworCisJZnBfdG8gPSAodW5zaWduZWQgbG9uZykmZnJhbWUtPmZwc3RhdGU7CisKKwllcnIgfD0gX19wdXRfdXNlcihmcF90bywgJmZyYW1lLT51Yy51Y19tY29udGV4dC5mcHN0YXRlKTsKIAlpZiAoc2l6ZW9mKCpzZXQpID09IDE2KSB7CiAJCWVyciB8PSBfX3B1dF91c2VyKHNldC0+c2lnWzBdLCAmZnJhbWUtPnVjLnVjX3NpZ21hc2suc2lnWzBdKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoc2V0LT5zaWdbMV0sICZmcmFtZS0+dWMudWNfc2lnbWFzay5zaWdbMV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IGFjMTYxZGIuLmNiNWUyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTI0OTUsMTQgKzI0OTUsOSBAQAogewogCXg4Nl9pbml0LnBhZ2luZy5wYWdldGFibGVfaW5pdCA9IHhlbl9wYWdldGFibGVfaW5pdDsKIAotCS8qIE9wdGltaXphdGlvbiAtIHdlIGNhbiB1c2UgdGhlIEhWTSBvbmUgYnV0IGl0IGhhcyBubyBpZGVhIHdoaWNoCi0JICogVkNQVXMgYXJlIGRlc2NoZWR1bGVkIC0gd2hpY2ggbWVhbnMgdGhhdCBpdCB3aWxsIG5lZWRsZXNzbHkgSVBJCi0JICogdGhlbS4gWGVuIGtub3dzIHNvIGxldCBpdCBkbyB0aGUgam9iLgotCSAqLwotCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkgewotCQlwdl9tbXVfb3BzLmZsdXNoX3RsYl9vdGhlcnMgPSB4ZW5fZmx1c2hfdGxiX290aGVyczsKKwlpZiAoeGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpCiAJCXJldHVybjsKLQl9CisKIAlwdl9tbXVfb3BzID0geGVuX21tdV9vcHM7CiAKIAltZW1zZXQoZHVtbXlfbWFwcGluZywgMHhmZiwgUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMgYi9hcmNoL3g4Ni94ZW4vc3VzcGVuZC5jCmluZGV4IGZlZGRhYmQuLmRmMGM0MDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zdXNwZW5kLmMKKysrIGIvYXJjaC94ODYveGVuL3N1c3BlbmQuYwpAQCAtMSw2ICsxLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KIAorI2luY2x1ZGUgPHhlbi94ZW4uaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgogI2luY2x1ZGUgPHhlbi9ncmFudF90YWJsZS5oPgogI2luY2x1ZGUgPHhlbi9ldmVudHMuaD4KQEAgLTY4LDI2ICs2OSwxNiBAQAogCiB2b2lkIHhlbl9hcmNoX3ByZV9zdXNwZW5kKHZvaWQpCiB7Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQl4ZW5fcG11X2ZpbmlzaChjcHUpOwotCiAJaWYgKHhlbl9wdl9kb21haW4oKSkKIAkJeGVuX3B2X3ByZV9zdXNwZW5kKCk7CiB9CiAKIHZvaWQgeGVuX2FyY2hfcG9zdF9zdXNwZW5kKGludCBjYW5jZWxsZWQpCiB7Ci0JaW50IGNwdTsKLQogCWlmICh4ZW5fcHZfZG9tYWluKCkpCiAJCXhlbl9wdl9wb3N0X3N1c3BlbmQoY2FuY2VsbGVkKTsKIAllbHNlCiAJCXhlbl9odm1fcG9zdF9zdXNwZW5kKGNhbmNlbGxlZCk7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJeGVuX3BtdV9pbml0KGNwdSk7CiB9CiAKIHN0YXRpYyB2b2lkIHhlbl92Y3B1X25vdGlmeV9yZXN0b3JlKHZvaWQgKmRhdGEpCkBAIC0xMDYsMTAgKzk3LDIwIEBACiAKIHZvaWQgeGVuX2FyY2hfcmVzdW1lKHZvaWQpCiB7CisJaW50IGNwdTsKKwogCW9uX2VhY2hfY3B1KHhlbl92Y3B1X25vdGlmeV9yZXN0b3JlLCBOVUxMLCAxKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQl4ZW5fcG11X2luaXQoY3B1KTsKIH0KIAogdm9pZCB4ZW5fYXJjaF9zdXNwZW5kKHZvaWQpCiB7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQl4ZW5fcG11X2ZpbmlzaChjcHUpOworCiAJb25fZWFjaF9jcHUoeGVuX3ZjcHVfbm90aWZ5X3N1c3BlbmQsIE5VTEwsIDEpOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IDViY2RmYzEuLjVhMzcxODggMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYworKysgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTExMjcsMTUgKzExMjcsMTUgQEAKICAqIG9mIHRoZSBtYWluIGNpYyBkYXRhIHN0cnVjdHVyZXMuICBGb3Igbm93IHdlIGFsbG93IGEgdGFzayB0byBjaGFuZ2UKICAqIGl0cyBjZ3JvdXAgb25seSBpZiBpdCdzIHRoZSBvbmx5IG93bmVyIG9mIGl0cyBpb2MuCiAgKi8KLXN0YXRpYyBpbnQgYmxrY2dfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAotCQkJICAgIHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKK3N0YXRpYyBpbnQgYmxrY2dfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpkc3RfY3NzOwogCXN0cnVjdCBpb19jb250ZXh0ICppb2M7CiAJaW50IHJldCA9IDA7CiAKIAkvKiB0YXNrX2xvY2soKSBpcyBuZWVkZWQgdG8gYXZvaWQgcmFjZXMgd2l0aCBleGl0X2lvX2NvbnRleHQoKSAqLwotCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoKHRhc2ssIHRzZXQpIHsKKwljZ3JvdXBfdGFza3NldF9mb3JfZWFjaCh0YXNrLCBkc3RfY3NzLCB0c2V0KSB7CiAJCXRhc2tfbG9jayh0YXNrKTsKIAkJaW9jID0gdGFzay0+aW9fY29udGV4dDsKIAkJaWYgKGlvYyAmJiBhdG9taWNfcmVhZCgmaW9jLT5ucl90YXNrcykgPiAxKQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggNTEzMTk5M2IuLjMzZTJmNjIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMjA3LDYgKzIwNywyMiBAQAogRVhQT1JUX1NZTUJPTChibGtfZGVsYXlfcXVldWUpOwogCiAvKioKKyAqIGJsa19zdGFydF9xdWV1ZV9hc3luYyAtIGFzeW5jaHJvbm91c2x5IHJlc3RhcnQgYSBwcmV2aW91c2x5IHN0b3BwZWQgcXVldWUKKyAqIEBxOiAgICBUaGUgJnN0cnVjdCByZXF1ZXN0X3F1ZXVlIGluIHF1ZXN0aW9uCisgKgorICogRGVzY3JpcHRpb246CisgKiAgIGJsa19zdGFydF9xdWV1ZV9hc3luYygpIHdpbGwgY2xlYXIgdGhlIHN0b3AgZmxhZyBvbiB0aGUgcXVldWUsIGFuZAorICogICBlbnN1cmUgdGhhdCB0aGUgcmVxdWVzdF9mbiBmb3IgdGhlIHF1ZXVlIGlzIHJ1biBmcm9tIGFuIGFzeW5jCisgKiAgIGNvbnRleHQuCisgKiovCit2b2lkIGJsa19zdGFydF9xdWV1ZV9hc3luYyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfU1RPUFBFRCwgcSk7CisJYmxrX3J1bl9xdWV1ZV9hc3luYyhxKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX3N0YXJ0X3F1ZXVlX2FzeW5jKTsKKworLyoqCiAgKiBibGtfc3RhcnRfcXVldWUgLSByZXN0YXJ0IGEgcHJldmlvdXNseSBzdG9wcGVkIHF1ZXVlCiAgKiBAcTogICAgVGhlICZzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSBpbiBxdWVzdGlvbgogICoKQEAgLTE2ODksOCArMTcwNSw2IEBACiAJc3RydWN0IHJlcXVlc3QgKnJlcTsKIAl1bnNpZ25lZCBpbnQgcmVxdWVzdF9jb3VudCA9IDA7CiAKLQlibGtfcXVldWVfc3BsaXQocSwgJmJpbywgcS0+YmlvX3NwbGl0KTsKLQogCS8qCiAJICogbG93IGxldmVsIGRyaXZlciBjYW4gaW5kaWNhdGUgdGhhdCBpdCB3YW50cyBwYWdlcyBhYm92ZSBhCiAJICogY2VydGFpbiBsaW1pdCBib3VuY2VkIHRvIGxvdyBtZW1vcnkgKGllIGZvciBoaWdobWVtLCBvciBldmVuCkBAIC0xNjk4LDYgKzE3MTIsOCBAQAogCSAqLwogCWJsa19xdWV1ZV9ib3VuY2UocSwgJmJpbyk7CiAKKwlibGtfcXVldWVfc3BsaXQocSwgJmJpbywgcS0+YmlvX3NwbGl0KTsKKwogCWlmIChiaW9faW50ZWdyaXR5X2VuYWJsZWQoYmlvKSAmJiBiaW9faW50ZWdyaXR5X3ByZXAoYmlvKSkgewogCQliaW8tPmJpX2Vycm9yID0gLUVJTzsKIAkJYmlvX2VuZGlvKGJpbyk7CkBAIC0yMTE0LDcgKzIxMzAsOCBAQAogRVhQT1JUX1NZTUJPTChzdWJtaXRfYmlvKTsKIAogLyoqCi0gKiBibGtfcnFfY2hlY2tfbGltaXRzIC0gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGEgcmVxdWVzdCBmb3IgdGhlIHF1ZXVlIGxpbWl0CisgKiBibGtfY2xvbmVkX3JxX2NoZWNrX2xpbWl0cyAtIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBhIGNsb25lZCByZXF1ZXN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuZXcgdGhlIHF1ZXVlIGxpbWl0cwogICogQHE6ICB0aGUgcXVldWUKICAqIEBycTogdGhlIHJlcXVlc3QgYmVpbmcgY2hlY2tlZAogICoKQEAgLTIxMjUsMjAgKzIxNDIsMTMgQEAKICAqICAgIGFmdGVyIGl0IGlzIGluc2VydGVkIHRvIEBxLCBpdCBzaG91bGQgYmUgY2hlY2tlZCBhZ2FpbnN0IEBxIGJlZm9yZQogICogICAgdGhlIGluc2VydGlvbiB1c2luZyB0aGlzIGdlbmVyaWMgZnVuY3Rpb24uCiAgKgotICogICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYWxzbyBiZSB1c2VmdWwgZm9yIHJlcXVlc3Qgc3RhY2tpbmcgZHJpdmVycwotICogICAgaW4gc29tZSBjYXNlcyBiZWxvdywgc28gZXhwb3J0IHRoaXMgZnVuY3Rpb24uCiAgKiAgICBSZXF1ZXN0IHN0YWNraW5nIGRyaXZlcnMgbGlrZSByZXF1ZXN0LWJhc2VkIGRtIG1heSBjaGFuZ2UgdGhlIHF1ZXVlCi0gKiAgICBsaW1pdHMgd2hpbGUgcmVxdWVzdHMgYXJlIGluIHRoZSBxdWV1ZSAoZS5nLiBkbSdzIHRhYmxlIHN3YXBwaW5nKS4KLSAqICAgIFN1Y2ggcmVxdWVzdCBzdGFja2luZyBkcml2ZXJzIHNob3VsZCBjaGVjayB0aG9zZSByZXF1ZXN0cyBhZ2FpbnN0Ci0gKiAgICB0aGUgbmV3IHF1ZXVlIGxpbWl0cyBhZ2FpbiB3aGVuIHRoZXkgZGlzcGF0Y2ggdGhvc2UgcmVxdWVzdHMsCi0gKiAgICBhbHRob3VnaCBzdWNoIGNoZWNraW5ncyBhcmUgYWxzbyBkb25lIGFnYWluc3QgdGhlIG9sZCBxdWV1ZSBsaW1pdHMKLSAqICAgIHdoZW4gc3VibWl0dGluZyByZXF1ZXN0cy4KKyAqICAgIGxpbWl0cyB3aGVuIHJldHJ5aW5nIHJlcXVlc3RzIG9uIG90aGVyIHF1ZXVlcy4gVGhvc2UgcmVxdWVzdHMgbmVlZAorICogICAgdG8gYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBuZXcgcXVldWUgbGltaXRzIGFnYWluIGR1cmluZyBkaXNwYXRjaC4KICAqLwotaW50IGJsa19ycV9jaGVja19saW1pdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyBpbnQgYmxrX2Nsb25lZF9ycV9jaGVja19saW1pdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgICAgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlmICghcnFfbWVyZ2VhYmxlKHJxKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoYmxrX3JxX3NlY3RvcnMocnEpID4gYmxrX3F1ZXVlX2dldF9tYXhfc2VjdG9ycyhxLCBycS0+Y21kX2ZsYWdzKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvdmVyIG1heCBzaXplIGxpbWl0LlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTzsKQEAgLTIxNTgsNyArMjE2OCw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsa19ycV9jaGVja19saW1pdHMpOwogCiAvKioKICAqIGJsa19pbnNlcnRfY2xvbmVkX3JlcXVlc3QgLSBIZWxwZXIgZm9yIHN0YWNraW5nIGRyaXZlcnMgdG8gc3VibWl0IGEgcmVxdWVzdApAQCAtMjE3MCw3ICsyMTc5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB3aGVyZSA9IEVMRVZBVE9SX0lOU0VSVF9CQUNLOwogCi0JaWYgKGJsa19ycV9jaGVja19saW1pdHMocSwgcnEpKQorCWlmIChibGtfY2xvbmVkX3JxX2NoZWNrX2xpbWl0cyhxLCBycSkpCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKHJxLT5ycV9kaXNrICYmCkBAIC0zNDEyLDYgKzM0MjEsOSBAQAogewogCWludCByZXQgPSAwOwogCisJaWYgKCFxLT5kZXYpCisJCXJldHVybiByZXQ7CisKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCWlmIChxLT5ucl9wZW5kaW5nKSB7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTM0MzksNiArMzQ1MSw5IEBACiAgKi8KIHZvaWQgYmxrX3Bvc3RfcnVudGltZV9zdXNwZW5kKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgZXJyKQogeworCWlmICghcS0+ZGV2KQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCWlmICghZXJyKSB7CiAJCXEtPnJwbV9zdGF0dXMgPSBSUE1fU1VTUEVOREVEOwpAQCAtMzQ2Myw2ICszNDc4LDkgQEAKICAqLwogdm9pZCBibGtfcHJlX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogeworCWlmICghcS0+ZGV2KQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCXEtPnJwbV9zdGF0dXMgPSBSUE1fUkVTVU1JTkc7CiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwpAQCAtMzQ4NSw2ICszNTAzLDkgQEAKICAqLwogdm9pZCBibGtfcG9zdF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IGVycikKIHsKKwlpZiAoIXEtPmRldikKKwkJcmV0dXJuOworCiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAlpZiAoIWVycikgewogCQlxLT5ycG1fc3RhdHVzID0gUlBNX0FDVElWRTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tZXJnZS5jIGIvYmxvY2svYmxrLW1lcmdlLmMKaW5kZXggZGU1NzE2ZDguLmU3Mzg0NmEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tZXJnZS5jCisrKyBiL2Jsb2NrL2Jsay1tZXJnZS5jCkBAIC03Niw5ICs3NiwxMiBAQAogCXN0cnVjdCBiaW9fdmVjIGJ2LCBidnBydiwgKmJ2cHJ2cCA9IE5VTEw7CiAJc3RydWN0IGJ2ZWNfaXRlciBpdGVyOwogCXVuc2lnbmVkIHNlZ19zaXplID0gMCwgbnNlZ3MgPSAwLCBzZWN0b3JzID0gMDsKKwl1bnNpZ25lZCBmcm9udF9zZWdfc2l6ZSA9IGJpby0+Ymlfc2VnX2Zyb250X3NpemU7CisJYm9vbCBkb19zcGxpdCA9IHRydWU7CisJc3RydWN0IGJpbyAqbmV3ID0gTlVMTDsKIAogCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGl0ZXIpIHsKLQkJaWYgKHNlY3RvcnMgKyAoYnYuYnZfbGVuID4+IDkpID4gcXVldWVfbWF4X3NlY3RvcnMocSkpCisJCWlmIChzZWN0b3JzICsgKGJ2LmJ2X2xlbiA+PiA5KSA+IGJsa19tYXhfc2l6ZV9vZmZzZXQocSwgYmlvLT5iaV9pdGVyLmJpX3NlY3RvcikpCiAJCQlnb3RvIHNwbGl0OwogCiAJCS8qCkBAIC05OCw4ICsxMDEsMTEgQEAKIAogCQkJc2VnX3NpemUgKz0gYnYuYnZfbGVuOwogCQkJYnZwcnYgPSBidjsKLQkJCWJ2cHJ2cCA9ICZidjsKKwkJCWJ2cHJ2cCA9ICZidnBydjsKIAkJCXNlY3RvcnMgKz0gYnYuYnZfbGVuID4+IDk7CisKKwkJCWlmIChuc2VncyA9PSAxICYmIHNlZ19zaXplID4gZnJvbnRfc2VnX3NpemUpCisJCQkJZnJvbnRfc2VnX3NpemUgPSBzZWdfc2l6ZTsKIAkJCWNvbnRpbnVlOwogCQl9CiBuZXdfc2VnbWVudDoKQEAgLTEwOCwxNiArMTE0LDI5IEBACiAKIAkJbnNlZ3MrKzsKIAkJYnZwcnYgPSBidjsKLQkJYnZwcnZwID0gJmJ2OworCQlidnBydnAgPSAmYnZwcnY7CiAJCXNlZ19zaXplID0gYnYuYnZfbGVuOwogCQlzZWN0b3JzICs9IGJ2LmJ2X2xlbiA+PiA5OworCisJCWlmIChuc2VncyA9PSAxICYmIHNlZ19zaXplID4gZnJvbnRfc2VnX3NpemUpCisJCQlmcm9udF9zZWdfc2l6ZSA9IHNlZ19zaXplOwogCX0KIAotCSpzZWdzID0gbnNlZ3M7Ci0JcmV0dXJuIE5VTEw7CisJZG9fc3BsaXQgPSBmYWxzZTsKIHNwbGl0OgogCSpzZWdzID0gbnNlZ3M7Ci0JcmV0dXJuIGJpb19zcGxpdChiaW8sIHNlY3RvcnMsIEdGUF9OT0lPLCBicyk7CisKKwlpZiAoZG9fc3BsaXQpIHsKKwkJbmV3ID0gYmlvX3NwbGl0KGJpbywgc2VjdG9ycywgR0ZQX05PSU8sIGJzKTsKKwkJaWYgKG5ldykKKwkJCWJpbyA9IG5ldzsKKwl9CisKKwliaW8tPmJpX3NlZ19mcm9udF9zaXplID0gZnJvbnRfc2VnX3NpemU7CisJaWYgKHNlZ19zaXplID4gYmlvLT5iaV9zZWdfYmFja19zaXplKQorCQliaW8tPmJpX3NlZ19iYWNrX3NpemUgPSBzZWdfc2l6ZTsKKworCXJldHVybiBkb19zcGxpdCA/IG5ldyA6IE5VTEw7CiB9CiAKIHZvaWQgYmxrX3F1ZXVlX3NwbGl0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICoqYmlvLApAQCAtNDEyLDYgKzQzMSwxMiBAQAogCWlmIChzZykKIAkJc2dfbWFya19lbmQoc2cpOwogCisJLyoKKwkgKiBTb21ldGhpbmcgbXVzdCBoYXZlIGJlZW4gd3JvbmcgaWYgdGhlIGZpZ3VyZWQgbnVtYmVyIG9mCisJICogc2VnbWVudCBpcyBiaWdnZXIgdGhhbiBudW1iZXIgb2YgcmVxJ3MgcGh5c2ljYWwgc2VnbWVudHMKKwkgKi8KKwlXQVJOX09OKG5zZWdzID4gcnEtPm5yX3BoeXNfc2VnbWVudHMpOworCiAJcmV0dXJuIG5zZWdzOwogfQogRVhQT1JUX1NZTUJPTChibGtfcnFfbWFwX3NnKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS5jIGIvYmxvY2svYmxrLW1xLmMKaW5kZXggM2FlMDlkZS4uNmQ2ZjhmZSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLmMKKysrIGIvYmxvY2svYmxrLW1xLmMKQEAgLTEyOTEsMTUgKzEyOTEsMTYgQEAKIAkJYmxrX21xX2Jpb190b19yZXF1ZXN0KHJxLCBiaW8pOwogCiAJCS8qCi0JCSAqIHdlIGRvIGxpbWl0ZWQgcGx1Z2luZy4gSWYgYmlvIGNhbiBiZSBtZXJnZWQsIGRvIG1lcmdlLgorCQkgKiBXZSBkbyBsaW1pdGVkIHBsdWdpbmcuIElmIHRoZSBiaW8gY2FuIGJlIG1lcmdlZCwgZG8gdGhhdC4KIAkJICogT3RoZXJ3aXNlIHRoZSBleGlzdGluZyByZXF1ZXN0IGluIHRoZSBwbHVnIGxpc3Qgd2lsbCBiZQogCQkgKiBpc3N1ZWQuIFNvIHRoZSBwbHVnIGxpc3Qgd2lsbCBoYXZlIG9uZSByZXF1ZXN0IGF0IG1vc3QKIAkJICovCiAJCWlmIChwbHVnKSB7CiAJCQkvKgogCQkJICogVGhlIHBsdWcgbGlzdCBtaWdodCBnZXQgZmx1c2hlZCBiZWZvcmUgdGhpcy4gSWYgdGhhdAotCQkJICogaGFwcGVucywgc2FtZV9xdWV1ZV9ycSBpcyBpbnZhbGlkIGFuZCBwbHVnIGxpc3QgaXMgZW1wdHkKLQkJCSAqKi8KKwkJCSAqIGhhcHBlbnMsIHNhbWVfcXVldWVfcnEgaXMgaW52YWxpZCBhbmQgcGx1ZyBsaXN0IGlzCisJCQkgKiBlbXB0eQorCQkJICovCiAJCQlpZiAoc2FtZV9xdWV1ZV9ycSAmJiAhbGlzdF9lbXB0eSgmcGx1Zy0+bXFfbGlzdCkpIHsKIAkJCQlvbGRfcnEgPSBzYW1lX3F1ZXVlX3JxOwogCQkJCWxpc3RfZGVsX2luaXQoJm9sZF9ycS0+cXVldWVsaXN0KTsKQEAgLTEzODAsMTIgKzEzODEsMTUgQEAKIAkJYmxrX21xX2Jpb190b19yZXF1ZXN0KHJxLCBiaW8pOwogCQlpZiAoIXJlcXVlc3RfY291bnQpCiAJCQl0cmFjZV9ibG9ja19wbHVnKHEpOwotCQllbHNlIGlmIChyZXF1ZXN0X2NvdW50ID49IEJMS19NQVhfUkVRVUVTVF9DT1VOVCkgeworCisJCWJsa19tcV9wdXRfY3R4KGRhdGEuY3R4KTsKKworCQlpZiAocmVxdWVzdF9jb3VudCA+PSBCTEtfTUFYX1JFUVVFU1RfQ09VTlQpIHsKIAkJCWJsa19mbHVzaF9wbHVnX2xpc3QocGx1ZywgZmFsc2UpOwogCQkJdHJhY2VfYmxvY2tfcGx1ZyhxKTsKIAkJfQorCiAJCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsICZwbHVnLT5tcV9saXN0KTsKLQkJYmxrX21xX3B1dF9jdHgoZGF0YS5jdHgpOwogCQlyZXR1cm4gY29va2llOwogCX0KIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCA3ZDhmMTI5Li5kZDQ5NzM1IDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtOTEsNyArOTEsOCBAQAogCWxpbS0+c2VnX2JvdW5kYXJ5X21hc2sgPSBCTEtfU0VHX0JPVU5EQVJZX01BU0s7CiAJbGltLT52aXJ0X2JvdW5kYXJ5X21hc2sgPSAwOwogCWxpbS0+bWF4X3NlZ21lbnRfc2l6ZSA9IEJMS19NQVhfU0VHTUVOVF9TSVpFOwotCWxpbS0+bWF4X3NlY3RvcnMgPSBsaW0tPm1heF9od19zZWN0b3JzID0gQkxLX1NBRkVfTUFYX1NFQ1RPUlM7CisJbGltLT5tYXhfc2VjdG9ycyA9IGxpbS0+bWF4X2Rldl9zZWN0b3JzID0gbGltLT5tYXhfaHdfc2VjdG9ycyA9CisJCUJMS19TQUZFX01BWF9TRUNUT1JTOwogCWxpbS0+Y2h1bmtfc2VjdG9ycyA9IDA7CiAJbGltLT5tYXhfd3JpdGVfc2FtZV9zZWN0b3JzID0gMDsKIAlsaW0tPm1heF9kaXNjYXJkX3NlY3RvcnMgPSAwOwpAQCAtMTI3LDYgKzEyOCw3IEBACiAJbGltLT5tYXhfaHdfc2VjdG9ycyA9IFVJTlRfTUFYOwogCWxpbS0+bWF4X3NlZ21lbnRfc2l6ZSA9IFVJTlRfTUFYOwogCWxpbS0+bWF4X3NlY3RvcnMgPSBVSU5UX01BWDsKKwlsaW0tPm1heF9kZXZfc2VjdG9ycyA9IFVJTlRfTUFYOwogCWxpbS0+bWF4X3dyaXRlX3NhbWVfc2VjdG9ycyA9IFVJTlRfTUFYOwogfQogRVhQT1JUX1NZTUJPTChibGtfc2V0X3N0YWNraW5nX2xpbWl0cyk7CkBAIC0yMTQsOCArMjE2LDggQEAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX2JvdW5jZV9saW1pdCk7CiAKIC8qKgotICogYmxrX2xpbWl0c19tYXhfaHdfc2VjdG9ycyAtIHNldCBoYXJkIGFuZCBzb2Z0IGxpbWl0IG9mIG1heCBzZWN0b3JzIGZvciByZXF1ZXN0Ci0gKiBAbGltaXRzOiB0aGUgcXVldWUgbGltaXRzCisgKiBibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMgLSBzZXQgbWF4IHNlY3RvcnMgZm9yIGEgcmVxdWVzdCBmb3IgdGhpcyBxdWV1ZQorICogQHE6ICB0aGUgcmVxdWVzdCBxdWV1ZSBmb3IgdGhlIGRldmljZQogICogQG1heF9od19zZWN0b3JzOiAgbWF4IGhhcmR3YXJlIHNlY3RvcnMgaW4gdGhlIHVzdWFsIDUxMmIgdW5pdAogICoKICAqIERlc2NyaXB0aW9uOgpAQCAtMjI0LDEzICsyMjYsMTkgQEAKICAqICAgIHRoZSBkZXZpY2UgZHJpdmVyIGJhc2VkIHVwb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgSS9PCiAgKiAgICBjb250cm9sbGVyLgogICoKKyAqICAgIG1heF9kZXZfc2VjdG9ycyBpcyBhIGhhcmQgbGltaXQgaW1wb3NlZCBieSB0aGUgc3RvcmFnZSBkZXZpY2UgZm9yCisgKiAgICBSRUFEL1dSSVRFIHJlcXVlc3RzLiBJdCBpcyBzZXQgYnkgdGhlIGRpc2sgZHJpdmVyLgorICoKICAqICAgIG1heF9zZWN0b3JzIGlzIGEgc29mdCBsaW1pdCBpbXBvc2VkIGJ5IHRoZSBibG9jayBsYXllciBmb3IKICAqICAgIGZpbGVzeXN0ZW0gdHlwZSByZXF1ZXN0cy4gIFRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gb24gYQogICogICAgcGVyLWRldmljZSBiYXNpcyBpbiAvc3lzL2Jsb2NrLzxkZXZpY2U+L3F1ZXVlL21heF9zZWN0b3JzX2tiLgogICogICAgVGhlIHNvZnQgbGltaXQgY2FuIG5vdCBleGNlZWQgbWF4X2h3X3NlY3RvcnMuCiAgKiovCi12b2lkIGJsa19saW1pdHNfbWF4X2h3X3NlY3RvcnMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltaXRzLCB1bnNpZ25lZCBpbnQgbWF4X2h3X3NlY3RvcnMpCit2b2lkIGJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IG1heF9od19zZWN0b3JzKQogeworCXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cyA9ICZxLT5saW1pdHM7CisJdW5zaWduZWQgaW50IG1heF9zZWN0b3JzOworCiAJaWYgKChtYXhfaHdfc2VjdG9ycyA8PCA5KSA8IFBBR0VfQ0FDSEVfU0laRSkgewogCQltYXhfaHdfc2VjdG9ycyA9IDEgPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSA5KTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNldCB0byBtaW5pbXVtICVkXG4iLApAQCAtMjM4LDIyICsyNDYsOSBAQAogCX0KIAogCWxpbWl0cy0+bWF4X2h3X3NlY3RvcnMgPSBtYXhfaHdfc2VjdG9yczsKLQlsaW1pdHMtPm1heF9zZWN0b3JzID0gbWluX3QodW5zaWduZWQgaW50LCBtYXhfaHdfc2VjdG9ycywKLQkJCQkgICAgQkxLX0RFRl9NQVhfU0VDVE9SUyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGJsa19saW1pdHNfbWF4X2h3X3NlY3RvcnMpOwotCi0vKioKLSAqIGJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyAtIHNldCBtYXggc2VjdG9ycyBmb3IgYSByZXF1ZXN0IGZvciB0aGlzIHF1ZXVlCi0gKiBAcTogIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCi0gKiBAbWF4X2h3X3NlY3RvcnM6ICBtYXggaGFyZHdhcmUgc2VjdG9ycyBpbiB0aGUgdXN1YWwgNTEyYiB1bml0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICBTZWUgZGVzY3JpcHRpb24gZm9yIGJsa19saW1pdHNfbWF4X2h3X3NlY3RvcnMoKS4KLSAqKi8KLXZvaWQgYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgbWF4X2h3X3NlY3RvcnMpCi17Ci0JYmxrX2xpbWl0c19tYXhfaHdfc2VjdG9ycygmcS0+bGltaXRzLCBtYXhfaHdfc2VjdG9ycyk7CisJbWF4X3NlY3RvcnMgPSBtaW5fbm90X3plcm8obWF4X2h3X3NlY3RvcnMsIGxpbWl0cy0+bWF4X2Rldl9zZWN0b3JzKTsKKwltYXhfc2VjdG9ycyA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X3NlY3RvcnMsIEJMS19ERUZfTUFYX1NFQ1RPUlMpOworCWxpbWl0cy0+bWF4X3NlY3RvcnMgPSBtYXhfc2VjdG9yczsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKTsKIApAQCAtNTI3LDYgKzUyMiw3IEBACiAKIAl0LT5tYXhfc2VjdG9ycyA9IG1pbl9ub3RfemVybyh0LT5tYXhfc2VjdG9ycywgYi0+bWF4X3NlY3RvcnMpOwogCXQtPm1heF9od19zZWN0b3JzID0gbWluX25vdF96ZXJvKHQtPm1heF9od19zZWN0b3JzLCBiLT5tYXhfaHdfc2VjdG9ycyk7CisJdC0+bWF4X2Rldl9zZWN0b3JzID0gbWluX25vdF96ZXJvKHQtPm1heF9kZXZfc2VjdG9ycywgYi0+bWF4X2Rldl9zZWN0b3JzKTsKIAl0LT5tYXhfd3JpdGVfc2FtZV9zZWN0b3JzID0gbWluKHQtPm1heF93cml0ZV9zYW1lX3NlY3RvcnMsCiAJCQkJCWItPm1heF93cml0ZV9zYW1lX3NlY3RvcnMpOwogCXQtPmJvdW5jZV9wZm4gPSBtaW5fbm90X3plcm8odC0+Ym91bmNlX3BmbiwgYi0+Ym91bmNlX3Bmbik7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstc3lzZnMuYyBiL2Jsb2NrL2Jsay1zeXNmcy5jCmluZGV4IDU2NWI4ZGEuLmUxNDBjYzQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zeXNmcy5jCisrKyBiL2Jsb2NrL2Jsay1zeXNmcy5jCkBAIC0yMDUsNiArMjA1LDkgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCW1heF9od19zZWN0b3JzX2tiID0gbWluX25vdF96ZXJvKG1heF9od19zZWN0b3JzX2tiLCAodW5zaWduZWQgbG9uZykKKwkJCQkJIHEtPmxpbWl0cy5tYXhfZGV2X3NlY3RvcnMgPj4gMSk7CisKIAlpZiAobWF4X3NlY3RvcnNfa2IgPiBtYXhfaHdfc2VjdG9yc19rYiB8fCBtYXhfc2VjdG9yc19rYiA8IHBhZ2Vfa2IpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGltZW91dC5jIGIvYmxvY2svYmxrLXRpbWVvdXQuYwppbmRleCAyNDZkZmIxLi5hYTQwYWE5IDEwMDY0NAotLS0gYS9ibG9jay9ibGstdGltZW91dC5jCisrKyBiL2Jsb2NrL2Jsay10aW1lb3V0LmMKQEAgLTE1OCwxMSArMTU4LDEzIEBACiB7CiAJaWYgKGJsa19tYXJrX3JxX2NvbXBsZXRlKHJlcSkpCiAJCXJldHVybjsKLQlibGtfZGVsZXRlX3RpbWVyKHJlcSk7Ci0JaWYgKHJlcS0+cS0+bXFfb3BzKQorCisJaWYgKHJlcS0+cS0+bXFfb3BzKSB7CiAJCWJsa19tcV9ycV90aW1lZF9vdXQocmVxLCBmYWxzZSk7Ci0JZWxzZQorCX0gZWxzZSB7CisJCWJsa19kZWxldGVfdGltZXIocmVxKTsKIAkJYmxrX3JxX3RpbWVkX291dChyZXEpOworCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJsa19hYm9ydF9yZXF1ZXN0KTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCBkYTcyMmViLi5jNDM5MjZkIDEwMDY0NAotLS0gYS9ibG9jay9ibGsuaAorKysgYi9ibG9jay9ibGsuaApAQCAtNzIsOCArNzIsNiBAQAogdm9pZCBfX2Jsa19xdWV1ZV9mcmVlX3RhZ3Moc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogYm9vbCBfX2Jsa19lbmRfYmlkaV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yLAogCQkJICAgIHVuc2lnbmVkIGludCBucl9ieXRlcywgdW5zaWduZWQgaW50IGJpZGlfYnl0ZXMpOwotaW50IGJsa19xdWV1ZV9lbnRlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgZ2ZwX3QgZ2ZwKTsKLXZvaWQgYmxrX3F1ZXVlX2V4aXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogdm9pZCBibGtfZnJlZXplX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGJsa19xdWV1ZV9lbnRlcl9saXZlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQpkaWZmIC0tZ2l0IGEvYmxvY2svbm9vcC1pb3NjaGVkLmMgYi9ibG9jay9ub29wLWlvc2NoZWQuYwppbmRleCAzZGU4OWQ0Li5hMTYzYzQ4IDEwMDY0NAotLS0gYS9ibG9jay9ub29wLWlvc2NoZWQuYworKysgYi9ibG9jay9ub29wLWlvc2NoZWQuYwpAQCAtMjEsMTAgKzIxLDEwIEBACiBzdGF0aWMgaW50IG5vb3BfZGlzcGF0Y2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBmb3JjZSkKIHsKIAlzdHJ1Y3Qgbm9vcF9kYXRhICpuZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOworCXN0cnVjdCByZXF1ZXN0ICpycTsKIAotCWlmICghbGlzdF9lbXB0eSgmbmQtPnF1ZXVlKSkgewotCQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JCXJxID0gbGlzdF9lbnRyeShuZC0+cXVldWUubmV4dCwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCk7CisJcnEgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJm5kLT5xdWV1ZSwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCk7CisJaWYgKHJxKSB7CiAJCWxpc3RfZGVsX2luaXQoJnJxLT5xdWV1ZWxpc3QpOwogCQllbHZfZGlzcGF0Y2hfc29ydChxLCBycSk7CiAJCXJldHVybiAxOwpAQCAtNDYsNyArNDYsNyBAQAogCiAJaWYgKHJxLT5xdWV1ZWxpc3QucHJldiA9PSAmbmQtPnF1ZXVlKQogCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gbGlzdF9lbnRyeShycS0+cXVldWVsaXN0LnByZXYsIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpOworCXJldHVybiBsaXN0X3ByZXZfZW50cnkocnEsIHF1ZXVlbGlzdCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqCkBAIC01Niw3ICs1Niw3IEBACiAKIAlpZiAocnEtPnF1ZXVlbGlzdC5uZXh0ID09ICZuZC0+cXVldWUpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiBsaXN0X2VudHJ5KHJxLT5xdWV1ZWxpc3QubmV4dCwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCk7CisJcmV0dXJuIGxpc3RfbmV4dF9lbnRyeShycSwgcXVldWVsaXN0KTsKIH0KIAogc3RhdGljIGludCBub29wX2luaXRfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl90eXBlICplKQpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9uLWdlbmVyaWMuYyBiL2Jsb2NrL3BhcnRpdGlvbi1nZW5lcmljLmMKaW5kZXggM2IwMzAxNS4uNzQ2OTM1YSAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9uLWdlbmVyaWMuYworKysgYi9ibG9jay9wYXJ0aXRpb24tZ2VuZXJpYy5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAlzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0OwogCWludCByZXM7CiAKLQlpZiAoYmRldi0+YmRfcGFydF9jb3VudCkKKwlpZiAoYmRldi0+YmRfcGFydF9jb3VudCB8fCBiZGV2LT5iZF9zdXBlcikKIAkJcmV0dXJuIC1FQlVTWTsKIAlyZXMgPSBpbnZhbGlkYXRlX3BhcnRpdGlvbihkaXNrLCAwKTsKIAlpZiAocmVzKQpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9tYWMuYyBiL2Jsb2NrL3BhcnRpdGlvbnMvbWFjLmMKaW5kZXggYzJjNDhlYy4uNjIxMzE3YSAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9ucy9tYWMuYworKysgYi9ibG9jay9wYXJ0aXRpb25zL21hYy5jCkBAIC0zMiw3ICszMiw3IEBACiAJU2VjdG9yIHNlY3Q7CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKIAlpbnQgc2xvdCwgYmxvY2tzX2luX21hcDsKLQl1bnNpZ25lZCBzZWNzaXplOworCXVuc2lnbmVkIHNlY3NpemUsIGRhdGFzaXplLCBwYXJ0b2Zmc2V0OwogI2lmZGVmIENPTkZJR19QUENfUE1BQwogCWludCBmb3VuZF9yb290ID0gMDsKIAlpbnQgZm91bmRfcm9vdF9nb29kbmVzcyA9IDA7CkBAIC01MCwxMCArNTAsMTQgQEAKIAl9CiAJc2Vjc2l6ZSA9IGJlMTZfdG9fY3B1KG1kLT5ibG9ja19zaXplKTsKIAlwdXRfZGV2X3NlY3RvcihzZWN0KTsKLQlkYXRhID0gcmVhZF9wYXJ0X3NlY3RvcihzdGF0ZSwgc2Vjc2l6ZS81MTIsICZzZWN0KTsKKwlkYXRhc2l6ZSA9IHJvdW5kX2Rvd24oc2Vjc2l6ZSwgNTEyKTsKKwlkYXRhID0gcmVhZF9wYXJ0X3NlY3RvcihzdGF0ZSwgZGF0YXNpemUgLyA1MTIsICZzZWN0KTsKIAlpZiAoIWRhdGEpCiAJCXJldHVybiAtMTsKLQlwYXJ0ID0gKHN0cnVjdCBtYWNfcGFydGl0aW9uICopIChkYXRhICsgc2Vjc2l6ZSU1MTIpOworCXBhcnRvZmZzZXQgPSBzZWNzaXplICUgNTEyOworCWlmIChwYXJ0b2Zmc2V0ICsgc2l6ZW9mKCpwYXJ0KSA+IGRhdGFzaXplKQorCQlyZXR1cm4gLTE7CisJcGFydCA9IChzdHJ1Y3QgbWFjX3BhcnRpdGlvbiAqKSAoZGF0YSArIHBhcnRvZmZzZXQpOwogCWlmIChiZTE2X3RvX2NwdShwYXJ0LT5zaWduYXR1cmUpICE9IE1BQ19QQVJUSVRJT05fTUFHSUMpIHsKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJCXJldHVybiAwOwkJLyogbm90IGEgTWFjT1MgZGlzayAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FibGtjaXBoZXIuYyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKaW5kZXggYjRmZmM1Yi4uZTViNTcyMSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FibGtjaXBoZXIuYworKysgYi9jcnlwdG8vYWJsa2NpcGhlci5jCkBAIC0yNzcsMTIgKzI3NywxMiBAQAogCWlmIChXQVJOX09OX09OQ0UoaW5faXJxKCkpKQogCQlyZXR1cm4gLUVERUFETEs7CiAKKwl3YWxrLT5pdiA9IHJlcS0+aW5mbzsKIAl3YWxrLT5uYnl0ZXMgPSB3YWxrLT50b3RhbDsKIAlpZiAodW5saWtlbHkoIXdhbGstPnRvdGFsKSkKIAkJcmV0dXJuIDA7CiAKIAl3YWxrLT5pdl9idWZmZXIgPSBOVUxMOwotCXdhbGstPml2ID0gcmVxLT5pbmZvOwogCWlmICh1bmxpa2VseSgoKHVuc2lnbmVkIGxvbmcpd2Fsay0+aXYgJiBhbGlnbm1hc2spKSkgewogCQlpbnQgZXJyID0gYWJsa2NpcGhlcl9jb3B5X2l2KHdhbGssIHRmbSwgYWxpZ25tYXNrKTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FsZ2lmX2FlYWQuYyBiL2NyeXB0by9hbGdpZl9hZWFkLmMKaW5kZXggMGFhNmZkZi4uNmQ0ZDQ1NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2lmX2FlYWQuYworKysgYi9jcnlwdG8vYWxnaWZfYWVhZC5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlpZiAoZmxhZ3MgJiBNU0dfRE9OVFdBSVQpCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc2V0X2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CiAKIAlmb3IgKDs7KSB7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTEzOSw3ICsxMzksNyBAQAogCX0KIAlmaW5pc2hfd2FpdChza19zbGVlcChzayksICZ3YWl0KTsKIAotCWNsZWFyX2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnaWZfc2tjaXBoZXIuYyBiL2NyeXB0by9hbGdpZl9za2NpcGhlci5jCmluZGV4IGFmMzFhMGUuLjYzNGI0ZDEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbGdpZl9za2NpcGhlci5jCisrKyBiL2NyeXB0by9hbGdpZl9za2NpcGhlci5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJYm9vbCBtZXJnZTsKIAlib29sIGVuYzsKIAotCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgcmVxOworCXN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0IHJlcTsKIH07CiAKIHN0cnVjdCBza2NpcGhlcl9hc3luY19yc2dsIHsKQEAgLTY0LDEzICs2NCwxMyBAQAogfTsKIAogI2RlZmluZSBHRVRfU1JFUShhcmVxLCBjdHgpIChzdHJ1Y3Qgc2tjaXBoZXJfYXN5bmNfcmVxICopKChjaGFyICopYXJlcSArIFwKLQljcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbSgmY3R4LT5yZXEpKSkKKwljcnlwdG9fc2tjaXBoZXJfcmVxc2l6ZShjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKCZjdHgtPnJlcSkpKQogCiAjZGVmaW5lIEdFVF9SRVFfU0laRShjdHgpIFwKLQljcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbSgmY3R4LT5yZXEpKQorCWNyeXB0b19za2NpcGhlcl9yZXFzaXplKGNyeXB0b19za2NpcGhlcl9yZXF0Zm0oJmN0eC0+cmVxKSkKIAogI2RlZmluZSBHRVRfSVZfU0laRShjdHgpIFwKLQljcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUoY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKCZjdHgtPnJlcSkpCisJY3J5cHRvX3NrY2lwaGVyX2l2c2l6ZShjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKCZjdHgtPnJlcSkpCiAKICNkZWZpbmUgTUFYX1NHTF9FTlRTICgoNDA5NiAtIHNpemVvZihzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCkpIC8gXAogCQkgICAgICBzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSAtIDEpCkBAIC0yMTIsNyArMjEyLDcgQEAKIAlpZiAoZmxhZ3MgJiBNU0dfRE9OVFdBSVQpCiAJCXJldHVybiAtRUFHQUlOOwogCi0Jc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiAJZm9yICg7OykgewogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCkBAIC0yNTgsNyArMjU4LDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0Jc2V0X2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CiAKIAlmb3IgKDs7KSB7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTI3Miw3ICsyNzIsNyBAQAogCX0KIAlmaW5pc2hfd2FpdChza19zbGVlcChzayksICZ3YWl0KTsKIAotCWNsZWFyX2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zMDIsOCArMzAyLDggQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CiAJc3RydWN0IHNrY2lwaGVyX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOwotCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKCZjdHgtPnJlcSk7Ci0JdW5zaWduZWQgaXZzaXplID0gY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplKHRmbSk7CisJc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtID0gY3J5cHRvX3NrY2lwaGVyX3JlcXRmbSgmY3R4LT5yZXEpOworCXVuc2lnbmVkIGl2c2l6ZSA9IGNyeXB0b19za2NpcGhlcl9pdnNpemUodGZtKTsKIAlzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCAqc2dsOwogCXN0cnVjdCBhZl9hbGdfY29udHJvbCBjb24gPSB7fTsKIAlsb25nIGNvcGllZCA9IDA7CkBAIC01MDcsNyArNTA3LDcgQEAKIAlzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCAqc2dsOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJc3RydWN0IHNrY2lwaGVyX2FzeW5jX3JlcSAqc3JlcTsKLQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcTsKIAlzdHJ1Y3Qgc2tjaXBoZXJfYXN5bmNfcnNnbCAqbGFzdF9yc2dsID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgdHhidWZzID0gMCwgbGVuID0gMCwgdHhfbmVudHMgPSBza2NpcGhlcl9hbGxfc2dfbmVudHMoY3R4KTsKIAl1bnNpZ25lZCBpbnQgcmVxbGVuID0gc2l6ZW9mKHN0cnVjdCBza2NpcGhlcl9hc3luY19yZXEpICsKQEAgLTUzMSw5ICs1MzEsOSBAQAogCX0KIAlzZ19pbml0X3RhYmxlKHNyZXEtPnRzZywgdHhfbmVudHMpOwogCW1lbWNweShzcmVxLT5pdiwgY3R4LT5pdiwgR0VUX0lWX1NJWkUoY3R4KSk7Ci0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0ocmVxLCBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0oJmN0eC0+cmVxKSk7Ci0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIENSWVBUT19URk1fUkVRX01BWV9CQUNLTE9HLAotCQkJCQlza2NpcGhlcl9hc3luY19jYiwgc2spOworCXNrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGNyeXB0b19za2NpcGhlcl9yZXF0Zm0oJmN0eC0+cmVxKSk7CisJc2tjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2socmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRywKKwkJCQkgICAgICBza2NpcGhlcl9hc3luY19jYiwgc2spOwogCiAJd2hpbGUgKGlvdl9pdGVyX2NvdW50KCZtc2ctPm1zZ19pdGVyKSkgewogCQlzdHJ1Y3Qgc2tjaXBoZXJfYXN5bmNfcnNnbCAqcnNnbDsKQEAgLTYwOCwxMCArNjA4LDEwIEBACiAJaWYgKG1hcmspCiAJCXNnX21hcmtfZW5kKHNyZXEtPnRzZyArIHR4YnVmcyAtIDEpOwogCi0JYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChyZXEsIHNyZXEtPnRzZywgc3JlcS0+Zmlyc3Rfc2dsLnNnbC5zZywKLQkJCQkgICAgIGxlbiwgc3JlcS0+aXYpOwotCWVyciA9IGN0eC0+ZW5jID8gY3J5cHRvX2FibGtjaXBoZXJfZW5jcnlwdChyZXEpIDoKLQkJCSBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KHJlcSk7CisJc2tjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzcmVxLT50c2csIHNyZXEtPmZpcnN0X3NnbC5zZ2wuc2csCisJCQkJICAgbGVuLCBzcmVxLT5pdik7CisJZXJyID0gY3R4LT5lbmMgPyBjcnlwdG9fc2tjaXBoZXJfZW5jcnlwdChyZXEpIDoKKwkJCSBjcnlwdG9fc2tjaXBoZXJfZGVjcnlwdChyZXEpOwogCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7CiAJCWF0b21pY19pbmMoJmN0eC0+aW5mbGlnaHQpOwogCQllcnIgPSAtRUlPQ0JRVUVVRUQ7CkBAIC02MzIsNyArNjMyLDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CiAJc3RydWN0IHNrY2lwaGVyX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOwotCXVuc2lnbmVkIGJzID0gY3J5cHRvX2FibGtjaXBoZXJfYmxvY2tzaXplKGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbSgKKwl1bnNpZ25lZCBicyA9IGNyeXB0b19za2NpcGhlcl9ibG9ja3NpemUoY3J5cHRvX3NrY2lwaGVyX3JlcXRmbSgKIAkJJmN0eC0+cmVxKSk7CiAJc3RydWN0IHNrY2lwaGVyX3NnX2xpc3QgKnNnbDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwpAQCAtNjY5LDE0ICs2NjksMTMgQEAKIAkJaWYgKCF1c2VkKQogCQkJZ290byBmcmVlOwogCi0JCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQoJmN0eC0+cmVxLCBzZywKLQkJCQkJICAgICBjdHgtPnJzZ2wuc2csIHVzZWQsCi0JCQkJCSAgICAgY3R4LT5pdik7CisJCXNrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0KCZjdHgtPnJlcSwgc2csIGN0eC0+cnNnbC5zZywgdXNlZCwKKwkJCQkJICAgY3R4LT5pdik7CiAKIAkJZXJyID0gYWZfYWxnX3dhaXRfZm9yX2NvbXBsZXRpb24oCiAJCQkJY3R4LT5lbmMgPwotCQkJCQljcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KCZjdHgtPnJlcSkgOgotCQkJCQljcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KCZjdHgtPnJlcSksCisJCQkJCWNyeXB0b19za2NpcGhlcl9lbmNyeXB0KCZjdHgtPnJlcSkgOgorCQkJCQljcnlwdG9fc2tjaXBoZXJfZGVjcnlwdCgmY3R4LT5yZXEpLAogCQkJCSZjdHgtPmNvbXBsZXRpb24pOwogCiBmcmVlOgpAQCAtNzUxLDE3ICs3NTAsMTcgQEAKIAogc3RhdGljIHZvaWQgKnNrY2lwaGVyX2JpbmQoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKQogewotCXJldHVybiBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcihuYW1lLCB0eXBlLCBtYXNrKTsKKwlyZXR1cm4gY3J5cHRvX2FsbG9jX3NrY2lwaGVyKG5hbWUsIHR5cGUsIG1hc2spOwogfQogCiBzdGF0aWMgdm9pZCBza2NpcGhlcl9yZWxlYXNlKHZvaWQgKnByaXZhdGUpCiB7Ci0JY3J5cHRvX2ZyZWVfYWJsa2NpcGhlcihwcml2YXRlKTsKKwljcnlwdG9fZnJlZV9za2NpcGhlcihwcml2YXRlKTsKIH0KIAogc3RhdGljIGludCBza2NpcGhlcl9zZXRrZXkodm9pZCAqcHJpdmF0ZSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKIHsKLQlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfc2V0a2V5KHByaXZhdGUsIGtleSwga2V5bGVuKTsKKwlyZXR1cm4gY3J5cHRvX3NrY2lwaGVyX3NldGtleShwcml2YXRlLCBrZXksIGtleWxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNrY2lwaGVyX3dhaXQoc3RydWN0IHNvY2sgKnNrKQpAQCAtNzc4LDEzICs3NzcsMTMgQEAKIHsKIAlzdHJ1Y3QgYWxnX3NvY2sgKmFzayA9IGFsZ19zayhzayk7CiAJc3RydWN0IHNrY2lwaGVyX2N0eCAqY3R4ID0gYXNrLT5wcml2YXRlOwotCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKCZjdHgtPnJlcSk7CisJc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtID0gY3J5cHRvX3NrY2lwaGVyX3JlcXRmbSgmY3R4LT5yZXEpOwogCiAJaWYgKGF0b21pY19yZWFkKCZjdHgtPmluZmxpZ2h0KSkKIAkJc2tjaXBoZXJfd2FpdChzayk7CiAKIAlza2NpcGhlcl9mcmVlX3NnbChzayk7Ci0Jc29ja19remZyZWVfcyhzaywgY3R4LT5pdiwgY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplKHRmbSkpOworCXNvY2tfa3pmcmVlX3Moc2ssIGN0eC0+aXYsIGNyeXB0b19za2NpcGhlcl9pdnNpemUodGZtKSk7CiAJc29ja19rZnJlZV9zKHNrLCBjdHgsIGN0eC0+bGVuKTsKIAlhZl9hbGdfcmVsZWFzZV9wYXJlbnQoc2spOwogfQpAQCAtNzkzLDIwICs3OTIsMjAgQEAKIHsKIAlzdHJ1Y3Qgc2tjaXBoZXJfY3R4ICpjdHg7CiAJc3RydWN0IGFsZ19zb2NrICphc2sgPSBhbGdfc2soc2spOwotCXVuc2lnbmVkIGludCBsZW4gPSBzaXplb2YoKmN0eCkgKyBjcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKHByaXZhdGUpOworCXVuc2lnbmVkIGludCBsZW4gPSBzaXplb2YoKmN0eCkgKyBjcnlwdG9fc2tjaXBoZXJfcmVxc2l6ZShwcml2YXRlKTsKIAogCWN0eCA9IHNvY2tfa21hbGxvYyhzaywgbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0eCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljdHgtPml2ID0gc29ja19rbWFsbG9jKHNrLCBjcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUocHJpdmF0ZSksCisJY3R4LT5pdiA9IHNvY2tfa21hbGxvYyhzaywgY3J5cHRvX3NrY2lwaGVyX2l2c2l6ZShwcml2YXRlKSwKIAkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0eC0+aXYpIHsKIAkJc29ja19rZnJlZV9zKHNrLCBjdHgsIGxlbik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW1lbXNldChjdHgtPml2LCAwLCBjcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUocHJpdmF0ZSkpOworCW1lbXNldChjdHgtPml2LCAwLCBjcnlwdG9fc2tjaXBoZXJfaXZzaXplKHByaXZhdGUpKTsKIAogCUlOSVRfTElTVF9IRUFEKCZjdHgtPnRzZ2wpOwogCWN0eC0+bGVuID0gbGVuOwpAQCAtODE5LDkgKzgxOCw5IEBACiAKIAlhc2stPnByaXZhdGUgPSBjdHg7CiAKLQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbSgmY3R4LT5yZXEsIHByaXZhdGUpOwotCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2soJmN0eC0+cmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfQkFDS0xPRywKLQkJCQkJYWZfYWxnX2NvbXBsZXRlLCAmY3R4LT5jb21wbGV0aW9uKTsKKwlza2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0oJmN0eC0+cmVxLCBwcml2YXRlKTsKKwlza2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjaygmY3R4LT5yZXEsIENSWVBUT19URk1fUkVRX01BWV9CQUNLTE9HLAorCQkJCSAgICAgIGFmX2FsZ19jb21wbGV0ZSwgJmN0eC0+Y29tcGxldGlvbik7CiAKIAlzay0+c2tfZGVzdHJ1Y3QgPSBza2NpcGhlcl9zb2NrX2Rlc3RydWN0OwogCmRpZmYgLS1naXQgYS9jcnlwdG8vYmxrY2lwaGVyLmMgYi9jcnlwdG8vYmxrY2lwaGVyLmMKaW5kZXggMTFiOTgxNC4uOGNjMTYyMiAxMDA2NDQKLS0tIGEvY3J5cHRvL2Jsa2NpcGhlci5jCisrKyBiL2NyeXB0by9ibGtjaXBoZXIuYwpAQCAtMzI2LDEyICszMjYsMTIgQEAKIAlpZiAoV0FSTl9PTl9PTkNFKGluX2lycSgpKSkKIAkJcmV0dXJuIC1FREVBRExLOwogCisJd2Fsay0+aXYgPSBkZXNjLT5pbmZvOwogCXdhbGstPm5ieXRlcyA9IHdhbGstPnRvdGFsOwogCWlmICh1bmxpa2VseSghd2Fsay0+dG90YWwpKQogCQlyZXR1cm4gMDsKIAogCXdhbGstPmJ1ZmZlciA9IE5VTEw7Ci0Jd2Fsay0+aXYgPSBkZXNjLT5pbmZvOwogCWlmICh1bmxpa2VseSgoKHVuc2lnbmVkIGxvbmcpd2Fsay0+aXYgJiB3YWxrLT5hbGlnbm1hc2spKSkgewogCQlpbnQgZXJyID0gYmxrY2lwaGVyX2NvcHlfaXYod2Fsayk7CiAJCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCA3M2QwMzkxLi43OTVkMGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTYzLDYgKzYzLDcgQEAKIG9iai0kKENPTkZJR19GQl9JTlRFTCkgICAgICAgICAgKz0gdmlkZW8vZmJkZXYvaW50ZWxmYi8KIAogb2JqLSQoQ09ORklHX1BBUlBPUlQpCQkrPSBwYXJwb3J0Lworb2JqLSQoQ09ORklHX05WTSkJCSs9IGxpZ2h0bnZtLwogb2JqLXkJCQkJKz0gYmFzZS8gYmxvY2svIG1pc2MvIG1mZC8gbmZjLwogb2JqLSQoQ09ORklHX0xJQk5WRElNTSkJCSs9IG52ZGltbS8KIG9iai0kKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikgKz0gZG1hLWJ1Zi8KQEAgLTcwLDcgKzcxLDYgQEAKIG9iai15CQkJCSs9IG1hY2ludG9zaC8KIG9iai0kKENPTkZJR19JREUpCQkrPSBpZGUvCiBvYmotJChDT05GSUdfU0NTSSkJCSs9IHNjc2kvCi1vYmotJChDT05GSUdfTlZNKQkJKz0gbGlnaHRudm0vCiBvYmoteQkJCQkrPSBudm1lLwogb2JqLSQoQ09ORklHX0FUQSkJCSs9IGF0YS8KIG9iai0kKENPTkZJR19UQVJHRVRfQ09SRSkJKz0gdGFyZ2V0LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCAyNWRiYjc2Li41ZWVmNGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtNTgsMTAgKzU4LDEwIEBACiAJYm9vbAogCiBjb25maWcgQUNQSV9ERUJVR0dFUgotCWJvb2wgIkluLWtlcm5lbCBkZWJ1Z2dlciAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJBTUwgZGVidWdnZXIgaW50ZXJmYWNlIChFWFBFUklNRU5UQUwpIgogCXNlbGVjdCBBQ1BJX0RFQlVHCiAJaGVscAotCSAgRW5hYmxlIGluLWtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllczogc3RhdGlzdGljcywgaW50ZXJuYWwKKwkgIEVuYWJsZSBpbi1rZXJuZWwgZGVidWdnaW5nIG9mIEFNTCBmYWNpbGl0aWVzOiBzdGF0aXN0aWNzLCBpbnRlcm5hbAogCSAgb2JqZWN0IGR1bXAsIHNpbmdsZSBzdGVwIGNvbnRyb2wgbWV0aG9kIGV4ZWN1dGlvbi4KIAkgIFRoaXMgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQsIGN1cnJlbnRseSBlbmFibGluZyB0aGlzIG9ubHkKIAkgIHJlc3VsdHMgaW4gdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBBQ1BJQ0EgZGVidWdnZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMgYi9kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMKaW5kZXggM2MwODNkMi4uNjczMGY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAKIHN0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoaW50IHBjY19zdWJzcGFjZV9pZHgpCiB7Ci0Jc3RydWN0IGFjcGlfcGNjdF9zdWJzcGFjZSAqY3BwY19zczsKKwlzdHJ1Y3QgYWNwaV9wY2N0X2h3X3JlZHVjZWQgKmNwcGNfc3M7CiAJdW5zaWduZWQgaW50IGxlbjsKIAogCWlmIChwY2Nfc3Vic3BhY2VfaWR4ID49IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggZjYxYTdjOC4uYjQyMGZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTExMDMsNyArMTEwMyw3IEBACiAJfQogCiBlcnJfZXhpdDoKLQlpZiAocmVzdWx0ICYmIHEpCisJaWYgKHJlc3VsdCkKIAkJYWNwaV9lY19kZWxldGVfcXVlcnkocSk7CiAJaWYgKGRhdGEpCiAJCSpkYXRhID0gdmFsdWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmZpdC5jIGIvZHJpdmVycy9hY3BpL25maXQuYwppbmRleCBmN2RhYjUzLi5hYTQ1ZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmZpdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9uZml0LmMKQEAgLTIzMywxMSArMjMzLDEyIEBACiAJCXN0cnVjdCBuZml0X3RhYmxlX3ByZXYgKnByZXYsCiAJCXN0cnVjdCBhY3BpX25maXRfc3lzdGVtX2FkZHJlc3MgKnNwYSkKIHsKKwlzaXplX3QgbGVuZ3RoID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoKnNwYSksIHNwYS0+aGVhZGVyLmxlbmd0aCk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gYWNwaV9kZXNjLT5kZXY7CiAJc3RydWN0IG5maXRfc3BhICpuZml0X3NwYTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobmZpdF9zcGEsICZwcmV2LT5zcGFzLCBsaXN0KSB7Ci0JCWlmIChtZW1jbXAobmZpdF9zcGEtPnNwYSwgc3BhLCBzaXplb2YoKnNwYSkpID09IDApIHsKKwkJaWYgKG1lbWNtcChuZml0X3NwYS0+c3BhLCBzcGEsIGxlbmd0aCkgPT0gMCkgewogCQkJbGlzdF9tb3ZlX3RhaWwoJm5maXRfc3BhLT5saXN0LCAmYWNwaV9kZXNjLT5zcGFzKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CkBAIC0yNTksMTEgKzI2MCwxMiBAQAogCQlzdHJ1Y3QgbmZpdF90YWJsZV9wcmV2ICpwcmV2LAogCQlzdHJ1Y3QgYWNwaV9uZml0X21lbW9yeV9tYXAgKm1lbWRldikKIHsKKwlzaXplX3QgbGVuZ3RoID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoKm1lbWRldiksIG1lbWRldi0+aGVhZGVyLmxlbmd0aCk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gYWNwaV9kZXNjLT5kZXY7CiAJc3RydWN0IG5maXRfbWVtZGV2ICpuZml0X21lbWRldjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobmZpdF9tZW1kZXYsICZwcmV2LT5tZW1kZXZzLCBsaXN0KQotCQlpZiAobWVtY21wKG5maXRfbWVtZGV2LT5tZW1kZXYsIG1lbWRldiwgc2l6ZW9mKCptZW1kZXYpKSA9PSAwKSB7CisJCWlmIChtZW1jbXAobmZpdF9tZW1kZXYtPm1lbWRldiwgbWVtZGV2LCBsZW5ndGgpID09IDApIHsKIAkJCWxpc3RfbW92ZV90YWlsKCZuZml0X21lbWRldi0+bGlzdCwgJmFjcGlfZGVzYy0+bWVtZGV2cyk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQpAQCAtMjg0LDExICsyODYsMTIgQEAKIAkJc3RydWN0IG5maXRfdGFibGVfcHJldiAqcHJldiwKIAkJc3RydWN0IGFjcGlfbmZpdF9jb250cm9sX3JlZ2lvbiAqZGNyKQogeworCXNpemVfdCBsZW5ndGggPSBtaW5fdChzaXplX3QsIHNpemVvZigqZGNyKSwgZGNyLT5oZWFkZXIubGVuZ3RoKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhY3BpX2Rlc2MtPmRldjsKIAlzdHJ1Y3QgbmZpdF9kY3IgKm5maXRfZGNyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShuZml0X2RjciwgJnByZXYtPmRjcnMsIGxpc3QpCi0JCWlmIChtZW1jbXAobmZpdF9kY3ItPmRjciwgZGNyLCBzaXplb2YoKmRjcikpID09IDApIHsKKwkJaWYgKG1lbWNtcChuZml0X2Rjci0+ZGNyLCBkY3IsIGxlbmd0aCkgPT0gMCkgewogCQkJbGlzdF9tb3ZlX3RhaWwoJm5maXRfZGNyLT5saXN0LCAmYWNwaV9kZXNjLT5kY3JzKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CkBAIC0zMDgsMTEgKzMxMSwxMiBAQAogCQlzdHJ1Y3QgbmZpdF90YWJsZV9wcmV2ICpwcmV2LAogCQlzdHJ1Y3QgYWNwaV9uZml0X2RhdGFfcmVnaW9uICpiZHcpCiB7CisJc2l6ZV90IGxlbmd0aCA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKCpiZHcpLCBiZHctPmhlYWRlci5sZW5ndGgpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFjcGlfZGVzYy0+ZGV2OwogCXN0cnVjdCBuZml0X2JkdyAqbmZpdF9iZHc7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5maXRfYmR3LCAmcHJldi0+YmR3cywgbGlzdCkKLQkJaWYgKG1lbWNtcChuZml0X2Jkdy0+YmR3LCBiZHcsIHNpemVvZigqYmR3KSkgPT0gMCkgeworCQlpZiAobWVtY21wKG5maXRfYmR3LT5iZHcsIGJkdywgbGVuZ3RoKSA9PSAwKSB7CiAJCQlsaXN0X21vdmVfdGFpbCgmbmZpdF9iZHctPmxpc3QsICZhY3BpX2Rlc2MtPmJkd3MpOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KQEAgLTMzMiwxMSArMzM2LDEyIEBACiAJCXN0cnVjdCBuZml0X3RhYmxlX3ByZXYgKnByZXYsCiAJCXN0cnVjdCBhY3BpX25maXRfaW50ZXJsZWF2ZSAqaWR0KQogeworCXNpemVfdCBsZW5ndGggPSBtaW5fdChzaXplX3QsIHNpemVvZigqaWR0KSwgaWR0LT5oZWFkZXIubGVuZ3RoKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhY3BpX2Rlc2MtPmRldjsKIAlzdHJ1Y3QgbmZpdF9pZHQgKm5maXRfaWR0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShuZml0X2lkdCwgJnByZXYtPmlkdHMsIGxpc3QpCi0JCWlmIChtZW1jbXAobmZpdF9pZHQtPmlkdCwgaWR0LCBzaXplb2YoKmlkdCkpID09IDApIHsKKwkJaWYgKG1lbWNtcChuZml0X2lkdC0+aWR0LCBpZHQsIGxlbmd0aCkgPT0gMCkgewogCQkJbGlzdF9tb3ZlX3RhaWwoJm5maXRfaWR0LT5saXN0LCAmYWNwaV9kZXNjLT5pZHRzKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CkBAIC0zNTYsMTEgKzM2MSwxMiBAQAogCQlzdHJ1Y3QgbmZpdF90YWJsZV9wcmV2ICpwcmV2LAogCQlzdHJ1Y3QgYWNwaV9uZml0X2ZsdXNoX2FkZHJlc3MgKmZsdXNoKQogeworCXNpemVfdCBsZW5ndGggPSBtaW5fdChzaXplX3QsIHNpemVvZigqZmx1c2gpLCBmbHVzaC0+aGVhZGVyLmxlbmd0aCk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gYWNwaV9kZXNjLT5kZXY7CiAJc3RydWN0IG5maXRfZmx1c2ggKm5maXRfZmx1c2g7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5maXRfZmx1c2gsICZwcmV2LT5mbHVzaGVzLCBsaXN0KQotCQlpZiAobWVtY21wKG5maXRfZmx1c2gtPmZsdXNoLCBmbHVzaCwgc2l6ZW9mKCpmbHVzaCkpID09IDApIHsKKwkJaWYgKG1lbWNtcChuZml0X2ZsdXNoLT5mbHVzaCwgZmx1c2gsIGxlbmd0aCkgPT0gMCkgewogCQkJbGlzdF9tb3ZlX3RhaWwoJm5maXRfZmx1c2gtPmxpc3QsICZhY3BpX2Rlc2MtPmZsdXNoZXMpOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KQEAgLTY1NSw3ICs2NjEsNyBAQAogCXN0cnVjdCBudmRpbW1fYnVzX2Rlc2NyaXB0b3IgKm5kX2Rlc2MgPSB0b19uZF9kZXNjKG52ZGltbV9idXMpOwogCXN0cnVjdCBhY3BpX25maXRfZGVzYyAqYWNwaV9kZXNjID0gdG9fYWNwaV9kZXNjKG5kX2Rlc2MpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFjcGlfZGVzYy0+bmZpdC0+aGVhZGVyLnJldmlzaW9uKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYWNwaV9kZXNjLT5hY3BpX2hlYWRlci5yZXZpc2lvbik7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFJfUk8ocmV2aXNpb24pOwogCkBAIC0xNjUyLDcgKzE2NTgsNiBAQAogCiAJZGF0YSA9ICh1OCAqKSBhY3BpX2Rlc2MtPm5maXQ7CiAJZW5kID0gZGF0YSArIHN6OwotCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX25maXQpOwogCXdoaWxlICghSVNfRVJSX09SX05VTEwoZGF0YSkpCiAJCWRhdGEgPSBhZGRfdGFibGUoYWNwaV9kZXNjLCAmcHJldiwgZGF0YSwgZW5kKTsKIApAQCAtMTc0OCwxMyArMTc1MywyOSBAQAogCQlyZXR1cm4gUFRSX0VSUihhY3BpX2Rlc2MpOwogCX0KIAotCWFjcGlfZGVzYy0+bmZpdCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9uZml0ICopIHRibDsKKwkvKgorCSAqIFNhdmUgdGhlIGFjcGkgaGVhZGVyIGZvciBsYXRlciBhbmQgdGhlbiBza2lwIGl0LAorCSAqIG1ha2luZyBuZml0IHBvaW50IHRvIHRoZSBmaXJzdCBuZml0IHRhYmxlIGhlYWRlci4KKwkgKi8KKwlhY3BpX2Rlc2MtPmFjcGlfaGVhZGVyID0gKnRibDsKKwlhY3BpX2Rlc2MtPm5maXQgPSAodm9pZCAqKSB0YmwgKyBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfbmZpdCk7CisJc3ogLT0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX25maXQpOwogCiAJLyogRXZhbHVhdGUgX0ZJVCBhbmQgb3ZlcnJpZGUgd2l0aCB0aGF0IGlmIHByZXNlbnQgKi8KIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChhZGV2LT5oYW5kbGUsICJfRklUIiwgTlVMTCwgJmJ1Zik7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmIGJ1Zi5sZW5ndGggPiAwKSB7Ci0JCWFjcGlfZGVzYy0+bmZpdCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9uZml0ICopYnVmLnBvaW50ZXI7Ci0JCXN6ID0gYnVmLmxlbmd0aDsKKwkJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwkJLyoKKwkJICogQWRqdXN0IGZvciB0aGUgYWNwaV9vYmplY3QgaGVhZGVyIG9mIHRoZSBfRklUCisJCSAqLworCQlvYmogPSBidWYucG9pbnRlcjsKKwkJaWYgKG9iai0+dHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCQlhY3BpX2Rlc2MtPm5maXQgPQorCQkJCShzdHJ1Y3QgYWNwaV9uZml0X2hlYWRlciAqKW9iai0+YnVmZmVyLnBvaW50ZXI7CisJCQlzeiA9IG9iai0+YnVmZmVyLmxlbmd0aDsKKwkJfSBlbHNlCisJCQlkZXZfZGJnKGRldiwgIiVzIGludmFsaWQgdHlwZSAlZCwgaWdub3JpbmcgX0ZJVFxuIiwKKwkJCQkgX19mdW5jX18sIChpbnQpIG9iai0+dHlwZSk7CiAJfQogCiAJcmMgPSBhY3BpX25maXRfaW5pdChhY3BpX2Rlc2MsIHN6KTsKQEAgLTE3NzcsNyArMTc5OCw4IEBACiB7CiAJc3RydWN0IGFjcGlfbmZpdF9kZXNjICphY3BpX2Rlc2MgPSBkZXZfZ2V0X2RydmRhdGEoJmFkZXYtPmRldik7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZiA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9uZml0ICpuZml0X3NhdmVkOworCXN0cnVjdCBhY3BpX25maXRfaGVhZGVyICpuZml0X3NhdmVkOworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkZXYtPmRldjsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJaW50IHJldDsKQEAgLTE3ODgsNyArMTgxMCw3IEBACiAJaWYgKCFkZXYtPmRyaXZlcikgewogCQkvKiBkZXYtPmRyaXZlciBtYXkgYmUgbnVsbCBpZiB3ZSdyZSBiZWluZyByZW1vdmVkICovCiAJCWRldl9kYmcoZGV2LCAiJXM6IG5vIGRyaXZlciBmb3VuZCBmb3IgZGV2XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCWlmICghYWNwaV9kZXNjKSB7CkBAIC0xODA4LDEyICsxODMwLDE5IEBACiAJfQogCiAJbmZpdF9zYXZlZCA9IGFjcGlfZGVzYy0+bmZpdDsKLQlhY3BpX2Rlc2MtPm5maXQgPSAoc3RydWN0IGFjcGlfdGFibGVfbmZpdCAqKWJ1Zi5wb2ludGVyOwotCXJldCA9IGFjcGlfbmZpdF9pbml0KGFjcGlfZGVzYywgYnVmLmxlbmd0aCk7Ci0JaWYgKCFyZXQpIHsKLQkJLyogTWVyZ2UgZmFpbGVkLCByZXN0b3JlIG9sZCBuZml0LCBhbmQgZXhpdCAqLwotCQlhY3BpX2Rlc2MtPm5maXQgPSBuZml0X3NhdmVkOwotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtZXJnZSB1cGRhdGVkIE5GSVRcbiIpOworCW9iaiA9IGJ1Zi5wb2ludGVyOworCWlmIChvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlhY3BpX2Rlc2MtPm5maXQgPQorCQkJKHN0cnVjdCBhY3BpX25maXRfaGVhZGVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwkJcmV0ID0gYWNwaV9uZml0X2luaXQoYWNwaV9kZXNjLCBvYmotPmJ1ZmZlci5sZW5ndGgpOworCQlpZiAocmV0KSB7CisJCQkvKiBNZXJnZSBmYWlsZWQsIHJlc3RvcmUgb2xkIG5maXQsIGFuZCBleGl0ICovCisJCQlhY3BpX2Rlc2MtPm5maXQgPSBuZml0X3NhdmVkOworCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gbWVyZ2UgdXBkYXRlZCBORklUXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEJhZCBfRklULCByZXN0b3JlIG9sZCBuZml0ICovCisJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBfRklUXG4iKTsKIAl9CiAJa2ZyZWUoYnVmLnBvaW50ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmZpdC5oIGIvZHJpdmVycy9hY3BpL25maXQuaAppbmRleCAyZWE1YzA3Li4zZDU0OWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbmZpdC5oCisrKyBiL2RyaXZlcnMvYWNwaS9uZml0LmgKQEAgLTk2LDcgKzk2LDggQEAKIAogc3RydWN0IGFjcGlfbmZpdF9kZXNjIHsKIAlzdHJ1Y3QgbnZkaW1tX2J1c19kZXNjcmlwdG9yIG5kX2Rlc2M7Ci0Jc3RydWN0IGFjcGlfdGFibGVfbmZpdCAqbmZpdDsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgYWNwaV9oZWFkZXI7CisJc3RydWN0IGFjcGlfbmZpdF9oZWFkZXIgKm5maXQ7CiAJc3RydWN0IG11dGV4IHNwYV9tYXBfbXV0ZXg7CiAJc3RydWN0IG11dGV4IGluaXRfbXV0ZXg7CiAJc3RydWN0IGxpc3RfaGVhZCBzcGFfbWFwczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggODUwZDdiZi4uYWUzZmU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTc2OCw2ICs3NjgsMTMgQEAKIAkJZWxzZQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogU29tZSBsZWdhY3kgeDg2IGhvc3QgYnJpZGdlIGRyaXZlcnMgdXNlIGlvbWVtX3Jlc291cmNlIGFuZAorCQkgKiBpb3BvcnRfcmVzb3VyY2UgYXMgZGVmYXVsdCByZXNvdXJjZSBwb29sLCBza2lwIGl0LgorCQkgKi8KKwkJaWYgKHJlcyA9PSByb290KQorCQkJY29udGludWU7CisKIAkJY29uZmxpY3QgPSBpbnNlcnRfcmVzb3VyY2VfY29uZmxpY3Qocm9vdCwgcmVzKTsKIAkJaWYgKGNvbmZsaWN0KSB7CiAJCQlkZXZfaW5mbygmaW5mby0+YnJpZGdlLT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2RyaXZlci5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9kcml2ZXIuYwppbmRleCBmNGUwMmFlLi4xMTE1NGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfZHJpdmVyLmMKQEAgLTIwMCw3ICsyMDAsOCBAQAogCQlnb3RvIGVycl9yZW1vdmVfc3lzZnNfdGhlcm1hbDsKIAl9CiAKLQlzeXNmc19yZW1vdmVfbGluaygmcHItPmNkZXYtPmRldmljZS5rb2JqLCAiZGV2aWNlIik7CisJcmV0dXJuIDA7CisKICBlcnJfcmVtb3ZlX3N5c2ZzX3RoZXJtYWw6CiAJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosICJ0aGVybWFsX2Nvb2xpbmciKTsKICBlcnJfdGhlcm1hbF91bnJlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nic2hjLmMgYi9kcml2ZXJzL2FjcGkvc2JzaGMuYwppbmRleCBiZjAzNGY4Li4yZmE4MzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2JzaGMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzaGMuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSAic2JzaGMuaCIKIAogI2RlZmluZSBQUkVGSVggIkFDUEk6ICIKQEAgLTMwLDYgKzI5LDcgQEAKIAl1OCBxdWVyeV9iaXQ7CiAJc21idXNfYWxhcm1fY2FsbGJhY2sgY2FsbGJhY2s7CiAJdm9pZCAqY29udGV4dDsKKwlib29sIGRvbmU7CiB9OwogCiBzdGF0aWMgaW50IGFjcGlfc21idXNfaGNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKQEAgLTg4LDggKzg4LDYgQEAKIAlBQ1BJX1NNQl9BTEFSTV9EQVRBID0gMHgyNiwJLyogMiBieXRlcyBhbGFybSBkYXRhICovCiB9OwogCi1zdGF0aWMgYm9vbCBtYWNib29rOwotCiBzdGF0aWMgaW5saW5lIGludCBzbWJfaGNfcmVhZChzdHJ1Y3QgYWNwaV9zbWJfaGMgKmhjLCB1OCBhZGRyZXNzLCB1OCAqZGF0YSkKIHsKIAlyZXR1cm4gZWNfcmVhZChoYy0+b2Zmc2V0ICsgYWRkcmVzcywgZGF0YSk7CkBAIC0xMDAsMjcgKzk4LDExIEBACiAJcmV0dXJuIGVjX3dyaXRlKGhjLT5vZmZzZXQgKyBhZGRyZXNzLCBkYXRhKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc21iX2NoZWNrX2RvbmUoc3RydWN0IGFjcGlfc21iX2hjICpoYykKLXsKLQl1bmlvbiBhY3BpX3NtYl9zdGF0dXMgc3RhdHVzID0gey5yYXcgPSAwfTsKLQlzbWJfaGNfcmVhZChoYywgQUNQSV9TTUJfU1RBVFVTLCAmc3RhdHVzLnJhdyk7Ci0JcmV0dXJuIHN0YXR1cy5maWVsZHMuZG9uZSAmJiAoc3RhdHVzLmZpZWxkcy5zdGF0dXMgPT0gU01CVVNfT0spOwotfQotCiBzdGF0aWMgaW50IHdhaXRfdHJhbnNhY3Rpb25fY29tcGxldGUoc3RydWN0IGFjcGlfc21iX2hjICpoYywgaW50IHRpbWVvdXQpCiB7Ci0JaWYgKHdhaXRfZXZlbnRfdGltZW91dChoYy0+d2FpdCwgc21iX2NoZWNrX2RvbmUoaGMpLAotCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCkpKQorCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQoaGMtPndhaXQsIGhjLT5kb25lLCBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKSkKIAkJcmV0dXJuIDA7Ci0JLyoKLQkgKiBBZnRlciB0aGUgdGltZW91dCBoYXBwZW5zLCBPUyB3aWxsIHRyeSB0byBjaGVjayB0aGUgc3RhdHVzIG9mIFNNYnVzLgotCSAqIElmIHRoZSBzdGF0dXMgaXMgd2hhdCBPUyBleHBlY3RlZCwgaXQgd2lsbCBiZSByZWdhcmRlZCBhcyB0aGUgYm9ndXMKLQkgKiB0aW1lb3V0LgotCSAqLwotCWlmIChzbWJfY2hlY2tfZG9uZShoYykpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FVElNRTsKKwlyZXR1cm4gLUVUSU1FOwogfQogCiBzdGF0aWMgaW50IGFjcGlfc21idXNfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfc21iX2hjICpoYywgdTggcHJvdG9jb2wsCkBAIC0xMzUsOCArMTE3LDcgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZoYy0+bG9jayk7Ci0JaWYgKG1hY2Jvb2spCi0JCXVkZWxheSg1KTsKKwloYy0+ZG9uZSA9IGZhbHNlOwogCWlmIChzbWJfaGNfcmVhZChoYywgQUNQSV9TTUJfUFJPVE9DT0wsICZ0ZW1wKSkKIAkJZ290byBlbmQ7CiAJaWYgKHRlbXApIHsKQEAgLTIzNSw4ICsyMTYsMTAgQEAKIAlpZiAoc21iX2hjX3JlYWQoaGMsIEFDUElfU01CX1NUQVRVUywgJnN0YXR1cy5yYXcpKQogCQlyZXR1cm4gMDsKIAkvKiBDaGVjayBpZiBpdCBpcyBvbmx5IGEgY29tcGxldGlvbiBub3RpZnkgKi8KLQlpZiAoc3RhdHVzLmZpZWxkcy5kb25lKQorCWlmIChzdGF0dXMuZmllbGRzLmRvbmUgJiYgc3RhdHVzLmZpZWxkcy5zdGF0dXMgPT0gU01CVVNfT0spIHsKKwkJaGMtPmRvbmUgPSB0cnVlOwogCQl3YWtlX3VwKCZoYy0+d2FpdCk7CisJfQogCWlmICghc3RhdHVzLmZpZWxkcy5hbGFybSkKIAkJcmV0dXJuIDA7CiAJbXV0ZXhfbG9jaygmaGMtPmxvY2spOwpAQCAtMjYyLDI5ICsyNDUsMTIgQEAKIAkJCSAgICAgIGFjcGlfaGFuZGxlIGhhbmRsZSwgYWNwaV9lY19xdWVyeV9mdW5jIGZ1bmMsCiAJCQkgICAgICB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBtYWNib29rX2RtaV9tYXRjaChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKLXsKLQlwcl9kZWJ1ZygiRGV0ZWN0ZWQgTWFjQm9vaywgZW5hYmxpbmcgd29ya2Fyb3VuZFxuIik7Ci0JbWFjYm9vayA9IHRydWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBhY3BpX3NtYnVzX2RtaV90YWJsZVtdID0gewotCXsgbWFjYm9va19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIiwgewotCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBcHBsZSIpLAotCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rIikgfSwKLQl9LAotCXsgfSwKLX07Ci0KIHN0YXRpYyBpbnQgYWNwaV9zbWJ1c19oY19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwogCXN0cnVjdCBhY3BpX3NtYl9oYyAqaGM7CiAKLQlkbWlfY2hlY2tfc3lzdGVtKGFjcGlfc21idXNfZG1pX3RhYmxlKTsKLQogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IGZmMDJiYjQuLmNkZmJjYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTMxNCwxNiArMzE0LDYgQEAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFmMzcpLCBib2FyZF9haGNpX2F2biB9LCAvKiBBdm90b24gUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWYzZSksIGJvYXJkX2FoY2lfYXZuIH0sIC8qIEF2b3RvbiBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZjNmKSwgYm9hcmRfYWhjaV9hdm4gfSwgLyogQXZvdG9uIFJBSUQgKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExODIpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBBSENJKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweGEyMDIpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBBSENJKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExODQpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBSQUlEKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweGEyMDQpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBSQUlEKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExODYpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBSQUlEKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweGEyMDYpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBSQUlEKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI4MjIpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBSQUlEKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI4MjYpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBSQUlEKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExOGUpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBSQUlEKi8KLQl7IFBDSV9WREVWSUNFKElOVEVMLCAweGEyMGUpLCBib2FyZF9haGNpIH0sIC8qIExld2lzYnVyZyBSQUlEKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI4MjMpLCBib2FyZF9haGNpIH0sIC8qIFdlbGxzYnVyZyBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyODI3KSwgYm9hcmRfYWhjaSB9LCAvKiBXZWxsc2J1cmcgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4OGQwMiksIGJvYXJkX2FoY2kgfSwgLyogV2VsbHNidXJnIEFIQ0kgKi8KQEAgLTM1MCwxMCArMzQwLDIyIEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHg5ZDAzKSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUxQIEFIQ0kgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDlkMDUpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtTFAgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4OWQwNyksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1MUCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTAyKSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUggQUhDSSAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4YTEwMyksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1IIEFIQ0kgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExMDUpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtSCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTA2KSwgYm9hcmRfYWhjaSB9LCAvKiBTdW5yaXNlIFBvaW50LUggUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4YTEwNyksIGJvYXJkX2FoY2kgfSwgLyogU3VucmlzZSBQb2ludC1IIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweGExMGYpLCBib2FyZF9haGNpIH0sIC8qIFN1bnJpc2UgUG9pbnQtSCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyODIyKSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgUkFJRCovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyODI2KSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgUkFJRCovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTgyKSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgQUhDSSovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTg0KSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgUkFJRCovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMTg2KSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgUkFJRCovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMThlKSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgUkFJRCovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMjAyKSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgQUhDSSovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMjA0KSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgUkFJRCovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMjA2KSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgUkFJRCovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHhhMjBlKSwgYm9hcmRfYWhjaSB9LCAvKiBMZXdpc2J1cmcgUkFJRCovCiAKIAkvKiBKTWljcm9uIDM2MC8xLzMvNS82LCBtYXRjaCBjbGFzcyB0byBhdm9pZCBJREUgZnVuY3Rpb24gKi8KIAl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2lfbXZlYnUuYyBiL2RyaXZlcnMvYXRhL2FoY2lfbXZlYnUuYwppbmRleCA4NDkwZDM3Li5mN2E3ZmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpX212ZWJ1LmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaV9tdmVidS5jCkBAIC02Miw2ICs2Miw3IEBACiAJd3JpdGVsKDB4ODAsIGhwcml2LT5tbWlvICsgQUhDSV9WRU5ET1JfU1BFQ0lGSUNfMF9EQVRBKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBhaGNpX212ZWJ1X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXJldHVybiBhaGNpX3BsYXRmb3JtX3N1c3BlbmRfaG9zdCgmcGRldi0+ZGV2KTsKQEAgLTgxLDYgKzgyLDEwIEBACiAKIAlyZXR1cm4gYWhjaV9wbGF0Zm9ybV9yZXN1bWVfaG9zdCgmcGRldi0+ZGV2KTsKIH0KKyNlbHNlCisjZGVmaW5lIGFoY2lfbXZlYnVfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGFoY2lfbXZlYnVfcmVzdW1lIE5VTEwKKyNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gYWhjaV9tdmVidV9wb3J0X2luZm8gPSB7CiAJLmZsYWdzCSAgID0gQUhDSV9GTEFHX0NPTU1PTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmFoY2kuYyBiL2RyaXZlcnMvYXRhL2xpYmFoY2kuYwppbmRleCAwOTYwNjRjLi40NjY1NTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhaGNpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYWhjaS5jCkBAIC0xMjczLDYgKzEyNzMsMTUgQEAKIAlhdGFfdGZfdG9fZmlzKHRmLCBwbXAsIGlzX2NtZCwgZmlzKTsKIAlhaGNpX2ZpbGxfY21kX3Nsb3QocHAsIDAsIGNtZF9maXNfbGVuIHwgZmxhZ3MgfCAocG1wIDw8IDEyKSk7CiAKKwkvKiBzZXQgcG9ydCB2YWx1ZSBmb3Igc29mdHJlc2V0IG9mIFBvcnQgTXVsdGlwbGllciAqLworCWlmIChwcC0+ZmJzX2VuYWJsZWQgJiYgcHAtPmZic19sYXN0X2RldiAhPSBwbXApIHsKKwkJdG1wID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9GQlMpOworCQl0bXAgJj0gfihQT1JUX0ZCU19ERVZfTUFTSyB8IFBPUlRfRkJTX0RFQyk7CisJCXRtcCB8PSBwbXAgPDwgUE9SVF9GQlNfREVWX09GRlNFVDsKKwkJd3JpdGVsKHRtcCwgcG9ydF9tbWlvICsgUE9SVF9GQlMpOworCQlwcC0+ZmJzX2xhc3RfZGV2ID0gcG1wOworCX0KKwogCS8qIGlzc3VlICYgd2FpdCAqLwogCXdyaXRlbCgxLCBwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggY2IwNTA4YS4uOTYxYWNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTE1MDUsMTIgKzE1MDUsMjAgQEAKIHVuc2lnbmVkIGludCBhdGFfcmVhZF9sb2dfcGFnZShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1OCBsb2csCiAJCQkgICAgICAgdTggcGFnZSwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc2VjdG9ycykKIHsKKwl1bnNpZ25lZCBsb25nIGFwX2ZsYWdzID0gZGV2LT5saW5rLT5hcC0+ZmxhZ3M7CiAJc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKIAl1bnNpZ25lZCBpbnQgZXJyX21hc2s7CiAJYm9vbCBkbWEgPSBmYWxzZTsKIAogCURQUklOVEsoInJlYWQgbG9nIHBhZ2UgLSBsb2cgMHgleCwgcGFnZSAweCV4XG4iLCBsb2csIHBhZ2UpOwogCisJLyoKKwkgKiBSZXR1cm4gZXJyb3Igd2l0aG91dCBhY3R1YWxseSBpc3N1aW5nIHRoZSBjb21tYW5kIG9uIGNvbnRyb2xsZXJzCisJICogd2hpY2ggZS5nLiBsb2NrdXAgb24gYSByZWFkIGxvZyBwYWdlLgorCSAqLworCWlmIChhcF9mbGFncyAmIEFUQV9GTEFHX05PX0xPR19QQUdFKQorCQlyZXR1cm4gQUNfRVJSX0RFVjsKKwogcmV0cnk6CiAJYXRhX3RmX2luaXQoZGV2LCAmdGYpOwogCWlmIChkZXYtPmRtYV9tb2RlICYmIGF0YV9pZF9oYXNfcmVhZF9sb2dfZG1hX2V4dChkZXYtPmlkKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9mc2wuYyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKaW5kZXggNTM4OTU3OS4uYTcyM2FlOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwpAQCAtNDUsNyArNDUsOCBAQAogCVNBVEFfRlNMX01BWF9QUkRfRElSRUNUCT0gMTYsCS8qIERpcmVjdCBQUkRUIGVudHJpZXMgKi8KIAogCVNBVEFfRlNMX0hPU1RfRkxBR1MJPSAoQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX1BJT19ETUEgfAotCQkJCUFUQV9GTEFHX1BNUCB8IEFUQV9GTEFHX05DUSB8IEFUQV9GTEFHX0FOKSwKKwkJCQkgICBBVEFfRkxBR19QTVAgfCBBVEFfRkxBR19OQ1EgfAorCQkJCSAgIEFUQV9GTEFHX0FOIHwgQVRBX0ZMQUdfTk9fTE9HX1BBR0UpLAogCiAJU0FUQV9GU0xfTUFYX0NNRFMJPSBTQVRBX0ZTTF9RVUVVRV9ERVBUSCwKIAlTQVRBX0ZTTF9DTURfSERSX1NJWkUJPSAxNiwJLyogNCBEV09SRFMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCmluZGV4IGRlYTZlZGNiLi4yOWJjZmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKQEAgLTYzMCw2ICs2MzAsOSBAQAogCXVuc2lnbmVkIGludCBuLCBxdWlya3MgPSAwOwogCXVuc2lnbmVkIGNoYXIgbW9kZWxfbnVtW0FUQV9JRF9QUk9EX0xFTiArIDFdOwogCisJLyogVGhpcyBjb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydCB0cmltICovCisJZGV2LT5ob3JrYWdlIHw9IEFUQV9IT1JLQUdFX05PVFJJTTsKKwogCWF0YV9pZF9jX3N0cmluZyhkZXYtPmlkLCBtb2RlbF9udW0sIEFUQV9JRF9QUk9ELCBzaXplb2YobW9kZWxfbnVtKSk7CiAKIAlmb3IgKG4gPSAwOyBzaWxfYmxhY2tsaXN0W25dLnByb2R1Y3Q7IG4rKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwppbmRleCAyODA0YWVkLi4yNTQyNWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKKysrIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCkBAIC0zMDMsNiArMzAzLDEwIEBACiAJaWYgKG1lbS0+c3RhdGUgPT0gTUVNX09GRkxJTkUpCiAJCXJldHVybiAwOwogCisJLyogQ2FuJ3Qgb2ZmbGluZSBibG9jayB3aXRoIG5vbi1wcmVzZW50IHNlY3Rpb25zICovCisJaWYgKG1lbS0+c2VjdGlvbl9jb3VudCAhPSBzZWN0aW9uc19wZXJfYmxvY2spCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIG1lbW9yeV9ibG9ja19jaGFuZ2Vfc3RhdGUobWVtLCBNRU1fT0ZGTElORSwgTUVNX09OTElORSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYwppbmRleCBlMDNiMWFkLi42NWY1MGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCkBAIC0zOTAsNiArMzkwLDcgQEAKIAlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdlbnBkOwogCWJvb2wgKCpzdG9wX29rKShzdHJ1Y3QgZGV2aWNlICpfX2Rldik7CiAJc3RydWN0IGdwZF90aW1pbmdfZGF0YSAqdGQgPSAmZGV2X2dwZF9kYXRhKGRldiktPnRkOworCWJvb2wgcnVudGltZV9wbSA9IHBtX3J1bnRpbWVfZW5hYmxlZChkZXYpOwogCWt0aW1lX3QgdGltZV9zdGFydDsKIAlzNjQgZWxhcHNlZF9uczsKIAlpbnQgcmV0OwpAQCAtNDAwLDEyICs0MDEsMTkgQEAKIAlpZiAoSVNfRVJSKGdlbnBkKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKgorCSAqIEEgcnVudGltZSBQTSBjZW50cmljIHN1YnN5c3RlbS9kcml2ZXIgbWF5IHJlLXVzZSB0aGUgcnVudGltZSBQTQorCSAqIGNhbGxiYWNrcyBmb3Igb3RoZXIgcHVycG9zZXMgdGhhbiBydW50aW1lIFBNLiBJbiB0aG9zZSBzY2VuYXJpb3MKKwkgKiBydW50aW1lIFBNIGlzIGRpc2FibGVkLiBVbmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzLCB3ZSBzaGFsbCBza2lwCisJICogdmFsaWRhdGluZy9tZWFzdXJpbmcgdGhlIFBNIFFvUyBsYXRlbmN5LgorCSAqLwogCXN0b3Bfb2sgPSBnZW5wZC0+Z292ID8gZ2VucGQtPmdvdi0+c3RvcF9vayA6IE5VTEw7Ci0JaWYgKHN0b3Bfb2sgJiYgIXN0b3Bfb2soZGV2KSkKKwlpZiAocnVudGltZV9wbSAmJiBzdG9wX29rICYmICFzdG9wX29rKGRldikpCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBNZWFzdXJlIHN1c3BlbmQgbGF0ZW5jeS4gKi8KLQl0aW1lX3N0YXJ0ID0ga3RpbWVfZ2V0KCk7CisJaWYgKHJ1bnRpbWVfcG0pCisJCXRpbWVfc3RhcnQgPSBrdGltZV9nZXQoKTsKIAogCXJldCA9IGdlbnBkX3NhdmVfZGV2KGdlbnBkLCBkZXYpOwogCWlmIChyZXQpCkBAIC00MTgsMTMgKzQyNiwxNSBAQAogCX0KIAogCS8qIFVwZGF0ZSBzdXNwZW5kIGxhdGVuY3kgdmFsdWUgaWYgdGhlIG1lYXN1cmVkIHRpbWUgZXhjZWVkcyBpdC4gKi8KLQllbGFwc2VkX25zID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKGt0aW1lX2dldCgpLCB0aW1lX3N0YXJ0KSk7Ci0JaWYgKGVsYXBzZWRfbnMgPiB0ZC0+c3VzcGVuZF9sYXRlbmN5X25zKSB7Ci0JCXRkLT5zdXNwZW5kX2xhdGVuY3lfbnMgPSBlbGFwc2VkX25zOwotCQlkZXZfZGJnKGRldiwgInN1c3BlbmQgbGF0ZW5jeSBleGNlZWRlZCwgJWxsZCBuc1xuIiwKLQkJCWVsYXBzZWRfbnMpOwotCQlnZW5wZC0+bWF4X29mZl90aW1lX2NoYW5nZWQgPSB0cnVlOwotCQl0ZC0+Y29uc3RyYWludF9jaGFuZ2VkID0gdHJ1ZTsKKwlpZiAocnVudGltZV9wbSkgeworCQllbGFwc2VkX25zID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKGt0aW1lX2dldCgpLCB0aW1lX3N0YXJ0KSk7CisJCWlmIChlbGFwc2VkX25zID4gdGQtPnN1c3BlbmRfbGF0ZW5jeV9ucykgeworCQkJdGQtPnN1c3BlbmRfbGF0ZW5jeV9ucyA9IGVsYXBzZWRfbnM7CisJCQlkZXZfZGJnKGRldiwgInN1c3BlbmQgbGF0ZW5jeSBleGNlZWRlZCwgJWxsZCBuc1xuIiwKKwkJCQllbGFwc2VkX25zKTsKKwkJCWdlbnBkLT5tYXhfb2ZmX3RpbWVfY2hhbmdlZCA9IHRydWU7CisJCQl0ZC0+Y29uc3RyYWludF9jaGFuZ2VkID0gdHJ1ZTsKKwkJfQogCX0KIAogCS8qCkBAIC00NTMsNiArNDYzLDcgQEAKIHsKIAlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdlbnBkOwogCXN0cnVjdCBncGRfdGltaW5nX2RhdGEgKnRkID0gJmRldl9ncGRfZGF0YShkZXYpLT50ZDsKKwlib29sIHJ1bnRpbWVfcG0gPSBwbV9ydW50aW1lX2VuYWJsZWQoZGV2KTsKIAlrdGltZV90IHRpbWVfc3RhcnQ7CiAJczY0IGVsYXBzZWRfbnM7CiAJaW50IHJldDsKQEAgLTQ3OSwxNCArNDkwLDE0IEBACiAKICBvdXQ6CiAJLyogTWVhc3VyZSByZXN1bWUgbGF0ZW5jeS4gKi8KLQlpZiAodGltZWQpCisJaWYgKHRpbWVkICYmIHJ1bnRpbWVfcG0pCiAJCXRpbWVfc3RhcnQgPSBrdGltZV9nZXQoKTsKIAogCWdlbnBkX3N0YXJ0X2RldihnZW5wZCwgZGV2KTsKIAlnZW5wZF9yZXN0b3JlX2RldihnZW5wZCwgZGV2KTsKIAogCS8qIFVwZGF0ZSByZXN1bWUgbGF0ZW5jeSB2YWx1ZSBpZiB0aGUgbWVhc3VyZWQgdGltZSBleGNlZWRzIGl0LiAqLwotCWlmICh0aW1lZCkgeworCWlmICh0aW1lZCAmJiBydW50aW1lX3BtKSB7CiAJCWVsYXBzZWRfbnMgPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksIHRpbWVfc3RhcnQpKTsKIAkJaWYgKGVsYXBzZWRfbnMgPiB0ZC0+cmVzdW1lX2xhdGVuY3lfbnMpIHsKIAkJCXRkLT5yZXN1bWVfbGF0ZW5jeV9ucyA9IGVsYXBzZWRfbnM7CkBAIC0xNzc1LDEwICsxNzg2LDEwIEBACiAJfQogCiAJcGQgPSBvZl9nZW5wZF9nZXRfZnJvbV9wcm92aWRlcigmcGRfYXJncyk7CisJb2Zfbm9kZV9wdXQocGRfYXJncy5ucCk7CiAJaWYgKElTX0VSUihwZCkpIHsKIAkJZGV2X2RiZyhkZXYsICIlcygpIGZhaWxlZCB0byBmaW5kIFBNIGRvbWFpbjogJWxkXG4iLAogCQkJX19mdW5jX18sIFBUUl9FUlIocGQpKTsKLQkJb2Zfbm9kZV9wdXQoZGV2LT5vZl9ub2RlKTsKIAkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CiAJfQogCkBAIC0xNzk2LDcgKzE4MDcsNiBAQAogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCB0byBQTSBkb21haW4gJXM6ICVkIiwKIAkJCXBkLT5uYW1lLCByZXQpOwotCQlvZl9ub2RlX3B1dChkZXYtPm9mX25vZGUpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW5fZ292ZXJub3IuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW5fZ292ZXJub3IuYwppbmRleCBlNjBkZDEyLi4xZTkzN2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluX2dvdmVybm9yLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbl9nb3Zlcm5vci5jCkBAIC0xNjAsOSArMTYwLDYgQEAKIAkJc3RydWN0IGdwZF90aW1pbmdfZGF0YSAqdGQ7CiAJCXM2NCBjb25zdHJhaW50X25zOwogCi0JCWlmICghcGRkLT5kZXYtPmRyaXZlcikKLQkJCWNvbnRpbnVlOwotCiAJCS8qCiAJCSAqIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYWxsb3dlZCB0byBiZSBvZmYgbG9uZyBlbm91Z2ggZm9yIHRoZQogCQkgKiBkb21haW4gdG8gdHVybiBvZmYgYW5kIG9uICh0aGF0J3MgaG93IG11Y2ggdGltZSBpdCB3aWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZWlycS5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2VpcnEuYwppbmRleCBlYjZlNjc0Li4wZDc3Y2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZWlycS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci93YWtlaXJxLmMKQEAgLTY4LDYgKzY4LDkgQEAKIAlzdHJ1Y3Qgd2FrZV9pcnEgKndpcnE7CiAJaW50IGVycjsKIAorCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXdpcnEgPSBremFsbG9jKHNpemVvZigqd2lycSksIEdGUF9LRVJORUwpOwogCWlmICghd2lycSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNjcsNiArMTcwLDkgQEAKIAlzdHJ1Y3Qgd2FrZV9pcnEgKndpcnE7CiAJaW50IGVycjsKIAorCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXdpcnEgPSBremFsbG9jKHNpemVvZigqd2lycSksIEdGUF9LRVJORUwpOwogCWlmICghd2lycSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMgYi9kcml2ZXJzL2Jsb2NrL210aXAzMnh4L210aXAzMnh4LmMKaW5kZXggYTI4YTU2Mi4uMzQ1N2FjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9tdGlwMzJ4eC9tdGlwMzJ4eC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbXRpcDMyeHgvbXRpcDMyeHguYwpAQCAtMzgxMCw3ICszODEwLDYgQEAKIAlzZWN0b3JfdCBjYXBhY2l0eTsKIAl1bnNpZ25lZCBpbnQgaW5kZXggPSAwOwogCXN0cnVjdCBrb2JqZWN0ICprb2JqOwotCXVuc2lnbmVkIGNoYXIgdGhkX25hbWVbMTZdOwogCiAJaWYgKGRkLT5kaXNrKQogCQlnb3RvIHNraXBfY3JlYXRlX2Rpc2s7IC8qIGh3IGluaXQgZG9uZSwgYmVmb3JlIHJlYnVpbGQgKi8KQEAgLTM5NTgsMTAgKzM5NTcsOSBAQAogCX0KIAogc3RhcnRfc2VydmljZV90aHJlYWQ6Ci0Jc3ByaW50Zih0aGRfbmFtZSwgIm10aXBfc3ZjX3RoZF8lMDJkIiwgaW5kZXgpOwogCWRkLT5tdGlwX3N2Y19oYW5kbGVyID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShtdGlwX3NlcnZpY2VfdGhyZWFkLAotCQkJCQkJZGQsIGRkLT5udW1hX25vZGUsICIlcyIsCi0JCQkJCQl0aGRfbmFtZSk7CisJCQkJCQlkZCwgZGQtPm51bWFfbm9kZSwKKwkJCQkJCSJtdGlwX3N2Y190aGRfJTAyZCIsIGluZGV4KTsKIAogCWlmIChJU19FUlIoZGQtPm10aXBfc3ZjX2hhbmRsZXIpKSB7CiAJCWRldl9lcnIoJmRkLT5wZGV2LT5kZXYsICJzZXJ2aWNlIHRocmVhZCBmYWlsZWQgdG8gc3RhcnRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay5jIGIvZHJpdmVycy9ibG9jay9udWxsX2Jsay5jCmluZGV4IDYyNTVkMWMuLjA5ZTNjMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsay1tcS5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saWdodG52bS5oPgogCiBzdHJ1Y3QgbnVsbGJfY21kIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0xNyw2ICsxOCw3IEBACiAJc3RydWN0IGJpbyAqYmlvOwogCXVuc2lnbmVkIGludCB0YWc7CiAJc3RydWN0IG51bGxiX3F1ZXVlICpucTsKKwlzdHJ1Y3QgaHJ0aW1lciB0aW1lcjsKIH07CiAKIHN0cnVjdCBudWxsYl9xdWV1ZSB7CkBAIC0zOSwyMyArNDEsMTQgQEAKIAogCXN0cnVjdCBudWxsYl9xdWV1ZSAqcXVldWVzOwogCXVuc2lnbmVkIGludCBucl9xdWV1ZXM7CisJY2hhciBkaXNrX25hbWVbRElTS19OQU1FX0xFTl07CiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKG51bGxiX2xpc3QpOwogc3RhdGljIHN0cnVjdCBtdXRleCBsb2NrOwogc3RhdGljIGludCBudWxsX21ham9yOwogc3RhdGljIGludCBudWxsYl9pbmRleGVzOwotCi1zdHJ1Y3QgY29tcGxldGlvbl9xdWV1ZSB7Ci0Jc3RydWN0IGxsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgaHJ0aW1lciB0aW1lcjsKLX07Ci0KLS8qCi0gKiBUaGVzZSBhcmUgcGVyLWNwdSBmb3Igbm93LCB0aGV5IHdpbGwgbmVlZCB0byBiZSBjb25maWd1cmVkIGJ5IHRoZQotICogY29tcGxldGVfcXVldWVzIHBhcmFtZXRlciBhbmQgYXBwcm9wcmlhdGVseSBtYXBwZWQuCi0gKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY29tcGxldGlvbl9xdWV1ZSwgY29tcGxldGlvbl9xdWV1ZXMpOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwcGFfY2FjaGU7CiAKIGVudW0gewogCU5VTExfSVJRX05PTkUJCT0gMCwKQEAgLTExOSw2ICsxMTIsMTAgQEAKIG1vZHVsZV9wYXJhbShucl9kZXZpY2VzLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhucl9kZXZpY2VzLCAiTnVtYmVyIG9mIGRldmljZXMgdG8gcmVnaXN0ZXIiKTsKIAorc3RhdGljIGJvb2wgdXNlX2xpZ2h0bnZtOworbW9kdWxlX3BhcmFtKHVzZV9saWdodG52bSwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9saWdodG52bSwgIlJlZ2lzdGVyIGFzIGEgTGlnaHROVk0gZGV2aWNlIik7CisKIHN0YXRpYyBpbnQgaXJxbW9kZSA9IE5VTExfSVJRX1NPRlRJUlE7CiAKIHN0YXRpYyBpbnQgbnVsbF9zZXRfaXJxbW9kZShjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQpAQCAtMTM1LDggKzEzMiw4IEBACiBkZXZpY2VfcGFyYW1fY2IoaXJxbW9kZSwgJm51bGxfaXJxbW9kZV9wYXJhbV9vcHMsICZpcnFtb2RlLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxbW9kZSwgIklSUSBjb21wbGV0aW9uIGhhbmRsZXIuIDAtbm9uZSwgMS1zb2Z0aXJxLCAyLXRpbWVyIik7CiAKLXN0YXRpYyBpbnQgY29tcGxldGlvbl9uc2VjID0gMTAwMDA7Ci1tb2R1bGVfcGFyYW0oY29tcGxldGlvbl9uc2VjLCBpbnQsIFNfSVJVR08pOworc3RhdGljIHVuc2lnbmVkIGxvbmcgY29tcGxldGlvbl9uc2VjID0gMTAwMDA7Cittb2R1bGVfcGFyYW0oY29tcGxldGlvbl9uc2VjLCB1bG9uZywgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGNvbXBsZXRpb25fbnNlYywgIlRpbWUgaW4gbnMgdG8gY29tcGxldGUgYSByZXF1ZXN0IGluIGhhcmR3YXJlLiBEZWZhdWx0OiAxMCwwMDBucyIpOwogCiBzdGF0aWMgaW50IGh3X3F1ZXVlX2RlcHRoID0gNjQ7CkBAIC0xNzMsNiArMTcwLDggQEAKIAlwdXRfdGFnKGNtZC0+bnEsIGNtZC0+dGFnKTsKIH0KIAorc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IG51bGxfY21kX3RpbWVyX2V4cGlyZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKTsKKwogc3RhdGljIHN0cnVjdCBudWxsYl9jbWQgKl9fYWxsb2NfY21kKHN0cnVjdCBudWxsYl9xdWV1ZSAqbnEpCiB7CiAJc3RydWN0IG51bGxiX2NtZCAqY21kOwpAQCAtMTgzLDYgKzE4MiwxMSBAQAogCQljbWQgPSAmbnEtPmNtZHNbdGFnXTsKIAkJY21kLT50YWcgPSB0YWc7CiAJCWNtZC0+bnEgPSBucTsKKwkJaWYgKGlycW1vZGUgPT0gTlVMTF9JUlFfVElNRVIpIHsKKwkJCWhydGltZXJfaW5pdCgmY21kLT50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLAorCQkJCSAgICAgSFJUSU1FUl9NT0RFX1JFTCk7CisJCQljbWQtPnRpbWVyLmZ1bmN0aW9uID0gbnVsbF9jbWRfdGltZXJfZXhwaXJlZDsKKwkJfQogCQlyZXR1cm4gY21kOwogCX0KIApAQCAtMjEzLDYgKzIxNywxMSBAQAogCiBzdGF0aWMgdm9pZCBlbmRfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCkKIHsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IE5VTEw7CisKKwlpZiAoY21kLT5ycSkKKwkJcSA9IGNtZC0+cnEtPnE7CisKIAlzd2l0Y2ggKHF1ZXVlX21vZGUpICB7CiAJY2FzZSBOVUxMX1FfTVE6CiAJCWJsa19tcV9lbmRfcmVxdWVzdChjbWQtPnJxLCAwKTsKQEAgLTIyNyw1MSArMjM2LDI5IEBACiAJfQogCiAJZnJlZV9jbWQoY21kKTsKKworCS8qIFJlc3RhcnQgcXVldWUgaWYgbmVlZGVkLCBhcyB3ZSBhcmUgZnJlZWluZyBhIHRhZyAqLworCWlmIChxdWV1ZV9tb2RlID09IE5VTExfUV9SUSAmJiBibGtfcXVldWVfc3RvcHBlZChxKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwkJYmxrX3N0YXJ0X3F1ZXVlX2FzeW5jKHEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwl9CiB9CiAKIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBudWxsX2NtZF90aW1lcl9leHBpcmVkKHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKLQlzdHJ1Y3QgY29tcGxldGlvbl9xdWV1ZSAqY3E7Ci0Jc3RydWN0IGxsaXN0X25vZGUgKmVudHJ5OwotCXN0cnVjdCBudWxsYl9jbWQgKmNtZDsKLQotCWNxID0gJnBlcl9jcHUoY29tcGxldGlvbl9xdWV1ZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQl3aGlsZSAoKGVudHJ5ID0gbGxpc3RfZGVsX2FsbCgmY3EtPmxpc3QpKSAhPSBOVUxMKSB7Ci0JCWVudHJ5ID0gbGxpc3RfcmV2ZXJzZV9vcmRlcihlbnRyeSk7Ci0JCWRvIHsKLQkJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gTlVMTDsKLQotCQkJY21kID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgbnVsbGJfY21kLCBsbF9saXN0KTsKLQkJCWVudHJ5ID0gZW50cnktPm5leHQ7Ci0JCQlpZiAoY21kLT5ycSkKLQkJCQlxID0gY21kLT5ycS0+cTsKLQkJCWVuZF9jbWQoY21kKTsKLQotCQkJaWYgKHEgJiYgIXEtPm1xX29wcyAmJiBibGtfcXVldWVfc3RvcHBlZChxKSkgewotCQkJCXNwaW5fbG9jayhxLT5xdWV1ZV9sb2NrKTsKLQkJCQlpZiAoYmxrX3F1ZXVlX3N0b3BwZWQocSkpCi0JCQkJCWJsa19zdGFydF9xdWV1ZShxKTsKLQkJCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKLQkJCX0KLQkJfSB3aGlsZSAoZW50cnkpOwotCX0KKwllbmRfY21kKGNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IG51bGxiX2NtZCwgdGltZXIpKTsKIAogCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIH0KIAogc3RhdGljIHZvaWQgbnVsbF9jbWRfZW5kX3RpbWVyKHN0cnVjdCBudWxsYl9jbWQgKmNtZCkKIHsKLQlzdHJ1Y3QgY29tcGxldGlvbl9xdWV1ZSAqY3EgPSAmcGVyX2NwdShjb21wbGV0aW9uX3F1ZXVlcywgZ2V0X2NwdSgpKTsKKwlrdGltZV90IGt0ID0ga3RpbWVfc2V0KDAsIGNvbXBsZXRpb25fbnNlYyk7CiAKLQljbWQtPmxsX2xpc3QubmV4dCA9IE5VTEw7Ci0JaWYgKGxsaXN0X2FkZCgmY21kLT5sbF9saXN0LCAmY3EtPmxpc3QpKSB7Ci0JCWt0aW1lX3Qga3QgPSBrdGltZV9zZXQoMCwgY29tcGxldGlvbl9uc2VjKTsKLQotCQlocnRpbWVyX3N0YXJ0KCZjcS0+dGltZXIsIGt0LCBIUlRJTUVSX01PREVfUkVMX1BJTk5FRCk7Ci0JfQotCi0JcHV0X2NwdSgpOworCWhydGltZXJfc3RhcnQoJmNtZC0+dGltZXIsIGt0LCBIUlRJTUVSX01PREVfUkVMKTsKIH0KIAogc3RhdGljIHZvaWQgbnVsbF9zb2Z0aXJxX2RvbmVfZm4oc3RydWN0IHJlcXVlc3QgKnJxKQpAQCAtMzY5LDYgKzM1NiwxMCBAQAogewogCXN0cnVjdCBudWxsYl9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUoYmQtPnJxKTsKIAorCWlmIChpcnFtb2RlID09IE5VTExfSVJRX1RJTUVSKSB7CisJCWhydGltZXJfaW5pdCgmY21kLT50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKwkJY21kLT50aW1lci5mdW5jdGlvbiA9IG51bGxfY21kX3RpbWVyX2V4cGlyZWQ7CisJfQogCWNtZC0+cnEgPSBiZC0+cnE7CiAJY21kLT5ucSA9IGhjdHgtPmRyaXZlcl9kYXRhOwogCkBAIC00MjcsMTUgKzQxOCwxNTcgQEAKIHsKIAlsaXN0X2RlbF9pbml0KCZudWxsYi0+bGlzdCk7CiAKLQlkZWxfZ2VuZGlzayhudWxsYi0+ZGlzayk7CisJaWYgKHVzZV9saWdodG52bSkKKwkJbnZtX3VucmVnaXN0ZXIobnVsbGItPmRpc2tfbmFtZSk7CisJZWxzZQorCQlkZWxfZ2VuZGlzayhudWxsYi0+ZGlzayk7CiAJYmxrX2NsZWFudXBfcXVldWUobnVsbGItPnEpOwogCWlmIChxdWV1ZV9tb2RlID09IE5VTExfUV9NUSkKIAkJYmxrX21xX2ZyZWVfdGFnX3NldCgmbnVsbGItPnRhZ19zZXQpOwotCXB1dF9kaXNrKG51bGxiLT5kaXNrKTsKKwlpZiAoIXVzZV9saWdodG52bSkKKwkJcHV0X2Rpc2sobnVsbGItPmRpc2spOwogCWNsZWFudXBfcXVldWVzKG51bGxiKTsKIAlrZnJlZShudWxsYik7CiB9CiAKKyNpZmRlZiBDT05GSUdfTlZNCisKK3N0YXRpYyB2b2lkIG51bGxfbG52bV9lbmRfaW8oc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpCit7CisJc3RydWN0IG52bV9ycSAqcnFkID0gcnEtPmVuZF9pb19kYXRhOworCXN0cnVjdCBudm1fZGV2ICpkZXYgPSBycWQtPmRldjsKKworCWRldi0+bXQtPmVuZF9pbyhycWQsIGVycm9yKTsKKworCWJsa19wdXRfcmVxdWVzdChycSk7Cit9CisKK3N0YXRpYyBpbnQgbnVsbF9sbnZtX3N1Ym1pdF9pbyhzdHJ1Y3QgbnZtX2RldiAqZGV2LCBzdHJ1Y3QgbnZtX3JxICpycWQpCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkZXYtPnE7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCXN0cnVjdCBiaW8gKmJpbyA9IHJxZC0+YmlvOworCisJcnEgPSBibGtfbXFfYWxsb2NfcmVxdWVzdChxLCBiaW9fcncoYmlvKSwgR0ZQX0tFUk5FTCwgMCk7CisJaWYgKElTX0VSUihycSkpCisJCXJldHVybiAtRU5PTUVNOworCisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfRFJWX1BSSVY7CisJcnEtPl9fc2VjdG9yID0gYmlvLT5iaV9pdGVyLmJpX3NlY3RvcjsKKwlycS0+aW9wcmlvID0gYmlvX3ByaW8oYmlvKTsKKworCWlmIChiaW9faGFzX2RhdGEoYmlvKSkKKwkJcnEtPm5yX3BoeXNfc2VnbWVudHMgPSBiaW9fcGh5c19zZWdtZW50cyhxLCBiaW8pOworCisJcnEtPl9fZGF0YV9sZW4gPSBiaW8tPmJpX2l0ZXIuYmlfc2l6ZTsKKwlycS0+YmlvID0gcnEtPmJpb3RhaWwgPSBiaW87CisKKwlycS0+ZW5kX2lvX2RhdGEgPSBycWQ7CisKKwlibGtfZXhlY3V0ZV9ycV9ub3dhaXQocSwgTlVMTCwgcnEsIDAsIG51bGxfbG52bV9lbmRfaW8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnVsbF9sbnZtX2lkKHN0cnVjdCBudm1fZGV2ICpkZXYsIHN0cnVjdCBudm1faWQgKmlkKQoreworCXNlY3Rvcl90IHNpemUgPSBnYiAqIDEwMjQgKiAxMDI0ICogMTAyNFVMTDsKKwlzZWN0b3JfdCBibGtzaXplOworCXN0cnVjdCBudm1faWRfZ3JvdXAgKmdycDsKKworCWlkLT52ZXJfaWQgPSAweDE7CisJaWQtPnZtbnQgPSAwOworCWlkLT5jZ3JwcyA9IDE7CisJaWQtPmNhcCA9IDB4MzsKKwlpZC0+ZG9tID0gMHgxOworCisJaWQtPnBwYWYuYmxrX29mZnNldCA9IDA7CisJaWQtPnBwYWYuYmxrX2xlbiA9IDE2OworCWlkLT5wcGFmLnBnX29mZnNldCA9IDE2OworCWlkLT5wcGFmLnBnX2xlbiA9IDE2OworCWlkLT5wcGFmLnNlY3Rfb2Zmc2V0ID0gMzI7CisJaWQtPnBwYWYuc2VjdF9sZW4gPSA4OworCWlkLT5wcGFmLnBsbl9vZmZzZXQgPSA0MDsKKwlpZC0+cHBhZi5wbG5fbGVuID0gODsKKwlpZC0+cHBhZi5sdW5fb2Zmc2V0ID0gNDg7CisJaWQtPnBwYWYubHVuX2xlbiA9IDg7CisJaWQtPnBwYWYuY2hfb2Zmc2V0ID0gNTY7CisJaWQtPnBwYWYuY2hfbGVuID0gODsKKworCWRvX2RpdihzaXplLCBicyk7IC8qIGNvbnZlcnQgc2l6ZSB0byBwYWdlcyAqLworCWRvX2RpdihzaXplLCAyNTYpOyAvKiBjb25jZXJ0IHNpemUgdG8gcGdzIHByIGJsayAqLworCWdycCA9ICZpZC0+Z3JvdXBzWzBdOworCWdycC0+bXR5cGUgPSAwOworCWdycC0+Zm10eXBlID0gMDsKKwlncnAtPm51bV9jaCA9IDE7CisJZ3JwLT5udW1fcGcgPSAyNTY7CisJYmxrc2l6ZSA9IHNpemU7CisJZG9fZGl2KHNpemUsICgxIDw8IDE2KSk7CisJZ3JwLT5udW1fbHVuID0gc2l6ZSArIDE7CisJZG9fZGl2KGJsa3NpemUsIGdycC0+bnVtX2x1bik7CisJZ3JwLT5udW1fYmxrID0gYmxrc2l6ZTsKKwlncnAtPm51bV9wbG4gPSAxOworCisJZ3JwLT5mcGdfc3ogPSBiczsKKwlncnAtPmNzZWNzID0gYnM7CisJZ3JwLT50cmR0ID0gMjUwMDA7CisJZ3JwLT50cmRtID0gMjUwMDA7CisJZ3JwLT50cHJ0ID0gNTAwMDAwOworCWdycC0+dHBybSA9IDUwMDAwMDsKKwlncnAtPnRiZXQgPSAxNTAwMDAwOworCWdycC0+dGJlbSA9IDE1MDAwMDA7CisJZ3JwLT5tcG9zID0gMHgwMTAxMDE7IC8qIHNpbmdsZSBwbGFuZSByd2UgKi8KKwlncnAtPmNwYXIgPSBod19xdWV1ZV9kZXB0aDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqbnVsbF9sbnZtX2NyZWF0ZV9kbWFfcG9vbChzdHJ1Y3QgbnZtX2RldiAqZGV2LCBjaGFyICpuYW1lKQoreworCW1lbXBvb2xfdCAqdmlydG1lbV9wb29sOworCisJdmlydG1lbV9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKDY0LCBwcGFfY2FjaGUpOworCWlmICghdmlydG1lbV9wb29sKSB7CisJCXByX2VycigibnVsbF9ibGs6IFVuYWJsZSB0byBjcmVhdGUgdmlydHVhbCBtZW1vcnkgcG9vbFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiB2aXJ0bWVtX3Bvb2w7Cit9CisKK3N0YXRpYyB2b2lkIG51bGxfbG52bV9kZXN0cm95X2RtYV9wb29sKHZvaWQgKnBvb2wpCit7CisJbWVtcG9vbF9kZXN0cm95KHBvb2wpOworfQorCitzdGF0aWMgdm9pZCAqbnVsbF9sbnZtX2Rldl9kbWFfYWxsb2Moc3RydWN0IG52bV9kZXYgKmRldiwgdm9pZCAqcG9vbCwKKwkJCQlnZnBfdCBtZW1fZmxhZ3MsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGVyKQoreworCXJldHVybiBtZW1wb29sX2FsbG9jKHBvb2wsIG1lbV9mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG51bGxfbG52bV9kZXZfZG1hX2ZyZWUodm9pZCAqcG9vbCwgdm9pZCAqZW50cnksCisJCQkJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlcikKK3sKKwltZW1wb29sX2ZyZWUoZW50cnksIHBvb2wpOworfQorCitzdGF0aWMgc3RydWN0IG52bV9kZXZfb3BzIG51bGxfbG52bV9kZXZfb3BzID0geworCS5pZGVudGl0eQkJPSBudWxsX2xudm1faWQsCisJLnN1Ym1pdF9pbwkJPSBudWxsX2xudm1fc3VibWl0X2lvLAorCisJLmNyZWF0ZV9kbWFfcG9vbAk9IG51bGxfbG52bV9jcmVhdGVfZG1hX3Bvb2wsCisJLmRlc3Ryb3lfZG1hX3Bvb2wJPSBudWxsX2xudm1fZGVzdHJveV9kbWFfcG9vbCwKKwkuZGV2X2RtYV9hbGxvYwkJPSBudWxsX2xudm1fZGV2X2RtYV9hbGxvYywKKwkuZGV2X2RtYV9mcmVlCQk9IG51bGxfbG52bV9kZXZfZG1hX2ZyZWUsCisKKwkvKiBTaW11bGF0ZSBudm1lIHByb3RvY29sIHJlc3RyaWN0aW9uICovCisJLm1heF9waHlzX3NlY3QJCT0gNjQsCit9OworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgbnZtX2Rldl9vcHMgbnVsbF9sbnZtX2Rldl9vcHM7CisjZW5kaWYgLyogQ09ORklHX05WTSAqLworCiBzdGF0aWMgaW50IG51bGxfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIDA7CkBAIC01NzUsMTEgKzcwOCw2IEBACiAJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIG51bGxiLT5xKTsKIAlxdWV1ZV9mbGFnX2NsZWFyX3VubG9ja2VkKFFVRVVFX0ZMQUdfQUREX1JBTkRPTSwgbnVsbGItPnEpOwogCi0JZGlzayA9IG51bGxiLT5kaXNrID0gYWxsb2NfZGlza19ub2RlKDEsIGhvbWVfbm9kZSk7Ci0JaWYgKCFkaXNrKSB7Ci0JCXJ2ID0gLUVOT01FTTsKLQkJZ290byBvdXRfY2xlYW51cF9ibGtfcXVldWU7Ci0JfQogCiAJbXV0ZXhfbG9jaygmbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmbnVsbGItPmxpc3QsICZudWxsYl9saXN0KTsKQEAgLTU4OSw2ICs3MTcsMjEgQEAKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKG51bGxiLT5xLCBicyk7CiAJYmxrX3F1ZXVlX3BoeXNpY2FsX2Jsb2NrX3NpemUobnVsbGItPnEsIGJzKTsKIAorCXNwcmludGYobnVsbGItPmRpc2tfbmFtZSwgIm51bGxiJWQiLCBudWxsYi0+aW5kZXgpOworCisJaWYgKHVzZV9saWdodG52bSkgeworCQlydiA9IG52bV9yZWdpc3RlcihudWxsYi0+cSwgbnVsbGItPmRpc2tfbmFtZSwKKwkJCQkJCQkmbnVsbF9sbnZtX2Rldl9vcHMpOworCQlpZiAocnYpCisJCQlnb3RvIG91dF9jbGVhbnVwX2Jsa19xdWV1ZTsKKwkJZ290byBkb25lOworCX0KKworCWRpc2sgPSBudWxsYi0+ZGlzayA9IGFsbG9jX2Rpc2tfbm9kZSgxLCBob21lX25vZGUpOworCWlmICghZGlzaykgeworCQlydiA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2NsZWFudXBfbGlnaHRudm07CisJfQogCXNpemUgPSBnYiAqIDEwMjQgKiAxMDI0ICogMTAyNFVMTDsKIAlzZXRfY2FwYWNpdHkoZGlzaywgc2l6ZSA+PiA5KTsKIApAQCAtNTk4LDEwICs3NDEsMTUgQEAKIAlkaXNrLT5mb3BzCQk9ICZudWxsX2ZvcHM7CiAJZGlzay0+cHJpdmF0ZV9kYXRhCT0gbnVsbGI7CiAJZGlzay0+cXVldWUJCT0gbnVsbGItPnE7Ci0Jc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJudWxsYiVkIiwgbnVsbGItPmluZGV4KTsKKwlzdHJuY3B5KGRpc2stPmRpc2tfbmFtZSwgbnVsbGItPmRpc2tfbmFtZSwgRElTS19OQU1FX0xFTik7CisKIAlhZGRfZGlzayhkaXNrKTsKK2RvbmU6CiAJcmV0dXJuIDA7CiAKK291dF9jbGVhbnVwX2xpZ2h0bnZtOgorCWlmICh1c2VfbGlnaHRudm0pCisJCW52bV91bnJlZ2lzdGVyKG51bGxiLT5kaXNrX25hbWUpOwogb3V0X2NsZWFudXBfYmxrX3F1ZXVlOgogCWJsa19jbGVhbnVwX3F1ZXVlKG51bGxiLT5xKTsKIG91dF9jbGVhbnVwX3RhZ3M6CkBAIC02MTcsNyArNzY1LDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgbnVsbF9pbml0KHZvaWQpCiB7CisJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IG51bGxiICpudWxsYjsKIAogCWlmIChicyA+IFBBR0VfU0laRSkgewogCQlwcl93YXJuKCJudWxsX2JsazogaW52YWxpZCBibG9jayBzaXplXG4iKTsKQEAgLTYyNSw2ICs3NzUsMTggQEAKIAkJYnMgPSBQQUdFX1NJWkU7CiAJfQogCisJaWYgKHVzZV9saWdodG52bSAmJiBicyAhPSA0MDk2KSB7CisJCXByX3dhcm4oIm51bGxfYmxrOiBMaWdodE5WTSBvbmx5IHN1cHBvcnRzIDRrIGJsb2NrIHNpemVcbiIpOworCQlwcl93YXJuKCJudWxsX2JsazogZGVmYXVsdHMgYmxvY2sgc2l6ZSB0byA0a1xuIik7CisJCWJzID0gNDA5NjsKKwl9CisKKwlpZiAodXNlX2xpZ2h0bnZtICYmIHF1ZXVlX21vZGUgIT0gTlVMTF9RX01RKSB7CisJCXByX3dhcm4oIm51bGxfYmxrOiBMaWdodE5WTSBvbmx5IHN1cHBvcnRlZCBmb3IgYmxrLW1xXG4iKTsKKwkJcHJfd2FybigibnVsbF9ibGs6IGRlZmF1bHRzIHF1ZXVlIG1vZGUgdG8gYmxrLW1xXG4iKTsKKwkJcXVldWVfbW9kZSA9IE5VTExfUV9NUTsKKwl9CisKIAlpZiAocXVldWVfbW9kZSA9PSBOVUxMX1FfTVEgJiYgdXNlX3Blcl9ub2RlX2hjdHgpIHsKIAkJaWYgKHN1Ym1pdF9xdWV1ZXMgPCBucl9vbmxpbmVfbm9kZXMpIHsKIAkJCXByX3dhcm4oIm51bGxfYmxrOiBzdWJtaXRfcXVldWVzIHBhcmFtIGlzIHNldCB0byAldS4iLApAQCAtNjM4LDMyICs4MDAsMzggQEAKIAogCW11dGV4X2luaXQoJmxvY2spOwogCi0JLyogSW5pdGlhbGl6ZSBhIHNlcGFyYXRlIGxpc3QgZm9yIGVhY2ggQ1BVIGZvciBpc3N1aW5nIHNvZnRpcnFzICovCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJc3RydWN0IGNvbXBsZXRpb25fcXVldWUgKmNxID0gJnBlcl9jcHUoY29tcGxldGlvbl9xdWV1ZXMsIGkpOwotCi0JCWluaXRfbGxpc3RfaGVhZCgmY3EtPmxpc3QpOwotCi0JCWlmIChpcnFtb2RlICE9IE5VTExfSVJRX1RJTUVSKQotCQkJY29udGludWU7Ci0KLQkJaHJ0aW1lcl9pbml0KCZjcS0+dGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7Ci0JCWNxLT50aW1lci5mdW5jdGlvbiA9IG51bGxfY21kX3RpbWVyX2V4cGlyZWQ7Ci0JfQotCiAJbnVsbF9tYWpvciA9IHJlZ2lzdGVyX2Jsa2RldigwLCAibnVsbGIiKTsKIAlpZiAobnVsbF9tYWpvciA8IDApCiAJCXJldHVybiBudWxsX21ham9yOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgewotCQlpZiAobnVsbF9hZGRfZGV2KCkpIHsKLQkJCXVucmVnaXN0ZXJfYmxrZGV2KG51bGxfbWFqb3IsICJudWxsYiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHVzZV9saWdodG52bSkgeworCQlwcGFfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicHBhX2NhY2hlIiwgNjQgKiBzaXplb2YodTY0KSwKKwkJCQkJCQkJMCwgMCwgTlVMTCk7CisJCWlmICghcHBhX2NhY2hlKSB7CisJCQlwcl9lcnIoIm51bGxfYmxrOiB1bmFibGUgdG8gY3JlYXRlIHBwYSBjYWNoZVxuIik7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJfcHBhOwogCQl9CiAJfQogCisJZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgeworCQlyZXQgPSBudWxsX2FkZF9kZXYoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2RldjsKKwl9CisKIAlwcl9pbmZvKCJudWxsOiBtb2R1bGUgbG9hZGVkXG4iKTsKIAlyZXR1cm4gMDsKKworZXJyX2RldjoKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm51bGxiX2xpc3QpKSB7CisJCW51bGxiID0gbGlzdF9lbnRyeShudWxsYl9saXN0Lm5leHQsIHN0cnVjdCBudWxsYiwgbGlzdCk7CisJCW51bGxfZGVsX2RldihudWxsYik7CisJfQorCWttZW1fY2FjaGVfZGVzdHJveShwcGFfY2FjaGUpOworZXJyX3BwYToKKwl1bnJlZ2lzdGVyX2Jsa2RldihudWxsX21ham9yLCAibnVsbGIiKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbnVsbF9leGl0KHZvaWQpCkBAIC02NzgsNiArODQ2LDggQEAKIAkJbnVsbF9kZWxfZGV2KG51bGxiKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKworCWttZW1fY2FjaGVfZGVzdHJveShwcGFfY2FjaGUpOwogfQogCiBtb2R1bGVfaW5pdChudWxsX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9yYmQuYyBiL2RyaXZlcnMvYmxvY2svcmJkLmMKaW5kZXggMjM1NzA4Yy4uODFlYTY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9yYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3JiZC5jCkBAIC0zNDQyLDYgKzM0NDIsNyBAQAogCQlnb3RvIGVycl9ycTsKIAl9CiAJaW1nX3JlcXVlc3QtPnJxID0gcnE7CisJc25hcGMgPSBOVUxMOyAvKiBpbWdfcmVxdWVzdCBjb25zdW1lcyBhIHJlZiAqLwogCiAJaWYgKG9wX3R5cGUgPT0gT0JKX09QX0RJU0NBUkQpCiAJCXJlc3VsdCA9IHJiZF9pbWdfcmVxdWVzdF9maWxsKGltZ19yZXF1ZXN0LCBPQkpfUkVRVUVTVF9OT0RBVEEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2Jsa2JhY2suYyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svYmxrYmFjay5jCmluZGV4IGY5MDk5OTQuLjQxZmIxYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svYmxrYmFjay5jCisrKyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svYmxrYmFjay5jCkBAIC05NTAsNiArOTUwLDggQEAKIAkJZ290byB1bm1hcDsKIAogCWZvciAobiA9IDAsIGkgPSAwOyBuIDwgbnNlZzsgbisrKSB7CisJCXVpbnQ4X3QgZmlyc3Rfc2VjdCwgbGFzdF9zZWN0OworCiAJCWlmICgobiAlIFNFR1NfUEVSX0lORElSRUNUX0ZSQU1FKSA9PSAwKSB7CiAJCQkvKiBNYXAgaW5kaXJlY3Qgc2VnbWVudHMgKi8KIAkJCWlmIChzZWdtZW50cykKQEAgLTk1NywxNSArOTU5LDE4IEBACiAJCQlzZWdtZW50cyA9IGttYXBfYXRvbWljKHBhZ2VzW24vU0VHU19QRVJfSU5ESVJFQ1RfRlJBTUVdLT5wYWdlKTsKIAkJfQogCQlpID0gbiAlIFNFR1NfUEVSX0lORElSRUNUX0ZSQU1FOworCiAJCXBlbmRpbmdfcmVxLT5zZWdtZW50c1tuXS0+Z3JlZiA9IHNlZ21lbnRzW2ldLmdyZWY7Ci0JCXNlZ1tuXS5uc2VjID0gc2VnbWVudHNbaV0ubGFzdF9zZWN0IC0KLQkJCXNlZ21lbnRzW2ldLmZpcnN0X3NlY3QgKyAxOwotCQlzZWdbbl0ub2Zmc2V0ID0gKHNlZ21lbnRzW2ldLmZpcnN0X3NlY3QgPDwgOSk7Ci0JCWlmICgoc2VnbWVudHNbaV0ubGFzdF9zZWN0ID49IChYRU5fUEFHRV9TSVpFID4+IDkpKSB8fAotCQkgICAgKHNlZ21lbnRzW2ldLmxhc3Rfc2VjdCA8IHNlZ21lbnRzW2ldLmZpcnN0X3NlY3QpKSB7CisKKwkJZmlyc3Rfc2VjdCA9IFJFQURfT05DRShzZWdtZW50c1tpXS5maXJzdF9zZWN0KTsKKwkJbGFzdF9zZWN0ID0gUkVBRF9PTkNFKHNlZ21lbnRzW2ldLmxhc3Rfc2VjdCk7CisJCWlmIChsYXN0X3NlY3QgPj0gKFhFTl9QQUdFX1NJWkUgPj4gOSkgfHwgbGFzdF9zZWN0IDwgZmlyc3Rfc2VjdCkgewogCQkJcmMgPSAtRUlOVkFMOwogCQkJZ290byB1bm1hcDsKIAkJfQorCisJCXNlZ1tuXS5uc2VjID0gbGFzdF9zZWN0IC0gZmlyc3Rfc2VjdCArIDE7CisJCXNlZ1tuXS5vZmZzZXQgPSBmaXJzdF9zZWN0IDw8IDk7CiAJCXByZXEtPm5yX3NlY3RzICs9IHNlZ1tuXS5uc2VjOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9jb21tb24uaCBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svY29tbW9uLmgKaW5kZXggNjhlODdhMC4uYzkyOWFlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9jb21tb24uaAorKysgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2NvbW1vbi5oCkBAIC00MDgsOCArNDA4LDggQEAKIAkJCQkJc3RydWN0IGJsa2lmX3g4Nl8zMl9yZXF1ZXN0ICpzcmMpCiB7CiAJaW50IGksIG4gPSBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QsIGo7Ci0JZHN0LT5vcGVyYXRpb24gPSBzcmMtPm9wZXJhdGlvbjsKLQlzd2l0Y2ggKHNyYy0+b3BlcmF0aW9uKSB7CisJZHN0LT5vcGVyYXRpb24gPSBSRUFEX09OQ0Uoc3JjLT5vcGVyYXRpb24pOworCXN3aXRjaCAoZHN0LT5vcGVyYXRpb24pIHsKIAljYXNlIEJMS0lGX09QX1JFQUQ6CiAJY2FzZSBCTEtJRl9PUF9XUklURToKIAljYXNlIEJMS0lGX09QX1dSSVRFX0JBUlJJRVI6CkBAIC00NTYsOCArNDU2LDggQEAKIAkJCQkJc3RydWN0IGJsa2lmX3g4Nl82NF9yZXF1ZXN0ICpzcmMpCiB7CiAJaW50IGksIG4gPSBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QsIGo7Ci0JZHN0LT5vcGVyYXRpb24gPSBzcmMtPm9wZXJhdGlvbjsKLQlzd2l0Y2ggKHNyYy0+b3BlcmF0aW9uKSB7CisJZHN0LT5vcGVyYXRpb24gPSBSRUFEX09OQ0Uoc3JjLT5vcGVyYXRpb24pOworCXN3aXRjaCAoZHN0LT5vcGVyYXRpb24pIHsKIAljYXNlIEJMS0lGX09QX1JFQUQ6CiAJY2FzZSBCTEtJRl9PUF9XUklURToKIAljYXNlIEJMS0lGX09QX1dSSVRFX0JBUlJJRVI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9vbWFwLW9jcDJzY3AuYyBiL2RyaXZlcnMvYnVzL29tYXAtb2NwMnNjcC5jCmluZGV4IDlmMTg1NjkuLmJmNTAwZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL29tYXAtb2NwMnNjcC5jCisrKyBiL2RyaXZlcnMvYnVzL29tYXAtb2NwMnNjcC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvbWFwX29jcDJzY3BfZHJpdmVyKTsKIAotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTogb21hcC1vY3Ayc2NwIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm9tYXAtb2NwMnNjcCIpOwogTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMgSW5jLiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIE9DUDJTQ1AgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2J1cy9zdW54aS1yc2IuYyBiL2RyaXZlcnMvYnVzL3N1bnhpLXJzYi5jCmluZGV4IDg0NmJjMjkuLjI1OTk2ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL3N1bnhpLXJzYi5jCisrKyBiL2RyaXZlcnMvYnVzL3N1bnhpLXJzYi5jCkBAIC0zNDIsMTMgKzM0MiwxMyBAQAogCiAJcmV0ID0gX3N1bnhpX3JzYl9ydW5feGZlcihyc2IpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCQlnb3RvIHVubG9jazsKIAogCSpidWYgPSByZWFkbChyc2ItPnJlZ3MgKyBSU0JfREFUQSk7CiAKK3VubG9jazoKIAltdXRleF91bmxvY2soJnJzYi0+bG9jayk7CiAKLW91dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MjcsOSArNTI3LDkgQEAKICAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1bnhpX3JzYl9hZGRyX21hcCBzdW54aV9yc2JfYWRkcl9tYXBzW10gPSB7Ci0JeyAweDNlMywgMHgyZCB9LCAvKiBQcmltYXJ5IFBNSUM6IEFYUDIyMywgQVhQODA5LCBBWFA4MVgsIC4uLiAqLworCXsgMHgzYTMsIDB4MmQgfSwgLyogUHJpbWFyeSBQTUlDOiBBWFAyMjMsIEFYUDgwOSwgQVhQODFYLCAuLi4gKi8KIAl7IDB4NzQ1LCAweDNhIH0sIC8qIFNlY29uZGFyeSBQTUlDOiBBWFA4MDYsIC4uLiAqLwotCXsgMHhlODksIDB4NDUgfSwgLyogUGVyaXBoZXJhbCBJQzogQUMxMDAsIC4uLiAqLworCXsgMHhlODksIDB4NGUgfSwgLyogUGVyaXBoZXJhbCBJQzogQUMxMDAsIC4uLiAqLwogfTsKIAogc3RhdGljIHU4IHN1bnhpX3JzYl9nZXRfcnRhZGRyKHUxNiBod2FkZHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IDY1NGY2ZjMuLjRjYzcyZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC00MTIsMTggKzQxMiw0MiBAQAogCXJldHVybiBydjsKIH0KIAotc3RhdGljIHZvaWQgc3RhcnRfY2hlY2tfZW5hYmxlcyhzdHJ1Y3Qgc21pX2luZm8gKnNtaV9pbmZvKQorc3RhdGljIHZvaWQgc21pX21vZF90aW1lcihzdHJ1Y3Qgc21pX2luZm8gKnNtaV9pbmZvLCB1bnNpZ25lZCBsb25nIG5ld192YWwpCit7CisJc21pX2luZm8tPmxhc3RfdGltZW91dF9qaWZmaWVzID0gamlmZmllczsKKwltb2RfdGltZXIoJnNtaV9pbmZvLT5zaV90aW1lciwgbmV3X3ZhbCk7CisJc21pX2luZm8tPnRpbWVyX3J1bm5pbmcgPSB0cnVlOworfQorCisvKgorICogU3RhcnQgYSBuZXcgbWVzc2FnZSBhbmQgKHJlKXN0YXJ0IHRoZSB0aW1lciBhbmQgdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCBzdGFydF9uZXdfbXNnKHN0cnVjdCBzbWlfaW5mbyAqc21pX2luZm8sIHVuc2lnbmVkIGNoYXIgKm1zZywKKwkJCSAgdW5zaWduZWQgaW50IHNpemUpCit7CisJc21pX21vZF90aW1lcihzbWlfaW5mbywgamlmZmllcyArIFNJX1RJTUVPVVRfSklGRklFUyk7CisKKwlpZiAoc21pX2luZm8tPnRocmVhZCkKKwkJd2FrZV91cF9wcm9jZXNzKHNtaV9pbmZvLT50aHJlYWQpOworCisJc21pX2luZm8tPmhhbmRsZXJzLT5zdGFydF90cmFuc2FjdGlvbihzbWlfaW5mby0+c2lfc20sIG1zZywgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2NoZWNrX2VuYWJsZXMoc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbywgYm9vbCBzdGFydF90aW1lcikKIHsKIAl1bnNpZ25lZCBjaGFyIG1zZ1syXTsKIAogCW1zZ1swXSA9IChJUE1JX05FVEZOX0FQUF9SRVFVRVNUIDw8IDIpOwogCW1zZ1sxXSA9IElQTUlfR0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQ7CiAKLQlzbWlfaW5mby0+aGFuZGxlcnMtPnN0YXJ0X3RyYW5zYWN0aW9uKHNtaV9pbmZvLT5zaV9zbSwgbXNnLCAyKTsKKwlpZiAoc3RhcnRfdGltZXIpCisJCXN0YXJ0X25ld19tc2coc21pX2luZm8sIG1zZywgMik7CisJZWxzZQorCQlzbWlfaW5mby0+aGFuZGxlcnMtPnN0YXJ0X3RyYW5zYWN0aW9uKHNtaV9pbmZvLT5zaV9zbSwgbXNnLCAyKTsKIAlzbWlfaW5mby0+c2lfc3RhdGUgPSBTSV9DSEVDS0lOR19FTkFCTEVTOwogfQogCi1zdGF0aWMgdm9pZCBzdGFydF9jbGVhcl9mbGFncyhzdHJ1Y3Qgc21pX2luZm8gKnNtaV9pbmZvKQorc3RhdGljIHZvaWQgc3RhcnRfY2xlYXJfZmxhZ3Moc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbywgYm9vbCBzdGFydF90aW1lcikKIHsKIAl1bnNpZ25lZCBjaGFyIG1zZ1szXTsKIApAQCAtNDMyLDcgKzQ1NiwxMCBAQAogCW1zZ1sxXSA9IElQTUlfQ0xFQVJfTVNHX0ZMQUdTX0NNRDsKIAltc2dbMl0gPSBXRFRfUFJFX1RJTUVPVVRfSU5UOwogCi0Jc21pX2luZm8tPmhhbmRsZXJzLT5zdGFydF90cmFuc2FjdGlvbihzbWlfaW5mby0+c2lfc20sIG1zZywgMyk7CisJaWYgKHN0YXJ0X3RpbWVyKQorCQlzdGFydF9uZXdfbXNnKHNtaV9pbmZvLCBtc2csIDMpOworCWVsc2UKKwkJc21pX2luZm8tPmhhbmRsZXJzLT5zdGFydF90cmFuc2FjdGlvbihzbWlfaW5mby0+c2lfc20sIG1zZywgMyk7CiAJc21pX2luZm8tPnNpX3N0YXRlID0gU0lfQ0xFQVJJTkdfRkxBR1M7CiB9CiAKQEAgLTQ0MiwxMCArNDY5LDggQEAKIAlzbWlfaW5mby0+Y3Vycl9tc2ctPmRhdGFbMV0gPSBJUE1JX0dFVF9NU0dfQ01EOwogCXNtaV9pbmZvLT5jdXJyX21zZy0+ZGF0YV9zaXplID0gMjsKIAotCXNtaV9pbmZvLT5oYW5kbGVycy0+c3RhcnRfdHJhbnNhY3Rpb24oCi0JCXNtaV9pbmZvLT5zaV9zbSwKLQkJc21pX2luZm8tPmN1cnJfbXNnLT5kYXRhLAotCQlzbWlfaW5mby0+Y3Vycl9tc2ctPmRhdGFfc2l6ZSk7CisJc3RhcnRfbmV3X21zZyhzbWlfaW5mbywgc21pX2luZm8tPmN1cnJfbXNnLT5kYXRhLAorCQkgICAgICBzbWlfaW5mby0+Y3Vycl9tc2ctPmRhdGFfc2l6ZSk7CiAJc21pX2luZm8tPnNpX3N0YXRlID0gU0lfR0VUVElOR19NRVNTQUdFUzsKIH0KIApAQCAtNDU1LDIwICs0ODAsMTEgQEAKIAlzbWlfaW5mby0+Y3Vycl9tc2ctPmRhdGFbMV0gPSBJUE1JX1JFQURfRVZFTlRfTVNHX0JVRkZFUl9DTUQ7CiAJc21pX2luZm8tPmN1cnJfbXNnLT5kYXRhX3NpemUgPSAyOwogCi0Jc21pX2luZm8tPmhhbmRsZXJzLT5zdGFydF90cmFuc2FjdGlvbigKLQkJc21pX2luZm8tPnNpX3NtLAotCQlzbWlfaW5mby0+Y3Vycl9tc2ctPmRhdGEsCi0JCXNtaV9pbmZvLT5jdXJyX21zZy0+ZGF0YV9zaXplKTsKKwlzdGFydF9uZXdfbXNnKHNtaV9pbmZvLCBzbWlfaW5mby0+Y3Vycl9tc2ctPmRhdGEsCisJCSAgICAgIHNtaV9pbmZvLT5jdXJyX21zZy0+ZGF0YV9zaXplKTsKIAlzbWlfaW5mby0+c2lfc3RhdGUgPSBTSV9HRVRUSU5HX0VWRU5UUzsKIH0KIAotc3RhdGljIHZvaWQgc21pX21vZF90aW1lcihzdHJ1Y3Qgc21pX2luZm8gKnNtaV9pbmZvLCB1bnNpZ25lZCBsb25nIG5ld192YWwpCi17Ci0Jc21pX2luZm8tPmxhc3RfdGltZW91dF9qaWZmaWVzID0gamlmZmllczsKLQltb2RfdGltZXIoJnNtaV9pbmZvLT5zaV90aW1lciwgbmV3X3ZhbCk7Ci0Jc21pX2luZm8tPnRpbWVyX3J1bm5pbmcgPSB0cnVlOwotfQotCiAvKgogICogV2hlbiB3ZSBoYXZlIGEgc2l0dXRhaW9uIHdoZXJlIHdlIHJ1biBvdXQgb2YgbWVtb3J5IGFuZCBjYW5ub3QKICAqIGFsbG9jYXRlIG1lc3NhZ2VzLCB3ZSBqdXN0IGxlYXZlIHRoZW0gaW4gdGhlIEJNQyBhbmQgcnVuIHRoZSBzeXN0ZW0KQEAgLTQ3OCwxMSArNDk0LDExIEBACiAgKiBOb3RlIHRoYXQgd2UgY2Fubm90IGp1c3QgdXNlIGRpc2FibGVfaXJxKCksIHNpbmNlIHRoZSBpbnRlcnJ1cHQgbWF5CiAgKiBiZSBzaGFyZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBkaXNhYmxlX3NpX2lycShzdHJ1Y3Qgc21pX2luZm8gKnNtaV9pbmZvKQorc3RhdGljIGlubGluZSBib29sIGRpc2FibGVfc2lfaXJxKHN0cnVjdCBzbWlfaW5mbyAqc21pX2luZm8sIGJvb2wgc3RhcnRfdGltZXIpCiB7CiAJaWYgKChzbWlfaW5mby0+aXJxKSAmJiAoIXNtaV9pbmZvLT5pbnRlcnJ1cHRfZGlzYWJsZWQpKSB7CiAJCXNtaV9pbmZvLT5pbnRlcnJ1cHRfZGlzYWJsZWQgPSB0cnVlOwotCQlzdGFydF9jaGVja19lbmFibGVzKHNtaV9pbmZvKTsKKwkJc3RhcnRfY2hlY2tfZW5hYmxlcyhzbWlfaW5mbywgc3RhcnRfdGltZXIpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJcmV0dXJuIGZhbHNlOwpAQCAtNDkyLDcgKzUwOCw3IEBACiB7CiAJaWYgKChzbWlfaW5mby0+aXJxKSAmJiAoc21pX2luZm8tPmludGVycnVwdF9kaXNhYmxlZCkpIHsKIAkJc21pX2luZm8tPmludGVycnVwdF9kaXNhYmxlZCA9IGZhbHNlOwotCQlzdGFydF9jaGVja19lbmFibGVzKHNtaV9pbmZvKTsKKwkJc3RhcnRfY2hlY2tfZW5hYmxlcyhzbWlfaW5mbywgdHJ1ZSk7CiAJCXJldHVybiB0cnVlOwogCX0KIAlyZXR1cm4gZmFsc2U7CkBAIC01MTAsNyArNTI2LDcgQEAKIAogCW1zZyA9IGlwbWlfYWxsb2Nfc21pX21zZygpOwogCWlmICghbXNnKSB7Ci0JCWlmICghZGlzYWJsZV9zaV9pcnEoc21pX2luZm8pKQorCQlpZiAoIWRpc2FibGVfc2lfaXJxKHNtaV9pbmZvLCB0cnVlKSkKIAkJCXNtaV9pbmZvLT5zaV9zdGF0ZSA9IFNJX05PUk1BTDsKIAl9IGVsc2UgaWYgKGVuYWJsZV9zaV9pcnEoc21pX2luZm8pKSB7CiAJCWlwbWlfZnJlZV9zbWlfbXNnKG1zZyk7CkBAIC01MjYsNyArNTQyLDcgQEAKIAkJLyogV2F0Y2hkb2cgcHJlLXRpbWVvdXQgKi8KIAkJc21pX2luY19zdGF0KHNtaV9pbmZvLCB3YXRjaGRvZ19wcmV0aW1lb3V0cyk7CiAKLQkJc3RhcnRfY2xlYXJfZmxhZ3Moc21pX2luZm8pOworCQlzdGFydF9jbGVhcl9mbGFncyhzbWlfaW5mbywgdHJ1ZSk7CiAJCXNtaV9pbmZvLT5tc2dfZmxhZ3MgJj0gfldEVF9QUkVfVElNRU9VVF9JTlQ7CiAJCWlmIChzbWlfaW5mby0+aW50ZikKIAkJCWlwbWlfc21pX3dhdGNoZG9nX3ByZXRpbWVvdXQoc21pX2luZm8tPmludGYpOwpAQCAtODc5LDggKzg5NSw3IEBACiAJCQltc2dbMF0gPSAoSVBNSV9ORVRGTl9BUFBfUkVRVUVTVCA8PCAyKTsKIAkJCW1zZ1sxXSA9IElQTUlfR0VUX01TR19GTEFHU19DTUQ7CiAKLQkJCXNtaV9pbmZvLT5oYW5kbGVycy0+c3RhcnRfdHJhbnNhY3Rpb24oCi0JCQkJc21pX2luZm8tPnNpX3NtLCBtc2csIDIpOworCQkJc3RhcnRfbmV3X21zZyhzbWlfaW5mbywgbXNnLCAyKTsKIAkJCXNtaV9pbmZvLT5zaV9zdGF0ZSA9IFNJX0dFVFRJTkdfRkxBR1M7CiAJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KQEAgLTkxMCw3ICs5MjUsNyBAQAogCQkgKiBkaXNhYmxlIGFuZCBtZXNzYWdlcyBkaXNhYmxlZC4KIAkJICovCiAJCWlmIChzbWlfaW5mby0+c3VwcG9ydHNfZXZlbnRfbXNnX2J1ZmYgfHwgc21pX2luZm8tPmlycSkgewotCQkJc3RhcnRfY2hlY2tfZW5hYmxlcyhzbWlfaW5mbyk7CisJCQlzdGFydF9jaGVja19lbmFibGVzKHNtaV9pbmZvLCB0cnVlKTsKIAkJfSBlbHNlIHsKIAkJCXNtaV9pbmZvLT5jdXJyX21zZyA9IGFsbG9jX21zZ19oYW5kbGVfaXJxKHNtaV9pbmZvKTsKIAkJCWlmICghc21pX2luZm8tPmN1cnJfbXNnKQpAQCAtOTIwLDYgKzkzNSwxMyBAQAogCQl9CiAJCWdvdG8gcmVzdGFydDsKIAl9CisKKwlpZiAoc2lfc21fcmVzdWx0ID09IFNJX1NNX0lETEUgJiYgc21pX2luZm8tPnRpbWVyX3J1bm5pbmcpIHsKKwkJLyogT2sgaXQgaWYgZmFpbHMsIHRoZSB0aW1lciB3aWxsIGp1c3QgZ28gb2ZmLiAqLworCQlpZiAoZGVsX3RpbWVyKCZzbWlfaW5mby0+c2lfdGltZXIpKQorCQkJc21pX2luZm8tPnRpbWVyX3J1bm5pbmcgPSBmYWxzZTsKKwl9CisKICBvdXQ6CiAJcmV0dXJuIHNpX3NtX3Jlc3VsdDsKIH0KQEAgLTEyMDgsMTQgKzEyMzAsMTQgQEAKIAogCW5ld19zbWktPmludGYgPSBpbnRmOwogCi0JLyogVHJ5IHRvIGNsYWltIGFueSBpbnRlcnJ1cHRzLiAqLwotCWlmIChuZXdfc21pLT5pcnFfc2V0dXApCi0JCW5ld19zbWktPmlycV9zZXR1cChuZXdfc21pKTsKLQogCS8qIFNldCB1cCB0aGUgdGltZXIgdGhhdCBkcml2ZXMgdGhlIGludGVyZmFjZS4gKi8KIAlzZXR1cF90aW1lcigmbmV3X3NtaS0+c2lfdGltZXIsIHNtaV90aW1lb3V0LCAobG9uZyluZXdfc21pKTsKIAlzbWlfbW9kX3RpbWVyKG5ld19zbWksIGppZmZpZXMgKyBTSV9USU1FT1VUX0pJRkZJRVMpOwogCisJLyogVHJ5IHRvIGNsYWltIGFueSBpbnRlcnJ1cHRzLiAqLworCWlmIChuZXdfc21pLT5pcnFfc2V0dXApCisJCW5ld19zbWktPmlycV9zZXR1cChuZXdfc21pKTsKKwogCS8qCiAJICogQ2hlY2sgaWYgdGhlIHVzZXIgZm9yY2VmdWxseSBlbmFibGVkIHRoZSBkYWVtb24uCiAJICovCkBAIC0yNTYwLDYgKzI1ODIsNyBAQAogCSAgLmRhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBTSV9CVCB9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX2lwbWlfbWF0Y2gpOwogCiBzdGF0aWMgaW50IG9mX2lwbWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewpAQCAtMjY0Niw3ICsyNjY5LDYgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9pcG1pX21hdGNoKTsKICNlbHNlCiAjZGVmaW5lIG9mX2lwbWlfbWF0Y2ggTlVMTAogc3RhdGljIGludCBvZl9pcG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKQEAgLTM2MTMsNyArMzYzNSw3IEBACiAJICogU3RhcnQgY2xlYXJpbmcgdGhlIGZsYWdzIGJlZm9yZSB3ZSBlbmFibGUgaW50ZXJydXB0cyBvciB0aGUKIAkgKiB0aW1lciB0byBhdm9pZCByYWNpbmcgd2l0aCB0aGUgdGltZXIuCiAJICovCi0Jc3RhcnRfY2xlYXJfZmxhZ3MobmV3X3NtaSk7CisJc3RhcnRfY2xlYXJfZmxhZ3MobmV3X3NtaSwgZmFsc2UpOwogCiAJLyoKIAkgKiBJUlEgaXMgZGVmaW5lZCB0byBiZSBzZXQgd2hlbiBub24temVyby4gIHJlcV9ldmVudHMgd2lsbApAQCAtMzkwOCw3ICszOTMwLDcgQEAKIAkJcG9sbCh0b19jbGVhbik7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogCX0KLQlkaXNhYmxlX3NpX2lycSh0b19jbGVhbik7CisJZGlzYWJsZV9zaV9pcnEodG9fY2xlYW4sIGZhbHNlKTsKIAl3aGlsZSAodG9fY2xlYW4tPmN1cnJfbXNnIHx8ICh0b19jbGVhbi0+c2lfc3RhdGUgIT0gU0lfTk9STUFMKSkgewogCQlwb2xsKHRvX2NsZWFuKTsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKaW5kZXggMGFjM2JkMS4uMDk2ZjBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYwpAQCAtMTUzLDYgKzE1Myw5IEBACiAvKiBUaGUgcHJlLXRpbWVvdXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gKi8KIHN0YXRpYyBpbnQgcHJldGltZW91dDsKIAorLyogRGVmYXVsdCB0aW1lb3V0IHRvIHNldCBvbiBwYW5pYyAqLworc3RhdGljIGludCBwYW5pY193ZHRfdGltZW91dCA9IDI1NTsKKwogLyogRGVmYXVsdCBhY3Rpb24gaXMgdG8gcmVzZXQgdGhlIGJvYXJkIG9uIGEgdGltZW91dC4gKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFjdGlvbl92YWwgPSBXRE9HX1RJTUVPVVRfUkVTRVQ7CiAKQEAgLTI5Myw2ICsyOTYsOSBAQAogbW9kdWxlX3BhcmFtKHByZXRpbWVvdXQsIHRpbWVvdXQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwcmV0aW1lb3V0LCAiUHJldGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLiIpOwogCittb2R1bGVfcGFyYW0ocGFuaWNfd2R0X3RpbWVvdXQsIHRpbWVvdXQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiVGltZW91dCB2YWx1ZSBvbiBrZXJuZWwgcGFuaWMgaW4gc2Vjb25kcy4iKTsKKwogbW9kdWxlX3BhcmFtX2NiKGFjdGlvbiwgJnBhcmFtX29wc19zdHIsIGFjdGlvbl9vcCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFjdGlvbiwgIlRpbWVvdXQgYWN0aW9uLiBPbmUgb2Y6ICIKIAkJICJyZXNldCwgbm9uZSwgcG93ZXJfY3ljbGUsIHBvd2VyX29mZi4iKTsKQEAgLTExODksNyArMTE5NSw3IEBACiAJCS8qIE1ha2Ugc3VyZSB3ZSBkbyB0aGlzIG9ubHkgb25jZS4gKi8KIAkJcGFuaWNfZXZlbnRfaGFuZGxlZCA9IDE7CiAKLQkJdGltZW91dCA9IDI1NTsKKwkJdGltZW91dCA9IHBhbmljX3dkdF90aW1lb3V0OwogCQlwcmV0aW1lb3V0ID0gMDsKIAkJcGFuaWNfaGFsdF9pcG1pX3NldF90aW1lb3V0KCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLWdwaW8uYyBiL2RyaXZlcnMvY2xrL2Nsay1ncGlvLmMKaW5kZXggMTA4MTllMi4uMzM1MzIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrLWdwaW8uYworKysgYi9kcml2ZXJzL2Nsay9jbGstZ3Bpby5jCkBAIC0yMDksNiArMjA5LDggQEAKIAogc3RydWN0IGNsa19ncGlvX2RlbGF5ZWRfcmVnaXN0ZXJfZGF0YSB7CiAJY29uc3QgY2hhciAqZ3Bpb19uYW1lOworCWludCBudW1fcGFyZW50czsKKwljb25zdCBjaGFyICoqcGFyZW50X25hbWVzOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlzdHJ1Y3QgY2xrICpjbGs7CkBAIC0yMjIsOCArMjI0LDYgQEAKIHsKIAlzdHJ1Y3QgY2xrX2dwaW9fZGVsYXllZF9yZWdpc3Rlcl9kYXRhICpkYXRhID0gX2RhdGE7CiAJc3RydWN0IGNsayAqY2xrOwotCWNvbnN0IGNoYXIgKipwYXJlbnRfbmFtZXM7Ci0JaW50IGksIG51bV9wYXJlbnRzOwogCWludCBncGlvOwogCWVudW0gb2ZfZ3Bpb19mbGFncyBvZl9mbGFnczsKIApAQCAtMjQ4LDI2ICsyNDgsMTQgQEAKIAkJcmV0dXJuIEVSUl9QVFIoZ3Bpbyk7CiAJfQogCi0JbnVtX3BhcmVudHMgPSBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChkYXRhLT5ub2RlKTsKLQotCXBhcmVudF9uYW1lcyA9IGtjYWxsb2MobnVtX3BhcmVudHMsIHNpemVvZihjaGFyICopLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBhcmVudF9uYW1lcykgewotCQljbGsgPSBFUlJfUFRSKC1FTk9NRU0pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudHM7IGkrKykKLQkJcGFyZW50X25hbWVzW2ldID0gb2ZfY2xrX2dldF9wYXJlbnRfbmFtZShkYXRhLT5ub2RlLCBpKTsKLQotCWNsayA9IGRhdGEtPmNsa19yZWdpc3Rlcl9nZXQoZGF0YS0+bm9kZS0+bmFtZSwgcGFyZW50X25hbWVzLAotCQkJbnVtX3BhcmVudHMsIGdwaW8sIG9mX2ZsYWdzICYgT0ZfR1BJT19BQ1RJVkVfTE9XKTsKKwljbGsgPSBkYXRhLT5jbGtfcmVnaXN0ZXJfZ2V0KGRhdGEtPm5vZGUtPm5hbWUsIGRhdGEtPnBhcmVudF9uYW1lcywKKwkJCWRhdGEtPm51bV9wYXJlbnRzLCBncGlvLCBvZl9mbGFncyAmIE9GX0dQSU9fQUNUSVZFX0xPVyk7CiAJaWYgKElTX0VSUihjbGspKQogCQlnb3RvIG91dDsKIAogCWRhdGEtPmNsayA9IGNsazsKIG91dDoKIAltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwotCWtmcmVlKHBhcmVudF9uYW1lcyk7CiAKIAlyZXR1cm4gY2xrOwogfQpAQCAtMjk2LDExICsyODQsMjQgQEAKIAkJCQl1bnNpZ25lZCBncGlvLCBib29sIGFjdGl2ZV9sb3cpKQogewogCXN0cnVjdCBjbGtfZ3Bpb19kZWxheWVkX3JlZ2lzdGVyX2RhdGEgKmRhdGE7CisJY29uc3QgY2hhciAqKnBhcmVudF9uYW1lczsKKwlpbnQgaSwgbnVtX3BhcmVudHM7CiAKIAlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKIAorCW51bV9wYXJlbnRzID0gb2ZfY2xrX2dldF9wYXJlbnRfY291bnQobm9kZSk7CisKKwlwYXJlbnRfbmFtZXMgPSBrY2FsbG9jKG51bV9wYXJlbnRzLCBzaXplb2YoY2hhciAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJlbnRfbmFtZXMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50czsgaSsrKQorCQlwYXJlbnRfbmFtZXNbaV0gPSBvZl9jbGtfZ2V0X3BhcmVudF9uYW1lKG5vZGUsIGkpOworCisJZGF0YS0+bnVtX3BhcmVudHMgPSBudW1fcGFyZW50czsKKwlkYXRhLT5wYXJlbnRfbmFtZXMgPSBwYXJlbnRfbmFtZXM7CiAJZGF0YS0+bm9kZSA9IG5vZGU7CiAJZGF0YS0+Z3Bpb19uYW1lID0gZ3Bpb19uYW1lOwogCWRhdGEtPmNsa19yZWdpc3Rlcl9nZXQgPSBjbGtfcmVnaXN0ZXJfZ2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrLXFvcmlxLmMgYi9kcml2ZXJzL2Nsay9jbGstcW9yaXEuYwppbmRleCAxYWIwZmI4Li43YmMxYzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGstcW9yaXEuYworKysgYi9kcml2ZXJzL2Nsay9jbGstcW9yaXEuYwpAQCAtNzc4LDggKzc3OCwxMCBAQAogCSAqLwogCWNsa3NlbCA9IChjZ19pbihjZywgaHdjLT5yZWcpICYgQ0xLU0VMX01BU0spID4+IENMS1NFTF9TSElGVDsKIAlkaXYgPSBnZXRfcGxsX2RpdihjZywgaHdjLCBjbGtzZWwpOwotCWlmICghZGl2KQorCWlmICghZGl2KSB7CisJCWtmcmVlKGh3Yyk7CiAJCXJldHVybiBOVUxMOworCX0KIAogCXBjdDgwX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZGl2LT5jbGspOwogCXBjdDgwX3JhdGUgKj0gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1zY3BpLmMgYi9kcml2ZXJzL2Nsay9jbGstc2NwaS5jCmluZGV4IDBiNTAxYTkuLmNkMGYyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2Nsay1zY3BpLmMKKysrIGIvZHJpdmVycy9jbGsvY2xrLXNjcGkuYwpAQCAtMjkyLDYgKzI5Miw3IEBACiAJCXJldCA9IHNjcGlfY2xrX2FkZChkZXYsIGNoaWxkLCBtYXRjaCk7CiAJCWlmIChyZXQpIHsKIAkJCXNjcGlfY2xvY2tzX3JlbW92ZShwZGV2KTsKKwkJCW9mX25vZGVfcHV0KGNoaWxkKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9pbXgvY2xrLXBsbHYxLmMgYi9kcml2ZXJzL2Nsay9pbXgvY2xrLXBsbHYxLmMKaW5kZXggODU2NGU0My4uODJmZTM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvaW14L2Nsay1wbGx2MS5jCisrKyBiL2RyaXZlcnMvY2xrL2lteC9jbGstcGxsdjEuYwpAQCAtNTIsNyArNTIsNyBAQAogCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQogewogCXN0cnVjdCBjbGtfcGxsdjEgKnBsbCA9IHRvX2Nsa19wbGx2MShodyk7Ci0JbG9uZyBsb25nIGxsOworCXVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CiAJaW50IG1mbl9hYnM7CiAJdW5zaWduZWQgaW50IG1maSwgbWZuLCBtZmQsIHBkOwogCXUzMiByZWc7CkBAIC05NCwxNiArOTQsMTYgQEAKIAlyYXRlID0gcGFyZW50X3JhdGUgKiAyOwogCXJhdGUgLz0gcGQgKyAxOwogCi0JbGwgPSAodW5zaWduZWQgbG9uZyBsb25nKXJhdGUgKiBtZm5fYWJzOworCXVsbCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpcmF0ZSAqIG1mbl9hYnM7CiAKLQlkb19kaXYobGwsIG1mZCArIDEpOworCWRvX2Rpdih1bGwsIG1mZCArIDEpOwogCiAJaWYgKG1mbl9pc19uZWdhdGl2ZShwbGwsIG1mbikpCi0JCWxsID0gLWxsOworCQl1bGwgPSAocmF0ZSAqIG1maSkgLSB1bGw7CisJZWxzZQorCQl1bGwgPSAocmF0ZSAqIG1maSkgKyB1bGw7CiAKLQlsbCA9IChyYXRlICogbWZpKSArIGxsOwotCi0JcmV0dXJuIGxsOworCXJldHVybiB1bGw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBjbGtfcGxsdjFfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvaW14L2Nsay1wbGx2Mi5jIGIvZHJpdmVycy9jbGsvaW14L2Nsay1wbGx2Mi5jCmluZGV4IGIxOGY4NzUuLjRhZWRhNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xrL2lteC9jbGstcGxsdjIuYworKysgYi9kcml2ZXJzL2Nsay9pbXgvY2xrLXBsbHYyLmMKQEAgLTc5LDcgKzc5LDcgQEAKIHsKIAlsb25nIG1maSwgbWZuLCBtZmQsIHBkZiwgcmVmX2NsazsKIAl1bnNpZ25lZCBsb25nIGRibDsKLQlzNjQgdGVtcDsKKwl1NjQgdGVtcDsKIAogCWRibCA9IGRwX2N0bCAmIE1YQ19QTExfRFBfQ1RMX0RQRENLMF8yX0VOOwogCkBAIC05OCw4ICs5OCw5IEBACiAJdGVtcCA9ICh1NjQpIHJlZl9jbGsgKiBhYnMobWZuKTsKIAlkb19kaXYodGVtcCwgbWZkICsgMSk7CiAJaWYgKG1mbiA8IDApCi0JCXRlbXAgPSAtdGVtcDsKLQl0ZW1wID0gKHJlZl9jbGsgKiBtZmkpICsgdGVtcDsKKwkJdGVtcCA9IChyZWZfY2xrICogbWZpKSAtIHRlbXA7CisJZWxzZQorCQl0ZW1wID0gKHJlZl9jbGsgKiBtZmkpICsgdGVtcDsKIAogCXJldHVybiB0ZW1wOwogfQpAQCAtMTI2LDcgKzEyNyw3IEBACiB7CiAJdTMyIHJlZzsKIAlsb25nIG1maSwgcGRmLCBtZm4sIG1mZCA9IDk5OTk5OTsKLQlzNjQgdGVtcDY0OworCXU2NCB0ZW1wNjQ7CiAJdW5zaWduZWQgbG9uZyBxdWFkX3BhcmVudF9yYXRlOwogCiAJcXVhZF9wYXJlbnRfcmF0ZSA9IDQgKiBwYXJlbnRfcmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2lteC9jbGstdmY2MTAuYyBiL2RyaXZlcnMvY2xrL2lteC9jbGstdmY2MTAuYwppbmRleCBkMWIxYzk1Li4wYTk0ZDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9pbXgvY2xrLXZmNjEwLmMKKysrIGIvZHJpdmVycy9jbGsvaW14L2Nsay12ZjYxMC5jCkBAIC0zMzUsMjIgKzMzNSwyMiBAQAogCWNsa1tWRjYxMF9DTEtfU0FJMF9TRUxdID0gaW14X2Nsa19tdXgoInNhaTBfc2VsIiwgQ0NNX0NTQ01SMSwgMCwgMiwgc2FpX3NlbHMsIDQpOwogCWNsa1tWRjYxMF9DTEtfU0FJMF9FTl0gPSBpbXhfY2xrX2dhdGUoInNhaTBfZW4iLCAic2FpMF9zZWwiLCBDQ01fQ1NDRFIxLCAxNik7CiAJY2xrW1ZGNjEwX0NMS19TQUkwX0RJVl0gPSBpbXhfY2xrX2RpdmlkZXIoInNhaTBfZGl2IiwgInNhaTBfZW4iLCBDQ01fQ1NDRFIxLCAwLCA0KTsKLQljbGtbVkY2MTBfQ0xLX1NBSTBdID0gaW14X2Nsa19nYXRlMigic2FpMCIsICJzYWkwX2RpdiIsIENDTV9DQ0dSMCwgQ0NNX0NDR1J4X0NHbigxNSkpOworCWNsa1tWRjYxMF9DTEtfU0FJMF0gPSBpbXhfY2xrX2dhdGUyKCJzYWkwIiwgImlwZ19idXMiLCBDQ01fQ0NHUjAsIENDTV9DQ0dSeF9DR24oMTUpKTsKIAogCWNsa1tWRjYxMF9DTEtfU0FJMV9TRUxdID0gaW14X2Nsa19tdXgoInNhaTFfc2VsIiwgQ0NNX0NTQ01SMSwgMiwgMiwgc2FpX3NlbHMsIDQpOwogCWNsa1tWRjYxMF9DTEtfU0FJMV9FTl0gPSBpbXhfY2xrX2dhdGUoInNhaTFfZW4iLCAic2FpMV9zZWwiLCBDQ01fQ1NDRFIxLCAxNyk7CiAJY2xrW1ZGNjEwX0NMS19TQUkxX0RJVl0gPSBpbXhfY2xrX2RpdmlkZXIoInNhaTFfZGl2IiwgInNhaTFfZW4iLCBDQ01fQ1NDRFIxLCA0LCA0KTsKLQljbGtbVkY2MTBfQ0xLX1NBSTFdID0gaW14X2Nsa19nYXRlMigic2FpMSIsICJzYWkxX2RpdiIsIENDTV9DQ0dSMSwgQ0NNX0NDR1J4X0NHbigwKSk7CisJY2xrW1ZGNjEwX0NMS19TQUkxXSA9IGlteF9jbGtfZ2F0ZTIoInNhaTEiLCAiaXBnX2J1cyIsIENDTV9DQ0dSMSwgQ0NNX0NDR1J4X0NHbigwKSk7CiAKIAljbGtbVkY2MTBfQ0xLX1NBSTJfU0VMXSA9IGlteF9jbGtfbXV4KCJzYWkyX3NlbCIsIENDTV9DU0NNUjEsIDQsIDIsIHNhaV9zZWxzLCA0KTsKIAljbGtbVkY2MTBfQ0xLX1NBSTJfRU5dID0gaW14X2Nsa19nYXRlKCJzYWkyX2VuIiwgInNhaTJfc2VsIiwgQ0NNX0NTQ0RSMSwgMTgpOwogCWNsa1tWRjYxMF9DTEtfU0FJMl9ESVZdID0gaW14X2Nsa19kaXZpZGVyKCJzYWkyX2RpdiIsICJzYWkyX2VuIiwgQ0NNX0NTQ0RSMSwgOCwgNCk7Ci0JY2xrW1ZGNjEwX0NMS19TQUkyXSA9IGlteF9jbGtfZ2F0ZTIoInNhaTIiLCAic2FpMl9kaXYiLCBDQ01fQ0NHUjEsIENDTV9DQ0dSeF9DR24oMSkpOworCWNsa1tWRjYxMF9DTEtfU0FJMl0gPSBpbXhfY2xrX2dhdGUyKCJzYWkyIiwgImlwZ19idXMiLCBDQ01fQ0NHUjEsIENDTV9DQ0dSeF9DR24oMSkpOwogCiAJY2xrW1ZGNjEwX0NMS19TQUkzX1NFTF0gPSBpbXhfY2xrX211eCgic2FpM19zZWwiLCBDQ01fQ1NDTVIxLCA2LCAyLCBzYWlfc2VscywgNCk7CiAJY2xrW1ZGNjEwX0NMS19TQUkzX0VOXSA9IGlteF9jbGtfZ2F0ZSgic2FpM19lbiIsICJzYWkzX3NlbCIsIENDTV9DU0NEUjEsIDE5KTsKIAljbGtbVkY2MTBfQ0xLX1NBSTNfRElWXSA9IGlteF9jbGtfZGl2aWRlcigic2FpM19kaXYiLCAic2FpM19lbiIsIENDTV9DU0NEUjEsIDEyLCA0KTsKLQljbGtbVkY2MTBfQ0xLX1NBSTNdID0gaW14X2Nsa19nYXRlMigic2FpMyIsICJzYWkzX2RpdiIsIENDTV9DQ0dSMSwgQ0NNX0NDR1J4X0NHbigyKSk7CisJY2xrW1ZGNjEwX0NMS19TQUkzXSA9IGlteF9jbGtfZ2F0ZTIoInNhaTMiLCAiaXBnX2J1cyIsIENDTV9DQ0dSMSwgQ0NNX0NDR1J4X0NHbigyKSk7CiAKIAljbGtbVkY2MTBfQ0xLX05GQ19TRUxdID0gaW14X2Nsa19tdXgoIm5mY19zZWwiLCBDQ01fQ1NDTVIxLCAxMiwgMiwgbmZjX3NlbHMsIDQpOwogCWNsa1tWRjYxMF9DTEtfTkZDX0VOXSA9IGlteF9jbGtfZ2F0ZSgibmZjX2VuIiwgIm5mY19zZWwiLCBDQ01fQ1NDRFIyLCA5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL21tcC9jbGstbW1wMi5jIGIvZHJpdmVycy9jbGsvbW1wL2Nsay1tbXAyLmMKaW5kZXggMDlkMjgzMi4uNzFmZDI5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvbW1wL2Nsay1tbXAyLmMKKysrIGIvZHJpdmVycy9jbGsvbW1wL2Nsay1tbXAyLmMKQEAgLTksNiArOSw3IEBACiAgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tbXAvY2xrLXB4YTE2OC5jIGIvZHJpdmVycy9jbGsvbW1wL2Nsay1weGExNjguYwppbmRleCA5M2U5NjdjLi43NTI0NDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9tbXAvY2xrLXB4YTE2OC5jCisrKyBiL2RyaXZlcnMvY2xrL21tcC9jbGstcHhhMTY4LmMKQEAgLTksNiArOSw3IEBACiAgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tbXAvY2xrLXB4YTkxMC5jIGIvZHJpdmVycy9jbGsvbW1wL2Nsay1weGE5MTAuYwppbmRleCA5OTNhYmNkLi4zN2JhMDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9tbXAvY2xrLXB4YTkxMC5jCisrKyBiL2RyaXZlcnMvY2xrL21tcC9jbGstcHhhOTEwLmMKQEAgLTksNiArOSw3IEBACiAgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9zdW54aS9jbGstYTEwLXBsbDIuYyBiL2RyaXZlcnMvY2xrL3N1bnhpL2Nsay1hMTAtcGxsMi5jCmluZGV4IDU0ODRjMzFlLi4wZWUxZjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9zdW54aS9jbGstYTEwLXBsbDIuYworKysgYi9kcml2ZXJzL2Nsay9zdW54aS9jbGstYTEwLXBsbDIuYwpAQCAtNDEsMTUgKzQxLDEwIEBACiAKICNkZWZpbmUgU1VONElfUExMMl9PVVRQVVRTCQk0CiAKLXN0cnVjdCBzdW40aV9wbGwyX2RhdGEgewotCXUzMglwb3N0X2Rpdl9vZmZzZXQ7Ci0JdTMyCXByZV9kaXZfZmxhZ3M7Ci19OwotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN1bjRpX2ExMF9wbGwyX2xvY2spOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc3VuNGlfcGxsMl9zZXR1cChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCQkJICAgIHN0cnVjdCBzdW40aV9wbGwyX2RhdGEgKmRhdGEpCisJCQkJICAgIGludCBwb3N0X2Rpdl9vZmZzZXQpCiB7CiAJY29uc3QgY2hhciAqY2xrX25hbWUgPSBub2RlLT5uYW1lLCAqcGFyZW50OwogCXN0cnVjdCBjbGsgKipjbGtzLCAqYmFzZV9jbGssICpwcmVkaXZfY2xrOwpAQCAtNzYsNyArNzEsNyBAQAogCQkJCQkgIHBhcmVudCwgMCwgcmVnLAogCQkJCQkgIFNVTjRJX1BMTDJfUFJFX0RJVl9TSElGVCwKIAkJCQkJICBTVU40SV9QTEwyX1BSRV9ESVZfV0lEVEgsCi0JCQkJCSAgZGF0YS0+cHJlX2Rpdl9mbGFncywKKwkJCQkJICBDTEtfRElWSURFUl9PTkVfQkFTRUQgfCBDTEtfRElWSURFUl9BTExPV19aRVJPLAogCQkJCQkgICZzdW40aV9hMTBfcGxsMl9sb2NrKTsKIAlpZiAoIXByZWRpdl9jbGspIHsKIAkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciB0aGUgcHJlZGl2IGNsb2NrXG4iKTsKQEAgLTEyNyw3ICsxMjIsNyBAQAogCSAqLwogCXZhbCA9IHJlYWRsKHJlZyk7CiAJdmFsICY9IH4oU1VONElfUExMMl9QT1NUX0RJVl9NQVNLIDw8IFNVTjRJX1BMTDJfUE9TVF9ESVZfU0hJRlQpOwotCXZhbCB8PSAoU1VONElfUExMMl9QT1NUX0RJVl9WQUxVRSAtIGRhdGEtPnBvc3RfZGl2X29mZnNldCkgPDwgU1VONElfUExMMl9QT1NUX0RJVl9TSElGVDsKKwl2YWwgfD0gKFNVTjRJX1BMTDJfUE9TVF9ESVZfVkFMVUUgLSBwb3N0X2Rpdl9vZmZzZXQpIDw8IFNVTjRJX1BMTDJfUE9TVF9ESVZfU0hJRlQ7CiAJd3JpdGVsKHZhbCwgcmVnKTsKIAogCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5vZGUsICJjbG9jay1vdXRwdXQtbmFtZXMiLApAQCAtMTkxLDI1ICsxODYsMTcgQEAKIAlpb3VubWFwKHJlZyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3VuNGlfcGxsMl9kYXRhIHN1bjRpX2ExMF9wbGwyX2RhdGEgPSB7Ci0JLnByZV9kaXZfZmxhZ3MJPSBDTEtfRElWSURFUl9PTkVfQkFTRUQgfCBDTEtfRElWSURFUl9BTExPV19aRVJPLAotfTsKLQogc3RhdGljIHZvaWQgX19pbml0IHN1bjRpX2ExMF9wbGwyX3NldHVwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKIHsKLQlzdW40aV9wbGwyX3NldHVwKG5vZGUsICZzdW40aV9hMTBfcGxsMl9kYXRhKTsKKwlzdW40aV9wbGwyX3NldHVwKG5vZGUsIDApOwogfQogCiBDTEtfT0ZfREVDTEFSRShzdW40aV9hMTBfcGxsMiwgImFsbHdpbm5lcixzdW40aS1hMTAtcGxsMi1jbGsiLAogCSAgICAgICBzdW40aV9hMTBfcGxsMl9zZXR1cCk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3VuNGlfcGxsMl9kYXRhIHN1bjVpX2ExM19wbGwyX2RhdGEgPSB7Ci0JLnBvc3RfZGl2X29mZnNldAk9IDEsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgc3VuNWlfYTEzX3BsbDJfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewotCXN1bjRpX3BsbDJfc2V0dXAobm9kZSwgJnN1bjVpX2ExM19wbGwyX2RhdGEpOworCXN1bjRpX3BsbDJfc2V0dXAobm9kZSwgMSk7CiB9CiAKIENMS19PRl9ERUNMQVJFKHN1bjVpX2ExM19wbGwyLCAiYWxsd2lubmVyLHN1bjVpLWExMy1wbGwyLWNsayIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay90aS9jbGstODE2eC5jIGIvZHJpdmVycy9jbGsvdGkvY2xrLTgxNnguYwppbmRleCAxZGZhZDBjLi4yYTVkODRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90aS9jbGstODE2eC5jCisrKyBiL2RyaXZlcnMvY2xrL3RpL2Nsay04MTZ4LmMKQEAgLTIwLDYgKzIwLDggQEAKIAlEVF9DTEsoTlVMTCwgInN5c19jbGtpbiIsICJzeXNfY2xraW5fY2siKSwKIAlEVF9DTEsoTlVMTCwgInRpbWVyX3N5c19jayIsICJzeXNfY2xraW5fY2siKSwKIAlEVF9DTEsoTlVMTCwgInN5c18zMmtfY2siLCAic3lzXzMya19jayIpLAorCURUX0NMSyhOVUxMLCAidGltZXJfMzJrX2NrIiwgInN5c2NsazE4X2NrIiksCisJRFRfQ0xLKE5VTEwsICJ0aW1lcl9leHRfY2siLCAidGNsa2luX2NrIiksCiAJRFRfQ0xLKE5VTEwsICJtcHVfY2siLCAibXB1X2NrIiksCiAJRFRfQ0xLKE5VTEwsICJ0aW1lcjFfZmNrIiwgInRpbWVyMV9mY2siKSwKIAlEVF9DTEsoTlVMTCwgInRpbWVyMl9mY2siLCAidGltZXIyX2ZjayIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGkvY2xrdF9kcGxsLmMgYi9kcml2ZXJzL2Nsay90aS9jbGt0X2RwbGwuYwppbmRleCA5MDIzY2E5Li5iNWNjNmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90aS9jbGt0X2RwbGwuYworKysgYi9kcml2ZXJzL2Nsay90aS9jbGt0X2RwbGwuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgb21hcDJfZ2V0X2RwbGxfcmF0ZShzdHJ1Y3QgY2xrX2h3X29tYXAgKmNsaykKIHsKLQlsb25nIGxvbmcgZHBsbF9jbGs7CisJdTY0IGRwbGxfY2xrOwogCXUzMiBkcGxsX211bHQsIGRwbGxfZGl2LCB2OwogCXN0cnVjdCBkcGxsX2RhdGEgKmRkOwogCkBAIC0yNjIsNyArMjYyLDcgQEAKIAlkcGxsX2RpdiA9IHYgJiBkZC0+ZGl2MV9tYXNrOwogCWRwbGxfZGl2ID4+PSBfX2ZmcyhkZC0+ZGl2MV9tYXNrKTsKIAotCWRwbGxfY2xrID0gKGxvbmcgbG9uZyljbGtfZ2V0X3JhdGUoZGQtPmNsa19yZWYpICogZHBsbF9tdWx0OworCWRwbGxfY2xrID0gKHU2NCljbGtfZ2V0X3JhdGUoZGQtPmNsa19yZWYpICogZHBsbF9tdWx0OwogCWRvX2RpdihkcGxsX2NsaywgZHBsbF9kaXYgKyAxKTsKIAogCXJldHVybiBkcGxsX2NsazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RpL2RpdmlkZXIuYyBiL2RyaXZlcnMvY2xrL3RpL2RpdmlkZXIuYwppbmRleCA1YjE3MjY4Li5kZjI1NTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay90aS9kaXZpZGVyLmMKKysrIGIvZHJpdmVycy9jbGsvdGkvZGl2aWRlci5jCkBAIC0yMTQsNyArMjE0LDYgQEAKIHsKIAlzdHJ1Y3QgY2xrX2RpdmlkZXIgKmRpdmlkZXI7CiAJdW5zaWduZWQgaW50IGRpdiwgdmFsdWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJdTMyIHZhbDsKIAogCWlmICghaHcgfHwgIXJhdGUpCkBAIC0yMjgsOSArMjI3LDYgQEAKIAlpZiAodmFsdWUgPiBkaXZfbWFzayhkaXZpZGVyKSkKIAkJdmFsdWUgPSBkaXZfbWFzayhkaXZpZGVyKTsKIAotCWlmIChkaXZpZGVyLT5sb2NrKQotCQlzcGluX2xvY2tfaXJxc2F2ZShkaXZpZGVyLT5sb2NrLCBmbGFncyk7Ci0KIAlpZiAoZGl2aWRlci0+ZmxhZ3MgJiBDTEtfRElWSURFUl9ISVdPUkRfTUFTSykgewogCQl2YWwgPSBkaXZfbWFzayhkaXZpZGVyKSA8PCAoZGl2aWRlci0+c2hpZnQgKyAxNik7CiAJfSBlbHNlIHsKQEAgLTI0MCw5ICsyMzYsNiBAQAogCXZhbCB8PSB2YWx1ZSA8PCBkaXZpZGVyLT5zaGlmdDsKIAl0aV9jbGtfbGxfb3BzLT5jbGtfd3JpdGVsKHZhbCwgZGl2aWRlci0+cmVnKTsKIAotCWlmIChkaXZpZGVyLT5sb2NrKQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGRpdmlkZXItPmxvY2ssIGZsYWdzKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0yNTYsOCArMjQ5LDcgQEAKIAkJCQkgICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCBfX2lvbWVtICpyZWcsCiAJCQkJICAgICB1OCBzaGlmdCwgdTggd2lkdGgsIHU4IGNsa19kaXZpZGVyX2ZsYWdzLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGNsa19kaXZfdGFibGUgKnRhYmxlLAotCQkJCSAgICAgc3BpbmxvY2tfdCAqbG9jaykKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBjbGtfZGl2X3RhYmxlICp0YWJsZSkKIHsKIAlzdHJ1Y3QgY2xrX2RpdmlkZXIgKmRpdjsKIAlzdHJ1Y3QgY2xrICpjbGs7CkBAIC0yODgsNyArMjgwLDYgQEAKIAlkaXYtPnNoaWZ0ID0gc2hpZnQ7CiAJZGl2LT53aWR0aCA9IHdpZHRoOwogCWRpdi0+ZmxhZ3MgPSBjbGtfZGl2aWRlcl9mbGFnczsKLQlkaXYtPmxvY2sgPSBsb2NrOwogCWRpdi0+aHcuaW5pdCA9ICZpbml0OwogCWRpdi0+dGFibGUgPSB0YWJsZTsKIApAQCAtNDIxLDcgKzQxMiw3IEBACiAKIAljbGsgPSBfcmVnaXN0ZXJfZGl2aWRlcihOVUxMLCBzZXR1cC0+bmFtZSwgZGl2LT5wYXJlbnQsCiAJCQkJZmxhZ3MsICh2b2lkIF9faW9tZW0gKilyZWcsIGRpdi0+Yml0X3NoaWZ0LAotCQkJCXdpZHRoLCBkaXZfZmxhZ3MsIHRhYmxlLCBOVUxMKTsKKwkJCQl3aWR0aCwgZGl2X2ZsYWdzLCB0YWJsZSk7CiAKIAlpZiAoSVNfRVJSKGNsaykpCiAJCWtmcmVlKHRhYmxlKTsKQEAgLTU4NCw4ICs1NzUsNyBAQAogCQlnb3RvIGNsZWFudXA7CiAKIAljbGsgPSBfcmVnaXN0ZXJfZGl2aWRlcihOVUxMLCBub2RlLT5uYW1lLCBwYXJlbnRfbmFtZSwgZmxhZ3MsIHJlZywKLQkJCQlzaGlmdCwgd2lkdGgsIGNsa19kaXZpZGVyX2ZsYWdzLCB0YWJsZSwKLQkJCQlOVUxMKTsKKwkJCQlzaGlmdCwgd2lkdGgsIGNsa19kaXZpZGVyX2ZsYWdzLCB0YWJsZSk7CiAKIAlpZiAoIUlTX0VSUihjbGspKSB7CiAJCW9mX2Nsa19hZGRfcHJvdmlkZXIobm9kZSwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBjbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvdGkvZmFwbGwuYyBiL2RyaXZlcnMvY2xrL3RpL2ZhcGxsLmMKaW5kZXggZjRiMmU5OC4uNjZhMGQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvZmFwbGwuYworKysgYi9kcml2ZXJzL2Nsay90aS9mYXBsbC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIHsKIAlzdHJ1Y3QgZmFwbGxfZGF0YSAqZmQgPSB0b19mYXBsbChodyk7CiAJdTMyIGZhcGxsX24sIGZhcGxsX3AsIHY7Ci0JbG9uZyBsb25nIHJhdGU7CisJdTY0IHJhdGU7CiAKIAlpZiAodGlfZmFwbGxfY2xvY2tfaXNfYnlwYXNzKGZkKSkKIAkJcmV0dXJuIHBhcmVudF9yYXRlOwpAQCAtMzE0LDcgKzMxNCw3IEBACiB7CiAJc3RydWN0IGZhcGxsX3N5bnRoICpzeW50aCA9IHRvX3N5bnRoKGh3KTsKIAl1MzIgc3ludGhfZGl2X207Ci0JbG9uZyBsb25nIHJhdGU7CisJdTY0IHJhdGU7CiAKIAkvKiBUaGUgYXVkaW9fcGxsX2NsazEgaXMgaGFyZHdpcmVkIHRvIHByb2R1Y2UgMzIuNzY4S2lIeiBjbG9jayAqLwogCWlmICghc3ludGgtPmRpdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3RpL211eC5jIGIvZHJpdmVycy9jbGsvdGkvbXV4LmMKaW5kZXggNjlmMDhhMS4uZGFiOWJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvdGkvbXV4LmMKKysrIGIvZHJpdmVycy9jbGsvdGkvbXV4LmMKQEAgLTY5LDcgKzY5LDYgQEAKIHsKIAlzdHJ1Y3QgY2xrX211eCAqbXV4ID0gdG9fY2xrX211eChodyk7CiAJdTMyIHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAogCWlmIChtdXgtPnRhYmxlKSB7CiAJCWluZGV4ID0gbXV4LT50YWJsZVtpbmRleF07CkBAIC04MSw5ICs4MCw2IEBACiAJCQlpbmRleCsrOwogCX0KIAotCWlmIChtdXgtPmxvY2spCi0JCXNwaW5fbG9ja19pcnFzYXZlKG11eC0+bG9jaywgZmxhZ3MpOwotCiAJaWYgKG11eC0+ZmxhZ3MgJiBDTEtfTVVYX0hJV09SRF9NQVNLKSB7CiAJCXZhbCA9IG11eC0+bWFzayA8PCAobXV4LT5zaGlmdCArIDE2KTsKIAl9IGVsc2UgewpAQCAtOTMsOSArODksNiBAQAogCXZhbCB8PSBpbmRleCA8PCBtdXgtPnNoaWZ0OwogCXRpX2Nsa19sbF9vcHMtPmNsa193cml0ZWwodmFsLCBtdXgtPnJlZyk7CiAKLQlpZiAobXV4LT5sb2NrKQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKG11eC0+bG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOSw3ICsxMDIsNyBAQAogCQkJCSBjb25zdCBjaGFyICoqcGFyZW50X25hbWVzLCB1OCBudW1fcGFyZW50cywKIAkJCQkgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCBfX2lvbWVtICpyZWcsCiAJCQkJIHU4IHNoaWZ0LCB1MzIgbWFzaywgdTggY2xrX211eF9mbGFncywKLQkJCQkgdTMyICp0YWJsZSwgc3BpbmxvY2tfdCAqbG9jaykKKwkJCQkgdTMyICp0YWJsZSkKIHsKIAlzdHJ1Y3QgY2xrX211eCAqbXV4OwogCXN0cnVjdCBjbGsgKmNsazsKQEAgLTEzMyw3ICsxMjYsNiBAQAogCW11eC0+c2hpZnQgPSBzaGlmdDsKIAltdXgtPm1hc2sgPSBtYXNrOwogCW11eC0+ZmxhZ3MgPSBjbGtfbXV4X2ZsYWdzOwotCW11eC0+bG9jayA9IGxvY2s7CiAJbXV4LT50YWJsZSA9IHRhYmxlOwogCW11eC0+aHcuaW5pdCA9ICZpbml0OwogCkBAIC0xNzUsNyArMTY3LDcgQEAKIAogCXJldHVybiBfcmVnaXN0ZXJfbXV4KE5VTEwsIHNldHVwLT5uYW1lLCBtdXgtPnBhcmVudHMsIG11eC0+bnVtX3BhcmVudHMsCiAJCQkgICAgIGZsYWdzLCAodm9pZCBfX2lvbWVtICopcmVnLCBtdXgtPmJpdF9zaGlmdCwgbWFzaywKLQkJCSAgICAgbXV4X2ZsYWdzLCBOVUxMLCBOVUxMKTsKKwkJCSAgICAgbXV4X2ZsYWdzLCBOVUxMKTsKIH0KIAogLyoqCkBAIC0yMjcsOCArMjE5LDcgQEAKIAltYXNrID0gKDEgPDwgZmxzKG1hc2spKSAtIDE7CiAKIAljbGsgPSBfcmVnaXN0ZXJfbXV4KE5VTEwsIG5vZGUtPm5hbWUsIHBhcmVudF9uYW1lcywgbnVtX3BhcmVudHMsCi0JCQkgICAgZmxhZ3MsIHJlZywgc2hpZnQsIG1hc2ssIGNsa19tdXhfZmxhZ3MsIE5VTEwsCi0JCQkgICAgTlVMTCk7CisJCQkgICAgZmxhZ3MsIHJlZywgc2hpZnQsIG1hc2ssIGNsa19tdXhfZmxhZ3MsIE5VTEwpOwogCiAJaWYgKCFJU19FUlIoY2xrKSkKIAkJb2ZfY2xrX2FkZF9wcm92aWRlcihub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcKaW5kZXggNzFjZmRmNy4uMmViNWYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZwpAQCAtMSw0ICsxLDUgQEAKIG1lbnUgIkNsb2NrIFNvdXJjZSBkcml2ZXJzIgorCWRlcGVuZHMgb24gIUFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiAKIGNvbmZpZyBDTEtTUkNfT0YKIAlib29sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2ZzbF9mdG1fdGltZXIuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvZnNsX2Z0bV90aW1lci5jCmluZGV4IDEwMjAyZjEuLjUxN2UxYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvZnNsX2Z0bV90aW1lci5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvZnNsX2Z0bV90aW1lci5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlpbnQgZXJyOwogCiAJZnRtX3dyaXRlbCgweDAwLCBwcml2LT5jbGtldnRfYmFzZSArIEZUTV9DTlRJTik7Ci0JZnRtX3dyaXRlbCh+MFVMLCBwcml2LT5jbGtldnRfYmFzZSArIEZUTV9NT0QpOworCWZ0bV93cml0ZWwofjB1LCBwcml2LT5jbGtldnRfYmFzZSArIEZUTV9NT0QpOwogCiAJZnRtX3Jlc2V0X2NvdW50ZXIocHJpdi0+Y2xrZXZ0X2Jhc2UpOwogCkBAIC0yMzAsNyArMjMwLDcgQEAKIAlpbnQgZXJyOwogCiAJZnRtX3dyaXRlbCgweDAwLCBwcml2LT5jbGtzcmNfYmFzZSArIEZUTV9DTlRJTik7Ci0JZnRtX3dyaXRlbCh+MFVMLCBwcml2LT5jbGtzcmNfYmFzZSArIEZUTV9NT0QpOworCWZ0bV93cml0ZWwofjB1LCBwcml2LT5jbGtzcmNfYmFzZSArIEZUTV9NT0QpOwogCiAJZnRtX3Jlc2V0X2NvdW50ZXIocHJpdi0+Y2xrc3JjX2Jhc2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL21taW8uYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvbW1pby5jCmluZGV4IDE1OTNhZGUuLmM0ZjdkN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvbW1pby5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvbW1pby5jCkBAIC01NSw3ICs1NSw3IEBACiB7CiAJc3RydWN0IGNsb2Nrc291cmNlX21taW8gKmNzOwogCi0JaWYgKGJpdHMgPiAzMiB8fCBiaXRzIDwgMTYpCisJaWYgKGJpdHMgPiA2NCB8fCBiaXRzIDwgMTYpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY3MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2xvY2tzb3VyY2VfbW1pbyksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL0tjb25maWcuYXJtIGIvZHJpdmVycy9jcHVmcmVxL0tjb25maWcuYXJtCmluZGV4IDE1ODJjMWMuLmIxZjhhNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLmFybQorKysgYi9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZy5hcm0KQEAgLTg0LDYgKzg0LDcgQEAKIGNvbmZpZyBBUk1fTVQ4MTczX0NQVUZSRVEKIAlib29sICJNZWRpYXRlayBNVDgxNzMgQ1BVRnJlcSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyAmJiBSRUdVTEFUT1IKKwlkZXBlbmRzIG9uIEFSTTY0IHx8IChBUk1fQ1BVX1RPUE9MT0dZICYmIENPTVBJTEVfVEVTVCkKIAlkZXBlbmRzIG9uICFDUFVfVEhFUk1BTCB8fCBUSEVSTUFMPXkKIAlzZWxlY3QgUE1fT1BQCiAJaGVscApAQCAtMjAxLDcgKzIwMiw3IEBACiAKIGNvbmZpZyBBUk1fU0NQSV9DUFVGUkVRCiAgICAgICAgIHRyaXN0YXRlICJTQ1BJIGJhc2VkIENQVWZyZXEgZHJpdmVyIgotCWRlcGVuZHMgb24gQVJNX0JJR19MSVRUTEVfQ1BVRlJFUSAmJiBBUk1fU0NQSV9QUk9UT0NPTAorCWRlcGVuZHMgb24gQVJNX0JJR19MSVRUTEVfQ1BVRlJFUSAmJiBBUk1fU0NQSV9QUk9UT0NPTCAmJiBDT01NT05fQ0xLX1NDUEkKICAgICAgICAgaGVscAogCSAgVGhpcyBhZGRzIHRoZSBDUFVmcmVxIGRyaXZlciBzdXBwb3J0IGZvciBBUk0gYmlnLkxJVFRMRSBwbGF0Zm9ybXMKIAkgIHVzaW5nIFNDUEkgcHJvdG9jb2wgZm9yIENQVSBwb3dlciBtYW5hZ2VtZW50LgpAQCAtMjI1LDcgKzIyNiw3IEBACiAKIGNvbmZpZyBBUk1fVEVHUkExMjRfQ1BVRlJFUQogCXRyaXN0YXRlICJUZWdyYTEyNCBDUFVGcmVxIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX1RFR1JBICYmIENQVUZSRVFfRFQKKwlkZXBlbmRzIG9uIEFSQ0hfVEVHUkEgJiYgQ1BVRlJFUV9EVCAmJiBSRUdVTEFUT1IKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIHN1cHBvcnQgZm9yIFRlZ3JhMTI0IFNPQ3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZy54ODYgYi9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZy54ODYKaW5kZXggYWRiZDFkZS4uYzU5YmRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL0tjb25maWcueDg2CisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLng4NgpAQCAtNSw3ICs1LDYgQEAKIGNvbmZpZyBYODZfSU5URUxfUFNUQVRFCiAgICAgICAgYm9vbCAiSW50ZWwgUCBzdGF0ZSBjb250cm9sIgogICAgICAgIGRlcGVuZHMgb24gWDg2Ci0gICAgICAgc2VsZWN0IEFDUElfUFJPQ0VTU09SIGlmIEFDUEkKICAgICAgICBoZWxwCiAgICAgICAgICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBQIHN0YXRlIGZvciBJbnRlbCBjb3JlIHByb2Nlc3NvcnMuCiAJICBUaGUgZHJpdmVyIGltcGxlbWVudHMgYW4gaW50ZXJuYWwgZ292ZXJub3IgYW5kIHdpbGwgYmVjb21lCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3BwY19jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3BwY19jcHVmcmVxLmMKaW5kZXggZThjYjMzNC4uN2MwYmRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwcGNfY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHBjX2NwdWZyZXEuYwpAQCAtOTgsMTAgKzk4LDExIEBACiAJcG9saWN5LT5tYXggPSBjcHUtPnBlcmZfY2Fwcy5oaWdoZXN0X3BlcmY7CiAJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gcG9saWN5LT5taW47CiAJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gcG9saWN5LT5tYXg7CisJcG9saWN5LT5zaGFyZWRfdHlwZSA9IGNwdS0+c2hhcmVkX3R5cGU7CiAKIAlpZiAocG9saWN5LT5zaGFyZWRfdHlwZSA9PSBDUFVGUkVRX1NIQVJFRF9UWVBFX0FOWSkKIAkJY3B1bWFza19jb3B5KHBvbGljeS0+Y3B1cywgY3B1LT5zaGFyZWRfY3B1X21hcCk7Ci0JZWxzZSB7CisJZWxzZSBpZiAocG9saWN5LT5zaGFyZWRfdHlwZSA9PSBDUFVGUkVRX1NIQVJFRF9UWVBFX0FMTCkgewogCQkvKiBTdXBwb3J0IG9ubHkgU1dfQU5ZIGZvciBub3cuICovCiAJCXByX2RlYnVnKCJVbnN1cHBvcnRlZCBDUFUgY28tb3JkIHR5cGVcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDdjNDhlNzMuLjg0MTJjZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtOTc2LDEwICs5NzYsMTQgQEAKIAogCW5ld19wb2xpY3kuZ292ZXJub3IgPSBnb3Y7CiAKLQkvKiBVc2UgdGhlIGRlZmF1bHQgcG9saWN5IGlmIGl0cyB2YWxpZC4gKi8KLQlpZiAoY3B1ZnJlcV9kcml2ZXItPnNldHBvbGljeSkKLQkJY3B1ZnJlcV9wYXJzZV9nb3Zlcm5vcihnb3YtPm5hbWUsICZuZXdfcG9saWN5LnBvbGljeSwgTlVMTCk7Ci0KKwkvKiBVc2UgdGhlIGRlZmF1bHQgcG9saWN5IGlmIHRoZXJlIGlzIG5vIGxhc3RfcG9saWN5LiAqLworCWlmIChjcHVmcmVxX2RyaXZlci0+c2V0cG9saWN5KSB7CisJCWlmIChwb2xpY3ktPmxhc3RfcG9saWN5KQorCQkJbmV3X3BvbGljeS5wb2xpY3kgPSBwb2xpY3ktPmxhc3RfcG9saWN5OworCQllbHNlCisJCQljcHVmcmVxX3BhcnNlX2dvdmVybm9yKGdvdi0+bmFtZSwgJm5ld19wb2xpY3kucG9saWN5LAorCQkJCQkgICAgICAgTlVMTCk7CisJfQogCS8qIHNldCBkZWZhdWx0IHBvbGljeSAqLwogCXJldHVybiBjcHVmcmVxX3NldF9wb2xpY3kocG9saWN5LCAmbmV3X3BvbGljeSk7CiB9CkBAIC0xMzMwLDYgKzEzMzQsOCBAQAogCQlpZiAoaGFzX3RhcmdldCgpKQogCQkJc3RybmNweShwb2xpY3ktPmxhc3RfZ292ZXJub3IsIHBvbGljeS0+Z292ZXJub3ItPm5hbWUsCiAJCQkJQ1BVRlJFUV9OQU1FX0xFTik7CisJCWVsc2UKKwkJCXBvbGljeS0+bGFzdF9wb2xpY3kgPSBwb2xpY3ktPnBvbGljeTsKIAl9IGVsc2UgaWYgKGNwdSA9PSBwb2xpY3ktPmNwdSkgewogCQkvKiBOb21pbmF0ZSBuZXcgQ1BVICovCiAJCXBvbGljeS0+Y3B1ID0gY3B1bWFza19hbnkocG9saWN5LT5jcHVzKTsKQEAgLTE0MDEsMTMgKzE0MDcsMTAgQEAKIAl9CiAKIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHBvbGljeS0+cmVhbF9jcHVzKTsKLQotCWlmIChjcHVtYXNrX2VtcHR5KHBvbGljeS0+cmVhbF9jcHVzKSkgewotCQljcHVmcmVxX3BvbGljeV9mcmVlKHBvbGljeSwgdHJ1ZSk7Ci0JCXJldHVybjsKLQl9Ci0KIAlyZW1vdmVfY3B1X2Rldl9zeW1saW5rKHBvbGljeSwgY3B1KTsKKworCWlmIChjcHVtYXNrX2VtcHR5KHBvbGljeS0+cmVhbF9jcHVzKSkKKwkJY3B1ZnJlcV9wb2xpY3lfZnJlZShwb2xpY3ksIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9pbnRlbF9wc3RhdGUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9pbnRlbF9wc3RhdGUuYwppbmRleCAyZTMxZDA5Li45OGZiODgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvaW50ZWxfcHN0YXRlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2ludGVsX3BzdGF0ZS5jCkBAIC0zNCwxNCArMzQsMTAgQEAKICNpbmNsdWRlIDxhc20vY3B1X2RldmljZV9pZC5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19BQ1BJKQotI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBCWVRfUkFUSU9TCQkweDY2YQotI2RlZmluZSBCWVRfVklEUwkJMHg2NmIKLSNkZWZpbmUgQllUX1RVUkJPX1JBVElPUwkweDY2YwotI2RlZmluZSBCWVRfVFVSQk9fVklEUwkJMHg2NmQKKyNkZWZpbmUgQVRPTV9SQVRJT1MJCTB4NjZhCisjZGVmaW5lIEFUT01fVklEUwkJMHg2NmIKKyNkZWZpbmUgQVRPTV9UVVJCT19SQVRJT1MJMHg2NmMKKyNkZWZpbmUgQVRPTV9UVVJCT19WSURTCQkweDY2ZAogCiAjZGVmaW5lIEZSQUNfQklUUyA4CiAjZGVmaW5lIGludF90b2ZwKFgpICgoaW50NjRfdCkoWCkgPDwgRlJBQ19CSVRTKQpAQCAtMTE3LDkgKzExMyw2IEBACiAJdTY0CXByZXZfbXBlcmY7CiAJdTY0CXByZXZfdHNjOwogCXN0cnVjdCBzYW1wbGUgc2FtcGxlOwotI2lmIElTX0VOQUJMRUQoQ09ORklHX0FDUEkpCi0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlIGFjcGlfcGVyZl9kYXRhOwotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGNwdWRhdGEgKiphbGxfY3B1X2RhdGE7CkBAIC0xNTAsNyArMTQzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcHN0YXRlX2FkanVzdF9wb2xpY3kgcGlkX3BhcmFtczsKIHN0YXRpYyBzdHJ1Y3QgcHN0YXRlX2Z1bmNzIHBzdGF0ZV9mdW5jczsKIHN0YXRpYyBpbnQgaHdwX2FjdGl2ZTsKLXN0YXRpYyBpbnQgbm9fYWNwaV9wZXJmOwogCiBzdHJ1Y3QgcGVyZl9saW1pdHMgewogCWludCBub190dXJibzsKQEAgLTE2Myw4ICsxNTUsNiBAQAogCWludCBtYXhfc3lzZnNfcGN0OwogCWludCBtaW5fcG9saWN5X3BjdDsKIAlpbnQgbWluX3N5c2ZzX3BjdDsKLQlpbnQgbWF4X3BlcmZfY3RsOwotCWludCBtaW5fcGVyZl9jdGw7CiB9OwogCiBzdGF0aWMgc3RydWN0IHBlcmZfbGltaXRzIHBlcmZvcm1hbmNlX2xpbWl0cyA9IHsKQEAgLTE5MSw4ICsxODEsNiBAQAogCS5tYXhfc3lzZnNfcGN0ID0gMTAwLAogCS5taW5fcG9saWN5X3BjdCA9IDAsCiAJLm1pbl9zeXNmc19wY3QgPSAwLAotCS5tYXhfcGVyZl9jdGwgPSAwLAotCS5taW5fcGVyZl9jdGwgPSAwLAogfTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRQpAQCAtMjAxLDE1MyArMTg5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9saW1pdHMgKmxpbWl0cyA9ICZwb3dlcnNhdmVfbGltaXRzOwogI2VuZGlmCiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19BQ1BJKQotLyoKLSAqIFRoZSBtYXggdGFyZ2V0IHBzdGF0ZSByYXRpbyBpcyBhIDggYml0IHZhbHVlIGluIGJvdGggUExBVEZPUk1fSU5GTyBNU1IgYW5kCi0gKiBpbiBUVVJCT19SQVRJT19MSU1JVCBNU1IsIHdoaWNoIHBzdGF0ZSBkcml2ZXIgc3RvcmVzIGluIG1heF9wc3RhdGUgYW5kCi0gKiBtYXhfdHVyYm9fcHN0YXRlIGZpZWxkcy4gVGhlIFBFUkZfQ1RMIE1TUiBjb250YWlucyAxNiBiaXQgdmFsdWUgZm9yIFAgc3RhdGUKLSAqIHJhdGlvLCBvdXQgb2YgaXQgb25seSBoaWdoIDggYml0cyBhcmUgdXNlZC4gRm9yIGV4YW1wbGUgMHgxNzAwIGlzIHNldHRpbmcKLSAqIHRhcmdldCByYXRpbyAweDE3LiBUaGUgX1BTUyBjb250cm9sIHZhbHVlIHN0b3JlcyBpbiBhIGZvcm1hdCB3aGljaCBjYW4gYmUKLSAqIGRpcmVjdGx5IHdyaXR0ZW4gdG8gUEVSRl9DVEwgTVNSLiBCdXQgaW4gaW50ZWxfcHN0YXRlIGRyaXZlciB0aGlzIHNoaWZ0Ci0gKiBvY2N1cnMgZHVyaW5nIHdyaXRlIHRvIFBFUkZfQ1RMIChFLmcuIGZvciBjb3JlcyBjb3JlX3NldF9wc3RhdGUoKSkuCi0gKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBfUFNTIGNvbnRyb2wgdmFsdWUgdG8gaW50ZWwgcHN0YXRlIGRyaXZlciBmb3JtYXQKLSAqIGZvciBjb21wYXJpc29uIGFuZCBhc3NpZ25tZW50LgotICovCi1zdGF0aWMgaW50IGNvbnZlcnRfdG9fbmF0aXZlX3BzdGF0ZV9mb3JtYXQoc3RydWN0IGNwdWRhdGEgKmNwdSwgaW50IGluZGV4KQotewotCXJldHVybiBjcHUtPmFjcGlfcGVyZl9kYXRhLnN0YXRlc1tpbmRleF0uY29udHJvbCA+PiA4OwotfQotCi1zdGF0aWMgaW50IGludGVsX3BzdGF0ZV9pbml0X3BlcmZfbGltaXRzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQotewotCXN0cnVjdCBjcHVkYXRhICpjcHU7Ci0JaW50IHJldDsKLQlib29sIHR1cmJvX2Fic2VudCA9IGZhbHNlOwotCWludCBtYXhfcHN0YXRlX2luZGV4OwotCWludCBtaW5fcHNzX2N0bCwgbWF4X3Bzc19jdGwsIHR1cmJvX3Bzc19jdGw7Ci0JaW50IGk7Ci0KLQljcHUgPSBhbGxfY3B1X2RhdGFbcG9saWN5LT5jcHVdOwotCi0JcHJfZGVidWcoImludGVsX3BzdGF0ZTogZGVmYXVsdCBsaW1pdHMgMHgleCAweCV4IDB4JXhcbiIsCi0JCSBjcHUtPnBzdGF0ZS5taW5fcHN0YXRlLCBjcHUtPnBzdGF0ZS5tYXhfcHN0YXRlLAotCQkgY3B1LT5wc3RhdGUudHVyYm9fcHN0YXRlKTsKLQotCWlmICghY3B1LT5hY3BpX3BlcmZfZGF0YS5zaGFyZWRfY3B1X21hcCAmJgotCSAgICB6YWxsb2NfY3B1bWFza192YXJfbm9kZSgmY3B1LT5hY3BpX3BlcmZfZGF0YS5zaGFyZWRfY3B1X21hcCwKLQkJCQkgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUocG9saWN5LT5jcHUpKSkgewotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXQgPSBhY3BpX3Byb2Nlc3Nvcl9yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmY3B1LT5hY3BpX3BlcmZfZGF0YSwKLQkJCQkJCSAgcG9saWN5LT5jcHUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoZSBjb250cm9sIHZhbHVlIGluIF9QU1MgaXMgZm9yIFBFUkZfQ1RMIE1TUiwgd2hpY2ggc2hvdWxkCi0JICogZ3VhcmFudGVlIHRoYXQgdGhlIHN0YXRlcyByZXR1cm5lZCBieSBpdCBtYXAgdG8gdGhlIHN0YXRlcyBpbiBvdXIKLQkgKiBsaXN0IGRpcmVjdGx5LgotCSAqLwotCWlmIChjcHUtPmFjcGlfcGVyZl9kYXRhLmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQgIT0KLQkJCQkJCUFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKQotCQlyZXR1cm4gLUVJTzsKLQotCXByX2RlYnVnKCJpbnRlbF9wc3RhdGU6IENQVSV1IC0gQUNQSSBfUFNTIHBlcmYgZGF0YVxuIiwgcG9saWN5LT5jcHUpOwotCWZvciAoaSA9IDA7IGkgPCBjcHUtPmFjcGlfcGVyZl9kYXRhLnN0YXRlX2NvdW50OyBpKyspCi0JCXByX2RlYnVnKCIgICAgICVjUCVkOiAldSBNSHosICV1IG1XLCAweCV4XG4iLAotCQkJIChpID09IGNwdS0+YWNwaV9wZXJmX2RhdGEuc3RhdGUgPyAnKicgOiAnICcpLCBpLAotCQkJICh1MzIpIGNwdS0+YWNwaV9wZXJmX2RhdGEuc3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5LAotCQkJICh1MzIpIGNwdS0+YWNwaV9wZXJmX2RhdGEuc3RhdGVzW2ldLnBvd2VyLAotCQkJICh1MzIpIGNwdS0+YWNwaV9wZXJmX2RhdGEuc3RhdGVzW2ldLmNvbnRyb2wpOwotCi0JLyoKLQkgKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSBlbnRyeSBfUFNTLCBzaW1wbHkgaWdub3JlIF9QU1MgYW5kIGNvbnRpbnVlIGFzCi0JICogdXN1YWwgd2l0aG91dCB0YWtpbmcgX1BTUyBpbnRvIGFjY291bnQKLQkgKi8KLQlpZiAoY3B1LT5hY3BpX3BlcmZfZGF0YS5zdGF0ZV9jb3VudCA8IDIpCi0JCXJldHVybiAwOwotCi0JdHVyYm9fcHNzX2N0bCA9IGNvbnZlcnRfdG9fbmF0aXZlX3BzdGF0ZV9mb3JtYXQoY3B1LCAwKTsKLQltaW5fcHNzX2N0bCA9IGNvbnZlcnRfdG9fbmF0aXZlX3BzdGF0ZV9mb3JtYXQoY3B1LAotCQkJCQljcHUtPmFjcGlfcGVyZl9kYXRhLnN0YXRlX2NvdW50IC0gMSk7Ci0JLyogQ2hlY2sgaWYgdGhlcmUgaXMgYSB0dXJibyBmcmVxIGluIF9QU1MgKi8KLQlpZiAodHVyYm9fcHNzX2N0bCA8PSBjcHUtPnBzdGF0ZS5tYXhfcHN0YXRlICYmCi0JICAgIHR1cmJvX3Bzc19jdGwgPiBjcHUtPnBzdGF0ZS5taW5fcHN0YXRlKSB7Ci0JCXByX2RlYnVnKCJpbnRlbF9wc3RhdGU6IG5vIHR1cmJvIHJhbmdlIGV4aXN0cyBpbiBfUFNTXG4iKTsKLQkJbGltaXRzLT5ub190dXJibyA9IGxpbWl0cy0+dHVyYm9fZGlzYWJsZWQgPSAxOwotCQljcHUtPnBzdGF0ZS50dXJib19wc3RhdGUgPSBjcHUtPnBzdGF0ZS5tYXhfcHN0YXRlOwotCQl0dXJib19hYnNlbnQgPSB0cnVlOwotCX0KLQotCS8qIENoZWNrIGlmIHRoZSBtYXggbm9uIHR1cmJvIHAgc3RhdGUgPCBJbnRlbCBQIHN0YXRlIG1heCAqLwotCW1heF9wc3RhdGVfaW5kZXggPSB0dXJib19hYnNlbnQgPyAwIDogMTsKLQltYXhfcHNzX2N0bCA9IGNvbnZlcnRfdG9fbmF0aXZlX3BzdGF0ZV9mb3JtYXQoY3B1LCBtYXhfcHN0YXRlX2luZGV4KTsKLQlpZiAobWF4X3Bzc19jdGwgPCBjcHUtPnBzdGF0ZS5tYXhfcHN0YXRlICYmCi0JICAgIG1heF9wc3NfY3RsID4gY3B1LT5wc3RhdGUubWluX3BzdGF0ZSkKLQkJY3B1LT5wc3RhdGUubWF4X3BzdGF0ZSA9IG1heF9wc3NfY3RsOwotCi0JLyogY2hlY2sgSWYgbWluIHBlcmYgPiBJbnRlbCBQIFN0YXRlIG1pbiAqLwotCWlmIChtaW5fcHNzX2N0bCA+IGNwdS0+cHN0YXRlLm1pbl9wc3RhdGUgJiYKLQkgICAgbWluX3Bzc19jdGwgPCBjcHUtPnBzdGF0ZS5tYXhfcHN0YXRlKSB7Ci0JCWNwdS0+cHN0YXRlLm1pbl9wc3RhdGUgPSBtaW5fcHNzX2N0bDsKLQkJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gbWluX3Bzc19jdGwgKiBjcHUtPnBzdGF0ZS5zY2FsaW5nOwotCX0KLQotCWlmICh0dXJib19hYnNlbnQpCi0JCXBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9IGNwdS0+cHN0YXRlLm1heF9wc3RhdGUgKgotCQkJCQkJY3B1LT5wc3RhdGUuc2NhbGluZzsKLQllbHNlIHsKLQkJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gY3B1LT5wc3RhdGUudHVyYm9fcHN0YXRlICoKLQkJCQkJCWNwdS0+cHN0YXRlLnNjYWxpbmc7Ci0JCS8qCi0JCSAqIFRoZSBfUFNTIHRhYmxlIGRvZXNuJ3QgY29udGFpbiB3aG9sZSB0dXJibyBmcmVxdWVuY3kgcmFuZ2UuCi0JCSAqIFRoaXMganVzdCBjb250YWlucyArMSBNSFogYWJvdmUgdGhlIG1heCBub24gdHVyYm8gZnJlcXVlbmN5LAotCQkgKiB3aXRoIGNvbnRyb2wgdmFsdWUgY29ycmVzcG9uZGluZyB0byBtYXggdHVyYm8gcmF0aW8uIEJ1dAotCQkgKiB3aGVuIGNwdWZyZXEgc2V0IHBvbGljeSBpcyBjYWxsZWQsIGl0IHdpbGwgY2FsbCB3aXRoIHRoaXMKLQkJICogbWF4IGZyZXF1ZW5jeSwgd2hpY2ggd2lsbCBjYXVzZSBhIHJlZHVjZWQgcGVyZm9ybWFuY2UgYXMKLQkJICogdGhpcyBkcml2ZXIgdXNlcyByZWFsIG1heCB0dXJibyBmcmVxdWVuY3kgYXMgdGhlIG1heAotCQkgKiBmcmVxdWVueS4gU28gY29ycmVjdCB0aGlzIGZyZXF1ZW5jeSBpbiBfUFNTIHRhYmxlIHRvCi0JCSAqIGNvcnJlY3QgbWF4IHR1cmJvIGZyZXF1ZW5jeSBiYXNlZCBvbiB0aGUgdHVyYm8gcmF0aW8uCi0JCSAqIEFsc28gbmVlZCB0byBjb252ZXJ0IHRvIE1IeiBhcyBfUFNTIGZyZXEgaXMgaW4gTUh6LgotCQkgKi8KLQkJY3B1LT5hY3BpX3BlcmZfZGF0YS5zdGF0ZXNbMF0uY29yZV9mcmVxdWVuY3kgPQotCQkJCQkJdHVyYm9fcHNzX2N0bCAqIDEwMDsKLQl9Ci0KLQlwcl9kZWJ1ZygiaW50ZWxfcHN0YXRlOiBVcGRhdGVkIGxpbWl0cyB1c2luZyBfUFNTIDB4JXggMHgleCAweCV4XG4iLAotCQkgY3B1LT5wc3RhdGUubWluX3BzdGF0ZSwgY3B1LT5wc3RhdGUubWF4X3BzdGF0ZSwKLQkJIGNwdS0+cHN0YXRlLnR1cmJvX3BzdGF0ZSk7Ci0JcHJfZGVidWcoImludGVsX3BzdGF0ZTogcG9saWN5IG1heF9mcmVxPSVkIEtoeiBtaW5fZnJlcSA9ICVkIEtIelxuIiwKLQkJIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGludGVsX3BzdGF0ZV9leGl0X3BlcmZfbGltaXRzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQotewotCXN0cnVjdCBjcHVkYXRhICpjcHU7Ci0KLQlpZiAoIW5vX2FjcGlfcGVyZikKLQkJcmV0dXJuIDA7Ci0KLQljcHUgPSBhbGxfY3B1X2RhdGFbcG9saWN5LT5jcHVdOwotCWFjcGlfcHJvY2Vzc29yX3VucmVnaXN0ZXJfcGVyZm9ybWFuY2UocG9saWN5LT5jcHUpOwotCXJldHVybiAwOwotfQotCi0jZWxzZQotc3RhdGljIGludCBpbnRlbF9wc3RhdGVfaW5pdF9wZXJmX2xpbWl0cyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbnRlbF9wc3RhdGVfZXhpdF9wZXJmX2xpbWl0cyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIHZvaWQgcGlkX3Jlc2V0KHN0cnVjdCBfcGlkICpwaWQsIGludCBzZXRwb2ludCwgaW50IGJ1c3ksCiAJCQkgICAgIGludCBkZWFkYmFuZCwgaW50IGludGVncmFsKSB7CiAJcGlkLT5zZXRwb2ludCA9IHNldHBvaW50OwpAQCAtNjg3LDMxICs1MjgsMzEgQEAKIAl3cm1zcmxfb25fY3B1KGNwdWRhdGEtPmNwdSwgTVNSX1BNX0VOQUJMRSwgMHgxKTsKIH0KIAotc3RhdGljIGludCBieXRfZ2V0X21pbl9wc3RhdGUodm9pZCkKK3N0YXRpYyBpbnQgYXRvbV9nZXRfbWluX3BzdGF0ZSh2b2lkKQogewogCXU2NCB2YWx1ZTsKIAotCXJkbXNybChCWVRfUkFUSU9TLCB2YWx1ZSk7CisJcmRtc3JsKEFUT01fUkFUSU9TLCB2YWx1ZSk7CiAJcmV0dXJuICh2YWx1ZSA+PiA4KSAmIDB4N0Y7CiB9CiAKLXN0YXRpYyBpbnQgYnl0X2dldF9tYXhfcHN0YXRlKHZvaWQpCitzdGF0aWMgaW50IGF0b21fZ2V0X21heF9wc3RhdGUodm9pZCkKIHsKIAl1NjQgdmFsdWU7CiAKLQlyZG1zcmwoQllUX1JBVElPUywgdmFsdWUpOworCXJkbXNybChBVE9NX1JBVElPUywgdmFsdWUpOwogCXJldHVybiAodmFsdWUgPj4gMTYpICYgMHg3RjsKIH0KIAotc3RhdGljIGludCBieXRfZ2V0X3R1cmJvX3BzdGF0ZSh2b2lkKQorc3RhdGljIGludCBhdG9tX2dldF90dXJib19wc3RhdGUodm9pZCkKIHsKIAl1NjQgdmFsdWU7CiAKLQlyZG1zcmwoQllUX1RVUkJPX1JBVElPUywgdmFsdWUpOworCXJkbXNybChBVE9NX1RVUkJPX1JBVElPUywgdmFsdWUpOwogCXJldHVybiB2YWx1ZSAmIDB4N0Y7CiB9CiAKLXN0YXRpYyB2b2lkIGJ5dF9zZXRfcHN0YXRlKHN0cnVjdCBjcHVkYXRhICpjcHVkYXRhLCBpbnQgcHN0YXRlKQorc3RhdGljIHZvaWQgYXRvbV9zZXRfcHN0YXRlKHN0cnVjdCBjcHVkYXRhICpjcHVkYXRhLCBpbnQgcHN0YXRlKQogewogCXU2NCB2YWw7CiAJaW50MzJfdCB2aWRfZnA7CkBAIC03MzYsMjcgKzU3Nyw0MiBAQAogCXdybXNybF9vbl9jcHUoY3B1ZGF0YS0+Y3B1LCBNU1JfSUEzMl9QRVJGX0NUTCwgdmFsKTsKIH0KIAotI2RlZmluZSBCWVRfQkNMS19GUkVRUyA1Ci1zdGF0aWMgaW50IGJ5dF9mcmVxX3RhYmxlW0JZVF9CQ0xLX0ZSRVFTXSA9IHsgODMzLCAxMDAwLCAxMzMzLCAxMTY3LCA4MDB9OwotCi1zdGF0aWMgaW50IGJ5dF9nZXRfc2NhbGluZyh2b2lkKQorc3RhdGljIGludCBzaWx2ZXJtb250X2dldF9zY2FsaW5nKHZvaWQpCiB7CiAJdTY0IHZhbHVlOwogCWludCBpOworCS8qIERlZmluZWQgaW4gVGFibGUgMzUtNiBmcm9tIFNETSAoU2VwdCAyMDE1KSAqLworCXN0YXRpYyBpbnQgc2lsdmVybW9udF9mcmVxX3RhYmxlW10gPSB7CisJCTgzMzAwLCAxMDAwMDAsIDEzMzMwMCwgMTE2NzAwLCA4MDAwMH07CiAKIAlyZG1zcmwoTVNSX0ZTQl9GUkVRLCB2YWx1ZSk7Ci0JaSA9IHZhbHVlICYgMHgzOworCWkgPSB2YWx1ZSAmIDB4NzsKKwlXQVJOX09OKGkgPiA0KTsKIAotCUJVR19PTihpID4gQllUX0JDTEtfRlJFUVMpOwotCi0JcmV0dXJuIGJ5dF9mcmVxX3RhYmxlW2ldICogMTAwOworCXJldHVybiBzaWx2ZXJtb250X2ZyZXFfdGFibGVbaV07CiB9CiAKLXN0YXRpYyB2b2lkIGJ5dF9nZXRfdmlkKHN0cnVjdCBjcHVkYXRhICpjcHVkYXRhKQorc3RhdGljIGludCBhaXJtb250X2dldF9zY2FsaW5nKHZvaWQpCit7CisJdTY0IHZhbHVlOworCWludCBpOworCS8qIERlZmluZWQgaW4gVGFibGUgMzUtMTAgZnJvbSBTRE0gKFNlcHQgMjAxNSkgKi8KKwlzdGF0aWMgaW50IGFpcm1vbnRfZnJlcV90YWJsZVtdID0geworCQk4MzMwMCwgMTAwMDAwLCAxMzMzMDAsIDExNjcwMCwgODAwMDAsCisJCTkzMzAwLCA5MDAwMCwgODg5MDAsIDg3NTAwfTsKKworCXJkbXNybChNU1JfRlNCX0ZSRVEsIHZhbHVlKTsKKwlpID0gdmFsdWUgJiAweEY7CisJV0FSTl9PTihpID4gOCk7CisKKwlyZXR1cm4gYWlybW9udF9mcmVxX3RhYmxlW2ldOworfQorCitzdGF0aWMgdm9pZCBhdG9tX2dldF92aWQoc3RydWN0IGNwdWRhdGEgKmNwdWRhdGEpCiB7CiAJdTY0IHZhbHVlOwogCi0JcmRtc3JsKEJZVF9WSURTLCB2YWx1ZSk7CisJcmRtc3JsKEFUT01fVklEUywgdmFsdWUpOwogCWNwdWRhdGEtPnZpZC5taW4gPSBpbnRfdG9mcCgodmFsdWUgPj4gOCkgJiAweDdmKTsKIAljcHVkYXRhLT52aWQubWF4ID0gaW50X3RvZnAoKHZhbHVlID4+IDE2KSAmIDB4N2YpOwogCWNwdWRhdGEtPnZpZC5yYXRpbyA9IGRpdl9mcCgKQEAgLTc2NCw3ICs2MjAsNyBAQAogCQlpbnRfdG9mcChjcHVkYXRhLT5wc3RhdGUubWF4X3BzdGF0ZSAtCiAJCQljcHVkYXRhLT5wc3RhdGUubWluX3BzdGF0ZSkpOwogCi0JcmRtc3JsKEJZVF9UVVJCT19WSURTLCB2YWx1ZSk7CisJcmRtc3JsKEFUT01fVFVSQk9fVklEUywgdmFsdWUpOwogCWNwdWRhdGEtPnZpZC50dXJibyA9IHZhbHVlICYgMHg3ZjsKIH0KIApAQCAtODg1LDcgKzc0MSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RlZmF1bHRzIGJ5dF9wYXJhbXMgPSB7CitzdGF0aWMgc3RydWN0IGNwdV9kZWZhdWx0cyBzaWx2ZXJtb250X3BhcmFtcyA9IHsKIAkucGlkX3BvbGljeSA9IHsKIAkJLnNhbXBsZV9yYXRlX21zID0gMTAsCiAJCS5kZWFkYmFuZCA9IDAsCkBAIC04OTUsMTMgKzc1MSwzMyBAQAogCQkuaV9nYWluX3BjdCA9IDQsCiAJfSwKIAkuZnVuY3MgPSB7Ci0JCS5nZXRfbWF4ID0gYnl0X2dldF9tYXhfcHN0YXRlLAotCQkuZ2V0X21heF9waHlzaWNhbCA9IGJ5dF9nZXRfbWF4X3BzdGF0ZSwKLQkJLmdldF9taW4gPSBieXRfZ2V0X21pbl9wc3RhdGUsCi0JCS5nZXRfdHVyYm8gPSBieXRfZ2V0X3R1cmJvX3BzdGF0ZSwKLQkJLnNldCA9IGJ5dF9zZXRfcHN0YXRlLAotCQkuZ2V0X3NjYWxpbmcgPSBieXRfZ2V0X3NjYWxpbmcsCi0JCS5nZXRfdmlkID0gYnl0X2dldF92aWQsCisJCS5nZXRfbWF4ID0gYXRvbV9nZXRfbWF4X3BzdGF0ZSwKKwkJLmdldF9tYXhfcGh5c2ljYWwgPSBhdG9tX2dldF9tYXhfcHN0YXRlLAorCQkuZ2V0X21pbiA9IGF0b21fZ2V0X21pbl9wc3RhdGUsCisJCS5nZXRfdHVyYm8gPSBhdG9tX2dldF90dXJib19wc3RhdGUsCisJCS5zZXQgPSBhdG9tX3NldF9wc3RhdGUsCisJCS5nZXRfc2NhbGluZyA9IHNpbHZlcm1vbnRfZ2V0X3NjYWxpbmcsCisJCS5nZXRfdmlkID0gYXRvbV9nZXRfdmlkLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNwdV9kZWZhdWx0cyBhaXJtb250X3BhcmFtcyA9IHsKKwkucGlkX3BvbGljeSA9IHsKKwkJLnNhbXBsZV9yYXRlX21zID0gMTAsCisJCS5kZWFkYmFuZCA9IDAsCisJCS5zZXRwb2ludCA9IDYwLAorCQkucF9nYWluX3BjdCA9IDE0LAorCQkuZF9nYWluX3BjdCA9IDAsCisJCS5pX2dhaW5fcGN0ID0gNCwKKwl9LAorCS5mdW5jcyA9IHsKKwkJLmdldF9tYXggPSBhdG9tX2dldF9tYXhfcHN0YXRlLAorCQkuZ2V0X21heF9waHlzaWNhbCA9IGF0b21fZ2V0X21heF9wc3RhdGUsCisJCS5nZXRfbWluID0gYXRvbV9nZXRfbWluX3BzdGF0ZSwKKwkJLmdldF90dXJibyA9IGF0b21fZ2V0X3R1cmJvX3BzdGF0ZSwKKwkJLnNldCA9IGF0b21fc2V0X3BzdGF0ZSwKKwkJLmdldF9zY2FsaW5nID0gYWlybW9udF9nZXRfc2NhbGluZywKKwkJLmdldF92aWQgPSBhdG9tX2dldF92aWQsCiAJfSwKIH07CiAKQEAgLTkzOCwyMyArODE0LDEyIEBACiAJICogcG9saWN5LCBvciBieSBjcHUgc3BlY2lmaWMgZGVmYXVsdCB2YWx1ZXMgZGV0ZXJtaW5lZCB0aHJvdWdoCiAJICogZXhwZXJpbWVudGF0aW9uLgogCSAqLwotCWlmIChsaW1pdHMtPm1heF9wZXJmX2N0bCAmJiBsaW1pdHMtPm1heF9zeXNmc19wY3QgPj0KLQkJCQkJCWxpbWl0cy0+bWF4X3BvbGljeV9wY3QpIHsKLQkJKm1heCA9IGxpbWl0cy0+bWF4X3BlcmZfY3RsOwotCX0gZWxzZSB7Ci0JCW1heF9wZXJmX2FkaiA9IGZwX3RvaW50KG11bF9mcChpbnRfdG9mcChtYXhfcGVyZiksCi0JCQkJCWxpbWl0cy0+bWF4X3BlcmYpKTsKLQkJKm1heCA9IGNsYW1wX3QoaW50LCBtYXhfcGVyZl9hZGosIGNwdS0+cHN0YXRlLm1pbl9wc3RhdGUsCi0JCQkgICAgICAgY3B1LT5wc3RhdGUudHVyYm9fcHN0YXRlKTsKLQl9CisJbWF4X3BlcmZfYWRqID0gZnBfdG9pbnQobXVsX2ZwKGludF90b2ZwKG1heF9wZXJmKSwgbGltaXRzLT5tYXhfcGVyZikpOworCSptYXggPSBjbGFtcF90KGludCwgbWF4X3BlcmZfYWRqLAorCQkJY3B1LT5wc3RhdGUubWluX3BzdGF0ZSwgY3B1LT5wc3RhdGUudHVyYm9fcHN0YXRlKTsKIAotCWlmIChsaW1pdHMtPm1pbl9wZXJmX2N0bCkgewotCQkqbWluID0gbGltaXRzLT5taW5fcGVyZl9jdGw7Ci0JfSBlbHNlIHsKLQkJbWluX3BlcmYgPSBmcF90b2ludChtdWxfZnAoaW50X3RvZnAobWF4X3BlcmYpLAotCQkJCSAgICBsaW1pdHMtPm1pbl9wZXJmKSk7Ci0JCSptaW4gPSBjbGFtcF90KGludCwgbWluX3BlcmYsIGNwdS0+cHN0YXRlLm1pbl9wc3RhdGUsIG1heF9wZXJmKTsKLQl9CisJbWluX3BlcmYgPSBmcF90b2ludChtdWxfZnAoaW50X3RvZnAobWF4X3BlcmYpLCBsaW1pdHMtPm1pbl9wZXJmKSk7CisJKm1pbiA9IGNsYW1wX3QoaW50LCBtaW5fcGVyZiwgY3B1LT5wc3RhdGUubWluX3BzdGF0ZSwgbWF4X3BlcmYpOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9wc3RhdGVfc2V0X3BzdGF0ZShzdHJ1Y3QgY3B1ZGF0YSAqY3B1LCBpbnQgcHN0YXRlLCBib29sIGZvcmNlKQpAQCAtMTE1Myw3ICsxMDE4LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2NwdV9pZCBpbnRlbF9wc3RhdGVfY3B1X2lkc1tdID0gewogCUlDUFUoMHgyYSwgY29yZV9wYXJhbXMpLAogCUlDUFUoMHgyZCwgY29yZV9wYXJhbXMpLAotCUlDUFUoMHgzNywgYnl0X3BhcmFtcyksCisJSUNQVSgweDM3LCBzaWx2ZXJtb250X3BhcmFtcyksCiAJSUNQVSgweDNhLCBjb3JlX3BhcmFtcyksCiAJSUNQVSgweDNjLCBjb3JlX3BhcmFtcyksCiAJSUNQVSgweDNkLCBjb3JlX3BhcmFtcyksCkBAIC0xMTYyLDcgKzEwMjcsNyBAQAogCUlDUFUoMHg0NSwgY29yZV9wYXJhbXMpLAogCUlDUFUoMHg0NiwgY29yZV9wYXJhbXMpLAogCUlDUFUoMHg0NywgY29yZV9wYXJhbXMpLAotCUlDUFUoMHg0YywgYnl0X3BhcmFtcyksCisJSUNQVSgweDRjLCBhaXJtb250X3BhcmFtcyksCiAJSUNQVSgweDRlLCBjb3JlX3BhcmFtcyksCiAJSUNQVSgweDRmLCBjb3JlX3BhcmFtcyksCiAJSUNQVSgweDVlLCBjb3JlX3BhcmFtcyksCkBAIC0xMjI5LDEyICsxMDk0LDYgQEAKIAogc3RhdGljIGludCBpbnRlbF9wc3RhdGVfc2V0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19BQ1BJKQotCXN0cnVjdCBjcHVkYXRhICpjcHU7Ci0JaW50IGk7Ci0jZW5kaWYKLQlwcl9kZWJ1ZygiaW50ZWxfcHN0YXRlOiAlcyBtYXggJXUgcG9saWN5LT5tYXggJXVcbiIsIF9fZnVuY19fLAotCQkgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxLCBwb2xpY3ktPm1heCk7CiAJaWYgKCFwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xMjQyLDYgKzExMDEsOCBAQAogCSAgICBwb2xpY3ktPm1heCA+PSBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEpIHsKIAkJcHJfZGVidWcoImludGVsX3BzdGF0ZTogc2V0IHBlcmZvcm1hbmNlXG4iKTsKIAkJbGltaXRzID0gJnBlcmZvcm1hbmNlX2xpbWl0czsKKwkJaWYgKGh3cF9hY3RpdmUpCisJCQlpbnRlbF9wc3RhdGVfaHdwX3NldCgpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEyNDksNyArMTExMCw4IEBACiAJbGltaXRzID0gJnBvd2Vyc2F2ZV9saW1pdHM7CiAJbGltaXRzLT5taW5fcG9saWN5X3BjdCA9IChwb2xpY3ktPm1pbiAqIDEwMCkgLyBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXE7CiAJbGltaXRzLT5taW5fcG9saWN5X3BjdCA9IGNsYW1wX3QoaW50LCBsaW1pdHMtPm1pbl9wb2xpY3lfcGN0LCAwICwgMTAwKTsKLQlsaW1pdHMtPm1heF9wb2xpY3lfcGN0ID0gKHBvbGljeS0+bWF4ICogMTAwKSAvIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcTsKKwlsaW1pdHMtPm1heF9wb2xpY3lfcGN0ID0gRElWX1JPVU5EX1VQKHBvbGljeS0+bWF4ICogMTAwLAorCQkJCQkgICAgICBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEpOwogCWxpbWl0cy0+bWF4X3BvbGljeV9wY3QgPSBjbGFtcF90KGludCwgbGltaXRzLT5tYXhfcG9saWN5X3BjdCwgMCAsIDEwMCk7CiAKIAkvKiBOb3JtYWxpemUgdXNlciBpbnB1dCB0byBbbWluX3BvbGljeV9wY3QsIG1heF9wb2xpY3lfcGN0XSAqLwpAQCAtMTI2MSw2ICsxMTIzLDcgQEAKIAkJCQkgICBsaW1pdHMtPm1heF9zeXNmc19wY3QpOwogCWxpbWl0cy0+bWF4X3BlcmZfcGN0ID0gbWF4KGxpbWl0cy0+bWluX3BvbGljeV9wY3QsCiAJCQkJICAgbGltaXRzLT5tYXhfcGVyZl9wY3QpOworCWxpbWl0cy0+bWF4X3BlcmYgPSByb3VuZF91cChsaW1pdHMtPm1heF9wZXJmLCBGUkFDX0JJVFMpOwogCiAJLyogTWFrZSBzdXJlIG1pbl9wZXJmX3BjdCA8PSBtYXhfcGVyZl9wY3QgKi8KIAlsaW1pdHMtPm1pbl9wZXJmX3BjdCA9IG1pbihsaW1pdHMtPm1heF9wZXJmX3BjdCwgbGltaXRzLT5taW5fcGVyZl9wY3QpOwpAQCAtMTI3MCwyMyArMTEzMyw2IEBACiAJbGltaXRzLT5tYXhfcGVyZiA9IGRpdl9mcChpbnRfdG9mcChsaW1pdHMtPm1heF9wZXJmX3BjdCksCiAJCQkJICBpbnRfdG9mcCgxMDApKTsKIAotI2lmIElTX0VOQUJMRUQoQ09ORklHX0FDUEkpCi0JY3B1ID0gYWxsX2NwdV9kYXRhW3BvbGljeS0+Y3B1XTsKLQlmb3IgKGkgPSAwOyBpIDwgY3B1LT5hY3BpX3BlcmZfZGF0YS5zdGF0ZV9jb3VudDsgaSsrKSB7Ci0JCWludCBjb250cm9sOwotCi0JCWNvbnRyb2wgPSBjb252ZXJ0X3RvX25hdGl2ZV9wc3RhdGVfZm9ybWF0KGNwdSwgaSk7Ci0JCWlmIChjb250cm9sICogY3B1LT5wc3RhdGUuc2NhbGluZyA9PSBwb2xpY3ktPm1heCkKLQkJCWxpbWl0cy0+bWF4X3BlcmZfY3RsID0gY29udHJvbDsKLQkJaWYgKGNvbnRyb2wgKiBjcHUtPnBzdGF0ZS5zY2FsaW5nID09IHBvbGljeS0+bWluKQotCQkJbGltaXRzLT5taW5fcGVyZl9jdGwgPSBjb250cm9sOwotCX0KLQotCXByX2RlYnVnKCJpbnRlbF9wc3RhdGU6IG1heCAldSBwb2xpY3lfbWF4ICV1IHBlcmZfY3RsIFsweCV4LTB4JXhdXG4iLAotCQkgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxLCBwb2xpY3ktPm1heCwgbGltaXRzLT5taW5fcGVyZl9jdGwsCi0JCSBsaW1pdHMtPm1heF9wZXJmX2N0bCk7Ci0jZW5kaWYKLQogCWlmIChod3BfYWN0aXZlKQogCQlpbnRlbF9wc3RhdGVfaHdwX3NldCgpOwogCkBAIC0xMzQxLDMwICsxMTg3LDE4IEBACiAJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gY3B1LT5wc3RhdGUubWluX3BzdGF0ZSAqIGNwdS0+cHN0YXRlLnNjYWxpbmc7CiAJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0KIAkJY3B1LT5wc3RhdGUudHVyYm9fcHN0YXRlICogY3B1LT5wc3RhdGUuc2NhbGluZzsKLQlpZiAoIW5vX2FjcGlfcGVyZikKLQkJaW50ZWxfcHN0YXRlX2luaXRfcGVyZl9saW1pdHMocG9saWN5KTsKLQkvKgotCSAqIElmIHRoZXJlIGlzIG5vIGFjcGkgcGVyZiBkYXRhIG9yIGVycm9yLCB3ZSBpZ25vcmUgYW5kIHVzZSBJbnRlbCBQCi0JICogc3RhdGUgY2FsY3VsYXRlZCBsaW1pdHMsIFNvIHRoaXMgaXMgbm90IGZhdGFsIGVycm9yLgotCSAqLwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CiAJY3B1bWFza19zZXRfY3B1KHBvbGljeS0+Y3B1LCBwb2xpY3ktPmNwdXMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW50ZWxfcHN0YXRlX2NwdV9leGl0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQotewotCXJldHVybiBpbnRlbF9wc3RhdGVfZXhpdF9wZXJmX2xpbWl0cyhwb2xpY3kpOwotfQotCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIGludGVsX3BzdGF0ZV9kcml2ZXIgPSB7CiAJLmZsYWdzCQk9IENQVUZSRVFfQ09OU1RfTE9PUFMsCiAJLnZlcmlmeQkJPSBpbnRlbF9wc3RhdGVfdmVyaWZ5X3BvbGljeSwKIAkuc2V0cG9saWN5CT0gaW50ZWxfcHN0YXRlX3NldF9wb2xpY3ksCiAJLmdldAkJPSBpbnRlbF9wc3RhdGVfZ2V0LAogCS5pbml0CQk9IGludGVsX3BzdGF0ZV9jcHVfaW5pdCwKLQkuZXhpdAkJPSBpbnRlbF9wc3RhdGVfY3B1X2V4aXQsCiAJLnN0b3BfY3B1CT0gaW50ZWxfcHN0YXRlX3N0b3BfY3B1LAogCS5uYW1lCQk9ICJpbnRlbF9wc3RhdGUiLAogfTsKQEAgLTE0MDYsNiArMTI0MCw3IEBACiB9CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19BQ1BJKQorI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAKIHN0YXRpYyBib29sIGludGVsX3BzdGF0ZV9ub19hY3BpX3Bzcyh2b2lkKQogewpAQCAtMTYwMSw5ICsxNDM2LDYgQEAKIAkJZm9yY2VfbG9hZCA9IDE7CiAJaWYgKCFzdHJjbXAoc3RyLCAiaHdwX29ubHkiKSkKIAkJaHdwX29ubHkgPSAxOwotCWlmICghc3RyY21wKHN0ciwgIm5vX2FjcGkiKSkKLQkJbm9fYWNwaV9wZXJmID0gMTsKLQogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oImludGVsX3BzdGF0ZSIsIGludGVsX3BzdGF0ZV9zZXR1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvczNjMjR4eC1jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvczNjMjR4eC1jcHVmcmVxLmMKaW5kZXggNzMzYWE1MS4uNjhlZjhmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL3MzYzI0eHgtY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9zM2MyNHh4LWNwdWZyZXEuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAgKgogICogUmVnaXN0ZXIgdGhlIGdpdmVuIHNldCBvZiBQTExzIHdpdGggdGhlIHN5c3RlbS4KICAqLwotaW50IF9faW5pdCBzM2NfcGxsdGFiX3JlZ2lzdGVyKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcGxscywKK2ludCBzM2NfcGxsdGFiX3JlZ2lzdGVyKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcGxscywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGxsc19ubykKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnZhbHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvc2NwaS1jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvc2NwaS1jcHVmcmVxLmMKaW5kZXggMmMzYjE2Zi4uZGU1ZTg5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL3NjcGktY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9zY3BpLWNwdWZyZXEuYwpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNjcGlfZHZmc19pbmZvICpzY3BpX2dldF9kdmZzX2luZm8oc3RydWN0IGRldmljZSAqY3B1X2RldikKIHsKLQl1OCBkb21haW4gPSB0b3BvbG9neV9waHlzaWNhbF9wYWNrYWdlX2lkKGNwdV9kZXYtPmlkKTsKKwlpbnQgZG9tYWluID0gdG9wb2xvZ3lfcGh5c2ljYWxfcGFja2FnZV9pZChjcHVfZGV2LT5pZCk7CiAKIAlpZiAoZG9tYWluIDwgMCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9ueC9ueC1hZXMtY2NtLmMgYi9kcml2ZXJzL2NyeXB0by9ueC9ueC1hZXMtY2NtLmMKaW5kZXggNzNlZjQ5OS4uNzAzOGYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vbngvbngtYWVzLWNjbS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL254L254LWFlcy1jY20uYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJCXByb2Nlc3NlZCArPSB0b19wcm9jZXNzOwogCX0gd2hpbGUgKHByb2Nlc3NlZCA8IG5ieXRlcyk7CiAKLQlyYyA9IG1lbWNtcChjc2JjcGItPmNwYi5hZXNfY2NtLm91dF9wYXRfb3JfbWFjLCBwcml2LT5vYXV0aF90YWcsCisJcmMgPSBjcnlwdG9fbWVtbmVxKGNzYmNwYi0+Y3BiLmFlc19jY20ub3V0X3BhdF9vcl9tYWMsIHByaXYtPm9hdXRoX3RhZywKIAkJICAgIGF1dGhzaXplKSA/IC1FQkFETVNHIDogMDsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZueF9jdHgtPmxvY2ssIGlycV9mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9ueC9ueC1hZXMtZ2NtLmMgYi9kcml2ZXJzL2NyeXB0by9ueC9ueC1hZXMtZ2NtLmMKaW5kZXggZWVlNjI0Zi4uYWJkNDY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vbngvbngtYWVzLWdjbS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL254L254LWFlcy1nY20uYwpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2FlYWQuaD4KICNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgogI2luY2x1ZGUgPGNyeXB0by9zY2F0dGVyd2Fsay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC00MTgsNyArNDE5LDcgQEAKIAkJCWl0YWcsIHJlcS0+c3JjLCByZXEtPmFzc29jbGVuICsgbmJ5dGVzLAogCQkJY3J5cHRvX2FlYWRfYXV0aHNpemUoY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSkpLAogCQkJU0NBVFRFUldBTEtfRlJPTV9TRyk7Ci0JCXJjID0gbWVtY21wKGl0YWcsIG90YWcsCisJCXJjID0gY3J5cHRvX21lbW5lcShpdGFnLCBvdGFnLAogCQkJICAgIGNyeXB0b19hZWFkX2F1dGhzaXplKGNyeXB0b19hZWFkX3JlcXRmbShyZXEpKSkgPwogCQkgICAgIC1FQkFETVNHIDogMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2NvbW1vbi9hZGZfY3RsX2Rydi5jIGIvZHJpdmVycy9jcnlwdG8vcWF0L3FhdF9jb21tb24vYWRmX2N0bF9kcnYuYwppbmRleCAwMzg1NmFkLi40NzNkMzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9xYXQvcWF0X2NvbW1vbi9hZGZfY3RsX2Rydi5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3FhdC9xYXRfY29tbW9uL2FkZl9jdGxfZHJ2LmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCQkJZ290byBvdXRfZXJyOwogCQl9CiAKLQkJcGFyYW1zX2hlYWQgPSBzZWN0aW9uX2hlYWQtPnBhcmFtczsKKwkJcGFyYW1zX2hlYWQgPSBzZWN0aW9uLnBhcmFtczsKIAogCQl3aGlsZSAocGFyYW1zX2hlYWQpIHsKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigma2V5X3ZhbCwgKHZvaWQgX191c2VyICopcGFyYW1zX2hlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMgYi9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKaW5kZXggNDZmNTMxZS4uYjZmOWY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYwpAQCAtOTc3LDcgKzk3Nyw3IEBACiAJCX0gZWxzZQogCQkJb2ljdiA9IChjaGFyICopJmVkZXNjLT5saW5rX3RibFswXTsKIAotCQllcnIgPSBtZW1jbXAob2ljdiwgaWN2LCBhdXRoc2l6ZSkgPyAtRUJBRE1TRyA6IDA7CisJCWVyciA9IGNyeXB0b19tZW1uZXEob2ljdiwgaWN2LCBhdXRoc2l6ZSkgPyAtRUJBRE1TRyA6IDA7CiAJfQogCiAJa2ZyZWUoZWRlc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggZTZjZDFhMy4uMTc2NTVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC00MzIsNyArNDMyLDcgQEAKIAkgIFN1cHBvcnQgZm9yIFNULUVyaWNzc29uIERNQTQwIGNvbnRyb2xsZXIKIAogY29uZmlnIFMzQzI0WFhfRE1BQwotCXRyaXN0YXRlICJTYW1zdW5nIFMzQzI0WFggRE1BIHN1cHBvcnQiCisJYm9vbCAiU2Ftc3VuZyBTM0MyNFhYIERNQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9TM0MyNFhYCiAJc2VsZWN0IERNQV9FTkdJTkUKIAlzZWxlY3QgRE1BX1ZJUlRVQUxfQ0hBTk5FTFMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMgYi9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCmluZGV4IDRlNTUyMzkuLjUzZDIyZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvYXRfaGRtYWMuYwpAQCAtNzI5LDggKzcyOSw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJZGV2X2luZm8oY2hhbjJkZXYoY2hhbiksCi0JCSAiJXM6IHNyYz0weCUwOHgsIGRlc3Q9MHglMDh4LCBudW1mPSVkLCBmcmFtZV9zaXplPSVkLCBmbGFncz0weCVseFxuIiwKLQkJX19mdW5jX18sIHh0LT5zcmNfc3RhcnQsIHh0LT5kc3Rfc3RhcnQsIHh0LT5udW1mLAorCQkgIiVzOiBzcmM9JXBhZCwgZGVzdD0lcGFkLCBudW1mPSVkLCBmcmFtZV9zaXplPSVkLCBmbGFncz0weCVseFxuIiwKKwkJX19mdW5jX18sICZ4dC0+c3JjX3N0YXJ0LCAmeHQtPmRzdF9zdGFydCwgeHQtPm51bWYsCiAJCXh0LT5mcmFtZV9zaXplLCBmbGFncyk7CiAKIAkvKgpAQCAtODI0LDggKzgyNCw4IEBACiAJdTMyCQkJY3RybGE7CiAJdTMyCQkJY3RybGI7CiAKLQlkZXZfdmRiZyhjaGFuMmRldihjaGFuKSwgInByZXBfZG1hX21lbWNweTogZDB4JXggczB4JXggbDB4JXp4IGYweCVseFxuIiwKLQkJCWRlc3QsIHNyYywgbGVuLCBmbGFncyk7CisJZGV2X3ZkYmcoY2hhbjJkZXYoY2hhbiksICJwcmVwX2RtYV9tZW1jcHk6IGQlcGFkIHMlcGFkIGwweCV6eCBmMHglbHhcbiIsCisJCQkmZGVzdCwgJnNyYywgbGVuLCBmbGFncyk7CiAKIAlpZiAodW5saWtlbHkoIWxlbikpIHsKIAkJZGV2X2RiZyhjaGFuMmRldihjaGFuKSwgInByZXBfZG1hX21lbWNweTogbGVuZ3RoIGlzIHplcm8hXG4iKTsKQEAgLTkzOCw4ICs5MzgsOCBAQAogCXZvaWQgX19pb21lbQkJKnZhZGRyOwogCWRtYV9hZGRyX3QJCXBhZGRyOwogCi0JZGV2X3ZkYmcoY2hhbjJkZXYoY2hhbiksICIlczogZDB4JXggdjB4JXggbDB4JXp4IGYweCVseFxuIiwgX19mdW5jX18sCi0JCWRlc3QsIHZhbHVlLCBsZW4sIGZsYWdzKTsKKwlkZXZfdmRiZyhjaGFuMmRldihjaGFuKSwgIiVzOiBkJXBhZCB2MHgleCBsMHglenggZjB4JWx4XG4iLCBfX2Z1bmNfXywKKwkJJmRlc3QsIHZhbHVlLCBsZW4sIGZsYWdzKTsKIAogCWlmICh1bmxpa2VseSghbGVuKSkgewogCQlkZXZfZGJnKGNoYW4yZGV2KGNoYW4pLCAiJXM6IGxlbmd0aCBpcyB6ZXJvIVxuIiwgX19mdW5jX18pOwpAQCAtMTAyMiw4ICsxMDIyLDggQEAKIAkJZG1hX2FkZHJfdCBkZXN0ID0gc2dfZG1hX2FkZHJlc3Moc2cpOwogCQlzaXplX3QgbGVuID0gc2dfZG1hX2xlbihzZyk7CiAKLQkJZGV2X3ZkYmcoY2hhbjJkZXYoY2hhbiksICIlczogZDB4JTA4eCwgbDB4JXp4XG4iLAotCQkJIF9fZnVuY19fLCBkZXN0LCBsZW4pOworCQlkZXZfdmRiZyhjaGFuMmRldihjaGFuKSwgIiVzOiBkJXBhZCwgbDB4JXp4XG4iLAorCQkJIF9fZnVuY19fLCAmZGVzdCwgbGVuKTsKIAogCQlpZiAoIWlzX2RtYV9maWxsX2FsaWduZWQoY2hhbi0+ZGV2aWNlLCBkZXN0LCAwLCBsZW4pKSB7CiAJCQlkZXZfZXJyKGNoYW4yZGV2KGNoYW4pLCAiJXM6IGJ1ZmZlciBpcyBub3QgYWxpZ25lZFxuIiwKQEAgLTE0MzksOSArMTQzOSw5IEBACiAJdW5zaWduZWQgaW50CQlwZXJpb2RzID0gYnVmX2xlbiAvIHBlcmlvZF9sZW47CiAJdW5zaWduZWQgaW50CQlpOwogCi0JZGV2X3ZkYmcoY2hhbjJkZXYoY2hhbiksICJwcmVwX2RtYV9jeWNsaWM6ICVzIGJ1ZkAweCUwOHggLSAlZCAoJWQvJWQpXG4iLAorCWRldl92ZGJnKGNoYW4yZGV2KGNoYW4pLCAicHJlcF9kbWFfY3ljbGljOiAlcyBidWZAJXBhZCAtICVkICglZC8lZClcbiIsCiAJCQlkaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYgPyAiVE8gREVWSUNFIiA6ICJGUk9NIERFVklDRSIsCi0JCQlidWZfYWRkciwKKwkJCSZidWZfYWRkciwKIAkJCXBlcmlvZHMsIGJ1Zl9sZW4sIHBlcmlvZF9sZW4pOwogCiAJaWYgKHVubGlrZWx5KCFhdHNsYXZlIHx8ICFidWZfbGVuIHx8ICFwZXJpb2RfbGVuKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvYXRfaGRtYWNfcmVncy5oIGIvZHJpdmVycy9kbWEvYXRfaGRtYWNfcmVncy5oCmluZGV4IGQxY2ZjOGMuLjdmNThmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2F0X2hkbWFjX3JlZ3MuaAorKysgYi9kcml2ZXJzL2RtYS9hdF9oZG1hY19yZWdzLmgKQEAgLTM4NSw5ICszODUsOSBAQAogc3RhdGljIHZvaWQgYXRjX2R1bXBfbGxpKHN0cnVjdCBhdF9kbWFfY2hhbiAqYXRjaGFuLCBzdHJ1Y3QgYXRfbGxpICpsbGkpCiB7CiAJZGV2X2NyaXQoY2hhbjJkZXYoJmF0Y2hhbi0+Y2hhbl9jb21tb24pLAotCQkgIiAgZGVzYzogczB4JXggZDB4JXggY3RybDB4JXg6MHgleCBsMHgleFxuIiwKLQkJIGxsaS0+c2FkZHIsIGxsaS0+ZGFkZHIsCi0JCSBsbGktPmN0cmxhLCBsbGktPmN0cmxiLCBsbGktPmRzY3IpOworCQkgIiAgZGVzYzogcyVwYWQgZCVwYWQgY3RybDB4JXg6MHgleCBsMHglcGFkXG4iLAorCQkgJmxsaS0+c2FkZHIsICZsbGktPmRhZGRyLAorCQkgbGxpLT5jdHJsYSwgbGxpLT5jdHJsYiwgJmxsaS0+ZHNjcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvYXRfeGRtYWMuYyBiL2RyaXZlcnMvZG1hL2F0X3hkbWFjLmMKaW5kZXggYjVlMTMyZC4uMzcwYzY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvYXRfeGRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9hdF94ZG1hYy5jCkBAIC0xNTYsNyArMTU2LDcgQEAKICNkZWZpbmUJCUFUX1hETUFDX0NDX1dSSVAJKDB4MSA8PCAyMykJLyogV3JpdGUgaW4gUHJvZ3Jlc3MgKHJlYWQgb25seSkgKi8KICNkZWZpbmUJCQlBVF9YRE1BQ19DQ19XUklQX0RPTkUJCSgweDAgPDwgMjMpCiAjZGVmaW5lCQkJQVRfWERNQUNfQ0NfV1JJUF9JTl9QUk9HUkVTUwkoMHgxIDw8IDIzKQotI2RlZmluZQkJQVRfWERNQUNfQ0NfUEVSSUQoaSkJKDB4N2YgJiAoaCkgPDwgMjQpCS8qIENoYW5uZWwgUGVyaXBoZXJhbCBJZGVudGlmaWVyICovCisjZGVmaW5lCQlBVF9YRE1BQ19DQ19QRVJJRChpKQkoMHg3ZiAmIChpKSA8PCAyNCkJLyogQ2hhbm5lbCBQZXJpcGhlcmFsIElkZW50aWZpZXIgKi8KICNkZWZpbmUgQVRfWERNQUNfQ0RTX01TUAkweDJDCS8qIENoYW5uZWwgRGF0YSBTdHJpZGUgTWVtb3J5IFNldCBQYXR0ZXJuICovCiAjZGVmaW5lIEFUX1hETUFDX0NTVVMJCTB4MzAJLyogQ2hhbm5lbCBTb3VyY2UgTWljcm9ibG9jayBTdHJpZGUgKi8KICNkZWZpbmUgQVRfWERNQUNfQ0RVUwkJMHgzNAkvKiBDaGFubmVsIERlc3RpbmF0aW9uIE1pY3JvYmxvY2sgU3RyaWRlICovCkBAIC05MjAsOCArOTIwLDggQEAKIAlkZXNjLT5sbGQubWJyX2NmZyA9IGNoYW5fY2M7CiAKIAlkZXZfZGJnKGNoYW4yZGV2KGNoYW4pLAotCQkiJXM6IGxsZDogbWJyX3NhPTB4JTA4eCwgbWJyX2RhPTB4JTA4eCwgbWJyX3ViYz0weCUwOHgsIG1icl9jZmc9MHglMDh4XG4iLAotCQlfX2Z1bmNfXywgZGVzYy0+bGxkLm1icl9zYSwgZGVzYy0+bGxkLm1icl9kYSwKKwkJIiVzOiBsbGQ6IG1icl9zYT0lcGFkLCBtYnJfZGE9JXBhZCwgbWJyX3ViYz0weCUwOHgsIG1icl9jZmc9MHglMDh4XG4iLAorCQlfX2Z1bmNfXywgJmRlc2MtPmxsZC5tYnJfc2EsICZkZXNjLT5sbGQubWJyX2RhLAogCQlkZXNjLT5sbGQubWJyX3ViYywgZGVzYy0+bGxkLm1icl9jZmcpOwogCiAJLyogQ2hhaW4gbGxkLiAqLwpAQCAtOTUzLDggKzk1Myw4IEBACiAJaWYgKCh4dC0+bnVtZiA+IDEpICYmICh4dC0+ZnJhbWVfc2l6ZSA+IDEpKQogCQlyZXR1cm4gTlVMTDsKIAotCWRldl9kYmcoY2hhbjJkZXYoY2hhbiksICIlczogc3JjPTB4JTA4eCwgZGVzdD0weCUwOHgsIG51bWY9JWQsIGZyYW1lX3NpemU9JWQsIGZsYWdzPTB4JWx4XG4iLAotCQlfX2Z1bmNfXywgeHQtPnNyY19zdGFydCwgeHQtPmRzdF9zdGFydCwJeHQtPm51bWYsCisJZGV2X2RiZyhjaGFuMmRldihjaGFuKSwgIiVzOiBzcmM9JXBhZCwgZGVzdD0lcGFkLCBudW1mPSVkLCBmcmFtZV9zaXplPSVkLCBmbGFncz0weCVseFxuIiwKKwkJX19mdW5jX18sICZ4dC0+c3JjX3N0YXJ0LCAmeHQtPmRzdF9zdGFydCwJeHQtPm51bWYsCiAJCXh0LT5mcmFtZV9zaXplLCBmbGFncyk7CiAKIAlzcmNfYWRkciA9IHh0LT5zcmNfc3RhcnQ7CkBAIC05NjUsNyArOTY1LDkgQEAKIAkJCQkJCQlOVUxMLAogCQkJCQkJCXNyY19hZGRyLCBkc3RfYWRkciwKIAkJCQkJCQl4dCwgeHQtPnNnbCk7Ci0JCWZvciAoaSA9IDA7IGkgPCB4dC0+bnVtZjsgaSsrKQorCisJCS8qIExlbmd0aCBvZiB0aGUgYmxvY2sgaXMgKEJMRU4rMSkgbWljcm9ibG9ja3MuICovCisJCWZvciAoaSA9IDA7IGkgPCB4dC0+bnVtZiAtIDE7IGkrKykKIAkJCWF0X3hkbWFjX2luY3JlbWVudF9ibG9ja19jb3VudChjaGFuLCBmaXJzdCk7CiAKIAkJZGV2X2RiZyhjaGFuMmRldihjaGFuKSwgIiVzOiBhZGQgZGVzYyAweCVwIHRvIGRlc2NzX2xpc3QgMHglcFxuIiwKQEAgLTEwODYsNiArMTA4OCw3IEBACiAJCS8qIENoZWNrIHJlbWFpbmluZyBsZW5ndGggYW5kIGNoYW5nZSBkYXRhIHdpZHRoIGlmIG5lZWRlZC4gKi8KIAkJZHdpZHRoID0gYXRfeGRtYWNfYWxpZ25fd2lkdGgoY2hhbiwKIAkJCQkJICAgICAgc3JjX2FkZHIgfCBkc3RfYWRkciB8IHhmZXJfc2l6ZSk7CisJCWNoYW5fY2MgJj0gfkFUX1hETUFDX0NDX0RXSURUSF9NQVNLOwogCQljaGFuX2NjIHw9IEFUX1hETUFDX0NDX0RXSURUSChkd2lkdGgpOwogCiAJCXVibGVuID0geGZlcl9zaXplID4+IGR3aWR0aDsKQEAgLTExNzksOCArMTE4Miw4IEBACiAJZGVzYy0+bGxkLm1icl9jZmcgPSBjaGFuX2NjOwogCiAJZGV2X2RiZyhjaGFuMmRldihjaGFuKSwKLQkJIiVzOiBsbGQ6IG1icl9kYT0weCUwOHgsIG1icl9kcz0weCUwOHgsIG1icl91YmM9MHglMDh4LCBtYnJfY2ZnPTB4JTA4eFxuIiwKLQkJX19mdW5jX18sIGRlc2MtPmxsZC5tYnJfZGEsIGRlc2MtPmxsZC5tYnJfZHMsIGRlc2MtPmxsZC5tYnJfdWJjLAorCQkiJXM6IGxsZDogbWJyX2RhPSVwYWQsIG1icl9kcz0lcGFkLCBtYnJfdWJjPTB4JTA4eCwgbWJyX2NmZz0weCUwOHhcbiIsCisJCV9fZnVuY19fLCAmZGVzYy0+bGxkLm1icl9kYSwgJmRlc2MtPmxsZC5tYnJfZHMsIGRlc2MtPmxsZC5tYnJfdWJjLAogCQlkZXNjLT5sbGQubWJyX2NmZyk7CiAKIAlyZXR1cm4gZGVzYzsKQEAgLTExOTMsOCArMTE5Niw4IEBACiAJc3RydWN0IGF0X3hkbWFjX2NoYW4JKmF0Y2hhbiA9IHRvX2F0X3hkbWFjX2NoYW4oY2hhbik7CiAJc3RydWN0IGF0X3hkbWFjX2Rlc2MJKmRlc2M7CiAKLQlkZXZfZGJnKGNoYW4yZGV2KGNoYW4pLCAiJXM6IGRlc3Q9MHglMDh4LCBsZW49JWQsIHBhdHRlcm49MHgleCwgZmxhZ3M9MHglbHhcbiIsCi0JCV9fZnVuY19fLCBkZXN0LCBsZW4sIHZhbHVlLCBmbGFncyk7CisJZGV2X2RiZyhjaGFuMmRldihjaGFuKSwgIiVzOiBkZXN0PSVwYWQsIGxlbj0lZCwgcGF0dGVybj0weCV4LCBmbGFncz0weCVseFxuIiwKKwkJX19mdW5jX18sICZkZXN0LCBsZW4sIHZhbHVlLCBmbGFncyk7CiAKIAlpZiAodW5saWtlbHkoIWxlbikpCiAJCXJldHVybiBOVUxMOwpAQCAtMTIyOSw4ICsxMjMyLDggQEAKIAogCS8qIFByZXBhcmUgZGVzY3JpcHRvcnMuICovCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7Ci0JCWRldl9kYmcoY2hhbjJkZXYoY2hhbiksICIlczogZGVzdD0weCUwOHgsIGxlbj0lZCwgcGF0dGVybj0weCV4LCBmbGFncz0weCVseFxuIiwKLQkJCV9fZnVuY19fLCBzZ19kbWFfYWRkcmVzcyhzZyksIHNnX2RtYV9sZW4oc2cpLAorCQlkZXZfZGJnKGNoYW4yZGV2KGNoYW4pLCAiJXM6IGRlc3Q9JXBhZCwgbGVuPSVkLCBwYXR0ZXJuPTB4JXgsIGZsYWdzPTB4JWx4XG4iLAorCQkJX19mdW5jX18sICZzZ19kbWFfYWRkcmVzcyhzZyksIHNnX2RtYV9sZW4oc2cpLAogCQkJdmFsdWUsIGZsYWdzKTsKIAkJZGVzYyA9IGF0X3hkbWFjX21lbXNldF9jcmVhdGVfZGVzYyhjaGFuLCBhdGNoYW4sCiAJCQkJCQkgICBzZ19kbWFfYWRkcmVzcyhzZyksCkBAIC0xMzMzLDcgKzEzMzYsNyBAQAogCQkgKiBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBzdHJpZGUgYW55bW9yZS4KIAkJICovCiAJCWlmICgoaSA9PSAoc2dfbGVuIC0gMSkpICYmCi0JCSAgICBzZ19kbWFfbGVuKHBwc2cpID09IHNnX2RtYV9sZW4ocHNnKSkgeworCQkgICAgc2dfZG1hX2xlbihwc2cpID09IHNnX2RtYV9sZW4oc2cpKSB7CiAJCQlkZXZfZGJnKGNoYW4yZGV2KGNoYW4pLAogCQkJCSIlczogZGVzYyAweCVwIGNhbiBiZSBtZXJnZWQgd2l0aCBkZXNjIDB4JXBcbiIsCiAJCQkJX19mdW5jX18sIGRlc2MsIHBkZXNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2JjbTI4MzUtZG1hLmMgYi9kcml2ZXJzL2RtYS9iY20yODM1LWRtYS5jCmluZGV4IGM5MmQ2YTcuLjk5NmM0YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2JjbTI4MzUtZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvYmNtMjgzNS1kbWEuYwpAQCAtMzEsNiArMzEsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNjIsNiArNjMsMTEgQEAKIAl1aW50MzJfdCBwYWRbMl07CiB9OwogCitzdHJ1Y3QgYmNtMjgzNV9jYl9lbnRyeSB7CisJc3RydWN0IGJjbTI4MzVfZG1hX2NiICpjYjsKKwlkbWFfYWRkcl90IHBhZGRyOworfTsKKwogc3RydWN0IGJjbTI4MzVfY2hhbiB7CiAJc3RydWN0IHZpcnRfZG1hX2NoYW4gdmM7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwpAQCAtNzIsMTggKzc4LDE4IEBACiAKIAlpbnQgY2g7CiAJc3RydWN0IGJjbTI4MzVfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKmNiX3Bvb2w7CiAKIAl2b2lkIF9faW9tZW0gKmNoYW5fYmFzZTsKIAlpbnQgaXJxX251bWJlcjsKIH07CiAKIHN0cnVjdCBiY20yODM1X2Rlc2MgeworCXN0cnVjdCBiY20yODM1X2NoYW4gKmM7CiAJc3RydWN0IHZpcnRfZG1hX2Rlc2MgdmQ7CiAJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcjsKIAotCXVuc2lnbmVkIGludCBjb250cm9sX2Jsb2NrX3NpemU7Ci0Jc3RydWN0IGJjbTI4MzVfZG1hX2NiICpjb250cm9sX2Jsb2NrX2Jhc2U7Ci0JZG1hX2FkZHJfdCBjb250cm9sX2Jsb2NrX2Jhc2VfcGh5czsKKwlzdHJ1Y3QgYmNtMjgzNV9jYl9lbnRyeSAqY2JfbGlzdDsKIAogCXVuc2lnbmVkIGludCBmcmFtZXM7CiAJc2l6ZV90IHNpemU7CkBAIC0xNDMsMTAgKzE0OSwxMyBAQAogc3RhdGljIHZvaWQgYmNtMjgzNV9kbWFfZGVzY19mcmVlKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKIHsKIAlzdHJ1Y3QgYmNtMjgzNV9kZXNjICpkZXNjID0gY29udGFpbmVyX29mKHZkLCBzdHJ1Y3QgYmNtMjgzNV9kZXNjLCB2ZCk7Ci0JZG1hX2ZyZWVfY29oZXJlbnQoZGVzYy0+dmQudHguY2hhbi0+ZGV2aWNlLT5kZXYsCi0JCQlkZXNjLT5jb250cm9sX2Jsb2NrX3NpemUsCi0JCQlkZXNjLT5jb250cm9sX2Jsb2NrX2Jhc2UsCi0JCQlkZXNjLT5jb250cm9sX2Jsb2NrX2Jhc2VfcGh5cyk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+ZnJhbWVzOyBpKyspCisJCWRtYV9wb29sX2ZyZWUoZGVzYy0+Yy0+Y2JfcG9vbCwgZGVzYy0+Y2JfbGlzdFtpXS5jYiwKKwkJCSAgICAgIGRlc2MtPmNiX2xpc3RbaV0ucGFkZHIpOworCisJa2ZyZWUoZGVzYy0+Y2JfbGlzdCk7CiAJa2ZyZWUoZGVzYyk7CiB9CiAKQEAgLTE5OSw3ICsyMDgsNyBAQAogCiAJYy0+ZGVzYyA9IGQgPSB0b19iY20yODM1X2RtYV9kZXNjKCZ2ZC0+dHgpOwogCi0Jd3JpdGVsKGQtPmNvbnRyb2xfYmxvY2tfYmFzZV9waHlzLCBjLT5jaGFuX2Jhc2UgKyBCQ00yODM1X0RNQV9BRERSKTsKKwl3cml0ZWwoZC0+Y2JfbGlzdFswXS5wYWRkciwgYy0+Y2hhbl9iYXNlICsgQkNNMjgzNV9ETUFfQUREUik7CiAJd3JpdGVsKEJDTTI4MzVfRE1BX0FDVElWRSwgYy0+Y2hhbl9iYXNlICsgQkNNMjgzNV9ETUFfQ1MpOwogfQogCkBAIC0yMzIsOSArMjQxLDE2IEBACiBzdGF0aWMgaW50IGJjbTI4MzVfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3QgYmNtMjgzNV9jaGFuICpjID0gdG9fYmNtMjgzNV9kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjLT52Yy5jaGFuLmRldmljZS0+ZGV2OwogCi0JZGV2X2RiZyhjLT52Yy5jaGFuLmRldmljZS0+ZGV2LAotCQkJIkFsbG9jYXRpbmcgRE1BIGNoYW5uZWwgJWRcbiIsIGMtPmNoKTsKKwlkZXZfZGJnKGRldiwgIkFsbG9jYXRpbmcgRE1BIGNoYW5uZWwgJWRcbiIsIGMtPmNoKTsKKworCWMtPmNiX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoZGV2X25hbWUoZGV2KSwgZGV2LAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBiY20yODM1X2RtYV9jYiksIDAsIDApOworCWlmICghYy0+Y2JfcG9vbCkgeworCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBhbGxvY2F0ZSBkZXNjcmlwdG9yIHBvb2xcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlyZXR1cm4gcmVxdWVzdF9pcnEoYy0+aXJxX251bWJlciwKIAkJCWJjbTI4MzVfZG1hX2NhbGxiYWNrLCAwLCAiRE1BIElSUSIsIGMpOwpAQCAtMjQ2LDYgKzI2Miw3IEBACiAKIAl2Y2hhbl9mcmVlX2NoYW5fcmVzb3VyY2VzKCZjLT52Yyk7CiAJZnJlZV9pcnEoYy0+aXJxX251bWJlciwgYyk7CisJZG1hX3Bvb2xfZGVzdHJveShjLT5jYl9wb29sKTsKIAogCWRldl9kYmcoYy0+dmMuY2hhbi5kZXZpY2UtPmRldiwgIkZyZWVpbmcgRE1BIGNoYW5uZWwgJXVcbiIsIGMtPmNoKTsKIH0KQEAgLTI2MSw4ICsyNzgsNyBAQAogCXNpemVfdCBzaXplOwogCiAJZm9yIChzaXplID0gaSA9IDA7IGkgPCBkLT5mcmFtZXM7IGkrKykgewotCQlzdHJ1Y3QgYmNtMjgzNV9kbWFfY2IgKmNvbnRyb2xfYmxvY2sgPQotCQkJJmQtPmNvbnRyb2xfYmxvY2tfYmFzZVtpXTsKKwkJc3RydWN0IGJjbTI4MzVfZG1hX2NiICpjb250cm9sX2Jsb2NrID0gZC0+Y2JfbGlzdFtpXS5jYjsKIAkJc2l6ZV90IHRoaXNfc2l6ZSA9IGNvbnRyb2xfYmxvY2stPmxlbmd0aDsKIAkJZG1hX2FkZHJfdCBkbWE7CiAKQEAgLTM0Myw2ICszNTksNyBAQAogCWRtYV9hZGRyX3QgZGV2X2FkZHI7CiAJdW5zaWduZWQgaW50IGVzLCBzeW5jX3R5cGU7CiAJdW5zaWduZWQgaW50IGZyYW1lOworCWludCBpOwogCiAJLyogR3JhYiBjb25maWd1cmF0aW9uICovCiAJaWYgKCFpc19zbGF2ZV9kaXJlY3Rpb24oZGlyZWN0aW9uKSkgewpAQCAtMzc0LDI3ICszOTEsMzEgQEAKIAlpZiAoIWQpCiAJCXJldHVybiBOVUxMOwogCisJZC0+YyA9IGM7CiAJZC0+ZGlyID0gZGlyZWN0aW9uOwogCWQtPmZyYW1lcyA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOwogCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciBjb250cm9sIGJsb2NrcyAqLwotCWQtPmNvbnRyb2xfYmxvY2tfc2l6ZSA9IGQtPmZyYW1lcyAqIHNpemVvZihzdHJ1Y3QgYmNtMjgzNV9kbWFfY2IpOwotCWQtPmNvbnRyb2xfYmxvY2tfYmFzZSA9IGRtYV96YWxsb2NfY29oZXJlbnQoY2hhbi0+ZGV2aWNlLT5kZXYsCi0JCQlkLT5jb250cm9sX2Jsb2NrX3NpemUsICZkLT5jb250cm9sX2Jsb2NrX2Jhc2VfcGh5cywKLQkJCUdGUF9OT1dBSVQpOwotCi0JaWYgKCFkLT5jb250cm9sX2Jsb2NrX2Jhc2UpIHsKKwlkLT5jYl9saXN0ID0ga2NhbGxvYyhkLT5mcmFtZXMsIHNpemVvZigqZC0+Y2JfbGlzdCksIEdGUF9LRVJORUwpOworCWlmICghZC0+Y2JfbGlzdCkgewogCQlrZnJlZShkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgY29udHJvbCBibG9ja3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZC0+ZnJhbWVzOyBpKyspIHsKKwkJc3RydWN0IGJjbTI4MzVfY2JfZW50cnkgKmNiX2VudHJ5ID0gJmQtPmNiX2xpc3RbaV07CisKKwkJY2JfZW50cnktPmNiID0gZG1hX3Bvb2xfemFsbG9jKGMtPmNiX3Bvb2wsIEdGUF9BVE9NSUMsCisJCQkJCSAgICAgICAmY2JfZW50cnktPnBhZGRyKTsKKwkJaWYgKCFjYl9lbnRyeS0+Y2IpCisJCQlnb3RvIGVycm9yX2NiOworCX0KIAogCS8qCiAJICogSXRlcmF0ZSBvdmVyIGFsbCBmcmFtZXMsIGNyZWF0ZSBhIGNvbnRyb2wgYmxvY2sKIAkgKiBmb3IgZWFjaCBmcmFtZSBhbmQgbGluayB0aGVtIHRvZ2V0aGVyLgogCSAqLwogCWZvciAoZnJhbWUgPSAwOyBmcmFtZSA8IGQtPmZyYW1lczsgZnJhbWUrKykgewotCQlzdHJ1Y3QgYmNtMjgzNV9kbWFfY2IgKmNvbnRyb2xfYmxvY2sgPQotCQkJJmQtPmNvbnRyb2xfYmxvY2tfYmFzZVtmcmFtZV07CisJCXN0cnVjdCBiY20yODM1X2RtYV9jYiAqY29udHJvbF9ibG9jayA9IGQtPmNiX2xpc3RbZnJhbWVdLmNiOwogCiAJCS8qIFNldHVwIGFkcmVzc2VzICovCiAJCWlmIChkLT5kaXIgPT0gRE1BX0RFVl9UT19NRU0pIHsKQEAgLTQyOCwxMiArNDQ5LDIxIEBACiAJCSAqIFRoaXMgRE1BIGVuZ2luZSBkcml2ZXIgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgY3ljbGljIERNQS4KIAkJICogVGhlcmVmb3JlLCB3cmFwIGFyb3VuZCBhdCBudW1iZXIgb2YgZnJhbWVzLgogCQkgKi8KLQkJY29udHJvbF9ibG9jay0+bmV4dCA9IGQtPmNvbnRyb2xfYmxvY2tfYmFzZV9waHlzICsKLQkJCXNpemVvZihzdHJ1Y3QgYmNtMjgzNV9kbWFfY2IpCi0JCQkqICgoZnJhbWUgKyAxKSAlIGQtPmZyYW1lcyk7CisJCWNvbnRyb2xfYmxvY2stPm5leHQgPSBkLT5jYl9saXN0WygoZnJhbWUgKyAxKSAlIGQtPmZyYW1lcyldLnBhZGRyOwogCX0KIAogCXJldHVybiB2Y2hhbl90eF9wcmVwKCZjLT52YywgJmQtPnZkLCBmbGFncyk7CitlcnJvcl9jYjoKKwlpLS07CisJZm9yICg7IGkgPj0gMDsgaS0tKSB7CisJCXN0cnVjdCBiY20yODM1X2NiX2VudHJ5ICpjYl9lbnRyeSA9ICZkLT5jYl9saXN0W2ldOworCisJCWRtYV9wb29sX2ZyZWUoYy0+Y2JfcG9vbCwgY2JfZW50cnktPmNiLCBjYl9lbnRyeS0+cGFkZHIpOworCX0KKworCWtmcmVlKGQtPmNiX2xpc3QpOworCWtmcmVlKGQpOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgaW50IGJjbTI4MzVfZG1hX3NsYXZlX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9lZG1hLmMgYi9kcml2ZXJzL2RtYS9lZG1hLmMKaW5kZXggNmIwM2U0ZS4uMTZmZTc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZWRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2VkbWEuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIC8qIENDQ0ZHIHJlZ2lzdGVyICovCiAjZGVmaW5lIEdFVF9OVU1fRE1BQ0goeCkJKHggJiAweDcpIC8qIGJpdHMgMC0yICovCi0jZGVmaW5lIEdFVF9OVU1fUURNQUNIKHgpCSh4ICYgMHg3MCA+PiA0KSAvKiBiaXRzIDQtNiAqLworI2RlZmluZSBHRVRfTlVNX1FETUFDSCh4KQkoKHggJiAweDcwKSA+PiA0KSAvKiBiaXRzIDQtNiAqLwogI2RlZmluZSBHRVRfTlVNX1BBRU5UUlkoeCkJKCh4ICYgMHg3MDAwKSA+PiAxMikgLyogYml0cyAxMi0xNCAqLwogI2RlZmluZSBHRVRfTlVNX0VWUVVFKHgpCSgoeCAmIDB4NzAwMDApID4+IDE2KSAvKiBiaXRzIDE2LTE4ICovCiAjZGVmaW5lIEdFVF9OVU1fUkVHTih4KQkJKCh4ICYgMHgzMDAwMDApID4+IDIwKSAvKiBiaXRzIDIwLTIxICovCkBAIC0xNTY1LDcgKzE1NjUsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnRjX3BkZXY7CiAJaW50IHJldDsKIAotCWlmICghdGMpCisJaWYgKCFJU19FTkFCTEVEKENPTkZJR19PRikgfHwgIXRjKQogCQlyZXR1cm47CiAKIAl0Y19wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZSh0Yy0+bm9kZSk7CkBAIC0xNzUyLDE2ICsxNzUyLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wgZWRtYV9pc19tZW1jcHlfY2hhbm5lbChpbnQgY2hfbnVtLCB1MTYgKm1lbWNweV9jaGFubmVscykKK3N0YXRpYyBib29sIGVkbWFfaXNfbWVtY3B5X2NoYW5uZWwoaW50IGNoX251bSwgczMyICptZW1jcHlfY2hhbm5lbHMpCiB7Ci0JczE2ICptZW1jcHlfY2ggPSBtZW1jcHlfY2hhbm5lbHM7Ci0KIAlpZiAoIW1lbWNweV9jaGFubmVscykKIAkJcmV0dXJuIGZhbHNlOwotCXdoaWxlICgqbWVtY3B5X2NoICE9IC0xKSB7Ci0JCWlmICgqbWVtY3B5X2NoID09IGNoX251bSkKKwl3aGlsZSAoKm1lbWNweV9jaGFubmVscyAhPSAtMSkgeworCQlpZiAoKm1lbWNweV9jaGFubmVscyA9PSBjaF9udW0pCiAJCQlyZXR1cm4gdHJ1ZTsKLQkJbWVtY3B5X2NoKys7CisJCW1lbWNweV9jaGFubmVscysrOwogCX0KIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xNzc1LDcgKzE3NzMsNyBAQAogewogCXN0cnVjdCBkbWFfZGV2aWNlICpzX2RkZXYgPSAmZWNjLT5kbWFfc2xhdmU7CiAJc3RydWN0IGRtYV9kZXZpY2UgKm1fZGRldiA9IE5VTEw7Ci0JczE2ICptZW1jcHlfY2hhbm5lbHMgPSBlY2MtPmluZm8tPm1lbWNweV9jaGFubmVsczsKKwlzMzIgKm1lbWNweV9jaGFubmVscyA9IGVjYy0+aW5mby0+bWVtY3B5X2NoYW5uZWxzOwogCWludCBpLCBqOwogCiAJZG1hX2NhcF96ZXJvKHNfZGRldi0+Y2FwX21hc2spOwpAQCAtMTk5NiwxNiArMTk5NCwxNiBAQAogCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRldi0+b2Zfbm9kZSwgInRpLGVkbWEtbWVtY3B5LWNoYW5uZWxzIiwgJnN6KTsKIAlpZiAocHJvcCkgewogCQljb25zdCBjaGFyIHBuYW1lW10gPSAidGksZWRtYS1tZW1jcHktY2hhbm5lbHMiOwotCQlzaXplX3QgbmVsbSA9IHN6IC8gc2l6ZW9mKHMxNik7Ci0JCXMxNiAqbWVtY3B5X2NoOworCQlzaXplX3QgbmVsbSA9IHN6IC8gc2l6ZW9mKHMzMik7CisJCXMzMiAqbWVtY3B5X2NoOwogCi0JCW1lbWNweV9jaCA9IGRldm1fa2NhbGxvYyhkZXYsIG5lbG0gKyAxLCBzaXplb2YoczE2KSwKKwkJbWVtY3B5X2NoID0gZGV2bV9rY2FsbG9jKGRldiwgbmVsbSArIDEsIHNpemVvZihzMzIpLAogCQkJCQkgR0ZQX0tFUk5FTCk7CiAJCWlmICghbWVtY3B5X2NoKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MTZfYXJyYXkoZGV2LT5vZl9ub2RlLCBwbmFtZSwKLQkJCQkJCSAodTE2ICopbWVtY3B5X2NoLCBuZWxtKTsKKwkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZGV2LT5vZl9ub2RlLCBwbmFtZSwKKwkJCQkJCSAodTMyICopbWVtY3B5X2NoLCBuZWxtKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CiAKQEAgLTIwMTcsMzEgKzIwMTUsNTAgQEAKIAkJCQkmc3opOwogCWlmIChwcm9wKSB7CiAJCWNvbnN0IGNoYXIgcG5hbWVbXSA9ICJ0aSxlZG1hLXJlc2VydmVkLXNsb3QtcmFuZ2VzIjsKKwkJdTMyICgqdG1wKVsyXTsKIAkJczE2ICgqcnN2X3Nsb3RzKVsyXTsKLQkJc2l6ZV90IG5lbG0gPSBzeiAvIHNpemVvZigqcnN2X3Nsb3RzKTsKKwkJc2l6ZV90IG5lbG0gPSBzeiAvIHNpemVvZigqdG1wKTsKIAkJc3RydWN0IGVkbWFfcnN2X2luZm8gKnJzdl9pbmZvOworCQlpbnQgaTsKIAogCQlpZiAoIW5lbG0pCiAJCQlyZXR1cm4gaW5mbzsKIAotCQlyc3ZfaW5mbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcnN2X2luZm8pLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyc3ZfaW5mbykKKwkJdG1wID0ga2NhbGxvYyhuZWxtLCBzaXplb2YoKnRtcCksIEdGUF9LRVJORUwpOworCQlpZiAoIXRtcCkKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCisJCXJzdl9pbmZvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpyc3ZfaW5mbyksIEdGUF9LRVJORUwpOworCQlpZiAoIXJzdl9pbmZvKSB7CisJCQlrZnJlZSh0bXApOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCX0KKwogCQlyc3Zfc2xvdHMgPSBkZXZtX2tjYWxsb2MoZGV2LCBuZWxtICsgMSwgc2l6ZW9mKCpyc3Zfc2xvdHMpLAogCQkJCQkgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcnN2X3Nsb3RzKQorCQlpZiAoIXJzdl9zbG90cykgeworCQkJa2ZyZWUodG1wKTsKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQl9CiAKLQkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MTZfYXJyYXkoZGV2LT5vZl9ub2RlLCBwbmFtZSwKLQkJCQkJCSAodTE2ICopcnN2X3Nsb3RzLCBuZWxtICogMik7Ci0JCWlmIChyZXQpCisJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGRldi0+b2Zfbm9kZSwgcG5hbWUsCisJCQkJCQkgKHUzMiAqKXRtcCwgbmVsbSAqIDIpOworCQlpZiAocmV0KSB7CisJCQlrZnJlZSh0bXApOwogCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwkJfQogCisJCWZvciAoaSA9IDA7IGkgPCBuZWxtOyBpKyspIHsKKwkJCXJzdl9zbG90c1tpXVswXSA9IHRtcFtpXVswXTsKKwkJCXJzdl9zbG90c1tpXVsxXSA9IHRtcFtpXVsxXTsKKwkJfQogCQlyc3Zfc2xvdHNbbmVsbV1bMF0gPSAtMTsKIAkJcnN2X3Nsb3RzW25lbG1dWzFdID0gLTE7CisKIAkJaW5mby0+cnN2ID0gcnN2X2luZm87CiAJCWluZm8tPnJzdi0+cnN2X3Nsb3RzID0gKGNvbnN0IHMxNiAoKilbMl0pcnN2X3Nsb3RzOworCisJCWtmcmVlKHRtcCk7CiAJfQogCiAJcmV0dXJuIGluZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jIGIvZHJpdmVycy9kbWEvaW14LXNkbWEuYwppbmRleCA3MDU4ZDU4Li4wZjZmZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lteC1zZG1hLmMKQEAgLTE0NjIsNyArMTQ2Miw3IEBACiAKICNkZWZpbmUgRVZFTlRfUkVNQVBfQ0VMTFMgMwogCi1zdGF0aWMgaW50IF9faW5pdCBzZG1hX2V2ZW50X3JlbWFwKHN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSkKK3N0YXRpYyBpbnQgc2RtYV9ldmVudF9yZW1hcChzdHJ1Y3Qgc2RtYV9lbmdpbmUgKnNkbWEpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHNkbWEtPmRldi0+b2Zfbm9kZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmdwcl9ucCA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJncHIiLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL21pY194MTAwX2RtYS5jIGIvZHJpdmVycy9kbWEvbWljX3gxMDBfZG1hLmMKaW5kZXggMDY4ZTkyMC4uY2RkZmE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvbWljX3gxMDBfZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvbWljX3gxMDBfZG1hLmMKQEAgLTMxNyw2ICszMTcsNyBAQAogCXN0cnVjdCBtaWNfZG1hX2NoYW4gKm1pY19jaCA9IHRvX21pY19kbWFfY2hhbihjaCk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gbWljX2RtYV9jaF90b19kZXZpY2UobWljX2NoKTsKIAlpbnQgcmVzdWx0OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCiAJaWYgKCFsZW4gJiYgIWZsYWdzKQogCQlyZXR1cm4gTlVMTDsKQEAgLTMyNCwxMCArMzI1LDEzIEBACiAJc3Bpbl9sb2NrKCZtaWNfY2gtPnByZXBfbG9jayk7CiAJcmVzdWx0ID0gbWljX2RtYV9kb19kbWEobWljX2NoLCBmbGFncywgZG1hX3NyYywgZG1hX2Rlc3QsIGxlbik7CiAJaWYgKHJlc3VsdCA+PSAwKQotCQlyZXR1cm4gYWxsb2NhdGVfdHgobWljX2NoKTsKLQlkZXZfZXJyKGRldiwgIkVycm9yIGVucXVldWVpbmcgZG1hLCBlcnJvcj0lZFxuIiwgcmVzdWx0KTsKKwkJdHggPSBhbGxvY2F0ZV90eChtaWNfY2gpOworCisJaWYgKCF0eCkKKwkJZGV2X2VycihkZXYsICJFcnJvciBlbnF1ZXVlaW5nIGRtYSwgZXJyb3I9JWRcbiIsIHJlc3VsdCk7CisKIAlzcGluX3VubG9jaygmbWljX2NoLT5wcmVwX2xvY2spOwotCXJldHVybiBOVUxMOworCXJldHVybiB0eDsKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCkBAIC0zMzUsMTMgKzMzOSwxNCBAQAogewogCXN0cnVjdCBtaWNfZG1hX2NoYW4gKm1pY19jaCA9IHRvX21pY19kbWFfY2hhbihjaCk7CiAJaW50IHJldDsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAogCXNwaW5fbG9jaygmbWljX2NoLT5wcmVwX2xvY2spOwogCXJldCA9IG1pY19kbWFfZG9fZG1hKG1pY19jaCwgZmxhZ3MsIDAsIDAsIDApOwogCWlmICghcmV0KQotCQlyZXR1cm4gYWxsb2NhdGVfdHgobWljX2NoKTsKKwkJdHggPSBhbGxvY2F0ZV90eChtaWNfY2gpOwogCXNwaW5fdW5sb2NrKCZtaWNfY2gtPnByZXBfbG9jayk7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHR4OwogfQogCiAvKiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgdHJhbnNhY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3NoL3VzYi1kbWFjLmMgYi9kcml2ZXJzL2RtYS9zaC91c2ItZG1hYy5jCmluZGV4IGViZDhhNWYuLmYxYmNjMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3NoL3VzYi1kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvc2gvdXNiLWRtYWMuYwpAQCAtNjc5LDggKzY3OSwxMSBAQAogCXN0cnVjdCB1c2JfZG1hYyAqZG1hYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IGRtYWMtPm5fY2hhbm5lbHM7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgZG1hYy0+bl9jaGFubmVsczsgKytpKSB7CisJCWlmICghZG1hYy0+Y2hhbm5lbHNbaV0uaW9tZW0pCisJCQlicmVhazsKIAkJdXNiX2RtYWNfY2hhbl9oYWx0KCZkbWFjLT5jaGFubmVsc1tpXSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC03OTksMTEgKzgwMiwxMCBAQAogCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicnVudGltZSBQTSBnZXQgc3luYyBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJvcl9wbTsKIAl9CiAKIAlyZXQgPSB1c2JfZG1hY19pbml0KGRtYWMpOwotCXBtX3J1bnRpbWVfcHV0KCZwZGV2LT5kZXYpOwogCiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVzZXQgZGV2aWNlXG4iKTsKQEAgLTg1MSwxMCArODUzLDEzIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKKwlwbV9ydW50aW1lX3B1dCgmcGRldi0+ZGV2KTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CiAJb2ZfZG1hX2NvbnRyb2xsZXJfZnJlZShwZGV2LT5kZXYub2Zfbm9kZSk7CisJcG1fcnVudGltZV9wdXQoJnBkZXYtPmRldik7CitlcnJvcl9wbToKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZnBnYS9mcGdhLW1nci5jIGIvZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmMKaW5kZXggYTI0ZjVjYi4uOTUzZGM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmMKKysrIGIvZHJpdmVycy9mcGdhL2ZwZ2EtbWdyLmMKQEAgLTEyMiwxMiArMTIyLDEwIEBACiAJfQogCiAJcmV0ID0gZnBnYV9tZ3JfYnVmX2xvYWQobWdyLCBmbGFncywgZnctPmRhdGEsIGZ3LT5zaXplKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwogCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZnBnYV9tZ3JfZmlybXdhcmVfbG9hZCk7CiAKQEAgLTI1Niw3ICsyNTQsNiBAQAogCQkgICAgICB2b2lkICpwcml2KQogewogCXN0cnVjdCBmcGdhX21hbmFnZXIgKm1ncjsKLQljb25zdCBjaGFyICpkdF9sYWJlbDsKIAlpbnQgaWQsIHJldDsKIAogCWlmICghbW9wcyB8fCAhbW9wcy0+d3JpdGVfaW5pdCB8fCAhbW9wcy0+d3JpdGUgfHwKQEAgLTMwMCwxMSArMjk3LDkgQEAKIAltZ3ItPmRldi5pZCA9IGlkOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1ncik7CiAKLQlkdF9sYWJlbCA9IG9mX2dldF9wcm9wZXJ0eShtZ3ItPmRldi5vZl9ub2RlLCAibGFiZWwiLCBOVUxMKTsKLQlpZiAoZHRfbGFiZWwpCi0JCXJldCA9IGRldl9zZXRfbmFtZSgmbWdyLT5kZXYsICIlcyIsIGR0X2xhYmVsKTsKLQllbHNlCi0JCXJldCA9IGRldl9zZXRfbmFtZSgmbWdyLT5kZXYsICJmcGdhJWQiLCBpZCk7CisJcmV0ID0gZGV2X3NldF9uYW1lKCZtZ3ItPmRldiwgImZwZ2ElZCIsIGlkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2RldmljZTsKIAogCXJldCA9IGRldmljZV9hZGQoJm1nci0+ZGV2KTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tNzR4eC1tbWlvLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby03NHh4LW1taW8uYwppbmRleCA2ZWQ3YzBmLi42YjE4NjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby03NHh4LW1taW8uYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby03NHh4LW1taW8uYwpAQCAtMTEzLDEzICsxMTMsMTYgQEAKIAogc3RhdGljIGludCBtbWlvXzc0eHhfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KLQkJb2ZfbWF0Y2hfZGV2aWNlKG1taW9fNzR4eF9ncGlvX2lkcywgJnBkZXYtPmRldik7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CiAJc3RydWN0IG1taW9fNzR4eF9ncGlvX3ByaXYgKnByaXY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdm9pZCBfX2lvbWVtICpkYXQ7CiAJaW50IGVycjsKIAorCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKG1taW9fNzR4eF9ncGlvX2lkcywgJnBkZXYtPmRldik7CisJaWYgKCFvZl9pZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlwcml2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1hdGg3OS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tYXRoNzkuYwppbmRleCBlNTgyN2E1Li41ZWFlYThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1hdGg3OS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWF0aDc5LmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCQlfX3Jhd193cml0ZWwoQklUKG9mZnNldCksIGN0cmwtPmJhc2UgKyBBUjcxWFhfR1BJT19SRUdfQ0xFQVIpOwogCiAJX19yYXdfd3JpdGVsKAotCQlfX3Jhd19yZWFkbChjdHJsLT5iYXNlICsgQVI3MVhYX0dQSU9fUkVHX09FKSAmIEJJVChvZmZzZXQpLAorCQlfX3Jhd19yZWFkbChjdHJsLT5iYXNlICsgQVI3MVhYX0dQSU9fUkVHX09FKSAmIH5CSVQob2Zmc2V0KSwKIAkJY3RybC0+YmFzZSArIEFSNzFYWF9HUElPX1JFR19PRSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHJsLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1nZW5lcmljLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1nZW5lcmljLmMKaW5kZXggYmQ1MTkzYy4uODhhZTcwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWdlbmVyaWMuYwpAQCAtMTQxLDkgKzE0MSw5IEBACiAJdW5zaWduZWQgbG9uZyBwaW5tYXNrID0gYmdjLT5waW4ybWFzayhiZ2MsIGdwaW8pOwogCiAJaWYgKGJnYy0+ZGlyICYgcGlubWFzaykKLQkJcmV0dXJuIGJnYy0+cmVhZF9yZWcoYmdjLT5yZWdfc2V0KSAmIHBpbm1hc2s7CisJCXJldHVybiAhIShiZ2MtPnJlYWRfcmVnKGJnYy0+cmVnX3NldCkgJiBwaW5tYXNrKTsKIAllbHNlCi0JCXJldHVybiBiZ2MtPnJlYWRfcmVnKGJnYy0+cmVnX2RhdCkgJiBwaW5tYXNrOworCQlyZXR1cm4gISEoYmdjLT5yZWFkX3JlZyhiZ2MtPnJlZ19kYXQpICYgcGlubWFzayk7CiB9CiAKIHN0YXRpYyBpbnQgYmdwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYwppbmRleCA1NmQyZDAyLi5mN2ZiYjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jCkBAIC0xMTIyLDggKzExMjIsNiBAQAogCS8qIE1QVUlPIGlzIGEgYml0IGRpZmZlcmVudCwgcmVhZGluZyBJUlEgc3RhdHVzIGNsZWFycyBpdCAqLwogCWlmIChiYW5rLT5pc19tcHVpbykgewogCQlpcnFjLT5pcnFfYWNrID0gZHVtbXlfaXJxX2NoaXAuaXJxX2FjazsKLQkJaXJxYy0+aXJxX21hc2sgPSBpcnFfZ2NfbWFza19zZXRfYml0OwotCQlpcnFjLT5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfY2xyX2JpdDsKIAkJaWYgKCFiYW5rLT5yZWdzLT53a3VwX2VuKQogCQkJaXJxYy0+aXJxX3NldF93YWtlID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1wYWxtYXMuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXBhbG1hcy5jCmluZGV4IDE3MWE2MzguLjUyYjQ0N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXBhbG1hcy5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXBhbG1hcy5jCkBAIC0xNjcsNiArMTY3LDggQEAKIAljb25zdCBzdHJ1Y3QgcGFsbWFzX2RldmljZV9kYXRhICpkZXZfZGF0YTsKIAogCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG9mX3BhbG1hc19ncGlvX21hdGNoLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlkZXZfZGF0YSA9IG1hdGNoLT5kYXRhOwogCWlmICghZGV2X2RhdGEpCiAJCWRldl9kYXRhID0gJnBhbG1hc19kZXZfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXN5c2Nvbi5jIGIvZHJpdmVycy9ncGlvL2dwaW8tc3lzY29uLmMKaW5kZXggMDQ1YTk1Mi4uN2IyNWZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tc3lzY29uLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tc3lzY29uLmMKQEAgLTE4NywxMSArMTg3LDE1IEBACiBzdGF0aWMgaW50IHN5c2Nvbl9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9IG9mX21hdGNoX2RldmljZShzeXNjb25fZ3Bpb19pZHMsIGRldik7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CiAJc3RydWN0IHN5c2Nvbl9ncGlvX3ByaXYgKnByaXY7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKIAlpbnQgcmV0OwogCisJb2ZfaWQgPSBvZl9tYXRjaF9kZXZpY2Uoc3lzY29uX2dwaW9faWRzLCBkZXYpOworCWlmICghb2ZfaWQpCisJCXJldHVybiAtRU5PREVWOworCiAJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby10ZWdyYS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tdGVncmEuYwppbmRleCAwMjdlNWY0Li44OTZiZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby10ZWdyYS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRlZ3JhLmMKQEAgLTM3NSw2ICszNzUsNjAgQEAKIH0KICNlbmRpZgogCisjaWZkZWYJQ09ORklHX0RFQlVHX0ZTCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIGludCBkYmdfZ3Bpb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQoreworCWludCBpOworCWludCBqOworCisJZm9yIChpID0gMDsgaSA8IHRlZ3JhX2dwaW9fYmFua19jb3VudDsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCWludCBncGlvID0gdGVncmFfZ3Bpb19jb21wb3NlKGksIGosIDApOworCQkJc2VxX3ByaW50ZihzLAorCQkJCSIlZDolZCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDZ4XG4iLAorCQkJCWksIGosCisJCQkJdGVncmFfZ3Bpb19yZWFkbChHUElPX0NORihncGlvKSksCisJCQkJdGVncmFfZ3Bpb19yZWFkbChHUElPX09FKGdwaW8pKSwKKwkJCQl0ZWdyYV9ncGlvX3JlYWRsKEdQSU9fT1VUKGdwaW8pKSwKKwkJCQl0ZWdyYV9ncGlvX3JlYWRsKEdQSU9fSU4oZ3BpbykpLAorCQkJCXRlZ3JhX2dwaW9fcmVhZGwoR1BJT19JTlRfU1RBKGdwaW8pKSwKKwkJCQl0ZWdyYV9ncGlvX3JlYWRsKEdQSU9fSU5UX0VOQihncGlvKSksCisJCQkJdGVncmFfZ3Bpb19yZWFkbChHUElPX0lOVF9MVkwoZ3BpbykpKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYmdfZ3Bpb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYmdfZ3Bpb19zaG93LCAmaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2ZvcHMgPSB7CisJLm9wZW4JCT0gZGJnX2dwaW9fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgdGVncmFfZ3Bpb19kZWJ1Z2luaXQodm9pZCkKK3sKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgidGVncmFfZ3BpbyIsIFNfSVJVR08sCisJCQkJCU5VTEwsIE5VTEwsICZkZWJ1Z19mb3BzKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHRlZ3JhX2dwaW9fZGVidWdpbml0KHZvaWQpCit7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRlZ3JhX2dwaW9faXJxX2NoaXAgPSB7CiAJLm5hbWUJCT0gIkdQSU8iLAogCS5pcnFfYWNrCT0gdGVncmFfZ3Bpb19pcnFfYWNrLApAQCAtNTE5LDYgKzU3Myw4IEBACiAJCQlzcGluX2xvY2tfaW5pdCgmYmFuay0+bHZsX2xvY2tbal0pOwogCX0KIAorCXRlZ3JhX2dwaW9fZGVidWdpbml0KCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM2LDUyICs1OTIsMyBAQAogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRlZ3JhX2dwaW9fZHJpdmVyKTsKIH0KIHBvc3Rjb3JlX2luaXRjYWxsKHRlZ3JhX2dwaW9faW5pdCk7Ci0KLSNpZmRlZglDT05GSUdfREVCVUdfRlMKLQotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotCi1zdGF0aWMgaW50IGRiZ19ncGlvX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCi17Ci0JaW50IGk7Ci0JaW50IGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdGVncmFfZ3Bpb19iYW5rX2NvdW50OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgewotCQkJaW50IGdwaW8gPSB0ZWdyYV9ncGlvX2NvbXBvc2UoaSwgaiwgMCk7Ci0JCQlzZXFfcHJpbnRmKHMsCi0JCQkJIiVkOiVkICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwNnhcbiIsCi0JCQkJaSwgaiwKLQkJCQl0ZWdyYV9ncGlvX3JlYWRsKEdQSU9fQ05GKGdwaW8pKSwKLQkJCQl0ZWdyYV9ncGlvX3JlYWRsKEdQSU9fT0UoZ3BpbykpLAotCQkJCXRlZ3JhX2dwaW9fcmVhZGwoR1BJT19PVVQoZ3BpbykpLAotCQkJCXRlZ3JhX2dwaW9fcmVhZGwoR1BJT19JTihncGlvKSksCi0JCQkJdGVncmFfZ3Bpb19yZWFkbChHUElPX0lOVF9TVEEoZ3BpbykpLAotCQkJCXRlZ3JhX2dwaW9fcmVhZGwoR1BJT19JTlRfRU5CKGdwaW8pKSwKLQkJCQl0ZWdyYV9ncGlvX3JlYWRsKEdQSU9fSU5UX0xWTChncGlvKSkpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRiZ19ncGlvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRiZ19ncGlvX3Nob3csICZpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfZm9wcyA9IHsKLQkub3BlbgkJPSBkYmdfZ3Bpb19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0ZWdyYV9ncGlvX2RlYnVnaW5pdCh2b2lkKQotewotCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0ZWdyYV9ncGlvIiwgU19JUlVHTywKLQkJCQkJTlVMTCwgTlVMTCwgJmRlYnVnX2ZvcHMpOwotCXJldHVybiAwOwotfQotbGF0ZV9pbml0Y2FsbCh0ZWdyYV9ncGlvX2RlYnVnaW5pdCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IGExOGYwMGYuLjRlNGMzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJCWZvciAoaSA9IDA7IGkgIT0gY2hpcC0+bmdwaW87ICsraSkgewogCQkJc3RydWN0IGdwaW9fZGVzYyAqZ3BpbyA9ICZjaGlwLT5kZXNjW2ldOwogCi0JCQlpZiAoIWdwaW8tPm5hbWUpCisJCQlpZiAoIWdwaW8tPm5hbWUgfHwgIW5hbWUpCiAJCQkJY29udGludWU7CiAKIAkJCWlmICghc3RyY21wKGdwaW8tPm5hbWUsIG5hbWUpKSB7CkBAIC0xMjc5LDcgKzEyNzksMTMgQEAKIAljaGlwID0gZGVzYy0+Y2hpcDsKIAlvZmZzZXQgPSBncGlvX2NoaXBfaHdncGlvKGRlc2MpOwogCXZhbHVlID0gY2hpcC0+Z2V0ID8gY2hpcC0+Z2V0KGNoaXAsIG9mZnNldCkgOiAtRUlPOwotCXZhbHVlID0gdmFsdWUgPCAwID8gdmFsdWUgOiAhIXZhbHVlOworCS8qCisJICogRklYTUU6IGZpeCBhbGwgZHJpdmVycyB0byBjbGFtcCB0byBbMCwxXSBvciByZXR1cm4gbmVnYXRpdmUsCisJICogdGhlbiBjaGFuZ2UgdGhpcyB0bzoKKwkgKiB2YWx1ZSA9IHZhbHVlIDwgMCA/IHZhbHVlIDogISF2YWx1ZTsKKwkgKiBzbyB3ZSBjYW4gcHJvcGVybHkgcHJvcGFnYXRlIGVycm9yIGNvZGVzLgorCSAqLworCXZhbHVlID0gISF2YWx1ZTsKIAl0cmFjZV9ncGlvX3ZhbHVlKGRlc2NfdG9fZ3BpbyhkZXNjKSwgMSwgdmFsdWUpOwogCXJldHVybiB2YWx1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKaW5kZXggNjE1Y2U2ZC4uMDQ4Y2ZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKQEAgLTM4OSw3ICszODksNiBAQAogICogRmVuY2VzLgogICovCiBzdHJ1Y3QgYW1kZ3B1X2ZlbmNlX2RyaXZlciB7Ci0Jc3RydWN0IGFtZGdwdV9yaW5nCQkqcmluZzsKIAl1aW50NjRfdAkJCWdwdV9hZGRyOwogCXZvbGF0aWxlIHVpbnQzMl90CQkqY3B1X2FkZHI7CiAJLyogc3luY19zZXEgaXMgcHJvdGVjdGVkIGJ5IHJpbmcgZW1pc3Npb24gbG9jayAqLwpAQCAtMzk4LDcgKzM5Nyw3IEBACiAJYm9vbAkJCQlpbml0aWFsaXplZDsKIAlzdHJ1Y3QgYW1kZ3B1X2lycV9zcmMJCSppcnFfc3JjOwogCXVuc2lnbmVkCQkJaXJxX3R5cGU7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAgICAgICAgICAgICBsb2NrdXBfd29yazsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJZmFsbGJhY2tfdGltZXI7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJCWZlbmNlX3F1ZXVlOwogfTsKIApAQCAtNDk3LDYgKzQ5Niw3IEBACiAKIC8qIGJvIHZpcnR1YWwgYWRkcmVzc2VzIGluIGEgc3BlY2lmaWMgdm0gKi8KIHN0cnVjdCBhbWRncHVfYm9fdmEgeworCXN0cnVjdCBtdXRleAkJICAgICAgICBtdXRleDsKIAkvKiBwcm90ZWN0ZWQgYnkgYm8gYmVpbmcgcmVzZXJ2ZWQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCQlib19saXN0OwogCXN0cnVjdCBmZW5jZQkJICAgICAgICAqbGFzdF9wdF91cGRhdGU7CkBAIC01MzksNiArNTM5LDcgQEAKIAkvKiBDb25zdGFudCBhZnRlciBpbml0aWFsaXphdGlvbiAqLwogCXN0cnVjdCBhbWRncHVfZGV2aWNlCQkqYWRldjsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJCWdlbV9iYXNlOworCXN0cnVjdCBhbWRncHVfYm8JCSpwYXJlbnQ7CiAKIAlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqCQlkbWFfYnVmX3ZtYXA7CiAJcGlkX3QJCQkJcGlkOwpAQCAtOTE3LDggKzkxOCw4IEBACiAjZGVmaW5lIEFNREdQVV9WTV9GQVVMVF9TVE9QX0FMV0FZUwkyCiAKIHN0cnVjdCBhbWRncHVfdm1fcHQgewotCXN0cnVjdCBhbWRncHVfYm8JCSpibzsKLQl1aW50NjRfdAkJCWFkZHI7CisJc3RydWN0IGFtZGdwdV9ibwkqYm87CisJdWludDY0X3QJCWFkZHI7CiB9OwogCiBzdHJ1Y3QgYW1kZ3B1X3ZtX2lkIHsKQEAgLTkyNiwxMyArOTI3LDkgQEAKIAl1aW50NjRfdAkJcGRfZ3B1X2FkZHI7CiAJLyogbGFzdCBmbHVzaGVkIFBEL1BUIHVwZGF0ZSAqLwogCXN0cnVjdCBmZW5jZQkgICAgICAgICpmbHVzaGVkX3VwZGF0ZXM7Ci0JLyogbGFzdCB1c2Ugb2Ygdm1pZCAqLwotCXN0cnVjdCBmZW5jZQkJKmxhc3RfaWRfdXNlOwogfTsKIAogc3RydWN0IGFtZGdwdV92bSB7Ci0Jc3RydWN0IG11dGV4CQltdXRleDsKLQogCXN0cnVjdCByYl9yb290CQl2YTsKIAogCS8qIHByb3RlY3RpbmcgaW52YWxpZGF0ZWQgKi8KQEAgLTk1NywyNCArOTU0LDcyIEBACiAKIAkvKiBmb3IgaWQgYW5kIGZsdXNoIG1hbmFnZW1lbnQgcGVyIHJpbmcgKi8KIAlzdHJ1Y3QgYW1kZ3B1X3ZtX2lkCWlkc1tBTURHUFVfTUFYX1JJTkdTXTsKKwkvKiBmb3IgaW50ZXJ2YWwgdHJlZSAqLworCXNwaW5sb2NrX3QJCWl0X2xvY2s7CisJLyogcHJvdGVjdGluZyBmcmVlZCAqLworCXNwaW5sb2NrX3QJCWZyZWVkX2xvY2s7CiB9OwogCiBzdHJ1Y3QgYW1kZ3B1X3ZtX21hbmFnZXIgewotCXN0cnVjdCBmZW5jZQkJCSphY3RpdmVbQU1ER1BVX05VTV9WTV07Ci0JdWludDMyX3QJCQltYXhfcGZuOworCXN0cnVjdCB7CisJCXN0cnVjdCBmZW5jZQkqYWN0aXZlOworCQlhdG9taWNfbG9uZ190CW93bmVyOworCX0gaWRzW0FNREdQVV9OVU1fVk1dOworCisJdWludDMyX3QJCQkJbWF4X3BmbjsKIAkvKiBudW1iZXIgb2YgVk1JRHMgKi8KLQl1bnNpZ25lZAkJCW52bTsKKwl1bnNpZ25lZAkJCQludm07CiAJLyogdnJhbSBiYXNlIGFkZHJlc3MgZm9yIHBhZ2UgdGFibGUgZW50cnkgICovCi0JdTY0CQkJCXZyYW1fYmFzZV9vZmZzZXQ7CisJdTY0CQkJCQl2cmFtX2Jhc2Vfb2Zmc2V0OwogCS8qIGlzIHZtIGVuYWJsZWQ/ICovCi0JYm9vbAkJCQllbmFibGVkOwotCS8qIGZvciBodyB0byBzYXZlIHRoZSBQRCBhZGRyIG9uIHN1c3BlbmQvcmVzdW1lICovCi0JdWludDMyX3QJCQlzYXZlZF90YWJsZV9hZGRyW0FNREdQVV9OVU1fVk1dOworCWJvb2wJCQkJCWVuYWJsZWQ7CiAJLyogdm0gcHRlIGhhbmRsaW5nICovCiAJY29uc3Qgc3RydWN0IGFtZGdwdV92bV9wdGVfZnVuY3MgICAgICAgICp2bV9wdGVfZnVuY3M7CiAJc3RydWN0IGFtZGdwdV9yaW5nICAgICAgICAgICAgICAgICAgICAgICp2bV9wdGVfZnVuY3NfcmluZzsKIH07CiAKK3ZvaWQgYW1kZ3B1X3ZtX21hbmFnZXJfZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CitpbnQgYW1kZ3B1X3ZtX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0gKnZtKTsKK3ZvaWQgYW1kZ3B1X3ZtX2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0gKnZtKTsKK3N0cnVjdCBhbWRncHVfYm9fbGlzdF9lbnRyeSAqYW1kZ3B1X3ZtX2dldF9ib3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwKKwkJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworaW50IGFtZGdwdV92bV9ncmFiX2lkKHN0cnVjdCBhbWRncHVfdm0gKnZtLCBzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCisJCSAgICAgIHN0cnVjdCBhbWRncHVfc3luYyAqc3luYyk7Cit2b2lkIGFtZGdwdV92bV9mbHVzaChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCisJCSAgICAgc3RydWN0IGFtZGdwdV92bSAqdm0sCisJCSAgICAgc3RydWN0IGZlbmNlICp1cGRhdGVzKTsKK3ZvaWQgYW1kZ3B1X3ZtX2ZlbmNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkgICAgIHN0cnVjdCBhbWRncHVfdm0gKnZtLAorCQkgICAgIHN0cnVjdCBmZW5jZSAqZmVuY2UpOwordWludDY0X3QgYW1kZ3B1X3ZtX21hcF9nYXJ0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1aW50NjRfdCBhZGRyKTsKK2ludCBhbWRncHVfdm1fdXBkYXRlX3BhZ2VfZGlyZWN0b3J5KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJCSAgICBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSk7CitpbnQgYW1kZ3B1X3ZtX2NsZWFyX2ZyZWVkKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJICBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSk7CitpbnQgYW1kZ3B1X3ZtX2NsZWFyX2ludmFsaWRzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwKKwkJCSAgICAgc3RydWN0IGFtZGdwdV9zeW5jICpzeW5jKTsKK2ludCBhbWRncHVfdm1fYm9fdXBkYXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJc3RydWN0IGFtZGdwdV9ib192YSAqYm9fdmEsCisJCQlzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSk7Cit2b2lkIGFtZGdwdV92bV9ib19pbnZhbGlkYXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJICAgICBzdHJ1Y3QgYW1kZ3B1X2JvICpibyk7CitzdHJ1Y3QgYW1kZ3B1X2JvX3ZhICphbWRncHVfdm1fYm9fZmluZChzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwKKwkJCQkgICAgICAgc3RydWN0IGFtZGdwdV9ibyAqYm8pOworc3RydWN0IGFtZGdwdV9ib192YSAqYW1kZ3B1X3ZtX2JvX2FkZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkgICAgICBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwKKwkJCQkgICAgICBzdHJ1Y3QgYW1kZ3B1X2JvICpibyk7CitpbnQgYW1kZ3B1X3ZtX2JvX21hcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJICAgICBzdHJ1Y3QgYW1kZ3B1X2JvX3ZhICpib192YSwKKwkJICAgICB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBvZmZzZXQsCisJCSAgICAgdWludDY0X3Qgc2l6ZSwgdWludDMyX3QgZmxhZ3MpOworaW50IGFtZGdwdV92bV9ib191bm1hcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJICAgICAgIHN0cnVjdCBhbWRncHVfYm9fdmEgKmJvX3ZhLAorCQkgICAgICAgdWludDY0X3QgYWRkcik7Cit2b2lkIGFtZGdwdV92bV9ib19ybXYoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCSAgICAgIHN0cnVjdCBhbWRncHVfYm9fdmEgKmJvX3ZhKTsKK2ludCBhbWRncHVfdm1fZnJlZV9qb2Ioc3RydWN0IGFtZGdwdV9qb2IgKmpvYik7CisKIC8qCiAgKiBjb250ZXh0IHJlbGF0ZWQgc3RydWN0dXJlcwogICovCkBAIC0xMjExLDYgKzEyNTYsNyBAQAogCS8qIHJlbG9jYXRpb25zICovCiAJc3RydWN0IGFtZGdwdV9ib19saXN0X2VudHJ5CSp2bV9ib3M7CiAJc3RydWN0IGxpc3RfaGVhZAl2YWxpZGF0ZWQ7CisJc3RydWN0IGZlbmNlCQkqZmVuY2U7CiAKIAlzdHJ1Y3QgYW1kZ3B1X2liCSppYnM7CiAJdWludDMyX3QJCW51bV9pYnM7CkBAIC0xMjE4LDcgKzEyNjQsOCBAQAogCXN0cnVjdCB3d19hY3F1aXJlX2N0eAl0aWNrZXQ7CiAKIAkvKiB1c2VyIGZlbmNlICovCi0Jc3RydWN0IGFtZGdwdV91c2VyX2ZlbmNlIHVmOworCXN0cnVjdCBhbWRncHVfdXNlcl9mZW5jZQl1ZjsKKwlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkJdWZfZW50cnk7CiB9OwogCiBzdHJ1Y3QgYW1kZ3B1X2pvYiB7CkBAIC0xMjI2LDcgKzEyNzMsNyBAQAogCXN0cnVjdCBhbWRncHVfZGV2aWNlCSphZGV2OwogCXN0cnVjdCBhbWRncHVfaWIJKmliczsKIAl1aW50MzJfdAkJbnVtX2liczsKLQlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICBqb2JfbG9jazsKKwl2b2lkCQkJKm93bmVyOwogCXN0cnVjdCBhbWRncHVfdXNlcl9mZW5jZSB1ZjsKIAlpbnQgKCpmcmVlX2pvYikoc3RydWN0IGFtZGdwdV9qb2IgKmpvYik7CiB9OwpAQCAtMjI1NywxMSArMjMwNCw2IEBACiBib29sIGFtZGdwdV9jYXJkX3Bvc3RlZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CiB2b2lkIGFtZGdwdV91cGRhdGVfZGlzcGxheV9wcmlvcml0eShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CiBib29sIGFtZGdwdV9ib290X3Rlc3RfcG9zdF9jYXJkKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKLXN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICphbWRncHVfY3NfcGFyc2VyX2NyZWF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKLQkJCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCi0JCQkJCQkgc3RydWN0IGFtZGdwdV9jdHggKmN0eCwKLQkJCQkJCSBzdHJ1Y3QgYW1kZ3B1X2liICppYnMsCi0JCQkJCQkgdWludDMyX3QgbnVtX2licyk7CiAKIGludCBhbWRncHVfY3NfcGFyc2VyX2luaXQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsIHZvaWQgKmRhdGEpOwogaW50IGFtZGdwdV9jc19nZXRfcmluZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTMyIGlwX3R5cGUsCkBAIC0yMzE5LDQ5ICsyMzYxLDYgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpOwogCiAvKgotICogdm0KLSAqLwotaW50IGFtZGdwdV92bV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSk7Ci12b2lkIGFtZGdwdV92bV9maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSk7Ci1zdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmFtZGdwdV92bV9nZXRfYm9zKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAotCQkJCQkgIHN0cnVjdCBhbWRncHVfdm0gKnZtLAotCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwotaW50IGFtZGdwdV92bV9ncmFiX2lkKHN0cnVjdCBhbWRncHVfdm0gKnZtLCBzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCi0JCSAgICAgIHN0cnVjdCBhbWRncHVfc3luYyAqc3luYyk7Ci12b2lkIGFtZGdwdV92bV9mbHVzaChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCi0JCSAgICAgc3RydWN0IGFtZGdwdV92bSAqdm0sCi0JCSAgICAgc3RydWN0IGZlbmNlICp1cGRhdGVzKTsKLXZvaWQgYW1kZ3B1X3ZtX2ZlbmNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAotCQkgICAgIHN0cnVjdCBhbWRncHVfdm0gKnZtLAotCQkgICAgIHN0cnVjdCBhbWRncHVfZmVuY2UgKmZlbmNlKTsKLXVpbnQ2NF90IGFtZGdwdV92bV9tYXBfZ2FydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdWludDY0X3QgYWRkcik7Ci1pbnQgYW1kZ3B1X3ZtX3VwZGF0ZV9wYWdlX2RpcmVjdG9yeShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKLQkJCQkgICAgc3RydWN0IGFtZGdwdV92bSAqdm0pOwotaW50IGFtZGdwdV92bV9jbGVhcl9mcmVlZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKLQkJCQlzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSk7Ci1pbnQgYW1kZ3B1X3ZtX2NsZWFyX2ludmFsaWRzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAotCQkJCXN0cnVjdCBhbWRncHVfdm0gKnZtLCBzdHJ1Y3QgYW1kZ3B1X3N5bmMgKnN5bmMpOwotaW50IGFtZGdwdV92bV9ib191cGRhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCi0JCQlzdHJ1Y3QgYW1kZ3B1X2JvX3ZhICpib192YSwKLQkJCXN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKTsKLXZvaWQgYW1kZ3B1X3ZtX2JvX2ludmFsaWRhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCi0JCQkgICAgIHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKLXN0cnVjdCBhbWRncHVfYm9fdmEgKmFtZGdwdV92bV9ib19maW5kKHN0cnVjdCBhbWRncHVfdm0gKnZtLAotCQkJCSAgICAgICBzdHJ1Y3QgYW1kZ3B1X2JvICpibyk7Ci1zdHJ1Y3QgYW1kZ3B1X2JvX3ZhICphbWRncHVfdm1fYm9fYWRkKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAotCQkJCSAgICAgIHN0cnVjdCBhbWRncHVfdm0gKnZtLAotCQkJCSAgICAgIHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKLWludCBhbWRncHVfdm1fYm9fbWFwKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAotCQkgICAgIHN0cnVjdCBhbWRncHVfYm9fdmEgKmJvX3ZhLAotCQkgICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG9mZnNldCwKLQkJICAgICB1aW50NjRfdCBzaXplLCB1aW50MzJfdCBmbGFncyk7Ci1pbnQgYW1kZ3B1X3ZtX2JvX3VubWFwKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAotCQkgICAgICAgc3RydWN0IGFtZGdwdV9ib192YSAqYm9fdmEsCi0JCSAgICAgICB1aW50NjRfdCBhZGRyKTsKLXZvaWQgYW1kZ3B1X3ZtX2JvX3JtdihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKLQkJICAgICAgc3RydWN0IGFtZGdwdV9ib192YSAqYm9fdmEpOwotaW50IGFtZGdwdV92bV9mcmVlX2pvYihzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iKTsKLS8qCiAgKiBmdW5jdGlvbnMgdXNlZCBieSBhbWRncHVfZW5jb2Rlci5jCiAgKi8KIHN0cnVjdCBhbWRncHVfYWZtdF9hY3IgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwppbmRleCBkZmM0ZDAyLi4yNWEzZTI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKQEAgLTEyNywyOCArMTI3LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICphbWRncHVfY3NfcGFyc2VyX2NyZWF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYW1kZ3B1X2N0eCAqY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYW1kZ3B1X2liICppYnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bV9pYnMpCitzdGF0aWMgaW50IGFtZGdwdV9jc191c2VyX2ZlbmNlX2NodW5rKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fYW1kZ3B1X2NzX2NodW5rX2ZlbmNlICpmZW5jZV9kYXRhKQogewotCXN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwYXJzZXI7Ci0JaW50IGk7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqOworCXVpbnQzMl90IGhhbmRsZTsKIAotCXBhcnNlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYXJzZXIpCi0JCXJldHVybiBOVUxMOworCWhhbmRsZSA9IGZlbmNlX2RhdGEtPmhhbmRsZTsKKwlnb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKHAtPmFkZXYtPmRkZXYsIHAtPmZpbHAsCisJCQkJICAgICBmZW5jZV9kYXRhLT5oYW5kbGUpOworCWlmIChnb2JqID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcGFyc2VyLT5hZGV2ID0gYWRldjsKLQlwYXJzZXItPmZpbHAgPSBmaWxwOwotCXBhcnNlci0+Y3R4ID0gY3R4OwotCXBhcnNlci0+aWJzID0gaWJzOwotCXBhcnNlci0+bnVtX2licyA9IG51bV9pYnM7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9pYnM7IGkrKykKLQkJaWJzW2ldLmN0eCA9IGN0eDsKKwlwLT51Zi5ibyA9IGFtZGdwdV9ib19yZWYoZ2VtX3RvX2FtZGdwdV9ibyhnb2JqKSk7CisJcC0+dWYub2Zmc2V0ID0gZmVuY2VfZGF0YS0+b2Zmc2V0OwogCi0JcmV0dXJuIHBhcnNlcjsKKwlpZiAoYW1kZ3B1X3R0bV90dF9oYXNfdXNlcnB0cihwLT51Zi5iby0+dGJvLnR0bSkpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXAtPnVmX2VudHJ5LnJvYmogPSBhbWRncHVfYm9fcmVmKHAtPnVmLmJvKTsKKwlwLT51Zl9lbnRyeS5wcmVmZXJlZF9kb21haW5zID0gQU1ER1BVX0dFTV9ET01BSU5fR1RUOworCXAtPnVmX2VudHJ5LmFsbG93ZWRfZG9tYWlucyA9IEFNREdQVV9HRU1fRE9NQUlOX0dUVDsKKwlwLT51Zl9lbnRyeS5wcmlvcml0eSA9IDA7CisJcC0+dWZfZW50cnkudHYuYm8gPSAmcC0+dWZfZW50cnkucm9iai0+dGJvOworCXAtPnVmX2VudHJ5LnR2LnNoYXJlZCA9IHRydWU7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGFtZGdwdV9jc19wYXJzZXJfaW5pdChzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwgdm9pZCAqZGF0YSkKQEAgLTIzMSwyNiArMjM4LDE1IEBACiAKIAkJY2FzZSBBTURHUFVfQ0hVTktfSURfRkVOQ0U6CiAJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1fYW1kZ3B1X2NzX2NodW5rX2ZlbmNlKTsKLQkJCWlmIChwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ICogc2l6ZW9mKHVpbnQzMl90KSA+PSBzaXplKSB7Ci0JCQkJdWludDMyX3QgaGFuZGxlOwotCQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iajsKLQkJCQlzdHJ1Y3QgZHJtX2FtZGdwdV9jc19jaHVua19mZW5jZSAqZmVuY2VfZGF0YTsKLQotCQkJCWZlbmNlX2RhdGEgPSAodm9pZCAqKXAtPmNodW5rc1tpXS5rZGF0YTsKLQkJCQloYW5kbGUgPSBmZW5jZV9kYXRhLT5oYW5kbGU7Ci0JCQkJZ29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChwLT5hZGV2LT5kZGV2LAotCQkJCQkJCSAgICAgcC0+ZmlscCwgaGFuZGxlKTsKLQkJCQlpZiAoZ29iaiA9PSBOVUxMKSB7Ci0JCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJCWdvdG8gZnJlZV9wYXJ0aWFsX2tkYXRhOwotCQkJCX0KLQotCQkJCXAtPnVmLmJvID0gZ2VtX3RvX2FtZGdwdV9ibyhnb2JqKTsKLQkJCQlwLT51Zi5vZmZzZXQgPSBmZW5jZV9kYXRhLT5vZmZzZXQ7Ci0JCQl9IGVsc2UgeworCQkJaWYgKHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiBzaXplb2YodWludDMyX3QpIDwgc2l6ZSkgewogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBmcmVlX3BhcnRpYWxfa2RhdGE7CiAJCQl9CisKKwkJCXJldCA9IGFtZGdwdV9jc191c2VyX2ZlbmNlX2NodW5rKHAsICh2b2lkICopcC0+Y2h1bmtzW2ldLmtkYXRhKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBmcmVlX3BhcnRpYWxfa2RhdGE7CisKIAkJCWJyZWFrOwogCiAJCWNhc2UgQU1ER1BVX0NIVU5LX0lEX0RFUEVOREVOQ0lFUzoKQEAgLTQxMyw2ICs0MDksOSBAQAogCXAtPnZtX2JvcyA9IGFtZGdwdV92bV9nZXRfYm9zKHAtPmFkZXYsICZmcHJpdi0+dm0sCiAJCQkJICAgICAgJnAtPnZhbGlkYXRlZCk7CiAKKwlpZiAocC0+dWYuYm8pCisJCWxpc3RfYWRkKCZwLT51Zl9lbnRyeS50di5oZWFkLCAmcC0+dmFsaWRhdGVkKTsKKwogCWlmIChuZWVkX21tYXBfbG9jaykKIAkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCkBAIC00NjMsOCArNDYyLDE4IEBACiAJcmV0dXJuIChpbnQpbGEtPnJvYmotPnRiby5udW1fcGFnZXMgLSAoaW50KWxiLT5yb2JqLT50Ym8ubnVtX3BhZ2VzOwogfQogCi1zdGF0aWMgdm9pZCBhbWRncHVfY3NfcGFyc2VyX2ZpbmlfZWFybHkoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnBhcnNlciwgaW50IGVycm9yLCBib29sIGJhY2tvZmYpCisvKioKKyAqIGNzX3BhcnNlcl9maW5pKCkgLSBjbGVhbiBwYXJzZXIgc3RhdGVzCisgKiBAcGFyc2VyOglwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0LgorICogQGVycm9yOgllcnJvciBudW1iZXIKKyAqCisgKiBJZiBlcnJvciBpcyBzZXQgdGhhbiB1bnZhbGlkYXRlIGJ1ZmZlciwgb3RoZXJ3aXNlIGp1c3QgZnJlZSBtZW1vcnkKKyAqIHVzZWQgYnkgcGFyc2luZyBjb250ZXh0LgorICoqLworc3RhdGljIHZvaWQgYW1kZ3B1X2NzX3BhcnNlcl9maW5pKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwYXJzZXIsIGludCBlcnJvciwgYm9vbCBiYWNrb2ZmKQogeworCXVuc2lnbmVkIGk7CisKIAlpZiAoIWVycm9yKSB7CiAJCS8qIFNvcnQgdGhlIGJ1ZmZlciBsaXN0IGZyb20gdGhlIHNtYWxsZXN0IHRvIGxhcmdlc3QgYnVmZmVyLAogCQkgKiB3aGljaCBhZmZlY3RzIHRoZSBvcmRlciBvZiBidWZmZXJzIGluIHRoZSBMUlUgbGlzdC4KQEAgLTQ3OSwxNyArNDg4LDE0IEBACiAJCWxpc3Rfc29ydChOVUxMLCAmcGFyc2VyLT52YWxpZGF0ZWQsIGNtcF9zaXplX3NtYWxsZXJfZmlyc3QpOwogCiAJCXR0bV9ldV9mZW5jZV9idWZmZXJfb2JqZWN0cygmcGFyc2VyLT50aWNrZXQsCi0JCQkJJnBhcnNlci0+dmFsaWRhdGVkLAotCQkJCSZwYXJzZXItPmlic1twYXJzZXItPm51bV9pYnMtMV0uZmVuY2UtPmJhc2UpOworCQkJCQkgICAgJnBhcnNlci0+dmFsaWRhdGVkLAorCQkJCQkgICAgcGFyc2VyLT5mZW5jZSk7CiAJfSBlbHNlIGlmIChiYWNrb2ZmKSB7CiAJCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZwYXJzZXItPnRpY2tldCwKIAkJCQkJICAgJnBhcnNlci0+dmFsaWRhdGVkKTsKIAl9Ci19CisJZmVuY2VfcHV0KHBhcnNlci0+ZmVuY2UpOwogCi1zdGF0aWMgdm9pZCBhbWRncHVfY3NfcGFyc2VyX2ZpbmlfbGF0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcGFyc2VyKQotewotCXVuc2lnbmVkIGk7CiAJaWYgKHBhcnNlci0+Y3R4KQogCQlhbWRncHVfY3R4X3B1dChwYXJzZXItPmN0eCk7CiAJaWYgKHBhcnNlci0+Ym9fbGlzdCkKQEAgLTQ5OSwzMSArNTA1LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IHBhcnNlci0+bmNodW5rczsgaSsrKQogCQlkcm1fZnJlZV9sYXJnZShwYXJzZXItPmNodW5rc1tpXS5rZGF0YSk7CiAJa2ZyZWUocGFyc2VyLT5jaHVua3MpOwotCWlmICghYW1kZ3B1X2VuYWJsZV9zY2hlZHVsZXIpCi0JewotCQlpZiAocGFyc2VyLT5pYnMpCi0JCQlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5udW1faWJzOyBpKyspCi0JCQkJYW1kZ3B1X2liX2ZyZWUocGFyc2VyLT5hZGV2LCAmcGFyc2VyLT5pYnNbaV0pOwotCQlrZnJlZShwYXJzZXItPmlicyk7Ci0JCWlmIChwYXJzZXItPnVmLmJvKQotCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJnBhcnNlci0+dWYuYm8tPmdlbV9iYXNlKTsKLQl9Ci0KLQlrZnJlZShwYXJzZXIpOwotfQotCi0vKioKLSAqIGNzX3BhcnNlcl9maW5pKCkgLSBjbGVhbiBwYXJzZXIgc3RhdGVzCi0gKiBAcGFyc2VyOglwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0LgotICogQGVycm9yOgllcnJvciBudW1iZXIKLSAqCi0gKiBJZiBlcnJvciBpcyBzZXQgdGhhbiB1bnZhbGlkYXRlIGJ1ZmZlciwgb3RoZXJ3aXNlIGp1c3QgZnJlZSBtZW1vcnkKLSAqIHVzZWQgYnkgcGFyc2luZyBjb250ZXh0LgotICoqLwotc3RhdGljIHZvaWQgYW1kZ3B1X2NzX3BhcnNlcl9maW5pKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwYXJzZXIsIGludCBlcnJvciwgYm9vbCBiYWNrb2ZmKQotewotICAgICAgIGFtZGdwdV9jc19wYXJzZXJfZmluaV9lYXJseShwYXJzZXIsIGVycm9yLCBiYWNrb2ZmKTsKLSAgICAgICBhbWRncHVfY3NfcGFyc2VyX2ZpbmlfbGF0ZShwYXJzZXIpOworCWlmIChwYXJzZXItPmlicykKKwkJZm9yIChpID0gMDsgaSA8IHBhcnNlci0+bnVtX2liczsgaSsrKQorCQkJYW1kZ3B1X2liX2ZyZWUocGFyc2VyLT5hZGV2LCAmcGFyc2VyLT5pYnNbaV0pOworCWtmcmVlKHBhcnNlci0+aWJzKTsKKwlhbWRncHVfYm9fdW5yZWYoJnBhcnNlci0+dWYuYm8pOworCWFtZGdwdV9ib191bnJlZigmcGFyc2VyLT51Zl9lbnRyeS5yb2JqKTsKIH0KIAogc3RhdGljIGludCBhbWRncHVfYm9fdm1fdXBkYXRlX3B0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKQEAgLTYxMCwxNSArNTk3LDkgQEAKIAl9CiAKIAlyID0gYW1kZ3B1X2JvX3ZtX3VwZGF0ZV9wdGUocGFyc2VyLCB2bSk7Ci0JaWYgKHIpIHsKLQkJZ290byBvdXQ7Ci0JfQotCWFtZGdwdV9jc19zeW5jX3JpbmdzKHBhcnNlcik7Ci0JaWYgKCFhbWRncHVfZW5hYmxlX3NjaGVkdWxlcikKLQkJciA9IGFtZGdwdV9pYl9zY2hlZHVsZShhZGV2LCBwYXJzZXItPm51bV9pYnMsIHBhcnNlci0+aWJzLAotCQkJCSAgICAgICBwYXJzZXItPmZpbHApOworCWlmICghcikKKwkJYW1kZ3B1X2NzX3N5bmNfcmluZ3MocGFyc2VyKTsKIAotb3V0OgogCXJldHVybiByOwogfQogCkBAIC04MTgsNyArNzk5LDcgQEAKIAkJCWFtZGdwdV9pYl9mcmVlKGpvYi0+YWRldiwgJmpvYi0+aWJzW2ldKTsKIAlrZnJlZShqb2ItPmlicyk7CiAJaWYgKGpvYi0+dWYuYm8pCi0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZqb2ItPnVmLmJvLT5nZW1fYmFzZSk7CisJCWFtZGdwdV9ib191bnJlZigmam9iLT51Zi5ibyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgyNiwzOCArODA3LDM1IEBACiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVuaW9uIGRybV9hbWRncHVfY3MgKmNzID0gZGF0YTsKLQlzdHJ1Y3QgYW1kZ3B1X2Zwcml2ICpmcHJpdiA9IGZpbHAtPmRyaXZlcl9wcml2OwotCXN0cnVjdCBhbWRncHVfdm0gKnZtID0gJmZwcml2LT52bTsKLQlzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcGFyc2VyOworCXN0cnVjdCBhbWRncHVfY3NfcGFyc2VyIHBhcnNlciA9IHt9OwogCWJvb2wgcmVzZXJ2ZWRfYnVmZmVycyA9IGZhbHNlOwogCWludCBpLCByOwogCiAJaWYgKCFhZGV2LT5hY2NlbF93b3JraW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcGFyc2VyID0gYW1kZ3B1X2NzX3BhcnNlcl9jcmVhdGUoYWRldiwgZmlscCwgTlVMTCwgTlVMTCwgMCk7Ci0JaWYgKCFwYXJzZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCXIgPSBhbWRncHVfY3NfcGFyc2VyX2luaXQocGFyc2VyLCBkYXRhKTsKKwlwYXJzZXIuYWRldiA9IGFkZXY7CisJcGFyc2VyLmZpbHAgPSBmaWxwOworCisJciA9IGFtZGdwdV9jc19wYXJzZXJfaW5pdCgmcGFyc2VyLCBkYXRhKTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlciAhXG4iKTsKLQkJYW1kZ3B1X2NzX3BhcnNlcl9maW5pKHBhcnNlciwgciwgZmFsc2UpOworCQlhbWRncHVfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgciwgZmFsc2UpOwogCQlyID0gYW1kZ3B1X2NzX2hhbmRsZV9sb2NrdXAoYWRldiwgcik7CiAJCXJldHVybiByOwogCX0KLQltdXRleF9sb2NrKCZ2bS0+bXV0ZXgpOwotCXIgPSBhbWRncHVfY3NfcGFyc2VyX3JlbG9jcyhwYXJzZXIpOworCXIgPSBhbWRncHVfY3NfcGFyc2VyX3JlbG9jcygmcGFyc2VyKTsKIAlpZiAociA9PSAtRU5PTUVNKQogCQlEUk1fRVJST1IoIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjb21tYW5kIHN1Ym1pc3Npb24hXG4iKTsKIAllbHNlIGlmIChyICYmIHIgIT0gLUVSRVNUQVJUU1lTKQogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBwcm9jZXNzIHRoZSBidWZmZXIgbGlzdCAlZCFcbiIsIHIpOwogCWVsc2UgaWYgKCFyKSB7CiAJCXJlc2VydmVkX2J1ZmZlcnMgPSB0cnVlOwotCQlyID0gYW1kZ3B1X2NzX2liX2ZpbGwoYWRldiwgcGFyc2VyKTsKKwkJciA9IGFtZGdwdV9jc19pYl9maWxsKGFkZXYsICZwYXJzZXIpOwogCX0KIAogCWlmICghcikgewotCQlyID0gYW1kZ3B1X2NzX2RlcGVuZGVuY2llcyhhZGV2LCBwYXJzZXIpOworCQlyID0gYW1kZ3B1X2NzX2RlcGVuZGVuY2llcyhhZGV2LCAmcGFyc2VyKTsKIAkJaWYgKHIpCiAJCQlEUk1fRVJST1IoIkZhaWxlZCBpbiB0aGUgZGVwZW5kZW5jaWVzIGhhbmRsaW5nICVkIVxuIiwgcik7CiAJfQpAQCAtODY1LDYzICs4NDMsNzEgQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5udW1faWJzOyBpKyspCi0JCXRyYWNlX2FtZGdwdV9jcyhwYXJzZXIsIGkpOworCWZvciAoaSA9IDA7IGkgPCBwYXJzZXIubnVtX2liczsgaSsrKQorCQl0cmFjZV9hbWRncHVfY3MoJnBhcnNlciwgaSk7CiAKLQlyID0gYW1kZ3B1X2NzX2liX3ZtX2NodW5rKGFkZXYsIHBhcnNlcik7CisJciA9IGFtZGdwdV9jc19pYl92bV9jaHVuayhhZGV2LCAmcGFyc2VyKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKLQlpZiAoYW1kZ3B1X2VuYWJsZV9zY2hlZHVsZXIgJiYgcGFyc2VyLT5udW1faWJzKSB7CisJaWYgKGFtZGdwdV9lbmFibGVfc2NoZWR1bGVyICYmIHBhcnNlci5udW1faWJzKSB7CisJCXN0cnVjdCBhbWRncHVfcmluZyAqIHJpbmcgPSBwYXJzZXIuaWJzLT5yaW5nOworCQlzdHJ1Y3QgYW1kX3NjaGVkX2ZlbmNlICpmZW5jZTsKIAkJc3RydWN0IGFtZGdwdV9qb2IgKmpvYjsKLQkJc3RydWN0IGFtZGdwdV9yaW5nICogcmluZyA9ICBwYXJzZXItPmlicy0+cmluZzsKKwogCQlqb2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYW1kZ3B1X2pvYiksIEdGUF9LRVJORUwpOwogCQlpZiAoIWpvYikgewogCQkJciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQorCiAJCWpvYi0+YmFzZS5zY2hlZCA9ICZyaW5nLT5zY2hlZDsKLQkJam9iLT5iYXNlLnNfZW50aXR5ID0gJnBhcnNlci0+Y3R4LT5yaW5nc1tyaW5nLT5pZHhdLmVudGl0eTsKLQkJam9iLT5hZGV2ID0gcGFyc2VyLT5hZGV2OwotCQlqb2ItPmlicyA9IHBhcnNlci0+aWJzOwotCQlqb2ItPm51bV9pYnMgPSBwYXJzZXItPm51bV9pYnM7Ci0JCWpvYi0+YmFzZS5vd25lciA9IHBhcnNlci0+ZmlscDsKLQkJbXV0ZXhfaW5pdCgmam9iLT5qb2JfbG9jayk7CisJCWpvYi0+YmFzZS5zX2VudGl0eSA9ICZwYXJzZXIuY3R4LT5yaW5nc1tyaW5nLT5pZHhdLmVudGl0eTsKKwkJam9iLT5hZGV2ID0gcGFyc2VyLmFkZXY7CisJCWpvYi0+b3duZXIgPSBwYXJzZXIuZmlscDsKKwkJam9iLT5mcmVlX2pvYiA9IGFtZGdwdV9jc19mcmVlX2pvYjsKKworCQlqb2ItPmlicyA9IHBhcnNlci5pYnM7CisJCWpvYi0+bnVtX2licyA9IHBhcnNlci5udW1faWJzOworCQlwYXJzZXIuaWJzID0gTlVMTDsKKwkJcGFyc2VyLm51bV9pYnMgPSAwOworCiAJCWlmIChqb2ItPmlic1tqb2ItPm51bV9pYnMgLSAxXS51c2VyKSB7Ci0JCQltZW1jcHkoJmpvYi0+dWYsICAmcGFyc2VyLT51ZiwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGFtZGdwdV91c2VyX2ZlbmNlKSk7CisJCQlqb2ItPnVmID0gcGFyc2VyLnVmOwogCQkJam9iLT5pYnNbam9iLT5udW1faWJzIC0gMV0udXNlciA9ICZqb2ItPnVmOworCQkJcGFyc2VyLnVmLmJvID0gTlVMTDsKIAkJfQogCi0JCWpvYi0+ZnJlZV9qb2IgPSBhbWRncHVfY3NfZnJlZV9qb2I7Ci0JCW11dGV4X2xvY2soJmpvYi0+am9iX2xvY2spOwotCQlyID0gYW1kX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmam9iLT5iYXNlKTsKLQkJaWYgKHIpIHsKLQkJCW11dGV4X3VubG9jaygmam9iLT5qb2JfbG9jayk7CisJCWZlbmNlID0gYW1kX3NjaGVkX2ZlbmNlX2NyZWF0ZShqb2ItPmJhc2Uuc19lbnRpdHksCisJCQkJCSAgICAgICBwYXJzZXIuZmlscCk7CisJCWlmICghZmVuY2UpIHsKKwkJCXIgPSAtRU5PTUVNOwogCQkJYW1kZ3B1X2NzX2ZyZWVfam9iKGpvYik7CiAJCQlrZnJlZShqb2IpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJY3MtPm91dC5oYW5kbGUgPQotCQkJYW1kZ3B1X2N0eF9hZGRfZmVuY2UocGFyc2VyLT5jdHgsIHJpbmcsCi0JCQkJCSAgICAgJmpvYi0+YmFzZS5zX2ZlbmNlLT5iYXNlKTsKLQkJcGFyc2VyLT5pYnNbcGFyc2VyLT5udW1faWJzIC0gMV0uc2VxdWVuY2UgPSBjcy0+b3V0LmhhbmRsZTsKKwkJam9iLT5iYXNlLnNfZmVuY2UgPSBmZW5jZTsKKwkJcGFyc2VyLmZlbmNlID0gZmVuY2VfZ2V0KCZmZW5jZS0+YmFzZSk7CiAKLQkJbGlzdF9zb3J0KE5VTEwsICZwYXJzZXItPnZhbGlkYXRlZCwgY21wX3NpemVfc21hbGxlcl9maXJzdCk7Ci0JCXR0bV9ldV9mZW5jZV9idWZmZXJfb2JqZWN0cygmcGFyc2VyLT50aWNrZXQsCi0JCQkJJnBhcnNlci0+dmFsaWRhdGVkLAotCQkJCSZqb2ItPmJhc2Uuc19mZW5jZS0+YmFzZSk7CisJCWNzLT5vdXQuaGFuZGxlID0gYW1kZ3B1X2N0eF9hZGRfZmVuY2UocGFyc2VyLmN0eCwgcmluZywKKwkJCQkJCSAgICAgICZmZW5jZS0+YmFzZSk7CisJCWpvYi0+aWJzW2pvYi0+bnVtX2licyAtIDFdLnNlcXVlbmNlID0gY3MtPm91dC5oYW5kbGU7CiAKLQkJbXV0ZXhfdW5sb2NrKCZqb2ItPmpvYl9sb2NrKTsKLQkJYW1kZ3B1X2NzX3BhcnNlcl9maW5pX2xhdGUocGFyc2VyKTsKLQkJbXV0ZXhfdW5sb2NrKCZ2bS0+bXV0ZXgpOwotCQlyZXR1cm4gMDsKKwkJdHJhY2VfYW1kZ3B1X2NzX2lvY3RsKGpvYik7CisJCWFtZF9zY2hlZF9lbnRpdHlfcHVzaF9qb2IoJmpvYi0+YmFzZSk7CisKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYW1kZ3B1X2ZlbmNlICpmZW5jZTsKKworCQlyID0gYW1kZ3B1X2liX3NjaGVkdWxlKGFkZXYsIHBhcnNlci5udW1faWJzLCBwYXJzZXIuaWJzLAorCQkJCSAgICAgICBwYXJzZXIuZmlscCk7CisJCWZlbmNlID0gcGFyc2VyLmlic1twYXJzZXIubnVtX2licyAtIDFdLmZlbmNlOworCQlwYXJzZXIuZmVuY2UgPSBmZW5jZV9nZXQoJmZlbmNlLT5iYXNlKTsKKwkJY3MtPm91dC5oYW5kbGUgPSBwYXJzZXIuaWJzW3BhcnNlci5udW1faWJzIC0gMV0uc2VxdWVuY2U7CiAJfQogCi0JY3MtPm91dC5oYW5kbGUgPSBwYXJzZXItPmlic1twYXJzZXItPm51bV9pYnMgLSAxXS5zZXF1ZW5jZTsKIG91dDoKLQlhbWRncHVfY3NfcGFyc2VyX2ZpbmkocGFyc2VyLCByLCByZXNlcnZlZF9idWZmZXJzKTsKLQltdXRleF91bmxvY2soJnZtLT5tdXRleCk7CisJYW1kZ3B1X2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIsIHJlc2VydmVkX2J1ZmZlcnMpOwogCXIgPSBhbWRncHVfY3NfaGFuZGxlX2xvY2t1cChhZGV2LCByKTsKIAlyZXR1cm4gcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGlzcGxheS5jCmluZGV4IGUxNzNhNWEuLjU1ODBkMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rpc3BsYXkuYwpAQCAtNzMsNiArNzMsOCBAQAogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZhbWRncHVDcnRjLT5iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaTsKKwlpbnQgdnBvcywgaHBvcywgc3RhdCwgbWluX3VkZWxheTsKKwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2YmxhbmsgPSAmY3J0Yy0+ZGV2LT52Ymxhbmtbd29yay0+Y3J0Y19pZF07CiAKIAlhbWRncHVfZmxpcF93YWl0X2ZlbmNlKGFkZXYsICZ3b3JrLT5leGNsKTsKIAlmb3IgKGkgPSAwOyBpIDwgd29yay0+c2hhcmVkX2NvdW50OyArK2kpCkBAIC04MSw2ICs4Myw0MSBAQAogCS8qIFdlIGJvcnJvdyB0aGUgZXZlbnQgc3BpbiBsb2NrIGZvciBwcm90ZWN0aW5nIGZsaXBfc3RhdHVzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNydGMtPmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCisJLyogSWYgdGhpcyBoYXBwZW5zIHRvIGV4ZWN1dGUgd2l0aGluIHRoZSAidmlydHVhbGx5IGV4dGVuZGVkIiB2YmxhbmsKKwkgKiBpbnRlcnZhbCBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSByZWFsIHZibGFuayBpbnRlcnZhbCB0aGVuIGl0IG5lZWRzCisJICogdG8gZGVsYXkgcHJvZ3JhbW1pbmcgdGhlIG1taW8gZmxpcCB1bnRpbCB0aGUgcmVhbCB2YmxhbmsgaXMgZW50ZXJlZC4KKwkgKiBUaGlzIHByZXZlbnRzIGNvbXBsZXRpbmcgYSBmbGlwIHRvbyBlYXJseSBkdWUgdG8gdGhlIHdheSB3ZSBmdWRnZQorCSAqIG91ciB2YmxhbmsgY291bnRlciBhbmQgdmJsYW5rIHRpbWVzdGFtcHMgaW4gb3JkZXIgdG8gd29yayBhcm91bmQgdGhlCisJICogcHJvYmxlbSB0aGF0IHRoZSBodyBmaXJlcyB2YmxhbmsgaW50ZXJydXB0cyBiZWZvcmUgYWN0dWFsIHN0YXJ0IG9mCisJICogdmJsYW5rICh3aGVuIGxpbmUgYnVmZmVyIHJlZmlsbGluZyBpcyBkb25lIGZvciBhIGZyYW1lKS4gSXQKKwkgKiBjb21wbGVtZW50cyB0aGUgZnVkZ2luZyBsb2dpYyBpbiBhbWRncHVfZ2V0X2NydGNfc2Nhbm91dHBvcygpIGZvcgorCSAqIHRpbWVzdGFtcGluZyBhbmQgYW1kZ3B1X2dldF92YmxhbmtfY291bnRlcl9rbXMoKSBmb3IgdmJsYW5rIGNvdW50cy4KKwkgKgorCSAqIEluIHByYWN0aWNlIHRoaXMgd29uJ3QgZXhlY3V0ZSB2ZXJ5IG9mdGVuIHVubGVzcyBvbiB2ZXJ5IGZhc3QKKwkgKiBtYWNoaW5lcyBiZWNhdXNlIHRoZSB0aW1lIHdpbmRvdyBmb3IgdGhpcyB0byBoYXBwZW4gaXMgdmVyeSBzbWFsbC4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCS8qIEdFVF9ESVNUQU5DRV9UT19WQkxBTktTVEFSVCByZXR1cm5zIGRpc3RhbmNlIHRvIHJlYWwgdmJsYW5rCisJCSAqIHN0YXJ0IGluIGhwb3MsIGFuZCB0byB0aGUgImZ1ZGdlZCBlYXJsaWVyIiB2Ymxhbmsgc3RhcnQgaW4KKwkJICogdnBvcy4KKwkJICovCisJCXN0YXQgPSBhbWRncHVfZ2V0X2NydGNfc2Nhbm91dHBvcyhhZGV2LT5kZGV2LCB3b3JrLT5jcnRjX2lkLAorCQkJCQkJICBHRVRfRElTVEFOQ0VfVE9fVkJMQU5LU1RBUlQsCisJCQkJCQkgICZ2cG9zLCAmaHBvcywgTlVMTCwgTlVMTCwKKwkJCQkJCSAgJmNydGMtPmh3bW9kZSk7CisKKwkJaWYgKChzdGF0ICYgKERSTV9TQ0FOT1VUUE9TX1ZBTElEIHwgRFJNX1NDQU5PVVRQT1NfQUNDVVJBVEUpKSAhPQorCQkgICAgKERSTV9TQ0FOT1VUUE9TX1ZBTElEIHwgRFJNX1NDQU5PVVRQT1NfQUNDVVJBVEUpIHx8CisJCSAgICAhKHZwb3MgPj0gMCAmJiBocG9zIDw9IDApKQorCQkJYnJlYWs7CisKKwkJLyogU2xlZXAgYXQgbGVhc3QgdW50aWwgZXN0aW1hdGVkIHJlYWwgc3RhcnQgb2YgaHcgdmJsYW5rICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNydGMtPmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCQltaW5fdWRlbGF5ID0gKC1ocG9zICsgMSkgKiBtYXgodmJsYW5rLT5saW5lZHVyX25zIC8gMTAwMCwgNSk7CisJCXVzbGVlcF9yYW5nZShtaW5fdWRlbGF5LCAyICogbWluX3VkZWxheSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwl9OworCiAJLyogZG8gdGhlIGZsaXAgKG1taW8pICovCiAJYWRldi0+bW9kZV9pbmZvLmZ1bmNzLT5wYWdlX2ZsaXAoYWRldiwgd29yay0+Y3J0Y19pZCwgd29yay0+YmFzZSk7CiAJLyogc2V0IHRoZSBmbGlwIHN0YXR1cyAqLwpAQCAtMTA5LDcgKzE0Niw3IEBACiAJfSBlbHNlCiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlc2VydmUgYnVmZmVyIGFmdGVyIGZsaXBcbiIpOwogCi0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJndvcmstPm9sZF9yYm8tPmdlbV9iYXNlKTsKKwlhbWRncHVfYm9fdW5yZWYoJndvcmstPm9sZF9yYm8pOwogCWtmcmVlKHdvcmstPnNoYXJlZCk7CiAJa2ZyZWUod29yayk7CiB9CkBAIC0xNDgsOCArMTg1LDggQEAKIAlvYmogPSBvbGRfYW1kZ3B1X2ZiLT5vYmo7CiAKIAkvKiB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBvbGQgb2JqZWN0ICovCi0JZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CiAJd29yay0+b2xkX3JibyA9IGdlbV90b19hbWRncHVfYm8ob2JqKTsKKwlhbWRncHVfYm9fcmVmKHdvcmstPm9sZF9yYm8pOwogCiAJbmV3X2FtZGdwdV9mYiA9IHRvX2FtZGdwdV9mcmFtZWJ1ZmZlcihmYik7CiAJb2JqID0gbmV3X2FtZGdwdV9mYi0+b2JqOwpAQCAtMjIyLDcgKzI1OSw3IEBACiAJYW1kZ3B1X2JvX3VucmVzZXJ2ZShuZXdfcmJvKTsKIAogY2xlYW51cDoKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmd29yay0+b2xkX3Jiby0+Z2VtX2Jhc2UpOworCWFtZGdwdV9ib191bnJlZigmd29yay0+b2xkX3Jibyk7CiAJZmVuY2VfcHV0KHdvcmstPmV4Y2wpOwogCWZvciAoaSA9IDA7IGkgPCB3b3JrLT5zaGFyZWRfY291bnQ7ICsraSkKIAkJZmVuY2VfcHV0KHdvcmstPnNoYXJlZFtpXSk7CkBAIC03MTIsNiArNzQ5LDE1IEBACiAgKiBccGFyYW0gZGV2IERldmljZSB0byBxdWVyeS4KICAqIFxwYXJhbSBwaXBlIENydGMgdG8gcXVlcnkuCiAgKiBccGFyYW0gZmxhZ3MgRmxhZ3MgZnJvbSBjYWxsZXIgKERSTV9DQUxMRURfRlJPTV9WQkxJUlEgb3IgMCkuCisgKiAgICAgICAgICAgICAgRm9yIGRyaXZlciBpbnRlcm5hbCB1c2Ugb25seSBhbHNvIHN1cHBvcnRzIHRoZXNlIGZsYWdzOgorICoKKyAqICAgICAgICAgICAgICBVU0VfUkVBTF9WQkxBTktTVEFSVCB0byB1c2UgdGhlIHJlYWwgc3RhcnQgb2YgdmJsYW5rIGluc3RlYWQKKyAqICAgICAgICAgICAgICBvZiBhIGZ1ZGdlZCBlYXJsaWVyIHN0YXJ0IG9mIHZibGFuay4KKyAqCisgKiAgICAgICAgICAgICAgR0VUX0RJU1RBTkNFX1RPX1ZCTEFOS1NUQVJUIHRvIHJldHVybiBkaXN0YW5jZSB0byB0aGUKKyAqICAgICAgICAgICAgICBmdWRnZWQgZWFybGllciBzdGFydCBvZiB2YmxhbmsgaW4gKnZwb3MgYW5kIHRoZSBkaXN0YW5jZQorICogICAgICAgICAgICAgIHRvIHRydWUgc3RhcnQgb2YgdmJsYW5rIGluICpocG9zLgorICoKICAqIFxwYXJhbSAqdnBvcyBMb2NhdGlvbiB3aGVyZSB2ZXJ0aWNhbCBzY2Fub3V0IHBvc2l0aW9uIHNob3VsZCBiZSBzdG9yZWQuCiAgKiBccGFyYW0gKmhwb3MgTG9jYXRpb24gd2hlcmUgaG9yaXpvbnRhbCBzY2Fub3V0IHBvc2l0aW9uIHNob3VsZCBnby4KICAqIFxwYXJhbSAqc3RpbWUgVGFyZ2V0IGxvY2F0aW9uIGZvciB0aW1lc3RhbXAgdGFrZW4gaW1tZWRpYXRlbHkgYmVmb3JlCkBAIC03NzYsMTAgKzgyMiw0MCBAQAogCQl2YmxfZW5kID0gMDsKIAl9CiAKKwkvKiBDYWxsZWQgZnJvbSBkcml2ZXIgaW50ZXJuYWwgdmJsYW5rIGNvdW50ZXIgcXVlcnkgY29kZT8gKi8KKwlpZiAoZmxhZ3MgJiBHRVRfRElTVEFOQ0VfVE9fVkJMQU5LU1RBUlQpIHsKKwkgICAgLyogQ2FsbGVyIHdhbnRzIGRpc3RhbmNlIGZyb20gcmVhbCB2Ymxfc3RhcnQgaW4gKmhwb3MgKi8KKwkgICAgKmhwb3MgPSAqdnBvcyAtIHZibF9zdGFydDsKKwl9CisKKwkvKiBGdWRnZSB2YmxhbmsgdG8gc3RhcnQgYSBmZXcgc2NhbmxpbmVzIGVhcmxpZXIgdG8gaGFuZGxlIHRoZQorCSAqIHByb2JsZW0gdGhhdCB2YmxhbmsgaXJxcyBmaXJlIGEgZmV3IHNjYW5saW5lcyBiZWZvcmUgc3RhcnQKKwkgKiBvZiB2YmxhbmsuIFNvbWUgZHJpdmVyIGludGVybmFsIGNhbGxlcnMgbmVlZCB0aGUgdHJ1ZSB2YmxhbmsKKwkgKiBzdGFydCB0byBiZSB1c2VkIGFuZCBzaWduYWwgdGhpcyB2aWEgdGhlIFVTRV9SRUFMX1ZCTEFOS1NUQVJUIGZsYWcuCisJICoKKwkgKiBUaGUgY2F1c2Ugb2YgdGhlICJlYXJseSIgdmJsYW5rIGlycSBpcyB0aGF0IHRoZSBpcnEgaXMgdHJpZ2dlcmVkCisJICogYnkgdGhlIGxpbmUgYnVmZmVyIGxvZ2ljIHdoZW4gdGhlIGxpbmUgYnVmZmVyIHJlYWQgcG9zaXRpb24gZW50ZXJzCisJICogdGhlIHZibGFuaywgd2hlcmVhcyBvdXIgY3J0YyBzY2Fub3V0IHBvc2l0aW9uIG5hdHVyYWxseSBsYWdzIHRoZQorCSAqIGxpbmUgYnVmZmVyIHJlYWQgcG9zaXRpb24uCisJICovCisJaWYgKCEoZmxhZ3MgJiBVU0VfUkVBTF9WQkxBTktTVEFSVCkpCisJCXZibF9zdGFydCAtPSBhZGV2LT5tb2RlX2luZm8uY3J0Y3NbcGlwZV0tPmxiX3ZibGFua19sZWFkX2xpbmVzOworCiAJLyogVGVzdCBzY2Fub3V0IHBvc2l0aW9uIGFnYWluc3QgdmJsYW5rIHJlZ2lvbi4gKi8KIAlpZiAoKCp2cG9zIDwgdmJsX3N0YXJ0KSAmJiAoKnZwb3MgPj0gdmJsX2VuZCkpCiAJCWluX3ZibCA9IGZhbHNlOwogCisJLyogSW4gdmJsYW5rPyAqLworCWlmIChpbl92YmwpCisJICAgIHJldCB8PSBEUk1fU0NBTk9VVFBPU19JTl9WQkxBTks7CisKKwkvKiBDYWxsZWQgZnJvbSBkcml2ZXIgaW50ZXJuYWwgdmJsYW5rIGNvdW50ZXIgcXVlcnkgY29kZT8gKi8KKwlpZiAoZmxhZ3MgJiBHRVRfRElTVEFOQ0VfVE9fVkJMQU5LU1RBUlQpIHsKKwkJLyogQ2FsbGVyIHdhbnRzIGRpc3RhbmNlIGZyb20gZnVkZ2VkIGVhcmxpZXIgdmJsX3N0YXJ0ICovCisJCSp2cG9zIC09IHZibF9zdGFydDsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAkvKiBDaGVjayBpZiBpbnNpZGUgdmJsYW5rIGFyZWEgYW5kIGFwcGx5IGNvcnJlY3RpdmUgb2Zmc2V0czoKIAkgKiB2cG9zIHdpbGwgdGhlbiBiZSA+PTAgaW4gdmlkZW8gc2Nhbm91dCBhcmVhLCBidXQgbmVnYXRpdmUKIAkgKiB3aXRoaW4gdmJsYW5rIGFyZWEsIGNvdW50aW5nIGRvd24gdGhlIG51bWJlciBvZiBsaW5lcyB1bnRpbApAQCAtNzk1LDMyICs4NzEsNiBAQAogCS8qIENvcnJlY3QgZm9yIHNoaWZ0ZWQgZW5kIG9mIHZibCBhdCB2YmxfZW5kLiAqLwogCSp2cG9zID0gKnZwb3MgLSB2YmxfZW5kOwogCi0JLyogSW4gdmJsYW5rPyAqLwotCWlmIChpbl92YmwpCi0JCXJldCB8PSBEUk1fU0NBTk9VVFBPU19JTl9WQkxBTks7Ci0KLQkvKiBJcyB2cG9zIG91dHNpZGUgbm9taW5hbCB2YmxhbmsgYXJlYSwgYnV0IGxlc3MgdGhhbgotCSAqIDEvMTAwIG9mIGEgZnJhbWUgaGVpZ2h0IGF3YXkgZnJvbSBzdGFydCBvZiB2Ymxhbms/Ci0JICogSWYgc28sIGFzc3VtZSB0aGlzIGlzbid0IGEgbWFzc2l2ZWx5IGRlbGF5ZWQgdmJsYW5rCi0JICogaW50ZXJydXB0LCBidXQgYSB2YmxhbmsgaW50ZXJydXB0IHRoYXQgZmlyZWQgYSBmZXcKLQkgKiBtaWNyb3NlY29uZHMgYmVmb3JlIHRydWUgc3RhcnQgb2YgdmJsYW5rLiBDb21wZW5zYXRlCi0JICogYnkgYWRkaW5nIGEgZnVsbCBmcmFtZSBkdXJhdGlvbiB0byB0aGUgZmluYWwgdGltZXN0YW1wLgotCSAqIEhhcHBlbnMsIGUuZy4sIG9uIEFUSSBSNTAwLCBSNjAwLgotCSAqCi0JICogV2Ugb25seSBkbyB0aGlzIGlmIERSTV9DQUxMRURfRlJPTV9WQkxJUlEuCi0JICovCi0JaWYgKChmbGFncyAmIERSTV9DQUxMRURfRlJPTV9WQkxJUlEpICYmICFpbl92YmwpIHsKLQkJdmJsX3N0YXJ0ID0gbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJdnRvdGFsID0gbW9kZS0+Y3J0Y192dG90YWw7Ci0KLQkJaWYgKHZibF9zdGFydCAtICp2cG9zIDwgdnRvdGFsIC8gMTAwKSB7Ci0JCQkqdnBvcyAtPSB2dG90YWw7Ci0KLQkJCS8qIFNpZ25hbCB0aGlzIGNvcnJlY3Rpb24gYXMgImFwcGxpZWQiLiAqLwotCQkJcmV0IHw9IDB4ODsKLQkJfQotCX0KLQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ZlbmNlLmMKaW5kZXggMjU3ZDcyMi4uMzY3MWY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ZlbmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ZlbmNlLmMKQEAgLTQ3LDYgKzQ3LDkgQEAKICAqIHRoYXQgdGhlIHRoZSByZWxldmFudCBHUFUgY2FjaGVzIGhhdmUgYmVlbiBmbHVzaGVkLgogICovCiAKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYW1kZ3B1X2ZlbmNlX3NsYWI7CitzdGF0aWMgYXRvbWljX3QgYW1kZ3B1X2ZlbmNlX3NsYWJfcmVmID0gQVRPTUlDX0lOSVQoMCk7CisKIC8qKgogICogYW1kZ3B1X2ZlbmNlX3dyaXRlIC0gd3JpdGUgYSBmZW5jZSB2YWx1ZQogICoKQEAgLTg1LDI0ICs4OCw2IEBACiB9CiAKIC8qKgotICogYW1kZ3B1X2ZlbmNlX3NjaGVkdWxlX2NoZWNrIC0gc2NoZWR1bGUgbG9ja3VwIGNoZWNrCi0gKgotICogQHJpbmc6IHBvaW50ZXIgdG8gc3RydWN0IGFtZGdwdV9yaW5nCi0gKgotICogUXVldWVzIGEgZGVsYXllZCB3b3JrIGl0ZW0gdG8gY2hlY2sgZm9yIGxvY2t1cHMuCi0gKi8KLXN0YXRpYyB2b2lkIGFtZGdwdV9mZW5jZV9zY2hlZHVsZV9jaGVjayhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCi17Ci0JLyoKLQkgKiBEbyBub3QgcmVzZXQgdGhlIHRpbWVyIGhlcmUgd2l0aCBtb2RfZGVsYXllZF93b3JrLAotCSAqIHRoaXMgY2FuIGxpdmVsb2NrIGluIGFuIGludGVyYWN0aW9uIHdpdGggVFRNIGRlbGF5ZWQgZGVzdHJveS4KLQkgKi8KLQlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwKLQkJJnJpbmctPmZlbmNlX2Rydi5sb2NrdXBfd29yaywKLQkJQU1ER1BVX0ZFTkNFX0pJRkZJRVNfVElNRU9VVCk7Ci19Ci0KLS8qKgogICogYW1kZ3B1X2ZlbmNlX2VtaXQgLSBlbWl0IGEgZmVuY2Ugb24gdGhlIHJlcXVlc3RlZCByaW5nCiAgKgogICogQHJpbmc6IHJpbmcgdGhlIGZlbmNlIGlzIGFzc29jaWF0ZWQgd2l0aApAQCAtMTE4LDcgKzEwMyw3IEBACiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2OwogCiAJLyogd2UgYXJlIHByb3RlY3RlZCBieSB0aGUgcmluZyBlbWlzc2lvbiBtdXRleCAqLwotCSpmZW5jZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWRncHVfZmVuY2UpLCBHRlBfS0VSTkVMKTsKKwkqZmVuY2UgPSBrbWVtX2NhY2hlX2FsbG9jKGFtZGdwdV9mZW5jZV9zbGFiLCBHRlBfS0VSTkVMKTsKIAlpZiAoKCpmZW5jZSkgPT0gTlVMTCkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xMzIsMTEgKzExNywyMyBAQAogCWFtZGdwdV9yaW5nX2VtaXRfZmVuY2UocmluZywgcmluZy0+ZmVuY2VfZHJ2LmdwdV9hZGRyLAogCQkJICAgICAgICgqZmVuY2UpLT5zZXEsCiAJCQkgICAgICAgQU1ER1BVX0ZFTkNFX0ZMQUdfSU5UKTsKLQl0cmFjZV9hbWRncHVfZmVuY2VfZW1pdChyaW5nLT5hZGV2LT5kZGV2LCByaW5nLT5pZHgsICgqZmVuY2UpLT5zZXEpOwogCXJldHVybiAwOwogfQogCiAvKioKKyAqIGFtZGdwdV9mZW5jZV9zY2hlZHVsZV9mYWxsYmFjayAtIHNjaGVkdWxlIGZhbGxiYWNrIGNoZWNrCisgKgorICogQHJpbmc6IHBvaW50ZXIgdG8gc3RydWN0IGFtZGdwdV9yaW5nCisgKgorICogU3RhcnQgYSB0aW1lciBhcyBmYWxsYmFjayB0byBvdXIgaW50ZXJydXB0cy4KKyAqLworc3RhdGljIHZvaWQgYW1kZ3B1X2ZlbmNlX3NjaGVkdWxlX2ZhbGxiYWNrKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKK3sKKwltb2RfdGltZXIoJnJpbmctPmZlbmNlX2Rydi5mYWxsYmFja190aW1lciwKKwkJICBqaWZmaWVzICsgQU1ER1BVX0ZFTkNFX0pJRkZJRVNfVElNRU9VVCk7Cit9CisKKy8qKgogICogYW1kZ3B1X2ZlbmNlX2FjdGl2aXR5IC0gY2hlY2sgZm9yIGZlbmNlIGFjdGl2aXR5CiAgKgogICogQHJpbmc6IHBvaW50ZXIgdG8gc3RydWN0IGFtZGdwdV9yaW5nCkBAIC0yMDIsMzMgKzE5OSwxMiBAQAogCX0gd2hpbGUgKGF0b21pYzY0X3hjaGcoJnJpbmctPmZlbmNlX2Rydi5sYXN0X3NlcSwgc2VxKSA+IHNlcSk7CiAKIAlpZiAoc2VxIDwgbGFzdF9lbWl0dGVkKQotCQlhbWRncHVfZmVuY2Vfc2NoZWR1bGVfY2hlY2socmluZyk7CisJCWFtZGdwdV9mZW5jZV9zY2hlZHVsZV9mYWxsYmFjayhyaW5nKTsKIAogCXJldHVybiB3YWtlOwogfQogCiAvKioKLSAqIGFtZGdwdV9mZW5jZV9jaGVja19sb2NrdXAgLSBjaGVjayBmb3IgaGFyZHdhcmUgbG9ja3VwCi0gKgotICogQHdvcms6IGRlbGF5ZWQgd29yayBpdGVtCi0gKgotICogQ2hlY2tzIGZvciBmZW5jZSBhY3Rpdml0eSBhbmQgaWYgdGhlcmUgaXMgbm9uZSBwcm9iZQotICogdGhlIGhhcmR3YXJlIGlmIGEgbG9ja3VwIG9jY3VyZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGFtZGdwdV9mZW5jZV9jaGVja19sb2NrdXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhbWRncHVfZmVuY2VfZHJpdmVyICpmZW5jZV9kcnY7Ci0Jc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nOwotCi0JZmVuY2VfZHJ2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhbWRncHVfZmVuY2VfZHJpdmVyLAotCQkJCWxvY2t1cF93b3JrLndvcmspOwotCXJpbmcgPSBmZW5jZV9kcnYtPnJpbmc7Ci0KLQlpZiAoYW1kZ3B1X2ZlbmNlX2FjdGl2aXR5KHJpbmcpKQotCQl3YWtlX3VwX2FsbCgmcmluZy0+ZmVuY2VfZHJ2LmZlbmNlX3F1ZXVlKTsKLX0KLQotLyoqCiAgKiBhbWRncHVfZmVuY2VfcHJvY2VzcyAtIHByb2Nlc3MgYSBmZW5jZQogICoKICAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKQEAgLTI0NCw2ICsyMjAsMjAgQEAKIH0KIAogLyoqCisgKiBhbWRncHVfZmVuY2VfZmFsbGJhY2sgLSBmYWxsYmFjayBmb3IgaGFyZHdhcmUgaW50ZXJydXB0cworICoKKyAqIEB3b3JrOiBkZWxheWVkIHdvcmsgaXRlbQorICoKKyAqIENoZWNrcyBmb3IgZmVuY2UgYWN0aXZpdHkuCisgKi8KK3N0YXRpYyB2b2lkIGFtZGdwdV9mZW5jZV9mYWxsYmFjayh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcgPSAodm9pZCAqKWFyZzsKKworCWFtZGdwdV9mZW5jZV9wcm9jZXNzKHJpbmcpOworfQorCisvKioKICAqIGFtZGdwdV9mZW5jZV9zZXFfc2lnbmFsZWQgLSBjaGVjayBpZiBhIGZlbmNlIHNlcXVlbmNlIG51bWJlciBoYXMgc2lnbmFsZWQKICAqCiAgKiBAcmluZzogcmluZyB0aGUgZmVuY2UgaXMgYXNzb2NpYXRlZCB3aXRoCkBAIC0yOTAsNyArMjgwLDcgQEAKIAlpZiAoYXRvbWljNjRfcmVhZCgmcmluZy0+ZmVuY2VfZHJ2Lmxhc3Rfc2VxKSA+PSBzZXEpCiAJCXJldHVybiAwOwogCi0JYW1kZ3B1X2ZlbmNlX3NjaGVkdWxlX2NoZWNrKHJpbmcpOworCWFtZGdwdV9mZW5jZV9zY2hlZHVsZV9mYWxsYmFjayhyaW5nKTsKIAl3YWl0X2V2ZW50KHJpbmctPmZlbmNlX2Rydi5mZW5jZV9xdWV1ZSwgKAogCQkgICAoc2lnbmFsZWQgPSBhbWRncHVfZmVuY2Vfc2VxX3NpZ25hbGVkKHJpbmcsIHNlcSkpKSk7CiAKQEAgLTQ5MSw5ICs0ODEsOCBAQAogCWF0b21pYzY0X3NldCgmcmluZy0+ZmVuY2VfZHJ2Lmxhc3Rfc2VxLCAwKTsKIAlyaW5nLT5mZW5jZV9kcnYuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAotCUlOSVRfREVMQVlFRF9XT1JLKCZyaW5nLT5mZW5jZV9kcnYubG9ja3VwX3dvcmssCi0JCQlhbWRncHVfZmVuY2VfY2hlY2tfbG9ja3VwKTsKLQlyaW5nLT5mZW5jZV9kcnYucmluZyA9IHJpbmc7CisJc2V0dXBfdGltZXIoJnJpbmctPmZlbmNlX2Rydi5mYWxsYmFja190aW1lciwgYW1kZ3B1X2ZlbmNlX2ZhbGxiYWNrLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpcmluZyk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyaW5nLT5mZW5jZV9kcnYuZmVuY2VfcXVldWUpOwogCkBAIC01MzYsNiArNTI1LDEzIEBACiAgKi8KIGludCBhbWRncHVfZmVuY2VfZHJpdmVyX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiB7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZhbWRncHVfZmVuY2Vfc2xhYl9yZWYpID09IDEpIHsKKwkJYW1kZ3B1X2ZlbmNlX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgKKwkJCSJhbWRncHVfZmVuY2UiLCBzaXplb2Yoc3RydWN0IGFtZGdwdV9mZW5jZSksIDAsCisJCQlTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCQlpZiAoIWFtZGdwdV9mZW5jZV9zbGFiKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQogCWlmIChhbWRncHVfZGVidWdmc19mZW5jZV9pbml0KGFkZXYpKQogCQlkZXZfZXJyKGFkZXYtPmRldiwgImZlbmNlIGRlYnVnZnMgZmlsZSBjcmVhdGlvbiBmYWlsZWRcbiIpOwogCkBAIC01NTQsOSArNTUwLDEyIEBACiB7CiAJaW50IGksIHI7CiAKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYW1kZ3B1X2ZlbmNlX3NsYWJfcmVmKSkKKwkJa21lbV9jYWNoZV9kZXN0cm95KGFtZGdwdV9mZW5jZV9zbGFiKTsKIAltdXRleF9sb2NrKCZhZGV2LT5yaW5nX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBBTURHUFVfTUFYX1JJTkdTOyBpKyspIHsKIAkJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gYWRldi0+cmluZ3NbaV07CisKIAkJaWYgKCFyaW5nIHx8ICFyaW5nLT5mZW5jZV9kcnYuaW5pdGlhbGl6ZWQpCiAJCQljb250aW51ZTsKIAkJciA9IGFtZGdwdV9mZW5jZV93YWl0X2VtcHR5KHJpbmcpOwpAQCAtNTY4LDYgKzU2Nyw3IEBACiAJCWFtZGdwdV9pcnFfcHV0KGFkZXYsIHJpbmctPmZlbmNlX2Rydi5pcnFfc3JjLAogCQkJICAgICAgIHJpbmctPmZlbmNlX2Rydi5pcnFfdHlwZSk7CiAJCWFtZF9zY2hlZF9maW5pKCZyaW5nLT5zY2hlZCk7CisJCWRlbF90aW1lcl9zeW5jKCZyaW5nLT5mZW5jZV9kcnYuZmFsbGJhY2tfdGltZXIpOwogCQlyaW5nLT5mZW5jZV9kcnYuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhZGV2LT5yaW5nX2xvY2spOwpAQCAtNzUxLDE4ICs3NTEsMjUgQEAKIAlmZW5jZS0+ZmVuY2Vfd2FrZS5mdW5jID0gYW1kZ3B1X2ZlbmNlX2NoZWNrX3NpZ25hbGVkOwogCV9fYWRkX3dhaXRfcXVldWUoJnJpbmctPmZlbmNlX2Rydi5mZW5jZV9xdWV1ZSwgJmZlbmNlLT5mZW5jZV93YWtlKTsKIAlmZW5jZV9nZXQoZik7Ci0JYW1kZ3B1X2ZlbmNlX3NjaGVkdWxlX2NoZWNrKHJpbmcpOworCWlmICghdGltZXJfcGVuZGluZygmcmluZy0+ZmVuY2VfZHJ2LmZhbGxiYWNrX3RpbWVyKSkKKwkJYW1kZ3B1X2ZlbmNlX3NjaGVkdWxlX2ZhbGxiYWNrKHJpbmcpOwogCUZFTkNFX1RSQUNFKCZmZW5jZS0+YmFzZSwgImFybWVkIG9uIHJpbmcgJWkhXG4iLCByaW5nLT5pZHgpOwogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBhbWRncHVfZmVuY2VfcmVsZWFzZShzdHJ1Y3QgZmVuY2UgKmYpCit7CisJc3RydWN0IGFtZGdwdV9mZW5jZSAqZmVuY2UgPSB0b19hbWRncHVfZmVuY2UoZik7CisJa21lbV9jYWNoZV9mcmVlKGFtZGdwdV9mZW5jZV9zbGFiLCBmZW5jZSk7Cit9CisKIGNvbnN0IHN0cnVjdCBmZW5jZV9vcHMgYW1kZ3B1X2ZlbmNlX29wcyA9IHsKIAkuZ2V0X2RyaXZlcl9uYW1lID0gYW1kZ3B1X2ZlbmNlX2dldF9kcml2ZXJfbmFtZSwKIAkuZ2V0X3RpbWVsaW5lX25hbWUgPSBhbWRncHVfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUsCiAJLmVuYWJsZV9zaWduYWxpbmcgPSBhbWRncHVfZmVuY2VfZW5hYmxlX3NpZ25hbGluZywKIAkuc2lnbmFsZWQgPSBhbWRncHVfZmVuY2VfaXNfc2lnbmFsZWQsCiAJLndhaXQgPSBmZW5jZV9kZWZhdWx0X3dhaXQsCi0JLnJlbGVhc2UgPSBOVUxMLAorCS5yZWxlYXNlID0gYW1kZ3B1X2ZlbmNlX3JlbGVhc2UsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jCmluZGV4IDA4NzMzMjguLjljMjUzYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKQEAgLTExNSwxMiArMTE1LDkgQEAKIAlzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSA9ICZmcHJpdi0+dm07CiAJc3RydWN0IGFtZGdwdV9ib192YSAqYm9fdmE7CiAJaW50IHI7Ci0JbXV0ZXhfbG9jaygmdm0tPm11dGV4KTsKIAlyID0gYW1kZ3B1X2JvX3Jlc2VydmUocmJvLCBmYWxzZSk7Ci0JaWYgKHIpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ2bS0+bXV0ZXgpOworCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAKIAlib192YSA9IGFtZGdwdV92bV9ib19maW5kKHZtLCByYm8pOwogCWlmICghYm9fdmEpIHsKQEAgLTEyOSw3ICsxMjYsNiBAQAogCQkrK2JvX3ZhLT5yZWZfY291bnQ7CiAJfQogCWFtZGdwdV9ib191bnJlc2VydmUocmJvKTsKLQltdXRleF91bmxvY2soJnZtLT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MiwxMCArMTM4LDggQEAKIAlzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSA9ICZmcHJpdi0+dm07CiAJc3RydWN0IGFtZGdwdV9ib192YSAqYm9fdmE7CiAJaW50IHI7Ci0JbXV0ZXhfbG9jaygmdm0tPm11dGV4KTsKIAlyID0gYW1kZ3B1X2JvX3Jlc2VydmUocmJvLCB0cnVlKTsKIAlpZiAocikgewotCQltdXRleF91bmxvY2soJnZtLT5tdXRleCk7CiAJCWRldl9lcnIoYWRldi0+ZGV2LCAibGVha2luZyBibyB2YSBiZWNhdXNlICIKIAkJCSJ3ZSBmYWlsIHRvIHJlc2VydmUgYm8gKCVkKVxuIiwgcik7CiAJCXJldHVybjsKQEAgLTE1Nyw3ICsxNTEsNiBAQAogCQl9CiAJfQogCWFtZGdwdV9ib191bnJlc2VydmUocmJvKTsKLQltdXRleF91bmxvY2soJnZtLT5tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgYW1kZ3B1X2dlbV9oYW5kbGVfbG9ja3VwKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBpbnQgcikKQEAgLTI0Miw4ICsyMzUsOSBAQAogCSAgICBBTURHUFVfR0VNX1VTRVJQVFJfUkVHSVNURVIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghKGFyZ3MtPmZsYWdzICYgQU1ER1BVX0dFTV9VU0VSUFRSX0FOT05PTkxZKSB8fAotCQkgICAhKGFyZ3MtPmZsYWdzICYgQU1ER1BVX0dFTV9VU0VSUFRSX1JFR0lTVEVSKSkgeworCWlmICghKGFyZ3MtPmZsYWdzICYgQU1ER1BVX0dFTV9VU0VSUFRSX1JFQURPTkxZKSAmJiAoCisJICAgICAhKGFyZ3MtPmZsYWdzICYgQU1ER1BVX0dFTV9VU0VSUFRSX0FOT05PTkxZKSB8fAorCSAgICAgIShhcmdzLT5mbGFncyAmIEFNREdQVV9HRU1fVVNFUlBUUl9SRUdJU1RFUikpKSB7CiAKIAkJLyogaWYgd2Ugd2FudCB0byB3cml0ZSB0byBpdCB3ZSBtdXN0IHJlcXVpcmUgYW5vbnltb3VzCiAJCSAgIG1lbW9yeSBhbmQgaW5zdGFsbCBhIE1NVSBub3RpZmllciAqLwpAQCAtNDgzLDYgKzQ3NywxNyBAQAogCQlpZiAoZG9tYWluID09IEFNREdQVV9HRU1fRE9NQUlOX0NQVSkKIAkJCWdvdG8gZXJyb3JfdW5yZXNlcnZlOwogCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZHVwbGljYXRlcywgaGVhZCkgeworCQlkb21haW4gPSBhbWRncHVfbWVtX3R5cGVfdG9fZG9tYWluKGVudHJ5LT5iby0+bWVtLm1lbV90eXBlKTsKKwkJLyogaWYgYW55dGhpbmcgaXMgc3dhcHBlZCBvdXQgZG9uJ3Qgc3dhcCBpdCBpbiBoZXJlLAorCQkgICBqdXN0IGFib3J0IGFuZCB3YWl0IGZvciB0aGUgbmV4dCBDUyAqLworCQlpZiAoZG9tYWluID09IEFNREdQVV9HRU1fRE9NQUlOX0NQVSkKKwkJCWdvdG8gZXJyb3JfdW5yZXNlcnZlOworCX0KKworCXIgPSBhbWRncHVfdm1fdXBkYXRlX3BhZ2VfZGlyZWN0b3J5KGFkZXYsIGJvX3ZhLT52bSk7CisJaWYgKHIpCisJCWdvdG8gZXJyb3JfdW5yZXNlcnZlOwogCiAJciA9IGFtZGdwdV92bV9jbGVhcl9mcmVlZChhZGV2LCBib192YS0+dm0pOwogCWlmIChyKQpAQCAtNTEyLDYgKzUxNyw5IEBACiAJc3RydWN0IGFtZGdwdV9mcHJpdiAqZnByaXYgPSBmaWxwLT5kcml2ZXJfcHJpdjsKIAlzdHJ1Y3QgYW1kZ3B1X2JvICpyYm87CiAJc3RydWN0IGFtZGdwdV9ib192YSAqYm9fdmE7CisJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgdHYsIHR2X3BkOworCXN0cnVjdCB3d19hY3F1aXJlX2N0eCB0aWNrZXQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0LCBkdXBsaWNhdGVzOwogCXVpbnQzMl90IGludmFsaWRfZmxhZ3MsIHZhX2ZsYWdzID0gMDsKIAlpbnQgciA9IDA7CiAKQEAgLTU0NywxOSArNTU1LDI4IEBACiAJZ29iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbHAsIGFyZ3MtPmhhbmRsZSk7CiAJaWYgKGdvYmogPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JbXV0ZXhfbG9jaygmZnByaXYtPnZtLm11dGV4KTsKIAlyYm8gPSBnZW1fdG9fYW1kZ3B1X2JvKGdvYmopOwotCXIgPSBhbWRncHVfYm9fcmVzZXJ2ZShyYm8sIGZhbHNlKTsKKwlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmR1cGxpY2F0ZXMpOworCXR2LmJvID0gJnJiby0+dGJvOworCXR2LnNoYXJlZCA9IHRydWU7CisJbGlzdF9hZGQoJnR2LmhlYWQsICZsaXN0KTsKKworCWlmIChhcmdzLT5vcGVyYXRpb24gPT0gQU1ER1BVX1ZBX09QX01BUCkgeworCQl0dl9wZC5ibyA9ICZmcHJpdi0+dm0ucGFnZV9kaXJlY3RvcnktPnRibzsKKwkJdHZfcGQuc2hhcmVkID0gdHJ1ZTsKKwkJbGlzdF9hZGQoJnR2X3BkLmhlYWQsICZsaXN0KTsKKwl9CisJciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnRpY2tldCwgJmxpc3QsIHRydWUsICZkdXBsaWNhdGVzKTsKIAlpZiAocikgewotCQltdXRleF91bmxvY2soJmZwcml2LT52bS5tdXRleCk7CiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOwogCQlyZXR1cm4gcjsKIAl9CiAKIAlib192YSA9IGFtZGdwdV92bV9ib19maW5kKCZmcHJpdi0+dm0sIHJibyk7CiAJaWYgKCFib192YSkgewotCQlhbWRncHVfYm9fdW5yZXNlcnZlKHJibyk7Ci0JCW11dGV4X3VubG9jaygmZnByaXYtPnZtLm11dGV4KTsKKwkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnRpY2tldCwgJmxpc3QpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC01ODEsMTAgKzU5OCwxMCBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQorCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZ0aWNrZXQsICZsaXN0KTsKIAlpZiAoIXIgJiYgIShhcmdzLT5mbGFncyAmIEFNREdQVV9WTV9ERUxBWV9VUERBVEUpKQogCQlhbWRncHVfZ2VtX3ZhX3VwZGF0ZV92bShhZGV2LCBib192YSwgYXJncy0+b3BlcmF0aW9uKTsKLQltdXRleF91bmxvY2soJmZwcml2LT52bS5tdXRleCk7CisKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKIAlyZXR1cm4gcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9pYi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2liLmMKaW5kZXggZTY1OTg3Ny4uOWUyNWVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2liLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2liLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAlpbnQgcjsKIAogCWlmIChzaXplKSB7Ci0JCXIgPSBhbWRncHVfc2FfYm9fbmV3KGFkZXYsICZhZGV2LT5yaW5nX3RtcF9ibywKKwkJciA9IGFtZGdwdV9zYV9ib19uZXcoJmFkZXYtPnJpbmdfdG1wX2JvLAogCQkJCSAgICAgICZpYi0+c2FfYm8sIHNpemUsIDI1Nik7CiAJCWlmIChyKSB7CiAJCQlkZXZfZXJyKGFkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgYSBuZXcgSUIgKCVkKVxuIiwgcik7CkBAIC0yMTYsNyArMjE2LDcgQEAKIAl9CiAKIAlpZiAoaWItPnZtKQotCQlhbWRncHVfdm1fZmVuY2UoYWRldiwgaWItPnZtLCBpYi0+ZmVuY2UpOworCQlhbWRncHVfdm1fZmVuY2UoYWRldiwgaWItPnZtLCAmaWItPmZlbmNlLT5iYXNlKTsKIAogCWFtZGdwdV9yaW5nX3VubG9ja19jb21taXQocmluZyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfa21zLmMKaW5kZXggMTYxOGUyMi4uZTIzODQzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9rbXMuYwpAQCAtNjExLDEzICs2MTEsNTkgQEAKIHUzMiBhbWRncHVfZ2V0X3ZibGFua19jb3VudGVyX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkKIHsKIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHZwb3MsIGhwb3MsIHN0YXQ7CisJdTMyIGNvdW50OwogCiAJaWYgKHBpcGUgPj0gYWRldi0+bW9kZV9pbmZvLm51bV9jcnRjKSB7CiAJCURSTV9FUlJPUigiSW52YWxpZCBjcnRjICV1XG4iLCBwaXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIGFtZGdwdV9kaXNwbGF5X3ZibGFua19nZXRfY291bnRlcihhZGV2LCBwaXBlKTsKKwkvKiBUaGUgaHcgaW5jcmVtZW50cyBpdHMgZnJhbWUgY291bnRlciBhdCBzdGFydCBvZiB2c3luYywgbm90IGF0IHN0YXJ0CisJICogb2YgdmJsYW5rLCBhcyBpcyByZXF1aXJlZCBieSBEUk0gY29yZSB2YmxhbmsgY291bnRlciBoYW5kbGluZy4KKwkgKiBDb29rIHRoZSBodyBjb3VudCBoZXJlIHRvIG1ha2UgaXQgYXBwZWFyIHRvIHRoZSBjYWxsZXIgYXMgaWYgaXQKKwkgKiBpbmNyZW1lbnRlZCBhdCBzdGFydCBvZiB2YmxhbmsuIFdlIG1lYXN1cmUgZGlzdGFuY2UgdG8gc3RhcnQgb2YKKwkgKiB2YmxhbmsgaW4gdnBvcy4gdnBvcyB0aGVyZWZvcmUgd2lsbCBiZSA+PSAwIGJldHdlZW4gc3RhcnQgb2YgdmJsYW5rCisJICogYW5kIHN0YXJ0IG9mIHZzeW5jLCBzbyB2cG9zID49IDAgbWVhbnMgdG8gYnVtcCB0aGUgaHcgZnJhbWUgY291bnRlcgorCSAqIHJlc3VsdCBieSAxIHRvIGdpdmUgdGhlIHByb3BlciBhcHBlYXJhbmNlIHRvIGNhbGxlci4KKwkgKi8KKwlpZiAoYWRldi0+bW9kZV9pbmZvLmNydGNzW3BpcGVdKSB7CisJCS8qIFJlcGVhdCByZWFkb3V0IGlmIG5lZWRlZCB0byBwcm92aWRlIHN0YWJsZSByZXN1bHQgaWYKKwkJICogd2UgY3Jvc3Mgc3RhcnQgb2YgdnN5bmMgZHVyaW5nIHRoZSBxdWVyaWVzLgorCQkgKi8KKwkJZG8geworCQkJY291bnQgPSBhbWRncHVfZGlzcGxheV92YmxhbmtfZ2V0X2NvdW50ZXIoYWRldiwgcGlwZSk7CisJCQkvKiBBc2sgYW1kZ3B1X2dldF9jcnRjX3NjYW5vdXRwb3MgdG8gcmV0dXJuIHZwb3MgYXMKKwkJCSAqIGRpc3RhbmNlIHRvIHN0YXJ0IG9mIHZibGFuaywgaW5zdGVhZCBvZiByZWd1bGFyCisJCQkgKiB2ZXJ0aWNhbCBzY2Fub3V0IHBvcy4KKwkJCSAqLworCQkJc3RhdCA9IGFtZGdwdV9nZXRfY3J0Y19zY2Fub3V0cG9zKAorCQkJCWRldiwgcGlwZSwgR0VUX0RJU1RBTkNFX1RPX1ZCTEFOS1NUQVJULAorCQkJCSZ2cG9zLCAmaHBvcywgTlVMTCwgTlVMTCwKKwkJCQkmYWRldi0+bW9kZV9pbmZvLmNydGNzW3BpcGVdLT5iYXNlLmh3bW9kZSk7CisJCX0gd2hpbGUgKGNvdW50ICE9IGFtZGdwdV9kaXNwbGF5X3ZibGFua19nZXRfY291bnRlcihhZGV2LCBwaXBlKSk7CisKKwkJaWYgKCgoc3RhdCAmIChEUk1fU0NBTk9VVFBPU19WQUxJRCB8IERSTV9TQ0FOT1VUUE9TX0FDQ1VSQVRFKSkgIT0KKwkJICAgIChEUk1fU0NBTk9VVFBPU19WQUxJRCB8IERSTV9TQ0FOT1VUUE9TX0FDQ1VSQVRFKSkpIHsKKwkJCURSTV9ERUJVR19WQkwoIlF1ZXJ5IGZhaWxlZCEgc3RhdCAlZFxuIiwgc3RhdCk7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUdfVkJMKCJjcnRjICVkOiBkaXN0IGZyb20gdmJsYW5rIHN0YXJ0ICVkXG4iLAorCQkJCSAgICAgIHBpcGUsIHZwb3MpOworCisJCQkvKiBCdW1wIGNvdW50ZXIgaWYgd2UgYXJlIGF0ID49IGxlYWRpbmcgZWRnZSBvZiB2YmxhbmssCisJCQkgKiBidXQgYmVmb3JlIHZzeW5jIHdoZXJlIHZwb3Mgd291bGQgdHVybiBuZWdhdGl2ZSBhbmQKKwkJCSAqIHRoZSBodyBjb3VudGVyIHJlYWxseSBpbmNyZW1lbnRzLgorCQkJICovCisJCQlpZiAodnBvcyA+PSAwKQorCQkJCWNvdW50Kys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGYWxsYmFjayB0byB1c2UgdmFsdWUgYXMgaXMuICovCisJCWNvdW50ID0gYW1kZ3B1X2Rpc3BsYXlfdmJsYW5rX2dldF9jb3VudGVyKGFkZXYsIHBpcGUpOworCQlEUk1fREVCVUdfVkJMKCJOVUxMIG1vZGUgaW5mbyEgUmV0dXJuZWQgY291bnQgbWF5IGJlIHdyb25nLlxuIik7CisJfQorCisJcmV0dXJuIGNvdW50OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW9kZS5oCmluZGV4IGI2MmMxNzEuLjA2NGViYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tb2RlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21vZGUuaApAQCAtNDA3LDYgKzQwNyw3IEBACiAJdTMyIGxpbmVfdGltZTsKIAl1MzIgd21fbG93OwogCXUzMiB3bV9oaWdoOworCXUzMiBsYl92YmxhbmtfbGVhZF9saW5lczsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBod19tb2RlOwogfTsKIApAQCAtNTI4LDYgKzUyOSwxMCBAQAogI2RlZmluZSBFTkNPREVSX01PREVfSVNfRFAoZW0pICgoKGVtKSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgfHwgXAogCQkJCSgoZW0pID09IEFUT01fRU5DT0RFUl9NT0RFX0RQX01TVCkpCiAKKy8qIERyaXZlciBpbnRlcm5hbCB1c2Ugb25seSBmbGFncyBvZiBhbWRncHVfZ2V0X2NydGNfc2Nhbm91dHBvcygpICovCisjZGVmaW5lIFVTRV9SRUFMX1ZCTEFOS1NUQVJUIAkJKDEgPDwgMzApCisjZGVmaW5lIEdFVF9ESVNUQU5DRV9UT19WQkxBTktTVEFSVAkoMSA8PCAzMSkKKwogdm9pZCBhbWRncHVfbGlua19lbmNvZGVyX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogc3RydWN0IGRybV9jb25uZWN0b3IgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCmluZGV4IDBkNTI0MzguLmMzY2UxMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKQEAgLTEwMCw2ICsxMDAsNyBAQAogCWxpc3RfZGVsX2luaXQoJmJvLT5saXN0KTsKIAltdXRleF91bmxvY2soJmJvLT5hZGV2LT5nZW0ubXV0ZXgpOwogCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmJvLT5nZW1fYmFzZSk7CisJYW1kZ3B1X2JvX3VucmVmKCZiby0+cGFyZW50KTsKIAlrZnJlZShiby0+bWV0YWRhdGEpOwogCWtmcmVlKGJvKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuaAppbmRleCAzYzJmZjQ1Li5lYTc1NmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5oCkBAIC0xODksMTAgKzE4OSw5IEBACiAJCQkJICAgICAgc3RydWN0IGFtZGdwdV9zYV9tYW5hZ2VyICpzYV9tYW5hZ2VyKTsKIGludCBhbWRncHVfc2FfYm9fbWFuYWdlcl9zdXNwZW5kKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCQkJCQlzdHJ1Y3QgYW1kZ3B1X3NhX21hbmFnZXIgKnNhX21hbmFnZXIpOwotaW50IGFtZGdwdV9zYV9ib19uZXcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCi0JCQkgICAgc3RydWN0IGFtZGdwdV9zYV9tYW5hZ2VyICpzYV9tYW5hZ2VyLAotCQkJICAgIHN0cnVjdCBhbWRncHVfc2FfYm8gKipzYV9ibywKLQkJCSAgICB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBhbGlnbik7CitpbnQgYW1kZ3B1X3NhX2JvX25ldyhzdHJ1Y3QgYW1kZ3B1X3NhX21hbmFnZXIgKnNhX21hbmFnZXIsCisJCSAgICAgc3RydWN0IGFtZGdwdV9zYV9ibyAqKnNhX2JvLAorCQkgICAgIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGFsaWduKTsKIHZvaWQgYW1kZ3B1X3NhX2JvX2ZyZWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJCQkgICAgICBzdHJ1Y3QgYW1kZ3B1X3NhX2JvICoqc2FfYm8sCiAJCQkgICAgICBzdHJ1Y3QgZmVuY2UgKmZlbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9zYS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3NhLmMKaW5kZXggMDIxMmIzMS4uOGI4OGVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3NhLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3NhLmMKQEAgLTMxMSw4ICszMTEsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotaW50IGFtZGdwdV9zYV9ib19uZXcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCi0JCSAgICAgc3RydWN0IGFtZGdwdV9zYV9tYW5hZ2VyICpzYV9tYW5hZ2VyLAoraW50IGFtZGdwdV9zYV9ib19uZXcoc3RydWN0IGFtZGdwdV9zYV9tYW5hZ2VyICpzYV9tYW5hZ2VyLAogCQkgICAgIHN0cnVjdCBhbWRncHVfc2FfYm8gKipzYV9ibywKIAkJICAgICB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBhbGlnbikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9zY2hlZC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3NjaGVkLmMKaW5kZXggZGNmNGE4YS4uNDM4YzA1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3NjaGVkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3NjaGVkLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSAiYW1kZ3B1LmgiCisjaW5jbHVkZSAiYW1kZ3B1X3RyYWNlLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgZmVuY2UgKmFtZGdwdV9zY2hlZF9kZXBlbmRlbmN5KHN0cnVjdCBhbWRfc2NoZWRfam9iICpzY2hlZF9qb2IpCiB7CkBAIC00NCwxMSArNDUsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAJam9iID0gdG9fYW1kZ3B1X2pvYihzY2hlZF9qb2IpOwotCW11dGV4X2xvY2soJmpvYi0+am9iX2xvY2spOwotCXIgPSBhbWRncHVfaWJfc2NoZWR1bGUoam9iLT5hZGV2LAotCQkJICAgICAgIGpvYi0+bnVtX2licywKLQkJCSAgICAgICBqb2ItPmlicywKLQkJCSAgICAgICBqb2ItPmJhc2Uub3duZXIpOworCXRyYWNlX2FtZGdwdV9zY2hlZF9ydW5fam9iKGpvYik7CisJciA9IGFtZGdwdV9pYl9zY2hlZHVsZShqb2ItPmFkZXYsIGpvYi0+bnVtX2licywgam9iLT5pYnMsIGpvYi0+b3duZXIpOwogCWlmIChyKSB7CiAJCURSTV9FUlJPUigiRXJyb3Igc2NoZWR1bGluZyBJQnMgKCVkKVxuIiwgcik7CiAJCWdvdG8gZXJyOwpAQCAtNjEsOCArNTksNiBAQAogCWlmIChqb2ItPmZyZWVfam9iKQogCQlqb2ItPmZyZWVfam9iKGpvYik7CiAKLQltdXRleF91bmxvY2soJmpvYi0+am9iX2xvY2spOwotCWZlbmNlX3B1dCgmam9iLT5iYXNlLnNfZmVuY2UtPmJhc2UpOwogCWtmcmVlKGpvYik7CiAJcmV0dXJuIGZlbmNlID8gJmZlbmNlLT5iYXNlIDogTlVMTDsKIH0KQEAgLTg4LDIxICs4NCwxOSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWpvYi0+YmFzZS5zY2hlZCA9ICZyaW5nLT5zY2hlZDsKIAkJam9iLT5iYXNlLnNfZW50aXR5ID0gJmFkZXYtPmtlcm5lbF9jdHgucmluZ3NbcmluZy0+aWR4XS5lbnRpdHk7CisJCWpvYi0+YmFzZS5zX2ZlbmNlID0gYW1kX3NjaGVkX2ZlbmNlX2NyZWF0ZShqb2ItPmJhc2Uuc19lbnRpdHksIG93bmVyKTsKKwkJaWYgKCFqb2ItPmJhc2Uuc19mZW5jZSkgeworCQkJa2ZyZWUoam9iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCSpmID0gZmVuY2VfZ2V0KCZqb2ItPmJhc2Uuc19mZW5jZS0+YmFzZSk7CisKIAkJam9iLT5hZGV2ID0gYWRldjsKIAkJam9iLT5pYnMgPSBpYnM7CiAJCWpvYi0+bnVtX2licyA9IG51bV9pYnM7Ci0JCWpvYi0+YmFzZS5vd25lciA9IG93bmVyOwotCQltdXRleF9pbml0KCZqb2ItPmpvYl9sb2NrKTsKKwkJam9iLT5vd25lciA9IG93bmVyOwogCQlqb2ItPmZyZWVfam9iID0gZnJlZV9qb2I7Ci0JCW11dGV4X2xvY2soJmpvYi0+am9iX2xvY2spOwotCQlyID0gYW1kX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmam9iLT5iYXNlKTsKLQkJaWYgKHIpIHsKLQkJCW11dGV4X3VubG9jaygmam9iLT5qb2JfbG9jayk7Ci0JCQlrZnJlZShqb2IpOwotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJKmYgPSBmZW5jZV9nZXQoJmpvYi0+YmFzZS5zX2ZlbmNlLT5iYXNlKTsKLQkJbXV0ZXhfdW5sb2NrKCZqb2ItPmpvYl9sb2NrKTsKKwkJYW1kX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmam9iLT5iYXNlKTsKIAl9IGVsc2UgewogCQlyID0gYW1kZ3B1X2liX3NjaGVkdWxlKGFkZXYsIG51bV9pYnMsIGlicywgb3duZXIpOwogCQlpZiAocikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9zZW1hcGhvcmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9zZW1hcGhvcmUuYwppbmRleCBmZjNjYTUyLi4xY2FhZjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfc2VtYXBob3JlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3NlbWFwaG9yZS5jCkBAIC00MCw3ICs0MCw3IEBACiAJaWYgKCpzZW1hcGhvcmUgPT0gTlVMTCkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JciA9IGFtZGdwdV9zYV9ib19uZXcoYWRldiwgJmFkZXYtPnJpbmdfdG1wX2JvLAorCXIgPSBhbWRncHVfc2FfYm9fbmV3KCZhZGV2LT5yaW5nX3RtcF9ibywKIAkJCSAgICAgJigqc2VtYXBob3JlKS0+c2FfYm8sIDgsIDgpOwogCWlmIChyKSB7CiAJCWtmcmVlKCpzZW1hcGhvcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3N5bmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9zeW5jLmMKaW5kZXggYTY2OTdmZC4uZGQwMDVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3N5bmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfc3luYy5jCkBAIC0zMDIsOCArMzAyLDE0IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWlmIChhbWRncHVfZW5hYmxlX3NjaGVkdWxlciB8fCAhYW1kZ3B1X2VuYWJsZV9zZW1hcGhvcmVzIHx8Ci0JCSAgICAoY291bnQgPj0gQU1ER1BVX05VTV9TWU5DUykpIHsKKwkJaWYgKGFtZGdwdV9lbmFibGVfc2NoZWR1bGVyIHx8ICFhbWRncHVfZW5hYmxlX3NlbWFwaG9yZXMpIHsKKwkJCXIgPSBmZW5jZV93YWl0KCZmZW5jZS0+YmFzZSwgdHJ1ZSk7CisJCQlpZiAocikKKwkJCQlyZXR1cm4gcjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNvdW50ID49IEFNREdQVV9OVU1fU1lOQ1MpIHsKIAkJCS8qIG5vdCBlbm91Z2ggcm9vbSwgd2FpdCBtYW51YWxseSAqLwogCQkJciA9IGZlbmNlX3dhaXQoJmZlbmNlLT5iYXNlLCBmYWxzZSk7CiAJCQlpZiAocikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90cmFjZS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3RyYWNlLmgKaW5kZXggNzZlY2JhZi4uOGY5ODM0YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90cmFjZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90cmFjZS5oCkBAIC00OCw2ICs0OCw1NyBAQAogCQkgICAgICBfX2VudHJ5LT5mZW5jZXMpCiApOwogCitUUkFDRV9FVkVOVChhbWRncHVfY3NfaW9jdGwsCisJICAgIFRQX1BST1RPKHN0cnVjdCBhbWRncHVfam9iICpqb2IpLAorCSAgICBUUF9BUkdTKGpvYiksCisJICAgIFRQX1NUUlVDVF9fZW50cnkoCisJCQkgICAgIF9fZmllbGQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiwgYWRldikKKwkJCSAgICAgX19maWVsZChzdHJ1Y3QgYW1kX3NjaGVkX2pvYiAqLCBzY2hlZF9qb2IpCisJCQkgICAgIF9fZmllbGQoc3RydWN0IGFtZGdwdV9pYiAqLCBpYikKKwkJCSAgICAgX19maWVsZChzdHJ1Y3QgZmVuY2UgKiwgZmVuY2UpCisJCQkgICAgIF9fZmllbGQoY2hhciAqLCByaW5nX25hbWUpCisJCQkgICAgIF9fZmllbGQodTMyLCBudW1faWJzKQorCQkJICAgICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkJICAgX19lbnRyeS0+YWRldiA9IGpvYi0+YWRldjsKKwkJCSAgIF9fZW50cnktPnNjaGVkX2pvYiA9ICZqb2ItPmJhc2U7CisJCQkgICBfX2VudHJ5LT5pYiA9IGpvYi0+aWJzOworCQkJICAgX19lbnRyeS0+ZmVuY2UgPSAmam9iLT5iYXNlLnNfZmVuY2UtPmJhc2U7CisJCQkgICBfX2VudHJ5LT5yaW5nX25hbWUgPSBqb2ItPmlic1swXS5yaW5nLT5uYW1lOworCQkJICAgX19lbnRyeS0+bnVtX2licyA9IGpvYi0+bnVtX2liczsKKwkJCSAgICksCisJICAgIFRQX3ByaW50aygiYWRldj0lcCwgc2NoZWRfam9iPSVwLCBmaXJzdCBpYj0lcCwgc2NoZWQgZmVuY2U9JXAsIHJpbmcgbmFtZTolcywgbnVtX2liczoldSIsCisJCSAgICAgIF9fZW50cnktPmFkZXYsIF9fZW50cnktPnNjaGVkX2pvYiwgX19lbnRyeS0+aWIsCisJCSAgICAgIF9fZW50cnktPmZlbmNlLCBfX2VudHJ5LT5yaW5nX25hbWUsIF9fZW50cnktPm51bV9pYnMpCispOworCitUUkFDRV9FVkVOVChhbWRncHVfc2NoZWRfcnVuX2pvYiwKKwkgICAgVFBfUFJPVE8oc3RydWN0IGFtZGdwdV9qb2IgKmpvYiksCisJICAgIFRQX0FSR1Moam9iKSwKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJCSAgICAgX19maWVsZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqLCBhZGV2KQorCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBhbWRfc2NoZWRfam9iICosIHNjaGVkX2pvYikKKwkJCSAgICAgX19maWVsZChzdHJ1Y3QgYW1kZ3B1X2liICosIGliKQorCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBmZW5jZSAqLCBmZW5jZSkKKwkJCSAgICAgX19maWVsZChjaGFyICosIHJpbmdfbmFtZSkKKwkJCSAgICAgX19maWVsZCh1MzIsIG51bV9pYnMpCisJCQkgICAgICksCisKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJCQkgICBfX2VudHJ5LT5hZGV2ID0gam9iLT5hZGV2OworCQkJICAgX19lbnRyeS0+c2NoZWRfam9iID0gJmpvYi0+YmFzZTsKKwkJCSAgIF9fZW50cnktPmliID0gam9iLT5pYnM7CisJCQkgICBfX2VudHJ5LT5mZW5jZSA9ICZqb2ItPmJhc2Uuc19mZW5jZS0+YmFzZTsKKwkJCSAgIF9fZW50cnktPnJpbmdfbmFtZSA9IGpvYi0+aWJzWzBdLnJpbmctPm5hbWU7CisJCQkgICBfX2VudHJ5LT5udW1faWJzID0gam9iLT5udW1faWJzOworCQkJICAgKSwKKwkgICAgVFBfcHJpbnRrKCJhZGV2PSVwLCBzY2hlZF9qb2I9JXAsIGZpcnN0IGliPSVwLCBzY2hlZCBmZW5jZT0lcCwgcmluZyBuYW1lOiVzLCBudW1faWJzOiV1IiwKKwkJICAgICAgX19lbnRyeS0+YWRldiwgX19lbnRyeS0+c2NoZWRfam9iLCBfX2VudHJ5LT5pYiwKKwkJICAgICAgX19lbnRyeS0+ZmVuY2UsIF9fZW50cnktPnJpbmdfbmFtZSwgX19lbnRyeS0+bnVtX2licykKKyk7CisKKwogVFJBQ0VfRVZFTlQoYW1kZ3B1X3ZtX2dyYWJfaWQsCiAJICAgIFRQX1BST1RPKHVuc2lnbmVkIHZtaWQsIGludCByaW5nKSwKIAkgICAgVFBfQVJHUyh2bWlkLCByaW5nKSwKQEAgLTE5Niw0OSArMjQ3LDYgQEAKIAkgICAgVFBfcHJpbnRrKCJsaXN0PSVwLCBibz0lcCIsIF9fZW50cnktPmxpc3QsIF9fZW50cnktPmJvKQogKTsKIAotREVDTEFSRV9FVkVOVF9DTEFTUyhhbWRncHVfZmVuY2VfcmVxdWVzdCwKLQotCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcmluZywgdTMyIHNlcW5vKSwKLQotCSAgICBUUF9BUkdTKGRldiwgcmluZywgc2Vxbm8pLAotCi0JICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCi0JCQkgICAgIF9fZmllbGQoaW50LCByaW5nKQotCQkJICAgICBfX2ZpZWxkKHUzMiwgc2Vxbm8pCi0JCQkgICAgICksCi0KLQkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwotCQkJICAgX19lbnRyeS0+cmluZyA9IHJpbmc7Ci0JCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwotCQkJICAgKSwKLQotCSAgICBUUF9wcmludGsoImRldj0ldSwgcmluZz0lZCwgc2Vxbm89JXUiLAotCQkgICAgICBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnJpbmcsIF9fZW50cnktPnNlcW5vKQotKTsKLQotREVGSU5FX0VWRU5UKGFtZGdwdV9mZW5jZV9yZXF1ZXN0LCBhbWRncHVfZmVuY2VfZW1pdCwKLQotCSAgICBUUF9QUk9UTyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcmluZywgdTMyIHNlcW5vKSwKLQotCSAgICBUUF9BUkdTKGRldiwgcmluZywgc2Vxbm8pCi0pOwotCi1ERUZJTkVfRVZFTlQoYW1kZ3B1X2ZlbmNlX3JlcXVlc3QsIGFtZGdwdV9mZW5jZV93YWl0X2JlZ2luLAotCi0JICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByaW5nLCB1MzIgc2Vxbm8pLAotCi0JICAgIFRQX0FSR1MoZGV2LCByaW5nLCBzZXFubykKLSk7Ci0KLURFRklORV9FVkVOVChhbWRncHVfZmVuY2VfcmVxdWVzdCwgYW1kZ3B1X2ZlbmNlX3dhaXRfZW5kLAotCi0JICAgIFRQX1BST1RPKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByaW5nLCB1MzIgc2Vxbm8pLAotCi0JICAgIFRQX0FSR1MoZGV2LCByaW5nLCBzZXFubykKLSk7Ci0KIERFQ0xBUkVfRVZFTlRfQ0xBU1MoYW1kZ3B1X3NlbWFwaG9yZV9yZXF1ZXN0LAogCiAJICAgIFRQX1BST1RPKGludCByaW5nLCBzdHJ1Y3QgYW1kZ3B1X3NlbWFwaG9yZSAqc2VtKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYwppbmRleCA4MWJiOGU5Li44YTE3NTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jCkBAIC01ODcsOSArNTg3LDEzIEBACiAJdWludDMyX3QgZmxhZ3MgPSBhbWRncHVfdHRtX3R0X3B0ZV9mbGFncyhndHQtPmFkZXYsIHR0bSwgYm9fbWVtKTsKIAlpbnQgcjsKIAotCWlmIChndHQtPnVzZXJwdHIpCi0JCWFtZGdwdV90dG1fdHRfcGluX3VzZXJwdHIodHRtKTsKLQorCWlmIChndHQtPnVzZXJwdHIpIHsKKwkJciA9IGFtZGdwdV90dG1fdHRfcGluX3VzZXJwdHIodHRtKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiB1c2VycHRyXG4iKTsKKwkJCXJldHVybiByOworCQl9CisJfQogCWd0dC0+b2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpKGJvX21lbS0+c3RhcnQgPDwgUEFHRV9TSElGVCk7CiAJaWYgKCF0dG0tPm51bV9wYWdlcykgewogCQlXQVJOKDEsICJub3RoaW5nIHRvIGJpbmQgJWx1IHBhZ2VzIGZvciBtcmVnICVwIGJhY2sgJXAhXG4iLApAQCAtNzk3LDExICs4MDEsMTIgQEAKIAlpZiAobWVtICYmIG1lbS0+bWVtX3R5cGUgIT0gVFRNX1BMX1NZU1RFTSkKIAkJZmxhZ3MgfD0gQU1ER1BVX1BURV9WQUxJRDsKIAotCWlmIChtZW0gJiYgbWVtLT5tZW1fdHlwZSA9PSBUVE1fUExfVFQpCisJaWYgKG1lbSAmJiBtZW0tPm1lbV90eXBlID09IFRUTV9QTF9UVCkgewogCQlmbGFncyB8PSBBTURHUFVfUFRFX1NZU1RFTTsKIAotCWlmICghdHRtIHx8IHR0bS0+Y2FjaGluZ19zdGF0ZSA9PSB0dF9jYWNoZWQpCi0JCWZsYWdzIHw9IEFNREdQVV9QVEVfU05PT1BFRDsKKwkJaWYgKHR0bS0+Y2FjaGluZ19zdGF0ZSA9PSB0dF9jYWNoZWQpCisJCQlmbGFncyB8PSBBTURHUFVfUFRFX1NOT09QRUQ7CisJfQogCiAJaWYgKGFkZXYtPmFzaWNfdHlwZSA+PSBDSElQX1RPUEFaKQogCQlmbGFncyB8PSBBTURHUFVfUFRFX0VYRUNVVEFCTEU7CkBAIC0xMDczLDEwICsxMDc4LDEwIEBACiAJcmV0ID0gZHJtX21tX2R1bXBfdGFibGUobSwgbW0pOwogCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJaWYgKHR0bV9wbCA9PSBUVE1fUExfVlJBTSkKLQkJc2VxX3ByaW50ZihtLCAibWFuIHNpemU6JWxsdSBwYWdlcywgcmFtIHVzYWdlOiVsdU1CLCB2aXMgdXNhZ2U6JWx1TUJcbiIsCisJCXNlcV9wcmludGYobSwgIm1hbiBzaXplOiVsbHUgcGFnZXMsIHJhbSB1c2FnZTolbGx1TUIsIHZpcyB1c2FnZTolbGx1TUJcbiIsCiAJCQkgICBhZGV2LT5tbWFuLmJkZXYubWFuW3R0bV9wbF0uc2l6ZSwKLQkJCSAgIGF0b21pYzY0X3JlYWQoJmFkZXYtPnZyYW1fdXNhZ2UpID4+IDIwLAotCQkJICAgYXRvbWljNjRfcmVhZCgmYWRldi0+dnJhbV92aXNfdXNhZ2UpID4+IDIwKTsKKwkJCSAgICh1NjQpYXRvbWljNjRfcmVhZCgmYWRldi0+dnJhbV91c2FnZSkgPj4gMjAsCisJCQkgICAodTY0KWF0b21pYzY0X3JlYWQoJmFkZXYtPnZyYW1fdmlzX3VzYWdlKSA+PiAyMCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZjZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZjZS5jCmluZGV4IDAzZjBjM2IuLmE3NDVlZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92Y2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdmNlLmMKQEAgLTM5Miw3ICszOTIsMTAgQEAKIAlpYi0+cHRyW2liLT5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDAxOyAvKiBzZXNzaW9uIGNtZCAqLwogCWliLT5wdHJbaWItPmxlbmd0aF9kdysrXSA9IGhhbmRsZTsKIAotCWliLT5wdHJbaWItPmxlbmd0aF9kdysrXSA9IDB4MDAwMDAwMzA7IC8qIGxlbiAqLworCWlmICgocmluZy0+YWRldi0+dmNlLmZ3X3ZlcnNpb24gPj4gMjQpID49IDUyKQorCQlpYi0+cHRyW2liLT5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDQwOyAvKiBsZW4gKi8KKwllbHNlCisJCWliLT5wdHJbaWItPmxlbmd0aF9kdysrXSA9IDB4MDAwMDAwMzA7IC8qIGxlbiAqLwogCWliLT5wdHJbaWItPmxlbmd0aF9kdysrXSA9IDB4MDEwMDAwMDE7IC8qIGNyZWF0ZSBjbWQgKi8KIAlpYi0+cHRyW2liLT5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDAwOwogCWliLT5wdHJbaWItPmxlbmd0aF9kdysrXSA9IDB4MDAwMDAwNDI7CkBAIC00MDQsNiArNDA3LDEyIEBACiAJaWItPnB0cltpYi0+bGVuZ3RoX2R3KytdID0gMHgwMDAwMDEwMDsKIAlpYi0+cHRyW2liLT5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDBjOwogCWliLT5wdHJbaWItPmxlbmd0aF9kdysrXSA9IDB4MDAwMDAwMDA7CisJaWYgKChyaW5nLT5hZGV2LT52Y2UuZndfdmVyc2lvbiA+PiAyNCkgPj0gNTIpIHsKKwkJaWItPnB0cltpYi0+bGVuZ3RoX2R3KytdID0gMHgwMDAwMDAwMDsKKwkJaWItPnB0cltpYi0+bGVuZ3RoX2R3KytdID0gMHgwMDAwMDAwMDsKKwkJaWItPnB0cltpYi0+bGVuZ3RoX2R3KytdID0gMHgwMDAwMDAwMDsKKwkJaWItPnB0cltpYi0+bGVuZ3RoX2R3KytdID0gMHgwMDAwMDAwMDsKKwl9CiAKIAlpYi0+cHRyW2liLT5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDE0OyAvKiBsZW4gKi8KIAlpYi0+cHRyW2liLT5sZW5ndGhfZHcrK10gPSAweDA1MDAwMDA1OyAvKiBmZWVkYmFjayBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKaW5kZXggNjMzYTMyYS4uYjUzZDI3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKQEAgLTE0MywxMCArMTQzLDE1IEBACiAJdW5zaWduZWQgaTsKIAogCS8qIGNoZWNrIGlmIHRoZSBpZCBpcyBzdGlsbCB2YWxpZCAqLwotCWlmICh2bV9pZC0+aWQgJiYgdm1faWQtPmxhc3RfaWRfdXNlICYmCi0JICAgIHZtX2lkLT5sYXN0X2lkX3VzZSA9PSBhZGV2LT52bV9tYW5hZ2VyLmFjdGl2ZVt2bV9pZC0+aWRdKSB7Ci0JCXRyYWNlX2FtZGdwdV92bV9ncmFiX2lkKHZtX2lkLT5pZCwgcmluZy0+aWR4KTsKLQkJcmV0dXJuIDA7CisJaWYgKHZtX2lkLT5pZCkgeworCQl1bnNpZ25lZCBpZCA9IHZtX2lkLT5pZDsKKwkJbG9uZyBvd25lcjsKKworCQlvd25lciA9IGF0b21pY19sb25nX3JlYWQoJmFkZXYtPnZtX21hbmFnZXIuaWRzW2lkXS5vd25lcik7CisJCWlmIChvd25lciA9PSAobG9uZyl2bSkgeworCQkJdHJhY2VfYW1kZ3B1X3ZtX2dyYWJfaWQodm1faWQtPmlkLCByaW5nLT5pZHgpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAkvKiB3ZSBkZWZpbmF0ZWx5IG5lZWQgdG8gZmx1c2ggKi8KQEAgLTE1NCw3ICsxNTksNyBAQAogCiAJLyogc2tpcCBvdmVyIFZNSUQgMCwgc2luY2UgaXQgaXMgdGhlIHN5c3RlbSBWTSAqLwogCWZvciAoaSA9IDE7IGkgPCBhZGV2LT52bV9tYW5hZ2VyLm52bTsgKytpKSB7Ci0JCXN0cnVjdCBmZW5jZSAqZmVuY2UgPSBhZGV2LT52bV9tYW5hZ2VyLmFjdGl2ZVtpXTsKKwkJc3RydWN0IGZlbmNlICpmZW5jZSA9IGFkZXYtPnZtX21hbmFnZXIuaWRzW2ldLmFjdGl2ZTsKIAkJc3RydWN0IGFtZGdwdV9yaW5nICpmcmluZzsKIAogCQlpZiAoZmVuY2UgPT0gTlVMTCkgewpAQCAtMTc2LDcgKzE4MSw3IEBACiAJCWlmIChjaG9pY2VzW2ldKSB7CiAJCQlzdHJ1Y3QgZmVuY2UgKmZlbmNlOwogCi0JCQlmZW5jZSAgPSBhZGV2LT52bV9tYW5hZ2VyLmFjdGl2ZVtjaG9pY2VzW2ldXTsKKwkJCWZlbmNlICA9IGFkZXYtPnZtX21hbmFnZXIuaWRzW2Nob2ljZXNbaV1dLmFjdGl2ZTsKIAkJCXZtX2lkLT5pZCA9IGNob2ljZXNbaV07CiAKIAkJCXRyYWNlX2FtZGdwdV92bV9ncmFiX2lkKGNob2ljZXNbaV0sIHJpbmctPmlkeCk7CkBAIC0yMDcsMjQgKzIxMiwyMSBAQAogCXVpbnQ2NF90IHBkX2FkZHIgPSBhbWRncHVfYm9fZ3B1X29mZnNldCh2bS0+cGFnZV9kaXJlY3RvcnkpOwogCXN0cnVjdCBhbWRncHVfdm1faWQgKnZtX2lkID0gJnZtLT5pZHNbcmluZy0+aWR4XTsKIAlzdHJ1Y3QgZmVuY2UgKmZsdXNoZWRfdXBkYXRlcyA9IHZtX2lkLT5mbHVzaGVkX3VwZGF0ZXM7Ci0JYm9vbCBpc19lYXJsaWVyID0gZmFsc2U7CisJYm9vbCBpc19sYXRlcjsKIAotCWlmIChmbHVzaGVkX3VwZGF0ZXMgJiYgdXBkYXRlcykgewotCQlCVUdfT04oZmx1c2hlZF91cGRhdGVzLT5jb250ZXh0ICE9IHVwZGF0ZXMtPmNvbnRleHQpOwotCQlpc19lYXJsaWVyID0gKHVwZGF0ZXMtPnNlcW5vIC0gZmx1c2hlZF91cGRhdGVzLT5zZXFubyA8PQotCQkJICAgICAgSU5UX01BWCkgPyB0cnVlIDogZmFsc2U7Ci0JfQorCWlmICghZmx1c2hlZF91cGRhdGVzKQorCQlpc19sYXRlciA9IHRydWU7CisJZWxzZSBpZiAoIXVwZGF0ZXMpCisJCWlzX2xhdGVyID0gZmFsc2U7CisJZWxzZQorCQlpc19sYXRlciA9IGZlbmNlX2lzX2xhdGVyKHVwZGF0ZXMsIGZsdXNoZWRfdXBkYXRlcyk7CiAKLQlpZiAocGRfYWRkciAhPSB2bV9pZC0+cGRfZ3B1X2FkZHIgfHwgIWZsdXNoZWRfdXBkYXRlcyB8fAotCSAgICBpc19lYXJsaWVyKSB7Ci0KKwlpZiAocGRfYWRkciAhPSB2bV9pZC0+cGRfZ3B1X2FkZHIgfHwgaXNfbGF0ZXIpIHsKIAkJdHJhY2VfYW1kZ3B1X3ZtX2ZsdXNoKHBkX2FkZHIsIHJpbmctPmlkeCwgdm1faWQtPmlkKTsKLQkJaWYgKGlzX2VhcmxpZXIpIHsKKwkJaWYgKGlzX2xhdGVyKSB7CiAJCQl2bV9pZC0+Zmx1c2hlZF91cGRhdGVzID0gZmVuY2VfZ2V0KHVwZGF0ZXMpOwogCQkJZmVuY2VfcHV0KGZsdXNoZWRfdXBkYXRlcyk7CiAJCX0KLQkJaWYgKCFmbHVzaGVkX3VwZGF0ZXMpCi0JCQl2bV9pZC0+Zmx1c2hlZF91cGRhdGVzID0gZmVuY2VfZ2V0KHVwZGF0ZXMpOwogCQl2bV9pZC0+cGRfZ3B1X2FkZHIgPSBwZF9hZGRyOwogCQlhbWRncHVfcmluZ19lbWl0X3ZtX2ZsdXNoKHJpbmcsIHZtX2lkLT5pZCwgdm1faWQtPnBkX2dwdV9hZGRyKTsKIAl9CkBAIC0yNDQsMTYgKzI0NiwxNCBAQAogICovCiB2b2lkIGFtZGdwdV92bV9mZW5jZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAkJICAgICBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSwKLQkJICAgICBzdHJ1Y3QgYW1kZ3B1X2ZlbmNlICpmZW5jZSkKKwkJICAgICBzdHJ1Y3QgZmVuY2UgKmZlbmNlKQogewotCXVuc2lnbmVkIHJpZHggPSBmZW5jZS0+cmluZy0+aWR4OwotCXVuc2lnbmVkIHZtX2lkID0gdm0tPmlkc1tyaWR4XS5pZDsKKwlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcgPSBhbWRncHVfcmluZ19mcm9tX2ZlbmNlKGZlbmNlKTsKKwl1bnNpZ25lZCB2bV9pZCA9IHZtLT5pZHNbcmluZy0+aWR4XS5pZDsKIAotCWZlbmNlX3B1dChhZGV2LT52bV9tYW5hZ2VyLmFjdGl2ZVt2bV9pZF0pOwotCWFkZXYtPnZtX21hbmFnZXIuYWN0aXZlW3ZtX2lkXSA9IGZlbmNlX2dldCgmZmVuY2UtPmJhc2UpOwotCi0JZmVuY2VfcHV0KHZtLT5pZHNbcmlkeF0ubGFzdF9pZF91c2UpOwotCXZtLT5pZHNbcmlkeF0ubGFzdF9pZF91c2UgPSBmZW5jZV9nZXQoJmZlbmNlLT5iYXNlKTsKKwlmZW5jZV9wdXQoYWRldi0+dm1fbWFuYWdlci5pZHNbdm1faWRdLmFjdGl2ZSk7CisJYWRldi0+dm1fbWFuYWdlci5pZHNbdm1faWRdLmFjdGl2ZSA9IGZlbmNlX2dldChmZW5jZSk7CisJYXRvbWljX2xvbmdfc2V0KCZhZGV2LT52bV9tYW5hZ2VyLmlkc1t2bV9pZF0ub3duZXIsIChsb25nKXZtKTsKIH0KIAogLyoqCkBAIC0zMzIsNiArMzMyLDggQEAKICAqCiAgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVyCiAgKiBAYm86IGJvIHRvIGNsZWFyCisgKgorICogbmVlZCB0byByZXNlcnZlIGJvIGZpcnN0IGJlZm9yZSBjYWxsaW5nIGl0LgogICovCiBzdGF0aWMgaW50IGFtZGdwdV92bV9jbGVhcl9ibyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAkJCSAgICAgIHN0cnVjdCBhbWRncHVfYm8gKmJvKQpAQCAtMzQzLDI0ICszNDUsMjAgQEAKIAl1aW50NjRfdCBhZGRyOwogCWludCByOwogCi0JciA9IGFtZGdwdV9ib19yZXNlcnZlKGJvLCBmYWxzZSk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCiAJciA9IHJlc2VydmF0aW9uX29iamVjdF9yZXNlcnZlX3NoYXJlZChiby0+dGJvLnJlc3YpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCXIgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCB0cnVlLCBmYWxzZSk7CiAJaWYgKHIpCi0JCWdvdG8gZXJyb3JfdW5yZXNlcnZlOworCQlnb3RvIGVycm9yOwogCiAJYWRkciA9IGFtZGdwdV9ib19ncHVfb2Zmc2V0KGJvKTsKIAllbnRyaWVzID0gYW1kZ3B1X2JvX3NpemUoYm8pIC8gODsKIAogCWliID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFtZGdwdV9pYiksIEdGUF9LRVJORUwpOwogCWlmICghaWIpCi0JCWdvdG8gZXJyb3JfdW5yZXNlcnZlOworCQlnb3RvIGVycm9yOwogCiAJciA9IGFtZGdwdV9pYl9nZXQocmluZywgTlVMTCwgZW50cmllcyAqIDIgKyA2NCwgaWIpOwogCWlmIChyKQpAQCAtMzc4LDE2ICszNzYsMTQgQEAKIAlpZiAoIXIpCiAJCWFtZGdwdV9ib19mZW5jZShibywgZmVuY2UsIHRydWUpOwogCWZlbmNlX3B1dChmZW5jZSk7Ci0JaWYgKGFtZGdwdV9lbmFibGVfc2NoZWR1bGVyKSB7Ci0JCWFtZGdwdV9ib191bnJlc2VydmUoYm8pOworCWlmIChhbWRncHVfZW5hYmxlX3NjaGVkdWxlcikKIAkJcmV0dXJuIDA7Ci0JfQorCiBlcnJvcl9mcmVlOgogCWFtZGdwdV9pYl9mcmVlKGFkZXYsIGliKTsKIAlrZnJlZShpYik7CiAKLWVycm9yX3VucmVzZXJ2ZToKLQlhbWRncHVfYm9fdW5yZXNlcnZlKGJvKTsKK2Vycm9yOgogCXJldHVybiByOwogfQogCkBAIC04ODksMTcgKzg4NSwyMSBAQAogCXN0cnVjdCBhbWRncHVfYm9fdmFfbWFwcGluZyAqbWFwcGluZzsKIAlpbnQgcjsKIAorCXNwaW5fbG9jaygmdm0tPmZyZWVkX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmdm0tPmZyZWVkKSkgewogCQltYXBwaW5nID0gbGlzdF9maXJzdF9lbnRyeSgmdm0tPmZyZWVkLAogCQkJc3RydWN0IGFtZGdwdV9ib192YV9tYXBwaW5nLCBsaXN0KTsKIAkJbGlzdF9kZWwoJm1hcHBpbmctPmxpc3QpOwotCisJCXNwaW5fdW5sb2NrKCZ2bS0+ZnJlZWRfbG9jayk7CiAJCXIgPSBhbWRncHVfdm1fYm9fdXBkYXRlX21hcHBpbmcoYWRldiwgdm0sIG1hcHBpbmcsIDAsIDAsIE5VTEwpOwogCQlrZnJlZShtYXBwaW5nKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAorCQlzcGluX2xvY2soJnZtLT5mcmVlZF9sb2NrKTsKIAl9CisJc3Bpbl91bmxvY2soJnZtLT5mcmVlZF9sb2NrKTsKKwogCXJldHVybiAwOwogCiB9CkBAIC05MjYsOCArOTI2LDkgQEAKIAkJYm9fdmEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ2bS0+aW52YWxpZGF0ZWQsCiAJCQlzdHJ1Y3QgYW1kZ3B1X2JvX3ZhLCB2bV9zdGF0dXMpOwogCQlzcGluX3VubG9jaygmdm0tPnN0YXR1c19sb2NrKTsKLQorCQltdXRleF9sb2NrKCZib192YS0+bXV0ZXgpOwogCQlyID0gYW1kZ3B1X3ZtX2JvX3VwZGF0ZShhZGV2LCBib192YSwgTlVMTCk7CisJCW11dGV4X3VubG9jaygmYm9fdmEtPm11dGV4KTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIApAQCAtOTcxLDcgKzk3Miw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmJvX3ZhLT52YWxpZHMpOwogCUlOSVRfTElTVF9IRUFEKCZib192YS0+aW52YWxpZHMpOwogCUlOSVRfTElTVF9IRUFEKCZib192YS0+dm1fc3RhdHVzKTsKLQorCW11dGV4X2luaXQoJmJvX3ZhLT5tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmYm9fdmEtPmJvX2xpc3QsICZiby0+dmEpOwogCiAJcmV0dXJuIGJvX3ZhOwpAQCAtOTg5LDcgKzk5MCw3IEBACiAgKiBBZGQgYSBtYXBwaW5nIG9mIHRoZSBCTyBhdCB0aGUgc3BlY2VmaWVkIGFkZHIgaW50byB0aGUgVk0uCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIGVycm9yIGZvciBmYWlsdXJlLgogICoKLSAqIE9iamVjdCBoYXMgdG8gYmUgcmVzZXJ2ZWQgYW5kIGdldHMgdW5yZXNlcnZlZCBieSB0aGlzIGZ1bmN0aW9uIQorICogT2JqZWN0IGhhcyB0byBiZSByZXNlcnZlZCBhbmQgdW5yZXNlcnZlZCBvdXRzaWRlIQogICovCiBpbnQgYW1kZ3B1X3ZtX2JvX21hcChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAkJICAgICBzdHJ1Y3QgYW1kZ3B1X2JvX3ZhICpib192YSwKQEAgLTEwMDUsMzAgKzEwMDYsMjcgQEAKIAogCS8qIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzICovCiAJaWYgKHNhZGRyICYgQU1ER1BVX0dQVV9QQUdFX01BU0sgfHwgb2Zmc2V0ICYgQU1ER1BVX0dQVV9QQUdFX01BU0sgfHwKLQkgICAgc2l6ZSA9PSAwIHx8IHNpemUgJiBBTURHUFVfR1BVX1BBR0VfTUFTSykgewotCQlhbWRncHVfYm9fdW5yZXNlcnZlKGJvX3ZhLT5ibyk7CisJICAgIHNpemUgPT0gMCB8fCBzaXplICYgQU1ER1BVX0dQVV9QQUdFX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCS8qIG1ha2Ugc3VyZSBvYmplY3QgZml0IGF0IHRoaXMgb2Zmc2V0ICovCiAJZWFkZHIgPSBzYWRkciArIHNpemU7Ci0JaWYgKChzYWRkciA+PSBlYWRkcikgfHwgKG9mZnNldCArIHNpemUgPiBhbWRncHVfYm9fc2l6ZShib192YS0+Ym8pKSkgewotCQlhbWRncHVfYm9fdW5yZXNlcnZlKGJvX3ZhLT5ibyk7CisJaWYgKChzYWRkciA+PSBlYWRkcikgfHwgKG9mZnNldCArIHNpemUgPiBhbWRncHVfYm9fc2l6ZShib192YS0+Ym8pKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJbGFzdF9wZm4gPSBlYWRkciAvIEFNREdQVV9HUFVfUEFHRV9TSVpFOwogCWlmIChsYXN0X3BmbiA+IGFkZXYtPnZtX21hbmFnZXIubWF4X3BmbikgewogCQlkZXZfZXJyKGFkZXYtPmRldiwgInZhIGFib3ZlIGxpbWl0ICgweCUwOFggPiAweCUwOFgpXG4iLAogCQkJbGFzdF9wZm4sIGFkZXYtPnZtX21hbmFnZXIubWF4X3Bmbik7Ci0JCWFtZGdwdV9ib191bnJlc2VydmUoYm9fdmEtPmJvKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJc2FkZHIgLz0gQU1ER1BVX0dQVV9QQUdFX1NJWkU7CiAJZWFkZHIgLz0gQU1ER1BVX0dQVV9QQUdFX1NJWkU7CiAKKwlzcGluX2xvY2soJnZtLT5pdF9sb2NrKTsKIAlpdCA9IGludGVydmFsX3RyZWVfaXRlcl9maXJzdCgmdm0tPnZhLCBzYWRkciwgZWFkZHIgLSAxKTsKKwlzcGluX3VubG9jaygmdm0tPml0X2xvY2spOwogCWlmIChpdCkgewogCQlzdHJ1Y3QgYW1kZ3B1X2JvX3ZhX21hcHBpbmcgKnRtcDsKIAkJdG1wID0gY29udGFpbmVyX29mKGl0LCBzdHJ1Y3QgYW1kZ3B1X2JvX3ZhX21hcHBpbmcsIGl0KTsKQEAgLTEwMzYsMTQgKzEwMzQsMTIgQEAKIAkJZGV2X2VycihhZGV2LT5kZXYsICJibyAlcCB2YSAweCUwMTBMeC0weCUwMTBMeCBjb25mbGljdCB3aXRoICIKIAkJCSIweCUwMTBseC0weCUwMTBseFxuIiwgYm9fdmEtPmJvLCBzYWRkciwgZWFkZHIsCiAJCQl0bXAtPml0LnN0YXJ0LCB0bXAtPml0Lmxhc3QgKyAxKTsKLQkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShib192YS0+Ym8pOwogCQlyID0gLUVJTlZBTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAltYXBwaW5nID0ga21hbGxvYyhzaXplb2YoKm1hcHBpbmcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1hcHBpbmcpIHsKLQkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShib192YS0+Ym8pOwogCQlyID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0xMDU0LDggKzEwNTAsMTIgQEAKIAltYXBwaW5nLT5vZmZzZXQgPSBvZmZzZXQ7CiAJbWFwcGluZy0+ZmxhZ3MgPSBmbGFnczsKIAorCW11dGV4X2xvY2soJmJvX3ZhLT5tdXRleCk7CiAJbGlzdF9hZGQoJm1hcHBpbmctPmxpc3QsICZib192YS0+aW52YWxpZHMpOworCW11dGV4X3VubG9jaygmYm9fdmEtPm11dGV4KTsKKwlzcGluX2xvY2soJnZtLT5pdF9sb2NrKTsKIAlpbnRlcnZhbF90cmVlX2luc2VydCgmbWFwcGluZy0+aXQsICZ2bS0+dmEpOworCXNwaW5fdW5sb2NrKCZ2bS0+aXRfbG9jayk7CiAJdHJhY2VfYW1kZ3B1X3ZtX2JvX21hcChib192YSwgbWFwcGluZyk7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIHBhZ2UgdGFibGVzIGFyZSBhbGxvY2F0ZWQgKi8KQEAgLTEwNjcsOCArMTA2Nyw2IEBACiAJaWYgKGVhZGRyID4gdm0tPm1heF9wZGVfdXNlZCkKIAkJdm0tPm1heF9wZGVfdXNlZCA9IGVhZGRyOwogCi0JYW1kZ3B1X2JvX3VucmVzZXJ2ZShib192YS0+Ym8pOwotCiAJLyogd2FsayBvdmVyIHRoZSBhZGRyZXNzIHNwYWNlIGFuZCBhbGxvY2F0ZSB0aGUgcGFnZSB0YWJsZXMgKi8KIAlmb3IgKHB0X2lkeCA9IHNhZGRyOyBwdF9pZHggPD0gZWFkZHI7ICsrcHRfaWR4KSB7CiAJCXN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnJlc3YgPSB2bS0+cGFnZV9kaXJlY3RvcnktPnRiby5yZXN2OwpAQCAtMTA3NywxNiArMTA3NSwxOSBAQAogCQlpZiAodm0tPnBhZ2VfdGFibGVzW3B0X2lkeF0uYm8pCiAJCQljb250aW51ZTsKIAotCQl3d19tdXRleF9sb2NrKCZyZXN2LT5sb2NrLCBOVUxMKTsKIAkJciA9IGFtZGdwdV9ib19jcmVhdGUoYWRldiwgQU1ER1BVX1ZNX1BURV9DT1VOVCAqIDgsCiAJCQkJICAgICBBTURHUFVfR1BVX1BBR0VfU0laRSwgdHJ1ZSwKIAkJCQkgICAgIEFNREdQVV9HRU1fRE9NQUlOX1ZSQU0sCiAJCQkJICAgICBBTURHUFVfR0VNX0NSRUFURV9OT19DUFVfQUNDRVNTLAogCQkJCSAgICAgTlVMTCwgcmVzdiwgJnB0KTsKLQkJd3dfbXV0ZXhfdW5sb2NrKCZyZXN2LT5sb2NrKTsKIAkJaWYgKHIpCiAJCQlnb3RvIGVycm9yX2ZyZWU7CiAKKwkJLyogS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgcGFnZSB0YWJsZSB0byBhdm9pZCBmcmVlaW5nCisJCSAqIHRoZW0gdXAgaW4gdGhlIHdyb25nIG9yZGVyLgorCQkgKi8KKwkJcHQtPnBhcmVudCA9IGFtZGdwdV9ib19yZWYodm0tPnBhZ2VfZGlyZWN0b3J5KTsKKwogCQlyID0gYW1kZ3B1X3ZtX2NsZWFyX2JvKGFkZXYsIHB0KTsKIAkJaWYgKHIpIHsKIAkJCWFtZGdwdV9ib191bnJlZigmcHQpOwpAQCAtMTEwMSw3ICsxMTAyLDkgQEAKIAogZXJyb3JfZnJlZToKIAlsaXN0X2RlbCgmbWFwcGluZy0+bGlzdCk7CisJc3Bpbl9sb2NrKCZ2bS0+aXRfbG9jayk7CiAJaW50ZXJ2YWxfdHJlZV9yZW1vdmUoJm1hcHBpbmctPml0LCAmdm0tPnZhKTsKKwlzcGluX3VubG9jaygmdm0tPml0X2xvY2spOwogCXRyYWNlX2FtZGdwdV92bV9ib191bm1hcChib192YSwgbWFwcGluZyk7CiAJa2ZyZWUobWFwcGluZyk7CiAKQEAgLTExMTksNyArMTEyMiw3IEBACiAgKiBSZW1vdmUgYSBtYXBwaW5nIG9mIHRoZSBCTyBhdCB0aGUgc3BlY2VmaWVkIGFkZHIgZnJvbSB0aGUgVk0uCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIGVycm9yIGZvciBmYWlsdXJlLgogICoKLSAqIE9iamVjdCBoYXMgdG8gYmUgcmVzZXJ2ZWQgYW5kIGdldHMgdW5yZXNlcnZlZCBieSB0aGlzIGZ1bmN0aW9uIQorICogT2JqZWN0IGhhcyB0byBiZSByZXNlcnZlZCBhbmQgdW5yZXNlcnZlZCBvdXRzaWRlIQogICovCiBpbnQgYW1kZ3B1X3ZtX2JvX3VubWFwKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCQkgICAgICAgc3RydWN0IGFtZGdwdV9ib192YSAqYm9fdmEsCkBAIC0xMTMwLDcgKzExMzMsNyBAQAogCWJvb2wgdmFsaWQgPSB0cnVlOwogCiAJc2FkZHIgLz0gQU1ER1BVX0dQVV9QQUdFX1NJWkU7Ci0KKwltdXRleF9sb2NrKCZib192YS0+bXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWFwcGluZywgJmJvX3ZhLT52YWxpZHMsIGxpc3QpIHsKIAkJaWYgKG1hcHBpbmctPml0LnN0YXJ0ID09IHNhZGRyKQogCQkJYnJlYWs7CkBAIC0xMTQ1LDIwICsxMTQ4LDI0IEBACiAJCX0KIAogCQlpZiAoJm1hcHBpbmctPmxpc3QgPT0gJmJvX3ZhLT5pbnZhbGlkcykgewotCQkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShib192YS0+Ym8pOworCQkJbXV0ZXhfdW5sb2NrKCZib192YS0+bXV0ZXgpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAl9Ci0KKwltdXRleF91bmxvY2soJmJvX3ZhLT5tdXRleCk7CiAJbGlzdF9kZWwoJm1hcHBpbmctPmxpc3QpOworCXNwaW5fbG9jaygmdm0tPml0X2xvY2spOwogCWludGVydmFsX3RyZWVfcmVtb3ZlKCZtYXBwaW5nLT5pdCwgJnZtLT52YSk7CisJc3Bpbl91bmxvY2soJnZtLT5pdF9sb2NrKTsKIAl0cmFjZV9hbWRncHVfdm1fYm9fdW5tYXAoYm9fdmEsIG1hcHBpbmcpOwogCi0JaWYgKHZhbGlkKQorCWlmICh2YWxpZCkgeworCQlzcGluX2xvY2soJnZtLT5mcmVlZF9sb2NrKTsKIAkJbGlzdF9hZGQoJm1hcHBpbmctPmxpc3QsICZ2bS0+ZnJlZWQpOwotCWVsc2UKKwkJc3Bpbl91bmxvY2soJnZtLT5mcmVlZF9sb2NrKTsKKwl9IGVsc2UgewogCQlrZnJlZShtYXBwaW5nKTsKLQlhbWRncHVfYm9fdW5yZXNlcnZlKGJvX3ZhLT5ibyk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg3LDE3ICsxMTk0LDIzIEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWFwcGluZywgbmV4dCwgJmJvX3ZhLT52YWxpZHMsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJm1hcHBpbmctPmxpc3QpOworCQlzcGluX2xvY2soJnZtLT5pdF9sb2NrKTsKIAkJaW50ZXJ2YWxfdHJlZV9yZW1vdmUoJm1hcHBpbmctPml0LCAmdm0tPnZhKTsKKwkJc3Bpbl91bmxvY2soJnZtLT5pdF9sb2NrKTsKIAkJdHJhY2VfYW1kZ3B1X3ZtX2JvX3VubWFwKGJvX3ZhLCBtYXBwaW5nKTsKKwkJc3Bpbl9sb2NrKCZ2bS0+ZnJlZWRfbG9jayk7CiAJCWxpc3RfYWRkKCZtYXBwaW5nLT5saXN0LCAmdm0tPmZyZWVkKTsKKwkJc3Bpbl91bmxvY2soJnZtLT5mcmVlZF9sb2NrKTsKIAl9CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcHBpbmcsIG5leHQsICZib192YS0+aW52YWxpZHMsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJm1hcHBpbmctPmxpc3QpOworCQlzcGluX2xvY2soJnZtLT5pdF9sb2NrKTsKIAkJaW50ZXJ2YWxfdHJlZV9yZW1vdmUoJm1hcHBpbmctPml0LCAmdm0tPnZhKTsKKwkJc3Bpbl91bmxvY2soJnZtLT5pdF9sb2NrKTsKIAkJa2ZyZWUobWFwcGluZyk7CiAJfQotCiAJZmVuY2VfcHV0KGJvX3ZhLT5sYXN0X3B0X3VwZGF0ZSk7CisJbXV0ZXhfZGVzdHJveSgmYm9fdmEtPm11dGV4KTsKIAlrZnJlZShib192YSk7CiB9CiAKQEAgLTEyNDEsMTUgKzEyNTQsMTQgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQU1ER1BVX01BWF9SSU5HUzsgKytpKSB7CiAJCXZtLT5pZHNbaV0uaWQgPSAwOwogCQl2bS0+aWRzW2ldLmZsdXNoZWRfdXBkYXRlcyA9IE5VTEw7Ci0JCXZtLT5pZHNbaV0ubGFzdF9pZF91c2UgPSBOVUxMOwogCX0KLQltdXRleF9pbml0KCZ2bS0+bXV0ZXgpOwogCXZtLT52YSA9IFJCX1JPT1Q7CiAJc3Bpbl9sb2NrX2luaXQoJnZtLT5zdGF0dXNfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnZtLT5pbnZhbGlkYXRlZCk7CiAJSU5JVF9MSVNUX0hFQUQoJnZtLT5jbGVhcmVkKTsKIAlJTklUX0xJU1RfSEVBRCgmdm0tPmZyZWVkKTsKLQorCXNwaW5fbG9ja19pbml0KCZ2bS0+aXRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnZtLT5mcmVlZF9sb2NrKTsKIAlwZF9zaXplID0gYW1kZ3B1X3ZtX2RpcmVjdG9yeV9zaXplKGFkZXYpOwogCXBkX2VudHJpZXMgPSBhbWRncHVfdm1fbnVtX3BkZXMoYWRldik7CiAKQEAgLTEyNjksOCArMTI4MSwxNCBAQAogCQkJICAgICBOVUxMLCBOVUxMLCAmdm0tPnBhZ2VfZGlyZWN0b3J5KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7Ci0KKwlyID0gYW1kZ3B1X2JvX3Jlc2VydmUodm0tPnBhZ2VfZGlyZWN0b3J5LCBmYWxzZSk7CisJaWYgKHIpIHsKKwkJYW1kZ3B1X2JvX3VucmVmKCZ2bS0+cGFnZV9kaXJlY3RvcnkpOworCQl2bS0+cGFnZV9kaXJlY3RvcnkgPSBOVUxMOworCQlyZXR1cm4gcjsKKwl9CiAJciA9IGFtZGdwdV92bV9jbGVhcl9ibyhhZGV2LCB2bS0+cGFnZV9kaXJlY3RvcnkpOworCWFtZGdwdV9ib191bnJlc2VydmUodm0tPnBhZ2VfZGlyZWN0b3J5KTsKIAlpZiAocikgewogCQlhbWRncHVfYm9fdW5yZWYoJnZtLT5wYWdlX2RpcmVjdG9yeSk7CiAJCXZtLT5wYWdlX2RpcmVjdG9yeSA9IE5VTEw7CkBAIC0xMzEzLDExICsxMzMxLDI3IEBACiAKIAlhbWRncHVfYm9fdW5yZWYoJnZtLT5wYWdlX2RpcmVjdG9yeSk7CiAJZmVuY2VfcHV0KHZtLT5wYWdlX2RpcmVjdG9yeV9mZW5jZSk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgQU1ER1BVX01BWF9SSU5HUzsgKytpKSB7CisJCXVuc2lnbmVkIGlkID0gdm0tPmlkc1tpXS5pZDsKKworCQlhdG9taWNfbG9uZ19jbXB4Y2hnKCZhZGV2LT52bV9tYW5hZ2VyLmlkc1tpZF0ub3duZXIsCisJCQkJICAgIChsb25nKXZtLCAwKTsKIAkJZmVuY2VfcHV0KHZtLT5pZHNbaV0uZmx1c2hlZF91cGRhdGVzKTsKLQkJZmVuY2VfcHV0KHZtLT5pZHNbaV0ubGFzdF9pZF91c2UpOwogCX0KIAotCW11dGV4X2Rlc3Ryb3koJnZtLT5tdXRleCk7Cit9CisKKy8qKgorICogYW1kZ3B1X3ZtX21hbmFnZXJfZmluaSAtIGNsZWFudXAgVk0gbWFuYWdlcgorICoKKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBDbGVhbnVwIHRoZSBWTSBtYW5hZ2VyIGFuZCBmcmVlIHJlc291cmNlcy4KKyAqLwordm9pZCBhbWRncHVfdm1fbWFuYWdlcl9maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQoreworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQU1ER1BVX05VTV9WTTsgKytpKQorCQlmZW5jZV9wdXQoYWRldi0+dm1fbWFuYWdlci5pZHNbaV0uYWN0aXZlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2NpX2RwbS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lfZHBtLmMKaW5kZXggYTFhMzVhNS4uNTdhMmUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lfZHBtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvY2lfZHBtLmMKQEAgLTY1NjksMTIgKzY1NjksMTIgQEAKIAkJc3dpdGNoIChzdGF0ZSkgewogCQljYXNlIEFNREdQVV9JUlFfU1RBVEVfRElTQUJMRToKIAkJCWNnX3RoZXJtYWxfaW50ID0gUlJFRzMyX1NNQyhpeENHX1RIRVJNQUxfSU5UKTsKLQkJCWNnX3RoZXJtYWxfaW50ICY9IH5DR19USEVSTUFMX0lOVF9DVFJMX19USEVSTV9JTlRIX01BU0tfTUFTSzsKKwkJCWNnX3RoZXJtYWxfaW50IHw9IENHX1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVEhfTUFTS19NQVNLOwogCQkJV1JFRzMyX1NNQyhpeENHX1RIRVJNQUxfSU5ULCBjZ190aGVybWFsX2ludCk7CiAJCQlicmVhazsKIAkJY2FzZSBBTURHUFVfSVJRX1NUQVRFX0VOQUJMRToKIAkJCWNnX3RoZXJtYWxfaW50ID0gUlJFRzMyX1NNQyhpeENHX1RIRVJNQUxfSU5UKTsKLQkJCWNnX3RoZXJtYWxfaW50IHw9IENHX1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVEhfTUFTS19NQVNLOworCQkJY2dfdGhlcm1hbF9pbnQgJj0gfkNHX1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVEhfTUFTS19NQVNLOwogCQkJV1JFRzMyX1NNQyhpeENHX1RIRVJNQUxfSU5ULCBjZ190aGVybWFsX2ludCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTY1ODYsMTIgKzY1ODYsMTIgQEAKIAkJc3dpdGNoIChzdGF0ZSkgewogCQljYXNlIEFNREdQVV9JUlFfU1RBVEVfRElTQUJMRToKIAkJCWNnX3RoZXJtYWxfaW50ID0gUlJFRzMyX1NNQyhpeENHX1RIRVJNQUxfSU5UKTsKLQkJCWNnX3RoZXJtYWxfaW50ICY9IH5DR19USEVSTUFMX0lOVF9DVFJMX19USEVSTV9JTlRMX01BU0tfTUFTSzsKKwkJCWNnX3RoZXJtYWxfaW50IHw9IENHX1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVExfTUFTS19NQVNLOwogCQkJV1JFRzMyX1NNQyhpeENHX1RIRVJNQUxfSU5ULCBjZ190aGVybWFsX2ludCk7CiAJCQlicmVhazsKIAkJY2FzZSBBTURHUFVfSVJRX1NUQVRFX0VOQUJMRToKIAkJCWNnX3RoZXJtYWxfaW50ID0gUlJFRzMyX1NNQyhpeENHX1RIRVJNQUxfSU5UKTsKLQkJCWNnX3RoZXJtYWxfaW50IHw9IENHX1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVExfTUFTS19NQVNLOworCQkJY2dfdGhlcm1hbF9pbnQgJj0gfkNHX1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVExfTUFTS19NQVNLOwogCQkJV1JFRzMyX1NNQyhpeENHX1RIRVJNQUxfSU5ULCBjZ190aGVybWFsX2ludCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92MTBfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3YxMF8wLmMKaW5kZXggY2IwZjc3NC4uNGRjYzhmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3YxMF8wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3YxMF8wLmMKQEAgLTEyNTAsNyArMTI1MCw3IEBACiAJdTMyIHBpeGVsX3BlcmlvZDsKIAl1MzIgbGluZV90aW1lID0gMDsKIAl1MzIgbGF0ZW5jeV93YXRlcm1hcmtfYSA9IDAsIGxhdGVuY3lfd2F0ZXJtYXJrX2IgPSAwOwotCXUzMiB0bXAsIHdtX21hc2s7CisJdTMyIHRtcCwgd21fbWFzaywgbGJfdmJsYW5rX2xlYWRfbGluZXMgPSAwOwogCiAJaWYgKGFtZGdwdV9jcnRjLT5iYXNlLmVuYWJsZWQgJiYgbnVtX2hlYWRzICYmIG1vZGUpIHsKIAkJcGl4ZWxfcGVyaW9kID0gMTAwMDAwMCAvICh1MzIpbW9kZS0+Y2xvY2s7CkBAIC0xMzMzLDYgKzEzMzMsNyBAQAogCQkgICAgKGFkZXYtPm1vZGVfaW5mby5kaXNwX3ByaW9yaXR5ID09IDIpKSB7CiAJCQlEUk1fREVCVUdfS01TKCJmb3JjZSBwcmlvcml0eSB0byBoaWdoXG4iKTsKIAkJfQorCQlsYl92YmxhbmtfbGVhZF9saW5lcyA9IERJVl9ST1VORF9VUChsYl9zaXplLCBtb2RlLT5jcnRjX2hkaXNwbGF5KTsKIAl9CiAKIAkvKiBzZWxlY3Qgd20gQSAqLwpAQCAtMTM1Nyw2ICsxMzU4LDggQEAKIAlhbWRncHVfY3J0Yy0+bGluZV90aW1lID0gbGluZV90aW1lOwogCWFtZGdwdV9jcnRjLT53bV9oaWdoID0gbGF0ZW5jeV93YXRlcm1hcmtfYTsKIAlhbWRncHVfY3J0Yy0+d21fbG93ID0gbGF0ZW5jeV93YXRlcm1hcmtfYjsKKwkvKiBTYXZlIG51bWJlciBvZiBsaW5lcyB0aGUgbGluZWJ1ZmZlciBsZWFkcyBiZWZvcmUgdGhlIHNjYW5vdXQgKi8KKwlhbWRncHVfY3J0Yy0+bGJfdmJsYW5rX2xlYWRfbGluZXMgPSBsYl92YmxhbmtfbGVhZF9saW5lczsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9kY2VfdjExXzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92MTFfMC5jCmluZGV4IDVhZjM3MjEuLjhmMWU1MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92MTFfMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92MTFfMC5jCkBAIC0xMjM4LDcgKzEyMzgsNyBAQAogCXUzMiBwaXhlbF9wZXJpb2Q7CiAJdTMyIGxpbmVfdGltZSA9IDA7CiAJdTMyIGxhdGVuY3lfd2F0ZXJtYXJrX2EgPSAwLCBsYXRlbmN5X3dhdGVybWFya19iID0gMDsKLQl1MzIgdG1wLCB3bV9tYXNrOworCXUzMiB0bXAsIHdtX21hc2ssIGxiX3ZibGFua19sZWFkX2xpbmVzID0gMDsKIAogCWlmIChhbWRncHVfY3J0Yy0+YmFzZS5lbmFibGVkICYmIG51bV9oZWFkcyAmJiBtb2RlKSB7CiAJCXBpeGVsX3BlcmlvZCA9IDEwMDAwMDAgLyAodTMyKW1vZGUtPmNsb2NrOwpAQCAtMTMyMSw2ICsxMzIxLDcgQEAKIAkJICAgIChhZGV2LT5tb2RlX2luZm8uZGlzcF9wcmlvcml0eSA9PSAyKSkgewogCQkJRFJNX0RFQlVHX0tNUygiZm9yY2UgcHJpb3JpdHkgdG8gaGlnaFxuIik7CiAJCX0KKwkJbGJfdmJsYW5rX2xlYWRfbGluZXMgPSBESVZfUk9VTkRfVVAobGJfc2l6ZSwgbW9kZS0+Y3J0Y19oZGlzcGxheSk7CiAJfQogCiAJLyogc2VsZWN0IHdtIEEgKi8KQEAgLTEzNDUsNiArMTM0Niw4IEBACiAJYW1kZ3B1X2NydGMtPmxpbmVfdGltZSA9IGxpbmVfdGltZTsKIAlhbWRncHVfY3J0Yy0+d21faGlnaCA9IGxhdGVuY3lfd2F0ZXJtYXJrX2E7CiAJYW1kZ3B1X2NydGMtPndtX2xvdyA9IGxhdGVuY3lfd2F0ZXJtYXJrX2I7CisJLyogU2F2ZSBudW1iZXIgb2YgbGluZXMgdGhlIGxpbmVidWZmZXIgbGVhZHMgYmVmb3JlIHRoZSBzY2Fub3V0ICovCisJYW1kZ3B1X2NydGMtPmxiX3ZibGFua19sZWFkX2xpbmVzID0gbGJfdmJsYW5rX2xlYWRfbGluZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3Y4XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2RjZV92OF8wLmMKaW5kZXggNGY3YjQ5YS4uNDJkOTU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3Y4XzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9kY2VfdjhfMC5jCkBAIC0xMTkzLDcgKzExOTMsNyBAQAogCXUzMiBwaXhlbF9wZXJpb2Q7CiAJdTMyIGxpbmVfdGltZSA9IDA7CiAJdTMyIGxhdGVuY3lfd2F0ZXJtYXJrX2EgPSAwLCBsYXRlbmN5X3dhdGVybWFya19iID0gMDsKLQl1MzIgdG1wLCB3bV9tYXNrOworCXUzMiB0bXAsIHdtX21hc2ssIGxiX3ZibGFua19sZWFkX2xpbmVzID0gMDsKIAogCWlmIChhbWRncHVfY3J0Yy0+YmFzZS5lbmFibGVkICYmIG51bV9oZWFkcyAmJiBtb2RlKSB7CiAJCXBpeGVsX3BlcmlvZCA9IDEwMDAwMDAgLyAodTMyKW1vZGUtPmNsb2NrOwpAQCAtMTI3Niw2ICsxMjc2LDcgQEAKIAkJICAgIChhZGV2LT5tb2RlX2luZm8uZGlzcF9wcmlvcml0eSA9PSAyKSkgewogCQkJRFJNX0RFQlVHX0tNUygiZm9yY2UgcHJpb3JpdHkgdG8gaGlnaFxuIik7CiAJCX0KKwkJbGJfdmJsYW5rX2xlYWRfbGluZXMgPSBESVZfUk9VTkRfVVAobGJfc2l6ZSwgbW9kZS0+Y3J0Y19oZGlzcGxheSk7CiAJfQogCiAJLyogc2VsZWN0IHdtIEEgKi8KQEAgLTEzMDIsNiArMTMwMyw4IEBACiAJYW1kZ3B1X2NydGMtPmxpbmVfdGltZSA9IGxpbmVfdGltZTsKIAlhbWRncHVfY3J0Yy0+d21faGlnaCA9IGxhdGVuY3lfd2F0ZXJtYXJrX2E7CiAJYW1kZ3B1X2NydGMtPndtX2xvdyA9IGxhdGVuY3lfd2F0ZXJtYXJrX2I7CisJLyogU2F2ZSBudW1iZXIgb2YgbGluZXMgdGhlIGxpbmVidWZmZXIgbGVhZHMgYmVmb3JlIHRoZSBzY2Fub3V0ICovCisJYW1kZ3B1X2NydGMtPmxiX3ZibGFua19sZWFkX2xpbmVzID0gbGJfdmJsYW5rX2xlYWRfbGluZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y4XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMKaW5kZXggNjc3NmNmNy4uZTFkY2FiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y4XzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhfMC5jCkBAIC0yNjgsNyArMjY4LDYgQEAKIAltbUNHVFRfQ1BfQ0xLX0NUUkwsIDB4ZmZmZmZmZmYsIDB4MDAwMDAxMDAsCiAJbW1DR1RUX0NQQ19DTEtfQ1RSTCwgMHhmZmZmZmZmZiwgMHgwMDAwMDEwMCwKIAltbUNHVFRfQ1BGX0NMS19DVFJMLCAweGZmZmZmZmZmLCAweDQwMDAwMTAwLAotCW1tQ0dUVF9EUk1fQ0xLX0NUUkwwLCAweGZmZmZmZmZmLCAweDAwNjAwMTAwLAogCW1tQ0dUVF9HRFNfQ0xLX0NUUkwsIDB4ZmZmZmZmZmYsIDB4MDAwMDAxMDAsCiAJbW1DR1RUX0lBX0NMS19DVFJMLCAweGZmZmZmZmZmLCAweDA2MDAwMTAwLAogCW1tQ0dUVF9QQV9DTEtfQ1RSTCwgMHhmZmZmZmZmZiwgMHgwMDAwMDEwMCwKQEAgLTI5NiwxMCArMjk1LDYgQEAKIAltbUNHVFNfU01fQ1RSTF9SRUcsIDB4ZmZmZmZmZmYsIDB4OTZlMDAyMDAsCiAJbW1DUF9SQl9XUFRSX1BPTExfQ05UTCwgMHhmZmZmZmZmZiwgMHgwMDkwMDEwMCwKIAltbVJMQ19DR0NHX0NHTFNfQ1RSTCwgMHhmZmZmZmZmZiwgMHgwMDIwMDAzYywKLQltbVBDSUVfSU5ERVgsIDB4ZmZmZmZmZmYsIDB4MDE0MDAwMWMsCi0JbW1QQ0lFX0RBVEEsIDB4MDAwZjAwMDAsIDB4MDAwMDAwMDAsCi0JbW1DR1RUX0RSTV9DTEtfQ1RSTDAsIDB4ZmYwMDBmZmYsIDB4MDAwMDAxMDAsCi0JbW1IRFBfWERQX0NHVFRfQkxLX0NUUkwsIDB4YzAwMDBmZmYsIDB4MDAwMDAxMDQsCiAJbW1DUF9NRU1fU0xQX0NOVEwsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsCiB9OwogCkBAIC0xMDAwLDcgKzk5NSw3IEBACiAJCWFkZXYtPmdmeC5jb25maWcubWF4X2N1X3Blcl9zaCA9IDE2OwogCQlhZGV2LT5nZnguY29uZmlnLm1heF9zaF9wZXJfc2UgPSAxOwogCQlhZGV2LT5nZnguY29uZmlnLm1heF9iYWNrZW5kc19wZXJfc2UgPSA0OwotCQlhZGV2LT5nZnguY29uZmlnLm1heF90ZXh0dXJlX2NoYW5uZWxfY2FjaGVzID0gODsKKwkJYWRldi0+Z2Z4LmNvbmZpZy5tYXhfdGV4dHVyZV9jaGFubmVsX2NhY2hlcyA9IDE2OwogCQlhZGV2LT5nZnguY29uZmlnLm1heF9ncHJzID0gMjU2OwogCQlhZGV2LT5nZnguY29uZmlnLm1heF9nc190aHJlYWRzID0gMzI7CiAJCWFkZXYtPmdmeC5jb25maWcubWF4X2h3X2NvbnRleHRzID0gODsKQEAgLTE2MTMsNiArMTYwOCwyOTYgQEAKIAkJCVdSRUczMihtbUdCX01BQ1JPVElMRV9NT0RFMCArIHJlZ19vZmZzZXQsIGdiX3RpbGVfbW9kZW4pOwogCQl9CiAJY2FzZSBDSElQX0ZJSkk6CisJCWZvciAocmVnX29mZnNldCA9IDA7IHJlZ19vZmZzZXQgPCBudW1fdGlsZV9tb2RlX3N0YXRlczsgcmVnX29mZnNldCsrKSB7CisJCQlzd2l0Y2ggKHJlZ19vZmZzZXQpIHsKKwkJCWNhc2UgMDoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCVRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfNjRCKSB8CisJCQkJCQlNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCVRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMTI4QikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzJEX1RJTEVEX1RISU4xKSB8CisJCQkJCQlQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSB8CisJCQkJCQlUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORykpOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElOMSkgfAorCQkJCQkJUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAorCQkJCQkJVElMRV9TUExJVChBRERSX1NVUkZfVElMRV9TUExJVF81MTJCKSB8CisJCQkJCQlNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCVRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMktCKSB8CisJCQkJCQlNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNToKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCVRJTEVfU1BMSVQoQUREUl9TVVJGX1RJTEVfU1BMSVRfMktCKSB8CisJCQkJCQlNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ERVBUSF9NSUNST19USUxJTkcpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RISU4xKSB8CisJCQkJCQlQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSB8CisJCQkJCQlUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzJLQikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDc6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAorCQkJCQkJUElQRV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2KSB8CisJCQkJCQlUSUxFX1NQTElUKEFERFJfU1VSRl9USUxFX1NQTElUXzJLQikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfREVQVEhfTUlDUk9fVElMSU5HKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDg6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX0xJTkVBUl9BTElHTkVEKSB8CisJCQkJCQlQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDk6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8CisJCQkJCQlQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSB8CisJCQkJCQlNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElORykgfAorCQkJCQkJU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSAxMDoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDExOgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX0RJU1BMQVlfTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF84KSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDEyOgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF8xNngxNikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfRElTUExBWV9NSUNST19USUxJTkcpIHwKKwkJCQkJCVNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzgpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTM6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8CisJCQkJCQlQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSB8CisJCQkJCQlNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9USElOX01JQ1JPX1RJTElORykgfAorCQkJCQkJU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSAxNDoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE1OgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8zRF9USUxFRF9USElOMSkgfAorCQkJCQkJUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKKwkJCQkJCVNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzIpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTY6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAorCQkJCQkJUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcpIHwKKwkJCQkJCVNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzgpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTc6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZX1BSVF9USUxFRF9USElOMSkgfAorCQkJCQkJUElQRV9DT05GSUcoQUREUl9TVVJGX1A0XzE2eDE2KSB8CisJCQkJCQlNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9USElOX01JQ1JPX1RJTElORykgfAorCQkJCQkJU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfOCkpOworCQkJCWJyZWFrOworCQkJY2FzZSAxODoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMURfVElMRURfVEhJQ0spIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8xKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE5OgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8xRF9USUxFRF9USElDSykgfAorCQkJCQkJUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJQ0tfTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8xKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDIwOgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9USElDSykgfAorCQkJCQkJUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJQ0tfTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8xKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDIxOgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8zRF9USUxFRF9USElDSykgfAorCQkJCQkJUElQRV9DT05GSUcoQUREUl9TVVJGX1AxNl8zMngzMl8xNngxNikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfVEhJQ0tfTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8xKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDIyOgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfVElMRURfVEhJQ0spIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISUNLX01JQ1JPX1RJTElORykgfAorCQkJCQkJU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMSkpOworCQkJCWJyZWFrOworCQkJY2FzZSAyMzoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfUFJUX1RJTEVEX1RISUNLKSB8CisJCQkJCQlQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDRfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISUNLX01JQ1JPX1RJTElORykgfAorCQkJCQkJU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMSkpOworCQkJCWJyZWFrOworCQkJY2FzZSAyNDoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJQ0spIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISU5fTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8xKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI1OgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV8yRF9USUxFRF9YVEhJQ0spIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1RISUNLX01JQ1JPX1RJTElORykgfAorCQkJCQkJU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMSkpOworCQkJCWJyZWFrOworCQkJY2FzZSAyNjoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfM0RfVElMRURfWFRISUNLKSB8CisJCQkJCQlQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSB8CisJCQkJCQlNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9USElDS19NSUNST19USUxJTkcpIHwKKwkJCQkJCVNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzEpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjc6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChBUlJBWV9NT0RFKEFSUkFZXzFEX1RJTEVEX1RISU4xKSB8CisJCQkJCQlQSVBFX0NPTkZJRyhBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2KSB8CisJCQkJCQlNSUNST19USUxFX01PREVfTkVXKEFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORykgfAorCQkJCQkJU0FNUExFX1NQTElUKEFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMikpOworCQkJCWJyZWFrOworCQkJY2FzZSAyODoKKwkJCQlnYl90aWxlX21vZGVuID0gKEFSUkFZX01PREUoQVJSQVlfMkRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF8yKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI5OgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QMTZfMzJ4MzJfMTZ4MTYpIHwKKwkJCQkJCU1JQ1JPX1RJTEVfTU9ERV9ORVcoQUREUl9TVVJGX1JPVEFURURfTUlDUk9fVElMSU5HKSB8CisJCQkJCQlTQU1QTEVfU1BMSVQoQUREUl9TVVJGX1NBTVBMRV9TUExJVF84KSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDMwOgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQVJSQVlfTU9ERShBUlJBWV9QUlRfVElMRURfVEhJTjEpIHwKKwkJCQkJCVBJUEVfQ09ORklHKEFERFJfU1VSRl9QNF8xNngxNikgfAorCQkJCQkJTUlDUk9fVElMRV9NT0RFX05FVyhBRERSX1NVUkZfUk9UQVRFRF9NSUNST19USUxJTkcpIHwKKwkJCQkJCVNBTVBMRV9TUExJVChBRERSX1NVUkZfU0FNUExFX1NQTElUXzgpKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlhZGV2LT5nZnguY29uZmlnLnRpbGVfbW9kZV9hcnJheVtyZWdfb2Zmc2V0XSA9IGdiX3RpbGVfbW9kZW47CisJCQlXUkVHMzIobW1HQl9USUxFX01PREUwICsgcmVnX29mZnNldCwgZ2JfdGlsZV9tb2Rlbik7CisJCX0KKwkJZm9yIChyZWdfb2Zmc2V0ID0gMDsgcmVnX29mZnNldCA8IG51bV9zZWNvbmRhcnlfdGlsZV9tb2RlX3N0YXRlczsgcmVnX29mZnNldCsrKSB7CisJCQlzd2l0Y2ggKHJlZ19vZmZzZXQpIHsKKwkJCWNhc2UgMDoKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzIpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNToKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzEpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMSkgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgODoKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzgpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgOToKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzQpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTA6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8yKSB8CisJCQkJCQlNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEpIHwKKwkJCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfOF9CQU5LKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDExOgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8CisJCQkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAorCQkJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8xKSB8CisJCQkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzhfQkFOSykpOworCQkJCWJyZWFrOworCQkJY2FzZSAxMjoKKwkJCQlnYl90aWxlX21vZGVuID0gKEJBTktfV0lEVEgoQUREUl9TVVJGX0JBTktfV0lEVEhfMSkgfAorCQkJCQkJQkFOS19IRUlHSFQoQUREUl9TVVJGX0JBTktfSEVJR0hUXzIpIHwKKwkJCQkJCU1BQ1JPX1RJTEVfQVNQRUNUKEFERFJfU1VSRl9NQUNST19BU1BFQ1RfMikgfAorCQkJCQkJTlVNX0JBTktTKEFERFJfU1VSRl84X0JBTkspKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTM6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IChCQU5LX1dJRFRIKEFERFJfU1VSRl9CQU5LX1dJRFRIXzEpIHwKKwkJCQkJCUJBTktfSEVJR0hUKEFERFJfU1VSRl9CQU5LX0hFSUdIVF8xKSB8CisJCQkJCQlNQUNST19USUxFX0FTUEVDVChBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzIpIHwKKwkJCQkJCU5VTV9CQU5LUyhBRERSX1NVUkZfOF9CQU5LKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE0OgorCQkJCWdiX3RpbGVfbW9kZW4gPSAoQkFOS19XSURUSChBRERSX1NVUkZfQkFOS19XSURUSF8xKSB8CisJCQkJCQlCQU5LX0hFSUdIVChBRERSX1NVUkZfQkFOS19IRUlHSFRfMSkgfAorCQkJCQkJTUFDUk9fVElMRV9BU1BFQ1QoQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8xKSB8CisJCQkJCQlOVU1fQkFOS1MoQUREUl9TVVJGXzRfQkFOSykpOworCQkJCWJyZWFrOworCQkJY2FzZSA3OgorCQkJCS8qIHVudXNlZCBpZHggKi8KKwkJCQljb250aW51ZTsKKwkJCWRlZmF1bHQ6CisJCQkJZ2JfdGlsZV9tb2RlbiA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlhZGV2LT5nZnguY29uZmlnLm1hY3JvdGlsZV9tb2RlX2FycmF5W3JlZ19vZmZzZXRdID0gZ2JfdGlsZV9tb2RlbjsKKwkJCVdSRUczMihtbUdCX01BQ1JPVElMRV9NT0RFMCArIHJlZ19vZmZzZXQsIGdiX3RpbGVfbW9kZW4pOworCQl9CisJCWJyZWFrOwogCWNhc2UgQ0hJUF9UT05HQToKIAkJZm9yIChyZWdfb2Zmc2V0ID0gMDsgcmVnX29mZnNldCA8IG51bV90aWxlX21vZGVfc3RhdGVzOyByZWdfb2Zmc2V0KyspIHsKIAkJCXN3aXRjaCAocmVnX29mZnNldCkgewpAQCAtMjk3MSwxMCArMzI1NiwxMyBAQAogCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIG1tUEFfU0NfUkFTVEVSX0NPTkZJRyAtIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX1NUQVJUKTsKIAlzd2l0Y2ggKGFkZXYtPmFzaWNfdHlwZSkgewogCWNhc2UgQ0hJUF9UT05HQToKLQljYXNlIENISVBfRklKSToKIAkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgxNjAwMDAxMik7CiAJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4MDAwMDAwMkEpOwogCQlicmVhazsKKwljYXNlIENISVBfRklKSToKKwkJYW1kZ3B1X3Jpbmdfd3JpdGUocmluZywgMHgzYTAwMTYxYSk7CisJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4MDAwMDAwMmUpOworCQlicmVhazsKIAljYXNlIENISVBfVE9QQVo6CiAJY2FzZSBDSElQX0NBUlJJWk86CiAJCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4MDAwMDAwMDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ21jX3Y3XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dtY192N18wLmMKaW5kZXggODViYmNkYy4uZWQ4YWJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ21jX3Y3XzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nbWNfdjdfMC5jCkBAIC00MCw3ICs0MCw3IEBACiBzdGF0aWMgdm9pZCBnbWNfdjdfMF9zZXRfZ2FydF9mdW5jcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CiBzdGF0aWMgdm9pZCBnbWNfdjdfMF9zZXRfaXJxX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKIAotTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vYm9uaWFyZV9tYy5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL2JvbmFpcmVfbWMuYmluIik7CiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9oYXdhaWlfbWMuYmluIik7CiAKIC8qKgpAQCAtNTAxLDYgKzUwMSw3IEBACiAJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX0NOVEwsIEVOQUJMRV9MMl9QREUwX0NBQ0hFX0xSVV9VUERBVEVfQllfV1JJVEUsIDEpOwogCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9DTlRMLCBFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSwgNyk7CiAJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX0NOVEwsIENPTlRFWFQxX0lERU5USVRZX0FDQ0VTU19NT0RFLCAxKTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfQ05UTCwgRU5BQkxFX0RFRkFVTFRfUEFHRV9PVVRfVE9fU1lTVEVNX01FTU9SWSwgMSk7CiAJV1JFRzMyKG1tVk1fTDJfQ05UTCwgdG1wKTsKIAl0bXAgPSBSRUdfU0VUX0ZJRUxEKDAsIFZNX0wyX0NOVEwyLCBJTlZBTElEQVRFX0FMTF9MMV9UTEJTLCAxKTsKIAl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfQ05UTDIsIElOVkFMSURBVEVfTDJfQ0FDSEUsIDEpOwpAQCAtNTEyLDcgKzUxMyw3IEBACiAJV1JFRzMyKG1tVk1fTDJfQ05UTDMsIHRtcCk7CiAJLyogc2V0dXAgY29udGV4dDAgKi8KIAlXUkVHMzIobW1WTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIGFkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKG1tVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgKGFkZXYtPm1jLmd0dF9lbmQgPj4gMTIpIC0gMSk7CisJV1JFRzMyKG1tVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgYWRldi0+bWMuZ3R0X2VuZCA+PiAxMik7CiAJV1JFRzMyKG1tVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIsIGFkZXYtPmdhcnQudGFibGVfYWRkciA+PiAxMik7CiAJV1JFRzMyKG1tVk1fQ09OVEVYVDBfUFJPVEVDVElPTl9GQVVMVF9ERUZBVUxUX0FERFIsCiAJCQkodTMyKShhZGV2LT5kdW1teV9wYWdlLmFkZHIgPj4gMTIpKTsKQEAgLTk2MCwxMiArOTYxLDEwIEBACiAKIHN0YXRpYyBpbnQgZ21jX3Y3XzBfc3dfZmluaSh2b2lkICpoYW5kbGUpCiB7Ci0JaW50IGk7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CiAKIAlpZiAoYWRldi0+dm1fbWFuYWdlci5lbmFibGVkKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBTURHUFVfTlVNX1ZNOyArK2kpCi0JCQlmZW5jZV9wdXQoYWRldi0+dm1fbWFuYWdlci5hY3RpdmVbaV0pOworCQlhbWRncHVfdm1fbWFuYWdlcl9maW5pKGFkZXYpOwogCQlnbWNfdjdfMF92bV9maW5pKGFkZXYpOwogCQlhZGV2LT52bV9tYW5hZ2VyLmVuYWJsZWQgPSBmYWxzZTsKIAl9CkBAIC0xMDEwLDEyICsxMDA5LDEwIEBACiAKIHN0YXRpYyBpbnQgZ21jX3Y3XzBfc3VzcGVuZCh2b2lkICpoYW5kbGUpCiB7Ci0JaW50IGk7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CiAKIAlpZiAoYWRldi0+dm1fbWFuYWdlci5lbmFibGVkKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBTURHUFVfTlVNX1ZNOyArK2kpCi0JCQlmZW5jZV9wdXQoYWRldi0+dm1fbWFuYWdlci5hY3RpdmVbaV0pOworCQlhbWRncHVfdm1fbWFuYWdlcl9maW5pKGFkZXYpOwogCQlnbWNfdjdfMF92bV9maW5pKGFkZXYpOwogCQlhZGV2LT52bV9tYW5hZ2VyLmVuYWJsZWQgPSBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nbWNfdjhfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ21jX3Y4XzAuYwppbmRleCAxYmNjNGU3Li5kMzkwMjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nbWNfdjhfMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dtY192OF8wLmMKQEAgLTYyOSw2ICs2MjksNyBAQAogCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9DTlRMLCBFTkFCTEVfTDJfUERFMF9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFLCAxKTsKIAl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgVk1fTDJfQ05UTCwgRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUsIDcpOwogCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9DTlRMLCBDT05URVhUMV9JREVOVElUWV9BQ0NFU1NfTU9ERSwgMSk7CisJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIFZNX0wyX0NOVEwsIEVOQUJMRV9ERUZBVUxUX1BBR0VfT1VUX1RPX1NZU1RFTV9NRU1PUlksIDEpOwogCVdSRUczMihtbVZNX0wyX0NOVEwsIHRtcCk7CiAJdG1wID0gUlJFRzMyKG1tVk1fTDJfQ05UTDIpOwogCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBWTV9MMl9DTlRMMiwgSU5WQUxJREFURV9BTExfTDFfVExCUywgMSk7CkBAIC02NTYsNyArNjU3LDcgQEAKIAlXUkVHMzIobW1WTV9MMl9DTlRMNCwgdG1wKTsKIAkvKiBzZXR1cCBjb250ZXh0MCAqLwogCVdSRUczMihtbVZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfU1RBUlRfQUREUiwgYWRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKLQlXUkVHMzIobW1WTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCAoYWRldi0+bWMuZ3R0X2VuZCA+PiAxMikgLSAxKTsKKwlXUkVHMzIobW1WTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCBhZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKIAlXUkVHMzIobW1WTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiwgYWRldi0+Z2FydC50YWJsZV9hZGRyID4+IDEyKTsKIAlXUkVHMzIobW1WTV9DT05URVhUMF9QUk9URUNUSU9OX0ZBVUxUX0RFRkFVTFRfQUREUiwKIAkJCSh1MzIpKGFkZXYtPmR1bW15X3BhZ2UuYWRkciA+PiAxMikpOwpAQCAtOTc5LDEyICs5ODAsMTAgQEAKIAogc3RhdGljIGludCBnbWNfdjhfMF9zd19maW5pKHZvaWQgKmhhbmRsZSkKIHsKLQlpbnQgaTsKIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKIAogCWlmIChhZGV2LT52bV9tYW5hZ2VyLmVuYWJsZWQpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFNREdQVV9OVU1fVk07ICsraSkKLQkJCWZlbmNlX3B1dChhZGV2LT52bV9tYW5hZ2VyLmFjdGl2ZVtpXSk7CisJCWFtZGdwdV92bV9tYW5hZ2VyX2ZpbmkoYWRldik7CiAJCWdtY192OF8wX3ZtX2ZpbmkoYWRldik7CiAJCWFkZXYtPnZtX21hbmFnZXIuZW5hYmxlZCA9IGZhbHNlOwogCX0KQEAgLTEwMzEsMTIgKzEwMzAsMTAgQEAKIAogc3RhdGljIGludCBnbWNfdjhfMF9zdXNwZW5kKHZvaWQgKmhhbmRsZSkKIHsKLQlpbnQgaTsKIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKIAogCWlmIChhZGV2LT52bV9tYW5hZ2VyLmVuYWJsZWQpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFNREdQVV9OVU1fVk07ICsraSkKLQkJCWZlbmNlX3B1dChhZGV2LT52bV9tYW5hZ2VyLmFjdGl2ZVtpXSk7CisJCWFtZGdwdV92bV9tYW5hZ2VyX2ZpbmkoYWRldik7CiAJCWdtY192OF8wX3ZtX2ZpbmkoYWRldik7CiAJCWFkZXYtPnZtX21hbmFnZXIuZW5hYmxlZCA9IGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3ZjZV92M18wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS92Y2VfdjNfMC5jCmluZGV4IDZhNTJkYjYuLjM3MGM2YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3ZjZV92M18wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmNlX3YzXzAuYwpAQCAtNDAsNiArNDAsOSBAQAogCiAjZGVmaW5lIEdSQk1fR0ZYX0lOREVYX19WQ0VfSU5TVEFOQ0VfX1NISUZUCTB4MDQKICNkZWZpbmUgR1JCTV9HRlhfSU5ERVhfX1ZDRV9JTlNUQU5DRV9NQVNLCTB4MTAKKyNkZWZpbmUgbW1WQ0VfTE1JX1ZDUFVfQ0FDSEVfNDBCSVRfQkFSMCAJMHg4NjE2CisjZGVmaW5lIG1tVkNFX0xNSV9WQ1BVX0NBQ0hFXzQwQklUX0JBUjEgCTB4ODYxNworI2RlZmluZSBtbVZDRV9MTUlfVkNQVV9DQUNIRV80MEJJVF9CQVIyIAkweDg2MTgKIAogI2RlZmluZSBWQ0VfVjNfMF9GV19TSVpFCSgzODQgKiAxMDI0KQogI2RlZmluZSBWQ0VfVjNfMF9TVEFDS19TSVpFCSg2NCAqIDEwMjQpCkBAIC0xMzAsOSArMTMzLDExIEBACiAKIAkJLyogc2V0IEJVU1kgZmxhZyAqLwogCQlXUkVHMzJfUChtbVZDRV9TVEFUVVMsIDEsIH4xKTsKLQotCQlXUkVHMzJfUChtbVZDRV9WQ1BVX0NOVEwsIFZDRV9WQ1BVX0NOVExfX0NMS19FTl9NQVNLLAotCQkJflZDRV9WQ1BVX0NOVExfX0NMS19FTl9NQVNLKTsKKwkJaWYgKGFkZXYtPmFzaWNfdHlwZSA+PSBDSElQX1NUT05FWSkKKwkJCVdSRUczMl9QKG1tVkNFX1ZDUFVfQ05UTCwgMSwgfjB4MjAwMDAxKTsKKwkJZWxzZQorCQkJV1JFRzMyX1AobW1WQ0VfVkNQVV9DTlRMLCBWQ0VfVkNQVV9DTlRMX19DTEtfRU5fTUFTSywKKwkJCQl+VkNFX1ZDUFVfQ05UTF9fQ0xLX0VOX01BU0spOwogCiAJCVdSRUczMl9QKG1tVkNFX1NPRlRfUkVTRVQsCiAJCQkgVkNFX1NPRlRfUkVTRVRfX0VDUFVfU09GVF9SRVNFVF9NQVNLLApAQCAtMzkxLDggKzM5NiwxMiBAQAogCVdSRUczMihtbVZDRV9MTUlfU1dBUF9DTlRMLCAwKTsKIAlXUkVHMzIobW1WQ0VfTE1JX1NXQVBfQ05UTDEsIDApOwogCVdSRUczMihtbVZDRV9MTUlfVk1fQ1RSTCwgMCk7Ci0KLQlXUkVHMzIobW1WQ0VfTE1JX1ZDUFVfQ0FDSEVfNDBCSVRfQkFSLCAoYWRldi0+dmNlLmdwdV9hZGRyID4+IDgpKTsKKwlpZiAoYWRldi0+YXNpY190eXBlID49IENISVBfU1RPTkVZKSB7CisJCVdSRUczMihtbVZDRV9MTUlfVkNQVV9DQUNIRV80MEJJVF9CQVIwLCAoYWRldi0+dmNlLmdwdV9hZGRyID4+IDgpKTsKKwkJV1JFRzMyKG1tVkNFX0xNSV9WQ1BVX0NBQ0hFXzQwQklUX0JBUjEsIChhZGV2LT52Y2UuZ3B1X2FkZHIgPj4gOCkpOworCQlXUkVHMzIobW1WQ0VfTE1JX1ZDUFVfQ0FDSEVfNDBCSVRfQkFSMiwgKGFkZXYtPnZjZS5ncHVfYWRkciA+PiA4KSk7CisJfSBlbHNlCisJCVdSRUczMihtbVZDRV9MTUlfVkNQVV9DQUNIRV80MEJJVF9CQVIsIChhZGV2LT52Y2UuZ3B1X2FkZHIgPj4gOCkpOwogCW9mZnNldCA9IEFNREdQVV9WQ0VfRklSTVdBUkVfT0ZGU0VUOwogCXNpemUgPSBWQ0VfVjNfMF9GV19TSVpFOwogCVdSRUczMihtbVZDRV9WQ1BVX0NBQ0hFX09GRlNFVDAsIG9mZnNldCAmIDB4N2ZmZmZmZmYpOwpAQCAtNTc2LDYgKzU4NSwxMSBAQAogCQkJCSAgICAgIHN0cnVjdCBhbWRncHVfaXZfZW50cnkgKmVudHJ5KQogewogCURSTV9ERUJVRygiSUg6IFZDRVxuIik7CisKKwlXUkVHMzJfUChtbVZDRV9TWVNfSU5UX1NUQVRVUywKKwkJVkNFX1NZU19JTlRfU1RBVFVTX19WQ0VfU1lTX0lOVF9UUkFQX0lOVEVSUlVQVF9JTlRfTUFTSywKKwkJflZDRV9TWVNfSU5UX1NUQVRVU19fVkNFX1NZU19JTlRfVFJBUF9JTlRFUlJVUFRfSU5UX01BU0spOworCiAJc3dpdGNoIChlbnRyeS0+c3JjX2RhdGEpIHsKIAljYXNlIDA6CiAJCWFtZGdwdV9mZW5jZV9wcm9jZXNzKCZhZGV2LT52Y2UucmluZ1swXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3NjaGVkdWxlci9ncHVfc2NoZWRfdHJhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL2dwdV9zY2hlZF90cmFjZS5oCmluZGV4IDE0NGY1MGEuLmM4OWRjNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL2dwdV9zY2hlZF90cmFjZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL2dwdV9zY2hlZF90cmFjZS5oCkBAIC0xNiw2ICsxNiw4IEBACiAJICAgIFRQX0FSR1Moc2NoZWRfam9iKSwKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKIAkJCSAgICAgX19maWVsZChzdHJ1Y3QgYW1kX3NjaGVkX2VudGl0eSAqLCBlbnRpdHkpCisJCQkgICAgIF9fZmllbGQoc3RydWN0IGFtZF9zY2hlZF9qb2IgKiwgc2NoZWRfam9iKQorCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBmZW5jZSAqLCBmZW5jZSkKIAkJCSAgICAgX19maWVsZChjb25zdCBjaGFyICosIG5hbWUpCiAJCQkgICAgIF9fZmllbGQodTMyLCBqb2JfY291bnQpCiAJCQkgICAgIF9fZmllbGQoaW50LCBod19qb2JfY291bnQpCkBAIC0yMywxNiArMjUsMzIgQEAKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKIAkJCSAgIF9fZW50cnktPmVudGl0eSA9IHNjaGVkX2pvYi0+c19lbnRpdHk7CisJCQkgICBfX2VudHJ5LT5zY2hlZF9qb2IgPSBzY2hlZF9qb2I7CisJCQkgICBfX2VudHJ5LT5mZW5jZSA9ICZzY2hlZF9qb2ItPnNfZmVuY2UtPmJhc2U7CiAJCQkgICBfX2VudHJ5LT5uYW1lID0gc2NoZWRfam9iLT5zY2hlZC0+bmFtZTsKIAkJCSAgIF9fZW50cnktPmpvYl9jb3VudCA9IGtmaWZvX2xlbigKIAkJCQkgICAmc2NoZWRfam9iLT5zX2VudGl0eS0+am9iX3F1ZXVlKSAvIHNpemVvZihzY2hlZF9qb2IpOwogCQkJICAgX19lbnRyeS0+aHdfam9iX2NvdW50ID0gYXRvbWljX3JlYWQoCiAJCQkJICAgJnNjaGVkX2pvYi0+c2NoZWQtPmh3X3JxX2NvdW50KTsKIAkJCSAgICksCi0JICAgIFRQX3ByaW50aygiZW50aXR5PSVwLCByaW5nPSVzLCBqb2IgY291bnQ6JXUsIGh3IGpvYiBjb3VudDolZCIsCi0JCSAgICAgIF9fZW50cnktPmVudGl0eSwgX19lbnRyeS0+bmFtZSwgX19lbnRyeS0+am9iX2NvdW50LAotCQkgICAgICBfX2VudHJ5LT5od19qb2JfY291bnQpCisJICAgIFRQX3ByaW50aygiZW50aXR5PSVwLCBzY2hlZCBqb2I9JXAsIGZlbmNlPSVwLCByaW5nPSVzLCBqb2IgY291bnQ6JXUsIGh3IGpvYiBjb3VudDolZCIsCisJCSAgICAgIF9fZW50cnktPmVudGl0eSwgX19lbnRyeS0+c2NoZWRfam9iLCBfX2VudHJ5LT5mZW5jZSwgX19lbnRyeS0+bmFtZSwKKwkJICAgICAgX19lbnRyeS0+am9iX2NvdW50LCBfX2VudHJ5LT5od19qb2JfY291bnQpCiApOworCitUUkFDRV9FVkVOVChhbWRfc2NoZWRfcHJvY2Vzc19qb2IsCisJICAgIFRQX1BST1RPKHN0cnVjdCBhbWRfc2NoZWRfZmVuY2UgKmZlbmNlKSwKKwkgICAgVFBfQVJHUyhmZW5jZSksCisJICAgIFRQX1NUUlVDVF9fZW50cnkoCisJCSAgICBfX2ZpZWxkKHN0cnVjdCBmZW5jZSAqLCBmZW5jZSkKKwkJICAgICksCisKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJCSAgICBfX2VudHJ5LT5mZW5jZSA9ICZmZW5jZS0+YmFzZTsKKwkJICAgICksCisJICAgIFRQX3ByaW50aygiZmVuY2U9JXAgc2lnbmFsZWQiLCBfX2VudHJ5LT5mZW5jZSkKKyk7CisKICNlbmRpZgogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL2dwdV9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL2dwdV9zY2hlZHVsZXIuYwppbmRleCA4OTYxOWE1Li4zYTQ4MjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3NjaGVkdWxlci9ncHVfc2NoZWR1bGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9zY2hlZHVsZXIvZ3B1X3NjaGVkdWxlci5jCkBAIC0zMCwxMCArMzAsMTIgQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgImdwdV9zY2hlZF90cmFjZS5oIgogCi1zdGF0aWMgc3RydWN0IGFtZF9zY2hlZF9qb2IgKgotYW1kX3NjaGVkX2VudGl0eV9wb3Bfam9iKHN0cnVjdCBhbWRfc2NoZWRfZW50aXR5ICplbnRpdHkpOworc3RhdGljIGJvb2wgYW1kX3NjaGVkX2VudGl0eV9pc19yZWFkeShzdHJ1Y3QgYW1kX3NjaGVkX2VudGl0eSAqZW50aXR5KTsKIHN0YXRpYyB2b2lkIGFtZF9zY2hlZF93YWtldXAoc3RydWN0IGFtZF9ncHVfc2NoZWR1bGVyICpzY2hlZCk7CiAKK3N0cnVjdCBrbWVtX2NhY2hlICpzY2hlZF9mZW5jZV9zbGFiOworYXRvbWljX3Qgc2NoZWRfZmVuY2Vfc2xhYl9yZWYgPSBBVE9NSUNfSU5JVCgwKTsKKwogLyogSW5pdGlhbGl6ZSBhIGdpdmVuIHJ1biBxdWV1ZSBzdHJ1Y3QgKi8KIHN0YXRpYyB2b2lkIGFtZF9zY2hlZF9ycV9pbml0KHN0cnVjdCBhbWRfc2NoZWRfcnEgKnJxKQogewpAQCAtNjEsMzYgKzYzLDM2IEBACiB9CiAKIC8qKgotICogU2VsZWN0IG5leHQgam9iIGZyb20gYSBzcGVjaWZpZWQgcnVuIHF1ZXVlIHdpdGggcm91bmQgcm9iaW4gcG9saWN5LgotICogUmV0dXJuIE5VTEwgaWYgbm90aGluZyBhdmFpbGFibGUuCisgKiBTZWxlY3QgYW4gZW50aXR5IHdoaWNoIGNvdWxkIHByb3ZpZGUgYSBqb2IgdG8gcnVuCisgKgorICogQHJxCQlUaGUgcnVuIHF1ZXVlIHRvIGNoZWNrLgorICoKKyAqIFRyeSB0byBmaW5kIGEgcmVhZHkgZW50aXR5LCByZXR1cm5zIE5VTEwgaWYgbm9uZSBmb3VuZC4KICAqLwotc3RhdGljIHN0cnVjdCBhbWRfc2NoZWRfam9iICoKLWFtZF9zY2hlZF9ycV9zZWxlY3Rfam9iKHN0cnVjdCBhbWRfc2NoZWRfcnEgKnJxKQorc3RhdGljIHN0cnVjdCBhbWRfc2NoZWRfZW50aXR5ICoKK2FtZF9zY2hlZF9ycV9zZWxlY3RfZW50aXR5KHN0cnVjdCBhbWRfc2NoZWRfcnEgKnJxKQogewogCXN0cnVjdCBhbWRfc2NoZWRfZW50aXR5ICplbnRpdHk7Ci0Jc3RydWN0IGFtZF9zY2hlZF9qb2IgKnNjaGVkX2pvYjsKIAogCXNwaW5fbG9jaygmcnEtPmxvY2spOwogCiAJZW50aXR5ID0gcnEtPmN1cnJlbnRfZW50aXR5OwogCWlmIChlbnRpdHkpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShlbnRpdHksICZycS0+ZW50aXRpZXMsIGxpc3QpIHsKLQkJCXNjaGVkX2pvYiA9IGFtZF9zY2hlZF9lbnRpdHlfcG9wX2pvYihlbnRpdHkpOwotCQkJaWYgKHNjaGVkX2pvYikgeworCQkJaWYgKGFtZF9zY2hlZF9lbnRpdHlfaXNfcmVhZHkoZW50aXR5KSkgewogCQkJCXJxLT5jdXJyZW50X2VudGl0eSA9IGVudGl0eTsKIAkJCQlzcGluX3VubG9jaygmcnEtPmxvY2spOwotCQkJCXJldHVybiBzY2hlZF9qb2I7CisJCQkJcmV0dXJuIGVudGl0eTsKIAkJCX0KIAkJfQogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50aXR5LCAmcnEtPmVudGl0aWVzLCBsaXN0KSB7CiAKLQkJc2NoZWRfam9iID0gYW1kX3NjaGVkX2VudGl0eV9wb3Bfam9iKGVudGl0eSk7Ci0JCWlmIChzY2hlZF9qb2IpIHsKKwkJaWYgKGFtZF9zY2hlZF9lbnRpdHlfaXNfcmVhZHkoZW50aXR5KSkgewogCQkJcnEtPmN1cnJlbnRfZW50aXR5ID0gZW50aXR5OwogCQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKLQkJCXJldHVybiBzY2hlZF9qb2I7CisJCQlyZXR1cm4gZW50aXR5OwogCQl9CiAKIAkJaWYgKGVudGl0eSA9PSBycS0+Y3VycmVudF9lbnRpdHkpCkBAIC0xNzQsNiArMTc2LDI0IEBACiB9CiAKIC8qKgorICogQ2hlY2sgaWYgZW50aXR5IGlzIHJlYWR5CisgKgorICogQGVudGl0eQlUaGUgcG9pbnRlciB0byBhIHZhbGlkIHNjaGVkdWxlciBlbnRpdHkKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiBlbnRpdHkgY291bGQgcHJvdmlkZSBhIGpvYi4KKyAqLworc3RhdGljIGJvb2wgYW1kX3NjaGVkX2VudGl0eV9pc19yZWFkeShzdHJ1Y3QgYW1kX3NjaGVkX2VudGl0eSAqZW50aXR5KQoreworCWlmIChrZmlmb19pc19lbXB0eSgmZW50aXR5LT5qb2JfcXVldWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoQUNDRVNTX09OQ0UoZW50aXR5LT5kZXBlbmRlbmN5KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgogICogRGVzdHJveSBhIGNvbnRleHQgZW50aXR5CiAgKgogICogQHNjaGVkICAgICAgIFBvaW50ZXIgdG8gc2NoZWR1bGVyIGluc3RhbmNlCkBAIC0yMDgsMzIgKzIyOCw1MyBAQAogCWFtZF9zY2hlZF93YWtldXAoZW50aXR5LT5zY2hlZCk7CiB9CiAKK3N0YXRpYyBib29sIGFtZF9zY2hlZF9lbnRpdHlfYWRkX2RlcGVuZGVuY3lfY2Ioc3RydWN0IGFtZF9zY2hlZF9lbnRpdHkgKmVudGl0eSkKK3sKKwlzdHJ1Y3QgYW1kX2dwdV9zY2hlZHVsZXIgKnNjaGVkID0gZW50aXR5LT5zY2hlZDsKKwlzdHJ1Y3QgZmVuY2UgKiBmZW5jZSA9IGVudGl0eS0+ZGVwZW5kZW5jeTsKKwlzdHJ1Y3QgYW1kX3NjaGVkX2ZlbmNlICpzX2ZlbmNlOworCisJaWYgKGZlbmNlLT5jb250ZXh0ID09IGVudGl0eS0+ZmVuY2VfY29udGV4dCkgeworCQkvKiBXZSBjYW4gaWdub3JlIGZlbmNlcyBmcm9tIG91cnNlbGYgKi8KKwkJZmVuY2VfcHV0KGVudGl0eS0+ZGVwZW5kZW5jeSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzX2ZlbmNlID0gdG9fYW1kX3NjaGVkX2ZlbmNlKGZlbmNlKTsKKwlpZiAoc19mZW5jZSAmJiBzX2ZlbmNlLT5zY2hlZCA9PSBzY2hlZCkgeworCQkvKiBGZW5jZSBpcyBmcm9tIHRoZSBzYW1lIHNjaGVkdWxlciAqLworCQlpZiAodGVzdF9iaXQoQU1EX1NDSEVEX0ZFTkNFX1NDSEVEVUxFRF9CSVQsICZmZW5jZS0+ZmxhZ3MpKSB7CisJCQkvKiBJZ25vcmUgaXQgd2hlbiBpdCBpcyBhbHJlYWR5IHNjaGVkdWxlZCAqLworCQkJZmVuY2VfcHV0KGVudGl0eS0+ZGVwZW5kZW5jeSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBXYWl0IGZvciBmZW5jZSB0byBiZSBzY2hlZHVsZWQgKi8KKwkJZW50aXR5LT5jYi5mdW5jID0gYW1kX3NjaGVkX2VudGl0eV93YWtldXA7CisJCWxpc3RfYWRkX3RhaWwoJmVudGl0eS0+Y2Iubm9kZSwgJnNfZmVuY2UtPnNjaGVkdWxlZF9jYik7CisJCXJldHVybiB0cnVlOworCX0KKworCWlmICghZmVuY2VfYWRkX2NhbGxiYWNrKGVudGl0eS0+ZGVwZW5kZW5jeSwgJmVudGl0eS0+Y2IsCisJCQkJYW1kX3NjaGVkX2VudGl0eV93YWtldXApKQorCQlyZXR1cm4gdHJ1ZTsKKworCWZlbmNlX3B1dChlbnRpdHktPmRlcGVuZGVuY3kpOworCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIHN0cnVjdCBhbWRfc2NoZWRfam9iICoKIGFtZF9zY2hlZF9lbnRpdHlfcG9wX2pvYihzdHJ1Y3QgYW1kX3NjaGVkX2VudGl0eSAqZW50aXR5KQogewogCXN0cnVjdCBhbWRfZ3B1X3NjaGVkdWxlciAqc2NoZWQgPSBlbnRpdHktPnNjaGVkOwogCXN0cnVjdCBhbWRfc2NoZWRfam9iICpzY2hlZF9qb2I7CiAKLQlpZiAoQUNDRVNTX09OQ0UoZW50aXR5LT5kZXBlbmRlbmN5KSkKLQkJcmV0dXJuIE5VTEw7Ci0KIAlpZiAoIWtmaWZvX291dF9wZWVrKCZlbnRpdHktPmpvYl9xdWV1ZSwgJnNjaGVkX2pvYiwgc2l6ZW9mKHNjaGVkX2pvYikpKQogCQlyZXR1cm4gTlVMTDsKIAotCXdoaWxlICgoZW50aXR5LT5kZXBlbmRlbmN5ID0gc2NoZWQtPm9wcy0+ZGVwZW5kZW5jeShzY2hlZF9qb2IpKSkgewotCi0JCWlmIChlbnRpdHktPmRlcGVuZGVuY3ktPmNvbnRleHQgPT0gZW50aXR5LT5mZW5jZV9jb250ZXh0KSB7Ci0JCQkvKiBXZSBjYW4gaWdub3JlIGZlbmNlcyBmcm9tIG91cnNlbGYgKi8KLQkJCWZlbmNlX3B1dChlbnRpdHktPmRlcGVuZGVuY3kpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoZmVuY2VfYWRkX2NhbGxiYWNrKGVudGl0eS0+ZGVwZW5kZW5jeSwgJmVudGl0eS0+Y2IsCi0JCQkJICAgICAgIGFtZF9zY2hlZF9lbnRpdHlfd2FrZXVwKSkKLQkJCWZlbmNlX3B1dChlbnRpdHktPmRlcGVuZGVuY3kpOwotCQllbHNlCisJd2hpbGUgKChlbnRpdHktPmRlcGVuZGVuY3kgPSBzY2hlZC0+b3BzLT5kZXBlbmRlbmN5KHNjaGVkX2pvYikpKQorCQlpZiAoYW1kX3NjaGVkX2VudGl0eV9hZGRfZGVwZW5kZW5jeV9jYihlbnRpdHkpKQogCQkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJcmV0dXJuIHNjaGVkX2pvYjsKIH0KQEAgLTI0Nyw2ICsyODgsNyBAQAogICovCiBzdGF0aWMgYm9vbCBhbWRfc2NoZWRfZW50aXR5X2luKHN0cnVjdCBhbWRfc2NoZWRfam9iICpzY2hlZF9qb2IpCiB7CisJc3RydWN0IGFtZF9ncHVfc2NoZWR1bGVyICpzY2hlZCA9IHNjaGVkX2pvYi0+c2NoZWQ7CiAJc3RydWN0IGFtZF9zY2hlZF9lbnRpdHkgKmVudGl0eSA9IHNjaGVkX2pvYi0+c19lbnRpdHk7CiAJYm9vbCBhZGRlZCwgZmlyc3QgPSBmYWxzZTsKIApAQCAtMjYxLDcgKzMwMyw3IEBACiAKIAkvKiBmaXJzdCBqb2Igd2FrZXMgdXAgc2NoZWR1bGVyICovCiAJaWYgKGZpcnN0KQotCQlhbWRfc2NoZWRfd2FrZXVwKHNjaGVkX2pvYi0+c2NoZWQpOworCQlhbWRfc2NoZWRfd2FrZXVwKHNjaGVkKTsKIAogCXJldHVybiBhZGRlZDsKIH0KQEAgLTI3MywyMiArMzE1LDEzIEBACiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KICAqLwotaW50IGFtZF9zY2hlZF9lbnRpdHlfcHVzaF9qb2Ioc3RydWN0IGFtZF9zY2hlZF9qb2IgKnNjaGVkX2pvYikKK3ZvaWQgYW1kX3NjaGVkX2VudGl0eV9wdXNoX2pvYihzdHJ1Y3QgYW1kX3NjaGVkX2pvYiAqc2NoZWRfam9iKQogewogCXN0cnVjdCBhbWRfc2NoZWRfZW50aXR5ICplbnRpdHkgPSBzY2hlZF9qb2ItPnNfZW50aXR5OwotCXN0cnVjdCBhbWRfc2NoZWRfZmVuY2UgKmZlbmNlID0gYW1kX3NjaGVkX2ZlbmNlX2NyZWF0ZSgKLQkJZW50aXR5LCBzY2hlZF9qb2ItPm93bmVyKTsKIAotCWlmICghZmVuY2UpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZmVuY2VfZ2V0KCZmZW5jZS0+YmFzZSk7Ci0Jc2NoZWRfam9iLT5zX2ZlbmNlID0gZmVuY2U7Ci0KKwl0cmFjZV9hbWRfc2NoZWRfam9iKHNjaGVkX2pvYik7CiAJd2FpdF9ldmVudChlbnRpdHktPnNjaGVkLT5qb2Jfc2NoZWR1bGVkLAogCQkgICBhbWRfc2NoZWRfZW50aXR5X2luKHNjaGVkX2pvYikpOwotCXRyYWNlX2FtZF9zY2hlZF9qb2Ioc2NoZWRfam9iKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0zMTAsMjIgKzM0MywyMiBAQAogfQogCiAvKioKLSAqIFNlbGVjdCBuZXh0IHRvIHJ1bgorICogU2VsZWN0IG5leHQgZW50aXR5IHRvIHByb2Nlc3MKICovCi1zdGF0aWMgc3RydWN0IGFtZF9zY2hlZF9qb2IgKgotYW1kX3NjaGVkX3NlbGVjdF9qb2Ioc3RydWN0IGFtZF9ncHVfc2NoZWR1bGVyICpzY2hlZCkKK3N0YXRpYyBzdHJ1Y3QgYW1kX3NjaGVkX2VudGl0eSAqCithbWRfc2NoZWRfc2VsZWN0X2VudGl0eShzdHJ1Y3QgYW1kX2dwdV9zY2hlZHVsZXIgKnNjaGVkKQogewotCXN0cnVjdCBhbWRfc2NoZWRfam9iICpzY2hlZF9qb2I7CisJc3RydWN0IGFtZF9zY2hlZF9lbnRpdHkgKmVudGl0eTsKIAogCWlmICghYW1kX3NjaGVkX3JlYWR5KHNjaGVkKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBLZXJuZWwgcnVuIHF1ZXVlIGhhcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiBub3JtYWwgcnVuIHF1ZXVlKi8KLQlzY2hlZF9qb2IgPSBhbWRfc2NoZWRfcnFfc2VsZWN0X2pvYigmc2NoZWQtPmtlcm5lbF9ycSk7Ci0JaWYgKHNjaGVkX2pvYiA9PSBOVUxMKQotCQlzY2hlZF9qb2IgPSBhbWRfc2NoZWRfcnFfc2VsZWN0X2pvYigmc2NoZWQtPnNjaGVkX3JxKTsKKwllbnRpdHkgPSBhbWRfc2NoZWRfcnFfc2VsZWN0X2VudGl0eSgmc2NoZWQtPmtlcm5lbF9ycSk7CisJaWYgKGVudGl0eSA9PSBOVUxMKQorCQllbnRpdHkgPSBhbWRfc2NoZWRfcnFfc2VsZWN0X2VudGl0eSgmc2NoZWQtPnNjaGVkX3JxKTsKIAotCXJldHVybiBzY2hlZF9qb2I7CisJcmV0dXJuIGVudGl0eTsKIH0KIAogc3RhdGljIHZvaWQgYW1kX3NjaGVkX3Byb2Nlc3Nfam9iKHN0cnVjdCBmZW5jZSAqZiwgc3RydWN0IGZlbmNlX2NiICpjYikKQEAgLTM0Myw2ICszNzYsNyBAQAogCQlsaXN0X2RlbF9pbml0KCZzX2ZlbmNlLT5saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoZWQtPmZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOwogCX0KKwl0cmFjZV9hbWRfc2NoZWRfcHJvY2Vzc19qb2Ioc19mZW5jZSk7CiAJZmVuY2VfcHV0KCZzX2ZlbmNlLT5iYXNlKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNjaGVkLT53YWtlX3VwX3dvcmtlcik7CiB9CkBAIC0zODYsMTMgKzQyMCwxNiBAQAogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzY2hlZC0+d2FrZV91cF93b3JrZXIsCi0JCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwKLQkJCShzY2hlZF9qb2IgPSBhbWRfc2NoZWRfc2VsZWN0X2pvYihzY2hlZCkpKTsKKwkJCShlbnRpdHkgPSBhbWRfc2NoZWRfc2VsZWN0X2VudGl0eShzY2hlZCkpIHx8CisJCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwogCisJCWlmICghZW50aXR5KQorCQkJY29udGludWU7CisKKwkJc2NoZWRfam9iID0gYW1kX3NjaGVkX2VudGl0eV9wb3Bfam9iKGVudGl0eSk7CiAJCWlmICghc2NoZWRfam9iKQogCQkJY29udGludWU7CiAKLQkJZW50aXR5ID0gc2NoZWRfam9iLT5zX2VudGl0eTsKIAkJc19mZW5jZSA9IHNjaGVkX2pvYi0+c19mZW5jZTsKIAogCQlpZiAoc2NoZWQtPnRpbWVvdXQgIT0gTUFYX1NDSEVEVUxFX1RJTUVPVVQpIHsKQEAgLTQwNSw2ICs0NDIsNyBAQAogCiAJCWF0b21pY19pbmMoJnNjaGVkLT5od19ycV9jb3VudCk7CiAJCWZlbmNlID0gc2NoZWQtPm9wcy0+cnVuX2pvYihzY2hlZF9qb2IpOworCQlhbWRfc2NoZWRfZmVuY2Vfc2NoZWR1bGVkKHNfZmVuY2UpOwogCQlpZiAoZmVuY2UpIHsKIAkJCXIgPSBmZW5jZV9hZGRfY2FsbGJhY2soZmVuY2UsICZzX2ZlbmNlLT5jYiwKIAkJCQkJICAgICAgIGFtZF9zY2hlZF9wcm9jZXNzX2pvYik7CkBAIC00NTAsNiArNDg4LDEzIEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2NoZWQtPndha2VfdXBfd29ya2VyKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzY2hlZC0+am9iX3NjaGVkdWxlZCk7CiAJYXRvbWljX3NldCgmc2NoZWQtPmh3X3JxX2NvdW50LCAwKTsKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNjaGVkX2ZlbmNlX3NsYWJfcmVmKSA9PSAxKSB7CisJCXNjaGVkX2ZlbmNlX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgKKwkJCSJhbWRfc2NoZWRfZmVuY2UiLCBzaXplb2Yoc3RydWN0IGFtZF9zY2hlZF9mZW5jZSksIDAsCisJCQlTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCQlpZiAoIXNjaGVkX2ZlbmNlX3NsYWIpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAkvKiBFYWNoIHNjaGVkdWxlciB3aWxsIHJ1biBvbiBhIHNlcGVyYXRlIGtlcm5lbCB0aHJlYWQgKi8KIAlzY2hlZC0+dGhyZWFkID0ga3RocmVhZF9ydW4oYW1kX3NjaGVkX21haW4sIHNjaGVkLCBzY2hlZC0+bmFtZSk7CkBAIC00NzAsNCArNTE1LDYgQEAKIHsKIAlpZiAoc2NoZWQtPnRocmVhZCkKIAkJa3RocmVhZF9zdG9wKHNjaGVkLT50aHJlYWQpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzY2hlZF9mZW5jZV9zbGFiX3JlZikpCisJCWttZW1fY2FjaGVfZGVzdHJveShzY2hlZF9mZW5jZV9zbGFiKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL2dwdV9zY2hlZHVsZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL2dwdV9zY2hlZHVsZXIuaAppbmRleCA5MjllOWFjLi5hMGYwYWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3NjaGVkdWxlci9ncHVfc2NoZWR1bGVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9zY2hlZHVsZXIvZ3B1X3NjaGVkdWxlci5oCkBAIC0yNyw5ICsyNywxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8bGludXgvZmVuY2UuaD4KIAorI2RlZmluZSBBTURfU0NIRURfRkVOQ0VfU0NIRURVTEVEX0JJVAlGRU5DRV9GTEFHX1VTRVJfQklUUworCiBzdHJ1Y3QgYW1kX2dwdV9zY2hlZHVsZXI7CiBzdHJ1Y3QgYW1kX3NjaGVkX3JxOwogCitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKnNjaGVkX2ZlbmNlX3NsYWI7CitleHRlcm4gYXRvbWljX3Qgc2NoZWRfZmVuY2Vfc2xhYl9yZWY7CisKIC8qKgogICogQSBzY2hlZHVsZXIgZW50aXR5IGlzIGEgd3JhcHBlciBhcm91bmQgYSBqb2IgcXVldWUgb3IgYSBncm91cAogICogb2Ygb3RoZXIgZW50aXRpZXMuIEVudGl0aWVzIHRha2UgdHVybnMgZW1pdHRpbmcgam9icyBmcm9tIHRoZWlyIApAQCAtNjUsNiArNzAsNyBAQAogc3RydWN0IGFtZF9zY2hlZF9mZW5jZSB7CiAJc3RydWN0IGZlbmNlICAgICAgICAgICAgICAgICAgICBiYXNlOwogCXN0cnVjdCBmZW5jZV9jYiAgICAgICAgICAgICAgICAgY2I7CisJc3RydWN0IGxpc3RfaGVhZAkJc2NoZWR1bGVkX2NiOwogCXN0cnVjdCBhbWRfZ3B1X3NjaGVkdWxlcgkqc2NoZWQ7CiAJc3BpbmxvY2tfdAkJCWxvY2s7CiAJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb3duZXI7CkBAIC03Niw3ICs4Miw2IEBACiAJc3RydWN0IGFtZF9ncHVfc2NoZWR1bGVyICAgICAgICAqc2NoZWQ7CiAJc3RydWN0IGFtZF9zY2hlZF9lbnRpdHkgICAgICAgICAqc19lbnRpdHk7CiAJc3RydWN0IGFtZF9zY2hlZF9mZW5jZSAgICAgICAgICAqc19mZW5jZTsKLQl2b2lkCQkgICAgICAgICAgICAgICAgKm93bmVyOwogfTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmZW5jZV9vcHMgYW1kX3NjaGVkX2ZlbmNlX29wczsKQEAgLTEyOCwxMSArMTMzLDExIEBACiAJCQkgIHVpbnQzMl90IGpvYnMpOwogdm9pZCBhbWRfc2NoZWRfZW50aXR5X2Zpbmkoc3RydWN0IGFtZF9ncHVfc2NoZWR1bGVyICpzY2hlZCwKIAkJCSAgIHN0cnVjdCBhbWRfc2NoZWRfZW50aXR5ICplbnRpdHkpOwotaW50IGFtZF9zY2hlZF9lbnRpdHlfcHVzaF9qb2Ioc3RydWN0IGFtZF9zY2hlZF9qb2IgKnNjaGVkX2pvYik7Cit2b2lkIGFtZF9zY2hlZF9lbnRpdHlfcHVzaF9qb2Ioc3RydWN0IGFtZF9zY2hlZF9qb2IgKnNjaGVkX2pvYik7CiAKIHN0cnVjdCBhbWRfc2NoZWRfZmVuY2UgKmFtZF9zY2hlZF9mZW5jZV9jcmVhdGUoCiAJc3RydWN0IGFtZF9zY2hlZF9lbnRpdHkgKnNfZW50aXR5LCB2b2lkICpvd25lcik7Cit2b2lkIGFtZF9zY2hlZF9mZW5jZV9zY2hlZHVsZWQoc3RydWN0IGFtZF9zY2hlZF9mZW5jZSAqZmVuY2UpOwogdm9pZCBhbWRfc2NoZWRfZmVuY2Vfc2lnbmFsKHN0cnVjdCBhbWRfc2NoZWRfZmVuY2UgKmZlbmNlKTsKIAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL3NjaGVkX2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3NjaGVkdWxlci9zY2hlZF9mZW5jZS5jCmluZGV4IGQ4MDI2MzguLjg3Yzc4ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvc2NoZWR1bGVyL3NjaGVkX2ZlbmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9zY2hlZHVsZXIvc2NoZWRfZmVuY2UuYwpAQCAtMzIsOSArMzIsMTEgQEAKIAlzdHJ1Y3QgYW1kX3NjaGVkX2ZlbmNlICpmZW5jZSA9IE5VTEw7CiAJdW5zaWduZWQgc2VxOwogCi0JZmVuY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYW1kX3NjaGVkX2ZlbmNlKSwgR0ZQX0tFUk5FTCk7CisJZmVuY2UgPSBrbWVtX2NhY2hlX3phbGxvYyhzY2hlZF9mZW5jZV9zbGFiLCBHRlBfS0VSTkVMKTsKIAlpZiAoZmVuY2UgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmZmVuY2UtPnNjaGVkdWxlZF9jYik7CiAJZmVuY2UtPm93bmVyID0gb3duZXI7CiAJZmVuY2UtPnNjaGVkID0gc19lbnRpdHktPnNjaGVkOwogCXNwaW5fbG9ja19pbml0KCZmZW5jZS0+bG9jayk7CkBAIC01NSw2ICs1NywxNyBAQAogCQlGRU5DRV9UUkFDRSgmZmVuY2UtPmJhc2UsICJ3YXMgYWxyZWFkeSBzaWduYWxlZFxuIik7CiB9CiAKK3ZvaWQgYW1kX3NjaGVkX2ZlbmNlX3NjaGVkdWxlZChzdHJ1Y3QgYW1kX3NjaGVkX2ZlbmNlICpzX2ZlbmNlKQoreworCXN0cnVjdCBmZW5jZV9jYiAqY3VyLCAqdG1wOworCisJc2V0X2JpdChBTURfU0NIRURfRkVOQ0VfU0NIRURVTEVEX0JJVCwgJnNfZmVuY2UtPmJhc2UuZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXIsIHRtcCwgJnNfZmVuY2UtPnNjaGVkdWxlZF9jYiwgbm9kZSkgeworCQlsaXN0X2RlbF9pbml0KCZjdXItPm5vZGUpOworCQljdXItPmZ1bmMoJnNfZmVuY2UtPmJhc2UsIGN1cik7CisJfQorfQorCiBzdGF0aWMgY29uc3QgY2hhciAqYW1kX3NjaGVkX2ZlbmNlX2dldF9kcml2ZXJfbmFtZShzdHJ1Y3QgZmVuY2UgKmZlbmNlKQogewogCXJldHVybiAiYW1kX3NjaGVkIjsKQEAgLTcxLDExICs4NCwxNyBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBhbWRfc2NoZWRfZmVuY2VfcmVsZWFzZShzdHJ1Y3QgZmVuY2UgKmYpCit7CisJc3RydWN0IGFtZF9zY2hlZF9mZW5jZSAqZmVuY2UgPSB0b19hbWRfc2NoZWRfZmVuY2UoZik7CisJa21lbV9jYWNoZV9mcmVlKHNjaGVkX2ZlbmNlX3NsYWIsIGZlbmNlKTsKK30KKwogY29uc3Qgc3RydWN0IGZlbmNlX29wcyBhbWRfc2NoZWRfZmVuY2Vfb3BzID0gewogCS5nZXRfZHJpdmVyX25hbWUgPSBhbWRfc2NoZWRfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lLAogCS5nZXRfdGltZWxpbmVfbmFtZSA9IGFtZF9zY2hlZF9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZSwKIAkuZW5hYmxlX3NpZ25hbGluZyA9IGFtZF9zY2hlZF9mZW5jZV9lbmFibGVfc2lnbmFsaW5nLAogCS5zaWduYWxlZCA9IE5VTEwsCiAJLndhaXQgPSBmZW5jZV9kZWZhdWx0X3dhaXQsCi0JLnJlbGVhc2UgPSBOVUxMLAorCS5yZWxlYXNlID0gYW1kX3NjaGVkX2ZlbmNlX3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKaW5kZXggN2JiMzg0NS4uYWVlZTA4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCkBAIC0xNDMyLDYgKzE0MzIsNDUgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGRybV9hdG9taWNfdXBkYXRlX29sZF9mYiAtLSBVbnNldCBvbGRfZmIgcG9pbnRlcnMgYW5kIHNldCBwbGFuZS0+ZmIgcG9pbnRlcnMuCisgKgorICogQGRldjogZHJtIGRldmljZSB0byBjaGVjay4KKyAqIEBwbGFuZV9tYXNrOiBwbGFuZSBtYXNrIGZvciBwbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQuCisgKiBAcmV0OiByZXR1cm4gdmFsdWUsIGNhbiBiZSAtRURFQURMSyBmb3IgYSByZXRyeS4KKyAqCisgKiBCZWZvcmUgZG9pbmcgYW4gdXBkYXRlIHBsYW5lLT5vbGRfZmIgaXMgc2V0IHRvIHBsYW5lLT5mYiwKKyAqIGJ1dCBiZWZvcmUgZHJvcHBpbmcgdGhlIGxvY2tzIG9sZF9mYiBuZWVkcyB0byBiZSBzZXQgdG8gTlVMTAorICogYW5kIHBsYW5lLT5mYiB1cGRhdGVkLiBUaGlzIGlzIGEgY29tbW9uIG9wZXJhdGlvbiBmb3IgZWFjaAorICogYXRvbWljIHVwZGF0ZSwgc28gdGhpcyBjYWxsIGlzIHNwbGl0IG9mZiBhcyBhIGhlbHBlci4KKyAqLwordm9pZCBkcm1fYXRvbWljX2NsZWFuX29sZF9mYihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICB1bnNpZ25lZCBwbGFuZV9tYXNrLAorCQkJICAgICBpbnQgcmV0KQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOworCisJLyogaWYgc3VjY2VlZGVkLCBmaXh1cCBsZWdhY3kgcGxhbmUgY3J0Yy9mYiBwdHJzIGJlZm9yZSBkcm9wcGluZworCSAqIGxvY2tzIChpZS4gd2hpbGUgaXQgaXMgc3RpbGwgc2FmZSB0byBkZXJlZiBwbGFuZS0+c3RhdGUpLiAgV2UKKwkgKiBuZWVkIHRvIGRvIHRoaXMgaGVyZSBiZWNhdXNlIHRoZSBkcml2ZXIgZW50cnkgcG9pbnRzIGNhbm5vdAorCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gbGVnYWN5IGFuZCBhdG9taWMgaW9jdGxzLgorCSAqLworCWRybV9mb3JfZWFjaF9wbGFuZV9tYXNrKHBsYW5lLCBkZXYsIHBsYW5lX21hc2spIHsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpuZXdfZmIgPSBwbGFuZS0+c3RhdGUtPmZiOworCQkJaWYgKG5ld19mYikKKwkJCQlkcm1fZnJhbWVidWZmZXJfcmVmZXJlbmNlKG5ld19mYik7CisJCQlwbGFuZS0+ZmIgPSBuZXdfZmI7CisJCQlwbGFuZS0+Y3J0YyA9IHBsYW5lLT5zdGF0ZS0+Y3J0YzsKKworCQkJaWYgKHBsYW5lLT5vbGRfZmIpCisJCQkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKHBsYW5lLT5vbGRfZmIpOworCQl9CisJCXBsYW5lLT5vbGRfZmIgPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19jbGVhbl9vbGRfZmIpOworCiBpbnQgZHJtX21vZGVfYXRvbWljX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewpAQCAtMTQ0Niw3ICsxNDg1LDcgQEAKIAlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCXVuc2lnbmVkIHBsYW5lX21hc2sgPSAwOworCXVuc2lnbmVkIHBsYW5lX21hc2s7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgaW50IGksIGo7CiAKQEAgLTE0ODYsNiArMTUyNSw3IEBACiAJc3RhdGUtPmFsbG93X21vZGVzZXQgPSAhIShhcmctPmZsYWdzICYgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQpOwogCiByZXRyeToKKwlwbGFuZV9tYXNrID0gMDsKIAljb3BpZWRfb2JqcyA9IDA7CiAJY29waWVkX3Byb3BzID0gMDsKIApAQCAtMTU3NiwyNCArMTYxNiw3IEBACiAJfQogCiBvdXQ6Ci0JLyogaWYgc3VjY2VlZGVkLCBmaXh1cCBsZWdhY3kgcGxhbmUgY3J0Yy9mYiBwdHJzIGJlZm9yZSBkcm9wcGluZwotCSAqIGxvY2tzIChpZS4gd2hpbGUgaXQgaXMgc3RpbGwgc2FmZSB0byBkZXJlZiBwbGFuZS0+c3RhdGUpLiAgV2UKLQkgKiBuZWVkIHRvIGRvIHRoaXMgaGVyZSBiZWNhdXNlIHRoZSBkcml2ZXIgZW50cnkgcG9pbnRzIGNhbm5vdAotCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gbGVnYWN5IGFuZCBhdG9taWMgaW9jdGxzLgotCSAqLwotCWRybV9mb3JfZWFjaF9wbGFuZV9tYXNrKHBsYW5lLCBkZXYsIHBsYW5lX21hc2spIHsKLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpuZXdfZmIgPSBwbGFuZS0+c3RhdGUtPmZiOwotCQkJaWYgKG5ld19mYikKLQkJCQlkcm1fZnJhbWVidWZmZXJfcmVmZXJlbmNlKG5ld19mYik7Ci0JCQlwbGFuZS0+ZmIgPSBuZXdfZmI7Ci0JCQlwbGFuZS0+Y3J0YyA9IHBsYW5lLT5zdGF0ZS0+Y3J0YzsKLQotCQkJaWYgKHBsYW5lLT5vbGRfZmIpCi0JCQkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKHBsYW5lLT5vbGRfZmIpOwotCQl9Ci0JCXBsYW5lLT5vbGRfZmIgPSBOVUxMOwotCX0KKwlkcm1fYXRvbWljX2NsZWFuX29sZF9mYihkZXYsIHBsYW5lX21hc2ssIHJldCk7CiAKIAlpZiAocmV0ICYmIGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQpIHsKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKaW5kZXggMGM2ZjYyMS4uZTVhZWM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKQEAgLTIxMCw2ICsyMTAsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKCFkcm1fZW5jb2Rlcl9jcnRjX29rKG5ld19lbmNvZGVyLCBjb25uZWN0b3Jfc3RhdGUtPmNydGMpKSB7CisJCURSTV9ERUJVR19BVE9NSUMoIltFTkNPREVSOiVkOiVzXSBpbmNvbXBhdGlibGUgd2l0aCBbQ1JUQzolZF1cbiIsCisJCQkJIG5ld19lbmNvZGVyLT5iYXNlLmlkLAorCQkJCSBuZXdfZW5jb2Rlci0+bmFtZSwKKwkJCQkgY29ubmVjdG9yX3N0YXRlLT5jcnRjLT5iYXNlLmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKG5ld19lbmNvZGVyID09IGNvbm5lY3Rvcl9zdGF0ZS0+YmVzdF9lbmNvZGVyKSB7CiAJCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6JWQ6JXNdIGtlZXBzIFtFTkNPREVSOiVkOiVzXSwgbm93IG9uIFtDUlRDOiVkXVxuIiwKIAkJCQkgY29ubmVjdG9yLT5iYXNlLmlkLApAQCAtMTU1Myw2ICsxNTYxLDkgQEAKIAkJZ290byBmYWlsOwogCX0KIAorCWlmIChwbGFuZV9zdGF0ZS0+Y3J0YyAmJiAocGxhbmUgPT0gcGxhbmUtPmNydGMtPmN1cnNvcikpCisJCXBsYW5lX3N0YXRlLT5zdGF0ZS0+bGVnYWN5X2N1cnNvcl91cGRhdGUgPSB0cnVlOworCiAJcmV0ID0gX19kcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lKHBsYW5lLCBwbGFuZV9zdGF0ZSk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZhaWw7CkBAIC0xNjA1LDkgKzE2MTYsNiBAQAogCXBsYW5lX3N0YXRlLT5zcmNfaCA9IDA7CiAJcGxhbmVfc3RhdGUtPnNyY193ID0gMDsKIAotCWlmIChwbGFuZS0+Y3J0YyAmJiAocGxhbmUgPT0gcGxhbmUtPmNydGMtPmN1cnNvcikpCi0JCXBsYW5lX3N0YXRlLT5zdGF0ZS0+bGVnYWN5X2N1cnNvcl91cGRhdGUgPSB0cnVlOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NDEsNiArMTc0OSw3IEBACiAJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwogCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnByaW1hcnlfc3RhdGU7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gc2V0LT5jcnRjOworCWludCBoZGlzcGxheSwgdmRpc3BsYXk7CiAJaW50IHJldDsKIAogCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKQEAgLTE3ODMsMTkgKzE3OTIsMjEgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKKwlkcm1fY3J0Y19nZXRfaHZfdGltaW5nKHNldC0+bW9kZSwgJmhkaXNwbGF5LCAmdmRpc3BsYXkpOworCiAJZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lKHByaW1hcnlfc3RhdGUsIHNldC0+ZmIpOwogCXByaW1hcnlfc3RhdGUtPmNydGNfeCA9IDA7CiAJcHJpbWFyeV9zdGF0ZS0+Y3J0Y195ID0gMDsKLQlwcmltYXJ5X3N0YXRlLT5jcnRjX2ggPSBzZXQtPm1vZGUtPnZkaXNwbGF5OwotCXByaW1hcnlfc3RhdGUtPmNydGNfdyA9IHNldC0+bW9kZS0+aGRpc3BsYXk7CisJcHJpbWFyeV9zdGF0ZS0+Y3J0Y19oID0gdmRpc3BsYXk7CisJcHJpbWFyeV9zdGF0ZS0+Y3J0Y193ID0gaGRpc3BsYXk7CiAJcHJpbWFyeV9zdGF0ZS0+c3JjX3ggPSBzZXQtPnggPDwgMTY7CiAJcHJpbWFyeV9zdGF0ZS0+c3JjX3kgPSBzZXQtPnkgPDwgMTY7CiAJaWYgKHByaW1hcnlfc3RhdGUtPnJvdGF0aW9uICYgKEJJVChEUk1fUk9UQVRFXzkwKSB8IEJJVChEUk1fUk9UQVRFXzI3MCkpKSB7Ci0JCXByaW1hcnlfc3RhdGUtPnNyY19oID0gc2V0LT5tb2RlLT5oZGlzcGxheSA8PCAxNjsKLQkJcHJpbWFyeV9zdGF0ZS0+c3JjX3cgPSBzZXQtPm1vZGUtPnZkaXNwbGF5IDw8IDE2OworCQlwcmltYXJ5X3N0YXRlLT5zcmNfaCA9IGhkaXNwbGF5IDw8IDE2OworCQlwcmltYXJ5X3N0YXRlLT5zcmNfdyA9IHZkaXNwbGF5IDw8IDE2OwogCX0gZWxzZSB7Ci0JCXByaW1hcnlfc3RhdGUtPnNyY19oID0gc2V0LT5tb2RlLT52ZGlzcGxheSA8PCAxNjsKLQkJcHJpbWFyeV9zdGF0ZS0+c3JjX3cgPSBzZXQtPm1vZGUtPmhkaXNwbGF5IDw8IDE2OworCQlwcmltYXJ5X3N0YXRlLT5zcmNfaCA9IHZkaXNwbGF5IDw8IDE2OworCQlwcmltYXJ5X3N0YXRlLT5zcmNfdyA9IGhkaXNwbGF5IDw8IDE2OwogCX0KIAogY29tbWl0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKaW5kZXggOTM2MjYwOS4uN2RkNjcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCkBAIC0xNjAsNiArMTYwLDExIEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKKwlpZiAoIWZpbGVfcHJpdi0+YWxsb3dlZF9tYXN0ZXIpIHsKKwkJcmV0ID0gZHJtX25ld19zZXRfbWFzdGVyKGRldiwgZmlsZV9wcml2KTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCWZpbGVfcHJpdi0+bWlub3ItPm1hc3RlciA9IGRybV9tYXN0ZXJfZ2V0KGZpbGVfcHJpdi0+bWFzdGVyKTsKIAlmaWxlX3ByaXYtPmlzX21hc3RlciA9IDE7CiAJaWYgKGRldi0+ZHJpdmVyLT5tYXN0ZXJfc2V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCBlNjczYzEzLi42OWNiYWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTM0Miw2ICszNDIsNyBAQAogCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwogCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKIAlpbnQgaSwgcmV0OworCXVuc2lnbmVkIHBsYW5lX21hc2s7CiAKIAlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsKIAlpZiAoIXN0YXRlKQpAQCAtMzQ5LDExICszNTAsMTAgQEAKIAogCXN0YXRlLT5hY3F1aXJlX2N0eCA9IGRldi0+bW9kZV9jb25maWcuYWNxdWlyZV9jdHg7CiByZXRyeToKKwlwbGFuZV9tYXNrID0gMDsKIAlkcm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGRldikgewogCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKIAotCQlwbGFuZS0+b2xkX2ZiID0gcGxhbmUtPmZiOwotCiAJCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5lKTsKIAkJaWYgKElTX0VSUihwbGFuZV9zdGF0ZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIocGxhbmVfc3RhdGUpOwpAQCAtMzYyLDYgKzM2Miw5IEBACiAKIAkJcGxhbmVfc3RhdGUtPnJvdGF0aW9uID0gQklUKERSTV9ST1RBVEVfMCk7CiAKKwkJcGxhbmUtPm9sZF9mYiA9IHBsYW5lLT5mYjsKKwkJcGxhbmVfbWFzayB8PSAxIDw8IGRybV9wbGFuZV9pbmRleChwbGFuZSk7CisKIAkJLyogZGlzYWJsZSBub24tcHJpbWFyeTogKi8KIAkJaWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCiAJCQljb250aW51ZTsKQEAgLTM4MiwxOSArMzg1LDcgQEAKIAlyZXQgPSBkcm1fYXRvbWljX2NvbW1pdChzdGF0ZSk7CiAKIGZhaWw6Ci0JZHJtX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBkZXYpIHsKLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpuZXdfZmIgPSBwbGFuZS0+c3RhdGUtPmZiOwotCQkJaWYgKG5ld19mYikKLQkJCQlkcm1fZnJhbWVidWZmZXJfcmVmZXJlbmNlKG5ld19mYik7Ci0JCQlwbGFuZS0+ZmIgPSBuZXdfZmI7Ci0JCQlwbGFuZS0+Y3J0YyA9IHBsYW5lLT5zdGF0ZS0+Y3J0YzsKLQotCQkJaWYgKHBsYW5lLT5vbGRfZmIpCi0JCQkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKHBsYW5lLT5vbGRfZmIpOwotCQl9Ci0JCXBsYW5lLT5vbGRfZmIgPSBOVUxMOwotCX0KKwlkcm1fYXRvbWljX2NsZWFuX29sZF9mYihkZXYsIHBsYW5lX21hc2ssIHJldCk7CiAKIAlpZiAocmV0ID09IC1FREVBRExLKQogCQlnb3RvIGJhY2tvZmY7CkBAIC0xMjM2LDcgKzEyMjcsOSBAQAogCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OwogCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKIAlpbnQgaSwgcmV0OworCXVuc2lnbmVkIHBsYW5lX21hc2s7CiAKIAlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsKIAlpZiAoIXN0YXRlKQpAQCAtMTI0NCwxOSArMTIzNywyMiBAQAogCiAJc3RhdGUtPmFjcXVpcmVfY3R4ID0gZGV2LT5tb2RlX2NvbmZpZy5hY3F1aXJlX2N0eDsKIHJldHJ5OgorCXBsYW5lX21hc2sgPSAwOwogCWZvcihpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0OwogCiAJCW1vZGVfc2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0OwogCi0JCW1vZGVfc2V0LT5jcnRjLT5wcmltYXJ5LT5vbGRfZmIgPSBtb2RlX3NldC0+Y3J0Yy0+cHJpbWFyeS0+ZmI7Ci0KIAkJbW9kZV9zZXQtPnggPSB2YXItPnhvZmZzZXQ7CiAJCW1vZGVfc2V0LT55ID0gdmFyLT55b2Zmc2V0OwogCiAJCXJldCA9IF9fZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZyhtb2RlX3NldCwgc3RhdGUpOwogCQlpZiAocmV0ICE9IDApCiAJCQlnb3RvIGZhaWw7CisKKwkJcGxhbmUgPSBtb2RlX3NldC0+Y3J0Yy0+cHJpbWFyeTsKKwkJcGxhbmVfbWFzayB8PSBkcm1fcGxhbmVfaW5kZXgocGxhbmUpOworCQlwbGFuZS0+b2xkX2ZiID0gcGxhbmUtPmZiOwogCX0KIAogCXJldCA9IGRybV9hdG9taWNfY29tbWl0KHN0YXRlKTsKQEAgLTEyNjgsMjYgKzEyNjQsNyBAQAogCiAKIGZhaWw6Ci0JZm9yKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKLQkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQ7Ci0JCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwotCi0JCW1vZGVfc2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0OwotCQlwbGFuZSA9IG1vZGVfc2V0LT5jcnRjLT5wcmltYXJ5OwotCi0JCWlmIChyZXQgPT0gMCkgewotCQkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbmV3X2ZiID0gcGxhbmUtPnN0YXRlLT5mYjsKLQotCQkJaWYgKG5ld19mYikKLQkJCQlkcm1fZnJhbWVidWZmZXJfcmVmZXJlbmNlKG5ld19mYik7Ci0JCQlwbGFuZS0+ZmIgPSBuZXdfZmI7Ci0JCQlwbGFuZS0+Y3J0YyA9IHBsYW5lLT5zdGF0ZS0+Y3J0YzsKLQotCQkJaWYgKHBsYW5lLT5vbGRfZmIpCi0JCQkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKHBsYW5lLT5vbGRfZmIpOwotCQl9Ci0JCXBsYW5lLT5vbGRfZmIgPSBOVUxMOwotCX0KKwlkcm1fYXRvbWljX2NsZWFuX29sZF9mYihkZXYsIHBsYW5lX21hc2ssIHJldCk7CiAKIAlpZiAocmV0ID09IC1FREVBRExLKQogCQlnb3RvIGJhY2tvZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCmluZGV4IGM1OWNlNGQuLjZiNTYyNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCkBAIC0xMjYsNiArMTI2LDYwIEBACiB9CiAKIC8qKgorICogZHJtX25ld19zZXRfbWFzdGVyIC0gQWxsb2NhdGUgYSBuZXcgbWFzdGVyIG9iamVjdCBhbmQgYmVjb21lIG1hc3RlciBmb3IgdGhlCisgKiBhc3NvY2lhdGVkIG1hc3RlciByZWFsbS4KKyAqCisgKiBAZGV2OiBUaGUgYXNzb2NpYXRlZCBkZXZpY2UuCisgKiBAZnByaXY6IEZpbGUgcHJpdmF0ZSBpZGVudGlmeWluZyB0aGUgY2xpZW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBkZXY6OnN0cnVjdF9tdXRleCBoZWxkLgorICogUmV0dXJucyBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIFplcm8gb24gc3VjY2Vzcy4KKyAqLworaW50IGRybV9uZXdfc2V0X21hc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZwcml2KQoreworCXN0cnVjdCBkcm1fbWFzdGVyICpvbGRfbWFzdGVyOworCWludCByZXQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoJmRldi0+bWFzdGVyX211dGV4KTsKKworCS8qIGNyZWF0ZSBhIG5ldyBtYXN0ZXIgKi8KKwlmcHJpdi0+bWlub3ItPm1hc3RlciA9IGRybV9tYXN0ZXJfY3JlYXRlKGZwcml2LT5taW5vcik7CisJaWYgKCFmcHJpdi0+bWlub3ItPm1hc3RlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiB0YWtlIGFub3RoZXIgcmVmZXJlbmNlIGZvciB0aGUgY29weSBpbiB0aGUgbG9jYWwgZmlsZSBwcml2ICovCisJb2xkX21hc3RlciA9IGZwcml2LT5tYXN0ZXI7CisJZnByaXYtPm1hc3RlciA9IGRybV9tYXN0ZXJfZ2V0KGZwcml2LT5taW5vci0+bWFzdGVyKTsKKworCWlmIChkZXYtPmRyaXZlci0+bWFzdGVyX2NyZWF0ZSkgeworCQlyZXQgPSBkZXYtPmRyaXZlci0+bWFzdGVyX2NyZWF0ZShkZXYsIGZwcml2LT5tYXN0ZXIpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZXJyOworCX0KKwlpZiAoZGV2LT5kcml2ZXItPm1hc3Rlcl9zZXQpIHsKKwkJcmV0ID0gZGV2LT5kcml2ZXItPm1hc3Rlcl9zZXQoZGV2LCBmcHJpdiwgdHJ1ZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9lcnI7CisJfQorCisJZnByaXYtPmlzX21hc3RlciA9IDE7CisJZnByaXYtPmFsbG93ZWRfbWFzdGVyID0gMTsKKwlmcHJpdi0+YXV0aGVudGljYXRlZCA9IDE7CisJaWYgKG9sZF9tYXN0ZXIpCisJCWRybV9tYXN0ZXJfcHV0KCZvbGRfbWFzdGVyKTsKKworCXJldHVybiAwOworCitvdXRfZXJyOgorCS8qIGRyb3AgYm90aCByZWZlcmVuY2VzIGFuZCByZXN0b3JlIG9sZCBtYXN0ZXIgb24gZmFpbHVyZSAqLworCWRybV9tYXN0ZXJfcHV0KCZmcHJpdi0+bWlub3ItPm1hc3Rlcik7CisJZHJtX21hc3Rlcl9wdXQoJmZwcml2LT5tYXN0ZXIpOworCWZwcml2LT5tYXN0ZXIgPSBvbGRfbWFzdGVyOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKiBDYWxsZWQgd2hlbmV2ZXIgYSBwcm9jZXNzIG9wZW5zIC9kZXYvZHJtLgogICoKICAqIFxwYXJhbSBmaWxwIGZpbGUgcG9pbnRlci4KQEAgLTE4OSwzNSArMjQzLDkgQEAKIAltdXRleF9sb2NrKCZkZXYtPm1hc3Rlcl9tdXRleCk7CiAJaWYgKGRybV9pc19wcmltYXJ5X2NsaWVudChwcml2KSAmJiAhcHJpdi0+bWlub3ItPm1hc3RlcikgewogCQkvKiBjcmVhdGUgYSBuZXcgbWFzdGVyICovCi0JCXByaXYtPm1pbm9yLT5tYXN0ZXIgPSBkcm1fbWFzdGVyX2NyZWF0ZShwcml2LT5taW5vcik7Ci0JCWlmICghcHJpdi0+bWlub3ItPm1hc3RlcikgewotCQkJcmV0ID0gLUVOT01FTTsKKwkJcmV0ID0gZHJtX25ld19zZXRfbWFzdGVyKGRldiwgcHJpdik7CisJCWlmIChyZXQpCiAJCQlnb3RvIG91dF9jbG9zZTsKLQkJfQotCi0JCXByaXYtPmlzX21hc3RlciA9IDE7Ci0JCS8qIHRha2UgYW5vdGhlciByZWZlcmVuY2UgZm9yIHRoZSBjb3B5IGluIHRoZSBsb2NhbCBmaWxlIHByaXYgKi8KLQkJcHJpdi0+bWFzdGVyID0gZHJtX21hc3Rlcl9nZXQocHJpdi0+bWlub3ItPm1hc3Rlcik7Ci0JCXByaXYtPmF1dGhlbnRpY2F0ZWQgPSAxOwotCi0JCWlmIChkZXYtPmRyaXZlci0+bWFzdGVyX2NyZWF0ZSkgewotCQkJcmV0ID0gZGV2LT5kcml2ZXItPm1hc3Rlcl9jcmVhdGUoZGV2LCBwcml2LT5tYXN0ZXIpOwotCQkJaWYgKHJldCkgewotCQkJCS8qIGRyb3AgYm90aCByZWZlcmVuY2VzIGlmIHRoaXMgZmFpbHMgKi8KLQkJCQlkcm1fbWFzdGVyX3B1dCgmcHJpdi0+bWlub3ItPm1hc3Rlcik7Ci0JCQkJZHJtX21hc3Rlcl9wdXQoJnByaXYtPm1hc3Rlcik7Ci0JCQkJZ290byBvdXRfY2xvc2U7Ci0JCQl9Ci0JCX0KLQkJaWYgKGRldi0+ZHJpdmVyLT5tYXN0ZXJfc2V0KSB7Ci0JCQlyZXQgPSBkZXYtPmRyaXZlci0+bWFzdGVyX3NldChkZXYsIHByaXYsIHRydWUpOwotCQkJaWYgKHJldCkgewotCQkJCS8qIGRyb3AgYm90aCByZWZlcmVuY2VzIGlmIHRoaXMgZmFpbHMgKi8KLQkJCQlkcm1fbWFzdGVyX3B1dCgmcHJpdi0+bWlub3ItPm1hc3Rlcik7Ci0JCQkJZHJtX21hc3Rlcl9wdXQoJnByaXYtPm1hc3Rlcik7Ci0JCQkJZ290byBvdXRfY2xvc2U7Ci0JCQl9Ci0JCX0KIAl9IGVsc2UgaWYgKGRybV9pc19wcmltYXJ5X2NsaWVudChwcml2KSkgewogCQkvKiBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIG1hc3RlciAqLwogCQlwcml2LT5tYXN0ZXIgPSBkcm1fbWFzdGVyX2dldChwcml2LT5taW5vci0+bWFzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCmluZGV4IDIxNTFlYTUuLjYwN2Y0OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwpAQCAtOTgwLDcgKzk4MCw4IEBACiAJCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUsCiAJCXVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3QgdGltZXZhbCAqbm93KQogewotCVdBUk5fT05fU01QKCFzcGluX2lzX2xvY2tlZCgmZGV2LT5ldmVudF9sb2NrKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZXYtPmV2ZW50X2xvY2spOworCiAJZS0+ZXZlbnQuc2VxdWVuY2UgPSBzZXE7CiAJZS0+ZXZlbnQudHZfc2VjID0gbm93LT50dl9zZWM7CiAJZS0+ZXZlbnQudHZfdXNlYyA9IG5vdy0+dHZfdXNlYzsKQEAgLTk5Myw2ICs5OTQsNTcgQEAKIH0KIAogLyoqCisgKiBkcm1fYXJtX3ZibGFua19ldmVudCAtIGFybSB2YmxhbmsgZXZlbnQgYWZ0ZXIgcGFnZWZsaXAKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBwaXBlOiBDUlRDIGluZGV4CisgKiBAZTogdGhlIGV2ZW50IHRvIHByZXBhcmUgdG8gc2VuZAorICoKKyAqIEEgbG90IG9mIGRyaXZlcnMgbmVlZCB0byBnZW5lcmF0ZSB2YmxhbmsgZXZlbnRzIGZvciB0aGUgdmVyeSBuZXh0IHZibGFuaworICogaW50ZXJydXB0LiBGb3IgZXhhbXBsZSB3aGVuIHRoZSBwYWdlIGZsaXAgaW50ZXJydXB0IGhhcHBlbnMgd2hlbiB0aGUgcGFnZQorICogZmxpcCBnZXRzIGFybWVkLCBidXQgbm90IHdoZW4gaXQgYWN0dWFsbHkgZXhlY3V0ZXMgd2l0aGluIHRoZSBuZXh0IHZibGFuaworICogcGVyaW9kLiBUaGlzIGhlbHBlciBmdW5jdGlvbiBpbXBsZW1lbnRzIGV4YWN0bHkgdGhlIHJlcXVpcmVkIHZibGFuayBhcm1pbmcKKyAqIGJlaGF2aW91ci4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIGV2ZW50IGxvY2suIENhbGxlciBtdXN0IGFsc28gaG9sZCBhIHZibGFuayByZWZlcmVuY2UgZm9yCisgKiB0aGUgZXZlbnQgQGUsIHdoaWNoIHdpbGwgYmUgZHJvcHBlZCB3aGVuIHRoZSBuZXh0IHZibGFuayBhcnJpdmVzLgorICoKKyAqIFRoaXMgaXMgdGhlIGxlZ2FjeSB2ZXJzaW9uIG9mIGRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoKS4KKyAqLwordm9pZCBkcm1fYXJtX3ZibGFua19ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJCSAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSkKK3sKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRldi0+ZXZlbnRfbG9jayk7CisKKwllLT5waXBlID0gcGlwZTsKKwllLT5ldmVudC5zZXF1ZW5jZSA9IGRybV92YmxhbmtfY291bnQoZGV2LCBwaXBlKTsKKwlsaXN0X2FkZF90YWlsKCZlLT5iYXNlLmxpbmssICZkZXYtPnZibGFua19ldmVudF9saXN0KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2FybV92YmxhbmtfZXZlbnQpOworCisvKioKKyAqIGRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQgLSBhcm0gdmJsYW5rIGV2ZW50IGFmdGVyIHBhZ2VmbGlwCisgKiBAY3J0YzogdGhlIHNvdXJjZSBDUlRDIG9mIHRoZSB2YmxhbmsgZXZlbnQKKyAqIEBlOiB0aGUgZXZlbnQgdG8gc2VuZAorICoKKyAqIEEgbG90IG9mIGRyaXZlcnMgbmVlZCB0byBnZW5lcmF0ZSB2YmxhbmsgZXZlbnRzIGZvciB0aGUgdmVyeSBuZXh0IHZibGFuaworICogaW50ZXJydXB0LiBGb3IgZXhhbXBsZSB3aGVuIHRoZSBwYWdlIGZsaXAgaW50ZXJydXB0IGhhcHBlbnMgd2hlbiB0aGUgcGFnZQorICogZmxpcCBnZXRzIGFybWVkLCBidXQgbm90IHdoZW4gaXQgYWN0dWFsbHkgZXhlY3V0ZXMgd2l0aGluIHRoZSBuZXh0IHZibGFuaworICogcGVyaW9kLiBUaGlzIGhlbHBlciBmdW5jdGlvbiBpbXBsZW1lbnRzIGV4YWN0bHkgdGhlIHJlcXVpcmVkIHZibGFuayBhcm1pbmcKKyAqIGJlaGF2aW91ci4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIGV2ZW50IGxvY2suIENhbGxlciBtdXN0IGFsc28gaG9sZCBhIHZibGFuayByZWZlcmVuY2UgZm9yCisgKiB0aGUgZXZlbnQgQGUsIHdoaWNoIHdpbGwgYmUgZHJvcHBlZCB3aGVuIHRoZSBuZXh0IHZibGFuayBhcnJpdmVzLgorICoKKyAqIFRoaXMgaXMgdGhlIG5hdGl2ZSBLTVMgdmVyc2lvbiBvZiBkcm1fYXJtX3ZibGFua19ldmVudCgpLgorICovCit2b2lkIGRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJICAgICAgIHN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUpCit7CisJZHJtX2FybV92YmxhbmtfZXZlbnQoY3J0Yy0+ZGV2LCBkcm1fY3J0Y19pbmRleChjcnRjKSwgZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQpOworCisvKioKICAqIGRybV9zZW5kX3ZibGFua19ldmVudCAtIGhlbHBlciB0byBzZW5kIHZibGFuayBldmVudCBhZnRlciBwYWdlZmxpcAogICogQGRldjogRFJNIGRldmljZQogICogQHBpcGU6IENSVEMgaW5kZXgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2JlX2hlbHBlci5jCmluZGV4IGExODE2NGYuLmY4YjVmY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYwpAQCAtMjI5LDcgKzIyOSw4IEBACiAJCW1vZGVfZmxhZ3MgfD0gRFJNX01PREVfRkxBR18zRF9NQVNLOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkgewotCQltb2RlLT5zdGF0dXMgPSBkcm1fbW9kZV92YWxpZGF0ZV9iYXNpYyhtb2RlKTsKKwkJaWYgKG1vZGUtPnN0YXR1cyA9PSBNT0RFX09LKQorCQkJbW9kZS0+c3RhdHVzID0gZHJtX21vZGVfdmFsaWRhdGVfYmFzaWMobW9kZSk7CiAKIAkJaWYgKG1vZGUtPnN0YXR1cyA9PSBNT0RFX09LKQogCQkJbW9kZS0+c3RhdHVzID0gZHJtX21vZGVfdmFsaWRhdGVfc2l6ZShtb2RlLCBtYXhYLCBtYXhZKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fY3J0Yy5jCmluZGV4IGIzYmEyN2YuLmU2OTM1NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2NydGMuYwpAQCAtNTUsNiArNTUsOSBAQAogewogCXN0cnVjdCBleHlub3NfZHJtX2NydGMgKmV4eW5vc19jcnRjID0gdG9fZXh5bm9zX2NydGMoY3J0Yyk7CiAKKwlpZiAoIXN0YXRlLT5lbmFibGUpCisJCXJldHVybiAwOworCiAJaWYgKGV4eW5vc19jcnRjLT5vcHMtPmF0b21pY19jaGVjaykKIAkJcmV0dXJuIGV4eW5vc19jcnRjLT5vcHMtPmF0b21pY19jaGVjayhleHlub3NfY3J0Yywgc3RhdGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCmluZGV4IGEzYjIyYmQuLjhhYWI5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC0yNzM0LDYgKzI3MzQsOCBAQAogCQlyZXR1cm4gIkFVWF9DIjsKIAljYXNlIFBPV0VSX0RPTUFJTl9BVVhfRDoKIAkJcmV0dXJuICJBVVhfRCI7CisJY2FzZSBQT1dFUl9ET01BSU5fR01CVVM6CisJCXJldHVybiAiR01CVVMiOwogCWNhc2UgUE9XRVJfRE9NQUlOX0lOSVQ6CiAJCXJldHVybiAiSU5JVCI7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDhhZmRhNDUuLmY0YWYxOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTk5LDYgKzE5OSw3IEBACiAJUE9XRVJfRE9NQUlOX0FVWF9CLAogCVBPV0VSX0RPTUFJTl9BVVhfQywKIAlQT1dFUl9ET01BSU5fQVVYX0QsCisJUE9XRVJfRE9NQUlOX0dNQlVTLAogCVBPV0VSX0RPTUFJTl9JTklULAogCiAJUE9XRVJfRE9NQUlOX05VTSwKQEAgLTM1MSw2ICszNTIsOCBAQAogCS8qIGhzdy9iZHcgKi8KIAlEUExMX0lEX1dSUExMMSA9IDAsCiAJRFBMTF9JRF9XUlBMTDIgPSAxLAorCURQTExfSURfU1BMTCA9IDIsCisKIAkvKiBza2wgKi8KIAlEUExMX0lEX1NLTF9EUExMMSA9IDAsCiAJRFBMTF9JRF9TS0xfRFBMTDIgPSAxLApAQCAtMzY3LDYgKzM3MCw3IEBACiAKIAkvKiBoc3csIGJkdyAqLwogCXVpbnQzMl90IHdycGxsOworCXVpbnQzMl90IHNwbGw7CiAKIAkvKiBza2wgKi8KIAkvKgpAQCAtMjE4OSw4ICsyMTkzLDE3IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZzsKIAotCS8qKiBHRU0gc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QuICovCi0JdWludDMyX3Qgc2Vxbm87CisJIC8qKiBHRU0gc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJldmlvdXMgcmVxdWVzdCwKKwkgICogd2hlbiB0aGUgSFdTIGJyZWFkY3J1bWIgaXMgZXF1YWwgdG8gdGhpcyB0aGUgR1BVIGlzIHByb2Nlc3NpbmcKKwkgICogdGhpcyByZXF1ZXN0LgorCSAgKi8KKwl1MzIgcHJldmlvdXNfc2Vxbm87CisKKwkgLyoqIEdFTSBzZXF1ZW5jZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCwKKwkgICogd2hlbiB0aGUgSFdTIGJyZWFkY3J1bWIgaXMgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoaXMgdGhlIEdQVQorCSAgKiBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QuCisJICAqLworCXUzMiBzZXFubzsKIAogCS8qKiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3QgKi8KIAl1MzIgaGVhZDsKQEAgLTI2NDgsNiArMjY2MSw3IEBACiAJaW50IGVuYWJsZV9jbWRfcGFyc2VyOwogCS8qIGxlYXZlIGJvb2xzIGF0IHRoZSBlbmQgdG8gbm90IGNyZWF0ZSBob2xlcyAqLwogCWJvb2wgZW5hYmxlX2hhbmdjaGVjazsKKwlib29sIGZhc3Rib290OwogCWJvb2wgcHJlZmF1bHRfZGlzYWJsZTsKIAlib29sIGxvYWRfZGV0ZWN0X3Rlc3Q7CiAJYm9vbCByZXNldDsKQEAgLTI4MzQsNiArMjg0OCw3IEBACiAKIGludCBpOTE1X3ZtYV9iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCiAJCSAgdTMyIGZsYWdzKTsKK3ZvaWQgX19pOTE1X3ZtYV9zZXRfbWFwX2FuZF9mZW5jZWFibGUoc3RydWN0IGk5MTVfdm1hICp2bWEpOwogaW50IF9fbXVzdF9jaGVjayBpOTE1X3ZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEpOwogLyoKICAqIEJFV0FSRTogRG8gbm90IHVzZSB0aGUgZnVuY3Rpb24gYmVsb3cgdW5sZXNzIHlvdSBjYW4gX2Fic29sdXRlbHlfCkBAIC0yOTA1LDE1ICsyOTIwLDE3IEBACiAJcmV0dXJuIChpbnQzMl90KShzZXExIC0gc2VxMikgPj0gMDsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJCQkJICAgYm9vbCBsYXp5X2NvaGVyZW5jeSkKK3sKKwl1MzIgc2Vxbm8gPSByZXEtPnJpbmctPmdldF9zZXFubyhyZXEtPnJpbmcsIGxhenlfY29oZXJlbmN5KTsKKwlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHJlcS0+cHJldmlvdXNfc2Vxbm8pOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCiAJCQkJCSAgICAgIGJvb2wgbGF6eV9jb2hlcmVuY3kpCiB7Ci0JdTMyIHNlcW5vOwotCi0JQlVHX09OKHJlcSA9PSBOVUxMKTsKLQotCXNlcW5vID0gcmVxLT5yaW5nLT5nZXRfc2Vxbm8ocmVxLT5yaW5nLCBsYXp5X2NvaGVyZW5jeSk7Ci0KKwl1MzIgc2Vxbm8gPSByZXEtPnJpbmctPmdldF9zZXFubyhyZXEtPnJpbmcsIGxhenlfY29oZXJlbmN5KTsKIAlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHJlcS0+c2Vxbm8pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCA1Y2Y0YTE5Li5mNTZhZjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTExNDYsMjMgKzExNDYsNzQgQEAKIAlyZXR1cm4gdGVzdF9iaXQocmluZy0+aWQsICZkZXZfcHJpdi0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmluZ3MpOwogfQogCi1zdGF0aWMgaW50IF9faTkxNV9zcGluX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2NhbF9jbG9ja191cyh1bnNpZ25lZCAqY3B1KQoreworCXVuc2lnbmVkIGxvbmcgdDsKKworCS8qIENoZWFwbHkgYW5kIGFwcHJveGltYXRlbHkgY29udmVydCBmcm9tIG5hbm9zZWNvbmRzIHRvIG1pY3Jvc2Vjb25kcy4KKwkgKiBUaGUgcmVzdWx0IGFuZCBzdWJzZXF1ZW50IGNhbGN1bGF0aW9ucyBhcmUgYWxzbyBkZWZpbmVkIGluIHRoZSBzYW1lCisJICogYXBwcm94aW1hdGUgbWljcm9zZWNvbmRzIHVuaXRzLiBUaGUgcHJpbmNpcGFsIHNvdXJjZSBvZiB0aW1pbmcKKwkgKiBlcnJvciBoZXJlIGlzIGZyb20gdGhlIHNpbXBsZSB0cnVuY2F0aW9uLgorCSAqCisJICogTm90ZSB0aGF0IGxvY2FsX2Nsb2NrKCkgaXMgb25seSBkZWZpbmVkIHdydCB0byB0aGUgY3VycmVudCBDUFU7CisJICogdGhlIGNvbXBhcmlzb25zIGFyZSBubyBsb25nZXIgdmFsaWQgaWYgd2Ugc3dpdGNoIENQVXMuIEluc3RlYWQgb2YKKwkgKiBibG9ja2luZyBwcmVlbXB0aW9uIGZvciB0aGUgZW50aXJlIGJ1c3l3YWl0LCB3ZSBjYW4gZGV0ZWN0IHRoZSBDUFUKKwkgKiBzd2l0Y2ggYW5kIHVzZSB0aGF0IGFzIGluZGljYXRvciBvZiBzeXN0ZW0gbG9hZCBhbmQgYSByZWFzb24gdG8KKwkgKiBzdG9wIGJ1c3l3YWl0aW5nLCBzZWUgYnVzeXdhaXRfc3RvcCgpLgorCSAqLworCSpjcHUgPSBnZXRfY3B1KCk7CisJdCA9IGxvY2FsX2Nsb2NrKCkgPj4gMTA7CisJcHV0X2NwdSgpOworCisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBib29sIGJ1c3l3YWl0X3N0b3AodW5zaWduZWQgbG9uZyB0aW1lb3V0LCB1bnNpZ25lZCBjcHUpCit7CisJdW5zaWduZWQgdGhpc19jcHU7CisKKwlpZiAodGltZV9hZnRlcihsb2NhbF9jbG9ja191cygmdGhpc19jcHUpLCB0aW1lb3V0KSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gdGhpc19jcHUgIT0gY3B1OworfQorCitzdGF0aWMgaW50IF9faTkxNV9zcGluX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgY3B1OwogCi0JaWYgKGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3JpbmcocmVxKS0+aXJxX3JlZmNvdW50KQorCS8qIFdoZW4gd2FpdGluZyBmb3IgaGlnaCBmcmVxdWVuY3kgcmVxdWVzdHMsIGUuZy4gZHVyaW5nIHN5bmNocm9ub3VzCisJICogcmVuZGVyaW5nIHNwbGl0IGJldHdlZW4gdGhlIENQVSBhbmQgR1BVLCB0aGUgZmluaXRlIGFtb3VudCBvZiB0aW1lCisJICogcmVxdWlyZWQgdG8gc2V0IHVwIHRoZSBpcnEgYW5kIHdhaXQgdXBvbiBpdCBsaW1pdHMgdGhlIHJlc3BvbnNlCisJICogcmF0ZS4gQnkgYnVzeXdhaXRpbmcgb24gdGhlIHJlcXVlc3QgY29tcGxldGlvbiBmb3IgYSBzaG9ydCB3aGlsZSB3ZQorCSAqIGNhbiBzZXJ2aWNlIHRoZSBoaWdoIGZyZXF1ZW5jeSB3YWl0cyBhcyBxdWljayBhcyBwb3NzaWJsZS4gSG93ZXZlciwKKwkgKiBpZiBpdCBpcyBhIHNsb3cgcmVxdWVzdCwgd2Ugd2FudCB0byBzbGVlcCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgorCSAqIFRoZSB0cmFkZW9mZiBiZXR3ZWVuIHdhaXRpbmcgYW5kIHNsZWVwaW5nIGlzIHJvdWdobHkgdGhlIHRpbWUgaXQKKwkgKiB0YWtlcyB0byBzbGVlcCBvbiBhIHJlcXVlc3QsIG9uIHRoZSBvcmRlciBvZiBhIG1pY3Jvc2Vjb25kLgorCSAqLworCisJaWYgKHJlcS0+cmluZy0+aXJxX3JlZmNvdW50KQogCQlyZXR1cm4gLUVCVVNZOwogCi0JdGltZW91dCA9IGppZmZpZXMgKyAxOworCS8qIE9ubHkgc3BpbiBpZiB3ZSBrbm93IHRoZSBHUFUgaXMgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QgKi8KKwlpZiAoIWk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChyZXEsIHRydWUpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXRpbWVvdXQgPSBsb2NhbF9jbG9ja191cygmY3B1KSArIDU7CiAJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxLCB0cnVlKSkKIAkJCXJldHVybiAwOwogCi0JCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKQorCQlpZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUoc3RhdGUsIGN1cnJlbnQpKQorCQkJYnJlYWs7CisKKwkJaWYgKGJ1c3l3YWl0X3N0b3AodGltZW91dCwgY3B1KSkKIAkJCWJyZWFrOwogCiAJCWNwdV9yZWxheF9sb3dsYXRlbmN5KCk7CiAJfQorCiAJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgZmFsc2UpKQogCQlyZXR1cm4gMDsKIApAQCAtMTE5Nyw2ICsxMjQ4LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWNvbnN0IGJvb2wgaXJxX3Rlc3RfaW5fcHJvZ3Jlc3MgPQogCQlBQ0NFU1NfT05DRShkZXZfcHJpdi0+Z3B1X2Vycm9yLnRlc3RfaXJxX3JpbmdzKSAmIGludGVsX3JpbmdfZmxhZyhyaW5nKTsKKwlpbnQgc3RhdGUgPSBpbnRlcnJ1cHRpYmxlID8gVEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElCTEU7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0X2V4cGlyZTsKIAlzNjQgYmVmb3JlLCBub3c7CkBAIC0xMjEwLDggKzEyNjIsMTYgQEAKIAlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxLCB0cnVlKSkKIAkJcmV0dXJuIDA7CiAKLQl0aW1lb3V0X2V4cGlyZSA9IHRpbWVvdXQgPwotCQlqaWZmaWVzICsgbnNlY3NfdG9famlmZmllc190aW1lb3V0KCh1NjQpKnRpbWVvdXQpIDogMDsKKwl0aW1lb3V0X2V4cGlyZSA9IDA7CisJaWYgKHRpbWVvdXQpIHsKKwkJaWYgKFdBUk5fT04oKnRpbWVvdXQgPCAwKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgqdGltZW91dCA9PSAwKQorCQkJcmV0dXJuIC1FVElNRTsKKworCQl0aW1lb3V0X2V4cGlyZSA9IGppZmZpZXMgKyBuc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoKnRpbWVvdXQpOworCX0KIAogCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDYpCiAJCWdlbjZfcnBzX2Jvb3N0KGRldl9wcml2LCBycHMsIHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKQEAgLTEyMjEsNyArMTI4MSw3IEBACiAJYmVmb3JlID0ga3RpbWVfZ2V0X3Jhd19ucygpOwogCiAJLyogT3B0aW1pc3RpYyBzcGluIGZvciB0aGUgbmV4dCBqaWZmaWUgYmVmb3JlIHRvdWNoaW5nIElSUXMgKi8KLQlyZXQgPSBfX2k5MTVfc3Bpbl9yZXF1ZXN0KHJlcSk7CisJcmV0ID0gX19pOTE1X3NwaW5fcmVxdWVzdChyZXEsIHN0YXRlKTsKIAlpZiAocmV0ID09IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xMjMzLDggKzEyOTMsNyBAQAogCWZvciAoOzspIHsKIAkJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAKLQkJcHJlcGFyZV90b193YWl0KCZyaW5nLT5pcnFfcXVldWUsICZ3YWl0LAotCQkJCWludGVycnVwdGlibGUgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXByZXBhcmVfdG9fd2FpdCgmcmluZy0+aXJxX3F1ZXVlLCAmd2FpdCwgc3RhdGUpOwogCiAJCS8qIFdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBhbnkgZ3B1IHJlc2V0IGhhcHBlbmVkIGluIGJldHdlZW4KIAkJICogdGhlIGNhbGxlciBncmFiYmluZyB0aGUgc2Vxbm8gYW5kIG5vdyAuLi4gKi8KQEAgLTEyNTIsNyArMTMxMSw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChpbnRlcnJ1cHRpYmxlICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkpIHsKIAkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNTQ2LDYgKzI2MDUsNyBAQAogCXJlcXVlc3QtPmJhdGNoX29iaiA9IG9iajsKIAogCXJlcXVlc3QtPmVtaXR0ZWRfamlmZmllcyA9IGppZmZpZXM7CisJcmVxdWVzdC0+cHJldmlvdXNfc2Vxbm8gPSByaW5nLT5sYXN0X3N1Ym1pdHRlZF9zZXFubzsKIAlyaW5nLT5sYXN0X3N1Ym1pdHRlZF9zZXFubyA9IHJlcXVlc3QtPnNlcW5vOwogCWxpc3RfYWRkX3RhaWwoJnJlcXVlc3QtPmxpc3QsICZyaW5nLT5yZXF1ZXN0X2xpc3QpOwogCkBAIC0zODA5LDYgKzM4NjksNyBAQAogaW50IGk5MTVfZ2VtX3NldF9jYWNoaW5nX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQogeworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9jYWNoaW5nICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCWVudW0gaTkxNV9jYWNoZV9sZXZlbCBsZXZlbDsKQEAgLTM4MzcsOSArMzg5OCwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7CisKIAlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gcnBtX3B1dDsKIAogCW9iaiA9IHRvX2ludGVsX2JvKGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGUsIGFyZ3MtPmhhbmRsZSkpOwogCWlmICgmb2JqLT5iYXNlID09IE5VTEwpIHsKQEAgLTM4NTIsNiArMzkxNSw5IEBACiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CitycG1fcHV0OgorCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQwNjYsNiArNDEzMiwyOSBAQAogCXJldHVybiBmYWxzZTsKIH0KIAordm9pZCBfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNlYWJsZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gdm1hLT5vYmo7CisJYm9vbCBtYXBwYWJsZSwgZmVuY2VhYmxlOworCXUzMiBmZW5jZV9zaXplLCBmZW5jZV9hbGlnbm1lbnQ7CisKKwlmZW5jZV9zaXplID0gaTkxNV9nZW1fZ2V0X2d0dF9zaXplKG9iai0+YmFzZS5kZXYsCisJCQkJCSAgIG9iai0+YmFzZS5zaXplLAorCQkJCQkgICBvYmotPnRpbGluZ19tb2RlKTsKKwlmZW5jZV9hbGlnbm1lbnQgPSBpOTE1X2dlbV9nZXRfZ3R0X2FsaWdubWVudChvYmotPmJhc2UuZGV2LAorCQkJCQkJICAgICBvYmotPmJhc2Uuc2l6ZSwKKwkJCQkJCSAgICAgb2JqLT50aWxpbmdfbW9kZSwKKwkJCQkJCSAgICAgdHJ1ZSk7CisKKwlmZW5jZWFibGUgPSAodm1hLT5ub2RlLnNpemUgPT0gZmVuY2Vfc2l6ZSAmJgorCQkgICAgICh2bWEtPm5vZGUuc3RhcnQgJiAoZmVuY2VfYWxpZ25tZW50IC0gMSkpID09IDApOworCisJbWFwcGFibGUgPSAodm1hLT5ub2RlLnN0YXJ0ICsgZmVuY2Vfc2l6ZSA8PQorCQkgICAgdG9faTkxNShvYmotPmJhc2UuZGV2KS0+Z3R0Lm1hcHBhYmxlX2VuZCk7CisKKwlvYmotPm1hcF9hbmRfZmVuY2VhYmxlID0gbWFwcGFibGUgJiYgZmVuY2VhYmxlOworfQorCiBzdGF0aWMgaW50CiBpOTE1X2dlbV9vYmplY3RfZG9fcGluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCSAgICAgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKQEAgLTQxMzMsMjUgKzQyMjIsNyBAQAogCiAJaWYgKGdndHRfdmlldyAmJiBnZ3R0X3ZpZXctPnR5cGUgPT0gSTkxNV9HR1RUX1ZJRVdfTk9STUFMICYmCiAJICAgIChib3VuZCBeIHZtYS0+Ym91bmQpICYgR0xPQkFMX0JJTkQpIHsKLQkJYm9vbCBtYXBwYWJsZSwgZmVuY2VhYmxlOwotCQl1MzIgZmVuY2Vfc2l6ZSwgZmVuY2VfYWxpZ25tZW50OwotCi0JCWZlbmNlX3NpemUgPSBpOTE1X2dlbV9nZXRfZ3R0X3NpemUob2JqLT5iYXNlLmRldiwKLQkJCQkJCSAgIG9iai0+YmFzZS5zaXplLAotCQkJCQkJICAgb2JqLT50aWxpbmdfbW9kZSk7Ci0JCWZlbmNlX2FsaWdubWVudCA9IGk5MTVfZ2VtX2dldF9ndHRfYWxpZ25tZW50KG9iai0+YmFzZS5kZXYsCi0JCQkJCQkJICAgICBvYmotPmJhc2Uuc2l6ZSwKLQkJCQkJCQkgICAgIG9iai0+dGlsaW5nX21vZGUsCi0JCQkJCQkJICAgICB0cnVlKTsKLQotCQlmZW5jZWFibGUgPSAodm1hLT5ub2RlLnNpemUgPT0gZmVuY2Vfc2l6ZSAmJgotCQkJICAgICAodm1hLT5ub2RlLnN0YXJ0ICYgKGZlbmNlX2FsaWdubWVudCAtIDEpKSA9PSAwKTsKLQotCQltYXBwYWJsZSA9ICh2bWEtPm5vZGUuc3RhcnQgKyBmZW5jZV9zaXplIDw9Ci0JCQkgICAgZGV2X3ByaXYtPmd0dC5tYXBwYWJsZV9lbmQpOwotCi0JCW9iai0+bWFwX2FuZF9mZW5jZWFibGUgPSBtYXBwYWJsZSAmJiBmZW5jZWFibGU7Ci0KKwkJX19pOTE1X3ZtYV9zZXRfbWFwX2FuZF9mZW5jZWFibGUodm1hKTsKIAkJV0FSTl9PTihmbGFncyAmIFBJTl9NQVBQQUJMRSAmJiAhb2JqLT5tYXBfYW5kX2ZlbmNlYWJsZSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKaW5kZXggOGM2ODhhNS4uMDJjZWI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwpAQCAtMTQxLDggKzE0MSw2IEBACiAJaWYgKCFwcGd0dCkKIAkJcmV0dXJuOwogCi0JV0FSTl9PTighbGlzdF9lbXB0eSgmcHBndHQtPmJhc2UuYWN0aXZlX2xpc3QpKTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIG5leHQsICZwcGd0dC0+YmFzZS5pbmFjdGl2ZV9saXN0LAogCQkJCSBtbV9saXN0KSB7CiAJCWlmIChXQVJOX09OKF9faTkxNV92bWFfdW5iaW5kX25vX3dhaXQodm1hKSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2UuYwppbmRleCA0MGExMGIyLi5mMDEwMzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlLmMKQEAgLTY0MiwxMSArNjQyLDEwIEBACiAJCX0KIAogCQkvKiBjaGVjayBmb3IgTC1zaGFwZWQgbWVtb3J5IGFrYSBtb2RpZmllZCBlbmhhbmNlZCBhZGRyZXNzaW5nICovCi0JCWlmIChJU19HRU40KGRldikpIHsKLQkJCXVpbnQzMl90IGRkYzIgPSBJOTE1X1JFQUQoRENDMik7Ci0KLQkJCWlmICghKGRkYzIgJiBEQ0MyX01PRElGSUVEX0VOSEFOQ0VEX0RJU0FCTEUpKQotCQkJCWRldl9wcml2LT5xdWlya3MgfD0gUVVJUktfUElOX1NXSVpaTEVEX1BBR0VTOworCQlpZiAoSVNfR0VONChkZXYpICYmCisJCSAgICAhKEk5MTVfUkVBRChEQ0MyKSAmIERDQzJfTU9ESUZJRURfRU5IQU5DRURfRElTQUJMRSkpIHsKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CiAJCX0KIAogCQlpZiAoZGNjID09IDB4ZmZmZmZmZmYpIHsKQEAgLTY3NSwxNiArNjc0LDM1IEBACiAJCSAqIG1hdGNoaW5nLCB3aGljaCB3YXMgdGhlIGNhc2UgZm9yIHRoZSBzd2l6emxpbmcgcmVxdWlyZWQgaW4KIAkJICogdGhlIHRhYmxlIGFib3ZlLCBvciBmcm9tIHRoZSAxLWNoIHZhbHVlIGJlaW5nIGxlc3MgdGhhbgogCQkgKiB0aGUgbWluaW11bSBzaXplIG9mIGEgcmFuay4KKwkJICoKKwkJICogUmVwb3J0cyBpbmRpY2F0ZSB0aGF0IHRoZSBzd2l6emxpbmcgYWN0dWFsbHkKKwkJICogdmFyaWVzIGRlcGVuZGluZyB1cG9uIHBhZ2UgcGxhY2VtZW50IGluc2lkZSB0aGUKKwkJICogY2hhbm5lbHMsIGkuZS4gd2Ugc2VlIHN3aXp6bGVkIHBhZ2VzIHdoZXJlIHRoZQorCQkgKiBiYW5rcyBvZiBtZW1vcnkgYXJlIHBhaXJlZCBhbmQgdW5zd2l6emxlZCBvbiB0aGUKKwkJICogdW5ldmVuIHBvcnRpb24sIHNvIGxlYXZlIHRoYXQgYXMgdW5rbm93bi4KIAkJICovCi0JCWlmIChJOTE1X1JFQUQxNihDMERSQjMpICE9IEk5MTVfUkVBRDE2KEMxRFJCMykpIHsKLQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOwotCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7Ci0JCX0gZWxzZSB7CisJCWlmIChJOTE1X1JFQUQxNihDMERSQjMpID09IEk5MTVfUkVBRDE2KEMxRFJCMykpIHsKIAkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwOwogCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFXzk7CiAJCX0KIAl9CiAKKwlpZiAoc3dpenpsZV94ID09IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOIHx8CisJICAgIHN3aXp6bGVfeSA9PSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTikgeworCQkvKiBVc2Vyc3BhY2UgbGlrZXMgdG8gZXhwbG9kZSBpZiBpdCBzZWVzIHVua25vd24gc3dpenpsaW5nLAorCQkgKiBzbyBsaWUuIFdlIHdpbGwgZmluaXNoIHRoZSBsaWUgd2hlbiByZXBvcnRpbmcgdGhyb3VnaAorCQkgKiB0aGUgZ2V0LXRpbGluZy1pb2N0bCBieSByZXBvcnRpbmcgdGhlIHBoeXNpY2FsIHN3aXp6bGUKKwkJICogbW9kZSBhcyB1bmtub3duIGluc3RlYWQuCisJCSAqCisJCSAqIEFzIHdlIGRvbid0IHN0cmljdGx5IGtub3cgd2hhdCB0aGUgc3dpenpsaW5nIGlzLCBpdCBtYXkgYmUKKwkJICogYml0MTcgZGVwZW5kZW50LCBhbmQgc28gd2UgbmVlZCB0byBhbHNvIHByZXZlbnQgdGhlIHBhZ2VzCisJCSAqIGZyb20gYmVpbmcgbW92ZWQuCisJCSAqLworCQlkZXZfcHJpdi0+cXVpcmtzIHw9IFFVSVJLX1BJTl9TV0laWkxFRF9QQUdFUzsKKwkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCX0KKwogCWRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3ggPSBzd2l6emxlX3g7CiAJZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeSA9IHN3aXp6bGVfeTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKaW5kZXggNDNmMzVkMS4uODZjNzUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKQEAgLTI2NzYsNiArMjY3Niw3IEBACiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCXZtYS0+Ym91bmQgfD0gR0xPQkFMX0JJTkQ7CisJCV9faTkxNV92bWFfc2V0X21hcF9hbmRfZmVuY2VhYmxlKHZtYSk7CiAJCWxpc3RfYWRkX3RhaWwoJnZtYS0+bW1fbGlzdCwgJmdndHRfdm0tPmluYWN0aXZlX2xpc3QpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwppbmRleCBjZGFjZjNmLi44N2U5MTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwpAQCAtNjg3LDYgKzY4Nyw3IEBACiAJCX0KIAogCQl2bWEtPmJvdW5kIHw9IEdMT0JBTF9CSU5EOworCQlfX2k5MTVfdm1hX3NldF9tYXBfYW5kX2ZlbmNlYWJsZSh2bWEpOwogCQlsaXN0X2FkZF90YWlsKCZ2bWEtPm1tX2xpc3QsICZnZ3R0LT5pbmFjdGl2ZV9saXN0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGFyYW1zLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BhcmFtcy5jCmluZGV4IDk2YmIyMzguLjRiZTEzYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGFyYW1zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wYXJhbXMuYwpAQCAtNDAsNiArNDAsNyBAQAogCS5wcmVsaW1pbmFyeV9od19zdXBwb3J0ID0gSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfUFJFTElNSU5BUllfSFdfU1VQUE9SVCksCiAJLmRpc2FibGVfcG93ZXJfd2VsbCA9IC0xLAogCS5lbmFibGVfaXBzID0gMSwKKwkuZmFzdGJvb3QgPSAwLAogCS5wcmVmYXVsdF9kaXNhYmxlID0gMCwKIAkubG9hZF9kZXRlY3RfdGVzdCA9IDAsCiAJLnJlc2V0ID0gdHJ1ZSwKQEAgLTEzMyw2ICsxMzQsMTAgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZF91bnNhZmUoZW5hYmxlX2lwcywgaTkxNS5lbmFibGVfaXBzLCBpbnQsIDA2MDApOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfaXBzLCAiRW5hYmxlIElQUyAoZGVmYXVsdDogdHJ1ZSkiKTsKIAorbW9kdWxlX3BhcmFtX25hbWVkKGZhc3Rib290LCBpOTE1LmZhc3Rib290LCBib29sLCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZmFzdGJvb3QsCisJIlRyeSB0byBza2lwIHVubmVjZXNzYXJ5IG1vZGUgc2V0cyBhdCBib290IHRpbWUgKGRlZmF1bHQ6IGZhbHNlKSIpOworCiBtb2R1bGVfcGFyYW1fbmFtZWRfdW5zYWZlKHByZWZhdWx0X2Rpc2FibGUsIGk5MTUucHJlZmF1bHRfZGlzYWJsZSwgYm9vbCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByZWZhdWx0X2Rpc2FibGUsCiAJIkRpc2FibGUgcGFnZSBwcmVmYXVsdGluZyBmb3IgcHJlYWQvcHdyaXRlL3JlbG9jIChkZWZhdWx0OmZhbHNlKS4gIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCBiODRhYWEwLi42YTJjNzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtMTM4LDE4ICsxMzgsNiBAQAogCXBpcGVfY29uZmlnLT5iYXNlLmFkanVzdGVkX21vZGUuZmxhZ3MgfD0gaW50ZWxfY3J0X2dldF9mbGFncyhlbmNvZGVyKTsKIH0KIAotc3RhdGljIHZvaWQgaHN3X2NydF9wcmVfZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JV0FSTihJOTE1X1JFQUQoU1BMTF9DVEwpICYgU1BMTF9QTExfRU5BQkxFLCAiU1BMTCBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCUk5MTVfV1JJVEUoU1BMTF9DVEwsCi0JCSAgIFNQTExfUExMX0VOQUJMRSB8IFNQTExfUExMX0ZSRVFfMTM1ME1IeiB8IFNQTExfUExMX1NTQyk7Ci0JUE9TVElOR19SRUFEKFNQTExfQ1RMKTsKLQl1ZGVsYXkoMjApOwotfQotCiAvKiBOb3RlOiBUaGUgY2FsbGVyIGlzIHJlcXVpcmVkIHRvIGZpbHRlciBvdXQgZHBtcyBtb2RlcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQogICogcGxhdGZvcm0uICovCiBzdGF0aWMgdm9pZCBpbnRlbF9jcnRfc2V0X2RwbXMoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsIGludCBtb2RlKQpAQCAtMjE2LDE5ICsyMDQsNiBAQAogCWludGVsX2Rpc2FibGVfY3J0KGVuY29kZXIpOwogfQogCi1zdGF0aWMgdm9pZCBoc3dfY3J0X3Bvc3RfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1aW50MzJfdCB2YWw7Ci0KLQlEUk1fREVCVUdfS01TKCJEaXNhYmxpbmcgU1BMTFxuIik7Ci0JdmFsID0gSTkxNV9SRUFEKFNQTExfQ1RMKTsKLQlXQVJOX09OKCEodmFsICYgU1BMTF9QTExfRU5BQkxFKSk7Ci0JSTkxNV9XUklURShTUExMX0NUTCwgdmFsICYgflNQTExfUExMX0VOQUJMRSk7Ci0JUE9TVElOR19SRUFEKFNQTExfQ1RMKTsKLX0KLQogc3RhdGljIHZvaWQgaW50ZWxfZW5hYmxlX2NydChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0ICpjcnQgPSBpbnRlbF9lbmNvZGVyX3RvX2NydChlbmNvZGVyKTsKQEAgLTI4MCw2ICsyNTUsMTAgQEAKIAlpZiAoSEFTX0RESShkZXYpKSB7CiAJCXBpcGVfY29uZmlnLT5kZGlfcGxsX3NlbCA9IFBPUlRfQ0xLX1NFTF9TUExMOwogCQlwaXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9IDEzNTAwMCAqIDI7CisKKwkJcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUud3JwbGwgPSAwOworCQlwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5zcGxsID0KKwkJCVNQTExfUExMX0VOQUJMRSB8IFNQTExfUExMX0ZSRVFfMTM1ME1IeiB8IFNQTExfUExMX1NTQzsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTg2MCw4ICs4MzksNiBAQAogCWlmIChIQVNfRERJKGRldikpIHsKIAkJY3J0LT5iYXNlLmdldF9jb25maWcgPSBoc3dfY3J0X2dldF9jb25maWc7CiAJCWNydC0+YmFzZS5nZXRfaHdfc3RhdGUgPSBpbnRlbF9kZGlfZ2V0X2h3X3N0YXRlOwotCQljcnQtPmJhc2UucHJlX2VuYWJsZSA9IGhzd19jcnRfcHJlX2VuYWJsZTsKLQkJY3J0LT5iYXNlLnBvc3RfZGlzYWJsZSA9IGhzd19jcnRfcG9zdF9kaXNhYmxlOwogCX0gZWxzZSB7CiAJCWNydC0+YmFzZS5nZXRfY29uZmlnID0gaW50ZWxfY3J0X2dldF9jb25maWc7CiAJCWNydC0+YmFzZS5nZXRfaHdfc3RhdGUgPSBpbnRlbF9jcnRfZ2V0X2h3X3N0YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwppbmRleCBiMjVlOTlhLi5hNjc1MmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwpAQCAtMTI4Niw2ICsxMjg2LDE4IEBACiAJCX0KIAogCQljcnRjX3N0YXRlLT5kZGlfcGxsX3NlbCA9IFBPUlRfQ0xLX1NFTF9XUlBMTChwbGwtPmlkKTsKKwl9IGVsc2UgaWYgKGNydGNfc3RhdGUtPmRkaV9wbGxfc2VsID09IFBPUlRfQ0xLX1NFTF9TUExMKSB7CisJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IGNydGNfc3RhdGUtPmJhc2Uuc3RhdGU7CisJCXN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbF9jb25maWcgKnNwbGwgPQorCQkJJmludGVsX2F0b21pY19nZXRfc2hhcmVkX2RwbGxfc3RhdGUoc3RhdGUpW0RQTExfSURfU1BMTF07CisKKwkJaWYgKHNwbGwtPmNydGNfbWFzayAmJgorCQkgICAgV0FSTl9PTihzcGxsLT5od19zdGF0ZS5zcGxsICE9IGNydGNfc3RhdGUtPmRwbGxfaHdfc3RhdGUuc3BsbCkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJY3J0Y19zdGF0ZS0+c2hhcmVkX2RwbGwgPSBEUExMX0lEX1NQTEw7CisJCXNwbGwtPmh3X3N0YXRlLnNwbGwgPSBjcnRjX3N0YXRlLT5kcGxsX2h3X3N0YXRlLnNwbGw7CisJCXNwbGwtPmNydGNfbWFzayB8PSAxIDw8IGludGVsX2NydGMtPnBpcGU7CiAJfQogCiAJcmV0dXJuIHRydWU7CkBAIC0yNDM3LDcgKzI0NDksNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaHN3X2RkaV9wbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKK3N0YXRpYyB2b2lkIGhzd19kZGlfd3JwbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCkKIHsKIAlJOTE1X1dSSVRFKFdSUExMX0NUTChwbGwtPmlkKSwgcGxsLT5jb25maWcuaHdfc3RhdGUud3JwbGwpOwpAQCAtMjQ0NSw5ICsyNDU3LDE3IEBACiAJdWRlbGF5KDIwKTsKIH0KIAotc3RhdGljIHZvaWQgaHN3X2RkaV9wbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCitzdGF0aWMgdm9pZCBoc3dfZGRpX3NwbGxfZW5hYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCQlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCkKIHsKKwlJOTE1X1dSSVRFKFNQTExfQ1RMLCBwbGwtPmNvbmZpZy5od19zdGF0ZS5zcGxsKTsKKwlQT1NUSU5HX1JFQUQoU1BMTF9DVEwpOworCXVkZWxheSgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIGhzd19kZGlfd3JwbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCkKK3sKIAl1aW50MzJfdCB2YWw7CiAKIAl2YWwgPSBJOTE1X1JFQUQoV1JQTExfQ1RMKHBsbC0+aWQpKTsKQEAgLTI0NTUsOSArMjQ3NSwxOSBAQAogCVBPU1RJTkdfUkVBRChXUlBMTF9DVEwocGxsLT5pZCkpOwogfQogCi1zdGF0aWMgYm9vbCBoc3dfZGRpX3BsbF9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAgICAgc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICpwbGwsCi0JCQkJICAgICBzdHJ1Y3QgaW50ZWxfZHBsbF9od19zdGF0ZSAqaHdfc3RhdGUpCitzdGF0aWMgdm9pZCBoc3dfZGRpX3NwbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJIHN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbCAqcGxsKQoreworCXVpbnQzMl90IHZhbDsKKworCXZhbCA9IEk5MTVfUkVBRChTUExMX0NUTCk7CisJSTkxNV9XUklURShTUExMX0NUTCwgdmFsICYgflNQTExfUExMX0VOQUJMRSk7CisJUE9TVElOR19SRUFEKFNQTExfQ1RMKTsKK30KKworc3RhdGljIGJvb2wgaHN3X2RkaV93cnBsbF9nZXRfaHdfc3RhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCwKKwkJCQkgICAgICAgc3RydWN0IGludGVsX2RwbGxfaHdfc3RhdGUgKmh3X3N0YXRlKQogewogCXVpbnQzMl90IHZhbDsKIApAQCAtMjQ3MCwyNSArMjUwMCw1MCBAQAogCXJldHVybiB2YWwgJiBXUlBMTF9QTExfRU5BQkxFOwogfQogCitzdGF0aWMgYm9vbCBoc3dfZGRpX3NwbGxfZ2V0X2h3X3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbCwKKwkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfZHBsbF9od19zdGF0ZSAqaHdfc3RhdGUpCit7CisJdWludDMyX3QgdmFsOworCisJaWYgKCFpbnRlbF9kaXNwbGF5X3Bvd2VyX2lzX2VuYWJsZWQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9QTExTKSkKKwkJcmV0dXJuIGZhbHNlOworCisJdmFsID0gSTkxNV9SRUFEKFNQTExfQ1RMKTsKKwlod19zdGF0ZS0+c3BsbCA9IHZhbDsKKworCXJldHVybiB2YWwgJiBTUExMX1BMTF9FTkFCTEU7Cit9CisKKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoc3dfZGRpX3BsbF9uYW1lc1tdID0gewogCSJXUlBMTCAxIiwKIAkiV1JQTEwgMiIsCisJIlNQTEwiCiB9OwogCiBzdGF0aWMgdm9pZCBoc3dfc2hhcmVkX2RwbGxzX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCWludCBpOwogCi0JZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBsbCA9IDI7CisJZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBsbCA9IDM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBsbDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmlkID0gaTsKIAkJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5uYW1lID0gaHN3X2RkaV9wbGxfbmFtZXNbaV07Ci0JCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZGlzYWJsZSA9IGhzd19kZGlfcGxsX2Rpc2FibGU7Ci0JCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZW5hYmxlID0gaHN3X2RkaV9wbGxfZW5hYmxlOworCQlkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2ldLmRpc2FibGUgPSBoc3dfZGRpX3dycGxsX2Rpc2FibGU7CisJCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZW5hYmxlID0gaHN3X2RkaV93cnBsbF9lbmFibGU7CiAJCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZ2V0X2h3X3N0YXRlID0KLQkJCWhzd19kZGlfcGxsX2dldF9od19zdGF0ZTsKKwkJCWhzd19kZGlfd3JwbGxfZ2V0X2h3X3N0YXRlOwogCX0KKworCS8qIFNQTEwgaXMgc3BlY2lhbCwgYnV0IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGFueXdheS4uICovCisJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5pZCA9IGk7CisJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5uYW1lID0gaHN3X2RkaV9wbGxfbmFtZXNbaV07CisJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5kaXNhYmxlID0gaHN3X2RkaV9zcGxsX2Rpc2FibGU7CisJZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXS5lbmFibGUgPSBoc3dfZGRpX3NwbGxfZW5hYmxlOworCWRldl9wcml2LT5zaGFyZWRfZHBsbHNbaV0uZ2V0X2h3X3N0YXRlID0gaHN3X2RkaV9zcGxsX2dldF9od19zdGF0ZTsKKwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNrbF9kZGlfcGxsX25hbWVzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggZjYyZmZjMC4uMzJjZjk3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTE2LDYgKzExNiw3IEBACiBzdGF0aWMgdm9pZCBpcm9ubGFrZV9wZml0X2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMsIGJvb2wgZm9yY2UpOwogc3RhdGljIHZvaWQgaXJvbmxha2VfcGZpdF9lbmFibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpOwogc3RhdGljIHZvaWQgaW50ZWxfbW9kZXNldF9zZXR1cF9od19zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGludGVsX3ByZV9kaXNhYmxlX3ByaW1hcnkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCWludAltaW4sIG1heDsKQEAgLTI2MDcsNiArMjYwOCw4IEBACiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5ID0gaW50ZWxfY3J0Yy0+YmFzZS5wcmltYXJ5OwogCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0gcHJpbWFyeS0+c3RhdGU7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gaW50ZWxfY3J0Yy0+YmFzZS5zdGF0ZTsKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUocHJpbWFyeSk7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAKIAlpZiAoIXBsYW5lX2NvbmZpZy0+ZmIpCkBAIC0yNjQzLDE0ICsyNjQ2LDI4IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFdlJ3ZlIGZhaWxlZCB0byByZWNvbnN0cnVjdCB0aGUgQklPUyBGQi4gIEN1cnJlbnQgZGlzcGxheSBzdGF0ZQorCSAqIGluZGljYXRlcyB0aGF0IHRoZSBwcmltYXJ5IHBsYW5lIGlzIHZpc2libGUsIGJ1dCBoYXMgYSBOVUxMIEZCLAorCSAqIHdoaWNoIHdpbGwgbGVhZCB0byBwcm9ibGVtcyBsYXRlciBpZiB3ZSBkb24ndCBmaXggaXQgdXAuICBUaGUKKwkgKiBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBqdXN0IGRpc2FibGUgdGhlIHByaW1hcnkgcGxhbmUgbm93IGFuZAorCSAqIHByZXRlbmQgdGhlIEJJT1MgbmV2ZXIgaGFkIGl0IGVuYWJsZWQuCisJICovCisJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmVfc3RhdGUpLT52aXNpYmxlID0gZmFsc2U7CisJY3J0Y19zdGF0ZS0+cGxhbmVfbWFzayAmPSB+KDEgPDwgZHJtX3BsYW5lX2luZGV4KHByaW1hcnkpKTsKKwlpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KCZpbnRlbF9jcnRjLT5iYXNlKTsKKwlpbnRlbF9wbGFuZS0+ZGlzYWJsZV9wbGFuZShwcmltYXJ5LCAmaW50ZWxfY3J0Yy0+YmFzZSk7CisKIAlyZXR1cm47CiAKIHZhbGlkX2ZiOgotCXBsYW5lX3N0YXRlLT5zcmNfeCA9IHBsYW5lX3N0YXRlLT5zcmNfeSA9IDA7CisJcGxhbmVfc3RhdGUtPnNyY194ID0gMDsKKwlwbGFuZV9zdGF0ZS0+c3JjX3kgPSAwOwogCXBsYW5lX3N0YXRlLT5zcmNfdyA9IGZiLT53aWR0aCA8PCAxNjsKIAlwbGFuZV9zdGF0ZS0+c3JjX2ggPSBmYi0+aGVpZ2h0IDw8IDE2OwogCi0JcGxhbmVfc3RhdGUtPmNydGNfeCA9IHBsYW5lX3N0YXRlLT5zcmNfeSA9IDA7CisJcGxhbmVfc3RhdGUtPmNydGNfeCA9IDA7CisJcGxhbmVfc3RhdGUtPmNydGNfeSA9IDA7CiAJcGxhbmVfc3RhdGUtPmNydGNfdyA9IGZiLT53aWR0aDsKIAlwbGFuZV9zdGF0ZS0+Y3J0Y19oID0gZmItPmhlaWdodDsKIApAQCAtNDIzNyw2ICs0MjU0LDcgQEAKIAlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGwgKnBsbDsKIAlzdHJ1Y3QgaW50ZWxfc2hhcmVkX2RwbGxfY29uZmlnICpzaGFyZWRfZHBsbDsKIAllbnVtIGludGVsX2RwbGxfaWQgaTsKKwlpbnQgbWF4ID0gZGV2X3ByaXYtPm51bV9zaGFyZWRfZHBsbDsKIAogCXNoYXJlZF9kcGxsID0gaW50ZWxfYXRvbWljX2dldF9zaGFyZWRfZHBsbF9zdGF0ZShjcnRjX3N0YXRlLT5iYXNlLnN0YXRlKTsKIApAQCAtNDI3MSw5ICs0Mjg5LDExIEBACiAJCVdBUk5fT04oc2hhcmVkX2RwbGxbaV0uY3J0Y19tYXNrKTsKIAogCQlnb3RvIGZvdW5kOwotCX0KKwl9IGVsc2UgaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPCA5ICYmIEhBU19EREkoZGV2X3ByaXYpKQorCQkvKiBEbyBub3QgY29uc2lkZXIgU1BMTCAqLworCQltYXggPSAyOwogCi0JZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5udW1fc2hhcmVkX2RwbGw7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgewogCQlwbGwgPSAmZGV2X3ByaXYtPnNoYXJlZF9kcGxsc1tpXTsKIAogCQkvKiBPbmx5IHdhbnQgdG8gY2hlY2sgZW5hYmxlZCB0aW1pbmdzIGZpcnN0ICovCkBAIC01MTg5LDExICs1MjA5LDMxIEBACiAJY2FzZSBQT1JUX0U6CiAJCXJldHVybiBQT1dFUl9ET01BSU5fUE9SVF9ERElfRV8yX0xBTkVTOwogCWRlZmF1bHQ6Ci0JCVdBUk5fT05fT05DRSgxKTsKKwkJTUlTU0lOR19DQVNFKHBvcnQpOwogCQlyZXR1cm4gUE9XRVJfRE9NQUlOX1BPUlRfT1RIRVI7CiAJfQogfQogCitzdGF0aWMgZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3J0X3RvX2F1eF9wb3dlcl9kb21haW4oZW51bSBwb3J0IHBvcnQpCit7CisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSBQT1JUX0E6CisJCXJldHVybiBQT1dFUl9ET01BSU5fQVVYX0E7CisJY2FzZSBQT1JUX0I6CisJCXJldHVybiBQT1dFUl9ET01BSU5fQVVYX0I7CisJY2FzZSBQT1JUX0M6CisJCXJldHVybiBQT1dFUl9ET01BSU5fQVVYX0M7CisJY2FzZSBQT1JUX0Q6CisJCXJldHVybiBQT1dFUl9ET01BSU5fQVVYX0Q7CisJY2FzZSBQT1JUX0U6CisJCS8qIEZJWE1FOiBDaGVjayBWQlQgZm9yIGFjdHVhbCB3aXJpbmcgb2YgUE9SVCBFICovCisJCXJldHVybiBQT1dFUl9ET01BSU5fQVVYX0Q7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKHBvcnQpOworCQlyZXR1cm4gUE9XRVJfRE9NQUlOX0FVWF9BOworCX0KK30KKwogI2RlZmluZSBmb3JfZWFjaF9wb3dlcl9kb21haW4oZG9tYWluLCBtYXNrKQkJCQlcCiAJZm9yICgoZG9tYWluKSA9IDA7IChkb21haW4pIDwgUE9XRVJfRE9NQUlOX05VTTsgKGRvbWFpbikrKykJXAogCQlpZiAoKDEgPDwgKGRvbWFpbikpICYgKG1hc2spKQpAQCAtNTIyNSw2ICs1MjY1LDM2IEBACiAJfQogfQogCitlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluCitpbnRlbF9kaXNwbGF5X3BvcnRfYXV4X3Bvd2VyX2RvbWFpbihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZW5jb2Rlci0+YmFzZS5kZXY7CisJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQ7CisKKwlzd2l0Y2ggKGludGVsX2VuY29kZXItPnR5cGUpIHsKKwljYXNlIElOVEVMX09VVFBVVF9VTktOT1dOOgorCWNhc2UgSU5URUxfT1VUUFVUX0hETUk6CisJCS8qCisJCSAqIE9ubHkgRERJIHBsYXRmb3JtcyBzaG91bGQgZXZlciB1c2UgdGhlc2Ugb3V0cHV0IHR5cGVzLgorCQkgKiBXZSBjYW4gZ2V0IGhlcmUgYWZ0ZXIgdGhlIEhETUkgZGV0ZWN0IGNvZGUgaGFzIGFscmVhZHkgc2V0CisJCSAqIHRoZSB0eXBlIG9mIHRoZSBzaGFyZWQgZW5jb2Rlci4gU2luY2Ugd2UgY2FuJ3QgYmUgc3VyZQorCQkgKiB3aGF0J3MgdGhlIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gY29ubmVjdG9ycywgcGxheSBzYWZlIGFuZAorCQkgKiBydW4gdGhlIERQIGRldGVjdGlvbiB0b28uCisJCSAqLworCQlXQVJOX09OX09OQ0UoIUhBU19EREkoZGV2KSk7CisJY2FzZSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQ6CisJY2FzZSBJTlRFTF9PVVRQVVRfRURQOgorCQlpbnRlbF9kaWdfcG9ydCA9IGVuY190b19kaWdfcG9ydCgmaW50ZWxfZW5jb2Rlci0+YmFzZSk7CisJCXJldHVybiBwb3J0X3RvX2F1eF9wb3dlcl9kb21haW4oaW50ZWxfZGlnX3BvcnQtPnBvcnQpOworCWNhc2UgSU5URUxfT1VUUFVUX0RQX01TVDoKKwkJaW50ZWxfZGlnX3BvcnQgPSBlbmNfdG9fbXN0KCZpbnRlbF9lbmNvZGVyLT5iYXNlKS0+cHJpbWFyeTsKKwkJcmV0dXJuIHBvcnRfdG9fYXV4X3Bvd2VyX2RvbWFpbihpbnRlbF9kaWdfcG9ydC0+cG9ydCk7CisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKGludGVsX2VuY29kZXItPnR5cGUpOworCQlyZXR1cm4gUE9XRVJfRE9NQUlOX0FVWF9BOworCX0KK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NydGNfcG93ZXJfZG9tYWlucyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKQEAgLTYyNTQsOSArNjMyNCwxMSBAQAogCWlmICh0b19pbnRlbF9wbGFuZV9zdGF0ZShjcnRjLT5wcmltYXJ5LT5zdGF0ZSktPnZpc2libGUpIHsKIAkJaW50ZWxfY3J0Y193YWl0X2Zvcl9wZW5kaW5nX2ZsaXBzKGNydGMpOwogCQlpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KGNydGMpOworCisJCWludGVsX2NydGNfZGlzYWJsZV9wbGFuZXMoY3J0YywgMSA8PCBkcm1fcGxhbmVfaW5kZXgoY3J0Yy0+cHJpbWFyeSkpOworCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShjcnRjLT5wcmltYXJ5LT5zdGF0ZSktPnZpc2libGUgPSBmYWxzZTsKIAl9CiAKLQlpbnRlbF9jcnRjX2Rpc2FibGVfcGxhbmVzKGNydGMsIGNydGMtPnN0YXRlLT5wbGFuZV9tYXNrKTsKIAlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUoY3J0Yyk7CiAJaW50ZWxfY3J0Yy0+YWN0aXZlID0gZmFsc2U7CiAJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoY3J0Yyk7CkBAIC05NzIzLDYgKzk3OTUsOCBAQAogCWNhc2UgUE9SVF9DTEtfU0VMX1dSUExMMjoKIAkJcGlwZV9jb25maWctPnNoYXJlZF9kcGxsID0gRFBMTF9JRF9XUlBMTDI7CiAJCWJyZWFrOworCWNhc2UgUE9SVF9DTEtfU0VMX1NQTEw6CisJCXBpcGVfY29uZmlnLT5zaGFyZWRfZHBsbCA9IERQTExfSURfU1BMTDsKIAl9CiB9CiAKQEAgLTk4NTEsMTQgKzk5MjUsMTQgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgaTg0NV91cGRhdGVfY3Vyc29yKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTMyIGJhc2UpCitzdGF0aWMgdm9pZCBpODQ1X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MzIgYmFzZSwgYm9vbCBvbikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwogCXVpbnQzMl90IGNudGwgPSAwLCBzaXplID0gMDsKIAotCWlmIChiYXNlKSB7CisJaWYgKG9uKSB7CiAJCXVuc2lnbmVkIGludCB3aWR0aCA9IGludGVsX2NydGMtPmJhc2UuY3Vyc29yLT5zdGF0ZS0+Y3J0Y193OwogCQl1bnNpZ25lZCBpbnQgaGVpZ2h0ID0gaW50ZWxfY3J0Yy0+YmFzZS5jdXJzb3ItPnN0YXRlLT5jcnRjX2g7CiAJCXVuc2lnbmVkIGludCBzdHJpZGUgPSByb3VuZHVwX3Bvd19vZl90d28od2lkdGgpICogNDsKQEAgLTk5MTMsMTYgKzk5ODcsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX2N1cnNvcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUzMiBiYXNlKQorc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfY3Vyc29yKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTMyIGJhc2UsIGJvb2wgb24pCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Ci0JdWludDMyX3QgY250bDsKKwl1aW50MzJfdCBjbnRsID0gMDsKIAotCWNudGwgPSAwOwotCWlmIChiYXNlKSB7CisJaWYgKG9uKSB7CiAJCWNudGwgPSBNQ1VSU09SX0dBTU1BX0VOQUJMRTsKIAkJc3dpdGNoIChpbnRlbF9jcnRjLT5iYXNlLmN1cnNvci0+c3RhdGUtPmNydGNfdykgewogCQkJY2FzZSA2NDoKQEAgLTk5NzMsMTggKzEwMDQ2LDE3IEBACiAJaW50IHkgPSBjdXJzb3Jfc3RhdGUtPmNydGNfeTsKIAl1MzIgYmFzZSA9IDAsIHBvcyA9IDA7CiAKLQlpZiAob24pCi0JCWJhc2UgPSBpbnRlbF9jcnRjLT5jdXJzb3JfYWRkcjsKKwliYXNlID0gaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHI7CiAKIAlpZiAoeCA+PSBpbnRlbF9jcnRjLT5jb25maWctPnBpcGVfc3JjX3cpCi0JCWJhc2UgPSAwOworCQlvbiA9IGZhbHNlOwogCiAJaWYgKHkgPj0gaW50ZWxfY3J0Yy0+Y29uZmlnLT5waXBlX3NyY19oKQotCQliYXNlID0gMDsKKwkJb24gPSBmYWxzZTsKIAogCWlmICh4IDwgMCkgewogCQlpZiAoeCArIGN1cnNvcl9zdGF0ZS0+Y3J0Y193IDw9IDApCi0JCQliYXNlID0gMDsKKwkJCW9uID0gZmFsc2U7CiAKIAkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJTT1JfWF9TSElGVDsKIAkJeCA9IC14OwpAQCAtOTk5MywxNiArMTAwNjUsMTMgQEAKIAogCWlmICh5IDwgMCkgewogCQlpZiAoeSArIGN1cnNvcl9zdGF0ZS0+Y3J0Y19oIDw9IDApCi0JCQliYXNlID0gMDsKKwkJCW9uID0gZmFsc2U7CiAKIAkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJTT1JfWV9TSElGVDsKIAkJeSA9IC15OwogCX0KIAlwb3MgfD0geSA8PCBDVVJTT1JfWV9TSElGVDsKIAotCWlmIChiYXNlID09IDAgJiYgaW50ZWxfY3J0Yy0+Y3Vyc29yX2Jhc2UgPT0gMCkKLQkJcmV0dXJuOwotCiAJSTkxNV9XUklURShDVVJQT1MocGlwZSksIHBvcyk7CiAKIAkvKiBJTEsrIGRvIHRoaXMgYXV0b21hZ2ljYWxseSAqLwpAQCAtMTAwMTMsOSArMTAwODIsOSBAQAogCX0KIAogCWlmIChJU184NDVHKGRldikgfHwgSVNfSTg2NUcoZGV2KSkKLQkJaTg0NV91cGRhdGVfY3Vyc29yKGNydGMsIGJhc2UpOworCQlpODQ1X3VwZGF0ZV9jdXJzb3IoY3J0YywgYmFzZSwgb24pOwogCWVsc2UKLQkJaTl4eF91cGRhdGVfY3Vyc29yKGNydGMsIGJhc2UpOworCQlpOXh4X3VwZGF0ZV9jdXJzb3IoY3J0YywgYmFzZSwgb24pOwogfQogCiBzdGF0aWMgYm9vbCBjdXJzb3Jfc2l6ZV9vayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LApAQCAtMTIwMDMsOSArMTIwNzIsMTAgQEAKIAkJCSAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmNmZ2NyMSwKIAkJCSAgICAgIHBpcGVfY29uZmlnLT5kcGxsX2h3X3N0YXRlLmNmZ2NyMik7CiAJfSBlbHNlIGlmIChIQVNfRERJKGRldikpIHsKLQkJRFJNX0RFQlVHX0tNUygiZGRpX3BsbF9zZWw6ICV1OyBkcGxsX2h3X3N0YXRlOiB3cnBsbDogMHgleFxuIiwKKwkJRFJNX0RFQlVHX0tNUygiZGRpX3BsbF9zZWw6ICV1OyBkcGxsX2h3X3N0YXRlOiB3cnBsbDogMHgleCBzcGxsOiAweCV4XG4iLAogCQkJICAgICAgcGlwZV9jb25maWctPmRkaV9wbGxfc2VsLAotCQkJICAgICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUud3JwbGwpOworCQkJICAgICAgcGlwZV9jb25maWctPmRwbGxfaHdfc3RhdGUud3JwbGwsCisJCQkgICAgICBwaXBlX2NvbmZpZy0+ZHBsbF9od19zdGF0ZS5zcGxsKTsKIAl9IGVsc2UgewogCQlEUk1fREVCVUdfS01TKCJkcGxsX2h3X3N0YXRlOiBkcGxsOiAweCV4LCBkcGxsX21kOiAweCV4LCAiCiAJCQkgICAgICAiZnAwOiAweCV4LCBmcDE6IDB4JXhcbiIsCkBAIC0xMjA1MywxOCArMTIxMjMsMjIgQEAKIHN0YXRpYyBib29sIGNoZWNrX2RpZ2l0YWxfcG9ydF9jb25mbGljdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2OwotCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgdXNlZF9wb3J0cyA9IDA7Ci0JaW50IGk7CiAKIAkvKgogCSAqIFdhbGsgdGhlIGNvbm5lY3RvciBsaXN0IGluc3RlYWQgb2YgdGhlIGVuY29kZXIKIAkgKiBsaXN0IHRvIGRldGVjdCB0aGUgcHJvYmxlbSBvbiBkZGkgcGxhdGZvcm1zCiAJICogd2hlcmUgdGhlcmUncyBqdXN0IG9uZSBlbmNvZGVyIHBlciBkaWdpdGFsIHBvcnQuCiAJICovCi0JZm9yX2VhY2hfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IsIGNvbm5lY3Rvcl9zdGF0ZSwgaSkgeworCWRybV9mb3JfZWFjaF9jb25uZWN0b3IoY29ubmVjdG9yLCBkZXYpIHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKKwkJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7CisKKwkJY29ubmVjdG9yX3N0YXRlID0gZHJtX2F0b21pY19nZXRfZXhpc3RpbmdfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOworCQlpZiAoIWNvbm5lY3Rvcl9zdGF0ZSkKKwkJCWNvbm5lY3Rvcl9zdGF0ZSA9IGNvbm5lY3Rvci0+c3RhdGU7CisKIAkJaWYgKCFjb25uZWN0b3Jfc3RhdGUtPmJlc3RfZW5jb2RlcikKIAkJCWNvbnRpbnVlOwogCkBAIC0xMjQ1Miw3ICsxMjUyNiw2IEBACiAJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgOCkgewogCQlQSVBFX0NPTkZfQ0hFQ0tfTV9OKGRwX21fbik7CiAKLQkJUElQRV9DT05GX0NIRUNLX0koaGFzX2RycnMpOwogCQlpZiAoY3VycmVudF9jb25maWctPmhhc19kcnJzKQogCQkJUElQRV9DT05GX0NIRUNLX01fTihkcF9tMl9uMik7CiAJfSBlbHNlCkBAIC0xMjUyOCw2ICsxMjYwMSw3IEBACiAJUElQRV9DT05GX0NIRUNLX1goZHBsbF9od19zdGF0ZS5mcDApOwogCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUuZnAxKTsKIAlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLndycGxsKTsKKwlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLnNwbGwpOwogCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUuY3RybDEpOwogCVBJUEVfQ09ORl9DSEVDS19YKGRwbGxfaHdfc3RhdGUuY2ZnY3IxKTsKIAlQSVBFX0NPTkZfQ0hFQ0tfWChkcGxsX2h3X3N0YXRlLmNmZ2NyMik7CkBAIC0xMzAzMiw2ICsxMzEwNiw5IEBACiAJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyA9CiAJCQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpOwogCisJCW1lbXNldCgmdG9faW50ZWxfY3J0YyhjcnRjKS0+YXRvbWljLCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbnRlbF9jcnRjX2F0b21pY19jb21taXQpKTsKKwogCQkvKiBDYXRjaCBJOTE1X01PREVfRkxBR19JTkhFUklURUQgKi8KIAkJaWYgKGNydGNfc3RhdGUtPm1vZGUucHJpdmF0ZV9mbGFncyAhPSBjcnRjLT5zdGF0ZS0+bW9kZS5wcml2YXRlX2ZsYWdzKQogCQkJY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKQEAgLTEzMDU2LDcgKzEzMTMzLDggQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJaWYgKGludGVsX3BpcGVfY29uZmlnX2NvbXBhcmUoc3RhdGUtPmRldiwKKwkJaWYgKGk5MTUuZmFzdGJvb3QgJiYKKwkJICAgIGludGVsX3BpcGVfY29uZmlnX2NvbXBhcmUoc3RhdGUtPmRldiwKIAkJCQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSksCiAJCQkJCXBpcGVfY29uZmlnLCB0cnVlKSkgewogCQkJY3J0Y19zdGF0ZS0+bW9kZV9jaGFuZ2VkID0gZmFsc2U7CkBAIC0xMzY1NCw2ICsxMzczMiw3IEBACiAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gY3J0Y19zdGF0ZS0+YmFzZS5jcnRjOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmJhc2UuZmI7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7CisJZW51bSBwaXBlIHBpcGUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSktPnBpcGU7CiAJdW5zaWduZWQgc3RyaWRlOwogCWludCByZXQ7CiAKQEAgLTEzNjg3LDYgKzEzNzY2LDIyIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qCisJICogVGhlcmUncyBzb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgY3Vyc29yIG9uIENIViBwaXBlIEMuCisJICogSWYgaXQgc3RyYWRkbGVzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHNjcmVlbiB0aGVuCisJICogbW92aW5nIGl0IGF3YXkgZnJvbSB0aGUgZWRnZSBvciBkaXNhYmxpbmcgaXQgb2Z0ZW4KKwkgKiByZXN1bHRzIGluIGEgcGlwZSB1bmRlcnJ1biwgYW5kIG9mdGVuIHRoYXQgY2FuIGxlYWQgdG8KKwkgKiBkZWFkIHBpcGUgKGNvbnN0YW50IHVuZGVycnVuIHJlcG9ydGVkLCBhbmQgaXQgc2NhbnMKKwkgKiBvdXQganVzdCBhIHNvbGlkIGNvbG9yKS4gVG8gcmVjb3ZlciBmcm9tIHRoYXQsIHRoZQorCSAqIGRpc3BsYXkgcG93ZXIgd2VsbCBtdXN0IGJlIHR1cm5lZCBvZmYgYW5kIG9uIGFnYWluLgorCSAqIFJlZnVzZSB0aGUgcHV0IHRoZSBjdXJzb3IgaW50byB0aGF0IGNvbXByb21pc2VkIHBvc2l0aW9uLgorCSAqLworCWlmIChJU19DSEVSUllWSUVXKHBsYW5lLT5kZXYpICYmIHBpcGUgPT0gUElQRV9DICYmCisJICAgIHN0YXRlLT52aXNpYmxlICYmIHN0YXRlLT5iYXNlLmNydGNfeCA8IDApIHsKKwkJRFJNX0RFQlVHX0tNUygiQ0hWIGN1cnNvciBDIG5vdCBhbGxvd2VkIHRvIHN0cmFkZGxlIHRoZSBsZWZ0IHNjcmVlbiBlZGdlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNzEwLDkgKzEzODA1LDYgQEAKIAljcnRjID0gY3J0YyA/IGNydGMgOiBwbGFuZS0+Y3J0YzsKIAlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAotCWlmIChpbnRlbF9jcnRjLT5jdXJzb3JfYm8gPT0gb2JqKQotCQlnb3RvIHVwZGF0ZTsKLQogCWlmICghb2JqKQogCQlhZGRyID0gMDsKIAllbHNlIGlmICghSU5URUxfSU5GTyhkZXYpLT5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpCkBAIC0xMzcyMSw5ICsxMzgxMyw3IEBACiAJCWFkZHIgPSBvYmotPnBoeXNfaGFuZGxlLT5idXNhZGRyOwogCiAJaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHIgPSBhZGRyOwotCWludGVsX2NydGMtPmN1cnNvcl9ibyA9IG9iajsKIAotdXBkYXRlOgogCWlmIChjcnRjLT5zdGF0ZS0+YWN0aXZlKQogCQlpbnRlbF9jcnRjX3VwZGF0ZV9jdXJzb3IoY3J0Yywgc3RhdGUtPnZpc2libGUpOwogfQpAQCAtMTQzNjQsMTYgKzE0NDU0LDE3IEBACiBzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCiBpbnRlbF91c2VyX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxwLAotCQkJICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQorCQkJICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKnVzZXJfbW9kZV9jbWQpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiBtb2RlX2NtZCA9ICp1c2VyX21vZGVfY21kOwogCiAJb2JqID0gdG9faW50ZWxfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlscCwKLQkJCQkJCW1vZGVfY21kLT5oYW5kbGVzWzBdKSk7CisJCQkJCQltb2RlX2NtZC5oYW5kbGVzWzBdKSk7CiAJaWYgKCZvYmotPmJhc2UgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKLQlyZXR1cm4gaW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKGRldiwgbW9kZV9jbWQsIG9iaik7CisJcmV0dXJuIGludGVsX2ZyYW1lYnVmZmVyX2NyZWF0ZShkZXYsICZtb2RlX2NtZCwgb2JqKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTgpAQCAtMTQ3MDUsNiArMTQ3OTYsOSBAQAogCS8qIEFwcGxlIE1hY2Jvb2sgMiwxIChDb3JlIDIgVDc0MDApICovCiAJeyAweDI3YTIsIDB4ODA4NiwgMHg3MjcwLCBxdWlya19iYWNrbGlnaHRfcHJlc2VudCB9LAogCisJLyogQXBwbGUgTWFjYm9vayA0LDEgKi8KKwl7IDB4MmEwMiwgMHgxMDZiLCAweDAwYTEsIHF1aXJrX2JhY2tsaWdodF9wcmVzZW50IH0sCisKIAkvKiBUb3NoaWJhIENCMzUgQ2hyb21lYm9vayAoQ2VsZXJvbiAyOTU1VSkgKi8KIAl7IDB4MGEwNiwgMHgxMTc5LCAweDBhODgsIHF1aXJrX2JhY2tsaWdodF9wcmVzZW50IH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IDA5YmRkOTQuLjc4YjhlYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJICogU2VlIHZsdl9wb3dlcl9zZXF1ZW5jZXJfcmVzZXQoKSB3aHkgd2UgbmVlZAogCSAqIGEgcG93ZXIgZG9tYWluIHJlZmVyZW5jZSBoZXJlLgogCSAqLwotCXBvd2VyX2RvbWFpbiA9IGludGVsX2Rpc3BsYXlfcG9ydF9wb3dlcl9kb21haW4oZW5jb2Rlcik7CisJcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X2F1eF9wb3dlcl9kb21haW4oZW5jb2Rlcik7CiAJaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7CiAKIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKQEAgLTI5Myw3ICsyOTMsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHBzX211dGV4KTsKIAotCXBvd2VyX2RvbWFpbiA9IGludGVsX2Rpc3BsYXlfcG9ydF9wb3dlcl9kb21haW4oZW5jb2Rlcik7CisJcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X2F1eF9wb3dlcl9kb21haW4oZW5jb2Rlcik7CiAJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7CiB9CiAKQEAgLTgxNiw4ICs4MTYsNiBAQAogCiAJaW50ZWxfZHBfY2hlY2tfZWRwKGludGVsX2RwKTsKIAotCWludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfZ2V0KGRldl9wcml2KTsKLQogCS8qIFRyeSB0byB3YWl0IGZvciBhbnkgcHJldmlvdXMgQVVYIGNoYW5uZWwgYWN0aXZpdHkgKi8KIAlmb3IgKHRyeSA9IDA7IHRyeSA8IDM7IHRyeSsrKSB7CiAJCXN0YXR1cyA9IEk5MTVfUkVBRF9OT1RSQUNFKGNoX2N0bCk7CkBAIC05MjYsNyArOTI0LDYgQEAKIAlyZXQgPSByZWN2X2J5dGVzOwogb3V0OgogCXBtX3Fvc191cGRhdGVfcmVxdWVzdCgmZGV2X3ByaXYtPnBtX3FvcywgUE1fUU9TX0RFRkFVTFRfVkFMVUUpOwotCWludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfcHV0KGRldl9wcml2KTsKIAogCWlmICh2ZGQpCiAJCWVkcF9wYW5lbF92ZGRfb2ZmKGludGVsX2RwLCBmYWxzZSk7CkBAIC0xNzg0LDcgKzE3ODEsNyBAQAogCWlmIChlZHBfaGF2ZV9wYW5lbF92ZGQoaW50ZWxfZHApKQogCQlyZXR1cm4gbmVlZF90b19kaXNhYmxlOwogCi0JcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X3Bvd2VyX2RvbWFpbihpbnRlbF9lbmNvZGVyKTsKKwlwb3dlcl9kb21haW4gPSBpbnRlbF9kaXNwbGF5X3BvcnRfYXV4X3Bvd2VyX2RvbWFpbihpbnRlbF9lbmNvZGVyKTsKIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKIAogCURSTV9ERUJVR19LTVMoIlR1cm5pbmcgZURQIHBvcnQgJWMgVkREIG9uXG4iLApAQCAtMTg3NCw3ICsxODcxLDcgQEAKIAlpZiAoKHBwICYgUE9XRVJfVEFSR0VUX09OKSA9PSAwKQogCQlpbnRlbF9kcC0+bGFzdF9wb3dlcl9jeWNsZSA9IGppZmZpZXM7CiAKLQlwb3dlcl9kb21haW4gPSBpbnRlbF9kaXNwbGF5X3BvcnRfcG93ZXJfZG9tYWluKGludGVsX2VuY29kZXIpOworCXBvd2VyX2RvbWFpbiA9IGludGVsX2Rpc3BsYXlfcG9ydF9hdXhfcG93ZXJfZG9tYWluKGludGVsX2VuY29kZXIpOwogCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4pOwogfQogCkBAIC0yMDI1LDcgKzIwMjIsNyBAQAogCXdhaXRfcGFuZWxfb2ZmKGludGVsX2RwKTsKIAogCS8qIFdlIGdvdCBhIHJlZmVyZW5jZSB3aGVuIHdlIGVuYWJsZWQgdGhlIFZERC4gKi8KLQlwb3dlcl9kb21haW4gPSBpbnRlbF9kaXNwbGF5X3BvcnRfcG93ZXJfZG9tYWluKGludGVsX2VuY29kZXIpOworCXBvd2VyX2RvbWFpbiA9IGludGVsX2Rpc3BsYXlfcG9ydF9hdXhfcG93ZXJfZG9tYWluKGludGVsX2VuY29kZXIpOwogCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4pOwogfQogCkBAIC00NzY1LDI2ICs0NzYyLDYgQEAKIAlpbnRlbF9kcC0+aGFzX2F1ZGlvID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluCi1pbnRlbF9kcF9wb3dlcl9nZXQoc3RydWN0IGludGVsX2RwICpkcCkKLXsKLQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciA9ICZkcF90b19kaWdfcG9ydChkcCktPmJhc2U7Ci0JZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47Ci0KLQlwb3dlcl9kb21haW4gPSBpbnRlbF9kaXNwbGF5X3BvcnRfcG93ZXJfZG9tYWluKGVuY29kZXIpOwotCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpLCBwb3dlcl9kb21haW4pOwotCi0JcmV0dXJuIHBvd2VyX2RvbWFpbjsKLX0KLQotc3RhdGljIHZvaWQKLWludGVsX2RwX3Bvd2VyX3B1dChzdHJ1Y3QgaW50ZWxfZHAgKmRwLAotCQkgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbikKLXsKLQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciA9ICZkcF90b19kaWdfcG9ydChkcCktPmJhc2U7Ci0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQodG9faTkxNShlbmNvZGVyLT5iYXNlLmRldiksIHBvd2VyX2RvbWFpbik7Ci19Ci0KIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCiBpbnRlbF9kcF9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKIHsKQEAgLTQ4MDgsNyArNDc4NSw4IEBACiAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAl9CiAKLQlwb3dlcl9kb21haW4gPSBpbnRlbF9kcF9wb3dlcl9nZXQoaW50ZWxfZHApOworCXBvd2VyX2RvbWFpbiA9IGludGVsX2Rpc3BsYXlfcG9ydF9hdXhfcG93ZXJfZG9tYWluKGludGVsX2VuY29kZXIpOworCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KHRvX2k5MTUoZGV2KSwgcG93ZXJfZG9tYWluKTsKIAogCS8qIENhbid0IGRpc2Nvbm5lY3QgZURQLCBidXQgeW91IGNhbiBjbG9zZSB0aGUgbGlkLi4uICovCiAJaWYgKGlzX2VkcChpbnRlbF9kcCkpCkBAIC00ODUzLDcgKzQ4MzEsNyBAQAogCX0KIAogb3V0OgotCWludGVsX2RwX3Bvd2VyX3B1dChpbnRlbF9kcCwgcG93ZXJfZG9tYWluKTsKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dCh0b19pOTE1KGRldiksIHBvd2VyX2RvbWFpbik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDg2Miw2ICs0ODQwLDcgQEAKIHsKIAlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gaW50ZWxfYXR0YWNoZWRfZHAoY29ubmVjdG9yKTsKIAlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciA9ICZkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2U7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShpbnRlbF9lbmNvZGVyLT5iYXNlLmRldik7CiAJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47CiAKIAlEUk1fREVCVUdfS01TKCJbQ09OTkVDVE9SOiVkOiVzXVxuIiwKQEAgLTQ4NzEsMTEgKzQ4NTAsMTIgQEAKIAlpZiAoY29ubmVjdG9yLT5zdGF0dXMgIT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpCiAJCXJldHVybjsKIAotCXBvd2VyX2RvbWFpbiA9IGludGVsX2RwX3Bvd2VyX2dldChpbnRlbF9kcCk7CisJcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X2F1eF9wb3dlcl9kb21haW4oaW50ZWxfZW5jb2Rlcik7CisJaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7CiAKIAlpbnRlbF9kcF9zZXRfZWRpZChpbnRlbF9kcCk7CiAKLQlpbnRlbF9kcF9wb3dlcl9wdXQoaW50ZWxfZHAsIHBvd2VyX2RvbWFpbik7CisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7CiAKIAlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQogCQlpbnRlbF9lbmNvZGVyLT50eXBlID0gSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUOwpAQCAtNTA5MSw3ICs1MDcxLDcgQEAKIAkgKiBpbmRlZmluaXRlbHkuCiAJICovCiAJRFJNX0RFQlVHX0tNUygiVkREIGxlZnQgb24gYnkgQklPUywgYWRqdXN0aW5nIHN0YXRlIHRyYWNraW5nXG4iKTsKLQlwb3dlcl9kb21haW4gPSBpbnRlbF9kaXNwbGF5X3BvcnRfcG93ZXJfZG9tYWluKCZpbnRlbF9kaWdfcG9ydC0+YmFzZSk7CisJcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X2F1eF9wb3dlcl9kb21haW4oJmludGVsX2RpZ19wb3J0LT5iYXNlKTsKIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKIAogCWVkcF9wYW5lbF92ZGRfc2NoZWR1bGVfb2ZmKGludGVsX2RwKTsKQEAgLTUxNTMsNyArNTEzMyw4IEBACiAJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47CiAJZW51bSBpcnFyZXR1cm4gcmV0ID0gSVJRX05PTkU7CiAKLQlpZiAoaW50ZWxfZGlnX3BvcnQtPmJhc2UudHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQorCWlmIChpbnRlbF9kaWdfcG9ydC0+YmFzZS50eXBlICE9IElOVEVMX09VVFBVVF9FRFAgJiYKKwkgICAgaW50ZWxfZGlnX3BvcnQtPmJhc2UudHlwZSAhPSBJTlRFTF9PVVRQVVRfSERNSSkKIAkJaW50ZWxfZGlnX3BvcnQtPmJhc2UudHlwZSA9IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVDsKIAogCWlmIChsb25nX2hwZCAmJiBpbnRlbF9kaWdfcG9ydC0+YmFzZS50eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsKQEAgLTUxNzIsNyArNTE1Myw3IEBACiAJCSAgICAgIHBvcnRfbmFtZShpbnRlbF9kaWdfcG9ydC0+cG9ydCksCiAJCSAgICAgIGxvbmdfaHBkID8gImxvbmciIDogInNob3J0Iik7CiAKLQlwb3dlcl9kb21haW4gPSBpbnRlbF9kaXNwbGF5X3BvcnRfcG93ZXJfZG9tYWluKGludGVsX2VuY29kZXIpOworCXBvd2VyX2RvbWFpbiA9IGludGVsX2Rpc3BsYXlfcG9ydF9hdXhfcG93ZXJfZG9tYWluKGludGVsX2VuY29kZXIpOwogCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBwb3dlcl9kb21haW4pOwogCiAJaWYgKGxvbmdfaHBkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDA1OTg5MzIuLjBkMDBmMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC01NTAsNyArNTUwLDYgQEAKIAlpbnQgYWRqdXN0ZWRfeDsKIAlpbnQgYWRqdXN0ZWRfeTsKIAotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjdXJzb3JfYm87CiAJdWludDMyX3QgY3Vyc29yX2FkZHI7CiAJdWludDMyX3QgY3Vyc29yX2NudGw7CiAJdWludDMyX3QgY3Vyc29yX3NpemU7CkBAIC0xMTY5LDYgKzExNjgsOCBAQAogdm9pZCBoc3dfZGlzYWJsZV9pcHMoc3RydWN0IGludGVsX2NydGMgKmNydGMpOwogZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbgogaW50ZWxfZGlzcGxheV9wb3J0X3Bvd2VyX2RvbWFpbihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2Rlcik7CitlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluCitpbnRlbF9kaXNwbGF5X3BvcnRfYXV4X3Bvd2VyX2RvbWFpbihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2Rlcik7CiB2b2lkIGludGVsX21vZGVfZnJvbV9waXBlX2NvbmZpZyhzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQkgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKIHZvaWQgaW50ZWxfY3J0Y193YWl0X2Zvcl9wZW5kaW5nX2ZsaXBzKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CkBAIC0xMzc3LDggKzEzNzgsNiBAQAogCQkJICAgICBlbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIGRvbWFpbik7CiB2b2lkIGludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICAgZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW4pOwotdm9pZCBpbnRlbF9hdXhfZGlzcGxheV9ydW50aW1lX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpbnRlbF9hdXhfZGlzcGxheV9ydW50aW1lX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9ydW50aW1lX3BtX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9ydW50aW1lX3BtX2dldF9ub3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF9ydW50aW1lX3BtX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IDllYWZhMTkuLmU2YzAzNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTEzMzUsMjEgKzEzMzUsMTcgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5lY3Rvci0+ZGV2KTsKIAlzdHJ1Y3QgaW50ZWxfaGRtaSAqaW50ZWxfaGRtaSA9IGludGVsX2F0dGFjaGVkX2hkbWkoY29ubmVjdG9yKTsKLQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciA9Ci0JCSZoZG1pX3RvX2RpZ19wb3J0KGludGVsX2hkbWkpLT5iYXNlOwotCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOwogCXN0cnVjdCBlZGlkICplZGlkID0gTlVMTDsKIAlib29sIGNvbm5lY3RlZCA9IGZhbHNlOwogCi0JcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X3Bvd2VyX2RvbWFpbihpbnRlbF9lbmNvZGVyKTsKLQlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0dNQlVTKTsKIAogCWlmIChmb3JjZSkKIAkJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsCiAJCQkJICAgIGludGVsX2dtYnVzX2dldF9hZGFwdGVyKGRldl9wcml2LAogCQkJCSAgICBpbnRlbF9oZG1pLT5kZGNfYnVzKSk7CiAKLQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0dNQlVTKTsKIAogCXRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpLT5kZXRlY3RfZWRpZCA9IGVkaWQ7CiAJaWYgKGVkaWQgJiYgZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKSB7CkBAIC0xMzc4LDE1ICsxMzc0LDE4IEBACiAJc3RydWN0IGludGVsX2hkbWkgKmludGVsX2hkbWkgPSBpbnRlbF9hdHRhY2hlZF9oZG1pKGNvbm5lY3Rvcik7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmRldik7CiAJYm9vbCBsaXZlX3N0YXR1cyA9IGZhbHNlOwotCXVuc2lnbmVkIGludCByZXRyeSA9IDM7CisJdW5zaWduZWQgaW50IHRyeTsKIAogCURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLAogCQkgICAgICBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSk7CiAKLQl3aGlsZSAoIWxpdmVfc3RhdHVzICYmIC0tcmV0cnkpIHsKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0dNQlVTKTsKKworCWZvciAodHJ5ID0gMDsgIWxpdmVfc3RhdHVzICYmIHRyeSA8IDk7IHRyeSsrKSB7CisJCWlmICh0cnkpCisJCQltc2xlZXAoMTApOwogCQlsaXZlX3N0YXR1cyA9IGludGVsX2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQoZGV2X3ByaXYsCiAJCQkJaGRtaV90b19kaWdfcG9ydChpbnRlbF9oZG1pKSk7Ci0JCW1kZWxheSgxMCk7CiAJfQogCiAJaWYgKCFsaXZlX3N0YXR1cykKQEAgLTE0MDIsNiArMTQwMSw4IEBACiAJfSBlbHNlCiAJCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwogCisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9HTUJVUyk7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCmluZGV4IDEzNjlmYzQuLjgzMjQ2NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jCkBAIC00ODMsNyArNDgzLDcgQEAKIAlpbnQgaSA9IDAsIGluYywgdHJ5ID0gMDsKIAlpbnQgcmV0ID0gMDsKIAotCWludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfZ2V0KGRldl9wcml2KTsKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0dNQlVTKTsKIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+Z21idXNfbXV0ZXgpOwogCiAJaWYgKGJ1cy0+Zm9yY2VfYml0KSB7CkBAIC01OTUsNyArNTk1LDkgQEAKIAogb3V0OgogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmdtYnVzX211dGV4KTsKLQlpbnRlbF9hdXhfZGlzcGxheV9ydW50aW1lX3B1dChkZXZfcHJpdik7CisKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0dNQlVTKTsKKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCmluZGV4IGQ1MmExNWQuLmYwOTFhZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAtNDQ0OSw3ICs0NDQ5LDcgQEAKIAlQT1NUSU5HX1JFQUQoR0VONl9SUE5TV1JFUSk7CiAKIAlkZXZfcHJpdi0+cnBzLmN1cl9mcmVxID0gdmFsOwotCXRyYWNlX2ludGVsX2dwdV9mcmVxX2NoYW5nZSh2YWwgKiA1MCk7CisJdHJhY2VfaW50ZWxfZ3B1X2ZyZXFfY2hhbmdlKGludGVsX2dwdV9mcmVxKGRldl9wcml2LCB2YWwpKTsKIH0KIAogc3RhdGljIHZvaWQgdmFsbGV5dmlld19zZXRfcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU4IHZhbCkKQEAgLTQ3ODIsOCArNDc4Miw3IEBACiAJLyogMmI6IFByb2dyYW0gUkM2IHRocmVzaG9sZHMuKi8KIAogCS8qIFdhUnNEb3VibGVSYzZXcmxXaXRoQ29hcnNlUG93ZXJHYXRpbmc6IERvdWJsaW5nIFdSTCBvbmx5IHdoZW4gQ1BHIGlzIGVuYWJsZWQgKi8KLQlpZiAoSVNfU0tZTEFLRShkZXYpICYmICEoKElTX1NLTF9HVDMoZGV2KSB8fCBJU19TS0xfR1Q0KGRldikpICYmCi0JCQkJIChJTlRFTF9SRVZJRChkZXYpIDw9IFNLTF9SRVZJRF9FMCkpKQorCWlmIChJU19TS1lMQUtFKGRldikpCiAJCUk5MTVfV1JJVEUoR0VONl9SQzZfV0FLRV9SQVRFX0xJTUlULCAxMDggPDwgMTYpOwogCWVsc2UKIAkJSTkxNV9XUklURShHRU42X1JDNl9XQUtFX1JBVEVfTElNSVQsIDU0IDw8IDE2KTsKQEAgLTQ4MjUsNyArNDgyNCw3IEBACiAJICogV2FSc0Rpc2FibGVDb2Fyc2VQb3dlckdhdGluZzpza2wsYnh0IC0gUmVuZGVyL01lZGlhIFBHIG5lZWQgdG8gYmUgZGlzYWJsZWQgd2l0aCBSQzYuCiAJICovCiAJaWYgKChJU19CUk9YVE9OKGRldikgJiYgKElOVEVMX1JFVklEKGRldikgPCBCWFRfUkVWSURfQjApKSB8fAotCSAgICAoKElTX1NLTF9HVDMoZGV2KSB8fCBJU19TS0xfR1Q0KGRldikpICYmIChJTlRFTF9SRVZJRChkZXYpIDw9IFNLTF9SRVZJRF9FMCkpKQorCSAgICAoKElTX1NLTF9HVDMoZGV2KSB8fCBJU19TS0xfR1Q0KGRldikpICYmIChJTlRFTF9SRVZJRChkZXYpIDw9IFNLTF9SRVZJRF9GMCkpKQogCQlJOTE1X1dSSVRFKEdFTjlfUEdfRU5BQkxFLCAwKTsKIAllbHNlCiAJCUk5MTVfV1JJVEUoR0VOOV9QR19FTkFCTEUsIChyYzZfbWFzayAmIEdFTjZfUkNfQ1RMX1JDNl9FTkFCTEUpID8KQEAgLTcyNTUsNyArNzI1NCw4IEBACiBpbnQgaW50ZWxfZ3B1X2ZyZXEoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmFsKQogewogCWlmIChJU19HRU45KGRldl9wcml2LT5kZXYpKQotCQlyZXR1cm4gKHZhbCAqIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSKSAvIEdFTjlfRlJFUV9TQ0FMRVI7CisJCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwgKiBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUiwKKwkJCQkJIEdFTjlfRlJFUV9TQ0FMRVIpOwogCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYtPmRldikpCiAJCXJldHVybiBjaHZfZ3B1X2ZyZXEoZGV2X3ByaXYsIHZhbCk7CiAJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdi0+ZGV2KSkKQEAgLTcyNjcsMTMgKzcyNjcsMTQgQEAKIGludCBpbnRlbF9mcmVxX29wY29kZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCB2YWwpCiB7CiAJaWYgKElTX0dFTjkoZGV2X3ByaXYtPmRldikpCi0JCXJldHVybiAodmFsICogR0VOOV9GUkVRX1NDQUxFUikgLyBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUjsKKwkJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZhbCAqIEdFTjlfRlJFUV9TQ0FMRVIsCisJCQkJCSBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7CiAJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdi0+ZGV2KSkKIAkJcmV0dXJuIGNodl9mcmVxX29wY29kZShkZXZfcHJpdiwgdmFsKTsKIAllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2LT5kZXYpKQogCQlyZXR1cm4gYnl0X2ZyZXFfb3Bjb2RlKGRldl9wcml2LCB2YWwpOwogCWVsc2UKLQkJcmV0dXJuIHZhbCAvIEdUX0ZSRVFVRU5DWV9NVUxUSVBMSUVSOworCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmFsLCBHVF9GUkVRVUVOQ1lfTVVMVElQTElFUik7CiB9CiAKIHN0cnVjdCByZXF1ZXN0X2Jvb3N0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYwppbmRleCBkODljMWQwLi43ZTIzZDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCkBAIC0zNjIsNiArMzYyLDcgQEAKIAlCSVQoUE9XRVJfRE9NQUlOX0FVWF9DKSB8CQkJXAogCUJJVChQT1dFUl9ET01BSU5fQVVESU8pIHwJCQlcCiAJQklUKFBPV0VSX0RPTUFJTl9WR0EpIHwJCQkJXAorCUJJVChQT1dFUl9ET01BSU5fR01CVVMpIHwJCQlcCiAJQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKICNkZWZpbmUgQlhUX0RJU1BMQVlfUE9XRVJXRUxMXzFfUE9XRVJfRE9NQUlOUyAoCQlcCiAJQlhUX0RJU1BMQVlfUE9XRVJXRUxMXzJfUE9XRVJfRE9NQUlOUyB8CQlcCkBAIC0xNDgzLDYgKzE0ODQsNyBAQAogCUJJVChQT1dFUl9ET01BSU5fQVVYX0IpIHwJCQlcCiAJQklUKFBPV0VSX0RPTUFJTl9BVVhfQykgfAkJCVwKIAlCSVQoUE9XRVJfRE9NQUlOX0FVWF9EKSB8CQkJXAorCUJJVChQT1dFUl9ET01BSU5fR01CVVMpIHwJCQlcCiAJQklUKFBPV0VSX0RPTUFJTl9JTklUKSkKICNkZWZpbmUgSFNXX0RJU1BMQVlfUE9XRVJfRE9NQUlOUyAoCQkJCVwKIAkoUE9XRVJfRE9NQUlOX01BU0sgJiB+SFNXX0FMV0FZU19PTl9QT1dFUl9ET01BSU5TKSB8CVwKQEAgLTE4NDUsNiArMTg0Nyw4IEBACiAJaTkxNS5kaXNhYmxlX3Bvd2VyX3dlbGwgPSBzYW5pdGl6ZV9kaXNhYmxlX3Bvd2VyX3dlbGxfb3B0aW9uKGRldl9wcml2LAogCQkJCQkJICAgICBpOTE1LmRpc2FibGVfcG93ZXJfd2VsbCk7CiAKKwlCVUlMRF9CVUdfT04oUE9XRVJfRE9NQUlOX05VTSA+IDMxKTsKKwogCW11dGV4X2luaXQoJnBvd2VyX2RvbWFpbnMtPmxvY2spOwogCiAJLyoKQEAgLTIwNjQsMzYgKzIwNjgsNiBAQAogfQogCiAvKioKLSAqIGludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfZ2V0IC0gZ3JhYiBhbiBhdXhpbGlhcnkgcG93ZXIgZG9tYWluIHJlZmVyZW5jZQotICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gZ3JhYnMgYSBwb3dlciBkb21haW4gcmVmZXJlbmNlIGZvciB0aGUgYXV4aWxpYXJ5IHBvd2VyIGRvbWFpbgotICogKGZvciBhY2Nlc3MgdG8gdGhlIEdNQlVTIGFuZCBEUCBBVVggYmxvY2tzKSBhbmQgZW5zdXJlcyB0aGF0IGl0IGFuZCBhbGwgaXRzCi0gKiBwYXJlbnRzIGFyZSBwb3dlcmVkIHVwLiBUaGVyZWZvcmUgdXNlcnMgc2hvdWxkIG9ubHkgZ3JhYiBhIHJlZmVyZW5jZSB0byB0aGUKLSAqIGlubmVybW9zdCBwb3dlciBkb21haW4gdGhleSBuZWVkLgotICoKLSAqIEFueSBwb3dlciBkb21haW4gcmVmZXJlbmNlIG9idGFpbmVkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBoYXZlIGEgc3ltbWV0cmljCi0gKiBjYWxsIHRvIGludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfcHV0KCkgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIGFnYWluLgotICovCi12b2lkIGludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7Ci19Ci0KLS8qKgotICogaW50ZWxfYXV4X2Rpc3BsYXlfcnVudGltZV9wdXQgLSByZWxlYXNlIGFuIGF1eGlsaWFyeSBwb3dlciBkb21haW4gcmVmZXJlbmNlCi0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGluc3RhbmNlCi0gKgotICogVGhpcyBmdW5jdGlvbiBkcm9wcyB0aGUgYXV4aWxpYXJ5IHBvd2VyIGRvbWFpbiByZWZlcmVuY2Ugb2J0YWluZWQgYnkKLSAqIGludGVsX2F1eF9kaXNwbGF5X3J1bnRpbWVfZ2V0KCkgYW5kIG1pZ2h0IHBvd2VyIGRvd24gdGhlIGNvcnJlc3BvbmRpbmcKLSAqIGhhcmR3YXJlIGJsb2NrIHJpZ2h0IGF3YXkgaWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UuCi0gKi8KLXZvaWQgaW50ZWxfYXV4X2Rpc3BsYXlfcnVudGltZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQotewotCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsKLX0KLQotLyoqCiAgKiBpbnRlbF9ydW50aW1lX3BtX2dldCAtIGdyYWIgYSBydW50aW1lIHBtIHJlZmVyZW5jZQogICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWRybS1jb3JlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lteC1kcm0tY29yZS5jCmluZGV4IDY0ZjE2ZWEuLjdiOTkwYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWRybS1jb3JlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9pbXgtZHJtLWNvcmUuYwpAQCAtNjMsOCArNjMsNyBAQAogI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JTVhfRkJfSEVMUEVSKQogCXN0cnVjdCBpbXhfZHJtX2RldmljZSAqaW14ZHJtID0gZHJtLT5kZXZfcHJpdmF0ZTsKIAotCWlmIChpbXhkcm0tPmZiaGVscGVyKQotCQlkcm1fZmJkZXZfY21hX3Jlc3RvcmVfbW9kZShpbXhkcm0tPmZiaGVscGVyKTsKKwlkcm1fZmJkZXZfY21hX3Jlc3RvcmVfbW9kZShpbXhkcm0tPmZiaGVscGVyKTsKICNlbmRpZgogfQogCkBAIC0zNDAsNyArMzM5LDcgQEAKICAqIGlteF9kcm1fYWRkX2NydGMgLSBhZGQgYSBuZXcgY3J0YwogICovCiBpbnQgaW14X2RybV9hZGRfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBpbXhfZHJtX2NydGMgKipuZXdfY3J0YywKKwkJc3RydWN0IGlteF9kcm1fY3J0YyAqKm5ld19jcnRjLCBzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5X3BsYW5lLAogCQljb25zdCBzdHJ1Y3QgaW14X2RybV9jcnRjX2hlbHBlcl9mdW5jcyAqaW14X2RybV9oZWxwZXJfZnVuY3MsCiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydCkKIHsKQEAgLTM3OSw3ICszNzgsNyBAQAogCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0YywKIAkJCWlteF9kcm1fY3J0Yy0+aW14X2RybV9oZWxwZXJfZnVuY3MuY3J0Y19oZWxwZXJfZnVuY3MpOwogCi0JZHJtX2NydGNfaW5pdChkcm0sIGNydGMsCisJZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkcm0sIGNydGMsIHByaW1hcnlfcGxhbmUsIE5VTEwsCiAJCQlpbXhfZHJtX2NydGMtPmlteF9kcm1faGVscGVyX2Z1bmNzLmNydGNfZnVuY3MpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lteC1kcm0uaCBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWRybS5oCmluZGV4IDI4ZTc3NmQuLjgzMjg0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWRybS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWRybS5oCkBAIC05LDYgKzksNyBAQAogc3RydWN0IGRybV9lbmNvZGVyOwogc3RydWN0IGRybV9mYmRldl9jbWE7CiBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyOworc3RydWN0IGRybV9wbGFuZTsKIHN0cnVjdCBpbXhfZHJtX2NydGM7CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogCkBAIC0yNCw3ICsyNSw3IEBACiB9OwogCiBpbnQgaW14X2RybV9hZGRfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBpbXhfZHJtX2NydGMgKipuZXdfY3J0YywKKwkJc3RydWN0IGlteF9kcm1fY3J0YyAqKm5ld19jcnRjLCBzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5X3BsYW5lLAogCQljb25zdCBzdHJ1Y3QgaW14X2RybV9jcnRjX2hlbHBlcl9mdW5jcyAqaW14X2hlbHBlcl9mdW5jcywKIAkJc3RydWN0IGRldmljZV9ub2RlICpwb3J0KTsKIGludCBpbXhfZHJtX3JlbW92ZV9jcnRjKHN0cnVjdCBpbXhfZHJtX2NydGMgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lteC10dmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LXR2ZS5jCmluZGV4IGU2NzFhZDMuLmY5NTk3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LXR2ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LXR2ZS5jCkBAIC03MjEsNiArNzIxLDcgQEAKIAl7IC5jb21wYXRpYmxlID0gImZzbCxpbXg1My10dmUiLCB9LAogCXsgLyogc2VudGluZWwgKi8gfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlteF90dmVfZHRfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14X3R2ZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGlteF90dmVfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLWNydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jCmluZGV4IDdiYzgzMDEuLjRhYjg0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtY3J0Yy5jCkBAIC0yMTIsNyArMjEyLDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAlpZiAoaXB1X2NydGMtPnBhZ2VfZmxpcF9ldmVudCkKLQkJZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGRybSwgLTEsIGlwdV9jcnRjLT5wYWdlX2ZsaXBfZXZlbnQpOworCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudCgmaXB1X2NydGMtPmJhc2UsCisJCQkJCSAgIGlwdV9jcnRjLT5wYWdlX2ZsaXBfZXZlbnQpOwogCWlwdV9jcnRjLT5wYWdlX2ZsaXBfZXZlbnQgPSBOVUxMOwogCWlteF9kcm1fY3J0Y192YmxhbmtfcHV0KGlwdV9jcnRjLT5pbXhfY3J0Yyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFncyk7CkBAIC0zNDksNyArMzUwLDYgQEAKIAlzdHJ1Y3QgaXB1X3NvYyAqaXB1ID0gZGV2X2dldF9kcnZkYXRhKGlwdV9jcnRjLT5kZXYtPnBhcmVudCk7CiAJaW50IGRwID0gLUVJTlZBTDsKIAlpbnQgcmV0OwotCWludCBpZDsKIAogCXJldCA9IGlwdV9nZXRfcmVzb3VyY2VzKGlwdV9jcnRjLCBwZGF0YSk7CiAJaWYgKHJldCkgewpAQCAtMzU4LDE4ICszNTgsMjMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlpZiAocGRhdGEtPmRwID49IDApCisJCWRwID0gSVBVX0RQX0ZMT1dfU1lOQ19CRzsKKwlpcHVfY3J0Yy0+cGxhbmVbMF0gPSBpcHVfcGxhbmVfaW5pdChkcm0sIGlwdSwgcGRhdGEtPmRtYVswXSwgZHAsIDAsCisJCQkJCSAgICBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKKwlpZiAoSVNfRVJSKGlwdV9jcnRjLT5wbGFuZVswXSkpIHsKKwkJcmV0ID0gUFRSX0VSUihpcHVfY3J0Yy0+cGxhbmVbMF0pOworCQlnb3RvIGVycl9wdXRfcmVzb3VyY2VzOworCX0KKwogCXJldCA9IGlteF9kcm1fYWRkX2NydGMoZHJtLCAmaXB1X2NydGMtPmJhc2UsICZpcHVfY3J0Yy0+aW14X2NydGMsCi0JCQkmaXB1X2NydGNfaGVscGVyX2Z1bmNzLCBpcHVfY3J0Yy0+ZGV2LT5vZl9ub2RlKTsKKwkJCSZpcHVfY3J0Yy0+cGxhbmVbMF0tPmJhc2UsICZpcHVfY3J0Y19oZWxwZXJfZnVuY3MsCisJCQlpcHVfY3J0Yy0+ZGV2LT5vZl9ub2RlKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoaXB1X2NydGMtPmRldiwgImFkZGluZyBjcnRjIGZhaWxlZCB3aXRoICVkLlxuIiwgcmV0KTsKIAkJZ290byBlcnJfcHV0X3Jlc291cmNlczsKIAl9CiAKLQlpZiAocGRhdGEtPmRwID49IDApCi0JCWRwID0gSVBVX0RQX0ZMT1dfU1lOQ19CRzsKLQlpZCA9IGlteF9kcm1fY3J0Y19pZChpcHVfY3J0Yy0+aW14X2NydGMpOwotCWlwdV9jcnRjLT5wbGFuZVswXSA9IGlwdV9wbGFuZV9pbml0KGlwdV9jcnRjLT5iYXNlLmRldiwgaXB1LAotCQkJCQkgICAgcGRhdGEtPmRtYVswXSwgZHAsIEJJVChpZCksIHRydWUpOwogCXJldCA9IGlwdV9wbGFuZV9nZXRfcmVzb3VyY2VzKGlwdV9jcnRjLT5wbGFuZVswXSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGlwdV9jcnRjLT5kZXYsICJnZXR0aW5nIHBsYW5lIDAgcmVzb3VyY2VzIGZhaWxlZCB3aXRoICVkLlxuIiwKQEAgLTM3OSwxMCArMzg0LDEwIEBACiAKIAkvKiBJZiB0aGlzIGNydGMgaXMgdXNpbmcgdGhlIERQLCBhZGQgYW4gb3ZlcmxheSBwbGFuZSAqLwogCWlmIChwZGF0YS0+ZHAgPj0gMCAmJiBwZGF0YS0+ZG1hWzFdID4gMCkgewotCQlpcHVfY3J0Yy0+cGxhbmVbMV0gPSBpcHVfcGxhbmVfaW5pdChpcHVfY3J0Yy0+YmFzZS5kZXYsIGlwdSwKLQkJCQkJCSAgICBwZGF0YS0+ZG1hWzFdLAotCQkJCQkJICAgIElQVV9EUF9GTE9XX1NZTkNfRkcsCi0JCQkJCQkgICAgQklUKGlkKSwgZmFsc2UpOworCQlpcHVfY3J0Yy0+cGxhbmVbMV0gPSBpcHVfcGxhbmVfaW5pdChkcm0sIGlwdSwgcGRhdGEtPmRtYVsxXSwKKwkJCQkJCUlQVV9EUF9GTE9XX1NZTkNfRkcsCisJCQkJCQlkcm1fY3J0Y19tYXNrKCZpcHVfY3J0Yy0+YmFzZSksCisJCQkJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZKTsKIAkJaWYgKElTX0VSUihpcHVfY3J0Yy0+cGxhbmVbMV0pKQogCQkJaXB1X2NydGMtPnBsYW5lWzFdID0gTlVMTDsKIAl9CkBAIC00MDcsMjggKzQxMiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqaXB1X2RybV9nZXRfcG9ydF9ieV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwKLQkJCQkJCSAgaW50IHBvcnRfaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwb3J0OwotCWludCBpZCwgcmV0OwotCi0JcG9ydCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBhcmVudCwgInBvcnQiKTsKLQl3aGlsZSAocG9ydCkgewotCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwb3J0LCAicmVnIiwgJmlkKTsKLQkJaWYgKCFyZXQgJiYgaWQgPT0gcG9ydF9pZCkKLQkJCXJldHVybiBwb3J0OwotCi0JCWRvIHsKLQkJCXBvcnQgPSBvZl9nZXRfbmV4dF9jaGlsZChwYXJlbnQsIHBvcnQpOwotCQkJaWYgKCFwb3J0KQotCQkJCXJldHVybiBOVUxMOwotCQl9IHdoaWxlIChvZl9ub2RlX2NtcChwb3J0LT5uYW1lLCAicG9ydCIpKTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGludCBpcHVfZHJtX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwdV9jbGllbnRfcGxhdGZvcm1kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKQEAgLTQ3MCwyMyArNDUzLDExIEBACiBzdGF0aWMgaW50IGlwdV9kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCXN0cnVjdCBpcHVfY2xpZW50X3BsYXRmb3JtZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAogCWlmICghZGV2LT5wbGF0Zm9ybV9kYXRhKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghZGV2LT5vZl9ub2RlKSB7Ci0JCS8qIEFzc29jaWF0ZSBjcnRjIGRldmljZSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIERJIHBvcnQgbm9kZSAqLwotCQlkZXYtPm9mX25vZGUgPSBpcHVfZHJtX2dldF9wb3J0X2J5X2lkKGRldi0+cGFyZW50LT5vZl9ub2RlLAotCQkJCQkJICAgICAgcGRhdGEtPmRpICsgMik7Ci0JCWlmICghZGV2LT5vZl9ub2RlKSB7Ci0JCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgcG9ydEAlZCBub2RlIGluICVzXG4iLAotCQkJCXBkYXRhLT5kaSArIDIsIGRldi0+cGFyZW50LT5vZl9ub2RlLT5mdWxsX25hbWUpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0KIAlyZXQgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5jCmluZGV4IDU3NWY0YzguLmUyZmY0MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmMKQEAgLTM4MSw3ICszODEsNyBAQAogCiBzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaXB1X3NvYyAqaXB1LAogCQkJCSBpbnQgZG1hLCBpbnQgZHAsIHVuc2lnbmVkIGludCBwb3NzaWJsZV9jcnRjcywKLQkJCQkgYm9vbCBwcml2KQorCQkJCSBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUpCiB7CiAJc3RydWN0IGlwdV9wbGFuZSAqaXB1X3BsYW5lOwogCWludCByZXQ7CkBAIC0zOTksMTAgKzM5OSw5IEBACiAJaXB1X3BsYW5lLT5kbWEgPSBkbWE7CiAJaXB1X3BsYW5lLT5kcF9mbG93ID0gZHA7CiAKLQlyZXQgPSBkcm1fcGxhbmVfaW5pdChkZXYsICZpcHVfcGxhbmUtPmJhc2UsIHBvc3NpYmxlX2NydGNzLAotCQkJICAgICAmaXB1X3BsYW5lX2Z1bmNzLCBpcHVfcGxhbmVfZm9ybWF0cywKLQkJCSAgICAgQVJSQVlfU0laRShpcHVfcGxhbmVfZm9ybWF0cyksCi0JCQkgICAgIHByaXYpOworCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkZXYsICZpcHVfcGxhbmUtPmJhc2UsIHBvc3NpYmxlX2NydGNzLAorCQkJCSAgICAgICAmaXB1X3BsYW5lX2Z1bmNzLCBpcHVfcGxhbmVfZm9ybWF0cywKKwkJCQkgICAgICAgQVJSQVlfU0laRShpcHVfcGxhbmVfZm9ybWF0cyksIHR5cGUpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxuIik7CiAJCWtmcmVlKGlwdV9wbGFuZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vaW14L2lwdXYzLXBsYW5lLmgKaW5kZXggOWI1ZWZmMS4uM2E0NDNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2lteC9pcHV2My1wbGFuZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuaApAQCAtMzQsNyArMzQsNyBAQAogCiBzdHJ1Y3QgaXB1X3BsYW5lICppcHVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaXB1X3NvYyAqaXB1LAogCQkJCSBpbnQgZG1hLCBpbnQgZHAsIHVuc2lnbmVkIGludCBwb3NzaWJsZV9jcnRjcywKLQkJCQkgYm9vbCBwcml2KTsKKwkJCQkgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKTsKIAogLyogSW5pdCBJRE1BQywgRE1GQywgRFAgKi8KIGludCBpcHVfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGlwdV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvcGFyYWxsZWwtZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9wYXJhbGxlbC1kaXNwbGF5LmMKaW5kZXggYjRkZWI5Yy4uMmU5YjlmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2lteC9wYXJhbGxlbC1kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9wYXJhbGxlbC1kaXNwbGF5LmMKQEAgLTU0LDcgKzU0LDExIEBACiAKIAlpZiAoaW14cGQtPnBhbmVsICYmIGlteHBkLT5wYW5lbC0+ZnVuY3MgJiYKIAkgICAgaW14cGQtPnBhbmVsLT5mdW5jcy0+Z2V0X21vZGVzKSB7CisJCXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaSA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbzsKKwogCQludW1fbW9kZXMgPSBpbXhwZC0+cGFuZWwtPmZ1bmNzLT5nZXRfbW9kZXMoaW14cGQtPnBhbmVsKTsKKwkJaWYgKCFpbXhwZC0+YnVzX2Zvcm1hdCAmJiBkaS0+bnVtX2J1c19mb3JtYXRzKQorCQkJaW14cGQtPmJ1c19mb3JtYXQgPSBkaS0+YnVzX2Zvcm1hdHNbMF07CiAJCWlmIChudW1fbW9kZXMgPiAwKQogCQkJcmV0dXJuIG51bV9tb2RlczsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX2N1cnNvci5jIGIvZHJpdmVycy9ncHUvZHJtL21nYWcyMDAvbWdhZzIwMF9jdXJzb3IuYwppbmRleCA0ZjIwNjhmLi5hN2JmNmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX2N1cnNvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfY3Vyc29yLmMKQEAgLTcwLDYgKzcwLDExIEBACiAJQlVHX09OKHBpeGVsc18yICE9IHBpeGVsc19jdXJyZW50ICYmIHBpeGVsc18yICE9IHBpeGVsc19wcmV2KTsKIAlCVUdfT04ocGl4ZWxzX2N1cnJlbnQgPT0gcGl4ZWxzX3ByZXYpOwogCisJaWYgKCFoYW5kbGUgfHwgIWZpbGVfcHJpdikgeworCQltZ2FfaGlkZV9jdXJzb3IobWRldik7CisJCXJldHVybiAwOworCX0KKwogCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgaGFuZGxlKTsKIAlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC04OCwxMiArOTMsNiBAQAogCQlnb3RvIG91dF91bnJlc2VydmUxOwogCX0KIAotCWlmICghaGFuZGxlKSB7Ci0JCW1nYV9oaWRlX2N1cnNvcihtZGV2KTsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQxOwotCX0KLQogCS8qIE1vdmUgY3Vyc29yIGJ1ZmZlcnMgaW50byBWUkFNIGlmIHRoZXkgYXJlbid0IGFscmVhZHkgKi8KIAlpZiAoIXBpeGVsc18xLT5waW5fY291bnQpIHsKIAkJcmV0ID0gbWdhZzIwMF9ib19waW4ocGl4ZWxzXzEsIFRUTV9QTF9GTEFHX1ZSQU0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9pbmNsdWRlL252a20vY29yZS9kZXZpY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2luY2x1ZGUvbnZrbS9jb3JlL2RldmljZS5oCmluZGV4IDhmNzYwMDAuLjkxMzE5MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2luY2x1ZGUvbnZrbS9jb3JlL2RldmljZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2luY2x1ZGUvbnZrbS9jb3JlL2RldmljZS5oCkBAIC0xNTksNyArMTU5LDYgQEAKIHN0cnVjdCBudmttX2RldmljZV9xdWlyayB7CiAJdTggdHZfcGluX21hc2s7CiAJdTggdHZfZ3BpbzsKLQlib29sIFdhcjAwQzgwMF8wOwogfTsKIAogc3RydWN0IG52a21fZGV2aWNlX2NoaXAgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvaW5jbHVkZS9udmttL3N1YmRldi9pbnN0bWVtLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9pbmNsdWRlL252a20vc3ViZGV2L2luc3RtZW0uaAppbmRleCAyOGJjMjAyLi40MGY4NDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9pbmNsdWRlL252a20vc3ViZGV2L2luc3RtZW0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9pbmNsdWRlL252a20vc3ViZGV2L2luc3RtZW0uaApAQCAtNyw2ICs3LDcgQEAKIAljb25zdCBzdHJ1Y3QgbnZrbV9pbnN0bWVtX2Z1bmMgKmZ1bmM7CiAJc3RydWN0IG52a21fc3ViZGV2IHN1YmRldjsKIAorCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdTMyIHJlc2VydmVkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jCmluZGV4IDhiODMzMmUuLmQ1ZTY5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYWNwaS5jCkBAIC0zNjcsNiArMzY3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKWJ1ZmZlci5wb2ludGVyOworCWxlbiA9IG1pbihsZW4sIChpbnQpb2JqLT5idWZmZXIubGVuZ3RoKTsKIAltZW1jcHkoYmlvcytvZmZzZXQsIG9iai0+YnVmZmVyLnBvaW50ZXIsIGxlbik7CiAJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwogCXJldHVybiBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGlzcGxheS5jCmluZGV4IGRiNmJjNjcuLjY0YzhkOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGlzcGxheS5jCkBAIC04MjksNyArODI5LDYgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZHJtLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfcGFnZV9mbGlwX3N0YXRlICpzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNydGNpZCA9IC0xOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCkBAIC04NDEsMTUgKzg0MCwxOSBAQAogCiAJcyA9IGxpc3RfZmlyc3RfZW50cnkoJmZjdHgtPmZsaXAsIHN0cnVjdCBub3V2ZWF1X3BhZ2VfZmxpcF9zdGF0ZSwgaGVhZCk7CiAJaWYgKHMtPmV2ZW50KSB7Ci0JCS8qIFZibGFuayB0aW1lc3RhbXBzL2NvdW50cyBhcmUgb25seSBjb3JyZWN0IG9uID49IE5WLTUwICovCi0JCWlmIChkcm0tPmRldmljZS5pbmZvLmZhbWlseSA+PSBOVl9ERVZJQ0VfSU5GT19WMF9URVNMQSkKLQkJCWNydGNpZCA9IHMtPmNydGM7CisJCWlmIChkcm0tPmRldmljZS5pbmZvLmZhbWlseSA8IE5WX0RFVklDRV9JTkZPX1YwX1RFU0xBKSB7CisJCQlkcm1fYXJtX3ZibGFua19ldmVudChkZXYsIHMtPmNydGMsIHMtPmV2ZW50KTsKKwkJfSBlbHNlIHsKKwkJCWRybV9zZW5kX3ZibGFua19ldmVudChkZXYsIHMtPmNydGMsIHMtPmV2ZW50KTsKIAotCQlkcm1fc2VuZF92YmxhbmtfZXZlbnQoZGV2LCBjcnRjaWQsIHMtPmV2ZW50KTsKKwkJCS8qIEdpdmUgdXAgb3duZXJzaGlwIG9mIHZibGFuayBmb3IgcGFnZS1mbGlwcGVkIGNydGMgKi8KKwkJCWRybV92YmxhbmtfcHV0KGRldiwgcy0+Y3J0Yyk7CisJCX0KIAl9Ci0KLQkvKiBHaXZlIHVwIG93bmVyc2hpcCBvZiB2YmxhbmsgZm9yIHBhZ2UtZmxpcHBlZCBjcnRjICovCi0JZHJtX3ZibGFua19wdXQoZGV2LCBzLT5jcnRjKTsKKwllbHNlIHsKKwkJLyogR2l2ZSB1cCBvd25lcnNoaXAgb2YgdmJsYW5rIGZvciBwYWdlLWZsaXBwZWQgY3J0YyAqLworCQlkcm1fdmJsYW5rX3B1dChkZXYsIHMtPmNydGMpOworCX0KIAogCWxpc3RfZGVsKCZzLT5oZWFkKTsKIAlpZiAocHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uaAppbmRleCAzMDUwMDQyZS4uYTAyODEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5oCkBAIC0zOSw2ICszOSw3IEBACiAKICNpbmNsdWRlIDxudmlmL2NsaWVudC5oPgogI2luY2x1ZGUgPG52aWYvZGV2aWNlLmg+CisjaW5jbHVkZSA8bnZpZi9pb2N0bC5oPgogCiAjaW5jbHVkZSA8ZHJtUC5oPgogCkBAIC02NSw5ICs2NiwxMCBAQAogfTsKIAogZW51bSBub3V2ZWF1X2RybV9vYmplY3Rfcm91dGUgewotCU5WRFJNX09CSkVDVF9OVklGID0gMCwKKwlOVkRSTV9PQkpFQ1RfTlZJRiA9IE5WSUZfSU9DVExfVjBfT1dORVJfTlZJRiwKIAlOVkRSTV9PQkpFQ1RfVVNJRiwKIAlOVkRSTV9PQkpFQ1RfQUJJMTYsCisJTlZEUk1fT0JKRUNUX0FOWSA9IE5WSUZfSU9DVExfVjBfT1dORVJfQU5ZLAogfTsKIAogZW51bSBub3V2ZWF1X2RybV9ub3RpZnlfcm91dGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91c2lmLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3VzaWYuYwppbmRleCA4OWRjNGNlLi42YWUxYjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3VzaWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3VzaWYuYwpAQCAtMzEzLDcgKzMxMywxMCBAQAogCWlmIChudmlmX3VucGFjayhhcmd2LT52MCwgMCwgMCwgdHJ1ZSkpIHsKIAkJLyogYmxvY2sgYWNjZXNzIHRvIG9iamVjdHMgbm90IGNyZWF0ZWQgdmlhIHRoaXMgaW50ZXJmYWNlICovCiAJCW93bmVyID0gYXJndi0+djAub3duZXI7Ci0JCWFyZ3YtPnYwLm93bmVyID0gTlZEUk1fT0JKRUNUX1VTSUY7CisJCWlmIChhcmd2LT52MC5vYmplY3QgPT0gMFVMTCkKKwkJCWFyZ3YtPnYwLm93bmVyID0gTlZEUk1fT0JKRUNUX0FOWTsgLyogZXhjZXB0IGNsaWVudCAqLworCQllbHNlCisJCQlhcmd2LT52MC5vd25lciA9IE5WRFJNX09CSkVDVF9VU0lGOwogCX0gZWxzZQogCQlnb3RvIGRvbmU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2RldmljZS9wY2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2RldmljZS9wY2kuYwppbmRleCBlM2M3ODNkLi42MmFkMDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9kZXZpY2UvcGNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZGV2aWNlL3BjaS5jCkBAIC0yNTksMTIgKzI1OSw2IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG52a21fZGV2aWNlX3BjaV92ZW5kb3IKLW52a21fZGV2aWNlX3BjaV8xMGRlXzBmY2RbXSA9IHsKLQl7IDB4MTdhYSwgMHgzODAxLCBOVUxMLCB7IC5XYXIwMEM4MDBfMCA9IHRydWUgfSB9LCAvKiBMZW5vdm8gWTUxMFAgKi8KLQl7fQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBudmttX2RldmljZV9wY2lfdmVuZG9yCiBudmttX2RldmljZV9wY2lfMTBkZV8wZmQyW10gPSB7CiAJeyAweDEwMjgsIDB4MDU5NSwgIkdlRm9yY2UgR1QgNjQwTSBMRSIgfSwKIAl7IDB4MTAyOCwgMHgwNWIyLCAiR2VGb3JjZSBHVCA2NDBNIExFIiB9LApAQCAtNjg0LDcgKzY3OCw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG52a21fZGV2aWNlX3BjaV92ZW5kb3IKIG52a21fZGV2aWNlX3BjaV8xMGRlXzExOTlbXSA9IHsKIAl7IDB4MTQ1OCwgMHhkMDAxLCAiR2VGb3JjZSBHVFggNzYwIiB9LAotCXsgMHgxNDYyLCAweDExMDYsICJHZUZvcmNlIEdUWCA3ODBNIiwgeyAuV2FyMDBDODAwXzAgPSB0cnVlIH0gfSwgLyogTWVkaW9uIEVyYXplciBYNzgyNyAqLwogCXt9CiB9OwogCkBAIC02OTUsMTQgKzY4OCw2IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG52a21fZGV2aWNlX3BjaV92ZW5kb3IKLW52a21fZGV2aWNlX3BjaV8xMGRlXzExZmNbXSA9IHsKLQl7IDB4MTE3OSwgMHgwMDAxLCBOVUxMLCB7IC5XYXIwMEM4MDBfMCA9IHRydWUgfSB9LCAvKiBUb3NoaWJhIFRlY3JhIFc1MCAqLwotCXsgMHgxN2FhLCAweDIyMTEsIE5VTEwsIHsgLldhcjAwQzgwMF8wID0gdHJ1ZSB9IH0sIC8qIExlbm92byBXNTQxICovCi0JeyAweDE3YWEsIDB4MjIxZSwgTlVMTCwgeyAuV2FyMDBDODAwXzAgPSB0cnVlIH0gfSwgLyogTGVub3ZvIFc1NDEgKi8KLQl7fQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBudmttX2RldmljZV9wY2lfdmVuZG9yCiBudmttX2RldmljZV9wY2lfMTBkZV8xMjQ3W10gPSB7CiAJeyAweDEwNDMsIDB4MjEyYSwgIkdlRm9yY2UgR1QgNjM1TSIgfSwKIAl7IDB4MTA0MywgMHgyMTJiLCAiR2VGb3JjZSBHVCA2MzVNIiB9LApAQCAtMTM1Niw3ICsxMzQxLDcgQEAKIAl7IDB4MGZjNiwgIkdlRm9yY2UgR1RYIDY1MCIgfSwKIAl7IDB4MGZjOCwgIkdlRm9yY2UgR1QgNzQwIiB9LAogCXsgMHgwZmM5LCAiR2VGb3JjZSBHVCA3MzAiIH0sCi0JeyAweDBmY2QsICJHZUZvcmNlIEdUIDc1NU0iLCBudmttX2RldmljZV9wY2lfMTBkZV8wZmNkIH0sCisJeyAweDBmY2QsICJHZUZvcmNlIEdUIDc1NU0iIH0sCiAJeyAweDBmY2UsICJHZUZvcmNlIEdUIDY0ME0gTEUiIH0sCiAJeyAweDBmZDEsICJHZUZvcmNlIEdUIDY1ME0iIH0sCiAJeyAweDBmZDIsICJHZUZvcmNlIEdUIDY0ME0iLCBudmttX2RldmljZV9wY2lfMTBkZV8wZmQyIH0sCkBAIC0xNDkwLDcgKzE0NzUsNyBAQAogCXsgMHgxMWUyLCAiR2VGb3JjZSBHVFggNzY1TSIgfSwKIAl7IDB4MTFlMywgIkdlRm9yY2UgR1RYIDc2ME0iLCBudmttX2RldmljZV9wY2lfMTBkZV8xMWUzIH0sCiAJeyAweDExZmEsICJRdWFkcm8gSzQwMDAiIH0sCi0JeyAweDExZmMsICJRdWFkcm8gSzIxMDBNIiwgbnZrbV9kZXZpY2VfcGNpXzEwZGVfMTFmYyB9LAorCXsgMHgxMWZjLCAiUXVhZHJvIEsyMTAwTSIgfSwKIAl7IDB4MTIwMCwgIkdlRm9yY2UgR1RYIDU2MCBUaSIgfSwKIAl7IDB4MTIwMSwgIkdlRm9yY2UgR1RYIDU2MCIgfSwKIAl7IDB4MTIwMywgIkdlRm9yY2UgR1RYIDQ2MCBTRSB2MiIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2N0eGdmMTE3LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9jdHhnZjExNy5jCmluZGV4IGI1Yjg3NTkuLjc0ZGU3YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2N0eGdmMTE3LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZ3IvY3R4Z2YxMTcuYwpAQCAtMjA3LDYgKzIwNyw4IEBACiAJCQljb25zdCB1MzIgYiA9ICBiZXRhICogZ3ItPnBwY190cGNfbnJbZ3BjXVtwcGNdOwogCQkJY29uc3QgdTMyIHQgPSB0aW1lc2xpY2VfbW9kZTsKIAkJCWNvbnN0IHUzMiBvID0gUFBDX1VOSVQoZ3BjLCBwcGMsIDApOworCQkJaWYgKCEoZ3ItPnBwY19tYXNrW2dwY10gJiAoMSA8PCBwcGMpKSkKKwkJCQljb250aW51ZTsKIAkJCW1taW9fc2tpcChpbmZvLCBvICsgMHhjMCwgKHQgPDwgMjgpIHwgKGIgPDwgMTYpIHwgKytibyk7CiAJCQltbWlvX3dyMzIoaW5mbywgbyArIDB4YzAsICh0IDw8IDI4KSB8IChiIDw8IDE2KSB8IC0tYm8pOwogCQkJYm8gKz0gZ3JjdHgtPmF0dHJpYl9ucl9tYXggKiBnci0+cHBjX3RwY19ucltncGNdW3BwY107CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9mdWMvZ3BjLmZ1YyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGMuZnVjCmluZGV4IDE5NGFmZTkuLjdkYWNiM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGMuZnVjCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGMuZnVjCkBAIC01MiwxMCArNTIsMTIgQEAKICNlbmRpZgogCiAjaWZkZWYgSU5DTFVERV9DT0RFCisjZGVmaW5lIGdwY19hZGRyKHJlZyxhZGRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorKi8JaW1tMzIocmVnLGFkZHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisqLwlvciByZWcgTlZfUEdSQVBIX0dQQ1hfR1BDQ1NfTU1JT19DVFJMX0JBU0VfRU5BQkxFCiAjZGVmaW5lIGdwY193cjMyKGFkZHIscmVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorKi8JZ3BjX2FkZHIoJHIxNCxhZGRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAqLwltb3YgYjMyICRyMTUgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSovCWltbTMyKCRyMTQsIGFkZHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgotKi8Jb3IgJHIxNCBOVl9QR1JBUEhfR1BDWF9HUENDU19NTUlPX0NUUkxfQkFTRV9FTkFCTEUgICAgICAgICAgICAgICAgICAgIC8qCiAqLwljYWxsKG52X3dyMzIpCiAKIC8vIHJlcG9ydHMgYW4gZXhjZXB0aW9uIHRvIHRoZSBob3N0CkBAIC0xNjEsNyArMTYzLDcgQEAKIAogI2lmIE5WX1BHUkFQSF9HUENYX1VOS19fU0laRSA+IDAKIAkvLyBmaWd1cmUgb3V0IHdoaWNoLCBhbmQgaG93IG1hbnksIFVOS3MgYXJlIGFjdHVhbGx5IHByZXNlbnQKLQlpbW0zMigkcjE0LCAweDUwMGMzMCkKKwlncGNfYWRkcigkcjE0LCAweDUwMGMzMCkKIAljbGVhciBiMzIgJHIyCiAJY2xlYXIgYjMyICRyMwogCWNsZWFyIGIzMiAkcjQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGNnZjExNy5mdWMzLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9mdWMvZ3BjZ2YxMTcuZnVjMy5oCmluZGV4IDY0ZDA3ZGYuLmJiODIwZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGNnZjExNy5mdWMzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZ3IvZnVjL2dwY2dmMTE3LmZ1YzMuaApAQCAtMzE0LDcgKzMxNCw3IEBACiAJMHgwM2YwMTIwMCwKIAkweDAwMDJkMDAwLAogCTB4MTdmMTA0YmQsCi0JMHgxMGZlMDU0MiwKKwkweDEwZmUwNTQ1LAogCTB4MDAwN2YxMDAsCiAJMHgwMDAzZjAwNywKIAkweGJkMDAwMGQwLApAQCAtMzM4LDE4NCArMzM4LDE4NCBAQAogCTB4MDJkMDAxMDMsCiAJMHhmMTA0YmQwMCwKIAkweGYwMGMzMGU3LAotCTB4MjRiZDUwZTMsCi0JMHg0NGJkMzRiZCwKLS8qIDB4MDQzMDogaW5pdF91bmtfbG9vcCAqLwotCTB4YjA2ODIxZjQsCi0JMHgwYmY0MDBmNiwKLQkweDAxZjdmMDBmLAotCTB4ZmQwNGYyYmIsCi0JMHgzMGI2MDU0ZiwKLS8qIDB4MDQ0NTogaW5pdF91bmtfbmV4dCAqLwotCTB4MDEyMGI2MDEsCi0JMHhiMDA0ZTBiNiwKLQkweDFiZjQwMTI2LAotLyogMHgwNDUxOiBpbml0X3Vua19kb25lICovCi0JMHgwNzAzODBlMiwKLQkweGYxMDgwNDgwLAotCTB4ZjAwMTAwMjcsCi0JMHgyMmNmMDIyMywKLQkweDk1MzRiZDAwLAotCTB4MDdmMTA4MjUsCi0JMHgwM2YwYzAwMCwKLQkweDAwMDVkMDAxLAotCTB4MDdmMTA0YmQsCi0JMHgwM2YwYzEwMCwKLQkweDAwMDVkMDAxLAotCTB4MGU5ODA0YmQsCi0JMHgwMTBmOTgwMCwKLQkweDAxNTAyMWY1LAotCTB4YmIwMDJmYmIsCi0JMHgwZTk4MDAzZiwKLQkweDAyMGY5ODAxLAotCTB4MDE1MDIxZjUsCi0JMHhmZDA1MGU5OCwKLQkweDJlYmIwMGVmLAotCTB4MDAzZWJiMDAsCi0JMHg5ODAyMGU5OCwKLQkweDIxZjUwMzBmLAotCTB4MGU5ODAxNTAsCi0JMHgwMGVmZmQwNywKLQkweGJiMDAyZWJiLAotCTB4MzViNjAwM2UsCi0JMHgwMDA3ZjEwMiwKLQkweDAxMDNmMGQzLAotCTB4YmQwMDAzZDAsCi0JMHgwODI1YjYwNCwKLQkweGI2MDYzNWI2LAotCTB4MzBiNjAxMjAsCi0JMHgwODI0YjYwMSwKLQkweGI5MDgzNGI2LAotCTB4MjFmNTAyMmYsCi0JMHgyZmJiMDJkMywKLQkweDAwM2ZiYjAwLAotCTB4MDEwMDA3ZjEsCi0JMHhkMDAyMDNmMCwKKwkweGU1ZjA1MGUzLAorCTB4YmQyNGJkMDEsCisvKiAweDA0MzM6IGluaXRfdW5rX2xvb3AgKi8KKwkweGY0NDRiZDM0LAorCTB4ZjZiMDY4MjEsCisJMHgwZjBiZjQwMCwKKwkweGJiMDFmN2YwLAorCTB4NGZmZDA0ZjIsCisJMHgwMTMwYjYwNSwKKy8qIDB4MDQ0ODogaW5pdF91bmtfbmV4dCAqLworCTB4YjYwMTIwYjYsCisJMHgyNmIwMDRlMCwKKwkweGUyMWJmNDAxLAorLyogMHgwNDU0OiBpbml0X3Vua19kb25lICovCisJMHg4MDA3MDM4MCwKKwkweDI3ZjEwODA0LAorCTB4MjNmMDAxMDAsCisJMHgwMDIyY2YwMiwKKwkweDI1OTUzNGJkLAorCTB4MDAwN2YxMDgsCisJMHgwMTAzZjBjMCwKKwkweGJkMDAwNWQwLAorCTB4MDAwN2YxMDQsCisJMHgwMTAzZjBjMSwKKwkweGJkMDAwNWQwLAorCTB4MDAwZTk4MDQsCisJMHhmNTAxMGY5OCwKKwkweGJiMDE1MDIxLAorCTB4M2ZiYjAwMmYsCisJMHgwMTBlOTgwMCwKKwkweGY1MDIwZjk4LAorCTB4OTgwMTUwMjEsCisJMHhlZmZkMDUwZSwKKwkweDAwMmViYjAwLAorCTB4OTgwMDNlYmIsCisJMHgwZjk4MDIwZSwKKwkweDUwMjFmNTAzLAorCTB4MDcwZTk4MDEsCisJMHhiYjAwZWZmZCwKKwkweDNlYmIwMDJlLAorCTB4MDIzNWI2MDAsCisJMHhkMzAwMDdmMSwKKwkweGQwMDEwM2YwLAogCTB4MDRiZDAwMDMsCi0JMHgyOWYwMjRiZCwKLQkweDAwMDdmMTFmLAotCTB4MDIwM2YwMDgsCi0JMHhiZDAwMDJkMCwKLS8qIDB4MDUwNTogbWFpbiAqLwotCTB4MDAzMWY0MDQsCi0JMHhmMDAwMjhmNCwKLQkweDIxZjQyNGQ3LAotCTB4ZjQwMWY0MzksCi0JMHhmNDA0ZTRiMCwKLQkweDgxZmUxZTE4LAotCTB4MDYyN2YwMDEsCi0JMHgxMmZkMjBiZCwKLQkweDAxZTRiNjA0LAotCTB4ZmUwNTFlZmQsCi0JMHgyMWY1MDAxOCwKLQkweDBlZjQwNWZhLAotLyogMHgwNTM1OiBtYWluX25vdF9jdHhfeGZlciAqLwotCTB4MTBlZjk0ZDMsCi0JMHhmNTAxZjVmMCwKLQkweGY0MDM3ZTIxLAotLyogMHgwNTQyOiBpaCAqLwotCTB4ODBmOWM2MGUsCi0JMHhmOTAxODhmZSwKLQkweGY5OTBmOTgwLAotCTB4ZjliMGY5YTAsCi0JMHhmOWUwZjlkMCwKLQkweGYxMDRiZGYwLAotCTB4ZjAwMjAwYTcsCi0JMHhhYWNmMDBhMywKLQkweDA0YWJjNDAwLAotCTB4ZjAyYzBiZjQsCi0JMHhlN2YxMjRkNywKLQkweGUzZjAxYTAwLAotCTB4MDBlZWNmMDAsCi0JMHgxOTAwZjdmMSwKLQkweGNmMDBmM2YwLAotCTB4MjFmNDAwZmYsCi0JMHgwMWU3ZjAwNCwKLQkweDFkMDAwN2YxLAotCTB4ZDAwMDAzZjAsCi0JMHgwNGJkMDAwZSwKLS8qIDB4MDU5MDogaWhfbm9fZmlmbyAqLwotCTB4MDEwMDA3ZjEsCi0JMHhkMDAwMDNmMCwKLQkweDA0YmQwMDBhLAotCTB4ZTBmY2YwZmMsCi0JMHhiMGZjZDBmYywKLQkweDkwZmNhMGZjLAotCTB4ODhmZTgwZmMsCi0JMHhmNDgwZmMwMCwKLQkweDAxZjgwMDMyLAotLyogMHgwNWI0OiBodWJfYmFycmllcl9kb25lICovCi0JMHg5ODAxZjdmMCwKLQkweGZlYmIwNDBlLAotCTB4MDJmZmI5MDQsCi0JMHg5NDE4ZTdmMSwKLQkweGY0NDBlM2YwLAotCTB4MDBmODlkMjEsCi0vKiAweDA1Y2M6IGN0eF9yZWRzd2l0Y2ggKi8KLQkweGYxMjBmN2YwLAorCTB4YjYwODI1YjYsCisJMHgyMGI2MDYzNSwKKwkweDAxMzBiNjAxLAorCTB4YjYwODI0YjYsCisJMHgyZmI5MDgzNCwKKwkweGQzMjFmNTAyLAorCTB4MDAyZmJiMDIsCisJMHhmMTAwM2ZiYiwKKwkweGYwMDEwMDA3LAorCTB4MDNkMDAyMDMsCisJMHhiZDA0YmQwMCwKKwkweDFmMjlmMDI0LAorCTB4MDgwMDA3ZjEsCisJMHhkMDAyMDNmMCwKKwkweDA0YmQwMDAyLAorLyogMHgwNTA4OiBtYWluICovCisJMHhmNDAwMzFmNCwKKwkweGQ3ZjAwMDI4LAorCTB4MzkyMWY0MjQsCisJMHhiMGY0MDFmNCwKKwkweDE4ZjQwNGU0LAorCTB4MDE4MWZlMWUsCisJMHhiZDA2MjdmMCwKKwkweDA0MTJmZDIwLAorCTB4ZmQwMWU0YjYsCisJMHgxOGZlMDUxZSwKKwkweGZkMjFmNTAwLAorCTB4ZDMwZWY0MDUsCisvKiAweDA1Mzg6IG1haW5fbm90X2N0eF94ZmVyICovCisJMHhmMDEwZWY5NCwKKwkweDIxZjUwMWY1LAorCTB4MGVmNDAzN2UsCisvKiAweDA1NDU6IGloICovCisJMHhmZTgwZjljNiwKKwkweDgwZjkwMTg4LAorCTB4YTBmOTkwZjksCisJMHhkMGY5YjBmOSwKKwkweGYwZjllMGY5LAorCTB4YTdmMTA0YmQsCisJMHhhM2YwMDIwMCwKKwkweDAwYWFjZjAwLAorCTB4ZjQwNGFiYzQsCisJMHhkN2YwMmMwYiwKKwkweDAwZTdmMTI0LAorCTB4MDBlM2YwMWEsCisJMHhmMTAwZWVjZiwKKwkweGYwMTkwMGY3LAorCTB4ZmZjZjAwZjMsCisJMHgwNDIxZjQwMCwKKwkweGYxMDFlN2YwLAorCTB4ZjAxZDAwMDcsCisJMHgwZWQwMDAwMywKKy8qIDB4MDU5MzogaWhfbm9fZmlmbyAqLworCTB4ZjEwNGJkMDAsCisJMHhmMDAxMDAwNywKKwkweDBhZDAwMDAzLAorCTB4ZmMwNGJkMDAsCisJMHhmY2UwZmNmMCwKKwkweGZjYjBmY2QwLAorCTB4ZmM5MGZjYTAsCisJMHgwMDg4ZmU4MCwKKwkweDMyZjQ4MGZjLAorLyogMHgwNWI3OiBodWJfYmFycmllcl9kb25lICovCisJMHhmMDAxZjgwMCwKKwkweDBlOTgwMWY3LAorCTB4MDRmZWJiMDQsCisJMHhmMTAyZmZiOSwKKwkweGYwOTQxOGU3LAorCTB4MjFmNDQwZTMsCisvKiAweDA1Y2Y6IGN0eF9yZWRzd2l0Y2ggKi8KKwkweGYwMDBmODlkLAorCTB4MDdmMTIwZjcsCisJMHgwM2YwODUwMCwKKwkweDAwMGZkMDAxLAorCTB4ZTdmMDA0YmQsCisvKiAweDA1ZTE6IGN0eF9yZWRzd2l0Y2hfZGVsYXkgKi8KKwkweDAxZTJiNjA4LAorCTB4ZjFmZDFiZjQsCisJMHhmMTA4MDBmNSwKKwkweGYxMDIwMGY1LAogCTB4ZjA4NTAwMDcsCiAJMHgwZmQwMDEwMywKLQkweGYwMDRiZDAwLAotLyogMHgwNWRlOiBjdHhfcmVkc3dpdGNoX2RlbGF5ICovCi0JMHhlMmI2MDhlNywKLQkweGZkMWJmNDAxLAotCTB4MDgwMGY1ZjEsCi0JMHgwMjAwZjVmMSwKLQkweDg1MDAwN2YxLAotCTB4ZDAwMTAzZjAsCi0JMHgwNGJkMDAwZiwKLS8qIDB4MDVmYTogY3R4X3hmZXIgKi8KLQkweDA3ZjEwMGY4LAotCTB4MDNmMDgxMDAsCi0JMHgwMDBmZDAwMiwKLQkweDExZjQwNGJkLAotCTB4Y2MyMWY1MDcsCi0vKiAweDA2MGQ6IGN0eF94ZmVyX25vdF9sb2FkICovCi0JMHg2YTIxZjUwNSwKLQkweGYxMjRiZDAyLAotCTB4ZjA0N2ZjMDcsCi0JMHgwMmQwMDIwMywKLQkweGYwMDRiZDAwLAotCTB4MjBiNjAxMmMsCi0JMHhmYzA3ZjEwMywKLQkweDAyMDNmMDRhLAotCTB4YmQwMDAyZDAsCi0JMHgwMWFjZjAwNCwKLQkweGYxMDJhNWYwLAotCTB4ZjAwMDAwYjcsCi0JMHgwYzk4NTBiMywKLQkweDBmYzRiNjA0LAotCTB4OTgwMGJjYmIsCi0JMHgwZDk4MDAwYywKLQkweDAwZTdmMDAxLAotCTB4MDE2ZjIxZjUsCi0JMHhmMTAxYWNmMCwKLQkweGYwNDAwMGI3LAotCTB4MGM5ODUwYjMsCi0JMHgwZmM0YjYwNCwKLQkweDk4MDBiY2JiLAotCTB4MGQ5ODAxMGMsCi0JMHgwNjBmOTgwMiwKLQkweDA4MDBlN2YxLAotCTB4MDE2ZjIxZjUsCisJMHhmODA0YmQwMCwKKy8qIDB4MDVmZDogY3R4X3hmZXIgKi8KKwkweDAwMDdmMTAwLAorCTB4MDIwM2YwODEsCisJMHhiZDAwMGZkMCwKKwkweDA3MTFmNDA0LAorCTB4MDVjZjIxZjUsCisvKiAweDA2MTA6IGN0eF94ZmVyX25vdF9sb2FkICovCisJMHgwMjZhMjFmNSwKKwkweDA3ZjEyNGJkLAorCTB4MDNmMDQ3ZmMsCisJMHgwMDAyZDAwMiwKKwkweDJjZjAwNGJkLAorCTB4MDMyMGI2MDEsCisJMHg0YWZjMDdmMSwKKwkweGQwMDIwM2YwLAorCTB4MDRiZDAwMDIsCiAJMHhmMDAxYWNmMCwKLQkweGI3ZjEwNGE1LAotCTB4YjNmMDMwMDAsCisJMHhiN2YxMDJhNSwKKwkweGIzZjAwMDAwLAogCTB4MDQwYzk4NTAsCiAJMHhiYjBmYzRiNiwKIAkweDBjOTgwMGJjLAotCTB4MDMwZDk4MDIsCi0JMHhmMTA4MGY5OCwKLQkweGY1MDIwMGU3LAotCTB4ZjUwMTZmMjEsCi0JMHhmNDAyNWUyMSwKLQkweDEyZjQwNjAxLAotLyogMHgwNmE5OiBjdHhfeGZlcl9wb3N0ICovCi0JMHg3ZjIxZjUwNywKLS8qIDB4MDZhZDogY3R4X3hmZXJfZG9uZSAqLwotCTB4YjQyMWY1MDIsCi0JMHgwMDAwZjgwNSwKLQkweDAwMDAwMDAwLAorCTB4MDEwZDk4MDAsCisJMHhmNTAwZTdmMCwKKwkweGYwMDE2ZjIxLAorCTB4YjdmMTAxYWMsCisJMHhiM2YwNDAwMCwKKwkweDA0MGM5ODUwLAorCTB4YmIwZmM0YjYsCisJMHgwYzk4MDBiYywKKwkweDAyMGQ5ODAxLAorCTB4ZjEwNjBmOTgsCisJMHhmNTA4MDBlNywKKwkweGYwMDE2ZjIxLAorCTB4YTVmMDAxYWMsCisJMHgwMGI3ZjEwNCwKKwkweDUwYjNmMDMwLAorCTB4YjYwNDBjOTgsCisJMHhiY2JiMGZjNCwKKwkweDAyMGM5ODAwLAorCTB4OTgwMzBkOTgsCisJMHhlN2YxMDgwZiwKKwkweDIxZjUwMjAwLAorCTB4MjFmNTAxNmYsCisJMHgwMWY0MDI1ZSwKKwkweDA3MTJmNDA2LAorLyogMHgwNmFjOiBjdHhfeGZlcl9wb3N0ICovCisJMHgwMjdmMjFmNSwKKy8qIDB4MDZiMDogY3R4X3hmZXJfZG9uZSAqLworCTB4MDViNzIxZjUsCisJMHgwMDAwMDBmOCwKIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGNnazEwNC5mdWMzLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9mdWMvZ3BjZ2sxMDQuZnVjMy5oCmluZGV4IDJmNTk2NDMuLjkxMTk3NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGNnazEwNC5mdWMzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZ3IvZnVjL2dwY2drMTA0LmZ1YzMuaApAQCAtMzE0LDcgKzMxNCw3IEBACiAJMHgwM2YwMTIwMCwKIAkweDAwMDJkMDAwLAogCTB4MTdmMTA0YmQsCi0JMHgxMGZlMDU0MiwKKwkweDEwZmUwNTQ1LAogCTB4MDAwN2YxMDAsCiAJMHgwMDAzZjAwNywKIAkweGJkMDAwMGQwLApAQCAtMzM4LDE4NCArMzM4LDE4NCBAQAogCTB4MDJkMDAxMDMsCiAJMHhmMTA0YmQwMCwKIAkweGYwMGMzMGU3LAotCTB4MjRiZDUwZTMsCi0JMHg0NGJkMzRiZCwKLS8qIDB4MDQzMDogaW5pdF91bmtfbG9vcCAqLwotCTB4YjA2ODIxZjQsCi0JMHgwYmY0MDBmNiwKLQkweDAxZjdmMDBmLAotCTB4ZmQwNGYyYmIsCi0JMHgzMGI2MDU0ZiwKLS8qIDB4MDQ0NTogaW5pdF91bmtfbmV4dCAqLwotCTB4MDEyMGI2MDEsCi0JMHhiMDA0ZTBiNiwKLQkweDFiZjQwMTI2LAotLyogMHgwNDUxOiBpbml0X3Vua19kb25lICovCi0JMHgwNzAzODBlMiwKLQkweGYxMDgwNDgwLAotCTB4ZjAwMTAwMjcsCi0JMHgyMmNmMDIyMywKLQkweDk1MzRiZDAwLAotCTB4MDdmMTA4MjUsCi0JMHgwM2YwYzAwMCwKLQkweDAwMDVkMDAxLAotCTB4MDdmMTA0YmQsCi0JMHgwM2YwYzEwMCwKLQkweDAwMDVkMDAxLAotCTB4MGU5ODA0YmQsCi0JMHgwMTBmOTgwMCwKLQkweDAxNTAyMWY1LAotCTB4YmIwMDJmYmIsCi0JMHgwZTk4MDAzZiwKLQkweDAyMGY5ODAxLAotCTB4MDE1MDIxZjUsCi0JMHhmZDA1MGU5OCwKLQkweDJlYmIwMGVmLAotCTB4MDAzZWJiMDAsCi0JMHg5ODAyMGU5OCwKLQkweDIxZjUwMzBmLAotCTB4MGU5ODAxNTAsCi0JMHgwMGVmZmQwNywKLQkweGJiMDAyZWJiLAotCTB4MzViNjAwM2UsCi0JMHgwMDA3ZjEwMiwKLQkweDAxMDNmMGQzLAotCTB4YmQwMDAzZDAsCi0JMHgwODI1YjYwNCwKLQkweGI2MDYzNWI2LAotCTB4MzBiNjAxMjAsCi0JMHgwODI0YjYwMSwKLQkweGI5MDgzNGI2LAotCTB4MjFmNTAyMmYsCi0JMHgyZmJiMDJkMywKLQkweDAwM2ZiYjAwLAotCTB4MDEwMDA3ZjEsCi0JMHhkMDAyMDNmMCwKKwkweGU1ZjA1MGUzLAorCTB4YmQyNGJkMDEsCisvKiAweDA0MzM6IGluaXRfdW5rX2xvb3AgKi8KKwkweGY0NDRiZDM0LAorCTB4ZjZiMDY4MjEsCisJMHgwZjBiZjQwMCwKKwkweGJiMDFmN2YwLAorCTB4NGZmZDA0ZjIsCisJMHgwMTMwYjYwNSwKKy8qIDB4MDQ0ODogaW5pdF91bmtfbmV4dCAqLworCTB4YjYwMTIwYjYsCisJMHgyNmIwMDRlMCwKKwkweGUyMWJmNDAxLAorLyogMHgwNDU0OiBpbml0X3Vua19kb25lICovCisJMHg4MDA3MDM4MCwKKwkweDI3ZjEwODA0LAorCTB4MjNmMDAxMDAsCisJMHgwMDIyY2YwMiwKKwkweDI1OTUzNGJkLAorCTB4MDAwN2YxMDgsCisJMHgwMTAzZjBjMCwKKwkweGJkMDAwNWQwLAorCTB4MDAwN2YxMDQsCisJMHgwMTAzZjBjMSwKKwkweGJkMDAwNWQwLAorCTB4MDAwZTk4MDQsCisJMHhmNTAxMGY5OCwKKwkweGJiMDE1MDIxLAorCTB4M2ZiYjAwMmYsCisJMHgwMTBlOTgwMCwKKwkweGY1MDIwZjk4LAorCTB4OTgwMTUwMjEsCisJMHhlZmZkMDUwZSwKKwkweDAwMmViYjAwLAorCTB4OTgwMDNlYmIsCisJMHgwZjk4MDIwZSwKKwkweDUwMjFmNTAzLAorCTB4MDcwZTk4MDEsCisJMHhiYjAwZWZmZCwKKwkweDNlYmIwMDJlLAorCTB4MDIzNWI2MDAsCisJMHhkMzAwMDdmMSwKKwkweGQwMDEwM2YwLAogCTB4MDRiZDAwMDMsCi0JMHgyOWYwMjRiZCwKLQkweDAwMDdmMTFmLAotCTB4MDIwM2YwMDgsCi0JMHhiZDAwMDJkMCwKLS8qIDB4MDUwNTogbWFpbiAqLwotCTB4MDAzMWY0MDQsCi0JMHhmMDAwMjhmNCwKLQkweDIxZjQyNGQ3LAotCTB4ZjQwMWY0MzksCi0JMHhmNDA0ZTRiMCwKLQkweDgxZmUxZTE4LAotCTB4MDYyN2YwMDEsCi0JMHgxMmZkMjBiZCwKLQkweDAxZTRiNjA0LAotCTB4ZmUwNTFlZmQsCi0JMHgyMWY1MDAxOCwKLQkweDBlZjQwNWZhLAotLyogMHgwNTM1OiBtYWluX25vdF9jdHhfeGZlciAqLwotCTB4MTBlZjk0ZDMsCi0JMHhmNTAxZjVmMCwKLQkweGY0MDM3ZTIxLAotLyogMHgwNTQyOiBpaCAqLwotCTB4ODBmOWM2MGUsCi0JMHhmOTAxODhmZSwKLQkweGY5OTBmOTgwLAotCTB4ZjliMGY5YTAsCi0JMHhmOWUwZjlkMCwKLQkweGYxMDRiZGYwLAotCTB4ZjAwMjAwYTcsCi0JMHhhYWNmMDBhMywKLQkweDA0YWJjNDAwLAotCTB4ZjAyYzBiZjQsCi0JMHhlN2YxMjRkNywKLQkweGUzZjAxYTAwLAotCTB4MDBlZWNmMDAsCi0JMHgxOTAwZjdmMSwKLQkweGNmMDBmM2YwLAotCTB4MjFmNDAwZmYsCi0JMHgwMWU3ZjAwNCwKLQkweDFkMDAwN2YxLAotCTB4ZDAwMDAzZjAsCi0JMHgwNGJkMDAwZSwKLS8qIDB4MDU5MDogaWhfbm9fZmlmbyAqLwotCTB4MDEwMDA3ZjEsCi0JMHhkMDAwMDNmMCwKLQkweDA0YmQwMDBhLAotCTB4ZTBmY2YwZmMsCi0JMHhiMGZjZDBmYywKLQkweDkwZmNhMGZjLAotCTB4ODhmZTgwZmMsCi0JMHhmNDgwZmMwMCwKLQkweDAxZjgwMDMyLAotLyogMHgwNWI0OiBodWJfYmFycmllcl9kb25lICovCi0JMHg5ODAxZjdmMCwKLQkweGZlYmIwNDBlLAotCTB4MDJmZmI5MDQsCi0JMHg5NDE4ZTdmMSwKLQkweGY0NDBlM2YwLAotCTB4MDBmODlkMjEsCi0vKiAweDA1Y2M6IGN0eF9yZWRzd2l0Y2ggKi8KLQkweGYxMjBmN2YwLAorCTB4YjYwODI1YjYsCisJMHgyMGI2MDYzNSwKKwkweDAxMzBiNjAxLAorCTB4YjYwODI0YjYsCisJMHgyZmI5MDgzNCwKKwkweGQzMjFmNTAyLAorCTB4MDAyZmJiMDIsCisJMHhmMTAwM2ZiYiwKKwkweGYwMDEwMDA3LAorCTB4MDNkMDAyMDMsCisJMHhiZDA0YmQwMCwKKwkweDFmMjlmMDI0LAorCTB4MDgwMDA3ZjEsCisJMHhkMDAyMDNmMCwKKwkweDA0YmQwMDAyLAorLyogMHgwNTA4OiBtYWluICovCisJMHhmNDAwMzFmNCwKKwkweGQ3ZjAwMDI4LAorCTB4MzkyMWY0MjQsCisJMHhiMGY0MDFmNCwKKwkweDE4ZjQwNGU0LAorCTB4MDE4MWZlMWUsCisJMHhiZDA2MjdmMCwKKwkweDA0MTJmZDIwLAorCTB4ZmQwMWU0YjYsCisJMHgxOGZlMDUxZSwKKwkweGZkMjFmNTAwLAorCTB4ZDMwZWY0MDUsCisvKiAweDA1Mzg6IG1haW5fbm90X2N0eF94ZmVyICovCisJMHhmMDEwZWY5NCwKKwkweDIxZjUwMWY1LAorCTB4MGVmNDAzN2UsCisvKiAweDA1NDU6IGloICovCisJMHhmZTgwZjljNiwKKwkweDgwZjkwMTg4LAorCTB4YTBmOTkwZjksCisJMHhkMGY5YjBmOSwKKwkweGYwZjllMGY5LAorCTB4YTdmMTA0YmQsCisJMHhhM2YwMDIwMCwKKwkweDAwYWFjZjAwLAorCTB4ZjQwNGFiYzQsCisJMHhkN2YwMmMwYiwKKwkweDAwZTdmMTI0LAorCTB4MDBlM2YwMWEsCisJMHhmMTAwZWVjZiwKKwkweGYwMTkwMGY3LAorCTB4ZmZjZjAwZjMsCisJMHgwNDIxZjQwMCwKKwkweGYxMDFlN2YwLAorCTB4ZjAxZDAwMDcsCisJMHgwZWQwMDAwMywKKy8qIDB4MDU5MzogaWhfbm9fZmlmbyAqLworCTB4ZjEwNGJkMDAsCisJMHhmMDAxMDAwNywKKwkweDBhZDAwMDAzLAorCTB4ZmMwNGJkMDAsCisJMHhmY2UwZmNmMCwKKwkweGZjYjBmY2QwLAorCTB4ZmM5MGZjYTAsCisJMHgwMDg4ZmU4MCwKKwkweDMyZjQ4MGZjLAorLyogMHgwNWI3OiBodWJfYmFycmllcl9kb25lICovCisJMHhmMDAxZjgwMCwKKwkweDBlOTgwMWY3LAorCTB4MDRmZWJiMDQsCisJMHhmMTAyZmZiOSwKKwkweGYwOTQxOGU3LAorCTB4MjFmNDQwZTMsCisvKiAweDA1Y2Y6IGN0eF9yZWRzd2l0Y2ggKi8KKwkweGYwMDBmODlkLAorCTB4MDdmMTIwZjcsCisJMHgwM2YwODUwMCwKKwkweDAwMGZkMDAxLAorCTB4ZTdmMDA0YmQsCisvKiAweDA1ZTE6IGN0eF9yZWRzd2l0Y2hfZGVsYXkgKi8KKwkweDAxZTJiNjA4LAorCTB4ZjFmZDFiZjQsCisJMHhmMTA4MDBmNSwKKwkweGYxMDIwMGY1LAogCTB4ZjA4NTAwMDcsCiAJMHgwZmQwMDEwMywKLQkweGYwMDRiZDAwLAotLyogMHgwNWRlOiBjdHhfcmVkc3dpdGNoX2RlbGF5ICovCi0JMHhlMmI2MDhlNywKLQkweGZkMWJmNDAxLAotCTB4MDgwMGY1ZjEsCi0JMHgwMjAwZjVmMSwKLQkweDg1MDAwN2YxLAotCTB4ZDAwMTAzZjAsCi0JMHgwNGJkMDAwZiwKLS8qIDB4MDVmYTogY3R4X3hmZXIgKi8KLQkweDA3ZjEwMGY4LAotCTB4MDNmMDgxMDAsCi0JMHgwMDBmZDAwMiwKLQkweDExZjQwNGJkLAotCTB4Y2MyMWY1MDcsCi0vKiAweDA2MGQ6IGN0eF94ZmVyX25vdF9sb2FkICovCi0JMHg2YTIxZjUwNSwKLQkweGYxMjRiZDAyLAotCTB4ZjA0N2ZjMDcsCi0JMHgwMmQwMDIwMywKLQkweGYwMDRiZDAwLAotCTB4MjBiNjAxMmMsCi0JMHhmYzA3ZjEwMywKLQkweDAyMDNmMDRhLAotCTB4YmQwMDAyZDAsCi0JMHgwMWFjZjAwNCwKLQkweGYxMDJhNWYwLAotCTB4ZjAwMDAwYjcsCi0JMHgwYzk4NTBiMywKLQkweDBmYzRiNjA0LAotCTB4OTgwMGJjYmIsCi0JMHgwZDk4MDAwYywKLQkweDAwZTdmMDAxLAotCTB4MDE2ZjIxZjUsCi0JMHhmMTAxYWNmMCwKLQkweGYwNDAwMGI3LAotCTB4MGM5ODUwYjMsCi0JMHgwZmM0YjYwNCwKLQkweDk4MDBiY2JiLAotCTB4MGQ5ODAxMGMsCi0JMHgwNjBmOTgwMiwKLQkweDA4MDBlN2YxLAotCTB4MDE2ZjIxZjUsCisJMHhmODA0YmQwMCwKKy8qIDB4MDVmZDogY3R4X3hmZXIgKi8KKwkweDAwMDdmMTAwLAorCTB4MDIwM2YwODEsCisJMHhiZDAwMGZkMCwKKwkweDA3MTFmNDA0LAorCTB4MDVjZjIxZjUsCisvKiAweDA2MTA6IGN0eF94ZmVyX25vdF9sb2FkICovCisJMHgwMjZhMjFmNSwKKwkweDA3ZjEyNGJkLAorCTB4MDNmMDQ3ZmMsCisJMHgwMDAyZDAwMiwKKwkweDJjZjAwNGJkLAorCTB4MDMyMGI2MDEsCisJMHg0YWZjMDdmMSwKKwkweGQwMDIwM2YwLAorCTB4MDRiZDAwMDIsCiAJMHhmMDAxYWNmMCwKLQkweGI3ZjEwNGE1LAotCTB4YjNmMDMwMDAsCisJMHhiN2YxMDJhNSwKKwkweGIzZjAwMDAwLAogCTB4MDQwYzk4NTAsCiAJMHhiYjBmYzRiNiwKIAkweDBjOTgwMGJjLAotCTB4MDMwZDk4MDIsCi0JMHhmMTA4MGY5OCwKLQkweGY1MDIwMGU3LAotCTB4ZjUwMTZmMjEsCi0JMHhmNDAyNWUyMSwKLQkweDEyZjQwNjAxLAotLyogMHgwNmE5OiBjdHhfeGZlcl9wb3N0ICovCi0JMHg3ZjIxZjUwNywKLS8qIDB4MDZhZDogY3R4X3hmZXJfZG9uZSAqLwotCTB4YjQyMWY1MDIsCi0JMHgwMDAwZjgwNSwKLQkweDAwMDAwMDAwLAorCTB4MDEwZDk4MDAsCisJMHhmNTAwZTdmMCwKKwkweGYwMDE2ZjIxLAorCTB4YjdmMTAxYWMsCisJMHhiM2YwNDAwMCwKKwkweDA0MGM5ODUwLAorCTB4YmIwZmM0YjYsCisJMHgwYzk4MDBiYywKKwkweDAyMGQ5ODAxLAorCTB4ZjEwNjBmOTgsCisJMHhmNTA4MDBlNywKKwkweGYwMDE2ZjIxLAorCTB4YTVmMDAxYWMsCisJMHgwMGI3ZjEwNCwKKwkweDUwYjNmMDMwLAorCTB4YjYwNDBjOTgsCisJMHhiY2JiMGZjNCwKKwkweDAyMGM5ODAwLAorCTB4OTgwMzBkOTgsCisJMHhlN2YxMDgwZiwKKwkweDIxZjUwMjAwLAorCTB4MjFmNTAxNmYsCisJMHgwMWY0MDI1ZSwKKwkweDA3MTJmNDA2LAorLyogMHgwNmFjOiBjdHhfeGZlcl9wb3N0ICovCisJMHgwMjdmMjFmNSwKKy8qIDB4MDZiMDogY3R4X3hmZXJfZG9uZSAqLworCTB4MDViNzIxZjUsCisJMHgwMDAwMDBmOCwKIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGNnazExMC5mdWMzLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9mdWMvZ3BjZ2sxMTAuZnVjMy5oCmluZGV4IGVlOGU1NGQuLjFjNmUxMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGNnazExMC5mdWMzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZ3IvZnVjL2dwY2drMTEwLmZ1YzMuaApAQCAtMzE0LDcgKzMxNCw3IEBACiAJMHgwM2YwMTIwMCwKIAkweDAwMDJkMDAwLAogCTB4MTdmMTA0YmQsCi0JMHgxMGZlMDU0MiwKKwkweDEwZmUwNTQ1LAogCTB4MDAwN2YxMDAsCiAJMHgwMDAzZjAwNywKIAkweGJkMDAwMGQwLApAQCAtMzM4LDE4NCArMzM4LDE4NCBAQAogCTB4MDJkMDAxMDMsCiAJMHhmMTA0YmQwMCwKIAkweGYwMGMzMGU3LAotCTB4MjRiZDUwZTMsCi0JMHg0NGJkMzRiZCwKLS8qIDB4MDQzMDogaW5pdF91bmtfbG9vcCAqLwotCTB4YjA2ODIxZjQsCi0JMHgwYmY0MDBmNiwKLQkweDAxZjdmMDBmLAotCTB4ZmQwNGYyYmIsCi0JMHgzMGI2MDU0ZiwKLS8qIDB4MDQ0NTogaW5pdF91bmtfbmV4dCAqLwotCTB4MDEyMGI2MDEsCi0JMHhiMDA0ZTBiNiwKLQkweDFiZjQwMjI2LAotLyogMHgwNDUxOiBpbml0X3Vua19kb25lICovCi0JMHgwNzAzODBlMiwKLQkweGYxMDgwNDgwLAotCTB4ZjAwMTAwMjcsCi0JMHgyMmNmMDIyMywKLQkweDk1MzRiZDAwLAotCTB4MDdmMTA4MjUsCi0JMHgwM2YwYzAwMCwKLQkweDAwMDVkMDAxLAotCTB4MDdmMTA0YmQsCi0JMHgwM2YwYzEwMCwKLQkweDAwMDVkMDAxLAotCTB4MGU5ODA0YmQsCi0JMHgwMTBmOTgwMCwKLQkweDAxNTAyMWY1LAotCTB4YmIwMDJmYmIsCi0JMHgwZTk4MDAzZiwKLQkweDAyMGY5ODAxLAotCTB4MDE1MDIxZjUsCi0JMHhmZDA1MGU5OCwKLQkweDJlYmIwMGVmLAotCTB4MDAzZWJiMDAsCi0JMHg5ODAyMGU5OCwKLQkweDIxZjUwMzBmLAotCTB4MGU5ODAxNTAsCi0JMHgwMGVmZmQwNywKLQkweGJiMDAyZWJiLAotCTB4MzViNjAwM2UsCi0JMHgwMDA3ZjEwMiwKLQkweDAxMDNmMGQzLAotCTB4YmQwMDAzZDAsCi0JMHgwODI1YjYwNCwKLQkweGI2MDYzNWI2LAotCTB4MzBiNjAxMjAsCi0JMHgwODI0YjYwMSwKLQkweGI5MDgzNGI2LAotCTB4MjFmNTAyMmYsCi0JMHgyZmJiMDJkMywKLQkweDAwM2ZiYjAwLAotCTB4MDEwMDA3ZjEsCi0JMHhkMDAyMDNmMCwKKwkweGU1ZjA1MGUzLAorCTB4YmQyNGJkMDEsCisvKiAweDA0MzM6IGluaXRfdW5rX2xvb3AgKi8KKwkweGY0NDRiZDM0LAorCTB4ZjZiMDY4MjEsCisJMHgwZjBiZjQwMCwKKwkweGJiMDFmN2YwLAorCTB4NGZmZDA0ZjIsCisJMHgwMTMwYjYwNSwKKy8qIDB4MDQ0ODogaW5pdF91bmtfbmV4dCAqLworCTB4YjYwMTIwYjYsCisJMHgyNmIwMDRlMCwKKwkweGUyMWJmNDAyLAorLyogMHgwNDU0OiBpbml0X3Vua19kb25lICovCisJMHg4MDA3MDM4MCwKKwkweDI3ZjEwODA0LAorCTB4MjNmMDAxMDAsCisJMHgwMDIyY2YwMiwKKwkweDI1OTUzNGJkLAorCTB4MDAwN2YxMDgsCisJMHgwMTAzZjBjMCwKKwkweGJkMDAwNWQwLAorCTB4MDAwN2YxMDQsCisJMHgwMTAzZjBjMSwKKwkweGJkMDAwNWQwLAorCTB4MDAwZTk4MDQsCisJMHhmNTAxMGY5OCwKKwkweGJiMDE1MDIxLAorCTB4M2ZiYjAwMmYsCisJMHgwMTBlOTgwMCwKKwkweGY1MDIwZjk4LAorCTB4OTgwMTUwMjEsCisJMHhlZmZkMDUwZSwKKwkweDAwMmViYjAwLAorCTB4OTgwMDNlYmIsCisJMHgwZjk4MDIwZSwKKwkweDUwMjFmNTAzLAorCTB4MDcwZTk4MDEsCisJMHhiYjAwZWZmZCwKKwkweDNlYmIwMDJlLAorCTB4MDIzNWI2MDAsCisJMHhkMzAwMDdmMSwKKwkweGQwMDEwM2YwLAogCTB4MDRiZDAwMDMsCi0JMHgyOWYwMjRiZCwKLQkweDAwMDdmMTFmLAotCTB4MDIwM2YwMzAsCi0JMHhiZDAwMDJkMCwKLS8qIDB4MDUwNTogbWFpbiAqLwotCTB4MDAzMWY0MDQsCi0JMHhmMDAwMjhmNCwKLQkweDIxZjQyNGQ3LAotCTB4ZjQwMWY0MzksCi0JMHhmNDA0ZTRiMCwKLQkweDgxZmUxZTE4LAotCTB4MDYyN2YwMDEsCi0JMHgxMmZkMjBiZCwKLQkweDAxZTRiNjA0LAotCTB4ZmUwNTFlZmQsCi0JMHgyMWY1MDAxOCwKLQkweDBlZjQwNWZhLAotLyogMHgwNTM1OiBtYWluX25vdF9jdHhfeGZlciAqLwotCTB4MTBlZjk0ZDMsCi0JMHhmNTAxZjVmMCwKLQkweGY0MDM3ZTIxLAotLyogMHgwNTQyOiBpaCAqLwotCTB4ODBmOWM2MGUsCi0JMHhmOTAxODhmZSwKLQkweGY5OTBmOTgwLAotCTB4ZjliMGY5YTAsCi0JMHhmOWUwZjlkMCwKLQkweGYxMDRiZGYwLAotCTB4ZjAwMjAwYTcsCi0JMHhhYWNmMDBhMywKLQkweDA0YWJjNDAwLAotCTB4ZjAyYzBiZjQsCi0JMHhlN2YxMjRkNywKLQkweGUzZjAxYTAwLAotCTB4MDBlZWNmMDAsCi0JMHgxOTAwZjdmMSwKLQkweGNmMDBmM2YwLAotCTB4MjFmNDAwZmYsCi0JMHgwMWU3ZjAwNCwKLQkweDFkMDAwN2YxLAotCTB4ZDAwMDAzZjAsCi0JMHgwNGJkMDAwZSwKLS8qIDB4MDU5MDogaWhfbm9fZmlmbyAqLwotCTB4MDEwMDA3ZjEsCi0JMHhkMDAwMDNmMCwKLQkweDA0YmQwMDBhLAotCTB4ZTBmY2YwZmMsCi0JMHhiMGZjZDBmYywKLQkweDkwZmNhMGZjLAotCTB4ODhmZTgwZmMsCi0JMHhmNDgwZmMwMCwKLQkweDAxZjgwMDMyLAotLyogMHgwNWI0OiBodWJfYmFycmllcl9kb25lICovCi0JMHg5ODAxZjdmMCwKLQkweGZlYmIwNDBlLAotCTB4MDJmZmI5MDQsCi0JMHg5NDE4ZTdmMSwKLQkweGY0NDBlM2YwLAotCTB4MDBmODlkMjEsCi0vKiAweDA1Y2M6IGN0eF9yZWRzd2l0Y2ggKi8KLQkweGYxMjBmN2YwLAorCTB4YjYwODI1YjYsCisJMHgyMGI2MDYzNSwKKwkweDAxMzBiNjAxLAorCTB4YjYwODI0YjYsCisJMHgyZmI5MDgzNCwKKwkweGQzMjFmNTAyLAorCTB4MDAyZmJiMDIsCisJMHhmMTAwM2ZiYiwKKwkweGYwMDEwMDA3LAorCTB4MDNkMDAyMDMsCisJMHhiZDA0YmQwMCwKKwkweDFmMjlmMDI0LAorCTB4MzAwMDA3ZjEsCisJMHhkMDAyMDNmMCwKKwkweDA0YmQwMDAyLAorLyogMHgwNTA4OiBtYWluICovCisJMHhmNDAwMzFmNCwKKwkweGQ3ZjAwMDI4LAorCTB4MzkyMWY0MjQsCisJMHhiMGY0MDFmNCwKKwkweDE4ZjQwNGU0LAorCTB4MDE4MWZlMWUsCisJMHhiZDA2MjdmMCwKKwkweDA0MTJmZDIwLAorCTB4ZmQwMWU0YjYsCisJMHgxOGZlMDUxZSwKKwkweGZkMjFmNTAwLAorCTB4ZDMwZWY0MDUsCisvKiAweDA1Mzg6IG1haW5fbm90X2N0eF94ZmVyICovCisJMHhmMDEwZWY5NCwKKwkweDIxZjUwMWY1LAorCTB4MGVmNDAzN2UsCisvKiAweDA1NDU6IGloICovCisJMHhmZTgwZjljNiwKKwkweDgwZjkwMTg4LAorCTB4YTBmOTkwZjksCisJMHhkMGY5YjBmOSwKKwkweGYwZjllMGY5LAorCTB4YTdmMTA0YmQsCisJMHhhM2YwMDIwMCwKKwkweDAwYWFjZjAwLAorCTB4ZjQwNGFiYzQsCisJMHhkN2YwMmMwYiwKKwkweDAwZTdmMTI0LAorCTB4MDBlM2YwMWEsCisJMHhmMTAwZWVjZiwKKwkweGYwMTkwMGY3LAorCTB4ZmZjZjAwZjMsCisJMHgwNDIxZjQwMCwKKwkweGYxMDFlN2YwLAorCTB4ZjAxZDAwMDcsCisJMHgwZWQwMDAwMywKKy8qIDB4MDU5MzogaWhfbm9fZmlmbyAqLworCTB4ZjEwNGJkMDAsCisJMHhmMDAxMDAwNywKKwkweDBhZDAwMDAzLAorCTB4ZmMwNGJkMDAsCisJMHhmY2UwZmNmMCwKKwkweGZjYjBmY2QwLAorCTB4ZmM5MGZjYTAsCisJMHgwMDg4ZmU4MCwKKwkweDMyZjQ4MGZjLAorLyogMHgwNWI3OiBodWJfYmFycmllcl9kb25lICovCisJMHhmMDAxZjgwMCwKKwkweDBlOTgwMWY3LAorCTB4MDRmZWJiMDQsCisJMHhmMTAyZmZiOSwKKwkweGYwOTQxOGU3LAorCTB4MjFmNDQwZTMsCisvKiAweDA1Y2Y6IGN0eF9yZWRzd2l0Y2ggKi8KKwkweGYwMDBmODlkLAorCTB4MDdmMTIwZjcsCisJMHgwM2YwODUwMCwKKwkweDAwMGZkMDAxLAorCTB4ZTdmMDA0YmQsCisvKiAweDA1ZTE6IGN0eF9yZWRzd2l0Y2hfZGVsYXkgKi8KKwkweDAxZTJiNjA4LAorCTB4ZjFmZDFiZjQsCisJMHhmMTA4MDBmNSwKKwkweGYxMDIwMGY1LAogCTB4ZjA4NTAwMDcsCiAJMHgwZmQwMDEwMywKLQkweGYwMDRiZDAwLAotLyogMHgwNWRlOiBjdHhfcmVkc3dpdGNoX2RlbGF5ICovCi0JMHhlMmI2MDhlNywKLQkweGZkMWJmNDAxLAotCTB4MDgwMGY1ZjEsCi0JMHgwMjAwZjVmMSwKLQkweDg1MDAwN2YxLAotCTB4ZDAwMTAzZjAsCi0JMHgwNGJkMDAwZiwKLS8qIDB4MDVmYTogY3R4X3hmZXIgKi8KLQkweDA3ZjEwMGY4LAotCTB4MDNmMDgxMDAsCi0JMHgwMDBmZDAwMiwKLQkweDExZjQwNGJkLAotCTB4Y2MyMWY1MDcsCi0vKiAweDA2MGQ6IGN0eF94ZmVyX25vdF9sb2FkICovCi0JMHg2YTIxZjUwNSwKLQkweGYxMjRiZDAyLAotCTB4ZjA0N2ZjMDcsCi0JMHgwMmQwMDIwMywKLQkweGYwMDRiZDAwLAotCTB4MjBiNjAxMmMsCi0JMHhmYzA3ZjEwMywKLQkweDAyMDNmMDRhLAotCTB4YmQwMDAyZDAsCi0JMHgwMWFjZjAwNCwKLQkweGYxMDJhNWYwLAotCTB4ZjAwMDAwYjcsCi0JMHgwYzk4NTBiMywKLQkweDBmYzRiNjA0LAotCTB4OTgwMGJjYmIsCi0JMHgwZDk4MDAwYywKLQkweDAwZTdmMDAxLAotCTB4MDE2ZjIxZjUsCi0JMHhmMTAxYWNmMCwKLQkweGYwNDAwMGI3LAotCTB4MGM5ODUwYjMsCi0JMHgwZmM0YjYwNCwKLQkweDk4MDBiY2JiLAotCTB4MGQ5ODAxMGMsCi0JMHgwNjBmOTgwMiwKLQkweDA4MDBlN2YxLAotCTB4MDE2ZjIxZjUsCisJMHhmODA0YmQwMCwKKy8qIDB4MDVmZDogY3R4X3hmZXIgKi8KKwkweDAwMDdmMTAwLAorCTB4MDIwM2YwODEsCisJMHhiZDAwMGZkMCwKKwkweDA3MTFmNDA0LAorCTB4MDVjZjIxZjUsCisvKiAweDA2MTA6IGN0eF94ZmVyX25vdF9sb2FkICovCisJMHgwMjZhMjFmNSwKKwkweDA3ZjEyNGJkLAorCTB4MDNmMDQ3ZmMsCisJMHgwMDAyZDAwMiwKKwkweDJjZjAwNGJkLAorCTB4MDMyMGI2MDEsCisJMHg0YWZjMDdmMSwKKwkweGQwMDIwM2YwLAorCTB4MDRiZDAwMDIsCiAJMHhmMDAxYWNmMCwKLQkweGI3ZjEwNGE1LAotCTB4YjNmMDMwMDAsCisJMHhiN2YxMDJhNSwKKwkweGIzZjAwMDAwLAogCTB4MDQwYzk4NTAsCiAJMHhiYjBmYzRiNiwKIAkweDBjOTgwMGJjLAotCTB4MDMwZDk4MDIsCi0JMHhmMTA4MGY5OCwKLQkweGY1MDIwMGU3LAotCTB4ZjUwMTZmMjEsCi0JMHhmNDAyNWUyMSwKLQkweDEyZjQwNjAxLAotLyogMHgwNmE5OiBjdHhfeGZlcl9wb3N0ICovCi0JMHg3ZjIxZjUwNywKLS8qIDB4MDZhZDogY3R4X3hmZXJfZG9uZSAqLwotCTB4YjQyMWY1MDIsCi0JMHgwMDAwZjgwNSwKLQkweDAwMDAwMDAwLAorCTB4MDEwZDk4MDAsCisJMHhmNTAwZTdmMCwKKwkweGYwMDE2ZjIxLAorCTB4YjdmMTAxYWMsCisJMHhiM2YwNDAwMCwKKwkweDA0MGM5ODUwLAorCTB4YmIwZmM0YjYsCisJMHgwYzk4MDBiYywKKwkweDAyMGQ5ODAxLAorCTB4ZjEwNjBmOTgsCisJMHhmNTA4MDBlNywKKwkweGYwMDE2ZjIxLAorCTB4YTVmMDAxYWMsCisJMHgwMGI3ZjEwNCwKKwkweDUwYjNmMDMwLAorCTB4YjYwNDBjOTgsCisJMHhiY2JiMGZjNCwKKwkweDAyMGM5ODAwLAorCTB4OTgwMzBkOTgsCisJMHhlN2YxMDgwZiwKKwkweDIxZjUwMjAwLAorCTB4MjFmNTAxNmYsCisJMHgwMWY0MDI1ZSwKKwkweDA3MTJmNDA2LAorLyogMHgwNmFjOiBjdHhfeGZlcl9wb3N0ICovCisJMHgwMjdmMjFmNSwKKy8qIDB4MDZiMDogY3R4X3hmZXJfZG9uZSAqLworCTB4MDViNzIxZjUsCisJMHgwMDAwMDBmOCwKIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGNnazIwOC5mdWM1LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9mdWMvZ3BjZ2syMDguZnVjNS5oCmluZGV4IGZiY2MzNDIuLjg0YWY3ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGNnazIwOC5mdWM1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZ3IvZnVjL2dwY2drMjA4LmZ1YzUuaApAQCAtMjc2LDcgKzI3Niw3IEBACiAJMHgwMjAyMDAxNCwKIAkweGY2MTIwMDQwLAogCTB4MDRiZDAwMDIsCi0JMHhmZTA0ODE0MSwKKwkweGZlMDQ4NDQxLAogCTB4MDA0MDAwMTAsCiAJMHgwMDAwZjYwNywKIAkweDA0MDIwNGJkLApAQCAtMjk1LDE2NSArMjk1LDE2NSBAQAogCTB4MDFjOTAwODAsCiAJMHhiZDAwMDJmNiwKIAkweDBjMzA4ZTA0LAotCTB4YmQyNGJkNTAsCi0vKiAweDAzODM6IGluaXRfdW5rX2xvb3AgKi8KLQkweDdlNDRiZDM0LAotCTB4YjAwMDAwNjUsCi0JMHgwYmY0MDBmNiwKLQkweGJiMDEwZjBlLAotCTB4NGZmZDA0ZjIsCi0JMHgwMTMwYjYwNSwKLS8qIDB4MDM5ODogaW5pdF91bmtfbmV4dCAqLwotCTB4YjYwMTIwYjYsCi0JMHgyNmIwMDRlMCwKLQkweGUyMWJmNDAxLAotLyogMHgwM2E0OiBpbml0X3Vua19kb25lICovCi0JMHhiNTA3MDNiNSwKLQkweDAwODIwODA0LAotCTB4MjJjZjAyMDEsCi0JMHg5NTM0YmQwMCwKLQkweDAwODAwODI1LAotCTB4MDVmNjAxYzAsCi0JMHg4MDA0YmQwMCwKLQkweGY2MDFjMTAwLAotCTB4MDRiZDAwMDUsCi0JMHg5ODAwMGU5OCwKLQkweDIwN2UwMTBmLAotCTB4MmZiYjAwMDEsCi0JMHgwMDNmYmIwMCwKLQkweDk4MDEwZTk4LAotCTB4MjA3ZTAyMGYsCi0JMHgwZTk4MDAwMSwKLQkweDAwZWZmZDA1LAotCTB4YmIwMDJlYmIsCi0JMHgwZTk4MDAzZSwKLQkweDAzMGY5ODAyLAotCTB4MDAwMTIwN2UsCi0JMHhmZDA3MGU5OCwKLQkweDJlYmIwMGVmLAotCTB4MDAzZWJiMDAsCi0JMHg4MDAyMzViNiwKLQkweGY2MDFkMzAwLAotCTB4MDRiZDAwMDMsCi0JMHhiNjA4MjViNiwKLQkweDIwYjYwNjM1LAotCTB4MDEzMGI2MDEsCi0JMHhiNjA4MjRiNiwKLQkweDJmYjIwODM0LAotCTB4MDAwMjY4N2UsCi0JMHhiYjAwMmZiYiwKLQkweDAwODAwMDNmLAotCTB4MDNmNjAyMDEsCi0JMHhiZDA0YmQwMCwKLQkweDFmMjlmMDI0LAotCTB4MDIzMDAwODAsCi0JMHhiZDAwMDJmNiwKLS8qIDB4MDQ0NTogbWFpbiAqLwotCTB4MDAzMWY0MDQsCi0JMHgwZDAwMjhmNCwKLQkweDAwMzc3ZTI0LAotCTB4ZjQwMWY0MDAsCi0JMHhmNDA0ZTRiMCwKLQkweDgxZmUxZDE4LAotCTB4YmQwNjAyMDEsCi0JMHgwNDEyZmQyMCwKLQkweGZkMDFlNGI2LAotCTB4MThmZTA1MWUsCi0JMHgwNTE4N2UwMCwKLQkweGQ0MGVmNDAwLAotLyogMHgwNDc0OiBtYWluX25vdF9jdHhfeGZlciAqLwotCTB4ZjAxMGVmOTQsCi0JMHhmODdlMDFmNSwKLQkweDBlZjQwMDAyLAotLyogMHgwNDgxOiBpaCAqLwotCTB4ZmU4MGY5YzcsCi0JMHg4MGY5MDE4OCwKLQkweGEwZjk5MGY5LAotCTB4ZDBmOWIwZjksCi0JMHhmMGY5ZTBmOSwKLQkweDAwNGEwNGJkLAotCTB4MDBhYWNmMDIsCi0JMHhmNDA0YWJjNCwKLQkweDI0MGQxZjBiLAotCTB4Y2YxYTAwNGUsCi0JMHgwMDRmMDBlZSwKLQkweDAwZmZjZjE5LAotCTB4MDAwMDA0N2UsCi0JMHgwMDQwMDEwZSwKLQkweDAwMGVmNjFkLAotLyogMHgwNGJlOiBpaF9ub19maWZvICovCi0JMHgwMDQwMDRiZCwKLQkweDAwMGFmNjAxLAotCTB4ZjBmYzA0YmQsCi0JMHhkMGZjZTBmYywKLQkweGEwZmNiMGZjLAotCTB4ODBmYzkwZmMsCi0JMHhmYzAwODhmZSwKLQkweDAwMzJmNDgwLAotLyogMHgwNGRlOiBodWJfYmFycmllcl9kb25lICovCi0JMHgwMTBmMDFmOCwKLQkweGJiMDQwZTk4LAotCTB4ZmZiMjA0ZmUsCi0JMHg0MDk0MTg4ZSwKLQkweDAwMDA4ZjdlLAotLyogMHgwNGYyOiBjdHhfcmVkc3dpdGNoICovCi0JMHgyMDBmMDBmOCwKKwkweDAxZTVmMDUwLAorCTB4MzRiZDI0YmQsCisvKiAweDAzODY6IGluaXRfdW5rX2xvb3AgKi8KKwkweDY1N2U0NGJkLAorCTB4ZjZiMDAwMDAsCisJMHgwZTBiZjQwMCwKKwkweGYyYmIwMTBmLAorCTB4MDU0ZmZkMDQsCisvKiAweDAzOWI6IGluaXRfdW5rX25leHQgKi8KKwkweGI2MDEzMGI2LAorCTB4ZTBiNjAxMjAsCisJMHgwMTI2YjAwNCwKKy8qIDB4MDNhNzogaW5pdF91bmtfZG9uZSAqLworCTB4YjVlMjFiZjQsCisJMHgwNGI1MDcwMywKKwkweDAxMDA4MjA4LAorCTB4MDAyMmNmMDIsCisJMHgyNTk1MzRiZCwKKwkweGMwMDA4MDA4LAorCTB4MDAwNWY2MDEsCisJMHgwMDgwMDRiZCwKKwkweDA1ZjYwMWMxLAorCTB4OTgwNGJkMDAsCisJMHgwZjk4MDAwZSwKKwkweDAxMjA3ZTAxLAorCTB4MDAyZmJiMDAsCisJMHg5ODAwM2ZiYiwKKwkweDBmOTgwMTBlLAorCTB4MDEyMDdlMDIsCisJMHgwNTBlOTgwMCwKKwkweGJiMDBlZmZkLAorCTB4M2ViYjAwMmUsCisJMHgwMjBlOTgwMCwKKwkweDdlMDMwZjk4LAorCTB4OTgwMDAxMjAsCisJMHhlZmZkMDcwZSwKKwkweDAwMmViYjAwLAorCTB4YjYwMDNlYmIsCisJMHgwMDgwMDIzNSwKKwkweDAzZjYwMWQzLAorCTB4YjYwNGJkMDAsCisJMHgzNWI2MDgyNSwKKwkweDAxMjBiNjA2LAorCTB4YjYwMTMwYjYsCisJMHgzNGI2MDgyNCwKKwkweDdlMmZiMjA4LAorCTB4YmIwMDAyNjgsCisJMHgzZmJiMDAyZiwKKwkweDAxMDA4MDAwLAorCTB4MDAwM2Y2MDIsCisJMHgyNGJkMDRiZCwKKwkweDgwMWYyOWYwLAorCTB4ZjYwMjMwMDAsCisJMHgwNGJkMDAwMiwKKy8qIDB4MDQ0ODogbWFpbiAqLworCTB4ZjQwMDMxZjQsCisJMHgyNDBkMDAyOCwKKwkweDAwMDAzNzdlLAorCTB4YjBmNDAxZjQsCisJMHgxOGY0MDRlNCwKKwkweDAxODFmZTFkLAorCTB4MjBiZDA2MDIsCisJMHhiNjA0MTJmZCwKKwkweDFlZmQwMWU0LAorCTB4MDAxOGZlMDUsCisJMHgwMDA1MWI3ZSwKKy8qIDB4MDQ3NzogbWFpbl9ub3RfY3R4X3hmZXIgKi8KKwkweDk0ZDQwZWY0LAorCTB4ZjVmMDEwZWYsCisJMHgwMmY4N2UwMSwKKwkweGM3MGVmNDAwLAorLyogMHgwNDg0OiBpaCAqLworCTB4ODhmZTgwZjksCisJMHhmOTgwZjkwMSwKKwkweGY5YTBmOTkwLAorCTB4ZjlkMGY5YjAsCisJMHhiZGYwZjllMCwKKwkweDAyMDA0YTA0LAorCTB4YzQwMGFhY2YsCisJMHgwYmY0MDRhYiwKKwkweDRlMjQwZDFmLAorCTB4ZWVjZjFhMDAsCisJMHgxOTAwNGYwMCwKKwkweDdlMDBmZmNmLAorCTB4MGUwMDAwMDQsCisJMHgxZDAwNDAwMSwKKwkweGJkMDAwZWY2LAorLyogMHgwNGMxOiBpaF9ub19maWZvICovCisJMHgwMTAwNDAwNCwKKwkweGJkMDAwYWY2LAorCTB4ZmNmMGZjMDQsCisJMHhmY2QwZmNlMCwKKwkweGZjYTBmY2IwLAorCTB4ZmU4MGZjOTAsCisJMHg4MGZjMDA4OCwKKwkweGY4MDAzMmY0LAorLyogMHgwNGUxOiBodWJfYmFycmllcl9kb25lICovCisJMHg5ODAxMGYwMSwKKwkweGZlYmIwNDBlLAorCTB4OGVmZmIyMDQsCisJMHg3ZTQwOTQxOCwKKwkweGY4MDAwMDhmLAorLyogMHgwNGY1OiBjdHhfcmVkc3dpdGNoICovCisJMHg4MDIwMGYwMCwKKwkweGY2MDE4NTAwLAorCTB4MDRiZDAwMGYsCisvKiAweDA1MDI6IGN0eF9yZWRzd2l0Y2hfZGVsYXkgKi8KKwkweGUyYjYwODBlLAorCTB4ZmQxYmY0MDEsCisJMHgwODAwZjVmMSwKKwkweDAyMDBmNWYxLAogCTB4MDE4NTAwODAsCiAJMHhiZDAwMGZmNiwKLS8qIDB4MDRmZjogY3R4X3JlZHN3aXRjaF9kZWxheSAqLwotCTB4YjYwODBlMDQsCi0JMHgxYmY0MDFlMiwKLQkweDAwZjVmMWZkLAotCTB4MDBmNWYxMDgsCi0JMHg4NTAwODAwMiwKLQkweDAwMGZmNjAxLAotCTB4MDBmODA0YmQsCi0vKiAweDA1MTg6IGN0eF94ZmVyICovCi0JMHgwMjgxMDA4MCwKLQkweGJkMDAwZmY2LAotCTB4MDcxMWY0MDQsCi0JMHgwMDA0ZjI3ZSwKLS8qIDB4MDUyODogY3R4X3hmZXJfbm90X2xvYWQgKi8KLQkweDAwMDIxNjdlLAotCTB4ZmM4MDI0YmQsCi0JMHgwMmY2MDI0NywKLQkweGYwMDRiZDAwLAotCTB4MjBiNjAxMmMsCi0JMHg0YWZjODAwMywKKy8qIDB4MDUxYjogY3R4X3hmZXIgKi8KKwkweDgwMDBmODA0LAorCTB4ZjYwMjgxMDAsCisJMHgwNGJkMDAwZiwKKwkweDdlMDcxMWY0LAorLyogMHgwNTJiOiBjdHhfeGZlcl9ub3RfbG9hZCAqLworCTB4N2UwMDA0ZjUsCisJMHhiZDAwMDIxNiwKKwkweDQ3ZmM4MDI0LAogCTB4MDAwMmY2MDIsCi0JMHhhY2YwMDRiZCwKLQkweDAyYTVmMDAxLAotCTB4NTAwMDAwOGIsCi0JMHhiNjA0MGM5OCwKLQkweGJjYmIwZmM0LAotCTB4MDAwYzk4MDAsCi0JMHgwZTAxMGQ5OCwKLQkweDAxM2Q3ZTAwLAotCTB4MDFhY2YwMDAsCi0JMHg1MDQwMDA4YiwKLQkweGI2MDQwYzk4LAotCTB4YmNiYjBmYzQsCi0JMHgwMTBjOTgwMCwKLQkweDk4MDIwZDk4LAotCTB4MDA0ZTA2MGYsCi0JMHgwMTNkN2UwOCwKLQkweDAxYWNmMDAwLAotCTB4OGIwNGE1ZjAsCi0JMHg5ODUwMzAwMCwKKwkweDJjZjAwNGJkLAorCTB4MDMyMGI2MDEsCisJMHgwMjRhZmM4MCwKKwkweGJkMDAwMmY2LAorCTB4MDFhY2YwMDQsCisJMHg4YjAyYTVmMCwKKwkweDk4NTAwMDAwLAogCTB4YzRiNjA0MGMsCiAJMHgwMGJjYmIwZiwKLQkweDk4MDIwYzk4LAotCTB4MGY5ODAzMGQsCi0JMHgwMjAwNGUwOCwKKwkweDk4MDAwYzk4LAorCTB4MDAwZTAxMGQsCiAJMHgwMDAxM2Q3ZSwKLQkweDAwMDIwYTdlLAotCTB4ZjQwNjAxZjQsCi0vKiAweDA1YjI6IGN0eF94ZmVyX3Bvc3QgKi8KLQkweDI3N2UwNzEyLAotLyogMHgwNWI2OiBjdHhfeGZlcl9kb25lICovCi0JMHhkZTdlMDAwMiwKLQkweDAwZjgwMDA0LAotCTB4MDAwMDAwMDAsCisJMHg4YjAxYWNmMCwKKwkweDk4NTA0MDAwLAorCTB4YzRiNjA0MGMsCisJMHgwMGJjYmIwZiwKKwkweDk4MDEwYzk4LAorCTB4MGY5ODAyMGQsCisJMHgwODAwNGUwNiwKKwkweDAwMDEzZDdlLAorCTB4ZjAwMWFjZjAsCisJMHgwMDhiMDRhNSwKKwkweDBjOTg1MDMwLAorCTB4MGZjNGI2MDQsCisJMHg5ODAwYmNiYiwKKwkweDBkOTgwMjBjLAorCTB4MDgwZjk4MDMsCisJMHg3ZTAyMDA0ZSwKKwkweDdlMDAwMTNkLAorCTB4ZjQwMDAyMGEsCisJMHgxMmY0MDYwMSwKKy8qIDB4MDViNTogY3R4X3hmZXJfcG9zdCAqLworCTB4MDIyNzdlMDcsCisvKiAweDA1Yjk6IGN0eF94ZmVyX2RvbmUgKi8KKwkweDA0ZTE3ZTAwLAorCTB4MDAwMGY4MDAsCiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9mdWMvZ3BjZ20xMDcuZnVjNS5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZ3IvZnVjL2dwY2dtMTA3LmZ1YzUuaAppbmRleCA1MWY1YzNjLi4xMWJmMzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9mdWMvZ3BjZ20xMDcuZnVjNS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2Z1Yy9ncGNnbTEwNy5mdWM1LmgKQEAgLTI4OSw3ICsyODksNyBAQAogCTB4MDIwMDE0ZmUsCiAJMHgxMjAwNDAwMiwKIAkweGJkMDAwMmY2LAotCTB4MDViMDQxMDQsCisJMHgwNWIzNDEwNCwKIAkweDQwMDAxMGZlLAogCTB4MDBmNjA3MDAsCiAJMHgwMjA0YmQwMCwKQEAgLTMwOCwyNTkgKzMwOCwyNTkgQEAKIAkweGM5MDA4MDBmLAogCTB4MDAwMmY2MDEsCiAJMHgzMDhlMDRiZCwKLQkweDI0YmQ1MDBjLAotCTB4NDRiZDM0YmQsCi0vKiAweDAzYjA6IGluaXRfdW5rX2xvb3AgKi8KLQkweDAwMDA2NTdlLAotCTB4ZjQwMGY2YjAsCi0JMHgwMTBmMGUwYiwKLQkweGZkMDRmMmJiLAotCTB4MzBiNjA1NGYsCi0vKiAweDAzYzU6IGluaXRfdW5rX25leHQgKi8KLQkweDAxMjBiNjAxLAotCTB4YjAwNGUwYjYsCi0JMHgxYmY0MDIyNiwKLS8qIDB4MDNkMTogaW5pdF91bmtfZG9uZSAqLwotCTB4MDcwM2I1ZTIsCi0JMHg4MjA4MDRiNSwKLQkweGNmMDIwMTAwLAotCTB4MzRiZDAwMjIsCi0JMHg4MDA4MjU5NSwKLQkweGY2MDFjMDAwLAorCTB4ZTVmMDUwMGMsCisJMHhiZDI0YmQwMSwKKy8qIDB4MDNiMzogaW5pdF91bmtfbG9vcCAqLworCTB4N2U0NGJkMzQsCisJMHhiMDAwMDA2NSwKKwkweDBiZjQwMGY2LAorCTB4YmIwMTBmMGUsCisJMHg0ZmZkMDRmMiwKKwkweDAxMzBiNjA1LAorLyogMHgwM2M4OiBpbml0X3Vua19uZXh0ICovCisJMHhiNjAxMjBiNiwKKwkweDI2YjAwNGUwLAorCTB4ZTIxYmY0MDIsCisvKiAweDAzZDQ6IGluaXRfdW5rX2RvbmUgKi8KKwkweGI1MDcwM2I1LAorCTB4MDA4MjA4MDQsCisJMHgyMmNmMDIwMSwKKwkweDk1MzRiZDAwLAorCTB4MDA4MDA4MjUsCisJMHgwNWY2MDFjMCwKKwkweDgwMDRiZDAwLAorCTB4ZjYwMWMxMDAsCiAJMHgwNGJkMDAwNSwKLQkweDAxYzEwMDgwLAotCTB4YmQwMDA1ZjYsCi0JMHgwMDBlOTgwNCwKLQkweDdlMDEwZjk4LAotCTB4YmIwMDAxMjAsCi0JMHgzZmJiMDAyZiwKLQkweDAxMGU5ODAwLAotCTB4N2UwMjBmOTgsCi0JMHg5ODAwMDEyMCwKLQkweGVmZmQwNTBlLAotCTB4MDAyZWJiMDAsCi0JMHg5ODAwM2ViYiwKLQkweDBmOTgwMjBlLAotCTB4MDEyMDdlMDMsCi0JMHgwNzBlOTgwMCwKLQkweGJiMDBlZmZkLAotCTB4M2ViYjAwMmUsCi0JMHgwMjM1YjYwMCwKLQkweDAxZDMwMDgwLAotCTB4YmQwMDAzZjYsCi0JMHgwODI1YjYwNCwKLQkweGI2MDYzNWI2LAotCTB4MzBiNjAxMjAsCi0JMHgwODI0YjYwMSwKLQkweGIyMDgzNGI2LAotCTB4MDI2ODdlMmYsCi0JMHgwMDJmYmIwMCwKLQkweDBmMDAzZmJiLAotCTB4OGVmZmIyM2YsCi0JMHhmMDUwMWQ2MCwKLQkweDhmN2UwMWU1LAotCTB4MGMwZjAwMDAsCi0JMHhhODhlZmZiMiwKLQkweGU1ZjA1MDFkLAotCTB4MDA4ZjdlMDEsCi0JMHgwMzE0N2UwMCwKLQkweGIyM2YwZjAwLAotCTB4MWQ2MDhlZmYsCi0JMHgwMWU1ZjA1MCwKLQkweDAwMDA4ZjdlLAotCTB4ZmZiMjAwMGYsCi0JMHg1MDFkOWM4ZSwKLQkweDdlMDFlNWYwLAotCTB4MGYwMDAwOGYsCi0JMHgwMzE0N2UwMSwKLQkweDhlZmZiMjAwLAorCTB4OTgwMDBlOTgsCisJMHgyMDdlMDEwZiwKKwkweDJmYmIwMDAxLAorCTB4MDAzZmJiMDAsCisJMHg5ODAxMGU5OCwKKwkweDIwN2UwMjBmLAorCTB4MGU5ODAwMDEsCisJMHgwMGVmZmQwNSwKKwkweGJiMDAyZWJiLAorCTB4MGU5ODAwM2UsCisJMHgwMzBmOTgwMiwKKwkweDAwMDEyMDdlLAorCTB4ZmQwNzBlOTgsCisJMHgyZWJiMDBlZiwKKwkweDAwM2ViYjAwLAorCTB4ODAwMjM1YjYsCisJMHhmNjAxZDMwMCwKKwkweDA0YmQwMDAzLAorCTB4YjYwODI1YjYsCisJMHgyMGI2MDYzNSwKKwkweDAxMzBiNjAxLAorCTB4YjYwODI0YjYsCisJMHgyZmIyMDgzNCwKKwkweDAwMDI2ODdlLAorCTB4YmIwMDJmYmIsCisJMHgzZjBmMDAzZiwKKwkweDUwMWQ2MDhlLAorCTB4YjIwMWU1ZjAsCisJMHgwMDhmN2VmZiwKKwkweDhlMGMwZjAwLAogCTB4ZjA1MDFkYTgsCi0JMHg4ZjdlMDFlNSwKLQkweGZmMGYwMDAwLAotCTB4OTg4ZWZmYjIsCi0JMHhlNWYwNTAxZCwKLQkweDAwOGY3ZTAxLAotCTB4YjIwMjBmMDAsCi0JMHgxZGE4OGVmZiwKLQkweDAxZTVmMDUwLAorCTB4ZmZiMjAxZTUsCiAJMHgwMDAwOGY3ZSwKIAkweDAwMDMxNDdlLAotCTB4ODUwNTA0OTgsCi0JMHg5ODUwNDAwMCwKLQkweDY0YjYwNDA2LAotCTB4MDA1NmJiMGYsCi0vKiAweDA0ZTA6IHRwY19zdHJhbmRfaW5pdF90cGNfbG9vcCAqLwotCTB4MDU3MDVlYjgsCi0JMHgwMDY1N2UwMCwKLQkweGJkZjZiMjAwLAotLyogMHgwNGVkOiB0cGNfc3RyYW5kX2luaXRfaWR4X2xvb3AgKi8KLQkweDYwNWViODc0LAotCTB4N2ZiMjAwMDUsCi0JMHgwMDAwOGY3ZSwKLQkweDA1ODg1ZWI4LAotCTB4MDgyZjk1MDAsCi0JMHgwMDAwOGY3ZSwKLQkweDA1OGM1ZWI4LAotCTB4MDgyZjk1MDAsCi0JMHgwMDAwOGY3ZSwKLQkweDA1OTA1ZWI4LAotCTB4MDA2NTdlMDAsCi0JMHgwNmY1YjYwMCwKLQkweGI2MDFmMGI2LAotCTB4MmZiYjA4ZjQsCi0JMHgwMDNmYmIwMCwKLQkweGI2MDE3MGI2LAotCTB4MWJmNDAxNjIsCi0JMHgwMDUwYjdiZiwKLQkweDAxNDJiNjA4LAotCTB4MGZhODFiZjQsCi0JMHg4ZWZmYjIzZiwKLQkweGYwNTAxZDYwLAotCTB4OGY3ZTAxZTUsCi0JMHgwZDBmMDAwMCwKLQkweGE4OGVmZmIyLAorCTB4NjA4ZTNmMGYsCiAJMHhlNWYwNTAxZCwKLQkweDAwOGY3ZTAxLAotCTB4MDMxNDdlMDAsCi0JMHgwMTAwODAwMCwKLQkweDAwMDNmNjAyLAotCTB4MjRiZDA0YmQsCi0JMHg4MDFmMjlmMCwKLQkweGY2MDIzMDAwLAotCTB4MDRiZDAwMDIsCi0vKiAweDA1NzQ6IG1haW4gKi8KLQkweGY0MDAzMWY0LAotCTB4MjQwZDAwMjgsCi0JMHgwMDAwMzc3ZSwKLQkweGIwZjQwMWY0LAotCTB4MThmNDA0ZTQsCi0JMHgwMTgxZmUxZCwKLQkweDIwYmQwNjAyLAotCTB4YjYwNDEyZmQsCi0JMHgxZWZkMDFlNCwKLQkweDAwMThmZTA1LAotCTB4MDAwNjQ3N2UsCi0vKiAweDA1YTM6IG1haW5fbm90X2N0eF94ZmVyICovCi0JMHg5NGQ0MGVmNCwKLQkweGY1ZjAxMGVmLAotCTB4MDJmODdlMDEsCi0JMHhjNzBlZjQwMCwKLS8qIDB4MDViMDogaWggKi8KLQkweDg4ZmU4MGY5LAotCTB4Zjk4MGY5MDEsCi0JMHhmOWEwZjk5MCwKLQkweGY5ZDBmOWIwLAotCTB4YmRmMGY5ZTAsCi0JMHgwMjAwNGEwNCwKLQkweGM0MDBhYWNmLAotCTB4MGJmNDA0YWIsCi0JMHg0ZTI0MGQxZiwKLQkweGVlY2YxYTAwLAotCTB4MTkwMDRmMDAsCi0JMHg3ZTAwZmZjZiwKLQkweDBlMDAwMDA0LAotCTB4MWQwMDQwMDEsCi0JMHhiZDAwMGVmNiwKLS8qIDB4MDVlZDogaWhfbm9fZmlmbyAqLwotCTB4MDEwMDQwMDQsCi0JMHhiZDAwMGFmNiwKLQkweGZjZjBmYzA0LAotCTB4ZmNkMGZjZTAsCi0JMHhmY2EwZmNiMCwKLQkweGZlODBmYzkwLAotCTB4ODBmYzAwODgsCi0JMHhmODAwMzJmNCwKLS8qIDB4MDYwZDogaHViX2JhcnJpZXJfZG9uZSAqLwotCTB4OTgwMTBmMDEsCi0JMHhmZWJiMDQwZSwKLQkweDhlZmZiMjA0LAotCTB4N2U0MDk0MTgsCi0JMHhmODAwMDA4ZiwKLS8qIDB4MDYyMTogY3R4X3JlZHN3aXRjaCAqLwotCTB4ODAyMDBmMDAsCisJMHg3ZWZmYjIwMSwKKwkweDBmMDAwMDhmLAorCTB4MWQ5YzhlMDAsCisJMHgwMWU1ZjA1MCwKKwkweDhmN2VmZmIyLAorCTB4MDEwZjAwMDAsCisJMHgwMDAzMTQ3ZSwKKwkweDUwMWRhODhlLAorCTB4YjIwMWU1ZjAsCisJMHgwMDhmN2VmZiwKKwkweDhlZmYwZjAwLAorCTB4ZjA1MDFkOTgsCisJMHhmZmIyMDFlNSwKKwkweDAwMDA4ZjdlLAorCTB4YTg4ZTAyMGYsCisJMHhlNWYwNTAxZCwKKwkweDdlZmZiMjAxLAorCTB4N2UwMDAwOGYsCisJMHg5ODAwMDMxNCwKKwkweDAwODUwNTA0LAorCTB4MDY5ODUwNDAsCisJMHgwZjY0YjYwNCwKKy8qIDB4MDRlMzogdHBjX3N0cmFuZF9pbml0X3RwY19sb29wICovCisJMHhiODAwNTZiYiwKKwkweDAwMDU3MDVlLAorCTB4MDAwMDY1N2UsCisJMHg3NGJkZjZiMiwKKy8qIDB4MDRmMDogdHBjX3N0cmFuZF9pbml0X2lkeF9sb29wICovCisJMHgwNTYwNWViOCwKKwkweDdlN2ZiMjAwLAorCTB4YjgwMDAwOGYsCisJMHgwMDA1ODg1ZSwKKwkweDdlMDgyZjk1LAorCTB4YjgwMDAwOGYsCisJMHgwMDA1OGM1ZSwKKwkweDdlMDgyZjk1LAorCTB4YjgwMDAwOGYsCisJMHgwMDA1OTA1ZSwKKwkweDAwMDA2NTdlLAorCTB4YjYwNmY1YjYsCisJMHhmNGI2MDFmMCwKKwkweDAwMmZiYjA4LAorCTB4YjYwMDNmYmIsCisJMHg2MmI2MDE3MCwKKwkweGJmMWJmNDAxLAorCTB4MDgwMDUwYjcsCisJMHhmNDAxNDJiNiwKKwkweDNmMGZhODFiLAorCTB4NTAxZDYwOGUsCisJMHhiMjAxZTVmMCwKKwkweDAwOGY3ZWZmLAorCTB4OGUwZDBmMDAsCisJMHhmMDUwMWRhOCwKKwkweGZmYjIwMWU1LAorCTB4MDAwMDhmN2UsCisJMHgwMDAzMTQ3ZSwKKwkweDAyMDEwMDgwLAorCTB4YmQwMDAzZjYsCisJMHhmMDI0YmQwNCwKKwkweDAwODAxZjI5LAorCTB4MDJmNjAyMzAsCisvKiAweDA1Nzc6IG1haW4gKi8KKwkweGY0MDRiZDAwLAorCTB4MjhmNDAwMzEsCisJMHg3ZTI0MGQwMCwKKwkweGY0MDAwMDM3LAorCTB4ZTRiMGY0MDEsCisJMHgxZDE4ZjQwNCwKKwkweDAyMDE4MWZlLAorCTB4ZmQyMGJkMDYsCisJMHhlNGI2MDQxMiwKKwkweDA1MWVmZDAxLAorCTB4N2UwMDE4ZmUsCisJMHhmNDAwMDY0YSwKKy8qIDB4MDVhNjogbWFpbl9ub3RfY3R4X3hmZXIgKi8KKwkweGVmOTRkNDBlLAorCTB4MDFmNWYwMTAsCisJMHgwMDAyZjg3ZSwKKy8qIDB4MDViMzogaWggKi8KKwkweGY5YzcwZWY0LAorCTB4MDE4OGZlODAsCisJMHg5MGY5ODBmOSwKKwkweGIwZjlhMGY5LAorCTB4ZTBmOWQwZjksCisJMHgwNGJkZjBmOSwKKwkweGNmMDIwMDRhLAorCTB4YWJjNDAwYWEsCisJMHgxZjBiZjQwNCwKKwkweDAwNGUyNDBkLAorCTB4MDBlZWNmMWEsCisJMHhjZjE5MDA0ZiwKKwkweDA0N2UwMGZmLAorCTB4MDEwZTAwMDAsCisJMHhmNjFkMDA0MCwKKwkweDA0YmQwMDBlLAorLyogMHgwNWYwOiBpaF9ub19maWZvICovCisJMHhmNjAxMDA0MCwKKwkweDA0YmQwMDBhLAorCTB4ZTBmY2YwZmMsCisJMHhiMGZjZDBmYywKKwkweDkwZmNhMGZjLAorCTB4ODhmZTgwZmMsCisJMHhmNDgwZmMwMCwKKwkweDAxZjgwMDMyLAorLyogMHgwNjEwOiBodWJfYmFycmllcl9kb25lICovCisJMHgwZTk4MDEwZiwKKwkweDA0ZmViYjA0LAorCTB4MTg4ZWZmYjIsCisJMHg4ZjdlNDA5NCwKKwkweDAwZjgwMDAwLAorLyogMHgwNjI0OiBjdHhfcmVkc3dpdGNoICovCisJMHgwMDgwMjAwZiwKKwkweDBmZjYwMTg1LAorCTB4MGUwNGJkMDAsCisvKiAweDA2MzE6IGN0eF9yZWRzd2l0Y2hfZGVsYXkgKi8KKwkweDAxZTJiNjA4LAorCTB4ZjFmZDFiZjQsCisJMHhmMTA4MDBmNSwKKwkweDgwMDIwMGY1LAogCTB4ZjYwMTg1MDAsCiAJMHgwNGJkMDAwZiwKLS8qIDB4MDYyZTogY3R4X3JlZHN3aXRjaF9kZWxheSAqLwotCTB4ZTJiNjA4MGUsCi0JMHhmZDFiZjQwMSwKLQkweDA4MDBmNWYxLAotCTB4MDIwMGY1ZjEsCi0JMHgwMTg1MDA4MCwKLQkweGJkMDAwZmY2LAotLyogMHgwNjQ3OiBjdHhfeGZlciAqLwotCTB4ODAwMGY4MDQsCi0JMHhmNjAyODEwMCwKLQkweDA0YmQwMDBmLAotCTB4YzQ4ZWZmYjIsCi0JMHhlNWYwNTAxZCwKLQkweDAwOGY3ZTAxLAotCTB4MDcxMWY0MDAsCi0JMHgwMDA2MjE3ZSwKLS8qIDB4MDY2NDogY3R4X3hmZXJfbm90X2xvYWQgKi8KLQkweDAwMDIxNjdlLAotCTB4ZmM4MDI0YmQsCi0JMHgwMmY2MDI0NywKLQkweGYwMDRiZDAwLAotCTB4MjBiNjAxMmMsCi0JMHg0YWZjODAwMywKKy8qIDB4MDY0YTogY3R4X3hmZXIgKi8KKwkweDAwODAwMGY4LAorCTB4MGZmNjAyODEsCisJMHg4ZTA0YmQwMCwKKwkweGYwNTAxZGM0LAorCTB4ZmZiMjAxZTUsCisJMHgwMDAwOGY3ZSwKKwkweDdlMDcxMWY0LAorLyogMHgwNjY3OiBjdHhfeGZlcl9ub3RfbG9hZCAqLworCTB4N2UwMDA2MjQsCisJMHhiZDAwMDIxNiwKKwkweDQ3ZmM4MDI0LAogCTB4MDAwMmY2MDIsCi0JMHgwYzBmMDRiZCwKLQkweGE4OGVmZmIyLAorCTB4MmNmMDA0YmQsCisJMHgwMzIwYjYwMSwKKwkweDAyNGFmYzgwLAorCTB4YmQwMDAyZjYsCisJMHg4ZTBjMGYwNCwKKwkweGYwNTAxZGE4LAorCTB4ZmZiMjAxZTUsCisJMHgwMDAwOGY3ZSwKKwkweDAwMDMxNDdlLAorCTB4NjA4ZTNmMGYsCiAJMHhlNWYwNTAxZCwKLQkweDAwOGY3ZTAxLAotCTB4MDMxNDdlMDAsCi0JMHhiMjNmMGYwMCwKLQkweDFkNjA4ZWZmLAotCTB4MDFlNWYwNTAsCi0JMHgwMDAwOGY3ZSwKLQkweGZmYjIwMDBmLAotCTB4NTAxZDljOGUsCi0JMHg3ZTAxZTVmMCwKKwkweDdlZmZiMjAxLAogCTB4MGYwMDAwOGYsCi0JMHgwMzE0N2UwMSwKLQkweDAxZmNmMDAwLAotCTB4YjIwM2YwYjYsCi0JMHgxZGE4OGVmZiwKKwkweDFkOWM4ZTAwLAogCTB4MDFlNWYwNTAsCi0JMHgwMDAwOGY3ZSwKLQkweGYwMDFhY2YwLAotCTB4MDA4YjAyYTUsCi0JMHgwYzk4NTAwMCwKLQkweDBmYzRiNjA0LAotCTB4OTgwMGJjYmIsCi0JMHgwZDk4MDAwYywKLQkweDdlMDAwZTAxLAotCTB4ZjAwMDAxM2QsCi0JMHgwMDhiMDFhYywKLQkweDBjOTg1MDQwLAotCTB4MGZjNGI2MDQsCi0JMHg5ODAwYmNiYiwKLQkweDBkOTgwMTBjLAotCTB4MDYwZjk4MDIsCi0JMHg3ZTA4MDA0ZSwKLQkweGYwMDAwMTNkLAorCTB4OGY3ZWZmYjIsCisJMHgwMTBmMDAwMCwKKwkweDAwMDMxNDdlLAorCTB4YjYwMWZjZjAsCisJMHhhODhlMDNmMCwKKwkweGU1ZjA1MDFkLAorCTB4N2VmZmIyMDEsCisJMHhmMDAwMDA4ZiwKIAkweGE1ZjAwMWFjLAotCTB4MzAwMDhiMDQsCisJMHgwMDAwOGIwMiwKIAkweDA0MGM5ODUwLAogCTB4YmIwZmM0YjYsCiAJMHgwYzk4MDBiYywKLQkweDAzMGQ5ODAyLAotCTB4NGUwODBmOTgsCi0JMHgzZDdlMDIwMCwKLQkweDBhN2UwMDAxLAotCTB4MTQ3ZTAwMDIsCi0JMHgwMWY0MDAwMywKLQkweDFhMTJmNDA2LAotLyogMHgwNzNjOiBjdHhfeGZlcl9wb3N0ICovCi0JMHgwMDAyMjc3ZSwKLQkweGZmYjIwZDBmLAotCTB4NTAxZGE4OGUsCi0JMHg3ZTAxZTVmMCwKLQkweDdlMDAwMDhmLAotLyogMHgwNzUzOiBjdHhfeGZlcl9kb25lICovCi0JMHg3ZTAwMDMxNCwKLQkweGY4MDAwNjBkLAotCTB4MDAwMDAwMDAsCisJMHgwMTBkOTgwMCwKKwkweDNkN2UwMDBlLAorCTB4YWNmMDAwMDEsCisJMHg0MDAwOGIwMSwKKwkweDA0MGM5ODUwLAorCTB4YmIwZmM0YjYsCisJMHgwYzk4MDBiYywKKwkweDAyMGQ5ODAxLAorCTB4NGUwNjBmOTgsCisJMHgzZDdlMDgwMCwKKwkweGFjZjAwMDAxLAorCTB4MDRhNWYwMDEsCisJMHg1MDMwMDA4YiwKKwkweGI2MDQwYzk4LAorCTB4YmNiYjBmYzQsCisJMHgwMjBjOTgwMCwKKwkweDk4MDMwZDk4LAorCTB4MDA0ZTA4MGYsCisJMHgwMTNkN2UwMiwKKwkweDAyMGE3ZTAwLAorCTB4MDMxNDdlMDAsCisJMHgwNjAxZjQwMCwKKy8qIDB4MDczZjogY3R4X3hmZXJfcG9zdCAqLworCTB4N2UxYTEyZjQsCisJMHgwZjAwMDIyNywKKwkweDFkYTg4ZTBkLAorCTB4MDFlNWYwNTAsCisJMHg4ZjdlZmZiMiwKKwkweDE0N2UwMDAwLAorLyogMHgwNzU2OiBjdHhfeGZlcl9kb25lICovCisJMHgxMDdlMDAwMywKKwkweDAwZjgwMDA2LAogCTB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZ3IvZ2YxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2dmMTAwLmMKaW5kZXggZGRhN2E3ZC4uOWY1ZGZjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZ3IvZ2YxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9nZjEwMC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIHN0YXRpYyBpbnQKIGdmMTAwX2Zlcm1pX210aGRfemJjX2NvbG9yKHN0cnVjdCBudmttX29iamVjdCAqb2JqZWN0LCB2b2lkICpkYXRhLCB1MzIgc2l6ZSkKIHsKLQlzdHJ1Y3QgZ2YxMDBfZ3IgKmdyID0gKHZvaWQgKilvYmplY3QtPmVuZ2luZTsKKwlzdHJ1Y3QgZ2YxMDBfZ3IgKmdyID0gZ2YxMDBfZ3IobnZrbV9ncihvYmplY3QtPmVuZ2luZSkpOwogCXVuaW9uIHsKIAkJc3RydWN0IGZlcm1pX2FfemJjX2NvbG9yX3YwIHYwOwogCX0gKmFyZ3MgPSBkYXRhOwpAQCAtMTg5LDcgKzE4OSw3IEBACiBzdGF0aWMgaW50CiBnZjEwMF9mZXJtaV9tdGhkX3piY19kZXB0aChzdHJ1Y3QgbnZrbV9vYmplY3QgKm9iamVjdCwgdm9pZCAqZGF0YSwgdTMyIHNpemUpCiB7Ci0Jc3RydWN0IGdmMTAwX2dyICpnciA9ICh2b2lkICopb2JqZWN0LT5lbmdpbmU7CisJc3RydWN0IGdmMTAwX2dyICpnciA9IGdmMTAwX2dyKG52a21fZ3Iob2JqZWN0LT5lbmdpbmUpKTsKIAl1bmlvbiB7CiAJCXN0cnVjdCBmZXJtaV9hX3piY19kZXB0aF92MCB2MDsKIAl9ICphcmdzID0gZGF0YTsKQEAgLTE1MzAsNiArMTUzMCw4IEBACiAJCWdyLT5wcGNfbnJbaV0gID0gZ3ItPmZ1bmMtPnBwY19ucjsKIAkJZm9yIChqID0gMDsgaiA8IGdyLT5wcGNfbnJbaV07IGorKykgewogCQkJdTggbWFzayA9IG52a21fcmQzMihkZXZpY2UsIEdQQ19VTklUKGksIDB4MGMzMCArIChqICogNCkpKTsKKwkJCWlmIChtYXNrKQorCQkJCWdyLT5wcGNfbWFza1tpXSB8PSAoMSA8PCBqKTsKIAkJCWdyLT5wcGNfdHBjX25yW2ldW2pdID0gaHdlaWdodDgobWFzayk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9nZjEwMC5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUvZ3IvZ2YxMDAuaAppbmRleCA0NjExOTYxLi4wMmU3OGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL2VuZ2luZS9nci9nZjEwMC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2dmMTAwLmgKQEAgLTk3LDYgKzk3LDcgQEAKIAl1OCB0cGNfbnJbR1BDX01BWF07CiAJdTggdHBjX3RvdGFsOwogCXU4IHBwY19ucltHUENfTUFYXTsKKwl1OCBwcGNfbWFza1tHUENfTUFYXTsKIAl1OCBwcGNfdHBjX25yW0dQQ19NQVhdWzRdOwogCiAJc3RydWN0IG52a21fbWVtb3J5ICp1bms0MTg4YjQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9iaW9zL2Zhbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvYmlvcy9mYW4uYwppbmRleCA0MzAwNmRiLi44MGZlZDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9iaW9zL2Zhbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L2Jpb3MvZmFuLmMKQEAgLTgzLDYgKzgzLDcgQEAKIAkJCWZhbi0+dHlwZSA9IE5WQklPU19USEVSTV9GQU5fVU5LOwogCQl9CiAKKwkJZmFuLT5mYW5fbW9kZSA9IE5WQklPU19USEVSTV9GQU5fTElORUFSOwogCQlmYW4tPm1pbl9kdXR5ID0gbnZiaW9zX3JkMDgoYmlvcywgZGF0YSArIDB4MDIpOwogCQlmYW4tPm1heF9kdXR5ID0gbnZiaW9zX3JkMDgoYmlvcywgZGF0YSArIDB4MDMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9pbnN0bWVtL2Jhc2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L2luc3RtZW0vYmFzZS5jCmluZGV4IDg5NWJhNzQuLjFkN2RkMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L2luc3RtZW0vYmFzZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L2luc3RtZW0vYmFzZS5jCkBAIC05Nyw3ICs5Nyw5IEBACiBudmttX2luc3RvYmpfZHRvcihzdHJ1Y3QgbnZrbV9tZW1vcnkgKm1lbW9yeSkKIHsKIAlzdHJ1Y3QgbnZrbV9pbnN0b2JqICppb2JqID0gbnZrbV9pbnN0b2JqKG1lbW9yeSk7CisJc3Bpbl9sb2NrKCZpb2JqLT5pbWVtLT5sb2NrKTsKIAlsaXN0X2RlbCgmaW9iai0+aGVhZCk7CisJc3Bpbl91bmxvY2soJmlvYmotPmltZW0tPmxvY2spOwogCW52a21fbWVtb3J5X2RlbCgmaW9iai0+cGFyZW50KTsKIAlyZXR1cm4gaW9iajsKIH0KQEAgLTE5MCw3ICsxOTIsOSBAQAogCQludmttX21lbW9yeV9jdG9yKCZudmttX2luc3RvYmpfZnVuY19zbG93LCAmaW9iai0+bWVtb3J5KTsKIAkJaW9iai0+cGFyZW50ID0gbWVtb3J5OwogCQlpb2JqLT5pbWVtID0gaW1lbTsKKwkJc3Bpbl9sb2NrKCZpb2JqLT5pbWVtLT5sb2NrKTsKIAkJbGlzdF9hZGRfdGFpbCgmaW9iai0+aGVhZCwgJmltZW0tPmxpc3QpOworCQlzcGluX3VubG9jaygmaW9iai0+aW1lbS0+bG9jayk7CiAJCW1lbW9yeSA9ICZpb2JqLT5tZW1vcnk7CiAJfQogCkBAIC0zMDksNSArMzEzLDYgQEAKIHsKIAludmttX3N1YmRldl9jdG9yKCZudmttX2luc3RtZW0sIGRldmljZSwgaW5kZXgsIDAsICZpbWVtLT5zdWJkZXYpOwogCWltZW0tPmZ1bmMgPSBmdW5jOworCXNwaW5fbG9ja19pbml0KCZpbWVtLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmaW1lbS0+bGlzdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wbXUvZ2sxMDQuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3BtdS9nazEwNC5jCmluZGV4IGQ5NDJmYTcuLjg2ZjlmM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3BtdS9nazEwNC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3BtdS9nazEwNC5jCkBAIC04MSw5ICs4MSw3IEBACiAJbnZrbV9tYXNrKGRldmljZSwgMHgwMDAyMDAsIDB4MDAwMDEwMDAsIDB4MDAwMDEwMDApOwogCW52a21fcmQzMihkZXZpY2UsIDB4MDAwMjAwKTsKIAotCWlmICggbnZrbV9ib29sb3B0KGRldmljZS0+Y2Znb3B0LCAiV2FyMDBDODAwXzAiLAotCSAgICBkZXZpY2UtPnF1aXJrID8gZGV2aWNlLT5xdWlyay0+V2FyMDBDODAwXzAgOiBmYWxzZSkpIHsKLQkJbnZrbV9pbmZvKCZwbXUtPnN1YmRldiwgImh3IGJ1ZyB3b3JrYXJvdW5kIGVuYWJsZWRcbiIpOworCWlmIChudmttX2Jvb2xvcHQoZGV2aWNlLT5jZmdvcHQsICJXYXIwMEM4MDBfMCIsIHRydWUpKSB7CiAJCXN3aXRjaCAoZGV2aWNlLT5jaGlwc2V0KSB7CiAJCWNhc2UgMHhlNDoKIAkJCW1hZ2ljKGRldmljZSwgMHgwNDAwMDAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi92b2x0L2drMTA0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmttL3N1YmRldi92b2x0L2drMTA0LmMKaW5kZXggYjYxNTA5ZS4uYjczNTE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvdm9sdC9nazEwNC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3ZvbHQvZ2sxMDQuYwpAQCAtNTksNyArNTksNyBAQAogCWR1dHkgPSAodXYgLSBiaW9zLT5iYXNlKSAqIGRpdiAvIGJpb3MtPnB3bV9yYW5nZTsKIAogCW52a21fd3IzMihkZXZpY2UsIDB4MjAzNDAsIGRpdik7Ci0JbnZrbV93cjMyKGRldmljZSwgMHgyMDM0NCwgMHg4MDAwMDAwIHwgZHV0eSk7CisJbnZrbV93cjMyKGRldmljZSwgMHgyMDM0NCwgMHg4MDAwMDAwMCB8IGR1dHkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiZGV2LmMKaW5kZXggYjhlNGNkZS4uMjRmOTJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZmJkZXYuYwpAQCAtMTEyLDExICsxMTIsOCBAQAogCWRtYV9hZGRyX3QgcGFkZHI7CiAJaW50IHJldDsKIAotCS8qIG9ubHkgZG9pbmcgQVJHQjMyIHNpbmNlIHRoaXMgaXMgd2hhdCBpcyBuZWVkZWQgdG8gYWxwaGEtYmxlbmQKLQkgKiB3aXRoIHZpZGVvIG92ZXJsYXlzOgotCSAqLwogCXNpemVzLT5zdXJmYWNlX2JwcCA9IDMyOwotCXNpemVzLT5zdXJmYWNlX2RlcHRoID0gMzI7CisJc2l6ZXMtPnN1cmZhY2VfZGVwdGggPSAyNDsKIAogCURCRygiY3JlYXRlIGZiZGV2OiAlZHglZEAlZCAoJWR4JWQpIiwgc2l6ZXMtPnN1cmZhY2Vfd2lkdGgsCiAJCQlzaXplcy0+c3VyZmFjZV9oZWlnaHQsIHNpemVzLT5zdXJmYWNlX2JwcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npay5jCmluZGV4IDI0ODk1M2QuLmY4MWZiMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYwpAQCAtNDE3MywxMSArNDE3Myw3IEBACiAJY29udHJvbCB8PSBpYi0+bGVuZ3RoX2R3IHwgKHZtX2lkIDw8IDI0KTsKIAogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGhlYWRlcik7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmluZywKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQkJCSAgKDIgPDwgMCkgfAotI2VuZGlmCi0JCQkgIChpYi0+Z3B1X2FkZHIgJiAweEZGRkZGRkZDKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgKGliLT5ncHVfYWRkciAmIDB4RkZGRkZGRkMpKTsKIAlyYWRlb25fcmluZ193cml0ZShyaW5nLCB1cHBlcl8zMl9iaXRzKGliLT5ncHVfYWRkcikgJiAweEZGRkYpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGNvbnRyb2wpOwogfQpAQCAtODQ3Miw3ICs4NDY4LDcgQEAKIAlpZiAocXVldWVfZHApCiAJCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmRwX3dvcmspOwogCWlmIChxdWV1ZV9ob3RwbHVnKQotCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5ob3RwbHVnX3dvcmspOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJkZXYtPmhvdHBsdWdfd29yaywgMCk7CiAJaWYgKHF1ZXVlX3Jlc2V0KSB7CiAJCXJkZXYtPm5lZWRzX3Jlc2V0ID0gdHJ1ZTsKIAkJd2FrZV91cF9hbGwoJnJkZXYtPmZlbmNlX3F1ZXVlKTsKQEAgLTk2MzAsNiArOTYyNiw5IEBACiAJCSAgICAocmRldi0+ZGlzcF9wcmlvcml0eSA9PSAyKSkgewogCQkJRFJNX0RFQlVHX0tNUygiZm9yY2UgcHJpb3JpdHkgdG8gaGlnaFxuIik7CiAJCX0KKworCQkvKiBTYXZlIG51bWJlciBvZiBsaW5lcyB0aGUgbGluZWJ1ZmZlciBsZWFkcyBiZWZvcmUgdGhlIHNjYW5vdXQgKi8KKwkJcmFkZW9uX2NydGMtPmxiX3ZibGFua19sZWFkX2xpbmVzID0gRElWX1JPVU5EX1VQKGxiX3NpemUsIG1vZGUtPmNydGNfaGRpc3BsYXkpOwogCX0KIAogCS8qIHNlbGVjdCB3bSBBICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCA3ZjMzNzY3Li4yYWQ0NjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTIzNzIsNiArMjM3Miw5IEBACiAJCWMuZnVsbCA9IGRmaXhlZF9kaXYoYywgYSk7CiAJCXByaW9yaXR5X2JfbWFyayA9IGRmaXhlZF90cnVuYyhjKTsKIAkJcHJpb3JpdHlfYl9jbnQgfD0gcHJpb3JpdHlfYl9tYXJrICYgUFJJT1JJVFlfTUFSS19NQVNLOworCisJCS8qIFNhdmUgbnVtYmVyIG9mIGxpbmVzIHRoZSBsaW5lYnVmZmVyIGxlYWRzIGJlZm9yZSB0aGUgc2Nhbm91dCAqLworCQlyYWRlb25fY3J0Yy0+bGJfdmJsYW5rX2xlYWRfbGluZXMgPSBESVZfUk9VTkRfVVAobGJfc2l6ZSwgbW9kZS0+Y3J0Y19oZGlzcGxheSk7CiAJfQogCiAJLyogc2VsZWN0IHdtIEEgKi8KQEAgLTUzNDQsNyArNTM0Nyw3IEBACiAJaWYgKHF1ZXVlX2RwKQogCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5kcF93b3JrKTsKIAlpZiAocXVldWVfaG90cGx1ZykKLQkJc2NoZWR1bGVfd29yaygmcmRldi0+aG90cGx1Z193b3JrKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyZGV2LT5ob3RwbHVnX3dvcmssIDApOwogCWlmIChxdWV1ZV9oZG1pKQogCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5hdWRpb193b3JrKTsKIAlpZiAocXVldWVfdGhlcm1hbCAmJiByZGV2LT5wbS5kcG1fZW5hYmxlZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggMjM4YjEzZi4uOWU3ZTJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTgwNiw3ICs4MDYsNyBAQAogCQlzdGF0dXMgPSByMTAwX2lycV9hY2socmRldik7CiAJfQogCWlmIChxdWV1ZV9ob3RwbHVnKQotCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5ob3RwbHVnX3dvcmspOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJkZXYtPmhvdHBsdWdfd29yaywgMCk7CiAJaWYgKHJkZXYtPm1zaV9lbmFibGVkKSB7CiAJCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJCWNhc2UgQ0hJUF9SUzQwMDoKQEAgLTMyMTcsNiArMzIxNyw5IEBACiAJdWludDMyX3QgcGl4ZWxfYnl0ZXMxID0gMDsKIAl1aW50MzJfdCBwaXhlbF9ieXRlczIgPSAwOwogCisJLyogR3Vlc3MgbGluZSBidWZmZXIgc2l6ZSB0byBiZSA4MTkyIHBpeGVscyAqLworCXUzMiBsYl9zaXplID0gODE5MjsKKwogCWlmICghcmRldi0+bW9kZV9pbmZvLm1vZGVfY29uZmlnX2luaXRpYWxpemVkKQogCQlyZXR1cm47CiAKQEAgLTM2MzEsNiArMzYzNCwxMyBAQAogCQlEUk1fREVCVUdfS01TKCJHUlBIMl9CVUZGRVJfQ05UTCBmcm9tIHRvICV4XG4iLAogCQkJICAodW5zaWduZWQgaW50KVJSRUczMihSQURFT05fR1JQSDJfQlVGRkVSX0NOVEwpKTsKIAl9CisKKwkvKiBTYXZlIG51bWJlciBvZiBsaW5lcyB0aGUgbGluZWJ1ZmZlciBsZWFkcyBiZWZvcmUgdGhlIHNjYW5vdXQgKi8KKwlpZiAobW9kZTEpCisJICAgIHJkZXYtPm1vZGVfaW5mby5jcnRjc1swXS0+bGJfdmJsYW5rX2xlYWRfbGluZXMgPSBESVZfUk9VTkRfVVAobGJfc2l6ZSwgbW9kZTEtPmNydGNfaGRpc3BsYXkpOworCisJaWYgKG1vZGUyKQorCSAgICByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmxiX3ZibGFua19sZWFkX2xpbmVzID0gRElWX1JPVU5EX1VQKGxiX3NpemUsIG1vZGUyLT5jcnRjX2hkaXNwbGF5KTsKIH0KIAogaW50IHIxMDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX3JpbmcgKnJpbmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IDRlYTViMTAuLmNjMmZkZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC00Mjc2LDcgKzQyNzYsNyBAQAogCQlXUkVHMzIoSUhfUkJfUlBUUiwgcnB0cik7CiAJfQogCWlmIChxdWV1ZV9ob3RwbHVnKQotCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5ob3RwbHVnX3dvcmspOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJkZXYtPmhvdHBsdWdfd29yaywgMCk7CiAJaWYgKHF1ZXVlX2hkbWkpCiAJCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmF1ZGlvX3dvcmspOwogCWlmIChxdWV1ZV90aGVybWFsICYmIHJkZXYtPnBtLmRwbV9lbmFibGVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggYjZjYmQ4MS4uODdkYjY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0yNDE0LDcgKzI0MTQsNyBAQAogCXN0cnVjdCByNjAwX2loIGloOyAvKiByNi83MDAgaW50ZXJydXB0IHJpbmcgKi8KIAlzdHJ1Y3QgcmFkZW9uX3JsYyBybGM7CiAJc3RydWN0IHJhZGVvbl9tZWMgbWVjOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBob3RwbHVnX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBob3RwbHVnX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRwX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGF1ZGlvX3dvcms7CiAJaW50IG51bV9jcnRjOyAvKiBudW1iZXIgb2YgY3J0Y3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FncC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMKaW5kZXggZmU5OTRhYS4uYzc3ZDM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMKQEAgLTU0LDYgKzU0LDkgQEAKIAkvKiBJbnRlbCA4Mjg1NVBNIGhvc3QgYnJpZGdlIC8gTW9iaWxpdHkgOTYwMCBNMTAgUlYzNTAgTmVlZHMgQUdQTW9kZSAxIChscCAjMTk1MDUxKSAqLwogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzMzQwLCBQQ0lfVkVORE9SX0lEX0FUSSwgMHg0ZTUwLAogCQlQQ0lfVkVORE9SX0lEX0lCTSwgMHgwNTUwLCAxfSwKKwkvKiBJbnRlbCA4Mjg1NVBNIGhvc3QgYnJpZGdlIC8gUlYyNTAvTTkgR0wgW01vYmlsaXR5IEZpcmVHTCA5MDAwL1JhZGVvbiA5MDAwXSBuZWVkcyBBR1BNb2RlIDEgKFRoaW5rcGFkIFQ0MHApICovCisJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDMzNDAsIFBDSV9WRU5ET1JfSURfQVRJLCAweDRjNjYsCisJCVBDSV9WRU5ET1JfSURfSUJNLCAweDA1NGQsIDF9LAogCS8qIEludGVsIDgyODU1UE0gaG9zdCBicmlkZ2UgLyBNb2JpbGl0eSBNNyBuZWVkcyBBR1BNb2RlIDEgKi8KIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MzM0MCwgUENJX1ZFTkRPUl9JRF9BVEksIDB4NGM1NywKIAkJUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDUzMCwgMX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggNWEyY2FmYi4uMzQwZjNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtMTIzNCwxMyArMTIzNCwzMiBAQAogCWlmIChyIDwgMCkKIAkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwogCisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRldGVjdGVkX2hwZF93aXRob3V0X2RkYykgeworCQlmb3JjZSA9IHRydWU7CisJCXJhZGVvbl9jb25uZWN0b3ItPmRldGVjdGVkX2hwZF93aXRob3V0X2RkYyA9IGZhbHNlOworCX0KKwogCWlmICghZm9yY2UgJiYgcmFkZW9uX2NoZWNrX2hwZF9zdGF0dXNfdW5jaGFuZ2VkKGNvbm5lY3RvcikpIHsKIAkJcmV0ID0gY29ubmVjdG9yLT5zdGF0dXM7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykgewogCQlkcmV0ID0gcmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yLCBmYWxzZSk7CisKKwkJLyogU29tZXRpbWVzIHRoZSBwaW5zIHJlcXVpcmVkIGZvciB0aGUgRERDIHByb2JlIG9uIERWSQorCQkgKiBjb25uZWN0b3JzIGRvbid0IG1ha2UgY29udGFjdCBhdCB0aGUgc2FtZSB0aW1lIHRoYXQgdGhlIG9uZXMKKwkJICogZm9yIEhQRCBkby4gSWYgdGhlIEREQyBwcm9iZSBmYWlscyBldmVuIHRob3VnaCB3ZSBoYWQgYW4gSFBECisJCSAqIHNpZ25hbCwgdHJ5IGFnYWluIGxhdGVyICovCisJCWlmICghZHJldCAmJiAhZm9yY2UgJiYKKwkJICAgIGNvbm5lY3Rvci0+c3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7CisJCQlEUk1fREVCVUdfS01TKCJocGQgZGV0ZWN0ZWQgd2l0aG91dCBkZGMsIHJldHJ5aW5nIGluIDEgc2Vjb25kXG4iKTsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPmRldGVjdGVkX2hwZF93aXRob3V0X2RkYyA9IHRydWU7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJkZXYtPmhvdHBsdWdfd29yaywKKwkJCQkJICAgICAgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CiAJaWYgKGRyZXQpIHsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGV0ZWN0ZWRfYnlfbG9hZCA9IGZhbHNlOwogCQlyYWRlb25fY29ubmVjdG9yX2ZyZWVfZWRpZChjb25uZWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IGE4ZDk5MjcuLjFlY2EwYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTMyMiw3ICszMjIsOSBAQAogCSAqIHRvIGNvbXBsZXRlIGluIHRoaXMgdmJsYW5rPwogCSAqLwogCWlmICh1cGRhdGVfcGVuZGluZyAmJgotCSAgICAoRFJNX1NDQU5PVVRQT1NfVkFMSUQgJiByYWRlb25fZ2V0X2NydGNfc2Nhbm91dHBvcyhyZGV2LT5kZGV2LCBjcnRjX2lkLCAwLAorCSAgICAoRFJNX1NDQU5PVVRQT1NfVkFMSUQgJiByYWRlb25fZ2V0X2NydGNfc2Nhbm91dHBvcyhyZGV2LT5kZGV2LAorCQkJCQkJCSAgICAgICBjcnRjX2lkLAorCQkJCQkJCSAgICAgICBVU0VfUkVBTF9WQkxBTktTVEFSVCwKIAkJCQkJCQkgICAgICAgJnZwb3MsICZocG9zLCBOVUxMLCBOVUxMLAogCQkJCQkJCSAgICAgICAmcmRldi0+bW9kZV9pbmZvLmNydGNzW2NydGNfaWRdLT5iYXNlLmh3bW9kZSkpICYmCiAJICAgICgodnBvcyA+PSAoOTkgKiByZGV2LT5tb2RlX2luZm8uY3J0Y3NbY3J0Y19pZF0tPmJhc2UuaHdtb2RlLmNydGNfdmRpc3BsYXkpLzEwMCkgfHwKQEAgLTQwMSw2ICs0MDMsOCBAQAogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZyYWRlb25fY3J0Yy0+YmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByOworCWludCB2cG9zLCBocG9zLCBzdGF0LCBtaW5fdWRlbGF5OworCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZjcnRjLT5kZXYtPnZibGFua1t3b3JrLT5jcnRjX2lkXTsKIAogICAgICAgICBkb3duX3JlYWQoJnJkZXYtPmV4Y2x1c2l2ZV9sb2NrKTsKIAlpZiAod29yay0+ZmVuY2UpIHsKQEAgLTQzNyw2ICs0NDEsNDEgQEAKIAkvKiBzZXQgdGhlIHByb3BlciBpbnRlcnJ1cHQgKi8KIAlyYWRlb25faXJxX2ttc19wZmxpcF9pcnFfZ2V0KHJkZXYsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKIAorCS8qIElmIHRoaXMgaGFwcGVucyB0byBleGVjdXRlIHdpdGhpbiB0aGUgInZpcnR1YWxseSBleHRlbmRlZCIgdmJsYW5rCisJICogaW50ZXJ2YWwgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgcmVhbCB2YmxhbmsgaW50ZXJ2YWwgdGhlbiBpdCBuZWVkcworCSAqIHRvIGRlbGF5IHByb2dyYW1taW5nIHRoZSBtbWlvIGZsaXAgdW50aWwgdGhlIHJlYWwgdmJsYW5rIGlzIGVudGVyZWQuCisJICogVGhpcyBwcmV2ZW50cyBjb21wbGV0aW5nIGEgZmxpcCB0b28gZWFybHkgZHVlIHRvIHRoZSB3YXkgd2UgZnVkZ2UKKwkgKiBvdXIgdmJsYW5rIGNvdW50ZXIgYW5kIHZibGFuayB0aW1lc3RhbXBzIGluIG9yZGVyIHRvIHdvcmsgYXJvdW5kIHRoZQorCSAqIHByb2JsZW0gdGhhdCB0aGUgaHcgZmlyZXMgdmJsYW5rIGludGVycnVwdHMgYmVmb3JlIGFjdHVhbCBzdGFydCBvZgorCSAqIHZibGFuayAod2hlbiBsaW5lIGJ1ZmZlciByZWZpbGxpbmcgaXMgZG9uZSBmb3IgYSBmcmFtZSkuIEl0CisJICogY29tcGxlbWVudHMgdGhlIGZ1ZGdpbmcgbG9naWMgaW4gcmFkZW9uX2dldF9jcnRjX3NjYW5vdXRwb3MoKSBmb3IKKwkgKiB0aW1lc3RhbXBpbmcgYW5kIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXJfa21zKCkgZm9yIHZibGFuayBjb3VudHMuCisJICoKKwkgKiBJbiBwcmFjdGljZSB0aGlzIHdvbid0IGV4ZWN1dGUgdmVyeSBvZnRlbiB1bmxlc3Mgb24gdmVyeSBmYXN0CisJICogbWFjaGluZXMgYmVjYXVzZSB0aGUgdGltZSB3aW5kb3cgZm9yIHRoaXMgdG8gaGFwcGVuIGlzIHZlcnkgc21hbGwuCisJICovCisJZm9yICg7OykgeworCQkvKiBHRVRfRElTVEFOQ0VfVE9fVkJMQU5LU1RBUlQgcmV0dXJucyBkaXN0YW5jZSB0byByZWFsIHZibGFuaworCQkgKiBzdGFydCBpbiBocG9zLCBhbmQgdG8gdGhlICJmdWRnZWQgZWFybGllciIgdmJsYW5rIHN0YXJ0IGluCisJCSAqIHZwb3MuCisJCSAqLworCQlzdGF0ID0gcmFkZW9uX2dldF9jcnRjX3NjYW5vdXRwb3MocmRldi0+ZGRldiwgd29yay0+Y3J0Y19pZCwKKwkJCQkJCSAgR0VUX0RJU1RBTkNFX1RPX1ZCTEFOS1NUQVJULAorCQkJCQkJICAmdnBvcywgJmhwb3MsIE5VTEwsIE5VTEwsCisJCQkJCQkgICZjcnRjLT5od21vZGUpOworCisJCWlmICgoc3RhdCAmIChEUk1fU0NBTk9VVFBPU19WQUxJRCB8IERSTV9TQ0FOT1VUUE9TX0FDQ1VSQVRFKSkgIT0KKwkJICAgIChEUk1fU0NBTk9VVFBPU19WQUxJRCB8IERSTV9TQ0FOT1VUUE9TX0FDQ1VSQVRFKSB8fAorCQkgICAgISh2cG9zID49IDAgJiYgaHBvcyA8PSAwKSkKKwkJCWJyZWFrOworCisJCS8qIFNsZWVwIGF0IGxlYXN0IHVudGlsIGVzdGltYXRlZCByZWFsIHN0YXJ0IG9mIGh3IHZibGFuayAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJbWluX3VkZWxheSA9ICgtaHBvcyArIDEpICogbWF4KHZibGFuay0+bGluZWR1cl9ucyAvIDEwMDAsIDUpOworCQl1c2xlZXBfcmFuZ2UobWluX3VkZWxheSwgMiAqIG1pbl91ZGVsYXkpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJfTsKKwogCS8qIGRvIHRoZSBmbGlwIChtbWlvKSAqLwogCXJhZGVvbl9wYWdlX2ZsaXAocmRldiwgcmFkZW9uX2NydGMtPmNydGNfaWQsIHdvcmstPmJhc2UpOwogCkBAIC0xNzY4LDYgKzE4MDcsMTUgQEAKICAqIFxwYXJhbSBkZXYgRGV2aWNlIHRvIHF1ZXJ5LgogICogXHBhcmFtIGNydGMgQ3J0YyB0byBxdWVyeS4KICAqIFxwYXJhbSBmbGFncyBGbGFncyBmcm9tIGNhbGxlciAoRFJNX0NBTExFRF9GUk9NX1ZCTElSUSBvciAwKS4KKyAqICAgICAgICAgICAgICBGb3IgZHJpdmVyIGludGVybmFsIHVzZSBvbmx5IGFsc28gc3VwcG9ydHMgdGhlc2UgZmxhZ3M6CisgKgorICogICAgICAgICAgICAgIFVTRV9SRUFMX1ZCTEFOS1NUQVJUIHRvIHVzZSB0aGUgcmVhbCBzdGFydCBvZiB2YmxhbmsgaW5zdGVhZAorICogICAgICAgICAgICAgIG9mIGEgZnVkZ2VkIGVhcmxpZXIgc3RhcnQgb2YgdmJsYW5rLgorICoKKyAqICAgICAgICAgICAgICBHRVRfRElTVEFOQ0VfVE9fVkJMQU5LU1RBUlQgdG8gcmV0dXJuIGRpc3RhbmNlIHRvIHRoZQorICogICAgICAgICAgICAgIGZ1ZGdlZCBlYXJsaWVyIHN0YXJ0IG9mIHZibGFuayBpbiAqdnBvcyBhbmQgdGhlIGRpc3RhbmNlCisgKiAgICAgICAgICAgICAgdG8gdHJ1ZSBzdGFydCBvZiB2YmxhbmsgaW4gKmhwb3MuCisgKgogICogXHBhcmFtICp2cG9zIExvY2F0aW9uIHdoZXJlIHZlcnRpY2FsIHNjYW5vdXQgcG9zaXRpb24gc2hvdWxkIGJlIHN0b3JlZC4KICAqIFxwYXJhbSAqaHBvcyBMb2NhdGlvbiB3aGVyZSBob3Jpem9udGFsIHNjYW5vdXQgcG9zaXRpb24gc2hvdWxkIGdvLgogICogXHBhcmFtICpzdGltZSBUYXJnZXQgbG9jYXRpb24gZm9yIHRpbWVzdGFtcCB0YWtlbiBpbW1lZGlhdGVseSBiZWZvcmUKQEAgLTE5MTEsMTAgKzE5NTksNDAgQEAKIAkJdmJsX2VuZCA9IDA7CiAJfQogCisJLyogQ2FsbGVkIGZyb20gZHJpdmVyIGludGVybmFsIHZibGFuayBjb3VudGVyIHF1ZXJ5IGNvZGU/ICovCisJaWYgKGZsYWdzICYgR0VUX0RJU1RBTkNFX1RPX1ZCTEFOS1NUQVJUKSB7CisJICAgIC8qIENhbGxlciB3YW50cyBkaXN0YW5jZSBmcm9tIHJlYWwgdmJsX3N0YXJ0IGluICpocG9zICovCisJICAgICpocG9zID0gKnZwb3MgLSB2Ymxfc3RhcnQ7CisJfQorCisJLyogRnVkZ2UgdmJsYW5rIHRvIHN0YXJ0IGEgZmV3IHNjYW5saW5lcyBlYXJsaWVyIHRvIGhhbmRsZSB0aGUKKwkgKiBwcm9ibGVtIHRoYXQgdmJsYW5rIGlycXMgZmlyZSBhIGZldyBzY2FubGluZXMgYmVmb3JlIHN0YXJ0CisJICogb2YgdmJsYW5rLiBTb21lIGRyaXZlciBpbnRlcm5hbCBjYWxsZXJzIG5lZWQgdGhlIHRydWUgdmJsYW5rCisJICogc3RhcnQgdG8gYmUgdXNlZCBhbmQgc2lnbmFsIHRoaXMgdmlhIHRoZSBVU0VfUkVBTF9WQkxBTktTVEFSVCBmbGFnLgorCSAqCisJICogVGhlIGNhdXNlIG9mIHRoZSAiZWFybHkiIHZibGFuayBpcnEgaXMgdGhhdCB0aGUgaXJxIGlzIHRyaWdnZXJlZAorCSAqIGJ5IHRoZSBsaW5lIGJ1ZmZlciBsb2dpYyB3aGVuIHRoZSBsaW5lIGJ1ZmZlciByZWFkIHBvc2l0aW9uIGVudGVycworCSAqIHRoZSB2YmxhbmssIHdoZXJlYXMgb3VyIGNydGMgc2Nhbm91dCBwb3NpdGlvbiBuYXR1cmFsbHkgbGFncyB0aGUKKwkgKiBsaW5lIGJ1ZmZlciByZWFkIHBvc2l0aW9uLgorCSAqLworCWlmICghKGZsYWdzICYgVVNFX1JFQUxfVkJMQU5LU1RBUlQpKQorCQl2Ymxfc3RhcnQgLT0gcmRldi0+bW9kZV9pbmZvLmNydGNzW3BpcGVdLT5sYl92YmxhbmtfbGVhZF9saW5lczsKKwogCS8qIFRlc3Qgc2Nhbm91dCBwb3NpdGlvbiBhZ2FpbnN0IHZibGFuayByZWdpb24uICovCiAJaWYgKCgqdnBvcyA8IHZibF9zdGFydCkgJiYgKCp2cG9zID49IHZibF9lbmQpKQogCQlpbl92YmwgPSBmYWxzZTsKIAorCS8qIEluIHZibGFuaz8gKi8KKwlpZiAoaW5fdmJsKQorCSAgICByZXQgfD0gRFJNX1NDQU5PVVRQT1NfSU5fVkJMQU5LOworCisJLyogQ2FsbGVkIGZyb20gZHJpdmVyIGludGVybmFsIHZibGFuayBjb3VudGVyIHF1ZXJ5IGNvZGU/ICovCisJaWYgKGZsYWdzICYgR0VUX0RJU1RBTkNFX1RPX1ZCTEFOS1NUQVJUKSB7CisJCS8qIENhbGxlciB3YW50cyBkaXN0YW5jZSBmcm9tIGZ1ZGdlZCBlYXJsaWVyIHZibF9zdGFydCAqLworCQkqdnBvcyAtPSB2Ymxfc3RhcnQ7CisJCXJldHVybiByZXQ7CisJfQorCiAJLyogQ2hlY2sgaWYgaW5zaWRlIHZibGFuayBhcmVhIGFuZCBhcHBseSBjb3JyZWN0aXZlIG9mZnNldHM6CiAJICogdnBvcyB3aWxsIHRoZW4gYmUgPj0wIGluIHZpZGVvIHNjYW5vdXQgYXJlYSwgYnV0IG5lZ2F0aXZlCiAJICogd2l0aGluIHZibGFuayBhcmVhLCBjb3VudGluZyBkb3duIHRoZSBudW1iZXIgb2YgbGluZXMgdW50aWwKQEAgLTE5MzAsMzEgKzIwMDgsNSBAQAogCS8qIENvcnJlY3QgZm9yIHNoaWZ0ZWQgZW5kIG9mIHZibCBhdCB2YmxfZW5kLiAqLwogCSp2cG9zID0gKnZwb3MgLSB2YmxfZW5kOwogCi0JLyogSW4gdmJsYW5rPyAqLwotCWlmIChpbl92YmwpCi0JCXJldCB8PSBEUk1fU0NBTk9VVFBPU19JTl9WQkxBTks7Ci0KLQkvKiBJcyB2cG9zIG91dHNpZGUgbm9taW5hbCB2YmxhbmsgYXJlYSwgYnV0IGxlc3MgdGhhbgotCSAqIDEvMTAwIG9mIGEgZnJhbWUgaGVpZ2h0IGF3YXkgZnJvbSBzdGFydCBvZiB2Ymxhbms/Ci0JICogSWYgc28sIGFzc3VtZSB0aGlzIGlzbid0IGEgbWFzc2l2ZWx5IGRlbGF5ZWQgdmJsYW5rCi0JICogaW50ZXJydXB0LCBidXQgYSB2YmxhbmsgaW50ZXJydXB0IHRoYXQgZmlyZWQgYSBmZXcKLQkgKiBtaWNyb3NlY29uZHMgYmVmb3JlIHRydWUgc3RhcnQgb2YgdmJsYW5rLiBDb21wZW5zYXRlCi0JICogYnkgYWRkaW5nIGEgZnVsbCBmcmFtZSBkdXJhdGlvbiB0byB0aGUgZmluYWwgdGltZXN0YW1wLgotCSAqIEhhcHBlbnMsIGUuZy4sIG9uIEFUSSBSNTAwLCBSNjAwLgotCSAqCi0JICogV2Ugb25seSBkbyB0aGlzIGlmIERSTV9DQUxMRURfRlJPTV9WQkxJUlEuCi0JICovCi0JaWYgKChmbGFncyAmIERSTV9DQUxMRURfRlJPTV9WQkxJUlEpICYmICFpbl92YmwpIHsKLQkJdmJsX3N0YXJ0ID0gbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJdnRvdGFsID0gbW9kZS0+Y3J0Y192dG90YWw7Ci0KLQkJaWYgKHZibF9zdGFydCAtICp2cG9zIDwgdnRvdGFsIC8gMTAwKSB7Ci0JCQkqdnBvcyAtPSB2dG90YWw7Ci0KLQkJCS8qIFNpZ25hbCB0aGlzIGNvcnJlY3Rpb24gYXMgImFwcGxpZWQiLiAqLwotCQkJcmV0IHw9IDB4ODsKLQkJfQotCX0KLQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKaW5kZXggMTcxZDNlNC4uOTc5ZjNiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwpAQCAtNzQsNyArNzQsNyBAQAogc3RhdGljIHZvaWQgcmFkZW9uX2hvdHBsdWdfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmFkZW9uX2RldmljZSwKLQkJCQkJCSAgaG90cGx1Z193b3JrKTsKKwkJCQkJCSAgaG90cGx1Z193b3JrLndvcmspOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZGV2LT5kZGV2OwogCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKQEAgLTMwMiw3ICszMDIsNyBAQAogCQl9CiAJfQogCi0JSU5JVF9XT1JLKCZyZGV2LT5ob3RwbHVnX3dvcmssIHJhZGVvbl9ob3RwbHVnX3dvcmtfZnVuYyk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnJkZXYtPmhvdHBsdWdfd29yaywgcmFkZW9uX2hvdHBsdWdfd29ya19mdW5jKTsKIAlJTklUX1dPUksoJnJkZXYtPmRwX3dvcmssIHJhZGVvbl9kcF93b3JrX2Z1bmMpOwogCUlOSVRfV09SSygmcmRldi0+YXVkaW9fd29yaywgcjYwMF9hdWRpb191cGRhdGVfaGRtaSk7CiAKQEAgLTMxMCw3ICszMTAsNyBAQAogCXIgPSBkcm1faXJxX2luc3RhbGwocmRldi0+ZGRldiwgcmRldi0+ZGRldi0+cGRldi0+aXJxKTsKIAlpZiAocikgewogCQlyZGV2LT5pcnEuaW5zdGFsbGVkID0gZmFsc2U7Ci0JCWZsdXNoX3dvcmsoJnJkZXYtPmhvdHBsdWdfd29yayk7CisJCWZsdXNoX2RlbGF5ZWRfd29yaygmcmRldi0+aG90cGx1Z193b3JrKTsKIAkJcmV0dXJuIHI7CiAJfQogCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJcmRldi0+aXJxLmluc3RhbGxlZCA9IGZhbHNlOwogCQlpZiAocmRldi0+bXNpX2VuYWJsZWQpCiAJCQlwY2lfZGlzYWJsZV9tc2kocmRldi0+cGRldik7Ci0JCWZsdXNoX3dvcmsoJnJkZXYtPmhvdHBsdWdfd29yayk7CisJCWZsdXNoX2RlbGF5ZWRfd29yaygmcmRldi0+aG90cGx1Z193b3JrKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggMGVjNmZjYy4uZDI5MGE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKQEAgLTc1NSw2ICs3NTUsOCBAQAogICovCiB1MzIgcmFkZW9uX2dldF92YmxhbmtfY291bnRlcl9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7CisJaW50IHZwb3MsIGhwb3MsIHN0YXQ7CisJdTMyIGNvdW50OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChjcnRjIDwgMCB8fCBjcnRjID49IHJkZXYtPm51bV9jcnRjKSB7CkBAIC03NjIsNyArNzY0LDUzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyKHJkZXYsIGNydGMpOworCS8qIFRoZSBodyBpbmNyZW1lbnRzIGl0cyBmcmFtZSBjb3VudGVyIGF0IHN0YXJ0IG9mIHZzeW5jLCBub3QgYXQgc3RhcnQKKwkgKiBvZiB2YmxhbmssIGFzIGlzIHJlcXVpcmVkIGJ5IERSTSBjb3JlIHZibGFuayBjb3VudGVyIGhhbmRsaW5nLgorCSAqIENvb2sgdGhlIGh3IGNvdW50IGhlcmUgdG8gbWFrZSBpdCBhcHBlYXIgdG8gdGhlIGNhbGxlciBhcyBpZiBpdAorCSAqIGluY3JlbWVudGVkIGF0IHN0YXJ0IG9mIHZibGFuay4gV2UgbWVhc3VyZSBkaXN0YW5jZSB0byBzdGFydCBvZgorCSAqIHZibGFuayBpbiB2cG9zLiB2cG9zIHRoZXJlZm9yZSB3aWxsIGJlID49IDAgYmV0d2VlbiBzdGFydCBvZiB2YmxhbmsKKwkgKiBhbmQgc3RhcnQgb2YgdnN5bmMsIHNvIHZwb3MgPj0gMCBtZWFucyB0byBidW1wIHRoZSBodyBmcmFtZSBjb3VudGVyCisJICogcmVzdWx0IGJ5IDEgdG8gZ2l2ZSB0aGUgcHJvcGVyIGFwcGVhcmFuY2UgdG8gY2FsbGVyLgorCSAqLworCWlmIChyZGV2LT5tb2RlX2luZm8uY3J0Y3NbY3J0Y10pIHsKKwkJLyogUmVwZWF0IHJlYWRvdXQgaWYgbmVlZGVkIHRvIHByb3ZpZGUgc3RhYmxlIHJlc3VsdCBpZgorCQkgKiB3ZSBjcm9zcyBzdGFydCBvZiB2c3luYyBkdXJpbmcgdGhlIHF1ZXJpZXMuCisJCSAqLworCQlkbyB7CisJCQljb3VudCA9IHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIocmRldiwgY3J0Yyk7CisJCQkvKiBBc2sgcmFkZW9uX2dldF9jcnRjX3NjYW5vdXRwb3MgdG8gcmV0dXJuIHZwb3MgYXMKKwkJCSAqIGRpc3RhbmNlIHRvIHN0YXJ0IG9mIHZibGFuaywgaW5zdGVhZCBvZiByZWd1bGFyCisJCQkgKiB2ZXJ0aWNhbCBzY2Fub3V0IHBvcy4KKwkJCSAqLworCQkJc3RhdCA9IHJhZGVvbl9nZXRfY3J0Y19zY2Fub3V0cG9zKAorCQkJCWRldiwgY3J0YywgR0VUX0RJU1RBTkNFX1RPX1ZCTEFOS1NUQVJULAorCQkJCSZ2cG9zLCAmaHBvcywgTlVMTCwgTlVMTCwKKwkJCQkmcmRldi0+bW9kZV9pbmZvLmNydGNzW2NydGNdLT5iYXNlLmh3bW9kZSk7CisJCX0gd2hpbGUgKGNvdW50ICE9IHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIocmRldiwgY3J0YykpOworCisJCWlmICgoKHN0YXQgJiAoRFJNX1NDQU5PVVRQT1NfVkFMSUQgfCBEUk1fU0NBTk9VVFBPU19BQ0NVUkFURSkpICE9CisJCSAgICAoRFJNX1NDQU5PVVRQT1NfVkFMSUQgfCBEUk1fU0NBTk9VVFBPU19BQ0NVUkFURSkpKSB7CisJCQlEUk1fREVCVUdfVkJMKCJRdWVyeSBmYWlsZWQhIHN0YXQgJWRcbiIsIHN0YXQpOworCQl9CisJCWVsc2UgeworCQkJRFJNX0RFQlVHX1ZCTCgiY3J0YyAlZDogZGlzdCBmcm9tIHZibGFuayBzdGFydCAlZFxuIiwKKwkJCQkgICAgICBjcnRjLCB2cG9zKTsKKworCQkJLyogQnVtcCBjb3VudGVyIGlmIHdlIGFyZSBhdCA+PSBsZWFkaW5nIGVkZ2Ugb2YgdmJsYW5rLAorCQkJICogYnV0IGJlZm9yZSB2c3luYyB3aGVyZSB2cG9zIHdvdWxkIHR1cm4gbmVnYXRpdmUgYW5kCisJCQkgKiB0aGUgaHcgY291bnRlciByZWFsbHkgaW5jcmVtZW50cy4KKwkJCSAqLworCQkJaWYgKHZwb3MgPj0gMCkKKwkJCQljb3VudCsrOworCQl9CisJfQorCWVsc2UgeworCSAgICAvKiBGYWxsYmFjayB0byB1c2UgdmFsdWUgYXMgaXMuICovCisJICAgIGNvdW50ID0gcmFkZW9uX2dldF92YmxhbmtfY291bnRlcihyZGV2LCBjcnRjKTsKKwkgICAgRFJNX0RFQlVHX1ZCTCgiTlVMTCBtb2RlIGluZm8hIFJldHVybmVkIGNvdW50IG1heSBiZSB3cm9uZy5cbiIpOworCX0KKworCXJldHVybiBjb3VudDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggODMwZTE3MS4uYmJhMTEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtMzY3LDYgKzM2Nyw3IEBACiAJdTMyIGxpbmVfdGltZTsKIAl1MzIgd21fbG93OwogCXUzMiB3bV9oaWdoOworCXUzMiBsYl92YmxhbmtfbGVhZF9saW5lczsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBod19tb2RlOwogCWVudW0gcmFkZW9uX291dHB1dF9jc2Mgb3V0cHV0X2NzYzsKIH07CkBAIC01NTMsNiArNTU0LDcgQEAKIAl2b2lkICpjb25fcHJpdjsKIAlib29sIGRhY19sb2FkX2RldGVjdDsKIAlib29sIGRldGVjdGVkX2J5X2xvYWQ7IC8qIGlmIHRoZSBjb25uZWN0aW9uIHN0YXR1cyB3YXMgZGV0ZXJtaW5lZCBieSBsb2FkICovCisJYm9vbCBkZXRlY3RlZF9ocGRfd2l0aG91dF9kZGM7IC8qIGlmIGFuIEhQRCBzaWduYWwgd2FzIGRldGVjdGVkIG9uIERWSSwgYnV0IGRkYyBwcm9iaW5nIGZhaWxlZCAqLwogCXVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQ7CiAJc3RydWN0IHJhZGVvbl9ocGQgaHBkOwogCXN0cnVjdCByYWRlb25fcm91dGVyIHJvdXRlcjsKQEAgLTY4Niw2ICs2ODgsOSBAQAogCXN0cnVjdCBhdG9tX3ZvbHRhZ2VfdGFibGVfZW50cnkgZW50cmllc1tNQVhfVk9MVEFHRV9FTlRSSUVTXTsKIH07CiAKKy8qIERyaXZlciBpbnRlcm5hbCB1c2Ugb25seSBmbGFncyBvZiByYWRlb25fZ2V0X2NydGNfc2Nhbm91dHBvcygpICovCisjZGVmaW5lIFVTRV9SRUFMX1ZCTEFOS1NUQVJUIAkJKDEgPDwgMzApCisjZGVmaW5lIEdFVF9ESVNUQU5DRV9UT19WQkxBTktTVEFSVAkoMSA8PCAzMSkKIAogZXh0ZXJuIHZvaWQKIHJhZGVvbl9hZGRfYXRvbV9jb25uZWN0b3Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKaW5kZXggZDMwMjQ4OC4uODRkNDU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKQEAgLTIyMSwxMSArMjIxLDE3IEBACiAJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkpCiAJCWJvLT5mbGFncyAmPSB+KFJBREVPTl9HRU1fR1RUX1dDIHwgUkFERU9OX0dFTV9HVFRfVUMpOwogCisJLyogV3JpdGUtY29tYmluZWQgQ1BVIG1hcHBpbmdzIG9mIEdUVCBjYXVzZSBHUFUgaGFuZ3Mgd2l0aCBSVjZ4eAorCSAqIFNlZSBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI2OAorCSAqLworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjYxMCAmJiByZGV2LT5mYW1pbHkgPD0gQ0hJUF9SVjYzNSkKKwkJYm8tPmZsYWdzICY9IH4oUkFERU9OX0dFTV9HVFRfV0MgfCBSQURFT05fR0VNX0dUVF9VQyk7CisKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLyogWFhYOiBXcml0ZS1jb21iaW5lZCBDUFUgbWFwcGluZ3Mgb2YgR1RUIHNlZW0gYnJva2VuIG9uIDMyLWJpdAogCSAqIFNlZSBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD04NDYyNwogCSAqLwotCWJvLT5mbGFncyAmPSB+UkFERU9OX0dFTV9HVFRfV0M7CisJYm8tPmZsYWdzICY9IH4oUkFERU9OX0dFTV9HVFRfV0MgfCBSQURFT05fR0VNX0dUVF9VQyk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpICYmICFkZWZpbmVkKENPTkZJR19YODZfUEFUKQogCS8qIERvbid0IHRyeSB0byBlbmFibGUgd3JpdGUtY29tYmluaW5nIHdoZW4gaXQgY2FuJ3Qgd29yaywgb3IgdGhpbmdzCiAJICogbWF5IGJlIHNsb3cKQEAgLTIzNSw5ICsyNDEsMTAgQEAKICN3YXJuaW5nIFBsZWFzZSBlbmFibGUgQ09ORklHX01UUlIgYW5kIENPTkZJR19YODZfUEFUIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgXAogCSB0aGFua3MgdG8gd3JpdGUtY29tYmluaW5nCiAKLQlEUk1fSU5GT19PTkNFKCJQbGVhc2UgZW5hYmxlIENPTkZJR19NVFJSIGFuZCBDT05GSUdfWDg2X1BBVCBmb3IgIgotCQkgICAgICAiYmV0dGVyIHBlcmZvcm1hbmNlIHRoYW5rcyB0byB3cml0ZS1jb21iaW5pbmdcbiIpOwotCWJvLT5mbGFncyAmPSB+UkFERU9OX0dFTV9HVFRfV0M7CisJaWYgKGJvLT5mbGFncyAmIFJBREVPTl9HRU1fR1RUX1dDKQorCQlEUk1fSU5GT19PTkNFKCJQbGVhc2UgZW5hYmxlIENPTkZJR19NVFJSIGFuZCBDT05GSUdfWDg2X1BBVCBmb3IgIgorCQkJICAgICAgImJldHRlciBwZXJmb3JtYW5jZSB0aGFua3MgdG8gd3JpdGUtY29tYmluaW5nXG4iKTsKKwliby0+ZmxhZ3MgJj0gfihSQURFT05fR0VNX0dUVF9XQyB8IFJBREVPTl9HRU1fR1RUX1VDKTsKICNlbmRpZgogCiAJcmFkZW9uX3R0bV9wbGFjZW1lbnRfZnJvbV9kb21haW4oYm8sIGRvbWFpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwppbmRleCA2ZDgwZGRlLi41OWFiZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKQEAgLTE1NDIsOCArMTU0Miw3IEBACiAJCQkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKHJkZXYtPmRldiwgJmRldl9hdHRyX3Bvd2VyX21ldGhvZCk7CiAJCQkJaWYgKHJldCkKIAkJCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRldmljZSBmaWxlIGZvciBwb3dlciBtZXRob2RcbiIpOwotCQkJCWlmICghcmV0KQotCQkJCQlyZGV2LT5wbS5zeXNmc19pbml0aWFsaXplZCA9IHRydWU7CisJCQkJcmRldi0+cG0uc3lzZnNfaW5pdGlhbGl6ZWQgPSB0cnVlOwogCQkJfQogCiAJCQltdXRleF9sb2NrKCZyZGV2LT5wbS5tdXRleCk7CkBAIC0xNzU3LDcgKzE3NTYsOSBAQAogCSAqLwogCWZvciAoY3J0YyA9IDA7IChjcnRjIDwgcmRldi0+bnVtX2NydGMpICYmIGluX3ZibDsgY3J0YysrKSB7CiAJCWlmIChyZGV2LT5wbS5hY3RpdmVfY3J0Y3MgJiAoMSA8PCBjcnRjKSkgewotCQkJdmJsX3N0YXR1cyA9IHJhZGVvbl9nZXRfY3J0Y19zY2Fub3V0cG9zKHJkZXYtPmRkZXYsIGNydGMsIDAsCisJCQl2Ymxfc3RhdHVzID0gcmFkZW9uX2dldF9jcnRjX3NjYW5vdXRwb3MocmRldi0+ZGRldiwKKwkJCQkJCQkJY3J0YywKKwkJCQkJCQkJVVNFX1JFQUxfVkJMQU5LU1RBUlQsCiAJCQkJCQkJCSZ2cG9zLCAmaHBvcywgTlVMTCwgTlVMTCwKIAkJCQkJCQkJJnJkZXYtPm1vZGVfaW5mby5jcnRjc1tjcnRjXS0+YmFzZS5od21vZGUpOwogCQkJaWYgKCh2Ymxfc3RhdHVzICYgRFJNX1NDQU5PVVRQT1NfVkFMSUQpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl92Y2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ZjZS5jCmluZGV4IDU3NGY2MmIuLjdlYjFhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ZjZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ZjZS5jCkBAIC0zNjEsMzEgKzM2MSwzMSBAQAogCiAJLyogc3RpdGNoIHRvZ2V0aGVyIGFuIFZDRSBjcmVhdGUgbXNnICovCiAJaWIubGVuZ3RoX2R3ID0gMDsKLQlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gMHgwMDAwMDAwYzsgLyogbGVuICovCi0JaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IDB4MDAwMDAwMDE7IC8qIHNlc3Npb24gY21kICovCi0JaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGhhbmRsZTsKKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwYyk7IC8qIGxlbiAqLworCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSBjcHVfdG9fbGUzMigweDAwMDAwMDAxKTsgLyogc2Vzc2lvbiBjbWQgKi8KKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIoaGFuZGxlKTsKIAotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDMwOyAvKiBsZW4gKi8KLQlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gMHgwMTAwMDAwMTsgLyogY3JlYXRlIGNtZCAqLwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDAwOwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDQyOwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDBhOwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDAxOwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDgwOwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDYwOwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMTAwOwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMTAwOwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDBjOwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDAwOworCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSBjcHVfdG9fbGUzMigweDAwMDAwMDMwKTsgLyogbGVuICovCisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDEwMDAwMDEpOyAvKiBjcmVhdGUgY21kICovCisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApOworCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSBjcHVfdG9fbGUzMigweDAwMDAwMDQyKTsKKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwYSk7CisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDEpOworCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSBjcHVfdG9fbGUzMigweDAwMDAwMDgwKTsKKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIoMHgwMDAwMDA2MCk7CisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDAwMDAxMDApOworCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSBjcHVfdG9fbGUzMigweDAwMDAwMTAwKTsKKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwYyk7CisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApOwogCi0JaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IDB4MDAwMDAwMTQ7IC8qIGxlbiAqLwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDA1MDAwMDA1OyAvKiBmZWVkYmFjayBidWZmZXIgKi8KLQlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gdXBwZXJfMzJfYml0cyhkdW1teSk7Ci0JaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGR1bW15OwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDAxOworCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSBjcHVfdG9fbGUzMigweDAwMDAwMDE0KTsgLyogbGVuICovCisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDUwMDAwMDUpOyAvKiBmZWVkYmFjayBidWZmZXIgKi8KKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhkdW1teSkpOworCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSBjcHVfdG9fbGUzMihkdW1teSk7CisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDEpOwogCiAJZm9yIChpID0gaWIubGVuZ3RoX2R3OyBpIDwgaWJfc2l6ZV9kdzsgKytpKQotCQlpYi5wdHJbaV0gPSAweDA7CisJCWliLnB0cltpXSA9IGNwdV90b19sZTMyKDB4MCk7CiAKIAlyID0gcmFkZW9uX2liX3NjaGVkdWxlKHJkZXYsICZpYiwgTlVMTCwgZmFsc2UpOwogCWlmIChyKSB7CkBAIC00MjgsMjEgKzQyOCwyMSBAQAogCiAJLyogc3RpdGNoIHRvZ2V0aGVyIGFuIFZDRSBkZXN0cm95IG1zZyAqLwogCWliLmxlbmd0aF9kdyA9IDA7Ci0JaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IDB4MDAwMDAwMGM7IC8qIGxlbiAqLwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSAweDAwMDAwMDAxOyAvKiBzZXNzaW9uIGNtZCAqLwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSBoYW5kbGU7CisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMGMpOyAvKiBsZW4gKi8KKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSk7IC8qIHNlc3Npb24gY21kICovCisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKGhhbmRsZSk7CiAKLQlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gMHgwMDAwMDAxNDsgLyogbGVuICovCi0JaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IDB4MDUwMDAwMDU7IC8qIGZlZWRiYWNrIGJ1ZmZlciAqLwotCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSB1cHBlcl8zMl9iaXRzKGR1bW15KTsKLQlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gZHVtbXk7Ci0JaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IDB4MDAwMDAwMDE7CisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMTQpOyAvKiBsZW4gKi8KKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIoMHgwNTAwMDAwNSk7IC8qIGZlZWRiYWNrIGJ1ZmZlciAqLworCWliLnB0cltpYi5sZW5ndGhfZHcrK10gPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGR1bW15KSk7CisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKGR1bW15KTsKKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSk7CiAKLQlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gMHgwMDAwMDAwODsgLyogbGVuICovCi0JaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IDB4MDIwMDAwMDE7IC8qIGRlc3Ryb3kgY21kICovCisJaWIucHRyW2liLmxlbmd0aF9kdysrXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDgpOyAvKiBsZW4gKi8KKwlpYi5wdHJbaWIubGVuZ3RoX2R3KytdID0gY3B1X3RvX2xlMzIoMHgwMjAwMDAwMSk7IC8qIGRlc3Ryb3kgY21kICovCiAKIAlmb3IgKGkgPSBpYi5sZW5ndGhfZHc7IGkgPCBpYl9zaXplX2R3OyArK2kpCi0JCWliLnB0cltpXSA9IDB4MDsKKwkJaWIucHRyW2ldID0gY3B1X3RvX2xlMzIoMHgwKTsKIAogCXIgPSByYWRlb25faWJfc2NoZWR1bGUocmRldiwgJmliLCBOVUxMLCBmYWxzZSk7CiAJaWYgKHIpIHsKQEAgLTY5OSwxMiArNjk5LDEyIEBACiB7CiAJdWludDY0X3QgYWRkciA9IHNlbWFwaG9yZS0+Z3B1X2FkZHI7CiAKLQlyYWRlb25fcmluZ193cml0ZShyaW5nLCBWQ0VfQ01EX1NFTUFQSE9SRSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgKGFkZHIgPj4gMykgJiAweDAwMEZGRkZGKTsKLQlyYWRlb25fcmluZ193cml0ZShyaW5nLCAoYWRkciA+PiAyMykgJiAweDAwMEZGRkZGKTsKLQlyYWRlb25fcmluZ193cml0ZShyaW5nLCAweDAxMDAzMDAwIHwgKGVtaXRfd2FpdCA/IDEgOiAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgY3B1X3RvX2xlMzIoVkNFX0NNRF9TRU1BUEhPUkUpKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBjcHVfdG9fbGUzMigoYWRkciA+PiAzKSAmIDB4MDAwRkZGRkYpKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBjcHVfdG9fbGUzMigoYWRkciA+PiAyMykgJiAweDAwMEZGRkZGKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgY3B1X3RvX2xlMzIoMHgwMTAwMzAwMCB8IChlbWl0X3dhaXQgPyAxIDogMCkpKTsKIAlpZiAoIWVtaXRfd2FpdCkKLQkJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgVkNFX0NNRF9FTkQpOworCQlyYWRlb25fcmluZ193cml0ZShyaW5nLCBjcHVfdG9fbGUzMihWQ0VfQ01EX0VORCkpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC03MTksMTAgKzcxOSwxMCBAQAogdm9pZCByYWRlb25fdmNlX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKQogewogCXN0cnVjdCByYWRlb25fcmluZyAqcmluZyA9ICZyZGV2LT5yaW5nW2liLT5yaW5nXTsKLQlyYWRlb25fcmluZ193cml0ZShyaW5nLCBWQ0VfQ01EX0lCKTsKLQlyYWRlb25fcmluZ193cml0ZShyaW5nLCBpYi0+Z3B1X2FkZHIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgaWItPmxlbmd0aF9kdyk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgY3B1X3RvX2xlMzIoVkNFX0NNRF9JQikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGNwdV90b19sZTMyKGliLT5ncHVfYWRkcikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGNwdV90b19sZTMyKGliLT5sZW5ndGhfZHcpKTsKIH0KIAogLyoqCkBAIC03MzgsMTIgKzczOCwxMiBAQAogCXN0cnVjdCByYWRlb25fcmluZyAqcmluZyA9ICZyZGV2LT5yaW5nW2ZlbmNlLT5yaW5nXTsKIAl1aW50NjRfdCBhZGRyID0gcmRldi0+ZmVuY2VfZHJ2W2ZlbmNlLT5yaW5nXS5ncHVfYWRkcjsKIAotCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFZDRV9DTURfRkVOQ0UpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGFkZHIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIHVwcGVyXzMyX2JpdHMoYWRkcikpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGZlbmNlLT5zZXEpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIFZDRV9DTURfVFJBUCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgVkNFX0NNRF9FTkQpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGNwdV90b19sZTMyKFZDRV9DTURfRkVOQ0UpKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBjcHVfdG9fbGUzMihhZGRyKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhhZGRyKSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGNwdV90b19sZTMyKGZlbmNlLT5zZXEpKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBjcHVfdG9fbGUzMihWQ0VfQ01EX1RSQVApKTsKKwlyYWRlb25fcmluZ193cml0ZShyaW5nLCBjcHVfdG9fbGUzMihWQ0VfQ01EX0VORCkpOwogfQogCiAvKioKQEAgLTc2NSw3ICs3NjUsNyBAQAogCQkJICByaW5nLT5pZHgsIHIpOwogCQlyZXR1cm4gcjsKIAl9Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmluZywgVkNFX0NNRF9FTkQpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJpbmcsIGNwdV90b19sZTMyKFZDRV9DTURfRU5EKSk7CiAJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2LCByaW5nLCBmYWxzZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCA5N2E5MDQ4Li42MjQ0ZjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCkBAIC04MTMsNyArODEzLDcgQEAKIAkJc3RhdHVzID0gcnM2MDBfaXJxX2FjayhyZGV2KTsKIAl9CiAJaWYgKHF1ZXVlX2hvdHBsdWcpCi0JCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmhvdHBsdWdfd29yayk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmRldi0+aG90cGx1Z193b3JrLCAwKTsKIAlpZiAocXVldWVfaGRtaSkKIAkJc2NoZWR1bGVfd29yaygmcmRldi0+YXVkaW9fd29yayk7CiAJaWYgKHJkZXYtPm1zaV9lbmFibGVkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKaW5kZXggNTE2Y2EyNy4uNmJjNDRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwpAQCAtMjA3LDYgKzIwNyw5IEBACiB7CiAJdTMyIHRtcDsKIAorCS8qIEd1ZXNzIGxpbmUgYnVmZmVyIHNpemUgdG8gYmUgODE5MiBwaXhlbHMgKi8KKwl1MzIgbGJfc2l6ZSA9IDgxOTI7CisKIAkvKgogCSAqIExpbmUgQnVmZmVyIFNldHVwCiAJICogVGhlcmUgaXMgYSBzaW5nbGUgbGluZSBidWZmZXIgc2hhcmVkIGJ5IGJvdGggZGlzcGxheSBjb250cm9sbGVycy4KQEAgLTI0Myw2ICsyNDYsMTMgQEAKIAkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMV8xUV9EMl8zUTsKIAl9CiAJV1JFRzMyKFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCwgdG1wKTsKKworCS8qIFNhdmUgbnVtYmVyIG9mIGxpbmVzIHRoZSBsaW5lYnVmZmVyIGxlYWRzIGJlZm9yZSB0aGUgc2Nhbm91dCAqLworCWlmIChtb2RlMSkKKwkJcmRldi0+bW9kZV9pbmZvLmNydGNzWzBdLT5sYl92YmxhbmtfbGVhZF9saW5lcyA9IERJVl9ST1VORF9VUChsYl9zaXplLCBtb2RlMS0+Y3J0Y19oZGlzcGxheSk7CisKKwlpZiAobW9kZTIpCisJCXJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+bGJfdmJsYW5rX2xlYWRfbGluZXMgPSBESVZfUk9VTkRfVVAobGJfc2l6ZSwgbW9kZTItPmNydGNfaGRpc3BsYXkpOwogfQogCiBzdHJ1Y3QgcnM2OTBfd2F0ZXJtYXJrIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3MzBfZHBtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzMwX2RwbS5jCmluZGV4IDNmNWUxY2YuLmQzN2JhMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3MzBfZHBtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjczMF9kcG0uYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJcmVzdWx0ID0gcnY3NzBfc2VuZF9tc2dfdG9fc21jKHJkZXYsIFBQU01DX01TR19Ud29MZXZlbHNEaXNhYmxlZCk7CiAKIAlpZiAocmVzdWx0ICE9IFBQU01DX1Jlc3VsdF9PSykKLQkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZm9yY2UgRFBNIHRvIGxvd1xuIik7CisJCURSTV9ERUJVRygiQ291bGQgbm90IGZvcmNlIERQTSB0byBsb3dcbiIpOwogCiAJV1JFRzMyX1AoR0VORVJBTF9QV1JNR1QsIDAsIH5HTE9CQUxfUFdSTUdUX0VOKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MF9kcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBfZHBtLmMKaW5kZXggYjljNzcwNy4uZTgzMGM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MF9kcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwX2RwbS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlyZXN1bHQgPSBydjc3MF9zZW5kX21zZ190b19zbWMocmRldiwgUFBTTUNfTVNHX1R3b0xldmVsc0Rpc2FibGVkKTsKIAogCWlmIChyZXN1bHQgIT0gUFBTTUNfUmVzdWx0X09LKQotCQlEUk1fRVJST1IoIkNvdWxkIG5vdCBmb3JjZSBEUE0gdG8gbG93LlxuIik7CisJCURSTV9ERUJVRygiQ291bGQgbm90IGZvcmNlIERQTSB0byBsb3cuXG4iKTsKIAogCVdSRUczMl9QKEdFTkVSQUxfUFdSTUdULCAwLCB+R0xPQkFMX1BXUk1HVF9FTik7CiAKQEAgLTE0MTgsNyArMTQxOCw3IEBACiBpbnQgcnY3NzBfc2V0X3N3X3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWlmIChydjc3MF9zZW5kX21zZ190b19zbWMocmRldiwgUFBTTUNfTVNHX1N3aXRjaFRvU3dTdGF0ZSkgIT0gUFBTTUNfUmVzdWx0X09LKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJRFJNX0RFQlVHKCJydjc3MF9zZXRfc3dfc3RhdGUgZmFpbGVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaS5jCmluZGV4IDA3MDM3ZTMuLmY4NzhkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpLmMKQEAgLTIzNzYsNiArMjM3Niw5IEBACiAJCWMuZnVsbCA9IGRmaXhlZF9kaXYoYywgYSk7CiAJCXByaW9yaXR5X2JfbWFyayA9IGRmaXhlZF90cnVuYyhjKTsKIAkJcHJpb3JpdHlfYl9jbnQgfD0gcHJpb3JpdHlfYl9tYXJrICYgUFJJT1JJVFlfTUFSS19NQVNLOworCisJCS8qIFNhdmUgbnVtYmVyIG9mIGxpbmVzIHRoZSBsaW5lYnVmZmVyIGxlYWRzIGJlZm9yZSB0aGUgc2Nhbm91dCAqLworCQlyYWRlb25fY3J0Yy0+bGJfdmJsYW5rX2xlYWRfbGluZXMgPSBESVZfUk9VTkRfVVAobGJfc2l6ZSwgbW9kZS0+Y3J0Y19oZGlzcGxheSk7CiAJfQogCiAJLyogc2VsZWN0IHdtIEEgKi8KQEAgLTY4NDgsNyArNjg1MSw3IEBACiAJaWYgKHF1ZXVlX2RwKQogCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5kcF93b3JrKTsKIAlpZiAocXVldWVfaG90cGx1ZykKLQkJc2NoZWR1bGVfd29yaygmcmRldi0+aG90cGx1Z193b3JrKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyZGV2LT5ob3RwbHVnX3dvcmssIDApOwogCWlmIChxdWV1ZV90aGVybWFsICYmIHJkZXYtPnBtLmRwbV9lbmFibGVkKQogCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5wbS5kcG0udGhlcm1hbC53b3JrKTsKIAlyZGV2LT5paC5ycHRyID0gcnB0cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lfZHBtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpX2RwbS5jCmluZGV4IGU3MmJmNDYuLmE4MmI4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lfZHBtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaV9kcG0uYwpAQCAtMjkyNyw3ICsyOTI3LDcgQEAKIAl7IFBDSV9WRU5ET1JfSURfQVRJLCAweDY4MTAsIDB4MTQ2MiwgMHgzMDM2LCAwLCAxMjAwMDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfQVRJLCAweDY4MTEsIDB4MTc0YiwgMHhlMjcxLCAwLCAxMjAwMDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfQVRJLCAweDY4MTAsIDB4MTc0YiwgMHhlMjcxLCA4NTAwMCwgOTAwMDAgfSwKLQl7IFBDSV9WRU5ET1JfSURfQVRJLCAweDY4MTEsIDB4MTc2MiwgMHgyMDE1LCAwLCAxMjAwMDAgfSwKKwl7IFBDSV9WRU5ET1JfSURfQVRJLCAweDY4MTEsIDB4MTQ2MiwgMHgyMDE1LCAwLCAxMjAwMDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfQVRJLCAweDY4MTEsIDB4MTA0MywgMHgyMDE1LCAwLCAxMjAwMDAgfSwKIAl7IDAsIDAsIDAsIDAgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9nZW0uYwppbmRleCA4Y2FlYTBhLi5kOTA4MzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZ2VtLmMKQEAgLTY3LDYgKzY3LDcgQEAKIAkgKiBWTV9QRk5NQVAgZmxhZyB0aGF0IHdhcyBzZXQgYnkgZHJtX2dlbV9tbWFwX29iaigpL2RybV9nZW1fbW1hcCgpLgogCSAqLwogCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKKwl2bWEtPnZtX3Bnb2ZmID0gMDsKIAogCXJldCA9IGRtYV9tbWFwX2F0dHJzKGRybS0+ZGV2LCB2bWEsIHJrX29iai0+a3ZhZGRyLCBya19vYmotPmRtYV9hZGRyLAogCQkJICAgICBvYmotPnNpemUsICZya19vYmotPmRtYV9hdHRycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuYwppbmRleCA1ZDhhZTVlLi4wM2M0N2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMKQEAgLTM3NCw2ICszNzQsNyBAQAogCSAgLmRhdGEgPSAmcmszMjg4X3ZvcCB9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHZvcF9kcml2ZXJfZHRfbWF0Y2gpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdm9wX3dyaXRlbChzdHJ1Y3Qgdm9wICp2b3AsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdikKIHsKQEAgLTk1OSw4ICs5NjAsOCBAQAogCXZhbCA9IChkZXN0LnkyIC0gZGVzdC55MSAtIDEpIDw8IDE2OwogCXZhbCB8PSAoZGVzdC54MiAtIGRlc3QueDEgLSAxKSAmIDB4ZmZmZjsKIAlWT1BfV0lOX1NFVCh2b3AsIHdpbiwgZHNwX2luZm8sIHZhbCk7Ci0JdmFsID0gKGRzcF9zdHkgLSAxKSA8PCAxNjsKLQl2YWwgfD0gKGRzcF9zdHggLSAxKSAmIDB4ZmZmZjsKKwl2YWwgPSBkc3Bfc3R5IDw8IDE2OworCXZhbCB8PSBkc3Bfc3R4ICYgMHhmZmZmOwogCVZPUF9XSU5fU0VUKHZvcCwgd2luLCBkc3Bfc3QsIHZhbCk7CiAJVk9QX1dJTl9TRVQodm9wLCB3aW4sIHJiX3N3YXAsIHJiX3N3YXApOwogCkBAIC0xMjg5LDcgKzEyOTAsNyBAQAogCiAJaWYgKHN0YXRlLT5ldmVudCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJtLT5ldmVudF9sb2NrLCBmbGFncyk7Ci0JCWRybV9zZW5kX3ZibGFua19ldmVudChkcm0sIC0xLCBzdGF0ZS0+ZXZlbnQpOworCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBzdGF0ZS0+ZXZlbnQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAl9CiAKQEAgLTE1NzUsMzIgKzE1NzYsMjUgQEAKIAkJcmV0dXJuIFBUUl9FUlIodm9wLT5kY2xrKTsKIAl9CiAKLQlyZXQgPSBjbGtfcHJlcGFyZSh2b3AtPmhjbGspOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIodm9wLT5kZXYsICJmYWlsZWQgdG8gcHJlcGFyZSBoY2xrXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAlyZXQgPSBjbGtfcHJlcGFyZSh2b3AtPmRjbGspOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIodm9wLT5kZXYsICJmYWlsZWQgdG8gcHJlcGFyZSBkY2xrXG4iKTsKLQkJZ290byBlcnJfdW5wcmVwYXJlX2hjbGs7CisJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gY2xrX3ByZXBhcmUodm9wLT5hY2xrKTsKKwkvKiBFbmFibGUgYm90aCB0aGUgaGNsayBhbmQgYWNsayB0byBzZXR1cCB0aGUgdm9wICovCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHZvcC0+aGNsayk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2Vycih2b3AtPmRldiwgImZhaWxlZCB0byBwcmVwYXJlIGFjbGtcbiIpOworCQlkZXZfZXJyKHZvcC0+ZGV2LCAiZmFpbGVkIHRvIHByZXBhcmUvZW5hYmxlIGhjbGtcbiIpOwogCQlnb3RvIGVycl91bnByZXBhcmVfZGNsazsKIAl9CiAKLQkvKgotCSAqIGVuYWJsZSBoY2xrLCBzbyB0aGF0IHdlIGNhbiBjb25maWcgdm9wIHJlZ2lzdGVyLgotCSAqLwotCXJldCA9IGNsa19lbmFibGUodm9wLT5oY2xrKTsKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUodm9wLT5hY2xrKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKHZvcC0+ZGV2LCAiZmFpbGVkIHRvIHByZXBhcmUgYWNsa1xuIik7Ci0JCWdvdG8gZXJyX3VucHJlcGFyZV9hY2xrOworCQlkZXZfZXJyKHZvcC0+ZGV2LCAiZmFpbGVkIHRvIHByZXBhcmUvZW5hYmxlIGFjbGtcbiIpOworCQlnb3RvIGVycl9kaXNhYmxlX2hjbGs7CiAJfQorCiAJLyoKIAkgKiBkbyBoY2xrX3Jlc2V0LCByZXNldCBhbGwgdm9wIHJlZ2lzdGVycy4KIAkgKi8KQEAgLTE2MDgsNyArMTYwMiw3IEBACiAJaWYgKElTX0VSUihhaGJfcnN0KSkgewogCQlkZXZfZXJyKHZvcC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBhaGIgcmVzZXRcbiIpOwogCQlyZXQgPSBQVFJfRVJSKGFoYl9yc3QpOwotCQlnb3RvIGVycl9kaXNhYmxlX2hjbGs7CisJCWdvdG8gZXJyX2Rpc2FibGVfYWNsazsKIAl9CiAJcmVzZXRfY29udHJvbF9hc3NlcnQoYWhiX3JzdCk7CiAJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CkBAIC0xNjM0LDI2ICsxNjI4LDI1IEBACiAJaWYgKElTX0VSUih2b3AtPmRjbGtfcnN0KSkgewogCQlkZXZfZXJyKHZvcC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBkY2xrIHJlc2V0XG4iKTsKIAkJcmV0ID0gUFRSX0VSUih2b3AtPmRjbGtfcnN0KTsKLQkJZ290byBlcnJfdW5wcmVwYXJlX2FjbGs7CisJCWdvdG8gZXJyX2Rpc2FibGVfYWNsazsKIAl9CiAJcmVzZXRfY29udHJvbF9hc3NlcnQodm9wLT5kY2xrX3JzdCk7CiAJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CiAJcmVzZXRfY29udHJvbF9kZWFzc2VydCh2b3AtPmRjbGtfcnN0KTsKIAogCWNsa19kaXNhYmxlKHZvcC0+aGNsayk7CisJY2xrX2Rpc2FibGUodm9wLT5hY2xrKTsKIAogCXZvcC0+aXNfZW5hYmxlZCA9IGZhbHNlOwogCiAJcmV0dXJuIDA7CiAKK2Vycl9kaXNhYmxlX2FjbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHZvcC0+YWNsayk7CiBlcnJfZGlzYWJsZV9oY2xrOgotCWNsa19kaXNhYmxlKHZvcC0+aGNsayk7Ci1lcnJfdW5wcmVwYXJlX2FjbGs6Ci0JY2xrX3VucHJlcGFyZSh2b3AtPmFjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh2b3AtPmhjbGspOwogZXJyX3VucHJlcGFyZV9kY2xrOgogCWNsa191bnByZXBhcmUodm9wLT5kY2xrKTsKLWVycl91bnByZXBhcmVfaGNsazoKLQljbGtfdW5wcmVwYXJlKHZvcC0+aGNsayk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbG9jay5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbG9jay5jCmluZGV4IDZhOTU0NTQuLmYxNTRmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2xvY2suYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9sb2NrLmMKQEAgLTE4MCw3ICsxODAsNyBAQAogCQkJc3Bpbl91bmxvY2soJmxvY2stPmxvY2spOwogCQl9CiAJfSBlbHNlCi0JCXdhaXRfZXZlbnQobG9jay0+cXVldWUsIF9fdHRtX3JlYWRfbG9jayhsb2NrKSk7CisJCXdhaXRfZXZlbnQobG9jay0+cXVldWUsIF9fdHRtX3dyaXRlX2xvY2sobG9jaykpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwppbmRleCA3YTlmNDc2Li4yNjUwNjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCiAJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcihjb25uZWN0b3IsIGNydGMtPmRldikgewotCQlpZiAoY29ubmVjdG9yICYmIGNvbm5lY3Rvci0+c3RhdGUtPmNydGMgPT0gY3J0YykgeworCQlpZiAoY29ubmVjdG9yLT5zdGF0ZS0+Y3J0YyA9PSBjcnRjKSB7CiAJCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBjb25uZWN0b3ItPmVuY29kZXI7CiAJCQlzdHJ1Y3QgdmM0X2VuY29kZXIgKnZjNF9lbmNvZGVyID0KIAkJCQl0b192YzRfZW5jb2RlcihlbmNvZGVyKTsKQEAgLTQwMSw3ICs0MDEsOCBAQAogCQlkbGlzdF9uZXh0Kys7CiAKIAkJSFZTX1dSSVRFKFNDQUxFUl9ESVNQTElTVFgodmM0X2NydGMtPmNoYW5uZWwpLAotCQkJICAodTMyICopdmM0X2NydGMtPmRsaXN0IC0gKHUzMiAqKXZjNC0+aHZzLT5kbGlzdCk7CisJCQkgICh1MzIgX19pb21lbSAqKXZjNF9jcnRjLT5kbGlzdCAtCisJCQkgICh1MzIgX19pb21lbSAqKXZjNC0+aHZzLT5kbGlzdCk7CiAKIAkJLyogTWFrZSB0aGUgbmV4dCBkaXNwbGF5IGxpc3Qgc3RhcnQgYWZ0ZXIgb3Vycy4gKi8KIAkJdmM0X2NydGMtPmRsaXN0X3NpemUgLT0gKGRsaXN0X25leHQgLSB2YzRfY3J0Yy0+ZGxpc3QpOwpAQCAtNTkxLDE0ICs1OTIsMTQgQEAKIAkgKiB0aGF0IHdpbGwgdGFrZSB0b28gbXVjaC4KIAkgKi8KIAlwcmltYXJ5X3BsYW5lID0gdmM0X3BsYW5lX2luaXQoZHJtLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKLQlpZiAoIXByaW1hcnlfcGxhbmUpIHsKKwlpZiAoSVNfRVJSKHByaW1hcnlfcGxhbmUpKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNvbnN0cnVjdCBwcmltYXJ5IHBsYW5lXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihwcmltYXJ5X3BsYW5lKTsKIAkJZ290byBlcnI7CiAJfQogCiAJY3Vyc29yX3BsYW5lID0gdmM0X3BsYW5lX2luaXQoZHJtLCBEUk1fUExBTkVfVFlQRV9DVVJTT1IpOwotCWlmICghY3Vyc29yX3BsYW5lKSB7CisJaWYgKElTX0VSUihjdXJzb3JfcGxhbmUpKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNvbnN0cnVjdCBjdXJzb3IgcGxhbmVcbiIpOwogCQlyZXQgPSBQVFJfRVJSKGN1cnNvcl9wbGFuZSk7CiAJCWdvdG8gZXJyX3ByaW1hcnk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCmluZGV4IDZlNzMwNjAuLmQ1ZGI5ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCkBAIC0yNTksNyArMjU5LDYgQEAKIAkucmVtb3ZlCQk9IHZjNF9wbGF0Zm9ybV9kcm1fcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJ2YzQtZHJtIiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5vZl9tYXRjaF90YWJsZSA9IHZjNF9vZl9tYXRjaCwKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2h2cy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMKaW5kZXggYWIxNjczZi4uODA5OGM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMKQEAgLTc1LDEwICs3NSwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSArPSA0KSB7CiAJCURSTV9JTkZPKCIweCUwOHggKCVzKTogMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAogCQkJIGkgKiA0LCBpIDwgSFZTX0JPT1RMT0FERVJfRExJU1RfRU5EID8gIkIiIDogIkQiLAotCQkJICgodWludDMyX3QgKil2YzQtPmh2cy0+ZGxpc3QpW2kgKyAwXSwKLQkJCSAoKHVpbnQzMl90ICopdmM0LT5odnMtPmRsaXN0KVtpICsgMV0sCi0JCQkgKCh1aW50MzJfdCAqKXZjNC0+aHZzLT5kbGlzdClbaSArIDJdLAotCQkJICgodWludDMyX3QgKil2YzQtPmh2cy0+ZGxpc3QpW2kgKyAzXSk7CisJCQkgcmVhZGwoKHUzMiBfX2lvbWVtICopdmM0LT5odnMtPmRsaXN0ICsgaSArIDApLAorCQkJIHJlYWRsKCh1MzIgX19pb21lbSAqKXZjNC0+aHZzLT5kbGlzdCArIGkgKyAxKSwKKwkJCSByZWFkbCgodTMyIF9faW9tZW0gKil2YzQtPmh2cy0+ZGxpc3QgKyBpICsgMiksCisJCQkgcmVhZGwoKHUzMiBfX2lvbWVtICopdmM0LT5odnMtPmRsaXN0ICsgaSArIDMpKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCmluZGV4IGNkZDhiMTAuLjg4N2YzY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwpAQCAtNzAsNyArNzAsNyBAQAogCXJldHVybiBzdGF0ZS0+ZmIgJiYgc3RhdGUtPmNydGM7CiB9CiAKLXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnZjNF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCitzdGF0aWMgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqdmM0X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIHsKIAlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGU7CiAKQEAgLTk3LDggKzk3LDggQEAKIAlyZXR1cm4gJnZjNF9zdGF0ZS0+YmFzZTsKIH0KIAotdm9pZCB2YzRfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCitzdGF0aWMgdm9pZCB2YzRfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRlKHN0YXRlKTsKIApAQCAtMTA4LDcgKzEwOCw3IEBACiB9CiAKIC8qIENhbGxlZCBkdXJpbmcgaW5pdCB0byBhbGxvY2F0ZSB0aGUgcGxhbmUncyBhdG9taWMgc3RhdGUuICovCi12b2lkIHZjNF9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3N0YXRpYyB2b2lkIHZjNF9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIHsKIAlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGU7CiAKQEAgLTE1Nyw2ICsxNTcsMTYgQEAKIAlpbnQgY3J0Y193ID0gc3RhdGUtPmNydGNfdzsKIAlpbnQgY3J0Y19oID0gc3RhdGUtPmNydGNfaDsKIAorCWlmIChzdGF0ZS0+Y3J0Y193IDw8IDE2ICE9IHN0YXRlLT5zcmNfdyB8fAorCSAgICBzdGF0ZS0+Y3J0Y19oIDw8IDE2ICE9IHN0YXRlLT5zcmNfaCkgeworCQkvKiBXZSBkb24ndCBzdXBwb3J0IHNjYWxpbmcgeWV0LCB3aGljaCBpbnZvbHZlcworCQkgKiBhbGxvY2F0aW5nIHRoZSBMQk0gbWVtb3J5IGZvciBzY2FsaW5nIHRlbXBvcmFyeQorCQkgKiBzdG9yYWdlLCBhbmQgcHV0dGluZyBmaWx0ZXIga2VybmVscyBpbiB0aGUgSFZTCisJCSAqIGNvbnRleHQuCisJCSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoY3J0Y194IDwgMCkgewogCQlvZmZzZXQgKz0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoZmItPnBpeGVsX2Zvcm1hdCwgMCkgKiAtY3J0Y194OwogCQljcnRjX3cgKz0gY3J0Y194OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kaXNwbGF5LmMKaW5kZXggZjU0NTkxMy4uNTc4ZmUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZGlzcGxheS5jCkBAIC00MTIsNyArNDEyLDcgQEAKIAkuc2F2ZSA9IHZpcnRpb19ncHVfY29ubl9zYXZlLAogCS5yZXN0b3JlID0gdmlydGlvX2dwdV9jb25uX3Jlc3RvcmUsCiAJLmRldGVjdCA9IHZpcnRpb19ncHVfY29ubl9kZXRlY3QsCi0JLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXNfbm9tZXJnZSwKIAkuZGVzdHJveSA9IHZpcnRpb19ncHVfY29ubl9kZXN0cm95LAogCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKIAkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCmluZGV4IGEwOWNmODUuLmM0OTgxMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCkBAIC0xMjMzLDYgKzEyMzMsNyBAQAogCiAJdm13X2ZwLT5sb2NrZWRfbWFzdGVyID0gZHJtX21hc3Rlcl9nZXQoZmlsZV9wcml2LT5tYXN0ZXIpOwogCXJldCA9IHR0bV92dF9sb2NrKCZ2bWFzdGVyLT5sb2NrLCBmYWxzZSwgdm13X2ZwLT50ZmlsZSk7CisJdm13X2ttc19sZWdhY3lfaG90c3BvdF9jbGVhcihkZXZfcHJpdik7CiAJaWYgKHVubGlrZWx5KChyZXQgIT0gMCkpKSB7CiAJCURSTV9FUlJPUigiVW5hYmxlIHRvIGxvY2sgVFRNIGF0IFZUIHN3aXRjaC5cbiIpOwogCQlkcm1fbWFzdGVyX3B1dCgmdm13X2ZwLT5sb2NrZWRfbWFzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKaW5kZXggYThhZTlkZi4uNDY5Y2RkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKQEAgLTkyNSw2ICs5MjUsNyBAQAogCQkgICAgdWludDMyX3QgbnVtX2NsaXBzKTsKIGludCB2bXdfa21zX3VwZGF0ZV9sYXlvdXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cit2b2lkIHZtd19rbXNfbGVnYWN5X2hvdHNwb3RfY2xlYXIoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CiAKIGludCB2bXdfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCSAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCmluZGV4IGE4YmFmNWYuLmI2YTA4MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKQEAgLTM5MCw3ICszOTAsNyBAQAogCWVsc2UgaWYgKGN0eF9pZCA9PSBTVkdBM0RfSU5WQUxJRF9JRCkKIAkJcmV0ID0gdm13X2xvY2FsX2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgYnl0ZXMpOwogCWVsc2UgewotCQlXQVJOX09OKCJDb21tYW5kIGJ1ZmZlciBoYXMgbm90IGJlZW4gYWxsb2NhdGVkLlxuIik7CisJCVdBUk4oMSwgIkNvbW1hbmQgYnVmZmVyIGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQuXG4iKTsKIAkJcmV0ID0gTlVMTDsKIAl9CiAJaWYgKElTX0VSUl9PUl9OVUxMKHJldCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggOWZjZDdmOC4uOWI0YmI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTEzMywxMyArMTMzLDE5IEBACiAJdm13X21taW9fd3JpdGUoKytjb3VudCwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQ1VSU09SX0NPVU5UKTsKIH0KIAotaW50IHZtd19kdV9jcnRjX2N1cnNvcl9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJCSAgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkKKworLyoKKyAqIHZtd19kdV9jcnRjX2N1cnNvcl9zZXQyIC0gRHJpdmVyIGN1cnNvcl9zZXQyIGNhbGxiYWNrLgorICovCitpbnQgdm13X2R1X2NydGNfY3Vyc29yX3NldDIoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSAgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgICAgaW50MzJfdCBob3RfeCwgaW50MzJfdCBob3RfeSkKIHsKIAlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoY3J0Yy0+ZGV2KTsKIAlzdHJ1Y3Qgdm13X2Rpc3BsYXlfdW5pdCAqZHUgPSB2bXdfY3J0Y190b19kdShjcnRjKTsKIAlzdHJ1Y3Qgdm13X3N1cmZhY2UgKnN1cmZhY2UgPSBOVUxMOwogCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqZG1hYnVmID0gTlVMTDsKKwlzMzIgaG90c3BvdF94LCBob3RzcG90X3k7CiAJaW50IHJldDsKIAogCS8qCkBAIC0xNTEsNiArMTU3LDggQEAKIAkgKi8KIAlkcm1fbW9kZXNldF91bmxvY2tfY3J0YyhjcnRjKTsKIAlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXZfcHJpdi0+ZGV2KTsKKwlob3RzcG90X3ggPSBob3RfeCArIGR1LT5ob3RzcG90X3g7CisJaG90c3BvdF95ID0gaG90X3kgKyBkdS0+aG90c3BvdF95OwogCiAJLyogQSBsb3Qgb2YgdGhlIGNvZGUgYXNzdW1lcyB0aGlzICovCiAJaWYgKGhhbmRsZSAmJiAod2lkdGggIT0gNjQgfHwgaGVpZ2h0ICE9IDY0KSkgewpAQCAtMTg3LDMxICsxOTUsMzQgQEAKIAkJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmZHUtPmN1cnNvcl9kbWFidWYpOwogCiAJLyogc2V0dXAgbmV3IGltYWdlICovCisJcmV0ID0gMDsKIAlpZiAoc3VyZmFjZSkgewogCQkvKiB2bXdfdXNlcl9zdXJmYWNlX2xvb2t1cCB0YWtlcyBvbmUgcmVmZXJlbmNlICovCiAJCWR1LT5jdXJzb3Jfc3VyZmFjZSA9IHN1cmZhY2U7CiAKIAkJZHUtPmN1cnNvcl9zdXJmYWNlLT5zbm9vcGVyLmNydGMgPSBjcnRjOwogCQlkdS0+Y3Vyc29yX2FnZSA9IGR1LT5jdXJzb3Jfc3VyZmFjZS0+c25vb3Blci5hZ2U7Ci0JCXZtd19jdXJzb3JfdXBkYXRlX2ltYWdlKGRldl9wcml2LCBzdXJmYWNlLT5zbm9vcGVyLmltYWdlLAotCQkJCQk2NCwgNjQsIGR1LT5ob3RzcG90X3gsIGR1LT5ob3RzcG90X3kpOworCQlyZXQgPSB2bXdfY3Vyc29yX3VwZGF0ZV9pbWFnZShkZXZfcHJpdiwgc3VyZmFjZS0+c25vb3Blci5pbWFnZSwKKwkJCQkJICAgICAgNjQsIDY0LCBob3RzcG90X3gsIGhvdHNwb3RfeSk7CiAJfSBlbHNlIGlmIChkbWFidWYpIHsKIAkJLyogdm13X3VzZXJfc3VyZmFjZV9sb29rdXAgdGFrZXMgb25lIHJlZmVyZW5jZSAqLwogCQlkdS0+Y3Vyc29yX2RtYWJ1ZiA9IGRtYWJ1ZjsKIAogCQlyZXQgPSB2bXdfY3Vyc29yX3VwZGF0ZV9kbWFidWYoZGV2X3ByaXYsIGRtYWJ1Ziwgd2lkdGgsIGhlaWdodCwKLQkJCQkJICAgICAgIGR1LT5ob3RzcG90X3gsIGR1LT5ob3RzcG90X3kpOworCQkJCQkgICAgICAgaG90c3BvdF94LCBob3RzcG90X3kpOwogCX0gZWxzZSB7CiAJCXZtd19jdXJzb3JfdXBkYXRlX3Bvc2l0aW9uKGRldl9wcml2LCBmYWxzZSwgMCwgMCk7Ci0JCXJldCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXZtd19jdXJzb3JfdXBkYXRlX3Bvc2l0aW9uKGRldl9wcml2LCB0cnVlLAotCQkJCSAgIGR1LT5jdXJzb3JfeCArIGR1LT5ob3RzcG90X3gsCi0JCQkJICAgZHUtPmN1cnNvcl95ICsgZHUtPmhvdHNwb3RfeSk7CisJaWYgKCFyZXQpIHsKKwkJdm13X2N1cnNvcl91cGRhdGVfcG9zaXRpb24oZGV2X3ByaXYsIHRydWUsCisJCQkJCSAgIGR1LT5jdXJzb3JfeCArIGhvdHNwb3RfeCwKKwkJCQkJICAgZHUtPmN1cnNvcl95ICsgaG90c3BvdF95KTsKKwkJZHUtPmNvcmVfaG90c3BvdF94ID0gaG90X3g7CisJCWR1LT5jb3JlX2hvdHNwb3RfeSA9IGhvdF95OworCX0KIAotCXJldCA9IDA7CiBvdXQ6CiAJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXZfcHJpdi0+ZGV2KTsKIAlkcm1fbW9kZXNldF9sb2NrX2NydGMoY3J0YywgY3J0Yy0+Y3Vyc29yKTsKQEAgLTIzOSw4ICsyNTAsMTAgQEAKIAlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXZfcHJpdi0+ZGV2KTsKIAogCXZtd19jdXJzb3JfdXBkYXRlX3Bvc2l0aW9uKGRldl9wcml2LCBzaG93biwKLQkJCQkgICBkdS0+Y3Vyc29yX3ggKyBkdS0+aG90c3BvdF94LAotCQkJCSAgIGR1LT5jdXJzb3JfeSArIGR1LT5ob3RzcG90X3kpOworCQkJCSAgIGR1LT5jdXJzb3JfeCArIGR1LT5ob3RzcG90X3ggKworCQkJCSAgIGR1LT5jb3JlX2hvdHNwb3RfeCwKKwkJCQkgICBkdS0+Y3Vyc29yX3kgKyBkdS0+aG90c3BvdF95ICsKKwkJCQkgICBkdS0+Y29yZV9ob3RzcG90X3kpOwogCiAJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXZfcHJpdi0+ZGV2KTsKIAlkcm1fbW9kZXNldF9sb2NrX2NydGMoY3J0YywgY3J0Yy0+Y3Vyc29yKTsKQEAgLTMzNCw2ICszNDcsMjkgQEAKIAl0dG1fYm9fdW5yZXNlcnZlKGJvKTsKIH0KIAorLyoqCisgKiB2bXdfa21zX2xlZ2FjeV9ob3RzcG90X2NsZWFyIC0gQ2xlYXIgbGVnYWN5IGhvdHNwb3RzCisgKgorICogQGRldl9wcml2OiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3QuCisgKgorICogQ2xlYXJzIGFsbCBsZWdhY3kgaG90c3BvdHMuCisgKi8KK3ZvaWQgdm13X2ttc19sZWdhY3lfaG90c3BvdF9jbGVhcihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OworCXN0cnVjdCB2bXdfZGlzcGxheV91bml0ICpkdTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYpOworCWRybV9mb3JfZWFjaF9jcnRjKGNydGMsIGRldikgeworCQlkdSA9IHZtd19jcnRjX3RvX2R1KGNydGMpOworCisJCWR1LT5ob3RzcG90X3ggPSAwOworCQlkdS0+aG90c3BvdF95ID0gMDsKKwl9CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYpOworfQorCiB2b2lkIHZtd19rbXNfY3Vyc29yX3Bvc3RfZXhlY2J1ZihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwpAQCAtMzUxLDcgKzM4Nyw5IEBACiAJCWR1LT5jdXJzb3JfYWdlID0gZHUtPmN1cnNvcl9zdXJmYWNlLT5zbm9vcGVyLmFnZTsKIAkJdm13X2N1cnNvcl91cGRhdGVfaW1hZ2UoZGV2X3ByaXYsCiAJCQkJCWR1LT5jdXJzb3Jfc3VyZmFjZS0+c25vb3Blci5pbWFnZSwKLQkJCQkJNjQsIDY0LCBkdS0+aG90c3BvdF94LCBkdS0+aG90c3BvdF95KTsKKwkJCQkJNjQsIDY0LAorCQkJCQlkdS0+aG90c3BvdF94ICsgZHUtPmNvcmVfaG90c3BvdF94LAorCQkJCQlkdS0+aG90c3BvdF95ICsgZHUtPmNvcmVfaG90c3BvdF95KTsKIAl9CiAKIAltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaAppbmRleCA3ODJkZjdjLi5lZGQ4MTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaApAQCAtMTU5LDYgKzE1OSw4IEBACiAKIAlpbnQgaG90c3BvdF94OwogCWludCBob3RzcG90X3k7CisJczMyIGNvcmVfaG90c3BvdF94OworCXMzMiBjb3JlX2hvdHNwb3RfeTsKIAogCXVuc2lnbmVkIHVuaXQ7CiAKQEAgLTE5Myw4ICsxOTUsOSBAQAogdm9pZCB2bXdfZHVfY3J0Y19nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJICAgdTE2ICpyLCB1MTYgKmcsIHUxNiAqYiwKIAkJCSAgIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBzaXplKTsKLWludCB2bXdfZHVfY3J0Y19jdXJzb3Jfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpOworaW50IHZtd19kdV9jcnRjX2N1cnNvcl9zZXQyKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkgICAgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAorCQkJICAgIGludDMyX3QgaG90X3gsIGludDMyX3QgaG90X3kpOwogaW50IHZtd19kdV9jcnRjX2N1cnNvcl9tb3ZlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHgsIGludCB5KTsKIGludCB2bXdfZHVfY29ubmVjdG9yX2RwbXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IG1vZGUpOwogdm9pZCB2bXdfZHVfY29ubmVjdG9yX3NhdmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9sZHUuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2xkdS5jCmluZGV4IGJiNjNlNGQuLjUyY2FlY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2xkdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2xkdS5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfZnVuY3Mgdm13X2xlZ2FjeV9jcnRjX2Z1bmNzID0gewogCS5zYXZlID0gdm13X2R1X2NydGNfc2F2ZSwKIAkucmVzdG9yZSA9IHZtd19kdV9jcnRjX3Jlc3RvcmUsCi0JLmN1cnNvcl9zZXQgPSB2bXdfZHVfY3J0Y19jdXJzb3Jfc2V0LAorCS5jdXJzb3Jfc2V0MiA9IHZtd19kdV9jcnRjX2N1cnNvcl9zZXQyLAogCS5jdXJzb3JfbW92ZSA9IHZtd19kdV9jcnRjX2N1cnNvcl9tb3ZlLAogCS5nYW1tYV9zZXQgPSB2bXdfZHVfY3J0Y19nYW1tYV9zZXQsCiAJLmRlc3Ryb3kgPSB2bXdfbGR1X2NydGNfZGVzdHJveSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Njcm4uYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Njcm4uYwppbmRleCBiOTZkMWFiLi4xMzkyNmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zY3JuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc2Nybi5jCkBAIC01MzMsNyArNTMzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfZnVuY3Mgdm13X3NjcmVlbl9vYmplY3RfY3J0Y19mdW5jcyA9IHsKIAkuc2F2ZSA9IHZtd19kdV9jcnRjX3NhdmUsCiAJLnJlc3RvcmUgPSB2bXdfZHVfY3J0Y19yZXN0b3JlLAotCS5jdXJzb3Jfc2V0ID0gdm13X2R1X2NydGNfY3Vyc29yX3NldCwKKwkuY3Vyc29yX3NldDIgPSB2bXdfZHVfY3J0Y19jdXJzb3Jfc2V0MiwKIAkuY3Vyc29yX21vdmUgPSB2bXdfZHVfY3J0Y19jdXJzb3JfbW92ZSwKIAkuZ2FtbWFfc2V0ID0gdm13X2R1X2NydGNfZ2FtbWFfc2V0LAogCS5kZXN0cm95ID0gdm13X3NvdV9jcnRjX2Rlc3Ryb3ksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdGR1LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdGR1LmMKaW5kZXggYjFmYzFjMC4uZjgyM2ZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3RkdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N0ZHUuYwpAQCAtMTA0Myw3ICsxMDQzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfZnVuY3Mgdm13X3N0ZHVfY3J0Y19mdW5jcyA9IHsKIAkuc2F2ZSA9IHZtd19kdV9jcnRjX3NhdmUsCiAJLnJlc3RvcmUgPSB2bXdfZHVfY3J0Y19yZXN0b3JlLAotCS5jdXJzb3Jfc2V0ID0gdm13X2R1X2NydGNfY3Vyc29yX3NldCwKKwkuY3Vyc29yX3NldDIgPSB2bXdfZHVfY3J0Y19jdXJzb3Jfc2V0MiwKIAkuY3Vyc29yX21vdmUgPSB2bXdfZHVfY3J0Y19jdXJzb3JfbW92ZSwKIAkuZ2FtbWFfc2V0ID0gdm13X2R1X2NydGNfZ2FtbWFfc2V0LAogCS5kZXN0cm95ID0gdm13X3N0ZHVfY3J0Y19kZXN0cm95LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1jb21tb24uYyBiL2RyaXZlcnMvZ3B1L2lwdS12My9pcHUtY29tbW9uLmMKaW5kZXggYmE0N2IzMC4uZjJlMTNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1jb21tb24uYworKysgYi9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWNvbW1vbi5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9jaGFpbmVkX2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CiAKICNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgogCkBAIC05OTMsMTIgKzk5NCwyNiBAQAogc3RydWN0IGlwdV9wbGF0Zm9ybV9yZWcgewogCXN0cnVjdCBpcHVfY2xpZW50X3BsYXRmb3JtZGF0YSBwZGF0YTsKIAljb25zdCBjaGFyICpuYW1lOwotCWludCByZWdfb2Zmc2V0OwogfTsKIAorLyogVGhlc2UgbXVzdCBiZSBpbiB0aGUgb3JkZXIgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIHRyZWUgcG9ydCBub2RlcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpcHVfcGxhdGZvcm1fcmVnIGNsaWVudF9yZWdbXSA9IHsKIAl7CiAJCS5wZGF0YSA9IHsKKwkJCS5jc2kgPSAwLAorCQkJLmRtYVswXSA9IElQVVYzX0NIQU5ORUxfQ1NJMCwKKwkJCS5kbWFbMV0gPSAtRUlOVkFMLAorCQl9LAorCQkubmFtZSA9ICJpbXgtaXB1djMtY2FtZXJhIiwKKwl9LCB7CisJCS5wZGF0YSA9IHsKKwkJCS5jc2kgPSAxLAorCQkJLmRtYVswXSA9IElQVVYzX0NIQU5ORUxfQ1NJMSwKKwkJCS5kbWFbMV0gPSAtRUlOVkFMLAorCQl9LAorCQkubmFtZSA9ICJpbXgtaXB1djMtY2FtZXJhIiwKKwl9LCB7CisJCS5wZGF0YSA9IHsKIAkJCS5kaSA9IDAsCiAJCQkuZGMgPSA1LAogCQkJLmRwID0gSVBVX0RQX0ZMT1dfU1lOQ19CRywKQEAgLTEwMTUsMjIgKzEwMzAsNiBAQAogCQkJLmRtYVsxXSA9IC1FSU5WQUwsCiAJCX0sCiAJCS5uYW1lID0gImlteC1pcHV2My1jcnRjIiwKLQl9LCB7Ci0JCS5wZGF0YSA9IHsKLQkJCS5jc2kgPSAwLAotCQkJLmRtYVswXSA9IElQVVYzX0NIQU5ORUxfQ1NJMCwKLQkJCS5kbWFbMV0gPSAtRUlOVkFMLAotCQl9LAotCQkucmVnX29mZnNldCA9IElQVV9DTV9DU0kwX1JFR19PRlMsCi0JCS5uYW1lID0gImlteC1pcHV2My1jYW1lcmEiLAotCX0sIHsKLQkJLnBkYXRhID0gewotCQkJLmNzaSA9IDEsCi0JCQkuZG1hWzBdID0gSVBVVjNfQ0hBTk5FTF9DU0kxLAotCQkJLmRtYVsxXSA9IC1FSU5WQUwsCi0JCX0sCi0JCS5yZWdfb2Zmc2V0ID0gSVBVX0NNX0NTSTFfUkVHX09GUywKLQkJLm5hbWUgPSAiaW14LWlwdXYzLWNhbWVyYSIsCiAJfSwKIH07CiAKQEAgLTEwNTEsMjIgKzEwNTAsMzAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGllbnRfcmVnKTsgaSsrKSB7CiAJCWNvbnN0IHN0cnVjdCBpcHVfcGxhdGZvcm1fcmVnICpyZWcgPSAmY2xpZW50X3JlZ1tpXTsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQkJc3RydWN0IHJlc291cmNlIHJlczsKIAotCQlpZiAocmVnLT5yZWdfb2Zmc2V0KSB7Ci0JCQltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOwotCQkJcmVzLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07Ci0JCQlyZXMuc3RhcnQgPSBpcHVfYmFzZSArIGlwdS0+ZGV2dHlwZS0+Y21fb2ZzICsgcmVnLT5yZWdfb2Zmc2V0OwotCQkJcmVzLmVuZCA9IHJlcy5zdGFydCArIFBBR0VfU0laRSAtIDE7Ci0JCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKGRldiwgcmVnLT5uYW1lLAotCQkJCWlkKyssICZyZXMsIDEsICZyZWctPnBkYXRhLCBzaXplb2YocmVnLT5wZGF0YSkpOwotCQl9IGVsc2UgewotCQkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKGRldiwgcmVnLT5uYW1lLAotCQkJCWlkKyssICZyZWctPnBkYXRhLCBzaXplb2YocmVnLT5wZGF0YSkpOworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKHJlZy0+bmFtZSwgaWQrKyk7CisJCWlmICghcGRldikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCQl9CiAKLQkJaWYgKElTX0VSUihwZGV2KSkgewotCQkJcmV0ID0gUFRSX0VSUihwZGV2KTsKKwkJcGRldi0+ZGV2LnBhcmVudCA9IGRldjsKKworCQkvKiBBc3NvY2lhdGUgc3ViZGV2aWNlIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcG9ydCBub2RlICovCisJCXBkZXYtPmRldi5vZl9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQoZGV2LT5vZl9ub2RlLCBpKTsKKwkJaWYgKCFwZGV2LT5kZXYub2Zfbm9kZSkgeworCQkJZGV2X2VycihkZXYsICJtaXNzaW5nIHBvcnRAJWQgbm9kZSBpbiAlc1xuIiwgaSwKKwkJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBlcnJfcmVnaXN0ZXI7CisJCX0KKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgJnJlZy0+cGRhdGEsCisJCQkJCSAgICAgICBzaXplb2YocmVnLT5wZGF0YSkpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJCWlmIChyZXQpIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiAJCQlnb3RvIGVycl9yZWdpc3RlcjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwppbmRleCAzMTY2ZTRiLi45YWJjYWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCkBAIC0zOTUsOCArMzk1LDEwIEBACiAJCXNldF9jdXJyZW50X3N0YXRlKGludGVycnVwdGlibGUgPwogCQkJCSAgVEFTS19JTlRFUlJVUFRJQkxFIDoKIAkJCQkgIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyYyA9IC1FSU5UUjsKKwkJaWYgKGludGVycnVwdGlibGUgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZ2Z2Ffd2FpdF9xdWV1ZSwgJndhaXQpOworCQkJcmMgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQogCQlzY2hlZHVsZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCmluZGV4IGFjMWZlZWEuLjhiNzhhN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTMxNiwxMSArMzE2LDYgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9EV0FWX0VHQUxBWF9NVUxUSVRPVUNIX0EwMDEJMHhhMDAxCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FTEFOCQkweDA0ZjMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9FTEFOX1RPVUNIU0NSRUVOCTB4MDA4OQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0VMQU5fVE9VQ0hTQ1JFRU5fMDA5QgkweDAwOWIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9FTEFOX1RPVUNIU0NSRUVOXzAxMDMJMHgwMTAzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfRUxBTl9UT1VDSFNDUkVFTl8wMTBjCTB4MDEwYwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0VMQU5fVE9VQ0hTQ1JFRU5fMDE2RgkweDAxNmYKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VMRUNPTQkJMHgwNTZlCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRUxFQ09NX0JNMDg0CTB4MDA2MQpAQCAtNjA5LDYgKzYwNCw3IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9GSVJTVCAgMHhjMTEwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9MQVNUIDB4YzE0ZgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfUFMzIDB4MDMwNgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0tFWUJPQVJEX0c3MTBfUExVUyAweGMyNGQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT1VTRV9DMDFBCTB4YzAxYQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PVVNFX0MwNUEJMHhjMDVhCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9VU0VfQzA2QQkweGMwNmEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5jIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKaW5kZXggYzIwYWM3Ni4uYzY5MGZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKQEAgLTY2NSw4ICs2NjUsOSBAQAogCXN0cnVjdCBsZ19kcnZfZGF0YSAqZHJ2X2RhdGE7CiAJaW50IHJldDsKIAotCS8qIE9ubHkgd29yayB3aXRoIHRoZSAxc3QgaW50ZXJmYWNlIChHMjkgcHJlc2VudHMgbXVsdGlwbGUpICovCi0JaWYgKGlmYWNlX251bSAhPSAwKSB7CisJLyogRzI5IG9ubHkgd29yayB3aXRoIHRoZSAxc3QgaW50ZXJmYWNlICovCisJaWYgKChoZGV2LT5wcm9kdWN0ID09IFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRzI5X1dIRUVMKSAmJgorCSAgICAoaWZhY2VfbnVtICE9IDApKSB7CiAJCWRiZ19oaWQoIiVzOiBpZ25vcmluZyBpZm51bSAlZFxuIiwgX19mdW5jX18sIGlmYWNlX251bSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IDk0YmIxMzcuLjdkZDA5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtNzIsMTEgKzcyLDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfQ0hJQ09OWSwgVVNCX0RFVklDRV9JRF9DSElDT05ZX1BJWEFSVF9VU0JfT1BUSUNBTF9NT1VTRSwgSElEX1FVSVJLX0FMV0FZU19QT0xMIH0sCiAJeyBVU0JfVkVORE9SX0lEX0RNSSwgVVNCX0RFVklDRV9JRF9ETUlfRU5DLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfRFJBR09OUklTRSwgVVNCX0RFVklDRV9JRF9EUkFHT05SSVNFX1dJSVUsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9FTEFOLCBVU0JfREVWSUNFX0lEX0VMQU5fVE9VQ0hTQ1JFRU4sIEhJRF9RVUlSS19BTFdBWVNfUE9MTCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9FTEFOLCBVU0JfREVWSUNFX0lEX0VMQU5fVE9VQ0hTQ1JFRU5fMDA5QiwgSElEX1FVSVJLX0FMV0FZU19QT0xMIH0sCi0JeyBVU0JfVkVORE9SX0lEX0VMQU4sIFVTQl9ERVZJQ0VfSURfRUxBTl9UT1VDSFNDUkVFTl8wMTAzLCBISURfUVVJUktfQUxXQVlTX1BPTEwgfSwKLQl7IFVTQl9WRU5ET1JfSURfRUxBTiwgVVNCX0RFVklDRV9JRF9FTEFOX1RPVUNIU0NSRUVOXzAxMGMsIEhJRF9RVUlSS19BTFdBWVNfUE9MTCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9FTEFOLCBVU0JfREVWSUNFX0lEX0VMQU5fVE9VQ0hTQ1JFRU5fMDE2RiwgSElEX1FVSVJLX0FMV0FZU19QT0xMIH0sCisJeyBVU0JfVkVORE9SX0lEX0VMQU4sIEhJRF9BTllfSUQsIEhJRF9RVUlSS19BTFdBWVNfUE9MTCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9FTE8sIFVTQl9ERVZJQ0VfSURfRUxPX1RTMjcwMCwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0ZPUk1PU0EsIFVTQl9ERVZJQ0VfSURfRk9STU9TQV9JUl9SRUNFSVZFUiwgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUyB9LAogCXsgVVNCX1ZFTkRPUl9JRF9GUkVFU0NBTEUsIFVTQl9ERVZJQ0VfSURfRlJFRVNDQUxFX01YMjgsIEhJRF9RVUlSS19OT0dFVCB9LApAQCAtODQsNiArODAsNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9IUCwgVVNCX1BST0RVQ1RfSURfSFBfTE9HSVRFQ0hfT0VNX1VTQl9PUFRJQ0FMX01PVVNFXzBCNEEsIEhJRF9RVUlSS19BTFdBWVNfUE9MTCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9IUCwgVVNCX1BST0RVQ1RfSURfSFBfUElYQVJUX09FTV9VU0JfT1BUSUNBTF9NT1VTRSwgSElEX1FVSVJLX0FMV0FZU19QT0xMIH0sCiAJeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0MwNzcsIEhJRF9RVUlSS19BTFdBWVNfUE9MTCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9LRVlCT0FSRF9HNzEwX1BMVVMsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT1VTRV9DMDFBLCBISURfUVVJUktfQUxXQVlTX1BPTEwgfSwKIAl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9VU0VfQzA1QSwgSElEX1FVSVJLX0FMV0FZU19QT0xMIH0sCiAJeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PVVNFX0MwNkEsIEhJRF9RVUlSS19BTFdBWVNfUE9MTCB9LApAQCAtMzM5LDcgKzMzNiw4IEBACiAKIAlmb3IgKDsgaGlkX2JsYWNrbGlzdFtuXS5pZFZlbmRvcjsgbisrKQogCQlpZiAoaGlkX2JsYWNrbGlzdFtuXS5pZFZlbmRvciA9PSBpZFZlbmRvciAmJgotCQkJCWhpZF9ibGFja2xpc3Rbbl0uaWRQcm9kdWN0ID09IGlkUHJvZHVjdCkKKwkJCShoaWRfYmxhY2tsaXN0W25dLmlkUHJvZHVjdCA9PSAoX191MTYpIEhJRF9BTllfSUQgfHwKKwkJCQloaWRfYmxhY2tsaXN0W25dLmlkUHJvZHVjdCA9PSBpZFByb2R1Y3QpKQogCQkJYmxfZW50cnkgPSAmaGlkX2JsYWNrbGlzdFtuXTsKIAogCWlmIChibF9lbnRyeSAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvd2Fjb21fd2FjLmMgYi9kcml2ZXJzL2hpZC93YWNvbV93YWMuYwppbmRleCA4YjI5OTQ5Li4wMWE0ZjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC93YWNvbV93YWMuYworKysgYi9kcml2ZXJzL2hpZC93YWNvbV93YWMuYwpAQCAtMjQ4MSw3ICsyNDgxLDcgQEAKIAkJaWYgKGZlYXR1cmVzLT5wa3RsZW4gPT0gV0FDT01fUEtHTEVOX0JCVE9VQ0gzKSB7CiAJCQlpZiAoZmVhdHVyZXMtPnRvdWNoX21heCkKIAkJCQlmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgfD0gV0FDT01fREVWSUNFVFlQRV9UT1VDSDsKLQkJCWlmIChmZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1NIVCB8fCBmZWF0dXJlcy0+dHlwZSA8PSBCQU1CT09fUFQpCisJCQlpZiAoZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TSFQgJiYgZmVhdHVyZXMtPnR5cGUgPD0gQkFNQk9PX1BUKQogCQkJCWZlYXR1cmVzLT5kZXZpY2VfdHlwZSB8PSBXQUNPTV9ERVZJQ0VUWVBFX1BBRDsKIAogCQkJZmVhdHVyZXMtPnhfbWF4ID0gNDA5NjsKQEAgLTMyMTMsNyArMzIxMyw4IEBACiAJICBXQUNPTV9EVFVfT0ZGU0VULCBXQUNPTV9EVFVfT0ZGU0VUIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzM2ID0KIAl7ICJXYWNvbSBEVFUxMTQxIiwgMjM0NzIsIDEzMjAzLCAxMDIzLCAwLAotCSAgRFRVUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUywgNCB9OworCSAgRFRVUywgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUywgNCwKKwkgIFdBQ09NX0RUVV9PRkZTRVQsIFdBQ09NX0RUVV9PRkZTRVQgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHg1NyA9CiAJeyAiV2Fjb20gRFRLMjI0MSIsIDk1NjQwLCA1NDA2MCwgMjA0NywgNjMsCiAJICBEVEssIFdBQ09NX0lOVFVPUzNfUkVTLCBXQUNPTV9JTlRVT1MzX1JFUywgNiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCA4NDJiMDA0Li44MGE3M2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC0zMjQsNiArMzI0LDcgQEAKIGNvbmZpZyBTRU5TT1JTX0FSTV9TQ1BJCiAJdHJpc3RhdGUgIkFSTSBTQ1BJIFNlbnNvcnMiCiAJZGVwZW5kcyBvbiBBUk1fU0NQSV9QUk9UT0NPTAorCWRlcGVuZHMgb24gVEhFUk1BTCB8fCAhVEhFUk1BTF9PRgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRlbXBlcmF0dXJlLCB2b2x0YWdlLCBjdXJyZW50CiAJICBhbmQgcG93ZXIgc2Vuc29ycyBhdmFpbGFibGUgb24gQVJNIEx0ZCdzIFNDUCBiYXNlZCBwbGF0Zm9ybXMuIFRoZQpAQCAtMTIxNiw2ICsxMjE3LDcgQEAKIGNvbmZpZyBTRU5TT1JTX1NIVDE1CiAJdHJpc3RhdGUgIlNlbnNpcm9uIGh1bWlkaXR5IGFuZCB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBTSFQxNSBhbmQgY29tcGF0LiIKIAlkZXBlbmRzIG9uIEdQSU9MSUIgfHwgQ09NUElMRV9URVNUCisJc2VsZWN0IEJJVFJFVkVSU0UKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFNlbnNpcm9uIFNIVDEwLCBTSFQxMSwKIAkgIFNIVDE1LCBTSFQ3MSwgU0hUNzUgaHVtaWRpdHkgYW5kIHRlbXBlcmF0dXJlIHNlbnNvcnMuCkBAIC0xNDcxLDYgKzE0NzMsNyBAQAogY29uZmlnIFNFTlNPUlNfSU5BMlhYCiAJdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIElOQTIxOSBhbmQgY29tcGF0aWJsZXMiCiAJZGVwZW5kcyBvbiBJMkMKKwlzZWxlY3QgUkVHTUFQX0kyQwogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBJTkEyMTksIElOQTIyMCwgSU5BMjI2LAogCSAgSU5BMjMwLCBhbmQgSU5BMjMxIHBvd2VyIG1vbml0b3IgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKaW5kZXggMWY1ZTk1Ni4uMGFmN2ZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwpAQCAtNTM3LDcgKzUzNyw3IEBACiBzdGF0aWMgaW50IGFwcGxlc21jX2luaXRfc21jcmVnX3RyeSh2b2lkKQogewogCXN0cnVjdCBhcHBsZXNtY19yZWdpc3RlcnMgKnMgPSAmc21jcmVnOwotCWJvb2wgbGVmdF9saWdodF9zZW5zb3IsIHJpZ2h0X2xpZ2h0X3NlbnNvcjsKKwlib29sIGxlZnRfbGlnaHRfc2Vuc29yID0gMCwgcmlnaHRfbGlnaHRfc2Vuc29yID0gMDsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAJdTggdG1wWzFdOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3NjcGktaHdtb24uYyBiL2RyaXZlcnMvaHdtb24vc2NwaS1od21vbi5jCmluZGV4IDJjMTI0MWIuLjdlMjA1NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc2NwaS1od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vc2NwaS1od21vbi5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlzdHJ1Y3Qgc2NwaV9vcHMgKnNjcGlfb3BzOwogCXN0cnVjdCBkZXZpY2UgKmh3ZGV2LCAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3Qgc2NwaV9zZW5zb3JzICpzY3BpX3NlbnNvcnM7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpZHg7CiAKIAlzY3BpX29wcyA9IGdldF9zY3BpX29wcygpOwogCWlmICghc2NwaV9vcHMpCkBAIC0xNDYsOCArMTQ2LDggQEAKIAogCXNjcGlfc2Vuc29ycy0+c2NwaV9vcHMgPSBzY3BpX29wczsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9zZW5zb3JzOyBpKyspIHsKLQkJc3RydWN0IHNlbnNvcl9kYXRhICpzZW5zb3IgPSAmc2NwaV9zZW5zb3JzLT5kYXRhW2ldOworCWZvciAoaSA9IDAsIGlkeCA9IDA7IGkgPCBucl9zZW5zb3JzOyBpKyspIHsKKwkJc3RydWN0IHNlbnNvcl9kYXRhICpzZW5zb3IgPSAmc2NwaV9zZW5zb3JzLT5kYXRhW2lkeF07CiAKIAkJcmV0ID0gc2NwaV9vcHMtPnNlbnNvcl9nZXRfaW5mbyhpLCAmc2Vuc29yLT5pbmZvKTsKIAkJaWYgKHJldCkKQEAgLTE4Myw3ICsxODMsNyBAQAogCQkJbnVtX3Bvd2VyKys7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWJyZWFrOworCQkJY29udGludWU7CiAJCX0KIAogCQlzZW5zb3ItPmRldl9hdHRyX2lucHV0LmF0dHIubW9kZSA9IFNfSVJVR087CkBAIC0xOTQsMTEgKzE5NCwxMiBAQAogCQlzZW5zb3ItPmRldl9hdHRyX2xhYmVsLnNob3cgPSBzY3BpX3Nob3dfbGFiZWw7CiAJCXNlbnNvci0+ZGV2X2F0dHJfbGFiZWwuYXR0ci5uYW1lID0gc2Vuc29yLT5sYWJlbDsKIAotCQlzY3BpX3NlbnNvcnMtPmF0dHJzW2kgPDwgMV0gPSAmc2Vuc29yLT5kZXZfYXR0cl9pbnB1dC5hdHRyOwotCQlzY3BpX3NlbnNvcnMtPmF0dHJzWyhpIDw8IDEpICsgMV0gPSAmc2Vuc29yLT5kZXZfYXR0cl9sYWJlbC5hdHRyOworCQlzY3BpX3NlbnNvcnMtPmF0dHJzW2lkeCA8PCAxXSA9ICZzZW5zb3ItPmRldl9hdHRyX2lucHV0LmF0dHI7CisJCXNjcGlfc2Vuc29ycy0+YXR0cnNbKGlkeCA8PCAxKSArIDFdID0gJnNlbnNvci0+ZGV2X2F0dHJfbGFiZWwuYXR0cjsKIAotCQlzeXNmc19hdHRyX2luaXQoc2NwaV9zZW5zb3JzLT5hdHRyc1tpIDw8IDFdKTsKLQkJc3lzZnNfYXR0cl9pbml0KHNjcGlfc2Vuc29ycy0+YXR0cnNbKGkgPDwgMSkgKyAxXSk7CisJCXN5c2ZzX2F0dHJfaW5pdChzY3BpX3NlbnNvcnMtPmF0dHJzW2lkeCA8PCAxXSk7CisJCXN5c2ZzX2F0dHJfaW5pdChzY3BpX3NlbnNvcnMtPmF0dHJzWyhpZHggPDwgMSkgKyAxXSk7CisJCWlkeCsrOwogCX0KIAogCXNjcGlfc2Vuc29ycy0+Z3JvdXAuYXR0cnMgPSBzY3BpX3NlbnNvcnMtPmF0dHJzOwpAQCAtMjM2LDggKzIzNyw4IEBACiAKIAkJem9uZS0+c2Vuc29yX2lkID0gaTsKIAkJem9uZS0+c2NwaV9zZW5zb3JzID0gc2NwaV9zZW5zb3JzOwotCQl6b25lLT50emQgPSB0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyKGRldiwgaSwgem9uZSwKLQkJCQkJCQkgICAgJnNjcGlfc2Vuc29yX29wcyk7CisJCXpvbmUtPnR6ZCA9IHRoZXJtYWxfem9uZV9vZl9zZW5zb3JfcmVnaXN0ZXIoZGV2LAorCQkJCXNlbnNvci0+aW5mby5zZW5zb3JfaWQsIHpvbmUsICZzY3BpX3NlbnNvcl9vcHMpOwogCQkvKgogCQkgKiBUaGUgY2FsbCB0byB0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyIHJldHVybnMKIAkJICogYW4gZXJyb3IgZm9yIHNlbnNvcnMgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi90bXAxMDIuYyBiL2RyaXZlcnMvaHdtb24vdG1wMTAyLmMKaW5kZXggNjU0ODI2Mi4uNTI4OWFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi90bXAxMDIuYworKysgYi9kcml2ZXJzL2h3bW9uL3RtcDEwMi5jCkBAIC01OCw2ICs1OCw3IEBACiAJdTE2IGNvbmZpZ19vcmlnOwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGU7CiAJaW50IHRlbXBbM107CisJYm9vbCBmaXJzdF90aW1lOwogfTsKIAogLyogY29udmVydCBsZWZ0IGFkanVzdGVkIDEzLWJpdCBUTVAxMDIgcmVnaXN0ZXIgdmFsdWUgdG8gbWlsbGlDZWxzaXVzICovCkBAIC05Myw2ICs5NCw3IEBACiAJCQkJdG1wMTAyLT50ZW1wW2ldID0gdG1wMTAyX3JlZ190b19tQyhzdGF0dXMpOwogCQl9CiAJCXRtcDEwMi0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOworCQl0bXAxMDItPmZpcnN0X3RpbWUgPSBmYWxzZTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0bXAxMDItPmxvY2spOwogCXJldHVybiB0bXAxMDI7CkBAIC0xMDIsNiArMTA0LDEyIEBACiB7CiAJc3RydWN0IHRtcDEwMiAqdG1wMTAyID0gdG1wMTAyX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAorCS8qIElzIGl0IHRvbyBlYXJseSBldmVuIHRvIHJldHVybiBhIGNvbnZlcnNpb24/ICovCisJaWYgKHRtcDEwMi0+Zmlyc3RfdGltZSkgeworCQlkZXZfZGJnKGRldiwgIiVzOiBDb252ZXJzaW9uIG5vdCByZWFkeSB5ZXQuLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKIAkqdGVtcCA9IHRtcDEwMi0+dGVtcFswXTsKIAogCXJldHVybiAwOwpAQCAtMTE0LDYgKzEyMiwxMCBAQAogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2RhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwogCXN0cnVjdCB0bXAxMDIgKnRtcDEwMiA9IHRtcDEwMl91cGRhdGVfZGV2aWNlKGRldik7CiAKKwkvKiBJcyBpdCB0b28gZWFybHkgZXZlbiB0byByZXR1cm4gYSByZWFkPyAqLworCWlmICh0bXAxMDItPmZpcnN0X3RpbWUpCisJCXJldHVybiAtRUFHQUlOOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRtcDEwMi0+dGVtcFtzZGEtPmluZGV4XSk7CiB9CiAKQEAgLTIwNyw3ICsyMTksOSBAQAogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGZhaWxfcmVzdG9yZV9jb25maWc7CiAJfQotCXRtcDEwMi0+bGFzdF91cGRhdGUgPSBqaWZmaWVzIC0gSFo7CisJdG1wMTAyLT5sYXN0X3VwZGF0ZSA9IGppZmZpZXM7CisJLyogTWFyayB0aGF0IHdlIGFyZSBub3QgcmVhZHkgd2l0aCBkYXRhIHVudGlsIGNvbnZlcnNpb24gaXMgY29tcGxldGUgKi8KKwl0bXAxMDItPmZpcnN0X3RpbWUgPSB0cnVlOwogCW11dGV4X2luaXQoJnRtcDEwMi0+bG9jayk7CiAKIAlod21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoZGV2LCBjbGllbnQtPm5hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IGUyNGMyYjYuLjdiMGFhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0xMjYsNiArMTI2LDcgQEAKIAkgICAgU3VucmlzZSBQb2ludC1MUCAoUENIKQogCSAgICBETlYgKFNPQykKIAkgICAgQnJveHRvbiAoU09DKQorCSAgICBMZXdpc2J1cmcgKFBDSCkKIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLWk4MDEuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCmluZGV4IGM1NjI4YTQuLmE4YmRjYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCkBAIC0yMDIsOCArMjAyLDE1IEBACiAJICogZCBpcyBhbHdheXMgNiBvbiBLZXlzdG9uZSBJMkMgY29udHJvbGxlcgogCSAqLwogCi0JLyogZ2V0IG1pbmltdW0gb2YgNyBNSHogY2xvY2ssIGJ1dCBtYXggb2YgMTIgTUh6ICovCi0JcHNjID0gKGlucHV0X2Nsb2NrIC8gNzAwMDAwMCkgLSAxOworCS8qCisJICogQm90aCBEYXZpbmNpIGFuZCBjdXJyZW50IEtleXN0b25lIFVzZXIgR3VpZGVzIHJlY29tbWVuZCBhIHZhbHVlCisJICogYmV0d2VlbiA3TUh6IGFuZCAxMk1Iei4gSW4gcmVhbGl0eSA3TUh6IG1vZHVsZSBjbG9jayBkb2Vzbid0CisJICogYWx3YXlzIHByb2R1Y2UgZW5vdWdoIG1hcmdpbiBiZXR3ZWVuIFNEQSBhbmQgU0NMIHRyYW5zaXRpb25zLgorCSAqIE1lYXN1cmVtZW50cyBzaG93IHRoYXQgdGhlIGhpZ2hlciB0aGUgbW9kdWxlIGNsb2NrIGlzLCB0aGUKKwkgKiBiaWdnZXIgaXMgdGhlIG1hcmdpbiwgcHJvdmlkaW5nIG1vcmUgcmVsaWFibGUgY29tbXVuaWNhdGlvbi4KKwkgKiBTbyB3ZSBiZXR0ZXIgdGFyZ2V0IGZvciAxMk1Iei4KKwkgKi8KKwlwc2MgPSAoaW5wdXRfY2xvY2sgLyAxMjAwMDAwMCkgLSAxOwogCWlmICgoaW5wdXRfY2xvY2sgLyAocHNjICsgMSkpID4gMTIwMDAwMDApCiAJCXBzYysrOwkvKiBiZXR0ZXIgdG8gcnVuIHVuZGVyIHNwZWMgdGhhbiBvdmVyICovCiAJZCA9IChwc2MgPj0gMikgPyA1IDogNyAtIHBzYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1jb3JlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtY29yZS5jCmluZGV4IDhjNDhiMjcuLmRlN2ZiYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1jb3JlLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLWNvcmUuYwpAQCAtODEzLDYgKzgxMywxMiBAQAogdHhfYWJvcnRlZDoKIAlpZiAoKHN0YXQgJiAoRFdfSUNfSU5UUl9UWF9BQlJUIHwgRFdfSUNfSU5UUl9TVE9QX0RFVCkpIHx8IGRldi0+bXNnX2VycikKIAkJY29tcGxldGUoJmRldi0+Y21kX2NvbXBsZXRlKTsKKwllbHNlIGlmICh1bmxpa2VseShkZXYtPmFjY2Vzc29yX2ZsYWdzICYgQUNDRVNTX0lOVFJfTUFTSykpIHsKKwkJLyogd29ya2Fyb3VuZCB0byB0cmlnZ2VyIHBlbmRpbmcgaW50ZXJydXB0ICovCisJCXN0YXQgPSBkd19yZWFkbChkZXYsIERXX0lDX0lOVFJfTUFTSyk7CisJCWkyY19kd19kaXNhYmxlX2ludChkZXYpOworCQlkd193cml0ZWwoZGV2LCBzdGF0LCBEV19JQ19JTlRSX01BU0spOworCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1jb3JlLmggYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtY29yZS5oCmluZGV4IDFkNTA4OTguLjlmZmI2M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS1jb3JlLmgKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLWNvcmUuaApAQCAtMTExLDYgKzExMSw3IEBACiAKICNkZWZpbmUgQUNDRVNTX1NXQVAJCTB4MDAwMDAwMDEKICNkZWZpbmUgQUNDRVNTXzE2QklUCQkweDAwMDAwMDAyCisjZGVmaW5lIEFDQ0VTU19JTlRSX01BU0sJMHgwMDAwMDAwNAogCiBleHRlcm4gaW50IGkyY19kd19pbml0KHN0cnVjdCBkd19pMmNfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgaTJjX2R3X2Rpc2FibGUoc3RydWN0IGR3X2kyY19kZXYgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtcGxhdGRydi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLXBsYXRkcnYuYwppbmRleCA4MDk1NzllLi42YjAwMDYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLXBsYXRkcnYuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUtcGxhdGRydi5jCkBAIC05Myw2ICs5Myw3IEBACiBzdGF0aWMgaW50IGR3X2kyY19hY3BpX2NvbmZpZ3VyZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkd19pMmNfZGV2ICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwljb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmlkOwogCiAJZGV2LT5hZGFwdGVyLm5yID0gLTE7CiAJZGV2LT50eF9maWZvX2RlcHRoID0gMzI7CkBAIC0xMDYsNiArMTA3LDEwIEBACiAJZHdfaTJjX2FjcGlfcGFyYW1zKHBkZXYsICJGTUNOIiwgJmRldi0+ZnNfaGNudCwgJmRldi0+ZnNfbGNudCwKIAkJCSAgICZkZXYtPnNkYV9ob2xkX3RpbWUpOwogCisJaWQgPSBhY3BpX21hdGNoX2RldmljZShwZGV2LT5kZXYuZHJpdmVyLT5hY3BpX21hdGNoX3RhYmxlLCAmcGRldi0+ZGV2KTsKKwlpZiAoaWQgJiYgaWQtPmRyaXZlcl9kYXRhKQorCQlkZXYtPmFjY2Vzc29yX2ZsYWdzIHw9ICh1MzIpaWQtPmRyaXZlcl9kYXRhOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNiw3ICsxMjEsNyBAQAogCXsgIklOVDM0MzMiLCAwIH0sCiAJeyAiODA4NjBGNDEiLCAwIH0sCiAJeyAiODA4NjIyQzEiLCAwIH0sCi0JeyAiQU1EMDAxMCIsIDAgfSwKKwl7ICJBTUQwMDEwIiwgQUNDRVNTX0lOVFJfTUFTSyB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgZHdfaTJjX2FjcGlfbWF0Y2gpOwpAQCAtMjQwLDEyICsyNDUsMTAgQEAKIAl9CiAKIAlyID0gaTJjX2R3X3Byb2JlKGRldik7Ci0JaWYgKHIpIHsKKwlpZiAociAmJiAhZGV2LT5wbV9ydW50aW1lX2Rpc2FibGVkKQogCQlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Ci0JCXJldHVybiByOwotCX0KIAotCXJldHVybiAwOworCXJldHVybiByOwogfQogCiBzdGF0aWMgaW50IGR3X2kyY19wbGF0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMjYwLDcgKzI2Myw4IEBACiAKIAlwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKCZwZGV2LT5kZXYpOwogCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7Ci0JcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCWlmICghZGV2LT5wbV9ydW50aW1lX2Rpc2FibGVkKQorCQlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggYzMwNjc1MS4uZjYyZDY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTYyLDYgKzYyLDggQEAKICAqIFN1bnJpc2UgUG9pbnQtTFAgKFBDSCkJMHg5ZDIzCTMyCWhhcmQJeWVzCXllcwl5ZXMKICAqIEROViAoU09DKQkJCTB4MTlkZgkzMgloYXJkCXllcwl5ZXMJeWVzCiAgKiBCcm94dG9uIChTT0MpCQkweDVhZDQJMzIJaGFyZAl5ZXMJeWVzCXllcworICogTGV3aXNidXJnIChQQ0gpCQkweGExYTMJMzIJaGFyZAl5ZXMJeWVzCXllcworICogTGV3aXNidXJnIFN1cGVyc2t1IChQQ0gpCTB4YTIyMwkzMgloYXJkCXllcwl5ZXMJeWVzCiAgKgogICogRmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyOgogICogU29mdHdhcmUgUEVDCQkJCW5vCkBAIC0yMDYsNiArMjA4LDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9TVU5SSVNFUE9JTlRfTFBfU01CVVMJMHg5ZDIzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRE5WX1NNQlVTCQkJMHgxOWRmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQlJPWFRPTl9TTUJVUwkJMHg1YWQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfTEVXSVNCVVJHX1NNQlVTCQkweGExYTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9MRVdJU0JVUkdfU1NLVV9TTUJVUwkweGEyMjMKIAogc3RydWN0IGk4MDFfbXV4X2NvbmZpZyB7CiAJY2hhciAqZ3Bpb19jaGlwOwpAQCAtODY5LDYgKzg3Myw4IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfU1VOUklTRVBPSU5UX0xQX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0ROVl9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9CUk9YVE9OX1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0xFV0lTQlVSR19TTUJVUykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9MRVdJU0JVUkdfU1NLVV9TTUJVUykgfSwKIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCmluZGV4IDFlNGQ5OWQuLmQ0ZDg1MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9pMmMtaW14Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTExMTgsNiArMTExOSw4IEBACiAJCQlpMmNfaW14LCBJTVhfSTJDX0kyQ1IpOwogCWlteF9pMmNfd3JpdGVfcmVnKGkyY19pbXgtPmh3ZGF0YS0+aTJzcl9jbHJfb3Bjb2RlLCBpMmNfaW14LCBJTVhfSTJDX0kyU1IpOwogCisJaTJjX2lteF9pbml0X3JlY292ZXJ5X2luZm8oaTJjX2lteCwgcGRldik7CisKIAkvKiBBZGQgSTJDIGFkYXB0ZXIgKi8KIAlyZXQgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoJmkyY19pbXgtPmFkYXB0ZXIpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xMTI1LDggKzExMjgsNiBAQAogCQlnb3RvIGNsa19kaXNhYmxlOwogCX0KIAotCWkyY19pbXhfaW5pdF9yZWNvdmVyeV9pbmZvKGkyY19pbXgsIHBkZXYpOwotCiAJLyogU2V0IHVwIHBsYXRmb3JtIGRyaXZlciBkYXRhICovCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjX2lteCk7CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkyY19pbXgtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCmluZGV4IDU4MDEyMjcuLjQzMjA3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCkBAIC0xNDYsNiArMTQ2LDggQEAKIAlib29sCQkJZXJyYXRhX2RlbGF5OwogCXN0cnVjdCByZXNldF9jb250cm9sCSpyc3RjOwogCWJvb2wJCQlpcnFfY2xlYXJfaW52ZXJ0ZWQ7CisJLyogQ2xrIGRpdiBpcyAyIHRvIHRoZSBwb3dlciBuLCBub3QgMiB0byB0aGUgcG93ZXIgbiArIDEgKi8KKwlib29sCQkJY2xrX25fYmFzZV8wOwogfTsKIAogc3RhdGljIHN0cnVjdCBtdjY0eHh4X2kyY19yZWdzIG12NjR4eHhfaTJjX3JlZ3NfbXY2NHh4eCA9IHsKQEAgLTc1NywyNSArNzU5LDI5IEBACiAjaWZkZWYgQ09ORklHX09GCiAjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiBzdGF0aWMgaW50Ci1tdjY0eHh4X2NhbGNfZnJlcShjb25zdCBpbnQgdGNsaywgY29uc3QgaW50IG4sIGNvbnN0IGludCBtKQorbXY2NHh4eF9jYWxjX2ZyZXEoc3RydWN0IG12NjR4eHhfaTJjX2RhdGEgKmRydl9kYXRhLAorCQkgIGNvbnN0IGludCB0Y2xrLCBjb25zdCBpbnQgbiwgY29uc3QgaW50IG0pCiB7Ci0JcmV0dXJuIHRjbGsgLyAoMTAgKiAobSArIDEpICogKDIgPDwgbikpOworCWlmIChkcnZfZGF0YS0+Y2xrX25fYmFzZV8wKQorCQlyZXR1cm4gdGNsayAvICgxMCAqIChtICsgMSkgKiAoMSA8PCBuKSk7CisJZWxzZQorCQlyZXR1cm4gdGNsayAvICgxMCAqIChtICsgMSkgKiAoMiA8PCBuKSk7CiB9CiAKIHN0YXRpYyBib29sCi1tdjY0eHh4X2ZpbmRfYmF1ZF9mYWN0b3JzKGNvbnN0IHUzMiByZXFfZnJlcSwgY29uc3QgdTMyIHRjbGssIHUzMiAqYmVzdF9uLAotCQkJICB1MzIgKmJlc3RfbSkKK212NjR4eHhfZmluZF9iYXVkX2ZhY3RvcnMoc3RydWN0IG12NjR4eHhfaTJjX2RhdGEgKmRydl9kYXRhLAorCQkJICBjb25zdCB1MzIgcmVxX2ZyZXEsIGNvbnN0IHUzMiB0Y2xrKQogewogCWludCBmcmVxLCBkZWx0YSwgYmVzdF9kZWx0YSA9IElOVF9NQVg7CiAJaW50IG0sIG47CiAKIAlmb3IgKG4gPSAwOyBuIDw9IDc7IG4rKykKIAkJZm9yIChtID0gMDsgbSA8PSAxNTsgbSsrKSB7Ci0JCQlmcmVxID0gbXY2NHh4eF9jYWxjX2ZyZXEodGNsaywgbiwgbSk7CisJCQlmcmVxID0gbXY2NHh4eF9jYWxjX2ZyZXEoZHJ2X2RhdGEsIHRjbGssIG4sIG0pOwogCQkJZGVsdGEgPSByZXFfZnJlcSAtIGZyZXE7CiAJCQlpZiAoZGVsdGEgPj0gMCAmJiBkZWx0YSA8IGJlc3RfZGVsdGEpIHsKLQkJCQkqYmVzdF9tID0gbTsKLQkJCQkqYmVzdF9uID0gbjsKKwkJCQlkcnZfZGF0YS0+ZnJlcV9tID0gbTsKKwkJCQlkcnZfZGF0YS0+ZnJlcV9uID0gbjsKIAkJCQliZXN0X2RlbHRhID0gZGVsdGE7CiAJCQl9CiAJCQlpZiAoYmVzdF9kZWx0YSA9PSAwKQpAQCAtODEzLDggKzgxOSwxMSBAQAogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNsb2NrLWZyZXF1ZW5jeSIsICZidXNfZnJlcSkpCiAJCWJ1c19mcmVxID0gMTAwMDAwOyAvKiAxMDBrSHogYnkgZGVmYXVsdCAqLwogCi0JaWYgKCFtdjY0eHh4X2ZpbmRfYmF1ZF9mYWN0b3JzKGJ1c19mcmVxLCB0Y2xrLAotCQkJCSAgICAgICAmZHJ2X2RhdGEtPmZyZXFfbiwgJmRydl9kYXRhLT5mcmVxX20pKSB7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYWxsd2lubmVyLHN1bjRpLWExMC1pMmMiKSB8fAorCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImFsbHdpbm5lcixzdW42aS1hMzEtaTJjIikpCisJCWRydl9kYXRhLT5jbGtfbl9iYXNlXzAgPSB0cnVlOworCisJaWYgKCFtdjY0eHh4X2ZpbmRfYmF1ZF9mYWN0b3JzKGRydl9kYXRhLCBidXNfZnJlcSwgdGNsaykpIHsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXJjYXIuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcmNhci5jCmluZGV4IGIwYWU1NjAuLjU5OWMwZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcmNhci5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcmNhci5jCkBAIC01NzYsNyArNTc2LDcgQEAKIAlpZiAoc2xhdmUtPmZsYWdzICYgSTJDX0NMSUVOVF9URU4pCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCi0JcG1fcnVudGltZV9mb3JiaWQocmNhcl9pMmNfcHJpdl90b19kZXYocHJpdikpOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocmNhcl9pMmNfcHJpdl90b19kZXYocHJpdikpOwogCiAJcHJpdi0+c2xhdmUgPSBzbGF2ZTsKIAlyY2FyX2kyY193cml0ZShwcml2LCBJQ1NBUiwgc2xhdmUtPmFkZHIpOwpAQCAtNTk4LDcgKzU5OCw3IEBACiAKIAlwcml2LT5zbGF2ZSA9IE5VTEw7CiAKLQlwbV9ydW50aW1lX2FsbG93KHJjYXJfaTJjX3ByaXZfdG9fZGV2KHByaXYpKTsKKwlwbV9ydW50aW1lX3B1dChyY2FyX2kyY19wcml2X3RvX2Rldihwcml2KSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcmszeC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1yazN4LmMKaW5kZXggYzE5MzVlYi4uOTA5NmQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1yazN4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1yazN4LmMKQEAgLTkwOCw3ICs5MDgsNyBAQAogCQkJCSAmaTJjLT5zY2xfZmFsbF9ucykpCiAJCWkyYy0+c2NsX2ZhbGxfbnMgPSAzMDA7CiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAiaTJjLXNkYS1mYWxsaW5nLXRpbWUtbnMiLAotCQkJCSAmaTJjLT5zY2xfZmFsbF9ucykpCisJCQkJICZpMmMtPnNkYV9mYWxsX25zKSkKIAkJaTJjLT5zZGFfZmFsbF9ucyA9IGkyYy0+c2NsX2ZhbGxfbnM7CiAKIAlzdHJsY3B5KGkyYy0+YWRhcC5uYW1lLCAicmszeC1pMmMiLCBzaXplb2YoaTJjLT5hZGFwLm5hbWUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3QuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3QuYwppbmRleCBlYTcyZGNhLi4yNTAyMGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXN0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdC5jCkBAIC04MjIsNyArODIyLDcgQEAKIAogCWFkYXAgPSAmaTJjX2Rldi0+YWRhcDsKIAlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsIGkyY19kZXYpOwotCXNucHJpbnRmKGFkYXAtPm5hbWUsIHNpemVvZihhZGFwLT5uYW1lKSwgIlNUIEkyQygweCVwYSkiLCAmcmVzLT5zdGFydCk7CisJc25wcmludGYoYWRhcC0+bmFtZSwgc2l6ZW9mKGFkYXAtPm5hbWUpLCAiU1QgSTJDKCVwYSkiLCAmcmVzLT5zdGFydCk7CiAJYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlhZGFwLT50aW1lb3V0ID0gMiAqIEhaOwogCWFkYXAtPnJldHJpZXMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14aWljLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhpaWMuYwppbmRleCBlMjNhN2IwLi4wYjIwNDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhpaWMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhpaWMuYwpAQCAtNjYyLDggKzY2MiwxMCBAQAogCiBzdGF0aWMgdm9pZCB4aWljX3N0YXJ0X3hmZXIoc3RydWN0IHhpaWNfaTJjICppMmMpCiB7Ci0KKwlzcGluX2xvY2soJmkyYy0+bG9jayk7CisJeGlpY19yZWluaXQoaTJjKTsKIAlfX3hpaWNfc3RhcnRfeGZlcihpMmMpOworCXNwaW5fdW5sb2NrKCZpMmMtPmxvY2spOwogfQogCiBzdGF0aWMgaW50IHhpaWNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggMDQwYWY1Yy4uYmE4ZWIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC03MTUsNyArNzE1LDcgQEAKIAkJaWYgKHdha2VpcnEgPiAwICYmIHdha2VpcnEgIT0gY2xpZW50LT5pcnEpCiAJCQlzdGF0dXMgPSBkZXZfcG1fc2V0X2RlZGljYXRlZF93YWtlX2lycShkZXYsIHdha2VpcnEpOwogCQllbHNlIGlmIChjbGllbnQtPmlycSA+IDApCi0JCQlzdGF0dXMgPSBkZXZfcG1fc2V0X3dha2VfaXJxKGRldiwgd2FrZWlycSk7CisJCQlzdGF0dXMgPSBkZXZfcG1fc2V0X3dha2VfaXJxKGRldiwgY2xpZW50LT5pcnEpOwogCQllbHNlCiAJCQlzdGF0dXMgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvYWQ3NzkzLmMgYi9kcml2ZXJzL2lpby9hZGMvYWQ3NzkzLmMKaW5kZXggZWVhMGM3OS4uNGQ5NjBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL2FkNzc5My5jCisrKyBiL2RyaXZlcnMvaWlvL2FkYy9hZDc3OTMuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAjZGVmaW5lIEFENzc5NV9DSF9BSU4xTV9BSU4xTQk4IC8qIEFJTjEoLSkgLSBBSU4xKC0pICovCiAKIC8qIElEIFJlZ2lzdGVyIEJpdCBEZXNpZ25hdGlvbnMgKEFENzc5M19SRUdfSUQpICovCi0jZGVmaW5lIEFENzc4NV9JRAkJMHhCCisjZGVmaW5lIEFENzc4NV9JRAkJMHgzCiAjZGVmaW5lIEFENzc5Ml9JRAkJMHhBCiAjZGVmaW5lIEFENzc5M19JRAkJMHhCCiAjZGVmaW5lIEFENzc5NF9JRAkJMHhGCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvcWNvbS1zcG1pLXZhZGMuYyBiL2RyaXZlcnMvaWlvL2FkYy9xY29tLXNwbWktdmFkYy5jCmluZGV4IDBjNDYxOGIuLmMyYmFiZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2FkYy9xY29tLXNwbWktdmFkYy5jCisrKyBiL2RyaXZlcnMvaWlvL2FkYy9xY29tLXNwbWktdmFkYy5jCkBAIC04MzksOCArODM5LDEwIEBACiAKIAlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShub2RlLCBjaGlsZCkgewogCQlyZXQgPSB2YWRjX2dldF9kdF9jaGFubmVsX2RhdGEodmFkYy0+ZGV2LCAmcHJvcCwgY2hpbGQpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQlvZl9ub2RlX3B1dChjaGlsZCk7CiAJCQlyZXR1cm4gcmV0OworCQl9CiAKIAkJdmFkYy0+Y2hhbl9wcm9wc1tpbmRleF0gPSBwcm9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvdmY2MTBfYWRjLmMgYi9kcml2ZXJzL2lpby9hZGMvdmY2MTBfYWRjLmMKaW5kZXggNTk5Y2RlMy4uYjEwZjYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL3ZmNjEwX2FkYy5jCisrKyBiL2RyaXZlcnMvaWlvL2FkYy92ZjYxMF9hZGMuYwpAQCAtMTA2LDYgKzEwNiwxMyBAQAogCiAjZGVmaW5lIERFRkFVTFRfU0FNUExFX1RJTUUJCTEwMDAKIAorLyogViBhdCAyNcKwQyBvZiA2OTYgbVYgKi8KKyNkZWZpbmUgVkY2MTBfVlRFTVAyNV8zVjAJCTk1MAorLyogViBhdCAyNcKwQyBvZiA2OTkgbVYgKi8KKyNkZWZpbmUgVkY2MTBfVlRFTVAyNV8zVjMJCTg2NworLyogVHlwaWNhbCBzZW5zb3Igc2xvcGUgY29lZmZpY2llbnQgYXQgYWxsIHRlbXBlcmF0dXJlcyAqLworI2RlZmluZSBWRjYxMF9URU1QX1NMT1BFX0NPRUZGCQkxODQwCisKIGVudW0gY2xrX3NlbCB7CiAJVkY2MTBfQURDSU9DX0JVU0NMS19TRVQsCiAJVkY2MTBfQURDSU9DX0FMVENMS19TRVQsCkBAIC0xOTcsNiArMjA0LDggQEAKIAkJYWRjX2ZlYXR1cmUtPmNsa19kaXYgPSA4OwogCX0KIAorCWFkY2tfcmF0ZSA9IGlwZ19yYXRlIC8gYWRjX2ZlYXR1cmUtPmNsa19kaXY7CisKIAkvKgogCSAqIERldGVybWluZSB0aGUgbG9uZyBzYW1wbGUgdGltZSBhZGRlciB2YWx1ZSB0byBiZSB1c2VkIGJhc2VkCiAJICogb24gdGhlIGRlZmF1bHQgbWluaW11bSBzYW1wbGUgdGltZSBwcm92aWRlZC4KQEAgLTIyMSw3ICsyMzAsNiBAQAogCSAqIEJDVCAoQmFzZSBDb252ZXJzaW9uIFRpbWUpOiBmaXhlZCB0byAyNSBBRENLIGN5Y2xlcyBmb3IgMTIgYml0IG1vZGUKIAkgKiBMU1RBZGRlcihMb25nIFNhbXBsZSBUaW1lKTogMywgNSwgNywgOSwgMTMsIDE3LCAyMSwgMjUgQURDSyBjeWNsZXMKIAkgKi8KLQlhZGNrX3JhdGUgPSBpcGdfcmF0ZSAvIGluZm8tPmFkY19mZWF0dXJlLmNsa19kaXY7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmY2MTBfaHdfYXZncyk7IGkrKykKIAkJaW5mby0+c2FtcGxlX2ZyZXFfYXZhaWxbaV0gPQogCQkJYWRja19yYXRlIC8gKDYgKyB2ZjYxMF9od19hdmdzW2ldICoKQEAgLTY2MywxMSArNjcxLDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSBJSU9fVEVNUDoKIAkJCS8qCi0JCQkqIENhbGN1bGF0ZSBpbiBkZWdyZWUgQ2Vsc2l1cyB0aW1lcyAxMDAwCi0JCQkqIFVzaW5nIHNlbnNvciBzbG9wZSBvZiAxLjg0IG1WL8KwQyBhbmQKLQkJCSogViBhdCAyNcKwQyBvZiA2OTYgbVYKLQkJCSovCi0JCQkqdmFsID0gMjUwMDAgLSAoKGludClpbmZvLT52YWx1ZSAtIDg2NCkgKiAxMDAwMDAwIC8gMTg0MDsKKwkJCSAqIENhbGN1bGF0ZSBpbiBkZWdyZWUgQ2Vsc2l1cyB0aW1lcyAxMDAwCisJCQkgKiBVc2luZyB0aGUgdHlwaWNhbCBzZW5zb3Igc2xvcGUgb2YgMS44NCBtVi/CsEMKKwkJCSAqIGFuZCBWUkVGSF9BREMgYXQgMy4zViwgViBhdCAyNcKwQyBvZiA2OTkgbVYKKwkJCSAqLworCQkJKnZhbCA9IDI1MDAwIC0gKChpbnQpaW5mby0+dmFsdWUgLSBWRjYxMF9WVEVNUDI1XzNWMykgKgorCQkJCQkxMDAwMDAwIC8gVkY2MTBfVEVNUF9TTE9QRV9DT0VGRjsKKwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWRjL3hpbGlueC14YWRjLWNvcmUuYyBiL2RyaXZlcnMvaWlvL2FkYy94aWxpbngteGFkYy1jb3JlLmMKaW5kZXggMDM3MDYyNC4uMDJlNjM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL3hpbGlueC14YWRjLWNvcmUuYworKysgYi9kcml2ZXJzL2lpby9hZGMveGlsaW54LXhhZGMtY29yZS5jCkBAIC04NDEsNiArODQxLDcgQEAKIAkJCWNhc2UgWEFEQ19SRUdfVkNDSU5UOgogCQkJY2FzZSBYQURDX1JFR19WQ0NBVVg6CiAJCQljYXNlIFhBRENfUkVHX1ZSRUZQOgorCQkJY2FzZSBYQURDX1JFR19WUkVGTjoKIAkJCWNhc2UgWEFEQ19SRUdfVkNDQlJBTToKIAkJCWNhc2UgWEFEQ19SRUdfVkNDUElOVDoKIAkJCWNhc2UgWEFEQ19SRUdfVkNDUEFVWDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2RhYy9hZDUwNjQuYyBiL2RyaXZlcnMvaWlvL2RhYy9hZDUwNjQuYwppbmRleCA5ZTRkMmMxLi44MWNhMDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9kYWMvYWQ1MDY0LmMKKysrIGIvZHJpdmVycy9paW8vZGFjL2FkNTA2NC5jCkBAIC0xMTMsMTIgKzExMywxNiBAQAogCUlEX0FENTA2NSwKIAlJRF9BRDU2MjhfMSwKIAlJRF9BRDU2MjhfMiwKKwlJRF9BRDU2MjlfMSwKKwlJRF9BRDU2MjlfMiwKIAlJRF9BRDU2NDhfMSwKIAlJRF9BRDU2NDhfMiwKIAlJRF9BRDU2NjZfMSwKIAlJRF9BRDU2NjZfMiwKIAlJRF9BRDU2NjhfMSwKIAlJRF9BRDU2NjhfMiwKKwlJRF9BRDU2NjlfMSwKKwlJRF9BRDU2NjlfMiwKIH07CiAKIHN0YXRpYyBpbnQgYWQ1MDY0X3dyaXRlKHN0cnVjdCBhZDUwNjRfc3RhdGUgKnN0LCB1bnNpZ25lZCBpbnQgY21kLApAQCAtMjkxLDcgKzI5NSw3IEBACiAJeyB9LAogfTsKIAotI2RlZmluZSBBRDUwNjRfQ0hBTk5FTChjaGFuLCBhZGRyLCBiaXRzKSB7CQkJXAorI2RlZmluZSBBRDUwNjRfQ0hBTk5FTChjaGFuLCBhZGRyLCBiaXRzLCBfc2hpZnQpIHsJCVwKIAkudHlwZSA9IElJT19WT0xUQUdFLAkJCQkJXAogCS5pbmRleGVkID0gMSwJCQkJCQlcCiAJLm91dHB1dCA9IDEsCQkJCQkJXApAQCAtMzAzLDM2ICszMDcsMzkgQEAKIAkJLnNpZ24gPSAndScsCQkJCQlcCiAJCS5yZWFsYml0cyA9IChiaXRzKSwJCQkJXAogCQkuc3RvcmFnZWJpdHMgPSAxNiwJCQkJXAotCQkuc2hpZnQgPSAyMCAtIGJpdHMsCQkJCVwKKwkJLnNoaWZ0ID0gKF9zaGlmdCksCQkJCVwKIAl9LAkJCQkJCQlcCiAJLmV4dF9pbmZvID0gYWQ1MDY0X2V4dF9pbmZvLAkJCQlcCiB9CiAKLSNkZWZpbmUgREVDTEFSRV9BRDUwNjRfQ0hBTk5FTFMobmFtZSwgYml0cykgXAorI2RlZmluZSBERUNMQVJFX0FENTA2NF9DSEFOTkVMUyhuYW1lLCBiaXRzLCBzaGlmdCkgXAogY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgbmFtZVtdID0geyBcCi0JQUQ1MDY0X0NIQU5ORUwoMCwgMCwgYml0cyksIFwKLQlBRDUwNjRfQ0hBTk5FTCgxLCAxLCBiaXRzKSwgXAotCUFENTA2NF9DSEFOTkVMKDIsIDIsIGJpdHMpLCBcCi0JQUQ1MDY0X0NIQU5ORUwoMywgMywgYml0cyksIFwKLQlBRDUwNjRfQ0hBTk5FTCg0LCA0LCBiaXRzKSwgXAotCUFENTA2NF9DSEFOTkVMKDUsIDUsIGJpdHMpLCBcCi0JQUQ1MDY0X0NIQU5ORUwoNiwgNiwgYml0cyksIFwKLQlBRDUwNjRfQ0hBTk5FTCg3LCA3LCBiaXRzKSwgXAorCUFENTA2NF9DSEFOTkVMKDAsIDAsIGJpdHMsIHNoaWZ0KSwgXAorCUFENTA2NF9DSEFOTkVMKDEsIDEsIGJpdHMsIHNoaWZ0KSwgXAorCUFENTA2NF9DSEFOTkVMKDIsIDIsIGJpdHMsIHNoaWZ0KSwgXAorCUFENTA2NF9DSEFOTkVMKDMsIDMsIGJpdHMsIHNoaWZ0KSwgXAorCUFENTA2NF9DSEFOTkVMKDQsIDQsIGJpdHMsIHNoaWZ0KSwgXAorCUFENTA2NF9DSEFOTkVMKDUsIDUsIGJpdHMsIHNoaWZ0KSwgXAorCUFENTA2NF9DSEFOTkVMKDYsIDYsIGJpdHMsIHNoaWZ0KSwgXAorCUFENTA2NF9DSEFOTkVMKDcsIDcsIGJpdHMsIHNoaWZ0KSwgXAogfQogCi0jZGVmaW5lIERFQ0xBUkVfQUQ1MDY1X0NIQU5ORUxTKG5hbWUsIGJpdHMpIFwKKyNkZWZpbmUgREVDTEFSRV9BRDUwNjVfQ0hBTk5FTFMobmFtZSwgYml0cywgc2hpZnQpIFwKIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjIG5hbWVbXSA9IHsgXAotCUFENTA2NF9DSEFOTkVMKDAsIDAsIGJpdHMpLCBcCi0JQUQ1MDY0X0NIQU5ORUwoMSwgMywgYml0cyksIFwKKwlBRDUwNjRfQ0hBTk5FTCgwLCAwLCBiaXRzLCBzaGlmdCksIFwKKwlBRDUwNjRfQ0hBTk5FTCgxLCAzLCBiaXRzLCBzaGlmdCksIFwKIH0KIAotc3RhdGljIERFQ0xBUkVfQUQ1MDY0X0NIQU5ORUxTKGFkNTAyNF9jaGFubmVscywgMTIpOwotc3RhdGljIERFQ0xBUkVfQUQ1MDY0X0NIQU5ORUxTKGFkNTA0NF9jaGFubmVscywgMTQpOwotc3RhdGljIERFQ0xBUkVfQUQ1MDY0X0NIQU5ORUxTKGFkNTA2NF9jaGFubmVscywgMTYpOworc3RhdGljIERFQ0xBUkVfQUQ1MDY0X0NIQU5ORUxTKGFkNTAyNF9jaGFubmVscywgMTIsIDgpOworc3RhdGljIERFQ0xBUkVfQUQ1MDY0X0NIQU5ORUxTKGFkNTA0NF9jaGFubmVscywgMTQsIDYpOworc3RhdGljIERFQ0xBUkVfQUQ1MDY0X0NIQU5ORUxTKGFkNTA2NF9jaGFubmVscywgMTYsIDQpOwogCi1zdGF0aWMgREVDTEFSRV9BRDUwNjVfQ0hBTk5FTFMoYWQ1MDI1X2NoYW5uZWxzLCAxMik7Ci1zdGF0aWMgREVDTEFSRV9BRDUwNjVfQ0hBTk5FTFMoYWQ1MDQ1X2NoYW5uZWxzLCAxNCk7Ci1zdGF0aWMgREVDTEFSRV9BRDUwNjVfQ0hBTk5FTFMoYWQ1MDY1X2NoYW5uZWxzLCAxNik7CitzdGF0aWMgREVDTEFSRV9BRDUwNjVfQ0hBTk5FTFMoYWQ1MDI1X2NoYW5uZWxzLCAxMiwgOCk7CitzdGF0aWMgREVDTEFSRV9BRDUwNjVfQ0hBTk5FTFMoYWQ1MDQ1X2NoYW5uZWxzLCAxNCwgNik7CitzdGF0aWMgREVDTEFSRV9BRDUwNjVfQ0hBTk5FTFMoYWQ1MDY1X2NoYW5uZWxzLCAxNiwgNCk7CisKK3N0YXRpYyBERUNMQVJFX0FENTA2NF9DSEFOTkVMUyhhZDU2MjlfY2hhbm5lbHMsIDEyLCA0KTsKK3N0YXRpYyBERUNMQVJFX0FENTA2NF9DSEFOTkVMUyhhZDU2NjlfY2hhbm5lbHMsIDE2LCAwKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZDUwNjRfY2hpcF9pbmZvIGFkNTA2NF9jaGlwX2luZm9fdGJsW10gPSB7CiAJW0lEX0FENTAyNF0gPSB7CkBAIC0zODIsNiArMzg5LDE4IEBACiAJCS5jaGFubmVscyA9IGFkNTAyNF9jaGFubmVscywKIAkJLm51bV9jaGFubmVscyA9IDgsCiAJfSwKKwlbSURfQUQ1NjI5XzFdID0geworCQkuc2hhcmVkX3ZyZWYgPSB0cnVlLAorCQkuaW50ZXJuYWxfdnJlZiA9IDI1MDAwMDAsCisJCS5jaGFubmVscyA9IGFkNTYyOV9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IDgsCisJfSwKKwlbSURfQUQ1NjI5XzJdID0geworCQkuc2hhcmVkX3ZyZWYgPSB0cnVlLAorCQkuaW50ZXJuYWxfdnJlZiA9IDUwMDAwMDAsCisJCS5jaGFubmVscyA9IGFkNTYyOV9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IDgsCisJfSwKIAlbSURfQUQ1NjQ4XzFdID0gewogCQkuc2hhcmVkX3ZyZWYgPSB0cnVlLAogCQkuaW50ZXJuYWxfdnJlZiA9IDI1MDAwMDAsCkBAIC00MTgsNiArNDM3LDE4IEBACiAJCS5jaGFubmVscyA9IGFkNTA2NF9jaGFubmVscywKIAkJLm51bV9jaGFubmVscyA9IDgsCiAJfSwKKwlbSURfQUQ1NjY5XzFdID0geworCQkuc2hhcmVkX3ZyZWYgPSB0cnVlLAorCQkuaW50ZXJuYWxfdnJlZiA9IDI1MDAwMDAsCisJCS5jaGFubmVscyA9IGFkNTY2OV9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IDgsCisJfSwKKwlbSURfQUQ1NjY5XzJdID0geworCQkuc2hhcmVkX3ZyZWYgPSB0cnVlLAorCQkuaW50ZXJuYWxfdnJlZiA9IDUwMDAwMDAsCisJCS5jaGFubmVscyA9IGFkNTY2OV9jaGFubmVscywKKwkJLm51bV9jaGFubmVscyA9IDgsCisJfSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFkNTA2NF9udW1fdnJlZihzdHJ1Y3QgYWQ1MDY0X3N0YXRlICpzdCkKQEAgLTU5NywxMCArNjI4LDE2IEBACiAJdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGludCB2YWwpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHRvX2kyY19jbGllbnQoc3QtPmRldik7CisJaW50IHJldDsKIAogCXN0LT5kYXRhLmkyY1swXSA9IChjbWQgPDwgNCkgfCBhZGRyOwogCXB1dF91bmFsaWduZWRfYmUxNih2YWwsICZzdC0+ZGF0YS5pMmNbMV0pOwotCXJldHVybiBpMmNfbWFzdGVyX3NlbmQoaTJjLCBzdC0+ZGF0YS5pMmMsIDMpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgc3QtPmRhdGEuaTJjLCAzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFkNTA2NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKQEAgLTYxNiwxMiArNjUzLDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZDUwNjRfaTJjX2lkc1tdID0gewotCXsiYWQ1NjI5LTEiLCBJRF9BRDU2MjhfMX0sCi0JeyJhZDU2MjktMiIsIElEX0FENTYyOF8yfSwKLQl7ImFkNTYyOS0zIiwgSURfQUQ1NjI4XzJ9LCAvKiBzaW1pbGFyIGVub3VnaCB0byBhZDU2MjktMiAqLwotCXsiYWQ1NjY5LTEiLCBJRF9BRDU2NjhfMX0sCi0JeyJhZDU2NjktMiIsIElEX0FENTY2OF8yfSwKLQl7ImFkNTY2OS0zIiwgSURfQUQ1NjY4XzJ9LCAvKiBzaW1pbGFyIGVub3VnaCB0byBhZDU2NjktMiAqLworCXsiYWQ1NjI5LTEiLCBJRF9BRDU2MjlfMX0sCisJeyJhZDU2MjktMiIsIElEX0FENTYyOV8yfSwKKwl7ImFkNTYyOS0zIiwgSURfQUQ1NjI5XzJ9LCAvKiBzaW1pbGFyIGVub3VnaCB0byBhZDU2MjktMiAqLworCXsiYWQ1NjY5LTEiLCBJRF9BRDU2NjlfMX0sCisJeyJhZDU2NjktMiIsIElEX0FENTY2OV8yfSwKKwl7ImFkNTY2OS0zIiwgSURfQUQ1NjY5XzJ9LCAvKiBzaW1pbGFyIGVub3VnaCB0byBhZDU2NjktMiAqLwogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkNTA2NF9pMmNfaWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2h1bWlkaXR5L3NpNzAyMC5jIGIvZHJpdmVycy9paW8vaHVtaWRpdHkvc2k3MDIwLmMKaW5kZXggMTIxMjhkMS4uNzE5OTFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vaHVtaWRpdHkvc2k3MDIwLmMKKysrIGIvZHJpdmVycy9paW8vaHVtaWRpdHkvc2k3MDIwLmMKQEAgLTUwLDEwICs1MCwxMCBAQAogCiAJc3dpdGNoIChtYXNrKSB7CiAJY2FzZSBJSU9fQ0hBTl9JTkZPX1JBVzoKLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKCpjbGllbnQsCi0JCQkJCSAgICAgICBjaGFuLT50eXBlID09IElJT19URU1QID8KLQkJCQkJICAgICAgIFNJNzAyMENNRF9URU1QX0hPTEQgOgotCQkJCQkgICAgICAgU0k3MDIwQ01EX1JIX0hPTEQpOworCQlyZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoKmNsaWVudCwKKwkJCQkJCSAgY2hhbi0+dHlwZSA9PSBJSU9fVEVNUCA/CisJCQkJCQkgIFNJNzAyMENNRF9URU1QX0hPTEQgOgorCQkJCQkJICBTSTcwMjBDTURfUkhfSE9MRCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAkJKnZhbCA9IHJldCA+PiAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jIGIvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jCmluZGV4IGQ3ZTkwOGEuLjBmNmY2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYworKysgYi9kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCWlmICh0cmlhbG1hc2sgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKCFpbmRpb19kZXYtPm1hc2tsZW5ndGgpIHsKLQkJV0FSTl9PTigiVHJ5aW5nIHRvIHNldCBzY2FubWFzayBwcmlvciB0byByZWdpc3RlcmluZyBidWZmZXJcbiIpOworCQlXQVJOKDEsICJUcnlpbmcgdG8gc2V0IHNjYW5tYXNrIHByaW9yIHRvIHJlZ2lzdGVyaW5nIGJ1ZmZlclxuIik7CiAJCWdvdG8gZXJyX2ludmFsaWRfbWFzazsKIAl9CiAJYml0bWFwX2NvcHkodHJpYWxtYXNrLCBidWZmZXItPnNjYW5fbWFzaywgaW5kaW9fZGV2LT5tYXNrbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCmluZGV4IDIwODM1OGYuLjE1OWVkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKKysrIGIvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtNjU1LDcgKzY1NSw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBJSU9fU0VQQVJBVEU6CiAJCQlpZiAoIWNoYW4tPmluZGV4ZWQpIHsKLQkJCQlXQVJOX09OKCJEaWZmZXJlbnRpYWwgY2hhbm5lbHMgbXVzdCBiZSBpbmRleGVkXG4iKTsKKwkJCQlXQVJOKDEsICJEaWZmZXJlbnRpYWwgY2hhbm5lbHMgbXVzdCBiZSBpbmRleGVkXG4iKTsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gZXJyb3JfZnJlZV9mdWxsX3Bvc3RmaXg7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9saWdodC9hcGRzOTk2MC5jIGIvZHJpdmVycy9paW8vbGlnaHQvYXBkczk5NjAuYwppbmRleCA3ZDI2OWVmLi5mNmEwN2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lpby9saWdodC9hcGRzOTk2MC5jCisrKyBiL2RyaXZlcnMvaWlvL2xpZ2h0L2FwZHM5OTYwLmMKQEAgLTQ1Myw2ICs0NTMsNyBAQAogCQkJdXNsZWVwX3JhbmdlKGRhdGEtPmFsc19hZGNfaW50X3VzLAogCQkJCSAgICAgQVBEUzk5NjBfTUFYX0lOVF9USU1FX0lOX1VTKTsKIAl9IGVsc2UgeworCQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGRldik7CiAJCXJldCA9IHBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGRldik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9wcm94aW1pdHkvcHVsc2VkbGlnaHQtbGlkYXItbGl0ZS12Mi5jIGIvZHJpdmVycy9paW8vcHJveGltaXR5L3B1bHNlZGxpZ2h0LWxpZGFyLWxpdGUtdjIuYwppbmRleCA5NjFmOWY5OS4uZTU0NGZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vcHJveGltaXR5L3B1bHNlZGxpZ2h0LWxpZGFyLWxpdGUtdjIuYworKysgYi9kcml2ZXJzL2lpby9wcm94aW1pdHkvcHVsc2VkbGlnaHQtbGlkYXItbGl0ZS12Mi5jCkBAIC0xMzAsMTAgKzEzMCwxMCBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwogCi0JCS8qIHJldHVybiAwIHNpbmNlIGxhc2VyIGlzIGxpa2VseSBwb2ludGVkIG91dCBvZiByYW5nZSAqLworCQkvKiByZXR1cm4gLUVJTlZBTCBzaW5jZSBsYXNlciBpcyBsaWtlbHkgcG9pbnRlZCBvdXQgb2YgcmFuZ2UgKi8KIAkJaWYgKHJldCAmIExJREFSX1JFR19TVEFUVVNfSU5WQUxJRCkgewogCQkJKnJlZyA9IDA7Ci0JCQlyZXQgPSAwOworCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCWlmICghcmV0KSB7CiAJCWlpb19wdXNoX3RvX2J1ZmZlcnNfd2l0aF90aW1lc3RhbXAoaW5kaW9fZGV2LCBkYXRhLT5idWZmZXIsCiAJCQkJCQkgICBpaW9fZ2V0X3RpbWVfbnMoKSk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKHJldCAhPSAtRUlOVkFMKSB7CiAJCWRldl9lcnIoJmRhdGEtPmNsaWVudC0+ZGV2LCAiY2Fubm90IHJlYWQgTElEQVIgbWVhc3VyZW1lbnQiKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKaW5kZXggOTQ0Y2Q5MC4uMmQ3NjJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKQEAgLTExMjYsMTAgKzExMjYsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWVyciA9IGZpYl9sb29rdXAoZGV2X25ldChuZXRfZGV2KSwgJmZsNCwgJnJlcywgMCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0ID0gRklCX1JFU19ERVYocmVzKSA9PSBuZXRfZGV2OworCXJldCA9IGVyciA9PSAwICYmIEZJQl9SRVNfREVWKHJlcykgPT0gbmV0X2RldjsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMjY4LDE1ICsxMjY1LDE3IEBACiAJcmV0dXJuIGNtYV9wcm90b2NvbF9yb2NlX2Rldl9wb3J0KGRldmljZSwgcG9ydF9udW0pOwogfQogCi1zdGF0aWMgYm9vbCBjbWFfbWF0Y2hfbmV0X2Rldihjb25zdCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LAotCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCitzdGF0aWMgYm9vbCBjbWFfbWF0Y2hfbmV0X2Rldihjb25zdCBzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCSAgICAgIHU4IHBvcnRfbnVtKQogewotCWNvbnN0IHN0cnVjdCByZG1hX2FkZHIgKmFkZHIgPSAmaWRfcHJpdi0+aWQucm91dGUuYWRkcjsKKwljb25zdCBzdHJ1Y3QgcmRtYV9hZGRyICphZGRyID0gJmlkLT5yb3V0ZS5hZGRyOwogCiAJaWYgKCFuZXRfZGV2KQogCQkvKiBUaGlzIHJlcXVlc3QgaXMgYW4gQUZfSUIgcmVxdWVzdCBvciBhIFJvQ0UgcmVxdWVzdCAqLwotCQlyZXR1cm4gYWRkci0+c3JjX2FkZHIuc3NfZmFtaWx5ID09IEFGX0lCIHx8Ci0JCSAgICAgICBjbWFfcHJvdG9jb2xfcm9jZSgmaWRfcHJpdi0+aWQpOworCQlyZXR1cm4gKCFpZC0+cG9ydF9udW0gfHwgaWQtPnBvcnRfbnVtID09IHBvcnRfbnVtKSAmJgorCQkgICAgICAgKGFkZHItPnNyY19hZGRyLnNzX2ZhbWlseSA9PSBBRl9JQiB8fAorCQkJY21hX3Byb3RvY29sX3JvY2VfZGV2X3BvcnQoaWQtPmRldmljZSwgcG9ydF9udW0pKTsKIAogCXJldHVybiAhYWRkci0+ZGV2X2FkZHIuYm91bmRfZGV2X2lmIHx8CiAJICAgICAgIChuZXRfZXEoZGV2X25ldChuZXRfZGV2KSwgYWRkci0+ZGV2X2FkZHIubmV0KSAmJgpAQCAtMTI5OCwxMyArMTI5NywxMyBAQAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGlkX3ByaXYsICZiaW5kX2xpc3QtPm93bmVycywgbm9kZSkgewogCQlpZiAoY21hX21hdGNoX3ByaXZhdGVfZGF0YShpZF9wcml2LCBpYl9ldmVudC0+cHJpdmF0ZV9kYXRhKSkgewogCQkJaWYgKGlkX3ByaXYtPmlkLmRldmljZSA9PSBjbV9pZC0+ZGV2aWNlICYmCi0JCQkgICAgY21hX21hdGNoX25ldF9kZXYoaWRfcHJpdiwgbmV0X2RldikpCisJCQkgICAgY21hX21hdGNoX25ldF9kZXYoJmlkX3ByaXYtPmlkLCBuZXRfZGV2LCByZXEtPnBvcnQpKQogCQkJCXJldHVybiBpZF9wcml2OwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShpZF9wcml2X2RldiwKIAkJCQkJICAgICZpZF9wcml2LT5saXN0ZW5fbGlzdCwKIAkJCQkJICAgIGxpc3Rlbl9saXN0KSB7CiAJCQkJaWYgKGlkX3ByaXZfZGV2LT5pZC5kZXZpY2UgPT0gY21faWQtPmRldmljZSAmJgotCQkJCSAgICBjbWFfbWF0Y2hfbmV0X2RldihpZF9wcml2X2RldiwgbmV0X2RldikpCisJCQkJICAgIGNtYV9tYXRjaF9uZXRfZGV2KCZpZF9wcml2X2Rldi0+aWQsIG5ldF9kZXYsIHJlcS0+cG9ydCkpCiAJCQkJCXJldHVybiBpZF9wcml2X2RldjsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwppbmRleCA4ZDhhZjdhLi4yMjgxZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYwpAQCAtMTgxMSw2ICsxODExLDExIEBACiAJCWlmIChxcF9udW0gPT0gMCkKIAkJCXZhbGlkID0gMTsKIAl9IGVsc2UgeworCQkvKiBDTSBhdHRyaWJ1dGVzIG90aGVyIHRoYW4gQ2xhc3NQb3J0SW5mbyBvbmx5IHVzZSBTZW5kIG1ldGhvZCAqLworCQlpZiAoKG1hZF9oZHItPm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19DTSkgJiYKKwkJICAgIChtYWRfaGRyLT5hdHRyX2lkICE9IElCX01HTVRfQ0xBU1NQT1JUSU5GT19BVFRSX0lEKSAmJgorCQkgICAgKG1hZF9oZHItPm1ldGhvZCAhPSBJQl9NR01UX01FVEhPRF9TRU5EKSkKKwkJCWdvdG8gb3V0OwogCQkvKiBGaWx0ZXIgR1NJIHBhY2tldHMgc2VudCB0byBRUDAgKi8KIAkJaWYgKHFwX251bSAhPSAwKQogCQkJdmFsaWQgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKaW5kZXggMmFiYTc3NC4uYTk1YTMyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCkBAIC01MTIsNyArNTEyLDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW50IGliX25sX3NlbmRfbXNnKHN0cnVjdCBpYl9zYV9xdWVyeSAqcXVlcnkpCitzdGF0aWMgaW50IGliX25sX3NlbmRfbXNnKHN0cnVjdCBpYl9zYV9xdWVyeSAqcXVlcnksIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwpAQCAtNTI2LDcgKzUyNiw3IEBACiAJaWYgKGxlbiA8PSAwKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCi0Jc2tiID0gbmxtc2dfbmV3KGxlbiwgR0ZQX0tFUk5FTCk7CisJc2tiID0gbmxtc2dfbmV3KGxlbiwgZ2ZwX21hc2spOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNTQ0LDcgKzU0NCw3IEBACiAJLyogUmVwYWlyIHRoZSBubG1zZyBoZWFkZXIgbGVuZ3RoICovCiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAotCXJldCA9IGlibmxfbXVsdGljYXN0KHNrYiwgbmxoLCBSRE1BX05MX0dST1VQX0xTLCBHRlBfS0VSTkVMKTsKKwlyZXQgPSBpYm5sX211bHRpY2FzdChza2IsIG5saCwgUkRNQV9OTF9HUk9VUF9MUywgZ2ZwX21hc2spOwogCWlmICghcmV0KQogCQlyZXQgPSBsZW47CiAJZWxzZQpAQCAtNTUzLDcgKzU1Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpYl9ubF9tYWtlX3JlcXVlc3Qoc3RydWN0IGliX3NhX3F1ZXJ5ICpxdWVyeSkKK3N0YXRpYyBpbnQgaWJfbmxfbWFrZV9yZXF1ZXN0KHN0cnVjdCBpYl9zYV9xdWVyeSAqcXVlcnksIGdmcF90IGdmcF9tYXNrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBkZWxheTsKQEAgLTU2MiwyNSArNTYyLDI3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnF1ZXJ5LT5saXN0KTsKIAlxdWVyeS0+c2VxID0gKHUzMilhdG9taWNfaW5jX3JldHVybigmaWJfbmxfc2FfcmVxdWVzdF9zZXEpOwogCisJLyogUHV0IHRoZSByZXF1ZXN0IG9uIHRoZSBsaXN0IGZpcnN0LiovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmliX25sX3JlcXVlc3RfbG9jaywgZmxhZ3MpOwotCXJldCA9IGliX25sX3NlbmRfbXNnKHF1ZXJ5KTsKLQlpZiAocmV0IDw9IDApIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byByZXF1ZXN0X291dDsKLQl9IGVsc2UgewotCQlyZXQgPSAwOwotCX0KLQogCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhzYV9sb2NhbF9zdmNfdGltZW91dF9tcyk7CiAJcXVlcnktPnRpbWVvdXQgPSBkZWxheSArIGppZmZpZXM7CiAJbGlzdF9hZGRfdGFpbCgmcXVlcnktPmxpc3QsICZpYl9ubF9yZXF1ZXN0X2xpc3QpOwogCS8qIFN0YXJ0IHRoZSB0aW1lb3V0IGlmIHRoaXMgaXMgdGhlIG9ubHkgcmVxdWVzdCAqLwogCWlmIChpYl9ubF9yZXF1ZXN0X2xpc3QubmV4dCA9PSAmcXVlcnktPmxpc3QpCiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhpYl9ubF93cSwgJmliX25sX3RpbWVkX3dvcmssIGRlbGF5KTsKLQotcmVxdWVzdF9vdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWJfbmxfcmVxdWVzdF9sb2NrLCBmbGFncyk7CiAKKwlyZXQgPSBpYl9ubF9zZW5kX21zZyhxdWVyeSwgZ2ZwX21hc2spOworCWlmIChyZXQgPD0gMCkgeworCQlyZXQgPSAtRUlPOworCQkvKiBSZW1vdmUgdGhlIHJlcXVlc3QgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmliX25sX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCQlsaXN0X2RlbCgmcXVlcnktPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYl9ubF9yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQlyZXQgPSAwOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExMDgsNyArMTExMCw3IEBACiAKIAlpZiAocXVlcnktPmZsYWdzICYgSUJfU0FfRU5BQkxFX0xPQ0FMX1NFUlZJQ0UpIHsKIAkJaWYgKCFpYm5sX2Noa19saXN0ZW5lcnMoUkRNQV9OTF9HUk9VUF9MUykpIHsKLQkJCWlmICghaWJfbmxfbWFrZV9yZXF1ZXN0KHF1ZXJ5KSkKKwkJCWlmICghaWJfbmxfbWFrZV9yZXF1ZXN0KHF1ZXJ5LCBnZnBfbWFzaykpCiAJCQkJcmV0dXJuIGlkOwogCQl9CiAJCWliX3NhX2Rpc2FibGVfbG9jYWxfc3ZjKHF1ZXJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwppbmRleCA5NDgxNmFlLi4xYzAyZGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCkBAIC02Miw5ICs2MiwxMSBAQAogICogVGhlIGliX3VvYmplY3QgbG9ja2luZyBzY2hlbWUgaXMgYXMgZm9sbG93czoKICAqCiAgKiAtIGliX3V2ZXJic19pZHJfbG9jayBwcm90ZWN0cyB0aGUgdXZlcmJzIGlkcnMgdGhlbXNlbHZlcywgc28gaXQKLSAqICAgbmVlZHMgdG8gYmUgaGVsZCBkdXJpbmcgYWxsIGlkciBvcGVyYXRpb25zLiAgV2hlbiBhbiBvYmplY3QgaXMKKyAqICAgbmVlZHMgdG8gYmUgaGVsZCBkdXJpbmcgYWxsIGlkciB3cml0ZSBvcGVyYXRpb25zLiAgV2hlbiBhbiBvYmplY3QgaXMKICAqICAgbG9va2VkIHVwLCBhIHJlZmVyZW5jZSBtdXN0IGJlIHRha2VuIG9uIHRoZSBvYmplY3QncyBrcmVmIGJlZm9yZQotICogICBkcm9wcGluZyB0aGlzIGxvY2suCisgKiAgIGRyb3BwaW5nIHRoaXMgbG9jay4gIEZvciByZWFkIG9wZXJhdGlvbnMsIHRoZSByY3VfcmVhZF9sb2NrKCkKKyAqICAgYW5kIHJjdV93cml0ZV9sb2NrKCkgYnV0IHNpbWlsYXJseSB0aGUga3JlZiByZWZlcmVuY2UgaXMgZ3JhYmJlZAorICogICBiZWZvcmUgdGhlIHJjdV9yZWFkX3VubG9jaygpLgogICoKICAqIC0gRWFjaCBvYmplY3QgYWxzbyBoYXMgYW4gcndzZW0uICBUaGlzIHJ3c2VtIG11c3QgYmUgaGVsZCBmb3IKICAqICAgcmVhZGluZyB3aGlsZSBhbiBvcGVyYXRpb24gdGhhdCB1c2VzIHRoZSBvYmplY3QgaXMgcGVyZm9ybWVkLgpAQCAtOTYsNyArOTgsNyBAQAogCiBzdGF0aWMgdm9pZCByZWxlYXNlX3VvYmooc3RydWN0IGtyZWYgKmtyZWYpCiB7Ci0Ja2ZyZWUoY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBpYl91b2JqZWN0LCByZWYpKTsKKwlrZnJlZV9yY3UoY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBpYl91b2JqZWN0LCByZWYpLCByY3UpOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfdW9iaihzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iaikKQEAgLTE0NSw3ICsxNDcsNyBAQAogewogCXN0cnVjdCBpYl91b2JqZWN0ICp1b2JqOwogCi0Jc3Bpbl9sb2NrKCZpYl91dmVyYnNfaWRyX2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAl1b2JqID0gaWRyX2ZpbmQoaWRyLCBpZCk7CiAJaWYgKHVvYmopIHsKIAkJaWYgKHVvYmotPmNvbnRleHQgPT0gY29udGV4dCkKQEAgLTE1Myw3ICsxNTUsNyBAQAogCQllbHNlCiAJCQl1b2JqID0gTlVMTDsKIAl9Ci0Jc3Bpbl91bmxvY2soJmliX3V2ZXJic19pZHJfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gdW9iajsKIH0KQEAgLTI0NDYsNiArMjQ0OCw3IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBzZ19pbmQ7CiAJaW50CQkJCWlzX3VkOwogCXNzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKKwlzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc2l6ZTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI0OTAsNyArMjQ5Myw4IEBACiAJCQkJZ290byBvdXRfcHV0OwogCQkJfQogCi0JCQl1ZCA9IGFsbG9jX3dyKHNpemVvZigqdWQpLCB1c2VyX3dyLT5udW1fc2dlKTsKKwkJCW5leHRfc2l6ZSA9IHNpemVvZigqdWQpOworCQkJdWQgPSBhbGxvY193cihuZXh0X3NpemUsIHVzZXJfd3ItPm51bV9zZ2UpOwogCQkJaWYgKCF1ZCkgewogCQkJCXJldCA9IC1FTk9NRU07CiAJCQkJZ290byBvdXRfcHV0OwpAQCAtMjUxMSw3ICsyNTE1LDggQEAKIAkJCSAgIHVzZXJfd3ItPm9wY29kZSA9PSBJQl9XUl9SRE1BX1JFQUQpIHsKIAkJCXN0cnVjdCBpYl9yZG1hX3dyICpyZG1hOwogCi0JCQlyZG1hID0gYWxsb2Nfd3Ioc2l6ZW9mKCpyZG1hKSwgdXNlcl93ci0+bnVtX3NnZSk7CisJCQluZXh0X3NpemUgPSBzaXplb2YoKnJkbWEpOworCQkJcmRtYSA9IGFsbG9jX3dyKG5leHRfc2l6ZSwgdXNlcl93ci0+bnVtX3NnZSk7CiAJCQlpZiAoIXJkbWEpIHsKIAkJCQlyZXQgPSAtRU5PTUVNOwogCQkJCWdvdG8gb3V0X3B1dDsKQEAgLTI1MjUsNyArMjUzMCw4IEBACiAJCQkgICB1c2VyX3dyLT5vcGNvZGUgPT0gSUJfV1JfQVRPTUlDX0ZFVENIX0FORF9BREQpIHsKIAkJCXN0cnVjdCBpYl9hdG9taWNfd3IgKmF0b21pYzsKIAotCQkJYXRvbWljID0gYWxsb2Nfd3Ioc2l6ZW9mKCphdG9taWMpLCB1c2VyX3dyLT5udW1fc2dlKTsKKwkJCW5leHRfc2l6ZSA9IHNpemVvZigqYXRvbWljKTsKKwkJCWF0b21pYyA9IGFsbG9jX3dyKG5leHRfc2l6ZSwgdXNlcl93ci0+bnVtX3NnZSk7CiAJCQlpZiAoIWF0b21pYykgewogCQkJCXJldCA9IC1FTk9NRU07CiAJCQkJZ290byBvdXRfcHV0OwpAQCAtMjU0MCw3ICsyNTQ2LDggQEAKIAkJfSBlbHNlIGlmICh1c2VyX3dyLT5vcGNvZGUgPT0gSUJfV1JfU0VORCB8fAogCQkJICAgdXNlcl93ci0+b3Bjb2RlID09IElCX1dSX1NFTkRfV0lUSF9JTU0gfHwKIAkJCSAgIHVzZXJfd3ItPm9wY29kZSA9PSBJQl9XUl9TRU5EX1dJVEhfSU5WKSB7Ci0JCQluZXh0ID0gYWxsb2Nfd3Ioc2l6ZW9mKCpuZXh0KSwgdXNlcl93ci0+bnVtX3NnZSk7CisJCQluZXh0X3NpemUgPSBzaXplb2YoKm5leHQpOworCQkJbmV4dCA9IGFsbG9jX3dyKG5leHRfc2l6ZSwgdXNlcl93ci0+bnVtX3NnZSk7CiAJCQlpZiAoIW5leHQpIHsKIAkJCQlyZXQgPSAtRU5PTUVNOwogCQkJCWdvdG8gb3V0X3B1dDsKQEAgLTI1NzIsNyArMjU3OSw3IEBACiAKIAkJaWYgKG5leHQtPm51bV9zZ2UpIHsKIAkJCW5leHQtPnNnX2xpc3QgPSAodm9pZCAqKSBuZXh0ICsKLQkJCQlBTElHTihzaXplb2YgKm5leHQsIHNpemVvZiAoc3RydWN0IGliX3NnZSkpOworCQkJCUFMSUdOKG5leHRfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpYl9zZ2UpKTsKIAkJCWlmIChjb3B5X2Zyb21fdXNlcihuZXh0LT5zZ19saXN0LAogCQkJCQkgICBidWYgKyBzaXplb2YgY21kICsKIAkJCQkJICAgY21kLndyX2NvdW50ICogY21kLndxZV9zaXplICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IDA0M2E2MGUuLjU0NTkwNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtMTUxNiw3ICsxNTE2LDcgQEAKICAqIEBzZ19uZW50czogICAgICBudW1iZXIgb2YgZW50cmllcyBpbiBzZwogICogQHNldF9wYWdlOiAgICAgIGRyaXZlciBwYWdlIGFzc2lnbm1lbnQgZnVuY3Rpb24gcG9pbnRlcgogICoKLSAqIENvcmUgc2VydmljZSBoZWxwZXIgZm9yIGRyaXZlcnMgdG8gY292ZXJ0IHRoZSBsYXJnZXN0CisgKiBDb3JlIHNlcnZpY2UgaGVscGVyIGZvciBkcml2ZXJzIHRvIGNvbnZlcnQgdGhlIGxhcmdlc3QKICAqIHByZWZpeCBvZiBnaXZlbiBzZyBsaXN0IHRvIGEgcGFnZSB2ZWN0b3IuIFRoZSBzZyBsaXN0CiAgKiBwcmVmaXggY29udmVydGVkIGlzIHRoZSBwcmVmaXggdGhhdCBtZWV0IHRoZSByZXF1aXJlbWVudHMKICAqIG9mIGliX21hcF9tcl9zZy4KQEAgLTE1MzMsNyArMTUzMyw3IEBACiAJdTY0IGxhc3RfZW5kX2RtYV9hZGRyID0gMCwgbGFzdF9wYWdlX2FkZHIgPSAwOwogCXVuc2lnbmVkIGludCBsYXN0X3BhZ2Vfb2ZmID0gMDsKIAl1NjQgcGFnZV9tYXNrID0gfigodTY0KW1yLT5wYWdlX3NpemUgLSAxKTsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0OwogCiAJbXItPmlvdmEgPSBzZ19kbWFfYWRkcmVzcygmc2dsWzBdKTsKIAltci0+bGVuZ3RoID0gMDsKQEAgLTE1NDQsMjcgKzE1NDQsMjkgQEAKIAkJdTY0IGVuZF9kbWFfYWRkciA9IGRtYV9hZGRyICsgZG1hX2xlbjsKIAkJdTY0IHBhZ2VfYWRkciA9IGRtYV9hZGRyICYgcGFnZV9tYXNrOwogCi0JCWlmIChpICYmIHBhZ2VfYWRkciAhPSBkbWFfYWRkcikgewotCQkJaWYgKGxhc3RfZW5kX2RtYV9hZGRyICE9IGRtYV9hZGRyKSB7Ci0JCQkJLyogZ2FwICovCi0JCQkJZ290byBkb25lOworCQkvKgorCQkgKiBGb3IgdGhlIHNlY29uZCBhbmQgbGF0ZXIgZWxlbWVudHMsIGNoZWNrIHdoZXRoZXIgZWl0aGVyIHRoZQorCQkgKiBlbmQgb2YgZWxlbWVudCBpLTEgb3IgdGhlIHN0YXJ0IG9mIGVsZW1lbnQgaSBpcyBub3QgYWxpZ25lZAorCQkgKiBvbiBhIHBhZ2UgYm91bmRhcnkuCisJCSAqLworCQlpZiAoaSAmJiAobGFzdF9wYWdlX29mZiAhPSAwIHx8IHBhZ2VfYWRkciAhPSBkbWFfYWRkcikpIHsKKwkJCS8qIFN0b3AgbWFwcGluZyBpZiB0aGVyZSBpcyBhIGdhcC4gKi8KKwkJCWlmIChsYXN0X2VuZF9kbWFfYWRkciAhPSBkbWFfYWRkcikKKwkJCQlicmVhazsKIAotCQkJfSBlbHNlIGlmIChsYXN0X3BhZ2Vfb2ZmICsgZG1hX2xlbiA8PSBtci0+cGFnZV9zaXplKSB7Ci0JCQkJLyogY2h1bmsgdGhpcyBmcmFnbWVudCB3aXRoIHRoZSBsYXN0ICovCi0JCQkJbXItPmxlbmd0aCArPSBkbWFfbGVuOwotCQkJCWxhc3RfZW5kX2RtYV9hZGRyICs9IGRtYV9sZW47Ci0JCQkJbGFzdF9wYWdlX29mZiArPSBkbWFfbGVuOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBtYXAgc3RhcnRpbmcgZnJvbSB0aGUgbmV4dCBwYWdlICovCi0JCQkJcGFnZV9hZGRyID0gbGFzdF9wYWdlX2FkZHIgKyBtci0+cGFnZV9zaXplOwotCQkJCWRtYV9sZW4gLT0gbXItPnBhZ2Vfc2l6ZSAtIGxhc3RfcGFnZV9vZmY7Ci0JCQl9CisJCQkvKgorCQkJICogQ29hbGVzY2UgdGhpcyBlbGVtZW50IHdpdGggdGhlIGxhc3QuIElmIGl0IGlzIHNtYWxsCisJCQkgKiBlbm91Z2gganVzdCB1cGRhdGUgbXItPmxlbmd0aC4gT3RoZXJ3aXNlIHN0YXJ0CisJCQkgKiBtYXBwaW5nIGZyb20gdGhlIG5leHQgcGFnZS4KKwkJCSAqLworCQkJZ290byBuZXh0X3BhZ2U7CiAJCX0KIAogCQlkbyB7Ci0JCQlpZiAodW5saWtlbHkoc2V0X3BhZ2UobXIsIHBhZ2VfYWRkcikpKQotCQkJCWdvdG8gZG9uZTsKKwkJCXJldCA9IHNldF9wYWdlKG1yLCBwYWdlX2FkZHIpOworCQkJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQkJCXJldHVybiBpID8gOiByZXQ7CituZXh0X3BhZ2U6CiAJCQlwYWdlX2FkZHIgKz0gbXItPnBhZ2Vfc2l6ZTsKIAkJfSB3aGlsZSAocGFnZV9hZGRyIDwgZW5kX2RtYV9hZGRyKTsKIApAQCAtMTU3NCw3ICsxNTc2LDYgQEAKIAkJbGFzdF9wYWdlX29mZiA9IGVuZF9kbWFfYWRkciAmIH5wYWdlX21hc2s7CiAJfQogCi1kb25lOgogCXJldHVybiBpOwogfQogRVhQT1JUX1NZTUJPTChpYl9zZ190b19wYWdlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKaW5kZXggZjU2NzE2MC4uOTdkNjg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJcHJvcHMtPm1heF9xcF93cgkgICA9IGRldi0+ZGV2LT5jYXBzLm1heF93cWVzIC0gTUxYNF9JQl9TUV9NQVhfU1BBUkU7CiAJcHJvcHMtPm1heF9zZ2UJCSAgID0gbWluKGRldi0+ZGV2LT5jYXBzLm1heF9zcV9zZywKIAkJCQkJIGRldi0+ZGV2LT5jYXBzLm1heF9ycV9zZyk7Ci0JcHJvcHMtPm1heF9zZ2VfcmQgPSBwcm9wcy0+bWF4X3NnZTsKKwlwcm9wcy0+bWF4X3NnZV9yZAkgICA9IE1MWDRfTUFYX1NHRV9SRDsKIAlwcm9wcy0+bWF4X2NxCQkgICA9IGRldi0+ZGV2LT5xdW90YXMuY3E7CiAJcHJvcHMtPm1heF9jcWUJCSAgID0gZGV2LT5kZXYtPmNhcHMubWF4X2NxZXM7CiAJcHJvcHMtPm1heF9tcgkJICAgPSBkZXYtPmRldi0+cXVvdGFzLm1wdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCmluZGV4IGEyZTRjYTUuLjEzZWFhZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSA8cmRtYS9pYl9jYWNoZS5oPgogI2luY2x1ZGUgPHJkbWEvaWJfcGFjay5oPgpAQCAtNzk1LDggKzc5NiwxNCBAQAogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfbXR0OwogCi0JCXFwLT5zcS53cmlkICA9IGttYWxsb2MocXAtPnNxLndxZV9jbnQgKiBzaXplb2YgKHU2NCksIGdmcCk7Ci0JCXFwLT5ycS53cmlkICA9IGttYWxsb2MocXAtPnJxLndxZV9jbnQgKiBzaXplb2YgKHU2NCksIGdmcCk7CisJCXFwLT5zcS53cmlkID0ga21hbGxvYyhxcC0+c3Eud3FlX2NudCAqIHNpemVvZih1NjQpLCBnZnApOworCQlpZiAoIXFwLT5zcS53cmlkKQorCQkJcXAtPnNxLndyaWQgPSBfX3ZtYWxsb2MocXAtPnNxLndxZV9jbnQgKiBzaXplb2YodTY0KSwKKwkJCQkJCWdmcCwgUEFHRV9LRVJORUwpOworCQlxcC0+cnEud3JpZCA9IGttYWxsb2MocXAtPnJxLndxZV9jbnQgKiBzaXplb2YodTY0KSwgZ2ZwKTsKKwkJaWYgKCFxcC0+cnEud3JpZCkKKwkJCXFwLT5ycS53cmlkID0gX192bWFsbG9jKHFwLT5ycS53cWVfY250ICogc2l6ZW9mKHU2NCksCisJCQkJCQlnZnAsIFBBR0VfS0VSTkVMKTsKIAkJaWYgKCFxcC0+c3Eud3JpZCB8fCAhcXAtPnJxLndyaWQpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl93cmlkOwpAQCAtODg2LDggKzg5Myw4IEBACiAJCWlmIChxcF9oYXNfcnEoaW5pdF9hdHRyKSkKIAkJCW1seDRfaWJfZGJfdW5tYXBfdXNlcih0b19tdWNvbnRleHQocGQtPnVvYmplY3QtPmNvbnRleHQpLCAmcXAtPmRiKTsKIAl9IGVsc2UgewotCQlrZnJlZShxcC0+c3Eud3JpZCk7Ci0JCWtmcmVlKHFwLT5ycS53cmlkKTsKKwkJa3ZmcmVlKHFwLT5zcS53cmlkKTsKKwkJa3ZmcmVlKHFwLT5ycS53cmlkKTsKIAl9CiAKIGVycl9tdHQ6CkBAIC0xMDYyLDggKzEwNjksOCBAQAogCQkJCQkgICAgICAmcXAtPmRiKTsKIAkJaWJfdW1lbV9yZWxlYXNlKHFwLT51bWVtKTsKIAl9IGVsc2UgewotCQlrZnJlZShxcC0+c3Eud3JpZCk7Ci0JCWtmcmVlKHFwLT5ycS53cmlkKTsKKwkJa3ZmcmVlKHFwLT5zcS53cmlkKTsKKwkJa3ZmcmVlKHFwLT5ycS53cmlkKTsKIAkJaWYgKHFwLT5tbHg0X2liX3FwX3R5cGUgJiAoTUxYNF9JQl9RUFRfUFJPWFlfU01JX09XTkVSIHwKIAkJICAgIE1MWDRfSUJfUVBUX1BST1hZX1NNSSB8IE1MWDRfSUJfUVBUX1BST1hZX0dTSSkpCiAJCQlmcmVlX3Byb3h5X2J1ZnMoJmRldi0+aWJfZGV2LCBxcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3NycS5jCmluZGV4IGRjZTVkZmUuLmMzOTQzNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3NycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3NycS5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWx4NC9xcC5oPgogI2luY2x1ZGUgPGxpbnV4L21seDQvc3JxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgIm1seDRfaWIuaCIKICNpbmNsdWRlICJ1c2VyLmgiCkBAIC0xNzIsOCArMTczLDEyIEBACiAKIAkJc3JxLT53cmlkID0ga21hbGxvYyhzcnEtPm1zcnEubWF4ICogc2l6ZW9mICh1NjQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzcnEtPndyaWQpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycl9tdHQ7CisJCQlzcnEtPndyaWQgPSBfX3ZtYWxsb2Moc3JxLT5tc3JxLm1heCAqIHNpemVvZih1NjQpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMLCBQQUdFX0tFUk5FTCk7CisJCQlpZiAoIXNycS0+d3JpZCkgeworCQkJCWVyciA9IC1FTk9NRU07CisJCQkJZ290byBlcnJfbXR0OworCQkJfQogCQl9CiAJfQogCkBAIC0yMDQsNyArMjA5LDcgQEAKIAlpZiAocGQtPnVvYmplY3QpCiAJCW1seDRfaWJfZGJfdW5tYXBfdXNlcih0b19tdWNvbnRleHQocGQtPnVvYmplY3QtPmNvbnRleHQpLCAmc3JxLT5kYik7CiAJZWxzZQotCQlrZnJlZShzcnEtPndyaWQpOworCQlrdmZyZWUoc3JxLT53cmlkKTsKIAogZXJyX210dDoKIAltbHg0X210dF9jbGVhbnVwKGRldi0+ZGV2LCAmc3JxLT5tdHQpOwpAQCAtMjgxLDcgKzI4Niw3IEBACiAJCW1seDRfaWJfZGJfdW5tYXBfdXNlcih0b19tdWNvbnRleHQoc3JxLT51b2JqZWN0LT5jb250ZXh0KSwgJm1zcnEtPmRiKTsKIAkJaWJfdW1lbV9yZWxlYXNlKG1zcnEtPnVtZW0pOwogCX0gZWxzZSB7Ci0JCWtmcmVlKG1zcnEtPndyaWQpOworCQlrdmZyZWUobXNycS0+d3JpZCk7CiAJCW1seDRfYnVmX2ZyZWUoZGV2LT5kZXYsIG1zcnEtPm1zcnEubWF4IDw8IG1zcnEtPm1zcnEud3FlX3NoaWZ0LAogCQkJICAgICAgJm1zcnEtPmJ1Zik7CiAJCW1seDRfZGJfZnJlZShkZXYtPmRldiwgJm1zcnEtPmRiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jCmluZGV4IGVjODk5M2EuLjYwMDBmN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYwpAQCAtMzgxLDcgKzM4MSwxOSBAQAogCQkJfQogCQl9CiAJfSBlbHNlIGlmIChlbnQtPmN1ciA+IDIgKiBlbnQtPmxpbWl0KSB7Ci0JCWlmICghc29tZW9uZV9hZGRpbmcoY2FjaGUpICYmCisJCS8qCisJCSAqIFRoZSByZW1vdmVfa2V5cygpIGxvZ2ljIGlzIHBlcmZvcm1lZCBhcyBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJICogdGFzay4gU3VjaCB0YXNrIGlzIGludGVuZGVkIHRvIGJlIHJ1biB3aGVuIG5vIG90aGVyIGFjdGl2ZQorCQkgKiBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcuCisJCSAqCisJCSAqIFRoZSBuZWVkX3Jlc2NoZWQoKSB3aWxsIHJldHVybiBUUlVFIGlmIHRoZXJlIGFyZSB1c2VyIHRhc2tzCisJCSAqIHRvIGJlIGFjdGl2YXRlZCBpbiBuZWFyIGZ1dHVyZS4KKwkJICoKKwkJICogSW4gc3VjaCBjYXNlLCB3ZSBkb24ndCBleGVjdXRlIHJlbW92ZV9rZXlzKCkgYW5kIHBvc3Rwb25lCisJCSAqIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gd29yayB0byB0cnkgdG8gcnVuIGluIG5leHQgY3ljbGUsCisJCSAqIGluIG9yZGVyIHRvIGZyZWUgQ1BVIHJlc291cmNlcyB0byBvdGhlciB0YXNrcy4KKwkJICovCisJCWlmICghbmVlZF9yZXNjaGVkKCkgJiYgIXNvbWVvbmVfYWRkaW5nKGNhY2hlKSAmJgogCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBjYWNoZS0+bGFzdF9hZGQgKyAzMDAgKiBIWikpIHsKIAkJCXJlbW92ZV9rZXlzKGRldiwgaSwgMSk7CiAJCQlpZiAoZW50LT5jdXIgPiBlbnQtPmxpbWl0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWEuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hLmgKaW5kZXggYWU4MDU5MC4uMDQwYmI4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWEuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYS5oCkBAIC0yMzIsNiArMjMyLDEwIEBACiAJdTE2IGludGVyZmFjZV90eXBlOwogfTsKIAorZW51bSBvY3JkbWFfZmxhZ3MgeworCU9DUkRNQV9GTEFHU19MSU5LX1NUQVRVU19JTklUID0gMHgwMQorfTsKKwogc3RydWN0IG9jcmRtYV9kZXYgewogCXN0cnVjdCBpYl9kZXZpY2UgaWJkZXY7CiAJc3RydWN0IG9jcmRtYV9kZXZfYXR0ciBhdHRyOwpAQCAtMjg3LDYgKzI5MSw3IEBACiAJYXRvbWljX3QgdXBkYXRlX3NsOwogCXUxNiBwdmlkOwogCXUzMiBhc2ljX2lkOworCXUzMiBmbGFnczsKIAogCXVsb25nIGxhc3Rfc3RhdHNfdGltZTsKIAlzdHJ1Y3QgbXV0ZXggc3RhdHNfbG9jazsgLyogcHJvdmlkZSBzeW5jaCBmb3IgZGVidWdmcyBvcGVyYXRpb25zICovCkBAIC01OTEsNCArNTk2LDkgQEAKIAkJKHN0YXRlICYgT0NSRE1BX1NUQVRFX0ZMQUdfU1lOQyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggb2NyZG1hX2dldF9hZV9saW5rX3N0YXRlKHUzMiBhZV9zdGF0ZSkKK3sKKwlyZXR1cm4gKChhZV9zdGF0ZSAmIE9DUkRNQV9BRV9MU0NfTFNfTUFTSykgPj4gT0NSRE1BX0FFX0xTQ19MU19TSElGVCk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX2h3LmMKaW5kZXggMzBmNjdiZS4uMjgzY2E4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9ody5jCkBAIC01NzksNiArNTc5LDggQEAKIAogCWNtZC0+YXN5bmNfZXZlbnRfYml0bWFwID0gQklUKE9DUkRNQV9BU1lOQ19HUlA1X0VWRV9DT0RFKTsKIAljbWQtPmFzeW5jX2V2ZW50X2JpdG1hcCB8PSBCSVQoT0NSRE1BX0FTWU5DX1JETUFfRVZFX0NPREUpOworCS8qIFJlcXVlc3QgbGluayBldmVudHMgb24gdGhpcyAgTVEuICovCisJY21kLT5hc3luY19ldmVudF9iaXRtYXAgfD0gQklUKE9DUkRNQV9BU1lOQ19MSU5LX0VWRV9DT0RFKTsKIAogCWNtZC0+YXN5bmNfY3FpZF9yaW5nc2l6ZSA9IGNxLT5pZDsKIAljbWQtPmFzeW5jX2NxaWRfcmluZ3NpemUgfD0gKG9jcmRtYV9lbmNvZGVkX3FfbGVuKG1xLT5sZW4pIDw8CkBAIC04MTksMjAgKzgyMSw0MiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgb2NyZG1hX3Byb2Nlc3NfbGlua19zdGF0ZShzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBvY3JkbWFfYWVfbWNxZSAqY3FlKQoreworCXN0cnVjdCBvY3JkbWFfYWVfbG5rc3RfbWNxZSAqZXZ0OworCXU4IGxzdGF0ZTsKKworCWV2dCA9IChzdHJ1Y3Qgb2NyZG1hX2FlX2xua3N0X21jcWUgKiljcWU7CisJbHN0YXRlID0gb2NyZG1hX2dldF9hZV9saW5rX3N0YXRlKGV2dC0+c3BlZWRfc3RhdGVfcHRuKTsKKworCWlmICghKGxzdGF0ZSAmIE9DUkRNQV9BRV9MU0NfTExJTktfTUFTSykpCisJCXJldHVybjsKKworCWlmIChkZXYtPmZsYWdzICYgT0NSRE1BX0ZMQUdTX0xJTktfU1RBVFVTX0lOSVQpCisJCW9jcmRtYV91cGRhdGVfbGlua19zdGF0ZShkZXYsIChsc3RhdGUgJiBPQ1JETUFfTElOS19TVF9NQVNLKSk7Cit9CisKIHN0YXRpYyB2b2lkIG9jcmRtYV9wcm9jZXNzX2FjcWUoc3RydWN0IG9jcmRtYV9kZXYgKmRldiwgdm9pZCAqYWVfY3FlKQogewogCS8qIGFzeW5jIENRRSBwcm9jZXNzaW5nICovCiAJc3RydWN0IG9jcmRtYV9hZV9tY3FlICpjcWUgPSBhZV9jcWU7CiAJdTMyIGV2dF9jb2RlID0gKGNxZS0+dmFsaWRfYWVfZXZlbnQgJiBPQ1JETUFfQUVfTUNRRV9FVkVOVF9DT0RFX01BU0spID4+CiAJCQlPQ1JETUFfQUVfTUNRRV9FVkVOVF9DT0RFX1NISUZUOwotCi0JaWYgKGV2dF9jb2RlID09IE9DUkRNQV9BU1lOQ19SRE1BX0VWRV9DT0RFKQorCXN3aXRjaCAoZXZ0X2NvZGUpIHsKKwljYXNlIE9DUkRNQV9BU1lOQ19MSU5LX0VWRV9DT0RFOgorCQlvY3JkbWFfcHJvY2Vzc19saW5rX3N0YXRlKGRldiwgY3FlKTsKKwkJYnJlYWs7CisJY2FzZSBPQ1JETUFfQVNZTkNfUkRNQV9FVkVfQ09ERToKIAkJb2NyZG1hX2Rpc3BhdGNoX2liZXZlbnQoZGV2LCBjcWUpOwotCWVsc2UgaWYgKGV2dF9jb2RlID09IE9DUkRNQV9BU1lOQ19HUlA1X0VWRV9DT0RFKQorCQlicmVhazsKKwljYXNlIE9DUkRNQV9BU1lOQ19HUlA1X0VWRV9DT0RFOgogCQlvY3JkbWFfcHJvY2Vzc19ncnA1X2F5bmMoZGV2LCBjcWUpOwotCWVsc2UKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcHJfZXJyKCIlcyglZCkgaW52YWxpZCBldnQgY29kZT0weCV4XG4iLCBfX2Z1bmNfXywKIAkJICAgICAgIGRldi0+aWQsIGV2dF9jb2RlKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIG9jcmRtYV9wcm9jZXNzX21jcWUoc3RydWN0IG9jcmRtYV9kZXYgKmRldiwgc3RydWN0IG9jcmRtYV9tY3FlICpjcWUpCkBAIC0xMzYzLDcgKzEzODcsOCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBvY3JkbWFfbWJ4X2dldF9saW5rX3NwZWVkKHN0cnVjdCBvY3JkbWFfZGV2ICpkZXYsIHU4ICpsbmtfc3BlZWQpCitpbnQgb2NyZG1hX21ieF9nZXRfbGlua19zcGVlZChzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2LCB1OCAqbG5rX3NwZWVkLAorCQkJICAgICAgdTggKmxua19zdGF0ZSkKIHsKIAlpbnQgc3RhdHVzID0gLUVOT01FTTsKIAlzdHJ1Y3Qgb2NyZG1hX2dldF9saW5rX3NwZWVkX3JzcCAqcnNwOwpAQCAtMTM4NCw4ICsxNDA5LDExIEBACiAJCWdvdG8gbWJ4X2VycjsKIAogCXJzcCA9IChzdHJ1Y3Qgb2NyZG1hX2dldF9saW5rX3NwZWVkX3JzcCAqKWNtZDsKLQkqbG5rX3NwZWVkID0gKHJzcC0+cGZsdF9wcHNfbGRfcG51bSAmIE9DUkRNQV9QSFlfUFNfTUFTSykKLQkJCT4+IE9DUkRNQV9QSFlfUFNfU0hJRlQ7CisJaWYgKGxua19zcGVlZCkKKwkJKmxua19zcGVlZCA9IChyc3AtPnBmbHRfcHBzX2xkX3BudW0gJiBPQ1JETUFfUEhZX1BTX01BU0spCisJCQkgICAgICA+PiBPQ1JETUFfUEhZX1BTX1NISUZUOworCWlmIChsbmtfc3RhdGUpCisJCSpsbmtfc3RhdGUgPSAocnNwLT5yZXNfbG5rX3N0ICYgT0NSRE1BX0xJTktfU1RfTUFTSyk7CiAKIG1ieF9lcnI6CiAJa2ZyZWUoY21kKTsKQEAgLTI1MTUsOSArMjU0MywxMCBAQAogCW9jcmRtYV9jcHVfdG9fbGUzMigmY21kLT5wYXJhbXMuc2dpZFswXSwgc2l6ZW9mKGNtZC0+cGFyYW1zLnNnaWQpKTsKIAljbWQtPnBhcmFtcy52bGFuX2RtYWNfYjRfdG9fYjUgPSBtYWNfYWRkcls0XSB8IChtYWNfYWRkcls1XSA8PCA4KTsKIAotCWlmICh2bGFuX2lkIDwgMHgxMDAwKSB7Ci0JCWlmIChkZXYtPnBmY19zdGF0ZSkgewotCQkJdmxhbl9pZCA9IDA7CisJaWYgKHZsYW5faWQgPT0gMHhGRkZGKQorCQl2bGFuX2lkID0gMDsKKwlpZiAodmxhbl9pZCB8fCBkZXYtPnBmY19zdGF0ZSkgeworCQlpZiAoIXZsYW5faWQpIHsKIAkJCXByX2Vycigib2NyZG1hJWQ6VXNpbmcgVkxBTiB3aXRoIFBGQyBpcyByZWNvbW1lbmRlZFxuIiwKIAkJCSAgICAgICBkZXYtPmlkKTsKIAkJCXByX2Vycigib2NyZG1hJWQ6VXNpbmcgVkxBTiAwIGZvciB0aGlzIGNvbm5lY3Rpb25cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfaHcuaAppbmRleCA3ZWQ4ODVjLi5lYmMxZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9ody5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX2h3LmgKQEAgLTEwNiw3ICsxMDYsOCBAQAogCQkgICAgICAgYm9vbCBzb2xpY2l0ZWQsIHUxNiBjcWVfcG9wcGVkKTsKIAogLyogdmVyYnMgc3BlY2lmaWMgbWFpbGJveCBjb21tYW5kcyAqLwotaW50IG9jcmRtYV9tYnhfZ2V0X2xpbmtfc3BlZWQoc3RydWN0IG9jcmRtYV9kZXYgKmRldiwgdTggKmxua19zcGVlZCk7CitpbnQgb2NyZG1hX21ieF9nZXRfbGlua19zcGVlZChzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2LCB1OCAqbG5rX3NwZWVkLAorCQkJICAgICAgdTggKmxua19zdCk7CiBpbnQgb2NyZG1hX3F1ZXJ5X2NvbmZpZyhzdHJ1Y3Qgb2NyZG1hX2RldiAqLAogCQkJc3RydWN0IG9jcmRtYV9tYnhfcXVlcnlfY29uZmlnICpjb25maWcpOwogCkBAIC0xNTMsNSArMTU0LDYgQEAKIHZvaWQgb2NyZG1hX2luaXRfc2VydmljZV9sZXZlbChzdHJ1Y3Qgb2NyZG1hX2RldiAqKTsKIHZvaWQgb2NyZG1hX2FsbG9jX3BkX3Bvb2woc3RydWN0IG9jcmRtYV9kZXYgKmRldik7CiB2b2lkIG9jcmRtYV9mcmVlX3BkX3JhbmdlKHN0cnVjdCBvY3JkbWFfZGV2ICpkZXYpOwordm9pZCBvY3JkbWFfdXBkYXRlX2xpbmtfc3RhdGUoc3RydWN0IG9jcmRtYV9kZXYgKmRldiwgdTggbHN0YXRlKTsKIAogI2VuZGlmCQkJCS8qIF9fT0NSRE1BX0hXX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfbWFpbi5jCmluZGV4IDYyYjcwMDkuLjNhZmI0MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV9tYWluLmMKQEAgLTI5MCw2ICsyOTAsNyBAQAogc3RhdGljIHN0cnVjdCBvY3JkbWFfZGV2ICpvY3JkbWFfYWRkKHN0cnVjdCBiZV9kZXZfaW5mbyAqZGV2X2luZm8pCiB7CiAJaW50IHN0YXR1cyA9IDAsIGk7CisJdTggbHN0YXRlID0gMDsKIAlzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2OwogCiAJZGV2ID0gKHN0cnVjdCBvY3JkbWFfZGV2ICopaWJfYWxsb2NfZGV2aWNlKHNpemVvZihzdHJ1Y3Qgb2NyZG1hX2RldikpOwpAQCAtMzE5LDYgKzMyMCwxMSBAQAogCWlmIChzdGF0dXMpCiAJCWdvdG8gYWxsb2NfZXJyOwogCisJLyogUXVlcnkgTGluayBzdGF0ZSBhbmQgdXBkYXRlICovCisJc3RhdHVzID0gb2NyZG1hX21ieF9nZXRfbGlua19zcGVlZChkZXYsIE5VTEwsICZsc3RhdGUpOworCWlmICghc3RhdHVzKQorCQlvY3JkbWFfdXBkYXRlX2xpbmtfc3RhdGUoZGV2LCBsc3RhdGUpOworCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob2NyZG1hX2F0dHJpYnV0ZXMpOyBpKyspCiAJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+aWJkZXYuZGV2LCBvY3JkbWFfYXR0cmlidXRlc1tpXSkpCiAJCQlnb3RvIHN5c2ZzX2VycjsKQEAgLTM3Myw3ICszNzksNyBAQAogCW9jcmRtYV9yZW1vdmVfZnJlZShkZXYpOwogfQogCi1zdGF0aWMgaW50IG9jcmRtYV9vcGVuKHN0cnVjdCBvY3JkbWFfZGV2ICpkZXYpCitzdGF0aWMgaW50IG9jcmRtYV9kaXNwYXRjaF9wb3J0X2FjdGl2ZShzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2KQogewogCXN0cnVjdCBpYl9ldmVudCBwb3J0X2V2ZW50OwogCkBAIC0zODQsMzIgKzM5MCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2NyZG1hX2Nsb3NlKHN0cnVjdCBvY3JkbWFfZGV2ICpkZXYpCitzdGF0aWMgaW50IG9jcmRtYV9kaXNwYXRjaF9wb3J0X2Vycm9yKHN0cnVjdCBvY3JkbWFfZGV2ICpkZXYpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IG9jcmRtYV9xcCAqcXAsICoqY3VyX3FwOwogCXN0cnVjdCBpYl9ldmVudCBlcnJfZXZlbnQ7Ci0Jc3RydWN0IGliX3FwX2F0dHIgYXR0cnM7Ci0JaW50IGF0dHJfbWFzayA9IElCX1FQX1NUQVRFOwotCi0JYXR0cnMucXBfc3RhdGUgPSBJQl9RUFNfRVJSOwotCW11dGV4X2xvY2soJmRldi0+ZGV2X2xvY2spOwotCWlmIChkZXYtPnFwX3RibCkgewotCQljdXJfcXAgPSBkZXYtPnFwX3RibDsKLQkJZm9yIChpID0gMDsgaSA8IE9DUkRNQV9NQVhfUVA7IGkrKykgewotCQkJcXAgPSBjdXJfcXBbaV07Ci0JCQlpZiAocXAgJiYgcXAtPmlicXAucXBfdHlwZSAhPSBJQl9RUFRfR1NJKSB7Ci0JCQkJLyogY2hhbmdlIHRoZSBRUCBzdGF0ZSB0byBFUlJPUiAqLwotCQkJCV9vY3JkbWFfbW9kaWZ5X3FwKCZxcC0+aWJxcCwgJmF0dHJzLCBhdHRyX21hc2spOwotCi0JCQkJZXJyX2V2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUVBfRkFUQUw7Ci0JCQkJZXJyX2V2ZW50LmVsZW1lbnQucXAgPSAmcXAtPmlicXA7Ci0JCQkJZXJyX2V2ZW50LmRldmljZSA9ICZkZXYtPmliZGV2OwotCQkJCWliX2Rpc3BhdGNoX2V2ZW50KCZlcnJfZXZlbnQpOwotCQkJfQotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZGV2LT5kZXZfbG9jayk7CiAKIAllcnJfZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9QT1JUX0VSUjsKIAllcnJfZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IDE7CkBAIC00MjAsNyArNDAzLDcgQEAKIAogc3RhdGljIHZvaWQgb2NyZG1hX3NodXRkb3duKHN0cnVjdCBvY3JkbWFfZGV2ICpkZXYpCiB7Ci0Jb2NyZG1hX2Nsb3NlKGRldik7CisJb2NyZG1hX2Rpc3BhdGNoX3BvcnRfZXJyb3IoZGV2KTsKIAlvY3JkbWFfcmVtb3ZlKGRldik7CiB9CiAKQEAgLTQzMSwxOCArNDE0LDI4IEBACiBzdGF0aWMgdm9pZCBvY3JkbWFfZXZlbnRfaGFuZGxlcihzdHJ1Y3Qgb2NyZG1hX2RldiAqZGV2LCB1MzIgZXZlbnQpCiB7CiAJc3dpdGNoIChldmVudCkgewotCWNhc2UgQkVfREVWX1VQOgotCQlvY3JkbWFfb3BlbihkZXYpOwotCQlicmVhazsKLQljYXNlIEJFX0RFVl9ET1dOOgotCQlvY3JkbWFfY2xvc2UoZGV2KTsKLQkJYnJlYWs7CiAJY2FzZSBCRV9ERVZfU0hVVERPV046CiAJCW9jcmRtYV9zaHV0ZG93bihkZXYpOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiB9CiAKK3ZvaWQgb2NyZG1hX3VwZGF0ZV9saW5rX3N0YXRlKHN0cnVjdCBvY3JkbWFfZGV2ICpkZXYsIHU4IGxzdGF0ZSkKK3sKKwlpZiAoIShkZXYtPmZsYWdzICYgT0NSRE1BX0ZMQUdTX0xJTktfU1RBVFVTX0lOSVQpKSB7CisJCWRldi0+ZmxhZ3MgfD0gT0NSRE1BX0ZMQUdTX0xJTktfU1RBVFVTX0lOSVQ7CisJCWlmICghbHN0YXRlKQorCQkJcmV0dXJuOworCX0KKworCWlmICghbHN0YXRlKQorCQlvY3JkbWFfZGlzcGF0Y2hfcG9ydF9lcnJvcihkZXYpOworCWVsc2UKKwkJb2NyZG1hX2Rpc3BhdGNoX3BvcnRfYWN0aXZlKGRldik7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgb2NyZG1hX2RyaXZlciBvY3JkbWFfZHJ2ID0gewogCS5uYW1lCQkJPSAib2NyZG1hX2RyaXZlciIsCiAJLmFkZAkJCT0gb2NyZG1hX2FkZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX3NsaS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc2xpLmgKaW5kZXggNmEzODI2OC4uOTlkZDZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc2xpLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfc2xpLmgKQEAgLTQ2NSw4ICs0NjUsMTEgQEAKIAl1MzIgdmFsaWRfYWVfZXZlbnQ7CiB9OwogCi0jZGVmaW5lIE9DUkRNQV9BU1lOQ19SRE1BX0VWRV9DT0RFIDB4MTQKLSNkZWZpbmUgT0NSRE1BX0FTWU5DX0dSUDVfRVZFX0NPREUgMHg1CitlbnVtIG9jcmRtYV9hc3luY19ldmVudF9jb2RlIHsKKwlPQ1JETUFfQVNZTkNfTElOS19FVkVfQ09ERQk9IDB4MDEsCisJT0NSRE1BX0FTWU5DX0dSUDVfRVZFX0NPREUJPSAweDA1LAorCU9DUkRNQV9BU1lOQ19SRE1BX0VWRV9DT0RFCT0gMHgxNAorfTsKIAogZW51bSBvY3JkbWFfYXN5bmNfZ3JwNV9ldmVudHMgewogCU9DUkRNQV9BU1lOQ19FVkVOVF9RT1NfVkFMVUUJPSAweDAxLApAQCAtNDg5LDYgKzQ5Miw0NCBAQAogCU9DUkRNQV9NQVhfQVNZTkNfRVJST1JTCiB9OwogCitzdHJ1Y3Qgb2NyZG1hX2FlX2xua3N0X21jcWUgeworCXUzMiBzcGVlZF9zdGF0ZV9wdG47CisJdTMyIHFvc19yZWFzb25fZmFsdXQ7CisJdTMyIGV2dF90YWc7CisJdTMyIHZhbGlkX2FlX2V2ZW50OworfTsKKworZW51bSB7CisJT0NSRE1BX0FFX0xTQ19QT1JUX05VTV9NQVNLCT0gMHgzRiwKKwlPQ1JETUFfQUVfTFNDX1BUX1NISUZUCQk9IDB4MDYsCisJT0NSRE1BX0FFX0xTQ19QVF9NQVNLCQk9ICgweDAzIDw8CisJCQlPQ1JETUFfQUVfTFNDX1BUX1NISUZUKSwKKwlPQ1JETUFfQUVfTFNDX0xTX1NISUZUCQk9IDB4MDgsCisJT0NSRE1BX0FFX0xTQ19MU19NQVNLCQk9ICgweEZGIDw8CisJCQlPQ1JETUFfQUVfTFNDX0xTX1NISUZUKSwKKwlPQ1JETUFfQUVfTFNDX0xEX1NISUZUCQk9IDB4MTAsCisJT0NSRE1BX0FFX0xTQ19MRF9NQVNLCQk9ICgweEZGIDw8CisJCQlPQ1JETUFfQUVfTFNDX0xEX1NISUZUKSwKKwlPQ1JETUFfQUVfTFNDX1BQU19TSElGVAkJPSAweDE4LAorCU9DUkRNQV9BRV9MU0NfUFBTX01BU0sJCT0gKDB4RkYgPDwKKwkJCU9DUkRNQV9BRV9MU0NfUFBTX1NISUZUKSwKKwlPQ1JETUFfQUVfTFNDX1BQRl9NQVNLCQk9IDB4RkYsCisJT0NSRE1BX0FFX0xTQ19FUl9TSElGVAkJPSAweDA4LAorCU9DUkRNQV9BRV9MU0NfRVJfTUFTSwkJPSAoMHhGRiA8PAorCQkJT0NSRE1BX0FFX0xTQ19FUl9TSElGVCksCisJT0NSRE1BX0FFX0xTQ19RT1NfU0hJRlQJCT0gMHgxMCwKKwlPQ1JETUFfQUVfTFNDX1FPU19NQVNLCQk9ICgweEZGRkYgPDwKKwkJCU9DUkRNQV9BRV9MU0NfUU9TX1NISUZUKQorfTsKKworZW51bSB7CisJT0NSRE1BX0FFX0xTQ19QTElOS19ET1dOCT0gMHgwMCwKKwlPQ1JETUFfQUVfTFNDX1BMSU5LX1VQCQk9IDB4MDEsCisJT0NSRE1BX0FFX0xTQ19MTElOS19ET1dOCT0gMHgwMiwKKwlPQ1JETUFfQUVfTFNDX0xMSU5LX01BU0sJPSAweDAyLAorCU9DUkRNQV9BRV9MU0NfTExJTktfVVAJCT0gMHgwMworfTsKKwogLyogbWFpbGJveCBjb21tYW5kIHJlcXVlc3QgYW5kIHJlc3BvbnNlcyAqLwogZW51bSB7CiAJT0NSRE1BX01CWF9RVUVSWV9DRkdfQ1FfT1ZFUkZMT1dfU0hJRlQJCT0gMiwKQEAgLTY3Niw3ICs3MTcsNyBAQAogCU9DUkRNQV9QSFlfUEZMVF9TSElGVAk9IDB4MTgsCiAJT0NSRE1BX1FPU19MTktTUF9NQVNLCT0gMHhGRkZGMDAwMCwKIAlPQ1JETUFfUU9TX0xOS1NQX1NISUZUCT0gMHgxMCwKLQlPQ1JETUFfTExTVF9NQVNLCT0gMHhGRiwKKwlPQ1JETUFfTElOS19TVF9NQVNLCT0gMHgwMSwKIAlPQ1JETUFfUExGQ19NQVNLCT0gMHgwMDAwMDQwMCwKIAlPQ1JETUFfUExGQ19TSElGVAk9IDB4OCwKIAlPQ1JETUFfUExSRkNfTUFTSwk9IDB4MDAwMDAyMDAsCkBAIC02OTEsNyArNzMyLDcgQEAKIAogCXUzMiBwZmx0X3Bwc19sZF9wbnVtOwogCXUzMiBxb3NfbHNwOwotCXUzMiByZXNfbGxzOworCXUzMiByZXNfbG5rX3N0OwogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L29jcmRtYS9vY3JkbWFfdmVyYnMuYwppbmRleCA1ODMwMDFiLi43NmU5NmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvb2NyZG1hL29jcmRtYV92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9vY3JkbWEvb2NyZG1hX3ZlcmJzLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCWludCBzdGF0dXM7CiAJdTggc3BlZWQ7CiAKLQlzdGF0dXMgPSBvY3JkbWFfbWJ4X2dldF9saW5rX3NwZWVkKGRldiwgJnNwZWVkKTsKKwlzdGF0dXMgPSBvY3JkbWFfbWJ4X2dldF9saW5rX3NwZWVkKGRldiwgJnNwZWVkLCBOVUxMKTsKIAlpZiAoc3RhdHVzKQogCQlzcGVlZCA9IE9DUkRNQV9QSFlTX0xJTktfU1BFRURfWkVSTzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcXNmcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcXNmcC5jCmluZGV4IDVlMjdmNzYuLjRjN2MzYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3FzZnAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9xc2ZwLmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogCQlxaWJfZGV2X3BvcnRlcnIocHBkLT5kZCwgcHBkLT5wb3J0LAogCQkJCSJRU0ZQIGJ5dGUwIGlzIDB4JTAyWCwgUy9CIDB4MEMvRFxuIiwgcGVla1swXSk7CiAKLQlpZiAoKHBlZWtbMl0gJiAyKSA9PSAwKSB7CisJaWYgKChwZWVrWzJdICYgNCkgPT0gMCkgewogCQkvKgogCQkgKiBJZiBjYWJsZSBpcyBwYWdlZCwgcmF0aGVyIHRoYW4gImZsYXQgbWVtb3J5Iiwgd2UgbmVlZCB0bwogCQkgKiBzZXQgdGhlIHBhZ2UgdG8gemVybywgRXZlbiBpZiBpdCBhbHJlYWR5IGFwcGVhcnMgdG8gYmUgemVyby4KQEAgLTUzOCw3ICs1MzgsNyBAQAogCXNvZmFyICs9IHNjbnByaW50ZihidWYgKyBzb2ZhciwgbGVuIC0gc29mYXIsICJEYXRlOiUuKnNcbiIsCiAJCQkgICBRU0ZQX0RBVEVfTEVOLCBjZC5kYXRlKTsKIAlzb2ZhciArPSBzY25wcmludGYoYnVmICsgc29mYXIsIGxlbiAtIHNvZmFyLCAiTG90OiUuKnNcbiIsCi0JCQkgICBRU0ZQX0xPVF9MRU4sIGNkLmRhdGUpOworCQkJICAgUVNGUF9MT1RfTEVOLCBjZC5sb3QpOwogCiAJd2hpbGUgKGJpZHggPCBRU0ZQX0RFRkFVTFRfSERSX0NOVCkgewogCQlpbnQgaWlkeDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3ZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl92ZXJicy5oCmluZGV4IDJiYWY1YWQuLmJjODAzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3ZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdmVyYnMuaApAQCAtMzI5LDkgKzMyOSw5IEBACiBzdHJ1Y3QgcWliX21yIHsKIAlzdHJ1Y3QgaWJfbXIgaWJtcjsKIAlzdHJ1Y3QgaWJfdW1lbSAqdW1lbTsKLQlzdHJ1Y3QgcWliX21yZWdpb24gbXI7ICAvKiBtdXN0IGJlIGxhc3QgKi8KIAl1NjQgKnBhZ2VzOwogCXUzMiBucGFnZXM7CisJc3RydWN0IHFpYl9tcmVnaW9uIG1yOyAgLyogbXVzdCBiZSBsYXN0ICovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKaW5kZXggYTkzMDcwMi4uNDJmNGRhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCkBAIC0xMjkzLDcgKzEyOTMsNyBAQAogCQlpZiAobXJfc3RhdHVzLmZhaWxfc3RhdHVzICYgSUJfTVJfQ0hFQ0tfU0lHX1NUQVRVUykgewogCQkJc2VjdG9yX3Qgc2VjdG9yX29mZiA9IG1yX3N0YXR1cy5zaWdfZXJyLnNpZ19lcnJfb2Zmc2V0OwogCi0JCQlkb19kaXYoc2VjdG9yX29mZiwgc2VjdG9yX3NpemUgKyA4KTsKKwkJCXNlY3Rvcl9kaXYoc2VjdG9yX29mZiwgc2VjdG9yX3NpemUgKyA4KTsKIAkJCSpzZWN0b3IgPSBzY3NpX2dldF9sYmEoaXNlcl90YXNrLT5zYykgKyBzZWN0b3Jfb2ZmOwogCiAJCQlwcl9lcnIoIlBJIGVycm9yIGZvdW5kIHR5cGUgJWQgYXQgc2VjdG9yICVsbHggIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydC9pYl9pc2VydC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VydC9pYl9pc2VydC5jCmluZGV4IGRmYmJiYjIuLjhhNTFjM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlcnQvaWJfaXNlcnQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXJ0L2liX2lzZXJ0LmMKQEAgLTE1NywxNiArMTU3LDkgQEAKIAlhdHRyLnJlY3ZfY3EgPSBjb21wLT5jcTsKIAlhdHRyLmNhcC5tYXhfc2VuZF93ciA9IElTRVJUX1FQX01BWF9SRVFfRFRPUzsKIAlhdHRyLmNhcC5tYXhfcmVjdl93ciA9IElTRVJUX1FQX01BWF9SRUNWX0RUT1MgKyAxOwotCS8qCi0JICogRklYTUU6IFVzZSBkZXZhdHRyLm1heF9zZ2UgLSAyIGZvciBtYXhfc2VuZF9zZ2UgYXMKLQkgKiB3b3JrLWFyb3VuZCBmb3IgUkRNQV9SRUFEcyB3aXRoIENvbm5lY3RYLTIuCi0JICoKLQkgKiBBbHNvLCBzdGlsbCBtYWtlIHN1cmUgdG8gaGF2ZSBhdCBsZWFzdCB0d28gU0dFcyBmb3IKLQkgKiBvdXRnb2luZyBjb250cm9sIFBEVSByZXNwb25zZXMuCi0JICovCi0JYXR0ci5jYXAubWF4X3NlbmRfc2dlID0gbWF4KDIsIGRldmljZS0+ZGV2X2F0dHIubWF4X3NnZSAtIDIpOwotCWlzZXJ0X2Nvbm4tPm1heF9zZ2UgPSBhdHRyLmNhcC5tYXhfc2VuZF9zZ2U7Ci0KKwlhdHRyLmNhcC5tYXhfc2VuZF9zZ2UgPSBkZXZpY2UtPmRldl9hdHRyLm1heF9zZ2U7CisJaXNlcnRfY29ubi0+bWF4X3NnZSA9IG1pbihkZXZpY2UtPmRldl9hdHRyLm1heF9zZ2UsCisJCQkJICBkZXZpY2UtPmRldl9hdHRyLm1heF9zZ2VfcmQpOwogCWF0dHIuY2FwLm1heF9yZWN2X3NnZSA9IDE7CiAJYXR0ci5zcV9zaWdfdHlwZSA9IElCX1NJR05BTF9SRVFfV1I7CiAJYXR0ci5xcF90eXBlID0gSUJfUVBUX1JDOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwppbmRleCA5OTA5MDIyLi4zZGI5YTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJc3RydWN0IGliX3FwICpxcDsKIAlzdHJ1Y3QgaWJfZm1yX3Bvb2wgKmZtcl9wb29sID0gTlVMTDsKIAlzdHJ1Y3Qgc3JwX2ZyX3Bvb2wgKmZyX3Bvb2wgPSBOVUxMOwotCWNvbnN0IGludCBtID0gMSArIGRldi0+dXNlX2Zhc3RfcmVnOworCWNvbnN0IGludCBtID0gZGV2LT51c2VfZmFzdF9yZWcgPyAzIDogMTsKIAlzdHJ1Y3QgaWJfY3FfaW5pdF9hdHRyIGNxX2F0dHIgPSB7fTsKIAlpbnQgcmV0OwogCkBAIC05OTQsMTYgKzk5NCwxNiBAQAogCiAJcmV0ID0gc3JwX2xvb2t1cF9wYXRoKGNoKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAogCXdoaWxlICgxKSB7CiAJCWluaXRfY29tcGxldGlvbigmY2gtPmRvbmUpOwogCQlyZXQgPSBzcnBfc2VuZF9yZXEoY2gsIG11bHRpY2gpOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0OwogCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNoLT5kb25lKTsKIAkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBvdXQ7CiAKIAkJLyoKIAkJICogVGhlIENNIGV2ZW50IGhhbmRsaW5nIGNvZGUgd2lsbCBzZXQgc3RhdHVzIHRvCkBAIC0xMDExLDE1ICsxMDExLDE2IEBACiAJCSAqIGJhY2ssIG9yIFNSUF9ETElEX1JFRElSRUNUIGlmIHdlIGdldCBhIGxpZC9xcAogCQkgKiByZWRpcmVjdCBSRUogYmFjay4KIAkJICovCi0JCXN3aXRjaCAoY2gtPnN0YXR1cykgeworCQlyZXQgPSBjaC0+c3RhdHVzOworCQlzd2l0Y2ggKHJldCkgewogCQljYXNlIDA6CiAJCQljaC0+Y29ubmVjdGVkID0gdHJ1ZTsKLQkJCXJldHVybiAwOworCQkJZ290byBvdXQ7CiAKIAkJY2FzZSBTUlBfUE9SVF9SRURJUkVDVDoKIAkJCXJldCA9IHNycF9sb29rdXBfcGF0aChjaCk7CiAJCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7CisJCQkJZ290byBvdXQ7CiAJCQlicmVhazsKIAogCQljYXNlIFNSUF9ETElEX1JFRElSRUNUOgpAQCAtMTAyOCwxMyArMTAyOSwxNiBAQAogCQljYXNlIFNSUF9TVEFMRV9DT05OOgogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYCiAJCQkJICAgICAiZ2l2aW5nIHVwIG9uIHN0YWxlIGNvbm5lY3Rpb25cbiIpOwotCQkJY2gtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOwotCQkJcmV0dXJuIGNoLT5zdGF0dXM7CisJCQlyZXQgPSAtRUNPTk5SRVNFVDsKKwkJCWdvdG8gb3V0OwogCiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gY2gtPnN0YXR1czsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQorCitvdXQ6CisJcmV0dXJuIHJldCA8PSAwID8gcmV0IDogLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBzcnBfaW52X3JrZXkoc3RydWN0IHNycF9yZG1hX2NoICpjaCwgdTMyIHJrZXkpCkBAIC0xMzA5LDcgKzEzMTMsNyBAQAogfQogCiBzdGF0aWMgaW50IHNycF9tYXBfZmluaXNoX2ZyKHN0cnVjdCBzcnBfbWFwX3N0YXRlICpzdGF0ZSwKLQkJCSAgICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCkKKwkJCSAgICAgc3RydWN0IHNycF9yZG1hX2NoICpjaCwgaW50IHNnX25lbnRzKQogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGNoLT50YXJnZXQ7CiAJc3RydWN0IHNycF9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXY7CkBAIC0xMzI0LDEwICsxMzI4LDEwIEBACiAKIAlXQVJOX09OX09OQ0UoIWRldi0+dXNlX2Zhc3RfcmVnKTsKIAotCWlmIChzdGF0ZS0+c2dfbmVudHMgPT0gMCkKKwlpZiAoc2dfbmVudHMgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc3RhdGUtPnNnX25lbnRzID09IDEgJiYgdGFyZ2V0LT5nbG9iYWxfbXIpIHsKKwlpZiAoc2dfbmVudHMgPT0gMSAmJiB0YXJnZXQtPmdsb2JhbF9tcikgewogCQlzcnBfbWFwX2Rlc2Moc3RhdGUsIHNnX2RtYV9hZGRyZXNzKHN0YXRlLT5zZyksCiAJCQkgICAgIHNnX2RtYV9sZW4oc3RhdGUtPnNnKSwKIAkJCSAgICAgdGFyZ2V0LT5nbG9iYWxfbXItPnJrZXkpOwpAQCAtMTM0MSw4ICsxMzQ1LDcgQEAKIAlya2V5ID0gaWJfaW5jX3JrZXkoZGVzYy0+bXItPnJrZXkpOwogCWliX3VwZGF0ZV9mYXN0X3JlZ19rZXkoZGVzYy0+bXIsIHJrZXkpOwogCi0JbiA9IGliX21hcF9tcl9zZyhkZXNjLT5tciwgc3RhdGUtPnNnLCBzdGF0ZS0+c2dfbmVudHMsCi0JCQkgZGV2LT5tcl9wYWdlX3NpemUpOworCW4gPSBpYl9tYXBfbXJfc2coZGVzYy0+bXIsIHN0YXRlLT5zZywgc2dfbmVudHMsIGRldi0+bXJfcGFnZV9zaXplKTsKIAlpZiAodW5saWtlbHkobiA8IDApKQogCQlyZXR1cm4gbjsKIApAQCAtMTQ0OCwxNiArMTQ1MSwxNSBAQAogCXN0YXRlLT5mci5uZXh0ID0gcmVxLT5mcl9saXN0OwogCXN0YXRlLT5mci5lbmQgPSByZXEtPmZyX2xpc3QgKyBjaC0+dGFyZ2V0LT5jbWRfc2dfY250OwogCXN0YXRlLT5zZyA9IHNjYXQ7Ci0Jc3RhdGUtPnNnX25lbnRzID0gc2NzaV9zZ19jb3VudChyZXEtPnNjbW5kKTsKIAotCXdoaWxlIChzdGF0ZS0+c2dfbmVudHMpIHsKKwl3aGlsZSAoY291bnQpIHsKIAkJaW50IGksIG47CiAKLQkJbiA9IHNycF9tYXBfZmluaXNoX2ZyKHN0YXRlLCBjaCk7CisJCW4gPSBzcnBfbWFwX2ZpbmlzaF9mcihzdGF0ZSwgY2gsIGNvdW50KTsKIAkJaWYgKHVubGlrZWx5KG4gPCAwKSkKIAkJCXJldHVybiBuOwogCi0JCXN0YXRlLT5zZ19uZW50cyAtPSBuOworCQljb3VudCAtPSBuOwogCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogCQkJc3RhdGUtPnNnID0gc2dfbmV4dChzdGF0ZS0+c2cpOwogCX0KQEAgLTE1MTcsMTAgKzE1MTksMTIgQEAKIAogCWlmIChkZXYtPnVzZV9mYXN0X3JlZykgewogCQlzdGF0ZS5zZyA9IGlkYl9zZzsKLQkJc3RhdGUuc2dfbmVudHMgPSAxOwogCQlzZ19zZXRfYnVmKGlkYl9zZywgcmVxLT5pbmRpcmVjdF9kZXNjLCBpZGJfbGVuKTsKIAkJaWRiX3NnLT5kbWFfYWRkcmVzcyA9IHJlcS0+aW5kaXJlY3RfZG1hX2FkZHI7IC8qIGhhY2shICovCi0JCXJldCA9IHNycF9tYXBfZmluaXNoX2ZyKCZzdGF0ZSwgY2gpOworI2lmZGVmIENPTkZJR19ORUVEX1NHX0RNQV9MRU5HVEgKKwkJaWRiX3NnLT5kbWFfbGVuZ3RoID0gaWRiX3NnLT5sZW5ndGg7CSAgICAgIC8qIGhhY2teMiAqLworI2VuZGlmCisJCXJldCA9IHNycF9tYXBfZmluaXNoX2ZyKCZzdGF0ZSwgY2gsIDEpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfSBlbHNlIGlmIChkZXYtPnVzZV9mbXIpIHsKQEAgLTE2NTUsNyArMTY1OSw3IEBACiAJCQlyZXR1cm4gcmV0OwogCQlyZXEtPm5tZGVzYysrOwogCX0gZWxzZSB7Ci0JCWlkYl9ya2V5ID0gdGFyZ2V0LT5nbG9iYWxfbXItPnJrZXk7CisJCWlkYl9ya2V5ID0gY3B1X3RvX2JlMzIodGFyZ2V0LT5nbG9iYWxfbXItPnJrZXkpOwogCX0KIAogCWluZGlyZWN0X2hkci0+dGFibGVfZGVzYy52YSA9IGNwdV90b19iZTY0KHJlcS0+aW5kaXJlY3RfZG1hX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaAppbmRleCA4N2EyYTkxLi5mNmFmNTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaApAQCAtMzAwLDEwICszMDAsNyBAQAogCWRtYV9hZGRyX3QJCWJhc2VfZG1hX2FkZHI7CiAJdTMyCQkJZG1hX2xlbjsKIAl1MzIJCQl0b3RhbF9sZW47Ci0JdW5pb24gewotCQl1bnNpZ25lZCBpbnQJbnBhZ2VzOwotCQlpbnQJCXNnX25lbnRzOwotCX07CisJdW5zaWduZWQgaW50CQlucGFnZXM7CiAJdW5zaWduZWQgaW50CQlubWRlc2M7CiAJdW5zaWduZWQgaW50CQluZGVzYzsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2RiOS5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9kYjkuYwppbmRleCA5MzJkMDczLi5kYTMyNjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2RiOS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMKQEAgLTU5Miw2ICs1OTIsNyBAQAogCQlyZXR1cm47CiAJfQogCisJbWVtc2V0KCZkYjlfcGFycG9ydF9jYiwgMCwgc2l6ZW9mKGRiOV9wYXJwb3J0X2NiKSk7CiAJZGI5X3BhcnBvcnRfY2IuZmxhZ3MgPSBQQVJQT1JUX0ZMQUdfRVhDTDsKIAogCXBkID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZfbW9kZWwocHAsICJkYjkiLCAmZGI5X3BhcnBvcnRfY2IsIHBvcnRfaWR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2FtZWNvbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKaW5kZXggNWE2NzJkYy4uZWFlMTRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nYW1lY29uLmMKQEAgLTk1MSw2ICs5NTEsNyBAQAogCXBhZHMgPSBnY19jZmdbcG9ydF9pZHhdLmFyZ3MgKyAxOwogCW5fcGFkcyA9IGdjX2NmZ1twb3J0X2lkeF0ubmFyZ3MgLSAxOwogCisJbWVtc2V0KCZnY19wYXJwb3J0X2NiLCAwLCBzaXplb2YoZ2NfcGFycG9ydF9jYikpOwogCWdjX3BhcnBvcnRfY2IuZmxhZ3MgPSBQQVJQT1JUX0ZMQUdfRVhDTDsKIAogCXBkID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZfbW9kZWwocHAsICJnYW1lY29uIiwgJmdjX3BhcnBvcnRfY2IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCmluZGV4IDlmNWJjYTIuLjc3ZjU3NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCkBAIC0xODEsNiArMTgxLDcgQEAKIAluX2J1dHRvbnMgPSB0Z2Z4X2NmZ1twb3J0X2lkeF0uYXJncyArIDE7CiAJbl9kZXZzID0gdGdmeF9jZmdbcG9ydF9pZHhdLm5hcmdzIC0gMTsKIAorCW1lbXNldCgmdGdmeF9wYXJwb3J0X2NiLCAwLCBzaXplb2YodGdmeF9wYXJwb3J0X2NiKSk7CiAJdGdmeF9wYXJwb3J0X2NiLmZsYWdzID0gUEFSUE9SVF9GTEFHX0VYQ0w7CiAKIAlwZCA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2X21vZGVsKHBwLCAidHVyYm9ncmFmeCIsICZ0Z2Z4X3BhcnBvcnRfY2IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3dhbGtlcmEwNzAxLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3dhbGtlcmEwNzAxLmMKaW5kZXggOWMwN2ZlOS4uNzBhODkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay93YWxrZXJhMDcwMS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svd2Fsa2VyYTA3MDEuYwpAQCAtMjE4LDYgKzIxOCw3IEBACiAKIAl3LT5wYXJwb3J0ID0gcHA7CiAKKwltZW1zZXQoJndhbGtlcmEwNzAxX3BhcnBvcnRfY2IsIDAsIHNpemVvZih3YWxrZXJhMDcwMV9wYXJwb3J0X2NiKSk7CiAJd2Fsa2VyYTA3MDFfcGFycG9ydF9jYi5mbGFncyA9IFBBUlBPUlRfRkxBR19FWENMOwogCXdhbGtlcmEwNzAxX3BhcnBvcnRfY2IuaXJxX2Z1bmMgPSB3YWxrZXJhMDcwMV9pcnFfaGFuZGxlcjsKIAl3YWxrZXJhMDcwMV9wYXJwb3J0X2NiLnByaXZhdGUgPSB3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2FyaXpvbmEtaGFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2FyaXpvbmEtaGFwdGljcy5jCmluZGV4IDRiZjY3ODUuLmQ1OTk0YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hcml6b25hLWhhcHRpY3MuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXJpem9uYS1oYXB0aWNzLmMKQEAgLTk3LDggKzk3LDcgQEAKIAogCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoYXJpem9uYS0+cmVnbWFwLAogCQkJCQkgQVJJWk9OQV9IQVBUSUNTX0NPTlRST0xfMSwKLQkJCQkJIEFSSVpPTkFfSEFQX0NUUkxfTUFTSywKLQkJCQkJIDEgPDwgQVJJWk9OQV9IQVBfQ1RSTF9TSElGVCk7CisJCQkJCSBBUklaT05BX0hBUF9DVFJMX01BU0ssIDApOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCWRldl9lcnIoYXJpem9uYS0+ZGV2LCAiRmFpbGVkIHRvIHN0b3AgaGFwdGljczogJWRcbiIsCiAJCQkJcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbl9pMmNfY29yZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFuX2kyY19jb3JlLmMKaW5kZXggNWUxNjY1Yi4uMmY1ODk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFuX2kyY19jb3JlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFuX2kyY19jb3JlLmMKQEAgLTQxLDYgKzQxLDcgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRQkJImVsYW5faTJjIgogI2RlZmluZSBFTEFOX0RSSVZFUl9WRVJTSU9OCSIxLjYuMSIKKyNkZWZpbmUgRUxBTl9WRU5ET1JfSUQJCTB4MDRmMwogI2RlZmluZSBFVFBfTUFYX1BSRVNTVVJFCTI1NQogI2RlZmluZSBFVFBfRldJRFRIX1JFRFVDRQk5MAogI2RlZmluZSBFVFBfRklOR0VSX1dJRFRICTE1CkBAIC05MTQsNiArOTE1LDggQEAKIAogCWlucHV0LT5uYW1lID0gIkVsYW4gVG91Y2hwYWQiOwogCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKwlpbnB1dC0+aWQudmVuZG9yID0gRUxBTl9WRU5ET1JfSUQ7CisJaW5wdXQtPmlkLnByb2R1Y3QgPSBkYXRhLT5wcm9kdWN0X2lkOwogCWlucHV0X3NldF9kcnZkYXRhKGlucHV0LCBkYXRhKTsKIAogCWVycm9yID0gaW5wdXRfbXRfaW5pdF9zbG90cyhpbnB1dCwgRVRQX01BWF9GSU5HRVJTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9wYXJrYmQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcGFya2JkLmMKaW5kZXggOTJjMzFiOC4uMWVkZmFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9wYXJrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3BhcmtiZC5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIHsKIAlzdHJ1Y3QgcGFyZGV2X2NiIHBhcmtiZF9wYXJwb3J0X2NiOwogCisJbWVtc2V0KCZwYXJrYmRfcGFycG9ydF9jYiwgMCwgc2l6ZW9mKHBhcmtiZF9wYXJwb3J0X2NiKSk7CiAJcGFya2JkX3BhcnBvcnRfY2IuaXJxX2Z1bmMgPSBwYXJrYmRfaW50ZXJydXB0OwogCXBhcmtiZF9wYXJwb3J0X2NiLmZsYWdzID0gUEFSUE9SVF9GTEFHX0VYQ0w7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FpcHRlay5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKaW5kZXggZTdmOTY2ZC4uNzhjYTQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKQEAgLTE4MTksNiArMTgxOSwxNCBAQAogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0ZGV2LCBBQlNfVElMVF9ZLCBBSVBURUtfVElMVF9NSU4sIEFJUFRFS19USUxUX01BWCwgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRkZXYsIEFCU19XSEVFTCwgQUlQVEVLX1dIRUVMX01JTiwgQUlQVEVLX1dIRUVMX01BWCAtIDEsIDAsIDApOwogCisJLyogVmVyaWZ5IHRoYXQgYSBkZXZpY2UgcmVhbGx5IGhhcyBhbiBlbmRwb2ludCAqLworCWlmIChpbnRmLT5hbHRzZXR0aW5nWzBdLmRlc2MuYk51bUVuZHBvaW50cyA8IDEpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJImludGVyZmFjZSBoYXMgJWQgZW5kcG9pbnRzLCBidXQgbXVzdCBoYXZlIG1pbmltdW0gMVxuIiwKKwkJCWludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iTnVtRW5kcG9pbnRzKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsMzsKKwl9CiAJZW5kcG9pbnQgPSAmaW50Zi0+YWx0c2V0dGluZ1swXS5lbmRwb2ludFswXS5kZXNjOwogCiAJLyogR28gc2V0IHVwIG91ciBVUkIsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSB0YWJsZXQgcmVjZWl2ZXMKQEAgLTE4NjEsNiArMTg2OSw3IEBACiAJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVlZHMpKSB7CiAJCWRldl9pbmZvKCZpbnRmLT5kZXYsCiAJCQkgIkFpcHRlayB0cmllZCBhbGwgc3BlZWRzLCBubyBzYW5lIHJlc3BvbnNlXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBmYWlsMzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfbXh0X3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX214dF90cy5jCmluZGV4IGM1NjIyMDUuLjJkNTc5NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfbXh0X3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF9teHRfdHMuYwpAQCAtMjQ4Nyw2ICsyNDg3LDMxIEBACiAJeyB9CiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGNocm9tZWJvb2tfdHBfYnV0dG9uc1tdID0geworCUtFWV9SRVNFUlZFRCwKKwlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAorCUtFWV9SRVNFUlZFRCwKKwlLRVlfUkVTRVJWRUQsCisJQlROX0xFRlQKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXh0X2FjcGlfcGxhdGZvcm1fZGF0YSBjaHJvbWVib29rX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS8qIFRvdWNocGFkICovCisJCS5oaWQJPSAiQVRNTDAwMDAiLAorCQkucGRhdGEJPSB7CisJCQkudDE5X251bV9rZXlzCT0gQVJSQVlfU0laRShjaHJvbWVib29rX3RwX2J1dHRvbnMpLAorCQkJLnQxOV9rZXltYXAJPSBjaHJvbWVib29rX3RwX2J1dHRvbnMsCisJCX0sCisJfSwKKwl7CisJCS8qIFRvdWNoc2NyZWVuICovCisJCS5oaWQJPSAiQVRNTDAwMDEiLAorCX0sCisJeyB9Cit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgbXh0X2RtaV90YWJsZVtdID0gewogCXsKIAkJLyogMjAxNSBHb29nbGUgUGl4ZWwgKi8KQEAgLTI0OTcsNiArMjUyMiwxNCBAQAogCQl9LAogCQkuZHJpdmVyX2RhdGEgPSBzYW11c19wbGF0Zm9ybV9kYXRhLAogCX0sCisJeworCQkvKiBPdGhlciBHb29nbGUgQ2hyb21lYm9va3MgKi8KKwkJLmlkZW50ID0gIkNocm9tZWJvb2siLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkdPT0dMRSIpLAorCQl9LAorCQkuZHJpdmVyX2RhdGEgPSBjaHJvbWVib29rX3BsYXRmb3JtX2RhdGEsCisJfSwKIAl7IH0KIH07CiAKQEAgLTI3MDEsNiArMjczNCw3IEBACiAJeyAicXQ2MDIyNDBfdHMiLCAwIH0sCiAJeyAiYXRtZWxfbXh0X3RzIiwgMCB9LAogCXsgImF0bWVsX214dF90cCIsIDAgfSwKKwl7ICJtYXh0b3VjaCIsIDAgfSwKIAl7ICJtWFQyMjQiLCAwIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lbGFudHNfaTJjLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VsYW50c19pMmMuYwppbmRleCAxN2NjMjBlLi5hYzA5ODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VsYW50c19pMmMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VsYW50c19pMmMuYwpAQCAtMTMxNiw3ICsxMzE2LDEzIEBACiAKIAlkaXNhYmxlX2lycShjbGllbnQtPmlycSk7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSB8fCB0cy0+a2VlcF9wb3dlcl9pbl9zdXNwZW5kKSB7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpIHsKKwkJLyoKKwkJICogVGhlIGRldmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgaWRsZSBtb2RlCisJCSAqIHRoYXQgaGFzIHJlZHVjZWQgcG93ZXIgY29uc3VtcHRpb24uCisJCSAqLworCQl0cy0+d2FrZV9pcnFfZW5hYmxlZCA9IChlbmFibGVfaXJxX3dha2UoY2xpZW50LT5pcnEpID09IDApOworCX0gZWxzZSBpZiAodHMtPmtlZXBfcG93ZXJfaW5fc3VzcGVuZCkgewogCQlmb3IgKHJldHJ5X2NudCA9IDA7IHJldHJ5X2NudCA8IE1BWF9SRVRSSUVTOyByZXRyeV9jbnQrKykgewogCQkJZXJyb3IgPSBlbGFudHNfaTJjX3NlbmQoY2xpZW50LCBzZXRfc2xlZXBfY21kLAogCQkJCQkJc2l6ZW9mKHNldF9zbGVlcF9jbWQpKTsKQEAgLTEzMjYsMTAgKzEzMzIsNiBAQAogCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkJInN1c3BlbmQgY29tbWFuZCBmYWlsZWQ6ICVkXG4iLCBlcnJvcik7CiAJCX0KLQotCQlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKLQkJCXRzLT53YWtlX2lycV9lbmFibGVkID0KLQkJCQkJKGVuYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSkgPT0gMCk7CiAJfSBlbHNlIHsKIAkJZWxhbnRzX2kyY19wb3dlcl9vZmYodHMpOwogCX0KQEAgLTEzNDUsMTAgKzEzNDcsMTEgQEAKIAlpbnQgcmV0cnlfY250OwogCWludCBlcnJvcjsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpICYmIHRzLT53YWtlX2lycV9lbmFibGVkKQotCQlkaXNhYmxlX2lycV93YWtlKGNsaWVudC0+aXJxKTsKLQotCWlmICh0cy0+a2VlcF9wb3dlcl9pbl9zdXNwZW5kKSB7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpIHsKKwkJaWYgKHRzLT53YWtlX2lycV9lbmFibGVkKQorCQkJZGlzYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSk7CisJCWVsYW50c19pMmNfc3dfcmVzZXQoY2xpZW50KTsKKwl9IGVsc2UgaWYgKHRzLT5rZWVwX3Bvd2VyX2luX3N1c3BlbmQpIHsKIAkJZm9yIChyZXRyeV9jbnQgPSAwOyByZXRyeV9jbnQgPCBNQVhfUkVUUklFUzsgcmV0cnlfY250KyspIHsKIAkJCWVycm9yID0gZWxhbnRzX2kyY19zZW5kKGNsaWVudCwgc2V0X2FjdGl2ZV9jbWQsCiAJCQkJCQlzaXplb2Yoc2V0X2FjdGl2ZV9jbWQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11X3YyLmMgYi9kcml2ZXJzL2lvbW11L2FtZF9pb21tdV92Mi5jCmluZGV4IGQyMWQ0ZWQuLjdjYWYyZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11X3YyLmMKKysrIGIvZHJpdmVycy9pb21tdS9hbWRfaW9tbXVfdjIuYwpAQCAtNDk0LDYgKzQ5NCwyMiBAQAogCX0KIH0KIAorc3RhdGljIGJvb2wgYWNjZXNzX2Vycm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZmF1bHQgKmZhdWx0KQoreworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdGVkID0gMDsKKworCWlmIChmYXVsdC0+ZmxhZ3MgJiBQUFJfRkFVTFRfRVhFQykKKwkJcmVxdWVzdGVkIHw9IFZNX0VYRUM7CisKKwlpZiAoZmF1bHQtPmZsYWdzICYgUFBSX0ZBVUxUX1JFQUQpCisJCXJlcXVlc3RlZCB8PSBWTV9SRUFEOworCisJaWYgKGZhdWx0LT5mbGFncyAmIFBQUl9GQVVMVF9XUklURSkKKwkJcmVxdWVzdGVkIHw9IFZNX1dSSVRFOworCisJcmV0dXJuIChyZXF1ZXN0ZWQgJiB+dm1hLT52bV9mbGFncykgIT0gMDsKK30KKwogc3RhdGljIHZvaWQgZG9fZmF1bHQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmYXVsdCAqZmF1bHQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZhdWx0LCB3b3JrKTsKQEAgLTUxNiw4ICs1MzIsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fV1JJVEUpKSkgewotCQkvKiBoYW5kbGVfbW1fZmF1bHQgd291bGQgQlVHX09OKCkgKi8KKwkvKiBDaGVjayBpZiB3ZSBoYXZlIHRoZSByaWdodCBwZXJtaXNzaW9ucyBvbiB0aGUgdm1hICovCisJaWYgKGFjY2Vzc19lcnJvcih2bWEsIGZhdWx0KSkgewogCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQloYW5kbGVfZmF1bHRfZXJyb3IoZmF1bHQpOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvaW50ZWwtaW9tbXUuYwppbmRleCBmMTA0MmRhLi5hYzczODc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jCkBAIC0yMTU5LDcgKzIxNTksNyBAQAogCQkJc2dfcmVzID0gYWxpZ25lZF9ucnBhZ2VzKHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgpOwogCQkJc2ctPmRtYV9hZGRyZXNzID0gKChkbWFfYWRkcl90KWlvdl9wZm4gPDwgVlREX1BBR0VfU0hJRlQpICsgc2ctPm9mZnNldDsKIAkJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKLQkJCXB0ZXZhbCA9IChzZ19waHlzKHNnKSAmIFBBR0VfTUFTSykgfCBwcm90OworCQkJcHRldmFsID0gcGFnZV90b19waHlzKHNnX3BhZ2Uoc2cpKSB8IHByb3Q7CiAJCQlwaHlzX3BmbiA9IHB0ZXZhbCA+PiBWVERfUEFHRV9TSElGVDsKIAkJfQogCkBAIC0zNzA0LDcgKzM3MDQsNyBAQAogCiAJZm9yX2VhY2hfc2coc2dsaXN0LCBzZywgbmVsZW1zLCBpKSB7CiAJCUJVR19PTighc2dfcGFnZShzZykpOwotCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKTsKKwkJc2ctPmRtYV9hZGRyZXNzID0gcGFnZV90b19waHlzKHNnX3BhZ2Uoc2cpKSArIHNnLT5vZmZzZXQ7CiAJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAl9CiAJcmV0dXJuIG5lbGVtczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtc3ZtLmMgYi9kcml2ZXJzL2lvbW11L2ludGVsLXN2bS5jCmluZGV4IGM2OWUzZjkuLjUwNDY0ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvaW50ZWwtc3ZtLmMKKysrIGIvZHJpdmVycy9pb21tdS9pbnRlbC1zdm0uYwpAQCAtNDg0LDYgKzQ4NCwyMyBAQAogfTsKIAogI2RlZmluZSBQUlFfUklOR19NQVNLICgoMHgxMDAwIDw8IFBSUV9PUkRFUikgLSAweDEwKQorCitzdGF0aWMgYm9vbCBhY2Nlc3NfZXJyb3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlX3JlcV9kc2MgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIHJlcXVlc3RlZCA9IDA7CisKKwlpZiAocmVxLT5leGVfcmVxKQorCQlyZXF1ZXN0ZWQgfD0gVk1fRVhFQzsKKworCWlmIChyZXEtPnJkX3JlcSkKKwkJcmVxdWVzdGVkIHw9IFZNX1JFQUQ7CisKKwlpZiAocmVxLT53cl9yZXEpCisJCXJlcXVlc3RlZCB8PSBWTV9XUklURTsKKworCXJldHVybiAocmVxdWVzdGVkICYgfnZtYS0+dm1fZmxhZ3MpICE9IDA7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBwcnFfZXZlbnRfdGhyZWFkKGludCBpcnEsIHZvaWQgKmQpCiB7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGQ7CkBAIC01MzksNiArNTU2LDkgQEAKIAkJaWYgKCF2bWEgfHwgYWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQpCiAJCQlnb3RvIGludmFsaWQ7CiAKKwkJaWYgKGFjY2Vzc19lcnJvcih2bWEsIHJlcSkpCisJCQlnb3RvIGludmFsaWQ7CisKIAkJcmV0ID0gaGFuZGxlX21tX2ZhdWx0KHN2bS0+bW0sIHZtYSwgYWRkcmVzcywKIAkJCQkgICAgICByZXEtPndyX3JlcSA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKTsKIAkJaWYgKHJldCAmIFZNX0ZBVUxUX0VSUk9SKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pb21tdS5jIGIvZHJpdmVycy9pb21tdS9pb21tdS5jCmluZGV4IGFiYWUzNjMuLjBlM2IwMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvaW9tbXUuYworKysgYi9kcml2ZXJzL2lvbW11L2lvbW11LmMKQEAgLTE0MzAsNyArMTQzMCw3IEBACiAJbWluX3BhZ2VzeiA9IDEgPDwgX19mZnMoZG9tYWluLT5vcHMtPnBnc2l6ZV9iaXRtYXApOwogCiAJZm9yX2VhY2hfc2coc2csIHMsIG5lbnRzLCBpKSB7Ci0JCXBoeXNfYWRkcl90IHBoeXMgPSBzZ19waHlzKHMpOworCQlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHNnX3BhZ2UocykpICsgcy0+b2Zmc2V0OwogCiAJCS8qCiAJCSAqIFdlIGFyZSBtYXBwaW5nIG9uIElPTU1VIHBhZ2UgYm91bmRhcmllcywgc28gb2Zmc2V0IHdpdGhpbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9zMzkwLWlvbW11LmMgYi9kcml2ZXJzL2lvbW11L3MzOTAtaW9tbXUuYwppbmRleCBjYmUxOThjLi40NzFlZTM2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9zMzkwLWlvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9zMzkwLWlvbW11LmMKQEAgLTIxNiw2ICsyMTYsNyBAQAogCXU4ICpwYWdlX2FkZHIgPSAodTggKikgKHBhICYgUEFHRV9NQVNLKTsKIAlkbWFfYWRkcl90IHN0YXJ0X2RtYV9hZGRyID0gZG1hX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MsIG5yX3BhZ2VzLCBpOworCXVuc2lnbmVkIGxvbmcgKmVudHJ5OwogCWludCByYyA9IDA7CiAKIAlpZiAoZG1hX2FkZHIgPCBzMzkwX2RvbWFpbi0+ZG9tYWluLmdlb21ldHJ5LmFwZXJ0dXJlX3N0YXJ0IHx8CkBAIC0yMjgsOCArMjI5LDEyIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmczM5MF9kb21haW4tPmRtYV90YWJsZV9sb2NrLCBpcnFfZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7Ci0JCWRtYV91cGRhdGVfY3B1X3RyYW5zKHMzOTBfZG9tYWluLT5kbWFfdGFibGUsIHBhZ2VfYWRkciwKLQkJCQkgICAgIGRtYV9hZGRyLCBmbGFncyk7CisJCWVudHJ5ID0gZG1hX3dhbGtfY3B1X3RyYW5zKHMzOTBfZG9tYWluLT5kbWFfdGFibGUsIGRtYV9hZGRyKTsKKwkJaWYgKCFlbnRyeSkgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byB1bmRvX2NwdV90cmFuczsKKwkJfQorCQlkbWFfdXBkYXRlX2NwdV90cmFucyhlbnRyeSwgcGFnZV9hZGRyLCBmbGFncyk7CiAJCXBhZ2VfYWRkciArPSBQQUdFX1NJWkU7CiAJCWRtYV9hZGRyICs9IFBBR0VfU0laRTsKIAl9CkBAIC0yNDIsNiArMjQ3LDIwIEBACiAJCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2soJnMzOTBfZG9tYWluLT5saXN0X2xvY2spOworCit1bmRvX2NwdV90cmFuczoKKwlpZiAocmMgJiYgKChmbGFncyAmIFpQQ0lfUFRFX1ZBTElEX01BU0spID09IFpQQ0lfUFRFX1ZBTElEKSkgeworCQlmbGFncyA9IFpQQ0lfUFRFX0lOVkFMSUQ7CisJCXdoaWxlIChpLS0gPiAwKSB7CisJCQlwYWdlX2FkZHIgLT0gUEFHRV9TSVpFOworCQkJZG1hX2FkZHIgLT0gUEFHRV9TSVpFOworCQkJZW50cnkgPSBkbWFfd2Fsa19jcHVfdHJhbnMoczM5MF9kb21haW4tPmRtYV90YWJsZSwKKwkJCQkJCSAgIGRtYV9hZGRyKTsKKwkJCWlmICghZW50cnkpCisJCQkJYnJlYWs7CisJCQlkbWFfdXBkYXRlX2NwdV90cmFucyhlbnRyeSwgcGFnZV9hZGRyLCBmbGFncyk7CisJCX0KKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmczM5MF9kb21haW4tPmRtYV90YWJsZV9sb2NrLCBpcnFfZmxhZ3MpOwogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1naWMtY29tbW9uLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy1jb21tb24uYwppbmRleCA0NGEwNzdmLi5mMTc0Y2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy1jb21tb24uYworKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy1jb21tb24uYwpAQCAtODQsMTIgKzg0LDE1IEBACiAJCXdyaXRlbF9yZWxheGVkKEdJQ0RfSU5UX0RFRl9QUklfWDQsIGJhc2UgKyBHSUNfRElTVF9QUkkgKyBpKTsKIAogCS8qCi0JICogRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gIExlYXZlIHRoZSBQUEkgYW5kIFNHSXMgYWxvbmUKLQkgKiBhcyB0aGV5IGFyZSBlbmFibGVkIGJ5IHJlZGlzdHJpYnV0b3IgcmVnaXN0ZXJzLgorCSAqIERlYWN0aXZhdGUgYW5kIGRpc2FibGUgYWxsIFNQSXMuIExlYXZlIHRoZSBQUEkgYW5kIFNHSXMKKwkgKiBhbG9uZSBhcyB0aGV5IGFyZSBpbiB0aGUgcmVkaXN0cmlidXRvciByZWdpc3RlcnMgb24gR0lDdjMuCiAJICovCi0JZm9yIChpID0gMzI7IGkgPCBnaWNfaXJxczsgaSArPSAzMikKKwlmb3IgKGkgPSAzMjsgaSA8IGdpY19pcnFzOyBpICs9IDMyKSB7CiAJCXdyaXRlbF9yZWxheGVkKEdJQ0RfSU5UX0VOX0NMUl9YMzIsCi0JCQkJCWJhc2UgKyBHSUNfRElTVF9FTkFCTEVfQ0xFQVIgKyBpIC8gOCk7CisJCQkgICAgICAgYmFzZSArIEdJQ19ESVNUX0FDVElWRV9DTEVBUiArIGkgLyA4KTsKKwkJd3JpdGVsX3JlbGF4ZWQoR0lDRF9JTlRfRU5fQ0xSX1gzMiwKKwkJCSAgICAgICBiYXNlICsgR0lDX0RJU1RfRU5BQkxFX0NMRUFSICsgaSAvIDgpOworCX0KIAogCWlmIChzeW5jX2FjY2VzcykKIAkJc3luY19hY2Nlc3MoKTsKQEAgLTEwMiw3ICsxMDUsOSBAQAogCS8qCiAJICogRGVhbCB3aXRoIHRoZSBiYW5rZWQgUFBJIGFuZCBTR0kgaW50ZXJydXB0cyAtIGRpc2FibGUgYWxsCiAJICogUFBJIGludGVycnVwdHMsIGVuc3VyZSBhbGwgU0dJIGludGVycnVwdHMgYXJlIGVuYWJsZWQuCisJICogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgZGVhY3RpdmF0ZWQuCiAJICovCisJd3JpdGVsX3JlbGF4ZWQoR0lDRF9JTlRfRU5fQ0xSX1gzMiwgYmFzZSArIEdJQ19ESVNUX0FDVElWRV9DTEVBUik7CiAJd3JpdGVsX3JlbGF4ZWQoR0lDRF9JTlRfRU5fQ0xSX1BQSSwgYmFzZSArIEdJQ19ESVNUX0VOQUJMRV9DTEVBUik7CiAJd3JpdGVsX3JlbGF4ZWQoR0lDRF9JTlRfRU5fU0VUX1NHSSwgYmFzZSArIEdJQ19ESVNUX0VOQUJMRV9TRVQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy5jIGIvZHJpdmVycy9pcnFjaGlwL2lycS1naWMuYwppbmRleCA1MTVjODIzLi5hYmYyZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLWdpYy5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLmMKQEAgLTczLDkgKzczLDExIEBACiAJdW5pb24gZ2ljX2Jhc2UgY3B1X2Jhc2U7CiAjaWZkZWYgQ09ORklHX0NQVV9QTQogCXUzMiBzYXZlZF9zcGlfZW5hYmxlW0RJVl9ST1VORF9VUCgxMDIwLCAzMildOworCXUzMiBzYXZlZF9zcGlfYWN0aXZlW0RJVl9ST1VORF9VUCgxMDIwLCAzMildOwogCXUzMiBzYXZlZF9zcGlfY29uZltESVZfUk9VTkRfVVAoMTAyMCwgMTYpXTsKIAl1MzIgc2F2ZWRfc3BpX3RhcmdldFtESVZfUk9VTkRfVVAoMTAyMCwgNCldOwogCXUzMiBfX3BlcmNwdSAqc2F2ZWRfcHBpX2VuYWJsZTsKKwl1MzIgX19wZXJjcHUgKnNhdmVkX3BwaV9hY3RpdmU7CiAJdTMyIF9fcGVyY3B1ICpzYXZlZF9wcGlfY29uZjsKICNlbmRpZgogCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CkBAIC01NjYsNiArNTY4LDEwIEBACiAJZm9yIChpID0gMDsgaSA8IERJVl9ST1VORF9VUChnaWNfaXJxcywgMzIpOyBpKyspCiAJCWdpY19kYXRhW2dpY19ucl0uc2F2ZWRfc3BpX2VuYWJsZVtpXSA9CiAJCQlyZWFkbF9yZWxheGVkKGRpc3RfYmFzZSArIEdJQ19ESVNUX0VOQUJMRV9TRVQgKyBpICogNCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGdpY19pcnFzLCAzMik7IGkrKykKKwkJZ2ljX2RhdGFbZ2ljX25yXS5zYXZlZF9zcGlfYWN0aXZlW2ldID0KKwkJCXJlYWRsX3JlbGF4ZWQoZGlzdF9iYXNlICsgR0lDX0RJU1RfQUNUSVZFX1NFVCArIGkgKiA0KTsKIH0KIAogLyoKQEAgLTYwNCw5ICs2MTAsMTkgQEAKIAkJd3JpdGVsX3JlbGF4ZWQoZ2ljX2RhdGFbZ2ljX25yXS5zYXZlZF9zcGlfdGFyZ2V0W2ldLAogCQkJZGlzdF9iYXNlICsgR0lDX0RJU1RfVEFSR0VUICsgaSAqIDQpOwogCi0JZm9yIChpID0gMDsgaSA8IERJVl9ST1VORF9VUChnaWNfaXJxcywgMzIpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IERJVl9ST1VORF9VUChnaWNfaXJxcywgMzIpOyBpKyspIHsKKwkJd3JpdGVsX3JlbGF4ZWQoR0lDRF9JTlRfRU5fQ0xSX1gzMiwKKwkJCWRpc3RfYmFzZSArIEdJQ19ESVNUX0VOQUJMRV9DTEVBUiArIGkgKiA0KTsKIAkJd3JpdGVsX3JlbGF4ZWQoZ2ljX2RhdGFbZ2ljX25yXS5zYXZlZF9zcGlfZW5hYmxlW2ldLAogCQkJZGlzdF9iYXNlICsgR0lDX0RJU1RfRU5BQkxFX1NFVCArIGkgKiA0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKGdpY19pcnFzLCAzMik7IGkrKykgeworCQl3cml0ZWxfcmVsYXhlZChHSUNEX0lOVF9FTl9DTFJfWDMyLAorCQkJZGlzdF9iYXNlICsgR0lDX0RJU1RfQUNUSVZFX0NMRUFSICsgaSAqIDQpOworCQl3cml0ZWxfcmVsYXhlZChnaWNfZGF0YVtnaWNfbnJdLnNhdmVkX3NwaV9hY3RpdmVbaV0sCisJCQlkaXN0X2Jhc2UgKyBHSUNfRElTVF9BQ1RJVkVfU0VUICsgaSAqIDQpOworCX0KIAogCXdyaXRlbF9yZWxheGVkKEdJQ0RfRU5BQkxFLCBkaXN0X2Jhc2UgKyBHSUNfRElTVF9DVFJMKTsKIH0KQEAgLTYzMSw2ICs2NDcsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKDMyLCAzMik7IGkrKykKIAkJcHRyW2ldID0gcmVhZGxfcmVsYXhlZChkaXN0X2Jhc2UgKyBHSUNfRElTVF9FTkFCTEVfU0VUICsgaSAqIDQpOwogCisJcHRyID0gcmF3X2NwdV9wdHIoZ2ljX2RhdGFbZ2ljX25yXS5zYXZlZF9wcGlfYWN0aXZlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKDMyLCAzMik7IGkrKykKKwkJcHRyW2ldID0gcmVhZGxfcmVsYXhlZChkaXN0X2Jhc2UgKyBHSUNfRElTVF9BQ1RJVkVfU0VUICsgaSAqIDQpOworCiAJcHRyID0gcmF3X2NwdV9wdHIoZ2ljX2RhdGFbZ2ljX25yXS5zYXZlZF9wcGlfY29uZik7CiAJZm9yIChpID0gMDsgaSA8IERJVl9ST1VORF9VUCgzMiwgMTYpOyBpKyspCiAJCXB0cltpXSA9IHJlYWRsX3JlbGF4ZWQoZGlzdF9iYXNlICsgR0lDX0RJU1RfQ09ORklHICsgaSAqIDQpOwpAQCAtNjU0LDggKzY3NCwxOCBAQAogCQlyZXR1cm47CiAKIAlwdHIgPSByYXdfY3B1X3B0cihnaWNfZGF0YVtnaWNfbnJdLnNhdmVkX3BwaV9lbmFibGUpOwotCWZvciAoaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoMzIsIDMyKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoMzIsIDMyKTsgaSsrKSB7CisJCXdyaXRlbF9yZWxheGVkKEdJQ0RfSU5UX0VOX0NMUl9YMzIsCisJCQkgICAgICAgZGlzdF9iYXNlICsgR0lDX0RJU1RfRU5BQkxFX0NMRUFSICsgaSAqIDQpOwogCQl3cml0ZWxfcmVsYXhlZChwdHJbaV0sIGRpc3RfYmFzZSArIEdJQ19ESVNUX0VOQUJMRV9TRVQgKyBpICogNCk7CisJfQorCisJcHRyID0gcmF3X2NwdV9wdHIoZ2ljX2RhdGFbZ2ljX25yXS5zYXZlZF9wcGlfYWN0aXZlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKDMyLCAzMik7IGkrKykgeworCQl3cml0ZWxfcmVsYXhlZChHSUNEX0lOVF9FTl9DTFJfWDMyLAorCQkJICAgICAgIGRpc3RfYmFzZSArIEdJQ19ESVNUX0FDVElWRV9DTEVBUiArIGkgKiA0KTsKKwkJd3JpdGVsX3JlbGF4ZWQocHRyW2ldLCBkaXN0X2Jhc2UgKyBHSUNfRElTVF9BQ1RJVkVfU0VUICsgaSAqIDQpOworCX0KIAogCXB0ciA9IHJhd19jcHVfcHRyKGdpY19kYXRhW2dpY19ucl0uc2F2ZWRfcHBpX2NvbmYpOwogCWZvciAoaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoMzIsIDE2KTsgaSsrKQpAQCAtNzEwLDYgKzc0MCwxMCBAQAogCQlzaXplb2YodTMyKSk7CiAJQlVHX09OKCFnaWMtPnNhdmVkX3BwaV9lbmFibGUpOwogCisJZ2ljLT5zYXZlZF9wcGlfYWN0aXZlID0gX19hbGxvY19wZXJjcHUoRElWX1JPVU5EX1VQKDMyLCAzMikgKiA0LAorCQlzaXplb2YodTMyKSk7CisJQlVHX09OKCFnaWMtPnNhdmVkX3BwaV9hY3RpdmUpOworCiAJZ2ljLT5zYXZlZF9wcGlfY29uZiA9IF9fYWxsb2NfcGVyY3B1KERJVl9ST1VORF9VUCgzMiwgMTYpICogNCwKIAkJc2l6ZW9mKHUzMikpOwogCUJVR19PTighZ2ljLT5zYXZlZF9wcGlfY29uZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNoaXAvaXJxLXZlcnNhdGlsZS1mcGdhLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLXZlcnNhdGlsZS1mcGdhLmMKaW5kZXggNTk4YWIzZi4uY2FkZjEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pcnFjaGlwL2lycS12ZXJzYXRpbGUtZnBnYS5jCisrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtdmVyc2F0aWxlLWZwZ2EuYwpAQCAtMjEwLDcgKzIxMCwxMiBAQAogCQlwYXJlbnRfaXJxID0gLTE7CiAJfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfVkVSU0FUSUxFCisJZnBnYV9pcnFfaW5pdChiYXNlLCBub2RlLT5uYW1lLCBJUlFfU0lDX1NUQVJULCBwYXJlbnRfaXJxLCB2YWxpZF9tYXNrLAorCQkJCSAgbm9kZSk7CisjZWxzZQogCWZwZ2FfaXJxX2luaXQoYmFzZSwgbm9kZS0+bmFtZSwgMCwgcGFyZW50X2lycSwgdmFsaWRfbWFzaywgbm9kZSk7CisjZW5kaWYKIAogCXdyaXRlbChjbGVhcl9tYXNrLCBiYXNlICsgSVJRX0VOQUJMRV9DTEVBUik7CiAJd3JpdGVsKGNsZWFyX21hc2ssIGJhc2UgKyBGSVFfRU5BQkxFX0NMRUFSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCmluZGV4IDM3NWJlNTAuLjJhNTA2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYwpAQCAtNjcsOCArNjcsNyBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSBiY3MtPnR4X3NrYjsKIAlpbnQgc2VudCA9IC1FT1BOT1RTVVBQOwogCi0JaWYgKCF0dHkgfHwgIXR0eS0+ZHJpdmVyIHx8ICFza2IpCi0JCXJldHVybiAtRUlOVkFMOworCVdBUk5fT04oIXR0eSB8fCAhdHR5LT5vcHMgfHwgIXNrYik7CiAKIAlpZiAoIXNrYi0+bGVuKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC0xMDksOCArMTA4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzZW50ID0gMDsKIAotCWlmICghdHR5IHx8ICF0dHktPmRyaXZlcikKLQkJcmV0dXJuIC1FRkFVTFQ7CisJV0FSTl9PTighdHR5IHx8ICF0dHktPm9wcyk7CiAKIAljYiA9IGNzLT5jbWRidWY7CiAJaWYgKCFjYikKQEAgLTM3MCwxOSArMzY4LDE4IEBACiAJdGFza2xldF9raWxsKCZjcy0+d3JpdGVfdGFza2xldCk7CiAJaWYgKCFjcy0+aHcuc2VyKQogCQlyZXR1cm47Ci0JZGV2X3NldF9kcnZkYXRhKCZjcy0+aHcuc2VyLT5kZXYuZGV2LCBOVUxMKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmY3MtPmh3LnNlci0+ZGV2KTsKLQlrZnJlZShjcy0+aHcuc2VyKTsKLQljcy0+aHcuc2VyID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZ2lnYXNldF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQkvKiBhZGFwdGVkIGZyb20gcGxhdGZvcm1fZGV2aWNlX3JlbGVhc2UoKSBpbiBkcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyAqLwotCWtmcmVlKGRldi0+cGxhdGZvcm1fZGF0YSk7Ci0Ja2ZyZWUocGRldi0+cmVzb3VyY2UpOworCWlmICghY3MpCisJCXJldHVybjsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShjcy0+aHcuc2VyKTsKKwljcy0+aHcuc2VyID0gTlVMTDsKIH0KIAogLyoKQEAgLTQzMiw3ICs0MjksOSBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBjcy0+aHcuc2VyLT50dHk7CiAJdW5zaWduZWQgaW50IHNldCwgY2xlYXI7CiAKLQlpZiAoIXR0eSB8fCAhdHR5LT5kcml2ZXIgfHwgIXR0eS0+b3BzLT50aW9jbXNldCkKKwlXQVJOX09OKCF0dHkgfHwgIXR0eS0+b3BzKTsKKwkvKiB0aW9jbXNldCBpcyBhbiBvcHRpb25hbCB0dHkgZHJpdmVyIG1ldGhvZCAqLworCWlmICghdHR5LT5vcHMtPnRpb2Ntc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzZXQgPSBuZXdfc3RhdGUgJiB+b2xkX3N0YXRlOwogCWNsZWFyID0gb2xkX3N0YXRlICYgfm5ld19zdGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlwYWMuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlwYWMuYwppbmRleCBhNzdlZWE1Li5jYjQyOGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pcGFjLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaXBhYy5jCkBAIC0xMTcwLDcgKzExNzAsNyBAQAogCiAJaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQ1gpIHsKIAkJaXN0YSA9IFJlYWRJUEFDKGlwYWMsIElTQUNYX0lTVEEpOwotCQl3aGlsZSAoaXN0YSAmJiBjbnQtLSkgeworCQl3aGlsZSAoaXN0YSAmJiAtLWNudCkgewogCQkJcHJfZGVidWcoIiVzOiBJU1RBICUwMnhcbiIsIGlwYWMtPm5hbWUsIGlzdGEpOwogCQkJaWYgKGlzdGEgJiBJUEFDWF9fSUNBKQogCQkJCWlwYWNfaXJxKCZpcGFjLT5oc2N4WzBdLCBpc3RhKTsKQEAgLTExODIsNyArMTE4Miw3IEBACiAJCX0KIAl9IGVsc2UgaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQykgewogCQlpc3RhID0gUmVhZElQQUMoaXBhYywgSVBBQ19JU1RBKTsKLQkJd2hpbGUgKGlzdGEgJiYgY250LS0pIHsKKwkJd2hpbGUgKGlzdGEgJiYgLS1jbnQpIHsKIAkJCXByX2RlYnVnKCIlczogSVNUQSAlMDJ4XG4iLCBpcGFjLT5uYW1lLCBpc3RhKTsKIAkJCWlmIChpc3RhICYgKElQQUNfX0lDRCB8IElQQUNfX0VYRCkpIHsKIAkJCQlpc3RhZCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfSVNUQSk7CkBAIC0xMjAwLDcgKzEyMDAsNyBAQAogCQkJaXN0YSA9IFJlYWRJUEFDKGlwYWMsIElQQUNfSVNUQSk7CiAJCX0KIAl9IGVsc2UgaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSFNDWCkgewotCQl3aGlsZSAoY250KSB7CisJCXdoaWxlICgtLWNudCkgewogCQkJaXN0YSA9IFJlYWRJUEFDKGlwYWMsIElQQUNfSVNUQUIgKyBpcGFjLT5oc2N4WzFdLm9mZik7CiAJCQlwcl9kZWJ1ZygiJXM6IEIyIElTVEEgJTAyeFxuIiwgaXBhYy0+bmFtZSwgaXN0YSk7CiAJCQlpZiAoaXN0YSkKQEAgLTEyMTEsNyArMTIxMSw2IEBACiAJCQkJbUlTRE5pc2FjX2lycShpc2FjLCBpc3RhZCk7CiAJCQlpZiAoMCA9PSAoaXN0YSB8IGlzdGFkKSkKIAkJCQlicmVhazsKLQkJCWNudC0tOwogCQl9CiAJfQogCWlmIChjbnQgPiBtYXhsb29wKSAvKiBvbmx5IGZvciBJU0FDL0hTQ1ggd2l0aG91dCBQQ0kgSVJRIHRlc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwppbmRleCBiMzNmNTNiLi5iZjA0ZDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCkBAIC0xODk2LDcgKzE4OTYsNyBAQAogCQkJCXB0ci0tOwogCQkJCSpwdHIrKyA9ICdcbic7CiAJCQkJKnB0ciA9IDA7Ci0JCQkJSGlTYXhfcHV0c3RhdHVzKGNzLCBOVUxMLCAiJXMiLCBjcy0+ZGxvZyk7CisJCQkJSGlTYXhfcHV0c3RhdHVzKGNzLCBOVUxMLCBjcy0+ZGxvZyk7CiAJCQl9IGVsc2UKIAkJCQlIaVNheF9wdXRzdGF0dXMoY3MsICJMb2dFY2hvOiAiLAogCQkJCQkJIndhcm5pbmcgRnJhbWUgdG9vIGJpZyAoJWQpIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IDRhNDgyNTUuLjkwNDQ5ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtOTAxLDcgKzkwMSw3IEBACiAJCQkJCXB0ci0tOwogCQkJCQkqcHRyKysgPSAnXG4nOwogCQkJCQkqcHRyID0gMDsKLQkJCQkJSGlTYXhfcHV0c3RhdHVzKGNzLCBOVUxMLCAiJXMiLCBjcy0+ZGxvZyk7CisJCQkJCUhpU2F4X3B1dHN0YXR1cyhjcywgTlVMTCwgY3MtPmRsb2cpOwogCQkJCX0gZWxzZQogCQkJCQlIaVNheF9wdXRzdGF0dXMoY3MsICJMb2dFY2hvOiAiLCAid2FybmluZyBGcmFtZSB0b28gYmlnICglZCkiLCB0b3RhbCAtIDMpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jCmluZGV4IGIxZmFkODEuLjEzYjIxNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMKQEAgLTY3NCw3ICs2NzQsNyBAQAogCQkJCQlwdHItLTsKIAkJCQkJKnB0cisrID0gJ1xuJzsKIAkJCQkJKnB0ciA9IDA7Ci0JCQkJCUhpU2F4X3B1dHN0YXR1cyhjcywgTlVMTCwgIiVzIiwgY3MtPmRsb2cpOworCQkJCQlIaVNheF9wdXRzdGF0dXMoY3MsIE5VTEwsIGNzLT5kbG9nKTsKIAkJCQl9IGVsc2UKIAkJCQkJSGlTYXhfcHV0c3RhdHVzKGNzLCAiTG9nRWNobzogIiwgIndhcm5pbmcgRnJhbWUgdG9vIGJpZyAoJWQpIiwgc2tiLT5sZW4pOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3E5MzEuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9xOTMxLmMKaW5kZXggYjQyMGY4Yi4uYmE0YmViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3E5MzEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvcTkzMS5jCkBAIC0xMTc5LDcgKzExNzksNyBAQAogCQlkcC0tOwogCQkqZHArKyA9ICdcbic7CiAJCSpkcCA9IDA7Ci0JCUhpU2F4X3B1dHN0YXR1cyhjcywgTlVMTCwgIiVzIiwgY3MtPmRsb2cpOworCQlIaVNheF9wdXRzdGF0dXMoY3MsIE5VTEwsIGNzLT5kbG9nKTsKIAl9IGVsc2UKIAkJSGlTYXhfcHV0c3RhdHVzKGNzLCAiTG9nRnJhbWU6ICIsICJ3YXJuaW5nIEZyYW1lIHRvbyBiaWcgKCVkKSIsIHNpemUpOwogfQpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAKIAl9CiAJaWYgKGZpbmlzaCkgewogCQkqZHAgPSAwOwotCQlIaVNheF9wdXRzdGF0dXMoY3MsIE5VTEwsICIlcyIsIGNzLT5kbG9nKTsKKwkJSGlTYXhfcHV0c3RhdHVzKGNzLCBOVUxMLCBjcy0+ZGxvZyk7CiAJCXJldHVybjsKIAl9CiAJaWYgKCgweGZlICYgYnVmWzBdKSA9PSBQUk9UT19ESVNfTjApIHsJLyogMVRSNiAqLwpAQCAtMTUwOSw1ICsxNTA5LDUgQEAKIAkJZHAgKz0gc3ByaW50ZihkcCwgIlVua25vd24gcHJvdG9jb2wgJXghIiwgYnVmWzBdKTsKIAl9CiAJKmRwID0gMDsKLQlIaVNheF9wdXRzdGF0dXMoY3MsIE5VTEwsICIlcyIsIGNzLT5kbG9nKTsKKwlIaVNheF9wdXRzdGF0dXMoY3MsIE5VTEwsIGNzLT5kbG9nKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGlnaHRudm0vS2NvbmZpZyBiL2RyaXZlcnMvbGlnaHRudm0vS2NvbmZpZwppbmRleCBhMTZiZjU2Li44NWEzMzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xpZ2h0bnZtL0tjb25maWcKKysrIGIvZHJpdmVycy9saWdodG52bS9LY29uZmlnCkBAIC0xOCw2ICsxOCw3IEBACiAKIGNvbmZpZyBOVk1fREVCVUcKIAlib29sICJPcGVuLUNoYW5uZWwgU1NEIGRlYnVnZ2luZyBzdXBwb3J0IgorCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAlFeHBvc2VzIGEgZGVidWcgbWFuYWdlbWVudCBpbnRlcmZhY2UgdG8gY3JlYXRlL3JlbW92ZSB0YXJnZXRzIGF0OgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xpZ2h0bnZtL2NvcmUuYyBiL2RyaXZlcnMvbGlnaHRudm0vY29yZS5jCmluZGV4IGY2NTllNjAuLjhmNDFiMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGlnaHRudm0vY29yZS5jCisrKyBiL2RyaXZlcnMvbGlnaHRudm0vY29yZS5jCkBAIC03NCw3ICs3NCw3IEBACiB2b2lkICpudm1fZGV2X2RtYV9hbGxvYyhzdHJ1Y3QgbnZtX2RldiAqZGV2LCBnZnBfdCBtZW1fZmxhZ3MsCiAJCQkJCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZXIpCiB7Ci0JcmV0dXJuIGRldi0+b3BzLT5kZXZfZG1hX2FsbG9jKGRldi0+cSwgZGV2LT5wcGFsaXN0X3Bvb2wsIG1lbV9mbGFncywKKwlyZXR1cm4gZGV2LT5vcHMtPmRldl9kbWFfYWxsb2MoZGV2LCBkZXYtPnBwYWxpc3RfcG9vbCwgbWVtX2ZsYWdzLAogCQkJCQkJCQlkbWFfaGFuZGxlcik7CiB9CiBFWFBPUlRfU1lNQk9MKG52bV9kZXZfZG1hX2FsbG9jKTsKQEAgLTk3LDE1ICs5Nyw0NyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdHJ1Y3QgbnZtbV90eXBlICpudm1faW5pdF9tZ3Ioc3RydWN0IG52bV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbnZtbV90eXBlICptdDsKKwlpbnQgcmV0OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbnZtX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtdCwgJm52bV9tZ3JzLCBsaXN0KSB7CisJCXJldCA9IG10LT5yZWdpc3Rlcl9tZ3IoZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2VycigibnZtOiBtZWRpYSBtZ3IgZmFpbGVkIHRvIGluaXQgKCVkKSBvbiBkZXYgJXNcbiIsCisJCQkJCQkJCXJldCwgZGV2LT5uYW1lKTsKKwkJCXJldHVybiBOVUxMOyAvKiBpbml0aWFsaXphdGlvbiBmYWlsZWQgKi8KKwkJfSBlbHNlIGlmIChyZXQgPiAwKQorCQkJcmV0dXJuIG10OworCX0KKworCXJldHVybiBOVUxMOworfQorCiBpbnQgbnZtX3JlZ2lzdGVyX21ncihzdHJ1Y3QgbnZtbV90eXBlICptdCkKIHsKKwlzdHJ1Y3QgbnZtX2RldiAqZGV2OwogCWludCByZXQgPSAwOwogCiAJZG93bl93cml0ZSgmbnZtX2xvY2spOwotCWlmIChudm1fZmluZF9tZ3JfdHlwZShtdC0+bmFtZSkpCisJaWYgKG52bV9maW5kX21ncl90eXBlKG10LT5uYW1lKSkgewogCQlyZXQgPSAtRUVYSVNUOwotCWVsc2UKKwkJZ290byBmaW5pc2g7CisJfSBlbHNlIHsKIAkJbGlzdF9hZGQoJm10LT5saXN0LCAmbnZtX21ncnMpOworCX0KKworCS8qIHRyeSB0byByZWdpc3RlciBtZWRpYSBtZ3IgaWYgYW55IGRldmljZSBoYXZlIG5vbmUgY29uZmlndXJlZCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmbnZtX2RldmljZXMsIGRldmljZXMpIHsKKwkJaWYgKGRldi0+bXQpCisJCQljb250aW51ZTsKKworCQlkZXYtPm10ID0gbnZtX2luaXRfbWdyKGRldik7CisJfQorZmluaXNoOgogCXVwX3dyaXRlKCZudm1fbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTYwLDExICsxOTIsNiBAQAogfQogRVhQT1JUX1NZTUJPTChudm1fZXJhc2VfYmxrKTsKIAotc3RhdGljIHZvaWQgbnZtX2NvcmVfZnJlZShzdHJ1Y3QgbnZtX2RldiAqZGV2KQotewotCWtmcmVlKGRldik7Ci19Ci0KIHN0YXRpYyBpbnQgbnZtX2NvcmVfaW5pdChzdHJ1Y3QgbnZtX2RldiAqZGV2KQogewogCXN0cnVjdCBudm1faWQgKmlkID0gJmRldi0+aWRlbnRpdHk7CkBAIC0xNzksMTIgKzIwNiwyMSBAQAogCWRldi0+c2VjX3NpemUgPSBncnAtPmNzZWNzOwogCWRldi0+b29iX3NpemUgPSBncnAtPnNvczsKIAlkZXYtPnNlY19wZXJfcGcgPSBncnAtPmZwZ19zeiAvIGdycC0+Y3NlY3M7Ci0JZGV2LT5hZGRyX21vZGUgPSBpZC0+cHBhdDsKLQlkZXYtPmFkZHJfZm9ybWF0ID0gaWQtPnBwYWY7CisJbWVtY3B5KCZkZXYtPnBwYWYsICZpZC0+cHBhZiwgc2l6ZW9mKHN0cnVjdCBudm1fYWRkcl9mb3JtYXQpKTsKIAogCWRldi0+cGxhbmVfbW9kZSA9IE5WTV9QTEFORV9TSU5HTEU7CiAJZGV2LT5tYXhfcnFfc2l6ZSA9IGRldi0+b3BzLT5tYXhfcGh5c19zZWN0ICogZGV2LT5zZWNfc2l6ZTsKIAorCWlmIChncnAtPm10eXBlICE9IDApIHsKKwkJcHJfZXJyKCJudm06IG1lbW9yeSB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZ3JwLT5mbXR5cGUgIT0gMCAmJiBncnAtPmZtdHlwZSAhPSAxKSB7CisJCXByX2VycigibnZtOiBmbGFzaCB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoZ3JwLT5tcG9zICYgMHgwMjAyMDIpCiAJCWRldi0+cGxhbmVfbW9kZSA9IE5WTV9QTEFORV9ET1VCTEU7CiAJaWYgKGdycC0+bXBvcyAmIDB4MDQwNDA0KQpAQCAtMjEzLDIxICsyNDksMTcgQEAKIAogCWlmIChkZXYtPm10KQogCQlkZXYtPm10LT51bnJlZ2lzdGVyX21ncihkZXYpOwotCi0JbnZtX2NvcmVfZnJlZShkZXYpOwogfQogCiBzdGF0aWMgaW50IG52bV9pbml0KHN0cnVjdCBudm1fZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IG52bW1fdHlwZSAqbXQ7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoIWRldi0+cSB8fCAhZGV2LT5vcHMpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gcmV0OwogCi0JaWYgKGRldi0+b3BzLT5pZGVudGl0eShkZXYtPnEsICZkZXYtPmlkZW50aXR5KSkgeworCWlmIChkZXYtPm9wcy0+aWRlbnRpdHkoZGV2LCAmZGV2LT5pZGVudGl0eSkpIHsKIAkJcHJfZXJyKCJudm06IGRldmljZSBjb3VsZCBub3QgYmUgaWRlbnRpZmllZFxuIik7Ci0JCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMjUxLDI5ICsyODMsMTIgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JLyogcmVnaXN0ZXIgd2l0aCBkZXZpY2Ugd2l0aCBhIHN1cHBvcnRlZCBtYW5hZ2VyICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtdCwgJm52bV9tZ3JzLCBsaXN0KSB7Ci0JCXJldCA9IG10LT5yZWdpc3Rlcl9tZ3IoZGV2KTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycjsgLyogaW5pdGlhbGl6YXRpb24gZmFpbGVkICovCi0JCWlmIChyZXQgPiAwKSB7Ci0JCQlkZXYtPm10ID0gbXQ7Ci0JCQlicmVhazsgLyogc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkICovCi0JCX0KLQl9Ci0KLQlpZiAoIXJldCkgewotCQlwcl9pbmZvKCJudm06IG5vIGNvbXBhdGlibGUgbWFuYWdlciBmb3VuZC5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlwcl9pbmZvKCJudm06IHJlZ2lzdGVyZWQgJXMgWyV1LyV1LyV1LyV1LyV1LyV1XVxuIiwKIAkJCWRldi0+bmFtZSwgZGV2LT5zZWNfcGVyX3BnLCBkZXYtPm5yX3BsYW5lcywKIAkJCWRldi0+cGdzX3Blcl9ibGssIGRldi0+Ymxrc19wZXJfbHVuLCBkZXYtPm5yX2x1bnMsCiAJCQlkZXYtPm5yX2NobmxzKTsKIAlyZXR1cm4gMDsKIGVycjoKLQludm1fZnJlZShkZXYpOwogCXByX2VycigibnZtOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBudm1cbiIpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zMDgsMjIgKzMyMywyNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2luaXQ7CiAKLQlkb3duX3dyaXRlKCZudm1fbG9jayk7Ci0JbGlzdF9hZGQoJmRldi0+ZGV2aWNlcywgJm52bV9kZXZpY2VzKTsKLQl1cF93cml0ZSgmbnZtX2xvY2spOworCWlmIChkZXYtPm9wcy0+bWF4X3BoeXNfc2VjdCA+IDI1NikgeworCQlwcl9pbmZvKCJudm06IG1heCBzZWN0b3JzIHN1cHBvcnRlZCBpcyAyNTYuXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfaW5pdDsKKwl9CiAKIAlpZiAoZGV2LT5vcHMtPm1heF9waHlzX3NlY3QgPiAxKSB7Ci0JCWRldi0+cHBhbGlzdF9wb29sID0gZGV2LT5vcHMtPmNyZWF0ZV9kbWFfcG9vbChkZXYtPnEsCi0JCQkJCQkJCSJwcGFsaXN0Iik7CisJCWRldi0+cHBhbGlzdF9wb29sID0gZGV2LT5vcHMtPmNyZWF0ZV9kbWFfcG9vbChkZXYsICJwcGFsaXN0Iik7CiAJCWlmICghZGV2LT5wcGFsaXN0X3Bvb2wpIHsKIAkJCXByX2VycigibnZtOiBjb3VsZCBub3QgY3JlYXRlIHBwYSBwb29sXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX2luaXQ7CiAJCX0KLQl9IGVsc2UgaWYgKGRldi0+b3BzLT5tYXhfcGh5c19zZWN0ID4gMjU2KSB7Ci0JCXByX2luZm8oIm52bTogbWF4IHNlY3RvcnMgc3VwcG9ydGVkIGlzIDI1Ni5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiByZWdpc3RlciBkZXZpY2Ugd2l0aCBhIHN1cHBvcnRlZCBtZWRpYSBtYW5hZ2VyICovCisJZG93bl93cml0ZSgmbnZtX2xvY2spOworCWRldi0+bXQgPSBudm1faW5pdF9tZ3IoZGV2KTsKKwlsaXN0X2FkZCgmZGV2LT5kZXZpY2VzLCAmbnZtX2RldmljZXMpOworCXVwX3dyaXRlKCZudm1fbG9jayk7CisKIAlyZXR1cm4gMDsKIGVycl9pbml0OgogCWtmcmVlKGRldik7CkBAIC0zMzMsMTkgKzM1MywyMiBAQAogCiB2b2lkIG52bV91bnJlZ2lzdGVyKGNoYXIgKmRpc2tfbmFtZSkKIHsKLQlzdHJ1Y3QgbnZtX2RldiAqZGV2ID0gbnZtX2ZpbmRfbnZtX2RldihkaXNrX25hbWUpOworCXN0cnVjdCBudm1fZGV2ICpkZXY7CiAKKwlkb3duX3dyaXRlKCZudm1fbG9jayk7CisJZGV2ID0gbnZtX2ZpbmRfbnZtX2RldihkaXNrX25hbWUpOwogCWlmICghZGV2KSB7CiAJCXByX2VycigibnZtOiBjb3VsZCBub3QgZmluZCBkZXZpY2UgJXMgdG8gdW5yZWdpc3RlclxuIiwKIAkJCQkJCQkJZGlza19uYW1lKTsKKwkJdXBfd3JpdGUoJm52bV9sb2NrKTsKIAkJcmV0dXJuOwogCX0KIAotCW52bV9leGl0KGRldik7Ci0KLQlkb3duX3dyaXRlKCZudm1fbG9jayk7CiAJbGlzdF9kZWwoJmRldi0+ZGV2aWNlcyk7CiAJdXBfd3JpdGUoJm52bV9sb2NrKTsKKworCW52bV9leGl0KGRldik7CisJa2ZyZWUoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0wobnZtX3VucmVnaXN0ZXIpOwogCkBAIC0zNTgsMzggKzM4MSwyNCBAQAogewogCXN0cnVjdCBudm1faW9jdGxfY3JlYXRlX3NpbXBsZSAqcyA9ICZjcmVhdGUtPmNvbmYuczsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqdHF1ZXVlOwotCXN0cnVjdCBudm1tX3R5cGUgKm10OwogCXN0cnVjdCBnZW5kaXNrICp0ZGlzazsKIAlzdHJ1Y3QgbnZtX3RndF90eXBlICp0dDsKIAlzdHJ1Y3QgbnZtX3RhcmdldCAqdDsKIAl2b2lkICp0YXJnZXRkYXRhOwotCWludCByZXQgPSAwOwogCiAJaWYgKCFkZXYtPm10KSB7Ci0JCS8qIHJlZ2lzdGVyIHdpdGggZGV2aWNlIHdpdGggYSBzdXBwb3J0ZWQgTlZNIG1hbmFnZXIgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtdCwgJm52bV9tZ3JzLCBsaXN0KSB7Ci0JCQlyZXQgPSBtdC0+cmVnaXN0ZXJfbWdyKGRldik7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OyAvKiBpbml0aWFsaXphdGlvbiBmYWlsZWQgKi8KLQkJCWlmIChyZXQgPiAwKSB7Ci0JCQkJZGV2LT5tdCA9IG10OwotCQkJCWJyZWFrOyAvKiBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgKi8KLQkJCX0KLQkJfQotCi0JCWlmICghcmV0KSB7Ci0JCQlwcl9pbmZvKCJudm06IG5vIGNvbXBhdGlibGUgbnZtIG1hbmFnZXIgZm91bmQuXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotCi0JdHQgPSBudm1fZmluZF90YXJnZXRfdHlwZShjcmVhdGUtPnRndHR5cGUpOwotCWlmICghdHQpIHsKLQkJcHJfZXJyKCJudm06IHRhcmdldCB0eXBlICVzIG5vdCBmb3VuZFxuIiwgY3JlYXRlLT50Z3R0eXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXByX2luZm8oIm52bTogZGV2aWNlIGhhcyBubyBtZWRpYSBtYW5hZ2VyIHJlZ2lzdGVyZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZG93bl93cml0ZSgmbnZtX2xvY2spOworCXR0ID0gbnZtX2ZpbmRfdGFyZ2V0X3R5cGUoY3JlYXRlLT50Z3R0eXBlKTsKKwlpZiAoIXR0KSB7CisJCXByX2VycigibnZtOiB0YXJnZXQgdHlwZSAlcyBub3QgZm91bmRcbiIsIGNyZWF0ZS0+dGd0dHlwZSk7CisJCXVwX3dyaXRlKCZudm1fbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmRldi0+b25saW5lX3RhcmdldHMsIGxpc3QpIHsKIAkJaWYgKCFzdHJjbXAoY3JlYXRlLT50Z3RuYW1lLCB0LT5kaXNrLT5kaXNrX25hbWUpKSB7CiAJCQlwcl9lcnIoIm52bTogdGFyZ2V0IG5hbWUgYWxyZWFkeSBleGlzdHMuXG4iKTsKQEAgLTQ1NywxMSArNDY2LDExIEBACiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbnZtX2xvY2spOwogCiAJZGVsX2dlbmRpc2sodGRpc2spOworCWJsa19jbGVhbnVwX3F1ZXVlKHEpOworCiAJaWYgKHR0LT5leGl0KQogCQl0dC0+ZXhpdCh0ZGlzay0+cHJpdmF0ZV9kYXRhKTsKIAotCWJsa19jbGVhbnVwX3F1ZXVlKHEpOwotCiAJcHV0X2Rpc2sodGRpc2spOwogCiAJbGlzdF9kZWwoJnQtPmxpc3QpOwpAQCAtNDczLDcgKzQ4Miw5IEBACiAJc3RydWN0IG52bV9kZXYgKmRldjsKIAlzdHJ1Y3QgbnZtX2lvY3RsX2NyZWF0ZV9zaW1wbGUgKnM7CiAKKwlkb3duX3dyaXRlKCZudm1fbG9jayk7CiAJZGV2ID0gbnZtX2ZpbmRfbnZtX2RldihjcmVhdGUtPmRldik7CisJdXBfd3JpdGUoJm52bV9sb2NrKTsKIAlpZiAoIWRldikgewogCQlwcl9lcnIoIm52bTogZGV2aWNlIG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTMyLDcgKzU0Myw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWRvd25fd3JpdGUoJm52bV9sb2NrKTsKIAlkZXYgPSBudm1fZmluZF9udm1fZGV2KGRldm5hbWUpOworCXVwX3dyaXRlKCZudm1fbG9jayk7CiAJaWYgKCFkZXYpIHsKIAkJcHJfZXJyKCJudm06IGRldmljZSBub3QgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU0MSw3ICs1NTQsNyBAQAogCWlmICghZGV2LT5tdCkKIAkJcmV0dXJuIDA7CiAKLQlkZXYtPm10LT5mcmVlX2Jsb2Nrc19wcmludChkZXYpOworCWRldi0+bXQtPmx1bl9pbmZvX3ByaW50KGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY3Nyw4ICs2OTAsMTAgQEAKIAlpbmZvLT50Z3RzaXplID0gdGd0X2l0ZXI7CiAJdXBfd3JpdGUoJm52bV9sb2NrKTsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBpbmZvLCBzaXplb2Yoc3RydWN0IG52bV9pb2N0bF9pbmZvKSkpCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsIGluZm8sIHNpemVvZihzdHJ1Y3QgbnZtX2lvY3RsX2luZm8pKSkgeworCQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCiAJa2ZyZWUoaW5mbyk7CiAJcmV0dXJuIDA7CkBAIC03MjEsOCArNzM2LDExIEBACiAKIAlkZXZpY2VzLT5ucl9kZXZpY2VzID0gaTsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBkZXZpY2VzLCBzaXplb2Yoc3RydWN0IG52bV9pb2N0bF9nZXRfZGV2aWNlcykpKQorCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBkZXZpY2VzLAorCQkJIHNpemVvZihzdHJ1Y3QgbnZtX2lvY3RsX2dldF9kZXZpY2VzKSkpIHsKKwkJa2ZyZWUoZGV2aWNlcyk7CiAJCXJldHVybiAtRUZBVUxUOworCX0KIAogCWtmcmVlKGRldmljZXMpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9saWdodG52bS9nZW5udm0uYyBiL2RyaXZlcnMvbGlnaHRudm0vZ2VubnZtLmMKaW5kZXggYWUxZmIyYi4uYTU0YjMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9saWdodG52bS9nZW5udm0uYworKysgYi9kcml2ZXJzL2xpZ2h0bnZtL2dlbm52bS5jCkBAIC02MCwyMyArNjAsMjcgQEAKIAkJbHVuLT52bHVuLmx1bl9pZCA9IGkgJSBkZXYtPmx1bnNfcGVyX2Nobmw7CiAJCWx1bi0+dmx1bi5jaG5sX2lkID0gaSAvIGRldi0+bHVuc19wZXJfY2hubDsKIAkJbHVuLT52bHVuLm5yX2ZyZWVfYmxvY2tzID0gZGV2LT5ibGtzX3Blcl9sdW47CisJCWx1bi0+dmx1bi5ucl9pbnVzZV9ibG9ja3MgPSAwOworCQlsdW4tPnZsdW4ubnJfYmFkX2Jsb2NrcyA9IDA7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdlbm52bV9ibG9ja19iYih1MzIgbHVuX2lkLCB2b2lkICpiYl9iaXRtYXAsIHVuc2lnbmVkIGludCBucl9ibG9ja3MsCitzdGF0aWMgaW50IGdlbm52bV9ibG9ja19iYihzdHJ1Y3QgcHBhX2FkZHIgcHBhLCBpbnQgbnJfYmxvY2tzLCB1OCAqYmxrcywKIAkJCQkJCQkJdm9pZCAqcHJpdmF0ZSkKIHsKIAlzdHJ1Y3QgZ2VuX252bSAqZ24gPSBwcml2YXRlOwotCXN0cnVjdCBnZW5fbHVuICpsdW4gPSAmZ24tPmx1bnNbbHVuX2lkXTsKKwlzdHJ1Y3QgbnZtX2RldiAqZGV2ID0gZ24tPmRldjsKKwlzdHJ1Y3QgZ2VuX2x1biAqbHVuOwogCXN0cnVjdCBudm1fYmxvY2sgKmJsazsKIAlpbnQgaTsKIAotCWlmICh1bmxpa2VseShiaXRtYXBfZW1wdHkoYmJfYml0bWFwLCBucl9ibG9ja3MpKSkKLQkJcmV0dXJuIDA7CisJbHVuID0gJmduLT5sdW5zWyhkZXYtPmx1bnNfcGVyX2NobmwgKiBwcGEuZy5jaCkgKyBwcGEuZy5sdW5dOwogCi0JaSA9IC0xOwotCXdoaWxlICgoaSA9IGZpbmRfbmV4dF9iaXQoYmJfYml0bWFwLCBucl9ibG9ja3MsIGkgKyAxKSkgPCBucl9ibG9ja3MpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfYmxvY2tzOyBpKyspIHsKKwkJaWYgKGJsa3NbaV0gPT0gMCkKKwkJCWNvbnRpbnVlOworCiAJCWJsayA9ICZsdW4tPnZsdW4uYmxvY2tzW2ldOwogCQlpZiAoIWJsaykgewogCQkJcHJfZXJyKCJnZW5udm06IEJCIGRhdGEgaXMgb3V0IG9mIGJvdW5kcy5cbiIpOwpAQCAtODQsNiArODgsNyBAQAogCQl9CiAKIAkJbGlzdF9tb3ZlX3RhaWwoJmJsay0+bGlzdCwgJmx1bi0+YmJfbGlzdCk7CisJCWx1bi0+dmx1bi5ucl9iYWRfYmxvY2tzKys7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMzYsNiArMTQxLDcgQEAKIAkJCWxpc3RfbW92ZV90YWlsKCZibGstPmxpc3QsICZsdW4tPnVzZWRfbGlzdCk7CiAJCQlibGstPnR5cGUgPSAxOwogCQkJbHVuLT52bHVuLm5yX2ZyZWVfYmxvY2tzLS07CisJCQlsdW4tPnZsdW4ubnJfaW51c2VfYmxvY2tzKys7CiAJCX0KIAl9CiAKQEAgLTE2NCwyMiArMTcwLDMyIEBACiAJCQlibG9jay0+aWQgPSBjdXJfYmxvY2tfaWQrKzsKIAogCQkJLyogRmlyc3QgYmxvY2sgaXMgcmVzZXJ2ZWQgZm9yIGRldmljZSAqLwotCQkJaWYgKHVubGlrZWx5KGx1bl9pdGVyID09IDAgJiYgYmxrX2l0ZXIgPT0gMCkpCisJCQlpZiAodW5saWtlbHkobHVuX2l0ZXIgPT0gMCAmJiBibGtfaXRlciA9PSAwKSkgeworCQkJCWx1bi0+dmx1bi5ucl9mcmVlX2Jsb2Nrcy0tOwogCQkJCWNvbnRpbnVlOworCQkJfQogCiAJCQlsaXN0X2FkZF90YWlsKCZibG9jay0+bGlzdCwgJmx1bi0+ZnJlZV9saXN0KTsKIAkJfQogCiAJCWlmIChkZXYtPm9wcy0+Z2V0X2JiX3RibCkgewotCQkJcmV0ID0gZGV2LT5vcHMtPmdldF9iYl90YmwoZGV2LT5xLCBsdW4tPnZsdW4uaWQsCi0JCQkJCWRldi0+Ymxrc19wZXJfbHVuLCBnZW5udm1fYmxvY2tfYmIsIGduKTsKKwkJCXN0cnVjdCBwcGFfYWRkciBwcGE7CisKKwkJCXBwYS5wcGEgPSAwOworCQkJcHBhLmcuY2ggPSBsdW4tPnZsdW4uY2hubF9pZDsKKwkJCXBwYS5nLmx1biA9IGx1bi0+dmx1bi5pZDsKKwkJCXBwYSA9IGdlbmVyaWNfdG9fZGV2X2FkZHIoZGV2LCBwcGEpOworCisJCQlyZXQgPSBkZXYtPm9wcy0+Z2V0X2JiX3RibChkZXYsIHBwYSwKKwkJCQkJCWRldi0+Ymxrc19wZXJfbHVuLAorCQkJCQkJZ2VubnZtX2Jsb2NrX2JiLCBnbik7CiAJCQlpZiAocmV0KQogCQkJCXByX2VycigiZ2VubnZtOiBjb3VsZCBub3QgcmVhZCBCQiB0YWJsZVxuIik7CiAJCX0KIAl9CiAKIAlpZiAoZGV2LT5vcHMtPmdldF9sMnBfdGJsKSB7Ci0JCXJldCA9IGRldi0+b3BzLT5nZXRfbDJwX3RibChkZXYtPnEsIDAsIGRldi0+dG90YWxfcGFnZXMsCisJCXJldCA9IGRldi0+b3BzLT5nZXRfbDJwX3RibChkZXYsIDAsIGRldi0+dG90YWxfcGFnZXMsCiAJCQkJCQkJZ2VubnZtX2Jsb2NrX21hcCwgZGV2KTsKIAkJaWYgKHJldCkgewogCQkJcHJfZXJyKCJnZW5udm06IGNvdWxkIG5vdCByZWFkIEwyUCB0YWJsZS5cbiIpOwpAQCAtMTkwLDE1ICsyMDYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZ2VubnZtX2ZyZWUoc3RydWN0IG52bV9kZXYgKmRldikKK3sKKwlnZW5udm1fYmxvY2tzX2ZyZWUoZGV2KTsKKwlnZW5udm1fbHVuc19mcmVlKGRldik7CisJa2ZyZWUoZGV2LT5tcCk7CisJZGV2LT5tcCA9IE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgZ2VubnZtX3JlZ2lzdGVyKHN0cnVjdCBudm1fZGV2ICpkZXYpCiB7CiAJc3RydWN0IGdlbl9udm0gKmduOwogCWludCByZXQ7CiAKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlnbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnZW5fbnZtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFnbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlnbi0+ZGV2ID0gZGV2OwogCWduLT5ucl9sdW5zID0gZGV2LT5ucl9sdW5zOwogCWRldi0+bXAgPSBnbjsKIApAQCAtMjE2LDE2ICsyNDQsMTUgQEAKIAogCXJldHVybiAxOwogZXJyOgotCWtmcmVlKGduKTsKKwlnZW5udm1fZnJlZShkZXYpOworCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbm52bV91bnJlZ2lzdGVyKHN0cnVjdCBudm1fZGV2ICpkZXYpCiB7Ci0JZ2VubnZtX2Jsb2Nrc19mcmVlKGRldik7Ci0JZ2VubnZtX2x1bnNfZnJlZShkZXYpOwotCWtmcmVlKGRldi0+bXApOwotCWRldi0+bXAgPSBOVUxMOworCWdlbm52bV9mcmVlKGRldik7CisJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbnZtX2Jsb2NrICpnZW5udm1fZ2V0X2JsayhzdHJ1Y3QgbnZtX2RldiAqZGV2LApAQCAtMjQwLDIzICsyNjcsMjEgQEAKIAlpZiAobGlzdF9lbXB0eSgmbHVuLT5mcmVlX2xpc3QpKSB7CiAJCXByX2Vycl9yYXRlbGltaXRlZCgiZ2VubnZtOiBsdW4gJXUgaGF2ZSBubyBmcmVlIHBhZ2VzIGF2YWlsYWJsZSIsCiAJCQkJCQkJCWx1bi0+dmx1bi5pZCk7Ci0JCXNwaW5fdW5sb2NrKCZ2bHVuLT5sb2NrKTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2hpbGUgKCFpc19nYyAmJiBsdW4tPnZsdW4ubnJfZnJlZV9ibG9ja3MgPCBsdW4tPnJlc2VydmVkX2Jsb2NrcykgewotCQlzcGluX3VubG9jaygmdmx1bi0+bG9jayk7CisJaWYgKCFpc19nYyAmJiBsdW4tPnZsdW4ubnJfZnJlZV9ibG9ja3MgPCBsdW4tPnJlc2VydmVkX2Jsb2NrcykKIAkJZ290byBvdXQ7Ci0JfQogCiAJYmxrID0gbGlzdF9maXJzdF9lbnRyeSgmbHVuLT5mcmVlX2xpc3QsIHN0cnVjdCBudm1fYmxvY2ssIGxpc3QpOwogCWxpc3RfbW92ZV90YWlsKCZibGstPmxpc3QsICZsdW4tPnVzZWRfbGlzdCk7CiAJYmxrLT50eXBlID0gMTsKIAogCWx1bi0+dmx1bi5ucl9mcmVlX2Jsb2Nrcy0tOworCWx1bi0+dmx1bi5ucl9pbnVzZV9ibG9ja3MrKzsKIAotCXNwaW5fdW5sb2NrKCZ2bHVuLT5sb2NrKTsKIG91dDoKKwlzcGluX3VubG9jaygmdmx1bi0+bG9jayk7CiAJcmV0dXJuIGJsazsKIH0KIApAQCAtMjcxLDE2ICsyOTYsMjEgQEAKIAljYXNlIDE6CiAJCWxpc3RfbW92ZV90YWlsKCZibGstPmxpc3QsICZsdW4tPmZyZWVfbGlzdCk7CiAJCWx1bi0+dmx1bi5ucl9mcmVlX2Jsb2NrcysrOworCQlsdW4tPnZsdW4ubnJfaW51c2VfYmxvY2tzLS07CiAJCWJsay0+dHlwZSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJbGlzdF9tb3ZlX3RhaWwoJmJsay0+bGlzdCwgJmx1bi0+YmJfbGlzdCk7CisJCWx1bi0+dmx1bi5ucl9iYWRfYmxvY2tzKys7CisJCWx1bi0+dmx1bi5ucl9pbnVzZV9ibG9ja3MtLTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTl9PTkNFKDEpOwogCQlwcl9lcnIoImdlbm52bTogZXJyb25lb3VzIGJsb2NrIHR5cGUgKCVsdSAtPiAldSlcbiIsCiAJCQkJCQkJYmxrLT5pZCwgYmxrLT50eXBlKTsKIAkJbGlzdF9tb3ZlX3RhaWwoJmJsay0+bGlzdCwgJmx1bi0+YmJfbGlzdCk7CisJCWx1bi0+dmx1bi5ucl9iYWRfYmxvY2tzKys7CisJCWx1bi0+dmx1bi5ucl9pbnVzZV9ibG9ja3MtLTsKIAl9CiAKIAlzcGluX3VubG9jaygmdmx1bi0+bG9jayk7CkBAIC0yOTIsMTAgKzMyMiwxMCBAQAogCiAJaWYgKHJxZC0+bnJfcGFnZXMgPiAxKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBycWQtPm5yX3BhZ2VzOyBpKyspCi0JCQlycWQtPnBwYV9saXN0W2ldID0gYWRkcl90b19nZW5lcmljX21vZGUoZGV2LAorCQkJcnFkLT5wcGFfbGlzdFtpXSA9IGRldl90b19nZW5lcmljX2FkZHIoZGV2LAogCQkJCQkJCXJxZC0+cHBhX2xpc3RbaV0pOwogCX0gZWxzZSB7Ci0JCXJxZC0+cHBhX2FkZHIgPSBhZGRyX3RvX2dlbmVyaWNfbW9kZShkZXYsIHJxZC0+cHBhX2FkZHIpOworCQlycWQtPnBwYV9hZGRyID0gZGV2X3RvX2dlbmVyaWNfYWRkcihkZXYsIHJxZC0+cHBhX2FkZHIpOwogCX0KIH0KIApAQCAtMzA1LDEwICszMzUsMTAgQEAKIAogCWlmIChycWQtPm5yX3BhZ2VzID4gMSkgewogCQlmb3IgKGkgPSAwOyBpIDwgcnFkLT5ucl9wYWdlczsgaSsrKQotCQkJcnFkLT5wcGFfbGlzdFtpXSA9IGdlbmVyaWNfdG9fYWRkcl9tb2RlKGRldiwKKwkJCXJxZC0+cHBhX2xpc3RbaV0gPSBnZW5lcmljX3RvX2Rldl9hZGRyKGRldiwKIAkJCQkJCQlycWQtPnBwYV9saXN0W2ldKTsKIAl9IGVsc2UgewotCQlycWQtPnBwYV9hZGRyID0gZ2VuZXJpY190b19hZGRyX21vZGUoZGV2LCBycWQtPnBwYV9hZGRyKTsKKwkJcnFkLT5wcGFfYWRkciA9IGdlbmVyaWNfdG9fZGV2X2FkZHIoZGV2LCBycWQtPnBwYV9hZGRyKTsKIAl9CiB9CiAKQEAgLTMyMSw3ICszNTEsNyBAQAogCWdlbm52bV9nZW5lcmljX3RvX2FkZHJfbW9kZShkZXYsIHJxZCk7CiAKIAlycWQtPmRldiA9IGRldjsKLQlyZXR1cm4gZGV2LT5vcHMtPnN1Ym1pdF9pbyhkZXYtPnEsIHJxZCk7CisJcmV0dXJuIGRldi0+b3BzLT5zdWJtaXRfaW8oZGV2LCBycWQpOwogfQogCiBzdGF0aWMgdm9pZCBnZW5udm1fYmxrX3NldF90eXBlKHN0cnVjdCBudm1fZGV2ICpkZXYsIHN0cnVjdCBwcGFfYWRkciAqcHBhLApAQCAtMzU0LDEwICszODQsMTAgQEAKIHsKIAlpbnQgaTsKIAotCWlmICghZGV2LT5vcHMtPnNldF9iYikKKwlpZiAoIWRldi0+b3BzLT5zZXRfYmJfdGJsKQogCQlyZXR1cm47CiAKLQlpZiAoZGV2LT5vcHMtPnNldF9iYihkZXYtPnEsIHJxZCwgMSkpCisJaWYgKGRldi0+b3BzLT5zZXRfYmJfdGJsKGRldiwgcnFkLCAxKSkKIAkJcmV0dXJuOwogCiAJZ2VubnZtX2FkZHJfdG9fZ2VuZXJpY19tb2RlKGRldiwgcnFkKTsKQEAgLTQyNSw3ICs0NTUsNyBAQAogCiAJZ2VubnZtX2dlbmVyaWNfdG9fYWRkcl9tb2RlKGRldiwgJnJxZCk7CiAKLQlyZXQgPSBkZXYtPm9wcy0+ZXJhc2VfYmxvY2soZGV2LT5xLCAmcnFkKTsKKwlyZXQgPSBkZXYtPm9wcy0+ZXJhc2VfYmxvY2soZGV2LCAmcnFkKTsKIAogCWlmIChwbGFuZV9jbnQpCiAJCW52bV9kZXZfZG1hX2ZyZWUoZGV2LCBycWQucHBhX2xpc3QsIHJxZC5kbWFfcHBhX2xpc3QpOwpAQCAtNDQwLDE1ICs0NzAsMjQgQEAKIAlyZXR1cm4gJmduLT5sdW5zW2x1bmlkXS52bHVuOwogfQogCi1zdGF0aWMgdm9pZCBnZW5udm1fZnJlZV9ibG9ja3NfcHJpbnQoc3RydWN0IG52bV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIGdlbm52bV9sdW5faW5mb19wcmludChzdHJ1Y3QgbnZtX2RldiAqZGV2KQogewogCXN0cnVjdCBnZW5fbnZtICpnbiA9IGRldi0+bXA7CiAJc3RydWN0IGdlbl9sdW4gKmx1bjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWdlbm52bV9mb3JfZWFjaF9sdW4oZ24sIGx1biwgaSkKLQkJcHJfaW5mbygiJXM6IGx1biU4dVx0JXVcbiIsCi0JCQkJCWRldi0+bmFtZSwgaSwgbHVuLT52bHVuLm5yX2ZyZWVfYmxvY2tzKTsKKworCWdlbm52bV9mb3JfZWFjaF9sdW4oZ24sIGx1biwgaSkgeworCQlzcGluX2xvY2soJmx1bi0+dmx1bi5sb2NrKTsKKworCQlwcl9pbmZvKCIlczogbHVuJTh1XHQldVx0JXVcdCV1XG4iLAorCQkJCWRldi0+bmFtZSwgaSwKKwkJCQlsdW4tPnZsdW4ubnJfZnJlZV9ibG9ja3MsCisJCQkJbHVuLT52bHVuLm5yX2ludXNlX2Jsb2NrcywKKwkJCQlsdW4tPnZsdW4ubnJfYmFkX2Jsb2Nrcyk7CisKKwkJc3Bpbl91bmxvY2soJmx1bi0+dmx1bi5sb2NrKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbnZtbV90eXBlIGdlbm52bSA9IHsKQEAgLTQ2Niw3ICs1MDUsNyBAQAogCS5lcmFzZV9ibGsJPSBnZW5udm1fZXJhc2VfYmxrLAogCiAJLmdldF9sdW4JPSBnZW5udm1fZ2V0X2x1biwKLQkuZnJlZV9ibG9ja3NfcHJpbnQgPSBnZW5udm1fZnJlZV9ibG9ja3NfcHJpbnQsCisJLmx1bl9pbmZvX3ByaW50ID0gZ2VubnZtX2x1bl9pbmZvX3ByaW50LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZ2VubnZtX21vZHVsZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xpZ2h0bnZtL2dlbm52bS5oIGIvZHJpdmVycy9saWdodG52bS9nZW5udm0uaAppbmRleCBkMjNiZDM1Li45YzI0YjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xpZ2h0bnZtL2dlbm52bS5oCisrKyBiL2RyaXZlcnMvbGlnaHRudm0vZ2VubnZtLmgKQEAgLTM1LDYgKzM1LDggQEAKIH07CiAKIHN0cnVjdCBnZW5fbnZtIHsKKwlzdHJ1Y3QgbnZtX2RldiAqZGV2OworCiAJaW50IG5yX2x1bnM7CiAJc3RydWN0IGdlbl9sdW4gKmx1bnM7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9saWdodG52bS9ycnBjLmMgYi9kcml2ZXJzL2xpZ2h0bnZtL3JycGMuYwppbmRleCA3YmE2NGM4Li4xMzRlNGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xpZ2h0bnZtL3JycGMuYworKysgYi9kcml2ZXJzL2xpZ2h0bnZtL3JycGMuYwpAQCAtMTIzLDEyICsxMjMsNDIgQEAKIAlyZXR1cm4gYmxrLT5pZCAqIHJycGMtPmRldi0+cGdzX3Blcl9ibGs7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcHBhX2FkZHIgbGluZWFyX3RvX2dlbmVyaWNfYWRkcihzdHJ1Y3QgbnZtX2RldiAqZGV2LAorCQkJCQkJCXN0cnVjdCBwcGFfYWRkciByKQoreworCXN0cnVjdCBwcGFfYWRkciBsOworCWludCBzZWNzLCBwZ3MsIGJsa3MsIGx1bnM7CisJc2VjdG9yX3QgcHBhID0gci5wcGE7CisKKwlsLnBwYSA9IDA7CisKKwlkaXZfdTY0X3JlbShwcGEsIGRldi0+c2VjX3Blcl9wZywgJnNlY3MpOworCWwuZy5zZWMgPSBzZWNzOworCisJc2VjdG9yX2RpdihwcGEsIGRldi0+c2VjX3Blcl9wZyk7CisJZGl2X3U2NF9yZW0ocHBhLCBkZXYtPnNlY19wZXJfYmxrLCAmcGdzKTsKKwlsLmcucGcgPSBwZ3M7CisKKwlzZWN0b3JfZGl2KHBwYSwgZGV2LT5wZ3NfcGVyX2Jsayk7CisJZGl2X3U2NF9yZW0ocHBhLCBkZXYtPmJsa3NfcGVyX2x1biwgJmJsa3MpOworCWwuZy5ibGsgPSBibGtzOworCisJc2VjdG9yX2RpdihwcGEsIGRldi0+Ymxrc19wZXJfbHVuKTsKKwlkaXZfdTY0X3JlbShwcGEsIGRldi0+bHVuc19wZXJfY2hubCwgJmx1bnMpOworCWwuZy5sdW4gPSBsdW5zOworCisJc2VjdG9yX2RpdihwcGEsIGRldi0+bHVuc19wZXJfY2hubCk7CisJbC5nLmNoID0gcHBhOworCisJcmV0dXJuIGw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcHBhX2FkZHIgcnJwY19wcGFfdG9fZ2FkZHIoc3RydWN0IG52bV9kZXYgKmRldiwgdTY0IGFkZHIpCiB7CiAJc3RydWN0IHBwYV9hZGRyIHBhZGRyOwogCiAJcGFkZHIucHBhID0gYWRkcjsKLQlyZXR1cm4gX19saW5lYXJfdG9fZ2VuZXJpY19hZGRyKGRldiwgcGFkZHIpOworCXJldHVybiBsaW5lYXJfdG9fZ2VuZXJpY19hZGRyKGRldiwgcGFkZHIpOwogfQogCiAvKiByZXF1aXJlcyBsdW4tPmxvY2sgdGFrZW4gKi8KQEAgLTE1Miw3ICsxODIsNyBAQAogCXN0cnVjdCBudm1fYmxvY2sgKmJsazsKIAlzdHJ1Y3QgcnJwY19ibG9jayAqcmJsazsKIAotCWJsayA9IG52bV9nZXRfYmxrKHJycGMtPmRldiwgcmx1bi0+cGFyZW50LCAwKTsKKwlibGsgPSBudm1fZ2V0X2JsayhycnBjLT5kZXYsIHJsdW4tPnBhcmVudCwgZmxhZ3MpOwogCWlmICghYmxrKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTcyLDYgKzIwMiwyMCBAQAogCW52bV9wdXRfYmxrKHJycGMtPmRldiwgcmJsay0+cGFyZW50KTsKIH0KIAorc3RhdGljIHZvaWQgcnJwY19wdXRfYmxrcyhzdHJ1Y3QgcnJwYyAqcnJwYykKK3sKKwlzdHJ1Y3QgcnJwY19sdW4gKnJsdW47CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnJwYy0+bnJfbHVuczsgaSsrKSB7CisJCXJsdW4gPSAmcnJwYy0+bHVuc1tpXTsKKwkJaWYgKHJsdW4tPmN1cikKKwkJCXJycGNfcHV0X2JsayhycnBjLCBybHVuLT5jdXIpOworCQlpZiAocmx1bi0+Z2NfY3VyKQorCQkJcnJwY19wdXRfYmxrKHJycGMsIHJsdW4tPmdjX2N1cik7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IHJycGNfbHVuICpnZXRfbmV4dF9sdW4oc3RydWN0IHJycGMgKnJycGMpCiB7CiAJaW50IG5leHQgPSBhdG9taWNfaW5jX3JldHVybigmcnJwYy0+bmV4dF9sdW4pOwpAQCAtOTcyLDcgKzEwMTYsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIEJyaW5nIHVwIHRoZSBtYXBwaW5nIHRhYmxlIGZyb20gZGV2aWNlICovCi0JcmV0ID0gZGV2LT5vcHMtPmdldF9sMnBfdGJsKGRldi0+cSwgMCwgZGV2LT50b3RhbF9wYWdlcywKKwlyZXQgPSBkZXYtPm9wcy0+Z2V0X2wycF90YmwoZGV2LCAwLCBkZXYtPnRvdGFsX3BhZ2VzLAogCQkJCQkJCXJycGNfbDJwX3VwZGF0ZSwgcnJwYyk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIm52bTogcnJwYzogY291bGQgbm90IHJlYWQgTDJQIHRhYmxlLlxuIik7CkBAIC0xMTk0LDE4ICsxMjM4LDIxIEBACiAKIAkJcmJsayA9IHJycGNfZ2V0X2JsayhycnBjLCBybHVuLCAwKTsKIAkJaWYgKCFyYmxrKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlnb3RvIGVycjsKIAogCQlycnBjX3NldF9sdW5fY3VyKHJsdW4sIHJibGspOwogCiAJCS8qIEVtZXJnZW5jeSBnYyBibG9jayAqLwogCQlyYmxrID0gcnJwY19nZXRfYmxrKHJycGMsIHJsdW4sIDEpOwogCQlpZiAoIXJibGspCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWdvdG8gZXJyOwogCQlybHVuLT5nY19jdXIgPSByYmxrOwogCX0KIAogCXJldHVybiAwOworZXJyOgorCXJycGNfcHV0X2Jsa3MocnJwYyk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbnZtX3RndF90eXBlIHR0X3JycGM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggOTE3ZDQ3ZS4uMzE0N2M4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtMTEyLDcgKzExMiw4IEBACiAgKiBhbmQgZW5jcnlwdHMgLyBkZWNyeXB0cyBhdCB0aGUgc2FtZSB0aW1lLgogICovCiBlbnVtIGZsYWdzIHsgRE1fQ1JZUFRfU1VTUEVOREVELCBETV9DUllQVF9LRVlfVkFMSUQsCi0JICAgICBETV9DUllQVF9TQU1FX0NQVSwgRE1fQ1JZUFRfTk9fT0ZGTE9BRCB9OworCSAgICAgRE1fQ1JZUFRfU0FNRV9DUFUsIERNX0NSWVBUX05PX09GRkxPQUQsCisJICAgICBETV9DUllQVF9FWElUX1RIUkVBRH07CiAKIC8qCiAgKiBUaGUgZmllbGRzIGluIGhlcmUgbXVzdCBiZSByZWFkIG9ubHkgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCkBAIC0xMjAzLDIwICsxMjA0LDE4IEBACiAJCWlmICghUkJfRU1QVFlfUk9PVCgmY2MtPndyaXRlX3RyZWUpKQogCQkJZ290byBwb3BfZnJvbV9saXN0OwogCisJCWlmICh1bmxpa2VseSh0ZXN0X2JpdChETV9DUllQVF9FWElUX1RIUkVBRCwgJmNjLT5mbGFncykpKSB7CisJCQlzcGluX3VubG9ja19pcnEoJmNjLT53cml0ZV90aHJlYWRfd2FpdC5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlfX2FkZF93YWl0X3F1ZXVlKCZjYy0+d3JpdGVfdGhyZWFkX3dhaXQsICZ3YWl0KTsKIAogCQlzcGluX3VubG9ja19pcnEoJmNjLT53cml0ZV90aHJlYWRfd2FpdC5sb2NrKTsKIAotCQlpZiAodW5saWtlbHkoa3RocmVhZF9zaG91bGRfc3RvcCgpKSkgewotCQkJc2V0X3Rhc2tfc3RhdGUoY3VycmVudCwgVEFTS19SVU5OSU5HKTsKLQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjYy0+d3JpdGVfdGhyZWFkX3dhaXQsICZ3YWl0KTsKLQkJCWJyZWFrOwotCQl9Ci0KIAkJc2NoZWR1bGUoKTsKIAotCQlzZXRfdGFza19zdGF0ZShjdXJyZW50LCBUQVNLX1JVTk5JTkcpOwogCQlzcGluX2xvY2tfaXJxKCZjYy0+d3JpdGVfdGhyZWFkX3dhaXQubG9jayk7CiAJCV9fcmVtb3ZlX3dhaXRfcXVldWUoJmNjLT53cml0ZV90aHJlYWRfd2FpdCwgJndhaXQpOwogCQlnb3RvIGNvbnRpbnVlX2xvY2tlZDsKQEAgLTE1MzEsOCArMTUzMCwxMyBAQAogCWlmICghY2MpCiAJCXJldHVybjsKIAotCWlmIChjYy0+d3JpdGVfdGhyZWFkKQorCWlmIChjYy0+d3JpdGVfdGhyZWFkKSB7CisJCXNwaW5fbG9ja19pcnEoJmNjLT53cml0ZV90aHJlYWRfd2FpdC5sb2NrKTsKKwkJc2V0X2JpdChETV9DUllQVF9FWElUX1RIUkVBRCwgJmNjLT5mbGFncyk7CisJCXdha2VfdXBfbG9ja2VkKCZjYy0+d3JpdGVfdGhyZWFkX3dhaXQpOworCQlzcGluX3VubG9ja19pcnEoJmNjLT53cml0ZV90aHJlYWRfd2FpdC5sb2NrKTsKIAkJa3RocmVhZF9zdG9wKGNjLT53cml0ZV90aHJlYWQpOworCX0KIAogCWlmIChjYy0+aW9fcXVldWUpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGNjLT5pb19xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKaW5kZXggYWFhNmNhYS4uY2ZhMjlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwpAQCAtMTUzNywzMiArMTUzNywzNCBAQAogCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICoqYmRldiwgZm1vZGVfdCAqbW9kZSkKIHsKIAlzdHJ1Y3QgbXVsdGlwYXRoICptID0gdGktPnByaXZhdGU7Ci0Jc3RydWN0IHBncGF0aCAqcGdwYXRoOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHI7CiAKLQlyID0gMDsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZtLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIW0tPmN1cnJlbnRfcGdwYXRoKQogCQlfX2Nob29zZV9wZ3BhdGgobSwgMCk7CiAKLQlwZ3BhdGggPSBtLT5jdXJyZW50X3BncGF0aDsKLQotCWlmIChwZ3BhdGgpIHsKLQkJKmJkZXYgPSBwZ3BhdGgtPnBhdGguZGV2LT5iZGV2OwotCQkqbW9kZSA9IHBncGF0aC0+cGF0aC5kZXYtPm1vZGU7CisJaWYgKG0tPmN1cnJlbnRfcGdwYXRoKSB7CisJCWlmICghbS0+cXVldWVfaW8pIHsKKwkJCSpiZGV2ID0gbS0+Y3VycmVudF9wZ3BhdGgtPnBhdGguZGV2LT5iZGV2OworCQkJKm1vZGUgPSBtLT5jdXJyZW50X3BncGF0aC0+cGF0aC5kZXYtPm1vZGU7CisJCQlyID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIHBnX2luaXQgaGFzIG5vdCBzdGFydGVkIG9yIGNvbXBsZXRlZCAqLworCQkJciA9IC1FTk9UQ09OTjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE5vIHBhdGggaXMgYXZhaWxhYmxlICovCisJCWlmIChtLT5xdWV1ZV9pZl9ub19wYXRoKQorCQkJciA9IC1FTk9UQ09OTjsKKwkJZWxzZQorCQkJciA9IC1FSU87CiAJfQogCi0JaWYgKChwZ3BhdGggJiYgbS0+cXVldWVfaW8pIHx8ICghcGdwYXRoICYmIG0tPnF1ZXVlX2lmX25vX3BhdGgpKQotCQlyID0gLUVOT1RDT05OOwotCWVsc2UgaWYgKCEqYmRldikKLQkJciA9IC1FSU87Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAociA9PSAtRU5PVENPTk4gJiYgIWZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJaWYgKHIgPT0gLUVOT1RDT05OKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtLT5sb2NrLCBmbGFncyk7CiAJCWlmICghbS0+Y3VycmVudF9wZykgewogCQkJLyogUGF0aCBzdGF0dXMgY2hhbmdlZCwgcmVkbyBzZWxlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGhpbi1tZXRhZGF0YS5jIGIvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmMKaW5kZXggMWZhNDU2OS4uYzIxOWEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmMKKysrIGIvZHJpdmVycy9tZC9kbS10aGluLW1ldGFkYXRhLmMKQEAgLTEyMDcsNiArMTIwNywxMiBAQAogCWRtX2Jsb2NrX3QgaGVsZF9yb290OwogCiAJLyoKKwkgKiBXZSBjb21taXQgdG8gZW5zdXJlIHRoZSBidHJlZSByb290cyB3aGljaCB3ZSBpbmNyZW1lbnQgaW4gYQorCSAqIG1vbWVudCBhcmUgdXAgdG8gZGF0ZS4KKwkgKi8KKwlfX2NvbW1pdF90cmFuc2FjdGlvbihwbWQpOworCisJLyoKIAkgKiBDb3B5IHRoZSBzdXBlcmJsb2NrLgogCSAqLwogCWRtX3NtX2luY19ibG9jayhwbWQtPm1ldGFkYXRhX3NtLCBUSElOX1NVUEVSQkxPQ0tfTE9DQVRJT04pOwpAQCAtMTUzOCw3ICsxNTQ0LDcgQEAKIHN0YXRpYyBpbnQgX19yZW1vdmVfcmFuZ2Uoc3RydWN0IGRtX3RoaW5fZGV2aWNlICp0ZCwgZG1fYmxvY2tfdCBiZWdpbiwgZG1fYmxvY2tfdCBlbmQpCiB7CiAJaW50IHI7Ci0JdW5zaWduZWQgY291bnQ7CisJdW5zaWduZWQgY291bnQsIHRvdGFsX2NvdW50ID0gMDsKIAlzdHJ1Y3QgZG1fcG9vbF9tZXRhZGF0YSAqcG1kID0gdGQtPnBtZDsKIAlkbV9ibG9ja190IGtleXNbMV0gPSB7IHRkLT5pZCB9OwogCV9fbGU2NCB2YWx1ZTsKQEAgLTE1NjEsMTEgKzE1NjcsMjkgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlyID0gZG1fYnRyZWVfcmVtb3ZlX2xlYXZlcygmcG1kLT5ibF9pbmZvLCBtYXBwaW5nX3Jvb3QsICZiZWdpbiwgZW5kLCAmbWFwcGluZ19yb290LCAmY291bnQpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwkvKgorCSAqIFJlbW92ZSBsZWF2ZXMgc3RvcHMgYXQgdGhlIGZpcnN0IHVubWFwcGVkIGVudHJ5LCBzbyB3ZSBoYXZlIHRvCisJICogbG9vcCByb3VuZCBmaW5kaW5nIG1hcHBlZCByYW5nZXMuCisJICovCisJd2hpbGUgKGJlZ2luIDwgZW5kKSB7CisJCXIgPSBkbV9idHJlZV9sb29rdXBfbmV4dCgmcG1kLT5ibF9pbmZvLCBtYXBwaW5nX3Jvb3QsICZiZWdpbiwgJmJlZ2luLCAmdmFsdWUpOworCQlpZiAociA9PSAtRU5PREFUQSkKKwkJCWJyZWFrOwogCi0JdGQtPm1hcHBlZF9ibG9ja3MgLT0gY291bnQ7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisKKwkJaWYgKGJlZ2luID49IGVuZCkKKwkJCWJyZWFrOworCisJCXIgPSBkbV9idHJlZV9yZW1vdmVfbGVhdmVzKCZwbWQtPmJsX2luZm8sIG1hcHBpbmdfcm9vdCwgJmJlZ2luLCBlbmQsICZtYXBwaW5nX3Jvb3QsICZjb3VudCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisKKwkJdG90YWxfY291bnQgKz0gY291bnQ7CisJfQorCisJdGQtPm1hcHBlZF9ibG9ja3MgLT0gdG90YWxfY291bnQ7CiAJdGQtPmNoYW5nZWQgPSAxOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGhpbi5jIGIvZHJpdmVycy9tZC9kbS10aGluLmMKaW5kZXggMzg5N2I5MC4uNjM5MDNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS10aGluLmMKKysrIGIvZHJpdmVycy9tZC9kbS10aGluLmMKQEAgLTI0MzIsNiArMjQzMiw3IEBACiAJY2FzZSBQTV9XUklURToKIAkJaWYgKG9sZF9tb2RlICE9IG5ld19tb2RlKQogCQkJbm90aWZ5X29mX3Bvb2xfbW9kZV9jaGFuZ2UocG9vbCwgIndyaXRlIik7CisJCXBvb2wtPnBmLmVycm9yX2lmX25vX3NwYWNlID0gcHQtPnJlcXVlc3RlZF9wZi5lcnJvcl9pZl9ub19zcGFjZTsKIAkJZG1fcG9vbF9tZXRhZGF0YV9yZWFkX3dyaXRlKHBvb2wtPnBtZCk7CiAJCXBvb2wtPnByb2Nlc3NfYmlvID0gcHJvY2Vzc19iaW87CiAJCXBvb2wtPnByb2Nlc3NfZGlzY2FyZCA9IHByb2Nlc3NfZGlzY2FyZF9iaW87CkBAIC00MjQ5LDEwICs0MjUwLDkgQEAKIHsKIAlzdHJ1Y3QgdGhpbl9jICp0YyA9IHRpLT5wcml2YXRlOwogCXN0cnVjdCBwb29sICpwb29sID0gdGMtPnBvb2w7Ci0Jc3RydWN0IHF1ZXVlX2xpbWl0cyAqcG9vbF9saW1pdHMgPSBkbV9nZXRfcXVldWVfbGltaXRzKHBvb2wtPnBvb2xfbWQpOwogCi0JaWYgKCFwb29sX2xpbWl0cy0+ZGlzY2FyZF9ncmFudWxhcml0eSkKLQkJcmV0dXJuOyAvKiBwb29sJ3MgZGlzY2FyZCBzdXBwb3J0IGlzIGRpc2FibGVkICovCisJaWYgKCFwb29sLT5wZi5kaXNjYXJkX2VuYWJsZWQpCisJCXJldHVybjsKIAogCWxpbWl0cy0+ZGlzY2FyZF9ncmFudWxhcml0eSA9IHBvb2wtPnNlY3RvcnNfcGVyX2Jsb2NrIDw8IFNFQ1RPUl9TSElGVDsKIAlsaW1pdHMtPm1heF9kaXNjYXJkX3NlY3RvcnMgPSAyMDQ4ICogMTAyNCAqIDE2OyAvKiAxNkcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCA2ZTE1ZjM1Li41ZGY0MDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC01OTEsNyArNTkxLDcgQEAKIAogb3V0OgogCWRtX3B1dF9saXZlX3RhYmxlKG1kLCAqc3JjdV9pZHgpOwotCWlmIChyID09IC1FTk9UQ09OTikgeworCWlmIChyID09IC1FTk9UQ09OTiAmJiAhZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJbXNsZWVwKDEwKTsKIAkJZ290byByZXRyeTsKIAl9CkBAIC02MDMsOSArNjAzLDEwIEBACiB7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkbV90YXJnZXQgKnRndDsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICp0Z3RfYmRldiA9IE5VTEw7CiAJaW50IHNyY3VfaWR4LCByOwogCi0JciA9IGRtX2dldF9saXZlX3RhYmxlX2Zvcl9pb2N0bChtZCwgJnRndCwgJmJkZXYsICZtb2RlLCAmc3JjdV9pZHgpOworCXIgPSBkbV9nZXRfbGl2ZV90YWJsZV9mb3JfaW9jdGwobWQsICZ0Z3QsICZ0Z3RfYmRldiwgJm1vZGUsICZzcmN1X2lkeCk7CiAJaWYgKHIgPCAwKQogCQlyZXR1cm4gcjsKIApAQCAtNjIwLDcgKzYyMSw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyID0gIF9fYmxrZGV2X2RyaXZlcl9pb2N0bChiZGV2LCBtb2RlLCBjbWQsIGFyZyk7CisJciA9ICBfX2Jsa2Rldl9kcml2ZXJfaW9jdGwodGd0X2JkZXYsIG1vZGUsIGNtZCwgYXJnKTsKIG91dDoKIAlkbV9wdXRfbGl2ZV90YWJsZShtZCwgc3JjdV9pZHgpOwogCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDgwNzA5NWYuLjYxYWFjYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTMxNCw4ICszMTQsOCBAQAogICovCiB2b2lkIG1kZGV2X3N1c3BlbmQoc3RydWN0IG1kZGV2ICptZGRldikKIHsKLQlCVUdfT04obWRkZXYtPnN1c3BlbmRlZCk7Ci0JbWRkZXYtPnN1c3BlbmRlZCA9IDE7CisJaWYgKG1kZGV2LT5zdXNwZW5kZWQrKykKKwkJcmV0dXJuOwogCXN5bmNocm9uaXplX3JjdSgpOwogCXdhaXRfZXZlbnQobWRkZXYtPnNiX3dhaXQsIGF0b21pY19yZWFkKCZtZGRldi0+YWN0aXZlX2lvKSA9PSAwKTsKIAltZGRldi0+cGVycy0+cXVpZXNjZShtZGRldiwgMSk7CkBAIC0zMjYsNyArMzI2LDggQEAKIAogdm9pZCBtZGRldl9yZXN1bWUoc3RydWN0IG1kZGV2ICptZGRldikKIHsKLQltZGRldi0+c3VzcGVuZGVkID0gMDsKKwlpZiAoLS1tZGRldi0+c3VzcGVuZGVkKQorCQlyZXR1cm47CiAJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOwogCW1kZGV2LT5wZXJzLT5xdWllc2NlKG1kZGV2LCAwKTsKIApAQCAtMTY1Miw3ICsxNjUzLDcgQEAKIAkJCXJkZXYtPmpvdXJuYWxfdGFpbCA9IGxlNjRfdG9fY3B1KHNiLT5qb3VybmFsX3RhaWwpOwogCQkJaWYgKG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpCiAJCQkJc2V0X2JpdChNRF9KT1VSTkFMX0NMRUFOLCAmbWRkZXYtPmZsYWdzKTsKLQkJCXJkZXYtPnJhaWRfZGlzayA9IG1kZGV2LT5yYWlkX2Rpc2tzOworCQkJcmRldi0+cmFpZF9kaXNrID0gMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmRldi0+c2F2ZWRfcmFpZF9kaXNrID0gcm9sZTsKQEAgLTI3NzMsNiArMjc3NCw3IEBACiAJCS8qIEFjdGl2YXRpbmcgYSBzcGFyZSAuLiBvciBwb3NzaWJseSByZWFjdGl2YXRpbmcKIAkJICogaWYgd2UgZXZlciBnZXQgYml0bWFwcyB3b3JraW5nIGhlcmUuCiAJCSAqLworCQlpbnQgZXJyOwogCiAJCWlmIChyZGV2LT5yYWlkX2Rpc2sgIT0gLTEpCiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjc5NCw5ICsyNzk2LDE1IEBACiAJCQlyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgPSAtMTsKIAkJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAJCWNsZWFyX2JpdChCaXRtYXBfc3luYywgJnJkZXYtPmZsYWdzKTsKLQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKHJkZXYtPm1kZGV2LCByZGV2KTsKLQkJaWYgKHJkZXYtPnJhaWRfZGlzayA9PSAtMSkKLQkJCXJldHVybiAtRUJVU1k7CisJCWVyciA9IHJkZXYtPm1kZGV2LT5wZXJzLT4KKwkJCWhvdF9hZGRfZGlzayhyZGV2LT5tZGRldiwgcmRldik7CisJCWlmIChlcnIpIHsKKwkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOworCQkJcmV0dXJuIGVycjsKKwkJfSBlbHNlCisJCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi0+c3lzZnNfc3RhdGUpOworCQlpZiAoc3lzZnNfbGlua19yZGV2KHJkZXYtPm1kZGV2LCByZGV2KSkKKwkJCS8qIGZhaWx1cmUgaGVyZSBpcyBPSyAqLzsKIAkJLyogZG9uJ3Qgd2FrZXVwIGFueW9uZSwgbGVhdmUgdGhhdCB0byB1c2Vyc3BhY2UuICovCiAJfSBlbHNlIHsKIAkJaWYgKHNsb3QgPj0gcmRldi0+bWRkZXYtPnJhaWRfZGlza3MgJiYKQEAgLTQzMTgsOCArNDMyNiw3IEBACiAJCQl9CiAJCQltZGRldl91bmxvY2sobWRkZXYpOwogCQl9Ci0JfSBlbHNlIGlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SVU5OSU5HLCAmbWRkZXYtPnJlY292ZXJ5KSB8fAotCQkgICB0ZXN0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpKQorCX0gZWxzZSBpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUlVOTklORywgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCXJldHVybiAtRUJVU1k7CiAJZWxzZSBpZiAoY21kX21hdGNoKHBhZ2UsICJyZXN5bmMiKSkKIAkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX0ZST1pFTiwgJm1kZGV2LT5yZWNvdmVyeSk7CkBAIC00MzMyLDggKzQzMzksMTIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQllcnIgPSBtZGRldl9sb2NrKG1kZGV2KTsKIAkJaWYgKCFlcnIpIHsKLQkJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9GUk9aRU4sICZtZGRldi0+cmVjb3ZlcnkpOwotCQkJZXJyID0gbWRkZXYtPnBlcnMtPnN0YXJ0X3Jlc2hhcGUobWRkZXYpOworCQkJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JVTk5JTkcsICZtZGRldi0+cmVjb3ZlcnkpKQorCQkJCWVyciA9ICAtRUJVU1k7CisJCQllbHNlIHsKKwkJCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfRlJPWkVOLCAmbWRkZXYtPnJlY292ZXJ5KTsKKwkJCQllcnIgPSBtZGRldi0+cGVycy0+c3RhcnRfcmVzaGFwZShtZGRldik7CisJCQl9CiAJCQltZGRldl91bmxvY2sobWRkZXYpOwogCQl9CiAJCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmggYi9kcml2ZXJzL21kL21kLmgKaW5kZXggMmJlYTUxZS4uY2EwYjY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5oCisrKyBiL2RyaXZlcnMvbWQvbWQuaApAQCAtNTY2LDcgKzU2Niw5IEBACiBzdGF0aWMgaW5saW5lIGludCBzeXNmc19saW5rX3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiB7CiAJY2hhciBubVsyMF07Ci0JaWYgKCF0ZXN0X2JpdChSZXBsYWNlbWVudCwgJnJkZXYtPmZsYWdzKSAmJiBtZGRldi0+a29iai5zZCkgeworCWlmICghdGVzdF9iaXQoUmVwbGFjZW1lbnQsICZyZGV2LT5mbGFncykgJiYKKwkgICAgIXRlc3RfYml0KEpvdXJuYWwsICZyZGV2LT5mbGFncykgJiYKKwkgICAgbWRkZXYtPmtvYmouc2QpIHsKIAkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOwogCQlyZXR1cm4gc3lzZnNfY3JlYXRlX2xpbmsoJm1kZGV2LT5rb2JqLCAmcmRldi0+a29iaiwgbm0pOwogCX0gZWxzZQpAQCAtNTc2LDcgKzU3OCw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfdW5saW5rX3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpCiB7CiAJY2hhciBubVsyMF07Ci0JaWYgKCF0ZXN0X2JpdChSZXBsYWNlbWVudCwgJnJkZXYtPmZsYWdzKSAmJiBtZGRldi0+a29iai5zZCkgeworCWlmICghdGVzdF9iaXQoUmVwbGFjZW1lbnQsICZyZGV2LT5mbGFncykgJiYKKwkgICAgIXRlc3RfYml0KEpvdXJuYWwsICZyZGV2LT5mbGFncykgJiYKKwkgICAgbWRkZXYtPmtvYmouc2QpIHsKIAkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOwogCQlzeXNmc19yZW1vdmVfbGluaygmbWRkZXYtPmtvYmosIG5tKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1idHJlZS5jIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYnRyZWUuYwppbmRleCBjNTczNDAyLi5iMWNlZDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1idHJlZS5jCisrKyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWJ0cmVlLmMKQEAgLTYzLDYgKzYzLDExIEBACiAJcmV0dXJuIGJzZWFyY2gobiwga2V5LCAwKTsKIH0KIAorc3RhdGljIGludCB1cHBlcl9ib3VuZChzdHJ1Y3QgYnRyZWVfbm9kZSAqbiwgdWludDY0X3Qga2V5KQoreworCXJldHVybiBic2VhcmNoKG4sIGtleSwgMSk7Cit9CisKIHZvaWQgaW5jX2NoaWxkcmVuKHN0cnVjdCBkbV90cmFuc2FjdGlvbl9tYW5hZ2VyICp0bSwgc3RydWN0IGJ0cmVlX25vZGUgKm4sCiAJCSAgc3RydWN0IGRtX2J0cmVlX3ZhbHVlX3R5cGUgKnZ0KQogewpAQCAtMjUyLDYgKzI1NywxNiBAQAogCWRtX3RtX3VubG9jayhzLT50bSwgZi0+Yik7CiB9CiAKK3N0YXRpYyB2b2lkIHVubG9ja19hbGxfZnJhbWVzKHN0cnVjdCBkZWxfc3RhY2sgKnMpCit7CisJc3RydWN0IGZyYW1lICpmOworCisJd2hpbGUgKHVucHJvY2Vzc2VkX2ZyYW1lcyhzKSkgeworCQlmID0gcy0+c3BpbmUgKyBzLT50b3AtLTsKKwkJZG1fdG1fdW5sb2NrKHMtPnRtLCBmLT5iKTsKKwl9Cit9CisKIGludCBkbV9idHJlZV9kZWwoc3RydWN0IGRtX2J0cmVlX2luZm8gKmluZm8sIGRtX2Jsb2NrX3Qgcm9vdCkKIHsKIAlpbnQgcjsKQEAgLTMwOCw5ICszMjMsMTMgQEAKIAkJCXBvcF9mcmFtZShzKTsKIAkJfQogCX0KLQogb3V0OgorCWlmIChyKSB7CisJCS8qIGNsZWFudXAgYWxsIGZyYW1lcyBvZiBkZWxfc3RhY2sgKi8KKwkJdW5sb2NrX2FsbF9mcmFtZXMocyk7CisJfQogCWtmcmVlKHMpOworCiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9idHJlZV9kZWwpOwpAQCAtMzkyLDYgKzQxMSw4MiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fYnRyZWVfbG9va3VwKTsKIAorc3RhdGljIGludCBkbV9idHJlZV9sb29rdXBfbmV4dF9zaW5nbGUoc3RydWN0IGRtX2J0cmVlX2luZm8gKmluZm8sIGRtX2Jsb2NrX3Qgcm9vdCwKKwkJCQkgICAgICAgdWludDY0X3Qga2V5LCB1aW50NjRfdCAqcmtleSwgdm9pZCAqdmFsdWVfbGUpCit7CisJaW50IHIsIGk7CisJdWludDMyX3QgZmxhZ3MsIG5yX2VudHJpZXM7CisJc3RydWN0IGRtX2Jsb2NrICpub2RlOworCXN0cnVjdCBidHJlZV9ub2RlICpuOworCisJciA9IGJuX3JlYWRfbG9jayhpbmZvLCByb290LCAmbm9kZSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJbiA9IGRtX2Jsb2NrX2RhdGEobm9kZSk7CisJZmxhZ3MgPSBsZTMyX3RvX2NwdShuLT5oZWFkZXIuZmxhZ3MpOworCW5yX2VudHJpZXMgPSBsZTMyX3RvX2NwdShuLT5oZWFkZXIubnJfZW50cmllcyk7CisKKwlpZiAoZmxhZ3MgJiBJTlRFUk5BTF9OT0RFKSB7CisJCWkgPSBsb3dlcl9ib3VuZChuLCBrZXkpOworCQlpZiAoaSA8IDAgfHwgaSA+PSBucl9lbnRyaWVzKSB7CisJCQlyID0gLUVOT0RBVEE7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXIgPSBkbV9idHJlZV9sb29rdXBfbmV4dF9zaW5nbGUoaW5mbywgdmFsdWU2NChuLCBpKSwga2V5LCBya2V5LCB2YWx1ZV9sZSk7CisJCWlmIChyID09IC1FTk9EQVRBICYmIGkgPCAobnJfZW50cmllcyAtIDEpKSB7CisJCQlpKys7CisJCQlyID0gZG1fYnRyZWVfbG9va3VwX25leHRfc2luZ2xlKGluZm8sIHZhbHVlNjQobiwgaSksIGtleSwgcmtleSwgdmFsdWVfbGUpOworCQl9CisKKwl9IGVsc2UgeworCQlpID0gdXBwZXJfYm91bmQobiwga2V5KTsKKwkJaWYgKGkgPCAwIHx8IGkgPj0gbnJfZW50cmllcykgeworCQkJciA9IC1FTk9EQVRBOworCQkJZ290byBvdXQ7CisJCX0KKworCQkqcmtleSA9IGxlNjRfdG9fY3B1KG4tPmtleXNbaV0pOworCQltZW1jcHkodmFsdWVfbGUsIHZhbHVlX3B0cihuLCBpKSwgaW5mby0+dmFsdWVfdHlwZS5zaXplKTsKKwl9CitvdXQ6CisJZG1fdG1fdW5sb2NrKGluZm8tPnRtLCBub2RlKTsKKwlyZXR1cm4gcjsKK30KKworaW50IGRtX2J0cmVlX2xvb2t1cF9uZXh0KHN0cnVjdCBkbV9idHJlZV9pbmZvICppbmZvLCBkbV9ibG9ja190IHJvb3QsCisJCQkgdWludDY0X3QgKmtleXMsIHVpbnQ2NF90ICpya2V5LCB2b2lkICp2YWx1ZV9sZSkKK3sKKwl1bnNpZ25lZCBsZXZlbDsKKwlpbnQgciA9IC1FTk9EQVRBOworCV9fbGU2NCBpbnRlcm5hbF92YWx1ZV9sZTsKKwlzdHJ1Y3Qgcm9fc3BpbmUgc3BpbmU7CisKKwlpbml0X3JvX3NwaW5lKCZzcGluZSwgaW5mbyk7CisJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgaW5mby0+bGV2ZWxzIC0gMXU7IGxldmVsKyspIHsKKwkJciA9IGJ0cmVlX2xvb2t1cF9yYXcoJnNwaW5lLCByb290LCBrZXlzW2xldmVsXSwKKwkJCQkgICAgIGxvd2VyX2JvdW5kLCBya2V5LAorCQkJCSAgICAgJmludGVybmFsX3ZhbHVlX2xlLCBzaXplb2YodWludDY0X3QpKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKworCQlpZiAoKnJrZXkgIT0ga2V5c1tsZXZlbF0pIHsKKwkJCXIgPSAtRU5PREFUQTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcm9vdCA9IGxlNjRfdG9fY3B1KGludGVybmFsX3ZhbHVlX2xlKTsKKwl9CisKKwlyID0gZG1fYnRyZWVfbG9va3VwX25leHRfc2luZ2xlKGluZm8sIHJvb3QsIGtleXNbbGV2ZWxdLCBya2V5LCB2YWx1ZV9sZSk7CitvdXQ6CisJZXhpdF9yb19zcGluZSgmc3BpbmUpOworCXJldHVybiByOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChkbV9idHJlZV9sb29rdXBfbmV4dCk7CisKIC8qCiAgKiBTcGxpdHMgYSBub2RlIGJ5IGNyZWF0aW5nIGEgc2libGluZyBub2RlIGFuZCBzaGlmdGluZyBoYWxmIHRoZSBub2RlcwogICogY29udGVudHMgYWNyb3NzLiAgQXNzdW1lcyB0aGVyZSBpcyBhIHBhcmVudCBub2RlLCBhbmQgaXQgaGFzIHJvb20gZm9yCkBAIC00NzMsOCArNTY4LDEwIEBACiAKIAlyID0gaW5zZXJ0X2F0KHNpemVvZihfX2xlNjQpLCBwbiwgcGFyZW50X2luZGV4ICsgMSwKIAkJICAgICAgbGU2NF90b19jcHUocm4tPmtleXNbMF0pLCAmbG9jYXRpb24pOwotCWlmIChyKQorCWlmIChyKSB7CisJCXVubG9ja19ibG9jayhzLT5pbmZvLCByaWdodCk7CiAJCXJldHVybiByOworCX0KIAogCWlmIChrZXkgPCBsZTY0X3RvX2NwdShybi0+a2V5c1swXSkpIHsKIAkJdW5sb2NrX2Jsb2NrKHMtPmluZm8sIHJpZ2h0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWJ0cmVlLmggYi9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1idHJlZS5oCmluZGV4IDExZDhjZjcuLmM3NDMwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLWJ0cmVlLmgKKysrIGIvZHJpdmVycy9tZC9wZXJzaXN0ZW50LWRhdGEvZG0tYnRyZWUuaApAQCAtMTEwLDYgKzExMCwxMyBAQAogCQkgICAgdWludDY0X3QgKmtleXMsIHZvaWQgKnZhbHVlX2xlKTsKIAogLyoKKyAqIFRyaWVzIHRvIGZpbmQgdGhlIGZpcnN0IGtleSB3aGVyZSB0aGUgYm90dG9tIGxldmVsIGtleSBpcyA+PSB0byB0aGF0CisgKiBnaXZlbi4gIFVzZWZ1bCBmb3Igc2tpcHBpbmcgZW1wdHkgc2VjdGlvbnMgb2YgdGhlIGJ0cmVlLgorICovCitpbnQgZG1fYnRyZWVfbG9va3VwX25leHQoc3RydWN0IGRtX2J0cmVlX2luZm8gKmluZm8sIGRtX2Jsb2NrX3Qgcm9vdCwKKwkJCSB1aW50NjRfdCAqa2V5cywgdWludDY0X3QgKnJrZXksIHZvaWQgKnZhbHVlX2xlKTsKKworLyoKICAqIEluc2VydGlvbiAob3Igb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHZhbHVlKS4gIE8obG4obikpCiAgKi8KIGludCBkbV9idHJlZV9pbnNlcnQoc3RydWN0IGRtX2J0cmVlX2luZm8gKmluZm8sIGRtX2Jsb2NrX3Qgcm9vdCwKQEAgLTEzNSw5ICsxNDIsMTAgQEAKIAkJICAgIHVpbnQ2NF90ICprZXlzLCBkbV9ibG9ja190ICpuZXdfcm9vdCk7CiAKIC8qCi0gKiBSZW1vdmVzIHZhbHVlcyBiZXR3ZWVuICdrZXlzJyBhbmQga2V5czIsIHdoZXJlIGtleXMyIGlzIGtleXMgd2l0aCB0aGUKLSAqIGZpbmFsIGtleSByZXBsYWNlZCB3aXRoICdlbmRfa2V5Jy4gICdlbmRfa2V5JyBpcyB0aGUgb25lLXBhc3QtdGhlLWVuZAotICogdmFsdWUuICAna2V5cycgbWF5IGJlIGFsdGVyZWQuCisgKiBSZW1vdmVzIGEgX2NvbnRpZ3VvdXNfIHJ1biBvZiB2YWx1ZXMgc3RhcnRpbmcgZnJvbSAna2V5cycgYW5kIG5vdAorICogcmVhY2hpbmcga2V5czIgKHdoZXJlIGtleXMyIGlzIGtleXMgd2l0aCB0aGUgZmluYWwga2V5IHJlcGxhY2VkIHdpdGgKKyAqICdlbmRfa2V5JykuICAnZW5kX2tleScgaXMgdGhlIG9uZS1wYXN0LXRoZS1lbmQgdmFsdWUuICAna2V5cycgbWF5IGJlCisgKiBhbHRlcmVkLgogICovCiBpbnQgZG1fYnRyZWVfcmVtb3ZlX2xlYXZlcyhzdHJ1Y3QgZG1fYnRyZWVfaW5mbyAqaW5mbywgZG1fYmxvY2tfdCByb290LAogCQkJICAgdWludDY0X3QgKmtleXMsIHVpbnQ2NF90IGVuZF9rZXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3BlcnNpc3RlbnQtZGF0YS9kbS1zcGFjZS1tYXAtbWV0YWRhdGEuYyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXNwYWNlLW1hcC1tZXRhZGF0YS5jCmluZGV4IDUzMDkxMjkuLmZjYTZkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXNwYWNlLW1hcC1tZXRhZGF0YS5jCisrKyBiL2RyaXZlcnMvbWQvcGVyc2lzdGVudC1kYXRhL2RtLXNwYWNlLW1hcC1tZXRhZGF0YS5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBicmJfcG9wKHN0cnVjdCBib3BfcmluZ19idWZmZXIgKmJyYiwgc3RydWN0IGJsb2NrX29wICpyZXN1bHQpCitzdGF0aWMgaW50IGJyYl9wZWVrKHN0cnVjdCBib3BfcmluZ19idWZmZXIgKmJyYiwgc3RydWN0IGJsb2NrX29wICpyZXN1bHQpCiB7CiAJc3RydWN0IGJsb2NrX29wICpib3A7CiAKQEAgLTE0Nyw2ICsxNDcsMTcgQEAKIAlyZXN1bHQtPnR5cGUgPSBib3AtPnR5cGU7CiAJcmVzdWx0LT5ibG9jayA9IGJvcC0+YmxvY2s7CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBicmJfcG9wKHN0cnVjdCBib3BfcmluZ19idWZmZXIgKmJyYikKK3sKKwlzdHJ1Y3QgYmxvY2tfb3AgKmJvcDsKKworCWlmIChicmJfZW1wdHkoYnJiKSkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJYm9wID0gYnJiLT5ib3BzICsgYnJiLT5iZWdpbjsKIAlicmItPmJlZ2luID0gYnJiX25leHQoYnJiLCBicmItPmJlZ2luKTsKIAogCXJldHVybiAwOwpAQCAtMjExLDcgKzIyMiw3IEBACiAJd2hpbGUgKCFicmJfZW1wdHkoJnNtbS0+dW5jb21taXR0ZWQpKSB7CiAJCXN0cnVjdCBibG9ja19vcCBib3A7CiAKLQkJciA9IGJyYl9wb3AoJnNtbS0+dW5jb21taXR0ZWQsICZib3ApOworCQlyID0gYnJiX3BlZWsoJnNtbS0+dW5jb21taXR0ZWQsICZib3ApOwogCQlpZiAocikgewogCQkJRE1FUlIoImJ1ZyBpbiBib3AgcmluZyBidWZmZXIiKTsKIAkJCWJyZWFrOwpAQCAtMjIwLDYgKzIzMSw4IEBACiAJCXIgPSBjb21taXRfYm9wKHNtbSwgJmJvcCk7CiAJCWlmIChyKQogCQkJYnJlYWs7CisKKwkJYnJiX3BvcCgmc21tLT51bmNvbW1pdHRlZCk7CiAJfQogCiAJcmV0dXJuIHI7CkBAIC02ODMsNyArNjk2LDYgQEAKIHN0YXRpYyBpbnQgc21fbWV0YWRhdGFfZXh0ZW5kKHN0cnVjdCBkbV9zcGFjZV9tYXAgKnNtLCBkbV9ibG9ja190IGV4dHJhX2Jsb2NrcykKIHsKIAlpbnQgciwgaTsKLQllbnVtIGFsbG9jYXRpb25fZXZlbnQgZXY7CiAJc3RydWN0IHNtX21ldGFkYXRhICpzbW0gPSBjb250YWluZXJfb2Yoc20sIHN0cnVjdCBzbV9tZXRhZGF0YSwgc20pOwogCWRtX2Jsb2NrX3Qgb2xkX2xlbiA9IHNtbS0+bGwubnJfYmxvY2tzOwogCkBAIC03MDUsMTEgKzcxNywxMiBAQAogCSAqIGFsbG9jYXRlIGFueSBuZXcgYmxvY2tzLgogCSAqLwogCWRvIHsKLQkJZm9yIChpID0gb2xkX2xlbjsgIXIgJiYgaSA8IHNtbS0+YmVnaW47IGkrKykgewotCQkJciA9IHNtX2xsX2luYygmc21tLT5sbCwgaSwgJmV2KTsKLQkJCWlmIChyKQotCQkJCWdvdG8gb3V0OwotCQl9CisJCWZvciAoaSA9IG9sZF9sZW47ICFyICYmIGkgPCBzbW0tPmJlZ2luOyBpKyspCisJCQlyID0gYWRkX2JvcChzbW0sIEJPUF9JTkMsIGkpOworCisJCWlmIChyKQorCQkJZ290byBvdXQ7CisKIAkJb2xkX2xlbiA9IHNtbS0+YmVnaW47CiAKIAkJciA9IGFwcGx5X2JvcHMoc21tKTsKQEAgLTc1NCw3ICs3NjcsNiBAQAogewogCWludCByOwogCWRtX2Jsb2NrX3QgaTsKLQllbnVtIGFsbG9jYXRpb25fZXZlbnQgZXY7CiAJc3RydWN0IHNtX21ldGFkYXRhICpzbW0gPSBjb250YWluZXJfb2Yoc20sIHN0cnVjdCBzbV9tZXRhZGF0YSwgc20pOwogCiAJc21tLT5iZWdpbiA9IHN1cGVyYmxvY2sgKyAxOwpAQCAtNzgyLDcgKzc5NCw3IEBACiAJICogYWxsb2NhdGVkIGJsb2NrcyB0aGF0IHRoZXkgd2VyZSBidWlsdCBmcm9tLgogCSAqLwogCWZvciAoaSA9IHN1cGVyYmxvY2s7ICFyICYmIGkgPCBzbW0tPmJlZ2luOyBpKyspCi0JCXIgPSBzbV9sbF9pbmMoJnNtbS0+bGwsIGksICZldik7CisJCXIgPSBhZGRfYm9wKHNtbSwgQk9QX0lOQywgaSk7CiAKIAlpZiAocikKIAkJcmV0dXJuIHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA0MWQ3MGJjLi44NGU1OTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTE5NDYsNiArMTk0Niw4IEBACiAKIAlmaXJzdCA9IGk7CiAJZmJpbyA9IHIxMF9iaW8tPmRldnNbaV0uYmlvOworCWZiaW8tPmJpX2l0ZXIuYmlfc2l6ZSA9IHIxMF9iaW8tPnNlY3RvcnMgPDwgOTsKKwlmYmlvLT5iaV9pdGVyLmJpX2lkeCA9IDA7CiAKIAl2Y250ID0gKHIxMF9iaW8tPnNlY3RvcnMgKyAoUEFHRV9TSVpFID4+IDkpIC0gMSkgPj4gKFBBR0VfU0hJRlQgLSA5KTsKIAkvKiBub3cgZmluZCBibG9ja3Mgd2l0aCBlcnJvcnMgKi8KQEAgLTE5ODksNyArMTk5MSw3IEBACiAJCWJpb19yZXNldCh0YmlvKTsKIAogCQl0YmlvLT5iaV92Y250ID0gdmNudDsKLQkJdGJpby0+YmlfaXRlci5iaV9zaXplID0gcjEwX2Jpby0+c2VjdG9ycyA8PCA5OworCQl0YmlvLT5iaV9pdGVyLmJpX3NpemUgPSBmYmlvLT5iaV9pdGVyLmJpX3NpemU7CiAJCXRiaW8tPmJpX3J3ID0gV1JJVEU7CiAJCXRiaW8tPmJpX3ByaXZhdGUgPSByMTBfYmlvOwogCQl0YmlvLT5iaV9pdGVyLmJpX3NlY3RvciA9IHIxMF9iaW8tPmRldnNbaV0uYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY29yZS5jCmluZGV4IDM1NzU5YTkuLmU4Zjg0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWNvcmUuYwpAQCAtMTk5Miw5ICsxOTkyLDkgQEAKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMCkpOwogCiAJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7Ci0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIDB4ZmZmZmZmZmYpKSB7CisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCAweGZmZmZmZmZmKTsKKwlpZiAoZXJyKSB7CiAJCXByaW50aygiJXMvMDogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FSU87CiAJCWdvdG8gZmFpbF9jb250ZXh0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9jeDI1ODIxLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvY3gyNTgyMS1jb3JlLmMKaW5kZXggZGJjNjk1Zi4uMDA0MjgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9jeDI1ODIxLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDI1ODIxL2N4MjU4MjEtY29yZS5jCkBAIC0xMzE5LDcgKzEzMTksOCBAQAogCQlkZXYtPnBjaV9sYXQsICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5iYXNlX2lvX2FkZHIpOwogCiAJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7Ci0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIDB4ZmZmZmZmZmYpKSB7CisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCAweGZmZmZmZmZmKTsKKwlpZiAoZXJyKSB7CiAJCXByX2VycigiJXMvMDogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsIGRldi0+bmFtZSk7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZmFpbF9pcnE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LWFsc2EuYwppbmRleCAwZWQxYjY1Li4xYjUyNjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4ODgvY3g4OC1hbHNhLmMKQEAgLTg5MCw5ICs4OTAsOSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmICghcGNpX3NldF9kbWFfbWFzayhwY2ksRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaSxETUFfQklUX01BU0soMzIpKTsKKwlpZiAoZXJyKSB7CiAJCWRwcmludGsoMCwgIiVzLzE6IE9vcHM6IG5vIDMyYml0IFBDSSBETUEgPz8/XG4iLGNvcmUtPm5hbWUpOwotCQllcnIgPSAtRUlPOwogCQljeDg4X2NvcmVfcHV0KGNvcmUsIHBjaSk7CiAJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggOWRiNzc2Ny4uZjM0YzIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LW1wZWcuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtbXBlZy5jCkBAIC0zOTMsNyArMzkzLDggQEAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2LT5wY2kpKQogCQlyZXR1cm4gLUVJTzsKIAlwY2lfc2V0X21hc3RlcihkZXYtPnBjaSk7Ci0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKGRldi0+cGNpLERNQV9CSVRfTUFTSygzMikpKSB7CisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhkZXYtPnBjaSxETUFfQklUX01BU0soMzIpKTsKKwlpZiAoZXJyKSB7CiAJCXByaW50aygiJXMvMjogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsZGV2LT5jb3JlLT5uYW1lKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCAwZGUxYWQ1Li5hZWY5YWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtMTMxNCw5ICsxMzE0LDkgQEAKIAkgICAgICAgZGV2LT5wY2lfbGF0LCh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsMCkpOwogCiAJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7Ci0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKGVycikgewogCQlwcmludGsoIiVzLzA6IE9vcHM6IG5vIDMyYml0IFBDSSBETUEgPz8/XG4iLGNvcmUtPm5hbWUpOwotCQllcnIgPSAtRUlPOwogCQlnb3RvIGZhaWxfY29yZTsKIAl9CiAJZGV2LT5hbGxvY19jdHggPSB2YjJfZG1hX3NnX2luaXRfY3R4KCZwY2lfZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS9wY2kvaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IDg2MTZmYTguLmMyZTYwYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2l2dHYvaXZ0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTgwNSwxMSArODA1LDExIEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSVZUVl9DQVJEX01BWF9WSURFT19JTlBVVFMgLSAxOyBpKyspCisJZm9yIChpID0gMDsgaSA8IElWVFZfQ0FSRF9NQVhfVklERU9fSU5QVVRTOyBpKyspCiAJCWlmIChpdHYtPmNhcmQtPnZpZGVvX2lucHV0c1tpXS52aWRlb190eXBlID09IDApCiAJCQlicmVhazsKIAlpdHYtPm5vZl9pbnB1dHMgPSBpOwotCWZvciAoaSA9IDA7IGkgPCBJVlRWX0NBUkRfTUFYX0FVRElPX0lOUFVUUyAtIDE7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgSVZUVl9DQVJEX01BWF9BVURJT19JTlBVVFM7IGkrKykKIAkJaWYgKGl0di0+Y2FyZC0+YXVkaW9faW5wdXRzW2ldLmF1ZGlvX3R5cGUgPT0gMCkKIAkJCWJyZWFrOwogCWl0di0+bm9mX2F1ZGlvX2lucHV0cyA9IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9uZXR1cF91bmlkdmIvbmV0dXBfdW5pZHZiX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL25ldHVwX3VuaWR2Yi9uZXR1cF91bmlkdmJfY29yZS5jCmluZGV4IDYwYjJkNDYuLjNmZGJkODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL25ldHVwX3VuaWR2Yi9uZXR1cF91bmlkdmJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL25ldHVwX3VuaWR2Yi9uZXR1cF91bmlkdmJfY29yZS5jCkBAIC04MTAsNyArODEwLDcgQEAKIAkJIiVzKCk6IGJvYXJkIHZlbmRvciAweCV4LCByZXZpc2lvbiAweCV4XG4iLAogCQlfX2Z1bmNfXywgYm9hcmRfdmVuZG9yLCBib2FyZF9yZXZpc2lvbik7CiAJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7Ci0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIDB4ZmZmZmZmZmYpKSB7CisJaWYgKHBjaV9zZXRfZG1hX21hc2socGNpX2RldiwgMHhmZmZmZmZmZikgPCAwKSB7CiAJCWRldl9lcnIoJnBjaV9kZXYtPmRldiwKIAkJCSIlcygpOiAzMmJpdCBQQ0kgRE1BIGlzIG5vdCBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBwY2lfZGV0ZWN0X2VycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCmluZGV4IGU3OWQ2M2UuLmY3MjBjZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtOTUxLDkgKzk1MSw5IEBACiAJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpLCBkZXYtPnBjaV9yZXYsIHBjaV9kZXYtPmlycSwKIAkgICAgICAgZGV2LT5wY2lfbGF0LCh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsMCkpOwogCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOwotCWlmICghcGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCBETUFfQklUX01BU0soMzIpKSkgeworCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpX2RldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKGVycikgewogCQlwcl93YXJuKCIlczogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FSU87CiAJCWdvdG8gZmFpbDE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTY0L3NhYTcxNjQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9wY2kvc2FhNzE2NC9zYWE3MTY0LWNvcmUuYwppbmRleCA4ZjM2YjQ4Li44YmJkMDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTY0L3NhYTcxNjQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL3NhYTcxNjQvc2FhNzE2NC1jb3JlLmMKQEAgLTEyNjQsOSArMTI2NCw5IEBACiAKIAlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKIAkvKiBUT0RPICovCi0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIDB4ZmZmZmZmZmYpKSB7CisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCAweGZmZmZmZmZmKTsKKwlpZiAoZXJyKSB7CiAJCXByaW50aygiJXMvMDogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FSU87CiAJCWdvdG8gZmFpbF9pcnE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS90dzY4L3R3NjgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9wY2kvdHc2OC90dzY4LWNvcmUuYwppbmRleCA4YzU2NTVkLi40ZTc3NjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS90dzY4L3R3NjgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL3R3NjgvdHc2OC1jb3JlLmMKQEAgLTI1Nyw5ICsyNTcsOSBAQAogCQlkZXYtPm5hbWUsIHBjaV9uYW1lKHBjaV9kZXYpLCBkZXYtPnBjaV9yZXYsIHBjaV9kZXYtPmlycSwKIAkJZGV2LT5wY2lfbGF0LCAodTY0KXBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAwKSk7CiAJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7Ci0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIERNQV9CSVRfTUFTSygzMikpKSB7CisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwlpZiAoZXJyKSB7CiAJCXByX2luZm8oIiVzOiBPb3BzOiBubyAzMmJpdCBQQ0kgRE1BID8/P1xuIiwgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVJTzsKIAkJZ290byBmYWlsMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2FpcnNweS9haXJzcHkuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2FpcnNweS9haXJzcHkuYwppbmRleCBmY2JiNDk3Li41NjVhNTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9haXJzcHkvYWlyc3B5LmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvYWlyc3B5L2FpcnNweS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlpbnQgICAgICAgICAgICB1cmJzX3N1Ym1pdHRlZDsKIAogCS8qIFVTQiBjb250cm9sIG1lc3NhZ2UgYnVmZmVyICovCi0JI2RlZmluZSBCVUZfU0laRSAyNAorCSNkZWZpbmUgQlVGX1NJWkUgMTI4CiAJdTggYnVmW0JVRl9TSVpFXTsKIAogCS8qIEN1cnJlbnQgY29uZmlndXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvaGFja3JmL2hhY2tyZi5jIGIvZHJpdmVycy9tZWRpYS91c2IvaGFja3JmL2hhY2tyZi5jCmluZGV4IGUwNWJmZWMuLjBmZTVjYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2hhY2tyZi9oYWNrcmYuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9oYWNrcmYvaGFja3JmLmMKQEAgLTI0LDYgKzI0LDE1IEBACiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLXY0bDIuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItdm1hbGxvYy5oPgogCisvKgorICogVXNlZCBBdmFnbyBNR0EtODE1NjMgUkYgYW1wbGlmaWVyIGNvdWxkIGJlIGRlc3Ryb3llZCBwcmV0dHkgZWFzaWx5IHdpdGggdG9vCisgKiBzdHJvbmcgc2lnbmFsIG9yIHRyYW5zbWl0dGluZyB0byBiYWQgYW50ZW5uYS4KKyAqIFNldCBSRiBnYWluIGNvbnRyb2wgdG8gJ2dyYWJiZWQnIHN0YXRlIGJ5IGRlZmF1bHQgZm9yIHN1cmUuCisgKi8KK3N0YXRpYyBib29sIGhhY2tyZl9lbmFibGVfcmZfZ2Fpbl9jdHJsOworbW9kdWxlX3BhcmFtX25hbWVkKGVuYWJsZV9yZl9nYWluX2N0cmwsIGhhY2tyZl9lbmFibGVfcmZfZ2Fpbl9jdHJsLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX3JmX2dhaW5fY3RybCwgImVuYWJsZSBSWC9UWCBSRiBhbXBsaWZpZXIgY29udHJvbCAod2FybjogY291bGQgZGFtYWdlIGFtcGxpZmllcikiKTsKKwogLyogSGFja1JGIFVTQiBBUEkgY29tbWFuZHMgKGZyb20gSGFja1JGIExpYnJhcnkpICovCiBlbnVtIHsKIAlDTURfU0VUX1RSQU5TQ0VJVkVSX01PREUgICAgICAgICAgID0gMHgwMSwKQEAgLTE0NTEsNiArMTQ2MCw3IEBACiAJCWRldl9lcnIoZGV2LT5kZXYsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250cm9sc1xuIik7CiAJCWdvdG8gZXJyX3Y0bDJfY3RybF9oYW5kbGVyX2ZyZWVfcng7CiAJfQorCXY0bDJfY3RybF9ncmFiKGRldi0+cnhfcmZfZ2FpbiwgIWhhY2tyZl9lbmFibGVfcmZfZ2Fpbl9jdHJsKTsKIAl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmZGV2LT5yeF9jdHJsX2hhbmRsZXIpOwogCiAJLyogUmVnaXN0ZXIgY29udHJvbHMgZm9yIHRyYW5zbWl0dGVyICovCkBAIC0xNDcxLDYgKzE0ODEsNyBAQAogCQlkZXZfZXJyKGRldi0+ZGV2LCAiQ291bGQgbm90IGluaXRpYWxpemUgY29udHJvbHNcbiIpOwogCQlnb3RvIGVycl92NGwyX2N0cmxfaGFuZGxlcl9mcmVlX3R4OwogCX0KKwl2NGwyX2N0cmxfZ3JhYihkZXYtPnR4X3JmX2dhaW4sICFoYWNrcmZfZW5hYmxlX3JmX2dhaW5fY3RybCk7CiAJdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoJmRldi0+dHhfY3RybF9oYW5kbGVyKTsKIAogCS8qIFJlZ2lzdGVyIHRoZSB2NGwyX2RldmljZSBzdHJ1Y3R1cmUgKi8KQEAgLTE1MzAsNyArMTU0MSw3IEBACiBlcnJfa2ZyZWU6CiAJa2ZyZWUoZGV2KTsKIGVycjoKLQlkZXZfZGJnKGRldi0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworCWRldl9kYmcoJmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbW9yeS9mc2xfaWZjLmMgYi9kcml2ZXJzL21lbW9yeS9mc2xfaWZjLmMKaW5kZXggZTg3NDU5Zi4uYWNkMTQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1vcnkvZnNsX2lmYy5jCisrKyBiL2RyaXZlcnMvbWVtb3J5L2ZzbF9pZmMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2N4bC9uYXRpdmUuYyBiL2RyaXZlcnMvbWlzYy9jeGwvbmF0aXZlLmMKaW5kZXggZDJlNzVjOC4uZjQwOTA5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2N4bC9uYXRpdmUuYworKysgYi9kcml2ZXJzL21pc2MvY3hsL25hdGl2ZS5jCkBAIC00OTcsNiArNDk3LDcgQEAKIHsKIAl1NjQgc3IgPSAwOwogCisJc2V0X2VuZGlhbihzcik7CiAJaWYgKGN0eC0+bWFzdGVyKQogCQlzciB8PSBDWExfUFNMX1NSX0FuX01QOwogCWlmIChtZnNwcihTUFJOX0xQQ1IpICYgTFBDUl9UQykKQEAgLTUwNiw3ICs1MDcsNiBAQAogCQlzciB8PSBDWExfUFNMX1NSX0FuX0hWOwogCX0gZWxzZSB7CiAJCXNyIHw9IENYTF9QU0xfU1JfQW5fUFIgfCBDWExfUFNMX1NSX0FuX1I7Ci0JCXNldF9lbmRpYW4oc3IpOwogCQlzciAmPSB+KENYTF9QU0xfU1JfQW5fSFYpOwogCQlpZiAoIXRlc3RfdHNrX3RocmVhZF9mbGFnKGN1cnJlbnQsIFRJRl8zMkJJVCkpCiAJCQlzciB8PSBDWExfUFNMX1NSX0FuX1NGOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCmluZGV4IDIzYjZjOGUuLmQ4NDg2MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKQEAgLTY1LDggKzY1LDcgQEAKICNkZWZpbmUgTU1DX1NBTklUSVpFX1JFUV9USU1FT1VUIDI0MDAwMAogI2RlZmluZSBNTUNfRVhUUkFDVF9JTkRFWF9GUk9NX0FSRyh4KSAoKHggJiAweDAwRkYwMDAwKSA+PiAxNikKIAotI2RlZmluZSBtbWNfcmVxX3JlbF93cihyZXEpCSgoKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZVQSkgfHwgXAotCQkJCSAgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX01FVEEpKSAmJiBcCisjZGVmaW5lIG1tY19yZXFfcmVsX3dyKHJlcSkJKChyZXEtPmNtZF9mbGFncyAmIFJFUV9GVUEpICYmIFwKIAkJCQkgIChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSkKICNkZWZpbmUgUEFDS0VEX0NNRF9WRVIJMHgwMQogI2RlZmluZSBQQUNLRURfQ01EX1dSCTB4MDIKQEAgLTE0NjcsMTMgKzE0NjYsOSBAQAogCiAJLyoKIAkgKiBSZWxpYWJsZSB3cml0ZXMgYXJlIHVzZWQgdG8gaW1wbGVtZW50IEZvcmNlZCBVbml0IEFjY2VzcyBhbmQKLQkgKiBSRVFfTUVUQSBhY2Nlc3NlcywgYW5kIGFyZSBzdXBwb3J0ZWQgb25seSBvbiBNTUNzLgotCSAqCi0JICogWFhYOiB0aGlzIHJlYWxseSBuZWVkcyBhIGdvb2QgZXhwbGFuYXRpb24gb2Ygd2h5IFJFUV9NRVRBCi0JICogaXMgdHJlYXRlZCBzcGVjaWFsLgorCSAqIGFyZSBzdXBwb3J0ZWQgb25seSBvbiBNTUNzLgogCSAqLwotCWJvb2wgZG9fcmVsX3dyID0gKChyZXEtPmNtZF9mbGFncyAmIFJFUV9GVUEpIHx8Ci0JCQkgIChyZXEtPmNtZF9mbGFncyAmIFJFUV9NRVRBKSkgJiYKKwlib29sIGRvX3JlbF93ciA9IChyZXEtPmNtZF9mbGFncyAmIFJFUV9GVUEpICYmCiAJCShycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSAmJgogCQkobWQtPmZsYWdzICYgTU1DX0JMS19SRUxfV1IpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL21tYy5jIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwppbmRleCBjNzkzZmRhLi4zYTlhNzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKQEAgLTEwNDAsNzEgKzEwNDAsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbW1jX3NlbGVjdF9oczQwMChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCi17Ci0Jc3RydWN0IG1tY19ob3N0ICpob3N0ID0gY2FyZC0+aG9zdDsKLQlpbnQgZXJyID0gMDsKLQl1OCB2YWw7Ci0KLQkvKgotCSAqIEhTNDAwIG1vZGUgcmVxdWlyZXMgOC1iaXQgYnVzIHdpZHRoCi0JICovCi0JaWYgKCEoY2FyZC0+bW1jX2F2YWlsX3R5cGUgJiBFWFRfQ1NEX0NBUkRfVFlQRV9IUzQwMCAmJgotCSAgICAgIGhvc3QtPmlvcy5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF84KSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIEJlZm9yZSBzd2l0Y2hpbmcgdG8gZHVhbCBkYXRhIHJhdGUgb3BlcmF0aW9uIGZvciBIUzQwMCwKLQkgKiBpdCBpcyByZXF1aXJlZCB0byBjb252ZXJ0IGZyb20gSFMyMDAgbW9kZSB0byBIUyBtb2RlLgotCSAqLwotCW1tY19zZXRfdGltaW5nKGNhcmQtPmhvc3QsIE1NQ19USU1JTkdfTU1DX0hTKTsKLQltbWNfc2V0X2J1c19zcGVlZChjYXJkKTsKLQotCXZhbCA9IEVYVF9DU0RfVElNSU5HX0hTIHwKLQkgICAgICBjYXJkLT5kcml2ZV9zdHJlbmd0aCA8PCBFWFRfQ1NEX0RSVl9TVFJfU0hJRlQ7Ci0JZXJyID0gX19tbWNfc3dpdGNoKGNhcmQsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCi0JCQkgICBFWFRfQ1NEX0hTX1RJTUlORywgdmFsLAotCQkJICAgY2FyZC0+ZXh0X2NzZC5nZW5lcmljX2NtZDZfdGltZSwKLQkJCSAgIHRydWUsIHRydWUsIHRydWUpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCIlczogc3dpdGNoIHRvIGhpZ2gtc3BlZWQgZnJvbSBoczIwMCBmYWlsZWQsIGVycjolZFxuIiwKLQkJCW1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQllcnIgPSBtbWNfc3dpdGNoKGNhcmQsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCi0JCQkgRVhUX0NTRF9CVVNfV0lEVEgsCi0JCQkgRVhUX0NTRF9ERFJfQlVTX1dJRFRIXzgsCi0JCQkgY2FyZC0+ZXh0X2NzZC5nZW5lcmljX2NtZDZfdGltZSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIiVzOiBzd2l0Y2ggdG8gYnVzIHdpZHRoIGZvciBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKLQkJCW1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQl2YWwgPSBFWFRfQ1NEX1RJTUlOR19IUzQwMCB8Ci0JICAgICAgY2FyZC0+ZHJpdmVfc3RyZW5ndGggPDwgRVhUX0NTRF9EUlZfU1RSX1NISUZUOwotCWVyciA9IF9fbW1jX3N3aXRjaChjYXJkLCBFWFRfQ1NEX0NNRF9TRVRfTk9STUFMLAotCQkJICAgRVhUX0NTRF9IU19USU1JTkcsIHZhbCwKLQkJCSAgIGNhcmQtPmV4dF9jc2QuZ2VuZXJpY19jbWQ2X3RpbWUsCi0JCQkgICB0cnVlLCB0cnVlLCB0cnVlKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiJXM6IHN3aXRjaCB0byBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKLQkJCSBtbWNfaG9zdG5hbWUoaG9zdCksIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbW1jX3NldF90aW1pbmcoaG9zdCwgTU1DX1RJTUlOR19NTUNfSFM0MDApOwotCW1tY19zZXRfYnVzX3NwZWVkKGNhcmQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBtbWNfaHMyMDBfdG9faHM0MDAoc3RydWN0IG1tY19jYXJkICpjYXJkKQotewotCXJldHVybiBtbWNfc2VsZWN0X2hzNDAwKGNhcmQpOwotfQotCiAvKiBDYWxsZXIgbXVzdCBob2xkIHJlLXR1bmluZyAqLwogc3RhdGljIGludCBtbWNfc3dpdGNoX3N0YXR1cyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCiB7CkBAIC0xMTE4LDYgKzEwNTMsOTcgQEAKIAlyZXR1cm4gbW1jX3N3aXRjaF9zdGF0dXNfZXJyb3IoY2FyZC0+aG9zdCwgc3RhdHVzKTsKIH0KIAorc3RhdGljIGludCBtbWNfc2VsZWN0X2hzNDAwKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OworCWJvb2wgc2VuZF9zdGF0dXMgPSB0cnVlOworCXVuc2lnbmVkIGludCBtYXhfZHRyOworCWludCBlcnIgPSAwOworCXU4IHZhbDsKKworCS8qCisJICogSFM0MDAgbW9kZSByZXF1aXJlcyA4LWJpdCBidXMgd2lkdGgKKwkgKi8KKwlpZiAoIShjYXJkLT5tbWNfYXZhaWxfdHlwZSAmIEVYVF9DU0RfQ0FSRF9UWVBFX0hTNDAwICYmCisJICAgICAgaG9zdC0+aW9zLmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzgpKQorCQlyZXR1cm4gMDsKKworCWlmIChob3N0LT5jYXBzICYgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1kpCisJCXNlbmRfc3RhdHVzID0gZmFsc2U7CisKKwkvKiBSZWR1Y2UgZnJlcXVlbmN5IHRvIEhTIGZyZXF1ZW5jeSAqLworCW1heF9kdHIgPSBjYXJkLT5leHRfY3NkLmhzX21heF9kdHI7CisJbW1jX3NldF9jbG9jayhob3N0LCBtYXhfZHRyKTsKKworCS8qIFN3aXRjaCBjYXJkIHRvIEhTIG1vZGUgKi8KKwl2YWwgPSBFWFRfQ1NEX1RJTUlOR19IUyB8CisJICAgICAgY2FyZC0+ZHJpdmVfc3RyZW5ndGggPDwgRVhUX0NTRF9EUlZfU1RSX1NISUZUOworCWVyciA9IF9fbW1jX3N3aXRjaChjYXJkLCBFWFRfQ1NEX0NNRF9TRVRfTk9STUFMLAorCQkJICAgRVhUX0NTRF9IU19USU1JTkcsIHZhbCwKKwkJCSAgIGNhcmQtPmV4dF9jc2QuZ2VuZXJpY19jbWQ2X3RpbWUsCisJCQkgICB0cnVlLCBzZW5kX3N0YXR1cywgdHJ1ZSk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIiVzOiBzd2l0Y2ggdG8gaGlnaC1zcGVlZCBmcm9tIGhzMjAwIGZhaWxlZCwgZXJyOiVkXG4iLAorCQkJbW1jX2hvc3RuYW1lKGhvc3QpLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBob3N0IGNvbnRyb2xsZXIgdG8gSFMgdGltaW5nICovCisJbW1jX3NldF90aW1pbmcoY2FyZC0+aG9zdCwgTU1DX1RJTUlOR19NTUNfSFMpOworCisJaWYgKCFzZW5kX3N0YXR1cykgeworCQllcnIgPSBtbWNfc3dpdGNoX3N0YXR1cyhjYXJkKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X2VycjsKKwl9CisKKwkvKiBTd2l0Y2ggY2FyZCB0byBERFIgKi8KKwllcnIgPSBtbWNfc3dpdGNoKGNhcmQsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCisJCQkgRVhUX0NTRF9CVVNfV0lEVEgsCisJCQkgRVhUX0NTRF9ERFJfQlVTX1dJRFRIXzgsCisJCQkgY2FyZC0+ZXh0X2NzZC5nZW5lcmljX2NtZDZfdGltZSk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIiVzOiBzd2l0Y2ggdG8gYnVzIHdpZHRoIGZvciBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0KSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTd2l0Y2ggY2FyZCB0byBIUzQwMCAqLworCXZhbCA9IEVYVF9DU0RfVElNSU5HX0hTNDAwIHwKKwkgICAgICBjYXJkLT5kcml2ZV9zdHJlbmd0aCA8PCBFWFRfQ1NEX0RSVl9TVFJfU0hJRlQ7CisJZXJyID0gX19tbWNfc3dpdGNoKGNhcmQsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCisJCQkgICBFWFRfQ1NEX0hTX1RJTUlORywgdmFsLAorCQkJICAgY2FyZC0+ZXh0X2NzZC5nZW5lcmljX2NtZDZfdGltZSwKKwkJCSAgIHRydWUsIHNlbmRfc3RhdHVzLCB0cnVlKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiJXM6IHN3aXRjaCB0byBoczQwMCBmYWlsZWQsIGVycjolZFxuIiwKKwkJCSBtbWNfaG9zdG5hbWUoaG9zdCksIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IGhvc3QgY29udHJvbGxlciB0byBIUzQwMCB0aW1pbmcgYW5kIGZyZXF1ZW5jeSAqLworCW1tY19zZXRfdGltaW5nKGhvc3QsIE1NQ19USU1JTkdfTU1DX0hTNDAwKTsKKwltbWNfc2V0X2J1c19zcGVlZChjYXJkKTsKKworCWlmICghc2VuZF9zdGF0dXMpIHsKKwkJZXJyID0gbW1jX3N3aXRjaF9zdGF0dXMoY2FyZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9lcnI7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9lcnI6CisJcHJfZXJyKCIlczogJXMgZmFpbGVkLCBlcnJvciAlZFxuIiwgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLAorCSAgICAgICBfX2Z1bmNfXywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbW1jX2hzMjAwX3RvX2hzNDAwKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlyZXR1cm4gbW1jX3NlbGVjdF9oczQwMChjYXJkKTsKK30KKwogaW50IG1tY19oczQwMF90b19oczIwMChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IG1tY19ob3N0ICpob3N0ID0gY2FyZC0+aG9zdDsKQEAgLTEyMTksNiArMTI0NSw4IEBACiBzdGF0aWMgaW50IG1tY19zZWxlY3RfaHMyMDAoc3RydWN0IG1tY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBtbWNfaG9zdCAqaG9zdCA9IGNhcmQtPmhvc3Q7CisJYm9vbCBzZW5kX3N0YXR1cyA9IHRydWU7CisJdW5zaWduZWQgaW50IG9sZF90aW1pbmc7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAJdTggdmFsOwogCkBAIC0xMjM0LDYgKzEyNjIsOSBAQAogCiAJbW1jX3NlbGVjdF9kcml2ZXJfdHlwZShjYXJkKTsKIAorCWlmIChob3N0LT5jYXBzICYgTU1DX0NBUF9XQUlUX1dISUxFX0JVU1kpCisJCXNlbmRfc3RhdHVzID0gZmFsc2U7CisKIAkvKgogCSAqIFNldCB0aGUgYnVzIHdpZHRoKDQgb3IgOCkgd2l0aCBob3N0J3Mgc3VwcG9ydCBhbmQKIAkgKiBzd2l0Y2ggdG8gSFMyMDAgbW9kZSBpZiBidXMgd2lkdGggaXMgc2V0IHN1Y2Nlc3NmdWxseS4KQEAgLTEyNDUsMTEgKzEyNzYsMjUgQEAKIAkJZXJyID0gX19tbWNfc3dpdGNoKGNhcmQsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCiAJCQkJICAgRVhUX0NTRF9IU19USU1JTkcsIHZhbCwKIAkJCQkgICBjYXJkLT5leHRfY3NkLmdlbmVyaWNfY21kNl90aW1lLAotCQkJCSAgIHRydWUsIHRydWUsIHRydWUpOwotCQlpZiAoIWVycikKLQkJCW1tY19zZXRfdGltaW5nKGhvc3QsIE1NQ19USU1JTkdfTU1DX0hTMjAwKTsKKwkJCQkgICB0cnVlLCBzZW5kX3N0YXR1cywgdHJ1ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycjsKKwkJb2xkX3RpbWluZyA9IGhvc3QtPmlvcy50aW1pbmc7CisJCW1tY19zZXRfdGltaW5nKGhvc3QsIE1NQ19USU1JTkdfTU1DX0hTMjAwKTsKKwkJaWYgKCFzZW5kX3N0YXR1cykgeworCQkJZXJyID0gbW1jX3N3aXRjaF9zdGF0dXMoY2FyZCk7CisJCQkvKgorCQkJICogbW1jX3NlbGVjdF90aW1pbmcoKSBhc3N1bWVzIHRpbWluZyBoYXMgbm90IGNoYW5nZWQgaWYKKwkJCSAqIGl0IGlzIGEgc3dpdGNoIGVycm9yLgorCQkJICovCisJCQlpZiAoZXJyID09IC1FQkFETVNHKQorCQkJCW1tY19zZXRfdGltaW5nKGhvc3QsIG9sZF90aW1pbmcpOworCQl9CiAJfQogZXJyOgorCWlmIChlcnIpCisJCXByX2VycigiJXM6ICVzIGZhaWxlZCwgZXJyb3IgJWRcbiIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwKKwkJICAgICAgIF9fZnVuY19fLCBlcnIpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCBhZjcxZGU1Li4xZGVlNTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC00NzMsNiArNDczLDcgQEAKIAogY29uZmlnIE1NQ19HT0xERklTSAogCXRyaXN0YXRlICJnb2xkZmlzaCBxZW11IE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhBU19ETUEKIAlkZXBlbmRzIG9uIEdPTERGSVNIIHx8IENPTVBJTEVfVEVTVAogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgR29sZGZpc2ggTXVsdGltZWRpYSBjYXJkIEludGVyZmFjZSBlbXVsYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXRrLXNkLmMgYi9kcml2ZXJzL21tYy9ob3N0L210ay1zZC5jCmluZGV4IDM5NTY4Y2MuLjMzZGZkN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXRrLXNkLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tdGstc2QuYwpAQCAtMTI3Niw3ICsxMjc2LDcgQEAKIAlpbnQgc3RhcnQgPSAwLCBsZW4gPSAwOwogCWludCBzdGFydF9maW5hbCA9IDAsIGxlbl9maW5hbCA9IDA7CiAJdTggZmluYWxfcGhhc2UgPSAweGZmOwotCXN0cnVjdCBtc2RjX2RlbGF5X3BoYXNlIGRlbGF5X3BoYXNlOworCXN0cnVjdCBtc2RjX2RlbGF5X3BoYXNlIGRlbGF5X3BoYXNlID0geyAwLCB9OwogCiAJaWYgKGRlbGF5ID09IDApIHsKIAkJZGV2X2Vycihob3N0LT5kZXYsICJwaGFzZSBlcnJvcjogW21hcDoleF1cbiIsIGRlbGF5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCmluZGV4IDhjYWRkNzQuLmNlMDg4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwpAQCAtODA1LDcgKzgwNSw3IEBACiAJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCW1tYy0+Y2FwcyB8PSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvX2ludmVydCA/Ci0JCQlNTUNfQ0FQMl9ST19BQ1RJVkVfSElHSCA6IDA7CisJCQkwIDogTU1DX0NBUDJfUk9fQUNUSVZFX0hJR0g7CiAJfQogCiAJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19jZCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2p6NDc0MF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2p6NDc0MF9uYW5kLmMKaW5kZXggZGM0ZTg0NC4uNWE5OWE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9qejQ3NDBfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvano0NzQwX25hbmQuYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCisjaW5jbHVkZSA8YXNtL21hY2gtano0NzQwL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvano0NzQwX25hbmQuaD4KIAogI2RlZmluZSBKWl9SRUdfTkFORF9DVFJMCTB4NTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IGNjNzQxNDIuLmVjZTU0NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtMzExMCw3ICszMTEwLDcgQEAKICAqLwogc3RhdGljIHZvaWQgbmFuZF9zaHV0ZG93bihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQluYW5kX2dldF9kZXZpY2UobXRkLCBGTF9TSFVURE9XTik7CisJbmFuZF9nZXRfZGV2aWNlKG10ZCwgRkxfUE1fU1VTUEVOREVEKTsKIH0KIAogLyogU2V0IGRlZmF1bHQgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vZnBhcnQuYyBiL2RyaXZlcnMvbXRkL29mcGFydC5jCmluZGV4IDY2OWMzNDUuLjllZDYwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29mcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL29mcGFydC5jCkBAIC00NiwxMCArNDYsMTggQEAKIAogCW9mcGFydF9ub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobXRkX25vZGUsICJwYXJ0aXRpb25zIik7CiAJaWYgKCFvZnBhcnRfbm9kZSkgewotCQlwcl93YXJuKCIlczogJ3BhcnRpdGlvbnMnIHN1Ym5vZGUgbm90IGZvdW5kIG9uICVzLiBUcnlpbmcgdG8gcGFyc2UgZGlyZWN0IHN1Ym5vZGVzIGFzIHBhcnRpdGlvbnMuXG4iLAotCQkJbWFzdGVyLT5uYW1lLCBtdGRfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJLyoKKwkJICogV2UgbWlnaHQgZ2V0IGhlcmUgZXZlbiB3aGVuIG9mcGFydCBpc24ndCB1c2VkIGF0IGFsbCAoZS5nLiwKKwkJICogd2hlbiB1c2luZyBhbm90aGVyIHBhcnNlciksIHNvIGRvbid0IGJlIGxvdWRlciB0aGFuCisJCSAqIEtFUk5fREVCVUcKKwkJICovCisJCXByX2RlYnVnKCIlczogJ3BhcnRpdGlvbnMnIHN1Ym5vZGUgbm90IGZvdW5kIG9uICVzLiBUcnlpbmcgdG8gcGFyc2UgZGlyZWN0IHN1Ym5vZGVzIGFzIHBhcnRpdGlvbnMuXG4iLAorCQkJIG1hc3Rlci0+bmFtZSwgbXRkX25vZGUtPmZ1bGxfbmFtZSk7CiAJCW9mcGFydF9ub2RlID0gbXRkX25vZGU7CiAJCWRlZGljYXRlZCA9IGZhbHNlOworCX0gZWxzZSBpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG9mcGFydF9ub2RlLCAiZml4ZWQtcGFydGl0aW9ucyIpKSB7CisJCS8qIFRoZSAncGFydGl0aW9ucycgc3Vibm9kZSBtaWdodCBiZSB1c2VkIGJ5IGFub3RoZXIgcGFyc2VyICovCisJCXJldHVybiAwOwogCX0KIAogCS8qIEZpcnN0IGNvdW50IHRoZSBzdWJub2RlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmMgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuYwppbmRleCBiMDc3ZTQzLi5jNGNiMTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvZGVidWcuYworKysgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAKIAlkZnNfcm9vdGRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidWJpIiwgTlVMTCk7CiAJaWYgKElTX0VSUl9PUl9OVUxMKGRmc19yb290ZGlyKSkgewotCQlpbnQgZXJyID0gZGZzX3Jvb3RkaXIgPyAtRU5PREVWIDogUFRSX0VSUihkZnNfcm9vdGRpcik7CisJCWludCBlcnIgPSBkZnNfcm9vdGRpciA/IFBUUl9FUlIoZGZzX3Jvb3RkaXIpIDogLUVOT0RFVjsKIAogCQlwcl9lcnIoIlVCSSBlcnJvcjogY2Fubm90IGNyZWF0ZSBcInViaVwiIGRlYnVnZnMgZGlyZWN0b3J5LCBlcnJvciAlZFxuIiwKIAkJICAgICAgIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvaW8uYyBiL2RyaXZlcnMvbXRkL3ViaS9pby5jCmluZGV4IDFmYzIzZTQuLjEwY2YzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9pby5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9pby5jCkBAIC0xMjk5LDcgKzEyOTksNyBAQAogCWlmIChlcnIgJiYgZXJyICE9IFVCSV9JT19CSVRGTElQUyAmJiAhbXRkX2lzX2VjY2VycihlcnIpKQogCQlnb3RvIGV4aXQ7CiAKLQljcmMgPSBjcmMzMihVQklfQ1JDMzJfSU5JVCwgdmlkX2hkciwgVUJJX0VDX0hEUl9TSVpFX0NSQyk7CisJY3JjID0gY3JjMzIoVUJJX0NSQzMyX0lOSVQsIHZpZF9oZHIsIFVCSV9WSURfSERSX1NJWkVfQ1JDKTsKIAloZHJfY3JjID0gYmUzMl90b19jcHUodmlkX2hkci0+aGRyX2NyYyk7CiAJaWYgKGhkcl9jcmMgIT0gY3JjKSB7CiAJCXViaV9lcnIodWJpLCAiYmFkIFZJRCBoZWFkZXIgQ1JDIGF0IFBFQiAlZCwgY2FsY3VsYXRlZCAlIzA4eCwgcmVhZCAlIzA4eCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvd2wuYyBiL2RyaXZlcnMvbXRkL3ViaS93bC5jCmluZGV4IGViNDQ4OWY5Li41NjA2NTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvd2wuYworKysgYi9kcml2ZXJzL210ZC91Ymkvd2wuYwpAQCAtNjAzLDYgKzYwMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX19lcmFzZV93b3JrZXIoc3RydWN0IHViaV9kZXZpY2UgKnViaSwgc3RydWN0IHViaV93b3JrICp3bF93cmspOwogLyoqCiAgKiBkb19zeW5jX2VyYXNlIC0gcnVuIHRoZSBlcmFzZSB3b3JrZXIgc3luY2hyb25vdXNseS4KICAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CkBAIC02MTUsMjAgKzYxNiwxNiBAQAogc3RhdGljIGludCBkb19zeW5jX2VyYXNlKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIHN0cnVjdCB1Ymlfd2xfZW50cnkgKmUsCiAJCQkgaW50IHZvbF9pZCwgaW50IGxudW0sIGludCB0b3J0dXJlKQogewotCXN0cnVjdCB1Ymlfd29yayAqd2xfd3JrOworCXN0cnVjdCB1Ymlfd29yayB3bF93cms7CiAKIAlkYmdfd2woInN5bmMgZXJhc2Ugb2YgUEVCICVpIiwgZS0+cG51bSk7CiAKLQl3bF93cmsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdWJpX3dvcmspLCBHRlBfTk9GUyk7Ci0JaWYgKCF3bF93cmspCi0JCXJldHVybiAtRU5PTUVNOworCXdsX3dyay5lID0gZTsKKwl3bF93cmsudm9sX2lkID0gdm9sX2lkOworCXdsX3dyay5sbnVtID0gbG51bTsKKwl3bF93cmsudG9ydHVyZSA9IHRvcnR1cmU7CiAKLQl3bF93cmstPmUgPSBlOwotCXdsX3dyay0+dm9sX2lkID0gdm9sX2lkOwotCXdsX3dyay0+bG51bSA9IGxudW07Ci0Jd2xfd3JrLT50b3J0dXJlID0gdG9ydHVyZTsKLQotCXJldHVybiBlcmFzZV93b3JrZXIodWJpLCB3bF93cmssIDApOworCXJldHVybiBfX2VyYXNlX3dvcmtlcih1YmksICZ3bF93cmspOwogfQogCiAvKioKQEAgLTEwMTQsNyArMTAxMSw3IEBACiB9CiAKIC8qKgotICogZXJhc2Vfd29ya2VyIC0gcGh5c2ljYWwgZXJhc2VibG9jayBlcmFzZSB3b3JrZXIgZnVuY3Rpb24uCisgKiBfX2VyYXNlX3dvcmtlciAtIHBoeXNpY2FsIGVyYXNlYmxvY2sgZXJhc2Ugd29ya2VyIGZ1bmN0aW9uLgogICogQHViaTogVUJJIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEB3bF93cms6IHRoZSB3b3JrIG9iamVjdAogICogQHNodXRkb3duOiBub24temVybyBpZiB0aGUgd29ya2VyIGhhcyB0byBmcmVlIG1lbW9yeSBhbmQgZXhpdApAQCAtMTAyNSw4ICsxMDIyLDcgQEAKICAqIG5lZWRlZC4gUmV0dXJucyB6ZXJvIGluIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YKICAqIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgZXJhc2Vfd29ya2VyKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIHN0cnVjdCB1Ymlfd29yayAqd2xfd3JrLAotCQkJaW50IHNodXRkb3duKQorc3RhdGljIGludCBfX2VyYXNlX3dvcmtlcihzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBzdHJ1Y3QgdWJpX3dvcmsgKndsX3dyaykKIHsKIAlzdHJ1Y3QgdWJpX3dsX2VudHJ5ICplID0gd2xfd3JrLT5lOwogCWludCBwbnVtID0gZS0+cG51bTsKQEAgLTEwMzQsMjEgKzEwMzAsMTEgQEAKIAlpbnQgbG51bSA9IHdsX3dyay0+bG51bTsKIAlpbnQgZXJyLCBhdmFpbGFibGVfY29uc3VtZWQgPSAwOwogCi0JaWYgKHNodXRkb3duKSB7Ci0JCWRiZ193bCgiY2FuY2VsIGVyYXN1cmUgb2YgUEVCICVkIEVDICVkIiwgcG51bSwgZS0+ZWMpOwotCQlrZnJlZSh3bF93cmspOwotCQl3bF9lbnRyeV9kZXN0cm95KHViaSwgZSk7Ci0JCXJldHVybiAwOwotCX0KLQogCWRiZ193bCgiZXJhc2UgUEVCICVkIEVDICVkIExFQiAlZDolZCIsCiAJICAgICAgIHBudW0sIGUtPmVjLCB3bF93cmstPnZvbF9pZCwgd2xfd3JrLT5sbnVtKTsKIAogCWVyciA9IHN5bmNfZXJhc2UodWJpLCBlLCB3bF93cmstPnRvcnR1cmUpOwogCWlmICghZXJyKSB7Ci0JCS8qIEZpbmUsIHdlJ3ZlIGVyYXNlZCBpdCBzdWNjZXNzZnVsbHkgKi8KLQkJa2ZyZWUod2xfd3JrKTsKLQogCQlzcGluX2xvY2soJnViaS0+d2xfbG9jayk7CiAJCXdsX3RyZWVfYWRkKGUsICZ1YmktPmZyZWUpOwogCQl1YmktPmZyZWVfY291bnQrKzsKQEAgLTEwNjYsNyArMTA1Miw2IEBACiAJfQogCiAJdWJpX2Vycih1YmksICJmYWlsZWQgdG8gZXJhc2UgUEVCICVkLCBlcnJvciAlZCIsIHBudW0sIGVycik7Ci0Ja2ZyZWUod2xfd3JrKTsKIAogCWlmIChlcnIgPT0gLUVJTlRSIHx8IGVyciA9PSAtRU5PTUVNIHx8IGVyciA9PSAtRUFHQUlOIHx8CiAJICAgIGVyciA9PSAtRUJVU1kpIHsKQEAgLTEwNzUsNiArMTA2MCw3IEBACiAJCS8qIFJlLXNjaGVkdWxlIHRoZSBMRUIgZm9yIGVyYXN1cmUgKi8KIAkJZXJyMSA9IHNjaGVkdWxlX2VyYXNlKHViaSwgZSwgdm9sX2lkLCBsbnVtLCAwKTsKIAkJaWYgKGVycjEpIHsKKwkJCXdsX2VudHJ5X2Rlc3Ryb3kodWJpLCBlKTsKIAkJCWVyciA9IGVycjE7CiAJCQlnb3RvIG91dF9ybzsKIAkJfQpAQCAtMTE1MCw2ICsxMTM2LDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBlcmFzZV93b3JrZXIoc3RydWN0IHViaV9kZXZpY2UgKnViaSwgc3RydWN0IHViaV93b3JrICp3bF93cmssCisJCQkgIGludCBzaHV0ZG93bikKK3sKKwlpbnQgcmV0OworCisJaWYgKHNodXRkb3duKSB7CisJCXN0cnVjdCB1Ymlfd2xfZW50cnkgKmUgPSB3bF93cmstPmU7CisKKwkJZGJnX3dsKCJjYW5jZWwgZXJhc3VyZSBvZiBQRUIgJWQgRUMgJWQiLCBlLT5wbnVtLCBlLT5lYyk7CisJCWtmcmVlKHdsX3dyayk7CisJCXdsX2VudHJ5X2Rlc3Ryb3kodWJpLCBlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gX19lcmFzZV93b3JrZXIodWJpLCB3bF93cmspOworCWtmcmVlKHdsX3dyayk7CisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiB1Ymlfd2xfcHV0X3BlYiAtIHJldHVybiBhIFBFQiB0byB0aGUgd2Vhci1sZXZlbGluZyBzdWItc3lzdGVtLgogICogQHViaTogVUJJIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9iZmluX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2JmaW5fY2FuLmMKaW5kZXggNTdkYWRkNS4uMWRlYjhmZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9iZmluX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9iZmluX2Nhbi5jCkBAIC01MDEsOCArNTAxLDYgQEAKIAkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9GT1JNOwogCQllbHNlIGlmIChzdGF0dXMgJiBTRVIpCiAJCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfU1RVRkY7Ci0JCWVsc2UKLQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9VTlNQRUM7CiAJfQogCiAJcHJpdi0+Y2FuLnN0YXRlID0gc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vY19jYW4vY19jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbi5jCmluZGV4IDVkMjE0ZDEuLmY5MWIwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbi5jCkBAIC05NjIsNyArOTYyLDYgQEAKIAkgKiB0eXBlIG9mIHRoZSBsYXN0IGVycm9yIHRvIG9jY3VyIG9uIHRoZSBDQU4gYnVzCiAJICovCiAJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX1BST1QgfCBDQU5fRVJSX0JVU0VSUk9SOwotCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9VTlNQRUM7CiAKIAlzd2l0Y2ggKGxlY190eXBlKSB7CiAJY2FzZSBMRUNfU1RVRkZfRVJST1I6CkBAIC05NzUsOCArOTc0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBMRUNfQUNLX0VSUk9SOgogCQluZXRkZXZfZGJnKGRldiwgImFjayBlcnJvclxuIik7Ci0JCWNmLT5kYXRhWzNdIHw9IChDQU5fRVJSX1BST1RfTE9DX0FDSyB8Ci0JCQkJQ0FOX0VSUl9QUk9UX0xPQ19BQ0tfREVMKTsKKwkJY2YtPmRhdGFbM10gPSBDQU5fRVJSX1BST1RfTE9DX0FDSzsKIAkJYnJlYWs7CiAJY2FzZSBMRUNfQklUMV9FUlJPUjoKIAkJbmV0ZGV2X2RiZyhkZXYsICJiaXQxIGVycm9yXG4iKTsKQEAgLTk4OCw4ICs5ODYsNyBAQAogCQlicmVhazsKIAljYXNlIExFQ19DUkNfRVJST1I6CiAJCW5ldGRldl9kYmcoZGV2LCAiQ1JDIGVycm9yXG4iKTsKLQkJY2YtPmRhdGFbM10gfD0gKENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUSB8Ci0JCQkJQ0FOX0VSUl9QUk9UX0xPQ19DUkNfREVMKTsKKwkJY2YtPmRhdGFbM10gPSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2NjNzcwL2NjNzcwLmMgYi9kcml2ZXJzL25ldC9jYW4vY2M3NzAvY2M3NzAuYwppbmRleCA3MGE4Y2JiLi4xZTM3MzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vY2M3NzAvY2M3NzAuYworKysgYi9kcml2ZXJzL25ldC9jYW4vY2M3NzAvY2M3NzAuYwpAQCAtNTc4LDcgKzU3OCw3IEBACiAJCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX0JJVDA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNUQVRfTEVDX0NSQzoKLQkJCQljZi0+ZGF0YVszXSB8PSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVE7CisJCQkJY2YtPmRhdGFbM10gPSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVE7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9mbGV4Y2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vZmxleGNhbi5jCmluZGV4IDg2OGZlOTQuLjQxYzBmYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9mbGV4Y2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2ZsZXhjYW4uYwpAQCAtNTM1LDEzICs1MzUsMTMgQEAKIAlpZiAocmVnX2VzciAmIEZMRVhDQU5fRVNSX0FDS19FUlIpIHsKIAkJbmV0ZGV2X2RiZyhkZXYsICJBQ0tfRVJSIGlycVxuIik7CiAJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9BQ0s7Ci0JCWNmLT5kYXRhWzNdIHw9IENBTl9FUlJfUFJPVF9MT0NfQUNLOworCQljZi0+ZGF0YVszXSA9IENBTl9FUlJfUFJPVF9MT0NfQUNLOwogCQl0eF9lcnJvcnMgPSAxOwogCX0KIAlpZiAocmVnX2VzciAmIEZMRVhDQU5fRVNSX0NSQ19FUlIpIHsKIAkJbmV0ZGV2X2RiZyhkZXYsICJDUkNfRVJSIGlycVxuIik7CiAJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9CSVQ7Ci0JCWNmLT5kYXRhWzNdIHw9IENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUTsKKwkJY2YtPmRhdGFbM10gPSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVE7CiAJCXJ4X2Vycm9ycyA9IDE7CiAJfQogCWlmIChyZWdfZXNyICYgRkxFWENBTl9FU1JfRlJNX0VSUikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYyBiL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKaW5kZXggYzFlODUzNi4uNWQwNGY1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYworKysgYi9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCkBAIC0xMDk2LDcgKzEwOTYsNiBAQAogCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1NUVUZGOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfVU5TUEVDOwogCQkJY2YtPmRhdGFbM10gPSBlY2MgJiBFQ0NfU0VHOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9tX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL21fY2FuL21fY2FuLmMKaW5kZXggZWY2NTUxNy4uMzljZjkxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21fY2FuL21fY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21fY2FuL21fY2FuLmMKQEAgLTQ4Nyw3ICs0ODcsNiBAQAogCSAqIHR5cGUgb2YgdGhlIGxhc3QgZXJyb3IgdG8gb2NjdXIgb24gdGhlIENBTiBidXMKIAkgKi8KIAljZi0+Y2FuX2lkIHw9IENBTl9FUlJfUFJPVCB8IENBTl9FUlJfQlVTRVJST1I7Ci0JY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1VOU1BFQzsKIAogCXN3aXRjaCAobGVjX3R5cGUpIHsKIAljYXNlIExFQ19TVFVGRl9FUlJPUjoKQEAgLTUwMCw4ICs0OTksNyBAQAogCQlicmVhazsKIAljYXNlIExFQ19BQ0tfRVJST1I6CiAJCW5ldGRldl9kYmcoZGV2LCAiYWNrIGVycm9yXG4iKTsKLQkJY2YtPmRhdGFbM10gfD0gKENBTl9FUlJfUFJPVF9MT0NfQUNLIHwKLQkJCQlDQU5fRVJSX1BST1RfTE9DX0FDS19ERUwpOworCQljZi0+ZGF0YVszXSA9IENBTl9FUlJfUFJPVF9MT0NfQUNLOwogCQlicmVhazsKIAljYXNlIExFQ19CSVQxX0VSUk9SOgogCQluZXRkZXZfZGJnKGRldiwgImJpdDEgZXJyb3JcbiIpOwpAQCAtNTEzLDggKzUxMSw3IEBACiAJCWJyZWFrOwogCWNhc2UgTEVDX0NSQ19FUlJPUjoKIAkJbmV0ZGV2X2RiZyhkZXYsICJDUkMgZXJyb3JcbiIpOwotCQljZi0+ZGF0YVszXSB8PSAoQ0FOX0VSUl9QUk9UX0xPQ19DUkNfU0VRIHwKLQkJCQlDQU5fRVJSX1BST1RfTE9DX0NSQ19ERUwpOworCQljZi0+ZGF0YVszXSA9IENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYwppbmRleCBlMTg3Y2E3Li5jMTMxNzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMKQEAgLTU1OSw4ICs1NTksNyBAQAogCQlzdGF0cy0+cnhfZXJyb3JzKys7CiAJCWJyZWFrOwogCWNhc2UgUENIX0NSQ19FUlI6Ci0JCWNmLT5kYXRhWzNdIHw9IENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUSB8Ci0JCQkgICAgICAgQ0FOX0VSUl9QUk9UX0xPQ19DUkNfREVMOworCQljZi0+ZGF0YVszXSA9IENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUTsKIAkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfZXJyb3IrKzsKIAkJc3RhdHMtPnJ4X2Vycm9ycysrOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yY2FyX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3JjYXJfY2FuLmMKaW5kZXggN2JkNTQxOS4uYmM0NmJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JjYXJfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3JjYXJfY2FuLmMKQEAgLTI0MSwxNyArMjQxLDE2IEBACiAJCXU4IGVjc3I7CiAKIAkJbmV0ZGV2X2RiZyhwcml2LT5uZGV2LCAiQnVzIGVycm9yIGludGVycnVwdDpcbiIpOwotCQlpZiAoc2tiKSB7CisJCWlmIChza2IpCiAJCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQlVTRVJST1IgfCBDQU5fRVJSX1BST1Q7Ci0JCQljZi0+ZGF0YVsyXSA9IENBTl9FUlJfUFJPVF9VTlNQRUM7Ci0JCX0KKwogCQllY3NyID0gcmVhZGIoJnByaXYtPnJlZ3MtPmVjc3IpOwogCQlpZiAoZWNzciAmIFJDQVJfQ0FOX0VDU1JfQURFRikgewogCQkJbmV0ZGV2X2RiZyhwcml2LT5uZGV2LCAiQUNLIERlbGltaXRlciBFcnJvclxuIik7CiAJCQl0eF9lcnJvcnMrKzsKIAkJCXdyaXRlYih+UkNBUl9DQU5fRUNTUl9BREVGLCAmcHJpdi0+cmVncy0+ZWNzcik7CiAJCQlpZiAoc2tiKQotCQkJCWNmLT5kYXRhWzNdIHw9IENBTl9FUlJfUFJPVF9MT0NfQUNLX0RFTDsKKwkJCQljZi0+ZGF0YVszXSA9IENBTl9FUlJfUFJPVF9MT0NfQUNLX0RFTDsKIAkJfQogCQlpZiAoZWNzciAmIFJDQVJfQ0FOX0VDU1JfQkUwRikgewogCQkJbmV0ZGV2X2RiZyhwcml2LT5uZGV2LCAiQml0IEVycm9yIChkb21pbmFudClcbiIpOwpAQCAtMjcyLDcgKzI3MSw3IEBACiAJCQlyeF9lcnJvcnMrKzsKIAkJCXdyaXRlYih+UkNBUl9DQU5fRUNTUl9DRUYsICZwcml2LT5yZWdzLT5lY3NyKTsKIAkJCWlmIChza2IpCi0JCQkJY2YtPmRhdGFbM10gfD0gQ0FOX0VSUl9QUk9UX0xPQ19DUkNfU0VROworCQkJCWNmLT5kYXRhWzNdID0gQ0FOX0VSUl9QUk9UX0xPQ19DUkNfU0VROwogCQl9CiAJCWlmIChlY3NyICYgUkNBUl9DQU5fRUNTUl9BRUYpIHsKIAkJCW5ldGRldl9kYmcocHJpdi0+bmRldiwgIkFDSyBFcnJvclxuIik7CkBAIC0yODAsNyArMjc5LDcgQEAKIAkJCXdyaXRlYih+UkNBUl9DQU5fRUNTUl9BRUYsICZwcml2LT5yZWdzLT5lY3NyKTsKIAkJCWlmIChza2IpIHsKIAkJCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQUNLOwotCQkJCWNmLT5kYXRhWzNdIHw9IENBTl9FUlJfUFJPVF9MT0NfQUNLOworCQkJCWNmLT5kYXRhWzNdID0gQ0FOX0VSUl9QUk9UX0xPQ19BQ0s7CiAJCQl9CiAJCX0KIAkJaWYgKGVjc3IgJiBSQ0FSX0NBTl9FQ1NSX0ZFRikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jCmluZGV4IDdiOTJlOTEuLjhkZGEzYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYworKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMKQEAgLTIxOCw2ICsyMTgsOSBAQAogCXByaXYtPndyaXRlX3JlZyhwcml2LCBTSkExMDAwX1JYRVJSLCAweDApOwogCXByaXYtPnJlYWRfcmVnKHByaXYsIFNKQTEwMDBfRUNDKTsKIAorCS8qIGNsZWFyIGludGVycnVwdCBmbGFncyAqLworCXByaXYtPnJlYWRfcmVnKHByaXYsIFNKQTEwMDBfSVIpOworCiAJLyogbGVhdmUgcmVzZXQgbW9kZSAqLwogCXNldF9ub3JtYWxfbW9kZShkZXYpOwogfQpAQCAtNDQ2LDcgKzQ0OSw2IEBACiAJCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfU1RVRkY7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9VTlNQRUM7CiAJCQljZi0+ZGF0YVszXSA9IGVjYyAmIEVDQ19TRUc7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3N1bjRpX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3N1bjRpX2Nhbi5jCmluZGV4IGQ5YTQyYzYuLjY4ZWYwYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zdW40aV9jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vc3VuNGlfY2FuLmMKQEAgLTU3NSw3ICs1NzUsNiBAQAogCQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9TVFVGRjsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1VOU1BFQzsKIAkJCQljZi0+ZGF0YVszXSA9IChlY2MgJiBTVU40SV9TVEFfRVJSX1NFR19DT0RFKQogCQkJCQkgICAgICAgPj4gMTY7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jIGIvZHJpdmVycy9uZXQvY2FuL3RpX2hlY2MuYwppbmRleCBjZjM0NWNiLi42ODBkMWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi90aV9oZWNjLmMKQEAgLTcyMiw3ICs3MjIsNiBAQAogCWlmIChlcnJfc3RhdHVzICYgSEVDQ19CVVNfRVJST1IpIHsKIAkJKytwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19lcnJvcjsKIAkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU0VSUk9SIHwgQ0FOX0VSUl9QUk9UOwotCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfVU5TUEVDOwogCQlpZiAoZXJyX3N0YXR1cyAmIEhFQ0NfQ0FORVNfRkUpIHsKIAkJCWhlY2Nfc2V0X2JpdChwcml2LCBIRUNDX0NBTkVTLCBIRUNDX0NBTkVTX0ZFKTsKIAkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9GT1JNOwpAQCAtNzM3LDEzICs3MzYsMTEgQEAKIAkJfQogCQlpZiAoZXJyX3N0YXR1cyAmIEhFQ0NfQ0FORVNfQ1JDRSkgewogCQkJaGVjY19zZXRfYml0KHByaXYsIEhFQ0NfQ0FORVMsIEhFQ0NfQ0FORVNfQ1JDRSk7Ci0JCQljZi0+ZGF0YVszXSB8PSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVEgfAotCQkJCQlDQU5fRVJSX1BST1RfTE9DX0NSQ19ERUw7CisJCQljZi0+ZGF0YVszXSA9IENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUTsKIAkJfQogCQlpZiAoZXJyX3N0YXR1cyAmIEhFQ0NfQ0FORVNfQUNLRSkgewogCQkJaGVjY19zZXRfYml0KHByaXYsIEhFQ0NfQ0FORVMsIEhFQ0NfQ0FORVNfQUNLRSk7Ci0JCQljZi0+ZGF0YVszXSB8PSBDQU5fRVJSX1BST1RfTE9DX0FDSyB8Ci0JCQkJCUNBTl9FUlJfUFJPVF9MT0NfQUNLX0RFTDsKKwkJCWNmLT5kYXRhWzNdID0gQ0FOX0VSUl9QUk9UX0xPQ19BQ0s7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKaW5kZXggMmQzOTAzOC4uZmM1Yjc1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKQEAgLTM3Nyw3ICszNzcsNiBAQAogCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1NUVUZGOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfVU5TUEVDOwogCQkJY2YtPmRhdGFbM10gPSBlY2MgJiBTSkExMDAwX0VDQ19TRUc7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lc2RfdXNiMi5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lc2RfdXNiMi5jCmluZGV4IDBlNWE0NDkuLjExM2U2NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZXNkX3VzYjIuYworKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2VzZF91c2IyLmMKQEAgLTI4Miw3ICsyODIsNiBAQAogCQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9TVFVGRjsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1VOU1BFQzsKIAkJCQljZi0+ZGF0YVszXSA9IGVjYyAmIFNKQTEwMDBfRUNDX1NFRzsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiLmMKaW5kZXggOGIxN2E5MC4uMDIyYmZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiLmMKQEAgLTk0NCwxMCArOTQ0LDkgQEAKIAkJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9CVVNFUlJPUiB8IENBTl9FUlJfUFJPVDsKIAogCQkJaWYgKGVzLT5sZWFmLmVycm9yX2ZhY3RvciAmIE0xNkNfRUZfQUNLRSkKLQkJCQljZi0+ZGF0YVszXSB8PSAoQ0FOX0VSUl9QUk9UX0xPQ19BQ0spOworCQkJCWNmLT5kYXRhWzNdID0gQ0FOX0VSUl9QUk9UX0xPQ19BQ0s7CiAJCQlpZiAoZXMtPmxlYWYuZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9DUkNFKQotCQkJCWNmLT5kYXRhWzNdIHw9IChDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVEgfAotCQkJCQkJQ0FOX0VSUl9QUk9UX0xPQ19DUkNfREVMKTsKKwkJCQljZi0+ZGF0YVszXSA9IENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUTsKIAkJCWlmIChlcy0+bGVhZi5lcnJvcl9mYWN0b3IgJiBNMTZDX0VGX0ZPUk1FKQogCQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9GT1JNOwogCQkJaWYgKGVzLT5sZWFmLmVycm9yX2ZhY3RvciAmIE0xNkNfRUZfU1RGRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvdXNiXzhkZXYuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvdXNiXzhkZXYuYwppbmRleCBkZTk1YjFjLi5hNzMxNzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL3VzYl84ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi91c2JfOGRldi5jCkBAIC00MDEsOSArNDAxLDcgQEAKIAkJdHhfZXJyb3JzID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfOERFVl9TVEFUVVNNU0dfQ1JDOgotCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfVU5TUEVDOwotCQljZi0+ZGF0YVszXSB8PSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVEgfAotCQkJICAgICAgIENBTl9FUlJfUFJPVF9MT0NfQ1JDX0RFTDsKKwkJY2YtPmRhdGFbM10gPSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVE7CiAJCXJ4X2Vycm9ycyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgVVNCXzhERVZfU1RBVFVTTVNHX0JJVDA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4veGlsaW54X2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3hpbGlueF9jYW4uYwppbmRleCBmYzU1ZThlLi41MTY3MGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4veGlsaW54X2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi94aWxpbnhfY2FuLmMKQEAgLTYwOCwxNyArNjA4LDE1IEBACiAKIAkvKiBDaGVjayBmb3IgZXJyb3IgaW50ZXJydXB0ICovCiAJaWYgKGlzciAmIFhDQU5fSVhSX0VSUk9SX01BU0spIHsKLQkJaWYgKHNrYikgeworCQlpZiAoc2tiKQogCQkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX1BST1QgfCBDQU5fRVJSX0JVU0VSUk9SOwotCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1VOU1BFQzsKLQkJfQogCiAJCS8qIENoZWNrIGZvciBBY2sgZXJyb3IgaW50ZXJydXB0ICovCiAJCWlmIChlcnJfc3RhdHVzICYgWENBTl9FU1JfQUNLRVJfTUFTSykgewogCQkJc3RhdHMtPnR4X2Vycm9ycysrOwogCQkJaWYgKHNrYikgewogCQkJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9BQ0s7Ci0JCQkJY2YtPmRhdGFbM10gfD0gQ0FOX0VSUl9QUk9UX0xPQ19BQ0s7CisJCQkJY2YtPmRhdGFbM10gPSBDQU5fRVJSX1BST1RfTE9DX0FDSzsKIAkJCX0KIAkJfQogCkBAIC02NTQsOCArNjUyLDcgQEAKIAkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKIAkJCWlmIChza2IpIHsKIAkJCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfUFJPVDsKLQkJCQljZi0+ZGF0YVszXSA9IENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUSB8Ci0JCQkJCQlDQU5fRVJSX1BST1RfTE9DX0NSQ19ERUw7CisJCQkJY2YtPmRhdGFbM10gPSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVE7CiAJCQl9CiAJCX0KIAkJCXByaXYtPmNhbi5jYW5fc3RhdHMuYnVzX2Vycm9yKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmMgYi9kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmMKaW5kZXggOTA5MzU3Ny4uMDUyN2Y0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNjA2MC5jCisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuYwpAQCAtMTUsOSArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPG5ldC9kc2EuaD4KLQotI2RlZmluZSBSRUdfUE9SVChwKQkJKDggKyAocCkpCi0jZGVmaW5lIFJFR19HTE9CQUwJCTB4MGYKKyNpbmNsdWRlICJtdjg4ZTYwNjAuaCIKIAogc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBhZGRyLCBpbnQgcmVnKQogewpAQCAtNjcsMTMgKzY1LDE0IEBACiAJaWYgKGJ1cyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldCA9IG1kaW9idXNfcmVhZChidXMsIHN3X2FkZHIgKyBSRUdfUE9SVCgwKSwgMHgwMyk7CisJcmV0ID0gbWRpb2J1c19yZWFkKGJ1cywgc3dfYWRkciArIFJFR19QT1JUKDApLCBQT1JUX1NXSVRDSF9JRCk7CiAJaWYgKHJldCA+PSAwKSB7Ci0JCWlmIChyZXQgPT0gMHgwNjAwKQorCQlpZiAocmV0ID09IFBPUlRfU1dJVENIX0lEXzYwNjApCiAJCQlyZXR1cm4gIk1hcnZlbGwgODhFNjA2MCAoQTApIjsKLQkJaWYgKHJldCA9PSAweDA2MDEgfHwgcmV0ID09IDB4MDYwMikKKwkJaWYgKHJldCA9PSBQT1JUX1NXSVRDSF9JRF82MDYwX1IxIHx8CisJCSAgICByZXQgPT0gUE9SVF9TV0lUQ0hfSURfNjA2MF9SMikKIAkJCXJldHVybiAiTWFydmVsbCA4OEU2MDYwIChCMCkiOwotCQlpZiAoKHJldCAmIDB4ZmZmMCkgPT0gMHgwNjAwKQorCQlpZiAoKHJldCAmIFBPUlRfU1dJVENIX0lEXzYwNjBfTUFTSykgPT0gUE9SVF9TV0lUQ0hfSURfNjA2MCkKIAkJCXJldHVybiAiTWFydmVsbCA4OEU2MDYwIjsKIAl9CiAKQEAgLTg3LDIyICs4NiwyNiBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAogCS8qIFNldCBhbGwgcG9ydHMgdG8gdGhlIGRpc2FibGVkIHN0YXRlLiAqLwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJcmV0ID0gUkVHX1JFQUQoUkVHX1BPUlQoaSksIDB4MDQpOwotCQlSRUdfV1JJVEUoUkVHX1BPUlQoaSksIDB4MDQsIHJldCAmIDB4ZmZmYyk7CisJZm9yIChpID0gMDsgaSA8IE1WODhFNjA2MF9QT1JUUzsgaSsrKSB7CisJCXJldCA9IFJFR19SRUFEKFJFR19QT1JUKGkpLCBQT1JUX0NPTlRST0wpOworCQlSRUdfV1JJVEUoUkVHX1BPUlQoaSksIFBPUlRfQ09OVFJPTCwKKwkJCSAgcmV0ICYgflBPUlRfQ09OVFJPTF9TVEFURV9NQVNLKTsKIAl9CiAKIAkvKiBXYWl0IGZvciB0cmFuc21pdCBxdWV1ZXMgdG8gZHJhaW4uICovCiAJdXNsZWVwX3JhbmdlKDIwMDAsIDQwMDApOwogCiAJLyogUmVzZXQgdGhlIHN3aXRjaC4gKi8KLQlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgwYSwgMHhhMTMwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgR0xPQkFMX0FUVV9DT05UUk9MLAorCQkgIEdMT0JBTF9BVFVfQ09OVFJPTF9TV1JFU0VUIHwKKwkJICBHTE9CQUxfQVRVX0NPTlRST0xfQVRVU0laRV8xMDI0IHwKKwkJICBHTE9CQUxfQVRVX0NPTlRST0xfQVRFX0FHRV81TUlOKTsKIAogCS8qIFdhaXQgdXAgdG8gb25lIHNlY29uZCBmb3IgcmVzZXQgdG8gY29tcGxldGUuICovCiAJdGltZW91dCA9IGppZmZpZXMgKyAxICogSFo7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCXJldCA9IFJFR19SRUFEKFJFR19HTE9CQUwsIDB4MDApOwotCQlpZiAoKHJldCAmIDB4ODAwMCkgPT0gMHgwMDAwKQorCQlyZXQgPSBSRUdfUkVBRChSRUdfR0xPQkFMLCBHTE9CQUxfU1RBVFVTKTsKKwkJaWYgKHJldCAmIEdMT0JBTF9TVEFUVVNfSU5JVF9SRUFEWSkKIAkJCWJyZWFrOwogCiAJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKQEAgLTExOSwxMyArMTIyLDE1IEBACiAJICogc2V0IHRoZSBtYXhpbXVtIGZyYW1lIHNpemUgdG8gMTUzNiBieXRlcywgYW5kIG1hc2sgYWxsCiAJICogaW50ZXJydXB0IHNvdXJjZXMuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MDQsIDB4MDgwMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIEdMT0JBTF9DT05UUk9MLCBHTE9CQUxfQ09OVFJPTF9NQVhfRlJBTUVfMTUzNik7CiAKIAkvKiBFbmFibGUgYXV0b21hdGljIGFkZHJlc3MgbGVhcm5pbmcsIHNldCB0aGUgYWRkcmVzcwogCSAqIGRhdGFiYXNlIHNpemUgdG8gMTAyNCBlbnRyaWVzLCBhbmQgc2V0IHRoZSBkZWZhdWx0IGFnaW5nCiAJICogdGltZSB0byA1IG1pbnV0ZXMuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MGEsIDB4MjEzMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIEdMT0JBTF9BVFVfQ09OVFJPTCwKKwkJICBHTE9CQUxfQVRVX0NPTlRST0xfQVRVU0laRV8xMDI0IHwKKwkJICBHTE9CQUxfQVRVX0NPTlRST0xfQVRFX0FHRV81TUlOKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM5LDI1ICsxNDQsMzAgQEAKIAkgKiBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgQWRkaXRpb25hbGx5LCBpZiB0aGlzIGlzIHRoZSBDUFUKIAkgKiBwb3J0LCBlbmFibGUgSW5ncmVzcyBhbmQgRWdyZXNzIFRyYWlsZXIgdGFnZ2luZyBtb2RlLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LCBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8gIDB4NDEwMyA6IDB4MDAwMyk7CisJUkVHX1dSSVRFKGFkZHIsIFBPUlRfQ09OVFJPTCwKKwkJICBkc2FfaXNfY3B1X3BvcnQoZHMsIHApID8KKwkJCVBPUlRfQ09OVFJPTF9UUkFJTEVSIHwKKwkJCVBPUlRfQ09OVFJPTF9JTkdSRVNTX01PREUgfAorCQkJUE9SVF9DT05UUk9MX1NUQVRFX0ZPUldBUkRJTkcgOgorCQkJUE9SVF9DT05UUk9MX1NUQVRFX0ZPUldBUkRJTkcpOwogCiAJLyogUG9ydCBiYXNlZCBWTEFOIG1hcDogZ2l2ZSBlYWNoIHBvcnQgaXRzIG93biBhZGRyZXNzCiAJICogZGF0YWJhc2UsIGFsbG93IHRoZSBDUFUgcG9ydCB0byB0YWxrIHRvIGVhY2ggb2YgdGhlICdyZWFsJwogCSAqIHBvcnRzLCBhbmQgYWxsb3cgZWFjaCBvZiB0aGUgJ3JlYWwnIHBvcnRzIHRvIG9ubHkgdGFsayB0bwogCSAqIHRoZSBDUFUgcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNiwKLQkJCSgocCAmIDB4ZikgPDwgMTIpIHwKLQkJCSAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/Ci0JCQkJZHMtPnBoeXNfcG9ydF9tYXNrIDoKLQkJCQkoMSA8PCBkcy0+ZHN0LT5jcHVfcG9ydCkpKTsKKwlSRUdfV1JJVEUoYWRkciwgUE9SVF9WTEFOX01BUCwKKwkJICAoKHAgJiAweGYpIDw8IFBPUlRfVkxBTl9NQVBfREJOVU1fU0hJRlQpIHwKKwkJICAgKGRzYV9pc19jcHVfcG9ydChkcywgcCkgPworCQkJZHMtPnBoeXNfcG9ydF9tYXNrIDoKKwkJCUJJVChkcy0+ZHN0LT5jcHVfcG9ydCkpKTsKIAogCS8qIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yOiB3aGVuIGxlYXJuaW5nIHNvdXJjZSBhZGRyZXNzZXMKIAkgKiBvZiBwYWNrZXRzLCBhZGQgdGhlIGFkZHJlc3MgdG8gdGhlIGFkZHJlc3MgZGF0YWJhc2UgdXNpbmcKIAkgKiBhIHBvcnQgYml0bWFwIHRoYXQgaGFzIG9ubHkgdGhlIGJpdCBmb3IgdGhpcyBwb3J0IHNldCBhbmQKIAkgKiB0aGUgb3RoZXIgYml0cyBjbGVhci4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwYiwgMSA8PCBwKTsKKwlSRUdfV1JJVEUoYWRkciwgUE9SVF9BU1NPQ19WRUNUT1IsIEJJVChwKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3Nyw3ICsxODcsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNVjg4RTYwNjBfUE9SVFM7IGkrKykgewogCQlyZXQgPSBtdjg4ZTYwNjBfc2V0dXBfcG9ydChkcywgaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKQEAgLTE4OCwxNiArMTk4LDE3IEBACiAKIHN0YXRpYyBpbnQgbXY4OGU2MDYwX3NldF9hZGRyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggKmFkZHIpCiB7Ci0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MDEsIChhZGRyWzBdIDw8IDgpIHwgYWRkclsxXSk7Ci0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MDIsIChhZGRyWzJdIDw8IDgpIHwgYWRkclszXSk7Ci0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MDMsIChhZGRyWzRdIDw8IDgpIHwgYWRkcls1XSk7CisJLyogVXNlIHRoZSBzYW1lIE1BQyBBZGRyZXNzIGFzIEZEIFBhdXNlIGZyYW1lcyBmb3IgYWxsIHBvcnRzICovCisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIEdMT0JBTF9NQUNfMDEsIChhZGRyWzBdIDw8IDkpIHwgYWRkclsxXSk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIEdMT0JBTF9NQUNfMjMsIChhZGRyWzJdIDw8IDgpIHwgYWRkclszXSk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIEdMT0JBTF9NQUNfNDUsIChhZGRyWzRdIDw8IDgpIHwgYWRkcls1XSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtdjg4ZTYwNjBfcG9ydF90b19waHlfYWRkcihpbnQgcG9ydCkKIHsKLQlpZiAocG9ydCA+PSAwICYmIHBvcnQgPD0gNSkKKwlpZiAocG9ydCA+PSAwICYmIHBvcnQgPCBNVjg4RTYwNjBfUE9SVFMpCiAJCXJldHVybiBwb3J0OwogCXJldHVybiAtMTsKIH0KQEAgLTIyNSw1NCArMjM2LDYgQEAKIAlyZXR1cm4gcmVnX3dyaXRlKGRzLCBhZGRyLCByZWdudW0sIHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIG12ODhlNjA2MF9wb2xsX2xpbmsoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IERTQV9NQVhfUE9SVFM7IGkrKykgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCQlpbnQgdW5pbml0aWFsaXplZF92YXIocG9ydF9zdGF0dXMpOwotCQlpbnQgbGluazsKLQkJaW50IHNwZWVkOwotCQlpbnQgZHVwbGV4OwotCQlpbnQgZmM7Ci0KLQkJZGV2ID0gZHMtPnBvcnRzW2ldOwotCQlpZiAoZGV2ID09IE5VTEwpCi0JCQljb250aW51ZTsKLQotCQlsaW5rID0gMDsKLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCXBvcnRfc3RhdHVzID0gcmVnX3JlYWQoZHMsIFJFR19QT1JUKGkpLCAweDAwKTsKLQkJCWlmIChwb3J0X3N0YXR1cyA8IDApCi0JCQkJY29udGludWU7Ci0KLQkJCWxpbmsgPSAhIShwb3J0X3N0YXR1cyAmIDB4MTAwMCk7Ci0JCX0KLQotCQlpZiAoIWxpbmspIHsKLQkJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJCQluZXRkZXZfaW5mbyhkZXYsICJsaW5rIGRvd25cbiIpOwotCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXNwZWVkID0gKHBvcnRfc3RhdHVzICYgMHgwMTAwKSA/IDEwMCA6IDEwOwotCQlkdXBsZXggPSAocG9ydF9zdGF0dXMgJiAweDAyMDApID8gMSA6IDA7Ci0JCWZjID0gKChwb3J0X3N0YXR1cyAmIDB4YzAwMCkgPT0gMHhjMDAwKSA/IDEgOiAwOwotCi0JCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCQluZXRkZXZfaW5mbyhkZXYsCi0JCQkJICAgICJsaW5rIHVwLCAlZCBNYi9zLCAlcyBkdXBsZXgsIGZsb3cgY29udHJvbCAlc2FibGVkXG4iLAotCQkJCSAgICBzcGVlZCwKLQkJCQkgICAgZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLAotCQkJCSAgICBmYyA/ICJlbiIgOiAiZGlzIik7Ci0JCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIgbXY4OGU2MDYwX3N3aXRjaF9kcml2ZXIgPSB7CiAJLnRhZ19wcm90b2NvbAk9IERTQV9UQUdfUFJPVE9fVFJBSUxFUiwKIAkucHJvYmUJCT0gbXY4OGU2MDYwX3Byb2JlLApAQCAtMjgwLDcgKzI0Myw2IEBACiAJLnNldF9hZGRyCT0gbXY4OGU2MDYwX3NldF9hZGRyLAogCS5waHlfcmVhZAk9IG12ODhlNjA2MF9waHlfcmVhZCwKIAkucGh5X3dyaXRlCT0gbXY4OGU2MDYwX3BoeV93cml0ZSwKLQkucG9sbF9saW5rCT0gbXY4OGU2MDYwX3BvbGxfbGluaywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG12ODhlNjA2MF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmggYi9kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5YjJlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIGRyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuaCAtIE1hcnZlbGwgODhlNjA2MCBzd2l0Y2ggY2hpcCBzdXBwb3J0CisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTmVpbCBBcm1zdHJvbmcKKyAqCisgKiBCYXNlZCBvbiBtdjg4ZTZ4eHguaAorICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX01WODhFNjA2MF9ICisjZGVmaW5lIF9fTVY4OEU2MDYwX0gKKworI2RlZmluZSBNVjg4RTYwNjBfUE9SVFMJNgorCisjZGVmaW5lIFJFR19QT1JUKHApCQkoMHg4ICsgKHApKQorI2RlZmluZSBQT1JUX1NUQVRVUwkJMHgwMAorI2RlZmluZSBQT1JUX1NUQVRVU19QQVVTRV9FTglCSVQoMTUpCisjZGVmaW5lIFBPUlRfU1RBVFVTX01ZX1BBVVNFCUJJVCgxNCkKKyNkZWZpbmUgUE9SVF9TVEFUVVNfRkMJCShQT1JUX1NUQVRVU19NWV9QQVVTRSB8IFBPUlRfU1RBVFVTX1BBVVNFX0VOKQorI2RlZmluZSBQT1JUX1NUQVRVU19SRVNPTFZFRAlCSVQoMTMpCisjZGVmaW5lIFBPUlRfU1RBVFVTX0xJTksJQklUKDEyKQorI2RlZmluZSBQT1JUX1NUQVRVU19QT1JUTU9ERQlCSVQoMTEpCisjZGVmaW5lIFBPUlRfU1RBVFVTX1BIWU1PREUJQklUKDEwKQorI2RlZmluZSBQT1JUX1NUQVRVU19EVVBMRVgJQklUKDkpCisjZGVmaW5lIFBPUlRfU1RBVFVTX1NQRUVECUJJVCg4KQorI2RlZmluZSBQT1JUX1NXSVRDSF9JRAkJMHgwMworI2RlZmluZSBQT1JUX1NXSVRDSF9JRF82MDYwCTB4MDYwMAorI2RlZmluZSBQT1JUX1NXSVRDSF9JRF82MDYwX01BU0sJMHhmZmYwCisjZGVmaW5lIFBPUlRfU1dJVENIX0lEXzYwNjBfUjEJMHgwNjAxCisjZGVmaW5lIFBPUlRfU1dJVENIX0lEXzYwNjBfUjIJMHgwNjAyCisjZGVmaW5lIFBPUlRfQ09OVFJPTAkJMHgwNAorI2RlZmluZSBQT1JUX0NPTlRST0xfRk9SQ0VfRkxPV19DVFJMCUJJVCgxNSkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1RSQUlMRVIJQklUKDE0KQorI2RlZmluZSBQT1JUX0NPTlRST0xfSEVBREVSCUJJVCgxMSkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX0lOR1JFU1NfTU9ERQlCSVQoOCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1ZMQU5fVFVOTkVMCUJJVCg3KQorI2RlZmluZSBQT1JUX0NPTlRST0xfU1RBVEVfTUFTSwkweDAzCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9TVEFURV9ESVNBQkxFRAkweDAwCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9TVEFURV9CTE9DS0lORwkweDAxCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9TVEFURV9MRUFSTklORwkweDAyCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9TVEFURV9GT1JXQVJESU5HCTB4MDMKKyNkZWZpbmUgUE9SVF9WTEFOX01BUAkJMHgwNgorI2RlZmluZSBQT1JUX1ZMQU5fTUFQX0RCTlVNX1NISUZUCTEyCisjZGVmaW5lIFBPUlRfVkxBTl9NQVBfVEFCTEVfTUFTSwkweDFmCisjZGVmaW5lIFBPUlRfQVNTT0NfVkVDVE9SCTB4MGIKKyNkZWZpbmUgUE9SVF9BU1NPQ19WRUNUT1JfTU9OSVRPUglCSVQoMTUpCisjZGVmaW5lIFBPUlRfQVNTT0NfVkVDVE9SX1BBVl9NQVNLCTB4MWYKKyNkZWZpbmUgUE9SVF9SWF9DTlRSCQkweDEwCisjZGVmaW5lIFBPUlRfVFhfQ05UUgkJMHgxMQorCisjZGVmaW5lIFJFR19HTE9CQUwJCTB4MGYKKyNkZWZpbmUgR0xPQkFMX1NUQVRVUwkJMHgwMAorI2RlZmluZSBHTE9CQUxfU1RBVFVTX1NXX01PREVfTUFTSwkoMHgzIDw8IDEyKQorI2RlZmluZSBHTE9CQUxfU1RBVFVTX1NXX01PREVfMAkoMHgwIDw8IDEyKQorI2RlZmluZSBHTE9CQUxfU1RBVFVTX1NXX01PREVfMQkoMHgxIDw8IDEyKQorI2RlZmluZSBHTE9CQUxfU1RBVFVTX1NXX01PREVfMgkoMHgyIDw8IDEyKQorI2RlZmluZSBHTE9CQUxfU1RBVFVTX1NXX01PREVfMwkoMHgzIDw8IDEyKQorI2RlZmluZSBHTE9CQUxfU1RBVFVTX0lOSVRfUkVBRFkJQklUKDExKQorI2RlZmluZSBHTE9CQUxfU1RBVFVTX0FUVV9GVUxMCQlCSVQoMykKKyNkZWZpbmUgR0xPQkFMX1NUQVRVU19BVFVfRE9ORQkJQklUKDIpCisjZGVmaW5lIEdMT0JBTF9TVEFUVVNfUEhZX0lOVAlCSVQoMSkKKyNkZWZpbmUgR0xPQkFMX1NUQVRVU19FRUlOVAlCSVQoMCkKKyNkZWZpbmUgR0xPQkFMX01BQ18wMQkJMHgwMQorI2RlZmluZSBHTE9CQUxfTUFDXzAxX0RJRkZfQUREUglCSVQoOCkKKyNkZWZpbmUgR0xPQkFMX01BQ18yMwkJMHgwMgorI2RlZmluZSBHTE9CQUxfTUFDXzQ1CQkweDAzCisjZGVmaW5lIEdMT0JBTF9DT05UUk9MCQkweDA0CisjZGVmaW5lIEdMT0JBTF9DT05UUk9MX0RJU0NBUkRfRVhDRVNTCUJJVCgxMykKKyNkZWZpbmUgR0xPQkFMX0NPTlRST0xfTUFYX0ZSQU1FXzE1MzYJQklUKDEwKQorI2RlZmluZSBHTE9CQUxfQ09OVFJPTF9SRUxPQURfRUVQUk9NCUJJVCg5KQorI2RlZmluZSBHTE9CQUxfQ09OVFJPTF9DVFJNT0RFCQlCSVQoOCkKKyNkZWZpbmUgR0xPQkFMX0NPTlRST0xfQVRVX0ZVTExfRU4JQklUKDMpCisjZGVmaW5lIEdMT0JBTF9DT05UUk9MX0FUVV9ET05FX0VOCUJJVCgyKQorI2RlZmluZSBHTE9CQUxfQ09OVFJPTF9QSFlJTlRfRU4JQklUKDEpCisjZGVmaW5lIEdMT0JBTF9DT05UUk9MX0VFUFJPTV9ET05FX0VOCUJJVCgwKQorI2RlZmluZSBHTE9CQUxfQVRVX0NPTlRST0wJMHgwYQorI2RlZmluZSBHTE9CQUxfQVRVX0NPTlRST0xfU1dSRVNFVAlCSVQoMTUpCisjZGVmaW5lIEdMT0JBTF9BVFVfQ09OVFJPTF9MRUFSTkRJUwlCSVQoMTQpCisjZGVmaW5lIEdMT0JBTF9BVFVfQ09OVFJPTF9BVFVTSVpFXzI1NgkoMHgwIDw8IDEyKQorI2RlZmluZSBHTE9CQUxfQVRVX0NPTlRST0xfQVRVU0laRV81MTIJKDB4MSA8PCAxMikKKyNkZWZpbmUgR0xPQkFMX0FUVV9DT05UUk9MX0FUVVNJWkVfMTAyNAkoMHgyIDw8IDEyKQorI2RlZmluZSBHTE9CQUxfQVRVX0NPTlRST0xfQVRFX0FHRV9TSElGVAk0CisjZGVmaW5lIEdMT0JBTF9BVFVfQ09OVFJPTF9BVEVfQUdFX01BU0sJKDB4ZmYgPDwgNCkKKyNkZWZpbmUgR0xPQkFMX0FUVV9DT05UUk9MX0FURV9BR0VfNU1JTgkoMHgxMyA8PCA0KQorI2RlZmluZSBHTE9CQUxfQVRVX09QCQkweDBiCisjZGVmaW5lIEdMT0JBTF9BVFVfT1BfQlVTWQlCSVQoMTUpCisjZGVmaW5lIEdMT0JBTF9BVFVfT1BfTk9QCQkoMCA8PCAxMikKKyNkZWZpbmUgR0xPQkFMX0FUVV9PUF9GTFVTSF9BTEwJKCgxIDw8IDEyKSB8IEdMT0JBTF9BVFVfT1BfQlVTWSkKKyNkZWZpbmUgR0xPQkFMX0FUVV9PUF9GTFVTSF9VTkxPQ0tFRAkoKDIgPDwgMTIpIHwgR0xPQkFMX0FUVV9PUF9CVVNZKQorI2RlZmluZSBHTE9CQUxfQVRVX09QX0xPQURfREIJCSgoMyA8PCAxMikgfCBHTE9CQUxfQVRVX09QX0JVU1kpCisjZGVmaW5lIEdMT0JBTF9BVFVfT1BfR0VUX05FWFRfREIJKCg0IDw8IDEyKSB8IEdMT0JBTF9BVFVfT1BfQlVTWSkKKyNkZWZpbmUgR0xPQkFMX0FUVV9PUF9GTFVTSF9EQgkJKCg1IDw8IDEyKSB8IEdMT0JBTF9BVFVfT1BfQlVTWSkKKyNkZWZpbmUgR0xPQkFMX0FUVV9PUF9GTFVTSF9VTkxPQ0tFRF9EQiAoKDYgPDwgMTIpIHwgR0xPQkFMX0FUVV9PUF9CVVNZKQorI2RlZmluZSBHTE9CQUxfQVRVX0RBVEEJCTB4MGMKKyNkZWZpbmUgR0xPQkFMX0FUVV9EQVRBX1BPUlRfVkVDVE9SX01BU0sJMHgzZjAKKyNkZWZpbmUgR0xPQkFMX0FUVV9EQVRBX1BPUlRfVkVDVE9SX1NISUZUCTQKKyNkZWZpbmUgR0xPQkFMX0FUVV9EQVRBX1NUQVRFX01BU0sJCTB4MGYKKyNkZWZpbmUgR0xPQkFMX0FUVV9EQVRBX1NUQVRFX1VOVVNFRAkJMHgwMAorI2RlZmluZSBHTE9CQUxfQVRVX0RBVEFfU1RBVEVfVUNfU1RBVElDCQkweDBlCisjZGVmaW5lIEdMT0JBTF9BVFVfREFUQV9TVEFURV9VQ19MT0NLRUQJCTB4MGYKKyNkZWZpbmUgR0xPQkFMX0FUVV9EQVRBX1NUQVRFX01DX1NUQVRJQwkJMHgwNworI2RlZmluZSBHTE9CQUxfQVRVX0RBVEFfU1RBVEVfTUNfTE9DS0VECQkweDBlCisjZGVmaW5lIEdMT0JBTF9BVFVfTUFDXzAxCTB4MGQKKyNkZWZpbmUgR0xPQkFMX0FUVV9NQUNfMjMJMHgwZQorI2RlZmluZSBHTE9CQUxfQVRVX01BQ180NQkweDBmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcKaW5kZXggMDVhYTc1OS4uMzFjNWU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnCkBAIC0yOSw2ICsyOSw3IEBACiBzb3VyY2UgImRyaXZlcnMvbmV0L2V0aGVybmV0L2FwcGxlL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L2V0aGVybmV0L2FyYy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvbmV0L2V0aGVybmV0L2F1cm9yYS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnIgpAQCAtNzgsNyArNzksNiBAQAogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC9ldGhlcm5ldC9pODI1eHgvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvZXRoZXJuZXQveHNjYWxlL0tjb25maWciCi1zb3VyY2UgImRyaXZlcnMvbmV0L2V0aGVybmV0L2ljcGx1cy9LY29uZmlnIgogCiBjb25maWcgSk1FCiAJdHJpc3RhdGUgIkpNaWNyb24oUikgUENJLUV4cHJlc3MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQppbmRleCBkZGZjODA4Li4wNzFmODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQAogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfQVBQTEUpICs9IGFwcGxlLwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfQVJDKSArPSBhcmMvCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9BVEhFUk9TKSArPSBhdGhlcm9zLworb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfQVVST1JBKSArPSBhdXJvcmEvCiBvYmotJChDT05GSUdfTkVUX0NBREVOQ0UpICs9IGNhZGVuY2UvCiBvYmotJChDT05GSUdfTkVUX0JGSU4pICs9IGFkaS8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NKSArPSBicm9hZGNvbS8KQEAgLTQxLDcgKzQyLDYgQEAKIG9iai0kKENPTkZJR19ORVRfVkVORE9SX0lOVEVMKSArPSBpbnRlbC8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX0k4MjVYWCkgKz0gaTgyNXh4Lwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWFNDQUxFKSArPSB4c2NhbGUvCi1vYmotJChDT05GSUdfSVAxMDAwKSArPSBpY3BsdXMvCiBvYmotJChDT05GSUdfSk1FKSArPSBqbWUubwogb2JqLSQoQ09ORklHX0tPUklOQSkgKz0ga29yaW5hLm8KIG9iai0kKENPTkZJR19MQU5USVFfRVRPUCkgKz0gbGFudGlxX2V0b3AubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmMKaW5kZXggZTJhZmFiZi4uN2NjZWJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jCkBAIC0xNTAwLDEwICsxNTAwLDExIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBQQ05FVDMyX0RNQV9NQVNLKSkgeworCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgUENORVQzMl9ETUFfTUFTSyk7CisJaWYgKGVycikgewogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKIAkJCXByX2VycigiYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgMzJiaXQgUENJIGJ1c21hc3RlciBETUFcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2FkZHIsIFBDTkVUMzJfVE9UQUxfU0laRSwgInBjbmV0MzJfcHJvYmVfcGNpIikpIHsKIAkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kZXYuYwppbmRleCA5NzA3ODFhLi5mNmE3MTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZGV2LmMKQEAgLTE4NDksNyArMTg0OSw3IEBACiAJdXNsZWVwX3JhbmdlKDEwLCAxNSk7CiAKIAkvKiBQb2xsIFVudGlsIFBvbGwgQ29uZGl0aW9uICovCi0Jd2hpbGUgKGNvdW50LS0gJiYgWEdNQUNfSU9SRUFEX0JJVFMocGRhdGEsIERNQV9NUiwgU1dSKSkKKwl3aGlsZSAoLS1jb3VudCAmJiBYR01BQ19JT1JFQURfQklUUyhwZGF0YSwgRE1BX01SLCBTV1IpKQogCQl1c2xlZXBfcmFuZ2UoNTAwLCA2MDApOwogCiAJaWYgKCFjb3VudCkKQEAgLTE4NzMsNyArMTg3Myw3IEBACiAJLyogUG9sbCBVbnRpbCBQb2xsIENvbmRpdGlvbiAqLwogCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+dHhfcV9jb3VudDsgaSsrKSB7CiAJCWNvdW50ID0gMjAwMDsKLQkJd2hpbGUgKGNvdW50LS0gJiYgWEdNQUNfTVRMX0lPUkVBRF9CSVRTKHBkYXRhLCBpLAorCQl3aGlsZSAoLS1jb3VudCAmJiBYR01BQ19NVExfSU9SRUFEX0JJVFMocGRhdGEsIGksCiAJCQkJCQkJTVRMX1FfVFFPTVIsIEZUUSkpCiAJCQl1c2xlZXBfcmFuZ2UoNTAwLCA2MDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMKaW5kZXggOTkxNDEyYy4uZDBhZTFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYwpAQCAtMjg5LDYgKzI4OSw3IEBACiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gbmRldl90b19kZXYodHhfcmluZy0+bmRldik7CisJc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYodHhfcmluZy0+bmRldik7CiAJc3RydWN0IHhnZW5lX2VuZXRfcmF3X2Rlc2MgKnJhd19kZXNjOwogCV9fbGU2NCAqZXhwX2Rlc2MgPSBOVUxMLCAqZXhwX2J1ZnMgPSBOVUxMOwogCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHBidWZfYWRkciwgKmZyYWdfZG1hX2FkZHI7CkBAIC00MTksNiArNDIwLDcgQEAKIAlyYXdfZGVzYy0+bTAgPSBjcHVfdG9fbGU2NChTRVRfVkFMKExMLCBsbCkgfCBTRVRfVkFMKE5WLCBudikgfAogCQkJCSAgIFNFVF9WQUwoVVNFUklORk8sIHR4X3JpbmctPnRhaWwpKTsKIAl0eF9yaW5nLT5jcF9yaW5nLT5jcF9za2JbdHhfcmluZy0+dGFpbF0gPSBza2I7CisJcGRhdGEtPnR4X2xldmVsICs9IGNvdW50OwogCXR4X3JpbmctPnRhaWwgPSB0YWlsOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtNDI5LDE0ICs0MzEsMTMgQEAKIHsKIAlzdHJ1Y3QgeGdlbmVfZW5ldF9wZGF0YSAqcGRhdGEgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgeGdlbmVfZW5ldF9kZXNjX3JpbmcgKnR4X3JpbmcgPSBwZGF0YS0+dHhfcmluZzsKLQlzdHJ1Y3QgeGdlbmVfZW5ldF9kZXNjX3JpbmcgKmNwX3JpbmcgPSB0eF9yaW5nLT5jcF9yaW5nOwotCXUzMiB0eF9sZXZlbCwgY3FfbGV2ZWw7CisJdTMyIHR4X2xldmVsID0gcGRhdGEtPnR4X2xldmVsOwogCWludCBjb3VudDsKIAotCXR4X2xldmVsID0gcGRhdGEtPnJpbmdfb3BzLT5sZW4odHhfcmluZyk7Ci0JY3FfbGV2ZWwgPSBwZGF0YS0+cmluZ19vcHMtPmxlbihjcF9yaW5nKTsKLQlpZiAodW5saWtlbHkodHhfbGV2ZWwgPiBwZGF0YS0+dHhfcWNudF9oaSB8fAotCQkgICAgIGNxX2xldmVsID4gcGRhdGEtPmNwX3FjbnRfaGkpKSB7CisJaWYgKHR4X2xldmVsIDwgcGRhdGEtPnR4Y19sZXZlbCkKKwkJdHhfbGV2ZWwgKz0gKCh0eXBlb2YocGRhdGEtPnR4X2xldmVsKSl+MFUpOworCisJaWYgKCh0eF9sZXZlbCAtIHBkYXRhLT50eGNfbGV2ZWwpID4gcGRhdGEtPnR4X3FjbnRfaGkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTQ1MCwxMiArNDUxLDEyIEBACiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCi0JcGRhdGEtPnJpbmdfb3BzLT53cl9jbWQodHhfcmluZywgY291bnQpOwogCXNrYl90eF90aW1lc3RhbXAoc2tiKTsKIAogCXBkYXRhLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJcGRhdGEtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCisJcGRhdGEtPnJpbmdfb3BzLT53cl9jbWQodHhfcmluZywgY291bnQpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTUzOSwxMCArNTQwLDEzIEBACiAJc3RydWN0IHhnZW5lX2VuZXRfcmF3X2Rlc2MgKnJhd19kZXNjLCAqZXhwX2Rlc2M7CiAJdTE2IGhlYWQgPSByaW5nLT5oZWFkOwogCXUxNiBzbG90cyA9IHJpbmctPnNsb3RzIC0gMTsKLQlpbnQgcmV0LCBjb3VudCA9IDAsIHByb2Nlc3NlZCA9IDA7CisJaW50IHJldCwgZGVzY19jb3VudCwgY291bnQgPSAwLCBwcm9jZXNzZWQgPSAwOworCWJvb2wgaXNfY29tcGxldGlvbjsKIAogCWRvIHsKIAkJcmF3X2Rlc2MgPSAmcmluZy0+cmF3X2Rlc2NbaGVhZF07CisJCWRlc2NfY291bnQgPSAwOworCQlpc19jb21wbGV0aW9uID0gZmFsc2U7CiAJCWV4cF9kZXNjID0gTlVMTDsKIAkJaWYgKHVubGlrZWx5KHhnZW5lX2VuZXRfaXNfZGVzY19zbG90X2VtcHR5KHJhd19kZXNjKSkpCiAJCQlicmVhazsKQEAgLTU1OSwxOCArNTYzLDI0IEBACiAJCQl9CiAJCQlkbWFfcm1iKCk7CiAJCQljb3VudCsrOworCQkJZGVzY19jb3VudCsrOwogCQl9Ci0JCWlmIChpc19yeF9kZXNjKHJhd19kZXNjKSkKKwkJaWYgKGlzX3J4X2Rlc2MocmF3X2Rlc2MpKSB7CiAJCQlyZXQgPSB4Z2VuZV9lbmV0X3J4X2ZyYW1lKHJpbmcsIHJhd19kZXNjKTsKLQkJZWxzZQorCQl9IGVsc2UgewogCQkJcmV0ID0geGdlbmVfZW5ldF90eF9jb21wbGV0aW9uKHJpbmcsIHJhd19kZXNjKTsKKwkJCWlzX2NvbXBsZXRpb24gPSB0cnVlOworCQl9CiAJCXhnZW5lX2VuZXRfbWFya19kZXNjX3Nsb3RfZW1wdHkocmF3X2Rlc2MpOwogCQlpZiAoZXhwX2Rlc2MpCiAJCQl4Z2VuZV9lbmV0X21hcmtfZGVzY19zbG90X2VtcHR5KGV4cF9kZXNjKTsKIAogCQloZWFkID0gKGhlYWQgKyAxKSAmIHNsb3RzOwogCQljb3VudCsrOworCQlkZXNjX2NvdW50Kys7CiAJCXByb2Nlc3NlZCsrOworCQlpZiAoaXNfY29tcGxldGlvbikKKwkJCXBkYXRhLT50eGNfbGV2ZWwgKz0gZGVzY19jb3VudDsKIAogCQlpZiAocmV0KQogCQkJYnJlYWs7CkBAIC01ODAsMTAgKzU5MCw4IEBACiAJCXBkYXRhLT5yaW5nX29wcy0+d3JfY21kKHJpbmcsIC1jb3VudCk7CiAJCXJpbmctPmhlYWQgPSBoZWFkOwogCi0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHJpbmctPm5kZXYpKSB7Ci0JCQlpZiAocGRhdGEtPnJpbmdfb3BzLT5sZW4ocmluZykgPCBwZGF0YS0+Y3BfcWNudF9sb3cpCi0JCQkJbmV0aWZfd2FrZV9xdWV1ZShyaW5nLT5uZGV2KTsKLQkJfQorCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChyaW5nLT5uZGV2KSkKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKHJpbmctPm5kZXYpOwogCX0KIAogCXJldHVybiBwcm9jZXNzZWQ7CkBAIC02ODgsMTAgKzY5NiwxMCBAQAogCW1hY19vcHMtPnR4X2VuYWJsZShwZGF0YSk7CiAJbWFjX29wcy0+cnhfZW5hYmxlKHBkYXRhKTsKIAorCXhnZW5lX2VuZXRfbmFwaV9lbmFibGUocGRhdGEpOwogCXJldCA9IHhnZW5lX2VuZXRfcmVnaXN0ZXJfaXJxKG5kZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0JeGdlbmVfZW5ldF9uYXBpX2VuYWJsZShwZGF0YSk7CiAKIAlpZiAocGRhdGEtPnBoeV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSSkKIAkJcGh5X3N0YXJ0KHBkYXRhLT5waHlfZGV2KTsKQEAgLTcxNSwxMyArNzIzLDEzIEBACiAJZWxzZQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnBkYXRhLT5saW5rX3dvcmspOwogCi0JeGdlbmVfZW5ldF9uYXBpX2Rpc2FibGUocGRhdGEpOwotCXhnZW5lX2VuZXRfZnJlZV9pcnEobmRldik7Ci0JeGdlbmVfZW5ldF9wcm9jZXNzX3JpbmcocGRhdGEtPnJ4X3JpbmcsIC0xKTsKLQogCW1hY19vcHMtPnR4X2Rpc2FibGUocGRhdGEpOwogCW1hY19vcHMtPnJ4X2Rpc2FibGUocGRhdGEpOwogCisJeGdlbmVfZW5ldF9mcmVlX2lycShuZGV2KTsKKwl4Z2VuZV9lbmV0X25hcGlfZGlzYWJsZShwZGF0YSk7CisJeGdlbmVfZW5ldF9wcm9jZXNzX3JpbmcocGRhdGEtPnJ4X3JpbmcsIC0xKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDMzLDkgKzEwNDEsNyBAQAogCXBkYXRhLT50eF9yaW5nLT5jcF9yaW5nID0gY3BfcmluZzsKIAlwZGF0YS0+dHhfcmluZy0+ZHN0X3JpbmdfbnVtID0geGdlbmVfZW5ldF9kc3RfcmluZ19udW0oY3BfcmluZyk7CiAKLQlwZGF0YS0+dHhfcWNudF9oaSA9IHBkYXRhLT50eF9yaW5nLT5zbG90cyAvIDI7Ci0JcGRhdGEtPmNwX3FjbnRfaGkgPSBwZGF0YS0+cnhfcmluZy0+c2xvdHMgLyAyOwotCXBkYXRhLT5jcF9xY250X2xvdyA9IHBkYXRhLT5jcF9xY250X2hpIC8gMjsKKwlwZGF0YS0+dHhfcWNudF9oaSA9IHBkYXRhLT50eF9yaW5nLT5zbG90cyAtIDEyODsKIAogCXJldHVybiAwOwogCkBAIC0xNDc0LDMwICsxNDgwLDMzIEBACiAJfQogCW5kZXYtPmh3X2ZlYXR1cmVzID0gbmRldi0+ZmVhdHVyZXM7CiAKLQlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7Ci0JaWYgKHJldCkgewotCQluZXRkZXZfZXJyKG5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2XG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJcmV0ID0gZG1hX2NvZXJjZV9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSyg2NCkpOwogCWlmIChyZXQpIHsKIAkJbmV0ZGV2X2VycihuZGV2LCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWlmIChyZXQpIHsKKwkJbmV0ZGV2X2VycihuZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG5ldGRldlxuIik7CisJCWdvdG8gZXJyOworCX0KKwogCXJldCA9IHhnZW5lX2VuZXRfaW5pdF9odyhwZGF0YSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQl4Z2VuZV9lbmV0X25hcGlfYWRkKHBkYXRhKTsKIAltYWNfb3BzID0gcGRhdGEtPm1hY19vcHM7Ci0JaWYgKHBkYXRhLT5waHlfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUkpCisJaWYgKHBkYXRhLT5waHlfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUkpIHsKIAkJcmV0ID0geGdlbmVfZW5ldF9tZGlvX2NvbmZpZyhwZGF0YSk7Ci0JZWxzZQorCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfSBlbHNlIHsKIAkJSU5JVF9ERUxBWUVEX1dPUksoJnBkYXRhLT5saW5rX3dvcmssIG1hY19vcHMtPmxpbmtfc3RhdGUpOworCX0KIAotCXJldHVybiByZXQ7CisJeGdlbmVfZW5ldF9uYXBpX2FkZChwZGF0YSk7CisJcmV0dXJuIDA7CiBlcnI6CiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJZnJlZV9uZXRkZXYobmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmgKaW5kZXggYTZlNTZiOC4uMWFhNzJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uaApAQCAtMTU1LDExICsxNTUsMTEgQEAKIAllbnVtIHhnZW5lX2VuZXRfaWQgZW5ldF9pZDsKIAlzdHJ1Y3QgeGdlbmVfZW5ldF9kZXNjX3JpbmcgKnR4X3Jpbmc7CiAJc3RydWN0IHhnZW5lX2VuZXRfZGVzY19yaW5nICpyeF9yaW5nOworCXUxNiB0eF9sZXZlbDsKKwl1MTYgdHhjX2xldmVsOwogCWNoYXIgKmRldl9uYW1lOwogCXUzMiByeF9idWZmX2NudDsKIAl1MzIgdHhfcWNudF9oaTsKLQl1MzIgY3BfcWNudF9oaTsKLQl1MzIgY3BfcWNudF9sb3c7CiAJdTMyIHJ4X2lycTsKIAl1MzIgdHhjX2lycTsKIAl1OCBjcV9jbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FseC9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FseC9tYWluLmMKaW5kZXggYzhhZjNjZS4uYmQzNzdhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hbHgvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWx4L21haW4uYwpAQCAtMTUzNCw2ICsxNTM0LDggQEAKIAkgIC5kcml2ZXJfZGF0YSA9IEFMWF9ERVZfUVVJUktfTVNJX0lOVFhfRElTQUJMRV9CVUcgfSwKIAl7IFBDSV9WREVWSUNFKEFUVEFOU0lDLCBBTFhfREVWX0lEX0UyMjAwKSwKIAkgIC5kcml2ZXJfZGF0YSA9IEFMWF9ERVZfUVVJUktfTVNJX0lOVFhfRElTQUJMRV9CVUcgfSwKKwl7IFBDSV9WREVWSUNFKEFUVEFOU0lDLCBBTFhfREVWX0lEX0UyNDAwKSwKKwkgIC5kcml2ZXJfZGF0YSA9IEFMWF9ERVZfUVVJUktfTVNJX0lOVFhfRElTQUJMRV9CVUcgfSwKIAl7IFBDSV9WREVWSUNFKEFUVEFOU0lDLCBBTFhfREVWX0lEX0FSODE2MiksCiAJICAuZHJpdmVyX2RhdGEgPSBBTFhfREVWX1FVSVJLX01TSV9JTlRYX0RJU0FCTEVfQlVHIH0sCiAJeyBQQ0lfVkRFVklDRShBVFRBTlNJQywgQUxYX0RFVl9JRF9BUjgxNzEpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2FseC9yZWcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWx4L3JlZy5oCmluZGV4IGFmMDA2YjQuLjA5NTllNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWx4L3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYWx4L3JlZy5oCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQUxYX0RFVl9JRF9BUjgxNjEJCQkJMHgxMDkxCiAjZGVmaW5lIEFMWF9ERVZfSURfRTIyMDAJCQkJMHhlMDkxCisjZGVmaW5lIEFMWF9ERVZfSURfRTI0MDAJCQkJMHhlMGExCiAjZGVmaW5lIEFMWF9ERVZfSURfQVI4MTYyCQkJCTB4MTA5MAogI2RlZmluZSBBTFhfREVWX0lEX0FSODE3MQkJCQkweDEwQTEKICNkZWZpbmUgQUxYX0RFVl9JRF9BUjgxNzIJCQkJMHgxMEEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jCmluZGV4IDI3OTVkNmQuLjhiNTk4OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC0xMDE2LDEzICsxMDE2LDEyIEBACiAJCXNpemVvZihzdHJ1Y3QgYXRsMWNfcmVjdl9yZXRfc3RhdHVzKSAqIHJ4X2Rlc2NfY291bnQgKwogCQk4ICogNDsKIAotCXJpbmdfaGVhZGVyLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgcmluZ19oZWFkZXItPnNpemUsCi0JCQkJJnJpbmdfaGVhZGVyLT5kbWEpOworCXJpbmdfaGVhZGVyLT5kZXNjID0gZG1hX3phbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCByaW5nX2hlYWRlci0+c2l6ZSwKKwkJCQkJCSZyaW5nX2hlYWRlci0+ZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIXJpbmdfaGVhZGVyLT5kZXNjKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfYWxsb2NfY29uc2lzdGVuZCBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IG1lbW9yeSBmb3IgRE1BIGJ1ZmZlclxuIik7CiAJCWdvdG8gZXJyX25vbWVtOwogCX0KLQltZW1zZXQocmluZ19oZWFkZXItPmRlc2MsIDAsIHJpbmdfaGVhZGVyLT5zaXplKTsKIAkvKiBpbml0IFRQRCByaW5nICovCiAKIAl0cGRfcmluZ1swXS5kbWEgPSByb3VuZHVwKHJpbmdfaGVhZGVyLT5kbWEsIDgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXVyb3JhL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdXJvcmEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE3ZjhmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXVyb3JhL0tjb25maWcKQEAgLTAsMCArMSwyMSBAQAorY29uZmlnIE5FVF9WRU5ET1JfQVVST1JBCisJYm9vbCAiQXVyb3JhIFZMU0kgZGV2aWNlcyIKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBkZXZpY2UgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsCisJICBzYXkgWS4KKworCSAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGUKKwkgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwKKwkgIHF1ZXN0aW9ucyBhYm91dCBBdXJvcmEgZGV2aWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZAorCSAgZm9yIHlvdXIgc3BlY2lmaWMgZGV2aWNlIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLgorCitpZiBORVRfVkVORE9SX0FVUk9SQQorCitjb25maWcgQVVST1JBX05CODgwMAorCXRyaXN0YXRlICJBdXJvcmEgQVUtTkI4ODAwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIQVNfRE1BCisJc2VsZWN0IFBIWUxJQgorCWhlbHAKKwkgU3VwcG9ydCBmb3IgdGhlIEFVLU5CODgwMCBnaWdhYml0IEV0aGVybmV0IGNvbnRyb2xsZXIuCisKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdXJvcmEvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdXJvcmEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiNTI4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F1cm9yYS9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfQVVST1JBX05CODgwMCkgKz0gbmI4ODAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F1cm9yYS9uYjg4MDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F1cm9yYS9uYjg4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2M0YTMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXVyb3JhL25iODgwMC5jCkBAIC0wLDAgKzEsMTU1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBNYW5zIFJ1bGxnYXJkIDxtYW5zQG1hbnNyLmNvbT4KKyAqCisgKiBNb3N0bHkgcmV3cml0dGVuLCBiYXNlZCBvbiBkcml2ZXIgZnJvbSBTaWdtYSBEZXNpZ25zLiAgT3JpZ2luYWwKKyAqIGNvcHlyaWdodCBub3RpY2UgYmVsb3cuCisgKgorICoKKyAqIERyaXZlciBmb3IgdGFuZ294IFNNUDg2NHgvU01QODY1eC9TTVA4Njd4L1NNUDg2OHggYnVpbHRpbiBFdGhlcm5ldCBNYWMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX21kaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8YXNtL2JhcnJpZXIuaD4KKworI2luY2x1ZGUgIm5iODgwMC5oIgorCitzdGF0aWMgdm9pZCBuYjg4MDBfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgbmI4ODAwX2RtYV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitzdGF0aWMgaW5saW5lIHU4IG5iODgwMF9yZWFkYihzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYsIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRiX3JlbGF4ZWQocHJpdi0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG5iODgwMF9yZWFkbChzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYsIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRsX3JlbGF4ZWQocHJpdi0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYjg4MDBfd3JpdGViKHN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiwgaW50IHJlZywgdTggdmFsKQoreworCXdyaXRlYl9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYjg4MDBfd3JpdGV3KHN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiwgaW50IHJlZywgdTE2IHZhbCkKK3sKKwl3cml0ZXdfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmI4ODAwX3dyaXRlbChzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYsIGludCByZWcsIHUzMiB2YWwpCit7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwcml2LT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5iODgwMF9tYXNrYihzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYsIGludCByZWcsCisJCQkJdTMyIG1hc2ssIHUzMiB2YWwpCit7CisJdTMyIG9sZCA9IG5iODgwMF9yZWFkYihwcml2LCByZWcpOworCXUzMiBuZXcgPSAob2xkICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCisJaWYgKG5ldyAhPSBvbGQpCisJCW5iODgwMF93cml0ZWIocHJpdiwgcmVnLCBuZXcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmI4ODAwX21hc2tsKHN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiwgaW50IHJlZywKKwkJCQl1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwl1MzIgb2xkID0gbmI4ODAwX3JlYWRsKHByaXYsIHJlZyk7CisJdTMyIG5ldyA9IChvbGQgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisKKwlpZiAobmV3ICE9IG9sZCkKKwkJbmI4ODAwX3dyaXRlbChwcml2LCByZWcsIG5ldyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYjg4MDBfbW9kYihzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYsIGludCByZWcsIHU4IGJpdHMsCisJCQkgICAgICAgYm9vbCBzZXQpCit7CisJbmI4ODAwX21hc2tiKHByaXYsIHJlZywgYml0cywgc2V0ID8gYml0cyA6IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmI4ODAwX3NldGIoc3RydWN0IG5iODgwMF9wcml2ICpwcml2LCBpbnQgcmVnLCB1OCBiaXRzKQoreworCW5iODgwMF9tYXNrYihwcml2LCByZWcsIGJpdHMsIGJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmI4ODAwX2NsZWFyYihzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYsIGludCByZWcsIHU4IGJpdHMpCit7CisJbmI4ODAwX21hc2tiKHByaXYsIHJlZywgYml0cywgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYjg4MDBfbW9kbChzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYsIGludCByZWcsIHUzMiBiaXRzLAorCQkJICAgICAgIGJvb2wgc2V0KQoreworCW5iODgwMF9tYXNrbChwcml2LCByZWcsIGJpdHMsIHNldCA/IGJpdHMgOiAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5iODgwMF9zZXRsKHN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiwgaW50IHJlZywgdTMyIGJpdHMpCit7CisJbmI4ODAwX21hc2tsKHByaXYsIHJlZywgYml0cywgYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYjg4MDBfY2xlYXJsKHN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiwgaW50IHJlZywgdTMyIGJpdHMpCit7CisJbmI4ODAwX21hc2tsKHByaXYsIHJlZywgYml0cywgMCk7Cit9CisKK3N0YXRpYyBpbnQgbmI4ODAwX21kaW9fd2FpdChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IGJ1cy0+cHJpdjsKKwl1MzIgdmFsOworCisJcmV0dXJuIHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMocHJpdi0+YmFzZSArIE5CODgwMF9NRElPX0NNRCwKKwkJCQkJIHZhbCwgISh2YWwgJiBNRElPX0NNRF9HTyksIDEsIDEwMDApOworfQorCitzdGF0aWMgaW50IG5iODgwMF9tZGlvX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kKQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IGJ1cy0+cHJpdjsKKwlpbnQgZXJyOworCisJZXJyID0gbmI4ODAwX21kaW9fd2FpdChidXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwluYjg4MDBfd3JpdGVsKHByaXYsIE5CODgwMF9NRElPX0NNRCwgY21kKTsKKwl1ZGVsYXkoMTApOworCW5iODgwMF93cml0ZWwocHJpdiwgTkI4ODAwX01ESU9fQ01ELCBjbWQgfCBNRElPX0NNRF9HTyk7CisKKwlyZXR1cm4gbmI4ODAwX21kaW9fd2FpdChidXMpOworfQorCitzdGF0aWMgaW50IG5iODgwMF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBidXMtPnByaXY7CisJdTMyIHZhbDsKKwlpbnQgZXJyOworCisJZXJyID0gbmI4ODAwX21kaW9fY21kKGJ1cywgTURJT19DTURfQUREUihwaHlfaWQpIHwgTURJT19DTURfUkVHKHJlZykpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl2YWwgPSBuYjg4MDBfcmVhZGwocHJpdiwgTkI4ODAwX01ESU9fU1RTKTsKKwlpZiAodmFsICYgTURJT19TVFNfRVJSKQorCQlyZXR1cm4gMHhmZmZmOworCisJcmV0dXJuIHZhbCAmIDB4ZmZmZjsKK30KKworc3RhdGljIGludCBuYjg4MDBfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnLCB1MTYgdmFsKQoreworCXUzMiBjbWQgPSBNRElPX0NNRF9BRERSKHBoeV9pZCkgfCBNRElPX0NNRF9SRUcocmVnKSB8CisJCU1ESU9fQ01EX0RBVEEodmFsKSB8IE1ESU9fQ01EX1dSOworCisJcmV0dXJuIG5iODgwMF9tZGlvX2NtZChidXMsIGNtZCk7Cit9CisKK3N0YXRpYyB2b2lkIG5iODgwMF9tYWNfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG5iODgwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXdoaWxlIChuYjg4MDBfcmVhZGwocHJpdiwgTkI4ODAwX1RYQ19DUikgJiBUQ1JfRU4pCisJCWNwdV9yZWxheCgpOworCisJbmI4ODAwX21vZGIocHJpdiwgTkI4ODAwX1RYX0NUTDEsIFRYX0VOLCBlbmFibGUpOworfQorCitzdGF0aWMgdm9pZCBuYjg4MDBfbWFjX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQoreworCW5iODgwMF9tb2RiKG5ldGRldl9wcml2KGRldiksIE5CODgwMF9SWF9DVEwsIFJYX0VOLCBlbmFibGUpOworfQorCitzdGF0aWMgdm9pZCBuYjg4MDBfbWFjX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQoreworCW5iODgwMF9tb2RiKG5ldGRldl9wcml2KGRldiksIE5CODgwMF9SWF9DVEwsIFJYX0FGX0VOLCBlbmFibGUpOworfQorCitzdGF0aWMgdm9pZCBuYjg4MDBfc3RhcnRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwluYjg4MDBfc2V0bChuZXRkZXZfcHJpdihkZXYpLCBOQjg4MDBfUlhDX0NSLCBSQ1JfRU4pOworfQorCitzdGF0aWMgaW50IG5iODgwMF9hbGxvY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaSwgYm9vbCBuYXBpKQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5iODgwMF9yeF9kZXNjICpyeGQgPSAmcHJpdi0+cnhfZGVzY3NbaV07CisJc3RydWN0IG5iODgwMF9yeF9idWYgKnJ4YiA9ICZwcml2LT5yeF9idWZzW2ldOworCWludCBzaXplID0gTDFfQ0FDSEVfQUxJR04oUlhfQlVGX1NJWkUpOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdm9pZCAqZGF0YTsKKworCWRhdGEgPSBuYXBpID8gbmFwaV9hbGxvY19mcmFnKHNpemUpIDogbmV0ZGV2X2FsbG9jX2ZyYWcoc2l6ZSk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZShkYXRhKTsKKwlvZmZzZXQgPSBkYXRhIC0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCisJZG1hX2FkZHIgPSBkbWFfbWFwX3BhZ2UoJmRldi0+ZGV2LCBwYWdlLCBvZmZzZXQsIFJYX0JVRl9TSVpFLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmRldi0+ZGV2LCBkbWFfYWRkcikpIHsKKwkJc2tiX2ZyZWVfZnJhZyhkYXRhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcnhiLT5wYWdlID0gcGFnZTsKKwlyeGItPm9mZnNldCA9IG9mZnNldDsKKwlyeGQtPmRlc2Muc19hZGRyID0gZG1hX2FkZHI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmI4ODAwX3JlY2VpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGksCisJCQkgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5iODgwMF9yeF9kZXNjICpyeGQgPSAmcHJpdi0+cnhfZGVzY3NbaV07CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwcml2LT5yeF9idWZzW2ldLnBhZ2U7CisJaW50IG9mZnNldCA9IHByaXYtPnJ4X2J1ZnNbaV0ub2Zmc2V0OworCXZvaWQgKmRhdGEgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CisJZG1hX2FkZHJfdCBkbWEgPSByeGQtPmRlc2Muc19hZGRyOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IHNpemU7CisJaW50IGVycjsKKworCXNpemUgPSBsZW4gPD0gUlhfQ09QWUJSRUFLID8gbGVuIDogUlhfQ09QWUhEUjsKKworCXNrYiA9IG5hcGlfYWxsb2Nfc2tiKCZwcml2LT5uYXBpLCBzaXplKTsKKwlpZiAoIXNrYikgeworCQluZXRkZXZfZXJyKGRldiwgInJ4IHNrYiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlyZXR1cm47CisJfQorCisJaWYgKGxlbiA8PSBSWF9DT1BZQlJFQUspIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJmRldi0+ZGV2LCBkbWEsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBkYXRhLCBsZW4pOworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgmZGV2LT5kZXYsIGRtYSwgbGVuLAorCQkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOworCX0gZWxzZSB7CisJCWVyciA9IG5iODgwMF9hbGxvY19yeChkZXYsIGksIHRydWUpOworCQlpZiAoZXJyKSB7CisJCQluZXRkZXZfZXJyKGRldiwgInJ4IGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCXJldHVybjsKKwkJfQorCisJCWRtYV91bm1hcF9wYWdlKCZkZXYtPmRldiwgZG1hLCBSWF9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBSWF9DT1BZSERSKSwgZGF0YSwgUlhfQ09QWUhEUik7CisJCXNrYl9hZGRfcnhfZnJhZyhza2IsIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MsIHBhZ2UsCisJCQkJb2Zmc2V0ICsgUlhfQ09QWUhEUiwgbGVuIC0gUlhfQ09QWUhEUiwKKwkJCQlSWF9CVUZfU0laRSk7CisJfQorCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwluYXBpX2dyb19yZWNlaXZlKCZwcml2LT5uYXBpLCBza2IpOworfQorCitzdGF0aWMgdm9pZCBuYjg4MDBfcnhfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJlcG9ydCkKK3sKKwlpZiAocmVwb3J0ICYgUlhfTEVOR1RIX0VSUikKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisKKwlpZiAocmVwb3J0ICYgUlhfRkNTX0VSUikKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisKKwlpZiAocmVwb3J0ICYgUlhfRklGT19PVkVSUlVOKQorCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisKKwlpZiAocmVwb3J0ICYgUlhfQUxJR05NRU5UX0VSUk9SKQorCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCisJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKK30KKworc3RhdGljIGludCBuYjg4MDBfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktPmRldjsKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuYjg4MDBfcnhfZGVzYyAqcnhkOworCXVuc2lnbmVkIGludCBsYXN0ID0gcHJpdi0+cnhfZW9jOworCXVuc2lnbmVkIGludCBuZXh0OworCWludCB3b3JrID0gMDsKKworCW5iODgwMF90eF9kb25lKGRldik7CisKK2FnYWluOgorCXdoaWxlICh3b3JrIDwgYnVkZ2V0KSB7CisJCXN0cnVjdCBuYjg4MDBfcnhfYnVmICpyeGI7CisJCXVuc2lnbmVkIGludCBsZW47CisKKwkJbmV4dCA9IChsYXN0ICsgMSkgJSBSWF9ERVNDX0NPVU5UOworCisJCXJ4YiA9ICZwcml2LT5yeF9idWZzW25leHRdOworCQlyeGQgPSAmcHJpdi0+cnhfZGVzY3NbbmV4dF07CisKKwkJaWYgKCFyeGQtPnJlcG9ydCkKKwkJCWJyZWFrOworCisJCWxlbiA9IFJYX0JZVEVTX1RSQU5TRkVSUkVEKHJ4ZC0+cmVwb3J0KTsKKworCQlpZiAoSVNfUlhfRVJST1IocnhkLT5yZXBvcnQpKQorCQkJbmI4ODAwX3J4X2Vycm9yKGRldiwgcnhkLT5yZXBvcnQpOworCQllbHNlCisJCQluYjg4MDBfcmVjZWl2ZShkZXYsIG5leHQsIGxlbik7CisKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOworCisJCWlmIChyeGQtPnJlcG9ydCAmIFJYX01VTFRJQ0FTVF9QS1QpCisJCQlkZXYtPnN0YXRzLm11bHRpY2FzdCsrOworCisJCXJ4ZC0+cmVwb3J0ID0gMDsKKwkJbGFzdCA9IG5leHQ7CisJCXdvcmsrKzsKKwl9CisKKwlpZiAod29yaykgeworCQlwcml2LT5yeF9kZXNjc1tsYXN0XS5kZXNjLmNvbmZpZyB8PSBERVNDX0VPQzsKKwkJd21iKCk7CS8qIGVuc3VyZSBuZXcgRU9DIGlzIHdyaXR0ZW4gYmVmb3JlIGNsZWFyaW5nIG9sZCAqLworCQlwcml2LT5yeF9kZXNjc1twcml2LT5yeF9lb2NdLmRlc2MuY29uZmlnICY9IH5ERVNDX0VPQzsKKwkJcHJpdi0+cnhfZW9jID0gbGFzdDsKKwkJbmI4ODAwX3N0YXJ0X3J4KGRldik7CisJfQorCisJaWYgKHdvcmsgPCBidWRnZXQpIHsKKwkJbmI4ODAwX3dyaXRlbChwcml2LCBOQjg4MDBfUlhfSVRSLCBwcml2LT5yeF9pdHJfaXJxKTsKKworCQkvKiBJZiBhIHBhY2tldCBhcnJpdmVkIGFmdGVyIHdlIGxhc3QgY2hlY2tlZCBidXQKKwkJICogYmVmb3JlIHdyaXRpbmcgUlhfSVRSLCB0aGUgaW50ZXJydXB0IHdpbGwgYmUKKwkJICogZGVsYXllZCwgc28gd2UgcmV0cmlldmUgaXQgbm93LgorCQkgKi8KKwkJaWYgKHByaXYtPnJ4X2Rlc2NzW25leHRdLnJlcG9ydCkKKwkJCWdvdG8gYWdhaW47CisKKwkJbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmspOworCX0KKworCXJldHVybiB3b3JrOworfQorCitzdGF0aWMgdm9pZCBfX25iODgwMF90eF9kbWFfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuYjg4MDBfdHhfYnVmICp0eGI7CisJdTMyIHR4Y19jcjsKKworCXR4YiA9ICZwcml2LT50eF9idWZzW3ByaXYtPnR4X3F1ZXVlXTsKKwlpZiAoIXR4Yi0+cmVhZHkpCisJCXJldHVybjsKKworCXR4Y19jciA9IG5iODgwMF9yZWFkbChwcml2LCBOQjg4MDBfVFhDX0NSKTsKKwlpZiAodHhjX2NyICYgVENSX0VOKQorCQlyZXR1cm47CisKKwluYjg4MDBfd3JpdGVsKHByaXYsIE5CODgwMF9UWF9ERVNDX0FERFIsIHR4Yi0+ZG1hX2Rlc2MpOworCXdtYigpOwkJLyogZW5zdXJlIGRlc2MgYWRkciBpcyB3cml0dGVuIGJlZm9yZSBzdGFydGluZyBETUEgKi8KKwluYjg4MDBfd3JpdGVsKHByaXYsIE5CODgwMF9UWENfQ1IsIHR4Y19jciB8IFRDUl9FTik7CisKKwlwcml2LT50eF9xdWV1ZSA9IChwcml2LT50eF9xdWV1ZSArIHR4Yi0+Y2hhaW5fbGVuKSAlIFRYX0RFU0NfQ09VTlQ7Cit9CisKK3N0YXRpYyB2b2lkIG5iODgwMF90eF9kbWFfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJX19uYjg4MDBfdHhfZG1hX3N0YXJ0KGRldik7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbmI4ODAwX3R4X2RtYV9zdGFydF9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrKCZwcml2LT50eF9sb2NrKTsKKwlfX25iODgwMF90eF9kbWFfc3RhcnQoZGV2KTsKKwlzcGluX3VubG9jaygmcHJpdi0+dHhfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgbmI4ODAwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuYjg4MDBfdHhfZGVzYyAqdHhkOworCXN0cnVjdCBuYjg4MDBfdHhfYnVmICp0eGI7CisJc3RydWN0IG5iODgwMF9kbWFfZGVzYyAqZGVzYzsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXVuc2lnbmVkIGludCBkbWFfbGVuOworCXVuc2lnbmVkIGludCBhbGlnbjsKKwl1bnNpZ25lZCBpbnQgbmV4dDsKKworCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+dHhfZnJlZSkgPD0gTkI4ODAwX0RFU0NfTE9XKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWFsaWduID0gKDggLSAodWludHB0cl90KXNrYi0+ZGF0YSkgJiA3OworCisJZG1hX2xlbiA9IHNrYi0+bGVuIC0gYWxpZ247CisJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSArIGFsaWduLAorCQkJCSAgZG1hX2xlbiwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmRldi0+ZGV2LCBkbWFfYWRkcikpIHsKKwkJbmV0ZGV2X2VycihkZXYsICJ0eCBkbWEgbWFwcGluZyBlcnJvclxuIik7CisJCWtmcmVlX3NrYihza2IpOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnByaXYtPnR4X2ZyZWUpIDw9IE5CODgwMF9ERVNDX0xPVykgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXNrYi0+eG1pdF9tb3JlID0gMDsKKwl9CisKKwluZXh0ID0gcHJpdi0+dHhfbmV4dDsKKwl0eGIgPSAmcHJpdi0+dHhfYnVmc1tuZXh0XTsKKwl0eGQgPSAmcHJpdi0+dHhfZGVzY3NbbmV4dF07CisJZGVzYyA9ICZ0eGQtPmRlc2NbMF07CisKKwluZXh0ID0gKG5leHQgKyAxKSAlIFRYX0RFU0NfQ09VTlQ7CisKKwlpZiAoYWxpZ24pIHsKKwkJbWVtY3B5KHR4ZC0+YnVmLCBza2ItPmRhdGEsIGFsaWduKTsKKworCQlkZXNjLT5zX2FkZHIgPQorCQkJdHhiLT5kbWFfZGVzYyArIG9mZnNldG9mKHN0cnVjdCBuYjg4MDBfdHhfZGVzYywgYnVmKTsKKwkJZGVzYy0+bl9hZGRyID0gdHhiLT5kbWFfZGVzYyArIHNpemVvZih0eGQtPmRlc2NbMF0pOworCQlkZXNjLT5jb25maWcgPSBERVNDX0JUUygyKSB8IERFU0NfRFMgfCBhbGlnbjsKKworCQlkZXNjKys7CisJfQorCisJZGVzYy0+c19hZGRyID0gZG1hX2FkZHI7CisJZGVzYy0+bl9hZGRyID0gcHJpdi0+dHhfYnVmc1tuZXh0XS5kbWFfZGVzYzsKKwlkZXNjLT5jb25maWcgPSBERVNDX0JUUygyKSB8IERFU0NfRFMgfCBERVNDX0VPRiB8IGRtYV9sZW47CisKKwlpZiAoIXNrYi0+eG1pdF9tb3JlKQorCQlkZXNjLT5jb25maWcgfD0gREVTQ19FT0M7CisKKwl0eGItPnNrYiA9IHNrYjsKKwl0eGItPmRtYV9hZGRyID0gZG1hX2FkZHI7CisJdHhiLT5kbWFfbGVuID0gZG1hX2xlbjsKKworCWlmICghcHJpdi0+dHhfY2hhaW4pIHsKKwkJdHhiLT5jaGFpbl9sZW4gPSAxOworCQlwcml2LT50eF9jaGFpbiA9IHR4YjsKKwl9IGVsc2UgeworCQlwcml2LT50eF9jaGFpbi0+Y2hhaW5fbGVuKys7CisJfQorCisJbmV0ZGV2X3NlbnRfcXVldWUoZGV2LCBza2ItPmxlbik7CisKKwlwcml2LT50eF9uZXh0ID0gbmV4dDsKKworCWlmICghc2tiLT54bWl0X21vcmUpIHsKKwkJc21wX3dtYigpOworCQlwcml2LT50eF9jaGFpbi0+cmVhZHkgPSB0cnVlOworCQlwcml2LT50eF9jaGFpbiA9IE5VTEw7CisJCW5iODgwMF90eF9kbWFfc3RhcnQoZGV2KTsKKwl9CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgdm9pZCBuYjg4MDBfdHhfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJlcG9ydCkKK3sKKwlpZiAocmVwb3J0ICYgVFhfTEFURV9DT0xMSVNJT04pCisJCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOworCisJaWYgKHJlcG9ydCAmIFRYX1BBQ0tFVF9EUk9QUEVEKQorCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKworCWlmIChyZXBvcnQgJiBUWF9GSUZPX1VOREVSUlVOKQorCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworfQorCitzdGF0aWMgdm9pZCBuYjg4MDBfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IGxpbWl0ID0gcHJpdi0+dHhfbmV4dDsKKwl1bnNpZ25lZCBpbnQgZG9uZSA9IHByaXYtPnR4X2RvbmU7CisJdW5zaWduZWQgaW50IHBhY2tldHMgPSAwOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCisJd2hpbGUgKGRvbmUgIT0gbGltaXQpIHsKKwkJc3RydWN0IG5iODgwMF90eF9kZXNjICp0eGQgPSAmcHJpdi0+dHhfZGVzY3NbZG9uZV07CisJCXN0cnVjdCBuYjg4MDBfdHhfYnVmICp0eGIgPSAmcHJpdi0+dHhfYnVmc1tkb25lXTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCQlpZiAoIXR4ZC0+cmVwb3J0KQorCQkJYnJlYWs7CisKKwkJc2tiID0gdHhiLT5za2I7CisJCWxlbiArPSBza2ItPmxlbjsKKworCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPmRldiwgdHhiLT5kbWFfYWRkciwgdHhiLT5kbWFfbGVuLAorCQkJCSBETUFfVE9fREVWSUNFKTsKKworCQlpZiAoSVNfVFhfRVJST1IodHhkLT5yZXBvcnQpKSB7CisJCQluYjg4MDBfdHhfZXJyb3IoZGV2LCB0eGQtPnJlcG9ydCk7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJfSBlbHNlIHsKKwkJCWNvbnN1bWVfc2tiKHNrYik7CisJCX0KKworCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBUWF9CWVRFU19UUkFOU0ZFUlJFRCh0eGQtPnJlcG9ydCk7CisJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBUWF9FQVJMWV9DT0xMSVNJT05TKHR4ZC0+cmVwb3J0KTsKKworCQl0eGItPnNrYiA9IE5VTEw7CisJCXR4Yi0+cmVhZHkgPSBmYWxzZTsKKwkJdHhkLT5yZXBvcnQgPSAwOworCisJCWRvbmUgPSAoZG9uZSArIDEpICUgVFhfREVTQ19DT1VOVDsKKwkJcGFja2V0cysrOworCX0KKworCWlmIChwYWNrZXRzKSB7CisJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOworCQlhdG9taWNfYWRkKHBhY2tldHMsICZwcml2LT50eF9mcmVlKTsKKwkJbmV0ZGV2X2NvbXBsZXRlZF9xdWV1ZShkZXYsIHBhY2tldHMsIGxlbik7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJcHJpdi0+dHhfZG9uZSA9IGRvbmU7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbmI4ODAwX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCXUzMiB2YWw7CisKKwkvKiB0eCBpbnRlcnJ1cHQgKi8KKwl2YWwgPSBuYjg4MDBfcmVhZGwocHJpdiwgTkI4ODAwX1RYQ19TUik7CisJaWYgKHZhbCkgeworCQluYjg4MDBfd3JpdGVsKHByaXYsIE5CODgwMF9UWENfU1IsIHZhbCk7CisKKwkJaWYgKHZhbCAmIFRTUl9ESSkKKwkJCW5iODgwMF90eF9kbWFfc3RhcnRfaXJxKGRldik7CisKKwkJaWYgKHZhbCAmIFRTUl9USSkKKwkJCW5hcGlfc2NoZWR1bGVfaXJxb2ZmKCZwcml2LT5uYXBpKTsKKworCQlpZiAodW5saWtlbHkodmFsICYgVFNSX0RFKSkKKwkJCW5ldGRldl9lcnIoZGV2LCAiVFggRE1BIGVycm9yXG4iKTsKKworCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuIHdpdGggYXV0b21hdGljIHN0YXR1cyByZXRyaWV2YWwgKi8KKwkJaWYgKHVubGlrZWx5KHZhbCAmIFRTUl9UTykpCisJCQluZXRkZXZfZXJyKGRldiwgIlRYIFN0YXR1cyBGSUZPIG92ZXJmbG93XG4iKTsKKworCQlyZXQgPSBJUlFfSEFORExFRDsKKwl9CisKKwkvKiByeCBpbnRlcnJ1cHQgKi8KKwl2YWwgPSBuYjg4MDBfcmVhZGwocHJpdiwgTkI4ODAwX1JYQ19TUik7CisJaWYgKHZhbCkgeworCQluYjg4MDBfd3JpdGVsKHByaXYsIE5CODgwMF9SWENfU1IsIHZhbCk7CisKKwkJaWYgKGxpa2VseSh2YWwgJiAoUlNSX1JJIHwgUlNSX0RJKSkpIHsKKwkJCW5iODgwMF93cml0ZWwocHJpdiwgTkI4ODAwX1JYX0lUUiwgcHJpdi0+cnhfaXRyX3BvbGwpOworCQkJbmFwaV9zY2hlZHVsZV9pcnFvZmYoJnByaXYtPm5hcGkpOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHZhbCAmIFJTUl9ERSkpCisJCQluZXRkZXZfZXJyKGRldiwgIlJYIERNQSBlcnJvclxuIik7CisKKwkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiB3aXRoIGF1dG9tYXRpYyBzdGF0dXMgcmV0cmlldmFsICovCisJCWlmICh1bmxpa2VseSh2YWwgJiBSU1JfUk8pKQorCQkJbmV0ZGV2X2VycihkZXYsICJSWCBTdGF0dXMgRklGTyBvdmVyZmxvd1xuIik7CisKKwkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbmI4ODAwX21hY19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWJvb2wgZ2lnYWJpdCA9IHByaXYtPnNwZWVkID09IFNQRUVEXzEwMDA7CisJdTMyIG1hY19tb2RlX21hc2sgPSBSR01JSV9NT0RFIHwgSEFMRl9EVVBMRVggfCBHTUFDX01PREU7CisJdTMyIG1hY19tb2RlID0gMDsKKwl1MzIgc2xvdF90aW1lOworCXUzMiBwaHlfY2xrOworCXUzMiBpY3Q7CisKKwlpZiAoIXByaXYtPmR1cGxleCkKKwkJbWFjX21vZGUgfD0gSEFMRl9EVVBMRVg7CisKKwlpZiAoZ2lnYWJpdCkgeworCQlpZiAocHJpdi0+cGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJKQorCQkJbWFjX21vZGUgfD0gUkdNSUlfTU9ERTsKKworCQltYWNfbW9kZSB8PSBHTUFDX01PREU7CisJCXBoeV9jbGsgPSAxMjUwMDAwMDA7CisKKwkJLyogU2hvdWxkIGJlIDUxMiBidXQgcmVnaXN0ZXIgaXMgb25seSA4IGJpdHMgKi8KKwkJc2xvdF90aW1lID0gMjU1OworCX0gZWxzZSB7CisJCXBoeV9jbGsgPSAyNTAwMDAwMDsKKwkJc2xvdF90aW1lID0gMTI4OworCX0KKworCWljdCA9IERJVl9ST1VORF9VUChwaHlfY2xrLCBjbGtfZ2V0X3JhdGUocHJpdi0+Y2xrKSk7CisKKwluYjg4MDBfd3JpdGViKHByaXYsIE5CODgwMF9JQ19USFJFU0hPTEQsIGljdCk7CisJbmI4ODAwX3dyaXRlYihwcml2LCBOQjg4MDBfU0xPVF9USU1FLCBzbG90X3RpbWUpOworCW5iODgwMF9tYXNrYihwcml2LCBOQjg4MDBfTUFDX01PREUsIG1hY19tb2RlX21hc2ssIG1hY19tb2RlKTsKK30KKworc3RhdGljIHZvaWQgbmI4ODAwX3BhdXNlX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtPnBoeWRldjsKKwl1MzIgcnhjcjsKKworCWlmIChwcml2LT5wYXVzZV9hbmVnKSB7CisJCWlmICghcGh5ZGV2IHx8ICFwaHlkZXYtPmxpbmspCisJCQlyZXR1cm47CisKKwkJcHJpdi0+cGF1c2VfcnggPSBwaHlkZXYtPnBhdXNlOworCQlwcml2LT5wYXVzZV90eCA9IHBoeWRldi0+cGF1c2UgXiBwaHlkZXYtPmFzeW1fcGF1c2U7CisJfQorCisJbmI4ODAwX21vZGIocHJpdiwgTkI4ODAwX1JYX0NUTCwgUlhfUEFVU0VfRU4sIHByaXYtPnBhdXNlX3J4KTsKKworCXJ4Y3IgPSBuYjg4MDBfcmVhZGwocHJpdiwgTkI4ODAwX1JYQ19DUik7CisJaWYgKCEhKHJ4Y3IgJiBSQ1JfRkwpID09IHByaXYtPnBhdXNlX3R4KQorCQlyZXR1cm47CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CisJCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKKwkJbmI4ODAwX2RtYV9zdG9wKGRldik7CisJCW5iODgwMF9tb2RsKHByaXYsIE5CODgwMF9SWENfQ1IsIFJDUl9GTCwgcHJpdi0+cGF1c2VfdHgpOworCQluYjg4MDBfc3RhcnRfcngoZGV2KTsKKwkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisJCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKKwl9IGVsc2UgeworCQluYjg4MDBfbW9kbChwcml2LCBOQjg4MDBfUlhDX0NSLCBSQ1JfRkwsIHByaXYtPnBhdXNlX3R4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5iODgwMF9saW5rX3JlY29uZmlndXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5iODgwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcHJpdi0+cGh5ZGV2OworCWludCBjaGFuZ2UgPSAwOworCisJaWYgKHBoeWRldi0+bGluaykgeworCQlpZiAocGh5ZGV2LT5zcGVlZCAhPSBwcml2LT5zcGVlZCkgeworCQkJcHJpdi0+c3BlZWQgPSBwaHlkZXYtPnNwZWVkOworCQkJY2hhbmdlID0gMTsKKwkJfQorCisJCWlmIChwaHlkZXYtPmR1cGxleCAhPSBwcml2LT5kdXBsZXgpIHsKKwkJCXByaXYtPmR1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworCQkJY2hhbmdlID0gMTsKKwkJfQorCisJCWlmIChjaGFuZ2UpCisJCQluYjg4MDBfbWFjX2NvbmZpZyhkZXYpOworCisJCW5iODgwMF9wYXVzZV9jb25maWcoZGV2KTsKKwl9CisKKwlpZiAocGh5ZGV2LT5saW5rICE9IHByaXYtPmxpbmspIHsKKwkJcHJpdi0+bGluayA9IHBoeWRldi0+bGluazsKKwkJY2hhbmdlID0gMTsKKwl9CisKKwlpZiAoY2hhbmdlKQorCQlwaHlfcHJpbnRfc3RhdHVzKHByaXYtPnBoeWRldik7Cit9CisKK3N0YXRpYyB2b2lkIG5iODgwMF91cGRhdGVfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCW5iODgwMF93cml0ZWIocHJpdiwgTkI4ODAwX1NSQ19BRERSKGkpLCBkZXYtPmRldl9hZGRyW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQorCQluYjg4MDBfd3JpdGViKHByaXYsIE5CODgwMF9VQ19BRERSKGkpLCBkZXYtPmRldl9hZGRyW2ldKTsKK30KKworc3RhdGljIGludCBuYjg4MDBfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyICpzb2NrID0gYWRkcjsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUJVU1k7CisKKwlldGhlcl9hZGRyX2NvcHkoZGV2LT5kZXZfYWRkciwgc29jay0+c2FfZGF0YSk7CisJbmI4ODAwX3VwZGF0ZV9tYWNfYWRkcihkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5iODgwMF9tY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB2YWwpCit7CisJc3RydWN0IG5iODgwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5iODgwMF93cml0ZWIocHJpdiwgTkI4ODAwX01DX0lOSVQsIHZhbCk7CisJcmVhZGJfcG9sbF90aW1lb3V0X2F0b21pYyhwcml2LT5iYXNlICsgTkI4ODAwX01DX0lOSVQsIHZhbCwgIXZhbCwKKwkJCQkgIDEsIDEwMDApOworfQorCitzdGF0aWMgdm9pZCBuYjg4MDBfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisJaW50IGk7CisKKwlpZiAoZGV2LT5mbGFncyAmIChJRkZfUFJPTUlTQyB8IElGRl9BTExNVUxUSSkpIHsKKwkJbmI4ODAwX21hY19hZihkZXYsIGZhbHNlKTsKKwkJcmV0dXJuOworCX0KKworCW5iODgwMF9tYWNfYWYoZGV2LCB0cnVlKTsKKwluYjg4MDBfbWNfaW5pdChkZXYsIDApOworCisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikgeworCQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJCW5iODgwMF93cml0ZWIocHJpdiwgTkI4ODAwX01DX0FERFIoaSksIGhhLT5hZGRyW2ldKTsKKworCQluYjg4MDBfbWNfaW5pdChkZXYsIDB4ZmYpOworCX0KK30KKworI2RlZmluZSBSWF9ERVNDX1NJWkUgKFJYX0RFU0NfQ09VTlQgKiBzaXplb2Yoc3RydWN0IG5iODgwMF9yeF9kZXNjKSkKKyNkZWZpbmUgVFhfREVTQ19TSVpFIChUWF9ERVNDX0NPVU5UICogc2l6ZW9mKHN0cnVjdCBuYjg4MDBfdHhfZGVzYykpCisKK3N0YXRpYyB2b2lkIG5iODgwMF9kbWFfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAocHJpdi0+cnhfYnVmcykgeworCQlmb3IgKGkgPSAwOyBpIDwgUlhfREVTQ19DT1VOVDsgaSsrKQorCQkJaWYgKHByaXYtPnJ4X2J1ZnNbaV0ucGFnZSkKKwkJCQlwdXRfcGFnZShwcml2LT5yeF9idWZzW2ldLnBhZ2UpOworCisJCWtmcmVlKHByaXYtPnJ4X2J1ZnMpOworCQlwcml2LT5yeF9idWZzID0gTlVMTDsKKwl9CisKKwlpZiAocHJpdi0+dHhfYnVmcykgeworCQlmb3IgKGkgPSAwOyBpIDwgVFhfREVTQ19DT1VOVDsgaSsrKQorCQkJa2ZyZWVfc2tiKHByaXYtPnR4X2J1ZnNbaV0uc2tiKTsKKworCQlrZnJlZShwcml2LT50eF9idWZzKTsKKwkJcHJpdi0+dHhfYnVmcyA9IE5VTEw7CisJfQorCisJaWYgKHByaXYtPnJ4X2Rlc2NzKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+ZGV2LnBhcmVudCwgUlhfREVTQ19TSVpFLCBwcml2LT5yeF9kZXNjcywKKwkJCQkgIHByaXYtPnJ4X2Rlc2NfZG1hKTsKKwkJcHJpdi0+cnhfZGVzY3MgPSBOVUxMOworCX0KKworCWlmIChwcml2LT50eF9kZXNjcykgeworCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmRldi5wYXJlbnQsIFRYX0RFU0NfU0laRSwgcHJpdi0+dHhfZGVzY3MsCisJCQkJICBwcml2LT50eF9kZXNjX2RtYSk7CisJCXByaXYtPnR4X2Rlc2NzID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5iODgwMF9kbWFfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuYjg4MDBfcnhfZGVzYyAqcnhkOworCXN0cnVjdCBuYjg4MDBfdHhfZGVzYyAqdHhkOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJYX0RFU0NfQ09VTlQ7IGkrKykgeworCQlkbWFfYWRkcl90IHJ4X2RtYSA9IHByaXYtPnJ4X2Rlc2NfZG1hICsgaSAqIHNpemVvZigqcnhkKTsKKworCQlyeGQgPSAmcHJpdi0+cnhfZGVzY3NbaV07CisJCXJ4ZC0+ZGVzYy5uX2FkZHIgPSByeF9kbWEgKyBzaXplb2YoKnJ4ZCk7CisJCXJ4ZC0+ZGVzYy5yX2FkZHIgPQorCQkJcnhfZG1hICsgb2Zmc2V0b2Yoc3RydWN0IG5iODgwMF9yeF9kZXNjLCByZXBvcnQpOworCQlyeGQtPmRlc2MuY29uZmlnID0gcHJpdi0+cnhfZG1hX2NvbmZpZzsKKwkJcnhkLT5yZXBvcnQgPSAwOworCX0KKworCXJ4ZC0+ZGVzYy5uX2FkZHIgPSBwcml2LT5yeF9kZXNjX2RtYTsKKwlyeGQtPmRlc2MuY29uZmlnIHw9IERFU0NfRU9DOworCisJcHJpdi0+cnhfZW9jID0gUlhfREVTQ19DT1VOVCAtIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFhfREVTQ19DT1VOVDsgaSsrKSB7CisJCXN0cnVjdCBuYjg4MDBfdHhfYnVmICp0eGIgPSAmcHJpdi0+dHhfYnVmc1tpXTsKKwkJZG1hX2FkZHJfdCByX2RtYSA9IHR4Yi0+ZG1hX2Rlc2MgKworCQkJb2Zmc2V0b2Yoc3RydWN0IG5iODgwMF90eF9kZXNjLCByZXBvcnQpOworCisJCXR4ZCA9ICZwcml2LT50eF9kZXNjc1tpXTsKKwkJdHhkLT5kZXNjWzBdLnJfYWRkciA9IHJfZG1hOworCQl0eGQtPmRlc2NbMV0ucl9hZGRyID0gcl9kbWE7CisJCXR4ZC0+cmVwb3J0ID0gMDsKKwl9CisKKwlwcml2LT50eF9uZXh0ID0gMDsKKwlwcml2LT50eF9xdWV1ZSA9IDA7CisJcHJpdi0+dHhfZG9uZSA9IDA7CisJYXRvbWljX3NldCgmcHJpdi0+dHhfZnJlZSwgVFhfREVTQ19DT1VOVCk7CisKKwluYjg4MDBfd3JpdGVsKHByaXYsIE5CODgwMF9SWF9ERVNDX0FERFIsIHByaXYtPnJ4X2Rlc2NfZG1hKTsKKworCXdtYigpOwkJLyogZW5zdXJlIGFsbCBzZXR1cCBpcyB3cml0dGVuIGJlZm9yZSBzdGFydGluZyAqLworfQorCitzdGF0aWMgaW50IG5iODgwMF9kbWFfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IG5fcnggPSBSWF9ERVNDX0NPVU5UOworCXVuc2lnbmVkIGludCBuX3R4ID0gVFhfREVTQ19DT1VOVDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyOworCisJcHJpdi0+cnhfZGVzY3MgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5kZXYucGFyZW50LCBSWF9ERVNDX1NJWkUsCisJCQkJCSAgICAmcHJpdi0+cnhfZGVzY19kbWEsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+cnhfZGVzY3MpCisJCWdvdG8gZXJyX291dDsKKworCXByaXYtPnJ4X2J1ZnMgPSBrY2FsbG9jKG5fcngsIHNpemVvZigqcHJpdi0+cnhfYnVmcyksIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+cnhfYnVmcykKKwkJZ290byBlcnJfb3V0OworCisJZm9yIChpID0gMDsgaSA8IG5fcng7IGkrKykgeworCQllcnIgPSBuYjg4MDBfYWxsb2NfcngoZGV2LCBpLCBmYWxzZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcHJpdi0+dHhfZGVzY3MgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5kZXYucGFyZW50LCBUWF9ERVNDX1NJWkUsCisJCQkJCSAgICAmcHJpdi0+dHhfZGVzY19kbWEsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+dHhfZGVzY3MpCisJCWdvdG8gZXJyX291dDsKKworCXByaXYtPnR4X2J1ZnMgPSBrY2FsbG9jKG5fdHgsIHNpemVvZigqcHJpdi0+dHhfYnVmcyksIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+dHhfYnVmcykKKwkJZ290byBlcnJfb3V0OworCisJZm9yIChpID0gMDsgaSA8IG5fdHg7IGkrKykKKwkJcHJpdi0+dHhfYnVmc1tpXS5kbWFfZGVzYyA9CisJCQlwcml2LT50eF9kZXNjX2RtYSArIGkgKiBzaXplb2Yoc3RydWN0IG5iODgwMF90eF9kZXNjKTsKKworCW5iODgwMF9kbWFfcmVzZXQoZGV2KTsKKworCXJldHVybiAwOworCitlcnJfb3V0OgorCW5iODgwMF9kbWFfZnJlZShkZXYpOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgbmI4ODAwX2RtYV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5iODgwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmI4ODAwX3R4X2J1ZiAqdHhiID0gJnByaXYtPnR4X2J1ZnNbMF07CisJc3RydWN0IG5iODgwMF90eF9kZXNjICp0eGQgPSAmcHJpdi0+dHhfZGVzY3NbMF07CisJaW50IHJldHJ5ID0gNTsKKwl1MzIgdHhjcjsKKwl1MzIgcnhjcjsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBpOworCisJLyogd2FpdCBmb3IgdHggdG8gZmluaXNoICovCisJZXJyID0gcmVhZGxfcG9sbF90aW1lb3V0X2F0b21pYyhwcml2LT5iYXNlICsgTkI4ODAwX1RYQ19DUiwgdHhjciwKKwkJCQkJISh0eGNyICYgVENSX0VOKSAmJgorCQkJCQlwcml2LT50eF9kb25lID09IHByaXYtPnR4X25leHQsCisJCQkJCTEwMDAsIDEwMDAwMDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBUaGUgcnggRE1BIG9ubHkgc3RvcHMgaWYgaXQgcmVhY2hlcyB0aGUgZW5kIG9mIGNoYWluLgorCSAqIFRvIG1ha2UgdGhpcyBoYXBwZW4sIHdlIHNldCB0aGUgRU9DIGZsYWcgb24gYWxsIHJ4CisJICogZGVzY3JpcHRvcnMsIHB1dCB0aGUgZGV2aWNlIGluIGxvb3BiYWNrIG1vZGUsIGFuZCBzZW5kCisJICogYSBmZXcgZHVtbXkgZnJhbWVzLiAgVGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgaWdub3JlCisJICogdGhlc2Ugc2luY2UgTkFQSSBpcyBkaXNhYmxlZCBhbmQgbm8gcmVhbCBmcmFtZXMgYXJlIGluCisJICogdGhlIHR4IHF1ZXVlLgorCSAqLworCisJZm9yIChpID0gMDsgaSA8IFJYX0RFU0NfQ09VTlQ7IGkrKykKKwkJcHJpdi0+cnhfZGVzY3NbaV0uZGVzYy5jb25maWcgfD0gREVTQ19FT0M7CisKKwl0eGQtPmRlc2NbMF0uc19hZGRyID0KKwkJdHhiLT5kbWFfZGVzYyArIG9mZnNldG9mKHN0cnVjdCBuYjg4MDBfdHhfZGVzYywgYnVmKTsKKwl0eGQtPmRlc2NbMF0uY29uZmlnID0gREVTQ19CVFMoMikgfCBERVNDX0RTIHwgREVTQ19FT0YgfCBERVNDX0VPQyB8IDg7CisJbWVtc2V0KHR4ZC0+YnVmLCAwLCBzaXplb2YodHhkLT5idWYpKTsKKworCW5iODgwMF9tYWNfYWYoZGV2LCBmYWxzZSk7CisJbmI4ODAwX3NldGIocHJpdiwgTkI4ODAwX01BQ19NT0RFLCBMT09QQkFDS19FTik7CisKKwlkbyB7CisJCW5iODgwMF93cml0ZWwocHJpdiwgTkI4ODAwX1RYX0RFU0NfQUREUiwgdHhiLT5kbWFfZGVzYyk7CisJCXdtYigpOworCQluYjg4MDBfd3JpdGVsKHByaXYsIE5CODgwMF9UWENfQ1IsIHR4Y3IgfCBUQ1JfRU4pOworCisJCWVyciA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMocHJpdi0+YmFzZSArIE5CODgwMF9SWENfQ1IsCisJCQkJCQlyeGNyLCAhKHJ4Y3IgJiBSQ1JfRU4pLAorCQkJCQkJMTAwMCwgMTAwMDAwKTsKKwl9IHdoaWxlIChlcnIgJiYgLS1yZXRyeSk7CisKKwluYjg4MDBfbWFjX2FmKGRldiwgdHJ1ZSk7CisJbmI4ODAwX2NsZWFyYihwcml2LCBOQjg4MDBfTUFDX01PREUsIExPT1BCQUNLX0VOKTsKKwluYjg4MDBfZG1hX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gcmV0cnkgPyAwIDogLUVUSU1FRE9VVDsKK30KKworc3RhdGljIHZvaWQgbmI4ODAwX3BhdXNlX2FkdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIGFkdiA9IDA7CisKKwlpZiAoIXByaXYtPnBoeWRldikKKwkJcmV0dXJuOworCisJaWYgKHByaXYtPnBhdXNlX3J4KQorCQlhZHYgfD0gQURWRVJUSVNFRF9QYXVzZSB8IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKKwlpZiAocHJpdi0+cGF1c2VfdHgpCisJCWFkdiBePSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CisKKwlwcml2LT5waHlkZXYtPnN1cHBvcnRlZCB8PSBhZHY7CisJcHJpdi0+cGh5ZGV2LT5hZHZlcnRpc2luZyB8PSBhZHY7Cit9CisKK3N0YXRpYyBpbnQgbmI4ODAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnI7CisKKwkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJbmI4ODAwX3dyaXRlbChwcml2LCBOQjg4MDBfUlhDX1NSLCAweGYpOworCW5iODgwMF93cml0ZWwocHJpdiwgTkI4ODAwX1RYQ19TUiwgMHhmKTsKKworCWVyciA9IG5iODgwMF9kbWFfaW5pdChkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgbmI4ODAwX2lycSwgMCwgZGV2X25hbWUoJmRldi0+ZGV2KSwgZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX2RtYTsKKworCW5iODgwMF9tYWNfcngoZGV2LCB0cnVlKTsKKwluYjg4MDBfbWFjX3R4KGRldiwgdHJ1ZSk7CisKKwlwcml2LT5waHlkZXYgPSBvZl9waHlfY29ubmVjdChkZXYsIHByaXYtPnBoeV9ub2RlLAorCQkJCSAgICAgIG5iODgwMF9saW5rX3JlY29uZmlndXJlLCAwLAorCQkJCSAgICAgIHByaXYtPnBoeV9tb2RlKTsKKwlpZiAoIXByaXYtPnBoeWRldikKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwluYjg4MDBfcGF1c2VfYWR2KGRldik7CisKKwluZXRkZXZfcmVzZXRfcXVldWUoZGV2KTsKKwluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCW5iODgwMF9zdGFydF9yeChkZXYpOworCXBoeV9zdGFydChwcml2LT5waHlkZXYpOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycToKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKK2Vycl9mcmVlX2RtYToKKwluYjg4MDBfZG1hX2ZyZWUoZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmI4ODAwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcGh5X3N0b3AocHJpdi0+cGh5ZGV2KTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOworCisJbmI4ODAwX2RtYV9zdG9wKGRldik7CisJbmI4ODAwX21hY19yeChkZXYsIGZhbHNlKTsKKwluYjg4MDBfbWFjX3R4KGRldiwgZmFsc2UpOworCisJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5ZGV2KTsKKwlwcml2LT5waHlkZXYgPSBOVUxMOworCisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwluYjg4MDBfZG1hX2ZyZWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5iODgwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIHJxLCBjbWQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5iODgwMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBuYjg4MDBfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmI4ODAwX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IG5iODgwMF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbmI4ODAwX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9yeF9tb2RlCT0gbmI4ODAwX3NldF9yeF9tb2RlLAorCS5uZG9fZG9faW9jdGwJCT0gbmI4ODAwX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKK3N0YXRpYyBpbnQgbmI4ODAwX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFwcml2LT5waHlkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQocHJpdi0+cGh5ZGV2LCBjbWQpOworfQorCitzdGF0aWMgaW50IG5iODgwMF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG5iODgwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghcHJpdi0+cGh5ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwaHlfZXRodG9vbF9zc2V0KHByaXYtPnBoeWRldiwgY21kKTsKK30KKworc3RhdGljIGludCBuYjg4MDBfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIXByaXYtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gZ2VucGh5X3Jlc3RhcnRfYW5lZyhwcml2LT5waHlkZXYpOworfQorCitzdGF0aWMgdm9pZCBuYjg4MDBfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBwKQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlwcC0+YXV0b25lZyA9IHByaXYtPnBhdXNlX2FuZWc7CisJcHAtPnJ4X3BhdXNlID0gcHJpdi0+cGF1c2Vfcng7CisJcHAtPnR4X3BhdXNlID0gcHJpdi0+cGF1c2VfdHg7Cit9CisKK3N0YXRpYyBpbnQgbmI4ODAwX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBwKQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlwcml2LT5wYXVzZV9hbmVnID0gcHAtPmF1dG9uZWc7CisJcHJpdi0+cGF1c2VfcnggPSBwcC0+cnhfcGF1c2U7CisJcHJpdi0+cGF1c2VfdHggPSBwcC0+dHhfcGF1c2U7CisKKwluYjg4MDBfcGF1c2VfYWR2KGRldik7CisKKwlpZiAoIXByaXYtPnBhdXNlX2FuZWcpCisJCW5iODgwMF9wYXVzZV9jb25maWcoZGV2KTsKKwllbHNlIGlmIChwcml2LT5waHlkZXYpCisJCXBoeV9zdGFydF9hbmVnKHByaXYtPnBoeWRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbmI4ODAwX3N0YXRzX25hbWVzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKKwkicnhfYnl0ZXNfb2siLAorCSJyeF9mcmFtZXNfb2siLAorCSJyeF91bmRlcnNpemVfZnJhbWVzIiwKKwkicnhfZnJhZ21lbnRfZnJhbWVzIiwKKwkicnhfNjRfYnl0ZV9mcmFtZXMiLAorCSJyeF8xMjdfYnl0ZV9mcmFtZXMiLAorCSJyeF8yNTVfYnl0ZV9mcmFtZXMiLAorCSJyeF81MTFfYnl0ZV9mcmFtZXMiLAorCSJyeF8xMDIzX2J5dGVfZnJhbWVzIiwKKwkicnhfbWF4X3NpemVfZnJhbWVzIiwKKwkicnhfb3ZlcnNpemVfZnJhbWVzIiwKKwkicnhfYmFkX2Zjc19mcmFtZXMiLAorCSJyeF9icm9hZGNhc3RfZnJhbWVzIiwKKwkicnhfbXVsdGljYXN0X2ZyYW1lcyIsCisJInJ4X2NvbnRyb2xfZnJhbWVzIiwKKwkicnhfcGF1c2VfZnJhbWVzIiwKKwkicnhfdW5zdXBfY29udHJvbF9mcmFtZXMiLAorCSJyeF9hbGlnbl9lcnJvcl9mcmFtZXMiLAorCSJyeF9vdmVycnVuX2ZyYW1lcyIsCisJInJ4X2phYmJlcl9mcmFtZXMiLAorCSJyeF9ieXRlcyIsCisJInJ4X2ZyYW1lcyIsCisKKwkidHhfYnl0ZXNfb2siLAorCSJ0eF9mcmFtZXNfb2siLAorCSJ0eF82NF9ieXRlX2ZyYW1lcyIsCisJInR4XzEyN19ieXRlX2ZyYW1lcyIsCisJInR4XzI1NV9ieXRlX2ZyYW1lcyIsCisJInR4XzUxMV9ieXRlX2ZyYW1lcyIsCisJInR4XzEwMjNfYnl0ZV9mcmFtZXMiLAorCSJ0eF9tYXhfc2l6ZV9mcmFtZXMiLAorCSJ0eF9vdmVyc2l6ZV9mcmFtZXMiLAorCSJ0eF9icm9hZGNhc3RfZnJhbWVzIiwKKwkidHhfbXVsdGljYXN0X2ZyYW1lcyIsCisJInR4X2NvbnRyb2xfZnJhbWVzIiwKKwkidHhfcGF1c2VfZnJhbWVzIiwKKwkidHhfdW5kZXJydW5fZnJhbWVzIiwKKwkidHhfc2luZ2xlX2NvbGxpc2lvbl9mcmFtZXMiLAorCSJ0eF9tdWx0aV9jb2xsaXNpb25fZnJhbWVzIiwKKwkidHhfZGVmZXJyZWRfY29sbGlzaW9uX2ZyYW1lcyIsCisJInR4X2xhdGVfY29sbGlzaW9uX2ZyYW1lcyIsCisJInR4X2V4Y2Vzc2l2ZV9jb2xsaXNpb25fZnJhbWVzIiwKKwkidHhfYnl0ZXMiLAorCSJ0eF9mcmFtZXMiLAorCSJ0eF9jb2xsaXNpb25zIiwKK307CisKKyNkZWZpbmUgTkI4ODAwX05VTV9TVEFUUyBBUlJBWV9TSVpFKG5iODgwMF9zdGF0c19uYW1lcykKKworc3RhdGljIGludCBuYjg4MDBfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCit7CisJaWYgKHNzZXQgPT0gRVRIX1NTX1NUQVRTKQorCQlyZXR1cm4gTkI4ODAwX05VTV9TVEFUUzsKKworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIHZvaWQgbmI4ODAwX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzc2V0LCB1OCAqYnVmKQoreworCWlmIChzc2V0ID09IEVUSF9TU19TVEFUUykKKwkJbWVtY3B5KGJ1ZiwgJm5iODgwMF9zdGF0c19uYW1lcywgc2l6ZW9mKG5iODgwMF9zdGF0c19uYW1lcykpOworfQorCitzdGF0aWMgdTMyIG5iODgwMF9yZWFkX3N0YXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluZGV4KQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwluYjg4MDBfd3JpdGViKHByaXYsIE5CODgwMF9TVEFUX0lOREVYLCBpbmRleCk7CisKKwlyZXR1cm4gbmI4ODAwX3JlYWRsKHByaXYsIE5CODgwMF9TVEFUX0RBVEEpOworfQorCitzdGF0aWMgdm9pZCBuYjg4MDBfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICplc3RhdHMsIHU2NCAqc3QpCit7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHJ4LCB0eDsKKworCWZvciAoaSA9IDA7IGkgPCBOQjg4MDBfTlVNX1NUQVRTIC8gMjsgaSsrKSB7CisJCXJ4ID0gbmI4ODAwX3JlYWRfc3RhdChkZXYsIGkpOworCQl0eCA9IG5iODgwMF9yZWFkX3N0YXQoZGV2LCBpIHwgMHg4MCk7CisJCXN0W2ldID0gcng7CisJCXN0W2kgKyBOQjg4MDBfTlVNX1NUQVRTIC8gMl0gPSB0eDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmI4ODAwX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MJCT0gbmI4ODAwX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IG5iODgwMF9zZXRfc2V0dGluZ3MsCisJLm53YXlfcmVzZXQJCT0gbmI4ODAwX253YXlfcmVzZXQsCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9wYXVzZXBhcmFtCQk9IG5iODgwMF9nZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3BhdXNlcGFyYW0JCT0gbmI4ODAwX3NldF9wYXVzZXBhcmFtLAorCS5nZXRfc3NldF9jb3VudAkJPSBuYjg4MDBfZ2V0X3NzZXRfY291bnQsCisJLmdldF9zdHJpbmdzCQk9IG5iODgwMF9nZXRfc3RyaW5ncywKKwkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBuYjg4MDBfZ2V0X2V0aHRvb2xfc3RhdHMsCit9OworCitzdGF0aWMgaW50IG5iODgwMF9od19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5iODgwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgdmFsOworCisJdmFsID0gVFhfUkVUUllfRU4gfCBUWF9QQURfRU4gfCBUWF9BUFBFTkRfRkNTOworCW5iODgwMF93cml0ZWIocHJpdiwgTkI4ODAwX1RYX0NUTDEsIHZhbCk7CisKKwkvKiBDb2xsaXNpb24gcmV0cnkgY291bnQgKi8KKwluYjg4MDBfd3JpdGViKHByaXYsIE5CODgwMF9UWF9DVEwyLCA1KTsKKworCXZhbCA9IFJYX1BBRF9TVFJJUCB8IFJYX0FGX0VOOworCW5iODgwMF93cml0ZWIocHJpdiwgTkI4ODAwX1JYX0NUTCwgdmFsKTsKKworCS8qIENob3NlbiBieSBmYWlyIGRpY2Ugcm9sbCAqLworCW5iODgwMF93cml0ZWIocHJpdiwgTkI4ODAwX1JBTkRPTV9TRUVELCA0KTsKKworCS8qIFRYIGN5Y2xlcyBwZXIgZGVmZXJyYWwgcGVyaW9kICovCisJbmI4ODAwX3dyaXRlYihwcml2LCBOQjg4MDBfVFhfU0RQLCAxMik7CisKKwkvKiBUaGUgZm9sbG93aW5nIHRocmVlIHRocmVzaG9sZCB2YWx1ZXMgaGF2ZSBiZWVuCisJICogZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCBmb3IgZ29vZCByZXN1bHRzLgorCSAqLworCisJLyogUlgvVFggRklGTyB0aHJlc2hvbGQgZm9yIHBhcnRpYWwgZW1wdHkgKDY0LWJpdCBlbnRyaWVzKSAqLworCW5iODgwMF93cml0ZWIocHJpdiwgTkI4ODAwX1BFX1RIUkVTSE9MRCwgMCk7CisKKwkvKiBSWC9UWCBGSUZPIHRocmVzaG9sZCBmb3IgcGFydGlhbCBmdWxsICg2NC1iaXQgZW50cmllcykgKi8KKwluYjg4MDBfd3JpdGViKHByaXYsIE5CODgwMF9QRl9USFJFU0hPTEQsIDI1NSk7CisKKwkvKiBCdWZmZXIgc2l6ZSBmb3IgdHJhbnNtaXQgKDY0LWJpdCBlbnRyaWVzKSAqLworCW5iODgwMF93cml0ZWIocHJpdiwgTkI4ODAwX1RYX0JVRlNJWkUsIDY0KTsKKworCS8qIENvbmZpZ3VyZSB0eCBETUEgKi8KKworCXZhbCA9IG5iODgwMF9yZWFkbChwcml2LCBOQjg4MDBfVFhDX0NSKTsKKwl2YWwgJj0gVENSX0xFOwkJLyoga2VlcCBlbmRpYW4gc2V0dGluZyAqLworCXZhbCB8PSBUQ1JfRE07CQkvKiBETUEgZGVzY3JpcHRvciBtb2RlICovCisJdmFsIHw9IFRDUl9SUzsJCS8qIGF1dG9tYXRpY2FsbHkgc3RvcmUgdHggc3RhdHVzICAqLworCXZhbCB8PSBUQ1JfRElFOwkJLyogaW50ZXJydXB0IG9uIERNQSBjaGFpbiBjb21wbGV0aW9uICovCisJdmFsIHw9IFRDUl9URkkoNyk7CS8qIGludGVycnVwdCBhZnRlciA3IGZyYW1lcyB0cmFuc21pdHRlZCAqLworCXZhbCB8PSBUQ1JfQlRTKDIpOwkvKiAzMi1ieXRlIGJ1cyB0cmFuc2FjdGlvbiBzaXplICovCisJbmI4ODAwX3dyaXRlbChwcml2LCBOQjg4MDBfVFhDX0NSLCB2YWwpOworCisJLyogVFggY29tcGxldGUgaW50ZXJydXB0IGFmdGVyIDEwIG1zIG9yIDcgZnJhbWVzIChzZWUgYWJvdmUpICovCisJdmFsID0gY2xrX2dldF9yYXRlKHByaXYtPmNsaykgLyAxMDA7CisJbmI4ODAwX3dyaXRlbChwcml2LCBOQjg4MDBfVFhfSVRSLCB2YWwpOworCisJLyogQ29uZmlndXJlIHJ4IERNQSAqLworCisJdmFsID0gbmI4ODAwX3JlYWRsKHByaXYsIE5CODgwMF9SWENfQ1IpOworCXZhbCAmPSBSQ1JfTEU7CQkvKiBrZWVwIGVuZGlhbiBzZXR0aW5nICovCisJdmFsIHw9IFJDUl9ETTsJCS8qIERNQSBkZXNjcmlwdG9yIG1vZGUgKi8KKwl2YWwgfD0gUkNSX1JTOwkJLyogYXV0b21hdGljYWxseSBzdG9yZSByeCBzdGF0dXMgKi8KKwl2YWwgfD0gUkNSX0RJRTsJCS8qIGludGVycnVwdCBhdCBlbmQgb2YgRE1BIGNoYWluICovCisJdmFsIHw9IFJDUl9SRkkoNyk7CS8qIGludGVycnVwdCBhZnRlciA3IGZyYW1lcyByZWNlaXZlZCAqLworCXZhbCB8PSBSQ1JfQlRTKDIpOwkvKiAzMi1ieXRlIGJ1cyB0cmFuc2FjdGlvbiBzaXplICovCisJbmI4ODAwX3dyaXRlbChwcml2LCBOQjg4MDBfUlhDX0NSLCB2YWwpOworCisJLyogVGhlIHJ4IGludGVycnVwdCBjYW4gZmlyZSBiZWZvcmUgdGhlIERNQSBoYXMgY29tcGxldGVkCisJICogdW5sZXNzIGEgc21hbGwgZGVsYXkgaXMgYWRkZWQuICA1MCB1cyBpcyBob3BlZnVsbHkgZW5vdWdoLgorCSAqLworCXByaXYtPnJ4X2l0cl9pcnEgPSBjbGtfZ2V0X3JhdGUocHJpdi0+Y2xrKSAvIDIwMDAwOworCisJLyogSW4gTkFQSSBwb2xsIG1vZGUgd2Ugd2FudCB0byBkaXNhYmxlIGludGVycnVwdHMsIGJ1dCB0aGUKKwkgKiBoYXJkd2FyZSBkb2VzIG5vdCBwZXJtaXQgdGhpcy4gIERlbGF5IDEwIG1zIGluc3RlYWQuCisJICovCisJcHJpdi0+cnhfaXRyX3BvbGwgPSBjbGtfZ2V0X3JhdGUocHJpdi0+Y2xrKSAvIDEwMDsKKworCW5iODgwMF93cml0ZWwocHJpdiwgTkI4ODAwX1JYX0lUUiwgcHJpdi0+cnhfaXRyX2lycSk7CisKKwlwcml2LT5yeF9kbWFfY29uZmlnID0gUlhfQlVGX1NJWkUgfCBERVNDX0JUUygyKSB8IERFU0NfRFMgfCBERVNDX0VPRjsKKworCS8qIEZsb3cgY29udHJvbCBzZXR0aW5ncyAqLworCisJLyogUGF1c2UgdGltZSBvZiAwLjEgbXMgKi8KKwl2YWwgPSAxMDAwMDAgLyA1MTI7CisJbmI4ODAwX3dyaXRlYihwcml2LCBOQjg4MDBfUFExLCB2YWwgPj4gOCk7CisJbmI4ODAwX3dyaXRlYihwcml2LCBOQjg4MDBfUFEyLCB2YWwgJiAweGZmKTsKKworCS8qIEF1dG8tbmVnb3RpYXRlIGJ5IGRlZmF1bHQgKi8KKwlwcml2LT5wYXVzZV9hbmVnID0gdHJ1ZTsKKwlwcml2LT5wYXVzZV9yeCA9IHRydWU7CisJcHJpdi0+cGF1c2VfdHggPSB0cnVlOworCisJbmI4ODAwX21jX2luaXQoZGV2LCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5iODgwMF90YW5nb3hfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHBhZF9tb2RlID0gUEFEX01PREVfTUlJOworCisJc3dpdGNoIChwcml2LT5waHlfbW9kZSkgeworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX01JSToKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJOgorCQlwYWRfbW9kZSA9IFBBRF9NT0RFX01JSTsKKwkJYnJlYWs7CisKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSToKKwkJcGFkX21vZGUgPSBQQURfTU9ERV9SR01JSTsKKwkJYnJlYWs7CisKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOgorCQlwYWRfbW9kZSA9IFBBRF9NT0RFX1JHTUlJIHwgUEFEX01PREVfR1RYX0NMS19ERUxBWTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldi0+ZGV2LnBhcmVudCwgInVuc3VwcG9ydGVkIHBoeSBtb2RlICVzXG4iLAorCQkJcGh5X21vZGVzKHByaXYtPnBoeV9tb2RlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5iODgwMF93cml0ZWIocHJpdiwgTkI4ODAwX1RBTkdPWF9QQURfTU9ERSwgcGFkX21vZGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmI4ODAwX3RhbmdveF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuYjg4MDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGNsa19kaXY7CisKKwluYjg4MDBfd3JpdGViKHByaXYsIE5CODgwMF9UQU5HT1hfUkVTRVQsIDApOworCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDAwMCk7CisJbmI4ODAwX3dyaXRlYihwcml2LCBOQjg4MDBfVEFOR09YX1JFU0VULCAxKTsKKworCXdtYigpOwkJLyogZW5zdXJlIHJlc2V0IGlzIGNsZWFyZWQgYmVmb3JlIHByb2NlZWRpbmcgKi8KKworCWNsa19kaXYgPSBESVZfUk9VTkRfVVAoY2xrX2dldF9yYXRlKHByaXYtPmNsayksIDIgKiBNQVhfTURDX0NMT0NLKTsKKwluYjg4MDBfd3JpdGV3KHByaXYsIE5CODgwMF9UQU5HT1hfTURJT19DTEtESVYsIGNsa19kaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmI4ODAwX29wcyBuYjg4MDBfdGFuZ294X29wcyA9IHsKKwkuaW5pdAk9IG5iODgwMF90YW5nb3hfaW5pdCwKKwkucmVzZXQJPSBuYjg4MDBfdGFuZ294X3Jlc2V0LAorfTsKKworc3RhdGljIGludCBuYjg4MDBfdGFuZ280X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnI7CisKKwllcnIgPSBuYjg4MDBfdGFuZ294X2luaXQoZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogT24gdGFuZ280IGludGVycnVwdCBvbiBETUEgY29tcGxldGlvbiBwZXIgZnJhbWUgd29ya3MgYW5kIGdpdmVzCisJICogYmV0dGVyIHBlcmZvcm1hbmNlIGRlc3BpdGUgZ2VuZXJhdGluZyBtb3JlIHJ4IGludGVycnVwdHMuCisJICovCisKKwkvKiBEaXNhYmxlIHVubmVjZXNzYXJ5IGludGVycnVwdCBvbiByeCBjb21wbGV0aW9uICovCisJbmI4ODAwX2NsZWFybChwcml2LCBOQjg4MDBfUlhDX0NSLCBSQ1JfUkZJKDcpKTsKKworCS8qIFJlcXVlc3QgaW50ZXJydXB0IG9uIGRlc2NyaXB0b3IgRE1BIGNvbXBsZXRpb24gKi8KKwlwcml2LT5yeF9kbWFfY29uZmlnIHw9IERFU0NfSUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuYjg4MDBfb3BzIG5iODgwMF90YW5nbzRfb3BzID0geworCS5pbml0CT0gbmI4ODAwX3RhbmdvNF9pbml0LAorCS5yZXNldAk9IG5iODgwMF90YW5nb3hfcmVzZXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBuYjg4MDBfZHRfaWRzW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJhdXJvcmEsbmI4ODAwIiwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAic2lnbWEsc21wODY0Mi1ldGhlcm5ldCIsCisJCS5kYXRhID0gJm5iODgwMF90YW5nb3hfb3BzLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJzaWdtYSxzbXA4NzM0LWV0aGVybmV0IiwKKwkJLmRhdGEgPSAmbmI4ODAwX3RhbmdvNF9vcHMsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBpbnQgbmI4ODAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJY29uc3Qgc3RydWN0IG5iODgwMF9vcHMgKm9wcyA9IE5VTEw7CisJc3RydWN0IG5iODgwMF9wcml2ICpwcml2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG1paV9idXMgKmJ1czsKKwljb25zdCB1bnNpZ25lZCBjaGFyICptYWM7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBpcnE7CisJaW50IHJldDsKKworCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG5iODgwMF9kdF9pZHMsICZwZGV2LT5kZXYpOworCWlmIChtYXRjaCkKKwkJb3BzID0gbWF0Y2gtPmRhdGE7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPD0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIkFVLU5CODgwMCBFdGhlcm5ldCBhdCAlcGFcbiIsICZyZXMtPnN0YXJ0KTsKKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqcHJpdikpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKKworCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXByaXYtPmJhc2UgPSBiYXNlOworCisJcHJpdi0+cGh5X21vZGUgPSBvZl9nZXRfcGh5X21vZGUocGRldi0+ZGV2Lm9mX25vZGUpOworCWlmIChwcml2LT5waHlfbW9kZSA8IDApCisJCXByaXYtPnBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOworCisJcHJpdi0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIocHJpdi0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihwcml2LT5jbGspOworCQlnb3RvIGVycl9mcmVlX2RldjsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Y2xrKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX2RldjsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKKworCWlmIChvcHMgJiYgb3BzLT5yZXNldCkgeworCQlyZXQgPSBvcHMtPnJlc2V0KGRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9mcmVlX2RldjsKKwl9CisKKwlidXMgPSBkZXZtX21kaW9idXNfYWxsb2MoJnBkZXYtPmRldik7CisJaWYgKCFidXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZGlzYWJsZV9jbGs7CisJfQorCisJYnVzLT5uYW1lID0gIm5iODgwMC1taWkiOworCWJ1cy0+cmVhZCA9IG5iODgwMF9tZGlvX3JlYWQ7CisJYnVzLT53cml0ZSA9IG5iODgwMF9tZGlvX3dyaXRlOworCWJ1cy0+cGFyZW50ID0gJnBkZXYtPmRldjsKKwlzbnByaW50ZihidXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlbHgubmI4ODAwLW1paSIsCisJCSAodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0KTsKKwlidXMtPnByaXYgPSBwcml2OworCisJcmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtPmRldi5vZl9ub2RlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBNSUkgYnVzXG4iKTsKKwkJZ290byBlcnJfZGlzYWJsZV9jbGs7CisJfQorCisJcHJpdi0+cGh5X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLCAicGh5LWhhbmRsZSIsIDApOworCWlmICghcHJpdi0+cGh5X25vZGUpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gUEhZIHNwZWNpZmllZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfYnVzOworCX0KKworCXByaXYtPm1paV9idXMgPSBidXM7CisKKwlyZXQgPSBuYjg4MDBfaHdfaW5pdChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWVfYnVzOworCisJaWYgKG9wcyAmJiBvcHMtPmluaXQpIHsKKwkJcmV0ID0gb3BzLT5pbml0KGRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9mcmVlX2J1czsKKwl9CisKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmI4ODAwX25ldGRldl9vcHM7CisJZGV2LT5ldGh0b29sX29wcyA9ICZuYjg4MDBfZXRodG9vbF9vcHM7CisJZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOworCWRldi0+aXJxID0gaXJxOworCisJbWFjID0gb2ZfZ2V0X21hY19hZGRyZXNzKHBkZXYtPmRldi5vZl9ub2RlKTsKKwlpZiAobWFjKQorCQlldGhlcl9hZGRyX2NvcHkoZGV2LT5kZXZfYWRkciwgbWFjKTsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkKKwkJZXRoX2h3X2FkZHJfcmFuZG9tKGRldik7CisKKwluYjg4MDBfdXBkYXRlX21hY19hZGRyKGRldik7CisKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKHJldCkgeworCQluZXRkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBuZXRkZXZcbiIpOworCQlnb3RvIGVycl9mcmVlX2RtYTsKKwl9CisKKwluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5uYXBpLCBuYjg4MDBfcG9sbCwgTkFQSV9QT0xMX1dFSUdIVCk7CisKKwluZXRkZXZfaW5mbyhkZXYsICJNQUMgYWRkcmVzcyAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2RtYToKKwluYjg4MDBfZG1hX2ZyZWUoZGV2KTsKK2Vycl9mcmVlX2J1czoKKwltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKK2Vycl9kaXNhYmxlX2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKK2Vycl9mcmVlX2RldjoKKwlmcmVlX25ldGRldihkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuYjg4MDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmI4ODAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCisJbWRpb2J1c191bnJlZ2lzdGVyKHByaXYtPm1paV9idXMpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CisKKwluYjg4MDBfZG1hX2ZyZWUobmRldik7CisJZnJlZV9uZXRkZXYobmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbmI4ODAwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAibmI4ODAwIiwKKwkJLm9mX21hdGNoX3RhYmxlCT0gbmI4ODAwX2R0X2lkcywKKwl9LAorCS5wcm9iZQk9IG5iODgwMF9wcm9iZSwKKwkucmVtb3ZlCT0gbmI4ODAwX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobmI4ODAwX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiQXVyb3JhIEFVLU5CODgwMCBFdGhlcm5ldCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hbnMgUnVsbGdhcmQgPG1hbnNAbWFuc3IuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXVyb3JhL25iODgwMC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXVyb3JhL25iODgwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YWRiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdXJvcmEvbmI4ODAwLmgKQEAgLTAsMCArMSwzMTYgQEAKKyNpZm5kZWYgX05CODgwMF9IXworI2RlZmluZSBfTkI4ODAwX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVmaW5lIFJYX0RFU0NfQ09VTlQJCQkyNTYKKyNkZWZpbmUgVFhfREVTQ19DT1VOVAkJCTI1NgorCisjZGVmaW5lIE5CODgwMF9ERVNDX0xPVwkJCTQKKworI2RlZmluZSBSWF9CVUZfU0laRQkJCTE1NTIKKworI2RlZmluZSBSWF9DT1BZQlJFQUsJCQkyNTYKKyNkZWZpbmUgUlhfQ09QWUhEUgkJCTEyOAorCisjZGVmaW5lIE1BWF9NRENfQ0xPQ0sJCQkyNTAwMDAwCisKKy8qIFN0YXJnYXRlIFNvbHV0aW9ucyBTU044ODAwIGNvcmUgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5CODgwMF9UWF9DVEwxCQkJMHgwMDAKKyNkZWZpbmUgVFhfVFBECQkJCUJJVCg1KQorI2RlZmluZSBUWF9BUFBFTkRfRkNTCQkJQklUKDQpCisjZGVmaW5lIFRYX1BBRF9FTgkJCUJJVCgzKQorI2RlZmluZSBUWF9SRVRSWV9FTgkJCUJJVCgyKQorI2RlZmluZSBUWF9FTgkJCQlCSVQoMCkKKworI2RlZmluZSBOQjg4MDBfVFhfQ1RMMgkJCTB4MDAxCisKKyNkZWZpbmUgTkI4ODAwX1JYX0NUTAkJCTB4MDA0CisjZGVmaW5lIFJYX0JDX0RJU0FCTEUJCQlCSVQoNykKKyNkZWZpbmUgUlhfUlVOVAkJCQlCSVQoNikKKyNkZWZpbmUgUlhfQUZfRU4JCQlCSVQoNSkKKyNkZWZpbmUgUlhfUEFVU0VfRU4JCQlCSVQoMykKKyNkZWZpbmUgUlhfU0VORF9DUkMJCQlCSVQoMikKKyNkZWZpbmUgUlhfUEFEX1NUUklQCQkJQklUKDEpCisjZGVmaW5lIFJYX0VOCQkJCUJJVCgwKQorCisjZGVmaW5lIE5CODgwMF9SQU5ET01fU0VFRAkJMHgwMDgKKyNkZWZpbmUgTkI4ODAwX1RYX1NEUAkJCTB4MTQKKyNkZWZpbmUgTkI4ODAwX1RYX1RQRFAxCQkJMHgxOAorI2RlZmluZSBOQjg4MDBfVFhfVFBEUDIJCQkweDE5CisjZGVmaW5lIE5CODgwMF9TTE9UX1RJTUUJCTB4MWMKKworI2RlZmluZSBOQjg4MDBfTURJT19DTUQJCQkweDAyMAorI2RlZmluZSBNRElPX0NNRF9HTwkJCUJJVCgzMSkKKyNkZWZpbmUgTURJT19DTURfV1IJCQlCSVQoMjYpCisjZGVmaW5lIE1ESU9fQ01EX0FERFIoeCkJCSgoeCkgPDwgMjEpCisjZGVmaW5lIE1ESU9fQ01EX1JFRyh4KQkJCSgoeCkgPDwgMTYpCisjZGVmaW5lIE1ESU9fQ01EX0RBVEEoeCkJCSgoeCkgPDwJIDApCisKKyNkZWZpbmUgTkI4ODAwX01ESU9fU1RTCQkJMHgwMjQKKyNkZWZpbmUgTURJT19TVFNfRVJSCQkJQklUKDMxKQorCisjZGVmaW5lIE5CODgwMF9NQ19BRERSKGkpCQkoMHgwMjggKyAoaSkpCisjZGVmaW5lIE5CODgwMF9NQ19JTklUCQkJMHgwMmUKKyNkZWZpbmUgTkI4ODAwX1VDX0FERFIoaSkJCSgweDAzYyArIChpKSkKKworI2RlZmluZSBOQjg4MDBfTUFDX01PREUJCQkweDA0NAorI2RlZmluZSBSR01JSV9NT0RFCQkJQklUKDcpCisjZGVmaW5lIEhBTEZfRFVQTEVYCQkJQklUKDQpCisjZGVmaW5lIEJVUlNUX0VOCQkJQklUKDMpCisjZGVmaW5lIExPT1BCQUNLX0VOCQkJQklUKDIpCisjZGVmaW5lIEdNQUNfTU9ERQkJCUJJVCgwKQorCisjZGVmaW5lIE5CODgwMF9JQ19USFJFU0hPTEQJCTB4MDUwCisjZGVmaW5lIE5CODgwMF9QRV9USFJFU0hPTEQJCTB4MDUxCisjZGVmaW5lIE5CODgwMF9QRl9USFJFU0hPTEQJCTB4MDUyCisjZGVmaW5lIE5CODgwMF9UWF9CVUZTSVpFCQkweDA1NAorI2RlZmluZSBOQjg4MDBfRklGT19DVEwJCQkweDA1NgorI2RlZmluZSBOQjg4MDBfUFExCQkJMHgwNjAKKyNkZWZpbmUgTkI4ODAwX1BRMgkJCTB4MDYxCisjZGVmaW5lIE5CODgwMF9TUkNfQUREUihpKQkJKDB4MDZhICsgKGkpKQorI2RlZmluZSBOQjg4MDBfU1RBVF9EQVRBCQkweDA3OAorI2RlZmluZSBOQjg4MDBfU1RBVF9JTkRFWAkJMHgwN2MKKyNkZWZpbmUgTkI4ODAwX1NUQVRfQ0xFQVIJCTB4MDdkCisKKyNkZWZpbmUgTkI4ODAwX1NMRUVQX01PREUJCTB4MDdlCisjZGVmaW5lIFNMRUVQX01PREUJCQlCSVQoMCkKKworI2RlZmluZSBOQjg4MDBfV0FLRVVQCQkJMHgwN2YKKyNkZWZpbmUgV0FLRVVQCQkJCUJJVCgwKQorCisvKiBBdXJvcmEgTkI4ODAwIGhvc3QgaW50ZXJmYWNlIHJlZ2lzdGVycyAqLworI2RlZmluZSBOQjg4MDBfVFhDX0NSCQkJMHgxMDAKKyNkZWZpbmUgVENSX0xLCQkJCUJJVCgxMikKKyNkZWZpbmUgVENSX0RTCQkJCUJJVCgxMSkKKyNkZWZpbmUgVENSX0JUUyh4KQkJCSgoKHgpICYgMHg3KSA8PCA4KQorI2RlZmluZSBUQ1JfRElFCQkJCUJJVCg3KQorI2RlZmluZSBUQ1JfVEZJKHgpCQkJKCgoeCkgJiAweDcpIDw8IDQpCisjZGVmaW5lIFRDUl9MRQkJCQlCSVQoMykKKyNkZWZpbmUgVENSX1JTCQkJCUJJVCgyKQorI2RlZmluZSBUQ1JfRE0JCQkJQklUKDEpCisjZGVmaW5lIFRDUl9FTgkJCQlCSVQoMCkKKworI2RlZmluZSBOQjg4MDBfVFhDX1NSCQkJMHgxMDQKKyNkZWZpbmUgVFNSX0RFCQkJCUJJVCgzKQorI2RlZmluZSBUU1JfREkJCQkJQklUKDIpCisjZGVmaW5lIFRTUl9UTwkJCQlCSVQoMSkKKyNkZWZpbmUgVFNSX1RJCQkJCUJJVCgwKQorCisjZGVmaW5lIE5CODgwMF9UWF9TQVIJCQkweDEwOAorI2RlZmluZSBOQjg4MDBfVFhfREVTQ19BRERSCQkweDEwYworCisjZGVmaW5lIE5CODgwMF9UWF9SRVBPUlRfQUREUgkJMHgxMTAKKyNkZWZpbmUgVFhfQllURVNfVFJBTlNGRVJSRUQoeCkJCSgoKHgpID4+IDE2KSAmIDB4ZmZmZikKKyNkZWZpbmUgVFhfRklSU1RfREVGRVJSQUwJCUJJVCg3KQorI2RlZmluZSBUWF9FQVJMWV9DT0xMSVNJT05TKHgpCQkoKCh4KSA+PiAzKSAmIDB4ZikKKyNkZWZpbmUgVFhfTEFURV9DT0xMSVNJT04JCUJJVCgyKQorI2RlZmluZSBUWF9QQUNLRVRfRFJPUFBFRAkJQklUKDEpCisjZGVmaW5lIFRYX0ZJRk9fVU5ERVJSVU4JCUJJVCgwKQorI2RlZmluZSBJU19UWF9FUlJPUihyKQkJCSgocikgJiAweDA3KQorCisjZGVmaW5lIE5CODgwMF9UWF9GSUZPX1NSCQkweDExNAorI2RlZmluZSBOQjg4MDBfVFhfSVRSCQkJMHgxMTgKKworI2RlZmluZSBOQjg4MDBfUlhDX0NSCQkJMHgyMDAKKyNkZWZpbmUgUkNSX0ZMCQkJCUJJVCgxMykKKyNkZWZpbmUgUkNSX0xLCQkJCUJJVCgxMikKKyNkZWZpbmUgUkNSX0RTCQkJCUJJVCgxMSkKKyNkZWZpbmUgUkNSX0JUUyh4KQkJCSgoKHgpICYgNykgPDwgOCkKKyNkZWZpbmUgUkNSX0RJRQkJCQlCSVQoNykKKyNkZWZpbmUgUkNSX1JGSSh4KQkJCSgoKHgpICYgNykgPDwgNCkKKyNkZWZpbmUgUkNSX0xFCQkJCUJJVCgzKQorI2RlZmluZSBSQ1JfUlMJCQkJQklUKDIpCisjZGVmaW5lIFJDUl9ETQkJCQlCSVQoMSkKKyNkZWZpbmUgUkNSX0VOCQkJCUJJVCgwKQorCisjZGVmaW5lIE5CODgwMF9SWENfU1IJCQkweDIwNAorI2RlZmluZSBSU1JfREUJCQkJQklUKDMpCisjZGVmaW5lIFJTUl9ESQkJCQlCSVQoMikKKyNkZWZpbmUgUlNSX1JPCQkJCUJJVCgxKQorI2RlZmluZSBSU1JfUkkJCQkJQklUKDApCisKKyNkZWZpbmUgTkI4ODAwX1JYX1NBUgkJCTB4MjA4CisjZGVmaW5lIE5CODgwMF9SWF9ERVNDX0FERFIJCTB4MjBjCisKKyNkZWZpbmUgTkI4ODAwX1JYX1JFUE9SVF9BRERSCQkweDIxMAorI2RlZmluZSBSWF9CWVRFU19UUkFOU0ZFUlJFRCh4KQkJKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSBSWF9NVUxUSUNBU1RfUEtUCQlCSVQoOSkKKyNkZWZpbmUgUlhfQlJPQURDQVNUX1BLVAkJQklUKDgpCisjZGVmaW5lIFJYX0xFTkdUSF9FUlIJCQlCSVQoNykKKyNkZWZpbmUgUlhfRkNTX0VSUgkJCUJJVCg2KQorI2RlZmluZSBSWF9SVU5UX1BLVAkJCUJJVCg1KQorI2RlZmluZSBSWF9GSUZPX09WRVJSVU4JCQlCSVQoNCkKKyNkZWZpbmUgUlhfTEFURV9DT0xMSVNJT04JCUJJVCgzKQorI2RlZmluZSBSWF9BTElHTk1FTlRfRVJST1IJCUJJVCgyKQorI2RlZmluZSBSWF9FUlJPUl9NQVNLCQkJMHhmYworI2RlZmluZSBJU19SWF9FUlJPUihyKQkJCSgocikgJiBSWF9FUlJPUl9NQVNLKQorCisjZGVmaW5lIE5CODgwMF9SWF9GSUZPX1NSCQkweDIxNAorI2RlZmluZSBOQjg4MDBfUlhfSVRSCQkJMHgyMTgKKworLyogU2lnbWEgRGVzaWducyBTTVA4Nnh4IGFkZGl0aW9uYWwgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5CODgwMF9UQU5HT1hfUEFEX01PREUJCTB4NDAwCisjZGVmaW5lIFBBRF9NT0RFX01BU0sJCQkweDcKKyNkZWZpbmUgUEFEX01PREVfTUlJCQkJMHgwCisjZGVmaW5lIFBBRF9NT0RFX1JHTUlJCQkJMHgxCisjZGVmaW5lIFBBRF9NT0RFX0dUWF9DTEtfSU5WCQlCSVQoMykKKyNkZWZpbmUgUEFEX01PREVfR1RYX0NMS19ERUxBWQkJQklUKDQpCisKKyNkZWZpbmUgTkI4ODAwX1RBTkdPWF9NRElPX0NMS0RJVgkweDQyMAorI2RlZmluZSBOQjg4MDBfVEFOR09YX1JFU0VUCQkweDQyNAorCisvKiBIYXJkd2FyZSBETUEgZGVzY3JpcHRvciAqLworc3RydWN0IG5iODgwMF9kbWFfZGVzYyB7CisJdTMyCQkJCXNfYWRkcjsJLyogc3RhcnQgYWRkcmVzcyAqLworCXUzMgkJCQluX2FkZHI7CS8qIG5leHQgZGVzY3JpcHRvciBhZGRyZXNzICovCisJdTMyCQkJCXJfYWRkcjsJLyogcmVwb3J0IGFkZHJlc3MgKi8KKwl1MzIJCQkJY29uZmlnOworfSBfX2FsaWduZWQoOCk7CisKKyNkZWZpbmUgREVTQ19JRAkJCQlCSVQoMjMpCisjZGVmaW5lIERFU0NfRU9DCQkJQklUKDIyKQorI2RlZmluZSBERVNDX0VPRgkJCUJJVCgyMSkKKyNkZWZpbmUgREVTQ19MSwkJCQlCSVQoMjApCisjZGVmaW5lIERFU0NfRFMJCQkJQklUKDE5KQorI2RlZmluZSBERVNDX0JUUyh4KQkJCSgoKHgpICYgMHg3KSA8PCAxNikKKworLyogRE1BIGRlc2NyaXB0b3IgYW5kIGFzc29jaWF0ZWQgZGF0YSBmb3IgcnguCisgKiBBbGxvY2F0ZWQgZnJvbSBjb2hlcmVudCBtZW1vcnkuCisgKi8KK3N0cnVjdCBuYjg4MDBfcnhfZGVzYyB7CisJLyogRE1BIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3QgbmI4ODAwX2RtYV9kZXNjCQlkZXNjOworCisJLyogU3RhdHVzIHJlcG9ydCBmaWxsZWQgaW4gYnkgaGFyZHdhcmUgKi8KKwl1MzIJCQkJcmVwb3J0OworfTsKKworLyogQWRkcmVzcyBvZiBidWZmZXIgb24gcnggcmluZyAqLworc3RydWN0IG5iODgwMF9yeF9idWYgeworCXN0cnVjdCBwYWdlCQkJKnBhZ2U7CisJdW5zaWduZWQgbG9uZwkJCW9mZnNldDsKK307CisKKy8qIERNQSBkZXNjcmlwdG9ycyBhbmQgYXNzb2NpYXRlZCBkYXRhIGZvciB0eC4KKyAqIEFsbG9jYXRlZCBmcm9tIGNvaGVyZW50IG1lbW9yeS4KKyAqLworc3RydWN0IG5iODgwMF90eF9kZXNjIHsKKwkvKiBETUEgZGVzY3JpcHRvci4gIFRoZSBzZWNvbmQgZGVzY3JpcHRvciBpcyB1c2VkIGlmIHBhY2tldAorCSAqIGRhdGEgaXMgdW5hbGlnbmVkLgorCSAqLworCXN0cnVjdCBuYjg4MDBfZG1hX2Rlc2MJCWRlc2NbMl07CisKKwkvKiBTdGF0dXMgcmVwb3J0IGZpbGxlZCBpbiBieSBoYXJkd2FyZSAqLworCXUzMgkJCQlyZXBvcnQ7CisKKwkvKiBCb3VuY2UgYnVmZmVyIGZvciBpbml0aWFsIHVuYWxpZ25lZCBwYXJ0IG9mIHBhY2tldCAqLworCXU4CQkJCWJ1Zls4XSBfX2FsaWduZWQoOCk7Cit9OworCisvKiBQYWNrZXQgaW4gdHggcXVldWUgKi8KK3N0cnVjdCBuYjg4MDBfdHhfYnVmIHsKKwkvKiBDdXJyZW50bHkgcXVldWVkIHNrYiAqLworCXN0cnVjdCBza19idWZmCQkJKnNrYjsKKworCS8qIERNQSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBkZXNjcmlwdG9yICovCisJZG1hX2FkZHJfdAkJCWRtYV9kZXNjOworCisJLyogRE1BIGFkZHJlc3Mgb2YgcGFja2V0IGRhdGEgKi8KKwlkbWFfYWRkcl90CQkJZG1hX2FkZHI7CisKKwkvKiBMZW5ndGggb2YgRE1BIG1hcHBpbmcsIGxlc3MgdGhhbiBza2ItPmxlbiBpZiBhbGlnbm1lbnQKKwkgKiBidWZmZXIgaXMgdXNlZC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCQlkbWFfbGVuOworCisJLyogTnVtYmVyIG9mIHBhY2tldHMgaW4gY2hhaW4gc3RhcnRpbmcgaGVyZSAqLworCXVuc2lnbmVkIGludAkJCWNoYWluX2xlbjsKKworCS8qIFBhY2tldCBjaGFpbiByZWFkeSB0byBiZSBzdWJtaXR0ZWQgdG8gaGFyZHdhcmUgKi8KKwlib29sCQkJCXJlYWR5OworfTsKKworc3RydWN0IG5iODgwMF9wcml2IHsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJCW5hcGk7CisKKwl2b2lkIF9faW9tZW0JCQkqYmFzZTsKKworCS8qIFJYIERNQSBkZXNjcmlwdG9ycyAqLworCXN0cnVjdCBuYjg4MDBfcnhfZGVzYwkJKnJ4X2Rlc2NzOworCisJLyogUlggYnVmZmVycyByZWZlcmVuY2VkIGJ5IERNQSBkZXNjcmlwdG9ycyAqLworCXN0cnVjdCBuYjg4MDBfcnhfYnVmCQkqcnhfYnVmczsKKworCS8qIEN1cnJlbnQgZW5kIG9mIGNoYWluICovCisJdTMyCQkJCXJ4X2VvYzsKKworCS8qIFZhbHVlIGZvciByeCBpbnRlcnJ1cHQgdGltZSByZWdpc3RlciBpbiBOQVBJIGludGVycnVwdCBtb2RlICovCisJdTMyCQkJCXJ4X2l0cl9pcnE7CisKKwkvKiBWYWx1ZSBmb3IgcnggaW50ZXJydXB0IHRpbWUgcmVnaXN0ZXIgaW4gTkFQSSBwb2xsIG1vZGUgKi8KKwl1MzIJCQkJcnhfaXRyX3BvbGw7CisKKwkvKiBWYWx1ZSBmb3IgY29uZmlnIGZpZWxkIG9mIHJ4IERNQSBkZXNjcmlwdG9ycyAqLworCXUzMgkJCQlyeF9kbWFfY29uZmlnOworCisJLyogVFggRE1BIGRlc2NyaXB0b3JzICovCisJc3RydWN0IG5iODgwMF90eF9kZXNjCQkqdHhfZGVzY3M7CisKKwkvKiBUWCBwYWNrZXQgcXVldWUgKi8KKwlzdHJ1Y3QgbmI4ODAwX3R4X2J1ZgkJKnR4X2J1ZnM7CisKKwkvKiBOdW1iZXIgb2YgZnJlZSB0eCBxdWV1ZSBlbnRyaWVzICovCisJYXRvbWljX3QJCQl0eF9mcmVlOworCisJLyogRmlyc3QgZnJlZSB0eCBxdWV1ZSBlbnRyeSAqLworCXUzMgkJCQl0eF9uZXh0OworCisJLyogTmV4dCBidWZmZXIgdG8gdHJhbnNtaXQgKi8KKwl1MzIJCQkJdHhfcXVldWU7CisKKwkvKiBTdGFydCBvZiBjdXJyZW50IHBhY2tldCBjaGFpbiAqLworCXN0cnVjdCBuYjg4MDBfdHhfYnVmCQkqdHhfY2hhaW47CisKKwkvKiBOZXh0IGJ1ZmZlciB0byByZWNsYWltICovCisJdTMyCQkJCXR4X2RvbmU7CisKKwkvKiBMb2NrIGZvciBETUEgYWN0aXZhdGlvbiAqLworCXNwaW5sb2NrX3QJCQl0eF9sb2NrOworCisJc3RydWN0IG1paV9idXMJCQkqbWlpX2J1czsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpwaHlfbm9kZTsKKwlzdHJ1Y3QgcGh5X2RldmljZQkJKnBoeWRldjsKKworCS8qIFBIWSBjb25uZWN0aW9uIHR5cGUgZnJvbSBEVCAqLworCWludAkJCQlwaHlfbW9kZTsKKworCS8qIEN1cnJlbnQgbGluayBzdGF0dXMgKi8KKwlpbnQJCQkJc3BlZWQ7CisJaW50CQkJCWR1cGxleDsKKwlpbnQJCQkJbGluazsKKworCS8qIFBhdXNlIHNldHRpbmdzICovCisJYm9vbAkJCQlwYXVzZV9hbmVnOworCWJvb2wJCQkJcGF1c2Vfcng7CisJYm9vbAkJCQlwYXVzZV90eDsKKworCS8qIERNQSBiYXNlIGFkZHJlc3Mgb2YgcnggZGVzY3JpcHRvcnMsIHNlZSByeF9kZXNjcyBhYm92ZSAqLworCWRtYV9hZGRyX3QJCQlyeF9kZXNjX2RtYTsKKworCS8qIERNQSBiYXNlIGFkZHJlc3Mgb2YgdHggZGVzY3JpcHRvcnMsIHNlZSB0eF9kZXNjcyBhYm92ZSAqLworCWRtYV9hZGRyX3QJCQl0eF9kZXNjX2RtYTsKKworCXN0cnVjdCBjbGsJCQkqY2xrOworfTsKKworc3RydWN0IG5iODgwMF9vcHMgeworCWludAkJCQkoKmluaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCWludAkJCQkoKnJlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK307CisKKyNlbmRpZiAvKiBfTkI4ODAwX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jCmluZGV4IGY4ZDdhMmYuLmM4MmFiODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jCkBAIC0zNDMwLDI1ICszNDMwLDI5IEBACiAJcmV0dXJuIHJjOwogfQogCi0jaWYgKE1BWF9TS0JfRlJBR1MgPj0gTUFYX0ZFVENIX0JEIC0gMykKKy8qIFZYTEFOOiA0ID0gMSAoZm9yIGxpbmVhciBkYXRhIEJEKSArIDMgKDIgZm9yIFBCRCBhbmQgbGFzdCBCRCkgKi8KKyNkZWZpbmUgQk5YMlhfTlVNX1ZYTEFOX1RTT19XSU5fU1VCX0JEUyAgICAgICAgIDQKKworLyogUmVndWxhcjogMyA9IDEgKGZvciBsaW5lYXIgZGF0YSBCRCkgKyAyIChmb3IgUEJEIGFuZCBsYXN0IEJEKSAqLworI2RlZmluZSBCTlgyWF9OVU1fVFNPX1dJTl9TVUJfQkRTICAgICAgICAgICAgICAgMworCisjaWYgKE1BWF9TS0JfRlJBR1MgPj0gTUFYX0ZFVENIX0JEIC0gQkRTX1BFUl9UWF9QS1QpCiAvKiBjaGVjayBpZiBwYWNrZXQgcmVxdWlyZXMgbGluZWFyaXphdGlvbiAocGFja2V0IGlzIHRvbyBmcmFnbWVudGVkKQogICAgbm8gbmVlZCB0byBjaGVjayBmcmFnbWVudGF0aW9uIGlmIHBhZ2Ugc2l6ZSA+IDhLICh0aGVyZSB3aWxsIGJlIG5vCiAgICB2aW9sYXRpb24gdG8gRlcgcmVzdHJpY3Rpb25zKSAqLwogc3RhdGljIGludCBibngyeF9wa3RfcmVxX2xpbihzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICB1MzIgeG1pdF90eXBlKQogewotCWludCB0b19jb3B5ID0gMDsKLQlpbnQgaGxlbiA9IDA7Ci0JaW50IGZpcnN0X2JkX3N6ID0gMDsKKwlpbnQgZmlyc3RfYmRfc3ogPSAwLCBudW1fdHNvX3dpbl9zdWIgPSBCTlgyWF9OVU1fVFNPX1dJTl9TVUJfQkRTOworCWludCB0b19jb3B5ID0gMCwgaGxlbiA9IDA7CiAKLQkvKiAzID0gMSAoZm9yIGxpbmVhciBkYXRhIEJEKSArIDIgKGZvciBQQkQgYW5kIGxhc3QgQkQpICovCi0JaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPj0gKE1BWF9GRVRDSF9CRCAtIDMpKSB7CisJaWYgKHhtaXRfdHlwZSAmIFhNSVRfR1NPX0VOQykKKwkJbnVtX3Rzb193aW5fc3ViID0gQk5YMlhfTlVNX1ZYTEFOX1RTT19XSU5fU1VCX0JEUzsKIAorCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID49IChNQVhfRkVUQ0hfQkQgLSBudW1fdHNvX3dpbl9zdWIpKSB7CiAJCWlmICh4bWl0X3R5cGUgJiBYTUlUX0dTTykgewogCQkJdW5zaWduZWQgc2hvcnQgbHNvX21zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7Ci0JCQkvKiBDaGVjayBpZiBMU08gcGFja2V0IG5lZWRzIHRvIGJlIGNvcGllZDoKLQkJCSAgIDMgPSAxIChmb3IgaGVhZGVycyBCRCkgKyAyIChmb3IgUEJEIGFuZCBsYXN0IEJEKSAqLwotCQkJaW50IHduZF9zaXplID0gTUFYX0ZFVENIX0JEIC0gMzsKKwkJCWludCB3bmRfc2l6ZSA9IE1BWF9GRVRDSF9CRCAtIG51bV90c29fd2luX3N1YjsKIAkJCS8qIE51bWJlciBvZiB3aW5kb3dzIHRvIGNoZWNrICovCiAJCQlpbnQgbnVtX3duZHMgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gd25kX3NpemU7CiAJCQlpbnQgd25kX2lkeCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9tYWluLmMKaW5kZXggZjFkNjJkNS4uMmU2MTFkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X21haW4uYwpAQCAtMTAxMzksOCArMTAxMzksOCBAQAogCQlEUChCTlgyWF9NU0dfU1AsICJJbnZhbGlkIHZ4bGFuIHBvcnRcbiIpOwogCQlyZXR1cm47CiAJfQotCWJwLT52eGxhbl9kc3RfcG9ydC0tOwotCWlmIChicC0+dnhsYW5fZHN0X3BvcnQpCisJYnAtPnZ4bGFuX2RzdF9wb3J0X2NvdW50LS07CisJaWYgKGJwLT52eGxhbl9kc3RfcG9ydF9jb3VudCkKIAkJcmV0dXJuOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKQEAgLTEzMjA3LDcgKzEzMjA3LDcgQEAKIAogCS8qIFZGIHdpdGggT0xEIEh5cGVydmlzb3Igb3Igb2xkIFBGIGRvIG5vdCBzdXBwb3J0IGZpbHRlcmluZyAqLwogCWlmIChJU19QRihicCkpIHsKLQkJaWYgKENISVBfSVNfRTF4KGJwKSkKKwkJaWYgKGNoaXBfaXNfZTF4KQogCQkJYnAtPmFjY2VwdF9hbnlfdmxhbiA9IHRydWU7CiAJCWVsc2UKIAkJCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwppbmRleCBkYjE1YzVlLi4wN2Y1ZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYwpAQCAtMjY5MywxNyArMjY5MywxNiBAQAogCXJlcS52ZXJfdXBkID0gRFJWX1ZFUl9VUEQ7CiAKIAlpZiAoQk5YVF9QRihicCkpIHsKLQkJdW5zaWduZWQgbG9uZyB2Zl9yZXFfc25pZl9ibWFwWzRdOworCQlERUNMQVJFX0JJVE1BUCh2Zl9yZXFfc25pZl9ibWFwLCAyNTYpOwogCQl1MzIgKmRhdGEgPSAodTMyICopdmZfcmVxX3NuaWZfYm1hcDsKIAotCQltZW1zZXQodmZfcmVxX3NuaWZfYm1hcCwgMCwgMzIpOworCQltZW1zZXQodmZfcmVxX3NuaWZfYm1hcCwgMCwgc2l6ZW9mKHZmX3JlcV9zbmlmX2JtYXApKTsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYm54dF92Zl9yZXFfc25pZik7IGkrKykKIAkJCV9fc2V0X2JpdChibnh0X3ZmX3JlcV9zbmlmW2ldLCB2Zl9yZXFfc25pZl9ibWFwKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCQlyZXEudmZfcmVxX2Z3ZFtpXSA9IGNwdV90b19sZTMyKCpkYXRhKTsKLQkJCWRhdGErKzsKLQkJfQorCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJcmVxLnZmX3JlcV9md2RbaV0gPSBjcHVfdG9fbGUzMihkYXRhW2ldKTsKKwogCQlyZXEuZW5hYmxlcyB8PQogCQkJY3B1X3RvX2xlMzIoRlVOQ19EUlZfUkdUUl9SRVFfRU5BQkxFU19WRl9SRVFfRldEKTsKIAl9CkBAIC0zNjI1LDYgKzM2MjQsNyBAQAogCQlwZi0+ZndfZmlkID0gbGUxNl90b19jcHUocmVzcC0+ZmlkKTsKIAkJcGYtPnBvcnRfaWQgPSBsZTE2X3RvX2NwdShyZXNwLT5wb3J0X2lkKTsKIAkJbWVtY3B5KHBmLT5tYWNfYWRkciwgcmVzcC0+cGVybV9tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCQltZW1jcHkoYnAtPmRldi0+ZGV2X2FkZHIsIHBmLT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCQlwZi0+bWF4X3Jzc2Nvc19jdHhzID0gbGUxNl90b19jcHUocmVzcC0+bWF4X3Jzc2Nvc19jdHgpOwogCQlwZi0+bWF4X2NwX3JpbmdzID0gbGUxNl90b19jcHUocmVzcC0+bWF4X2NtcGxfcmluZ3MpOwogCQlwZi0+bWF4X3R4X3JpbmdzID0gbGUxNl90b19jcHUocmVzcC0+bWF4X3R4X3JpbmdzKTsKQEAgLTM2NDgsOCArMzY0OCwxMSBAQAogCiAJCXZmLT5md19maWQgPSBsZTE2X3RvX2NwdShyZXNwLT5maWQpOwogCQltZW1jcHkodmYtPm1hY19hZGRyLCByZXNwLT5wZXJtX21hY19hZGRyZXNzLCBFVEhfQUxFTik7Ci0JCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcih2Zi0+bWFjX2FkZHIpKQotCQkJcmFuZG9tX2V0aGVyX2FkZHIodmYtPm1hY19hZGRyKTsKKwkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIodmYtPm1hY19hZGRyKSkKKwkJCS8qIG92ZXJ3cml0ZSBuZXRkZXYgZGV2X2FkciB3aXRoIGFkbWluIFZGIE1BQyAqLworCQkJbWVtY3B5KGJwLT5kZXYtPmRldl9hZGRyLCB2Zi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkJZWxzZQorCQkJcmFuZG9tX2V0aGVyX2FkZHIoYnAtPmRldi0+ZGV2X2FkZHIpOwogCiAJCXZmLT5tYXhfcnNzY29zX2N0eHMgPSBsZTE2X3RvX2NwdShyZXNwLT5tYXhfcnNzY29zX2N0eCk7CiAJCXZmLT5tYXhfY3BfcmluZ3MgPSBsZTE2X3RvX2NwdShyZXNwLT5tYXhfY21wbF9yaW5ncyk7CkBAIC0zODgwLDYgKzM4ODMsOCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBpbnQgYm54dF9jZmdfcnhfbW9kZShzdHJ1Y3QgYm54dCAqKTsKKwogc3RhdGljIGludCBibnh0X2luaXRfY2hpcChzdHJ1Y3QgYm54dCAqYnAsIGJvb2wgaXJxX3JlX2luaXQpCiB7CiAJaW50IHJjID0gMDsKQEAgLTM5NDYsMTEgKzM5NTEsOSBAQAogCQlicC0+dm5pY19pbmZvWzBdLnJ4X21hc2sgfD0KIAkJCQlDRkFfTDJfU0VUX1JYX01BU0tfUkVRX01BU0tfUFJPTUlTQ1VPVVM7CiAKLQlyYyA9IGJueHRfaHdybV9jZmFfbDJfc2V0X3J4X21hc2soYnAsIDApOwotCWlmIChyYykgewotCQluZXRkZXZfZXJyKGJwLT5kZXYsICJIV1JNIGNmYSBsMiByeCBtYXNrIGZhaWx1cmUgcmM6ICV4XG4iLCByYyk7CisJcmMgPSBibnh0X2NmZ19yeF9tb2RlKGJwKTsKKwlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKLQl9CiAKIAlyYyA9IGJueHRfaHdybV9zZXRfY29hbChicCk7CiAJaWYgKHJjKQpAQCAtNDU5OSw3ICs0NjAyLDcgQEAKIAkJCWJwLT5uZ2VfcG9ydF9jbnQgPSAxOwogCX0KIAotCWJwLT5zdGF0ZSA9IEJOWFRfU1RBVEVfT1BFTjsKKwlzZXRfYml0KEJOWFRfU1RBVEVfT1BFTiwgJmJwLT5zdGF0ZSk7CiAJYm54dF9lbmFibGVfaW50KGJwKTsKIAkvKiBFbmFibGUgVFggcXVldWVzICovCiAJYm54dF90eF9lbmFibGUoYnApOwpAQCAtNDY3NSw4ICs0Njc4LDEwIEBACiAJLyogQ2hhbmdlIGRldmljZSBzdGF0ZSB0byBhdm9pZCBUWCBxdWV1ZSB3YWtlIHVwJ3MgKi8KIAlibnh0X3R4X2Rpc2FibGUoYnApOwogCi0JYnAtPnN0YXRlID0gQk5YVF9TVEFURV9DTE9TRUQ7Ci0JY2FuY2VsX3dvcmtfc3luYygmYnAtPnNwX3Rhc2spOworCWNsZWFyX2JpdChCTlhUX1NUQVRFX09QRU4sICZicC0+c3RhdGUpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CisJd2hpbGUgKHRlc3RfYml0KEJOWFRfU1RBVEVfSU5fU1BfVEFTSywgJmJwLT5zdGF0ZSkpCisJCW1zbGVlcCgyMCk7CiAKIAkvKiBGbHVzaCByaW5ncyBiZWZvcmUgZGlzYWJsaW5nIGludGVycnVwdHMgKi8KIAlibnh0X3NodXRkb3duX25pYyhicCwgaXJxX3JlX2luaXQpOwpAQCAtNDg2NSw3ICs0ODcwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJueHRfY2ZnX3J4X21vZGUoc3RydWN0IGJueHQgKmJwKQorc3RhdGljIGludCBibnh0X2NmZ19yeF9tb2RlKHN0cnVjdCBibnh0ICpicCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnAtPmRldjsKIAlzdHJ1Y3QgYm54dF92bmljX2luZm8gKnZuaWMgPSAmYnAtPnZuaWNfaW5mb1swXTsKQEAgLTQ5MTQsNiArNDkxOSw3IEBACiAJCQluZXRkZXZfZXJyKGJwLT5kZXYsICJIV1JNIHZuaWMgZmlsdGVyIGZhaWx1cmUgcmM6ICV4XG4iLAogCQkJCSAgIHJjKTsKIAkJCXZuaWMtPnVjX2ZpbHRlcl9jb3VudCA9IGk7CisJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CiAKQEAgLTQ5MjIsNiArNDkyOCw4IEBACiAJaWYgKHJjKQogCQluZXRkZXZfZXJyKGJwLT5kZXYsICJIV1JNIGNmYSBsMiByeCBtYXNrIGZhaWx1cmUgcmM6ICV4XG4iLAogCQkJICAgcmMpOworCisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYm54dF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTUwMjMsOCArNTAzMSwxMCBAQAogc3RhdGljIHZvaWQgYm54dF9yZXNldF90YXNrKHN0cnVjdCBibnh0ICpicCkKIHsKIAlibnh0X2RiZ19kdW1wX3N0YXRlcyhicCk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpCi0JCWJueHRfdHhfZGlzYWJsZShicCk7IC8qIHByZXZlbnQgdHggdGltb3V0IGFnYWluICovCisJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKKwkJYm54dF9jbG9zZV9uaWMoYnAsIGZhbHNlLCBmYWxzZSk7CisJCWJueHRfb3Blbl9uaWMoYnAsIGZhbHNlLCBmYWxzZSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibnh0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTUwNzQsOCArNTA4NCwxMiBAQAogCXN0cnVjdCBibnh0ICpicCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYm54dCwgc3BfdGFzayk7CiAJaW50IHJjOwogCi0JaWYgKGJwLT5zdGF0ZSAhPSBCTlhUX1NUQVRFX09QRU4pCisJc2V0X2JpdChCTlhUX1NUQVRFX0lOX1NQX1RBU0ssICZicC0+c3RhdGUpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CisJaWYgKCF0ZXN0X2JpdChCTlhUX1NUQVRFX09QRU4sICZicC0+c3RhdGUpKSB7CisJCWNsZWFyX2JpdChCTlhUX1NUQVRFX0lOX1NQX1RBU0ssICZicC0+c3RhdGUpOwogCQlyZXR1cm47CisJfQogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCTlhUX1JYX01BU0tfU1BfRVZFTlQsICZicC0+c3BfZXZlbnQpKQogCQlibnh0X2NmZ19yeF9tb2RlKGJwKTsKQEAgLTUwOTksOCArNTExMywxOSBAQAogCQlibnh0X2h3cm1fdHVubmVsX2RzdF9wb3J0X2ZyZWUoCiAJCQlicCwgVFVOTkVMX0RTVF9QT1JUX0ZSRUVfUkVRX1RVTk5FTF9UWVBFX1ZYTEFOKTsKIAl9Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCTlhUX1JFU0VUX1RBU0tfU1BfRVZFTlQsICZicC0+c3BfZXZlbnQpKQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQk5YVF9SRVNFVF9UQVNLX1NQX0VWRU5ULCAmYnAtPnNwX2V2ZW50KSkgeworCQkvKiBibnh0X3Jlc2V0X3Rhc2soKSBjYWxscyBibnh0X2Nsb3NlX25pYygpIHdoaWNoIHdhaXRzCisJCSAqIGZvciBCTlhUX1NUQVRFX0lOX1NQX1RBU0sgdG8gY2xlYXIuCisJCSAqLworCQljbGVhcl9iaXQoQk5YVF9TVEFURV9JTl9TUF9UQVNLLCAmYnAtPnN0YXRlKTsKKwkJcnRubF9sb2NrKCk7CiAJCWJueHRfcmVzZXRfdGFzayhicCk7CisJCXNldF9iaXQoQk5YVF9TVEFURV9JTl9TUF9UQVNLLCAmYnAtPnN0YXRlKTsKKwkJcnRubF91bmxvY2soKTsKKwl9CisKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKKwljbGVhcl9iaXQoQk5YVF9TVEFURV9JTl9TUF9UQVNLLCAmYnAtPnN0YXRlKTsKIH0KIAogc3RhdGljIGludCBibnh0X2luaXRfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01MTc5LDcgKzUyMDQsNyBAQAogCWJwLT50aW1lci5mdW5jdGlvbiA9IGJueHRfdGltZXI7CiAJYnAtPmN1cnJlbnRfaW50ZXJ2YWwgPSBCTlhUX1RJTUVSX0lOVEVSVkFMOwogCi0JYnAtPnN0YXRlID0gQk5YVF9TVEFURV9DTE9TRUQ7CisJY2xlYXJfYml0KEJOWFRfU1RBVEVfT1BFTiwgJmJwLT5zdGF0ZSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtNTIxMiwxMyArNTIzNywyNyBAQAogc3RhdGljIGludCBibnh0X2NoYW5nZV9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisJc3RydWN0IGJueHQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmMgPSAwOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisjaWZkZWYgQ09ORklHX0JOWFRfU1JJT1YKKwlpZiAoQk5YVF9WRihicCkgJiYgaXNfdmFsaWRfZXRoZXJfYWRkcihicC0+dmYubWFjX2FkZHIpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisjZW5kaWYKIAotCXJldHVybiAwOworCWlmIChldGhlcl9hZGRyX2VxdWFsKGFkZHItPnNhX2RhdGEsIGRldi0+ZGV2X2FkZHIpKQorCQlyZXR1cm4gMDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWJueHRfY2xvc2VfbmljKGJwLCBmYWxzZSwgZmFsc2UpOworCQlyYyA9IGJueHRfb3Blbl9uaWMoYnAsIGZhbHNlLCBmYWxzZSk7CisJfQorCisJcmV0dXJuIHJjOwogfQogCiAvKiBydG5sX2xvY2sgaGVsZCAqLwpAQCAtNTY4NiwxNSArNTcyNSwxMiBAQAogCWJueHRfc2V0X3RwYV9mbGFncyhicCk7CiAJYm54dF9zZXRfcmluZ19wYXJhbXMoYnApOwogCWRmbHRfcmluZ3MgPSBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpOwotCWlmIChCTlhUX1BGKGJwKSkgewotCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYnAtPnBmLm1hY19hZGRyLCBFVEhfQUxFTik7CisJaWYgKEJOWFRfUEYoYnApKQogCQlicC0+cGYubWF4X2lycXMgPSBtYXhfaXJxczsKLQl9IGVsc2UgewogI2lmIGRlZmluZWQoQ09ORklHX0JOWFRfU1JJT1YpCi0JCW1lbWNweShkZXYtPmRldl9hZGRyLCBicC0+dmYubWFjX2FkZHIsIEVUSF9BTEVOKTsKKwllbHNlCiAJCWJwLT52Zi5tYXhfaXJxcyA9IG1heF9pcnFzOwogI2VuZGlmCi0JfQogCWJueHRfZ2V0X21heF9yaW5ncyhicCwgJm1heF9yeF9yaW5ncywgJm1heF90eF9yaW5ncyk7CiAJYnAtPnJ4X25yX3JpbmdzID0gbWluX3QoaW50LCBkZmx0X3JpbmdzLCBtYXhfcnhfcmluZ3MpOwogCWJwLT50eF9ucl9yaW5nc19wZXJfdGMgPSBtaW5fdChpbnQsIGRmbHRfcmluZ3MsIG1heF90eF9yaW5ncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oCmluZGV4IDY3NGJjNTEuLmYxOTlmNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5oCkBAIC05MjUsOSArOTI1LDkgQEAKIAogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCi0JaW50CQkJc3RhdGU7Ci0jZGVmaW5lIEJOWFRfU1RBVEVfQ0xPU0VECTAKLSNkZWZpbmUgQk5YVF9TVEFURV9PUEVOCQkxCisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CisjZGVmaW5lIEJOWFRfU1RBVEVfT1BFTgkJMAorI2RlZmluZSBCTlhUX1NUQVRFX0lOX1NQX1RBU0sJMQogCiAJc3RydWN0IGJueHRfaXJxCSppcnFfdGJsOwogCXU4CQkJbWFjX2FkZHJbRVRIX0FMRU5dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYwppbmRleCBmNGNmNjg4Li5lYTA0NGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfc3Jpb3YuYwpAQCAtMjEsNyArMjEsNyBAQAogI2lmZGVmIENPTkZJR19CTlhUX1NSSU9WCiBzdGF0aWMgaW50IGJueHRfdmZfbmRvX3ByZXAoc3RydWN0IGJueHQgKmJwLCBpbnQgdmZfaWQpCiB7Ci0JaWYgKGJwLT5zdGF0ZSAhPSBCTlhUX1NUQVRFX09QRU4pIHsKKwlpZiAoIXRlc3RfYml0KEJOWFRfU1RBVEVfT1BFTiwgJmJwLT5zdGF0ZSkpIHsKIAkJbmV0ZGV2X2VycihicC0+ZGV2LCAidmYgbmRvIGNhbGxlZCB0aG91Z2ggUEYgaXMgZG93blxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTgwNCwxMCArODA0LDkgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocmVzcC0+cGVybV9tYWNfYWRkcmVzcykpCiAJCWdvdG8gdXBkYXRlX3ZmX21hY19leGl0OwogCi0JaWYgKGV0aGVyX2FkZHJfZXF1YWwocmVzcC0+cGVybV9tYWNfYWRkcmVzcywgYnAtPnZmLm1hY19hZGRyKSkKLQkJZ290byB1cGRhdGVfdmZfbWFjX2V4aXQ7Ci0KLQltZW1jcHkoYnAtPnZmLm1hY19hZGRyLCByZXNwLT5wZXJtX21hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJaWYgKCFldGhlcl9hZGRyX2VxdWFsKHJlc3AtPnBlcm1fbWFjX2FkZHJlc3MsIGJwLT52Zi5tYWNfYWRkcikpCisJCW1lbWNweShicC0+dmYubWFjX2FkZHIsIHJlc3AtPnBlcm1fbWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwkvKiBvdmVyd3JpdGUgbmV0ZGV2IGRldl9hZHIgd2l0aCBhZG1pbiBWRiBNQUMgKi8KIAltZW1jcHkoYnAtPmRldi0+ZGV2X2FkZHIsIGJwLT52Zi5tYWNfYWRkciwgRVRIX0FMRU4pOwogdXBkYXRlX3ZmX21hY19leGl0OgogCW11dGV4X3VubG9jaygmYnAtPmh3cm1fY21kX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuYwppbmRleCA4OGMxZTFhLi4xNjkwNTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuYwpAQCAtMTY4Miw2ICsxNjgyLDggQEAKIAltYWNiX3NldF9od2FkZHIoYnApOwogCiAJY29uZmlnID0gbWFjYl9tZGNfY2xrX2RpdihicCk7CisJaWYgKGJwLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKKwkJY29uZmlnIHw9IEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCk7CiAJY29uZmlnIHw9IE1BQ0JfQkYoUkJPRiwgTkVUX0lQX0FMSUdOKTsJLyogTWFrZSBldGggZGF0YSBhbGlnbmVkICovCiAJY29uZmlnIHw9IE1BQ0JfQklUKFBBRSk7CQkvKiBQQXVzZSBFbmFibGUgKi8KIAljb25maWcgfD0gTUFDQl9CSVQoRFJGQ1MpOwkJLyogRGlzY2FyZCBSeCBGQ1MgKi8KQEAgLTI0MTYsNiArMjQxOCw4IEBACiAJLyogU2V0IE1JSSBtYW5hZ2VtZW50IGNsb2NrIGRpdmlkZXIgKi8KIAl2YWwgPSBtYWNiX21kY19jbGtfZGl2KGJwKTsKIAl2YWwgfD0gbWFjYl9kYncoYnApOworCWlmIChicC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpCisJCXZhbCB8PSBHRU1fQklUKFNHTUlJRU4pIHwgR0VNX0JJVChQQ1NTRUwpOwogCW1hY2Jfd3JpdGVsKGJwLCBOQ0ZHUiwgdmFsKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAppbmRleCA2ZTFmYWVhLi5kODNiMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaApAQCAtMjE1LDEyICsyMTUsMTcgQEAKIC8qIEdFTSBzcGVjaWZpYyBOQ0ZHUiBiaXRmaWVsZHMuICovCiAjZGVmaW5lIEdFTV9HQkVfT0ZGU0VUCQkxMCAvKiBHaWdhYml0IG1vZGUgZW5hYmxlICovCiAjZGVmaW5lIEdFTV9HQkVfU0laRQkJMQorI2RlZmluZSBHRU1fUENTU0VMX09GRlNFVAkxMQorI2RlZmluZSBHRU1fUENTU0VMX1NJWkUJCTEKICNkZWZpbmUgR0VNX0NMS19PRkZTRVQJCTE4IC8qIE1EQyBjbG9jayBkaXZpc2lvbiAqLwogI2RlZmluZSBHRU1fQ0xLX1NJWkUJCTMKICNkZWZpbmUgR0VNX0RCV19PRkZTRVQJCTIxIC8qIERhdGEgYnVzIHdpZHRoICovCiAjZGVmaW5lIEdFTV9EQldfU0laRQkJMgogI2RlZmluZSBHRU1fUlhDT0VOX09GRlNFVAkyNAogI2RlZmluZSBHRU1fUlhDT0VOX1NJWkUJCTEKKyNkZWZpbmUgR0VNX1NHTUlJRU5fT0ZGU0VUCTI3CisjZGVmaW5lIEdFTV9TR01JSUVOX1NJWkUJMQorCiAKIC8qIENvbnN0YW50cyBmb3IgZGF0YSBidXMgd2lkdGguICovCiAjZGVmaW5lIEdFTV9EQlczMgkJMCAvKiAzMiBiaXQgQU1CQSBBSEIgZGF0YSBidXMgd2lkdGggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMKaW5kZXggZjY4M2Q5Ny4uYjg5NTA0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMKQEAgLTU2MCw3ICs1NjAsNyBAQAogI2VuZGlmCiAKIC8qIEZvciBQQ0ktRSBBZHZhbmNlZCBFcnJvciBSZWNvdmVyeSAoQUVSKSBJbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGxpcXVpZGlvX2Vycl9oYW5kbGVyID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbGlxdWlkaW9fZXJyX2hhbmRsZXIgPSB7CiAJLmVycm9yX2RldGVjdGVkID0gbGlxdWlkaW9fcGNpZV9lcnJvcl9kZXRlY3RlZCwKIAkubW1pb19lbmFibGVkCT0gbGlxdWlkaW9fcGNpZV9tbWlvX2VuYWJsZWQsCiAJLnNsb3RfcmVzZXQJPSBsaXF1aWRpb19wY2llX3Nsb3RfcmVzZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vdGh1bmRlci9uaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL25pYy5oCmluZGV4IGQzOTUwYjIuLjM5Y2E2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL25pYy5oCkBAIC0xMjAsMTAgKzEyMCw5IEBACiAgKiBDYWxjdWxhdGVkIGZvciBTQ0xLIG9mIDcwME1oegogICogdmFsdWUgd3JpdHRlbiBzaG91bGQgYmUgYSAxLzE2dGggb2Ygd2hhdCBpcyBleHBlY3RlZAogICoKLSAqIDEgdGljayBwZXIgMC4wNXVzZWMgPSB2YWx1ZSBvZiAyLjIKLSAqIFRoaXMgMTAlIHdvdWxkIGJlIGNvdmVyZWQgaW4gQ1EgdGltZXIgdGhyZXNoIHZhbHVlCisgKiAxIHRpY2sgcGVyIDAuMDI1dXNlYwogICovCi0jZGVmaW5lIE5JQ1BGX0NMS19QRVJfSU5UX1RJQ0sJCTIKKyNkZWZpbmUgTklDUEZfQ0xLX1BFUl9JTlRfVElDSwkJMQogCiAvKiBUaW1lIHRvIHdhaXQgYmVmb3JlIHdlIGRlY2lkZSB0aGF0IGEgU1EgaXMgc3R1Y2suCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL25pY19tYWluLmMKaW5kZXggYzU2MWZkYy4uNWYyNGQxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vdGh1bmRlci9uaWNfbWFpbi5jCkBAIC02MTUsNiArNjE1LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG5pY19lbmFibGVfdmYoc3RydWN0IG5pY3BmICpuaWMsIGludCB2ZiwgYm9vbCBlbmFibGUpCit7CisJaW50IGJneCwgbG1hYzsKKworCW5pYy0+dmZfZW5hYmxlZFt2Zl0gPSBlbmFibGU7CisKKwlpZiAodmYgPj0gbmljLT5udW1fdmZfZW4pCisJCXJldHVybjsKKworCWJneCA9IE5JQ19HRVRfQkdYX0ZST01fVkZfTE1BQ19NQVAobmljLT52Zl9sbWFjX21hcFt2Zl0pOworCWxtYWMgPSBOSUNfR0VUX0xNQUNfRlJPTV9WRl9MTUFDX01BUChuaWMtPnZmX2xtYWNfbWFwW3ZmXSk7CisKKwliZ3hfbG1hY19yeF90eF9lbmFibGUobmljLT5ub2RlLCBiZ3gsIGxtYWMsIGVuYWJsZSk7Cit9CisKIC8qIEludGVycnVwdCBoYW5kbGVyIHRvIGhhbmRsZSBtYWlsYm94IG1lc3NhZ2VzIGZyb20gVkZzICovCiBzdGF0aWMgdm9pZCBuaWNfaGFuZGxlX21ieF9pbnRyKHN0cnVjdCBuaWNwZiAqbmljLCBpbnQgdmYpCiB7CkBAIC03MTQsMTQgKzcyOSwxNCBAQAogCQlicmVhazsKIAljYXNlIE5JQ19NQk9YX01TR19DRkdfRE9ORToKIAkJLyogTGFzdCBtZXNzYWdlIG9mIFZGIGNvbmZpZyBtc2cgc2VxdWVuY2UgKi8KLQkJbmljLT52Zl9lbmFibGVkW3ZmXSA9IHRydWU7CisJCW5pY19lbmFibGVfdmYobmljLCB2ZiwgdHJ1ZSk7CiAJCWdvdG8gdW5sb2NrOwogCWNhc2UgTklDX01CT1hfTVNHX1NIVVRET1dOOgogCQkvKiBGaXJzdCBtc2cgaW4gVkYgdGVhcmRvd24gc2VxdWVuY2UgKi8KLQkJbmljLT52Zl9lbmFibGVkW3ZmXSA9IGZhbHNlOwogCQlpZiAodmYgPj0gbmljLT5udW1fdmZfZW4pCiAJCQluaWMtPnNxc191c2VkW3ZmIC0gbmljLT5udW1fdmZfZW5dID0gZmFsc2U7CiAJCW5pYy0+cHFzX3ZmW3ZmXSA9IDA7CisJCW5pY19lbmFibGVfdmYobmljLCB2ZiwgZmFsc2UpOwogCQlicmVhazsKIAljYXNlIE5JQ19NQk9YX01TR19BTExPQ19TUVM6CiAJCW5pY19hbGxvY19zcXMobmljLCAmbWJ4LnNxc19hbGxvYyk7CkBAIC0xMDc0LDggKzEwODksNyBAQAogCiAJaWYgKG5pYy0+Y2hlY2tfbGluaykgewogCQkvKiBEZXN0cm95IHdvcmsgUXVldWUgKi8KLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmbmljLT5kd29yayk7Ci0JCWZsdXNoX3dvcmtxdWV1ZShuaWMtPmNoZWNrX2xpbmspOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm5pYy0+ZHdvcmspOwogCQlkZXN0cm95X3dvcmtxdWV1ZShuaWMtPmNoZWNrX2xpbmspOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvbmljdmZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvbmljdmZfZXRodG9vbC5jCmluZGV4IGFmNTRjMTAuLmExMmIyZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL25pY3ZmX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vdGh1bmRlci9uaWN2Zl9ldGh0b29sLmMKQEAgLTExMiw2ICsxMTIsMTMgQEAKIAogCWNtZC0+c3VwcG9ydGVkID0gMDsKIAljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKKworCWlmICghbmljLT5saW5rX3VwKSB7CisJCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX1VOS05PV047CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEX1VOS05PV04pOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAobmljLT5zcGVlZCA8PSAxMDAwKSB7CiAJCWNtZC0+cG9ydCA9IFBPUlRfTUlJOwogCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKQEAgLTEyNSw2ICsxMzIsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUzMiBuaWN2Zl9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBuaWN2ZiAqbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXJldHVybiBuaWMtPmxpbmtfdXA7Cit9CisKIHN0YXRpYyB2b2lkIG5pY3ZmX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewpAQCAtNjYwLDcgKzY3NCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmljdmZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwkJPSBuaWN2Zl9nZXRfc2V0dGluZ3MsCi0JLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9saW5rCQk9IG5pY3ZmX2dldF9saW5rLAogCS5nZXRfZHJ2aW5mbwkJPSBuaWN2Zl9nZXRfZHJ2aW5mbywKIAkuZ2V0X21zZ2xldmVsCQk9IG5pY3ZmX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IG5pY3ZmX3NldF9tc2dsZXZlbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL25pY3ZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL25pY3ZmX21haW4uYwppbmRleCBhOTM3NzcyLi5kZGU4ZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vdGh1bmRlci9uaWN2Zl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvbmljdmZfbWFpbi5jCkBAIC0xMDU3LDYgKzEwNTcsNyBAQAogCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmljLT5uZXRkZXYpOworCW5pYy0+bGlua191cCA9IGZhbHNlOwogCiAJLyogVGVhcmRvd24gc2Vjb25kYXJ5IHFzZXRzIGZpcnN0ICovCiAJaWYgKCFuaWMtPnNxc19tb2RlKSB7CkBAIC0xMjExLDkgKzEyMTIsNiBAQAogCW5pYy0+ZHJ2X3N0YXRzLnR4cV9zdG9wID0gMDsKIAluaWMtPmRydl9zdGF0cy50eHFfd2FrZSA9IDA7CiAKLQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwotCiAJcmV0dXJuIDA7CiBjbGVhbnVwOgogCW5pY3ZmX2Rpc2FibGVfaW50cihuaWMsIE5JQ1ZGX0lOVFJfTUJPWCwgMCk7CkBAIC0xNTgzLDggKzE1ODEsMTQgQEAKIHN0YXRpYyB2b2lkIG5pY3ZmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBuaWN2ZiAqbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcG5ldGRldiA9IG5pYy0+cG5pY3ZmLT5uZXRkZXY7CisJc3RydWN0IG5pY3ZmICpuaWM7CisJc3RydWN0IG5ldF9kZXZpY2UgKnBuZXRkZXY7CisKKwlpZiAoIW5ldGRldikKKwkJcmV0dXJuOworCisJbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlwbmV0ZGV2ID0gbmljLT5wbmljdmYtPm5ldGRldjsKIAogCS8qIENoZWNrIGlmIHRoaXMgUXNldCBpcyBhc3NpZ25lZCB0byBkaWZmZXJlbnQgVkYuCiAJICogSWYgeWVzLCBjbGVhbiBwcmltYXJ5IGFuZCBhbGwgc2Vjb25kYXJ5IFFzZXRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvbmljdmZfcXVldWVzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vdGh1bmRlci9uaWN2Zl9xdWV1ZXMuYwppbmRleCBlNDA0ZWE4Li4yMDZiNmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vdGh1bmRlci9uaWN2Zl9xdWV1ZXMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vdGh1bmRlci9uaWN2Zl9xdWV1ZXMuYwpAQCAtNTkyLDcgKzU5Miw3IEBACiAJLyogU2V0IHRocmVzaG9sZCB2YWx1ZSBmb3IgaW50ZXJydXB0IGdlbmVyYXRpb24gKi8KIAluaWN2Zl9xdWV1ZV9yZWdfd3JpdGUobmljLCBOSUNfUVNFVF9DUV8wXzdfVEhSRVNILCBxaWR4LCBjcS0+dGhyZXNoKTsKIAluaWN2Zl9xdWV1ZV9yZWdfd3JpdGUobmljLCBOSUNfUVNFVF9DUV8wXzdfQ0ZHMiwKLQkJCSAgICAgIHFpZHgsIG5pYy0+Y3FfY29hbGVzY2VfdXNlY3MpOworCQkJICAgICAgcWlkeCwgQ01QX1FVRVVFX1RJTUVSX1RIUkVTSCk7CiB9CiAKIC8qIENvbmZpZ3VyZXMgdHJhbnNtaXQgcXVldWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL25pY3ZmX3F1ZXVlcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvbmljdmZfcXVldWVzLmgKaW5kZXggZmI0OTU3ZC4uMDMzZTgzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvbmljdmZfcXVldWVzLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvbmljdmZfcXVldWVzLmgKQEAgLTc2LDcgKzc2LDcgQEAKICNkZWZpbmUgQ01QX1FTSVpFCQlDTVBfUVVFVUVfU0laRTIKICNkZWZpbmUgQ01QX1FVRVVFX0xFTgkJKDFVTEwgPDwgKENNUF9RU0laRSArIDEwKSkKICNkZWZpbmUgQ01QX1FVRVVFX0NRRV9USFJFU0gJMAotI2RlZmluZSBDTVBfUVVFVUVfVElNRVJfVEhSRVNICTIyMCAvKiAxMHVzZWMgKi8KKyNkZWZpbmUgQ01QX1FVRVVFX1RJTUVSX1RIUkVTSAk4MCAvKiB+MnVzZWMgKi8KIAogI2RlZmluZSBSQkRSX1NJWkUJCVJCRFJfU0laRTAKICNkZWZpbmUgUkNWX0JVRl9DT1VOVAkJKDFVTEwgPDwgKFJCRFJfU0laRSArIDEzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL3RodW5kZXJfYmd4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vdGh1bmRlci90aHVuZGVyX2JneC5jCmluZGV4IDE4MGFhOWYuLjlkZjI2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL3RodW5kZXJfYmd4LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvdGh1bmRlcl9iZ3guYwpAQCAtMTg2LDYgKzE4NiwyMyBAQAogfQogRVhQT1JUX1NZTUJPTChiZ3hfc2V0X2xtYWNfbWFjKTsKIAordm9pZCBiZ3hfbG1hY19yeF90eF9lbmFibGUoaW50IG5vZGUsIGludCBiZ3hfaWR4LCBpbnQgbG1hY2lkLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgYmd4ICpiZ3ggPSBiZ3hfdm5pY1sobm9kZSAqIE1BWF9CR1hfUEVSX0NOODhYWCkgKyBiZ3hfaWR4XTsKKwl1NjQgY2ZnOworCisJaWYgKCFiZ3gpCisJCXJldHVybjsKKworCWNmZyA9IGJneF9yZWdfcmVhZChiZ3gsIGxtYWNpZCwgQkdYX0NNUlhfQ0ZHKTsKKwlpZiAoZW5hYmxlKQorCQljZmcgfD0gQ01SX1BLVF9SWF9FTiB8IENNUl9QS1RfVFhfRU47CisJZWxzZQorCQljZmcgJj0gfihDTVJfUEtUX1JYX0VOIHwgQ01SX1BLVF9UWF9FTik7CisJYmd4X3JlZ193cml0ZShiZ3gsIGxtYWNpZCwgQkdYX0NNUlhfQ0ZHLCBjZmcpOworfQorRVhQT1JUX1NZTUJPTChiZ3hfbG1hY19yeF90eF9lbmFibGUpOworCiBzdGF0aWMgdm9pZCBiZ3hfc2dtaWlfY2hhbmdlX2xpbmtfc3RhdGUoc3RydWN0IGxtYWMgKmxtYWMpCiB7CiAJc3RydWN0IGJneCAqYmd4ID0gbG1hYy0+Ymd4OwpAQCAtNjEyLDYgKzYyOSw4IEBACiAJCWxtYWMtPmxhc3RfZHVwbGV4ID0gMTsKIAl9IGVsc2UgewogCQlsbWFjLT5saW5rX3VwID0gMDsKKwkJbG1hYy0+bGFzdF9zcGVlZCA9IFNQRUVEX1VOS05PV047CisJCWxtYWMtPmxhc3RfZHVwbGV4ID0gRFVQTEVYX1VOS05PV047CiAJfQogCiAJaWYgKGxtYWMtPmxhc3RfbGluayAhPSBsbWFjLT5saW5rX3VwKSB7CkBAIC02NTQsOCArNjczLDcgQEAKIAl9CiAKIAkvKiBFbmFibGUgbG1hYyAqLwotCWJneF9yZWdfbW9kaWZ5KGJneCwgbG1hY2lkLCBCR1hfQ01SWF9DRkcsCi0JCSAgICAgICBDTVJfRU4gfCBDTVJfUEtUX1JYX0VOIHwgQ01SX1BLVF9UWF9FTik7CisJYmd4X3JlZ19tb2RpZnkoYmd4LCBsbWFjaWQsIEJHWF9DTVJYX0NGRywgQ01SX0VOKTsKIAogCS8qIFJlc3RvcmUgZGVmYXVsdCBjZmcsIGluY2FzZSBsb3cgbGV2ZWwgZmlybXdhcmUgY2hhbmdlZCBpdCAqLwogCWJneF9yZWdfd3JpdGUoYmd4LCBsbWFjaWQsIEJHWF9DTVJYX1JYX0RNQUNfQ1RMLCAweDAzKTsKQEAgLTY5NSw4ICs3MTMsNyBAQAogCWxtYWMgPSAmYmd4LT5sbWFjW2xtYWNpZF07CiAJaWYgKGxtYWMtPmNoZWNrX2xpbmspIHsKIAkJLyogRGVzdHJveSB3b3JrIHF1ZXVlICovCi0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJmxtYWMtPmR3b3JrKTsKLQkJZmx1c2hfd29ya3F1ZXVlKGxtYWMtPmNoZWNrX2xpbmspOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmxtYWMtPmR3b3JrKTsKIAkJZGVzdHJveV93b3JrcXVldWUobG1hYy0+Y2hlY2tfbGluayk7CiAJfQogCkBAIC0xMDA5LDYgKzEwMjYsOSBAQAogCXN0cnVjdCBiZ3ggKmJneCA9IE5VTEw7CiAJdTggbG1hYzsKIAorCS8qIExvYWQgb2N0ZW9uIG1kaW8gZHJpdmVyICovCisJb2N0ZW9uX21kaW9idXNfZm9yY2VfbW9kX2RlcGVuY2VuY3koKTsKKwogCWJneCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqYmd4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFiZ3gpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvdGh1bmRlcl9iZ3guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL3RodW5kZXJfYmd4LmgKaW5kZXggMDdiN2VjNjYuLjE0OWUxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS90aHVuZGVyL3RodW5kZXJfYmd4LmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL3RodW5kZXIvdGh1bmRlcl9iZ3guaApAQCAtMTgyLDYgKzE4Miw4IEBACiAjZGVmaW5lIEJDQVNUX0FDQ0VQVAkxCiAjZGVmaW5lIENBTV9BQ0NFUFQJMQogCit2b2lkIG9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KHZvaWQpOwordm9pZCBiZ3hfbG1hY19yeF90eF9lbmFibGUoaW50IG5vZGUsIGludCBiZ3hfaWR4LCBpbnQgbG1hY2lkLCBib29sIGVuYWJsZSk7CiB2b2lkIGJneF9hZGRfZG1hY19hZGRyKHU2NCBkbWFjLCBpbnQgbm9kZSwgaW50IGJneF9pZHgsIGludCBsbWFjKTsKIHVuc2lnbmVkIGJneF9nZXRfbWFwKGludCBub2RlKTsKIGludCBiZ3hfZ2V0X2xtYWNfY291bnQoaW50IG5vZGUsIGludCBiZ3gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3R1bGlwX2NvcmUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC90dWxpcF9jb3JlLmMKaW5kZXggZWQ0MTU1OS4uYjU1MzQwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3R1bGlwX2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvdHVsaXBfY29yZS5jCkBAIC05OCw4ICs5OCw3IEBACiAjZWxpZiBkZWZpbmVkKF9fbWlwc19fKQogc3RhdGljIGludCBjc3IwID0gMHgwMDIwMDAwMCB8IDB4NDAwMDsKICNlbHNlCi0jd2FybmluZyBQcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIHVuZGVmaW5lZCEKLXN0YXRpYyBpbnQgY3NyMCA9IDB4MDBBMDAwMDAgfCAweDQ4MDA7CitzdGF0aWMgaW50IGNzcjA7CiAjZW5kaWYKIAogLyogT3BlcmF0aW9uYWwgcGFyYW1ldGVycyB0aGF0IHVzdWFsbHkgYXJlIG5vdCBjaGFuZ2VkLiAqLwpAQCAtMTk4Miw2ICsxOTgxLDEyIEBACiAJcHJfaW5mbygiJXMiLCB2ZXJzaW9uKTsKICNlbmRpZgogCisJaWYgKCFjc3IwKSB7CisJCXByX3dhcm4oInR1bGlwOiB1bmtub3duIENQVSBhcmNoaXRlY3R1cmUsIHVzaW5nIGRlZmF1bHQgY3NyMFxuIik7CisJCS8qIGRlZmF1bHQgdG8gOCBsb25nd29yZCBjYWNoZSBsaW5lIGFsaWdubWVudCAqLworCQljc3IwID0gMHgwMEEwMDAwMCB8IDB4NDgwMDsKKwl9CisKIAkvKiBjb3B5IG1vZHVsZSBwYXJtcyBpbnRvIGdsb2JhbHMgKi8KIAl0dWxpcF9yeF9jb3B5YnJlYWsgPSByeF9jb3B5YnJlYWs7CiAJdHVsaXBfbWF4X2ludGVycnVwdF93b3JrID0gbWF4X2ludGVycnVwdF93b3JrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCA5YmViM2QzLi4zYzBlNGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtOTA3LDcgKzkwNyw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQykgfHwgZGVmaW5lZCAoQ09ORklHX1BBUklTQykgfHwgZGVmaW5lZChDT05GSUdfQVJNKQogCWkgfD0gMHg0ODAwOwogI2Vsc2UKLSN3YXJuaW5nIFByb2Nlc3NvciBhcmNoaXRlY3R1cmUgdW5kZWZpbmVkCisJZGV2X3dhcm4oJmRldi0+ZGV2LCAidW5rbm93biBDUFUgYXJjaGl0ZWN0dXJlLCB1c2luZyBkZWZhdWx0IGNzcjAgc2V0dGluZ1xuIik7CiAJaSB8PSAweDQ4MDA7CiAjZW5kaWYKIAlpb3dyaXRlMzIoaSwgaW9hZGRyICsgUENJQnVzQ2ZnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RsaW5rL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kbGluay9LY29uZmlnCmluZGV4IGY2ZTg1OGQuLmViZGM4MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RsaW5rL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGxpbmsvS2NvbmZpZwpAQCAtMTcsMTUgKzE3LDE2IEBACiBpZiBORVRfVkVORE9SX0RMSU5LCiAKIGNvbmZpZyBETDJLCi0JdHJpc3RhdGUgIkRMMjAwMC9UQzkwMngtYmFzZWQgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgorCXRyaXN0YXRlICJETDIwMDAvVEM5MDJ4L0lQMTAwMEEtYmFzZWQgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IENSQzMyCiAJLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgREwyMDAwL1RDOTAyeC1iYXNlZCBHaWdhYml0IGV0aGVybmV0IGNhcmRzLAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgREwyMDAwL1RDOTAyeC9JUDEwMDBBLWJhc2VkIEdpZ2FiaXQgZXRoZXJuZXQgY2FyZHMsCiAJICB3aGljaCBpbmNsdWRlcwogCSAgRC1MaW5rIERHRS01NTBUIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlci4KIAkgIEQtTGluayBETDIwMDAtYmFzZWQgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyLgogCSAgU3VuZGFuY2UvVGFtYXJhY2sgVEM5MDJ4IEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlci4KKwkgIElDUGx1cyBJUDEwMDBBLWJhc2VkIGNhcmRzCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRsMmsuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kbGluay9kbDJrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kbGluay9kbDJrLmMKaW5kZXggY2YwYTVmYy4uY2NjYTQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGxpbmsvZGwyay5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RsaW5rL2RsMmsuYwpAQCAtMjUzLDYgKzI1MywxOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF91bm1hcF9yeDsKIAorCWlmIChucC0+Y2hpcF9pZCA9PSBDSElQX0lQMTAwMEEgJiYKKwkgICAgKG5wLT5wZGV2LT5yZXZpc2lvbiA9PSAweDQwIHx8IG5wLT5wZGV2LT5yZXZpc2lvbiA9PSAweDQxKSkgeworCQkvKiBQSFkgbWFnaWMgdGFrZW4gZnJvbSBpcGcgZHJpdmVyLCB1bmRvY3VtZW50ZWQgcmVnaXN0ZXJzICovCisJCW1paV93cml0ZShkZXYsIG5wLT5waHlfYWRkciwgMzEsIDB4MDAwMSk7CisJCW1paV93cml0ZShkZXYsIG5wLT5waHlfYWRkciwgMjcsIDB4MDFlMCk7CisJCW1paV93cml0ZShkZXYsIG5wLT5waHlfYWRkciwgMzEsIDB4MDAwMik7CisJCW1paV93cml0ZShkZXYsIG5wLT5waHlfYWRkciwgMjcsIDB4ZWI4ZSk7CisJCW1paV93cml0ZShkZXYsIG5wLT5waHlfYWRkciwgMzEsIDB4MDAwMCk7CisJCW1paV93cml0ZShkZXYsIG5wLT5waHlfYWRkciwgMzAsIDB4MDA1ZSk7CisJCS8qIGFkdmVydGlzZSAxMDAwQkFTRS1UIGhhbGYgJiBmdWxsIGR1cGxleCwgcHJlZmVyIE1BU1RFUiAqLworCQltaWlfd3JpdGUoZGV2LCBucC0+cGh5X2FkZHIsIE1JSV9DVFJMMTAwMCwgMHgwNzAwKTsKKwl9CisKIAkvKiBGaWJlciBkZXZpY2U/ICovCiAJbnAtPnBoeV9tZWRpYSA9IChkcjE2KEFTSUNDdHJsKSAmIFBoeU1lZGlhKSA/IDEgOiAwOwogCW5wLT5saW5rX3N0YXR1cyA9IDA7CkBAIC0zNjEsNiArMzc0LDExIEBACiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJZGV2LT5kZXZfYWRkcltpXSA9IHBzcm9tLT5tYWNfYWRkcltpXTsKIAorCWlmIChucC0+Y2hpcF9pZCA9PSBDSElQX0lQMTAwMEEpIHsKKwkJbnAtPmxlZF9tb2RlID0gcHNyb20tPmxlZF9tb2RlOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAobnAtPnBkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0RMSU5LKSB7CiAJCXJldHVybiAwOwogCX0KQEAgLTQwNiw2ICs0MjQsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcmlvX3NldF9sZWRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbnAtPmlvYWRkcjsKKwl1MzIgbW9kZTsKKworCWlmIChucC0+Y2hpcF9pZCAhPSBDSElQX0lQMTAwMEEpCisJCXJldHVybjsKKworCW1vZGUgPSBkcjMyKEFTSUNDdHJsKTsKKwltb2RlICY9IH4oSVBHX0FDX0xFRF9NT0RFX0JJVF8xIHwgSVBHX0FDX0xFRF9NT0RFIHwgSVBHX0FDX0xFRF9TUEVFRCk7CisKKwlpZiAobnAtPmxlZF9tb2RlICYgMHgwMSkKKwkJbW9kZSB8PSBJUEdfQUNfTEVEX01PREU7CisJaWYgKG5wLT5sZWRfbW9kZSAmIDB4MDIpCisJCW1vZGUgfD0gSVBHX0FDX0xFRF9NT0RFX0JJVF8xOworCWlmIChucC0+bGVkX21vZGUgJiAweDA4KQorCQltb2RlIHw9IElQR19BQ19MRURfU1BFRUQ7CisKKwlkdzMyKEFTSUNDdHJsLCBtb2RlKTsKK30KKwogc3RhdGljIGludAogcmlvX29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC00MjQsNiArNDY0LDggQEAKIAkgICAgIEdsb2JhbFJlc2V0IHwgRE1BUmVzZXQgfCBGSUZPUmVzZXQgfCBOZXR3b3JrUmVzZXQgfCBIb3N0UmVzZXQpOwogCW1kZWxheSgxMCk7CiAKKwlyaW9fc2V0X2xlZF9tb2RlKGRldik7CisKIAkvKiBEZWJ1Z0N0cmwgYml0IDQsIDUsIDkgbXVzdCBzZXQgKi8KIAlkdzMyKERlYnVnQ3RybCwgZHIzMihEZWJ1Z0N0cmwpIHwgMHgwMjMwKTsKIApAQCAtNDMzLDkgKzQ3NSwxMyBAQAogCiAJYWxsb2NfbGlzdCAoZGV2KTsKIAotCS8qIEdldCBzdGF0aW9uIGFkZHJlc3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQlkdzgoU3RhdGlvbkFkZHIwICsgaSwgZGV2LT5kZXZfYWRkcltpXSk7CisJLyogU2V0IHN0YXRpb24gYWRkcmVzcyAqLworCS8qIDE2IG9yIDMyLWJpdCBhY2Nlc3MgaXMgcmVxdWlyZWQgYnkgVEM5MDIwIGRhdGFzaGVldCBidXQgOC1iaXQgd29ya3MKKwkgKiB0b28uIEhvd2V2ZXIsIGl0IGRvZXNuJ3Qgd29yayBvbiBJUDEwMDBBIHNvIHdlIHVzZSAxNi1iaXQgYWNjZXNzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWR3MTYoU3RhdGlvbkFkZHIwICsgMiAqIGksCisJCSAgICAgY3B1X3RvX2xlMTYoKCh1MTYgKilkZXYtPmRldl9hZGRyKVtpXSkpOwogCiAJc2V0X211bHRpY2FzdCAoZGV2KTsKIAlpZiAobnAtPmNvYWxlc2NlKSB7CkBAIC03ODAsNiArODI2LDcgQEAKIAkJCQlicmVhazsKIAkJCW1kZWxheSAoMSk7CiAJCX0KKwkJcmlvX3NldF9sZWRfbW9kZShkZXYpOwogCQlyaW9fZnJlZV90eCAoZGV2LCAxKTsKIAkJLyogUmVzZXQgVEZETGlzdFB0ciAqLwogCQlkdzMyKFRGRExpc3RQdHIwLCBucC0+dHhfcmluZ19kbWEgKwpAQCAtNzk5LDYgKzg0Niw3IEBACiAJCQkJYnJlYWs7CiAJCQltZGVsYXkgKDEpOwogCQl9CisJCXJpb19zZXRfbGVkX21vZGUoZGV2KTsKIAkJLyogTGV0IFR4U3RhcnRUaHJlc2ggc3RheSBkZWZhdWx0IHZhbHVlICovCiAJfQogCS8qIE1heGltdW0gQ29sbGlzaW9ucyAqLwpAQCAtOTY1LDYgKzEwMTMsNyBAQAogCQkJZGV2LT5uYW1lLCBpbnRfc3RhdHVzKTsKIAkJZHcxNihBU0lDQ3RybCArIDIsIEdsb2JhbFJlc2V0IHwgSG9zdFJlc2V0KTsKIAkJbWRlbGF5ICg1MDApOworCQlyaW9fc2V0X2xlZF9tb2RlKGRldik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kbGluay9kbDJrLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kbGluay9kbDJrLmgKaW5kZXggMjNjMDdiMC4uOGY0ZjYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGxpbmsvZGwyay5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RsaW5rL2RsMmsuaApAQCAtMjExLDYgKzIxMSwxMCBAQAogCVJlc2V0QnVzeSA9IDB4MDQwMCwKIH07CiAKKyNkZWZpbmUgSVBHX0FDX0xFRF9NT0RFCQlCSVQoMTQpCisjZGVmaW5lIElQR19BQ19MRURfU1BFRUQJQklUKDI3KQorI2RlZmluZSBJUEdfQUNfTEVEX01PREVfQklUXzEJQklUKDI5KQorCiAvKiBUcmFuc21pdCBGcmFtZSBDb250cm9sIGJpdHMgKi8KIGVudW0gVEZDX2JpdHMgewogCUR3b3JkQWxpZ24gPSAweDAwMDAwMDAwLApAQCAtMzMyLDcgKzMzNiwxMCBAQAogCXUxNiBhc2ljX2N0cmw7CQkvKiAweDAyICovCiAJdTE2IHN1Yl92ZW5kb3JfaWQ7CS8qIDB4MDQgKi8KIAl1MTYgc3ViX3N5c3RlbV9pZDsJLyogMHgwNiAqLwotCXUxNiByZXNlcnZlZDFbMTJdOwkvKiAweDA4LTB4MWYgKi8KKwl1MTYgcGNpX2Jhc2VfMTsJCS8qIDB4MDggKElQMTAwMEEgb25seSkgKi8KKwl1MTYgcGNpX2Jhc2VfMjsJCS8qIDB4MGEgKElQMTAwMEEgb25seSkgKi8KKwl1MTYgbGVkX21vZGU7CQkvKiAweDBjIChJUDEwMDBBIG9ubHkpICovCisJdTE2IHJlc2VydmVkMVs5XTsJLyogMHgwZS0weDFmICovCiAJdTggbWFjX2FkZHJbNl07CQkvKiAweDIwLTB4MjUgKi8KIAl1OCByZXNlcnZlZDJbMTBdOwkvKiAweDI2LTB4MmYgKi8KIAl1OCBzaWJbMjA0XTsJCS8qIDB4MzAtMHhmYiAqLwpAQCAtMzk3LDYgKzQwNCw3IEBACiAJdTE2IGFkdmVydGlzaW5nOwkvKiBOV2F5IG1lZGlhIGFkdmVydGlzZW1lbnQgKi8KIAl1MTYgbmVnb3RpYXRlOwkJLyogTmVnb3RpYXRlZCBtZWRpYSAqLwogCWludCBwaHlfYWRkcjsJCS8qIFBIWSBhZGRyZXNzZXMuICovCisJdTE2IGxlZF9tb2RlOwkJLyogTEVEIG1vZGUgcmVhZCBmcm9tIEVFUFJPTSAoSVAxMDAwQSBvbmx5KSAqLwogfTsKIAogLyogVGhlIHN0YXRpb24gYWRkcmVzcyBsb2NhdGlvbiBpbiB0aGUgRUVQUk9NLiAqLwpAQCAtNDA3LDEwICs0MTUsMTUgQEAKICAgICAgICAgY2xhc3NfbWFzayAgICAgICAgICAgICAgb2YgdGhlIGNsYXNzIGFyZSBob25vcmVkIGR1cmluZyB0aGUgY29tcGFyaXNvbi4KICAgICAgICAgZHJpdmVyX2RhdGEgICAgICAgICAgICAgRGF0YSBwcml2YXRlIHRvIHRoZSBkcml2ZXIuCiAqLworI2RlZmluZSBDSElQX0lQMTAwMEEJMQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcmlvX3BjaV90YmxbXSA9IHsKIAl7MHgxMTg2LCAweDQwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJezB4MTNmMCwgMHgxMDIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXsgUENJX1ZERVZJQ0UoU1VOREFOQ0UsCTB4MTAyMyksIENISVBfSVAxMDAwQSB9LAorCXsgUENJX1ZERVZJQ0UoU1VOREFOQ0UsCTB4MjAyMSksIENISVBfSVAxMDAwQSB9LAorCXsgUENJX1ZERVZJQ0UoRExJTkssCTB4OTAyMSksIENISVBfSVAxMDAwQSB9LAorCXsgUENJX1ZERVZJQ0UoRExJTkssCTB4NDAyMCksIENISVBfSVAxMDAwQSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcmlvX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmUuaAppbmRleCBkNDYzNTYzLi42ZWU3OGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmUuaApAQCAtODQ4LDggKzg0OCw2IEBACiAvKgogICogaW50ZXJuYWwgZnVuY3Rpb24gdG8gb3Blbi1jbG9zZSByb2NlIGRldmljZSBkdXJpbmcgaWZ1cC1pZmRvd24uCiAgKi8KLXZvaWQgYmVfcm9jZV9kZXZfb3BlbihzdHJ1Y3QgYmVfYWRhcHRlciAqKTsKLXZvaWQgYmVfcm9jZV9kZXZfY2xvc2Uoc3RydWN0IGJlX2FkYXB0ZXIgKik7CiB2b2lkIGJlX3JvY2VfZGV2X3NodXRkb3duKHN0cnVjdCBiZV9hZGFwdGVyICopOwogCiAjZW5kaWYJCQkJLyogQkVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmMKaW5kZXggZjRjYjhlNC4uNzM0ZjY1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfZXRodG9vbC5jCkBAIC0xMDYyLDkgKzEwNjIsNyBAQAogc3RhdGljIGludCBiZV9zZXRfcnNzX2hhc2hfb3B0cyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCQlzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKQogewotCXN0cnVjdCBiZV9yeF9vYmogKnJ4bzsKLQlpbnQgc3RhdHVzID0gMCwgaSwgajsKLQl1OCByc3N0YWJsZVsxMjhdOworCWludCBzdGF0dXM7CiAJdTMyIHJzc19mbGFncyA9IGFkYXB0ZXItPnJzc19pbmZvLnJzc19mbGFnczsKIAogCWlmIChjbWQtPmRhdGEgIT0gTDNfUlNTX0ZMQUdTICYmCkBAIC0xMTEzLDIwICsxMTExLDExIEBACiAJfQogCiAJaWYgKHJzc19mbGFncyA9PSBhZGFwdGVyLT5yc3NfaW5mby5yc3NfZmxhZ3MpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQlpZiAoYmVfbXVsdGlfcnhxKGFkYXB0ZXIpKSB7Ci0JCWZvciAoaiA9IDA7IGogPCAxMjg7IGogKz0gYWRhcHRlci0+bnVtX3Jzc19xcykgewotCQkJZm9yX2FsbF9yc3NfcXVldWVzKGFkYXB0ZXIsIHJ4bywgaSkgewotCQkJCWlmICgoaiArIGkpID49IDEyOCkKLQkJCQkJYnJlYWs7Ci0JCQkJcnNzdGFibGVbaiArIGldID0gcnhvLT5yc3NfaWQ7Ci0JCQl9Ci0JCX0KLQl9CisJCXJldHVybiAwOwogCiAJc3RhdHVzID0gYmVfY21kX3Jzc19jb25maWcoYWRhcHRlciwgYWRhcHRlci0+cnNzX2luZm8ucnNzdGFibGUsCi0JCQkJICAgcnNzX2ZsYWdzLCAxMjgsIGFkYXB0ZXItPnJzc19pbmZvLnJzc19oa2V5KTsKKwkJCQkgICByc3NfZmxhZ3MsIFJTU19JTkRJUl9UQUJMRV9MRU4sCisJCQkJICAgYWRhcHRlci0+cnNzX2luZm8ucnNzX2hrZXkpOwogCWlmICghc3RhdHVzKQogCQlhZGFwdGVyLT5yc3NfaW5mby5yc3NfZmxhZ3MgPSByc3NfZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jCmluZGV4IGViNDhhOTcuLjhhMWQ5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYwpAQCAtMzI5OSw4ICszMjk5LDEwIEBACiAKIAlyZXR1cm4gMDsKIGVycl9tc2l4OgotCWZvciAoaS0tLCBlcW8gPSAmYWRhcHRlci0+ZXFfb2JqW2ldOyBpID49IDA7IGktLSwgZXFvLS0pCisJZm9yIChpLS07IGkgPj0gMDsgaS0tKSB7CisJCWVxbyA9ICZhZGFwdGVyLT5lcV9vYmpbaV07CiAJCWZyZWVfaXJxKGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCBlcW8pLCBlcW8pOworCX0KIAlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAiTVNJWCBSZXF1ZXN0IElSUSBmYWlsZWQgLSBlcnIgJWRcbiIsCiAJCSBzdGF0dXMpOwogCWJlX21zaXhfZGlzYWJsZShhZGFwdGVyKTsKQEAgLTM0MzIsOCArMzQzNCw2IEBACiAKIAliZV9kaXNhYmxlX2lmX2ZpbHRlcnMoYWRhcHRlcik7CiAKLQliZV9yb2NlX2Rldl9jbG9zZShhZGFwdGVyKTsKLQogCWlmIChhZGFwdGVyLT5mbGFncyAmIEJFX0ZMQUdTX05BUElfRU5BQkxFRCkgewogCQlmb3JfYWxsX2V2dF9xdWV1ZXMoYWRhcHRlciwgZXFvLCBpKSB7CiAJCQluYXBpX2Rpc2FibGUoJmVxby0+bmFwaSk7CkBAIC0zNTE4LDcgKzM1MTgsNyBAQAogCiAJbmV0ZGV2X3Jzc19rZXlfZmlsbChyc3Nfa2V5LCBSU1NfSEFTSF9LRVlfTEVOKTsKIAlyYyA9IGJlX2NtZF9yc3NfY29uZmlnKGFkYXB0ZXIsIHJzcy0+cnNzdGFibGUsIHJzcy0+cnNzX2ZsYWdzLAotCQkJICAgICAgIDEyOCwgcnNzX2tleSk7CisJCQkgICAgICAgUlNTX0lORElSX1RBQkxFX0xFTiwgcnNzX2tleSk7CiAJaWYgKHJjKSB7CiAJCXJzcy0+cnNzX2ZsYWdzID0gUlNTX0VOQUJMRV9OT05FOwogCQlyZXR1cm4gcmM7CkBAIC0zNjAxLDggKzM2MDEsNiBAQAogCQliZV9saW5rX3N0YXR1c191cGRhdGUoYWRhcHRlciwgbGlua19zdGF0dXMpOwogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwotCWJlX3JvY2VfZGV2X29wZW4oYWRhcHRlcik7Ci0KICNpZmRlZiBDT05GSUdfQkUyTkVUX1ZYTEFOCiAJaWYgKHNreWhhd2tfY2hpcChhZGFwdGVyKSkKIAkJdnhsYW5fZ2V0X3J4X3BvcnQobmV0ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9yb2NlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfcm9jZS5jCmluZGV4IDYwMzY4MjAuLjQwODkxNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9yb2NlLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX3JvY2UuYwpAQCAtMTE2LDQwICsxMTYsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX2JlX3JvY2VfZGV2X29wZW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKG9jcmRtYV9kcnYgJiYgYWRhcHRlci0+b2NyZG1hX2RldiAmJgotCSAgICBvY3JkbWFfZHJ2LT5zdGF0ZV9jaGFuZ2VfaGFuZGxlcikKLQkJb2NyZG1hX2Rydi0+c3RhdGVfY2hhbmdlX2hhbmRsZXIoYWRhcHRlci0+b2NyZG1hX2RldiwKLQkJCQkJCSBCRV9ERVZfVVApOwotfQotCi12b2lkIGJlX3JvY2VfZGV2X29wZW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKGJlX3JvY2Vfc3VwcG9ydGVkKGFkYXB0ZXIpKSB7Ci0JCW11dGV4X2xvY2soJmJlX2FkYXB0ZXJfbGlzdF9sb2NrKTsKLQkJX2JlX3JvY2VfZGV2X29wZW4oYWRhcHRlcik7Ci0JCW11dGV4X3VubG9jaygmYmVfYWRhcHRlcl9saXN0X2xvY2spOwotCX0KLX0KLQotc3RhdGljIHZvaWQgX2JlX3JvY2VfZGV2X2Nsb3NlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCWlmIChvY3JkbWFfZHJ2ICYmIGFkYXB0ZXItPm9jcmRtYV9kZXYgJiYKLQkgICAgb2NyZG1hX2Rydi0+c3RhdGVfY2hhbmdlX2hhbmRsZXIpCi0JCW9jcmRtYV9kcnYtPnN0YXRlX2NoYW5nZV9oYW5kbGVyKGFkYXB0ZXItPm9jcmRtYV9kZXYsCi0JCQkJCQkgQkVfREVWX0RPV04pOwotfQotCi12b2lkIGJlX3JvY2VfZGV2X2Nsb3NlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCWlmIChiZV9yb2NlX3N1cHBvcnRlZChhZGFwdGVyKSkgewotCQltdXRleF9sb2NrKCZiZV9hZGFwdGVyX2xpc3RfbG9jayk7Ci0JCV9iZV9yb2NlX2Rldl9jbG9zZShhZGFwdGVyKTsKLQkJbXV0ZXhfdW5sb2NrKCZiZV9hZGFwdGVyX2xpc3RfbG9jayk7Ci0JfQotfQotCiB2b2lkIGJlX3JvY2VfZGV2X3NodXRkb3duKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCWlmIChiZV9yb2NlX3N1cHBvcnRlZChhZGFwdGVyKSkgewpAQCAtMTc3LDggKzE0Myw2IEBACiAKIAkJX2JlX3JvY2VfZGV2X2FkZChkZXYpOwogCQluZXRkZXYgPSBkZXYtPm5ldGRldjsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSAmJiBuZXRpZl9vcGVyX3VwKG5ldGRldikpCi0JCQlfYmVfcm9jZV9kZXZfb3BlbihkZXYpOwogCX0KIAltdXRleF91bmxvY2soJmJlX2FkYXB0ZXJfbGlzdF9sb2NrKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9yb2NlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfcm9jZS5oCmluZGV4IGNkZTZlZjkuLmZkZTYwOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9yb2NlLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX3JvY2UuaApAQCAtNjAsOSArNjAsNyBAQAogCXZvaWQgKCpzdGF0ZV9jaGFuZ2VfaGFuZGxlcikgKHN0cnVjdCBvY3JkbWFfZGV2ICosIHUzMiBuZXdfc3RhdGUpOwogfTsKIAotZW51bSB7Ci0JQkVfREVWX1VQCT0gMCwKLQlCRV9ERVZfRE9XTgk9IDEsCitlbnVtIGJlX3JvY2VfZXZlbnQgewogCUJFX0RFVl9TSFVURE9XTiA9IDIKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2V6Y2hpcC9ucHNfZW5ldC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZXpjaGlwL25wc19lbmV0LmMKaW5kZXggNjNjMmJjZi4uYjEwMjY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZXpjaGlwL25wc19lbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZXpjaGlwL25wc19lbmV0LmMKQEAgLTQ4LDIxICs0OCwxNSBAQAogCQkJKnJlZyA9IG5wc19lbmV0X3JlZ19nZXQocHJpdiwgTlBTX0VORVRfUkVHX1JYX0JVRik7CiAJZWxzZSB7IC8qICFkc3RfaXNfYWxpZ25lZCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHJlZysrKSB7Ci0JCQl1MzIgYnVmID0KLQkJCQlucHNfZW5ldF9yZWdfZ2V0KHByaXYsIE5QU19FTkVUX1JFR19SWF9CVUYpOwotCi0JCQkvKiB0byBhY2NvbW1vZGF0ZSB3b3JkLXVuYWxpZ25lZCBhZGRyZXNzIG9mICJyZWciCi0JCQkgKiB3ZSBoYXZlIHRvIGRvIG1lbWNweV90b2lvKCkgaW5zdGVhZCBvZiBzaW1wbGUgIj0iLgotCQkJICovCi0JCQltZW1jcHlfdG9pbygodm9pZCBfX2lvbWVtICopcmVnLCAmYnVmLCBzaXplb2YoYnVmKSk7CisJCQl1MzIgYnVmID0gbnBzX2VuZXRfcmVnX2dldChwcml2LCBOUFNfRU5FVF9SRUdfUlhfQlVGKTsKKwkJCXB1dF91bmFsaWduZWQoYnVmLCByZWcpOwogCQl9CiAJfQogCiAJLyogY29weSBsYXN0IGJ5dGVzIChpZiBhbnkpICovCiAJaWYgKGxhc3QpIHsKIAkJdTMyIGJ1ZiA9IG5wc19lbmV0X3JlZ19nZXQocHJpdiwgTlBTX0VORVRfUkVHX1JYX0JVRik7Ci0KLQkJbWVtY3B5X3RvaW8oKHZvaWQgX19pb21lbSAqKXJlZywgJmJ1ZiwgbGFzdCk7CisJCW1lbWNweSgodTgqKXJlZywgJmJ1ZiwgbGFzdCk7CiAJfQogfQogCkBAIC0zNjcsNyArMzYxLDcgQEAKIAlzdHJ1Y3QgbnBzX2VuZXRfdHhfY3RsIHR4X2N0cmw7CiAJc2hvcnQgbGVuZ3RoID0gc2tiLT5sZW47CiAJdTMyIGksIGxlbiA9IERJVl9ST1VORF9VUChsZW5ndGgsIHNpemVvZih1MzIpKTsKLQl1MzIgKnNyYyA9ICh1MzIgKil2aXJ0X3RvX3BoeXMoc2tiLT5kYXRhKTsKKwl1MzIgKnNyYyA9ICh2b2lkICopc2tiLT5kYXRhOwogCWJvb2wgc3JjX2lzX2FsaWduZWQgPSBJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXNyYywgc2l6ZW9mKHUzMikpOwogCiAJdHhfY3RybC52YWx1ZSA9IDA7CkBAIC0zNzUsMTcgKzM2OSwxMSBAQAogCWlmIChzcmNfaXNfYWxpZ25lZCkKIAkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBzcmMrKykKIAkJCW5wc19lbmV0X3JlZ19zZXQocHJpdiwgTlBTX0VORVRfUkVHX1RYX0JVRiwgKnNyYyk7Ci0JZWxzZSB7IC8qICFzcmNfaXNfYWxpZ25lZCAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHNyYysrKSB7Ci0JCQl1MzIgYnVmOworCWVsc2UgLyogIXNyY19pc19hbGlnbmVkICovCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgc3JjKyspCisJCQlucHNfZW5ldF9yZWdfc2V0KHByaXYsIE5QU19FTkVUX1JFR19UWF9CVUYsCisJCQkJCSBnZXRfdW5hbGlnbmVkKHNyYykpOwogCi0JCQkvKiB0byBhY2NvbW1vZGF0ZSB3b3JkLXVuYWxpZ25lZCBhZGRyZXNzIG9mICJzcmMiCi0JCQkgKiB3ZSBoYXZlIHRvIGRvIG1lbWNweV9mcm9taW8oKSBpbnN0ZWFkIG9mIHNpbXBsZSAiPSIKLQkJCSAqLwotCQkJbWVtY3B5X2Zyb21pbygmYnVmLCAodm9pZCBfX2lvbWVtICopc3JjLCBzaXplb2YoYnVmKSk7Ci0JCQlucHNfZW5ldF9yZWdfc2V0KHByaXYsIE5QU19FTkVUX1JFR19UWF9CVUYsIGJ1Zik7Ci0JCX0KLQl9CiAJLyogV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgRnJhbWUgKi8KIAl0eF9jdHJsLm50ID0gbGVuZ3RoOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnCmluZGV4IGZmNzZkNGUuLmJlZTMyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnCkBAIC03LDcgKzcsOCBAQAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gRlNMX1NPQyB8fCBRVUlDQ19FTkdJTkUgfHwgQ1BNMSB8fCBDUE0yIHx8IFBQQ19NUEM1MTJ4IHx8IFwKIAkJICAgTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgXAotCQkgICBBUkNIX01YQyB8fCBBUkNIX01YUyB8fCAoUFBDX01QQzUyeHggJiYgUFBDX0JFU1RDT01NKQorCQkgICBBUkNIX01YQyB8fCBBUkNIX01YUyB8fCAoUFBDX01QQzUyeHggJiYgUFBDX0JFU1RDT01NKSB8fCBcCisJCSAgIEFSQ0hfTEFZRVJTQ0FQRQogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9tYWMtZmNjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9tYWMtZmNjLmMKaW5kZXggMDhmNWI5MS4uNTJlMDA5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvbWFjLWZjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L21hYy1mY2MuYwpAQCAtNTUyLDcgKzU1Miw3IEBACiAJY2JkX3QgX19pb21lbSAqcHJldl9iZDsKIAljYmRfdCBfX2lvbWVtICpsYXN0X3R4X2JkOwogCi0JbGFzdF90eF9iZCA9IGZlcC0+dHhfYmRfYmFzZSArIChmcGktPnR4X3JpbmcgKiBzaXplb2YoY2JkX3QpKTsKKwlsYXN0X3R4X2JkID0gZmVwLT50eF9iZF9iYXNlICsgKChmcGktPnR4X3JpbmcgLSAxKSAqIHNpemVvZihjYmRfdCkpOwogCiAJLyogZ2V0IHRoZSBjdXJyZW50IGJkIGhlbGQgaW4gVEJQVFIgIGFuZCBzY2FuIGJhY2sgZnJvbSB0aGlzIHBvaW50ICovCiAJcmVjaGVja19iZCA9IGN1cnJfdGJwdHIgPSAoY2JkX3QgX19pb21lbSAqKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzbF9wcV9tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYwppbmRleCA1NWMzNjIzLi40MDA3MWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNsX3BxX21kaW8uYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJCQkgKiBhZGRyZXNzKS4gUHJpbnQgZXJyb3IgbWVzc2FnZSBidXQgY29udGludWUgYW55d2F5LgogCQkJICovCiAJCQlpZiAoKHZvaWQgKil0YmlwYSA+IHByaXYtPm1hcCArIHJlc291cmNlX3NpemUoJnJlcykgLSA0KQotCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgcmVnaXN0ZXIgbWFwIChzaG91bGQgYmUgYXQgbGVhc3QgMHglMDR4IHRvIGNvbnRhaW4gVEJJIGFkZHJlc3MpXG4iLAorCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgcmVnaXN0ZXIgbWFwIChzaG91bGQgYmUgYXQgbGVhc3QgMHglMDR6eCB0byBjb250YWluIFRCSSBhZGRyZXNzKVxuIiwKIAkJCQkJKCh2b2lkICopdGJpcGEgLSBwcml2LT5tYXApICsgNCk7CiAKIAkJCWlvd3JpdGUzMmJlKGJlMzJfdG9fY3B1cChwcm9wKSwgdGJpcGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMKaW5kZXggM2U2YjliNC4uM2UyMzNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jCkBAIC02NDcsOSArNjQ3LDkgQEAKIAlpZiAobW9kZWwgJiYgc3RyY2FzZWNtcChtb2RlbCwgIkZFQyIpKSB7CiAJCWdmYXJfaXJxKGdycCwgUlgpLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMSk7CiAJCWdmYXJfaXJxKGdycCwgRVIpLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMik7Ci0JCWlmIChnZmFyX2lycShncnAsIFRYKS0+aXJxID09IE5PX0lSUSB8fAotCQkgICAgZ2Zhcl9pcnEoZ3JwLCBSWCktPmlycSA9PSBOT19JUlEgfHwKLQkJICAgIGdmYXJfaXJxKGdycCwgRVIpLT5pcnEgPT0gTk9fSVJRKQorCQlpZiAoIWdmYXJfaXJxKGdycCwgVFgpLT5pcnEgfHwKKwkJICAgICFnZmFyX2lycShncnAsIFJYKS0+aXJxIHx8CisJCSAgICAhZ2Zhcl9pcnEoZ3JwLCBFUiktPmlycSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODk0LDcgKzg5NCw4IEBACiAJCQkJICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX1ZMQU4gfAogCQkJCSAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NQUdJQ19QQUNLRVQgfAogCQkJCSAgICAgRlNMX0dJQU5GQVJfREVWX0hBU19FWFRFTkRFRF9IQVNIIHwKLQkJCQkgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfVElNRVI7CisJCQkJICAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSIHwKKwkJCQkgICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfUlhfRklMRVI7CiAKIAllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgInBoeS1jb25uZWN0aW9uLXR5cGUiLCAmY3R5cGUpOwogCkBAIC0xMzk2LDggKzEzOTcsOSBAQAogCQlwcml2LT5yeF9xdWV1ZVtpXS0+cnhpYyA9IERFRkFVTFRfUlhJQzsKIAl9CiAKLQkvKiBhbHdheXMgZW5hYmxlIHJ4IGZpbGVyICovCi0JcHJpdi0+cnhfZmlsZXJfZW5hYmxlID0gMTsKKwkvKiBBbHdheXMgZW5hYmxlIHJ4IGZpbGVyIGlmIGF2YWlsYWJsZSAqLworCXByaXYtPnJ4X2ZpbGVyX2VuYWJsZSA9CisJICAgIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX1JYX0ZJTEVSKSA/IDEgOiAwOwogCS8qIEVuYWJsZSBtb3N0IG1lc3NhZ2VzIGJ5IGRlZmF1bHQgKi8KIAlwcml2LT5tc2dfZW5hYmxlID0gKE5FVElGX01TR19JRlVQIDw8IDEgKSAtIDE7CiAJLyogdXNlIHByaXRvcml0eSBoL3cgdHggcXVldWUgc2NoZWR1bGluZyBmb3Igc2luZ2xlIHF1ZXVlIGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oCmluZGV4IGYyNjZiMjAuLmNiNzc2NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaApAQCAtOTIzLDYgKzkyMyw3IEBACiAjZGVmaW5lIEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HCTB4MDAwMDA0MDAKICNkZWZpbmUgRlNMX0dJQU5GQVJfREVWX0hBU19USU1FUgkJMHgwMDAwMDgwMAogI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX1dBS0VfT05fRklMRVIJMHgwMDAwMTAwMAorI2RlZmluZSBGU0xfR0lBTkZBUl9ERVZfSEFTX1JYX0ZJTEVSCQkweDAwMDAyMDAwCiAKICNpZiAoTUFYR1JPVVBTID09IDIpCiAjZGVmaW5lIERFRkFVTFRfTUFQUElORyAJMHhBQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9wdHAuYwppbmRleCA2NjRkMGMyLi5iNDBmYmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9wdHAuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9wdHAuYwpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAKIAlldHNlY3RzLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CiAKLQlpZiAoZXRzZWN0cy0+aXJxID09IE5PX0lSUSkgeworCWlmIChldHNlY3RzLT5pcnEgPCAwKSB7CiAJCXByX2VycigiaXJxIG5vdCBpbiBkZXZpY2UgdHJlZVxuIik7CiAJCWdvdG8gbm9fbm9kZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFpbi5jCmluZGV4IDJhOThlYmEuLmI2NzQ0MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFpbi5jCkBAIC0xMjU5LDEyICsxMjU5LDggQEAKIAlpZiAoTUFDX0lTX0FMTF9aRVJPUyhtYWNfZW50cnktPmFkZHIpIHx8CiAJICAgIE1BQ19JU19CUk9BRENBU1QobWFjX2VudHJ5LT5hZGRyKSB8fAogCSAgICBNQUNfSVNfTVVMVElDQVNUKG1hY19lbnRyeS0+YWRkcikpIHsKLQkJZGV2X2Vycihkc2FmX2Rldi0+ZGV2LAotCQkJInNldF91YyAlcyBNYWMgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggZXJyIVxuIiwKLQkJCWRzYWZfZGV2LT5hZV9kZXYubmFtZSwgbWFjX2VudHJ5LT5hZGRyWzBdLAotCQkJbWFjX2VudHJ5LT5hZGRyWzFdLCBtYWNfZW50cnktPmFkZHJbMl0sCi0JCQltYWNfZW50cnktPmFkZHJbM10sIG1hY19lbnRyeS0+YWRkcls0XSwKLQkJCW1hY19lbnRyeS0+YWRkcls1XSk7CisJCWRldl9lcnIoZHNhZl9kZXYtPmRldiwgInNldF91YyAlcyBNYWMgJXBNIGVyciFcbiIsCisJCQlkc2FmX2Rldi0+YWVfZGV2Lm5hbWUsIG1hY19lbnRyeS0+YWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTMzMSwxMiArMTMyNyw4IEBACiAKIAkvKiBtYWMgYWRkciBjaGVjayAqLwogCWlmIChNQUNfSVNfQUxMX1pFUk9TKG1hY19lbnRyeS0+YWRkcikpIHsKLQkJZGV2X2Vycihkc2FmX2Rldi0+ZGV2LAotCQkJInNldCB1YyAlcyBNYWMgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggZXJyIVxuIiwKLQkJCWRzYWZfZGV2LT5hZV9kZXYubmFtZSwgbWFjX2VudHJ5LT5hZGRyWzBdLAotCQkJbWFjX2VudHJ5LT5hZGRyWzFdLCBtYWNfZW50cnktPmFkZHJbMl0sCi0JCQltYWNfZW50cnktPmFkZHJbM10sCi0JCQltYWNfZW50cnktPmFkZHJbNF0sIG1hY19lbnRyeS0+YWRkcls1XSk7CisJCWRldl9lcnIoZHNhZl9kZXYtPmRldiwgInNldCB1YyAlcyBNYWMgJXBNIGVyciFcbiIsCisJCQlkc2FmX2Rldi0+YWVfZGV2Lm5hbWUsIG1hY19lbnRyeS0+YWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTQxMCwxMSArMTQwMiw4IEBACiAKIAkvKmNoZWNoayBtYWMgYWRkciAqLwogCWlmIChNQUNfSVNfQUxMX1pFUk9TKG1hY19lbnRyeS0+YWRkcikpIHsKLQkJZGV2X2Vycihkc2FmX2Rldi0+ZGV2LAotCQkJInNldF9lbnRyeSBmYWlsZWQsYWRkciAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCFcbiIsCi0JCQltYWNfZW50cnktPmFkZHJbMF0sIG1hY19lbnRyeS0+YWRkclsxXSwKLQkJCW1hY19lbnRyeS0+YWRkclsyXSwgbWFjX2VudHJ5LT5hZGRyWzNdLAotCQkJbWFjX2VudHJ5LT5hZGRyWzRdLCBtYWNfZW50cnktPmFkZHJbNV0pOworCQlkZXZfZXJyKGRzYWZfZGV2LT5kZXYsICJzZXRfZW50cnkgZmFpbGVkLGFkZHIgJXBNIVxuIiwKKwkJCW1hY19lbnRyeS0+YWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTQ5Nyw5ICsxNDg2LDggQEAKIAogCS8qY2hlY2sgbWFjIGFkZHIgKi8KIAlpZiAoTUFDX0lTX0FMTF9aRVJPUyhhZGRyKSB8fCBNQUNfSVNfQlJPQURDQVNUKGFkZHIpKSB7Ci0JCWRldl9lcnIoZHNhZl9kZXYtPmRldiwKLQkJCSJkZWxfZW50cnkgZmFpbGVkLGFkZHIgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnghXG4iLAotCQkJYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwgYWRkclszXSwgYWRkcls0XSwgYWRkcls1XSk7CisJCWRldl9lcnIoZHNhZl9kZXYtPmRldiwgImRlbF9lbnRyeSBmYWlsZWQsYWRkciAlcE0hXG4iLAorCQkJYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTU2MywxMSArMTU1MSw4IEBACiAKIAkvKmNoZWNrIG1hYyBhZGRyICovCiAJaWYgKE1BQ19JU19BTExfWkVST1MobWFjX2VudHJ5LT5hZGRyKSkgewotCQlkZXZfZXJyKGRzYWZfZGV2LT5kZXYsCi0JCQkiZGVsX3BvcnQgZmFpbGVkLCBhZGRyICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IVxuIiwKLQkJCW1hY19lbnRyeS0+YWRkclswXSwgbWFjX2VudHJ5LT5hZGRyWzFdLAotCQkJbWFjX2VudHJ5LT5hZGRyWzJdLCBtYWNfZW50cnktPmFkZHJbM10sCi0JCQltYWNfZW50cnktPmFkZHJbNF0sIG1hY19lbnRyeS0+YWRkcls1XSk7CisJCWRldl9lcnIoZHNhZl9kZXYtPmRldiwgImRlbF9wb3J0IGZhaWxlZCwgYWRkciAlcE0hXG4iLAorCQkJbWFjX2VudHJ5LT5hZGRyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNjQ0LDExICsxNjI5LDggQEAKIAkvKiBjaGVjayBtYWNhZGRyICovCiAJaWYgKE1BQ19JU19BTExfWkVST1MobWFjX2VudHJ5LT5hZGRyKSB8fAogCSAgICBNQUNfSVNfQlJPQURDQVNUKG1hY19lbnRyeS0+YWRkcikpIHsKLQkJZGV2X2Vycihkc2FmX2Rldi0+ZGV2LAotCQkJImdldF9lbnRyeSBmYWlsZWQsYWRkciAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCW1hY19lbnRyeS0+YWRkclswXSwgbWFjX2VudHJ5LT5hZGRyWzFdLAotCQkJbWFjX2VudHJ5LT5hZGRyWzJdLCBtYWNfZW50cnktPmFkZHJbM10sCi0JCQltYWNfZW50cnktPmFkZHJbNF0sIG1hY19lbnRyeS0+YWRkcls1XSk7CisJCWRldl9lcnIoZHNhZl9kZXYtPmRldiwgImdldF9lbnRyeSBmYWlsZWQsYWRkciAlcE1cbiIsCisJCQltYWNfZW50cnktPmFkZHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE2OTUsMTEgKzE2NzcsOCBAQAogCS8qY2hlY2sgbWFjIGFkZHIgKi8KIAlpZiAoTUFDX0lTX0FMTF9aRVJPUyhtYWNfZW50cnktPmFkZHIpIHx8CiAJICAgIE1BQ19JU19CUk9BRENBU1QobWFjX2VudHJ5LT5hZGRyKSkgewotCQlkZXZfZXJyKGRzYWZfZGV2LT5kZXYsCi0JCQkiZ2V0X2VudHJ5IGZhaWxlZCxhZGRyICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkJbWFjX2VudHJ5LT5hZGRyWzBdLCBtYWNfZW50cnktPmFkZHJbMV0sCi0JCQltYWNfZW50cnktPmFkZHJbMl0sIG1hY19lbnRyeS0+YWRkclszXSwKLQkJCW1hY19lbnRyeS0+YWRkcls0XSwgbWFjX2VudHJ5LT5hZGRyWzVdKTsKKwkJZGV2X2Vycihkc2FmX2Rldi0+ZGV2LCAiZ2V0X2VudHJ5IGZhaWxlZCxhZGRyICVwTVxuIiwKKwkJCW1hY19lbnRyeS0+YWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9yZWcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfcmVnLmgKaW5kZXggYjQ3NWUxYi4uYmRiZDgwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9yZWcuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX3JlZy5oCkBAIC04OTgsNyArODk4LDcgQEAKICNkZWZpbmUgWEdNQUNfUEFVU0VfQ1RMX1JTUF9NT0RFX0IJMgogI2RlZmluZSBYR01BQ19QQVVTRV9DVExfVFhfWE9GRl9CCTMKIAotc3RhdGljIGlubGluZSB2b2lkIGRzYWZfd3JpdGVfcmVnKHZvaWQgKmJhc2UsIHUzMiByZWcsIHUzMiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2FmX3dyaXRlX3JlZyh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiByZWcsIHUzMiB2YWx1ZSkKIHsKIAl1OCBfX2lvbWVtICpyZWdfYWRkciA9IEFDQ0VTU19PTkNFKGJhc2UpOwogCkBAIC05MDgsNyArOTA4LDcgQEAKICNkZWZpbmUgZHNhZl93cml0ZV9kZXYoYSwgcmVnLCB2YWx1ZSkgXAogCWRzYWZfd3JpdGVfcmVnKChhKS0+aW9fYmFzZSwgKHJlZyksICh2YWx1ZSkpCiAKLXN0YXRpYyBpbmxpbmUgdTMyIGRzYWZfcmVhZF9yZWcodTggKmJhc2UsIHUzMiByZWcpCitzdGF0aWMgaW5saW5lIHUzMiBkc2FmX3JlYWRfcmVnKHU4IF9faW9tZW0gKmJhc2UsIHUzMiByZWcpCiB7CiAJdTggX19pb21lbSAqcmVnX2FkZHIgPSBBQ0NFU1NfT05DRShiYXNlKTsKIApAQCAtOTI3LDggKzkyNyw4IEBACiAjZGVmaW5lIGRzYWZfc2V0X2JpdChvcmlnaW4sIHNoaWZ0LCB2YWwpIFwKIAlkc2FmX3NldF9maWVsZCgob3JpZ2luKSwgKDF1bGwgPDwgKHNoaWZ0KSksIChzaGlmdCksICh2YWwpKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHNhZl9zZXRfcmVnX2ZpZWxkKHZvaWQgKmJhc2UsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgc2hpZnQsCi0JCQkJICAgICAgdTMyIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2FmX3NldF9yZWdfZmllbGQodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnLCB1MzIgbWFzaywKKwkJCQkgICAgICB1MzIgc2hpZnQsIHUzMiB2YWwpCiB7CiAJdTMyIG9yaWdpbiA9IGRzYWZfcmVhZF9yZWcoYmFzZSwgcmVnKTsKIApAQCAtOTQ3LDcgKzk0Nyw4IEBACiAjZGVmaW5lIGRzYWZfZ2V0X2JpdChvcmlnaW4sIHNoaWZ0KSBcCiAJZHNhZl9nZXRfZmllbGQoKG9yaWdpbiksICgxdWxsIDw8IChzaGlmdCkpLCAoc2hpZnQpKQogCi1zdGF0aWMgaW5saW5lIHUzMiBkc2FmX2dldF9yZWdfZmllbGQodm9pZCAqYmFzZSwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzaGlmdCkKK3N0YXRpYyBpbmxpbmUgdTMyIGRzYWZfZ2V0X3JlZ19maWVsZCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiByZWcsIHUzMiBtYXNrLAorCQkJCSAgICAgdTMyIHNoaWZ0KQogewogCXUzMiBvcmlnaW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ljcGx1cy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWNwbHVzL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YTY2ZTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWNwbHVzL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jCi0jIElDIFBsdXMgZGV2aWNlIGNvbmZpZ3VyYXRpb24KLSMKLQotY29uZmlnIElQMTAwMAotCXRyaXN0YXRlICJJUDEwMDAgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJCi0Jc2VsZWN0IE1JSQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIElQMTAwMCBnaWdhYml0IEV0aGVybmV0IGNhcmRzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBpcGcuICBUaGlzIGlzIHJlY29tbWVuZGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWNwbHVzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWNwbHVzL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmM4N2MxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ljcGx1cy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIElDIFBsdXMgZGV2aWNlIGRyaXZlcnMKLSMKLQotb2JqLSQoQ09ORklHX0lQMTAwMCkgKz0gaXBnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ljcGx1cy9pcGcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ljcGx1cy9pcGcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNiNmFmOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pY3BsdXMvaXBnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAwICswLDAgQEAKLS8qCi0gKiBpcGcuYzogRGV2aWNlIERyaXZlciBmb3IgdGhlIElQMTAwMCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgIElDIFBsdXMgQ29ycAotICoKLSAqIE9yaWdpbmFsIEF1dGhvcjoKLSAqCi0gKiAgIENyYWlnIFJpY2gKLSAqICAgU3VuZGFuY2UgVGVjaG5vbG9neSwgSW5jLgotICogICB3d3cuc3VuZGFuY2V0aS5jb20KLSAqICAgY3JhaWdfcmljaEBzdW5kYW5jZXRpLmNvbQotICoKLSAqIEN1cnJlbnQgTWFpbnRhaW5lcjoKLSAqCi0gKiAgIFNvcmJpY2EgU2hpZWguCi0gKiAgIGh0dHA6Ly93d3cuaWNwbHVzLmNvbS50dwotICogICBzb3JiaWNhQGljcGx1cy5jb20udHcKLSAqCi0gKiAgIEplc3NlIEh1YW5nCi0gKiAgIGh0dHA6Ly93d3cuaWNwbHVzLmNvbS50dwotICogICBqZXNzZUBpY3BsdXMuY29tLnR3Ci0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAotCi0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotCi0jZGVmaW5lIElQR19SWF9SSU5HX0JZVEVTCShzaXplb2Yoc3RydWN0IGlwZ19yeCkgKiBJUEdfUkZETElTVF9MRU5HVEgpCi0jZGVmaW5lIElQR19UWF9SSU5HX0JZVEVTCShzaXplb2Yoc3RydWN0IGlwZ190eCkgKiBJUEdfVEZETElTVF9MRU5HVEgpCi0jZGVmaW5lIElQR19SRVNFVF9NQVNLIFwKLQkoSVBHX0FDX0dMT0JBTF9SRVNFVCB8IElQR19BQ19SWF9SRVNFVCB8IElQR19BQ19UWF9SRVNFVCB8IFwKLQkgSVBHX0FDX0RNQSB8IElQR19BQ19GSUZPIHwgSVBHX0FDX05FVFdPUksgfCBJUEdfQUNfSE9TVCB8IFwKLQkgSVBHX0FDX0FVVE9fSU5JVCkKLQotI2RlZmluZSBpcGdfdzMyKHZhbDMyLCByZWcpCWlvd3JpdGUzMigodmFsMzIpLCBpb2FkZHIgKyAocmVnKSkKLSNkZWZpbmUgaXBnX3cxNih2YWwxNiwgcmVnKQlpb3dyaXRlMTYoKHZhbDE2KSwgaW9hZGRyICsgKHJlZykpCi0jZGVmaW5lIGlwZ193OCh2YWw4LCByZWcpCWlvd3JpdGU4KCh2YWw4KSwgaW9hZGRyICsgKHJlZykpCi0KLSNkZWZpbmUgaXBnX3IzMihyZWcpCQlpb3JlYWQzMihpb2FkZHIgKyAocmVnKSkKLSNkZWZpbmUgaXBnX3IxNihyZWcpCQlpb3JlYWQxNihpb2FkZHIgKyAocmVnKSkKLSNkZWZpbmUgaXBnX3I4KHJlZykJCWlvcmVhZDgoaW9hZGRyICsgKHJlZykpCi0KLWVudW0gewotCW5ldGRldl9pb19zaXplID0gMTI4Ci19OwotCi0jaW5jbHVkZSAiaXBnLmgiCi0jZGVmaW5lIERSVl9OQU1FCSJpcGciCi0KLU1PRFVMRV9BVVRIT1IoIklDIFBsdXMgQ29ycC4gMjAwMyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJQyBQbHVzIElQMTAwMCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIgTGludXggRHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qCi0gKiBEZWZhdWx0cwotICovCi0jZGVmaW5lIElQR19NQVhfUlhGUkFNRV9TSVpFCTB4MDYwMAotI2RlZmluZSBJUEdfUlhGUkFHX1NJWkUJCTB4MDYwMAotI2RlZmluZSBJUEdfUlhTVVBQT1JUX1NJWkUJMHgwNjAwCi0jZGVmaW5lIElQR19JU19KVU1CTwkJZmFsc2UKLQotLyoKLSAqIFZhcmlhYmxlIHJlY29yZCAtLSBpbmRleCBieSBsZWFkaW5nIHJldmlzaW9uL2xlbmd0aAotICogUmV2aXNpb24vTGVuZ3RoKD1OKjQpLCBBZGRyZXNzMSwgRGF0YTEsIEFkZHJlc3MyLCBEYXRhMiwuLi4sQWRkcmVzc04sRGF0YU4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IERlZmF1bHRQaHlQYXJhbVtdID0gewotCS8qIDExLzEyLzAzIElQMTAwMEEgdjEtMyByZXY9MHg0MCAqLwotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkoMHg0MDAwfCgxNSo0KSksIDMxLCAweDAwMDEsIDI3LCAweDAxZTAsIDMxLCAweDAwMDIsIDIyLCAweDg1YmQsIDI0LCAweGZmZjIsCi0JCQkJIDI3LCAweDBjMTAsIDI4LCAweDBjMTAsIDI5LCAweDJjMTAsIDMxLCAweDAwMDMsIDIzLCAweDkyZjYsCi0JCQkJIDMxLCAweDAwMDAsIDIzLCAweDAwM2QsIDMwLCAweDAwZGUsIDIwLCAweDIwZTcsICA5LCAweDA3MDAsCi0JICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JLyogMTIvMTcvMDMgSVAxMDAwQSB2MS00IHJldj0weDQwICovCi0JKDB4NDAwMCB8ICgwNyAqIDQpKSwgMzEsIDB4MDAwMSwgMjcsIDB4MDFlMCwgMzEsIDB4MDAwMiwgMjcsIDB4ZWI4ZSwgMzEsCi0JICAgIDB4MDAwMCwKLQkzMCwgMHgwMDVlLCA5LCAweDA3MDAsCi0JLyogMDEvMDkvMDQgSVAxMDAwQSB2MS01IHJldj0weDQxICovCi0JKDB4NDEwMCB8ICgwNyAqIDQpKSwgMzEsIDB4MDAwMSwgMjcsIDB4MDFlMCwgMzEsIDB4MDAwMiwgMjcsIDB4ZWI4ZSwgMzEsCi0JICAgIDB4MDAwMCwKLQkzMCwgMHgwMDVlLCA5LCAweDA3MDAsCi0JMHgwMDAwCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlwZ19icmFuZF9uYW1lW10gPSB7Ci0JIklDIFBMVVMgSVAxMDAwIDEwMDAvMTAwLzEwIGJhc2VkIE5JQyIsCi0JIlN1bmRhbmNlIFRlY2hub2xvZ3kgU1QyMDIxIGJhc2VkIE5JQyIsCi0JIlRhbWFyYWNrIE1pY3JvZWxlY3Ryb25pY3MgVEM5MDIwLzkwMjEgYmFzZWQgTklDIiwKLQkiRC1MaW5rIE5JQyBJUDEwMDBBIgotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlwZ19wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkRFVklDRShTVU5EQU5DRSwJMHgxMDIzKSwgMCB9LAotCXsgUENJX1ZERVZJQ0UoU1VOREFOQ0UsCTB4MjAyMSksIDEgfSwKLQl7IFBDSV9WREVWSUNFKERMSU5LLAkweDkwMjEpLCAyIH0sCi0JeyBQQ0lfVkRFVklDRShETElOSywJMHg0MDIwKSwgMyB9LAotCXsgMCwgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlwZ19wY2lfdGJsKTsKLQotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmlwZ19pb2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIHNwLT5pb2FkZHI7Ci19Ci0KLSNpZmRlZiBJUEdfREVCVUcKLXN0YXRpYyB2b2lkIGlwZ19kdW1wX3JmZGxpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwotCXVuc2lnbmVkIGludCBpOwotCXUzMiBvZmZzZXQ7Ci0KLQlJUEdfREVCVUdfTVNHKCJfZHVtcF9yZmRsaXN0XG4iKTsKLQotCW5ldGRldl9pbmZvKGRldiwgInJ4X2N1cnJlbnQgPSAlMDJ4XG4iLCBzcC0+cnhfY3VycmVudCk7Ci0JbmV0ZGV2X2luZm8oZGV2LCAicnhfZGlydHkgICA9ICUwMnhcbiIsIHNwLT5yeF9kaXJ0eSk7Ci0JbmV0ZGV2X2luZm8oZGV2LCAiUkZETGlzdCBzdGFydCBhZGRyZXNzID0gJTAxNmx4XG4iLAotCQkgICAgKHVuc2lnbmVkIGxvbmcpc3AtPnJ4ZF9tYXApOwotCW5ldGRldl9pbmZvKGRldiwgIlJGRExpc3RQdHIgcmVnaXN0ZXIgICA9ICUwOHglMDh4XG4iLAotCQkgICAgaXBnX3IzMihJUEdfUkZETElTVFBUUjEpLCBpcGdfcjMyKElQR19SRkRMSVNUUFRSMCkpOwotCi0JZm9yIChpID0gMDsgaSA8IElQR19SRkRMSVNUX0xFTkdUSDsgaSsrKSB7Ci0JCW9mZnNldCA9ICh1MzIpICZzcC0+cnhkW2ldLm5leHRfZGVzYyAtICh1MzIpIHNwLT5yeGQ7Ci0JCW5ldGRldl9pbmZvKGRldiwgIiUwMnggJTA0eCBSRkROZXh0UHRyID0gJTAxNmx4XG4iLAotCQkJICAgIGksIG9mZnNldCwgKHVuc2lnbmVkIGxvbmcpc3AtPnJ4ZFtpXS5uZXh0X2Rlc2MpOwotCQlvZmZzZXQgPSAodTMyKSAmc3AtPnJ4ZFtpXS5yZnMgLSAodTMyKSBzcC0+cnhkOwotCQluZXRkZXZfaW5mbyhkZXYsICIlMDJ4ICUwNHggUkZTICAgICAgICA9ICUwMTZseFxuIiwKLQkJCSAgICBpLCBvZmZzZXQsICh1bnNpZ25lZCBsb25nKXNwLT5yeGRbaV0ucmZzKTsKLQkJb2Zmc2V0ID0gKHUzMikgJnNwLT5yeGRbaV0uZnJhZ19pbmZvIC0gKHUzMikgc3AtPnJ4ZDsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiJTAyeCAlMDR4IGZyYWdfaW5mbyAgID0gJTAxNmx4XG4iLAotCQkJICAgIGksIG9mZnNldCwgKHVuc2lnbmVkIGxvbmcpc3AtPnJ4ZFtpXS5mcmFnX2luZm8pOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaXBnX2R1bXBfdGZkbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHNwLT5pb2FkZHI7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIG9mZnNldDsKLQotCUlQR19ERUJVR19NU0coIl9kdW1wX3RmZGxpc3RcbiIpOwotCi0JbmV0ZGV2X2luZm8oZGV2LCAidHhfY3VycmVudCAgICAgICAgID0gJTAyeFxuIiwgc3AtPnR4X2N1cnJlbnQpOwotCW5ldGRldl9pbmZvKGRldiwgInR4X2RpcnR5ID0gJTAyeFxuIiwgc3AtPnR4X2RpcnR5KTsKLQluZXRkZXZfaW5mbyhkZXYsICJURkRMaXN0IHN0YXJ0IGFkZHJlc3MgPSAlMDE2bHhcbiIsCi0JCSAgICAodW5zaWduZWQgbG9uZykgc3AtPnR4ZF9tYXApOwotCW5ldGRldl9pbmZvKGRldiwgIlRGRExpc3RQdHIgcmVnaXN0ZXIgICA9ICUwOHglMDh4XG4iLAotCQkgICAgaXBnX3IzMihJUEdfVEZETElTVFBUUjEpLCBpcGdfcjMyKElQR19URkRMSVNUUFRSMCkpOwotCi0JZm9yIChpID0gMDsgaSA8IElQR19URkRMSVNUX0xFTkdUSDsgaSsrKSB7Ci0JCW9mZnNldCA9ICh1MzIpICZzcC0+dHhkW2ldLm5leHRfZGVzYyAtICh1MzIpIHNwLT50eGQ7Ci0JCW5ldGRldl9pbmZvKGRldiwgIiUwMnggJTA0eCBURkROZXh0UHRyID0gJTAxNmx4XG4iLAotCQkJICAgIGksIG9mZnNldCwgKHVuc2lnbmVkIGxvbmcpc3AtPnR4ZFtpXS5uZXh0X2Rlc2MpOwotCi0JCW9mZnNldCA9ICh1MzIpICZzcC0+dHhkW2ldLnRmYyAtICh1MzIpIHNwLT50eGQ7Ci0JCW5ldGRldl9pbmZvKGRldiwgIiUwMnggJTA0eCBURkMgICAgICAgID0gJTAxNmx4XG4iLAotCQkJICAgIGksIG9mZnNldCwgKHVuc2lnbmVkIGxvbmcpIHNwLT50eGRbaV0udGZjKTsKLQkJb2Zmc2V0ID0gKHUzMikgJnNwLT50eGRbaV0uZnJhZ19pbmZvIC0gKHUzMikgc3AtPnR4ZDsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiJTAyeCAlMDR4IGZyYWdfaW5mbyAgID0gJTAxNmx4XG4iLAotCQkJICAgIGksIG9mZnNldCwgKHVuc2lnbmVkIGxvbmcpIHNwLT50eGRbaV0uZnJhZ19pbmZvKTsKLQl9Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaXBnX3dyaXRlX3BoeV9jdGwodm9pZCBfX2lvbWVtICppb2FkZHIsIHU4IGRhdGEpCi17Ci0JaXBnX3c4KElQR19QQ19SU1ZEX01BU0sgJiBkYXRhLCBQSFlfQ1RSTCk7Ci0JbmRlbGF5KElQR19QQ19QSFlDVFJMV0FJVF9OUyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlwZ19kcml2ZV9waHlfY3RsX2xvd19oaWdoKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1OCBkYXRhKQotewotCWlwZ193cml0ZV9waHlfY3RsKGlvYWRkciwgSVBHX1BDX01HTVRDTEtfTE8gfCBkYXRhKTsKLQlpcGdfd3JpdGVfcGh5X2N0bChpb2FkZHIsIElQR19QQ19NR01UQ0xLX0hJIHwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbmRfdGhyZWVfc3RhdGUodm9pZCBfX2lvbWVtICppb2FkZHIsIHU4IHBoeWN0cmxwb2xhcml0eSkKLXsKLQlwaHljdHJscG9sYXJpdHkgfD0gKElQR19QQ19NR01UREFUQSAmIDApIHwgSVBHX1BDX01HTVRESVI7Ci0KLQlpcGdfZHJpdmVfcGh5X2N0bF9sb3dfaGlnaChpb2FkZHIsIHBoeWN0cmxwb2xhcml0eSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbmRfZW5kKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1OCBwaHljdHJscG9sYXJpdHkpCi17Ci0JaXBnX3c4KChJUEdfUENfTUdNVENMS19MTyB8IChJUEdfUENfTUdNVERBVEEgJiAwKSB8IElQR19QQ19NR01URElSIHwKLQkJcGh5Y3RybHBvbGFyaXR5KSAmIElQR19QQ19SU1ZEX01BU0ssIFBIWV9DVFJMKTsKLX0KLQotc3RhdGljIHUxNiByZWFkX3BoeV9iaXQodm9pZCBfX2lvbWVtICppb2FkZHIsIHU4IHBoeWN0cmxwb2xhcml0eSkKLXsKLQl1MTYgYml0X2RhdGE7Ci0KLQlpcGdfd3JpdGVfcGh5X2N0bChpb2FkZHIsIElQR19QQ19NR01UQ0xLX0xPIHwgcGh5Y3RybHBvbGFyaXR5KTsKLQotCWJpdF9kYXRhID0gKChpcGdfcjgoUEhZX0NUUkwpICYgSVBHX1BDX01HTVREQVRBKSA+PiAxKSAmIDE7Ci0KLQlpcGdfd3JpdGVfcGh5X2N0bChpb2FkZHIsIElQR19QQ19NR01UQ0xLX0hJIHwgcGh5Y3RybHBvbGFyaXR5KTsKLQotCXJldHVybiBiaXRfZGF0YTsKLX0KLQotLyoKLSAqIFJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBQaHlzaWNhbCBMYXllciBkZXZpY2UgbG9jYXRlZAotICogb24gdGhlIElQRyBOSUMsIHVzaW5nIHRoZSBJUEcgUEhZQ1RSTCByZWdpc3Rlci4KLSAqLwotc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHBoeV9yZWcpCi17Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBpcGdfaW9hZGRyKGRldik7Ci0JLyoKLQkgKiBUaGUgR01JSSBtYW5nZW1lbnQgZnJhbWUgc3RydWN0dXJlIGZvciBhIHJlYWQgaXMgYXMgZm9sbG93czoKLQkgKgotCSAqIHxQcmVhbWJsZXxzdHxvcHxwaHlhZHxyZWdhZHx0YXwgICAgICBkYXRhICAgICAgfGlkbGV8Ci0JICogfDwgMzIgMXM+fDAxfDEwfEFBQUFBfFJSUlJSfHowfERERERERERERERERERERER8eiAgIHwKLQkgKgotCSAqIDwzMiAxcz4gPSAzMiBjb25zZWN1dGl2ZSBsb2dpYyAxIHZhbHVlcwotCSAqIEEgPSBiaXQgb2YgUGh5c2ljYWwgTGF5ZXIgZGV2aWNlIGFkZHJlc3MgKE1TQiBmaXJzdCkKLQkgKiBSID0gYml0IG9mIHJlZ2lzdGVyIGFkZHJlc3MgKE1TQiBmaXJzdCkKLQkgKiB6ID0gSGlnaCBpbXBlZGFuY2Ugc3RhdGUKLQkgKiBEID0gYml0IG9mIHJlYWQgZGF0YSAoTVNCIGZpcnN0KQotCSAqCi0JICogVHJhbnNtaXNzaW9uIG9yZGVyIGlzICdQcmVhbWJsZScgZmllbGQgZmlyc3QsIGJpdHMgdHJhbnNtaXR0ZWQKLQkgKiBsZWZ0IHRvIHJpZ2h0IChmaXJzdCB0byBsYXN0KS4KLQkgKi8KLQlzdHJ1Y3QgewotCQl1MzIgZmllbGQ7Ci0JCXVuc2lnbmVkIGludCBsZW47Ci0JfSBwW10gPSB7Ci0JCXsgR01JSV9QUkVBTUJMRSwJMzIgfSwJLyogUHJlYW1ibGUgKi8KLQkJeyBHTUlJX1NULAkJMiAgfSwJLyogU1QgKi8KLQkJeyBHTUlJX1JFQUQsCQkyICB9LAkvKiBPUCAqLwotCQl7IHBoeV9pZCwJCTUgIH0sCS8qIFBIWUFEICovCi0JCXsgcGh5X3JlZywJCTUgIH0sCS8qIFJFR0FEICovCi0JCXsgMHgwMDAwLAkJMiAgfSwJLyogVEEgKi8KLQkJeyAweDAwMDAsCQkxNiB9LAkvKiBEQVRBICovCi0JCXsgMHgwMDAwLAkJMSAgfQkvKiBJRExFICovCi0JfTsKLQl1bnNpZ25lZCBpbnQgaSwgajsKLQl1OCBwb2xhcml0eSwgZGF0YTsKLQotCXBvbGFyaXR5ICA9IGlwZ19yOChQSFlfQ1RSTCk7Ci0JcG9sYXJpdHkgJj0gKElQR19QQ19EVVBMRVhfUE9MQVJJVFkgfCBJUEdfUENfTElOS19QT0xBUklUWSk7Ci0KLQkvKiBDcmVhdGUgdGhlIFByZWFtYmxlLCBTVCwgT1AsIFBIWUFELCBhbmQgUkVHQUQgZmllbGQuICovCi0JZm9yIChqID0gMDsgaiA8IDU7IGorKykgewotCQlmb3IgKGkgPSAwOyBpIDwgcFtqXS5sZW47IGkrKykgewotCQkJLyogRm9yIGVhY2ggdmFyaWFibGUgbGVuZ3RoIGZpZWxkLCB0aGUgTVNCIG11c3QgYmUKLQkJCSAqIHRyYW5zbWl0dGVkIGZpcnN0LiBSb3RhdGUgdGhyb3VnaCB0aGUgZmllbGQgYml0cywKLQkJCSAqIHN0YXJ0aW5nIHdpdGggdGhlIE1TQiwgYW5kIG1vdmUgZWFjaCBiaXQgaW50byB0aGUKLQkJCSAqIHRoZSAxc3QgKDJeMSkgYml0IHBvc2l0aW9uICh0aGlzIGlzIHRoZSBiaXQgcG9zaXRpb24KLQkJCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1nbXREYXRhIGJpdCBvZiB0aGUgUGh5Q3RybAotCQkJICogcmVnaXN0ZXIgZm9yIHRoZSBJUEcpLgotCQkJICoKLQkJCSAqIEV4YW1wbGU6IFNUID0gMDE7Ci0JCQkgKgotCQkJICogICAgICAgICAgRmlyc3Qgd3JpdGUgYSAnMCcgdG8gYml0IDEgb2YgdGhlIFBoeUN0cmwKLQkJCSAqICAgICAgICAgIHJlZ2lzdGVyLCB0aGVuIHdyaXRlIGEgJzEnIHRvIGJpdCAxIG9mIHRoZQotCQkJICogICAgICAgICAgUGh5Q3RybCByZWdpc3Rlci4KLQkJCSAqCi0JCQkgKiBUbyBkbyB0aGlzLCByaWdodCBzaGlmdCB0aGUgTVNCIG9mIFNUIGJ5IHRoZSB2YWx1ZToKLQkJCSAqIFtmaWVsZCBsZW5ndGggLSAxIC0gI1NUIGJpdHMgYWxyZWFkeSB3cml0dGVuXQotCQkJICogdGhlbiBsZWZ0IHNoaWZ0IHRoaXMgcmVzdWx0IGJ5IDEuCi0JCQkgKi8KLQkJCWRhdGEgID0gKHBbal0uZmllbGQgPj4gKHBbal0ubGVuIC0gMSAtIGkpKSA8PCAxOwotCQkJZGF0YSAmPSBJUEdfUENfTUdNVERBVEE7Ci0JCQlkYXRhIHw9IHBvbGFyaXR5IHwgSVBHX1BDX01HTVRESVI7Ci0KLQkJCWlwZ19kcml2ZV9waHlfY3RsX2xvd19oaWdoKGlvYWRkciwgZGF0YSk7Ci0JCX0KLQl9Ci0KLQlzZW5kX3RocmVlX3N0YXRlKGlvYWRkciwgcG9sYXJpdHkpOwotCi0JcmVhZF9waHlfYml0KGlvYWRkciwgcG9sYXJpdHkpOwotCi0JLyoKLQkgKiBGb3IgYSByZWFkIGN5Y2xlLCB0aGUgYml0cyBmb3IgdGhlIG5leHQgdHdvIGZpZWxkcyAoVEEgYW5kCi0JICogREFUQSkgYXJlIGRyaXZlbiBieSB0aGUgUEhZICh0aGUgSVBHIHJlYWRzIHRoZXNlIGJpdHMpLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBwWzZdLmxlbjsgaSsrKSB7Ci0JCXBbNl0uZmllbGQgfD0KLQkJICAgIChyZWFkX3BoeV9iaXQoaW9hZGRyLCBwb2xhcml0eSkgPDwgKHBbNl0ubGVuIC0gMSAtIGkpKTsKLQl9Ci0KLQlzZW5kX3RocmVlX3N0YXRlKGlvYWRkciwgcG9sYXJpdHkpOwotCXNlbmRfdGhyZWVfc3RhdGUoaW9hZGRyLCBwb2xhcml0eSk7Ci0Jc2VuZF90aHJlZV9zdGF0ZShpb2FkZHIsIHBvbGFyaXR5KTsKLQlzZW5kX2VuZChpb2FkZHIsIHBvbGFyaXR5KTsKLQotCS8qIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIERBVEEgZmllbGQuICovCi0JcmV0dXJuIHBbNl0uZmllbGQ7Ci19Ci0KLS8qCi0gKiBXcml0ZSB0byBhIHJlZ2lzdGVyIGZyb20gdGhlIFBoeXNpY2FsIExheWVyIGRldmljZSBsb2NhdGVkCi0gKiBvbiB0aGUgSVBHIE5JQywgdXNpbmcgdGhlIElQRyBQSFlDVFJMIHJlZ2lzdGVyLgotICovCi1zdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBwaHlfcmVnLCBpbnQgdmFsKQotewotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gaXBnX2lvYWRkcihkZXYpOwotCS8qCi0JICogVGhlIEdNSUkgbWFuZ2VtZW50IGZyYW1lIHN0cnVjdHVyZSBmb3IgYSByZWFkIGlzIGFzIGZvbGxvd3M6Ci0JICoKLQkgKiB8UHJlYW1ibGV8c3R8b3B8cGh5YWR8cmVnYWR8dGF8ICAgICAgZGF0YSAgICAgIHxpZGxlfAotCSAqIHw8IDMyIDFzPnwwMXwxMHxBQUFBQXxSUlJSUnx6MHxEREREREREREREREREREREfHogICB8Ci0JICoKLQkgKiA8MzIgMXM+ID0gMzIgY29uc2VjdXRpdmUgbG9naWMgMSB2YWx1ZXMKLQkgKiBBID0gYml0IG9mIFBoeXNpY2FsIExheWVyIGRldmljZSBhZGRyZXNzIChNU0IgZmlyc3QpCi0JICogUiA9IGJpdCBvZiByZWdpc3RlciBhZGRyZXNzIChNU0IgZmlyc3QpCi0JICogeiA9IEhpZ2ggaW1wZWRhbmNlIHN0YXRlCi0JICogRCA9IGJpdCBvZiB3cml0ZSBkYXRhIChNU0IgZmlyc3QpCi0JICoKLQkgKiBUcmFuc21pc3Npb24gb3JkZXIgaXMgJ1ByZWFtYmxlJyBmaWVsZCBmaXJzdCwgYml0cyB0cmFuc21pdHRlZAotCSAqIGxlZnQgdG8gcmlnaHQgKGZpcnN0IHRvIGxhc3QpLgotCSAqLwotCXN0cnVjdCB7Ci0JCXUzMiBmaWVsZDsKLQkJdW5zaWduZWQgaW50IGxlbjsKLQl9IHBbXSA9IHsKLQkJeyBHTUlJX1BSRUFNQkxFLAkzMiB9LAkvKiBQcmVhbWJsZSAqLwotCQl7IEdNSUlfU1QsCQkyICB9LAkvKiBTVCAqLwotCQl7IEdNSUlfV1JJVEUsCQkyICB9LAkvKiBPUCAqLwotCQl7IHBoeV9pZCwJCTUgIH0sCS8qIFBIWUFEICovCi0JCXsgcGh5X3JlZywJCTUgIH0sCS8qIFJFR0FEICovCi0JCXsgMHgwMDAyLAkJMiAgfSwJLyogVEEgKi8KLQkJeyB2YWwgJiAweGZmZmYsCQkxNiB9LAkvKiBEQVRBICovCi0JCXsgMHgwMDAwLAkJMSAgfQkvKiBJRExFICovCi0JfTsKLQl1bnNpZ25lZCBpbnQgaSwgajsKLQl1OCBwb2xhcml0eSwgZGF0YTsKLQotCXBvbGFyaXR5ICA9IGlwZ19yOChQSFlfQ1RSTCk7Ci0JcG9sYXJpdHkgJj0gKElQR19QQ19EVVBMRVhfUE9MQVJJVFkgfCBJUEdfUENfTElOS19QT0xBUklUWSk7Ci0KLQkvKiBDcmVhdGUgdGhlIFByZWFtYmxlLCBTVCwgT1AsIFBIWUFELCBhbmQgUkVHQUQgZmllbGQuICovCi0JZm9yIChqID0gMDsgaiA8IDc7IGorKykgewotCQlmb3IgKGkgPSAwOyBpIDwgcFtqXS5sZW47IGkrKykgewotCQkJLyogRm9yIGVhY2ggdmFyaWFibGUgbGVuZ3RoIGZpZWxkLCB0aGUgTVNCIG11c3QgYmUKLQkJCSAqIHRyYW5zbWl0dGVkIGZpcnN0LiBSb3RhdGUgdGhyb3VnaCB0aGUgZmllbGQgYml0cywKLQkJCSAqIHN0YXJ0aW5nIHdpdGggdGhlIE1TQiwgYW5kIG1vdmUgZWFjaCBiaXQgaW50byB0aGUKLQkJCSAqIHRoZSAxc3QgKDJeMSkgYml0IHBvc2l0aW9uICh0aGlzIGlzIHRoZSBiaXQgcG9zaXRpb24KLQkJCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1nbXREYXRhIGJpdCBvZiB0aGUgUGh5Q3RybAotCQkJICogcmVnaXN0ZXIgZm9yIHRoZSBJUEcpLgotCQkJICoKLQkJCSAqIEV4YW1wbGU6IFNUID0gMDE7Ci0JCQkgKgotCQkJICogICAgICAgICAgRmlyc3Qgd3JpdGUgYSAnMCcgdG8gYml0IDEgb2YgdGhlIFBoeUN0cmwKLQkJCSAqICAgICAgICAgIHJlZ2lzdGVyLCB0aGVuIHdyaXRlIGEgJzEnIHRvIGJpdCAxIG9mIHRoZQotCQkJICogICAgICAgICAgUGh5Q3RybCByZWdpc3Rlci4KLQkJCSAqCi0JCQkgKiBUbyBkbyB0aGlzLCByaWdodCBzaGlmdCB0aGUgTVNCIG9mIFNUIGJ5IHRoZSB2YWx1ZToKLQkJCSAqIFtmaWVsZCBsZW5ndGggLSAxIC0gI1NUIGJpdHMgYWxyZWFkeSB3cml0dGVuXQotCQkJICogdGhlbiBsZWZ0IHNoaWZ0IHRoaXMgcmVzdWx0IGJ5IDEuCi0JCQkgKi8KLQkJCWRhdGEgID0gKHBbal0uZmllbGQgPj4gKHBbal0ubGVuIC0gMSAtIGkpKSA8PCAxOwotCQkJZGF0YSAmPSBJUEdfUENfTUdNVERBVEE7Ci0JCQlkYXRhIHw9IHBvbGFyaXR5IHwgSVBHX1BDX01HTVRESVI7Ci0KLQkJCWlwZ19kcml2ZV9waHlfY3RsX2xvd19oaWdoKGlvYWRkciwgZGF0YSk7Ci0JCX0KLQl9Ci0KLQkvKiBUaGUgbGFzdCBjeWNsZSBpcyBhIHRyaS1zdGF0ZSwgc28gcmVhZCBmcm9tIHRoZSBQSFkuICovCi0JaXBnX3dyaXRlX3BoeV9jdGwoaW9hZGRyLCBJUEdfUENfTUdNVENMS19MTyB8IHBvbGFyaXR5KTsKLQlpcGdfcjgoUEhZX0NUUkwpOwotCWlwZ193cml0ZV9waHlfY3RsKGlvYWRkciwgSVBHX1BDX01HTVRDTEtfSEkgfCBwb2xhcml0eSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlwZ19zZXRfbGVkX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwotCXUzMiBtb2RlOwotCi0JbW9kZSA9IGlwZ19yMzIoQVNJQ19DVFJMKTsKLQltb2RlICY9IH4oSVBHX0FDX0xFRF9NT0RFX0JJVF8xIHwgSVBHX0FDX0xFRF9NT0RFIHwgSVBHX0FDX0xFRF9TUEVFRCk7Ci0KLQlpZiAoKHNwLT5sZWRfbW9kZSAmIDB4MDMpID4gMSkKLQkJbW9kZSB8PSBJUEdfQUNfTEVEX01PREVfQklUXzE7CS8qIFdyaXRlIEFzaWMgQ29udHJvbCBCaXQgMjkgKi8KLQotCWlmICgoc3AtPmxlZF9tb2RlICYgMHgwMSkgPT0gMSkKLQkJbW9kZSB8PSBJUEdfQUNfTEVEX01PREU7CS8qIFdyaXRlIEFzaWMgQ29udHJvbCBCaXQgMTQgKi8KLQotCWlmICgoc3AtPmxlZF9tb2RlICYgMHgwOCkgPT0gOCkKLQkJbW9kZSB8PSBJUEdfQUNfTEVEX1NQRUVEOwkvKiBXcml0ZSBBc2ljIENvbnRyb2wgQml0IDI3ICovCi0KLQlpcGdfdzMyKG1vZGUsIEFTSUNfQ1RSTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlwZ19zZXRfcGh5X3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHNwLT5pb2FkZHI7Ci0JaW50IHBoeXNldDsKLQotCXBoeXNldCA9IGlwZ19yOChQSFlfU0VUKTsKLQlwaHlzZXQgJj0gfihJUEdfUFNfTUVNX0xFTkI5QiB8IElQR19QU19NRU1fTEVOOSB8IElQR19QU19OT05fQ09NUERFVCk7Ci0JcGh5c2V0IHw9ICgoc3AtPmxlZF9tb2RlICYgMHg3MCkgPj4gNCk7Ci0JaXBnX3c4KHBoeXNldCwgUEhZX1NFVCk7Ci19Ci0KLXN0YXRpYyBpbnQgaXBnX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiByZXNldGZsYWdzKQotewotCS8qIEFzc2VydCBmdW5jdGlvbmFsIHJlc2V0cyB2aWEgdGhlIElQRyBBc2ljQ3RybAotCSAqIHJlZ2lzdGVyIGFzIHNwZWNpZmllZCBieSB0aGUgJ3Jlc2V0ZmxhZ3MnIGlucHV0Ci0JICogcGFyYW1ldGVyLgotCSAqLwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gaXBnX2lvYWRkcihkZXYpOwotCXVuc2lnbmVkIGludCB0aW1lb3V0X2NvdW50ID0gMDsKLQotCUlQR19ERUJVR19NU0coIl9yZXNldFxuIik7Ci0KLQlpcGdfdzMyKGlwZ19yMzIoQVNJQ19DVFJMKSB8IHJlc2V0ZmxhZ3MsIEFTSUNfQ1RSTCk7Ci0KLQkvKiBEZWxheSBhZGRlZCB0byBhY2NvdW50IGZvciBwcm9ibGVtIHdpdGggMTBNYnBzIHJlc2V0LiAqLwotCW1kZWxheShJUEdfQUNfUkVTRVRXQUlUKTsKLQotCXdoaWxlIChJUEdfQUNfUkVTRVRfQlVTWSAmIGlwZ19yMzIoQVNJQ19DVFJMKSkgewotCQltZGVsYXkoSVBHX0FDX1JFU0VUV0FJVCk7Ci0JCWlmICgrK3RpbWVvdXRfY291bnQgPiBJUEdfQUNfUkVTRVRfVElNRU9VVCkKLQkJCXJldHVybiAtRVRJTUU7Ci0JfQotCS8qIFNldCBMRUQgTW9kZSBpbiBBc2ljIENvbnRyb2wgKi8KLQlpcGdfc2V0X2xlZF9tb2RlKGRldik7Ci0KLQkvKiBTZXQgUEhZU2V0IFJlZ2lzdGVyIFZhbHVlICovCi0JaXBnX3NldF9waHlfc2V0KGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEZpbmQgdGhlIEdNSUkgUEhZIGFkZHJlc3MuICovCi1zdGF0aWMgaW50IGlwZ19maW5kX3BoeWFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBpbnQgcGh5YWRkciwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXUzMiBzdGF0dXM7Ci0KLQkJLyogU2VhcmNoIGZvciB0aGUgY29ycmVjdCBQSFkgYWRkcmVzcyBhbW9uZyAzMiBwb3NzaWJsZS4gKi8KLQkJcGh5YWRkciA9IChJUEdfTklDX1BIWV9BRERSRVNTICsgaSkgJSAzMjsKLQotCQkvKiAxMC8yMi8wMyBHcmFjZSBjaGFuZ2UgdmVyaWZ5IGZyb20gR01JSV9QSFlfU1RBVFVTIHRvCi0JCSAgIEdNSUlfUEhZX0lEMQotCQkgKi8KLQotCQlzdGF0dXMgPSBtZGlvX3JlYWQoZGV2LCBwaHlhZGRyLCBNSUlfQk1TUik7Ci0KLQkJaWYgKChzdGF0dXMgIT0gMHhGRkZGKSAmJiAoc3RhdHVzICE9IDApKQotCQkJcmV0dXJuIHBoeWFkZHI7Ci0JfQotCi0JcmV0dXJuIDB4MWY7Ci19Ci0KLS8qCi0gKiBDb25maWd1cmUgSVBHIGJhc2VkIG9uIHJlc3VsdCBvZiBJRUVFIDgwMi4zIFBIWQotICogYXV0by1uZWdvdGlhdGlvbi4KLSAqLwotc3RhdGljIGludCBpcGdfY29uZmlnX2F1dG9uZWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwotCXVuc2lnbmVkIGludCB0eGZsb3djb250cm9sOwotCXVuc2lnbmVkIGludCByeGZsb3djb250cm9sOwotCXVuc2lnbmVkIGludCBmdWxsZHVwbGV4OwotCXUzMiBtYWNfY3RybF92YWw7Ci0JdTMyIGFzaWNjdHJsOwotCXU4IHBoeWN0cmw7Ci0JY29uc3QgY2hhciAqc3BlZWQ7Ci0JY29uc3QgY2hhciAqZHVwbGV4OwotCWNvbnN0IGNoYXIgKnR4X2Rlc2M7Ci0JY29uc3QgY2hhciAqcnhfZGVzYzsKLQotCUlQR19ERUJVR19NU0coIl9jb25maWdfYXV0b25lZ1xuIik7Ci0KLQlhc2ljY3RybCA9IGlwZ19yMzIoQVNJQ19DVFJMKTsKLQlwaHljdHJsID0gaXBnX3I4KFBIWV9DVFJMKTsKLQltYWNfY3RybF92YWwgPSBpcGdfcjMyKE1BQ19DVFJMKTsKLQotCS8qIFNldCBmbGFncyBmb3IgdXNlIGluIHJlc29sdmluZyBhdXRvLW5lZ290aWF0aW9uLCBhc3N1bWluZwotCSAqIG5vbi0xMDAwTWJwcywgaGFsZiBkdXBsZXgsIG5vIGZsb3cgY29udHJvbC4KLQkgKi8KLQlmdWxsZHVwbGV4ID0gMDsKLQl0eGZsb3djb250cm9sID0gMDsKLQlyeGZsb3djb250cm9sID0gMDsKLQotCS8qIFRvIGFjY29tbW9kYXRlIGEgcHJvYmxlbSBpbiAxME1icHMgb3BlcmF0aW9uLAotCSAqIHNldCBhIGdsb2JhbCBmbGFnIGlmIFBIWSBydW5uaW5nIGluIDEwTWJwcyBtb2RlLgotCSAqLwotCXNwLT50ZW5tYnBzbW9kZSA9IDA7Ci0KLQkvKiBEZXRlcm1pbmUgYWN0dWFsIHNwZWVkIG9mIG9wZXJhdGlvbi4gKi8KLQlzd2l0Y2ggKHBoeWN0cmwgJiBJUEdfUENfTElOS19TUEVFRCkgewotCWNhc2UgSVBHX1BDX0xJTktfU1BFRURfMTBNQlBTOgotCQlzcGVlZCA9ICIxME1icHMiOwotCQlzcC0+dGVubWJwc21vZGUgPSAxOwotCQlicmVhazsKLQljYXNlIElQR19QQ19MSU5LX1NQRUVEXzEwME1CUFM6Ci0JCXNwZWVkID0gIjEwME1icHMiOwotCQlicmVhazsKLQljYXNlIElQR19QQ19MSU5LX1NQRUVEXzEwMDBNQlBTOgotCQlzcGVlZCA9ICIxMDAwTWJwcyI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNwZWVkID0gInVuZGVmaW5lZCEiOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQluZXRkZXZfaW5mbyhkZXYsICJMaW5rIHNwZWVkID0gJXNcbiIsIHNwZWVkKTsKLQlpZiAoc3AtPnRlbm1icHNtb2RlID09IDEpCi0JCW5ldGRldl9pbmZvKGRldiwgIjEwTWJwcyBvcGVyYXRpb25hbCBtb2RlIGVuYWJsZWRcbiIpOwotCi0JaWYgKHBoeWN0cmwgJiBJUEdfUENfRFVQTEVYX1NUQVRVUykgewotCQlmdWxsZHVwbGV4ID0gMTsKLQkJdHhmbG93Y29udHJvbCA9IDE7Ci0JCXJ4Zmxvd2NvbnRyb2wgPSAxOwotCX0KLQotCS8qIENvbmZpZ3VyZSBmdWxsIGR1cGxleCwgYW5kIGZsb3cgY29udHJvbC4gKi8KLQlpZiAoZnVsbGR1cGxleCA9PSAxKSB7Ci0KLQkJLyogQ29uZmlndXJlIElQRyBmb3IgZnVsbCBkdXBsZXggb3BlcmF0aW9uLiAqLwotCi0JCWR1cGxleCA9ICJmdWxsIjsKLQotCQltYWNfY3RybF92YWwgfD0gSVBHX01DX0RVUExFWF9TRUxFQ1RfRkQ7Ci0KLQkJaWYgKHR4Zmxvd2NvbnRyb2wgPT0gMSkgewotCQkJdHhfZGVzYyAgPSAiIjsKLQkJCW1hY19jdHJsX3ZhbCB8PSBJUEdfTUNfVFhfRkxPV19DT05UUk9MX0VOQUJMRTsKLQkJfSBlbHNlIHsKLQkJCXR4X2Rlc2MgPSAibm8gIjsKLQkJCW1hY19jdHJsX3ZhbCAmPSB+SVBHX01DX1RYX0ZMT1dfQ09OVFJPTF9FTkFCTEU7Ci0JCX0KLQotCQlpZiAocnhmbG93Y29udHJvbCA9PSAxKSB7Ci0JCQlyeF9kZXNjID0gIiI7Ci0JCQltYWNfY3RybF92YWwgfD0gSVBHX01DX1JYX0ZMT1dfQ09OVFJPTF9FTkFCTEU7Ci0JCX0gZWxzZSB7Ci0JCQlyeF9kZXNjID0gIm5vICI7Ci0JCQltYWNfY3RybF92YWwgJj0gfklQR19NQ19SWF9GTE9XX0NPTlRST0xfRU5BQkxFOwotCQl9Ci0JfSBlbHNlIHsKLQkJZHVwbGV4ID0gImhhbGYiOwotCQl0eF9kZXNjID0gIm5vICI7Ci0JCXJ4X2Rlc2MgPSAibm8gIjsKLQkJbWFjX2N0cmxfdmFsICY9ICh+SVBHX01DX0RVUExFWF9TRUxFQ1RfRkQgJgotCQkJCSB+SVBHX01DX1RYX0ZMT1dfQ09OVFJPTF9FTkFCTEUgJgotCQkJCSB+SVBHX01DX1JYX0ZMT1dfQ09OVFJPTF9FTkFCTEUpOwotCX0KLQotCW5ldGRldl9pbmZvKGRldiwgInNldHRpbmcgJXMgZHVwbGV4LCAlc1RYLCAlc1JYIGZsb3cgY29udHJvbFxuIiwKLQkJICAgIGR1cGxleCwgdHhfZGVzYywgcnhfZGVzYyk7Ci0JaXBnX3czMihtYWNfY3RybF92YWwsIE1BQ19DVFJMKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBEZXRlcm1pbmUgYW5kIGNvbmZpZ3VyZSBtdWx0aWNhc3Qgb3BlcmF0aW9uIGFuZCBzZXQKLSAqIHJlY2VpdmUgbW9kZSBmb3IgSVBHLgotICovCi1zdGF0aWMgdm9pZCBpcGdfbmljX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gaXBnX2lvYWRkcihkZXYpOwotCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0JdW5zaWduZWQgaW50IGhhc2hpbmRleDsKLQl1MzIgaGFzaHRhYmxlWzJdOwotCXU4IHJlY2VpdmVtb2RlOwotCi0JSVBHX0RFQlVHX01TRygiX25pY19zZXRfbXVsdGljYXN0X2xpc3RcbiIpOwotCi0JcmVjZWl2ZW1vZGUgPSBJUEdfUk1fUkVDRUlWRVVOSUNBU1QgfCBJUEdfUk1fUkVDRUlWRUJST0FEQ0FTVDsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJLyogTklDIHRvIGJlIGNvbmZpZ3VyZWQgaW4gcHJvbWlzY3VvdXMgbW9kZS4gKi8KLQkJcmVjZWl2ZW1vZGUgPSBJUEdfUk1fUkVDRUlWRUFMTEZSQU1FUzsKLQl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCQkgICAoKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSAmJgotCQkgICAgKG5ldGRldl9tY19jb3VudChkZXYpID4gSVBHX01VTFRJQ0FTVF9IQVNIVEFCTEVfU0laRSkpKSB7Ci0JCS8qIE5JQyB0byBiZSBjb25maWd1cmVkIHRvIHJlY2VpdmUgYWxsIG11bHRpY2FzdAotCQkgKiBmcmFtZXMuICovCi0JCXJlY2VpdmVtb2RlIHw9IElQR19STV9SRUNFSVZFTVVMVElDQVNUOwotCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSAmJiAhbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKLQkJLyogTklDIHRvIGJlIGNvbmZpZ3VyZWQgdG8gcmVjZWl2ZSBzZWxlY3RlZAotCQkgKiBtdWx0aWNhc3QgYWRkcmVzc2VzLiAqLwotCQlyZWNlaXZlbW9kZSB8PSBJUEdfUk1fUkVDRUlWRU1VTFRJQ0FTVEhBU0g7Ci0JfQotCi0JLyogQ2FsY3VsYXRlIHRoZSBiaXRzIHRvIHNldCBmb3IgdGhlIDY0IGJpdCwgSVBHIEhBU0hUQUJMRS4KLQkgKiBUaGUgSVBHIGFwcGxpZXMgYSBjeWNsaWMtcmVkdW5kYW5jeS1jaGVjayAodGhlIHNhbWUgQ1JDCi0JICogdXNlZCB0byBjYWxjdWxhdGUgdGhlIGZyYW1lIGRhdGEgRkNTKSB0byB0aGUgZGVzdGluYXRpb24KLQkgKiBhZGRyZXNzIGFsbCBpbmNvbWluZyBtdWx0aWNhc3QgZnJhbWVzIHdob3NlIGRlc3RpbmF0aW9uCi0JICogYWRkcmVzcyBoYXMgdGhlIG11bHRpY2FzdCBiaXQgc2V0LiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQKLQkgKiA2IGJpdHMgb2YgdGhlIENSQyByZXN1bHQgYXJlIHVzZWQgYXMgYW4gYWRkcmVzc2luZyBpbmRleAotCSAqIGludG8gdGhlIGhhc2ggdGFibGUuIElmIHRoZSB2YWx1ZSBvZiB0aGUgYml0IGFkZHJlc3NlZCBieQotCSAqIHRoaXMgaW5kZXggaXMgYSAxLCB0aGUgZnJhbWUgaXMgcGFzc2VkIHRvIHRoZSBob3N0IHN5c3RlbS4KLQkgKi8KLQotCS8qIENsZWFyIGhhc2h0YWJsZS4gKi8KLQloYXNodGFibGVbMF0gPSAweDAwMDAwMDAwOwotCWhhc2h0YWJsZVsxXSA9IDB4MDAwMDAwMDA7Ci0KLQkvKiBDeWNsZSB0aHJvdWdoIGFsbCBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIGZpbHRlci4gKi8KLQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7Ci0JCS8qIENhbGN1bGF0ZSBDUkMgcmVzdWx0IGZvciBlYWNoIG11bHRpY2FzdCBhZGRyZXNzLiAqLwotCQloYXNoaW5kZXggPSBjcmMzMl9sZSgweGZmZmZmZmZmLCBoYS0+YWRkciwKLQkJCQkgICAgIEVUSF9BTEVOKTsKLQotCQkvKiBVc2Ugb25seSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgNiBiaXRzLiAqLwotCQloYXNoaW5kZXggPSBoYXNoaW5kZXggJiAweDNGOwotCi0JCS8qIFdpdGhpbiAiaGFzaHRhYmxlIiwgc2V0IGJpdCBudW1iZXIgImhhc2hpbmRleCIKLQkJICogdG8gYSBsb2dpYyAxLgotCQkgKi8KLQkJc2V0X2JpdChoYXNoaW5kZXgsICh2b2lkICopaGFzaHRhYmxlKTsKLQl9Ci0KLQkvKiBXcml0ZSB0aGUgdmFsdWUgb2YgdGhlIGhhc2h0YWJsZSwgdG8gdGhlIDQsIDE2IGJpdAotCSAqIEhBU0hUQUJMRSBJUEcgcmVnaXN0ZXJzLgotCSAqLwotCWlwZ193MzIoaGFzaHRhYmxlWzBdLCBIQVNIVEFCTEVfMCk7Ci0JaXBnX3czMihoYXNodGFibGVbMV0sIEhBU0hUQUJMRV8xKTsKLQotCWlwZ193OChJUEdfUk1fUlNWRF9NQVNLICYgcmVjZWl2ZW1vZGUsIFJFQ0VJVkVfTU9ERSk7Ci0KLQlJUEdfREVCVUdfTVNHKCJSZWNlaXZlTW9kZSA9ICV4XG4iLCBpcGdfcjgoUkVDRUlWRV9NT0RFKSk7Ci19Ci0KLXN0YXRpYyBpbnQgaXBnX2lvX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGlwZ19pb2FkZHIoZGV2KTsKLQl1MzIgb3JpZ21hY2N0cmw7Ci0JdTMyIHJlc3RvcmVtYWNjdHJsOwotCi0JSVBHX0RFQlVHX01TRygiX2lvX2NvbmZpZ1xuIik7Ci0KLQlvcmlnbWFjY3RybCA9IGlwZ19yMzIoTUFDX0NUUkwpOwotCi0JcmVzdG9yZW1hY2N0cmwgPSBvcmlnbWFjY3RybCB8IElQR19NQ19TVEFUSVNUSUNTX0VOQUJMRTsKLQotCS8qIEJhc2VkIG9uIGNvbXBpbGF0aW9uIG9wdGlvbiwgZGV0ZXJtaW5lIGlmIEZDUyBpcyB0byBiZQotCSAqIHN0cmlwcGVkIG9uIHJlY2VpdmUgZnJhbWVzIGJ5IElQRy4KLQkgKi8KLQlpZiAoIUlQR19TVFJJUF9GQ1NfT05fUlgpCi0JCXJlc3RvcmVtYWNjdHJsIHw9IElQR19NQ19SQ1ZfRkNTOwotCi0JLyogRGV0ZXJtaW5lIGlmIHRyYW5zbWl0dGVyIGFuZC9vciByZWNlaXZlciBhcmUKLQkgKiBlbmFibGVkIHNvIHdlIG1heSByZXN0b3JlIE1BQ0NUUkwgY29ycmVjdGx5LgotCSAqLwotCWlmIChvcmlnbWFjY3RybCAmIElQR19NQ19UWF9FTkFCTEVEKQotCQlyZXN0b3JlbWFjY3RybCB8PSBJUEdfTUNfVFhfRU5BQkxFOwotCi0JaWYgKG9yaWdtYWNjdHJsICYgSVBHX01DX1JYX0VOQUJMRUQpCi0JCXJlc3RvcmVtYWNjdHJsIHw9IElQR19NQ19SWF9FTkFCTEU7Ci0KLQkvKiBUcmFuc21pdHRlciBhbmQgcmVjZWl2ZXIgbXVzdCBiZSBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZwotCSAqIElGU1NlbGVjdC4KLQkgKi8KLQlpcGdfdzMyKChvcmlnbWFjY3RybCAmIChJUEdfTUNfUlhfRElTQUJMRSB8IElQR19NQ19UWF9ESVNBQkxFKSkgJgotCQlJUEdfTUNfUlNWRF9NQVNLLCBNQUNfQ1RSTCk7Ci0KLQkvKiBOb3cgdGhhdCB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIgYXJlIGRpc2FibGVkLCB3cml0ZQotCSAqIHRvIElGU1NlbGVjdC4KLQkgKi8KLQlpcGdfdzMyKChvcmlnbWFjY3RybCAmIElQR19NQ19JRlNfOTZCSVQpICYgSVBHX01DX1JTVkRfTUFTSywgTUFDX0NUUkwpOwotCi0JLyogU2V0IFJFQ0VJVkVNT0RFIHJlZ2lzdGVyLiAqLwotCWlwZ19uaWNfc2V0X211bHRpY2FzdF9saXN0KGRldik7Ci0KLQlpcGdfdzE2KHNwLT5tYXhfcnhmcmFtZV9zaXplLCBNQVhfRlJBTUVfU0laRSk7Ci0KLQlpcGdfdzgoSVBHX1JYRE1BUE9MTFBFUklPRF9WQUxVRSwgICBSWF9ETUFfUE9MTF9QRVJJT0QpOwotCWlwZ193OChJUEdfUlhETUFVUkdFTlRUSFJFU0hfVkFMVUUsIFJYX0RNQV9VUkdFTlRfVEhSRVNIKTsKLQlpcGdfdzgoSVBHX1JYRE1BQlVSU1RUSFJFU0hfVkFMVUUsICBSWF9ETUFfQlVSU1RfVEhSRVNIKTsKLQlpcGdfdzgoSVBHX1RYRE1BUE9MTFBFUklPRF9WQUxVRSwgICBUWF9ETUFfUE9MTF9QRVJJT0QpOwotCWlwZ193OChJUEdfVFhETUFVUkdFTlRUSFJFU0hfVkFMVUUsIFRYX0RNQV9VUkdFTlRfVEhSRVNIKTsKLQlpcGdfdzgoSVBHX1RYRE1BQlVSU1RUSFJFU0hfVkFMVUUsICBUWF9ETUFfQlVSU1RfVEhSRVNIKTsKLQlpcGdfdzE2KChJUEdfSUVfSE9TVF9FUlJPUiB8IElQR19JRV9UWF9ETUFfQ09NUExFVEUgfAotCQkgSVBHX0lFX1RYX0NPTVBMRVRFIHwgSVBHX0lFX0lOVF9SRVFVRVNURUQgfAotCQkgSVBHX0lFX1VQREFURV9TVEFUUyB8IElQR19JRV9MSU5LX0VWRU5UIHwKLQkJIElQR19JRV9SWF9ETUFfQ09NUExFVEUgfCBJUEdfSUVfUlhfRE1BX1BSSU9SSVRZKSwgSU5UX0VOQUJMRSk7Ci0JaXBnX3cxNihJUEdfRkxPV09OVEhSRVNIX1ZBTFVFLCAgRkxPV19PTl9USFJFU0gpOwotCWlwZ193MTYoSVBHX0ZMT1dPRkZUSFJFU0hfVkFMVUUsIEZMT1dfT0ZGX1RIUkVTSCk7Ci0KLQkvKiBJUEcgbXVsdGktZnJhZyBmcmFtZSBidWcgd29ya2Fyb3VuZC4KLQkgKiBQZXIgc2lsaWNvbiByZXZpc2lvbiBCMyBlcmF0dGEuCi0JICovCi0JaXBnX3cxNihpcGdfcjE2KERFQlVHX0NUUkwpIHwgMHgwMjAwLCBERUJVR19DVFJMKTsKLQotCS8qIElQRyBUWCBwb2xsIG5vdyBidWcgd29ya2Fyb3VuZC4KLQkgKiBQZXIgc2lsaWNvbiByZXZpc2lvbiBCMyBlcmF0dGEuCi0JICovCi0JaXBnX3cxNihpcGdfcjE2KERFQlVHX0NUUkwpIHwgMHgwMDEwLCBERUJVR19DVFJMKTsKLQotCS8qIElQRyBSWCBwb2xsIG5vdyBidWcgd29ya2Fyb3VuZC4KLQkgKiBQZXIgc2lsaWNvbiByZXZpc2lvbiBCMyBlcmF0dGEuCi0JICovCi0JaXBnX3cxNihpcGdfcjE2KERFQlVHX0NUUkwpIHwgMHgwMDIwLCBERUJVR19DVFJMKTsKLQotCS8qIE5vdyByZXN0b3JlIE1BQ0NUUkwgdG8gb3JpZ2luYWwgc2V0dGluZy4gKi8KLQlpcGdfdzMyKElQR19NQ19SU1ZEX01BU0sgJiByZXN0b3JlbWFjY3RybCwgTUFDX0NUUkwpOwotCi0JLyogRGlzYWJsZSB1bnVzZWQgUk1PTiBzdGF0aXN0aWNzLiAqLwotCWlwZ193MzIoSVBHX1JaX0FMTCwgUk1PTl9TVEFUSVNUSUNTX01BU0spOwotCi0JLyogRGlzYWJsZSB1bnVzZWQgTUlCIHN0YXRpc3RpY3MuICovCi0JaXBnX3czMihJUEdfU01fTUFDQ09OVFJPTEZSQU1FU1hNVEQgfCBJUEdfU01fTUFDQ09OVFJPTEZSQU1FU1JDVkQgfAotCQlJUEdfU01fQkNTVE9DVEVUWE1UT0tfQkNTVEZSQU1FU1hNVERPSyB8IElQR19TTV9UWEpVTUJPRlJBTUVTIHwKLQkJSVBHX1NNX01DU1RPQ1RFVFhNVE9LX01DU1RGUkFNRVNYTVRET0sgfCBJUEdfU01fUlhKVU1CT0ZSQU1FUyB8Ci0JCUlQR19TTV9CQ1NUT0NURVRSQ1ZET0tfQkNTVEZSQU1FU1JDVkRPSyB8Ci0JCUlQR19TTV9VRFBDSEVDS1NVTUVSUk9SUyB8IElQR19TTV9UQ1BDSEVDS1NVTUVSUk9SUyB8Ci0JCUlQR19TTV9JUENIRUNLU1VNRVJST1JTLCBTVEFUSVNUSUNTX01BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSByZWNlaXZlIGJ1ZmZlciB3aXRoaW4gc3lzdGVtIG1lbW9yeSBhbmQgdXBkYXRlCi0gKiBOSUMgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXBwcm9wcmlhdGVseS4KLSAqLwotc3RhdGljIGludCBpcGdfZ2V0X3J4YnVmZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZW50cnkpCi17Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpcGdfcnggKnJ4ZmQgPSBzcC0+cnhkICsgZW50cnk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1NjQgcnhmcmFnc2l6ZTsKLQotCUlQR19ERUJVR19NU0coIl9nZXRfcnhidWZmXG4iKTsKLQotCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oZGV2LCBzcC0+cnhzdXBwb3J0X3NpemUpOwotCWlmICghc2tiKSB7Ci0JCXNwLT5yeF9idWZmW2VudHJ5XSA9IE5VTEw7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIFNhdmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHNrX2J1ZmYgc3RydWN0dXJlLiAqLwotCXNwLT5yeF9idWZmW2VudHJ5XSA9IHNrYjsKLQotCXJ4ZmQtPmZyYWdfaW5mbyA9IGNwdV90b19sZTY0KHBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCBza2ItPmRhdGEsCi0JCXNwLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSkpOwotCi0JLyogU2V0IHRoZSBSRkQgZnJhZ21lbnQgbGVuZ3RoLiAqLwotCXJ4ZnJhZ3NpemUgPSBzcC0+cnhmcmFnX3NpemU7Ci0JcnhmZC0+ZnJhZ19pbmZvIHw9IGNwdV90b19sZTY0KChyeGZyYWdzaXplIDw8IDQ4KSAmIElQR19SRklfRlJBR0xFTik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbml0X3JmZGxpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwotCXVuc2lnbmVkIGludCBpOwotCi0JSVBHX0RFQlVHX01TRygiX2luaXRfcmZkbGlzdFxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVBHX1JGRExJU1RfTEVOR1RIOyBpKyspIHsKLQkJc3RydWN0IGlwZ19yeCAqcnhmZCA9IHNwLT5yeGQgKyBpOwotCi0JCWlmIChzcC0+cnhfYnVmZltpXSkgewotCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwKLQkJCQlsZTY0X3RvX2NwdShyeGZkLT5mcmFnX2luZm8pICYgfklQR19SRklfRlJBR0xFTiwKLQkJCQlzcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJZGV2X2tmcmVlX3NrYl9pcnEoc3AtPnJ4X2J1ZmZbaV0pOwotCQkJc3AtPnJ4X2J1ZmZbaV0gPSBOVUxMOwotCQl9Ci0KLQkJLyogQ2xlYXIgb3V0IHRoZSBSRlMgZmllbGQuICovCi0JCXJ4ZmQtPnJmcyA9IDB4MDAwMDAwMDAwMDAwMDAwMDsKLQotCQlpZiAoaXBnX2dldF9yeGJ1ZmYoZGV2LCBpKSA8IDApIHsKLQkJCS8qCi0JCQkgKiBBIHJlY2VpdmUgYnVmZmVyIHdhcyBub3QgcmVhZHksIGJyZWFrIHRoZQotCQkJICogUkZEIGxpc3QgaGVyZS4KLQkJCSAqLwotCQkJSVBHX0RFQlVHX01TRygiQ2Fubm90IGFsbG9jYXRlIFJ4IGJ1ZmZlclxuIik7Ci0KLQkJCS8qIEp1c3QgaW4gY2FzZSB3ZSBjYW5ub3QgYWxsb2NhdGUgYSBzaW5nbGUgUkZELgotCQkJICogU2hvdWxkIG5vdCBvY2N1ci4KLQkJCSAqLwotCQkJaWYgKGkgPT0gMCkgewotCQkJCW5ldGRldl9lcnIoZGV2LCAiTm8gbWVtb3J5IGF2YWlsYWJsZSBmb3IgUkZEIGxpc3RcbiIpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQl9Ci0KLQkJcnhmZC0+bmV4dF9kZXNjID0gY3B1X3RvX2xlNjQoc3AtPnJ4ZF9tYXAgKwotCQkJc2l6ZW9mKHN0cnVjdCBpcGdfcngpKihpICsgMSkpOwotCX0KLQlzcC0+cnhkW2kgLSAxXS5uZXh0X2Rlc2MgPSBjcHVfdG9fbGU2NChzcC0+cnhkX21hcCk7Ci0KLQlzcC0+cnhfY3VycmVudCA9IDA7Ci0Jc3AtPnJ4X2RpcnR5ID0gMDsKLQotCS8qIFdyaXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgUkZETGlzdCB0byB0aGUgSVBHLiAqLwotCWlwZ193MzIoKHUzMikgc3AtPnJ4ZF9tYXAsIFJGRF9MSVNUX1BUUl8wKTsKLQlpcGdfdzMyKDB4MDAwMDAwMDAsIFJGRF9MSVNUX1BUUl8xKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpbml0X3RmZGxpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwotCXVuc2lnbmVkIGludCBpOwotCi0JSVBHX0RFQlVHX01TRygiX2luaXRfdGZkbGlzdFxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVBHX1RGRExJU1RfTEVOR1RIOyBpKyspIHsKLQkJc3RydWN0IGlwZ190eCAqdHhmZCA9IHNwLT50eGQgKyBpOwotCi0JCXR4ZmQtPnRmYyA9IGNwdV90b19sZTY0KElQR19URkNfVEZERE9ORSk7Ci0KLQkJaWYgKHNwLT50eF9idWZmW2ldKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiX2lycShzcC0+dHhfYnVmZltpXSk7Ci0JCQlzcC0+dHhfYnVmZltpXSA9IE5VTEw7Ci0JCX0KLQotCQl0eGZkLT5uZXh0X2Rlc2MgPSBjcHVfdG9fbGU2NChzcC0+dHhkX21hcCArCi0JCQlzaXplb2Yoc3RydWN0IGlwZ190eCkqKGkgKyAxKSk7Ci0JfQotCXNwLT50eGRbaSAtIDFdLm5leHRfZGVzYyA9IGNwdV90b19sZTY0KHNwLT50eGRfbWFwKTsKLQotCXNwLT50eF9jdXJyZW50ID0gMDsKLQlzcC0+dHhfZGlydHkgPSAwOwotCi0JLyogV3JpdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBURkRMaXN0IHRvIHRoZSBJUEcuICovCi0JSVBHX0RERUJVR19NU0coIlN0YXJ0aW5nIFRGRExpc3RQdHIgPSAlMDh4XG4iLAotCQkgICAgICAgKHUzMikgc3AtPnR4ZF9tYXApOwotCWlwZ193MzIoKHUzMikgc3AtPnR4ZF9tYXAsIFRGRF9MSVNUX1BUUl8wKTsKLQlpcGdfdzMyKDB4MDAwMDAwMDAsIFRGRF9MSVNUX1BUUl8xKTsKLQotCXNwLT5yZXNldF9jdXJyZW50X3RmZCA9IDE7Ci19Ci0KLS8qCi0gKiBGcmVlIGFsbCB0cmFuc21pdCBidWZmZXJzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZmVycmVkCi0gKiB2aWEgRE1BIHRvIHRoZSBJUEcuCi0gKi8KLXN0YXRpYyB2b2lkIGlwZ19uaWNfdHhmcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGludCByZWxlYXNlZCwgcGVuZGluZywgZGlydHk7Ci0KLQlJUEdfREVCVUdfTVNHKCJfbmljX3R4ZnJlZVxuIik7Ci0KLQlwZW5kaW5nID0gc3AtPnR4X2N1cnJlbnQgLSBzcC0+dHhfZGlydHk7Ci0JZGlydHkgPSBzcC0+dHhfZGlydHkgJSBJUEdfVEZETElTVF9MRU5HVEg7Ci0KLQlmb3IgKHJlbGVhc2VkID0gMDsgcmVsZWFzZWQgPCBwZW5kaW5nOyByZWxlYXNlZCsrKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBzcC0+dHhfYnVmZltkaXJ0eV07Ci0JCXN0cnVjdCBpcGdfdHggKnR4ZmQgPSBzcC0+dHhkICsgZGlydHk7Ci0KLQkJSVBHX0RFQlVHX01TRygiVEZDID0gJTAxNmx4XG4iLCAodW5zaWduZWQgbG9uZykgdHhmZC0+dGZjKTsKLQotCQkvKiBMb29rIGF0IGVhY2ggVEZEJ3MgVEZDIGZpZWxkIGJlZ2lubmluZwotCQkgKiBhdCB0aGUgbGFzdCBmcmVlZCBURkQgdXAgdG8gdGhlIGN1cnJlbnQgVEZELgotCQkgKiBJZiB0aGUgVEZERG9uZSBiaXQgaXMgc2V0LCBmcmVlIHRoZSBhc3NvY2lhdGVkCi0JCSAqIGJ1ZmZlci4KLQkJICovCi0JCWlmICghKHR4ZmQtPnRmYyAmIGNwdV90b19sZTY0KElQR19URkNfVEZERE9ORSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLQkJLyogRnJlZSB0aGUgdHJhbnNtaXQgYnVmZmVyLiAqLwotCQlpZiAoc2tiKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LAotCQkJCWxlNjRfdG9fY3B1KHR4ZmQtPmZyYWdfaW5mbykgJiB+SVBHX1RGSV9GUkFHTEVOLAotCQkJCXNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLQotCQkJc3AtPnR4X2J1ZmZbZGlydHldID0gTlVMTDsKLQkJfQotCQlkaXJ0eSA9IChkaXJ0eSArIDEpICUgSVBHX1RGRExJU1RfTEVOR1RIOwotCX0KLQotCXNwLT50eF9kaXJ0eSArPSByZWxlYXNlZDsKLQotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgJiYKLQkgICAgKHNwLT50eF9jdXJyZW50ICE9IChzcC0+dHhfZGlydHkgKyBJUEdfVEZETElTVF9MRU5HVEgpKSkgewotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpcGdfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHNwLT5pb2FkZHI7Ci0KLQlpcGdfcmVzZXQoZGV2LCBJUEdfQUNfVFhfUkVTRVQgfCBJUEdfQUNfRE1BIHwgSVBHX0FDX05FVFdPUksgfAotCQkgIElQR19BQ19GSUZPKTsKLQotCXNwaW5fbG9ja19pcnEoJnNwLT5sb2NrKTsKLQotCS8qIFJlLWNvbmZpZ3VyZSBhZnRlciBETUEgcmVzZXQuICovCi0JaWYgKGlwZ19pb19jb25maWcoZGV2KSA8IDApCi0JCW5ldGRldl9pbmZvKGRldiwgIkVycm9yIGR1cmluZyByZS1jb25maWd1cmF0aW9uXG4iKTsKLQotCWluaXRfdGZkbGlzdChkZXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZzcC0+bG9jayk7Ci0KLQlpcGdfdzMyKChpcGdfcjMyKE1BQ19DVFJMKSB8IElQR19NQ19UWF9FTkFCTEUpICYgSVBHX01DX1JTVkRfTUFTSywKLQkJTUFDX0NUUkwpOwotfQotCi0vKgotICogRm9yIFR4Q29tcGxldGUgaW50ZXJydXB0cywgZnJlZSBhbGwgdHJhbnNtaXQKLSAqIGJ1ZmZlcnMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNmZXJyZWQgdmlhIERNQQotICogdG8gdGhlIElQRy4KLSAqLwotc3RhdGljIHZvaWQgaXBnX25pY190eGNsZWFudXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwotCXVuc2lnbmVkIGludCBpOwotCi0JSVBHX0RFQlVHX01TRygiX25pY190eGNsZWFudXBcbiIpOwotCi0JZm9yIChpID0gMDsgaSA8IElQR19URkRMSVNUX0xFTkdUSDsgaSsrKSB7Ci0JCS8qIFJlYWRpbmcgdGhlIFRYU1RBVFVTIHJlZ2lzdGVyIGNsZWFycyB0aGUKLQkJICogVFhfQ09NUExFVEUgaW50ZXJydXB0LgotCQkgKi8KLQkJdTMyIHR4c3RhdHVzZHdvcmQgPSBpcGdfcjMyKFRYX1NUQVRVUyk7Ci0KLQkJSVBHX0RFQlVHX01TRygiVHhTdGF0dXMgPSAlMDh4XG4iLCB0eHN0YXR1c2R3b3JkKTsKLQotCQkvKiBDaGVjayBmb3IgVHJhbnNtaXQgZXJyb3JzLiBFcnJvciBiaXRzIG9ubHkgdmFsaWQgaWYKLQkJICogVFhfQ09NUExFVEUgYml0IGluIHRoZSBUWFNUQVRVUyByZWdpc3RlciBpcyBhIDEuCi0JCSAqLwotCQlpZiAoISh0eHN0YXR1c2R3b3JkICYgSVBHX1RTX1RYX0NPTVBMRVRFKSkKLQkJCWJyZWFrOwotCi0JCS8qIElmIGluIDEwTWJwcyBtb2RlLCBpbmRpY2F0ZSB0cmFuc21pdCBpcyByZWFkeS4gKi8KLQkJaWYgKHNwLT50ZW5tYnBzbW9kZSkgewotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQl9Ci0KLQkJLyogVHJhbnNtaXQgZXJyb3IsIGluY3JlbWVudCBzdGF0IGNvdW50ZXJzLiAqLwotCQlpZiAodHhzdGF0dXNkd29yZCAmIElQR19UU19UWF9FUlJPUikgewotCQkJSVBHX0RFQlVHX01TRygiVHJhbnNtaXQgZXJyb3JcbiIpOwotCQkJc3AtPnN0YXRzLnR4X2Vycm9ycysrOwotCQl9Ci0KLQkJLyogTGF0ZSBjb2xsaXNpb24sIHJlLWVuYWJsZSB0cmFuc21pdHRlci4gKi8KLQkJaWYgKHR4c3RhdHVzZHdvcmQgJiBJUEdfVFNfTEFURV9DT0xMSVNJT04pIHsKLQkJCUlQR19ERUJVR19NU0coIkxhdGUgY29sbGlzaW9uIG9uIHRyYW5zbWl0XG4iKTsKLQkJCWlwZ193MzIoKGlwZ19yMzIoTUFDX0NUUkwpIHwgSVBHX01DX1RYX0VOQUJMRSkgJgotCQkJCUlQR19NQ19SU1ZEX01BU0ssIE1BQ19DVFJMKTsKLQkJfQotCi0JCS8qIE1heGltdW0gY29sbGlzaW9ucywgcmUtZW5hYmxlIHRyYW5zbWl0dGVyLiAqLwotCQlpZiAodHhzdGF0dXNkd29yZCAmIElQR19UU19UWF9NQVhfQ09MTCkgewotCQkJSVBHX0RFQlVHX01TRygiTWF4aW11bSBjb2xsaXNpb25zIG9uIHRyYW5zbWl0XG4iKTsKLQkJCWlwZ193MzIoKGlwZ19yMzIoTUFDX0NUUkwpIHwgSVBHX01DX1RYX0VOQUJMRSkgJgotCQkJCUlQR19NQ19SU1ZEX01BU0ssIE1BQ19DVFJMKTsKLQkJfQotCi0JCS8qIFRyYW5zbWl0IHVuZGVycnVuLCByZXNldCBhbmQgcmUtZW5hYmxlCi0JCSAqIHRyYW5zbWl0dGVyLgotCQkgKi8KLQkJaWYgKHR4c3RhdHVzZHdvcmQgJiBJUEdfVFNfVFhfVU5ERVJSVU4pIHsKLQkJCUlQR19ERUJVR19NU0coIlRyYW5zbWl0dGVyIHVuZGVycnVuXG4iKTsKLQkJCXNwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwotCQkJaXBnX3Jlc2V0KGRldiwgSVBHX0FDX1RYX1JFU0VUIHwgSVBHX0FDX0RNQSB8Ci0JCQkJICBJUEdfQUNfTkVUV09SSyB8IElQR19BQ19GSUZPKTsKLQotCQkJLyogUmUtY29uZmlndXJlIGFmdGVyIERNQSByZXNldC4gKi8KLQkJCWlmIChpcGdfaW9fY29uZmlnKGRldikgPCAwKSB7Ci0JCQkJbmV0ZGV2X2luZm8oZGV2LCAiRXJyb3IgZHVyaW5nIHJlLWNvbmZpZ3VyYXRpb25cbiIpOwotCQkJfQotCQkJaW5pdF90ZmRsaXN0KGRldik7Ci0KLQkJCWlwZ193MzIoKGlwZ19yMzIoTUFDX0NUUkwpIHwgSVBHX01DX1RYX0VOQUJMRSkgJgotCQkJCUlQR19NQ19SU1ZEX01BU0ssIE1BQ19DVFJMKTsKLQkJfQotCX0KLQotCWlwZ19uaWNfdHhmcmVlKGRldik7Ci19Ci0KLS8qIFByb3ZpZGVzIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBJUEcgTklDLiAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppcGdfbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHNwLT5pb2FkZHI7Ci0JdTE2IHRlbXAxOwotCXUxNiB0ZW1wMjsKLQotCUlQR19ERUJVR19NU0coIl9uaWNfZ2V0X3N0YXRzXG4iKTsKLQotCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgTklDIGhhcyBiZWVuIGluaXRpYWxpemVkIHZpYSBuaWNfb3BlbiwKLQkgKiBiZWZvcmUgdHJ5aW5nIHRvIHJlYWQgc3RhdGlzdGljIHJlZ2lzdGVycy4KLQkgKi8KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuICZzcC0+c3RhdHM7Ci0KLQlzcC0+c3RhdHMucnhfcGFja2V0cyArPSBpcGdfcjMyKElQR19GUkFNRVNSQ1ZET0spOwotCXNwLT5zdGF0cy50eF9wYWNrZXRzICs9IGlwZ19yMzIoSVBHX0ZSQU1FU1hNVERPSyk7Ci0Jc3AtPnN0YXRzLnJ4X2J5dGVzICs9IGlwZ19yMzIoSVBHX09DVEVUUkNWT0spOwotCXNwLT5zdGF0cy50eF9ieXRlcyArPSBpcGdfcjMyKElQR19PQ1RFVFhNVE9LKTsKLQl0ZW1wMSA9IGlwZ19yMTYoSVBHX0ZSQU1FU0xPU1RSWEVSUk9SUyk7Ci0Jc3AtPnN0YXRzLnJ4X2Vycm9ycyArPSB0ZW1wMTsKLQlzcC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSB0ZW1wMTsKLQl0ZW1wMSA9IGlwZ19yMzIoSVBHX1NJTkdMRUNPTEZSQU1FUykgKyBpcGdfcjMyKElQR19NVUxUSUNPTEZSQU1FUykgKwotCQlpcGdfcjMyKElQR19MQVRFQ09MTElTSU9OUyk7Ci0JdGVtcDIgPSBpcGdfcjE2KElQR19DQVJSSUVSU0VOU0VFUlJPUlMpOwotCXNwLT5zdGF0cy5jb2xsaXNpb25zICs9IHRlbXAxOwotCXNwLT5zdGF0cy50eF9kcm9wcGVkICs9IGlwZ19yMTYoSVBHX0ZSQU1FU0FCT1JUWFNDT0xMUyk7Ci0Jc3AtPnN0YXRzLnR4X2Vycm9ycyArPSBpcGdfcjE2KElQR19GUkFNRVNXRVhERUZFUlJBTCkgKwotCQlpcGdfcjMyKElQR19GUkFNRVNXREVGRVJSRURYTVQpICsgdGVtcDEgKyB0ZW1wMjsKLQlzcC0+c3RhdHMubXVsdGljYXN0ICs9IGlwZ19yMzIoSVBHX01DU1RPQ1RFVFJDVkRPSyk7Ci0KLQkvKiBkZXRhaWxlZCB0eF9lcnJvcnMgKi8KLQlzcC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gdGVtcDI7Ci0KLQkvKiBkZXRhaWxlZCByeF9lcnJvcnMgKi8KLQlzcC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyArPSBpcGdfcjE2KElQR19JTlJBTkdFTEVOR1RIRVJST1JTKSArCi0JCWlwZ19yMTYoSVBHX0ZSQU1FVE9PTE9OR0VSUk9SUyk7Ci0Jc3AtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gaXBnX3IxNihJUEdfRlJBTUVDSEVDS1NFUUVSUk9SUyk7Ci0KLQkvKiBVbnV0aWxpemVkIElQRyBzdGF0aXN0aWMgcmVnaXN0ZXJzLiAqLwotCWlwZ19yMzIoSVBHX01DU1RGUkFNRVNSQ1ZET0spOwotCi0JcmV0dXJuICZzcC0+c3RhdHM7Ci19Ci0KLS8qIFJlc3RvcmUgdXNlZCByZWNlaXZlIGJ1ZmZlcnMuICovCi1zdGF0aWMgaW50IGlwZ19uaWNfcnhyZXN0b3JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWNvbnN0IHVuc2lnbmVkIGludCBjdXJyID0gc3AtPnJ4X2N1cnJlbnQ7Ci0JdW5zaWduZWQgaW50IGRpcnR5ID0gc3AtPnJ4X2RpcnR5OwotCi0JSVBHX0RFQlVHX01TRygiX25pY19yeHJlc3RvcmVcbiIpOwotCi0JZm9yIChkaXJ0eSA9IHNwLT5yeF9kaXJ0eTsgY3VyciAtIGRpcnR5ID4gMDsgZGlydHkrKykgewotCQl1bnNpZ25lZCBpbnQgZW50cnkgPSBkaXJ0eSAlIElQR19SRkRMSVNUX0xFTkdUSDsKLQotCQkvKiByeF9jb3B5YnJlYWsgbWF5IHBva2UgaG9sZSBoZXJlIGFuZCB0aGVyZS4gKi8KLQkJaWYgKHNwLT5yeF9idWZmW2VudHJ5XSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEdlbmVyYXRlIGEgbmV3IHJlY2VpdmUgYnVmZmVyIHRvIHJlcGxhY2UgdGhlCi0JCSAqIGN1cnJlbnQgYnVmZmVyICh3aGljaCB3aWxsIGJlIHJlbGVhc2VkIGJ5IHRoZQotCQkgKiBMaW51eCBzeXN0ZW0pLgotCQkgKi8KLQkJaWYgKGlwZ19nZXRfcnhidWZmKGRldiwgZW50cnkpIDwgMCkgewotCQkJSVBHX0RFQlVHX01TRygiQ2Fubm90IGFsbG9jYXRlIG5ldyBSeCBidWZmZXJcbiIpOwotCi0JCQlicmVhazsKLQkJfQotCi0JCS8qIFJlc2V0IHRoZSBSRlMgZmllbGQuICovCi0JCXNwLT5yeGRbZW50cnldLnJmcyA9IDB4MDAwMDAwMDAwMDAwMDAwMDsKLQl9Ci0Jc3AtPnJ4X2RpcnR5ID0gZGlydHk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogdXNlIGp1bWJvaW5kZXggYW5kIGp1bWJvc2l6ZSB0byBjb250cm9sIGp1bWJvIGZyYW1lIHN0YXR1cwotICogaW5pdGlhbCBzdGF0dXMgaXMganVtYm9pbmRleD0tMSBhbmQganVtYm9zaXplPTAKLSAqIDEuIGp1bWJvaW5kZXggPSAtMSBhbmQganVtYm9zaXplPTAgOiBwcmV2aW91cyBqdW1ibyBmcmFtZSBoYXMgYmVlbiBkb25lLgotICogMi4ganVtYm9pbmRleCAhPSAtMSBhbmQganVtYm9zaXplICE9IDAgOiBqdW1ibyBmcmFtZSBpcyBub3Qgb3ZlciBzaXplIGFuZCByZWNlaXZpbmcKLSAqIDMuIGp1bWJvaW5kZXggPSAtMSBhbmQganVtYm9zaXplICE9IDAgOiBqdW1ibyBmcmFtZSBpcyBvdmVyIHNpemUsIGFscmVhZHkgZHVtcAotICogICAgICAgICAgICAgICBwcmV2aW91cyByZWNlaXZpbmcgYW5kIG5lZWQgdG8gY29udGludWUgZHVtcGluZyB0aGUgY3VycmVudCBvbmUKLSAqLwotZW51bSB7Ci0JTk9STUFMX1BBQ0tFVCwKLQlFUlJPUl9QQUNLRVQKLX07Ci0KLWVudW0gewotCUZSQU1FX05PX1NUQVJUX05PX0VORAk9IDAsCi0JRlJBTUVfV0lUSF9TVEFSVAkJPSAxLAotCUZSQU1FX1dJVEhfRU5ECQk9IDEwLAotCUZSQU1FX1dJVEhfU1RBUlRfV0lUSF9FTkQgPSAxMQotfTsKLQotc3RhdGljIHZvaWQgaXBnX25pY19yeF9mcmVlX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBpbnQgZW50cnkgPSBzcC0+cnhfY3VycmVudCAlIElQR19SRkRMSVNUX0xFTkdUSDsKLQotCWlmIChzcC0+cnhfYnVmZltlbnRyeV0pIHsKLQkJc3RydWN0IGlwZ19yeCAqcnhmZCA9IHNwLT5yeGQgKyBlbnRyeTsKLQotCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LAotCQkJbGU2NF90b19jcHUocnhmZC0+ZnJhZ19pbmZvKSAmIH5JUEdfUkZJX0ZSQUdMRU4sCi0JCQlzcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlkZXZfa2ZyZWVfc2tiX2lycShzcC0+cnhfYnVmZltlbnRyeV0pOwotCQlzcC0+cnhfYnVmZltlbnRyeV0gPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBpcGdfbmljX3J4X2NoZWNrX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGlwZ19yeCAqcnhmZCA9IHNwLT5yeGQgKyAoc3AtPnJ4X2N1cnJlbnQgJSBJUEdfUkZETElTVF9MRU5HVEgpOwotCWludCB0eXBlID0gRlJBTUVfTk9fU1RBUlRfTk9fRU5EOwotCi0JaWYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX0ZSQU1FU1RBUlQpCi0JCXR5cGUgKz0gRlJBTUVfV0lUSF9TVEFSVDsKLQlpZiAobGU2NF90b19jcHUocnhmZC0+cmZzKSAmIElQR19SRlNfRlJBTUVFTkQpCi0JCXR5cGUgKz0gRlJBTUVfV0lUSF9FTkQ7Ci0JcmV0dXJuIHR5cGU7Ci19Ci0KLXN0YXRpYyBpbnQgaXBnX25pY19yeF9jaGVja19lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBpbnQgZW50cnkgPSBzcC0+cnhfY3VycmVudCAlIElQR19SRkRMSVNUX0xFTkdUSDsKLQlzdHJ1Y3QgaXBnX3J4ICpyeGZkID0gc3AtPnJ4ZCArIGVudHJ5OwotCi0JaWYgKElQR19EUk9QX09OX1JYX0VUSF9FUlJPUlMgJiYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJgotCSAgICAgKElQR19SRlNfUlhGSUZPT1ZFUlJVTiB8IElQR19SRlNfUlhSVU5URlJBTUUgfAotCSAgICAgIElQR19SRlNfUlhBTElHTk1FTlRFUlJPUiB8IElQR19SRlNfUlhGQ1NFUlJPUiB8Ci0JICAgICAgSVBHX1JGU19SWE9WRVJTSVpFREZSQU1FIHwgSVBHX1JGU19SWExFTkdUSEVSUk9SKSkpIHsKLQkJSVBHX0RFQlVHX01TRygiUnggZXJyb3IsIFJGUyA9ICUwMTZseFxuIiwKLQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSByeGZkLT5yZnMpOwotCi0JCS8qIEluY3JlbWVudCBnZW5lcmFsIHJlY2VpdmUgZXJyb3Igc3RhdGlzdGljLiAqLwotCQlzcC0+c3RhdHMucnhfZXJyb3JzKys7Ci0KLQkJLyogSW5jcmVtZW50IGRldGFpbGVkIHJlY2VpdmUgZXJyb3Igc3RhdGlzdGljcy4gKi8KLQkJaWYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX1JYRklGT09WRVJSVU4pIHsKLQkJCUlQR19ERUJVR19NU0coIlJYIEZJRk8gb3ZlcnJ1biBvY2N1cnJlZFxuIik7Ci0KLQkJCXNwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwotCQl9Ci0KLQkJaWYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX1JYUlVOVEZSQU1FKSB7Ci0JCQlJUEdfREVCVUdfTVNHKCJSWCBydW50IG9jY3VycmVkXG4iKTsKLQkJCXNwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCX0KLQotCQkvKiBEbyBub3RoaW5nIGZvciBJUEdfUkZTX1JYT1ZFUlNJWkVERlJBTUUsCi0JCSAqIGVycm9yIGNvdW50IGhhbmRsZWQgYnkgYSBJUEcgc3RhdGlzdGljIHJlZ2lzdGVyLgotCQkgKi8KLQotCQlpZiAobGU2NF90b19jcHUocnhmZC0+cmZzKSAmIElQR19SRlNfUlhBTElHTk1FTlRFUlJPUikgewotCQkJSVBHX0RFQlVHX01TRygiUlggYWxpZ25tZW50IGVycm9yIG9jY3VycmVkXG4iKTsKLQkJCXNwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKLQkJfQotCi0JCS8qIERvIG5vdGhpbmcgZm9yIElQR19SRlNfUlhGQ1NFUlJPUiwgZXJyb3IgY291bnQKLQkJICogaGFuZGxlZCBieSBhIElQRyBzdGF0aXN0aWMgcmVnaXN0ZXIuCi0JCSAqLwotCi0JCS8qIEZyZWUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIFJYCi0JCSAqIGJ1ZmZlciBzaW5jZSBpdCBpcyBlcnJvbmVvdXMgYW5kIHdlIHdpbGwKLQkJICogbm90IHBhc3MgaXQgdG8gaGlnaGVyIGxheWVyIHByb2Nlc3Nlcy4KLQkJICovCi0JCWlmIChzcC0+cnhfYnVmZltlbnRyeV0pIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsCi0JCQkJbGU2NF90b19jcHUocnhmZC0+ZnJhZ19pbmZvKSAmIH5JUEdfUkZJX0ZSQUdMRU4sCi0JCQkJc3AtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCQkJZGV2X2tmcmVlX3NrYl9pcnEoc3AtPnJ4X2J1ZmZbZW50cnldKTsKLQkJCXNwLT5yeF9idWZmW2VudHJ5XSA9IE5VTEw7Ci0JCX0KLQkJcmV0dXJuIEVSUk9SX1BBQ0tFVDsKLQl9Ci0JcmV0dXJuIE5PUk1BTF9QQUNLRVQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlwZ19uaWNfcnhfd2l0aF9zdGFydF9hbmRfZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AsCi0JCQkJCSAgc3RydWN0IGlwZ19yeCAqcnhmZCwgdW5zaWduZWQgZW50cnkpCi17Ci0Jc3RydWN0IGlwZ19qdW1ibyAqanVtYm8gPSAmc3AtPmp1bWJvOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGZyYW1lbGVuOwotCi0JaWYgKGp1bWJvLT5mb3VuZF9zdGFydCkgewotCQlkZXZfa2ZyZWVfc2tiX2lycShqdW1iby0+c2tiKTsKLQkJanVtYm8tPmZvdW5kX3N0YXJ0ID0gMDsKLQkJanVtYm8tPmN1cnJlbnRfc2l6ZSA9IDA7Ci0JCWp1bWJvLT5za2IgPSBOVUxMOwotCX0KLQotCS8qIDE6IGZvdW5kIGVycm9yLCAwIG5vIGVycm9yICovCi0JaWYgKGlwZ19uaWNfcnhfY2hlY2tfZXJyb3IoZGV2KSAhPSBOT1JNQUxfUEFDS0VUKQotCQlyZXR1cm47Ci0KLQlza2IgPSBzcC0+cnhfYnVmZltlbnRyeV07Ci0JaWYgKCFza2IpCi0JCXJldHVybjsKLQotCS8qIGFjY2VwdCB0aGlzIGZyYW1lIGFuZCBzZW5kIHRvIHVwcGVyIGxheWVyICovCi0JZnJhbWVsZW4gPSBsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEZSQU1FTEVOOwotCWlmIChmcmFtZWxlbiA+IHNwLT5yeGZyYWdfc2l6ZSkKLQkJZnJhbWVsZW4gPSBzcC0+cnhmcmFnX3NpemU7Ci0KLQlza2JfcHV0KHNrYiwgZnJhbWVsZW4pOwotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0Jc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7Ci0JbmV0aWZfcngoc2tiKTsKLQlzcC0+cnhfYnVmZltlbnRyeV0gPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBpcGdfbmljX3J4X3dpdGhfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwLAotCQkJCSAgc3RydWN0IGlwZ19yeCAqcnhmZCwgdW5zaWduZWQgZW50cnkpCi17Ci0Jc3RydWN0IGlwZ19qdW1ibyAqanVtYm8gPSAmc3AtPmp1bWJvOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc3AtPnBkZXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCS8qIDE6IGZvdW5kIGVycm9yLCAwIG5vIGVycm9yICovCi0JaWYgKGlwZ19uaWNfcnhfY2hlY2tfZXJyb3IoZGV2KSAhPSBOT1JNQUxfUEFDS0VUKQotCQlyZXR1cm47Ci0KLQkvKiBhY2NlcHQgdGhpcyBmcmFtZSBhbmQgc2VuZCB0byB1cHBlciBsYXllciAqLwotCXNrYiA9IHNwLT5yeF9idWZmW2VudHJ5XTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCi0JaWYgKGp1bWJvLT5mb3VuZF9zdGFydCkKLQkJZGV2X2tmcmVlX3NrYl9pcnEoanVtYm8tPnNrYik7Ci0KLQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGxlNjRfdG9fY3B1KHJ4ZmQtPmZyYWdfaW5mbykgJiB+SVBHX1JGSV9GUkFHTEVOLAotCQkJIHNwLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0KLQlza2JfcHV0KHNrYiwgc3AtPnJ4ZnJhZ19zaXplKTsKLQotCWp1bWJvLT5mb3VuZF9zdGFydCA9IDE7Ci0JanVtYm8tPmN1cnJlbnRfc2l6ZSA9IHNwLT5yeGZyYWdfc2l6ZTsKLQlqdW1iby0+c2tiID0gc2tiOwotCi0Jc3AtPnJ4X2J1ZmZbZW50cnldID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgaXBnX25pY19yeF93aXRoX2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwLAotCQkJCXN0cnVjdCBpcGdfcnggKnJ4ZmQsIHVuc2lnbmVkIGVudHJ5KQotewotCXN0cnVjdCBpcGdfanVtYm8gKmp1bWJvID0gJnNwLT5qdW1ibzsKLQotCS8qIDE6IGZvdW5kIGVycm9yLCAwIG5vIGVycm9yICovCi0JaWYgKGlwZ19uaWNfcnhfY2hlY2tfZXJyb3IoZGV2KSA9PSBOT1JNQUxfUEFDS0VUKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBzcC0+cnhfYnVmZltlbnRyeV07Ci0KLQkJaWYgKCFza2IpCi0JCQlyZXR1cm47Ci0KLQkJaWYgKGp1bWJvLT5mb3VuZF9zdGFydCkgewotCQkJaW50IGZyYW1lbGVuLCBlbmRmcmFtZWxlbjsKLQotCQkJZnJhbWVsZW4gPSBsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEZSQU1FTEVOOwotCi0JCQllbmRmcmFtZWxlbiA9IGZyYW1lbGVuIC0ganVtYm8tPmN1cnJlbnRfc2l6ZTsKLQkJCWlmIChmcmFtZWxlbiA+IHNwLT5yeHN1cHBvcnRfc2l6ZSkKLQkJCQlkZXZfa2ZyZWVfc2tiX2lycShqdW1iby0+c2tiKTsKLQkJCWVsc2UgewotCQkJCW1lbWNweShza2JfcHV0KGp1bWJvLT5za2IsIGVuZGZyYW1lbGVuKSwKLQkJCQkgICAgICAgc2tiLT5kYXRhLCBlbmRmcmFtZWxlbik7Ci0KLQkJCQlqdW1iby0+c2tiLT5wcm90b2NvbCA9Ci0JCQkJICAgIGV0aF90eXBlX3RyYW5zKGp1bWJvLT5za2IsIGRldik7Ci0KLQkJCQlza2JfY2hlY2tzdW1fbm9uZV9hc3NlcnQoanVtYm8tPnNrYik7Ci0JCQkJbmV0aWZfcngoanVtYm8tPnNrYik7Ci0JCQl9Ci0JCX0KLQotCQlqdW1iby0+Zm91bmRfc3RhcnQgPSAwOwotCQlqdW1iby0+Y3VycmVudF9zaXplID0gMDsKLQkJanVtYm8tPnNrYiA9IE5VTEw7Ci0KLQkJaXBnX25pY19yeF9mcmVlX3NrYihkZXYpOwotCX0gZWxzZSB7Ci0JCWRldl9rZnJlZV9za2JfaXJxKGp1bWJvLT5za2IpOwotCQlqdW1iby0+Zm91bmRfc3RhcnQgPSAwOwotCQlqdW1iby0+Y3VycmVudF9zaXplID0gMDsKLQkJanVtYm8tPnNrYiA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpcGdfbmljX3J4X25vX3N0YXJ0X25vX2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCwKLQkJCQkgICAgICAgc3RydWN0IGlwZ19yeCAqcnhmZCwgdW5zaWduZWQgZW50cnkpCi17Ci0Jc3RydWN0IGlwZ19qdW1ibyAqanVtYm8gPSAmc3AtPmp1bWJvOwotCi0JLyogMTogZm91bmQgZXJyb3IsIDAgbm8gZXJyb3IgKi8KLQlpZiAoaXBnX25pY19yeF9jaGVja19lcnJvcihkZXYpID09IE5PUk1BTF9QQUNLRVQpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNwLT5yeF9idWZmW2VudHJ5XTsKLQotCQlpZiAoc2tiKSB7Ci0JCQlpZiAoanVtYm8tPmZvdW5kX3N0YXJ0KSB7Ci0JCQkJanVtYm8tPmN1cnJlbnRfc2l6ZSArPSBzcC0+cnhmcmFnX3NpemU7Ci0JCQkJaWYgKGp1bWJvLT5jdXJyZW50X3NpemUgPD0gc3AtPnJ4c3VwcG9ydF9zaXplKSB7Ci0JCQkJCW1lbWNweShza2JfcHV0KGp1bWJvLT5za2IsCi0JCQkJCQkgICAgICAgc3AtPnJ4ZnJhZ19zaXplKSwKLQkJCQkJICAgICAgIHNrYi0+ZGF0YSwgc3AtPnJ4ZnJhZ19zaXplKTsKLQkJCQl9Ci0JCQl9Ci0JCQlpcGdfbmljX3J4X2ZyZWVfc2tiKGRldik7Ci0JCX0KLQl9IGVsc2UgewotCQlkZXZfa2ZyZWVfc2tiX2lycShqdW1iby0+c2tiKTsKLQkJanVtYm8tPmZvdW5kX3N0YXJ0ID0gMDsKLQkJanVtYm8tPmN1cnJlbnRfc2l6ZSA9IDA7Ci0JCWp1bWJvLT5za2IgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBpcGdfbmljX3J4X2p1bWJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGludCBjdXJyID0gc3AtPnJ4X2N1cnJlbnQ7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwotCXVuc2lnbmVkIGludCBpOwotCi0JSVBHX0RFQlVHX01TRygiX25pY19yeFxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVBHX01BWFJGRFBST0NFU1NfQ09VTlQ7IGkrKywgY3VycisrKSB7Ci0JCXVuc2lnbmVkIGludCBlbnRyeSA9IGN1cnIgJSBJUEdfUkZETElTVF9MRU5HVEg7Ci0JCXN0cnVjdCBpcGdfcnggKnJ4ZmQgPSBzcC0+cnhkICsgZW50cnk7Ci0KLQkJaWYgKCEocnhmZC0+cmZzICYgY3B1X3RvX2xlNjQoSVBHX1JGU19SRkRET05FKSkpCi0JCQlicmVhazsKLQotCQlzd2l0Y2ggKGlwZ19uaWNfcnhfY2hlY2tfZnJhbWVfdHlwZShkZXYpKSB7Ci0JCWNhc2UgRlJBTUVfV0lUSF9TVEFSVF9XSVRIX0VORDoKLQkJCWlwZ19uaWNfcnhfd2l0aF9zdGFydF9hbmRfZW5kKGRldiwgc3AsIHJ4ZmQsIGVudHJ5KTsKLQkJCWJyZWFrOwotCQljYXNlIEZSQU1FX1dJVEhfU1RBUlQ6Ci0JCQlpcGdfbmljX3J4X3dpdGhfc3RhcnQoZGV2LCBzcCwgcnhmZCwgZW50cnkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRlJBTUVfV0lUSF9FTkQ6Ci0JCQlpcGdfbmljX3J4X3dpdGhfZW5kKGRldiwgc3AsIHJ4ZmQsIGVudHJ5KTsKLQkJCWJyZWFrOwotCQljYXNlIEZSQU1FX05PX1NUQVJUX05PX0VORDoKLQkJCWlwZ19uaWNfcnhfbm9fc3RhcnRfbm9fZW5kKGRldiwgc3AsIHJ4ZmQsIGVudHJ5KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0Jc3AtPnJ4X2N1cnJlbnQgPSBjdXJyOwotCi0JaWYgKGkgPT0gSVBHX01BWFJGRFBST0NFU1NfQ09VTlQpIHsKLQkJLyogVGhlcmUgYXJlIG1vcmUgUkZEcyB0byBwcm9jZXNzLCBob3dldmVyIHRoZQotCQkgKiBhbGxvY2F0ZWQgYW1vdW50IG9mIFJGRCBwcm9jZXNzaW5nIHRpbWUgaGFzCi0JCSAqIGV4cGlyZWQuIEFzc2VydCBJbnRlcnJ1cHQgUmVxdWVzdGVkIHRvIG1ha2UKLQkJICogc3VyZSB3ZSBjb21lIGJhY2sgdG8gcHJvY2VzcyB0aGUgcmVtYWluaW5nIFJGRHMuCi0JCSAqLwotCQlpcGdfdzMyKGlwZ19yMzIoQVNJQ19DVFJMKSB8IElQR19BQ19JTlRfUkVRVUVTVCwgQVNJQ19DVFJMKTsKLQl9Ci0KLQlpcGdfbmljX3J4cmVzdG9yZShkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXBnX25pY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCS8qIFRyYW5zZmVyIHJlY2VpdmVkIEV0aGVybmV0IGZyYW1lcyB0byBoaWdoZXIgbmV0d29yayBsYXllcnMuICovCi0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGludCBjdXJyID0gc3AtPnJ4X2N1cnJlbnQ7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwotCXN0cnVjdCBpcGdfcnggKnJ4ZmQ7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlJUEdfREVCVUdfTVNHKCJfbmljX3J4XG4iKTsKLQotI2RlZmluZSBfX1JGU19NQVNLIFwKLQljcHVfdG9fbGU2NChJUEdfUkZTX1JGRERPTkUgfCBJUEdfUkZTX0ZSQU1FU1RBUlQgfCBJUEdfUkZTX0ZSQU1FRU5EKQotCi0JZm9yIChpID0gMDsgaSA8IElQR19NQVhSRkRQUk9DRVNTX0NPVU5UOyBpKyssIGN1cnIrKykgewotCQl1bnNpZ25lZCBpbnQgZW50cnkgPSBjdXJyICUgSVBHX1JGRExJU1RfTEVOR1RIOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc3AtPnJ4X2J1ZmZbZW50cnldOwotCQl1bnNpZ25lZCBpbnQgZnJhbWVsZW47Ci0KLQkJcnhmZCA9IHNwLT5yeGQgKyBlbnRyeTsKLQotCQlpZiAoKChyeGZkLT5yZnMgJiBfX1JGU19NQVNLKSAhPSBfX1JGU19NQVNLKSB8fCAhc2tiKQotCQkJYnJlYWs7Ci0KLQkJLyogR2V0IHJlY2VpdmVkIGZyYW1lIGxlbmd0aC4gKi8KLQkJZnJhbWVsZW4gPSBsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEZSQU1FTEVOOwotCi0JCS8qIENoZWNrIGZvciBqdW1ibyBmcmFtZSBhcnJpdmFsIHdpdGggdG9vIHNtYWxsCi0JCSAqIFJYRlJBR19TSVpFLgotCQkgKi8KLQkJaWYgKGZyYW1lbGVuID4gc3AtPnJ4ZnJhZ19zaXplKSB7Ci0JCQlJUEdfREVCVUdfTVNHCi0JCQkgICAgKCJSRlMgRnJhbWVMZW4gPiBhbGxvY2F0ZWQgZnJhZ21lbnQgc2l6ZVxuIik7Ci0KLQkJCWZyYW1lbGVuID0gc3AtPnJ4ZnJhZ19zaXplOwotCQl9Ci0KLQkJaWYgKChJUEdfRFJPUF9PTl9SWF9FVEhfRVJST1JTICYmIChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYKLQkJICAgICAgIChJUEdfUkZTX1JYRklGT09WRVJSVU4gfCBJUEdfUkZTX1JYUlVOVEZSQU1FIHwKLQkJCUlQR19SRlNfUlhBTElHTk1FTlRFUlJPUiB8IElQR19SRlNfUlhGQ1NFUlJPUiB8Ci0JCQlJUEdfUkZTX1JYT1ZFUlNJWkVERlJBTUUgfCBJUEdfUkZTX1JYTEVOR1RIRVJST1IpKSkpIHsKLQotCQkJSVBHX0RFQlVHX01TRygiUnggZXJyb3IsIFJGUyA9ICUwMTZseFxuIiwKLQkJCQkgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHJ4ZmQtPnJmcyk7Ci0KLQkJCS8qIEluY3JlbWVudCBnZW5lcmFsIHJlY2VpdmUgZXJyb3Igc3RhdGlzdGljLiAqLwotCQkJc3AtPnN0YXRzLnJ4X2Vycm9ycysrOwotCi0JCQkvKiBJbmNyZW1lbnQgZGV0YWlsZWQgcmVjZWl2ZSBlcnJvciBzdGF0aXN0aWNzLiAqLwotCQkJaWYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX1JYRklGT09WRVJSVU4pIHsKLQkJCQlJUEdfREVCVUdfTVNHKCJSWCBGSUZPIG92ZXJydW4gb2NjdXJyZWRcbiIpOwotCQkJCXNwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwotCQkJfQotCi0JCQlpZiAobGU2NF90b19jcHUocnhmZC0+cmZzKSAmIElQR19SRlNfUlhSVU5URlJBTUUpIHsKLQkJCQlJUEdfREVCVUdfTVNHKCJSWCBydW50IG9jY3VycmVkXG4iKTsKLQkJCQlzcC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJfQotCi0JCQlpZiAobGU2NF90b19jcHUocnhmZC0+cmZzKSAmIElQR19SRlNfUlhPVkVSU0laRURGUkFNRSkgOwotCQkJLyogRG8gbm90aGluZywgZXJyb3IgY291bnQgaGFuZGxlZCBieSBhIElQRwotCQkJICogc3RhdGlzdGljIHJlZ2lzdGVyLgotCQkJICovCi0KLQkJCWlmIChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEFMSUdOTUVOVEVSUk9SKSB7Ci0JCQkJSVBHX0RFQlVHX01TRygiUlggYWxpZ25tZW50IGVycm9yIG9jY3VycmVkXG4iKTsKLQkJCQlzcC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JCQl9Ci0KLQkJCWlmIChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEZDU0VSUk9SKSA7Ci0JCQkvKiBEbyBub3RoaW5nLCBlcnJvciBjb3VudCBoYW5kbGVkIGJ5IGEgSVBHCi0JCQkgKiBzdGF0aXN0aWMgcmVnaXN0ZXIuCi0JCQkgKi8KLQotCQkJLyogRnJlZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgUlgKLQkJCSAqIGJ1ZmZlciBzaW5jZSBpdCBpcyBlcnJvbmVvdXMgYW5kIHdlIHdpbGwKLQkJCSAqIG5vdCBwYXNzIGl0IHRvIGhpZ2hlciBsYXllciBwcm9jZXNzZXMuCi0JCQkgKi8KLQkJCWlmIChza2IpIHsKLQkJCQlfX2xlNjQgaW5mbyA9IHJ4ZmQtPmZyYWdfaW5mbzsKLQotCQkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsCi0JCQkJCWxlNjRfdG9fY3B1KGluZm8pICYgfklQR19SRklfRlJBR0xFTiwKLQkJCQkJc3AtPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0KLQkJCS8qIEFkanVzdCB0aGUgbmV3IGJ1ZmZlciBsZW5ndGggdG8gYWNjb21tb2RhdGUgdGhlIHNpemUKLQkJCSAqIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KLQkJCSAqLwotCQkJc2tiX3B1dChza2IsIGZyYW1lbGVuKTsKLQotCQkJLyogU2V0IHRoZSBidWZmZXIncyBwcm90b2NvbCBmaWVsZCB0byBFdGhlcm5ldC4gKi8KLQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0KLQkJCS8qIFRoZSBJUEcgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2l0aCAob3IKLQkJCSAqIHRoZXJlIHdlcmUgbm8pIElQL1RDUC9VRFAgY2hlY2tzdW1zLgotCQkJICogVGhpcyBtYXkgb3IgbWF5IG5vdCBpbmRpY2F0ZSBhbiBpbnZhbGlkCi0JCQkgKiBJUC9UQ1AvVURQIGZyYW1lIHdhcyByZWNlaXZlZC4gTGV0IHRoZQotCQkJICogdXBwZXIgbGF5ZXIgZGVjaWRlLgotCQkJICovCi0JCQlza2JfY2hlY2tzdW1fbm9uZV9hc3NlcnQoc2tiKTsKLQotCQkJLyogSGFuZCBvZmYgZnJhbWUgZm9yIGhpZ2hlciBsYXllciBwcm9jZXNzaW5nLgotCQkJICogVGhlIGZ1bmN0aW9uIG5ldGlmX3J4KCkgcmVsZWFzZXMgdGhlIHNrX2J1ZmYKLQkJCSAqIHdoZW4gcHJvY2Vzc2luZyBjb21wbGV0ZXMuCi0JCQkgKi8KLQkJCW5ldGlmX3J4KHNrYik7Ci0JCX0KLQotCQkvKiBBc3N1cmUgUlggYnVmZmVyIGlzIG5vdCByZXVzZWQgYnkgSVBHLiAqLwotCQlzcC0+cnhfYnVmZltlbnRyeV0gPSBOVUxMOwotCX0KLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIG1vcmUgUkZEcyB0byBwcm9jZXNzIGFuZCB0aGUgYWxsb2NhdGVkIGFtb3VudCBvZiBSRkQKLQkgKiBwcm9jZXNzaW5nIHRpbWUgaGFzIGV4cGlyZWQsIGFzc2VydCBJbnRlcnJ1cHQgUmVxdWVzdGVkIHRvIG1ha2UKLQkgKiBzdXJlIHdlIGNvbWUgYmFjayB0byBwcm9jZXNzIHRoZSByZW1haW5pbmcgUkZEcy4KLQkgKi8KLQlpZiAoaSA9PSBJUEdfTUFYUkZEUFJPQ0VTU19DT1VOVCkKLQkJaXBnX3czMihpcGdfcjMyKEFTSUNfQ1RSTCkgfCBJUEdfQUNfSU5UX1JFUVVFU1QsIEFTSUNfQ1RSTCk7Ci0KLSNpZmRlZiBJUEdfREVCVUcKLQkvKiBDaGVjayBpZiB0aGUgUkZEIGxpc3QgY29udGFpbmVkIG5vIHJlY2VpdmUgZnJhbWUgZGF0YS4gKi8KLQlpZiAoIWkpCi0JCXNwLT5FbXB0eVJGRExpc3RDb3VudCsrOwotI2VuZGlmCi0Jd2hpbGUgKChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SRkRET05FKSAmJgotCSAgICAgICAhKChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19GUkFNRVNUQVJUKSAmJgotCQkgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX0ZSQU1FRU5EKSkpIHsKLQkJdW5zaWduZWQgaW50IGVudHJ5ID0gY3VycisrICUgSVBHX1JGRExJU1RfTEVOR1RIOwotCi0JCXJ4ZmQgPSBzcC0+cnhkICsgZW50cnk7Ci0KLQkJSVBHX0RFQlVHX01TRygiRnJhbWUgcmVxdWlyZXMgbXVsdGlwbGUgUkZEc1xuIik7Ci0KLQkJLyogQW4gdW5leHBlY3RlZCBldmVudCwgYWRkaXRpb25hbCBjb2RlIG5lZWRlZCB0byBoYW5kbGUKLQkJICogcHJvcGVybHkuIFNvIGZvciB0aGUgdGltZSBiZWluZywganVzdCBkaXNyZWdhcmQgdGhlCi0JCSAqIGZyYW1lLgotCQkgKi8KLQotCQkvKiBGcmVlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBSWAotCQkgKiBidWZmZXIgc2luY2UgaXQgaXMgZXJyb25lb3VzIGFuZCB3ZSB3aWxsCi0JCSAqIG5vdCBwYXNzIGl0IHRvIGhpZ2hlciBsYXllciBwcm9jZXNzZXMuCi0JCSAqLwotCQlpZiAoc3AtPnJ4X2J1ZmZbZW50cnldKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LAotCQkJCWxlNjRfdG9fY3B1KHJ4ZmQtPmZyYWdfaW5mbykgJiB+SVBHX1JGSV9GUkFHTEVOLAotCQkJCXNwLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlkZXZfa2ZyZWVfc2tiX2lycShzcC0+cnhfYnVmZltlbnRyeV0pOwotCQl9Ci0KLQkJLyogQXNzdXJlIFJYIGJ1ZmZlciBpcyBub3QgcmV1c2VkIGJ5IElQRy4gKi8KLQkJc3AtPnJ4X2J1ZmZbZW50cnldID0gTlVMTDsKLQl9Ci0KLQlzcC0+cnhfY3VycmVudCA9IGN1cnI7Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGEgbWluaW11bSBudW1iZXIgb2YgdXNlZAotCSAqIFJGRHMgYmVmb3JlIHJlc3RvcmluZyBhbnkgKHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlLikKLQkgKi8KLQlpZiAoKGN1cnIgLSBzcC0+cnhfZGlydHkpID49IElQR19NSU5VU0VEUkZEU1RPRlJFRSkKLQkJaXBnX25pY19yeHJlc3RvcmUoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpcGdfcmVzZXRfYWZ0ZXJfaG9zdF9lcnJvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSwgdGFzay53b3JrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3AtPmRldjsKLQotCS8qCi0JICogQWNrbm93bGVkZ2UgSG9zdEVycm9yIGludGVycnVwdCBieSByZXNldHRpbmcKLQkgKiBJUEcgRE1BIGFuZCBIT1NULgotCSAqLwotCWlwZ19yZXNldChkZXYsIElQR19BQ19HTE9CQUxfUkVTRVQgfCBJUEdfQUNfSE9TVCB8IElQR19BQ19ETUEpOwotCi0JaW5pdF9yZmRsaXN0KGRldik7Ci0JaW5pdF90ZmRsaXN0KGRldik7Ci0KLQlpZiAoaXBnX2lvX2NvbmZpZyhkZXYpIDwgMCkgewotCQluZXRkZXZfaW5mbyhkZXYsICJDYW5ub3QgcmVjb3ZlciBmcm9tIFBDSSBlcnJvclxuIik7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc3AtPnRhc2ssIEhaKTsKLQl9Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBpcGdfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3QpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pbnN0OwotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHNwLT5pb2FkZHI7Ci0JdW5zaWduZWQgaW50IGhhbmRsZWQgPSAwOwotCXUxNiBzdGF0dXM7Ci0KLQlJUEdfREVCVUdfTVNHKCJfaW50ZXJydXB0X2hhbmRsZXJcbiIpOwotCi0JaWYgKHNwLT5pc19qdW1ibykKLQkJaXBnX25pY19yeHJlc3RvcmUoZGV2KTsKLQotCXNwaW5fbG9jaygmc3AtPmxvY2spOwotCi0JLyogR2V0IGludGVycnVwdCBzb3VyY2UgaW5mb3JtYXRpb24sIGFuZCBhY2tub3dsZWRnZQotCSAqIHNvbWUgKGkuZS4gVHhETUFDb21wbGV0ZSwgUnhETUFDb21wbGV0ZSwgUnhFYXJseSwKLQkgKiBJbnRSZXF1ZXN0ZWQsIE1hY0NvbnRyb2xGcmFtZSwgTGlua0V2ZW50KSBpbnRlcnJ1cHRzCi0JICogaWYgaXNzdWVkLiBBbHNvLCBhbGwgSVBHIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGJ5Ci0JICogcmVhZGluZyBJbnRTdGF0dXNBY2suCi0JICovCi0Jc3RhdHVzID0gaXBnX3IxNihJTlRfU1RBVFVTX0FDSyk7Ci0KLQlJUEdfREVCVUdfTVNHKCJJbnRTdGF0dXNBY2sgPSAlMDR4XG4iLCBzdGF0dXMpOwotCi0JLyogU2hhcmVkIElSUSBvZiByZW1vdmUgZXZlbnQuICovCi0JaWYgKCEoc3RhdHVzICYgSVBHX0lTX1JTVkRfTUFTSykpCi0JCWdvdG8gb3V0X2VuYWJsZTsKLQotCWhhbmRsZWQgPSAxOwotCi0JaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKGRldikpKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkvKiBJZiBSRkRMaXN0RW5kIGludGVycnVwdCwgcmVzdG9yZSBhbGwgdXNlZCBSRkRzLiAqLwotCWlmIChzdGF0dXMgJiBJUEdfSVNfUkZEX0xJU1RfRU5EKSB7Ci0JCUlQR19ERUJVR19NU0coIlJGRExpc3RFbmQgSW50ZXJydXB0XG4iKTsKLQotCQkvKiBUaGUgUkZEIGxpc3QgZW5kIGluZGljYXRlcyBhbiBSRkQgd2FzIGVuY291bnRlcmVkCi0JCSAqIHdpdGggYSAwIE5leHRQdHIsIG9yIHdpdGggYW4gUkZERG9uZSBiaXQgc2V0IHRvIDEKLQkJICogKGluZGljYXRpbmcgdGhlIFJGRCBpcyBub3QgcmVhZCBmb3IgdXNlIGJ5IHRoZQotCQkgKiBJUEcuKSBUcnkgdG8gcmVzdG9yZSBhbGwgUkZEcy4KLQkJICovCi0JCWlwZ19uaWNfcnhyZXN0b3JlKGRldik7Ci0KLSNpZmRlZiBJUEdfREVCVUcKLQkJLyogSW5jcmVtZW50IHRoZSBSRkRsaXN0ZW5kQ291bnQgY291bnRlci4gKi8KLQkJc3AtPlJGRGxpc3RlbmRDb3VudCsrOwotI2VuZGlmCi0JfQotCi0JLyogSWYgUkZETGlzdEVuZCwgUnhETUFQcmlvcml0eSwgUnhETUFDb21wbGV0ZSwgb3IKLQkgKiBJbnRSZXF1ZXN0ZWQgaW50ZXJydXB0LCBwcm9jZXNzIHJlY2VpdmVkIGZyYW1lcy4gKi8KLQlpZiAoKHN0YXR1cyAmIElQR19JU19SWF9ETUFfUFJJT1JJVFkpIHx8Ci0JICAgIChzdGF0dXMgJiBJUEdfSVNfUkZEX0xJU1RfRU5EKSB8fAotCSAgICAoc3RhdHVzICYgSVBHX0lTX1JYX0RNQV9DT01QTEVURSkgfHwKLQkgICAgKHN0YXR1cyAmIElQR19JU19JTlRfUkVRVUVTVEVEKSkgewotI2lmZGVmIElQR19ERUJVRwotCQkvKiBJbmNyZW1lbnQgdGhlIFJGRCBsaXN0IGNoZWNrZWQgY291bnRlciBpZiBpbnRlcnJ1cHRlZAotCQkgKiBvbmx5IHRvIGNoZWNrIHRoZSBSRkQgbGlzdC4gKi8KLQkJaWYgKHN0YXR1cyAmICh+KElQR19JU19SWF9ETUFfUFJJT1JJVFkgfCBJUEdfSVNfUkZEX0xJU1RfRU5EIHwKLQkJCQlJUEdfSVNfUlhfRE1BX0NPTVBMRVRFIHwgSVBHX0lTX0lOVF9SRVFVRVNURUQpICYKLQkJCSAgICAgICAoSVBHX0lTX0hPU1RfRVJST1IgfCBJUEdfSVNfVFhfRE1BX0NPTVBMRVRFIHwKLQkJCQlJUEdfSVNfTElOS19FVkVOVCB8IElQR19JU19UWF9DT01QTEVURSB8Ci0JCQkJSVBHX0lTX1VQREFURV9TVEFUUykpKQotCQkJc3AtPlJGRExpc3RDaGVja2VkQ291bnQrKzsKLSNlbmRpZgotCi0JCWlmIChzcC0+aXNfanVtYm8pCi0JCQlpcGdfbmljX3J4X2p1bWJvKGRldik7Ci0JCWVsc2UKLQkJCWlwZ19uaWNfcngoZGV2KTsKLQl9Ci0KLQkvKiBJZiBUeERNQUNvbXBsZXRlIGludGVycnVwdCwgZnJlZSB1c2VkIFRGRHMuICovCi0JaWYgKHN0YXR1cyAmIElQR19JU19UWF9ETUFfQ09NUExFVEUpCi0JCWlwZ19uaWNfdHhmcmVlKGRldik7Ci0KLQkvKiBUeENvbXBsZXRlIGludGVycnVwdHMgaW5kaWNhdGUgb25lIG9mIG51bWVyb3VzIGFjdGlvbnMuCi0JICogRGV0ZXJtaW5lIHdoYXQgYWN0aW9uIHRvIHRha2UgYmFzZWQgb24gVFhTVEFUVVMgcmVnaXN0ZXIuCi0JICovCi0JaWYgKHN0YXR1cyAmIElQR19JU19UWF9DT01QTEVURSkKLQkJaXBnX25pY190eGNsZWFudXAoZGV2KTsKLQotCS8qIElmIFVwZGF0ZVN0YXRzIGludGVycnVwdCwgdXBkYXRlIExpbnV4IEV0aGVybmV0IHN0YXRpc3RpY3MgKi8KLQlpZiAoc3RhdHVzICYgSVBHX0lTX1VQREFURV9TVEFUUykKLQkJaXBnX25pY19nZXRfc3RhdHMoZGV2KTsKLQotCS8qIElmIEhvc3RFcnJvciBpbnRlcnJ1cHQsIHJlc2V0IElQRy4gKi8KLQlpZiAoc3RhdHVzICYgSVBHX0lTX0hPU1RfRVJST1IpIHsKLQkJSVBHX0RERUJVR19NU0coIkhvc3RFcnJvciBJbnRlcnJ1cHRcbiIpOwotCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc3AtPnRhc2ssIDApOwotCX0KLQotCS8qIElmIExpbmtFdmVudCBpbnRlcnJ1cHQsIHJlc29sdmUgYXV0b25lZ290aWF0aW9uLiAqLwotCWlmIChzdGF0dXMgJiBJUEdfSVNfTElOS19FVkVOVCkgewotCQlpZiAoaXBnX2NvbmZpZ19hdXRvbmVnKGRldikgPCAwKQotCQkJbmV0ZGV2X2luZm8oZGV2LCAiQXV0by1uZWdvdGlhdGlvbiBlcnJvclxuIik7Ci0JfQotCi0JLyogSWYgTUFDQ3RybEZyYW1lIGludGVycnVwdCwgZG8gbm90aGluZy4gKi8KLQlpZiAoc3RhdHVzICYgSVBHX0lTX01BQ19DVFJMX0ZSQU1FKQotCQlJUEdfREVCVUdfTVNHKCJNQUNDdHJsRnJhbWUgaW50ZXJydXB0XG4iKTsKLQotCS8qIElmIFJ4Q29tcGxldGUgaW50ZXJydXB0LCBkbyBub3RoaW5nLiAqLwotCWlmIChzdGF0dXMgJiBJUEdfSVNfUlhfQ09NUExFVEUpCi0JCUlQR19ERUJVR19NU0coIlJ4Q29tcGxldGUgaW50ZXJydXB0XG4iKTsKLQotCS8qIElmIFJ4RWFybHkgaW50ZXJydXB0LCBkbyBub3RoaW5nLiAqLwotCWlmIChzdGF0dXMgJiBJUEdfSVNfUlhfRUFSTFkpCi0JCUlQR19ERUJVR19NU0coIlJ4RWFybHkgaW50ZXJydXB0XG4iKTsKLQotb3V0X2VuYWJsZToKLQkvKiBSZS1lbmFibGUgSVBHIGludGVycnVwdHMuICovCi0JaXBnX3cxNihJUEdfSUVfVFhfRE1BX0NPTVBMRVRFIHwgSVBHX0lFX1JYX0RNQV9DT01QTEVURSB8Ci0JCUlQR19JRV9IT1NUX0VSUk9SIHwgSVBHX0lFX0lOVF9SRVFVRVNURUQgfCBJUEdfSUVfVFhfQ09NUExFVEUgfAotCQlJUEdfSUVfTElOS19FVkVOVCB8IElQR19JRV9VUERBVEVfU1RBVFMsIElOVF9FTkFCTEUpOwotb3V0X3VubG9jazoKLQlzcGluX3VubG9jaygmc3AtPmxvY2spOwotCi0JcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlwZ19yeF9jbGVhcihzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBJUEdfUkZETElTVF9MRU5HVEg7IGkrKykgewotCQlpZiAoc3AtPnJ4X2J1ZmZbaV0pIHsKLQkJCXN0cnVjdCBpcGdfcnggKnJ4ZmQgPSBzcC0+cnhkICsgaTsKLQotCQkJZGV2X2tmcmVlX3NrYl9pcnEoc3AtPnJ4X2J1ZmZbaV0pOwotCQkJc3AtPnJ4X2J1ZmZbaV0gPSBOVUxMOwotCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwKLQkJCQlsZTY0X3RvX2NwdShyeGZkLT5mcmFnX2luZm8pICYgfklQR19SRklfRlJBR0xFTiwKLQkJCQlzcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpcGdfdHhfY2xlYXIoc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3ApCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVBHX1RGRExJU1RfTEVOR1RIOyBpKyspIHsKLQkJaWYgKHNwLT50eF9idWZmW2ldKSB7Ci0JCQlzdHJ1Y3QgaXBnX3R4ICp0eGZkID0gc3AtPnR4ZCArIGk7Ci0KLQkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsCi0JCQkJbGU2NF90b19jcHUodHhmZC0+ZnJhZ19pbmZvKSAmIH5JUEdfVEZJX0ZSQUdMRU4sCi0JCQkJc3AtPnR4X2J1ZmZbaV0tPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJCWRldl9rZnJlZV9za2JfaXJxKHNwLT50eF9idWZmW2ldKTsKLQotCQkJc3AtPnR4X2J1ZmZbaV0gPSBOVUxMOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IGlwZ19uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHNwLT5pb2FkZHI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBzcC0+cGRldjsKLQlpbnQgcmM7Ci0KLQlJUEdfREVCVUdfTVNHKCJfbmljX29wZW5cbiIpOwotCi0Jc3AtPnJ4X2J1Zl9zeiA9IHNwLT5yeHN1cHBvcnRfc2l6ZTsKLQotCS8qIENoZWNrIGZvciBpbnRlcnJ1cHQgbGluZSBjb25mbGljdHMsIGFuZCByZXF1ZXN0IGludGVycnVwdAotCSAqIGxpbmUgZm9yIElQRy4KLQkgKgotCSAqIElNUE9SVEFOVDogRGlzYWJsZSBJUEcgaW50ZXJydXB0cyBwcmlvciB0byByZWdpc3RlcmluZwotCSAqICAgICAgICAgICAgSVJRLgotCSAqLwotCWlwZ193MTYoMHgwMDAwLCBJTlRfRU5BQkxFKTsKLQotCS8qIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgbGluZSB0byBiZSB1c2VkIGJ5IHRoZSBJUEcgd2l0aGluCi0JICogdGhlIExpbnV4IHN5c3RlbS4KLQkgKi8KLQlyYyA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaXBnX2ludGVycnVwdF9oYW5kbGVyLCBJUlFGX1NIQVJFRCwKLQkJCSBkZXYtPm5hbWUsIGRldik7Ci0JaWYgKHJjIDwgMCkgewotCQluZXRkZXZfaW5mbyhkZXYsICJFcnJvciB3aGVuIHJlcXVlc3RpbmcgaW50ZXJydXB0XG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7Ci0KLQlyYyA9IC1FTk9NRU07Ci0KLQlzcC0+cnhkID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIElQR19SWF9SSU5HX0JZVEVTLAotCQkJCSAgICAgJnNwLT5yeGRfbWFwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwLT5yeGQpCi0JCWdvdG8gZXJyX2ZyZWVfaXJxXzA7Ci0KLQlzcC0+dHhkID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIElQR19UWF9SSU5HX0JZVEVTLAotCQkJCSAgICAgJnNwLT50eGRfbWFwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwLT50eGQpCi0JCWdvdG8gZXJyX2ZyZWVfcnhfMTsKLQotCXJjID0gaW5pdF9yZmRsaXN0KGRldik7Ci0JaWYgKHJjIDwgMCkgewotCQluZXRkZXZfaW5mbyhkZXYsICJFcnJvciBkdXJpbmcgY29uZmlndXJhdGlvblxuIik7Ci0JCWdvdG8gZXJyX2ZyZWVfdHhfMjsKLQl9Ci0KLQlpbml0X3RmZGxpc3QoZGV2KTsKLQotCXJjID0gaXBnX2lvX2NvbmZpZyhkZXYpOwotCWlmIChyYyA8IDApIHsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiRXJyb3IgZHVyaW5nIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlnb3RvIGVycl9yZWxlYXNlX3RmZGxpc3RfMzsKLQl9Ci0KLQkvKiBSZXNvbHZlIGF1dG9uZWdvdGlhdGlvbi4gKi8KLQlpZiAoaXBnX2NvbmZpZ19hdXRvbmVnKGRldikgPCAwKQotCQluZXRkZXZfaW5mbyhkZXYsICJBdXRvLW5lZ290aWF0aW9uIGVycm9yXG4iKTsKLQotCS8qIGluaXRpYWxpemUgSlVNQk8gRnJhbWUgY29udHJvbCB2YXJpYWJsZSAqLwotCXNwLT5qdW1iby5mb3VuZF9zdGFydCA9IDA7Ci0Jc3AtPmp1bWJvLmN1cnJlbnRfc2l6ZSA9IDA7Ci0Jc3AtPmp1bWJvLnNrYiA9IE5VTEw7Ci0KLQkvKiBFbmFibGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgb3BlcmF0aW9uIG9mIHRoZSBJUEcuICovCi0JaXBnX3czMigoaXBnX3IzMihNQUNfQ1RSTCkgfCBJUEdfTUNfUlhfRU5BQkxFIHwgSVBHX01DX1RYX0VOQUJMRSkgJgotCQkgSVBHX01DX1JTVkRfTUFTSywgTUFDX0NUUkwpOwotCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLW91dDoKLQlyZXR1cm4gcmM7Ci0KLWVycl9yZWxlYXNlX3RmZGxpc3RfMzoKLQlpcGdfdHhfY2xlYXIoc3ApOwotCWlwZ19yeF9jbGVhcihzcCk7Ci1lcnJfZnJlZV90eF8yOgotCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIElQR19UWF9SSU5HX0JZVEVTLCBzcC0+dHhkLCBzcC0+dHhkX21hcCk7Ci1lcnJfZnJlZV9yeF8xOgotCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIElQR19SWF9SSU5HX0JZVEVTLCBzcC0+cnhkLCBzcC0+cnhkX21hcCk7Ci1lcnJfZnJlZV9pcnFfMDoKLQlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7Ci0JZ290byBvdXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaXBnX25pY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gc3AtPmlvYWRkcjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNwLT5wZGV2OwotCi0JSVBHX0RFQlVHX01TRygiX25pY19zdG9wXG4iKTsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCUlQR19EVU1QVEZETElTVChkZXYpOwotCi0JZG8gewotCQkodm9pZCkgaXBnX3IxNihJTlRfU1RBVFVTX0FDSyk7Ci0KLQkJaXBnX3Jlc2V0KGRldiwgSVBHX0FDX0dMT0JBTF9SRVNFVCB8IElQR19BQ19IT1NUIHwgSVBHX0FDX0RNQSk7Ci0KLQkJc3luY2hyb25pemVfaXJxKHBkZXYtPmlycSk7Ci0JfSB3aGlsZSAoaXBnX3IxNihJTlRfRU5BQkxFKSAmIElQR19JRV9SU1ZEX01BU0spOwotCi0JaXBnX3J4X2NsZWFyKHNwKTsKLQotCWlwZ190eF9jbGVhcihzcCk7Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIElQR19SWF9SSU5HX0JZVEVTLCBzcC0+cnhkLCBzcC0+cnhkX21hcCk7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBJUEdfVFhfUklOR19CWVRFUywgc3AtPnR4ZCwgc3AtPnR4ZF9tYXApOwotCi0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBuZXRkZXZfdHhfdCBpcGdfbmljX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHNwLT5pb2FkZHI7Ci0JdW5zaWduZWQgaW50IGVudHJ5ID0gc3AtPnR4X2N1cnJlbnQgJSBJUEdfVEZETElTVF9MRU5HVEg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaXBnX3R4ICp0eGZkOwotCi0JSVBHX0RERUJVR19NU0coIl9uaWNfaGFyZF9zdGFydF94bWl0XG4iKTsKLQotCS8qIElmIGluIDEwTWJwcyBtb2RlLCBzdG9wIHRoZSB0cmFuc21pdCBxdWV1ZSBzbwotCSAqIG5vIG1vcmUgdHJhbnNtaXQgZnJhbWVzIGFyZSBhY2NlcHRlZC4KLQkgKi8KLQlpZiAoc3AtPnRlbm1icHNtb2RlKQotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQlpZiAoc3AtPnJlc2V0X2N1cnJlbnRfdGZkKSB7Ci0JCXNwLT5yZXNldF9jdXJyZW50X3RmZCA9IDA7Ci0JCWVudHJ5ID0gMDsKLQl9Ci0KLQl0eGZkID0gc3AtPnR4ZCArIGVudHJ5OwotCi0Jc3AtPnR4X2J1ZmZbZW50cnldID0gc2tiOwotCi0JLyogQ2xlYXIgYWxsIFRGQyBmaWVsZHMsIGV4Y2VwdCBURkRET05FLiAqLwotCXR4ZmQtPnRmYyA9IGNwdV90b19sZTY0KElQR19URkNfVEZERE9ORSk7Ci0KLQkvKiBTcGVjaWZ5IHRoZSBURkMgZmllbGQgd2l0aGluIHRoZSBURkQuICovCi0JdHhmZC0+dGZjIHw9IGNwdV90b19sZTY0KElQR19URkNfV09SREFMSUdORElTQUJMRUQgfAotCQkoSVBHX1RGQ19GUkFNRUlEICYgc3AtPnR4X2N1cnJlbnQpIHwKLQkJKElQR19URkNfRlJBR0NPVU5UICYgKDEgPDwgMjQpKSk7Ci0JLyoKLQkgKiAxNi0tMTcgKFdvcmRBbGlnbikgPC0gMyAoZGlzYWJsZSksCi0JICogMC0tMTUgKEZyYW1lSWQpIDwtIHNwLT50eF9jdXJyZW50LAotCSAqIDI0LS0yNyAoRnJhZ0NvdW50KSA8LSAxCi0JICovCi0KLQkvKiBSZXF1ZXN0IFR4Q29tcGxldGUgaW50ZXJydXB0cyBhdCBhbiBpbnRlcnZhbCBkZWZpbmVkCi0JICogYnkgdGhlIGNvbnN0YW50IElQR19GUkFNRVNCRVRXRUVOVFhDT01QTEVURVMuCi0JICogUmVxdWVzdCBUeENvbXBsZXRlIGludGVycnVwdCBmb3IgZXZlcnkgZnJhbWUKLQkgKiBpZiBpbiAxME1icHMgbW9kZSB0byBhY2NvbW1vZGF0ZSBwcm9ibGVtIHdpdGggMTBNYnBzCi0JICogcHJvY2Vzc2luZy4KLQkgKi8KLQlpZiAoc3AtPnRlbm1icHNtb2RlKQotCQl0eGZkLT50ZmMgfD0gY3B1X3RvX2xlNjQoSVBHX1RGQ19UWElORElDQVRFKTsKLQl0eGZkLT50ZmMgfD0gY3B1X3RvX2xlNjQoSVBHX1RGQ19UWERNQUlORElDQVRFKTsKLQkvKiBCYXNlZCBvbiBjb21waWxhdGlvbiBvcHRpb24sIGRldGVybWluZSBpZiBGQ1MgaXMgdG8gYmUKLQkgKiBhcHBlbmRlZCB0byB0cmFuc21pdCBmcmFtZSBieSBJUEcuCi0JICovCi0JaWYgKCEoSVBHX0FQUEVORF9GQ1NfT05fVFgpKQotCQl0eGZkLT50ZmMgfD0gY3B1X3RvX2xlNjQoSVBHX1RGQ19GQ1NBUFBFTkRESVNBQkxFKTsKLQotCS8qIEJhc2VkIG9uIGNvbXBpbGF0aW9uIG9wdGlvbiwgZGV0ZXJtaW5lIGlmIElQLCBUQ1AgYW5kL29yCi0JICogVURQIGNoZWNrc3VtcyBhcmUgdG8gYmUgYWRkZWQgdG8gdHJhbnNtaXQgZnJhbWUgYnkgSVBHLgotCSAqLwotCWlmIChJUEdfQUREX0lQQ0hFQ0tTVU1fT05fVFgpCi0JCXR4ZmQtPnRmYyB8PSBjcHVfdG9fbGU2NChJUEdfVEZDX0lQQ0hFQ0tTVU1FTkFCTEUpOwotCi0JaWYgKElQR19BRERfVENQQ0hFQ0tTVU1fT05fVFgpCi0JCXR4ZmQtPnRmYyB8PSBjcHVfdG9fbGU2NChJUEdfVEZDX1RDUENIRUNLU1VNRU5BQkxFKTsKLQotCWlmIChJUEdfQUREX1VEUENIRUNLU1VNX09OX1RYKQotCQl0eGZkLT50ZmMgfD0gY3B1X3RvX2xlNjQoSVBHX1RGQ19VRFBDSEVDS1NVTUVOQUJMRSk7Ci0KLQkvKiBCYXNlZCBvbiBjb21waWxhdGlvbiBvcHRpb24sIGRldGVybWluZSBpZiBWTEFOIHRhZyBpbmZvIGlzIHRvIGJlCi0JICogaW5zZXJ0ZWQgaW50byB0cmFuc21pdCBmcmFtZSBieSBJUEcuCi0JICovCi0JaWYgKElQR19JTlNFUlRfTUFOVUFMX1ZMQU5fVEFHKSB7Ci0JCXR4ZmQtPnRmYyB8PSBjcHVfdG9fbGU2NChJUEdfVEZDX1ZMQU5UQUdJTlNFUlQgfAotCQkJKCh1NjQpIElQR19NQU5VQUxfVkxBTl9WSUQgPDwgMzIpIHwKLQkJCSgodTY0KSBJUEdfTUFOVUFMX1ZMQU5fQ0ZJIDw8IDQ0KSB8Ci0JCQkoKHU2NCkgSVBHX01BTlVBTF9WTEFOX1VTRVJQUklPUklUWSA8PCA0NSkpOwotCX0KLQotCS8qIFRoZSBmcmFnbWVudCBzdGFydCBsb2NhdGlvbiB3aXRoaW4gc3lzdGVtIG1lbW9yeSBpcyBkZWZpbmVkCi0JICogYnkgdGhlIHNrX2J1ZmYgc3RydWN0dXJlJ3MgZGF0YSBmaWVsZC4gVGhlIHBoeXNpY2FsIGFkZHJlc3MKLQkgKiBvZiB0aGlzIGxvY2F0aW9uIHdpdGhpbiB0aGUgc3lzdGVtJ3MgdmlydHVhbCBtZW1vcnkgc3BhY2UKLQkgKiBpcyBkZXRlcm1pbmVkIHVzaW5nIHRoZSBJUEdfSE9TVDJCVVNfTUFQIGZ1bmN0aW9uLgotCSAqLwotCXR4ZmQtPmZyYWdfaW5mbyA9IGNwdV90b19sZTY0KHBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCBza2ItPmRhdGEsCi0JCXNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKSk7Ci0KLQkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBmcmFnbWVudCB3aXRoaW4gc3lzdGVtIG1lbW9yeSBpcyBkZWZpbmVkIGJ5Ci0JICogdGhlIHNrX2J1ZmYgc3RydWN0dXJlJ3MgbGVuIGZpZWxkLgotCSAqLwotCXR4ZmQtPmZyYWdfaW5mbyB8PSBjcHVfdG9fbGU2NChJUEdfVEZJX0ZSQUdMRU4gJgotCQkoKHU2NCkgKHNrYi0+bGVuICYgMHhmZmZmKSA8PCA0OCkpOwotCi0JLyogQ2xlYXIgdGhlIFRGRERvbmUgYml0IGxhc3QgdG8gaW5kaWNhdGUgdGhlIFRGRCBpcyByZWFkeQotCSAqIGZvciB0cmFuc2ZlciB0byB0aGUgSVBHLgotCSAqLwotCXR4ZmQtPnRmYyAmPSBjcHVfdG9fbGU2NCh+SVBHX1RGQ19URkRET05FKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzcC0+bG9jaywgZmxhZ3MpOwotCi0Jc3AtPnR4X2N1cnJlbnQrKzsKLQotCW1taW93YigpOwotCi0JaXBnX3czMihJUEdfRENfVFhfRE1BX1BPTExfTk9XLCBETUFfQ1RSTCk7Ci0KLQlpZiAoc3AtPnR4X2N1cnJlbnQgPT0gKHNwLT50eF9kaXJ0eSArIElQR19URkRMSVNUX0xFTkdUSCkpCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi1zdGF0aWMgdm9pZCBpcGdfc2V0X3BoeV9kZWZhdWx0X3BhcmFtKHVuc2lnbmVkIGNoYXIgcmV2LAotCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkcmVzcykKLXsKLQl1bnNpZ25lZCBzaG9ydCBsZW5ndGg7Ci0JdW5zaWduZWQgY2hhciByZXZpc2lvbjsKLQljb25zdCB1bnNpZ25lZCBzaG9ydCAqcGh5X3BhcmFtOwotCXVuc2lnbmVkIHNob3J0IGFkZHJlc3MsIHZhbHVlOwotCi0JcGh5X3BhcmFtID0gJkRlZmF1bHRQaHlQYXJhbVswXTsKLQlsZW5ndGggPSAqcGh5X3BhcmFtICYgMHgwMEZGOwotCXJldmlzaW9uID0gKHVuc2lnbmVkIGNoYXIpKCgqcGh5X3BhcmFtKSA+PiA4KTsKLQlwaHlfcGFyYW0rKzsKLQl3aGlsZSAobGVuZ3RoICE9IDApIHsKLQkJaWYgKHJldiA9PSByZXZpc2lvbikgewotCQkJd2hpbGUgKGxlbmd0aCA+IDEpIHsKLQkJCQlhZGRyZXNzID0gKnBoeV9wYXJhbTsKLQkJCQl2YWx1ZSA9ICoocGh5X3BhcmFtICsgMSk7Ci0JCQkJcGh5X3BhcmFtICs9IDI7Ci0JCQkJbWRpb193cml0ZShkZXYsIHBoeV9hZGRyZXNzLCBhZGRyZXNzLCB2YWx1ZSk7Ci0JCQkJbGVuZ3RoIC09IDQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCXBoeV9wYXJhbSArPSBsZW5ndGggLyAyOwotCQkJbGVuZ3RoID0gKnBoeV9wYXJhbSAmIDB4MDBGRjsKLQkJCXJldmlzaW9uID0gKHVuc2lnbmVkIGNoYXIpKCgqcGh5X3BhcmFtKSA+PiA4KTsKLQkJCXBoeV9wYXJhbSsrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IHJlYWRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBlZXBfYWRkcikKLXsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGlwZ19pb2FkZHIoZGV2KTsKLQl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgcmV0ID0gMDsKLQl1MTYgdmFsdWU7Ci0KLQl2YWx1ZSA9IElQR19FQ19FRVBST01fUkVBRE9QQ09ERSB8IChlZXBfYWRkciAmIDB4ZmYpOwotCWlwZ193MTYodmFsdWUsIEVFUFJPTV9DVFJMKTsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLQkJdTE2IGRhdGE7Ci0KLQkJbWRlbGF5KDEwKTsKLQkJZGF0YSA9IGlwZ19yMTYoRUVQUk9NX0NUUkwpOwotCQlpZiAoIShkYXRhICYgSVBHX0VDX0VFUFJPTV9CVVNZKSkgewotCQkJcmV0ID0gaXBnX3IxNihFRVBST01fREFUQSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBpcGdfaW5pdF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1paV9pZl9pbmZvICptaWlfaWYgPSAmc3AtPm1paV9pZjsKLQlpbnQgcGh5YWRkcjsKLQotCW1paV9pZi0+ZGV2ICAgICAgICAgID0gZGV2OwotCW1paV9pZi0+bWRpb19yZWFkICAgID0gbWRpb19yZWFkOwotCW1paV9pZi0+bWRpb193cml0ZSAgID0gbWRpb193cml0ZTsKLQltaWlfaWYtPnBoeV9pZF9tYXNrICA9IDB4MWY7Ci0JbWlpX2lmLT5yZWdfbnVtX21hc2sgPSAweDFmOwotCi0JbWlpX2lmLT5waHlfaWQgPSBwaHlhZGRyID0gaXBnX2ZpbmRfcGh5YWRkcihkZXYpOwotCi0JaWYgKHBoeWFkZHIgIT0gMHgxZikgewotCQl1MTYgbWlpX3BoeWN0cmwsIG1paV8xMDAwY3I7Ci0KLQkJbWlpXzEwMDBjciAgPSBtZGlvX3JlYWQoZGV2LCBwaHlhZGRyLCBNSUlfQ1RSTDEwMDApOwotCQltaWlfMTAwMGNyIHw9IEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRiB8Ci0JCQlHTUlJX1BIWV8xMDAwQkFTRVRDT05UUk9MX1ByZWZlck1hc3RlcjsKLQkJbWRpb193cml0ZShkZXYsIHBoeWFkZHIsIE1JSV9DVFJMMTAwMCwgbWlpXzEwMDBjcik7Ci0KLQkJbWlpX3BoeWN0cmwgPSBtZGlvX3JlYWQoZGV2LCBwaHlhZGRyLCBNSUlfQk1DUik7Ci0KLQkJLyogU2V0IGRlZmF1bHQgcGh5cGFyYW0gKi8KLQkJaXBnX3NldF9waHlfZGVmYXVsdF9wYXJhbShzcC0+cGRldi0+cmV2aXNpb24sIGRldiwgcGh5YWRkcik7Ci0KLQkJLyogUmVzZXQgUEhZICovCi0JCW1paV9waHljdHJsIHw9IEJNQ1JfUkVTRVQgfCBCTUNSX0FOUkVTVEFSVDsKLQkJbWRpb193cml0ZShkZXYsIHBoeWFkZHIsIE1JSV9CTUNSLCBtaWlfcGh5Y3RybCk7Ci0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaXBnX2h3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwotCXVuc2lnbmVkIGludCBpOwotCWludCByYzsKLQotCS8qIFJlYWQvV3JpdGUgYW5kIFJlc2V0IEVFUFJPTSBWYWx1ZSAqLwotCS8qIFJlYWQgTEVEIE1vZGUgQ29uZmlndXJhdGlvbiBmcm9tIEVFUFJPTSAqLwotCXNwLT5sZWRfbW9kZSA9IHJlYWRfZWVwcm9tKGRldiwgNik7Ci0KLQkvKiBSZXNldCBhbGwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgSVBHLiBEbyBub3QgYXNzZXJ0Ci0JICogUlNUX09VVCBhcyBub3QgY29tcGF0aWJsZSB3aXRoIHNvbWUgUEhZcy4KLQkgKi8KLQlyYyA9IGlwZ19yZXNldChkZXYsIElQR19SRVNFVF9NQVNLKTsKLQlpZiAocmMgPCAwKQotCQlnb3RvIG91dDsKLQotCWlwZ19pbml0X21paShkZXYpOwotCi0JLyogUmVhZCBNQUMgQWRkcmVzcyBmcm9tIEVFUFJPTSAqLwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCXNwLT5zdGF0aW9uX2FkZHJbaV0gPSByZWFkX2VlcHJvbShkZXYsIDE2ICsgaSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlpcGdfdzE2KHNwLT5zdGF0aW9uX2FkZHJbaV0sIFNUQVRJT05fQUREUkVTU18wICsgMippKTsKLQotCS8qIFNldCBzdGF0aW9uIGFkZHJlc3MgaW4gZXRoZXJuZXRfZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPmRldl9hZGRyWzBdID0gIGlwZ19yMTYoU1RBVElPTl9BRERSRVNTXzApICYgMHgwMGZmOwotCWRldi0+ZGV2X2FkZHJbMV0gPSAoaXBnX3IxNihTVEFUSU9OX0FERFJFU1NfMCkgJiAweGZmMDApID4+IDg7Ci0JZGV2LT5kZXZfYWRkclsyXSA9ICBpcGdfcjE2KFNUQVRJT05fQUREUkVTU18xKSAmIDB4MDBmZjsKLQlkZXYtPmRldl9hZGRyWzNdID0gKGlwZ19yMTYoU1RBVElPTl9BRERSRVNTXzEpICYgMHhmZjAwKSA+PiA4OwotCWRldi0+ZGV2X2FkZHJbNF0gPSAgaXBnX3IxNihTVEFUSU9OX0FERFJFU1NfMikgJiAweDAwZmY7Ci0JZGV2LT5kZXZfYWRkcls1XSA9IChpcGdfcjE2KFNUQVRJT05fQUREUkVTU18yKSAmIDB4ZmYwMCkgPj4gODsKLW91dDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXBnX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQotewotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmM7Ci0KLQltdXRleF9sb2NrKCZzcC0+bWlpX211dGV4KTsKLQlyYyA9IGdlbmVyaWNfbWlpX2lvY3RsKCZzcC0+bWlpX2lmLCBpZl9taWkoaWZyKSwgY21kLCBOVUxMKTsKLQltdXRleF91bmxvY2soJnNwLT5taWlfbXV0ZXgpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGlwZ19uaWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKLXsKLQlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVycjsKLQotCS8qIEZ1bmN0aW9uIHRvIGFjY29tbW9kYXRlIGNoYW5nZXMgdG8gTWF4aW11bSBUcmFuc2ZlciBVbml0Ci0JICogKG9yIE1UVSkgb2YgSVBHIE5JQy4gQ2Fubm90IHVzZSBkZWZhdWx0IGZ1bmN0aW9uIHNpbmNlCi0JICogdGhlIGRlZmF1bHQgd2lsbCBub3QgYWxsb3cgZm9yIE1UVSA+IDE1MDAgYnl0ZXMuCi0JICovCi0KLQlJUEdfREVCVUdfTVNHKCJfbmljX2NoYW5nZV9tdHVcbiIpOwotCi0JLyoKLQkgKiBDaGVjayB0aGF0IHRoZSBuZXcgTVRVIHZhbHVlIGlzIGJldHdlZW4gNjggKDE0IGJ5dGUgaGVhZGVyLCA0NiBieXRlCi0JICogcGF5bG9hZCwgNCBieXRlIEZDUykgYW5kIDEwIEtCLCB3aGljaCBpcyB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgTVRVLgotCSAqLwotCWlmIChuZXdfbXR1IDwgNjggfHwgbmV3X210dSA+IDEwMjQwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVyciA9IGlwZ19uaWNfc3RvcChkZXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlkZXYtPm10dSA9IG5ld19tdHU7Ci0KLQlzcC0+bWF4X3J4ZnJhbWVfc2l6ZSA9IG5ld19tdHU7Ci0KLQlzcC0+cnhmcmFnX3NpemUgPSBuZXdfbXR1OwotCWlmIChzcC0+cnhmcmFnX3NpemUgPiA0MDg4KQotCQlzcC0+cnhmcmFnX3NpemUgPSA0MDg4OwotCi0Jc3AtPnJ4c3VwcG9ydF9zaXplID0gc3AtPm1heF9yeGZyYW1lX3NpemU7Ci0KLQlpZiAobmV3X210dSA+IDB4MDYwMCkKLQkJc3AtPmlzX2p1bWJvID0gdHJ1ZTsKLQllbHNlCi0JCXNwLT5pc19qdW1ibyA9IGZhbHNlOwotCi0JcmV0dXJuIGlwZ19uaWNfb3BlbihkZXYpOwotfQotCi1zdGF0aWMgaW50IGlwZ19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCi17Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYzsKLQotCW11dGV4X2xvY2soJnNwLT5taWlfbXV0ZXgpOwotCXJjID0gbWlpX2V0aHRvb2xfZ3NldCgmc3AtPm1paV9pZiwgY21kKTsKLQltdXRleF91bmxvY2soJnNwLT5taWlfbXV0ZXgpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGlwZ19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCi17Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYzsKLQotCW11dGV4X2xvY2soJnNwLT5taWlfbXV0ZXgpOwotCXJjID0gbWlpX2V0aHRvb2xfc3NldCgmc3AtPm1paV9pZiwgY21kKTsKLQltdXRleF91bmxvY2soJnNwLT5taWlfbXV0ZXgpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGlwZ19ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYzsKLQotCW11dGV4X2xvY2soJnNwLT5taWlfbXV0ZXgpOwotCXJjID0gbWlpX253YXlfcmVzdGFydCgmc3AtPm1paV9pZik7Ci0JbXV0ZXhfdW5sb2NrKCZzcC0+bWlpX211dGV4KTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpcGdfZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9zZXR0aW5ncyA9IGlwZ19nZXRfc2V0dGluZ3MsCi0JLnNldF9zZXR0aW5ncyA9IGlwZ19zZXRfc2V0dGluZ3MsCi0JLm53YXlfcmVzZXQgICA9IGlwZ19ud2F5X3Jlc2V0LAotfTsKLQotc3RhdGljIHZvaWQgaXBnX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBpcGdfbmljX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCUlQR19ERUJVR19NU0coIl9yZW1vdmVcbiIpOwotCi0JLyogVW4tcmVnaXN0ZXIgRXRoZXJuZXQgZGV2aWNlLiAqLwotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0KLQlwY2lfaW91bm1hcChwZGV2LCBzcC0+aW9hZGRyKTsKLQotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7Ci0KLQlmcmVlX25ldGRldihkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGdfbmV0ZGV2X29wcyA9IHsKLQkubmRvX29wZW4JCT0gaXBnX25pY19vcGVuLAotCS5uZG9fc3RvcAkJPSBpcGdfbmljX3N0b3AsCi0JLm5kb19zdGFydF94bWl0CQk9IGlwZ19uaWNfaGFyZF9zdGFydF94bWl0LAotCS5uZG9fZ2V0X3N0YXRzCQk9IGlwZ19uaWNfZ2V0X3N0YXRzLAotCS5uZG9fc2V0X3J4X21vZGUJPSBpcGdfbmljX3NldF9tdWx0aWNhc3RfbGlzdCwKLQkubmRvX2RvX2lvY3RsCQk9IGlwZ19pb2N0bCwKLQkubmRvX3R4X3RpbWVvdXQgCT0gaXBnX3R4X3RpbWVvdXQsCi0JLm5kb19jaGFuZ2VfbXR1IAk9IGlwZ19uaWNfY2hhbmdlX210dSwKLQkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKLQkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLX07Ci0KLXN0YXRpYyBpbnQgaXBnX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0JdW5zaWduZWQgaW50IGkgPSBpZC0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3A7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl2b2lkIF9faW9tZW0gKmlvYWRkcjsKLQlpbnQgcmM7Ci0KLQlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChyYyA8IDApCi0JCWdvdG8gb3V0OwotCi0JcHJfaW5mbygiJXM6ICVzXG4iLCBwY2lfbmFtZShwZGV2KSwgaXBnX2JyYW5kX25hbWVbaV0pOwotCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDQwKSk7Ci0JaWYgKHJjIDwgMCkgewotCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7Ci0JCWlmIChyYyA8IDApIHsKLQkJCXByX2VycigiJXM6IERNQSBjb25maWcgZmFpbGVkXG4iLCBwY2lfbmFtZShwZGV2KSk7Ci0JCQlnb3RvIGVycl9kaXNhYmxlXzA7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgbmV0IGRldmljZS4KLQkgKi8KLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSkpOwotCWlmICghZGV2KSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJfZGlzYWJsZV8wOwotCX0KLQotCXNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzcGluX2xvY2tfaW5pdCgmc3AtPmxvY2spOwotCW11dGV4X2luaXQoJnNwLT5taWlfbXV0ZXgpOwotCi0Jc3AtPmlzX2p1bWJvID0gSVBHX0lTX0pVTUJPOwotCXNwLT5yeGZyYWdfc2l6ZSA9IElQR19SWEZSQUdfU0laRTsKLQlzcC0+cnhzdXBwb3J0X3NpemUgPSBJUEdfUlhTVVBQT1JUX1NJWkU7Ci0Jc3AtPm1heF9yeGZyYW1lX3NpemUgPSBJUEdfTUFYX1JYRlJBTUVfU0laRTsKLQotCS8qIERlY2xhcmUgSVBHIE5JQyBmdW5jdGlvbnMgZm9yIEV0aGVybmV0IGRldmljZSBtZXRob2RzLgotCSAqLwotCWRldi0+bmV0ZGV2X29wcyA9ICZpcGdfbmV0ZGV2X29wczsKLQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwotCWRldi0+ZXRodG9vbF9vcHMgPSAmaXBnX2V0aHRvb2xfb3BzOwotCi0JcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9OQU1FKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2ZyZWVfZGV2XzE7Ci0KLQlpb2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7Ci0JaWYgKCFpb2FkZHIpIHsKLQkJcHJfZXJyKCIlczogY2Fubm90IG1hcCBNTUlPXG4iLCBwY2lfbmFtZShwZGV2KSk7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb25zXzI7Ci0JfQotCi0JLyogU2F2ZSB0aGUgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBpbmZvcm1hdGlvbi4gKi8KLQlzcC0+aW9hZGRyID0gaW9hZGRyOwotCXNwLT5wZGV2ID0gcGRldjsKLQlzcC0+ZGV2ID0gZGV2OwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJnNwLT50YXNrLCBpcGdfcmVzZXRfYWZ0ZXJfaG9zdF9lcnJvcik7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQotCXJjID0gaXBnX2h3X2luaXQoZGV2KTsKLQlpZiAocmMgPCAwKQotCQlnb3RvIGVycl91bm1hcF8zOwotCi0JcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmMgPCAwKQotCQlnb3RvIGVycl91bm1hcF8zOwotCi0JbmV0ZGV2X2luZm8oZGV2LCAiRXRoZXJuZXQgZGV2aWNlIHJlZ2lzdGVyZWRcbiIpOwotb3V0OgotCXJldHVybiByYzsKLQotZXJyX3VubWFwXzM6Ci0JcGNpX2lvdW5tYXAocGRldiwgaW9hZGRyKTsKLWVycl9yZWxlYXNlX3JlZ2lvbnNfMjoKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotZXJyX2ZyZWVfZGV2XzE6Ci0JZnJlZV9uZXRkZXYoZGV2KTsKLWVycl9kaXNhYmxlXzA6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCWdvdG8gb3V0OwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaXBnX3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gSVBHX0RSSVZFUl9OQU1FLAotCS5pZF90YWJsZQk9IGlwZ19wY2lfdGJsLAotCS5wcm9iZQkJPSBpcGdfcHJvYmUsCi0JLnJlbW92ZQkJPSBpcGdfcmVtb3ZlLAotfTsKLQotbW9kdWxlX3BjaV9kcml2ZXIoaXBnX3BjaV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWNwbHVzL2lwZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWNwbHVzL2lwZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTYwNjI4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ljcGx1cy9pcGcuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0OCArMCwwIEBACi0vKgotICogSW5jbHVkZSBmaWxlIGZvciBHaWdhYml0IEV0aGVybmV0IGRldmljZSBkcml2ZXIgZm9yIE5ldHdvcmsKLSAqIEludGVyZmFjZSBDYXJkcyAoTklDcykgdXRpbGl6aW5nIHRoZSBUYW1hcmFjayBNaWNyb2VsZWN0cm9uaWNzCi0gKiBJbmMuIElQRyBHaWdhYml0IG9yIFRyaXBsZSBTcGVlZCBFdGhlcm5ldCBNZWRpYSBBY2Nlc3MKLSAqIENvbnRyb2xsZXIuCi0gKi8KLSNpZm5kZWYgX19MSU5VWF9JUEdfSAotI2RlZmluZSBfX0xJTlVYX0lQR19ICi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgotCi0vKgotICoJQ29uc3RhbnRzCi0gKi8KLQotLyogR01JSSBiYXNlZCBQSFkgSURzICovCi0jZGVmaW5lCQlOUwkJCQkweDIwMDAKLSNkZWZpbmUJCU1BUlZFTEwJCQkJMHgwMTQxCi0jZGVmaW5lCQlJQ1BMVVNfUEhZCQkJMHgyNDMKLQotLyogTklDIFBoeXNpY2FsIExheWVyIERldmljZSBNSUkgcmVnaXN0ZXIgZmllbGRzLiAqLwotI2RlZmluZSAgICAgICAgIE1JSV9QSFlfU0VMRUNUT1JfSUVFRTgwMjMgICAgICAgMHgwMDAxCi0jZGVmaW5lICAgICAgICAgTUlJX1BIWV9URUNIQUJJTElUWUZJRUxEICAgICAgICAweDFGRTAKLQotLyogR01JSV9QSFlfMTAwMCBuZWVkIHRvIHNldCB0byBwcmVmZXIgbWFzdGVyICovCi0jZGVmaW5lICAgICAgICAgR01JSV9QSFlfMTAwMEJBU0VUQ09OVFJPTF9QcmVmZXJNYXN0ZXIgMHgwNDAwCi0KLS8qIE5JQyBQaHlzaWNhbCBMYXllciBEZXZpY2UgR01JSSBjb25zdGFudHMuICovCi0jZGVmaW5lICAgICAgICAgR01JSV9QUkVBTUJMRSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgotI2RlZmluZSAgICAgICAgIEdNSUlfU1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQotI2RlZmluZSAgICAgICAgIEdNSUlfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MgotI2RlZmluZSAgICAgICAgIEdNSUlfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MQotI2RlZmluZSAgICAgICAgIEdNSUlfVEFfUkVBRF9NQVNLICAgICAgICAgICAgICAgIDB4MQotI2RlZmluZSAgICAgICAgIEdNSUlfVEFfV1JJVEUgICAgICAgICAgICAgICAgICAgIDB4MgotCi0vKiBJL08gcmVnaXN0ZXIgb2Zmc2V0cy4gKi8KLWVudW0gaXBnX3JlZ3MgewotCURNQV9DVFJMCQk9IDB4MDAsCi0JUlhfRE1BX1NUQVRVUwkJPSAweDA4LCAvKiBVbnVzZWQgKyByZXNlcnZlZCAqLwotCVRGRF9MSVNUX1BUUl8wCQk9IDB4MTAsCi0JVEZEX0xJU1RfUFRSXzEJCT0gMHgxNCwKLQlUWF9ETUFfQlVSU1RfVEhSRVNICT0gMHgxOCwKLQlUWF9ETUFfVVJHRU5UX1RIUkVTSAk9IDB4MTksCi0JVFhfRE1BX1BPTExfUEVSSU9ECT0gMHgxYSwKLQlSRkRfTElTVF9QVFJfMAkJPSAweDFjLAotCVJGRF9MSVNUX1BUUl8xCQk9IDB4MjAsCi0JUlhfRE1BX0JVUlNUX1RIUkVTSAk9IDB4MjQsCi0JUlhfRE1BX1VSR0VOVF9USFJFU0gJPSAweDI1LAotCVJYX0RNQV9QT0xMX1BFUklPRAk9IDB4MjYsCi0JREVCVUdfQ1RSTAkJPSAweDJjLAotCUFTSUNfQ1RSTAkJPSAweDMwLAotCUZJRk9fQ1RSTAkJPSAweDM4LCAvKiBVbnVzZWQgKi8KLQlGTE9XX09GRl9USFJFU0gJCT0gMHgzYywKLQlGTE9XX09OX1RIUkVTSAkJPSAweDNlLAotCUVFUFJPTV9EQVRBCQk9IDB4NDgsCi0JRUVQUk9NX0NUUkwJCT0gMHg0YSwKLQlFWFBST01fQUREUgkJPSAweDRjLCAvKiBVbnVzZWQgKi8KLQlFWFBST01fREFUQQkJPSAweDUwLCAvKiBVbnVzZWQgKi8KLQlXQUtFX0VWRU5UCQk9IDB4NTEsIC8qIFVudXNlZCAqLwotCUNPVU5URE9XTgkJPSAweDU0LCAvKiBVbnVzZWQgKi8KLQlJTlRfU1RBVFVTX0FDSwkJPSAweDVhLAotCUlOVF9FTkFCTEUJCT0gMHg1YywKLQlJTlRfU1RBVFVTCQk9IDB4NWUsIC8qIFVudXNlZCAqLwotCVRYX1NUQVRVUwkJPSAweDYwLAotCU1BQ19DVFJMCQk9IDB4NmMsCi0JVkxBTl9UQUcJCT0gMHg3MCwgLyogVW51c2VkICovCi0JUEhZX1NFVAkJCT0gMHg3NSwKLQlQSFlfQ1RSTAkJPSAweDc2LAotCVNUQVRJT05fQUREUkVTU18wCT0gMHg3OCwKLQlTVEFUSU9OX0FERFJFU1NfMQk9IDB4N2EsCi0JU1RBVElPTl9BRERSRVNTXzIJPSAweDdjLAotCU1BWF9GUkFNRV9TSVpFCQk9IDB4ODYsCi0JUkVDRUlWRV9NT0RFCQk9IDB4ODgsCi0JSEFTSFRBQkxFXzAJCT0gMHg4YywKLQlIQVNIVEFCTEVfMQkJPSAweDkwLAotCVJNT05fU1RBVElTVElDU19NQVNLCT0gMHg5OCwKLQlTVEFUSVNUSUNTX01BU0sJCT0gMHg5YywKLQlSWF9KVU1CT19GUkFNRVMJCT0gMHhiYywgLyogVW51c2VkICovCi0JVENQX0NIRUNLU1VNX0VSUk9SUwk9IDB4YzAsIC8qIFVudXNlZCAqLwotCUlQX0NIRUNLU1VNX0VSUk9SUwk9IDB4YzIsIC8qIFVudXNlZCAqLwotCVVEUF9DSEVDS1NVTV9FUlJPUlMJPSAweGM0LCAvKiBVbnVzZWQgKi8KLQlUWF9KVU1CT19GUkFNRVMJCT0gMHhmNCAgLyogVW51c2VkICovCi19OwotCi0vKiBFdGhlcm5ldCBNSUIgc3RhdGlzdGljIHJlZ2lzdGVyIG9mZnNldHMuICovCi0jZGVmaW5lCUlQR19PQ1RFVFJDVk9LCQkJMHhBOAotI2RlZmluZQlJUEdfTUNTVE9DVEVUUkNWRE9LCQkweEFDCi0jZGVmaW5lCUlQR19CQ1NUT0NURVRSQ1ZPSwkJMHhCMAotI2RlZmluZQlJUEdfRlJBTUVTUkNWRE9LCQkweEI0Ci0jZGVmaW5lCUlQR19NQ1NURlJBTUVTUkNWRE9LCQkweEI4Ci0jZGVmaW5lCUlQR19CQ1NURlJBTUVTUkNWRE9LCQkweEJFCi0jZGVmaW5lCUlQR19NQUNDT05UUk9MRlJBTUVTUkNWRAkweEM2Ci0jZGVmaW5lCUlQR19GUkFNRVRPT0xPTkdFUlJPUlMJCTB4QzgKLSNkZWZpbmUJSVBHX0lOUkFOR0VMRU5HVEhFUlJPUlMJCTB4Q0EKLSNkZWZpbmUJSVBHX0ZSQU1FQ0hFQ0tTRVFFUlJPUlMJCTB4Q0MKLSNkZWZpbmUJSVBHX0ZSQU1FU0xPU1RSWEVSUk9SUwkJMHhDRQotI2RlZmluZQlJUEdfT0NURVRYTVRPSwkJCTB4RDAKLSNkZWZpbmUJSVBHX01DU1RPQ1RFVFhNVE9LCQkweEQ0Ci0jZGVmaW5lCUlQR19CQ1NUT0NURVRYTVRPSwkJMHhEOAotI2RlZmluZQlJUEdfRlJBTUVTWE1URE9LCQkweERDCi0jZGVmaW5lCUlQR19NQ1NURlJBTUVTWE1URE9LCQkweEUwCi0jZGVmaW5lCUlQR19GUkFNRVNXREVGRVJSRURYTVQJCTB4RTQKLSNkZWZpbmUJSVBHX0xBVEVDT0xMSVNJT05TCQkweEU4Ci0jZGVmaW5lCUlQR19NVUxUSUNPTEZSQU1FUwkJMHhFQwotI2RlZmluZQlJUEdfU0lOR0xFQ09MRlJBTUVTCQkweEYwCi0jZGVmaW5lCUlQR19CQ1NURlJBTUVTWE1URE9LCQkweEY2Ci0jZGVmaW5lCUlQR19DQVJSSUVSU0VOU0VFUlJPUlMJCTB4RjgKLSNkZWZpbmUJSVBHX01BQ0NPTlRST0xGUkFNRVNYTVRET0sJMHhGQQotI2RlZmluZQlJUEdfRlJBTUVTQUJPUlRYU0NPTExTCQkweEZDCi0jZGVmaW5lCUlQR19GUkFNRVNXRVhERUZFUlJBTAkJMHhGRQotCi0vKiBSTU9OIHN0YXRpc3RpYyByZWdpc3RlciBvZmZzZXRzLiAqLwotI2RlZmluZQlJUEdfRVRIRVJTVEFUU0NPTExJU0lPTlMJCQkweDEwMAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU09DVEVUU1RSQU5TTUlUCQkJMHgxMDQKLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNQS1RTVFJBTlNNSVQJCQkweDEwOAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU1BLVFM2NE9DVEVTVFNUUkFOU01JVAkJMHgxMEMKLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNQS1RTNjVUTzEyN09DVEVTVFNUUkFOU01JVAkweDExMAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU1BLVFMxMjhUTzI1NU9DVEVTVFNUUkFOU01JVAkweDExNAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU1BLVFMyNTZUTzUxMU9DVEVTVFNUUkFOU01JVAkweDExOAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU1BLVFM1MTJUTzEwMjNPQ1RFU1RTVFJBTlNNSVQJMHgxMUMKLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNQS1RTMTAyNFRPMTUxOE9DVEVTVFNUUkFOU01JVAkweDEyMAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU0NSQ0FMSUdORVJST1JTCQkJMHgxMjQKLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNVTkRFUlNJWkVQS1RTCQkJMHgxMjgKLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNGUkFHTUVOVFMJCQkJMHgxMkMKLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNKQUJCRVJTCQkJCTB4MTMwCi0jZGVmaW5lCUlQR19FVEhFUlNUQVRTT0NURVRTCQkJCTB4MTM0Ci0jZGVmaW5lCUlQR19FVEhFUlNUQVRTUEtUUwkJCQkweDEzOAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU1BLVFM2NE9DVEVTVFMJCQkweDEzQwotI2RlZmluZQlJUEdfRVRIRVJTVEFUU1BLVFM2NVRPMTI3T0NURVNUUwkJMHgxNDAKLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNQS1RTMTI4VE8yNTVPQ1RFU1RTCQkweDE0NAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU1BLVFMyNTZUTzUxMU9DVEVTVFMJCTB4MTQ4Ci0jZGVmaW5lCUlQR19FVEhFUlNUQVRTUEtUUzUxMlRPMTAyM09DVEVTVFMJCTB4MTRDCi0jZGVmaW5lCUlQR19FVEhFUlNUQVRTUEtUUzEwMjRUTzE1MThPQ1RFU1RTCQkweDE1MAotCi0vKiBSTU9OIHN0YXRpc3RpYyByZWdpc3RlciBlcXVpdmFsZW50cy4gKi8KLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNNVUxUSUNBU1RQS1RTVFJBTlNNSVQJCTB4RTAKLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNCUk9BRENBU1RQS1RTVFJBTlNNSVQJCTB4RjYKLSNkZWZpbmUJSVBHX0VUSEVSU1RBVFNNVUxUSUNBU1RQS1RTCQkJMHhCOAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU0JST0FEQ0FTVFBLVFMJCQkweEJFCi0jZGVmaW5lCUlQR19FVEhFUlNUQVRTT1ZFUlNJWkVQS1RTCQkJMHhDOAotI2RlZmluZQlJUEdfRVRIRVJTVEFUU0RST1BFVkVOVFMJCQkweENFCi0KLS8qIFNlcmlhbCBFRVBST00gb2Zmc2V0cyAqLwotI2RlZmluZQlJUEdfRUVQUk9NX0NPTkZJR1BBUkFNCQkweDAwCi0jZGVmaW5lCUlQR19FRVBST01fQVNJQ0NUUkwJCTB4MDEKLSNkZWZpbmUJSVBHX0VFUFJPTV9TVUJTWVNURU1WRU5ET1JJRAkweDAyCi0jZGVmaW5lCUlQR19FRVBST01fU1VCU1lTVEVNSUQJCTB4MDMKLSNkZWZpbmUJSVBHX0VFUFJPTV9TVEFUSU9OQUREUkVTUzAJMHgxMAotI2RlZmluZQlJUEdfRUVQUk9NX1NUQVRJT05BRERSRVNTMQkweDExCi0jZGVmaW5lCUlQR19FRVBST01fU1RBVElPTkFERFJFU1MyCTB4MTIKLQotLyogUmVnaXN0ZXIgJiBkYXRhIHN0cnVjdHVyZSBiaXQgbWFza3MgKi8KLQotLyogUENJIHJlZ2lzdGVyIG1hc2tzLiAqLwotCi0vKiBJT0Jhc2VBZGRyZXNzICovCi0jZGVmaW5lICAgICAgICAgSVBHX1BJQl9SU1ZEX01BU0sJCTB4RkZGRkZFMDEKLSNkZWZpbmUgICAgICAgICBJUEdfUElCX0lPQkFTRUFERFJFU1MJCTB4RkZGRkZGMDAKLSNkZWZpbmUgICAgICAgICBJUEdfUElCX0lPQkFTRUFERFJJTkQJCTB4MDAwMDAwMDEKLQotLyogTWVtQmFzZUFkZHJlc3MgKi8KLSNkZWZpbmUgICAgICAgICBJUEdfUE1CX1JTVkRfTUFTSwkJMHhGRkZGRkUwNwotI2RlZmluZSAgICAgICAgIElQR19QTUJfTUVNQkFTRUFERFJJTkQJCTB4MDAwMDAwMDEKLSNkZWZpbmUgICAgICAgICBJUEdfUE1CX01FTU1BUFRZUEUJCTB4MDAwMDAwMDYKLSNkZWZpbmUgICAgICAgICBJUEdfUE1CX01FTU1BUFRZUEUwCQkweDAwMDAwMDAyCi0jZGVmaW5lICAgICAgICAgSVBHX1BNQl9NRU1NQVBUWVBFMQkJMHgwMDAwMDAwNAotI2RlZmluZSAgICAgICAgIElQR19QTUJfTUVNQkFTRUFERFJFU1MJCTB4RkZGRkZFMDAKLQotLyogQ29uZmlnU3RhdHVzICovCi0jZGVmaW5lIElQR19DU19SU1ZEX01BU0sgICAgICAgICAgICAgICAgMHhGRkIwCi0jZGVmaW5lIElQR19DU19DQVBBQklMSVRJRVMgICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lIElQR19DU182Nk1IWkNBUEFCTEUgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIElQR19DU19GQVNUQkFDSzJCQUNLICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lIElQR19DU19EQVRBUEFSSVRZUkVQT1JURUQgICAgICAgMHgwMTAwCi0jZGVmaW5lIElQR19DU19ERVZTRUxUSU1JTkcgICAgICAgICAgICAgMHgwNjAwCi0jZGVmaW5lIElQR19DU19TSUdOQUxFRFRBUkdFVEFCT1JUICAgICAgMHgwODAwCi0jZGVmaW5lIElQR19DU19SRUNFSVZFRFRBUkdFVEFCT1JUICAgICAgMHgxMDAwCi0jZGVmaW5lIElQR19DU19SRUNFSVZFRE1BU1RFUkFCT1JUICAgICAgMHgyMDAwCi0jZGVmaW5lIElQR19DU19TSUdOQUxFRFNZU1RFTUVSUk9SICAgICAgMHg0MDAwCi0jZGVmaW5lIElQR19DU19ERVRFQ1RFRFBBUklUWUVSUk9SICAgICAgMHg4MDAwCi0KLS8qIFRGRCBkYXRhIHN0cnVjdHVyZSBtYXNrcy4gKi8KLQotLyogVEZETGlzdCwgVEZDICovCi0jZGVmaW5lCUlQR19URkNfUlNWRF9NQVNLCQkJMHgwMDAwRkZGRjlGRkZGRkZGVUxMCi0jZGVmaW5lCUlQR19URkNfRlJBTUVJRAkJCQkweDAwMDAwMDAwMDAwMEZGRkZVTEwKLSNkZWZpbmUJSVBHX1RGQ19XT1JEQUxJR04JCQkweDAwMDAwMDAwMDAwMzAwMDBVTEwKLSNkZWZpbmUJSVBHX1RGQ19XT1JEQUxJR05UT0RXT1JECQkweDAwMDAwMDAwMDAwMDAwMDBVTEwKLSNkZWZpbmUJSVBHX1RGQ19XT1JEQUxJR05UT1dPUkQJCQkweDAwMDAwMDAwMDAwMjAwMDBVTEwKLSNkZWZpbmUJSVBHX1RGQ19XT1JEQUxJR05ESVNBQkxFRAkJMHgwMDAwMDAwMDAwMDMwMDAwVUxMCi0jZGVmaW5lCUlQR19URkNfVENQQ0hFQ0tTVU1FTkFCTEUJCTB4MDAwMDAwMDAwMDA0MDAwMFVMTAotI2RlZmluZQlJUEdfVEZDX1VEUENIRUNLU1VNRU5BQkxFCQkweDAwMDAwMDAwMDAwODAwMDBVTEwKLSNkZWZpbmUJSVBHX1RGQ19JUENIRUNLU1VNRU5BQkxFCQkweDAwMDAwMDAwMDAxMDAwMDBVTEwKLSNkZWZpbmUJSVBHX1RGQ19GQ1NBUFBFTkRESVNBQkxFCQkweDAwMDAwMDAwMDAyMDAwMDBVTEwKLSNkZWZpbmUJSVBHX1RGQ19UWElORElDQVRFCQkJMHgwMDAwMDAwMDAwNDAwMDAwVUxMCi0jZGVmaW5lCUlQR19URkNfVFhETUFJTkRJQ0FURQkJCTB4MDAwMDAwMDAwMDgwMDAwMFVMTAotI2RlZmluZQlJUEdfVEZDX0ZSQUdDT1VOVAkJCTB4MDAwMDAwMDAwRjAwMDAwMFVMTAotI2RlZmluZQlJUEdfVEZDX1ZMQU5UQUdJTlNFUlQJCQkweDAwMDAwMDAwMTAwMDAwMDBVTEwKLSNkZWZpbmUJSVBHX1RGQ19URkRET05FCQkJCTB4MDAwMDAwMDA4MDAwMDAwMFVMTAotI2RlZmluZQlJUEdfVEZDX1ZJRAkJCQkweDAwMDAwRkZGMDAwMDAwMDBVTEwKLSNkZWZpbmUJSVBHX1RGQ19DRkkJCQkJMHgwMDAwMTAwMDAwMDAwMDAwVUxMCi0jZGVmaW5lCUlQR19URkNfVVNFUlBSSU9SSVRZCQkJMHgwMDAwRTAwMDAwMDAwMDAwVUxMCi0KLS8qIFRGRExpc3QsIEZyYWdJbmZvICovCi0jZGVmaW5lCUlQR19URklfUlNWRF9NQVNLCQkJMHhGRkZGMDBGRkZGRkZGRkZGVUxMCi0jZGVmaW5lCUlQR19URklfRlJBR0FERFIJCQkweDAwMDAwMEZGRkZGRkZGRkZVTEwKLSNkZWZpbmUJSVBHX1RGSV9GUkFHTEVOCQkJCTB4RkZGRjAwMDAwMDAwMDAwMFVMTAotCi0vKiBSRkQgZGF0YSBzdHJ1Y3R1cmUgbWFza3MuICovCi0KLS8qIFJGRExpc3QsIFJGUyAqLwotI2RlZmluZQlJUEdfUkZTX1JTVkRfTUFTSwkJCTB4MDAwMEZGRkZGRkZGRkZGRlVMTAotI2RlZmluZQlJUEdfUkZTX1JYRlJBTUVMRU4JCQkweDAwMDAwMDAwMDAwMEZGRkZVTEwKLSNkZWZpbmUJSVBHX1JGU19SWEZJRk9PVkVSUlVOCQkJMHgwMDAwMDAwMDAwMDEwMDAwVUxMCi0jZGVmaW5lCUlQR19SRlNfUlhSVU5URlJBTUUJCQkweDAwMDAwMDAwMDAwMjAwMDBVTEwKLSNkZWZpbmUJSVBHX1JGU19SWEFMSUdOTUVOVEVSUk9SCQkweDAwMDAwMDAwMDAwNDAwMDBVTEwKLSNkZWZpbmUJSVBHX1JGU19SWEZDU0VSUk9SCQkJMHgwMDAwMDAwMDAwMDgwMDAwVUxMCi0jZGVmaW5lCUlQR19SRlNfUlhPVkVSU0laRURGUkFNRQkJMHgwMDAwMDAwMDAwMTAwMDAwVUxMCi0jZGVmaW5lCUlQR19SRlNfUlhMRU5HVEhFUlJPUgkJCTB4MDAwMDAwMDAwMDIwMDAwMFVMTAotI2RlZmluZQlJUEdfUkZTX1ZMQU5ERVRFQ1RFRAkJCTB4MDAwMDAwMDAwMDQwMDAwMFVMTAotI2RlZmluZQlJUEdfUkZTX1RDUERFVEVDVEVECQkJMHgwMDAwMDAwMDAwODAwMDAwVUxMCi0jZGVmaW5lCUlQR19SRlNfVENQRVJST1IJCQkweDAwMDAwMDAwMDEwMDAwMDBVTEwKLSNkZWZpbmUJSVBHX1JGU19VRFBERVRFQ1RFRAkJCTB4MDAwMDAwMDAwMjAwMDAwMFVMTAotI2RlZmluZQlJUEdfUkZTX1VEUEVSUk9SCQkJMHgwMDAwMDAwMDA0MDAwMDAwVUxMCi0jZGVmaW5lCUlQR19SRlNfSVBERVRFQ1RFRAkJCTB4MDAwMDAwMDAwODAwMDAwMFVMTAotI2RlZmluZQlJUEdfUkZTX0lQRVJST1IJCQkJMHgwMDAwMDAwMDEwMDAwMDAwVUxMCi0jZGVmaW5lCUlQR19SRlNfRlJBTUVTVEFSVAkJCTB4MDAwMDAwMDAyMDAwMDAwMFVMTAotI2RlZmluZQlJUEdfUkZTX0ZSQU1FRU5ECQkJMHgwMDAwMDAwMDQwMDAwMDAwVUxMCi0jZGVmaW5lCUlQR19SRlNfUkZERE9ORQkJCQkweDAwMDAwMDAwODAwMDAwMDBVTEwKLSNkZWZpbmUJSVBHX1JGU19UQ0kJCQkJMHgwMDAwRkZGRjAwMDAwMDAwVUxMCi0KLS8qIFJGRExpc3QsIEZyYWdJbmZvICovCi0jZGVmaW5lCUlQR19SRklfUlNWRF9NQVNLCQkJMHhGRkZGMDBGRkZGRkZGRkZGVUxMCi0jZGVmaW5lCUlQR19SRklfRlJBR0FERFIJCQkweDAwMDAwMEZGRkZGRkZGRkZVTEwKLSNkZWZpbmUJSVBHX1JGSV9GUkFHTEVOCQkJCTB4RkZGRjAwMDAwMDAwMDAwMFVMTAotCi0vKiBJL08gUmVnaXN0ZXIgbWFza3MuICovCi0KLS8qIFJNT04gU3RhdGlzdGljcyBNYXNrICovCi0jZGVmaW5lCUlQR19SWl9BTEwJCQkJCTB4MEZGRkZGRkYKLQotLyogU3RhdGlzdGljcyBNYXNrICovCi0jZGVmaW5lCUlQR19TTV9BTEwJCQkJCTB4MEZGRkZGRkYKLSNkZWZpbmUJSVBHX1NNX09DVEVUUkNWT0tfRlJBTUVTUkNWRE9LCQkJMHgwMDAwMDAwMQotI2RlZmluZQlJUEdfU01fTUNTVE9DVEVUUkNWRE9LX01DU1RGUkFNRVNSQ1ZET0sJCTB4MDAwMDAwMDIKLSNkZWZpbmUJSVBHX1NNX0JDU1RPQ1RFVFJDVkRPS19CQ1NURlJBTUVTUkNWRE9LCQkweDAwMDAwMDA0Ci0jZGVmaW5lCUlQR19TTV9SWEpVTUJPRlJBTUVTCQkJCTB4MDAwMDAwMDgKLSNkZWZpbmUJSVBHX1NNX1RDUENIRUNLU1VNRVJST1JTCQkJMHgwMDAwMDAxMAotI2RlZmluZQlJUEdfU01fSVBDSEVDS1NVTUVSUk9SUwkJCQkweDAwMDAwMDIwCi0jZGVmaW5lCUlQR19TTV9VRFBDSEVDS1NVTUVSUk9SUwkJCTB4MDAwMDAwNDAKLSNkZWZpbmUJSVBHX1NNX01BQ0NPTlRST0xGUkFNRVNSQ1ZECQkJMHgwMDAwMDA4MAotI2RlZmluZQlJUEdfU01fRlJBTUVTVE9PTE9OR0VSUk9SUwkJCTB4MDAwMDAxMDAKLSNkZWZpbmUJSVBHX1NNX0lOUkFOR0VMRU5HVEhFUlJPUlMJCQkweDAwMDAwMjAwCi0jZGVmaW5lCUlQR19TTV9GUkFNRUNIRUNLU0VRRVJST1JTCQkJMHgwMDAwMDQwMAotI2RlZmluZQlJUEdfU01fRlJBTUVTTE9TVFJYRVJST1JTCQkJMHgwMDAwMDgwMAotI2RlZmluZQlJUEdfU01fT0NURVRYTVRPS19GUkFNRVNYTVRPSwkJCTB4MDAwMDEwMDAKLSNkZWZpbmUJSVBHX1NNX01DU1RPQ1RFVFhNVE9LX01DU1RGUkFNRVNYTVRET0sJCTB4MDAwMDIwMDAKLSNkZWZpbmUJSVBHX1NNX0JDU1RPQ1RFVFhNVE9LX0JDU1RGUkFNRVNYTVRET0sJCTB4MDAwMDQwMDAKLSNkZWZpbmUJSVBHX1NNX0ZSQU1FU1dERUZFUlJFRFhNVAkJCTB4MDAwMDgwMDAKLSNkZWZpbmUJSVBHX1NNX0xBVEVDT0xMSVNJT05TCQkJCTB4MDAwMTAwMDAKLSNkZWZpbmUJSVBHX1NNX01VTFRJQ09MRlJBTUVTCQkJCTB4MDAwMjAwMDAKLSNkZWZpbmUJSVBHX1NNX1NJTkdMRUNPTEZSQU1FUwkJCQkweDAwMDQwMDAwCi0jZGVmaW5lCUlQR19TTV9UWEpVTUJPRlJBTUVTCQkJCTB4MDAwODAwMDAKLSNkZWZpbmUJSVBHX1NNX0NBUlJJRVJTRU5TRUVSUk9SUwkJCTB4MDAxMDAwMDAKLSNkZWZpbmUJSVBHX1NNX01BQ0NPTlRST0xGUkFNRVNYTVRECQkJMHgwMDIwMDAwMAotI2RlZmluZQlJUEdfU01fRlJBTUVTQUJPUlRYU0NPTExTCQkJMHgwMDQwMDAwMAotI2RlZmluZQlJUEdfU01fRlJBTUVTV0VYREVGRVJBTAkJCQkweDAwODAwMDAwCi0KLS8qIENvdW50ZG93biAqLwotI2RlZmluZQlJUEdfQ0RfUlNWRF9NQVNLCQkweDA3MDBGRkZGCi0jZGVmaW5lCUlQR19DRF9DT1VOVAkJCTB4MDAwMEZGRkYKLSNkZWZpbmUJSVBHX0NEX0NPVU5URE9XTlNQRUVECQkweDAxMDAwMDAwCi0jZGVmaW5lCUlQR19DRF9DT1VOVERPV05NT0RFCQkweDAyMDAwMDAwCi0jZGVmaW5lCUlQR19DRF9DT1VOVElOVEVOQUJMRUQJCTB4MDQwMDAwMDAKLQotLyogVHhETUFCdXJzdFRocmVzaCAqLwotI2RlZmluZSBJUEdfVEJfUlNWRF9NQVNLICAgICAgICAgICAgICAgIDB4RkYKLQotLyogVHhETUFVcmdlbnRUaHJlc2ggKi8KLSNkZWZpbmUgSVBHX1RVX1JTVkRfTUFTSyAgICAgICAgICAgICAgICAweEZGCi0KLS8qIFR4RE1BUG9sbFBlcmlvZCAqLwotI2RlZmluZSBJUEdfVFBfUlNWRF9NQVNLICAgICAgICAgICAgICAgIDB4RkYKLQotLyogUnhETUFVcmdlbnRUaHJlc2ggKi8KLSNkZWZpbmUgSVBHX1JVX1JTVkRfTUFTSyAgICAgICAgICAgICAgICAweEZGCi0KLS8qIFJ4RE1BUG9sbFBlcmlvZCAqLwotI2RlZmluZSBJUEdfUlBfUlNWRF9NQVNLICAgICAgICAgICAgICAgIDB4RkYKLQotLyogUmVjZWl2ZU1vZGUgKi8KLSNkZWZpbmUgSVBHX1JNX1JTVkRfTUFTSyAgICAgICAgICAgICAgICAweDNGCi0jZGVmaW5lIElQR19STV9SRUNFSVZFVU5JQ0FTVCAgICAgICAgICAgMHgwMQotI2RlZmluZSBJUEdfUk1fUkVDRUlWRU1VTFRJQ0FTVCAgICAgICAgIDB4MDIKLSNkZWZpbmUgSVBHX1JNX1JFQ0VJVkVCUk9BRENBU1QgICAgICAgICAweDA0Ci0jZGVmaW5lIElQR19STV9SRUNFSVZFQUxMRlJBTUVTICAgICAgICAgMHgwOAotI2RlZmluZSBJUEdfUk1fUkVDRUlWRU1VTFRJQ0FTVEhBU0ggICAgIDB4MTAKLSNkZWZpbmUgSVBHX1JNX1JFQ0VJVkVJUE1VTFRJQ0FTVCAgICAgICAweDIwCi0KLS8qIFBoeVNldCAqLwotI2RlZmluZSBJUEdfUFNfTUVNX0xFTkI5QiAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgSVBHX1BTX01FTV9MRU45ICAgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIElQR19QU19OT05fQ09NUERFVCAgICAgICAgICAgICAgMHgwNAotCi0vKiBQaHlDdHJsICovCi0jZGVmaW5lIElQR19QQ19SU1ZEX01BU0sgICAgICAgICAgICAgICAgMHhGRgotI2RlZmluZSBJUEdfUENfTUdNVENMS19MTyAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgSVBHX1BDX01HTVRDTEtfSEkgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIElQR19QQ19NR01UQ0xLICAgICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBJUEdfUENfTUdNVERBVEEgICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgSVBHX1BDX01HTVRESVIgICAgICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lIElQR19QQ19EVVBMRVhfUE9MQVJJVFkgICAgICAgICAgMHgwOAotI2RlZmluZSBJUEdfUENfRFVQTEVYX1NUQVRVUyAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgSVBHX1BDX0xJTktfUE9MQVJJVFkgICAgICAgICAgICAweDIwCi0jZGVmaW5lIElQR19QQ19MSU5LX1NQRUVEICAgICAgICAgICAgICAgMHhDMAotI2RlZmluZSBJUEdfUENfTElOS19TUEVFRF8xME1CUFMgICAgICAgIDB4NDAKLSNkZWZpbmUgSVBHX1BDX0xJTktfU1BFRURfMTAwTUJQUyAgICAgICAweDgwCi0jZGVmaW5lIElQR19QQ19MSU5LX1NQRUVEXzEwMDBNQlBTICAgICAgMHhDMAotCi0vKiBETUFDdHJsICovCi0jZGVmaW5lIElQR19EQ19SU1ZEX01BU0sgICAgICAgICAgICAgICAgMHhDMDdEOTgxOAotI2RlZmluZSBJUEdfRENfUlhfRE1BX0NPTVBMRVRFICAgICAgICAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgSVBHX0RDX1JYX0RNQV9QT0xMX05PVyAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIElQR19EQ19UWF9ETUFfQ09NUExFVEUgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBJUEdfRENfVFhfRE1BX1BPTExfTk9XICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgSVBHX0RDX1RYX0RNQV9JTl9QUk9HICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIElQR19EQ19SWF9FQVJMWV9ESVNBQkxFICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBJUEdfRENfTVdJX0RJU0FCTEUgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgSVBHX0RDX1RYX1dSSVRFX0JBQ0tfRElTQUJMRSAgICAweDAwMDgwMDAwCi0jZGVmaW5lIElQR19EQ19UWF9CVVJTVF9MSU1JVCAgICAgICAgICAgMHgwMDcwMDAwMAotI2RlZmluZSBJUEdfRENfVEFSR0VUX0FCT1JUICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgSVBHX0RDX01BU1RFUl9BQk9SVCAgICAgICAgICAgICAweDgwMDAwMDAwCi0KLS8qIEFTSUNDdHJsICovCi0jZGVmaW5lIElQR19BQ19SU1ZEX01BU0sgICAgICAgICAgICAgICAgMHgwN0ZGRUZGMgotI2RlZmluZSBJUEdfQUNfRVhQX1JPTV9TSVpFICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgSVBHX0FDX1BIWV9TUEVFRDEwICAgICAgICAgICAgICAweDAwMDAwMDEwCi0jZGVmaW5lIElQR19BQ19QSFlfU1BFRUQxMDAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBJUEdfQUNfUEhZX1NQRUVEMTAwMCAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgSVBHX0FDX1BIWV9NRURJQSAgICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIElQR19BQ19GT1JDRURfQ0ZHICAgICAgICAgICAgICAgMHgwMDAwMDcwMAotI2RlZmluZSBJUEdfQUNfRDNSRVNFVERJU0FCTEUgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgSVBHX0FDX1NQRUVEX1VQX01PREUgICAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIElQR19BQ19MRURfTU9ERSAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBJUEdfQUNfUlNUX09VVF9QT0xBUklUWSAgICAgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgSVBHX0FDX0dMT0JBTF9SRVNFVCAgICAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIElQR19BQ19SWF9SRVNFVCAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBJUEdfQUNfVFhfUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAKLSNkZWZpbmUgSVBHX0FDX0RNQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIElQR19BQ19GSUZPICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBJUEdfQUNfTkVUV09SSyAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKLSNkZWZpbmUgSVBHX0FDX0hPU1QgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCi0jZGVmaW5lIElQR19BQ19BVVRPX0lOSVQgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSBJUEdfQUNfUlNUX09VVCAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgSVBHX0FDX0lOVF9SRVFVRVNUICAgICAgICAgICAgICAweDAyMDAwMDAwCi0jZGVmaW5lIElQR19BQ19SRVNFVF9CVVNZICAgICAgICAgICAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBJUEdfQUNfTEVEX1NQRUVEICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgSVBHX0FDX0xFRF9NT0RFX0JJVF8xICAgICAgICAgICAweDIwMDAwMDAwCi0KLS8qIEVlcHJvbUN0cmwgKi8KLSNkZWZpbmUgSVBHX0VDX1JTVkRfTUFTSyAgICAgICAgICAgICAgICAweDgzRkYKLSNkZWZpbmUgSVBHX0VDX0VFUFJPTV9BRERSICAgICAgICAgICAgICAweDAwRkYKLSNkZWZpbmUgSVBHX0VDX0VFUFJPTV9PUENPREUgICAgICAgICAgICAweDAzMDAKLSNkZWZpbmUgSVBHX0VDX0VFUFJPTV9TVUJDT01NQUQgICAgICAgICAweDAwMDAKLSNkZWZpbmUgSVBHX0VDX0VFUFJPTV9XUklURU9QQ09ERSAgICAgICAweDAxMDAKLSNkZWZpbmUgSVBHX0VDX0VFUFJPTV9SRUFET1BDT0RFICAgICAgICAweDAyMDAKLSNkZWZpbmUgSVBHX0VDX0VFUFJPTV9FUkFTRU9QQ09ERSAgICAgICAweDAzMDAKLSNkZWZpbmUgSVBHX0VDX0VFUFJPTV9CVVNZICAgICAgICAgICAgICAweDgwMDAKLQotLyogRklGT0N0cmwgKi8KLSNkZWZpbmUgSVBHX0ZDX1JTVkRfTUFTSyAgICAgICAgICAgICAgICAweEMwMDEKLSNkZWZpbmUgSVBHX0ZDX1JBTV9URVNUX01PREUgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgSVBHX0ZDX1RSQU5TTUlUVElORyAgICAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgSVBHX0ZDX1JFQ0VJVklORyAgICAgICAgICAgICAgICAweDgwMDAKLQotLyogVHhTdGF0dXMgKi8KLSNkZWZpbmUgSVBHX1RTX1JTVkRfTUFTSyAgICAgICAgICAgICAgICAweEZGRkYwMERECi0jZGVmaW5lIElQR19UU19UWF9FUlJPUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBJUEdfVFNfTEFURV9DT0xMSVNJT04gICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgSVBHX1RTX1RYX01BWF9DT0xMICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIElQR19UU19UWF9VTkRFUlJVTiAgICAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBJUEdfVFNfVFhfSU5EX1JFUUQgICAgICAgICAgICAgIDB4MDAwMDAwNDAKLSNkZWZpbmUgSVBHX1RTX1RYX0NPTVBMRVRFICAgICAgICAgICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIElQR19UU19UWF9GUkFNRUlEICAgICAgICAgICAgICAgMHhGRkZGMDAwMAotCi0vKiBXYWtlRXZlbnQgKi8KLSNkZWZpbmUgSVBHX1dFX1dBS0VfUEtUX0VOQUJMRSAgICAgICAgICAweDAxCi0jZGVmaW5lIElQR19XRV9NQUdJQ19QS1RfRU5BQkxFICAgICAgICAgMHgwMgotI2RlZmluZSBJUEdfV0VfTElOS19FVlRfRU5BQkxFICAgICAgICAgIDB4MDQKLSNkZWZpbmUgSVBHX1dFX1dBS0VfUE9MQVJJVFkgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIElQR19XRV9XQUtFX1BLVF9FVlQgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBJUEdfV0VfTUFHSUNfUEtUX0VWVCAgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgSVBHX1dFX0xJTktfRVZUICAgICAgICAgICAgICAgICAweDQwCi0jZGVmaW5lIElQR19XRV9XT0xfRU5BQkxFICAgICAgICAgICAgICAgMHg4MAotCi0vKiBJbnRFbmFibGUgKi8KLSNkZWZpbmUgSVBHX0lFX1JTVkRfTUFTSyAgICAgICAgICAgICAgICAweDFGRkUKLSNkZWZpbmUgSVBHX0lFX0hPU1RfRVJST1IgICAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgSVBHX0lFX1RYX0NPTVBMRVRFICAgICAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgSVBHX0lFX01BQ19DVFJMX0ZSQU1FICAgICAgICAgICAweDAwMDgKLSNkZWZpbmUgSVBHX0lFX1JYX0NPTVBMRVRFICAgICAgICAgICAgICAweDAwMTAKLSNkZWZpbmUgSVBHX0lFX1JYX0VBUkxZICAgICAgICAgICAgICAgICAweDAwMjAKLSNkZWZpbmUgSVBHX0lFX0lOVF9SRVFVRVNURUQgICAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgSVBHX0lFX1VQREFURV9TVEFUUyAgICAgICAgICAgICAweDAwODAKLSNkZWZpbmUgSVBHX0lFX0xJTktfRVZFTlQgICAgICAgICAgICAgICAweDAxMDAKLSNkZWZpbmUgSVBHX0lFX1RYX0RNQV9DT01QTEVURSAgICAgICAgICAweDAyMDAKLSNkZWZpbmUgSVBHX0lFX1JYX0RNQV9DT01QTEVURSAgICAgICAgICAweDA0MDAKLSNkZWZpbmUgSVBHX0lFX1JGRF9MSVNUX0VORCAgICAgICAgICAgICAweDA4MDAKLSNkZWZpbmUgSVBHX0lFX1JYX0RNQV9QUklPUklUWSAgICAgICAgICAweDEwMDAKLQotLyogSW50U3RhdHVzICovCi0jZGVmaW5lIElQR19JU19SU1ZEX01BU0sgICAgICAgICAgICAgICAgMHgxRkZGCi0jZGVmaW5lIElQR19JU19JTlRFUlJVUFRfU1RBVFVTICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIElQR19JU19IT1NUX0VSUk9SICAgICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIElQR19JU19UWF9DT01QTEVURSAgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIElQR19JU19NQUNfQ1RSTF9GUkFNRSAgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIElQR19JU19SWF9DT01QTEVURSAgICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lIElQR19JU19SWF9FQVJMWSAgICAgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIElQR19JU19JTlRfUkVRVUVTVEVEICAgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIElQR19JU19VUERBVEVfU1RBVFMgICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lIElQR19JU19MSU5LX0VWRU5UICAgICAgICAgICAgICAgMHgwMTAwCi0jZGVmaW5lIElQR19JU19UWF9ETUFfQ09NUExFVEUgICAgICAgICAgMHgwMjAwCi0jZGVmaW5lIElQR19JU19SWF9ETUFfQ09NUExFVEUgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lIElQR19JU19SRkRfTElTVF9FTkQgICAgICAgICAgICAgMHgwODAwCi0jZGVmaW5lIElQR19JU19SWF9ETUFfUFJJT1JJVFkgICAgICAgICAgMHgxMDAwCi0KLS8qIE1BQ0N0cmwgKi8KLSNkZWZpbmUgSVBHX01DX1JTVkRfTUFTSyAgICAgICAgICAgICAgICAweDdGRTMzRkEzCi0jZGVmaW5lIElQR19NQ19JRlNfU0VMRUNUICAgICAgICAgICAgICAgMHgwMDAwMDAwMwotI2RlZmluZSBJUEdfTUNfSUZTXzQzNTJCSVQgICAgICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgSVBHX01DX0lGU18xNzkyQklUICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIElQR19NQ19JRlNfMTAyNEJJVCAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBJUEdfTUNfSUZTXzk2QklUICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgSVBHX01DX0RVUExFWF9TRUxFQ1QgICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIElQR19NQ19EVVBMRVhfU0VMRUNUX0ZEICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBJUEdfTUNfRFVQTEVYX1NFTEVDVF9IRCAgICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgSVBHX01DX1RYX0ZMT1dfQ09OVFJPTF9FTkFCTEUgICAweDAwMDAwMDgwCi0jZGVmaW5lIElQR19NQ19SWF9GTE9XX0NPTlRST0xfRU5BQkxFICAgMHgwMDAwMDEwMAotI2RlZmluZSBJUEdfTUNfUkNWX0ZDUyAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgSVBHX01DX0ZJRk9fTE9PUEJBQ0sgICAgICAgICAgICAweDAwMDAwNDAwCi0jZGVmaW5lIElQR19NQ19NQUNfTE9PUEJBQ0sgICAgICAgICAgICAgMHgwMDAwMDgwMAotI2RlZmluZSBJUEdfTUNfQVVUT19WTEFOX1RBR0dJTkcgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgSVBHX01DX0FVVE9fVkxBTl9VTlRBR0dJTkcgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIElQR19NQ19DT0xMSVNJT05fREVURUNUICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBJUEdfTUNfQ0FSUklFUl9TRU5TRSAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgSVBHX01DX1NUQVRJU1RJQ1NfRU5BQkxFICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIElQR19NQ19TVEFUSVNUSUNTX0RJU0FCTEUgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBJUEdfTUNfU1RBVElTVElDU19FTkFCTEVEICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgSVBHX01DX1RYX0VOQUJMRSAgICAgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIElQR19NQ19UWF9ESVNBQkxFICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBJUEdfTUNfVFhfRU5BQkxFRCAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgSVBHX01DX1JYX0VOQUJMRSAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIElQR19NQ19SWF9ESVNBQkxFICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBJUEdfTUNfUlhfRU5BQkxFRCAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgSVBHX01DX1BBVVNFRCAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCi0KLS8qCi0gKglUdW5lCi0gKi8KLQotLyogQXNzaWduIElQR19BUFBFTkRfRkNTX09OX1RYID4gMCBmb3IgYXV0byBGQ1MgYXBwZW5kIG9uIFRYLiAqLwotI2RlZmluZSAgICAgICAgIElQR19BUFBFTkRfRkNTX09OX1RYICAgICAgICAgMQotCi0vKiBBc3NpZ24gSVBHX0FQUEVORF9GQ1NfT05fVFggPiAwIGZvciBhdXRvIEZDUyBzdHJpcCBvbiBSWC4gKi8KLSNkZWZpbmUgICAgICAgICBJUEdfU1RSSVBfRkNTX09OX1JYICAgICAgICAgIDEKLQotLyogQXNzaWduIElQR19EUk9QX09OX1JYX0VUSF9FUlJPUlMgPiAwIHRvIGRyb3AgUlggZnJhbWVzIHdpdGgKLSAqIEV0aGVybmV0IGVycm9ycy4KLSAqLwotI2RlZmluZSAgICAgICAgIElQR19EUk9QX09OX1JYX0VUSF9FUlJPUlMgICAgMQotCi0vKiBBc3NpZ24gSVBHX0lOU0VSVF9NQU5VQUxfVkxBTl9UQUcgPiAwIHRvIGluc2VydCBWTEFOIHRhZ3MgbWFudWFsbHkKLSAqICh2aWEgVEZDKS4KLSAqLwotI2RlZmluZQkJSVBHX0lOU0VSVF9NQU5VQUxfVkxBTl9UQUcgICAwCi0KLS8qIEFzc2lnbiBJUEdfQUREX0lQQ0hFQ0tTVU1fT05fVFggPiAwIGZvciBhdXRvIElQIGNoZWNrc3VtIG9uIFRYLiAqLwotI2RlZmluZSAgICAgICAgIElQR19BRERfSVBDSEVDS1NVTV9PTl9UWCAgICAgMAotCi0vKiBBc3NpZ24gSVBHX0FERF9UQ1BDSEVDS1NVTV9PTl9UWCA+IDAgZm9yIGF1dG8gVENQIGNoZWNrc3VtIG9uIFRYLgotICogRE8gTk9UIFVTRSBGT1IgU0lMSUNPTiBSRVZJU0lPTlMgQjMgQU5EIEVBUkxJRVIuCi0gKi8KLSNkZWZpbmUgICAgICAgICBJUEdfQUREX1RDUENIRUNLU1VNX09OX1RYICAgIDAKLQotLyogQXNzaWduIElQR19BRERfVURQQ0hFQ0tTVU1fT05fVFggPiAwIGZvciBhdXRvIFVEUCBjaGVja3N1bSBvbiBUWC4KLSAqIERPIE5PVCBVU0UgRk9SIFNJTElDT04gUkVWSVNJT05TIEIzIEFORCBFQVJMSUVSLgotICovCi0jZGVmaW5lICAgICAgICAgSVBHX0FERF9VRFBDSEVDS1NVTV9PTl9UWCAgICAwCi0KLS8qIElmIGluc2VydGluZyBWTEFOIHRhZ3MgbWFudWFsbHksIGFzc2lnbiB0aGUgSVBHX01BTlVBTF9WTEFOX3h4Ci0gKiBjb25zdGFudHMgYXMgZGVzaXJlZC4KLSAqLwotI2RlZmluZQkJSVBHX01BTlVBTF9WTEFOX1ZJRAkJMHhBQkMKLSNkZWZpbmUJCUlQR19NQU5VQUxfVkxBTl9DRkkJCTB4MQotI2RlZmluZQkJSVBHX01BTlVBTF9WTEFOX1VTRVJQUklPUklUWSAweDUKLQotI2RlZmluZSAgICAgICAgIElQR19JT19SRUdfUkFOR0UJCTB4RkYKLSNkZWZpbmUgICAgICAgICBJUEdfTUVNX1JFR19SQU5HRQkJMHgxNTQKLSNkZWZpbmUgICAgICAgICBJUEdfRFJJVkVSX05BTUUJCSJTdW5kYW5jZSBUZWNobm9sb2d5IElQRyBUcmlwbGUtU3BlZWQgRXRoZXJuZXQiCi0jZGVmaW5lICAgICAgICAgSVBHX05JQ19QSFlfQUREUkVTUyAgICAgICAgICAweDAxCi0jZGVmaW5lCQlJUEdfRE1BTElTVF9BTElHTl9QQUQJMHgwNwotI2RlZmluZQkJSVBHX01VTFRJQ0FTVF9IQVNIVEFCTEVfU0laRQkweDQwCi0KLS8qIE51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBhZnRlciBpc3N1aW5nIGEgc29mdHdhcmUgcmVzZXQuCi0gKiAweDA1IDw9IElQR19BQ19SRVNFVFdBSVQgdG8gYWNjb3VudCBmb3IgcHJvcGVyIDEwTWJwcyBvcGVyYXRpb24uCi0gKi8KLSNkZWZpbmUgICAgICAgICBJUEdfQUNfUkVTRVRXQUlUICAgICAgICAgICAgIDB4MDUKLQotLyogTnVtYmVyIG9mIElQR19BQ19SRVNFVFdBSVQgdGltZXBlcmlvZHMgYmVmb3JlIGRlY2xhcmluZyB0aW1lb3V0LiAqLwotI2RlZmluZSAgICAgICAgIElQR19BQ19SRVNFVF9USU1FT1VUICAgICAgICAgMHgwQQotCi0vKiBNaW5pbXVtIG51bWJlciBvZiBuYW5vc2Vjb25kcyB1c2VkIHRvIHRvZ2dsZSBNREMgY2xvY2sgZHVyaW5nCi0gKiBNSUkvR01JSSByZWdpc3RlciBhY2Nlc3MuCi0gKi8KLSNkZWZpbmUJCUlQR19QQ19QSFlDVFJMV0FJVF9OUwkJMjAwCi0KLSNkZWZpbmUJCUlQR19URkRMSVNUX0xFTkdUSAkJMHgxMDAKLQotLyogTnVtYmVyIG9mIGZyYW1lcyBiZXR3ZWVuIFR4RE1BQ29tcGxldGUgaW50ZXJydXB0LgotICogMCA8IElQR19GUkFNRVNCRVRXRUVOVFhETUFDT01QTEVURVMgPD0gSVBHX1RGRExJU1RfTEVOR1RICi0gKi8KLSNkZWZpbmUJCUlQR19GUkFNRVNCRVRXRUVOVFhETUFDT01QTEVURVMgMHgxCi0KLSNkZWZpbmUJCUlQR19SRkRMSVNUX0xFTkdUSAkJMHgxMDAKLQotLyogTWF4aW11bSBudW1iZXIgb2YgUkZEcyB0byBwcm9jZXNzIHBlciBpbnRlcnJ1cHQuCi0gKiAxIDwgSVBHX01BWFJGRFBST0NFU1NfQ09VTlQgPCBJUEdfUkZETElTVF9MRU5HVEgKLSAqLwotI2RlZmluZQkJSVBHX01BWFJGRFBST0NFU1NfQ09VTlQJMHg4MAotCi0vKiBNaW5pbXVtIG1hcmdpbiBiZXR3ZWVuIGxhc3QgZnJlZWQgUkZELCBhbmQgY3VycmVudCBSRkQuCi0gKiAxIDwgSVBHX01JTlVTRURSRkRTVE9GUkVFIDwgSVBHX1JGRExJU1RfTEVOR1RICi0gKi8KLSNkZWZpbmUJCUlQR19NSU5VU0VEUkZEU1RPRlJFRQkweDgwCi0KLS8qIHNwZWNpZnkgdGhlIGp1bWJvIGZyYW1lIG1heGltdW0gc2l6ZQotICogcGVyIHVuaXQgaXMgMHg2MDAgKHRoZSByeF9idWZmZXIgc2l6ZSB0aGF0IG9uZSBSRkQgY2FuIGNhcnJ5KQotICovCi0jZGVmaW5lICAgICBNQVhfSlVNQk9TSVpFCSAgICAgICAgMHg4CS8qIG1heCBpcyAxMksgKi8KLQotLyogS2V5IHJlZ2lzdGVyIHZhbHVlcyBsb2FkZWQgYXQgZHJpdmVyIHN0YXJ0IHVwLiAqLwotCi0vKiBUWERNQVBvbGxQZXJpb2QgaXMgc3BlY2lmaWVkIGluIDMyMG5zIGluY3JlbWVudHMuCi0gKgotICogVmFsdWUJVGltZQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAweDAwLTB4MDEJMzIwbnMKLSAqIDB4MDMJCX4xdXMKLSAqIDB4MUYJCX4xMHVzCi0gKiAweEZGCQl+ODJ1cwotICovCi0jZGVmaW5lCQlJUEdfVFhETUFQT0xMUEVSSU9EX1ZBTFVFCTB4MjYKLQotLyogVHhETUFVcmdlbnRUaHJlc2ggc3BlY2lmaWVzIHRoZSBtaW5pbXVtIGFtb3VudCBvZgotICogZGF0YSBpbiB0aGUgdHJhbnNtaXQgRklGTyBiZWZvcmUgYXNzZXJ0aW5nIGFuCi0gKiB1cmdlbnQgdHJhbnNtaXQgRE1BIHJlcXVlc3QuCi0gKgotICogVmFsdWUJTWluIFR4RklGTyBvY2N1cGllZCBzcGFjZSBiZWZvcmUgdXJnZW50IFRYIHJlcXVlc3QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMHgwMC0weDA0CTEyOCBieXRlcyAoMTAyNCBiaXRzKQotICogMHgyNwkJMTI0OCBieXRlcyAofjEwMDAwIGJpdHMpCi0gKiAweDMwCQkxNTM2IGJ5dGVzICgxMjI4OCBiaXRzKQotICogMHhGRgkJODE5MiBieXRlcyAoNjU1MzUgYml0cykKLSAqLwotI2RlZmluZQkJSVBHX1RYRE1BVVJHRU5UVEhSRVNIX1ZBTFVFCTB4MDQKLQotLyogVHhETUFCdXJzdFRocmVzaCBzcGVjaWZpZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mCi0gKiBmcmVlIHNwYWNlIGluIHRoZSB0cmFuc21pdCBGSUZPIGJlZm9yZSBhc3NlcnRpbmcgYW4KLSAqIHRyYW5zbWl0IERNQSByZXF1ZXN0LgotICoKLSAqIFZhbHVlCU1pbiBUeEZJRk8gZnJlZSBzcGFjZSBiZWZvcmUgVFggcmVxdWVzdAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMHgwMC0weDA4CTI1NiBieXRlcwotICogMHgzMAkJMTUzNiBieXRlcwotICogMHhGRgkJODE5MiBieXRlcwotICovCi0jZGVmaW5lCQlJUEdfVFhETUFCVVJTVFRIUkVTSF9WQUxVRQkweDMwCi0KLS8qIFJYRE1BUG9sbFBlcmlvZCBpcyBzcGVjaWZpZWQgaW4gMzIwbnMgaW5jcmVtZW50cy4KLSAqCi0gKiBWYWx1ZQlUaW1lCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDB4MDAtMHgwMQkzMjBucwotICogMHgwMwkJfjF1cwotICogMHgxRgkJfjEwdXMKLSAqIDB4RkYJCX44MnVzCi0gKi8KLSNkZWZpbmUJCUlQR19SWERNQVBPTExQRVJJT0RfVkFMVUUJMHgwMQotCi0vKiBSeERNQVVyZ2VudFRocmVzaCBzcGVjaWZpZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mCi0gKiBmcmVlIHNwYWNlIHdpdGhpbiB0aGUgcmVjZWl2ZSBGSUZPIGJlZm9yZSBhc3NlcnRpbmcKLSAqIGEgdXJnZW50IHJlY2VpdmUgRE1BIHJlcXVlc3QuCi0gKgotICogVmFsdWUJTWluIFJ4RklGTyBmcmVlIHNwYWNlIGJlZm9yZSB1cmdlbnQgUlggcmVxdWVzdAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAweDAwLTB4MDQJMTI4IGJ5dGVzICgxMDI0IGJpdHMpCi0gKiAweDI3CQkxMjQ4IGJ5dGVzICh+MTAwMDAgYml0cykKLSAqIDB4MzAJCTE1MzYgYnl0ZXMgKDEyMjg4IGJpdHMpCi0gKiAweEZGCQk4MTkyIGJ5dGVzICg2NTUzNSBiaXRzKQotICovCi0jZGVmaW5lCQlJUEdfUlhETUFVUkdFTlRUSFJFU0hfVkFMVUUJMHgzMAotCi0vKiBSeERNQUJ1cnN0VGhyZXNoIHNwZWNpZmllcyB0aGUgbWluaW11bSBhbW91bnQgb2YKLSAqIG9jY3VwaWVkIHNwYWNlIHdpdGhpbiB0aGUgcmVjZWl2ZSBGSUZPIGJlZm9yZSBhc3NlcnRpbmcKLSAqIGEgcmVjZWl2ZSBETUEgcmVxdWVzdC4KLSAqCi0gKiBWYWx1ZQlNaW4gVHhGSUZPIGZyZWUgc3BhY2UgYmVmb3JlIFRYIHJlcXVlc3QKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDB4MDAtMHgwOAkyNTYgYnl0ZXMKLSAqIDB4MzAJCTE1MzYgYnl0ZXMKLSAqIDB4RkYJCTgxOTIgYnl0ZXMKLSAqLwotI2RlZmluZQkJSVBHX1JYRE1BQlVSU1RUSFJFU0hfVkFMVUUJMHgzMAotCi0vKiBGbG93T25UaHJlc2ggc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBvY2N1cGllZAotICogc3BhY2UgaW4gdGhlIHJlY2VpdmUgRklGTyBiZWZvcmUgYSBQQVVTRSBmcmFtZSB3aXRoCi0gKiBtYXhpbXVtIHBhdXNlIHRpbWUgdHJhbnNtaXR0ZWQuCi0gKgotICogVmFsdWUJTWF4IFJ4RklGTyBvY2N1cGllZCBzcGFjZSBiZWZvcmUgUEFVU0UKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogMHgwMDAwCTAgYnl0ZXMKLSAqIDB4MDc0MAkyOSw2OTYgYnl0ZXMKLSAqIDB4MDdGRgkzMiw3NTIgYnl0ZXMKLSAqLwotI2RlZmluZQkJSVBHX0ZMT1dPTlRIUkVTSF9WQUxVRQkweDA3NDAKLQotLyogRmxvd09mZlRocmVzaCBzcGVjaWZpZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIG9jY3VwaWVkCi0gKiBzcGFjZSBpbiB0aGUgcmVjZWl2ZSBGSUZPIGJlZm9yZSBhIFBBVVNFIGZyYW1lIHdpdGgKLSAqIHplcm8gcGF1c2UgdGltZSBpcyB0cmFuc21pdHRlZC4KLSAqCi0gKiBWYWx1ZQlNYXggUnhGSUZPIG9jY3VwaWVkIHNwYWNlIGJlZm9yZSBQQVVTRQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAweDAwMDAJMCBieXRlcwotICogMHgwMEJGCTMwNTYgYnl0ZXMKLSAqIDB4MDdGRgkzMiw3NTIgYnl0ZXMKLSAqLwotI2RlZmluZQkJSVBHX0ZMT1dPRkZUSFJFU0hfVkFMVUUJMHgwMEJGCi0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzIG1hY3Jvcy4KLSAqLwotCi0vKiBNYWNyb3MgZm9yIHByaW50aW5nIGRlYnVnIHN0YXRlbWVudHMuICovCi0jaWZkZWYgSVBHX0RFQlVHCi0jICBkZWZpbmUgSVBHX0RFQlVHX01TRyhmbXQsIGFyZ3MuLi4pCQkJXAotZG8gewkJCQkJCQlcCi0JaWYgKDApCQkJCQkJXAotCQlwcmludGsoS0VSTl9ERUJVRyAiSVBHOiAiIGZtdCwgIyNhcmdzKTsJXAotfSB3aGlsZSAoMCkKLSMgIGRlZmluZSBJUEdfRERFQlVHX01TRyhmbXQsIGFyZ3MuLi4pCQkJXAotCXByaW50ayhLRVJOX0RFQlVHICJJUEc6ICIgZm10LCAjI2FyZ3MpCi0jICBkZWZpbmUgSVBHX0RVTVBSRkRMSVNUKGFyZ3MpIGlwZ19kdW1wX3JmZGxpc3QoYXJncykKLSMgIGRlZmluZSBJUEdfRFVNUFRGRExJU1QoYXJncykgaXBnX2R1bXBfdGZkbGlzdChhcmdzKQotI2Vsc2UKLSMgIGRlZmluZSBJUEdfREVCVUdfTVNHKGZtdCwgYXJncy4uLikJCQlcCi1kbyB7CQkJCQkJCVwKLQlpZiAoMCkJCQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHICJJUEc6ICIgZm10LCAjI2FyZ3MpOwlcCi19IHdoaWxlICgwKQotIyAgZGVmaW5lIElQR19EREVCVUdfTVNHKGZtdCwgYXJncy4uLikJCQlcCi1kbyB7CQkJCQkJCVwKLQlpZiAoMCkJCQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHICJJUEc6ICIgZm10LCAjI2FyZ3MpOwlcCi19IHdoaWxlICgwKQotIyAgZGVmaW5lIElQR19EVU1QUkZETElTVChhcmdzKQotIyAgZGVmaW5lIElQR19EVU1QVEZETElTVChhcmdzKQotI2VuZGlmCi0KLS8qCi0gKiBFbmQgbWlzY2VsbGFuZW91cyBtYWNyb3MuCi0gKi8KLQotLyogVHJhbnNtaXQgRnJhbWUgRGVzY3JpcHRvci4gVGhlIElQRyBzdXBwb3J0cyAxNSBmcmFnbWVudHMsCi0gKiBob3dldmVyIExpbnV4IHJlcXVpcmVzIG9ubHkgYSBzaW5nbGUgZnJhZ21lbnQuIE5vdGUsIGVhY2gKLSAqIFRGRCBmaWVsZCBpcyA2NCBiaXRzIHdpZGUuCi0gKi8KLXN0cnVjdCBpcGdfdHggewotCV9fbGU2NCBuZXh0X2Rlc2M7Ci0JX19sZTY0IHRmYzsKLQlfX2xlNjQgZnJhZ19pbmZvOwotfTsKLQotLyogUmVjZWl2ZSBGcmFtZSBEZXNjcmlwdG9yLiBOb3RlLCBlYWNoIFJGRCBmaWVsZCBpcyA2NCBiaXRzIHdpZGUuCi0gKi8KLXN0cnVjdCBpcGdfcnggewotCV9fbGU2NCBuZXh0X2Rlc2M7Ci0JX19sZTY0IHJmczsKLQlfX2xlNjQgZnJhZ19pbmZvOwotfTsKLQotc3RydWN0IGlwZ19qdW1ibyB7Ci0JaW50IGZvdW5kX3N0YXJ0OwotCWludCBjdXJyZW50X3NpemU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLX07Ci0KLS8qIFN0cnVjdHVyZSBvZiBJUEcgTklDIHNwZWNpZmljIGRhdGEuICovCi1zdHJ1Y3QgaXBnX25pY19wcml2YXRlIHsKLQl2b2lkIF9faW9tZW0gKmlvYWRkcjsKLQlzdHJ1Y3QgaXBnX3R4ICp0eGQ7Ci0Jc3RydWN0IGlwZ19yeCAqcnhkOwotCWRtYV9hZGRyX3QgdHhkX21hcDsKLQlkbWFfYWRkcl90IHJ4ZF9tYXA7Ci0Jc3RydWN0IHNrX2J1ZmYgKnR4X2J1ZmZbSVBHX1RGRExJU1RfTEVOR1RIXTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcnhfYnVmZltJUEdfUkZETElTVF9MRU5HVEhdOwotCXVuc2lnbmVkIGludCB0eF9jdXJyZW50OwotCXVuc2lnbmVkIGludCB0eF9kaXJ0eTsKLQl1bnNpZ25lZCBpbnQgcnhfY3VycmVudDsKLQl1bnNpZ25lZCBpbnQgcnhfZGlydHk7Ci0JYm9vbCBpc19qdW1ibzsKLQlzdHJ1Y3QgaXBnX2p1bWJvIGp1bWJvOwotCXVuc2lnbmVkIGxvbmcgcnhmcmFnX3NpemU7Ci0JdW5zaWduZWQgbG9uZyByeHN1cHBvcnRfc2l6ZTsKLQl1bnNpZ25lZCBsb25nIG1heF9yeGZyYW1lX3NpemU7Ci0JdW5zaWduZWQgaW50IHJ4X2J1Zl9zejsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCXNwaW5sb2NrX3QgbG9jazsKLQlpbnQgdGVubWJwc21vZGU7Ci0KLQl1MTYgbGVkX21vZGU7Ci0JdTE2IHN0YXRpb25fYWRkclszXTsJLyogU3RhdGlvbiBBZGRyZXNzIGluIEVFUFJPTSBSZWcgMHgxMC4uMHgxMiAqLwotCi0Jc3RydWN0IG11dGV4CQltaWlfbXV0ZXg7Ci0Jc3RydWN0IG1paV9pZl9pbmZvCW1paV9pZjsKLQlpbnQgcmVzZXRfY3VycmVudF90ZmQ7Ci0jaWZkZWYgSVBHX0RFQlVHCi0JaW50IFJGRGxpc3RlbmRDb3VudDsKLQlpbnQgUkZETGlzdENoZWNrZWRDb3VudDsKLQlpbnQgRW1wdHlSRkRMaXN0Q291bnQ7Ci0jZW5kaWYKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHRhc2s7Ci19OwotCi0jZW5kaWYJCQkJLyogX19MSU5VWF9JUEdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19uZXRkZXYuYwppbmRleCA2MzkyNjNkLi43NzgxZTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19uZXRkZXYuYwpAQCAtNjI3LDggKzYyNywxMCBAQAogCiAJCS8qIHZlcmlmeSB0aGUgc2tiIGhlYWQgaXMgbm90IHNoYXJlZCAqLwogCQllcnIgPSBza2JfY293X2hlYWQoc2tiLCAwKTsKLQkJaWYgKGVycikKKwkJaWYgKGVycikgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwkJfQogCiAJCS8qIGxvY2F0ZSB2bGFuIGhlYWRlciAqLwogCQl2aGRyID0gKHN0cnVjdCB2bGFuX2hkciAqKShza2ItPmRhdGEgKyBFVEhfSExFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfYWRtaW5xLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfYWRtaW5xLmMKaW5kZXggMGZmOGYwMS4uMWZkNWVhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2FkbWlucS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9hZG1pbnEuYwpAQCAtNTY3LDEwICs1NjcsNiBAQAogCQlnb3RvIGluaXRfYWRtaW5xX2V4aXQ7CiAJfQogCi0JLyogaW5pdGlhbGl6ZSBsb2NrcyAqLwotCW11dGV4X2luaXQoJmh3LT5hcS5hc3FfbXV0ZXgpOwotCW11dGV4X2luaXQoJmh3LT5hcS5hcnFfbXV0ZXgpOwotCiAJLyogU2V0IHVwIHJlZ2lzdGVyIG9mZnNldHMgKi8KIAlpNDBlX2FkbWlucV9pbml0X3JlZ3MoaHcpOwogCkBAIC02NjQsOCArNjYwLDYgQEAKIAlpNDBlX3NodXRkb3duX2FzcShodyk7CiAJaTQwZV9zaHV0ZG93bl9hcnEoaHcpOwogCi0JLyogZGVzdHJveSB0aGUgbG9ja3MgKi8KLQogCWlmIChody0+bnZtX2J1ZmYudmEpCiAJCWk0MGVfZnJlZV92aXJ0X21lbShodywgJmh3LT5udm1fYnVmZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCmluZGV4IGI4MjVmOTcuLjRhOTg3M2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKQEAgLTEwMjk1LDYgKzEwMjk1LDEyIEBACiAJLyogc2V0IHVwIGEgZGVmYXVsdCBzZXR0aW5nIGZvciBsaW5rIGZsb3cgY29udHJvbCAqLwogCXBmLT5ody5mYy5yZXF1ZXN0ZWRfbW9kZSA9IEk0MEVfRkNfTk9ORTsKIAorCS8qIHNldCB1cCB0aGUgbG9ja3MgZm9yIHRoZSBBUSwgZG8gdGhpcyBvbmx5IG9uY2UgaW4gcHJvYmUKKwkgKiBhbmQgZGVzdHJveSB0aGVtIG9ubHkgb25jZSBpbiByZW1vdmUKKwkgKi8KKwltdXRleF9pbml0KCZody0+YXEuYXNxX211dGV4KTsKKwltdXRleF9pbml0KCZody0+YXEuYXJxX211dGV4KTsKKwogCWVyciA9IGk0MGVfaW5pdF9hZG1pbnEoaHcpOwogCiAJLyogcHJvdmlkZSBudm0sIGZ3LCBhcGkgdmVyc2lvbnMgKi8KQEAgLTEwNjk3LDcgKzEwNzAzLDYgQEAKIAlzZXRfYml0KF9fSTQwRV9ET1dOLCAmcGYtPnN0YXRlKTsKIAlkZWxfdGltZXJfc3luYygmcGYtPnNlcnZpY2VfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJnBmLT5zZXJ2aWNlX3Rhc2spOwotCWk0MGVfZmRpcl90ZWFyZG93bihwZik7CiAKIAlpZiAocGYtPmZsYWdzICYgSTQwRV9GTEFHX1NSSU9WX0VOQUJMRUQpIHsKIAkJaTQwZV9mcmVlX3ZmcyhwZik7CkBAIC0xMDc0MCw2ICsxMDc0NSwxMCBAQAogCQkJICJGYWlsZWQgdG8gZGVzdHJveSB0aGUgQWRtaW4gUXVldWUgcmVzb3VyY2VzOiAlZFxuIiwKIAkJCSByZXRfY29kZSk7CiAKKwkvKiBkZXN0cm95IHRoZSBsb2NrcyBvbmx5IG9uY2UsIGhlcmUgKi8KKwltdXRleF9kZXN0cm95KCZody0+YXEuYXJxX211dGV4KTsKKwltdXRleF9kZXN0cm95KCZody0+YXEuYXNxX211dGV4KTsKKwogCS8qIENsZWFyIGFsbCBkeW5hbWljIG1lbW9yeSBsaXN0cyBvZiByaW5ncywgcV92ZWN0b3JzLCBhbmQgVlNJcyAqLwogCWk0MGVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShwZik7CiAJZm9yIChpID0gMDsgaSA8IHBmLT5udW1fYWxsb2NfdnNpOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBlX2FkbWlucS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfYWRtaW5xLmMKaW5kZXggZmQxMjNjYS4uM2Y2NWUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfYWRtaW5xLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfYWRtaW5xLmMKQEAgLTU1MSwxMCArNTUxLDYgQEAKIAkJZ290byBpbml0X2FkbWlucV9leGl0OwogCX0KIAotCS8qIGluaXRpYWxpemUgbG9ja3MgKi8KLQltdXRleF9pbml0KCZody0+YXEuYXNxX211dGV4KTsKLQltdXRleF9pbml0KCZody0+YXEuYXJxX211dGV4KTsKLQogCS8qIFNldCB1cCByZWdpc3RlciBvZmZzZXRzICovCiAJaTQwZV9hZG1pbnFfaW5pdF9yZWdzKGh3KTsKIApAQCAtNTk2LDggKzU5Miw2IEBACiAJaTQwZV9zaHV0ZG93bl9hc3EoaHcpOwogCWk0MGVfc2h1dGRvd25fYXJxKGh3KTsKIAotCS8qIGRlc3Ryb3kgdGhlIGxvY2tzICovCi0KIAlpZiAoaHctPm52bV9idWZmLnZhKQogCQlpNDBlX2ZyZWVfdmlydF9tZW0oaHcsICZody0+bnZtX2J1ZmYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBldmZfbWFpbi5jCmluZGV4IGQ5NjIxNjQuLjk5ZDJjZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBldmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBldmZfbWFpbi5jCkBAIC0yNDc2LDYgKzI0NzYsMTIgQEAKIAlody0+YnVzLmRldmljZSA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKTsKIAlody0+YnVzLmZ1bmMgPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7CiAKKwkvKiBzZXQgdXAgdGhlIGxvY2tzIGZvciB0aGUgQVEsIGRvIHRoaXMgb25seSBvbmNlIGluIHByb2JlCisJICogYW5kIGRlc3Ryb3kgdGhlbSBvbmx5IG9uY2UgaW4gcmVtb3ZlCisJICovCisJbXV0ZXhfaW5pdCgmaHctPmFxLmFzcV9tdXRleCk7CisJbXV0ZXhfaW5pdCgmaHctPmFxLmFycV9tdXRleCk7CisKIAlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+bWFjX2ZpbHRlcl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+dmxhbl9maWx0ZXJfbGlzdCk7CiAKQEAgLTI2MjksNiArMjYzNSwxMCBAQAogCWlmIChody0+YXEuYXNxLmNvdW50KQogCQlpNDBldmZfc2h1dGRvd25fYWRtaW5xKGh3KTsKIAorCS8qIGRlc3Ryb3kgdGhlIGxvY2tzIG9ubHkgb25jZSwgaGVyZSAqLworCW11dGV4X2Rlc3Ryb3koJmh3LT5hcS5hcnFfbXV0ZXgpOworCW11dGV4X2Rlc3Ryb3koJmh3LT5hcS5hc3FfbXV0ZXgpOworCiAJaW91bm1hcChody0+aHdfYWRkcik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDQ3Mzk1ZmYuLmFlZDhkMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTc5MjAsNiArNzkyMCw5IEBACiAJICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJaXhnYmVfY2xvc2UoZGV2KTsKKwllbHNlCisJCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOworCiAJaXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bmV0YS5jCmluZGV4IGU4NGM3ZjIuLmVkNjIyZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdm5ldGEuYwpAQCAtMzYsNyArMzYsNyBAQAogCiAvKiBSZWdpc3RlcnMgKi8KICNkZWZpbmUgTVZORVRBX1JYUV9DT05GSUdfUkVHKHEpICAgICAgICAgICAgICAgICgweDE0MDAgKyAoKHEpIDw8IDIpKQotI2RlZmluZSAgICAgIE1WTkVUQV9SWFFfSFdfQlVGX0FMTE9DICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lICAgICAgTVZORVRBX1JYUV9IV19CVUZfQUxMT0MgICAgICAgICAgICBCSVQoMCkKICNkZWZpbmUgICAgICBNVk5FVEFfUlhRX1BLVF9PRkZTRVRfQUxMX01BU0sgICAgICgweGYgICAgPDwgOCkKICNkZWZpbmUgICAgICBNVk5FVEFfUlhRX1BLVF9PRkZTRVRfTUFTSyhvZmZzKSAgICgob2ZmcykgPDwgOCkKICNkZWZpbmUgTVZORVRBX1JYUV9USFJFU0hPTERfUkVHKHEpICAgICAgICAgICAgICgweDE0YzAgKyAoKHEpIDw8IDIpKQpAQCAtNjIsNiArNjIsNyBAQAogI2RlZmluZSBNVk5FVEFfV0lOX1NJWkUodykgICAgICAgICAgICAgICAgICAgICAgKDB4MjIwNCArICgodykgPDwgMykpCiAjZGVmaW5lIE1WTkVUQV9XSU5fUkVNQVAodykgICAgICAgICAgICAgICAgICAgICAoMHgyMjgwICsgKCh3KSA8PCAyKSkKICNkZWZpbmUgTVZORVRBX0JBU0VfQUREUl9FTkFCTEUgICAgICAgICAgICAgICAgIDB4MjI5MAorI2RlZmluZSBNVk5FVEFfQUNDRVNTX1BST1RFQ1RfRU5BQkxFICAgICAgICAgICAgMHgyMjk0CiAjZGVmaW5lIE1WTkVUQV9QT1JUX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAweDI0MDAKICNkZWZpbmUgICAgICBNVk5FVEFfVU5JX1BST01JU0NfTU9ERSAgICAgICAgICAgIEJJVCgwKQogI2RlZmluZSAgICAgIE1WTkVUQV9ERUZfUlhRKHEpICAgICAgICAgICAgICAgICAgKChxKSA8PCAxKQpAQCAtMTU5LDcgKzE2MCw3IEBACiAKICNkZWZpbmUgTVZORVRBX0lOVFJfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAweDI1YjgKICNkZWZpbmUgICAgICBNVk5FVEFfVFhRX0lOVFJfRU5BQkxFX0FMTF9NQVNLICAgICAweDAwMDBmZjAwCi0jZGVmaW5lICAgICAgTVZORVRBX1JYUV9JTlRSX0VOQUJMRV9BTExfTUFTSyAgICAgMHhmZjAwMDAwMCAgLy8gbm90ZTogbmV0YSBzYXlzIGl0J3MgMHgwMDAwMDBGRgorI2RlZmluZSAgICAgIE1WTkVUQV9SWFFfSU5UUl9FTkFCTEVfQUxMX01BU0sgICAgIDB4MDAwMDAwZmYKIAogI2RlZmluZSBNVk5FVEFfUlhRX0NNRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjY4MAogI2RlZmluZSAgICAgIE1WTkVUQV9SWFFfRElTQUJMRV9TSElGVCAgICAgICAgICAgIDgKQEAgLTI0Miw2ICsyNDMsNyBAQAogI2RlZmluZSBNVk5FVEFfVkxBTl9UQUdfTEVOICAgICAgICAgICAgIDQKIAogI2RlZmluZSBNVk5FVEFfQ1BVX0RfQ0FDSEVfTElORV9TSVpFICAgIDMyCisjZGVmaW5lIE1WTkVUQV9UWF9DU1VNX0RFRl9TSVpFCQkxNjAwCiAjZGVmaW5lIE1WTkVUQV9UWF9DU1VNX01BWF9TSVpFCQk5ODAwCiAjZGVmaW5lIE1WTkVUQV9BQ0NfTU9ERV9FWFQJCTEKIApAQCAtMTU3OSwxMiArMTU4MSwxNiBAQAogCQl9CiAKIAkJc2tiID0gYnVpbGRfc2tiKGRhdGEsIHBwLT5mcmFnX3NpemUgPiBQQUdFX1NJWkUgPyAwIDogcHAtPmZyYWdfc2l6ZSk7Ci0JCWlmICghc2tiKQotCQkJZ290byBlcnJfZHJvcF9mcmFtZTsKIAorCQkvKiBBZnRlciByZWZpbGwgb2xkIGJ1ZmZlciBoYXMgdG8gYmUgdW5tYXBwZWQgcmVnYXJkbGVzcworCQkgKiB0aGUgc2tiIGlzIHN1Y2Nlc3NmdWxseSBidWlsdCBvciBub3QuCisJCSAqLwogCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LnBhcmVudCwgcGh5c19hZGRyLAogCQkJCSBNVk5FVEFfUlhfQlVGX1NJWkUocHAtPnBrdF9zaXplKSwgRE1BX0ZST01fREVWSUNFKTsKIAorCQlpZiAoIXNrYikKKwkJCWdvdG8gZXJyX2Ryb3BfZnJhbWU7CisKIAkJcmN2ZF9wa3RzKys7CiAJCXJjdmRfYnl0ZXMgKz0gcnhfYnl0ZXM7CiAKQEAgLTMxOTEsNiArMzE5Nyw3IEBACiAJfQogCiAJbXZyZWdfd3JpdGUocHAsIE1WTkVUQV9CQVNFX0FERFJfRU5BQkxFLCB3aW5fZW5hYmxlKTsKKwltdnJlZ193cml0ZShwcCwgTVZORVRBX0FDQ0VTU19QUk9URUNUX0VOQUJMRSwgd2luX3Byb3RlY3QpOwogfQogCiAvKiBQb3dlciB1cCB0aGUgcG9ydCAqLwpAQCAtMzI1MCw2ICszMjU3LDcgQEAKIAljaGFyIGh3X21hY19hZGRyW0VUSF9BTEVOXTsKIAljb25zdCBjaGFyICptYWNfZnJvbTsKIAljb25zdCBjaGFyICptYW5hZ2VkOworCWludCB0eF9jc3VtX2xpbWl0OwogCWludCBwaHlfbW9kZTsKIAlpbnQgZXJyOwogCWludCBjcHU7CkBAIC0zMzUwLDggKzMzNTgsMjEgQEAKIAkJfQogCX0KIAotCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkbiwgIm1hcnZlbGwsYXJtYWRhLTM3MC1uZXRhIikpCi0JCXBwLT50eF9jc3VtX2xpbWl0ID0gMTYwMDsKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKGRuLCAidHgtY3N1bS1saW1pdCIsICZ0eF9jc3VtX2xpbWl0KSkgeworCQlpZiAodHhfY3N1bV9saW1pdCA8IDAgfHwKKwkJICAgIHR4X2NzdW1fbGltaXQgPiBNVk5FVEFfVFhfQ1NVTV9NQVhfU0laRSkgeworCQkJdHhfY3N1bV9saW1pdCA9IE1WTkVUQV9UWF9DU1VNX0RFRl9TSVpFOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJCQkgIldyb25nIFRYIGNzdW0gbGltaXQgaW4gRFQsIHNldCB0byAlZEJcbiIsCisJCQkJIE1WTkVUQV9UWF9DU1VNX0RFRl9TSVpFKTsKKwkJfQorCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZG4sICJtYXJ2ZWxsLGFybWFkYS0zNzAtbmV0YSIpKSB7CisJCXR4X2NzdW1fbGltaXQgPSBNVk5FVEFfVFhfQ1NVTV9ERUZfU0laRTsKKwl9IGVsc2UgeworCQl0eF9jc3VtX2xpbWl0ID0gTVZORVRBX1RYX0NTVU1fTUFYX1NJWkU7CisJfQorCisJcHAtPnR4X2NzdW1fbGltaXQgPSB0eF9jc3VtX2xpbWl0OwogCiAJcHAtPnR4X3Jpbmdfc2l6ZSA9IE1WTkVUQV9NQVhfVFhEOwogCXBwLT5yeF9yaW5nX3NpemUgPSBNVk5FVEFfTUFYX1JYRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIuYwppbmRleCBkOTg4NGZkLi5hNGJlY2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212cHAyLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi5jCkBAIC0zNDEzLDE2ICszNDEzLDIzIEBACiB9CiAKIC8qIEZyZWUgYWxsIGJ1ZmZlcnMgZnJvbSB0aGUgcG9vbCAqLwotc3RhdGljIHZvaWQgbXZwcDJfYm1fYnVmc19mcmVlKHN0cnVjdCBtdnBwMiAqcHJpdiwgc3RydWN0IG12cHAyX2JtX3Bvb2wgKmJtX3Bvb2wpCitzdGF0aWMgdm9pZCBtdnBwMl9ibV9idWZzX2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbXZwcDIgKnByaXYsCisJCQkgICAgICAgc3RydWN0IG12cHAyX2JtX3Bvb2wgKmJtX3Bvb2wpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYm1fcG9vbC0+YnVmX251bTsgaSsrKSB7CisJCWRtYV9hZGRyX3QgYnVmX3BoeXNfYWRkcjsKIAkJdTMyIHZhZGRyOwogCiAJCS8qIEdldCBidWZmZXIgdmlydHVhbCBhZGRyZXNzIChpbmRpcmVjdCBhY2Nlc3MpICovCi0JCW12cHAyX3JlYWQocHJpdiwgTVZQUDJfQk1fUEhZX0FMTE9DX1JFRyhibV9wb29sLT5pZCkpOworCQlidWZfcGh5c19hZGRyID0gbXZwcDJfcmVhZChwcml2LAorCQkJCQkgICBNVlBQMl9CTV9QSFlfQUxMT0NfUkVHKGJtX3Bvb2wtPmlkKSk7CiAJCXZhZGRyID0gbXZwcDJfcmVhZChwcml2LCBNVlBQMl9CTV9WSVJUX0FMTE9DX1JFRyk7CisKKwkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGJ1Zl9waHlzX2FkZHIsCisJCQkJIGJtX3Bvb2wtPmJ1Zl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCiAJCWlmICghdmFkZHIpCiAJCQlicmVhazsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoKHN0cnVjdCBza19idWZmICopdmFkZHIpOwpAQCAtMzQzOSw3ICszNDQ2LDcgQEAKIHsKIAl1MzIgdmFsOwogCi0JbXZwcDJfYm1fYnVmc19mcmVlKHByaXYsIGJtX3Bvb2wpOworCW12cHAyX2JtX2J1ZnNfZnJlZSgmcGRldi0+ZGV2LCBwcml2LCBibV9wb29sKTsKIAlpZiAoYm1fcG9vbC0+YnVmX251bSkgewogCQlXQVJOKDEsICJjYW5ub3QgZnJlZSBhbGwgYnVmZmVycyBpbiBwb29sICVkXG4iLCBibV9wb29sLT5pZCk7CiAJCXJldHVybiAwOwpAQCAtMzY5Miw3ICszNjk5LDggQEAKIAkJCQkgICBNVlBQMl9CTV9MT05HX0JVRl9OVU0gOgogCQkJCSAgIE1WUFAyX0JNX1NIT1JUX0JVRl9OVU07CiAJCWVsc2UKLQkJCW12cHAyX2JtX2J1ZnNfZnJlZShwb3J0LT5wcml2LCBuZXdfcG9vbCk7CisJCQltdnBwMl9ibV9idWZzX2ZyZWUocG9ydC0+ZGV2LT5kZXYucGFyZW50LAorCQkJCQkgICBwb3J0LT5wcml2LCBuZXdfcG9vbCk7CiAKIAkJbmV3X3Bvb2wtPnBrdF9zaXplID0gcGt0X3NpemU7CiAKQEAgLTM3NTYsNyArMzc2NCw3IEBACiAJaW50IHBrdF9zaXplID0gTVZQUDJfUlhfUEtUX1NJWkUobXR1KTsKIAogCS8qIFVwZGF0ZSBCTSBwb29sIHdpdGggbmV3IGJ1ZmZlciBzaXplICovCi0JbXZwcDJfYm1fYnVmc19mcmVlKHBvcnQtPnByaXYsIHBvcnRfcG9vbCk7CisJbXZwcDJfYm1fYnVmc19mcmVlKGRldi0+ZGV2LnBhcmVudCwgcG9ydC0+cHJpdiwgcG9ydF9wb29sKTsKIAlpZiAocG9ydF9wb29sLT5idWZfbnVtKSB7CiAJCVdBUk4oMSwgImNhbm5vdCBmcmVlIGFsbCBidWZmZXJzIGluIHBvb2wgJWRcbiIsIHBvcnRfcG9vbC0+aWQpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTQ0MDEsMTEgKzQ0MDksMTAgQEAKIAogCQltdnBwMl90eHFfaW5jX2dldCh0eHFfcGNwdSk7CiAKLQkJaWYgKCFza2IpCi0JCQljb250aW51ZTsKLQogCQlkbWFfdW5tYXBfc2luZ2xlKHBvcnQtPmRldi0+ZGV2LnBhcmVudCwgYnVmX3BoeXNfYWRkciwKIAkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7CisJCWlmICghc2tiKQorCQkJY29udGludWU7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJfQogfQpAQCAtNTA5Miw3ICs1MDk5LDggQEAKIAkJICAgIHN0cnVjdCBtdnBwMl9yeF9xdWV1ZSAqcnhxKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7Ci0JaW50IHJ4X3JlY2VpdmVkLCByeF9maWxsZWQsIGk7CisJaW50IHJ4X3JlY2VpdmVkOworCWludCByeF9kb25lID0gMDsKIAl1MzIgcmN2ZF9wa3RzID0gMDsKIAl1MzIgcmN2ZF9ieXRlcyA9IDA7CiAKQEAgLTUxMDEsMTcgKzUxMDksMTggQEAKIAlpZiAocnhfdG9kbyA+IHJ4X3JlY2VpdmVkKQogCQlyeF90b2RvID0gcnhfcmVjZWl2ZWQ7CiAKLQlyeF9maWxsZWQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCByeF90b2RvOyBpKyspIHsKKwl3aGlsZSAocnhfZG9uZSA8IHJ4X3RvZG8pIHsKIAkJc3RydWN0IG12cHAyX3J4X2Rlc2MgKnJ4X2Rlc2MgPSBtdnBwMl9yeHFfbmV4dF9kZXNjX2dldChyeHEpOwogCQlzdHJ1Y3QgbXZwcDJfYm1fcG9vbCAqYm1fcG9vbDsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CiAJCXUzMiBibSwgcnhfc3RhdHVzOwogCQlpbnQgcG9vbCwgcnhfYnl0ZXMsIGVycjsKIAotCQlyeF9maWxsZWQrKzsKKwkJcnhfZG9uZSsrOwogCQlyeF9zdGF0dXMgPSByeF9kZXNjLT5zdGF0dXM7CiAJCXJ4X2J5dGVzID0gcnhfZGVzYy0+ZGF0YV9zaXplIC0gTVZQUDJfTUhfU0laRTsKKwkJcGh5c19hZGRyID0gcnhfZGVzYy0+YnVmX3BoeXNfYWRkcjsKIAogCQlibSA9IG12cHAyX2JtX2Nvb2tpZV9idWlsZChyeF9kZXNjKTsKIAkJcG9vbCA9IG12cHAyX2JtX2Nvb2tpZV9wb29sX2dldChibSk7CkBAIC01MTI4LDggKzUxMzcsMTAgQEAKIAkJICogY29tcHJpc2VkIGJ5IHRoZSBSWCBkZXNjcmlwdG9yLgogCQkgKi8KIAkJaWYgKHJ4X3N0YXR1cyAmIE1WUFAyX1JYRF9FUlJfU1VNTUFSWSkgeworCQllcnJfZHJvcF9mcmFtZToKIAkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQltdnBwMl9yeF9lcnJvcihwb3J0LCByeF9kZXNjKTsKKwkJCS8qIFJldHVybiB0aGUgYnVmZmVyIHRvIHRoZSBwb29sICovCiAJCQltdnBwMl9wb29sX3JlZmlsbChwb3J0LCBibSwgcnhfZGVzYy0+YnVmX3BoeXNfYWRkciwKIAkJCQkJICByeF9kZXNjLT5idWZfY29va2llKTsKIAkJCWNvbnRpbnVlOwpAQCAtNTEzNyw2ICs1MTQ4LDE1IEBACiAKIAkJc2tiID0gKHN0cnVjdCBza19idWZmICopcnhfZGVzYy0+YnVmX2Nvb2tpZTsKIAorCQllcnIgPSBtdnBwMl9yeF9yZWZpbGwocG9ydCwgYm1fcG9vbCwgYm0sIDApOworCQlpZiAoZXJyKSB7CisJCQluZXRkZXZfZXJyKHBvcnQtPmRldiwgImZhaWxlZCB0byByZWZpbGwgQk0gcG9vbHNcbiIpOworCQkJZ290byBlcnJfZHJvcF9mcmFtZTsKKwkJfQorCisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYucGFyZW50LCBwaHlzX2FkZHIsCisJCQkJIGJtX3Bvb2wtPmJ1Zl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCiAJCXJjdmRfcGt0cysrOwogCQlyY3ZkX2J5dGVzICs9IHJ4X2J5dGVzOwogCQlhdG9taWNfaW5jKCZibV9wb29sLT5pbl91c2UpOwpAQCAtNTE0NywxMiArNTE2Nyw2IEBACiAJCW12cHAyX3J4X2NzdW0ocG9ydCwgcnhfc3RhdHVzLCBza2IpOwogCiAJCW5hcGlfZ3JvX3JlY2VpdmUoJnBvcnQtPm5hcGksIHNrYik7Ci0KLQkJZXJyID0gbXZwcDJfcnhfcmVmaWxsKHBvcnQsIGJtX3Bvb2wsIGJtLCAwKTsKLQkJaWYgKGVycikgewotCQkJbmV0ZGV2X2Vycihwb3J0LT5kZXYsICJmYWlsZWQgdG8gcmVmaWxsIEJNIHBvb2xzXG4iKTsKLQkJCXJ4X2ZpbGxlZC0tOwotCQl9CiAJfQogCiAJaWYgKHJjdmRfcGt0cykgewpAQCAtNTE2Niw3ICs1MTgwLDcgQEAKIAogCS8qIFVwZGF0ZSBSeCBxdWV1ZSBtYW5hZ2VtZW50IGNvdW50ZXJzICovCiAJd21iKCk7Ci0JbXZwcDJfcnhxX3N0YXR1c191cGRhdGUocG9ydCwgcnhxLT5pZCwgcnhfdG9kbywgcnhfZmlsbGVkKTsKKwltdnBwMl9yeHFfc3RhdHVzX3VwZGF0ZShwb3J0LCByeHEtPmlkLCByeF9kb25lLCByeF9kb25lKTsKIAogCXJldHVybiByeF90b2RvOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9jbWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvY21kLmMKaW5kZXggMjE3N2U1Ni4uZDQ4ZDU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9jbWQuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2NtZC5jCkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogCQlpZiAoIShzbXAtPm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0xJRF9ST1VURUQgJiYKIAkJICAgICAgc21wLT5tZXRob2QgPT0gSUJfTUdNVF9NRVRIT0RfR0VUKSB8fCBuZXR3b3JrX3ZpZXcpIHsKIAkJCW1seDRfZXJyKGRldiwgIlVucHJpdmlsZWdlZCBzbGF2ZSAlZCBpcyB0cnlpbmcgdG8gZXhlY3V0ZSBhIFN1Ym5ldCBNR01UIE1BRCwgY2xhc3MgMHgleCwgbWV0aG9kIDB4JXgsIHZpZXc9JXMgZm9yIGF0dHIgMHgleC4gUmVqZWN0aW5nXG4iLAotCQkJCSBzbGF2ZSwgc21wLT5tZXRob2QsIHNtcC0+bWdtdF9jbGFzcywKKwkJCQkgc2xhdmUsIHNtcC0+bWdtdF9jbGFzcywgc21wLT5tZXRob2QsCiAJCQkJIG5ldHdvcmtfdmlldyA/ICJOZXR3b3JrIiA6ICJIb3N0IiwKIAkJCQkgYmUxNl90b19jcHUoc21wLT5hdHRyX2lkKSk7CiAJCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9jbG9jay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9jbG9jay5jCmluZGV4IDhhMDgzZDcuLjAzOGY5Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fY2xvY2suYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2Nsb2NrLmMKQEAgLTI0Miw2ICsyNDIsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU2NCBucywgemVybyA9IDA7CiAKKwkvKiBtbHg0X2VuX2luaXRfdGltZXN0YW1wIGlzIGNhbGxlZCBmb3IgZWFjaCBuZXRkZXYuCisJICogbWRldi0+cHRwX2Nsb2NrIGlzIGNvbW1vbiBmb3IgYWxsIHBvcnRzLCBza2lwIGluaXRpYWxpemF0aW9uIGlmCisJICogd2FzIGRvbmUgZm9yIG90aGVyIHBvcnQuCisJICovCisJaWYgKG1kZXYtPnB0cF9jbG9jaykKKwkJcmV0dXJuOworCiAJcndsb2NrX2luaXQoJm1kZXYtPmNsb2NrX2xvY2spOwogCiAJbWVtc2V0KCZtZGV2LT5jeWNsZXMsIDAsIHNpemVvZihtZGV2LT5jeWNsZXMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9tYWluLmMKaW5kZXggMDA1ZjkxMC4uZTBlYzI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9tYWluLmMKQEAgLTIzMiw5ICsyMzIsNiBAQAogCQlpZiAobWRldi0+cG5kZXZbaV0pCiAJCQltbHg0X2VuX2Rlc3Ryb3lfbmV0ZGV2KG1kZXYtPnBuZGV2W2ldKTsKIAotCWlmIChtZGV2LT5kZXYtPmNhcHMuZmxhZ3MyICYgTUxYNF9ERVZfQ0FQX0ZMQUcyX1RTKQotCQltbHg0X2VuX3JlbW92ZV90aW1lc3RhbXAobWRldik7Ci0KIAlmbHVzaF93b3JrcXVldWUobWRldi0+d29ya3F1ZXVlKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShtZGV2LT53b3JrcXVldWUpOwogCSh2b2lkKSBtbHg0X21yX2ZyZWUoZGV2LCAmbWRldi0+bXIpOwpAQCAtMzIwLDEwICszMTcsNiBAQAogCW1seDRfZm9yZWFjaF9wb3J0KGksIGRldiwgTUxYNF9QT1JUX1RZUEVfRVRIKQogCQltZGV2LT5wb3J0X2NudCsrOwogCi0JLyogSW5pdGlhbGl6ZSB0aW1lIHN0YW1wIG1lY2hhbmlzbSAqLwotCWlmIChtZGV2LT5kZXYtPmNhcHMuZmxhZ3MyICYgTUxYNF9ERVZfQ0FQX0ZMQUcyX1RTKQotCQltbHg0X2VuX2luaXRfdGltZXN0YW1wKG1kZXYpOwotCiAJLyogU2V0IGRlZmF1bHQgbnVtYmVyIG9mIFJYIHJpbmdzKi8KIAltbHg0X2VuX3NldF9udW1fcnhfcmluZ3MobWRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jCmluZGV4IDg4NmUxYmMuLjc4NjlmOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9uZXRkZXYuYwpAQCAtMjA3Miw2ICsyMDcyLDkgQEAKIAkvKiBmbHVzaCBhbnkgcGVuZGluZyB0YXNrIGZvciB0aGlzIG5ldGRldiAqLwogCWZsdXNoX3dvcmtxdWV1ZShtZGV2LT53b3JrcXVldWUpOwogCisJaWYgKG1kZXYtPmRldi0+Y2Fwcy5mbGFnczIgJiBNTFg0X0RFVl9DQVBfRkxBRzJfVFMpCisJCW1seDRfZW5fcmVtb3ZlX3RpbWVzdGFtcChtZGV2KTsKKwogCS8qIERldGFjaCB0aGUgbmV0ZGV2IHNvIHRhc2tzIHdvdWxkIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBpdCAqLwogCW11dGV4X2xvY2soJm1kZXYtPnN0YXRlX2xvY2spOwogCW1kZXYtPnBuZGV2W3ByaXYtPnBvcnRdID0gTlVMTDsKQEAgLTMwNTgsOSArMzA2MSwxMiBAQAogCX0KIAlxdWV1ZV9kZWxheWVkX3dvcmsobWRldi0+d29ya3F1ZXVlLCAmcHJpdi0+c3RhdHNfdGFzaywgU1RBVFNfREVMQVkpOwogCisJLyogSW5pdGlhbGl6ZSB0aW1lIHN0YW1wIG1lY2hhbmlzbSAqLwogCWlmIChtZGV2LT5kZXYtPmNhcHMuZmxhZ3MyICYgTUxYNF9ERVZfQ0FQX0ZMQUcyX1RTKQotCQlxdWV1ZV9kZWxheWVkX3dvcmsobWRldi0+d29ya3F1ZXVlLCAmcHJpdi0+c2VydmljZV90YXNrLAotCQkJCSAgIFNFUlZJQ0VfVEFTS19ERUxBWSk7CisJCW1seDRfZW5faW5pdF90aW1lc3RhbXAobWRldik7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsobWRldi0+d29ya3F1ZXVlLCAmcHJpdi0+c2VydmljZV90YXNrLAorCQkJICAgU0VSVklDRV9UQVNLX0RFTEFZKTsKIAogCW1seDRfZW5fc2V0X3N0YXRzX2JpdG1hcChtZGV2LT5kZXYsICZwcml2LT5zdGF0c19iaXRtYXAsCiAJCQkJIG1kZXYtPnByb2ZpbGUucHJvZltwcml2LT5wb3J0XS5yeF9wcHAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5jCmluZGV4IDg1ZjFiMWUuLjMxYzQ5MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5jCkBAIC04OTIsOSArODkyLDEwIEBACiAJCWRldi0+Y2Fwcy5xcDFfcHJveHlbaSAtIDFdID0gZnVuY19jYXAucXAxX3Byb3h5X3FwbjsKIAkJZGV2LT5jYXBzLnBvcnRfbWFza1tpXSA9IGRldi0+Y2Fwcy5wb3J0X3R5cGVbaV07CiAJCWRldi0+Y2Fwcy5waHlzX3BvcnRfaWRbaV0gPSBmdW5jX2NhcC5waHlzX3BvcnRfaWQ7Ci0JCWlmIChtbHg0X2dldF9zbGF2ZV9wa2V5X2dpZF90YmxfbGVuKGRldiwgaSwKLQkJCQkJCSAgICAmZGV2LT5jYXBzLmdpZF90YWJsZV9sZW5baV0sCi0JCQkJCQkgICAgJmRldi0+Y2Fwcy5wa2V5X3RhYmxlX2xlbltpXSkpCisJCWVyciA9IG1seDRfZ2V0X3NsYXZlX3BrZXlfZ2lkX3RibF9sZW4oZGV2LCBpLAorCQkJCQkJICAgICAgJmRldi0+Y2Fwcy5naWRfdGFibGVfbGVuW2ldLAorCQkJCQkJICAgICAgJmRldi0+Y2Fwcy5wa2V5X3RhYmxlX2xlbltpXSk7CisJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9tZW07CiAJfQogCkBAIC05MDYsNiArOTA3LDcgQEAKIAkJCSBkZXYtPmNhcHMudWFyX3BhZ2Vfc2l6ZSAqIGRldi0+Y2Fwcy5udW1fdWFycywKIAkJCSAodW5zaWduZWQgbG9uZyBsb25nKQogCQkJIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZXJzaXN0LT5wZGV2LCAyKSk7CisJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX21lbTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcmVzb3VyY2VfdHJhY2tlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9yZXNvdXJjZV90cmFja2VyLmMKaW5kZXggOTgxM2QzNC4uY2FkNmM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9yZXNvdXJjZV90cmFja2VyLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9yZXNvdXJjZV90cmFja2VyLmMKQEAgLTQzMDYsOSArNDMwNiwxMCBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAljdHJsID0gKHN0cnVjdCBtbHg0X25ldF90cmFuc19ydWxlX2h3X2N0cmwgKilpbmJveC0+YnVmOwotCWN0cmwtPnBvcnQgPSBtbHg0X3NsYXZlX2NvbnZlcnRfcG9ydChkZXYsIHNsYXZlLCBjdHJsLT5wb3J0KTsKLQlpZiAoY3RybC0+cG9ydCA8PSAwKQorCWVyciA9IG1seDRfc2xhdmVfY29udmVydF9wb3J0KGRldiwgc2xhdmUsIGN0cmwtPnBvcnQpOworCWlmIChlcnIgPD0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CisJY3RybC0+cG9ydCA9IGVycjsKIAlxcG4gPSBiZTMyX3RvX2NwdShjdHJsLT5xcG4pICYgMHhmZmZmZmY7CiAJZXJyID0gZ2V0X3JlcyhkZXYsIHNsYXZlLCBxcG4sIFJFU19RUCwgJnJxcCk7CiAJaWYgKGVycikgewpAQCAtNDk1MiwyNiArNDk1Myw0MSBAQAogCXN0cnVjdCByZXNfY291bnRlciAqY291bnRlcjsKIAlzdHJ1Y3QgcmVzX2NvdW50ZXIgKnRtcDsKIAlpbnQgZXJyOwotCWludCBpbmRleDsKKwlpbnQgKmNvdW50ZXJzX2FyciA9IE5VTEw7CisJaW50IGksIGo7CiAKIAllcnIgPSBtb3ZlX2FsbF9idXN5KGRldiwgc2xhdmUsIFJFU19DT1VOVEVSKTsKIAlpZiAoZXJyKQogCQltbHg0X3dhcm4oZGV2LCAicmVtX3NsYXZlX2NvdW50ZXJzOiBDb3VsZCBub3QgbW92ZSBhbGwgY291bnRlcnMgLSB0b28gYnVzeSBmb3Igc2xhdmUgJWRcbiIsCiAJCQkgIHNsYXZlKTsKIAotCXNwaW5fbG9ja19pcnEobWx4NF90bG9jayhkZXYpKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY291bnRlciwgdG1wLCBjb3VudGVyX2xpc3QsIGNvbS5saXN0KSB7Ci0JCWlmIChjb3VudGVyLT5jb20ub3duZXIgPT0gc2xhdmUpIHsKLQkJCWluZGV4ID0gY291bnRlci0+Y29tLnJlc19pZDsKLQkJCXJiX2VyYXNlKCZjb3VudGVyLT5jb20ubm9kZSwKLQkJCQkgJnRyYWNrZXItPnJlc190cmVlW1JFU19DT1VOVEVSXSk7Ci0JCQlsaXN0X2RlbCgmY291bnRlci0+Y29tLmxpc3QpOwotCQkJa2ZyZWUoY291bnRlcik7Ci0JCQlfX21seDRfY291bnRlcl9mcmVlKGRldiwgaW5kZXgpOworCWNvdW50ZXJzX2FyciA9IGttYWxsb2NfYXJyYXkoZGV2LT5jYXBzLm1heF9jb3VudGVycywKKwkJCQkgICAgIHNpemVvZigqY291bnRlcnNfYXJyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb3VudGVyc19hcnIpCisJCXJldHVybjsKKworCWRvIHsKKwkJaSA9IDA7CisJCWogPSAwOworCQlzcGluX2xvY2tfaXJxKG1seDRfdGxvY2soZGV2KSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb3VudGVyLCB0bXAsIGNvdW50ZXJfbGlzdCwgY29tLmxpc3QpIHsKKwkJCWlmIChjb3VudGVyLT5jb20ub3duZXIgPT0gc2xhdmUpIHsKKwkJCQljb3VudGVyc19hcnJbaSsrXSA9IGNvdW50ZXItPmNvbS5yZXNfaWQ7CisJCQkJcmJfZXJhc2UoJmNvdW50ZXItPmNvbS5ub2RlLAorCQkJCQkgJnRyYWNrZXItPnJlc190cmVlW1JFU19DT1VOVEVSXSk7CisJCQkJbGlzdF9kZWwoJmNvdW50ZXItPmNvbS5saXN0KTsKKwkJCQlrZnJlZShjb3VudGVyKTsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnEobWx4NF90bG9jayhkZXYpKTsKKworCQl3aGlsZSAoaiA8IGkpIHsKKwkJCV9fbWx4NF9jb3VudGVyX2ZyZWUoZGV2LCBjb3VudGVyc19hcnJbaisrXSk7CiAJCQltbHg0X3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBzbGF2ZSwgUkVTX0NPVU5URVIsIDEsIDApOwogCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycShtbHg0X3Rsb2NrKGRldikpOworCX0gd2hpbGUgKGkpOworCisJa2ZyZWUoY291bnRlcnNfYXJyKTsKIH0KIAogc3RhdGljIHZvaWQgcmVtX3NsYXZlX3hyY2RucyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNsYXZlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaAppbmRleCBmMmFlNjJkLi4yMmU3MmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaApAQCAtMzM0LDkgKzMzNCwxNSBAQAogCiAjZGVmaW5lIE1MWDVFX1RYX1NLQl9DQihfX3NrYikgKChzdHJ1Y3QgbWx4NWVfdHhfc2tiX2NiICopX19za2ItPmNiKQogCitlbnVtIG1seDVlX2RtYV9tYXBfdHlwZSB7CisJTUxYNUVfRE1BX01BUF9TSU5HTEUsCisJTUxYNUVfRE1BX01BUF9QQUdFCit9OworCiBzdHJ1Y3QgbWx4NWVfc3FfZG1hIHsKLQlkbWFfYWRkcl90IGFkZHI7Ci0JdTMyICAgICAgICBzaXplOworCWRtYV9hZGRyX3QgICAgICAgICAgICAgIGFkZHI7CisJdTMyICAgICAgICAgICAgICAgICAgICAgc2l6ZTsKKwllbnVtIG1seDVlX2RtYV9tYXBfdHlwZSB0eXBlOwogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwppbmRleCA1ZmM0ZDJkLi4xZTUyZGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMKQEAgLTEzMzIsNiArMTMzMiw0MiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgbWx4NWVfcmVmcmVzaF90aXJfc2VsZl9sb29wYmFja19lbmFibGUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsCisJCQkJCQkgIHUzMiB0aXJuKQoreworCXZvaWQgKmluOworCWludCBpbmxlbjsKKwlpbnQgZXJyOworCisJaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKG1vZGlmeV90aXJfaW4pOworCWluID0gbWx4NV92emFsbG9jKGlubGVuKTsKKwlpZiAoIWluKQorCQlyZXR1cm4gLUVOT01FTTsKKworCU1MWDVfU0VUKG1vZGlmeV90aXJfaW4sIGluLCBiaXRtYXNrLnNlbGZfbGJfZW4sIDEpOworCisJZXJyID0gbWx4NV9jb3JlX21vZGlmeV90aXIobWRldiwgdGlybiwgaW4sIGlubGVuKTsKKworCWt2ZnJlZShpbik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1seDVlX3JlZnJlc2hfdGlyc19zZWxmX2xvb3BiYWNrX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKK3sKKwlpbnQgZXJyOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1MWDVFX05VTV9UVDsgaSsrKSB7CisJCWVyciA9IG1seDVlX3JlZnJlc2hfdGlyX3NlbGZfbG9vcGJhY2tfZW5hYmxlKHByaXYtPm1kZXYsCisJCQkJCQkJICAgICBwcml2LT50aXJuW2ldKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbWx4NWVfc2V0X2Rldl9wb3J0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTEzNzYsNiArMTQxMiwxMyBAQAogCQlnb3RvIGVycl9jbGVhcl9zdGF0ZV9vcGVuZWRfZmxhZzsKIAl9CiAKKwllcnIgPSBtbHg1ZV9yZWZyZXNoX3RpcnNfc2VsZl9sb29wYmFja19lbmFibGUocHJpdik7CisJaWYgKGVycikgeworCQluZXRkZXZfZXJyKG5ldGRldiwgIiVzOiBtbHg1ZV9yZWZyZXNoX3RpcnNfc2VsZl9sb29wYmFja19lbmFibGUgZmFpbGVkLCAlZFxuIiwKKwkJCSAgIF9fZnVuY19fLCBlcnIpOworCQlnb3RvIGVycl9jbG9zZV9jaGFubmVsczsKKwl9CisKIAltbHg1ZV91cGRhdGVfY2Fycmllcihwcml2KTsKIAltbHg1ZV9yZWRpcmVjdF9ycXRzKHByaXYpOwogCkBAIC0xMzgzLDYgKzE0MjYsOCBAQAogCiAJcmV0dXJuIDA7CiAKK2Vycl9jbG9zZV9jaGFubmVsczoKKwltbHg1ZV9jbG9zZV9jaGFubmVscyhwcml2KTsKIGVycl9jbGVhcl9zdGF0ZV9vcGVuZWRfZmxhZzoKIAljbGVhcl9iaXQoTUxYNUVfU1RBVEVfT1BFTkVELCAmcHJpdi0+c3RhdGUpOwogCXJldHVybiBlcnI7CkBAIC0xODU2LDYgKzE5MDEsOCBAQAogCiAJbWx4NV9xdWVyeV9wb3J0X21heF9tdHUobWRldiwgJm1heF9tdHUsIDEpOwogCisJbWF4X210dSA9IE1MWDVFX0hXMlNXX01UVShtYXhfbXR1KTsKKwogCWlmIChuZXdfbXR1ID4gbWF4X210dSkgewogCQluZXRkZXZfZXJyKG5ldGRldiwKIAkJCSAgICIlczogQmFkIE1UVSAoJWQpID4gKCVkKSBNYXhcbiIsCkBAIC0xOTA5LDYgKzE5NTYsOSBAQAogCQkJICAgICAgICJOb3QgY3JlYXRpbmcgbmV0IGRldmljZSwgc29tZSByZXF1aXJlZCBkZXZpY2UgY2FwYWJpbGl0aWVzIGFyZSBtaXNzaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CisJaWYgKCFNTFg1X0NBUF9FVEgobWRldiwgc2VsZl9sYl9lbl9tb2RpZmlhYmxlKSkKKwkJbWx4NV9jb3JlX3dhcm4obWRldiwgIlNlbGYgbG9vcCBiYWNrIHByZXZlbnRpb24gaXMgbm90IHN1cHBvcnRlZFxuIik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3R4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYwppbmRleCBjZDhmODVhLi4xMzQxYjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdHguYwpAQCAtNjEsNDEgKzYxLDQ5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBtbHg1ZV9kbWFfcG9wX2xhc3RfcHVzaGVkKHN0cnVjdCBtbHg1ZV9zcSAqc3EsIGRtYV9hZGRyX3QgKmFkZHIsCi0JCQkJICAgICAgdTMyICpzaXplKQorc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3R4X2RtYV91bm1hcChzdHJ1Y3QgZGV2aWNlICpwZGV2LAorCQkJCSAgICAgIHN0cnVjdCBtbHg1ZV9zcV9kbWEgKmRtYSkKIHsKLQlzcS0+ZG1hX2ZpZm9fcGMtLTsKLQkqYWRkciA9IHNxLT5kbWFfZmlmb1tzcS0+ZG1hX2ZpZm9fcGMgJiBzcS0+ZG1hX2ZpZm9fbWFza10uYWRkcjsKLQkqc2l6ZSA9IHNxLT5kbWFfZmlmb1tzcS0+ZG1hX2ZpZm9fcGMgJiBzcS0+ZG1hX2ZpZm9fbWFza10uc2l6ZTsKKwlzd2l0Y2ggKGRtYS0+dHlwZSkgeworCWNhc2UgTUxYNUVfRE1BX01BUF9TSU5HTEU6CisJCWRtYV91bm1hcF9zaW5nbGUocGRldiwgZG1hLT5hZGRyLCBkbWEtPnNpemUsIERNQV9UT19ERVZJQ0UpOworCQlicmVhazsKKwljYXNlIE1MWDVFX0RNQV9NQVBfUEFHRToKKwkJZG1hX3VubWFwX3BhZ2UocGRldiwgZG1hLT5hZGRyLCBkbWEtPnNpemUsIERNQV9UT19ERVZJQ0UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OQ0UodHJ1ZSwgIm1seDVlX3R4X2RtYV91bm1hcCB1bmtub3duIERNQSB0eXBlIVxuIik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfZG1hX3B1c2goc3RydWN0IG1seDVlX3NxICpzcSwKKwkJCQkgIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkgIHUzMiBzaXplLAorCQkJCSAgZW51bSBtbHg1ZV9kbWFfbWFwX3R5cGUgbWFwX3R5cGUpCit7CisJc3EtPmRtYV9maWZvW3NxLT5kbWFfZmlmb19wYyAmIHNxLT5kbWFfZmlmb19tYXNrXS5hZGRyID0gYWRkcjsKKwlzcS0+ZG1hX2ZpZm9bc3EtPmRtYV9maWZvX3BjICYgc3EtPmRtYV9maWZvX21hc2tdLnNpemUgPSBzaXplOworCXNxLT5kbWFfZmlmb1tzcS0+ZG1hX2ZpZm9fcGMgJiBzcS0+ZG1hX2ZpZm9fbWFza10udHlwZSA9IG1hcF90eXBlOworCXNxLT5kbWFfZmlmb19wYysrOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtbHg1ZV9zcV9kbWEgKm1seDVlX2RtYV9nZXQoc3RydWN0IG1seDVlX3NxICpzcSwgdTMyIGkpCit7CisJcmV0dXJuICZzcS0+ZG1hX2ZpZm9baSAmIHNxLT5kbWFfZmlmb19tYXNrXTsKIH0KIAogc3RhdGljIHZvaWQgbWx4NWVfZG1hX3VubWFwX3dxZV9lcnIoc3RydWN0IG1seDVlX3NxICpzcSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlkbWFfYWRkcl90IGFkZHI7Ci0JdTMyIHNpemU7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUxYNUVfVFhfU0tCX0NCKHNrYiktPm51bV9kbWE7IGkrKykgewotCQltbHg1ZV9kbWFfcG9wX2xhc3RfcHVzaGVkKHNxLCAmYWRkciwgJnNpemUpOwotCQlkbWFfdW5tYXBfc2luZ2xlKHNxLT5wZGV2LCBhZGRyLCBzaXplLCBETUFfVE9fREVWSUNFKTsKKwkJc3RydWN0IG1seDVlX3NxX2RtYSAqbGFzdF9wdXNoZWRfZG1hID0KKwkJCW1seDVlX2RtYV9nZXQoc3EsIC0tc3EtPmRtYV9maWZvX3BjKTsKKworCQltbHg1ZV90eF9kbWFfdW5tYXAoc3EtPnBkZXYsIGxhc3RfcHVzaGVkX2RtYSk7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfZG1hX3B1c2goc3RydWN0IG1seDVlX3NxICpzcSwgZG1hX2FkZHJfdCBhZGRyLAotCQkJCSAgdTMyIHNpemUpCi17Ci0Jc3EtPmRtYV9maWZvW3NxLT5kbWFfZmlmb19wYyAmIHNxLT5kbWFfZmlmb19tYXNrXS5hZGRyID0gYWRkcjsKLQlzcS0+ZG1hX2ZpZm9bc3EtPmRtYV9maWZvX3BjICYgc3EtPmRtYV9maWZvX21hc2tdLnNpemUgPSBzaXplOwotCXNxLT5kbWFfZmlmb19wYysrOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfZG1hX2dldChzdHJ1Y3QgbWx4NWVfc3EgKnNxLCB1MzIgaSwgZG1hX2FkZHJfdCAqYWRkciwKLQkJCQkgdTMyICpzaXplKQotewotCSphZGRyID0gc3EtPmRtYV9maWZvW2kgJiBzcS0+ZG1hX2ZpZm9fbWFza10uYWRkcjsKLQkqc2l6ZSA9IHNxLT5kbWFfZmlmb1tpICYgc3EtPmRtYV9maWZvX21hc2tdLnNpemU7Ci19Ci0KIHUxNiBtbHg1ZV9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICAgIHZvaWQgKmFjY2VsX3ByaXYsIHNlbGVjdF9xdWV1ZV9mYWxsYmFja190IGZhbGxiYWNrKQogewpAQCAtMTE4LDggKzEyNiwxNSBAQAogCSAqLwogI2RlZmluZSBNTFg1RV9NSU5fSU5MSU5FIEVUSF9ITEVOCiAKLQlpZiAoYmYgJiYgKHNrYl9oZWFkbGVuKHNrYikgPD0gc3EtPm1heF9pbmxpbmUpKQotCQlyZXR1cm4gc2tiX2hlYWRsZW4oc2tiKTsKKwlpZiAoYmYpIHsKKwkJdTE2IGlocyA9IHNrYl9oZWFkbGVuKHNrYik7CisKKwkJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCisJCQlpaHMgKz0gVkxBTl9ITEVOOworCisJCWlmIChpaHMgPD0gc3EtPm1heF9pbmxpbmUpCisJCQlyZXR1cm4gc2tiX2hlYWRsZW4oc2tiKTsKKwl9CiAKIAlyZXR1cm4gTUxYNUVfTUlOX0lOTElORTsKIH0KQEAgLTIxOCw3ICsyMzMsNyBAQAogCQlkc2VnLT5sa2V5ICAgICAgID0gc3EtPm1rZXlfYmU7CiAJCWRzZWctPmJ5dGVfY291bnQgPSBjcHVfdG9fYmUzMihoZWFkbGVuKTsKIAotCQltbHg1ZV9kbWFfcHVzaChzcSwgZG1hX2FkZHIsIGhlYWRsZW4pOworCQltbHg1ZV9kbWFfcHVzaChzcSwgZG1hX2FkZHIsIGhlYWRsZW4sIE1MWDVFX0RNQV9NQVBfU0lOR0xFKTsKIAkJTUxYNUVfVFhfU0tCX0NCKHNrYiktPm51bV9kbWErKzsKIAogCQlkc2VnKys7CkBAIC0yMzcsNyArMjUyLDcgQEAKIAkJZHNlZy0+bGtleSAgICAgICA9IHNxLT5ta2V5X2JlOwogCQlkc2VnLT5ieXRlX2NvdW50ID0gY3B1X3RvX2JlMzIoZnN6KTsKIAotCQltbHg1ZV9kbWFfcHVzaChzcSwgZG1hX2FkZHIsIGZzeik7CisJCW1seDVlX2RtYV9wdXNoKHNxLCBkbWFfYWRkciwgZnN6LCBNTFg1RV9ETUFfTUFQX1BBR0UpOwogCQlNTFg1RV9UWF9TS0JfQ0Ioc2tiKS0+bnVtX2RtYSsrOwogCiAJCWRzZWcrKzsKQEAgLTM1MywxMyArMzY4LDEwIEBACiAJCQl9CiAKIAkJCWZvciAoaiA9IDA7IGogPCBNTFg1RV9UWF9TS0JfQ0Ioc2tiKS0+bnVtX2RtYTsgaisrKSB7Ci0JCQkJZG1hX2FkZHJfdCBhZGRyOwotCQkJCXUzMiBzaXplOworCQkJCXN0cnVjdCBtbHg1ZV9zcV9kbWEgKmRtYSA9CisJCQkJCW1seDVlX2RtYV9nZXQoc3EsIGRtYV9maWZvX2NjKyspOwogCi0JCQkJbWx4NWVfZG1hX2dldChzcSwgZG1hX2ZpZm9fY2MsICZhZGRyLCAmc2l6ZSk7Ci0JCQkJZG1hX2ZpZm9fY2MrKzsKLQkJCQlkbWFfdW5tYXBfc2luZ2xlKHNxLT5wZGV2LCBhZGRyLCBzaXplLAotCQkJCQkJIERNQV9UT19ERVZJQ0UpOworCQkJCW1seDVlX3R4X2RtYV91bm1hcChzcS0+cGRldiwgZG1hKTsKIAkJCX0KIAogCQkJbnBrdHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25hdHNlbWkvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmF0c2VtaS9uYXRzZW1pLmMKaW5kZXggYjgzZjdjMC4uMTIyYzJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmF0c2VtaS9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmF0c2VtaS9uYXRzZW1pLmMKQEAgLTE5MzcsNiArMTkzNywxMiBAQAogCQkJCWJyZWFrOyAvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kLiAqLwogCQkJbnAtPnJ4X2RtYVtlbnRyeV0gPSBwY2lfbWFwX3NpbmdsZShucC0+cGNpX2RldiwKIAkJCQlza2ItPmRhdGEsIGJ1ZmxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IobnAtPnBjaV9kZXYsCisJCQkJCQkgIG5wLT5yeF9kbWFbZW50cnldKSkgeworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJbnAtPnJ4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCQkJCWJyZWFrOyAvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kLiAqLworCQkJfQogCQkJbnAtPnJ4X3JpbmdbZW50cnldLmFkZHIgPSBjcHVfdG9fbGUzMihucC0+cnhfZG1hW2VudHJ5XSk7CiAJCX0KIAkJbnAtPnJ4X3JpbmdbZW50cnldLmNtZF9zdGF0dXMgPSBjcHVfdG9fbGUzMihucC0+cnhfYnVmX3N6KTsKQEAgLTIwOTMsNiArMjA5OSwxMiBAQAogCW5wLT50eF9za2J1ZmZbZW50cnldID0gc2tiOwogCW5wLT50eF9kbWFbZW50cnldID0gcGNpX21hcF9zaW5nbGUobnAtPnBjaV9kZXYsCiAJCQkJc2tiLT5kYXRhLHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKG5wLT5wY2lfZGV2LCBucC0+dHhfZG1hW2VudHJ5XSkpIHsKKwkJbnAtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CiAKIAlucC0+dHhfcmluZ1tlbnRyeV0uYWRkciA9IGNwdV90b19sZTMyKG5wLT50eF9kbWFbZW50cnldKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmMKaW5kZXggYjE1OWVmOC4uMDU3NjY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvbHBjX2V0aC5jCkBAIC0xMzI2LDcgKzEzMjYsNyBAQAogCS8qIEdldCBwbGF0Zm9ybSByZXNvdXJjZXMgKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCghcmVzKSB8fCAoaXJxIDwgMCkgfHwgKGlycSA+PSBOUl9JUlFTKSkgeworCWlmICghcmVzIHx8IGlycSA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3IgZ2V0dGluZyByZXNvdXJjZXMuXG4iKTsKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9leGl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkLmgKaW5kZXggYWMxN2Q4Ni4uMTI5MmMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWQuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZC5oCkBAIC0yOTksNiArMjk5LDcgQEAKIAogCS8qIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGludGVycnVwdHMgYXJlIGVuYWJsZWQgb3Igbm90Ki8KIAlib29sCQkJCWJfaW50X2VuYWJsZWQ7CisJYm9vbAkJCQliX2ludF9yZXF1ZXN0ZWQ7CiAKIAlzdHJ1Y3QgcWVkX21jcF9pbmZvCQkqbWNwX2luZm87CiAKQEAgLTQ5MSw2ICs0OTIsOCBAQAogCQkgICB1MzIgaW5wdXRfbGVuLCB1OCAqaW5wdXRfYnVmLAogCQkgICB1MzIgbWF4X3NpemUsIHU4ICp1bnppcF9idWYpOwogCitpbnQgcWVkX3Nsb3dwYXRoX2lycV9yZXEoc3RydWN0IHFlZF9od2ZuICpod2ZuKTsKKwogI2RlZmluZSBRRURfRVRIX0lOVEVSRkFDRV9WRVJTSU9OICAgICAgIDMwMAogCiAjZW5kaWYgLyogX1FFRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9kZXYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jCmluZGV4IDgwM2IxOTAuLjgxN2JiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jCkBAIC0xMzg1LDUyICsxMzg1LDYzIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdTMyIHFlZF9od19iYXJfc2l6ZShzdHJ1Y3QgcWVkX2RldiAqY2RldiwKLQkJCSAgIHU4IGJhcl9pZCkKK3N0YXRpYyB1MzIgcWVkX2h3X2Jhcl9zaXplKHN0cnVjdCBxZWRfaHdmbgkqcF9od2ZuLAorCQkJICAgdTgJCQliYXJfaWQpCiB7Ci0JdTMyIHNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGNkZXYtPnBkZXYsIChiYXJfaWQgPiAwKSA/IDIgOiAwKTsKKwl1MzIgYmFyX3JlZyA9IChiYXJfaWQgPT0gMCA/IFBHTFVFX0JfUkVHX1BGX0JBUjBfU0laRQorCQkgICAgICAgOiBQR0xVRV9CX1JFR19QRl9CQVIxX1NJWkUpOworCXUzMiB2YWwgPSBxZWRfcmQocF9od2ZuLCBwX2h3Zm4tPnBfbWFpbl9wdHQsIGJhcl9yZWcpOwogCi0JcmV0dXJuIHNpemUgLyBjZGV2LT5udW1faHdmbnM7CisJLyogR2V0IHRoZSBCQVIgc2l6ZShpbiBLQikgZnJvbSBoYXJkd2FyZSBnaXZlbiB2YWwgKi8KKwlyZXR1cm4gMSA8PCAodmFsICsgMTUpOwogfQogCiBpbnQgcWVkX2h3X3ByZXBhcmUoc3RydWN0IHFlZF9kZXYgKmNkZXYsCiAJCSAgIGludCBwZXJzb25hbGl0eSkKIHsKLQlpbnQgcmMsIGk7CisJc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4gPSBRRURfTEVBRElOR19IV0ZOKGNkZXYpOworCWludCByYzsKIAogCS8qIFN0b3JlIHRoZSBwcmVjb21waWxlZCBpbml0IGRhdGEgcHRycyAqLwogCXFlZF9pbml0X2lyb19hcnJheShjZGV2KTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGZpcnN0IGh3Zm4gLSB3aWxsIGxlYXJuIG51bWJlciBvZiBod2ZucyAqLwotCXJjID0gcWVkX2h3X3ByZXBhcmVfc2luZ2xlKCZjZGV2LT5od2Zuc1swXSwgY2Rldi0+cmVndmlldywKKwlyYyA9IHFlZF9od19wcmVwYXJlX3NpbmdsZShwX2h3Zm4sCisJCQkJICAgY2Rldi0+cmVndmlldywKIAkJCQkgICBjZGV2LT5kb29yYmVsbHMsIHBlcnNvbmFsaXR5KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCXBlcnNvbmFsaXR5ID0gY2Rldi0+aHdmbnNbMF0uaHdfaW5mby5wZXJzb25hbGl0eTsKKwlwZXJzb25hbGl0eSA9IHBfaHdmbi0+aHdfaW5mby5wZXJzb25hbGl0eTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHJlc3Qgb2YgdGhlIGh3Zm5zICovCi0JZm9yIChpID0gMTsgaSA8IGNkZXYtPm51bV9od2ZuczsgaSsrKSB7CisJaWYgKGNkZXYtPm51bV9od2ZucyA+IDEpIHsKIAkJdm9pZCBfX2lvbWVtICpwX3JlZ3ZpZXcsICpwX2Rvb3JiZWxsOworCQl1OCBfX2lvbWVtICphZGRyOwogCi0JCXBfcmVndmlldyA9ICBjZGV2LT5yZWd2aWV3ICsKLQkJCSAgICAgaSAqIHFlZF9od19iYXJfc2l6ZShjZGV2LCAwKTsKLQkJcF9kb29yYmVsbCA9IGNkZXYtPmRvb3JiZWxscyArCi0JCQkgICAgIGkgKiBxZWRfaHdfYmFyX3NpemUoY2RldiwgMSk7Ci0JCXJjID0gcWVkX2h3X3ByZXBhcmVfc2luZ2xlKCZjZGV2LT5od2Zuc1tpXSwgcF9yZWd2aWV3LAorCQkvKiBhZGp1c3QgYmFyIG9mZnNldCBmb3Igc2Vjb25kIGVuZ2luZSAqLworCQlhZGRyID0gY2Rldi0+cmVndmlldyArIHFlZF9od19iYXJfc2l6ZShwX2h3Zm4sIDApIC8gMjsKKwkJcF9yZWd2aWV3ID0gYWRkcjsKKworCQkvKiBhZGp1c3QgZG9vcmJlbGwgYmFyIG9mZnNldCBmb3Igc2Vjb25kIGVuZ2luZSAqLworCQlhZGRyID0gY2Rldi0+ZG9vcmJlbGxzICsgcWVkX2h3X2Jhcl9zaXplKHBfaHdmbiwgMSkgLyAyOworCQlwX2Rvb3JiZWxsID0gYWRkcjsKKworCQkvKiBwcmVwYXJlIHNlY29uZCBodyBmdW5jdGlvbiAqLworCQlyYyA9IHFlZF9od19wcmVwYXJlX3NpbmdsZSgmY2Rldi0+aHdmbnNbMV0sIHBfcmVndmlldywKIAkJCQkJICAgcF9kb29yYmVsbCwgcGVyc29uYWxpdHkpOworCisJCS8qIGluIGNhc2Ugb2YgZXJyb3IsIG5lZWQgdG8gZnJlZSB0aGUgcHJldmlvdXNseQorCQkgKiBpbml0aWxpYXplZCBod2ZuIDAuCisJCSAqLwogCQlpZiAocmMpIHsKLQkJCS8qIENsZWFudXAgcHJldmlvdXNseSBpbml0aWFsaXplZCBod2ZucyAqLwotCQkJd2hpbGUgKC0taSA+PSAwKSB7Ci0JCQkJcWVkX2luaXRfZnJlZSgmY2Rldi0+aHdmbnNbaV0pOwotCQkJCXFlZF9tY3BfZnJlZSgmY2Rldi0+aHdmbnNbaV0pOwotCQkJCXFlZF9od19od2ZuX2ZyZWUoJmNkZXYtPmh3Zm5zW2ldKTsKLQkJCX0KLQkJCXJldHVybiByYzsKKwkJCXFlZF9pbml0X2ZyZWUocF9od2ZuKTsKKwkJCXFlZF9tY3BfZnJlZShwX2h3Zm4pOworCQkJcWVkX2h3X2h3Zm5fZnJlZShwX2h3Zm4pOwogCQl9CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiB2b2lkIHFlZF9od19yZW1vdmUoc3RydWN0IHFlZF9kZXYgKmNkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pbnQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2ludC5jCmluZGV4IGRlNTBlODQuLjljYzlkNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2ludC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2ludC5jCkBAIC03ODMsMjIgKzc4MywxNiBAQAogCXFlZF93cihwX2h3Zm4sIHBfcHR0LCBJR1VfUkVHX1BGX0NPTkZJR1VSQVRJT04sIGlndV9wZl9jb25mKTsKIH0KIAotdm9pZCBxZWRfaW50X2lndV9lbmFibGUoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sCi0JCQlzdHJ1Y3QgcWVkX3B0dCAqcF9wdHQsCi0JCQllbnVtIHFlZF9pbnRfbW9kZSBpbnRfbW9kZSkKK2ludCBxZWRfaW50X2lndV9lbmFibGUoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sIHN0cnVjdCBxZWRfcHR0ICpwX3B0dCwKKwkJICAgICAgIGVudW0gcWVkX2ludF9tb2RlIGludF9tb2RlKQogewotCWludCBpOwotCi0JcF9od2ZuLT5iX2ludF9lbmFibGVkID0gMTsKKwlpbnQgcmMsIGk7CiAKIAkvKiBNYXNrIG5vbi1saW5rIGF0dGVudGlvbnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQogCQlxZWRfd3IocF9od2ZuLCBwX3B0dCwKIAkJICAgICAgIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0lHVV9PVVRfMCArIChpIDw8IDIpLCAwKTsKIAotCS8qIEVuYWJsZSBpbnRlcnJ1cHQgR2VuZXJhdGlvbiAqLwotCXFlZF9pbnRfaWd1X2VuYWJsZV9pbnQocF9od2ZuLCBwX3B0dCwgaW50X21vZGUpOwotCiAJLyogQ29uZmlndXJlIEFFVSBzaWduYWwgY2hhbmdlIHRvIHByb2R1Y2UgYXR0ZW50aW9ucyBmb3IgbGluayAqLwogCXFlZF93cihwX2h3Zm4sIHBfcHR0LCBJR1VfUkVHX0xFQURJTkdfRURHRV9MQVRDSCwgMHhmZmYpOwogCXFlZF93cihwX2h3Zm4sIHBfcHR0LCBJR1VfUkVHX1RSQUlMSU5HX0VER0VfTEFUQ0gsIDB4ZmZmKTsKQEAgLTgwOCw2ICs4MDIsMTkgQEAKIAogCS8qIFVubWFzayBBRVUgc2lnbmFscyB0b3dhcmQgSUdVICovCiAJcWVkX3dyKHBfaHdmbiwgcF9wdHQsIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fSUdVLCAweGZmKTsKKwlpZiAoKGludF9tb2RlICE9IFFFRF9JTlRfTU9ERV9JTlRBKSB8fCBJU19MRUFEX0hXRk4ocF9od2ZuKSkgeworCQlyYyA9IHFlZF9zbG93cGF0aF9pcnFfcmVxKHBfaHdmbik7CisJCWlmIChyYyAhPSAwKSB7CisJCQlEUF9OT1RJQ0UocF9od2ZuLCAiU2xvd3BhdGggSVJRIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXBfaHdmbi0+Yl9pbnRfcmVxdWVzdGVkID0gdHJ1ZTsKKwl9CisJLyogRW5hYmxlIGludGVycnVwdCBHZW5lcmF0aW9uICovCisJcWVkX2ludF9pZ3VfZW5hYmxlX2ludChwX2h3Zm4sIHBfcHR0LCBpbnRfbW9kZSk7CisJcF9od2ZuLT5iX2ludF9lbmFibGVkID0gMTsKKworCXJldHVybiByYzsKIH0KIAogdm9pZCBxZWRfaW50X2lndV9kaXNhYmxlX2ludChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbiwKQEAgLTExMjcsMyArMTEzNCwxMSBAQAogCiAJcmV0dXJuIGluZm8tPmlndV9zYl9jbnQ7CiB9CisKK3ZvaWQgcWVkX2ludF9kaXNhYmxlX3Bvc3RfaXNyX3JlbGVhc2Uoc3RydWN0IHFlZF9kZXYgKmNkZXYpCit7CisJaW50IGk7CisKKwlmb3JfZWFjaF9od2ZuKGNkZXYsIGkpCisJCWNkZXYtPmh3Zm5zW2ldLmJfaW50X3JlcXVlc3RlZCA9IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaW50LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pbnQuaAppbmRleCAxNmI1NzUxLi41MWUwYjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pbnQuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pbnQuaApAQCAtMTY5LDEwICsxNjksMTQgQEAKIAkJCWludCAqcF9pb3ZfYmxrcyk7CiAKIC8qKgotICogQGZpbGUKKyAqIEBicmllZiBxZWRfaW50X2Rpc2FibGVfcG9zdF9pc3JfcmVsZWFzZSAtIHBlcmZvcm1zIHRoZSBjbGVhbnVwIHBvc3QgSVNSCisgKiAgICAgICAgcmVsZWFzZS4gVGhlIEFQSSBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciByZWxlYXNpbmcgYWxsIHNsb3dwYXRoIElSUXMKKyAqICAgICAgICBvZiB0aGUgZGV2aWNlLgogICoKLSAqIEBicmllZiBJbnRlcnJ1cHQgaGFuZGxlcgorICogQHBhcmFtIGNkZXYKKyAqCiAgKi8KK3ZvaWQgcWVkX2ludF9kaXNhYmxlX3Bvc3RfaXNyX3JlbGVhc2Uoc3RydWN0IHFlZF9kZXYgKmNkZXYpOwogCiAjZGVmaW5lIFFFRF9DQVVfREVGX1JYX1RJTUVSX1JFUyAwCiAjZGVmaW5lIFFFRF9DQVVfREVGX1RYX1RJTUVSX1JFUyAwCkBAIC0zNjYsMTAgKzM3MCwxMSBAQAogICogQHBhcmFtIHBfaHdmbgogICogQHBhcmFtIHBfcHR0CiAgKiBAcGFyYW0gaW50X21vZGUKKyAqCisgKiBAcmV0dXJuIGludAogICovCi12b2lkIHFlZF9pbnRfaWd1X2VuYWJsZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbiwKLQkJCXN0cnVjdCBxZWRfcHR0ICpwX3B0dCwKLQkJCWVudW0gcWVkX2ludF9tb2RlIGludF9tb2RlKTsKK2ludCBxZWRfaW50X2lndV9lbmFibGUoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sIHN0cnVjdCBxZWRfcHR0ICpwX3B0dCwKKwkJICAgICAgIGVudW0gcWVkX2ludF9tb2RlIGludF9tb2RlKTsKIAogLyoqCiAgKiBAYnJpZWYgLSBJbml0aWFsaXplIENBVSBzdGF0dXMgYmxvY2sgZW50cnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX21haW4uYwppbmRleCA5NDdjN2FmLi4xNzRmNzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbWFpbi5jCkBAIC00NzYsNDEgKzQ3NiwyMiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBxZWRfc2xvd3BhdGhfaXJxX3JlcShzdHJ1Y3QgcWVkX2RldiAqY2RldikKK2ludCBxZWRfc2xvd3BhdGhfaXJxX3JlcShzdHJ1Y3QgcWVkX2h3Zm4gKmh3Zm4pCiB7Ci0JaW50IGkgPSAwLCByYyA9IDA7CisJc3RydWN0IHFlZF9kZXYgKmNkZXYgPSBod2ZuLT5jZGV2OworCWludCByYyA9IDA7CisJdTggaWQ7CiAKIAlpZiAoY2Rldi0+aW50X3BhcmFtcy5vdXQuaW50X21vZGUgPT0gUUVEX0lOVF9NT0RFX01TSVgpIHsKLQkJLyogUmVxdWVzdCBhbGwgdGhlIHNsb3dwYXRoIE1TSS1YIHZlY3RvcnMgKi8KLQkJZm9yIChpID0gMDsgaSA8IGNkZXYtPm51bV9od2ZuczsgaSsrKSB7Ci0JCQlzbnByaW50ZihjZGV2LT5od2Zuc1tpXS5uYW1lLCBOQU1FX1NJWkUsCi0JCQkJICJzcC0lZC0lMDJ4OiUwMnguJTAyeCIsCi0JCQkJIGksIGNkZXYtPnBkZXYtPmJ1cy0+bnVtYmVyLAotCQkJCSBQQ0lfU0xPVChjZGV2LT5wZGV2LT5kZXZmbiksCi0JCQkJIGNkZXYtPmh3Zm5zW2ldLmFic19wZl9pZCk7Ci0KLQkJCXJjID0gcmVxdWVzdF9pcnEoY2Rldi0+aW50X3BhcmFtcy5tc2l4X3RhYmxlW2ldLnZlY3RvciwKLQkJCQkJIHFlZF9tc2l4X3NwX2ludCwgMCwKLQkJCQkJIGNkZXYtPmh3Zm5zW2ldLm5hbWUsCi0JCQkJCSBjZGV2LT5od2Zuc1tpXS5zcF9kcGMpOwotCQkJaWYgKHJjKQotCQkJCWJyZWFrOwotCi0JCQlEUF9WRVJCT1NFKCZjZGV2LT5od2Zuc1tpXSwKLQkJCQkgICAoTkVUSUZfTVNHX0lOVFIgfCBRRURfTVNHX1NQKSwKKwkJaWQgPSBod2ZuLT5teV9pZDsKKwkJc25wcmludGYoaHdmbi0+bmFtZSwgTkFNRV9TSVpFLCAic3AtJWQtJTAyeDolMDJ4LiUwMngiLAorCQkJIGlkLCBjZGV2LT5wZGV2LT5idXMtPm51bWJlciwKKwkJCSBQQ0lfU0xPVChjZGV2LT5wZGV2LT5kZXZmbiksIGh3Zm4tPmFic19wZl9pZCk7CisJCXJjID0gcmVxdWVzdF9pcnEoY2Rldi0+aW50X3BhcmFtcy5tc2l4X3RhYmxlW2lkXS52ZWN0b3IsCisJCQkJIHFlZF9tc2l4X3NwX2ludCwgMCwgaHdmbi0+bmFtZSwgaHdmbi0+c3BfZHBjKTsKKwkJaWYgKCFyYykKKwkJCURQX1ZFUkJPU0UoaHdmbiwgKE5FVElGX01TR19JTlRSIHwgUUVEX01TR19TUCksCiAJCQkJICAgIlJlcXVlc3RlZCBzbG93cGF0aCBNU0ktWFxuIik7Ci0JCX0KLQotCQlpZiAoaSAhPSBjZGV2LT5udW1faHdmbnMpIHsKLQkJCS8qIEZyZWUgYWxyZWFkeSByZXF1ZXN0IE1TSS1YIHZlY3RvcnMgKi8KLQkJCWZvciAoaS0tOyBpID49IDA7IGktLSkgewotCQkJCXVuc2lnbmVkIGludCB2ZWMgPQotCQkJCQljZGV2LT5pbnRfcGFyYW1zLm1zaXhfdGFibGVbaV0udmVjdG9yOwotCQkJCXN5bmNocm9uaXplX2lycSh2ZWMpOwotCQkJCWZyZWVfaXJxKGNkZXYtPmludF9wYXJhbXMubXNpeF90YWJsZVtpXS52ZWN0b3IsCi0JCQkJCSBjZGV2LT5od2Zuc1tpXS5zcF9kcGMpOwotCQkJfQotCQl9CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKQEAgLTUzNCwxMyArNTE1LDE3IEBACiAKIAlpZiAoY2Rldi0+aW50X3BhcmFtcy5vdXQuaW50X21vZGUgPT0gUUVEX0lOVF9NT0RFX01TSVgpIHsKIAkJZm9yX2VhY2hfaHdmbihjZGV2LCBpKSB7CisJCQlpZiAoIWNkZXYtPmh3Zm5zW2ldLmJfaW50X3JlcXVlc3RlZCkKKwkJCQlicmVhazsKIAkJCXN5bmNocm9uaXplX2lycShjZGV2LT5pbnRfcGFyYW1zLm1zaXhfdGFibGVbaV0udmVjdG9yKTsKIAkJCWZyZWVfaXJxKGNkZXYtPmludF9wYXJhbXMubXNpeF90YWJsZVtpXS52ZWN0b3IsCiAJCQkJIGNkZXYtPmh3Zm5zW2ldLnNwX2RwYyk7CiAJCX0KIAl9IGVsc2UgewotCQlmcmVlX2lycShjZGV2LT5wZGV2LT5pcnEsIGNkZXYpOworCQlpZiAoUUVEX0xFQURJTkdfSFdGTihjZGV2KS0+Yl9pbnRfcmVxdWVzdGVkKQorCQkJZnJlZV9pcnEoY2Rldi0+cGRldi0+aXJxLCBjZGV2KTsKIAl9CisJcWVkX2ludF9kaXNhYmxlX3Bvc3RfaXNyX3JlbGVhc2UoY2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgcWVkX25pY19zdG9wKHN0cnVjdCBxZWRfZGV2ICpjZGV2KQpAQCAtNzY1LDE2ICs3NTAsMTEgQEAKIAlpZiAocmMpCiAJCWdvdG8gZXJyMTsKIAotCS8qIFJlcXVlc3QgdGhlIHNsb3dwYXRoIElSUSAqLwotCXJjID0gcWVkX3Nsb3dwYXRoX2lycV9yZXEoY2Rldik7Ci0JaWYgKHJjKQotCQlnb3RvIGVycjI7Ci0KIAkvKiBBbGxvY2F0ZSBzdHJlYW0gZm9yIHVuemlwcGluZyAqLwogCXJjID0gcWVkX2FsbG9jX3N0cmVhbV9tZW0oY2Rldik7CiAJaWYgKHJjKSB7CiAJCURQX05PVElDRShjZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHN0cmVhbSBtZW1vcnlcbiIpOwotCQlnb3RvIGVycjM7CisJCWdvdG8gZXJyMjsKIAl9CiAKIAkvKiBTdGFydCB0aGUgc2xvd3BhdGggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3JlZ19hZGRyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9yZWdfYWRkci5oCmluZGV4IDdhNWNlNTkuLmU4ZGYxMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3JlZ19hZGRyLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfcmVnX2FkZHIuaApAQCAtMzYzLDQgKzM2Myw4IEBACiAJCTB4NyA8PCAwKQogI2RlZmluZSAgTUNQX1JFR19OVk1fQ0ZHNF9GTEFTSF9TSVpFX1NISUZUIFwKIAkwCisjZGVmaW5lIFBHTFVFX0JfUkVHX1BGX0JBUjBfU0laRSBcCisJMHgyYWFlNjBVTAorI2RlZmluZSBQR0xVRV9CX1JFR19QRl9CQVIxX1NJWkUgXAorCTB4MmFhZTY0VUwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3AuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NwLmgKaW5kZXggMzFhMWYxZS4uMjg3ZmFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3AuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcC5oCkBAIC0xMjQsOCArMTI0LDEyIEBACiAJZG1hX2FkZHJfdAkJcF9waHlzOwogCXN0cnVjdCBxZWRfc3BxX2VudHJ5CSpwX3ZpcnQ7CiAKLQkvKiBVc2VkIGFzIGluZGV4IGZvciBjb21wbGV0aW9ucyAocmV0dXJucyBvbiBFUSBieSBGVykgKi8KLQl1MTYJCQllY2hvX2lkeDsKKyNkZWZpbmUgU1BRX1JJTkdfU0laRSBcCisJKENPUkVfU1BRRV9QQUdFX1NJWkVfQllURVMgLyBzaXplb2Yoc3RydWN0IHNsb3dfcGF0aF9lbGVtZW50KSkKKworCS8qIEJpdG1hcCBmb3IgaGFuZGxpbmcgb3V0LW9mLW9yZGVyIGNvbXBsZXRpb25zICovCisJREVDTEFSRV9CSVRNQVAocF9jb21wX2JpdG1hcCwgU1BRX1JJTkdfU0laRSk7CisJdTgJCQljb21wX2JpdG1hcF9pZHg7CiAKIAkvKiBTdGF0aXN0aWNzICovCiAJdTMyCQkJdW5saW1pdGVkX3BlbmRpbmdfY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcHEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NwcS5jCmluZGV4IDdjMGI4NDUuLjNkZDU0OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NwcS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NwcS5jCkBAIC0xMTIsOCArMTEyLDYgQEAKIHFlZF9zcHFfZmlsbF9lbnRyeShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbiwKIAkJICAgc3RydWN0IHFlZF9zcHFfZW50cnkgKnBfZW50KQogewotCXBfZW50LT5lbGVtLmhkci5lY2hvID0gMDsKLQlwX2h3Zm4tPnBfc3BxLT5lY2hvX2lkeCsrOwogCXBfZW50LT5mbGFncyA9IDA7CiAKIAlzd2l0Y2ggKHBfZW50LT5jb21wX21vZGUpIHsKQEAgLTE5NSwxMCArMTkzLDEyIEBACiAJCQkgICBzdHJ1Y3QgcWVkX3NwcSAqcF9zcHEsCiAJCQkgICBzdHJ1Y3QgcWVkX3NwcV9lbnRyeSAqcF9lbnQpCiB7Ci0Jc3RydWN0IHFlZF9jaGFpbgkJKnBfY2hhaW4gPSAmcF9od2ZuLT5wX3NwcS0+Y2hhaW47CisJc3RydWN0IHFlZF9jaGFpbiAqcF9jaGFpbiA9ICZwX2h3Zm4tPnBfc3BxLT5jaGFpbjsKKwl1MTYgZWNobyA9IHFlZF9jaGFpbl9nZXRfcHJvZF9pZHgocF9jaGFpbik7CiAJc3RydWN0IHNsb3dfcGF0aF9lbGVtZW50CSplbGVtOwogCXN0cnVjdCBjb3JlX2RiX2RhdGEJCWRiOwogCisJcF9lbnQtPmVsZW0uaGRyLmVjaG8JPSBjcHVfdG9fbGUxNihlY2hvKTsKIAllbGVtID0gcWVkX2NoYWluX3Byb2R1Y2UocF9jaGFpbik7CiAJaWYgKCFlbGVtKSB7CiAJCURQX05PVElDRShwX2h3Zm4sICJGYWlsZWQgdG8gcHJvZHVjZSBmcm9tIFNQUSBjaGFpblxuIik7CkBAIC00MzcsNyArNDM3LDkgQEAKIAlwX3NwcS0+Y29tcF9jb3VudAkJPSAwOwogCXBfc3BxLT5jb21wX3NlbnRfY291bnQJCT0gMDsKIAlwX3NwcS0+dW5saW1pdGVkX3BlbmRpbmdfY291bnQJPSAwOwotCXBfc3BxLT5lY2hvX2lkeAkJCT0gMDsKKworCWJpdG1hcF96ZXJvKHBfc3BxLT5wX2NvbXBfYml0bWFwLCBTUFFfUklOR19TSVpFKTsKKwlwX3NwcS0+Y29tcF9iaXRtYXBfaWR4ID0gMDsKIAogCS8qIFNQUSBjaWQsIGNhbm5vdCBmYWlsICovCiAJcWVkX2N4dF9hY3F1aXJlX2NpZChwX2h3Zm4sIFBST1RPQ09MSURfQ09SRSwgJnBfc3BxLT5jaWQpOwpAQCAtNTgyLDI2ICs1ODQsMzIgQEAKIAlzdHJ1Y3QgcWVkX3NwcSAqcF9zcHEgPSBwX2h3Zm4tPnBfc3BxOwogCiAJaWYgKHBfZW50LT5xdWV1ZSA9PSAmcF9zcHEtPnVubGltaXRlZF9wZW5kaW5nKSB7Ci0JCXN0cnVjdCBxZWRfc3BxX2VudHJ5ICpwX2VuMjsKIAogCQlpZiAobGlzdF9lbXB0eSgmcF9zcHEtPmZyZWVfcG9vbCkpIHsKIAkJCWxpc3RfYWRkX3RhaWwoJnBfZW50LT5saXN0LCAmcF9zcHEtPnVubGltaXRlZF9wZW5kaW5nKTsKIAkJCXBfc3BxLT51bmxpbWl0ZWRfcGVuZGluZ19jb3VudCsrOwogCiAJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBxZWRfc3BxX2VudHJ5ICpwX2VuMjsKKworCQkJcF9lbjIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwX3NwcS0+ZnJlZV9wb29sLAorCQkJCQkJIHN0cnVjdCBxZWRfc3BxX2VudHJ5LAorCQkJCQkJIGxpc3QpOworCQkJbGlzdF9kZWwoJnBfZW4yLT5saXN0KTsKKworCQkJLyogQ29weSB0aGUgcmluZyBlbGVtZW50IHBoeXNpY2FsIHBvaW50ZXIgdG8gdGhlIG5ldworCQkJICogZW50cnksIHNpbmNlIHdlIGFyZSBhYm91dCB0byBvdmVycmlkZSB0aGUgZW50aXJlIHJpbmcKKwkJCSAqIGVudHJ5IGFuZCBkb24ndCB3YW50IHRvIGxvc2UgdGhlIHBvaW50ZXIuCisJCQkgKi8KKwkJCXBfZW50LT5lbGVtLmRhdGFfcHRyID0gcF9lbjItPmVsZW0uZGF0YV9wdHI7CisKKwkJCSpwX2VuMiA9ICpwX2VudDsKKworCQkJa2ZyZWUocF9lbnQpOworCisJCQlwX2VudCA9IHBfZW4yOwogCQl9Ci0KLQkJcF9lbjIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwX3NwcS0+ZnJlZV9wb29sLAotCQkJCQkgc3RydWN0IHFlZF9zcHFfZW50cnksCi0JCQkJCSBsaXN0KTsKLQkJbGlzdF9kZWwoJnBfZW4yLT5saXN0KTsKLQotCQkvKiBTdHJjdXQgYXNzaWdubWVudCAqLwotCQkqcF9lbjIgPSAqcF9lbnQ7Ci0KLQkJa2ZyZWUocF9lbnQpOwotCi0JCXBfZW50ID0gcF9lbjI7CiAJfQogCiAJLyogZW50cnkgaXMgdG8gYmUgcGxhY2VkIGluICdwZW5kaW5nJyBxdWV1ZSAqLwpAQCAtNzc3LDEzICs3ODUsMzggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocF9lbnQsIHRtcCwgJnBfc3BxLT5jb21wbGV0aW9uX3BlbmRpbmcsCiAJCQkJIGxpc3QpIHsKIAkJaWYgKHBfZW50LT5lbGVtLmhkci5lY2hvID09IGVjaG8pIHsKKwkJCXUxNiBwb3MgPSBsZTE2X3RvX2NwdShlY2hvKSAlIFNQUV9SSU5HX1NJWkU7CisKIAkJCWxpc3RfZGVsKCZwX2VudC0+bGlzdCk7CiAKLQkJCXFlZF9jaGFpbl9yZXR1cm5fcHJvZHVjZWQoJnBfc3BxLT5jaGFpbik7CisJCQkvKiBBdm9pZCBvdmVycmlkaW5nIG9mIFNQUSBlbnRyaWVzIHdoZW4gZ2V0dGluZworCQkJICogb3V0LW9mLW9yZGVyIGNvbXBsZXRpb25zLCBieSBtYXJraW5nIHRoZSBjb21wbGV0aW9ucworCQkJICogaW4gYSBiaXRtYXAgYW5kIGluY3JlYXNpbmcgdGhlIGNoYWluIGNvbnN1bWVyIG9ubHkKKwkJCSAqIGZvciB0aGUgZmlyc3Qgc3VjY2Vzc2l2ZSBjb21wbGV0ZWQgZW50cmllcy4KKwkJCSAqLworCQkJYml0bWFwX3NldChwX3NwcS0+cF9jb21wX2JpdG1hcCwgcG9zLCBTUFFfUklOR19TSVpFKTsKKworCQkJd2hpbGUgKHRlc3RfYml0KHBfc3BxLT5jb21wX2JpdG1hcF9pZHgsCisJCQkJCXBfc3BxLT5wX2NvbXBfYml0bWFwKSkgeworCQkJCWJpdG1hcF9jbGVhcihwX3NwcS0+cF9jb21wX2JpdG1hcCwKKwkJCQkJICAgICBwX3NwcS0+Y29tcF9iaXRtYXBfaWR4LAorCQkJCQkgICAgIFNQUV9SSU5HX1NJWkUpOworCQkJCXBfc3BxLT5jb21wX2JpdG1hcF9pZHgrKzsKKwkJCQlxZWRfY2hhaW5fcmV0dXJuX3Byb2R1Y2VkKCZwX3NwcS0+Y2hhaW4pOworCQkJfQorCiAJCQlwX3NwcS0+Y29tcF9jb3VudCsrOwogCQkJZm91bmQgPSBwX2VudDsKIAkJCWJyZWFrOwogCQl9CisKKwkJLyogVGhpcyBpcyByZWxhdGl2ZWx5IHVuY29tbW9uIC0gZGVwZW5kcyBvbiBzY2VuYXJpb3MKKwkJICogd2hpY2ggaGF2ZSBtdXRsaXBsZSBwZXItUEYgc2VudCByYW1yb2RzLgorCQkgKi8KKwkJRFBfVkVSQk9TRShwX2h3Zm4sIFFFRF9NU0dfU1BRLAorCQkJICAgIkdvdCBjb21wbGV0aW9uIGZvciBlY2hvICUwNHggLSBkb2Vzbid0IG1hdGNoIGVjaG8gJTA0eCBpbiBjb21wbGV0aW9uIHBlbmRpbmcgbGlzdFxuIiwKKwkJCSAgIGxlMTZfdG9fY3B1KGVjaG8pLAorCQkJICAgbGUxNl90b19jcHUocF9lbnQtPmVsZW0uaGRyLmVjaG8pKTsKIAl9CiAKIAkvKiBSZWxlYXNlIGxvY2sgYmVmb3JlIGNhbGxiYWNrLCBhcyBjYWxsYmFjayBtYXkgcG9zdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfODN4eF92bmljLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY184M3h4X3ZuaWMuYwppbmRleCBiZTdkN2E2Li4zNDkwNjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY184M3h4X3ZuaWMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY184M3h4X3ZuaWMuYwpAQCAtMjQ2LDEyICsyNDYsMTMgQEAKIAl1MzIgc3RhdGU7CiAKIAlzdGF0ZSA9IFFMQ1JEWChhaHcsIFFMQ184M1hYX1ZOSUNfU1RBVEUpOwotCXdoaWxlIChzdGF0ZSAhPSBRTENOSUNfREVWX05QQVJfT1BFUiAmJiBpZGMtPnZuaWNfd2FpdF9saW1pdC0tKSB7CisJd2hpbGUgKHN0YXRlICE9IFFMQ05JQ19ERVZfTlBBUl9PUEVSICYmIGlkYy0+dm5pY193YWl0X2xpbWl0KSB7CisJCWlkYy0+dm5pY193YWl0X2xpbWl0LS07CiAJCW1zbGVlcCgxMDAwKTsKIAkJc3RhdGUgPSBRTENSRFgoYWh3LCBRTENfODNYWF9WTklDX1NUQVRFKTsKIAl9CiAKLQlpZiAoIWlkYy0+dm5pY193YWl0X2xpbWl0KSB7CisJaWYgKHN0YXRlICE9IFFMQ05JQ19ERVZfTlBBUl9PUEVSKSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCSJ2TklDIG1vZGUgbm90IG9wZXJhdGlvbmFsLCBzdGF0ZSBjaGVjayB0aW1lZCBvdXQuXG4iKTsKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxnZS9xbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDAyYjcxMTUuLjk5Nzk3NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGdlL3FsZ2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGdlL3FsZ2VfbWFpbi5jCkBAIC00MjExLDggKzQyMTEsOSBAQAogCiAJLyogV2FpdCBmb3IgYW4gb3V0c3RhbmRpbmcgcmVzZXQgdG8gY29tcGxldGUuICovCiAJaWYgKCF0ZXN0X2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpKSB7Ci0JCWludCBpID0gMzsKLQkJd2hpbGUgKGktLSAmJiAhdGVzdF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKSkgeworCQlpbnQgaSA9IDQ7CisKKwkJd2hpbGUgKC0taSAmJiAhdGVzdF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKSkgewogCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCiAJCQkJICAiV2FpdGluZyBmb3IgYWRhcHRlciBVUC4uLlxuIik7CiAJCQlzc2xlZXAoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9xY2Ffc3BpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9xY2Ffc3BpLmMKaW5kZXggZGRiMmM2Yy4uNjg5YTRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcWNhX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3FjYV9zcGkuYwpAQCAtNzM2LDkgKzczNiw4IEBACiAJbmV0ZGV2X2luZm8ocWNhLT5uZXRfZGV2LCAiVHJhbnNtaXQgdGltZW91dCBhdCAlbGQsIGxhdGVuY3kgJWxkXG4iLAogCQkgICAgamlmZmllcywgamlmZmllcyAtIGRldi0+dHJhbnNfc3RhcnQpOwogCXFjYS0+bmV0X2Rldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JLyogd2FrZSB0aGUgcXVldWUgaWYgdGhlcmUgaXMgcm9vbSAqLwotCWlmIChxY2FzcGlfdHhfcmluZ19oYXNfc3BhY2UoJnFjYS0+dHhyKSkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCS8qIFRyaWdnZXIgdHggcXVldWUgZmx1c2ggYW5kIFFDQTcwMDAgcmVzZXQgKi8KKwlxY2EtPnN5bmMgPSBRQ0FTUElfU1lOQ19VTktOT1dOOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5LmMKaW5kZXggYjRmMjEyMy4uNzllZjc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuYwpAQCAtNzQyOSwxNSArNzQyOSwxNSBAQAogCiAJCQlydGw4MTY5X3J4X3ZsYW5fdGFnKGRlc2MsIHNrYik7CiAKKwkJCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpCisJCQkJZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKKwogCQkJbmFwaV9ncm9fcmVjZWl2ZSgmdHAtPm5hcGksIHNrYik7CiAKIAkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnRwLT5yeF9zdGF0cy5zeW5jcCk7CiAJCQl0cC0+cnhfc3RhdHMucGFja2V0cysrOwogCQkJdHAtPnJ4X3N0YXRzLmJ5dGVzICs9IHBrdF9zaXplOwogCQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnRwLT5yeF9zdGF0cy5zeW5jcCk7Ci0KLQkJCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpCi0JCQkJZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAkJfQogcmVsZWFzZV9kZXNjcmlwdG9yOgogCQlkZXNjLT5vcHRzMiA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYwppbmRleCBhYTdiMjA4Li40NjdkNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMKQEAgLTQwOCw4ICs0MDgsNiBAQAogCS8qIEludGVycnVwdCBlbmFibGU6ICovCiAJLyogRnJhbWUgcmVjZWl2ZSAqLwogCXJhdmJfd3JpdGUobmRldiwgUklDMF9GUkUwIHwgUklDMF9GUkUxLCBSSUMwKTsKLQkvKiBSZWNlaXZlIEZJRk8gZnVsbCB3YXJuaW5nICovCi0JcmF2Yl93cml0ZShuZGV2LCBSSUMxX1JGV0UsIFJJQzEpOwogCS8qIFJlY2VpdmUgRklGTyBmdWxsIGVycm9yLCBkZXNjcmlwdG9yIGVtcHR5ICovCiAJcmF2Yl93cml0ZShuZGV2LCBSSUMyX1FGRTAgfCBSSUMyX1FGRTEgfCBSSUMyX1JGRkUsIFJJQzIpOwogCS8qIEZyYW1lIHRyYW5zbWl0dGVkLCB0aW1lc3RhbXAgRklGTyB1cGRhdGVkICovCkBAIC03MzMsOCArNzMxLDEwIEBACiAJCQkgICAgKCh0aXMgICYgdGljKSAgJiBCSVQocSkpKSB7CiAJCQkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaVtxXSkpIHsKIAkJCQkJLyogTWFzayBSWCBhbmQgVFggaW50ZXJydXB0cyAqLwotCQkJCQlyYXZiX3dyaXRlKG5kZXYsIHJpYzAgJiB+QklUKHEpLCBSSUMwKTsKLQkJCQkJcmF2Yl93cml0ZShuZGV2LCB0aWMgICYgfkJJVChxKSwgVElDKTsKKwkJCQkJcmljMCAmPSB+QklUKHEpOworCQkJCQl0aWMgJj0gfkJJVChxKTsKKwkJCQkJcmF2Yl93cml0ZShuZGV2LCByaWMwLCBSSUMwKTsKKwkJCQkJcmF2Yl93cml0ZShuZGV2LCB0aWMsIFRJQyk7CiAJCQkJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaVtxXSk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJbmV0ZGV2X3dhcm4obmRldiwKQEAgLTkwNSw2ICs5MDUsOSBAQAogCQluZXRkZXZfaW5mbyhuZGV2LCAibGltaXRlZCBQSFkgdG8gMTAwTWJpdC9zXG4iKTsKIAl9CiAKKwkvKiAxMEJBU0UgaXMgbm90IHN1cHBvcnRlZCAqLworCXBoeWRldi0+c3VwcG9ydGVkICY9IH5QSFlfMTBCVF9GRUFUVVJFUzsKKwogCW5ldGRldl9pbmZvKG5kZXYsICJhdHRhY2hlZCBQSFkgJWQgKElSUSAlZCkgdG8gZHJpdmVyICVzXG4iLAogCQkgICAgcGh5ZGV2LT5hZGRyLCBwaHlkZXYtPmlycSwgcGh5ZGV2LT5kcnYtPm5hbWUpOwogCkBAIC0xMDM3LDcgKzEwNDAsNyBAQAogCSJyeF9xdWV1ZV8xX21jYXN0X3BhY2tldHMiLAogCSJyeF9xdWV1ZV8xX2Vycm9ycyIsCiAJInJ4X3F1ZXVlXzFfY3JjX2Vycm9ycyIsCi0JInJ4X3F1ZXVlXzFfZnJhbWVfZXJyb3JzXyIsCisJInJ4X3F1ZXVlXzFfZnJhbWVfZXJyb3JzIiwKIAkicnhfcXVldWVfMV9sZW5ndGhfZXJyb3JzIiwKIAkicnhfcXVldWVfMV9taXNzZWRfZXJyb3JzIiwKIAkicnhfcXVldWVfMV9vdmVyX2Vycm9ycyIsCkBAIC0xMjI1LDcgKzEyMjgsNyBAQAogCS8qIERldmljZSBpbml0ICovCiAJZXJyb3IgPSByYXZiX2RtYWNfaW5pdChuZGV2KTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2ZyZWVfaXJxOworCQlnb3RvIG91dF9mcmVlX2lycTI7CiAJcmF2Yl9lbWFjX2luaXQobmRldik7CiAKIAkvKiBJbml0aWFsaXNlIFBUUCBDbG9jayBkcml2ZXIgKi8KQEAgLTEyNDMsOSArMTI0NiwxMSBAQAogb3V0X3B0cF9zdG9wOgogCS8qIFN0b3AgUFRQIENsb2NrIGRyaXZlciAqLwogCXJhdmJfcHRwX3N0b3AobmRldik7CitvdXRfZnJlZV9pcnEyOgorCWlmIChwcml2LT5jaGlwX2lkID09IFJDQVJfR0VOMykKKwkJZnJlZV9pcnEocHJpdi0+ZW1hY19pcnEsIG5kZXYpOwogb3V0X2ZyZWVfaXJxOgogCWZyZWVfaXJxKG5kZXYtPmlycSwgbmRldik7Ci0JZnJlZV9pcnEocHJpdi0+ZW1hY19pcnEsIG5kZXYpOwogb3V0X25hcGlfb2ZmOgogCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaVtSQVZCX05DXSk7CiAJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpW1JBVkJfQkVdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jCmluZGV4IGU3YmFiNzkuLjZhOGZjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYwpAQCAtNTIsNiArNTIsOCBAQAogCQlORVRJRl9NU0dfUlhfRVJSfCBcCiAJCU5FVElGX01TR19UWF9FUlIpCiAKKyNkZWZpbmUgU0hfRVRIX09GRlNFVF9JTlZBTElECSgodTE2KX4wKQorCiAjZGVmaW5lIFNIX0VUSF9PRkZTRVRfREVGQVVMVFMJCQlcCiAJWzAgLi4uIFNIX0VUSF9NQVhfUkVHSVNURVJfT0ZGU0VUIC0gMV0gPSBTSF9FVEhfT0ZGU0VUX0lOVkFMSUQKIApAQCAtNDA0LDYgKzQwNiwyOCBAQAogc3RhdGljIHZvaWQgc2hfZXRoX3Jjdl9zbmRfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNoX2V0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogCitzdGF0aWMgdm9pZCBzaF9ldGhfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBkYXRhLCBpbnQgZW51bV9pbmRleCkKK3sKKwlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOworCXUxNiBvZmZzZXQgPSBtZHAtPnJlZ19vZmZzZXRbZW51bV9pbmRleF07CisKKwlpZiAoV0FSTl9PTihvZmZzZXQgPT0gU0hfRVRIX09GRlNFVF9JTlZBTElEKSkKKwkJcmV0dXJuOworCisJaW93cml0ZTMyKGRhdGEsIG1kcC0+YWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1MzIgc2hfZXRoX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBlbnVtX2luZGV4KQoreworCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisJdTE2IG9mZnNldCA9IG1kcC0+cmVnX29mZnNldFtlbnVtX2luZGV4XTsKKworCWlmIChXQVJOX09OKG9mZnNldCA9PSBTSF9FVEhfT0ZGU0VUX0lOVkFMSUQpKQorCQlyZXR1cm4gfjBVOworCisJcmV0dXJuIGlvcmVhZDMyKG1kcC0+YWRkciArIG9mZnNldCk7Cit9CisKIHN0YXRpYyBib29sIHNoX2V0aF9pc19nZXRoZXIoc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHApCiB7CiAJcmV0dXJuIG1kcC0+cmVnX29mZnNldCA9PSBzaF9ldGhfb2Zmc2V0X2dpZ2FiaXQ7CkBAIC0xMTQzLDYgKzExNjcsNyBAQAogCWludCB0eF9yaW5nc2l6ZSA9IHNpemVvZigqdHhkZXNjKSAqIG1kcC0+bnVtX3R4X3Jpbmc7CiAJaW50IHNrYnVmZl9zaXplID0gbWRwLT5yeF9idWZfc3ogKyBTSF9FVEhfUlhfQUxJR04gKyAzMiAtIDE7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwl1MzIgYnVmX2xlbjsKIAogCW1kcC0+Y3VyX3J4ID0gMDsKIAltZHAtPmN1cl90eCA9IDA7CkBAIC0xMTYzLDE2ICsxMTg4LDE2IEBACiAJCS8qIFJYIGRlc2NyaXB0b3IgKi8KIAkJcnhkZXNjID0gJm1kcC0+cnhfcmluZ1tpXTsKIAkJLyogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBhIG11bHRpcGxlIG9mIDMyIGJ5dGVzLiAqLwotCQlyeGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMzIpOwotCQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHNrYi0+ZGF0YSwKLQkJCQkJICByeGRlc2MtPmJ1ZmZlcl9sZW5ndGgsCisJCWJ1Zl9sZW4gPSBBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMzIpOworCQlyeGRlc2MtPmxlbiA9IGNwdV90b19lZG1hYyhtZHAsIGJ1Zl9sZW4gPDwgMTYpOworCQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHNrYi0+ZGF0YSwgYnVmX2xlbiwKIAkJCQkJICBETUFfRlJPTV9ERVZJQ0UpOwogCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJm5kZXYtPmRldiwgZG1hX2FkZHIpKSB7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQl9CiAJCW1kcC0+cnhfc2tidWZmW2ldID0gc2tiOwotCQlyeGRlc2MtPmFkZHIgPSBkbWFfYWRkcjsKKwkJcnhkZXNjLT5hZGRyID0gY3B1X3RvX2VkbWFjKG1kcCwgZG1hX2FkZHIpOwogCQlyeGRlc2MtPnN0YXR1cyA9IGNwdV90b19lZG1hYyhtZHAsIFJEX1JBQ1QgfCBSRF9SRlApOwogCiAJCS8qIFJ4IGRlc2NyaXB0b3IgYWRkcmVzcyBzZXQgKi8KQEAgLTExOTYsNyArMTIyMSw3IEBACiAJCW1kcC0+dHhfc2tidWZmW2ldID0gTlVMTDsKIAkJdHhkZXNjID0gJm1kcC0+dHhfcmluZ1tpXTsKIAkJdHhkZXNjLT5zdGF0dXMgPSBjcHVfdG9fZWRtYWMobWRwLCBURF9URlApOwotCQl0eGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSAwOworCQl0eGRlc2MtPmxlbiA9IGNwdV90b19lZG1hYyhtZHAsIDApOwogCQlpZiAoaSA9PSAwKSB7CiAJCQkvKiBUeCBkZXNjcmlwdG9yIGFkZHJlc3Mgc2V0ICovCiAJCQlzaF9ldGhfd3JpdGUobmRldiwgbWRwLT50eF9kZXNjX2RtYSwgVERMQVIpOwpAQCAtMTQwMyw4ICsxNDI4LDEwIEBACiAJCQkgICBlbnRyeSwgZWRtYWNfdG9fY3B1KG1kcCwgdHhkZXNjLT5zdGF0dXMpKTsKIAkJLyogRnJlZSB0aGUgb3JpZ2luYWwgc2tiLiAqLwogCQlpZiAobWRwLT50eF9za2J1ZmZbZW50cnldKSB7Ci0JCQlkbWFfdW5tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHR4ZGVzYy0+YWRkciwKLQkJCQkJIHR4ZGVzYy0+YnVmZmVyX2xlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKCZuZGV2LT5kZXYsCisJCQkJCSBlZG1hY190b19jcHUobWRwLCB0eGRlc2MtPmFkZHIpLAorCQkJCQkgZWRtYWNfdG9fY3B1KG1kcCwgdHhkZXNjLT5sZW4pID4+IDE2LAorCQkJCQkgRE1BX1RPX0RFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShtZHAtPnR4X3NrYnVmZltlbnRyeV0pOwogCQkJbWRwLT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKIAkJCWZyZWVfbnVtKys7CkBAIC0xNDE0LDcgKzE0NDEsNyBAQAogCQkJdHhkZXNjLT5zdGF0dXMgfD0gY3B1X3RvX2VkbWFjKG1kcCwgVERfVERMRSk7CiAKIAkJbmRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCQluZGV2LT5zdGF0cy50eF9ieXRlcyArPSB0eGRlc2MtPmJ1ZmZlcl9sZW5ndGg7CisJCW5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IGVkbWFjX3RvX2NwdShtZHAsIHR4ZGVzYy0+bGVuKSA+PiAxNjsKIAl9CiAJcmV0dXJuIGZyZWVfbnVtOwogfQpAQCAtMTQzMyw2ICsxNDYwLDcgQEAKIAl1MzIgZGVzY19zdGF0dXM7CiAJaW50IHNrYnVmZl9zaXplID0gbWRwLT5yeF9idWZfc3ogKyBTSF9FVEhfUlhfQUxJR04gKyAzMiAtIDE7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwl1MzIgYnVmX2xlbjsKIAogCWJvZ3VzY250ID0gbWluKGJvZ3VzY250LCAqcXVvdGEpOwogCWxpbWl0ID0gYm9ndXNjbnQ7CkBAIC0xNDQxLDcgKzE0NjksNyBAQAogCQkvKiBSQUNUIGJpdCBtdXN0IGJlIGNoZWNrZWQgYmVmb3JlIGFsbCB0aGUgZm9sbG93aW5nIHJlYWRzICovCiAJCWRtYV9ybWIoKTsKIAkJZGVzY19zdGF0dXMgPSBlZG1hY190b19jcHUobWRwLCByeGRlc2MtPnN0YXR1cyk7Ci0JCXBrdF9sZW4gPSByeGRlc2MtPmZyYW1lX2xlbmd0aDsKKwkJcGt0X2xlbiA9IGVkbWFjX3RvX2NwdShtZHAsIHJ4ZGVzYy0+bGVuKSAmIFJEX1JGTDsKIAogCQlpZiAoLS1ib2d1c2NudCA8IDApCiAJCQlicmVhazsKQEAgLTE0NjIsNiArMTQ5MCw3IEBACiAJCWlmIChtZHAtPmNkLT5zaGlmdF9yZDApCiAJCQlkZXNjX3N0YXR1cyA+Pj0gMTY7CiAKKwkJc2tiID0gbWRwLT5yeF9za2J1ZmZbZW50cnldOwogCQlpZiAoZGVzY19zdGF0dXMgJiAoUkRfUkZTMSB8IFJEX1JGUzIgfCBSRF9SRlMzIHwgUkRfUkZTNCB8CiAJCQkJICAgUkRfUkZTNSB8IFJEX1JGUzYgfCBSRF9SRlMxMCkpIHsKIAkJCW5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwpAQCAtMTQ3NywxNiArMTUwNiwxNiBAQAogCQkJCW5kZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCWlmIChkZXNjX3N0YXR1cyAmIFJEX1JGUzEwKQogCQkJCW5kZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7Ci0JCX0gZWxzZSB7CisJCX0gZWxzZQlpZiAoc2tiKSB7CisJCQlkbWFfYWRkciA9IGVkbWFjX3RvX2NwdShtZHAsIHJ4ZGVzYy0+YWRkcik7CiAJCQlpZiAoIW1kcC0+Y2QtPmh3X3N3YXApCiAJCQkJc2hfZXRoX3NvZnRfc3dhcCgKLQkJCQkJcGh5c190b192aXJ0KEFMSUdOKHJ4ZGVzYy0+YWRkciwgNCkpLAorCQkJCQlwaHlzX3RvX3ZpcnQoQUxJR04oZG1hX2FkZHIsIDQpKSwKIAkJCQkJcGt0X2xlbiArIDIpOwotCQkJc2tiID0gbWRwLT5yeF9za2J1ZmZbZW50cnldOwogCQkJbWRwLT5yeF9za2J1ZmZbZW50cnldID0gTlVMTDsKIAkJCWlmIChtZHAtPmNkLT5ycGFkaXIpCiAJCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwotCQkJZG1hX3VubWFwX3NpbmdsZSgmbmRldi0+ZGV2LCByeGRlc2MtPmFkZHIsCisJCQlkbWFfdW5tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIGRtYV9hZGRyLAogCQkJCQkgQUxJR04obWRwLT5yeF9idWZfc3osIDMyKSwKIAkJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CkBAIC0xNTA2LDcgKzE1MzUsOCBAQAogCQllbnRyeSA9IG1kcC0+ZGlydHlfcnggJSBtZHAtPm51bV9yeF9yaW5nOwogCQlyeGRlc2MgPSAmbWRwLT5yeF9yaW5nW2VudHJ5XTsKIAkJLyogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyAzMiBieXRlIGJvdW5kYXJ5LiAqLwotCQlyeGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMzIpOworCQlidWZfbGVuID0gQUxJR04obWRwLT5yeF9idWZfc3osIDMyKTsKKwkJcnhkZXNjLT5sZW4gPSBjcHVfdG9fZWRtYWMobWRwLCBidWZfbGVuIDw8IDE2KTsKIAogCQlpZiAobWRwLT5yeF9za2J1ZmZbZW50cnldID09IE5VTEwpIHsKIAkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmRldiwgc2tidWZmX3NpemUpOwpAQCAtMTUxNCw4ICsxNTQ0LDcgQEAKIAkJCQlicmVhazsJLyogQmV0dGVyIGx1Y2sgbmV4dCByb3VuZC4gKi8KIAkJCXNoX2V0aF9zZXRfcmVjZWl2ZV9hbGlnbihza2IpOwogCQkJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsCi0JCQkJCQkgIHJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCwKLQkJCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKKwkJCQkJCSAgYnVmX2xlbiwgRE1BX0ZST01fREVWSUNFKTsKIAkJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmbmRldi0+ZGV2LCBkbWFfYWRkcikpIHsKIAkJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCQlicmVhazsKQEAgLTE1MjMsNyArMTU1Miw3IEBACiAJCQltZHAtPnJ4X3NrYnVmZltlbnRyeV0gPSBza2I7CiAKIAkJCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOwotCQkJcnhkZXNjLT5hZGRyID0gZG1hX2FkZHI7CisJCQlyeGRlc2MtPmFkZHIgPSBjcHVfdG9fZWRtYWMobWRwLCBkbWFfYWRkcik7CiAJCX0KIAkJZG1hX3dtYigpOyAvKiBSQUNUIGJpdCBtdXN0IGJlIHNldCBhZnRlciBhbGwgdGhlIGFib3ZlIHdyaXRlcyAqLwogCQlpZiAoZW50cnkgPj0gbWRwLT5udW1fcnhfcmluZyAtIDEpCkBAIC0yMzMxLDggKzIzNjAsOCBAQAogCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBSeCBxdWV1ZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbWRwLT5udW1fcnhfcmluZzsgaSsrKSB7CiAJCXJ4ZGVzYyA9ICZtZHAtPnJ4X3JpbmdbaV07Ci0JCXJ4ZGVzYy0+c3RhdHVzID0gMDsKLQkJcnhkZXNjLT5hZGRyID0gMHhCQURGMDBEMDsKKwkJcnhkZXNjLT5zdGF0dXMgPSBjcHVfdG9fZWRtYWMobWRwLCAwKTsKKwkJcnhkZXNjLT5hZGRyID0gY3B1X3RvX2VkbWFjKG1kcCwgMHhCQURGMDBEMCk7CiAJCWRldl9rZnJlZV9za2IobWRwLT5yeF9za2J1ZmZbaV0pOwogCQltZHAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7CiAJfQpAQCAtMjM1MCw2ICsyMzc5LDcgQEAKIHsKIAlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOwogCXN0cnVjdCBzaF9ldGhfdHhkZXNjICp0eGRlc2M7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAl1MzIgZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjM3MiwxNSArMjQwMiwxNSBAQAogCXR4ZGVzYyA9ICZtZHAtPnR4X3JpbmdbZW50cnldOwogCS8qIHNvZnQgc3dhcC4gKi8KIAlpZiAoIW1kcC0+Y2QtPmh3X3N3YXApCi0JCXNoX2V0aF9zb2Z0X3N3YXAocGh5c190b192aXJ0KEFMSUdOKHR4ZGVzYy0+YWRkciwgNCkpLAotCQkJCSBza2ItPmxlbiArIDIpOwotCXR4ZGVzYy0+YWRkciA9IGRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJICAgICAgRE1BX1RPX0RFVklDRSk7Ci0JaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZuZGV2LT5kZXYsIHR4ZGVzYy0+YWRkcikpIHsKKwkJc2hfZXRoX3NvZnRfc3dhcChQVFJfQUxJR04oc2tiLT5kYXRhLCA0KSwgc2tiLT5sZW4gKyAyKTsKKwlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJICBETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJm5kZXYtPmRldiwgZG1hX2FkZHIpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KLQl0eGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBza2ItPmxlbjsKKwl0eGRlc2MtPmFkZHIgPSBjcHVfdG9fZWRtYWMobWRwLCBkbWFfYWRkcik7CisJdHhkZXNjLT5sZW4gID0gY3B1X3RvX2VkbWFjKG1kcCwgc2tiLT5sZW4gPDwgMTYpOwogCiAJZG1hX3dtYigpOyAvKiBUQUNUIGJpdCBtdXN0IGJlIHNldCBhZnRlciBhbGwgdGhlIGFib3ZlIHdyaXRlcyAqLwogCWlmIChlbnRyeSA+PSBtZHAtPm51bV90eF9yaW5nIC0gMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5oCmluZGV4IDUwMzgyYjEuLjcyZmNmYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguaApAQCAtMjgzLDcgKzI4Myw3IEBACiAJRE1BQ19NX1JJTlQxID0gMHgwMDAwMDAwMSwKIH07CiAKLS8qIFJlY2VpdmUgZGVzY3JpcHRvciBiaXQgKi8KKy8qIFJlY2VpdmUgZGVzY3JpcHRvciAwIGJpdHMgKi8KIGVudW0gUkRfU1RTX0JJVCB7CiAJUkRfUkFDVCA9IDB4ODAwMDAwMDAsIFJEX1JETEUgPSAweDQwMDAwMDAwLAogCVJEX1JGUDEgPSAweDIwMDAwMDAwLCBSRF9SRlAwID0gMHgxMDAwMDAwMCwKQEAgLTI5OCw2ICsyOTgsMTIgQEAKICNkZWZpbmUgUkRGRU5ECVJEX1JGUDAKICNkZWZpbmUgUkRfUkZQCShSRF9SRlAxfFJEX1JGUDApCiAKKy8qIFJlY2VpdmUgZGVzY3JpcHRvciAxIGJpdHMgKi8KK2VudW0gUkRfTEVOX0JJVCB7CisJUkRfUkZMCT0gMHgwMDAwZmZmZiwJLyogcmVjZWl2ZSBmcmFtZSAgbGVuZ3RoICovCisJUkRfUkJMCT0gMHhmZmZmMDAwMCwJLyogcmVjZWl2ZSBidWZmZXIgbGVuZ3RoICovCit9OworCiAvKiBGQ0ZUUiAqLwogZW51bSBGQ0ZUUl9CSVQgewogCUZDRlRSX1JGRjIgPSAweDAwMDQwMDAwLCBGQ0ZUUl9SRkYxID0gMHgwMDAyMDAwMCwKQEAgLTMwNyw3ICszMTMsNyBAQAogI2RlZmluZSBERUZBVUxUX0ZJRk9fRl9EX1JGRgkoRkNGVFJfUkZGMiB8IEZDRlRSX1JGRjEgfCBGQ0ZUUl9SRkYwKQogI2RlZmluZSBERUZBVUxUX0ZJRk9fRl9EX1JGRAkoRkNGVFJfUkZEMiB8IEZDRlRSX1JGRDEgfCBGQ0ZUUl9SRkQwKQogCi0vKiBUcmFuc21pdCBkZXNjcmlwdG9yIGJpdCAqLworLyogVHJhbnNtaXQgZGVzY3JpcHRvciAwIGJpdHMgKi8KIGVudW0gVERfU1RTX0JJVCB7CiAJVERfVEFDVCA9IDB4ODAwMDAwMDAsIFREX1RETEUgPSAweDQwMDAwMDAwLAogCVREX1RGUDEgPSAweDIwMDAwMDAwLCBURF9URlAwID0gMHgxMDAwMDAwMCwKQEAgLTMxNyw2ICszMjMsMTEgQEAKICNkZWZpbmUgVERGRU5ECVREX1RGUDAKICNkZWZpbmUgVERfVEZQCShURF9URlAxfFREX1RGUDApCiAKKy8qIFRyYW5zbWl0IGRlc2NyaXB0b3IgMSBiaXRzICovCitlbnVtIFREX0xFTl9CSVQgeworCVREX1RCTAk9IDB4ZmZmZjAwMDAsCS8qIHRyYW5zbWl0IGJ1ZmZlciBsZW5ndGggKi8KK307CisKIC8qIFJNQ1IgKi8KIGVudW0gUk1DUl9CSVQgewogCVJNQ1JfUk5DID0gMHgwMDAwMDAwMSwKQEAgLTQyNSwxNSArNDM2LDkgQEAKICAqLwogc3RydWN0IHNoX2V0aF90eGRlc2MgewogCXUzMiBzdGF0dXM7CQkvKiBURDAgKi8KLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1MTYgcGFkMDsJCS8qIFREMSAqLwotCXUxNiBidWZmZXJfbGVuZ3RoOwkvKiBURDEgKi8KLSNlbHNlCi0JdTE2IGJ1ZmZlcl9sZW5ndGg7CS8qIFREMSAqLwotCXUxNiBwYWQwOwkJLyogVEQxICovCi0jZW5kaWYKKwl1MzIgbGVuOwkJLyogVEQxICovCiAJdTMyIGFkZHI7CQkvKiBURDIgKi8KLQl1MzIgcGFkMTsJCS8qIHBhZGRpbmcgZGF0YSAqLworCXUzMiBwYWQwOwkJLyogcGFkZGluZyBkYXRhICovCiB9IF9fYWxpZ25lZCgyKSBfX3BhY2tlZDsKIAogLyogVGhlIHNoIGV0aGVyIFJ4IGJ1ZmZlciBkZXNjcmlwdG9ycy4KQEAgLTQ0MSwxMyArNDQ2LDcgQEAKICAqLwogc3RydWN0IHNoX2V0aF9yeGRlc2MgewogCXUzMiBzdGF0dXM7CQkvKiBSRDAgKi8KLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1MTYgZnJhbWVfbGVuZ3RoOwkvKiBSRDEgKi8KLQl1MTYgYnVmZmVyX2xlbmd0aDsJLyogUkQxICovCi0jZWxzZQotCXUxNiBidWZmZXJfbGVuZ3RoOwkvKiBSRDEgKi8KLQl1MTYgZnJhbWVfbGVuZ3RoOwkvKiBSRDEgKi8KLSNlbmRpZgorCXUzMiBsZW47CQkvKiBSRDEgKi8KIAl1MzIgYWRkcjsJCS8qIFJEMiAqLwogCXUzMiBwYWQwOwkJLyogcGFkZGluZyBkYXRhICovCiB9IF9fYWxpZ25lZCgyKSBfX3BhY2tlZDsKQEAgLTU0NiwzMSArNTQ1LDYgQEAKICNlbmRpZgogfQogCi0jZGVmaW5lIFNIX0VUSF9PRkZTRVRfSU5WQUxJRAkoKHUxNikgfjApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaF9ldGhfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBkYXRhLAotCQkJCWludCBlbnVtX2luZGV4KQotewotCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JdTE2IG9mZnNldCA9IG1kcC0+cmVnX29mZnNldFtlbnVtX2luZGV4XTsKLQotCWlmIChXQVJOX09OKG9mZnNldCA9PSBTSF9FVEhfT0ZGU0VUX0lOVkFMSUQpKQotCQlyZXR1cm47Ci0KLQlpb3dyaXRlMzIoZGF0YSwgbWRwLT5hZGRyICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgc2hfZXRoX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBlbnVtX2luZGV4KQotewotCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JdTE2IG9mZnNldCA9IG1kcC0+cmVnX29mZnNldFtlbnVtX2luZGV4XTsKLQotCWlmIChXQVJOX09OKG9mZnNldCA9PSBTSF9FVEhfT0ZGU0VUX0lOVkFMSUQpKQotCQlyZXR1cm4gfjBVOwotCi0JcmV0dXJuIGlvcmVhZDMyKG1kcC0+YWRkciArIG9mZnNldCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2hfZXRoX3RzdV9nZXRfb2Zmc2V0KHN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwLAogCQkJCQkgIGludCBlbnVtX2luZGV4KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZjEwLmMKaW5kZXggYmM2ZDIxYi4uZTZhMDg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmMTAuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWYxMC5jCkBAIC0zMjk5LDcgKzMyOTksOCBAQAogCiAJCW5ld19zcGVjLnByaW9yaXR5ID0gRUZYX0ZJTFRFUl9QUklfQVVUTzsKIAkJbmV3X3NwZWMuZmxhZ3MgPSAoRUZYX0ZJTFRFUl9GTEFHX1JYIHwKLQkJCQkgIEVGWF9GSUxURVJfRkxBR19SWF9SU1MpOworCQkJCSAgKGVmeF9yc3NfZW5hYmxlZChlZngpID8KKwkJCQkgICBFRlhfRklMVEVSX0ZMQUdfUlhfUlNTIDogMCkpOwogCQluZXdfc3BlYy5kbWFxX2lkID0gMDsKIAkJbmV3X3NwZWMucnNzX2NvbnRleHQgPSBFRlhfRklMVEVSX1JTU19DT05URVhUX0RFRkFVTFQ7CiAJCXJjID0gZWZ4X2VmMTBfZmlsdGVyX3B1c2goZWZ4LCAmbmV3X3NwZWMsCkBAIC0zOTIxLDYgKzM5MjIsNyBAQAogewogCXN0cnVjdCBlZnhfZWYxMF9maWx0ZXJfdGFibGUgKnRhYmxlID0gZWZ4LT5maWx0ZXJfc3RhdGU7CiAJc3RydWN0IGVmeF9lZjEwX2Rldl9hZGRyICphZGRyX2xpc3Q7CisJZW51bSBlZnhfZmlsdGVyX2ZsYWdzIGZpbHRlcl9mbGFnczsKIAlzdHJ1Y3QgZWZ4X2ZpbHRlcl9zcGVjIHNwZWM7CiAJdTggYmFkZHJbRVRIX0FMRU5dOwogCXVuc2lnbmVkIGludCBpLCBqOwpAQCAtMzkzNSwxMSArMzkzNywxMSBAQAogCQlhZGRyX2NvdW50ID0gdGFibGUtPmRldl91Y19jb3VudDsKIAl9CiAKKwlmaWx0ZXJfZmxhZ3MgPSBlZnhfcnNzX2VuYWJsZWQoZWZ4KSA/IEVGWF9GSUxURVJfRkxBR19SWF9SU1MgOiAwOworCiAJLyogSW5zZXJ0L3JlbmV3IGZpbHRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRkcl9jb3VudDsgaSsrKSB7Ci0JCWVmeF9maWx0ZXJfaW5pdF9yeCgmc3BlYywgRUZYX0ZJTFRFUl9QUklfQVVUTywKLQkJCQkgICBFRlhfRklMVEVSX0ZMQUdfUlhfUlNTLAotCQkJCSAgIDApOworCQllZnhfZmlsdGVyX2luaXRfcngoJnNwZWMsIEVGWF9GSUxURVJfUFJJX0FVVE8sIGZpbHRlcl9mbGFncywgMCk7CiAJCWVmeF9maWx0ZXJfc2V0X2V0aF9sb2NhbCgmc3BlYywgRUZYX0ZJTFRFUl9WSURfVU5TUEVDLAogCQkJCQkgYWRkcl9saXN0W2ldLmFkZHIpOwogCQlyYyA9IGVmeF9lZjEwX2ZpbHRlcl9pbnNlcnQoZWZ4LCAmc3BlYywgdHJ1ZSk7CkBAIC0zOTY4LDkgKzM5NzAsNyBAQAogCiAJaWYgKG11bHRpY2FzdCAmJiByb2xsYmFjaykgewogCQkvKiBBbHNvIG5lZWQgYW4gRXRoZXJuZXQgYnJvYWRjYXN0IGZpbHRlciAqLwotCQllZnhfZmlsdGVyX2luaXRfcngoJnNwZWMsIEVGWF9GSUxURVJfUFJJX0FVVE8sCi0JCQkJICAgRUZYX0ZJTFRFUl9GTEFHX1JYX1JTUywKLQkJCQkgICAwKTsKKwkJZWZ4X2ZpbHRlcl9pbml0X3J4KCZzcGVjLCBFRlhfRklMVEVSX1BSSV9BVVRPLCBmaWx0ZXJfZmxhZ3MsIDApOwogCQlldGhfYnJvYWRjYXN0X2FkZHIoYmFkZHIpOwogCQllZnhfZmlsdGVyX3NldF9ldGhfbG9jYWwoJnNwZWMsIEVGWF9GSUxURVJfVklEX1VOU1BFQywgYmFkZHIpOwogCQlyYyA9IGVmeF9lZjEwX2ZpbHRlcl9pbnNlcnQoZWZ4LCAmc3BlYywgdHJ1ZSk7CkBAIC00MDAwLDEzICs0MDAwLDE0IEBACiB7CiAJc3RydWN0IGVmeF9lZjEwX2ZpbHRlcl90YWJsZSAqdGFibGUgPSBlZngtPmZpbHRlcl9zdGF0ZTsKIAlzdHJ1Y3QgZWZ4X2VmMTBfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKKwllbnVtIGVmeF9maWx0ZXJfZmxhZ3MgZmlsdGVyX2ZsYWdzOwogCXN0cnVjdCBlZnhfZmlsdGVyX3NwZWMgc3BlYzsKIAl1OCBiYWRkcltFVEhfQUxFTl07CiAJaW50IHJjOwogCi0JZWZ4X2ZpbHRlcl9pbml0X3J4KCZzcGVjLCBFRlhfRklMVEVSX1BSSV9BVVRPLAotCQkJICAgRUZYX0ZJTFRFUl9GTEFHX1JYX1JTUywKLQkJCSAgIDApOworCWZpbHRlcl9mbGFncyA9IGVmeF9yc3NfZW5hYmxlZChlZngpID8gRUZYX0ZJTFRFUl9GTEFHX1JYX1JTUyA6IDA7CisKKwllZnhfZmlsdGVyX2luaXRfcngoJnNwZWMsIEVGWF9GSUxURVJfUFJJX0FVVE8sIGZpbHRlcl9mbGFncywgMCk7CiAKIAlpZiAobXVsdGljYXN0KQogCQllZnhfZmlsdGVyX3NldF9tY19kZWYoJnNwZWMpOwpAQCAtNDAyMyw4ICs0MDI0LDcgQEAKIAkJaWYgKCFuaWNfZGF0YS0+d29ya2Fyb3VuZF8yNjgwNykgewogCQkJLyogQWxzbyBuZWVkIGFuIEV0aGVybmV0IGJyb2FkY2FzdCBmaWx0ZXIgKi8KIAkJCWVmeF9maWx0ZXJfaW5pdF9yeCgmc3BlYywgRUZYX0ZJTFRFUl9QUklfQVVUTywKLQkJCQkJICAgRUZYX0ZJTFRFUl9GTEFHX1JYX1JTUywKLQkJCQkJICAgMCk7CisJCQkJCSAgIGZpbHRlcl9mbGFncywgMCk7CiAJCQlldGhfYnJvYWRjYXN0X2FkZHIoYmFkZHIpOwogCQkJZWZ4X2ZpbHRlcl9zZXRfZXRoX2xvY2FsKCZzcGVjLCBFRlhfRklMVEVSX1ZJRF9VTlNQRUMsCiAJCQkJCQkgYmFkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5jCmluZGV4IGQyODhmMWMuLmEzYzQyYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmMKQEAgLTM0MjIsNyArMzQyMiw3IEBACiAgKiB3aXRoIG91ciByZXF1ZXN0IGZvciBzbG90IHJlc2V0IHRoZSBtbWlvX2VuYWJsZWQgY2FsbGJhY2sgd2lsbCBuZXZlciBiZQogICogY2FsbGVkLCBhbmQgdGhlIGxpbmtfcmVzZXQgY2FsbGJhY2sgaXMgbm90IHVzZWQgYnkgQUVSIG9yIEVFSCBtZWNoYW5pc21zLgogICovCi1zdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBlZnhfZXJyX2hhbmRsZXJzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgZWZ4X2Vycl9oYW5kbGVycyA9IHsKIAkuZXJyb3JfZGV0ZWN0ZWQgPSBlZnhfaW9fZXJyb3JfZGV0ZWN0ZWQsCiAJLnNsb3RfcmVzZXQJPSBlZnhfaW9fc2xvdF9yZXNldCwKIAkucmVzdW1lCQk9IGVmeF9pb19yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZWZ4LmgKaW5kZXggMWFhZjc2Yy4uMTA4Mjc0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2VmeC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9lZnguaApAQCAtNzYsNiArNzYsMTEgQEAKICNkZWZpbmUgRUZYX1RYUV9NQVhfRU5UKGVmeCkJKEVGWF9XT1JLQVJPVU5EXzM1Mzg4KGVmeCkgPyBcCiAJCQkJIEVGWF9NQVhfRE1BUV9TSVpFIC8gMiA6IEVGWF9NQVhfRE1BUV9TSVpFKQogCitzdGF0aWMgaW5saW5lIGJvb2wgZWZ4X3Jzc19lbmFibGVkKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJcmV0dXJuIGVmeC0+cnNzX3NwcmVhZCA+IDE7Cit9CisKIC8qIEZpbHRlcnMgKi8KIAogdm9pZCBlZnhfbWFjX3JlY29uZmlndXJlKHN0cnVjdCBlZnhfbmljICplZngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhcmNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFyY2guYwppbmRleCA1YTFjNWE4Li4xMzNlOWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFyY2guYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFyY2guYwpAQCAtMjI0Miw3ICsyMjQyLDcgQEAKIAkgKi8KIAlzcGVjLT5wcmlvcml0eSA9IEVGWF9GSUxURVJfUFJJX0FVVE87CiAJc3BlYy0+ZmxhZ3MgPSAoRUZYX0ZJTFRFUl9GTEFHX1JYIHwKLQkJICAgICAgIChlZngtPm5fcnhfY2hhbm5lbHMgPiAxID8gRUZYX0ZJTFRFUl9GTEFHX1JYX1JTUyA6IDApIHwKKwkJICAgICAgIChlZnhfcnNzX2VuYWJsZWQoZWZ4KSA/IEVGWF9GSUxURVJfRkxBR19SWF9SU1MgOiAwKSB8CiAJCSAgICAgICAoZWZ4LT5yeF9zY2F0dGVyID8gRUZYX0ZJTFRFUl9GTEFHX1JYX1NDQVRURVIgOiAwKSk7CiAJc3BlYy0+ZG1hcV9pZCA9IDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvdHhjNDMxMjhfcGh5LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvdHhjNDMxMjhfcGh5LmMKaW5kZXggM2Q1ZWUzMi4uMTk0ZjY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3R4YzQzMTI4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy90eGM0MzEyOF9waHkuYwpAQCAtNDE4LDcgKzQxOCw3IEBACiAKIAl2YWwgfD0gKDEgPDwgVFhDX0dMQ01EX0xNVFNXUlNUX0xCTik7CiAJZWZ4X21kaW9fd3JpdGUoZWZ4LCBtbWQsIFRYQ19HTFJHU19HTENNRCwgdmFsKTsKLQl3aGlsZSAodHJpZXMtLSkgeworCXdoaWxlICgtLXRyaWVzKSB7CiAJCXZhbCA9IGVmeF9tZGlvX3JlYWQoZWZ4LCBtbWQsIFRYQ19HTFJHU19HTENNRCk7CiAJCWlmICghKHZhbCAmICgxIDw8IFRYQ19HTENNRF9MTVRTV1JTVF9MQk4pKSkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jCmluZGV4IGM4NjBjOTAuLjIxOWE5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMKQEAgLTgwOSwyMiArODA5LDE3IEBACiAKIHN0YXRpYyBpbnQgc21zYzkxMXhfcGh5X3Jlc2V0KHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKIHsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldiA9IHBkYXRhLT5waHlfZGV2OwogCXVuc2lnbmVkIGludCB0ZW1wOwogCXVuc2lnbmVkIGludCBpID0gMTAwMDAwOwogCi0JQlVHX09OKCFwaHlfZGV2KTsKLQlCVUdfT04oIXBoeV9kZXYtPmJ1cyk7Ci0KLQlTTVNDX1RSQUNFKHBkYXRhLCBodywgIlBlcmZvcm1pbmcgUEhZIEJDUiBSZXNldCIpOwotCXNtc2M5MTF4X21paV93cml0ZShwaHlfZGV2LT5idXMsIHBoeV9kZXYtPmFkZHIsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKKwl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIFBNVF9DVFJMKTsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIFBNVF9DVFJMLCB0ZW1wIHwgUE1UX0NUUkxfUEhZX1JTVF8pOwogCWRvIHsKIAkJbXNsZWVwKDEpOwotCQl0ZW1wID0gc21zYzkxMXhfbWlpX3JlYWQocGh5X2Rldi0+YnVzLCBwaHlfZGV2LT5hZGRyLAotCQkJTUlJX0JNQ1IpOwotCX0gd2hpbGUgKChpLS0pICYmICh0ZW1wICYgQk1DUl9SRVNFVCkpOworCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIFBNVF9DVFJMKTsKKwl9IHdoaWxlICgoaS0tKSAmJiAodGVtcCAmIFBNVF9DVFJMX1BIWV9SU1RfKSk7CiAKLQlpZiAodGVtcCAmIEJNQ1JfUkVTRVQpIHsKKwlpZiAodW5saWtlbHkodGVtcCAmIFBNVF9DVFJMX1BIWV9SU1RfKSkgewogCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiUEhZIHJlc2V0IGZhaWxlZCB0byBjb21wbGV0ZSIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0yMjk2LDcgKzIyOTEsNyBAQAogCX0KIAogCS8qIFJlc2V0IHRoZSBMQU45MTF4ICovCi0JaWYgKHNtc2M5MTF4X3NvZnRfcmVzZXQocGRhdGEpKQorCWlmIChzbXNjOTExeF9waHlfcmVzZXQocGRhdGEpIHx8IHNtc2M5MTF4X3NvZnRfcmVzZXQocGRhdGEpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWRldi0+ZmxhZ3MgfD0gSUZGX01VTFRJQ0FTVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYwppbmRleCA5ZDg5YmRiLi44MmRlNjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jCkBAIC0zMzcsMTEgKzMzNywxMSBAQAogCQkJICAgICBRU0dNSUlfUEhZX1JYX1NJR05BTF9ERVRFQ1RfRU4gfAogCQkJICAgICBRU0dNSUlfUEhZX1RYX0RSSVZFUl9FTiB8CiAJCQkgICAgIFFTR01JSV9QSFlfUVNHTUlJX0VOIHwKLQkJCSAgICAgMHg0IDw8IFFTR01JSV9QSFlfUEhBU0VfTE9PUF9HQUlOX09GRlNFVCB8Ci0JCQkgICAgIDB4MyA8PCBRU0dNSUlfUEhZX1JYX0RDX0JJQVNfT0ZGU0VUIHwKLQkJCSAgICAgMHgxIDw8IFFTR01JSV9QSFlfUlhfSU5QVVRfRVFVX09GRlNFVCB8Ci0JCQkgICAgIDB4MiA8PCBRU0dNSUlfUEhZX0NEUl9QSV9TTEVXX09GRlNFVCB8Ci0JCQkgICAgIDB4QyA8PCBRU0dNSUlfUEhZX1RYX0RSVl9BTVBfT0ZGU0VUKTsKKwkJCSAgICAgMHg0dWwgPDwgUVNHTUlJX1BIWV9QSEFTRV9MT09QX0dBSU5fT0ZGU0VUIHwKKwkJCSAgICAgMHgzdWwgPDwgUVNHTUlJX1BIWV9SWF9EQ19CSUFTX09GRlNFVCB8CisJCQkgICAgIDB4MXVsIDw8IFFTR01JSV9QSFlfUlhfSU5QVVRfRVFVX09GRlNFVCB8CisJCQkgICAgIDB4MnVsIDw8IFFTR01JSV9QSFlfQ0RSX1BJX1NMRVdfT0ZGU0VUIHwKKwkJCSAgICAgMHhDdWwgPDwgUVNHTUlJX1BIWV9UWF9EUlZfQU1QX09GRlNFVCk7CiAJfQogCiAJcGxhdF9kYXQtPmhhc19nbWFjID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0aS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RpLmMKaW5kZXggN2Y2ZjRhNC4uNThjMDVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RpLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RpLmMKQEAgLTI5OSwxNiArMjk5LDE3IEBACiAJaWYgKElTX1BIWV9JRl9NT0RFX0dCSVQoZHdtYWMtPmludGVyZmFjZSkpIHsKIAkJY29uc3QgY2hhciAqcnM7CiAKKwkJZHdtYWMtPnR4X3JldGltZV9zcmMgPSBUWF9SRVRJTUVfU1JDX0NMS0dFTjsKKwogCQllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgInN0LHR4LXJldGltZS1zcmMiLCAmcnMpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJZGV2X3dhcm4oZGV2LCAiVXNlIGludGVybmFsIGNsb2NrIHNvdXJjZVxuIik7Ci0JCQlkd21hYy0+dHhfcmV0aW1lX3NyYyA9IFRYX1JFVElNRV9TUkNfQ0xLR0VOOwotCQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wKHJzLCAiY2xrXzEyNSIpKSB7Ci0JCQlkd21hYy0+dHhfcmV0aW1lX3NyYyA9IFRYX1JFVElNRV9TUkNfQ0xLXzEyNTsKLQkJfSBlbHNlIGlmICghc3RyY2FzZWNtcChycywgInR4Y2xrIikpIHsKLQkJCWR3bWFjLT50eF9yZXRpbWVfc3JjID0gVFhfUkVUSU1FX1NSQ19UWENMSzsKKwkJfSBlbHNlIHsKKwkJCWlmICghc3RyY2FzZWNtcChycywgImNsa18xMjUiKSkKKwkJCQlkd21hYy0+dHhfcmV0aW1lX3NyYyA9IFRYX1JFVElNRV9TUkNfQ0xLXzEyNTsKKwkJCWVsc2UgaWYgKCFzdHJjYXNlY21wKHJzLCAidHhjbGsiKSkKKwkJCQlkd21hYy0+dHhfcmV0aW1lX3NyYyA9IFRYX1JFVElNRV9TUkNfVFhDTEs7CiAJCX0KLQogCQlkd21hYy0+c3BlZWQgPSBTUEVFRF8xMDAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VueGkuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bnhpLmMKaW5kZXggNTJiOGVkOS4uYWRmZjQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VueGkuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW54aS5jCkBAIC0xNTMsNyArMTUzLDExIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiBzdG1tYWNfZHZyX3Byb2JlKCZwZGV2LT5kZXYsIHBsYXRfZGF0LCAmc3RtbWFjX3Jlcyk7CisJcmV0ID0gc3RtbWFjX2R2cl9wcm9iZSgmcGRldi0+ZGV2LCBwbGF0X2RhdCwgJnN0bW1hY19yZXMpOworCWlmIChyZXQpCisJCXN1bjdpX2dtYWNfZXhpdChwZGV2LCBwbGF0X2RhdC0+YnNwX3ByaXYpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VuN2lfZHdtYWNfbWF0Y2hbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IDY0ZDhhYTQuLmE1Yjg2OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJCQlwcml2LT5jbGtfY3NyID0gU1RNTUFDX0NTUl8xMDBfMTUwTTsKIAkJZWxzZSBpZiAoKGNsa19yYXRlID49IENTUl9GXzE1ME0pICYmIChjbGtfcmF0ZSA8IENTUl9GXzI1ME0pKQogCQkJcHJpdi0+Y2xrX2NzciA9IFNUTU1BQ19DU1JfMTUwXzI1ME07Ci0JCWVsc2UgaWYgKChjbGtfcmF0ZSA+PSBDU1JfRl8yNTBNKSAmJiAoY2xrX3JhdGUgPCBDU1JfRl8zMDBNKSkKKwkJZWxzZSBpZiAoKGNsa19yYXRlID49IENTUl9GXzI1ME0pICYmIChjbGtfcmF0ZSA8PSBDU1JfRl8zMDBNKSkKIAkJCXByaXYtPmNsa19jc3IgPSBTVE1NQUNfQ1NSXzI1MF8zMDBNOwogCX0KIH0KQEAgLTIyMzIsNiArMjIzMiwxMiBAQAogCiAJCQlmcmFtZV9sZW4gPSBwcml2LT5ody0+ZGVzYy0+Z2V0X3J4X2ZyYW1lX2xlbihwLCBjb2UpOwogCisJCQkvKiAgY2hlY2sgaWYgZnJhbWVfbGVuIGZpdHMgdGhlIHByZWFsbG9jYXRlZCBtZW1vcnkgKi8KKwkJCWlmIChmcmFtZV9sZW4gPiBwcml2LT5kbWFfYnVmX3N6KSB7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCS8qIEFDUyBpcyBzZXQ7IEdNQUMgY29yZSBzdHJpcHMgUEFEL0ZDUyBmb3IgSUVFRSA4MDIuMwogCQkJICogVHlwZSBmcmFtZXMgKExMQy9MTEMtU05BUCkKIAkJCSAqLwpAQCAtMzA0MCw4ICszMDQ2LDYgQEAKIAlwcml2LT5ody0+ZG1hLT5zdG9wX3R4KHByaXYtPmlvYWRkcik7CiAJcHJpdi0+aHctPmRtYS0+c3RvcF9yeChwcml2LT5pb2FkZHIpOwogCi0Jc3RtbWFjX2NsZWFyX2Rlc2NyaXB0b3JzKHByaXYpOwotCiAJLyogRW5hYmxlIFBvd2VyIGRvd24gbW9kZSBieSBwcm9ncmFtbWluZyB0aGUgUE1UIHJlZ3MgKi8KIAlpZiAoZGV2aWNlX21heV93YWtldXAocHJpdi0+ZGV2aWNlKSkgewogCQlwcml2LT5ody0+bWFjLT5wbXQocHJpdi0+aHcsIHByaXYtPndvbG9wdHMpOwpAQCAtMzA5OSw5ICszMTAzLDE1IEBACiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOwogCi0JaW5pdF9kbWFfZGVzY19yaW5ncyhuZGV2LCBHRlBfQVRPTUlDKTsKKwlwcml2LT5jdXJfcnggPSAwOworCXByaXYtPmRpcnR5X3J4ID0gMDsKKwlwcml2LT5kaXJ0eV90eCA9IDA7CisJcHJpdi0+Y3VyX3R4ID0gMDsKKwlzdG1tYWNfY2xlYXJfZGVzY3JpcHRvcnMocHJpdik7CisKIAlzdG1tYWNfaHdfc2V0dXAobmRldiwgZmFsc2UpOwogCXN0bW1hY19pbml0X3R4X2NvYWxlc2NlKHByaXYpOworCXN0bW1hY19zZXRfcnhfbW9kZShuZGV2KTsKIAogCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMKaW5kZXggZWJmNmFiYy4uYmJhNjcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jCkBAIC0xMzgsNyArMTM4LDYgQEAKIAogI2lmZGVmIENPTkZJR19PRgogCWlmIChwcml2LT5kZXZpY2UtPm9mX25vZGUpIHsKLQkJaW50IHJlc2V0X2dwaW8sIGFjdGl2ZV9sb3c7CiAKIAkJaWYgKGRhdGEtPnJlc2V0X2dwaW8gPCAwKSB7CiAJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHJpdi0+ZGV2aWNlLT5vZl9ub2RlOwpAQCAtMTU0LDI0ICsxNTMsMjMgQEAKIAkJCQkJCSJzbnBzLHJlc2V0LWFjdGl2ZS1sb3ciKTsKIAkJCW9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5wLAogCQkJCSJzbnBzLHJlc2V0LWRlbGF5cy11cyIsIGRhdGEtPmRlbGF5cywgMyk7CisKKwkJCWlmIChncGlvX3JlcXVlc3QoZGF0YS0+cmVzZXRfZ3BpbywgIm1kaW8tcmVzZXQiKSkKKwkJCQlyZXR1cm4gMDsKIAkJfQogCi0JCXJlc2V0X2dwaW8gPSBkYXRhLT5yZXNldF9ncGlvOwotCQlhY3RpdmVfbG93ID0gZGF0YS0+YWN0aXZlX2xvdzsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGRhdGEtPnJlc2V0X2dwaW8sCisJCQkJICAgICAgZGF0YS0+YWN0aXZlX2xvdyA/IDEgOiAwKTsKKwkJaWYgKGRhdGEtPmRlbGF5c1swXSkKKwkJCW1zbGVlcChESVZfUk9VTkRfVVAoZGF0YS0+ZGVsYXlzWzBdLCAxMDAwKSk7CiAKLQkJaWYgKCFncGlvX3JlcXVlc3QocmVzZXRfZ3BpbywgIm1kaW8tcmVzZXQiKSkgewotCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHJlc2V0X2dwaW8sIGFjdGl2ZV9sb3cgPyAxIDogMCk7Ci0JCQlpZiAoZGF0YS0+ZGVsYXlzWzBdKQotCQkJCW1zbGVlcChESVZfUk9VTkRfVVAoZGF0YS0+ZGVsYXlzWzBdLCAxMDAwKSk7CisJCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnJlc2V0X2dwaW8sIGRhdGEtPmFjdGl2ZV9sb3cgPyAwIDogMSk7CisJCWlmIChkYXRhLT5kZWxheXNbMV0pCisJCQltc2xlZXAoRElWX1JPVU5EX1VQKGRhdGEtPmRlbGF5c1sxXSwgMTAwMCkpOwogCi0JCQlncGlvX3NldF92YWx1ZShyZXNldF9ncGlvLCBhY3RpdmVfbG93ID8gMCA6IDEpOwotCQkJaWYgKGRhdGEtPmRlbGF5c1sxXSkKLQkJCQltc2xlZXAoRElWX1JPVU5EX1VQKGRhdGEtPmRlbGF5c1sxXSwgMTAwMCkpOwotCi0JCQlncGlvX3NldF92YWx1ZShyZXNldF9ncGlvLCBhY3RpdmVfbG93ID8gMSA6IDApOwotCQkJaWYgKGRhdGEtPmRlbGF5c1syXSkKLQkJCQltc2xlZXAoRElWX1JPVU5EX1VQKGRhdGEtPmRlbGF5c1syXSwgMTAwMCkpOwotCQl9CisJCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnJlc2V0X2dwaW8sIGRhdGEtPmFjdGl2ZV9sb3cgPyAxIDogMCk7CisJCWlmIChkYXRhLT5kZWxheXNbMl0pCisJCQltc2xlZXAoRElWX1JPVU5EX1VQKGRhdGEtPmRlbGF5c1syXSwgMTAwMCkpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LWNvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy1jb21tb24uYwppbmRleCBjMDhiZTYyLi4xNTYyYWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3ctY29tbW9uLmMKQEAgLTc4LDYgKzc4LDkgQEAKIAogaW50IHRpX2NtX2dldF9tYWNpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbGF2ZSwgdTggKm1hY19hZGRyKQogeworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInRpLGRtODE0OCIpKQorCQlyZXR1cm4gY3Bzd19hbTMzeHhfY21fZ2V0X21hY2lkKGRldiwgMHg2MzAsIHNsYXZlLCBtYWNfYWRkcik7CisKIAlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJ0aSxhbTMzeHgiKSkKIAkJcmV0dXJuIGNwc3dfYW0zM3h4X2NtX2dldF9tYWNpZChkZXYsIDB4NjMwLCBzbGF2ZSwgbWFjX2FkZHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMKaW5kZXggNDhiOTJjOS4uZmM5NTgwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYwpAQCAtMjAyNiw0NSArMjAyNiw1NCBAQAogCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgc2xhdmVfbm9kZSkgewogCQlzdHJ1Y3QgY3Bzd19zbGF2ZV9kYXRhICpzbGF2ZV9kYXRhID0gZGF0YS0+c2xhdmVfZGF0YSArIGk7CiAJCWNvbnN0IHZvaWQgKm1hY19hZGRyID0gTlVMTDsKLQkJdTMyIHBoeWlkOwogCQlpbnQgbGVucDsKIAkJY29uc3QgX19iZTMyICpwYXJwOwotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW9fbm9kZTsKLQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWRpbzsKIAogCQkvKiBUaGlzIGlzIG5vIHNsYXZlIGNoaWxkIG5vZGUsIGNvbnRpbnVlICovCiAJCWlmIChzdHJjbXAoc2xhdmVfbm9kZS0+bmFtZSwgInNsYXZlIikpCiAJCQljb250aW51ZTsKIAogCQlwcml2LT5waHlfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUoc2xhdmVfbm9kZSwgInBoeS1oYW5kbGUiLCAwKTsKKwkJcGFycCA9IG9mX2dldF9wcm9wZXJ0eShzbGF2ZV9ub2RlLCAicGh5X2lkIiwgJmxlbnApOwogCQlpZiAob2ZfcGh5X2lzX2ZpeGVkX2xpbmsoc2xhdmVfbm9kZSkpIHsKLQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwZDsKKwkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25vZGU7CisJCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldjsKIAorCQkJLyogSW4gdGhlIGNhc2Ugb2YgYSBmaXhlZCBQSFksIHRoZSBEVCBub2RlIGFzc29jaWF0ZWQKKwkJCSAqIHRvIHRoZSBQSFkgaXMgdGhlIEV0aGVybmV0IE1BQyBEVCBub2RlLgorCQkJICovCiAJCQlyZXQgPSBvZl9waHlfcmVnaXN0ZXJfZml4ZWRfbGluayhzbGF2ZV9ub2RlKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKLQkJCXBkID0gb2ZfcGh5X2ZpbmRfZGV2aWNlKHNsYXZlX25vZGUpOwotCQkJaWYgKCFwZCkKKwkJCXBoeV9ub2RlID0gb2Zfbm9kZV9nZXQoc2xhdmVfbm9kZSk7CisJCQlwaHlfZGV2ID0gb2ZfcGh5X2ZpbmRfZGV2aWNlKHBoeV9ub2RlKTsKKwkJCWlmICghcGh5X2RldikKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCXNucHJpbnRmKHNsYXZlX2RhdGEtPnBoeV9pZCwgc2l6ZW9mKHNsYXZlX2RhdGEtPnBoeV9pZCksCi0JCQkJIFBIWV9JRF9GTVQsIHBkLT5idXMtPmlkLCBwZC0+cGh5X2lkKTsKKwkJCQkgUEhZX0lEX0ZNVCwgcGh5X2Rldi0+YnVzLT5pZCwgcGh5X2Rldi0+YWRkcik7CisJCX0gZWxzZSBpZiAocGFycCkgeworCQkJdTMyIHBoeWlkOworCQkJc3RydWN0IGRldmljZV9ub2RlICptZGlvX25vZGU7CisJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptZGlvOworCisJCQlpZiAobGVucCAhPSAoc2l6ZW9mKF9fYmUzMikgKiAyKSkgeworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgc2xhdmVbJWRdIHBoeV9pZCBwcm9wZXJ0eVxuIiwgaSk7CisJCQkJZ290byBub19waHlfc2xhdmU7CisJCQl9CisJCQltZGlvX25vZGUgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZShiZTMyX3RvX2NwdXAocGFycCkpOworCQkJcGh5aWQgPSBiZTMyX3RvX2NwdXAocGFycCsxKTsKKwkJCW1kaW8gPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG1kaW9fbm9kZSk7CisJCQlvZl9ub2RlX3B1dChtZGlvX25vZGUpOworCQkJaWYgKCFtZGlvKSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTWlzc2luZyBtZGlvIHBsYXRmb3JtIGRldmljZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlzbnByaW50ZihzbGF2ZV9kYXRhLT5waHlfaWQsIHNpemVvZihzbGF2ZV9kYXRhLT5waHlfaWQpLAorCQkJCSBQSFlfSURfRk1ULCBtZGlvLT5uYW1lLCBwaHlpZCk7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBzbGF2ZVslZF0gcGh5X2lkIG9yIGZpeGVkLWxpbmsgcHJvcGVydHlcbiIsIGkpOwogCQkJZ290byBub19waHlfc2xhdmU7CiAJCX0KLQkJcGFycCA9IG9mX2dldF9wcm9wZXJ0eShzbGF2ZV9ub2RlLCAicGh5X2lkIiwgJmxlbnApOwotCQlpZiAoKHBhcnAgPT0gTlVMTCkgfHwgKGxlbnAgIT0gKHNpemVvZih2b2lkICopICogMikpKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNaXNzaW5nIHNsYXZlWyVkXSBwaHlfaWQgcHJvcGVydHlcbiIsIGkpOwotCQkJZ290byBub19waHlfc2xhdmU7Ci0JCX0KLQkJbWRpb19ub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoYmUzMl90b19jcHVwKHBhcnApKTsKLQkJcGh5aWQgPSBiZTMyX3RvX2NwdXAocGFycCsxKTsKLQkJbWRpbyA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobWRpb19ub2RlKTsKLQkJb2Zfbm9kZV9wdXQobWRpb19ub2RlKTsKLQkJaWYgKCFtZGlvKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNaXNzaW5nIG1kaW8gcGxhdGZvcm0gZGV2aWNlXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXNucHJpbnRmKHNsYXZlX2RhdGEtPnBoeV9pZCwgc2l6ZW9mKHNsYXZlX2RhdGEtPnBoeV9pZCksCi0JCQkgUEhZX0lEX0ZNVCwgbWRpby0+bmFtZSwgcGh5aWQpOwogCQlzbGF2ZV9kYXRhLT5waHlfaWYgPSBvZl9nZXRfcGh5X21vZGUoc2xhdmVfbm9kZSk7CiAJCWlmIChzbGF2ZV9kYXRhLT5waHlfaWYgPCAwKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNaXNzaW5nIG9yIG1hbGZvcm1lZCBzbGF2ZVslZF0gcGh5LW1vZGUgcHJvcGVydHlcbiIsCkBAIC0yNDE4LDcgKzI0MjcsNyBAQAogCW5kZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CiAJaWYgKG5kZXYtPmlycSA8IDApIHsKIAkJZGV2X2Vycihwcml2LT5kZXYsICJlcnJvciBnZXR0aW5nIGlycSByZXNvdXJjZVxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7CisJCXJldCA9IG5kZXYtPmlycTsKIAkJZ290byBjbGVhbl9hbGVfcmV0OwogCX0KIApAQCAtMjQzOSw4ICsyNDQ4LDEwIEBACiAKIAkvKiBSWCBJUlEgKi8KIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwotCWlmIChpcnEgPCAwKQorCWlmIChpcnEgPCAwKSB7CisJCXJldCA9IGlycTsKIAkJZ290byBjbGVhbl9hbGVfcmV0OworCX0KIAogCXByaXYtPmlycXNfdGFibGVbMF0gPSBpcnE7CiAJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIGNwc3dfcnhfaW50ZXJydXB0LApAQCAtMjQ1Miw4ICsyNDYzLDEwIEBACiAKIAkvKiBUWCBJUlEgKi8KIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOwotCWlmIChpcnEgPCAwKQorCWlmIChpcnEgPCAwKSB7CisJCXJldCA9IGlycTsKIAkJZ290byBjbGVhbl9hbGVfcmV0OworCX0KIAogCXByaXYtPmlycXNfdGFibGVbMV0gPSBpcnE7CiAJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIGNwc3dfdHhfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL3ZpYS12ZWxvY2l0eS5jCmluZGV4IGFlNjhhZmQuLmYzODY5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmMKQEAgLTM0NSwxMyArMzQ1LDYgQEAKICovCiBWRUxPQ0lUWV9QQVJBTShzcGVlZF9kdXBsZXgsICJTZXR0aW5nIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG1vZGUiKTsKIAotI2RlZmluZSBWQUxfUEtUX0xFTl9ERUYgICAgIDAKLS8qIFZhbFBrdExlbltdIGlzIHVzZWQgZm9yIHNldHRpbmcgdGhlIGNoZWNrc3VtIG9mZmxvYWQgYWJpbGl0eSBvZiBOSUMuCi0gICAwOiBSZWNlaXZlIGZyYW1lIHdpdGggaW52YWxpZCBsYXllciAyIGxlbmd0aCAoRGVmYXVsdCkKLSAgIDE6IERyb3AgZnJhbWUgd2l0aCBpbnZhbGlkIGxheWVyIDIgbGVuZ3RoCi0qLwotVkVMT0NJVFlfUEFSQU0oVmFsUGt0TGVuLCAiUmVjZWl2aW5nIG9yIERyb3AgaW52YWxpZCA4MDIuMyBmcmFtZSIpOwotCiAjZGVmaW5lIFdPTF9PUFRfREVGICAgICAwCiAjZGVmaW5lIFdPTF9PUFRfTUlOICAgICAwCiAjZGVmaW5lIFdPTF9PUFRfTUFYICAgICA3CkBAIC00OTQsNyArNDg3LDYgQEAKIAogCXZlbG9jaXR5X3NldF9pbnRfb3B0KCZvcHRzLT5mbG93X2NudGwsIGZsb3dfY29udHJvbFtpbmRleF0sIEZMT1dfQ05UTF9NSU4sIEZMT1dfQ05UTF9NQVgsIEZMT1dfQ05UTF9ERUYsICJmbG93X2NvbnRyb2wiLCBkZXZuYW1lKTsKIAl2ZWxvY2l0eV9zZXRfYm9vbF9vcHQoJm9wdHMtPmZsYWdzLCBJUF9ieXRlX2FsaWduW2luZGV4XSwgSVBfQUxJR19ERUYsIFZFTE9DSVRZX0ZMQUdTX0lQX0FMSUdOLCAiSVBfYnl0ZV9hbGlnbiIsIGRldm5hbWUpOwotCXZlbG9jaXR5X3NldF9ib29sX29wdCgmb3B0cy0+ZmxhZ3MsIFZhbFBrdExlbltpbmRleF0sIFZBTF9QS1RfTEVOX0RFRiwgVkVMT0NJVFlfRkxBR1NfVkFMX1BLVF9MRU4sICJWYWxQa3RMZW4iLCBkZXZuYW1lKTsKIAl2ZWxvY2l0eV9zZXRfaW50X29wdCgoaW50ICopICZvcHRzLT5zcGRfZHB4LCBzcGVlZF9kdXBsZXhbaW5kZXhdLCBNRURfTE5LX01JTiwgTUVEX0xOS19NQVgsIE1FRF9MTktfREVGLCAiTWVkaWEgbGluayBtb2RlIiwgZGV2bmFtZSk7CiAJdmVsb2NpdHlfc2V0X2ludF9vcHQoJm9wdHMtPndvbF9vcHRzLCB3b2xfb3B0c1tpbmRleF0sIFdPTF9PUFRfTUlOLCBXT0xfT1BUX01BWCwgV09MX09QVF9ERUYsICJXYWtlIE9uIExhbiBvcHRpb25zIiwgZGV2bmFtZSk7CiAJb3B0cy0+bnVtcnggPSAob3B0cy0+bnVtcnggJiB+Myk7CkBAIC0yMDU1LDggKzIwNDcsOSBAQAogCWludCBwa3RfbGVuID0gbGUxNl90b19jcHUocmQtPnJkZXNjMC5sZW4pICYgMHgzZmZmOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlpZiAocmQtPnJkZXNjMC5SU1IgJiAoUlNSX1NUUCB8IFJTUl9FRFApKSB7Ci0JCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfVkVSQk9TRSwgS0VSTl9FUlIgIiAlcyA6IHRoZSByZWNlaXZlZCBmcmFtZSBzcGFucyBtdWx0aXBsZSBSRHMuXG4iLCB2cHRyLT5uZXRkZXYtPm5hbWUpOworCWlmICh1bmxpa2VseShyZC0+cmRlc2MwLlJTUiAmIChSU1JfU1RQIHwgUlNSX0VEUCB8IFJTUl9STCkpKSB7CisJCWlmIChyZC0+cmRlc2MwLlJTUiAmIChSU1JfU1RQIHwgUlNSX0VEUCkpCisJCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX1ZFUkJPU0UsIEtFUk5fRVJSICIgJXMgOiB0aGUgcmVjZWl2ZWQgZnJhbWUgc3BhbnMgbXVsdGlwbGUgUkRzLlxuIiwgdnB0ci0+bmV0ZGV2LT5uYW1lKTsKIAkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjA2OSwxNyArMjA2Miw2IEBACiAJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodnB0ci0+ZGV2LCByZF9pbmZvLT5za2JfZG1hLAogCQkJCSAgICB2cHRyLT5yeC5idWZfc3osIERNQV9GUk9NX0RFVklDRSk7CiAKLQkvKgotCSAqCURyb3AgZnJhbWUgbm90IG1lZXRpbmcgSUVFRSA4MDIuMwotCSAqLwotCi0JaWYgKHZwdHItPmZsYWdzICYgVkVMT0NJVFlfRkxBR1NfVkFMX1BLVF9MRU4pIHsKLQkJaWYgKHJkLT5yZGVzYzAuUlNSICYgUlNSX1JMKSB7Ci0JCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KIAl2ZWxvY2l0eV9yeF9jc3VtKHJkLCBza2IpOwogCiAJaWYgKHZlbG9jaXR5X3J4X2NvcHkoJnNrYiwgcGt0X2xlbiwgdnB0cikgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mamVzL2ZqZXNfaHcuYyBiL2RyaXZlcnMvbmV0L2ZqZXMvZmplc19ody5jCmluZGV4IGJiOGI1MzAuLmIxMDNhZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZqZXMvZmplc19ody5jCisrKyBiL2RyaXZlcnMvbmV0L2ZqZXMvZmplc19ody5jCkBAIC01OTksNyArNTk5LDcgQEAKIAkJRkpFU19DTURfUkVRX1JFU19DT0RFX0JVU1kpICYmCiAJICAgICAgICh0aW1lb3V0ID4gMCkpIHsKIAkJbXNsZWVwKDIwMCArIGh3LT5teV9lcGlkICogMjApOwotCQkJdGltZW91dCAtPSAoMjAwICsgaHctPm15X2VwaWQgKiAyMCk7CisJCXRpbWVvdXQgLT0gKDIwMCArIGh3LT5teV9lcGlkICogMjApOwogCiAJCXJlc19idWYtPnVuc2hhcmVfYnVmZmVyLmxlbmd0aCA9IDA7CiAJCXJlc19idWYtPnVuc2hhcmVfYnVmZmVyLmNvZGUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2VuZXZlLmMgYi9kcml2ZXJzL25ldC9nZW5ldmUuYwppbmRleCBkZTVjMzBjLi41OGVmZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9nZW5ldmUuYworKysgYi9kcml2ZXJzL25ldC9nZW5ldmUuYwpAQCAtOTY3LDggKzk2Nyw2IEBACiAJZXJyID0gdWRwX3R1bm5lbDZfeG1pdF9za2IoZHN0LCBnczYtPnNvY2stPnNrLCBza2IsIGRldiwKIAkJCQkgICAmZmw2LnNhZGRyLCAmZmw2LmRhZGRyLCBwcmlvLCB0dGwsCiAJCQkJICAgc3BvcnQsIGdlbmV2ZS0+ZHN0X3BvcnQsICF1ZHBfY3N1bSk7Ci0KLQlpcHR1bm5lbF94bWl0X3N0YXRzKGVyciwgJmRldi0+c3RhdHMsIGRldi0+dHN0YXRzKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiB0eF9lcnJvcjoKQEAgLTExNTcsNyArMTE1NSw3IEBACiAJc3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTsKIAlzdHJ1Y3QgZ2VuZXZlX2RldiAqdCwgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7CiAJYm9vbCB0dW5fY29sbGVjdF9tZCwgdHVuX29uX3NhbWVfcG9ydDsKLQlpbnQgZXJyOworCWludCBlcnIsIGVuY2FwX2xlbjsKIAogCWlmICghcmVtb3RlKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExODksNiArMTE4NywxNCBAQAogCWlmICh0KQogCQlyZXR1cm4gLUVCVVNZOwogCisJLyogbWFrZSBlbm91Z2ggaGVhZHJvb20gZm9yIGJhc2ljIHNjZW5hcmlvICovCisJZW5jYXBfbGVuID0gR0VORVZFX0JBU0VfSExFTiArIEVUSF9ITEVOOworCWlmIChyZW1vdGUtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQllbmNhcF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CisJZWxzZQorCQllbmNhcF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKwlkZXYtPm5lZWRlZF9oZWFkcm9vbSA9IGVuY2FwX2xlbiArIEVUSF9ITEVOOworCiAJaWYgKG1ldGFkYXRhKSB7CiAJCWlmICh0dW5fb25fc2FtZV9wb3J0KQogCQkJcmV0dXJuIC1FUEVSTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IDdjNGE0MTUuLjlmMGIxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwpAQCAtNjgzLDE0ICs2ODMsMTQgQEAKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNwLT5yZWZjbnQpKQogCQlkb3duKCZzcC0+ZGVhZF9zZW0pOwogCi0JdW5yZWdpc3Rlcl9uZXRkZXYoc3AtPmRldik7Ci0KLQlkZWxfdGltZXIoJnNwLT50eF90KTsKLQlkZWxfdGltZXIoJnNwLT5yZXN5bmNfdCk7CisJZGVsX3RpbWVyX3N5bmMoJnNwLT50eF90KTsKKwlkZWxfdGltZXJfc3luYygmc3AtPnJlc3luY190KTsKIAogCS8qIEZyZWUgYWxsIDZwYWNrIGZyYW1lIGJ1ZmZlcnMuICovCiAJa2ZyZWUoc3AtPnJidWZmKTsKIAlrZnJlZShzcC0+eGJ1ZmYpOworCisJdW5yZWdpc3Rlcl9uZXRkZXYoc3AtPmRldik7CiB9CiAKIC8qIFBlcmZvcm0gSS9PIGNvbnRyb2wgb24gYW4gYWN0aXZlIDZwYWNrIGNoYW5uZWwuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwppbmRleCAyMTZiZmQzLi4wYjcyYjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKQEAgLTc5OCwxMyArNzk4LDEzIEBACiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZheC0+cmVmY250KSkKIAkJZG93bigmYXgtPmRlYWRfc2VtKTsKIAotCXVucmVnaXN0ZXJfbmV0ZGV2KGF4LT5kZXYpOwotCiAJLyogRnJlZSBhbGwgQVgyNSBmcmFtZSBidWZmZXJzLiAqLwogCWtmcmVlKGF4LT5yYnVmZik7CiAJa2ZyZWUoYXgtPnhidWZmKTsKIAogCWF4LT50dHkgPSBOVUxMOworCisJdW5yZWdpc3Rlcl9uZXRkZXYoYXgtPmRldik7CiB9CiAKIC8qIFBlcmZvcm0gSS9PIGNvbnRyb2wgb24gYW4gYWN0aXZlIGF4MjUgY2hhbm5lbC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9jb3JlLmMKaW5kZXggZDUwODg3ZS4uOGM0OGJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9jb3JlLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBpcHZsYW5fcmN2X2ZyYW1lKHN0cnVjdCBpcHZsX2FkZHIgKmFkZHIsIHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IGlwdmxhbl9yY3ZfZnJhbWUoc3RydWN0IGlwdmxfYWRkciAqYWRkciwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogCQkJICAgIGJvb2wgbG9jYWwpCiB7CiAJc3RydWN0IGlwdmxfZGV2ICppcHZsYW4gPSBhZGRyLT5tYXN0ZXI7CkBAIC0yNjIsNiArMjYyLDcgQEAKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXJ4X2hhbmRsZXJfcmVzdWx0X3QgcmV0ID0gUlhfSEFORExFUl9DT05TVU1FRDsKIAlib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAKIAlsZW4gPSBza2ItPmxlbiArIEVUSF9ITEVOOwogCWlmICh1bmxpa2VseSghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSkgewpAQCAtMjczLDYgKzI3NCw3IEBACiAJaWYgKCFza2IpCiAJCWdvdG8gb3V0OwogCisJKnBza2IgPSBza2I7CiAJc2tiLT5kZXYgPSBkZXY7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCkBAIC00ODYsNyArNDg4LDcgQEAKIAogCWFkZHIgPSBpcHZsYW5fYWRkcl9sb29rdXAoaXB2bGFuLT5wb3J0LCBseXIzaCwgYWRkcl90eXBlLCB0cnVlKTsKIAlpZiAoYWRkcikKLQkJcmV0dXJuIGlwdmxhbl9yY3ZfZnJhbWUoYWRkciwgc2tiLCB0cnVlKTsKKwkJcmV0dXJuIGlwdmxhbl9yY3ZfZnJhbWUoYWRkciwgJnNrYiwgdHJ1ZSk7CiAKIG91dDoKIAlza2ItPmRldiA9IGlwdmxhbi0+cGh5X2RldjsKQEAgLTUwNiw3ICs1MDgsNyBAQAogCQlpZiAobHlyM2gpIHsKIAkJCWFkZHIgPSBpcHZsYW5fYWRkcl9sb29rdXAoaXB2bGFuLT5wb3J0LCBseXIzaCwgYWRkcl90eXBlLCB0cnVlKTsKIAkJCWlmIChhZGRyKQotCQkJCXJldHVybiBpcHZsYW5fcmN2X2ZyYW1lKGFkZHIsIHNrYiwgdHJ1ZSk7CisJCQkJcmV0dXJuIGlwdmxhbl9yY3ZfZnJhbWUoYWRkciwgJnNrYiwgdHJ1ZSk7CiAJCX0KIAkJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CiAJCWlmICghc2tiKQpAQCAtNTg5LDcgKzU5MSw3IEBACiAKIAlhZGRyID0gaXB2bGFuX2FkZHJfbG9va3VwKHBvcnQsIGx5cjNoLCBhZGRyX3R5cGUsIHRydWUpOwogCWlmIChhZGRyKQotCQlyZXQgPSBpcHZsYW5fcmN2X2ZyYW1lKGFkZHIsIHNrYiwgZmFsc2UpOworCQlyZXQgPSBpcHZsYW5fcmN2X2ZyYW1lKGFkZHIsIHBza2IsIGZhbHNlKTsKIAogb3V0OgogCXJldHVybiByZXQ7CkBAIC02MjYsNyArNjI4LDcgQEAKIAogCQlhZGRyID0gaXB2bGFuX2FkZHJfbG9va3VwKHBvcnQsIGx5cjNoLCBhZGRyX3R5cGUsIHRydWUpOwogCQlpZiAoYWRkcikKLQkJCXJldCA9IGlwdmxhbl9yY3ZfZnJhbWUoYWRkciwgc2tiLCBmYWxzZSk7CisJCQlyZXQgPSBpcHZsYW5fcmN2X2ZyYW1lKGFkZHIsIHBza2IsIGZhbHNlKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjUxLDUgKzY1Myw1IEBACiAJV0FSTl9PTkNFKHRydWUsICJpcHZsYW5faGFuZGxlX2ZyYW1lKCkgY2FsbGVkIGZvciBtb2RlID0gWyVoeF1cbiIsCiAJCQkgIHBvcnQtPm1vZGUpOwogCWtmcmVlX3NrYihza2IpOwotCXJldHVybiBORVRfUlhfRFJPUDsKKwlyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCA4NmY2YzYyLi4wNmM4YmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCkBAIC00MTUsNiArNDE1LDcgQEAKIAkJc2tiID0gaXBfY2hlY2tfZGVmcmFnKGRldl9uZXQoc2tiLT5kZXYpLCBza2IsIElQX0RFRlJBR19NQUNWTEFOKTsKIAkJaWYgKCFza2IpCiAJCQlyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDsKKwkJKnBza2IgPSBza2I7CiAJCWV0aCA9IGV0aF9oZHIoc2tiKTsKIAkJbWFjdmxhbl9mb3J3YXJkX3NvdXJjZShza2IsIHBvcnQsIGV0aC0+aF9zb3VyY2UpOwogCQlzcmMgPSBtYWN2bGFuX2hhc2hfbG9va3VwKHBvcnQsIGV0aC0+aF9zb3VyY2UpOwpAQCAtNDU2LDYgKzQ1Nyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCSpwc2tiID0gc2tiOwogCXNrYi0+ZGV2ID0gZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdnRhcC5jIGIvZHJpdmVycy9uZXQvbWFjdnRhcC5jCmluZGV4IDU0MDM2YWUuLjBmYzUyMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3Z0YXAuYworKysgYi9kcml2ZXJzL25ldC9tYWN2dGFwLmMKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90ICp3cXVldWU7CiAKIAlpZiAoIXNvY2tfd3JpdGVhYmxlKHNrKSB8fAotCSAgICAhdGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSkKKwkgICAgIXRlc3RfYW5kX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSkKIAkJcmV0dXJuOwogCiAJd3F1ZXVlID0gc2tfc2xlZXAoc2spOwpAQCAtNTg1LDcgKzU4NSw3IEBACiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIAogCWlmIChzb2NrX3dyaXRlYWJsZSgmcS0+c2spIHx8Ci0JICAgICghdGVzdF9hbmRfc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZxLT5zb2NrLmZsYWdzKSAmJgorCSAgICAoIXRlc3RfYW5kX3NldF9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsICZxLT5zb2NrLmZsYWdzKSAmJgogCSAgICAgc29ja193cml0ZWFibGUoJnEtPnNrKSkpCiAJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9hdDgwM3guYyBiL2RyaXZlcnMvbmV0L3BoeS9hdDgwM3guYwppbmRleCBmYWJmMTFkLi4yZDAyMGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvYXQ4MDN4LmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2F0ODAzeC5jCkBAIC0zMDgsNiArMzA4LDggQEAKIAkuZmxhZ3MJCQk9IFBIWV9IQVNfSU5URVJSVVBULAogCS5jb25maWdfYW5lZwkJPSBnZW5waHlfY29uZmlnX2FuZWcsCiAJLnJlYWRfc3RhdHVzCQk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdAkJPSBhdDgwM3hfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJCT0gYXQ4MDN4X2NvbmZpZ19pbnRyLAogCS5kcml2ZXIJCQk9IHsKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKQEAgLTMyNyw2ICszMjksOCBAQAogCS5mbGFncwkJCT0gUEhZX0hBU19JTlRFUlJVUFQsCiAJLmNvbmZpZ19hbmVnCQk9IGdlbnBoeV9jb25maWdfYW5lZywKIAkucmVhZF9zdGF0dXMJCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0CQk9IGF0ODAzeF9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgkJPSBhdDgwM3hfY29uZmlnX2ludHIsCiAJLmRyaXZlcgkJCT0gewogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMgYi9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYwppbmRleCAwN2E2MTE5Li4zY2U1ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYworKysgYi9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYwpAQCAtNjE0LDcgKzYxNCw3IEBACiAJeyBQSFlfSURfQkNNNTQ2MSwgMHhmZmZmZmZmMCB9LAogCXsgUEhZX0lEX0JDTTU0NjE2UywgMHhmZmZmZmZmMCB9LAogCXsgUEhZX0lEX0JDTTU0NjQsIDB4ZmZmZmZmZjAgfSwKLQl7IFBIWV9JRF9CQ001NDgyLCAweGZmZmZmZmYwIH0sCisJeyBQSFlfSURfQkNNNTQ4MSwgMHhmZmZmZmZmMCB9LAogCXsgUEhZX0lEX0JDTTU0ODIsIDB4ZmZmZmZmZjAgfSwKIAl7IFBIWV9JRF9CQ001MDYxMCwgMHhmZmZmZmZmMCB9LAogCXsgUEhZX0lEX0JDTTUwNjEwTSwgMHhmZmZmZmZmMCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYyBiL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKaW5kZXggNWRlOGQ1OC4uMDI0MDU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCkBAIC0xMTU0LDYgKzExNTQsMjEgQEAKIAkJLmRyaXZlciA9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKIAl9LAogCXsKKwkJLnBoeV9pZCA9IE1BUlZFTExfUEhZX0lEXzg4RTE1NDAsCisJCS5waHlfaWRfbWFzayA9IE1BUlZFTExfUEhZX0lEX01BU0ssCisJCS5uYW1lID0gIk1hcnZlbGwgODhFMTU0MCIsCisJCS5mZWF0dXJlcyA9IFBIWV9HQklUX0ZFQVRVUkVTLAorCQkuZmxhZ3MgPSBQSFlfSEFTX0lOVEVSUlVQVCwKKwkJLmNvbmZpZ19hbmVnID0gJm04OGUxNTEwX2NvbmZpZ19hbmVnLAorCQkucmVhZF9zdGF0dXMgPSAmbWFydmVsbF9yZWFkX3N0YXR1cywKKwkJLmFja19pbnRlcnJ1cHQgPSAmbWFydmVsbF9hY2tfaW50ZXJydXB0LAorCQkuY29uZmlnX2ludHIgPSAmbWFydmVsbF9jb25maWdfaW50ciwKKwkJLmRpZF9pbnRlcnJ1cHQgPSAmbTg4ZTExMjFfZGlkX2ludGVycnVwdCwKKwkJLnJlc3VtZSA9ICZnZW5waHlfcmVzdW1lLAorCQkuc3VzcGVuZCA9ICZnZW5waHlfc3VzcGVuZCwKKwkJLmRyaXZlciA9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwl9LAorCXsKIAkJLnBoeV9pZCA9IE1BUlZFTExfUEhZX0lEXzg4RTMwMTYsCiAJCS5waHlfaWRfbWFzayA9IE1BUlZFTExfUEhZX0lEX01BU0ssCiAJCS5uYW1lID0gIk1hcnZlbGwgODhFMzAxNiIsCkBAIC0xMTg2LDYgKzEyMDEsNyBAQAogCXsgTUFSVkVMTF9QSFlfSURfODhFMTMxOFMsIE1BUlZFTExfUEhZX0lEX01BU0sgfSwKIAl7IE1BUlZFTExfUEhZX0lEXzg4RTExMTZSLCBNQVJWRUxMX1BIWV9JRF9NQVNLIH0sCiAJeyBNQVJWRUxMX1BIWV9JRF84OEUxNTEwLCBNQVJWRUxMX1BIWV9JRF9NQVNLIH0sCisJeyBNQVJWRUxMX1BIWV9JRF84OEUxNTQwLCBNQVJWRUxMX1BIWV9JRF9NQVNLIH0sCiAJeyBNQVJWRUxMX1BIWV9JRF84OEUzMDE2LCBNQVJWRUxMX1BIWV9JRF9NQVNLIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW8tbXV4LmMgYi9kcml2ZXJzL25ldC9waHkvbWRpby1tdXguYwppbmRleCA5MDhlOGQ0Li43ZjhlNzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpby1tdXguYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpby1tdXguYwpAQCAtMTQ5LDkgKzE0OSwxNCBAQAogCQl9CiAJCWNiLT5idXNfbnVtYmVyID0gdjsKIAkJY2ItPnBhcmVudCA9IHBiOwotCQljYi0+bWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKLQkJY2ItPm1paV9idXMtPnByaXYgPSBjYjsKIAorCQljYi0+bWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKKwkJaWYgKCFjYi0+bWlpX2J1cykgeworCQkJcmV0X3ZhbCA9IC1FTk9NRU07CisJCQlvZl9ub2RlX3B1dChjaGlsZF9idXNfbm9kZSk7CisJCQlicmVhazsKKwkJfQorCQljYi0+bWlpX2J1cy0+cHJpdiA9IGNiOwogCQljYi0+bWlpX2J1cy0+aXJxID0gY2ItPnBoeV9pcnE7CiAJCWNiLT5taWlfYnVzLT5uYW1lID0gIm1kaW9fbXV4IjsKIAkJc25wcmludGYoY2ItPm1paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleC4leCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWljcmVsLmMgYi9kcml2ZXJzL25ldC9waHkvbWljcmVsLmMKaW5kZXggY2Y2MzEyZi4uZTEzYWQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21pY3JlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9taWNyZWwuYwpAQCAtMzM5LDkgKzMzOSwxOCBAQAogewogCWNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwaHlkZXYtPmRldjsKIAljb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUgPSBkZXYtPm9mX25vZGU7CisJY29uc3Qgc3RydWN0IGRldmljZSAqZGV2X3dhbGtlcjsKIAotCWlmICghb2Zfbm9kZSAmJiBkZXYtPnBhcmVudC0+b2Zfbm9kZSkKLQkJb2Zfbm9kZSA9IGRldi0+cGFyZW50LT5vZl9ub2RlOworCS8qIFRoZSBNaWNyZWwgZHJpdmVyIGhhcyBhIGRlcHJlY2F0ZWQgb3B0aW9uIHRvIHBsYWNlIHBoeSBPRgorCSAqIHByb3BlcnRpZXMgaW4gdGhlIE1BQyBub2RlLiBXYWxrIHVwIHRoZSB0cmVlIG9mIGRldmljZXMgdG8KKwkgKiBmaW5kIGEgZGV2aWNlIHdpdGggYW4gT0Ygbm9kZS4KKwkgKi8KKwlkZXZfd2Fsa2VyID0gJnBoeWRldi0+ZGV2OworCWRvIHsKKwkJb2Zfbm9kZSA9IGRldl93YWxrZXItPm9mX25vZGU7CisJCWRldl93YWxrZXIgPSBkZXZfd2Fsa2VyLT5wYXJlbnQ7CisKKwl9IHdoaWxlICghb2Zfbm9kZSAmJiBkZXZfd2Fsa2VyKTsKIAogCWlmIChvZl9ub2RlKSB7CiAJCWtzejkwMjFfbG9hZF92YWx1ZXNfZnJvbV9vZihwaHlkZXYsIG9mX25vZGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggYWRiNDhhYi4uNDdjZDMwNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTQ0OCw3ICs0NDgsOCBAQAogCQltZGlvYnVzX3dyaXRlKHBoeWRldi0+YnVzLCBtaWlfZGF0YS0+cGh5X2lkLAogCQkJICAgICAgbWlpX2RhdGEtPnJlZ19udW0sIHZhbCk7CiAKLQkJaWYgKG1paV9kYXRhLT5yZWdfbnVtID09IE1JSV9CTUNSICYmCisJCWlmIChtaWlfZGF0YS0+cGh5X2lkID09IHBoeWRldi0+YWRkciAmJgorCQkgICAgbWlpX2RhdGEtPnJlZ19udW0gPT0gTUlJX0JNQ1IgJiYKIAkJICAgIHZhbCAmIEJNQ1JfUkVTRVQpCiAJCQlyZXR1cm4gcGh5X2luaXRfaHcocGh5ZGV2KTsKIApAQCAtODYzLDYgKzg2NCw5IEBACiAJCQluZWVkc19hbmVnID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBQSFlfTk9MSU5LOgorCQlpZiAocGh5X2ludGVycnVwdF9pc192YWxpZChwaHlkZXYpKQorCQkJYnJlYWs7CisKIAkJZXJyID0gcGh5X3JlYWRfc3RhdHVzKHBoeWRldik7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS92aXRlc3NlLmMgYi9kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jCmluZGV4IDc2Y2FkNzEuLmRkMjk1ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS92aXRlc3NlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYwpAQCAtNjYsNiArNjYsNyBAQAogI2RlZmluZSBQSFlfSURfVlNDODI0NAkJCTB4MDAwZmM2YzAKICNkZWZpbmUgUEhZX0lEX1ZTQzg1MTQJCQkweDAwMDcwNjcwCiAjZGVmaW5lIFBIWV9JRF9WU0M4NTc0CQkJMHgwMDA3MDRhMAorI2RlZmluZSBQSFlfSURfVlNDODYwMQkJCTB4MDAwNzA0MjAKICNkZWZpbmUgUEhZX0lEX1ZTQzg2NjIJCQkweDAwMDcwNjYwCiAjZGVmaW5lIFBIWV9JRF9WU0M4MjIxCQkJMHgwMDBmYzU1MAogI2RlZmluZSBQSFlfSURfVlNDODIxMQkJCTB4MDAwZmM0YjAKQEAgLTEzMyw3ICsxMzQsOCBAQAogCQkJKHBoeWRldi0+ZHJ2LT5waHlfaWQgPT0gUEhZX0lEX1ZTQzgyMzQgfHwKIAkJCSBwaHlkZXYtPmRydi0+cGh5X2lkID09IFBIWV9JRF9WU0M4MjQ0IHx8CiAJCQkgcGh5ZGV2LT5kcnYtPnBoeV9pZCA9PSBQSFlfSURfVlNDODUxNCB8fAotCQkJIHBoeWRldi0+ZHJ2LT5waHlfaWQgPT0gUEhZX0lEX1ZTQzg1NzQpID8KKwkJCSBwaHlkZXYtPmRydi0+cGh5X2lkID09IFBIWV9JRF9WU0M4NTc0IHx8CisJCQkgcGh5ZGV2LT5kcnYtPnBoeV9pZCA9PSBQSFlfSURfVlNDODYwMSkgPwogCQkJCU1JSV9WU0M4MjQ0X0lNQVNLX01BU0sgOgogCQkJCU1JSV9WU0M4MjIxX0lNQVNLX01BU0spOwogCWVsc2UgewpAQCAtMjcyLDYgKzI3NCwxOCBAQAogCS5jb25maWdfaW50ciAgICA9ICZ2c2M4Mnh4X2NvbmZpZ19pbnRyLAogCS5kcml2ZXIgICAgICAgICA9IHsgLm93bmVyID0gVEhJU19NT0RVTEUsfSwKIH0sIHsKKwkucGh5X2lkICAgICAgICAgPSBQSFlfSURfVlNDODYwMSwKKwkubmFtZSAgICAgICAgICAgPSAiVml0ZXNzZSBWU0M4NjAxIiwKKwkucGh5X2lkX21hc2sgICAgPSAweDAwMGZmZmYwLAorCS5mZWF0dXJlcyAgICAgICA9IFBIWV9HQklUX0ZFQVRVUkVTLAorCS5mbGFncyAgICAgICAgICA9IFBIWV9IQVNfSU5URVJSVVBULAorCS5jb25maWdfaW5pdCAgICA9ICZnZW5waHlfY29uZmlnX2luaXQsCisJLmNvbmZpZ19hbmVnICAgID0gJmdlbnBoeV9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMgICAgPSAmZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0ICA9ICZ2c2M4MjR4X2Fja19pbnRlcnJ1cHQsCisJLmNvbmZpZ19pbnRyICAgID0gJnZzYzgyeHhfY29uZmlnX2ludHIsCisJLmRyaXZlciAgICAgICAgID0geyAub3duZXIgPSBUSElTX01PRFVMRSx9LAorfSwgewogCS5waHlfaWQgICAgICAgICA9IFBIWV9JRF9WU0M4NjYyLAogCS5uYW1lICAgICAgICAgICA9ICJWaXRlc3NlIFZTQzg2NjIiLAogCS5waHlfaWRfbWFzayAgICA9IDB4MDAwZmZmZjAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCmluZGV4IDVlMGI0MzIuLjBhMzdmODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCkBAIC01NjgsNiArNTY4LDkgQEAKIAlzay0+c2tfZmFtaWx5CQk9IFBGX1BQUE9YOwogCXNrLT5za19wcm90b2NvbAkJPSBQWF9QUk9UT19PRTsKIAorCUlOSVRfV09SSygmcHBwb3hfc2soc2spLT5wcm90by5wcHBvZS5wYWR0X3dvcmssCisJCSAgcHBwb2VfdW5iaW5kX3NvY2tfd29yayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjMyLDggKzYzNSw2IEBACiAKIAlsb2NrX3NvY2soc2spOwogCi0JSU5JVF9XT1JLKCZwby0+cHJvdG8ucHBwb2UucGFkdF93b3JrLCBwcHBvZV91bmJpbmRfc29ja193b3JrKTsKLQogCWVycm9yID0gLUVJTlZBTDsKIAlpZiAoc3AtPnNhX3Byb3RvY29sICE9IFBYX1BST1RPX09FKQogCQlnb3RvIGVuZDsKQEAgLTY2Myw4ICs2NjQsMTMgQEAKIAkJCXBvLT5wcHBvZV9kZXYgPSBOVUxMOwogCQl9CiAKLQkJbWVtc2V0KHNrX3BwcG94KHBvKSArIDEsIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHBwcG94X3NvY2spIC0gc2l6ZW9mKHN0cnVjdCBzb2NrKSk7CisJCXBvLT5wcHBvZV9pZmluZGV4ID0gMDsKKwkJbWVtc2V0KCZwby0+cHBwb2VfcGEsIDAsIHNpemVvZihwby0+cHBwb2VfcGEpKTsKKwkJbWVtc2V0KCZwby0+cHBwb2VfcmVsYXksIDAsIHNpemVvZihwby0+cHBwb2VfcmVsYXkpKTsKKwkJbWVtc2V0KCZwby0+Y2hhbiwgMCwgc2l6ZW9mKHBvLT5jaGFuKSk7CisJCXBvLT5uZXh0ID0gTlVMTDsKKwkJcG8tPm51bSA9IDA7CisKIAkJc2stPnNrX3N0YXRlID0gUFBQT1hfTk9ORTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMgYi9kcml2ZXJzL25ldC9wcHAvcHB0cC5jCmluZGV4IGZjNjllNDEuLjU5N2M1M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHRwLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwdHAuYwpAQCAtNDE5LDYgKzQxOSw5IEBACiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmcG8tPnByb3RvLnBwdHA7CiAJaW50IGVycm9yID0gMDsKIAorCWlmIChzb2NrYWRkcl9sZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3BwcG94KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlsb2NrX3NvY2soc2spOwogCiAJb3B0LT5zcmNfYWRkciA9IHNwLT5zYV9hZGRyLnBwdHA7CkBAIC00NDAsNiArNDQzLDkgQEAKIAlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAlpbnQgZXJyb3IgPSAwOwogCisJaWYgKHNvY2thZGRyX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfcHBwb3gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChzcC0+c2FfcHJvdG9jb2wgIT0gUFhfUFJPVE9fUFBUUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggYjE4NzhmYS4uZjBkYjc3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIAogCWlmIChzb2NrX3dyaXRlYWJsZShzaykgfHwKLQkgICAgKCF0ZXN0X2FuZF9zZXRfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSAmJgorCSAgICAoIXRlc3RfYW5kX3NldF9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncykgJiYKIAkgICAgIHNvY2tfd3JpdGVhYmxlKHNrKSkpCiAJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CiAKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJaWYgKCFzb2NrX3dyaXRlYWJsZShzaykpCiAJCXJldHVybjsKIAotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSkKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSkKIAkJcmV0dXJuOwogCiAJd3F1ZXVlID0gc2tfc2xlZXAoc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IGM3OGQzY2IuLjNkYTcwYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTY5Niw2ICs2OTYsMTEgQEAKIAkJCVVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsIFVTQl9DRENfUFJPVE9fTk9ORSksCiAJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSAmd3dhbl9pbmZvLAogfSwgeworCS8qIERlbGwgRFc1NTgwIG1vZHVsZXMgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhERUxMX1ZFTkRPUl9JRCwgMHg4MWJhLCBVU0JfQ0xBU1NfQ09NTSwKKwkJCVVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsIFVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZ3d2FuX2luZm8sCit9LCB7CiAJVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX0VUSEVSTkVULAogCQkJVVNCX0NEQ19QUk9UT19OT05FKSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmNkY19pbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYwppbmRleCBiYmRlOTg4Li5iZGQ4M2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJLm5kb19zdG9wICAgICAgICAgICAgID0gdXNibmV0X3N0b3AsCiAJLm5kb19zdGFydF94bWl0ICAgICAgID0gdXNibmV0X3N0YXJ0X3htaXQsCiAJLm5kb190eF90aW1lb3V0ICAgICAgID0gdXNibmV0X3R4X3RpbWVvdXQsCi0JLm5kb19jaGFuZ2VfbXR1ICAgICAgID0gdXNibmV0X2NoYW5nZV9tdHUsCisJLm5kb19jaGFuZ2VfbXR1ICAgICAgID0gY2RjX25jbV9jaGFuZ2VfbXR1LAogCS5uZG9fc2V0X21hY19hZGRyZXNzICA9IGV0aF9tYWNfYWRkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIgICAgPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3ZsYW5fcnhfYWRkX3ZpZCAgPSBjZGNfbWJpbV9yeF9hZGRfdmlkLApAQCAtMTU4LDcgKzE1OCw3IEBACiAJaWYgKCFjZGNfbmNtX2NvbW1faW50Zl9pc19tYmltKGludGYtPmN1cl9hbHRzZXR0aW5nKSkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBjZGNfbmNtX2JpbmRfY29tbW9uKGRldiwgaW50ZiwgZGF0YV9hbHRzZXR0aW5nLCAwKTsKKwlyZXQgPSBjZGNfbmNtX2JpbmRfY29tbW9uKGRldiwgaW50ZiwgZGF0YV9hbHRzZXR0aW5nLCBkZXYtPmRyaXZlcl9pbmZvLT5kYXRhKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtNTgyLDYgKzU4MiwyNiBAQAogCS50eF9maXh1cCA9IGNkY19tYmltX3R4X2ZpeHVwLAogfTsKIAorLyogVGhlIHNwZWZpY2F0aW9uIGV4cGxpY2l0bHkgYWxsb3dzIE5EUHMgdG8gYmUgcGxhY2VkIGFueXdoZXJlIGluIHRoZQorICogZnJhbWUsIGJ1dCBzb21lIGRldmljZXMgZmFpbCB1bmxlc3MgdGhlIE5EUCBpcyBwbGFjZWQgYWZ0ZXIgdGhlIElQCisgKiBwYWNrZXRzLiAgVXNpbmcgdGhlIENEQ19OQ01fRkxBR19ORFBfVE9fRU5EIGZsYWdzIHRvIGZvcmNlIHRoaXMKKyAqIGJlaGF2aW91ci4KKyAqCisgKiBOb3RlOiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZlYXR1cmUgcmVzdHJpY3RzIGVhY2ggTlRCCisgKiB0byBhIHNpbmdsZSBORFAsIGltcGx5aW5nIHRoYXQgbXVsdGlwbGV4ZWQgc2Vzc2lvbnMgY2Fubm90IHNoYXJlIGFuCisgKiBOVEIuIFRoaXMgbWlnaHQgYWZmZWN0IHBlcmZvcm1hY2UgZm9yIG11bHRpcGxleGVkIHNlc3Npb25zLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGNkY19tYmltX2luZm9fbmRwX3RvX2VuZCA9IHsKKwkuZGVzY3JpcHRpb24gPSAiQ0RDIE1CSU0iLAorCS5mbGFncyA9IEZMQUdfTk9fU0VUSU5UIHwgRkxBR19NVUxUSV9QQUNLRVQgfCBGTEFHX1dXQU4sCisJLmJpbmQgPSBjZGNfbWJpbV9iaW5kLAorCS51bmJpbmQgPSBjZGNfbWJpbV91bmJpbmQsCisJLm1hbmFnZV9wb3dlciA9IGNkY19tYmltX21hbmFnZV9wb3dlciwKKwkucnhfZml4dXAgPSBjZGNfbWJpbV9yeF9maXh1cCwKKwkudHhfZml4dXAgPSBjZGNfbWJpbV90eF9maXh1cCwKKwkuZGF0YSA9IENEQ19OQ01fRkxBR19ORFBfVE9fRU5ELAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1iaW1fZGV2c1tdID0gewogCS8qIFRoaXMgZHVwbGljYXRlIE5DTSBlbnRyeSBpcyBpbnRlbnRpb25hbC4gTUJJTSBkZXZpY2VzIGNhbgogCSAqIGJlIGRpc2d1aXNlZCBhcyBOQ00gYnkgZGVmYXVsdCwgYW5kIHRoaXMgaXMgbmVjZXNzYXJ5IHRvCkBAIC01OTcsNiArNjE3LDEwIEBACiAJeyBVU0JfVkVORE9SX0FORF9JTlRFUkZBQ0VfSU5GTygweDBiZGIsIFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX01CSU0sIFVTQl9DRENfUFJPVE9fTk9ORSksCiAJICAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmY2RjX21iaW1faW5mbywKIAl9LAorCS8qIEh1YXdlaSBFMzM3MiBmYWlscyB1bmxlc3MgTkRQIGNvbWVzIGFmdGVyIHRoZSBJUCBwYWNrZXRzICovCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDEyZDEsIDB4MTU3ZCwgVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfTUJJTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKKwkgIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZjZGNfbWJpbV9pbmZvX25kcF90b19lbmQsCisJfSwKIAkvKiBkZWZhdWx0IGVudHJ5ICovCiAJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfTUJJTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKIAkgIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZjZGNfbWJpbV9pbmZvX3pscCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCmluZGV4IGExODdmMDguLmU4YTExNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CkBAIC02ODksOSArNjkwLDM1IEBACiAJa2ZyZWUoY3R4KTsKIH0KIAorLyogd2UgbmVlZCB0byBvdmVycmlkZSB0aGUgdXNibmV0IGNoYW5nZV9tdHUgbmRvIGZvciB0d28gcmVhc29uczoKKyAqICAtIHJlc3BlY3QgdGhlIG5lZ290aWF0ZWQgbWF4aW11bSBkYXRhZ3JhbSBzaXplCisgKiAgLSBhdm9pZCB1bndhbnRlZCBjaGFuZ2VzIHRvIHJ4IGFuZCB0eCBidWZmZXJzCisgKi8KK2ludCBjZGNfbmNtX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlzdHJ1Y3QgY2RjX25jbV9jdHggKmN0eCA9IChzdHJ1Y3QgY2RjX25jbV9jdHggKilkZXYtPmRhdGFbMF07CisJaW50IG1heG10dSA9IGN0eC0+bWF4X2RhdGFncmFtX3NpemUgLSBjZGNfbmNtX2V0aF9obGVuKGRldik7CisKKwlpZiAobmV3X210dSA8PSAwIHx8IG5ld19tdHUgPiBtYXhtdHUpCisJCXJldHVybiAtRUlOVkFMOworCW5ldC0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNkY19uY21fY2hhbmdlX210dSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY2RjX25jbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkgICAgID0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCSAgICAgPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJICAgICA9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkgICAgID0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CSAgICAgPSBjZGNfbmNtX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyICAgPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIGludCBjZGNfbmNtX2JpbmRfY29tbW9uKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHU4IGRhdGFfYWx0c2V0dGluZywgaW50IGRydmZsYWdzKQogewotCWNvbnN0IHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgKnVuaW9uX2Rlc2MgPSBOVUxMOwogCXN0cnVjdCBjZGNfbmNtX2N0eCAqY3R4OwogCXN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXI7CiAJdTggKmJ1ZjsKQEAgLTcyNSwxNSArNzUyLDE2IEBACiAJLyogcGFyc2UgdGhyb3VnaCBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHdpdGggY29udHJvbCBpbnRlcmZhY2UgKi8KIAljZGNfcGFyc2VfY2RjX2hlYWRlcigmaGRyLCBpbnRmLCBidWYsIGxlbik7CiAKLQljdHgtPmRhdGEgPSB1c2JfaWZudW1fdG9faWYoZGV2LT51ZGV2LAotCQkJCSAgICBoZHIudXNiX2NkY191bmlvbl9kZXNjLT5iU2xhdmVJbnRlcmZhY2UwKTsKKwlpZiAoaGRyLnVzYl9jZGNfdW5pb25fZGVzYykKKwkJY3R4LT5kYXRhID0gdXNiX2lmbnVtX3RvX2lmKGRldi0+dWRldiwKKwkJCQkJICAgIGhkci51c2JfY2RjX3VuaW9uX2Rlc2MtPmJTbGF2ZUludGVyZmFjZTApOwogCWN0eC0+ZXRoZXJfZGVzYyA9IGhkci51c2JfY2RjX2V0aGVyX2Rlc2M7CiAJY3R4LT5mdW5jX2Rlc2MgPSBoZHIudXNiX2NkY19uY21fZGVzYzsKIAljdHgtPm1iaW1fZGVzYyA9IGhkci51c2JfY2RjX21iaW1fZGVzYzsKIAljdHgtPm1iaW1fZXh0ZW5kZWRfZGVzYyA9IGhkci51c2JfY2RjX21iaW1fZXh0ZW5kZWRfZGVzYzsKIAogCS8qIHNvbWUgYnVnZ3kgZGV2aWNlcyBoYXZlIGFuIElBRCBidXQgbm8gQ0RDIFVuaW9uICovCi0JaWYgKCF1bmlvbl9kZXNjICYmIGludGYtPmludGZfYXNzb2MgJiYgaW50Zi0+aW50Zl9hc3NvYy0+YkludGVyZmFjZUNvdW50ID09IDIpIHsKKwlpZiAoIWhkci51c2JfY2RjX3VuaW9uX2Rlc2MgJiYgaW50Zi0+aW50Zl9hc3NvYyAmJiBpbnRmLT5pbnRmX2Fzc29jLT5iSW50ZXJmYWNlQ291bnQgPT0gMikgewogCQljdHgtPmRhdGEgPSB1c2JfaWZudW1fdG9faWYoZGV2LT51ZGV2LCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICsgMSk7CiAJCWRldl9kYmcoJmludGYtPmRldiwgIkNEQyBVbmlvbiBtaXNzaW5nIC0gZ290IHNsYXZlIGZyb20gSUFEXG4iKTsKIAl9CkBAIC04MjMsNiArODUxLDkgQEAKIAkvKiBhZGQgb3VyIHN5c2ZzIGF0dHJzICovCiAJZGV2LT5uZXQtPnN5c2ZzX2dyb3Vwc1swXSA9ICZjZGNfbmNtX3N5c2ZzX2F0dHJfZ3JvdXA7CiAKKwkvKiBtdXN0IGhhbmRsZSBNVFUgY2hhbmdlcyAqLworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmNkY19uY21fbmV0ZGV2X29wczsKKwogCXJldHVybiAwOwogCiBlcnJvcjI6CkBAIC05NTUsMTAgKzk4NiwxOCBAQAogCSogTlRIMTYgaGVhZGVyIGFzIHdlIHdvdWxkIG5vcm1hbGx5IGRvLiBORFAgaXNuJ3Qgd3JpdHRlbiB0byB0aGUgU0tCIHlldCwgYW5kCiAJKiB0aGUgd05kcEluZGV4IGZpZWxkIGluIHRoZSBoZWFkZXIgaXMgYWN0dWFsbHkgbm90IGNvbnNpc3RlbnQgd2l0aCByZWFsaXR5LiBJdCB3aWxsIGJlIGxhdGVyLgogCSovCi0JaWYgKGN0eC0+ZHJ2ZmxhZ3MgJiBDRENfTkNNX0ZMQUdfTkRQX1RPX0VORCkKKwlpZiAoY3R4LT5kcnZmbGFncyAmIENEQ19OQ01fRkxBR19ORFBfVE9fRU5EKSB7CiAJCWlmIChjdHgtPmRlbGF5ZWRfbmRwMTYtPmR3U2lnbmF0dXJlID09IHNpZ24pCiAJCQlyZXR1cm4gY3R4LT5kZWxheWVkX25kcDE2OwogCisJCS8qIFdlIGNhbiBvbmx5IHB1c2ggYSBzaW5nbGUgTkRQIHRvIHRoZSBlbmQuIFJldHVybgorCQkgKiBOVUxMIHRvIHNlbmQgd2hhdCB3ZSd2ZSBhbHJlYWR5IGdvdCBhbmQgcXVldWUgdGhpcworCQkgKiBza2IgZm9yIGxhdGVyLgorCQkgKi8KKwkJZWxzZSBpZiAoY3R4LT5kZWxheWVkX25kcDE2LT5kd1NpZ25hdHVyZSkKKwkJCXJldHVybiBOVUxMOworCX0KKwogCS8qIGZvbGxvdyB0aGUgY2hhaW4gb2YgTkRQcywgbG9va2luZyBmb3IgYSBtYXRjaCAqLwogCXdoaWxlIChuZHBvZmZzZXQpIHsKIAkJbmRwMTYgPSAoc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2ICopKHNrYi0+ZGF0YSArIG5kcG9mZnNldCk7CkBAIC0xNTUwLDYgKzE1ODksMjQgQEAKIAkgIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmd3dhbl9pbmZvLAogCX0sCiAKKwkvKiBEVzU4MTIgTFRFIFZlcml6b24gTW9iaWxlIEJyb2FkYmFuZCBDYXJkCisJICogVW5saWtlIERXNTU1MCB0aGlzIGRldmljZSByZXF1aXJlcyBGTEFHX05PQVJQCisJICovCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDQxM2MsIDB4ODFiYiwKKwkJVVNCX0NMQVNTX0NPTU0sCisJCVVTQl9DRENfU1VCQ0xBU1NfTkNNLCBVU0JfQ0RDX1BST1RPX05PTkUpLAorCSAgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJnd3YW5fbm9hcnBfaW5mbywKKwl9LAorCisJLyogRFc1ODEzIExURSBBVCZUIE1vYmlsZSBCcm9hZGJhbmQgQ2FyZAorCSAqIFVubGlrZSBEVzU1NTAgdGhpcyBkZXZpY2UgcmVxdWlyZXMgRkxBR19OT0FSUAorCSAqLworCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHg0MTNjLCAweDgxYmMsCisJCVVTQl9DTEFTU19DT01NLAorCQlVU0JfQ0RDX1NVQkNMQVNTX05DTSwgVVNCX0NEQ19QUk9UT19OT05FKSwKKwkgIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZ3d2FuX25vYXJwX2luZm8sCisJfSwKKwogCS8qIERlbGwgYnJhbmRlZCBNQk0gZGV2aWNlcyBsaWtlIERXNTU1MCAqLwogCXsgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTwogCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3FtaV93d2FuLmMgYi9kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYwppbmRleCAzNDc5OWVhLi45YTViZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYworKysgYi9kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYwpAQCAtNzI1LDYgKzcyNSw3IEBACiAJe1FNSV9GSVhFRF9JTlRGKDB4MjM1NywgMHg5MDAwLCA0KX0sCS8qIFRQLUxJTksgTUEyNjAgKi8KIAl7UU1JX0ZJWEVEX0lOVEYoMHgxYmM3LCAweDEyMDAsIDUpfSwJLyogVGVsaXQgTEU5MjAgKi8KIAl7UU1JX0ZJWEVEX0lOVEYoMHgxYmM3LCAweDEyMDEsIDIpfSwJLyogVGVsaXQgTEU5MjAgKi8KKwl7UU1JX0ZJWEVEX0lOVEYoMHgxYzllLCAweDliMDEsIDMpfSwJLyogWFMgU3RpY2sgVzEwMC0yIGZyb20gNEcgU3lzdGVtcyAqLwogCXtRTUlfRklYRURfSU5URigweDBiM2MsIDB4YzAwMCwgNCl9LAkvKiBPbGl2ZXR0aSBPbGljYXJkIDEwMCAqLwogCXtRTUlfRklYRURfSU5URigweDBiM2MsIDB4YzAwMSwgNCl9LAkvKiBPbGl2ZXR0aSBPbGljYXJkIDEyMCAqLwogCXtRTUlfRklYRURfSU5URigweDBiM2MsIDB4YzAwMiwgNCl9LAkvKiBPbGl2ZXR0aSBPbGljYXJkIDE0MCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwppbmRleCBkOTQyN2NhLi4yZTMyYzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYworKysgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwpAQCAtMzA2NywxNyArMzA2Nyw2IEBACiAKIAltdXRleF9sb2NrKCZ0cC0+Y29udHJvbCk7CiAKLQkvKiBUaGUgV09SS19FTkFCTEUgbWF5IGJlIHNldCB3aGVuIGF1dG9yZXN1bWUgb2NjdXJzICovCi0JaWYgKHRlc3RfYml0KFdPUktfRU5BQkxFLCAmdHAtPmZsYWdzKSkgewotCQljbGVhcl9iaXQoV09SS19FTkFCTEUsICZ0cC0+ZmxhZ3MpOwotCQl1c2Jfa2lsbF91cmIodHAtPmludHJfdXJiKTsKLQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0cC0+c2NoZWR1bGUpOwotCi0JCS8qIGRpc2FibGUgdGhlIHR4L3J4LCBpZiB0aGUgd29ya3F1ZXVlIGhhcyBlbmFibGVkIHRoZW0uICovCi0JCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpCi0JCQl0cC0+cnRsX29wcy5kaXNhYmxlKHRwKTsKLQl9Ci0KIAl0cC0+cnRsX29wcy51cCh0cCk7CiAKIAlydGw4MTUyX3NldF9zcGVlZCh0cCwgQVVUT05FR19FTkFCTEUsCkBAIC0zMTI0LDEyICszMTEzLDYgQEAKIAl9IGVsc2UgewogCQltdXRleF9sb2NrKCZ0cC0+Y29udHJvbCk7CiAKLQkJLyogVGhlIGF1dG9zdXNwZW5kIG1heSBoYXZlIGJlZW4gZW5hYmxlZCBhbmQgd291bGRuJ3QKLQkJICogYmUgZGlzYWJsZSB3aGVuIGF1dG9yZXN1bWUgb2NjdXJzLCBiZWNhdXNlIHRoZQotCQkgKiBuZXRpZl9ydW5uaW5nKCkgd291bGQgYmUgZmFsc2UuCi0JCSAqLwotCQlydGxfcnVudGltZV9zdXNwZW5kX2VuYWJsZSh0cCwgZmFsc2UpOwotCiAJCXRwLT5ydGxfb3BzLmRvd24odHApOwogCiAJCW11dGV4X3VubG9jaygmdHAtPmNvbnRyb2wpOwpAQCAtMzUxMiw3ICszNDk1LDcgQEAKIAkJbmV0aWZfZGV2aWNlX2F0dGFjaCh0cC0+bmV0ZGV2KTsKIAl9CiAKLQlpZiAobmV0aWZfcnVubmluZyh0cC0+bmV0ZGV2KSkgeworCWlmIChuZXRpZl9ydW5uaW5nKHRwLT5uZXRkZXYpICYmIHRwLT5uZXRkZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCWlmICh0ZXN0X2JpdChTRUxFQ1RJVkVfU1VTUEVORCwgJnRwLT5mbGFncykpIHsKIAkJCXJ0bF9ydW50aW1lX3N1c3BlbmRfZW5hYmxlKHRwLCBmYWxzZSk7CiAJCQljbGVhcl9iaXQoU0VMRUNUSVZFX1NVU1BFTkQsICZ0cC0+ZmxhZ3MpOwpAQCAtMzUzMiw2ICszNTE1LDggQEAKIAkJfQogCQl1c2Jfc3VibWl0X3VyYih0cC0+aW50cl91cmIsIEdGUF9LRVJORUwpOwogCX0gZWxzZSBpZiAodGVzdF9iaXQoU0VMRUNUSVZFX1NVU1BFTkQsICZ0cC0+ZmxhZ3MpKSB7CisJCWlmICh0cC0+bmV0ZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJCXJ0bF9ydW50aW1lX3N1c3BlbmRfZW5hYmxlKHRwLCBmYWxzZSk7CiAJCWNsZWFyX2JpdChTRUxFQ1RJVkVfU1VTUEVORCwgJnRwLT5mbGFncyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMGVmNGE1YS4uYmEyMWQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtMTE3LDEyICsxMTcsNiBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBkcm9wOwogCX0KLQkvKiBkb24ndCBjaGFuZ2UgaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwsIGFzIHRoYXQKLQkgKiB3aWxsIGNhdXNlIGJhZCBjaGVja3N1bSBvbiBmb3J3YXJkZWQgcGFja2V0cwotCSAqLwotCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FICYmCi0JICAgIHJjdi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAogCWlmIChsaWtlbHkoZGV2X2ZvcndhcmRfc2tiKHJjdiwgc2tiKSA9PSBORVRfUlhfU1VDQ0VTUykpIHsKIAkJc3RydWN0IHBjcHVfdnN0YXRzICpzdGF0cyA9IHRoaXNfY3B1X3B0cihkZXYtPnZzdGF0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggZDg4MzhkZWQuLmY5NGFiNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTE0MCw2ICsxNDAsMTIgQEAKIAogCS8qIENQVSBob3QgcGx1ZyBub3RpZmllciAqLwogCXN0cnVjdCBub3RpZmllcl9ibG9jayBuYjsKKworCS8qIENvbnRyb2wgVlEgYnVmZmVyczogcHJvdGVjdGVkIGJ5IHRoZSBydG5sIGxvY2sgKi8KKwlzdHJ1Y3QgdmlydGlvX25ldF9jdHJsX2hkciBjdHJsX2hkcjsKKwl2aXJ0aW9fbmV0X2N0cmxfYWNrIGN0cmxfc3RhdHVzOworCXU4IGN0cmxfcHJvbWlzYzsKKwl1OCBjdHJsX2FsbG11bHRpOwogfTsKIAogc3RydWN0IHBhZGRlZF92bmV0X2hkciB7CkBAIC05NzYsMzEgKzk4MiwzMCBAQAogCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKm91dCkKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnc1s0XSwgaGRyLCBzdGF0OwotCXN0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfaGRyIGN0cmw7Ci0JdmlydGlvX25ldF9jdHJsX2FjayBzdGF0dXMgPSB+MDsKIAl1bnNpZ25lZCBvdXRfbnVtID0gMCwgdG1wOwogCiAJLyogQ2FsbGVyIHNob3VsZCBrbm93IGJldHRlciAqLwogCUJVR19PTighdmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9WUSkpOwogCi0JY3RybC5jbGFzcyA9IGNsYXNzOwotCWN0cmwuY21kID0gY21kOworCXZpLT5jdHJsX3N0YXR1cyA9IH4wOworCXZpLT5jdHJsX2hkci5jbGFzcyA9IGNsYXNzOworCXZpLT5jdHJsX2hkci5jbWQgPSBjbWQ7CiAJLyogQWRkIGhlYWRlciAqLwotCXNnX2luaXRfb25lKCZoZHIsICZjdHJsLCBzaXplb2YoY3RybCkpOworCXNnX2luaXRfb25lKCZoZHIsICZ2aS0+Y3RybF9oZHIsIHNpemVvZih2aS0+Y3RybF9oZHIpKTsKIAlzZ3Nbb3V0X251bSsrXSA9ICZoZHI7CiAKIAlpZiAob3V0KQogCQlzZ3Nbb3V0X251bSsrXSA9IG91dDsKIAogCS8qIEFkZCByZXR1cm4gc3RhdHVzLiAqLwotCXNnX2luaXRfb25lKCZzdGF0LCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJc2dfaW5pdF9vbmUoJnN0YXQsICZ2aS0+Y3RybF9zdGF0dXMsIHNpemVvZih2aS0+Y3RybF9zdGF0dXMpKTsKIAlzZ3Nbb3V0X251bV0gPSAmc3RhdDsKIAogCUJVR19PTihvdXRfbnVtICsgMSA+IEFSUkFZX1NJWkUoc2dzKSk7CiAJdmlydHF1ZXVlX2FkZF9zZ3ModmktPmN2cSwgc2dzLCBvdXRfbnVtLCAxLCB2aSwgR0ZQX0FUT01JQyk7CiAKIAlpZiAodW5saWtlbHkoIXZpcnRxdWV1ZV9raWNrKHZpLT5jdnEpKSkKLQkJcmV0dXJuIHN0YXR1cyA9PSBWSVJUSU9fTkVUX09LOworCQlyZXR1cm4gdmktPmN0cmxfc3RhdHVzID09IFZJUlRJT19ORVRfT0s7CiAKIAkvKiBTcGluIGZvciBhIHJlc3BvbnNlLCB0aGUga2ljayBjYXVzZXMgYW4gaW9wb3J0IHdyaXRlLCB0cmFwcGluZwogCSAqIGludG8gdGhlIGh5cGVydmlzb3IsIHNvIHRoZSByZXF1ZXN0IHNob3VsZCBiZSBoYW5kbGVkIGltbWVkaWF0ZWx5LgpAQCAtMTAwOSw3ICsxMDE0LDcgQEAKIAkgICAgICAgIXZpcnRxdWV1ZV9pc19icm9rZW4odmktPmN2cSkpCiAJCWNwdV9yZWxheCgpOwogCi0JcmV0dXJuIHN0YXR1cyA9PSBWSVJUSU9fTkVUX09LOworCXJldHVybiB2aS0+Y3RybF9zdGF0dXMgPT0gVklSVElPX05FVF9PSzsKIH0KIAogc3RhdGljIGludCB2aXJ0bmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQpAQCAtMTE1MSw3ICsxMTU2LDYgQEAKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOwotCXU4IHByb21pc2MsIGFsbG11bHRpOwogCXN0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfbWFjICptYWNfZGF0YTsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwogCWludCB1Y19jb3VudDsKQEAgLTExNjMsMjIgKzExNjcsMjIgQEAKIAlpZiAoIXZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX0NUUkxfUlgpKQogCQlyZXR1cm47CiAKLQlwcm9taXNjID0gKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICE9IDApOwotCWFsbG11bHRpID0gKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAhPSAwKTsKKwl2aS0+Y3RybF9wcm9taXNjID0gKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICE9IDApOworCXZpLT5jdHJsX2FsbG11bHRpID0gKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAhPSAwKTsKIAotCXNnX2luaXRfb25lKHNnLCAmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKKwlzZ19pbml0X29uZShzZywgJnZpLT5jdHJsX3Byb21pc2MsIHNpemVvZih2aS0+Y3RybF9wcm9taXNjKSk7CiAKIAlpZiAoIXZpcnRuZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfUlgsCiAJCQkJICBWSVJUSU9fTkVUX0NUUkxfUlhfUFJPTUlTQywgc2cpKQogCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gJXNhYmxlIHByb21pc2MgbW9kZS5cbiIsCi0JCQkgcHJvbWlzYyA/ICJlbiIgOiAiZGlzIik7CisJCQkgdmktPmN0cmxfcHJvbWlzYyA/ICJlbiIgOiAiZGlzIik7CiAKLQlzZ19pbml0X29uZShzZywgJmFsbG11bHRpLCBzaXplb2YoYWxsbXVsdGkpKTsKKwlzZ19pbml0X29uZShzZywgJnZpLT5jdHJsX2FsbG11bHRpLCBzaXplb2YodmktPmN0cmxfYWxsbXVsdGkpKTsKIAogCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9SWCwKIAkJCQkgIFZJUlRJT19ORVRfQ1RSTF9SWF9BTExNVUxUSSwgc2cpKQogCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gJXNhYmxlIGFsbG11bHRpIG1vZGUuXG4iLAotCQkJIGFsbG11bHRpID8gImVuIiA6ICJkaXMiKTsKKwkJCSB2aS0+Y3RybF9hbGxtdWx0aSA/ICJlbiIgOiAiZGlzIik7CiAKIAl1Y19jb3VudCA9IG5ldGRldl91Y19jb3VudChkZXYpOwogCW1jX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKaW5kZXggNDZmNGNhZC4uNDE3OTAzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwpAQCAtNTg3LDYgKzU4NywxMiBAQAogCQkJCQkJJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCQkJCXJiaS0+c2tiLT5kYXRhLCByYmktPmxlbiwKIAkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCQkgICAgICByYmktPmRtYV9hZGRyKSkgeworCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShyYmktPnNrYik7CisJCQkJCXJxLT5zdGF0cy5yeF9idWZfYWxsb2NfZmFpbHVyZSsrOworCQkJCQlicmVhazsKKwkJCQl9CiAJCQl9IGVsc2UgewogCQkJCS8qIHJ4IGJ1ZmZlciBza2lwcGVkIGJ5IHRoZSBkZXZpY2UgKi8KIAkJCX0KQEAgLTYwNSwxMyArNjExLDE4IEBACiAJCQkJCQkmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCQkJcmJpLT5wYWdlLCAwLCBQQUdFX1NJWkUsCiAJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkJICAgICAgcmJpLT5kbWFfYWRkcikpIHsKKwkJCQkJcHV0X3BhZ2UocmJpLT5wYWdlKTsKKwkJCQkJcnEtPnN0YXRzLnJ4X2J1Zl9hbGxvY19mYWlsdXJlKys7CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJLyogcnggYnVmZmVycyBza2lwcGVkIGJ5IHRoZSBkZXZpY2UgKi8KIAkJCX0KIAkJCXZhbCA9IFZNWE5FVDNfUlhEX0JUWVBFX0JPRFkgPDwgVk1YTkVUM19SWERfQlRZUEVfU0hJRlQ7CiAJCX0KIAotCQlCVUdfT04ocmJpLT5kbWFfYWRkciA9PSAwKTsKIAkJZ2QtPnJ4ZC5hZGRyID0gY3B1X3RvX2xlNjQocmJpLT5kbWFfYWRkcik7CiAJCWdkLT5kd29yZFsyXSA9IGNwdV90b19sZTMyKCghcmluZy0+Z2VuIDw8IFZNWE5FVDNfUlhEX0dFTl9TSElGVCkKIAkJCQkJICAgfCB2YWwgfCByYmktPmxlbik7CkBAIC02NTUsNyArNjY2LDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogdm14bmV0M19tYXBfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2bXhuZXQzX3R4X2N0eCAqY3R4LAogCQlzdHJ1Y3Qgdm14bmV0M190eF9xdWV1ZSAqdHEsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQpAQCAtNzE1LDYgKzcyNiw4IEBACiAJCXRiaS0+ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCXNrYi0+ZGF0YSArIGJ1Zl9vZmZzZXQsIGJ1Zl9zaXplLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmFkYXB0ZXItPnBkZXYtPmRldiwgdGJpLT5kbWFfYWRkcikpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQl0YmktPmxlbiA9IGJ1Zl9zaXplOwogCkBAIC03NTUsNiArNzY4LDggQEAKIAkJCXRiaS0+ZG1hX2FkZHIgPSBza2JfZnJhZ19kbWFfbWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGZyYWcsCiAJCQkJCQkJIGJ1Zl9vZmZzZXQsIGJ1Zl9zaXplLAogCQkJCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYWRhcHRlci0+cGRldi0+ZGV2LCB0YmktPmRtYV9hZGRyKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQkJdGJpLT5sZW4gPSBidWZfc2l6ZTsKIApAQCAtNzgyLDYgKzc5Nyw4IEBACiAJLyogc2V0IHRoZSBsYXN0IGJ1Zl9pbmZvIGZvciB0aGUgcGt0ICovCiAJdGJpLT5za2IgPSBza2I7CiAJdGJpLT5zb3BfaWR4ID0gY3R4LT5zb3BfdHhkIC0gdHEtPnR4X3JpbmcuYmFzZTsKKworCXJldHVybiAwOwogfQogCiAKQEAgLTEwMjAsNyArMTAzNyw4IEBACiAJfQogCiAJLyogZmlsbCB0eCBkZXNjcyByZWxhdGVkIHRvIGFkZHIgJiBsZW4gKi8KLQl2bXhuZXQzX21hcF9wa3Qoc2tiLCAmY3R4LCB0cSwgYWRhcHRlci0+cGRldiwgYWRhcHRlcik7CisJaWYgKHZteG5ldDNfbWFwX3BrdChza2IsICZjdHgsIHRxLCBhZGFwdGVyLT5wZGV2LCBhZGFwdGVyKSkKKwkJZ290byB1bmxvY2tfZHJvcF9wa3Q7CiAKIAkvKiBzZXR1cCB0aGUgRU9QIGRlc2MgKi8KIAljdHguZW9wX3R4ZC0+ZHdvcmRbM10gPSBjcHVfdG9fbGUzMihWTVhORVQzX1RYRF9DUSB8IFZNWE5FVDNfVFhEX0VPUCk7CkBAIC0xMjMxLDYgKzEyNDksNyBAQAogCQlzdHJ1Y3Qgdm14bmV0M19yeF9idWZfaW5mbyAqcmJpOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV3X3NrYiA9IE5VTEw7CiAJCXN0cnVjdCBwYWdlICpuZXdfcGFnZSA9IE5VTEw7CisJCWRtYV9hZGRyX3QgbmV3X2RtYV9hZGRyOwogCQlpbnQgbnVtX3RvX2FsbG9jOwogCQlzdHJ1Y3QgVm14bmV0M19SeERlc2MgKnJ4ZDsKIAkJdTMyIGlkeCwgcmluZ19pZHg7CkBAIC0xMjg3LDYgKzEzMDYsMjEgQEAKIAkJCQlza2lwX3BhZ2VfZnJhZ3MgPSB0cnVlOwogCQkJCWdvdG8gcmNkX2RvbmU7CiAJCQl9CisJCQluZXdfZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkJICAgICAgbmV3X3NrYi0+ZGF0YSwgcmJpLT5sZW4sCisJCQkJCQkgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSAgICAgIG5ld19kbWFfYWRkcikpIHsKKwkJCQlkZXZfa2ZyZWVfc2tiKG5ld19za2IpOworCQkJCS8qIFNrYiBhbGxvY2F0aW9uIGZhaWxlZCwgZG8gbm90IGhhbmRvdmVyIHRoaXMKKwkJCQkgKiBza2IgdG8gc3RhY2suIFJldXNlIGl0LiBEcm9wIHRoZSBleGlzdGluZyBwa3QKKwkJCQkgKi8KKwkJCQlycS0+c3RhdHMucnhfYnVmX2FsbG9jX2ZhaWx1cmUrKzsKKwkJCQljdHgtPnNrYiA9IE5VTEw7CisJCQkJcnEtPnN0YXRzLmRyb3BfdG90YWwrKzsKKwkJCQlza2lwX3BhZ2VfZnJhZ3MgPSB0cnVlOworCQkJCWdvdG8gcmNkX2RvbmU7CisJCQl9CiAKIAkJCWRtYV91bm1hcF9zaW5nbGUoJmFkYXB0ZXItPnBkZXYtPmRldiwgcmJpLT5kbWFfYWRkciwKIAkJCQkJIHJiaS0+bGVuLApAQCAtMTMwMyw5ICsxMzM3LDcgQEAKIAogCQkJLyogSW1tZWRpYXRlIHJlZmlsbCAqLwogCQkJcmJpLT5za2IgPSBuZXdfc2tiOwotCQkJcmJpLT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkJCQkgICAgICAgcmJpLT5za2ItPmRhdGEsIHJiaS0+bGVuLAotCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyYmktPmRtYV9hZGRyID0gbmV3X2RtYV9hZGRyOwogCQkJcnhkLT5hZGRyID0gY3B1X3RvX2xlNjQocmJpLT5kbWFfYWRkcik7CiAJCQlyeGQtPmxlbiA9IHJiaS0+bGVuOwogCQkJaWYgKGFkYXB0ZXItPnZlcnNpb24gPT0gMiAmJgpAQCAtMTM0OCw2ICsxMzgwLDE5IEBACiAJCQkJCXNraXBfcGFnZV9mcmFncyA9IHRydWU7CiAJCQkJCWdvdG8gcmNkX2RvbmU7CiAJCQkJfQorCQkJCW5ld19kbWFfYWRkciA9IGRtYV9tYXBfcGFnZSgmYWRhcHRlci0+cGRldi0+ZGV2CisJCQkJCQkJLCByYmktPnBhZ2UsCisJCQkJCQkJMCwgUEFHRV9TSVpFLAorCQkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCQkgICAgICBuZXdfZG1hX2FkZHIpKSB7CisJCQkJCXB1dF9wYWdlKG5ld19wYWdlKTsKKwkJCQkJcnEtPnN0YXRzLnJ4X2J1Zl9hbGxvY19mYWlsdXJlKys7CisJCQkJCWRldl9rZnJlZV9za2IoY3R4LT5za2IpOworCQkJCQljdHgtPnNrYiA9IE5VTEw7CisJCQkJCXNraXBfcGFnZV9mcmFncyA9IHRydWU7CisJCQkJCWdvdG8gcmNkX2RvbmU7CisJCQkJfQogCiAJCQkJZG1hX3VubWFwX3BhZ2UoJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCQkJICAgICAgIHJiaS0+ZG1hX2FkZHIsIHJiaS0+bGVuLApAQCAtMTM1NywxMCArMTQwMiw3IEBACiAKIAkJCQkvKiBJbW1lZGlhdGUgcmVmaWxsICovCiAJCQkJcmJpLT5wYWdlID0gbmV3X3BhZ2U7Ci0JCQkJcmJpLT5kbWFfYWRkciA9IGRtYV9tYXBfcGFnZSgmYWRhcHRlci0+cGRldi0+ZGV2Ci0JCQkJCQkJLCByYmktPnBhZ2UsCi0JCQkJCQkJMCwgUEFHRV9TSVpFLAotCQkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJcmJpLT5kbWFfYWRkciA9IG5ld19kbWFfYWRkcjsKIAkJCQlyeGQtPmFkZHIgPSBjcHVfdG9fbGU2NChyYmktPmRtYV9hZGRyKTsKIAkJCQlyeGQtPmxlbiA9IHJiaS0+bGVuOwogCQkJfQpAQCAtMjE1NywxNiArMjE5OSwxOCBAQAogCQlpZiAoIW5ldGRldl9tY19lbXB0eShuZXRkZXYpKSB7CiAJCQluZXdfdGFibGUgPSB2bXhuZXQzX2NvcHlfbWMobmV0ZGV2KTsKIAkJCWlmIChuZXdfdGFibGUpIHsKLQkJCQlyeENvbmYtPm1mVGFibGVMZW4gPSBjcHVfdG9fbGUxNigKLQkJCQkJbmV0ZGV2X21jX2NvdW50KG5ldGRldikgKiBFVEhfQUxFTik7CisJCQkJc2l6ZV90IHN6ID0gbmV0ZGV2X21jX2NvdW50KG5ldGRldikgKiBFVEhfQUxFTjsKKworCQkJCXJ4Q29uZi0+bWZUYWJsZUxlbiA9IGNwdV90b19sZTE2KHN6KTsKIAkJCQluZXdfdGFibGVfcGEgPSBkbWFfbWFwX3NpbmdsZSgKIAkJCQkJCQkmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCQkJCW5ld190YWJsZSwKLQkJCQkJCQlyeENvbmYtPm1mVGFibGVMZW4sCisJCQkJCQkJc3osCiAJCQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJCQl9CiAKLQkJCWlmIChuZXdfdGFibGVfcGEpIHsKKwkJCWlmICghZG1hX21hcHBpbmdfZXJyb3IoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJICAgICAgIG5ld190YWJsZV9wYSkpIHsKIAkJCQluZXdfbW9kZSB8PSBWTVhORVQzX1JYTV9NQ0FTVDsKIAkJCQlyeENvbmYtPm1mVGFibGVQQSA9IGNwdV90b19sZTY0KG5ld190YWJsZV9wYSk7CiAJCQl9IGVsc2UgewpAQCAtMzA3NCw2ICszMTE4LDExIEBACiAJYWRhcHRlci0+YWRhcHRlcl9wYSA9IGRtYV9tYXBfc2luZ2xlKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGFkYXB0ZXIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIpLAogCQkJCQkgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT5hZGFwdGVyX3BhKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gbWFwIGRtYVxuIik7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX2RtYV9tYXA7CisJfQogCWFkYXB0ZXItPnNoYXJlZCA9IGRtYV9hbGxvY19jb2hlcmVudCgKIAkJCQkmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCXNpemVvZihzdHJ1Y3QgVm14bmV0M19Ecml2ZXJTaGFyZWQpLApAQCAtMzIzMiw2ICszMjgxLDcgQEAKIGVycl9hbGxvY19zaGFyZWQ6CiAJZG1hX3VubWFwX3NpbmdsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLT5hZGFwdGVyX3BhLAogCQkJIHNpemVvZihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyKSwgUENJX0RNQV9UT0RFVklDRSk7CitlcnJfZG1hX21hcDoKIAlmcmVlX25ldGRldihuZXRkZXYpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmggYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmgKaW5kZXggM2Y4NTlhNS4uNGM1OGM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaApAQCAtNjksMTAgKzY5LDEwIEBACiAvKgogICogVmVyc2lvbiBudW1iZXJzCiAgKi8KLSNkZWZpbmUgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9TVFJJTkcgICAiMS40LjMuMC1rIgorI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1NUUklORyAgICIxLjQuNC4wLWsiCiAKIC8qIGEgMzItYml0IGludCwgZWFjaCBieXRlIGVuY29kZSBhIHZlcmlvbiBudW1iZXIgaW4gVk1YTkVUM19EUklWRVJfVkVSU0lPTiAqLwotI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX05VTSAgICAgIDB4MDEwNDAzMDAKKyNkZWZpbmUgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9OVU0gICAgICAweDAxMDQwNDAwCiAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0lfTVNJKQogCS8qIFJTUyBvbmx5IG1ha2VzIHNlbnNlIGlmIE1TSS1YIGlzIHN1cHBvcnRlZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZyZi5jIGIvZHJpdmVycy9uZXQvdnJmLmMKaW5kZXggOTJmYTNlMS4uNGY5NzQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnJmLmMKKysrIGIvZHJpdmVycy9uZXQvdnJmLmMKQEAgLTkwNyw3ICs5MDcsNiBAQAogCQkgICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQogewogCXN0cnVjdCBuZXRfdnJmICp2cmYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnI7CiAKIAlpZiAoIWRhdGEgfHwgIWRhdGFbSUZMQV9WUkZfVEFCTEVdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTkxNiwxNSArOTE1LDcgQEAKIAogCWRldi0+cHJpdl9mbGFncyB8PSBJRkZfTDNNREVWX01BU1RFUjsKIAotCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9mYWlsOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9mYWlsOgotCWZyZWVfbmV0ZGV2KGRldik7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiB9CiAKIHN0YXRpYyBzaXplX3QgdnJmX25sX2dldHNpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuLmMgYi9kcml2ZXJzL25ldC92eGxhbi5jCmluZGV4IDYzNjlhNTcuLmJhMzYzY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvdnhsYW4uYwpAQCAtMTE1OCw3ICsxMTU4LDYgQEAKIAlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM7CiAJdW5pb24gdnhsYW5fYWRkciBzYWRkcjsKIAlpbnQgZXJyID0gMDsKLQl1bmlvbiB2eGxhbl9hZGRyICpyZW1vdGVfaXA7CiAKIAkvKiBGb3IgZmxvdyBiYXNlZCBkZXZpY2VzLCBtYXAgYWxsIHBhY2tldHMgdG8gVk5JIDAgKi8KIAlpZiAodnMtPmZsYWdzICYgVlhMQU5fRl9DT0xMRUNUX01FVEFEQVRBKQpAQCAtMTE2OSw3ICsxMTY4LDYgQEAKIAlpZiAoIXZ4bGFuKQogCQlnb3RvIGRyb3A7CiAKLQlyZW1vdGVfaXAgPSAmdnhsYW4tPmRlZmF1bHRfZHN0LnJlbW90ZV9pcDsKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCXNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHZ4bGFuLT5uZXQsIGRldl9uZXQodnhsYW4tPmRldikpKTsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB2eGxhbi0+ZGV2KTsKQEAgLTExNzksOCArMTE3Nyw4IEBACiAJaWYgKGV0aGVyX2FkZHJfZXF1YWwoZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgdnhsYW4tPmRldi0+ZGV2X2FkZHIpKQogCQlnb3RvIGRyb3A7CiAKLQkvKiBSZS1leGFtaW5lIGlubmVyIEV0aGVybmV0IHBhY2tldCAqLwotCWlmIChyZW1vdGVfaXAtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJLyogR2V0IGRhdGEgZnJvbSB0aGUgb3V0ZXIgSVAgaGVhZGVyICovCisJaWYgKHZ4bGFuX2dldF9za19mYW1pbHkodnMpID09IEFGX0lORVQpIHsKIAkJb2lwID0gaXBfaGRyKHNrYik7CiAJCXNhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBvaXAtPnNhZGRyOwogCQlzYWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOwpAQCAtMTg0OCw2ICsxODQ2LDM0IEBACiAJCQkJICAgISh2eGZsYWdzICYgVlhMQU5fRl9VRFBfQ1NVTSkpOwogfQogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKK3N0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICp2eGxhbjZfZ2V0X3JvdXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGludCBvaWYsCisJCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkJICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQoreworCXN0cnVjdCBkc3RfZW50cnkgKm5kc3Q7CisJc3RydWN0IGZsb3dpNiBmbDY7CisJaW50IGVycjsKKworCW1lbXNldCgmZmw2LCAwLCBzaXplb2YoZmw2KSk7CisJZmw2LmZsb3dpNl9vaWYgPSBvaWY7CisJZmw2LmRhZGRyID0gKmRhZGRyOworCWZsNi5zYWRkciA9IHZ4bGFuLT5jZmcuc2FkZHIuc2luNi5zaW42X2FkZHI7CisJZmw2LmZsb3dpNl9tYXJrID0gc2tiLT5tYXJrOworCWZsNi5mbG93aTZfcHJvdG8gPSBJUFBST1RPX1VEUDsKKworCWVyciA9IGlwdjZfc3R1Yi0+aXB2Nl9kc3RfbG9va3VwKHZ4bGFuLT5uZXQsCisJCQkJCSB2eGxhbi0+dm42X3NvY2stPnNvY2stPnNrLAorCQkJCQkgJm5kc3QsICZmbDYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJKnNhZGRyID0gZmw2LnNhZGRyOworCXJldHVybiBuZHN0OworfQorI2VuZGlmCisKIC8qIEJ5cGFzcyBlbmNhcHN1bGF0aW9uIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyBsb2NhbCAqLwogc3RhdGljIHZvaWQgdnhsYW5fZW5jYXBfYnlwYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2eGxhbl9kZXYgKnNyY192eGxhbiwKIAkJCSAgICAgICBzdHJ1Y3QgdnhsYW5fZGV2ICpkc3RfdnhsYW4pCkBAIC0yMDM1LDIxICsyMDYxLDE3IEBACiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZHN0X2VudHJ5ICpuZHN0OwotCQlzdHJ1Y3QgZmxvd2k2IGZsNjsKKwkJc3RydWN0IGluNl9hZGRyIHNhZGRyOwogCQl1MzIgcnQ2aV9mbGFnczsKIAogCQlpZiAoIXZ4bGFuLT52bjZfc29jaykKIAkJCWdvdG8gZHJvcDsKIAkJc2sgPSB2eGxhbi0+dm42X3NvY2stPnNvY2stPnNrOwogCi0JCW1lbXNldCgmZmw2LCAwLCBzaXplb2YoZmw2KSk7Ci0JCWZsNi5mbG93aTZfb2lmID0gcmRzdCA/IHJkc3QtPnJlbW90ZV9pZmluZGV4IDogMDsKLQkJZmw2LmRhZGRyID0gZHN0LT5zaW42LnNpbjZfYWRkcjsKLQkJZmw2LnNhZGRyID0gdnhsYW4tPmNmZy5zYWRkci5zaW42LnNpbjZfYWRkcjsKLQkJZmw2LmZsb3dpNl9tYXJrID0gc2tiLT5tYXJrOwotCQlmbDYuZmxvd2k2X3Byb3RvID0gSVBQUk9UT19VRFA7Ci0KLQkJaWYgKGlwdjZfc3R1Yi0+aXB2Nl9kc3RfbG9va3VwKHZ4bGFuLT5uZXQsIHNrLCAmbmRzdCwgJmZsNikpIHsKKwkJbmRzdCA9IHZ4bGFuNl9nZXRfcm91dGUodnhsYW4sIHNrYiwKKwkJCQkJcmRzdCA/IHJkc3QtPnJlbW90ZV9pZmluZGV4IDogMCwKKwkJCQkJJmRzdC0+c2luNi5zaW42X2FkZHIsICZzYWRkcik7CisJCWlmIChJU19FUlIobmRzdCkpIHsKIAkJCW5ldGRldl9kYmcoZGV2LCAibm8gcm91dGUgdG8gJXBJNlxuIiwKIAkJCQkgICAmZHN0LT5zaW42LnNpbjZfYWRkcik7CiAJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CkBAIC0yMDgxLDcgKzIxMDMsNyBAQAogCQl9CiAKIAkJdHRsID0gdHRsID8gOiBpcDZfZHN0X2hvcGxpbWl0KG5kc3QpOwotCQllcnIgPSB2eGxhbjZfeG1pdF9za2IobmRzdCwgc2ssIHNrYiwgZGV2LCAmZmw2LnNhZGRyLCAmZmw2LmRhZGRyLAorCQllcnIgPSB2eGxhbjZfeG1pdF9za2IobmRzdCwgc2ssIHNrYiwgZGV2LCAmc2FkZHIsICZkc3QtPnNpbjYuc2luNl9hZGRyLAogCQkJCSAgICAgIDAsIHR0bCwgc3JjX3BvcnQsIGRzdF9wb3J0LCBodG9ubCh2bmkgPDwgOCksIG1kLAogCQkJCSAgICAgICFuZXRfZXEodnhsYW4tPm5ldCwgZGV2X25ldCh2eGxhbi0+ZGV2KSksCiAJCQkJICAgICAgZmxhZ3MpOwpAQCAtMjM5NSw5ICsyNDE3LDMwIEBACiAJCQkJICB2eGxhbi0+Y2ZnLnBvcnRfbWF4LCB0cnVlKTsKIAlkcG9ydCA9IGluZm8tPmtleS50cF9kc3QgPyA6IHZ4bGFuLT5jZmcuZHN0X3BvcnQ7CiAKLQlpZiAoaXBfdHVubmVsX2luZm9fYWYoaW5mbykgPT0gQUZfSU5FVCkKKwlpZiAoaXBfdHVubmVsX2luZm9fYWYoaW5mbykgPT0gQUZfSU5FVCkgeworCQlpZiAoIXZ4bGFuLT52bjRfc29jaykKKwkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR1cm4gZWdyZXNzX2lwdjRfdHVuX2luZm8oZGV2LCBza2IsIGluZm8sIHNwb3J0LCBkcG9ydCk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQorCQlzdHJ1Y3QgZHN0X2VudHJ5ICpuZHN0OworCisJCWlmICghdnhsYW4tPnZuNl9zb2NrKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW5kc3QgPSB2eGxhbjZfZ2V0X3JvdXRlKHZ4bGFuLCBza2IsIDAsCisJCQkJCSZpbmZvLT5rZXkudS5pcHY2LmRzdCwKKwkJCQkJJmluZm8tPmtleS51LmlwdjYuc3JjKTsKKwkJaWYgKElTX0VSUihuZHN0KSkKKwkJCXJldHVybiBQVFJfRVJSKG5kc3QpOworCQlkc3RfcmVsZWFzZShuZHN0KTsKKworCQlpbmZvLT5rZXkudHBfc3JjID0gc3BvcnQ7CisJCWluZm8tPmtleS50cF9kc3QgPSBkcG9ydDsKKyNlbHNlIC8qICFDT05GSUdfSVBWNiAqLworCQlyZXR1cm4gLUVQRk5PU1VQUE9SVDsKKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2eGxhbl9uZXRkZXZfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKaW5kZXggZTkyYWFmNi4uODk1NDFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCkBAIC0xMDc1LDExICsxMDc1LDEwIEBACiAKIAl1c2VkID0gcHZjX2lzX3VzZWQocHZjKTsKIAotCWlmICh0eXBlID09IEFSUEhSRF9FVEhFUikgeworCWlmICh0eXBlID09IEFSUEhSRF9FVEhFUikKIAkJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsICJwdmNldGglZCIsIE5FVF9OQU1FX1VOS05PV04sCiAJCQkJICAgZXRoZXJfc2V0dXApOwotCQlkZXYtPnByaXZfZmxhZ3MgJj0gfklGRl9UWF9TS0JfU0hBUklORzsKLQl9IGVsc2UKKwllbHNlCiAJCWRldiA9IGFsbG9jX25ldGRldigwLCAicHZjJWQiLCBORVRfTkFNRV9VTktOT1dOLCBwdmNfc2V0dXApOwogCiAJaWYgKCFkZXYpIHsKQEAgLTEwODgsOSArMTA4NywxMCBAQAogCQlyZXR1cm4gLUVOT0JVRlM7CiAJfQogCi0JaWYgKHR5cGUgPT0gQVJQSFJEX0VUSEVSKQorCWlmICh0eXBlID09IEFSUEhSRF9FVEhFUikgeworCQlkZXYtPnByaXZfZmxhZ3MgJj0gfklGRl9UWF9TS0JfU0hBUklORzsKIAkJZXRoX2h3X2FkZHJfcmFuZG9tKGRldik7Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJKihfX2JlMTYqKWRldi0+ZGV2X2FkZHIgPSBodG9ucyhkbGNpKTsKIAkJZGxjaV90b19xOTIyKGRldi0+YnJvYWRjYXN0LCBkbGNpKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwppbmRleCA1YzQ3YjAxLi5jZDM5MDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKQEAgLTU0OSwxNiArNTQ5LDEyIEBACiAKIHN0YXRpYyBpbnQgeDI1X2FzeV9vcGVuX3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCB4MjVfYXN5ICpzbCA9IHR0eS0+ZGlzY19kYXRhOworCXN0cnVjdCB4MjVfYXN5ICpzbDsKIAlpbnQgZXJyOwogCiAJaWYgKHR0eS0+b3BzLT53cml0ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQkvKiBGaXJzdCBtYWtlIHN1cmUgd2UncmUgbm90IGFscmVhZHkgY29ubmVjdGVkLiAqLwotCWlmIChzbCAmJiBzbC0+bWFnaWMgPT0gWDI1X0FTWV9NQUdJQykKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KIAkvKiBPSy4gIEZpbmQgYSBmcmVlIFguMjUgY2hhbm5lbCB0byB1c2UuICovCiAJc2wgPSB4MjVfYXN5X2FsbG9jKCk7CiAJaWYgKHNsID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY29yZS5jCmluZGV4IGFhOWJkOTIuLjA5NDdjYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY29yZS5jCkBAIC01MSw2ICs1MSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEwa19od19wYXJhbXMgYXRoMTBrX2h3X3BhcmFtc19saXN0W10gPSB7CiAJewogCQkuaWQgPSBRQ0E5ODhYX0hXXzJfMF9WRVJTSU9OLAorCQkuZGV2X2lkID0gUUNBOTg4WF8yXzBfREVWSUNFX0lELAogCQkubmFtZSA9ICJxY2E5ODh4IGh3Mi4wIiwKIAkJLnBhdGNoX2xvYWRfYWRkciA9IFFDQTk4OFhfSFdfMl8wX1BBVENIX0xPQURfQUREUiwKIAkJLnVhcnRfcGluID0gNywKQEAgLTY5LDYgKzcwLDI1IEBACiAJfSwKIAl7CiAJCS5pZCA9IFFDQTYxNzRfSFdfMl8xX1ZFUlNJT04sCisJCS5kZXZfaWQgPSBRQ0E2MTY0XzJfMV9ERVZJQ0VfSUQsCisJCS5uYW1lID0gInFjYTYxNjQgaHcyLjEiLAorCQkucGF0Y2hfbG9hZF9hZGRyID0gUUNBNjE3NF9IV18yXzFfUEFUQ0hfTE9BRF9BRERSLAorCQkudWFydF9waW4gPSA2LAorCQkub3RwX2V4ZV9wYXJhbSA9IDAsCisJCS5jaGFubmVsX2NvdW50ZXJzX2ZyZXFfaHogPSA4ODAwMCwKKwkJLm1heF9wcm9iZV9yZXNwX2Rlc2NfdGhyZXMgPSAwLAorCQkuZncgPSB7CisJCQkuZGlyID0gUUNBNjE3NF9IV18yXzFfRldfRElSLAorCQkJLmZ3ID0gUUNBNjE3NF9IV18yXzFfRldfRklMRSwKKwkJCS5vdHAgPSBRQ0E2MTc0X0hXXzJfMV9PVFBfRklMRSwKKwkJCS5ib2FyZCA9IFFDQTYxNzRfSFdfMl8xX0JPQVJEX0RBVEFfRklMRSwKKwkJCS5ib2FyZF9zaXplID0gUUNBNjE3NF9CT0FSRF9EQVRBX1NaLAorCQkJLmJvYXJkX2V4dF9zaXplID0gUUNBNjE3NF9CT0FSRF9FWFRfREFUQV9TWiwKKwkJfSwKKwl9LAorCXsKKwkJLmlkID0gUUNBNjE3NF9IV18yXzFfVkVSU0lPTiwKKwkJLmRldl9pZCA9IFFDQTYxNzRfMl8xX0RFVklDRV9JRCwKIAkJLm5hbWUgPSAicWNhNjE3NCBodzIuMSIsCiAJCS5wYXRjaF9sb2FkX2FkZHIgPSBRQ0E2MTc0X0hXXzJfMV9QQVRDSF9MT0FEX0FERFIsCiAJCS51YXJ0X3BpbiA9IDYsCkBAIC04Niw2ICsxMDYsNyBAQAogCX0sCiAJewogCQkuaWQgPSBRQ0E2MTc0X0hXXzNfMF9WRVJTSU9OLAorCQkuZGV2X2lkID0gUUNBNjE3NF8yXzFfREVWSUNFX0lELAogCQkubmFtZSA9ICJxY2E2MTc0IGh3My4wIiwKIAkJLnBhdGNoX2xvYWRfYWRkciA9IFFDQTYxNzRfSFdfM18wX1BBVENIX0xPQURfQUREUiwKIAkJLnVhcnRfcGluID0gNiwKQEAgLTEwMyw2ICsxMjQsNyBAQAogCX0sCiAJewogCQkuaWQgPSBRQ0E2MTc0X0hXXzNfMl9WRVJTSU9OLAorCQkuZGV2X2lkID0gUUNBNjE3NF8yXzFfREVWSUNFX0lELAogCQkubmFtZSA9ICJxY2E2MTc0IGh3My4yIiwKIAkJLnBhdGNoX2xvYWRfYWRkciA9IFFDQTYxNzRfSFdfM18wX1BBVENIX0xPQURfQUREUiwKIAkJLnVhcnRfcGluID0gNiwKQEAgLTEyMSw2ICsxNDMsNyBAQAogCX0sCiAJewogCQkuaWQgPSBRQ0E5OVgwX0hXXzJfMF9ERVZfVkVSU0lPTiwKKwkJLmRldl9pZCA9IFFDQTk5WDBfMl8wX0RFVklDRV9JRCwKIAkJLm5hbWUgPSAicWNhOTl4MCBodzIuMCIsCiAJCS5wYXRjaF9sb2FkX2FkZHIgPSBRQ0E5OVgwX0hXXzJfMF9QQVRDSF9MT0FEX0FERFIsCiAJCS51YXJ0X3BpbiA9IDcsCkBAIC0xMzksMTAgKzE2MiwzMSBAQAogCX0sCiAJewogCQkuaWQgPSBRQ0E5Mzc3X0hXXzFfMF9ERVZfVkVSU0lPTiwKKwkJLmRldl9pZCA9IFFDQTkzNzdfMV8wX0RFVklDRV9JRCwKIAkJLm5hbWUgPSAicWNhOTM3NyBodzEuMCIsCiAJCS5wYXRjaF9sb2FkX2FkZHIgPSBRQ0E5Mzc3X0hXXzFfMF9QQVRDSF9MT0FEX0FERFIsCi0JCS51YXJ0X3BpbiA9IDcsCisJCS51YXJ0X3BpbiA9IDYsCiAJCS5vdHBfZXhlX3BhcmFtID0gMCwKKwkJLmNoYW5uZWxfY291bnRlcnNfZnJlcV9oeiA9IDg4MDAwLAorCQkubWF4X3Byb2JlX3Jlc3BfZGVzY190aHJlcyA9IDAsCisJCS5mdyA9IHsKKwkJCS5kaXIgPSBRQ0E5Mzc3X0hXXzFfMF9GV19ESVIsCisJCQkuZncgPSBRQ0E5Mzc3X0hXXzFfMF9GV19GSUxFLAorCQkJLm90cCA9IFFDQTkzNzdfSFdfMV8wX09UUF9GSUxFLAorCQkJLmJvYXJkID0gUUNBOTM3N19IV18xXzBfQk9BUkRfREFUQV9GSUxFLAorCQkJLmJvYXJkX3NpemUgPSBRQ0E5Mzc3X0JPQVJEX0RBVEFfU1osCisJCQkuYm9hcmRfZXh0X3NpemUgPSBRQ0E5Mzc3X0JPQVJEX0VYVF9EQVRBX1NaLAorCQl9LAorCX0sCisJeworCQkuaWQgPSBRQ0E5Mzc3X0hXXzFfMV9ERVZfVkVSU0lPTiwKKwkJLmRldl9pZCA9IFFDQTkzNzdfMV8wX0RFVklDRV9JRCwKKwkJLm5hbWUgPSAicWNhOTM3NyBodzEuMSIsCisJCS5wYXRjaF9sb2FkX2FkZHIgPSBRQ0E5Mzc3X0hXXzFfMF9QQVRDSF9MT0FEX0FERFIsCisJCS51YXJ0X3BpbiA9IDYsCisJCS5vdHBfZXhlX3BhcmFtID0gMCwKKwkJLmNoYW5uZWxfY291bnRlcnNfZnJlcV9oeiA9IDg4MDAwLAorCQkubWF4X3Byb2JlX3Jlc3BfZGVzY190aHJlcyA9IDAsCiAJCS5mdyA9IHsKIAkJCS5kaXIgPSBRQ0E5Mzc3X0hXXzFfMF9GV19ESVIsCiAJCQkuZncgPSBRQ0E5Mzc3X0hXXzFfMF9GV19GSUxFLApAQCAtMTI2Myw3ICsxMzA3LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdGgxMGtfaHdfcGFyYW1zX2xpc3QpOyBpKyspIHsKIAkJaHdfcGFyYW1zID0gJmF0aDEwa19od19wYXJhbXNfbGlzdFtpXTsKIAotCQlpZiAoaHdfcGFyYW1zLT5pZCA9PSBhci0+dGFyZ2V0X3ZlcnNpb24pCisJCWlmIChod19wYXJhbXMtPmlkID09IGFyLT50YXJnZXRfdmVyc2lvbiAmJgorCQkgICAgaHdfcGFyYW1zLT5kZXZfaWQgPT0gYXItPmRldl9pZCkKIAkJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2NvcmUuaAppbmRleCAwMThjNjRmLi44NThkNzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2NvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2NvcmUuaApAQCAtNjM2LDYgKzYzNiw3IEBACiAKIAlzdHJ1Y3QgYXRoMTBrX2h3X3BhcmFtcyB7CiAJCXUzMiBpZDsKKwkJdTE2IGRldl9pZDsKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJdTMyIHBhdGNoX2xvYWRfYWRkcjsKIAkJaW50IHVhcnRfcGluOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9ody5oCmluZGV4IDM5OTY2YTAuLjcxM2MyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h3LmgKQEAgLTIyLDYgKzIyLDEyIEBACiAKICNkZWZpbmUgQVRIMTBLX0ZXX0RJUgkJCSJhdGgxMGsiCiAKKyNkZWZpbmUgUUNBOTg4WF8yXzBfREVWSUNFX0lEICAgKDB4MDAzYykKKyNkZWZpbmUgUUNBNjE2NF8yXzFfREVWSUNFX0lEICAgKDB4MDA0MSkKKyNkZWZpbmUgUUNBNjE3NF8yXzFfREVWSUNFX0lEICAgKDB4MDAzZSkKKyNkZWZpbmUgUUNBOTlYMF8yXzBfREVWSUNFX0lEICAgKDB4MDA0MCkKKyNkZWZpbmUgUUNBOTM3N18xXzBfREVWSUNFX0lEICAgKDB4MDA0MikKKwogLyogUUNBOTg4WCAxLjAgZGVmaW5pdGlvbnMgKHVuc3VwcG9ydGVkKSAqLwogI2RlZmluZSBRQ0E5ODhYX0hXXzFfMF9DSElQX0lEX1JFVgkweDAKIApAQCAtNDIsNiArNDgsMTAgQEAKICNkZWZpbmUgUUNBNjE3NF9IV18zXzBfVkVSU0lPTgkJMHgwNTAyMDAwMAogI2RlZmluZSBRQ0E2MTc0X0hXXzNfMl9WRVJTSU9OCQkweDA1MDMwMDAwCiAKKy8qIFFDQTkzNzcgdGFyZ2V0IEJNSSB2ZXJzaW9uIHNpZ25hdHVyZXMgKi8KKyNkZWZpbmUgUUNBOTM3N19IV18xXzBfREVWX1ZFUlNJT04JMHgwNTAyMDAwMAorI2RlZmluZSBRQ0E5Mzc3X0hXXzFfMV9ERVZfVkVSU0lPTgkweDA1MDIwMDAxCisKIGVudW0gcWNhNjE3NF9wY2lfcmV2IHsKIAlRQ0E2MTc0X1BDSV9SRVZfMV8xID0gMHgxMSwKIAlRQ0E2MTc0X1BDSV9SRVZfMV8zID0gMHgxMywKQEAgLTYwLDYgKzcwLDExIEBACiAJUUNBNjE3NF9IV18zXzJfQ0hJUF9JRF9SRVYgPSAxMCwKIH07CiAKK2VudW0gcWNhOTM3N19jaGlwX2lkX3JldiB7CisJUUNBOTM3N19IV18xXzBfQ0hJUF9JRF9SRVYgPSAweDAsCisJUUNBOTM3N19IV18xXzFfQ0hJUF9JRF9SRVYgPSAweDEsCit9OworCiAjZGVmaW5lIFFDQTYxNzRfSFdfMl8xX0ZXX0RJUgkJImF0aDEway9RQ0E2MTc0L2h3Mi4xIgogI2RlZmluZSBRQ0E2MTc0X0hXXzJfMV9GV19GSUxFCQkiZmlybXdhcmUuYmluIgogI2RlZmluZSBRQ0E2MTc0X0hXXzJfMV9PVFBfRklMRQkJIm90cC5iaW4iCkBAIC04NSw4ICsxMDAsNiBAQAogI2RlZmluZSBRQ0E5OVgwX0hXXzJfMF9QQVRDSF9MT0FEX0FERFIJMHgxMjM0CiAKIC8qIFFDQTkzNzcgMS4wIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFFDQTkzNzdfSFdfMV8wX0RFVl9WRVJTSU9OICAgICAweDA1MDIwMDAxCi0jZGVmaW5lIFFDQTkzNzdfSFdfMV8wX0NISVBfSURfUkVWICAgICAweDEKICNkZWZpbmUgUUNBOTM3N19IV18xXzBfRldfRElSICAgICAgICAgIEFUSDEwS19GV19ESVIgIi9RQ0E5Mzc3L2h3MS4wIgogI2RlZmluZSBRQ0E5Mzc3X0hXXzFfMF9GV19GSUxFICAgICAgICAgImZpcm13YXJlLmJpbiIKICNkZWZpbmUgUUNBOTM3N19IV18xXzBfT1RQX0ZJTEUgICAgICAgICJvdHAuYmluIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMKaW5kZXggYTc0MTFmZS4uOTVhNTU0MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYwpAQCAtNDIyNSw3ICs0MjI1LDcgQEAKIAogc3RhdGljIHUzMiBnZXRfbnNzX2Zyb21fY2hhaW5tYXNrKHUxNiBjaGFpbl9tYXNrKQogewotCWlmICgoY2hhaW5fbWFzayAmIDB4MTUpID09IDB4MTUpCisJaWYgKChjaGFpbl9tYXNrICYgMHhmKSA9PSAweGYpCiAJCXJldHVybiA0OwogCWVsc2UgaWYgKChjaGFpbl9tYXNrICYgMHg3KSA9PSAweDcpCiAJCXJldHVybiAzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvcGNpLmMKaW5kZXggM2ZjYTIwMC4uOTMwNzg1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3BjaS5jCkBAIC01NywxMiArNTcsNiBAQAogI2RlZmluZSBBVEgxMEtfUENJX1RBUkdFVF9XQUlUIDMwMDAKICNkZWZpbmUgQVRIMTBLX1BDSV9OVU1fV0FSTV9SRVNFVF9BVFRFTVBUUyAzCiAKLSNkZWZpbmUgUUNBOTg4WF8yXzBfREVWSUNFX0lECSgweDAwM2MpCi0jZGVmaW5lIFFDQTYxNjRfMl8xX0RFVklDRV9JRAkoMHgwMDQxKQotI2RlZmluZSBRQ0E2MTc0XzJfMV9ERVZJQ0VfSUQJKDB4MDAzZSkKLSNkZWZpbmUgUUNBOTlYMF8yXzBfREVWSUNFX0lECSgweDAwNDApCi0jZGVmaW5lIFFDQTkzNzdfMV8wX0RFVklDRV9JRAkoMHgwMDQyKQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoMTBrX3BjaV9pZF90YWJsZVtdID0gewogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgUUNBOTg4WF8yXzBfREVWSUNFX0lEKSB9LCAvKiBQQ0ktRSBRQ0E5ODhYIFYyICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCBRQ0E2MTY0XzJfMV9ERVZJQ0VfSUQpIH0sIC8qIFBDSS1FIFFDQTYxNjQgVjIuMSAqLwpAQCAtOTIsNyArODYsOSBAQAogCXsgUUNBNjE3NF8yXzFfREVWSUNFX0lELCBRQ0E2MTc0X0hXXzNfMl9DSElQX0lEX1JFViB9LAogCiAJeyBRQ0E5OVgwXzJfMF9ERVZJQ0VfSUQsIFFDQTk5WDBfSFdfMl8wX0NISVBfSURfUkVWIH0sCisKIAl7IFFDQTkzNzdfMV8wX0RFVklDRV9JRCwgUUNBOTM3N19IV18xXzBfQ0hJUF9JRF9SRVYgfSwKKwl7IFFDQTkzNzdfMV8wX0RFVklDRV9JRCwgUUNBOTM3N19IV18xXzFfQ0hJUF9JRF9SRVYgfSwKIH07CiAKIHN0YXRpYyB2b2lkIGF0aDEwa19wY2lfYnVmZmVyX2NsZWFudXAoc3RydWN0IGF0aDEwayAqYXIpOwpAQCAtMTExLDggKzEwNyw5IEBACiBzdGF0aWMgdm9pZCBhdGgxMGtfcGNpX2h0Y19yeF9jYihzdHJ1Y3QgYXRoMTBrX2NlX3BpcGUgKmNlX3N0YXRlKTsKIHN0YXRpYyB2b2lkIGF0aDEwa19wY2lfaHR0X3R4X2NiKHN0cnVjdCBhdGgxMGtfY2VfcGlwZSAqY2Vfc3RhdGUpOwogc3RhdGljIHZvaWQgYXRoMTBrX3BjaV9odHRfcnhfY2Ioc3RydWN0IGF0aDEwa19jZV9waXBlICpjZV9zdGF0ZSk7CitzdGF0aWMgdm9pZCBhdGgxMGtfcGNpX2h0dF9odGNfcnhfY2Ioc3RydWN0IGF0aDEwa19jZV9waXBlICpjZV9zdGF0ZSk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2VfYXR0ciBob3N0X2NlX2NvbmZpZ193bGFuW10gPSB7CitzdGF0aWMgc3RydWN0IGNlX2F0dHIgaG9zdF9jZV9jb25maWdfd2xhbltdID0gewogCS8qIENFMDogaG9zdC0+dGFyZ2V0IEhUQyBjb250cm9sIGFuZCByYXcgc3RyZWFtcyAqLwogCXsKIAkJLmZsYWdzID0gQ0VfQVRUUl9GTEFHUywKQEAgLTEyOCw3ICsxMjUsNyBAQAogCQkuc3JjX25lbnRyaWVzID0gMCwKIAkJLnNyY19zel9tYXggPSAyMDQ4LAogCQkuZGVzdF9uZW50cmllcyA9IDUxMiwKLQkJLnJlY3ZfY2IgPSBhdGgxMGtfcGNpX2h0Y19yeF9jYiwKKwkJLnJlY3ZfY2IgPSBhdGgxMGtfcGNpX2h0dF9odGNfcnhfY2IsCiAJfSwKIAogCS8qIENFMjogdGFyZ2V0LT5ob3N0IFdNSSAqLwpAQCAtMjE3LDcgKzIxNCw3IEBACiB9OwogCiAvKiBUYXJnZXQgZmlybXdhcmUncyBDb3B5IEVuZ2luZSBjb25maWd1cmF0aW9uLiAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjZV9waXBlX2NvbmZpZyB0YXJnZXRfY2VfY29uZmlnX3dsYW5bXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2VfcGlwZV9jb25maWcgdGFyZ2V0X2NlX2NvbmZpZ193bGFuW10gPSB7CiAJLyogQ0UwOiBob3N0LT50YXJnZXQgSFRDIGNvbnRyb2wgYW5kIHJhdyBzdHJlYW1zICovCiAJewogCQkucGlwZW51bSA9IF9fY3B1X3RvX2xlMzIoMCksCkBAIC0zMzAsNyArMzI3LDcgQEAKICAqIFRoaXMgdGFibGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBDRV9QQ0kgVEFCTEUsIGFib3ZlLgogICogSXQgaXMgcGFzc2VkIHRvIHRoZSBUYXJnZXQgYXQgc3RhcnR1cCBmb3IgdXNlIGJ5IGZpcm13YXJlLgogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcnZpY2VfdG9fcGlwZSB0YXJnZXRfc2VydmljZV90b19jZV9tYXBfd2xhbltdID0geworc3RhdGljIHN0cnVjdCBzZXJ2aWNlX3RvX3BpcGUgdGFyZ2V0X3NlcnZpY2VfdG9fY2VfbWFwX3dsYW5bXSA9IHsKIAl7CiAJCV9fY3B1X3RvX2xlMzIoQVRIMTBLX0hUQ19TVkNfSURfV01JX0RBVEFfVk8pLAogCQlfX2NwdV90b19sZTMyKFBJUEVESVJfT1VUKSwJLyogb3V0ID0gVUwgPSBob3N0IC0+IHRhcmdldCAqLwpAQCAtMTIwOCw2ICsxMjA1LDE2IEBACiAJYXRoMTBrX3BjaV9wcm9jZXNzX3J4X2NiKGNlX3N0YXRlLCBhdGgxMGtfaHRjX3J4X2NvbXBsZXRpb25faGFuZGxlcik7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDEwa19wY2lfaHR0X2h0Y19yeF9jYihzdHJ1Y3QgYXRoMTBrX2NlX3BpcGUgKmNlX3N0YXRlKQoreworCS8qIENFNCBwb2xsaW5nIG5lZWRzIHRvIGJlIGRvbmUgd2hlbmV2ZXIgQ0UgcGlwZSB3aGljaCB0cmFuc3BvcnRzCisJICogSFRUIFJ4ICh0YXJnZXQtPmhvc3QpIGlzIHByb2Nlc3NlZC4KKwkgKi8KKwlhdGgxMGtfY2VfcGVyX2VuZ2luZV9zZXJ2aWNlKGNlX3N0YXRlLT5hciwgNCk7CisKKwlhdGgxMGtfcGNpX3Byb2Nlc3NfcnhfY2IoY2Vfc3RhdGUsIGF0aDEwa19odGNfcnhfY29tcGxldGlvbl9oYW5kbGVyKTsKK30KKwogLyogQ2FsbGVkIGJ5IGxvd2VyIChDRSkgbGF5ZXIgd2hlbiBhIHNlbmQgdG8gSFRUIFRhcmdldCBjb21wbGV0ZXMuICovCiBzdGF0aWMgdm9pZCBhdGgxMGtfcGNpX2h0dF90eF9jYihzdHJ1Y3QgYXRoMTBrX2NlX3BpcGUgKmNlX3N0YXRlKQogewpAQCAtMjAyNyw2ICsyMDM0LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDEwa19wY2lfb3ZlcnJpZGVfY2VfY29uZmlnKHN0cnVjdCBhdGgxMGsgKmFyKQoreworCXN0cnVjdCBjZV9hdHRyICphdHRyOworCXN0cnVjdCBjZV9waXBlX2NvbmZpZyAqY29uZmlnOworCisJLyogRm9yIFFDQTYxNzQgd2UncmUgb3ZlcnJpZGluZyB0aGUgQ29weSBFbmdpbmUgNSBjb25maWd1cmF0aW9uLAorCSAqIHNpbmNlIGl0IGlzIGN1cnJlbnRseSB1c2VkIGZvciBvdGhlciBmZWF0dXJlLgorCSAqLworCisJLyogT3ZlcnJpZGUgSG9zdCdzIENvcHkgRW5naW5lIDUgY29uZmlndXJhdGlvbiAqLworCWF0dHIgPSAmaG9zdF9jZV9jb25maWdfd2xhbls1XTsKKwlhdHRyLT5zcmNfc3pfbWF4ID0gMDsKKwlhdHRyLT5kZXN0X25lbnRyaWVzID0gMDsKKworCS8qIE92ZXJyaWRlIFRhcmdldCBmaXJtd2FyZSdzIENvcHkgRW5naW5lIGNvbmZpZ3VyYXRpb24gKi8KKwljb25maWcgPSAmdGFyZ2V0X2NlX2NvbmZpZ193bGFuWzVdOworCWNvbmZpZy0+cGlwZWRpciA9IF9fY3B1X3RvX2xlMzIoUElQRURJUl9PVVQpOworCWNvbmZpZy0+bmJ5dGVzX21heCA9IF9fY3B1X3RvX2xlMzIoMjA0OCk7CisKKwkvKiBNYXAgZnJvbSBzZXJ2aWNlL2VuZHBvaW50IHRvIENvcHkgRW5naW5lICovCisJdGFyZ2V0X3NlcnZpY2VfdG9fY2VfbWFwX3dsYW5bMTVdLnBpcGVudW0gPSBfX2NwdV90b19sZTMyKDEpOworfQorCiBzdGF0aWMgaW50IGF0aDEwa19wY2lfYWxsb2NfcGlwZXMoc3RydWN0IGF0aDEwayAqYXIpCiB7CiAJc3RydWN0IGF0aDEwa19wY2kgKmFyX3BjaSA9IGF0aDEwa19wY2lfcHJpdihhcik7CkBAIC0zMDIwLDYgKzMwNTAsOSBAQAogCQlnb3RvIGVycl9jb3JlX2Rlc3Ryb3k7CiAJfQogCisJaWYgKFFDQV9SRVZfNjE3NChhcikpCisJCWF0aDEwa19wY2lfb3ZlcnJpZGVfY2VfY29uZmlnKGFyKTsKKwogCXJldCA9IGF0aDEwa19wY2lfYWxsb2NfcGlwZXMoYXIpOwogCWlmIChyZXQpIHsKIAkJYXRoMTBrX2VycihhciwgImZhaWxlZCB0byBhbGxvY2F0ZSBjb3B5IGVuZ2luZSBwaXBlczogJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC03MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC03MDAwLmMKaW5kZXggMWE3M2M3YS4uZDlhNGFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNzAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTcwMDAuYwpAQCAtNzAsMTIgKzcwLDE4IEBACiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDcyNjBfVUNPREVfQVBJX01BWAkxNworI2RlZmluZSBJV0w3MjY1X1VDT0RFX0FQSV9NQVgJMTkKKyNkZWZpbmUgSVdMNzI2NURfVUNPREVfQVBJX01BWAkxOQogCiAvKiBPbGRlc3QgdmVyc2lvbiB3ZSB3b24ndCB3YXJuIGFib3V0ICovCiAjZGVmaW5lIElXTDcyNjBfVUNPREVfQVBJX09LCTEzCisjZGVmaW5lIElXTDcyNjVfVUNPREVfQVBJX09LCTEzCisjZGVmaW5lIElXTDcyNjVEX1VDT0RFX0FQSV9PSwkxMwogCiAvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDcyNjBfVUNPREVfQVBJX01JTgkxMworI2RlZmluZSBJV0w3MjY1X1VDT0RFX0FQSV9NSU4JMTMKKyNkZWZpbmUgSVdMNzI2NURfVUNPREVfQVBJX01JTgkxMwogCiAvKiBOVk0gdmVyc2lvbnMgKi8KICNkZWZpbmUgSVdMNzI2MF9OVk1fVkVSU0lPTgkJMHgwYTFkCkBAIC0xNDksMTAgKzE1NSw3IEBACiAJLmh0NDBfYmFuZHMgPSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWikgfCBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWiksCiB9OwogCi0jZGVmaW5lIElXTF9ERVZJQ0VfNzAwMAkJCQkJCVwKLQkudWNvZGVfYXBpX21heCA9IElXTDcyNjBfVUNPREVfQVBJX01BWCwJCQlcCi0JLnVjb2RlX2FwaV9vayA9IElXTDcyNjBfVUNPREVfQVBJX09LLAkJCVwKLQkudWNvZGVfYXBpX21pbiA9IElXTDcyNjBfVUNPREVfQVBJX01JTiwJCQlcCisjZGVmaW5lIElXTF9ERVZJQ0VfNzAwMF9DT01NT04JCQkJCVwKIAkuZGV2aWNlX2ZhbWlseSA9IElXTF9ERVZJQ0VfRkFNSUxZXzcwMDAsCQlcCiAJLm1heF9pbnN0X3NpemUgPSBJV0w2MF9SVENfSU5TVF9TSVpFLAkJCVwKIAkubWF4X2RhdGFfc2l6ZSA9IElXTDYwX1JUQ19EQVRBX1NJWkUsCQkJXApAQCAtMTYzLDYgKzE2NiwyNCBAQAogCS5tYXhfaHRfYW1wZHVfZXhwb25lbnQgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SywJXAogCS5kY2NtX29mZnNldCA9IElXTDcwMDBfRENDTV9PRkZTRVQKIAorI2RlZmluZSBJV0xfREVWSUNFXzcwMDAJCQkJCQlcCisJSVdMX0RFVklDRV83MDAwX0NPTU1PTiwJCQkJCVwKKwkudWNvZGVfYXBpX21heCA9IElXTDcyNjBfVUNPREVfQVBJX01BWCwJCQlcCisJLnVjb2RlX2FwaV9vayA9IElXTDcyNjBfVUNPREVfQVBJX09LLAkJCVwKKwkudWNvZGVfYXBpX21pbiA9IElXTDcyNjBfVUNPREVfQVBJX01JTgorCisjZGVmaW5lIElXTF9ERVZJQ0VfNzAwNQkJCQkJCVwKKwlJV0xfREVWSUNFXzcwMDBfQ09NTU9OLAkJCQkJXAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNzI2NV9VQ09ERV9BUElfTUFYLAkJCVwKKwkudWNvZGVfYXBpX29rID0gSVdMNzI2NV9VQ09ERV9BUElfT0ssCQkJXAorCS51Y29kZV9hcGlfbWluID0gSVdMNzI2NV9VQ09ERV9BUElfTUlOCisKKyNkZWZpbmUgSVdMX0RFVklDRV83MDA1RAkJCQkJXAorCUlXTF9ERVZJQ0VfNzAwMF9DT01NT04sCQkJCQlcCisJLnVjb2RlX2FwaV9tYXggPSBJV0w3MjY1RF9VQ09ERV9BUElfTUFYLAkJXAorCS51Y29kZV9hcGlfb2sgPSBJV0w3MjY1RF9VQ09ERV9BUElfT0ssCQkJXAorCS51Y29kZV9hcGlfbWluID0gSVdMNzI2NURfVUNPREVfQVBJX01JTgorCiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w3MjYwXzJhY19jZmcgPSB7CiAJLm5hbWUgPSAiSW50ZWwoUikgRHVhbCBCYW5kIFdpcmVsZXNzIEFDIDcyNjAiLAogCS5md19uYW1lX3ByZSA9IElXTDcyNjBfRldfUFJFLApAQCAtMjY2LDcgKzI4Nyw3IEBACiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2wzMTY1XzJhY19jZmcgPSB7CiAJLm5hbWUgPSAiSW50ZWwoUikgRHVhbCBCYW5kIFdpcmVsZXNzIEFDIDMxNjUiLAogCS5md19uYW1lX3ByZSA9IElXTDcyNjVEX0ZXX1BSRSwKLQlJV0xfREVWSUNFXzcwMDAsCisJSVdMX0RFVklDRV83MDA1RCwKIAkuaHRfcGFyYW1zID0gJml3bDcwMDBfaHRfcGFyYW1zLAogCS5udm1fdmVyID0gSVdMMzE2NV9OVk1fVkVSU0lPTiwKIAkubnZtX2NhbGliX3ZlciA9IElXTDMxNjVfVFhfUE9XRVJfVkVSU0lPTiwKQEAgLTI3Nyw3ICsyOTgsNyBAQAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsNzI2NV8yYWNfY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIER1YWwgQmFuZCBXaXJlbGVzcyBBQyA3MjY1IiwKIAkuZndfbmFtZV9wcmUgPSBJV0w3MjY1X0ZXX1BSRSwKLQlJV0xfREVWSUNFXzcwMDAsCisJSVdMX0RFVklDRV83MDA1LAogCS5odF9wYXJhbXMgPSAmaXdsNzI2NV9odF9wYXJhbXMsCiAJLm52bV92ZXIgPSBJV0w3MjY1X05WTV9WRVJTSU9OLAogCS5udm1fY2FsaWJfdmVyID0gSVdMNzI2NV9UWF9QT1dFUl9WRVJTSU9OLApAQCAtMjg4LDcgKzMwOSw3IEBACiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w3MjY1XzJuX2NmZyA9IHsKIAkubmFtZSA9ICJJbnRlbChSKSBEdWFsIEJhbmQgV2lyZWxlc3MgTiA3MjY1IiwKIAkuZndfbmFtZV9wcmUgPSBJV0w3MjY1X0ZXX1BSRSwKLQlJV0xfREVWSUNFXzcwMDAsCisJSVdMX0RFVklDRV83MDA1LAogCS5odF9wYXJhbXMgPSAmaXdsNzI2NV9odF9wYXJhbXMsCiAJLm52bV92ZXIgPSBJV0w3MjY1X05WTV9WRVJTSU9OLAogCS5udm1fY2FsaWJfdmVyID0gSVdMNzI2NV9UWF9QT1dFUl9WRVJTSU9OLApAQCAtMjk5LDcgKzMyMCw3IEBACiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w3MjY1X25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIFdpcmVsZXNzIE4gNzI2NSIsCiAJLmZ3X25hbWVfcHJlID0gSVdMNzI2NV9GV19QUkUsCi0JSVdMX0RFVklDRV83MDAwLAorCUlXTF9ERVZJQ0VfNzAwNSwKIAkuaHRfcGFyYW1zID0gJml3bDcyNjVfaHRfcGFyYW1zLAogCS5udm1fdmVyID0gSVdMNzI2NV9OVk1fVkVSU0lPTiwKIAkubnZtX2NhbGliX3ZlciA9IElXTDcyNjVfVFhfUE9XRVJfVkVSU0lPTiwKQEAgLTMxMCw3ICszMzEsNyBAQAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsNzI2NWRfMmFjX2NmZyA9IHsKIAkubmFtZSA9ICJJbnRlbChSKSBEdWFsIEJhbmQgV2lyZWxlc3MgQUMgNzI2NSIsCiAJLmZ3X25hbWVfcHJlID0gSVdMNzI2NURfRldfUFJFLAotCUlXTF9ERVZJQ0VfNzAwMCwKKwlJV0xfREVWSUNFXzcwMDVELAogCS5odF9wYXJhbXMgPSAmaXdsNzI2NV9odF9wYXJhbXMsCiAJLm52bV92ZXIgPSBJV0w3MjY1RF9OVk1fVkVSU0lPTiwKIAkubnZtX2NhbGliX3ZlciA9IElXTDcyNjVfVFhfUE9XRVJfVkVSU0lPTiwKQEAgLTMyMSw3ICszNDIsNyBAQAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsNzI2NWRfMm5fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIER1YWwgQmFuZCBXaXJlbGVzcyBOIDcyNjUiLAogCS5md19uYW1lX3ByZSA9IElXTDcyNjVEX0ZXX1BSRSwKLQlJV0xfREVWSUNFXzcwMDAsCisJSVdMX0RFVklDRV83MDA1RCwKIAkuaHRfcGFyYW1zID0gJml3bDcyNjVfaHRfcGFyYW1zLAogCS5udm1fdmVyID0gSVdMNzI2NURfTlZNX1ZFUlNJT04sCiAJLm52bV9jYWxpYl92ZXIgPSBJV0w3MjY1X1RYX1BPV0VSX1ZFUlNJT04sCkBAIC0zMzIsNyArMzUzLDcgQEAKIGNvbnN0IHN0cnVjdCBpd2xfY2ZnIGl3bDcyNjVkX25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIFdpcmVsZXNzIE4gNzI2NSIsCiAJLmZ3X25hbWVfcHJlID0gSVdMNzI2NURfRldfUFJFLAotCUlXTF9ERVZJQ0VfNzAwMCwKKwlJV0xfREVWSUNFXzcwMDVELAogCS5odF9wYXJhbXMgPSAmaXdsNzI2NV9odF9wYXJhbXMsCiAJLm52bV92ZXIgPSBJV0w3MjY1RF9OVk1fVkVSU0lPTiwKIAkubnZtX2NhbGliX3ZlciA9IElXTDcyNjVfVFhfUE9XRVJfVkVSU0lPTiwKQEAgLTM0Miw1ICszNjMsNSBAQAogCiBNT0RVTEVfRklSTVdBUkUoSVdMNzI2MF9NT0RVTEVfRklSTVdBUkUoSVdMNzI2MF9VQ09ERV9BUElfT0spKTsKIE1PRFVMRV9GSVJNV0FSRShJV0wzMTYwX01PRFVMRV9GSVJNV0FSRShJV0w3MjYwX1VDT0RFX0FQSV9PSykpOwotTU9EVUxFX0ZJUk1XQVJFKElXTDcyNjVfTU9EVUxFX0ZJUk1XQVJFKElXTDcyNjBfVUNPREVfQVBJX09LKSk7Ci1NT0RVTEVfRklSTVdBUkUoSVdMNzI2NURfTU9EVUxFX0ZJUk1XQVJFKElXTDcyNjBfVUNPREVfQVBJX09LKSk7CitNT0RVTEVfRklSTVdBUkUoSVdMNzI2NV9NT0RVTEVfRklSTVdBUkUoSVdMNzI2NV9VQ09ERV9BUElfT0spKTsKK01PRFVMRV9GSVJNV0FSRShJV0w3MjY1RF9NT0RVTEVfRklSTVdBUkUoSVdMNzI2NURfVUNPREVfQVBJX09LKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC04MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC04MDAwLmMKaW5kZXggMDExNmU1YS4uOWJjYzBiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtODAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTgwMDAuYwpAQCAtNjksNyArNjksNyBAQAogI2luY2x1ZGUgIml3bC1hZ24taHcuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgSVdMODAwMF9VQ09ERV9BUElfTUFYCTE3CisjZGVmaW5lIElXTDgwMDBfVUNPREVfQVBJX01BWAkxOQogCiAvKiBPbGRlc3QgdmVyc2lvbiB3ZSB3b24ndCB3YXJuIGFib3V0ICovCiAjZGVmaW5lIElXTDgwMDBfVUNPREVfQVBJX09LCTEzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZDMuYwppbmRleCA4NWFlOTAyLi4yOWFlNThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9kMy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2QzLmMKQEAgLTMwOSw5ICszMDksOSBAQAogCSAqIHRvIHRyYW5zbWl0IHBhY2tldHMgdG8gdGhlIEFQLCBpLmUuIHRoZSBQVEsuCiAJICovCiAJaWYgKGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpIHsKLQkJa2V5LT5od19rZXlfaWR4ID0gMDsKIAkJbXZtLT5wdGtfaXZsZW4gPSBrZXktPml2X2xlbjsKIAkJbXZtLT5wdGtfaWN2bGVuID0ga2V5LT5pY3ZfbGVuOworCQlyZXQgPSBpd2xfbXZtX3NldF9zdGFfa2V5KG12bSwgdmlmLCBzdGEsIGtleSwgMCk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogZmlybXdhcmUgb25seSBzdXBwb3J0cyBUU0MvUlNDIGZvciBhIHNpbmdsZSBrZXksCkBAIC0zMTksMTIgKzMxOSwxMSBAQAogCQkgKiB3aXRoIG5ldyBvbmVzIC0tIHRoaXMgcmVsaWVzIG9uIG1hYzgwMjExIGRvaW5nCiAJCSAqIGxpc3RfYWRkX3RhaWwoKS4KIAkJICovCi0JCWtleS0+aHdfa2V5X2lkeCA9IDE7CiAJCW12bS0+Z3RrX2l2bGVuID0ga2V5LT5pdl9sZW47CiAJCW12bS0+Z3RrX2ljdmxlbiA9IGtleS0+aWN2X2xlbjsKKwkJcmV0ID0gaXdsX212bV9zZXRfc3RhX2tleShtdm0sIHZpZiwgc3RhLCBrZXksIDEpOwogCX0KIAotCXJldCA9IGl3bF9tdm1fc2V0X3N0YV9rZXkobXZtLCB2aWYsIHN0YSwga2V5LCB0cnVlKTsKIAlkYXRhLT5lcnJvciA9IHJldCAhPSAwOwogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJm12bS0+bXV0ZXgpOwpAQCAtNzcyLDkgKzc3MSw2IEBACiAJICovCiAJc2V0X2JpdChJV0xfTVZNX1NUQVRVU19JTl9IV19SRVNUQVJULCAmbXZtLT5zdGF0dXMpOwogCi0JLyogV2UgcmVwcm9ncmFtIGtleXMgYW5kIHNob3VsZG4ndCBhbGxvY2F0ZSBuZXcga2V5IGluZGljZXMgKi8KLQltZW1zZXQobXZtLT5md19rZXlfdGFibGUsIDAsIHNpemVvZihtdm0tPmZ3X2tleV90YWJsZSkpOwotCiAJbXZtLT5wdGtfaXZsZW4gPSAwOwogCW12bS0+cHRrX2ljdmxlbiA9IDA7CiAJbXZtLT5wdGtfaXZsZW4gPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL21hYzgwMjExLmMKaW5kZXggMWZiNjg0Ni4uZTg4YWZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbWFjODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tYWM4MDIxMS5jCkBAIC0yOTQxLDYgKzI5NDEsNyBAQAogewogCXN0cnVjdCBpd2xfbXZtICptdm0gPSBJV0xfTUFDODAyMTFfR0VUX01WTShodyk7CiAJaW50IHJldDsKKwl1OCBrZXlfb2Zmc2V0OwogCiAJaWYgKGl3bHdpZmlfbW9kX3BhcmFtcy5zd19jcnlwdG8pIHsKIAkJSVdMX0RFQlVHX01BQzgwMjExKG12bSwgImxlYXZlIC0gaHdjcnlwdG8gZGlzYWJsZWRcbiIpOwpAQCAtMzAwNiwxMCArMzAwNywxNCBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQkvKiBpbiBIVyByZXN0YXJ0IHJldXNlIHRoZSBpbmRleCwgb3RoZXJ3aXNlIHJlcXVlc3QgYSBuZXcgb25lICovCisJCWlmICh0ZXN0X2JpdChJV0xfTVZNX1NUQVRVU19JTl9IV19SRVNUQVJULCAmbXZtLT5zdGF0dXMpKQorCQkJa2V5X29mZnNldCA9IGtleS0+aHdfa2V5X2lkeDsKKwkJZWxzZQorCQkJa2V5X29mZnNldCA9IFNUQV9LRVlfSURYX0lOVkFMSUQ7CisKIAkJSVdMX0RFQlVHX01BQzgwMjExKG12bSwgInNldCBod2NyeXB0byBrZXlcbiIpOwotCQlyZXQgPSBpd2xfbXZtX3NldF9zdGFfa2V5KG12bSwgdmlmLCBzdGEsIGtleSwKLQkJCQkJICB0ZXN0X2JpdChJV0xfTVZNX1NUQVRVU19JTl9IV19SRVNUQVJULAotCQkJCQkJICAgJm12bS0+c3RhdHVzKSk7CisJCXJldCA9IGl3bF9tdm1fc2V0X3N0YV9rZXkobXZtLCB2aWYsIHN0YSwga2V5LCBrZXlfb2Zmc2V0KTsKIAkJaWYgKHJldCkgewogCQkJSVdMX1dBUk4obXZtLCAic2V0IGtleSBmYWlsZWRcbiIpOwogCQkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3N0YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc3RhLmMKaW5kZXggMzAwYTI0OS4uMmI5NzZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc3RhLmMKQEAgLTEyMDEsNyArMTIwMSw4IEBACiAJcmV0dXJuIG1heF9vZmZzOwogfQogCi1zdGF0aWMgdTggaXdsX212bV9nZXRfa2V5X3N0YV9pZChzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorc3RhdGljIHU4IGl3bF9tdm1fZ2V0X2tleV9zdGFfaWQoc3RydWN0IGl3bF9tdm0gKm12bSwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9IGl3bF9tdm1fdmlmX2Zyb21fbWFjODAyMTEodmlmKTsKQEAgLTEyMTgsOCArMTIxOSwyMSBAQAogCSAqIHN0YXRpb24gSUQsIHRoZW4gdXNlIEFQJ3Mgc3RhdGlvbiBJRC4KIAkgKi8KIAlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgbXZtdmlmLT5hcF9zdGFfaWQgIT0gSVdMX01WTV9TVEFUSU9OX0NPVU5UKQotCQlyZXR1cm4gbXZtdmlmLT5hcF9zdGFfaWQ7CisJICAgIG12bXZpZi0+YXBfc3RhX2lkICE9IElXTF9NVk1fU1RBVElPTl9DT1VOVCkgeworCQl1OCBzdGFfaWQgPSBtdm12aWYtPmFwX3N0YV9pZDsKKworCQlzdGEgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2sobXZtLT5md19pZF90b19tYWNfaWRbc3RhX2lkXSwKKwkJCQkJICAgIGxvY2tkZXBfaXNfaGVsZCgmbXZtLT5tdXRleCkpOworCQkvKgorCQkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSAnc3RhJyBwYXJhbWV0ZXIgaXMgTlVMTCwKKwkJICogZm9yIGV4YW1wbGUgd2hlbiBhIEdUSyBpcyByZW1vdmVkIC0gdGhlIHN0YV9pZCB3aWxsIHRoZW4KKwkJICogYmUgdGhlIEFQIElELCBhbmQgbm8gc3RhdGlvbiB3YXMgcGFzc2VkIGJ5IG1hYzgwMjExLgorCQkgKi8KKwkJaWYgKElTX0VSUl9PUl9OVUxMKHN0YSkpCisJCQlyZXR1cm4gSVdMX01WTV9TVEFUSU9OX0NPVU5UOworCisJCXJldHVybiBzdGFfaWQ7CisJfQogCiAJcmV0dXJuIElXTF9NVk1fU1RBVElPTl9DT1VOVDsKIH0KQEAgLTEyMjcsNyArMTI0MSw4IEBACiBzdGF0aWMgaW50IGl3bF9tdm1fc2VuZF9zdGFfa2V5KHN0cnVjdCBpd2xfbXZtICptdm0sCiAJCQkJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIGJvb2wgbWNhc3QsCi0JCQkJdTMyIHRraXBfaXYzMiwgdTE2ICp0a2lwX3AxaywgdTMyIGNtZF9mbGFncykKKwkJCQl1MzIgdGtpcF9pdjMyLCB1MTYgKnRraXBfcDFrLCB1MzIgY21kX2ZsYWdzLAorCQkJCXU4IGtleV9vZmZzZXQpCiB7CiAJc3RydWN0IGl3bF9tdm1fYWRkX3N0YV9rZXlfY21kIGNtZCA9IHt9OwogCV9fbGUxNiBrZXlfZmxhZ3M7CkBAIC0xMjY5LDcgKzEyODQsNyBAQAogCWlmIChtY2FzdCkKIAkJa2V5X2ZsYWdzIHw9IGNwdV90b19sZTE2KFNUQV9LRVlfTVVMVElDQVNUKTsKIAotCWNtZC5rZXlfb2Zmc2V0ID0ga2V5Y29uZi0+aHdfa2V5X2lkeDsKKwljbWQua2V5X29mZnNldCA9IGtleV9vZmZzZXQ7CiAJY21kLmtleV9mbGFncyA9IGtleV9mbGFnczsKIAljbWQuc3RhX2lkID0gc3RhX2lkOwogCkBAIC0xMzYwLDYgKzEzNzUsNyBAQAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJCSB1OCBrZXlfb2Zmc2V0LAogCQkJCSBib29sIG1jYXN0KQogewogCXN0cnVjdCBpd2xfbXZtX3N0YSAqbXZtX3N0YSA9IGl3bF9tdm1fc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKQEAgLTEzNzUsMTcgKzEzOTEsMTcgQEAKIAkJaWVlZTgwMjExX2dldF9rZXlfcnhfc2VxKGtleWNvbmYsIDAsICZzZXEpOwogCQlpZWVlODAyMTFfZ2V0X3RraXBfcnhfcDFrKGtleWNvbmYsIGFkZHIsIHNlcS50a2lwLml2MzIsIHAxayk7CiAJCXJldCA9IGl3bF9tdm1fc2VuZF9zdGFfa2V5KG12bSwgbXZtX3N0YSwga2V5Y29uZiwgbWNhc3QsCi0JCQkJCSAgIHNlcS50a2lwLml2MzIsIHAxaywgMCk7CisJCQkJCSAgIHNlcS50a2lwLml2MzIsIHAxaywgMCwga2V5X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgogCQlyZXQgPSBpd2xfbXZtX3NlbmRfc3RhX2tleShtdm0sIG12bV9zdGEsIGtleWNvbmYsIG1jYXN0LAotCQkJCQkgICAwLCBOVUxMLCAwKTsKKwkJCQkJICAgMCwgTlVMTCwgMCwga2V5X29mZnNldCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IGl3bF9tdm1fc2VuZF9zdGFfa2V5KG12bSwgbXZtX3N0YSwga2V5Y29uZiwgbWNhc3QsCi0JCQkJCSAgIDAsIE5VTEwsIDApOworCQkJCQkgICAwLCBOVUxMLCAwLCBrZXlfb2Zmc2V0KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTQzMyw3ICsxNDQ5LDcgQEAKIAkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKLQkJCWJvb2wgaGF2ZV9rZXlfb2Zmc2V0KQorCQkJdTgga2V5X29mZnNldCkKIHsKIAlib29sIG1jYXN0ID0gIShrZXljb25mLT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSk7CiAJdTggc3RhX2lkOwpAQCAtMTQ0Myw3ICsxNDU5LDcgQEAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtdm0tPm11dGV4KTsKIAogCS8qIEdldCB0aGUgc3RhdGlvbiBpZCBmcm9tIHRoZSBtdm0gbG9jYWwgc3RhdGlvbiB0YWJsZSAqLwotCXN0YV9pZCA9IGl3bF9tdm1fZ2V0X2tleV9zdGFfaWQodmlmLCBzdGEpOworCXN0YV9pZCA9IGl3bF9tdm1fZ2V0X2tleV9zdGFfaWQobXZtLCB2aWYsIHN0YSk7CiAJaWYgKHN0YV9pZCA9PSBJV0xfTVZNX1NUQVRJT05fQ09VTlQpIHsKIAkJSVdMX0VSUihtdm0sICJGYWlsZWQgdG8gZmluZCBzdGF0aW9uIGlkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDcwLDE4ICsxNDg2LDI1IEBACiAJaWYgKFdBUk5fT05fT05DRShpd2xfbXZtX3N0YV9mcm9tX21hYzgwMjExKHN0YSktPnZpZiAhPSB2aWYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghaGF2ZV9rZXlfb2Zmc2V0KSB7Ci0JCS8qCi0JCSAqIFRoZSBEMyBmaXJtd2FyZSBoYXJkY29kZXMgdGhlIFBUSyBvZmZzZXQgdG8gMCwgc28gd2UgaGF2ZSB0bwotCQkgKiBjb25maWd1cmUgaXQgdGhlcmUuIEFzIGEgcmVzdWx0LCB0aGlzIHdvcmthcm91bmQgZXhpc3RzIHRvCi0JCSAqIGxldCB0aGUgY2FsbGVyIHNldCB0aGUga2V5IG9mZnNldCAoaHdfa2V5X2lkeCksIHNlZSBkMy5jLgotCQkgKi8KLQkJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IGl3bF9tdm1fc2V0X2Z3X2tleV9pZHgobXZtKTsKLQkJaWYgKGtleWNvbmYtPmh3X2tleV9pZHggPT0gU1RBX0tFWV9JRFhfSU5WQUxJRCkKKwkvKiBJZiB0aGUga2V5X29mZnNldCBpcyBub3QgcHJlLWFzc2lnbmVkLCB3ZSBuZWVkIHRvIGZpbmQgYQorCSAqIG5ldyBvZmZzZXQgdG8gdXNlLiAgSW4gbm9ybWFsIGNhc2VzLCB0aGUgb2Zmc2V0IGlzIG5vdAorCSAqIHByZS1hc3NpZ25lZCwgYnV0IGR1cmluZyBIV19SRVNUQVJUIHdlIHdhbnQgdG8gcmV1c2UgdGhlCisJICogc2FtZSBpbmRpY2VzLCBzbyB3ZSBwYXNzIHRoZW0gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKwkgKgorCSAqIEluIEQzIGVudHJ5LCB3ZSBuZWVkIHRvIGhhcmRjb2RlZCB0aGUgaW5kaWNlcyAoYmVjYXVzZSB0aGUKKwkgKiBmaXJtd2FyZSBoYXJkY29kZXMgdGhlIFBUSyBvZmZzZXQgdG8gMCkuICBJbiB0aGlzIGNhc2UsIHdlCisJICogbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIHRoZSBod19rZXlfaWR4IGluIHRoZQorCSAqIGtleWNvbmYgc3RydWN0dXJlLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBjYW5ub3QgY29uZmlndXJlCisJICogdGhlIG9yaWdpbmFsIG9uZXMgYmFjayB3aGVuIHJlc3VtaW5nLgorCSAqLworCWlmIChrZXlfb2Zmc2V0ID09IFNUQV9LRVlfSURYX0lOVkFMSUQpIHsKKwkJa2V5X29mZnNldCAgPSBpd2xfbXZtX3NldF9md19rZXlfaWR4KG12bSk7CisJCWlmIChrZXlfb2Zmc2V0ID09IFNUQV9LRVlfSURYX0lOVkFMSUQpCiAJCQlyZXR1cm4gLUVOT1NQQzsKKwkJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IGtleV9vZmZzZXQ7CiAJfQogCi0JcmV0ID0gX19pd2xfbXZtX3NldF9zdGFfa2V5KG12bSwgdmlmLCBzdGEsIGtleWNvbmYsIG1jYXN0KTsKKwlyZXQgPSBfX2l3bF9tdm1fc2V0X3N0YV9rZXkobXZtLCB2aWYsIHN0YSwga2V5Y29uZiwga2V5X29mZnNldCwgbWNhc3QpOwogCWlmIChyZXQpIHsKIAkJX19jbGVhcl9iaXQoa2V5Y29uZi0+aHdfa2V5X2lkeCwgbXZtLT5md19rZXlfdGFibGUpOwogCQlnb3RvIGVuZDsKQEAgLTE0OTUsNyArMTUxOCw4IEBACiAJICovCiAJaWYgKGtleWNvbmYtPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fAogCSAgICBrZXljb25mLT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSB7Ci0JCXJldCA9IF9faXdsX212bV9zZXRfc3RhX2tleShtdm0sIHZpZiwgc3RhLCBrZXljb25mLCAhbWNhc3QpOworCQlyZXQgPSBfX2l3bF9tdm1fc2V0X3N0YV9rZXkobXZtLCB2aWYsIHN0YSwga2V5Y29uZiwKKwkJCQkJICAgIGtleV9vZmZzZXQsICFtY2FzdCk7CiAJCWlmIChyZXQpIHsKIAkJCV9fY2xlYXJfYml0KGtleWNvbmYtPmh3X2tleV9pZHgsIG12bS0+Zndfa2V5X3RhYmxlKTsKIAkJCV9faXdsX212bV9yZW1vdmVfc3RhX2tleShtdm0sIHN0YV9pZCwga2V5Y29uZiwgbWNhc3QpOwpAQCAtMTUyMSw3ICsxNTQ1LDcgQEAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtdm0tPm11dGV4KTsKIAogCS8qIEdldCB0aGUgc3RhdGlvbiBpZCBmcm9tIHRoZSBtdm0gbG9jYWwgc3RhdGlvbiB0YWJsZSAqLwotCXN0YV9pZCA9IGl3bF9tdm1fZ2V0X2tleV9zdGFfaWQodmlmLCBzdGEpOworCXN0YV9pZCA9IGl3bF9tdm1fZ2V0X2tleV9zdGFfaWQobXZtLCB2aWYsIHN0YSk7CiAKIAlJV0xfREVCVUdfV0VQKG12bSwgIm12bSByZW1vdmUgZHluYW1pYyBrZXk6IGlkeD0lZCBzdGE9JWRcbiIsCiAJCSAgICAgIGtleWNvbmYtPmtleWlkeCwgc3RhX2lkKTsKQEAgLTE1NDcsMjQgKzE1NzEsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKgotCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlICdzdGEnIHBhcmFtZXRlciBpcyBOVUxMLCBhbmQgdGh1cwotCSAqIHRoZXJlIGlzIGEgbmVlZCB0byByZXRyaWV2ZSB0aGUgc3RhIGZyb20gdGhlIGxvY2FsIHN0YXRpb24gdGFibGUsCi0JICogZm9yIGV4YW1wbGUgd2hlbiBhIEdUSyBpcyByZW1vdmVkICh3aGVyZSB0aGUgc3RhX2lkIHdpbGwgdGhlbiBiZQotCSAqIHRoZSBBUCBJRCwgYW5kIG5vIHN0YXRpb24gd2FzIHBhc3NlZCBieSBtYWM4MDIxMS4pCi0JICovCi0JaWYgKCFzdGEpIHsKLQkJc3RhID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtdm0tPmZ3X2lkX3RvX21hY19pZFtzdGFfaWRdLAotCQkJCQkJbG9ja2RlcF9pc19oZWxkKCZtdm0tPm11dGV4KSk7Ci0JCWlmICghc3RhKSB7Ci0JCQlJV0xfRVJSKG12bSwgIkludmFsaWQgc3RhdGlvbiBpZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCWlmIChXQVJOX09OX09OQ0UoaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpLT52aWYgIT0gdmlmKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlyZXQgPSBfX2l3bF9tdm1fcmVtb3ZlX3N0YV9rZXkobXZtLCBzdGFfaWQsIGtleWNvbmYsIG1jYXN0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTU4NCwxNCArMTU5MCwxNSBAQAogCQkJICAgICB1MTYgKnBoYXNlMWtleSkKIHsKIAlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bV9zdGE7Ci0JdTggc3RhX2lkID0gaXdsX212bV9nZXRfa2V5X3N0YV9pZCh2aWYsIHN0YSk7CisJdTggc3RhX2lkOwogCWJvb2wgbWNhc3QgPSAhKGtleWNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKTsKIAotCWlmIChXQVJOX09OX09OQ0Uoc3RhX2lkID09IElXTF9NVk1fU1RBVElPTl9DT1VOVCkpCi0JCXJldHVybjsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAorCXN0YV9pZCA9IGl3bF9tdm1fZ2V0X2tleV9zdGFfaWQobXZtLCB2aWYsIHN0YSk7CisJaWYgKFdBUk5fT05fT05DRShzdGFfaWQgPT0gSVdMX01WTV9TVEFUSU9OX0NPVU5UKSkKKwkJZ290byB1bmxvY2s7CisKIAlpZiAoIXN0YSkgewogCQlzdGEgPSByY3VfZGVyZWZlcmVuY2UobXZtLT5md19pZF90b19tYWNfaWRbc3RhX2lkXSk7CiAJCWlmIChXQVJOX09OKElTX0VSUl9PUl9OVUxMKHN0YSkpKSB7CkBAIC0xNjAyLDcgKzE2MDksOSBAQAogCiAJbXZtX3N0YSA9IGl3bF9tdm1fc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKIAlpd2xfbXZtX3NlbmRfc3RhX2tleShtdm0sIG12bV9zdGEsIGtleWNvbmYsIG1jYXN0LAotCQkJICAgICBpdjMyLCBwaGFzZTFrZXksIENNRF9BU1lOQyk7CisJCQkgICAgIGl2MzIsIHBoYXNlMWtleSwgQ01EX0FTWU5DLCBrZXljb25mLT5od19rZXlfaWR4KTsKKworIHVubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9zdGEuaAppbmRleCBlZWRiMjE1Li4wNjMxY2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9zdGEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9zdGEuaApAQCAtMzY1LDggKzM2NSw4IEBACiBpbnQgaXdsX212bV9zZXRfc3RhX2tleShzdHJ1Y3QgaXdsX212bSAqbXZtLAogCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksCi0JCQlib29sIGhhdmVfa2V5X29mZnNldCk7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJdTgga2V5X29mZnNldCk7CiBpbnQgaXdsX212bV9yZW1vdmVfc3RhX2tleShzdHJ1Y3QgaXdsX212bSAqbXZtLAogCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL3BjaWUvZHJ2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL3BjaWUvZHJ2LmMKaW5kZXggNjQ0YjU4Yi4uNjM5NzYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS9kcnYuYwpAQCAtNDIzLDE0ICs0MjMsMjEgQEAKIC8qIDgwMDAgU2VyaWVzICovCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHgwMDEwLCBpd2w4MjYwXzJhY19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDEwMTAsIGl3bDgyNjBfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4MDEzMCwgaXdsODI2MF8yYWNfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHgxMTMwLCBpd2w4MjYwXzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDAxMzIsIGl3bDgyNjBfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4MTEzMiwgaXdsODI2MF8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHgwMTEwLCBpd2w4MjYwXzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDAxRjAsIGl3bDgyNjBfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4MDAxMiwgaXdsODI2MF8yYWNfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHgxMDEyLCBpd2w4MjYwXzJhY19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDExMTAsIGl3bDgyNjBfMmFjX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4MDA1MCwgaXdsODI2MF8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHgwMjUwLCBpd2w4MjYwXzJhY19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDEwNTAsIGl3bDgyNjBfMmFjX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4MDE1MCwgaXdsODI2MF8yYWNfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHgxMTUwLCBpd2w4MjYwXzJhY19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEY0LCAweDAwMzAsIGl3bDgyNjBfMmFjX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDI0RjQsIDB4MTEzMCwgaXdsODI2MF8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGNCwgMHgxMDMwLCBpd2w4MjYwXzJhY19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweEMwMTAsIGl3bDgyNjBfMmFjX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4QzExMCwgaXdsODI2MF8yYWNfY2ZnKX0sCkBAIC00MzgsMTggKzQ0NSwyOCBAQAogCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4QzA1MCwgaXdsODI2MF8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHhEMDUwLCBpd2w4MjYwXzJhY19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDgwMTAsIGl3bDgyNjBfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4ODExMCwgaXdsODI2MF8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHg5MDEwLCBpd2w4MjYwXzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDkxMTAsIGl3bDgyNjBfMmFjX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDI0RjQsIDB4ODAzMCwgaXdsODI2MF8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGNCwgMHg5MDMwLCBpd2w4MjYwXzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDgxMzAsIGl3bDgyNjBfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4OTEzMCwgaXdsODI2MF8yYWNfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHg4MTMyLCBpd2w4MjYwXzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDkxMzIsIGl3bDgyNjBfMmFjX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4ODA1MCwgaXdsODI2MF8yYWNfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHg4MTUwLCBpd2w4MjYwXzJhY19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDkwNTAsIGl3bDgyNjBfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4OTE1MCwgaXdsODI2MF8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHgwMDA0LCBpd2w4MjYwXzJuX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4MDA0NCwgaXdsODI2MF8ybl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEY1LCAweDAwMTAsIGl3bDQxNjVfMmFjX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDI0RjYsIDB4MDAzMCwgaXdsNDE2NV8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHgwODEwLCBpd2w4MjYwXzJhY19jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDA5MTAsIGl3bDgyNjBfMmFjX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4MDg1MCwgaXdsODI2MF8yYWNfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MjRGMywgMHgwOTUwLCBpd2w4MjYwXzJhY19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDA5MzAsIGl3bDgyNjBfMmFjX2NmZyl9LAogI2VuZGlmIC8qIENPTkZJR19JV0xNVk0gKi8KIAogCXswfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL3J0bDg4MjFhZS9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL3J0bDg4MjFhZS9ody5jCmluZGV4IDZlOTQxOGUuLmJiYjc4OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9ydGw4ODIxYWUvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcnRsODgyMWFlL2h3LmMKQEAgLTIyNzIsNyArMjI3Miw3IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CiAKLQlpZiAoIXJ0bHBjaS0+aW50X2NsZWFyKQorCWlmIChydGxwY2ktPmludF9jbGVhcikKIAkJcnRsODgyMWFlX2NsZWFyX2ludGVycnVwdChodyk7LypjbGVhciBpdCBoZXJlIGZpcnN0Ki8KIAogCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfSElNUiwgcnRscGNpLT5pcnFfbWFza1swXSAmIDB4RkZGRkZGRkYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL3J0bDg4MjFhZS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydGx3aWZpL3J0bDg4MjFhZS9zdy5jCmluZGV4IDhlZTE0MWEuLjE0MmJkZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnRsd2lmaS9ydGw4ODIxYWUvc3cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0bHdpZmkvcnRsODgyMWFlL3N3LmMKQEAgLTQ0OCw3ICs0NDgsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhtc2ksICJTZXQgdG8gMSB0byB1c2UgTVNJIGludGVycnVwdHMgbW9kZSAoZGVmYXVsdCAxKVxuIik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiU2V0IGRlYnVnIGxldmVsICgwLTUpIChkZWZhdWx0IDApIik7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfd2F0Y2hkb2csICJTZXQgdG8gMSB0byBkaXNhYmxlIHRoZSB3YXRjaGRvZyAoZGVmYXVsdCAwKVxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGludF9jbGVhciwgIlNldCB0byAxIHRvIGRpc2FibGUgaW50ZXJydXB0IGNsZWFyIGJlZm9yZSBzZXQgKGRlZmF1bHQgMClcbiIpOworTU9EVUxFX1BBUk1fREVTQyhpbnRfY2xlYXIsICJTZXQgdG8gMCB0byBkaXNhYmxlIGludGVycnVwdCBjbGVhciBiZWZvcmUgc2V0IChkZWZhdWx0IDEpXG4iKTsKIAogc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHJ0bHdpZmlfcG1fb3BzLCBydGxfcGNpX3N1c3BlbmQsIHJ0bF9wY2lfcmVzdW1lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jCmluZGV4IGU0ODFmMzcuLjEwNDljMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMKQEAgLTI1OCwxOCArMjU4LDE4IEBACiAJCQkJCQkgc3RydWN0IG5ldHJ4X3BlbmRpbmdfb3BlcmF0aW9ucyAqbnBvKQogewogCXN0cnVjdCB4ZW52aWZfcnhfbWV0YSAqbWV0YTsKLQlzdHJ1Y3QgeGVuX25ldGlmX3J4X3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgeGVuX25ldGlmX3J4X3JlcXVlc3QgcmVxOwogCi0JcmVxID0gUklOR19HRVRfUkVRVUVTVCgmcXVldWUtPnJ4LCBxdWV1ZS0+cngucmVxX2NvbnMrKyk7CisJUklOR19DT1BZX1JFUVVFU1QoJnF1ZXVlLT5yeCwgcXVldWUtPnJ4LnJlcV9jb25zKyssICZyZXEpOwogCiAJbWV0YSA9IG5wby0+bWV0YSArIG5wby0+bWV0YV9wcm9kKys7CiAJbWV0YS0+Z3NvX3R5cGUgPSBYRU5fTkVUSUZfR1NPX1RZUEVfTk9ORTsKIAltZXRhLT5nc29fc2l6ZSA9IDA7CiAJbWV0YS0+c2l6ZSA9IDA7Ci0JbWV0YS0+aWQgPSByZXEtPmlkOworCW1ldGEtPmlkID0gcmVxLmlkOwogCiAJbnBvLT5jb3B5X29mZiA9IDA7Ci0JbnBvLT5jb3B5X2dyZWYgPSByZXEtPmdyZWY7CisJbnBvLT5jb3B5X2dyZWYgPSByZXEuZ3JlZjsKIAogCXJldHVybiBtZXRhOwogfQpAQCAtNDI0LDcgKzQyNCw3IEBACiAJc3RydWN0IHhlbnZpZiAqdmlmID0gbmV0ZGV2X3ByaXYoc2tiLT5kZXYpOwogCWludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJaW50IGk7Ci0Jc3RydWN0IHhlbl9uZXRpZl9yeF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IHhlbl9uZXRpZl9yeF9yZXF1ZXN0IHJlcTsKIAlzdHJ1Y3QgeGVudmlmX3J4X21ldGEgKm1ldGE7CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKIAlpbnQgaGVhZCA9IDE7CkBAIC00NDMsMTUgKzQ0MywxNSBAQAogCiAJLyogU2V0IHVwIGEgR1NPIHByZWZpeCBkZXNjcmlwdG9yLCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoKDEgPDwgZ3NvX3R5cGUpICYgdmlmLT5nc29fcHJlZml4X21hc2spIHsKLQkJcmVxID0gUklOR19HRVRfUkVRVUVTVCgmcXVldWUtPnJ4LCBxdWV1ZS0+cngucmVxX2NvbnMrKyk7CisJCVJJTkdfQ09QWV9SRVFVRVNUKCZxdWV1ZS0+cngsIHF1ZXVlLT5yeC5yZXFfY29ucysrLCAmcmVxKTsKIAkJbWV0YSA9IG5wby0+bWV0YSArIG5wby0+bWV0YV9wcm9kKys7CiAJCW1ldGEtPmdzb190eXBlID0gZ3NvX3R5cGU7CiAJCW1ldGEtPmdzb19zaXplID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKIAkJbWV0YS0+c2l6ZSA9IDA7Ci0JCW1ldGEtPmlkID0gcmVxLT5pZDsKKwkJbWV0YS0+aWQgPSByZXEuaWQ7CiAJfQogCi0JcmVxID0gUklOR19HRVRfUkVRVUVTVCgmcXVldWUtPnJ4LCBxdWV1ZS0+cngucmVxX2NvbnMrKyk7CisJUklOR19DT1BZX1JFUVVFU1QoJnF1ZXVlLT5yeCwgcXVldWUtPnJ4LnJlcV9jb25zKyssICZyZXEpOwogCW1ldGEgPSBucG8tPm1ldGEgKyBucG8tPm1ldGFfcHJvZCsrOwogCiAJaWYgKCgxIDw8IGdzb190eXBlKSAmIHZpZi0+Z3NvX21hc2spIHsKQEAgLTQ2Myw5ICs0NjMsOSBAQAogCX0KIAogCW1ldGEtPnNpemUgPSAwOwotCW1ldGEtPmlkID0gcmVxLT5pZDsKKwltZXRhLT5pZCA9IHJlcS5pZDsKIAlucG8tPmNvcHlfb2ZmID0gMDsKLQlucG8tPmNvcHlfZ3JlZiA9IHJlcS0+Z3JlZjsKKwlucG8tPmNvcHlfZ3JlZiA9IHJlcS5ncmVmOwogCiAJZGF0YSA9IHNrYi0+ZGF0YTsKIAl3aGlsZSAoZGF0YSA8IHNrYl90YWlsX3BvaW50ZXIoc2tiKSkgewpAQCAtNjc5LDkgKzY3OSw3IEBACiAJICogQWxsb3cgYSBidXJzdCBiaWcgZW5vdWdoIHRvIHRyYW5zbWl0IGEganVtYm8gcGFja2V0IG9mIHVwIHRvIDEyOGtCLgogCSAqIE90aGVyd2lzZSB0aGUgaW50ZXJmYWNlIGNhbiBzZWl6ZSB1cCBkdWUgdG8gaW5zdWZmaWNpZW50IGNyZWRpdC4KIAkgKi8KLQltYXhfYnVyc3QgPSBSSU5HX0dFVF9SRVFVRVNUKCZxdWV1ZS0+dHgsIHF1ZXVlLT50eC5yZXFfY29ucyktPnNpemU7Ci0JbWF4X2J1cnN0ID0gbWluKG1heF9idXJzdCwgMTMxMDcyVUwpOwotCW1heF9idXJzdCA9IG1heChtYXhfYnVyc3QsIHF1ZXVlLT5jcmVkaXRfYnl0ZXMpOworCW1heF9idXJzdCA9IG1heCgxMzEwNzJVTCwgcXVldWUtPmNyZWRpdF9ieXRlcyk7CiAKIAkvKiBUYWtlIGNhcmUgdGhhdCBhZGRpbmcgYSBuZXcgY2h1bmsgb2YgY3JlZGl0IGRvZXNuJ3Qgd3JhcCB0byB6ZXJvLiAqLwogCW1heF9jcmVkaXQgPSBxdWV1ZS0+cmVtYWluaW5nX2NyZWRpdCArIHF1ZXVlLT5jcmVkaXRfYnl0ZXM7CkBAIC03MTEsNyArNzA5LDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPnJlc3BvbnNlX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGNvbnMgPT0gZW5kKQogCQkJYnJlYWs7Ci0JCXR4cCA9IFJJTkdfR0VUX1JFUVVFU1QoJnF1ZXVlLT50eCwgY29ucysrKTsKKwkJUklOR19DT1BZX1JFUVVFU1QoJnF1ZXVlLT50eCwgY29ucysrLCB0eHApOwogCX0gd2hpbGUgKDEpOwogCXF1ZXVlLT50eC5yZXFfY29ucyA9IGNvbnM7CiB9CkBAIC03NzgsOCArNzc2LDcgQEAKIAkJaWYgKGRyb3BfZXJyKQogCQkJdHhwID0gJmRyb3BwZWRfdHg7CiAKLQkJbWVtY3B5KHR4cCwgUklOR19HRVRfUkVRVUVTVCgmcXVldWUtPnR4LCBjb25zICsgc2xvdHMpLAotCQkgICAgICAgc2l6ZW9mKCp0eHApKTsKKwkJUklOR19DT1BZX1JFUVVFU1QoJnF1ZXVlLT50eCwgY29ucyArIHNsb3RzLCB0eHApOwogCiAJCS8qIElmIHRoZSBndWVzdCBzdWJtaXR0ZWQgYSBmcmFtZSA+PSA2NCBLaUIgdGhlbgogCQkgKiBmaXJzdC0+c2l6ZSBvdmVyZmxvd2VkIGFuZCBmb2xsb3dpbmcgc2xvdHMgd2lsbApAQCAtMTExMiw4ICsxMTA5LDcgQEAKIAkJCXJldHVybiAtRUJBRFI7CiAJCX0KIAotCQltZW1jcHkoJmV4dHJhLCBSSU5HX0dFVF9SRVFVRVNUKCZxdWV1ZS0+dHgsIGNvbnMpLAotCQkgICAgICAgc2l6ZW9mKGV4dHJhKSk7CisJCVJJTkdfQ09QWV9SRVFVRVNUKCZxdWV1ZS0+dHgsIGNvbnMsICZleHRyYSk7CiAJCWlmICh1bmxpa2VseSghZXh0cmEudHlwZSB8fAogCQkJICAgICBleHRyYS50eXBlID49IFhFTl9ORVRJRl9FWFRSQV9UWVBFX01BWCkpIHsKIAkJCXF1ZXVlLT50eC5yZXFfY29ucyA9ICsrY29uczsKQEAgLTEzMjIsNyArMTMxOCw3IEBACiAKIAkJaWR4ID0gcXVldWUtPnR4LnJlcV9jb25zOwogCQlybWIoKTsgLyogRW5zdXJlIHRoYXQgd2Ugc2VlIHRoZSByZXF1ZXN0IGJlZm9yZSB3ZSBjb3B5IGl0LiAqLwotCQltZW1jcHkoJnR4cmVxLCBSSU5HX0dFVF9SRVFVRVNUKCZxdWV1ZS0+dHgsIGlkeCksIHNpemVvZih0eHJlcSkpOworCQlSSU5HX0NPUFlfUkVRVUVTVCgmcXVldWUtPnR4LCBpZHgsICZ0eHJlcSk7CiAKIAkJLyogQ3JlZGl0LWJhc2VkIHNjaGVkdWxpbmcuICovCiAJCWlmICh0eHJlcS5zaXplID4gcXVldWUtPnJlbWFpbmluZ19jcmVkaXQgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUKaW5kZXggMjE5ZGMyMDYuLmE1ZmUyMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogCiBvYmotJChDT05GSUdfQkxLX0RFVl9OVk1FKSAgICAgKz0gbnZtZS5vCiAKLW52bWUteQkJKz0gcGNpLm8gc2NzaS5vIGxpZ2h0bnZtLm8KK2xpZ2h0bnZtLSQoQ09ORklHX05WTSkJOj0gbGlnaHRudm0ubworbnZtZS15CQkrPSBwY2kubyBzY3NpLm8gJChsaWdodG52bS15KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbGlnaHRudm0uYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2xpZ2h0bnZtLmMKaW5kZXggZTBiN2I5NS4uMTVmMmFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbGlnaHRudm0uYworKysgYi9kcml2ZXJzL252bWUvaG9zdC9saWdodG52bS5jCkBAIC0yMiw4ICsyMiw2IEBACiAKICNpbmNsdWRlICJudm1lLmgiCiAKLSNpZmRlZiBDT05GSUdfTlZNCi0KICNpbmNsdWRlIDxsaW51eC9udm1lLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlnaHRudm0uaD4KQEAgLTkzLDcgKzkxLDcgQEAKIAlfX2xlMTYJCQljZHcxNFs2XTsKIH07CiAKLXN0cnVjdCBudm1lX252bV9iYnRibCB7CitzdHJ1Y3QgbnZtZV9udm1fZ2V0YmJ0YmwgewogCV9fdTgJCQlvcGNvZGU7CiAJX191OAkJCWZsYWdzOwogCV9fdTE2CQkJY29tbWFuZF9pZDsKQEAgLTEwMSwxMCArOTksMjMgQEAKIAlfX3U2NAkJCXJzdmRbMl07CiAJX19sZTY0CQkJcHJwMTsKIAlfX2xlNjQJCQlwcnAyOwotCV9fbGUzMgkJCXBycDFfbGVuOwotCV9fbGUzMgkJCXBycDJfbGVuOwotCV9fbGUzMgkJCWxiYjsKLQlfX3UzMgkJCXJzdmQxMVszXTsKKwlfX2xlNjQJCQlzcGJhOworCV9fdTMyCQkJcnN2ZDRbNF07Cit9OworCitzdHJ1Y3QgbnZtZV9udm1fc2V0YmJ0YmwgeworCV9fdTgJCQlvcGNvZGU7CisJX191OAkJCWZsYWdzOworCV9fdTE2CQkJY29tbWFuZF9pZDsKKwlfX2xlMzIJCQluc2lkOworCV9fbGU2NAkJCXJzdmRbMl07CisJX19sZTY0CQkJcHJwMTsKKwlfX2xlNjQJCQlwcnAyOworCV9fbGU2NAkJCXNwYmE7CisJX19sZTE2CQkJbmxiOworCV9fdTgJCQl2YWx1ZTsKKwlfX3U4CQkJcnN2ZDM7CisJX191MzIJCQlyc3ZkNFszXTsKIH07CiAKIHN0cnVjdCBudm1lX252bV9lcmFzZV9ibGsgewpAQCAtMTI5LDggKzE0MCw4IEBACiAJCXN0cnVjdCBudm1lX252bV9oYl9ydyBoYl9ydzsKIAkJc3RydWN0IG52bWVfbnZtX3BoX3J3IHBoX3J3OwogCQlzdHJ1Y3QgbnZtZV9udm1fbDJwdGJsIGwycDsKLQkJc3RydWN0IG52bWVfbnZtX2JidGJsIGdldF9iYjsKLQkJc3RydWN0IG52bWVfbnZtX2JidGJsIHNldF9iYjsKKwkJc3RydWN0IG52bWVfbnZtX2dldGJidGJsIGdldF9iYjsKKwkJc3RydWN0IG52bWVfbnZtX3NldGJidGJsIHNldF9iYjsKIAkJc3RydWN0IG52bWVfbnZtX2VyYXNlX2JsayBlcmFzZTsKIAl9OwogfTsKQEAgLTE0MiwxMSArMTUzLDEzIEBACiAJX191OAkJCW51bV9jaDsKIAlfX3U4CQkJbnVtX2x1bjsKIAlfX3U4CQkJbnVtX3BsbjsKKwlfX3U4CQkJcnN2ZDE7CiAJX19sZTE2CQkJbnVtX2JsazsKIAlfX2xlMTYJCQludW1fcGc7CiAJX19sZTE2CQkJZnBnX3N6OwogCV9fbGUxNgkJCWNzZWNzOwogCV9fbGUxNgkJCXNvczsKKwlfX2xlMTYJCQlyc3ZkMjsKIAlfX2xlMzIJCQl0cmR0OwogCV9fbGUzMgkJCXRyZG07CiAJX19sZTMyCQkJdHBydDsKQEAgLTE1NCw4ICsxNjcsOSBAQAogCV9fbGUzMgkJCXRiZXQ7CiAJX19sZTMyCQkJdGJlbTsKIAlfX2xlMzIJCQltcG9zOworCV9fbGUzMgkJCW1jY2FwOwogCV9fbGUxNgkJCWNwYXI7Ci0JX191OAkJCXJlc2VydmVkWzkxM107CisJX191OAkJCXJlc2VydmVkWzkwNl07CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgbnZtZV9udm1fYWRkcl9mb3JtYXQgewpAQCAtMTc4LDE1ICsxOTIsMjggQEAKIAlfX3U4CQkJdmVyX2lkOwogCV9fdTgJCQl2bW50OwogCV9fdTgJCQljZ3JwczsKLQlfX3U4CQkJcmVzWzVdOworCV9fdTgJCQlyZXM7CiAJX19sZTMyCQkJY2FwOwogCV9fbGUzMgkJCWRvbTsKIAlzdHJ1Y3QgbnZtZV9udm1fYWRkcl9mb3JtYXQgcHBhZjsKLQlfX3U4CQkJcHBhdDsKLQlfX3U4CQkJcmVzdlsyMjNdOworCV9fdTgJCQlyZXN2WzIyOF07CiAJc3RydWN0IG52bWVfbnZtX2lkX2dyb3VwIGdyb3Vwc1s0XTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBudm1lX252bV9iYl90YmwgeworCV9fdTgJdGJsaWRbNF07CisJX19sZTE2CXZlcmlkOworCV9fbGUxNglyZXZpZDsKKwlfX2xlMzIJcnZzZDE7CisJX19sZTMyCXRibGtzOworCV9fbGUzMgl0ZmFjdDsKKwlfX2xlMzIJdGdyb3duOworCV9fbGUzMgl0ZHJlc3Y7CisJX19sZTMyCXRocmVzdjsKKwlfX2xlMzIJcnN2ZDJbOF07CisJX191OAlibGtbMF07Cit9OworCiAvKgogICogQ2hlY2sgd2UgZGlkbid0IGluYWR2ZXJ0ZW50bHkgZ3JvdyB0aGUgY29tbWFuZCBzdHJ1Y3QKICAqLwpAQCAtMTk1LDEyICsyMjIsMTQgQEAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9pZGVudGl0eSkgIT0gNjQpOwogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG52bWVfbnZtX2hiX3J3KSAhPSA2NCk7CiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbnZtZV9udm1fcGhfcncpICE9IDY0KTsKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9iYnRibCkgIT0gNjQpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG52bWVfbnZtX2dldGJidGJsKSAhPSA2NCk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbnZtZV9udm1fc2V0YmJ0YmwpICE9IDY0KTsKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9sMnB0YmwpICE9IDY0KTsKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9lcmFzZV9ibGspICE9IDY0KTsKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9pZF9ncm91cCkgIT0gOTYwKTsKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9hZGRyX2Zvcm1hdCkgIT0gMTI4KTsKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9pZCkgIT0gNDA5Nik7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbnZtZV9udm1fYmJfdGJsKSAhPSA1MTIpOwogfQogCiBzdGF0aWMgaW50IGluaXRfZ3JwcyhzdHJ1Y3QgbnZtX2lkICpudm1faWQsIHN0cnVjdCBudm1lX252bV9pZCAqbnZtZV9udm1faWQpCkBAIC0yMzQsNiArMjYzLDcgQEAKIAkJZHN0LT50YmV0ID0gbGUzMl90b19jcHUoc3JjLT50YmV0KTsKIAkJZHN0LT50YmVtID0gbGUzMl90b19jcHUoc3JjLT50YmVtKTsKIAkJZHN0LT5tcG9zID0gbGUzMl90b19jcHUoc3JjLT5tcG9zKTsKKwkJZHN0LT5tY2NhcCA9IGxlMzJfdG9fY3B1KHNyYy0+bWNjYXApOwogCiAJCWRzdC0+Y3BhciA9IGxlMTZfdG9fY3B1KHNyYy0+Y3Bhcik7CiAJfQpAQCAtMjQxLDkgKzI3MSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG52bWVfbnZtX2lkZW50aXR5KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgbnZtX2lkICpudm1faWQpCitzdGF0aWMgaW50IG52bWVfbnZtX2lkZW50aXR5KHN0cnVjdCBudm1fZGV2ICpudm1kZXYsIHN0cnVjdCBudm1faWQgKm52bV9pZCkKIHsKLQlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBxLT5xdWV1ZWRhdGE7CisJc3RydWN0IG52bWVfbnMgKm5zID0gbnZtZGV2LT5xLT5xdWV1ZWRhdGE7CisJc3RydWN0IG52bWVfZGV2ICpkZXYgPSBucy0+ZGV2OwogCXN0cnVjdCBudm1lX252bV9pZCAqbnZtZV9udm1faWQ7CiAJc3RydWN0IG52bWVfbnZtX2NvbW1hbmQgYyA9IHt9OwogCWludCByZXQ7CkBAIC0yNTYsOCArMjg3LDggQEAKIAlpZiAoIW52bWVfbnZtX2lkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IG52bWVfc3VibWl0X3N5bmNfY21kKHEsIChzdHJ1Y3QgbnZtZV9jb21tYW5kICopJmMsIG52bWVfbnZtX2lkLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBudm1lX252bV9pZCkpOworCXJldCA9IG52bWVfc3VibWl0X3N5bmNfY21kKGRldi0+YWRtaW5fcSwgKHN0cnVjdCBudm1lX2NvbW1hbmQgKikmYywKKwkJCQludm1lX252bV9pZCwgc2l6ZW9mKHN0cnVjdCBudm1lX252bV9pZCkpOwogCWlmIChyZXQpIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CkBAIC0yNjgsNiArMjk5LDggQEAKIAludm1faWQtPmNncnBzID0gbnZtZV9udm1faWQtPmNncnBzOwogCW52bV9pZC0+Y2FwID0gbGUzMl90b19jcHUobnZtZV9udm1faWQtPmNhcCk7CiAJbnZtX2lkLT5kb20gPSBsZTMyX3RvX2NwdShudm1lX252bV9pZC0+ZG9tKTsKKwltZW1jcHkoJm52bV9pZC0+cHBhZiwgJm52bWVfbnZtX2lkLT5wcGFmLAorCQkJCQlzaXplb2Yoc3RydWN0IG52bWVfbnZtX2FkZHJfZm9ybWF0KSk7CiAKIAlyZXQgPSBpbml0X2dycHMobnZtX2lkLCBudm1lX252bV9pZCk7CiBvdXQ6CkBAIC0yNzUsMTMgKzMwOCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbnZtZV9udm1fZ2V0X2wycF90Ymwoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHU2NCBzbGJhLCB1MzIgbmxiLAorc3RhdGljIGludCBudm1lX252bV9nZXRfbDJwX3RibChzdHJ1Y3QgbnZtX2RldiAqbnZtZGV2LCB1NjQgc2xiYSwgdTMyIG5sYiwKIAkJCQludm1fbDJwX3VwZGF0ZV9mbiAqdXBkYXRlX2wycCwgdm9pZCAqcHJpdikKIHsKLQlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBxLT5xdWV1ZWRhdGE7CisJc3RydWN0IG52bWVfbnMgKm5zID0gbnZtZGV2LT5xLT5xdWV1ZWRhdGE7CiAJc3RydWN0IG52bWVfZGV2ICpkZXYgPSBucy0+ZGV2OwogCXN0cnVjdCBudm1lX252bV9jb21tYW5kIGMgPSB7fTsKLQl1MzIgbGVuID0gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkgPDwgOTsKKwl1MzIgbGVuID0gcXVldWVfbWF4X2h3X3NlY3RvcnMoZGV2LT5hZG1pbl9xKSA8PCA5OwogCXUzMiBubGJfcHJfcnEgPSBsZW4gLyBzaXplb2YodTY0KTsKIAl1NjQgY21kX3NsYmEgPSBzbGJhOwogCXZvaWQgKmVudHJpZXM7CkBAIC0yOTksOCArMzMyLDggQEAKIAkJYy5sMnAuc2xiYSA9IGNwdV90b19sZTY0KGNtZF9zbGJhKTsKIAkJYy5sMnAubmxiID0gY3B1X3RvX2xlMzIoY21kX25sYik7CiAKLQkJcmV0ID0gbnZtZV9zdWJtaXRfc3luY19jbWQocSwgKHN0cnVjdCBudm1lX2NvbW1hbmQgKikmYywKLQkJCQkJCQkJZW50cmllcywgbGVuKTsKKwkJcmV0ID0gbnZtZV9zdWJtaXRfc3luY19jbWQoZGV2LT5hZG1pbl9xLAorCQkJCShzdHJ1Y3QgbnZtZV9jb21tYW5kICopJmMsIGVudHJpZXMsIGxlbik7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LT5kZXYsICJMMlAgdGFibGUgdHJhbnNmZXIgZmFpbGVkICglZClcbiIsCiAJCQkJCQkJCQlyZXQpOwpAQCAtMzIyLDQzICszNTUsODQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG52bWVfbnZtX2dldF9iYl90Ymwoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBsdW5pZCwKLQkJCQl1bnNpZ25lZCBpbnQgbnJfYmxvY2tzLAotCQkJCW52bV9iYl91cGRhdGVfZm4gKnVwZGF0ZV9iYnRibCwgdm9pZCAqcHJpdikKK3N0YXRpYyBpbnQgbnZtZV9udm1fZ2V0X2JiX3RibChzdHJ1Y3QgbnZtX2RldiAqbnZtZGV2LCBzdHJ1Y3QgcHBhX2FkZHIgcHBhLAorCQkJCWludCBucl9ibG9ja3MsIG52bV9iYl91cGRhdGVfZm4gKnVwZGF0ZV9iYnRibCwKKwkJCQl2b2lkICpwcml2KQogeworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gbnZtZGV2LT5xOwogCXN0cnVjdCBudm1lX25zICpucyA9IHEtPnF1ZXVlZGF0YTsKIAlzdHJ1Y3QgbnZtZV9kZXYgKmRldiA9IG5zLT5kZXY7CiAJc3RydWN0IG52bWVfbnZtX2NvbW1hbmQgYyA9IHt9OwotCXZvaWQgKmJiX2JpdG1hcDsKLQl1MTYgYmJfYml0bWFwX3NpemU7CisJc3RydWN0IG52bWVfbnZtX2JiX3RibCAqYmJfdGJsOworCWludCB0YmxzeiA9IHNpemVvZihzdHJ1Y3QgbnZtZV9udm1fYmJfdGJsKSArIG5yX2Jsb2NrczsKIAlpbnQgcmV0ID0gMDsKIAogCWMuZ2V0X2JiLm9wY29kZSA9IG52bWVfbnZtX2FkbWluX2dldF9iYl90Ymw7CiAJYy5nZXRfYmIubnNpZCA9IGNwdV90b19sZTMyKG5zLT5uc19pZCk7Ci0JYy5nZXRfYmIubGJiID0gY3B1X3RvX2xlMzIobHVuaWQpOwotCWJiX2JpdG1hcF9zaXplID0gKChucl9ibG9ja3MgPj4gMTUpICsgMSkgKiBQQUdFX1NJWkU7Ci0JYmJfYml0bWFwID0ga21hbGxvYyhiYl9iaXRtYXBfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiYl9iaXRtYXApCisJYy5nZXRfYmIuc3BiYSA9IGNwdV90b19sZTY0KHBwYS5wcGEpOworCisJYmJfdGJsID0ga3phbGxvYyh0YmxzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiYl90YmwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYml0bWFwX3plcm8oYmJfYml0bWFwLCBucl9ibG9ja3MpOwotCi0JcmV0ID0gbnZtZV9zdWJtaXRfc3luY19jbWQocSwgKHN0cnVjdCBudm1lX2NvbW1hbmQgKikmYywgYmJfYml0bWFwLAotCQkJCQkJCQliYl9iaXRtYXBfc2l6ZSk7CisJcmV0ID0gbnZtZV9zdWJtaXRfc3luY19jbWQoZGV2LT5hZG1pbl9xLCAoc3RydWN0IG52bWVfY29tbWFuZCAqKSZjLAorCQkJCQkJCQliYl90YmwsIHRibHN6KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LT5kZXYsICJnZXQgYmFkIGJsb2NrIHRhYmxlIGZhaWxlZCAoJWQpXG4iLCByZXQpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSB1cGRhdGVfYmJ0YmwobHVuaWQsIGJiX2JpdG1hcCwgbnJfYmxvY2tzLCBwcml2KTsKKwlpZiAoYmJfdGJsLT50YmxpZFswXSAhPSAnQicgfHwgYmJfdGJsLT50YmxpZFsxXSAhPSAnQicgfHwKKwkJYmJfdGJsLT50YmxpZFsyXSAhPSAnTCcgfHwgYmJfdGJsLT50YmxpZFszXSAhPSAnVCcpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImJidCBmb3JtYXQgbWlzbWF0Y2hcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobGUxNl90b19jcHUoYmJfdGJsLT52ZXJpZCkgIT0gMSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlkZXZfZXJyKGRldi0+ZGV2LCAiYmJ0IHZlcnNpb24gbm90IHN1cHBvcnRlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChsZTMyX3RvX2NwdShiYl90YmwtPnRibGtzKSAhPSBucl9ibG9ja3MpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZGV2X2VycihkZXYtPmRldiwgImJidCB1bnN1c3BlY3RlZCBibG9ja3MgcmV0dXJuZWQgKCV1IT0ldSkiLAorCQkJCQlsZTMyX3RvX2NwdShiYl90YmwtPnRibGtzKSwgbnJfYmxvY2tzKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHBhID0gZGV2X3RvX2dlbmVyaWNfYWRkcihudm1kZXYsIHBwYSk7CisJcmV0ID0gdXBkYXRlX2JidGJsKHBwYSwgbnJfYmxvY2tzLCBiYl90YmwtPmJsaywgcHJpdik7CiAJaWYgKHJldCkgewogCQlyZXQgPSAtRUlOVFI7CiAJCWdvdG8gb3V0OwogCX0KIAogb3V0OgotCWtmcmVlKGJiX2JpdG1hcCk7CisJa2ZyZWUoYmJfdGJsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG52bWVfbnZtX3NldF9iYl90Ymwoc3RydWN0IG52bV9kZXYgKm52bWRldiwgc3RydWN0IG52bV9ycSAqcnFkLAorCQkJCQkJCQlpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBudm1kZXYtPnEtPnF1ZXVlZGF0YTsKKwlzdHJ1Y3QgbnZtZV9kZXYgKmRldiA9IG5zLT5kZXY7CisJc3RydWN0IG52bWVfbnZtX2NvbW1hbmQgYyA9IHt9OworCWludCByZXQgPSAwOworCisJYy5zZXRfYmIub3Bjb2RlID0gbnZtZV9udm1fYWRtaW5fc2V0X2JiX3RibDsKKwljLnNldF9iYi5uc2lkID0gY3B1X3RvX2xlMzIobnMtPm5zX2lkKTsKKwljLnNldF9iYi5zcGJhID0gY3B1X3RvX2xlNjQocnFkLT5wcGFfYWRkci5wcGEpOworCWMuc2V0X2JiLm5sYiA9IGNwdV90b19sZTE2KHJxZC0+bnJfcGFnZXMgLSAxKTsKKwljLnNldF9iYi52YWx1ZSA9IHR5cGU7CisKKwlyZXQgPSBudm1lX3N1Ym1pdF9zeW5jX2NtZChkZXYtPmFkbWluX3EsIChzdHJ1Y3QgbnZtZV9jb21tYW5kICopJmMsCisJCQkJCQkJCU5VTEwsIDApOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LT5kZXYsICJzZXQgYmFkIGJsb2NrIHRhYmxlIGZhaWxlZCAoJWQpXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM4MSw3ICs0NTUsNyBAQAogCXN0cnVjdCBudm1fcnEgKnJxZCA9IHJxLT5lbmRfaW9fZGF0YTsKIAlzdHJ1Y3QgbnZtX2RldiAqZGV2ID0gcnFkLT5kZXY7CiAKLQlpZiAoZGV2LT5tdC0+ZW5kX2lvKHJxZCwgZXJyb3IpKQorCWlmIChkZXYtPm10ICYmIGRldi0+bXQtPmVuZF9pbyhycWQsIGVycm9yKSkKIAkJcHJfZXJyKCJudm1lOiBlcnIgc3RhdHVzOiAleCByZXN1bHQ6ICVseFxuIiwKIAkJCQlycS0+ZXJyb3JzLCAodW5zaWduZWQgbG9uZylycS0+c3BlY2lhbCk7CiAKQEAgLTM4OSw4ICs0NjMsOSBAQAogCWJsa19tcV9mcmVlX3JlcXVlc3QocnEpOwogfQogCi1zdGF0aWMgaW50IG52bWVfbnZtX3N1Ym1pdF9pbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IG52bV9ycSAqcnFkKQorc3RhdGljIGludCBudm1lX252bV9zdWJtaXRfaW8oc3RydWN0IG52bV9kZXYgKmRldiwgc3RydWN0IG52bV9ycSAqcnFkKQogeworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGV2LT5xOwogCXN0cnVjdCBudm1lX25zICpucyA9IHEtPnF1ZXVlZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJc3RydWN0IGJpbyAqYmlvID0gcnFkLT5iaW87CkBAIC00MjgsOCArNTAzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBudm1lX252bV9lcmFzZV9ibG9jayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IG52bV9ycSAqcnFkKQorc3RhdGljIGludCBudm1lX252bV9lcmFzZV9ibG9jayhzdHJ1Y3QgbnZtX2RldiAqZGV2LCBzdHJ1Y3QgbnZtX3JxICpycWQpCiB7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkZXYtPnE7CiAJc3RydWN0IG52bWVfbnMgKm5zID0gcS0+cXVldWVkYXRhOwogCXN0cnVjdCBudm1lX252bV9jb21tYW5kIGMgPSB7fTsKIApAQCAtNDQxLDkgKzUxNyw5IEBACiAJcmV0dXJuIG52bWVfc3VibWl0X3N5bmNfY21kKHEsIChzdHJ1Y3QgbnZtZV9jb21tYW5kICopJmMsIE5VTEwsIDApOwogfQogCi1zdGF0aWMgdm9pZCAqbnZtZV9udm1fY3JlYXRlX2RtYV9wb29sKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lKQorc3RhdGljIHZvaWQgKm52bWVfbnZtX2NyZWF0ZV9kbWFfcG9vbChzdHJ1Y3QgbnZtX2RldiAqbnZtZGV2LCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBudm1lX25zICpucyA9IHEtPnF1ZXVlZGF0YTsKKwlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBudm1kZXYtPnEtPnF1ZXVlZGF0YTsKIAlzdHJ1Y3QgbnZtZV9kZXYgKmRldiA9IG5zLT5kZXY7CiAKIAlyZXR1cm4gZG1hX3Bvb2xfY3JlYXRlKG5hbWUsIGRldi0+ZGV2LCBQQUdFX1NJWkUsIFBBR0VfU0laRSwgMCk7CkBAIC00NTYsNyArNTMyLDcgQEAKIAlkbWFfcG9vbF9kZXN0cm95KGRtYV9wb29sKTsKIH0KIAotc3RhdGljIHZvaWQgKm52bWVfbnZtX2Rldl9kbWFfYWxsb2Moc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHZvaWQgKnBvb2wsCitzdGF0aWMgdm9pZCAqbnZtZV9udm1fZGV2X2RtYV9hbGxvYyhzdHJ1Y3QgbnZtX2RldiAqZGV2LCB2b2lkICpwb29sLAogCQkJCSAgICBnZnBfdCBtZW1fZmxhZ3MsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGVyKQogewogCXJldHVybiBkbWFfcG9vbF9hbGxvYyhwb29sLCBtZW1fZmxhZ3MsIGRtYV9oYW5kbGVyKTsKQEAgLTQ3NCw2ICs1NTAsNyBAQAogCS5nZXRfbDJwX3RibAkJPSBudm1lX252bV9nZXRfbDJwX3RibCwKIAogCS5nZXRfYmJfdGJsCQk9IG52bWVfbnZtX2dldF9iYl90YmwsCisJLnNldF9iYl90YmwJCT0gbnZtZV9udm1fc2V0X2JiX3RibCwKIAogCS5zdWJtaXRfaW8JCT0gbnZtZV9udm1fc3VibWl0X2lvLAogCS5lcmFzZV9ibG9jawkJPSBudm1lX252bV9lcmFzZV9ibG9jaywKQEAgLTQ5NiwzMSArNTczLDI3IEBACiAJbnZtX3VucmVnaXN0ZXIoZGlza19uYW1lKTsKIH0KIAorLyogbW92ZSB0byBzaGFyZWQgcGxhY2Ugd2hlbiB1c2VkIGluIG11bHRpcGxlIHBsYWNlcy4gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DTkVYIDB4MWQxZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NORVhfV0wgMHgyODA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ05FWF9RRU1VIDB4MWYxZgorCiBpbnQgbnZtZV9udm1fbnNfc3VwcG9ydGVkKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfaWRfbnMgKmlkKQogewogCXN0cnVjdCBudm1lX2RldiAqZGV2ID0gbnMtPmRldjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2LT5kZXYpOwogCiAJLyogUUVNVSBOVk1lIHNpbXVsYXRvciAtIFBDSSBJRCArIFZlbmRvciBzcGVjaWZpYyBiaXQgKi8KLQlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwgJiYgcGRldi0+ZGV2aWNlID09IDB4NTg0NSAmJgorCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DTkVYICYmCisJCQkJcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ05FWF9RRU1VICYmCiAJCQkJCQkJaWQtPnZzWzBdID09IDB4MSkKIAkJcmV0dXJuIDE7CiAKIAkvKiBDTkVYIExhYnMgLSBQQ0kgSUQgKyBWZW5kb3Igc3BlY2lmaWMgYml0ICovCi0JaWYgKHBkZXYtPnZlbmRvciA9PSAweDFkMWQgJiYgcGRldi0+ZGV2aWNlID09IDB4MjgwNyAmJgorCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DTkVYICYmCisJCQkJcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ05FWF9XTCAmJgogCQkJCQkJCWlkLT52c1swXSA9PSAweDEpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotaW50IG52bWVfbnZtX3JlZ2lzdGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpkaXNrX25hbWUpCi17Ci0JcmV0dXJuIDA7Ci19Ci12b2lkIG52bWVfbnZtX3VucmVnaXN0ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKmRpc2tfbmFtZSkge307Ci1pbnQgbnZtZV9udm1fbnNfc3VwcG9ydGVkKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfaWRfbnMgKmlkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19OVk0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaAppbmRleCBmZGI0ZTViLi4wNDQyNTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgKKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCkBAIC0xMzYsOCArMTM2LDIyIEBACiBpbnQgbnZtZV9zZ19pbzMyKHN0cnVjdCBudm1lX25zICpucywgdW5zaWduZWQgbG9uZyBhcmcpOwogaW50IG52bWVfc2dfZ2V0X3ZlcnNpb25fbnVtKGludCBfX3VzZXIgKmlwKTsKIAorI2lmZGVmIENPTkZJR19OVk0KIGludCBudm1lX252bV9uc19zdXBwb3J0ZWQoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9pZF9ucyAqaWQpOwogaW50IG52bWVfbnZtX3JlZ2lzdGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpkaXNrX25hbWUpOwogdm9pZCBudm1lX252bV91bnJlZ2lzdGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpkaXNrX25hbWUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IG52bWVfbnZtX3JlZ2lzdGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpkaXNrX25hbWUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBudm1lX252bV91bnJlZ2lzdGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpkaXNrX25hbWUpIHt9OworCitzdGF0aWMgaW5saW5lIGludCBudm1lX252bV9uc19zdXBwb3J0ZWQoc3RydWN0IG52bWVfbnMgKm5zLCBzdHJ1Y3QgbnZtZV9pZF9ucyAqaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX05WTSAqLwogCiAjZW5kaWYgLyogX05WTUVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmMgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwppbmRleCA4MTg3ZGYyLi4wYzY3YjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9wY2kuYworKysgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwpAQCAtODk2LDE5ICs4OTYsMjggQEAKIAkJCWdvdG8gcmV0cnlfY21kOwogCQl9CiAJCWlmIChibGtfaW50ZWdyaXR5X3JxKHJlcSkpIHsKLQkJCWlmIChibGtfcnFfY291bnRfaW50ZWdyaXR5X3NnKHJlcS0+cSwgcmVxLT5iaW8pICE9IDEpCisJCQlpZiAoYmxrX3JxX2NvdW50X2ludGVncml0eV9zZyhyZXEtPnEsIHJlcS0+YmlvKSAhPSAxKSB7CisJCQkJZG1hX3VubWFwX3NnKGRldi0+ZGV2LCBpb2QtPnNnLCBpb2QtPm5lbnRzLAorCQkJCQkJZG1hX2Rpcik7CiAJCQkJZ290byBlcnJvcl9jbWQ7CisJCQl9CiAKIAkJCXNnX2luaXRfdGFibGUoaW9kLT5tZXRhX3NnLCAxKTsKIAkJCWlmIChibGtfcnFfbWFwX2ludGVncml0eV9zZygKLQkJCQkJcmVxLT5xLCByZXEtPmJpbywgaW9kLT5tZXRhX3NnKSAhPSAxKQorCQkJCQlyZXEtPnEsIHJlcS0+YmlvLCBpb2QtPm1ldGFfc2cpICE9IDEpIHsKKwkJCQlkbWFfdW5tYXBfc2coZGV2LT5kZXYsIGlvZC0+c2csIGlvZC0+bmVudHMsCisJCQkJCQlkbWFfZGlyKTsKIAkJCQlnb3RvIGVycm9yX2NtZDsKKwkJCX0KIAogCQkJaWYgKHJxX2RhdGFfZGlyKHJlcSkpCiAJCQkJbnZtZV9kaWZfcmVtYXAocmVxLCBudm1lX2RpZl9wcmVwKTsKIAotCQkJaWYgKCFkbWFfbWFwX3NnKG52bWVxLT5xX2RtYWRldiwgaW9kLT5tZXRhX3NnLCAxLCBkbWFfZGlyKSkKKwkJCWlmICghZG1hX21hcF9zZyhudm1lcS0+cV9kbWFkZXYsIGlvZC0+bWV0YV9zZywgMSwgZG1hX2RpcikpIHsKKwkJCQlkbWFfdW5tYXBfc2coZGV2LT5kZXYsIGlvZC0+c2csIGlvZC0+bmVudHMsCisJCQkJCQlkbWFfZGlyKTsKIAkJCQlnb3RvIGVycm9yX2NtZDsKKwkJCX0KIAkJfQogCX0KIApAQCAtOTY4LDcgKzk3Nyw4IEBACiAJaWYgKGhlYWQgPT0gbnZtZXEtPmNxX2hlYWQgJiYgcGhhc2UgPT0gbnZtZXEtPmNxX3BoYXNlKQogCQlyZXR1cm47CiAKLQl3cml0ZWwoaGVhZCwgbnZtZXEtPnFfZGIgKyBudm1lcS0+ZGV2LT5kYl9zdHJpZGUpOworCWlmIChsaWtlbHkobnZtZXEtPmNxX3ZlY3RvciA+PSAwKSkKKwkJd3JpdGVsKGhlYWQsIG52bWVxLT5xX2RiICsgbnZtZXEtPmRldi0+ZGJfc3RyaWRlKTsKIAludm1lcS0+Y3FfaGVhZCA9IGhlYWQ7CiAJbnZtZXEtPmNxX3BoYXNlID0gcGhhc2U7CiAKQEAgLTE3MjcsOSArMTczNywxMyBAQAogCXUzMiBhcWE7CiAJdTY0IGNhcCA9IGxvX2hpX3JlYWRxKCZkZXYtPmJhci0+Y2FwKTsKIAlzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXE7Ci0JdW5zaWduZWQgcGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CisJLyoKKwkgKiBkZWZhdWx0IHRvIGEgNEsgcGFnZSBzaXplLCB3aXRoIHRoZSBpbnRlbnRpb24gdG8gdXBkYXRlIHRoaXMKKwkgKiBwYXRoIGluIHRoZSBmdXR1cmUgdG8gYWNjb21vZGF0ZSBhcmNoaXRlY3R1cmVzIHdpdGggZGlmZmVyaW5nCisJICoga2VybmVsIGFuZCBJTyBwYWdlIHNpemVzLgorCSAqLworCXVuc2lnbmVkIHBhZ2Vfc2hpZnQgPSAxMjsKIAl1bnNpZ25lZCBkZXZfcGFnZV9taW4gPSBOVk1FX0NBUF9NUFNNSU4oY2FwKSArIDEyOwotCXVuc2lnbmVkIGRldl9wYWdlX21heCA9IE5WTUVfQ0FQX01QU01BWChjYXApICsgMTI7CiAKIAlpZiAocGFnZV9zaGlmdCA8IGRldl9wYWdlX21pbikgewogCQlkZXZfZXJyKGRldi0+ZGV2LApAQCAtMTczOCwxMyArMTc1Miw2IEBACiAJCQkJMSA8PCBwYWdlX3NoaWZ0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmIChwYWdlX3NoaWZ0ID4gZGV2X3BhZ2VfbWF4KSB7Ci0JCWRldl9pbmZvKGRldi0+ZGV2LAotCQkJCSJEZXZpY2UgbWF4aW11bSBwYWdlIHNpemUgKCV1KSBzbWFsbGVyIHRoYW4gIgotCQkJCSJob3N0ICgldSk7IGVuYWJsaW5nIHdvcmstYXJvdW5kXG4iLAotCQkJCTEgPDwgZGV2X3BhZ2VfbWF4LCAxIDw8IHBhZ2Vfc2hpZnQpOwotCQlwYWdlX3NoaWZ0ID0gZGV2X3BhZ2VfbWF4OwotCX0KIAogCWRldi0+c3Vic3lzdGVtID0gcmVhZGwoJmRldi0+YmFyLT52cykgPj0gTlZNRV9WUygxLCAxKSA/CiAJCQkJCQlOVk1FX0NBUF9OU1NSQyhjYXApIDogMDsKQEAgLTIyNjgsNyArMjI3NSw3IEBACiAJaWYgKGRldi0+bWF4X2h3X3NlY3RvcnMpIHsKIAkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG5zLT5xdWV1ZSwgZGV2LT5tYXhfaHdfc2VjdG9ycyk7CiAJCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMobnMtPnF1ZXVlLAotCQkJKChkZXYtPm1heF9od19zZWN0b3JzIDw8IDkpIC8gZGV2LT5wYWdlX3NpemUpICsgMSk7CisJCQkoZGV2LT5tYXhfaHdfc2VjdG9ycyAvIChkZXYtPnBhZ2Vfc2l6ZSA+PiA5KSkgKyAxKTsKIAl9CiAJaWYgKGRldi0+c3RyaXBlX3NpemUpCiAJCWJsa19xdWV1ZV9jaHVua19zZWN0b3JzKG5zLT5xdWV1ZSwgZGV2LT5zdHJpcGVfc2l6ZSA+PiA5KTsKQEAgLTI1MzMsOCArMjU0MCwxNyBAQAogewogCWJvb2wga2lsbCA9IG52bWVfaW9faW5jYXBhYmxlKG5zLT5kZXYpICYmICFibGtfcXVldWVfZHlpbmcobnMtPnF1ZXVlKTsKIAotCWlmIChraWxsKQorCWlmIChraWxsKSB7CiAJCWJsa19zZXRfcXVldWVfZHlpbmcobnMtPnF1ZXVlKTsKKworCQkvKgorCQkgKiBUaGUgY29udHJvbGxlciB3YXMgc2h1dGRvd24gZmlyc3QgaWYgd2UgZ290IGhlcmUgdGhyb3VnaAorCQkgKiBkZXZpY2UgcmVtb3ZhbC4gVGhlIHNodXRkb3duIG1heSByZXF1ZXVlIG91dHN0YW5kaW5nCisJCSAqIHJlcXVlc3RzLiBUaGVzZSBuZWVkIHRvIGJlIGFib3J0ZWQgaW1tZWRpYXRlbHkgc28KKwkJICogZGVsX2dlbmRpc2sgZG9lc24ndCBibG9jayBpbmRlZmluaXRlbHkgZm9yIHRoZWlyIGNvbXBsZXRpb24uCisJCSAqLworCQlibGtfbXFfYWJvcnRfcmVxdWV1ZV9saXN0KG5zLT5xdWV1ZSk7CisJfQogCWlmIChucy0+ZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkKIAkJZGVsX2dlbmRpc2sobnMtPmRpc2spOwogCWlmIChraWxsIHx8ICFibGtfcXVldWVfZHlpbmcobnMtPnF1ZXVlKSkgewpAQCAtMjcwMSw2ICsyNzE3LDE4IEBACiAJZGV2LT5xX2RlcHRoID0gbWluX3QoaW50LCBOVk1FX0NBUF9NUUVTKGNhcCkgKyAxLCBOVk1FX1FfREVQVEgpOwogCWRldi0+ZGJfc3RyaWRlID0gMSA8PCBOVk1FX0NBUF9TVFJJREUoY2FwKTsKIAlkZXYtPmRicyA9ICgodm9pZCBfX2lvbWVtICopZGV2LT5iYXIpICsgNDA5NjsKKworCS8qCisJICogVGVtcG9yYXJ5IGZpeCBmb3IgdGhlIEFwcGxlIGNvbnRyb2xsZXIgZm91bmQgaW4gdGhlIE1hY0Jvb2s4LDEgYW5kCisJICogc29tZSBNYWNCb29rNywxIHRvIGF2b2lkIGNvbnRyb2xsZXIgcmVzZXRzIGFuZCBkYXRhIGxvc3MuCisJICovCisJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FQUExFICYmIHBkZXYtPmRldmljZSA9PSAweDIwMDEpIHsKKwkJZGV2LT5xX2RlcHRoID0gMjsKKwkJZGV2X3dhcm4oZGV2LT5kZXYsICJkZXRlY3RlZCBBcHBsZSBOVk1lIGNvbnRyb2xsZXIsIHNldCAiCisJCQkicXVldWUgZGVwdGg9JXUgdG8gd29yayBhcm91bmQgY29udHJvbGxlciByZXNldHNcbiIsCisJCQlkZXYtPnFfZGVwdGgpOworCX0KKwogCWlmIChyZWFkbCgmZGV2LT5iYXItPnZzKSA+PSBOVk1FX1ZTKDEsIDIpKQogCQlkZXYtPmNtYiA9IG52bWVfbWFwX2NtYihkZXYpOwogCkBAIC0yNzg3LDYgKzI4MTUsMTAgQEAKIHsKIAlzdHJ1Y3QgbnZtZV9kZWxxX2N0eCAqZHEgPSBudm1lcS0+Y21kaW5mby5jdHg7CiAJbnZtZV9wdXRfZHEoZHEpOworCisJc3Bpbl9sb2NrX2lycSgmbnZtZXEtPnFfbG9jayk7CisJbnZtZV9wcm9jZXNzX2NxKG52bWVxKTsKKwlzcGluX3VubG9ja19pcnEoJm52bWVxLT5xX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGFkYXB0ZXJfYXN5bmNfZGVsX3F1ZXVlKHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSwgdTggb3Bjb2RlLApAQCAtMjk1NCw2ICsyOTg2LDE1IEBACiB7CiAJc3RydWN0IG52bWVfbnMgKm5zLCAqbmV4dDsKIAorCWlmIChudm1lX2lvX2luY2FwYWJsZShkZXYpKSB7CisJCS8qCisJCSAqIElmIHRoZSBkZXZpY2UgaXMgbm90IGNhcGFibGUgb2YgSU8gKHN1cnByaXNlIGhvdC1yZW1vdmFsLAorCQkgKiBmb3IgZXhhbXBsZSksIHdlIG5lZWQgdG8gcXVpZXNjZSBwcmlvciB0byBkZWxldGluZyB0aGUKKwkJICogbmFtZXNwYWNlcy4gVGhpcyB3aWxsIGVuZCBvdXRzdGFuZGluZyByZXF1ZXN0cyBhbmQgcHJldmVudAorCQkgKiBhdHRlbXB0cyB0byBzeW5jIGRpcnR5IGRhdGEuCisJCSAqLworCQludm1lX2Rldl9zaHV0ZG93bihkZXYpOworCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnMsIG5leHQsICZkZXYtPm5hbWVzcGFjZXMsIGxpc3QpCiAJCW52bWVfbnNfcmVtb3ZlKG5zKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYWRkcmVzcy5jIGIvZHJpdmVycy9vZi9hZGRyZXNzLmMKaW5kZXggY2Q1M2ZlNC4uOTU4MmM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9hZGRyZXNzLmMKKysrIGIvZHJpdmVycy9vZi9hZGRyZXNzLmMKQEAgLTQ4NSw5ICs0ODUsMTAgQEAKIAlpbnQgcm9uZTsKIAl1NjQgb2Zmc2V0ID0gT0ZfQkFEX0FERFI7CiAKLQkvKiBOb3JtYWxseSwgYW4gYWJzZW5jZSBvZiBhICJyYW5nZXMiIHByb3BlcnR5IG1lYW5zIHdlIGFyZQorCS8qCisJICogTm9ybWFsbHksIGFuIGFic2VuY2Ugb2YgYSAicmFuZ2VzIiBwcm9wZXJ0eSBtZWFucyB3ZSBhcmUKIAkgKiBjcm9zc2luZyBhIG5vbi10cmFuc2xhdGFibGUgYm91bmRhcnksIGFuZCB0aHVzIHRoZSBhZGRyZXNzZXMKLQkgKiBiZWxvdyB0aGUgY3VycmVudCBub3QgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBDUFUgcGh5c2ljYWwgb25lcy4KKwkgKiBiZWxvdyB0aGUgY3VycmVudCBjYW5ub3QgYmUgY29udmVydGVkIHRvIENQVSBwaHlzaWNhbCBvbmVzLgogCSAqIFVuZm9ydHVuYXRlbHksIHdoaWxlIHRoaXMgaXMgdmVyeSBjbGVhciBpbiB0aGUgc3BlYywgaXQncyBub3QKIAkgKiB3aGF0IEFwcGxlIHVuZGVyc3Rvb2QsIGFuZCB0aGV5IGRvIGhhdmUgdGhpbmdzIGxpa2UgL3VuaS1uIG9yCiAJICogL2h0IG5vZGVzIHdpdGggbm8gInJhbmdlcyIgcHJvcGVydHkgYW5kIGEgbG90IG9mIHBlcmZlY3RseQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9mZHQuYyBiL2RyaXZlcnMvb2YvZmR0LmMKaW5kZXggZDI0MzAyOS4uNjU1Zjc5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9mZHQuYworKysgYi9kcml2ZXJzL29mL2ZkdC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZmR0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcmVzZXJ2ZWRfbWVtLmg+CkBAIC00MzYsNiArNDM3LDggQEAKIAlyZXR1cm4ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIERFRklORV9NVVRFWChvZl9mZHRfdW5mbGF0dGVuX211dGV4KTsKKwogLyoqCiAgKiBvZl9mZHRfdW5mbGF0dGVuX3RyZWUgLSBjcmVhdGUgdHJlZSBvZiBkZXZpY2Vfbm9kZXMgZnJvbSBmbGF0IGJsb2IKICAqCkBAIC00NDcsNyArNDUwLDkgQEAKIHZvaWQgb2ZfZmR0X3VuZmxhdHRlbl90cmVlKGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJsb2IsCiAJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKipteW5vZGVzKQogeworCW11dGV4X2xvY2soJm9mX2ZkdF91bmZsYXR0ZW5fbXV0ZXgpOwogCV9fdW5mbGF0dGVuX2RldmljZV90cmVlKGJsb2IsIG15bm9kZXMsICZrZXJuZWxfdHJlZV9hbGxvYyk7CisJbXV0ZXhfdW5sb2NrKCZvZl9mZHRfdW5mbGF0dGVuX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9mX2ZkdF91bmZsYXR0ZW5fdHJlZSk7CiAKQEAgLTEwNDEsNyArMTA0Niw3IEBACiBpbnQgX19pbml0IF9fd2VhayBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5X2FyY2gocGh5c19hZGRyX3QgYmFzZSwKIAkJCQkJcGh5c19hZGRyX3Qgc2l6ZSwgYm9vbCBub21hcCkKIHsKLQlwcl9lcnIoIlJlc2VydmVkIG1lbW9yeSBub3Qgc3VwcG9ydGVkLCBpZ25vcmluZyByYW5nZSAweCVwYSAtIDB4JXBhJXNcbiIsCisJcHJfZXJyKCJSZXNlcnZlZCBtZW1vcnkgbm90IHN1cHBvcnRlZCwgaWdub3JpbmcgcmFuZ2UgJXBhIC0gJXBhJXNcbiIsCiAJCSAgJmJhc2UsICZzaXplLCBub21hcCA/ICIgKG5vbWFwKSIgOiAiIik7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2lycS5jIGIvZHJpdmVycy9vZi9pcnEuYwppbmRleCA5MDJiODliLi40ZmE5MTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2lycS5jCisrKyBiL2RyaXZlcnMvb2YvaXJxLmMKQEAgLTUzLDcgKzUzLDcgQEAKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgcGFyZW50IG5vZGUsIG9yIE5VTEwgaWYgdGhlIGludGVycnVwdAogICogcGFyZW50IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLgogICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpvZl9pcnFfZmluZF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCkKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfaXJxX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpwOwogCWNvbnN0IF9fYmUzMiAqcGFycDsKQEAgLTc3LDYgKzc3LDcgQEAKIAogCXJldHVybiBwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob2ZfaXJxX2ZpbmRfcGFyZW50KTsKIAogLyoqCiAgKiBvZl9pcnFfcGFyc2VfcmF3IC0gTG93IGxldmVsIGludGVycnVwdCB0cmVlIHBhcnNpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jCmluZGV4IGJlNzdlNzUuLjFhMzU1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMKKysrIGIvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYwpAQCAtMjA2LDcgKzIwNiwxMyBAQAogewogCWNvbnN0IHN0cnVjdCByZXNlcnZlZF9tZW0gKnJhID0gYSwgKnJiID0gYjsKIAotCXJldHVybiByYS0+YmFzZSAtIHJiLT5iYXNlOworCWlmIChyYS0+YmFzZSA8IHJiLT5iYXNlKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocmEtPmJhc2UgPiByYi0+YmFzZSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IF9fcm1lbV9jaGVja19mb3Jfb3ZlcmxhcCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvaW9tbXUtaGVscGVycy5oIGIvZHJpdmVycy9wYXJpc2MvaW9tbXUtaGVscGVycy5oCmluZGV4IDc2MWU3N2IuLmU1NmYxNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2lvbW11LWhlbHBlcnMuaAorKysgYi9kcml2ZXJzL3BhcmlzYy9pb21tdS1oZWxwZXJzLmgKQEAgLTEwNCw3ICsxMDQsMTEgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmNvbnRpZ19zZzsJICAgLyogY29udGlnIGNodW5rIGhlYWQgKi8KIAl1bnNpZ25lZCBsb25nIGRtYV9vZmZzZXQsIGRtYV9sZW47IC8qIHN0YXJ0L2xlbiBvZiBETUEgc3RyZWFtICovCiAJdW5zaWduZWQgaW50IG5fbWFwcGluZ3MgPSAwOwotCXVuc2lnbmVkIGludCBtYXhfc2VnX3NpemUgPSBkbWFfZ2V0X21heF9zZWdfc2l6ZShkZXYpOworCXVuc2lnbmVkIGludCBtYXhfc2VnX3NpemUgPSBtaW4oZG1hX2dldF9tYXhfc2VnX3NpemUoZGV2KSwKKwkJCQkJKHVuc2lnbmVkKURNQV9DSFVOS19TSVpFKTsKKwl1bnNpZ25lZCBpbnQgbWF4X3NlZ19ib3VuZGFyeSA9IGRtYV9nZXRfc2VnX2JvdW5kYXJ5KGRldikgKyAxOworCWlmIChtYXhfc2VnX2JvdW5kYXJ5KQkvKiBjaGVjayBpZiB0aGUgYWRkaXRpb24gYWJvdmUgZGlkbid0IG92ZXJmbG93ICovCisJCW1heF9zZWdfc2l6ZSA9IG1pbihtYXhfc2VnX3NpemUsIG1heF9zZWdfYm91bmRhcnkpOwogCiAJd2hpbGUgKG5lbnRzID4gMCkgewogCkBAIC0xMzgsMTQgKzE0MiwxMSBAQAogCiAJCQkvKgogCQkJKiogRmlyc3QgbWFrZSBzdXJlIGN1cnJlbnQgZG1hIHN0cmVhbSB3b24ndAotCQkJKiogZXhjZWVkIERNQV9DSFVOS19TSVpFIGlmIHdlIGNvYWxlc2NlIHRoZQorCQkJKiogZXhjZWVkIG1heF9zZWdfc2l6ZSBpZiB3ZSBjb2FsZXNjZSB0aGUKIAkJCSoqIG5leHQgZW50cnkuCiAJCQkqLyAgIAotCQkJaWYodW5saWtlbHkoQUxJR04oZG1hX2xlbiArIGRtYV9vZmZzZXQgKyBzdGFydHNnLT5sZW5ndGgsCi0JCQkJCSAgICBJT1ZQX1NJWkUpID4gRE1BX0NIVU5LX1NJWkUpKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoc3RhcnRzZy0+bGVuZ3RoICsgZG1hX2xlbiA+IG1heF9zZWdfc2l6ZSkKKwkJCWlmICh1bmxpa2VseShBTElHTihkbWFfbGVuICsgZG1hX29mZnNldCArIHN0YXJ0c2ctPmxlbmd0aCwgSU9WUF9TSVpFKSA+CisJCQkJICAgICBtYXhfc2VnX3NpemUpKQogCQkJCWJyZWFrOwogCiAJCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLWFsdGVyYS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWFsdGVyYS5jCmluZGV4IGU1ZGRhMzguLjk5ZGE1NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1hbHRlcmEuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtYWx0ZXJhLmMKQEAgLTU1LDggKzU1LDEwIEBACiAjZGVmaW5lIFRMUF9DRkdfRFcyKGJ1cywgZGV2Zm4sIG9mZnNldCkJXAogCQkJCSgoKGJ1cykgPDwgMjQpIHwgKChkZXZmbikgPDwgMTYpIHwgKG9mZnNldCkpCiAjZGVmaW5lIFRMUF9SRVFfSUQoYnVzLCBkZXZmbikJCSgoKGJ1cykgPDwgOCkgfCAoZGV2Zm4pKQorI2RlZmluZSBUTFBfQ09NUF9TVEFUVVMocykJCSgoKHMpID4+IDEyKSAmIDcpCiAjZGVmaW5lIFRMUF9IRFJfU0laRQkJCTMKICNkZWZpbmUgVExQX0xPT1AJCQk1MDAKKyNkZWZpbmUgUlBfREVWRk4JCQkwCiAKICNkZWZpbmUgSU5UWF9OVU0JCQk0CiAKQEAgLTE2NiwzNCArMTY4LDQxIEBACiAKIHN0YXRpYyBpbnQgdGxwX3JlYWRfcGFja2V0KHN0cnVjdCBhbHRlcmFfcGNpZSAqcGNpZSwgdTMyICp2YWx1ZSkKIHsKLQl1OCBsb29wOworCWludCBpOwogCWJvb2wgc29wID0gMDsKIAl1MzIgY3RybDsKIAl1MzIgcmVnMCwgcmVnMTsKKwl1MzIgY29tcF9zdGF0dXMgPSAxOwogCiAJLyoKIAkgKiBNaW5pbXVtIDIgbG9vcHMgdG8gcmVhZCBUTFAgaGVhZGVycyBhbmQgMSBsb29wIHRvIHJlYWQgZGF0YQogCSAqIHBheWxvYWQuCiAJICovCi0JZm9yIChsb29wID0gMDsgbG9vcCA8IFRMUF9MT09QOyBsb29wKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgVExQX0xPT1A7IGkrKykgewogCQljdHJsID0gY3JhX3JlYWRsKHBjaWUsIFJQX1JYQ1BMX1NUQVRVUyk7CiAJCWlmICgoY3RybCAmIFJQX1JYQ1BMX1NPUCkgfHwgKGN0cmwgJiBSUF9SWENQTF9FT1ApIHx8IHNvcCkgewogCQkJcmVnMCA9IGNyYV9yZWFkbChwY2llLCBSUF9SWENQTF9SRUcwKTsKIAkJCXJlZzEgPSBjcmFfcmVhZGwocGNpZSwgUlBfUlhDUExfUkVHMSk7CiAKLQkJCWlmIChjdHJsICYgUlBfUlhDUExfU09QKQorCQkJaWYgKGN0cmwgJiBSUF9SWENQTF9TT1ApIHsKIAkJCQlzb3AgPSB0cnVlOworCQkJCWNvbXBfc3RhdHVzID0gVExQX0NPTVBfU1RBVFVTKHJlZzEpOworCQkJfQogCiAJCQlpZiAoY3RybCAmIFJQX1JYQ1BMX0VPUCkgeworCQkJCWlmIChjb21wX3N0YXR1cykKKwkJCQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKwogCQkJCWlmICh2YWx1ZSkKIAkJCQkJKnZhbHVlID0gcmVnMDsKKwogCQkJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CiAJCQl9CiAJCX0KIAkJdWRlbGF5KDUpOwogCX0KIAotCXJldHVybiAtRU5PRU5UOworCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiB9CiAKIHN0YXRpYyB2b2lkIHRscF93cml0ZV9wYWNrZXQoc3RydWN0IGFsdGVyYV9wY2llICpwY2llLCB1MzIgKmhlYWRlcnMsCkBAIC0yMzMsNyArMjQyLDcgQEAKIAllbHNlCiAJCWhlYWRlcnNbMF0gPSBUTFBfQ0ZHX0RXMChUTFBfRk1UVFlQRV9DRkdSRDEpOwogCi0JaGVhZGVyc1sxXSA9IFRMUF9DRkdfRFcxKFRMUF9SRVFfSUQocGNpZS0+cm9vdF9idXNfbnIsIGRldmZuKSwKKwloZWFkZXJzWzFdID0gVExQX0NGR19EVzEoVExQX1JFUV9JRChwY2llLT5yb290X2J1c19uciwgUlBfREVWRk4pLAogCQkJCQlUTFBfUkVBRF9UQUcsIGJ5dGVfZW4pOwogCWhlYWRlcnNbMl0gPSBUTFBfQ0ZHX0RXMihidXMsIGRldmZuLCB3aGVyZSk7CiAKQEAgLTI1Myw3ICsyNjIsNyBAQAogCWVsc2UKIAkJaGVhZGVyc1swXSA9IFRMUF9DRkdfRFcwKFRMUF9GTVRUWVBFX0NGR1dSMSk7CiAKLQloZWFkZXJzWzFdID0gVExQX0NGR19EVzEoVExQX1JFUV9JRChwY2llLT5yb290X2J1c19uciwgZGV2Zm4pLAorCWhlYWRlcnNbMV0gPSBUTFBfQ0ZHX0RXMShUTFBfUkVRX0lEKHBjaWUtPnJvb3RfYnVzX25yLCBSUF9ERVZGTiksCiAJCQkJCVRMUF9XUklURV9UQUcsIGJ5dGVfZW4pOwogCWhlYWRlcnNbMl0gPSBUTFBfQ0ZHX0RXMihidXMsIGRldmZuLCB3aGVyZSk7CiAKQEAgLTQ1OCw3ICs0NjcsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGRldi0+b2Zfbm9kZTsKIAogCS8qIFNldHVwIElOVHggKi8KLQlwY2llLT5pcnFfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKG5vZGUsIElOVFhfTlVNLAorCXBjaWUtPmlycV9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIobm9kZSwgSU5UWF9OVU0gKyAxLAogCQkJCQkmaW50eF9kb21haW5fb3BzLCBwY2llKTsKIAlpZiAoIXBjaWUtPmlycV9kb21haW4pIHsKIAkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGEgSU5UeCBJUlEgZG9tYWluXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jCmluZGV4IDU0MGYwNzcuLjAyYTc0NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuYwpAQCAtNDQwLDcgKzQ0MCw2IEBACiAJCQkJCSByZXQsIHBwLT5pbyk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlwcC0+aW9fYmFzZSA9IHBwLT5pby0+c3RhcnQ7CiAJCQlicmVhazsKIAkJY2FzZSBJT1JFU09VUkNFX01FTToKIAkJCXBwLT5tZW0gPSB3aW4tPnJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1oaXNpLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtaGlzaS5jCmluZGV4IDM1NDU3ZWMuLjc3ZjdjNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1oaXNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWhpc2kuYwpAQCAtNjEsNyArNjEsOSBAQAogCQkqdmFsID0gKih1OCBfX2ZvcmNlICopIHdhbGtlcjsKIAllbHNlIGlmIChzaXplID09IDIpCiAJCSp2YWwgPSAqKHUxNiBfX2ZvcmNlICopIHdhbGtlcjsKLQllbHNlIGlmIChzaXplICE9IDQpCisJZWxzZSBpZiAoc2l6ZSA9PSA0KQorCQkqdmFsID0gcmVnX3ZhbDsKKwllbHNlCiAJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CiAKIAlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwpAQCAtMTExLDcgKzExMyw3IEBACiAJLmxpbmtfdXAgPSBoaXNpX3BjaWVfbGlua191cCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGhpc2lfYWRkX3BjaWVfcG9ydChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCwKK3N0YXRpYyBpbnQgaGlzaV9hZGRfcGNpZV9wb3J0KHN0cnVjdCBwY2llX3BvcnQgKnBwLAogCQkJCSAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0OwpAQCAtMTM5LDcgKzE0MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGhpc2lfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBoaXNpX3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgaGlzaV9wY2llICpoaXNpX3BjaWU7CiAJc3RydWN0IHBjaWVfcG9ydCAqcHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IDUzZTQ2MzIuLjdlYWE0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC01NCw3ICs1NCw3IEBACiAJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKIAogCWRvbWFpbiA9IHBjaV9tc2lfZ2V0X2RvbWFpbihkZXYpOwotCWlmIChkb21haW4pCisJaWYgKGRvbWFpbiAmJiBpcnFfZG9tYWluX2lzX2hpZXJhcmNoeShkb21haW4pKQogCQlyZXR1cm4gcGNpX21zaV9kb21haW5fYWxsb2NfaXJxcyhkb21haW4sIGRldiwgbnZlYywgdHlwZSk7CiAKIAlyZXR1cm4gYXJjaF9zZXR1cF9tc2lfaXJxcyhkZXYsIG52ZWMsIHR5cGUpOwpAQCAtNjUsNyArNjUsNyBAQAogCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47CiAKIAlkb21haW4gPSBwY2lfbXNpX2dldF9kb21haW4oZGV2KTsKLQlpZiAoZG9tYWluKQorCWlmIChkb21haW4gJiYgaXJxX2RvbWFpbl9pc19oaWVyYXJjaHkoZG9tYWluKSkKIAkJcGNpX21zaV9kb21haW5fZnJlZV9pcnFzKGRvbWFpbiwgZGV2KTsKIAllbHNlCiAJCWFyY2hfdGVhcmRvd25fbXNpX2lycXMoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCA0NDQ2ZmNiLi5kN2ZmZDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC0xMTQ2LDkgKzExNDYsMjEgQEAKIAlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOwogCXBjaV9kZXYtPm5vX2QzY29sZCA9IGZhbHNlOwogCWVycm9yID0gcG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOwotCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChwbS0+cnVudGltZV9zdXNwZW5kLCBlcnJvcik7Ci0JaWYgKGVycm9yKQorCWlmIChlcnJvcikgeworCQkvKgorCQkgKiAtRUJVU1kgYW5kIC1FQUdBSU4gaXMgdXNlZCB0byByZXF1ZXN0IHRoZSBydW50aW1lIFBNIGNvcmUKKwkJICogdG8gc2NoZWR1bGUgYSBuZXcgc3VzcGVuZCwgc28gbG9nIHRoZSBldmVudCBvbmx5IHdpdGggZGVidWcKKwkJICogbG9nIGxldmVsLgorCQkgKi8KKwkJaWYgKGVycm9yID09IC1FQlVTWSB8fCBlcnJvciA9PSAtRUFHQUlOKQorCQkJZGV2X2RiZyhkZXYsICJjYW4ndCBzdXNwZW5kIG5vdyAoJXBmIHJldHVybmVkICVkKVxuIiwKKwkJCQlwbS0+cnVudGltZV9zdXNwZW5kLCBlcnJvcik7CisJCWVsc2UKKwkJCWRldl9lcnIoZGV2LCAiY2FuJ3Qgc3VzcGVuZCAoJXBmIHJldHVybmVkICVkKVxuIiwKKwkJCQlwbS0+cnVudGltZV9zdXNwZW5kLCBlcnJvcik7CisKIAkJcmV0dXJuIGVycm9yOworCX0KIAlpZiAoIXBjaV9kZXYtPmQzY29sZF9hbGxvd2VkKQogCQlwY2lfZGV2LT5ub19kM2NvbGQgPSB0cnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCmluZGV4IDkyNjE4NjguLmVlYWQ1NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCkBAIC0yMTYsNyArMjE2LDEwIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChub2RlID49IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9vbmxpbmUobm9kZSkpCisJaWYgKChub2RlIDwgMCAmJiBub2RlICE9IE5VTUFfTk9fTk9ERSkgfHwgbm9kZSA+PSBNQVhfTlVNTk9ERVMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5vZGUgIT0gTlVNQV9OT19OT0RFICYmICFub2RlX29ubGluZShub2RlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhZGRfdGFpbnQoVEFJTlRfRklSTVdBUkVfV09SS0FST1VORCwgTE9DS0RFUF9TVElMTF9PSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IGZkMmYwM2YuLmQzOTBmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC0zMzcsNiArMzM3LDQgQEAKIH0KICNlbmRpZgogCi1zdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpwY2lfZmluZF9ob3N0X2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKLQogI2VuZGlmIC8qIERSSVZFUlNfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IGU3MzVjNzIuLmVkYjE5ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtMTY4NSw4ICsxNjg1LDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpicmlkZ2UgPSBwY2lfZ2V0X2hvc3RfYnJpZGdlX2RldmljZShkZXYpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBkZXYtPmRldi5vZl9ub2RlKSB7Ci0JCWlmIChicmlkZ2UtPnBhcmVudCkKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpICYmCisJCWJyaWRnZS0+cGFyZW50ICYmIGJyaWRnZS0+cGFyZW50LT5vZl9ub2RlKSB7CiAJCQlvZl9kbWFfY29uZmlndXJlKCZkZXYtPmRldiwgYnJpZGdlLT5wYXJlbnQtPm9mX25vZGUpOwogCX0gZWxzZSBpZiAoaGFzX2FjcGlfY29tcGFuaW9uKGJyaWRnZSkpIHsKIAkJc3RydWN0IGFjcGlfZGV2aWNlICphZGV2ID0gdG9fYWNwaV9kZXZpY2Vfbm9kZShicmlkZ2UtPmZ3bm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9LY29uZmlnIGIvZHJpdmVycy9waHkvS2NvbmZpZwppbmRleCA3ZWI1ODU5ZC4uMDNjYjNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvS2NvbmZpZworKysgYi9kcml2ZXJzL3BoeS9LY29uZmlnCkBAIC0yMzMsNiArMjMzLDcgQEAKIAl0cmlzdGF0ZSAiQWxsd2lubmVyIHN1bjlpIFNvQyBVU0IgUEhZIGRyaXZlciIKIAlkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgJiYgSEFTX0lPTUVNICYmIE9GCiAJZGVwZW5kcyBvbiBSRVNFVF9DT05UUk9MTEVSCisJZGVwZW5kcyBvbiBVU0JfQ09NTU9OCiAJc2VsZWN0IEdFTkVSSUNfUEhZCiAJaGVscAogCSAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgdHJhbnNjZWl2ZXIgdGhhdCBpcyBwYXJ0IG9mIEFsbHdpbm5lcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LWJjbS1jeWdudXMtcGNpZS5jIGIvZHJpdmVycy9waHkvcGh5LWJjbS1jeWdudXMtcGNpZS5jCmluZGV4IDdhZDcyYjcuLjA4MmMwM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L3BoeS1iY20tY3lnbnVzLXBjaWUuYworKysgYi9kcml2ZXJzL3BoeS9waHktYmNtLWN5Z251cy1wY2llLmMKQEAgLTEyOCw2ICsxMjgsNyBAQAogCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnByb3ZpZGVyOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXVuc2lnbmVkIGNudCA9IDA7CisJaW50IHJldDsKIAogCWlmIChvZl9nZXRfY2hpbGRfY291bnQobm9kZSkgPT0gMCkgewogCQlkZXZfZXJyKGRldiwgIlBIWSBubyBjaGlsZCBub2RlXG4iKTsKQEAgLTE1NCwyNCArMTU1LDI4IEBACiAJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgInJlZyIsICZpZCkpIHsKIAkJCWRldl9lcnIoZGV2LCAibWlzc2luZyByZWcgcHJvcGVydHkgZm9yICVzXG4iLAogCQkJCWNoaWxkLT5uYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gcHV0X2NoaWxkOwogCQl9CiAKIAkJaWYgKGlkID49IE1BWF9OVU1fUEhZUykgewogCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIFBIWSBpZDogJXVcbiIsIGlkKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gcHV0X2NoaWxkOwogCQl9CiAKIAkJaWYgKGNvcmUtPnBoeXNbaWRdLnBoeSkgewogCQkJZGV2X2VycihkZXYsICJkdXBsaWNhdGVkIFBIWSBpZDogJXVcbiIsIGlkKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gcHV0X2NoaWxkOwogCQl9CiAKIAkJcCA9ICZjb3JlLT5waHlzW2lkXTsKIAkJcC0+cGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwgY2hpbGQsICZjeWdudXNfcGNpZV9waHlfb3BzKTsKIAkJaWYgKElTX0VSUihwLT5waHkpKSB7CiAJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgUEhZXG4iKTsKLQkJCXJldHVybiBQVFJfRVJSKHAtPnBoeSk7CisJCQlyZXQgPSBQVFJfRVJSKHAtPnBoeSk7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAkJfQogCiAJCXAtPmNvcmUgPSBjb3JlOwpAQCAtMTkxLDYgKzE5Niw5IEBACiAJZGV2X2RiZyhkZXYsICJyZWdpc3RlcmVkICV1IFBDSWUgUEhZKHMpXG4iLCBjbnQpOwogCiAJcmV0dXJuIDA7CitwdXRfY2hpbGQ6CisJb2Zfbm9kZV9wdXQoY2hpbGQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGN5Z251c19wY2llX3BoeV9tYXRjaF90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LWJlcmxpbi1zYXRhLmMgYi9kcml2ZXJzL3BoeS9waHktYmVybGluLXNhdGEuYwppbmRleCA3N2EyZTA1Li5mODRhMzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktYmVybGluLXNhdGEuYworKysgYi9kcml2ZXJzL3BoeS9waHktYmVybGluLXNhdGEuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJc3RydWN0IHBoeV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOwogCXN0cnVjdCBwaHlfYmVybGluX3ByaXYgKnByaXY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IGkgPSAwOworCWludCByZXQsIGkgPSAwOwogCXUzMiBwaHlfaWQ7CiAKIAlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CkBAIC0yMzcsMjIgKzIzNywyNyBAQAogCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJyZWciLCAmcGh5X2lkKSkgewogCQkJZGV2X2VycihkZXYsICJtaXNzaW5nIHJlZyBwcm9wZXJ0eSBpbiBub2RlICVzXG4iLAogCQkJCWNoaWxkLT5uYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gcHV0X2NoaWxkOwogCQl9CiAKIAkJaWYgKHBoeV9pZCA+PSBBUlJBWV9TSVpFKHBoeV9iZXJsaW5fcG93ZXJfZG93bl9iaXRzKSkgewogCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJlZyBpbiBub2RlICVzXG4iLCBjaGlsZC0+bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAkJfQogCiAJCXBoeV9kZXNjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwaHlfZGVzYyksIEdGUF9LRVJORUwpOwotCQlpZiAoIXBoeV9kZXNjKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCWlmICghcGh5X2Rlc2MpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIHB1dF9jaGlsZDsKKwkJfQogCiAJCXBoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIE5VTEwsICZwaHlfYmVybGluX3NhdGFfb3BzKTsKIAkJaWYgKElTX0VSUihwaHkpKSB7CiAJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgUEhZICVkXG4iLCBwaHlfaWQpOwotCQkJcmV0dXJuIFBUUl9FUlIocGh5KTsKKwkJCXJldCA9IFBUUl9FUlIocGh5KTsKKwkJCWdvdG8gcHV0X2NoaWxkOwogCQl9CiAKIAkJcGh5X2Rlc2MtPnBoeSA9IHBoeTsKQEAgLTI2OSw2ICsyNzQsOSBAQAogCXBoeV9wcm92aWRlciA9CiAJCWRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgcGh5X2Jlcmxpbl9zYXRhX3BoeV94bGF0ZSk7CiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwaHlfcHJvdmlkZXIpOworcHV0X2NoaWxkOgorCW9mX25vZGVfcHV0KGNoaWxkKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwaHlfYmVybGluX3NhdGFfb2ZfbWF0Y2hbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1icmNtc3RiLXNhdGEuYyBiL2RyaXZlcnMvcGh5L3BoeS1icmNtc3RiLXNhdGEuYwppbmRleCA4YTJjYjE2Li5jZDlkYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktYnJjbXN0Yi1zYXRhLmMKKysrIGIvZHJpdmVycy9waHkvcGh5LWJyY21zdGItc2F0YS5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAlzdHJ1Y3QgYnJjbV9zYXRhX3BoeSAqcHJpdjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwcm92aWRlcjsKLQlpbnQgY291bnQgPSAwOworCWludCByZXQsIGNvdW50ID0gMDsKIAogCWlmIChvZl9nZXRfY2hpbGRfY291bnQoZG4pID09IDApCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTYzLDE2ICsxNjMsMTkgQEAKIAkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAicmVnIiwgJmlkKSkgewogCQkJZGV2X2VycihkZXYsICJtaXNzaW5nIHJlZyBwcm9wZXJ0eSBpbiBub2RlICVzXG4iLAogCQkJCQljaGlsZC0+bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAkJfQogCiAJCWlmIChpZCA+PSBNQVhfUE9SVFMpIHsKIAkJCWRldl9lcnIoZGV2LCAiaW52YWxpZCByZWc6ICV1XG4iLCBpZCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAkJfQogCQlpZiAocHJpdi0+cGh5c1tpZF0ucGh5KSB7CiAJCQlkZXZfZXJyKGRldiwgImFscmVhZHkgcmVnaXN0ZXJlZCBwb3J0ICV1XG4iLCBpZCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAkJfQogCiAJCXBvcnQgPSAmcHJpdi0+cGh5c1tpZF07CkBAIC0xODIsNyArMTg1LDggQEAKIAkJcG9ydC0+c3NjX2VuID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKGNoaWxkLCAiYnJjbSxlbmFibGUtc3NjIik7CiAJCWlmIChJU19FUlIocG9ydC0+cGh5KSkgewogCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIFBIWVxuIik7Ci0JCQlyZXR1cm4gUFRSX0VSUihwb3J0LT5waHkpOworCQkJcmV0ID0gUFRSX0VSUihwb3J0LT5waHkpOworCQkJZ290byBwdXRfY2hpbGQ7CiAJCX0KIAogCQlwaHlfc2V0X2RydmRhdGEocG9ydC0+cGh5LCBwb3J0KTsKQEAgLTE5OCw2ICsyMDIsOSBAQAogCWRldl9pbmZvKGRldiwgInJlZ2lzdGVyZWQgJWQgcG9ydChzKVxuIiwgY291bnQpOwogCiAJcmV0dXJuIDA7CitwdXRfY2hpbGQ6CisJb2Zfbm9kZV9wdXQoY2hpbGQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJyY21fc2F0YV9waHlfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LWNvcmUuYyBiL2RyaXZlcnMvcGh5L3BoeS1jb3JlLmMKaW5kZXggZmM0OGZhYy4uOGM3ZjI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcGh5LWNvcmUuYworKysgYi9kcml2ZXJzL3BoeS9waHktY29yZS5jCkBAIC02MzYsOCArNjM2LDkgQEAKICAqIEBucDogbm9kZSBjb250YWluaW5nIHRoZSBwaHkKICAqIEBpbmRleDogaW5kZXggb2YgdGhlIHBoeQogICoKLSAqIEdldHMgdGhlIHBoeSB1c2luZyBfb2ZfcGh5X2dldCgpLCBhbmQgYXNzb2NpYXRlcyBhIGRldmljZSB3aXRoIGl0IHVzaW5nCi0gKiBkZXZyZXMuIE9uIGRyaXZlciBkZXRhY2gsIHJlbGVhc2UgZnVuY3Rpb24gaXMgaW52b2tlZCBvbiB0aGUgZGV2cmVzIGRhdGEsCisgKiBHZXRzIHRoZSBwaHkgdXNpbmcgX29mX3BoeV9nZXQoKSwgdGhlbiBnZXRzIGEgcmVmY291bnQgdG8gaXQsCisgKiBhbmQgYXNzb2NpYXRlcyBhIGRldmljZSB3aXRoIGl0IHVzaW5nIGRldnJlcy4gT24gZHJpdmVyIGRldGFjaCwKKyAqIHJlbGVhc2UgZnVuY3Rpb24gaXMgaW52b2tlZCBvbiB0aGUgZGV2cmVzIGRhdGEsCiAgKiB0aGVuLCBkZXZyZXMgZGF0YSBpcyBmcmVlZC4KICAqCiAgKi8KQEAgLTY1MSwxMyArNjUyLDIxIEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJcGh5ID0gX29mX3BoeV9nZXQobnAsIGluZGV4KTsKLQlpZiAoIUlTX0VSUihwaHkpKSB7Ci0JCSpwdHIgPSBwaHk7Ci0JCWRldnJlc19hZGQoZGV2LCBwdHIpOwotCX0gZWxzZSB7CisJaWYgKElTX0VSUihwaHkpKSB7CiAJCWRldnJlc19mcmVlKHB0cik7CisJCXJldHVybiBwaHk7CiAJfQogCisJaWYgKCF0cnlfbW9kdWxlX2dldChwaHktPm9wcy0+b3duZXIpKSB7CisJCWRldnJlc19mcmVlKHB0cik7CisJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCX0KKworCWdldF9kZXZpY2UoJnBoeS0+ZGV2KTsKKworCSpwdHIgPSBwaHk7CisJZGV2cmVzX2FkZChkZXYsIHB0cik7CisKIAlyZXR1cm4gcGh5OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9waHlfZ2V0X2J5X2luZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1taXBoeTI4bHAuYyBiL2RyaXZlcnMvcGh5L3BoeS1taXBoeTI4bHAuYwppbmRleCBjNDdiNTZiLi4zYWNkMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktbWlwaHkyOGxwLmMKKysrIGIvZHJpdmVycy9waHkvcGh5LW1pcGh5MjhscC5jCkBAIC0xMjI2LDE1ICsxMjI2LDE4IEBACiAKIAkJbWlwaHlfcGh5ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbWlwaHlfcGh5KSwKIAkJCQkJIEdGUF9LRVJORUwpOwotCQlpZiAoIW1pcGh5X3BoeSkKLQkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoIW1pcGh5X3BoeSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gcHV0X2NoaWxkOworCQl9CiAKIAkJbWlwaHlfZGV2LT5waHlzW3BvcnRdID0gbWlwaHlfcGh5OwogCiAJCXBoeSA9IGRldm1fcGh5X2NyZWF0ZSgmcGRldi0+ZGV2LCBjaGlsZCwgJm1pcGh5MjhscF9vcHMpOwogCQlpZiAoSVNfRVJSKHBoeSkpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgUEhZXG4iKTsKLQkJCXJldHVybiBQVFJfRVJSKHBoeSk7CisJCQlyZXQgPSBQVFJfRVJSKHBoeSk7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAkJfQogCiAJCW1pcGh5X2Rldi0+cGh5c1twb3J0XS0+cGh5ID0gcGh5OwpAQCAtMTI0MiwxMSArMTI0NSwxMSBAQAogCiAJCXJldCA9IG1pcGh5MjhscF9vZl9wcm9iZShjaGlsZCwgbWlwaHlfcGh5KTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAogCQlyZXQgPSBtaXBoeTI4bHBfcHJvYmVfcmVzZXRzKGNoaWxkLCBtaXBoeV9kZXYtPnBoeXNbcG9ydF0pOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gcHV0X2NoaWxkOwogCiAJCXBoeV9zZXRfZHJ2ZGF0YShwaHksIG1pcGh5X2Rldi0+cGh5c1twb3J0XSk7CiAJCXBvcnQrKzsKQEAgLTEyNTUsNiArMTI1OCw5IEBACiAKIAlwcm92aWRlciA9IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIG1pcGh5MjhscF94bGF0ZSk7CiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwcm92aWRlcik7CitwdXRfY2hpbGQ6CisJb2Zfbm9kZV9wdXQoY2hpbGQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1pcGh5MjhscF9vZl9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LW1pcGh5MzY1eC5jIGIvZHJpdmVycy9waHkvcGh5LW1pcGh5MzY1eC5jCmluZGV4IDAwYTY4NmEuLmU2NjFmM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L3BoeS1taXBoeTM2NXguYworKysgYi9kcml2ZXJzL3BoeS9waHktbWlwaHkzNjV4LmMKQEAgLTU2NiwyMiArNTY2LDI1IEBACiAKIAkJbWlwaHlfcGh5ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbWlwaHlfcGh5KSwKIAkJCQkJIEdGUF9LRVJORUwpOwotCQlpZiAoIW1pcGh5X3BoeSkKLQkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoIW1pcGh5X3BoeSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gcHV0X2NoaWxkOworCQl9CiAKIAkJbWlwaHlfZGV2LT5waHlzW3BvcnRdID0gbWlwaHlfcGh5OwogCiAJCXBoeSA9IGRldm1fcGh5X2NyZWF0ZSgmcGRldi0+ZGV2LCBjaGlsZCwgJm1pcGh5MzY1eF9vcHMpOwogCQlpZiAoSVNfRVJSKHBoeSkpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgUEhZXG4iKTsKLQkJCXJldHVybiBQVFJfRVJSKHBoeSk7CisJCQlyZXQgPSBQVFJfRVJSKHBoeSk7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAkJfQogCiAJCW1pcGh5X2Rldi0+cGh5c1twb3J0XS0+cGh5ID0gcGh5OwogCiAJCXJldCA9IG1pcGh5MzY1eF9vZl9wcm9iZShjaGlsZCwgbWlwaHlfcGh5KTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAogCQlwaHlfc2V0X2RydmRhdGEocGh5LCBtaXBoeV9kZXYtPnBoeXNbcG9ydF0pOwogCkBAIC01OTEsMTIgKzU5NCwxNSBAQAogCQkJCQkmbWlwaHlfcGh5LT5jdHJscmVnKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gc3lzY29uZmlnIG9mZnNldCBmb3VuZFxuIik7Ci0JCQlyZXR1cm4gcmV0OworCQkJZ290byBwdXRfY2hpbGQ7CiAJCX0KIAl9CiAKIAlwcm92aWRlciA9IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIG1pcGh5MzY1eF94bGF0ZSk7CiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwcm92aWRlcik7CitwdXRfY2hpbGQ6CisJb2Zfbm9kZV9wdXQoY2hpbGQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1pcGh5MzY1eF9vZl9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LW10NjV4eC11c2IzLmMgYi9kcml2ZXJzL3BoeS9waHktbXQ2NXh4LXVzYjMuYwppbmRleCBmMzBiMjhiLi5lNDI3YzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktbXQ2NXh4LXVzYjMuYworKysgYi9kcml2ZXJzL3BoeS9waHktbXQ2NXh4LXVzYjMuYwpAQCAtNDE1LDcgKzQxNSw3IEBACiAJc3RydWN0IHJlc291cmNlICpzaWZfcmVzOwogCXN0cnVjdCBtdDY1eHhfdTNwaHkgKnUzcGh5OwogCXN0cnVjdCByZXNvdXJjZSByZXM7Ci0JaW50IHBvcnQ7CisJaW50IHBvcnQsIHJldHZhbDsKIAogCXUzcGh5ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp1M3BoeSksIEdGUF9LRVJORUwpOwogCWlmICghdTNwaHkpCkBAIC00NDcsMzEgKzQ0NywzNCBAQAogCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkX25wKSB7CiAJCXN0cnVjdCBtdDY1eHhfcGh5X2luc3RhbmNlICppbnN0YW5jZTsKIAkJc3RydWN0IHBoeSAqcGh5OwotCQlpbnQgcmV0dmFsOwogCiAJCWluc3RhbmNlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppbnN0YW5jZSksIEdGUF9LRVJORUwpOwotCQlpZiAoIWluc3RhbmNlKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCWlmICghaW5zdGFuY2UpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIHB1dF9jaGlsZDsKKwkJfQogCiAJCXUzcGh5LT5waHlzW3BvcnRdID0gaW5zdGFuY2U7CiAKIAkJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwgY2hpbGRfbnAsICZtdDY1eHhfdTNwaHlfb3BzKTsKIAkJaWYgKElTX0VSUihwaHkpKSB7CiAJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgcGh5XG4iKTsKLQkJCXJldHVybiBQVFJfRVJSKHBoeSk7CisJCQlyZXR2YWwgPSBQVFJfRVJSKHBoeSk7CisJCQlnb3RvIHB1dF9jaGlsZDsKIAkJfQogCiAJCXJldHZhbCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoY2hpbGRfbnAsIDAsICZyZXMpOwogCQlpZiAocmV0dmFsKSB7CiAJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgYWRkcmVzcyByZXNvdXJjZShpZC0lZClcbiIsCiAJCQkJcG9ydCk7Ci0JCQlyZXR1cm4gcmV0dmFsOworCQkJZ290byBwdXRfY2hpbGQ7CiAJCX0KIAogCQlpbnN0YW5jZS0+cG9ydF9iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwaHktPmRldiwgJnJlcyk7CiAJCWlmIChJU19FUlIoaW5zdGFuY2UtPnBvcnRfYmFzZSkpIHsKIAkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlbWFwIHBoeSByZWdzXG4iKTsKLQkJCXJldHVybiBQVFJfRVJSKGluc3RhbmNlLT5wb3J0X2Jhc2UpOworCQkJcmV0dmFsID0gUFRSX0VSUihpbnN0YW5jZS0+cG9ydF9iYXNlKTsKKwkJCWdvdG8gcHV0X2NoaWxkOwogCQl9CiAKIAkJaW5zdGFuY2UtPnBoeSA9IHBoeTsKQEAgLTQ4Myw2ICs0ODYsOSBAQAogCXByb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBtdDY1eHhfcGh5X3hsYXRlKTsKIAogCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocHJvdmlkZXIpOworcHV0X2NoaWxkOgorCW9mX25vZGVfcHV0KGNoaWxkX25wKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDY1eHhfdTNwaHlfaWRfdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1yb2NrY2hpcC11c2IuYyBiL2RyaXZlcnMvcGh5L3BoeS1yb2NrY2hpcC11c2IuYwppbmRleCA5MWQ2ZjM0Li42MmM0M2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktcm9ja2NoaXAtdXNiLmMKKysrIGIvZHJpdmVycy9waHkvcGh5LXJvY2tjaGlwLXVzYi5jCkBAIC0xMDgsMTMgKzEwOCwxNiBAQAogCiAJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLCBjaGlsZCkgewogCQlya19waHkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnJrX3BoeSksIEdGUF9LRVJORUwpOwotCQlpZiAoIXJrX3BoeSkKLQkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoIXJrX3BoeSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gcHV0X2NoaWxkOworCQl9CiAKIAkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAicmVnIiwgJnJlZ19vZmZzZXQpKSB7CiAJCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgcmVnIHByb3BlcnR5IGluIG5vZGUgJXNcbiIsCiAJCQkJY2hpbGQtPm5hbWUpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBwdXRfY2hpbGQ7CiAJCX0KIAogCQlya19waHktPnJlZ19vZmZzZXQgPSByZWdfb2Zmc2V0OwpAQCAtMTI3LDE4ICsxMzAsMjIgQEAKIAkJcmtfcGh5LT5waHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCBjaGlsZCwgJm9wcyk7CiAJCWlmIChJU19FUlIocmtfcGh5LT5waHkpKSB7CiAJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgUEhZXG4iKTsKLQkJCXJldHVybiBQVFJfRVJSKHJrX3BoeS0+cGh5KTsKKwkJCWVyciA9IFBUUl9FUlIocmtfcGh5LT5waHkpOworCQkJZ290byBwdXRfY2hpbGQ7CiAJCX0KIAkJcGh5X3NldF9kcnZkYXRhKHJrX3BoeS0+cGh5LCBya19waHkpOwogCiAJCS8qIG9ubHkgcG93ZXIgdXAgdXNiIHBoeSB3aGVuIGl0IHVzZSwgc28gZGlzYWJsZSBpdCB3aGVuIGluaXQqLwogCQllcnIgPSByb2NrY2hpcF91c2JfcGh5X3Bvd2VyKHJrX3BoeSwgMSk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byBwdXRfY2hpbGQ7CiAJfQogCiAJcGh5X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBvZl9waHlfc2ltcGxlX3hsYXRlKTsKIAlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBoeV9wcm92aWRlcik7CitwdXRfY2hpbGQ6CisJb2Zfbm9kZV9wdXQoY2hpbGQpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJvY2tjaGlwX3VzYl9waHlfZHRfaWRzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvS2NvbmZpZyBiL2RyaXZlcnMvcGluY3RybC9LY29uZmlnCmluZGV4IGI0MjJlNGUuLjMxMmM3OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGluY3RybC9LY29uZmlnCkBAIC01LDggKzUsNiBAQAogY29uZmlnIFBJTkNUUkwKIAlib29sCiAKLWlmIFBJTkNUUkwKLQogbWVudSAiUGluIGNvbnRyb2xsZXJzIgogCWRlcGVuZHMgb24gUElOQ1RSTAogCkBAIC0yNzQsNSArMjcyLDMgQEAKIAlzZWxlY3QgR1BJT0xJQgogCiBlbmRtZW51Ci0KLWVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtYmNtMjgzNS5jIGIvZHJpdmVycy9waW5jdHJsL2JjbS9waW5jdHJsLWJjbTI4MzUuYwppbmRleCBhMWVhNTY1Li4yZTZjYTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvYmNtL3BpbmN0cmwtYmNtMjgzNS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9iY20vcGluY3RybC1iY20yODM1LmMKQEAgLTM0MiwxMiArMzQyLDYgQEAKIAlyZXR1cm4gYmNtMjgzNV9ncGlvX2dldF9iaXQocGMsIEdQTEVWMCwgb2Zmc2V0KTsKIH0KIAotc3RhdGljIGludCBiY20yODM1X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQlyZXR1cm4gcGluY3RybF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoY2hpcC0+YmFzZSArIG9mZnNldCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGJjbTI4MzVfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IGJjbTI4MzVfcGluY3RybCAqcGMgPSBkZXZfZ2V0X2RydmRhdGEoY2hpcC0+ZGV2KTsKQEAgLTM1NSw2ICszNDksMTMgQEAKIAliY20yODM1X2dwaW9fc2V0X2JpdChwYywgdmFsdWUgPyBHUFNFVDAgOiBHUENMUjAsIG9mZnNldCk7CiB9CiAKK3N0YXRpYyBpbnQgYmNtMjgzNV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJYmNtMjgzNV9ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwlyZXR1cm4gcGluY3RybF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoY2hpcC0+YmFzZSArIG9mZnNldCk7Cit9CisKIHN0YXRpYyBpbnQgYmNtMjgzNV9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJc3RydWN0IGJjbTI4MzVfcGluY3RybCAqcGMgPSBkZXZfZ2V0X2RydmRhdGEoY2hpcC0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9mcmVlc2NhbGUvcGluY3RybC1pbXgxLWNvcmUuYyBiL2RyaXZlcnMvcGluY3RybC9mcmVlc2NhbGUvcGluY3RybC1pbXgxLWNvcmUuYwppbmRleCA4OGE3ZmFjLi5hY2FmODRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvZnJlZXNjYWxlL3BpbmN0cmwtaW14MS1jb3JlLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL2ZyZWVzY2FsZS9waW5jdHJsLWlteDEtY29yZS5jCkBAIC01MzgsOCArNTM4LDEwIEBACiAJCWZ1bmMtPmdyb3Vwc1tpXSA9IGNoaWxkLT5uYW1lOwogCQlncnAgPSAmaW5mby0+Z3JvdXBzW2dycF9pbmRleCsrXTsKIAkJcmV0ID0gaW14MV9waW5jdHJsX3BhcnNlX2dyb3VwcyhjaGlsZCwgZ3JwLCBpbmZvLCBpKyspOwotCQlpZiAocmV0ID09IC1FTk9NRU0pCisJCWlmIChyZXQgPT0gLUVOT01FTSkgeworCQkJb2Zfbm9kZV9wdXQoY2hpbGQpOwogCQkJcmV0dXJuIHJldDsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNTgyLDggKzU4NCwxMCBAQAogCiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKIAkJcmV0ID0gaW14MV9waW5jdHJsX3BhcnNlX2Z1bmN0aW9ucyhjaGlsZCwgaW5mbywgaWZ1bmMrKyk7Ci0JCWlmIChyZXQgPT0gLUVOT01FTSkKKwkJaWYgKHJldCA9PSAtRU5PTUVNKSB7CisJCQlvZl9ub2RlX3B1dChjaGlsZCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2ZyZWVzY2FsZS9waW5jdHJsLXZmNjEwLmMgYi9kcml2ZXJzL3BpbmN0cmwvZnJlZXNjYWxlL3BpbmN0cmwtdmY2MTAuYwppbmRleCAzN2EwMzc1Li41ODdkMWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvZnJlZXNjYWxlL3BpbmN0cmwtdmY2MTAuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvZnJlZXNjYWxlL3BpbmN0cmwtdmY2MTAuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiBzdGF0aWMgc3RydWN0IGlteF9waW5jdHJsX3NvY19pbmZvIHZmNjEwX3BpbmN0cmxfaW5mbyA9IHsKIAkucGlucyA9IHZmNjEwX3BpbmN0cmxfcGFkcywKIAkubnBpbnMgPSBBUlJBWV9TSVpFKHZmNjEwX3BpbmN0cmxfcGFkcyksCi0JLmZsYWdzID0gU0hBUkVfTVVYX0NPTkZfUkVHLAorCS5mbGFncyA9IFNIQVJFX01VWF9DT05GX1JFRyB8IFpFUk9fT0ZGU0VUX1ZBTElELAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmY2MTBfcGluY3RybF9vZl9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL2ludGVsL3BpbmN0cmwtYnJveHRvbi5jIGIvZHJpdmVycy9waW5jdHJsL2ludGVsL3BpbmN0cmwtYnJveHRvbi5jCmluZGV4IGU0MmQ1ZDQuLjU5NzlkMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9pbnRlbC9waW5jdHJsLWJyb3h0b24uYworKysgYi9kcml2ZXJzL3BpbmN0cmwvaW50ZWwvcGluY3RybC1icm94dG9uLmMKQEAgLTI4LDYgKzI4LDcgQEAKIAkJLnBhZGNmZ2xvY2tfb2Zmc2V0ID0gQlhUX1BBRENGR0xPQ0ssCVwKIAkJLmhvc3Rvd25fb2Zmc2V0ID0gQlhUX0hPU1RTV19PV04sCVwKIAkJLmllX29mZnNldCA9IEJYVF9HUElfSUUsCQlcCisJCS5ncHBfc2l6ZSA9IDMyLCAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCS5waW5fYmFzZSA9IChzKSwJCQlcCiAJCS5ucGlucyA9ICgoZSkgLSAocykgKyAxKSwJCVwKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvaW50ZWwvcGluY3RybC1pbnRlbC5jIGIvZHJpdmVycy9waW5jdHJsL2ludGVsL3BpbmN0cmwtaW50ZWwuYwppbmRleCAzOTJlMjhkLi4yNmY2YjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvaW50ZWwvcGluY3RybC1pbnRlbC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9pbnRlbC9waW5jdHJsLWludGVsLmMKQEAgLTI1LDkgKzI1LDYgQEAKIAogI2luY2x1ZGUgInBpbmN0cmwtaW50ZWwuaCIKIAotLyogTWF4aW11bSBudW1iZXIgb2YgcGFkcyBpbiBlYWNoIGdyb3VwICovCi0jZGVmaW5lIE5QQURTX0lOX0dQUAkJCTI0Ci0KIC8qIE9mZnNldCBmcm9tIHJlZ3MgKi8KICNkZWZpbmUgUEFEQkFSCQkJCTB4MDBjCiAjZGVmaW5lIEdQSV9JUwkJCQkweDEwMApAQCAtMzcsNiArMzQsNyBAQAogI2RlZmluZSBQQURPV05fQklUUwkJCTQKICNkZWZpbmUgUEFET1dOX1NISUZUKHApCQkJKChwKSAlIDggKiBQQURPV05fQklUUykKICNkZWZpbmUgUEFET1dOX01BU0socCkJCQkoMHhmIDw8IFBBRE9XTl9TSElGVChwKSkKKyNkZWZpbmUgUEFET1dOX0dQUChwKQkJCSgocCkgLyA4KQogCiAvKiBPZmZzZXQgZnJvbSBwYWRfcmVncyAqLwogI2RlZmluZSBQQURDRkcwCQkJCTB4MDAwCkBAIC0xNDIsNyArMTQwLDcgQEAKIHN0YXRpYyBib29sIGludGVsX3BhZF9vd25lZF9ieV9ob3N0KHN0cnVjdCBpbnRlbF9waW5jdHJsICpwY3RybCwgdW5zaWduZWQgcGluKQogewogCWNvbnN0IHN0cnVjdCBpbnRlbF9jb21tdW5pdHkgKmNvbW11bml0eTsKLQl1bnNpZ25lZCBwYWRubywgZ3BwLCBncHBfb2Zmc2V0LCBvZmZzZXQ7CisJdW5zaWduZWQgcGFkbm8sIGdwcCwgb2Zmc2V0LCBncm91cDsKIAl2b2lkIF9faW9tZW0gKnBhZG93bjsKIAogCWNvbW11bml0eSA9IGludGVsX2dldF9jb21tdW5pdHkocGN0cmwsIHBpbik7CkBAIC0xNTIsOSArMTUwLDkgQEAKIAkJcmV0dXJuIHRydWU7CiAKIAlwYWRubyA9IHBpbl90b19wYWRubyhjb21tdW5pdHksIHBpbik7Ci0JZ3BwID0gcGFkbm8gLyBOUEFEU19JTl9HUFA7Ci0JZ3BwX29mZnNldCA9IHBhZG5vICUgTlBBRFNfSU5fR1BQOwotCW9mZnNldCA9IGNvbW11bml0eS0+cGFkb3duX29mZnNldCArIGdwcCAqIDE2ICsgKGdwcF9vZmZzZXQgLyA4KSAqIDQ7CisJZ3JvdXAgPSBwYWRubyAvIGNvbW11bml0eS0+Z3BwX3NpemU7CisJZ3BwID0gUEFET1dOX0dQUChwYWRubyAlIGNvbW11bml0eS0+Z3BwX3NpemUpOworCW9mZnNldCA9IGNvbW11bml0eS0+cGFkb3duX29mZnNldCArIDB4MTAgKiBncm91cCArIGdwcCAqIDQ7CiAJcGFkb3duID0gY29tbXVuaXR5LT5yZWdzICsgb2Zmc2V0OwogCiAJcmV0dXJuICEocmVhZGwocGFkb3duKSAmIFBBRE9XTl9NQVNLKHBhZG5vKSk7CkBAIC0xNzMsMTEgKzE3MSwxMSBAQAogCQlyZXR1cm4gZmFsc2U7CiAKIAlwYWRubyA9IHBpbl90b19wYWRubyhjb21tdW5pdHksIHBpbik7Ci0JZ3BwID0gcGFkbm8gLyBOUEFEU19JTl9HUFA7CisJZ3BwID0gcGFkbm8gLyBjb21tdW5pdHktPmdwcF9zaXplOwogCW9mZnNldCA9IGNvbW11bml0eS0+aG9zdG93bl9vZmZzZXQgKyBncHAgKiA0OwogCWhvc3Rvd24gPSBjb21tdW5pdHktPnJlZ3MgKyBvZmZzZXQ7CiAKLQlyZXR1cm4gIShyZWFkbChob3N0b3duKSAmIEJJVChwYWRubyAlIE5QQURTX0lOX0dQUCkpOworCXJldHVybiAhKHJlYWRsKGhvc3Rvd24pICYgQklUKHBhZG5vICUgY29tbXVuaXR5LT5ncHBfc2l6ZSkpOwogfQogCiBzdGF0aWMgYm9vbCBpbnRlbF9wYWRfbG9ja2VkKHN0cnVjdCBpbnRlbF9waW5jdHJsICpwY3RybCwgdW5zaWduZWQgcGluKQpAQCAtMTkzLDcgKzE5MSw3IEBACiAJCXJldHVybiBmYWxzZTsKIAogCXBhZG5vID0gcGluX3RvX3BhZG5vKGNvbW11bml0eSwgcGluKTsKLQlncHAgPSBwYWRubyAvIE5QQURTX0lOX0dQUDsKKwlncHAgPSBwYWRubyAvIGNvbW11bml0eS0+Z3BwX3NpemU7CiAKIAkvKgogCSAqIElmIFBBRENGR0xPQ0sgYW5kIFBBRENGR0xPQ0tUWCBiaXRzIGFyZSBib3RoIGNsZWFyIGZvciB0aGlzIHBhZCwKQEAgLTIwMiwxMiArMjAwLDEyIEBACiAJICovCiAJb2Zmc2V0ID0gY29tbXVuaXR5LT5wYWRjZmdsb2NrX29mZnNldCArIGdwcCAqIDg7CiAJdmFsdWUgPSByZWFkbChjb21tdW5pdHktPnJlZ3MgKyBvZmZzZXQpOwotCWlmICh2YWx1ZSAmIEJJVChwaW4gJSBOUEFEU19JTl9HUFApKQorCWlmICh2YWx1ZSAmIEJJVChwaW4gJSBjb21tdW5pdHktPmdwcF9zaXplKSkKIAkJcmV0dXJuIHRydWU7CiAKIAlvZmZzZXQgPSBjb21tdW5pdHktPnBhZGNmZ2xvY2tfb2Zmc2V0ICsgNCArIGdwcCAqIDg7CiAJdmFsdWUgPSByZWFkbChjb21tdW5pdHktPnJlZ3MgKyBvZmZzZXQpOwotCWlmICh2YWx1ZSAmIEJJVChwaW4gJSBOUEFEU19JTl9HUFApKQorCWlmICh2YWx1ZSAmIEJJVChwaW4gJSBjb21tdW5pdHktPmdwcF9zaXplKSkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC02NjMsOCArNjYxLDggQEAKIAljb21tdW5pdHkgPSBpbnRlbF9nZXRfY29tbXVuaXR5KHBjdHJsLCBwaW4pOwogCWlmIChjb21tdW5pdHkpIHsKIAkJdW5zaWduZWQgcGFkbm8gPSBwaW5fdG9fcGFkbm8oY29tbXVuaXR5LCBwaW4pOwotCQl1bnNpZ25lZCBncHBfb2Zmc2V0ID0gcGFkbm8gJSBOUEFEU19JTl9HUFA7Ci0JCXVuc2lnbmVkIGdwcCA9IHBhZG5vIC8gTlBBRFNfSU5fR1BQOworCQl1bnNpZ25lZCBncHBfb2Zmc2V0ID0gcGFkbm8gJSBjb21tdW5pdHktPmdwcF9zaXplOworCQl1bnNpZ25lZCBncHAgPSBwYWRubyAvIGNvbW11bml0eS0+Z3BwX3NpemU7CiAKIAkJd3JpdGVsKEJJVChncHBfb2Zmc2V0KSwgY29tbXVuaXR5LT5yZWdzICsgR1BJX0lTICsgZ3BwICogNCk7CiAJfQpAQCAtNjg1LDggKzY4Myw4IEBACiAJY29tbXVuaXR5ID0gaW50ZWxfZ2V0X2NvbW11bml0eShwY3RybCwgcGluKTsKIAlpZiAoY29tbXVuaXR5KSB7CiAJCXVuc2lnbmVkIHBhZG5vID0gcGluX3RvX3BhZG5vKGNvbW11bml0eSwgcGluKTsKLQkJdW5zaWduZWQgZ3BwX29mZnNldCA9IHBhZG5vICUgTlBBRFNfSU5fR1BQOwotCQl1bnNpZ25lZCBncHAgPSBwYWRubyAvIE5QQURTX0lOX0dQUDsKKwkJdW5zaWduZWQgZ3BwX29mZnNldCA9IHBhZG5vICUgY29tbXVuaXR5LT5ncHBfc2l6ZTsKKwkJdW5zaWduZWQgZ3BwID0gcGFkbm8gLyBjb21tdW5pdHktPmdwcF9zaXplOwogCQl2b2lkIF9faW9tZW0gKnJlZzsKIAkJdTMyIHZhbHVlOwogCkBAIC03ODAsOCArNzc4LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwYWRubyA9IHBpbl90b19wYWRubyhjb21tdW5pdHksIHBpbik7Ci0JZ3BwID0gcGFkbm8gLyBOUEFEU19JTl9HUFA7Ci0JZ3BwX29mZnNldCA9IHBhZG5vICUgTlBBRFNfSU5fR1BQOworCWdwcCA9IHBhZG5vIC8gY29tbXVuaXR5LT5ncHBfc2l6ZTsKKwlncHBfb2Zmc2V0ID0gcGFkbm8gJSBjb21tdW5pdHktPmdwcF9zaXplOwogCiAJLyogQ2xlYXIgdGhlIGV4aXN0aW5nIHdha2Ugc3RhdHVzICovCiAJd3JpdGVsKEJJVChncHBfb2Zmc2V0KSwgY29tbXVuaXR5LT5yZWdzICsgR1BJX0dQRV9TVFMgKyBncHAgKiA0KTsKQEAgLTgxOSwxNCArODE3LDE0IEBACiAJCS8qIE9ubHkgaW50ZXJydXB0cyB0aGF0IGFyZSBlbmFibGVkICovCiAJCXBlbmRpbmcgJj0gZW5hYmxlZDsKIAotCQlmb3JfZWFjaF9zZXRfYml0KGdwcF9vZmZzZXQsICZwZW5kaW5nLCBOUEFEU19JTl9HUFApIHsKKwkJZm9yX2VhY2hfc2V0X2JpdChncHBfb2Zmc2V0LCAmcGVuZGluZywgY29tbXVuaXR5LT5ncHBfc2l6ZSkgewogCQkJdW5zaWduZWQgcGFkbm8sIGlycTsKIAogCQkJLyoKIAkJCSAqIFRoZSBsYXN0IGdyb3VwIGluIGNvbW11bml0eSBjYW4gaGF2ZSBsZXNzIHBpbnMKIAkJCSAqIHRoYW4gTlBBRFNfSU5fR1BQLgogCQkJICovCi0JCQlwYWRubyA9IGdwcF9vZmZzZXQgKyBncHAgKiBOUEFEU19JTl9HUFA7CisJCQlwYWRubyA9IGdwcF9vZmZzZXQgKyBncHAgKiBjb21tdW5pdHktPmdwcF9zaXplOwogCQkJaWYgKHBhZG5vID49IGNvbW11bml0eS0+bnBpbnMpCiAJCQkJYnJlYWs7CiAKQEAgLTEwMDIsNyArMTAwMCw4IEBACiAKIAkJY29tbXVuaXR5LT5yZWdzID0gcmVnczsKIAkJY29tbXVuaXR5LT5wYWRfcmVncyA9IHJlZ3MgKyBwYWRiYXI7Ci0JCWNvbW11bml0eS0+bmdwcHMgPSBESVZfUk9VTkRfVVAoY29tbXVuaXR5LT5ucGlucywgTlBBRFNfSU5fR1BQKTsKKwkJY29tbXVuaXR5LT5uZ3BwcyA9IERJVl9ST1VORF9VUChjb21tdW5pdHktPm5waW5zLAorCQkJCQkJY29tbXVuaXR5LT5ncHBfc2l6ZSk7CiAJfQogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9pbnRlbC9waW5jdHJsLWludGVsLmggYi9kcml2ZXJzL3BpbmN0cmwvaW50ZWwvcGluY3RybC1pbnRlbC5oCmluZGV4IDRlYzhiNTcuLmI2MDIxNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9pbnRlbC9waW5jdHJsLWludGVsLmgKKysrIGIvZHJpdmVycy9waW5jdHJsL2ludGVsL3BpbmN0cmwtaW50ZWwuaApAQCAtNTUsNiArNTUsOCBAQAogICogICAgICAgICAgICAgICAgICBBQ1BJKS4KICAqIEBpZV9vZmZzZXQ6IFJlZ2lzdGVyIG9mZnNldCBvZiBHUElfSUUgZnJvbSBAcmVncy4KICAqIEBwaW5fYmFzZTogU3RhcnRpbmcgcGluIG9mIHBpbnMgaW4gdGhpcyBjb21tdW5pdHkKKyAqIEBncHBfc2l6ZTogTWF4aW11bSBudW1iZXIgb2YgcGFkcyBpbiBlYWNoIGdyb3VwLCBzdWNoIGFzIFBBRENGR0xPQ0ssCisgKiAgICAgICAgICAgIEhPU1RTV19PV04sICBHUElfSVMsIEdQSV9JRSwgZXRjLgogICogQG5waW5zOiBOdW1iZXIgb2YgcGlucyBpbiB0aGlzIGNvbW11bml0eQogICogQHJlZ3M6IENvbW11bml0eSBzcGVjaWZpYyBjb21tb24gcmVnaXN0ZXJzIChyZXNlcnZlZCBmb3IgY29yZSBkcml2ZXIpCiAgKiBAcGFkX3JlZ3M6IENvbW11bml0eSBzcGVjaWZpYyBwYWQgcmVnaXN0ZXJzIChyZXNlcnZlZCBmb3IgY29yZSBkcml2ZXIpCkBAIC02OCw2ICs3MCw3IEBACiAJdW5zaWduZWQgaG9zdG93bl9vZmZzZXQ7CiAJdW5zaWduZWQgaWVfb2Zmc2V0OwogCXVuc2lnbmVkIHBpbl9iYXNlOworCXVuc2lnbmVkIGdwcF9zaXplOwogCXNpemVfdCBucGluczsKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAJdm9pZCBfX2lvbWVtICpwYWRfcmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9pbnRlbC9waW5jdHJsLXN1bnJpc2Vwb2ludC5jIGIvZHJpdmVycy9waW5jdHJsL2ludGVsL3BpbmN0cmwtc3VucmlzZXBvaW50LmMKaW5kZXggMWRlOWFlNS4uYzcyNWE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL2ludGVsL3BpbmN0cmwtc3VucmlzZXBvaW50LmMKKysrIGIvZHJpdmVycy9waW5jdHJsL2ludGVsL3BpbmN0cmwtc3VucmlzZXBvaW50LmMKQEAgLTMwLDYgKzMwLDcgQEAKIAkJLnBhZGNmZ2xvY2tfb2Zmc2V0ID0gU1BUX1BBRENGR0xPQ0ssCVwKIAkJLmhvc3Rvd25fb2Zmc2V0ID0gU1BUX0hPU1RTV19PV04sCVwKIAkJLmllX29mZnNldCA9IFNQVF9HUElfSUUsCQlcCisJCS5ncHBfc2l6ZSA9IDI0LAkJCQlcCiAJCS5waW5fYmFzZSA9IChzKSwJCQlcCiAJCS5ucGlucyA9ICgoZSkgLSAocykgKyAxKSwJCVwKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvbWVkaWF0ZWsvcGluY3RybC1tdGstY29tbW9uLmMgYi9kcml2ZXJzL3BpbmN0cmwvbWVkaWF0ZWsvcGluY3RybC1tdGstY29tbW9uLmMKaW5kZXggZjMwN2YxZC4uNWM3MTcyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL3BpbmN0cmwtbXRrLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9tZWRpYXRlay9waW5jdHJsLW10ay1jb21tb24uYwpAQCAtNzQ3LDcgKzc0Nyw3IEBACiAJcmVnX2FkZHIgPSAgbXRrX2dldF9wb3J0KHBjdGwsIG9mZnNldCkgKyBwY3RsLT5kZXZkYXRhLT5kaXJfb2Zmc2V0OwogCWJpdCA9IEJJVChvZmZzZXQgJiAweGYpOwogCXJlZ21hcF9yZWFkKHBjdGwtPnJlZ21hcDEsIHJlZ19hZGRyLCAmcmVhZF92YWwpOwotCXJldHVybiAhIShyZWFkX3ZhbCAmIGJpdCk7CisJcmV0dXJuICEocmVhZF92YWwgJiBiaXQpOwogfQogCiBzdGF0aWMgaW50IG10a19ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCkBAIC03NTcsMTIgKzc1Nyw4IEBACiAJdW5zaWduZWQgaW50IHJlYWRfdmFsID0gMDsKIAlzdHJ1Y3QgbXRrX3BpbmN0cmwgKnBjdGwgPSBkZXZfZ2V0X2RydmRhdGEoY2hpcC0+ZGV2KTsKIAotCWlmIChtdGtfZ3Bpb19nZXRfZGlyZWN0aW9uKGNoaXAsIG9mZnNldCkpCi0JCXJlZ19hZGRyID0gbXRrX2dldF9wb3J0KHBjdGwsIG9mZnNldCkgKwotCQkJcGN0bC0+ZGV2ZGF0YS0+ZG91dF9vZmZzZXQ7Ci0JZWxzZQotCQlyZWdfYWRkciA9IG10a19nZXRfcG9ydChwY3RsLCBvZmZzZXQpICsKLQkJCXBjdGwtPmRldmRhdGEtPmRpbl9vZmZzZXQ7CisJcmVnX2FkZHIgPSBtdGtfZ2V0X3BvcnQocGN0bCwgb2Zmc2V0KSArCisJCXBjdGwtPmRldmRhdGEtPmRpbl9vZmZzZXQ7CiAKIAliaXQgPSBCSVQob2Zmc2V0ICYgMHhmKTsKIAlyZWdtYXBfcmVhZChwY3RsLT5yZWdtYXAxLCByZWdfYWRkciwgJnJlYWRfdmFsKTsKQEAgLTk5Nyw2ICs5OTMsNyBAQAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLnJlcXVlc3QJCT0gZ3Bpb2NoaXBfZ2VuZXJpY19yZXF1ZXN0LAogCS5mcmVlCQkJPSBncGlvY2hpcF9nZW5lcmljX2ZyZWUsCisJLmdldF9kaXJlY3Rpb24JCT0gbXRrX2dwaW9fZ2V0X2RpcmVjdGlvbiwKIAkuZGlyZWN0aW9uX2lucHV0CT0gbXRrX2dwaW9fZGlyZWN0aW9uX2lucHV0LAogCS5kaXJlY3Rpb25fb3V0cHV0CT0gbXRrX2dwaW9fZGlyZWN0aW9uX291dHB1dCwKIAkuZ2V0CQkJPSBtdGtfZ3Bpb19nZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLXNzYmktZ3Bpby5jIGIvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1zc2JpLWdwaW8uYwppbmRleCBkODA5YzllLi4xOWEzYzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLXNzYmktZ3Bpby5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtc3NiaS1ncGlvLmMKQEAgLTY3Miw3ICs2NzIsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXBjdHJsLT5kZXYgPSAmcGRldi0+ZGV2OwotCXBjdHJsLT5ucGlucyA9ICh1bnNpZ25lZClvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoJnBkZXYtPmRldik7CisJcGN0cmwtPm5waW5zID0gKHVuc2lnbmVkIGxvbmcpb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOwogCiAJcGN0cmwtPnJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKHBkZXYtPmRldi5wYXJlbnQsIE5VTEwpOwogCWlmICghcGN0cmwtPnJlZ21hcCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1zc2JpLW1wcC5jIGIvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1zc2JpLW1wcC5jCmluZGV4IDg5ODIwMjcuLmI4NjhlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtc3NiaS1tcHAuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLXNzYmktbXBwLmMKQEAgLTc2Myw3ICs3NjMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXBjdHJsLT5kZXYgPSAmcGRldi0+ZGV2OwotCXBjdHJsLT5ucGlucyA9ICh1bnNpZ25lZClvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoJnBkZXYtPmRldik7CisJcGN0cmwtPm5waW5zID0gKHVuc2lnbmVkIGxvbmcpb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOwogCiAJcGN0cmwtPnJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKHBkZXYtPmRldi5wYXJlbnQsIE5VTEwpOwogCWlmICghcGN0cmwtPnJlZ21hcCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9wZmMtc2g3NzM0LmMgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1zaDc3MzQuYwppbmRleCBlN2RlYjUxLi45ODQyYmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1zaDc3MzQuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1zaDc3MzQuYwpAQCAtMzEsMTEgKzMxLDExIEBACiAJUE9SVF9HUF8xMig1LCBmbiwgc2Z4KQogCiAjdW5kZWYgX0dQX0RBVEEKLSNkZWZpbmUgX0dQX0RBVEEoYmFuaywgcGluLCBuYW1lLCBzZngpCQkJCQlcCisjZGVmaW5lIF9HUF9EQVRBKGJhbmssIHBpbiwgbmFtZSwgc2Z4LCBjZmcpCQkJCVwKIAlQSU5NVVhfREFUQShuYW1lIyNfREFUQSwgbmFtZSMjX0ZOLCBuYW1lIyNfSU4sIG5hbWUjI19PVVQpCiAKLSNkZWZpbmUgX0dQX0lOT1VUU0VMKGJhbmssIHBpbiwgbmFtZSwgc2Z4KQluYW1lIyNfSU4sIG5hbWUjI19PVVQKLSNkZWZpbmUgX0dQX0lORFQoYmFuaywgcGluLCBuYW1lLCBzZngpCQluYW1lIyNfREFUQQorI2RlZmluZSBfR1BfSU5PVVRTRUwoYmFuaywgcGluLCBuYW1lLCBzZngsIGNmZykJbmFtZSMjX0lOLCBuYW1lIyNfT1VUCisjZGVmaW5lIF9HUF9JTkRUKGJhbmssIHBpbiwgbmFtZSwgc2Z4LCBjZmcpCW5hbWUjI19EQVRBCiAjZGVmaW5lIEdQX0lOT1VUU0VMKGJhbmspCVBPUlRfR1BfMzJfUkVWKGJhbmssIF9HUF9JTk9VVFNFTCwgdW51c2VkKQogI2RlZmluZSBHUF9JTkRUKGJhbmspCQlQT1JUX0dQXzMyX1JFVihiYW5rLCBfR1BfSU5EVCwgdW51c2VkKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyY2FwL2ludGVsX3JhcGwuYyBiL2RyaXZlcnMvcG93ZXJjYXAvaW50ZWxfcmFwbC5jCmluZGV4IGNjOTdmMDguLjQ4NzQ3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXJjYXAvaW50ZWxfcmFwbC5jCisrKyBiL2RyaXZlcnMvcG93ZXJjYXAvaW50ZWxfcmFwbC5jCkBAIC0xMzQxLDEwICsxMzQxLDEzIEBACiAKIAlmb3IgKHJkID0gcnAtPmRvbWFpbnM7IHJkIDwgcnAtPmRvbWFpbnMgKyBycC0+bnJfZG9tYWluczsgcmQrKykgewogCQkvKiBjaGVjayBpZiB0aGUgZG9tYWluIGlzIGxvY2tlZCBieSBCSU9TICovCi0JCWlmIChyYXBsX3JlYWRfZGF0YV9yYXcocmQsIEZXX0xPQ0ssIGZhbHNlLCAmbG9ja2VkKSkgeworCQlyZXQgPSByYXBsX3JlYWRfZGF0YV9yYXcocmQsIEZXX0xPQ0ssIGZhbHNlLCAmbG9ja2VkKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWlmIChsb2NrZWQpIHsKIAkJCXByX2luZm8oIlJBUEwgcGFja2FnZSAlZCBkb21haW4gJXMgbG9ja2VkIGJ5IEJJT1NcbiIsCiAJCQkJcnAtPmlkLCByZC0+bmFtZSk7Ci0JCQkJcmQtPnN0YXRlIHw9IERPTUFJTl9TVEFURV9CSU9TX0xPQ0tFRDsKKwkJCXJkLT5zdGF0ZSB8PSBET01BSU5fU1RBVEVfQklPU19MT0NLRUQ7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2NvcmUuYwppbmRleCA4YjMxMzBmLi45ZTAzZDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19jb3JlLmMKKysrIGIvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfY29yZS5jCkBAIC0xNDc4LDYgKzE0NzgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmVtb3RlcHJvY19leGl0KHZvaWQpCiB7CisJaWRhX2Rlc3Ryb3koJnJwcm9jX2Rldl9pbmRleCk7CisKIAlycHJvY19leGl0X2RlYnVnZnMoKTsKIH0KIG1vZHVsZV9leGl0KHJlbW90ZXByb2NfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvcmVtb3RlcHJvY19kZWJ1Z2ZzLmMKaW5kZXggOWQzMDgwOS4uOTE2YWY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZW1vdGVwcm9jL3JlbW90ZXByb2NfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9yZW1vdGVwcm9jX2RlYnVnZnMuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJY2hhciBidWZbMTBdOwogCWludCByZXQ7CiAKLQlpZiAoY291bnQgPiBzaXplb2YoYnVmKSkKKwlpZiAoY291bnQgPCAxIHx8IGNvdW50ID4gc2l6ZW9mKGJ1ZikpCiAJCXJldHVybiBjb3VudDsKIAogCXJldCA9IGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGNvdW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kYTkwNjMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kYTkwNjMuYwppbmRleCAyODRiNTg3Li5kNmM4NTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGE5MDYzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRhOTA2My5jCkBAIC00ODMsMTcgKzQ4Myw2IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwogCi0JaXJxX2FsYXJtID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIkFMQVJNIik7Ci0JcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmcGRldi0+ZGV2LCBpcnFfYWxhcm0sIE5VTEwsCi0JCQkJCWRhOTA2M19hbGFybV9ldmVudCwKLQkJCQkJSVJRRl9UUklHR0VSX0xPVyB8IElSUUZfT05FU0hPVCwKLQkJCQkJIkFMQVJNIiwgcnRjKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IEFMQVJNIElSUSAlZDogJWRcbiIsCi0JCQlpcnFfYWxhcm0sIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAJcnRjLT5ydGNfZGV2ID0gZGV2bV9ydGNfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIERBOTA2M19EUlZOQU1FX1JUQywKIAkJCQkJICAgJmRhOTA2M19ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGMtPnJ0Y19kZXYpKQpAQCAtNTAxLDYgKzQ5MCwxNiBAQAogCiAJZGE5MDYzX2RhdGFfdG9fdG0oZGF0YSwgJnJ0Yy0+YWxhcm1fdGltZSwgcnRjKTsKIAlydGMtPnJ0Y19zeW5jID0gZmFsc2U7CisKKwlpcnFfYWxhcm0gPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiQUxBUk0iKTsKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZwZGV2LT5kZXYsIGlycV9hbGFybSwgTlVMTCwKKwkJCQkJZGE5MDYzX2FsYXJtX2V2ZW50LAorCQkJCQlJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAorCQkJCQkiQUxBUk0iLCBydGMpOworCWlmIChyZXQpCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IEFMQVJNIElSUSAlZDogJWRcbiIsCisJCQlpcnFfYWxhcm0sIHJldCk7CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKaW5kZXggMTg4MDA2Yy4uYWE3MDViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwpAQCAtMTUsOSArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9wbV93YWtlaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjL2RzMTMwNy5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTExNyw3ICsxMTQsNiBAQAogI2RlZmluZSBIQVNfQUxBUk0JMQkJLyogYml0IDEgPT0gaXJxIGNsYWltZWQgKi8KIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OwogCXN0cnVjdCBydGNfZGV2aWNlCSpydGM7Ci0JaW50CQkJd2FrZWlycTsKIAlzMzIgKCpyZWFkX2Jsb2NrX2RhdGEpKGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCiAJCQkgICAgICAgdTggbGVuZ3RoLCB1OCAqdmFsdWVzKTsKIAlzMzIgKCp3cml0ZV9ibG9ja19kYXRhKShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLApAQCAtMTEzOCw3ICsxMTM0LDEwIEBACiAJCQkJYmluMmJjZCh0bXApKTsKIAl9CiAKLQlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZjbGllbnQtPmRldiwgd2FudF9pcnEpOworCWlmICh3YW50X2lycSkgeworCQlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZjbGllbnQtPmRldiwgdHJ1ZSk7CisJCXNldF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncyk7CisJfQogCWRzMTMwNy0+cnRjID0gZGV2bV9ydGNfZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldiwgY2xpZW50LT5uYW1lLAogCQkJCXJ0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKGRzMTMwNy0+cnRjKSkgewpAQCAtMTE0Niw0MyArMTE0NSwxOSBAQAogCX0KIAogCWlmICh3YW50X2lycSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOwotCiAJCWVyciA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJmNsaWVudC0+ZGV2LAogCQkJCQkJY2xpZW50LT5pcnEsIE5VTEwsIGlycV9oYW5kbGVyLAogCQkJCQkJSVJRRl9TSEFSRUQgfCBJUlFGX09ORVNIT1QsCiAJCQkJCQlkczEzMDctPnJ0Yy0+bmFtZSwgY2xpZW50KTsKIAkJaWYgKGVycikgewogCQkJY2xpZW50LT5pcnEgPSAwOworCQkJZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZSgmY2xpZW50LT5kZXYsIGZhbHNlKTsKKwkJCWNsZWFyX2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKTsKIAkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgSVJRIVxuIik7Ci0JCQlnb3RvIG5vX2lycTsKLQkJfQotCi0JCXNldF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncyk7Ci0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZ290IElSUSAlZFxuIiwgY2xpZW50LT5pcnEpOwotCi0JCS8qIEN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgT0YgY29kZSBvbmx5ISAqLwotCQlpZiAoIW5vZGUpCi0JCQlnb3RvIG5vX2lycTsKLQotCQllcnIgPSBvZl9pcnFfZ2V0KG5vZGUsIDEpOwotCQlpZiAoZXJyIDw9IDApIHsKLQkJCWlmIChlcnIgPT0gLUVQUk9CRV9ERUZFUikKLQkJCQlnb3RvIGV4aXQ7Ci0JCQlnb3RvIG5vX2lycTsKLQkJfQotCQlkczEzMDctPndha2VpcnEgPSBlcnI7Ci0KLQkJZXJyID0gZGV2X3BtX3NldF9kZWRpY2F0ZWRfd2FrZV9pcnEoJmNsaWVudC0+ZGV2LAotCQkJCQkJICAgIGRzMTMwNy0+d2FrZWlycSk7Ci0JCWlmIChlcnIpIHsKLQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidW5hYmxlIHRvIHNldHVwIHdha2VJUlEgJWQhXG4iLAotCQkJCWVycik7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KKwkJfSBlbHNlCisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImdvdCBJUlEgJWRcbiIsIGNsaWVudC0+aXJxKTsKIAl9CiAKLW5vX2lycToKIAlpZiAoY2hpcC0+bnZyYW1fc2l6ZSkgewogCiAJCWRzMTMwNy0+bnZyYW0gPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LApAQCAtMTIyNiw5ICsxMjAxLDYgQEAKIHsKIAlzdHJ1Y3QgZHMxMzA3ICpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWlmIChkczEzMDctPndha2VpcnEpCi0JCWRldl9wbV9jbGVhcl93YWtlX2lycSgmY2xpZW50LT5kZXYpOwotCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIQVNfTlZSQU0sICZkczEzMDctPmZsYWdzKSkKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZjbGllbnQtPmRldi5rb2JqLCBkczEzMDctPm52cmFtKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJrODA4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtcms4MDguYwppbmRleCA5MWNhMGJjLi4zNWM5YWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcms4MDguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcms4MDguYwpAQCAtNTYsNiArNTYsNDIgQEAKIAlpbnQgaXJxOwogfTsKIAorLyoKKyAqIFRoZSBSb2NrY2hpcCBjYWxlbmRhciB1c2VkIGJ5IHRoZSBSSzgwOCBjb3VudHMgTm92ZW1iZXIgd2l0aCAzMSBkYXlzLiBXZSB1c2UKKyAqIHRoZXNlIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyB0byBjb252ZXJ0IGl0cyBkYXRlcyB0by9mcm9tIHRoZSBHcmVnb3JpYW4KKyAqIGNhbGVuZGFyIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHdvcmxkLiBXZSBhcmJpdHJhcmlseSBkZWZpbmUgSmFuIDFzdCwgMjAxNgorICogYXMgdGhlIGRheSB3aGVuIGJvdGggY2FsZW5kYXJzIHdlcmUgaW4gc3luYywgYW5kIHRyZWF0IGFsbCBvdGhlciBkYXRlcworICogcmVsYXRpdmUgdG8gdGhhdC4KKyAqIE5PVEU6IE90aGVyIHN5c3RlbSBzb2Z0d2FyZSAoZS5nLiBmaXJtd2FyZSkgdGhhdCByZWFkcyB0aGUgc2FtZSBoYXJkd2FyZSBtdXN0CisgKiBpbXBsZW1lbnQgdGhpcyBleGFjdCBzYW1lIGNvbnZlcnNpb24gYWxnb3JpdGhtLCB3aXRoIHRoZSBzYW1lIGFuY2hvciBkYXRlLgorICovCitzdGF0aWMgdGltZTY0X3Qgbm92MmRlY190cmFuc2l0aW9ucyhzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXJldHVybiAodG0tPnRtX3llYXIgKyAxOTAwKSAtIDIwMTYgKyAodG0tPnRtX21vbiArIDEgPiAxMSA/IDEgOiAwKTsKK30KKworc3RhdGljIHZvaWQgcm9ja2NoaXBfdG9fZ3JlZ29yaWFuKHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJLyogSWYgaXQncyBOb3YgMzFzdCwgcnRjX3RtX3RvX3RpbWU2NCgpIHdpbGwgY291bnQgdGhhdCBsaWtlIERlYyAxc3QgKi8KKwl0aW1lNjRfdCB0aW1lID0gcnRjX3RtX3RvX3RpbWU2NCh0bSk7CisJcnRjX3RpbWU2NF90b190bSh0aW1lICsgbm92MmRlY190cmFuc2l0aW9ucyh0bSkgKiA4NjQwMCwgdG0pOworfQorCitzdGF0aWMgdm9pZCBncmVnb3JpYW5fdG9fcm9ja2NoaXAoc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwl0aW1lNjRfdCBleHRyYV9kYXlzID0gbm92MmRlY190cmFuc2l0aW9ucyh0bSk7CisJdGltZTY0X3QgdGltZSA9IHJ0Y190bV90b190aW1lNjQodG0pOworCXJ0Y190aW1lNjRfdG9fdG0odGltZSAtIGV4dHJhX2RheXMgKiA4NjQwMCwgdG0pOworCisJLyogQ29tcGVuc2F0ZSBpZiB3ZSB3ZW50IGJhY2sgb3ZlciBOb3YgMzFzdCAod2lsbCB3b3JrIHVwIHRvIDIzODEpICovCisJaWYgKG5vdjJkZWNfdHJhbnNpdGlvbnModG0pIDwgZXh0cmFfZGF5cykgeworCQlpZiAodG0tPnRtX21vbiArIDEgPT0gMTEpCisJCQl0bS0+dG1fbWRheSsrOwkvKiBUaGlzIG1heSByZXN1bHQgaW4gMzEhICovCisJCWVsc2UKKwkJCXJ0Y190aW1lNjRfdG9fdG0odGltZSAtIChleHRyYV9kYXlzIC0gMSkgKiA4NjQwMCwgdG0pOworCX0KK30KKwogLyogUmVhZCBjdXJyZW50IHRpbWUgYW5kIGRhdGUgaW4gUlRDICovCiBzdGF0aWMgaW50IHJrODA4X3J0Y19yZWFkdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CkBAIC0xMDEsOSArMTM3LDEwIEBACiAJdG0tPnRtX21vbiA9IChiY2QyYmluKHJ0Y19kYXRhWzRdICYgTU9OVEhTX1JFR19NU0spKSAtIDE7CiAJdG0tPnRtX3llYXIgPSAoYmNkMmJpbihydGNfZGF0YVs1XSAmIFlFQVJTX1JFR19NU0spKSArIDEwMDsKIAl0bS0+dG1fd2RheSA9IGJjZDJiaW4ocnRjX2RhdGFbNl0gJiBXRUVLU19SRUdfTVNLKTsKKwlyb2NrY2hpcF90b19ncmVnb3JpYW4odG0pOwogCWRldl9kYmcoZGV2LCAiUlRDIGRhdGUvdGltZSAlNGQtJTAyZC0lMDJkKCVkKSAlMDJkOiUwMmQ6JTAyZFxuIiwKIAkJMTkwMCArIHRtLT50bV95ZWFyLCB0bS0+dG1fbW9uICsgMSwgdG0tPnRtX21kYXksCi0JCXRtLT50bV93ZGF5LCB0bS0+dG1faG91ciAsIHRtLT50bV9taW4sIHRtLT50bV9zZWMpOworCQl0bS0+dG1fd2RheSwgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExNiw2ICsxNTMsMTAgQEAKIAl1OCBydGNfZGF0YVtOVU1fVElNRV9SRUdTXTsKIAlpbnQgcmV0OwogCisJZGV2X2RiZyhkZXYsICJzZXQgUlRDIGRhdGUvdGltZSAlNGQtJTAyZC0lMDJkKCVkKSAlMDJkOiUwMmQ6JTAyZFxuIiwKKwkJMTkwMCArIHRtLT50bV95ZWFyLCB0bS0+dG1fbW9uICsgMSwgdG0tPnRtX21kYXksCisJCXRtLT50bV93ZGF5LCB0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYyk7CisJZ3JlZ29yaWFuX3RvX3JvY2tjaGlwKHRtKTsKIAlydGNfZGF0YVswXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CiAJcnRjX2RhdGFbMV0gPSBiaW4yYmNkKHRtLT50bV9taW4pOwogCXJ0Y19kYXRhWzJdID0gYmluMmJjZCh0bS0+dG1faG91cik7CkBAIC0xMjMsOSArMTY0LDYgQEAKIAlydGNfZGF0YVs0XSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwogCXJ0Y19kYXRhWzVdID0gYmluMmJjZCh0bS0+dG1feWVhciAtIDEwMCk7CiAJcnRjX2RhdGFbNl0gPSBiaW4yYmNkKHRtLT50bV93ZGF5KTsKLQlkZXZfZGJnKGRldiwgInNldCBSVEMgZGF0ZS90aW1lICU0ZC0lMDJkLSUwMmQoJWQpICUwMmQ6JTAyZDolMDJkXG4iLAotCQkxOTAwICsgdG0tPnRtX3llYXIsIHRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSwKLQkJdG0tPnRtX3dkYXksIHRtLT50bV9ob3VyICwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYyk7CiAKIAkvKiBTdG9wIFJUQyB3aGlsZSB1cGRhdGluZyB0aGUgUlRDIHJlZ2lzdGVycyAqLwogCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyazgwOC0+cmVnbWFwLCBSSzgwOF9SVENfQ1RSTF9SRUcsCkBAIC0xNzAsNiArMjA4LDcgQEAKIAlhbHJtLT50aW1lLnRtX21kYXkgPSBiY2QyYmluKGFscm1fZGF0YVszXSAmIERBWVNfUkVHX01TSyk7CiAJYWxybS0+dGltZS50bV9tb24gPSAoYmNkMmJpbihhbHJtX2RhdGFbNF0gJiBNT05USFNfUkVHX01TSykpIC0gMTsKIAlhbHJtLT50aW1lLnRtX3llYXIgPSAoYmNkMmJpbihhbHJtX2RhdGFbNV0gJiBZRUFSU19SRUdfTVNLKSkgKyAxMDA7CisJcm9ja2NoaXBfdG9fZ3JlZ29yaWFuKCZhbHJtLT50aW1lKTsKIAogCXJldCA9IHJlZ21hcF9yZWFkKHJrODA4LT5yZWdtYXAsIFJLODA4X1JUQ19JTlRfUkVHLCAmaW50X3JlZyk7CiAJaWYgKHJldCkgewpAQCAtMjI3LDYgKzI2Niw3IEBACiAJCWFscm0tPnRpbWUudG1fbWRheSwgYWxybS0+dGltZS50bV93ZGF5LCBhbHJtLT50aW1lLnRtX2hvdXIsCiAJCWFscm0tPnRpbWUudG1fbWluLCBhbHJtLT50aW1lLnRtX3NlYyk7CiAKKwlncmVnb3JpYW5fdG9fcm9ja2NoaXAoJmFscm0tPnRpbWUpOwogCWFscm1fZGF0YVswXSA9IGJpbjJiY2QoYWxybS0+dGltZS50bV9zZWMpOwogCWFscm1fZGF0YVsxXSA9IGJpbjJiY2QoYWxybS0+dGltZS50bV9taW4pOwogCWFscm1fZGF0YVsyXSA9IGJpbjJiY2QoYWxybS0+dGltZS50bV9ob3VyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKaW5kZXggNTQ4YTE4OS4uYTgzMWQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTEwODAsMjggKzEwODAsMTAgQEAKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2VpX3BhZ2UpOwogfQogCi1pbnQgY2hzY19lbmFibGVfZmFjaWxpdHkoaW50IG9wZXJhdGlvbl9jb2RlKQoraW50IF9fY2hzY19lbmFibGVfZmFjaWxpdHkoc3RydWN0IGNoc2Nfc2RhX2FyZWEgKnNkYV9hcmVhLCBpbnQgb3BlcmF0aW9uX2NvZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwotCXN0cnVjdCB7Ci0JCXN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0OwotCQl1OCByZXNlcnZlZDE6NDsKLQkJdTggZm9ybWF0OjQ7Ci0JCXU4IHJlc2VydmVkMjsKLQkJdTE2IG9wZXJhdGlvbl9jb2RlOwotCQl1MzIgcmVzZXJ2ZWQzOwotCQl1MzIgcmVzZXJ2ZWQ0OwotCQl1MzIgb3BlcmF0aW9uX2RhdGFfYXJlYVsyNTJdOwotCQlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7Ci0JCXUzMiByZXNlcnZlZDU6NDsKLQkJdTMyIGZvcm1hdDI6NDsKLQkJdTMyIHJlc2VydmVkNjoyNDsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqc2RhX2FyZWE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hzY19wYWdlX2xvY2ssIGZsYWdzKTsKLQltZW1zZXQoY2hzY19wYWdlLCAwLCBQQUdFX1NJWkUpOwotCXNkYV9hcmVhID0gY2hzY19wYWdlOwogCXNkYV9hcmVhLT5yZXF1ZXN0Lmxlbmd0aCA9IDB4MDQwMDsKIAlzZGFfYXJlYS0+cmVxdWVzdC5jb2RlID0gMHgwMDMxOwogCXNkYV9hcmVhLT5vcGVyYXRpb25fY29kZSA9IG9wZXJhdGlvbl9jb2RlOwpAQCAtMTExOSwxMCArMTEwMSwyNSBAQAogCWRlZmF1bHQ6CiAJCXJldCA9IGNoc2NfZXJyb3JfZnJvbV9yZXNwb25zZShzZGFfYXJlYS0+cmVzcG9uc2UuY29kZSk7CiAJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCBjaHNjX2VuYWJsZV9mYWNpbGl0eShpbnQgb3BlcmF0aW9uX2NvZGUpCit7CisJc3RydWN0IGNoc2Nfc2RhX2FyZWEgKnNkYV9hcmVhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjaHNjX3BhZ2VfbG9jaywgZmxhZ3MpOworCW1lbXNldChjaHNjX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisJc2RhX2FyZWEgPSBjaHNjX3BhZ2U7CisKKwlyZXQgPSBfX2Noc2NfZW5hYmxlX2ZhY2lsaXR5KHNkYV9hcmVhLCBvcGVyYXRpb25fY29kZSk7CiAJaWYgKHJldCAhPSAwKQogCQlDSU9fQ1JXX0VWRU5UKDIsICJjaHNjOiBzZGEgKG9jPSV4KSBmYWlsZWQgKHJjPSUwNHgpXG4iLAogCQkJICAgICAgb3BlcmF0aW9uX2NvZGUsIHNkYV9hcmVhLT5yZXNwb25zZS5jb2RlKTsKLW91dDoKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoc2NfcGFnZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5oIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmgKaW5kZXggNzZjOWI1MC4uMGRlMTM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmgKQEAgLTExNSw2ICsxMTUsMjAgQEAKIAl1OCBkYXRhW1BBR0VfU0laRSAtIDIwXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgY2hzY19zZGFfYXJlYSB7CisJc3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7CisJdTggOjQ7CisJdTggZm9ybWF0OjQ7CisJdTggOjg7CisJdTE2IG9wZXJhdGlvbl9jb2RlOworCXUzMiA6MzI7CisJdTMyIDozMjsKKwl1MzIgb3BlcmF0aW9uX2RhdGFfYXJlYVsyNTJdOworCXN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTsKKwl1MzIgOjQ7CisJdTMyIGZvcm1hdDI6NDsKKwl1MzIgOjI0OworfSBfX3BhY2tlZCBfX2FsaWduZWQoUEFHRV9TSVpFKTsKIAogZXh0ZXJuIGludCBjaHNjX2dldF9zc2RfaW5mbyhzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwKIAkJCSAgICAgc3RydWN0IGNoc2Nfc3NkX2luZm8gKnNzZCk7CkBAIC0xMjIsNiArMTM2LDcgQEAKIGV4dGVybiBpbnQgY2hzY19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2hzY19pbml0X2NsZWFudXAodm9pZCk7CiAKK2ludCBfX2Noc2NfZW5hYmxlX2ZhY2lsaXR5KHN0cnVjdCBjaHNjX3NkYV9hcmVhICpzZGFfYXJlYSwgaW50IG9wZXJhdGlvbl9jb2RlKTsKIGV4dGVybiBpbnQgY2hzY19lbmFibGVfZmFjaWxpdHkoaW50KTsKIHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbTsKIGV4dGVybiBpbnQgY2hzY19zZWNtKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggYjU2MjBlOC4uNjkwYjg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC05MjUsMTggKzkyNSwzMiBAQAogCiBpbnQgX19pbml0IGNpb19nZXRfaXBsaW5mbyhzdHJ1Y3QgY2lvX2lwbGluZm8gKmlwbGluZm8pCiB7CisJc3RhdGljIHN0cnVjdCBjaHNjX3NkYV9hcmVhIHNkYV9hcmVhIF9faW5pdGRhdGE7CiAJc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQ7CiAJc3RydWN0IHNjaGliIHNjaGliOwogCiAJc2NoaWQgPSAqKHN0cnVjdCBzdWJjaGFubmVsX2lkICopJlMzOTBfbG93Y29yZS5zdWJjaGFubmVsX2lkOwogCWlmICghc2NoaWQub25lKQogCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzY2hpZC5zc2lkKSB7CisJCS8qCisJCSAqIEZpcm13YXJlIHNob3VsZCBoYXZlIGFscmVhZHkgZW5hYmxlZCBNU1MgYnV0IHdob2V2ZXIgc3RhcnRlZAorCQkgKiB0aGUga2VybmVsIG1pZ2h0IGhhdmUgaW5pdGlhdGVkIGEgY2hhbm5lbCBzdWJzeXN0ZW0gcmVzZXQuCisJCSAqIEVuc3VyZSB0aGF0IE1TUyBpcyBlbmFibGVkLgorCQkgKi8KKwkJbWVtc2V0KCZzZGFfYXJlYSwgMCwgc2l6ZW9mKHNkYV9hcmVhKSk7CisJCWlmIChfX2Noc2NfZW5hYmxlX2ZhY2lsaXR5KCZzZGFfYXJlYSwgQ0hTQ19TREFfT0NfTVNTKSkKKwkJCXJldHVybiAtRU5PREVWOworCX0KIAlpZiAoc3RzY2hfZXJyKHNjaGlkLCAmc2NoaWIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAoc2NoaWIucG1jdy5zdCAhPSBTVUJDSEFOTkVMX1RZUEVfSU8pCiAJCXJldHVybiAtRU5PREVWOwogCWlmICghc2NoaWIucG1jdy5kbnYpCiAJCXJldHVybiAtRU5PREVWOworCisJaXBsaW5mby0+c3NpZCA9IHNjaGlkLnNzaWQ7CiAJaXBsaW5mby0+ZGV2bm8gPSBzY2hpYi5wbWN3LmRldjsKIAlpcGxpbmZvLT5pc19xZGlvID0gc2NoaWIucG1jdy5xZjsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDJlZTMwNTMuLjQ4OWU3MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtNzAyLDE3ICs3MDIsMTIgQEAKIAkJY3NzLT5nbG9iYWxfcGdpZC5wZ2lkX2hpZ2guZXh0X2Nzc2lkLnZlcnNpb24gPSAweDgwOwogCQljc3MtPmdsb2JhbF9wZ2lkLnBnaWRfaGlnaC5leHRfY3NzaWQuY3NzaWQgPSBjc3MtPmNzc2lkOwogCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX1NNUAogCQljc3MtPmdsb2JhbF9wZ2lkLnBnaWRfaGlnaC5jcHVfYWRkciA9IHN0YXAoKTsKLSNlbHNlCi0JCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmNwdV9hZGRyID0gMDsKLSNlbmRpZgogCX0KIAlnZXRfY3B1X2lkKCZjcHVfaWQpOwogCWNzcy0+Z2xvYmFsX3BnaWQuY3B1X2lkID0gY3B1X2lkLmlkZW50OwogCWNzcy0+Z2xvYmFsX3BnaWQuY3B1X21vZGVsID0gY3B1X2lkLm1hY2hpbmU7CiAJY3NzLT5nbG9iYWxfcGdpZC50b2RfaGlnaCA9IHRvZF9oaWdoOwotCiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL2NyeXB0by9NYWtlZmlsZQppbmRleCA1N2Y3MTBiLi5iOGFiMTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGUKQEAgLTMsNiArMyw5IEBACiAjCiAKIGFwLW9ianMgOj0gYXBfYnVzLm8KLW9iai0kKENPTkZJR19aQ1JZUFQpICs9IGFwLm8gemNyeXB0X2FwaS5vIHpjcnlwdF9wY2l4Y2Mubwotb2JqLSQoQ09ORklHX1pDUllQVCkgKz0gemNyeXB0X2NleDJhLm8gemNyeXB0X2NleDQubworIyB6Y3J5cHRfYXBpIGRlcGVuZHMgb24gYXAKK29iai0kKENPTkZJR19aQ1JZUFQpICs9IGFwLm8gemNyeXB0X2FwaS5vCisjIG1zZ3R5cGUqIGRlcGVuZCBvbiB6Y3J5cHRfYXBpCiBvYmotJChDT05GSUdfWkNSWVBUKSArPSB6Y3J5cHRfbXNndHlwZTYubyB6Y3J5cHRfbXNndHlwZTUwLm8KKyMgYWRhcHRlciBkcml2ZXJzIGRlcGVuZCBvbiBhcCwgemNyeXB0X2FwaSBhbmQgbXNndHlwZSoKK29iai0kKENPTkZJR19aQ1JZUFQpICs9IHpjcnlwdF9wY2l4Y2MubyB6Y3J5cHRfY2V4MmEubyB6Y3J5cHRfY2V4NC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwppbmRleCA5Y2IzZGZiLi4yNGVjMjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKQEAgLTc0LDYgKzc0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmFwX2NvbmZpZ3VyYXRpb247CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFwX2RldmljZV9saXN0X2xvY2spOwogc3RhdGljIExJU1RfSEVBRChhcF9kZXZpY2VfbGlzdCk7CitzdGF0aWMgYm9vbCBpbml0aWFsaXNlZDsKIAogLyoKICAqIFdvcmtxdWV1ZSB0aW1lciBmb3IgYnVzIHJlc2Nhbi4KQEAgLTU5OCw4ICs1OTksMTAgQEAKIAlzdGF0dXMgPSBhcF9zbV9yZWN2KGFwX2Rldik7CiAJc3dpdGNoIChzdGF0dXMucmVzcG9uc2VfY29kZSkgewogCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgotCQlpZiAoYXBfZGV2LT5xdWV1ZV9jb3VudCA+IDApCisJCWlmIChhcF9kZXYtPnF1ZXVlX2NvdW50ID4gMCkgeworCQkJYXBfZGV2LT5zdGF0ZSA9IEFQX1NUQVRFX1dPUktJTkc7CiAJCQlyZXR1cm4gQVBfV0FJVF9BR0FJTjsKKwkJfQogCQlhcF9kZXYtPnN0YXRlID0gQVBfU1RBVEVfSURMRTsKIAkJcmV0dXJuIEFQX1dBSVRfTk9ORTsKIAljYXNlIEFQX1JFU1BPTlNFX05PX1BFTkRJTkdfUkVQTFk6CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSAmYXBfZHJ2LT5kcml2ZXI7CiAKKwlpZiAoIWluaXRpYWxpc2VkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWRydi0+YnVzID0gJmFwX2J1c190eXBlOwogCWRydi0+cHJvYmUgPSBhcF9kZXZpY2VfcHJvYmU7CiAJZHJ2LT5yZW1vdmUgPSBhcF9kZXZpY2VfcmVtb3ZlOwpAQCAtMTgwOCw2ICsxODE0LDcgQEAKIAkJZ290byBvdXRfcG07CiAKIAlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmYXBfc2Nhbl93b3JrKTsKKwlpbml0aWFsaXNlZCA9IHRydWU7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTgzNyw2ICsxODQ0LDcgQEAKIHsKIAlpbnQgaTsKIAorCWluaXRpYWxpc2VkID0gZmFsc2U7CiAJYXBfcmVzZXRfZG9tYWluKCk7CiAJYXBfcG9sbF90aHJlYWRfc3RvcCgpOwogCWRlbF90aW1lcl9zeW5jKCZhcF9jb25maWdfdGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwppbmRleCBhOTYwM2ViLi45ZjhmYTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwpAQCAtMzE3LDExICszMTcsOSBAQAogCiB2b2lkIHpjcnlwdF9tc2d0eXBlX3JlZ2lzdGVyKHN0cnVjdCB6Y3J5cHRfb3BzICp6b3BzKQogewotCWlmICh6b3BzLT5vd25lcikgewotCQlzcGluX2xvY2tfYmgoJnpjcnlwdF9vcHNfbGlzdF9sb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmem9wcy0+bGlzdCwgJnpjcnlwdF9vcHNfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ6Y3J5cHRfb3BzX2xpc3RfbG9jayk7Ci0JfQorCXNwaW5fbG9ja19iaCgmemNyeXB0X29wc19saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnpvcHMtPmxpc3QsICZ6Y3J5cHRfb3BzX2xpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZ6Y3J5cHRfb3BzX2xpc3RfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHpjcnlwdF9tc2d0eXBlX3JlZ2lzdGVyKTsKIApAQCAtMzQyLDcgKzM0MCw3IEBACiAJc3Bpbl9sb2NrX2JoKCZ6Y3J5cHRfb3BzX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh6b3BzLCAmemNyeXB0X29wc19saXN0LCBsaXN0KSB7CiAJCWlmICgoem9wcy0+dmFyaWFudCA9PSB2YXJpYW50KSAmJgotCQkgICAgKCFzdHJuY21wKHpvcHMtPm93bmVyLT5uYW1lLCBuYW1lLCBNT0RVTEVfTkFNRV9MRU4pKSkgeworCQkgICAgKCFzdHJuY21wKHpvcHMtPm5hbWUsIG5hbWUsIHNpemVvZih6b3BzLT5uYW1lKSkpKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaAppbmRleCA3NTA4NzY4Li4zODYxOGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaAorKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaApAQCAtOTYsNiArOTYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIHpjcnlwdCBvcHMgbGlzdC4gKi8KIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAlpbnQgdmFyaWFudDsKKwljaGFyIG5hbWVbMTI4XTsKIH07CiAKIHN0cnVjdCB6Y3J5cHRfZGV2aWNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X21zZ3R5cGU1MC5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfbXNndHlwZTUwLmMKaW5kZXggNzFjZWVlOS4uNzRlZGYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfbXNndHlwZTUwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfbXNndHlwZTUwLmMKQEAgLTUxMyw2ICs1MTMsNyBAQAogCS5yc2FfbW9kZXhwbyA9IHpjcnlwdF9jZXgyYV9tb2RleHBvLAogCS5yc2FfbW9kZXhwb19jcnQgPSB6Y3J5cHRfY2V4MmFfbW9kZXhwb19jcnQsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBNU0dUWVBFNTBfTkFNRSwKIAkudmFyaWFudCA9IE1TR1RZUEU1MF9WQVJJQU5UX0RFRkFVTFQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9tc2d0eXBlNi5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfbXNndHlwZTYuYwppbmRleCA3NDc2MjIxLi45YTJkZDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9tc2d0eXBlNi5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X21zZ3R5cGU2LmMKQEAgLTExMTksNiArMTExOSw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgemNyeXB0X29wcyB6Y3J5cHRfbXNndHlwZTZfbm9ybmdfb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gTVNHVFlQRTA2X05BTUUsCiAJLnZhcmlhbnQgPSBNU0dUWVBFMDZfVkFSSUFOVF9OT1JORywKIAkucnNhX21vZGV4cG8gPSB6Y3J5cHRfbXNndHlwZTZfbW9kZXhwbywKIAkucnNhX21vZGV4cG9fY3J0ID0gemNyeXB0X21zZ3R5cGU2X21vZGV4cG9fY3J0LApAQCAtMTEyNyw2ICsxMTI4LDcgQEAKIAogc3RhdGljIHN0cnVjdCB6Y3J5cHRfb3BzIHpjcnlwdF9tc2d0eXBlNl9vcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBNU0dUWVBFMDZfTkFNRSwKIAkudmFyaWFudCA9IE1TR1RZUEUwNl9WQVJJQU5UX0RFRkFVTFQsCiAJLnJzYV9tb2RleHBvID0gemNyeXB0X21zZ3R5cGU2X21vZGV4cG8sCiAJLnJzYV9tb2RleHBvX2NydCA9IHpjcnlwdF9tc2d0eXBlNl9tb2RleHBvX2NydCwKQEAgLTExMzYsNiArMTEzOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgemNyeXB0X29wcyB6Y3J5cHRfbXNndHlwZTZfZXAxMV9vcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBNU0dUWVBFMDZfTkFNRSwKIAkudmFyaWFudCA9IE1TR1RZUEUwNl9WQVJJQU5UX0VQMTEsCiAJLnJzYV9tb2RleHBvID0gTlVMTCwKIAkucnNhX21vZGV4cG9fY3J0ID0gTlVMTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC92aXJ0aW8vdmlydGlvX2Njdy5jIGIvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKaW5kZXggYjJhMWE4MS4uMWI4MzE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3ZpcnRpby92aXJ0aW9fY2N3LmMKQEAgLTk4NCwzMiArOTg0LDkgQEAKIAlyZXR1cm4gdnE7CiB9CiAKLXN0YXRpYyB2b2lkIHZpcnRpb19jY3dfaW50X2hhbmRsZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBpbnRwYXJtLAotCQkJCSAgIHN0cnVjdCBpcmIgKmlyYikKK3N0YXRpYyB2b2lkIHZpcnRpb19jY3dfY2hlY2tfYWN0aXZpdHkoc3RydWN0IHZpcnRpb19jY3dfZGV2aWNlICp2Y2RldiwKKwkJCQkgICAgICBfX3UzMiBhY3Rpdml0eSkKIHsKLQlfX3UzMiBhY3Rpdml0eSA9IGludHBhcm0gJiBWSVJUSU9fQ0NXX0lOVFBBUk1fTUFTSzsKLQlzdHJ1Y3QgdmlydGlvX2Njd19kZXZpY2UgKnZjZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOwotCWludCBpOwotCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwotCi0JaWYgKCF2Y2RldikKLQkJcmV0dXJuOwotCS8qIENoZWNrIGlmIGl0J3MgYSBub3RpZmljYXRpb24gZnJvbSB0aGUgaG9zdC4gKi8KLQlpZiAoKGludHBhcm0gPT0gMCkgJiYKLQkgICAgKHNjc3dfc3RjdGwoJmlyYi0+c2NzdykgPT0KLQkgICAgIChTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUyB8IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkgewotCQkvKiBPSyAqLwotCX0KLQlpZiAoaXJiX2lzX2Vycm9yKGlyYikpIHsKLQkJLyogQ29tbWFuZCByZWplY3Q/ICovCi0JCWlmICgoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spICYmCi0JCSAgICAoaXJiLT5lY3dbMF0gJiBTTlMwX0NNRF9SRUpFQ1QpKQotCQkJdmNkZXYtPmVyciA9IC1FT1BOT1RTVVBQOwotCQllbHNlCi0JCQkvKiBNYXAgZXZlcnl0aGluZyBlbHNlIHRvIC1FSU8uICovCi0JCQl2Y2Rldi0+ZXJyID0gLUVJTzsKLQl9CiAJaWYgKHZjZGV2LT5jdXJyX2lvICYgYWN0aXZpdHkpIHsKIAkJc3dpdGNoIChhY3Rpdml0eSkgewogCQljYXNlIFZJUlRJT19DQ1dfRE9JTkdfUkVBRF9GRUFUOgpAQCAtMTAyOSwxMiArMTAwNiw0NyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBkb24ndCBrbm93IHdoYXQgdG8gZG8uLi4gKi8KLQkJCWRldl93YXJuKCZjZGV2LT5kZXYsICJTdXNwaWNpb3VzIGFjdGl2aXR5ICclMDh4J1xuIiwKLQkJCQkgYWN0aXZpdHkpOworCQkJZGV2X3dhcm4oJnZjZGV2LT5jZGV2LT5kZXYsCisJCQkJICJTdXNwaWNpb3VzIGFjdGl2aXR5ICclMDh4J1xuIiwgYWN0aXZpdHkpOwogCQkJV0FSTl9PTigxKTsKIAkJCWJyZWFrOwogCQl9CiAJfQorfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fY2N3X2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgaW50cGFybSwKKwkJCQkgICBzdHJ1Y3QgaXJiICppcmIpCit7CisJX191MzIgYWN0aXZpdHkgPSBpbnRwYXJtICYgVklSVElPX0NDV19JTlRQQVJNX01BU0s7CisJc3RydWN0IHZpcnRpb19jY3dfZGV2aWNlICp2Y2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmY2Rldi0+ZGV2KTsKKwlpbnQgaTsKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKworCWlmICghdmNkZXYpCisJCXJldHVybjsKKwlpZiAoSVNfRVJSKGlyYikpIHsKKwkJdmNkZXYtPmVyciA9IFBUUl9FUlIoaXJiKTsKKwkJdmlydGlvX2Njd19jaGVja19hY3Rpdml0eSh2Y2RldiwgYWN0aXZpdHkpOworCQkvKiBEb24ndCBwb2tlIGFyb3VuZCBpbmRpY2F0b3JzLCBzb21ldGhpbmcncyB3cm9uZy4gKi8KKwkJcmV0dXJuOworCX0KKwkvKiBDaGVjayBpZiBpdCdzIGEgbm90aWZpY2F0aW9uIGZyb20gdGhlIGhvc3QuICovCisJaWYgKChpbnRwYXJtID09IDApICYmCisJICAgIChzY3N3X3N0Y3RsKCZpcmItPnNjc3cpID09CisJICAgICAoU0NTV19TVENUTF9BTEVSVF9TVEFUVVMgfCBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkpIHsKKwkJLyogT0sgKi8KKwl9CisJaWYgKGlyYl9pc19lcnJvcihpcmIpKSB7CisJCS8qIENvbW1hbmQgcmVqZWN0PyAqLworCQlpZiAoKHNjc3dfZHN0YXQoJmlyYi0+c2NzdykgJiBERVZfU1RBVF9VTklUX0NIRUNLKSAmJgorCQkgICAgKGlyYi0+ZWN3WzBdICYgU05TMF9DTURfUkVKRUNUKSkKKwkJCXZjZGV2LT5lcnIgPSAtRU9QTk9UU1VQUDsKKwkJZWxzZQorCQkJLyogTWFwIGV2ZXJ5dGhpbmcgZWxzZSB0byAtRUlPLiAqLworCQkJdmNkZXYtPmVyciA9IC1FSU87CisJfQorCXZpcnRpb19jY3dfY2hlY2tfYWN0aXZpdHkodmNkZXYsIGFjdGl2aXR5KTsKIAlmb3JfZWFjaF9zZXRfYml0KGksICZ2Y2Rldi0+aW5kaWNhdG9ycywKIAkJCSBzaXplb2YodmNkZXYtPmluZGljYXRvcnMpICogQklUU19QRVJfQllURSkgewogCQkvKiBUaGUgYml0IGNsZWFyIG11c3QgaGFwcGVuIGJlZm9yZSB0aGUgdnJpbmcga2ljay4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggNWY2OTJhZS4uNjRlZWQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTM2NCw2ICszNjQsNyBAQAogCXRyaXN0YXRlICJIUCBTbWFydCBBcnJheSBTQ1NJIGRyaXZlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCiAJc2VsZWN0IENIRUNLX1NJR05BVFVSRQorCXNlbGVjdCBTQ1NJX1NBU19BVFRSUwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEhQIFNtYXJ0IEFycmF5IENvbnRyb2xsZXJzIChjaXJjYSAyMDA5KS4KIAkgIEl0IGlzIGEgU0NTSSBhbHRlcm5hdGl2ZSB0byB0aGUgY2Npc3MgZHJpdmVyLCB3aGljaCBpcyBhIGJsb2NrCkBAIC00OTksNiArNTAwLDcgQEAKIAl0cmlzdGF0ZSAiQWR2YW5TeXMgU0NTSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU0NTSQogCWRlcGVuZHMgb24gSVNBIHx8IEVJU0EgfHwgUENJCisJZGVwZW5kcyBvbiBJU0FfRE1BX0FQSSB8fCAhSVNBCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgYWxsIFNDU0kgaG9zdCBhZGFwdGVycyBtYW51ZmFjdHVyZWQgYnkKIAkgIEFkdmFuU3lzLiBJdCBpcyBkb2N1bWVudGVkIGluIHRoZSBrZXJuZWwgc291cmNlIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCmluZGV4IDUxOWY5YTQuLmZlYmJkODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jCkBAIC03ODAzLDcgKzc4MDMsNyBAQAogCQlyZXR1cm4gQVNDX0JVU1k7CiAJfQogCXNjc2lxcC0+c2Vuc2VfYWRkciA9IGNwdV90b19sZTMyKHNlbnNlX2FkZHIpOwotCXNjc2lxcC0+c2Vuc2VfbGVuID0gY3B1X3RvX2xlMzIoU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwlzY3NpcXAtPnNlbnNlX2xlbiA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKIAogCS8qIEJ1aWxkIEFEVl9TQ1NJX1JFUV9RICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKaW5kZXggMzIzOTgyZi4uODJhYzFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hvc3RzLmMKKysrIGIvZHJpdmVycy9zY3NpL2hvc3RzLmMKQEAgLTMzMyw2ICszMzMsMTcgQEAKIAkJa2ZyZWUocXVldWVkYXRhKTsKIAl9CiAKKwlpZiAoc2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX0NSRUFURUQpIHsKKwkJLyoKKwkJICogRnJlZSB0aGUgc2hvc3RfZGV2IGRldmljZSBuYW1lIGhlcmUgaWYgc2NzaV9ob3N0X2FsbG9jKCkKKwkJICogYW5kIHNjc2lfaG9zdF9wdXQoKSBoYXZlIGJlZW4gY2FsbGVkIGJ1dCBuZWl0aGVyCisJCSAqIHNjc2lfaG9zdF9hZGQoKSBub3Igc2NzaV9ob3N0X3JlbW92ZSgpIGhhcyBiZWVuIGNhbGxlZC4KKwkJICogVGhpcyBhdm9pZHMgdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHNob3N0X2RldgorCQkgKiBuYW1lIGlzIGxlYWtlZC4KKwkJICovCisJCWtmcmVlKGRldl9uYW1lKCZzaG9zdC0+c2hvc3RfZGV2KSk7CisJfQorCiAJc2NzaV9kZXN0cm95X2NvbW1hbmRfZnJlZWxpc3Qoc2hvc3QpOwogCWlmIChzaG9zdF91c2VfYmxrX21xKHNob3N0KSkgewogCQlpZiAoc2hvc3QtPnRhZ19zZXQudGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhLmMgYi9kcml2ZXJzL3Njc2kvaHBzYS5jCmluZGV4IDZhOGY5NTguLmEzODYwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuYwpAQCAtODY3MSw3ICs4NjcxLDcgQEAKIAlpZiAoKHJjICE9IDApICB8fCAoYy0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMgIT0gMCkpCiAJCWdvdG8gZXJyb3V0OwogCi0JaWYgKCpvcHRpb25zICYmIEhQU0FfRElBR19PUFRTX0RJU0FCTEVfUkxEX0NBQ0hJTkcpCisJaWYgKCpvcHRpb25zICYgSFBTQV9ESUFHX09QVFNfRElTQUJMRV9STERfQ0FDSElORykKIAkJZ290byBvdXQ7CiAKIGVycm91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9LY29uZmlnCmluZGV4IDI5MDYxNDYuLmI3MzZkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL21wdDNzYXMvS2NvbmZpZwpAQCAtNzEsMyArNzEsMTIgQEAKIAlNQVhfUEhZU19TRUdNRU5UUyBpbiBtb3N0IGtlcm5lbHMuICBIb3dldmVyIGluIFN1U0Uga2VybmVscyB0aGlzCiAJY2FuIGJlIDI1Ni4gSG93ZXZlciwgaXQgbWF5IGRlY3JlYXNlZCBkb3duIHRvIDE2LiAgRGVjcmVhc2luZyB0aGlzCiAJcGFyYW1ldGVyIHdpbGwgcmVkdWNlIG1lbW9yeSByZXF1aXJlbWVudHMgb24gYSBwZXIgY29udHJvbGxlciBpbnN0YW5jZS4KKworY29uZmlnIFNDU0lfTVBUMlNBUworCXRyaXN0YXRlICJMZWdhY3kgTVBUMlNBUyBjb25maWcgb3B0aW9uIgorCWRlZmF1bHQgbgorCXNlbGVjdCBTQ1NJX01QVDNTQVMKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisJLS0taGVscC0tLQorCUR1bW15IGNvbmZpZyBvcHRpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmxpdHk6IGNvbmZpZ3VyZSB0aGUgTVBUM1NBUworCWRyaXZlciBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jCmluZGV4IGQ5NTIwNmIuLjlhYjc3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3Njc2loLmMKQEAgLTM5MDUsOCArMzkwNSw3IEBACiAJICogV2UgZG8gbm90IGV4cG9zZSByYWlkIGZ1bmN0aW9uYWxpdHkgdG8gdXBwZXIgbGF5ZXIgZm9yIHdhcnBkcml2ZS4KIAkgKi8KIAlpZiAoIWlvYy0+aXNfd2FycGRyaXZlICYmICFzY3NpaF9pc19yYWlkKCZzY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2KQotCSAgICAmJiAoc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzICYgTVBUX0RFVklDRV9UTFJfT04pICYmCi0JICAgIHNjbWQtPmNtZF9sZW4gIT0gMzIpCisJICAgICYmIHNhc19pc190bHJfZW5hYmxlZChzY21kLT5kZXZpY2UpICYmIHNjbWQtPmNtZF9sZW4gIT0gMzIpCiAJCW1waV9jb250cm9sIHw9IE1QSTJfU0NTSUlPX0NPTlRST0xfVExSX09OOwogCiAJc21pZCA9IG1wdDNzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oaW9jLCBpb2MtPnNjc2lfaW9fY2JfaWR4LCBzY21kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCmluZGV4IDkwZmRmMGUuLjY3NWU3ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYwpAQCAtNzU4LDcgKzc1OCw3IEBACiAJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCWNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7Ci0JaW50IHZhbCA9IDA7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CiAJc3RydWN0IG12c19pbmZvICptdmkgPSBOVUxMOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7CiAJc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNoYSA9IFNIT1NUX1RPX1NBU19IQShzaG9zdCk7CkBAIC03NjYsNyArNzY2LDcgQEAKIAlpZiAoYnVmZmVyID09IE5VTEwpCiAJCXJldHVybiBzaXplOwogCi0JaWYgKHNzY2FuZihidWZmZXIsICIlZCIsICZ2YWwpICE9IDEpCisJaWYgKHNzY2FuZihidWZmZXIsICIldSIsICZ2YWwpICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHZhbCA+PSAweDEwMDAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5jCmluZGV4IGViMGNjNTQuLmI2YjRjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ueC5jCkBAIC00MzMsNyArNDMzLDcgQEAKIAlpZiAob2ZmX2luIDwgUUxBODJYWF9QQ0lfQ1JCU1BBQ0UpCiAJCXJldHVybiAtMTsKIAotCSpvZmZfb3V0ID0gKHZvaWQgX19pb21lbSAqKShvZmZfaW4gLSBRTEE4MlhYX1BDSV9DUkJTUEFDRSk7CisJb2ZmX2luIC09IFFMQTgyWFhfUENJX0NSQlNQQUNFOwogCiAJLyogVHJ5IGRpcmVjdCBtYXAgKi8KIAltID0gJmNyYl8xMjhNXzJNX21hcFtDUkJfQkxLKG9mZl9pbildLnN1Yl9ibG9ja1tDUkJfU1VCQkxLKG9mZl9pbildOwpAQCAtNDQzLDYgKzQ0Myw3IEBACiAJCXJldHVybiAwOwogCX0KIAkvKiBOb3QgaW4gZGlyZWN0IG1hcCwgdXNlIGNyYiB3aW5kb3cgKi8KKwkqb2ZmX291dCA9ICh2b2lkIF9faW9tZW0gKilvZmZfaW47CiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3RjbV9xbGEyeHh4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC90Y21fcWxhMnh4eC5jCmluZGV4IDNiYTJlOTUuLjgxYWYyOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3RjbV9xbGEyeHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvdGNtX3FsYTJ4eHguYwpAQCAtOTAyLDcgKzkwMiw3IEBACiAJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCB0cGctPnRwZ19hdHRyaWIuZmFicmljX3Byb3RfdHlwZSk7CiB9CiAKLUNPTkZJR0ZTX0FUVFJfV08odGNtX3FsYTJ4eHhfdHBnXywgZW5hYmxlKTsKK0NPTkZJR0ZTX0FUVFIodGNtX3FsYTJ4eHhfdHBnXywgZW5hYmxlKTsKIENPTkZJR0ZTX0FUVFJfUk8odGNtX3FsYTJ4eHhfdHBnXywgZHluYW1pY19zZXNzaW9ucyk7CiBDT05GSUdGU19BVFRSKHRjbV9xbGEyeHh4X3RwZ18sIGZhYnJpY19wcm90X3R5cGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwppbmRleCBkZmNjNDViLi5kMDlkNjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKQEAgLTQ2NSw4ICs0NjUsOSBAQAogCSAgICAgMH0gfSwKIAl7MCwgMCwgMCwgRl9JTlZfT1AgfCBGRl9SRVNQT05ELCBOVUxMLCBOVUxMLCAvKiBNQUlOVCBPVVQgKi8KIAkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAotCXswLCAwLCAwLCBGX0lOVl9PUCB8IEZGX1JFU1BPTkQsIE5VTEwsIE5VTEwsIC8qIFZFUklGWSAqLwotCSAgICB7MCwgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9IH0sCisJezAsIDB4MmYsIDAsIEZfRF9PVVRfTUFZQkUgfCBGRl9ESVJFQ1RfSU8sIE5VTEwsIE5VTEwsIC8qIFZFUklGWSgxMCkgKi8KKwkgICAgezEwLCAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNywKKwkgICAgIDAsIDAsIDAsIDAsIDAsIDB9IH0sCiAJezEsIDB4N2YsIDB4OSwgRl9TQV9ISUdIIHwgRl9EX0lOIHwgRkZfRElSRUNUX0lPLCByZXNwX3JlYWRfZHQwLAogCSAgICB2bF9pYXJyLCB7MzIsICAweGM3LCAwLCAwLCAwLCAwLCAweDFmLCAweDE4LCAweDAsIDB4OSwgMHhmZSwgMCwKIAkJICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn0gfSwvKiBWQVJJQUJMRSBMRU5HVEgsIFJFQUQoMzIpICovCkBAIC00NzcsOCArNDc4LDggQEAKIAkgICAgezEwLCAgMHgxMywgMHhmZiwgMHhmZiwgMCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwKIAkgICAgIDB9IH0sCiAvKiAyMCAqLwotCXswLCAwLCAwLCBGX0lOVl9PUCB8IEZGX1JFU1BPTkQsIE5VTEwsIE5VTEwsIC8qIEFMTE9XIFJFTU9WQUwgKi8KLQkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDFlLCAwLCAwLCBOVUxMLCBOVUxMLCAvKiBBTExPVyBSRU1PVkFMICovCisJICAgIHs2LCAgMCwgMCwgMCwgMHgzLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAogCXswLCAweDEsIDAsIDAsIHJlc3Bfc3RhcnRfc3RvcCwgTlVMTCwgLyogUkVXSU5EID8/ICovCiAJICAgIHs2LCAgMHgxLCAwLCAwLCAwLCAweGM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAogCXswLCAwLCAwLCBGX0lOVl9PUCB8IEZGX1JFU1BPTkQsIE5VTEwsIE5VTEwsIC8qIEFUQV9QVCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfcG0uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3BtLmMKaW5kZXggZTRiNzk5OC4uNDU5YWJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfcG0uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9wbS5jCkBAIC0yMTksMTMgKzIxOSwxMyBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAocG0gJiYgcG0tPnJ1bnRpbWVfc3VzcGVuZCkgewotCQllcnIgPSBibGtfcHJlX3J1bnRpbWVfc3VzcGVuZChzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJZXJyID0gYmxrX3ByZV9ydW50aW1lX3N1c3BlbmQoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAocG0gJiYgcG0tPnJ1bnRpbWVfc3VzcGVuZCkKIAkJZXJyID0gcG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOwotCQlibGtfcG9zdF9ydW50aW1lX3N1c3BlbmQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZXJyKTsKLQl9CisJYmxrX3Bvc3RfcnVudGltZV9zdXNwZW5kKHNkZXYtPnJlcXVlc3RfcXVldWUsIGVycik7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNDgsMTEgKzI0OCwxMSBAQAogCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChwbSAmJiBwbS0+cnVudGltZV9yZXN1bWUpIHsKLQkJYmxrX3ByZV9ydW50aW1lX3Jlc3VtZShzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKKwlibGtfcHJlX3J1bnRpbWVfcmVzdW1lKHNkZXYtPnJlcXVlc3RfcXVldWUpOworCWlmIChwbSAmJiBwbS0+cnVudGltZV9yZXN1bWUpCiAJCWVyciA9IHBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOwotCQlibGtfcG9zdF9ydW50aW1lX3Jlc3VtZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBlcnIpOwotCX0KKwlibGtfcG9zdF9ydW50aW1lX3Jlc3VtZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBlcnIpOworCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDgzMjQ1MzkuLjA1NDkyM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTcwMSw5ICs3MDEsMTIgQEAKIAkgKiBzdHJpbmdzLgogCSAqLwogCWlmIChzZGV2LT5pbnF1aXJ5X2xlbiA8IDM2KSB7Ci0JCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCSAgICAic2NzaSBzY2FuOiBJTlFVSVJZIHJlc3VsdCB0b28gc2hvcnQgKCVkKSwiCi0JCQkgICAgIiB1c2luZyAzNlxuIiwgc2Rldi0+aW5xdWlyeV9sZW4pOworCQlpZiAoIXNkZXYtPmhvc3QtPnNob3J0X2lucXVpcnkpIHsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0lORk8sIHNkZXYtPmhvc3QsCisJCQkJICAgICJzY3NpIHNjYW46IElOUVVJUlkgcmVzdWx0IHRvbyBzaG9ydCAoJWQpLCIKKwkJCQkgICAgIiB1c2luZyAzNlxuIiwgc2Rldi0+aW5xdWlyeV9sZW4pOworCQkJc2Rldi0+aG9zdC0+c2hvcnRfaW5xdWlyeSA9IDE7CisJCX0KIAkJc2Rldi0+aW5xdWlyeV9sZW4gPSAzNjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IDhkMjMxMjIuLjIxOTMwYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtMTEwMiw2ICsxMTAyLDE0IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnNkZXYtPnNkZXZfZ2VuZGV2OwogCisJLyoKKwkgKiBUaGlzIGNsZWFudXAgcGF0aCBpcyBub3QgcmVlbnRyYW50IGFuZCB3aGlsZSBpdCBpcyBpbXBvc3NpYmxlCisJICogdG8gZ2V0IGEgbmV3IHJlZmVyZW5jZSB3aXRoIHNjc2lfZGV2aWNlX2dldCgpIHNvbWVvbmUgY2FuIHN0aWxsCisJICogaG9sZCBhIHByZXZpb3VzbHkgYWNxdWlyZWQgb25lLgorCSAqLworCWlmIChzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfREVMKQorCQlyZXR1cm47CisKIAlpZiAoc2Rldi0+aXNfdmlzaWJsZSkgewogCQlpZiAoc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfQ0FOQ0VMKSAhPSAwKQogCQkJcmV0dXJuOwpAQCAtMTExMCw3ICsxMTE4LDkgQEAKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJnNkZXYtPnNkZXZfZGV2KTsKIAkJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoZGV2KTsKIAkJc2NzaV9kaF9yZW1vdmVfZGV2aWNlKHNkZXYpOwotCX0KKwkJZGV2aWNlX2RlbChkZXYpOworCX0gZWxzZQorCQlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2Rldik7CiAKIAkvKgogCSAqIFN0b3AgYWNjZXB0aW5nIG5ldyByZXF1ZXN0cyBhbmQgd2FpdCB1bnRpbCBhbGwgcXVldWVjb21tYW5kKCkgYW5kCkBAIC0xMTIxLDE2ICsxMTMxLDYgQEAKIAlibGtfY2xlYW51cF9xdWV1ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKIAljYW5jZWxfd29ya19zeW5jKCZzZGV2LT5yZXF1ZXVlX3dvcmspOwogCi0JLyoKLQkgKiBSZW1vdmUgdGhlIGRldmljZSBhZnRlciBibGtfY2xlYW51cF9xdWV1ZSgpIGhhcyBiZWVuIGNhbGxlZCBzdWNoCi0JICogYSBwb3NzaWJsZSBiZGlfcmVnaXN0ZXIoKSBjYWxsIHdpdGggdGhlIHNhbWUgbmFtZSBvY2N1cnMgYWZ0ZXIKLQkgKiBibGtfY2xlYW51cF9xdWV1ZSgpIGhhcyBjYWxsZWQgYmRpX2Rlc3Ryb3koKS4KLQkgKi8KLQlpZiAoc2Rldi0+aXNfdmlzaWJsZSkKLQkJZGV2aWNlX2RlbChkZXYpOwotCWVsc2UKLQkJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwotCiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KQogCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveShzZGV2KTsKIAl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggNTQ1MTk4MC4uM2QyMmZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTYzOCwxMSArNjM4LDI0IEBACiAJdW5zaWduZWQgaW50IG1heF9ibG9ja3MgPSAwOwogCiAJcS0+bGltaXRzLmRpc2NhcmRfemVyb2VzX2RhdGEgPSAwOwotCXEtPmxpbWl0cy5kaXNjYXJkX2FsaWdubWVudCA9IHNka3AtPnVubWFwX2FsaWdubWVudCAqCi0JCWxvZ2ljYWxfYmxvY2tfc2l6ZTsKLQlxLT5saW1pdHMuZGlzY2FyZF9ncmFudWxhcml0eSA9Ci0JCW1heChzZGtwLT5waHlzaWNhbF9ibG9ja19zaXplLAotCQkgICAgc2RrcC0+dW5tYXBfZ3JhbnVsYXJpdHkgKiBsb2dpY2FsX2Jsb2NrX3NpemUpOworCisJLyoKKwkgKiBXaGVuIExCUFJaIGlzIHJlcG9ydGVkLCBkaXNjYXJkIGFsaWdubWVudCBhbmQgZ3JhbnVsYXJpdHkKKwkgKiBtdXN0IGJlIGZpeGVkIHRvIHRoZSBsb2dpY2FsIGJsb2NrIHNpemUuIE90aGVyd2lzZSB0aGUgYmxvY2sKKwkgKiBsYXllciB3aWxsIGRyb3AgbWlzYWxpZ25lZCBwb3J0aW9ucyBvZiB0aGUgcmVxdWVzdCB3aGljaCBjYW4KKwkgKiBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbi4gSWYgTEJQUlogaXMgbm90IHNldCwgd2UgaG9ub3IgdGhlCisJICogZGV2aWNlIHByZWZlcmVuY2UuCisJICovCisJaWYgKHNka3AtPmxicHJ6KSB7CisJCXEtPmxpbWl0cy5kaXNjYXJkX2FsaWdubWVudCA9IDA7CisJCXEtPmxpbWl0cy5kaXNjYXJkX2dyYW51bGFyaXR5ID0gMTsKKwl9IGVsc2UgeworCQlxLT5saW1pdHMuZGlzY2FyZF9hbGlnbm1lbnQgPSBzZGtwLT51bm1hcF9hbGlnbm1lbnQgKgorCQkJbG9naWNhbF9ibG9ja19zaXplOworCQlxLT5saW1pdHMuZGlzY2FyZF9ncmFudWxhcml0eSA9CisJCQltYXgoc2RrcC0+cGh5c2ljYWxfYmxvY2tfc2l6ZSwKKwkJCSAgICBzZGtwLT51bm1hcF9ncmFudWxhcml0eSAqIGxvZ2ljYWxfYmxvY2tfc2l6ZSk7CisJfQogCiAJc2RrcC0+cHJvdmlzaW9uaW5nX21vZGUgPSBtb2RlOwogCkBAIC0yMzIxLDExICsyMzM0LDggQEAKIAkJfQogCX0KIAotCWlmIChzZGtwLT5jYXBhY2l0eSA+IDB4ZmZmZmZmZmYpIHsKKwlpZiAoc2RrcC0+Y2FwYWNpdHkgPiAweGZmZmZmZmZmKQogCQlzZHAtPnVzZV8xNl9mb3JfcncgPSAxOwotCQlzZGtwLT5tYXhfeGZlcl9ibG9ja3MgPSBTRF9NQVhfWEZFUl9CTE9DS1M7Ci0JfSBlbHNlCi0JCXNka3AtPm1heF94ZmVyX2Jsb2NrcyA9IFNEX0RFRl9YRkVSX0JMT0NLUzsKIAogCS8qIFJlc2NhbGUgY2FwYWNpdHkgdG8gNTEyLWJ5dGUgdW5pdHMgKi8KIAlpZiAoc2VjdG9yX3NpemUgPT0gNDA5NikKQEAgLTI2NDIsNyArMjY1Miw2IEBACiB7CiAJdW5zaWduZWQgaW50IHNlY3Rvcl9zeiA9IHNka3AtPmRldmljZS0+c2VjdG9yX3NpemU7CiAJY29uc3QgaW50IHZwZF9sZW4gPSA2NDsKLQl1MzIgbWF4X3hmZXJfbGVuZ3RoOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWJ1ZmZlciB8fApAQCAtMjY1MCwxNCArMjY1OSwxMSBAQAogCSAgICBzY3NpX2dldF92cGRfcGFnZShzZGtwLT5kZXZpY2UsIDB4YjAsIGJ1ZmZlciwgdnBkX2xlbikpCiAJCWdvdG8gb3V0OwogCi0JbWF4X3hmZXJfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbOF0pOwotCWlmIChtYXhfeGZlcl9sZW5ndGgpCi0JCXNka3AtPm1heF94ZmVyX2Jsb2NrcyA9IG1heF94ZmVyX2xlbmd0aDsKLQogCWJsa19xdWV1ZV9pb19taW4oc2RrcC0+ZGlzay0+cXVldWUsCiAJCQkgZ2V0X3VuYWxpZ25lZF9iZTE2KCZidWZmZXJbNl0pICogc2VjdG9yX3N6KTsKLQlibGtfcXVldWVfaW9fb3B0KHNka3AtPmRpc2stPnF1ZXVlLAotCQkJIGdldF91bmFsaWduZWRfYmUzMigmYnVmZmVyWzEyXSkgKiBzZWN0b3Jfc3opOworCisJc2RrcC0+bWF4X3hmZXJfYmxvY2tzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbOF0pOworCXNka3AtPm9wdF94ZmVyX2Jsb2NrcyA9IGdldF91bmFsaWduZWRfYmUzMigmYnVmZmVyWzEyXSk7CiAKIAlpZiAoYnVmZmVyWzNdID09IDB4M2MpIHsKIAkJdW5zaWduZWQgaW50IGxiYV9jb3VudCwgZGVzY19jb3VudDsKQEAgLTI4MDYsNiArMjgxMiwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBsb2dpY2FsX3RvX3NlY3RvcnMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1MzIgYmxvY2tzKQoreworCXJldHVybiBibG9ja3MgPDwgKGlsb2cyKHNkZXYtPnNlY3Rvcl9zaXplKSAtIDkpOworfQorCiAvKioKICAqCXNkX3JldmFsaWRhdGVfZGlzayAtIGNhbGxlZCB0aGUgZmlyc3QgdGltZSBhIG5ldyBkaXNrIGlzIHNlZW4sCiAgKglwZXJmb3JtcyBkaXNrIHNwaW4gdXAsIHJlYWRfY2FwYWNpdHksIGV0Yy4KQEAgLTI4MTUsOCArMjgyNiw5IEBACiB7CiAJc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHNjc2lfZGlzayhkaXNrKTsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCA9IHNka3AtPmRldmljZTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNka3AtPmRpc2stPnF1ZXVlOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKLQl1bnNpZ25lZCBpbnQgbWF4X3hmZXI7CisJdW5zaWduZWQgaW50IGRldl9tYXgsIHJ3X21heDsKIAogCVNDU0lfTE9HX0hMUVVFVUUoMywgc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwKIAkJCQkgICAgICAic2RfcmV2YWxpZGF0ZV9kaXNrXG4iKSk7CkBAIC0yODY0LDExICsyODc2LDI2IEBACiAJICovCiAJc2Rfc2V0X2ZsdXNoX2ZsYWcoc2RrcCk7CiAKLQltYXhfeGZlciA9IHNka3AtPm1heF94ZmVyX2Jsb2NrczsKLQltYXhfeGZlciA8PD0gaWxvZzIoc2RwLT5zZWN0b3Jfc2l6ZSkgLSA5OworCS8qIEluaXRpYWwgYmxvY2sgY291bnQgbGltaXQgYmFzZWQgb24gQ0RCIFRSQU5TRkVSIExFTkdUSCBmaWVsZCBzaXplLiAqLworCWRldl9tYXggPSBzZHAtPnVzZV8xNl9mb3JfcncgPyBTRF9NQVhfWEZFUl9CTE9DS1MgOiBTRF9ERUZfWEZFUl9CTE9DS1M7CiAKLQlzZGtwLT5kaXNrLT5xdWV1ZS0+bGltaXRzLm1heF9zZWN0b3JzID0KLQkJbWluX25vdF96ZXJvKHF1ZXVlX21heF9od19zZWN0b3JzKHNka3AtPmRpc2stPnF1ZXVlKSwgbWF4X3hmZXIpOworCS8qIFNvbWUgZGV2aWNlcyByZXBvcnQgYSBtYXhpbXVtIGJsb2NrIGNvdW50IGZvciBSRUFEL1dSSVRFIHJlcXVlc3RzLiAqLworCWRldl9tYXggPSBtaW5fbm90X3plcm8oZGV2X21heCwgc2RrcC0+bWF4X3hmZXJfYmxvY2tzKTsKKwlxLT5saW1pdHMubWF4X2Rldl9zZWN0b3JzID0gbG9naWNhbF90b19zZWN0b3JzKHNkcCwgZGV2X21heCk7CisKKwkvKgorCSAqIFVzZSB0aGUgZGV2aWNlJ3MgcHJlZmVycmVkIEkvTyBzaXplIGZvciByZWFkcyBhbmQgd3JpdGVzCisJICogdW5sZXNzIHRoZSByZXBvcnRlZCB2YWx1ZSBpcyB1bnJlYXNvbmFibHkgbGFyZ2UgKG9yIGdhcmJhZ2UpLgorCSAqLworCWlmIChzZGtwLT5vcHRfeGZlcl9ibG9ja3MgJiYgc2RrcC0+b3B0X3hmZXJfYmxvY2tzIDw9IGRldl9tYXggJiYKKwkgICAgc2RrcC0+b3B0X3hmZXJfYmxvY2tzIDw9IFNEX0RFRl9YRkVSX0JMT0NLUykKKwkJcndfbWF4ID0gcS0+bGltaXRzLmlvX29wdCA9CisJCQlsb2dpY2FsX3RvX3NlY3RvcnMoc2RwLCBzZGtwLT5vcHRfeGZlcl9ibG9ja3MpOworCWVsc2UKKwkJcndfbWF4ID0gQkxLX0RFRl9NQVhfU0VDVE9SUzsKKworCS8qIENvbWJpbmUgd2l0aCBjb250cm9sbGVyIGxpbWl0cyAqLworCXEtPmxpbWl0cy5tYXhfc2VjdG9ycyA9IG1pbihyd19tYXgsIHF1ZXVlX21heF9od19zZWN0b3JzKHEpKTsKIAogCXNldF9jYXBhY2l0eShkaXNrLCBzZGtwLT5jYXBhY2l0eSk7CiAJc2RfY29uZmlnX3dyaXRlX3NhbWUoc2RrcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IDYzYmE1Y2EuLjVmMmE4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5oCkBAIC02Nyw2ICs2Nyw3IEBACiAJYXRvbWljX3QJb3BlbmVyczsKIAlzZWN0b3JfdAljYXBhY2l0eTsJLyogc2l6ZSBpbiA1MTItYnl0ZSBzZWN0b3JzICovCiAJdTMyCQltYXhfeGZlcl9ibG9ja3M7CisJdTMyCQlvcHRfeGZlcl9ibG9ja3M7CiAJdTMyCQltYXhfd3NfYmxvY2tzOwogCXUzMgkJbWF4X3VubWFwX2Jsb2NrczsKIAl1MzIJCXVubWFwX2dyYW51bGFyaXR5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Nlcy5jIGIvZHJpdmVycy9zY3NpL3Nlcy5jCmluZGV4IGRjYjBkNzYuLjA0NGQwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2VzLmMKQEAgLTg0LDYgKzg0LDcgQEAKIHN0YXRpYyBpbnQgc2VzX3JlY3ZfZGlhZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBwYWdlX2NvZGUsCiAJCQkgdm9pZCAqYnVmLCBpbnQgYnVmZmxlbikKIHsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgY21kW10gPSB7CiAJCVJFQ0VJVkVfRElBR05PU1RJQywKIAkJMSwJCS8qIFNldCBQQ1YgYml0ICovCkBAIC05Miw5ICs5MywyNiBAQAogCQlidWZmbGVuICYgMHhmZiwKIAkJMAogCX07CisJdW5zaWduZWQgY2hhciByZWN2X3BhZ2VfY29kZTsKIAotCXJldHVybiBzY3NpX2V4ZWN1dGVfcmVxKHNkZXYsIGNtZCwgRE1BX0ZST01fREVWSUNFLCBidWYsIGJ1ZmZsZW4sCisJcmV0ID0gIHNjc2lfZXhlY3V0ZV9yZXEoc2RldiwgY21kLCBETUFfRlJPTV9ERVZJQ0UsIGJ1ZiwgYnVmZmxlbiwKIAkJCQlOVUxMLCBTRVNfVElNRU9VVCwgU0VTX1JFVFJJRVMsIE5VTEwpOworCWlmICh1bmxpa2VseSghcmV0KSkKKwkJcmV0dXJuIHJldDsKKworCXJlY3ZfcGFnZV9jb2RlID0gKCh1bnNpZ25lZCBjaGFyICopYnVmKVswXTsKKworCWlmIChsaWtlbHkocmVjdl9wYWdlX2NvZGUgPT0gcGFnZV9jb2RlKSkKKwkJcmV0dXJuIHJldDsKKworCS8qIHN1Y2Nlc3NmdWwgZGlhZ25vc3RpYyBidXQgd3JvbmcgcGFnZSBjb2RlLiAgVGhpcyBoYXBwZW5zIHRvIHNvbWUKKwkgKiBVU0IgZGV2aWNlcywganVzdCBwcmludCBhIG1lc3NhZ2UgYW5kIHByZXRlbmQgdGhlcmUgd2FzIGFuIGVycm9yICovCisKKwlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwKKwkJICAgICJXcm9uZyBkaWFnbm9zdGljIHBhZ2U7IGFza2VkIGZvciAlZCBnb3QgJXVcbiIsCisJCSAgICBwYWdlX2NvZGUsIHJlY3ZfcGFnZV9jb2RlKTsKKworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IHNlc19zZW5kX2RpYWcoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcGFnZV9jb2RlLApAQCAtNTQxLDcgKzU1OSwxNSBAQAogCQkJaWYgKGRlc2NfcHRyKQogCQkJCWRlc2NfcHRyICs9IGxlbjsKIAotCQkJaWYgKGFkZGxfZGVzY19wdHIpCisJCQlpZiAoYWRkbF9kZXNjX3B0ciAmJgorCQkJICAgIC8qIG9ubHkgZmluZCBhZGRpdGlvbmFsIGRlc2NyaXB0aW9ucyBmb3Igc3BlY2lmaWMgZGV2aWNlcyAqLworCQkJICAgICh0eXBlX3B0clswXSA9PSBFTkNMT1NVUkVfQ09NUE9ORU5UX0RFVklDRSB8fAorCQkJICAgICB0eXBlX3B0clswXSA9PSBFTkNMT1NVUkVfQ09NUE9ORU5UX0FSUkFZX0RFVklDRSB8fAorCQkJICAgICB0eXBlX3B0clswXSA9PSBFTkNMT1NVUkVfQ09NUE9ORU5UX1NBU19FWFBBTkRFUiB8fAorCQkJICAgICAvKiB0aGVzZSBlbGVtZW50cyBhcmUgb3B0aW9uYWwgKi8KKwkJCSAgICAgdHlwZV9wdHJbMF0gPT0gRU5DTE9TVVJFX0NPTVBPTkVOVF9TQ1NJX1RBUkdFVF9QT1JUIHx8CisJCQkgICAgIHR5cGVfcHRyWzBdID09IEVOQ0xPU1VSRV9DT01QT05FTlRfU0NTSV9JTklUSUFUT1JfUE9SVCB8fAorCQkJICAgICB0eXBlX3B0clswXSA9PSBFTkNMT1NVUkVfQ09NUE9ORU5UX0NPTlRST0xMRVJfRUxFQ1RST05JQ1MpKQogCQkJCWFkZGxfZGVzY19wdHIgKz0gYWRkbF9kZXNjX3B0clsxXSArIDI7CiAKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0LmMgYi9kcml2ZXJzL3Njc2kvc3QuYwppbmRleCBlMGExZTUyLi4yZTUyMjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvc3QuYwpAQCAtNDA4Myw2ICs0MDgzLDcgQEAKIAl9CiAJY2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljZGV2LT5vcHMgPSAmc3RfZm9wczsKKwlTVG0tPmNkZXZzW3Jld10gPSBjZGV2OwogCiAJZXJyb3IgPSBjZGV2X2FkZChjZGV2LCBjZGV2X2Rldm5vLCAxKTsKIAlpZiAoZXJyb3IpIHsKQEAgLTQwOTEsNyArNDA5Miw2IEBACiAJCXByX2Vycigic3QlZDogRGV2aWNlIG5vdCBhdHRhY2hlZC5cbiIsIGRldl9udW0pOwogCQlnb3RvIG91dF9mcmVlOwogCX0KLQlTVG0tPmNkZXZzW3Jld10gPSBjZGV2OwogCiAJaSA9IG1vZGUgPDwgKDQgLSBTVF9OQlJfTU9ERV9CSVRTKTsKIAlzbnByaW50ZihuYW1lLCAxMCwgIiVzJXMlcyIsIHJldyA/ICJuIiA6ICIiLApAQCAtNDExMCw4ICs0MTEwLDkgQEAKIAlyZXR1cm4gMDsKIG91dF9mcmVlOgogCWNkZXZfZGVsKFNUbS0+Y2RldnNbcmV3XSk7Ci0JU1RtLT5jZGV2c1tyZXddID0gTlVMTDsKIG91dDoKKwlTVG0tPmNkZXZzW3Jld10gPSBOVUxMOworCVNUbS0+ZGV2c1tyZXddID0gTlVMTDsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvcG1fcnVudGltZS5jIGIvZHJpdmVycy9zaC9wbV9ydW50aW1lLmMKaW5kZXggMjVhYmQ0ZS4uOTFhMDAzMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvcG1fcnVudGltZS5jCisrKyBiL2RyaXZlcnMvc2gvcG1fcnVudGltZS5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNoX3BtX3J1bnRpbWVfaW5pdCh2b2lkKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX1NITU9CSUxFX01VTFRJKSkgeworCWlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX1NITU9CSUxFKSkgewogCQlpZiAoIW9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCiAJCQkJCSAgICAgInJlbmVzYXMsY3BnLW1zdHAtY2xvY2tzIikpCiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL3NvYy9tZWRpYXRlay9LY29uZmlnCmluZGV4IDlkNTA2ODIuLjBhNGVhODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL21lZGlhdGVrL0tjb25maWcKKysrIGIvZHJpdmVycy9zb2MvbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMjMsNiArMjMsNyBAQAogY29uZmlnIE1US19TQ1BTWVMKIAlib29sICJNZWRpYVRlayBTQ1BTWVMgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgQ09NUElMRV9URVNUCisJZGVmYXVsdCBBUk02NCAmJiBBUkNIX01FRElBVEVLCiAJc2VsZWN0IFJFR01BUAogCXNlbGVjdCBNVEtfSU5GUkFDRkcKIAlzZWxlY3QgUE1fR0VORVJJQ19ET01BSU5TIGlmIFBNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9rbmF2X3Ftc3NfcXVldWUuYyBiL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zc19xdWV1ZS5jCmluZGV4IGYzYTBiNmEuLjhjMDNhODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zc19xdWV1ZS5jCisrKyBiL2RyaXZlcnMvc29jL3RpL2tuYXZfcW1zc19xdWV1ZS5jCkBAIC0xMTc5LDcgKzExNzksNyBAQAogCiAJCWJsb2NrKys7CiAJCWlmICghYmxvY2stPnNpemUpCi0JCQlyZXR1cm4gMDsKKwkJCWNvbnRpbnVlOwogCiAJCWRldl9kYmcoa2Rldi0+ZGV2LCAibGlua3JhbTE6IHBoeXM6JXgsIHZpcnQ6JXAsIHNpemU6JXhcbiIsCiAJCQlibG9jay0+cGh5cywgYmxvY2stPnZpcnQsIGJsb2NrLT5zaXplKTsKQEAgLTE1MTksOSArMTUxOSw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShrbmF2X2FjY19maXJtd2FyZXMpOyBpKyspIHsKIAkJaWYgKGtuYXZfYWNjX2Zpcm13YXJlc1tpXSkgewotCQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsCi0JCQkJCSAgICAgICBrbmF2X2FjY19maXJtd2FyZXNbaV0sCi0JCQkJCSAgICAgICBrZGV2LT5kZXYpOworCQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoJmZ3LAorCQkJCQkJICAgICAga25hdl9hY2NfZmlybXdhcmVzW2ldLAorCQkJCQkJICAgICAga2Rldi0+ZGV2KTsKIAkJCWlmICghcmV0KSB7CiAJCQkJZm91bmQgPSB0cnVlOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWJjbTYzeHguYyBiL2RyaXZlcnMvc3BpL3NwaS1iY202M3h4LmMKaW5kZXggMDY4NThlMC4uYmY5YTYxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWJjbTYzeHguYworKysgYi9kcml2ZXJzL3NwaS9zcGktYmNtNjN4eC5jCkBAIC01NjIsOCArNTYyLDggQEAKIAkJZ290byBvdXRfY2xrX2Rpc2FibGU7CiAJfQogCi0JZGV2X2luZm8oZGV2LCAiYXQgMHglMDh4IChpcnEgJWQsIEZJRk9zIHNpemUgJWQpXG4iLAotCQkgci0+c3RhcnQsIGlycSwgYnMtPmZpZm9fc2l6ZSk7CisJZGV2X2luZm8oZGV2LCAiYXQgJXByIChpcnEgJWQsIEZJRk9zIHNpemUgJWQpXG4iLAorCQkgciwgaXJxLCBicy0+Zmlmb19zaXplKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZnNsLWRzcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS1mc2wtZHNwaS5jCmluZGV4IDU5YTExNDMuLjM5NDEyYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1mc2wtZHNwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1mc2wtZHNwaS5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCi0JcmVnbWFwX3JlYWQoZHNwaS0+cmVnbWFwLCBTUElfQ1RBUihkc3BpLT5jcyksICZ2YWwpOworCXJlZ21hcF9yZWFkKGRzcGktPnJlZ21hcCwgU1BJX0NUQVIoMCksICZ2YWwpOwogCiAJcmV0dXJuICgodmFsICYgU1BJX0ZSQU1FX0JJVFNfTUFTSykgPT0gU1BJX0ZSQU1FX0JJVFMoOCkpID8gMCA6IDE7CiB9CkBAIC0yNTcsNyArMjU3LDcgQEAKIAogCXJldHVybglTUElfUFVTSFJfVFhEQVRBKGQxNikgfAogCQlTUElfUFVTSFJfUENTKGRzcGktPmNzKSB8Ci0JCVNQSV9QVVNIUl9DVEFTKGRzcGktPmNzKSB8CisJCVNQSV9QVVNIUl9DVEFTKDApIHwKIAkJU1BJX1BVU0hSX0NPTlQ7CiB9CiAKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQkgKi8KIAkJaWYgKHR4X3dvcmQgJiYgKGRzcGktPmxlbiA9PSAxKSkgewogCQkJZHNwaS0+ZGF0YWZsYWdzIHw9IFRSQU5fU1RBVEVfV09SRF9PRERfTlVNOwotCQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzcGktPnJlZ21hcCwgU1BJX0NUQVIoZHNwaS0+Y3MpLAorCQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzcGktPnJlZ21hcCwgU1BJX0NUQVIoMCksCiAJCQkJCVNQSV9GUkFNRV9CSVRTX01BU0ssIFNQSV9GUkFNRV9CSVRTKDgpKTsKIAkJCXR4X3dvcmQgPSAwOwogCQl9CkBAIC0zMzksNyArMzM5LDcgQEAKIAogCWlmICh0eF93b3JkICYmIChkc3BpLT5sZW4gPT0gMSkpIHsKIAkJZHNwaS0+ZGF0YWZsYWdzIHw9IFRSQU5fU1RBVEVfV09SRF9PRERfTlVNOwotCQlyZWdtYXBfdXBkYXRlX2JpdHMoZHNwaS0+cmVnbWFwLCBTUElfQ1RBUihkc3BpLT5jcyksCisJCXJlZ21hcF91cGRhdGVfYml0cyhkc3BpLT5yZWdtYXAsIFNQSV9DVEFSKDApLAogCQkJCVNQSV9GUkFNRV9CSVRTX01BU0ssIFNQSV9GUkFNRV9CSVRTKDgpKTsKIAkJdHhfd29yZCA9IDA7CiAJfQpAQCAtNDA3LDcgKzQwNyw3IEBACiAJCXJlZ21hcF91cGRhdGVfYml0cyhkc3BpLT5yZWdtYXAsIFNQSV9NQ1IsCiAJCQkJU1BJX01DUl9DTFJfVFhGIHwgU1BJX01DUl9DTFJfUlhGLAogCQkJCVNQSV9NQ1JfQ0xSX1RYRiB8IFNQSV9NQ1JfQ0xSX1JYRik7Ci0JCXJlZ21hcF93cml0ZShkc3BpLT5yZWdtYXAsIFNQSV9DVEFSKGRzcGktPmNzKSwKKwkJcmVnbWFwX3dyaXRlKGRzcGktPnJlZ21hcCwgU1BJX0NUQVIoMCksCiAJCQkJZHNwaS0+Y3VyX2NoaXAtPmN0YXJfdmFsKTsKIAogCQl0cmFuc19tb2RlID0gZHNwaS0+ZGV2dHlwZV9kYXRhLT50cmFuc19tb2RlOwpAQCAtNTY2LDcgKzU2Niw3IEBACiAJCWlmICghZHNwaS0+bGVuKSB7CiAJCQlpZiAoZHNwaS0+ZGF0YWZsYWdzICYgVFJBTl9TVEFURV9XT1JEX09ERF9OVU0pIHsKIAkJCQlyZWdtYXBfdXBkYXRlX2JpdHMoZHNwaS0+cmVnbWFwLAotCQkJCQkJICAgU1BJX0NUQVIoZHNwaS0+Y3MpLAorCQkJCQkJICAgU1BJX0NUQVIoMCksCiAJCQkJCQkgICBTUElfRlJBTUVfQklUU19NQVNLLAogCQkJCQkJICAgU1BJX0ZSQU1FX0JJVFMoMTYpKTsKIAkJCQlkc3BpLT5kYXRhZmxhZ3MgJj0gflRSQU5fU1RBVEVfV09SRF9PRERfTlVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jIGIvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jCmluZGV4IDU2Mzk1NGEuLjc4NDAwNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1tdDY1eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGktbXQ2NXh4LmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCWlmICghc3BpLT5jb250cm9sbGVyX2RhdGEpCiAJCXNwaS0+Y29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikmbXRrX2RlZmF1bHRfY2hpcF9pbmZvOwogCi0JaWYgKG1kYXRhLT5kZXZfY29tcC0+bmVlZF9wYWRfc2VsKQorCWlmIChtZGF0YS0+ZGV2X2NvbXAtPm5lZWRfcGFkX3NlbCAmJiBncGlvX2lzX3ZhbGlkKHNwaS0+Y3NfZ3BpbykpCiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChzcGktPmNzX2dwaW8sICEoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpKTsKIAogCXJldHVybiAwOwpAQCAtNjMyLDEzICs2MzIsMjMgQEAKIAkJCWdvdG8gZXJyX3B1dF9tYXN0ZXI7CiAJCX0KIAotCQlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKSB7Ci0JCQlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdCgmcGRldi0+ZGV2LCBtYXN0ZXItPmNzX2dwaW9zW2ldLAotCQkJCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOwotCQkJaWYgKHJldCkgewotCQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkJImNhbid0IGdldCBDUyBHUElPICVpXG4iLCBpKTsKLQkJCQlnb3RvIGVycl9wdXRfbWFzdGVyOworCQlpZiAoIW1hc3Rlci0+Y3NfZ3Bpb3MgJiYgbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA+IDEpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiY3NfZ3Bpb3Mgbm90IHNwZWNpZmllZCBhbmQgbnVtX2NoaXBzZWxlY3QgPiAxXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycl9wdXRfbWFzdGVyOworCQl9CisKKwkJaWYgKG1hc3Rlci0+Y3NfZ3Bpb3MpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspIHsKKwkJCQlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdCgmcGRldi0+ZGV2LAorCQkJCQkJCW1hc3Rlci0+Y3NfZ3Bpb3NbaV0sCisJCQkJCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCQkJImNhbid0IGdldCBDUyBHUElPICVpXG4iLCBpKTsKKwkJCQkJZ290byBlcnJfcHV0X21hc3RlcjsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktcGwwMjIuYyBiL2RyaXZlcnMvc3BpL3NwaS1wbDAyMi5jCmluZGV4IDk0YWY4MDYuLjVlNWZkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1wbDAyMi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1wbDAyMi5jCkBAIC0xMTcxLDE5ICsxMTcxLDMxIEBACiBzdGF0aWMgaW50IHBsMDIyX2RtYV9hdXRvcHJvYmUoc3RydWN0IHBsMDIyICpwbDAyMikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGwwMjItPmFkZXYtPmRldjsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJaW50IGVycjsKIAogCS8qIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIERNQSBjaGFubmVscyBmcm9tIHBsYXRmb3JtLCBub3JtYWxseSB1c2luZyBEVCAqLwotCXBsMDIyLT5kbWFfcnhfY2hhbm5lbCA9IGRtYV9yZXF1ZXN0X3NsYXZlX2NoYW5uZWwoZGV2LCAicngiKTsKLQlpZiAoIXBsMDIyLT5kbWFfcnhfY2hhbm5lbCkKKwljaGFuID0gZG1hX3JlcXVlc3Rfc2xhdmVfY2hhbm5lbF9yZWFzb24oZGV2LCAicngiKTsKKwlpZiAoSVNfRVJSKGNoYW4pKSB7CisJCWVyciA9IFBUUl9FUlIoY2hhbik7CiAJCWdvdG8gZXJyX25vX3J4Y2hhbjsKKwl9CiAKLQlwbDAyMi0+ZG1hX3R4X2NoYW5uZWwgPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsKGRldiwgInR4Iik7Ci0JaWYgKCFwbDAyMi0+ZG1hX3R4X2NoYW5uZWwpCisJcGwwMjItPmRtYV9yeF9jaGFubmVsID0gY2hhbjsKKworCWNoYW4gPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsX3JlYXNvbihkZXYsICJ0eCIpOworCWlmIChJU19FUlIoY2hhbikpIHsKKwkJZXJyID0gUFRSX0VSUihjaGFuKTsKIAkJZ290byBlcnJfbm9fdHhjaGFuOworCX0KKworCXBsMDIyLT5kbWFfdHhfY2hhbm5lbCA9IGNoYW47CiAKIAlwbDAyMi0+ZHVtbXlwYWdlID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghcGwwMjItPmR1bW15cGFnZSkKKwlpZiAoIXBsMDIyLT5kdW1teXBhZ2UpIHsKKwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfbm9fZHVtbXlwYWdlOworCX0KIAogCXJldHVybiAwOwogCkBAIC0xMTk0LDcgKzEyMDYsNyBAQAogCWRtYV9yZWxlYXNlX2NoYW5uZWwocGwwMjItPmRtYV9yeF9jaGFubmVsKTsKIAlwbDAyMi0+ZG1hX3J4X2NoYW5uZWwgPSBOVUxMOwogZXJyX25vX3J4Y2hhbjoKLQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gZXJyOwogfQogCQkKIHN0YXRpYyB2b2lkIHRlcm1pbmF0ZV9kbWEoc3RydWN0IHBsMDIyICpwbDAyMikKQEAgLTIyMzYsNiArMjI0OCwxMCBAQAogCiAJLyogR2V0IERNQSBjaGFubmVscywgdHJ5IGF1dG9jb25maWd1cmF0aW9uIGZpcnN0ICovCiAJc3RhdHVzID0gcGwwMjJfZG1hX2F1dG9wcm9iZShwbDAyMik7CisJaWYgKHN0YXR1cyA9PSAtRVBST0JFX0RFRkVSKSB7CisJCWRldl9kYmcoZGV2LCAiZGVmZXJyaW5nIHByb2JlIHRvIGdldCBETUEgY2hhbm5lbFxuIik7CisJCWdvdG8gZXJyX25vX2lycTsKKwl9CiAKIAkvKiBJZiB0aGF0IGZhaWxlZCwgdXNlIGNoYW5uZWxzIGZyb20gcGxhdGZvcm1faW5mbyAqLwogCWlmIChzdGF0dXMgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLmMKaW5kZXggZTI0MTViZS4uZGVlMWNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKQEAgLTM3Niw2ICszNzYsNyBAQAogCiAvKioKICAqIF9fc3BpX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgU1BJIGRyaXZlcgorICogQG93bmVyOiBvd25lciBtb2R1bGUgb2YgdGhlIGRyaXZlciB0byByZWdpc3RlcgogICogQHNkcnY6IHRoZSBkcml2ZXIgdG8gcmVnaXN0ZXIKICAqIENvbnRleHQ6IGNhbiBzbGVlcAogICoKQEAgLTE3MDQsNyArMTcwNSw3IEBACiAJbWFzdGVyLT5idXNfbnVtID0gLTE7CiAJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IDE7CiAJbWFzdGVyLT5kZXYuY2xhc3MgPSAmc3BpX21hc3Rlcl9jbGFzczsKLQltYXN0ZXItPmRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKGRldik7CisJbWFzdGVyLT5kZXYucGFyZW50ID0gZGV2OwogCXNwaV9tYXN0ZXJfc2V0X2RldmRhdGEobWFzdGVyLCAmbWFzdGVyWzFdKTsKIAogCXJldHVybiBtYXN0ZXI7CkBAIC0yMTMwLDYgKzIxMzEsNyBAQAogCSAqIFNldCB0cmFuc2ZlciB0eF9uYml0cyBhbmQgcnhfbmJpdHMgYXMgc2luZ2xlIHRyYW5zZmVyIGRlZmF1bHQKIAkgKiAoU1BJX05CSVRTX1NJTkdMRSkgaWYgaXQgaXMgbm90IHNldCBmb3IgdGhpcyB0cmFuc2Zlci4KIAkgKi8KKwltZXNzYWdlLT5mcmFtZV9sZW5ndGggPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoeGZlciwgJm1lc3NhZ2UtPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgewogCQltZXNzYWdlLT5mcmFtZV9sZW5ndGggKz0geGZlci0+bGVuOwogCQlpZiAoIXhmZXItPmJpdHNfcGVyX3dvcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCmluZGV4IDkxYTBmY2QuLmQwZTdkZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaWRldi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCkBAIC02NTEsMTEgKzY1MSwxMSBAQAogCQlrZnJlZShzcGlkZXYtPnJ4X2J1ZmZlcik7CiAJCXNwaWRldi0+cnhfYnVmZmVyID0gTlVMTDsKIAorCQlzcGluX2xvY2tfaXJxKCZzcGlkZXYtPnNwaV9sb2NrKTsKIAkJaWYgKHNwaWRldi0+c3BpKQogCQkJc3BpZGV2LT5zcGVlZF9oeiA9IHNwaWRldi0+c3BpLT5tYXhfc3BlZWRfaHo7CiAKIAkJLyogLi4uIGFmdGVyIHdlIHVuYm91bmQgZnJvbSB0aGUgdW5kZXJseWluZyBkZXZpY2U/ICovCi0JCXNwaW5fbG9ja19pcnEoJnNwaWRldi0+c3BpX2xvY2spOwogCQlkb2ZyZWUgPSAoc3BpZGV2LT5zcGkgPT0gTlVMTCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmc3BpZGV2LT5zcGlfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb25fY2h1bmtfaGVhcC5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9jaHVua19oZWFwLmMKaW5kZXggMTk1YzQxZC4uMDgxMzE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9jaHVua19oZWFwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbl9jaHVua19oZWFwLmMKQEAgLTgxLDcgKzgxLDcgQEAKIGVycjoKIAlzZyA9IHRhYmxlLT5zZ2w7CiAJZm9yIChpIC09IDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWdlbl9wb29sX2ZyZWUoY2h1bmtfaGVhcC0+cG9vbCwgc2dfcGh5cyhzZykgJiBQQUdFX01BU0ssCisJCWdlbl9wb29sX2ZyZWUoY2h1bmtfaGVhcC0+cG9vbCwgcGFnZV90b19waHlzKHNnX3BhZ2Uoc2cpKSwKIAkJCSAgICAgIHNnLT5sZW5ndGgpOwogCQlzZyA9IHNnX25leHQoc2cpOwogCX0KQEAgLTEwOSw3ICsxMDksNyBAQAogCQkJCQkJCURNQV9CSURJUkVDVElPTkFMKTsKIAogCWZvcl9lYWNoX3NnKHRhYmxlLT5zZ2wsIHNnLCB0YWJsZS0+bmVudHMsIGkpIHsKLQkJZ2VuX3Bvb2xfZnJlZShjaHVua19oZWFwLT5wb29sLCBzZ19waHlzKHNnKSAmIFBBR0VfTUFTSywKKwkJZ2VuX3Bvb2xfZnJlZShjaHVua19oZWFwLT5wb29sLCBwYWdlX3RvX3BoeXMoc2dfcGFnZShzZykpLAogCQkJICAgICAgc2ctPmxlbmd0aCk7CiAJfQogCWNodW5rX2hlYXAtPmFsbG9jYXRlZCAtPSBhbGxvY2F0ZWRfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZwppbmRleCA2ZDViMzhkLi45ZDdmMDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnCkBAIC0xOCw3ICsxOCw4IEBACiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9LY29uZmlnIgogCiBjb25maWcgSUlPX0RVTU1ZX0VWR0VOCi0gICAgICAgdHJpc3RhdGUKKwl0cmlzdGF0ZQorCXNlbGVjdCBJUlFfV09SSwogCiBjb25maWcgSUlPX1NJTVBMRV9EVU1NWQogICAgICAgIHRyaXN0YXRlICJBbiBleGFtcGxlIGRyaXZlciB3aXRoIG5vIGhhcmR3YXJlIHJlcXVpcmVtZW50cyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2xwYzMyeHhfYWRjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9scGMzMnh4X2FkYy5jCmluZGV4IGQxMWM1NGIuLmI1MWYyMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2xwYzMyeHhfYWRjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbHBjMzJ4eF9hZGMuYwpAQCAtNzYsNyArNzYsNyBAQAogCiAJaWYgKG1hc2sgPT0gSUlPX0NIQU5fSU5GT19SQVcpIHsKIAkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7Ci0JCWNsa19lbmFibGUoaW5mby0+Y2xrKTsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKGluZm8tPmNsayk7CiAJCS8qIE1lYXN1cmVtZW50IHNldHVwICovCiAJCV9fcmF3X3dyaXRlbChBRF9JTlRFUk5BTCB8IChjaGFuLT5hZGRyZXNzKSB8IEFEX1JFRnAgfCBBRF9SRUZtLAogCQkJICAgICBMUEMzMlhYX0FEQ19TRUxFQ1QoaW5mby0+YWRjX2Jhc2UpKTsKQEAgLTg0LDcgKzg0LDcgQEAKIAkJX19yYXdfd3JpdGVsKEFEX1BETl9DVFJMIHwgQURfU1RST0JFLAogCQkJICAgICBMUEMzMlhYX0FEQ19DVFJMKGluZm8tPmFkY19iYXNlKSk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmluZm8tPmNvbXBsZXRpb24pOyAvKiBzZXQgYnkgSVNSICovCi0JCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbmZvLT5jbGspOwogCQkqdmFsID0gaW5mby0+dmFsdWU7CiAJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaWlvX3NpbXBsZV9kdW1teV9ldmVudHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaWlvX3NpbXBsZV9kdW1teV9ldmVudHMuYwppbmRleCBiZmJmMWM1Li42ZWI2MDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpb19zaW1wbGVfZHVtbXlfZXZlbnRzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9paW9fc2ltcGxlX2R1bW15X2V2ZW50cy5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAlzdHJ1Y3QgaWlvX2R1bW15X3N0YXRlICpzdCA9IGlpb19wcml2KGluZGlvX2Rldik7CiAKIAlzdC0+ZXZlbnRfdGltZXN0YW1wID0gaWlvX2dldF90aW1lX25zKCk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saWJjZnNfaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvaW5jbHVkZS9saW51eC9saWJjZnMvbGliY2ZzX2lvY3RsLmgKaW5kZXggZjVkNzQxZi4uNDg1YWIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9pbmNsdWRlL2xpbnV4L2xpYmNmcy9saWJjZnNfaW9jdGwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2luY2x1ZGUvbGludXgvbGliY2ZzL2xpYmNmc19pb2N0bC5oCkBAIC0xMTAsNyArMTEwLDYgQEAKICNkZWZpbmUgSU9DX0xJQkNGU19DTEVBUl9ERUJVRwkgICAgIF9JT1dSKCdlJywgMzEsIGxvbmcpCiAjZGVmaW5lIElPQ19MSUJDRlNfTUFSS19ERUJVRwkgICAgICBfSU9XUignZScsIDMyLCBsb25nKQogI2RlZmluZSBJT0NfTElCQ0ZTX01FTUhPRwkJICBfSU9XUignZScsIDM2LCBsb25nKQotI2RlZmluZSBJT0NfTElCQ0ZTX1BJTkdfVEVTVAkgICAgICAgX0lPV1IoJ2UnLCAzNywgbG9uZykKIC8qIGxuZXQgaW9jdGxzICovCiAjZGVmaW5lIElPQ19MSUJDRlNfR0VUX05JCQkgIF9JT1dSKCdlJywgNTAsIGxvbmcpCiAjZGVmaW5lIElPQ19MSUJDRlNfRkFJTF9OSUQJCV9JT1dSKCdlJywgNTEsIGxvbmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9saWJjZnMvbW9kdWxlLmMKaW5kZXggMDdhNjg1OS4uZTdjMmIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGliY2ZzL21vZHVsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xpYmNmcy9tb2R1bGUuYwpAQCAtMjc0LDIzICsyNzQsNiBAQAogCQl9CiAJCWJyZWFrOwogCi0JY2FzZSBJT0NfTElCQ0ZTX1BJTkdfVEVTVDogewotCQlleHRlcm4gdm9pZCAoa3BpbmdfY2xpZW50KShzdHJ1Y3QgbGliY2ZzX2lvY3RsX2RhdGEgKik7Ci0JCXZvaWQgKCpwaW5nKShzdHJ1Y3QgbGliY2ZzX2lvY3RsX2RhdGEgKik7Ci0KLQkJQ0RFQlVHKERfSU9DVEwsICJkb2luZyAlZCBwaW5ncyB0byBuaWQgJXMgKCVzKVxuIiwKLQkJICAgICAgIGRhdGEtPmlvY19jb3VudCwgbGliY2ZzX25pZDJzdHIoZGF0YS0+aW9jX25pZCksCi0JCSAgICAgICBsaWJjZnNfbmlkMnN0cihkYXRhLT5pb2NfbmlkKSk7Ci0JCXBpbmcgPSBzeW1ib2xfZ2V0KGtwaW5nX2NsaWVudCk7Ci0JCWlmICghcGluZykKLQkJCUNFUlJPUigic3ltYm9sX2dldCBmYWlsZWRcbiIpOwotCQllbHNlIHsKLQkJCXBpbmcoZGF0YSk7Ci0JCQlzeW1ib2xfcHV0KGtwaW5nX2NsaWVudCk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCiAJZGVmYXVsdDogewogCQlzdHJ1Y3QgbGliY2ZzX2lvY3RsX2hhbmRsZXIgKmhhbmQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGVjaG8vZWNob19jbGllbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL29iZGVjaG8vZWNob19jbGllbnQuYwppbmRleCBmNjFlZjY2Li5hNGE5YTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbHVzdHJlL2x1c3RyZS9vYmRlY2hvL2VjaG9fY2xpZW50LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvb2JkZWNoby9lY2hvX2NsaWVudC5jCkBAIC0xMjcwLDYgKzEyNzAsNyBAQAogZWNob19jb3B5b3V0X2xzbShzdHJ1Y3QgbG92X3N0cmlwZV9tZCAqbHNtLCB2b2lkICpfdWxzbSwgaW50IHVsc21fbm9iKQogewogCXN0cnVjdCBsb3Zfc3RyaXBlX21kICp1bHNtID0gX3Vsc207CisJc3RydWN0IGxvdl9vaW5mbyAqKnA7CiAJaW50IG5vYiwgaTsKIAogCW5vYiA9IG9mZnNldG9mKHN0cnVjdCBsb3Zfc3RyaXBlX21kLCBsc21fb2luZm9bbHNtLT5sc21fc3RyaXBlX2NvdW50XSk7CkBAIC0xMjc5LDkgKzEyODAsMTAgQEAKIAlpZiAoY29weV90b191c2VyKHVsc20sIGxzbSwgc2l6ZW9mKCp1bHNtKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZm9yIChpID0gMDsgaSA8IGxzbS0+bHNtX3N0cmlwZV9jb3VudDsgaSsrKSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIodWxzbS0+bHNtX29pbmZvW2ldLCBsc20tPmxzbV9vaW5mb1tpXSwKLQkJCQkgICAgICBzaXplb2YobHNtLT5sc21fb2luZm9bMF0pKSkKKwlmb3IgKGkgPSAwLCBwID0gbHNtLT5sc21fb2luZm87IGkgPCBsc20tPmxzbV9zdHJpcGVfY291bnQ7IGkrKywgcCsrKSB7CisJCXN0cnVjdCBsb3Zfb2luZm8gX191c2VyICp1cDsKKwkJaWYgKGdldF91c2VyKHVwLCB1bHNtLT5sc21fb2luZm8gKyBpKSB8fAorCQkgICAgY29weV90b191c2VyKHVwLCAqcCwgc2l6ZW9mKHN0cnVjdCBsb3Zfb2luZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEyODksOSArMTI5MSwxMCBAQAogCiBzdGF0aWMgaW50CiBlY2hvX2NvcHlpbl9sc20oc3RydWN0IGVjaG9fZGV2aWNlICplZCwgc3RydWN0IGxvdl9zdHJpcGVfbWQgKmxzbSwKLQkJIHZvaWQgKnVsc20sIGludCB1bHNtX25vYikKKwkJc3RydWN0IGxvdl9zdHJpcGVfbWQgX191c2VyICp1bHNtLCBpbnQgdWxzbV9ub2IpCiB7CiAJc3RydWN0IGVjaG9fY2xpZW50X29iZCAqZWMgPSBlZC0+ZWRfZWM7CisJc3RydWN0IGxvdl9vaW5mbyAqKnA7CiAJaW50CQkgICAgIGk7CiAKIAlpZiAodWxzbV9ub2IgPCBzaXplb2YoKmxzbSkpCkBAIC0xMzA2LDExICsxMzA5LDEwIEBACiAJICAgICgoX191NjQpbHNtLT5sc21fc3RyaXBlX3NpemUgKiBsc20tPmxzbV9zdHJpcGVfY291bnQgPiB+MFVMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbHNtLT5sc21fc3RyaXBlX2NvdW50OyBpKyspIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGxzbS0+bHNtX29pbmZvW2ldLAotCQkJCSAgICAgICAoKHN0cnVjdCBsb3Zfc3RyaXBlX21kICopdWxzbSktPiBcCi0JCQkJICAgICAgIGxzbV9vaW5mb1tpXSwKLQkJCQkgICAgICAgc2l6ZW9mKGxzbS0+bHNtX29pbmZvWzBdKSkpCisJZm9yIChpID0gMCwgcCA9IGxzbS0+bHNtX29pbmZvOyBpIDwgbHNtLT5sc21fc3RyaXBlX2NvdW50OyBpKyssIHArKykgeworCQlzdHJ1Y3QgbG92X29pbmZvIF9fdXNlciAqdXA7CisJCWlmIChnZXRfdXNlcih1cCwgdWxzbS0+bHNtX29pbmZvICsgaSkgfHwKKwkJICAgIGNvcHlfZnJvbV91c2VyKCpwLCB1cCwgc2l6ZW9mKHN0cnVjdCBsb3Zfb2luZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aWxjMTAwMC9jb3JlY29uZmlndXJhdG9yLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2lsYzEwMDAvY29yZWNvbmZpZ3VyYXRvci5jCmluZGV4IGUxMGM2ZmYuLjk1NjhiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aWxjMTAwMC9jb3JlY29uZmlndXJhdG9yLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbGMxMDAwL2NvcmVjb25maWd1cmF0b3IuYwpAQCAtMTMsMTIgKzEzLDggQEAKICNpbmNsdWRlICJ3aWxjX3dsYW4uaCIKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2RlZmluZSBUQUdfUEFSQU1fT0ZGU0VUCShNQUNfSERSX0xFTiArIFRJTUVfU1RBTVBfTEVOICsgXAogCQkJCQkJCUJFQUNPTl9JTlRFUlZBTF9MRU4gKyBDQVBfSU5GT19MRU4pCi0jZGVmaW5lIEFERFIxIDQKLSNkZWZpbmUgQUREUjIgMTAKLSNkZWZpbmUgQUREUjMgMTYKIAogLyogQmFzaWMgRnJhbWUgVHlwZSBDb2RlcyAoMi1iaXQpICovCiBlbnVtIGJhc2ljX2ZyYW1lX3R5cGUgewpAQCAtMTc1LDMyICsxNzEsMzggQEAKIAlyZXR1cm4gKChoZWFkZXJbMV0gJiAweDAyKSA+PiAxKTsKIH0KIAorLyogVGhpcyBmdW5jdGlvbiBleHRyYWN0cyB0aGUgTUFDIEFkZHJlc3MgaW4gJ2FkZHJlc3MxJyBmaWVsZCBvZiB0aGUgTUFDICAgICAqLworLyogaGVhZGVyIGFuZCB1cGRhdGVzIHRoZSBNQUMgQWRkcmVzcyBpbiB0aGUgYWxsb2NhdGVkICdhZGRyJyB2YXJpYWJsZS4gICAgICAqLworc3RhdGljIGlubGluZSB2b2lkIGdldF9hZGRyZXNzMSh1OCAqcHU4bXNhLCB1OCAqYWRkcikKK3sKKwltZW1jcHkoYWRkciwgcHU4bXNhICsgNCwgNik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZXh0cmFjdHMgdGhlIE1BQyBBZGRyZXNzIGluICdhZGRyZXNzMicgZmllbGQgb2YgdGhlIE1BQyAgICAgKi8KKy8qIGhlYWRlciBhbmQgdXBkYXRlcyB0aGUgTUFDIEFkZHJlc3MgaW4gdGhlIGFsbG9jYXRlZCAnYWRkcicgdmFyaWFibGUuICAgICAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYWRkcmVzczIodTggKnB1OG1zYSwgdTggKmFkZHIpCit7CisJbWVtY3B5KGFkZHIsIHB1OG1zYSArIDEwLCA2KTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBleHRyYWN0cyB0aGUgTUFDIEFkZHJlc3MgaW4gJ2FkZHJlc3MzJyBmaWVsZCBvZiB0aGUgTUFDICAgICAqLworLyogaGVhZGVyIGFuZCB1cGRhdGVzIHRoZSBNQUMgQWRkcmVzcyBpbiB0aGUgYWxsb2NhdGVkICdhZGRyJyB2YXJpYWJsZS4gICAgICAqLworc3RhdGljIGlubGluZSB2b2lkIGdldF9hZGRyZXNzMyh1OCAqcHU4bXNhLCB1OCAqYWRkcikKK3sKKwltZW1jcHkoYWRkciwgcHU4bXNhICsgMTYsIDYpOworfQorCiAvKiBUaGlzIGZ1bmN0aW9uIGV4dHJhY3RzIHRoZSBCU1NJRCBmcm9tIHRoZSBpbmNvbWluZyBXTEFOIHBhY2tldCBiYXNlZCBvbiAgICovCi0vKiB0aGUgJ2Zyb20gZHMnIGJpdCwgYW5kIHVwZGF0ZXMgdGhlIE1BQyBBZGRyZXNzIGluIHRoZSBhbGxvY2F0ZWQgJ2RhdGEnICAgICovCisvKiB0aGUgJ2Zyb20gZHMnIGJpdCwgYW5kIHVwZGF0ZXMgdGhlIE1BQyBBZGRyZXNzIGluIHRoZSBhbGxvY2F0ZWQgJ2FkZHInICAgICovCiAvKiB2YXJpYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X0JTU0lEKHU4ICpkYXRhLCB1OCAqYnNzaWQpCiB7CiAJaWYgKGdldF9mcm9tX2RzKGRhdGEpID09IDEpCi0JCS8qCi0JCSAqIEV4dHJhY3QgdGhlIE1BQyBBZGRyZXNzIGluICdhZGRyZXNzMicgZmllbGQgb2YgdGhlIE1BQwotCQkgKiBoZWFkZXIgYW5kIHVwZGF0ZSB0aGUgTUFDIEFkZHJlc3MgaW4gdGhlIGFsbG9jYXRlZCAnZGF0YScKLQkJICogIHZhcmlhYmxlLgotCQkgKi8KLQkJZXRoZXJfYWRkcl9jb3B5KGRhdGEsIGJzc2lkICsgQUREUjIpOworCQlnZXRfYWRkcmVzczIoZGF0YSwgYnNzaWQpOwogCWVsc2UgaWYgKGdldF90b19kcyhkYXRhKSA9PSAxKQotCQkvKgotCQkgKiBFeHRyYWN0IHRoZSBNQUMgQWRkcmVzcyBpbiAnYWRkcmVzczEnIGZpZWxkIG9mIHRoZSBNQUMKLQkJICogaGVhZGVyIGFuZCB1cGRhdGUgdGhlIE1BQyBBZGRyZXNzIGluIHRoZSBhbGxvY2F0ZWQgJ2RhdGEnCi0JCSAqIHZhcmlhYmxlLgotCQkgKi8KLQkJZXRoZXJfYWRkcl9jb3B5KGRhdGEsIGJzc2lkICsgQUREUjEpOworCQlnZXRfYWRkcmVzczEoZGF0YSwgYnNzaWQpOwogCWVsc2UKLQkJLyoKLQkJICogRXh0cmFjdCB0aGUgTUFDIEFkZHJlc3MgaW4gJ2FkZHJlc3MzJyBmaWVsZCBvZiB0aGUgTUFDCi0JCSAqIGhlYWRlciBhbmQgdXBkYXRlIHRoZSBNQUMgQWRkcmVzcyBpbiB0aGUgYWxsb2NhdGVkICdkYXRhJwotCQkgKiB2YXJpYWJsZS4KLQkJICovCi0JCWV0aGVyX2FkZHJfY29weShkYXRhLCBic3NpZCArIEFERFIzKTsKKwkJZ2V0X2FkZHJlc3MzKGRhdGEsIGJzc2lkKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBleHRyYWN0cyB0aGUgU1NJRCBmcm9tIGEgYmVhY29uL3Byb2JlIHJlc3BvbnNlIGZyYW1lICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0LmMgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYwppbmRleCAzNDJhMDdjLi43MjIwNGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYworKysgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYwpAQCAtNDA3NCw2ICs0MDc0LDE3IEBACiAJcmV0dXJuIGlzY3NpdF9hZGRfcmVqZWN0KGNvbm4sIElTQ1NJX1JFQVNPTl9CT09LTUFSS19OT19SRVNPVVJDRVMsIGJ1Zik7CiB9CiAKK3N0YXRpYyBib29sIGlzY3NpX3RhcmdldF9jaGVja19jb25uX3N0YXRlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQoreworCWJvb2wgcmV0OworCisJc3Bpbl9sb2NrX2JoKCZjb25uLT5zdGF0ZV9sb2NrKTsKKwlyZXQgPSAoY29ubi0+Y29ubl9zdGF0ZSAhPSBUQVJHX0NPTk5fU1RBVEVfTE9HR0VEX0lOKTsKKwlzcGluX3VubG9ja19iaCgmY29ubi0+c3RhdGVfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgaXNjc2lfdGFyZ2V0X3J4X3RocmVhZCh2b2lkICphcmcpCiB7CiAJaW50IHJldCwgcmM7CkBAIC00MDkxLDcgKzQxMDIsNyBAQAogCSAqIGluY29taW5nIGlzY3NpL3RjcCBzb2NrZXQgSS9PLCBhbmQvb3IgZmFpbGluZyB0aGUgY29ubmVjdGlvbi4KIAkgKi8KIAlyYyA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY29ubi0+cnhfbG9naW5fY29tcCk7Ci0JaWYgKHJjIDwgMCkKKwlpZiAocmMgPCAwIHx8IGlzY3NpX3RhcmdldF9jaGVja19jb25uX3N0YXRlKGNvbm4pKQogCQlyZXR1cm4gMDsKIAogCWlmIChjb25uLT5jb25uX3RyYW5zcG9ydC0+dHJhbnNwb3J0X3R5cGUgPT0gSVNDU0lfSU5GSU5JQkFORCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X25lZ28uYyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9uZWdvLmMKaW5kZXggNWM5NjRjMC4uOWZjOTExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X25lZ28uYworKysgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfbmVnby5jCkBAIC0zODgsNiArMzg4LDcgQEAKIAlpZiAobG9naW4tPmxvZ2luX2NvbXBsZXRlKSB7CiAJCWlmIChjb25uLT5yeF90aHJlYWQgJiYgY29ubi0+cnhfdGhyZWFkX2FjdGl2ZSkgewogCQkJc2VuZF9zaWcoU0lHSU5ULCBjb25uLT5yeF90aHJlYWQsIDEpOworCQkJY29tcGxldGUoJmNvbm4tPnJ4X2xvZ2luX2NvbXApOwogCQkJa3RocmVhZF9zdG9wKGNvbm4tPnJ4X3RocmVhZCk7CiAJCX0KIAkJaWYgKGNvbm4tPnR4X3RocmVhZCAmJiBjb25uLT50eF90aHJlYWRfYWN0aXZlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfcGFyYW1ldGVycy5jIGIvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X3BhcmFtZXRlcnMuYwppbmRleCA1MWQxNzM0Li4yY2JlYTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfcGFyYW1ldGVycy5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9wYXJhbWV0ZXJzLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCWlmICghcGwpIHsKIAkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciIKIAkJCQkiIHN0cnVjdCBpc2NzaV9wYXJhbV9saXN0LlxuIik7Ci0JCXJldHVybiAtMSA7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAlJTklUX0xJU1RfSEVBRCgmcGwtPnBhcmFtX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZwbC0+ZXh0cmFfcmVzcG9uc2VfbGlzdCk7CkBAIC01NzgsNyArNTc4LDcgQEAKIAlwYXJhbV9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX3BhcmFtX2xpc3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhcmFtX2xpc3QpIHsKIAkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBzdHJ1Y3QgaXNjc2lfcGFyYW1fbGlzdC5cbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAlJTklUX0xJU1RfSEVBRCgmcGFyYW1fbGlzdC0+cGFyYW1fbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnBhcmFtX2xpc3QtPmV4dHJhX3Jlc3BvbnNlX2xpc3QpOwpAQCAtNjI5LDcgKzYyOSw3IEBACiAKIGVycl9vdXQ6CiAJaXNjc2lfcmVsZWFzZV9wYXJhbV9saXN0KHBhcmFtX2xpc3QpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgaXNjc2lfcmVsZWFzZV9leHRyYV9yZXNwb25zZXMoc3RydWN0IGlzY3NpX3BhcmFtX2xpc3QgKnBhcmFtX2xpc3QpCkBAIC03MjksNyArNzI5LDcgQEAKIAlpZiAoIWV4dHJhX3Jlc3BvbnNlKSB7CiAJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IiCiAJCQkiIHN0cnVjdCBpc2NzaV9leHRyYV9yZXNwb25zZS5cbiIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAlJTklUX0xJU1RfSEVBRCgmZXh0cmFfcmVzcG9uc2UtPmVyX2xpc3QpOwogCkBAIC0xMzcwLDcgKzEzNzAsNyBAQAogCXRtcGJ1ZiA9IGt6YWxsb2MobGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0bXBidWYpIHsKIAkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgJXUgKyAxIGJ5dGVzIGZvciB0bXBidWYuXG4iLCBsZW5ndGgpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCW1lbWNweSh0bXBidWYsIHRleHRidWYsIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zYmMuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jCmluZGV4IDBiNGIyYTYuLjk4Njk4ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3NiYy5jCkBAIC0zNzEsNyArMzcxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNlbnNlX3JlYXNvbl90IHhkcmVhZHdyaXRlX2NhbGxiYWNrKHN0cnVjdCBzZV9jbWQgKmNtZCwgYm9vbCBzdWNjZXNzKQorc3RhdGljIHNlbnNlX3JlYXNvbl90IHhkcmVhZHdyaXRlX2NhbGxiYWNrKHN0cnVjdCBzZV9jbWQgKmNtZCwgYm9vbCBzdWNjZXNzLAorCQkJCQkgICBpbnQgKnBvc3RfcmV0KQogewogCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgKmFkZHI7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKQEAgLTQzNyw3ICs0MzgsOCBAQAogCQkJICAgICAgIGNtZC0+ZGF0YV9kaXJlY3Rpb24pOwogfQogCi1zdGF0aWMgc2Vuc2VfcmVhc29uX3QgY29tcGFyZV9hbmRfd3JpdGVfcG9zdChzdHJ1Y3Qgc2VfY21kICpjbWQsIGJvb2wgc3VjY2VzcykKK3N0YXRpYyBzZW5zZV9yZWFzb25fdCBjb21wYXJlX2FuZF93cml0ZV9wb3N0KHN0cnVjdCBzZV9jbWQgKmNtZCwgYm9vbCBzdWNjZXNzLAorCQkJCQkgICAgIGludCAqcG9zdF9yZXQpCiB7CiAJc3RydWN0IHNlX2RldmljZSAqZGV2ID0gY21kLT5zZV9kZXY7CiAKQEAgLTQ0Nyw4ICs0NDksMTAgQEAKIAkgKiBzZW50IHRvIHRoZSBiYWNrZW5kIGRyaXZlci4KIAkgKi8KIAlzcGluX2xvY2tfaXJxKCZjbWQtPnRfc3RhdGVfbG9jayk7Ci0JaWYgKChjbWQtPnRyYW5zcG9ydF9zdGF0ZSAmIENNRF9UX1NFTlQpICYmICFjbWQtPnNjc2lfc3RhdHVzKQorCWlmICgoY21kLT50cmFuc3BvcnRfc3RhdGUgJiBDTURfVF9TRU5UKSAmJiAhY21kLT5zY3NpX3N0YXR1cykgewogCQljbWQtPnNlX2NtZF9mbGFncyB8PSBTQ0ZfQ09NUEFSRV9BTkRfV1JJVEVfUE9TVDsKKwkJKnBvc3RfcmV0ID0gMTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxKCZjbWQtPnRfc3RhdGVfbG9jayk7CiAKIAkvKgpAQCAtNDYwLDcgKzQ2NCw4IEBACiAJcmV0dXJuIFRDTV9OT19TRU5TRTsKIH0KIAotc3RhdGljIHNlbnNlX3JlYXNvbl90IGNvbXBhcmVfYW5kX3dyaXRlX2NhbGxiYWNrKHN0cnVjdCBzZV9jbWQgKmNtZCwgYm9vbCBzdWNjZXNzKQorc3RhdGljIHNlbnNlX3JlYXNvbl90IGNvbXBhcmVfYW5kX3dyaXRlX2NhbGxiYWNrKHN0cnVjdCBzZV9jbWQgKmNtZCwgYm9vbCBzdWNjZXNzLAorCQkJCQkJIGludCAqcG9zdF9yZXQpCiB7CiAJc3RydWN0IHNlX2RldmljZSAqZGV2ID0gY21kLT5zZV9kZXY7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICp3cml0ZV9zZyA9IE5VTEwsICpzZzsKQEAgLTU1NiwxMSArNTYxLDExIEBACiAKIAkJaWYgKGJsb2NrX3NpemUgPCBQQUdFX1NJWkUpIHsKIAkJCXNnX3NldF9wYWdlKCZ3cml0ZV9zZ1tpXSwgbS5wYWdlLCBibG9ja19zaXplLAotCQkJCSAgICBibG9ja19zaXplKTsKKwkJCQkgICAgbS5waXRlci5zZy0+b2Zmc2V0ICsgYmxvY2tfc2l6ZSk7CiAJCX0gZWxzZSB7CiAJCQlzZ19taXRlcl9uZXh0KCZtKTsKIAkJCXNnX3NldF9wYWdlKCZ3cml0ZV9zZ1tpXSwgbS5wYWdlLCBibG9ja19zaXplLAotCQkJCSAgICAwKTsKKwkJCQkgICAgbS5waXRlci5zZy0+b2Zmc2V0KTsKIAkJfQogCQlsZW4gLT0gYmxvY2tfc2l6ZTsKIAkJaSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc3RhdC5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfc3RhdC5jCmluZGV4IDI3M2M3MmIuLjgxYTZiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3N0YXQuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9zdGF0LmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCWNoYXIgc3RyW3NpemVvZihkZXYtPnQxMF93d24ubW9kZWwpKzFdOwogCiAJLyogc2NzaUx1UHJvZHVjdElkICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihkZXYtPnQxMF93d24udmVuZG9yKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGV2LT50MTBfd3duLm1vZGVsKTsgaSsrKQogCQlzdHJbaV0gPSBJU1BSSU5UKGRldi0+dDEwX3d3bi5tb2RlbFtpXSkgPwogCQkJZGV2LT50MTBfd3duLm1vZGVsW2ldIDogJyAnOwogCXN0cltpXSA9ICdcMCc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90bXIuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3Rtci5jCmluZGV4IDViMjgyMDMuLjI4ZmIzMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3Rtci5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3Rtci5jCkBAIC0xMzAsNiArMTMwLDkgQEAKIAkJaWYgKHRtci0+cmVmX3Rhc2tfdGFnICE9IHJlZl90YWcpCiAJCQljb250aW51ZTsKIAorCQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZzZV9jbWQtPmNtZF9rcmVmKSkKKwkJCWNvbnRpbnVlOworCiAJCXByaW50aygiQUJPUlRfVEFTSzogRm91bmQgcmVmZXJlbmNlZCAlcyB0YXNrX3RhZzogJWxsdVxuIiwKIAkJCXNlX2NtZC0+c2VfdGZvLT5nZXRfZmFicmljX25hbWUoKSwgcmVmX3RhZyk7CiAKQEAgLTEzOSwxMyArMTQyLDE1IEBACiAJCQkgICAgICAgIiBza2lwcGluZ1xuIiwgcmVmX3RhZyk7CiAJCQlzcGluX3VubG9jaygmc2VfY21kLT50X3N0YXRlX2xvY2spOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vfc2Vzcy0+c2Vzc19jbWRfbG9jaywgZmxhZ3MpOworCisJCQl0YXJnZXRfcHV0X3Nlc3NfY21kKHNlX2NtZCk7CisKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXNlX2NtZC0+dHJhbnNwb3J0X3N0YXRlIHw9IENNRF9UX0FCT1JURUQ7CiAJCXNwaW5fdW5sb2NrKCZzZV9jbWQtPnRfc3RhdGVfbG9jayk7CiAKIAkJbGlzdF9kZWxfaW5pdCgmc2VfY21kLT5zZV9jbWRfbGlzdCk7Ci0JCWtyZWZfZ2V0KCZzZV9jbWQtPmNtZF9rcmVmKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vfc2Vzcy0+c2Vzc19jbWRfbG9jaywgZmxhZ3MpOwogCiAJCWNhbmNlbF93b3JrX3N5bmMoJnNlX2NtZC0+d29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCmluZGV4IDViYWNjN2IuLjRmZGNlZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCkBAIC0xNjU4LDcgKzE2NTgsNyBAQAogdm9pZCB0cmFuc3BvcnRfZ2VuZXJpY19yZXF1ZXN0X2ZhaWx1cmUoc3RydWN0IHNlX2NtZCAqY21kLAogCQlzZW5zZV9yZWFzb25fdCBzZW5zZV9yZWFzb24pCiB7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IDAsIHBvc3RfcmV0ID0gMDsKIAogCXByX2RlYnVnKCItLS0tLVsgU3RvcmFnZSBFbmdpbmUgRXhjZXB0aW9uIGZvciBjbWQ6ICVwIElUVDogMHglMDhsbHgiCiAJCSIgQ0RCOiAweCUwMnhcbiIsIGNtZCwgY21kLT50YWcsIGNtZC0+dF90YXNrX2NkYlswXSk7CkBAIC0xNjgwLDcgKzE2ODAsNyBAQAogCSAqLwogCWlmICgoY21kLT5zZV9jbWRfZmxhZ3MgJiBTQ0ZfQ09NUEFSRV9BTkRfV1JJVEUpICYmCiAJICAgICBjbWQtPnRyYW5zcG9ydF9jb21wbGV0ZV9jYWxsYmFjaykKLQkJY21kLT50cmFuc3BvcnRfY29tcGxldGVfY2FsbGJhY2soY21kLCBmYWxzZSk7CisJCWNtZC0+dHJhbnNwb3J0X2NvbXBsZXRlX2NhbGxiYWNrKGNtZCwgZmFsc2UsICZwb3N0X3JldCk7CiAKIAlzd2l0Y2ggKHNlbnNlX3JlYXNvbikgewogCWNhc2UgVENNX05PTl9FWElTVEVOVF9MVU46CkBAIC0yMDY4LDExICsyMDY4LDEzIEBACiAJICovCiAJaWYgKGNtZC0+dHJhbnNwb3J0X2NvbXBsZXRlX2NhbGxiYWNrKSB7CiAJCXNlbnNlX3JlYXNvbl90IHJjOworCQlib29sIGNhdyA9IChjbWQtPnNlX2NtZF9mbGFncyAmIFNDRl9DT01QQVJFX0FORF9XUklURSk7CisJCWJvb2wgemVyb19kbCA9ICEoY21kLT5kYXRhX2xlbmd0aCk7CisJCWludCBwb3N0X3JldCA9IDA7CiAKLQkJcmMgPSBjbWQtPnRyYW5zcG9ydF9jb21wbGV0ZV9jYWxsYmFjayhjbWQsIHRydWUpOwotCQlpZiAoIXJjICYmICEoY21kLT5zZV9jbWRfZmxhZ3MgJiBTQ0ZfQ09NUEFSRV9BTkRfV1JJVEVfUE9TVCkpIHsKLQkJCWlmICgoY21kLT5zZV9jbWRfZmxhZ3MgJiBTQ0ZfQ09NUEFSRV9BTkRfV1JJVEUpICYmCi0JCQkgICAgIWNtZC0+ZGF0YV9sZW5ndGgpCisJCXJjID0gY21kLT50cmFuc3BvcnRfY29tcGxldGVfY2FsbGJhY2soY21kLCB0cnVlLCAmcG9zdF9yZXQpOworCQlpZiAoIXJjICYmICFwb3N0X3JldCkgeworCQkJaWYgKGNhdyAmJiB6ZXJvX2RsKQogCQkJCWdvdG8gcXVldWVfcnNwOwogCiAJCQlyZXR1cm47CkBAIC0yNTA3LDIzICsyNTA5LDI0IEBACiBFWFBPUlRfU1lNQk9MKHRhcmdldF9nZXRfc2Vzc19jbWQpOwogCiBzdGF0aWMgdm9pZCB0YXJnZXRfcmVsZWFzZV9jbWRfa3JlZihzdHJ1Y3Qga3JlZiAqa3JlZikKLQkJX19yZWxlYXNlcygmc2VfY21kLT5zZV9zZXNzLT5zZXNzX2NtZF9sb2NrKQogewogCXN0cnVjdCBzZV9jbWQgKnNlX2NtZCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc2VfY21kLCBjbWRfa3JlZik7CiAJc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MgPSBzZV9jbWQtPnNlX3Nlc3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZzZV9zZXNzLT5zZXNzX2NtZF9sb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJnNlX2NtZC0+c2VfY21kX2xpc3QpKSB7Ci0JCXNwaW5fdW5sb2NrKCZzZV9zZXNzLT5zZXNzX2NtZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vfc2Vzcy0+c2Vzc19jbWRfbG9jaywgZmxhZ3MpOwogCQlzZV9jbWQtPnNlX3Rmby0+cmVsZWFzZV9jbWQoc2VfY21kKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc2Vfc2Vzcy0+c2Vzc190ZWFyaW5nX2Rvd24gJiYgc2VfY21kLT5jbWRfd2FpdF9zZXQpIHsKLQkJc3Bpbl91bmxvY2soJnNlX3Nlc3MtPnNlc3NfY21kX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZV9zZXNzLT5zZXNzX2NtZF9sb2NrLCBmbGFncyk7CiAJCWNvbXBsZXRlKCZzZV9jbWQtPmNtZF93YWl0X2NvbXApOwogCQlyZXR1cm47CiAJfQogCWxpc3RfZGVsKCZzZV9jbWQtPnNlX2NtZF9saXN0KTsKLQlzcGluX3VubG9jaygmc2Vfc2Vzcy0+c2Vzc19jbWRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vfc2Vzcy0+c2Vzc19jbWRfbG9jaywgZmxhZ3MpOwogCiAJc2VfY21kLT5zZV90Zm8tPnJlbGVhc2VfY21kKHNlX2NtZCk7CiB9CkBAIC0yNTM5LDggKzI1NDIsNyBAQAogCQlzZV9jbWQtPnNlX3Rmby0+cmVsZWFzZV9jbWQoc2VfY21kKTsKIAkJcmV0dXJuIDE7CiAJfQotCXJldHVybiBrcmVmX3B1dF9zcGlubG9ja19pcnFzYXZlKCZzZV9jbWQtPmNtZF9rcmVmLCB0YXJnZXRfcmVsZWFzZV9jbWRfa3JlZiwKLQkJCSZzZV9zZXNzLT5zZXNzX2NtZF9sb2NrKTsKKwlyZXR1cm4ga3JlZl9wdXQoJnNlX2NtZC0+Y21kX2tyZWYsIHRhcmdldF9yZWxlYXNlX2NtZF9rcmVmKTsKIH0KIEVYUE9SVF9TWU1CT0wodGFyZ2V0X3B1dF9zZXNzX2NtZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYwppbmRleCA5MzdjZWJmLi41ZTZkNmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdXNlci5jCkBAIC02MzgsNyArNjM4LDcgQEAKIAlpZiAodGVzdF9iaXQoVENNVV9DTURfQklUX0VYUElSRUQsICZjbWQtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIXRpbWVfYWZ0ZXIoY21kLT5kZWFkbGluZSwgamlmZmllcykpCisJaWYgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGNtZC0+ZGVhZGxpbmUpKQogCQlyZXR1cm4gMDsKIAogCXNldF9iaXQoVENNVV9DTURfQklUX0VYUElSRUQsICZjbWQtPmZsYWdzKTsKQEAgLTExMDEsOCArMTEwMSw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2JhY2tlbmRfb3BzIHRjbXVfb3BzID0gewogCS5uYW1lCQkJPSAidXNlciIsCi0JLmlucXVpcnlfcHJvZAkJPSAiVVNFUiIsCi0JLmlucXVpcnlfcmV2CQk9IFRDTVVfVkVSU0lPTiwKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS50cmFuc3BvcnRfZmxhZ3MJPSBUUkFOU1BPUlRfRkxBR19QQVNTVEhST1VHSCwKIAkuYXR0YWNoX2hiYQkJPSB0Y211X2F0dGFjaF9oYmEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZyBiL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnCmluZGV4IGM0NjNjODkuLjhjYzRhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnCkBAIC0zODIsNyArMzgyLDcgQEAKIAogY29uZmlnIFFDT01fU1BNSV9URU1QX0FMQVJNCiAJdHJpc3RhdGUgIlF1YWxjb21tIFNQTUkgUE1JQyBUZW1wZXJhdHVyZSBBbGFybSIKLQlkZXBlbmRzIG9uIE9GICYmIChTUE1JIHx8IENPTVBJTEVfVEVTVCkgJiYgSUlPCisJZGVwZW5kcyBvbiBPRiAmJiBTUE1JICYmIElJTwogCXNlbGVjdCBSRUdNQVBfU1BNSQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBhIHRoZXJtYWwgc3lzZnMgZHJpdmVyIGZvciBRdWFsY29tbSBwbHVnLWFuZC1wbGF5IChRUE5QKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL2lteF90aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYwppbmRleCBjOGZlM2NhLi5jNTU0N2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvaW14X3RoZXJtYWwuYwpAQCAtNTUsNiArNTUsNyBAQAogI2RlZmluZSBURU1QU0VOU0UyX1BBTklDX1ZBTFVFX1NISUZUCTE2CiAjZGVmaW5lIFRFTVBTRU5TRTJfUEFOSUNfVkFMVUVfTUFTSwkweGZmZjAwMDAKIAorI2RlZmluZSBPQ09UUF9NRU0wCQkJMHgwNDgwCiAjZGVmaW5lIE9DT1RQX0FOQTEJCQkweDA0ZTAKIAogLyogVGhlIGRyaXZlciBzdXBwb3J0cyAxIHBhc3NpdmUgdHJpcCBwb2ludCBhbmQgMSBjcml0aWNhbCB0cmlwIHBvaW50ICovCkBAIC02NCwxMiArNjUsNiBAQAogCUlNWF9UUklQX05VTSwKIH07CiAKLS8qCi0gKiBJdCBkZWZpbmVzIHRoZSB0ZW1wZXJhdHVyZSBpbiBtaWxsaWNlbHNpdXMgZm9yIHBhc3NpdmUgdHJpcCBwb2ludAotICogdGhhdCB3aWxsIHRyaWdnZXIgY29vbGluZyBhY3Rpb24gd2hlbiBjcm9zc2VkLgotICovCi0jZGVmaW5lIElNWF9URU1QX1BBU1NJVkUJCTg1MDAwCi0KICNkZWZpbmUgSU1YX1BPTExJTkdfREVMQVkJCTIwMDAgLyogbWlsbGlzZWNvbmQgKi8KICNkZWZpbmUgSU1YX1BBU1NJVkVfREVMQVkJCTEwMDAKIApAQCAtMTAwLDEyICs5NSwxNCBAQAogCXUzMiBjMSwgYzI7IC8qIFNlZSBmb3JtdWxhIGluIGlteF9nZXRfc2Vuc29yX2RhdGEoKSAqLwogCWludCB0ZW1wX3Bhc3NpdmU7CiAJaW50IHRlbXBfY3JpdGljYWw7CisJaW50IHRlbXBfbWF4OwogCWludCBhbGFybV90ZW1wOwogCWludCBsYXN0X3RlbXA7CiAJYm9vbCBpcnFfZW5hYmxlZDsKIAlpbnQgaXJxOwogCXN0cnVjdCBjbGsgKnRoZXJtYWxfY2xrOwogCWNvbnN0IHN0cnVjdCB0aGVybWFsX3NvY19kYXRhICpzb2NkYXRhOworCWNvbnN0IGNoYXIgKnRlbXBfZ3JhZGU7CiB9OwogCiBzdGF0aWMgdm9pZCBpbXhfc2V0X3BhbmljX3RlbXAoc3RydWN0IGlteF90aGVybWFsX2RhdGEgKmRhdGEsCkBAIC0yODUsMTAgKzI4MiwxMiBAQAogewogCXN0cnVjdCBpbXhfdGhlcm1hbF9kYXRhICpkYXRhID0gdHotPmRldmRhdGE7CiAKKwkvKiBkbyBub3QgYWxsb3cgY2hhbmdpbmcgY3JpdGljYWwgdGhyZXNob2xkICovCiAJaWYgKHRyaXAgPT0gSU1YX1RSSVBfQ1JJVElDQUwpCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAodGVtcCA8IDAgfHwgdGVtcCA+IElNWF9URU1QX1BBU1NJVkUpCisJLyogZG8gbm90IGFsbG93IHBhc3NpdmUgdG8gYmUgc2V0IGhpZ2hlciB0aGFuIGNyaXRpY2FsICovCisJaWYgKHRlbXAgPCAwIHx8IHRlbXAgPiBkYXRhLT50ZW1wX2NyaXRpY2FsKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRhdGEtPnRlbXBfcGFzc2l2ZSA9IHRlbXA7CkBAIC00MDQsMTcgKzQwMywzOSBAQAogCWRhdGEtPmMxID0gdGVtcDY0OwogCWRhdGEtPmMyID0gbjEgKiBkYXRhLT5jMSArIDEwMDAgKiB0MTsKIAotCS8qCi0JICogU2V0IHRoZSBkZWZhdWx0IHBhc3NpdmUgY29vbGluZyB0cmlwIHBvaW50LAotCSAqIGNhbiBiZSBjaGFuZ2VkIGZyb20gdXNlcnNwYWNlLgotCSAqLwotCWRhdGEtPnRlbXBfcGFzc2l2ZSA9IElNWF9URU1QX1BBU1NJVkU7CisJLyogdXNlIE9UUCBmb3IgdGhlcm1hbCBncmFkZSAqLworCXJldCA9IHJlZ21hcF9yZWFkKG1hcCwgT0NPVFBfTUVNMCwgJnZhbCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVhZCB0ZW1wIGdyYWRlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBUaGUgbWF4aW11bSBkaWUgdGVtcCBpcyBzcGVjaWZpZWQgYnkgdGhlIFRlbXBlcmF0dXJlIEdyYWRlICovCisJc3dpdGNoICgodmFsID4+IDYpICYgMHgzKSB7CisJY2FzZSAwOiAvKiBDb21tZXJjaWFsICgwIHRvIDk1QykgKi8KKwkJZGF0YS0+dGVtcF9ncmFkZSA9ICJDb21tZXJjaWFsIjsKKwkJZGF0YS0+dGVtcF9tYXggPSA5NTAwMDsKKwkJYnJlYWs7CisJY2FzZSAxOiAvKiBFeHRlbmRlZCBDb21tZXJjaWFsICgtMjAgdG8gMTA1QykgKi8KKwkJZGF0YS0+dGVtcF9ncmFkZSA9ICJFeHRlbmRlZCBDb21tZXJjaWFsIjsKKwkJZGF0YS0+dGVtcF9tYXggPSAxMDUwMDA7CisJCWJyZWFrOworCWNhc2UgMjogLyogSW5kdXN0cmlhbCAoLTQwIHRvIDEwNUMpICovCisJCWRhdGEtPnRlbXBfZ3JhZGUgPSAiSW5kdXN0cmlhbCI7CisJCWRhdGEtPnRlbXBfbWF4ID0gMTA1MDAwOworCQlicmVhazsKKwljYXNlIDM6IC8qIEF1dG9tb3RpdmUgKC00MCB0byAxMjVDKSAqLworCQlkYXRhLT50ZW1wX2dyYWRlID0gIkF1dG9tb3RpdmUiOworCQlkYXRhLT50ZW1wX21heCA9IDEyNTAwMDsKKwkJYnJlYWs7CisJfQogCiAJLyoKLQkgKiBUaGUgbWF4aW11bSBkaWUgdGVtcGVyYXR1cmUgc2V0IHRvIDIwIEMgaGlnaGVyIHRoYW4KLQkgKiBJTVhfVEVNUF9QQVNTSVZFLgorCSAqIFNldCB0aGUgY3JpdGljYWwgdHJpcCBwb2ludCBhdCA1QyB1bmRlciBtYXgKKwkgKiBTZXQgdGhlIHBhc3NpdmUgdHJpcCBwb2ludCBhdCAxMEMgdW5kZXIgbWF4IChjYW4gY2hhbmdlIHZpYSBzeXNmcykKIAkgKi8KLQlkYXRhLT50ZW1wX2NyaXRpY2FsID0gMTAwMCAqIDIwICsgZGF0YS0+dGVtcF9wYXNzaXZlOworCWRhdGEtPnRlbXBfY3JpdGljYWwgPSBkYXRhLT50ZW1wX21heCAtICgxMDAwICogNSk7CisJZGF0YS0+dGVtcF9wYXNzaXZlID0gZGF0YS0+dGVtcF9tYXggLSAoMTAwMCAqIDEwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTUxLDYgKzU3MiwxMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyBDUFUgdGVtcGVyYXR1cmUgZ3JhZGUgLSBtYXg6JWRDIgorCQkgIiBjcml0aWNhbDolZEMgcGFzc2l2ZTolZENcbiIsIGRhdGEtPnRlbXBfZ3JhZGUsCisJCSBkYXRhLT50ZW1wX21heCAvIDEwMDAsIGRhdGEtPnRlbXBfY3JpdGljYWwgLyAxMDAwLAorCQkgZGF0YS0+dGVtcF9wYXNzaXZlIC8gMTAwMCk7CisKIAkvKiBFbmFibGUgbWVhc3VyZW1lbnRzIGF0IH4gMTAgSHogKi8KIAlyZWdtYXBfd3JpdGUobWFwLCBURU1QU0VOU0UxICsgUkVHX0NMUiwgVEVNUFNFTlNFMV9NRUFTVVJFX0ZSRVEpOwogCW1lYXN1cmVfZnJlcSA9IERJVl9ST1VORF9VUCgzMjc2OCwgMTApOyAvKiAxMCBIeiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL29mLXRoZXJtYWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9vZi10aGVybWFsLmMKaW5kZXggNDJiN2Q0Mi4uYmU0ZWVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL29mLXRoZXJtYWwuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvb2YtdGhlcm1hbC5jCkBAIC05NjQsNyArOTY0LDcgQEAKIAogCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInRoZXJtYWwtem9uZXMiKTsKIAlpZiAoIW5wKSB7Ci0JCXByX2VycigidW5hYmxlIHRvIGZpbmQgdGhlcm1hbCB6b25lc1xuIik7CisJCXByX2RlYnVnKCJ1bmFibGUgdG8gZmluZCB0aGVybWFsIHpvbmVzXG4iKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3Bvd2VyX2FsbG9jYXRvci5jIGIvZHJpdmVycy90aGVybWFsL3Bvd2VyX2FsbG9jYXRvci5jCmluZGV4IGYwZmJlYTMuLjEyNDZhYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9wb3dlcl9hbGxvY2F0b3IuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvcG93ZXJfYWxsb2NhdG9yLmMKQEAgLTE3NCw3ICsxNzQsNiBAQAogLyoqCiAgKiBwaWRfY29udHJvbGxlcigpIC0gUElEIGNvbnRyb2xsZXIKICAqIEB0ejoJdGhlcm1hbCB6b25lIHdlIGFyZSBvcGVyYXRpbmcgaW4KLSAqIEBjdXJyZW50X3RlbXA6CXRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGluIG1pbGxpY2Vsc2l1cwogICogQGNvbnRyb2xfdGVtcDoJdGhlIHRhcmdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWNlbHNpdXMKICAqIEBtYXhfYWxsb2NhdGFibGVfcG93ZXI6CW1heGltdW0gYWxsb2NhdGFibGUgcG93ZXIgZm9yIHRoaXMgdGhlcm1hbCB6b25lCiAgKgpAQCAtMTkxLDcgKzE5MCw2IEBACiAgKiBSZXR1cm46IFRoZSBwb3dlciBidWRnZXQgZm9yIHRoZSBuZXh0IHBlcmlvZC4KICAqLwogc3RhdGljIHUzMiBwaWRfY29udHJvbGxlcihzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHosCi0JCQkgIGludCBjdXJyZW50X3RlbXAsCiAJCQkgIGludCBjb250cm9sX3RlbXAsCiAJCQkgIHUzMiBtYXhfYWxsb2NhdGFibGVfcG93ZXIpCiB7CkBAIC0yMTEsNyArMjA5LDcgQEAKIAkJCQkgICAgICAgdHJ1ZSk7CiAJfQogCi0JZXJyID0gY29udHJvbF90ZW1wIC0gY3VycmVudF90ZW1wOworCWVyciA9IGNvbnRyb2xfdGVtcCAtIHR6LT50ZW1wZXJhdHVyZTsKIAllcnIgPSBpbnRfdG9fZnJhYyhlcnIpOwogCiAJLyogQ2FsY3VsYXRlIHRoZSBwcm9wb3J0aW9uYWwgdGVybSAqLwpAQCAtMzMyLDcgKzMzMCw2IEBACiB9CiAKIHN0YXRpYyBpbnQgYWxsb2NhdGVfcG93ZXIoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LAotCQkJICBpbnQgY3VycmVudF90ZW1wLAogCQkJICBpbnQgY29udHJvbF90ZW1wKQogewogCXN0cnVjdCB0aGVybWFsX2luc3RhbmNlICppbnN0YW5jZTsKQEAgLTQxOCw4ICs0MTUsNyBAQAogCQlpKys7CiAJfQogCi0JcG93ZXJfcmFuZ2UgPSBwaWRfY29udHJvbGxlcih0eiwgY3VycmVudF90ZW1wLCBjb250cm9sX3RlbXAsCi0JCQkJICAgICBtYXhfYWxsb2NhdGFibGVfcG93ZXIpOworCXBvd2VyX3JhbmdlID0gcGlkX2NvbnRyb2xsZXIodHosIGNvbnRyb2xfdGVtcCwgbWF4X2FsbG9jYXRhYmxlX3Bvd2VyKTsKIAogCWRpdnZ5X3VwX3Bvd2VyKHdlaWdodGVkX3JlcV9wb3dlciwgbWF4X3Bvd2VyLCBudW1fYWN0b3JzLAogCQkgICAgICAgdG90YWxfd2VpZ2h0ZWRfcmVxX3Bvd2VyLCBwb3dlcl9yYW5nZSwgZ3JhbnRlZF9wb3dlciwKQEAgLTQ0NCw4ICs0NDAsOCBAQAogCXRyYWNlX3RoZXJtYWxfcG93ZXJfYWxsb2NhdG9yKHR6LCByZXFfcG93ZXIsIHRvdGFsX3JlcV9wb3dlciwKIAkJCQkgICAgICBncmFudGVkX3Bvd2VyLCB0b3RhbF9ncmFudGVkX3Bvd2VyLAogCQkJCSAgICAgIG51bV9hY3RvcnMsIHBvd2VyX3JhbmdlLAotCQkJCSAgICAgIG1heF9hbGxvY2F0YWJsZV9wb3dlciwgY3VycmVudF90ZW1wLAotCQkJCSAgICAgIGNvbnRyb2xfdGVtcCAtIGN1cnJlbnRfdGVtcCk7CisJCQkJICAgICAgbWF4X2FsbG9jYXRhYmxlX3Bvd2VyLCB0ei0+dGVtcGVyYXR1cmUsCisJCQkJICAgICAgY29udHJvbF90ZW1wIC0gdHotPnRlbXBlcmF0dXJlKTsKIAogCWtmcmVlKHJlcV9wb3dlcik7CiB1bmxvY2s6CkBAIC02MTIsNyArNjA4LDcgQEAKIHN0YXRpYyBpbnQgcG93ZXJfYWxsb2NhdG9yX3Rocm90dGxlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwgaW50IHRyaXApCiB7CiAJaW50IHJldDsKLQlpbnQgc3dpdGNoX29uX3RlbXAsIGNvbnRyb2xfdGVtcCwgY3VycmVudF90ZW1wOworCWludCBzd2l0Y2hfb25fdGVtcCwgY29udHJvbF90ZW1wOwogCXN0cnVjdCBwb3dlcl9hbGxvY2F0b3JfcGFyYW1zICpwYXJhbXMgPSB0ei0+Z292ZXJub3JfZGF0YTsKIAogCS8qCkBAIC02MjIsMTUgKzYxOCw5IEBACiAJaWYgKHRyaXAgIT0gcGFyYW1zLT50cmlwX21heF9kZXNpcmVkX3RlbXBlcmF0dXJlKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IHRoZXJtYWxfem9uZV9nZXRfdGVtcCh0eiwgJmN1cnJlbnRfdGVtcCk7Ci0JaWYgKHJldCkgewotCQlkZXZfd2FybigmdHotPmRldmljZSwgIkZhaWxlZCB0byBnZXQgdGVtcGVyYXR1cmU6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQogCXJldCA9IHR6LT5vcHMtPmdldF90cmlwX3RlbXAodHosIHBhcmFtcy0+dHJpcF9zd2l0Y2hfb24sCiAJCQkJICAgICAmc3dpdGNoX29uX3RlbXApOwotCWlmICghcmV0ICYmIChjdXJyZW50X3RlbXAgPCBzd2l0Y2hfb25fdGVtcCkpIHsKKwlpZiAoIXJldCAmJiAodHotPnRlbXBlcmF0dXJlIDwgc3dpdGNoX29uX3RlbXApKSB7CiAJCXR6LT5wYXNzaXZlID0gMDsKIAkJcmVzZXRfcGlkX2NvbnRyb2xsZXIocGFyYW1zKTsKIAkJYWxsb3dfbWF4aW11bV9wb3dlcih0eik7CkBAIC02NDgsNyArNjM4LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gYWxsb2NhdGVfcG93ZXIodHosIGN1cnJlbnRfdGVtcCwgY29udHJvbF90ZW1wKTsKKwlyZXR1cm4gYWxsb2NhdGVfcG93ZXIodHosIGNvbnRyb2xfdGVtcCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGhlcm1hbF9nb3Zlcm5vciB0aGVybWFsX2dvdl9wb3dlcl9hbGxvY2F0b3IgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvcmNhcl90aGVybWFsLmMgYi9kcml2ZXJzL3RoZXJtYWwvcmNhcl90aGVybWFsLmMKaW5kZXggNWQ0YWU3ZC4uMTNkMDFlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3JjYXJfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9yY2FyX3RoZXJtYWwuYwpAQCAtMzYxLDYgKzM2MSwyNCBAQAogLyoKICAqCQlwbGF0Zm9ybSBmdW5jdGlvbnMKICAqLworc3RhdGljIGludCByY2FyX3RoZXJtYWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJjYXJfdGhlcm1hbF9jb21tb24gKmNvbW1vbiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHJjYXJfdGhlcm1hbF9wcml2ICpwcml2OworCisJcmNhcl90aGVybWFsX2Zvcl9lYWNoX3ByaXYocHJpdiwgY29tbW9uKSB7CisJCWlmIChyY2FyX2hhc19pcnFfc3VwcG9ydChwcml2KSkKKwkJCXJjYXJfdGhlcm1hbF9pcnFfZGlzYWJsZShwcml2KTsKKwkJdGhlcm1hbF96b25lX2RldmljZV91bnJlZ2lzdGVyKHByaXYtPnpvbmUpOworCX0KKworCXBtX3J1bnRpbWVfcHV0KGRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByY2FyX3RoZXJtYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcmNhcl90aGVybWFsX2NvbW1vbiAqY29tbW9uOwpAQCAtMzc3LDYgKzM5NSw4IEBACiAJaWYgKCFjb21tb24pCiAJCXJldHVybiAtRU5PTUVNOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29tbW9uKTsKKwogCUlOSVRfTElTVF9IRUFEKCZjb21tb24tPmhlYWQpOwogCXNwaW5fbG9ja19pbml0KCZjb21tb24tPmxvY2spOwogCWNvbW1vbi0+ZGV2ID0gZGV2OwpAQCAtNDU0LDQzICs0NzQsMTYgQEAKIAkJcmNhcl90aGVybWFsX2NvbW1vbl93cml0ZShjb21tb24sIEVOUiwgZW5yX2JpdHMpOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvbW1vbik7Ci0KIAlkZXZfaW5mbyhkZXYsICIlZCBzZW5zb3IgcHJvYmVkXG4iLCBpKTsKIAogCXJldHVybiAwOwogCiBlcnJvcl91bnJlZ2lzdGVyOgotCXJjYXJfdGhlcm1hbF9mb3JfZWFjaF9wcml2KHByaXYsIGNvbW1vbikgewotCQlpZiAocmNhcl9oYXNfaXJxX3N1cHBvcnQocHJpdikpCi0JCQlyY2FyX3RoZXJtYWxfaXJxX2Rpc2FibGUocHJpdik7Ci0JCXRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3Rlcihwcml2LT56b25lKTsKLQl9Ci0KLQlwbV9ydW50aW1lX3B1dChkZXYpOwotCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXJjYXJfdGhlcm1hbF9yZW1vdmUocGRldik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHJjYXJfdGhlcm1hbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgcmNhcl90aGVybWFsX2NvbW1vbiAqY29tbW9uID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLQlzdHJ1Y3QgcmNhcl90aGVybWFsX3ByaXYgKnByaXY7Ci0KLQlyY2FyX3RoZXJtYWxfZm9yX2VhY2hfcHJpdihwcml2LCBjb21tb24pIHsKLQkJaWYgKHJjYXJfaGFzX2lycV9zdXBwb3J0KHByaXYpKQotCQkJcmNhcl90aGVybWFsX2lycV9kaXNhYmxlKHByaXYpOwotCQl0aGVybWFsX3pvbmVfZGV2aWNlX3VucmVnaXN0ZXIocHJpdi0+em9uZSk7Ci0JfQotCi0JcG1fcnVudGltZV9wdXQoZGV2KTsKLQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCByY2FyX3RoZXJtYWxfZHRfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJjYXItdGhlcm1hbCIsIH0sCiAJe30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvcm9ja2NoaXBfdGhlcm1hbC5jIGIvZHJpdmVycy90aGVybWFsL3JvY2tjaGlwX3RoZXJtYWwuYwppbmRleCA5Nzg3ZThhLi5lODQ1ODQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvcm9ja2NoaXBfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9yb2NrY2hpcF90aGVybWFsLmMKQEAgLTEsNiArMSw5IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDE0LCBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uLCBMdGQKICAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZAorICogQ2Flc2FyIFdhbmcgPHd4dEByb2NrLWNoaXBzLmNvbT4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKICAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC00NSwxNyArNDgsNTAgQEAKIH07CiAKIC8qKgotICogVGhlIHN5c3RlbSBoYXMgdGhyZWUgVGVtcGVyYXR1cmUgU2Vuc29ycy4gIGNoYW5uZWwgMCBpcyByZXNlcnZlZCwKLSAqIGNoYW5uZWwgMSBpcyBmb3IgQ1BVLCBhbmQgY2hhbm5lbCAyIGlzIGZvciBHUFUuCisgKiBUaGUgc3lzdGVtIGhhcyB0d28gVGVtcGVyYXR1cmUgU2Vuc29ycy4KKyAqIHNlbnNvcjAgaXMgZm9yIENQVSwgYW5kIHNlbnNvcjEgaXMgZm9yIEdQVS4KICAqLwogZW51bSBzZW5zb3JfaWQgewotCVNFTlNPUl9DUFUgPSAxLAorCVNFTlNPUl9DUFUgPSAwLAogCVNFTlNPUl9HUFUsCiB9OwogCisvKioKKyogVGhlIGNvbnZlcnNpb24gdGFibGUgaGFzIHRoZSBhZGMgdmFsdWUgYW5kIHRlbXBlcmF0dXJlLgorKiBBRENfREVDUkVNRU5UIGlzIHRoZSBhZGMgdmFsdWUgZGVjcmVtbmV0LihlLmcuIHYyX2NvZGVfdGFibGUpCisqIEFEQ19JTkNSRU1ORVQgaXMgdGhlIGFkYyB2YWx1ZSBpbmNyZW1uZXQuKGUuZy4gdjNfY29kZV90YWJsZSkKKyovCitlbnVtIGFkY19zb3J0X21vZGUgeworCUFEQ19ERUNSRU1FTlQgPSAwLAorCUFEQ19JTkNSRU1FTlQsCit9OworCisvKioKKyAqIFRoZSBtYXggc2Vuc29ycyBpcyB0d28gaW4gcm9ja2NoaXAgU29Dcy4KKyAqIFR3byBzZW5zb3JzOiBDUFUgYW5kIEdQVSBzZW5zb3IuCisgKi8KKyNkZWZpbmUgU09DX01BWF9TRU5TT1JTCTIKKworc3RydWN0IGNoaXBfdHNhZGNfdGFibGUgeworCWNvbnN0IHN0cnVjdCB0c2FkY190YWJsZSAqaWQ7CisKKwkvKiB0aGUgYXJyYXkgdGFibGUgc2l6ZSovCisJdW5zaWduZWQgaW50IGxlbmd0aDsKKworCS8qIHRoYXQgYW5hbG9naWMgbWFzayBkYXRhICovCisJdTMyIGRhdGFfbWFzazsKKworCS8qIHRoZSBzb3J0IG1vZGUgaXMgYWRjIHZhbHVlIHRoYXQgaW5jcmVtZW50IG9yIGRlY3JlbWVudCBpbiB0YWJsZSAqLworCWVudW0gYWRjX3NvcnRfbW9kZSBtb2RlOworfTsKKwogc3RydWN0IHJvY2tjaGlwX3RzYWRjX2NoaXAgeworCS8qIFRoZSBzZW5zb3IgaWQgb2YgY2hpcCBjb3JyZXNwb25kIHRvIHRoZSBBREMgY2hhbm5lbCAqLworCWludCBjaG5faWRbU09DX01BWF9TRU5TT1JTXTsKKwlpbnQgY2huX251bTsKKwogCS8qIFRoZSBoYXJkd2FyZS1jb250cm9sbGVkIHRzaHV0IHByb3BlcnR5ICovCi0JbG9uZyB0c2h1dF90ZW1wOworCWludCB0c2h1dF90ZW1wOwogCWVudW0gdHNodXRfbW9kZSB0c2h1dF9tb2RlOwogCWVudW0gdHNodXRfcG9sYXJpdHkgdHNodXRfcG9sYXJpdHk7CiAKQEAgLTY1LDM3ICsxMDEsNDAgQEAKIAl2b2lkICgqY29udHJvbCkodm9pZCBfX2lvbWVtICpyZWcsIGJvb2wgb24pOwogCiAJLyogUGVyLXNlbnNvciBtZXRob2RzICovCi0JaW50ICgqZ2V0X3RlbXApKGludCBjaG4sIHZvaWQgX19pb21lbSAqcmVnLCBpbnQgKnRlbXApOwotCXZvaWQgKCpzZXRfdHNodXRfdGVtcCkoaW50IGNobiwgdm9pZCBfX2lvbWVtICpyZWcsIGxvbmcgdGVtcCk7CisJaW50ICgqZ2V0X3RlbXApKHN0cnVjdCBjaGlwX3RzYWRjX3RhYmxlIHRhYmxlLAorCQkJaW50IGNobiwgdm9pZCBfX2lvbWVtICpyZWcsIGludCAqdGVtcCk7CisJdm9pZCAoKnNldF90c2h1dF90ZW1wKShzdHJ1Y3QgY2hpcF90c2FkY190YWJsZSB0YWJsZSwKKwkJCSAgICAgICBpbnQgY2huLCB2b2lkIF9faW9tZW0gKnJlZywgaW50IHRlbXApOwogCXZvaWQgKCpzZXRfdHNodXRfbW9kZSkoaW50IGNobiwgdm9pZCBfX2lvbWVtICpyZWcsIGVudW0gdHNodXRfbW9kZSBtKTsKKworCS8qIFBlci10YWJsZSBtZXRob2RzICovCisJc3RydWN0IGNoaXBfdHNhZGNfdGFibGUgdGFibGU7CiB9OwogCiBzdHJ1Y3Qgcm9ja2NoaXBfdGhlcm1hbF9zZW5zb3IgewogCXN0cnVjdCByb2NrY2hpcF90aGVybWFsX2RhdGEgKnRoZXJtYWw7CiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6ZDsKLQllbnVtIHNlbnNvcl9pZCBpZDsKKwlpbnQgaWQ7CiB9OwogCi0jZGVmaW5lIE5VTV9TRU5TT1JTCTIgLyogSWdub3JlIHVudXNlZCBzZW5zb3IgMCAqLwotCiBzdHJ1Y3Qgcm9ja2NoaXBfdGhlcm1hbF9kYXRhIHsKIAljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfdHNhZGNfY2hpcCAqY2hpcDsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCByZXNldF9jb250cm9sICpyZXNldDsKIAotCXN0cnVjdCByb2NrY2hpcF90aGVybWFsX3NlbnNvciBzZW5zb3JzW05VTV9TRU5TT1JTXTsKKwlzdHJ1Y3Qgcm9ja2NoaXBfdGhlcm1hbF9zZW5zb3Igc2Vuc29yc1tTT0NfTUFYX1NFTlNPUlNdOwogCiAJc3RydWN0IGNsayAqY2xrOwogCXN0cnVjdCBjbGsgKnBjbGs7CiAKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAKLQlsb25nIHRzaHV0X3RlbXA7CisJaW50IHRzaHV0X3RlbXA7CiAJZW51bSB0c2h1dF9tb2RlIHRzaHV0X21vZGU7CiAJZW51bSB0c2h1dF9wb2xhcml0eSB0c2h1dF9wb2xhcml0eTsKIH07CiAKLS8qIFRTQURDIFYyIFNlbnNvciBpbmZvIGRlZmluZTogKi8KKy8qIFRTQURDIFNlbnNvciBpbmZvIGRlZmluZTogKi8KICNkZWZpbmUgVFNBRENWMl9BVVRPX0NPTgkJCTB4MDQKICNkZWZpbmUgVFNBRENWMl9JTlRfRU4JCQkJMHgwOAogI2RlZmluZSBUU0FEQ1YyX0lOVF9QRAkJCQkweDBjCkBAIC0xMTcsNiArMTU2LDggQEAKICNkZWZpbmUgVFNBRENWMl9JTlRfUERfQ0xFQVJfTUFTSwkJfkJJVCg4KQogCiAjZGVmaW5lIFRTQURDVjJfREFUQV9NQVNLCQkJMHhmZmYKKyNkZWZpbmUgVFNBRENWM19EQVRBX01BU0sJCQkweDNmZgorCiAjZGVmaW5lIFRTQURDVjJfSElHSFRfSU5UX0RFQk9VTkNFX0NPVU5UCTQKICNkZWZpbmUgVFNBRENWMl9ISUdIVF9UU0hVVF9ERUJPVU5DRV9DT1VOVAk0CiAjZGVmaW5lIFRTQURDVjJfQVVUT19QRVJJT0RfVElNRQkJMjUwIC8qIG1zZWMgKi8KQEAgLTEyNCw3ICsxNjUsNyBAQAogCiBzdHJ1Y3QgdHNhZGNfdGFibGUgewogCXUzMiBjb2RlOwotCWxvbmcgdGVtcDsKKwlpbnQgdGVtcDsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHNhZGNfdGFibGUgdjJfY29kZV90YWJsZVtdID0gewpAQCAtMTY1LDIxICsyMDYsNjEgQEAKIAl7MzQyMSwgMTI1MDAwfSwKIH07CiAKLXN0YXRpYyB1MzIgcmtfdHNhZGN2Ml90ZW1wX3RvX2NvZGUobG9uZyB0ZW1wKQorc3RhdGljIGNvbnN0IHN0cnVjdCB0c2FkY190YWJsZSB2M19jb2RlX3RhYmxlW10gPSB7CisJezAsIC00MDAwMH0sCisJezEwNiwgLTQwMDAwfSwKKwl7MTA4LCAtMzUwMDB9LAorCXsxMTAsIC0zMDAwMH0sCisJezExMiwgLTI1MDAwfSwKKwl7MTE0LCAtMjAwMDB9LAorCXsxMTYsIC0xNTAwMH0sCisJezExOCwgLTEwMDAwfSwKKwl7MTIwLCAtNTAwMH0sCisJezEyMiwgMH0sCisJezEyNCwgNTAwMH0sCisJezEyNiwgMTAwMDB9LAorCXsxMjgsIDE1MDAwfSwKKwl7MTMwLCAyMDAwMH0sCisJezEzMiwgMjUwMDB9LAorCXsxMzQsIDMwMDAwfSwKKwl7MTM2LCAzNTAwMH0sCisJezEzOCwgNDAwMDB9LAorCXsxNDAsIDQ1MDAwfSwKKwl7MTQyLCA1MDAwMH0sCisJezE0NCwgNTUwMDB9LAorCXsxNDYsIDYwMDAwfSwKKwl7MTQ4LCA2NTAwMH0sCisJezE1MCwgNzAwMDB9LAorCXsxNTIsIDc1MDAwfSwKKwl7MTU0LCA4MDAwMH0sCisJezE1NiwgODUwMDB9LAorCXsxNTgsIDkwMDAwfSwKKwl7MTYwLCA5NTAwMH0sCisJezE2MiwgMTAwMDAwfSwKKwl7MTYzLCAxMDUwMDB9LAorCXsxNjUsIDExMDAwMH0sCisJezE2NywgMTE1MDAwfSwKKwl7MTY5LCAxMjAwMDB9LAorCXsxNzEsIDEyNTAwMH0sCisJe1RTQURDVjNfREFUQV9NQVNLLCAxMjUwMDB9LAorfTsKKworc3RhdGljIHUzMiBya190c2FkY3YyX3RlbXBfdG9fY29kZShzdHJ1Y3QgY2hpcF90c2FkY190YWJsZSB0YWJsZSwKKwkJCQkgICBpbnQgdGVtcCkKIHsKIAlpbnQgaGlnaCwgbG93LCBtaWQ7CiAKIAlsb3cgPSAwOwotCWhpZ2ggPSBBUlJBWV9TSVpFKHYyX2NvZGVfdGFibGUpIC0gMTsKKwloaWdoID0gdGFibGUubGVuZ3RoIC0gMTsKIAltaWQgPSAoaGlnaCArIGxvdykgLyAyOwogCi0JaWYgKHRlbXAgPCB2Ml9jb2RlX3RhYmxlW2xvd10udGVtcCB8fCB0ZW1wID4gdjJfY29kZV90YWJsZVtoaWdoXS50ZW1wKQorCWlmICh0ZW1wIDwgdGFibGUuaWRbbG93XS50ZW1wIHx8IHRlbXAgPiB0YWJsZS5pZFtoaWdoXS50ZW1wKQogCQlyZXR1cm4gMDsKIAogCXdoaWxlIChsb3cgPD0gaGlnaCkgewotCQlpZiAodGVtcCA9PSB2Ml9jb2RlX3RhYmxlW21pZF0udGVtcCkKLQkJCXJldHVybiB2Ml9jb2RlX3RhYmxlW21pZF0uY29kZTsKLQkJZWxzZSBpZiAodGVtcCA8IHYyX2NvZGVfdGFibGVbbWlkXS50ZW1wKQorCQlpZiAodGVtcCA9PSB0YWJsZS5pZFttaWRdLnRlbXApCisJCQlyZXR1cm4gdGFibGUuaWRbbWlkXS5jb2RlOworCQllbHNlIGlmICh0ZW1wIDwgdGFibGUuaWRbbWlkXS50ZW1wKQogCQkJaGlnaCA9IG1pZCAtIDE7CiAJCWVsc2UKIAkJCWxvdyA9IG1pZCArIDE7CkBAIC0xODksMjkgKzI3MCw1NCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJrX3RzYWRjdjJfY29kZV90b190ZW1wKHUzMiBjb2RlLCBpbnQgKnRlbXApCitzdGF0aWMgaW50IHJrX3RzYWRjdjJfY29kZV90b190ZW1wKHN0cnVjdCBjaGlwX3RzYWRjX3RhYmxlIHRhYmxlLCB1MzIgY29kZSwKKwkJCQkgICBpbnQgKnRlbXApCiB7CiAJdW5zaWduZWQgaW50IGxvdyA9IDE7Ci0JdW5zaWduZWQgaW50IGhpZ2ggPSBBUlJBWV9TSVpFKHYyX2NvZGVfdGFibGUpIC0gMTsKKwl1bnNpZ25lZCBpbnQgaGlnaCA9IHRhYmxlLmxlbmd0aCAtIDE7CiAJdW5zaWduZWQgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7CiAJdW5zaWduZWQgaW50IG51bTsKIAl1bnNpZ25lZCBsb25nIGRlbm9tOwogCi0JQlVJTERfQlVHX09OKEFSUkFZX1NJWkUodjJfY29kZV90YWJsZSkgPCAyKTsKKwlXQVJOX09OKHRhYmxlLmxlbmd0aCA8IDIpOwogCi0JY29kZSAmPSBUU0FEQ1YyX0RBVEFfTUFTSzsKLQlpZiAoY29kZSA8IHYyX2NvZGVfdGFibGVbaGlnaF0uY29kZSkKLQkJcmV0dXJuIC1FQUdBSU47CQkvKiBJbmNvcnJlY3QgcmVhZGluZyAqLworCXN3aXRjaCAodGFibGUubW9kZSkgeworCWNhc2UgQURDX0RFQ1JFTUVOVDoKKwkJY29kZSAmPSB0YWJsZS5kYXRhX21hc2s7CisJCWlmIChjb2RlIDwgdGFibGUuaWRbaGlnaF0uY29kZSkKKwkJCXJldHVybiAtRUFHQUlOOwkJLyogSW5jb3JyZWN0IHJlYWRpbmcgKi8KIAotCXdoaWxlIChsb3cgPD0gaGlnaCkgewotCQlpZiAoY29kZSA+PSB2Ml9jb2RlX3RhYmxlW21pZF0uY29kZSAmJgotCQkgICAgY29kZSA8IHYyX2NvZGVfdGFibGVbbWlkIC0gMV0uY29kZSkKLQkJCWJyZWFrOwotCQllbHNlIGlmIChjb2RlIDwgdjJfY29kZV90YWJsZVttaWRdLmNvZGUpCi0JCQlsb3cgPSBtaWQgKyAxOwotCQllbHNlCi0JCQloaWdoID0gbWlkIC0gMTsKLQkJbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKKwkJd2hpbGUgKGxvdyA8PSBoaWdoKSB7CisJCQlpZiAoY29kZSA+PSB0YWJsZS5pZFttaWRdLmNvZGUgJiYKKwkJCSAgICBjb2RlIDwgdGFibGUuaWRbbWlkIC0gMV0uY29kZSkKKwkJCQlicmVhazsKKwkJCWVsc2UgaWYgKGNvZGUgPCB0YWJsZS5pZFttaWRdLmNvZGUpCisJCQkJbG93ID0gbWlkICsgMTsKKwkJCWVsc2UKKwkJCQloaWdoID0gbWlkIC0gMTsKKworCQkJbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKKwkJfQorCQlicmVhazsKKwljYXNlIEFEQ19JTkNSRU1FTlQ6CisJCWNvZGUgJj0gdGFibGUuZGF0YV9tYXNrOworCQlpZiAoY29kZSA8IHRhYmxlLmlkW2xvd10uY29kZSkKKwkJCXJldHVybiAtRUFHQUlOOwkJLyogSW5jb3JyZWN0IHJlYWRpbmcgKi8KKworCQl3aGlsZSAobG93IDw9IGhpZ2gpIHsKKwkJCWlmIChjb2RlID49IHRhYmxlLmlkW21pZCAtIDFdLmNvZGUgJiYKKwkJCSAgICBjb2RlIDwgdGFibGUuaWRbbWlkXS5jb2RlKQorCQkJCWJyZWFrOworCQkJZWxzZSBpZiAoY29kZSA+IHRhYmxlLmlkW21pZF0uY29kZSkKKwkJCQlsb3cgPSBtaWQgKyAxOworCQkJZWxzZQorCQkJCWhpZ2ggPSBtaWQgLSAxOworCisJCQltaWQgPSAobG93ICsgaGlnaCkgLyAyOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycigiSW52YWxpZCB0aGUgY29udmVyc2lvbiB0YWJsZVxuIik7CiAJfQogCiAJLyoKQEAgLTIyMCwyNCArMzI2LDI4IEBACiAJICogdGVtcGVyYXR1cmUgYmV0d2VlbiAyIHRhYmxlIGVudHJpZXMgaXMgbGluZWFyIGFuZCBpbnRlcnBvbGF0ZQogCSAqIHRvIHByb2R1Y2UgbGVzcyBncmFudWxhciByZXN1bHQuCiAJICovCi0JbnVtID0gdjJfY29kZV90YWJsZVttaWRdLnRlbXAgLSB2Ml9jb2RlX3RhYmxlW21pZCAtIDFdLnRlbXA7Ci0JbnVtICo9IHYyX2NvZGVfdGFibGVbbWlkIC0gMV0uY29kZSAtIGNvZGU7Ci0JZGVub20gPSB2Ml9jb2RlX3RhYmxlW21pZCAtIDFdLmNvZGUgLSB2Ml9jb2RlX3RhYmxlW21pZF0uY29kZTsKLQkqdGVtcCA9IHYyX2NvZGVfdGFibGVbbWlkIC0gMV0udGVtcCArIChudW0gLyBkZW5vbSk7CisJbnVtID0gdGFibGUuaWRbbWlkXS50ZW1wIC0gdjJfY29kZV90YWJsZVttaWQgLSAxXS50ZW1wOworCW51bSAqPSBhYnModGFibGUuaWRbbWlkIC0gMV0uY29kZSAtIGNvZGUpOworCWRlbm9tID0gYWJzKHRhYmxlLmlkW21pZCAtIDFdLmNvZGUgLSB0YWJsZS5pZFttaWRdLmNvZGUpOworCSp0ZW1wID0gdGFibGUuaWRbbWlkIC0gMV0udGVtcCArIChudW0gLyBkZW5vbSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBya190c2FkY3YyX2luaXRpYWxpemUgLSBpbml0aWFsaXplIFRBU0RDIENvbnRyb2xsZXIKLSAqICgxKSBTZXQgVFNBRENWMl9BVVRPX1BFUklPRCwgY29uZmlndXJlIHRoZSBpbnRlcmxlYXZlIGJldHdlZW4KLSAqIGV2ZXJ5IHR3byBhY2Nlc3Npbmcgb2YgVFNBREMgaW4gbm9ybWFsIG9wZXJhdGlvbi4KLSAqICgyKSBTZXQgVFNBRENWMl9BVVRPX1BFUklPRF9IVCwgY29uZmlndXJlIHRoZSBpbnRlcmxlYXZlIGJldHdlZW4KLSAqIGV2ZXJ5IHR3byBhY2Nlc3Npbmcgb2YgVFNBREMgYWZ0ZXIgdGhlIHRlbXBlcmF0dXJlIGlzIGhpZ2hlcgotICogdGhhbiBDT01fU0hVVCBvciBDT01fSU5ULgotICogKDMpIFNldCBUU0FEQ1YyX0hJR0hfSU5UX0RFQk9VTkNFIGFuZCBUU0FEQ19ISUdIVF9UU0hVVF9ERUJPVU5DRSwKLSAqIGlmIHRoZSB0ZW1wZXJhdHVyZSBpcyBoaWdoZXIgdGhhbiBDT01QX0lOVCBvciBDT01QX1NIVVQgZm9yCi0gKiAiZGVib3VuY2UiIHRpbWVzLCBUU0FEQyBjb250cm9sbGVyIHdpbGwgZ2VuZXJhdGUgaW50ZXJydXB0IG9yIFRTSFVULgorICogcmtfdHNhZGN2Ml9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBUQVNEQyBDb250cm9sbGVyLgorICoKKyAqICgxKSBTZXQgVFNBRENfVjJfQVVUT19QRVJJT0Q6CisgKiAgICAgQ29uZmlndXJlIHRoZSBpbnRlcmxlYXZlIGJldHdlZW4gZXZlcnkgdHdvIGFjY2Vzc2luZyBvZgorICogICAgIFRTQURDIGluIG5vcm1hbCBvcGVyYXRpb24uCisgKgorICogKDIpIFNldCBUU0FEQ1YyX0FVVE9fUEVSSU9EX0hUOgorICogICAgIENvbmZpZ3VyZSB0aGUgaW50ZXJsZWF2ZSBiZXR3ZWVuIGV2ZXJ5IHR3byBhY2Nlc3Npbmcgb2YKKyAqICAgICBUU0FEQyBhZnRlciB0aGUgdGVtcGVyYXR1cmUgaXMgaGlnaGVyIHRoYW4gQ09NX1NIVVQgb3IgQ09NX0lOVC4KKyAqCisgKiAoMykgU2V0IFRTQURDVjJfSElHSF9JTlRfREVCT1VOQ0UgYW5kIFRTQURDX0hJR0hUX1RTSFVUX0RFQk9VTkNFOgorICogICAgIElmIHRoZSB0ZW1wZXJhdHVyZSBpcyBoaWdoZXIgdGhhbiBDT01QX0lOVCBvciBDT01QX1NIVVQgZm9yCisgKiAgICAgImRlYm91bmNlIiB0aW1lcywgVFNBREMgY29udHJvbGxlciB3aWxsIGdlbmVyYXRlIGludGVycnVwdCBvciBUU0hVVC4KICAqLwogc3RhdGljIHZvaWQgcmtfdHNhZGN2Ml9pbml0aWFsaXplKHZvaWQgX19pb21lbSAqcmVncywKIAkJCQkgIGVudW0gdHNodXRfcG9sYXJpdHkgdHNodXRfcG9sYXJpdHkpCkBAIC0yNzksMjAgKzM4OSwyMiBAQAogCXdyaXRlbF9yZWxheGVkKHZhbCwgcmVncyArIFRTQURDVjJfQVVUT19DT04pOwogfQogCi1zdGF0aWMgaW50IHJrX3RzYWRjdjJfZ2V0X3RlbXAoaW50IGNobiwgdm9pZCBfX2lvbWVtICpyZWdzLCBpbnQgKnRlbXApCitzdGF0aWMgaW50IHJrX3RzYWRjdjJfZ2V0X3RlbXAoc3RydWN0IGNoaXBfdHNhZGNfdGFibGUgdGFibGUsCisJCQkgICAgICAgaW50IGNobiwgdm9pZCBfX2lvbWVtICpyZWdzLCBpbnQgKnRlbXApCiB7CiAJdTMyIHZhbDsKIAogCXZhbCA9IHJlYWRsX3JlbGF4ZWQocmVncyArIFRTQURDVjJfREFUQShjaG4pKTsKIAotCXJldHVybiBya190c2FkY3YyX2NvZGVfdG9fdGVtcCh2YWwsIHRlbXApOworCXJldHVybiBya190c2FkY3YyX2NvZGVfdG9fdGVtcCh0YWJsZSwgdmFsLCB0ZW1wKTsKIH0KIAotc3RhdGljIHZvaWQgcmtfdHNhZGN2Ml90c2h1dF90ZW1wKGludCBjaG4sIHZvaWQgX19pb21lbSAqcmVncywgbG9uZyB0ZW1wKQorc3RhdGljIHZvaWQgcmtfdHNhZGN2Ml90c2h1dF90ZW1wKHN0cnVjdCBjaGlwX3RzYWRjX3RhYmxlIHRhYmxlLAorCQkJCSAgaW50IGNobiwgdm9pZCBfX2lvbWVtICpyZWdzLCBpbnQgdGVtcCkKIHsKIAl1MzIgdHNodXRfdmFsdWUsIHZhbDsKIAotCXRzaHV0X3ZhbHVlID0gcmtfdHNhZGN2Ml90ZW1wX3RvX2NvZGUodGVtcCk7CisJdHNodXRfdmFsdWUgPSBya190c2FkY3YyX3RlbXBfdG9fY29kZSh0YWJsZSwgdGVtcCk7CiAJd3JpdGVsX3JlbGF4ZWQodHNodXRfdmFsdWUsIHJlZ3MgKyBUU0FEQ1YyX0NPTVBfU0hVVChjaG4pKTsKIAogCS8qIFRTSFVUIHdpbGwgYmUgdmFsaWQgKi8KQEAgLTMxOCw2ICs0MzAsMTAgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByb2NrY2hpcF90c2FkY19jaGlwIHJrMzI4OF90c2FkY19kYXRhID0geworCS5jaG5faWRbU0VOU09SX0NQVV0gPSAxLCAvKiBjcHUgc2Vuc29yIGlzIGNoYW5uZWwgMSAqLworCS5jaG5faWRbU0VOU09SX0dQVV0gPSAyLCAvKiBncHUgc2Vuc29yIGlzIGNoYW5uZWwgMiAqLworCS5jaG5fbnVtID0gMiwgLyogdHdvIGNoYW5uZWxzIGZvciB0c2FkYyAqLworCiAJLnRzaHV0X21vZGUgPSBUU0hVVF9NT0RFX0dQSU8sIC8qIGRlZmF1bHQgVFNIVVQgdmlhIEdQSU8gZ2l2ZSBQTUlDICovCiAJLnRzaHV0X3BvbGFyaXR5ID0gVFNIVVRfTE9XX0FDVElWRSwgLyogZGVmYXVsdCBUU0hVVCBMT1cgQUNUSVZFICovCiAJLnRzaHV0X3RlbXAgPSA5NTAwMCwKQEAgLTMyOCw2ICs0NDQsMzcgQEAKIAkuZ2V0X3RlbXAgPSBya190c2FkY3YyX2dldF90ZW1wLAogCS5zZXRfdHNodXRfdGVtcCA9IHJrX3RzYWRjdjJfdHNodXRfdGVtcCwKIAkuc2V0X3RzaHV0X21vZGUgPSBya190c2FkY3YyX3RzaHV0X21vZGUsCisKKwkudGFibGUgPSB7CisJCS5pZCA9IHYyX2NvZGVfdGFibGUsCisJCS5sZW5ndGggPSBBUlJBWV9TSVpFKHYyX2NvZGVfdGFibGUpLAorCQkuZGF0YV9tYXNrID0gVFNBRENWMl9EQVRBX01BU0ssCisJCS5tb2RlID0gQURDX0RFQ1JFTUVOVCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByb2NrY2hpcF90c2FkY19jaGlwIHJrMzM2OF90c2FkY19kYXRhID0geworCS5jaG5faWRbU0VOU09SX0NQVV0gPSAwLCAvKiBjcHUgc2Vuc29yIGlzIGNoYW5uZWwgMCAqLworCS5jaG5faWRbU0VOU09SX0dQVV0gPSAxLCAvKiBncHUgc2Vuc29yIGlzIGNoYW5uZWwgMSAqLworCS5jaG5fbnVtID0gMiwgLyogdHdvIGNoYW5uZWxzIGZvciB0c2FkYyAqLworCisJLnRzaHV0X21vZGUgPSBUU0hVVF9NT0RFX0dQSU8sIC8qIGRlZmF1bHQgVFNIVVQgdmlhIEdQSU8gZ2l2ZSBQTUlDICovCisJLnRzaHV0X3BvbGFyaXR5ID0gVFNIVVRfTE9XX0FDVElWRSwgLyogZGVmYXVsdCBUU0hVVCBMT1cgQUNUSVZFICovCisJLnRzaHV0X3RlbXAgPSA5NTAwMCwKKworCS5pbml0aWFsaXplID0gcmtfdHNhZGN2Ml9pbml0aWFsaXplLAorCS5pcnFfYWNrID0gcmtfdHNhZGN2Ml9pcnFfYWNrLAorCS5jb250cm9sID0gcmtfdHNhZGN2Ml9jb250cm9sLAorCS5nZXRfdGVtcCA9IHJrX3RzYWRjdjJfZ2V0X3RlbXAsCisJLnNldF90c2h1dF90ZW1wID0gcmtfdHNhZGN2Ml90c2h1dF90ZW1wLAorCS5zZXRfdHNodXRfbW9kZSA9IHJrX3RzYWRjdjJfdHNodXRfbW9kZSwKKworCS50YWJsZSA9IHsKKwkJLmlkID0gdjNfY29kZV90YWJsZSwKKwkJLmxlbmd0aCA9IEFSUkFZX1NJWkUodjNfY29kZV90YWJsZSksCisJCS5kYXRhX21hc2sgPSBUU0FEQ1YzX0RBVEFfTUFTSywKKwkJLm1vZGUgPSBBRENfSU5DUkVNRU5ULAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9yb2NrY2hpcF90aGVybWFsX21hdGNoW10gPSB7CkBAIC0zMzUsNiArNDgyLDEwIEBACiAJCS5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC10c2FkYyIsCiAJCS5kYXRhID0gKHZvaWQgKikmcmszMjg4X3RzYWRjX2RhdGEsCiAJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzM2OC10c2FkYyIsCisJCS5kYXRhID0gKHZvaWQgKikmcmszMzY4X3RzYWRjX2RhdGEsCisJfSwKIAl7IC8qIGVuZCAqLyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3JvY2tjaGlwX3RoZXJtYWxfbWF0Y2gpOwpAQCAtMzU3LDcgKzUwOCw3IEBACiAKIAl0aGVybWFsLT5jaGlwLT5pcnFfYWNrKHRoZXJtYWwtPnJlZ3MpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGhlcm1hbC0+c2Vuc29ycyk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgdGhlcm1hbC0+Y2hpcC0+Y2huX251bTsgaSsrKQogCQl0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZSh0aGVybWFsLT5zZW5zb3JzW2ldLnR6ZCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zNzAsNyArNTIxLDggQEAKIAljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfdHNhZGNfY2hpcCAqdHNhZGMgPSBzZW5zb3ItPnRoZXJtYWwtPmNoaXA7CiAJaW50IHJldHZhbDsKIAotCXJldHZhbCA9IHRzYWRjLT5nZXRfdGVtcChzZW5zb3ItPmlkLCB0aGVybWFsLT5yZWdzLCBvdXRfdGVtcCk7CisJcmV0dmFsID0gdHNhZGMtPmdldF90ZW1wKHRzYWRjLT50YWJsZSwKKwkJCQkgc2Vuc29yLT5pZCwgdGhlcm1hbC0+cmVncywgb3V0X3RlbXApOwogCWRldl9kYmcoJnRoZXJtYWwtPnBkZXYtPmRldiwgInNlbnNvciAlZCAtIHRlbXA6ICVkLCByZXR2YWw6ICVkXG4iLAogCQlzZW5zb3ItPmlkLCAqb3V0X3RlbXAsIHJldHZhbCk7CiAKQEAgLTM4OSw3ICs1NDEsNyBAQAogCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicm9ja2NoaXAsaHctdHNodXQtdGVtcCIsICZzaHV0X3RlbXApKSB7CiAJCWRldl93YXJuKGRldiwKLQkJCSAiTWlzc2luZyB0c2h1dCB0ZW1wIHByb3BlcnR5LCB1c2luZyBkZWZhdWx0ICVsZFxuIiwKKwkJCSAiTWlzc2luZyB0c2h1dCB0ZW1wIHByb3BlcnR5LCB1c2luZyBkZWZhdWx0ICVkXG4iLAogCQkJIHRoZXJtYWwtPmNoaXAtPnRzaHV0X3RlbXApOwogCQl0aGVybWFsLT50c2h1dF90ZW1wID0gdGhlcm1hbC0+Y2hpcC0+dHNodXRfdGVtcDsKIAl9IGVsc2UgewpAQCAtMzk3LDcgKzU0OSw3IEBACiAJfQogCiAJaWYgKHRoZXJtYWwtPnRzaHV0X3RlbXAgPiBJTlRfTUFYKSB7Ci0JCWRldl9lcnIoZGV2LCAiSW52YWxpZCB0c2h1dCB0ZW1wZXJhdHVyZSBzcGVjaWZpZWQ6ICVsZFxuIiwKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIHRzaHV0IHRlbXBlcmF0dXJlIHNwZWNpZmllZDogJWRcbiIsCiAJCQl0aGVybWFsLT50c2h1dF90ZW1wKTsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQpAQCAtNDQyLDEzICs1OTQsMTQgQEAKIHJvY2tjaGlwX3RoZXJtYWxfcmVnaXN0ZXJfc2Vuc29yKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJIHN0cnVjdCByb2NrY2hpcF90aGVybWFsX2RhdGEgKnRoZXJtYWwsCiAJCQkJIHN0cnVjdCByb2NrY2hpcF90aGVybWFsX3NlbnNvciAqc2Vuc29yLAotCQkJCSBlbnVtIHNlbnNvcl9pZCBpZCkKKwkJCQkgaW50IGlkKQogewogCWNvbnN0IHN0cnVjdCByb2NrY2hpcF90c2FkY19jaGlwICp0c2FkYyA9IHRoZXJtYWwtPmNoaXA7CiAJaW50IGVycm9yOwogCiAJdHNhZGMtPnNldF90c2h1dF9tb2RlKGlkLCB0aGVybWFsLT5yZWdzLCB0aGVybWFsLT50c2h1dF9tb2RlKTsKLQl0c2FkYy0+c2V0X3RzaHV0X3RlbXAoaWQsIHRoZXJtYWwtPnJlZ3MsIHRoZXJtYWwtPnRzaHV0X3RlbXApOworCXRzYWRjLT5zZXRfdHNodXRfdGVtcCh0c2FkYy0+dGFibGUsIGlkLCB0aGVybWFsLT5yZWdzLAorCQkJICAgICAgdGhlcm1hbC0+dHNodXRfdGVtcCk7CiAKIAlzZW5zb3ItPnRoZXJtYWwgPSB0aGVybWFsOwogCXNlbnNvci0+aWQgPSBpZDsKQEAgLTQ4MSw3ICs2MzQsNyBAQAogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCBpcnE7Ci0JaW50IGk7CisJaW50IGksIGo7CiAJaW50IGVycm9yOwogCiAJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKG9mX3JvY2tjaGlwX3RoZXJtYWxfbWF0Y2gsIG5wKTsKQEAgLTU1NiwyMiArNzA5LDE5IEBACiAKIAl0aGVybWFsLT5jaGlwLT5pbml0aWFsaXplKHRoZXJtYWwtPnJlZ3MsIHRoZXJtYWwtPnRzaHV0X3BvbGFyaXR5KTsKIAotCWVycm9yID0gcm9ja2NoaXBfdGhlcm1hbF9yZWdpc3Rlcl9zZW5zb3IocGRldiwgdGhlcm1hbCwKLQkJCQkJCSAmdGhlcm1hbC0+c2Vuc29yc1swXSwKLQkJCQkJCSBTRU5TT1JfQ1BVKTsKLQlpZiAoZXJyb3IpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJImZhaWxlZCB0byByZWdpc3RlciBDUFUgdGhlcm1hbCBzZW5zb3I6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8gZXJyX2Rpc2FibGVfcGNsazsKLQl9Ci0KLQllcnJvciA9IHJvY2tjaGlwX3RoZXJtYWxfcmVnaXN0ZXJfc2Vuc29yKHBkZXYsIHRoZXJtYWwsCi0JCQkJCQkgJnRoZXJtYWwtPnNlbnNvcnNbMV0sCi0JCQkJCQkgU0VOU09SX0dQVSk7Ci0JaWYgKGVycm9yKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgR1BVIHRoZXJtYWwgc2Vuc29yOiAlZFxuIiwgZXJyb3IpOwotCQlnb3RvIGVycl91bnJlZ2lzdGVyX2NwdV9zZW5zb3I7CisJZm9yIChpID0gMDsgaSA8IHRoZXJtYWwtPmNoaXAtPmNobl9udW07IGkrKykgeworCQllcnJvciA9IHJvY2tjaGlwX3RoZXJtYWxfcmVnaXN0ZXJfc2Vuc29yKHBkZXYsIHRoZXJtYWwsCisJCQkJCQkmdGhlcm1hbC0+c2Vuc29yc1tpXSwKKwkJCQkJCXRoZXJtYWwtPmNoaXAtPmNobl9pZFtpXSk7CisJCWlmIChlcnJvcikgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgc2Vuc29yWyVkXSA6IGVycm9yID0gJWRcbiIsCisJCQkJaSwgZXJyb3IpOworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCQl0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3VucmVnaXN0ZXIoJnBkZXYtPmRldiwKKwkJCQkJCXRoZXJtYWwtPnNlbnNvcnNbal0udHpkKTsKKwkJCWdvdG8gZXJyX2Rpc2FibGVfcGNsazsKKwkJfQogCX0KIAogCWVycm9yID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmcGRldi0+ZGV2LCBpcnEsIE5VTEwsCkBAIC01ODEsMjIgKzczMSwyMyBAQAogCWlmIChlcnJvcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiZmFpbGVkIHRvIHJlcXVlc3QgdHNhZGMgaXJxOiAlZFxuIiwgZXJyb3IpOwotCQlnb3RvIGVycl91bnJlZ2lzdGVyX2dwdV9zZW5zb3I7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXJfc2Vuc29yOwogCX0KIAogCXRoZXJtYWwtPmNoaXAtPmNvbnRyb2wodGhlcm1hbC0+cmVncywgdHJ1ZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aGVybWFsLT5zZW5zb3JzKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCB0aGVybWFsLT5jaGlwLT5jaG5fbnVtOyBpKyspCiAJCXJvY2tjaGlwX3RoZXJtYWxfdG9nZ2xlX3NlbnNvcigmdGhlcm1hbC0+c2Vuc29yc1tpXSwgdHJ1ZSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0aGVybWFsKTsKIAogCXJldHVybiAwOwogCi1lcnJfdW5yZWdpc3Rlcl9ncHVfc2Vuc29yOgotCXRoZXJtYWxfem9uZV9vZl9zZW5zb3JfdW5yZWdpc3RlcigmcGRldi0+ZGV2LCB0aGVybWFsLT5zZW5zb3JzWzFdLnR6ZCk7Ci1lcnJfdW5yZWdpc3Rlcl9jcHVfc2Vuc29yOgotCXRoZXJtYWxfem9uZV9vZl9zZW5zb3JfdW5yZWdpc3RlcigmcGRldi0+ZGV2LCB0aGVybWFsLT5zZW5zb3JzWzBdLnR6ZCk7CitlcnJfdW5yZWdpc3Rlcl9zZW5zb3I6CisJd2hpbGUgKGktLSkKKwkJdGhlcm1hbF96b25lX29mX3NlbnNvcl91bnJlZ2lzdGVyKCZwZGV2LT5kZXYsCisJCQkJCQkgIHRoZXJtYWwtPnNlbnNvcnNbaV0udHpkKTsKKwogZXJyX2Rpc2FibGVfcGNsazoKIAljbGtfZGlzYWJsZV91bnByZXBhcmUodGhlcm1hbC0+cGNsayk7CiBlcnJfZGlzYWJsZV9jbGs6CkBAIC02MTAsNyArNzYxLDcgQEAKIAlzdHJ1Y3Qgcm9ja2NoaXBfdGhlcm1hbF9kYXRhICp0aGVybWFsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aGVybWFsLT5zZW5zb3JzKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHRoZXJtYWwtPmNoaXAtPmNobl9udW07IGkrKykgewogCQlzdHJ1Y3Qgcm9ja2NoaXBfdGhlcm1hbF9zZW5zb3IgKnNlbnNvciA9ICZ0aGVybWFsLT5zZW5zb3JzW2ldOwogCiAJCXJvY2tjaGlwX3RoZXJtYWxfdG9nZ2xlX3NlbnNvcihzZW5zb3IsIGZhbHNlKTsKQEAgLTYzMSw3ICs3ODIsNyBAQAogCXN0cnVjdCByb2NrY2hpcF90aGVybWFsX2RhdGEgKnRoZXJtYWwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRoZXJtYWwtPnNlbnNvcnMpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IHRoZXJtYWwtPmNoaXAtPmNobl9udW07IGkrKykKIAkJcm9ja2NoaXBfdGhlcm1hbF90b2dnbGVfc2Vuc29yKCZ0aGVybWFsLT5zZW5zb3JzW2ldLCBmYWxzZSk7CiAKIAl0aGVybWFsLT5jaGlwLT5jb250cm9sKHRoZXJtYWwtPnJlZ3MsIGZhbHNlKTsKQEAgLTY2MywxOCArODE0LDE5IEBACiAKIAl0aGVybWFsLT5jaGlwLT5pbml0aWFsaXplKHRoZXJtYWwtPnJlZ3MsIHRoZXJtYWwtPnRzaHV0X3BvbGFyaXR5KTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRoZXJtYWwtPnNlbnNvcnMpOyBpKyspIHsKLQkJZW51bSBzZW5zb3JfaWQgaWQgPSB0aGVybWFsLT5zZW5zb3JzW2ldLmlkOworCWZvciAoaSA9IDA7IGkgPCB0aGVybWFsLT5jaGlwLT5jaG5fbnVtOyBpKyspIHsKKwkJaW50IGlkID0gdGhlcm1hbC0+c2Vuc29yc1tpXS5pZDsKIAogCQl0aGVybWFsLT5jaGlwLT5zZXRfdHNodXRfbW9kZShpZCwgdGhlcm1hbC0+cmVncywKIAkJCQkJICAgICAgdGhlcm1hbC0+dHNodXRfbW9kZSk7Ci0JCXRoZXJtYWwtPmNoaXAtPnNldF90c2h1dF90ZW1wKGlkLCB0aGVybWFsLT5yZWdzLAorCQl0aGVybWFsLT5jaGlwLT5zZXRfdHNodXRfdGVtcCh0aGVybWFsLT5jaGlwLT50YWJsZSwKKwkJCQkJICAgICAgaWQsIHRoZXJtYWwtPnJlZ3MsCiAJCQkJCSAgICAgIHRoZXJtYWwtPnRzaHV0X3RlbXApOwogCX0KIAogCXRoZXJtYWwtPmNoaXAtPmNvbnRyb2wodGhlcm1hbC0+cmVncywgdHJ1ZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aGVybWFsLT5zZW5zb3JzKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCB0aGVybWFsLT5jaGlwLT5jaG5fbnVtOyBpKyspCiAJCXJvY2tjaGlwX3RoZXJtYWxfdG9nZ2xlX3NlbnNvcigmdGhlcm1hbC0+c2Vuc29yc1tpXSwgdHJ1ZSk7CiAKIAlwaW5jdHJsX3BtX3NlbGVjdF9kZWZhdWx0X3N0YXRlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX3R0eS5jIGIvZHJpdmVycy90dHkvbl90dHkuYwppbmRleCAxMzg0NDI2Li5lNDljMmJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl90dHkuYworKysgYi9kcml2ZXJzL3R0eS9uX3R0eS5jCkBAIC0xNjksNyArMTY5LDcgQEAKIHsKIAlzdHJ1Y3Qgbl90dHlfZGF0YSAqbGRhdGEgPSB0dHktPmRpc2NfZGF0YTsKIAotCXR0eV9hdWRpdF9hZGRfZGF0YSh0dHksIHRvLCBuLCBsZGF0YS0+aWNhbm9uKTsKKwl0dHlfYXVkaXRfYWRkX2RhdGEodHR5LCBmcm9tLCBuLCBsZGF0YS0+aWNhbm9uKTsKIAlyZXR1cm4gY29weV90b191c2VyKHRvLCBmcm9tLCBuKTsKIH0KIApAQCAtMjA1NCwxMyArMjA1NCwxMyBAQAogCXNpemVfdCBlb2w7CiAJc2l6ZV90IHRhaWw7CiAJaW50IHJldCwgZm91bmQgPSAwOwotCWJvb2wgZW9mX3B1c2ggPSAwOwogCiAJLyogTi5CLiBhdm9pZCBvdmVycnVuIGlmIG5yID09IDAgKi8KLQluID0gbWluKCpuciwgc21wX2xvYWRfYWNxdWlyZSgmbGRhdGEtPmNhbm9uX2hlYWQpIC0gbGRhdGEtPnJlYWRfdGFpbCk7Ci0JaWYgKCFuKQorCWlmICghKm5yKQogCQlyZXR1cm4gMDsKIAorCW4gPSBtaW4oKm5yICsgMSwgc21wX2xvYWRfYWNxdWlyZSgmbGRhdGEtPmNhbm9uX2hlYWQpIC0gbGRhdGEtPnJlYWRfdGFpbCk7CisKIAl0YWlsID0gbGRhdGEtPnJlYWRfdGFpbCAmIChOX1RUWV9CVUZfU0laRSAtIDEpOwogCXNpemUgPSBtaW5fdChzaXplX3QsIHRhaWwgKyBuLCBOX1RUWV9CVUZfU0laRSk7CiAKQEAgLTIwODEsMTIgKzIwODEsMTEgQEAKIAluID0gZW9sIC0gdGFpbDsKIAlpZiAobiA+IE5fVFRZX0JVRl9TSVpFKQogCQluICs9IE5fVFRZX0JVRl9TSVpFOwotCW4gKz0gZm91bmQ7Ci0JYyA9IG47CisJYyA9IG4gKyBmb3VuZDsKIAotCWlmIChmb3VuZCAmJiAhbGRhdGEtPnB1c2ggJiYgcmVhZF9idWYobGRhdGEsIGVvbCkgPT0gX19ESVNBQkxFRF9DSEFSKSB7Ci0JCW4tLTsKLQkJZW9mX3B1c2ggPSAhbiAmJiBsZGF0YS0+cmVhZF90YWlsICE9IGxkYXRhLT5saW5lX3N0YXJ0OworCWlmICghZm91bmQgfHwgcmVhZF9idWYobGRhdGEsIGVvbCkgIT0gX19ESVNBQkxFRF9DSEFSKSB7CisJCWMgPSBtaW4oKm5yLCBjKTsKKwkJbiA9IGM7CiAJfQogCiAJbl90dHlfdHJhY2UoIiVzOiBlb2w6JXp1IGZvdW5kOiVkIG46JXp1IGM6JXp1IHNpemU6JXp1IG1vcmU6JXp1XG4iLApAQCAtMjExNiw3ICsyMTE1LDcgQEAKIAkJCWxkYXRhLT5wdXNoID0gMDsKIAkJdHR5X2F1ZGl0X3B1c2godHR5KTsKIAl9Ci0JcmV0dXJuIGVvZl9wdXNoID8gLUVBR0FJTiA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIGV4dGVybiBzc2l6ZV90IHJlZGlyZWN0ZWRfdHR5X3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosCkBAIC0yMjczLDEwICsyMjcyLDcgQEAKIAogCQlpZiAobGRhdGEtPmljYW5vbiAmJiAhTF9FWFRQUk9DKHR0eSkpIHsKIAkJCXJldHZhbCA9IGNhbm9uX2NvcHlfZnJvbV9yZWFkX2J1Zih0dHksICZiLCAmbnIpOwotCQkJaWYgKHJldHZhbCA9PSAtRUFHQUlOKSB7Ci0JCQkJcmV0dmFsID0gMDsKLQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSBpZiAocmV0dmFsKQorCQkJaWYgKHJldHZhbCkKIAkJCQlicmVhazsKIAkJfSBlbHNlIHsKIAkJCWludCB1bmNvcGllZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfZnNsLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2ZzbC5jCmluZGV4IGMwNTMzYTUuLjkxMGJmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfZnNsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9mc2wuYwpAQCAtNjAsMyArNjAsNCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbDgyNTBfaGFuZGxlX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX3VuaXBoaWVyLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX3VuaXBoaWVyLmMKaW5kZXggZDExNjIxZS4uMjQ1ZWRiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF91bmlwaGllci5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfdW5pcGhpZXIuYwpAQCAtMTE1LDEyICsxMTUsMTYgQEAKICAqLwogc3RhdGljIGludCB1bmlwaGllcl9zZXJpYWxfZGxfcmVhZChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewotCXJldHVybiByZWFkbCh1cC0+cG9ydC5tZW1iYXNlICsgVU5JUEhJRVJfVUFSVF9ETFIpOworCWludCBvZmZzZXQgPSBVTklQSElFUl9VQVJUX0RMUiA8PCB1cC0+cG9ydC5yZWdzaGlmdDsKKworCXJldHVybiByZWFkbCh1cC0+cG9ydC5tZW1iYXNlICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgdW5pcGhpZXJfc2VyaWFsX2RsX3dyaXRlKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAsIGludCB2YWx1ZSkKIHsKLQl3cml0ZWwodmFsdWUsIHVwLT5wb3J0Lm1lbWJhc2UgKyBVTklQSElFUl9VQVJUX0RMUik7CisJaW50IG9mZnNldCA9IFVOSVBISUVSX1VBUlRfRExSIDw8IHVwLT5wb3J0LnJlZ3NoaWZ0OworCisJd3JpdGVsKHZhbHVlLCB1cC0+cG9ydC5tZW1iYXNlICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGludCB1bmlwaGllcl9vZl9zZXJpYWxfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwL0tjb25maWcKaW5kZXggZTZmNWUxMi4uNjQxMmYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvS2NvbmZpZworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC9LY29uZmlnCkBAIC0zNzMsNiArMzczLDcgQEAKIAlkZXBlbmRzIG9uIFNFUklBTF84MjUwICYmIFBDSQogCXNlbGVjdCBIU1VfRE1BIGlmIFNFUklBTF84MjUwX0RNQQogCXNlbGVjdCBIU1VfRE1BX1BDSSBpZiBYODZfSU5URUxfTUlECisJc2VsZWN0IFJBVElPTkFMCiAJaGVscAogCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGhhbmRsaW5nIG9mIHRoZSBleHRyYSBmZWF0dXJlcwogCSAgcHJlc2VudCBvbiB0aGUgVUFSVCBmb3VuZCBvbiBJbnRlbCBNZWRmaWVsZCBTT0MgYW5kIHZhcmlvdXMgb3RoZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKaW5kZXggMWFlYzQ0MC4uZjM4YmViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKQEAgLTE1MzksNyArMTUzOSw2IEBACiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBscHVhcnQgc2VyaWFsIHBvcnQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEhBU19ETUEKIAlzZWxlY3QgU0VSSUFMX0NPUkUKLQlzZWxlY3QgU0VSSUFMX0VBUkxZQ09OCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIG9uLWNoaXAgbHB1YXJ0IG9uIHNvbWUgRnJlZXNjYWxlIFNPQ3MuCiAKQEAgLTE1NDcsNiArMTU0Niw3IEBACiAJYm9vbCAiQ29uc29sZSBvbiBGcmVlc2NhbGUgbHB1YXJ0IHNlcmlhbCBwb3J0IgogCWRlcGVuZHMgb24gU0VSSUFMX0ZTTF9MUFVBUlQ9eQogCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCisJc2VsZWN0IFNFUklBTF9FQVJMWUNPTgogCWhlbHAKIAkgIElmIHlvdSBoYXZlIGVuYWJsZWQgdGhlIGxwdWFydCBzZXJpYWwgcG9ydCBvbiB0aGUgRnJlZXNjYWxlIFNvQ3MsCiAJICB5b3UgY2FuIG1ha2UgaXQgdGhlIGNvbnNvbGUgYnkgYW5zd2VyaW5nIFkgdG8gdGhpcyBvcHRpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvYmNtNjN4eF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYmNtNjN4eF91YXJ0LmMKaW5kZXggNjgxZTBmMy4uYTFjMGE4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2JjbTYzeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9iY202M3h4X3VhcnQuYwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAKIAkvKiByZWdpc3RlciBpcnEgYW5kIGVuYWJsZSByeCBpbnRlcnJ1cHRzICovCiAJcmV0ID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCBiY21fdWFydF9pbnRlcnJ1cHQsIDAsCi0JCQkgIGJjbV91YXJ0X3R5cGUocG9ydCksIHBvcnQpOworCQkJICBkZXZfbmFtZShwb3J0LT5kZXYpLCBwb3J0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBVQVJUX1JYX0lOVF9NQVNLLCBVQVJUX0lSX1JFRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvZWFybHljb24uYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9lYXJseWNvbi5jCmluZGV4IGYwOTYzNjAuLmI1YjJmMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9lYXJseWNvbi5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9lYXJseWNvbi5jCkBAIC0xMTUsNiArMTE1LDcgQEAKIAlpZiAoYnVmICYmICFwYXJzZV9vcHRpb25zKCZlYXJseV9jb25zb2xlX2RldiwgYnVmKSkKIAkJYnVmID0gTlVMTDsKIAorCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKIAlwb3J0LT51YXJ0Y2xrID0gQkFTRV9CQVVEICogMTY7CiAJaWYgKHBvcnQtPm1hcGJhc2UpCiAJCXBvcnQtPm1lbWJhc2UgPSBlYXJseWNvbl9tYXAocG9ydC0+bWFwYmFzZSwgNjQpOwpAQCAtMjAyLDYgKzIwMyw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJmVhcmx5X2NvbnNvbGVfZGV2LnBvcnQ7CiAKKwlzcGluX2xvY2tfaW5pdCgmcG9ydC0+bG9jayk7CiAJcG9ydC0+aW90eXBlID0gVVBJT19NRU07CiAJcG9ydC0+bWFwYmFzZSA9IGFkZHI7CiAJcG9ydC0+dWFydGNsayA9IEJBU0VfQkFVRCAqIDE2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2V0cmF4ZnMtdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2V0cmF4ZnMtdWFydC5jCmluZGV4IDY4MTNlMzEuLjJmODBiYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9ldHJheGZzLXVhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvZXRyYXhmcy11YXJ0LmMKQEAgLTg5NCw3ICs4OTQsNyBAQAogCXVwLT5yZWdpX3NlciA9IG9mX2lvbWFwKG5wLCAwKTsKIAl1cC0+cG9ydC5kZXYgPSAmcGRldi0+ZGV2OwogCi0JdXAtPmdwaW9zID0gbWN0cmxfZ3Bpb19pbml0KCZwZGV2LT5kZXYsIDApOworCXVwLT5ncGlvcyA9IG1jdHJsX2dwaW9faW5pdF9ub2F1dG8oJnBkZXYtPmRldiwgMCk7CiAJaWYgKElTX0VSUih1cC0+Z3Bpb3MpKQogCQlyZXR1cm4gUFRSX0VSUih1cC0+Z3Bpb3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmMKaW5kZXggOTYwZTUwYS4uNTFjNzUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYwpAQCAtMTQzNyw3ICsxNDM3LDcgQEAKIAkJCXNnX2luaXRfdGFibGUoc2csIDEpOwogCQkJcy0+cnhfYnVmW2ldID0gYnVmOwogCQkJc2dfZG1hX2FkZHJlc3Moc2cpID0gZG1hOwotCQkJc2ctPmxlbmd0aCA9IHMtPmJ1Zl9sZW5fcng7CisJCQlzZ19kbWFfbGVuKHNnKSA9IHMtPmJ1Zl9sZW5fcng7CiAKIAkJCWJ1ZiArPSBzLT5idWZfbGVuX3J4OwogCQkJZG1hICs9IHMtPmJ1Zl9sZW5fcng7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc3VuaHYuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW5odi5jCmluZGV4IDA2NDAzMTguLmNhMGQzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW5odi5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW5odi5jCkBAIC0xNDgsOCArMTQ4LDEwIEBACiAJCQl1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKHBvcnQsIDEpOwogCQl9CiAKLQkJZm9yIChpID0gMDsgaSA8IGJ5dGVzX3JlYWQ7IGkrKykKLQkJCXVhcnRfaGFuZGxlX3N5c3JxX2NoYXIocG9ydCwgY29uX3JlYWRfcGFnZVtpXSk7CisJCWlmIChwb3J0LT5zeXNycSAhPSAwICYmICAqY29uX3JlYWRfcGFnZSkgeworCQkJZm9yIChpID0gMDsgaSA8IGJ5dGVzX3JlYWQ7IGkrKykKKwkJCQl1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKHBvcnQsIGNvbl9yZWFkX3BhZ2VbaV0pOworCQl9CiAKIAkJaWYgKHBvcnQtPnN0YXRlID09IE5VTEwpCiAJCQljb250aW51ZTsKQEAgLTE2OCwxNyArMTcwLDE3IEBACiAJaW50ICgqcmVjZWl2ZV9jaGFycykoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CiB9OwogCi1zdGF0aWMgc3RydWN0IHN1bmh2X29wcyBieWNoYXJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzdW5odl9vcHMgYnljaGFyX29wcyA9IHsKIAkudHJhbnNtaXRfY2hhcnMgPSB0cmFuc21pdF9jaGFyc19wdXRjaGFyLAogCS5yZWNlaXZlX2NoYXJzID0gcmVjZWl2ZV9jaGFyc19nZXRjaGFyLAogfTsKIAotc3RhdGljIHN0cnVjdCBzdW5odl9vcHMgYnl3cml0ZV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN1bmh2X29wcyBieXdyaXRlX29wcyA9IHsKIAkudHJhbnNtaXRfY2hhcnMgPSB0cmFuc21pdF9jaGFyc193cml0ZSwKIAkucmVjZWl2ZV9jaGFycyA9IHJlY2VpdmVfY2hhcnNfcmVhZCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3VuaHZfb3BzICpzdW5odl9vcHMgPSAmYnljaGFyX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VuaHZfb3BzICpzdW5odl9vcHMgPSAmYnljaGFyX29wczsKIAogc3RhdGljIHN0cnVjdCB0dHlfcG9ydCAqcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2F1ZGl0LmMgYi9kcml2ZXJzL3R0eS90dHlfYXVkaXQuYwppbmRleCA5MGNhMDgyLi4zZDI0NWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfYXVkaXQuYworKysgYi9kcml2ZXJzL3R0eS90dHlfYXVkaXQuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAgKgogICoJQXVkaXQgQGRhdGEgb2YgQHNpemUgZnJvbSBAdHR5LCBpZiBuZWNlc3NhcnkuCiAgKi8KLXZvaWQgdHR5X2F1ZGl0X2FkZF9kYXRhKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmRhdGEsCit2b2lkIHR0eV9hdWRpdF9hZGRfZGF0YShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB2b2lkICpkYXRhLAogCQkJc2l6ZV90IHNpemUsIHVuc2lnbmVkIGljYW5vbikKIHsKIAlzdHJ1Y3QgdHR5X2F1ZGl0X2J1ZiAqYnVmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jIGIvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jCmluZGV4IDlhNDc5ZTYuLjNjZDMxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCQljb3VudCA9IGRpc2MtPm9wcy0+cmVjZWl2ZV9idWYyKHR0eSwgcCwgZiwgY291bnQpOwogCWVsc2UgewogCQljb3VudCA9IG1pbl90KGludCwgY291bnQsIHR0eS0+cmVjZWl2ZV9yb29tKTsKLQkJaWYgKGNvdW50KQorCQlpZiAoY291bnQgJiYgZGlzYy0+b3BzLT5yZWNlaXZlX2J1ZikKIAkJCWRpc2MtPm9wcy0+cmVjZWl2ZV9idWYodHR5LCBwLCBmLCBjb3VudCk7CiAJfQogCXJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9pby5jIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKaW5kZXggMGM0MWRiYy4uYmNjOGUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2lvLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKQEAgLTEyODIsMTggKzEyODIsMjIgQEAKIAlpbnQJd2FzX3N0b3BwZWQgPSB0dHktPnN0b3BwZWQ7CiAKIAlpZiAodHR5LT5vcHMtPnNlbmRfeGNoYXIpIHsKKwkJZG93bl9yZWFkKCZ0dHktPnRlcm1pb3NfcndzZW0pOwogCQl0dHktPm9wcy0+c2VuZF94Y2hhcih0dHksIGNoKTsKKwkJdXBfcmVhZCgmdHR5LT50ZXJtaW9zX3J3c2VtKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHR0eV93cml0ZV9sb2NrKHR0eSwgMCkgPCAwKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCisJZG93bl9yZWFkKCZ0dHktPnRlcm1pb3NfcndzZW0pOwogCWlmICh3YXNfc3RvcHBlZCkKIAkJc3RhcnRfdHR5KHR0eSk7CiAJdHR5LT5vcHMtPndyaXRlKHR0eSwgJmNoLCAxKTsKIAlpZiAod2FzX3N0b3BwZWQpCiAJCXN0b3BfdHR5KHR0eSk7CisJdXBfcmVhZCgmdHR5LT50ZXJtaW9zX3J3c2VtKTsKIAl0dHlfd3JpdGVfdW5sb2NrKHR0eSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfaW9jdGwuYyBiL2RyaXZlcnMvdHR5L3R0eV9pb2N0bC5jCmluZGV4IDljNWFlYmYuLjE0NDVkZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvdHR5L3R0eV9pb2N0bC5jCkBAIC0xMTQ3LDE2ICsxMTQ3LDEyIEBACiAJCQlzcGluX3VubG9ja19pcnEoJnR0eS0+Zmxvd19sb2NrKTsKIAkJCWJyZWFrOwogCQljYXNlIFRDSU9GRjoKLQkJCWRvd25fcmVhZCgmdHR5LT50ZXJtaW9zX3J3c2VtKTsKIAkJCWlmIChTVE9QX0NIQVIodHR5KSAhPSBfX0RJU0FCTEVEX0NIQVIpCiAJCQkJcmV0dmFsID0gdHR5X3NlbmRfeGNoYXIodHR5LCBTVE9QX0NIQVIodHR5KSk7Ci0JCQl1cF9yZWFkKCZ0dHktPnRlcm1pb3NfcndzZW0pOwogCQkJYnJlYWs7CiAJCWNhc2UgVENJT046Ci0JCQlkb3duX3JlYWQoJnR0eS0+dGVybWlvc19yd3NlbSk7CiAJCQlpZiAoU1RBUlRfQ0hBUih0dHkpICE9IF9fRElTQUJMRURfQ0hBUikKIAkJCQlyZXR2YWwgPSB0dHlfc2VuZF94Y2hhcih0dHksIFNUQVJUX0NIQVIodHR5KSk7Ci0JCQl1cF9yZWFkKCZ0dHktPnRlcm1pb3NfcndzZW0pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmMKaW5kZXggNWFmOGYxOC4uNjI5ZTNjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2xkaXNjLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmMKQEAgLTU5Miw3ICs1OTIsNyBAQAogCiAJLyogUmVzdGFydCB0aGUgd29yayBxdWV1ZSBpbiBjYXNlIG5vIGNoYXJhY3RlcnMga2ljayBpdCBvZmYuIFNhZmUgaWYKIAkgICBhbHJlYWR5IHJ1bm5pbmcgKi8KLQlzY2hlZHVsZV93b3JrKCZ0dHktPnBvcnQtPmJ1Zi53b3JrKTsKKwl0dHlfYnVmZmVyX3Jlc3RhcnRfd29yayh0dHktPnBvcnQpOwogCiAJdHR5X3VubG9jayh0dHkpOwogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvY2lfaGRyY19pbXguYwppbmRleCA2Y2NiZjYwLi41YTA0OGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9jaV9oZHJjX2lteC5jCisrKyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2NpX2hkcmNfaW14LmMKQEAgLTg0LDYgKzg0LDEyIEBACiAJc3RydWN0IGlteF91c2JtaXNjX2RhdGEgKnVzYm1pc2NfZGF0YTsKIAlib29sIHN1cHBvcnRzX3J1bnRpbWVfcG07CiAJYm9vbCBpbl9scG07CisJLyogU29DIGJlZm9yZSBpLm14NiAoZXhjZXB0IGlteDIzL2lteDI4KSBuZWVkcyB0aHJlZSBjbGtzICovCisJYm9vbCBuZWVkX3RocmVlX2Nsa3M7CisJc3RydWN0IGNsayAqY2xrX2lwZzsKKwlzdHJ1Y3QgY2xrICpjbGtfYWhiOworCXN0cnVjdCBjbGsgKmNsa19wZXI7CisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB9OwogCiAvKiBDb21tb24gZnVuY3Rpb25zIHNoYXJlZCBieSB1c2JtaXNjIGRyaXZlcnMgKi8KQEAgLTEzNSw2ICsxNDEsMTAyIEBACiB9CiAKIC8qIEVuZCBvZiBjb21tb24gZnVuY3Rpb25zIHNoYXJlZCBieSB1c2JtaXNjIGRyaXZlcnMqLworc3RhdGljIGludCBpbXhfZ2V0X2Nsa3Moc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjaV9oZHJjX2lteF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlkYXRhLT5jbGtfaXBnID0gZGV2bV9jbGtfZ2V0KGRldiwgImlwZyIpOworCWlmIChJU19FUlIoZGF0YS0+Y2xrX2lwZykpIHsKKwkJLyogSWYgdGhlIHBsYXRmb3JtIG9ubHkgbmVlZHMgb25lIGNsb2NrcyAqLworCQlkYXRhLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwkJaWYgKElTX0VSUihkYXRhLT5jbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKGRhdGEtPmNsayk7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIGdldCBjbGtzLCBlcnI9JWxkLCVsZFxuIiwKKwkJCQlQVFJfRVJSKGRhdGEtPmNsayksIFBUUl9FUlIoZGF0YS0+Y2xrX2lwZykpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlyZXR1cm4gcmV0OworCX0KKworCWRhdGEtPmNsa19haGIgPSBkZXZtX2Nsa19nZXQoZGV2LCAiYWhiIik7CisJaWYgKElTX0VSUihkYXRhLT5jbGtfYWhiKSkgeworCQlyZXQgPSBQVFJfRVJSKGRhdGEtPmNsa19haGIpOworCQlkZXZfZXJyKGRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IGFoYiBjbG9jaywgZXJyPSVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRhdGEtPmNsa19wZXIgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGVyIik7CisJaWYgKElTX0VSUihkYXRhLT5jbGtfcGVyKSkgeworCQlyZXQgPSBQVFJfRVJSKGRhdGEtPmNsa19wZXIpOworCQlkZXZfZXJyKGRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IHBlciBjbG9jaywgZXJyPSVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRhdGEtPm5lZWRfdGhyZWVfY2xrcyA9IHRydWU7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbXhfcHJlcGFyZV9lbmFibGVfY2xrcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNpX2hkcmNfaW14X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkYXRhLT5uZWVkX3RocmVlX2Nsa3MpIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRhdGEtPmNsa19pcGcpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUvZW5hYmxlIGlwZyBjbGssIGVycj0lZFxuIiwKKwkJCQlyZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkYXRhLT5jbGtfYWhiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsCisJCQkJIkZhaWxlZCB0byBwcmVwYXJlL2VuYWJsZSBhaGIgY2xrLCBlcnI9JWRcbiIsCisJCQkJcmV0KTsKKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT5jbGtfaXBnKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGF0YS0+Y2xrX3Blcik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJGYWlsZWQgdG8gcHJlcGFyZS9lbmFibGUgcGVyIGNsaywgZXJyPSVkXG4iLAorCQkJCXJldCk7CisJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZGF0YS0+Y2xrX2FoYik7CisJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZGF0YS0+Y2xrX2lwZyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRhdGEtPmNsayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJGYWlsZWQgdG8gcHJlcGFyZS9lbmFibGUgY2xrLCBlcnI9JWRcbiIsCisJCQkJcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBpbXhfZGlzYWJsZV91bnByZXBhcmVfY2xrcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNpX2hkcmNfaW14X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChkYXRhLT5uZWVkX3RocmVlX2Nsa3MpIHsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRhdGEtPmNsa19wZXIpOworCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZGF0YS0+Y2xrX2FoYik7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLT5jbGtfaXBnKTsKKwl9IGVsc2UgeworCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZGF0YS0+Y2xrKTsKKwl9Cit9CiAKIHN0YXRpYyBpbnQgY2lfaGRyY19pbXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTE0NSwzMSArMjQ3LDMxIEBACiAJCS5mbGFncwkJPSBDSV9IRFJDX1NFVF9OT05fWkVST19UVEhBLAogCX07CiAJaW50IHJldDsKLQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9Ci0JCQlvZl9tYXRjaF9kZXZpY2UoY2lfaGRyY19pbXhfZHRfaWRzLCAmcGRldi0+ZGV2KTsKLQljb25zdCBzdHJ1Y3QgY2lfaGRyY19pbXhfcGxhdGZvcm1fZmxhZyAqaW14X3BsYXRmb3JtX2ZsYWcgPSBvZl9pZC0+ZGF0YTsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKwljb25zdCBzdHJ1Y3QgY2lfaGRyY19pbXhfcGxhdGZvcm1fZmxhZyAqaW14X3BsYXRmb3JtX2ZsYWc7CisKKwlvZl9pZCA9IG9mX21hdGNoX2RldmljZShjaV9oZHJjX2lteF9kdF9pZHMsICZwZGV2LT5kZXYpOworCWlmICghb2ZfaWQpCisJCXJldHVybiAtRU5PREVWOworCisJaW14X3BsYXRmb3JtX2ZsYWcgPSBvZl9pZC0+ZGF0YTsKIAogCWRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwogCWRhdGEtPnVzYm1pc2NfZGF0YSA9IHVzYm1pc2NfZ2V0X2luaXRfZGF0YSgmcGRldi0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPnVzYm1pc2NfZGF0YSkpCiAJCXJldHVybiBQVFJfRVJSKGRhdGEtPnVzYm1pc2NfZGF0YSk7CiAKLQlkYXRhLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihkYXRhLT5jbGspKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJGYWlsZWQgdG8gZ2V0IGNsb2NrLCBlcnI9JWxkXG4iLCBQVFJfRVJSKGRhdGEtPmNsaykpOwotCQlyZXR1cm4gUFRSX0VSUihkYXRhLT5jbGspOwotCX0KLQotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkYXRhLT5jbGspOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIkZhaWxlZCB0byBwcmVwYXJlIG9yIGVuYWJsZSBjbG9jaywgZXJyPSVkXG4iLCByZXQpOworCXJldCA9IGlteF9nZXRfY2xrcygmcGRldi0+ZGV2KTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCX0KKworCXJldCA9IGlteF9wcmVwYXJlX2VuYWJsZV9jbGtzKCZwZGV2LT5kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlkYXRhLT5waHkgPSBkZXZtX3VzYl9nZXRfcGh5X2J5X3BoYW5kbGUoJnBkZXYtPmRldiwgImZzbCx1c2JwaHkiLCAwKTsKIAlpZiAoSVNfRVJSKGRhdGEtPnBoeSkpIHsKQEAgLTIxMiw4ICszMTQsNiBAQAogCQlnb3RvIGRpc2FibGVfZGV2aWNlOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwotCiAJaWYgKGRhdGEtPnN1cHBvcnRzX3J1bnRpbWVfcG0pIHsKIAkJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZwZGV2LT5kZXYpOwogCQlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKQEAgLTIyNiw3ICszMjYsNyBAQAogZGlzYWJsZV9kZXZpY2U6CiAJY2lfaGRyY19yZW1vdmVfZGV2aWNlKGRhdGEtPmNpX3BkZXYpOwogZXJyX2NsazoKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoZGF0YS0+Y2xrKTsKKwlpbXhfZGlzYWJsZV91bnByZXBhcmVfY2xrcygmcGRldi0+ZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDAsNyArMzQwLDcgQEAKIAkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOwogCX0KIAljaV9oZHJjX3JlbW92ZV9kZXZpY2UoZGF0YS0+Y2lfcGRldik7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRhdGEtPmNsayk7CisJaW14X2Rpc2FibGVfdW5wcmVwYXJlX2Nsa3MoJnBkZXYtPmRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1Miw3ICszNTIsNyBAQAogCiAJZGV2X2RiZyhkZXYsICJhdCAlc1xuIiwgX19mdW5jX18pOwogCi0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRhdGEtPmNsayk7CisJaW14X2Rpc2FibGVfdW5wcmVwYXJlX2Nsa3MoZGV2KTsKIAlkYXRhLT5pbl9scG0gPSB0cnVlOwogCiAJcmV0dXJuIDA7CkBAIC0yNzAsNyArMzcwLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRhdGEtPmNsayk7CisJcmV0ID0gaW14X3ByZXBhcmVfZW5hYmxlX2Nsa3MoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yODUsNyArMzg1LDcgQEAKIAlyZXR1cm4gMDsKIAogY2xrX2Rpc2FibGU6Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRhdGEtPmNsayk7CisJaW14X2Rpc2FibGVfdW5wcmVwYXJlX2Nsa3MoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9kZWJ1Zy5jIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvZGVidWcuYwppbmRleCAwODBiN2JlLi41OGM4NDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL2RlYnVnLmMKQEAgLTMyMiw4ICszMjIsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwbV9ydW50aW1lX2dldF9zeW5jKGNpLT5kZXYpOworCWRpc2FibGVfaXJxKGNpLT5pcnEpOwogCWNpX3JvbGVfc3RvcChjaSk7CiAJcmV0ID0gY2lfcm9sZV9zdGFydChjaSwgcm9sZSk7CisJZW5hYmxlX2lycShjaS0+aXJxKTsKIAlwbV9ydW50aW1lX3B1dF9zeW5jKGNpLT5kZXYpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2hpcGlkZWEvdWRjLmMgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS91ZGMuYwppbmRleCA4MjIzZmU3Li4zOTFhMTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9jaGlwaWRlYS91ZGMuYwpAQCAtMTc1MSw2ICsxNzUxLDIyIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHZvaWQgY2lfdWRjX3N0b3BfZm9yX290Z19mc20oc3RydWN0IGNpX2hkcmMgKmNpKQoreworCWlmICghY2lfb3RnX2lzX2ZzbV9tb2RlKGNpKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmY2ktPmZzbS5sb2NrKTsKKwlpZiAoY2ktPmZzbS5vdGctPnN0YXRlID09IE9UR19TVEFURV9BX1BFUklQSEVSQUwpIHsKKwkJY2ktPmZzbS5hX2JpZGxfYWRpc190bW91dCA9IDE7CisJCWNpX2hkcmNfb3RnX2ZzbV9zdGFydChjaSk7CisJfSBlbHNlIGlmIChjaS0+ZnNtLm90Zy0+c3RhdGUgPT0gT1RHX1NUQVRFX0JfUEVSSVBIRVJBTCkgeworCQljaS0+ZnNtLnByb3RvY29sID0gUFJPVE9fVU5ERUY7CisJCWNpLT5mc20ub3RnLT5zdGF0ZSA9IE9UR19TVEFURV9VTkRFRklORUQ7CisJfQorCW11dGV4X3VubG9jaygmY2ktPmZzbS5sb2NrKTsKK30KKwogLyoqCiAgKiBjaV91ZGNfc3RvcDogdW5yZWdpc3RlciBhIGdhZGdldCBkcml2ZXIKICAqLwpAQCAtMTc3NSw2ICsxNzkxLDcgQEAKIAljaS0+ZHJpdmVyID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaS0+bG9jaywgZmxhZ3MpOwogCisJY2lfdWRjX3N0b3BfZm9yX290Z19mc20oY2kpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS91c2JtaXNjX2lteC5jIGIvZHJpdmVycy91c2IvY2hpcGlkZWEvdXNibWlzY19pbXguYwppbmRleCBmY2VhNGViLi5hYjhiMDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jaGlwaWRlYS91c2JtaXNjX2lteC5jCisrKyBiL2RyaXZlcnMvdXNiL2NoaXBpZGVhL3VzYm1pc2NfaW14LmMKQEAgLTUwMCw3ICs1MDAsMTEgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKIAlzdHJ1Y3QgaW14X3VzYm1pc2MgKmRhdGE7Ci0Jc3RydWN0IG9mX2RldmljZV9pZCAqdG1wX2RldjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKworCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKHVzYm1pc2NfaW14X2R0X2lkcywgJnBkZXYtPmRldik7CisJaWYgKCFvZl9pZCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKQEAgLTUxMyw5ICs1MTcsNyBAQAogCWlmIChJU19FUlIoZGF0YS0+YmFzZSkpCiAJCXJldHVybiBQVFJfRVJSKGRhdGEtPmJhc2UpOwogCi0JdG1wX2RldiA9IChzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICopCi0JCW9mX21hdGNoX2RldmljZSh1c2JtaXNjX2lteF9kdF9pZHMsICZwZGV2LT5kZXYpOwotCWRhdGEtPm9wcyA9IChjb25zdCBzdHJ1Y3QgdXNibWlzY19vcHMgKil0bXBfZGV2LT5kYXRhOworCWRhdGEtPm9wcyA9IChjb25zdCBzdHJ1Y3QgdXNibWlzY19vcHMgKilvZl9pZC0+ZGF0YTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IGIzMGU3NDIuLjI2Y2E0ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTE4MzgsNiArMTgzOCwxMSBAQAogCX0sCiAjZW5kaWYKIAorCS8qIEV4Y2x1ZGUgSW5maW5lb24gRmxhc2ggTG9hZGVyIHV0aWxpdHkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNThiLCAweDAwNDEpLAorCS5kcml2ZXJfaW5mbyA9IElHTk9SRV9ERVZJQ0UsCisJfSwKKwogCS8qIGNvbnRyb2wgaW50ZXJmYWNlcyB3aXRob3V0IGFueSBwcm90b2NvbCBzZXQgKi8KIAl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCiAJCVVTQl9DRENfUFJPVE9fTk9ORSkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IDQzM2JiYzMuLjA3MTk2NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtODg0LDExICs4ODQsMTEgQEAKIAogCWFkZF93YWl0X3F1ZXVlKCZ1c2JscC0+d3dhaXQsICZ3YWl0YSk7CiAJZm9yICg7OykgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ1c2JscC0+bXV0KSkgewogCQkJcmMgPSAtRUlOVFI7CiAJCQlicmVhazsKIAkJfQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlyYyA9IHVzYmxwX3d0ZXN0KHVzYmxwLCBub25ibG9jayk7CiAJCW11dGV4X3VubG9jaygmdXNibHAtPm11dCk7CiAJCWlmIChyYyA8PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCmluZGV4IGE5OWM4OWUuLmRkMjgwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKQEAgLTc3LDggKzc3LDcgQEAKIAogY29uZmlnIFVTQl9PVEdfRlNNCiAJdHJpc3RhdGUgIlVTQiAyLjAgT1RHIEZTTSBpbXBsZW1lbnRhdGlvbiIKLQlkZXBlbmRzIG9uIFVTQgotCXNlbGVjdCBVU0JfT1RHCisJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX09URwogCXNlbGVjdCBVU0JfUEhZCiAJaGVscAogCSAgSW1wbGVtZW50cyBPVEcgRmluaXRlIFN0YXRlIE1hY2hpbmUgYXMgc3BlY2lmaWVkIGluIE9uLVRoZS1HbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKaW5kZXggN2NhZmYwMi4uNTA1MDc2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCkBAIC0xMTUsNyArMTE1LDggQEAKIAkJICAgVVNCX1NTX01VTFQoZGVzYy0+Ym1BdHRyaWJ1dGVzKSA+IDMpIHsKIAkJZGV2X3dhcm4oZGRldiwgIklzb2MgZW5kcG9pbnQgaGFzIE11bHQgb2YgJWQgaW4gIgogCQkJCSJjb25maWcgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQgZXAgJWQ6ICIKLQkJCQkic2V0dGluZyB0byAzXG4iLCBkZXNjLT5ibUF0dHJpYnV0ZXMgKyAxLAorCQkJCSJzZXR0aW5nIHRvIDNcbiIsCisJCQkJVVNCX1NTX01VTFQoZGVzYy0+Ym1BdHRyaWJ1dGVzKSwKIAkJCQljZmdubywgaW51bSwgYXNudW0sIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwogCQllcC0+c3NfZXBfY29tcC5ibUF0dHJpYnV0ZXMgPSAyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGJkZWFkYzEuLmRkYmYzMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMTI0LDYgKzEyNCwxMCBAQAogCiBpbnQgdXNiX2RldmljZV9zdXBwb3J0c19scG0oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CisJLyogU29tZSBkZXZpY2VzIGhhdmUgdHJvdWJsZSB3aXRoIExQTSAqLworCWlmICh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfTk9fTFBNKQorCQlyZXR1cm4gMDsKKwogCS8qIFVTQiAyLjEgKGFuZCBncmVhdGVyKSBkZXZpY2VzIGluZGljYXRlIExQTSBzdXBwb3J0IHRocm91Z2gKIAkgKiB0aGVpciBVU0IgMi4wIEV4dGVuZGVkIENhcGFiaWxpdGllcyBCT1MgZGVzY3JpcHRvci4KIAkgKi8KQEAgLTEwMzEsMTAgKzEwMzUsMjAgQEAKIAl1bnNpZ25lZCBkZWxheTsKIAogCS8qIENvbnRpbnVlIGEgcGFydGlhbCBpbml0aWFsaXphdGlvbiAqLwotCWlmICh0eXBlID09IEhVQl9JTklUMikKLQkJZ290byBpbml0MjsKLQlpZiAodHlwZSA9PSBIVUJfSU5JVDMpCisJaWYgKHR5cGUgPT0gSFVCX0lOSVQyIHx8IHR5cGUgPT0gSFVCX0lOSVQzKSB7CisJCWRldmljZV9sb2NrKGh1Yi0+aW50ZmRldik7CisKKwkJLyogV2FzIHRoZSBodWIgZGlzY29ubmVjdGVkIHdoaWxlIHdlIHdlcmUgd2FpdGluZz8gKi8KKwkJaWYgKGh1Yi0+ZGlzY29ubmVjdGVkKSB7CisJCQlkZXZpY2VfdW5sb2NrKGh1Yi0+aW50ZmRldik7CisJCQlrcmVmX3B1dCgmaHViLT5rcmVmLCBodWJfcmVsZWFzZSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHR5cGUgPT0gSFVCX0lOSVQyKQorCQkJZ290byBpbml0MjsKIAkJZ290byBpbml0MzsKKwl9CisJa3JlZl9nZXQoJmh1Yi0+a3JlZik7CiAKIAkvKiBUaGUgc3VwZXJzcGVlZCBodWIgZXhjZXB0IGZvciByb290IGh1YiBoYXMgdG8gdXNlIEh1YiBEZXB0aAogCSAqIHZhbHVlIGFzIGFuIG9mZnNldCBpbnRvIHRoZSByb3V0ZSBzdHJpbmcgdG8gbG9jYXRlIHRoZSBiaXRzCkBAIC0xMjMyLDYgKzEyNDYsNyBAQAogCQkJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsCiAJCQkJCSZodWItPmluaXRfd29yaywKIAkJCQkJbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworCQkJZGV2aWNlX3VubG9jayhodWItPmludGZkZXYpOwogCQkJcmV0dXJuOwkJLyogQ29udGludWVzIGF0IGluaXQzOiBiZWxvdyAqLwogCQl9IGVsc2UgewogCQkJbXNsZWVwKGRlbGF5KTsKQEAgLTEyNTMsNiArMTI2OCwxMSBAQAogCS8qIEFsbG93IGF1dG9zdXNwZW5kIGlmIGl0IHdhcyBzdXBwcmVzc2VkICovCiAJaWYgKHR5cGUgPD0gSFVCX0lOSVQzKQogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmModG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpKTsKKworCWlmICh0eXBlID09IEhVQl9JTklUMiB8fCB0eXBlID09IEhVQl9JTklUMykKKwkJZGV2aWNlX3VubG9jayhodWItPmludGZkZXYpOworCisJa3JlZl9wdXQoJmh1Yi0+a3JlZiwgaHViX3JlbGVhc2UpOwogfQogCiAvKiBJbXBsZW1lbnQgdGhlIGNvbnRpbnVhdGlvbnMgZm9yIHRoZSBkZWxheXMgYWJvdmUgKi8KQEAgLTQ1MTIsNiArNDUzMiw4IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwl1c2JfZGV0ZWN0X3F1aXJrcyh1ZGV2KTsKKwogCWlmICh1ZGV2LT53dXNiID09IDAgJiYgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2RVU0IpID49IDB4MDIwMSkgewogCQlyZXR2YWwgPSB1c2JfZ2V0X2Jvc19kZXNjcmlwdG9yKHVkZXYpOwogCQlpZiAoIXJldHZhbCkgewpAQCAtNDcxMCw3ICs0NzMyLDYgQEAKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlnb3RvIGxvb3A7CiAKLQkJdXNiX2RldGVjdF9xdWlya3ModWRldik7CiAJCWlmICh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfREVMQVlfSU5JVCkKIAkJCW1zbGVlcCgxMDAwKTsKIApAQCAtNTMyNiw5ICs1MzQ3LDYgQEAKIAlpZiAodWRldi0+dXNiMl9od19scG1fZW5hYmxlZCA9PSAxKQogCQl1c2Jfc2V0X3VzYjJfaGFyZHdhcmVfbHBtKHVkZXYsIDApOwogCi0JYm9zID0gdWRldi0+Ym9zOwotCXVkZXYtPmJvcyA9IE5VTEw7Ci0KIAkvKiBEaXNhYmxlIExQTSBhbmQgTFRNIHdoaWxlIHdlIHJlc2V0IHRoZSBkZXZpY2UgYW5kIHJlaW5zdGFsbCB0aGUgYWx0CiAJICogc2V0dGluZ3MuICBEZXZpY2UtaW5pdGlhdGVkIExQTSBzZXR0aW5ncywgYW5kIHN5c3RlbSBleGl0IGxhdGVuY3kKIAkgKiBzZXR0aW5ncyBhcmUgY2xlYXJlZCB3aGVuIHRoZSBkZXZpY2UgaXMgcmVzZXQsIHNvIHdlIGhhdmUgdG8gc2V0CkBAIC01MzM3LDE1ICs1MzU1LDE4IEBACiAJcmV0ID0gdXNiX3VubG9ja2VkX2Rpc2FibGVfbHBtKHVkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmdWRldi0+ZGV2LCAiJXMgRmFpbGVkIHRvIGRpc2FibGUgTFBNXG4uIiwgX19mdW5jX18pOwotCQlnb3RvIHJlX2VudW1lcmF0ZTsKKwkJZ290byByZV9lbnVtZXJhdGVfbm9fYm9zOwogCX0KIAlyZXQgPSB1c2JfZGlzYWJsZV9sdG0odWRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICIlcyBGYWlsZWQgdG8gZGlzYWJsZSBMVE1cbi4iLAogCQkJCV9fZnVuY19fKTsKLQkJZ290byByZV9lbnVtZXJhdGU7CisJCWdvdG8gcmVfZW51bWVyYXRlX25vX2JvczsKIAl9CiAKKwlib3MgPSB1ZGV2LT5ib3M7CisJdWRldi0+Ym9zID0gTlVMTDsKKwogCWZvciAoaSA9IDA7IGkgPCBTRVRfQ09ORklHX1RSSUVTOyArK2kpIHsKIAogCQkvKiBlcDAgbWF4cGFja2V0IHNpemUgbWF5IGNoYW5nZTsgbGV0IHRoZSBIQ0Qga25vdyBhYm91dCBpdC4KQEAgLTU0NDIsMTAgKzU0NjMsMTEgQEAKIAlyZXR1cm4gMDsKIAogcmVfZW51bWVyYXRlOgotCS8qIExQTSBzdGF0ZSBkb2Vzbid0IG1hdHRlciB3aGVuIHdlJ3JlIGFib3V0IHRvIGRlc3Ryb3kgdGhlIGRldmljZS4gKi8KLQlodWJfcG9ydF9sb2dpY2FsX2Rpc2Nvbm5lY3QocGFyZW50X2h1YiwgcG9ydDEpOwogCXVzYl9yZWxlYXNlX2Jvc19kZXNjcmlwdG9yKHVkZXYpOwogCXVkZXYtPmJvcyA9IGJvczsKK3JlX2VudW1lcmF0ZV9ub19ib3M6CisJLyogTFBNIHN0YXRlIGRvZXNuJ3QgbWF0dGVyIHdoZW4gd2UncmUgYWJvdXQgdG8gZGVzdHJveSB0aGUgZGV2aWNlLiAqLworCWh1Yl9wb3J0X2xvZ2ljYWxfZGlzY29ubmVjdChwYXJlbnRfaHViLCBwb3J0MSk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcG9ydC5jIGIvZHJpdmVycy91c2IvY29yZS9wb3J0LmMKaW5kZXggMjEwNjE4My4uNTQ4N2ZlMzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3BvcnQuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCWVsc2UKIAkJCW1ldGhvZCA9ICJkZWZhdWx0IjsKIAotCQlwcl93YXJuKCJ1c2I6IGZhaWxlZCB0byBwZWVyICVzIGFuZCAlcyBieSAlcyAoJXM6JXMpICglczolcylcbiIsCisJCXByX2RlYnVnKCJ1c2I6IGZhaWxlZCB0byBwZWVyICVzIGFuZCAlcyBieSAlcyAoJXM6JXMpICglczolcylcbiIsCiAJCQlkZXZfbmFtZSgmbGVmdC0+ZGV2KSwgZGV2X25hbWUoJnJpZ2h0LT5kZXYpLCBtZXRob2QsCiAJCQlkZXZfbmFtZSgmbGVmdC0+ZGV2KSwKIAkJCWxwZWVyID8gZGV2X25hbWUoJmxwZWVyLT5kZXYpIDogIm5vbmUiLApAQCAtMjY1LDcgKzI2NSw3IEBACiAJaWYgKHJjID09IDApIHsKIAkJZGV2X2RiZygmbGVmdC0+ZGV2LCAicGVlcmVkIHRvICVzXG4iLCBkZXZfbmFtZSgmcmlnaHQtPmRldikpOwogCX0gZWxzZSB7Ci0JCWRldl93YXJuKCZsZWZ0LT5kZXYsICJmYWlsZWQgdG8gcGVlciB0byAlcyAoJWQpXG4iLAorCQlkZXZfZGJnKCZsZWZ0LT5kZXYsICJmYWlsZWQgdG8gcGVlciB0byAlcyAoJWQpXG4iLAogCQkJCWRldl9uYW1lKCZyaWdodC0+ZGV2KSwgcmMpOwogCQlwcl93YXJuX29uY2UoInVzYjogcG9ydCBwb3dlciBtYW5hZ2VtZW50IG1heSBiZSB1bnJlbGlhYmxlXG4iKTsKIAkJdXNiX3BvcnRfYmxvY2tfcG93ZXJfb2ZmID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IGY1YTM4MTkuLjZkYzgxMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtMTI1LDYgKzEyNSw5IEBACiAJeyBVU0JfREVWSUNFKDB4MDRmMywgMHgwMTZmKSwgLmRyaXZlcl9pbmZvID0KIAkJCVVTQl9RVUlSS19ERVZJQ0VfUVVBTElGSUVSIH0sCiAKKwl7IFVTQl9ERVZJQ0UoMHgwNGYzLCAweDIxYjgpLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0RFVklDRV9RVUFMSUZJRVIgfSwKKwogCS8qIFJvbGFuZCBTQy04ODIwICovCiAJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDA3KSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCkBAIC0xOTksNiArMjAyLDEyIEBACiAJeyBVU0JfREVWSUNFKDB4MWEwYSwgMHgwMjAwKSwgLmRyaXZlcl9pbmZvID0KIAkJCVVTQl9RVUlSS19MSU5FQVJfVUZSQU1FX0lOVFJfQklOVEVSVkFMIH0sCiAKKwkvKiBCbGFja21hZ2ljIERlc2lnbiBJbnRlbnNpdHkgU2h1dHRsZSAqLworCXsgVVNCX0RFVklDRSgweDFlZGIsIDB4YmQzYiksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19OT19MUE0gfSwKKworCS8qIEJsYWNrbWFnaWMgRGVzaWduIFVsdHJhU3R1ZGlvIFNESSAqLworCXsgVVNCX0RFVklDRSgweDFlZGIsIDB4YmQ0ZiksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19OT19MUE0gfSwKKwogCXsgfSAgLyogdGVybWluYXRpbmcgZW50cnkgbXVzdCBiZSBsYXN0ICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MyL2hjZC5jIGIvZHJpdmVycy91c2IvZHdjMi9oY2QuYwppbmRleCBlNzliYWY3Li41NzFjMjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MyL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2R3YzIvaGNkLmMKQEAgLTMyNCwxMiArMzI0LDEzIEBACiAgKi8KIHN0YXRpYyB2b2lkIGR3YzJfaGNkX3JlbV93YWtldXAoc3RydWN0IGR3YzJfaHNvdGcgKmhzb3RnKQogewotCWlmIChoc290Zy0+bHhfc3RhdGUgPT0gRFdDMl9MMikgeworCWlmIChoc290Zy0+YnVzX3N1c3BlbmRlZCkgewogCQloc290Zy0+ZmxhZ3MuYi5wb3J0X3N1c3BlbmRfY2hhbmdlID0gMTsKIAkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaHNvdGctPnByaXYpOwotCX0gZWxzZSB7Ci0JCWhzb3RnLT5mbGFncy5iLnBvcnRfbDFfY2hhbmdlID0gMTsKIAl9CisKKwlpZiAoaHNvdGctPmx4X3N0YXRlID09IERXQzJfTDEpCisJCWhzb3RnLT5mbGFncy5iLnBvcnRfbDFfY2hhbmdlID0gMTsKIH0KIAogLyoqCkBAIC0xNDI4LDggKzE0MjksOCBAQAogCWRldl9kYmcoaHNvdGctPmRldiwgIkNsZWFyIFJlc3VtZTogSFBSVDA9JTB4XG4iLAogCQlkd2MyX3JlYWRsKGhzb3RnLT5yZWdzICsgSFBSVDApKTsKIAotCWhzb3RnLT5idXNfc3VzcGVuZGVkID0gMDsKIAlkd2MyX2hjZF9yZW1fd2FrZXVwKGhzb3RnKTsKKwloc290Zy0+YnVzX3N1c3BlbmRlZCA9IDA7CiAKIAkvKiBDaGFuZ2UgdG8gTDAgc3RhdGUgKi8KIAloc290Zy0+bHhfc3RhdGUgPSBEV0MyX0wwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMi9wbGF0Zm9ybS5jIGIvZHJpdmVycy91c2IvZHdjMi9wbGF0Zm9ybS5jCmluZGV4IDU4NTliMGYuLjM5YzFjYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2R3YzIvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL3VzYi9kd2MyL3BsYXRmb3JtLmMKQEAgLTEwOCw3ICsxMDgsOCBAQAogCS5ob3N0X2xzX2xvd19wb3dlcl9waHlfY2xrCT0gLTEsCiAJLnRzX2RsaW5lCQkJPSAtMSwKIAkucmVsb2FkX2N0bAkJCT0gLTEsCi0JLmFoYmNmZwkJCQk9IDB4NywgLyogSU5DUjE2ICovCisJLmFoYmNmZwkJCQk9IEdBSEJDRkdfSEJTVExFTl9JTkNSMTYgPDwKKwkJCQkJICBHQUhCQ0ZHX0hCU1RMRU5fU0hJRlQsCiAJLnVmcmFtZV9zY2hlZAkJCT0gLTEsCiAJLmV4dGVybmFsX2lkX3Bpbl9jdGwJCT0gLTEsCiAJLmhpYmVybmF0aW9uCQkJPSAtMSwKQEAgLTEyNCw5ICsxMjUsMTEgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhzb3RnLT5jbGspOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaWYgKGhzb3RnLT5jbGspIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhzb3RnLT5jbGspOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAlpZiAoaHNvdGctPnVwaHkpCiAJCXJldCA9IHVzYl9waHlfaW5pdChoc290Zy0+dXBoeSk7CkBAIC0xNzQsNyArMTc3LDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhzb3RnLT5jbGspOworCWlmIChoc290Zy0+Y2xrKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaHNvdGctPmNsayk7CiAKIAlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoaHNvdGctPnN1cHBsaWVzKSwKIAkJCQkgICAgIGhzb3RnLT5zdXBwbGllcyk7CkBAIC0yMTEsMTQgKzIxNSw0MSBAQAogCSAqLwogCWhzb3RnLT5waHkgPSBkZXZtX3BoeV9nZXQoaHNvdGctPmRldiwgInVzYjItcGh5Iik7CiAJaWYgKElTX0VSUihoc290Zy0+cGh5KSkgewotCQloc290Zy0+cGh5ID0gTlVMTDsKLQkJaHNvdGctPnVwaHkgPSBkZXZtX3VzYl9nZXRfcGh5KGhzb3RnLT5kZXYsIFVTQl9QSFlfVFlQRV9VU0IyKTsKLQkJaWYgKElTX0VSUihoc290Zy0+dXBoeSkpCi0JCQloc290Zy0+dXBoeSA9IE5VTEw7Ci0JCWVsc2UKLQkJCWhzb3RnLT5wbGF0ID0gZGV2X2dldF9wbGF0ZGF0YShoc290Zy0+ZGV2KTsKKwkJcmV0ID0gUFRSX0VSUihoc290Zy0+cGh5KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAtRU5PREVWOgorCQljYXNlIC1FTk9TWVM6CisJCQloc290Zy0+cGh5ID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlIC1FUFJPQkVfREVGRVI6CisJCQlyZXR1cm4gcmV0OworCQlkZWZhdWx0OgorCQkJZGV2X2Vycihoc290Zy0+ZGV2LCAiZXJyb3IgZ2V0dGluZyBwaHkgJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CiAJfQogCisJaWYgKCFoc290Zy0+cGh5KSB7CisJCWhzb3RnLT51cGh5ID0gZGV2bV91c2JfZ2V0X3BoeShoc290Zy0+ZGV2LCBVU0JfUEhZX1RZUEVfVVNCMik7CisJCWlmIChJU19FUlIoaHNvdGctPnVwaHkpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGhzb3RnLT51cGh5KTsKKwkJCXN3aXRjaCAocmV0KSB7CisJCQljYXNlIC1FTk9ERVY6CisJCQljYXNlIC1FTlhJTzoKKwkJCQloc290Zy0+dXBoeSA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQljYXNlIC1FUFJPQkVfREVGRVI6CisJCQkJcmV0dXJuIHJldDsKKwkJCWRlZmF1bHQ6CisJCQkJZGV2X2Vycihoc290Zy0+ZGV2LCAiZXJyb3IgZ2V0dGluZyB1c2IgcGh5ICVkXG4iLAorCQkJCQlyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwloc290Zy0+cGxhdCA9IGRldl9nZXRfcGxhdGRhdGEoaHNvdGctPmRldik7CisKIAlpZiAoaHNvdGctPnBoeSkgewogCQkvKgogCQkgKiBJZiB1c2luZyB0aGUgZ2VuZXJpYyBQSFkgZnJhbWV3b3JrLCBjaGVjayBpZiB0aGUgUEhZIGJ1cwpAQCAtMjI4LDExICsyNTksNiBAQAogCQkJaHNvdGctPnBoeWlmID0gR1VTQkNGR19QSFlJRjg7CiAJfQogCi0JaWYgKCFoc290Zy0+cGh5ICYmICFoc290Zy0+dXBoeSAmJiAhaHNvdGctPnBsYXQpIHsKLQkJZGV2X2Vycihoc290Zy0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBvciB0cmFuc2NlaXZlciBkZWZpbmVkXG4iKTsKLQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0JfQotCiAJLyogQ2xvY2sgKi8KIAloc290Zy0+Y2xrID0gZGV2bV9jbGtfZ2V0KGhzb3RnLT5kZXYsICJvdGciKTsKIAlpZiAoSVNfRVJSKGhzb3RnLT5jbGspKSB7CkBAIC0zNDEsMjAgKzM2Nyw2IEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZiAoaXJxIDwgMCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIm1pc3NpbmcgSVJRIHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIGlycTsKLQl9Ci0KLQlkZXZfZGJnKGhzb3RnLT5kZXYsICJyZWdpc3RlcmluZyBjb21tb24gaGFuZGxlciBmb3IgaXJxJWRcbiIsCi0JCWlycSk7Ci0JcmV0dmFsID0gZGV2bV9yZXF1ZXN0X2lycShoc290Zy0+ZGV2LCBpcnEsCi0JCQkJICBkd2MyX2hhbmRsZV9jb21tb25faW50ciwgSVJRRl9TSEFSRUQsCi0JCQkJICBkZXZfbmFtZShoc290Zy0+ZGV2KSwgaHNvdGcpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaHNvdGctPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJmRldi0+ZGV2LCByZXMpOwogCWlmIChJU19FUlIoaHNvdGctPnJlZ3MpKQpAQCAtMzg5LDYgKzQwMSwyMCBAQAogCiAJZHdjMl9zZXRfYWxsX3BhcmFtcyhoc290Zy0+Y29yZV9wYXJhbXMsIC0xKTsKIAorCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm1pc3NpbmcgSVJRIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIGlycTsKKwl9CisKKwlkZXZfZGJnKGhzb3RnLT5kZXYsICJyZWdpc3RlcmluZyBjb21tb24gaGFuZGxlciBmb3IgaXJxJWRcbiIsCisJCWlycSk7CisJcmV0dmFsID0gZGV2bV9yZXF1ZXN0X2lycShoc290Zy0+ZGV2LCBpcnEsCisJCQkJICBkd2MyX2hhbmRsZV9jb21tb25faW50ciwgSVJRRl9TSEFSRUQsCisJCQkJICBkZXZfbmFtZShoc290Zy0+ZGV2KSwgaHNvdGcpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKIAlyZXR2YWwgPSBkd2MyX2xvd2xldmVsX2h3X2VuYWJsZShoc290Zyk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1wY2kuYyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1wY2kuYwppbmRleCA3N2E2MjJjLi4wMDlkODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvZHdjMy9kd2MzLXBjaS5jCkBAIC0zNCw2ICszNCw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQlNXCQkJMHgyMmI3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfU1BUTFAJCTB4OWQzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVEgJCTB4YTEzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0JYVAkJCTB4MGFhYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0FQTAkJCTB4NWFhYQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZ3Bpb19wYXJhbXMgcmVzZXRfZ3Bpb3MgPSB7IDAsIDAsIGZhbHNlIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZ3Bpb19wYXJhbXMgY3NfZ3Bpb3MgPSB7IDEsIDAsIGZhbHNlIH07CkBAIC0yMTAsNiArMjEyLDggQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9NUkZMRCksIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfU1BUTFApLCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1NQVEgpLCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0JYVCksIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfQVBMKSwgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX05MX1VTQiksIH0sCiAJeyAgfQkvKiBUZXJtaW5hdGluZyBFbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9kd2MzL2dhZGdldC5jCmluZGV4IDU1YmE0NDcuLmE1ODM3NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYwpAQCAtMTA3OCw2ICsxMDc4LDcgQEAKIAkgKiBsaXR0bGUgYml0IGZhc3Rlci4KIAkgKi8KIAlpZiAoIXVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZGVwLT5lbmRwb2ludC5kZXNjKSAmJgorCQkJIXVzYl9lbmRwb2ludF94ZmVyX2ludChkZXAtPmVuZHBvaW50LmRlc2MpICYmCiAJCQkhKGRlcC0+ZmxhZ3MgJiBEV0MzX0VQX0JVU1kpKSB7CiAJCXJldCA9IF9fZHdjM19nYWRnZXRfa2lja190cmFuc2ZlcihkZXAsIDAsIHRydWUpOwogCQlnb3RvIG91dDsKQEAgLTI3NDQsMTIgKzI3NDUsMzQgQEAKIAl9CiAKIAlkd2MtPmdhZGdldC5vcHMJCQk9ICZkd2MzX2dhZGdldF9vcHM7Ci0JZHdjLT5nYWRnZXQubWF4X3NwZWVkCQk9IFVTQl9TUEVFRF9TVVBFUjsKIAlkd2MtPmdhZGdldC5zcGVlZAkJPSBVU0JfU1BFRURfVU5LTk9XTjsKIAlkd2MtPmdhZGdldC5zZ19zdXBwb3J0ZWQJPSB0cnVlOwogCWR3Yy0+Z2FkZ2V0Lm5hbWUJCT0gImR3YzMtZ2FkZ2V0IjsKIAogCS8qCisJICogRklYTUUgV2UgbWlnaHQgYmUgc2V0dGluZyBtYXhfc3BlZWQgdG8gPFNVUEVSLCBob3dldmVyIHZlcnNpb25zCisJICogPDIuMjBhIG9mIGR3YzMgaGF2ZSBhbiBpc3N1ZSB3aXRoIG1ldGFzdGFiaWxpdHkgKGRvY3VtZW50ZWQKKwkgKiBlbHNld2hlcmUgaW4gdGhpcyBkcml2ZXIpIHdoaWNoIHRlbGxzIHVzIHdlIGNhbid0IHNldCBtYXggc3BlZWQgdG8KKwkgKiBhbnl0aGluZyBsb3dlciB0aGFuIFNVUEVSLgorCSAqCisJICogQmVjYXVzZSBnYWRnZXQubWF4X3NwZWVkIGlzIG9ubHkgdXNlZCBieSBjb21wb3NpdGUuYyBhbmQgZnVuY3Rpb24KKwkgKiBkcml2ZXJzIChpLmUuIGl0IHdvbid0IGdvIGludG8gZHdjMydzIHJlZ2lzdGVycykgd2UgYXJlIGFsbG93aW5nIHRoaXMKKwkgKiB0byBoYXBwZW4gc28gd2UgYXZvaWQgc2VuZGluZyBTdXBlclNwZWVkIENhcGFiaWxpdHkgZGVzY3JpcHRvcgorCSAqIHRvZ2V0aGVyIHdpdGggb3VyIEJPUyBkZXNjcmlwdG9yIGFzIHRoYXQgY291bGQgY29uZnVzZSBob3N0IGludG8KKwkgKiB0aGlua2luZyB3ZSBjYW4gaGFuZGxlIHN1cGVyIHNwZWVkLgorCSAqCisJICogTm90ZSB0aGF0LCBpbiBmYWN0LCB3ZSB3b24ndCBldmVuIHN1cHBvcnQgR2V0Qk9TIHJlcXVlc3RzIHdoZW4gc3BlZWQKKwkgKiBpcyBsZXNzIHRoYW4gc3VwZXIgc3BlZWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIG1lYW5zLCB5ZXQsIHRvIHRlbGwKKwkgKiBjb21wb3NpdGUuYyB0aGF0IHdlIGFyZSBVU0IgMi4wICsgTFBNIEVDTi4KKwkgKi8KKwlpZiAoZHdjLT5yZXZpc2lvbiA8IERXQzNfUkVWSVNJT05fMjIwQSkKKwkJZHdjM190cmFjZSh0cmFjZV9kd2MzX2dhZGdldCwKKwkJCQkiQ2hhbmdpbmcgbWF4X3NwZWVkIG9uIHJldiAlMDh4XG4iLAorCQkJCWR3Yy0+cmV2aXNpb24pOworCisJZHdjLT5nYWRnZXQubWF4X3NwZWVkCQk9IGR3Yy0+bWF4aW11bV9zcGVlZDsKKworCS8qCiAJICogUGVyIGRhdGFib29rLCBEV0MzIG5lZWRzIGJ1ZmZlciBzaXplIHRvIGJlIGFsaWduZWQgdG8gTWF4UGFja2V0U2l6ZQogCSAqIG9uIGVwIG91dC4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2ZzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9mcy5jCmluZGV4IGFkYzZkNTIuLmNmNDNlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2ZzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfZnMuYwpAQCAtNDIzLDcgKzQyMyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZmZnMtPmV2LndhaXRxLmxvY2spOwogCW11dGV4X3VubG9jaygmZmZzLT5tdXRleCk7CiAKLQlyZXR1cm4gdW5saWtlbHkoX19jb3B5X3RvX3VzZXIoYnVmLCBldmVudHMsIHNpemUpKSA/IC1FRkFVTFQgOiBzaXplOworCXJldHVybiB1bmxpa2VseShjb3B5X3RvX3VzZXIoYnVmLCBldmVudHMsIHNpemUpKSA/IC1FRkFVTFQgOiBzaXplOwogfQogCiBzdGF0aWMgc3NpemVfdCBmZnNfZXAwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCkBAIC01MTMsNyArNTEzLDcgQEAKIAogCQkvKiB1bmxvY2tzIHNwaW5sb2NrICovCiAJCXJldCA9IF9fZmZzX2VwMF9xdWV1ZV93YWl0KGZmcywgZGF0YSwgbGVuKTsKLQkJaWYgKGxpa2VseShyZXQgPiAwKSAmJiB1bmxpa2VseShfX2NvcHlfdG9fdXNlcihidWYsIGRhdGEsIGxlbikpKQorCQlpZiAobGlrZWx5KHJldCA+IDApICYmIHVubGlrZWx5KGNvcHlfdG9fdXNlcihidWYsIGRhdGEsIGxlbikpKQogCQkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBkb25lX211dGV4OwogCkBAIC0zNDkzLDcgKzM0OTMsNyBAQAogCWlmICh1bmxpa2VseSghZGF0YSkpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JaWYgKHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoZGF0YSwgYnVmLCBsZW4pKSkgeworCWlmICh1bmxpa2VseShjb3B5X2Zyb21fdXNlcihkYXRhLCBidWYsIGxlbikpKSB7CiAJCWtmcmVlKGRhdGEpOwogCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9sb29wYmFjay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbG9vcGJhY2suYwppbmRleCAyMzkzM2JkLi5kZGMzYWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9sb29wYmFjay5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX2xvb3BiYWNrLmMKQEAgLTMyOSw3ICszMjksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsb29wLT5xbGVuICYmIHJlc3VsdCA9PSAwOyBpKyspIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAotCQlpbl9yZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChsb29wLT5pbl9lcCwgR0ZQX0tFUk5FTCk7CisJCWluX3JlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGxvb3AtPmluX2VwLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFpbl9yZXEpCiAJCQlnb3RvIGZhaWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkuYwppbmRleCA0MmFjYjQ1Li44OThhNTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaS5jCkBAIC0zNzAsNiArMzcwLDcgQEAKIAkJaWYgKGVycikgewogCQkJRVJST1IobWlkaSwgIiVzIHF1ZXVlIHJlcTogJWRcbiIsCiAJCQkJICAgIG1pZGktPm91dF9lcC0+bmFtZSwgZXJyKTsKKwkJCWZyZWVfZXBfcmVxKG1pZGktPm91dF9lcCwgcmVxKTsKIAkJfQogCX0KIApAQCAtNTQ1LDcgKzU0Niw3IEBACiAJCX0KIAl9CiAKLQlpZiAocmVxLT5sZW5ndGggPiAwKSB7CisJaWYgKHJlcS0+bGVuZ3RoID4gMCAmJiBlcC0+ZW5hYmxlZCkgewogCQlpbnQgZXJyOwogCiAJCWVyciA9IHVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfQVRPTUlDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYwppbmRleCAyODllYmNhLi5hZDhjOWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jCkBAIC0yMCw3ICsyMCw3IEBACiAjZGVmaW5lIFVWQ19BVFRSKHByZWZpeCwgY25hbWUsIGFuYW1lKSBcCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSBwcmVmaXgjI2F0dHJfIyNjbmFtZSA9IHsgXAogCS5jYV9uYW1lCT0gX19zdHJpbmdpZnkoYW5hbWUpLAkJCQlcCi0JLmNhX21vZGUJPSBTX0lSVUdPLAkJCQkJXAorCS5jYV9tb2RlCT0gU19JUlVHTyB8IFNfSVdVR08sCQkJCVwKIAkuY2Ffb3duZXIJPSBUSElTX01PRFVMRSwJCQkJCVwKIAkuc2hvdwkJPSBwcmVmaXgjI2NuYW1lIyNfc2hvdywJCQkJXAogCS5zdG9yZQkJPSBwcmVmaXgjI2NuYW1lIyNfc3RvcmUsCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9hdG1lbF91c2JhX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9hdG1lbF91c2JhX3VkYy5jCmluZGV4IGYwZjJiMDYuLmY5MmY1YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvYXRtZWxfdXNiYV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2F0bWVsX3VzYmFfdWRjLmMKQEAgLTE2MzMsNyArMTYzMyw3IEBACiAJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOwogCiAJaW50X2VuYiA9IHVzYmFfaW50X2VuYl9nZXQodWRjKTsKLQlzdGF0dXMgPSB1c2JhX3JlYWRsKHVkYywgSU5UX1NUQSkgJiBpbnRfZW5iOworCXN0YXR1cyA9IHVzYmFfcmVhZGwodWRjLCBJTlRfU1RBKSAmIChpbnRfZW5iIHwgVVNCQV9ISUdIX1NQRUVEKTsKIAlEQkcoREJHX0lOVCwgImlycSwgc3RhdHVzPSUjMDh4XG4iLCBzdGF0dXMpOwogCiAJaWYgKHN0YXR1cyAmIFVTQkFfREVUX1NVU1BFTkQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvcHhhMjd4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9weGEyN3hfdWRjLmMKaW5kZXggNjcwYWMwYi4uMDAxYTNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9weGEyN3hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9weGEyN3hfdWRjLmMKQEAgLTI1MzYsNiArMjUzNiw5IEBACiAJdWRjLT5wdWxsdXBfcmVzdW1lID0gdWRjLT5wdWxsdXBfb247CiAJZHBsdXNfcHVsbHVwKHVkYywgMCk7CiAKKwlpZiAodWRjLT5kcml2ZXIpCisJCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KCZ1ZGMtPmdhZGdldCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKaW5kZXggMzQyZmZkMS4uOGM2ZTE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCkBAIC00NzMsNiArNDczLDggQEAKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7CisKIAlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibnVtLXBvcnRzIiwgJnBvcnRzKSkKIAkJcGRhdGEtPnBvcnRzID0gcG9ydHM7CiAKQEAgLTQ4Myw2ICs0ODUsNyBAQAogCQkgKi8KIAkJaWYgKGkgPj0gcGRhdGEtPnBvcnRzKSB7CiAJCQlwZGF0YS0+dmJ1c19waW5baV0gPSAtRUlOVkFMOworCQkJcGRhdGEtPm92ZXJjdXJyZW50X3BpbltpXSA9IC1FSU5WQUw7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC01MTMsMTAgKzUxNiw4IEBACiAJfQogCiAJYXQ5MV9mb3JfZWFjaF9wb3J0KGkpIHsKLQkJaWYgKGkgPj0gcGRhdGEtPnBvcnRzKSB7Ci0JCQlwZGF0YS0+b3ZlcmN1cnJlbnRfcGluW2ldID0gLUVJTlZBTDsKLQkJCWNvbnRpbnVlOwotCQl9CisJCWlmIChpID49IHBkYXRhLT5wb3J0cykKKwkJCWJyZWFrOwogCiAJCXBkYXRhLT5vdmVyY3VycmVudF9waW5baV0gPQogCQkJb2ZfZ2V0X25hbWVkX2dwaW9fZmxhZ3MobnAsICJhdG1lbCxvYy1ncGlvIiwgaSwgJmZsYWdzKTsKQEAgLTU1Miw4ICs1NTMsNiBAQAogCQl9CiAJfQogCi0JcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKLQogCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAlyZXR1cm4gdXNiX2hjZF9hdDkxX3Byb2JlKCZvaGNpX2F0OTFfaGNfZHJpdmVyLCBwZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9xc2V0LmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcXNldC5jCmluZGV4IGRjMzFjNDIuLjlmMWMwNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9xc2V0LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYwpAQCAtMzc3LDYgKzM3NywxMCBAQAogCWlmIChzdGQtPnBsX3ZpcnQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc3RkLT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHdoYy0+d3VzYmhjLmRldiwgc3RkLT5wbF92aXJ0LCBwbF9sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcih3aGMtPnd1c2JoYy5kZXYsIHN0ZC0+ZG1hX2FkZHIpKSB7CisJCWtmcmVlKHN0ZC0+cGxfdmlydCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KIAogCWZvciAocCA9IDA7IHAgPCBzdGQtPm51bV9wb2ludGVyczsgcCsrKSB7CiAJCXN0ZC0+cGxfdmlydFtwXS5idWZfcHRyID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCmluZGV4IDVkMmQ3ZTkuLmY5ODBjMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKQEAgLTczMyw4ICs3MzMsMzAgQEAKIAkJaWYgKChyYXdfcG9ydF9zdGF0dXMgJiBQT1JUX1JFU0VUKSB8fAogCQkJCSEocmF3X3BvcnRfc3RhdHVzICYgUE9SVF9QRSkpCiAJCQlyZXR1cm4gMHhmZmZmZmZmZjsKLQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKLQkJCQkJYnVzX3N0YXRlLT5yZXN1bWVfZG9uZVt3SW5kZXhdKSkgeworCQkvKiBkaWQgcG9ydCBldmVudCBoYW5kbGVyIGFscmVhZHkgc3RhcnQgcmVzdW1lIHRpbWluZz8gKi8KKwkJaWYgKCFidXNfc3RhdGUtPnJlc3VtZV9kb25lW3dJbmRleF0pIHsKKwkJCS8qIElmIG5vdCwgbWF5YmUgd2UgYXJlIGluIGEgaG9zdCBpbml0YXRlZCByZXN1bWU/ICovCisJCQlpZiAodGVzdF9iaXQod0luZGV4LCAmYnVzX3N0YXRlLT5yZXN1bWluZ19wb3J0cykpIHsKKwkJCQkvKiBIb3N0IGluaXRhdGVkIHJlc3VtZSBkb2Vzbid0IHRpbWUgdGhlIHJlc3VtZQorCQkJCSAqIHNpZ25hbGxpbmcgdXNpbmcgcmVzdW1lX2RvbmVbXS4KKwkJCQkgKiBJdCBtYW51YWxseSBzZXRzIFJFU1VNRSBzdGF0ZSwgc2xlZXBzIDIwbXMKKwkJCQkgKiBhbmQgc2V0cyBVMCBzdGF0ZS4gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUKKwkJCQkgKiBjaGFuZ2VkLCBidXQgbm90IHJpZ2h0IG5vdy4KKwkJCQkgKi8KKwkJCX0gZWxzZSB7CisJCQkJLyogcG9ydCByZXN1bWUgd2FzIGRpc2NvdmVyZWQgbm93IGFuZCBoZXJlLAorCQkJCSAqIHN0YXJ0IHJlc3VtZSB0aW1pbmcKKwkJCQkgKi8KKwkJCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsKKwkJCQkJbXNlY3NfdG9famlmZmllcyhVU0JfUkVTVU1FX1RJTUVPVVQpOworCisJCQkJc2V0X2JpdCh3SW5kZXgsICZidXNfc3RhdGUtPnJlc3VtaW5nX3BvcnRzKTsKKwkJCQlidXNfc3RhdGUtPnJlc3VtZV9kb25lW3dJbmRleF0gPSB0aW1lb3V0OworCQkJCW1vZF90aW1lcigmaGNkLT5yaF90aW1lciwgdGltZW91dCk7CisJCQl9CisJCS8qIEhhcyByZXN1bWUgYmVlbiBzaWduYWxsZWQgZm9yIFVTQl9SRVNVTUVfVElNRSB5ZXQ/ICovCisJCX0gZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAorCQkJCQkgYnVzX3N0YXRlLT5yZXN1bWVfZG9uZVt3SW5kZXhdKSkgewogCQkJaW50IHRpbWVfbGVmdDsKIAogCQkJeGhjaV9kYmcoeGhjaSwgIlJlc3VtZSBVU0IyIHBvcnQgJWRcbiIsCkBAIC03NzUsMTkgKzc5NywzNSBAQAogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIFRoZSByZXN1bWUgaGFzIGJlZW4gc2lnbmFsaW5nIGZvciBsZXNzIHRoYW4KLQkJCSAqIDIwbXMuIFJlcG9ydCB0aGUgcG9ydCBzdGF0dXMgYXMgU1VTUEVORCwKLQkJCSAqIGxldCB0aGUgdXNiY29yZSBjaGVjayBwb3J0IHN0YXR1cyBhZ2FpbgotCQkJICogYW5kIGNsZWFyIHJlc3VtZSBzaWduYWxpbmcgbGF0ZXIuCisJCQkgKiBVU0JfUkVTVU1FX1RJTUUuIFJlcG9ydCB0aGUgcG9ydCBzdGF0dXMgYXMgU1VTUEVORCwKKwkJCSAqIGxldCB0aGUgdXNiY29yZSBjaGVjayBwb3J0IHN0YXR1cyBhZ2FpbiBhbmQgY2xlYXIKKwkJCSAqIHJlc3VtZSBzaWduYWxpbmcgbGF0ZXIuCiAJCQkgKi8KIAkJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1NVU1BFTkQ7CiAJCX0KIAl9Ci0JaWYgKChyYXdfcG9ydF9zdGF0dXMgJiBQT1JUX1BMU19NQVNLKSA9PSBYREVWX1UwCi0JCQkmJiAocmF3X3BvcnRfc3RhdHVzICYgUE9SVF9QT1dFUikKLQkJCSYmIChidXNfc3RhdGUtPnN1c3BlbmRlZF9wb3J0cyAmICgxIDw8IHdJbmRleCkpKSB7Ci0JCWJ1c19zdGF0ZS0+c3VzcGVuZGVkX3BvcnRzICY9IH4oMSA8PCB3SW5kZXgpOwotCQlpZiAoaGNkLT5zcGVlZCA8IEhDRF9VU0IzKQotCQkJYnVzX3N0YXRlLT5wb3J0X2Nfc3VzcGVuZCB8PSAxIDw8IHdJbmRleDsKKwkvKgorCSAqIENsZWFyIHN0YWxlIHVzYjIgcmVzdW1lIHNpZ25hbGxpbmcgdmFyaWFibGVzIGluIGNhc2UgcG9ydCBjaGFuZ2VkCisJICogc3RhdGUgZHVyaW5nIHJlc3VtZSBzaWduYWxsaW5nLiBGb3IgZXhhbXBsZSBvbiBlcnJvcgorCSAqLworCWlmICgoYnVzX3N0YXRlLT5yZXN1bWVfZG9uZVt3SW5kZXhdIHx8CisJICAgICB0ZXN0X2JpdCh3SW5kZXgsICZidXNfc3RhdGUtPnJlc3VtaW5nX3BvcnRzKSkgJiYKKwkgICAgKHJhd19wb3J0X3N0YXR1cyAmIFBPUlRfUExTX01BU0spICE9IFhERVZfVTMgJiYKKwkgICAgKHJhd19wb3J0X3N0YXR1cyAmIFBPUlRfUExTX01BU0spICE9IFhERVZfUkVTVU1FKSB7CisJCWJ1c19zdGF0ZS0+cmVzdW1lX2RvbmVbd0luZGV4XSA9IDA7CisJCWNsZWFyX2JpdCh3SW5kZXgsICZidXNfc3RhdGUtPnJlc3VtaW5nX3BvcnRzKTsKKwl9CisKKworCWlmICgocmF3X3BvcnRfc3RhdHVzICYgUE9SVF9QTFNfTUFTSykgPT0gWERFVl9VMCAmJgorCSAgICAocmF3X3BvcnRfc3RhdHVzICYgUE9SVF9QT1dFUikpIHsKKwkJaWYgKGJ1c19zdGF0ZS0+c3VzcGVuZGVkX3BvcnRzICYgKDEgPDwgd0luZGV4KSkgeworCQkJYnVzX3N0YXRlLT5zdXNwZW5kZWRfcG9ydHMgJj0gfigxIDw8IHdJbmRleCk7CisJCQlpZiAoaGNkLT5zcGVlZCA8IEhDRF9VU0IzKQorCQkJCWJ1c19zdGF0ZS0+cG9ydF9jX3N1c3BlbmQgfD0gMSA8PCB3SW5kZXg7CisJCX0KKwkJYnVzX3N0YXRlLT5yZXN1bWVfZG9uZVt3SW5kZXhdID0gMDsKKwkJY2xlYXJfYml0KHdJbmRleCwgJmJ1c19zdGF0ZS0+cmVzdW1pbmdfcG9ydHMpOwogCX0KIAlpZiAocmF3X3BvcnRfc3RhdHVzICYgUE9SVF9DT05ORUNUKSB7CiAJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT047CkBAIC0xMTEyLDYgKzExNTAsNyBAQAogCQkJCWlmICgodGVtcCAmIFBPUlRfUEUpID09IDApCiAJCQkJCWdvdG8gZXJyb3I7CiAKKwkJCQlzZXRfYml0KHdJbmRleCwgJmJ1c19zdGF0ZS0+cmVzdW1pbmdfcG9ydHMpOwogCQkJCXhoY2lfc2V0X2xpbmtfc3RhdGUoeGhjaSwgcG9ydF9hcnJheSwgd0luZGV4LAogCQkJCQkJCVhERVZfUkVTVU1FKTsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CkBAIC0xMTE5LDYgKzExNTgsNyBAQAogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJCQkJeGhjaV9zZXRfbGlua19zdGF0ZSh4aGNpLCBwb3J0X2FycmF5LCB3SW5kZXgsCiAJCQkJCQkJWERFVl9VMCk7CisJCQkJY2xlYXJfYml0KHdJbmRleCwgJmJ1c19zdGF0ZS0+cmVzdW1pbmdfcG9ydHMpOwogCQkJfQogCQkJYnVzX3N0YXRlLT5wb3J0X2Nfc3VzcGVuZCB8PSAxIDw8IHdJbmRleDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCmluZGV4IDE3ZjY4OTcuLmM2MjEwOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKQEAgLTE4OCwxMCArMTg4LDE0IEBACiAJCTB4YjcsIDB4MGMsIDB4MzQsIDB4YWMsCTB4MDEsIDB4ZTksIDB4YmYsIDB4NDUsCiAJCTB4YjcsIDB4ZTYsIDB4MmIsIDB4MzQsIDB4ZWMsIDB4OTMsIDB4MWUsIDB4MjMsCiAJfTsKLQlhY3BpX2V2YWx1YXRlX2RzbShBQ1BJX0hBTkRMRSgmZGV2LT5kZXYpLCBpbnRlbF9kc21fdXVpZCwgMywgMSwgTlVMTCk7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKworCW9iaiA9IGFjcGlfZXZhbHVhdGVfZHNtKEFDUElfSEFORExFKCZkZXYtPmRldiksIGludGVsX2RzbV91dWlkLCAzLCAxLAorCQkJCU5VTEwpOworCUFDUElfRlJFRShvYmopOwogfQogI2Vsc2UKLQlzdGF0aWMgdm9pZCB4aGNpX3BtZV9hY3BpX3J0ZDNfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQorc3RhdGljIHZvaWQgeGhjaV9wbWVfYWNwaV9ydGQzX2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH0KICNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwogCiAvKiBjYWxsZWQgZHVyaW5nIHByb2JlKCkgYWZ0ZXIgY2hpcCByZXNldCBjb21wbGV0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCmluZGV4IGZhODM2MjUuLmVlYWE2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwpAQCAtMTU4Myw3ICsxNTgzLDggQEAKIAkJCSAqLwogCQkJYm9ndXNfcG9ydF9zdGF0dXMgPSB0cnVlOwogCQkJZ290byBjbGVhbnVwOwotCQl9IGVsc2UgeworCQl9IGVsc2UgaWYgKCF0ZXN0X2JpdChmYWtlZF9wb3J0X2luZGV4LAorCQkJCSAgICAgJmJ1c19zdGF0ZS0+cmVzdW1pbmdfcG9ydHMpKSB7CiAJCQl4aGNpX2RiZyh4aGNpLCAicmVzdW1lIEhTIHBvcnQgJWRcbiIsIHBvcnRfaWQpOwogCQkJYnVzX3N0YXRlLT5yZXN1bWVfZG9uZVtmYWtlZF9wb3J0X2luZGV4XSA9IGppZmZpZXMgKwogCQkJCW1zZWNzX3RvX2ppZmZpZXMoVVNCX1JFU1VNRV9USU1FT1VUKTsKQEAgLTM4OTYsMjggKzM4OTcsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZXBfcmluZ19pc19wcm9jZXNzaW5nKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKLQkJaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCkKLXsKLQlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqeGRldjsKLQlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOwotCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4OwotCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKnhlcDsKLQlkbWFfYWRkcl90IGh3X2RlcTsKLQotCXhkZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOwotCXhlcCA9ICZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdOwotCWVwX3JpbmcgPSB4ZXAtPnJpbmc7Ci0JZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHhkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKLQotCWlmICgobGUzMl90b19jcHUoZXBfY3R4LT5lcF9pbmZvKSAmIEVQX1NUQVRFX01BU0spICE9IEVQX1NUQVRFX1JVTk5JTkcpCi0JCXJldHVybiAwOwotCi0JaHdfZGVxID0gbGU2NF90b19jcHUoZXBfY3R4LT5kZXEpICYgfkVQX0NUWF9DWUNMRV9NQVNLOwotCXJldHVybiAoaHdfZGVxICE9Ci0JCXhoY2lfdHJiX3ZpcnRfdG9fZG1hKGVwX3JpbmctPmVucV9zZWcsIGVwX3JpbmctPmVucXVldWUpKTsKLX0KLQogLyoKICAqIENoZWNrIHRyYW5zZmVyIHJpbmcgdG8gZ3VhcmFudGVlIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciB0aGUgdXJiLgogICogVXBkYXRlIElTTyBVUkIgc3RhcnRfZnJhbWUgYW5kIGludGVydmFsLgpAQCAtMzk4MywxMCArMzk2MiwxMiBAQAogCX0KIAogCS8qIENhbGN1bGF0ZSB0aGUgc3RhcnQgZnJhbWUgYW5kIHB1dCBpdCBpbiB1cmItPnN0YXJ0X2ZyYW1lLiAqLwotCWlmIChIQ0NfQ0ZDKHhoY2ktPmhjY19wYXJhbXMpICYmCi0JCQllcF9yaW5nX2lzX3Byb2Nlc3NpbmcoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgpKSB7Ci0JCXVyYi0+c3RhcnRfZnJhbWUgPSB4ZXAtPm5leHRfZnJhbWVfaWQ7Ci0JCWdvdG8gc2tpcF9zdGFydF9vdmVyOworCWlmIChIQ0NfQ0ZDKHhoY2ktPmhjY19wYXJhbXMpICYmICFsaXN0X2VtcHR5KCZlcF9yaW5nLT50ZF9saXN0KSkgeworCQlpZiAoKGxlMzJfdG9fY3B1KGVwX2N0eC0+ZXBfaW5mbykgJiBFUF9TVEFURV9NQVNLKSA9PQorCQkJCUVQX1NUQVRFX1JVTk5JTkcpIHsKKwkJCXVyYi0+c3RhcnRfZnJhbWUgPSB4ZXAtPm5leHRfZnJhbWVfaWQ7CisJCQlnb3RvIHNraXBfc3RhcnRfb3ZlcjsKKwkJfQogCX0KIAogCXN0YXJ0X2ZyYW1lID0gcmVhZGwoJnhoY2ktPnJ1bl9yZWdzLT5taWNyb2ZyYW1lX2luZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKaW5kZXggNmU3ZGM2Zi4uM2Y5MTI3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKQEAgLTE3NSw2ICsxNzUsMTYgQEAKIAljb21tYW5kIHw9IENNRF9SRVNFVDsKIAl3cml0ZWwoY29tbWFuZCwgJnhoY2ktPm9wX3JlZ3MtPmNvbW1hbmQpOwogCisJLyogRXhpc3RpbmcgSW50ZWwgeEhDSSBjb250cm9sbGVycyByZXF1aXJlIGEgZGVsYXkgb2YgMSBtUywKKwkgKiBhZnRlciBzZXR0aW5nIHRoZSBDTURfUkVTRVQgYml0LCBhbmQgYmVmb3JlIGFjY2Vzc2luZyBhbnkKKwkgKiBIQyByZWdpc3RlcnMuIFRoaXMgYWxsb3dzIHRoZSBIQyB0byBjb21wbGV0ZSB0aGUKKwkgKiByZXNldCBvcGVyYXRpb24gYW5kIGJlIHJlYWR5IGZvciBIQyByZWdpc3RlciBhY2Nlc3MuCisJICogV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgc3Vic2VxdWVudCBIQyByZWdpc3RlciBhY2Nlc3MsCisJICogbWF5IHJlc3VsdCBpbiBhIHN5c3RlbSBoYW5nIHZlcnkgcmFyZWx5LgorCSAqLworCWlmICh4aGNpLT5xdWlya3MgJiBYSENJX0lOVEVMX0hPU1QpCisJCXVkZWxheSgxMDAwKTsKKwogCXJldCA9IHhoY2lfaGFuZHNoYWtlKCZ4aGNpLT5vcF9yZWdzLT5jb21tYW5kLAogCQkJQ01EX1JFU0VULCAwLCAxMCAqIDEwMDAgKiAxMDAwKTsKIAlpZiAocmV0KQpAQCAtNDc2OCw4ICs0Nzc4LDE2IEBACiAJY3RybF9jdHgtPmFkZF9mbGFncyB8PSBjcHVfdG9fbGUzMihTTE9UX0ZMQUcpOwogCXNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgY29uZmlnX2NtZC0+aW5fY3R4KTsKIAlzbG90X2N0eC0+ZGV2X2luZm8gfD0gY3B1X3RvX2xlMzIoREVWX0hVQik7CisJLyoKKwkgKiByZWZlciB0byBzZWN0aW9uIDYuMi4yOiBNVFQgc2hvdWxkIGJlIDAgZm9yIGZ1bGwgc3BlZWQgaHViLAorCSAqIGJ1dCBpdCBtYXkgYmUgYWxyZWFkeSBzZXQgdG8gMSB3aGVuIHNldHVwIGFuIHhIQ0kgdmlydHVhbAorCSAqIGRldmljZSwgc28gY2xlYXIgaXQgYW55d2F5LgorCSAqLwogCWlmICh0dC0+bXVsdGkpCiAJCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSBjcHVfdG9fbGUzMihERVZfTVRUKTsKKwllbHNlIGlmIChoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkKKwkJc2xvdF9jdHgtPmRldl9pbmZvICY9IGNwdV90b19sZTMyKH5ERVZfTVRUKTsKKwogCWlmICh4aGNpLT5oY2lfdmVyc2lvbiA+IDB4OTUpIHsKIAkJeGhjaV9kYmcoeGhjaSwgInhIQ0kgdmVyc2lvbiAleCBuZWVkcyBodWIgIgogCQkJCSJUVCB0aGluayB0aW1lIGFuZCBudW1iZXIgb2YgcG9ydHNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKaW5kZXggMWYyMDM3Yi4uNDVjODNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKIGNvbmZpZyBVU0JfVElfQ1BQSTQxX0RNQQogCWJvb2wgJ1RJIENQUEkgNC4xIChBTTMzNXgpJwotCWRlcGVuZHMgb24gQVJDSF9PTUFQCisJZGVwZW5kcyBvbiBBUkNIX09NQVAgJiYgRE1BREVWSUNFUwogCXNlbGVjdCBUSV9DUFBJNDEKIAogY29uZmlnIFVTQl9UVVNCX09NQVBfRE1BCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCBiYTEzNTI5Li5lZTlmZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmbmRlZiBDT05GSUdfQkxBQ0tGSU4KLXN0YXRpYyBpbnQgbXVzYl91bHBpX3JlYWQoc3RydWN0IHVzYl9waHkgKnBoeSwgdTMyIG9mZnNldCkKK3N0YXRpYyBpbnQgbXVzYl91bHBpX3JlYWQoc3RydWN0IHVzYl9waHkgKnBoeSwgdTMyIHJlZykKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHIgPSBwaHktPmlvX3ByaXY7CiAJaW50CWkgPSAwOwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJICogVUxQSUNhcktpdENvbnRyb2xEaXNhYmxlVVRNSSBhZnRlciBjbGVhcmluZyBQT1dFUl9TVVNQRU5ETS4KIAkgKi8KIAotCW11c2Jfd3JpdGViKGFkZHIsIE1VU0JfVUxQSV9SRUdfQUREUiwgKHU4KW9mZnNldCk7CisJbXVzYl93cml0ZWIoYWRkciwgTVVTQl9VTFBJX1JFR19BRERSLCAodTgpcmVnKTsKIAltdXNiX3dyaXRlYihhZGRyLCBNVVNCX1VMUElfUkVHX0NPTlRST0wsCiAJCQlNVVNCX1VMUElfUkVHX1JFUSB8IE1VU0JfVUxQSV9SRE5fV1IpOwogCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG11c2JfdWxwaV93cml0ZShzdHJ1Y3QgdXNiX3BoeSAqcGh5LCB1MzIgb2Zmc2V0LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgbXVzYl91bHBpX3dyaXRlKHN0cnVjdCB1c2JfcGh5ICpwaHksIHUzMiB2YWwsIHUzMiByZWcpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyID0gcGh5LT5pb19wcml2OwogCWludAlpID0gMDsKQEAgLTE5MSw4ICsxOTEsOCBAQAogCXBvd2VyICY9IH5NVVNCX1BPV0VSX1NVU1BFTkRNOwogCW11c2Jfd3JpdGViKGFkZHIsIE1VU0JfUE9XRVIsIHBvd2VyKTsKIAotCW11c2Jfd3JpdGViKGFkZHIsIE1VU0JfVUxQSV9SRUdfQUREUiwgKHU4KW9mZnNldCk7Ci0JbXVzYl93cml0ZWIoYWRkciwgTVVTQl9VTFBJX1JFR19EQVRBLCAodTgpZGF0YSk7CisJbXVzYl93cml0ZWIoYWRkciwgTVVTQl9VTFBJX1JFR19BRERSLCAodTgpcmVnKTsKKwltdXNiX3dyaXRlYihhZGRyLCBNVVNCX1VMUElfUkVHX0RBVEEsICh1OCl2YWwpOwogCW11c2Jfd3JpdGViKGFkZHIsIE1VU0JfVUxQSV9SRUdfQ09OVFJPTCwgTVVTQl9VTFBJX1JFR19SRVEpOwogCiAJd2hpbGUgKCEobXVzYl9yZWFkYihhZGRyLCBNVVNCX1VMUElfUkVHX0NPTlRST0wpCkBAIC0xNjY4LDcgKzE2NjgsNyBAQAogc3RhdGljIGJvb2wgdXNlX2RtYSA9IDE7CiAKIC8qICJtb2Rwcm9iZSAuLi4gdXNlX2RtYT0wIiBldGMgKi8KLW1vZHVsZV9wYXJhbSh1c2VfZG1hLCBib29sLCAwKTsKK21vZHVsZV9wYXJhbSh1c2VfZG1hLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModXNlX2RtYSwgImVuYWJsZS9kaXNhYmxlIHVzZSBvZiBETUEiKTsKIAogdm9pZCBtdXNiX2RtYV9jb21wbGV0aW9uKHN0cnVjdCBtdXNiICptdXNiLCB1OCBlcG51bSwgdTggdHJhbnNtaXQpCkBAIC0yMDE3LDcgKzIwMTcsNiBAQAogCS8qIFdlIG5lZWQgbXVzYl9yZWFkL3dyaXRlIGZ1bmN0aW9ucyBpbml0aWFsaXplZCBmb3IgUE0gKi8KIAlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChtdXNiLT5jb250cm9sbGVyKTsKIAlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShtdXNiLT5jb250cm9sbGVyLCAyMDApOwotCXBtX3J1bnRpbWVfaXJxX3NhZmUobXVzYi0+Y29udHJvbGxlcik7CiAJcG1fcnVudGltZV9lbmFibGUobXVzYi0+Y29udHJvbGxlcik7CiAKIAkvKiBUaGUgbXVzYl9wbGF0Zm9ybV9pbml0KCkgY2FsbDoKQEAgLTIwOTUsNiArMjA5NCw3IEBACiAjaWZuZGVmIENPTkZJR19NVVNCX1BJT19PTkxZCiAJaWYgKCFtdXNiLT5vcHMtPmRtYV9pbml0IHx8ICFtdXNiLT5vcHMtPmRtYV9leGl0KSB7CiAJCWRldl9lcnIoZGV2LCAiRE1BIGNvbnRyb2xsZXIgbm90IHNldFxuIik7CisJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gZmFpbDI7CiAJfQogCW11c2JfZG1hX2NvbnRyb2xsZXJfY3JlYXRlID0gbXVzYi0+b3BzLT5kbWFfaW5pdDsKQEAgLTIyMTgsNiArMjIxOCwxMiBAQAogCiAJcG1fcnVudGltZV9wdXQobXVzYi0+Y29udHJvbGxlcik7CiAKKwkvKgorCSAqIEZvciB3aHkgdGhpcyBpcyBjdXJyZW50bHkgbmVlZGVkLCBzZWUgY29tbWl0IDNlNDNhMDcyNTYzNworCSAqICgidXNiOiBtdXNiOiBjb3JlOiBhZGQgcG1fcnVudGltZV9pcnFfc2FmZSgpIikKKwkgKi8KKwlwbV9ydW50aW1lX2lycV9zYWZlKG11c2ItPmNvbnRyb2xsZXIpOworCiAJcmV0dXJuIDA7CiAKIGZhaWw1OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKaW5kZXggMjZjNjVlNi4uNzk1YTQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCkBAIC0xMTIsMjIgKzExMiwzMiBAQAogCXN0cnVjdCBtdXNiCSptdXNiID0gZXAtPm11c2I7CiAJdm9pZCBfX2lvbWVtCSplcGlvID0gZXAtPnJlZ3M7CiAJdTE2CQljc3I7Ci0JdTE2CQlsYXN0Y3NyID0gMDsKIAlpbnQJCXJldHJpZXMgPSAxMDAwOwogCiAJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1RYQ1NSKTsKIAl3aGlsZSAoY3NyICYgTVVTQl9UWENTUl9GSUZPTk9URU1QVFkpIHsKLQkJaWYgKGNzciAhPSBsYXN0Y3NyKQotCQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiSG9zdCBUWCBGSUZPTk9URU1QVFkgY3NyOiAlMDJ4XG4iLCBjc3IpOwotCQlsYXN0Y3NyID0gY3NyOwogCQljc3IgfD0gTVVTQl9UWENTUl9GTFVTSEZJRk8gfCBNVVNCX1RYQ1NSX1RYUEtUUkRZOwogCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1RYQ1NSLCBjc3IpOwogCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfVFhDU1IpOwotCQlpZiAoV0FSTihyZXRyaWVzLS0gPCAxLAorCisJCS8qCisJCSAqIEZJWE1FOiBzb21ldGltZXMgdGhlIHR4IGZpZm8gZmx1c2ggZmFpbGVkLCBpdCBoYXMgYmVlbgorCQkgKiBvYnNlcnZlZCBkdXJpbmcgZGV2aWNlIGRpc2Nvbm5lY3Qgb24gQU0zMzV4LgorCQkgKgorCQkgKiBUbyByZXByb2R1Y2UgdGhlIGlzc3VlLCBlbnN1cmUgdHggdXJiKHMpIGFyZSBxdWV1ZWQgd2hlbgorCQkgKiB1bnBsdWcgdGhlIHVzYiBkZXZpY2Ugd2hpY2ggaXMgY29ubmVjdGVkIHRvIEFNMzM1eCB1c2IKKwkJICogaG9zdCBwb3J0LgorCQkgKgorCQkgKiBJIGZvdW5kIHVzaW5nIGEgdXNiLWV0aGVybmV0IGRldmljZSBhbmQgcnVubmluZyBpcGVyZgorCQkgKiAoY2xpZW50IG9uIEFNMzM1eCkgaGFzIHZlcnkgaGlnaCBjaGFuY2UgdG8gdHJpZ2dlciBpdC4KKwkJICoKKwkJICogQmV0dGVyIHRvIHR1cm4gb24gZGV2X2RiZygpIGluIG11c2JfY2xlYW51cF91cmIoKSB3aXRoCisJCSAqIENQUEkgZW5hYmxlZCB0byBzZWUgdGhlIGlzc3VlIHdoZW4gYWJvcnRpbmcgdGhlIHR4IGNoYW5uZWwuCisJCSAqLworCQlpZiAoZGV2X1dBUk5fT05DRShtdXNiLT5jb250cm9sbGVyLCByZXRyaWVzLS0gPCAxLAogCQkJCSJDb3VsZCBub3QgZmx1c2ggaG9zdCBUWCVkIGZpZm86IGNzcjogJTA0eFxuIiwKIAkJCQllcC0+ZXBudW0sIGNzcikpCiAJCQlyZXR1cm47Ci0JCW1kZWxheSgxKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9LY29uZmlnIGIvZHJpdmVycy91c2IvcGh5L0tjb25maWcKaW5kZXggMTczMTMyNC4uMjJlOGVjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcGh5L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvcGh5L0tjb25maWcKQEAgLTIxLDcgKzIxLDYgQEAKIGNvbmZpZyBGU0xfVVNCMl9PVEcKIAlib29sICJGcmVlc2NhbGUgVVNCIE9URyBUcmFuc2NlaXZlciBEcml2ZXIiCiAJZGVwZW5kcyBvbiBVU0JfRUhDSV9GU0wgJiYgVVNCX0ZTTF9VU0IyICYmIFVTQl9PVEdfRlNNICYmIFBNCi0Jc2VsZWN0IFVTQl9PVEcKIAlzZWxlY3QgVVNCX1BIWQogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgRnJlZXNjYWxlIFVTQiBPVEcgdHJhbnNjZWl2ZXIuCkBAIC0xNjgsOCArMTY3LDcgQEAKIAogY29uZmlnIFVTQl9NVl9PVEcKIAl0cmlzdGF0ZSAiTWFydmVsbCBVU0IgT1RHIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfRUhDSV9NViAmJiBVU0JfTVZfVURDICYmIFBNCi0Jc2VsZWN0IFVTQl9PVEcKKwlkZXBlbmRzIG9uIFVTQl9FSENJX01WICYmIFVTQl9NVl9VREMgJiYgUE0gJiYgVVNCX09URwogCXNlbGVjdCBVU0JfUEhZCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBNYXJ2ZWxsIFVTQiBPVEcgdHJhbnNjaWV2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHktbXNtLXVzYi5jIGIvZHJpdmVycy91c2IvcGh5L3BoeS1tc20tdXNiLmMKaW5kZXggODBlYjk5MS4uMGQxOWE2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcGh5L3BoeS1tc20tdXNiLmMKKysrIGIvZHJpdmVycy91c2IvcGh5L3BoeS1tc20tdXNiLmMKQEAgLTE1MDYsNyArMTUwNiw2IEBACiB7CiAJc3RydWN0IG1zbV9vdGdfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGV4dGNvbl9kZXYgKmV4dF9pZCwgKmV4dF92YnVzOwotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKIAlpbnQgbGVuLCByZXQsIHdvcmRzOwpAQCAtMTUxOCw4ICsxNTE3LDkgQEAKIAogCW1vdGctPnBkYXRhID0gcGRhdGE7CiAKLQlpZCA9IG9mX21hdGNoX2RldmljZShtc21fb3RnX2R0X21hdGNoLCAmcGRldi0+ZGV2KTsKLQlwZGF0YS0+cGh5X3R5cGUgPSAoZW51bSBtc21fdXNiX3BoeV90eXBlKSBpZC0+ZGF0YTsKKwlwZGF0YS0+cGh5X3R5cGUgPSAoZW51bSBtc21fdXNiX3BoeV90eXBlKW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+ZGV2KTsKKwlpZiAoIXBkYXRhLT5waHlfdHlwZSkKKwkJcmV0dXJuIDE7CiAKIAltb3RnLT5saW5rX3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoJnBkZXYtPmRldiwgImxpbmsiKTsKIAlpZiAoSVNfRVJSKG1vdGctPmxpbmtfcnN0KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHktbXhzLXVzYi5jIGIvZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmMKaW5kZXggNGQ4NjNlYi4uYzI5MzZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmMKKysrIGIvZHJpdmVycy91c2IvcGh5L3BoeS1teHMtdXNiLmMKQEAgLTE0MywxMiArMTQzLDE3IEBACiAJLmZsYWdzID0gTVhTX1BIWV9ESVNDT05ORUNUX0xJTkVfV0lUSE9VVF9WQlVTLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBteHNfcGh5X2RhdGEgaW14NnVsX3BoeV9kYXRhID0geworCS5mbGFncyA9IE1YU19QSFlfRElTQ09OTkVDVF9MSU5FX1dJVEhPVVRfVkJVUywKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG14c19waHlfZHRfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14NnN4LXVzYnBoeSIsIC5kYXRhID0gJmlteDZzeF9waHlfZGF0YSwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxpbXg2c2wtdXNicGh5IiwgLmRhdGEgPSAmaW14NnNsX3BoeV9kYXRhLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDZxLXVzYnBoeSIsIC5kYXRhID0gJmlteDZxX3BoeV9kYXRhLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDIzLXVzYnBoeSIsIC5kYXRhID0gJmlteDIzX3BoeV9kYXRhLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLHZmNjEwLXVzYnBoeSIsIC5kYXRhID0gJnZmNjEwX3BoeV9kYXRhLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDZ1bC11c2JwaHkiLCAuZGF0YSA9ICZpbXg2dWxfcGh5X2RhdGEsIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXhzX3BoeV9kdF9pZHMpOwpAQCAtNDUyLDEwICs0NTcsMTMgQEAKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJc3RydWN0IG14c19waHkgKm14c19waHk7CiAJaW50IHJldDsKLQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9Ci0JCQlvZl9tYXRjaF9kZXZpY2UobXhzX3BoeV9kdF9pZHMsICZwZGV2LT5kZXYpOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAorCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKG14c19waHlfZHRfaWRzLCAmcGRldi0+ZGV2KTsKKwlpZiAoIW9mX2lkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwogCWlmIChJU19FUlIoYmFzZSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LW9tYXAtb3RnLmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LW9tYXAtb3RnLmMKaW5kZXggMTI3MDkwNi4uYzRiZjJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcGh5L3BoeS1vbWFwLW90Zy5jCisrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHktb21hcC1vdGcuYwpAQCAtMTA1LDcgKzEwNSw2IEBACiAJZXh0Y29uID0gZXh0Y29uX2dldF9leHRjb25fZGV2KGNvbmZpZy0+ZXh0Y29uKTsKIAlpZiAoIWV4dGNvbikKIAkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0Jb3RnX2Rldi0+ZXh0Y29uID0gZXh0Y29uOwogCiAJb3RnX2RldiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKm90Z19kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW90Z19kZXYpCkBAIC0xMTUsNiArMTE0LDcgQEAKIAlpZiAoSVNfRVJSKG90Z19kZXYtPmJhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihvdGdfZGV2LT5iYXNlKTsKIAorCW90Z19kZXYtPmV4dGNvbiA9IGV4dGNvbjsKIAlvdGdfZGV2LT5pZF9uYi5ub3RpZmllcl9jYWxsID0gb21hcF9vdGdfaWRfbm90aWZpZXI7CiAJb3RnX2Rldi0+dmJ1c19uYi5ub3RpZmllcl9jYWxsID0gb21hcF9vdGdfdmJ1c19ub3RpZmllcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2RfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYwppbmRleCBkZTRmOTdkLi44ZjdhNzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYwpAQCAtMTMxLDcgKzEzMSw4IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gdXNiaHNnX2dwcml2X3RvX2RldihncHJpdik7CiAJc3RydWN0IHVzYmhzX3ByaXYgKnByaXYgPSB1c2Joc2dfZ3ByaXZfdG9fcHJpdihncHJpdik7CiAKLQlkZXZfZGJnKGRldiwgInBpcGUgJWQgOiBxdWV1ZSBwb3BcbiIsIHVzYmhzX3BpcGVfbnVtYmVyKHBpcGUpKTsKKwlpZiAocGlwZSkKKwkJZGV2X2RiZyhkZXYsICJwaXBlICVkIDogcXVldWUgcG9wXG4iLCB1c2Joc19waXBlX251bWJlcihwaXBlKSk7CiAKIAl1cmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOwogCXNwaW5fdW5sb2NrKHVzYmhzX3ByaXZfdG9fbG9jayhwcml2KSk7CkBAIC02ODUsNyArNjg2LDEzIEBACiAJc3RydWN0IHVzYmhzZ19yZXF1ZXN0ICp1cmVxID0gdXNiaHNnX3JlcV90b191cmVxKHJlcSk7CiAJc3RydWN0IHVzYmhzX3BpcGUgKnBpcGUgPSB1c2Joc2dfdWVwX3RvX3BpcGUodWVwKTsKIAotCXVzYmhzX3BrdF9wb3AocGlwZSwgdXNiaHNnX3VyZXFfdG9fcGt0KHVyZXEpKTsKKwlpZiAocGlwZSkKKwkJdXNiaHNfcGt0X3BvcChwaXBlLCB1c2Joc2dfdXJlcV90b19wa3QodXJlcSkpOworCisJLyoKKwkgKiBUbyBkZXF1ZXVlIGEgcmVxdWVzdCwgdGhpcyBkcml2ZXIgc2hvdWxkIGNhbGwgdGhlIHVzYmhzZ19xdWV1ZV9wb3AoKQorCSAqIGV2ZW4gaWYgdGhlIHBpcGUgaXMgTlVMTC4KKwkgKi8KIAl1c2Joc2dfcXVldWVfcG9wKHVlcCwgdXJlcSwgLUVDT05OUkVTRVQpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggZWFjN2NjYS4uN2Q0ZjUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtMTMyLDcgKzEzMiw2IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYwKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYxKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTcwKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTgwKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTcxKSB9LCAvKiBJbmZpbml0eSBHUFMtTUlDLTEgUmFkaW8gTW9ub3Bob25lICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDAxKSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0JzY29wZTUwICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDAyKSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0J3YXZlMTIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IGY1MWE1ZDUuLmVjMWI4ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtNTMxLDcgKzUzMSw4IEBACiAJICogdGhyb3VnaC4gU2luY2UgdGhpcyBoYXMgYSByZWFzb25hYmx5IGhpZ2ggZmFpbHVyZSByYXRlLCB3ZSByZXRyeQogCSAqIHNldmVyYWwgdGltZXMuCiAJICovCi0Jd2hpbGUgKHJldHJpZXMtLSkgeworCXdoaWxlIChyZXRyaWVzKSB7CisJCXJldHJpZXMtLTsKIAkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAogCQkJCXVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIDB4MjIsIDB4MjEsCiAJCQkJMHgxLCAwLCBOVUxMLCAwLCAxMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDY4NWZlZjcuLmYyMjgwNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTE2MSw2ICsxNjEsNyBAQAogI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9IU1BBX0VNQkVEREVEX0hJR0hTUEVFRAkweDkwMDEKICNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRTM2MgkJMHg5MDEwCiAjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0UzNzEJCTB4OTAxMQorI2RlZmluZSBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNjIwTAkJMHg5MDIyCiAjZGVmaW5lIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0cyCQkweEEwMTAKICNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfTUM1NTEJCTB4QjAwMQogCkBAIC0zNTQsNiArMzU1LDcgQEAKIC8qIFRoaXMgaXMgdGhlIDRHIFhTIFN0aWNrIFcxNCBhLmsuYS4gTW9iaWxjb20gRGViaXRlbCBTdXJmLVN0aWNrICoKICAqIEl0IHNlZW1zIHRvIGNvbnRhaW4gYSBRdWFsY29tbSBRU0M2MjQwLzYyOTAgY2hpcHNldCAgICAgICAgICAgICovCiAjZGVmaW5lIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0CQkweDk2MDMKKyNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTAwCQkweDliMDEKIAogLyogaUJhbGwgMy41RyBjb25uZWN0IHdpcmVsZXNzIG1vZGVtICovCiAjZGVmaW5lIElCQUxMXzNfNUdfQ09OTkVDVAkJCTB4OTYwNQpAQCAtNTE5LDYgKzUyMSwxMSBAQAogCS5zZW5kc2V0dXAgPSBCSVQoMCkgfCBCSVQoMSksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbl9ibGFja2xpc3RfaW5mbyBmb3VyX2dfdzEwMF9ibGFja2xpc3QgPSB7CisJLnNlbmRzZXR1cCA9IEJJVCgxKSB8IEJJVCgyKSwKKwkucmVzZXJ2ZWQgPSBCSVQoMyksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbl9ibGFja2xpc3RfaW5mbyBhbGNhdGVsX3gyMDBfYmxhY2tsaXN0ID0gewogCS5zZW5kc2V0dXAgPSBCSVQoMCkgfCBCSVQoMSksCiAJLnJlc2VydmVkID0gQklUKDQpLApAQCAtMTA1Miw2ICsxMDU5LDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX01DNTUxLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfRTM2MiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX0UzNzEsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNjIwTCwgMHhmZiwgMHgwMCwgMHgwMCkgfSwKIAogCXsgVVNCX0RFVklDRShBTU9JX1ZFTkRPUl9JRCwgQU1PSV9QUk9EVUNUX0gwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoQU1PSV9WRU5ET1JfSUQsIEFNT0lfUFJPRFVDVF9IMDFBKSB9LApAQCAtMTY0MSw2ICsxNjQ5LDkgQEAKIAl7IFVTQl9ERVZJQ0UoTE9OR0NIRUVSX1ZFTkRPUl9JRCwgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTQpLAogICAJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZvdXJfZ193MTRfYmxhY2tsaXN0CiAgIAl9LAorCXsgVVNCX0RFVklDRShMT05HQ0hFRVJfVkVORE9SX0lELCBGT1VSX0dfU1lTVEVNU19QUk9EVUNUX1cxMDApLAorCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmb3VyX2dfdzEwMF9ibGFja2xpc3QKKwl9LAogCXsgVVNCX0RFVklDRV9JTlRFUkZBQ0VfQ0xBU1MoTE9OR0NIRUVSX1ZFTkRPUl9JRCwgU1BFRURVUF9QUk9EVUNUX1NVOTgwMCwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0UoTE9OR0NIRUVSX1ZFTkRPUl9JRCwgWk9PTV9QUk9EVUNUXzQ1OTcpIH0sCiAJeyBVU0JfREVWSUNFKExPTkdDSEVFUl9WRU5ET1JfSUQsIElCQUxMXzNfNUdfQ09OTkVDVCkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKaW5kZXggNTAyMmZjZi4uOTkxOWQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKQEAgLTIyLDYgKzIyLDggQEAKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiUXVhbGNvbW0gSW5jIgogI2RlZmluZSBEUklWRVJfREVTQyAiUXVhbGNvbW0gVVNCIFNlcmlhbCBkcml2ZXIiCiAKKyNkZWZpbmUgUVVFQ1RFTF9FQzIwX1BJRAkweDkyMTUKKwogLyogc3RhbmRhcmQgZGV2aWNlIGxheW91dHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCiBlbnVtIHFjc2VyaWFsX2xheW91dHMgewogCVFDU0VSSUFMX0cySyA9IDAsCS8qIEdvYmkgMjAwMCAqLwpAQCAtMTcxLDYgKzE3MywzOCBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CiAKK3N0YXRpYyBpbnQgaGFuZGxlX3F1ZWN0ZWxfZWMyMChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpZm51bSkKK3sKKwlpbnQgYWx0c2V0dGluZyA9IDA7CisKKwkvKgorCSAqIFF1ZWN0ZWwgRUMyMCBNaW5pIFBDSWUgTFRFIG1vZHVsZSBsYXlvdXQ6CisJICogMDogRE0vRElBRyAodXNlIGxpYnFjZG0gZnJvbSBNb2RlbU1hbmFnZXIgZm9yIGNvbW11bmljYXRpb24pCisJICogMTogTk1FQQorCSAqIDI6IEFULWNhcGFibGUgbW9kZW0gcG9ydAorCSAqIDM6IE1vZGVtIGludGVyZmFjZQorCSAqIDQ6IE5ESVMKKwkgKi8KKwlzd2l0Y2ggKGlmbnVtKSB7CisJY2FzZSAwOgorCQlkZXZfZGJnKGRldiwgIlF1ZWN0ZWwgRUMyMCBETS9ESUFHIGludGVyZmFjZSBmb3VuZFxuIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGV2X2RiZyhkZXYsICJRdWVjdGVsIEVDMjAgTk1FQSBHUFMgaW50ZXJmYWNlIGZvdW5kXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJZGV2X2RiZyhkZXYsICJRdWVjdGVsIEVDMjAgTW9kZW0gcG9ydCBmb3VuZFxuIik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJLyogRG9uJ3QgY2xhaW0gdGhlIFFNSS9uZXQgaW50ZXJmYWNlICovCisJCWFsdHNldHRpbmcgPSAtMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGFsdHNldHRpbmc7Cit9CisKIHN0YXRpYyBpbnQgcWNwcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZiA9IHNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKQEAgLTE4MSw2ICsyMTUsMTAgQEAKIAlpbnQgYWx0c2V0dGluZyA9IC0xOwogCWJvb2wgc2VuZHNldHVwID0gZmFsc2U7CiAKKwkvKiB3ZSBvbmx5IHN1cHBvcnQgdmVuZG9yIHNwZWNpZmljIGZ1bmN0aW9ucyAqLworCWlmIChpbnRmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMpCisJCWdvdG8gZG9uZTsKKwogCW5pbnRmID0gc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsKIAlkZXZfZGJnKGRldiwgIk51bSBJbnRlcmZhY2VzID0gJWRcbiIsIG5pbnRmKTsKIAlpZm51bSA9IGludGYtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKQEAgLTI0MCw2ICsyNzgsMTIgQEAKIAkJCWFsdHNldHRpbmcgPSAtMTsKIAkJYnJlYWs7CiAJY2FzZSBRQ1NFUklBTF9HMks6CisJCS8qIGhhbmRsZSBub24tc3RhbmRhcmQgbGF5b3V0cyAqLworCQlpZiAobmludGYgPT0gNSAmJiBpZC0+aWRQcm9kdWN0ID09IFFVRUNURUxfRUMyMF9QSUQpIHsKKwkJCWFsdHNldHRpbmcgPSBoYW5kbGVfcXVlY3RlbF9lYzIwKGRldiwgaWZudW0pOworCQkJZ290byBkb25lOworCQl9CisKIAkJLyoKIAkJICogR29iaSAySysgVVNCIGxheW91dDoKIAkJICogMDogUU1JL25ldApAQCAtMzAxLDI5ICszNDUsMzkgQEAKIAkJYnJlYWs7CiAJY2FzZSBRQ1NFUklBTF9IV0k6CiAJCS8qCi0JCSAqIEh1YXdlaSBsYXlvdXQ6Ci0JCSAqIDA6IEFULWNhcGFibGUgbW9kZW0gcG9ydAotCQkgKiAxOiBETS9ESUFHCi0JCSAqIDI6IEFULWNhcGFibGUgbW9kZW0gcG9ydAotCQkgKiAzOiBDQ0lELWNvbXBhdGlibGUgUENTQyBpbnRlcmZhY2UKLQkJICogNDogUU1JL25ldAotCQkgKiA1OiBOTUVBCisJCSAqIEh1YXdlaSBkZXZpY2VzIG1hcCBmdW5jdGlvbnMgYnkgc3ViY2xhc3MgKyBwcm90b2NvbAorCQkgKiBpbnN0ZWFkIG9mIGludGVyZmFjZSBudW1iZXJzLiBUaGUgcHJvdG9jb2wgaWRlbnRpZnkKKwkJICogYSBzcGVjaWZpYyBmdW5jdGlvbiwgd2hpbGUgdGhlIHN1YmNsYXNzIGluZGljYXRlIGEKKwkJICogc3BlY2lmaWMgZmlybXdhcmUgc291cmNlCisJCSAqCisJCSAqIFRoaXMgaXMgYSBibGFja2xpc3Qgb2YgZnVuY3Rpb25zIGtub3duIHRvIGJlCisJCSAqIG5vbi1zZXJpYWwuICBUaGUgcmVzdCBhcmUgYXNzdW1lZCB0byBiZSBzZXJpYWwgYW5kCisJCSAqIHdpbGwgYmUgaGFuZGxlZCBieSB0aGlzIGRyaXZlcgogCQkgKi8KLQkJc3dpdGNoIChpZm51bSkgewotCQljYXNlIDA6Ci0JCWNhc2UgMjoKLQkJCWRldl9kYmcoZGV2LCAiTW9kZW0gcG9ydCBmb3VuZFxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJZGV2X2RiZyhkZXYsICJETS9ESUFHIGludGVyZmFjZSBmb3VuZFxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSA1OgotCQkJZGV2X2RiZyhkZXYsICJOTUVBIEdQUyBpbnRlcmZhY2UgZm91bmRcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBkb24ndCBjbGFpbSBhbnkgdW5zdXBwb3J0ZWQgaW50ZXJmYWNlICovCisJCXN3aXRjaCAoaW50Zi0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpIHsKKwkJCS8qIFFNSSBjb21iaW5lZCAocW1pX3d3YW4pICovCisJCWNhc2UgMHgwNzoKKwkJY2FzZSAweDM3OgorCQljYXNlIDB4Njc6CisJCQkvKiBRTUkgZGF0YSAocW1pX3d3YW4pICovCisJCWNhc2UgMHgwODoKKwkJY2FzZSAweDM4OgorCQljYXNlIDB4Njg6CisJCQkvKiBRTUkgY29udHJvbCAocW1pX3d3YW4pICovCisJCWNhc2UgMHgwOToKKwkJY2FzZSAweDM5OgorCQljYXNlIDB4Njk6CisJCQkvKiBOQ00gbGlrZSAoaHVhd2VpX2NkY19uY20pICovCisJCWNhc2UgMHgxNjoKKwkJY2FzZSAweDQ2OgorCQljYXNlIDB4NzY6CiAJCQlhbHRzZXR0aW5nID0gLTE7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9kYmcoZGV2LCAiSHVhd2VpIHR5cGUgc2VyaWFsIHBvcnQgZm91bmQgKCUwMngvJTAyeC8lMDJ4KVxuIiwKKwkJCQlpbnRmLT5kZXNjLmJJbnRlcmZhY2VDbGFzcywKKwkJCQlpbnRmLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcywKKwkJCQlpbnRmLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCmluZGV4IGU5ZGE0MWQuLjI2OTRkZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwpAQCAtMTU5LDYgKzE1OSw3IEBACiAJeyBVU0JfREVWSUNFKEFCQk9UVF9WRU5ET1JfSUQsIEFCQk9UVF9TVEVSRU9fUExVR19JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQUJCT1RUX1ZFTkRPUl9JRCwgQUJCT1RUX1NUUklQX1BPUlRfSUQpIH0sCiAJeyBVU0JfREVWSUNFKFRJX1ZFTkRPUl9JRCwgRlJJMl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShIT05FWVdFTExfVkVORE9SX0lELCBIT05FWVdFTExfSEdJODBfUFJPRFVDVF9JRCkgfSwKIAl7IH0JLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtMTkxLDYgKzE5Miw3IEBACiAJeyBVU0JfREVWSUNFKEFCQk9UVF9WRU5ET1JfSUQsIEFCQk9UVF9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShBQkJPVFRfVkVORE9SX0lELCBBQkJPVFRfU1RSSVBfUE9SVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoVElfVkVORE9SX0lELCBGUkkyX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEhPTkVZV0VMTF9WRU5ET1JfSUQsIEhPTkVZV0VMTF9IR0k4MF9QUk9EVUNUX0lEKSB9LAogCXsgfQkvKiB0ZXJtaW5hdG9yICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuaAppbmRleCA0YTI0MjNlLi45OGYzNWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmgKQEAgLTU2LDYgKzU2LDEwIEBACiAjZGVmaW5lIEFCQk9UVF9QUk9EVUNUX0lECQlBQkJPVFRfU1RFUkVPX1BMVUdfSUQKICNkZWZpbmUgQUJCT1RUX1NUUklQX1BPUlRfSUQJCTB4MzQyMAogCisvKiBIb25leXdlbGwgdmVuZG9yIGFuZCBwcm9kdWN0IElEcyAqLworI2RlZmluZSBIT05FWVdFTExfVkVORE9SX0lECQkweDEwYWMKKyNkZWZpbmUgSE9ORVlXRUxMX0hHSTgwX1BST0RVQ1RfSUQJMHgwMTAyICAvKiBIb25leXdlbGwgSEdJODAgKi8KKwogLyogQ29tbWFuZHMgKi8KICNkZWZpbmUgVElfR0VUX1ZFUlNJT04JCQkweDAxCiAjZGVmaW5lIFRJX0dFVF9QT1JUX1NUQVRVUwkJMHgwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwtc2ltcGxlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC1zaW1wbGUuYwppbmRleCAzNjU4NjYyLi5hMjA0NzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC1zaW1wbGUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC1zaW1wbGUuYwpAQCAtNTMsNiArNTMsNyBAQAogCiAvKiBJbmZpbmVvbiBGbGFzaGxvYWRlciBkcml2ZXIgKi8KICNkZWZpbmUgRkxBU0hMT0FERVJfSURTKCkJCVwKKwl7IFVTQl9ERVZJQ0VfSU5URVJGQUNFX0NMQVNTKDB4MDU4YiwgMHgwMDQxLCBVU0JfQ0xBU1NfQ0RDX0RBVEEpIH0sIFwKIAl7IFVTQl9ERVZJQ0UoMHg4MDg3LCAweDA3MTYpIH0KIERFVklDRShmbGFzaGxvYWRlciwgRkxBU0hMT0FERVJfSURTKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdWFzLmMKaW5kZXggZTY5MTUxNi4uNWM2NmQzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91YXMuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Vhcy5jCkBAIC03OTYsNiArNzk2LDEwIEBACiAJaWYgKGRldmluZm8tPmZsYWdzICYgVVNfRkxfTk9fUkVQT1JUX09QQ09ERVMpCiAJCXNkZXYtPm5vX3JlcG9ydF9vcGNvZGVzID0gMTsKIAorCS8qIEEgZmV3IGJ1Z2d5IFVTQi1BVEEgYnJpZGdlcyBkb24ndCB1bmRlcnN0YW5kIEZVQSAqLworCWlmIChkZXZpbmZvLT5mbGFncyAmIFVTX0ZMX0JST0tFTl9GVUEpCisJCXNkZXYtPmJyb2tlbl9mdWEgPSAxOworCiAJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgZGV2aW5mby0+cWRlcHRoIC0gMik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCA2YjI0NzkxLi43ZmZlNDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTE5ODcsNyArMTk4Nyw3IEBACiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKIC8qIFJlcG9ydGVkIGJ5IE1pY2hhZWwgQsO8c2NoIDxtQGJ1ZXMuY2g+ICovCi1VTlVTVUFMX0RFViggIDB4MTUyZCwgMHgwNTY3LCAweDAxMTQsIDB4MDExNCwKK1VOVVNVQUxfREVWKCAgMHgxNTJkLCAweDA1NjcsIDB4MDExNCwgMHgwMTE2LAogCQkiSk1pY3JvbiIsCiAJCSJVU0IgdG8gQVRBL0FUQVBJIEJyaWRnZSIsCiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdWFzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdWFzLmgKaW5kZXggYzg1ZWE1My4uY2NjMTEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3Vhcy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91YXMuaApAQCAtMTMyLDcgKzEzMiw3IEBACiAJCSJKTWljcm9uIiwKIAkJIkpNUzU2NyIsCiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCi0JCVVTX0ZMX05PX1JFUE9SVF9PUENPREVTKSwKKwkJVVNfRkxfQlJPS0VOX0ZVQSB8IFVTX0ZMX05PX1JFUE9SVF9PUENPREVTKSwKIAogLyogUmVwb3J0ZWQtYnk6IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+ICovCiBVTlVTVUFMX0RFVigweDIxMDksIDB4MDcxMSwgMHgwMDAwLCAweDk5OTksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vS2NvbmZpZyBiL2RyaXZlcnMvdmZpby9LY29uZmlnCmluZGV4IGRhNmUyY2UuLjg1MGQ4NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmZpby9LY29uZmlnCkBAIC0zMSwyMSArMzEsNiBAQAogCiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgogCi1tZW51Y29uZmlnIFZGSU9fTk9JT01NVQotCWJvb2wgIlZGSU8gTm8tSU9NTVUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZGSU8KLQloZWxwCi0JICBWRklPIGlzIGJ1aWx0IG9uIHRoZSBhYmlsaXR5IHRvIGlzb2xhdGUgZGV2aWNlcyB1c2luZyB0aGUgSU9NTVUuCi0JICBPbmx5IHdpdGggYW4gSU9NTVUgY2FuIHVzZXJzcGFjZSBhY2Nlc3MgdG8gRE1BIGNhcGFibGUgZGV2aWNlcyBiZQotCSAgY29uc2lkZXJlZCBzZWN1cmUuICBWRklPIE5vLUlPTU1VIG1vZGUgZW5hYmxlcyBJT01NVSBncm91cHMgZm9yCi0JICBkZXZpY2VzIHdpdGhvdXQgSU9NTVUgYmFja2luZyBmb3IgdGhlIHB1cnBvc2Ugb2YgcmUtdXNpbmcgdGhlIFZGSU8KLQkgIGluZnJhc3RydWN0dXJlIGluIGEgbm9uLXNlY3VyZSBtb2RlLiAgVXNlIG9mIHRoaXMgbW9kZSB3aWxsIHJlc3VsdAotCSAgaW4gYW4gdW5zdXBwb3J0YWJsZSBrZXJuZWwgYW5kIHdpbGwgdGhlcmVmb3JlIHRhaW50IHRoZSBrZXJuZWwuCi0JICBEZXZpY2UgYXNzaWdubWVudCB0byB2aXJ0dWFsIG1hY2hpbmVzIGlzIGFsc28gbm90IHBvc3NpYmxlIHdpdGgKLQkgIHRoaXMgbW9kZSBzaW5jZSB0aGVyZSBpcyBubyBJT01NVSB0byBwcm92aWRlIERNQSB0cmFuc2xhdGlvbi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KLQogc291cmNlICJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvdmZpby9wbGF0Zm9ybS9LY29uZmlnIgogc291cmNlICJ2aXJ0L2xpYi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jCmluZGV4IDMyYjg4YmQuLjU2YmY2ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYworKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKQEAgLTk0MCwxMyArOTQwLDEzIEBACiAJaWYgKHBkZXYtPmhkcl90eXBlICE9IFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZ3JvdXAgPSB2ZmlvX2lvbW11X2dyb3VwX2dldCgmcGRldi0+ZGV2KTsKKwlncm91cCA9IGlvbW11X2dyb3VwX2dldCgmcGRldi0+ZGV2KTsKIAlpZiAoIWdyb3VwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZkZXYgPSBremFsbG9jKHNpemVvZigqdmRldiksIEdGUF9LRVJORUwpOwogCWlmICghdmRldikgewotCQl2ZmlvX2lvbW11X2dyb3VwX3B1dChncm91cCwgJnBkZXYtPmRldik7CisJCWlvbW11X2dyb3VwX3B1dChncm91cCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtOTU3LDcgKzk1Nyw3IEBACiAKIAlyZXQgPSB2ZmlvX2FkZF9ncm91cF9kZXYoJnBkZXYtPmRldiwgJnZmaW9fcGNpX29wcywgdmRldik7CiAJaWYgKHJldCkgewotCQl2ZmlvX2lvbW11X2dyb3VwX3B1dChncm91cCwgJnBkZXYtPmRldik7CisJCWlvbW11X2dyb3VwX3B1dChncm91cCk7CiAJCWtmcmVlKHZkZXYpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTk5Myw3ICs5OTMsNyBAQAogCWlmICghdmRldikKIAkJcmV0dXJuOwogCi0JdmZpb19pb21tdV9ncm91cF9wdXQocGRldi0+ZGV2LmlvbW11X2dyb3VwLCAmcGRldi0+ZGV2KTsKKwlpb21tdV9ncm91cF9wdXQocGRldi0+ZGV2LmlvbW11X2dyb3VwKTsKIAlrZnJlZSh2ZGV2KTsKIAogCWlmICh2ZmlvX3BjaV9pc192Z2EocGRldikpIHsKQEAgLTEwMzUsNyArMTAzNSw3IEBACiAJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB2ZmlvX2Vycl9oYW5kbGVycyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIHZmaW9fZXJyX2hhbmRsZXJzID0gewogCS5lcnJvcl9kZXRlY3RlZCA9IHZmaW9fcGNpX2Flcl9lcnJfZGV0ZWN0ZWQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vdmZpb19wbGF0Zm9ybS5jIGIvZHJpdmVycy92ZmlvL3BsYXRmb3JtL3ZmaW9fcGxhdGZvcm0uYwppbmRleCBmMTYyNWRjLi5iMWNjM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vdmZpb19wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvdmZpby9wbGF0Zm9ybS92ZmlvX3BsYXRmb3JtLmMKQEAgLTkyLDcgKzkyLDYgQEAKIAkucmVtb3ZlCQk9IHZmaW9fcGxhdGZvcm1fcmVtb3ZlLAogCS5kcml2ZXIJPSB7CiAJCS5uYW1lCT0gInZmaW8tcGxhdGZvcm0iLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BsYXRmb3JtL3ZmaW9fcGxhdGZvcm1fY29tbW9uLmMgYi9kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vdmZpb19wbGF0Zm9ybV9jb21tb24uYwppbmRleCBhMWM1MGQ2Li40MThjZGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vdmZpb19wbGF0Zm9ybV9jb21tb24uYworKysgYi9kcml2ZXJzL3ZmaW8vcGxhdGZvcm0vdmZpb19wbGF0Zm9ybV9jb21tb24uYwpAQCAtNTEsMTMgKzUxLDEwIEBACiAKIHN0YXRpYyB2b2lkIHZmaW9fcGxhdGZvcm1fZ2V0X3Jlc2V0KHN0cnVjdCB2ZmlvX3BsYXRmb3JtX2RldmljZSAqdmRldikKIHsKLQljaGFyIG1vZG5hbWVbMjU2XTsKLQogCXZkZXYtPnJlc2V0ID0gdmZpb19wbGF0Zm9ybV9sb29rdXBfcmVzZXQodmRldi0+Y29tcGF0LAogCQkJCQkJJnZkZXYtPnJlc2V0X21vZHVsZSk7CiAJaWYgKCF2ZGV2LT5yZXNldCkgewotCQlzbnByaW50Zihtb2RuYW1lLCAyNTYsICJ2ZmlvLXJlc2V0OiVzIiwgdmRldi0+Y29tcGF0KTsKLQkJcmVxdWVzdF9tb2R1bGUobW9kbmFtZSk7CisJCXJlcXVlc3RfbW9kdWxlKCJ2ZmlvLXJlc2V0OiVzIiwgdmRldi0+Y29tcGF0KTsKIAkJdmRldi0+cmVzZXQgPSB2ZmlvX3BsYXRmb3JtX2xvb2t1cF9yZXNldCh2ZGV2LT5jb21wYXQsCiAJCQkJCQkJICZ2ZGV2LT5yZXNldF9tb2R1bGUpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby92ZmlvLmMgYi9kcml2ZXJzL3ZmaW8vdmZpby5jCmluZGV4IGRlNjMyZGEuLjYwNzBiNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby92ZmlvLmMKKysrIGIvZHJpdmVycy92ZmlvL3ZmaW8uYwpAQCAtNjIsNyArNjIsNiBAQAogCXN0cnVjdCByd19zZW1hcGhvcmUJCWdyb3VwX2xvY2s7CiAJc3RydWN0IHZmaW9faW9tbXVfZHJpdmVyCSppb21tdV9kcml2ZXI7CiAJdm9pZAkJCQkqaW9tbXVfZGF0YTsKLQlib29sCQkJCW5vaW9tbXU7CiB9OwogCiBzdHJ1Y3QgdmZpb191bmJvdW5kX2RldiB7CkBAIC04NSw3ICs4NCw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAkJdW5ib3VuZF9saXN0OwogCXN0cnVjdCBtdXRleAkJCXVuYm91bmRfbG9jazsKIAlhdG9taWNfdAkJCW9wZW5lZDsKLQlib29sCQkJCW5vaW9tbXU7CiB9OwogCiBzdHJ1Y3QgdmZpb19kZXZpY2UgewpAQCAtOTcsMTQ3ICs5NSw2IEBACiAJdm9pZAkJCQkqZGV2aWNlX2RhdGE7CiB9OwogCi0jaWZkZWYgQ09ORklHX1ZGSU9fTk9JT01NVQotc3RhdGljIGJvb2wgbm9pb21tdSBfX3JlYWRfbW9zdGx5OwotbW9kdWxlX3BhcmFtX25hbWVkKGVuYWJsZV91bnNhZmVfbm9pb21tdV9zdXBwb3J0LAotCQkgICBub2lvbW11LCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV91bnNhZmVfbm9pb21tdV9tb2RlLCAiRW5hYmxlIFVOU0FGRSwgbm8tSU9NTVUgbW9kZS4gIFRoaXMgbW9kZSBwcm92aWRlcyBubyBkZXZpY2UgaXNvbGF0aW9uLCBubyBETUEgdHJhbnNsYXRpb24sIG5vIGhvc3Qga2VybmVsIHByb3RlY3Rpb24sIGNhbm5vdCBiZSB1c2VkIGZvciBkZXZpY2UgYXNzaWdubWVudCB0byB2aXJ0dWFsIG1hY2hpbmVzLCByZXF1aXJlcyBSQVdJTyBwZXJtaXNzaW9ucywgYW5kIHdpbGwgdGFpbnQgdGhlIGtlcm5lbC4gIElmIHlvdSBkbyBub3Qga25vdyB3aGF0IHRoaXMgaXMgZm9yLCBzdGVwIGF3YXkuIChkZWZhdWx0OiBmYWxzZSkiKTsKLSNlbmRpZgotCi0vKgotICogdmZpb19pb21tdV9ncm91cF97Z2V0LHB1dH0gYXJlIG9ubHkgaW50ZW5kZWQgZm9yIFZGSU8gYnVzIGRyaXZlciBwcm9iZQotICogYW5kIHJlbW92ZSBmdW5jdGlvbnMsIGFueSB1c2UgY2FzZXMgb3RoZXIgdGhhbiBhY3F1aXJpbmcgdGhlIGZpcnN0Ci0gKiByZWZlcmVuY2UgZm9yIHRoZSBwdXJwb3NlIG9mIGNhbGxpbmcgdmZpb19hZGRfZ3JvdXBfZGV2KCkgb3IgcmVtb3ZpbmcKLSAqIHRoYXQgc3ltbWV0cmljIHJlZmVyZW5jZSBhZnRlciB2ZmlvX2RlbF9ncm91cF9kZXYoKSBzaG91bGQgdXNlIHRoZSByYXcKLSAqIGlvbW11X2dyb3VwX3tnZXQscHV0fSBmdW5jdGlvbnMuICBJbiBwYXJ0aWN1bGFyLCB2ZmlvX2lvbW11X2dyb3VwX3B1dCgpCi0gKiByZW1vdmVzIHRoZSBkZXZpY2UgZnJvbSB0aGUgZHVtbXkgZ3JvdXAgYW5kIGNhbm5vdCBiZSBuZXN0ZWQuCi0gKi8KLXN0cnVjdCBpb21tdV9ncm91cCAqdmZpb19pb21tdV9ncm91cF9nZXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBpb21tdV9ncm91cCAqZ3JvdXA7Ci0JaW50IF9fbWF5YmVfdW51c2VkIHJldDsKLQotCWdyb3VwID0gaW9tbXVfZ3JvdXBfZ2V0KGRldik7Ci0KLSNpZmRlZiBDT05GSUdfVkZJT19OT0lPTU1VCi0JLyoKLQkgKiBXaXRoIG5vaW9tbXUgZW5hYmxlZCwgYW4gSU9NTVUgZ3JvdXAgd2lsbCBiZSBjcmVhdGVkIGZvciBhIGRldmljZQotCSAqIHRoYXQgZG9lc24ndCBhbHJlYWR5IGhhdmUgb25lIGFuZCBkb2Vzbid0IGhhdmUgYW4gaW9tbXVfb3BzIG9uIHRoZWlyCi0JICogYnVzLiAgV2UgdXNlIGlvbW11X3ByZXNlbnQoKSBhZ2FpbiBpbiB0aGUgbWFpbiBjb2RlIHRvIGRldGVjdCB0aGVzZQotCSAqIGZha2UgZ3JvdXBzLgotCSAqLwotCWlmIChncm91cCB8fCAhbm9pb21tdSB8fCBpb21tdV9wcmVzZW50KGRldi0+YnVzKSkKLQkJcmV0dXJuIGdyb3VwOwotCi0JZ3JvdXAgPSBpb21tdV9ncm91cF9hbGxvYygpOwotCWlmIChJU19FUlIoZ3JvdXApKQotCQlyZXR1cm4gTlVMTDsKLQotCWlvbW11X2dyb3VwX3NldF9uYW1lKGdyb3VwLCAidmZpby1ub2lvbW11Iik7Ci0JcmV0ID0gaW9tbXVfZ3JvdXBfYWRkX2RldmljZShncm91cCwgZGV2KTsKLQlpb21tdV9ncm91cF9wdXQoZ3JvdXApOwotCWlmIChyZXQpCi0JCXJldHVybiBOVUxMOwotCi0JLyoKLQkgKiBXaGVyZSB0byB0YWludD8gIEF0IHRoaXMgcG9pbnQgd2UndmUgYWRkZWQgYW4gSU9NTVUgZ3JvdXAgZm9yIGEKLQkgKiBkZXZpY2UgdGhhdCBpcyBub3QgYmFja2VkIGJ5IGlvbW11X29wcywgdGhlcmVmb3JlIGFueSBpb21tdV8KLQkgKiBjYWxsYmFjayB1c2luZyBpb21tdV9vcHMgY2FuIGxlZ2l0aW1hdGVseSBPb3BzLiAgU28sIHdoaWxlIHdlIG1heQotCSAqIGJlIGFib3V0IHRvIGdpdmUgYSBETUEgY2FwYWJsZSBkZXZpY2UgdG8gYSB1c2VyIHdpdGhvdXQgSU9NTVUKLQkgKiBwcm90ZWN0aW9uLCB3aGljaCBpcyBjbGVhcmx5IHRhaW50LXdvcnRoeSwgbGV0J3MgZ28gYWhlYWQgYW5kIGRvCi0JICogaXQgaGVyZS4KLQkgKi8KLQlhZGRfdGFpbnQoVEFJTlRfVVNFUiwgTE9DS0RFUF9TVElMTF9PSyk7Ci0JZGV2X3dhcm4oZGV2LCAiQWRkaW5nIGtlcm5lbCB0YWludCBmb3IgdmZpby1ub2lvbW11IGdyb3VwIG9uIGRldmljZVxuIik7Ci0jZW5kaWYKLQotCXJldHVybiBncm91cDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9faW9tbXVfZ3JvdXBfZ2V0KTsKLQotdm9pZCB2ZmlvX2lvbW11X2dyb3VwX3B1dChzdHJ1Y3QgaW9tbXVfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0jaWZkZWYgQ09ORklHX1ZGSU9fTk9JT01NVQotCWlmICghaW9tbXVfcHJlc2VudChkZXYtPmJ1cykpCi0JCWlvbW11X2dyb3VwX3JlbW92ZV9kZXZpY2UoZGV2KTsKLSNlbmRpZgotCi0JaW9tbXVfZ3JvdXBfcHV0KGdyb3VwKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHZmaW9faW9tbXVfZ3JvdXBfcHV0KTsKLQotI2lmZGVmIENPTkZJR19WRklPX05PSU9NTVUKLXN0YXRpYyB2b2lkICp2ZmlvX25vaW9tbXVfb3Blbih1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpZiAoYXJnICE9IFZGSU9fTk9JT01NVV9JT01NVSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQotCQlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHZmaW9fbm9pb21tdV9yZWxlYXNlKHZvaWQgKmlvbW11X2RhdGEpCi17Ci19Ci0KLXN0YXRpYyBsb25nIHZmaW9fbm9pb21tdV9pb2N0bCh2b2lkICppb21tdV9kYXRhLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWlmIChjbWQgPT0gVkZJT19DSEVDS19FWFRFTlNJT04pCi0JCXJldHVybiBhcmcgPT0gVkZJT19OT0lPTU1VX0lPTU1VID8gMSA6IDA7Ci0KLQlyZXR1cm4gLUVOT1RUWTsKLX0KLQotc3RhdGljIGludCB2ZmlvX2lvbW11X3ByZXNlbnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp1bnVzZWQpCi17Ci0JcmV0dXJuIGlvbW11X3ByZXNlbnQoZGV2LT5idXMpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmZpb19ub2lvbW11X2F0dGFjaF9ncm91cCh2b2lkICppb21tdV9kYXRhLAotCQkJCSAgICAgc3RydWN0IGlvbW11X2dyb3VwICppb21tdV9ncm91cCkKLXsKLQlyZXR1cm4gaW9tbXVfZ3JvdXBfZm9yX2VhY2hfZGV2KGlvbW11X2dyb3VwLCBOVUxMLAotCQkJCQl2ZmlvX2lvbW11X3ByZXNlbnQpID8gLUVJTlZBTCA6IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHZmaW9fbm9pb21tdV9kZXRhY2hfZ3JvdXAodm9pZCAqaW9tbXVfZGF0YSwKLQkJCQkgICAgICBzdHJ1Y3QgaW9tbXVfZ3JvdXAgKmlvbW11X2dyb3VwKQotewotfQotCi1zdGF0aWMgc3RydWN0IHZmaW9faW9tbXVfZHJpdmVyX29wcyB2ZmlvX25vaW9tbXVfb3BzID0gewotCS5uYW1lID0gInZmaW8tbm9pb21tdSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSB2ZmlvX25vaW9tbXVfb3BlbiwKLQkucmVsZWFzZSA9IHZmaW9fbm9pb21tdV9yZWxlYXNlLAotCS5pb2N0bCA9IHZmaW9fbm9pb21tdV9pb2N0bCwKLQkuYXR0YWNoX2dyb3VwID0gdmZpb19ub2lvbW11X2F0dGFjaF9ncm91cCwKLQkuZGV0YWNoX2dyb3VwID0gdmZpb19ub2lvbW11X2RldGFjaF9ncm91cCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdmZpb19pb21tdV9kcml2ZXIgdmZpb19ub2lvbW11X2RyaXZlciA9IHsKLQkub3BzID0gJnZmaW9fbm9pb21tdV9vcHMsCi19OwotCi0vKgotICogV3JhcCBJT01NVSBkcml2ZXJzLCB0aGUgbm9pb21tdSBkcml2ZXIgaXMgdGhlIG9uZSBhbmQgb25seSBkcml2ZXIgZm9yCi0gKiBub2lvbW11IGdyb3VwcyAoYW5kIHRodXMgY29udGFpbmVycykgYW5kIG5vdCBhdmFpbGFibGUgZm9yIG5vcm1hbCBncm91cHMuCi0gKi8KLSNkZWZpbmUgdmZpb19mb3JfZWFjaF9pb21tdV9kcml2ZXIoY29uLCBwb3MpCQkJCVwKLQlmb3IgKHBvcyA9IGNvbi0+bm9pb21tdSA/ICZ2ZmlvX25vaW9tbXVfZHJpdmVyIDoJCVwKLQkgICAgIGxpc3RfZmlyc3RfZW50cnkoJnZmaW8uaW9tbXVfZHJpdmVyc19saXN0LAkJCVwKLQkJCSAgICAgIHN0cnVjdCB2ZmlvX2lvbW11X2RyaXZlciwgdmZpb19uZXh0KTsJXAotCSAgICAgKGNvbi0+bm9pb21tdSA/IHBvcyAhPSBOVUxMIDoJCQkJXAotCQkJJnBvcy0+dmZpb19uZXh0ICE9ICZ2ZmlvLmlvbW11X2RyaXZlcnNfbGlzdCk7CVwKLQkgICAgICBwb3MgPSBjb24tPm5vaW9tbXUgPyBOVUxMIDogbGlzdF9uZXh0X2VudHJ5KHBvcywgdmZpb19uZXh0KSkKLSNlbHNlCi0jZGVmaW5lIHZmaW9fZm9yX2VhY2hfaW9tbXVfZHJpdmVyKGNvbiwgcG9zKQkJCQlcCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ2ZmlvLmlvbW11X2RyaXZlcnNfbGlzdCwgdmZpb19uZXh0KQotI2VuZGlmCi0KLQogLyoqCiAgKiBJT01NVSBkcml2ZXIgcmVnaXN0cmF0aW9uCiAgKi8KQEAgLTM0Miw4ICsxOTksNyBAQAogLyoqCiAgKiBHcm91cCBvYmplY3RzIC0gY3JlYXRlLCByZWxlYXNlLCBnZXQsIHB1dCwgc2VhcmNoCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdmZpb19ncm91cCAqdmZpb19jcmVhdGVfZ3JvdXAoc3RydWN0IGlvbW11X2dyb3VwICppb21tdV9ncm91cCwKLQkJCQkJICAgIGJvb2wgbm9pb21tdSkKK3N0YXRpYyBzdHJ1Y3QgdmZpb19ncm91cCAqdmZpb19jcmVhdGVfZ3JvdXAoc3RydWN0IGlvbW11X2dyb3VwICppb21tdV9ncm91cCkKIHsKIAlzdHJ1Y3QgdmZpb19ncm91cCAqZ3JvdXAsICp0bXA7CiAJc3RydWN0IGRldmljZSAqZGV2OwpAQCAtMzYxLDcgKzIxNyw2IEBACiAJYXRvbWljX3NldCgmZ3JvdXAtPmNvbnRhaW5lcl91c2VycywgMCk7CiAJYXRvbWljX3NldCgmZ3JvdXAtPm9wZW5lZCwgMCk7CiAJZ3JvdXAtPmlvbW11X2dyb3VwID0gaW9tbXVfZ3JvdXA7Ci0JZ3JvdXAtPm5vaW9tbXUgPSBub2lvbW11OwogCiAJZ3JvdXAtPm5iLm5vdGlmaWVyX2NhbGwgPSB2ZmlvX2lvbW11X2dyb3VwX25vdGlmaWVyOwogCkBAIC0zOTcsOCArMjUyLDcgQEAKIAogCWRldiA9IGRldmljZV9jcmVhdGUodmZpby5jbGFzcywgTlVMTCwKIAkJCSAgICBNS0RFVihNQUpPUih2ZmlvLmdyb3VwX2RldnQpLCBtaW5vciksCi0JCQkgICAgZ3JvdXAsICIlcyVkIiwgbm9pb21tdSA/ICJub2lvbW11LSIgOiAiIiwKLQkJCSAgICBpb21tdV9ncm91cF9pZChpb21tdV9ncm91cCkpOworCQkJICAgIGdyb3VwLCAiJWQiLCBpb21tdV9ncm91cF9pZChpb21tdV9ncm91cCkpOwogCWlmIChJU19FUlIoZGV2KSkgewogCQl2ZmlvX2ZyZWVfZ3JvdXBfbWlub3IobWlub3IpOwogCQl2ZmlvX2dyb3VwX3VubG9ja19hbmRfZnJlZShncm91cCk7CkBAIC02ODIsNyArNTM2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBUT0RPIFByZXZlbnQgZGV2aWNlIGF1dG8gcHJvYmluZyAqLwotCVdBUk4oIkRldmljZSAlcyBhZGRlZCB0byBsaXZlIGdyb3VwICVkIVxuIiwgZGV2X25hbWUoZGV2KSwKKwlXQVJOKDEsICJEZXZpY2UgJXMgYWRkZWQgdG8gbGl2ZSBncm91cCAlZCFcbiIsIGRldl9uYW1lKGRldiksCiAJICAgICBpb21tdV9ncm91cF9pZChncm91cC0+aW9tbXVfZ3JvdXApKTsKIAogCXJldHVybiAwOwpAQCAtNzg2LDggKzY0MCw3IEBACiAKIAlncm91cCA9IHZmaW9fZ3JvdXBfZ2V0X2Zyb21faW9tbXUoaW9tbXVfZ3JvdXApOwogCWlmICghZ3JvdXApIHsKLQkJZ3JvdXAgPSB2ZmlvX2NyZWF0ZV9ncm91cChpb21tdV9ncm91cCwKLQkJCQkJICAhaW9tbXVfcHJlc2VudChkZXYtPmJ1cykpOworCQlncm91cCA9IHZmaW9fY3JlYXRlX2dyb3VwKGlvbW11X2dyb3VwKTsKIAkJaWYgKElTX0VSUihncm91cCkpIHsKIAkJCWlvbW11X2dyb3VwX3B1dChpb21tdV9ncm91cCk7CiAJCQlyZXR1cm4gUFRSX0VSUihncm91cCk7CkBAIC05OTksNyArODUyLDggQEAKIAkJICovCiAJCWlmICghZHJpdmVyKSB7CiAJCQltdXRleF9sb2NrKCZ2ZmlvLmlvbW11X2RyaXZlcnNfbG9jayk7Ci0JCQl2ZmlvX2Zvcl9lYWNoX2lvbW11X2RyaXZlcihjb250YWluZXIsIGRyaXZlcikgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcml2ZXIsICZ2ZmlvLmlvbW11X2RyaXZlcnNfbGlzdCwKKwkJCQkJICAgIHZmaW9fbmV4dCkgewogCQkJCWlmICghdHJ5X21vZHVsZV9nZXQoZHJpdmVyLT5vcHMtPm93bmVyKSkKIAkJCQkJY29udGludWU7CiAKQEAgLTEwNjgsNyArOTIyLDcgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZ2ZmlvLmlvbW11X2RyaXZlcnNfbG9jayk7Ci0JdmZpb19mb3JfZWFjaF9pb21tdV9kcml2ZXIoY29udGFpbmVyLCBkcml2ZXIpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRyaXZlciwgJnZmaW8uaW9tbXVfZHJpdmVyc19saXN0LCB2ZmlvX25leHQpIHsKIAkJdm9pZCAqZGF0YTsKIAogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRyaXZlci0+b3BzLT5vd25lcikpCkBAIC0xMzMzLDkgKzExODcsNiBAQAogCWlmIChhdG9taWNfcmVhZCgmZ3JvdXAtPmNvbnRhaW5lcl91c2VycykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGdyb3VwLT5ub2lvbW11ICYmICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQotCQlyZXR1cm4gLUVQRVJNOwotCiAJZiA9IGZkZ2V0KGNvbnRhaW5lcl9mZCk7CiAJaWYgKCFmLmZpbGUpCiAJCXJldHVybiAtRUJBREY7CkBAIC0xMzUxLDEzICsxMjAyLDYgQEAKIAogCWRvd25fd3JpdGUoJmNvbnRhaW5lci0+Z3JvdXBfbG9jayk7CiAKLQkvKiBSZWFsIGdyb3VwcyBhbmQgZmFrZSBncm91cHMgY2Fubm90IG1peCAqLwotCWlmICghbGlzdF9lbXB0eSgmY29udGFpbmVyLT5ncm91cF9saXN0KSAmJgotCSAgICBjb250YWluZXItPm5vaW9tbXUgIT0gZ3JvdXAtPm5vaW9tbXUpIHsKLQkJcmV0ID0gLUVQRVJNOwotCQlnb3RvIHVubG9ja19vdXQ7Ci0JfQotCiAJZHJpdmVyID0gY29udGFpbmVyLT5pb21tdV9kcml2ZXI7CiAJaWYgKGRyaXZlcikgewogCQlyZXQgPSBkcml2ZXItPm9wcy0+YXR0YWNoX2dyb3VwKGNvbnRhaW5lci0+aW9tbXVfZGF0YSwKQEAgLTEzNjcsNyArMTIxMSw2IEBACiAJfQogCiAJZ3JvdXAtPmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKLQljb250YWluZXItPm5vaW9tbXUgPSBncm91cC0+bm9pb21tdTsKIAlsaXN0X2FkZCgmZ3JvdXAtPmNvbnRhaW5lcl9uZXh0LCAmY29udGFpbmVyLT5ncm91cF9saXN0KTsKIAogCS8qIEdldCBhIHJlZmVyZW5jZSBvbiB0aGUgY29udGFpbmVyIGFuZCBtYXJrIGEgdXNlciB3aXRoaW4gdGhlIGdyb3VwICovCkBAIC0xMzk4LDkgKzEyNDEsNiBAQAogCSAgICAhZ3JvdXAtPmNvbnRhaW5lci0+aW9tbXVfZHJpdmVyIHx8ICF2ZmlvX2dyb3VwX3ZpYWJsZShncm91cCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGdyb3VwLT5ub2lvbW11ICYmICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQotCQlyZXR1cm4gLUVQRVJNOwotCiAJZGV2aWNlID0gdmZpb19kZXZpY2VfZ2V0X2Zyb21fbmFtZShncm91cCwgYnVmKTsKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNDQzLDEwICsxMjgzLDYgQEAKIAogCWZkX2luc3RhbGwocmV0LCBmaWxlcCk7CiAKLQlpZiAoZ3JvdXAtPm5vaW9tbXUpCi0JCWRldl93YXJuKGRldmljZS0+ZGV2LCAidmZpby1ub2lvbW11IGRldmljZSBvcGVuZWQgYnkgdXNlciAiCi0JCQkgIiglczolZClcbiIsIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1MzUsMTEgKzEzNzEsNiBAQAogCWlmICghZ3JvdXApCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGdyb3VwLT5ub2lvbW11ICYmICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKSB7Ci0JCXZmaW9fZ3JvdXBfcHV0KGdyb3VwKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KIAkvKiBEbyB3ZSBuZWVkIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgZ3JvdXAgb3Blbj8gIFNlZW1zIG5vdC4gKi8KIAlvcGVuZWQgPSBhdG9taWNfY21weGNoZygmZ3JvdXAtPm9wZW5lZCwgMCwgMSk7CiAJaWYgKG9wZW5lZCkgewpAQCAtMTcwMiwxMSArMTUzMyw2IEBACiAJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZncm91cC0+Y29udGFpbmVyX3VzZXJzKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlpZiAoZ3JvdXAtPm5vaW9tbXUpIHsKLQkJYXRvbWljX2RlYygmZ3JvdXAtPmNvbnRhaW5lcl91c2Vycyk7Ci0JCXJldHVybiBFUlJfUFRSKC1FUEVSTSk7Ci0JfQotCiAJaWYgKCFncm91cC0+Y29udGFpbmVyLT5pb21tdV9kcml2ZXIgfHwKIAkJCSF2ZmlvX2dyb3VwX3ZpYWJsZShncm91cCkpIHsKIAkJYXRvbWljX2RlYygmZ3JvdXAtPmNvbnRhaW5lcl91c2Vycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKaW5kZXggZWVjMmYxMS4uYWQyMTQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtODE5LDcgKzgxOSw3IEBACiAJCUJVSUxEX0JVR19PTihfX2FsaWdub2ZfXyAqdnEtPnVzZWQgPiBWUklOR19VU0VEX0FMSUdOX1NJWkUpOwogCQlpZiAoKGEuYXZhaWxfdXNlcl9hZGRyICYgKFZSSU5HX0FWQUlMX0FMSUdOX1NJWkUgLSAxKSkgfHwKIAkJICAgIChhLnVzZWRfdXNlcl9hZGRyICYgKFZSSU5HX1VTRURfQUxJR05fU0laRSAtIDEpKSB8fAotCQkgICAgKGEubG9nX2d1ZXN0X2FkZHIgJiAoc2l6ZW9mKHU2NCkgLSAxKSkpIHsKKwkJICAgIChhLmxvZ19ndWVzdF9hZGRyICYgKFZSSU5HX1VTRURfQUxJR05fU0laRSAtIDEpKSkgewogCQkJciA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQpAQCAtMTM2OSw3ICsxMzY5LDcgQEAKIAkvKiBHcmFiIHRoZSBuZXh0IGRlc2NyaXB0b3IgbnVtYmVyIHRoZXkncmUgYWR2ZXJ0aXNpbmcsIGFuZCBpbmNyZW1lbnQKIAkgKiB0aGUgaW5kZXggd2UndmUgc2Vlbi4gKi8KIAlpZiAodW5saWtlbHkoX19nZXRfdXNlcihyaW5nX2hlYWQsCi0JCQkJJnZxLT5hdmFpbC0+cmluZ1tsYXN0X2F2YWlsX2lkeCAlIHZxLT5udW1dKSkpIHsKKwkJCQkmdnEtPmF2YWlsLT5yaW5nW2xhc3RfYXZhaWxfaWR4ICYgKHZxLT5udW0gLSAxKV0pKSkgewogCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gcmVhZCBoZWFkOiBpZHggJWQgYWRkcmVzcyAlcFxuIiwKIAkJICAgICAgIGxhc3RfYXZhaWxfaWR4LAogCQkgICAgICAgJnZxLT5hdmFpbC0+cmluZ1tsYXN0X2F2YWlsX2lkeCAlIHZxLT5udW1dKTsKQEAgLTE0ODksNyArMTQ4OSw3IEBACiAJdTE2IG9sZCwgbmV3OwogCWludCBzdGFydDsKIAotCXN0YXJ0ID0gdnEtPmxhc3RfdXNlZF9pZHggJSB2cS0+bnVtOworCXN0YXJ0ID0gdnEtPmxhc3RfdXNlZF9pZHggJiAodnEtPm51bSAtIDEpOwogCXVzZWQgPSB2cS0+dXNlZC0+cmluZyArIHN0YXJ0OwogCWlmIChjb3VudCA9PSAxKSB7CiAJCWlmIChfX3B1dF91c2VyKGhlYWRzWzBdLmlkLCAmdXNlZC0+aWQpKSB7CkBAIC0xNTMxLDcgKzE1MzEsNyBAQAogewogCWludCBzdGFydCwgbiwgcjsKIAotCXN0YXJ0ID0gdnEtPmxhc3RfdXNlZF9pZHggJSB2cS0+bnVtOworCXN0YXJ0ID0gdnEtPmxhc3RfdXNlZF9pZHggJiAodnEtPm51bSAtIDEpOwogCW4gPSB2cS0+bnVtIC0gc3RhcnQ7CiAJaWYgKG4gPCBjb3VudCkgewogCQlyID0gX192aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2ZzbC1kaXUtZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvZnNsLWRpdS1mYi5jCmluZGV4IGIzMzVjMWEuLmZlMDBhMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvZnNsLWRpdS1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvZnNsLWRpdS1mYi5jCkBAIC00NzksNyArNDc5LDEwIEBACiAJCQlwb3J0ID0gRlNMX0RJVV9QT1JUX0RMVkRTOwogCX0KIAotCXJldHVybiBkaXVfb3BzLnZhbGlkX21vbml0b3JfcG9ydChwb3J0KTsKKwlpZiAoZGl1X29wcy52YWxpZF9tb25pdG9yX3BvcnQpCisJCXBvcnQgPSBkaXVfb3BzLnZhbGlkX21vbml0b3JfcG9ydChwb3J0KTsKKworCXJldHVybiBwb3J0OwogfQogCiAvKgpAQCAtMTkxNSw2ICsxOTE4LDE0IEBACiAjZWxzZQogCW1vbml0b3JfcG9ydCA9IGZzbF9kaXVfbmFtZV90b19wb3J0KG1vbml0b3Jfc3RyaW5nKTsKICNlbmRpZgorCisJLyoKKwkgKiBNdXN0IHRvIHZlcmlmeSBzZXRfcGl4ZWxfY2xvY2suIElmIG5vdCBpbXBsZW1lbnQgb24gcGxhdGZvcm0sCisJICogdGhlbiB0aGF0IG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gcGxhdGZvcm0gc3VwcG9ydCBmb3IgdGhlIERJVS4KKwkgKi8KKwlpZiAoIWRpdV9vcHMuc2V0X3BpeGVsX2Nsb2NrKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXByX2luZm8oIkZyZWVzY2FsZSBEaXNwbGF5IEludGVyZmFjZSBVbml0IChESVUpIGZyYW1lYnVmZmVyIGRyaXZlclxuIik7CiAKICNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy92ZW5jLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy92ZW5jLmMKaW5kZXggOTljYTI2OC4uZDA1YTU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvdmVuYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3ZlbmMuYwpAQCAtMjc1LDYgKzI3NSwxMiBAQAogCS52YnAJCT0gNDEsCiAKIAkuaW50ZXJsYWNlCT0gdHJ1ZSwKKworCS5oc3luY19sZXZlbCA9IE9NQVBEU1NfU0lHX0FDVElWRV9MT1csCisJLnZzeW5jX2xldmVsID0gT01BUERTU19TSUdfQUNUSVZFX0xPVywKKwkuZGF0YV9wY2xrX2VkZ2UgPSBPTUFQRFNTX0RSSVZFX1NJR19SSVNJTkdfRURHRSwKKwkuZGVfbGV2ZWwgPSBPTUFQRFNTX1NJR19BQ1RJVkVfSElHSCwKKwkuc3luY19wY2xrX2VkZ2UgPSBPTUFQRFNTX0RSSVZFX1NJR19GQUxMSU5HX0VER0UsCiB9OwogRVhQT1JUX1NZTUJPTChvbWFwX2Rzc19wYWxfdGltaW5ncyk7CiAKQEAgLTI5MCw2ICsyOTYsMTIgQEAKIAkudmJwCQk9IDMxLAogCiAJLmludGVybGFjZQk9IHRydWUsCisKKwkuaHN5bmNfbGV2ZWwgPSBPTUFQRFNTX1NJR19BQ1RJVkVfTE9XLAorCS52c3luY19sZXZlbCA9IE9NQVBEU1NfU0lHX0FDVElWRV9MT1csCisJLmRhdGFfcGNsa19lZGdlID0gT01BUERTU19EUklWRV9TSUdfUklTSU5HX0VER0UsCisJLmRlX2xldmVsID0gT01BUERTU19TSUdfQUNUSVZFX0hJR0gsCisJLnN5bmNfcGNsa19lZGdlID0gT01BUERTU19EUklWRV9TSUdfRkFMTElOR19FREdFLAogfTsKIEVYUE9SVF9TWU1CT0wob21hcF9kc3NfbnRzY190aW1pbmdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYwppbmRleCBiMTg3N2Q3Li43MDYyYmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYwpAQCAtNDEyLDYgKzQxMiw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgdmlydGlvX2V4aXQodm9pZCkKIHsKIAlidXNfdW5yZWdpc3RlcigmdmlydGlvX2J1cyk7CisJaWRhX2Rlc3Ryb3koJnZpcnRpb19pbmRleF9pZGEpOwogfQogY29yZV9pbml0Y2FsbCh2aXJ0aW9faW5pdCk7CiBtb2R1bGVfZXhpdCh2aXJ0aW9fZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCAwOTZiODU3Li5lZTY2M2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTgwLDYgKzgwLDEyIEBACiAJLyogTGFzdCB1c2VkIGluZGV4IHdlJ3ZlIHNlZW4uICovCiAJdTE2IGxhc3RfdXNlZF9pZHg7CiAKKwkvKiBMYXN0IHdyaXR0ZW4gdmFsdWUgdG8gYXZhaWwtPmZsYWdzICovCisJdTE2IGF2YWlsX2ZsYWdzX3NoYWRvdzsKKworCS8qIExhc3Qgd3JpdHRlbiB2YWx1ZSB0byBhdmFpbC0+aWR4IGluIGd1ZXN0IGJ5dGUgb3JkZXIgKi8KKwl1MTYgYXZhaWxfaWR4X3NoYWRvdzsKKwogCS8qIEhvdyB0byBub3RpZnkgb3RoZXIgc2lkZS4gRklYTUU6IGNvbW1vbmFsaXplIGhjYWxscyEgKi8KIAlib29sICgqbm90aWZ5KShzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7CiAKQEAgLTEwOSw3ICsxMTUsNyBAQAogCSAqIG90aGVyd2lzZSB2aXJ0X3RvX3BoeXMgd2lsbCBnaXZlIHVzIGJvZ3VzIGFkZHJlc3NlcyBpbiB0aGUKIAkgKiB2aXJ0cXVldWUuCiAJICovCi0JZ2ZwICY9IH4oX19HRlBfSElHSE1FTSB8IF9fR0ZQX0hJR0gpOworCWdmcCAmPSB+X19HRlBfSElHSE1FTTsKIAogCWRlc2MgPSBrbWFsbG9jKHRvdGFsX3NnICogc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjKSwgZ2ZwKTsKIAlpZiAoIWRlc2MpCkBAIC0yMzUsMTMgKzI0MSwxNCBAQAogCiAJLyogUHV0IGVudHJ5IGluIGF2YWlsYWJsZSBhcnJheSAoYnV0IGRvbid0IHVwZGF0ZSBhdmFpbC0+aWR4IHVudGlsIHRoZXkKIAkgKiBkbyBzeW5jKS4gKi8KLQlhdmFpbCA9IHZpcnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy5hdmFpbC0+aWR4KSAmICh2cS0+dnJpbmcubnVtIC0gMSk7CisJYXZhaWwgPSB2cS0+YXZhaWxfaWR4X3NoYWRvdyAmICh2cS0+dnJpbmcubnVtIC0gMSk7CiAJdnEtPnZyaW5nLmF2YWlsLT5yaW5nW2F2YWlsXSA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIGhlYWQpOwogCiAJLyogRGVzY3JpcHRvcnMgYW5kIGF2YWlsYWJsZSBhcnJheSBuZWVkIHRvIGJlIHNldCBiZWZvcmUgd2UgZXhwb3NlIHRoZQogCSAqIG5ldyBhdmFpbGFibGUgYXJyYXkgZW50cmllcy4gKi8KIAl2aXJ0aW9fd21iKHZxLT53ZWFrX2JhcnJpZXJzKTsKLQl2cS0+dnJpbmcuYXZhaWwtPmlkeCA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHZpcnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy5hdmFpbC0+aWR4KSArIDEpOworCXZxLT5hdmFpbF9pZHhfc2hhZG93Kys7CisJdnEtPnZyaW5nLmF2YWlsLT5pZHggPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52ZGV2LCB2cS0+YXZhaWxfaWR4X3NoYWRvdyk7CiAJdnEtPm51bV9hZGRlZCsrOwogCiAJcHJfZGVidWcoIkFkZGVkIGJ1ZmZlciBoZWFkICVpIHRvICVwXG4iLCBoZWFkLCB2cSk7CkBAIC0zNTQsOCArMzYxLDggQEAKIAkgKiBldmVudC4gKi8KIAl2aXJ0aW9fbWIodnEtPndlYWtfYmFycmllcnMpOwogCi0Jb2xkID0gdmlydGlvMTZfdG9fY3B1KF92cS0+dmRldiwgdnEtPnZyaW5nLmF2YWlsLT5pZHgpIC0gdnEtPm51bV9hZGRlZDsKLQluZXcgPSB2aXJ0aW8xNl90b19jcHUoX3ZxLT52ZGV2LCB2cS0+dnJpbmcuYXZhaWwtPmlkeCk7CisJb2xkID0gdnEtPmF2YWlsX2lkeF9zaGFkb3cgLSB2cS0+bnVtX2FkZGVkOworCW5ldyA9IHZxLT5hdmFpbF9pZHhfc2hhZG93OwogCXZxLT5udW1fYWRkZWQgPSAwOwogCiAjaWZkZWYgREVCVUcKQEAgLTUxMCw3ICs1MTcsNyBAQAogCS8qIElmIHdlIGV4cGVjdCBhbiBpbnRlcnJ1cHQgZm9yIHRoZSBuZXh0IGVudHJ5LCB0ZWxsIGhvc3QKIAkgKiBieSB3cml0aW5nIGV2ZW50IGluZGV4IGFuZCBmbHVzaCBvdXQgdGhlIHdyaXRlIGJlZm9yZQogCSAqIHRoZSByZWFkIGluIHRoZSBuZXh0IGdldF9idWYgY2FsbC4gKi8KLQlpZiAoISh2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICYgY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpKSkgeworCWlmICghKHZxLT5hdmFpbF9mbGFnc19zaGFkb3cgJiBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpIHsKIAkJdnJpbmdfdXNlZF9ldmVudCgmdnEtPnZyaW5nKSA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHZxLT5sYXN0X3VzZWRfaWR4KTsKIAkJdmlydGlvX21iKHZxLT53ZWFrX2JhcnJpZXJzKTsKIAl9CkBAIC01MzcsNyArNTQ0LDExIEBACiB7CiAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKIAotCXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgfD0gY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpOworCWlmICghKHZxLT5hdmFpbF9mbGFnc19zaGFkb3cgJiBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpIHsKKwkJdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyB8PSBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKKwkJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHZxLT5hdmFpbF9mbGFnc19zaGFkb3cpOworCX0KKwogfQogRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVlX2Rpc2FibGVfY2IpOwogCkBAIC01NjUsNyArNTc2LDEwIEBACiAJLyogRGVwZW5kaW5nIG9uIHRoZSBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCBmZWF0dXJlLCB3ZSBuZWVkIHRvCiAJICogZWl0aGVyIGNsZWFyIHRoZSBmbGFncyBiaXQgb3IgcG9pbnQgdGhlIGV2ZW50IGluZGV4IGF0IHRoZSBuZXh0CiAJICogZW50cnkuIEFsd2F5cyBkbyBib3RoIHRvIGtlZXAgY29kZSBzaW1wbGUuICovCi0JdnEtPnZyaW5nLmF2YWlsLT5mbGFncyAmPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52ZGV2LCB+VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpOworCWlmICh2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93ICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpIHsKKwkJdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyAmPSB+VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7CisJCXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52ZGV2LCB2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93KTsKKwl9CiAJdnJpbmdfdXNlZF9ldmVudCgmdnEtPnZyaW5nKSA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIGxhc3RfdXNlZF9pZHggPSB2cS0+bGFzdF91c2VkX2lkeCk7CiAJRU5EX1VTRSh2cSk7CiAJcmV0dXJuIGxhc3RfdXNlZF9pZHg7CkBAIC02MzMsOSArNjQ3LDEyIEBACiAJLyogRGVwZW5kaW5nIG9uIHRoZSBWSVJUSU9fUklOR19GX1VTRURfRVZFTlRfSURYIGZlYXR1cmUsIHdlIG5lZWQgdG8KIAkgKiBlaXRoZXIgY2xlYXIgdGhlIGZsYWdzIGJpdCBvciBwb2ludCB0aGUgZXZlbnQgaW5kZXggYXQgdGhlIG5leHQKIAkgKiBlbnRyeS4gQWx3YXlzIGRvIGJvdGggdG8ga2VlcCBjb2RlIHNpbXBsZS4gKi8KLQl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICY9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIH5WUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCk7CisJaWYgKHZxLT5hdmFpbF9mbGFnc19zaGFkb3cgJiBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkgeworCQl2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93ICY9IH5WUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKKwkJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHZxLT5hdmFpbF9mbGFnc19zaGFkb3cpOworCX0KIAkvKiBUT0RPOiB0dW5lIHRoaXMgdGhyZXNob2xkICovCi0JYnVmcyA9ICh1MTYpKHZpcnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy5hdmFpbC0+aWR4KSAtIHZxLT5sYXN0X3VzZWRfaWR4KSAqIDMgLyA0OworCWJ1ZnMgPSAodTE2KSh2cS0+YXZhaWxfaWR4X3NoYWRvdyAtIHZxLT5sYXN0X3VzZWRfaWR4KSAqIDMgLyA0OwogCXZyaW5nX3VzZWRfZXZlbnQoJnZxLT52cmluZykgPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52ZGV2LCB2cS0+bGFzdF91c2VkX2lkeCArIGJ1ZnMpOwogCXZpcnRpb19tYih2cS0+d2Vha19iYXJyaWVycyk7CiAJaWYgKHVubGlrZWx5KCh1MTYpKHZpcnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy51c2VkLT5pZHgpIC0gdnEtPmxhc3RfdXNlZF9pZHgpID4gYnVmcykpIHsKQEAgLTY3MCw3ICs2ODcsOCBAQAogCQkvKiBkZXRhY2hfYnVmIGNsZWFycyBkYXRhLCBzbyBncmFiIGl0IG5vdy4gKi8KIAkJYnVmID0gdnEtPmRhdGFbaV07CiAJCWRldGFjaF9idWYodnEsIGkpOwotCQl2cS0+dnJpbmcuYXZhaWwtPmlkeCA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHZpcnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy5hdmFpbC0+aWR4KSAtIDEpOworCQl2cS0+YXZhaWxfaWR4X3NoYWRvdy0tOworCQl2cS0+dnJpbmcuYXZhaWwtPmlkeCA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHZxLT5hdmFpbF9pZHhfc2hhZG93KTsKIAkJRU5EX1VTRSh2cSk7CiAJCXJldHVybiBidWY7CiAJfQpAQCAtNzM1LDYgKzc1Myw4IEBACiAJdnEtPndlYWtfYmFycmllcnMgPSB3ZWFrX2JhcnJpZXJzOwogCXZxLT5icm9rZW4gPSBmYWxzZTsKIAl2cS0+bGFzdF91c2VkX2lkeCA9IDA7CisJdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyA9IDA7CisJdnEtPmF2YWlsX2lkeF9zaGFkb3cgPSAwOwogCXZxLT5udW1fYWRkZWQgPSAwOwogCWxpc3RfYWRkX3RhaWwoJnZxLT52cS5saXN0LCAmdmRldi0+dnFzKTsKICNpZmRlZiBERUJVRwpAQCAtNzQ2LDggKzc2NiwxMCBAQAogCXZxLT5ldmVudCA9IHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCk7CiAKIAkvKiBObyBjYWxsYmFjaz8gIFRlbGwgb3RoZXIgc2lkZSBub3QgdG8gYm90aGVyIHVzLiAqLwotCWlmICghY2FsbGJhY2spCi0JCXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgfD0gY3B1X3RvX3ZpcnRpbzE2KHZkZXYsIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKTsKKwlpZiAoIWNhbGxiYWNrKSB7CisJCXZxLT5hdmFpbF9mbGFnc19zaGFkb3cgfD0gVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7CisJCXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYodmRldiwgdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyk7CisJfQogCiAJLyogUHV0IGV2ZXJ5dGhpbmcgaW4gZnJlZSBsaXN0cy4gKi8KIAl2cS0+ZnJlZV9oZWFkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCA3YThhNmM2Li4xYzQyN2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC00NDYsNyArNDQ2LDcgQEAKIAogY29uZmlnIElNWDJfV0RUCiAJdHJpc3RhdGUgIklNWDIrIFdhdGNoZG9nIgotCWRlcGVuZHMgb24gQVJDSF9NWEMKKwlkZXBlbmRzIG9uIEFSQ0hfTVhDIHx8IEFSQ0hfTEFZRVJTQ0FQRQogCXNlbGVjdCBSRUdNQVBfTU1JTwogCXNlbGVjdCBXQVRDSERPR19DT1JFCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tdGtfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL210a193ZHQuYwppbmRleCA2YWQ5ZGY5Li5iNzUxZjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL210a193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL210a193ZHQuYwpAQCAtMTIzLDYgKzEyMyw3IEBACiAKIAlyZWcgPSByZWFkbCh3ZHRfYmFzZSArIFdEVF9NT0RFKTsKIAlyZWcgJj0gfldEVF9NT0RFX0VOOworCXJlZyB8PSBXRFRfTU9ERV9LRVk7CiAJaW93cml0ZTMyKHJlZywgd2R0X2Jhc2UgKyBXRFRfTU9ERSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYwppbmRleCBkOTZiZWUwLi42ZjE3YzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBvbWFwX3dkdF9nZXRfdGltZWxlZnQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqd2RvZykKIHsKLQlzdHJ1Y3Qgb21hcF93ZHRfZGV2ICp3ZGV2ID0gd2F0Y2hkb2dfZ2V0X2RydmRhdGEod2RvZyk7CisJc3RydWN0IG9tYXBfd2R0X2RldiAqd2RldiA9IHRvX29tYXBfd2R0X2Rldih3ZG9nKTsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSB3ZGV2LT5iYXNlOwogCXUzMiB2YWx1ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCmluZGV4IDQyMjRiM2UuLjMxM2NkMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKQEAgLTgwLDcgKzgwLDcgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhpb19sb2NrKTsKIHN0YXRpYyB2b2lkIF9faW9tZW0JKndkdF9iYXNlOwotc3RydWN0IGNsawkJKndkdF9jbGs7CitzdGF0aWMgc3RydWN0IGNsawkqd2R0X2NsazsKIAogc3RhdGljIGludCBwbng0MDA4X3dkdF9zdGFydChzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICp3ZGQpCiB7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAlpZiAoSVNfRVJSKHdkdF9jbGspKQogCQlyZXR1cm4gUFRSX0VSUih3ZHRfY2xrKTsKIAotCXJldCA9IGNsa19lbmFibGUod2R0X2Nsayk7CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHdkdF9jbGspOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE4NCw3ICsxODQsNyBAQAogCXJldHVybiAwOwogCiBkaXNhYmxlX2NsazoKLQljbGtfZGlzYWJsZSh3ZHRfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUod2R0X2Nsayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTkyLDcgKzE5Miw3IEBACiB7CiAJd2F0Y2hkb2dfdW5yZWdpc3Rlcl9kZXZpY2UoJnBueDQwMDhfd2RkKTsKIAotCWNsa19kaXNhYmxlKHdkdF9jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSh3ZHRfY2xrKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy90ZWdyYV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdGVncmFfd2R0LmMKaW5kZXggN2Y5N2NkZC4uOWVjNTc2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy90ZWdyYV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3RlZ3JhX3dkdC5jCkBAIC0xNDAsOCArMTQwLDEwIEBACiB7CiAJd2RkLT50aW1lb3V0ID0gdGltZW91dDsKIAotCWlmICh3YXRjaGRvZ19hY3RpdmUod2RkKSkKKwlpZiAod2F0Y2hkb2dfYWN0aXZlKHdkZCkpIHsKKwkJdGVncmFfd2R0X3N0b3Aod2RkKTsKIAkJcmV0dXJuIHRlZ3JhX3dkdF9zdGFydCh3ZGQpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jCmluZGV4IDkxYmY1NWEuLjIwZTJiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCiBzdGF0aWMgaW50IHdkdF9zZXRfdGltZW91dChpbnQgdCkKIHsKLQlpbnQgdG1ydmFsOworCXVuc2lnbmVkIGludCB0bXJ2YWw7CiAKIAkvKgogCSAqIENvbnZlcnQgc2Vjb25kcyB0byB3YXRjaGRvZyBjb3VudGVyIHRpbWUgdW5pdHMsIHJvdW5kaW5nIHVwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzL2V2ZW50c19iYXNlLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMvZXZlbnRzX2Jhc2UuYwppbmRleCA4NDk1MDBlLi41MjRjMjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMvZXZlbnRzX2Jhc2UuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMvZXZlbnRzX2Jhc2UuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaWRsZS5oPgogI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CiAjaW5jbHVkZSA8YXNtL3hlbi9wY2kuaD4KICNlbmRpZgogI2luY2x1ZGUgPGFzbS9zeW5jX2JpdG9wcy5oPgpAQCAtNDIwLDcgKzQyMSw3IEBACiAJCXJldHVybiB4ZW5fYWxsb2NhdGVfaXJxX2R5bmFtaWMoKTsKIAogCS8qIExlZ2FjeSBJUlEgZGVzY3JpcHRvcnMgYXJlIGFscmVhZHkgYWxsb2NhdGVkIGJ5IHRoZSBhcmNoLiAqLwotCWlmIChnc2kgPCBOUl9JUlFTX0xFR0FDWSkKKwlpZiAoZ3NpIDwgbnJfbGVnYWN5X2lycXMoKSkKIAkJaXJxID0gZ3NpOwogCWVsc2UKIAkJaXJxID0gaXJxX2FsbG9jX2Rlc2NfYXQoZ3NpLCAtMSk7CkBAIC00NDYsNyArNDQ3LDcgQEAKIAlrZnJlZShpbmZvKTsKIAogCS8qIExlZ2FjeSBJUlEgZGVzY3JpcHRvcnMgYXJlIG1hbmFnZWQgYnkgdGhlIGFyY2guICovCi0JaWYgKGlycSA8IE5SX0lSUVNfTEVHQUNZKQorCWlmIChpcnEgPCBucl9sZWdhY3lfaXJxcygpKQogCQlyZXR1cm47CiAKIAlpcnFfZnJlZV9kZXNjKGlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ldmVudHMvZXZlbnRzX2ZpZm8uYyBiL2RyaXZlcnMveGVuL2V2ZW50cy9ldmVudHNfZmlmby5jCmluZGV4IGUzZTllM2QuLjk2YTFiOGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMvZXZlbnRzX2ZpZm8uYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMvZXZlbnRzX2ZpZm8uYwpAQCAtMjgxLDcgKzI4MSw4IEBACiAKIHN0YXRpYyB2b2lkIGNvbnN1bWVfb25lX2V2ZW50KHVuc2lnbmVkIGNwdSwKIAkJCSAgICAgIHN0cnVjdCBldnRjaG5fZmlmb19jb250cm9sX2Jsb2NrICpjb250cm9sX2Jsb2NrLAotCQkJICAgICAgdW5zaWduZWQgcHJpb3JpdHksIHVuc2lnbmVkIGxvbmcgKnJlYWR5KQorCQkJICAgICAgdW5zaWduZWQgcHJpb3JpdHksIHVuc2lnbmVkIGxvbmcgKnJlYWR5LAorCQkJICAgICAgYm9vbCBkcm9wKQogewogCXN0cnVjdCBldnRjaG5fZmlmb19xdWV1ZSAqcSA9ICZwZXJfY3B1KGNwdV9xdWV1ZSwgY3B1KTsKIAl1aW50MzJfdCBoZWFkOwpAQCAtMzEzLDEzICszMTQsMTcgQEAKIAlpZiAoaGVhZCA9PSAwKQogCQljbGVhcl9iaXQocHJpb3JpdHksIHJlYWR5KTsKIAotCWlmIChldnRjaG5fZmlmb19pc19wZW5kaW5nKHBvcnQpICYmICFldnRjaG5fZmlmb19pc19tYXNrZWQocG9ydCkpCi0JCWhhbmRsZV9pcnFfZm9yX3BvcnQocG9ydCk7CisJaWYgKGV2dGNobl9maWZvX2lzX3BlbmRpbmcocG9ydCkgJiYgIWV2dGNobl9maWZvX2lzX21hc2tlZChwb3J0KSkgeworCQlpZiAodW5saWtlbHkoZHJvcCkpCisJCQlwcl93YXJuKCJEcm9wcGluZyBwZW5kaW5nIGV2ZW50IGZvciBwb3J0ICV1XG4iLCBwb3J0KTsKKwkJZWxzZQorCQkJaGFuZGxlX2lycV9mb3JfcG9ydChwb3J0KTsKKwl9CiAKIAlxLT5oZWFkW3ByaW9yaXR5XSA9IGhlYWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGV2dGNobl9maWZvX2hhbmRsZV9ldmVudHModW5zaWduZWQgY3B1KQorc3RhdGljIHZvaWQgX19ldnRjaG5fZmlmb19oYW5kbGVfZXZlbnRzKHVuc2lnbmVkIGNwdSwgYm9vbCBkcm9wKQogewogCXN0cnVjdCBldnRjaG5fZmlmb19jb250cm9sX2Jsb2NrICpjb250cm9sX2Jsb2NrOwogCXVuc2lnbmVkIGxvbmcgcmVhZHk7CkBAIC0zMzEsMTEgKzMzNiwxNiBAQAogCiAJd2hpbGUgKHJlYWR5KSB7CiAJCXEgPSBmaW5kX2ZpcnN0X2JpdCgmcmVhZHksIEVWVENITl9GSUZPX01BWF9RVUVVRVMpOwotCQljb25zdW1lX29uZV9ldmVudChjcHUsIGNvbnRyb2xfYmxvY2ssIHEsICZyZWFkeSk7CisJCWNvbnN1bWVfb25lX2V2ZW50KGNwdSwgY29udHJvbF9ibG9jaywgcSwgJnJlYWR5LCBkcm9wKTsKIAkJcmVhZHkgfD0geGNoZygmY29udHJvbF9ibG9jay0+cmVhZHksIDApOwogCX0KIH0KIAorc3RhdGljIHZvaWQgZXZ0Y2huX2ZpZm9faGFuZGxlX2V2ZW50cyh1bnNpZ25lZCBjcHUpCit7CisJX19ldnRjaG5fZmlmb19oYW5kbGVfZXZlbnRzKGNwdSwgZmFsc2UpOworfQorCiBzdGF0aWMgdm9pZCBldnRjaG5fZmlmb19yZXN1bWUodm9pZCkKIHsKIAl1bnNpZ25lZCBjcHU7CkBAIC00MjAsNiArNDMwLDkgQEAKIAkJaWYgKCFwZXJfY3B1KGNwdV9jb250cm9sX2Jsb2NrLCBjcHUpKQogCQkJcmV0ID0gZXZ0Y2huX2ZpZm9fYWxsb2NfY29udHJvbF9ibG9jayhjcHUpOwogCQlicmVhazsKKwljYXNlIENQVV9ERUFEOgorCQlfX2V2dGNobl9maWZvX2hhbmRsZV9ldmVudHMoY3B1LCB0cnVlKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZ0Y2huLmMgYi9kcml2ZXJzL3hlbi9ldnRjaG4uYwppbmRleCAwMGY0MGYwLi4zODI3MmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldnRjaG4uYworKysgYi9kcml2ZXJzL3hlbi9ldnRjaG4uYwpAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSA8eGVuL3hlbi5oPgogI2luY2x1ZGUgPHhlbi9ldmVudHMuaD4KQEAgLTU4LDEwICs2MCwxMCBAQAogc3RydWN0IHBlcl91c2VyX2RhdGEgewogCXN0cnVjdCBtdXRleCBiaW5kX211dGV4OyAvKiBzZXJpYWxpemUgYmluZC91bmJpbmQgb3BlcmF0aW9ucyAqLwogCXN0cnVjdCByYl9yb290IGV2dGNobnM7CisJdW5zaWduZWQgaW50IG5yX2V2dGNobnM7CiAKIAkvKiBOb3RpZmljYXRpb24gcmluZywgYWNjZXNzZWQgdmlhIC9kZXYveGVuL2V2dGNobi4gKi8KLSNkZWZpbmUgRVZUQ0hOX1JJTkdfU0laRSAgICAgKFBBR0VfU0laRSAvIHNpemVvZihldnRjaG5fcG9ydF90KSkKLSNkZWZpbmUgRVZUQ0hOX1JJTkdfTUFTSyhfaSkgKChfaSkmKEVWVENITl9SSU5HX1NJWkUtMSkpCisJdW5zaWduZWQgaW50IHJpbmdfc2l6ZTsKIAlldnRjaG5fcG9ydF90ICpyaW5nOwogCXVuc2lnbmVkIGludCByaW5nX2NvbnMsIHJpbmdfcHJvZCwgcmluZ19vdmVyZmxvdzsKIAlzdHJ1Y3QgbXV0ZXggcmluZ19jb25zX211dGV4OyAvKiBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCByZWFkZXJzICovCkBAIC04MCwxMCArODIsNDEgQEAKIAlib29sIGVuYWJsZWQ7CiB9OwogCitzdGF0aWMgZXZ0Y2huX3BvcnRfdCAqZXZ0Y2huX2FsbG9jX3JpbmcodW5zaWduZWQgaW50IHNpemUpCit7CisJZXZ0Y2huX3BvcnRfdCAqcmluZzsKKwlzaXplX3QgcyA9IHNpemUgKiBzaXplb2YoKnJpbmcpOworCisJcmluZyA9IGttYWxsb2MocywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyaW5nKQorCQlyaW5nID0gdm1hbGxvYyhzKTsKKworCXJldHVybiByaW5nOworfQorCitzdGF0aWMgdm9pZCBldnRjaG5fZnJlZV9yaW5nKGV2dGNobl9wb3J0X3QgKnJpbmcpCit7CisJa3ZmcmVlKHJpbmcpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGV2dGNobl9yaW5nX29mZnNldChzdHJ1Y3QgcGVyX3VzZXJfZGF0YSAqdSwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlyZXR1cm4gaWR4ICYgKHUtPnJpbmdfc2l6ZSAtIDEpOworfQorCitzdGF0aWMgZXZ0Y2huX3BvcnRfdCAqZXZ0Y2huX3JpbmdfZW50cnkoc3RydWN0IHBlcl91c2VyX2RhdGEgKnUsCisJCQkJCXVuc2lnbmVkIGludCBpZHgpCit7CisJcmV0dXJuIHUtPnJpbmcgKyBldnRjaG5fcmluZ19vZmZzZXQodSwgaWR4KTsKK30KKwogc3RhdGljIGludCBhZGRfZXZ0Y2huKHN0cnVjdCBwZXJfdXNlcl9kYXRhICp1LCBzdHJ1Y3QgdXNlcl9ldnRjaG4gKmV2dGNobikKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICYodS0+ZXZ0Y2hucy5yYl9ub2RlKSwgKnBhcmVudCA9IE5VTEw7CiAKKwl1LT5ucl9ldnRjaG5zKys7CisKIAl3aGlsZSAoKm5ldykgewogCQlzdHJ1Y3QgdXNlcl9ldnRjaG4gKnRoaXM7CiAKQEAgLTEwNyw2ICsxNDAsNyBAQAogCiBzdGF0aWMgdm9pZCBkZWxfZXZ0Y2huKHN0cnVjdCBwZXJfdXNlcl9kYXRhICp1LCBzdHJ1Y3QgdXNlcl9ldnRjaG4gKmV2dGNobikKIHsKKwl1LT5ucl9ldnRjaG5zLS07CiAJcmJfZXJhc2UoJmV2dGNobi0+bm9kZSwgJnUtPmV2dGNobnMpOwogCWtmcmVlKGV2dGNobik7CiB9CkBAIC0xNDQsOCArMTc4LDggQEAKIAogCXNwaW5fbG9jaygmdS0+cmluZ19wcm9kX2xvY2spOwogCi0JaWYgKCh1LT5yaW5nX3Byb2QgLSB1LT5yaW5nX2NvbnMpIDwgRVZUQ0hOX1JJTkdfU0laRSkgewotCQl1LT5yaW5nW0VWVENITl9SSU5HX01BU0sodS0+cmluZ19wcm9kKV0gPSBldnRjaG4tPnBvcnQ7CisJaWYgKCh1LT5yaW5nX3Byb2QgLSB1LT5yaW5nX2NvbnMpIDwgdS0+cmluZ19zaXplKSB7CisJCSpldnRjaG5fcmluZ19lbnRyeSh1LCB1LT5yaW5nX3Byb2QpID0gZXZ0Y2huLT5wb3J0OwogCQl3bWIoKTsgLyogRW5zdXJlIHJpbmcgY29udGVudHMgdmlzaWJsZSAqLwogCQlpZiAodS0+cmluZ19jb25zID09IHUtPnJpbmdfcHJvZCsrKSB7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnUtPmV2dGNobl93YWl0KTsKQEAgLTIwMCwxMCArMjM0LDEwIEBACiAJfQogCiAJLyogQnl0ZSBsZW5ndGhzIG9mIHR3byBjaHVua3MuIENodW5rIHNwbGl0IChpZiBhbnkpIGlzIGF0IHJpbmcgd3JhcC4gKi8KLQlpZiAoKChjIF4gcCkgJiBFVlRDSE5fUklOR19TSVpFKSAhPSAwKSB7Ci0JCWJ5dGVzMSA9IChFVlRDSE5fUklOR19TSVpFIC0gRVZUQ0hOX1JJTkdfTUFTSyhjKSkgKgorCWlmICgoKGMgXiBwKSAmIHUtPnJpbmdfc2l6ZSkgIT0gMCkgeworCQlieXRlczEgPSAodS0+cmluZ19zaXplIC0gZXZ0Y2huX3Jpbmdfb2Zmc2V0KHUsIGMpKSAqCiAJCQlzaXplb2YoZXZ0Y2huX3BvcnRfdCk7Ci0JCWJ5dGVzMiA9IEVWVENITl9SSU5HX01BU0socCkgKiBzaXplb2YoZXZ0Y2huX3BvcnRfdCk7CisJCWJ5dGVzMiA9IGV2dGNobl9yaW5nX29mZnNldCh1LCBwKSAqIHNpemVvZihldnRjaG5fcG9ydF90KTsKIAl9IGVsc2UgewogCQlieXRlczEgPSAocCAtIGMpICogc2l6ZW9mKGV2dGNobl9wb3J0X3QpOwogCQlieXRlczIgPSAwOwpAQCAtMjE5LDcgKzI1Myw3IEBACiAKIAlyYyA9IC1FRkFVTFQ7CiAJcm1iKCk7IC8qIEVuc3VyZSB0aGF0IHdlIHNlZSB0aGUgcG9ydCBiZWZvcmUgd2UgY29weSBpdC4gKi8KLQlpZiAoY29weV90b191c2VyKGJ1ZiwgJnUtPnJpbmdbRVZUQ0hOX1JJTkdfTUFTSyhjKV0sIGJ5dGVzMSkgfHwKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgZXZ0Y2huX3JpbmdfZW50cnkodSwgYyksIGJ5dGVzMSkgfHwKIAkgICAgKChieXRlczIgIT0gMCkgJiYKIAkgICAgIGNvcHlfdG9fdXNlcigmYnVmW2J5dGVzMV0sICZ1LT5yaW5nWzBdLCBieXRlczIpKSkKIAkJZ290byB1bmxvY2tfb3V0OwpAQCAtMjc4LDYgKzMxMiw2NiBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBldnRjaG5fcmVzaXplX3Jpbmcoc3RydWN0IHBlcl91c2VyX2RhdGEgKnUpCit7CisJdW5zaWduZWQgaW50IG5ld19zaXplOworCWV2dGNobl9wb3J0X3QgKm5ld19yaW5nLCAqb2xkX3Jpbmc7CisJdW5zaWduZWQgaW50IHAsIGM7CisKKwkvKgorCSAqIEVuc3VyZSB0aGUgcmluZyBpcyBsYXJnZSBlbm91Z2ggdG8gY2FwdHVyZSBhbGwgcG9zc2libGUKKwkgKiBldmVudHMuIGkuZS4sIG9uZSBmcmVlIHNsb3QgZm9yIGVhY2ggYm91bmQgZXZlbnQuCisJICovCisJaWYgKHUtPm5yX2V2dGNobnMgPD0gdS0+cmluZ19zaXplKQorCQlyZXR1cm4gMDsKKworCWlmICh1LT5yaW5nX3NpemUgPT0gMCkKKwkJbmV3X3NpemUgPSA2NDsKKwllbHNlCisJCW5ld19zaXplID0gMiAqIHUtPnJpbmdfc2l6ZTsKKworCW5ld19yaW5nID0gZXZ0Y2huX2FsbG9jX3JpbmcobmV3X3NpemUpOworCWlmICghbmV3X3JpbmcpCisJCXJldHVybiAtRU5PTUVNOworCisJb2xkX3JpbmcgPSB1LT5yaW5nOworCisJLyoKKwkgKiBBY2Nlc3MgdG8gdGhlIHJpbmcgY29udGVudHMgaXMgc2VyaWFsaXplZCBieSBlaXRoZXIgdGhlCisJICogcHJvZCAvb3IvIGNvbnMgbG9jayBzbyB0YWtlIGJvdGggd2hlbiByZXNpemluZy4KKwkgKi8KKwltdXRleF9sb2NrKCZ1LT5yaW5nX2NvbnNfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnUtPnJpbmdfcHJvZF9sb2NrKTsKKworCS8qCisJICogQ29weSB0aGUgb2xkIHJpbmcgY29udGVudHMgdG8gdGhlIG5ldyByaW5nLgorCSAqCisJICogSWYgdGhlIHJpbmcgY29udGVudHMgY3Jvc3NlcyB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHJpbmcsCisJICogaXQgbmVlZHMgdG8gYmUgY29waWVkIGluIHR3byBjaHVua3MuCisJICoKKwkgKiArLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqIHwzNDU2NyAgMTJ8IC0+IHwgICAgICAgMTIzNDU2NyAgICB8CisJICogKy0tLS0tcC1jLSsgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKi8KKwlwID0gZXZ0Y2huX3Jpbmdfb2Zmc2V0KHUsIHUtPnJpbmdfcHJvZCk7CisJYyA9IGV2dGNobl9yaW5nX29mZnNldCh1LCB1LT5yaW5nX2NvbnMpOworCWlmIChwIDwgYykgeworCQltZW1jcHkobmV3X3JpbmcgKyBjLCB1LT5yaW5nICsgYywgKHUtPnJpbmdfc2l6ZSAtIGMpICogc2l6ZW9mKCp1LT5yaW5nKSk7CisJCW1lbWNweShuZXdfcmluZyArIHUtPnJpbmdfc2l6ZSwgdS0+cmluZywgcCAqIHNpemVvZigqdS0+cmluZykpOworCX0gZWxzZQorCQltZW1jcHkobmV3X3JpbmcgKyBjLCB1LT5yaW5nICsgYywgKHAgLSBjKSAqIHNpemVvZigqdS0+cmluZykpOworCisJdS0+cmluZyA9IG5ld19yaW5nOworCXUtPnJpbmdfc2l6ZSA9IG5ld19zaXplOworCisJc3Bpbl91bmxvY2tfaXJxKCZ1LT5yaW5nX3Byb2RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ1LT5yaW5nX2NvbnNfbXV0ZXgpOworCisJZXZ0Y2huX2ZyZWVfcmluZyhvbGRfcmluZyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBldnRjaG5fYmluZF90b191c2VyKHN0cnVjdCBwZXJfdXNlcl9kYXRhICp1LCBpbnQgcG9ydCkKIHsKIAlzdHJ1Y3QgdXNlcl9ldnRjaG4gKmV2dGNobjsKQEAgLTMwNSw2ICszOTksMTAgQEAKIAlpZiAocmMgPCAwKQogCQlnb3RvIGVycjsKIAorCXJjID0gZXZ0Y2huX3Jlc2l6ZV9yaW5nKHUpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOworCiAJcmMgPSBiaW5kX2V2dGNobl90b19pcnFoYW5kbGVyKHBvcnQsIGV2dGNobl9pbnRlcnJ1cHQsIDAsCiAJCQkJICAgICAgIHUtPm5hbWUsIGV2dGNobik7CiAJaWYgKHJjIDwgMCkKQEAgLTUwMywxMyArNjAxLDYgQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnUtPmV2dGNobl93YWl0KTsKIAotCXUtPnJpbmcgPSAoZXZ0Y2huX3BvcnRfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAodS0+cmluZyA9PSBOVUxMKSB7Ci0JCWtmcmVlKHUtPm5hbWUpOwotCQlrZnJlZSh1KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJbXV0ZXhfaW5pdCgmdS0+YmluZF9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmdS0+cmluZ19jb25zX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmdS0+cmluZ19wcm9kX2xvY2spOwpAQCAtNTMyLDcgKzYyMyw3IEBACiAJCWV2dGNobl91bmJpbmRfZnJvbV91c2VyKHUsIGV2dGNobik7CiAJfQogCi0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXUtPnJpbmcpOworCWV2dGNobl9mcmVlX3JpbmcodS0+cmluZyk7CiAJa2ZyZWUodS0+bmFtZSk7CiAJa2ZyZWUodSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2dudGRldi5jIGIvZHJpdmVycy94ZW4vZ250ZGV2LmMKaW5kZXggMmVhMGIzYi4uMWJlNWRkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZ250ZGV2LmMKKysrIGIvZHJpdmVycy94ZW4vZ250ZGV2LmMKQEAgLTgwNCw3ICs4MDQsNyBAQAogCiAJdm1hLT52bV9vcHMgPSAmZ250ZGV2X3Ztb3BzOwogCi0Jdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVA7CisJdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVAgfCBWTV9JTzsKIAogCWlmICh1c2VfcHRlbW9kKQogCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRDT1BZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpYmFjay5oIGIvZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpYmFjay5oCmluZGV4IDU4ZTM4ZDUuLjRkNTI5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaWJhY2suaAorKysgYi9kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2liYWNrLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAlzdHJ1Y3QgeGVuX3BjaV9zaGFyZWRpbmZvICpzaF9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHdvcmtfc3RydWN0IG9wX3dvcms7CisJc3RydWN0IHhlbl9wY2lfb3Agb3A7CiB9OwogCiBzdHJ1Y3QgeGVuX3BjaWJrX2Rldl9kYXRhIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaWJhY2tfb3BzLmMgYi9kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay9wY2liYWNrX29wcy5jCmluZGV4IGM0YTA2NjYuLjczZGFmZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3hlbi1wY2liYWNrL3BjaWJhY2tfb3BzLmMKKysrIGIvZHJpdmVycy94ZW4veGVuLXBjaWJhY2svcGNpYmFja19vcHMuYwpAQCAtNzAsNiArNzAsMTMgQEAKIAkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOwogCiAJaWYgKGVuYWJsZSkgeworCQkvKgorCQkgKiBUaGUgTVNJIG9yIE1TSS1YIHNob3VsZCBub3QgaGF2ZSBhbiBJUlEgaGFuZGxlci4gT3RoZXJ3aXNlCisJCSAqIGlmIHRoZSBndWVzdCB0ZXJtaW5hdGVzIHdlIEJVR19PTiBpbiBmcmVlX21zaV9pcnFzLgorCQkgKi8KKwkJaWYgKGRldi0+bXNpX2VuYWJsZWQgfHwgZGV2LT5tc2l4X2VuYWJsZWQpCisJCQlnb3RvIG91dDsKKwogCQlyYyA9IHJlcXVlc3RfaXJxKGRldl9kYXRhLT5pcnEsCiAJCQkJeGVuX3BjaWJrX2d1ZXN0X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJZGV2X2RhdGEtPmlycV9uYW1lLCBkZXYpOwpAQCAtMTQ0LDcgKzE1MSwxMiBAQAogCWlmICh1bmxpa2VseSh2ZXJib3NlX3JlcXVlc3QpKQogCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiAlczogZW5hYmxlIE1TSVxuIiwgcGNpX25hbWUoZGV2KSk7CiAKLQlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaShkZXYpOworCWlmIChkZXYtPm1zaV9lbmFibGVkKQorCQlzdGF0dXMgPSAtRUFMUkVBRFk7CisJZWxzZSBpZiAoZGV2LT5tc2l4X2VuYWJsZWQpCisJCXN0YXR1cyA9IC1FTlhJTzsKKwllbHNlCisJCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpKGRldik7CiAKIAlpZiAoc3RhdHVzKSB7CiAJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoIiVzOiBlcnJvciBlbmFibGluZyBNU0kgZm9yIGd1ZXN0ICV1OiBlcnIgJWRcbiIsCkBAIC0xNzMsMjAgKzE4NSwyMyBAQAogaW50IHhlbl9wY2lia19kaXNhYmxlX21zaShzdHJ1Y3QgeGVuX3BjaWJrX2RldmljZSAqcGRldiwKIAkJCSAgc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHhlbl9wY2lfb3AgKm9wKQogewotCXN0cnVjdCB4ZW5fcGNpYmtfZGV2X2RhdGEgKmRldl9kYXRhOwotCiAJaWYgKHVubGlrZWx5KHZlcmJvc2VfcmVxdWVzdCkpCiAJCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICI6ICVzOiBkaXNhYmxlIE1TSVxuIiwKIAkJICAgICAgIHBjaV9uYW1lKGRldikpOwotCXBjaV9kaXNhYmxlX21zaShkZXYpOwogCisJaWYgKGRldi0+bXNpX2VuYWJsZWQpIHsKKwkJc3RydWN0IHhlbl9wY2lia19kZXZfZGF0YSAqZGV2X2RhdGE7CisKKwkJcGNpX2Rpc2FibGVfbXNpKGRldik7CisKKwkJZGV2X2RhdGEgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwkJaWYgKGRldl9kYXRhKQorCQkJZGV2X2RhdGEtPmFja19pbnRyID0gMTsKKwl9CiAJb3AtPnZhbHVlID0gZGV2LT5pcnEgPyB4ZW5fcGlycV9mcm9tX2lycShkZXYtPmlycSkgOiAwOwogCWlmICh1bmxpa2VseSh2ZXJib3NlX3JlcXVlc3QpKQogCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiAlczogTVNJOiAlZFxuIiwgcGNpX25hbWUoZGV2KSwKIAkJCW9wLT52YWx1ZSk7Ci0JZGV2X2RhdGEgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoZGV2X2RhdGEpCi0JCWRldl9kYXRhLT5hY2tfaW50ciA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NywxMyArMjEyLDI2IEBACiAJc3RydWN0IHhlbl9wY2lia19kZXZfZGF0YSAqZGV2X2RhdGE7CiAJaW50IGksIHJlc3VsdDsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllczsKKwl1MTYgY21kOwogCiAJaWYgKHVubGlrZWx5KHZlcmJvc2VfcmVxdWVzdCkpCiAJCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICI6ICVzOiBlbmFibGUgTVNJLVhcbiIsCiAJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKKwogCWlmIChvcC0+dmFsdWUgPiBTSF9JTkZPX01BWF9WRUMpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGRldi0+bXNpeF9lbmFibGVkKQorCQlyZXR1cm4gLUVBTFJFQURZOworCisJLyoKKwkgKiBQQ0lfQ09NTUFORF9NRU1PUlkgbXVzdCBiZSBlbmFibGVkLCBvdGhlcndpc2Ugd2UgbWF5IG5vdCBiZSBhYmxlCisJICogdG8gYWNjZXNzIHRoZSBCQVJzIHdoZXJlIHRoZSBNU0ktWCBlbnRyaWVzIHJlc2lkZS4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwlpZiAoZGV2LT5tc2lfZW5hYmxlZCB8fCAhKGNtZCAmIFBDSV9DT01NQU5EX01FTU9SWSkpCisJCXJldHVybiAtRU5YSU87CisKIAllbnRyaWVzID0ga21hbGxvYyhvcC0+dmFsdWUgKiBzaXplb2YoKmVudHJpZXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW50cmllcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI0NSwyMyArMjczLDI3IEBACiBpbnQgeGVuX3BjaWJrX2Rpc2FibGVfbXNpeChzdHJ1Y3QgeGVuX3BjaWJrX2RldmljZSAqcGRldiwKIAkJCSAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB4ZW5fcGNpX29wICpvcCkKIHsKLQlzdHJ1Y3QgeGVuX3BjaWJrX2Rldl9kYXRhICpkZXZfZGF0YTsKIAlpZiAodW5saWtlbHkodmVyYm9zZV9yZXF1ZXN0KSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIjogJXM6IGRpc2FibGUgTVNJLVhcbiIsCiAJCQlwY2lfbmFtZShkZXYpKTsKLQlwY2lfZGlzYWJsZV9tc2l4KGRldik7CiAKKwlpZiAoZGV2LT5tc2l4X2VuYWJsZWQpIHsKKwkJc3RydWN0IHhlbl9wY2lia19kZXZfZGF0YSAqZGV2X2RhdGE7CisKKwkJcGNpX2Rpc2FibGVfbXNpeChkZXYpOworCisJCWRldl9kYXRhID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJCWlmIChkZXZfZGF0YSkKKwkJCWRldl9kYXRhLT5hY2tfaW50ciA9IDE7CisJfQogCS8qCiAJICogU1ItSU9WIGRldmljZXMgKHdoaWNoIGRvbid0IGhhdmUgYW55IGxlZ2FjeSBJUlEpIGhhdmUKIAkgKiBhbiB1bmRlZmluZWQgSVJRIHZhbHVlIG9mIHplcm8uCiAJICovCiAJb3AtPnZhbHVlID0gZGV2LT5pcnEgPyB4ZW5fcGlycV9mcm9tX2lycShkZXYtPmlycSkgOiAwOwogCWlmICh1bmxpa2VseSh2ZXJib3NlX3JlcXVlc3QpKQotCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiAlczogTVNJLVg6ICVkXG4iLCBwY2lfbmFtZShkZXYpLAotCQkJb3AtPnZhbHVlKTsKLQlkZXZfZGF0YSA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChkZXZfZGF0YSkKLQkJZGV2X2RhdGEtPmFja19pbnRyID0gMTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIjogJXM6IE1TSS1YOiAlZFxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIG9wLT52YWx1ZSk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTI5OCw5ICszMzAsMTEgQEAKIAkJY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCB4ZW5fcGNpYmtfZGV2aWNlLCBvcF93b3JrKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCB4ZW5fcGNpYmtfZGV2X2RhdGEgKmRldl9kYXRhID0gTlVMTDsKLQlzdHJ1Y3QgeGVuX3BjaV9vcCAqb3AgPSAmcGRldi0+c2hfaW5mby0+b3A7CisJc3RydWN0IHhlbl9wY2lfb3AgKm9wID0gJnBkZXYtPm9wOwogCWludCB0ZXN0X2ludHggPSAwOwogCisJKm9wID0gcGRldi0+c2hfaW5mby0+b3A7CisJYmFycmllcigpOwogCWRldiA9IHhlbl9wY2lia19nZXRfcGNpX2RldihwZGV2LCBvcC0+ZG9tYWluLCBvcC0+YnVzLCBvcC0+ZGV2Zm4pOwogCiAJaWYgKGRldiA9PSBOVUxMKQpAQCAtMzQyLDYgKzM3NiwxNyBAQAogCQlpZiAoKGRldl9kYXRhLT5lbmFibGVfaW50eCAhPSB0ZXN0X2ludHgpKQogCQkJeGVuX3BjaWJrX2NvbnRyb2xfaXNyKGRldiwgMCAvKiBubyByZXNldCAqLyk7CiAJfQorCXBkZXYtPnNoX2luZm8tPm9wLmVyciA9IG9wLT5lcnI7CisJcGRldi0+c2hfaW5mby0+b3AudmFsdWUgPSBvcC0+dmFsdWU7CisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlpZiAob3AtPmNtZCA9PSBYRU5fUENJX09QX2VuYWJsZV9tc2l4ICYmIG9wLT5lcnIgPT0gMCkgeworCQl1bnNpZ25lZCBpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgb3AtPnZhbHVlOyBpKyspCisJCQlwZGV2LT5zaF9pbmZvLT5vcC5tc2l4X2VudHJpZXNbaV0udmVjdG9yID0KKwkJCQlvcC0+bXNpeF9lbnRyaWVzW2ldLnZlY3RvcjsKKwl9CisjZW5kaWYKIAkvKiBUZWxsIHRoZSBkcml2ZXIgZG9tYWluIHRoYXQgd2UncmUgZG9uZS4gKi8KIAl3bWIoKTsKIAljbGVhcl9iaXQoX1hFTl9QQ0lGX2FjdGl2ZSwgKHVuc2lnbmVkIGxvbmcgKikmcGRldi0+c2hfaW5mby0+ZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuLXBjaWJhY2sveGVuYnVzLmMgYi9kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay94ZW5idXMuYwppbmRleCA5OGJjMzQ1Li40ODQzNzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay94ZW5idXMuYworKysgYi9kcml2ZXJzL3hlbi94ZW4tcGNpYmFjay94ZW5idXMuYwpAQCAtNDQsNyArNDQsNiBAQAogCWRldl9kYmcoJnhkZXYtPmRldiwgImFsbG9jYXRlZCBwZGV2IEAgMHglcFxuIiwgcGRldik7CiAKIAlwZGV2LT54ZGV2ID0geGRldjsKLQlkZXZfc2V0X2RydmRhdGEoJnhkZXYtPmRldiwgcGRldik7CiAKIAltdXRleF9pbml0KCZwZGV2LT5kZXZfbG9jayk7CiAKQEAgLTU4LDYgKzU3LDkgQEAKIAkJa2ZyZWUocGRldik7CiAJCXBkZXYgPSBOVUxMOwogCX0KKworCWRldl9zZXRfZHJ2ZGF0YSgmeGRldi0+ZGV2LCBwZGV2KTsKKwogb3V0OgogCXJldHVybiBwZGV2OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuLXNjc2liYWNrLmMgYi9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYwppbmRleCA0M2JjYWU4Li5hZDRlYjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYworKysgYi9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJCWlmICghcGVuZGluZ19yZXEpCiAJCQlyZXR1cm4gMTsKIAotCQlyaW5nX3JlcSA9ICpSSU5HX0dFVF9SRVFVRVNUKHJpbmcsIHJjKTsKKwkJUklOR19DT1BZX1JFUVVFU1QocmluZywgcmMsICZyaW5nX3JlcSk7CiAJCXJpbmctPnJlcV9jb25zID0gKytyYzsKIAogCQllcnIgPSBwcmVwYXJlX3BlbmRpbmdfcmVxcyhpbmZvLCAmcmluZ19yZXEsIHBlbmRpbmdfcmVxKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggNjk5OTQxZS4uNTExMDc4NSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTQ1MSw5ICs0NTEsOSBAQAogewogCXN0cnVjdCB2OWZzX2lub2RlICp2OWlub2RlID0gVjlGU19JKGlub2RlKTsKIAotCXRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKGlub2RlLT5pX21hcHBpbmcpOworCXRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKCZpbm9kZS0+aV9kYXRhKTsKIAljbGVhcl9pbm9kZShpbm9kZSk7Ci0JZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCWZpbGVtYXBfZmRhdGF3cml0ZSgmaW5vZGUtPmlfZGF0YSk7CiAKIAl2OWZzX2NhY2hlX2lub2RlX3B1dF9jb29raWUoaW5vZGUpOwogCS8qIGNsdW5rIHRoZSBmaWQgc3Rhc2hlZCBpbiB3cml0ZWJhY2tfZmlkICovCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBkYTNmMzJmLi42Y2U3MmQ4IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTQ2LDYgKzQ2LDEyIEBACiAJICBvciBpZiB1bnN1cmUsIHNheSBOLiAgU2F5aW5nIFkgd2lsbCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsCiAJICBieSBhYm91dCA1a0IuCiAKK2NvbmZpZyBGU19EQVhfUE1ECisJYm9vbAorCWRlZmF1bHQgRlNfREFYCisJZGVwZW5kcyBvbiBGU19EQVgKKwlkZXBlbmRzIG9uIEJST0tFTgorCiBlbmRpZiAjIEJMT0NLCiAKICMgUG9zaXggQUNMIHV0aWxpdHkgcm91dGluZXMKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggYmIwZGZiMS4uNDRkNGExZSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTM5MCw5ICszOTAsMTcgQEAKIAkJCXN0cnVjdCBwYWdlICpwYWdlKQogewogCWNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqb3BzID0gYmRldi0+YmRfZGlzay0+Zm9wczsKKwlpbnQgcmVzdWx0ID0gLUVPUE5PVFNVUFA7CisKIAlpZiAoIW9wcy0+cndfcGFnZSB8fCBiZGV2X2dldF9pbnRlZ3JpdHkoYmRldikpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gb3BzLT5yd19wYWdlKGJkZXYsIHNlY3RvciArIGdldF9zdGFydF9zZWN0KGJkZXYpLCBwYWdlLCBSRUFEKTsKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlc3VsdCA9IGJsa19xdWV1ZV9lbnRlcihiZGV2LT5iZF9xdWV1ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXN1bHQgPSBvcHMtPnJ3X3BhZ2UoYmRldiwgc2VjdG9yICsgZ2V0X3N0YXJ0X3NlY3QoYmRldiksIHBhZ2UsIFJFQUQpOworCWJsa19xdWV1ZV9leGl0KGJkZXYtPmJkX3F1ZXVlKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYmRldl9yZWFkX3BhZ2UpOwogCkBAIC00MjEsMTQgKzQyOSwyMCBAQAogCWludCByZXN1bHQ7CiAJaW50IHJ3ID0gKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKSA/IFdSSVRFX1NZTkMgOiBXUklURTsKIAljb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKm9wcyA9IGJkZXYtPmJkX2Rpc2stPmZvcHM7CisKIAlpZiAoIW9wcy0+cndfcGFnZSB8fCBiZGV2X2dldF9pbnRlZ3JpdHkoYmRldikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXN1bHQgPSBibGtfcXVldWVfZW50ZXIoYmRldi0+YmRfcXVldWUsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKIAlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CiAJcmVzdWx0ID0gb3BzLT5yd19wYWdlKGJkZXYsIHNlY3RvciArIGdldF9zdGFydF9zZWN0KGJkZXYpLCBwYWdlLCBydyk7CiAJaWYgKHJlc3VsdCkKIAkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCWVsc2UKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CisJYmxrX3F1ZXVlX2V4aXQoYmRldi0+YmRfcXVldWUpOwogCXJldHVybiByZXN1bHQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChiZGV2X3dyaXRlX3BhZ2UpOwpAQCAtMTUwOSwxMSArMTUyMywxNCBAQAogCQlXQVJOX09OX09OQ0UoYmRldi0+YmRfaG9sZGVycyk7CiAJCXN5bmNfYmxvY2tkZXYoYmRldik7CiAJCWtpbGxfYmRldihiZGV2KTsKLQkJLyoKLQkJICogLT5yZWxlYXNlIGNhbiBjYXVzZSB0aGUgcXVldWUgdG8gZGlzYXBwZWFyLCBzbyBmbHVzaCBhbGwKLQkJICogZGlydHkgZGF0YSBiZWZvcmUuCi0JCSAqLworCiAJCWJkZXZfd3JpdGVfaW5vZGUoYmRldik7CisJCS8qCisJCSAqIERldGFjaGluZyBiZGV2IGlub2RlIGZyb20gaXRzIHdiIGluIF9fZGVzdHJveV9pbm9kZSgpCisJCSAqIGlzIHRvbyBsYXRlOiB0aGUgcXVldWUgd2hpY2ggZW1iZWRzIGl0cyBiZGkgKGFsb25nIHdpdGgKKwkJICogcm9vdCB3YikgY2FuIGJlIGdvbmUgYXMgc29vbiBhcyB3ZSBwdXRfZGlzaygpIGJlbG93LgorCQkgKi8KKwkJaW5vZGVfZGV0YWNoX3diKGJkZXYtPmJkX2lub2RlKTsKIAl9CiAJaWYgKGJkZXYtPmJkX2NvbnRhaW5zID09IGJkZXYpIHsKIAkJaWYgKGRpc2stPmZvcHMtPnJlbGVhc2UpCmRpZmYgLS1naXQgYS9mcy9idHJmcy9iYWNrcmVmLmMgYi9mcy9idHJmcy9iYWNrcmVmLmMKaW5kZXggNmRjZGIyZS4uZDQ1M2Q2MiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYmFja3JlZi5jCisrKyBiL2ZzL2J0cmZzL2JhY2tyZWYuYwpAQCAtMzU1LDcgKzM1NSw3IEBACiAKIAlpbmRleCA9IHNyY3VfcmVhZF9sb2NrKCZmc19pbmZvLT5zdWJ2b2xfc3JjdSk7CiAKLQlyb290ID0gYnRyZnNfcmVhZF9mc19yb290X25vX25hbWUoZnNfaW5mbywgJnJvb3Rfa2V5KTsKKwlyb290ID0gYnRyZnNfZ2V0X2ZzX3Jvb3QoZnNfaW5mbywgJnJvb3Rfa2V5LCBmYWxzZSk7CiAJaWYgKElTX0VSUihyb290KSkgewogCQlzcmN1X3JlYWRfdW5sb2NrKCZmc19pbmZvLT5zdWJ2b2xfc3JjdSwgaW5kZXgpOwogCQlyZXQgPSBQVFJfRVJSKHJvb3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggOGM1ODE5MS4uMzU0ODllNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuaAorKysgYi9mcy9idHJmcy9jdHJlZS5oCkBAIC0zNDE2LDYgKzM0MTYsNyBAQAogc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpidHJmc19sb29rdXBfYmxvY2tfZ3JvdXAoCiAJCQkJCQkgc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8sCiAJCQkJCQkgdTY0IGJ5dGVucik7Cit2b2lkIGJ0cmZzX2dldF9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlKTsKIHZvaWQgYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUpOwogaW50IGdldF9ibG9ja19ncm91cF9pbmRleChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlKTsKIHN0cnVjdCBleHRlbnRfYnVmZmVyICpidHJmc19hbGxvY190cmVlX2Jsb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApAQCAtMzQ3OSw2ICszNDgwLDkgQEAKIAkJCSAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZXNfdXNlZCwKIAkJCSAgIHU2NCB0eXBlLCB1NjQgY2h1bmtfb2JqZWN0aWQsIHU2NCBjaHVua19vZmZzZXQsCiAJCQkgICB1NjQgc2l6ZSk7CitzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19zdGFydF90cmFuc19yZW1vdmVfYmxvY2tfZ3JvdXAoCisJCQkJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sCisJCQkJY29uc3QgdTY0IGNodW5rX29mZnNldCk7CiBpbnQgYnRyZnNfcmVtb3ZlX2Jsb2NrX2dyb3VwKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGdyb3VwX3N0YXJ0LAogCQkJICAgICBzdHJ1Y3QgZXh0ZW50X21hcCAqZW0pOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggYWNmM2VkMS4uYzQ2NjFkYiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAlyZXR1cm4gKGNhY2hlLT5mbGFncyAmIGJpdHMpID09IGJpdHM7CiB9CiAKLXN0YXRpYyB2b2lkIGJ0cmZzX2dldF9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlKQordm9pZCBidHJmc19nZXRfYmxvY2tfZ3JvdXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZSkKIHsKIAlhdG9taWNfaW5jKCZjYWNoZS0+Y291bnQpOwogfQpAQCAtNTkxNSwxOSArNTkxNSw2IEBACiAJCQlzZXRfZXh0ZW50X2RpcnR5KGluZm8tPnBpbm5lZF9leHRlbnRzLAogCQkJCQkgYnl0ZW5yLCBieXRlbnIgKyBudW1fYnl0ZXMgLSAxLAogCQkJCQkgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOwotCQkJLyoKLQkJCSAqIE5vIGxvbmdlciBoYXZlIHVzZWQgYnl0ZXMgaW4gdGhpcyBibG9jayBncm91cCwgcXVldWUKLQkJCSAqIGl0IGZvciBkZWxldGlvbi4KLQkJCSAqLwotCQkJaWYgKG9sZF92YWwgPT0gMCkgewotCQkJCXNwaW5fbG9jaygmaW5mby0+dW51c2VkX2Jnc19sb2NrKTsKLQkJCQlpZiAobGlzdF9lbXB0eSgmY2FjaGUtPmJnX2xpc3QpKSB7Ci0JCQkJCWJ0cmZzX2dldF9ibG9ja19ncm91cChjYWNoZSk7Ci0JCQkJCWxpc3RfYWRkX3RhaWwoJmNhY2hlLT5iZ19saXN0LAotCQkJCQkJICAgICAgJmluZm8tPnVudXNlZF9iZ3MpOwotCQkJCX0KLQkJCQlzcGluX3VubG9jaygmaW5mby0+dW51c2VkX2Jnc19sb2NrKTsKLQkJCX0KIAkJfQogCiAJCXNwaW5fbG9jaygmdHJhbnMtPnRyYW5zYWN0aW9uLT5kaXJ0eV9iZ3NfbG9jayk7CkBAIC01OTM5LDYgKzU5MjYsMjIgQEAKIAkJfQogCQlzcGluX3VubG9jaygmdHJhbnMtPnRyYW5zYWN0aW9uLT5kaXJ0eV9iZ3NfbG9jayk7CiAKKwkJLyoKKwkJICogTm8gbG9uZ2VyIGhhdmUgdXNlZCBieXRlcyBpbiB0aGlzIGJsb2NrIGdyb3VwLCBxdWV1ZSBpdCBmb3IKKwkJICogZGVsZXRpb24uIFdlIGRvIHRoaXMgYWZ0ZXIgYWRkaW5nIHRoZSBibG9jayBncm91cCB0byB0aGUKKwkJICogZGlydHkgbGlzdCB0byBhdm9pZCByYWNlcyBiZXR3ZWVuIGNsZWFuZXIga3RocmVhZCBhbmQgc3BhY2UKKwkJICogY2FjaGUgd3JpdGVvdXQuCisJCSAqLworCQlpZiAoIWFsbG9jICYmIG9sZF92YWwgPT0gMCkgeworCQkJc3Bpbl9sb2NrKCZpbmZvLT51bnVzZWRfYmdzX2xvY2spOworCQkJaWYgKGxpc3RfZW1wdHkoJmNhY2hlLT5iZ19saXN0KSkgeworCQkJCWJ0cmZzX2dldF9ibG9ja19ncm91cChjYWNoZSk7CisJCQkJbGlzdF9hZGRfdGFpbCgmY2FjaGUtPmJnX2xpc3QsCisJCQkJCSAgICAgICZpbmZvLT51bnVzZWRfYmdzKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT51bnVzZWRfYmdzX2xvY2spOworCQl9CisKIAkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKIAkJdG90YWwgLT0gbnVtX2J5dGVzOwogCQlieXRlbnIgKz0gbnVtX2J5dGVzOwpAQCAtODEwNSwyMSArODEwOCw0NyBAQAogfQogCiAvKgotICogVE9ETzogTW9kaWZ5IHJlbGF0ZWQgZnVuY3Rpb24gdG8gYWRkIHJlbGF0ZWQgbm9kZS9sZWFmIHRvIGRpcnR5X2V4dGVudF9yb290LAotICogZm9yIGxhdGVyIHFncm91cCBhY2NvdW50aW5nLgotICoKLSAqIEN1cnJlbnQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorICogVGhlc2UgbWF5IG5vdCBiZSBzZWVuIGJ5IHRoZSB1c3VhbCBpbmMvZGVjIHJlZiBjb2RlIHNvIHdlIGhhdmUgdG8KKyAqIGFkZCB0aGVtIGhlcmUuCiAgKi8KK3N0YXRpYyBpbnQgcmVjb3JkX29uZV9zdWJ0cmVlX2V4dGVudChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLAorCQkJCSAgICAgdTY0IG51bV9ieXRlcykKK3sKKwlzdHJ1Y3QgYnRyZnNfcWdyb3VwX2V4dGVudF9yZWNvcmQgKnFyZWNvcmQ7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKworCXFyZWNvcmQgPSBrbWFsbG9jKHNpemVvZigqcXJlY29yZCksIEdGUF9OT0ZTKTsKKwlpZiAoIXFyZWNvcmQpCisJCXJldHVybiAtRU5PTUVNOworCisJcXJlY29yZC0+Ynl0ZW5yID0gYnl0ZW5yOworCXFyZWNvcmQtPm51bV9ieXRlcyA9IG51bV9ieXRlczsKKwlxcmVjb3JkLT5vbGRfcm9vdHMgPSBOVUxMOworCisJZGVsYXllZF9yZWZzID0gJnRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzOworCXNwaW5fbG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKwlpZiAoYnRyZnNfcWdyb3VwX2luc2VydF9kaXJ0eV9leHRlbnQoZGVsYXllZF9yZWZzLCBxcmVjb3JkKSkKKwkJa2ZyZWUocXJlY29yZCk7CisJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhY2NvdW50X2xlYWZfaXRlbXMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCSAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICplYikKIHsKIAlpbnQgbnIgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhlYik7Ci0JaW50IGksIGV4dGVudF90eXBlOworCWludCBpLCBleHRlbnRfdHlwZSwgcmV0OwogCXN0cnVjdCBidHJmc19rZXkga2V5OwogCXN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtICpmaTsKIAl1NjQgYnl0ZW5yLCBudW1fYnl0ZXM7CiAKKwkvKiBXZSBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gd2Fsa191cF9wcm9jKCkgKi8KKwlpZiAoIXJvb3QtPmZzX2luZm8tPnF1b3RhX2VuYWJsZWQpCisJCXJldHVybiAwOworCiAJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKIAkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGViLCAma2V5LCBpKTsKIApAQCAtODEzOCw2ICs4MTY3LDEwIEBACiAJCQljb250aW51ZTsKIAogCQludW1fYnl0ZXMgPSBidHJmc19maWxlX2V4dGVudF9kaXNrX251bV9ieXRlcyhlYiwgZmkpOworCisJCXJldCA9IHJlY29yZF9vbmVfc3VidHJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODIwNiw4ICs4MjM5LDYgQEAKIAogLyoKICAqIHJvb3RfZWIgaXMgdGhlIHN1YnRyZWUgcm9vdCBhbmQgaXMgbG9ja2VkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqIFRPRE86IE1vZGlmeSB0aGlzIGZ1bmN0aW9uIHRvIG1hcmsgYWxsIChpbmNsdWRpbmcgY29tcGxldGUgc2hhcmVkIG5vZGUpCi0gKiB0byBkaXJ0eV9leHRlbnRfcm9vdCB0byBhbGxvdyBpdCBnZXQgYWNjb3VudGVkIGluIHFncm91cC4KICAqLwogc3RhdGljIGludCBhY2NvdW50X3NoYXJlZF9zdWJ0cmVlKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCSAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCkBAIC04Mjg1LDYgKzgzMTYsMTEgQEAKIAkJCWJ0cmZzX3RyZWVfcmVhZF9sb2NrKGViKTsKIAkJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nX3J3KGViLCBCVFJGU19SRUFEX0xPQ0spOwogCQkJcGF0aC0+bG9ja3NbbGV2ZWxdID0gQlRSRlNfUkVBRF9MT0NLX0JMT0NLSU5HOworCisJCQlyZXQgPSByZWNvcmRfb25lX3N1YnRyZWVfZXh0ZW50KHRyYW5zLCByb290LCBjaGlsZF9ieXRlbnIsCisJCQkJCQkJcm9vdC0+bm9kZXNpemUpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKIAkJfQogCiAJCWlmIChsZXZlbCA9PSAwKSB7CkBAIC0xMDI1Niw2ICsxMDI5Miw0NyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKgorYnRyZnNfc3RhcnRfdHJhbnNfcmVtb3ZlX2Jsb2NrX2dyb3VwKHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLAorCQkJCSAgICAgY29uc3QgdTY0IGNodW5rX29mZnNldCkKK3sKKwlzdHJ1Y3QgZXh0ZW50X21hcF90cmVlICplbV90cmVlID0gJmZzX2luZm8tPm1hcHBpbmdfdHJlZS5tYXBfdHJlZTsKKwlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07CisJc3RydWN0IG1hcF9sb29rdXAgKm1hcDsKKwl1bnNpZ25lZCBpbnQgbnVtX2l0ZW1zOworCisJcmVhZF9sb2NrKCZlbV90cmVlLT5sb2NrKTsKKwllbSA9IGxvb2t1cF9leHRlbnRfbWFwcGluZyhlbV90cmVlLCBjaHVua19vZmZzZXQsIDEpOworCXJlYWRfdW5sb2NrKCZlbV90cmVlLT5sb2NrKTsKKwlBU1NFUlQoZW0gJiYgZW0tPnN0YXJ0ID09IGNodW5rX29mZnNldCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gcmVzZXJ2ZSAzICsgTiB1bml0cyBmcm9tIHRoZSBtZXRhZGF0YSBzcGFjZSBpbmZvIGluIG9yZGVyCisJICogdG8gcmVtb3ZlIGEgYmxvY2sgZ3JvdXAgKGRvbmUgYXQgYnRyZnNfcmVtb3ZlX2NodW5rKCkgYW5kIGF0CisJICogYnRyZnNfcmVtb3ZlX2Jsb2NrX2dyb3VwKCkpLCB3aGljaCBhcmUgdXNlZCBmb3I6CisJICoKKwkgKiAxIHVuaXQgZm9yIGFkZGluZyB0aGUgZnJlZSBzcGFjZSBpbm9kZSdzIG9ycGhhbiAobG9jYXRlZCBpbiB0aGUgdHJlZQorCSAqIG9mIHRyZWUgcm9vdHMpLgorCSAqIDEgdW5pdCBmb3IgZGVsZXRpbmcgdGhlIGJsb2NrIGdyb3VwIGl0ZW0gKGxvY2F0ZWQgaW4gdGhlIGV4dGVudAorCSAqIHRyZWUpLgorCSAqIDEgdW5pdCBmb3IgZGVsZXRpbmcgdGhlIGZyZWUgc3BhY2UgaXRlbSAobG9jYXRlZCBpbiB0cmVlIG9mIHRyZWUKKwkgKiByb290cykuCisJICogTiB1bml0cyBmb3IgZGVsZXRpbmcgTiBkZXZpY2UgZXh0ZW50IGl0ZW1zIGNvcnJlc3BvbmRpbmcgdG8gZWFjaAorCSAqIHN0cmlwZSAobG9jYXRlZCBpbiB0aGUgZGV2aWNlIHRyZWUpLgorCSAqCisJICogSW4gb3JkZXIgdG8gcmVtb3ZlIGEgYmxvY2sgZ3JvdXAgd2UgYWxzbyBuZWVkIHRvIHJlc2VydmUgdW5pdHMgaW4gdGhlCisJICogc3lzdGVtIHNwYWNlIGluZm8gaW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBjaHVuayB0cmVlICh1cGRhdGUgb25lIG9yCisJICogbW9yZSBkZXZpY2UgaXRlbXMgYW5kIHJlbW92ZSBvbmUgY2h1bmsgaXRlbSksIGJ1dCB0aGlzIGlzIGRvbmUgYXQKKwkgKiBidHJmc19yZW1vdmVfY2h1bmsoKSB0aHJvdWdoIGEgY2FsbCB0byBjaGVja19zeXN0ZW1fY2h1bmsoKS4KKwkgKi8KKwltYXAgPSAoc3RydWN0IG1hcF9sb29rdXAgKillbS0+YmRldjsKKwludW1faXRlbXMgPSAzICsgbWFwLT5udW1fc3RyaXBlczsKKwlmcmVlX2V4dGVudF9tYXAoZW0pOworCisJcmV0dXJuIGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uX2ZhbGxiYWNrX2dsb2JhbF9yc3YoZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCisJCQkJCQkJICAgbnVtX2l0ZW1zLCAxKTsKK30KKwogLyoKICAqIFByb2Nlc3MgdGhlIHVudXNlZF9iZ3MgbGlzdCBhbmQgcmVtb3ZlIGFueSB0aGF0IGRvbid0IGhhdmUgYW55IGFsbG9jYXRlZAogICogc3BhY2UgaW5zaWRlIG9mIHRoZW0uCkBAIC0xMDMyMiw4ICsxMDM5OSw4IEBACiAJCSAqIFdhbnQgdG8gZG8gdGhpcyBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZSBzbyB3ZSBjYW4gcmVjb3ZlcgogCQkgKiBwcm9wZXJseSBpZiB3ZSBmYWlsIHRvIGpvaW4gdGhlIHRyYW5zYWN0aW9uLgogCQkgKi8KLQkJLyogMSBmb3IgYnRyZnNfb3JwaGFuX3Jlc2VydmVfbWV0YWRhdGEoKSAqLwotCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zX3JlbW92ZV9ibG9ja19ncm91cChmc19pbmZvLAorCQkJCQkJICAgICBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkKTsKIAkJaWYgKElTX0VSUih0cmFucykpIHsKIAkJCWJ0cmZzX2RlY19ibG9ja19ncm91cF9ybyhyb290LCBibG9ja19ncm91cCk7CiAJCQlyZXQgPSBQVFJfRVJSKHRyYW5zKTsKQEAgLTEwNDAzLDExICsxMDQ4MCwxNSBAQAogCQkgKiB1bnRpbCB0cmFuc2FjdGlvbiBjb21taXQgdG8gZG8gdGhlIGFjdHVhbCBkaXNjYXJkLgogCQkgKi8KIAkJaWYgKHRyaW1taW5nKSB7Ci0JCQlXQVJOX09OKCFsaXN0X2VtcHR5KCZibG9ja19ncm91cC0+YmdfbGlzdCkpOwotCQkJc3Bpbl9sb2NrKCZ0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGV0ZWRfYmdzX2xvY2spOworCQkJc3Bpbl9sb2NrKCZmc19pbmZvLT51bnVzZWRfYmdzX2xvY2spOworCQkJLyoKKwkJCSAqIEEgY29uY3VycmVudCBzY3J1YiBtaWdodCBoYXZlIGFkZGVkIHVzIHRvIHRoZSBsaXN0CisJCQkgKiBmc19pbmZvLT51bnVzZWRfYmdzLCBzbyB1c2UgYSBsaXN0X21vdmUgb3BlcmF0aW9uCisJCQkgKiB0byBhZGQgdGhlIGJsb2NrIGdyb3VwIHRvIHRoZSBkZWxldGVkX2JncyBsaXN0LgorCQkJICovCiAJCQlsaXN0X21vdmUoJmJsb2NrX2dyb3VwLT5iZ19saXN0LAogCQkJCSAgJnRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsZXRlZF9iZ3MpOwotCQkJc3Bpbl91bmxvY2soJnRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsZXRlZF9iZ3NfbG9jayk7CisJCQlzcGluX3VubG9jaygmZnNfaW5mby0+dW51c2VkX2Jnc19sb2NrKTsKIAkJCWJ0cmZzX2dldF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCX0KIGVuZF90cmFuczoKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUuYyBiL2ZzL2J0cmZzL2ZpbGUuYwppbmRleCA5NzdlNzE1Li4wZjA5NTI2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLmMKKysrIGIvZnMvYnRyZnMvZmlsZS5jCkBAIC0xMjkxLDcgKzEyOTEsOCBAQAogICogb24gZXJyb3Igd2UgcmV0dXJuIGFuIHVubG9ja2VkIHBhZ2UgYW5kIHRoZSBlcnJvciB2YWx1ZQogICogb24gc3VjY2VzcyB3ZSByZXR1cm4gYSBsb2NrZWQgcGFnZSBhbmQgMAogICovCi1zdGF0aWMgaW50IHByZXBhcmVfdXB0b2RhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdTY0IHBvcywKK3N0YXRpYyBpbnQgcHJlcGFyZV91cHRvZGF0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBwYWdlICpwYWdlLCB1NjQgcG9zLAogCQkJCSBib29sIGZvcmNlX3VwdG9kYXRlKQogewogCWludCByZXQgPSAwOwpAQCAtMTMwNiw2ICsxMzA3LDEwIEBACiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CisJCWlmIChwYWdlLT5tYXBwaW5nICE9IGlub2RlLT5pX21hcHBpbmcpIHsKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzI0LDYgKzEzMjksNyBAQAogCWludCBmYWlsaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgeworYWdhaW46CiAJCXBhZ2VzW2ldID0gZmluZF9vcl9jcmVhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCArIGksCiAJCQkJCSAgICAgICBtYXNrIHwgX19HRlBfV1JJVEUpOwogCQlpZiAoIXBhZ2VzW2ldKSB7CkBAIC0xMzMzLDEzICsxMzM5LDE3IEBACiAJCX0KIAogCQlpZiAoaSA9PSAwKQotCQkJZXJyID0gcHJlcGFyZV91cHRvZGF0ZV9wYWdlKHBhZ2VzW2ldLCBwb3MsCisJCQllcnIgPSBwcmVwYXJlX3VwdG9kYXRlX3BhZ2UoaW5vZGUsIHBhZ2VzW2ldLCBwb3MsCiAJCQkJCQkgICAgZm9yY2VfdXB0b2RhdGUpOwotCQlpZiAoaSA9PSBudW1fcGFnZXMgLSAxKQotCQkJZXJyID0gcHJlcGFyZV91cHRvZGF0ZV9wYWdlKHBhZ2VzW2ldLAorCQlpZiAoIWVyciAmJiBpID09IG51bV9wYWdlcyAtIDEpCisJCQllcnIgPSBwcmVwYXJlX3VwdG9kYXRlX3BhZ2UoaW5vZGUsIHBhZ2VzW2ldLAogCQkJCQkJICAgIHBvcyArIHdyaXRlX2J5dGVzLCBmYWxzZSk7CiAJCWlmIChlcnIpIHsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tpXSk7CisJCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKKwkJCQllcnIgPSAwOworCQkJCWdvdG8gYWdhaW47CisJCQl9CiAJCQlmYWlsaSA9IGkgLSAxOwogCQkJZ290byBmYWlsOwogCQl9CkBAIC0xODgyLDggKzE4OTIsMTMgQEAKIAlzdHJ1Y3QgYnRyZnNfbG9nX2N0eCBjdHg7CiAJaW50IHJldCA9IDA7CiAJYm9vbCBmdWxsX3N5bmMgPSAwOwotCWNvbnN0IHU2NCBsZW4gPSBlbmQgLSBzdGFydCArIDE7CisJdTY0IGxlbjsKIAorCS8qCisJICogVGhlIHJhbmdlIGxlbmd0aCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgdTY0LCB3ZSBoYXZlIHRvIGRvIHRoZSB0eXBlY2FzdHMKKwkgKiB0byBhdm9pZCBzaWduZWQgb3ZlcmZsb3cgaWYgaXQncyBbMCwgTExPTkdfTUFYXSBlZy4gZnJvbSBmc3luYygpCisJICovCisJbGVuID0gKHU2NCllbmQgLSAodTY0KXN0YXJ0ICsgMTsKIAl0cmFjZV9idHJmc19zeW5jX2ZpbGUoZmlsZSwgZGF0YXN5bmMpOwogCiAJLyoKQEAgLTIwNzEsOCArMjA4Niw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKCFmdWxsX3N5bmMpIHsKLQkJCXJldCA9IGJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgc3RhcnQsCi0JCQkJCQkgICAgICAgZW5kIC0gc3RhcnQgKyAxKTsKKwkJCXJldCA9IGJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgc3RhcnQsIGxlbik7CiAJCQlpZiAocmV0KSB7CiAJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwppbmRleCA4NWExZjg2Li5jZmU5OWJlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKKysrIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCkBAIC04OTEsNyArODkxLDcgQEAKIAkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT5sb2NrKTsKIAkJcmV0ID0gMDsKIAotCQlidHJmc193YXJuKGZzX2luZm8sICJmYWlsZWQgdG8gbG9hZCBmcmVlIHNwYWNlIGNhY2hlIGZvciBibG9jayBncm91cCAlbGx1LCByZWJ1aWxkIGl0IG5vdyIsCisJCWJ0cmZzX3dhcm4oZnNfaW5mbywgImZhaWxlZCB0byBsb2FkIGZyZWUgc3BhY2UgY2FjaGUgZm9yIGJsb2NrIGdyb3VwICVsbHUsIHJlYnVpbGRpbmcgaXQgbm93IiwKIAkJCWJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQpOwogCX0KIApAQCAtMjk3Miw3ICsyOTcyLDcgQEAKIAkJICAgICB1NjQgY29udDFfYnl0ZXMsIHU2NCBtaW5fYnl0ZXMpCiB7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwgPSBibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9jdGw7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5OworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSA9IE5VTEw7CiAJaW50IHJldCA9IC1FTk9TUEM7CiAJdTY0IGJpdG1hcF9vZmZzZXQgPSBvZmZzZXRfdG9fYml0bWFwKGN0bCwgb2Zmc2V0KTsKIApAQCAtMjk4Myw4ICsyOTgzLDEwIEBACiAJICogVGhlIGJpdG1hcCB0aGF0IGNvdmVycyBvZmZzZXQgd29uJ3QgYmUgaW4gdGhlIGxpc3QgdW5sZXNzIG9mZnNldAogCSAqIGlzIGp1c3QgaXRzIHN0YXJ0IG9mZnNldC4KIAkgKi8KLQllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoYml0bWFwcywgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIGxpc3QpOwotCWlmIChlbnRyeS0+b2Zmc2V0ICE9IGJpdG1hcF9vZmZzZXQpIHsKKwlpZiAoIWxpc3RfZW1wdHkoYml0bWFwcykpCisJCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeShiaXRtYXBzLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgbGlzdCk7CisKKwlpZiAoIWVudHJ5IHx8IGVudHJ5LT5vZmZzZXQgIT0gYml0bWFwX29mZnNldCkgewogCQllbnRyeSA9IHRyZWVfc2VhcmNoX29mZnNldChjdGwsIGJpdG1hcF9vZmZzZXQsIDEsIDApOwogCQlpZiAoZW50cnkgJiYgbGlzdF9lbXB0eSgmZW50cnktPmxpc3QpKQogCQkJbGlzdF9hZGQoJmVudHJ5LT5saXN0LCBiaXRtYXBzKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jCmluZGV4IDk5NDQ5MGQuLmE3MGM1NzkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtNDA0Niw5ICs0MDQ2LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKl9fdW5saW5rX3N0YXJ0X3RyYW5zKHN0cnVjdCBpbm9kZSAqZGlyKQogewotCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShkaXIpLT5yb290OwotCWludCByZXQ7CiAKIAkvKgogCSAqIDEgZm9yIHRoZSBwb3NzaWJsZSBvcnBoYW4gaXRlbQpAQCAtNDA1NywyNyArNDA1NSw3IEBACiAJICogMSBmb3IgdGhlIGlub2RlIHJlZgogCSAqIDEgZm9yIHRoZSBpbm9kZQogCSAqLwotCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgNSk7Ci0JaWYgKCFJU19FUlIodHJhbnMpIHx8IFBUUl9FUlIodHJhbnMpICE9IC1FTk9TUEMpCi0JCXJldHVybiB0cmFuczsKLQotCWlmIChQVFJfRVJSKHRyYW5zKSA9PSAtRU5PU1BDKSB7Ci0JCXU2NCBudW1fYnl0ZXMgPSBidHJmc19jYWxjX3RyYW5zX21ldGFkYXRhX3NpemUocm9vdCwgNSk7Ci0KLQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKLQkJaWYgKElTX0VSUih0cmFucykpCi0JCQlyZXR1cm4gdHJhbnM7Ci0JCXJldCA9IGJ0cmZzX2NvbmRfbWlncmF0ZV9ieXRlcyhyb290LT5mc19pbmZvLAotCQkJCQkgICAgICAgJnJvb3QtPmZzX2luZm8tPnRyYW5zX2Jsb2NrX3JzdiwKLQkJCQkJICAgICAgIG51bV9ieXRlcywgNSk7Ci0JCWlmIChyZXQpIHsKLQkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQlyZXR1cm4gRVJSX1BUUihyZXQpOwotCQl9Ci0JCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfYmxvY2tfcnN2OwotCQl0cmFucy0+Ynl0ZXNfcmVzZXJ2ZWQgPSBudW1fYnl0ZXM7Ci0JfQotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb25fZmFsbGJhY2tfZ2xvYmFsX3Jzdihyb290LCA1LCA1KTsKIH0KIAogc3RhdGljIGludCBidHJmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3Fncm91cC5jIGIvZnMvYnRyZnMvcWdyb3VwLmMKaW5kZXggOTNlMTJjMS4uNTI3OWZkYSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcWdyb3VwLmMKKysrIGIvZnMvYnRyZnMvcWdyb3VwLmMKQEAgLTk5Myw5ICs5OTMsMTAgQEAKIAltdXRleF9sb2NrKCZmc19pbmZvLT5xZ3JvdXBfaW9jdGxfbG9jayk7CiAJaWYgKCFmc19pbmZvLT5xdW90YV9yb290KQogCQlnb3RvIG91dDsKLQlzcGluX2xvY2soJmZzX2luZm8tPnFncm91cF9sb2NrKTsKIAlmc19pbmZvLT5xdW90YV9lbmFibGVkID0gMDsKIAlmc19pbmZvLT5wZW5kaW5nX3F1b3RhX3N0YXRlID0gMDsKKwlidHJmc19xZ3JvdXBfd2FpdF9mb3JfY29tcGxldGlvbihmc19pbmZvKTsKKwlzcGluX2xvY2soJmZzX2luZm8tPnFncm91cF9sb2NrKTsKIAlxdW90YV9yb290ID0gZnNfaW5mby0+cXVvdGFfcm9vdDsKIAlmc19pbmZvLT5xdW90YV9yb290ID0gTlVMTDsKIAlmc19pbmZvLT5xZ3JvdXBfZmxhZ3MgJj0gfkJUUkZTX1FHUk9VUF9TVEFUVVNfRkxBR19PTjsKQEAgLTE0NjEsNiArMTQ2Miw4IEBACiAJc3RydWN0IGJ0cmZzX3Fncm91cF9leHRlbnRfcmVjb3JkICplbnRyeTsKIAl1NjQgYnl0ZW5yID0gcmVjb3JkLT5ieXRlbnI7CiAKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisKIAl3aGlsZSAoKnApIHsKIAkJcGFyZW50X25vZGUgPSAqcDsKIAkJZW50cnkgPSByYl9lbnRyeShwYXJlbnRfbm9kZSwgc3RydWN0IGJ0cmZzX3Fncm91cF9leHRlbnRfcmVjb3JkLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc2NydWIuYyBiL2ZzL2J0cmZzL3NjcnViLmMKaW5kZXggMjkwN2E3Ny4uYjA5MWQ5NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc2NydWIuYworKysgYi9mcy9idHJmcy9zY3J1Yi5jCkBAIC0zNDMyLDcgKzM0MzIsOSBAQAogc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgc2NydWJfY2h1bmsoc3RydWN0IHNjcnViX2N0eCAqc2N0eCwKIAkJCQkJICBzdHJ1Y3QgYnRyZnNfZGV2aWNlICpzY3J1Yl9kZXYsCiAJCQkJCSAgdTY0IGNodW5rX29mZnNldCwgdTY0IGxlbmd0aCwKLQkJCQkJICB1NjQgZGV2X29mZnNldCwgaW50IGlzX2Rldl9yZXBsYWNlKQorCQkJCQkgIHU2NCBkZXZfb2Zmc2V0LAorCQkJCQkgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUsCisJCQkJCSAgaW50IGlzX2Rldl9yZXBsYWNlKQogewogCXN0cnVjdCBidHJmc19tYXBwaW5nX3RyZWUgKm1hcF90cmVlID0KIAkJJnNjdHgtPmRldl9yb290LT5mc19pbmZvLT5tYXBwaW5nX3RyZWU7CkBAIC0zNDQ1LDggKzM0NDcsMTggQEAKIAllbSA9IGxvb2t1cF9leHRlbnRfbWFwcGluZygmbWFwX3RyZWUtPm1hcF90cmVlLCBjaHVua19vZmZzZXQsIDEpOwogCXJlYWRfdW5sb2NrKCZtYXBfdHJlZS0+bWFwX3RyZWUubG9jayk7CiAKLQlpZiAoIWVtKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWVtKSB7CisJCS8qCisJCSAqIE1pZ2h0IGhhdmUgYmVlbiBhbiB1bnVzZWQgYmxvY2sgZ3JvdXAgZGVsZXRlZCBieSB0aGUgY2xlYW5lcgorCQkgKiBrdGhyZWFkIG9yIHJlbG9jYXRpb24uCisJCSAqLworCQlzcGluX2xvY2soJmNhY2hlLT5sb2NrKTsKKwkJaWYgKCFjYWNoZS0+cmVtb3ZlZCkKKwkJCXJldCA9IC1FSU5WQUw7CisJCXNwaW5fdW5sb2NrKCZjYWNoZS0+bG9jayk7CisKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAltYXAgPSAoc3RydWN0IG1hcF9sb29rdXAgKillbS0+YmRldjsKIAlpZiAoZW0tPnN0YXJ0ICE9IGNodW5rX29mZnNldCkKQEAgLTM0ODMsNiArMzQ5NSw3IEBACiAJdTY0IGxlbmd0aDsKIAl1NjQgY2h1bmtfb2Zmc2V0OwogCWludCByZXQgPSAwOworCWludCByb19zZXQ7CiAJaW50IHNsb3Q7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmw7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CkBAIC0zNTY4LDcgKzM1ODEsMjEgQEAKIAkJc2NydWJfcGF1c2Vfb24oZnNfaW5mbyk7CiAJCXJldCA9IGJ0cmZzX2luY19ibG9ja19ncm91cF9ybyhyb290LCBjYWNoZSk7CiAJCXNjcnViX3BhdXNlX29mZihmc19pbmZvKTsKLQkJaWYgKHJldCkgeworCisJCWlmIChyZXQgPT0gMCkgeworCQkJcm9fc2V0ID0gMTsKKwkJfSBlbHNlIGlmIChyZXQgPT0gLUVOT1NQQykgeworCQkJLyoKKwkJCSAqIGJ0cmZzX2luY19ibG9ja19ncm91cF9ybyByZXR1cm4gLUVOT1NQQyB3aGVuIGl0CisJCQkgKiBmYWlsZWQgaW4gY3JlYXRpbmcgbmV3IGNodW5rIGZvciBtZXRhZGF0YS4KKwkJCSAqIEl0IGlzIG5vdCBhIHByb2JsZW0gZm9yIHNjcnViL3JlcGxhY2UsIGJlY2F1c2UKKwkJCSAqIG1ldGFkYXRhIGFyZSBhbHdheXMgY293ZWQsIGFuZCBvdXIgc2NydWIgcGF1c2VkCisJCQkgKiBjb21taXRfdHJhbnNhY3Rpb25zLgorCQkJICovCisJCQlyb19zZXQgPSAwOworCQl9IGVsc2UgeworCQkJYnRyZnNfd2Fybihmc19pbmZvLCAiZmFpbGVkIHNldHRpbmcgYmxvY2sgZ3JvdXAgcm8sIHJldD0lZFxuIiwKKwkJCQkgICByZXQpOwogCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zNTc3LDcgKzM2MDQsNyBAQAogCQlkZXZfcmVwbGFjZS0+Y3Vyc29yX2xlZnQgPSBmb3VuZF9rZXkub2Zmc2V0OwogCQlkZXZfcmVwbGFjZS0+aXRlbV9uZWVkc193cml0ZWJhY2sgPSAxOwogCQlyZXQgPSBzY3J1Yl9jaHVuayhzY3R4LCBzY3J1Yl9kZXYsIGNodW5rX29mZnNldCwgbGVuZ3RoLAotCQkJCSAgZm91bmRfa2V5Lm9mZnNldCwgaXNfZGV2X3JlcGxhY2UpOworCQkJCSAgZm91bmRfa2V5Lm9mZnNldCwgY2FjaGUsIGlzX2Rldl9yZXBsYWNlKTsKIAogCQkvKgogCQkgKiBmbHVzaCwgc3VibWl0IGFsbCBwZW5kaW5nIHJlYWQgYW5kIHdyaXRlIGJpb3MsIGFmdGVyd2FyZHMKQEAgLTM2MTEsNyArMzYzOCwzMCBAQAogCiAJCXNjcnViX3BhdXNlX29mZihmc19pbmZvKTsKIAotCQlidHJmc19kZWNfYmxvY2tfZ3JvdXBfcm8ocm9vdCwgY2FjaGUpOworCQlpZiAocm9fc2V0KQorCQkJYnRyZnNfZGVjX2Jsb2NrX2dyb3VwX3JvKHJvb3QsIGNhY2hlKTsKKworCQkvKgorCQkgKiBXZSBtaWdodCBoYXZlIHByZXZlbnRlZCB0aGUgY2xlYW5lciBrdGhyZWFkIGZyb20gZGVsZXRpbmcKKwkJICogdGhpcyBibG9jayBncm91cCBpZiBpdCB3YXMgYWxyZWFkeSB1bnVzZWQgYmVjYXVzZSB3ZSByYWNlZAorCQkgKiBhbmQgc2V0IGl0IHRvIFJPIG1vZGUgZmlyc3QuIFNvIGFkZCBpdCBiYWNrIHRvIHRoZSB1bnVzZWQKKwkJICogbGlzdCwgb3RoZXJ3aXNlIGl0IG1pZ2h0IG5vdCBldmVyIGJlIGRlbGV0ZWQgdW5sZXNzIGEgbWFudWFsCisJCSAqIGJhbGFuY2UgaXMgdHJpZ2dlcmVkIG9yIGl0IGJlY29tZXMgdXNlZCBhbmQgdW51c2VkIGFnYWluLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZjYWNoZS0+bG9jayk7CisJCWlmICghY2FjaGUtPnJlbW92ZWQgJiYgIWNhY2hlLT5ybyAmJiBjYWNoZS0+cmVzZXJ2ZWQgPT0gMCAmJgorCQkgICAgYnRyZnNfYmxvY2tfZ3JvdXBfdXNlZCgmY2FjaGUtPml0ZW0pID09IDApIHsKKwkJCXNwaW5fdW5sb2NrKCZjYWNoZS0+bG9jayk7CisJCQlzcGluX2xvY2soJmZzX2luZm8tPnVudXNlZF9iZ3NfbG9jayk7CisJCQlpZiAobGlzdF9lbXB0eSgmY2FjaGUtPmJnX2xpc3QpKSB7CisJCQkJYnRyZnNfZ2V0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZjYWNoZS0+YmdfbGlzdCwKKwkJCQkJICAgICAgJmZzX2luZm8tPnVudXNlZF9iZ3MpOworCQkJfQorCQkJc3Bpbl91bmxvY2soJmZzX2luZm8tPnVudXNlZF9iZ3NfbG9jayk7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9jaygmY2FjaGUtPmxvY2spOworCQl9CiAKIAkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3Rlc3RzL2ZyZWUtc3BhY2UtdGVzdHMuYyBiL2ZzL2J0cmZzL3Rlc3RzL2ZyZWUtc3BhY2UtdGVzdHMuYwppbmRleCBjOGMzZDcwLi44YjcyYjAwIDEwMDY0NAotLS0gYS9mcy9idHJmcy90ZXN0cy9mcmVlLXNwYWNlLXRlc3RzLmMKKysrIGIvZnMvYnRyZnMvdGVzdHMvZnJlZS1zcGFjZS10ZXN0cy5jCkBAIC04OTgsOCArODk4LDEwIEBACiAJfQogCiAJcm9vdCA9IGJ0cmZzX2FsbG9jX2R1bW15X3Jvb3QoKTsKLQlpZiAoIXJvb3QpCisJaWYgKElTX0VSUihyb290KSkgeworCQlyZXQgPSBQVFJfRVJSKHJvb3QpOwogCQlnb3RvIG91dDsKKwl9CiAKIAlyb290LT5mc19pbmZvID0gYnRyZnNfYWxsb2NfZHVtbXlfZnNfaW5mbygpOwogCWlmICghcm9vdC0+ZnNfaW5mbykKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IDQxOGM2YTIuLmJlOGVhZTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMjc0LDcgKzI3NCw2IEBACiAJY3VyX3RyYW5zLT5udW1fZGlydHlfYmdzID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmY3VyX3RyYW5zLT5kaXJ0eV9iZ3NfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmN1cl90cmFucy0+ZGVsZXRlZF9iZ3MpOwotCXNwaW5fbG9ja19pbml0KCZjdXJfdHJhbnMtPmRlbGV0ZWRfYmdzX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjdXJfdHJhbnMtPmRyb3BwZWRfcm9vdHNfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmY3VyX3RyYW5zLT5saXN0LCAmZnNfaW5mby0+dHJhbnNfbGlzdCk7CiAJZXh0ZW50X2lvX3RyZWVfaW5pdCgmY3VyX3RyYW5zLT5kaXJ0eV9wYWdlcywKQEAgLTU5Miw2ICs1OTEsMzggQEAKIAlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgbnVtX2l0ZW1zLCBUUkFOU19TVEFSVCwKIAkJCQkgQlRSRlNfUkVTRVJWRV9GTFVTSF9BTEwpOwogfQorc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb25fZmFsbGJhY2tfZ2xvYmFsX3JzdigKKwkJCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXVuc2lnbmVkIGludCBudW1faXRlbXMsCisJCQkJCWludCBtaW5fZmFjdG9yKQoreworCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOworCXU2NCBudW1fYnl0ZXM7CisJaW50IHJldDsKKworCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgbnVtX2l0ZW1zKTsKKwlpZiAoIUlTX0VSUih0cmFucykgfHwgUFRSX0VSUih0cmFucykgIT0gLUVOT1NQQykKKwkJcmV0dXJuIHRyYW5zOworCisJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIHRyYW5zOworCisJbnVtX2J5dGVzID0gYnRyZnNfY2FsY190cmFuc19tZXRhZGF0YV9zaXplKHJvb3QsIG51bV9pdGVtcyk7CisJcmV0ID0gYnRyZnNfY29uZF9taWdyYXRlX2J5dGVzKHJvb3QtPmZzX2luZm8sCisJCQkJICAgICAgICZyb290LT5mc19pbmZvLT50cmFuc19ibG9ja19yc3YsCisJCQkJICAgICAgIG51bV9ieXRlcywKKwkJCQkgICAgICAgbWluX2ZhY3Rvcik7CisJaWYgKHJldCkgeworCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfYmxvY2tfcnN2OworCXRyYW5zLT5ieXRlc19yZXNlcnZlZCA9IG51bV9ieXRlczsKKworCXJldHVybiB0cmFuczsKK30KIAogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb25fbGZsdXNoKAogCQkJCQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IGIwNWIyZjYuLjY0YzgyMjEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtNzcsOCArNzcsOCBAQAogCSAqLwogCXN0cnVjdCBtdXRleCBjYWNoZV93cml0ZV9tdXRleDsKIAlzcGlubG9ja190IGRpcnR5X2Jnc19sb2NrOworCS8qIFByb3RlY3RlZCBieSBzcGluIGxvY2sgZnNfaW5mby0+dW51c2VkX2Jnc19sb2NrLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZGVsZXRlZF9iZ3M7Ci0Jc3BpbmxvY2tfdCBkZWxldGVkX2Jnc19sb2NrOwogCXNwaW5sb2NrX3QgZHJvcHBlZF9yb290c19sb2NrOwogCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9yb290IGRlbGF5ZWRfcmVmczsKIAlpbnQgYWJvcnRlZDsKQEAgLTE4NSw2ICsxODUsMTAgQEAKIAkJCSAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX2l0ZW1zKTsKK3N0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uX2ZhbGxiYWNrX2dsb2JhbF9yc3YoCisJCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQl1bnNpZ25lZCBpbnQgbnVtX2l0ZW1zLAorCQkJCQlpbnQgbWluX2ZhY3Rvcik7CiBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19zdGFydF90cmFuc2FjdGlvbl9sZmx1c2goCiAJCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQl1bnNpZ25lZCBpbnQgbnVtX2l0ZW1zKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuYyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwppbmRleCBhNmRmOGZkLi5hMjMzOTllIDEwMDY0NAotLS0gYS9mcy9idHJmcy92b2x1bWVzLmMKKysrIGIvZnMvYnRyZnMvdm9sdW1lcy5jCkBAIC0xOTczLDggKzE5NzMsNyBAQAogCWlmIChzcmNkZXYtPndyaXRlYWJsZSkgewogCQlmc19kZXZpY2VzLT5yd19kZXZpY2VzLS07CiAJCS8qIHplcm8gb3V0IHRoZSBvbGQgc3VwZXIgaWYgaXQgaXMgd3JpdGFibGUgKi8KLQkJYnRyZnNfc2NyYXRjaF9zdXBlcmJsb2NrcyhzcmNkZXYtPmJkZXYsCi0JCQkJCXJjdV9zdHJfZGVyZWYoc3JjZGV2LT5uYW1lKSk7CisJCWJ0cmZzX3NjcmF0Y2hfc3VwZXJibG9ja3Moc3JjZGV2LT5iZGV2LCBzcmNkZXYtPm5hbWUtPnN0cik7CiAJfQogCiAJaWYgKHNyY2Rldi0+YmRldikKQEAgLTIwMjQsOCArMjAyMyw3IEBACiAJYnRyZnNfc3lzZnNfcm1fZGV2aWNlX2xpbmsoZnNfaW5mby0+ZnNfZGV2aWNlcywgdGd0ZGV2KTsKIAogCWlmICh0Z3RkZXYtPmJkZXYpIHsKLQkJYnRyZnNfc2NyYXRjaF9zdXBlcmJsb2Nrcyh0Z3RkZXYtPmJkZXYsCi0JCQkJCXJjdV9zdHJfZGVyZWYodGd0ZGV2LT5uYW1lKSk7CisJCWJ0cmZzX3NjcmF0Y2hfc3VwZXJibG9ja3ModGd0ZGV2LT5iZGV2LCB0Z3RkZXYtPm5hbWUtPnN0cik7CiAJCWZzX2luZm8tPmZzX2RldmljZXMtPm9wZW5fZGV2aWNlcy0tOwogCX0KIAlmc19pbmZvLT5mc19kZXZpY2VzLT5udW1fZGV2aWNlcy0tOwpAQCAtMjg1Myw3ICsyODUxLDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zX3JlbW92ZV9ibG9ja19ncm91cChyb290LT5mc19pbmZvLAorCQkJCQkJICAgICBjaHVua19vZmZzZXQpOwogCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCXJldCA9IFBUUl9FUlIodHJhbnMpOwogCQlidHJmc19zdGRfZXJyb3Iocm9vdC0+ZnNfaW5mbywgcmV0LCBOVUxMKTsKQEAgLTMxMjMsNyArMzEyMiw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgY2h1bmtfdXNhZ2VfZmlsdGVyKHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLCB1NjQgY2h1bmtfb2Zmc2V0LAorc3RhdGljIGludCBjaHVua191c2FnZV9yYW5nZV9maWx0ZXIoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sIHU2NCBjaHVua19vZmZzZXQsCiAJCQkgICAgICBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9hcmdzICpiYXJncykKIHsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlOwpAQCAtMzE1Niw3ICszMTU1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGNodW5rX3VzYWdlX3JhbmdlX2ZpbHRlcihzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbywKK3N0YXRpYyBpbnQgY2h1bmtfdXNhZ2VfZmlsdGVyKHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLAogCQl1NjQgY2h1bmtfb2Zmc2V0LCBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9hcmdzICpiYXJncykKIHsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlOwpAQCAtMzU0OSwxMiArMzU0OCwxMSBAQAogCiAJCQlyZXQgPSBidHJmc19mb3JjZV9jaHVua19hbGxvYyh0cmFucywgY2h1bmtfcm9vdCwKIAkJCQkJCSAgICAgIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEpOworCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCBjaHVua19yb290KTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT5kZWxldGVfdW51c2VkX2Jnc19tdXRleCk7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KLQotCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCBjaHVua19yb290KTsKIAkJCWNodW5rX3Jlc2VydmVkID0gMTsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmggYi9mcy9idHJmcy92b2x1bWVzLmgKaW5kZXggZWM1NzEyMy4uZDVjODRmNiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5oCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuaApAQCAtMzgyLDcgKzM4Miw3IEBACiAjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfQVJHU19MSU1JVAkoMVVMTCA8PCA1KQogI2RlZmluZSBCVFJGU19CQUxBTkNFX0FSR1NfTElNSVRfUkFOR0UJKDFVTEwgPDwgNikKICNkZWZpbmUgQlRSRlNfQkFMQU5DRV9BUkdTX1NUUklQRVNfUkFOR0UgKDFVTEwgPDwgNykKLSNkZWZpbmUgQlRSRlNfQkFMQU5DRV9BUkdTX1VTQUdFX1JBTkdFCSgxVUxMIDw8IDgpCisjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfQVJHU19VU0FHRV9SQU5HRQkoMVVMTCA8PCAxMCkKIAogI2RlZmluZSBCVFJGU19CQUxBTkNFX0FSR1NfTUFTSwkJCVwKIAkoQlRSRlNfQkFMQU5DRV9BUkdTX1BST0ZJTEVTIHwJCVwKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvcmR3ci5jIGIvZnMvY2FjaGVmaWxlcy9yZHdyLmMKaW5kZXggN2E2YjAyZi4uYzBmM2RhMyAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9yZHdyLmMKKysrIGIvZnMvY2FjaGVmaWxlcy9yZHdyLmMKQEAgLTg3OSw3ICs4NzksNyBAQAogCWxvZmZfdCBwb3MsIGVvZjsKIAlzaXplX3QgbGVuOwogCXZvaWQgKmRhdGE7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVOT0JVRlM7CiAKIAlBU1NFUlQob3AgIT0gTlVMTCk7CiAJQVNTRVJUKHBhZ2UgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggNmI2NmRkNS4uYTMyOWY1YiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtMTgzMSwxMSArMTgzMSwxMSBAQAogICogQHdvcmQ6IGxvbmcgd29yZCBjb250YWluaW5nIHRoZSBiaXQgbG9jawogICovCiBzdGF0aWMgaW50Ci1jaWZzX3dhaXRfYml0X2tpbGxhYmxlKHN0cnVjdCB3YWl0X2JpdF9rZXkgKmtleSkKK2NpZnNfd2FpdF9iaXRfa2lsbGFibGUoc3RydWN0IHdhaXRfYml0X2tleSAqa2V5LCBpbnQgbW9kZSkKIHsKLQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJZnJlZXphYmxlX3NjaGVkdWxlX3Vuc2FmZSgpOworCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShtb2RlLCBjdXJyZW50KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCBjODFjZTdmLi5hN2ExYjIxIDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9kaXIuYworKysgYi9mcy9jb25maWdmcy9kaXIuYwpAQCAtMTYzNiw2ICsxNjM2LDExNiBAQAogCS5pdGVyYXRlCT0gY29uZmlnZnNfcmVhZGRpciwKIH07CiAKKy8qKgorICogY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAgLSBjcmVhdGVzIGEgcGFyZW50LWNoaWxkIHJlbGF0aW9uIGJldHdlZW4gdHdvIGdyb3VwcworICogQHBhcmVudF9ncm91cDoJcGFyZW50IGdyb3VwCisgKiBAZ3JvdXA6CQljaGlsZCBncm91cAorICoKKyAqIGxpbmsgZ3JvdXBzLCBjcmVhdGVzIGRlbnRyeSBmb3IgdGhlIGNoaWxkIGFuZCBhdHRhY2hlcyBpdCB0byB0aGUKKyAqIHBhcmVudCBkZW50cnkuCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZXJyb3IKKyAqLworaW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKnBhcmVudF9ncm91cCwKKwkJCSAgICBzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCkKK3sKKwlzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMgPSBwYXJlbnRfZ3JvdXAtPmNnX3N1YnN5czsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnN1YnN5cy0+c3VfbXV0ZXgpOworCWxpbmtfZ3JvdXAocGFyZW50X2dyb3VwLCBncm91cCk7CisJbXV0ZXhfdW5sb2NrKCZzdWJzeXMtPnN1X211dGV4KTsKKworCXBhcmVudCA9IHBhcmVudF9ncm91cC0+Y2dfaXRlbS5jaV9kZW50cnk7CisKKwltdXRleF9sb2NrX25lc3RlZCgmZF9pbm9kZShwYXJlbnQpLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7CisJcmV0ID0gY3JlYXRlX2RlZmF1bHRfZ3JvdXAocGFyZW50X2dyb3VwLCBncm91cCk7CisJaWYgKCFyZXQpIHsKKwkJc3Bpbl9sb2NrKCZjb25maWdmc19kaXJlbnRfbG9jayk7CisJCWNvbmZpZ2ZzX2Rpcl9zZXRfcmVhZHkoZ3JvdXAtPmNnX2l0ZW0uY2lfZGVudHJ5LT5kX2ZzZGF0YSk7CisJCXNwaW5fdW5sb2NrKCZjb25maWdmc19kaXJlbnRfbG9jayk7CisJfQorCW11dGV4X3VubG9jaygmZF9pbm9kZShwYXJlbnQpLT5pX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjb25maWdmc19yZWdpc3Rlcl9ncm91cCk7CisKKy8qKgorICogY29uZmlnZnNfdW5yZWdpc3Rlcl9ncm91cCgpIC0gdW5yZWdpc3RlcnMgYSBjaGlsZCBncm91cCBmcm9tIGl0cyBwYXJlbnQKKyAqIEBncm91cDogcGFyZW50IGdyb3VwIHRvIGJlIHVucmVnaXN0ZXJlZAorICoKKyAqIFVuZG9lcyBjb25maWdmc19yZWdpc3Rlcl9ncm91cCgpCisgKi8KK3ZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCkKK3sKKwlzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMgPSBncm91cC0+Y2dfc3Vic3lzOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGdyb3VwLT5jZ19pdGVtLmNpX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBncm91cC0+Y2dfaXRlbS5jaV9wYXJlbnQtPmNpX2RlbnRyeTsKKworCW11dGV4X2xvY2tfbmVzdGVkKCZkX2lub2RlKHBhcmVudCktPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKKwlzcGluX2xvY2soJmNvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKKwljb25maWdmc19kZXRhY2hfcHJlcChkZW50cnksIE5VTEwpOworCXNwaW5fdW5sb2NrKCZjb25maWdmc19kaXJlbnRfbG9jayk7CisKKwljb25maWdmc19kZXRhY2hfZ3JvdXAoJmdyb3VwLT5jZ19pdGVtKTsKKwlkX2lub2RlKGRlbnRyeSktPmlfZmxhZ3MgfD0gU19ERUFEOworCWRvbnRfbW91bnQoZGVudHJ5KTsKKwlkX2RlbGV0ZShkZW50cnkpOworCW11dGV4X3VubG9jaygmZF9pbm9kZShwYXJlbnQpLT5pX211dGV4KTsKKworCWRwdXQoZGVudHJ5KTsKKworCW11dGV4X2xvY2soJnN1YnN5cy0+c3VfbXV0ZXgpOworCXVubGlua19ncm91cChncm91cCk7CisJbXV0ZXhfdW5sb2NrKCZzdWJzeXMtPnN1X211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woY29uZmlnZnNfdW5yZWdpc3Rlcl9ncm91cCk7CisKKy8qKgorICogY29uZmlnZnNfcmVnaXN0ZXJfZGVmYXVsdF9ncm91cCgpIC0gYWxsb2NhdGVzIGFuZCByZWdpc3RlcnMgYSBjaGlsZCBncm91cAorICogQHBhcmVudF9ncm91cDoJcGFyZW50IGdyb3VwCisgKiBAbmFtZToJCWNoaWxkIGdyb3VwIG5hbWUKKyAqIEBpdGVtX3R5cGU6CQljaGlsZCBpdGVtIHR5cGUgZGVzY3JpcHRpb24KKyAqCisgKiBib2lsZXJwbGF0ZSB0byBhbGxvY2F0ZSBhbmQgcmVnaXN0ZXIgYSBjaGlsZCBncm91cCB3aXRoIGl0cyBwYXJlbnQuIFdlIG5lZWQKKyAqIGt6YWxsb2MnZWQgbWVtb3J5IGJlY2F1c2UgY2hpbGQncyBkZWZhdWx0X2dyb3VwIGlzIGluaXRpYWxseSBlbXB0eS4KKyAqCisgKiBSZXR1cm46IGFsbG9jYXRlZCBjb25maWcgZ3JvdXAgb3IgRVJSX1BUUigpIG9uIGVycm9yCisgKi8KK3N0cnVjdCBjb25maWdfZ3JvdXAgKgorY29uZmlnZnNfcmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpwYXJlbnRfZ3JvdXAsCisJCQkJY29uc3QgY2hhciAqbmFtZSwKKwkJCQlzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqaXRlbV90eXBlKQoreworCWludCByZXQ7CisJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXA7CisKKwlncm91cCA9IGt6YWxsb2Moc2l6ZW9mKCpncm91cCksIEdGUF9LRVJORUwpOworCWlmICghZ3JvdXApCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZShncm91cCwgbmFtZSwgaXRlbV90eXBlKTsKKworCXJldCA9IGNvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKHBhcmVudF9ncm91cCwgZ3JvdXApOworCWlmIChyZXQpIHsKKwkJa2ZyZWUoZ3JvdXApOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gZ3JvdXA7Cit9CitFWFBPUlRfU1lNQk9MKGNvbmZpZ2ZzX3JlZ2lzdGVyX2RlZmF1bHRfZ3JvdXApOworCisvKioKKyAqIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cCgpIC0gdW5yZWdpc3RlcnMgYW5kIGZyZWVzIGEgY2hpbGQgZ3JvdXAKKyAqIEBncm91cDoJdGhlIGdyb3VwIHRvIGFjdCBvbgorICovCit2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCkKK3sKKwljb25maWdmc191bnJlZ2lzdGVyX2dyb3VwKGdyb3VwKTsKKwlrZnJlZShncm91cCk7Cit9CitFWFBPUlRfU1lNQk9MKGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cCk7CisKIGludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jCmluZGV4IGQxZTVjYjcuLjQzNjcxYjYgMTAwNjQ0Ci0tLSBhL2ZzL2RheC5jCisrKyBiL2ZzL2RheC5jCkBAIC01NDEsNiArNTQxLDEwIEBACiAJdW5zaWduZWQgbG9uZyBwZm47CiAJaW50IHJlc3VsdCA9IDA7CiAKKwkvKiBkYXggcG1kIG1hcHBpbmdzIGFyZSBicm9rZW4gd3J0IGd1cCBhbmQgZm9yayAqLworCWlmICghSVNfRU5BQkxFRChDT05GSUdfRlNfREFYX1BNRCkpCisJCXJldHVybiBWTV9GQVVMVF9GQUxMQkFDSzsKKwogCS8qIEZhbGwgYmFjayB0byBQVEVzIGlmIHdlJ3JlIGdvaW5nIHRvIENPVyAqLwogCWlmICh3cml0ZSAmJiAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQogCQlyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7CmRpZmYgLS1naXQgYS9mcy9kaXJlY3QtaW8uYyBiL2ZzL2RpcmVjdC1pby5jCmluZGV4IGNiNTMzN2QuLjYwMmU4NDQgMTAwNjQ0Ci0tLSBhL2ZzL2RpcmVjdC1pby5jCisrKyBiL2ZzL2RpcmVjdC1pby5jCkBAIC0xMTY5LDYgKzExNjksMTYgQEAKIAkJfQogCX0KIAorCS8qIE9uY2Ugd2Ugc2FtcGxlZCBpX3NpemUgY2hlY2sgZm9yIHJlYWRzIGJleW9uZCBFT0YgKi8KKwlkaW8tPmlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gUkVBRCAmJiBvZmZzZXQgPj0gZGlvLT5pX3NpemUpIHsKKwkJaWYgKGRpby0+ZmxhZ3MgJiBESU9fTE9DS0lORykKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQlrbWVtX2NhY2hlX2ZyZWUoZGlvX2NhY2hlLCBkaW8pOworCQlyZXR2YWwgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAkvKgogCSAqIEZvciBmaWxlIGV4dGVuZGluZyB3cml0ZXMgdXBkYXRpbmcgaV9zaXplIGJlZm9yZSBkYXRhIHdyaXRlb3V0cwogCSAqIGNvbXBsZXRlIGNhbiBleHBvc2UgdW5pbml0aWFsaXplZCBibG9ja3MgaW4gZHVtYiBmaWxlc3lzdGVtcy4KQEAgLTEyMjIsNyArMTIzMiw2IEBACiAJc2Rpby5uZXh0X2Jsb2NrX2Zvcl9pbyA9IC0xOwogCiAJZGlvLT5pb2NiID0gaW9jYjsKLQlkaW8tPmlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAogCXNwaW5fbG9ja19pbml0KCZkaW8tPmJpb19sb2NrKTsKIAlkaW8tPnJlZmNvdW50ID0gMTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggODdlOWQ3OS4uM2EzN2JkMyAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDRl9BUFBfTElNSVRFRCwgJmNvbi0+ZmxhZ3MpKSB7CiAJCWNvbi0+c29jay0+c2stPnNrX3dyaXRlX3BlbmRpbmctLTsKLQkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJmNvbi0+c29jay0+ZmxhZ3MpOworCQljbGVhcl9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsICZjb24tPnNvY2stPmZsYWdzKTsKIAl9CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQ0ZfV1JJVEVfUEVORElORywgJmNvbi0+ZmxhZ3MpKQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAKIAkJCQkJICAgICAgbXNnX2ZsYWdzKTsKIAkJCWlmIChyZXQgPT0gLUVBR0FJTiB8fCByZXQgPT0gMCkgewogCQkJCWlmIChyZXQgPT0gLUVBR0FJTiAmJgotCQkJCSAgICB0ZXN0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZjb24tPnNvY2stPmZsYWdzKSAmJgorCQkJCSAgICB0ZXN0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgJmNvbi0+c29jay0+ZmxhZ3MpICYmCiAJCQkJICAgICF0ZXN0X2FuZF9zZXRfYml0KENGX0FQUF9MSU1JVEVELCAmY29uLT5mbGFncykpIHsKIAkJCQkJLyogTm90aWZ5IFRDUCB0aGF0IHdlJ3JlIGxpbWl0ZWQgYnkgdGhlCiAJCQkJCSAqIGFwcGxpY2F0aW9uIHdpbmRvdyBzaXplLgpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvaW5vZGUuYyBiL2ZzL2V4b2ZzL2lub2RlLmMKaW5kZXggNzNjNjRkYS4uNjBmMDNiNyAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvaW5vZGUuYworKysgYi9mcy9leG9mcy9pbm9kZS5jCkBAIC01OTIsMTAgKzU5Miw3IEBACiAJCQl9CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQotCQlpZiAoUGFnZURpcnR5KHBhZ2UpIHx8IFBhZ2VXcml0ZWJhY2socGFnZSkpCi0JCQkqdXB0b2RhdGUgPSB0cnVlOwotCQllbHNlCi0JCQkqdXB0b2RhdGUgPSBQYWdlVXB0b2RhdGUocGFnZSk7CisJCSp1cHRvZGF0ZSA9IFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJRVhPRlNfREJHTVNHMigiaW5kZXg9MHglbHggdXB0b2RhdGU9JWRcbiIsIGluZGV4LCAqdXB0b2RhdGUpOwogCQlyZXR1cm4gcGFnZTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IDNhNzFjZWEuLjc0OGQzNWEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTU2OSw2ICs1NjksOCBAQAogCQkJLyogRmFsbCB0aHJvdWdoICovCiAJCWNhc2UgT3B0X2RheDoKICNpZmRlZiBDT05GSUdfRlNfREFYCisJCQlleHQyX21zZyhzYiwgS0VSTl9XQVJOSU5HLAorCQkiREFYIGVuYWJsZWQuIFdhcm5pbmc6IEVYUEVSSU1FTlRBTCwgdXNlIGF0IHlvdXIgb3duIHJpc2siKTsKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgREFYKTsKICNlbHNlCiAJCQlleHQyX21zZyhzYiwgS0VSTl9JTkZPLCAiZGF4IG9wdGlvbiBub3Qgc3VwcG9ydGVkIik7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2NyeXB0by5jIGIvZnMvZXh0NC9jcnlwdG8uYwppbmRleCBhZjA2ODMwLi4xYTA4MzUwIDEwMDY0NAotLS0gYS9mcy9leHQ0L2NyeXB0by5jCisrKyBiL2ZzL2V4dDQvY3J5cHRvLmMKQEAgLTM4OSw3ICszODksNyBAQAogCXN0cnVjdCBleHQ0X2NyeXB0b19jdHgJKmN0eDsKIAlzdHJ1Y3QgcGFnZQkJKmNpcGhlcnRleHRfcGFnZSA9IE5VTEw7CiAJc3RydWN0IGJpbwkJKmJpbzsKLQlleHQ0X2xibGtfdAkJbGJsayA9IGV4LT5lZV9ibG9jazsKKwlleHQ0X2xibGtfdAkJbGJsayA9IGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jayk7CiAJZXh0NF9mc2Jsa190CQlwYmxrID0gZXh0NF9leHRfcGJsb2NrKGV4KTsKIAl1bnNpZ25lZCBpbnQJCWxlbiA9IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTsKIAlpbnQJCQlyZXQsIGVyciA9IDA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDc1MDA2M2YuLmNjN2NhNGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdV9jb3VudGVyLmg+CkBAIC03MjcsMTkgKzcyOCw1NSBAQAogCTw9IChFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgKwkJCVwKIAkgICAgKGVpbm9kZSktPmlfZXh0cmFfaXNpemUpKQkJCVwKIAorLyoKKyAqIFdlIHVzZSBhbiBlbmNvZGluZyB0aGF0IHByZXNlcnZlcyB0aGUgdGltZXMgZm9yIGV4dHJhIGVwb2NoICIwMCI6CisgKgorICogZXh0cmEgIG1zYiBvZiAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3QgZm9yIHNpZ25lZAorICogZXBvY2ggIDMyLWJpdCAgICAgICAgICAgICAgICAgICAgICAgICAzMi1iaXQgdHZfc2VjIHRvCisgKiBiaXRzICAgdGltZSAgICBkZWNvZGVkIDY0LWJpdCB0dl9zZWMgIDY0LWJpdCB0dl9zZWMgICAgICB2YWxpZCB0aW1lIHJhbmdlCisgKiAwIDAgICAgMSAgICAtMHg4MDAwMDAwMC4uLTB4MDAwMDAwMDEgIDB4MDAwMDAwMDAwIDE5MDEtMTItMTMuLjE5NjktMTItMzEKKyAqIDAgMCAgICAwICAgIDB4MDAwMDAwMDAwLi4weDA3ZmZmZmZmZiAgMHgwMDAwMDAwMDAgMTk3MC0wMS0wMS4uMjAzOC0wMS0xOQorICogMCAxICAgIDEgICAgMHgwODAwMDAwMDAuLjB4MGZmZmZmZmZmICAweDEwMDAwMDAwMCAyMDM4LTAxLTE5Li4yMTA2LTAyLTA3CisgKiAwIDEgICAgMCAgICAweDEwMDAwMDAwMC4uMHgxN2ZmZmZmZmYgIDB4MTAwMDAwMDAwIDIxMDYtMDItMDcuLjIxNzQtMDItMjUKKyAqIDEgMCAgICAxICAgIDB4MTgwMDAwMDAwLi4weDFmZmZmZmZmZiAgMHgyMDAwMDAwMDAgMjE3NC0wMi0yNS4uMjI0Mi0wMy0xNgorICogMSAwICAgIDAgICAgMHgyMDAwMDAwMDAuLjB4MjdmZmZmZmZmICAweDIwMDAwMDAwMCAyMjQyLTAzLTE2Li4yMzEwLTA0LTA0CisgKiAxIDEgICAgMSAgICAweDI4MDAwMDAwMC4uMHgyZmZmZmZmZmYgIDB4MzAwMDAwMDAwIDIzMTAtMDQtMDQuLjIzNzgtMDQtMjIKKyAqIDEgMSAgICAwICAgIDB4MzAwMDAwMDAwLi4weDM3ZmZmZmZmZiAgMHgzMDAwMDAwMDAgMjM3OC0wNC0yMi4uMjQ0Ni0wNS0xMAorICoKKyAqIE5vdGUgdGhhdCBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUga2VybmVsIG9uIDY0LWJpdCBzeXN0ZW1zIHdvdWxkCisgKiBpbmNvcnJlY3RseSB1c2UgZXh0cmEgZXBvY2ggYml0cyAxLDEgZm9yIGRhdGVzIGJldHdlZW4gMTkwMSBhbmQKKyAqIDE5NzAuICBlMmZzY2sgd2lsbCBjb3JyZWN0IHRoaXMsIGFzc3VtaW5nIHRoYXQgaXQgaXMgcnVuIG9uIHRoZQorICogYWZmZWN0ZWQgZmlsZXN5c3RlbSBiZWZvcmUgMjI0Mi4KKyAqLworCiBzdGF0aWMgaW5saW5lIF9fbGUzMiBleHQ0X2VuY29kZV9leHRyYV90aW1lKHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKIHsKLSAgICAgICByZXR1cm4gY3B1X3RvX2xlMzIoKHNpemVvZih0aW1lLT50dl9zZWMpID4gNCA/Ci0JCQkgICAodGltZS0+dHZfc2VjID4+IDMyKSAmIEVYVDRfRVBPQ0hfTUFTSyA6IDApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh0aW1lLT50dl9uc2VjIDw8IEVYVDRfRVBPQ0hfQklUUykgJiBFWFQ0X05TRUNfTUFTSykpOworCXUzMiBleHRyYSA9IHNpemVvZih0aW1lLT50dl9zZWMpID4gNCA/CisJCSgodGltZS0+dHZfc2VjIC0gKHMzMil0aW1lLT50dl9zZWMpID4+IDMyKSAmIEVYVDRfRVBPQ0hfTUFTSyA6IDA7CisJcmV0dXJuIGNwdV90b19sZTMyKGV4dHJhIHwgKHRpbWUtPnR2X25zZWMgPDwgRVhUNF9FUE9DSF9CSVRTKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2RlY29kZV9leHRyYV90aW1lKHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgX19sZTMyIGV4dHJhKQogewotICAgICAgIGlmIChzaXplb2YodGltZS0+dHZfc2VjKSA+IDQpCi0JICAgICAgIHRpbWUtPnR2X3NlYyB8PSAoX191NjQpKGxlMzJfdG9fY3B1KGV4dHJhKSAmIEVYVDRfRVBPQ0hfTUFTSykKLQkJCSAgICAgICA8PCAzMjsKLSAgICAgICB0aW1lLT50dl9uc2VjID0gKGxlMzJfdG9fY3B1KGV4dHJhKSAmIEVYVDRfTlNFQ19NQVNLKSA+PiBFWFQ0X0VQT0NIX0JJVFM7CisJaWYgKHVubGlrZWx5KHNpemVvZih0aW1lLT50dl9zZWMpID4gNCAmJgorCQkJKGV4dHJhICYgY3B1X3RvX2xlMzIoRVhUNF9FUE9DSF9NQVNLKSkpKSB7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oNCwyMCwwKQorCQkvKiBIYW5kbGUgbGVnYWN5IGVuY29kaW5nIG9mIHByZS0xOTcwIGRhdGVzIHdpdGggZXBvY2gKKwkJICogYml0cyAxLDEuICBXZSBhc3N1bWUgdGhhdCBieSBrZXJuZWwgdmVyc2lvbiA0LjIwLAorCQkgKiBldmVyeW9uZSB3aWxsIGhhdmUgcnVuIGZzY2sgb3ZlciB0aGUgYWZmZWN0ZWQKKwkJICogZmlsZXN5c3RlbXMgdG8gY29ycmVjdCB0aGUgcHJvYmxlbS4gIChUaGlzCisJCSAqIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1heSBiZSByZW1vdmVkIGJlZm9yZSB0aGlzCisJCSAqIHRpbWUsIGF0IHRoZSBkaXNjcmV0aW9uIG9mIHRoZSBleHQ0IGRldmVsb3BlcnMuKQorCQkgKi8KKwkJdTY0IGV4dHJhX2JpdHMgPSBsZTMyX3RvX2NwdShleHRyYSkgJiBFWFQ0X0VQT0NIX01BU0s7CisJCWlmIChleHRyYV9iaXRzID09IDMgJiYgKCh0aW1lLT50dl9zZWMpICYgMHg4MDAwMDAwMCkgIT0gMCkKKwkJCWV4dHJhX2JpdHMgPSAwOworCQl0aW1lLT50dl9zZWMgKz0gZXh0cmFfYml0cyA8PCAzMjsKKyNlbHNlCisJCXRpbWUtPnR2X3NlYyArPSAodTY0KShsZTMyX3RvX2NwdShleHRyYSkgJiBFWFQ0X0VQT0NIX01BU0spIDw8IDMyOworI2VuZGlmCisJfQorCXRpbWUtPnR2X25zZWMgPSAobGUzMl90b19jcHUoZXh0cmEpICYgRVhUNF9OU0VDX01BU0spID4+IEVYVDRfRVBPQ0hfQklUUzsKIH0KIAogI2RlZmluZSBFWFQ0X0lOT0RFX1NFVF9YVElNRSh4dGltZSwgaW5vZGUsIHJhd19pbm9kZSkJCQkgICAgICAgXApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDc1M2Y0ZTYuLmM5YWI2N2QgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTE2NjQsOCArMTY2NCwxMiBAQAogCQl9CiAJCXNiaS0+c19qcXVvdGFfZm10ID0gbS0+bW91bnRfb3B0OwogI2VuZGlmCi0jaWZuZGVmIENPTkZJR19GU19EQVgKIAl9IGVsc2UgaWYgKHRva2VuID09IE9wdF9kYXgpIHsKKyNpZmRlZiBDT05GSUdfRlNfREFYCisJCWV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsCisJCSJEQVggZW5hYmxlZC4gV2FybmluZzogRVhQRVJJTUVOVEFMLCB1c2UgYXQgeW91ciBvd24gcmlzayIpOworCQkJc2JpLT5zX21vdW50X29wdCB8PSBtLT5tb3VudF9vcHQ7CisjZWxzZQogCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAiZGF4IG9wdGlvbiBub3Qgc3VwcG9ydGVkIik7CiAJCXJldHVybiAtMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zeW1saW5rLmMgYi9mcy9leHQ0L3N5bWxpbmsuYwppbmRleCBhYmUyNDAxLi5lOGU3YWY2IDEwMDY0NAotLS0gYS9mcy9leHQ0L3N5bWxpbmsuYworKysgYi9mcy9leHQ0L3N5bWxpbmsuYwpAQCAtNTIsNyArNTIsNyBAQAogCS8qIFN5bWxpbmsgaXMgZW5jcnlwdGVkICovCiAJc2QgPSAoc3RydWN0IGV4dDRfZW5jcnlwdGVkX3N5bWxpbmtfZGF0YSAqKWNhZGRyOwogCWNzdHIubmFtZSA9IHNkLT5lbmNyeXB0ZWRfcGF0aDsKLQljc3RyLmxlbiAgPSBsZTMyX3RvX2NwdShzZC0+bGVuKTsKKwljc3RyLmxlbiAgPSBsZTE2X3RvX2NwdShzZC0+bGVuKTsKIAlpZiAoKGNzdHIubGVuICsKIAkgICAgIHNpemVvZihzdHJ1Y3QgZXh0NF9lbmNyeXB0ZWRfc3ltbGlua19kYXRhKSAtIDEpID4KIAkgICAgbWF4X3NpemUpIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3lzZnMuYyBiL2ZzL2V4dDQvc3lzZnMuYwppbmRleCAxYjU3YzcyLi4xNDIwYTNjIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N5c2ZzLmMKKysrIGIvZnMvZXh0NC9zeXNmcy5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZXh0NF9zZXFfIyNuYW1lIyNfc2hvdywgUERFX0RBVEEoaW5vZGUpKTsgXAogfSBcCiBcCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfc2VxXyMjbmFtZSMjX2ZvcHMgPSB7IFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfc2VxXyMjbmFtZSMjX2ZvcHMgPSB7IFwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsIFwKIAkub3BlbgkJPSBuYW1lIyNfb3BlbiwgXAogCS5yZWFkCQk9IHNlcV9yZWFkLCBcCmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmMKaW5kZXggNGFmYzRkOS4uOGIyMTI3ZiAxMDA2NDQKLS0tIGEvZnMvZmF0L2Rpci5jCisrKyBiL2ZzL2ZhdC9kaXIuYwpAQCAtNjEwLDkgKzYxMCw5IEBACiAJCWludCBzdGF0dXMgPSBmYXRfcGFyc2VfbG9uZyhpbm9kZSwgJmNwb3MsICZiaCwgJmRlLAogCQkJCQkgICAgJnVuaWNvZGUsICZucl9zbG90cyk7CiAJCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQljdHgtPnBvcyA9IGNwb3M7CisJCQliaCA9IE5VTEw7CiAJCQlyZXQgPSBzdGF0dXM7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZW5kX29mX2RpcjsKIAkJfSBlbHNlIGlmIChzdGF0dXMgPT0gUEFSU0VfSU5WQUxJRCkKIAkJCWdvdG8gcmVjb3JkX2VuZDsKIAkJZWxzZSBpZiAoc3RhdHVzID09IFBBUlNFX05PVF9MT05HTkFNRSkKQEAgLTY1NCw4ICs2NTQsOSBAQAogCWZpbGxfbGVuID0gc2hvcnRfbGVuOwogCiBzdGFydF9maWxsZGlyOgotCWlmICghZmFrZV9vZmZzZXQpCi0JCWN0eC0+cG9zID0gY3BvcyAtIChucl9zbG90cyArIDEpICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpOworCWN0eC0+cG9zID0gY3BvcyAtIChucl9zbG90cyArIDEpICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpOworCWlmIChmYWtlX29mZnNldCAmJiBjdHgtPnBvcyA8IDIpCisJCWN0eC0+cG9zID0gMjsKIAogCWlmICghbWVtY21wKGRlLT5uYW1lLCBNU0RPU19ET1QsIE1TRE9TX05BTUUpKSB7CiAJCWlmICghZGlyX2VtaXRfZG90KGZpbGUsIGN0eCkpCkBAIC02ODEsMTQgKzY4MiwxOSBAQAogCWZha2Vfb2Zmc2V0ID0gMDsKIAljdHgtPnBvcyA9IGNwb3M7CiAJZ290byBnZXRfbmV3OworCiBlbmRfb2ZfZGlyOgotCWN0eC0+cG9zID0gY3BvczsKKwlpZiAoZmFrZV9vZmZzZXQgJiYgY3BvcyA8IDIpCisJCWN0eC0+cG9zID0gMjsKKwllbHNlCisJCWN0eC0+cG9zID0gY3BvczsKIGZpbGxfZmFpbGVkOgogCWJyZWxzZShiaCk7CiAJaWYgKHVuaWNvZGUpCiAJCV9fcHV0bmFtZSh1bmljb2RlKTsKIG91dDoKIAltdXRleF91bmxvY2soJnNiaS0+c19sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvY3VzZS5jIGIvZnMvZnVzZS9jdXNlLmMKaW5kZXggZWFlMmMxMS4uOGUzZWUxOSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9jdXNlLmMKKysrIGIvZnMvZnVzZS9jdXNlLmMKQEAgLTU0OSw2ICs1NDksOCBAQAogCQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oY2MtPmNkZXYtPmRldiwgMSk7CiAJCWNkZXZfZGVsKGNjLT5jZGV2KTsKIAl9CisJLyogQmFzZSByZWZlcmVuY2UgaXMgbm93IG93bmVkIGJ5ICJmdWQiICovCisJZnVzZV9jb25uX3B1dCgmY2MtPmZjKTsKIAogCXJjID0gZnVzZV9kZXZfcmVsZWFzZShpbm9kZSwgZmlsZSk7CS8qIHB1dHMgdGhlIGJhc2UgcmVmZXJlbmNlICovCiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggZTBmYWY4Zi4uNTcwY2E0MCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTEwNDksNiArMTA0OSw3IEBACiAJCXRtcCA9IGlvdl9pdGVyX2NvcHlfZnJvbV91c2VyX2F0b21pYyhwYWdlLCBpaSwgb2Zmc2V0LCBieXRlcyk7CiAJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCisJCWlvdl9pdGVyX2FkdmFuY2UoaWksIHRtcCk7CiAJCWlmICghdG1wKSB7CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKQEAgLTEwNjEsNyArMTA2Miw2IEBACiAJCXJlcS0+cGFnZV9kZXNjc1tyZXEtPm51bV9wYWdlc10ubGVuZ3RoID0gdG1wOwogCQlyZXEtPm51bV9wYWdlcysrOwogCi0JCWlvdl9pdGVyX2FkdmFuY2UoaWksIHRtcCk7CiAJCWNvdW50ICs9IHRtcDsKIAkJcG9zICs9IHRtcDsKIAkJb2Zmc2V0ICs9IHRtcDsKZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggMzE2YWRiOS4uZGU0YmRmYSAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTMzMiwxMiArMzMyLDE3IEBACiAgKiB0cnVuY2F0aW9uIGlzIGluZGljYXRlZCBieSBlbmQgb2YgcmFuZ2UgYmVpbmcgTExPTkdfTUFYCiAgKglJbiB0aGlzIGNhc2UsIHdlIGZpcnN0IHNjYW4gdGhlIHJhbmdlIGFuZCByZWxlYXNlIGZvdW5kIHBhZ2VzLgogICoJQWZ0ZXIgcmVsZWFzaW5nIHBhZ2VzLCBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyBjbGVhbnMgdXAgcmVnaW9uL3Jlc2VydgotICoJbWFwcyBhbmQgZ2xvYmFsIGNvdW50cy4KKyAqCW1hcHMgYW5kIGdsb2JhbCBjb3VudHMuICBQYWdlIGZhdWx0cyBjYW4gbm90IHJhY2Ugd2l0aCB0cnVuY2F0aW9uCisgKglpbiB0aGlzIHJvdXRpbmUuICBodWdldGxiX25vX3BhZ2UoKSBwcmV2ZW50cyBwYWdlIGZhdWx0cyBpbiB0aGUKKyAqCXRydW5jYXRlZCByYW5nZS4gIEl0IGNoZWNrcyBpX3NpemUgYmVmb3JlIGFsbG9jYXRpb24sIGFuZCBhZ2FpbiBhZnRlcgorICoJd2l0aCB0aGUgcGFnZSB0YWJsZSBsb2NrIGZvciB0aGUgcGFnZSBoZWxkLiAgVGhlIHNhbWUgbG9jayBtdXN0IGJlCisgKglhY3F1aXJlZCB0byB1bm1hcCBhIHBhZ2UuCiAgKiBob2xlIHB1bmNoIGlzIGluZGljYXRlZCBpZiBlbmQgaXMgbm90IExMT05HX01BWAogICoJSW4gdGhlIGhvbGUgcHVuY2ggY2FzZSB3ZSBzY2FuIHRoZSByYW5nZSBhbmQgcmVsZWFzZSBmb3VuZCBwYWdlcy4KICAqCU9ubHkgd2hlbiByZWxlYXNpbmcgYSBwYWdlIGlzIHRoZSBhc3NvY2lhdGVkIHJlZ2lvbi9yZXNlcnYgbWFwCiAgKglkZWxldGVkLiAgVGhlIHJlZ2lvbi9yZXNlcnYgbWFwIGZvciByYW5nZXMgd2l0aG91dCBhc3NvY2lhdGVkCi0gKglwYWdlcyBhcmUgbm90IG1vZGlmaWVkLgorICoJcGFnZXMgYXJlIG5vdCBtb2RpZmllZC4gIFBhZ2UgZmF1bHRzIGNhbiByYWNlIHdpdGggaG9sZSBwdW5jaC4KKyAqCVRoaXMgaXMgaW5kaWNhdGVkIGlmIHdlIGZpbmQgYSBtYXBwZWQgcGFnZS4KICAqIE5vdGU6IElmIHRoZSBwYXNzZWQgZW5kIG9mIHJhbmdlIHZhbHVlIGlzIGJleW9uZCB0aGUgZW5kIG9mIGZpbGUsIGJ1dAogICogbm90IExMT05HX01BWCB0aGlzIHJvdXRpbmUgc3RpbGwgcGVyZm9ybXMgYSBob2xlIHB1bmNoIG9wZXJhdGlvbi4KICAqLwpAQCAtMzYxLDQ2ICszNjYsMzcgQEAKIAluZXh0ID0gc3RhcnQ7CiAJd2hpbGUgKG5leHQgPCBlbmQpIHsKIAkJLyoKLQkJICogTWFrZSBzdXJlIHRvIG5ldmVyIGdyYWIgbW9yZSBwYWdlcyB0aGF0IHdlCi0JCSAqIG1pZ2h0IHBvc3NpYmx5IG5lZWQuCisJCSAqIERvbid0IGdyYWIgbW9yZSBwYWdlcyB0aGFuIHRoZSBudW1iZXIgbGVmdCBpbiB0aGUgcmFuZ2UuCiAJCSAqLwogCQlpZiAoZW5kIC0gbmV4dCA8IGxvb2t1cF9ucikKIAkJCWxvb2t1cF9uciA9IGVuZCAtIG5leHQ7CiAKIAkJLyoKLQkJICogVGhpcyBwYWdldmVjX2xvb2t1cCgpIG1heSByZXR1cm4gcGFnZXMgcGFzdCAnZW5kJywKLQkJICogc28gd2UgbXVzdCBjaGVjayBmb3IgcGFnZS0+aW5kZXggPiBlbmQuCisJCSAqIFdoZW4gbm8gbW9yZSBwYWdlcyBhcmUgZm91bmQsIHdlIGFyZSBkb25lLgogCQkgKi8KLQkJaWYgKCFwYWdldmVjX2xvb2t1cCgmcHZlYywgbWFwcGluZywgbmV4dCwgbG9va3VwX25yKSkgewotCQkJaWYgKG5leHQgPT0gc3RhcnQpCi0JCQkJYnJlYWs7Ci0JCQluZXh0ID0gc3RhcnQ7Ci0JCQljb250aW51ZTsKLQkJfQorCQlpZiAoIXBhZ2V2ZWNfbG9va3VwKCZwdmVjLCBtYXBwaW5nLCBuZXh0LCBsb29rdXBfbnIpKQorCQkJYnJlYWs7CiAKIAkJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQoJnB2ZWMpOyArK2kpIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKIAkJCXUzMiBoYXNoOwogCisJCQkvKgorCQkJICogVGhlIHBhZ2UgKGluZGV4KSBjb3VsZCBiZSBiZXlvbmQgZW5kLiAgVGhpcyBpcworCQkJICogb25seSBwb3NzaWJsZSBpbiB0aGUgcHVuY2ggaG9sZSBjYXNlIGFzIGVuZCBpcworCQkJICogbWF4IHBhZ2Ugb2Zmc2V0IGluIHRoZSB0cnVuY2F0ZSBjYXNlLgorCQkJICovCisJCQluZXh0ID0gcGFnZS0+aW5kZXg7CisJCQlpZiAobmV4dCA+PSBlbmQpCisJCQkJYnJlYWs7CisKIAkJCWhhc2ggPSBodWdldGxiX2ZhdWx0X211dGV4X2hhc2goaCwgY3VycmVudC0+bW0sCiAJCQkJCQkJJnBzZXVkb192bWEsCiAJCQkJCQkJbWFwcGluZywgbmV4dCwgMCk7CiAJCQltdXRleF9sb2NrKCZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTsKIAogCQkJbG9ja19wYWdlKHBhZ2UpOwotCQkJaWYgKHBhZ2UtPmluZGV4ID49IGVuZCkgewotCQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJCW11dGV4X3VubG9jaygmaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7Ci0JCQkJbmV4dCA9IGVuZDsJLyogd2UgYXJlIGRvbmUgKi8KLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIElmIHBhZ2UgaXMgbWFwcGVkLCBpdCB3YXMgZmF1bHRlZCBpbiBhZnRlciBiZWluZwotCQkJICogdW5tYXBwZWQuICBEbyBub3RoaW5nIGluIHRoaXMgcmFjZSBjYXNlLiAgSW4gdGhlCi0JCQkgKiBub3JtYWwgY2FzZSBwYWdlIGlzIG5vdCBtYXBwZWQuCi0JCQkgKi8KLQkJCWlmICghcGFnZV9tYXBwZWQocGFnZSkpIHsKKwkJCWlmIChsaWtlbHkoIXBhZ2VfbWFwcGVkKHBhZ2UpKSkgewogCQkJCWJvb2wgcnN2X29uX2Vycm9yID0gIVBhZ2VQcml2YXRlKHBhZ2UpOwogCQkJCS8qCiAJCQkJICogV2UgbXVzdCBmcmVlIHRoZSBodWdlIHBhZ2UgYW5kIHJlbW92ZQpAQCAtNDIxLDE3ICs0MTcsMjMgQEAKIAkJCQkJCWh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKAogCQkJCQkJCWlub2RlLCByc3Zfb25fZXJyb3IpOwogCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBJZiBwYWdlIGlzIG1hcHBlZCwgaXQgd2FzIGZhdWx0ZWQgaW4gYWZ0ZXIKKwkJCQkgKiBiZWluZyB1bm1hcHBlZC4gIEl0IGluZGljYXRlcyBhIHJhY2UgYmV0d2VlbgorCQkJCSAqIGhvbGUgcHVuY2ggYW5kIHBhZ2UgZmF1bHQuICBEbyBub3RoaW5nIGluCisJCQkJICogdGhpcyBjYXNlLiAgR2V0dGluZyBoZXJlIGluIGEgdHJ1bmNhdGUKKwkJCQkgKiBvcGVyYXRpb24gaXMgYSBidWcuCisJCQkJICovCisJCQkJQlVHX09OKHRydW5jYXRlX29wKTsKIAkJCX0KIAotCQkJaWYgKHBhZ2UtPmluZGV4ID4gbmV4dCkKLQkJCQluZXh0ID0gcGFnZS0+aW5kZXg7Ci0KLQkJCSsrbmV4dDsKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwotCiAJCQltdXRleF91bmxvY2soJmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOwogCQl9CisJCSsrbmV4dDsKIAkJaHVnZV9wYWdldmVjX3JlbGVhc2UoJnB2ZWMpOworCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKIAlpZiAodHJ1bmNhdGVfb3ApCkBAIC02NDcsOSArNjQ5LDYgQEAKIAlpZiAoIShtb2RlICYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgJiYgb2Zmc2V0ICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBsZW4pOwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JaW5vZGUtPmlfcHJpdmF0ZSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogb3V0OgogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCA4OTQ2M2VlLi5jYTE4MWU4IDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC0xMDA5LDcgKzEwMDksOCBAQAogfQogCiAvKiBGYXN0IGNoZWNrIHdoZXRoZXIgYnVmZmVyIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlIHJlcXVpcmVkIHRyYW5zYWN0aW9uICovCi1zdGF0aWMgYm9vbCBqYmQyX3dyaXRlX2FjY2Vzc19ncmFudGVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCitzdGF0aWMgYm9vbCBqYmQyX3dyaXRlX2FjY2Vzc19ncmFudGVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkJCQkJYm9vbCB1bmRvKQogewogCXN0cnVjdCBqb3VybmFsX2hlYWQgKmpoOwogCWJvb2wgcmV0ID0gZmFsc2U7CkBAIC0xMDM2LDYgKzEwMzcsOSBAQAogCWpoID0gUkVBRF9PTkNFKGJoLT5iX3ByaXZhdGUpOwogCWlmICghamgpCiAJCWdvdG8gb3V0OworCS8qIEZvciB1bmRvIGFjY2VzcyBidWZmZXIgbXVzdCBoYXZlIGRhdGEgY29waWVkICovCisJaWYgKHVuZG8gJiYgIWpoLT5iX2NvbW1pdHRlZF9kYXRhKQorCQlnb3RvIG91dDsKIAlpZiAoamgtPmJfdHJhbnNhY3Rpb24gIT0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uICYmCiAJICAgIGpoLT5iX25leHRfdHJhbnNhY3Rpb24gIT0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uKQogCQlnb3RvIG91dDsKQEAgLTEwNzMsNyArMTA3Nyw3IEBACiAJc3RydWN0IGpvdXJuYWxfaGVhZCAqamg7CiAJaW50IHJjOwogCi0JaWYgKGpiZDJfd3JpdGVfYWNjZXNzX2dyYW50ZWQoaGFuZGxlLCBiaCkpCisJaWYgKGpiZDJfd3JpdGVfYWNjZXNzX2dyYW50ZWQoaGFuZGxlLCBiaCwgZmFsc2UpKQogCQlyZXR1cm4gMDsKIAogCWpoID0gamJkMl9qb3VybmFsX2FkZF9qb3VybmFsX2hlYWQoYmgpOwpAQCAtMTIxMCw3ICsxMjE0LDcgQEAKIAljaGFyICpjb21taXR0ZWRfZGF0YSA9IE5VTEw7CiAKIAlKQlVGRkVSX1RSQUNFKGpoLCAiZW50cnkiKTsKLQlpZiAoamJkMl93cml0ZV9hY2Nlc3NfZ3JhbnRlZChoYW5kbGUsIGJoKSkKKwlpZiAoamJkMl93cml0ZV9hY2Nlc3NfZ3JhbnRlZChoYW5kbGUsIGJoLCB0cnVlKSkKIAkJcmV0dXJuIDA7CiAKIAlqaCA9IGpiZDJfam91cm5hbF9hZGRfam91cm5hbF9oZWFkKGJoKTsKQEAgLTIxNTIsNiArMjE1Niw3IEBACiAKIAkJaWYgKCFidWZmZXJfZGlydHkoYmgpKSB7CiAJCQkvKiBiZGZsdXNoIGhhcyB3cml0dGVuIGl0LiAgV2UgY2FuIGRyb3AgaXQgbm93ICovCisJCQlfX2piZDJfam91cm5hbF9yZW1vdmVfY2hlY2twb2ludChqaCk7CiAJCQlnb3RvIHphcF9idWZmZXI7CiAJCX0KIApAQCAtMjE4MSw2ICsyMTg2LDcgQEAKIAkJCQkvKiBUaGUgb3JwaGFuIHJlY29yZCdzIHRyYW5zYWN0aW9uIGhhcwogCQkJCSAqIGNvbW1pdHRlZC4gIFdlIGNhbiBjbGVhbnNlIHRoaXMgYnVmZmVyICovCiAJCQkJY2xlYXJfYnVmZmVyX2piZGRpcnR5KGJoKTsKKwkJCQlfX2piZDJfam91cm5hbF9yZW1vdmVfY2hlY2twb2ludChqaCk7CiAJCQkJZ290byB6YXBfYnVmZmVyOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCBkODRkN2M3Li4wYzM5NzRjIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTE5OTYsNyArMTk5Niw2IEBACiAJbmQtPmxhc3RfdHlwZSA9IExBU1RfUk9PVDsgLyogaWYgdGhlcmUgYXJlIG9ubHkgc2xhc2hlcy4uLiAqLwogCW5kLT5mbGFncyA9IGZsYWdzIHwgTE9PS1VQX0pVTVBFRCB8IExPT0tVUF9QQVJFTlQ7CiAJbmQtPmRlcHRoID0gMDsKLQluZC0+dG90YWxfbGlua19jb3VudCA9IDA7CiAJaWYgKGZsYWdzICYgTE9PS1VQX1JPT1QpIHsKIAkJc3RydWN0IGRlbnRyeSAqcm9vdCA9IG5kLT5yb290LmRlbnRyeTsKIAkJc3RydWN0IGlub2RlICppbm9kZSA9IHJvb3QtPmRfaW5vZGU7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9pb2N0bC5jIGIvZnMvbmNwZnMvaW9jdGwuYwppbmRleCA3OWIxMTMwLi4wYTNmOWI1IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9pb2N0bC5jCisrKyBiL2ZzL25jcGZzL2lvY3RsLmMKQEAgLTUyNSw2ICs1MjUsOCBAQAogCQkJc3dpdGNoIChycWRhdGEuY21kKSB7CiAJCQkJY2FzZSBOQ1BfTE9DS19FWDoKIAkJCQljYXNlIE5DUF9MT0NLX1NIOgorCQkJCQkJaWYgKHJxZGF0YS50aW1lb3V0IDwgMCkKKwkJCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQkJCWlmIChycWRhdGEudGltZW91dCA9PSAwKQogCQkJCQkJCXJxZGF0YS50aW1lb3V0ID0gTkNQX0xPQ0tfREVGQVVMVF9USU1FT1VUOwogCQkJCQkJZWxzZSBpZiAocnFkYXRhLnRpbWVvdXQgPiBOQ1BfTE9DS19NQVhfVElNRU9VVCkKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggMzI2ZDllMS4uYzdlOGI4NyAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTc1LDExICs3NSwxMSBAQAogICogbmZzX3dhaXRfYml0X2tpbGxhYmxlIC0gaGVscGVyIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgc2xlZXBpbmcgb24gYml0IGxvY2tzCiAgKiBAd29yZDogbG9uZyB3b3JkIGNvbnRhaW5pbmcgdGhlIGJpdCBsb2NrCiAgKi8KLWludCBuZnNfd2FpdF9iaXRfa2lsbGFibGUoc3RydWN0IHdhaXRfYml0X2tleSAqa2V5KQoraW50IG5mc193YWl0X2JpdF9raWxsYWJsZShzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICprZXksIGludCBtb2RlKQogewotCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAlmcmVlemFibGVfc2NoZWR1bGVfdW5zYWZlKCk7CisJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKG1vZGUsIGN1cnJlbnQpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZzX3dhaXRfYml0X2tpbGxhYmxlKTsKQEAgLTYxOCw3ICs2MTgsMTAgQEAKIAkJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX1NFVEFUVFJUUlVOQyk7CiAJCW5mc192bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKIAl9Ci0JbmZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOworCWlmIChmYXR0ci0+dmFsaWQpCisJCW5mc191cGRhdGVfaW5vZGUoaW5vZGUsIGZhdHRyKTsKKwllbHNlCisJCU5GU19JKGlub2RlKS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZzX3NldGF0dHJfdXBkYXRlX2lub2RlKTsKQEAgLTE4MjQsNyArMTgyNywxMSBAQAogCQlpZiAoKGxvbmcpZmF0dHItPmdlbmNvdW50IC0gKGxvbmcpbmZzaS0+YXR0cl9nZW5jb3VudCA+IDApCiAJCQluZnNpLT5hdHRyX2dlbmNvdW50ID0gZmF0dHItPmdlbmNvdW50OwogCX0KLQlpbnZhbGlkICY9IH5ORlNfSU5PX0lOVkFMSURfQVRUUjsKKworCS8qIERvbid0IGRlY2xhcmUgYXR0cmNhY2hlIHVwIHRvIGRhdGUgaWYgdGhlcmUgd2VyZSBubyBhdHRycyEgKi8KKwlpZiAoZmF0dHItPnZhbGlkICE9IDApCisJCWludmFsaWQgJj0gfk5GU19JTk9fSU5WQUxJRF9BVFRSOworCiAJLyogRG9uJ3QgaW52YWxpZGF0ZSB0aGUgZGF0YSBpZiB3ZSB3ZXJlIHRvIGJsYW1lICovCiAJaWYgKCEoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fCBTX0lTRElSKGlub2RlLT5pX21vZGUpCiAJCQkJfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkpCmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oCmluZGV4IDU2Y2ZkZTIuLjlkZWE4NWYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oCkBAIC0zNzksNyArMzc5LDcgQEAKIGV4dGVybiB2b2lkIG5mc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBuZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogdm9pZCBuZnNfemFwX2FjbF9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWV4dGVybiBpbnQgbmZzX3dhaXRfYml0X2tpbGxhYmxlKHN0cnVjdCB3YWl0X2JpdF9rZXkgKmtleSk7CitleHRlcm4gaW50IG5mc193YWl0X2JpdF9raWxsYWJsZShzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICprZXksIGludCBtb2RlKTsKIAogLyogc3VwZXIuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG5mc19zb3BzOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczQycHJvYy5jIGIvZnMvbmZzL25mczQycHJvYy5jCmluZGV4IDNlOTJhM2MuLjZiMWNlOTggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0MnByb2MuYworKysgYi9mcy9uZnMvbmZzNDJwcm9jLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlICJwbmZzLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotI2RlZmluZSBORlNEQkdfRkFDSUxJVFkgTkZTREJHX1BORlMKKyNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZIE5GU0RCR19QUk9DCiAKIHN0YXRpYyBpbnQgbmZzNDJfc2V0X3J3X3N0YXRlaWQobmZzNF9zdGF0ZWlkICpkc3QsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCWZtb2RlX3QgZm1vZGUpCkBAIC0yODQsNiArMjg0LDcgQEAKIAkJLmRzdF9maCA9IE5GU19GSChkc3RfaW5vZGUpLAogCQkuc3JjX29mZnNldCA9IHNyY19vZmZzZXQsCiAJCS5kc3Rfb2Zmc2V0ID0gZHN0X29mZnNldCwKKwkJLmNvdW50ID0gY291bnQsCiAJCS5kc3RfYml0bWFzayA9IHNlcnZlci0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFzaywKIAl9OwogCXN0cnVjdCBuZnM0Ml9jbG9uZV9yZXMgcmVzID0gewpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRjbGllbnQuYyBiL2ZzL25mcy9uZnM0Y2xpZW50LmMKaW5kZXggMjIzYmVkZC4uMTA0MTBlOCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRjbGllbnQuYworKysgYi9mcy9uZnMvbmZzNGNsaWVudC5jCkBAIC0zMyw3ICszMyw3IEBACiAJCXJldHVybiByZXQ7CiAJaWRyX3ByZWxvYWQoR0ZQX0tFUk5FTCk7CiAJc3Bpbl9sb2NrKCZubi0+bmZzX2NsaWVudF9sb2NrKTsKLQlyZXQgPSBpZHJfYWxsb2MoJm5uLT5jYl9pZGVudF9pZHIsIGNscCwgMCwgMCwgR0ZQX05PV0FJVCk7CisJcmV0ID0gaWRyX2FsbG9jKCZubi0+Y2JfaWRlbnRfaWRyLCBjbHAsIDEsIDAsIEdGUF9OT1dBSVQpOwogCWlmIChyZXQgPj0gMCkKIAkJY2xwLT5jbF9jYl9pZGVudCA9IHJldDsKIAlzcGluX3VubG9jaygmbm4tPm5mc19jbGllbnRfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGZpbGUuYyBiL2ZzL25mcy9uZnM0ZmlsZS5jCmluZGV4IDRhYTU3MTkuLmRiOWI1ZmUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0ZmlsZS5jCisrKyBiL2ZzL25mcy9uZnM0ZmlsZS5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9mYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L2J0cmZzLmg+CS8qIEJUUkZTX0lPQ19DTE9ORS9CVFJGU19JT0NfQ0xPTkVfUkFOR0UgKi8KICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJpb3N0YXQuaCIKQEAgLTIwMyw2ICsyMDQsNyBAQAogCXN0cnVjdCBmZCBzcmNfZmlsZTsKIAlzdHJ1Y3QgaW5vZGUgKnNyY19pbm9kZTsKIAl1bnNpZ25lZCBpbnQgYnMgPSBzZXJ2ZXItPmNsb25lX2Jsa3NpemU7CisJYm9vbCBzYW1lX2lub2RlID0gZmFsc2U7CiAJaW50IHJldDsKIAogCS8qIGRzdCBmaWxlIG11c3QgYmUgb3BlbmVkIGZvciB3cml0aW5nICovCkBAIC0yMjEsMTAgKzIyMyw4IEBACiAKIAlzcmNfaW5vZGUgPSBmaWxlX2lub2RlKHNyY19maWxlLmZpbGUpOwogCi0JLyogc3JjIGFuZCBkc3QgbXVzdCBiZSBkaWZmZXJlbnQgZmlsZXMgKi8KLQlyZXQgPSAtRUlOVkFMOwogCWlmIChzcmNfaW5vZGUgPT0gZHN0X2lub2RlKQotCQlnb3RvIG91dF9mcHV0OworCQlzYW1lX2lub2RlID0gdHJ1ZTsKIAogCS8qIHNyYyBmaWxlIG11c3QgYmUgb3BlbmVkIGZvciByZWFkaW5nICovCiAJaWYgKCEoc3JjX2ZpbGUuZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCkBAIC0yNDksOCArMjQ5LDE2IEBACiAJCQlnb3RvIG91dF9mcHV0OwogCX0KIAorCS8qIHZlcmlmeSBpZiByYW5nZXMgYXJlIG92ZXJsYXBwZWQgd2l0aGluIHRoZSBzYW1lIGZpbGUgKi8KKwlpZiAoc2FtZV9pbm9kZSkgeworCQlpZiAoZHN0X29mZiArIGNvdW50ID4gc3JjX29mZiAmJiBkc3Rfb2ZmIDwgc3JjX29mZiArIGNvdW50KQorCQkJZ290byBvdXRfZnB1dDsKKwl9CisKIAkvKiBYWFg6IGRvIHdlIGxvY2sgYXQgYWxsPyB3aGF0IGlmIHNlcnZlciBuZWVkcyBDQl9SRUNBTExfTEFZT1VUPyAqLwotCWlmIChkc3RfaW5vZGUgPCBzcmNfaW5vZGUpIHsKKwlpZiAoc2FtZV9pbm9kZSkgeworCQltdXRleF9sb2NrKCZzcmNfaW5vZGUtPmlfbXV0ZXgpOworCX0gZWxzZSBpZiAoZHN0X2lub2RlIDwgc3JjX2lub2RlKSB7CiAJCW11dGV4X2xvY2tfbmVzdGVkKCZkc3RfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKIAkJbXV0ZXhfbG9ja19uZXN0ZWQoJnNyY19pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CiAJfSBlbHNlIHsKQEAgLTI3NSw3ICsyODMsOSBAQAogCQl0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZSgmZHN0X2lub2RlLT5pX2RhdGEsIGRzdF9vZmYsIGRzdF9vZmYgKyBjb3VudCAtIDEpOwogCiBvdXRfdW5sb2NrOgotCWlmIChkc3RfaW5vZGUgPCBzcmNfaW5vZGUpIHsKKwlpZiAoc2FtZV9pbm9kZSkgeworCQltdXRleF91bmxvY2soJnNyY19pbm9kZS0+aV9tdXRleCk7CisJfSBlbHNlIGlmIChkc3RfaW5vZGUgPCBzcmNfaW5vZGUpIHsKIAkJbXV0ZXhfdW5sb2NrKCZzcmNfaW5vZGUtPmlfbXV0ZXgpOwogCQltdXRleF91bmxvY2soJmRzdF9pbm9kZS0+aV9tdXRleCk7CiAJfSBlbHNlIHsKQEAgLTI5MSw0NiArMzAxLDMxIEBACiAKIHN0YXRpYyBsb25nIG5mczQyX2lvY3RsX2Nsb25lX3JhbmdlKHN0cnVjdCBmaWxlICpkc3RfZmlsZSwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7Ci0Jc3RydWN0IG5mc19pb2N0bF9jbG9uZV9yYW5nZV9hcmdzIGFyZ3M7CisJc3RydWN0IGJ0cmZzX2lvY3RsX2Nsb25lX3JhbmdlX2FyZ3MgYXJnczsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYXJncywgYXJncCwgc2l6ZW9mKGFyZ3MpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gbmZzNDJfaW9jdGxfY2xvbmUoZHN0X2ZpbGUsIGFyZ3Muc3JjX2ZkLCBhcmdzLnNyY19vZmYsIGFyZ3MuZHN0X29mZiwgYXJncy5jb3VudCk7CisJcmV0dXJuIG5mczQyX2lvY3RsX2Nsb25lKGRzdF9maWxlLCBhcmdzLnNyY19mZCwgYXJncy5zcmNfb2Zmc2V0LAorCQkJCSBhcmdzLmRlc3Rfb2Zmc2V0LCBhcmdzLnNyY19sZW5ndGgpOwogfQotI2Vsc2UKLXN0YXRpYyBsb25nIG5mczQyX2lvY3RsX2Nsb25lKHN0cnVjdCBmaWxlICpkc3RfZmlsZSwgdW5zaWduZWQgbG9uZyBzcmNmZCwKLQkJdTY0IHNyY19vZmYsIHU2NCBkc3Rfb2ZmLCB1NjQgY291bnQpCi17Ci0JcmV0dXJuIC1FTk9UVFk7Ci19Ci0KLXN0YXRpYyBsb25nIG5mczQyX2lvY3RsX2Nsb25lX3JhbmdlKHN0cnVjdCBmaWxlICpkc3RfZmlsZSwgdm9pZCBfX3VzZXIgKmFyZ3ApCi17Ci0JcmV0dXJuIC1FTk9UVFk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX05GU19WNF8yICovCiAKIGxvbmcgbmZzNF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTkZTX0lPQ19DTE9ORToKKwljYXNlIEJUUkZTX0lPQ19DTE9ORToKIAkJcmV0dXJuIG5mczQyX2lvY3RsX2Nsb25lKGZpbGUsIGFyZywgMCwgMCwgMCk7Ci0JY2FzZSBORlNfSU9DX0NMT05FX1JBTkdFOgorCWNhc2UgQlRSRlNfSU9DX0NMT05FX1JBTkdFOgogCQlyZXR1cm4gbmZzNDJfaW9jdGxfY2xvbmVfcmFuZ2UoZmlsZSwgYXJncCk7CiAJfQogCiAJcmV0dXJuIC1FTk9UVFk7CiB9CisjZW5kaWYgLyogQ09ORklHX05GU19WNF8yICovCiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzNF9maWxlX29wZXJhdGlvbnMgPSB7Ci0jaWZkZWYgQ09ORklHX05GU19WNF8yCi0JLmxsc2VlawkJPSBuZnM0X2ZpbGVfbGxzZWVrLAotI2Vsc2UKLQkubGxzZWVrCQk9IG5mc19maWxlX2xsc2VlaywKLSNlbmRpZgogCS5yZWFkX2l0ZXIJPSBuZnNfZmlsZV9yZWFkLAogCS53cml0ZV9pdGVyCT0gbmZzX2ZpbGVfd3JpdGUsCiAJLm1tYXAJCT0gbmZzX2ZpbGVfbW1hcCwKQEAgLTM0MiwxNCArMzM3LDE0IEBACiAJLmZsb2NrCQk9IG5mc19mbG9jaywKIAkuc3BsaWNlX3JlYWQJPSBuZnNfZmlsZV9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKLSNpZmRlZiBDT05GSUdfTkZTX1Y0XzIKLQkuZmFsbG9jYXRlCT0gbmZzNDJfZmFsbG9jYXRlLAotI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMiAqLwogCS5jaGVja19mbGFncwk9IG5mc19jaGVja19mbGFncywKIAkuc2V0bGVhc2UJPSBzaW1wbGVfbm9zZXRsZWFzZSwKLSNpZmRlZiBDT05GSUdfQ09NUEFUCisjaWZkZWYgQ09ORklHX05GU19WNF8yCisJLmxsc2VlawkJPSBuZnM0X2ZpbGVfbGxzZWVrLAorCS5mYWxsb2NhdGUJPSBuZnM0Ml9mYWxsb2NhdGUsCiAJLnVubG9ja2VkX2lvY3RsID0gbmZzNF9pb2N0bCwKLSNlbHNlCiAJLmNvbXBhdF9pb2N0bAk9IG5mczRfaW9jdGwsCi0jZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLworI2Vsc2UKKwkubGxzZWVrCQk9IG5mc19maWxlX2xsc2VlaywKKyNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggNzY1YTAzNS4uODk4MTgwMyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTc4NjYsNyArNzg2Niw3IEBACiAJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWdvdG8gb3V0X3Jlc3RhcnQ7CiAJfQotCWlmIChuZnM0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBzZXJ2ZXIsIHN0YXRlLCBOVUxMKSA9PSAtRUFHQUlOKQorCWlmIChuZnM0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBzZXJ2ZXIsIHN0YXRlLCAmbGdwLT50aW1lb3V0KSA9PSAtRUFHQUlOKQogCQlnb3RvIG91dF9yZXN0YXJ0Owogb3V0OgogCWRwcmludGsoIjwtLSAlc1xuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczR4ZHIuYyBiL2ZzL25mcy9uZnM0eGRyLmMKaW5kZXggZGZlZDRmNS4uNGU0NDQxMiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczR4ZHIuYworKysgYi9mcy9uZnMvbmZzNHhkci5jCkBAIC0zNjE1LDYgKzM2MTUsNyBAQAogCXN0YXR1cyA9IDA7CiAJaWYgKHVubGlrZWx5KCEoYml0bWFwWzBdICYgRkFUVFI0X1dPUkQwX0ZTX0xPQ0FUSU9OUykpKQogCQlnb3RvIG91dDsKKwliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9GU19MT0NBVElPTlM7CiAJc3RhdHVzID0gLUVJTzsKIAkvKiBJZ25vcmUgYm9ya2VuIHNlcnZlcnMgdGhhdCByZXR1cm4gdW5yZXF1ZXN0ZWQgYXR0cnMgKi8KIAlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL29iamxheW91dC9vYmppb19vc2QuYyBiL2ZzL25mcy9vYmpsYXlvdXQvb2JqaW9fb3NkLmMKaW5kZXggNWMwYzZiNS4uOWFlYmZmYiAxMDA2NDQKLS0tIGEvZnMvbmZzL29iamxheW91dC9vYmppb19vc2QuYworKysgYi9mcy9uZnMvb2JqbGF5b3V0L29iamlvX29zZC5jCkBAIC00NzYsMTAgKzQ3Niw3IEBACiAJCX0KIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJfQotCWlmIChQYWdlRGlydHkocGFnZSkgfHwgUGFnZVdyaXRlYmFjayhwYWdlKSkKLQkJKnVwdG9kYXRlID0gdHJ1ZTsKLQllbHNlCi0JCSp1cHRvZGF0ZSA9IFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkqdXB0b2RhdGUgPSBQYWdlVXB0b2RhdGUocGFnZSk7CiAJZHByaW50aygiJXM6IGluZGV4PTB4JWx4IHVwdG9kYXRlPSVkXG4iLCBfX2Z1bmNfXywgaW5kZXgsICp1cHRvZGF0ZSk7CiAJcmV0dXJuIHBhZ2U7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvcGFnZWxpc3QuYyBiL2ZzL25mcy9wYWdlbGlzdC5jCmluZGV4IGZlM2RkZDIuLjQ1MmEwMTEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wYWdlbGlzdC5jCisrKyBiL2ZzL25mcy9wYWdlbGlzdC5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJc2V0X2JpdChORlNfSU9fSU5QUk9HUkVTUywgJmMtPmZsYWdzKTsKIAkJaWYgKGF0b21pY19yZWFkKCZjLT5pb19jb3VudCkgPT0gMCkKIAkJCWJyZWFrOwotCQlyZXQgPSBuZnNfd2FpdF9iaXRfa2lsbGFibGUoJnEua2V5KTsKKwkJcmV0ID0gbmZzX3dhaXRfYml0X2tpbGxhYmxlKCZxLmtleSwgVEFTS19LSUxMQUJMRSk7CiAJfSB3aGlsZSAoYXRvbWljX3JlYWQoJmMtPmlvX2NvdW50KSAhPSAwICYmICFyZXQpOwogCWZpbmlzaF93YWl0KHdxLCAmcS53YWl0KTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3BuZnMuYyBiL2ZzL25mcy9wbmZzLmMKaW5kZXggOTM0OTZjMC4uYmVjMDM4NCAxMDA2NDQKLS0tIGEvZnMvbmZzL3BuZnMuYworKysgYi9mcy9uZnMvcG5mcy5jCkBAIC04NzIsMzMgKzg3MiwzOCBAQAogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlsZ3AgPSBremFsbG9jKHNpemVvZigqbGdwKSwgZ2ZwX2ZsYWdzKTsKLQlpZiAobGdwID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JaV9zaXplID0gaV9zaXplX3JlYWQoaW5vKTsKLQotCWxncC0+YXJncy5taW5sZW5ndGggPSBQQUdFX0NBQ0hFX1NJWkU7Ci0JaWYgKGxncC0+YXJncy5taW5sZW5ndGggPiByYW5nZS0+bGVuZ3RoKQotCQlsZ3AtPmFyZ3MubWlubGVuZ3RoID0gcmFuZ2UtPmxlbmd0aDsKLQlpZiAocmFuZ2UtPmlvbW9kZSA9PSBJT01PREVfUkVBRCkgewotCQlpZiAocmFuZ2UtPm9mZnNldCA+PSBpX3NpemUpCi0JCQlsZ3AtPmFyZ3MubWlubGVuZ3RoID0gMDsKLQkJZWxzZSBpZiAoaV9zaXplIC0gcmFuZ2UtPm9mZnNldCA8IGxncC0+YXJncy5taW5sZW5ndGgpCi0JCQlsZ3AtPmFyZ3MubWlubGVuZ3RoID0gaV9zaXplIC0gcmFuZ2UtPm9mZnNldDsKLQl9Ci0JbGdwLT5hcmdzLm1heGNvdW50ID0gUE5GU19MQVlPVVRfTUFYU0laRTsKLQlsZ3AtPmFyZ3MucmFuZ2UgPSAqcmFuZ2U7Ci0JbGdwLT5hcmdzLnR5cGUgPSBzZXJ2ZXItPnBuZnNfY3Vycl9sZC0+aWQ7Ci0JbGdwLT5hcmdzLmlub2RlID0gaW5vOwotCWxncC0+YXJncy5jdHggPSBnZXRfbmZzX29wZW5fY29udGV4dChjdHgpOwotCWxncC0+Z2ZwX2ZsYWdzID0gZ2ZwX2ZsYWdzOwotCWxncC0+Y3JlZCA9IGxvLT5wbGhfbGNfY3JlZDsKLQotCS8qIFN5bmNocm9ub3VzbHkgcmV0cmlldmUgbGF5b3V0IGluZm9ybWF0aW9uIGZyb20gc2VydmVyIGFuZAotCSAqIHN0b3JlIGluIGxzZWcuCisJLyoKKwkgKiBTeW5jaHJvbm91c2x5IHJldHJpZXZlIGxheW91dCBpbmZvcm1hdGlvbiBmcm9tIHNlcnZlciBhbmQKKwkgKiBzdG9yZSBpbiBsc2VnLiBJZiB3ZSByYWNlIHdpdGggYSBjb25jdXJyZW50IHNlcWlkIG1vcnBoaW5nCisJICogb3AsIHRoZW4gcmUtc2VuZCB0aGUgTEFZT1VUR0VULgogCSAqLwotCWxzZWcgPSBuZnM0X3Byb2NfbGF5b3V0Z2V0KGxncCwgZ2ZwX2ZsYWdzKTsKKwlkbyB7CisJCWxncCA9IGt6YWxsb2Moc2l6ZW9mKCpsZ3ApLCBnZnBfZmxhZ3MpOworCQlpZiAobGdwID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKworCQlpX3NpemUgPSBpX3NpemVfcmVhZChpbm8pOworCisJCWxncC0+YXJncy5taW5sZW5ndGggPSBQQUdFX0NBQ0hFX1NJWkU7CisJCWlmIChsZ3AtPmFyZ3MubWlubGVuZ3RoID4gcmFuZ2UtPmxlbmd0aCkKKwkJCWxncC0+YXJncy5taW5sZW5ndGggPSByYW5nZS0+bGVuZ3RoOworCQlpZiAocmFuZ2UtPmlvbW9kZSA9PSBJT01PREVfUkVBRCkgeworCQkJaWYgKHJhbmdlLT5vZmZzZXQgPj0gaV9zaXplKQorCQkJCWxncC0+YXJncy5taW5sZW5ndGggPSAwOworCQkJZWxzZSBpZiAoaV9zaXplIC0gcmFuZ2UtPm9mZnNldCA8IGxncC0+YXJncy5taW5sZW5ndGgpCisJCQkJbGdwLT5hcmdzLm1pbmxlbmd0aCA9IGlfc2l6ZSAtIHJhbmdlLT5vZmZzZXQ7CisJCX0KKwkJbGdwLT5hcmdzLm1heGNvdW50ID0gUE5GU19MQVlPVVRfTUFYU0laRTsKKwkJbGdwLT5hcmdzLnJhbmdlID0gKnJhbmdlOworCQlsZ3AtPmFyZ3MudHlwZSA9IHNlcnZlci0+cG5mc19jdXJyX2xkLT5pZDsKKwkJbGdwLT5hcmdzLmlub2RlID0gaW5vOworCQlsZ3AtPmFyZ3MuY3R4ID0gZ2V0X25mc19vcGVuX2NvbnRleHQoY3R4KTsKKwkJbGdwLT5nZnBfZmxhZ3MgPSBnZnBfZmxhZ3M7CisJCWxncC0+Y3JlZCA9IGxvLT5wbGhfbGNfY3JlZDsKKworCQlsc2VnID0gbmZzNF9wcm9jX2xheW91dGdldChsZ3AsIGdmcF9mbGFncyk7CisJfSB3aGlsZSAobHNlZyA9PSBFUlJfUFRSKC1FQUdBSU4pKTsKKwogCWlmIChJU19FUlIobHNlZykpIHsKIAkJc3dpdGNoIChQVFJfRVJSKGxzZWcpKSB7CiAJCWNhc2UgLUVOT01FTToKQEAgLTE0NjEsMTEgKzE0NjYsMTEgQEAKIH0KIAogLyogc3RvcCB3YWl0aW5nIGlmIHNvbWVvbmUgY2xlYXJzIE5GU19MQVlPVVRfUkVUUllfTEFZT1VUR0VUIGJpdC4gKi8KLXN0YXRpYyBpbnQgcG5mc19sYXlvdXRnZXRfcmV0cnlfYml0X3dhaXQoc3RydWN0IHdhaXRfYml0X2tleSAqa2V5KQorc3RhdGljIGludCBwbmZzX2xheW91dGdldF9yZXRyeV9iaXRfd2FpdChzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICprZXksIGludCBtb2RlKQogewogCWlmICghdGVzdF9iaXQoTkZTX0xBWU9VVF9SRVRSWV9MQVlPVVRHRVQsIGtleS0+ZmxhZ3MpKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gbmZzX3dhaXRfYml0X2tpbGxhYmxlKGtleSk7CisJcmV0dXJuIG5mc193YWl0X2JpdF9raWxsYWJsZShrZXksIG1vZGUpOwogfQogCiBzdGF0aWMgYm9vbCBwbmZzX3ByZXBhcmVfdG9fcmV0cnlfbGF5b3V0Z2V0KHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvKQpAQCAtMTY4Nyw2ICsxNjkyLDcgQEAKIAkJLyogZXhpc3Rpbmcgc3RhdGUgSUQsIG1ha2Ugc3VyZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG1hdGNoZXMuICovCiAJCWlmIChwbmZzX2xheW91dF9zdGF0ZWlkX2Jsb2NrZWQobG8sICZyZXMtPnN0YXRlaWQpKSB7CiAJCQlkcHJpbnRrKCIlcyBmb3JnZXQgcmVwbHkgZHVlIHRvIHNlcXVlbmNlXG4iLCBfX2Z1bmNfXyk7CisJCQlzdGF0dXMgPSAtRUFHQUlOOwogCQkJZ290byBvdXRfZm9yZ2V0X3JlcGx5OwogCQl9CiAJCXBuZnNfc2V0X2xheW91dF9zdGF0ZWlkKGxvLCAmcmVzLT5zdGF0ZWlkLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRsYXlvdXRzLmMgYi9mcy9uZnNkL25mczRsYXlvdXRzLmMKaW5kZXggOWZmZWYwNi4uYzlkNmM3MSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0bGF5b3V0cy5jCisrKyBiL2ZzL25mc2QvbmZzNGxheW91dHMuYwpAQCAtNjE2LDYgKzYxNiw3IEBACiAKIAltdXRleF9sb2NrKCZscy0+bHNfbXV0ZXgpOwogCW5mczRfaW5jX2FuZF9jb3B5X3N0YXRlaWQoJmxzLT5sc19yZWNhbGxfc2lkLCAmbHMtPmxzX3N0aWQpOworCW11dGV4X3VubG9jaygmbHMtPmxzX211dGV4KTsKIH0KIAogc3RhdGljIGludApAQCAtNjU5LDcgKzY2MCw2IEBACiAKIAl0cmFjZV9sYXlvdXRfcmVjYWxsX3JlbGVhc2UoJmxzLT5sc19zdGlkLnNjX3N0YXRlaWQpOwogCi0JbXV0ZXhfdW5sb2NrKCZscy0+bHNfbXV0ZXgpOwogCW5mc2Q0X3JldHVybl9hbGxfbGF5b3V0cyhscywgJnJlYXBsaXN0KTsKIAluZnNkNF9mcmVlX2xheW91dHMoJnJlYXBsaXN0KTsKIAluZnM0X3B1dF9zdGlkKCZscy0+bHNfc3RpZCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKaW5kZXggY2UzOGI0Yy4uODRmMmY4MCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwpAQCAtMjg0Myw2ICsyODQzLDggQEAKIAlyZXMtPnN0YXRlICY9IH5ETE1fTE9DS19SRVNfQkxPQ0tfRElSVFk7CiAJaWYgKCFyZXQpCiAJCUJVR19PTighKHJlcy0+c3RhdGUgJiBETE1fTE9DS19SRVNfTUlHUkFUSU5HKSk7CisJZWxzZQorCQlyZXMtPm1pZ3JhdGlvbl9wZW5kaW5nID0gMDsKIAlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbG9ja3MuYyBiL2ZzL29jZnMyL2xvY2tzLmMKaW5kZXggNjUyZWNlNC4uZDU2ZjAwNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbG9ja3MuYworKysgYi9mcy9vY2ZzMi9sb2Nrcy5jCkBAIC02Nyw3ICs2NywxMCBAQAogCQkgKi8KIAogCQlsb2Nrc19sb2NrX2ZpbGVfd2FpdChmaWxlLAotCQkJCSAgICAgJihzdHJ1Y3QgZmlsZV9sb2NrKXsuZmxfdHlwZSA9IEZfVU5MQ0t9KTsKKwkJCQkmKHN0cnVjdCBmaWxlX2xvY2spIHsKKwkJCQkJLmZsX3R5cGUgPSBGX1VOTENLLAorCQkJCQkuZmxfZmxhZ3MgPSBGTF9GTE9DSworCQkJCX0pOwogCiAJCW9jZnMyX2ZpbGVfdW5sb2NrKGZpbGUpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDNiNDhhYzIuLjMxMjM0MDggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCWdvdG8gbGVhdmU7CiAJfQogCi0Jc3RhdHVzID0gcG9zaXhfYWNsX2NyZWF0ZShkaXIsICZtb2RlLCAmZGVmYXVsdF9hY2wsICZhY2wpOworCXN0YXR1cyA9IHBvc2l4X2FjbF9jcmVhdGUoZGlyLCAmaW5vZGUtPmlfbW9kZSwgJmRlZmF1bHRfYWNsLCAmYWNsKTsKIAlpZiAoc3RhdHVzKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3Jlc2l6ZS5jIGIvZnMvb2NmczIvcmVzaXplLmMKaW5kZXggZDVkYTZmNjIuLjc5YjgwMjEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3Jlc2l6ZS5jCisrKyBiL2ZzL29jZnMyL3Jlc2l6ZS5jCkBAIC01NCwxMSArNTQsMTIgQEAKIHN0YXRpYyB1MTYgb2NmczJfY2FsY19uZXdfYmFja3VwX3N1cGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICpnZCwKIAkJCQkgICAgICAgdTE2IGNsX2NwZywKKwkJCQkgICAgICAgdTE2IG9sZF9iZ19jbHVzdGVycywKIAkJCQkgICAgICAgaW50IHNldCkKIHsKIAlpbnQgaTsKIAl1MTYgYmFja3VwcyA9IDA7Ci0JdTMyIGNsdXN0ZXI7CisJdTMyIGNsdXN0ZXIsIGxnZF9jbHVzdGVyOwogCXU2NCBibGtubywgZ2RfYmxrbm8sIGxnZF9ibGtubyA9IGxlNjRfdG9fY3B1KGdkLT5iZ19ibGtubyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgT0NGUzJfTUFYX0JBQ0tVUF9TVVBFUkJMT0NLUzsgaSsrKSB7CkBAIC03MSw2ICs3MiwxMiBAQAogCQllbHNlIGlmIChnZF9ibGtubyA+IGxnZF9ibGtubykKIAkJCWJyZWFrOwogCisJCS8qIGNoZWNrIGlmIGFscmVhZHkgZG9uZSBiYWNrdXAgc3VwZXIgKi8KKwkJbGdkX2NsdXN0ZXIgPSBvY2ZzMl9ibG9ja3NfdG9fY2x1c3RlcnMoaW5vZGUtPmlfc2IsIGxnZF9ibGtubyk7CisJCWxnZF9jbHVzdGVyICs9IG9sZF9iZ19jbHVzdGVyczsKKwkJaWYgKGxnZF9jbHVzdGVyID49IGNsdXN0ZXIpCisJCQljb250aW51ZTsKKwogCQlpZiAoc2V0KQogCQkJb2NmczJfc2V0X2JpdChjbHVzdGVyICUgY2xfY3BnLAogCQkJCSAgICAgICh1bnNpZ25lZCBsb25nICopZ2QtPmJnX2JpdG1hcCk7CkBAIC05OSw2ICsxMDYsNyBAQAogCXUxNiBjaGFpbiwgbnVtX2JpdHMsIGJhY2t1cHMgPSAwOwogCXUxNiBjbF9icGMgPSBsZTE2X3RvX2NwdShjbC0+Y2xfYnBjKTsKIAl1MTYgY2xfY3BnID0gbGUxNl90b19jcHUoY2wtPmNsX2NwZyk7CisJdTE2IG9sZF9iZ19jbHVzdGVyczsKIAogCXRyYWNlX29jZnMyX3VwZGF0ZV9sYXN0X2dyb3VwX2FuZF9pbm9kZShuZXdfY2x1c3RlcnMsCiAJCQkJCQlmaXJzdF9uZXdfY2x1c3Rlcik7CkBAIC0xMTIsNiArMTIwLDcgQEAKIAogCWdyb3VwID0gKHN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICopZ3JvdXBfYmgtPmJfZGF0YTsKIAorCW9sZF9iZ19jbHVzdGVycyA9IGxlMTZfdG9fY3B1KGdyb3VwLT5iZ19iaXRzKSAvIGNsX2JwYzsKIAkvKiB1cGRhdGUgdGhlIGdyb3VwIGZpcnN0LiAqLwogCW51bV9iaXRzID0gbmV3X2NsdXN0ZXJzICogY2xfYnBjOwogCWxlMTZfYWRkX2NwdSgmZ3JvdXAtPmJnX2JpdHMsIG51bV9iaXRzKTsKQEAgLTEyNSw3ICsxMzQsNyBAQAogCQkJCSAgICAgT0NGUzJfRkVBVFVSRV9DT01QQVRfQkFDS1VQX1NCKSkgewogCQliYWNrdXBzID0gb2NmczJfY2FsY19uZXdfYmFja3VwX3N1cGVyKGJtX2lub2RlLAogCQkJCQkJICAgICBncm91cCwKLQkJCQkJCSAgICAgY2xfY3BnLCAxKTsKKwkJCQkJCSAgICAgY2xfY3BnLCBvbGRfYmdfY2x1c3RlcnMsIDEpOwogCQlsZTE2X2FkZF9jcHUoJmdyb3VwLT5iZ19mcmVlX2JpdHNfY291bnQsIC0xICogYmFja3Vwcyk7CiAJfQogCkBAIC0xNjMsNyArMTcyLDcgQEAKIAlpZiAocmV0IDwgMCkgewogCQlvY2ZzMl9jYWxjX25ld19iYWNrdXBfc3VwZXIoYm1faW5vZGUsCiAJCQkJCSAgICBncm91cCwKLQkJCQkJICAgIGNsX2NwZywgMCk7CisJCQkJCSAgICBjbF9jcGcsIG9sZF9iZ19jbHVzdGVycywgMCk7CiAJCWxlMTZfYWRkX2NwdSgmZ3JvdXAtPmJnX2ZyZWVfYml0c19jb3VudCwgYmFja3Vwcyk7CiAJCWxlMTZfYWRkX2NwdSgmZ3JvdXAtPmJnX2JpdHMsIC0xICogbnVtX2JpdHMpOwogCQlsZTE2X2FkZF9jcHUoJmdyb3VwLT5iZ19mcmVlX2JpdHNfY291bnQsIC0xICogbnVtX2JpdHMpOwpkaWZmIC0tZ2l0IGEvZnMvb3ZlcmxheWZzL2NvcHlfdXAuYyBiL2ZzL292ZXJsYXlmcy9jb3B5X3VwLmMKaW5kZXggODcxZmNiNi4uMGE4OTgzNCAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL2NvcHlfdXAuYworKysgYi9mcy9vdmVybGF5ZnMvY29weV91cC5jCkBAIC0xOTUsOCArMTk1LDcgQEAKIAogc3RhdGljIGludCBvdmxfY29weV91cF9sb2NrZWQoc3RydWN0IGRlbnRyeSAqd29ya2Rpciwgc3RydWN0IGRlbnRyeSAqdXBwZXJkaXIsCiAJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBwYXRoICpsb3dlcnBhdGgsCi0JCQkgICAgICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBpYXR0ciAqYXR0ciwKLQkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmspCisJCQkgICAgICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIGNvbnN0IGNoYXIgKmxpbmspCiB7CiAJc3RydWN0IGlub2RlICp3ZGlyID0gd29ya2Rpci0+ZF9pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKnVkaXIgPSB1cHBlcmRpci0+ZF9pbm9kZTsKQEAgLTI0MCw4ICsyMzksNiBAQAogCiAJbXV0ZXhfbG9jaygmbmV3ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAllcnIgPSBvdmxfc2V0X2F0dHIobmV3ZGVudHJ5LCBzdGF0KTsKLQlpZiAoIWVyciAmJiBhdHRyKQotCQllcnIgPSBub3RpZnlfY2hhbmdlKG5ld2RlbnRyeSwgYXR0ciwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZuZXdkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2NsZWFudXA7CkBAIC0yODYsOCArMjgzLDcgQEAKICAqIHRoYXQgcG9pbnQgdGhlIGZpbGUgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBjb3BpZWQgdXAgYW55d2F5LgogICovCiBpbnQgb3ZsX2NvcHlfdXBfb25lKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkgICAgc3RydWN0IHBhdGggKmxvd2VycGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LAotCQkgICAgc3RydWN0IGlhdHRyICphdHRyKQorCQkgICAgc3RydWN0IHBhdGggKmxvd2VycGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0KQogewogCXN0cnVjdCBkZW50cnkgKndvcmtkaXIgPSBvdmxfd29ya2RpcihkZW50cnkpOwogCWludCBlcnI7CkBAIC0zNDUsMjYgKzM0MSwxOSBAQAogCX0KIAl1cHBlcmRlbnRyeSA9IG92bF9kZW50cnlfdXBwZXIoZGVudHJ5KTsKIAlpZiAodXBwZXJkZW50cnkpIHsKLQkJdW5sb2NrX3JlbmFtZSh3b3JrZGlyLCB1cHBlcmRpcik7CisJCS8qIFJhY2VkIHdpdGggYW5vdGhlciBjb3B5LXVwPyAgTm90aGluZyB0byBkbywgdGhlbi4uLiAqLwogCQllcnIgPSAwOwotCQkvKiBSYWNlZCB3aXRoIGFub3RoZXIgY29weS11cD8gIERvIHRoZSBzZXRhdHRyIGhlcmUgKi8KLQkJaWYgKGF0dHIpIHsKLQkJCW11dGV4X2xvY2soJnVwcGVyZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKLQkJCWVyciA9IG5vdGlmeV9jaGFuZ2UodXBwZXJkZW50cnksIGF0dHIsIE5VTEwpOwotCQkJbXV0ZXhfdW5sb2NrKCZ1cHBlcmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JCX0KLQkJZ290byBvdXRfcHV0X2NyZWQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAllcnIgPSBvdmxfY29weV91cF9sb2NrZWQod29ya2RpciwgdXBwZXJkaXIsIGRlbnRyeSwgbG93ZXJwYXRoLAotCQkJCSBzdGF0LCBhdHRyLCBsaW5rKTsKKwkJCQkgc3RhdCwgbGluayk7CiAJaWYgKCFlcnIpIHsKIAkJLyogUmVzdG9yZSB0aW1lc3RhbXBzIG9uIHBhcmVudCAoYmVzdCBlZmZvcnQpICovCiAJCW92bF9zZXRfdGltZXN0YW1wcyh1cHBlcmRpciwgJnBzdGF0KTsKIAl9CiBvdXRfdW5sb2NrOgogCXVubG9ja19yZW5hbWUod29ya2RpciwgdXBwZXJkaXIpOwotb3V0X3B1dF9jcmVkOgogCXJldmVydF9jcmVkcyhvbGRfY3JlZCk7CiAJcHV0X2NyZWQob3ZlcnJpZGVfY3JlZCk7CiAKQEAgLTQwNiw3ICszOTUsNyBAQAogCQlvdmxfcGF0aF9sb3dlcihuZXh0LCAmbG93ZXJwYXRoKTsKIAkJZXJyID0gdmZzX2dldGF0dHIoJmxvd2VycGF0aCwgJnN0YXQpOwogCQlpZiAoIWVycikKLQkJCWVyciA9IG92bF9jb3B5X3VwX29uZShwYXJlbnQsIG5leHQsICZsb3dlcnBhdGgsICZzdGF0LCBOVUxMKTsKKwkJCWVyciA9IG92bF9jb3B5X3VwX29uZShwYXJlbnQsIG5leHQsICZsb3dlcnBhdGgsICZzdGF0KTsKIAogCQlkcHV0KHBhcmVudCk7CiAJCWRwdXQobmV4dCk7CmRpZmYgLS1naXQgYS9mcy9vdmVybGF5ZnMvaW5vZGUuYyBiL2ZzL292ZXJsYXlmcy9pbm9kZS5jCmluZGV4IGVjMGMyYTA1MC4uNDA2MGZmZCAxMDA2NDQKLS0tIGEvZnMvb3ZlcmxheWZzL2lub2RlLmMKKysrIGIvZnMvb3ZlcmxheWZzL2lub2RlLmMKQEAgLTEyLDggKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogI2luY2x1ZGUgIm92ZXJsYXlmcy5oIgogCi1zdGF0aWMgaW50IG92bF9jb3B5X3VwX2xhc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIsCi0JCQkgICAgYm9vbCBub19kYXRhKQorc3RhdGljIGludCBvdmxfY29weV91cF90cnVuY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CkBAIC0zMCwxMCArMjksOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2RwdXRfcGFyZW50OwogCi0JaWYgKG5vX2RhdGEpCi0JCXN0YXQuc2l6ZSA9IDA7Ci0KLQllcnIgPSBvdmxfY29weV91cF9vbmUocGFyZW50LCBkZW50cnksICZsb3dlcnBhdGgsICZzdGF0LCBhdHRyKTsKKwlzdGF0LnNpemUgPSAwOworCWVyciA9IG92bF9jb3B5X3VwX29uZShwYXJlbnQsIGRlbnRyeSwgJmxvd2VycGF0aCwgJnN0YXQpOwogCiBvdXRfZHB1dF9wYXJlbnQ6CiAJZHB1dChwYXJlbnQpOwpAQCAtNDksMTMgKzQ2LDEzIEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQl1cHBlcmRlbnRyeSA9IG92bF9kZW50cnlfdXBwZXIoZGVudHJ5KTsKLQlpZiAodXBwZXJkZW50cnkpIHsKKwllcnIgPSBvdmxfY29weV91cChkZW50cnkpOworCWlmICghZXJyKSB7CisJCXVwcGVyZGVudHJ5ID0gb3ZsX2RlbnRyeV91cHBlcihkZW50cnkpOworCiAJCW11dGV4X2xvY2soJnVwcGVyZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAkJZXJyID0gbm90aWZ5X2NoYW5nZSh1cHBlcmRlbnRyeSwgYXR0ciwgTlVMTCk7CiAJCW11dGV4X3VubG9jaygmdXBwZXJkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwotCX0gZWxzZSB7Ci0JCWVyciA9IG92bF9jb3B5X3VwX2xhc3QoZGVudHJ5LCBhdHRyLCBmYWxzZSk7CiAJfQogCW92bF9kcm9wX3dyaXRlKGRlbnRyeSk7CiBvdXQ6CkBAIC0zNTMsNyArMzUwLDcgQEAKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAKIAkJaWYgKGZpbGVfZmxhZ3MgJiBPX1RSVU5DKQotCQkJZXJyID0gb3ZsX2NvcHlfdXBfbGFzdChkZW50cnksIE5VTEwsIHRydWUpOworCQkJZXJyID0gb3ZsX2NvcHlfdXBfdHJ1bmNhdGUoZGVudHJ5KTsKIAkJZWxzZQogCQkJZXJyID0gb3ZsX2NvcHlfdXAoZGVudHJ5KTsKIAkJb3ZsX2Ryb3Bfd3JpdGUoZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL292ZXJsYXlmcy9vdmVybGF5ZnMuaCBiL2ZzL292ZXJsYXlmcy9vdmVybGF5ZnMuaAppbmRleCBlYTVhNDBiLi5lMTcxNTRhIDEwMDY0NAotLS0gYS9mcy9vdmVybGF5ZnMvb3ZlcmxheWZzLmgKKysrIGIvZnMvb3ZlcmxheWZzL292ZXJsYXlmcy5oCkBAIC0xOTQsNyArMTk0LDYgQEAKIC8qIGNvcHlfdXAuYyAqLwogaW50IG92bF9jb3B5X3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBpbnQgb3ZsX2NvcHlfdXBfb25lKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkgICAgc3RydWN0IHBhdGggKmxvd2VycGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LAotCQkgICAgc3RydWN0IGlhdHRyICphdHRyKTsKKwkJICAgIHN0cnVjdCBwYXRoICpsb3dlcnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCk7CiBpbnQgb3ZsX2NvcHlfeGF0dHIoc3RydWN0IGRlbnRyeSAqb2xkLCBzdHJ1Y3QgZGVudHJ5ICpuZXcpOwogaW50IG92bF9zZXRfYXR0cihzdHJ1Y3QgZGVudHJ5ICp1cHBlciwgc3RydWN0IGtzdGF0ICpzdGF0KTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggYmQzZTllNi4uNGJkNWQzMSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTI0OTQsNiArMjQ5NCw3IEBACiAJbW0gPSBnZXRfdGFza19tbSh0YXNrKTsKIAlpZiAoIW1tKQogCQlnb3RvIG91dF9ub19tbTsKKwlyZXQgPSAwOwogCiAJZm9yIChpID0gMCwgbWFzayA9IDE7IGkgPCBNTUZfRFVNUF9GSUxURVJfQklUUzsgaSsrLCBtYXNrIDw8PSAxKSB7CiAJCWlmICh2YWwgJiBtYXNrKQpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA4MDFjMjFjLi40Y2Y3MDBkIDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtODA5LDYgKzgwOSwxMyBAQAogICovCiBzdGF0aWMgaW50IHNwbGljZV9mcm9tX3BpcGVfbmV4dChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkKQogeworCS8qCisJICogQ2hlY2sgZm9yIHNpZ25hbCBlYXJseSB0byBtYWtlIHByb2Nlc3Mga2lsbGFibGUgd2hlbiB0aGVyZSBhcmUKKwkgKiBhbHdheXMgYnVmZmVycyBhdmFpbGFibGUKKwkgKi8KKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKIAl3aGlsZSAoIXBpcGUtPm5yYnVmcykgewogCQlpZiAoIXBpcGUtPndyaXRlcnMpCiAJCQlyZXR1cm4gMDsKQEAgLTg4NCw2ICs4OTEsNyBAQAogCiAJc3BsaWNlX2Zyb21fcGlwZV9iZWdpbihzZCk7CiAJZG8geworCQljb25kX3Jlc2NoZWQoKTsKIAkJcmV0ID0gc3BsaWNlX2Zyb21fcGlwZV9uZXh0KHBpcGUsIHNkKTsKIAkJaWYgKHJldCA+IDApCiAJCQlyZXQgPSBzcGxpY2VfZnJvbV9waXBlX2ZlZWQocGlwZSwgc2QsIGFjdG9yKTsKZGlmZiAtLWdpdCBhL2ZzL3N5c3YvaW5vZGUuYyBiL2ZzL3N5c3YvaW5vZGUuYwppbmRleCA1OTBhZDkyLi4wMmZhMWRjIDEwMDY0NAotLS0gYS9mcy9zeXN2L2lub2RlLmMKKysrIGIvZnMvc3lzdi9pbm9kZS5jCkBAIC0xNjIsMTUgKzE2Miw4IEBACiAJCWlub2RlLT5pX2ZvcCA9ICZzeXN2X2Rpcl9vcGVyYXRpb25zOwogCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZzeXN2X2FvcHM7CiAJfSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7Ci0JCWlmIChpbm9kZS0+aV9ibG9ja3MpIHsKLQkJCWlub2RlLT5pX29wID0gJnN5c3Zfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwotCQkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmc3lzdl9hb3BzOwotCQl9IGVsc2UgewotCQkJaW5vZGUtPmlfb3AgPSAmc2ltcGxlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKLQkJCWlub2RlLT5pX2xpbmsgPSAoY2hhciAqKVNZU1ZfSShpbm9kZSktPmlfZGF0YTsKLQkJCW5kX3Rlcm1pbmF0ZV9saW5rKGlub2RlLT5pX2xpbmssIGlub2RlLT5pX3NpemUsCi0JCQkJc2l6ZW9mKFNZU1ZfSShpbm9kZSktPmlfZGF0YSkgLSAxKTsKLQkJfQorCQlpbm9kZS0+aV9vcCA9ICZzeXN2X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmc3lzdl9hb3BzOwogCX0gZWxzZQogCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIHJkZXYpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKaW5kZXggZGIyODRiZi4uOWRiYjczOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IDIwMDEgUmVkIEhhdCwgSW5jLgogICogQmFzZWQgb24gY29kZSBmcm9tIG1tL21lbW9yeS5jIENvcHlyaWdodCBMaW51cyBUb3J2YWxkcyBhbmQgb3RoZXJzLgogICoKLSAqIENvcHlyaWdodCAyMDExIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IDIwMTEgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IDBiOTIxYWUuLjBhMjcxY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTMwOSw2ICszMDksMTEgQEAKIAl1bnNpZ25lZCB1bml2ZXJzYWxfcGxhbmVzOjE7CiAJLyogdHJ1ZSBpZiBjbGllbnQgdW5kZXJzdGFuZHMgYXRvbWljIHByb3BlcnRpZXMgKi8KIAl1bnNpZ25lZCBhdG9taWM6MTsKKwkvKgorCSAqIFRoaXMgY2xpZW50IGlzIGFsbG93ZWQgdG8gZ2FpbiBtYXN0ZXIgcHJpdmlsZWdlcyBmb3IgQG1hc3Rlci4KKwkgKiBQcm90ZWN0ZWQgYnkgc3RydWN0IGRybV9kZXZpY2U6Om1hc3Rlcl9tdXRleC4KKwkgKi8KKwl1bnNpZ25lZCBhbGxvd2VkX21hc3RlcjoxOwogCiAJc3RydWN0IHBpZCAqcGlkOwogCWt1aWRfdCB1aWQ7CkBAIC05MTAsNiArOTE1LDcgQEAKIGV4dGVybiBzc2l6ZV90IGRybV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7CiBleHRlcm4gaW50IGRybV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKK2V4dGVybiBpbnQgZHJtX25ld19zZXRfbWFzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZnByaXYpOwogCiAJCQkJLyogTWFwcGluZyBzdXBwb3J0IChkcm1fdm0uaCkgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgZHJtX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7CkBAIC05NDcsNiArOTUzLDEwIEBACiAJCQkJICBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplKTsKIGV4dGVybiB2b2lkIGRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgICAgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSk7CitleHRlcm4gdm9pZCBkcm1fYXJtX3ZibGFua19ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJCQkgc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSk7CitleHRlcm4gdm9pZCBkcm1fY3J0Y19hcm1fdmJsYW5rX2V2ZW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplKTsKIGV4dGVybiBib29sIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKTsKIGV4dGVybiBib29sIGRybV9jcnRjX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIGV4dGVybiBpbnQgZHJtX3ZibGFua19nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCmluZGV4IGU2N2FlYWMuLjRiNzRjOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljLmgKQEAgLTEzNiw2ICsxMzYsOSBAQAogCiB2b2lkIGRybV9hdG9taWNfbGVnYWN5X2JhY2tvZmYoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKIAordm9pZAorZHJtX2F0b21pY19jbGVhbl9vbGRfZmIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGxhbmVfbWFzaywgaW50IHJldCk7CisKIGludCBfX211c3RfY2hlY2sgZHJtX2F0b21pY19jaGVja19vbmx5KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7CiBpbnQgX19tdXN0X2NoZWNrIGRybV9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7CiBpbnQgX19tdXN0X2NoZWNrIGRybV9hdG9taWNfYXN5bmNfY29tbWl0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2t2bS9hcm1fdmdpYy5oIGIvaW5jbHVkZS9rdm0vYXJtX3ZnaWMuaAppbmRleCA5Yzc0N2NiLi5kMmY0MTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2t2bS9hcm1fdmdpYy5oCisrKyBiL2luY2x1ZGUva3ZtL2FybV92Z2ljLmgKQEAgLTM0MiwxMCArMzQyLDEwIEBACiAJCQkgICAgICAgc3RydWN0IGlycV9waHlzX21hcCAqbWFwLCBib29sIGxldmVsKTsKIHZvaWQgdmdpY192M19kaXNwYXRjaF9zZ2koc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcmVnKTsKIGludCBrdm1fdmdpY192Y3B1X3BlbmRpbmdfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQga3ZtX3ZnaWNfdmNwdV9hY3RpdmVfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBzdHJ1Y3QgaXJxX3BoeXNfbWFwICprdm1fdmdpY19tYXBfcGh5c19pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCQkgICBpbnQgdmlydF9pcnEsIGludCBpcnEpOwogaW50IGt2bV92Z2ljX3VubWFwX3BoeXNfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGlycV9waHlzX21hcCAqbWFwKTsKK2Jvb2wga3ZtX3ZnaWNfbWFwX2lzX2FjdGl2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBpcnFfcGh5c19tYXAgKm1hcCk7CiAKICNkZWZpbmUgaXJxY2hpcF9pbl9rZXJuZWwoaykJKCEhKChrKS0+YXJjaC52Z2ljLmluX2tlcm5lbCkpCiAjZGVmaW5lIHZnaWNfaW5pdGlhbGl6ZWQoaykJKCEhKChrKS0+YXJjaC52Z2ljLm5yX2NwdXMpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY3BpLmggYi9pbmNsdWRlL2xpbnV4L2FjcGkuaAppbmRleCAwNTQ4MzM5Li4xOTkxYWVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FjcGkuaApAQCAtODcwLDggKzg3MCw4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFjcGlfbm9kZV9nZXRfcHJvcGVydHlfcmVmZXJlbmNlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCi0JCQkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqY2VsbHNfbmFtZSwKLQkJCQlzaXplX3QgaW5kZXgsIHN0cnVjdCBhY3BpX3JlZmVyZW5jZV9hcmdzICphcmdzKQorCQkJCWNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBpbmRleCwKKwkJCQlzdHJ1Y3QgYWNwaV9yZWZlcmVuY2VfYXJncyAqYXJncykKIHsKIAlyZXR1cm4gLUVOWElPOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggMmI4ZWQxMi4uZGVmZWFhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0xMDcsNyArMTA3LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBfX3UzMiByb2wzMihfX3UzMiB3b3JkLCB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7Ci0JcmV0dXJuICh3b3JkIDw8IHNoaWZ0KSB8ICh3b3JkID4+ICgzMiAtIHNoaWZ0KSk7CisJcmV0dXJuICh3b3JkIDw8IHNoaWZ0KSB8ICh3b3JkID4+ICgoLXNoaWZ0KSAmIDMxKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggM2ZlMjdmOC4uYzcwZTM1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0yNTQsNiArMjU0LDcgQEAKIAl1bnNpZ25lZCBsb25nCQl2aXJ0X2JvdW5kYXJ5X21hc2s7CiAKIAl1bnNpZ25lZCBpbnQJCW1heF9od19zZWN0b3JzOworCXVuc2lnbmVkIGludAkJbWF4X2Rldl9zZWN0b3JzOwogCXVuc2lnbmVkIGludAkJY2h1bmtfc2VjdG9yczsKIAl1bnNpZ25lZCBpbnQJCW1heF9zZWN0b3JzOwogCXVuc2lnbmVkIGludAkJbWF4X3NlZ21lbnRfc2l6ZTsKQEAgLTc3Myw3ICs3NzQsNiBAQAogZXh0ZXJuIHZvaWQgYmxrX3JlcXVldWVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIGV4dGVybiB2b2lkIGJsa19hZGRfcmVxdWVzdF9wYXlsb2FkKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCXVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIGludCBibGtfcnFfY2hlY2tfbGltaXRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogZXh0ZXJuIGludCBibGtfbGxkX2J1c3koc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIGludCBibGtfcnFfcHJlcF9jbG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCByZXF1ZXN0ICpycV9zcmMsCiAJCQkgICAgIHN0cnVjdCBiaW9fc2V0ICpicywgZ2ZwX3QgZ2ZwX21hc2ssCkBAIC03OTQsNyArNzk0LDEwIEBACiBleHRlcm4gaW50IHNnX3Njc2lfaW9jdGwoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IGdlbmRpc2sgKiwgZm1vZGVfdCwKIAkJCSBzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kIF9fdXNlciAqKTsKIAorZXh0ZXJuIGludCBibGtfcXVldWVfZW50ZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGdmcF90IGdmcCk7CitleHRlcm4gdm9pZCBibGtfcXVldWVfZXhpdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gdm9pZCBibGtfc3RhcnRfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOworZXh0ZXJuIHZvaWQgYmxrX3N0YXJ0X3F1ZXVlX2FzeW5jKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIGV4dGVybiB2b2lkIGJsa19zdG9wX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIGV4dGVybiB2b2lkIGJsa19zeW5jX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIGV4dGVybiB2b2lkIF9fYmxrX3N0b3BfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwpAQCAtOTU4LDcgKzk2MSw2IEBACiBleHRlcm4gdm9pZCBibGtfY2xlYW51cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgbWFrZV9yZXF1ZXN0X2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1NjQpOwotZXh0ZXJuIHZvaWQgYmxrX2xpbWl0c19tYXhfaHdfc2VjdG9ycyhzdHJ1Y3QgcXVldWVfbGltaXRzICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9jaHVua19zZWN0b3JzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIHNob3J0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oCmluZGV4IGRlNDY0ZTYuLjgzZDE5MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKKysrIGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtNDAsNiArNDAsNyBAQAogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKIAljb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgKm9wczsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlhdG9taWNfdCB1c2VyY250OwogfTsKIAogc3RydWN0IGJwZl9tYXBfdHlwZV9saXN0IHsKQEAgLTE2Nyw4ICsxNjgsMTAgQEAKIHZvaWQgYnBmX3Byb2dfcHV0KHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7CiB2b2lkIGJwZl9wcm9nX3B1dF9yY3Uoc3RydWN0IGJwZl9wcm9nICpwcm9nKTsKIAotc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfZ2V0KHUzMiB1ZmQpOworc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfZ2V0X3dpdGhfdXJlZih1MzIgdWZkKTsKIHN0cnVjdCBicGZfbWFwICpfX2JwZl9tYXBfZ2V0KHN0cnVjdCBmZCBmKTsKK3ZvaWQgYnBmX21hcF9pbmMoc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCB1cmVmKTsKK3ZvaWQgYnBmX21hcF9wdXRfd2l0aF91cmVmKHN0cnVjdCBicGZfbWFwICptYXApOwogdm9pZCBicGZfbWFwX3B1dChzdHJ1Y3QgYnBmX21hcCAqbWFwKTsKIAogZXh0ZXJuIGludCBzeXNjdGxfdW5wcml2aWxlZ2VkX2JwZl9kaXNhYmxlZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaAppbmRleCA2MGQ0NGIyLi4wNmI3N2Y5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaApAQCAtOTAsNyArOTAsNiBAQAogICovCiBzdHJ1Y3QgY2dyb3VwX2ZpbGUgewogCS8qIGRvIG5vdCBhY2Nlc3MgYW55IGZpZWxkcyBmcm9tIG91dHNpZGUgY2dyb3VwIGNvcmUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CQkJLyogYW5jaG9yZWQgYXQgY3NzLT5maWxlcyAqLwogCXN0cnVjdCBrZXJuZnNfbm9kZSAqa247CiB9OwogCkBAIC0xMzQsOSArMTMzLDYgQEAKIAkgKi8KIAl1NjQgc2VyaWFsX25yOwogCi0JLyogYWxsIGNncm91cF9maWxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjc3MgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVzOwotCiAJLyogcGVyY3B1X3JlZiBraWxsaW5nIGFuZCBSQ1UgcmVsZWFzZSAqLwogCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVzdHJveV93b3JrOwpAQCAtNDI2LDEyICs0MjIsOSBAQAogCXZvaWQgKCpjc3NfcmVzZXQpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpOwogCXZvaWQgKCpjc3NfZV9jc3NfY2hhbmdlZCkoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyk7CiAKLQlpbnQgKCpjYW5fYXR0YWNoKShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAotCQkJICBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpOwotCXZvaWQgKCpjYW5jZWxfYXR0YWNoKShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAotCQkJICAgICAgc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KTsKLQl2b2lkICgqYXR0YWNoKShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAotCQkgICAgICAgc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KTsKKwlpbnQgKCpjYW5fYXR0YWNoKShzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpOworCXZvaWQgKCpjYW5jZWxfYXR0YWNoKShzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpOworCXZvaWQgKCphdHRhY2gpKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCk7CiAJaW50ICgqY2FuX2ZvcmspKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqKnByaXZfcCk7CiAJdm9pZCAoKmNhbmNlbF9mb3JrKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKnByaXYpOwogCXZvaWQgKCpmb3JrKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKnByaXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggMjJlMzc1NC4uY2I5MWI0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC04OCw2ICs4OCw3IEBACiBpbnQgY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZnR5cGUgKmNmdHMpOwogaW50IGNncm91cF9hZGRfbGVnYWN5X2NmdHlwZXMoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2Z0eXBlICpjZnRzKTsKIGludCBjZ3JvdXBfcm1fY2Z0eXBlcyhzdHJ1Y3QgY2Z0eXBlICpjZnRzKTsKK3ZvaWQgY2dyb3VwX2ZpbGVfbm90aWZ5KHN0cnVjdCBjZ3JvdXBfZmlsZSAqY2ZpbGUpOwogCiBjaGFyICp0YXNrX2Nncm91cF9wYXRoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKIGludCBjZ3JvdXBzdGF0c19idWlsZChzdHJ1Y3QgY2dyb3Vwc3RhdHMgKnN0YXRzLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwpAQCAtMTE5LDggKzEyMCwxMCBAQAogc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzc19uZXh0X2Rlc2NlbmRhbnRfcG9zdChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcG9zLAogCQkJCQkJICAgICBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKTsKIAotc3RydWN0IHRhc2tfc3RydWN0ICpjZ3JvdXBfdGFza3NldF9maXJzdChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpOwotc3RydWN0IHRhc2tfc3RydWN0ICpjZ3JvdXBfdGFza3NldF9uZXh0KHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCk7CitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNncm91cF90YXNrc2V0X2ZpcnN0KHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCwKKwkJCQkJIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICoqZHN0X2Nzc3ApOworc3RydWN0IHRhc2tfc3RydWN0ICpjZ3JvdXBfdGFza3NldF9uZXh0KHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCwKKwkJCQkJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKipkc3RfY3NzcCk7CiAKIHZvaWQgY3NzX3Rhc2tfaXRlcl9zdGFydChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAogCQkJIHN0cnVjdCBjc3NfdGFza19pdGVyICppdCk7CkBAIC0yMzUsMzAgKzIzOCwzOSBAQAogLyoqCiAgKiBjZ3JvdXBfdGFza3NldF9mb3JfZWFjaCAtIGl0ZXJhdGUgY2dyb3VwX3Rhc2tzZXQKICAqIEB0YXNrOiB0aGUgbG9vcCBjdXJzb3IKKyAqIEBkc3RfY3NzOiB0aGUgZGVzdGluYXRpb24gY3NzCiAgKiBAdHNldDogdGFza3NldCB0byBpdGVyYXRlCiAgKgogICogQHRzZXQgbWF5IGNvbnRhaW4gbXVsdGlwbGUgdGFza3MgYW5kIHRoZXkgbWF5IGJlbG9uZyB0byBtdWx0aXBsZQotICogcHJvY2Vzc2VzLiAgV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgdGFza3MgaW4gQHRzZXQsIGlmIGEgdGFzayBvZiBhCi0gKiBwcm9jZXNzIGlzIGluIEB0c2V0LCBhbGwgdGFza3Mgb2YgdGhlIHByb2Nlc3MgYXJlIGluIEB0c2V0LiAgQWxzbywgYWxsCi0gKiBhcmUgZ3VhcmFudGVlZCB0byBzaGFyZSB0aGUgc2FtZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGNzc2VzLgorICogcHJvY2Vzc2VzLgorICoKKyAqIE9uIHRoZSB2MiBoaWVyYXJjaHksIHRoZXJlIG1heSBiZSB0YXNrcyBmcm9tIG11bHRpcGxlIHByb2Nlc3NlcyBhbmQgdGhleQorICogbWF5IG5vdCBzaGFyZSB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIGNzc2VzLgorICoKKyAqIE9uIHRyYWRpdGlvbmFsIGhpZXJhcmNoaWVzLCB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSB0YXNrcyBpbiBAdHNldCwgaWYgYQorICogdGFzayBvZiBhIHByb2Nlc3MgaXMgaW4gQHRzZXQsIGFsbCB0YXNrcyBvZiB0aGUgcHJvY2VzcyBhcmUgaW4gQHRzZXQuCisgKiBBbHNvLCBhbGwgYXJlIGd1YXJhbnRlZWQgdG8gc2hhcmUgdGhlIHNhbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjc3Nlcy4KICAqCiAgKiBJdGVyYXRpb24gaXMgbm90IGluIGFueSBzcGVjaWZpYyBvcmRlci4KICAqLwotI2RlZmluZSBjZ3JvdXBfdGFza3NldF9mb3JfZWFjaCh0YXNrLCB0c2V0KQkJCQlcCi0JZm9yICgodGFzaykgPSBjZ3JvdXBfdGFza3NldF9maXJzdCgodHNldCkpOyAodGFzayk7CQlcCi0JICAgICAodGFzaykgPSBjZ3JvdXBfdGFza3NldF9uZXh0KCh0c2V0KSkpCisjZGVmaW5lIGNncm91cF90YXNrc2V0X2Zvcl9lYWNoKHRhc2ssIGRzdF9jc3MsIHRzZXQpCQkJXAorCWZvciAoKHRhc2spID0gY2dyb3VwX3Rhc2tzZXRfZmlyc3QoKHRzZXQpLCAmKGRzdF9jc3MpKTsJCVwKKwkgICAgICh0YXNrKTsJCQkJCQkJXAorCSAgICAgKHRhc2spID0gY2dyb3VwX3Rhc2tzZXRfbmV4dCgodHNldCksICYoZHN0X2NzcykpKQogCiAvKioKICAqIGNncm91cF90YXNrc2V0X2Zvcl9lYWNoX2xlYWRlciAtIGl0ZXJhdGUgZ3JvdXAgbGVhZGVycyBpbiBhIGNncm91cF90YXNrc2V0CiAgKiBAbGVhZGVyOiB0aGUgbG9vcCBjdXJzb3IKKyAqIEBkc3RfY3NzOiB0aGUgZGVzdGluYXRpb24gY3NzCiAgKiBAdHNldDogdGFrc2V0IHRvIGl0ZXJhdGUKICAqCiAgKiBJdGVyYXRlIHRocmVhZGdyb3VwIGxlYWRlcnMgb2YgQHRzZXQuICBGb3Igc2luZ2xlLXRhc2sgbWlncmF0aW9ucywgQHRzZXQKICAqIG1heSBub3QgY29udGFpbiBhbnkuCiAgKi8KLSNkZWZpbmUgY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2hfbGVhZGVyKGxlYWRlciwgdHNldCkJCQlcCi0JZm9yICgobGVhZGVyKSA9IGNncm91cF90YXNrc2V0X2ZpcnN0KCh0c2V0KSk7IChsZWFkZXIpOwkJXAotCSAgICAgKGxlYWRlcikgPSBjZ3JvdXBfdGFza3NldF9uZXh0KCh0c2V0KSkpCQkJXAorI2RlZmluZSBjZ3JvdXBfdGFza3NldF9mb3JfZWFjaF9sZWFkZXIobGVhZGVyLCBkc3RfY3NzLCB0c2V0KQkJXAorCWZvciAoKGxlYWRlcikgPSBjZ3JvdXBfdGFza3NldF9maXJzdCgodHNldCksICYoZHN0X2NzcykpOwlcCisJICAgICAobGVhZGVyKTsJCQkJCQkJXAorCSAgICAgKGxlYWRlcikgPSBjZ3JvdXBfdGFza3NldF9uZXh0KCh0c2V0KSwgJihkc3RfY3NzKSkpCVwKIAkJaWYgKChsZWFkZXIpICE9IChsZWFkZXIpLT5ncm91cF9sZWFkZXIpCQkJXAogCQkJOwkJCQkJCVwKIAkJZWxzZQpAQCAtNTE2LDE5ICs1MjgsNiBAQAogCXByX2NvbnRfa2VybmZzX3BhdGgoY2dycC0+a24pOwogfQogCi0vKioKLSAqIGNncm91cF9maWxlX25vdGlmeSAtIGdlbmVyYXRlIGEgZmlsZSBtb2RpZmllZCBldmVudCBmb3IgYSBjZ3JvdXBfZmlsZQotICogQGNmaWxlOiB0YXJnZXQgY2dyb3VwX2ZpbGUKLSAqCi0gKiBAY2ZpbGUgbXVzdCBoYXZlIGJlZW4gb2J0YWluZWQgYnkgc2V0dGluZyBjZnR5cGUtPmZpbGVfb2Zmc2V0LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY2dyb3VwX2ZpbGVfbm90aWZ5KHN0cnVjdCBjZ3JvdXBfZmlsZSAqY2ZpbGUpCi17Ci0JLyogbWlnaHQgbm90IGhhdmUgYmVlbiBjcmVhdGVkIGR1ZSB0byBvbmUgb2YgdGhlIENGVFlQRSBzZWxlY3RvciBmbGFncyAqLwotCWlmIChjZmlsZS0+a24pCi0JCWtlcm5mc19ub3RpZnkoY2ZpbGUtPmtuKTsKLX0KLQogI2Vsc2UgLyogIUNPTkZJR19DR1JPVVBTICovCiAKIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25maWdmcy5oIGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oCmluZGV4IGE4YTMzNWIuLjc1OGEwMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgKQEAgLTE5Nyw2ICsxOTcsMTYgQEAKIGludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKTsKIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKTsKIAoraW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKnBhcmVudF9ncm91cCwKKwkJCSAgICBzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCk7Cit2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApOworCitzdHJ1Y3QgY29uZmlnX2dyb3VwICoKK2NvbmZpZ2ZzX3JlZ2lzdGVyX2RlZmF1bHRfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqcGFyZW50X2dyb3VwLAorCQkJCWNvbnN0IGNoYXIgKm5hbWUsCisJCQkJc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKml0ZW1fdHlwZSk7Cit2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCk7CisKIC8qIFRoZXNlIGZ1bmN0aW9ucyBjYW4gc2xlZXAgYW5kIGNhbiBhbGxvYyB3aXRoIEdGUF9LRVJORUwgKi8KIC8qIFdBUk5JTkc6IFRoZXNlIGNhbm5vdCBiZSBjYWxsZWQgdW5kZXJuZWF0aCBjb25maWdmcyBjYWxsYmFja3MhISAqLwogaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywgc3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmggYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAppbmRleCBlZjRjNWIxLi4xNzdjNzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaApAQCAtNzcsNiArNzcsNyBAQAogCXVuc2lnbmVkIGludAkJc3VzcGVuZF9mcmVxOyAvKiBmcmVxIHRvIHNldCBkdXJpbmcgc3VzcGVuZCAqLwogCiAJdW5zaWduZWQgaW50CQlwb2xpY3k7IC8qIHNlZSBhYm92ZSAqLworCXVuc2lnbmVkIGludAkJbGFzdF9wb2xpY3k7IC8qIHBvbGljeSBiZWZvcmUgdW5wbHVnICovCiAJc3RydWN0IGNwdWZyZXFfZ292ZXJub3IJKmdvdmVybm9yOyAvKiBzZWUgYmVsb3cgKi8KIAl2b2lkCQkJKmdvdmVybm9yX2RhdGE7CiAJYm9vbAkJCWdvdmVybm9yX2VuYWJsZWQ7IC8qIGdvdmVybm9yIHN0YXJ0L3N0b3AgZmxhZyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbnNfcmVzb2x2ZXIuaCBiL2luY2x1ZGUvbGludXgvZG5zX3Jlc29sdmVyLmgKaW5kZXggY2M5MjI2OC4uNmFjM2NhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbnNfcmVzb2x2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Ruc19yZXNvbHZlci5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiBleHRlcm4gaW50IGRuc19xdWVyeShjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKLQkJICAgICBjb25zdCBjaGFyICpvcHRpb25zLCBjaGFyICoqX3Jlc3VsdCwgdGltZV90ICpfZXhwaXJ5KTsKKwkJICAgICBjb25zdCBjaGFyICpvcHRpb25zLCBjaGFyICoqX3Jlc3VsdCwgdGltZTY0X3QgKl9leHBpcnkpOwogCiAjZW5kaWYgLyogS0VSTkVMICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmggYi9pbmNsdWRlL2xpbnV4L2VuY2xvc3VyZS5oCmluZGV4IDdiZTIyZGEuLmE0Y2Y1N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbmNsb3N1cmUuaApAQCAtMjksNyArMjksMTEgQEAKIC8qIEEgZmV3IGdlbmVyaWMgdHlwZXMgLi4uIHRha2VuIGZyb20gc2VzLTIgKi8KIGVudW0gZW5jbG9zdXJlX2NvbXBvbmVudF90eXBlIHsKIAlFTkNMT1NVUkVfQ09NUE9ORU5UX0RFVklDRSA9IDB4MDEsCisJRU5DTE9TVVJFX0NPTVBPTkVOVF9DT05UUk9MTEVSX0VMRUNUUk9OSUNTID0gMHgwNywKKwlFTkNMT1NVUkVfQ09NUE9ORU5UX1NDU0lfVEFSR0VUX1BPUlQgPSAweDE0LAorCUVOQ0xPU1VSRV9DT01QT05FTlRfU0NTSV9JTklUSUFUT1JfUE9SVCA9IDB4MTUsCiAJRU5DTE9TVVJFX0NPTVBPTkVOVF9BUlJBWV9ERVZJQ0UgPSAweDE3LAorCUVOQ0xPU1VSRV9DT01QT05FTlRfU0FTX0VYUEFOREVSID0gMHgxOCwKIH07CiAKIC8qIHNlcy0yIGNvbW1vbiBlbGVtZW50IHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggNjUyMzEwOS4uODk0MmFmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0yNzEsNyArMjcxLDcgQEAKIAogc3RhdGljIGlubGluZSBib29sIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGNvbnN0IGdmcF90IGdmcF9mbGFncykKIHsKLQlyZXR1cm4gZ2ZwX2ZsYWdzICYgX19HRlBfRElSRUNUX1JFQ0xBSU07CisJcmV0dXJuIChib29sIF9fZm9yY2UpKGdmcF9mbGFncyAmIF9fR0ZQX0RJUkVDVF9SRUNMQUlNKTsKIH0KIAogI2lmZGVmIENPTkZJR19ISUdITUVNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwdjYuaCBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCmluZGV4IDBlZjJhOTcuLjQwMjc1M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCkBAIC0yMjcsNyArMjI3LDcgQEAKIAlzdHJ1Y3QgaXB2Nl9hY19zb2NrbGlzdAkqaXB2Nl9hY19saXN0OwogCXN0cnVjdCBpcHY2X2ZsX3NvY2tsaXN0IF9fcmN1ICppcHY2X2ZsX2xpc3Q7CiAKLQlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMJKm9wdDsKKwlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgX19yY3UJKm9wdDsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKnBrdG9wdGlvbnM7CiAJc3RydWN0IHNrX2J1ZmYJCSpyeHBtdHU7CiAJc3RydWN0IGluZXQ2X2NvcmsJY29yazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxY2hpcC9hcm0tZ2ljLXYzLmggYi9pbmNsdWRlL2xpbnV4L2lycWNoaXAvYXJtLWdpYy12My5oCmluZGV4IGM5YWUwYzYuLmQ1ZDc5OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxY2hpcC9hcm0tZ2ljLXYzLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFjaGlwL2FybS1naWMtdjMuaApAQCAtMzMwLDYgKzMzMCw3IEBACiB9OwogCiBzdHJ1Y3QgaXJxX2RvbWFpbjsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKIGludCBpdHNfY3B1X2luaXQodm9pZCk7CiBpbnQgaXRzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBzdHJ1Y3QgcmRpc3RzICpyZGlzdHMsCiAJICAgICBzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvanVtcF9sYWJlbC5oIGIvaW5jbHVkZS9saW51eC9qdW1wX2xhYmVsLmgKaW5kZXggOGRkZTU1OS4uMDUzNjUyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qdW1wX2xhYmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9qdW1wX2xhYmVsLmgKQEAgLTUsNyArNSw3IEBACiAgKiBKdW1wIGxhYmVsIHN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBKYXNvbiBCYXJvbiA8amJhcm9uQHJlZGhhdC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCiAgKgogICogREVQUkVDQVRFRCBBUEk6CiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oIGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oCmluZGV4IGQwYTFmOTkuLjQ4OTRjNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2lmZGVmIENPTkZJR19ERUJVR19LTUVNTEVBSwogCi1leHRlcm4gdm9pZCBrbWVtbGVha19pbml0KHZvaWQpIF9fcmVmOworZXh0ZXJuIHZvaWQga21lbWxlYWtfaW5pdCh2b2lkKSBfX2luaXQ7CiBleHRlcm4gdm9pZCBrbWVtbGVha19hbGxvYyhjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgbWluX2NvdW50LAogCQkJICAgZ2ZwX3QgZ2ZwKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX2FsbG9jX3BlcmNwdShjb25zdCB2b2lkIF9fcGVyY3B1ICpwdHIsIHNpemVfdCBzaXplLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcmVmLmggYi9pbmNsdWRlL2xpbnV4L2tyZWYuaAppbmRleCA0ODQ2MDRkLi5lMTU4MjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tyZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tyZWYuaApAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogc3RydWN0IGtyZWYgewogCWF0b21pY190IHJlZmNvdW50OwpAQCAtOTksMzggKzk4LDYgQEAKIAlyZXR1cm4ga3JlZl9zdWIoa3JlZiwgMSwgcmVsZWFzZSk7CiB9CiAKLS8qKgotICoga3JlZl9wdXRfc3BpbmxvY2tfaXJxc2F2ZSAtIGRlY3JlbWVudCByZWZjb3VudCBmb3Igb2JqZWN0LgotICogQGtyZWY6IG9iamVjdC4KLSAqIEByZWxlYXNlOiBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgY2xlYW4gdXAgdGhlIG9iamVjdCB3aGVuIHRoZQotICoJICAgICBsYXN0IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGlzIHJlbGVhc2VkLgotICoJICAgICBUaGlzIHBvaW50ZXIgaXMgcmVxdWlyZWQsIGFuZCBpdCBpcyBub3QgYWNjZXB0YWJsZSB0byBwYXNzIGtmcmVlCi0gKgkgICAgIGluIGFzIHRoaXMgZnVuY3Rpb24uCi0gKiBAbG9jazogbG9jayB0byB0YWtlIGluIHJlbGVhc2UgY2FzZQotICoKLSAqIEJlaGF2ZXMgaWRlbnRpY2FsIHRvIGtyZWZfcHV0IHdpdGggb25lIGV4Y2VwdGlvbi4gIElmIHRoZSByZWZlcmVuY2UgY291bnQKLSAqIGRyb3BzIHRvIHplcm8sIHRoZSBsb2NrIHdpbGwgYmUgdGFrZW4gYXRvbWljYWxseSB3cnQgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZQotICogY291bnQuICBUaGUgcmVsZWFzZSBmdW5jdGlvbiBoYXMgdG8gY2FsbCBzcGluX3VubG9jaygpIHdpdGhvdXQgX2lycXJlc3RvcmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGtyZWZfcHV0X3NwaW5sb2NrX2lycXNhdmUoc3RydWN0IGtyZWYgKmtyZWYsCi0JCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3Qga3JlZiAqa3JlZiksCi0JCXNwaW5sb2NrX3QgKmxvY2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVdBUk5fT04ocmVsZWFzZSA9PSBOVUxMKTsKLQlpZiAoYXRvbWljX2FkZF91bmxlc3MoJmtyZWYtPnJlZmNvdW50LCAtMSwgMSkpCi0JCXJldHVybiAwOwotCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgma3JlZi0+cmVmY291bnQpKSB7Ci0JCXJlbGVhc2Uoa3JlZik7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBrcmVmX3B1dF9tdXRleChzdHJ1Y3Qga3JlZiAqa3JlZiwKIAkJCQkgdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBrcmVmICprcmVmKSwKIAkJCQkgc3RydWN0IG11dGV4ICpsb2NrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDU3MDZhMjEuLmM5MjMzNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTQ2MCw2ICs0NjAsMTcgQEAKIAkgICAgICh2Y3B1cCA9IGt2bV9nZXRfdmNwdShrdm0sIGlkeCkpICE9IE5VTEw7IFwKIAkgICAgIGlkeCsrKQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqa3ZtX2dldF92Y3B1X2J5X2lkKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkKQoreworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlpbnQgaTsKKworCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKKwkJaWYgKHZjcHUtPnZjcHVfaWQgPT0gaWQpCisJCQlyZXR1cm4gdmNwdTsKKwlyZXR1cm4gTlVMTDsKK30KKwogI2RlZmluZSBrdm1fZm9yX2VhY2hfbWVtc2xvdChtZW1zbG90LCBzbG90cykJXAogCWZvciAobWVtc2xvdCA9ICZzbG90cy0+bWVtc2xvdHNbMF07CVwKIAkgICAgICBtZW1zbG90IDwgc2xvdHMtPm1lbXNsb3RzICsgS1ZNX01FTV9TTE9UU19OVU0gJiYgbWVtc2xvdC0+bnBhZ2VzO1wKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDgzNTc3ZjguLjYwMGMxZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMjEwLDYgKzIxMCw3IEBACiAJQVRBX0ZMQUdfU0xBVkVfUE9TUwk9ICgxIDw8IDApLCAvKiBob3N0IHN1cHBvcnRzIHNsYXZlIGRldiAqLwogCQkJCQkgICAgLyogKGRvZXNuJ3QgaW1wbHkgcHJlc2VuY2UpICovCiAJQVRBX0ZMQUdfU0FUQQkJPSAoMSA8PCAxKSwKKwlBVEFfRkxBR19OT19MT0dfUEFHRQk9ICgxIDw8IDUpLCAvKiBkbyBub3QgaXNzdWUgbG9nIHBhZ2UgcmVhZCAqLwogCUFUQV9GTEFHX05PX0FUQVBJCT0gKDEgPDwgNiksIC8qIE5vIEFUQVBJIHN1cHBvcnQgKi8KIAlBVEFfRkxBR19QSU9fRE1BCT0gKDEgPDwgNyksIC8qIFBJTyBjbWRzIHZpYSBETUEgKi8KIAlBVEFfRkxBR19QSU9fTEJBNDgJPSAoMSA8PCA4KSwgLyogSG9zdCBETUEgZW5naW5lIGlzIExCQTI4IG9ubHkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlnaHRudm0uaCBiL2luY2x1ZGUvbGludXgvbGlnaHRudm0uaAppbmRleCA2OWM5MDU3Li4wMzQxMTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpZ2h0bnZtLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWdodG52bS5oCkBAIC01MCwxNSArNTAsMjEgQEAKIAlOVk1fSU9fRFVBTF9BQ0NFU1MJPSAweDEsCiAJTlZNX0lPX1FVQURfQUNDRVNTCT0gMHgyLAogCisJLyogTkFORCBBY2Nlc3MgTW9kZXMgKi8KIAlOVk1fSU9fU1VTUEVORAkJPSAweDgwLAogCU5WTV9JT19TTENfTU9ERQkJPSAweDEwMCwKIAlOVk1fSU9fU0NSQU1CTEVfRElTQUJMRQk9IDB4MjAwLAorCisJLyogQmxvY2sgVHlwZXMgKi8KKwlOVk1fQkxLX1RfRlJFRQkJPSAweDAsCisJTlZNX0JMS19UX0JBRAkJPSAweDEsCisJTlZNX0JMS19UX0RFVgkJPSAweDIsCisJTlZNX0JMS19UX0hPU1QJCT0gMHg0LAogfTsKIAogc3RydWN0IG52bV9pZF9ncm91cCB7CiAJdTgJbXR5cGU7CiAJdTgJZm10eXBlOwotCXUxNglyZXMxNjsKIAl1OAludW1fY2g7CiAJdTgJbnVtX2x1bjsKIAl1OAludW1fcGxuOwpAQCAtNzQsOSArODAsOSBAQAogCXUzMgl0YmV0OwogCXUzMgl0YmVtOwogCXUzMgltcG9zOworCXUzMgltY2NhcDsKIAl1MTYJY3BhcjsKLQl1OAlyZXNbOTEzXTsKLX0gX19wYWNrZWQ7Cit9OwogCiBzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0IHsKIAl1OAljaF9vZmZzZXQ7CkBAIC05MSwxOSArOTcsMTUgQEAKIAl1OAlwZ19sZW47CiAJdTgJc2VjdF9vZmZzZXQ7CiAJdTgJc2VjdF9sZW47Ci0JdTgJcmVzWzRdOwogfTsKIAogc3RydWN0IG52bV9pZCB7CiAJdTgJdmVyX2lkOwogCXU4CXZtbnQ7CiAJdTgJY2dycHM7Ci0JdTgJcmVzWzVdOwogCXUzMgljYXA7CiAJdTMyCWRvbTsKIAlzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0IHBwYWY7Ci0JdTgJcHBhdDsKLQl1OAlyZXN2WzIyNF07CiAJc3RydWN0IG52bV9pZF9ncm91cCBncm91cHNbNF07CiB9IF9fcGFja2VkOwogCkBAIC0xMjMsMzkgKzEyNSwyOCBAQAogI2RlZmluZSBOVk1fVkVSU0lPTl9NSU5PUiAwCiAjZGVmaW5lIE5WTV9WRVJTSU9OX1BBVENIIDAKIAotI2RlZmluZSBOVk1fU0VDX0JJVFMgKDgpCi0jZGVmaW5lIE5WTV9QTF9CSVRTICAoNikKLSNkZWZpbmUgTlZNX1BHX0JJVFMgICgxNikKICNkZWZpbmUgTlZNX0JMS19CSVRTICgxNikKLSNkZWZpbmUgTlZNX0xVTl9CSVRTICgxMCkKKyNkZWZpbmUgTlZNX1BHX0JJVFMgICgxNikKKyNkZWZpbmUgTlZNX1NFQ19CSVRTICg4KQorI2RlZmluZSBOVk1fUExfQklUUyAgKDgpCisjZGVmaW5lIE5WTV9MVU5fQklUUyAoOCkKICNkZWZpbmUgTlZNX0NIX0JJVFMgICg4KQogCiBzdHJ1Y3QgcHBhX2FkZHIgeworCS8qIEdlbmVyaWMgc3RydWN0dXJlIGZvciBhbGwgYWRkcmVzc2VzICovCiAJdW5pb24gewotCQkvKiBDaGFubmVsLWJhc2VkIFBQQSBmb3JtYXQgaW4gbmFuZCA0eDJ4MngyeDh4MTAgKi8KIAkJc3RydWN0IHsKLQkJCXU2NCBjaAkJOiA0OwotCQkJdTY0IHNlYwkJOiAyOyAvKiA0IHNlY3RvcnMgcGVyIHBhZ2UgKi8KLQkJCXU2NCBwbAkJOiAyOyAvKiA0IHBsYW5lcyBwZXIgTFVOICovCi0JCQl1NjQgbHVuCQk6IDI7IC8qIDQgTFVOcyBwZXIgY2hhbm5lbCAqLwotCQkJdTY0IHBnCQk6IDg7IC8qIDI1NiBwYWdlcyBwZXIgYmxvY2sgKi8KLQkJCXU2NCBibGsJCTogMTA7LyogMTAyNCBibG9ja3MgcGVyIHBsYW5lICovCi0JCQl1NjQgcmVzdmVkCQk6IDM2OwotCQl9IGNobmw7Ci0KLQkJLyogR2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIGFsbCBhZGRyZXNzZXMgKi8KLQkJc3RydWN0IHsKKwkJCXU2NCBibGsJCTogTlZNX0JMS19CSVRTOworCQkJdTY0IHBnCQk6IE5WTV9QR19CSVRTOwogCQkJdTY0IHNlYwkJOiBOVk1fU0VDX0JJVFM7CiAJCQl1NjQgcGwJCTogTlZNX1BMX0JJVFM7Ci0JCQl1NjQgcGcJCTogTlZNX1BHX0JJVFM7Ci0JCQl1NjQgYmxrCQk6IE5WTV9CTEtfQklUUzsKIAkJCXU2NCBsdW4JCTogTlZNX0xVTl9CSVRTOwogCQkJdTY0IGNoCQk6IE5WTV9DSF9CSVRTOwogCQl9IGc7CiAKIAkJdTY0IHBwYTsKIAl9OwotfSBfX3BhY2tlZDsKK307CiAKIHN0cnVjdCBudm1fcnEgewogCXN0cnVjdCBudm1fdGd0X2luc3RhbmNlICppbnM7CkBAIC0xOTEsMTggKzE4MiwxOCBAQAogc3RydWN0IG52bV9ibG9jazsKIAogdHlwZWRlZiBpbnQgKG52bV9sMnBfdXBkYXRlX2ZuKSh1NjQsIHUzMiwgX19sZTY0ICosIHZvaWQgKik7Ci10eXBlZGVmIGludCAobnZtX2JiX3VwZGF0ZV9mbikodTMyLCB2b2lkICosIHVuc2lnbmVkIGludCwgdm9pZCAqKTsKLXR5cGVkZWYgaW50IChudm1faWRfZm4pKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCBudm1faWQgKik7Ci10eXBlZGVmIGludCAobnZtX2dldF9sMnBfdGJsX2ZuKShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1NjQsIHUzMiwKK3R5cGVkZWYgaW50IChudm1fYmJfdXBkYXRlX2ZuKShzdHJ1Y3QgcHBhX2FkZHIsIGludCwgdTggKiwgdm9pZCAqKTsKK3R5cGVkZWYgaW50IChudm1faWRfZm4pKHN0cnVjdCBudm1fZGV2ICosIHN0cnVjdCBudm1faWQgKik7Cit0eXBlZGVmIGludCAobnZtX2dldF9sMnBfdGJsX2ZuKShzdHJ1Y3QgbnZtX2RldiAqLCB1NjQsIHUzMiwKIAkJCQludm1fbDJwX3VwZGF0ZV9mbiAqLCB2b2lkICopOwotdHlwZWRlZiBpbnQgKG52bV9vcF9iYl90YmxfZm4pKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGludCwgdW5zaWduZWQgaW50LAordHlwZWRlZiBpbnQgKG52bV9vcF9iYl90YmxfZm4pKHN0cnVjdCBudm1fZGV2ICosIHN0cnVjdCBwcGFfYWRkciwgaW50LAogCQkJCW52bV9iYl91cGRhdGVfZm4gKiwgdm9pZCAqKTsKLXR5cGVkZWYgaW50IChudm1fb3Bfc2V0X2JiX2ZuKShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgbnZtX3JxICosIGludCk7Ci10eXBlZGVmIGludCAobnZtX3N1Ym1pdF9pb19mbikoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IG52bV9ycSAqKTsKLXR5cGVkZWYgaW50IChudm1fZXJhc2VfYmxrX2ZuKShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgbnZtX3JxICopOwotdHlwZWRlZiB2b2lkICoobnZtX2NyZWF0ZV9kbWFfcG9vbF9mbikoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgY2hhciAqKTsKK3R5cGVkZWYgaW50IChudm1fb3Bfc2V0X2JiX2ZuKShzdHJ1Y3QgbnZtX2RldiAqLCBzdHJ1Y3QgbnZtX3JxICosIGludCk7Cit0eXBlZGVmIGludCAobnZtX3N1Ym1pdF9pb19mbikoc3RydWN0IG52bV9kZXYgKiwgc3RydWN0IG52bV9ycSAqKTsKK3R5cGVkZWYgaW50IChudm1fZXJhc2VfYmxrX2ZuKShzdHJ1Y3QgbnZtX2RldiAqLCBzdHJ1Y3QgbnZtX3JxICopOwordHlwZWRlZiB2b2lkICoobnZtX2NyZWF0ZV9kbWFfcG9vbF9mbikoc3RydWN0IG52bV9kZXYgKiwgY2hhciAqKTsKIHR5cGVkZWYgdm9pZCAobnZtX2Rlc3Ryb3lfZG1hX3Bvb2xfZm4pKHZvaWQgKik7Ci10eXBlZGVmIHZvaWQgKihudm1fZGV2X2RtYV9hbGxvY19mbikoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdm9pZCAqLCBnZnBfdCwKK3R5cGVkZWYgdm9pZCAqKG52bV9kZXZfZG1hX2FsbG9jX2ZuKShzdHJ1Y3QgbnZtX2RldiAqLCB2b2lkICosIGdmcF90LAogCQkJCQkJCQlkbWFfYWRkcl90ICopOwogdHlwZWRlZiB2b2lkIChudm1fZGV2X2RtYV9mcmVlX2ZuKSh2b2lkICosIHZvaWQqLCBkbWFfYWRkcl90KTsKIApAQCAtMjEwLDcgKzIwMSw3IEBACiAJbnZtX2lkX2ZuCQkqaWRlbnRpdHk7CiAJbnZtX2dldF9sMnBfdGJsX2ZuCSpnZXRfbDJwX3RibDsKIAludm1fb3BfYmJfdGJsX2ZuCSpnZXRfYmJfdGJsOwotCW52bV9vcF9zZXRfYmJfZm4JKnNldF9iYjsKKwludm1fb3Bfc2V0X2JiX2ZuCSpzZXRfYmJfdGJsOwogCiAJbnZtX3N1Ym1pdF9pb19mbgkqc3VibWl0X2lvOwogCW52bV9lcmFzZV9ibGtfZm4JKmVyYXNlX2Jsb2NrOwpAQCAtMjIwLDcgKzIxMSw3IEBACiAJbnZtX2Rldl9kbWFfYWxsb2NfZm4JKmRldl9kbWFfYWxsb2M7CiAJbnZtX2Rldl9kbWFfZnJlZV9mbgkqZGV2X2RtYV9mcmVlOwogCi0JdWludDhfdAkJCW1heF9waHlzX3NlY3Q7CisJdW5zaWduZWQgaW50CQltYXhfcGh5c19zZWN0OwogfTsKIAogc3RydWN0IG52bV9sdW4gewpAQCAtMjI5LDcgKzIyMCw5IEBACiAJaW50IGx1bl9pZDsKIAlpbnQgY2hubF9pZDsKIAorCXVuc2lnbmVkIGludCBucl9pbnVzZV9ibG9ja3M7CS8qIE51bWJlciBvZiB1c2VkIGJsb2NrcyAqLwogCXVuc2lnbmVkIGludCBucl9mcmVlX2Jsb2NrczsJLyogTnVtYmVyIG9mIHVudXNlZCBibG9ja3MgKi8KKwl1bnNpZ25lZCBpbnQgbnJfYmFkX2Jsb2NrczsJLyogTnVtYmVyIG9mIGJhZCBibG9ja3MgKi8KIAlzdHJ1Y3QgbnZtX2Jsb2NrICpibG9ja3M7CiAKIAlzcGlubG9ja190IGxvY2s7CkBAIC0yNjMsOCArMjU2LDcgQEAKIAlpbnQgYmxrc19wZXJfbHVuOwogCWludCBzZWNfc2l6ZTsKIAlpbnQgb29iX3NpemU7Ci0JaW50IGFkZHJfbW9kZTsKLQlzdHJ1Y3QgbnZtX2FkZHJfZm9ybWF0IGFkZHJfZm9ybWF0OworCXN0cnVjdCBudm1fYWRkcl9mb3JtYXQgcHBhZjsKIAogCS8qIENhbGN1bGF0ZWQvQ2FjaGVkIHZhbHVlcy4gVGhlc2UgZG8gbm90IHJlZmxlY3QgdGhlIGFjdHVhbCB1c2FibGUKIAkgKiBibG9ja3MgYXQgcnVuLXRpbWUuCkBAIC0yOTAsMTE4ICsyODIsNDUgQEAKIAljaGFyIG5hbWVbRElTS19OQU1FX0xFTl07CiB9OwogCi0vKiBmYWxsYmFjayBjb252ZXJzaW9uICovCi1zdGF0aWMgc3RydWN0IHBwYV9hZGRyIF9fZ2VuZXJpY190b19saW5lYXJfYWRkcihzdHJ1Y3QgbnZtX2RldiAqZGV2LAotCQkJCQkJCXN0cnVjdCBwcGFfYWRkciByKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBhX2FkZHIgZ2VuZXJpY190b19kZXZfYWRkcihzdHJ1Y3QgbnZtX2RldiAqZGV2LAorCQkJCQkJc3RydWN0IHBwYV9hZGRyIHIpCiB7CiAJc3RydWN0IHBwYV9hZGRyIGw7CiAKLQlsLnBwYSA9IHIuZy5zZWMgKwotCQlyLmcucGcgICogZGV2LT5zZWNfcGVyX3BnICsKLQkJci5nLmJsayAqIChkZXYtPnBnc19wZXJfYmxrICoKLQkJCQlkZXYtPnNlY19wZXJfcGcpICsKLQkJci5nLmx1biAqIChkZXYtPmJsa3NfcGVyX2x1biAqCi0JCQkJZGV2LT5wZ3NfcGVyX2JsayAqCi0JCQkJZGV2LT5zZWNfcGVyX3BnKSArCi0JCXIuZy5jaCAqIChkZXYtPmJsa3NfcGVyX2x1biAqCi0JCQkJZGV2LT5wZ3NfcGVyX2JsayAqCi0JCQkJZGV2LT5sdW5zX3Blcl9jaG5sICoKLQkJCQlkZXYtPnNlY19wZXJfcGcpOworCWwucHBhID0gKCh1NjQpci5nLmJsaykgPDwgZGV2LT5wcGFmLmJsa19vZmZzZXQ7CisJbC5wcGEgfD0gKCh1NjQpci5nLnBnKSA8PCBkZXYtPnBwYWYucGdfb2Zmc2V0OworCWwucHBhIHw9ICgodTY0KXIuZy5zZWMpIDw8IGRldi0+cHBhZi5zZWN0X29mZnNldDsKKwlsLnBwYSB8PSAoKHU2NClyLmcucGwpIDw8IGRldi0+cHBhZi5wbG5fb2Zmc2V0OworCWwucHBhIHw9ICgodTY0KXIuZy5sdW4pIDw8IGRldi0+cHBhZi5sdW5fb2Zmc2V0OworCWwucHBhIHw9ICgodTY0KXIuZy5jaCkgPDwgZGV2LT5wcGFmLmNoX29mZnNldDsKIAogCXJldHVybiBsOwogfQogCi0vKiBmYWxsYmFjayBjb252ZXJzaW9uICovCi1zdGF0aWMgc3RydWN0IHBwYV9hZGRyIF9fbGluZWFyX3RvX2dlbmVyaWNfYWRkcihzdHJ1Y3QgbnZtX2RldiAqZGV2LAotCQkJCQkJCXN0cnVjdCBwcGFfYWRkciByKQotewotCXN0cnVjdCBwcGFfYWRkciBsOwotCWludCBzZWNzLCBwZ3MsIGJsa3MsIGx1bnM7Ci0Jc2VjdG9yX3QgcHBhID0gci5wcGE7Ci0KLQlsLnBwYSA9IDA7Ci0KLQlkaXZfdTY0X3JlbShwcGEsIGRldi0+c2VjX3Blcl9wZywgJnNlY3MpOwotCWwuZy5zZWMgPSBzZWNzOwotCi0Jc2VjdG9yX2RpdihwcGEsIGRldi0+c2VjX3Blcl9wZyk7Ci0JZGl2X3U2NF9yZW0ocHBhLCBkZXYtPnNlY19wZXJfYmxrLCAmcGdzKTsKLQlsLmcucGcgPSBwZ3M7Ci0KLQlzZWN0b3JfZGl2KHBwYSwgZGV2LT5wZ3NfcGVyX2Jsayk7Ci0JZGl2X3U2NF9yZW0ocHBhLCBkZXYtPmJsa3NfcGVyX2x1biwgJmJsa3MpOwotCWwuZy5ibGsgPSBibGtzOwotCi0Jc2VjdG9yX2RpdihwcGEsIGRldi0+Ymxrc19wZXJfbHVuKTsKLQlkaXZfdTY0X3JlbShwcGEsIGRldi0+bHVuc19wZXJfY2hubCwgJmx1bnMpOwotCWwuZy5sdW4gPSBsdW5zOwotCi0Jc2VjdG9yX2RpdihwcGEsIGRldi0+bHVuc19wZXJfY2hubCk7Ci0JbC5nLmNoID0gcHBhOwotCi0JcmV0dXJuIGw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHBhX2FkZHIgX19nZW5lcmljX3RvX2NobmxfYWRkcihzdHJ1Y3QgcHBhX2FkZHIgcikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBwYV9hZGRyIGRldl90b19nZW5lcmljX2FkZHIoc3RydWN0IG52bV9kZXYgKmRldiwKKwkJCQkJCXN0cnVjdCBwcGFfYWRkciByKQogewogCXN0cnVjdCBwcGFfYWRkciBsOwogCi0JbC5wcGEgPSAwOwotCi0JbC5jaG5sLnNlYyA9IHIuZy5zZWM7Ci0JbC5jaG5sLnBsID0gci5nLnBsOwotCWwuY2hubC5wZyA9IHIuZy5wZzsKLQlsLmNobmwuYmxrID0gci5nLmJsazsKLQlsLmNobmwubHVuID0gci5nLmx1bjsKLQlsLmNobmwuY2ggPSByLmcuY2g7CisJLyoKKwkgKiAoci5wcGEgPDwgWCBvZmZzZXQpICYgWCBsZW4gYml0bWFzay4gWCBlcS4gYmxrLCBwZywgZXRjLgorCSAqLworCWwuZy5ibGsgPSAoci5wcGEgPj4gZGV2LT5wcGFmLmJsa19vZmZzZXQpICYKKwkJCQkJKCgoMSA8PCBkZXYtPnBwYWYuYmxrX2xlbikgLSAxKSk7CisJbC5nLnBnIHw9IChyLnBwYSA+PiBkZXYtPnBwYWYucGdfb2Zmc2V0KSAmCisJCQkJCSgoKDEgPDwgZGV2LT5wcGFmLnBnX2xlbikgLSAxKSk7CisJbC5nLnNlYyB8PSAoci5wcGEgPj4gZGV2LT5wcGFmLnNlY3Rfb2Zmc2V0KSAmCisJCQkJCSgoKDEgPDwgZGV2LT5wcGFmLnNlY3RfbGVuKSAtIDEpKTsKKwlsLmcucGwgfD0gKHIucHBhID4+IGRldi0+cHBhZi5wbG5fb2Zmc2V0KSAmCisJCQkJCSgoKDEgPDwgZGV2LT5wcGFmLnBsbl9sZW4pIC0gMSkpOworCWwuZy5sdW4gfD0gKHIucHBhID4+IGRldi0+cHBhZi5sdW5fb2Zmc2V0KSAmCisJCQkJCSgoKDEgPDwgZGV2LT5wcGFmLmx1bl9sZW4pIC0gMSkpOworCWwuZy5jaCB8PSAoci5wcGEgPj4gZGV2LT5wcGFmLmNoX29mZnNldCkgJgorCQkJCQkoKCgxIDw8IGRldi0+cHBhZi5jaF9sZW4pIC0gMSkpOwogCiAJcmV0dXJuIGw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHBhX2FkZHIgX19jaG5sX3RvX2dlbmVyaWNfYWRkcihzdHJ1Y3QgcHBhX2FkZHIgcikKLXsKLQlzdHJ1Y3QgcHBhX2FkZHIgbDsKLQotCWwucHBhID0gMDsKLQotCWwuZy5zZWMgPSByLmNobmwuc2VjOwotCWwuZy5wbCA9IHIuY2hubC5wbDsKLQlsLmcucGcgPSByLmNobmwucGc7Ci0JbC5nLmJsayA9IHIuY2hubC5ibGs7Ci0JbC5nLmx1biA9IHIuY2hubC5sdW47Ci0JbC5nLmNoID0gci5jaG5sLmNoOwotCi0JcmV0dXJuIGw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwYV9hZGRyIGFkZHJfdG9fZ2VuZXJpY19tb2RlKHN0cnVjdCBudm1fZGV2ICpkZXYsCi0JCQkJCQlzdHJ1Y3QgcHBhX2FkZHIgZ3BwYSkKLXsKLQlzd2l0Y2ggKGRldi0+YWRkcl9tb2RlKSB7Ci0JY2FzZSBOVk1fQUREUk1PREVfTElORUFSOgotCQlyZXR1cm4gX19saW5lYXJfdG9fZ2VuZXJpY19hZGRyKGRldiwgZ3BwYSk7Ci0JY2FzZSBOVk1fQUREUk1PREVfQ0hBTk5FTDoKLQkJcmV0dXJuIF9fY2hubF90b19nZW5lcmljX2FkZHIoZ3BwYSk7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotCXJldHVybiBncHBhOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcGFfYWRkciBnZW5lcmljX3RvX2FkZHJfbW9kZShzdHJ1Y3QgbnZtX2RldiAqZGV2LAotCQkJCQkJc3RydWN0IHBwYV9hZGRyIGdwcGEpCi17Ci0Jc3dpdGNoIChkZXYtPmFkZHJfbW9kZSkgewotCWNhc2UgTlZNX0FERFJNT0RFX0xJTkVBUjoKLQkJcmV0dXJuIF9fZ2VuZXJpY190b19saW5lYXJfYWRkcihkZXYsIGdwcGEpOwotCWNhc2UgTlZNX0FERFJNT0RFX0NIQU5ORUw6Ci0JCXJldHVybiBfX2dlbmVyaWNfdG9fY2hubF9hZGRyKGdwcGEpOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQlyZXR1cm4gZ3BwYTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgcHBhX2VtcHR5KHN0cnVjdCBwcGFfYWRkciBwcGFfYWRkcikKIHsKIAlyZXR1cm4gKHBwYV9hZGRyLnBwYSA9PSBBRERSX0VNUFRZKTsKQEAgLTQ2OCw3ICszODcsNyBAQAogdHlwZWRlZiBpbnQgKG52bW1fZXJhc2VfYmxrX2ZuKShzdHJ1Y3QgbnZtX2RldiAqLCBzdHJ1Y3QgbnZtX2Jsb2NrICosCiAJCQkJCQkJCXVuc2lnbmVkIGxvbmcpOwogdHlwZWRlZiBzdHJ1Y3QgbnZtX2x1biAqKG52bW1fZ2V0X2x1bl9mbikoc3RydWN0IG52bV9kZXYgKiwgaW50KTsKLXR5cGVkZWYgdm9pZCAobnZtbV9mcmVlX2Jsb2Nrc19wcmludF9mbikoc3RydWN0IG52bV9kZXYgKik7Cit0eXBlZGVmIHZvaWQgKG52bW1fbHVuX2luZm9fcHJpbnRfZm4pKHN0cnVjdCBudm1fZGV2ICopOwogCiBzdHJ1Y3QgbnZtbV90eXBlIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtNDkyLDcgKzQxMSw3IEBACiAJbnZtbV9nZXRfbHVuX2ZuICpnZXRfbHVuOwogCiAJLyogU3RhdGlzdGljcyAqLwotCW52bW1fZnJlZV9ibG9ja3NfcHJpbnRfZm4gKmZyZWVfYmxvY2tzX3ByaW50OworCW52bW1fbHVuX2luZm9fcHJpbnRfZm4gKmx1bl9pbmZvX3ByaW50OwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKaW5kZXggNzA0MDBkYy4uYzU3ZTQyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKQEAgLTIsNyArMiw3IEBACiAgKiBSdW50aW1lIGxvY2tpbmcgY29ycmVjdG5lc3MgdmFsaWRhdG9yCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICogIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqCiAgKiBzZWUgRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2tkZXAtZGVzaWduLnR4dCBmb3IgbW9yZSBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcnZlbGxfcGh5LmggYi9pbmNsdWRlL2xpbnV4L21hcnZlbGxfcGh5LmgKaW5kZXggZTY5ODJhYy4uYTU3ZjBkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXJ2ZWxsX3BoeS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFydmVsbF9waHkuaApAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBNQVJWRUxMX1BIWV9JRF84OEUxMzE4UwkJMHgwMTQxMGU5MAogI2RlZmluZSBNQVJWRUxMX1BIWV9JRF84OEUxMTE2UgkJMHgwMTQxMGU0MAogI2RlZmluZSBNQVJWRUxMX1BIWV9JRF84OEUxNTEwCQkweDAxNDEwZGQwCisjZGVmaW5lIE1BUlZFTExfUEhZX0lEXzg4RTE1NDAJCTB4MDE0MTBlYjAKICNkZWZpbmUgTUFSVkVMTF9QSFlfSURfODhFMzAxNgkJMHgwMTQxMGU2MAogCiAvKiBzdHJ1Y3QgcGh5X2RldmljZSBkZXZfZmxhZ3MgZGVmaW5pdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaAppbmRleCA3NTAxNjI2Li5kMzEzM2JlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCkBAIC00MjcsNiArNDI3LDE3IEBACiB9OwogCiBlbnVtIHsKKwkvKgorCSAqIE1heCB3cWUgc2l6ZSBmb3IgcmRtYSByZWFkIGlzIDUxMiBieXRlcywgc28gdGhpcworCSAqIGxpbWl0cyBvdXIgbWF4X3NnZV9yZCBhcyB0aGUgd3FlIG5lZWRzIHRvIGZpdDoKKwkgKiAtIGN0cmwgc2VnbWVudCAoMTYgYnl0ZXMpCisJICogLSByZG1hIHNlZ21lbnQgKDE2IGJ5dGVzKQorCSAqIC0gc2NhdHRlciBlbGVtZW50cyAoMTYgYnl0ZXMgZWFjaCkKKwkgKi8KKwlNTFg0X01BWF9TR0VfUkQJPSAoNTEyIC0gMTYgLSAxNikgLyAxNgorfTsKKworZW51bSB7CiAJTUxYNF9ERVZfUE1DX1NVQlRZUEVfR1VJRF9JTkZPCSA9IDB4MTQsCiAJTUxYNF9ERVZfUE1DX1NVQlRZUEVfUE9SVF9JTkZPCSA9IDB4MTUsCiAJTUxYNF9ERVZfUE1DX1NVQlRZUEVfUEtFWV9UQUJMRQkgPSAweDE2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmggYi9pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaAppbmRleCBkZDIwOTc0Li4xNTY1MzI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaApAQCAtNDUzLDI2ICs0NTMsMjggQEAKIAl1OCAgICAgICAgIGxyb19jYXBbMHgxXTsKIAl1OCAgICAgICAgIGxyb19wc2hfZmxhZ1sweDFdOwogCXU4ICAgICAgICAgbHJvX3RpbWVfc3RhbXBbMHgxXTsKLQl1OCAgICAgICAgIHJlc2VydmVkXzBbMHg2XTsKKwl1OCAgICAgICAgIHJlc2VydmVkXzBbMHgzXTsKKwl1OCAgICAgICAgIHNlbGZfbGJfZW5fbW9kaWZpYWJsZVsweDFdOworCXU4ICAgICAgICAgcmVzZXJ2ZWRfMVsweDJdOwogCXU4ICAgICAgICAgbWF4X2xzb19jYXBbMHg1XTsKLQl1OCAgICAgICAgIHJlc2VydmVkXzFbMHg0XTsKKwl1OCAgICAgICAgIHJlc2VydmVkXzJbMHg0XTsKIAl1OCAgICAgICAgIHJzc19pbmRfdGJsX2NhcFsweDRdOwotCXU4ICAgICAgICAgcmVzZXJ2ZWRfMlsweDNdOworCXU4ICAgICAgICAgcmVzZXJ2ZWRfM1sweDNdOwogCXU4ICAgICAgICAgdHVubmVsX2xzb19jb25zdF9vdXRfaXBfaWRbMHgxXTsKLQl1OCAgICAgICAgIHJlc2VydmVkXzNbMHgyXTsKKwl1OCAgICAgICAgIHJlc2VydmVkXzRbMHgyXTsKIAl1OCAgICAgICAgIHR1bm5lbF9zdGF0bGVzc19ncmVbMHgxXTsKIAl1OCAgICAgICAgIHR1bm5lbF9zdGF0ZWxlc3NfdnhsYW5bMHgxXTsKIAotCXU4ICAgICAgICAgcmVzZXJ2ZWRfNFsweDIwXTsKKwl1OCAgICAgICAgIHJlc2VydmVkXzVbMHgyMF07CiAKLQl1OCAgICAgICAgIHJlc2VydmVkXzVbMHgxMF07CisJdTggICAgICAgICByZXNlcnZlZF82WzB4MTBdOwogCXU4ICAgICAgICAgbHJvX21pbl9tc3Nfc2l6ZVsweDEwXTsKIAotCXU4ICAgICAgICAgcmVzZXJ2ZWRfNlsweDEyMF07CisJdTggICAgICAgICByZXNlcnZlZF83WzB4MTIwXTsKIAogCXU4ICAgICAgICAgbHJvX3RpbWVyX3N1cHBvcnRlZF9wZXJpb2RzWzRdWzB4MjBdOwogCi0JdTggICAgICAgICByZXNlcnZlZF83WzB4NjAwXTsKKwl1OCAgICAgICAgIHJlc2VydmVkXzhbMHg2MDBdOwogfTsKIAogc3RydWN0IG1seDVfaWZjX3JvY2VfY2FwX2JpdHMgewpAQCAtNDA1MSw5ICs0MDUzLDExIEBACiB9OwogCiBzdHJ1Y3QgbWx4NV9pZmNfbW9kaWZ5X3Rpcl9iaXRtYXNrX2JpdHMgewotCXU4CSAgIHJlc2VydmVkWzB4MjBdOworCXU4CSAgIHJlc2VydmVkXzBbMHgyMF07CiAKLQl1OCAgICAgICAgIHJlc2VydmVkMVsweDFmXTsKKwl1OCAgICAgICAgIHJlc2VydmVkXzFbMHgxYl07CisJdTggICAgICAgICBzZWxmX2xiX2VuWzB4MV07CisJdTggICAgICAgICByZXNlcnZlZF8yWzB4M107CiAJdTggICAgICAgICBscm9bMHgxXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9tbWRlYnVnLmgKaW5kZXggODc3ZWYyMi4uNzcyMzYyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWRlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWRlYnVnLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIExJTlVYX01NX0RFQlVHX0gKICNkZWZpbmUgTElOVVhfTU1fREVCVUdfSCAxCiAKKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAogc3RydWN0IHBhZ2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA3MGFjNWUyLi4wYjRhYzdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTM0LDggKzM0LDEyIEBACiBzdHJ1Y3QgZmlsZTsKIHN0cnVjdCBuZXQ7CiAKLSNkZWZpbmUgU09DS19BU1lOQ19OT1NQQUNFCTAKLSNkZWZpbmUgU09DS19BU1lOQ19XQUlUREFUQQkxCisvKiBIaXN0b3JpY2FsbHksIFNPQ0tXUV9BU1lOQ19OT1NQQUNFICYgU09DS1dRX0FTWU5DX1dBSVREQVRBIHdlcmUgbG9jYXRlZAorICogaW4gc29jay0+ZmxhZ3MsIGJ1dCBtb3ZlZCBpbnRvIHNrLT5za193cS0+ZmxhZ3MgdG8gYmUgUkNVIHByb3RlY3RlZC4KKyAqIEV2ZW50dWFsbHkgYWxsIGZsYWdzIHdpbGwgYmUgaW4gc2stPnNrX3dxX2ZsYWdzLgorICovCisjZGVmaW5lIFNPQ0tXUV9BU1lOQ19OT1NQQUNFCTAKKyNkZWZpbmUgU09DS1dRX0FTWU5DX1dBSVREQVRBCTEKICNkZWZpbmUgU09DS19OT1NQQUNFCQkyCiAjZGVmaW5lIFNPQ0tfUEFTU0NSRUQJCTMKICNkZWZpbmUgU09DS19QQVNTU0VDCQk0CkBAIC04OSw2ICs5Myw3IEBACiAJLyogTm90ZTogd2FpdCBNVVNUIGJlIGZpcnN0IGZpZWxkIG9mIHNvY2tldF93cSAqLwogCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luY19saXN0OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOyAvKiAlU09DS1dRX0FTWU5DX05PU1BBQ0UsIGV0YyAqLwogCXN0cnVjdCByY3VfaGVhZAkJcmN1OwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCkBAIC05Niw3ICsxMDEsNyBAQAogICogIHN0cnVjdCBzb2NrZXQgLSBnZW5lcmFsIEJTRCBzb2NrZXQKICAqICBAc3RhdGU6IHNvY2tldCBzdGF0ZSAoJVNTX0NPTk5FQ1RFRCwgZXRjKQogICogIEB0eXBlOiBzb2NrZXQgdHlwZSAoJVNPQ0tfU1RSRUFNLCBldGMpCi0gKiAgQGZsYWdzOiBzb2NrZXQgZmxhZ3MgKCVTT0NLX0FTWU5DX05PU1BBQ0UsIGV0YykKKyAqICBAZmxhZ3M6IHNvY2tldCBmbGFncyAoJVNPQ0tfTk9TUEFDRSwgZXRjKQogICogIEBvcHM6IHByb3RvY29sIHNwZWNpZmljIHNvY2tldCBvcGVyYXRpb25zCiAgKiAgQGZpbGU6IEZpbGUgYmFjayBwb2ludGVyIGZvciBnYwogICogIEBzazogaW50ZXJuYWwgbmV0d29ya2luZyBwcm90b2NvbCBhZ25vc3RpYyBzb2NrZXQgcmVwcmVzZW50YXRpb24KQEAgLTIwMiw3ICsyMDcsNyBAQAogCVNPQ0tfV0FLRV9VUkcsCiB9OwogCi1pbnQgc29ja193YWtlX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNrLCBpbnQgaG93LCBpbnQgYmFuZCk7CitpbnQgc29ja193YWtlX2FzeW5jKHN0cnVjdCBzb2NrZXRfd3EgKnNrX3dxLCBpbnQgaG93LCBpbnQgYmFuZCk7CiBpbnQgc29ja19yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqZmFtKTsKIHZvaWQgc29ja191bnJlZ2lzdGVyKGludCBmYW1pbHkpOwogaW50IF9fc29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggZDIwODkxNC4uMzE0M2M4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMzk4LDcgKzEzOTgsOCBAQAogICoJQGRtYToJCURNQSBjaGFubmVsCiAgKglAbXR1OgkJSW50ZXJmYWNlIE1UVSB2YWx1ZQogICoJQHR5cGU6CQlJbnRlcmZhY2UgaGFyZHdhcmUgdHlwZQotICoJQGhhcmRfaGVhZGVyX2xlbjogSGFyZHdhcmUgaGVhZGVyIGxlbmd0aAorICoJQGhhcmRfaGVhZGVyX2xlbjogSGFyZHdhcmUgaGVhZGVyIGxlbmd0aCwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGlzIHRoZQorICoJCQkgIG1pbmltdW0gc2l6ZSBvZiBhIHBhY2tldC4KICAqCiAgKglAbmVlZGVkX2hlYWRyb29tOiBFeHRyYSBoZWFkcm9vbSB0aGUgaGFyZHdhcmUgbWF5IG5lZWQsIGJ1dCBub3QgaW4gYWxsCiAgKgkJCSAgY2FzZXMgY2FuIHRoaXMgYmUgZ3VhcmFudGVlZApAQCAtMjA2OCwyMCArMjA2OSwyMyBAQAogCXN0cnVjdCB1NjRfc3RhdHNfc3luYyAgIHN5bmNwOwogfTsKIAotI2RlZmluZSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlKQkJCQlcCi0oewkJCQkJCQkJXAotCXR5cGVvZih0eXBlKSBfX3BlcmNwdSAqcGNwdV9zdGF0cyA9IGFsbG9jX3BlcmNwdSh0eXBlKTsgXAotCWlmIChwY3B1X3N0YXRzKQl7CQkJCQlcCi0JCWludCBfX2NwdTsJCQkJCVwKLQkJZm9yX2VhY2hfcG9zc2libGVfY3B1KF9fY3B1KSB7CQkJXAotCQkJdHlwZW9mKHR5cGUpICpzdGF0OwkJCVwKLQkJCXN0YXQgPSBwZXJfY3B1X3B0cihwY3B1X3N0YXRzLCBfX2NwdSk7CVwKLQkJCXU2NF9zdGF0c19pbml0KCZzdGF0LT5zeW5jcCk7CQlcCi0JCX0JCQkJCQlcCi0JfQkJCQkJCQlcCi0JcGNwdV9zdGF0czsJCQkJCQlcCisjZGVmaW5lIF9fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHModHlwZSwgZ2ZwKQkJCQlcCisoewkJCQkJCQkJCVwKKwl0eXBlb2YodHlwZSkgX19wZXJjcHUgKnBjcHVfc3RhdHMgPSBhbGxvY19wZXJjcHVfZ2ZwKHR5cGUsIGdmcCk7XAorCWlmIChwY3B1X3N0YXRzKQl7CQkJCQkJXAorCQlpbnQgX19jcHU7CQkJCQkJXAorCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoX19jcHUpIHsJCQkJXAorCQkJdHlwZW9mKHR5cGUpICpzdGF0OwkJCQlcCisJCQlzdGF0ID0gcGVyX2NwdV9wdHIocGNwdV9zdGF0cywgX19jcHUpOwkJXAorCQkJdTY0X3N0YXRzX2luaXQoJnN0YXQtPnN5bmNwKTsJCQlcCisJCX0JCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlwY3B1X3N0YXRzOwkJCQkJCQlcCiB9KQogCisjZGVmaW5lIG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKHR5cGUpCQkJCQlcCisJX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyh0eXBlLCBHRlBfS0VSTkVMKQorCiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIAogLyogbmV0ZGV2aWNlIG5vdGlmaWVyIGNoYWluLiBQbGVhc2UgcmVtZW1iZXIgdG8gdXBkYXRlIHRoZSBydG5ldGxpbmsKQEAgLTM4NTQsNiArMzg1OCwxMSBAQAogCXJldHVybiBkZXYtPnByaXZfZmxhZ3MgJiBJRkZfRUJSSURHRTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIG5ldGlmX2lzX2JyaWRnZV9wb3J0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+cHJpdl9mbGFncyAmIElGRl9CUklER0VfUE9SVDsKK30KKwogc3RhdGljIGlubGluZSBib29sIG5ldGlmX2lzX292c19tYXN0ZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gZGV2LT5wcml2X2ZsYWdzICYgSUZGX09QRU5WU1dJVENIOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaAppbmRleCA0OGJiMDFlLi4wZTFmNDMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaApAQCAtNDIxLDcgKzQyMSw3IEBACiBleHRlcm4gaW50IGlwX3NldF9nZXRfaXBhZGRyNChzdHJ1Y3QgbmxhdHRyICpubGEsICBfX2JlMzIgKmlwYWRkcik7CiBleHRlcm4gaW50IGlwX3NldF9nZXRfaXBhZGRyNihzdHJ1Y3QgbmxhdHRyICpubGEsIHVuaW9uIG5mX2luZXRfYWRkciAqaXBhZGRyKTsKIGV4dGVybiBzaXplX3QgaXBfc2V0X2VsZW1fbGVuKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSwKLQkJCSAgICAgIHNpemVfdCBsZW4pOworCQkJICAgICAgc2l6ZV90IGxlbiwgc2l6ZV90IGFsaWduKTsKIGV4dGVybiBpbnQgaXBfc2V0X2dldF9leHRlbnNpb25zKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCQkgc3RydWN0IGlwX3NldF9leHQgKmV4dCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKaW5kZXggMjQ5ZDFiYi4uNTY0NmIyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKQEAgLTE0LDcgKzE0LDcgQEAKIAlpbnQgKCpjYWxsX3JjdSkoc3RydWN0IHNvY2sgKm5sLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKIAkJICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKTsKLQlpbnQgKCpjYWxsX2JhdGNoKShzdHJ1Y3Qgc29jayAqbmwsIHN0cnVjdCBza19idWZmICpza2IsCisJaW50ICgqY2FsbF9iYXRjaCkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqbmwsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pOwogCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3k7CS8qIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaW5ncmVzcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaW5ncmVzcy5oCmluZGV4IDE4N2ZlYWIuLjVmY2QzNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2luZ3Jlc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pbmdyZXNzLmgKQEAgLTUsMTAgKzUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTUwotc3RhdGljIGlubGluZSBpbnQgbmZfaG9va19pbmdyZXNzX2FjdGl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBib29sIG5mX2hvb2tfaW5ncmVzc19hY3RpdmUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gbmZfaG9va19saXN0X2FjdGl2ZSgmc2tiLT5kZXYtPm5mX2hvb2tzX2luZ3Jlc3MsCi0JCQkJICAgTkZQUk9UT19ORVRERVYsIE5GX05FVERFVl9JTkdSRVNTKTsKKyNpZmRlZiBIQVZFX0pVTVBfTEFCRUwKKwlpZiAoIXN0YXRpY19rZXlfZmFsc2UoJm5mX2hvb2tzX25lZWRlZFtORlBST1RPX05FVERFVl1bTkZfTkVUREVWX0lOR1JFU1NdKSkKKwkJcmV0dXJuIGZhbHNlOworI2VuZGlmCisJcmV0dXJuICFsaXN0X2VtcHR5KCZza2ItPmRldi0+bmZfaG9va3NfaW5ncmVzcyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5mX2hvb2tfaW5ncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTYsOCArMTksOCBAQAogCXN0cnVjdCBuZl9ob29rX3N0YXRlIHN0YXRlOwogCiAJbmZfaG9va19zdGF0ZV9pbml0KCZzdGF0ZSwgJnNrYi0+ZGV2LT5uZl9ob29rc19pbmdyZXNzLAotCQkJICAgTkZfTkVUREVWX0lOR1JFU1MsIElOVF9NSU4sIE5GUFJPVE9fTkVUREVWLCBOVUxMLAotCQkJICAgc2tiLT5kZXYsIE5VTEwsIGRldl9uZXQoc2tiLT5kZXYpLCBOVUxMKTsKKwkJCSAgIE5GX05FVERFVl9JTkdSRVNTLCBJTlRfTUlOLCBORlBST1RPX05FVERFViwKKwkJCSAgIHNrYi0+ZGV2LCBOVUxMLCBOVUxMLCBkZXZfbmV0KHNrYi0+ZGV2KSwgTlVMTCk7CiAJcmV0dXJuIG5mX2hvb2tfc2xvdyhza2IsICZzdGF0ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggNTcwZDYzMC4uMTFiYmFlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTI1MSw2ICsyNTEsNyBAQAogCXN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgcmVzOwogCXN0cnVjdCBycGNfY3JlZCAqY3JlZDsKIAlnZnBfdCBnZnBfZmxhZ3M7CisJbG9uZyB0aW1lb3V0OwogfTsKIAogc3RydWN0IG5mczRfZ2V0ZGV2aWNlaW5mb19hcmdzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2ZfZG1hLmggYi9pbmNsdWRlL2xpbnV4L29mX2RtYS5oCmluZGV4IDM2MTEyY2QuLmI5MGQ4ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2ZfZG1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZl9kbWEuaApAQCAtODAsNyArODAsNyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2NoYW4gKm9mX2RtYV9yZXF1ZXN0X3NsYXZlX2NoYW5uZWwoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2NoYW4gKm9mX2RtYV9zaW1wbGVfeGxhdGUoc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqZG1hX3NwZWMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX2lycS5oIGIvaW5jbHVkZS9saW51eC9vZl9pcnEuaAppbmRleCAwMzlmMmVlLi4xZTBkZWI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfaXJxLmgKQEAgLTQ2LDEyICs0NiwxNCBAQAogZXh0ZXJuIGludCBvZl9pcnFfZ2V0X2J5bmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gaW50IG9mX2lycV90b19yZXNvdXJjZV90YWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwKIAkJc3RydWN0IHJlc291cmNlICpyZXMsIGludCBucl9pcnFzKTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2lycV9maW5kX3BhcmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkKTsKIGV4dGVybiBzdHJ1Y3QgaXJxX2RvbWFpbiAqb2ZfbXNpX2dldF9kb21haW4oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkJICAgIGVudW0gaXJxX2RvbWFpbl9idXNfdG9rZW4gdG9rZW4pOwogZXh0ZXJuIHN0cnVjdCBpcnFfZG9tYWluICpvZl9tc2lfbWFwX2dldF9kZXZpY2VfZG9tYWluKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJCSAgICAgICB1MzIgcmlkKTsKIGV4dGVybiB2b2lkIG9mX21zaV9jb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKK3UzMiBvZl9tc2lfbWFwX3JpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbXNpX25wLCB1MzIgcmlkX2luKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBvZl9pcnFfY291bnQoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCiB7CkBAIC03MCw2ICs3MiwxMSBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSB2b2lkICpvZl9pcnFfZmluZF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXJxX2RvbWFpbiAqb2ZfbXNpX2dldF9kb21haW4oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkJICAgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkJCSAgIGVudW0gaXJxX2RvbWFpbl9idXNfdG9rZW4gdG9rZW4pCkBAIC04NCw2ICs5MSwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIG9mX21zaV9jb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewogfQorc3RhdGljIGlubGluZSB1MzIgb2ZfbXNpX21hcF9yaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1zaV9ucCwgdTMyIHJpZF9pbikKK3sKKwlyZXR1cm4gcmlkX2luOworfQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19PRl9JUlEpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKQpAQCAtOTMsNyArMTA1LDYgQEAKICAqIHNvIGRlY2xhcmUgaXQgaGVyZSByZWdhcmRsZXNzIG9mIHRoZSBDT05GSUdfT0ZfSVJRIHNldHRpbmcuCiAgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgaXJxX29mX3BhcnNlX2FuZF9tYXAoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBpbnQgaW5kZXgpOwotdTMyIG9mX21zaV9tYXBfcmlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICptc2lfbnAsIHUzMiByaWRfaW4pOwogCiAjZWxzZSAvKiAhQ09ORklHX09GICYmICFDT05GSUdfU1BBUkMgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlycV9vZl9wYXJzZV9hbmRfbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LApAQCAtMTAxLDEyICsxMTIsNiBAQAogewogCXJldHVybiAwOwogfQotCi1zdGF0aWMgaW5saW5lIHUzMiBvZl9tc2lfbWFwX3JpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbXNpX25wLCB1MzIgcmlkX2luKQotewotCXJldHVybiByaWRfaW47Ci19CiAjZW5kaWYgLyogIUNPTkZJR19PRiAqLwogCiAjZW5kaWYgLyogX19PRl9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggZTgyOGU3Yi4uNmFlMjVhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC00MTIsOSArNDEyLDE4IEBACiAJdm9pZCAoKnJlbGVhc2VfZm4pKHN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKik7CiAJdm9pZCAqcmVsZWFzZV9kYXRhOwogCXVuc2lnbmVkIGludCBpZ25vcmVfcmVzZXRfZGVsYXk6MTsJLyogZm9yIGVudGlyZSBoaWVyYXJjaHkgKi8KKwkvKiBSZXNvdXJjZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzICovCisJcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25fcmVzb3VyY2UpKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCXJlc291cmNlX3NpemVfdCBzdGFydCwKKwkJCXJlc291cmNlX3NpemVfdCBzaXplLAorCQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduKTsKIH07CiAKICNkZWZpbmUJdG9fcGNpX2hvc3RfYnJpZGdlKG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlLCBkZXYpCisKK3N0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKnBjaV9maW5kX2hvc3RfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpidXMpOworCiB2b2lkIHBjaV9zZXRfaG9zdF9icmlkZ2VfcmVsZWFzZShzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2UsCiAJCSAgICAgdm9pZCAoKnJlbGVhc2VfZm4pKHN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKiksCiAJCSAgICAgdm9pZCAqcmVsZWFzZV9kYXRhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggZDg0MWQzMy4uZjk4MjhhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTY5Nyw5ICs2OTcsMTEgQEAKICAqIGlmIHRoZXJlIGlzIG5vIGNncm91cCBldmVudCBmb3IgdGhlIGN1cnJlbnQgQ1BVIGNvbnRleHQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBlcmZfY2dyb3VwICoKLXBlcmZfY2dyb3VwX2Zyb21fdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitwZXJmX2Nncm91cF9mcm9tX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZih0YXNrX2Nzcyh0YXNrLCBwZXJmX2V2ZW50X2NncnBfaWQpLAorCXJldHVybiBjb250YWluZXJfb2YodGFza19jc3NfY2hlY2sodGFzaywgcGVyZl9ldmVudF9jZ3JwX2lkLAorCQkJCQkgICBjdHggPyBsb2NrZGVwX2lzX2hlbGQoJmN0eC0+bG9jaykKKwkJCQkJICAgICAgIDogdHJ1ZSksCiAJCQkgICAgc3RydWN0IHBlcmZfY2dyb3VwLCBjc3MpOwogfQogI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfUEVSRiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2Fzb2MtczNjLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvYXNvYy1zM2MuaAppbmRleCA1ZTBiYzc3Li4xNWJmNTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvYXNvYy1zM2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvYXNvYy1zM2MuaApAQCAtMTMsNiArMTMsOSBAQAogICovCiAjZGVmaW5lIFMzQzY0WFhfQUM5N19HUEQgIDAKICNkZWZpbmUgUzNDNjRYWF9BQzk3X0dQRSAgMQorCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisKIGV4dGVybiB2b2lkIHMzYzY0eHhfYWM5N19zZXR1cF9ncGlvKGludCk7CiAKIHN0cnVjdCBzYW1zdW5nX2kycyB7CkBAIC0zOSw2ICs0MiwxMSBAQAogICovCiBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHsKIAlpbnQgKCpjZmdfZ3Bpbykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKwlkbWFfZmlsdGVyX2ZuIGRtYV9maWx0ZXI7CisJdm9pZCAqZG1hX3BsYXliYWNrOworCXZvaWQgKmRtYV9jYXB0dXJlOworCXZvaWQgKmRtYV9wbGF5X3NlYzsKKwl2b2lkICpkbWFfY2FwdHVyZV9taWM7CiAJdW5pb24gewogCQlzdHJ1Y3Qgc2Ftc3VuZ19pMnMgaTJzOwogCX0gdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9lZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZWRtYS5oCmluZGV4IGUyODc4YmEuLjQyOTlmNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9lZG1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2VkbWEuaApAQCAtNzIsNyArNzIsNyBAQAogCXN0cnVjdCBlZG1hX3Jzdl9pbmZvCSpyc3Y7CiAKIAkvKiBMaXN0IG9mIGNoYW5uZWxzIGFsbG9jYXRlZCBmb3IgbWVtY3B5LCB0ZXJtaW5hdGVkIHdpdGggLTEgKi8KLQlzMTYJCQkqbWVtY3B5X2NoYW5uZWxzOworCXMzMgkJCSptZW1jcHlfY2hhbm5lbHM7CiAKIAlzOAkoKnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcpWzJdOwogCWNvbnN0IHMxNgkoKnhiYXJfY2hhbnMpWzJdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9wb3J0aW9ucy5oIGIvaW5jbHVkZS9saW51eC9wcm9wb3J0aW9ucy5oCmluZGV4IDU0NDBmNjQuLjIxMjIxMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvcG9ydGlvbnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb3BvcnRpb25zLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogRkxvYXRpbmcgcHJvcG9ydGlvbnMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYQogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcHVibGljIGRhdGEgc3RydWN0dXJlIGFuZCBBUEkgZGVmaW5pdGlvbnMuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaCBiL2luY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaAppbmRleCA2YTQzNDc2Li4xZDFiYTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3FlZC9jb21tb25faHNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oCkBAIC05LDYgKzksOCBAQAogI2lmbmRlZiBfX0NPTU1PTl9IU0lfXwogI2RlZmluZSBfX0NPTU1PTl9IU0lfXwogCisjZGVmaW5lIENPUkVfU1BRRV9QQUdFX1NJWkVfQllURVMgICAgICAgICAgICAgICAgICAgICAgIDQwOTYKKwogI2RlZmluZSBGV19NQUpPUl9WRVJTSU9OCTgKICNkZWZpbmUgRldfTUlOT1JfVkVSU0lPTgk0CiAjZGVmaW5lIEZXX1JFVklTSU9OX1ZFUlNJT04JMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xZWQvcWVkX2NoYWluLmggYi9pbmNsdWRlL2xpbnV4L3FlZC9xZWRfY2hhaW4uaAppbmRleCBiOTIwYzM2Li40MWI5MDQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3FlZC9xZWRfY2hhaW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L3FlZC9xZWRfY2hhaW4uaApAQCAtMTExLDcgKzExMSw4IEBACiAJdXNlZCA9ICgodTMyKTB4MTAwMDB1ICsgKHUzMikocF9jaGFpbi0+cHJvZF9pZHgpKSAtCiAJCSh1MzIpcF9jaGFpbi0+Y29uc19pZHg7CiAJaWYgKHBfY2hhaW4tPm1vZGUgPT0gUUVEX0NIQUlOX01PREVfTkVYVF9QVFIpCi0JCXVzZWQgLT0gKHVzZWQgLyBwX2NoYWluLT5lbGVtX3Blcl9wYWdlKTsKKwkJdXNlZCAtPSBwX2NoYWluLT5wcm9kX2lkeCAvIHBfY2hhaW4tPmVsZW1fcGVyX3BhZ2UgLQorCQkJcF9jaGFpbi0+Y29uc19pZHggLyBwX2NoYWluLT5lbGVtX3Blcl9wYWdlOwogCiAJcmV0dXJuIHBfY2hhaW4tPmNhcGFjaXR5IC0gdXNlZDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgKaW5kZXggODQzY2VjYS4uZTUwYjMxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3RfbnVsbHMuaD4KQEAgLTMzOSwxMCArMzQwLDExIEBACiBpbnQgcmhhc2h0YWJsZV9pbml0KHN0cnVjdCByaGFzaHRhYmxlICpodCwKIAkJICAgIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zKTsKIAotaW50IHJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksCi0JCQkgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqLAotCQkJICAgc3RydWN0IGJ1Y2tldF90YWJsZSAqb2xkX3RibCk7Ci1pbnQgcmhhc2h0YWJsZV9pbnNlcnRfcmVoYXNoKHN0cnVjdCByaGFzaHRhYmxlICpodCk7CitzdHJ1Y3QgYnVja2V0X3RhYmxlICpyaGFzaHRhYmxlX2luc2VydF9zbG93KHN0cnVjdCByaGFzaHRhYmxlICpodCwKKwkJCQkJICAgIGNvbnN0IHZvaWQgKmtleSwKKwkJCQkJICAgIHN0cnVjdCByaGFzaF9oZWFkICpvYmosCisJCQkJCSAgICBzdHJ1Y3QgYnVja2V0X3RhYmxlICpvbGRfdGJsKTsKK2ludCByaGFzaHRhYmxlX2luc2VydF9yZWhhc2goc3RydWN0IHJoYXNodGFibGUgKmh0LCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwpOwogCiBpbnQgcmhhc2h0YWJsZV93YWxrX2luaXQoc3RydWN0IHJoYXNodGFibGUgKmh0LCBzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKTsKIHZvaWQgcmhhc2h0YWJsZV93YWxrX2V4aXQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcik7CkBAIC01OTgsOSArNjAwLDExIEBACiAKIAluZXdfdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdSh0YmwtPmZ1dHVyZV90YmwsIGh0KTsKIAlpZiAodW5saWtlbHkobmV3X3RibCkpIHsKLQkJZXJyID0gcmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhodCwga2V5LCBvYmosIG5ld190YmwpOwotCQlpZiAoZXJyID09IC1FQUdBSU4pCisJCXRibCA9IHJoYXNodGFibGVfaW5zZXJ0X3Nsb3coaHQsIGtleSwgb2JqLCBuZXdfdGJsKTsKKwkJaWYgKCFJU19FUlJfT1JfTlVMTCh0YmwpKQogCQkJZ290byBzbG93X3BhdGg7CisKKwkJZXJyID0gUFRSX0VSUih0YmwpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTYxMSw3ICs2MTUsNyBAQAogCWlmICh1bmxpa2VseShyaHRfZ3Jvd19hYm92ZV8xMDAoaHQsIHRibCkpKSB7CiBzbG93X3BhdGg6CiAJCXNwaW5fdW5sb2NrX2JoKGxvY2spOwotCQllcnIgPSByaGFzaHRhYmxlX2luc2VydF9yZWhhc2goaHQpOworCQllcnIgPSByaGFzaHRhYmxlX2luc2VydF9yZWhhc2goaHQsIHRibCk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NwaV9wcm90b2NvbC5oIGIvaW5jbHVkZS9saW51eC9zY3BpX3Byb3RvY29sLmgKaW5kZXggODBhZjNjZC4uNzJjZTkzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY3BpX3Byb3RvY29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY3BpX3Byb3RvY29sLmgKQEAgLTcxLDcgKzcxLDcgQEAKIAlpbnQgKCpzZW5zb3JfZ2V0X3ZhbHVlKSh1MTYsIHUzMiAqKTsKIH07CiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19BUk1fU0NQSV9QUk9UT0NPTCkKKyNpZiBJU19SRUFDSEFCTEUoQ09ORklHX0FSTV9TQ1BJX1BST1RPQ09MKQogc3RydWN0IHNjcGlfb3BzICpnZXRfc2NwaV9vcHModm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NwaV9vcHMgKmdldF9zY3BpX29wcyh2b2lkKSB7IHJldHVybiBOVUxMOyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaAppbmRleCBhYjFlMDM5Li45MjU1N2JiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKQEAgLTIzOSw3ICsyMzksNiBAQAogZXh0ZXJuIHZvaWQgc2V0X2N1cnJlbnRfYmxvY2tlZChzaWdzZXRfdCAqKTsKIGV4dGVybiB2b2lkIF9fc2V0X2N1cnJlbnRfYmxvY2tlZChjb25zdCBzaWdzZXRfdCAqKTsKIGV4dGVybiBpbnQgc2hvd191bmhhbmRsZWRfc2lnbmFsczsKLWV4dGVybiBpbnQgc2lnc3VzcGVuZChzaWdzZXRfdCAqKTsKIAogc3RydWN0IHNpZ2FjdGlvbiB7CiAjaWZuZGVmIF9fQVJDSF9IQVNfSVJJWF9TSUdBQ1RJT04KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKaW5kZXggN2M4MmUzYi4uMjAzN2E4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTE1OCw2ICsxNTgsMjQgQEAKICNlbmRpZgogCiAvKgorICogU2V0dGluZyBBUkNIX1NMQUJfTUlOQUxJR04gaW4gYXJjaCBoZWFkZXJzIGFsbG93cyBhIGRpZmZlcmVudCBhbGlnbm1lbnQuCisgKiBJbnRlbmRlZCBmb3IgYXJjaGVzIHRoYXQgZ2V0IG1pc2FsaWdubWVudCBmYXVsdHMgZXZlbiBmb3IgNjQgYml0IGludGVnZXIKKyAqIGFsaWduZWQgYnVmZmVycy4KKyAqLworI2lmbmRlZiBBUkNIX1NMQUJfTUlOQUxJR04KKyNkZWZpbmUgQVJDSF9TTEFCX01JTkFMSUdOIF9fYWxpZ25vZl9fKHVuc2lnbmVkIGxvbmcgbG9uZykKKyNlbmRpZgorCisvKgorICoga21hbGxvYyBhbmQgZnJpZW5kcyByZXR1cm4gQVJDSF9LTUFMTE9DX01JTkFMSUdOIGFsaWduZWQKKyAqIHBvaW50ZXJzLiBrbWVtX2NhY2hlX2FsbG9jIGFuZCBmcmllbmRzIHJldHVybiBBUkNIX1NMQUJfTUlOQUxJR04KKyAqIGFsaWduZWQgcG9pbnRlcnMuCisgKi8KKyNkZWZpbmUgX19hc3N1bWVfa21hbGxvY19hbGlnbm1lbnQgX19hc3N1bWVfYWxpZ25lZChBUkNIX0tNQUxMT0NfTUlOQUxJR04pCisjZGVmaW5lIF9fYXNzdW1lX3NsYWJfYWxpZ25tZW50IF9fYXNzdW1lX2FsaWduZWQoQVJDSF9TTEFCX01JTkFMSUdOKQorI2RlZmluZSBfX2Fzc3VtZV9wYWdlX2FsaWdubWVudCBfX2Fzc3VtZV9hbGlnbmVkKFBBR0VfU0laRSkKKworLyoKICAqIEttYWxsb2MgYXJyYXkgcmVsYXRlZCBkZWZpbml0aW9ucwogICovCiAKQEAgLTI4Niw4ICszMDQsOCBAQAogfQogI2VuZGlmIC8qICFDT05GSUdfU0xPQiAqLwogCi12b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKLXZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QgZmxhZ3MpOwordm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykgX19hc3N1bWVfa21hbGxvY19hbGlnbm1lbnQ7Cit2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90IGZsYWdzKSBfX2Fzc3VtZV9zbGFiX2FsaWdubWVudDsKIHZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICosIHZvaWQgKik7CiAKIC8qCkBAIC0yOTgsMTEgKzMxNiwxMSBAQAogICogTm90ZSB0aGF0IGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHdoZW4gY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMuCiAgKi8KIHZvaWQga21lbV9jYWNoZV9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKiwgc2l6ZV90LCB2b2lkICoqKTsKLWJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90LCBzaXplX3QsIHZvaWQgKiopOworaW50IGttZW1fY2FjaGVfYWxsb2NfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCwgc2l6ZV90LCB2b2lkICoqKTsKIAogI2lmZGVmIENPTkZJR19OVU1BCi12b2lkICpfX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKLXZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwordm9pZCAqX19rbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkgX19hc3N1bWVfa21hbGxvY19hbGlnbm1lbnQ7Cit2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKSBfX2Fzc3VtZV9zbGFiX2FsaWdubWVudDsKICNlbHNlCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9fa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiB7CkBAIC0zMTYsMTIgKzMzNCwxMiBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVFJBQ0lORwotZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2NfdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QsIHNpemVfdCk7CitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY190cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCwgc2l6ZV90KSBfX2Fzc3VtZV9zbGFiX2FsaWdubWVudDsKIAogI2lmZGVmIENPTkZJR19OVU1BCiBleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlX3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCQkJCQkgICBnZnBfdCBnZnBmbGFncywKLQkJCQkJICAgaW50IG5vZGUsIHNpemVfdCBzaXplKTsKKwkJCQkJICAgaW50IG5vZGUsIHNpemVfdCBzaXplKSBfX2Fzc3VtZV9zbGFiX2FsaWdubWVudDsKICNlbHNlCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKgoga21lbV9jYWNoZV9hbGxvY19ub2RlX3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLApAQCAtMzU0LDEwICszNzIsMTAgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqLwogCi1leHRlcm4gdm9pZCAqa21hbGxvY19vcmRlcihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBvcmRlcik7CitleHRlcm4gdm9pZCAqa21hbGxvY19vcmRlcihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBvcmRlcikgX19hc3N1bWVfcGFnZV9hbGlnbm1lbnQ7CiAKICNpZmRlZiBDT05GSUdfVFJBQ0lORwotZXh0ZXJuIHZvaWQgKmttYWxsb2Nfb3JkZXJfdHJhY2Uoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgb3JkZXIpOworZXh0ZXJuIHZvaWQgKmttYWxsb2Nfb3JkZXJfdHJhY2Uoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgb3JkZXIpIF9fYXNzdW1lX3BhZ2VfYWxpZ25tZW50OwogI2Vsc2UKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqCiBrbWFsbG9jX29yZGVyX3RyYWNlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IG9yZGVyKQpAQCAtNDgyLDE1ICs1MDAsNiBAQAogCXJldHVybiBfX2ttYWxsb2Nfbm9kZShzaXplLCBmbGFncywgbm9kZSk7CiB9CiAKLS8qCi0gKiBTZXR0aW5nIEFSQ0hfU0xBQl9NSU5BTElHTiBpbiBhcmNoIGhlYWRlcnMgYWxsb3dzIGEgZGlmZmVyZW50IGFsaWdubWVudC4KLSAqIEludGVuZGVkIGZvciBhcmNoZXMgdGhhdCBnZXQgbWlzYWxpZ25tZW50IGZhdWx0cyBldmVuIGZvciA2NCBiaXQgaW50ZWdlcgotICogYWxpZ25lZCBidWZmZXJzLgotICovCi0jaWZuZGVmIEFSQ0hfU0xBQl9NSU5BTElHTgotI2RlZmluZSBBUkNIX1NMQUJfTUlOQUxJR04gX19hbGlnbm9mX18odW5zaWduZWQgbG9uZyBsb25nKQotI2VuZGlmCi0KIHN0cnVjdCBtZW1jZ19jYWNoZV9hcnJheSB7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqZW50cmllc1swXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RvcF9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oCmluZGV4IDBhZGVkY2EuLjBlMWIxNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RvcF9tYWNoaW5lLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdG9wX21hY2hpbmUuaApAQCAtOTksNyArOTksNyBAQAogICogZ3JhYmJpbmcgZXZlcnkgc3BpbmxvY2sgKGFuZCBtb3JlKS4gIFNvIHRoZSAicmVhZCIgc2lkZSB0byBzdWNoIGEKICAqIGxvY2sgaXMgYW55dGhpbmcgd2hpY2ggZGlzYWJsZXMgcHJlZW1wdGlvbi4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NUT1BfTUFDSElORSkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpCiAKIC8qKgogICogc3RvcF9tYWNoaW5lOiBmcmVlemUgdGhlIG1hY2hpbmUgb24gYWxsIENQVXMgYW5kIHJ1biB0aGlzIGZ1bmN0aW9uCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogaW50IHN0b3BfbWFjaGluZV9mcm9tX2luYWN0aXZlX2NwdShjcHVfc3RvcF9mbl90IGZuLCB2b2lkICpkYXRhLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzKTsKLSNlbHNlCSAvKiBDT05GSUdfU1RPUF9NQUNISU5FICYmIENPTkZJR19TTVAgKi8KKyNlbHNlCS8qIENPTkZJR19TTVAgfHwgQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IHN0b3BfbWFjaGluZShjcHVfc3RvcF9mbl90IGZuLCB2b2lkICpkYXRhLAogCQkJCSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cykKQEAgLTEzNyw1ICsxMzcsNSBAQAogCXJldHVybiBzdG9wX21hY2hpbmUoZm4sIGRhdGEsIGNwdXMpOwogfQogCi0jZW5kaWYJLyogQ09ORklHX1NUT1BfTUFDSElORSAmJiBDT05GSUdfU01QICovCisjZW5kaWYJLyogQ09ORklHX1NNUCB8fCBDT05GSUdfSE9UUExVR19DUFUgKi8KICNlbmRpZgkvKiBfTElOVVhfU1RPUF9NQUNISU5FICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggYTE1NmI4Mi4uYzJiNjZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNTI0LDcgKzUyNCw3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX2xjaG93bihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCiAJCQkJdWlkX3QgdXNlciwgZ2lkX3QgZ3JvdXApOwogYXNtbGlua2FnZSBsb25nIHN5c19mY2hvd24odW5zaWduZWQgaW50IGZkLCB1aWRfdCB1c2VyLCBnaWRfdCBncm91cCk7Ci0jaWZkZWYgQ09ORklHX1VJRDE2CisjaWZkZWYgQ09ORklHX0hBVkVfVUlEMTYKIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hvd24xNihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCiAJCQkJb2xkX3VpZF90IHVzZXIsIG9sZF9naWRfdCBncm91cCk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2xjaG93bjE2KGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKaW5kZXggNDAxNGE1OS4uNjEzYzI5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aGVybWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKQEAgLTQzOCw3ICs0MzgsOCBAQAogc3RhdGljIGlubGluZSBpbnQgdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2UoCiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LCBpbnQgdHJpcCwKIAlzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKLQl1bnNpZ25lZCBsb25nIHVwcGVyLCB1bnNpZ25lZCBsb25nIGxvd2VyKQorCXVuc2lnbmVkIGxvbmcgdXBwZXIsIHVuc2lnbmVkIGxvbmcgbG93ZXIsCisJdW5zaWduZWQgaW50IHdlaWdodCkKIHsgcmV0dXJuIC1FTk9ERVY7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRoZXJtYWxfem9uZV91bmJpbmRfY29vbGluZ19kZXZpY2UoCiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LCBpbnQgdHJpcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5LmggYi9pbmNsdWRlL2xpbnV4L3R0eS5oCmluZGV4IDViMDRiMGEuLjVlMzFmMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5LmgKKysrIGIvaW5jbHVkZS9saW51eC90dHkuaApAQCAtNjA3LDcgKzYwNyw3IEBACiAKIC8qIHR0eV9hdWRpdC5jICovCiAjaWZkZWYgQ09ORklHX0FVRElUCi1leHRlcm4gdm9pZCB0dHlfYXVkaXRfYWRkX2RhdGEoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqZGF0YSwKK2V4dGVybiB2b2lkIHR0eV9hdWRpdF9hZGRfZGF0YShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB2b2lkICpkYXRhLAogCQkJICAgICAgIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpY2Fub24pOwogZXh0ZXJuIHZvaWQgdHR5X2F1ZGl0X2V4aXQodm9pZCk7CiBleHRlcm4gdm9pZCB0dHlfYXVkaXRfZm9yayhzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKTsKQEAgLTYxNSw4ICs2MTUsOCBAQAogZXh0ZXJuIHZvaWQgdHR5X2F1ZGl0X3B1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gaW50IHR0eV9hdWRpdF9wdXNoX2N1cnJlbnQodm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHR0eV9hdWRpdF9hZGRfZGF0YShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQl1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaWNhbm9uKQorc3RhdGljIGlubGluZSB2b2lkIHR0eV9hdWRpdF9hZGRfZGF0YShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB2b2lkICpkYXRhLAorCQkJCSAgICAgIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpY2Fub24pCiB7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdHR5X2F1ZGl0X3Rpb2NzdGkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAppbmRleCA3MGQ4NTAwLi43MGRkM2RmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0zNSw3ICszNSw3IEBACiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZwkJdWludHB0cl90OwogCi0jaWZkZWYgQ09ORklHX1VJRDE2CisjaWZkZWYgQ09ORklHX0hBVkVfVUlEMTYKIC8qIFRoaXMgaXMgZGVmaW5lZCBieSBpbmNsdWRlL2FzbS17YXJjaH0vcG9zaXhfdHlwZXMuaCAqLwogdHlwZWRlZiBfX2tlcm5lbF9vbGRfdWlkX3QJb2xkX3VpZF90OwogdHlwZWRlZiBfX2tlcm5lbF9vbGRfZ2lkX3QJb2xkX2dpZF90OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91cHJvYmVzLmggYi9pbmNsdWRlL2xpbnV4L3Vwcm9iZXMuaAppbmRleCAwYmRjNzJmLi40YTI5Yzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vwcm9iZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Vwcm9iZXMuaApAQCAtMjEsNyArMjEsNyBAQAogICogQXV0aG9yczoKICAqCVNyaWthciBEcm9uYW1yYWp1CiAgKglKaW0gS2VuaXN0b24KLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NkY19uY20uaCBiL2luY2x1ZGUvbGludXgvdXNiL2NkY19uY20uaAppbmRleCAxZjY1MjZjLi4zYTM3NWQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jZGNfbmNtLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2RjX25jbS5oCkBAIC0xMzgsNiArMTM4LDcgQEAKIH07CiAKIHU4IGNkY19uY21fc2VsZWN0X2FsdHNldHRpbmcoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworaW50IGNkY19uY21fY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSk7CiBpbnQgY2RjX25jbV9iaW5kX2NvbW1vbihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1OCBkYXRhX2FsdHNldHRpbmcsIGludCBkcnZmbGFncyk7CiB2b2lkIGNkY19uY21fdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogc3RydWN0IHNrX2J1ZmYgKmNkY19uY21fZmlsbF90eF9mcmFtZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIF9fbGUzMiBzaWduKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oIGIvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmgKaW5kZXggOTk0OGM4Ny4uMWQwMDQzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmgKQEAgLTQ3LDQgKzQ3LDcgQEAKIC8qIGRldmljZSBnZW5lcmF0ZXMgc3B1cmlvdXMgd2FrZXVwLCBpZ25vcmUgcmVtb3RlIHdha2V1cCBjYXBhYmlsaXR5ICovCiAjZGVmaW5lIFVTQl9RVUlSS19JR05PUkVfUkVNT1RFX1dBS0VVUAkJQklUKDkpCiAKKy8qIGRldmljZSBjYW4ndCBoYW5kbGUgTGluayBQb3dlciBNYW5hZ2VtZW50ICovCisjZGVmaW5lIFVTQl9RVUlSS19OT19MUE0JCQlCSVQoMTApCisKICNlbmRpZiAvKiBfX0xJTlVYX1VTQl9RVUlSS1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW8uaAppbmRleCA2MTBhODZhLi5kZGI0NDA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW8uaApAQCAtNDQsOSArNDQsNiBAQAogCXZvaWQJKCpyZXF1ZXN0KSh2b2lkICpkZXZpY2VfZGF0YSwgdW5zaWduZWQgaW50IGNvdW50KTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgaW9tbXVfZ3JvdXAgKnZmaW9faW9tbXVfZ3JvdXBfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCB2ZmlvX2lvbW11X2dyb3VwX3B1dChzdHJ1Y3QgaW9tbXVfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCiBleHRlcm4gaW50IHZmaW9fYWRkX2dyb3VwX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzICpvcHMsCiAJCQkgICAgICB2b2lkICpkZXZpY2VfZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaAppbmRleCA1ZGJjOGIwLi4zZTVkOTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKQEAgLTE3NiwxMSArMTc2LDExIEBACiAjZGVmaW5lIHN1Yl96b25lX3BhZ2Vfc3RhdGUoX196LCBfX2ksIF9fZCkgbW9kX3pvbmVfcGFnZV9zdGF0ZShfX3osIF9faSwgLShfX2QpKQogCiAjaWZkZWYgQ09ORklHX1NNUAotdm9pZCBfX21vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKiwgZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtLCBpbnQpOwordm9pZCBfX21vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKiwgZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtLCBsb25nKTsKIHZvaWQgX19pbmNfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICosIGVudW0gem9uZV9zdGF0X2l0ZW0pOwogdm9pZCBfX2RlY196b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKiwgZW51bSB6b25lX3N0YXRfaXRlbSk7CiAKLXZvaWQgbW9kX3pvbmVfcGFnZV9zdGF0ZShzdHJ1Y3Qgem9uZSAqLCBlbnVtIHpvbmVfc3RhdF9pdGVtLCBpbnQpOwordm9pZCBtb2Rfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCB6b25lICosIGVudW0gem9uZV9zdGF0X2l0ZW0sIGxvbmcpOwogdm9pZCBpbmNfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICosIGVudW0gem9uZV9zdGF0X2l0ZW0pOwogdm9pZCBkZWNfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICosIGVudW0gem9uZV9zdGF0X2l0ZW0pOwogCkBAIC0yMDUsNyArMjA1LDcgQEAKICAqIFRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgbW9kaWZ5IHRoZSB6b25lIGFuZCBnbG9iYWwgY291bnRlcnMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsCi0JCQllbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0sIGludCBkZWx0YSkKKwkJCWVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSwgbG9uZyBkZWx0YSkKIHsKIAl6b25lX3BhZ2Vfc3RhdGVfYWRkKGRlbHRhLCB6b25lLCBpdGVtKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2FpdC5oIGIvaW5jbHVkZS9saW51eC93YWl0LmgKaW5kZXggMWUxYmY5Zi4uNTEzYjM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93YWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC93YWl0LmgKQEAgLTE0NSw3ICsxNDUsNyBAQAogCWxpc3RfZGVsKCZvbGQtPnRhc2tfbGlzdCk7CiB9CiAKLXR5cGVkZWYgaW50IHdhaXRfYml0X2FjdGlvbl9mKHN0cnVjdCB3YWl0X2JpdF9rZXkgKik7Cit0eXBlZGVmIGludCB3YWl0X2JpdF9hY3Rpb25fZihzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICosIGludCBtb2RlKTsKIHZvaWQgX193YWtlX3VwKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yLCB2b2lkICprZXkpOwogdm9pZCBfX3dha2VfdXBfbG9ja2VkX2tleSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIHZvaWQgKmtleSk7CiB2b2lkIF9fd2FrZV91cF9zeW5jX2tleSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBuciwgdm9pZCAqa2V5KTsKQEAgLTk2MCwxMCArOTYwLDEwIEBACiAJfSB3aGlsZSAoMCkKIAogCi1leHRlcm4gaW50IGJpdF93YWl0KHN0cnVjdCB3YWl0X2JpdF9rZXkgKik7Ci1leHRlcm4gaW50IGJpdF93YWl0X2lvKHN0cnVjdCB3YWl0X2JpdF9rZXkgKik7Ci1leHRlcm4gaW50IGJpdF93YWl0X3RpbWVvdXQoc3RydWN0IHdhaXRfYml0X2tleSAqKTsKLWV4dGVybiBpbnQgYml0X3dhaXRfaW9fdGltZW91dChzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICopOworZXh0ZXJuIGludCBiaXRfd2FpdChzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICosIGludCk7CitleHRlcm4gaW50IGJpdF93YWl0X2lvKHN0cnVjdCB3YWl0X2JpdF9rZXkgKiwgaW50KTsKK2V4dGVybiBpbnQgYml0X3dhaXRfdGltZW91dChzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICosIGludCk7CitleHRlcm4gaW50IGJpdF93YWl0X2lvX3RpbWVvdXQoc3RydWN0IHdhaXRfYml0X2tleSAqLCBpbnQpOwogCiAvKioKICAqIHdhaXRfb25fYml0IC0gd2FpdCBmb3IgYSBiaXQgdG8gYmUgY2xlYXJlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCmluZGV4IGIzNmQ4MzcuLjJhOTFhMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaAorKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmgKQEAgLTYyLDYgKzYyLDcgQEAKICNkZWZpbmUgVU5JWF9HQ19DQU5ESURBVEUJMAogI2RlZmluZSBVTklYX0dDX01BWUJFX0NZQ0xFCTEKIAlzdHJ1Y3Qgc29ja2V0X3dxCXBlZXJfd3E7CisJd2FpdF9xdWV1ZV90CQlwZWVyX3dha2U7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1bml4X3NvY2sgKnVuaXhfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHN0LmggYi9pbmNsdWRlL25ldC9kc3QuaAppbmRleCAxMjc5ZjliLi5jNzMyOWRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc3QuaAorKysgYi9pbmNsdWRlL25ldC9kc3QuaApAQCAtMzIyLDYgKzMyMiwzOSBAQAogCX0KIH0KIAorLyoqCisgKiBkc3RfaG9sZF9zYWZlIC0gVGFrZSBhIHJlZmVyZW5jZSBvbiBhIGRzdCBpZiBwb3NzaWJsZQorICogQGRzdDogcG9pbnRlciB0byBkc3QgZW50cnkKKyAqCisgKiBUaGlzIGhlbHBlciByZXR1cm5zIGZhbHNlIGlmIGl0IGNvdWxkIG5vdCBzYWZlbHkKKyAqIHRha2UgYSByZWZlcmVuY2Ugb24gYSBkc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBkc3RfaG9sZF9zYWZlKHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlpZiAoZHN0LT5mbGFncyAmIERTVF9OT0NBQ0hFKQorCQlyZXR1cm4gYXRvbWljX2luY19ub3RfemVybygmZHN0LT5fX3JlZmNudCk7CisJZHN0X2hvbGQoZHN0KTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBza2JfZHN0X2ZvcmNlX3NhZmUgLSBtYWtlcyBzdXJlIHNrYiBkc3QgaXMgcmVmY291bnRlZAorICogQHNrYjogYnVmZmVyCisgKgorICogSWYgZHN0IGlzIG5vdCB5ZXQgcmVmY291bnRlZCBhbmQgbm90IGRlc3Ryb3llZCwgZ3JhYiBhIHJlZiBvbiBpdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNrYl9kc3RfZm9yY2Vfc2FmZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChza2JfZHN0X2lzX25vcmVmKHNrYikpIHsKKwkJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpOworCisJCWlmICghZHN0X2hvbGRfc2FmZShkc3QpKQorCQkJZHN0ID0gTlVMTDsKKworCQlza2ItPl9za2JfcmVmZHN0ID0gKHVuc2lnbmVkIGxvbmcpZHN0OworCX0KK30KKwogCiAvKioKICAqCV9fc2tiX3R1bm5lbF9yeCAtIHByZXBhcmUgc2tiIGZvciByeCByZWluc2VydApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X3NvY2suaAppbmRleCAyMTM0ZTZkLi42MjViZGY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X3NvY2suaApAQCAtMjEwLDE4ICsyMTAsMzcgQEAKICNkZWZpbmUgSVBfQ01TR19PUklHRFNUQUREUglCSVQoNikKICNkZWZpbmUgSVBfQ01TR19DSEVDS1NVTQlCSVQoNykKIAotLyogU1lOQUNLIG1lc3NhZ2VzIG1pZ2h0IGJlIGF0dGFjaGVkIHRvIHJlcXVlc3Qgc29ja2V0cy4KKy8qKgorICogc2tfdG9fZnVsbF9zayAtIEFjY2VzcyB0byBhIGZ1bGwgc29ja2V0CisgKiBAc2s6IHBvaW50ZXIgdG8gYSBzb2NrZXQKKyAqCisgKiBTWU5BQ0sgbWVzc2FnZXMgbWlnaHQgYmUgYXR0YWNoZWQgdG8gcmVxdWVzdCBzb2NrZXRzLgogICogU29tZSBwbGFjZXMgd2FudCB0byByZWFjaCB0aGUgbGlzdGVuZXIgaW4gdGhpcyBjYXNlLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpza2JfdG9fZnVsbF9zayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqc2tfdG9fZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKLQorI2lmZGVmIENPTkZJR19JTkVUCiAJaWYgKHNrICYmIHNrLT5za19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKQogCQlzayA9IGluZXRfcmVxc2soc2spLT5yc2tfbGlzdGVuZXI7CisjZW5kaWYKIAlyZXR1cm4gc2s7CiB9CiAKKy8qIHNrX3RvX2Z1bGxfc2soKSB2YXJpYW50IHdpdGggYSBjb25zdCBhcmd1bWVudCAqLworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfY29uc3RfdG9fZnVsbF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisjaWZkZWYgQ09ORklHX0lORVQKKwlpZiAoc2sgJiYgc2stPnNrX3N0YXRlID09IFRDUF9ORVdfU1lOX1JFQ1YpCisJCXNrID0gKChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICopc2spLT5yc2tfbGlzdGVuZXI7CisjZW5kaWYKKwlyZXR1cm4gc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnNrYl90b19mdWxsX3NrKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrX3RvX2Z1bGxfc2soc2tiLT5zayk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfc29jayAqaW5ldF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgaW5ldF9zb2NrICopc2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaAppbmRleCA0YTYwMDlkLi4yMzVjNzgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKQEAgLTc4LDYgKzc4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0cGVlcl9zZXRfYWRkcl92NChzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqaWFkZHIsIF9fYmUzMiBpcCkKIHsKIAlpYWRkci0+YTQuYWRkciA9IGlwOworCWlhZGRyLT5hNC52aWYgPSAwOwogCWlhZGRyLT5mYW1pbHkgPSBBRl9JTkVUOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKaW5kZXggYWFmOTcwMC4uZmI5NjFhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtMTY3LDcgKzE2Nyw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdTMyIHJ0Nl9nZXRfY29va2llKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7Ci0JaWYgKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX1BDUFUgfHwgdW5saWtlbHkocnQtPmRzdC5mbGFncyAmIERTVF9OT0NBQ0hFKSkKKwlpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfUENQVSB8fAorCSAgICAodW5saWtlbHkocnQtPmRzdC5mbGFncyAmIERTVF9OT0NBQ0hFKSAmJiBydC0+ZHN0LmZyb20pKQogCQlydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKikocnQtPmRzdC5mcm9tKTsKIAogCXJldHVybiBydC0+cnQ2aV9ub2RlID8gcnQtPnJ0Nmlfbm9kZS0+Zm5fc2VybnVtIDogMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMmJmYjJhZC4uODc3ZjY4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTEzMywyNyArMTMzLDE4IEBACiAvKgogICoJU3RvcmUgYSBkZXN0aW5hdGlvbiBjYWNoZSBlbnRyeSBpbiBhIHNvY2tldAogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pcDZfZHN0X3N0b3JlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcDZfZHN0X3N0b3JlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAorCQkJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKLQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKSBkc3Q7CiAKKwlucC0+ZHN0X2Nvb2tpZSA9IHJ0Nl9nZXRfY29va2llKChzdHJ1Y3QgcnQ2X2luZm8gKilkc3QpOwogCXNrX3NldHVwX2NhcHMoc2ssIGRzdCk7CiAJbnAtPmRhZGRyX2NhY2hlID0gZGFkZHI7CiAjaWZkZWYgQ09ORklHX0lQVjZfU1VCVFJFRVMKIAlucC0+c2FkZHJfY2FjaGUgPSBzYWRkcjsKICNlbmRpZgotCW5wLT5kc3RfY29va2llID0gcnQ2X2dldF9jb29raWUocnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXA2X2RzdF9zdG9yZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCQkgc3RydWN0IGluNl9hZGRyICpkYWRkciwgc3RydWN0IGluNl9hZGRyICpzYWRkcikKLXsKLQlzcGluX2xvY2soJnNrLT5za19kc3RfbG9jayk7Ci0JX19pcDZfZHN0X3N0b3JlKHNrLCBkc3QsIGRhZGRyLCBzYWRkcik7Ci0Jc3Bpbl91bmxvY2soJnNrLT5za19kc3RfbG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpcHY2X3VuaWNhc3RfZGVzdGluYXRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaCBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaAppbmRleCBhYWVlNmZhLi5mZjc4OGI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCkBAIC05MCwxMSArOTAsMTIgQEAKIAllcnIgPSBpcDZfbG9jYWxfb3V0KGRldl9uZXQoc2tiX2RzdChza2IpLT5kZXYpLCBzaywgc2tiKTsKIAogCWlmIChuZXRfeG1pdF9ldmFsKGVycikgPT0gMCkgewotCQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqdHN0YXRzID0gdGhpc19jcHVfcHRyKGRldi0+dHN0YXRzKTsKKwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnRzdGF0cyA9IGdldF9jcHVfcHRyKGRldi0+dHN0YXRzKTsKIAkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmdHN0YXRzLT5zeW5jcCk7CiAJCXRzdGF0cy0+dHhfYnl0ZXMgKz0gcGt0X2xlbjsKIAkJdHN0YXRzLT50eF9wYWNrZXRzKys7CiAJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZ0c3RhdHMtPnN5bmNwKTsKKwkJcHV0X2NwdV9wdHIodHN0YXRzKTsKIAl9IGVsc2UgewogCQlzdGF0cy0+dHhfZXJyb3JzKys7CiAJCXN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycysrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCmluZGV4IGY2ZGFmZWMuLjYyYTc1MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAorKysgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKQEAgLTI4NywxMiArMjg3LDEzIEBACiAJCQkJICAgICAgIHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzIF9fcGVyY3B1ICpzdGF0cykKIHsKIAlpZiAoZXJyID4gMCkgewotCQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqdHN0YXRzID0gdGhpc19jcHVfcHRyKHN0YXRzKTsKKwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnRzdGF0cyA9IGdldF9jcHVfcHRyKHN0YXRzKTsKIAogCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZ0c3RhdHMtPnN5bmNwKTsKIAkJdHN0YXRzLT50eF9ieXRlcyArPSBlcnI7CiAJCXRzdGF0cy0+dHhfcGFja2V0cysrOwogCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmdHN0YXRzLT5zeW5jcCk7CisJCXB1dF9jcHVfcHRyKHRzdGF0cyk7CiAJfSBlbHNlIGlmIChlcnIgPCAwKSB7CiAJCWVycl9zdGF0cy0+dHhfZXJyb3JzKys7CiAJCWVycl9zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCBlMWExMGIwLi45YTVjOWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0yMDUsNiArMjA1LDcgQEAKICAqLwogCiBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgeworCWF0b21pY190CQlyZWZjbnQ7CiAJLyogTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlICovCiAJaW50CQkJdG90X2xlbjsKIApAQCAtMjE3LDcgKzIxOCw3IEBACiAJc3RydWN0IGlwdjZfb3B0X2hkcgkqZHN0MG9wdDsKIAlzdHJ1Y3QgaXB2Nl9ydF9oZHIJKnNyY3J0OwkvKiBSb3V0aW5nIEhlYWRlciAqLwogCXN0cnVjdCBpcHY2X29wdF9oZHIJKmRzdDFvcHQ7Ci0KKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIAkvKiBPcHRpb24gYnVmZmVyLCBhcyByZWFkIGJ5IElQVjZfUEtUT1BUSU9OUywgc3RhcnRzIGhlcmUuICovCiB9OwogCkBAIC0yNTIsNiArMjUzLDI0IEBACiAJc3RydWN0IHJjdV9oZWFkCQkJcmN1OwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKnR4b3B0X2dldChjb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyAqbnApCit7CisJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJb3B0ID0gcmN1X2RlcmVmZXJlbmNlKG5wLT5vcHQpOworCWlmIChvcHQgJiYgIWF0b21pY19pbmNfbm90X3plcm8oJm9wdC0+cmVmY250KSkKKwkJb3B0ID0gTlVMTDsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gb3B0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdHhvcHRfcHV0KHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0KQoreworCWlmIChvcHQgJiYgYXRvbWljX2RlY19hbmRfdGVzdCgmb3B0LT5yZWZjbnQpKQorCQlrZnJlZV9yY3Uob3B0LCByY3UpOworfQorCiBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmw2X3NvY2tfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGxhYmVsKTsKIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqZmw2X21lcmdlX29wdGlvbnMoc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHRfc3BhY2UsCiAJCQkJCSBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmwsCkBAIC00OTAsNiArNTA5LDcgQEAKIAl1MzIgdXNlcjsKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNyYzsKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRzdDsKKwlpbnQgaWlmOwogCXU4IGVjbjsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDgyMDQ1ZmMuLjc2MGJjNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtMjAwMyw4ICsyMDAzLDEwIEBACiAgKglpdCBzaG91bGRuJ3QgYmUgc2V0LgogICoKICAqIEBtYXhfdHhfYWdncmVnYXRpb25fc3ViZnJhbWVzOiBtYXhpbXVtIG51bWJlciBvZiBzdWJmcmFtZXMgaW4gYW4KLSAqCWFnZ3JlZ2F0ZSBhbiBIVCBkcml2ZXIgd2lsbCB0cmFuc21pdCwgdXNlZCBieSB0aGUgcGVlciBhcyBhCi0gKgloaW50IHRvIHNpemUgaXRzIHJlb3JkZXIgYnVmZmVyLgorICoJYWdncmVnYXRlIGFuIEhUIGRyaXZlciB3aWxsIHRyYW5zbWl0LiBUaG91Z2ggQUREQkEgd2lsbCBhZHZlcnRpc2UKKyAqCWEgY29uc3RhbnQgdmFsdWUgb2YgNjQgYXMgc29tZSBvbGRlciBBUHMgY2FuIGNyYXNoIGlmIHRoZSB3aW5kb3cKKyAqCXNpemUgaXMgc21hbGxlciAoYW4gZXhhbXBsZSBpcyBMaW5rU3lzIFdSVDEyME4gd2l0aCBGVyB2MS4wLjA3CisgKglidWlsZCAwMDIgSnVuIDE4IDIwMTIpLgogICoKICAqIEBvZmZjaGFubmVsX3R4X2h3X3F1ZXVlOiBIVyBxdWV1ZSBJRCB0byB1c2UgZm9yIG9mZmNoYW5uZWwgVFgKICAqCShpZiAlSUVFRTgwMjExX0hXX1FVRVVFX0NPTlRST0wgaXMgc2V0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmRpc2MuaCBiL2luY2x1ZGUvbmV0L25kaXNjLmgKaW5kZXggYmYzOTM3NC4uMmQ4ZWRhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmRpc2MuaAorKysgYi9pbmNsdWRlL25ldC9uZGlzYy5oCkBAIC0xODEsOCArMTgxLDcgQEAKIGludCBuZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHZvaWQgbmRpc2Nfc2VuZF9ucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNvbGljaXQsCi0JCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCSAgIHN0cnVjdCBza19idWZmICpvc2tiKTsKKwkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7CiAKIHZvaWQgbmRpc2Nfc2VuZF9ycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaAppbmRleCBjOTE0OWNjLi40YmQ3NTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCkBAIC02MTgsNiArNjE4LDggQEAKIAl2b2lkCQkJCSgqZXZhbCkoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQkJCQkJc3RydWN0IG5mdF9yZWdzICpyZWdzLAogCQkJCQkJY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpOworCWludAkJCQkoKmNsb25lKShzdHJ1Y3QgbmZ0X2V4cHIgKmRzdCwKKwkJCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKnNyYyk7CiAJdW5zaWduZWQgaW50CQkJc2l6ZTsKIAogCWludAkJCQkoKmluaXQpKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCkBAIC02NjAsMTAgKzY2MiwyMCBAQAogaW50IG5mdF9leHByX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGF0dHIsCiAJCSAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKTsKIAotc3RhdGljIGlubGluZSB2b2lkIG5mdF9leHByX2Nsb25lKHN0cnVjdCBuZnRfZXhwciAqZHN0LCBzdHJ1Y3QgbmZ0X2V4cHIgKnNyYykKK3N0YXRpYyBpbmxpbmUgaW50IG5mdF9leHByX2Nsb25lKHN0cnVjdCBuZnRfZXhwciAqZHN0LCBzdHJ1Y3QgbmZ0X2V4cHIgKnNyYykKIHsKKwlpbnQgZXJyOworCiAJX19tb2R1bGVfZ2V0KHNyYy0+b3BzLT50eXBlLT5vd25lcik7Ci0JbWVtY3B5KGRzdCwgc3JjLCBzcmMtPm9wcy0+c2l6ZSk7CisJaWYgKHNyYy0+b3BzLT5jbG9uZSkgeworCQlkc3QtPm9wcyA9IHNyYy0+b3BzOworCQllcnIgPSBzcmMtPm9wcy0+Y2xvbmUoZHN0LCBzcmMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGRzdCwgc3JjLCBzcmMtPm9wcy0+c2l6ZSk7CisJfQorCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCmluZGV4IDRjNzljZTguLmIyYThlNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaApAQCAtNjEsNiArNjEsOSBAQAogCQkJCSAgICAgICovCiAjZGVmaW5lIFRDUV9GX1dBUk5fTk9OV0MJKDEgPDwgMTYpCiAjZGVmaW5lIFRDUV9GX0NQVVNUQVRTCQkweDIwIC8qIHJ1biB1c2luZyBwZXJjcHUgc3RhdGlzdGljcyAqLworI2RlZmluZSBUQ1FfRl9OT1BBUkVOVAkJMHg0MCAvKiByb290IG9mIGl0cyBoaWVyYXJjaHkgOgorCQkJCSAgICAgICogcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKCkgc2hvdWxkIHN0b3AuCisJCQkJICAgICAgKi8KIAl1MzIJCQlsaW1pdDsKIAljb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzCSpvcHM7CiAJc3RydWN0IHFkaXNjX3NpemVfdGFibGUJX19yY3UgKnN0YWI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDQ5NWM4N2UuLmVlYTliZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC03NzUsMTAgKzc3NSwxMCBAQAogCQloYl9zZW50OjEsCiAKIAkJLyogSXMgdGhlIFBhdGggTVRVIHVwZGF0ZSBwZW5kaW5nIG9uIHRoaXMgdHJhbnBvcnQgKi8KLQkJcG10dV9wZW5kaW5nOjE7CisJCXBtdHVfcGVuZGluZzoxLAogCi0JLyogSGFzIHRoaXMgdHJhbnNwb3J0IG1vdmVkIHRoZSBjdHNuIHNpbmNlIHdlIGxhc3Qgc2Fja2VkICovCi0JX191MzIgc2Fja19nZW5lcmF0aW9uOworCQkvKiBIYXMgdGhpcyB0cmFuc3BvcnQgbW92ZWQgdGhlIGN0c24gc2luY2Ugd2UgbGFzdCBzYWNrZWQgKi8KKwkJc2Fja19nZW5lcmF0aW9uOjE7CiAJdTMyIGRzdF9jb29raWU7CiAKIAlzdHJ1Y3QgZmxvd2kgZmw7CkBAIC0xNDgyLDE5ICsxNDgyLDIwIEBACiAJCQlwcnNjdHBfY2FwYWJsZToxLCAgIC8qIENhbiBwZWVyIGRvIFBSLVNDVFA/ICovCiAJCQlhdXRoX2NhcGFibGU6MTsgICAgIC8qIElzIHBlZXIgZG9pbmcgU0NUUC1BVVRIPyAqLwogCi0JCS8qIEFjayBTdGF0ZSAgIDogVGhpcyBmbGFnIGluZGljYXRlcyBpZiB0aGUgbmV4dCByZWNlaXZlZAorCQkvKiBzYWNrX25lZWRlZCA6IFRoaXMgZmxhZyBpbmRpY2F0ZXMgaWYgdGhlIG5leHQgcmVjZWl2ZWQKIAkJICogICAgICAgICAgICAgOiBwYWNrZXQgaXMgdG8gYmUgcmVzcG9uZGVkIHRvIHdpdGggYQotCQkgKiAgICAgICAgICAgICA6IFNBQ0suIFRoaXMgaXMgaW5pdGlhbGl6ZWR0byAwLiAgV2hlbiBhIHBhY2tldAotCQkgKiAgICAgICAgICAgICA6IGlzIHJlY2VpdmVkIGl0IGlzIGluY3JlbWVudGVkLiBJZiB0aGlzIHZhbHVlCisJCSAqICAgICAgICAgICAgIDogU0FDSy4gVGhpcyBpcyBpbml0aWFsaXplZCB0byAwLiAgV2hlbiBhIHBhY2tldAorCQkgKiAgICAgICAgICAgICA6IGlzIHJlY2VpdmVkIHNhY2tfY250IGlzIGluY3JlbWVudGVkLiBJZiB0aGlzIHZhbHVlCiAJCSAqICAgICAgICAgICAgIDogcmVhY2hlcyAyIG9yIG1vcmUsIGEgU0FDSyBpcyBzZW50IGFuZCB0aGUKIAkJICogICAgICAgICAgICAgOiB2YWx1ZSBpcyByZXNldCB0byAwLiBOb3RlOiBUaGlzIGlzIHVzZWQgb25seQogCQkgKiAgICAgICAgICAgICA6IHdoZW4gbm8gREFUQSBjaHVua3MgYXJlIHJlY2VpdmVkIG91dCBvZgogCQkgKiAgICAgICAgICAgICA6IG9yZGVyLiAgV2hlbiBEQVRBIGNodW5rcyBhcmUgb3V0IG9mIG9yZGVyLAogCQkgKiAgICAgICAgICAgICA6IFNBQ0sncyBhcmUgbm90IGRlbGF5ZWQgKHNlZSBTZWN0aW9uIDYpLgogCQkgKi8KLQkJX191OCAgICBzYWNrX25lZWRlZDsgICAgIC8qIERvIHdlIG5lZWQgdG8gc2FjayB0aGUgcGVlcj8gKi8KKwkJX191OCAgICBzYWNrX25lZWRlZDoxLCAgICAgLyogRG8gd2UgbmVlZCB0byBzYWNrIHRoZSBwZWVyPyAqLworCQkJc2Fja19nZW5lcmF0aW9uOjEsCisJCQl6ZXJvX3dpbmRvd19hbm5vdW5jZWQ6MTsKIAkJX191MzIJc2Fja19jbnQ7Ci0JCV9fdTMyCXNhY2tfZ2VuZXJhdGlvbjsKIAogCQlfX3UzMiAgIGFkYXB0YXRpb25faW5kOwkgLyogQWRhcHRhdGlvbiBDb2RlIHBvaW50LiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggYmJmN2MyYy4uMTRkM2MwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtMjU0LDcgKzI1NCw2IEBACiAgICoJQHNrX3dxOiBzb2NrIHdhaXQgcXVldWUgYW5kIGFzeW5jIGhlYWQKICAgKglAc2tfcnhfZHN0OiByZWNlaXZlIGlucHV0IHJvdXRlIHVzZWQgYnkgZWFybHkgZGVtdXgKICAgKglAc2tfZHN0X2NhY2hlOiBkZXN0aW5hdGlvbiBjYWNoZQotICAqCUBza19kc3RfbG9jazogZGVzdGluYXRpb24gY2FjaGUgbG9jawogICAqCUBza19wb2xpY3k6IGZsb3cgcG9saWN5CiAgICoJQHNrX3JlY2VpdmVfcXVldWU6IGluY29taW5nIHBhY2tldHMKICAgKglAc2tfd21lbV9hbGxvYzogdHJhbnNtaXQgcXVldWUgYnl0ZXMgY29tbWl0dGVkCkBAIC0zODQsMTQgKzM4MywxNiBAQAogCWludAkJCXNrX3JjdmJ1ZjsKIAogCXN0cnVjdCBza19maWx0ZXIgX19yY3UJKnNrX2ZpbHRlcjsKLQlzdHJ1Y3Qgc29ja2V0X3dxIF9fcmN1CSpza193cTsKLQorCXVuaW9uIHsKKwkJc3RydWN0IHNvY2tldF93cSBfX3JjdQkqc2tfd3E7CisJCXN0cnVjdCBzb2NrZXRfd3EJKnNrX3dxX3JhdzsKKwl9OwogI2lmZGVmIENPTkZJR19YRlJNCi0Jc3RydWN0IHhmcm1fcG9saWN5CSpza19wb2xpY3lbMl07CisJc3RydWN0IHhmcm1fcG9saWN5IF9fcmN1ICpza19wb2xpY3lbMl07CiAjZW5kaWYKIAlzdHJ1Y3QgZHN0X2VudHJ5CSpza19yeF9kc3Q7CiAJc3RydWN0IGRzdF9lbnRyeSBfX3JjdQkqc2tfZHN0X2NhY2hlOwotCXNwaW5sb2NrX3QJCXNrX2RzdF9sb2NrOworCS8qIE5vdGU6IDMyYml0IGhvbGUgb24gNjRiaXQgYXJjaGVzICovCiAJYXRvbWljX3QJCXNrX3dtZW1fYWxsb2M7CiAJYXRvbWljX3QJCXNrX29tZW1fYWxsb2M7CiAJaW50CQkJc2tfc25kYnVmOwpAQCAtNDAzLDYgKzQwNCw3IEBACiAJCQkJc2tfdXNlcmxvY2tzIDogNCwKIAkJCQlza19wcm90b2NvbCAgOiA4LAogCQkJCXNrX3R5cGUgICAgICA6IDE2OworI2RlZmluZSBTS19QUk9UT0NPTF9NQVggVThfTUFYCiAJa21lbWNoZWNrX2JpdGZpZWxkX2VuZChmbGFncyk7CiAJaW50CQkJc2tfd21lbV9xdWV1ZWQ7CiAJZ2ZwX3QJCQlza19hbGxvY2F0aW9uOwpAQCAtNzM5LDYgKzc0MSw4IEBACiAJU09DS19TRUxFQ1RfRVJSX1FVRVVFLCAvKiBXYWtlIHNlbGVjdCBvbiBlcnJvciBxdWV1ZSAqLwogfTsKIAorI2RlZmluZSBTS19GTEFHU19USU1FU1RBTVAgKCgxVUwgPDwgU09DS19USU1FU1RBTVApIHwgKDFVTCA8PCBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSkpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX2NvcHlfZmxhZ3Moc3RydWN0IHNvY2sgKm5zaywgc3RydWN0IHNvY2sgKm9zaykKIHsKIAluc2stPnNrX2ZsYWdzID0gb3NrLT5za19mbGFnczsKQEAgLTgxMyw3ICs4MTcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fc2tfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qIGRvbnQgbGV0IHNrYiBkc3Qgbm90IHJlZmNvdW50ZWQsIHdlIGFyZSBnb2luZyB0byBsZWF2ZSByY3UgbG9jayAqLwotCXNrYl9kc3RfZm9yY2Uoc2tiKTsKKwlza2JfZHN0X2ZvcmNlX3NhZmUoc2tiKTsKIAogCWlmICghc2stPnNrX2JhY2tsb2cudGFpbCkKIAkJc2stPnNrX2JhY2tsb2cuaGVhZCA9IHNrYjsKQEAgLTIwMDUsMTAgKzIwMDksMjcgQEAKIAlyZXR1cm4gYW10OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2tfd2FrZV9hc3luYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBob3csIGludCBiYW5kKQorLyogTm90ZToKKyAqICBXZSB1c2Ugc2stPnNrX3dxX3JhdywgZnJvbSBjb250ZXh0cyBrbm93aW5nIHRoaXMKKyAqICBwb2ludGVyIGlzIG5vdCBOVUxMIGFuZCBjYW5ub3QgZGlzYXBwZWFyL2NoYW5nZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNrX3NldF9iaXQoaW50IG5yLCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JaWYgKHNvY2tfZmxhZyhzaywgU09DS19GQVNZTkMpKQotCQlzb2NrX3dha2VfYXN5bmMoc2stPnNrX3NvY2tldCwgaG93LCBiYW5kKTsKKwlzZXRfYml0KG5yLCAmc2stPnNrX3dxX3Jhdy0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tfY2xlYXJfYml0KGludCBuciwgc3RydWN0IHNvY2sgKnNrKQoreworCWNsZWFyX2JpdChuciwgJnNrLT5za193cV9yYXctPmZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrX3dha2VfYXN5bmMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBpbnQgaG93LCBpbnQgYmFuZCkKK3sKKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0ZBU1lOQykpIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlzb2NrX3dha2VfYXN5bmMocmN1X2RlcmVmZXJlbmNlKHNrLT5za193cSksIGhvdywgYmFuZCk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KIH0KIAogLyogU2luY2Ugc2tfe3Isd31tZW1fYWxsb2Mgc3VtcyBza2ItPnRydWVzaXplLCBldmVuIGEgc21hbGwgZnJhbWUgbWlnaHQKQEAgLTIyMjYsNiArMjI0NywzMSBAQAogCXJldHVybiAoMSA8PCBzay0+c2tfc3RhdGUpICYgKFRDUEZfTElTVEVOIHwgVENQRl9ORVdfU1lOX1JFQ1YpOwogfQogCisvKioKKyAqIHNrX3N0YXRlX2xvYWQgLSByZWFkIHNrLT5za19zdGF0ZSBmb3IgbG9ja2xlc3MgY29udGV4dHMKKyAqIEBzazogc29ja2V0IHBvaW50ZXIKKyAqCisgKiBQYWlyZWQgd2l0aCBza19zdGF0ZV9zdG9yZSgpLiBVc2VkIGluIHBsYWNlcyB3ZSBkbyBub3QgaG9sZCBzb2NrZXQgbG9jayA6CisgKiB0Y3BfZGlhZ19nZXRfaW5mbygpLCB0Y3BfZ2V0X2luZm8oKSwgdGNwX3BvbGwoKSwgZ2V0X3RjcDRfc29jaygpIC4uLgorICovCitzdGF0aWMgaW5saW5lIGludCBza19zdGF0ZV9sb2FkKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gc21wX2xvYWRfYWNxdWlyZSgmc2stPnNrX3N0YXRlKTsKK30KKworLyoqCisgKiBza19zdGF0ZV9zdG9yZSAtIHVwZGF0ZSBzay0+c2tfc3RhdGUKKyAqIEBzazogc29ja2V0IHBvaW50ZXIKKyAqIEBuZXdzdGF0ZTogbmV3IHN0YXRlCisgKgorICogUGFpcmVkIHdpdGggc2tfc3RhdGVfbG9hZCgpLiBTaG91bGQgYmUgdXNlZCBpbiBjb250ZXh0cyB3aGVyZQorICogc3RhdGUgY2hhbmdlIG1pZ2h0IGltcGFjdCBsb2NrbGVzcyByZWFkZXJzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2tfc3RhdGVfc3RvcmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbmV3c3RhdGUpCit7CisJc21wX3N0b3JlX3JlbGVhc2UoJnNrLT5za19zdGF0ZSwgbmV3c3RhdGUpOworfQorCiB2b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKTsKIGludCBzb2NrX2dldF90aW1lc3RhbXAoc3RydWN0IHNvY2sgKiwgc3RydWN0IHRpbWV2YWwgX191c2VyICopOwogaW50IHNvY2tfZ2V0X3RpbWVzdGFtcG5zKHN0cnVjdCBzb2NrICosIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zd2l0Y2hkZXYuaCBiL2luY2x1ZGUvbmV0L3N3aXRjaGRldi5oCmluZGV4IGJjODY1ZTIuLjFkMjJjZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3N3aXRjaGRldi5oCisrKyBiL2luY2x1ZGUvbmV0L3N3aXRjaGRldi5oCkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZmlsdGVyX2RldiwKIAkJCQkJICBpbnQgaWR4KQogewotCXJldHVybiAtRU9QTk9UU1VQUDsKKyAgICAgICByZXR1cm4gaWR4OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoZGV2X3BvcnRfZndkX21hcmtfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC92eGxhbi5oIGIvaW5jbHVkZS9uZXQvdnhsYW4uaAppbmRleCBjMWM4OTljLi5lMjg5YWRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC92eGxhbi5oCisrKyBiL2luY2x1ZGUvbmV0L3Z4bGFuLmgKQEAgLTc5LDcgKzc5LDcgQEAKIH07CiAKIC8qIFZYTEFOIGhlYWRlciBmbGFncy4gKi8KLSNkZWZpbmUgVlhMQU5fSEZfUkNPIEJJVCgyNCkKKyNkZWZpbmUgVlhMQU5fSEZfUkNPIEJJVCgyMSkKICNkZWZpbmUgVlhMQU5fSEZfVk5JIEJJVCgyNykKICNkZWZpbmUgVlhMQU5fSEZfR0JQIEJJVCgzMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDRhOWMyMWYuLmQ2ZjZlNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTU0OCw2ICs1NDgsNyBAQAogCXUxNgkJCWZhbWlseTsKIAlzdHJ1Y3QgeGZybV9zZWNfY3R4CSpzZWN1cml0eTsKIAlzdHJ1Y3QgeGZybV90bXBsICAgICAgIAl4ZnJtX3ZlY1tYRlJNX01BWF9ERVBUSF07CisJc3RydWN0IHJjdV9oZWFkCQlyY3U7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKnhwX25ldChjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQpAQCAtMTE0MSwxMiArMTE0MiwxNCBAQAogCXJldHVybiB4ZnJtX3JvdXRlX2ZvcndhcmQoc2tiLCBBRl9JTkVUNik7CiB9CiAKLWludCBfX3hmcm1fc2tfY2xvbmVfcG9saWN5KHN0cnVjdCBzb2NrICpzayk7CitpbnQgX194ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spOwogCi1zdGF0aWMgaW5saW5lIGludCB4ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIGludCB4ZnJtX3NrX2Nsb25lX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvc2spCiB7Ci0JaWYgKHVubGlrZWx5KHNrLT5za19wb2xpY3lbMF0gfHwgc2stPnNrX3BvbGljeVsxXSkpCi0JCXJldHVybiBfX3hmcm1fc2tfY2xvbmVfcG9saWN5KHNrKTsKKwlzay0+c2tfcG9saWN5WzBdID0gTlVMTDsKKwlzay0+c2tfcG9saWN5WzFdID0gTlVMTDsKKwlpZiAodW5saWtlbHkob3NrLT5za19wb2xpY3lbMF0gfHwgb3NrLT5za19wb2xpY3lbMV0pKQorCQlyZXR1cm4gX194ZnJtX3NrX2Nsb25lX3BvbGljeShzaywgb3NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE1NCwxMiArMTE1NywxNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9za19mcmVlX3BvbGljeShzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JaWYgKHVubGlrZWx5KHNrLT5za19wb2xpY3lbMF0gIT0gTlVMTCkpIHsKLQkJeGZybV9wb2xpY3lfZGVsZXRlKHNrLT5za19wb2xpY3lbMF0sIFhGUk1fUE9MSUNZX01BWCk7CisJc3RydWN0IHhmcm1fcG9saWN5ICpwb2w7CisKKwlwb2wgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrLT5za19wb2xpY3lbMF0sIDEpOworCWlmICh1bmxpa2VseShwb2wgIT0gTlVMTCkpIHsKKwkJeGZybV9wb2xpY3lfZGVsZXRlKHBvbCwgWEZSTV9QT0xJQ1lfTUFYKTsKIAkJc2stPnNrX3BvbGljeVswXSA9IE5VTEw7CiAJfQotCWlmICh1bmxpa2VseShzay0+c2tfcG9saWN5WzFdICE9IE5VTEwpKSB7Ci0JCXhmcm1fcG9saWN5X2RlbGV0ZShzay0+c2tfcG9saWN5WzFdLCBYRlJNX1BPTElDWV9NQVgrMSk7CisJcG9sID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay0+c2tfcG9saWN5WzFdLCAxKTsKKwlpZiAodW5saWtlbHkocG9sICE9IE5VTEwpKSB7CisJCXhmcm1fcG9saWN5X2RlbGV0ZShwb2wsIFhGUk1fUE9MSUNZX01BWCsxKTsKIAkJc2stPnNrX3BvbGljeVsxXSA9IE5VTEw7CiAJfQogfQpAQCAtMTE2OSw3ICsxMTc2LDcgQEAKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX3NrX2ZyZWVfcG9saWN5KHN0cnVjdCBzb2NrICpzaykge30KLXN0YXRpYyBpbmxpbmUgaW50IHhmcm1fc2tfY2xvbmVfcG9saWN5KHN0cnVjdCBzb2NrICpzaykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgeGZybV9za19jbG9uZV9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqb3NrKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCB4ZnJtNl9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpIHsgcmV0dXJuIDE7IH0gIAogc3RhdGljIGlubGluZSBpbnQgeGZybTRfcm91dGVfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7IHJldHVybiAxOyB9IAogc3RhdGljIGlubGluZSBpbnQgeGZybTZfcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9tYWQuaCBiL2luY2x1ZGUvcmRtYS9pYl9tYWQuaAppbmRleCAxODhkZjkxLi5lYzliNDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX21hZC5oCkBAIC0yMzcsNiArMjM3LDggQEAKIAl1OAkJCWRhdGFbSUJfTUdNVF9WRU5ET1JfREFUQV07CiB9OwogCisjZGVmaW5lIElCX01HTVRfQ0xBU1NQT1JUSU5GT19BVFRSX0lECWNwdV90b19iZTE2KDB4MDAwMSkKKwogc3RydWN0IGliX2NsYXNzX3BvcnRfaW5mbyB7CiAJdTgJCQliYXNlX3ZlcnNpb247CiAJdTgJCQljbGFzc192ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCA5YTY4YTE5Li4xMjBkYTFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtMTI3MSw2ICsxMjcxLDcgQEAKIAlpbnQJCQlpZDsJCS8qIGluZGV4IGludG8ga2VybmVsIGlkciAqLwogCXN0cnVjdCBrcmVmCQlyZWY7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZQltdXRleDsJCS8qIHByb3RlY3RzIC5saXZlICovCisJc3RydWN0IHJjdV9oZWFkCQlyY3U7CQkvKiBrZnJlZV9yY3UoKSBvdmVyaGVhZCAqLwogCWludAkJCWxpdmU7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggZWQ1MjcxMi4uZmNmYTNkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtNjY4LDYgKzY2OCw5IEBACiAJdW5zaWduZWQgdXNlX2Jsa19tcToxOwogCXVuc2lnbmVkIHVzZV9jbWRfbGlzdDoxOwogCisJLyogSG9zdCByZXNwb25kZWQgd2l0aCBzaG9ydCAoPDM2IGJ5dGVzKSBJTlFVSVJZIHJlc3VsdCAqLworCXVuc2lnbmVkIHNob3J0X2lucXVpcnk6MTsKKwogCS8qCiAJICogT3B0aW9uYWwgd29yayBxdWV1ZSB0byBiZSB1dGlsaXplZCBieSB0aGUgdHJhbnNwb3J0CiAJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaCBiL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCmluZGV4IDc0YmM4NTQ3Li4xNWFhNWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaAorKysgYi9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaApAQCAtNDE3LDExICs0MTcsMTMgQEAKICNkZWZpbmUgQUM5N19SQVRFU19NSUNfQURDCTQKICNkZWZpbmUgQUM5N19SQVRFU19TUERJRgk1CiAKKyNkZWZpbmUgQUM5N19OVU1fR1BJT1MJCTE2CiAvKgogICoKICAqLwogCiBzdHJ1Y3Qgc25kX2FjOTc7CitzdHJ1Y3Qgc25kX2FjOTdfZ3Bpb19wcml2Owogc3RydWN0IHNuZF9wY21fY2htYXA7CiAKIHN0cnVjdCBzbmRfYWM5N19idWlsZF9vcHMgewpAQCAtNTI5LDYgKzUzMSw3IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBwb3dlcl93b3JrOwogI2VuZGlmCiAJc3RydWN0IGRldmljZSBkZXY7CisJc3RydWN0IHNuZF9hYzk3X2dwaW9fcHJpdiAqZ3Bpb19wcml2OwogCiAJc3RydWN0IHNuZF9wY21fY2htYXAgKmNobWFwc1syXTsgLyogY2hhbm5lbC1tYXBzIChvcHRpb25hbCkgKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2RhNzIxOC5oIGIvaW5jbHVkZS9zb3VuZC9kYTcyMTguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGJiODE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9kYTcyMTguaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIGRhNzIxOC5oIC0gREE3MjE4IEFTb0MgQ29kZWMgRHJpdmVyIFBsYXRmb3JtIERhdGEKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqCisgKiBBdXRob3I6IEFkYW0gVGhvbXNvbiA8QWRhbS5UaG9tc29uLk9wZW5zb3VyY2VAZGlhc2VtaS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9EQTcyMThfUERBVEFfSAorI2RlZmluZSBfREE3MjE4X1BEQVRBX0gKKworLyogTWljIEJpYXMgKi8KK2VudW0gZGE3MjE4X21pY2JpYXNfdm9sdGFnZSB7CisJREE3MjE4X01JQ0JJQVNfMV8yViA9IC0xLAorCURBNzIxOF9NSUNCSUFTXzFfNlYsCisJREE3MjE4X01JQ0JJQVNfMV84ViwKKwlEQTcyMThfTUlDQklBU18yXzBWLAorCURBNzIxOF9NSUNCSUFTXzJfMlYsCisJREE3MjE4X01JQ0JJQVNfMl80ViwKKwlEQTcyMThfTUlDQklBU18yXzZWLAorCURBNzIxOF9NSUNCSUFTXzJfOFYsCisJREE3MjE4X01JQ0JJQVNfM18wViwKK307CisKK2VudW0gZGE3MjE4X21pY19hbXBfaW5fc2VsIHsKKwlEQTcyMThfTUlDX0FNUF9JTl9TRUxfRElGRiA9IDAsCisJREE3MjE4X01JQ19BTVBfSU5fU0VMX1NFX1AsCisJREE3MjE4X01JQ19BTVBfSU5fU0VMX1NFX04sCit9OworCisvKiBETUlDICovCitlbnVtIGRhNzIxOF9kbWljX2RhdGFfc2VsIHsKKwlEQTcyMThfRE1JQ19EQVRBX0xSSVNFX1JGQUxMID0gMCwKKwlEQTcyMThfRE1JQ19EQVRBX0xGQUxMX1JSSVNFLAorfTsKKworZW51bSBkYTcyMThfZG1pY19zYW1wbGVwaGFzZSB7CisJREE3MjE4X0RNSUNfU0FNUExFX09OX0NMS0VER0UgPSAwLAorCURBNzIxOF9ETUlDX1NBTVBMRV9CRVRXRUVOX0NMS0VER0UsCit9OworCitlbnVtIGRhNzIxOF9kbWljX2Nsa19yYXRlIHsKKwlEQTcyMThfRE1JQ19DTEtfM18wTUhaID0gMCwKKwlEQTcyMThfRE1JQ19DTEtfMV81TUhaLAorfTsKKworLyogSGVhZHBob25lIERldGVjdCAqLworZW51bSBkYTcyMThfaHBsZGV0X2phY2tfcmF0ZSB7CisJREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfNVVTID0gMCwKKwlEQTcyMThfSFBMREVUX0pBQ0tfUkFURV8xMFVTLAorCURBNzIxOF9IUExERVRfSkFDS19SQVRFXzIwVVMsCisJREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfNDBVUywKKwlEQTcyMThfSFBMREVUX0pBQ0tfUkFURV84MFVTLAorCURBNzIxOF9IUExERVRfSkFDS19SQVRFXzE2MFVTLAorCURBNzIxOF9IUExERVRfSkFDS19SQVRFXzMyMFVTLAorCURBNzIxOF9IUExERVRfSkFDS19SQVRFXzY0MFVTLAorfTsKKworZW51bSBkYTcyMThfaHBsZGV0X2phY2tfZGVib3VuY2UgeworCURBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV9PRkYgPSAwLAorCURBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV8yLAorCURBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV8zLAorCURBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV80LAorfTsKKworZW51bSBkYTcyMThfaHBsZGV0X2phY2tfdGhyIHsKKwlEQTcyMThfSFBMREVUX0pBQ0tfVEhSXzg0UENUID0gMCwKKwlEQTcyMThfSFBMREVUX0pBQ0tfVEhSXzg4UENULAorCURBNzIxOF9IUExERVRfSkFDS19USFJfOTJQQ1QsCisJREE3MjE4X0hQTERFVF9KQUNLX1RIUl85NlBDVCwKK307CisKK3N0cnVjdCBkYTcyMThfaHBsZGV0X3BkYXRhIHsKKwllbnVtIGRhNzIxOF9ocGxkZXRfamFja19yYXRlIGphY2tfcmF0ZTsKKwllbnVtIGRhNzIxOF9ocGxkZXRfamFja19kZWJvdW5jZSBqYWNrX2RlYm91bmNlOworCWVudW0gZGE3MjE4X2hwbGRldF9qYWNrX3RociBqYWNrX3RocjsKKwlib29sIGNvbXBfaW52OworCWJvb2wgaHlzdDsKKwlib29sIGRpc2NoYXJnZTsKK307CisKK3N0cnVjdCBkYTcyMThfcGRhdGEgeworCS8qIE1pYyAqLworCWVudW0gZGE3MjE4X21pY2JpYXNfdm9sdGFnZSBtaWNiaWFzMV9sdmw7CisJZW51bSBkYTcyMThfbWljYmlhc192b2x0YWdlIG1pY2JpYXMyX2x2bDsKKwllbnVtIGRhNzIxOF9taWNfYW1wX2luX3NlbCBtaWMxX2FtcF9pbl9zZWw7CisJZW51bSBkYTcyMThfbWljX2FtcF9pbl9zZWwgbWljMl9hbXBfaW5fc2VsOworCisJLyogRE1JQyAqLworCWVudW0gZGE3MjE4X2RtaWNfZGF0YV9zZWwgZG1pYzFfZGF0YV9zZWw7CisJZW51bSBkYTcyMThfZG1pY19kYXRhX3NlbCBkbWljMl9kYXRhX3NlbDsKKwllbnVtIGRhNzIxOF9kbWljX3NhbXBsZXBoYXNlIGRtaWMxX3NhbXBsZXBoYXNlOworCWVudW0gZGE3MjE4X2RtaWNfc2FtcGxlcGhhc2UgZG1pYzJfc2FtcGxlcGhhc2U7CisJZW51bSBkYTcyMThfZG1pY19jbGtfcmF0ZSBkbWljMV9jbGtfcmF0ZTsKKwllbnVtIGRhNzIxOF9kbWljX2Nsa19yYXRlIGRtaWMyX2Nsa19yYXRlOworCisJLyogSFAgRGlmZiBTdXBwbHkgLSBEQTcyMTcgb25seSAqLworCWJvb2wgaHBfZGlmZl9zaW5nbGVfc3VwcGx5OworCisJLyogSFAgRGV0ZWN0IC0gREE3MjE4IG9ubHkgKi8KKwlzdHJ1Y3QgZGE3MjE4X2hwbGRldF9wZGF0YSAqaHBsZGV0X3BkYXRhOworfTsKKworI2VuZGlmIC8qIF9EQTcyMThfUERBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9kYTcyMTkuaCBiL2luY2x1ZGUvc291bmQvZGE3MjE5LmgKaW5kZXggM2YzOWUxMy4uMDI4NzZhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9kYTcyMTkuaAorKysgYi9pbmNsdWRlL3NvdW5kL2RhNzIxOS5oCkBAIC0xNCwxNyArMTQsMTAgQEAKICNpZm5kZWYgX19EQTcyMTlfUERBVEFfSAogI2RlZmluZSBfX0RBNzIxOV9QREFUQV9ICiAKLS8qIExETyAqLwotZW51bSBkYTcyMTlfbGRvX2x2bF9zZWwgewotCURBNzIxOV9MRE9fTFZMX1NFTF8xXzA1ViA9IDAsCi0JREE3MjE5X0xET19MVkxfU0VMXzFfMTBWLAotCURBNzIxOV9MRE9fTFZMX1NFTF8xXzIwViwKLQlEQTcyMTlfTERPX0xWTF9TRUxfMV80MFYsCi19OwotCiAvKiBNaWMgQmlhcyAqLwogZW51bSBkYTcyMTlfbWljYmlhc192b2x0YWdlIHsKLQlEQTcyMTlfTUlDQklBU18xXzhWID0gMSwKKwlEQTcyMTlfTUlDQklBU18xXzZWID0gMCwKKwlEQTcyMTlfTUlDQklBU18xXzhWLAogCURBNzIxOV9NSUNCSUFTXzJfMFYsCiAJREE3MjE5X01JQ0JJQVNfMl8yViwKIAlEQTcyMTlfTUlDQklBU18yXzRWLApAQCAtNDEsOSArMzQsNiBAQAogc3RydWN0IGRhNzIxOV9hYWRfcGRhdGE7CiAKIHN0cnVjdCBkYTcyMTlfcGRhdGEgewotCS8qIEludGVybmFsIExETyAqLwotCWVudW0gZGE3MjE5X2xkb19sdmxfc2VsIGxkb19sdmxfc2VsOwotCiAJLyogTWljICovCiAJZW51bSBkYTcyMTlfbWljYmlhc192b2x0YWdlIG1pY2JpYXNfbHZsOwogCWVudW0gZGE3MjE5X21pY19hbXBfaW5fc2VsIG1pY19hbXBfaW5fc2VsOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9kZXNpZ253YXJlX2kycy5oIGIvaW5jbHVkZS9zb3VuZC9kZXNpZ253YXJlX2kycy5oCmluZGV4IDg5NjZiYTcuLjU2ODE4NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvZGVzaWdud2FyZV9pMnMuaAorKysgYi9pbmNsdWRlL3NvdW5kL2Rlc2lnbndhcmVfaTJzLmgKQEAgLTQ1LDYgKzQ1LDEyIEBACiAJdTMyIHNuZF9mbXRzOwogCXUzMiBzbmRfcmF0ZXM7CiAKKwkjZGVmaW5lIERXX0kyU19RVUlSS19DT01QX1JFR19PRkZTRVQJKDEgPDwgMCkKKwkjZGVmaW5lIERXX0kyU19RVUlSS19DT01QX1BBUkFNMQkoMSA8PCAxKQorCXVuc2lnbmVkIGludCBxdWlya3M7CisJdW5zaWduZWQgaW50IGkyc19yZWdfY29tcDE7CisJdW5zaWduZWQgaW50IGkyc19yZWdfY29tcDI7CisKIAl2b2lkICpwbGF5X2RtYV9kYXRhOwogCXZvaWQgKmNhcHR1cmVfZG1hX2RhdGE7CiAJYm9vbCAoKmZpbHRlcikoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2hkYV9yZWdpc3Rlci5oIGIvaW5jbHVkZS9zb3VuZC9oZGFfcmVnaXN0ZXIuaAppbmRleCAyYWU4ODEyLi5mZjFhZWNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2hkYV9yZWdpc3Rlci5oCisrKyBiL2luY2x1ZGUvc291bmQvaGRhX3JlZ2lzdGVyLmgKQEAgLTkzLDYgKzkzLDkgQEAKICNkZWZpbmUgQVpYX1JFR19IU1dfRU00CQkJMHgxMDBjCiAjZGVmaW5lIEFaWF9SRUdfSFNXX0VNNQkJCTB4MTAxMAogCisvKiBTa3lsYWtlL0Jyb3h0b24gZGlzcGxheSBIRC1BIGNvbnRyb2xsZXIgRXh0ZW5kZWQgTW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVpYX1JFR19TS0xfRU00TAkJMHgxMDQwCisKIC8qIFBDSSBzcGFjZSAqLwogI2RlZmluZSBBWlhfUENJUkVHX1RDU0VMCQkweDQ0CiAKQEAgLTIzMCw2ICsyMzMsMTUgQEAKICNkZWZpbmUgQVpYX01MQ1RMX1NQQQkJCSgxPDwxNikKICNkZWZpbmUgQVpYX01MQ1RMX0NQQQkJCTIzCiAKKworLyogcmVnaXN0ZXJzIGZvciBETUEgUmVzdW1lIENhcGFiaWxpdHkgU3RydWN0dXJlICovCisjZGVmaW5lIEFaWF9EUlNNX0NBUF9JRAkJCTB4NQorI2RlZmluZSBBWlhfUkVHX0RSU01fQ1RMCQkweDQKKy8qIEJhc2UgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGl0ZXJhdGluZyByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgQVpYX0RSU01fQkFTRQkJCTB4MDgKKy8qIEludGVydmFsIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpdGVyYXRpbmcgcmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5lIEFaWF9EUlNNX0lOVEVSVkFMCQkweDA4CisKIC8qCiAgKiBoZWxwZXJzIHRvIHJlYWQgdGhlIHN0cmVhbSBwb3NpdGlvbgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2hkYXVkaW9fZXh0LmggYi9pbmNsdWRlL3NvdW5kL2hkYXVkaW9fZXh0LmgKaW5kZXggYTRjYWRkOS4uMDdmYTU5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9oZGF1ZGlvX2V4dC5oCisrKyBiL2luY2x1ZGUvc291bmQvaGRhdWRpb19leHQuaApAQCAtMTIsNiArMTIsNyBAQAogICogQHNwYmNhcDogU1BJQiBjYXBhYmlsaXRpZXMgcG9pbnRlcgogICogQG1sY2FwOiBNdWx0aUxpbmsgY2FwYWJpbGl0aWVzIHBvaW50ZXIKICAqIEBndHNjYXA6IGd0cyBjYXBhYmlsaXRpZXMgcG9pbnRlcgorICogQGRyc21jYXA6IGRtYSByZXN1bWUgY2FwYWJpbGl0aWVzIHBvaW50ZXIKICAqIEBobGlua19saXN0OiBsaW5rIGxpc3Qgb2YgSERBIGxpbmtzCiAgKi8KIHN0cnVjdCBoZGFjX2V4dF9idXMgewpAQCAtMjMsNiArMjQsNyBAQAogCXZvaWQgX19pb21lbSAqc3BiY2FwOwogCXZvaWQgX19pb21lbSAqbWxjYXA7CiAJdm9pZCBfX2lvbWVtICpndHNjYXA7CisJdm9pZCBfX2lvbWVtICpkcnNtY2FwOwogCiAJc3RydWN0IGxpc3RfaGVhZCBobGlua19saXN0OwogfTsKQEAgLTcyLDYgKzc0LDkgQEAKICAqIEBwcGxjX2FkZHI6IHByb2Nlc3NpbmcgcGlwZSBsaW5rIHN0cmVhbSBwb2ludGVyCiAgKiBAc3BpYl9hZGRyOiBzb2Z0d2FyZSBwb3NpdGlvbiBpbiBidWZmZXJzIHN0cmVhbSBwb2ludGVyCiAgKiBAZmlmb19hZGRyOiBzb2Z0d2FyZSBwb3NpdGlvbiBNYXggZmlmb3Mgc3RyZWFtIHBvaW50ZXIKKyAqIEBkcGlicl9hZGRyOiBETUEgcG9zaXRpb24gaW4gYnVmZmVyIHJlc3VtZSBwb2ludGVyCisgKiBAZHBpYjogRE1BIHBvc2l0aW9uIGluIGJ1ZmZlcgorICogQGxwaWI6IExpbmVhciBwb3NpdGlvbiBpbiBidWZmZXIKICAqIEBkZWNvdXBsZWQ6IHN0cmVhbSBob3N0IGFuZCBsaW5rIGlzIGRlY291cGxlZAogICogQGxpbmtfbG9ja2VkOiBsaW5rIGlzIGxvY2tlZAogICogQGxpbmtfcHJlcGFyZWQ6IGxpbmsgaXMgcHJlcGFyZWQKQEAgLTg2LDYgKzkxLDEwIEBACiAJdm9pZCBfX2lvbWVtICpzcGliX2FkZHI7CiAJdm9pZCBfX2lvbWVtICpmaWZvX2FkZHI7CiAKKwl2b2lkIF9faW9tZW0gKmRwaWJyX2FkZHI7CisKKwl1MzIgZHBpYjsKKwl1MzIgbHBpYjsKIAlib29sIGRlY291cGxlZDoxOwogCWJvb2wgbGlua19sb2NrZWQ6MTsKIAlib29sIGxpbmtfcHJlcGFyZWQ7CkBAIC0xMTYsNiArMTI1LDExIEBACiAJCQkJIHN0cnVjdCBoZGFjX2V4dF9zdHJlYW0gKnN0cmVhbSwgdTMyIHZhbHVlKTsKIGludCBzbmRfaGRhY19leHRfc3RyZWFtX2dldF9zcGJtYXhmaWZvKHN0cnVjdCBoZGFjX2V4dF9idXMgKmVidXMsCiAJCQkJIHN0cnVjdCBoZGFjX2V4dF9zdHJlYW0gKnN0cmVhbSk7Cit2b2lkIHNuZF9oZGFjX2V4dF9zdHJlYW1fZHJzbV9lbmFibGUoc3RydWN0IGhkYWNfZXh0X2J1cyAqZWJ1cywKKwkJCQlib29sIGVuYWJsZSwgaW50IGluZGV4KTsKK2ludCBzbmRfaGRhY19leHRfc3RyZWFtX3NldF9kcGlicihzdHJ1Y3QgaGRhY19leHRfYnVzICplYnVzLAorCQkJCXN0cnVjdCBoZGFjX2V4dF9zdHJlYW0gKnN0cmVhbSwgdTMyIHZhbHVlKTsKK2ludCBzbmRfaGRhY19leHRfc3RyZWFtX3NldF9scGliKHN0cnVjdCBoZGFjX2V4dF9zdHJlYW0gKnN0cmVhbSwgdTMyIHZhbHVlKTsKIAogdm9pZCBzbmRfaGRhY19leHRfbGlua19zdHJlYW1fc3RhcnQoc3RydWN0IGhkYWNfZXh0X3N0cmVhbSAqaHN0cmVhbSk7CiB2b2lkIHNuZF9oZGFjX2V4dF9saW5rX3N0cmVhbV9jbGVhcihzdHJ1Y3QgaGRhY19leHRfc3RyZWFtICpoc3RyZWFtKTsKQEAgLTEzMyw2ICsxNDcsNyBAQAogCiBpbnQgc25kX2hkYWNfZXh0X2J1c19saW5rX3Bvd2VyX3VwKHN0cnVjdCBoZGFjX2V4dF9saW5rICpsaW5rKTsKIGludCBzbmRfaGRhY19leHRfYnVzX2xpbmtfcG93ZXJfZG93bihzdHJ1Y3QgaGRhY19leHRfbGluayAqbGluayk7CitpbnQgc25kX2hkYWNfZXh0X2J1c19saW5rX3Bvd2VyX3VwX2FsbChzdHJ1Y3QgaGRhY19leHRfYnVzICplYnVzKTsKIGludCBzbmRfaGRhY19leHRfYnVzX2xpbmtfcG93ZXJfZG93bl9hbGwoc3RydWN0IGhkYWNfZXh0X2J1cyAqZWJ1cyk7CiB2b2lkIHNuZF9oZGFjX2V4dF9saW5rX3NldF9zdHJlYW1faWQoc3RydWN0IGhkYWNfZXh0X2xpbmsgKmxpbmssCiAJCQkJIGludCBzdHJlYW0pOwpAQCAtMTg2LDkgKzIwMSwxNSBAQAogCS8qIGNvZGVjIG9wcyAqLwogCXN0cnVjdCBoZGFjX2V4dF9jb2RlY19vcHMgb3BzOwogCisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXZvaWQgKnNjb2RlYzsKIAl2b2lkICpwcml2YXRlX2RhdGE7CiB9OwogCitzdHJ1Y3QgaGRhY19leHRfZG1hX3BhcmFtcyB7CisJdTMyIGZvcm1hdDsKKwl1OCBzdHJlYW1fdGFnOworfTsKICNkZWZpbmUgdG9fZWhkYWNfZGV2aWNlKGRldikgKGNvbnRhaW5lcl9vZigoZGV2KSwgXAogCQkJCSBzdHJ1Y3QgaGRhY19leHRfZGV2aWNlLCBoZGFjKSkKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3J0NTY1OS5oIGIvaW5jbHVkZS9zb3VuZC9ydDU2NTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZjNGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC9ydDU2NTkuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogbGludXgvc291bmQvcnQ1NjU5LmggLS0gUGxhdGZvcm0gZGF0YSBmb3IgUlQ1NjU5CisgKgorICogQ29weXJpZ2h0IDIwMTMgUmVhbHRlayBNaWNyb2VsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfU05EX1JUNTY1OV9ICisjZGVmaW5lIF9fTElOVVhfU05EX1JUNTY1OV9ICisKK2VudW0gcnQ1NjU5X2RtaWMxX2RhdGFfcGluIHsKKwlSVDU2NTlfRE1JQzFfTlVMTCwKKwlSVDU2NTlfRE1JQzFfREFUQV9JTjJOLAorCVJUNTY1OV9ETUlDMV9EQVRBX0dQSU81LAorCVJUNTY1OV9ETUlDMV9EQVRBX0dQSU85LAorCVJUNTY1OV9ETUlDMV9EQVRBX0dQSU8xMSwKK307CisKK2VudW0gcnQ1NjU5X2RtaWMyX2RhdGFfcGluIHsKKwlSVDU2NTlfRE1JQzJfTlVMTCwKKwlSVDU2NTlfRE1JQzJfREFUQV9JTjJQLAorCVJUNTY1OV9ETUlDMl9EQVRBX0dQSU82LAorCVJUNTY1OV9ETUlDMl9EQVRBX0dQSU8xMCwKKwlSVDU2NTlfRE1JQzJfREFUQV9HUElPMTIsCit9OworCitlbnVtIHJ0NTY1OV9qZF9zcmMgeworCVJUNTY1OV9KRF9OVUxMLAorCVJUNTY1OV9KRDMsCit9OworCitzdHJ1Y3QgcnQ1NjU5X3BsYXRmb3JtX2RhdGEgeworCWJvb2wgaW4xX2RpZmY7CisJYm9vbCBpbjNfZGlmZjsKKwlib29sIGluNF9kaWZmOworCisJaW50IGxkbzFfZW47IC8qIEdQSU8gZm9yIExETzFfRU4gKi8KKwlpbnQgcmVzZXQ7IC8qIEdQSU8gZm9yIFJFU0VUICovCisKKwllbnVtIHJ0NTY1OV9kbWljMV9kYXRhX3BpbiBkbWljMV9kYXRhX3BpbjsKKwllbnVtIHJ0NTY1OV9kbWljMl9kYXRhX3BpbiBkbWljMl9kYXRhX3BpbjsKKwllbnVtIHJ0NTY1OV9qZF9zcmMgamRfc3JjOworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKaW5kZXggMjEyZWFhZi4uOTY0YjdkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKQEAgLTIyMiw2ICsyMjIsNyBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgaW50IGlkOwogCXVuc2lnbmVkIGludCBiYXNlOworCXN0cnVjdCBzbmRfc29jX2RvYmogZG9iajsKIAogCS8qIERBSSBkcml2ZXIgY2FsbGJhY2tzICovCiAJaW50ICgqcHJvYmUpKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaCBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAppbmRleCA3ODU1Y2ZlLi45NzA2OTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCkBAIC00OSw2ICs0OSw5IEBACiAjZGVmaW5lIFNORF9TT0NfREFQTV9TSUdHRU4od25hbWUpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX3NpZ2dlbiwgLm5hbWUgPSB3bmFtZSwgLmtjb250cm9sX25ld3MgPSBOVUxMLCBcCiAJLm51bV9rY29udHJvbHMgPSAwLCAucmVnID0gU05EX1NPQ19OT1BNIH0KKyNkZWZpbmUgU05EX1NPQ19EQVBNX1NJTksod25hbWUpIFwKK3sJLmlkID0gc25kX3NvY19kYXBtX3NpbmssIC5uYW1lID0gd25hbWUsIC5rY29udHJvbF9uZXdzID0gTlVMTCwgXAorCS5udW1fa2NvbnRyb2xzID0gMCwgLnJlZyA9IFNORF9TT0NfTk9QTSB9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9JTlBVVCh3bmFtZSkgXAogewkuaWQgPSBzbmRfc29jX2RhcG1faW5wdXQsIC5uYW1lID0gd25hbWUsIC5rY29udHJvbF9uZXdzID0gTlVMTCwgXAogCS5udW1fa2NvbnRyb2xzID0gMCwgLnJlZyA9IFNORF9TT0NfTk9QTSB9CkBAIC0zOTgsNiArNDAxLDcgQEAKIGludCBzbmRfc29jX2RhcG1fd2Vha19yb3V0ZXMoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCQkJICAgICBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlICpyb3V0ZSwgaW50IG51bSk7CiB2b2lkIHNuZF9zb2NfZGFwbV9mcmVlX3dpZGdldChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdyk7Cit2b2lkIHNuZF9zb2NfZGFwbV9yZXNldF9jYWNoZShzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pOwogCiAvKiBkYXBtIGV2ZW50cyAqLwogdm9pZCBzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsIGludCBzdHJlYW0sCkBAIC00ODQsNiArNDg4LDcgQEAKIAlzbmRfc29jX2RhcG1fYWlmX2luLAkJLyogYXVkaW8gaW50ZXJmYWNlIGlucHV0ICovCiAJc25kX3NvY19kYXBtX2FpZl9vdXQsCQkvKiBhdWRpbyBpbnRlcmZhY2Ugb3V0cHV0ICovCiAJc25kX3NvY19kYXBtX3NpZ2dlbiwJCS8qIHNpZ25hbCBnZW5lcmF0b3IgKi8KKwlzbmRfc29jX2RhcG1fc2luaywKIAlzbmRfc29jX2RhcG1fZGFpX2luLAkJLyogbGluayB0byBEQUkgc3RydWN0dXJlICovCiAJc25kX3NvY19kYXBtX2RhaV9vdXQsCiAJc25kX3NvY19kYXBtX2RhaV9saW5rLAkJLyogbGluayBiZXR3ZWVuIHR3byBEQUkgc3RydWN0dXJlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtdG9wb2xvZ3kuaCBiL2luY2x1ZGUvc291bmQvc29jLXRvcG9sb2d5LmgKaW5kZXggMDg2Y2Q3Zi4uNWI2OGUzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy10b3BvbG9neS5oCkBAIC05Miw4ICs5MiwxMCBAQAogLyogQnl0ZXMgZXh0IG9wZXJhdGlvbnMsIGZvciBUTFYgYnl0ZSBjb250cm9scyAqLwogc3RydWN0IHNuZF9zb2NfdHBsZ19ieXRlc19leHRfb3BzIHsKIAl1MzIgaWQ7Ci0JaW50ICgqZ2V0KSh1bnNpZ25lZCBpbnQgX191c2VyICpieXRlcywgdW5zaWduZWQgaW50IHNpemUpOwotCWludCAoKnB1dCkoY29uc3QgdW5zaWduZWQgaW50IF9fdXNlciAqYnl0ZXMsIHVuc2lnbmVkIGludCBzaXplKTsKKwlpbnQgKCpnZXQpKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCB1bnNpZ25lZCBpbnQgX191c2VyICpieXRlcywKKwkJCQkJCQl1bnNpZ25lZCBpbnQgc2l6ZSk7CisJaW50ICgqcHV0KShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCWNvbnN0IHVuc2lnbmVkIGludCBfX3VzZXIgKmJ5dGVzLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MuaCBiL2luY2x1ZGUvc291bmQvc29jLmgKaW5kZXggYThiNGI5Yy4uN2FmYjcyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy5oCkBAIC0xMTAsNiArMTEwLDE0IEBACiAJLnB1dCA9IHNuZF9zb2NfcHV0X3ZvbHN3LCBcCiAJLnByaXZhdGVfdmFsdWUgPSBTT0NfRE9VQkxFX1ZBTFVFKHJlZywgc2hpZnRfbGVmdCwgc2hpZnRfcmlnaHQsIFwKIAkJCQkJICBtYXgsIGludmVydCwgMCkgfQorI2RlZmluZSBTT0NfRE9VQkxFX1NUUyh4bmFtZSwgcmVnLCBzaGlmdF9sZWZ0LCBzaGlmdF9yaWdodCwgbWF4LCBpbnZlcnQpIFwKK3sJCQkJCQkJCQlcCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0gKHhuYW1lKSwJCVwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgLmdldCA9IHNuZF9zb2NfZ2V0X3ZvbHN3LAkJXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCB8CQkJCVwKKwkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLAkJCQlcCisJLnByaXZhdGVfdmFsdWUgPSBTT0NfRE9VQkxFX1ZBTFVFKHJlZywgc2hpZnRfbGVmdCwgc2hpZnRfcmlnaHQsCVwKKwkJCQkJICBtYXgsIGludmVydCwgMCkgfQogI2RlZmluZSBTT0NfRE9VQkxFX1IoeG5hbWUsIHJlZ19sZWZ0LCByZWdfcmlnaHQsIHhzaGlmdCwgeG1heCwgeGludmVydCkgXAogewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLCBcCiAJLmluZm8gPSBzbmRfc29jX2luZm9fdm9sc3csIFwKQEAgLTI5Myw2ICszMDEsOSBAQAogCQl7LmJhc2UgPSB4YmFzZSwgLm51bV9yZWdzID0geHJlZ3MsCSAgICAgIFwKIAkJIC5tYXNrID0geG1hc2sgfSkgfQogCisvKgorICogU05EX1NPQ19CWVRFU19FWFQgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIFVTRSBTTkRfU09DX0JZVEVTX1RMViBpbnN0ZWFkCisgKi8KICNkZWZpbmUgU05EX1NPQ19CWVRFU19FWFQoeG5hbWUsIHhjb3VudCwgeGhhbmRsZXJfZ2V0LCB4aGFuZGxlcl9wdXQpIFwKIHsJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKIAkuaW5mbyA9IHNuZF9zb2NfYnl0ZXNfaW5mb19leHQsIFwKQEAgLTc4Nyw2ICs3OTgsNyBAQAogCXVuc2lnbmVkIGludCByZWdpc3RlcmVkX2FzX2NvbXBvbmVudDoxOwogCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9hdXg7IC8qIGZvciBhdXhpbGlhcnkgY29tcG9uZW50IG9mIHRoZSBjYXJkICovCiAKIAlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpkYWlfZHJ2OwogCWludCBudW1fZGFpOwpAQCAtODMwLDYgKzg0Miw5IEBACiAJaW50ICgqcHJvYmUpKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqKTsKIAl2b2lkICgqcmVtb3ZlKShzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKik7CiAKKwkvKiBtYWNoaW5lIHNwZWNpZmljIGluaXQgKi8KKwlpbnQgKCppbml0KShzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCk7CisKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAl2b2lkICgqaW5pdF9kZWJ1Z2ZzKShzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCk7CiAJY29uc3QgY2hhciAqZGVidWdmc19wcmVmaXg7CkBAIC0xMDM3LDYgKzEwNTIsOSBAQAogCiAJLyogcG1kb3duX3RpbWUgaXMgaWdub3JlZCBhdCBzdG9wICovCiAJdW5zaWduZWQgaW50IGlnbm9yZV9wbWRvd25fdGltZToxOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAvKiBEQUkgbGluayBsaXN0IG9mIHRoZSBzb2MgY2FyZCAqLworCXN0cnVjdCBzbmRfc29jX2RvYmogZG9iajsgLyogRm9yIHRvcG9sb2d5ICovCiB9OwogCiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19jb25mIHsKQEAgLTExMDEsMTIgKzExMTksMjAgQEAKIAkJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkJICAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpOwogCisJaW50ICgqYWRkX2RhaV9saW5rKShzdHJ1Y3Qgc25kX3NvY19jYXJkICosCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmxpbmspOworCXZvaWQgKCpyZW1vdmVfZGFpX2xpbmspKHN0cnVjdCBzbmRfc29jX2NhcmQgKiwKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqbGluayk7CisKIAlsb25nIHBtZG93bl90aW1lOwogCiAJLyogQ1BVIDwtLT4gQ29kZWMgREFJIGxpbmtzICAqLwotCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluazsKLQlpbnQgbnVtX2xpbmtzOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CisJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rOyAgLyogcHJlZGVmaW5lZCBsaW5rcyBvbmx5ICovCisJaW50IG51bV9saW5rczsgIC8qIHByZWRlZmluZWQgbGlua3Mgb25seSAqLworCXN0cnVjdCBsaXN0X2hlYWQgZGFpX2xpbmtfbGlzdDsgLyogYWxsIGxpbmtzICovCisJaW50IG51bV9kYWlfbGlua3M7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ0ZF9saXN0OwogCWludCBudW1fcnRkOwogCiAJLyogb3B0aW9uYWwgY29kZWMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLwpAQCAtMTExOSw4ICsxMTQ1LDcgQEAKIAkgKi8KIAlzdHJ1Y3Qgc25kX3NvY19hdXhfZGV2ICphdXhfZGV2OwogCWludCBudW1fYXV4X2RldnM7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZF9hdXg7Ci0JaW50IG51bV9hdXhfcnRkOworCXN0cnVjdCBsaXN0X2hlYWQgYXV4X2NvbXBfbGlzdDsKIAogCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjb250cm9sczsKIAlpbnQgbnVtX2NvbnRyb2xzOwpAQCAtMTIwMSw2ICsxMjI2LDkgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RwY21fcm9vdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RwY21fc3RhdGU7CiAjZW5kaWYKKworCXVuc2lnbmVkIGludCBudW07IC8qIDAtYmFzZWQgYW5kIG1vbm90b25pYyBpbmNyZWFzaW5nICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAvKiBydGQgbGlzdCBvZiB0aGUgc29jIGNhcmQgKi8KIH07CiAKIC8qIG1peGVyIGNvbnRyb2wgKi8KQEAgLTEyMjUsOCArMTI1MywxMCBAQAogCXN0cnVjdCBzbmRfc29jX2RvYmogZG9iajsKIAogCS8qIHVzZWQgZm9yIFRMViBieXRlIGNvbnRyb2wgKi8KLQlpbnQgKCpnZXQpKHVuc2lnbmVkIGludCBfX3VzZXIgKmJ5dGVzLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0JaW50ICgqcHV0KShjb25zdCB1bnNpZ25lZCBpbnQgX191c2VyICpieXRlcywgdW5zaWduZWQgaW50IHNpemUpOworCWludCAoKmdldCkoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHVuc2lnbmVkIGludCBfX3VzZXIgKmJ5dGVzLAorCQkJdW5zaWduZWQgaW50IHNpemUpOworCWludCAoKnB1dCkoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGNvbnN0IHVuc2lnbmVkIGludCBfX3VzZXIgKmJ5dGVzLAorCQkJdW5zaWduZWQgaW50IHNpemUpOwogfTsKIAogLyogbXVsdGkgcmVnaXN0ZXIgY29udHJvbCAqLwpAQCAtMTUyMyw2ICsxNTUzLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+d2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnBhdGhzKTsKIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+ZGFwbV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+YXV4X2NvbXBfbGlzdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzbmRfc29jX3ZvbHN3X2lzX3N0ZXJlbyhzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jKQpAQCAtMTY0NCw2ICsxNjc1LDE0IEBACiAJCQkJICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAogCQkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluayk7CiAKK2ludCBzbmRfc29jX2FkZF9kYWlfbGluayhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQkJCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluayk7Cit2b2lkIHNuZF9zb2NfcmVtb3ZlX2RhaV9saW5rKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluayk7CisKK2ludCBzbmRfc29jX3JlZ2lzdGVyX2RhaShzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCwKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpkYWlfZHJ2KTsKKwogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19GUwpAQCAtMTY1NSw3ICsxNjk0LDcgQEAKIC8qIEhlbHBlciBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfc29jX2RhcG1fbXV0ZXhfbG9jayhzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCiB7Ci0JbXV0ZXhfbG9jaygmZGFwbS0+Y2FyZC0+ZGFwbV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRhcG0tPmNhcmQtPmRhcG1fbXV0ZXgsIFNORF9TT0NfREFQTV9DTEFTU19SVU5USU1FKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNuZF9zb2NfZGFwbV9tdXRleF91bmxvY2soc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oCmluZGV4IDBhMmM3NDAuLmFhYmYwYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmgKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCXN0cnVjdCBjb21wbGV0aW9uCWNtZF93YWl0X2NvbXA7CiAJY29uc3Qgc3RydWN0IHRhcmdldF9jb3JlX2ZhYnJpY19vcHMgKnNlX3RmbzsKIAlzZW5zZV9yZWFzb25fdAkJKCpleGVjdXRlX2NtZCkoc3RydWN0IHNlX2NtZCAqKTsKLQlzZW5zZV9yZWFzb25fdCAoKnRyYW5zcG9ydF9jb21wbGV0ZV9jYWxsYmFjaykoc3RydWN0IHNlX2NtZCAqLCBib29sKTsKKwlzZW5zZV9yZWFzb25fdCAoKnRyYW5zcG9ydF9jb21wbGV0ZV9jYWxsYmFjaykoc3RydWN0IHNlX2NtZCAqLCBib29sLCBpbnQgKik7CiAJdm9pZAkJCSpwcm90b2NvbF9kYXRhOwogCiAJdW5zaWduZWQgY2hhcgkJKnRfdGFza19jZGI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkIGIvaW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZAppbmRleCA2MjhlNmU2Li5jMmU1ZDZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQKQEAgLTE4Niw2ICsxODYsNyBAQAogaGVhZGVyLXkgKz0gaWZfdmxhbi5oCiBoZWFkZXIteSArPSBpZl94MjUuaAogaGVhZGVyLXkgKz0gaWdtcC5oCitoZWFkZXIteSArPSBpbGEuaAogaGVhZGVyLXkgKz0gaW42LmgKIGhlYWRlci15ICs9IGluZXRfZGlhZy5oCiBoZWFkZXIteSArPSBpbi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmZzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmZzLmgKaW5kZXggNjU0YmFlMy4uNWU2Mjk2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25mcy5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZnMuaApAQCAtMzMsMTcgKzMzLDYgQEAKIAogI2RlZmluZSBORlNfUElQRV9ESVJOQU1FICJuZnMiCiAKLS8qIE5GUyBpb2N0bHMgKi8KLS8qIExldCdzIGZvbGxvdyBidHJmcyBsZWFkIG9uIENMT05FIHRvIGF2b2lkIG1lc3NpbmcgdXNlcnNwYWNlICovCi0jZGVmaW5lIE5GU19JT0NfQ0xPTkUJCV9JT1coMHg5NCwgOSwgaW50KQotI2RlZmluZSBORlNfSU9DX0NMT05FX1JBTkdFCV9JT1coMHg5NCwgMTMsIGludCkKLQotc3RydWN0IG5mc19pb2N0bF9jbG9uZV9yYW5nZV9hcmdzIHsKLQlfX3M2NCBzcmNfZmQ7Ci0JX191NjQgc3JjX29mZiwgY291bnQ7Ci0JX191NjQgZHN0X29mZjsKLX07Ci0KIC8qCiAgKiBORlMgc3RhdHMuIFRoZSBnb29kIHRoaW5nIHdpdGggdGhlc2UgdmFsdWVzIGlzIHRoYXQgTkZTdjMgZXJyb3JzIGFyZQogICogYSBzdXBlcnNldCBvZiBORlN2MiBlcnJvcnMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBORlNFUlJfV0ZMVVNIIHdoaWNoCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaCBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCmluZGV4IDI4Y2NlZGQuLmEyNzIyMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCkBAIC02MjgsNyArNjI4LDcgQEAKICAqIEBPVlNfQ1RfQVRUUl9NQVJLOiB1MzIgdmFsdWUgZm9sbG93ZWQgYnkgdTMyIG1hc2suIEZvciBlYWNoIGJpdCBzZXQgaW4gdGhlCiAgKiBtYXNrLCB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIHZhbHVlIGlzIGNvcGllZCB0byB0aGUgY29ubmVjdGlvbgogICogdHJhY2tpbmcgbWFyayBmaWVsZCBpbiB0aGUgY29ubmVjdGlvbi4KLSAqIEBPVlNfQ1RfQVRUUl9MQUJFTDogJU9WU19DVF9MQUJFTFNfTEVOIHZhbHVlIGZvbGxvd2VkIGJ5ICVPVlNfQ1RfTEFCRUxTX0xFTgorICogQE9WU19DVF9BVFRSX0xBQkVMUzogJU9WU19DVF9MQUJFTFNfTEVOIHZhbHVlIGZvbGxvd2VkIGJ5ICVPVlNfQ1RfTEFCRUxTX0xFTgogICogbWFzay4gRm9yIGVhY2ggYml0IHNldCBpbiB0aGUgbWFzaywgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSB2YWx1ZSBpcwogICogY29waWVkIHRvIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsIGZpZWxkIGluIHRoZSBjb25uZWN0aW9uLgogICogQE9WU19DVF9BVFRSX0hFTFBFUjogdmFyaWFibGUgbGVuZ3RoIHN0cmluZyBkZWZpbmluZyBjb25udHJhY2sgQUxHLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKaW5kZXggNzUxYjY5Zi4uOWZkN2I1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCkBAIC0zOSwxMyArMzksNiBAQAogI2RlZmluZSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVQkJNwogCiAvKgotICogVGhlIE5vLUlPTU1VIElPTU1VIG9mZmVycyBubyB0cmFuc2xhdGlvbiBvciBpc29sYXRpb24gZm9yIGRldmljZXMgYW5kCi0gKiBzdXBwb3J0cyBubyBpb2N0bHMgb3V0c2lkZSBvZiBWRklPX0NIRUNLX0VYVEVOU0lPTi4gIFVzZSBvZiBWRklPJ3MgTm8tSU9NTVUKLSAqIGNvZGUgd2lsbCB0YWludCB0aGUgaG9zdCBrZXJuZWwgYW5kIHNob3VsZCBiZSB1c2VkIHdpdGggZXh0cmVtZSBjYXV0aW9uLgotICovCi0jZGVmaW5lIFZGSU9fTk9JT01NVV9JT01NVQkJOAotCi0vKgogICogVGhlIElPQ1RMIGludGVyZmFjZSBpcyBkZXNpZ25lZCBmb3IgZXh0ZW5zaWJpbGl0eSBieSBlbWJlZGRpbmcgdGhlCiAgKiBzdHJ1Y3R1cmUgbGVuZ3RoIChhcmdzeikgYW5kIGZsYWdzIGludG8gc3RydWN0dXJlcyBwYXNzZWQgYmV0d2VlbgogICoga2VybmVsIGFuZCB1c2Vyc3BhY2UuICBXZSB0aGVyZWZvcmUgdXNlIHRoZSBfSU8oKSBtYWNybyBmb3IgdGhlc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9zb3VuZC9hc29jLmggYi9pbmNsdWRlL3VhcGkvc291bmQvYXNvYy5oCmluZGV4IDI2NTM5YTcuLmM0Y2MxZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9zb3VuZC9hc29jLmgKKysrIGIvaW5jbHVkZS91YXBpL3NvdW5kL2Fzb2MuaApAQCAtMjQzLDcgKzI0Myw3IEBACiAJX19sZTMyIGNvbnRyb2xfZWxlbXM7CS8qIG51bWJlciBvZiBjb250cm9sIGVsZW1lbnRzICovCiAJX19sZTMyIHdpZGdldF9lbGVtczsJLyogbnVtYmVyIG9mIHdpZGdldCBlbGVtZW50cyAqLwogCV9fbGUzMiBncmFwaF9lbGVtczsJLyogbnVtYmVyIG9mIGdyYXBoIGVsZW1lbnRzICovCi0JX19sZTMyIGRhaV9lbGVtczsJLyogbnVtYmVyIG9mIERBSSBlbGVtZW50cyAqLworCV9fbGUzMiBwY21fZWxlbXM7CS8qIG51bWJlciBvZiBQQ00gZWxlbWVudHMgKi8KIAlfX2xlMzIgZGFpX2xpbmtfZWxlbXM7CS8qIG51bWJlciBvZiBEQUkgbGluayBlbGVtZW50cyAqLwogCXN0cnVjdCBzbmRfc29jX3RwbGdfcHJpdmF0ZSBwcml2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9zb3VuZC9jb21wcmVzc19wYXJhbXMuaCBiL2luY2x1ZGUvdWFwaS9zb3VuZC9jb21wcmVzc19wYXJhbXMuaAppbmRleCBkOWJkOWNhLi45NjI1NDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvc291bmQvY29tcHJlc3NfcGFyYW1zLmgKKysrIGIvaW5jbHVkZS91YXBpL3NvdW5kL2NvbXByZXNzX3BhcmFtcy5oCkBAIC03Myw3ICs3Myw4IEBACiAjZGVmaW5lIFNORF9BVURJT0NPREVDX0lFQzYxOTM3ICAgICAgICAgICAgICAoKF9fdTMyKSAweDAwMDAwMDBCKQogI2RlZmluZSBTTkRfQVVESU9DT0RFQ19HNzIzXzEgICAgICAgICAgICAgICAgKChfX3UzMikgMHgwMDAwMDAwQykKICNkZWZpbmUgU05EX0FVRElPQ09ERUNfRzcyOSAgICAgICAgICAgICAgICAgICgoX191MzIpIDB4MDAwMDAwMEQpCi0jZGVmaW5lIFNORF9BVURJT0NPREVDX01BWCAgICAgICAgICAgICAgICAgICBTTkRfQVVESU9DT0RFQ19HNzI5CisjZGVmaW5lIFNORF9BVURJT0NPREVDX0JFU1BPS0UgICAgICAgICAgICAgICAoKF9fdTMyKSAweDAwMDAwMDBFKQorI2RlZmluZSBTTkRfQVVESU9DT0RFQ19NQVggICAgICAgICAgICAgICAgICAgU05EX0FVRElPQ09ERUNfQkVTUE9LRQogCiAvKgogICogUHJvZmlsZSBhbmQgbW9kZXMgYXJlIGxpc3RlZCB3aXRoIGJpdCBtYXNrcy4gVGhpcyBhbGxvd3MgZm9yIGEKQEAgLTMxMiw3ICszMTMsNyBAQAogCiBzdHJ1Y3Qgc25kX2VuY19nZW5lcmljIHsKIAlfX3UzMiBidzsJLyogZW5jb2RlciBiYW5kd2lkdGggKi8KLQlfX3MzMiByZXNlcnZlZFsxNV07CisJX19zMzIgcmVzZXJ2ZWRbMTVdOwkvKiBDYW4gYmUgdXNlZCBmb3IgU05EX0FVRElPQ09ERUNfQkVTUE9LRSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIAogdW5pb24gc25kX2NvZGVjX29wdGlvbnMgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9pbXgtaXB1LXYzLmggYi9pbmNsdWRlL3ZpZGVvL2lteC1pcHUtdjMuaAppbmRleCA4NWRlZGNhLi5lZWJhNzUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL2lteC1pcHUtdjMuaAorKysgYi9pbmNsdWRlL3ZpZGVvL2lteC1pcHUtdjMuaApAQCAtMzQzLDcgKzM0Myw2IEBACiAJaW50IGRpOwogCWludCBkYzsKIAlpbnQgZHA7Ci0JaW50IGRtZmM7CiAJaW50IGRtYVsyXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS9pby9yaW5nLmggYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vcmluZy5oCmluZGV4IDdkMjhhZmYuLjdkYzY4NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS9pby9yaW5nLmgKKysrIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvL3JpbmcuaApAQCAtMTgxLDYgKzE4MSwyMCBAQAogI2RlZmluZSBSSU5HX0dFVF9SRVFVRVNUKF9yLCBfaWR4KQkJCQkJXAogICAgICgmKChfciktPnNyaW5nLT5yaW5nWygoX2lkeCkgJiAoUklOR19TSVpFKF9yKSAtIDEpKV0ucmVxKSkKIAorLyoKKyAqIEdldCBhIGxvY2FsIGNvcHkgb2YgYSByZXF1ZXN0LgorICoKKyAqIFVzZSB0aGlzIGluIHByZWZlcmVuY2UgdG8gUklOR19HRVRfUkVRVUVTVCgpIHNvIGFsbCBwcm9jZXNzaW5nIGlzCisgKiBkb25lIG9uIGEgbG9jYWwgY29weSB0aGF0IGNhbm5vdCBiZSBtb2RpZmllZCBieSB0aGUgb3RoZXIgZW5kLgorICoKKyAqIE5vdGUgdGhhdCBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01ODE0NSBtYXkgY2F1c2UgdGhpcworICogdG8gYmUgaW5lZmZlY3RpdmUgd2hlcmUgX3JlcSBpcyBhIHN0cnVjdCB3aGljaCBjb25zaXN0cyBvZiBvbmx5IGJpdGZpZWxkcy4KKyAqLworI2RlZmluZSBSSU5HX0NPUFlfUkVRVUVTVChfciwgX2lkeCwgX3JlcSkgZG8gewkJCQlcCisJLyogVXNlIHZvbGF0aWxlIHRvIGZvcmNlIHRoZSBjb3B5IGludG8gX3JlcS4gKi8JCQlcCisJKihfcmVxKSA9ICoodm9sYXRpbGUgdHlwZW9mKF9yZXEpKVJJTkdfR0VUX1JFUVVFU1QoX3IsIF9pZHgpOwlcCit9IHdoaWxlICgwKQorCiAjZGVmaW5lIFJJTkdfR0VUX1JFU1BPTlNFKF9yLCBfaWR4KQkJCQkJXAogICAgICgmKChfciktPnNyaW5nLT5yaW5nWygoX2lkeCkgJiAoUklOR19TSVpFKF9yKSAtIDEpKV0ucnNwKSkKIApkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IGMyNGI2ZjcuLjIzNWM3YTIgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTIwMzAsMTMgKzIwMzAsNiBAQAogCSAgaXQgd2FzIGJldHRlciB0byBwcm92aWRlIHRoaXMgb3B0aW9uIHRoYW4gdG8gYnJlYWsgYWxsIHRoZSBhcmNocwogCSAgYW5kIGhhdmUgc2V2ZXJhbCBhcmNoIG1haW50YWluZXJzIHB1cnN1aW5nIG1lIGRvd24gZGFyayBhbGxleXMuCiAKLWNvbmZpZyBTVE9QX01BQ0hJTkUKLQlib29sCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiAoU01QICYmIE1PRFVMRV9VTkxPQUQpIHx8IEhPVFBMVUdfQ1BVCi0JaGVscAotCSAgTmVlZCBzdG9wX21hY2hpbmUoKSBwcmltaXRpdmUuCi0KIHNvdXJjZSAiYmxvY2svS2NvbmZpZyIKIAogY29uZmlnIFBSRUVNUFRfTk9USUZJRVJTCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FycmF5bWFwLmMgYi9rZXJuZWwvYnBmL2FycmF5bWFwLmMKaW5kZXggM2Y0Yzk5ZS4uYjA3OTliYyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9hcnJheW1hcC5jCisrKyBiL2tlcm5lbC9icGYvYXJyYXltYXAuYwpAQCAtMjgsMTEgKzI4LDE3IEBACiAJICAgIGF0dHItPnZhbHVlX3NpemUgPT0gMCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKKwlpZiAoYXR0ci0+dmFsdWVfc2l6ZSA+PSAxIDw8IChLTUFMTE9DX1NISUZUX01BWCAtIDEpKQorCQkvKiBpZiB2YWx1ZV9zaXplIGlzIGJpZ2dlciwgdGhlIHVzZXIgc3BhY2Ugd29uJ3QgYmUgYWJsZSB0bworCQkgKiBhY2Nlc3MgdGhlIGVsZW1lbnRzLgorCQkgKi8KKwkJcmV0dXJuIEVSUl9QVFIoLUUyQklHKTsKKwogCWVsZW1fc2l6ZSA9IHJvdW5kX3VwKGF0dHItPnZhbHVlX3NpemUsIDgpOwogCiAJLyogY2hlY2sgcm91bmRfdXAgaW50byB6ZXJvIGFuZCB1MzIgb3ZlcmZsb3cgKi8KIAlpZiAoZWxlbV9zaXplID09IDAgfHwKLQkgICAgYXR0ci0+bWF4X2VudHJpZXMgPiAoVTMyX01BWCAtIHNpemVvZigqYXJyYXkpKSAvIGVsZW1fc2l6ZSkKKwkgICAgYXR0ci0+bWF4X2VudHJpZXMgPiAoVTMyX01BWCAtIFBBR0VfU0laRSAtIHNpemVvZigqYXJyYXkpKSAvIGVsZW1fc2l6ZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlhcnJheV9zaXplID0gc2l6ZW9mKCphcnJheSkgKyBhdHRyLT5tYXhfZW50cmllcyAqIGVsZW1fc2l6ZTsKQEAgLTEwNSw3ICsxMTEsNyBAQAogCQkvKiBhbGwgZWxlbWVudHMgYWxyZWFkeSBleGlzdCAqLwogCQlyZXR1cm4gLUVFWElTVDsKIAotCW1lbWNweShhcnJheS0+dmFsdWUgKyBhcnJheS0+ZWxlbV9zaXplICogaW5kZXgsIHZhbHVlLCBhcnJheS0+ZWxlbV9zaXplKTsKKwltZW1jcHkoYXJyYXktPnZhbHVlICsgYXJyYXktPmVsZW1fc2l6ZSAqIGluZGV4LCB2YWx1ZSwgbWFwLT52YWx1ZV9zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCAxOTkwOWIyLi4zNDc3N2IzIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYworKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtNjQsMTIgKzY0LDM1IEBACiAJCSAqLwogCQlnb3RvIGZyZWVfaHRhYjsKIAotCWVyciA9IC1FTk9NRU07CisJaWYgKGh0YWItPm1hcC52YWx1ZV9zaXplID49ICgxIDw8IChLTUFMTE9DX1NISUZUX01BWCAtIDEpKSAtCisJICAgIE1BWF9CUEZfU1RBQ0sgLSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkpCisJCS8qIGlmIHZhbHVlX3NpemUgaXMgYmlnZ2VyLCB0aGUgdXNlciBzcGFjZSB3b24ndCBiZSBhYmxlIHRvCisJCSAqIGFjY2VzcyB0aGUgZWxlbWVudHMgdmlhIGJwZiBzeXNjYWxsLiBUaGlzIGNoZWNrIGFsc28gbWFrZXMKKwkJICogc3VyZSB0aGF0IHRoZSBlbGVtX3NpemUgZG9lc24ndCBvdmVyZmxvdyBhbmQgaXQncworCQkgKiBrbWFsbG9jLWFibGUgbGF0ZXIgaW4gaHRhYl9tYXBfdXBkYXRlX2VsZW0oKQorCQkgKi8KKwkJZ290byBmcmVlX2h0YWI7CisKKwlodGFiLT5lbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgKworCQkJICByb3VuZF91cChodGFiLT5tYXAua2V5X3NpemUsIDgpICsKKwkJCSAgaHRhYi0+bWFwLnZhbHVlX3NpemU7CisKIAkvKiBwcmV2ZW50IHplcm8gc2l6ZSBrbWFsbG9jIGFuZCBjaGVjayBmb3IgdTMyIG92ZXJmbG93ICovCiAJaWYgKGh0YWItPm5fYnVja2V0cyA9PSAwIHx8CiAJICAgIGh0YWItPm5fYnVja2V0cyA+IFUzMl9NQVggLyBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKQogCQlnb3RvIGZyZWVfaHRhYjsKIAorCWlmICgodTY0KSBodGFiLT5uX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpICsKKwkgICAgKHU2NCkgaHRhYi0+ZWxlbV9zaXplICogaHRhYi0+bWFwLm1heF9lbnRyaWVzID49CisJICAgIFUzMl9NQVggLSBQQUdFX1NJWkUpCisJCS8qIG1ha2Ugc3VyZSBwYWdlIGNvdW50IGRvZXNuJ3Qgb3ZlcmZsb3cgKi8KKwkJZ290byBmcmVlX2h0YWI7CisKKwlodGFiLT5tYXAucGFnZXMgPSByb3VuZF91cChodGFiLT5uX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpICsKKwkJCQkgICBodGFiLT5lbGVtX3NpemUgKiBodGFiLT5tYXAubWF4X2VudHJpZXMsCisJCQkJICAgUEFHRV9TSVpFKSA+PiBQQUdFX1NISUZUOworCisJZXJyID0gLUVOT01FTTsKIAlodGFiLT5idWNrZXRzID0ga21hbGxvY19hcnJheShodGFiLT5uX2J1Y2tldHMsIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCksCiAJCQkJICAgICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pOwogCkBAIC04NSwxMyArMTA4LDYgQEAKIAlyYXdfc3Bpbl9sb2NrX2luaXQoJmh0YWItPmxvY2spOwogCWh0YWItPmNvdW50ID0gMDsKIAotCWh0YWItPmVsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtKSArCi0JCQkgIHJvdW5kX3VwKGh0YWItPm1hcC5rZXlfc2l6ZSwgOCkgKwotCQkJICBodGFiLT5tYXAudmFsdWVfc2l6ZTsKLQotCWh0YWItPm1hcC5wYWdlcyA9IHJvdW5kX3VwKGh0YWItPm5fYnVja2V0cyAqIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkgKwotCQkJCSAgIGh0YWItPmVsZW1fc2l6ZSAqIGh0YWItPm1hcC5tYXhfZW50cmllcywKLQkJCQkgICBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQ7CiAJcmV0dXJuICZodGFiLT5tYXA7CiAKIGZyZWVfaHRhYjoKQEAgLTIyMiw3ICsyMzgsNyBAQAogCVdBUk5fT05fT05DRSghcmN1X3JlYWRfbG9ja19oZWxkKCkpOwogCiAJLyogYWxsb2NhdGUgbmV3IGVsZW1lbnQgb3V0c2lkZSBvZiBsb2NrICovCi0JbF9uZXcgPSBrbWFsbG9jKGh0YWItPmVsZW1fc2l6ZSwgR0ZQX0FUT01JQyk7CisJbF9uZXcgPSBrbWFsbG9jKGh0YWItPmVsZW1fc2l6ZSwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKCFsX25ldykKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaW5vZGUuYyBiL2tlcm5lbC9icGYvaW5vZGUuYwppbmRleCBiZTZkNzI2Li41YThhNzk3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2lub2RlLmMKKysrIGIva2VybmVsL2JwZi9pbm9kZS5jCkBAIC0zNCw3ICszNCw3IEBACiAJCWF0b21pY19pbmMoJigoc3RydWN0IGJwZl9wcm9nICopcmF3KS0+YXV4LT5yZWZjbnQpOwogCQlicmVhazsKIAljYXNlIEJQRl9UWVBFX01BUDoKLQkJYXRvbWljX2luYygmKChzdHJ1Y3QgYnBmX21hcCAqKXJhdyktPnJlZmNudCk7CisJCWJwZl9tYXBfaW5jKHJhdywgdHJ1ZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT05fT05DRSgxKTsKQEAgLTUxLDcgKzUxLDcgQEAKIAkJYnBmX3Byb2dfcHV0KHJhdyk7CiAJCWJyZWFrOwogCWNhc2UgQlBGX1RZUEVfTUFQOgotCQlicGZfbWFwX3B1dChyYXcpOworCQlicGZfbWFwX3B1dF93aXRoX3VyZWYocmF3KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTl9PTkNFKDEpOwpAQCAtNjQsNyArNjQsNyBAQAogCXZvaWQgKnJhdzsKIAogCSp0eXBlID0gQlBGX1RZUEVfTUFQOwotCXJhdyA9IGJwZl9tYXBfZ2V0KHVmZCk7CisJcmF3ID0gYnBmX21hcF9nZXRfd2l0aF91cmVmKHVmZCk7CiAJaWYgKElTX0VSUihyYXcpKSB7CiAJCSp0eXBlID0gQlBGX1RZUEVfUFJPRzsKIAkJcmF3ID0gYnBmX3Byb2dfZ2V0KHVmZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDBkMzMxM2QuLjNiMzk1NTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC04Miw2ICs4MiwxNCBAQAogCW1hcC0+b3BzLT5tYXBfZnJlZShtYXApOwogfQogCitzdGF0aWMgdm9pZCBicGZfbWFwX3B1dF91cmVmKHN0cnVjdCBicGZfbWFwICptYXApCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1hcC0+dXNlcmNudCkpIHsKKwkJaWYgKG1hcC0+bWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BST0dfQVJSQVkpCisJCQlicGZfZmRfYXJyYXlfbWFwX2NsZWFyKG1hcCk7CisJfQorfQorCiAvKiBkZWNyZW1lbnQgbWFwIHJlZmNudCBhbmQgc2NoZWR1bGUgaXQgZm9yIGZyZWVpbmcgdmlhIHdvcmtxdWV1ZQogICogKHVucmVseWluZyBtYXAgaW1wbGVtZW50YXRpb24gb3BzLT5tYXBfZnJlZSgpIG1pZ2h0IHNsZWVwKQogICovCkBAIC05MywxNyArMTAxLDE1IEBACiAJfQogfQogCit2b2lkIGJwZl9tYXBfcHV0X3dpdGhfdXJlZihzdHJ1Y3QgYnBmX21hcCAqbWFwKQoreworCWJwZl9tYXBfcHV0X3VyZWYobWFwKTsKKwlicGZfbWFwX3B1dChtYXApOworfQorCiBzdGF0aWMgaW50IGJwZl9tYXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3QgYnBmX21hcCAqbWFwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKG1hcC0+bWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BST0dfQVJSQVkpCi0JCS8qIHByb2dfYXJyYXkgc3RvcmVzIHJlZmNudC1lZCBicGZfcHJvZyBwb2ludGVycwotCQkgKiByZWxlYXNlIHRoZW0gYWxsIHdoZW4gdXNlciBzcGFjZSBjbG9zZXMgcHJvZ19hcnJheV9mZAotCQkgKi8KLQkJYnBmX2ZkX2FycmF5X21hcF9jbGVhcihtYXApOwotCi0JYnBmX21hcF9wdXQobWFwKTsKKwlicGZfbWFwX3B1dF93aXRoX3VyZWYoZmlscC0+cHJpdmF0ZV9kYXRhKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQyLDYgKzE0OCw3IEBACiAJCXJldHVybiBQVFJfRVJSKG1hcCk7CiAKIAlhdG9taWNfc2V0KCZtYXAtPnJlZmNudCwgMSk7CisJYXRvbWljX3NldCgmbWFwLT51c2VyY250LCAxKTsKIAogCWVyciA9IGJwZl9tYXBfY2hhcmdlX21lbWxvY2sobWFwKTsKIAlpZiAoZXJyKQpAQCAtMTc0LDcgKzE4MSwxNCBAQAogCXJldHVybiBmLmZpbGUtPnByaXZhdGVfZGF0YTsKIH0KIAotc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfZ2V0KHUzMiB1ZmQpCit2b2lkIGJwZl9tYXBfaW5jKHN0cnVjdCBicGZfbWFwICptYXAsIGJvb2wgdXJlZikKK3sKKwlhdG9taWNfaW5jKCZtYXAtPnJlZmNudCk7CisJaWYgKHVyZWYpCisJCWF0b21pY19pbmMoJm1hcC0+dXNlcmNudCk7Cit9CisKK3N0cnVjdCBicGZfbWFwICpicGZfbWFwX2dldF93aXRoX3VyZWYodTMyIHVmZCkKIHsKIAlzdHJ1Y3QgZmQgZiA9IGZkZ2V0KHVmZCk7CiAJc3RydWN0IGJwZl9tYXAgKm1hcDsKQEAgLTE4Myw3ICsxOTcsNyBAQAogCWlmIChJU19FUlIobWFwKSkKIAkJcmV0dXJuIG1hcDsKIAotCWF0b21pY19pbmMoJm1hcC0+cmVmY250KTsKKwlicGZfbWFwX2luYyhtYXAsIHRydWUpOwogCWZkcHV0KGYpOwogCiAJcmV0dXJuIG1hcDsKQEAgLTIyNiw3ICsyNDAsNyBAQAogCQlnb3RvIGZyZWVfa2V5OwogCiAJZXJyID0gLUVOT01FTTsKLQl2YWx1ZSA9IGttYWxsb2MobWFwLT52YWx1ZV9zaXplLCBHRlBfVVNFUik7CisJdmFsdWUgPSBrbWFsbG9jKG1hcC0+dmFsdWVfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghdmFsdWUpCiAJCWdvdG8gZnJlZV9rZXk7CiAKQEAgLTI4NSw3ICsyOTksNyBAQAogCQlnb3RvIGZyZWVfa2V5OwogCiAJZXJyID0gLUVOT01FTTsKLQl2YWx1ZSA9IGttYWxsb2MobWFwLT52YWx1ZV9zaXplLCBHRlBfVVNFUik7CisJdmFsdWUgPSBrbWFsbG9jKG1hcC0+dmFsdWVfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pOwogCWlmICghdmFsdWUpCiAJCWdvdG8gZnJlZV9rZXk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBjNjA3MzA1Li5hNzk0NWQxIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0yMDIxLDggKzIwMjEsNyBAQAogCQkJICogd2lsbCBiZSB1c2VkIGJ5IHRoZSB2YWxpZCBwcm9ncmFtIHVudGlsIGl0J3MgdW5sb2FkZWQKIAkJCSAqIGFuZCBhbGwgbWFwcyBhcmUgcmVsZWFzZWQgaW4gZnJlZV9icGZfcHJvZ19pbmZvKCkKIAkJCSAqLwotCQkJYXRvbWljX2luYygmbWFwLT5yZWZjbnQpOwotCisJCQlicGZfbWFwX2luYyhtYXAsIGZhbHNlKTsKIAkJCWZkcHV0KGYpOwogbmV4dF9pbnNuOgogCQkJaW5zbisrOwpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IGYxNjAzYzEuLjQ3MGY2NTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTk4LDYgKzk4LDEyIEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNncm91cF9pZHJfbG9jayk7CiAKIC8qCisgKiBQcm90ZWN0cyBjZ3JvdXBfZmlsZS0+a24gZm9yICFzZWxmIGNzc2VzLiAgSXQgc3luY2hyb25pemVzIG5vdGlmaWNhdGlvbnMKKyAqIGFnYWluc3QgZmlsZSByZW1vdmFsL3JlLWNyZWF0aW9uIGFjcm9zcyBjc3MgaGlkaW5nLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNncm91cF9maWxlX2tuX2xvY2spOworCisvKgogICogUHJvdGVjdHMgY2dyb3VwX3N1YnN5cy0+cmVsZWFzZV9hZ2VudF9wYXRoLiAgTW9kaWZ5aW5nIGl0IGFsc28gcmVxdWlyZXMKICAqIGNncm91cF9tdXRleC4gIFJlYWRpbmcgcmVxdWlyZXMgZWl0aGVyIGNncm91cF9tdXRleCBvciB0aGlzIHNwaW5sb2NrLgogICovCkBAIC03NTQsOSArNzYwLDExIEBACiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZjc2V0LT5yZWZjb3VudCkpCiAJCXJldHVybjsKIAotCS8qIFRoaXMgY3NzX3NldCBpcyBkZWFkLiB1bmxpbmsgaXQgYW5kIHJlbGVhc2UgY2dyb3VwIHJlZmNvdW50cyAqLwotCWZvcl9lYWNoX3N1YnN5cyhzcywgc3NpZCkKKwkvKiBUaGlzIGNzc19zZXQgaXMgZGVhZC4gdW5saW5rIGl0IGFuZCByZWxlYXNlIGNncm91cCBhbmQgY3NzIHJlZnMgKi8KKwlmb3JfZWFjaF9zdWJzeXMoc3MsIHNzaWQpIHsKIAkJbGlzdF9kZWwoJmNzZXQtPmVfY3NldF9ub2RlW3NzaWRdKTsKKwkJY3NzX3B1dChjc2V0LT5zdWJzeXNbc3NpZF0pOworCX0KIAloYXNoX2RlbCgmY3NldC0+aGxpc3QpOwogCWNzc19zZXRfY291bnQtLTsKIApAQCAtMTA1Niw5ICsxMDY0LDEzIEBACiAJa2V5ID0gY3NzX3NldF9oYXNoKGNzZXQtPnN1YnN5cyk7CiAJaGFzaF9hZGQoY3NzX3NldF90YWJsZSwgJmNzZXQtPmhsaXN0LCBrZXkpOwogCi0JZm9yX2VhY2hfc3Vic3lzKHNzLCBzc2lkKQorCWZvcl9lYWNoX3N1YnN5cyhzcywgc3NpZCkgeworCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzID0gY3NldC0+c3Vic3lzW3NzaWRdOworCiAJCWxpc3RfYWRkX3RhaWwoJmNzZXQtPmVfY3NldF9ub2RlW3NzaWRdLAotCQkJICAgICAgJmNzZXQtPnN1YnN5c1tzc2lkXS0+Y2dyb3VwLT5lX2NzZXRzW3NzaWRdKTsKKwkJCSAgICAgICZjc3MtPmNncm91cC0+ZV9jc2V0c1tzc2lkXSk7CisJCWNzc19nZXQoY3NzKTsKKwl9CiAKIAlzcGluX3VubG9ja19iaCgmY3NzX3NldF9sb2NrKTsKIApAQCAtMTM5Myw2ICsxNDA1LDE2IEBACiAJY2hhciBuYW1lW0NHUk9VUF9GSUxFX05BTUVfTUFYXTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmNncm91cF9tdXRleCk7CisKKwlpZiAoY2Z0LT5maWxlX29mZnNldCkgeworCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzID0gY2dyb3VwX2NzcyhjZ3JwLCBjZnQtPnNzKTsKKwkJc3RydWN0IGNncm91cF9maWxlICpjZmlsZSA9ICh2b2lkICopY3NzICsgY2Z0LT5maWxlX29mZnNldDsKKworCQlzcGluX2xvY2tfaXJxKCZjZ3JvdXBfZmlsZV9rbl9sb2NrKTsKKwkJY2ZpbGUtPmtuID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjZ3JvdXBfZmlsZV9rbl9sb2NrKTsKKwl9CisKIAlrZXJuZnNfcmVtb3ZlX2J5X25hbWUoY2dycC0+a24sIGNncm91cF9maWxlX25hbWUoY2dycCwgY2Z0LCBuYW1lKSk7CiB9CiAKQEAgLTE4NTYsNyArMTg3OCw2IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmY2dycC0+c2VsZi5zaWJsaW5nKTsKIAlJTklUX0xJU1RfSEVBRCgmY2dycC0+c2VsZi5jaGlsZHJlbik7Ci0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPnNlbGYuZmlsZXMpOwogCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jc2V0X2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmY2dycC0+cGlkbGlzdHMpOwogCW11dGV4X2luaXQoJmNncnAtPnBpZGxpc3RfbXV0ZXgpOwpAQCAtMjIxNiw2ICsyMjM3LDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNyY19jc2V0czsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWRzdF9jc2V0czsKIAorCS8qIHRoZSBzdWJzeXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZCAqLworCWludAkJCXNzaWQ7CisKIAkvKgogCSAqIEZpZWxkcyBmb3IgY2dyb3VwX3Rhc2tzZXRfKigpIGl0ZXJhdGlvbi4KIAkgKgpAQCAtMjI3OCwyNSArMjMwMiwyOSBAQAogLyoqCiAgKiBjZ3JvdXBfdGFza3NldF9maXJzdCAtIHJlc2V0IHRhc2tzZXQgYW5kIHJldHVybiB0aGUgZmlyc3QgdGFzawogICogQHRzZXQ6IHRhc2tzZXQgb2YgaW50ZXJlc3QKKyAqIEBkc3RfY3NzcDogb3V0cHV0IHZhcmlhYmxlIGZvciB0aGUgZGVzdGluYXRpb24gY3NzCiAgKgogICogQHRzZXQgaXRlcmF0aW9uIGlzIGluaXRpYWxpemVkIGFuZCB0aGUgZmlyc3QgdGFzayBpcyByZXR1cm5lZC4KICAqLwotc3RydWN0IHRhc2tfc3RydWN0ICpjZ3JvdXBfdGFza3NldF9maXJzdChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNncm91cF90YXNrc2V0X2ZpcnN0KHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCwKKwkJCQkJIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICoqZHN0X2Nzc3ApCiB7CiAJdHNldC0+Y3VyX2NzZXQgPSBsaXN0X2ZpcnN0X2VudHJ5KHRzZXQtPmNzZXRzLCBzdHJ1Y3QgY3NzX3NldCwgbWdfbm9kZSk7CiAJdHNldC0+Y3VyX3Rhc2sgPSBOVUxMOwogCi0JcmV0dXJuIGNncm91cF90YXNrc2V0X25leHQodHNldCk7CisJcmV0dXJuIGNncm91cF90YXNrc2V0X25leHQodHNldCwgZHN0X2Nzc3ApOwogfQogCiAvKioKICAqIGNncm91cF90YXNrc2V0X25leHQgLSBpdGVyYXRlIHRvIHRoZSBuZXh0IHRhc2sgaW4gdGFza3NldAogICogQHRzZXQ6IHRhc2tzZXQgb2YgaW50ZXJlc3QKKyAqIEBkc3RfY3NzcDogb3V0cHV0IHZhcmlhYmxlIGZvciB0aGUgZGVzdGluYXRpb24gY3NzCiAgKgogICogUmV0dXJuIHRoZSBuZXh0IHRhc2sgaW4gQHRzZXQuICBJdGVyYXRpb24gbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQKICAqIHdpdGggY2dyb3VwX3Rhc2tzZXRfZmlyc3QoKS4KICAqLwotc3RydWN0IHRhc2tfc3RydWN0ICpjZ3JvdXBfdGFza3NldF9uZXh0KHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKK3N0cnVjdCB0YXNrX3N0cnVjdCAqY2dyb3VwX3Rhc2tzZXRfbmV4dChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQsCisJCQkJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICoqZHN0X2Nzc3ApCiB7CiAJc3RydWN0IGNzc19zZXQgKmNzZXQgPSB0c2V0LT5jdXJfY3NldDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSB0c2V0LT5jdXJfdGFzazsKQEAgLTIzMTEsNiArMjMzOSwxOCBAQAogCQlpZiAoJnRhc2stPmNnX2xpc3QgIT0gJmNzZXQtPm1nX3Rhc2tzKSB7CiAJCQl0c2V0LT5jdXJfY3NldCA9IGNzZXQ7CiAJCQl0c2V0LT5jdXJfdGFzayA9IHRhc2s7CisKKwkJCS8qCisJCQkgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYm90aCBiZWZvcmUgYW5kCisJCQkgKiBhZnRlciBjZ3JvdXBfdGFza3NldF9taWdyYXRlKCkuICBUaGUgdHdvIGNhc2VzCisJCQkgKiBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBieSBsb29raW5nIGF0IHdoZXRoZXIgQGNzZXQKKwkJCSAqIGhhcyBpdHMgLT5tZ19kc3RfY3NldCBzZXQuCisJCQkgKi8KKwkJCWlmIChjc2V0LT5tZ19kc3RfY3NldCkKKwkJCQkqZHN0X2Nzc3AgPSBjc2V0LT5tZ19kc3RfY3NldC0+c3Vic3lzW3RzZXQtPnNzaWRdOworCQkJZWxzZQorCQkJCSpkc3RfY3NzcCA9IGNzZXQtPnN1YnN5c1t0c2V0LT5zc2lkXTsKKwogCQkJcmV0dXJuIHRhc2s7CiAJCX0KIApAQCAtMjM0Niw3ICsyMzg2LDggQEAKIAkvKiBjaGVjayB0aGF0IHdlIGNhbiBsZWdpdGltYXRlbHkgYXR0YWNoIHRvIHRoZSBjZ3JvdXAgKi8KIAlmb3JfZWFjaF9lX2Nzcyhjc3MsIGksIGRzdF9jZ3JwKSB7CiAJCWlmIChjc3MtPnNzLT5jYW5fYXR0YWNoKSB7Ci0JCQlyZXQgPSBjc3MtPnNzLT5jYW5fYXR0YWNoKGNzcywgdHNldCk7CisJCQl0c2V0LT5zc2lkID0gaTsKKwkJCXJldCA9IGNzcy0+c3MtPmNhbl9hdHRhY2godHNldCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJZmFpbGVkX2NzcyA9IGNzczsKIAkJCQlnb3RvIG91dF9jYW5jZWxfYXR0YWNoOwpAQCAtMjM3OSw5ICsyNDIwLDEyIEBACiAJICovCiAJdHNldC0+Y3NldHMgPSAmdHNldC0+ZHN0X2NzZXRzOwogCi0JZm9yX2VhY2hfZV9jc3MoY3NzLCBpLCBkc3RfY2dycCkKLQkJaWYgKGNzcy0+c3MtPmF0dGFjaCkKLQkJCWNzcy0+c3MtPmF0dGFjaChjc3MsIHRzZXQpOworCWZvcl9lYWNoX2VfY3NzKGNzcywgaSwgZHN0X2NncnApIHsKKwkJaWYgKGNzcy0+c3MtPmF0dGFjaCkgeworCQkJdHNldC0+c3NpZCA9IGk7CisJCQljc3MtPnNzLT5hdHRhY2godHNldCk7CisJCX0KKwl9CiAKIAlyZXQgPSAwOwogCWdvdG8gb3V0X3JlbGVhc2VfdHNldDsKQEAgLTIzOTAsOCArMjQzNCwxMCBAQAogCWZvcl9lYWNoX2VfY3NzKGNzcywgaSwgZHN0X2NncnApIHsKIAkJaWYgKGNzcyA9PSBmYWlsZWRfY3NzKQogCQkJYnJlYWs7Ci0JCWlmIChjc3MtPnNzLT5jYW5jZWxfYXR0YWNoKQotCQkJY3NzLT5zcy0+Y2FuY2VsX2F0dGFjaChjc3MsIHRzZXQpOworCQlpZiAoY3NzLT5zcy0+Y2FuY2VsX2F0dGFjaCkgeworCQkJdHNldC0+c3NpZCA9IGk7CisJCQljc3MtPnNzLT5jYW5jZWxfYXR0YWNoKHRzZXQpOworCQl9CiAJfQogb3V0X3JlbGVhc2VfdHNldDoKIAlzcGluX2xvY2tfYmgoJmNzc19zZXRfbG9jayk7CkBAIC0zMzEzLDkgKzMzNTksOSBAQAogCWlmIChjZnQtPmZpbGVfb2Zmc2V0KSB7CiAJCXN0cnVjdCBjZ3JvdXBfZmlsZSAqY2ZpbGUgPSAodm9pZCAqKWNzcyArIGNmdC0+ZmlsZV9vZmZzZXQ7CiAKLQkJa2VybmZzX2dldChrbik7CisJCXNwaW5fbG9ja19pcnEoJmNncm91cF9maWxlX2tuX2xvY2spOwogCQljZmlsZS0+a24gPSBrbjsKLQkJbGlzdF9hZGQoJmNmaWxlLT5ub2RlLCAmY3NzLT5maWxlcyk7CisJCXNwaW5fdW5sb2NrX2lycSgmY2dyb3VwX2ZpbGVfa25fbG9jayk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zNTUzLDYgKzM1OTksMjIgQEAKIH0KIAogLyoqCisgKiBjZ3JvdXBfZmlsZV9ub3RpZnkgLSBnZW5lcmF0ZSBhIGZpbGUgbW9kaWZpZWQgZXZlbnQgZm9yIGEgY2dyb3VwX2ZpbGUKKyAqIEBjZmlsZTogdGFyZ2V0IGNncm91cF9maWxlCisgKgorICogQGNmaWxlIG11c3QgaGF2ZSBiZWVuIG9idGFpbmVkIGJ5IHNldHRpbmcgY2Z0eXBlLT5maWxlX29mZnNldC4KKyAqLwordm9pZCBjZ3JvdXBfZmlsZV9ub3RpZnkoc3RydWN0IGNncm91cF9maWxlICpjZmlsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNncm91cF9maWxlX2tuX2xvY2ssIGZsYWdzKTsKKwlpZiAoY2ZpbGUtPmtuKQorCQlrZXJuZnNfbm90aWZ5KGNmaWxlLT5rbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2dyb3VwX2ZpbGVfa25fbG9jaywgZmxhZ3MpOworfQorCisvKioKICAqIGNncm91cF90YXNrX2NvdW50IC0gY291bnQgdGhlIG51bWJlciBvZiB0YXNrcyBpbiBhIGNncm91cC4KICAqIEBjZ3JwOiB0aGUgY2dyb3VwIGluIHF1ZXN0aW9uCiAgKgpAQCAtNDYxMywxMyArNDY3NSw5IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSwgZGVzdHJveV93b3JrKTsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBjc3MtPnNzOwogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjc3MtPmNncm91cDsKLQlzdHJ1Y3QgY2dyb3VwX2ZpbGUgKmNmaWxlOwogCiAJcGVyY3B1X3JlZl9leGl0KCZjc3MtPnJlZmNudCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNmaWxlLCAmY3NzLT5maWxlcywgbm9kZSkKLQkJa2VybmZzX3B1dChjZmlsZS0+a24pOwotCiAJaWYgKHNzKSB7CiAJCS8qIGNzcyBmcmVlIHBhdGggKi8KIAkJaW50IGlkID0gY3NzLT5pZDsKQEAgLTQ3MjQsNyArNDc4Miw2IEBACiAJY3NzLT5zcyA9IHNzOwogCUlOSVRfTElTVF9IRUFEKCZjc3MtPnNpYmxpbmcpOwogCUlOSVRfTElTVF9IRUFEKCZjc3MtPmNoaWxkcmVuKTsKLQlJTklUX0xJU1RfSEVBRCgmY3NzLT5maWxlcyk7CiAJY3NzLT5zZXJpYWxfbnIgPSBjc3Nfc2VyaWFsX25yX25leHQrKzsKIAogCWlmIChjZ3JvdXBfcGFyZW50KGNncnApKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwX2ZyZWV6ZXIuYyBiL2tlcm5lbC9jZ3JvdXBfZnJlZXplci5jCmluZGV4IGYxYjMwYWQuLjJkM2RmODIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXBfZnJlZXplci5jCisrKyBiL2tlcm5lbC9jZ3JvdXBfZnJlZXplci5jCkBAIC0xNTUsMTIgKzE1NSwxMCBAQAogICogQGZyZWV6ZXItPmxvY2suICBmcmVlemVyX2F0dGFjaCgpIG1ha2VzIHRoZSBuZXcgdGFza3MgY29uZm9ybSB0byB0aGUKICAqIGN1cnJlbnQgc3RhdGUgYW5kIGFsbCBmb2xsb3dpbmcgc3RhdGUgY2hhbmdlcyBjYW4gc2VlIHRoZSBuZXcgdGFza3MuCiAgKi8KLXN0YXRpYyB2b2lkIGZyZWV6ZXJfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpuZXdfY3NzLAotCQkJICAgc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQorc3RhdGljIHZvaWQgZnJlZXplcl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogewotCXN0cnVjdCBmcmVlemVyICpmcmVlemVyID0gY3NzX2ZyZWV6ZXIobmV3X2Nzcyk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCWJvb2wgY2xlYXJfZnJvemVuID0gZmFsc2U7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm5ld19jc3M7CiAKIAltdXRleF9sb2NrKCZmcmVlemVyX211dGV4KTsKIApAQCAtMTc0LDIyICsxNzIsMjEgQEAKIAkgKiBjdXJyZW50IHN0YXRlIGJlZm9yZSBleGVjdXRpbmcgdGhlIGZvbGxvd2luZyAtICFmcm96ZW4gdGFza3MgbWF5CiAJICogYmUgdmlzaWJsZSBpbiBhIEZST1pFTiBjZ3JvdXAgYW5kIGZyb3plbiB0YXNrcyBpbiBhIFRIQVdFRCBvbmUuCiAJICovCi0JY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgdHNldCkgeworCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoKHRhc2ssIG5ld19jc3MsIHRzZXQpIHsKKwkJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXIgPSBjc3NfZnJlZXplcihuZXdfY3NzKTsKKwogCQlpZiAoIShmcmVlemVyLT5zdGF0ZSAmIENHUk9VUF9GUkVFWklORykpIHsKIAkJCV9fdGhhd190YXNrKHRhc2spOwogCQl9IGVsc2UgewogCQkJZnJlZXplX3Rhc2sodGFzayk7Ci0JCQlmcmVlemVyLT5zdGF0ZSAmPSB+Q0dST1VQX0ZST1pFTjsKLQkJCWNsZWFyX2Zyb3plbiA9IHRydWU7CisJCQkvKiBjbGVhciBGUk9aRU4gYW5kIHByb3BhZ2F0ZSB1cHdhcmRzICovCisJCQl3aGlsZSAoZnJlZXplciAmJiAoZnJlZXplci0+c3RhdGUgJiBDR1JPVVBfRlJPWkVOKSkgeworCQkJCWZyZWV6ZXItPnN0YXRlICY9IH5DR1JPVVBfRlJPWkVOOworCQkJCWZyZWV6ZXIgPSBwYXJlbnRfZnJlZXplcihmcmVlemVyKTsKKwkJCX0KIAkJfQogCX0KIAotCS8qIHByb3BhZ2F0ZSBGUk9aRU4gY2xlYXJpbmcgdXB3YXJkcyAqLwotCXdoaWxlIChjbGVhcl9mcm96ZW4gJiYgKGZyZWV6ZXIgPSBwYXJlbnRfZnJlZXplcihmcmVlemVyKSkpIHsKLQkJZnJlZXplci0+c3RhdGUgJj0gfkNHUk9VUF9GUk9aRU47Ci0JCWNsZWFyX2Zyb3plbiA9IGZyZWV6ZXItPnN0YXRlICYgQ0dST1VQX0ZSRUVaSU5HOwotCX0KLQogCW11dGV4X3VubG9jaygmZnJlZXplcl9tdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXBfcGlkcy5jIGIva2VybmVsL2Nncm91cF9waWRzLmMKaW5kZXggY2RkOGRmNC4uYjUwZDVhMSAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cF9waWRzLmMKKysrIGIva2VybmVsL2Nncm91cF9waWRzLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogewogCXN0cnVjdCBwaWRzX2Nncm91cCAqcDsKIAotCWZvciAocCA9IHBpZHM7IHA7IHAgPSBwYXJlbnRfcGlkcyhwKSkKKwlmb3IgKHAgPSBwaWRzOyBwYXJlbnRfcGlkcyhwKTsgcCA9IHBhcmVudF9waWRzKHApKQogCQlwaWRzX2NhbmNlbChwLCBudW0pOwogfQogCkBAIC0xMjMsNyArMTIzLDcgQEAKIHsKIAlzdHJ1Y3QgcGlkc19jZ3JvdXAgKnA7CiAKLQlmb3IgKHAgPSBwaWRzOyBwOyBwID0gcGFyZW50X3BpZHMocCkpCisJZm9yIChwID0gcGlkczsgcGFyZW50X3BpZHMocCk7IHAgPSBwYXJlbnRfcGlkcyhwKSkKIAkJYXRvbWljNjRfYWRkKG51bSwgJnAtPmNvdW50ZXIpOwogfQogCkBAIC0xNDAsNyArMTQwLDcgQEAKIHsKIAlzdHJ1Y3QgcGlkc19jZ3JvdXAgKnAsICpxOwogCi0JZm9yIChwID0gcGlkczsgcDsgcCA9IHBhcmVudF9waWRzKHApKSB7CisJZm9yIChwID0gcGlkczsgcGFyZW50X3BpZHMocCk7IHAgPSBwYXJlbnRfcGlkcyhwKSkgewogCQlpbnQ2NF90IG5ldyA9IGF0b21pYzY0X2FkZF9yZXR1cm4obnVtLCAmcC0+Y291bnRlcik7CiAKIAkJLyoKQEAgLTE2MiwxMyArMTYyLDEzIEBACiAJcmV0dXJuIC1FQUdBSU47CiB9CiAKLXN0YXRpYyBpbnQgcGlkc19jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCi0JCQkgICBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCitzdGF0aWMgaW50IHBpZHNfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCiB7Ci0Jc3RydWN0IHBpZHNfY2dyb3VwICpwaWRzID0gY3NzX3BpZHMoY3NzKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmRzdF9jc3M7CiAKLQljZ3JvdXBfdGFza3NldF9mb3JfZWFjaCh0YXNrLCB0c2V0KSB7CisJY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgZHN0X2NzcywgdHNldCkgeworCQlzdHJ1Y3QgcGlkc19jZ3JvdXAgKnBpZHMgPSBjc3NfcGlkcyhkc3RfY3NzKTsKIAkJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm9sZF9jc3M7CiAJCXN0cnVjdCBwaWRzX2Nncm91cCAqb2xkX3BpZHM7CiAKQEAgLTE4NywxMyArMTg3LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBpZHNfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAotCQkJICAgICAgIHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKK3N0YXRpYyB2b2lkIHBpZHNfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCiB7Ci0Jc3RydWN0IHBpZHNfY2dyb3VwICpwaWRzID0gY3NzX3BpZHMoY3NzKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmRzdF9jc3M7CiAKLQljZ3JvdXBfdGFza3NldF9mb3JfZWFjaCh0YXNrLCB0c2V0KSB7CisJY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgZHN0X2NzcywgdHNldCkgeworCQlzdHJ1Y3QgcGlkc19jZ3JvdXAgKnBpZHMgPSBjc3NfcGlkcyhkc3RfY3NzKTsKIAkJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKm9sZF9jc3M7CiAJCXN0cnVjdCBwaWRzX2Nncm91cCAqb2xkX3BpZHM7CiAKQEAgLTIwNSw2NSArMjA1LDI4IEBACiAJfQogfQogCisvKgorICogdGFza19jc3NfY2hlY2sodHJ1ZSkgaW4gcGlkc19jYW5fZm9yaygpIGFuZCBwaWRzX2NhbmNlbF9mb3JrKCkgcmVsaWVzCisgKiBvbiB0aHJlYWRncm91cF9jaGFuZ2VfYmVnaW4oKSBoZWxkIGJ5IHRoZSBjb3B5X3Byb2Nlc3MoKS4KKyAqLwogc3RhdGljIGludCBwaWRzX2Nhbl9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqKnByaXZfcCkKIHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOwogCXN0cnVjdCBwaWRzX2Nncm91cCAqcGlkczsKLQlpbnQgZXJyOwogCi0JLyoKLQkgKiBVc2UgdGhlICJjdXJyZW50IiB0YXNrX2NzcyBmb3IgdGhlIHBpZHMgc3Vic3lzdGVtIGFzIHRoZSB0ZW50YXRpdmUKLQkgKiBjc3MuIEl0IGlzIHBvc3NpYmxlIHdlIHdpbGwgY2hhcmdlIHRoZSB3cm9uZyBoaWVyYXJjaHksIGluIHdoaWNoCi0JICogY2FzZSB3ZSB3aWxsIGZvcmNlZnVsbHkgcmV2ZXJ0L3JlYXBwbHkgdGhlIGNoYXJnZSBvbiB0aGUgcmlnaHQKLQkgKiBoaWVyYXJjaHkgYWZ0ZXIgaXQgaXMgY29tbWl0dGVkIHRvIHRoZSB0YXNrIHByb3Blci4KLQkgKi8KLQljc3MgPSB0YXNrX2dldF9jc3MoY3VycmVudCwgcGlkc19jZ3JwX2lkKTsKKwljc3MgPSB0YXNrX2Nzc19jaGVjayhjdXJyZW50LCBwaWRzX2NncnBfaWQsIHRydWUpOwogCXBpZHMgPSBjc3NfcGlkcyhjc3MpOwotCi0JZXJyID0gcGlkc190cnlfY2hhcmdlKHBpZHMsIDEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2Nzc19wdXQ7Ci0KLQkqcHJpdl9wID0gY3NzOwotCXJldHVybiAwOwotCi1lcnJfY3NzX3B1dDoKLQljc3NfcHV0KGNzcyk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcGlkc190cnlfY2hhcmdlKHBpZHMsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBwaWRzX2NhbmNlbF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdm9pZCAqcHJpdikKIHsKLQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzID0gcHJpdjsKLQlzdHJ1Y3QgcGlkc19jZ3JvdXAgKnBpZHMgPSBjc3NfcGlkcyhjc3MpOwotCi0JcGlkc191bmNoYXJnZShwaWRzLCAxKTsKLQljc3NfcHV0KGNzcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBpZHNfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKnByaXYpCi17CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKLQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqb2xkX2NzcyA9IHByaXY7CiAJc3RydWN0IHBpZHNfY2dyb3VwICpwaWRzOwotCXN0cnVjdCBwaWRzX2Nncm91cCAqb2xkX3BpZHMgPSBjc3NfcGlkcyhvbGRfY3NzKTsKIAotCWNzcyA9IHRhc2tfZ2V0X2Nzcyh0YXNrLCBwaWRzX2NncnBfaWQpOworCWNzcyA9IHRhc2tfY3NzX2NoZWNrKGN1cnJlbnQsIHBpZHNfY2dycF9pZCwgdHJ1ZSk7CiAJcGlkcyA9IGNzc19waWRzKGNzcyk7Ci0KLQkvKgotCSAqIElmIHRoZSBhc3NvY2lhdGlvbiBoYXMgY2hhbmdlZCwgd2UgaGF2ZSB0byByZXZlcnQgYW5kIHJlYXBwbHkgdGhlCi0JICogY2hhcmdlL3VuY2hhcmdlIG9uIHRoZSB3cm9uZyBoaWVyYXJjaHkgdG8gdGhlIGN1cnJlbnQgb25lLiBTaW5jZQotCSAqIHRoZSBhc3NvY2lhdGlvbiBjYW4gb25seSBjaGFuZ2UgZHVlIHRvIGFuIG9yZ2FuaXNhdGlvbiBldmVudCwgaXRzCi0JICogb2theSBmb3IgdXMgdG8gaWdub3JlIHRoZSBsaW1pdCBpbiB0aGlzIGNhc2UuCi0JICovCi0JaWYgKHBpZHMgIT0gb2xkX3BpZHMpIHsKLQkJcGlkc191bmNoYXJnZShvbGRfcGlkcywgMSk7Ci0JCXBpZHNfY2hhcmdlKHBpZHMsIDEpOwotCX0KLQotCWNzc19wdXQoY3NzKTsKLQljc3NfcHV0KG9sZF9jc3MpOworCXBpZHNfdW5jaGFyZ2UocGlkcywgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBpZHNfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCkBAIC0zMzUsNiArMjk4LDcgQEAKIAl7CiAJCS5uYW1lID0gImN1cnJlbnQiLAogCQkucmVhZF9zNjQgPSBwaWRzX2N1cnJlbnRfcmVhZCwKKwkJLmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULAogCX0sCiAJeyB9CS8qIHRlcm1pbmF0ZSAqLwogfTsKQEAgLTM0Niw3ICszMTAsNiBAQAogCS5jYW5jZWxfYXR0YWNoIAk9IHBpZHNfY2FuY2VsX2F0dGFjaCwKIAkuY2FuX2ZvcmsJPSBwaWRzX2Nhbl9mb3JrLAogCS5jYW5jZWxfZm9yawk9IHBpZHNfY2FuY2VsX2ZvcmssCi0JLmZvcmsJCT0gcGlkc19mb3JrLAogCS5mcmVlCQk9IHBpZHNfZnJlZSwKIAkubGVnYWN5X2NmdHlwZXMJPSBwaWRzX2ZpbGVzLAogCS5kZmxfY2Z0eXBlcwk9IHBpZHNfZmlsZXMsCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggMTBhZTczNi4uMDJhOGVhNSAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMTQyOSwxNSArMTQyOSwxNiBAQAogc3RhdGljIHN0cnVjdCBjcHVzZXQgKmNwdXNldF9hdHRhY2hfb2xkX2NzOwogCiAvKiBDYWxsZWQgYnkgY2dyb3VwcyB0byBkZXRlcm1pbmUgaWYgYSBjcHVzZXQgaXMgdXNhYmxlOyBjcHVzZXRfbXV0ZXggaGVsZCAqLwotc3RhdGljIGludCBjcHVzZXRfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAotCQkJICAgICBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCitzdGF0aWMgaW50IGNwdXNldF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKIHsKLQlzdHJ1Y3QgY3B1c2V0ICpjcyA9IGNzc19jcyhjc3MpOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CisJc3RydWN0IGNwdXNldCAqY3M7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCWludCByZXQ7CiAKIAkvKiB1c2VkIGxhdGVyIGJ5IGNwdXNldF9hdHRhY2goKSAqLwotCWNwdXNldF9hdHRhY2hfb2xkX2NzID0gdGFza19jcyhjZ3JvdXBfdGFza3NldF9maXJzdCh0c2V0KSk7CisJY3B1c2V0X2F0dGFjaF9vbGRfY3MgPSB0YXNrX2NzKGNncm91cF90YXNrc2V0X2ZpcnN0KHRzZXQsICZjc3MpKTsKKwljcyA9IGNzc19jcyhjc3MpOwogCiAJbXV0ZXhfbG9jaygmY3B1c2V0X211dGV4KTsKIApAQCAtMTQ0Nyw3ICsxNDQ4LDcgQEAKIAkgICAgKGNwdW1hc2tfZW1wdHkoY3MtPmNwdXNfYWxsb3dlZCkgfHwgbm9kZXNfZW1wdHkoY3MtPm1lbXNfYWxsb3dlZCkpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQljZ3JvdXBfdGFza3NldF9mb3JfZWFjaCh0YXNrLCB0c2V0KSB7CisJY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgY3NzLCB0c2V0KSB7CiAJCXJldCA9IHRhc2tfY2FuX2F0dGFjaCh0YXNrLCBjcy0+Y3B1c19hbGxvd2VkKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X3VubG9jazsKQEAgLTE0NjcsOSArMTQ2OCwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGNwdXNldF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCi0JCQkJIHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKK3N0YXRpYyB2b2lkIGNwdXNldF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKIHsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCXN0cnVjdCBjcHVzZXQgKmNzOworCisJY2dyb3VwX3Rhc2tzZXRfZmlyc3QodHNldCwgJmNzcyk7CisJY3MgPSBjc3NfY3MoY3NzKTsKKwogCW11dGV4X2xvY2soJmNwdXNldF9tdXRleCk7CiAJY3NzX2NzKGNzcyktPmF0dGFjaF9pbl9wcm9ncmVzcy0tOwogCW11dGV4X3VubG9jaygmY3B1c2V0X211dGV4KTsKQEAgLTE0ODIsMTYgKzE0ODgsMTkgQEAKICAqLwogc3RhdGljIGNwdW1hc2tfdmFyX3QgY3B1c19hdHRhY2g7CiAKLXN0YXRpYyB2b2lkIGNwdXNldF9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywKLQkJCSAgc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQorc3RhdGljIHZvaWQgY3B1c2V0X2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCiB7CiAJLyogc3RhdGljIGJ1ZiBwcm90ZWN0ZWQgYnkgY3B1c2V0X211dGV4ICovCiAJc3RhdGljIG5vZGVtYXNrX3QgY3B1c2V0X2F0dGFjaF9ub2RlbWFza190bzsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7Ci0Jc3RydWN0IGNwdXNldCAqY3MgPSBjc3NfY3MoY3NzKTsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCXN0cnVjdCBjcHVzZXQgKmNzOwogCXN0cnVjdCBjcHVzZXQgKm9sZGNzID0gY3B1c2V0X2F0dGFjaF9vbGRfY3M7CiAKKwljZ3JvdXBfdGFza3NldF9maXJzdCh0c2V0LCAmY3NzKTsKKwljcyA9IGNzc19jcyhjc3MpOworCiAJbXV0ZXhfbG9jaygmY3B1c2V0X211dGV4KTsKIAogCS8qIHByZXBhcmUgZm9yIGF0dGFjaCAqLwpAQCAtMTUwMiw3ICsxNTExLDcgQEAKIAogCWd1YXJhbnRlZV9vbmxpbmVfbWVtcyhjcywgJmNwdXNldF9hdHRhY2hfbm9kZW1hc2tfdG8pOwogCi0JY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgdHNldCkgeworCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoKHRhc2ssIGNzcywgdHNldCkgewogCQkvKgogCQkgKiBjYW5fYXR0YWNoIGJlZm9yZWhhbmQgc2hvdWxkIGd1YXJhbnRlZSB0aGF0IHRoaXMgZG9lc24ndAogCQkgKiBmYWlsLiAgVE9ETzogaGF2ZSBhIGJldHRlciB3YXkgdG8gaGFuZGxlIGZhaWx1cmUgaGVyZQpAQCAtMTUxOCw3ICsxNTI3LDcgQEAKIAkgKiBzbGVlcCBhbmQgc2hvdWxkIGJlIG1vdmVkIG91dHNpZGUgbWlncmF0aW9uIHBhdGggcHJvcGVyLgogCSAqLwogCWNwdXNldF9hdHRhY2hfbm9kZW1hc2tfdG8gPSBjcy0+ZWZmZWN0aXZlX21lbXM7Ci0JY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2hfbGVhZGVyKGxlYWRlciwgdHNldCkgeworCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoX2xlYWRlcihsZWFkZXIsIGNzcywgdHNldCkgewogCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGdldF90YXNrX21tKGxlYWRlcik7CiAKIAkJaWYgKG1tKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NhbGxjaGFpbi5jIGIva2VybmVsL2V2ZW50cy9jYWxsY2hhaW4uYwppbmRleCBkNjU5NDg3Li45YzQxODAwIDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL2NhbGxjaGFpbi5jCisrKyBiL2tlcm5lbC9ldmVudHMvY2FsbGNoYWluLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCiAgKiAgQ29weXJpZ2h0ICCpICAyMDA5IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4gPHBhdWx1c0BhdTEuaWJtLmNvbT4KICAqCiAgKiBGb3IgbGljZW5zaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvY29yZS5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKaW5kZXggMzZiYWJmZC4uZWYyZDZlYSAxMDA2NDQKLS0tIGEva2VybmVsL2V2ZW50cy9jb3JlLmMKKysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCiAgKiAgQ29weXJpZ2h0ICDCqSAgMjAwOSBQYXVsIE1hY2tlcnJhcywgSUJNIENvcnAuIDxwYXVsdXNAYXUxLmlibS5jb20+CiAgKgogICogRm9yIGxpY2Vuc2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCkBAIC00MzUsNyArNDM1LDcgQEAKIAlpZiAoIWlzX2Nncm91cF9ldmVudChldmVudCkpCiAJCXJldHVybjsKIAotCWNncnAgPSBwZXJmX2Nncm91cF9mcm9tX3Rhc2soY3VycmVudCk7CisJY2dycCA9IHBlcmZfY2dyb3VwX2Zyb21fdGFzayhjdXJyZW50LCBldmVudC0+Y3R4KTsKIAkvKgogCSAqIERvIG5vdCB1cGRhdGUgdGltZSB3aGVuIGNncm91cCBpcyBub3QgYWN0aXZlCiAJICovCkBAIC00NTgsNyArNDU4LDcgQEAKIAlpZiAoIXRhc2sgfHwgIWN0eC0+bnJfY2dyb3VwcykKIAkJcmV0dXJuOwogCi0JY2dycCA9IHBlcmZfY2dyb3VwX2Zyb21fdGFzayh0YXNrKTsKKwljZ3JwID0gcGVyZl9jZ3JvdXBfZnJvbV90YXNrKHRhc2ssIGN0eCk7CiAJaW5mbyA9IHRoaXNfY3B1X3B0cihjZ3JwLT5pbmZvKTsKIAlpbmZvLT50aW1lc3RhbXAgPSBjdHgtPnRpbWVzdGFtcDsKIH0KQEAgLTQ4OSw3ICs0ODksNiBAQAogCSAqIHdlIHJlc2NoZWR1bGUgb25seSBpbiB0aGUgcHJlc2VuY2Ugb2YgY2dyb3VwCiAJICogY29uc3RyYWluZWQgZXZlbnRzLgogCSAqLwotCXJjdV9yZWFkX2xvY2soKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBtdSwgJnBtdXMsIGVudHJ5KSB7CiAJCWNwdWN0eCA9IHRoaXNfY3B1X3B0cihwbXUtPnBtdV9jcHVfY29udGV4dCk7CkBAIC01MjIsOCArNTIxLDEwIEBACiAJCQkJICogc2V0IGNncnAgYmVmb3JlIGN0eHN3IGluIHRvIGFsbG93CiAJCQkJICogZXZlbnRfZmlsdGVyX21hdGNoKCkgdG8gbm90IGhhdmUgdG8gcGFzcwogCQkJCSAqIHRhc2sgYXJvdW5kCisJCQkJICogd2UgcGFzcyB0aGUgY3B1Y3R4LT5jdHggdG8gcGVyZl9jZ3JvdXBfZnJvbV90YXNrKCkKKwkJCQkgKiBiZWNhdXNlIGNnb3J1cCBldmVudHMgYXJlIG9ubHkgcGVyLWNwdQogCQkJCSAqLwotCQkJCWNwdWN0eC0+Y2dycCA9IHBlcmZfY2dyb3VwX2Zyb21fdGFzayh0YXNrKTsKKwkJCQljcHVjdHgtPmNncnAgPSBwZXJmX2Nncm91cF9mcm9tX3Rhc2sodGFzaywgJmNwdWN0eC0+Y3R4KTsKIAkJCQljcHVfY3R4X3NjaGVkX2luKGNwdWN0eCwgRVZFTlRfQUxMLCB0YXNrKTsKIAkJCX0KIAkJCXBlcmZfcG11X2VuYWJsZShjcHVjdHgtPmN0eC5wbXUpOwpAQCAtNTMxLDggKzUzMiw2IEBACiAJCX0KIAl9CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKLQogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtNTQyLDE3ICs1NDEsMjAgQEAKIAlzdHJ1Y3QgcGVyZl9jZ3JvdXAgKmNncnAxOwogCXN0cnVjdCBwZXJmX2Nncm91cCAqY2dycDIgPSBOVUxMOwogCisJcmN1X3JlYWRfbG9jaygpOwogCS8qCiAJICogd2UgY29tZSBoZXJlIHdoZW4gd2Uga25vdyBwZXJmX2Nncm91cF9ldmVudHMgPiAwCisJICogd2UgZG8gbm90IG5lZWQgdG8gcGFzcyB0aGUgY3R4IGhlcmUgYmVjYXVzZSB3ZSBrbm93CisJICogd2UgYXJlIGhvbGRpbmcgdGhlIHJjdSBsb2NrCiAJICovCi0JY2dycDEgPSBwZXJmX2Nncm91cF9mcm9tX3Rhc2sodGFzayk7CisJY2dycDEgPSBwZXJmX2Nncm91cF9mcm9tX3Rhc2sodGFzaywgTlVMTCk7CiAKIAkvKgogCSAqIG5leHQgaXMgTlVMTCB3aGVuIGNhbGxlZCBmcm9tIHBlcmZfZXZlbnRfZW5hYmxlX29uX2V4ZWMoKQogCSAqIHRoYXQgd2lsbCBzeXN0ZW1hdGljYWxseSBjYXVzZSBhIGNncm91cF9zd2l0Y2goKQogCSAqLwogCWlmIChuZXh0KQotCQljZ3JwMiA9IHBlcmZfY2dyb3VwX2Zyb21fdGFzayhuZXh0KTsKKwkJY2dycDIgPSBwZXJmX2Nncm91cF9mcm9tX3Rhc2sobmV4dCwgTlVMTCk7CiAKIAkvKgogCSAqIG9ubHkgc2NoZWR1bGUgb3V0IGN1cnJlbnQgY2dyb3VwIGV2ZW50cyBpZiB3ZSBrbm93CkBAIC01NjEsNiArNTYzLDggQEAKIAkgKi8KIAlpZiAoY2dycDEgIT0gY2dycDIpCiAJCXBlcmZfY2dyb3VwX3N3aXRjaCh0YXNrLCBQRVJGX0NHUk9VUF9TV09VVCk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY2dyb3VwX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKQEAgLTU2OSwxMyArNTczLDE2IEBACiAJc3RydWN0IHBlcmZfY2dyb3VwICpjZ3JwMTsKIAlzdHJ1Y3QgcGVyZl9jZ3JvdXAgKmNncnAyID0gTlVMTDsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAkvKgogCSAqIHdlIGNvbWUgaGVyZSB3aGVuIHdlIGtub3cgcGVyZl9jZ3JvdXBfZXZlbnRzID4gMAorCSAqIHdlIGRvIG5vdCBuZWVkIHRvIHBhc3MgdGhlIGN0eCBoZXJlIGJlY2F1c2Ugd2Uga25vdworCSAqIHdlIGFyZSBob2xkaW5nIHRoZSByY3UgbG9jawogCSAqLwotCWNncnAxID0gcGVyZl9jZ3JvdXBfZnJvbV90YXNrKHRhc2spOworCWNncnAxID0gcGVyZl9jZ3JvdXBfZnJvbV90YXNrKHRhc2ssIE5VTEwpOwogCiAJLyogcHJldiBjYW4gbmV2ZXIgYmUgTlVMTCAqLwotCWNncnAyID0gcGVyZl9jZ3JvdXBfZnJvbV90YXNrKHByZXYpOworCWNncnAyID0gcGVyZl9jZ3JvdXBfZnJvbV90YXNrKHByZXYsIE5VTEwpOwogCiAJLyoKIAkgKiBvbmx5IG5lZWQgdG8gc2NoZWR1bGUgaW4gY2dyb3VwIGV2ZW50cyBpZiB3ZSBhcmUgY2hhbmdpbmcKQEAgLTU4NCw2ICs1OTEsOCBAQAogCSAqLwogCWlmIChjZ3JwMSAhPSBjZ3JwMikKIAkJcGVyZl9jZ3JvdXBfc3dpdGNoKHRhc2ssIFBFUkZfQ0dST1VQX1NXSU4pOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHBlcmZfY2dyb3VwX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCkBAIC00MjE2LDcgKzQyMjUsMTQgQEAKIAkJZ290byByZXRyeTsKIAl9CiAKLQlfX3BlcmZfZXZlbnRfcGVyaW9kKCZwZSk7CisJaWYgKGV2ZW50LT5hdHRyLmZyZXEpIHsKKwkJZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXEgPSB2YWx1ZTsKKwl9IGVsc2UgeworCQlldmVudC0+YXR0ci5zYW1wbGVfcGVyaW9kID0gdmFsdWU7CisJCWV2ZW50LT5ody5zYW1wbGVfcGVyaW9kID0gdmFsdWU7CisJfQorCisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgMCk7CiAJcmF3X3NwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtNTY2Nyw2ICs1NjgzLDE3IEBACiB9CiAKIHN0YXRpYyB2b2lkCitwZXJmX2V2ZW50X2F1eF90YXNrX2N0eChwZXJmX2V2ZW50X2F1eF9vdXRwdXRfY2Igb3V0cHV0LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqdGFza19jdHgpCit7CisJcmN1X3JlYWRfbG9jaygpOworCXByZWVtcHRfZGlzYWJsZSgpOworCXBlcmZfZXZlbnRfYXV4X2N0eCh0YXNrX2N0eCwgb3V0cHV0LCBkYXRhKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdm9pZAogcGVyZl9ldmVudF9hdXgocGVyZl9ldmVudF9hdXhfb3V0cHV0X2NiIG91dHB1dCwgdm9pZCAqZGF0YSwKIAkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqdGFza19jdHgpCiB7CkBAIC01Njc1LDE0ICs1NzAyLDIzIEBACiAJc3RydWN0IHBtdSAqcG11OwogCWludCBjdHhuOwogCisJLyoKKwkgKiBJZiB3ZSBoYXZlIHRhc2tfY3R4ICE9IE5VTEwgd2Ugb25seSBub3RpZnkKKwkgKiB0aGUgdGFzayBjb250ZXh0IGl0c2VsZi4gVGhlIHRhc2tfY3R4IGlzIHNldAorCSAqIG9ubHkgZm9yIEVYSVQgZXZlbnRzIGJlZm9yZSByZWxlYXNpbmcgdGFzaworCSAqIGNvbnRleHQuCisJICovCisJaWYgKHRhc2tfY3R4KSB7CisJCXBlcmZfZXZlbnRfYXV4X3Rhc2tfY3R4KG91dHB1dCwgZGF0YSwgdGFza19jdHgpOworCQlyZXR1cm47CisJfQorCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBtdSwgJnBtdXMsIGVudHJ5KSB7CiAJCWNwdWN0eCA9IGdldF9jcHVfcHRyKHBtdS0+cG11X2NwdV9jb250ZXh0KTsKIAkJaWYgKGNwdWN0eC0+dW5pcXVlX3BtdSAhPSBwbXUpCiAJCQlnb3RvIG5leHQ7CiAJCXBlcmZfZXZlbnRfYXV4X2N0eCgmY3B1Y3R4LT5jdHgsIG91dHB1dCwgZGF0YSk7Ci0JCWlmICh0YXNrX2N0eCkKLQkJCWdvdG8gbmV4dDsKIAkJY3R4biA9IHBtdS0+dGFza19jdHhfbnI7CiAJCWlmIChjdHhuIDwgMCkKIAkJCWdvdG8gbmV4dDsKQEAgLTU2OTIsMTIgKzU3MjgsNiBAQAogbmV4dDoKIAkJcHV0X2NwdV9wdHIocG11LT5wbXVfY3B1X2NvbnRleHQpOwogCX0KLQotCWlmICh0YXNrX2N0eCkgewotCQlwcmVlbXB0X2Rpc2FibGUoKTsKLQkJcGVyZl9ldmVudF9hdXhfY3R4KHRhc2tfY3R4LCBvdXRwdXQsIGRhdGEpOwotCQlwcmVlbXB0X2VuYWJsZSgpOwotCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIApAQCAtODc4NywxMCArODgxNyw4IEBACiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4LCAqY2xvbmVfY3R4ID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGxpa2VseSghY2hpbGQtPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSkpIHsKLQkJcGVyZl9ldmVudF90YXNrKGNoaWxkLCBOVUxMLCAwKTsKKwlpZiAobGlrZWx5KCFjaGlsZC0+cGVyZl9ldmVudF9jdHhwW2N0eG5dKSkKIAkJcmV0dXJuOwotCX0KIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkvKgpAQCAtODg3NCw2ICs4OTAyLDE0IEBACiAKIAlmb3JfZWFjaF90YXNrX2NvbnRleHRfbnIoY3R4bikKIAkJcGVyZl9ldmVudF9leGl0X3Rhc2tfY29udGV4dChjaGlsZCwgY3R4bik7CisKKwkvKgorCSAqIFRoZSBwZXJmX2V2ZW50X2V4aXRfdGFza19jb250ZXh0IGNhbGxzIHBlcmZfZXZlbnRfdGFzaworCSAqIHdpdGggY2hpbGQncyB0YXNrX2N0eCwgd2hpY2ggZ2VuZXJhdGVzIEVYSVQgZXZlbnRzIGZvcgorCSAqIGNoaWxkIGNvbnRleHRzIGFuZCBzZXRzIGNoaWxkLT5wZXJmX2V2ZW50X2N0eHBbXSB0byBOVUxMLgorCSAqIEF0IHRoaXMgcG9pbnQgd2UgbmVlZCB0byBzZW5kIEVYSVQgZXZlbnRzIHRvIGNwdSBjb250ZXh0cy4KKwkgKi8KKwlwZXJmX2V2ZW50X3Rhc2soY2hpbGQsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2ZyZWVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LApAQCAtOTQ1MiwxNiArOTQ4OCwxOCBAQAogc3RhdGljIGludCBfX3BlcmZfY2dyb3VwX21vdmUodm9pZCAqaW5mbykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBpbmZvOworCXJjdV9yZWFkX2xvY2soKTsKIAlwZXJmX2Nncm91cF9zd2l0Y2godGFzaywgUEVSRl9DR1JPVVBfU1dPVVQgfCBQRVJGX0NHUk9VUF9TV0lOKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9jZ3JvdXBfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCi0JCQkgICAgICAgc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQorc3RhdGljIHZvaWQgcGVyZl9jZ3JvdXBfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAotCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoKHRhc2ssIHRzZXQpCisJY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgY3NzLCB0c2V0KQogCQl0YXNrX2Z1bmN0aW9uX2NhbGwodGFzaywgX19wZXJmX2Nncm91cF9tb3ZlLCB0YXNrKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9yaW5nX2J1ZmZlci5jIGIva2VybmVsL2V2ZW50cy9yaW5nX2J1ZmZlci5jCmluZGV4IGI1ZDFlYTcuLmFkZmRjMDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvZXZlbnRzL3JpbmdfYnVmZmVyLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCiAgKiAgQ29weXJpZ2h0ICDCqSAgMjAwOSBQYXVsIE1hY2tlcnJhcywgSUJNIENvcnAuIDxwYXVsdXNAYXUxLmlibS5jb20+CiAgKgogICogRm9yIGxpY2Vuc2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCmluZGV4IDRlNWU5NzkuLjdkYWQ4NDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCisrKyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBBdXRob3JzOgogICoJU3Jpa2FyIERyb25hbXJhanUKICAqCUppbSBLZW5pc3RvbgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGY5N2YyYzQuLmZjZTAwMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtMTM2OCw4ICsxMzY4LDcgQEAKIAlwLT5yZWFsX3N0YXJ0X3RpbWUgPSBrdGltZV9nZXRfYm9vdF9ucygpOwogCXAtPmlvX2NvbnRleHQgPSBOVUxMOwogCXAtPmF1ZGl0X2NvbnRleHQgPSBOVUxMOwotCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1RIUkVBRCkKLQkJdGhyZWFkZ3JvdXBfY2hhbmdlX2JlZ2luKGN1cnJlbnQpOworCXRocmVhZGdyb3VwX2NoYW5nZV9iZWdpbihjdXJyZW50KTsKIAljZ3JvdXBfZm9yayhwKTsKICNpZmRlZiBDT05GSUdfTlVNQQogCXAtPm1lbXBvbGljeSA9IG1wb2xfZHVwKHAtPm1lbXBvbGljeSk7CkBAIC0xNjEwLDggKzE2MDksNyBAQAogCiAJcHJvY19mb3JrX2Nvbm5lY3RvcihwKTsKIAljZ3JvdXBfcG9zdF9mb3JrKHAsIGNncnBfc3NfcHJpdik7Ci0JaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfVEhSRUFEKQotCQl0aHJlYWRncm91cF9jaGFuZ2VfZW5kKGN1cnJlbnQpOworCXRocmVhZGdyb3VwX2NoYW5nZV9lbmQoY3VycmVudCk7CiAJcGVyZl9ldmVudF9mb3JrKHApOwogCiAJdHJhY2VfdGFza19uZXd0YXNrKHAsIGNsb25lX2ZsYWdzKTsKQEAgLTE2NTIsOCArMTY1MCw3IEBACiAJbXBvbF9wdXQocC0+bWVtcG9saWN5KTsKIGJhZF9mb3JrX2NsZWFudXBfdGhyZWFkZ3JvdXBfbG9jazoKICNlbmRpZgotCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1RIUkVBRCkKLQkJdGhyZWFkZ3JvdXBfY2hhbmdlX2VuZChjdXJyZW50KTsKKwl0aHJlYWRncm91cF9jaGFuZ2VfZW5kKGN1cnJlbnQpOwogCWRlbGF5YWNjdF90c2tfZnJlZShwKTsKIGJhZF9mb3JrX2NsZWFudXBfY291bnQ6CiAJYXRvbWljX2RlYygmcC0+Y3JlZC0+dXNlci0+cHJvY2Vzc2VzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnFfd29yay5jIGIva2VybmVsL2lycV93b3JrLmMKaW5kZXggY2JmOWZiOC4uYmNmMTA3YyAxMDA2NDQKLS0tIGEva2VybmVsL2lycV93b3JrLmMKKysrIGIva2VybmVsL2lycV93b3JrLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCiAgKgogICogUHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIGVucXVldWVpbmcgYW5kIHJ1bm5pbmcgY2FsbGJhY2tzIGZyb20gaGFyZGlycQogICogY29udGV4dC4gVGhlIGVucXVldWVpbmcgaXMgTk1JLXNhZmUuCmRpZmYgLS1naXQgYS9rZXJuZWwvanVtcF9sYWJlbC5jIGIva2VybmVsL2p1bXBfbGFiZWwuYwppbmRleCBmN2RkMTVkLi4wNTI1NGVlIDEwMDY0NAotLS0gYS9rZXJuZWwvanVtcF9sYWJlbC5jCisrKyBiL2tlcm5lbC9qdW1wX2xhYmVsLmMKQEAgLTIsNyArMiw3IEBACiAgKiBqdW1wIGxhYmVsIHN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFzb24gQmFyb24gPGpiYXJvbkByZWRoYXQuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDExIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIFBldGVyIFppamxzdHJhCiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXBhdGNoL2NvcmUuYyBiL2tlcm5lbC9saXZlcGF0Y2gvY29yZS5jCmluZGV4IDZlNTM0NDEuLmRiNTQ1Y2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9saXZlcGF0Y2gvY29yZS5jCisrKyBiL2tlcm5lbC9saXZlcGF0Y2gvY29yZS5jCkBAIC0yOTQsNiArMjk0LDEyIEBACiAKIAlmb3IgKHJlbG9jID0gb2JqLT5yZWxvY3M7IHJlbG9jLT5uYW1lOyByZWxvYysrKSB7CiAJCWlmICgha2xwX2lzX21vZHVsZShvYmopKSB7CisKKyNpZiBkZWZpbmVkKENPTkZJR19SQU5ET01JWkVfQkFTRSkKKwkJCS8qIElmIEtBU0xSIGhhcyBiZWVuIGVuYWJsZWQsIGFkanVzdCBvbGQgdmFsdWUgYWNjb3JkaW5nbHkgKi8KKwkJCWlmIChrYXNscl9lbmFibGVkKCkpCisJCQkJcmVsb2MtPnZhbCArPSBrYXNscl9vZmZzZXQoKTsKKyNlbmRpZgogCQkJcmV0ID0ga2xwX3ZlcmlmeV92bWxpbnV4X3N5bWJvbChyZWxvYy0+bmFtZSwKIAkJCQkJCQlyZWxvYy0+dmFsKTsKIAkJCWlmIChyZXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKaW5kZXggZGVhZTM5MC4uNjBhY2U1NiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXI6CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICogIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqCiAgKiB0aGlzIGNvZGUgbWFwcyBhbGwgdGhlIGxvY2sgZGVwZW5kZW5jaWVzIGFzIHRoZXkgb2NjdXIgaW4gYSBsaXZlIGtlcm5lbAogICogYW5kIHdpbGwgd2FybiBhYm91dCB0aGUgZm9sbG93aW5nIGNsYXNzZXMgb2YgbG9ja2luZyBidWdzOgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcF9wcm9jLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwX3Byb2MuYwppbmRleCBkODNkNzk4Li5kYmI2MWEzIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwX3Byb2MuYworKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwX3Byb2MuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXI6CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICogIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqCiAgKiBDb2RlIGZvciAvcHJvYy9sb2NrZGVwIGFuZCAvcHJvYy9sb2NrZGVwX3N0YXRzOgogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMgYi9rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jCmluZGV4IGQwOTJhMGMuLjA1YTM3ODUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NraW5nL29zcV9sb2NrLmMKKysrIGIva2VybmVsL2xvY2tpbmcvb3NxX2xvY2suYwpAQCAtOTMsMTAgKzkzLDEyIEBACiAJbm9kZS0+Y3B1ID0gY3VycjsKIAogCS8qCi0JICogQUNRVUlSRSBzZW1hbnRpY3MsIHBhaXJzIHdpdGggY29ycmVzcG9uZGluZyBSRUxFQVNFCi0JICogaW4gdW5sb2NrKCkgdW5jb250ZW5kZWQsIG9yIGZhc3RwYXRoLgorCSAqIFdlIG5lZWQgYm90aCBBQ1FVSVJFIChwYWlycyB3aXRoIGNvcnJlc3BvbmRpbmcgUkVMRUFTRSBpbgorCSAqIHVubG9jaygpIHVuY29udGVuZGVkLCBvciBmYXN0cGF0aCkgYW5kIFJFTEVBU0UgKHRvIHB1Ymxpc2gKKwkgKiB0aGUgbm9kZSBmaWVsZHMgd2UganVzdCBpbml0aWFsaXNlZCkgc2VtYW50aWNzIHdoZW4gdXBkYXRpbmcKKwkgKiB0aGUgbG9jayB0YWlsLgogCSAqLwotCW9sZCA9IGF0b21pY194Y2hnX2FjcXVpcmUoJmxvY2stPnRhaWwsIGN1cnIpOworCW9sZCA9IGF0b21pY194Y2hnKCZsb2NrLT50YWlsLCBjdXJyKTsKIAlpZiAob2xkID09IE9TUV9VTkxPQ0tFRF9WQUwpCiAJCXJldHVybiB0cnVlOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IDQ1NzlkYmIuLjRiMTUwYmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC0xNTIsOCArMTUyLDExIEBACiAJICogV2UgbWF5IGhhdmUgZW5kZWQgdXAgc3RvcHBpbmcgdGhlIENQVSBob2xkaW5nIHRoZSBsb2NrIChpbgogCSAqIHNtcF9zZW5kX3N0b3AoKSkgd2hpbGUgc3RpbGwgaGF2aW5nIHNvbWUgdmFsdWFibGUgZGF0YSBpbiB0aGUgY29uc29sZQogCSAqIGJ1ZmZlci4gIFRyeSB0byBhY3F1aXJlIHRoZSBsb2NrIHRoZW4gcmVsZWFzZSBpdCByZWdhcmRsZXNzIG9mIHRoZQotCSAqIHJlc3VsdC4gIFRoZSByZWxlYXNlIHdpbGwgYWxzbyBwcmludCB0aGUgYnVmZmVycyBvdXQuCisJICogcmVzdWx0LiAgVGhlIHJlbGVhc2Ugd2lsbCBhbHNvIHByaW50IHRoZSBidWZmZXJzIG91dC4gIExvY2tzIGRlYnVnCisJICogc2hvdWxkIGJlIGRpc2FibGVkIHRvIGF2b2lkIHJlcG9ydGluZyBiYWQgdW5sb2NrIGJhbGFuY2Ugd2hlbgorCSAqIHBhbmljKCkgaXMgbm90IGJlaW5nIGNhbGxsZWQgZnJvbSBPT1BTLgogCSAqLworCWRlYnVnX2xvY2tzX29mZigpOwogCWNvbnNvbGVfdHJ5bG9jaygpOwogCWNvbnNvbGVfdW5sb2NrKCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCBjYTM2ODc5Li43OGIzZDlmIDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC00NjcsNyArNDY3LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaWYgKHR5cGUgIT0gUElEVFlQRV9QSUQpCiAJCXRhc2sgPSB0YXNrLT5ncm91cF9sZWFkZXI7Ci0JcGlkID0gZ2V0X3BpZCh0YXNrLT5waWRzW3R5cGVdLnBpZCk7CisJcGlkID0gZ2V0X3BpZChyY3VfZGVyZWZlcmVuY2UodGFzay0+cGlkc1t0eXBlXS5waWQpKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcGlkOwogfQpAQCAtNTI4LDcgKzUyOCw3IEBACiAJaWYgKGxpa2VseShwaWRfYWxpdmUodGFzaykpKSB7CiAJCWlmICh0eXBlICE9IFBJRFRZUEVfUElEKQogCQkJdGFzayA9IHRhc2stPmdyb3VwX2xlYWRlcjsKLQkJbnIgPSBwaWRfbnJfbnModGFzay0+cGlkc1t0eXBlXS5waWQsIG5zKTsKKwkJbnIgPSBwaWRfbnJfbnMocmN1X2RlcmVmZXJlbmNlKHRhc2stPnBpZHNbdHlwZV0ucGlkKSwgbnMpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2Nsb2NrLmMgYi9rZXJuZWwvc2NoZWQvY2xvY2suYwppbmRleCBjMGEyMDUxLi5jYWY0MDQxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY2xvY2suYworKysgYi9rZXJuZWwvc2NoZWQvY2xvY2suYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBzY2hlZF9jbG9jayBmb3IgdW5zdGFibGUgY3B1IGNsb2NrcwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCiAgKgogICogIFVwZGF0ZXMgYW5kIGVuaGFuY2VtZW50czoKICAqICAgIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NvcmUuYyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKaW5kZXggNGQ1NjhhYzkuLjczMmU5OTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmMKKysrIGIva2VybmVsL3NjaGVkL2NvcmUuYwpAQCAtMTk0NywxMyArMTk0NywzOCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qCisJICogRW5zdXJlIHdlIGxvYWQgcC0+b25fY3B1IF9hZnRlcl8gcC0+b25fcnEsIG90aGVyd2lzZSBpdCB3b3VsZCBiZQorCSAqIHBvc3NpYmxlIHRvLCBmYWxzZWx5LCBvYnNlcnZlIHAtPm9uX2NwdSA9PSAwLgorCSAqCisJICogT25lIG11c3QgYmUgcnVubmluZyAoLT5vbl9jcHUgPT0gMSkgaW4gb3JkZXIgdG8gcmVtb3ZlIG9uZXNlbGYKKwkgKiBmcm9tIHRoZSBydW5xdWV1ZS4KKwkgKgorCSAqICBbU10gLT5vbl9jcHUgPSAxOwlbTF0gLT5vbl9ycQorCSAqICAgICAgVU5MT0NLIHJxLT5sb2NrCisJICoJCQlSTUIKKwkgKiAgICAgIExPQ0sgICBycS0+bG9jaworCSAqICBbU10gLT5vbl9ycSA9IDA7ICAgIFtMXSAtPm9uX2NwdQorCSAqCisJICogUGFpcnMgd2l0aCB0aGUgZnVsbCBiYXJyaWVyIGltcGxpZWQgaW4gdGhlIFVOTE9DSytMT0NLIG9uIHJxLT5sb2NrCisJICogZnJvbSB0aGUgY29uc2VjdXRpdmUgY2FsbHMgdG8gc2NoZWR1bGUoKTsgdGhlIGZpcnN0IHN3aXRjaGluZyB0byBvdXIKKwkgKiB0YXNrLCB0aGUgc2Vjb25kIHB1dHRpbmcgaXQgdG8gc2xlZXAuCisJICovCisJc21wX3JtYigpOworCisJLyoKIAkgKiBJZiB0aGUgb3duaW5nIChyZW1vdGUpIGNwdSBpcyBzdGlsbCBpbiB0aGUgbWlkZGxlIG9mIHNjaGVkdWxlKCkgd2l0aAogCSAqIHRoaXMgdGFzayBhcyBwcmV2LCB3YWl0IHVudGlsIGl0cyBkb25lIHJlZmVyZW5jaW5nIHRoZSB0YXNrLgogCSAqLwogCXdoaWxlIChwLT5vbl9jcHUpCiAJCWNwdV9yZWxheCgpOwogCS8qCi0JICogUGFpcnMgd2l0aCB0aGUgc21wX3dtYigpIGluIGZpbmlzaF9sb2NrX3N3aXRjaCgpLgorCSAqIENvbWJpbmVkIHdpdGggdGhlIGNvbnRyb2wgZGVwZW5kZW5jeSBhYm92ZSwgd2UgaGF2ZSBhbiBlZmZlY3RpdmUKKwkgKiBzbXBfbG9hZF9hY3F1aXJlKCkgd2l0aG91dCB0aGUgbmVlZCBmb3IgZnVsbCBiYXJyaWVycy4KKwkgKgorCSAqIFBhaXJzIHdpdGggdGhlIHNtcF9zdG9yZV9yZWxlYXNlKCkgaW4gZmluaXNoX2xvY2tfc3dpdGNoKCkuCisJICoKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCB0YXNrcyBnZXR0aW5nIHdva2VuIHdpbGwgYmUgZnVsbHkgb3JkZXJlZCBhZ2FpbnN0CisJICogdGhlaXIgcHJldmlvdXMgc3RhdGUgYW5kIHByZXNlcnZlIFByb2dyYW0gT3JkZXIuCiAJICovCiAJc21wX3JtYigpOwogCkBAIC0yMDM5LDcgKzIwNjQsNiBAQAogICovCiBpbnQgd2FrZV91cF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlXQVJOX09OKHRhc2tfaXNfc3RvcHBlZF9vcl90cmFjZWQocCkpOwogCXJldHVybiB0cnlfdG9fd2FrZV91cChwLCBUQVNLX05PUk1BTCwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MKHdha2VfdXBfcHJvY2Vzcyk7CkBAIC01ODQ3LDEzICs1ODcxLDEzIEBACiB7CiAJbWVtc2V0KHJkLCAwLCBzaXplb2YoKnJkKSk7CiAKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZyZC0+c3BhbiwgR0ZQX0tFUk5FTCkpCisJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnJkLT5zcGFuLCBHRlBfS0VSTkVMKSkKIAkJZ290byBvdXQ7Ci0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmcmQtPm9ubGluZSwgR0ZQX0tFUk5FTCkpCisJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnJkLT5vbmxpbmUsIEdGUF9LRVJORUwpKQogCQlnb3RvIGZyZWVfc3BhbjsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZyZC0+ZGxvX21hc2ssIEdGUF9LRVJORUwpKQorCWlmICghemFsbG9jX2NwdW1hc2tfdmFyKCZyZC0+ZGxvX21hc2ssIEdGUF9LRVJORUwpKQogCQlnb3RvIGZyZWVfb25saW5lOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJnJkLT5ydG9fbWFzaywgR0ZQX0tFUk5FTCkpCisJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnJkLT5ydG9fbWFzaywgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gZnJlZV9kbG9fbWFzazsKIAogCWluaXRfZGxfYncoJnJkLT5kbF9idyk7CkBAIC04MjE3LDEyICs4MjQxLDEyIEBACiAJc2NoZWRfbW92ZV90YXNrKHRhc2spOwogfQogCi1zdGF0aWMgaW50IGNwdV9jZ3JvdXBfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAotCQkJCSBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCitzdGF0aWMgaW50IGNwdV9jZ3JvdXBfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CiAKLQljZ3JvdXBfdGFza3NldF9mb3JfZWFjaCh0YXNrLCB0c2V0KSB7CisJY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgY3NzLCB0c2V0KSB7CiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECiAJCWlmICghc2NoZWRfcnRfY2FuX2F0dGFjaChjc3NfdGcoY3NzKSwgdGFzaykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgyMzUsMTIgKzgyNTksMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY3B1X2Nncm91cF9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywKLQkJCSAgICAgIHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKK3N0YXRpYyB2b2lkIGNwdV9jZ3JvdXBfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAotCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoKHRhc2ssIHRzZXQpCisJY2dyb3VwX3Rhc2tzZXRfZm9yX2VhY2godGFzaywgY3NzLCB0c2V0KQogCQlzY2hlZF9tb3ZlX3Rhc2sodGFzayk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHV0aW1lLmMgYi9rZXJuZWwvc2NoZWQvY3B1dGltZS5jCmluZGV4IDI2YTU0NDYuLjA1ZGU4MGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9jcHV0aW1lLmMKKysrIGIva2VybmVsL3NjaGVkL2NwdXRpbWUuYwpAQCAtNzg4LDYgKzc4OCw5IEBACiAJdW5zaWduZWQgaW50IHNlcTsKIAljcHV0aW1lX3QgZ3RpbWU7CiAKKwlpZiAoIWNvbnRleHRfdHJhY2tpbmdfaXNfZW5hYmxlZCgpKQorCQlyZXR1cm4gdC0+Z3RpbWU7CisKIAlkbyB7CiAJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnQtPnZ0aW1lX3NlcWxvY2spOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCBmMDRmZGE4Li45MGUyNmIxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgogICoKICAqICBBZGFwdGl2ZSBzY2hlZHVsaW5nIGdyYW51bGFyaXR5LCBtYXRoIGVuaGFuY2VtZW50cyBieSBQZXRlciBaaWpsc3RyYQotICogIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGF0ZW5jeXRvcC5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3J0LmMgYi9rZXJuZWwvc2NoZWQvcnQuYwppbmRleCBlM2NjMTYzLi44ZWM4NmFiIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvcnQuYworKysgYi9rZXJuZWwvc2NoZWQvcnQuYwpAQCAtNjQsNyArNjQsNyBAQAogCXJhd19zcGluX3VubG9jaygmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKIH0KIAotI2lmZGVmIENPTkZJR19TTVAKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoSEFWRV9SVF9QVVNIX0lQSSkKIHN0YXRpYyB2b2lkIHB1c2hfaXJxX3dvcmtfZnVuYyhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmgKaW5kZXggZWZkM2JmYy4uYjI0Mjc3NSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmgKKysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmgKQEAgLTEwNzMsNiArMTA3Myw5IEBACiAJICogV2UgbXVzdCBlbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbiB1bnRpbCB0aGUgc3dpdGNoIGlzIGNvbXBsZXRlbHkKIAkgKiBmaW5pc2hlZC4KIAkgKgorCSAqIEluIHBhcnRpY3VsYXIsIHRoZSBsb2FkIG9mIHByZXYtPnN0YXRlIGluIGZpbmlzaF90YXNrX3N3aXRjaCgpIG11c3QKKwkgKiBoYXBwZW4gYmVmb3JlIHRoaXMuCisJICoKIAkgKiBQYWlycyB3aXRoIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYW5kIHJtYiBpbiB0cnlfdG9fd2FrZV91cCgpLgogCSAqLwogCXNtcF9zdG9yZV9yZWxlYXNlKCZwcmV2LT5vbl9jcHUsIDApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL3dhaXQuYyBiL2tlcm5lbC9zY2hlZC93YWl0LmMKaW5kZXggMDUyZTAyNi4uZjE1ZDZiNiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3dhaXQuYworKysgYi9rZXJuZWwvc2NoZWQvd2FpdC5jCkBAIC0zOTIsNyArMzkyLDcgQEAKIAlkbyB7CiAJCXByZXBhcmVfdG9fd2FpdCh3cSwgJnEtPndhaXQsIG1vZGUpOwogCQlpZiAodGVzdF9iaXQocS0+a2V5LmJpdF9uciwgcS0+a2V5LmZsYWdzKSkKLQkJCXJldCA9ICgqYWN0aW9uKSgmcS0+a2V5KTsKKwkJCXJldCA9ICgqYWN0aW9uKSgmcS0+a2V5LCBtb2RlKTsKIAl9IHdoaWxlICh0ZXN0X2JpdChxLT5rZXkuYml0X25yLCBxLT5rZXkuZmxhZ3MpICYmICFyZXQpOwogCWZpbmlzaF93YWl0KHdxLCAmcS0+d2FpdCk7CiAJcmV0dXJuIHJldDsKQEAgLTQzMSw3ICs0MzEsNyBAQAogCQlwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKHdxLCAmcS0+d2FpdCwgbW9kZSk7CiAJCWlmICghdGVzdF9iaXQocS0+a2V5LmJpdF9uciwgcS0+a2V5LmZsYWdzKSkKIAkJCWNvbnRpbnVlOwotCQlyZXQgPSBhY3Rpb24oJnEtPmtleSk7CisJCXJldCA9IGFjdGlvbigmcS0+a2V5LCBtb2RlKTsKIAkJaWYgKCFyZXQpCiAJCQljb250aW51ZTsKIAkJYWJvcnRfZXhjbHVzaXZlX3dhaXQod3EsICZxLT53YWl0LCBtb2RlLCAmcS0+a2V5KTsKQEAgLTU4MSw0NCArNTgxLDQ0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHdha2VfdXBfYXRvbWljX3QpOwogCi1fX3NjaGVkIGludCBiaXRfd2FpdChzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICp3b3JkKQorX19zY2hlZCBpbnQgYml0X3dhaXQoc3RydWN0IHdhaXRfYml0X2tleSAqd29yZCwgaW50IG1vZGUpCiB7Ci0JaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKGN1cnJlbnQtPnN0YXRlLCBjdXJyZW50KSkKLQkJcmV0dXJuIDE7CiAJc2NoZWR1bGUoKTsKKwlpZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUobW9kZSwgY3VycmVudCkpCisJCXJldHVybiAtRUlOVFI7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGJpdF93YWl0KTsKIAotX19zY2hlZCBpbnQgYml0X3dhaXRfaW8oc3RydWN0IHdhaXRfYml0X2tleSAqd29yZCkKK19fc2NoZWQgaW50IGJpdF93YWl0X2lvKHN0cnVjdCB3YWl0X2JpdF9rZXkgKndvcmQsIGludCBtb2RlKQogewotCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShjdXJyZW50LT5zdGF0ZSwgY3VycmVudCkpCi0JCXJldHVybiAxOwogCWlvX3NjaGVkdWxlKCk7CisJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKG1vZGUsIGN1cnJlbnQpKQorCQlyZXR1cm4gLUVJTlRSOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChiaXRfd2FpdF9pbyk7CiAKLV9fc2NoZWQgaW50IGJpdF93YWl0X3RpbWVvdXQoc3RydWN0IHdhaXRfYml0X2tleSAqd29yZCkKK19fc2NoZWQgaW50IGJpdF93YWl0X3RpbWVvdXQoc3RydWN0IHdhaXRfYml0X2tleSAqd29yZCwgaW50IG1vZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBSRUFEX09OQ0UoamlmZmllcyk7Ci0JaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKGN1cnJlbnQtPnN0YXRlLCBjdXJyZW50KSkKLQkJcmV0dXJuIDE7CiAJaWYgKHRpbWVfYWZ0ZXJfZXEobm93LCB3b3JkLT50aW1lb3V0KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAJc2NoZWR1bGVfdGltZW91dCh3b3JkLT50aW1lb3V0IC0gbm93KTsKKwlpZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUobW9kZSwgY3VycmVudCkpCisJCXJldHVybiAtRUlOVFI7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChiaXRfd2FpdF90aW1lb3V0KTsKIAotX19zY2hlZCBpbnQgYml0X3dhaXRfaW9fdGltZW91dChzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICp3b3JkKQorX19zY2hlZCBpbnQgYml0X3dhaXRfaW9fdGltZW91dChzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICp3b3JkLCBpbnQgbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IFJFQURfT05DRShqaWZmaWVzKTsKLQlpZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUoY3VycmVudC0+c3RhdGUsIGN1cnJlbnQpKQotCQlyZXR1cm4gMTsKIAlpZiAodGltZV9hZnRlcl9lcShub3csIHdvcmQtPnRpbWVvdXQpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAlpb19zY2hlZHVsZV90aW1lb3V0KHdvcmQtPnRpbWVvdXQgLSBub3cpOworCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShtb2RlLCBjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJpdF93YWl0X2lvX3RpbWVvdXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IGMwYjAxZmUuLmYzZjFmN2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTM1MDMsNyArMzUwMyw3IEBACiAKICNlbmRpZgogCi1pbnQgc2lnc3VzcGVuZChzaWdzZXRfdCAqc2V0KQorc3RhdGljIGludCBzaWdzdXNwZW5kKHNpZ3NldF90ICpzZXQpCiB7CiAJY3VycmVudC0+c2F2ZWRfc2lnbWFzayA9IGN1cnJlbnQtPmJsb2NrZWQ7CiAJc2V0X2N1cnJlbnRfYmxvY2tlZChzZXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N0b3BfbWFjaGluZS5jIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCmluZGV4IDg2N2JjMjAuLmEzYmJhZWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYworKysgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKQEAgLTUzMSw3ICs1MzEsNyBAQAogfQogZWFybHlfaW5pdGNhbGwoY3B1X3N0b3BfaW5pdCk7CiAKLSNpZmRlZiBDT05GSUdfU1RPUF9NQUNISU5FCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkKIAogc3RhdGljIGludCBfX3N0b3BfbWFjaGluZShjcHVfc3RvcF9mbl90IGZuLCB2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cykKIHsKQEAgLTYzMSw0ICs2MzEsNCBAQAogCXJldHVybiByZXQgPzogZG9uZS5yZXQ7CiB9CiAKLSNlbmRpZgkvKiBDT05GSUdfU1RPUF9NQUNISU5FICovCisjZW5kaWYJLyogQ09ORklHX1NNUCB8fCBDT05GSUdfSE9UUExVR19DUFUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKaW5kZXggNzVmMWQwNS4uOWM2MDQ1YSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTE4ODcsMTIgKzE4ODcsNiBAQAogCXJldHVybiAoYWRkciAmIH5QQUdFX01BU0spIC0gQlVGX1BBR0VfSERSX1NJWkU7CiB9CiAKLXN0YXRpYyB2b2lkIHJiX3Jlc2V0X3JlYWRlcl9wYWdlKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQotewotCWNwdV9idWZmZXItPnJlYWRfc3RhbXAgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cGFnZS0+dGltZV9zdGFtcDsKLQljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cmVhZCA9IDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHJiX2luY19pdGVyKHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyID0gaXRlci0+Y3B1X2J1ZmZlcjsKQEAgLTI4MDMsOCArMjc5NywxMSBAQAogCiAJZXZlbnQgPSBfX3JiX3Jlc2VydmVfbmV4dChjcHVfYnVmZmVyLCAmaW5mbyk7CiAKLQlpZiAodW5saWtlbHkoUFRSX0VSUihldmVudCkgPT0gLUVBR0FJTikpCisJaWYgKHVubGlrZWx5KFBUUl9FUlIoZXZlbnQpID09IC1FQUdBSU4pKSB7CisJCWlmIChpbmZvLmFkZF90aW1lc3RhbXApCisJCQlpbmZvLmxlbmd0aCAtPSBSQl9MRU5fVElNRV9FWFRFTkQ7CiAJCWdvdG8gYWdhaW47CisJfQogCiAJaWYgKCFldmVudCkKIAkJZ290byBvdXRfZmFpbDsKQEAgLTM2MjYsNyArMzYyMyw3IEBACiAKIAkvKiBGaW5hbGx5IHVwZGF0ZSB0aGUgcmVhZGVyIHBhZ2UgdG8gdGhlIG5ldyBoZWFkICovCiAJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UgPSByZWFkZXI7Ci0JcmJfcmVzZXRfcmVhZGVyX3BhZ2UoY3B1X2J1ZmZlcik7CisJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnJlYWQgPSAwOwogCiAJaWYgKG92ZXJ3cml0ZSAhPSBjcHVfYnVmZmVyLT5sYXN0X292ZXJydW4pIHsKIAkJY3B1X2J1ZmZlci0+bG9zdF9ldmVudHMgPSBvdmVyd3JpdGUgLSBjcHVfYnVmZmVyLT5sYXN0X292ZXJydW47CkBAIC0zNjM2LDYgKzM2MzMsMTAgQEAKIAlnb3RvIGFnYWluOwogCiAgb3V0OgorCS8qIFVwZGF0ZSB0aGUgcmVhZF9zdGFtcCBvbiB0aGUgZmlyc3QgZXZlbnQgKi8KKwlpZiAocmVhZGVyICYmIHJlYWRlci0+cmVhZCA9PSAwKQorCQljcHVfYnVmZmVyLT5yZWFkX3N0YW1wID0gcmVhZGVyLT5wYWdlLT50aW1lX3N0YW1wOworCiAJYXJjaF9zcGluX3VubG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcGVyZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3BlcmYuYwppbmRleCBhYmZjOTAzLi5jYzlmN2E5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcGVyZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wZXJmLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogdHJhY2UgZXZlbnQgYmFzZWQgcGVyZiBldmVudCBwcm9maWxpbmcvdHJhY2luZwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0IEluYywgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCBJbmMsIFBldGVyIFppamxzdHJhCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+CiAgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IDZiYmM1ZjYuLjRmNmVmNjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTU4Miw2ICs1ODIsMTIgQEAKIAl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cChldmVudF9maWx0ZXJfcGlkX3NjaGVkX3dha2V1cF9wcm9iZV9wcmUsIHRyKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cChldmVudF9maWx0ZXJfcGlkX3NjaGVkX3dha2V1cF9wcm9iZV9wb3N0LCB0cik7CiAKKwl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3dha2V1cF9uZXcoZXZlbnRfZmlsdGVyX3BpZF9zY2hlZF93YWtldXBfcHJvYmVfcHJlLCB0cik7CisJdW5yZWdpc3Rlcl90cmFjZV9zY2hlZF93YWtldXBfbmV3KGV2ZW50X2ZpbHRlcl9waWRfc2NoZWRfd2FrZXVwX3Byb2JlX3Bvc3QsIHRyKTsKKworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FraW5nKGV2ZW50X2ZpbHRlcl9waWRfc2NoZWRfd2FrZXVwX3Byb2JlX3ByZSwgdHIpOworCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FraW5nKGV2ZW50X2ZpbHRlcl9waWRfc2NoZWRfd2FrZXVwX3Byb2JlX3Bvc3QsIHRyKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmlsZSwgJnRyLT5ldmVudHMsIGxpc3QpIHsKIAkJY2xlYXJfYml0KEVWRU5UX0ZJTEVfRkxfUElEX0ZJTFRFUl9CSVQsICZmaWxlLT5mbGFncyk7CiAJfQpAQCAtMTcyOSw2ICsxNzM1LDE2IEBACiAJCQkJCQkgdHIsIElOVF9NQVgpOwogCQlyZWdpc3Rlcl90cmFjZV9wcmlvX3NjaGVkX3dha2V1cChldmVudF9maWx0ZXJfcGlkX3NjaGVkX3dha2V1cF9wcm9iZV9wb3N0LAogCQkJCQkJIHRyLCAwKTsKKworCQlyZWdpc3Rlcl90cmFjZV9wcmlvX3NjaGVkX3dha2V1cF9uZXcoZXZlbnRfZmlsdGVyX3BpZF9zY2hlZF93YWtldXBfcHJvYmVfcHJlLAorCQkJCQkJICAgICB0ciwgSU5UX01BWCk7CisJCXJlZ2lzdGVyX3RyYWNlX3ByaW9fc2NoZWRfd2FrZXVwX25ldyhldmVudF9maWx0ZXJfcGlkX3NjaGVkX3dha2V1cF9wcm9iZV9wb3N0LAorCQkJCQkJICAgICB0ciwgMCk7CisKKwkJcmVnaXN0ZXJfdHJhY2VfcHJpb19zY2hlZF93YWtpbmcoZXZlbnRfZmlsdGVyX3BpZF9zY2hlZF93YWtldXBfcHJvYmVfcHJlLAorCQkJCQkJIHRyLCBJTlRfTUFYKTsKKwkJcmVnaXN0ZXJfdHJhY2VfcHJpb19zY2hlZF93YWtpbmcoZXZlbnRfZmlsdGVyX3BpZF9zY2hlZF93YWtldXBfcHJvYmVfcG9zdCwKKwkJCQkJCSB0ciwgMCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2xpYi9idHJlZS5jIGIvbGliL2J0cmVlLmMKaW5kZXggNDI2NDg3MS4uZjkzYTk0NSAxMDA2NDQKLS0tIGEvbGliL2J0cmVlLmMKKysrIGIvbGliL2J0cmVlLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KICAqIEJpdHMgYW5kIHBpZWNlcyBzdG9sZW4gZnJvbSBQZXRlciBaaWpsc3RyYSdzIGNvZGUsIHdoaWNoIGlzCi0gKiBDb3B5cmlnaHQgMjAwNywgUmVkIEhhdCBJbmMuIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IDIwMDcsIFJlZCBIYXQgSW5jLiBQZXRlciBaaWpsc3RyYQogICogR1BMdjIKICAqCiAgKiBzZWUgaHR0cDovL3Byb2dyYW1taW5nLmtpY2tzLWFzcy5uZXQva2VybmVsLXBhdGNoZXMvdm1hX2xvb2t1cC9idHJlZS5wYXRjaApkaWZmIC0tZ2l0IGEvbGliL2RtYS1kZWJ1Zy5jIGIvbGliL2RtYS1kZWJ1Zy5jCmluZGV4IDg4NTVmMDEuLmQzNGJkMjQgMTAwNjQ0Ci0tLSBhL2xpYi9kbWEtZGVidWcuYworKysgYi9saWIvZG1hLWRlYnVnLmMKQEAgLTE0NjQsNyArMTQ2NCw3IEBACiAJZW50cnktPnR5cGUgICAgICA9IGRtYV9kZWJ1Z19jb2hlcmVudDsKIAllbnRyeS0+ZGV2ICAgICAgID0gZGV2OwogCWVudHJ5LT5wZm4JID0gcGFnZV90b19wZm4odmlydF90b19wYWdlKHZpcnQpKTsKLQllbnRyeS0+b2Zmc2V0CSA9IChzaXplX3QpIHZpcnQgJiBQQUdFX01BU0s7CisJZW50cnktPm9mZnNldAkgPSAoc2l6ZV90KSB2aXJ0ICYgflBBR0VfTUFTSzsKIAllbnRyeS0+c2l6ZSAgICAgID0gc2l6ZTsKIAllbnRyeS0+ZGV2X2FkZHIgID0gZG1hX2FkZHI7CiAJZW50cnktPmRpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOwpAQCAtMTQ4MCw3ICsxNDgwLDcgQEAKIAkJLnR5cGUgICAgICAgICAgID0gZG1hX2RlYnVnX2NvaGVyZW50LAogCQkuZGV2ICAgICAgICAgICAgPSBkZXYsCiAJCS5wZm4JCT0gcGFnZV90b19wZm4odmlydF90b19wYWdlKHZpcnQpKSwKLQkJLm9mZnNldAkJPSAoc2l6ZV90KSB2aXJ0ICYgUEFHRV9NQVNLLAorCQkub2Zmc2V0CQk9IChzaXplX3QpIHZpcnQgJiB+UEFHRV9NQVNLLAogCQkuZGV2X2FkZHIgICAgICAgPSBhZGRyLAogCQkuc2l6ZSAgICAgICAgICAgPSBzaXplLAogCQkuZGlyZWN0aW9uICAgICAgPSBETUFfQklESVJFQ1RJT05BTCwKZGlmZiAtLWdpdCBhL2xpYi9wcm9wb3J0aW9ucy5jIGIvbGliL3Byb3BvcnRpb25zLmMKaW5kZXggNmY3MjQyOS4uZWZhNTRmMjUgMTAwNjQ0Ci0tLSBhL2xpYi9wcm9wb3J0aW9ucy5jCisrKyBiL2xpYi9wcm9wb3J0aW9ucy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEZsb2F0aW5nIHByb3BvcnRpb25zCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqCmRpZmYgLS1naXQgYS9saWIvcmhhc2h0YWJsZS5jIGIvbGliL3JoYXNodGFibGUuYwppbmRleCBhNTRmZjg5Li41MTI4MmY1IDEwMDY0NAotLS0gYS9saWIvcmhhc2h0YWJsZS5jCisrKyBiL2xpYi9yaGFzaHRhYmxlLmMKQEAgLTM4OSwzMyArMzg5LDMxIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgcmhhc2h0YWJsZV9pbnNlcnRfcmVoYXNoKHN0cnVjdCByaGFzaHRhYmxlICpodCkKK2ludCByaGFzaHRhYmxlX2luc2VydF9yZWhhc2goc3RydWN0IHJoYXNodGFibGUgKmh0LAorCQkJICAgICBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwpCiB7CiAJc3RydWN0IGJ1Y2tldF90YWJsZSAqb2xkX3RibDsKIAlzdHJ1Y3QgYnVja2V0X3RhYmxlICpuZXdfdGJsOwotCXN0cnVjdCBidWNrZXRfdGFibGUgKnRibDsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAlpbnQgZXJyOwogCiAJb2xkX3RibCA9IHJodF9kZXJlZmVyZW5jZV9yY3UoaHQtPnRibCwgaHQpOwotCXRibCA9IHJoYXNodGFibGVfbGFzdF90YWJsZShodCwgb2xkX3RibCk7CiAKIAlzaXplID0gdGJsLT5zaXplOwogCisJZXJyID0gLUVCVVNZOworCiAJaWYgKHJodF9ncm93X2Fib3ZlXzc1KGh0LCB0YmwpKQogCQlzaXplICo9IDI7CiAJLyogRG8gbm90IHNjaGVkdWxlIG1vcmUgdGhhbiBvbmUgcmVoYXNoICovCiAJZWxzZSBpZiAob2xkX3RibCAhPSB0YmwpCi0JCXJldHVybiAtRUJVU1k7CisJCWdvdG8gZmFpbDsKKworCWVyciA9IC1FTk9NRU07CiAKIAluZXdfdGJsID0gYnVja2V0X3RhYmxlX2FsbG9jKGh0LCBzaXplLCBHRlBfQVRPTUlDKTsKLQlpZiAobmV3X3RibCA9PSBOVUxMKSB7Ci0JCS8qIFNjaGVkdWxlIGFzeW5jIHJlc2l6ZS9yZWhhc2ggdG8gdHJ5IGFsbG9jYXRpb24KLQkJICogbm9uLWF0b21pYyBjb250ZXh0LgotCQkgKi8KLQkJc2NoZWR1bGVfd29yaygmaHQtPnJ1bl93b3JrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlmIChuZXdfdGJsID09IE5VTEwpCisJCWdvdG8gZmFpbDsKIAogCWVyciA9IHJoYXNodGFibGVfcmVoYXNoX2F0dGFjaChodCwgdGJsLCBuZXdfdGJsKTsKIAlpZiAoZXJyKSB7CkBAIC00MjYsMTIgKzQyNCwyNCBAQAogCQlzY2hlZHVsZV93b3JrKCZodC0+cnVuX3dvcmspOwogCiAJcmV0dXJuIGVycjsKKworZmFpbDoKKwkvKiBEbyBub3QgZmFpbCB0aGUgaW5zZXJ0IGlmIHNvbWVvbmUgZWxzZSBkaWQgYSByZWhhc2guICovCisJaWYgKGxpa2VseShyY3VfZGVyZWZlcmVuY2VfcmF3KHRibC0+ZnV0dXJlX3RibCkpKQorCQlyZXR1cm4gMDsKKworCS8qIFNjaGVkdWxlIGFzeW5jIHJlaGFzaCB0byByZXRyeSBhbGxvY2F0aW9uIGluIHByb2Nlc3MgY29udGV4dC4gKi8KKwlpZiAoZXJyID09IC1FTk9NRU0pCisJCXNjaGVkdWxlX3dvcmsoJmh0LT5ydW5fd29yayk7CisKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbnNlcnRfcmVoYXNoKTsKIAotaW50IHJoYXNodGFibGVfaW5zZXJ0X3Nsb3coc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksCi0JCQkgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqLAotCQkJICAgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsKQorc3RydWN0IGJ1Y2tldF90YWJsZSAqcmhhc2h0YWJsZV9pbnNlcnRfc2xvdyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCisJCQkJCSAgICBjb25zdCB2b2lkICprZXksCisJCQkJCSAgICBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqLAorCQkJCQkgICAgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsKQogewogCXN0cnVjdCByaGFzaF9oZWFkICpoZWFkOwogCXVuc2lnbmVkIGludCBoYXNoOwpAQCAtNDY3LDcgKzQ3NywxMiBAQAogZXhpdDoKIAlzcGluX3VubG9jayhyaHRfYnVja2V0X2xvY2sodGJsLCBoYXNoKSk7CiAKLQlyZXR1cm4gZXJyOworCWlmIChlcnIgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJZWxzZSBpZiAoZXJyID09IC1FQUdBSU4pCisJCXJldHVybiB0Ymw7CisJZWxzZQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbnNlcnRfc2xvdyk7CiAKQEAgLTUwMywxMCArNTE4LDExIEBACiAJaWYgKCFpdGVyLT53YWxrZXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbXV0ZXhfbG9jaygmaHQtPm11dGV4KTsKLQlpdGVyLT53YWxrZXItPnRibCA9IHJodF9kZXJlZmVyZW5jZShodC0+dGJsLCBodCk7CisJc3Bpbl9sb2NrKCZodC0+bG9jayk7CisJaXRlci0+d2Fsa2VyLT50YmwgPQorCQlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGh0LT50YmwsIGxvY2tkZXBfaXNfaGVsZCgmaHQtPmxvY2spKTsKIAlsaXN0X2FkZCgmaXRlci0+d2Fsa2VyLT5saXN0LCAmaXRlci0+d2Fsa2VyLT50YmwtPndhbGtlcnMpOwotCW11dGV4X3VubG9jaygmaHQtPm11dGV4KTsKKwlzcGluX3VubG9jaygmaHQtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjAsMTAgKzUzNiwxMCBAQAogICovCiB2b2lkIHJoYXNodGFibGVfd2Fsa19leGl0KHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpCiB7Ci0JbXV0ZXhfbG9jaygmaXRlci0+aHQtPm11dGV4KTsKKwlzcGluX2xvY2soJml0ZXItPmh0LT5sb2NrKTsKIAlpZiAoaXRlci0+d2Fsa2VyLT50YmwpCiAJCWxpc3RfZGVsKCZpdGVyLT53YWxrZXItPmxpc3QpOwotCW11dGV4X3VubG9jaygmaXRlci0+aHQtPm11dGV4KTsKKwlzcGluX3VubG9jaygmaXRlci0+aHQtPmxvY2spOwogCWtmcmVlKGl0ZXItPndhbGtlcik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX3dhbGtfZXhpdCk7CkBAIC01NDcsMTQgKzU2MywxMiBAQAogewogCXN0cnVjdCByaGFzaHRhYmxlICpodCA9IGl0ZXItPmh0OwogCi0JbXV0ZXhfbG9jaygmaHQtPm11dGV4KTsKLQotCWlmIChpdGVyLT53YWxrZXItPnRibCkKLQkJbGlzdF9kZWwoJml0ZXItPndhbGtlci0+bGlzdCk7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQltdXRleF91bmxvY2soJmh0LT5tdXRleCk7CisJc3Bpbl9sb2NrKCZodC0+bG9jayk7CisJaWYgKGl0ZXItPndhbGtlci0+dGJsKQorCQlsaXN0X2RlbCgmaXRlci0+d2Fsa2VyLT5saXN0KTsKKwlzcGluX3VubG9jaygmaHQtPmxvY2spOwogCiAJaWYgKCFpdGVyLT53YWxrZXItPnRibCkgewogCQlpdGVyLT53YWxrZXItPnRibCA9IHJodF9kZXJlZmVyZW5jZV9yY3UoaHQtPnRibCwgaHQpOwpAQCAtNzIzLDkgKzczNyw2IEBACiAJaWYgKHBhcmFtcy0+bnVsbHNfYmFzZSAmJiBwYXJhbXMtPm51bGxzX2Jhc2UgPCAoMVUgPDwgUkhUX0JBU0VfU0hJRlQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChwYXJhbXMtPm5lbGVtX2hpbnQpCi0JCXNpemUgPSByb3VuZGVkX2hhc2h0YWJsZV9zaXplKHBhcmFtcyk7Ci0KIAltZW1zZXQoaHQsIDAsIHNpemVvZigqaHQpKTsKIAltdXRleF9pbml0KCZodC0+bXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZodC0+bG9jayk7CkBAIC03NDUsNiArNzU2LDkgQEAKIAogCWh0LT5wLm1pbl9zaXplID0gbWF4KGh0LT5wLm1pbl9zaXplLCBIQVNIX01JTl9TSVpFKTsKIAorCWlmIChwYXJhbXMtPm5lbGVtX2hpbnQpCisJCXNpemUgPSByb3VuZGVkX2hhc2h0YWJsZV9zaXplKCZodC0+cCk7CisKIAkvKiBUaGUgbWF4aW11bSAobm90IGF2ZXJhZ2UpIGNoYWluIGxlbmd0aCBncm93cyB3aXRoIHRoZQogCSAqIHNpemUgb2YgdGhlIGhhc2ggdGFibGUsIGF0IGEgcmF0ZSBvZiAobG9nIE4pLyhsb2cgbG9nIE4pLgogCSAqIFRoZSB2YWx1ZSBvZiAxNiBpcyBzZWxlY3RlZCBzbyB0aGF0IGV2ZW4gaWYgdGhlIGhhc2gKZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IDhlZDJmZmQuLjczNDAzNTMgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKKysrIGIvbW0vYmFja2luZy1kZXYuYwpAQCAtOTU3LDggKzk1Nyw5IEBACiAgKiBqaWZmaWVzIGZvciBlaXRoZXIgYSBCREkgdG8gZXhpdCBjb25nZXN0aW9uIG9mIHRoZSBnaXZlbiBAc3luYyBxdWV1ZQogICogb3IgYSB3cml0ZSB0byBjb21wbGV0ZS4KICAqCi0gKiBJbiB0aGUgYWJzZW5jZSBvZiB6b25lIGNvbmdlc3Rpb24sIGNvbmRfcmVzY2hlZCgpIGlzIGNhbGxlZCB0byB5aWVsZAotICogdGhlIHByb2Nlc3NvciBpZiBuZWNlc3NhcnkgYnV0IG90aGVyd2lzZSBkb2VzIG5vdCBzbGVlcC4KKyAqIEluIHRoZSBhYnNlbmNlIG9mIHpvbmUgY29uZ2VzdGlvbiwgYSBzaG9ydCBzbGVlcCBvciBhIGNvbmRfcmVzY2hlZCBpcworICogcGVyZm9ybWVkIHRvIHlpZWxkIHRoZSBwcm9jZXNzb3IgYW5kIHRvIGFsbG93IG90aGVyIHN1YnN5c3RlbXMgdG8gbWFrZQorICogYSBmb3J3YXJkIHByb2dyZXNzLgogICoKICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgMCBpZiB0aGUgc2xlZXAgaXMgZm9yIHRoZSBmdWxsIHRpbWVvdXQuIE90aGVyd2lzZSwKICAqIGl0IGlzIHRoZSBudW1iZXIgb2YgamlmZmllcyB0aGF0IHdlcmUgc3RpbGwgcmVtYWluaW5nIHdoZW4gdGhlIGZ1bmN0aW9uCkBAIC05NzgsNyArOTc5LDE5IEBACiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZucl93Yl9jb25nZXN0ZWRbc3luY10pID09IDAgfHwKIAkgICAgIXRlc3RfYml0KFpPTkVfQ09OR0VTVEVELCAmem9uZS0+ZmxhZ3MpKSB7Ci0JCWNvbmRfcmVzY2hlZCgpOworCisJCS8qCisJCSAqIE1lbW9yeSBhbGxvY2F0aW9uL3JlY2xhaW0gbWlnaHQgYmUgY2FsbGVkIGZyb20gYSBXUQorCQkgKiBjb250ZXh0IGFuZCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV1EKKwkJICogY29uY3VycmVuY3kgY29udHJvbCBkb2Vzbid0IHJlY29nbml6ZSB0aGF0IGEgcGFydGljdWxhcgorCQkgKiBXUSBpcyBjb25nZXN0ZWQgaWYgdGhlIHdvcmtlciB0aHJlYWQgaXMgbG9vcGluZyB3aXRob3V0CisJCSAqIGV2ZXIgc2xlZXBpbmcuIFRoZXJlZm9yZSB3ZSBoYXZlIHRvIGRvIGEgc2hvcnQgc2xlZXAKKwkJICogaGVyZSByYXRoZXIgdGhhbiBjYWxsaW5nIGNvbmRfcmVzY2hlZCgpLgorCQkgKi8KKwkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfV1FfV09SS0VSKQorCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJZWxzZQorCQkJY29uZF9yZXNjaGVkKCk7CiAKIAkJLyogSW4gY2FzZSB3ZSBzY2hlZHVsZWQsIHdvcmsgb3V0IHRpbWUgcmVtYWluaW5nICovCiAJCXJldCA9IHRpbWVvdXQgLSAoamlmZmllcyAtIHN0YXJ0KTsKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGMyOWRkZWIuLjYyZmUwNmIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKKysrIGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMjAwOSw3ICsyMDA5LDcgQEAKIAkJLyoKIAkJICogQmUgc29tZXdoYXQgb3Zlci1wcm90ZWN0aXZlIGxpa2UgS1NNIGZvciBub3chCiAJCSAqLwotCQlpZiAoKnZtX2ZsYWdzICYgKFZNX0hVR0VQQUdFIHwgVk1fTk9fVEhQKSkKKwkJaWYgKCp2bV9mbGFncyAmIFZNX05PX1RIUCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQkqdm1fZmxhZ3MgJj0gflZNX05PSFVHRVBBR0U7CiAJCSp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTsKQEAgLTIwMjUsNyArMjAyNSw3IEBACiAJCS8qCiAJCSAqIEJlIHNvbWV3aGF0IG92ZXItcHJvdGVjdGl2ZSBsaWtlIEtTTSBmb3Igbm93IQogCQkgKi8KLQkJaWYgKCp2bV9mbGFncyAmIChWTV9OT0hVR0VQQUdFIHwgVk1fTk9fVEhQKSkKKwkJaWYgKCp2bV9mbGFncyAmIFZNX05PX1RIUCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQkqdm1fZmxhZ3MgJj0gflZNX0hVR0VQQUdFOwogCQkqdm1fZmxhZ3MgfD0gVk1fTk9IVUdFUEFHRTsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA4MjdiYjAyLi5lZjY5NjNiIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0zNzIsOCArMzcyLDEwIEBACiAJCXNwaW5fdW5sb2NrKCZyZXN2LT5sb2NrKTsKIAogCQl0cmcgPSBrbWFsbG9jKHNpemVvZigqdHJnKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdHJnKQorCQlpZiAoIXRyZykgeworCQkJa2ZyZWUobnJnKTsKIAkJCXJldHVybiAtRU5PTUVNOworCQl9CiAKIAkJc3Bpbl9sb2NrKCZyZXN2LT5sb2NrKTsKIAkJbGlzdF9hZGQoJnRyZy0+bGluaywgJnJlc3YtPnJlZ2lvbl9jYWNoZSk7CkBAIC00ODMsOCArNDg1LDE2IEBACiByZXRyeToKIAlzcGluX2xvY2soJnJlc3YtPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZywgdHJnLCBoZWFkLCBsaW5rKSB7Ci0JCWlmIChyZy0+dG8gPD0gZikKKwkJLyoKKwkJICogU2tpcCByZWdpb25zIGJlZm9yZSB0aGUgcmFuZ2UgdG8gYmUgZGVsZXRlZC4gIGZpbGVfcmVnaW9uCisJCSAqIHJhbmdlcyBhcmUgbm9ybWFsbHkgb2YgdGhlIGZvcm0gW2Zyb20sIHRvKS4gIEhvd2V2ZXIsIHRoZXJlCisJCSAqIG1heSBiZSBhICJwbGFjZWhvbGRlciIgZW50cnkgaW4gdGhlIG1hcCB3aGljaCBpcyBvZiB0aGUgZm9ybQorCQkgKiAoZnJvbSwgdG8pIHdpdGggZnJvbSA9PSB0by4gIENoZWNrIGZvciBwbGFjZWhvbGRlciBlbnRyaWVzCisJCSAqIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIHRvIGJlIGRlbGV0ZWQuCisJCSAqLworCQlpZiAocmctPnRvIDw9IGYgJiYgKHJnLT50byAhPSByZy0+ZnJvbSB8fCByZy0+dG8gIT0gZikpCiAJCQljb250aW51ZTsKKwogCQlpZiAocmctPmZyb20gPj0gdCkKIAkJCWJyZWFrOwogCkBAIC0xODg2LDcgKzE4OTYsMTAgQEAKIAkJcGFnZSA9IF9fYWxsb2NfYnVkZHlfaHVnZV9wYWdlX3dpdGhfbXBvbChoLCB2bWEsIGFkZHIpOwogCQlpZiAoIXBhZ2UpCiAJCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7Ci0KKwkJaWYgKCFhdm9pZF9yZXNlcnZlICYmIHZtYV9oYXNfcmVzZXJ2ZXModm1hLCBnYmxfY2hnKSkgeworCQkJU2V0UGFnZVByaXZhdGUocGFnZSk7CisJCQloLT5yZXN2X2h1Z2VfcGFnZXMtLTsKKwkJfQogCQlzcGluX2xvY2soJmh1Z2V0bGJfbG9jayk7CiAJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmaC0+aHVnZXBhZ2VfYWN0aXZlbGlzdCk7CiAJCS8qIEZhbGwgdGhyb3VnaCAqLwpAQCAtMzY5MywxMiArMzcwNiwxMiBAQAogCQl9IGVsc2UgaWYgKHVubGlrZWx5KGlzX2h1Z2V0bGJfZW50cnlfaHdwb2lzb25lZChlbnRyeSkpKQogCQkJcmV0dXJuIFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIHwKIAkJCQlWTV9GQVVMVF9TRVRfSElOREVYKGhzdGF0ZV9pbmRleChoKSk7CisJfSBlbHNlIHsKKwkJcHRlcCA9IGh1Z2VfcHRlX2FsbG9jKG1tLCBhZGRyZXNzLCBodWdlX3BhZ2Vfc2l6ZShoKSk7CisJCWlmICghcHRlcCkKKwkJCXJldHVybiBWTV9GQVVMVF9PT007CiAJfQogCi0JcHRlcCA9IGh1Z2VfcHRlX2FsbG9jKG1tLCBhZGRyZXNzLCBodWdlX3BhZ2Vfc2l6ZShoKSk7Ci0JaWYgKCFwdGVwKQotCQlyZXR1cm4gVk1fRkFVTFRfT09NOwotCiAJbWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOwogCWlkeCA9IHZtYV9odWdlY2FjaGVfb2Zmc2V0KGgsIHZtYSwgYWRkcmVzcyk7CiAKZGlmZiAtLWdpdCBhL21tL2thc2FuL2thc2FuLmMgYi9tbS9rYXNhbi9rYXNhbi5jCmluZGV4IGQ0MWIyMWIuLmJjMGE4ZDggMTAwNjQ0Ci0tLSBhL21tL2thc2FuL2thc2FuLmMKKysrIGIvbW0va2FzYW4va2FzYW4uYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTQ0NCw2ICs0NDUsNyBAQAogCiAJaWYgKHJldCkgewogCQlmaW5kX3ZtX2FyZWEoYWRkciktPmZsYWdzIHw9IFZNX0tBU0FOOworCQlrbWVtbGVha19pZ25vcmUocmV0KTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggOWFjZmIxNi4uZmMxMDYyMCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtOTAzLDE0ICs5MDMsMjAgQEAKIAkJaWYgKHByZXYgJiYgcmVjbGFpbS0+Z2VuZXJhdGlvbiAhPSBpdGVyLT5nZW5lcmF0aW9uKQogCQkJZ290byBvdXRfdW5sb2NrOwogCi0JCWRvIHsKKwkJd2hpbGUgKDEpIHsKIAkJCXBvcyA9IFJFQURfT05DRShpdGVyLT5wb3NpdGlvbik7CisJCQlpZiAoIXBvcyB8fCBjc3NfdHJ5Z2V0KCZwb3MtPmNzcykpCisJCQkJYnJlYWs7CiAJCQkvKgotCQkJICogQSByYWNpbmcgdXBkYXRlIG1heSBjaGFuZ2UgdGhlIHBvc2l0aW9uIGFuZAotCQkJICogcHV0IHRoZSBsYXN0IHJlZmVyZW5jZSwgaGVuY2UgY3NzX3RyeWdldCgpLAotCQkJICogb3IgcmV0cnkgdG8gc2VlIHRoZSB1cGRhdGVkIHBvc2l0aW9uLgorCQkJICogY3NzIHJlZmVyZW5jZSByZWFjaGVkIHplcm8sIHNvIGl0ZXItPnBvc2l0aW9uIHdpbGwKKwkJCSAqIGJlIGNsZWFyZWQgYnkgLT5jc3NfcmVsZWFzZWQuIEhvd2V2ZXIsIHdlIHNob3VsZCBub3QKKwkJCSAqIHJlbHkgb24gdGhpcyBoYXBwZW5pbmcgc29vbiwgYmVjYXVzZSAtPmNzc19yZWxlYXNlZAorCQkJICogaXMgY2FsbGVkIGZyb20gYSB3b3JrIHF1ZXVlLCBhbmQgYnkgYnVzeS13YWl0aW5nIHdlCisJCQkgKiBtaWdodCBibG9jayBpdC4gU28gd2UgY2xlYXIgaXRlci0+cG9zaXRpb24gcmlnaHQKKwkJCSAqIGF3YXkuCiAJCQkgKi8KLQkJfSB3aGlsZSAocG9zICYmICFjc3NfdHJ5Z2V0KCZwb3MtPmNzcykpOworCQkJKHZvaWQpY21weGNoZygmaXRlci0+cG9zaXRpb24sIHBvcywgTlVMTCk7CisJCX0KIAl9CiAKIAlpZiAocG9zKQpAQCAtOTU2LDE3ICs5NjIsMTMgQEAKIAl9CiAKIAlpZiAocmVjbGFpbSkgewotCQlpZiAoY21weGNoZygmaXRlci0+cG9zaXRpb24sIHBvcywgbWVtY2cpID09IHBvcykgewotCQkJaWYgKG1lbWNnKQotCQkJCWNzc19nZXQoJm1lbWNnLT5jc3MpOwotCQkJaWYgKHBvcykKLQkJCQljc3NfcHV0KCZwb3MtPmNzcyk7Ci0JCX0KLQogCQkvKgotCQkgKiBwYWlycyB3aXRoIGNzc190cnlnZXQgd2hlbiBkZXJlZmVyZW5jaW5nIGl0ZXItPnBvc2l0aW9uCi0JCSAqIGFib3ZlLgorCQkgKiBUaGUgcG9zaXRpb24gY291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieSBhIGNvbXBldGluZworCQkgKiB0aHJlYWQsIHNvIGNoZWNrIHRoYXQgdGhlIHZhbHVlIGhhc24ndCBjaGFuZ2VkIHNpbmNlIHdlIHJlYWQKKwkJICogaXQgdG8gYXZvaWQgcmVjbGFpbWluZyBmcm9tIHRoZSBzYW1lIGNncm91cCB0d2ljZS4KIAkJICovCisJCSh2b2lkKWNtcHhjaGcoJml0ZXItPnBvc2l0aW9uLCBwb3MsIG1lbWNnKTsKKwogCQlpZiAocG9zKQogCQkJY3NzX3B1dCgmcG9zLT5jc3MpOwogCkBAIC05OTksNiArMTAwMSwyOCBAQAogCQljc3NfcHV0KCZwcmV2LT5jc3MpOwogfQogCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JlY2xhaW1faXRlcmF0b3JzKHN0cnVjdCBtZW1fY2dyb3VwICpkZWFkX21lbWNnKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGRlYWRfbWVtY2c7CisJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyICppdGVyOworCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKKwlpbnQgbmlkLCB6aWQ7CisJaW50IGk7CisKKwl3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSkgeworCQlmb3JfZWFjaF9ub2RlKG5pZCkgeworCQkJZm9yICh6aWQgPSAwOyB6aWQgPCBNQVhfTlJfWk9ORVM7IHppZCsrKSB7CisJCQkJbXogPSAmbWVtY2ctPm5vZGVpbmZvW25pZF0tPnpvbmVpbmZvW3ppZF07CisJCQkJZm9yIChpID0gMDsgaSA8PSBERUZfUFJJT1JJVFk7IGkrKykgeworCQkJCQlpdGVyID0gJm16LT5pdGVyW2ldOworCQkJCQljbXB4Y2hnKCZpdGVyLT5wb3NpdGlvbiwKKwkJCQkJCWRlYWRfbWVtY2csIE5VTEwpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKwogLyoKICAqIEl0ZXJhdGlvbiBjb25zdHJ1Y3RzIGZvciB2aXNpdGluZyBhbGwgY2dyb3VwcyAodW5kZXIgYSB0cmVlKS4gIElmCiAgKiBsb29wcyBhcmUgZXhpdGVkIHByZW1hdHVyZWx5IChicmVhayksIG1lbV9jZ3JvdXBfaXRlcl9icmVhaygpIG11c3QKQEAgLTIxMjgsNyArMjE1Miw3IEBACiAJICovCiAJZG8gewogCQlpZiAocGFnZV9jb3VudGVyX3JlYWQoJm1lbWNnLT5tZW1vcnkpID4gbWVtY2ctPmhpZ2gpIHsKLQkJCWN1cnJlbnQtPm1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCArPSBucl9wYWdlczsKKwkJCWN1cnJlbnQtPm1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCArPSBiYXRjaDsKIAkJCXNldF9ub3RpZnlfcmVzdW1lKGN1cnJlbnQpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQzMjQsNiArNDM0OCwxMyBAQAogCXdiX21lbWNnX29mZmxpbmUobWVtY2cpOwogfQogCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTsKKworCWludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpOworfQorCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhjc3MpOwpAQCAtNDc3OSwyMyArNDgxMCwxOCBAQAogCXNwaW5fdW5sb2NrKCZtYy5sb2NrKTsKIH0KIAotc3RhdGljIGludCBtZW1fY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywKLQkJCQkgc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQorc3RhdGljIGludCBtZW1fY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlciwgKnA7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdW5zaWduZWQgbG9uZyBtb3ZlX2ZsYWdzOwogCWludCByZXQgPSAwOwogCi0JLyoKLQkgKiBXZSBhcmUgbm93IGNvbW1pdGVkIHRvIHRoaXMgdmFsdWUgd2hhdGV2ZXIgaXQgaXMuIENoYW5nZXMgaW4gdGhpcwotCSAqIHR1bmFibGUgd2lsbCBvbmx5IGFmZmVjdCB1cGNvbWluZyBtaWdyYXRpb25zLCBub3QgdGhlIGN1cnJlbnQgb25lLgotCSAqIFNvIHdlIG5lZWQgdG8gc2F2ZSBpdCwgYW5kIGtlZXAgaXQgZ29pbmcuCi0JICovCi0JbW92ZV9mbGFncyA9IFJFQURfT05DRShtZW1jZy0+bW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlKTsKLQlpZiAoIW1vdmVfZmxhZ3MpCisJLyogY2hhcmdlIGltbWlncmF0aW9uIGlzbid0IHN1cHBvcnRlZCBvbiB0aGUgZGVmYXVsdCBoaWVyYXJjaHkgKi8KKwlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNDgwNSwxMyArNDgzMSwyMyBAQAogCSAqIG11bHRpcGxlLgogCSAqLwogCXAgPSBOVUxMOwotCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoX2xlYWRlcihsZWFkZXIsIHRzZXQpIHsKKwljZ3JvdXBfdGFza3NldF9mb3JfZWFjaF9sZWFkZXIobGVhZGVyLCBjc3MsIHRzZXQpIHsKIAkJV0FSTl9PTl9PTkNFKHApOwogCQlwID0gbGVhZGVyOworCQltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTsKIAl9CiAJaWYgKCFwKQogCQlyZXR1cm4gMDsKIAorCS8qCisJICogV2UgYXJlIG5vdyBjb21taXRlZCB0byB0aGlzIHZhbHVlIHdoYXRldmVyIGl0IGlzLiBDaGFuZ2VzIGluIHRoaXMKKwkgKiB0dW5hYmxlIHdpbGwgb25seSBhZmZlY3QgdXBjb21pbmcgbWlncmF0aW9ucywgbm90IHRoZSBjdXJyZW50IG9uZS4KKwkgKiBTbyB3ZSBuZWVkIHRvIHNhdmUgaXQsIGFuZCBrZWVwIGl0IGdvaW5nLgorCSAqLworCW1vdmVfZmxhZ3MgPSBSRUFEX09OQ0UobWVtY2ctPm1vdmVfY2hhcmdlX2F0X2ltbWlncmF0ZSk7CisJaWYgKCFtb3ZlX2ZsYWdzKQorCQlyZXR1cm4gMDsKKwogCWZyb20gPSBtZW1fY2dyb3VwX2Zyb21fdGFzayhwKTsKIAogCVZNX0JVR19PTihmcm9tID09IG1lbWNnKTsKQEAgLTQ4NDIsOCArNDg3OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCi0JCQkJICAgICBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogewogCWlmIChtYy50bykKIAkJbWVtX2Nncm91cF9jbGVhcl9tYygpOwpAQCAtNDk4NSwxMCArNTAyMCwxMCBAQAogCWF0b21pY19kZWMoJm1jLmZyb20tPm1vdmluZ19hY2NvdW50KTsKIH0KIAotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9tb3ZlX3Rhc2soc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywKLQkJCQkgc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQorc3RhdGljIHZvaWQgbWVtX2Nncm91cF9tb3ZlX3Rhc2soc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGNncm91cF90YXNrc2V0X2ZpcnN0KHRzZXQpOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY2dyb3VwX3Rhc2tzZXRfZmlyc3QodHNldCwgJmNzcyk7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBnZXRfdGFza19tbShwKTsKIAogCWlmIChtbSkgewpAQCAtNTAwMCwxNyArNTAzNSwxNCBAQAogCQltZW1fY2dyb3VwX2NsZWFyX21jKCk7CiB9CiAjZWxzZQkvKiAhQ09ORklHX01NVSAqLwotc3RhdGljIGludCBtZW1fY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywKLQkJCQkgc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQorc3RhdGljIGludCBtZW1fY2dyb3VwX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogewogCXJldHVybiAwOwogfQotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCi0JCQkJICAgICBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogewogfQotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9tb3ZlX3Rhc2soc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywKLQkJCQkgc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQorc3RhdGljIHZvaWQgbWVtX2Nncm91cF9tb3ZlX3Rhc2soc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogewogfQogI2VuZGlmCkBAIC01MTg0LDYgKzUyMTYsNyBAQAogCS5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYywKIAkuY3NzX29ubGluZSA9IG1lbV9jZ3JvdXBfY3NzX29ubGluZSwKIAkuY3NzX29mZmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lLAorCS5jc3NfcmVsZWFzZWQgPSBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZCwKIAkuY3NzX2ZyZWUgPSBtZW1fY2dyb3VwX2Nzc19mcmVlLAogCS5jc3NfcmVzZXQgPSBtZW1fY2dyb3VwX2Nzc19yZXNldCwKIAkuY2FuX2F0dGFjaCA9IG1lbV9jZ3JvdXBfY2FuX2F0dGFjaCwKQEAgLTU1MTEsMTEgKzU1NDQsMTEgQEAKICAqIG1lbV9jZ3JvdXBfcmVwbGFjZV9wYWdlIC0gbWlncmF0ZSBhIGNoYXJnZSB0byBhbm90aGVyIHBhZ2UKICAqIEBvbGRwYWdlOiBjdXJyZW50bHkgY2hhcmdlZCBwYWdlCiAgKiBAbmV3cGFnZTogcGFnZSB0byB0cmFuc2ZlciB0aGUgY2hhcmdlIHRvCi0gKiBAbHJ1Y2FyZTogZWl0aGVyIG9yIGJvdGggcGFnZXMgbWlnaHQgYmUgb24gdGhlIExSVSBhbHJlYWR5CiAgKgogICogTWlncmF0ZSB0aGUgY2hhcmdlIGZyb20gQG9sZHBhZ2UgdG8gQG5ld3BhZ2UuCiAgKgogICogQm90aCBwYWdlcyBtdXN0IGJlIGxvY2tlZCwgQG5ld3BhZ2UtPm1hcHBpbmcgbXVzdCBiZSBzZXQgdXAuCisgKiBFaXRoZXIgb3IgYm90aCBwYWdlcyBtaWdodCBiZSBvbiB0aGUgTFJVIGFscmVhZHkuCiAgKi8KIHZvaWQgbWVtX2Nncm91cF9yZXBsYWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKm9sZHBhZ2UsIHN0cnVjdCBwYWdlICpuZXdwYWdlKQogewpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBkZWI2NzljLi5jMzg3NDMwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMzAxNSw5ICszMDE1LDkgQEAKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBUaGUgZmF1bHQgaGFuZGxlciBoYXMgbm8gcGFnZSB0byBsb2NrLCBzbyBpdCBob2xkcwotCQkJICogaV9tbWFwX2xvY2sgZm9yIHdyaXRlIHRvIHByb3RlY3QgYWdhaW5zdCB0cnVuY2F0ZS4KKwkJCSAqIGlfbW1hcF9sb2NrIGZvciByZWFkIHRvIHByb3RlY3QgYWdhaW5zdCB0cnVuY2F0ZS4KIAkJCSAqLwotCQkJaV9tbWFwX3VubG9ja193cml0ZSh2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZyk7CisJCQlpX21tYXBfdW5sb2NrX3JlYWQodm1hLT52bV9maWxlLT5mX21hcHBpbmcpOwogCQl9CiAJCWdvdG8gdW5jaGFyZ2Vfb3V0OwogCX0KQEAgLTMwMzEsOSArMzAzMSw5IEBACiAJfSBlbHNlIHsKIAkJLyoKIAkJICogVGhlIGZhdWx0IGhhbmRsZXIgaGFzIG5vIHBhZ2UgdG8gbG9jaywgc28gaXQgaG9sZHMKLQkJICogaV9tbWFwX2xvY2sgZm9yIHdyaXRlIHRvIHByb3RlY3QgYWdhaW5zdCB0cnVuY2F0ZS4KKwkJICogaV9tbWFwX2xvY2sgZm9yIHJlYWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRydW5jYXRlLgogCQkgKi8KLQkJaV9tbWFwX3VubG9ja193cml0ZSh2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZyk7CisJCWlfbW1hcF91bmxvY2tfcmVhZCh2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZyk7CiAJfQogCXJldHVybiByZXQ7CiB1bmNoYXJnZV9vdXQ6CmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCA2N2Q0ODhhLi5hMDQyYTlkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTEzNzUsMjMgKzEzNzUsMzAgQEAKICAqLwogaW50IHRlc3RfcGFnZXNfaW5fYV96b25lKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiB7Ci0JdW5zaWduZWQgbG9uZyBwZm47CisJdW5zaWduZWQgbG9uZyBwZm4sIHNlY19lbmRfcGZuOwogCXN0cnVjdCB6b25lICp6b25lID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgaTsKLQlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsKKwlmb3IgKHBmbiA9IHN0YXJ0X3Bmbiwgc2VjX2VuZF9wZm4gPSBTRUNUSU9OX0FMSUdOX1VQKHN0YXJ0X3Bmbik7CiAJICAgICBwZm4gPCBlbmRfcGZuOwotCSAgICAgcGZuICs9IE1BWF9PUkRFUl9OUl9QQUdFUykgewotCQlpID0gMDsKLQkJLyogVGhpcyBpcyBqdXN0IGEgQ09ORklHX0hPTEVTX0lOX1pPTkUgY2hlY2suKi8KLQkJd2hpbGUgKChpIDwgTUFYX09SREVSX05SX1BBR0VTKSAmJiAhcGZuX3ZhbGlkX3dpdGhpbihwZm4gKyBpKSkKLQkJCWkrKzsKLQkJaWYgKGkgPT0gTUFYX09SREVSX05SX1BBR0VTKQorCSAgICAgcGZuID0gc2VjX2VuZF9wZm4gKyAxLCBzZWNfZW5kX3BmbiArPSBQQUdFU19QRVJfU0VDVElPTikgeworCQkvKiBNYWtlIHN1cmUgdGhlIG1lbW9yeSBzZWN0aW9uIGlzIHByZXNlbnQgZmlyc3QgKi8KKwkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocGZuX3RvX3NlY3Rpb25fbnIocGZuKSkpCiAJCQljb250aW51ZTsKLQkJcGFnZSA9IHBmbl90b19wYWdlKHBmbiArIGkpOwotCQlpZiAoem9uZSAmJiBwYWdlX3pvbmUocGFnZSkgIT0gem9uZSkKLQkJCXJldHVybiAwOwotCQl6b25lID0gcGFnZV96b25lKHBhZ2UpOworCQlmb3IgKDsgcGZuIDwgc2VjX2VuZF9wZm4gJiYgcGZuIDwgZW5kX3BmbjsKKwkJICAgICBwZm4gKz0gTUFYX09SREVSX05SX1BBR0VTKSB7CisJCQlpID0gMDsKKwkJCS8qIFRoaXMgaXMganVzdCBhIENPTkZJR19IT0xFU19JTl9aT05FIGNoZWNrLiovCisJCQl3aGlsZSAoKGkgPCBNQVhfT1JERVJfTlJfUEFHRVMpICYmCisJCQkJIXBmbl92YWxpZF93aXRoaW4ocGZuICsgaSkpCisJCQkJaSsrOworCQkJaWYgKGkgPT0gTUFYX09SREVSX05SX1BBR0VTKQorCQkJCWNvbnRpbnVlOworCQkJcGFnZSA9IHBmbl90b19wYWdlKHBmbiArIGkpOworCQkJaWYgKHpvbmUgJiYgcGFnZV96b25lKHBhZ2UpICE9IHpvbmUpCisJCQkJcmV0dXJuIDA7CisJCQl6b25lID0gcGFnZV96b25lKHBhZ2UpOworCQl9CiAJfQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggZDEzYTMzOS4uYzEyNjgwOSAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC02MDgsNiArNjA4LDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAodW5saWtlbHkocC0+ZmxhZ3MgJiBQRl9LVEhSRUFEKSkKIAkJCWNvbnRpbnVlOworCQlpZiAoaXNfZ2xvYmFsX2luaXQocCkpCisJCQljb250aW51ZTsKIAkJaWYgKHAtPnNpZ25hbC0+b29tX3Njb3JlX2FkaiA9PSBPT01fU0NPUkVfQURKX01JTikKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCAyYzkwMzU3Li5kMTVkODhjIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTIsNyArMiw3IEBACiAgKiBtbS9wYWdlLXdyaXRlYmFjay5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAyLCBMaW51cyBUb3J2YWxkcy4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYQogICoKICAqIENvbnRhaW5zIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHdyaXRpbmcgYmFjayBkaXJ0eSBwYWdlcyBhdCB0aGUKICAqIGFkZHJlc3Nfc3BhY2UgbGV2ZWwuCkBAIC0xNTQyLDcgKzE1NDIsOSBAQAogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCQl1bnNpZ25lZCBsb25nIGRpcnR5LCB0aHJlc2gsIGJnX3RocmVzaDsKLQkJdW5zaWduZWQgbG9uZyBtX2RpcnR5LCBtX3RocmVzaCwgbV9iZ190aHJlc2g7CisJCXVuc2lnbmVkIGxvbmcgbV9kaXJ0eSA9IDA7CS8qIHN0b3AgYm9ndXMgdW5pbml0IHdhcm5pbmdzICovCisJCXVuc2lnbmVkIGxvbmcgbV90aHJlc2ggPSAwOworCQl1bnNpZ25lZCBsb25nIG1fYmdfdGhyZXNoID0gMDsKIAogCQkvKgogCQkgKiBVbnN0YWJsZSB3cml0ZXMgYXJlIGEgZmVhdHVyZSBvZiBjZXJ0YWluIG5ldHdvcmtlZApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDE3YTNjNjYuLjlkNjY2ZGYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTM2NDcsOCArMzY0Nyw5IEBACiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgdHlwZXNbTUlHUkFURV9UWVBFU10gPSB7CiAJCVtNSUdSQVRFX1VOTU9WQUJMRV0JPSAnVScsCi0JCVtNSUdSQVRFX1JFQ0xBSU1BQkxFXQk9ICdFJywKIAkJW01JR1JBVEVfTU9WQUJMRV0JPSAnTScsCisJCVtNSUdSQVRFX1JFQ0xBSU1BQkxFXQk9ICdFJywKKwkJW01JR1JBVEVfSElHSEFUT01JQ10JPSAnSCcsCiAjaWZkZWYgQ09ORklHX0NNQQogCQlbTUlHUkFURV9DTUFdCQk9ICdDJywKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggOTE4N2VlZS4uMmFmY2RiYiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC04NDMsMTQgKzg0MywxNCBAQAogCQlsaXN0X2FkZF90YWlsKCZpbmZvLT5zd2FwbGlzdCwgJnNobWVtX3N3YXBsaXN0KTsKIAogCWlmIChhZGRfdG9fc3dhcF9jYWNoZShwYWdlLCBzd2FwLCBHRlBfQVRPTUlDKSA9PSAwKSB7CisJCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJCXNobWVtX3JlY2FsY19pbm9kZShpbm9kZSk7CisJCWluZm8tPnN3YXBwZWQrKzsKKwkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCiAJCXN3YXBfc2htZW1fYWxsb2Moc3dhcCk7CiAJCXNobWVtX2RlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSwgc3dwX3RvX3JhZGl4X2VudHJ5KHN3YXApKTsKIAotCQlzcGluX2xvY2soJmluZm8tPmxvY2spOwotCQlpbmZvLT5zd2FwcGVkKys7Ci0JCXNobWVtX3JlY2FsY19pbm9kZShpbm9kZSk7Ci0JCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQogCQltdXRleF91bmxvY2soJnNobWVtX3N3YXBsaXN0X211dGV4KTsKIAkJQlVHX09OKHBhZ2VfbWFwcGVkKHBhZ2UpKTsKIAkJc3dhcF93cml0ZXBhZ2UocGFnZSwgd2JjKTsKQEAgLTEwNzgsNyArMTA3OCw3IEBACiAJaWYgKHNncCAhPSBTR1BfV1JJVEUgJiYgc2dwICE9IFNHUF9GQUxMT0MgJiYKIAkgICAgKChsb2ZmX3QpaW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgPj0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CiAJCWVycm9yID0gLUVJTlZBTDsKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gdW5sb2NrOwogCX0KIAogCWlmIChwYWdlICYmIHNncCA9PSBTR1BfV1JJVEUpCkBAIC0xMjQ2LDExICsxMjQ2LDE1IEBACiAJLyogUGVyaGFwcyB0aGUgZmlsZSBoYXMgYmVlbiB0cnVuY2F0ZWQgc2luY2Ugd2UgY2hlY2tlZCAqLwogCWlmIChzZ3AgIT0gU0dQX1dSSVRFICYmIHNncCAhPSBTR1BfRkFMTE9DICYmCiAJICAgICgobG9mZl90KWluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpID49IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQlpZiAoYWxsb2NlZCkgeworCQkJQ2xlYXJQYWdlRGlydHkocGFnZSk7CisJCQlkZWxldGVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOworCQkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCXNobWVtX3JlY2FsY19pbm9kZShpbm9kZSk7CisJCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCX0KIAkJZXJyb3IgPSAtRUlOVkFMOwotCQlpZiAoYWxsb2NlZCkKLQkJCWdvdG8gdHJ1bmM7Ci0JCWVsc2UKLQkJCWdvdG8gZmFpbGVkOworCQlnb3RvIHVubG9jazsKIAl9CiAJKnBhZ2VwID0gcGFnZTsKIAlyZXR1cm4gMDsKQEAgLTEyNTgsMjMgKzEyNjIsMTMgQEAKIAkvKgogCSAqIEVycm9yIHJlY292ZXJ5LgogCSAqLwotdHJ1bmM6Ci0JaW5mbyA9IFNITUVNX0koaW5vZGUpOwotCUNsZWFyUGFnZURpcnR5KHBhZ2UpOwotCWRlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7Ci0Jc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQlpbmZvLT5hbGxvY2VkLS07Ci0JaW5vZGUtPmlfYmxvY2tzIC09IEJMT0NLU19QRVJfUEFHRTsKLQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiBkZWN1c2VkOgotCXNiaW5mbyA9IFNITUVNX1NCKGlub2RlLT5pX3NiKTsKIAlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKQogCQlwZXJjcHVfY291bnRlcl9hZGQoJnNiaW5mby0+dXNlZF9ibG9ja3MsIC0xKTsKIHVuYWNjdDoKIAlzaG1lbV91bmFjY3RfYmxvY2tzKGluZm8tPmZsYWdzLCAxKTsKIGZhaWxlZDoKLQlpZiAoc3dhcC52YWwgJiYgZXJyb3IgIT0gLUVJTlZBTCAmJgotCSAgICAhc2htZW1fY29uZmlybV9zd2FwKG1hcHBpbmcsIGluZGV4LCBzd2FwKSkKKwlpZiAoc3dhcC52YWwgJiYgIXNobWVtX2NvbmZpcm1fc3dhcChtYXBwaW5nLCBpbmRleCwgc3dhcCkpCiAJCWVycm9yID0gLUVFWElTVDsKIHVubG9jazoKIAlpZiAocGFnZSkgewpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IGUwODE5ZmEuLjQ3NjVjOTcgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTM0MTksNyArMzQxOSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZV9idWxrKTsKIAotYm9vbCBrbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBzaXplX3Qgc2l6ZSwKK2ludCBrbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBzaXplX3Qgc2l6ZSwKIAkJCQkJCQkJdm9pZCAqKnApCiB7CiAJcmV0dXJuIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHMsIGZsYWdzLCBzaXplLCBwKTsKZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaAppbmRleCAyNzQ5MmViLi43YjYwODcxIDEwMDY0NAotLS0gYS9tbS9zbGFiLmgKKysrIGIvbW0vc2xhYi5oCkBAIC0xNzAsNyArMTcwLDcgQEAKICAqIG1heSBiZSBhbGxvY2F0ZWQgb3IgZnJlZWQgdXNpbmcgdGhlc2Ugb3BlcmF0aW9ucy4KICAqLwogdm9pZCBfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICosIHNpemVfdCwgdm9pZCAqKik7Ci1ib29sIF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90LCBzaXplX3QsIHZvaWQgKiopOworaW50IF9fa21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90LCBzaXplX3QsIHZvaWQgKiopOwogCiAjaWZkZWYgQ09ORklHX01FTUNHX0tNRU0KIC8qCmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uYwppbmRleCBkODhlOTdjLi4zYzZhODZiIDEwMDY0NAotLS0gYS9tbS9zbGFiX2NvbW1vbi5jCisrKyBiL21tL3NsYWJfY29tbW9uLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCQlrbWVtX2NhY2hlX2ZyZWUocywgcFtpXSk7CiB9CiAKLWJvb2wgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBzaXplX3QgbnIsCitpbnQgX19rbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBzaXplX3QgbnIsCiAJCQkJCQkJCXZvaWQgKipwKQogewogCXNpemVfdCBpOwpAQCAtMTIxLDEwICsxMjEsMTAgQEAKIAkJdm9pZCAqeCA9IHBbaV0gPSBrbWVtX2NhY2hlX2FsbG9jKHMsIGZsYWdzKTsKIAkJaWYgKCF4KSB7CiAJCQlfX2ttZW1fY2FjaGVfZnJlZV9idWxrKHMsIGksIHApOwotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIGk7CiB9CiAKICNpZmRlZiBDT05GSUdfTUVNQ0dfS01FTQpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDBkN2U1ZGYuLjE3ZThmOGMgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTYxNyw3ICs2MTcsNyBAQAogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWVfYnVsayk7CiAKLWJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywgc2l6ZV90IHNpemUsCitpbnQga21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywgc2l6ZV90IHNpemUsCiAJCQkJCQkJCXZvaWQgKipwKQogewogCXJldHVybiBfX2ttZW1fY2FjaGVfYWxsb2NfYnVsayhzLCBmbGFncywgc2l6ZSwgcCk7CmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggN2NiNGJmOS4uNDY5OTc1MSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTA2NSwxMSArMTA2NSwxNSBAQAogCXJldHVybiAwOwogfQogCisvKiBTdXBwb3J0cyBjaGVja2luZyBidWxrIGZyZWUgb2YgYSBjb25zdHJ1Y3RlZCBmcmVlbGlzdCAqLwogc3RhdGljIG5vaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKmZyZWVfZGVidWdfcHJvY2Vzc2luZygKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdCwKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCisJdm9pZCAqaGVhZCwgdm9pZCAqdGFpbCwgaW50IGJ1bGtfY250LAogCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGdldF9ub2RlKHMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKKwl2b2lkICpvYmplY3QgPSBoZWFkOworCWludCBjbnQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm4tPmxpc3RfbG9jaywgKmZsYWdzKTsKIAlzbGFiX2xvY2socGFnZSk7CkBAIC0xMDc3LDYgKzEwODEsOSBAQAogCWlmICghY2hlY2tfc2xhYihzLCBwYWdlKSkKIAkJZ290byBmYWlsOwogCituZXh0X29iamVjdDoKKwljbnQrKzsKKwogCWlmICghY2hlY2tfdmFsaWRfcG9pbnRlcihzLCBwYWdlLCBvYmplY3QpKSB7CiAJCXNsYWJfZXJyKHMsIHBhZ2UsICJJbnZhbGlkIG9iamVjdCBwb2ludGVyIDB4JXAiLCBvYmplY3QpOwogCQlnb3RvIGZhaWw7CkBAIC0xMTA3LDggKzExMTQsMTkgQEAKIAlpZiAocy0+ZmxhZ3MgJiBTTEFCX1NUT1JFX1VTRVIpCiAJCXNldF90cmFjayhzLCBvYmplY3QsIFRSQUNLX0ZSRUUsIGFkZHIpOwogCXRyYWNlKHMsIHBhZ2UsIG9iamVjdCwgMCk7CisJLyogRnJlZXBvaW50ZXIgbm90IG92ZXJ3cml0dGVuIGJ5IGluaXRfb2JqZWN0KCksIFNMQUJfUE9JU09OIG1vdmVkIGl0ICovCiAJaW5pdF9vYmplY3Qocywgb2JqZWN0LCBTTFVCX1JFRF9JTkFDVElWRSk7CisKKwkvKiBSZWFjaGVkIGVuZCBvZiBjb25zdHJ1Y3RlZCBmcmVlbGlzdCB5ZXQ/ICovCisJaWYgKG9iamVjdCAhPSB0YWlsKSB7CisJCW9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpOworCQlnb3RvIG5leHRfb2JqZWN0OworCX0KIG91dDoKKwlpZiAoY250ICE9IGJ1bGtfY250KQorCQlzbGFiX2VycihzLCBwYWdlLCAiQnVsayBmcmVlbGlzdCBjb3VudCglZCkgaW52YWxpZCglZClcbiIsCisJCQkgYnVsa19jbnQsIGNudCk7CisKIAlzbGFiX3VubG9jayhwYWdlKTsKIAkvKgogCSAqIEtlZXAgbm9kZV9sb2NrIHRvIHByZXNlcnZlIGludGVncml0eQpAQCAtMTIwNCw3ICsxMjIyLDcgQEAKIAogCXJldHVybiBmbGFnczsKIH0KLSNlbHNlCisjZWxzZSAvKiAhQ09ORklHX1NMVUJfREVCVUcgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9vYmplY3RfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqb2JqZWN0KSB7fQogCkBAIC0xMjEyLDcgKzEyMzAsOCBAQAogCXN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsIHVuc2lnbmVkIGxvbmcgYWRkcikgeyByZXR1cm4gMDsgfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKmZyZWVfZGVidWdfcHJvY2Vzc2luZygKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKm9iamVjdCwKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCisJdm9pZCAqaGVhZCwgdm9pZCAqdGFpbCwgaW50IGJ1bGtfY250LAogCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpIHsgcmV0dXJuIE5VTEw7IH0KIAogc3RhdGljIGlubGluZSBpbnQgc2xhYl9wYWRfY2hlY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtMTI3MywxNCArMTI5MiwyMSBAQAogCXJldHVybiBtZW1jZ19rbWVtX2dldF9jYWNoZShzLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKLQkJCQkJZ2ZwX3QgZmxhZ3MsIHZvaWQgKm9iamVjdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsCisJCQkJCXNpemVfdCBzaXplLCB2b2lkICoqcCkKIHsKKwlzaXplX3QgaTsKKwogCWZsYWdzICY9IGdmcF9hbGxvd2VkX21hc2s7Ci0Ja21lbWNoZWNrX3NsYWJfYWxsb2MocywgZmxhZ3MsIG9iamVjdCwgc2xhYl9rc2l6ZShzKSk7Ci0Ja21lbWxlYWtfYWxsb2NfcmVjdXJzaXZlKG9iamVjdCwgcy0+b2JqZWN0X3NpemUsIDEsIHMtPmZsYWdzLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQl2b2lkICpvYmplY3QgPSBwW2ldOworCisJCWttZW1jaGVja19zbGFiX2FsbG9jKHMsIGZsYWdzLCBvYmplY3QsIHNsYWJfa3NpemUocykpOworCQlrbWVtbGVha19hbGxvY19yZWN1cnNpdmUob2JqZWN0LCBzLT5vYmplY3Rfc2l6ZSwgMSwKKwkJCQkJIHMtPmZsYWdzLCBmbGFncyk7CisJCWthc2FuX3NsYWJfYWxsb2Mocywgb2JqZWN0KTsKKwl9CiAJbWVtY2dfa21lbV9wdXRfY2FjaGUocyk7Ci0Ja2FzYW5fc2xhYl9hbGxvYyhzLCBvYmplY3QpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKngpCkBAIC0xMzA4LDYgKzEzMzQsMjkgQEAKIAlrYXNhbl9zbGFiX2ZyZWUocywgeCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX2ZyZWVfZnJlZWxpc3RfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKKwkJCQkJICAgdm9pZCAqaGVhZCwgdm9pZCAqdGFpbCkKK3sKKy8qCisgKiBDb21waWxlciBjYW5ub3QgZGV0ZWN0IHRoaXMgZnVuY3Rpb24gY2FuIGJlIHJlbW92ZWQgaWYgc2xhYl9mcmVlX2hvb2soKQorICogZXZhbHVhdGVzIHRvIG5vdGhpbmcuICBUaHVzLCBjYXRjaCBhbGwgcmVsZXZhbnQgY29uZmlnIGRlYnVnIG9wdGlvbnMgaGVyZS4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0tNRU1DSEVDSykgfHwJCVwKKwlkZWZpbmVkKENPTkZJR19MT0NLREVQKQl8fAkJXAorCWRlZmluZWQoQ09ORklHX0RFQlVHX0tNRU1MRUFLKSB8fAlcCisJZGVmaW5lZChDT05GSUdfREVCVUdfT0JKRUNUU19GUkVFKSB8fAlcCisJZGVmaW5lZChDT05GSUdfS0FTQU4pCisKKwl2b2lkICpvYmplY3QgPSBoZWFkOworCXZvaWQgKnRhaWxfb2JqID0gdGFpbCA/IDogaGVhZDsKKworCWRvIHsKKwkJc2xhYl9mcmVlX2hvb2socywgb2JqZWN0KTsKKwl9IHdoaWxlICgob2JqZWN0ICE9IHRhaWxfb2JqKSAmJgorCQkgKG9iamVjdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpKSk7CisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgc2V0dXBfb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQl2b2lkICpvYmplY3QpCiB7CkBAIC0yMjk1LDIzICsyMzQ0LDE1IEBACiAgKiBBbmQgaWYgd2Ugd2VyZSB1bmFibGUgdG8gZ2V0IGEgbmV3IHNsYWIgZnJvbSB0aGUgcGFydGlhbCBzbGFiIGxpc3RzIHRoZW4KICAqIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgc2xhYi4gVGhpcyBpcyB0aGUgc2xvd2VzdCBwYXRoIHNpbmNlIGl0IGludm9sdmVzCiAgKiBhIGNhbGwgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yIGFuZCB0aGUgc2V0dXAgb2YgYSBuZXcgc2xhYi4KKyAqCisgKiBWZXJzaW9uIG9mIF9fc2xhYl9hbGxvYyB0byB1c2Ugd2hlbiB3ZSBrbm93IHRoYXQgaW50ZXJydXB0cyBhcmUKKyAqIGFscmVhZHkgZGlzYWJsZWQgKHdoaWNoIGlzIHRoZSBjYXNlIGZvciBidWxrIGFsbG9jYXRpb24pLgogICovCi1zdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsCitzdGF0aWMgdm9pZCAqX19fc2xhYl9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlLAogCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYykKIHsKIAl2b2lkICpmcmVlbGlzdDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JLyoKLQkgKiBXZSBtYXkgaGF2ZSBiZWVuIHByZWVtcHRlZCBhbmQgcmVzY2hlZHVsZWQgb24gYSBkaWZmZXJlbnQKLQkgKiBjcHUgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzLiBOZWVkIHRvIHJlbG9hZCBjcHUgYXJlYQotCSAqIHBvaW50ZXIuCi0JICovCi0JYyA9IHRoaXNfY3B1X3B0cihzLT5jcHVfc2xhYik7Ci0jZW5kaWYKIAogCXBhZ2UgPSBjLT5wYWdlOwogCWlmICghcGFnZSkKQEAgLTIzNjksNyArMjQxMCw2IEBACiAJVk1fQlVHX09OKCFjLT5wYWdlLT5mcm96ZW4pOwogCWMtPmZyZWVsaXN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIGZyZWVsaXN0KTsKIAljLT50aWQgPSBuZXh0X3RpZChjLT50aWQpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gZnJlZWxpc3Q7CiAKIG5ld19zbGFiOgpAQCAtMjM4Niw3ICsyNDI2LDYgQEAKIAogCWlmICh1bmxpa2VseSghZnJlZWxpc3QpKSB7CiAJCXNsYWJfb3V0X29mX21lbW9yeShzLCBnZnBmbGFncywgbm9kZSk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yNDAyLDExICsyNDQxLDM1IEBACiAJZGVhY3RpdmF0ZV9zbGFiKHMsIHBhZ2UsIGdldF9mcmVlcG9pbnRlcihzLCBmcmVlbGlzdCkpOwogCWMtPnBhZ2UgPSBOVUxMOwogCWMtPmZyZWVsaXN0ID0gTlVMTDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIGZyZWVsaXN0OwogfQogCiAvKgorICogQW5vdGhlciBvbmUgdGhhdCBkaXNhYmxlZCBpbnRlcnJ1cHQgYW5kIGNvbXBlbnNhdGVzIGZvciBwb3NzaWJsZQorICogY3B1IGNoYW5nZXMgYnkgcmVmZXRjaGluZyB0aGUgcGVyIGNwdSBhcmVhIHBvaW50ZXIuCisgKi8KK3N0YXRpYyB2b2lkICpfX3NsYWJfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSwKKwkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMpCit7CisJdm9pZCAqcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJLyoKKwkgKiBXZSBtYXkgaGF2ZSBiZWVuIHByZWVtcHRlZCBhbmQgcmVzY2hlZHVsZWQgb24gYSBkaWZmZXJlbnQKKwkgKiBjcHUgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzLiBOZWVkIHRvIHJlbG9hZCBjcHUgYXJlYQorCSAqIHBvaW50ZXIuCisJICovCisJYyA9IHRoaXNfY3B1X3B0cihzLT5jcHVfc2xhYik7CisjZW5kaWYKKworCXAgPSBfX19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBhZGRyLCBjKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHA7Cit9CisKKy8qCiAgKiBJbmxpbmVkIGZhc3RwYXRoIHNvIHRoYXQgYWxsb2NhdGlvbiBmdW5jdGlvbnMgKGttYWxsb2MsIGttZW1fY2FjaGVfYWxsb2MpCiAgKiBoYXZlIHRoZSBmYXN0cGF0aCBmb2xkZWQgaW50byB0aGVpciBmdW5jdGlvbnMuIFNvIG5vIGZ1bmN0aW9uIGNhbGwKICAqIG92ZXJoZWFkIGZvciByZXF1ZXN0cyB0aGF0IGNhbiBiZSBzYXRpc2ZpZWQgb24gdGhlIGZhc3RwYXRoLgpAQCAtMjQxOSw3ICsyNDgyLDcgQEAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAogCQlnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl2b2lkICoqb2JqZWN0OworCXZvaWQgKm9iamVjdDsKIAlzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmM7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyB0aWQ7CkBAIC0yNDk4LDcgKzI1NjEsNyBAQAogCWlmICh1bmxpa2VseShnZnBmbGFncyAmIF9fR0ZQX1pFUk8pICYmIG9iamVjdCkKIAkJbWVtc2V0KG9iamVjdCwgMCwgcy0+b2JqZWN0X3NpemUpOwogCi0Jc2xhYl9wb3N0X2FsbG9jX2hvb2socywgZ2ZwZmxhZ3MsIG9iamVjdCk7CisJc2xhYl9wb3N0X2FsbG9jX2hvb2socywgZ2ZwZmxhZ3MsIDEsICZvYmplY3QpOwogCiAJcmV0dXJuIG9iamVjdDsKIH0KQEAgLTI1NjksMTAgKzI2MzIsMTEgQEAKICAqIGhhbmRsaW5nIHJlcXVpcmVkIHRoZW4gd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseS4KICAqLwogc3RhdGljIHZvaWQgX19zbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJdm9pZCAqeCwgdW5zaWduZWQgbG9uZyBhZGRyKQorCQkJdm9pZCAqaGVhZCwgdm9pZCAqdGFpbCwgaW50IGNudCwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcikKKwogewogCXZvaWQgKnByaW9yOwotCXZvaWQgKipvYmplY3QgPSAodm9pZCAqKXg7CiAJaW50IHdhc19mcm96ZW47CiAJc3RydWN0IHBhZ2UgbmV3OwogCXVuc2lnbmVkIGxvbmcgY291bnRlcnM7CkBAIC0yNTgyLDcgKzI2NDYsOCBAQAogCXN0YXQocywgRlJFRV9TTE9XUEFUSCk7CiAKIAlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSAmJgotCQkhKG4gPSBmcmVlX2RlYnVnX3Byb2Nlc3NpbmcocywgcGFnZSwgeCwgYWRkciwgJmZsYWdzKSkpCisJICAgICEobiA9IGZyZWVfZGVidWdfcHJvY2Vzc2luZyhzLCBwYWdlLCBoZWFkLCB0YWlsLCBjbnQsCisJCQkJCWFkZHIsICZmbGFncykpKQogCQlyZXR1cm47CiAKIAlkbyB7CkBAIC0yNTkyLDEwICsyNjU3LDEwIEBACiAJCX0KIAkJcHJpb3IgPSBwYWdlLT5mcmVlbGlzdDsKIAkJY291bnRlcnMgPSBwYWdlLT5jb3VudGVyczsKLQkJc2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCwgcHJpb3IpOworCQlzZXRfZnJlZXBvaW50ZXIocywgdGFpbCwgcHJpb3IpOwogCQluZXcuY291bnRlcnMgPSBjb3VudGVyczsKIAkJd2FzX2Zyb3plbiA9IG5ldy5mcm96ZW47Ci0JCW5ldy5pbnVzZS0tOworCQluZXcuaW51c2UgLT0gY250OwogCQlpZiAoKCFuZXcuaW51c2UgfHwgIXByaW9yKSAmJiAhd2FzX2Zyb3plbikgewogCiAJCQlpZiAoa21lbV9jYWNoZV9oYXNfY3B1X3BhcnRpYWwocykgJiYgIXByaW9yKSB7CkBAIC0yNjI2LDcgKzI2OTEsNyBAQAogCiAJfSB3aGlsZSAoIWNtcHhjaGdfZG91YmxlX3NsYWIocywgcGFnZSwKIAkJcHJpb3IsIGNvdW50ZXJzLAotCQlvYmplY3QsIG5ldy5jb3VudGVycywKKwkJaGVhZCwgbmV3LmNvdW50ZXJzLAogCQkiX19zbGFiX2ZyZWUiKSk7CiAKIAlpZiAobGlrZWx5KCFuKSkgewpAQCAtMjY5MSwxNSArMjc1NiwyMCBAQAogICoKICAqIElmIGZhc3RwYXRoIGlzIG5vdCBwb3NzaWJsZSB0aGVuIGZhbGwgYmFjayB0byBfX3NsYWJfZnJlZSB3aGVyZSB3ZSBkZWFsCiAgKiB3aXRoIGFsbCBzb3J0cyBvZiBzcGVjaWFsIHByb2Nlc3NpbmcuCisgKgorICogQnVsayBmcmVlIG9mIGEgZnJlZWxpc3Qgd2l0aCBzZXZlcmFsIG9iamVjdHMgKGFsbCBwb2ludGluZyB0byB0aGUKKyAqIHNhbWUgcGFnZSkgcG9zc2libGUgYnkgc3BlY2lmeWluZyBoZWFkIGFuZCB0YWlsIHB0ciwgcGx1cyBvYmplY3RzCisgKiBjb3VudCAoY250KS4gQnVsayBmcmVlIGluZGljYXRlZCBieSB0YWlsIHBvaW50ZXIgYmVpbmcgc2V0LgogICovCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAotCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKngsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgIHZvaWQgKmhlYWQsIHZvaWQgKnRhaWwsIGludCBjbnQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXZvaWQgKipvYmplY3QgPSAodm9pZCAqKXg7CisJdm9pZCAqdGFpbF9vYmogPSB0YWlsID8gOiBoZWFkOwogCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYzsKIAl1bnNpZ25lZCBsb25nIHRpZDsKIAotCXNsYWJfZnJlZV9ob29rKHMsIHgpOworCXNsYWJfZnJlZV9mcmVlbGlzdF9ob29rKHMsIGhlYWQsIHRhaWwpOwogCiByZWRvOgogCS8qCkBAIC0yNzE4LDE5ICsyNzg4LDE5IEBACiAJYmFycmllcigpOwogCiAJaWYgKGxpa2VseShwYWdlID09IGMtPnBhZ2UpKSB7Ci0JCXNldF9mcmVlcG9pbnRlcihzLCBvYmplY3QsIGMtPmZyZWVsaXN0KTsKKwkJc2V0X2ZyZWVwb2ludGVyKHMsIHRhaWxfb2JqLCBjLT5mcmVlbGlzdCk7CiAKIAkJaWYgKHVubGlrZWx5KCF0aGlzX2NwdV9jbXB4Y2hnX2RvdWJsZSgKIAkJCQlzLT5jcHVfc2xhYi0+ZnJlZWxpc3QsIHMtPmNwdV9zbGFiLT50aWQsCiAJCQkJYy0+ZnJlZWxpc3QsIHRpZCwKLQkJCQlvYmplY3QsIG5leHRfdGlkKHRpZCkpKSkgeworCQkJCWhlYWQsIG5leHRfdGlkKHRpZCkpKSkgewogCiAJCQlub3RlX2NtcHhjaGdfZmFpbHVyZSgic2xhYl9mcmVlIiwgcywgdGlkKTsKIAkJCWdvdG8gcmVkbzsKIAkJfQogCQlzdGF0KHMsIEZSRUVfRkFTVFBBVEgpOwogCX0gZWxzZQotCQlfX3NsYWJfZnJlZShzLCBwYWdlLCB4LCBhZGRyKTsKKwkJX19zbGFiX2ZyZWUocywgcGFnZSwgaGVhZCwgdGFpbF9vYmosIGNudCwgYWRkcik7CiAKIH0KIApAQCAtMjczOSw1OSArMjgwOSwxMTYgQEAKIAlzID0gY2FjaGVfZnJvbV9vYmoocywgeCk7CiAJaWYgKCFzKQogCQlyZXR1cm47Ci0Jc2xhYl9mcmVlKHMsIHZpcnRfdG9faGVhZF9wYWdlKHgpLCB4LCBfUkVUX0lQXyk7CisJc2xhYl9mcmVlKHMsIHZpcnRfdG9faGVhZF9wYWdlKHgpLCB4LCBOVUxMLCAxLCBfUkVUX0lQXyk7CiAJdHJhY2Vfa21lbV9jYWNoZV9mcmVlKF9SRVRfSVBfLCB4KTsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9mcmVlKTsKIAotLyogTm90ZSB0aGF0IGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAqLwotdm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKQotewotCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYzsKK3N0cnVjdCBkZXRhY2hlZF9mcmVlbGlzdCB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IGk7CisJdm9pZCAqdGFpbDsKKwl2b2lkICpmcmVlbGlzdDsKKwlpbnQgY250OworfTsKIAotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JYyA9IHRoaXNfY3B1X3B0cihzLT5jcHVfc2xhYik7CisvKgorICogVGhpcyBmdW5jdGlvbiBwcm9ncmVzc2l2ZWx5IHNjYW5zIHRoZSBhcnJheSB3aXRoIGZyZWUgb2JqZWN0cyAod2l0aAorICogYSBsaW1pdGVkIGxvb2sgYWhlYWQpIGFuZCBleHRyYWN0IG9iamVjdHMgYmVsb25naW5nIHRvIHRoZSBzYW1lCisgKiBwYWdlLiAgSXQgYnVpbGRzIGEgZGV0YWNoZWQgZnJlZWxpc3QgZGlyZWN0bHkgd2l0aGluIHRoZSBnaXZlbgorICogcGFnZS9vYmplY3RzLiAgVGhpcyBjYW4gaGFwcGVuIHdpdGhvdXQgYW55IG5lZWQgZm9yCisgKiBzeW5jaHJvbml6YXRpb24sIGJlY2F1c2UgdGhlIG9iamVjdHMgYXJlIG93bmVkIGJ5IHJ1bm5pbmcgcHJvY2Vzcy4KKyAqIFRoZSBmcmVlbGlzdCBpcyBidWlsZCB1cCBhcyBhIHNpbmdsZSBsaW5rZWQgbGlzdCBpbiB0aGUgb2JqZWN0cy4KKyAqIFRoZSBpZGVhIGlzLCB0aGF0IHRoaXMgZGV0YWNoZWQgZnJlZWxpc3QgY2FuIHRoZW4gYmUgYnVsaworICogdHJhbnNmZXJyZWQgdG8gdGhlIHJlYWwgZnJlZWxpc3QocyksIGJ1dCBvbmx5IHJlcXVpcmluZyBhIHNpbmdsZQorICogc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS4gIExvb2sgYWhlYWQgaW4gdGhlIGFycmF5IGlzIGxpbWl0ZWQgZHVlCisgKiB0byBwZXJmb3JtYW5jZSByZWFzb25zLgorICovCitzdGF0aWMgaW50IGJ1aWxkX2RldGFjaGVkX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICB2b2lkICoqcCwgc3RydWN0IGRldGFjaGVkX2ZyZWVsaXN0ICpkZikKK3sKKwlzaXplX3QgZmlyc3Rfc2tpcHBlZF9pbmRleCA9IDA7CisJaW50IGxvb2thaGVhZCA9IDM7CisJdm9pZCAqb2JqZWN0OwogCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQl2b2lkICpvYmplY3QgPSBwW2ldOworCS8qIEFsd2F5cyByZS1pbml0IGRldGFjaGVkX2ZyZWVsaXN0ICovCisJZGYtPnBhZ2UgPSBOVUxMOwogCi0JCUJVR19PTighb2JqZWN0KTsKLQkJLyoga21lbSBjYWNoZSBkZWJ1ZyBzdXBwb3J0ICovCi0JCXMgPSBjYWNoZV9mcm9tX29iaihzLCBvYmplY3QpOwotCQlpZiAodW5saWtlbHkoIXMpKQotCQkJZ290byBleGl0OwotCQlzbGFiX2ZyZWVfaG9vayhzLCBvYmplY3QpOworCWRvIHsKKwkJb2JqZWN0ID0gcFstLXNpemVdOworCX0gd2hpbGUgKCFvYmplY3QgJiYgc2l6ZSk7CiAKLQkJcGFnZSA9IHZpcnRfdG9faGVhZF9wYWdlKG9iamVjdCk7CisJaWYgKCFvYmplY3QpCisJCXJldHVybiAwOwogCi0JCWlmIChjLT5wYWdlID09IHBhZ2UpIHsKLQkJCS8qIEZhc3RwYXRoOiBsb2NhbCBDUFUgZnJlZSAqLwotCQkJc2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCwgYy0+ZnJlZWxpc3QpOwotCQkJYy0+ZnJlZWxpc3QgPSBvYmplY3Q7Ci0JCX0gZWxzZSB7Ci0JCQljLT50aWQgPSBuZXh0X3RpZChjLT50aWQpOwotCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQkJLyogU2xvd3BhdGg6IG92ZXJoZWFkIGxvY2tlZCBjbXB4Y2hnX2RvdWJsZV9zbGFiICovCi0JCQlfX3NsYWJfZnJlZShzLCBwYWdlLCBvYmplY3QsIF9SRVRfSVBfKTsKLQkJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCQljID0gdGhpc19jcHVfcHRyKHMtPmNwdV9zbGFiKTsKKwkvKiBTdGFydCBuZXcgZGV0YWNoZWQgZnJlZWxpc3QgKi8KKwlzZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0LCBOVUxMKTsKKwlkZi0+cGFnZSA9IHZpcnRfdG9faGVhZF9wYWdlKG9iamVjdCk7CisJZGYtPnRhaWwgPSBvYmplY3Q7CisJZGYtPmZyZWVsaXN0ID0gb2JqZWN0OworCXBbc2l6ZV0gPSBOVUxMOyAvKiBtYXJrIG9iamVjdCBwcm9jZXNzZWQgKi8KKwlkZi0+Y250ID0gMTsKKworCXdoaWxlIChzaXplKSB7CisJCW9iamVjdCA9IHBbLS1zaXplXTsKKwkJaWYgKCFvYmplY3QpCisJCQljb250aW51ZTsgLyogU2tpcCBwcm9jZXNzZWQgb2JqZWN0cyAqLworCisJCS8qIGRmLT5wYWdlIGlzIGFsd2F5cyBzZXQgYXQgdGhpcyBwb2ludCAqLworCQlpZiAoZGYtPnBhZ2UgPT0gdmlydF90b19oZWFkX3BhZ2Uob2JqZWN0KSkgeworCQkJLyogT3Bwb3J0dW5pdHkgYnVpbGQgZnJlZWxpc3QgKi8KKwkJCXNldF9mcmVlcG9pbnRlcihzLCBvYmplY3QsIGRmLT5mcmVlbGlzdCk7CisJCQlkZi0+ZnJlZWxpc3QgPSBvYmplY3Q7CisJCQlkZi0+Y250Kys7CisJCQlwW3NpemVdID0gTlVMTDsgLyogbWFyayBvYmplY3QgcHJvY2Vzc2VkICovCisKKwkJCWNvbnRpbnVlOwogCQl9CisKKwkJLyogTGltaXQgbG9vayBhaGVhZCBzZWFyY2ggKi8KKwkJaWYgKCEtLWxvb2thaGVhZCkKKwkJCWJyZWFrOworCisJCWlmICghZmlyc3Rfc2tpcHBlZF9pbmRleCkKKwkJCWZpcnN0X3NraXBwZWRfaW5kZXggPSBzaXplICsgMTsKIAl9Ci1leGl0OgotCWMtPnRpZCA9IG5leHRfdGlkKGMtPnRpZCk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCisJcmV0dXJuIGZpcnN0X3NraXBwZWRfaW5kZXg7Cit9CisKKworLyogTm90ZSB0aGF0IGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAqLwordm9pZCBrbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqb3JpZ19zLCBzaXplX3Qgc2l6ZSwgdm9pZCAqKnApCit7CisJaWYgKFdBUk5fT04oIXNpemUpKQorCQlyZXR1cm47CisKKwlkbyB7CisJCXN0cnVjdCBkZXRhY2hlZF9mcmVlbGlzdCBkZjsKKwkJc3RydWN0IGttZW1fY2FjaGUgKnM7CisKKwkJLyogU3VwcG9ydCBmb3IgbWVtY2cgKi8KKwkJcyA9IGNhY2hlX2Zyb21fb2JqKG9yaWdfcywgcFtzaXplIC0gMV0pOworCisJCXNpemUgPSBidWlsZF9kZXRhY2hlZF9mcmVlbGlzdChzLCBzaXplLCBwLCAmZGYpOworCQlpZiAodW5saWtlbHkoIWRmLnBhZ2UpKQorCQkJY29udGludWU7CisKKwkJc2xhYl9mcmVlKHMsIGRmLnBhZ2UsIGRmLmZyZWVsaXN0LCBkZi50YWlsLCBkZi5jbnQsIF9SRVRfSVBfKTsKKwl9IHdoaWxlIChsaWtlbHkoc2l6ZSkpOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWVfYnVsayk7CiAKIC8qIE5vdGUgdGhhdCBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gKi8KLWJvb2wga21lbV9jYWNoZV9hbGxvY19idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncywgc2l6ZV90IHNpemUsCi0JCQkgICB2b2lkICoqcCkKK2ludCBrbWVtX2NhY2hlX2FsbG9jX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBzaXplX3Qgc2l6ZSwKKwkJCSAgdm9pZCAqKnApCiB7CiAJc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjOwogCWludCBpOwogCisJLyogbWVtY2cgYW5kIGttZW1fY2FjaGUgZGVidWcgc3VwcG9ydCAqLworCXMgPSBzbGFiX3ByZV9hbGxvY19ob29rKHMsIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoIXMpKQorCQlyZXR1cm4gZmFsc2U7CiAJLyoKIAkgKiBEcmFpbiBvYmplY3RzIGluIHRoZSBwZXIgY3B1IHNsYWIsIHdoaWxlIGRpc2FibGluZyBsb2NhbAogCSAqIElSUXMsIHdoaWNoIHByb3RlY3RzIGFnYWluc3QgUFJFRU1QVCBhbmQgaW50ZXJydXB0cwpAQCAtMjgwNCwzNiArMjkzMSwyMCBAQAogCQl2b2lkICpvYmplY3QgPSBjLT5mcmVlbGlzdDsKIAogCQlpZiAodW5saWtlbHkoIW9iamVjdCkpIHsKLQkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJCS8qCiAJCQkgKiBJbnZva2luZyBzbG93IHBhdGggbGlrZWx5IGhhdmUgc2lkZS1lZmZlY3QKIAkJCSAqIG9mIHJlLXBvcHVsYXRpbmcgcGVyIENQVSBjLT5mcmVlbGlzdAogCQkJICovCi0JCQlwW2ldID0gX19zbGFiX2FsbG9jKHMsIGZsYWdzLCBOVU1BX05PX05PREUsCisJCQlwW2ldID0gX19fc2xhYl9hbGxvYyhzLCBmbGFncywgTlVNQV9OT19OT0RFLAogCQkJCQkgICAgX1JFVF9JUF8sIGMpOwotCQkJaWYgKHVubGlrZWx5KCFwW2ldKSkgewotCQkJCV9fa21lbV9jYWNoZV9mcmVlX2J1bGsocywgaSwgcCk7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCWlmICh1bmxpa2VseSghcFtpXSkpCisJCQkJZ290byBlcnJvcjsKKwogCQkJYyA9IHRoaXNfY3B1X3B0cihzLT5jcHVfc2xhYik7CiAJCQljb250aW51ZTsgLyogZ290byBmb3ItbG9vcCAqLwogCQl9Ci0KLQkJLyoga21lbV9jYWNoZSBkZWJ1ZyBzdXBwb3J0ICovCi0JCXMgPSBzbGFiX3ByZV9hbGxvY19ob29rKHMsIGZsYWdzKTsKLQkJaWYgKHVubGlrZWx5KCFzKSkgewotCQkJX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCBpLCBwKTsKLQkJCWMtPnRpZCA9IG5leHRfdGlkKGMtPnRpZCk7Ci0JCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQogCQljLT5mcmVlbGlzdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpOwogCQlwW2ldID0gb2JqZWN0OwotCi0JCS8qIGttZW1fY2FjaGUgZGVidWcgc3VwcG9ydCAqLwotCQlzbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBmbGFncywgb2JqZWN0KTsKIAl9CiAJYy0+dGlkID0gbmV4dF90aWQoYy0+dGlkKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0yODQ2LDcgKzI5NTcsMTQgQEAKIAkJCW1lbXNldChwW2pdLCAwLCBzLT5vYmplY3Rfc2l6ZSk7CiAJfQogCi0JcmV0dXJuIHRydWU7CisJLyogbWVtY2cgYW5kIGttZW1fY2FjaGUgZGVidWcgc3VwcG9ydCAqLworCXNsYWJfcG9zdF9hbGxvY19ob29rKHMsIGZsYWdzLCBzaXplLCBwKTsKKwlyZXR1cm4gaTsKK2Vycm9yOgorCWxvY2FsX2lycV9lbmFibGUoKTsKKwlzbGFiX3Bvc3RfYWxsb2NfaG9vayhzLCBmbGFncywgaSwgcCk7CisJX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzLCBpLCBwKTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19idWxrKTsKIApAQCAtMzUxMSw3ICszNjI5LDcgQEAKIAkJX19mcmVlX2ttZW1fcGFnZXMocGFnZSwgY29tcG91bmRfb3JkZXIocGFnZSkpOwogCQlyZXR1cm47CiAJfQotCXNsYWJfZnJlZShwYWdlLT5zbGFiX2NhY2hlLCBwYWdlLCBvYmplY3QsIF9SRVRfSVBfKTsKKwlzbGFiX2ZyZWUocGFnZS0+c2xhYl9jYWNoZSwgcGFnZSwgb2JqZWN0LCBOVUxMLCAxLCBfUkVUX0lQXyk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmcmVlKTsKIApkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGQwNDU2MzQuLjhlM2M5YzUgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTE0NDMsNyArMTQ0Myw2IEBACiAJCXZtYXBfZGVidWdfZnJlZV9yYW5nZSh2YS0+dmFfc3RhcnQsIHZhLT52YV9lbmQpOwogCQlrYXNhbl9mcmVlX3NoYWRvdyh2bSk7CiAJCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKLQkJdm0tPnNpemUgLT0gUEFHRV9TSVpFOwogCiAJCXJldHVybiB2bTsKIAl9CkBAIC0xNDY4LDggKzE0NjcsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoYWRkciwgYXJlYS0+c2l6ZSk7Ci0JZGVidWdfY2hlY2tfbm9fb2JqX2ZyZWVkKGFkZHIsIGFyZWEtPnNpemUpOworCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKGFkZHIsIGdldF92bV9hcmVhX3NpemUoYXJlYSkpOworCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZChhZGRyLCBnZXRfdm1fYXJlYV9zaXplKGFyZWEpKTsKIAogCWlmIChkZWFsbG9jYXRlX3BhZ2VzKSB7CiAJCWludCBpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuYwppbmRleCA4NzlhMmJlLi40ZWJjMTdkIDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYworKysgYi9tbS92bXN0YXQuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAgKiBwYXJ0aWN1bGFyIGNvdW50ZXIgY2Fubm90IGJlIHVwZGF0ZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KICAqLwogdm9pZCBfX21vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSwKLQkJCQlpbnQgZGVsdGEpCisJCQkgICBsb25nIGRlbHRhKQogewogCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgX19wZXJjcHUgKnBjcCA9IHpvbmUtPnBhZ2VzZXQ7CiAJczggX19wZXJjcHUgKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CkBAIC0zMTgsOCArMzE4LDggQEAKICAqICAgICAxICAgICAgIE92ZXJzdGVwcGluZyBoYWxmIG9mIHRocmVzaG9sZAogICogICAgIC0xICAgICAgT3ZlcnN0ZXBwaW5nIG1pbnVzIGhhbGYgb2YgdGhyZXNob2xkCiAqLwotc3RhdGljIGlubGluZSB2b2lkIG1vZF9zdGF0ZShzdHJ1Y3Qgem9uZSAqem9uZSwKLSAgICAgICBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0sIGludCBkZWx0YSwgaW50IG92ZXJzdGVwX21vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgbW9kX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0sCisJCQkgICAgIGxvbmcgZGVsdGEsIGludCBvdmVyc3RlcF9tb2RlKQogewogCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgX19wZXJjcHUgKnBjcCA9IHpvbmUtPnBhZ2VzZXQ7CiAJczggX19wZXJjcHUgKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CkBAIC0zNTcsNyArMzU3LDcgQEAKIH0KIAogdm9pZCBtb2Rfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0sCi0JCQkJCWludCBkZWx0YSkKKwkJCSBsb25nIGRlbHRhKQogewogCW1vZF9zdGF0ZSh6b25lLCBpdGVtLCBkZWx0YSwgMCk7CiB9CkBAIC0zODQsNyArMzg0LDcgQEAKICAqIFVzZSBpbnRlcnJ1cHQgZGlzYWJsZSB0byBzZXJpYWxpemUgY291bnRlciB1cGRhdGVzCiAgKi8KIHZvaWQgbW9kX3pvbmVfcGFnZV9zdGF0ZShzdHJ1Y3Qgem9uZSAqem9uZSwgZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtLAotCQkJCQlpbnQgZGVsdGEpCisJCQkgbG9uZyBkZWx0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC05MjEsOCArOTIxLDggQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIGNoYXIgKiBjb25zdCBtaWdyYXRldHlwZV9uYW1lc1tNSUdSQVRFX1RZUEVTXSA9IHsKIAkiVW5tb3ZhYmxlIiwKLQkiUmVjbGFpbWFibGUiLAogCSJNb3ZhYmxlIiwKKwkiUmVjbGFpbWFibGUiLAogCSJIaWdoQXRvbWljIiwKICNpZmRlZiBDT05GSUdfQ01BCiAJIkNNQSIsCkBAIC0xMzc5LDYgKzEzNzksNyBAQAogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKICNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnZtc3RhdF93cTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZGVsYXllZF93b3JrLCB2bXN0YXRfd29yayk7CiBpbnQgc3lzY3RsX3N0YXRfaW50ZXJ2YWwgX19yZWFkX21vc3RseSA9IEhaOwogc3RhdGljIGNwdW1hc2tfdmFyX3QgY3B1X3N0YXRfb2ZmOwpAQCAtMTM5MSw3ICsxMzkyLDcgQEAKIAkJICogdG8gb2NjdXIgaW4gdGhlIGZ1dHVyZS4gS2VlcCBvbiBydW5uaW5nIHRoZQogCQkgKiB1cGRhdGUgd29ya2VyIHRocmVhZC4KIAkJICovCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihzbXBfcHJvY2Vzc29yX2lkKCksCisJCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihzbXBfcHJvY2Vzc29yX2lkKCksIHZtc3RhdF93cSwKIAkJCXRoaXNfY3B1X3B0cigmdm1zdGF0X3dvcmspLAogCQkJcm91bmRfamlmZmllc19yZWxhdGl2ZShzeXNjdGxfc3RhdF9pbnRlcnZhbCkpOwogCX0gZWxzZSB7CkBAIC0xNDYwLDcgKzE0NjEsNyBAQAogCQlpZiAobmVlZF91cGRhdGUoY3B1KSAmJgogCQkJY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCBjcHVfc3RhdF9vZmYpKQogCi0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24oY3B1LAorCQkJcXVldWVfZGVsYXllZF93b3JrX29uKGNwdSwgdm1zdGF0X3dxLAogCQkJCSZwZXJfY3B1KHZtc3RhdF93b3JrLCBjcHUpLCAwKTsKIAogCXB1dF9vbmxpbmVfY3B1cygpOwpAQCAtMTU0OSw2ICsxNTUwLDcgQEAKIAogCXN0YXJ0X3NoZXBoZXJkX3RpbWVyKCk7CiAJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2RvbmUoKTsKKwl2bXN0YXRfd3EgPSBhbGxvY193b3JrcXVldWUoInZtc3RhdCIsIFdRX0ZSRUVaQUJMRXxXUV9NRU1fUkVDTEFJTSwgMCk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXByb2NfY3JlYXRlKCJidWRkeWluZm8iLCBTX0lSVUdPLCBOVUxMLCAmZnJhZ21lbnRhdGlvbl9maWxlX29wZXJhdGlvbnMpOwpkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggMDI1ZjhkYy4uYmYxNDUwOCAxMDA2NDQKLS0tIGEvbW0venN3YXAuYworKysgYi9tbS96c3dhcC5jCkBAIC01NDEsNiArNTQxLDcgQEAKIAlyZXR1cm4gbGFzdDsKIH0KIAorLyogdHlwZSBhbmQgY29tcHJlc3NvciBtdXN0IGJlIG51bGwtdGVybWluYXRlZCAqLwogc3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICp6c3dhcF9wb29sX2ZpbmRfZ2V0KGNoYXIgKnR5cGUsIGNoYXIgKmNvbXByZXNzb3IpCiB7CiAJc3RydWN0IHpzd2FwX3Bvb2wgKnBvb2w7CkBAIC01NDgsMTAgKzU0OSw5IEBACiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZ6c3dhcF9wb29sc19sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvb2wsICZ6c3dhcF9wb29scywgbGlzdCkgewotCQlpZiAoc3RybmNtcChwb29sLT50Zm1fbmFtZSwgY29tcHJlc3Nvciwgc2l6ZW9mKHBvb2wtPnRmbV9uYW1lKSkpCisJCWlmIChzdHJjbXAocG9vbC0+dGZtX25hbWUsIGNvbXByZXNzb3IpKQogCQkJY29udGludWU7Ci0JCWlmIChzdHJuY21wKHpwb29sX2dldF90eXBlKHBvb2wtPnpwb29sKSwgdHlwZSwKLQkJCSAgICBzaXplb2YoenN3YXBfenBvb2xfdHlwZSkpKQorCQlpZiAoc3RyY21wKHpwb29sX2dldF90eXBlKHBvb2wtPnpwb29sKSwgdHlwZSkpCiAJCQljb250aW51ZTsKIAkJLyogaWYgd2UgY2FuJ3QgZ2V0IGl0LCBpdCdzIGFib3V0IHRvIGJlIGRlc3Ryb3llZCAqLwogCQlpZiAoIXpzd2FwX3Bvb2xfZ2V0KHBvb2wpKQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCmluZGV4IDQ5NmIyNzUuLmUyZWQ2OTggMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2NvcmUuYworKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTMwLDcgKzMwLDkgQEAKIAkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAl9CiAKLQlpZiAoISh2bGFuX2Rldl9wcml2KHZsYW5fZGV2KS0+ZmxhZ3MgJiBWTEFOX0ZMQUdfUkVPUkRFUl9IRFIpKSB7CisJaWYgKCEodmxhbl9kZXZfcHJpdih2bGFuX2RldiktPmZsYWdzICYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSAmJgorCSAgICAhbmV0aWZfaXNfbWFjdmxhbl9wb3J0KHZsYW5fZGV2KSAmJgorCSAgICAhbmV0aWZfaXNfYnJpZGdlX3BvcnQodmxhbl9kZXYpKSB7CiAJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBza2ItPmRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggYWUzYTQ3Zi4uZmJkMGFjZiAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtODA1LDYgKzgwNSw5IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCWF4MjVfY2IgKmF4MjU7CiAKKwlpZiAocHJvdG9jb2wgPCAwIHx8IHByb3RvY29sID4gU0tfUFJPVE9DT0xfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICghbmV0X2VxKG5ldCwgJmluaXRfbmV0KSkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jIGIvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMKaW5kZXggODNiYzFhYS4uYTQ5YzcwNSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMKQEAgLTU2Niw2ICs1NjYsNyBAQAogCWludCBzZWxlY3Q7CiAJYmF0YWR2X2RhdF9hZGRyX3QgbGFzdF9tYXggPSBCQVRBRFZfREFUX0FERFJfTUFYLCBpcF9rZXk7CiAJc3RydWN0IGJhdGFkdl9kYXRfY2FuZGlkYXRlICpyZXM7CisJc3RydWN0IGJhdGFkdl9kYXRfZW50cnkgZGF0OwogCiAJaWYgKCFiYXRfcHJpdi0+b3JpZ19oYXNoKQogCQlyZXR1cm4gTlVMTDsKQEAgLTU3NSw3ICs1NzYsOSBAQAogCWlmICghcmVzKQogCQlyZXR1cm4gTlVMTDsKIAotCWlwX2tleSA9IChiYXRhZHZfZGF0X2FkZHJfdCliYXRhZHZfaGFzaF9kYXQoJmlwX2RzdCwKKwlkYXQuaXAgPSBpcF9kc3Q7CisJZGF0LnZpZCA9IDA7CisJaXBfa2V5ID0gKGJhdGFkdl9kYXRfYWRkcl90KWJhdGFkdl9oYXNoX2RhdCgmZGF0LAogCQkJCQkJICAgIEJBVEFEVl9EQVRfQUREUl9NQVgpOwogCiAJYmF0YWR2X2RiZyhCQVRBRFZfREJHX0RBVCwgYmF0X3ByaXYsCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMgYi9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMKaW5kZXggOGQ5OTBiMC4uMzIwNzY2NyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5jCisrKyBiL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYwpAQCAtODM2LDYgKzgzNiw3IEBACiAJdTggKm9yaWdfYWRkcjsKIAlzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDsKIAlpbnQgY2hlY2ssIGhkcl9zaXplID0gc2l6ZW9mKCp1bmljYXN0X3BhY2tldCk7CisJZW51bSBiYXRhZHZfc3VidHlwZSBzdWJ0eXBlOwogCWJvb2wgaXM0YWRkcjsKIAogCXVuaWNhc3RfcGFja2V0ID0gKHN0cnVjdCBiYXRhZHZfdW5pY2FzdF9wYWNrZXQgKilza2ItPmRhdGE7CkBAIC04NjMsMTAgKzg2NCwyMCBAQAogCS8qIHBhY2tldCBmb3IgbWUgKi8KIAlpZiAoYmF0YWR2X2lzX215X21hYyhiYXRfcHJpdiwgdW5pY2FzdF9wYWNrZXQtPmRlc3QpKSB7CiAJCWlmIChpczRhZGRyKSB7Ci0JCQliYXRhZHZfZGF0X2luY19jb3VudGVyKGJhdF9wcml2LAotCQkJCQkgICAgICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtPnN1YnR5cGUpOwotCQkJb3JpZ19hZGRyID0gdW5pY2FzdF80YWRkcl9wYWNrZXQtPnNyYzsKLQkJCW9yaWdfbm9kZSA9IGJhdGFkdl9vcmlnX2hhc2hfZmluZChiYXRfcHJpdiwgb3JpZ19hZGRyKTsKKwkJCXN1YnR5cGUgPSB1bmljYXN0XzRhZGRyX3BhY2tldC0+c3VidHlwZTsKKwkJCWJhdGFkdl9kYXRfaW5jX2NvdW50ZXIoYmF0X3ByaXYsIHN1YnR5cGUpOworCisJCQkvKiBPbmx5IHBheWxvYWQgZGF0YSBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3Igc3BlZWR5CisJCQkgKiBqb2luLiBGb3IgZXhhbXBsZSwgREFUIGFsc28gdXNlcyB1bmljYXN0IDRhZGRyCisJCQkgKiB0eXBlcywgYnV0IHRob3NlIHBhY2tldHMgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkCisJCQkgKiBmb3Igc3BlZWR5IGpvaW4sIHNpbmNlIHRoZSBjbGllbnRzIGRvIG5vdCBhY3R1YWxseQorCQkJICogcmVzaWRlIGF0IHRoZSBzZW5kaW5nIG9yaWdpbmF0b3IuCisJCQkgKi8KKwkJCWlmIChzdWJ0eXBlID09IEJBVEFEVl9QX0RBVEEpIHsKKwkJCQlvcmlnX2FkZHIgPSB1bmljYXN0XzRhZGRyX3BhY2tldC0+c3JjOworCQkJCW9yaWdfbm9kZSA9IGJhdGFkdl9vcmlnX2hhc2hfZmluZChiYXRfcHJpdiwKKwkJCQkJCQkJICBvcmlnX2FkZHIpOworCQkJfQogCQl9CiAKIAkJaWYgKGJhdGFkdl9kYXRfc25vb3BfaW5jb21pbmdfYXJwX3JlcXVlc3QoYmF0X3ByaXYsIHNrYiwKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMgYi9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCmluZGV4IDQyMjhiMTAuLjc2ZjE5YmEgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYwpAQCAtNjgsMTMgKzY4LDE1IEBACiAJCQkJIHVuc2lnbmVkIHNob3J0IHZpZCwgY29uc3QgY2hhciAqbWVzc2FnZSwKIAkJCQkgYm9vbCByb2FtaW5nKTsKIAotLyogcmV0dXJucyAxIGlmIHRoZXkgYXJlIHRoZSBzYW1lIG1hYyBhZGRyICovCisvKiByZXR1cm5zIDEgaWYgdGhleSBhcmUgdGhlIHNhbWUgbWFjIGFkZHIgYW5kIHZpZCAqLwogc3RhdGljIGludCBiYXRhZHZfY29tcGFyZV90dChjb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgY29uc3Qgdm9pZCAqZGF0YTIpCiB7CiAJY29uc3Qgdm9pZCAqZGF0YTEgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnksCiAJCQkJCSBoYXNoX2VudHJ5KTsKKwljb25zdCBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHQxID0gZGF0YTE7CisJY29uc3Qgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0MiA9IGRhdGEyOwogCi0JcmV0dXJuIGJhdGFkdl9jb21wYXJlX2V0aChkYXRhMSwgZGF0YTIpOworCXJldHVybiAodHQxLT52aWQgPT0gdHQyLT52aWQpICYmIGJhdGFkdl9jb21wYXJlX2V0aChkYXRhMSwgZGF0YTIpOwogfQogCiAvKioKQEAgLTE0MjcsOSArMTQyOSwxNSBAQAogCQl9CiAKIAkJLyogaWYgdGhlIGNsaWVudCB3YXMgdGVtcG9yYXJ5IGFkZGVkIGJlZm9yZSByZWNlaXZpbmcgdGhlIGZpcnN0Ci0JCSAqIE9HTSBhbm5vdW5jaW5nIGl0LCB3ZSBoYXZlIHRvIGNsZWFyIHRoZSBURU1QIGZsYWcKKwkJICogT0dNIGFubm91bmNpbmcgaXQsIHdlIGhhdmUgdG8gY2xlYXIgdGhlIFRFTVAgZmxhZy4gQWxzbywKKwkJICogcmVtb3ZlIHRoZSBwcmV2aW91cyB0ZW1wb3Jhcnkgb3JpZyBub2RlIGFuZCByZS1hZGQgaXQKKwkJICogaWYgcmVxdWlyZWQuIElmIHRoZSBvcmlnIGVudHJ5IGNoYW5nZWQsIHRoZSBuZXcgb25lIHdoaWNoCisJCSAqIGlzIGEgbm9uLXRlbXBvcmFyeSBlbnRyeSBpcyBwcmVmZXJyZWQuCiAJCSAqLwotCQljb21tb24tPmZsYWdzICY9IH5CQVRBRFZfVFRfQ0xJRU5UX1RFTVA7CisJCWlmIChjb21tb24tPmZsYWdzICYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSB7CisJCQliYXRhZHZfdHRfZ2xvYmFsX2RlbF9vcmlnX2xpc3QodHRfZ2xvYmFsX2VudHJ5KTsKKwkJCWNvbW1vbi0+ZmxhZ3MgJj0gfkJBVEFEVl9UVF9DTElFTlRfVEVNUDsKKwkJfQogCiAJCS8qIHRoZSBjaGFuZ2UgY2FuIGNhcnJ5IHBvc3NpYmxlICJhdHRyaWJ1dGUiIGZsYWdzIGxpa2UgdGhlCiAJCSAqIFRUX0NMSUVOVF9XSUZJLCB0aGVyZWZvcmUgdGhleSBoYXZlIHRvIGJlIGNvcGllZCBpbiB0aGUKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCmluZGV4IGEzYmZmZDEuLjcwMzA2Y2MgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKKysrIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwpAQCAtMjcxLDExICsyNzEsMTEgQEAKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8ICF0aW1lbykKIAkJCWJyZWFrOwogCi0JCXNldF9iaXQoU09DS19BU1lOQ19XQUlUREFUQSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJdGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvKTsKIAkJbG9ja19zb2NrKHNrKTsKLQkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKIAl9CiAKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CkBAIC00NDEsNyArNDQxLDcgQEAKIAlpZiAoIXRlc3RfYml0KEJUX1NLX1NVU1BFTkQsICZidF9zayhzayktPmZsYWdzKSAmJiBzb2NrX3dyaXRlYWJsZShzaykpCiAJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EOwogCWVsc2UKLQkJc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTsKIAogCXJldHVybiBtYXNrOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggZmUxMjk2Ni4uZjUyYmNiZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC01MjYsNiArNTI2LDkgQEAKIAlpZiAoIWFkZHIgfHwgYWRkci0+c2FfZmFtaWx5ICE9IEFGX0JMVUVUT09USCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoYWRkcl9sZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3NjbykpCisJCXJldHVybiAtRUlOVkFMOworCiAJbG9ja19zb2NrKHNrKTsKIAogCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfT1BFTikgewpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zbXAuYyBiL25ldC9ibHVldG9vdGgvc21wLmMKaW5kZXggYzkxMzUzOC4uZmZlZDhhMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zbXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL3NtcC5jCkBAIC0zMDI3LDggKzMwMjcsMTMgQEAKIAogCUJUX0RCRygiY2hhbiAlcCIsIGNoYW4pOwogCisJLyogTm8gbmVlZCB0byBjYWxsIGwyY2FwX2NoYW5faG9sZCgpIGhlcmUgc2luY2Ugd2UgYWxyZWFkeSBvd24KKwkgKiB0aGUgcmVmZXJlbmNlIHRha2VuIGluIHNtcF9uZXdfY29ubl9jYigpLiBUaGlzIGlzIGp1c3QgdGhlCisJICogZmlyc3QgdGltZSB0aGF0IHdlIHRpZSBpdCB0byBhIHNwZWNpZmljIHBvaW50ZXIuIFRoZSBjb2RlIGluCisJICogbDJjYXBfY29yZS5jIGVuc3VyZXMgdGhhdCB0aGVyZSdzIG5vIHJpc2sgdGhpcyBmdW5jdGlvbiB3b250CisJICogZ2V0IGNhbGxlZCBpZiBzbXBfbmV3X2Nvbm5fY2Igd2FzIHByZXZpb3VzbHkgY2FsbGVkLgorCSAqLwogCWNvbm4tPnNtcCA9IGNoYW47Ci0JbDJjYXBfY2hhbl9ob2xkKGNoYW4pOwogCiAJaWYgKGhjb24tPnR5cGUgPT0gQUNMX0xJTksgJiYgdGVzdF9iaXQoSENJX0NPTk5fRU5DUllQVCwgJmhjb24tPmZsYWdzKSkKIAkJYnJlZHJfcGFpcmluZyhjaGFuKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwLmMgYi9uZXQvYnJpZGdlL2JyX3N0cC5jCmluZGV4IGY3ZThkZWUuLjVmM2Y2NDUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHAuYwpAQCAtNDgsNyArNDgsNyBAQAogCiAJcC0+c3RhdGUgPSBzdGF0ZTsKIAllcnIgPSBzd2l0Y2hkZXZfcG9ydF9hdHRyX3NldChwLT5kZXYsICZhdHRyKTsKLQlpZiAoZXJyKQorCWlmIChlcnIgJiYgZXJyICE9IC1FT1BOT1RTVVBQKQogCQlicl93YXJuKHAtPmJyLCAiZXJyb3Igc2V0dGluZyBvZmZsb2FkIFNUUCBzdGF0ZSBvbiBwb3J0ICV1KCVzKVxuIiwKIAkJCQkodW5zaWduZWQgaW50KSBwLT5wb3J0X25vLCBwLT5kZXYtPm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYyBiL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKaW5kZXggZmE1M2Q3YS4uMTIwNDVkZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCkBAIC0zOSw3ICszOSw3IEBACiAJc3RydWN0IHN3aXRjaGRldl9hdHRyIGF0dHIgPSB7CiAJCS5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9BR0VJTkdfVElNRSwKIAkJLmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQIHwgU1dJVENIREVWX0ZfREVGRVIsCi0JCS51LmFnZWluZ190aW1lID0gcC0+YnItPmFnZWluZ190aW1lLAorCQkudS5hZ2VpbmdfdGltZSA9IGppZmZpZXNfdG9fY2xvY2tfdChwLT5ici0+YWdlaW5nX3RpbWUpLAogCX07CiAJaW50IGVycjsKIApAQCAtNTAsNyArNTAsNyBAQAogCXAtPmNvbmZpZ19wZW5kaW5nID0gMDsKIAogCWVyciA9IHN3aXRjaGRldl9wb3J0X2F0dHJfc2V0KHAtPmRldiwgJmF0dHIpOwotCWlmIChlcnIpCisJaWYgKGVyciAmJiBlcnIgIT0gLUVPUE5PVFNVUFApCiAJCW5ldGRldl9lcnIocC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBIVyBhZ2VpbmcgdGltZVxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NhaWZfc29ja2V0LmMgYi9uZXQvY2FpZi9jYWlmX3NvY2tldC5jCmluZGV4IGNjODU4OTEuLmFhMjA5YjEgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NhaWZfc29ja2V0LmMKKysrIGIvbmV0L2NhaWYvY2FpZl9zb2NrZXQuYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJCQkhdGltZW8pCiAJCQlicmVhazsKIAotCQlzZXRfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7CiAJCWxvY2tfc29jayhzayk7CkBAIC0zMzEsNyArMzMxLDcgQEAKIAkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKIAkJCWJyZWFrOwogCi0JCWNsZWFyX2JpdChTT0NLX0FTWU5DX1dBSVREQVRBLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCQlza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CiAJfQogCiAJZmluaXNoX3dhaXQoc2tfc2xlZXAoc2spLCAmd2FpdCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwppbmRleCA2MTcwODhhLi5kNjJhZjY5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kYXRhZ3JhbS5jCisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmMKQEAgLTc4NSw3ICs3ODUsNyBAQAogCWlmIChzb2NrX3dyaXRlYWJsZShzaykpCiAJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EOwogCWVsc2UKLQkJc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTsKIAogCXJldHVybiBtYXNrOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhYjliOGQwLi5hZTAwYjg5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMjQwMywxNyArMjQwMywyMCBAQAogewogCXN0YXRpYyBjb25zdCBuZXRkZXZfZmVhdHVyZXNfdCBudWxsX2ZlYXR1cmVzID0gMDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0JY29uc3QgY2hhciAqZHJpdmVyID0gIiI7CisJY29uc3QgY2hhciAqbmFtZSA9ICIiOwogCiAJaWYgKCFuZXRfcmF0ZWxpbWl0KCkpCiAJCXJldHVybjsKIAotCWlmIChkZXYgJiYgZGV2LT5kZXYucGFyZW50KQotCQlkcml2ZXIgPSBkZXZfZHJpdmVyX3N0cmluZyhkZXYtPmRldi5wYXJlbnQpOwotCisJaWYgKGRldikgeworCQlpZiAoZGV2LT5kZXYucGFyZW50KQorCQkJbmFtZSA9IGRldl9kcml2ZXJfc3RyaW5nKGRldi0+ZGV2LnBhcmVudCk7CisJCWVsc2UKKwkJCW5hbWUgPSBuZXRkZXZfbmFtZShkZXYpOworCX0KIAlXQVJOKDEsICIlczogY2Fwcz0oJXBORiwgJXBORikgbGVuPSVkIGRhdGFfbGVuPSVkIGdzb19zaXplPSVkICIKIAkgICAgICJnc29fdHlwZT0lZCBpcF9zdW1tZWQ9JWRcbiIsCi0JICAgICBkcml2ZXIsIGRldiA/ICZkZXYtPmZlYXR1cmVzIDogJm51bGxfZmVhdHVyZXMsCisJICAgICBuYW1lLCBkZXYgPyAmZGV2LT5mZWF0dXJlcyA6ICZudWxsX2ZlYXR1cmVzLAogCSAgICAgc2tiLT5zayA/ICZza2ItPnNrLT5za19yb3V0ZV9jYXBzIDogJm51bGxfZmVhdHVyZXMsCiAJICAgICBza2ItPmxlbiwgc2tiLT5kYXRhX2xlbiwgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSwKIAkgICAgIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUsIHNrYi0+aXBfc3VtbWVkKTsKQEAgLTY0MjYsMTEgKzY0MjksMTYgQEAKIAogCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19zZXRfZmVhdHVyZXMpCiAJCWVyciA9IGRldi0+bmV0ZGV2X29wcy0+bmRvX3NldF9mZWF0dXJlcyhkZXYsIGZlYXR1cmVzKTsKKwllbHNlCisJCWVyciA9IDA7CiAKIAlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKIAkJbmV0ZGV2X2VycihkZXYsCiAJCQkic2V0X2ZlYXR1cmVzKCkgZmFpbGVkICglZCk7IHdhbnRlZCAlcE5GLCBsZWZ0ICVwTkZcbiIsCiAJCQllcnIsICZmZWF0dXJlcywgJmRldi0+ZmVhdHVyZXMpOworCQkvKiByZXR1cm4gbm9uLTAgc2luY2Ugc29tZSBmZWF0dXJlcyBtaWdodCBoYXZlIGNoYW5nZWQgYW5kCisJCSAqIGl0J3MgYmV0dGVyIHRvIGZpcmUgYSBzcHVyaW91cyBub3RpZmljYXRpb24gdGhhbiBtaXNzIGl0CisJCSAqLwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDFhYTg0MzcuLmYxOGFlOTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC04NTcsNyArODU3LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWtfdGFpbCgmbmVpZ2gtPmFycF9xdWV1ZSk7CiAJLyoga2VlcCBza2IgYWxpdmUgZXZlbiBpZiBhcnBfcXVldWUgb3ZlcmZsb3dzICovCiAJaWYgKHNrYikKLQkJc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAJd3JpdGVfdW5sb2NrKCZuZWlnaC0+bG9jayk7CiAJbmVpZ2gtPm9wcy0+c29saWNpdChuZWlnaCwgc2tiKTsKIAlhdG9taWNfaW5jKCZuZWlnaC0+cHJvYmVzKTsKQEAgLTIyMTUsNyArMjIxNSw3IEBACiAJbmRtLT5uZG1fcGFkMiAgICA9IDA7CiAJbmRtLT5uZG1fZmxhZ3MJID0gcG4tPmZsYWdzIHwgTlRGX1BST1hZOwogCW5kbS0+bmRtX3R5cGUJID0gUlROX1VOSUNBU1Q7Ci0JbmRtLT5uZG1faWZpbmRleCA9IHBuLT5kZXYtPmlmaW5kZXg7CisJbmRtLT5uZG1faWZpbmRleCA9IHBuLT5kZXYgPyBwbi0+ZGV2LT5pZmluZGV4IDogMDsKIAluZG0tPm5kbV9zdGF0ZQkgPSBOVURfTk9ORTsKIAogCWlmIChubGFfcHV0KHNrYiwgTkRBX0RTVCwgdGJsLT5rZXlfbGVuLCBwbi0+a2V5KSkKQEAgLTIzMzMsNyArMjMzMyw3IEBACiAJCWlmIChoID4gc19oKQogCQkJc19pZHggPSAwOwogCQlmb3IgKG4gPSB0YmwtPnBoYXNoX2J1Y2tldHNbaF0sIGlkeCA9IDA7IG47IG4gPSBuLT5uZXh0KSB7Ci0JCQlpZiAoZGV2X25ldChuLT5kZXYpICE9IG5ldCkKKwkJCWlmIChwbmVpZ2hfbmV0KG4pICE9IG5ldCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChpZHggPCBzX2lkeCkKIAkJCQlnb3RvIG5leHQ7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRjbGFzc2lkX2Nncm91cC5jIGIvbmV0L2NvcmUvbmV0Y2xhc3NpZF9jZ3JvdXAuYwppbmRleCA2NDQxZjQ3Li5kOWVlOGQwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRjbGFzc2lkX2Nncm91cC5jCisrKyBiL25ldC9jb3JlL25ldGNsYXNzaWRfY2dyb3VwLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAlrZnJlZShjc3NfY2xzX3N0YXRlKGNzcykpOwogfQogCi1zdGF0aWMgaW50IHVwZGF0ZV9jbGFzc2lkKGNvbnN0IHZvaWQgKnYsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBuKQorc3RhdGljIGludCB1cGRhdGVfY2xhc3NpZF9zb2NrKGNvbnN0IHZvaWQgKnYsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBuKQogewogCWludCBlcnI7CiAJc3RydWN0IHNvY2tldCAqc29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUsICZlcnIpOwpAQCAtNjcsMTggKzY3LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNncnBfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCi0JCQlzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCitzdGF0aWMgdm9pZCB1cGRhdGVfY2xhc3NpZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCB2b2lkICp2KQogewotCXN0cnVjdCBjZ3JvdXBfY2xzX3N0YXRlICpjcyA9IGNzc19jbHNfc3RhdGUoY3NzKTsKLQl2b2lkICp2ID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyljcy0+Y2xhc3NpZDsKKwlzdHJ1Y3QgY3NzX3Rhc2tfaXRlciBpdDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKLQljZ3JvdXBfdGFza3NldF9mb3JfZWFjaChwLCB0c2V0KSB7CisJY3NzX3Rhc2tfaXRlcl9zdGFydChjc3MsICZpdCk7CisJd2hpbGUgKChwID0gY3NzX3Rhc2tfaXRlcl9uZXh0KCZpdCkpKSB7CiAJCXRhc2tfbG9jayhwKTsKLQkJaXRlcmF0ZV9mZChwLT5maWxlcywgMCwgdXBkYXRlX2NsYXNzaWQsIHYpOworCQlpdGVyYXRlX2ZkKHAtPmZpbGVzLCAwLCB1cGRhdGVfY2xhc3NpZF9zb2NrLCB2KTsKIAkJdGFza191bmxvY2socCk7CiAJfQorCWNzc190YXNrX2l0ZXJfZW5kKCZpdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNncnBfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKK3sKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCisJY2dyb3VwX3Rhc2tzZXRfZmlyc3QodHNldCwgJmNzcyk7CisJdXBkYXRlX2NsYXNzaWQoY3NzLAorCQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZyljc3NfY2xzX3N0YXRlKGNzcyktPmNsYXNzaWQpOwogfQogCiBzdGF0aWMgdTY0IHJlYWRfY2xhc3NpZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCkBAIC04OSw4ICs5OCwxMSBAQAogc3RhdGljIGludCB3cml0ZV9jbGFzc2lkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIHN0cnVjdCBjZnR5cGUgKmNmdCwKIAkJCSB1NjQgdmFsdWUpCiB7Ci0JY3NzX2Nsc19zdGF0ZShjc3MpLT5jbGFzc2lkID0gKHUzMikgdmFsdWU7CisJc3RydWN0IGNncm91cF9jbHNfc3RhdGUgKmNzID0gY3NzX2Nsc19zdGF0ZShjc3MpOwogCisJY3MtPmNsYXNzaWQgPSAodTMyKXZhbHVlOworCisJdXBkYXRlX2NsYXNzaWQoY3NzLCAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWNzLT5jbGFzc2lkKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cHJpb19jZ3JvdXAuYyBiL25ldC9jb3JlL25ldHByaW9fY2dyb3VwLmMKaW5kZXggY2JkMGExOS4uNDBmZDA5ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cHJpb19jZ3JvdXAuYworKysgYi9uZXQvY29yZS9uZXRwcmlvX2Nncm91cC5jCkBAIC0yMTgsMTMgKzIxOCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBuZXRfcHJpb19hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywKLQkJCSAgICBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpCitzdGF0aWMgdm9pZCBuZXRfcHJpb19hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQl2b2lkICp2ID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyljc3MtPmNncm91cC0+aWQ7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAotCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoKHAsIHRzZXQpIHsKKwljZ3JvdXBfdGFza3NldF9mb3JfZWFjaChwLCBjc3MsIHRzZXQpIHsKKwkJdm9pZCAqdiA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpY3NzLT5jZ3JvdXAtPmlkOworCiAJCXRhc2tfbG9jayhwKTsKIAkJaXRlcmF0ZV9mZChwLT5maWxlcywgMCwgdXBkYXRlX25ldHByaW8sIHYpOwogCQl0YXNrX3VubG9jayhwKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggNTA0YmQxNy4uMzRiYTdhMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTEwNDUsMTUgKzEwNDUsMTU2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHM7CisJc3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHRlbXA7CisJc3RydWN0IG5sYXR0ciAqYXR0cjsKKworCXN0YXRzID0gZGV2X2dldF9zdGF0cyhkZXYsICZ0ZW1wKTsKKworCWF0dHIgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfU1RBVFMsCisJCQkgICBzaXplb2Yoc3RydWN0IHJ0bmxfbGlua19zdGF0cykpOworCWlmICghYXR0cikKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCWNvcHlfcnRubF9saW5rX3N0YXRzKG5sYV9kYXRhKGF0dHIpLCBzdGF0cyk7CisKKwlhdHRyID0gbmxhX3Jlc2VydmUoc2tiLCBJRkxBX1NUQVRTNjQsCisJCQkgICBzaXplb2Yoc3RydWN0IHJ0bmxfbGlua19zdGF0czY0KSk7CisJaWYgKCFhdHRyKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJY29weV9ydG5sX2xpbmtfc3RhdHM2NChubGFfZGF0YShhdHRyKSwgc3RhdHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBpbnQgdmZzX251bSwKKwkJCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKnZmaW5mbykKK3sKKwlzdHJ1Y3QgaWZsYV92Zl9yc3NfcXVlcnlfZW4gdmZfcnNzX3F1ZXJ5X2VuOworCXN0cnVjdCBpZmxhX3ZmX2xpbmtfc3RhdGUgdmZfbGlua3N0YXRlOworCXN0cnVjdCBpZmxhX3ZmX3Nwb29mY2hrIHZmX3Nwb29mY2hrOworCXN0cnVjdCBpZmxhX3ZmX3R4X3JhdGUgdmZfdHhfcmF0ZTsKKwlzdHJ1Y3QgaWZsYV92Zl9zdGF0cyB2Zl9zdGF0czsKKwlzdHJ1Y3QgaWZsYV92Zl90cnVzdCB2Zl90cnVzdDsKKwlzdHJ1Y3QgaWZsYV92Zl92bGFuIHZmX3ZsYW47CisJc3RydWN0IGlmbGFfdmZfcmF0ZSB2Zl9yYXRlOworCXN0cnVjdCBubGF0dHIgKnZmLCAqdmZzdGF0czsKKwlzdHJ1Y3QgaWZsYV92Zl9tYWMgdmZfbWFjOworCXN0cnVjdCBpZmxhX3ZmX2luZm8gaXZpOworCisJLyogTm90IGFsbCBTUi1JT1YgY2FwYWJsZSBkcml2ZXJzIHN1cHBvcnQgdGhlCisJICogc3Bvb2ZjaGVjayBhbmQgIlJTUyBxdWVyeSBlbmFibGUiIHF1ZXJ5LiAgUHJlc2V0IHRvCisJICogLTEgc28gdGhlIHVzZXIgc3BhY2UgdG9vbCBjYW4gZGV0ZWN0IHRoYXQgdGhlIGRyaXZlcgorCSAqIGRpZG4ndCByZXBvcnQgYW55dGhpbmcuCisJICovCisJaXZpLnNwb29mY2hrID0gLTE7CisJaXZpLnJzc19xdWVyeV9lbiA9IC0xOworCWl2aS50cnVzdGVkID0gLTE7CisJbWVtc2V0KGl2aS5tYWMsIDAsIHNpemVvZihpdmkubWFjKSk7CisJLyogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFZGIGxpbmsgc3RhdGUgaXMgImF1dG8iCisJICogSUZMQV9WRl9MSU5LX1NUQVRFX0FVVE8gd2hpY2ggZXF1YWxzIHplcm8KKwkgKi8KKwlpdmkubGlua3N0YXRlID0gMDsKKwlpZiAoZGV2LT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3ZmX2NvbmZpZyhkZXYsIHZmc19udW0sICZpdmkpKQorCQlyZXR1cm4gMDsKKworCXZmX21hYy52ZiA9CisJCXZmX3ZsYW4udmYgPQorCQl2Zl9yYXRlLnZmID0KKwkJdmZfdHhfcmF0ZS52ZiA9CisJCXZmX3Nwb29mY2hrLnZmID0KKwkJdmZfbGlua3N0YXRlLnZmID0KKwkJdmZfcnNzX3F1ZXJ5X2VuLnZmID0KKwkJdmZfdHJ1c3QudmYgPSBpdmkudmY7CisKKwltZW1jcHkodmZfbWFjLm1hYywgaXZpLm1hYywgc2l6ZW9mKGl2aS5tYWMpKTsKKwl2Zl92bGFuLnZsYW4gPSBpdmkudmxhbjsKKwl2Zl92bGFuLnFvcyA9IGl2aS5xb3M7CisJdmZfdHhfcmF0ZS5yYXRlID0gaXZpLm1heF90eF9yYXRlOworCXZmX3JhdGUubWluX3R4X3JhdGUgPSBpdmkubWluX3R4X3JhdGU7CisJdmZfcmF0ZS5tYXhfdHhfcmF0ZSA9IGl2aS5tYXhfdHhfcmF0ZTsKKwl2Zl9zcG9vZmNoay5zZXR0aW5nID0gaXZpLnNwb29mY2hrOworCXZmX2xpbmtzdGF0ZS5saW5rX3N0YXRlID0gaXZpLmxpbmtzdGF0ZTsKKwl2Zl9yc3NfcXVlcnlfZW4uc2V0dGluZyA9IGl2aS5yc3NfcXVlcnlfZW47CisJdmZfdHJ1c3Quc2V0dGluZyA9IGl2aS50cnVzdGVkOworCXZmID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJRkxBX1ZGX0lORk8pOworCWlmICghdmYpIHsKKwkJbmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CisJaWYgKG5sYV9wdXQoc2tiLCBJRkxBX1ZGX01BQywgc2l6ZW9mKHZmX21hYyksICZ2Zl9tYWMpIHx8CisJICAgIG5sYV9wdXQoc2tiLCBJRkxBX1ZGX1ZMQU4sIHNpemVvZih2Zl92bGFuKSwgJnZmX3ZsYW4pIHx8CisJICAgIG5sYV9wdXQoc2tiLCBJRkxBX1ZGX1JBVEUsIHNpemVvZih2Zl9yYXRlKSwKKwkJICAgICZ2Zl9yYXRlKSB8fAorCSAgICBubGFfcHV0KHNrYiwgSUZMQV9WRl9UWF9SQVRFLCBzaXplb2YodmZfdHhfcmF0ZSksCisJCSAgICAmdmZfdHhfcmF0ZSkgfHwKKwkgICAgbmxhX3B1dChza2IsIElGTEFfVkZfU1BPT0ZDSEssIHNpemVvZih2Zl9zcG9vZmNoayksCisJCSAgICAmdmZfc3Bvb2ZjaGspIHx8CisJICAgIG5sYV9wdXQoc2tiLCBJRkxBX1ZGX0xJTktfU1RBVEUsIHNpemVvZih2Zl9saW5rc3RhdGUpLAorCQkgICAgJnZmX2xpbmtzdGF0ZSkgfHwKKwkgICAgbmxhX3B1dChza2IsIElGTEFfVkZfUlNTX1FVRVJZX0VOLAorCQkgICAgc2l6ZW9mKHZmX3Jzc19xdWVyeV9lbiksCisJCSAgICAmdmZfcnNzX3F1ZXJ5X2VuKSB8fAorCSAgICBubGFfcHV0KHNrYiwgSUZMQV9WRl9UUlVTVCwKKwkJICAgIHNpemVvZih2Zl90cnVzdCksICZ2Zl90cnVzdCkpCisJCXJldHVybiAtRU1TR1NJWkU7CisJbWVtc2V0KCZ2Zl9zdGF0cywgMCwgc2l6ZW9mKHZmX3N0YXRzKSk7CisJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX2dldF92Zl9zdGF0cykKKwkJZGV2LT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3ZmX3N0YXRzKGRldiwgdmZzX251bSwKKwkJCQkJCSZ2Zl9zdGF0cyk7CisJdmZzdGF0cyA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9WRl9TVEFUUyk7CisJaWYgKCF2ZnN0YXRzKSB7CisJCW5sYV9uZXN0X2NhbmNlbChza2IsIHZmKTsKKwkJbmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CisJaWYgKG5sYV9wdXRfdTY0KHNrYiwgSUZMQV9WRl9TVEFUU19SWF9QQUNLRVRTLAorCQkJdmZfc3RhdHMucnhfcGFja2V0cykgfHwKKwkgICAgbmxhX3B1dF91NjQoc2tiLCBJRkxBX1ZGX1NUQVRTX1RYX1BBQ0tFVFMsCisJCQl2Zl9zdGF0cy50eF9wYWNrZXRzKSB8fAorCSAgICBubGFfcHV0X3U2NChza2IsIElGTEFfVkZfU1RBVFNfUlhfQllURVMsCisJCQl2Zl9zdGF0cy5yeF9ieXRlcykgfHwKKwkgICAgbmxhX3B1dF91NjQoc2tiLCBJRkxBX1ZGX1NUQVRTX1RYX0JZVEVTLAorCQkJdmZfc3RhdHMudHhfYnl0ZXMpIHx8CisJICAgIG5sYV9wdXRfdTY0KHNrYiwgSUZMQV9WRl9TVEFUU19CUk9BRENBU1QsCisJCQl2Zl9zdGF0cy5icm9hZGNhc3QpIHx8CisJICAgIG5sYV9wdXRfdTY0KHNrYiwgSUZMQV9WRl9TVEFUU19NVUxUSUNBU1QsCisJCQl2Zl9zdGF0cy5tdWx0aWNhc3QpKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCW5sYV9uZXN0X2VuZChza2IsIHZmc3RhdHMpOworCW5sYV9uZXN0X2VuZChza2IsIHZmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydG5sX2ZpbGxfbGlua19pZm1hcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBydG5sX2xpbmtfaWZtYXAgbWFwID0geworCQkubWVtX3N0YXJ0ICAgPSBkZXYtPm1lbV9zdGFydCwKKwkJLm1lbV9lbmQgICAgID0gZGV2LT5tZW1fZW5kLAorCQkuYmFzZV9hZGRyICAgPSBkZXYtPmJhc2VfYWRkciwKKwkJLmlycSAgICAgICAgID0gZGV2LT5pcnEsCisJCS5kbWEgICAgICAgICA9IGRldi0+ZG1hLAorCQkucG9ydCAgICAgICAgPSBkZXYtPmlmX3BvcnQsCisJfTsKKwlpZiAobmxhX3B1dChza2IsIElGTEFfTUFQLCBzaXplb2YobWFwKSwgJm1hcCkpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgaW50IHR5cGUsIHUzMiBwaWQsIHUzMiBzZXEsIHUzMiBjaGFuZ2UsCiAJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgZXh0X2ZpbHRlcl9tYXNrKQogewogCXN0cnVjdCBpZmluZm9tc2cgKmlmbTsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKLQlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgdGVtcDsKLQljb25zdCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzOwotCXN0cnVjdCBubGF0dHIgKmF0dHIsICphZl9zcGVjOworCXN0cnVjdCBubGF0dHIgKmFmX3NwZWM7CiAJc3RydWN0IHJ0bmxfYWZfb3BzICphZl9vcHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnVwcGVyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChkZXYpOwogCkBAIC0xMDk2LDE4ICsxMjM3LDggQEAKIAkgICAgbmxhX3B1dF91OChza2IsIElGTEFfUFJPVE9fRE9XTiwgZGV2LT5wcm90b19kb3duKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlpZiAoMSkgewotCQlzdHJ1Y3QgcnRubF9saW5rX2lmbWFwIG1hcCA9IHsKLQkJCS5tZW1fc3RhcnQgICA9IGRldi0+bWVtX3N0YXJ0LAotCQkJLm1lbV9lbmQgICAgID0gZGV2LT5tZW1fZW5kLAotCQkJLmJhc2VfYWRkciAgID0gZGV2LT5iYXNlX2FkZHIsCi0JCQkuaXJxICAgICAgICAgPSBkZXYtPmlycSwKLQkJCS5kbWEgICAgICAgICA9IGRldi0+ZG1hLAotCQkJLnBvcnQgICAgICAgID0gZGV2LT5pZl9wb3J0LAotCQl9OwotCQlpZiAobmxhX3B1dChza2IsIElGTEFfTUFQLCBzaXplb2YobWFwKSwgJm1hcCkpCi0JCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQl9CisJaWYgKHJ0bmxfZmlsbF9saW5rX2lmbWFwKHNrYiwgZGV2KSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlpZiAoZGV2LT5hZGRyX2xlbikgewogCQlpZiAobmxhX3B1dChza2IsIElGTEFfQUREUkVTUywgZGV2LT5hZGRyX2xlbiwgZGV2LT5kZXZfYWRkcikgfHwKQEAgLTExMjQsMTI4ICsxMjU1LDI3IEBACiAJaWYgKHJ0bmxfcGh5c19zd2l0Y2hfaWRfZmlsbChza2IsIGRldikpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JYXR0ciA9IG5sYV9yZXNlcnZlKHNrYiwgSUZMQV9TVEFUUywKLQkJCXNpemVvZihzdHJ1Y3QgcnRubF9saW5rX3N0YXRzKSk7Ci0JaWYgKGF0dHIgPT0gTlVMTCkKKwlpZiAocnRubF9maWxsX3N0YXRzKHNrYiwgZGV2KSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlzdGF0cyA9IGRldl9nZXRfc3RhdHMoZGV2LCAmdGVtcCk7Ci0JY29weV9ydG5sX2xpbmtfc3RhdHMobmxhX2RhdGEoYXR0ciksIHN0YXRzKTsKLQotCWF0dHIgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfU1RBVFM2NCwKLQkJCXNpemVvZihzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQpKTsKLQlpZiAoYXR0ciA9PSBOVUxMKQotCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQljb3B5X3J0bmxfbGlua19zdGF0czY0KG5sYV9kYXRhKGF0dHIpLCBzdGF0cyk7Ci0KIAlpZiAoZGV2LT5kZXYucGFyZW50ICYmIChleHRfZmlsdGVyX21hc2sgJiBSVEVYVF9GSUxURVJfVkYpICYmCiAJICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fVkYsIGRldl9udW1fdmYoZGV2LT5kZXYucGFyZW50KSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX2dldF92Zl9jb25maWcgJiYgZGV2LT5kZXYucGFyZW50Ci0JICAgICYmIChleHRfZmlsdGVyX21hc2sgJiBSVEVYVF9GSUxURVJfVkYpKSB7CisJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX2dldF92Zl9jb25maWcgJiYgZGV2LT5kZXYucGFyZW50ICYmCisJICAgIGV4dF9maWx0ZXJfbWFzayAmIFJURVhUX0ZJTFRFUl9WRikgewogCQlpbnQgaTsKLQotCQlzdHJ1Y3QgbmxhdHRyICp2ZmluZm8sICp2ZiwgKnZmc3RhdHM7CisJCXN0cnVjdCBubGF0dHIgKnZmaW5mbzsKIAkJaW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi0+ZGV2LnBhcmVudCk7CiAKIAkJdmZpbmZvID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJRkxBX1ZGSU5GT19MSVNUKTsKIAkJaWYgKCF2ZmluZm8pCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAkJZm9yIChpID0gMDsgaSA8IG51bV92ZnM7IGkrKykgewotCQkJc3RydWN0IGlmbGFfdmZfaW5mbyBpdmk7Ci0JCQlzdHJ1Y3QgaWZsYV92Zl9tYWMgdmZfbWFjOwotCQkJc3RydWN0IGlmbGFfdmZfdmxhbiB2Zl92bGFuOwotCQkJc3RydWN0IGlmbGFfdmZfcmF0ZSB2Zl9yYXRlOwotCQkJc3RydWN0IGlmbGFfdmZfdHhfcmF0ZSB2Zl90eF9yYXRlOwotCQkJc3RydWN0IGlmbGFfdmZfc3Bvb2ZjaGsgdmZfc3Bvb2ZjaGs7Ci0JCQlzdHJ1Y3QgaWZsYV92Zl9saW5rX3N0YXRlIHZmX2xpbmtzdGF0ZTsKLQkJCXN0cnVjdCBpZmxhX3ZmX3Jzc19xdWVyeV9lbiB2Zl9yc3NfcXVlcnlfZW47Ci0JCQlzdHJ1Y3QgaWZsYV92Zl9zdGF0cyB2Zl9zdGF0czsKLQkJCXN0cnVjdCBpZmxhX3ZmX3RydXN0IHZmX3RydXN0OwotCi0JCQkvKgotCQkJICogTm90IGFsbCBTUi1JT1YgY2FwYWJsZSBkcml2ZXJzIHN1cHBvcnQgdGhlCi0JCQkgKiBzcG9vZmNoZWNrIGFuZCAiUlNTIHF1ZXJ5IGVuYWJsZSIgcXVlcnkuICBQcmVzZXQgdG8KLQkJCSAqIC0xIHNvIHRoZSB1c2VyIHNwYWNlIHRvb2wgY2FuIGRldGVjdCB0aGF0IHRoZSBkcml2ZXIKLQkJCSAqIGRpZG4ndCByZXBvcnQgYW55dGhpbmcuCi0JCQkgKi8KLQkJCWl2aS5zcG9vZmNoayA9IC0xOwotCQkJaXZpLnJzc19xdWVyeV9lbiA9IC0xOwotCQkJaXZpLnRydXN0ZWQgPSAtMTsKLQkJCW1lbXNldChpdmkubWFjLCAwLCBzaXplb2YoaXZpLm1hYykpOwotCQkJLyogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFZGIGxpbmsgc3RhdGUgaXMgImF1dG8iCi0JCQkgKiBJRkxBX1ZGX0xJTktfU1RBVEVfQVVUTyB3aGljaCBlcXVhbHMgemVybwotCQkJICovCi0JCQlpdmkubGlua3N0YXRlID0gMDsKLQkJCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19nZXRfdmZfY29uZmlnKGRldiwgaSwgJml2aSkpCi0JCQkJYnJlYWs7Ci0JCQl2Zl9tYWMudmYgPQotCQkJCXZmX3ZsYW4udmYgPQotCQkJCXZmX3JhdGUudmYgPQotCQkJCXZmX3R4X3JhdGUudmYgPQotCQkJCXZmX3Nwb29mY2hrLnZmID0KLQkJCQl2Zl9saW5rc3RhdGUudmYgPQotCQkJCXZmX3Jzc19xdWVyeV9lbi52ZiA9Ci0JCQkJdmZfdHJ1c3QudmYgPSBpdmkudmY7Ci0KLQkJCW1lbWNweSh2Zl9tYWMubWFjLCBpdmkubWFjLCBzaXplb2YoaXZpLm1hYykpOwotCQkJdmZfdmxhbi52bGFuID0gaXZpLnZsYW47Ci0JCQl2Zl92bGFuLnFvcyA9IGl2aS5xb3M7Ci0JCQl2Zl90eF9yYXRlLnJhdGUgPSBpdmkubWF4X3R4X3JhdGU7Ci0JCQl2Zl9yYXRlLm1pbl90eF9yYXRlID0gaXZpLm1pbl90eF9yYXRlOwotCQkJdmZfcmF0ZS5tYXhfdHhfcmF0ZSA9IGl2aS5tYXhfdHhfcmF0ZTsKLQkJCXZmX3Nwb29mY2hrLnNldHRpbmcgPSBpdmkuc3Bvb2ZjaGs7Ci0JCQl2Zl9saW5rc3RhdGUubGlua19zdGF0ZSA9IGl2aS5saW5rc3RhdGU7Ci0JCQl2Zl9yc3NfcXVlcnlfZW4uc2V0dGluZyA9IGl2aS5yc3NfcXVlcnlfZW47Ci0JCQl2Zl90cnVzdC5zZXR0aW5nID0gaXZpLnRydXN0ZWQ7Ci0JCQl2ZiA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9WRl9JTkZPKTsKLQkJCWlmICghdmYpIHsKLQkJCQlubGFfbmVzdF9jYW5jZWwoc2tiLCB2ZmluZm8pOworCQkJaWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIHZmaW5mbykpCiAJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JCQl9Ci0JCQlpZiAobmxhX3B1dChza2IsIElGTEFfVkZfTUFDLCBzaXplb2YodmZfbWFjKSwgJnZmX21hYykgfHwKLQkJCSAgICBubGFfcHV0KHNrYiwgSUZMQV9WRl9WTEFOLCBzaXplb2YodmZfdmxhbiksICZ2Zl92bGFuKSB8fAotCQkJICAgIG5sYV9wdXQoc2tiLCBJRkxBX1ZGX1JBVEUsIHNpemVvZih2Zl9yYXRlKSwKLQkJCQkgICAgJnZmX3JhdGUpIHx8Ci0JCQkgICAgbmxhX3B1dChza2IsIElGTEFfVkZfVFhfUkFURSwgc2l6ZW9mKHZmX3R4X3JhdGUpLAotCQkJCSAgICAmdmZfdHhfcmF0ZSkgfHwKLQkJCSAgICBubGFfcHV0KHNrYiwgSUZMQV9WRl9TUE9PRkNISywgc2l6ZW9mKHZmX3Nwb29mY2hrKSwKLQkJCQkgICAgJnZmX3Nwb29mY2hrKSB8fAotCQkJICAgIG5sYV9wdXQoc2tiLCBJRkxBX1ZGX0xJTktfU1RBVEUsIHNpemVvZih2Zl9saW5rc3RhdGUpLAotCQkJCSAgICAmdmZfbGlua3N0YXRlKSB8fAotCQkJICAgIG5sYV9wdXQoc2tiLCBJRkxBX1ZGX1JTU19RVUVSWV9FTiwKLQkJCQkgICAgc2l6ZW9mKHZmX3Jzc19xdWVyeV9lbiksCi0JCQkJICAgICZ2Zl9yc3NfcXVlcnlfZW4pIHx8Ci0JCQkgICAgbmxhX3B1dChza2IsIElGTEFfVkZfVFJVU1QsCi0JCQkJICAgIHNpemVvZih2Zl90cnVzdCksICZ2Zl90cnVzdCkpCi0JCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JCQltZW1zZXQoJnZmX3N0YXRzLCAwLCBzaXplb2YodmZfc3RhdHMpKTsKLQkJCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19nZXRfdmZfc3RhdHMpCi0JCQkJZGV2LT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3ZmX3N0YXRzKGRldiwgaSwKLQkJCQkJCQkJICAmdmZfc3RhdHMpOwotCQkJdmZzdGF0cyA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9WRl9TVEFUUyk7Ci0JCQlpZiAoIXZmc3RhdHMpIHsKLQkJCQlubGFfbmVzdF9jYW5jZWwoc2tiLCB2Zik7Ci0JCQkJbmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTsKLQkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQkJCX0KLQkJCWlmIChubGFfcHV0X3U2NChza2IsIElGTEFfVkZfU1RBVFNfUlhfUEFDS0VUUywKLQkJCQkJdmZfc3RhdHMucnhfcGFja2V0cykgfHwKLQkJCSAgICBubGFfcHV0X3U2NChza2IsIElGTEFfVkZfU1RBVFNfVFhfUEFDS0VUUywKLQkJCQkJdmZfc3RhdHMudHhfcGFja2V0cykgfHwKLQkJCSAgICBubGFfcHV0X3U2NChza2IsIElGTEFfVkZfU1RBVFNfUlhfQllURVMsCi0JCQkJCXZmX3N0YXRzLnJ4X2J5dGVzKSB8fAotCQkJICAgIG5sYV9wdXRfdTY0KHNrYiwgSUZMQV9WRl9TVEFUU19UWF9CWVRFUywKLQkJCQkJdmZfc3RhdHMudHhfYnl0ZXMpIHx8Ci0JCQkgICAgbmxhX3B1dF91NjQoc2tiLCBJRkxBX1ZGX1NUQVRTX0JST0FEQ0FTVCwKLQkJCQkJdmZfc3RhdHMuYnJvYWRjYXN0KSB8fAotCQkJICAgIG5sYV9wdXRfdTY0KHNrYiwgSUZMQV9WRl9TVEFUU19NVUxUSUNBU1QsCi0JCQkJCXZmX3N0YXRzLm11bHRpY2FzdCkpCi0JCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JCQlubGFfbmVzdF9lbmQoc2tiLCB2ZnN0YXRzKTsKLQkJCW5sYV9uZXN0X2VuZChza2IsIHZmKTsKIAkJfQorCiAJCW5sYV9uZXN0X2VuZChza2IsIHZmaW5mbyk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zY20uYyBiL25ldC9jb3JlL3NjbS5jCmluZGV4IDNiNjg5OWIuLjhhMTc0MWIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NjbS5jCisrKyBiL25ldC9jb3JlL3NjbS5jCkBAIC0zMDUsNiArMzA1LDggQEAKIAkJCWVyciA9IHB1dF91c2VyKGNtbGVuLCAmY20tPmNtc2dfbGVuKTsKIAkJaWYgKCFlcnIpIHsKIAkJCWNtbGVuID0gQ01TR19TUEFDRShpKnNpemVvZihpbnQpKTsKKwkJCWlmIChtc2ctPm1zZ19jb250cm9sbGVuIDwgY21sZW4pCisJCQkJY21sZW4gPSBtc2ctPm1zZ19jb250cm9sbGVuOwogCQkJbXNnLT5tc2dfY29udHJvbCArPSBjbWxlbjsKIAkJCW1zZy0+bXNnX2NvbnRyb2xsZW4gLT0gY21sZW47CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYWE0MWU2ZC4uYjJkZjM3NSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTM2NDMsNyArMzY0Myw4IEBACiAJc2Vyci0+ZWUuZWVfaW5mbyA9IHRzdHlwZTsKIAlpZiAoc2stPnNrX3RzZmxhZ3MgJiBTT0ZfVElNRVNUQU1QSU5HX09QVF9JRCkgewogCQlzZXJyLT5lZS5lZV9kYXRhID0gc2tiX3NoaW5mbyhza2IpLT50c2tleTsKLQkJaWYgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKKwkJaWYgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCAmJgorCQkgICAgc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0pCiAJCQlzZXJyLT5lZS5lZV9kYXRhIC09IHNrLT5za190c2tleTsKIAl9CiAKQEAgLTQyNjgsNyArNDI2OSw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sIHNrYi0+ZGF0YSAtIFZMQU5fRVRIX0hMRU4sIDIgKiBFVEhfQUxFTik7CisJbWVtbW92ZShza2ItPmRhdGEgLSBFVEhfSExFTiwgc2tiLT5kYXRhIC0gc2tiLT5tYWNfbGVuIC0gVkxBTl9ITEVOLAorCQkyICogRVRIX0FMRU4pOwogCXNrYi0+bWFjX2hlYWRlciArPSBWTEFOX0hMRU47CiAJcmV0dXJuIHNrYjsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCAxZTRkZDU0Li4wZDkxZjdkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC00MzMsOCArNDMzLDYgQEAKIAl9CiB9CiAKLSNkZWZpbmUgU0tfRkxBR1NfVElNRVNUQU1QICgoMVVMIDw8IFNPQ0tfVElNRVNUQU1QKSB8ICgxVUwgPDwgU09DS19USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUpKQotCiBzdGF0aWMgdm9pZCBzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlpZiAoc2stPnNrX2ZsYWdzICYgZmxhZ3MpIHsKQEAgLTg3NCw3ICs4NzIsOCBAQAogCiAJCWlmICh2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX09QVF9JRCAmJgogCQkgICAgIShzay0+c2tfdHNmbGFncyAmIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEKSkgewotCQkJaWYgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgeworCQkJaWYgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCAmJgorCQkJICAgIHNrLT5za190eXBlID09IFNPQ0tfU1RSRUFNKSB7CiAJCQkJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpIHsKIAkJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQkJYnJlYWs7CkBAIC0xNTMwLDcgKzE1MjksNiBAQAogCQlza2JfcXVldWVfaGVhZF9pbml0KCZuZXdzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJm5ld3NrLT5za193cml0ZV9xdWV1ZSk7CiAKLQkJc3Bpbl9sb2NrX2luaXQoJm5ld3NrLT5za19kc3RfbG9jayk7CiAJCXJ3bG9ja19pbml0KCZuZXdzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKCZuZXdzay0+c2tfY2FsbGJhY2tfbG9jaywKIAkJCQlhZl9jYWxsYmFja19rZXlzICsgbmV3c2stPnNrX2ZhbWlseSwKQEAgLTE1NTMsNyArMTU1MSw3IEBACiAJCQkgKi8KIAkJCWlzX2NoYXJnZWQgPSBza19maWx0ZXJfY2hhcmdlKG5ld3NrLCBmaWx0ZXIpOwogCi0JCWlmICh1bmxpa2VseSghaXNfY2hhcmdlZCB8fCB4ZnJtX3NrX2Nsb25lX3BvbGljeShuZXdzaykpKSB7CisJCWlmICh1bmxpa2VseSghaXNfY2hhcmdlZCB8fCB4ZnJtX3NrX2Nsb25lX3BvbGljeShuZXdzaywgc2spKSkgewogCQkJLyogSXQgaXMgc3RpbGwgcmF3IGNvcHkgb2YgcGFyZW50LCBzbyBpbnZhbGlkYXRlCiAJCQkgKiBkZXN0cnVjdG9yIGFuZCBtYWtlIHBsYWluIHNrX2ZyZWUoKSAqLwogCQkJbmV3c2stPnNrX2Rlc3RydWN0ID0gTlVMTDsKQEAgLTE2MDcsNyArMTYwNSw3IEBACiB7CiAJdTMyIG1heF9zZWdzID0gMTsKIAotCV9fc2tfZHN0X3NldChzaywgZHN0KTsKKwlza19kc3Rfc2V0KHNrLCBkc3QpOwogCXNrLT5za19yb3V0ZV9jYXBzID0gZHN0LT5kZXYtPmZlYXR1cmVzOwogCWlmIChzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfR1NPKQogCQlzay0+c2tfcm91dGVfY2FwcyB8PSBORVRJRl9GX0dTT19TT0ZUV0FSRTsKQEAgLTE4MTUsNyArMTgxMyw3IEBACiB7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAKLQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCWZvciAoOzspIHsKIAkJaWYgKCF0aW1lbykKIAkJCWJyZWFrOwpAQCAtMTg2MSw3ICsxODU5LDcgQEAKIAkJaWYgKHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSA8IHNrLT5za19zbmRidWYpCiAJCQlicmVhazsKIAotCQlzZXRfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCQlzZXRfYml0KFNPQ0tfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKIAkJZXJyID0gLUVBR0FJTjsKIAkJaWYgKCF0aW1lbykKQEAgLTIwNDgsOSArMjA0Niw5IEBACiAJREVGSU5FX1dBSVQod2FpdCk7CiAKIAlwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlzZXRfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKIAlyYyA9IHNrX3dhaXRfZXZlbnQoc2ssIHRpbWVvLCBza2JfcGVla190YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkgIT0gc2tiKTsKLQljbGVhcl9iaXQoU09DS19BU1lOQ19XQUlUREFUQSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwlza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CiAJZmluaXNoX3dhaXQoc2tfc2xlZXAoc2spLCAmd2FpdCk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMjM4OCw3ICsyMzg2LDYgQEAKIAl9IGVsc2UKIAkJc2stPnNrX3dxCT0JTlVMTDsKIAotCXNwaW5fbG9ja19pbml0KCZzay0+c2tfZHN0X2xvY2spOwogCXJ3bG9ja19pbml0KCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUoJnNrLT5za19jYWxsYmFja19sb2NrLAogCQkJYWZfY2FsbGJhY2tfa2V5cyArIHNrLT5za19mYW1pbHksCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zdHJlYW0uYyBiL25ldC9jb3JlL3N0cmVhbS5jCmluZGV4IGQ3MGY3N2EwLi5iOTZmN2E3IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zdHJlYW0uYworKysgYi9uZXQvY29yZS9zdHJlYW0uYwpAQCAtMzksNyArMzksNyBAQAogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJndxLT53YWl0LCBQT0xMT1VUIHwKIAkJCQkJCVBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKTsKIAkJaWYgKHdxICYmIHdxLT5mYXN5bmNfbGlzdCAmJiAhKHNrLT5za19zaHV0ZG93biAmIFNFTkRfU0hVVERPV04pKQotCQkJc29ja193YWtlX2FzeW5jKHNvY2ssIFNPQ0tfV0FLRV9TUEFDRSwgUE9MTF9PVVQpOworCQkJc29ja193YWtlX2FzeW5jKHdxLCBTT0NLX1dBS0VfU1BBQ0UsIFBPTExfT1VUKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQpAQCAtMTI2LDcgKzEyNiw3IEBACiAJCWN1cnJlbnRfdGltZW8gPSB2bV93YWl0ID0gKHByYW5kb21fdTMyKCkgJSAoSFogLyA1KSkgKyAyOwogCiAJd2hpbGUgKDEpIHsKLQkJc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTsKIAogCQlwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIApAQCAtMTM5LDcgKzEzOSw3IEBACiAJCX0KIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJZ290byBkb19pbnRlcnJ1cHRlZDsKLQkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7CiAJCWlmIChza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spICYmICF2bV93YWl0KQogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCBkYjVmYzI0Li45YzZkMDUwIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0yMDIsNyArMjAyLDkgQEAKIAlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsIGZsb3dpNl90b19mbG93aSgmZmw2KSk7CiAKIAotCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdCgmZmw2LCBucC0+b3B0LCAmZmluYWwpOworCXJjdV9yZWFkX2xvY2soKTsKKwlmaW5hbF9wID0gZmw2X3VwZGF0ZV9kc3QoJmZsNiwgcmN1X2RlcmVmZXJlbmNlKG5wLT5vcHQpLCAmZmluYWwpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJZHN0ID0gaXA2X2RzdF9sb29rdXBfZmxvdyhzaywgJmZsNiwgZmluYWxfcCk7CiAJaWYgKElTX0VSUihkc3QpKSB7CkBAIC0yMTksNyArMjIxLDEwIEBACiAJCQkJCQkJICZpcmVxLT5pcl92Nl9sb2NfYWRkciwKIAkJCQkJCQkgJmlyZXEtPmlyX3Y2X3JtdF9hZGRyKTsKIAkJZmw2LmRhZGRyID0gaXJlcS0+aXJfdjZfcm10X2FkZHI7Ci0JCWVyciA9IGlwNl94bWl0KHNrLCBza2IsICZmbDYsIG5wLT5vcHQsIG5wLT50Y2xhc3MpOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWVyciA9IGlwNl94bWl0KHNrLCBza2IsICZmbDYsIHJjdV9kZXJlZmVyZW5jZShucC0+b3B0KSwKKwkJCSAgICAgICBucC0+dGNsYXNzKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWVyciA9IG5ldF94bWl0X2V2YWwoZXJyKTsKIAl9CiAKQEAgLTM4Nyw2ICszOTIsNyBAQAogCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5ld25wOwogCWNvbnN0IHN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKKwlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OwogCXN0cnVjdCBkY2NwNl9zb2NrICpuZXdkcDY7CiAJc3RydWN0IHNvY2sgKm5ld3NrOwpAQCAtNDUzLDcgKzQ1OSw3IEBACiAJICogY29tbWVudCBpbiB0aGF0IGZ1bmN0aW9uIGZvciB0aGUgZ29yeSBkZXRhaWxzLiAtYWNtZQogCSAqLwogCi0JX19pcDZfZHN0X3N0b3JlKG5ld3NrLCBkc3QsIE5VTEwsIE5VTEwpOworCWlwNl9kc3Rfc3RvcmUobmV3c2ssIGRzdCwgTlVMTCwgTlVMTCk7CiAJbmV3c2stPnNrX3JvdXRlX2NhcHMgPSBkc3QtPmRldi0+ZmVhdHVyZXMgJiB+KE5FVElGX0ZfSVBfQ1NVTSB8CiAJCQkJCQkgICAgICBORVRJRl9GX1RTTyk7CiAJbmV3ZHA2ID0gKHN0cnVjdCBkY2NwNl9zb2NrICopbmV3c2s7CkBAIC00ODgsMTMgKzQ5NCwxNSBAQAogCSAqIFllcywga2VlcGluZyByZWZlcmVuY2UgY291bnQgd291bGQgYmUgbXVjaCBtb3JlIGNsZXZlciwgYnV0IHdlIG1ha2UKIAkgKiBvbmUgbW9yZSBvbmUgdGhpbmcgdGhlcmU6IHJlYXR0YWNoIG9wdG1lbSB0byBuZXdzay4KIAkgKi8KLQlpZiAobnAtPm9wdCAhPSBOVUxMKQotCQluZXducC0+b3B0ID0gaXB2Nl9kdXBfb3B0aW9ucyhuZXdzaywgbnAtPm9wdCk7Ci0KKwlvcHQgPSByY3VfZGVyZWZlcmVuY2UobnAtPm9wdCk7CisJaWYgKG9wdCkgeworCQlvcHQgPSBpcHY2X2R1cF9vcHRpb25zKG5ld3NrLCBvcHQpOworCQlSQ1VfSU5JVF9QT0lOVEVSKG5ld25wLT5vcHQsIG9wdCk7CisJfQogCWluZXRfY3NrKG5ld3NrKS0+aWNza19leHRfaGRyX2xlbiA9IDA7Ci0JaWYgKG5ld25wLT5vcHQgIT0gTlVMTCkKLQkJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gKG5ld25wLT5vcHQtPm9wdF9uZmxlbiArCi0JCQkJCQkgICAgIG5ld25wLT5vcHQtPm9wdF9mbGVuKTsKKwlpZiAob3B0KQorCQlpbmV0X2NzayhuZXdzayktPmljc2tfZXh0X2hkcl9sZW4gPSBvcHQtPm9wdF9uZmxlbiArCisJCQkJCQkgICAgb3B0LT5vcHRfZmxlbjsKIAogCWRjY3Bfc3luY19tc3MobmV3c2ssIGRzdF9tdHUoZHN0KSk7CiAKQEAgLTc1Nyw2ICs3NjUsNyBAQAogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSBOVUxMLCAqZmluYWxfcCwgZmluYWw7CisJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CiAJc3RydWN0IGZsb3dpNiBmbDY7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBhZGRyX3R5cGU7CkBAIC04NTYsNyArODY1LDggQEAKIAlmbDYuZmw2X3Nwb3J0ID0gaW5ldC0+aW5ldF9zcG9ydDsKIAlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTZfdG9fZmxvd2koJmZsNikpOwogCi0JZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KCZmbDYsIG5wLT5vcHQsICZmaW5hbCk7CisJb3B0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChucC0+b3B0LCBzb2NrX293bmVkX2J5X3VzZXIoc2spKTsKKwlmaW5hbF9wID0gZmw2X3VwZGF0ZV9kc3QoJmZsNiwgb3B0LCAmZmluYWwpOwogCiAJZHN0ID0gaXA2X2RzdF9sb29rdXBfZmxvdyhzaywgJmZsNiwgZmluYWxfcCk7CiAJaWYgKElTX0VSUihkc3QpKSB7CkBAIC04NzMsMTIgKzg4MywxMSBAQAogCW5wLT5zYWRkciA9ICpzYWRkcjsKIAlpbmV0LT5pbmV0X3Jjdl9zYWRkciA9IExPT1BCQUNLNF9JUFY2OwogCi0JX19pcDZfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwsIE5VTEwpOworCWlwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCwgTlVMTCk7CiAKIAlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKLQlpZiAobnAtPm9wdCAhPSBOVUxMKQotCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gKG5wLT5vcHQtPm9wdF9mbGVuICsKLQkJCQkJICBucC0+b3B0LT5vcHRfbmZsZW4pOworCWlmIChvcHQpCisJCWljc2stPmljc2tfZXh0X2hkcl9sZW4gPSBvcHQtPm9wdF9mbGVuICsgb3B0LT5vcHRfbmZsZW47CiAKIAlpbmV0LT5pbmV0X2Rwb3J0ID0gdXNpbi0+c2luNl9wb3J0OwogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9wcm90by5jIGIvbmV0L2RjY3AvcHJvdG8uYwppbmRleCBiNWNmMTNhLi40MWU2NTgwNCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC0zMzksOCArMzM5LDcgQEAKIAkJCWlmIChza19zdHJlYW1faXNfd3JpdGVhYmxlKHNrKSkgewogCQkJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CiAJCQl9IGVsc2UgeyAgLyogc2VuZCBTSUdJTyBsYXRlciAqLwotCQkJCXNldF9iaXQoU09DS19BU1lOQ19OT1NQQUNFLAotCQkJCQkmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCQkJCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTsKIAkJCQlzZXRfYml0KFNPQ0tfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKIAogCQkJCS8qIFJhY2UgYnJlYWtlci4gSWYgc3BhY2UgaXMgZnJlZWQgYWZ0ZXIKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCmluZGV4IDY3NWNmOTQuLjEzZDZiMWEgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwpAQCAtNjc4LDYgKzY3OCw5IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCisJaWYgKHByb3RvY29sIDwgMCB8fCBwcm90b2NvbCA+IFNLX1BST1RPQ09MX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoIW5ldF9lcShuZXQsICZpbml0X25ldCkpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCkBAIC0xNzQ3LDkgKzE3NTAsOSBAQAogCQl9CiAKIAkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNldF9iaXQoU09DS19BU1lOQ19XQUlUREFUQSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKIAkJc2tfd2FpdF9ldmVudChzaywgJnRpbWVvLCBkbl9kYXRhX3JlYWR5KHNrLCBxdWV1ZSwgZmxhZ3MsIHRhcmdldCkpOwotCQljbGVhcl9iaXQoU09DS19BU1lOQ19XQUlUREFUQSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spOwogCQlmaW5pc2hfd2FpdChza19zbGVlcChzayksICZ3YWl0KTsKIAl9CiAKQEAgLTIwMDQsMTAgKzIwMDcsMTAgQEAKIAkJCX0KIAogCQkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzZXRfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCQlza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spOwogCQkJc2tfd2FpdF9ldmVudChzaywgJnRpbWVvLAogCQkJCSAgICAgICFkbl9xdWV1ZV90b29fbG9uZyhzY3AsIHF1ZXVlLCBmbGFncykpOwotCQkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCQlza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CiAJCQlmaW5pc2hfd2FpdChza19zbGVlcChzayksICZ3YWl0KTsKIAkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19xdWVyeS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYwppbmRleCA0Njc3YjZmLi5lY2MyOGNmIDEwMDY0NAotLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19xdWVyeS5jCisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX3F1ZXJ5LmMKQEAgLTY3LDcgKzY3LDcgQEAKICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHJlc3VsdCBvbiBzdWNjZXNzLCAtdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiAgKi8KIGludCBkbnNfcXVlcnkoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCi0JICAgICAgY29uc3QgY2hhciAqb3B0aW9ucywgY2hhciAqKl9yZXN1bHQsIHRpbWVfdCAqX2V4cGlyeSkKKwkgICAgICBjb25zdCBjaGFyICpvcHRpb25zLCBjaGFyICoqX3Jlc3VsdCwgdGltZTY0X3QgKl9leHBpcnkpCiB7CiAJc3RydWN0IGtleSAqcmtleTsKIAljb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9kZXZpY2UuYyBiL25ldC9oc3IvaHNyX2RldmljZS5jCmluZGV4IDM1YTk3ODguLmM3ZDFhZGMgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jCisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAlyZXR1cm47CiAKIG91dDoKLQlXQVJOX09OX09OQ0UoIkhTUjogQ291bGQgbm90IHNlbmQgc3VwZXJ2aXNpb24gZnJhbWVcbiIpOworCVdBUk5fT05DRSgxLCAiSFNSOiBDb3VsZCBub3Qgc2VuZCBzdXBlcnZpc2lvbiBmcmFtZVxuIik7CiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCAxMWM0Y2ExLi41YzVkYjY2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC0yNTcsNiArMjU3LDkgQEAKIAlpbnQgdHJ5X2xvYWRpbmdfbW9kdWxlID0gMDsKIAlpbnQgZXJyOwogCisJaWYgKHByb3RvY29sIDwgMCB8fCBwcm90b2NvbCA+PSBJUFBST1RPX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzb2NrLT5zdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwogCiAJLyogTG9vayBmb3IgdGhlIHJlcXVlc3RlZCB0eXBlL3Byb3RvY29sIHBhaXIuICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IGNjOGYzZTUuLjQ3MzQ0NzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0xMTU1LDYgKzExNTUsNyBAQAogc3RhdGljIGludCBmaWJfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKKwlzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2NoYW5nZXVwcGVyX2luZm8gKmluZm87CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CkBAIC0xMTkzLDYgKzExOTQsMTQgQEAKIAljYXNlIE5FVERFVl9DSEFOR0VNVFU6CiAJCXJ0X2NhY2hlX2ZsdXNoKG5ldCk7CiAJCWJyZWFrOworCWNhc2UgTkVUREVWX0NIQU5HRVVQUEVSOgorCQlpbmZvID0gcHRyOworCQkvKiBmbHVzaCBhbGwgcm91dGVzIGlmIGRldiBpcyBsaW5rZWQgdG8gb3IgdW5saW5rZWQgZnJvbQorCQkgKiBhbiBMMyBtYXN0ZXIgZGV2aWNlIChlLmcuLCBWUkYpCisJCSAqLworCQlpZiAoaW5mby0+dXBwZXJfZGV2ICYmIG5ldGlmX2lzX2wzX21hc3RlcihpbmZvLT51cHBlcl9kZXYpKQorCQkJZmliX2Rpc2FibGVfaXAoZGV2LCBORVRERVZfRE9XTiwgdHJ1ZSk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9mb3UuYyBiL25ldC9pcHY0L2ZvdS5jCmluZGV4IGUwZmNiYmIuLmJkOTAzZmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZvdS5jCisrKyBiL25ldC9pcHY0L2ZvdS5jCkBAIC0yNCw2ICsyNCw3IEBACiAJdTE2IHR5cGU7CiAJc3RydWN0IHVkcF9vZmZsb2FkIHVkcF9vZmZsb2FkczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHJjdV9oZWFkIHJjdTsKIH07CiAKICNkZWZpbmUgRk9VX0ZfUkVNQ1NVTV9OT1BBUlRJQUwgQklUKDApCkBAIC00MTcsNyArNDE4LDcgQEAKIAlsaXN0X2RlbCgmZm91LT5saXN0KTsKIAl1ZHBfdHVubmVsX3NvY2tfcmVsZWFzZShzb2NrKTsKIAotCWtmcmVlKGZvdSk7CisJa2ZyZWVfcmN1KGZvdSwgcmN1KTsKIH0KIAogc3RhdGljIGludCBmb3VfZW5jYXBfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmb3UgKmZvdSwgc3RydWN0IGZvdV9jZmcgKmNmZykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCA2YmFmMzZlLi4wNWU0Y2JhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0yMTI2LDcgKzIxMjYsNyBAQAogCUFTU0VSVF9SVE5MKCk7CiAKIAlpbl9kZXYgPSBpcF9tY19maW5kX2RldihuZXQsIGltcik7Ci0JaWYgKCFpbl9kZXYpIHsKKwlpZiAoIWltci0+aW1yX2lmaW5kZXggJiYgIWltci0+aW1yX2FkZHJlc3Muc19hZGRyICYmICFpbl9kZXYpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjE0Nyw3ICsyMTQ3LDggQEAKIAogCQkqaW1scCA9IGltbC0+bmV4dF9yY3U7CiAKLQkJaXBfbWNfZGVjX2dyb3VwKGluX2RldiwgZ3JvdXApOworCQlpZiAoaW5fZGV2KQorCQkJaXBfbWNfZGVjX2dyb3VwKGluX2RldiwgZ3JvdXApOwogCiAJCS8qIGRlY3JlYXNlIG1lbSBub3cgdG8gYXZvaWQgdGhlIG1lbWxlYWsgd2FybmluZyAqLwogCQlhdG9taWNfc3ViKHNpemVvZigqaW1sKSwgJnNrLT5za19vbWVtX2FsbG9jKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDFmZWIxNWYuLjQ2YjljODggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAJaW50IG1heF9yZXRyaWVzLCB0aHJlc2g7CiAJdTggZGVmZXJfYWNjZXB0OwogCi0JaWYgKHNrX2xpc3RlbmVyLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOKQorCWlmIChza19zdGF0ZV9sb2FkKHNrX2xpc3RlbmVyKSAhPSBUQ1BfTElTVEVOKQogCQlnb3RvIGRyb3A7CiAKIAltYXhfcmV0cmllcyA9IGljc2stPmljc2tfc3luX3JldHJpZXMgPyA6IHN5c2N0bF90Y3Bfc3luYWNrX3JldHJpZXM7CkBAIC03NDksNyArNzQ5LDcgQEAKIAkgKiBJdCBpcyBPSywgYmVjYXVzZSB0aGlzIHNvY2tldCBlbnRlcnMgdG8gaGFzaCB0YWJsZSBvbmx5CiAJICogYWZ0ZXIgdmFsaWRhdGlvbiBpcyBjb21wbGV0ZS4KIAkgKi8KLQlzay0+c2tfc3RhdGUgPSBUQ1BfTElTVEVOOworCXNrX3N0YXRlX3N0b3JlKHNrLCBUQ1BfTElTVEVOKTsKIAlpZiAoIXNrLT5za19wcm90LT5nZXRfcG9ydChzaywgaW5ldC0+aW5ldF9udW0pKSB7CiAJCWluZXQtPmluZXRfc3BvcnQgPSBodG9ucyhpbmV0LT5pbmV0X251bSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBmMzRjMzFkLi5hMDlmYjBkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0yNTMsOSArMjUzLDYgQEAKIAogCXAuaV9rZXkgPSBwLm9fa2V5ID0gMDsKIAlwLmlfZmxhZ3MgPSBwLm9fZmxhZ3MgPSAwOwotCWlmIChwLmlwaC50dGwpCi0JCXAuaXBoLmZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTsKLQogCWVyciA9IGlwX3R1bm5lbF9pb2N0bChkZXYsICZwLCBjbWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggOTJkZDRiNy4uYzNhMzgzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCisrKyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgbWZjX2NhY2hlICpjLCBzdHJ1Y3QgcnRtc2cgKnJ0bSk7CiBzdGF0aWMgdm9pZCBtcm91dGVfbmV0bGlua19ldmVudChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mY19jYWNoZSAqbWZjLAogCQkJCSBpbnQgY21kKTsKLXN0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG1yX3RhYmxlICptcnQpOworc3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgYm9vbCBhbGwpOwogc3RhdGljIHZvaWQgaXBtcl9leHBpcmVfcHJvY2Vzcyh1bnNpZ25lZCBsb25nIGFyZyk7CiAKICNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUwpAQCAtMzUwLDcgKzM1MCw3IEBACiBzdGF0aWMgdm9pZCBpcG1yX2ZyZWVfdGFibGUoc3RydWN0IG1yX3RhYmxlICptcnQpCiB7CiAJZGVsX3RpbWVyX3N5bmMoJm1ydC0+aXBtcl9leHBpcmVfdGltZXIpOwotCW1yb3V0ZV9jbGVhbl90YWJsZXMobXJ0KTsKKwltcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgdHJ1ZSk7CiAJa2ZyZWUobXJ0KTsKIH0KIApAQCAtNDQxLDEwICs0NDEsNiBAQAogCXJldHVybiBkZXY7CiAKIGZhaWx1cmU6Ci0JLyogYWxsb3cgdGhlIHJlZ2lzdGVyIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgdW5yZWdpc3RlcmluZy4gKi8KLQlydG5sX3VubG9jaygpOwotCXJ0bmxfbG9jaygpOwotCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTU0MCwxMCArNTM2LDYgQEAKIAlyZXR1cm4gZGV2OwogCiBmYWlsdXJlOgotCS8qIGFsbG93IHRoZSByZWdpc3RlciB0byBiZSBjb21wbGV0ZWQgYmVmb3JlIHVucmVnaXN0ZXJpbmcuICovCi0JcnRubF91bmxvY2soKTsKLQlydG5sX2xvY2soKTsKLQogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xMjA4LDcgKzEyMDAsNyBAQAogICoJQ2xvc2UgdGhlIG11bHRpY2FzdCBzb2NrZXQsIGFuZCBjbGVhciB0aGUgdmlmIHRhYmxlcyBldGMKICAqLwogCi1zdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBtcl90YWJsZSAqbXJ0KQorc3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgYm9vbCBhbGwpCiB7CiAJaW50IGk7CiAJTElTVF9IRUFEKGxpc3QpOwpAQCAtMTIxNyw4ICsxMjA5LDkgQEAKIAkvKiBTaHV0IGRvd24gYWxsIGFjdGl2ZSB2aWYgZW50cmllcyAqLwogCiAJZm9yIChpID0gMDsgaSA8IG1ydC0+bWF4dmlmOyBpKyspIHsKLQkJaWYgKCEobXJ0LT52aWZfdGFibGVbaV0uZmxhZ3MgJiBWSUZGX1NUQVRJQykpCi0JCQl2aWZfZGVsZXRlKG1ydCwgaSwgMCwgJmxpc3QpOworCQlpZiAoIWFsbCAmJiAobXJ0LT52aWZfdGFibGVbaV0uZmxhZ3MgJiBWSUZGX1NUQVRJQykpCisJCQljb250aW51ZTsKKwkJdmlmX2RlbGV0ZShtcnQsIGksIDAsICZsaXN0KTsKIAl9CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmbGlzdCk7CiAKQEAgLTEyMjYsNyArMTIxOSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgTUZDX0xJTkVTOyBpKyspIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGMsIG5leHQsICZtcnQtPm1mY19jYWNoZV9hcnJheVtpXSwgbGlzdCkgewotCQkJaWYgKGMtPm1mY19mbGFncyAmIE1GQ19TVEFUSUMpCisJCQlpZiAoIWFsbCAmJiAoYy0+bWZjX2ZsYWdzICYgTUZDX1NUQVRJQykpCiAJCQkJY29udGludWU7CiAJCQlsaXN0X2RlbF9yY3UoJmMtPmxpc3QpOwogCQkJbXJvdXRlX25ldGxpbmtfZXZlbnQobXJ0LCBjLCBSVE1fREVMUk9VVEUpOwpAQCAtMTI2MSw3ICsxMjU0LDcgQEAKIAkJCQkJCSAgICBORVRDT05GQV9JRklOREVYX0FMTCwKIAkJCQkJCSAgICBuZXQtPmlwdjQuZGV2Y29uZl9hbGwpOwogCQkJUkNVX0lOSVRfUE9JTlRFUihtcnQtPm1yb3V0ZV9zaywgTlVMTCk7Ci0JCQltcm91dGVfY2xlYW5fdGFibGVzKG1ydCk7CisJCQltcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgZmFsc2UpOwogCQl9CiAJfQogCXJ0bmxfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGEzNTU4NDEuLmMxODdjNjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCkBAIC02MCw2ICs2MCw3IEBACiAKIGNvbmZpZyBORlRfRFVQX0lQVjQKIAl0cmlzdGF0ZSAiSVB2NCBuZl90YWJsZXMgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSwogCXNlbGVjdCBORl9EVVBfSVBWNAogCWhlbHAKIAkgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydCBmb3IgbmZfdGFibGVzLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcHRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYwppbmRleCA2NTdkMjMwLi5iM2NhMjFiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYwpAQCAtNDUsNyArNDUsNyBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKm1hc3RlciA9IGN0LT5tYXN0ZXI7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm90aGVyX2V4cDsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHQ7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0ID0ge307CiAJY29uc3Qgc3RydWN0IG5mX2N0X3BwdHBfbWFzdGVyICpjdF9wcHRwX2luZm87CiAJY29uc3Qgc3RydWN0IG5mX25hdF9wcHRwICpuYXRfcHB0cF9pbmZvOwogCXN0cnVjdCBuZl9uYXRfcmFuZ2UgcmFuZ2U7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IDhjMGQwYmQuLjYzZTViZTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC00MDYsMTAgKzQwNiwxMiBAQAogCQkJaXBfc2VsZWN0X2lkZW50KG5ldCwgc2tiLCBOVUxMKTsKIAogCQlpcGgtPmNoZWNrID0gaXBfZmFzdF9jc3VtKCh1bnNpZ25lZCBjaGFyICopaXBoLCBpcGgtPmlobCk7CisJCXNrYi0+dHJhbnNwb3J0X2hlYWRlciArPSBpcGhsZW47CisJCWlmIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fSUNNUCAmJgorCQkgICAgbGVuZ3RoID49IGlwaGxlbiArIHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpCisJCQlpY21wX291dF9jb3VudChuZXQsICgoc3RydWN0IGljbXBoZHIgKikKKwkJCQlza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpKS0+dHlwZSk7CiAJfQotCWlmIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fSUNNUCkKLQkJaWNtcF9vdXRfY291bnQobmV0LCAoKHN0cnVjdCBpY21waGRyICopCi0JCQlza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpKS0+dHlwZSk7CiAKIAllcnIgPSBORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9MT0NBTF9PVVQsCiAJCSAgICAgIG5ldCwgc2ssIHNrYiwgTlVMTCwgcnQtPmRzdC5kZXYsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDBjZmE3YzAuLmM4MmNjYTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC00NTEsMTEgKzQ1MSwxNCBAQAogCXVuc2lnbmVkIGludCBtYXNrOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCWludCBzdGF0ZTsKIAogCXNvY2tfcnBzX3JlY29yZF9mbG93KHNrKTsKIAogCXNvY2tfcG9sbF93YWl0KGZpbGUsIHNrX3NsZWVwKHNrKSwgd2FpdCk7Ci0JaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKQorCisJc3RhdGUgPSBza19zdGF0ZV9sb2FkKHNrKTsKKwlpZiAoc3RhdGUgPT0gVENQX0xJU1RFTikKIAkJcmV0dXJuIGluZXRfY3NrX2xpc3Rlbl9wb2xsKHNrKTsKIAogCS8qIFNvY2tldCBpcyBub3QgbG9ja2VkLiBXZSBhcmUgcHJvdGVjdGVkIGZyb20gYXN5bmMgZXZlbnRzCkBAIC00OTIsMTQgKzQ5NSwxNCBAQAogCSAqIE5PVEUuIENoZWNrIGZvciBUQ1BfQ0xPU0UgaXMgYWRkZWQuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQKIAkgKiBibG9ja2luZyBvbiBmcmVzaCBub3QtY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZCBzb2NrZXQuIC0tQU5LCiAJICovCi0JaWYgKHNrLT5za19zaHV0ZG93biA9PSBTSFVURE9XTl9NQVNLIHx8IHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0UpCisJaWYgKHNrLT5za19zaHV0ZG93biA9PSBTSFVURE9XTl9NQVNLIHx8IHN0YXRlID09IFRDUF9DTE9TRSkKIAkJbWFzayB8PSBQT0xMSFVQOwogCWlmIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pCiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STSB8IFBPTExSREhVUDsKIAogCS8qIENvbm5lY3RlZCBvciBwYXNzaXZlIEZhc3QgT3BlbiBzb2NrZXQ/ICovCi0JaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfU1lOX1NFTlQgJiYKLQkgICAgKHNrLT5za19zdGF0ZSAhPSBUQ1BfU1lOX1JFQ1YgfHwgdHAtPmZhc3RvcGVuX3JzaykpIHsKKwlpZiAoc3RhdGUgIT0gVENQX1NZTl9TRU5UICYmCisJICAgIChzdGF0ZSAhPSBUQ1BfU1lOX1JFQ1YgfHwgdHAtPmZhc3RvcGVuX3JzaykpIHsKIAkJaW50IHRhcmdldCA9IHNvY2tfcmN2bG93YXQoc2ssIDAsIElOVF9NQVgpOwogCiAJCWlmICh0cC0+dXJnX3NlcSA9PSB0cC0+Y29waWVkX3NlcSAmJgpAQCAtNTA3LDkgKzUxMCw2IEBACiAJCSAgICB0cC0+dXJnX2RhdGEpCiAJCQl0YXJnZXQrKzsKIAotCQkvKiBQb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uIElmIHJlYWQgb2YgdHAgYmVsb3cgd2lsbAotCQkgKiBlc2NhcGUgYWJvdmUgc2stPnNrX3N0YXRlLCB3ZSBjYW4gYmUgaWxsZWdhbGx5IGF3YWtlbgotCQkgKiBpbiBTWU5fKiBzdGF0ZXMuICovCiAJCWlmICh0cC0+cmN2X254dCAtIHRwLT5jb3BpZWRfc2VxID49IHRhcmdldCkKIAkJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIApAQCAtNTE3LDggKzUxNyw3IEBACiAJCQlpZiAoc2tfc3RyZWFtX2lzX3dyaXRlYWJsZShzaykpIHsKIAkJCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwogCQkJfSBlbHNlIHsgIC8qIHNlbmQgU0lHSU8gbGF0ZXIgKi8KLQkJCQlzZXRfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwKLQkJCQkJJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJCQlza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7CiAJCQkJc2V0X2JpdChTT0NLX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CiAKIAkJCQkvKiBSYWNlIGJyZWFrZXIuIElmIHNwYWNlIGlzIGZyZWVkIGFmdGVyCkBAIC05MDYsNyArOTA1LDcgQEAKIAkJCWdvdG8gb3V0X2VycjsKIAl9CiAKLQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiAJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCWNvcGllZCA9IDA7CkBAIC0xMTM0LDcgKzExMzMsNyBAQAogCX0KIAogCS8qIFRoaXMgc2hvdWxkIGJlIGluIHBvbGwgKi8KLQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiAJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCkBAIC0xOTM0LDcgKzE5MzMsNyBAQAogCS8qIENoYW5nZSBzdGF0ZSBBRlRFUiBzb2NrZXQgaXMgdW5oYXNoZWQgdG8gYXZvaWQgY2xvc2VkCiAJICogc29ja2V0IHNpdHRpbmcgaW4gaGFzaCB0YWJsZXMuCiAJICovCi0Jc2stPnNrX3N0YXRlID0gc3RhdGU7CisJc2tfc3RhdGVfc3RvcmUoc2ssIHN0YXRlKTsKIAogI2lmZGVmIFNUQVRFX1RSQUNFCiAJU09DS19ERUJVRyhzaywgIlRDUCBzaz0lcCwgU3RhdGUgJXMgLT4gJXNcbiIsIHNrLCBzdGF0ZW5hbWVbb2xkc3RhdGVdLCBzdGF0ZW5hbWVbc3RhdGVdKTsKQEAgLTI2NDQsNyArMjY0Myw4IEBACiAJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKQogCQlyZXR1cm47CiAKLQlpbmZvLT50Y3BpX3N0YXRlID0gc2stPnNrX3N0YXRlOworCWluZm8tPnRjcGlfc3RhdGUgPSBza19zdGF0ZV9sb2FkKHNrKTsKKwogCWluZm8tPnRjcGlfY2Ffc3RhdGUgPSBpY3NrLT5pY3NrX2NhX3N0YXRlOwogCWluZm8tPnRjcGlfcmV0cmFuc21pdHMgPSBpY3NrLT5pY3NrX3JldHJhbnNtaXRzOwogCWluZm8tPnRjcGlfcHJvYmVzID0gaWNzay0+aWNza19wcm9iZXNfb3V0OwpAQCAtMjY3Miw3ICsyNjcyLDcgQEAKIAlpbmZvLT50Y3BpX3NuZF9tc3MgPSB0cC0+bXNzX2NhY2hlOwogCWluZm8tPnRjcGlfcmN2X21zcyA9IGljc2stPmljc2tfYWNrLnJjdl9tc3M7CiAKLQlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pIHsKKwlpZiAoaW5mby0+dGNwaV9zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7CiAJCWluZm8tPnRjcGlfdW5hY2tlZCA9IHNrLT5za19hY2tfYmFja2xvZzsKIAkJaW5mby0+dGNwaV9zYWNrZWQgPSBzay0+c2tfbWF4X2Fja19iYWNrbG9nOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGlhZy5jIGIvbmV0L2lwdjQvdGNwX2RpYWcuYwppbmRleCA0NzlmMzQ5Li5iMzE2MDQwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfZGlhZy5jCisrKyBiL25ldC9pcHY0L3RjcF9kaWFnLmMKQEAgLTIxLDcgKzIxLDcgQEAKIHsKIAlzdHJ1Y3QgdGNwX2luZm8gKmluZm8gPSBfaW5mbzsKIAotCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgeworCWlmIChza19zdGF0ZV9sb2FkKHNrKSA9PSBUQ1BfTElTVEVOKSB7CiAJCXItPmlkaWFnX3JxdWV1ZSA9IHNrLT5za19hY2tfYmFja2xvZzsKIAkJci0+aWRpYWdfd3F1ZXVlID0gc2stPnNrX21heF9hY2tfYmFja2xvZzsKIAl9IGVsc2UgaWYgKHNrLT5za190eXBlID09IFNPQ0tfU1RSRUFNKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGZkZDg4YzMuLjJkNjU2ZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC00NDgxLDE5ICs0NDgxLDM0IEBACiBpbnQgdGNwX3NlbmRfcmN2cShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlpbnQgZGF0YV9sZW4gPSAwOwogCWJvb2wgZnJhZ3N0b2xlbjsKIAogCWlmIChzaXplID09IDApCiAJCXJldHVybiAwOwogCi0Jc2tiID0gYWxsb2Nfc2tiKHNpemUsIHNrLT5za19hbGxvY2F0aW9uKTsKKwlpZiAoc2l6ZSA+IFBBR0VfU0laRSkgeworCQlpbnQgbnBhZ2VzID0gbWluX3Qoc2l6ZV90LCBzaXplID4+IFBBR0VfU0hJRlQsIE1BWF9TS0JfRlJBR1MpOworCisJCWRhdGFfbGVuID0gbnBhZ2VzIDw8IFBBR0VfU0hJRlQ7CisJCXNpemUgPSBkYXRhX2xlbiArIChzaXplICYgflBBR0VfTUFTSyk7CisJfQorCXNrYiA9IGFsbG9jX3NrYl93aXRoX2ZyYWdzKHNpemUgLSBkYXRhX2xlbiwgZGF0YV9sZW4sCisJCQkJICAgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIsCisJCQkJICAgJmVyciwgc2stPnNrX2FsbG9jYXRpb24pOwogCWlmICghc2tiKQogCQlnb3RvIGVycjsKIAorCXNrYl9wdXQoc2tiLCBzaXplIC0gZGF0YV9sZW4pOworCXNrYi0+ZGF0YV9sZW4gPSBkYXRhX2xlbjsKKwlza2ItPmxlbiA9IHNpemU7CisKIAlpZiAodGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IsIHNrYi0+dHJ1ZXNpemUpKQogCQlnb3RvIGVycl9mcmVlOwogCi0JaWYgKG1lbWNweV9mcm9tX21zZyhza2JfcHV0KHNrYiwgc2l6ZSksIG1zZywgc2l6ZSkpCisJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgMCwgJm1zZy0+bXNnX2l0ZXIsIHNpemUpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKIAlUQ1BfU0tCX0NCKHNrYiktPnNlcSA9IHRjcF9zayhzayktPnJjdl9ueHQ7CkBAIC00NTA5LDcgKzQ1MjQsOCBAQAogZXJyX2ZyZWU6CiAJa2ZyZWVfc2tiKHNrYik7CiBlcnI6Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIGVycjsKKwogfQogCiBzdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCkBAIC01NjY3LDYgKzU2ODMsNyBAQAogCQl9CiAKIAkJdHAtPnJjdl9ueHQgPSBUQ1BfU0tCX0NCKHNrYiktPnNlcSArIDE7CisJCXRwLT5jb3BpZWRfc2VxID0gdHAtPnJjdl9ueHQ7CiAJCXRwLT5yY3Zfd3VwID0gVENQX1NLQl9DQihza2IpLT5zZXEgKyAxOwogCiAJCS8qIFJGQzEzMjM6IFRoZSB3aW5kb3cgaW4gU1lOICYgU1lOL0FDSyBzZWdtZW50cyBpcwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggOTUwZTI4Yy4uZDg4NDFhMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC05MjEsNyArOTIxLDggQEAKIAl9CiAKIAltZDVzaWcgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHRwLT5tZDVzaWdfaW5mbywKLQkJCQkJICAgc29ja19vd25lZF9ieV91c2VyKHNrKSk7CisJCQkJCSAgIHNvY2tfb3duZWRfYnlfdXNlcihzaykgfHwKKwkJCQkJICAgbG9ja2RlcF9pc19oZWxkKCZzay0+c2tfbG9jay5zbG9jaykpOwogCWlmICghbWQ1c2lnKSB7CiAJCW1kNXNpZyA9IGttYWxsb2Moc2l6ZW9mKCptZDVzaWcpLCBnZnApOwogCQlpZiAoIW1kNXNpZykKQEAgLTE0OTIsNyArMTQ5Myw3IEBACiAJaWYgKGxpa2VseShzay0+c2tfcnhfZHN0KSkKIAkJc2tiX2RzdF9kcm9wKHNrYik7CiAJZWxzZQotCQlza2JfZHN0X2ZvcmNlKHNrYik7CisJCXNrYl9kc3RfZm9yY2Vfc2FmZShza2IpOwogCiAJX19za2JfcXVldWVfdGFpbCgmdHAtPnVjb3B5LnByZXF1ZXVlLCBza2IpOwogCXRwLT51Y29weS5tZW1vcnkgKz0gc2tiLT50cnVlc2l6ZTsKQEAgLTE3MjAsOCArMTcyMSw3IEBACiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpOwogCi0JaWYgKGRzdCkgewotCQlkc3RfaG9sZChkc3QpOworCWlmIChkc3QgJiYgZHN0X2hvbGRfc2FmZShkc3QpKSB7CiAJCXNrLT5za19yeF9kc3QgPSBkc3Q7CiAJCWluZXRfc2soc2spLT5yeF9kc3RfaWZpbmRleCA9IHNrYi0+c2tiX2lpZjsKIAl9CkBAIC0yMTU4LDYgKzIxNTgsNyBAQAogCV9fdTE2IGRlc3RwID0gbnRvaHMoaW5ldC0+aW5ldF9kcG9ydCk7CiAJX191MTYgc3JjcCA9IG50b2hzKGluZXQtPmluZXRfc3BvcnQpOwogCWludCByeF9xdWV1ZTsKKwlpbnQgc3RhdGU7CiAKIAlpZiAoaWNzay0+aWNza19wZW5kaW5nID09IElDU0tfVElNRV9SRVRSQU5TIHx8CiAJICAgIGljc2stPmljc2tfcGVuZGluZyA9PSBJQ1NLX1RJTUVfRUFSTFlfUkVUUkFOUyB8fApAQCAtMjE3NSwxNyArMjE3NiwxOCBAQAogCQl0aW1lcl9leHBpcmVzID0gamlmZmllczsKIAl9CiAKLQlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pCisJc3RhdGUgPSBza19zdGF0ZV9sb2FkKHNrKTsKKwlpZiAoc3RhdGUgPT0gVENQX0xJU1RFTikKIAkJcnhfcXVldWUgPSBzay0+c2tfYWNrX2JhY2tsb2c7CiAJZWxzZQotCQkvKgotCQkgKiBiZWNhdXNlIHdlIGRvbnQgbG9jayBzb2NrZXQsIHdlIG1pZ2h0IGZpbmQgYSB0cmFuc2llbnQgbmVnYXRpdmUgdmFsdWUKKwkJLyogQmVjYXVzZSB3ZSBkb24ndCBsb2NrIHRoZSBzb2NrZXQsCisJCSAqIHdlIG1pZ2h0IGZpbmQgYSB0cmFuc2llbnQgbmVnYXRpdmUgdmFsdWUuCiAJCSAqLwogCQlyeF9xdWV1ZSA9IG1heF90KGludCwgdHAtPnJjdl9ueHQgLSB0cC0+Y29waWVkX3NlcSwgMCk7CiAKIAlzZXFfcHJpbnRmKGYsICIlNGQ6ICUwOFg6JTA0WCAlMDhYOiUwNFggJTAyWCAlMDhYOiUwOFggJTAyWDolMDhsWCAiCiAJCQkiJTA4WCAlNXUgJThkICVsdSAlZCAlcEsgJWx1ICVsdSAldSAldSAlZCIsCi0JCWksIHNyYywgc3JjcCwgZGVzdCwgZGVzdHAsIHNrLT5za19zdGF0ZSwKKwkJaSwgc3JjLCBzcmNwLCBkZXN0LCBkZXN0cCwgc3RhdGUsCiAJCXRwLT53cml0ZV9zZXEgLSB0cC0+c25kX3VuYSwKIAkJcnhfcXVldWUsCiAJCXRpbWVyX2FjdGl2ZSwKQEAgLTIxOTksOCArMjIwMSw4IEBACiAJCWppZmZpZXNfdG9fY2xvY2tfdChpY3NrLT5pY3NrX2Fjay5hdG8pLAogCQkoaWNzay0+aWNza19hY2sucXVpY2sgPDwgMSkgfCBpY3NrLT5pY3NrX2Fjay5waW5ncG9uZywKIAkJdHAtPnNuZF9jd25kLAotCQlzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTiA/Ci0JCSAgICAoZmFzdG9wZW5xID8gZmFzdG9wZW5xLT5tYXhfcWxlbiA6IDApIDoKKwkJc3RhdGUgPT0gVENQX0xJU1RFTiA/CisJCSAgICBmYXN0b3BlbnEtPm1heF9xbGVuIDoKIAkJICAgICh0Y3BfaW5faW5pdGlhbF9zbG93c3RhcnQodHApID8gLTEgOiB0cC0+c25kX3NzdGhyZXNoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCBjYjdjYTU2Li45YmZjMzlmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0zMTUwLDcgKzMxNTAsNyBAQAogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCB0Y3BfZmFzdG9wZW5fcmVxdWVzdCAqZm8gPSB0cC0+ZmFzdG9wZW5fcmVxOwotCWludCBzeW5fbG9zcyA9IDAsIHNwYWNlLCBlcnIgPSAwLCBjb3BpZWQ7CisJaW50IHN5bl9sb3NzID0gMCwgc3BhY2UsIGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3N5bl9sb3NzID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc3luX2RhdGE7CiAKQEAgLTMxODgsMTcgKzMxODgsMTggQEAKIAkJZ290byBmYWxsYmFjazsKIAlzeW5fZGF0YS0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAltZW1jcHkoc3luX2RhdGEtPmNiLCBzeW4tPmNiLCBzaXplb2Yoc3luLT5jYikpOwotCWNvcGllZCA9IGNvcHlfZnJvbV9pdGVyKHNrYl9wdXQoc3luX2RhdGEsIHNwYWNlKSwgc3BhY2UsCi0JCQkJJmZvLT5kYXRhLT5tc2dfaXRlcik7Ci0JaWYgKHVubGlrZWx5KCFjb3BpZWQpKSB7Ci0JCWtmcmVlX3NrYihzeW5fZGF0YSk7Ci0JCWdvdG8gZmFsbGJhY2s7CisJaWYgKHNwYWNlKSB7CisJCWludCBjb3BpZWQgPSBjb3B5X2Zyb21faXRlcihza2JfcHV0KHN5bl9kYXRhLCBzcGFjZSksIHNwYWNlLAorCQkJCQkgICAgJmZvLT5kYXRhLT5tc2dfaXRlcik7CisJCWlmICh1bmxpa2VseSghY29waWVkKSkgeworCQkJa2ZyZWVfc2tiKHN5bl9kYXRhKTsKKwkJCWdvdG8gZmFsbGJhY2s7CisJCX0KKwkJaWYgKGNvcGllZCAhPSBzcGFjZSkgeworCQkJc2tiX3RyaW0oc3luX2RhdGEsIGNvcGllZCk7CisJCQlzcGFjZSA9IGNvcGllZDsKKwkJfQogCX0KLQlpZiAoY29waWVkICE9IHNwYWNlKSB7Ci0JCXNrYl90cmltKHN5bl9kYXRhLCBjb3BpZWQpOwotCQlzcGFjZSA9IGNvcGllZDsKLQl9Ci0KIAkvKiBObyBtb3JlIGRhdGEgcGVuZGluZyBpbiBpbmV0X3dhaXRfZm9yX2Nvbm5lY3QoKSAqLwogCWlmIChzcGFjZSA9PSBmby0+c2l6ZSkKIAkJZm8tPmRhdGEgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwppbmRleCBjOWM3MTZhLi4xOTNiYTFmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuYworKysgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCQlkc3RfbmVnYXRpdmVfYWR2aWNlKHNrKTsKIAkJCWlmICh0cC0+c3luX2Zhc3RvcGVuIHx8IHRwLT5zeW5fZGF0YSkKIAkJCQl0Y3BfZmFzdG9wZW5fY2FjaGVfc2V0KHNrLCAwLCBOVUxMLCB0cnVlLCAwKTsKLQkJCWlmICh0cC0+c3luX2RhdGEpCisJCQlpZiAodHAtPnN5bl9kYXRhICYmIGljc2stPmljc2tfcmV0cmFuc21pdHMgPT0gMSkKIAkJCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwKIAkJCQkJCSBMSU5VWF9NSUJfVENQRkFTVE9QRU5BQ1RJVkVGQUlMKTsKIAkJfQpAQCAtMTc2LDYgKzE3NiwxOCBAQAogCQlzeW5fc2V0ID0gdHJ1ZTsKIAl9IGVsc2UgewogCQlpZiAocmV0cmFuc21pdHNfdGltZWRfb3V0KHNrLCBzeXNjdGxfdGNwX3JldHJpZXMxLCAwLCAwKSkgeworCQkJLyogU29tZSBtaWRkbGUtYm94ZXMgbWF5IGJsYWNrLWhvbGUgRmFzdCBPcGVuIF9hZnRlcl8KKwkJCSAqIHRoZSBoYW5kc2hha2UuIFRoZXJlZm9yZSB3ZSBjb25zZXJ2YXRpdmVseSBkaXNhYmxlCisJCQkgKiBGYXN0IE9wZW4gb24gdGhpcyBwYXRoIG9uIHJlY3VycmluZyB0aW1lb3V0cyB3aXRoCisJCQkgKiBmZXcgb3IgemVybyBieXRlcyBhY2tlZCBhZnRlciBGYXN0IE9wZW4uCisJCQkgKi8KKwkJCWlmICh0cC0+c3luX2RhdGFfYWNrZWQgJiYKKwkJCSAgICB0cC0+Ynl0ZXNfYWNrZWQgPD0gdHAtPnJ4X29wdC5tc3NfY2xhbXApIHsKKwkJCQl0Y3BfZmFzdG9wZW5fY2FjaGVfc2V0KHNrLCAwLCBOVUxMLCB0cnVlLCAwKTsKKwkJCQlpZiAoaWNzay0+aWNza19yZXRyYW5zbWl0cyA9PSBzeXNjdGxfdGNwX3JldHJpZXMxKQorCQkJCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwKKwkJCQkJCQkgTElOVVhfTUlCX1RDUEZBU1RPUEVOQUNUSVZFRkFJTCk7CisJCQl9CiAJCQkvKiBCbGFjayBob2xlIGRldGVjdGlvbiAqLwogCQkJdGNwX210dV9wcm9iaW5nKGljc2ssIHNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCAyNGVjMTRmOS4uMGM3YjBlNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTEwMCw3ICsxMDAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDFlMGMzYzguLjdiMGVkYjMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0yNTksNyArMjU5LDcgQEAKIAl4ZnJtX2RzdF9pZmRvd24oZHN0LCBkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTRfZHN0X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHN0X29wcyB4ZnJtNF9kc3Rfb3BzX3RlbXBsYXRlID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVCwKIAkuZ2MgPQkJCXhmcm00X2dhcmJhZ2VfY29sbGVjdCwKIAkudXBkYXRlX3BtdHUgPQkJeGZybTRfdXBkYXRlX3BtdHUsCkBAIC0yNzMsNyArMjczLDcgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTRfcG9saWN5X2FmaW5mbyA9IHsKIAkuZmFtaWx5ID0gCQlBRl9JTkVULAotCS5kc3Rfb3BzID0JCSZ4ZnJtNF9kc3Rfb3BzLAorCS5kc3Rfb3BzID0JCSZ4ZnJtNF9kc3Rfb3BzX3RlbXBsYXRlLAogCS5kc3RfbG9va3VwID0JCXhmcm00X2RzdF9sb29rdXAsCiAJLmdldF9zYWRkciA9CQl4ZnJtNF9nZXRfc2FkZHIsCiAJLmRlY29kZV9zZXNzaW9uID0JX2RlY29kZV9zZXNzaW9uNCwKQEAgLTI5NSw3ICsyOTUsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCBfX25ldF9pbml0IHhmcm00X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7CkBAIC0zMjMsNyArMzIzLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCB4ZnJtNF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHhmcm00X25ldF9zeXNjdGxfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKQEAgLTMzNSwxMiArMzM1LDQ0IEBACiAJaWYgKCFuZXRfZXEobmV0LCAmaW5pdF9uZXQpKQogCQlrZnJlZSh0YWJsZSk7CiB9CisjZWxzZSAvKiBDT05GSUdfU1lTQ1RMICovCitzdGF0aWMgaW50IGlubGluZSB4ZnJtNF9uZXRfc3lzY3RsX2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgeGZybTRfbmV0X3N5c2N0bF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCWludCByZXQ7CisKKwltZW1jcHkoJm5ldC0+eGZybS54ZnJtNF9kc3Rfb3BzLCAmeGZybTRfZHN0X29wc190ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mKHhmcm00X2RzdF9vcHNfdGVtcGxhdGUpKTsKKwlyZXQgPSBkc3RfZW50cmllc19pbml0KCZuZXQtPnhmcm0ueGZybTRfZHN0X29wcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHhmcm00X25ldF9zeXNjdGxfaW5pdChuZXQpOworCWlmIChyZXQpCisJCWRzdF9lbnRyaWVzX2Rlc3Ryb3koJm5ldC0+eGZybS54ZnJtNF9kc3Rfb3BzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgeGZybTRfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCXhmcm00X25ldF9zeXNjdGxfZXhpdChuZXQpOworCWRzdF9lbnRyaWVzX2Rlc3Ryb3koJm5ldC0+eGZybS54ZnJtNF9kc3Rfb3BzKTsKK30KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBfX25ldF9pbml0ZGF0YSB4ZnJtNF9uZXRfb3BzID0gewogCS5pbml0CT0geGZybTRfbmV0X2luaXQsCiAJLmV4aXQJPSB4ZnJtNF9uZXRfZXhpdCwKIH07Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgX19pbml0IHhmcm00X3BvbGljeV9pbml0KHZvaWQpCiB7CkBAIC0zNDksMTMgKzM4MSw5IEBACiAKIHZvaWQgX19pbml0IHhmcm00X2luaXQodm9pZCkKIHsKLQlkc3RfZW50cmllc19pbml0KCZ4ZnJtNF9kc3Rfb3BzKTsKLQogCXhmcm00X3N0YXRlX2luaXQoKTsKIAl4ZnJtNF9wb2xpY3lfaW5pdCgpOwogCXhmcm00X3Byb3RvY29sX2luaXQoKTsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmeGZybTRfbmV0X29wcyk7Ci0jZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggZDg0NzQyZi4uMWYyMTA4NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0zNTAsNiArMzUwLDEyIEBACiAJc2V0dXBfdGltZXIoJm5kZXYtPnJzX3RpbWVyLCBhZGRyY29uZl9yc190aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKW5kZXYpOwogCW1lbWNweSgmbmRldi0+Y25mLCBkZXZfbmV0KGRldiktPmlwdjYuZGV2Y29uZl9kZmx0LCBzaXplb2YobmRldi0+Y25mKSk7CisKKwlpZiAobmRldi0+Y25mLnN0YWJsZV9zZWNyZXQuaW5pdGlhbGl6ZWQpCisJCW5kZXYtPmFkZHJfZ2VuX21vZGUgPSBJTjZfQUREUl9HRU5fTU9ERV9TVEFCTEVfUFJJVkFDWTsKKwllbHNlCisJCW5kZXYtPmFkZHJfZ2VuX21vZGUgPSBJTjZfQUREUl9HRU5fTU9ERV9FVUk2NDsKKwogCW5kZXYtPmNuZi5tdHU2ID0gZGV2LT5tdHU7CiAJbmRldi0+Y25mLnN5c2N0bCA9IE5VTEw7CiAJbmRldi0+bmRfcGFybXMgPSBuZWlnaF9wYXJtc19hbGxvYyhkZXYsICZuZF90YmwpOwpAQCAtMjQ1NSw3ICsyNDYxLDcgQEAKICNpZmRlZiBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRAogCQkJaWYgKGluNl9kZXYtPmNuZi5vcHRpbWlzdGljX2RhZCAmJgogCQkJICAgICFuZXQtPmlwdjYuZGV2Y29uZl9hbGwtPmZvcndhcmRpbmcgJiYgc2xsYW8pCi0JCQkJYWRkcl9mbGFncyA9IElGQV9GX09QVElNSVNUSUM7CisJCQkJYWRkcl9mbGFncyB8PSBJRkFfRl9PUFRJTUlTVElDOwogI2VuZGlmCiAKIAkJCS8qIERvIG5vdCBhbGxvdyB0byBjcmVhdGUgdG9vIG11Y2ggb2YgYXV0b2NvbmZpZ3VyZWQKQEAgLTM2NDIsNyArMzY0OCw3IEBACiAKIAkvKiBzZW5kIGEgbmVpZ2hib3VyIHNvbGljaXRhdGlvbiBmb3Igb3VyIGFkZHIgKi8KIAlhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KCZpZnAtPmFkZHIsICZtY2FkZHIpOwotCW5kaXNjX3NlbmRfbnMoaWZwLT5pZGV2LT5kZXYsICZpZnAtPmFkZHIsICZtY2FkZHIsICZpbjZhZGRyX2FueSwgTlVMTCk7CisJbmRpc2Nfc2VuZF9ucyhpZnAtPmlkZXYtPmRldiwgJmlmcC0+YWRkciwgJm1jYWRkciwgJmluNmFkZHJfYW55KTsKIG91dDoKIAlpbjZfaWZhX3B1dChpZnApOwogCXJ0bmxfdW5sb2NrKCk7CkBAIC01MzYzLDEzICs1MzY5LDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghd3JpdGUpIHsKLQkJZXJyID0gc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiVwSTYiLAotCQkJICAgICAgICZzZWNyZXQtPnNlY3JldCk7Ci0JCWlmIChlcnIgPj0gc2l6ZW9mKHN0cikpIHsKLQkJCWVyciA9IC1FSU87Ci0JCQlnb3RvIG91dDsKLQkJfQorCWVyciA9IHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlcEk2IiwgJnNlY3JldC0+c2VjcmV0KTsKKwlpZiAoZXJyID49IHNpemVvZihzdHIpKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gb3V0OwogCX0KIAogCWVyciA9IHByb2NfZG9zdHJpbmcoJmxjdGwsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmxhYmVsLmMgYi9uZXQvaXB2Ni9hZGRybGFiZWwuYwppbmRleCA4ODIxMjRlLi5hOGY2OTg2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRybGFiZWwuYworKysgYi9uZXQvaXB2Ni9hZGRybGFiZWwuYwpAQCAtNTUyLDcgKzU1Miw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJcCA9IF9faXB2Nl9hZGRyX2xhYmVsKG5ldCwgYWRkciwgaXB2Nl9hZGRyX3R5cGUoYWRkciksIGlmYWwtPmlmYWxfaW5kZXgpOwotCWlmIChwICYmIGlwNmFkZHJsYmxfaG9sZChwKSkKKwlpZiAocCAmJiAhaXA2YWRkcmxibF9ob2xkKHApKQogCQlwID0gTlVMTDsKIAlsc2VxID0gaXA2YWRkcmxibF90YWJsZS5zZXE7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCA0NGJiNjZiLi45ZjUxMzdjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTEwOSw2ICsxMDksOSBAQAogCWludCB0cnlfbG9hZGluZ19tb2R1bGUgPSAwOwogCWludCBlcnI7CiAKKwlpZiAocHJvdG9jb2wgPCAwIHx8IHByb3RvY29sID49IElQUFJPVE9fTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIExvb2sgZm9yIHRoZSByZXF1ZXN0ZWQgdHlwZS9wcm90b2NvbCBwYWlyLiAqLwogbG9va3VwX3Byb3RvY29sOgogCWVyciA9IC1FU09DS1ROT1NVUFBPUlQ7CkBAIC00MjgsOSArNDMxLDExIEBACiAKIAkvKiBGcmVlIHR4IG9wdGlvbnMgKi8KIAotCW9wdCA9IHhjaGcoJm5wLT5vcHQsIE5VTEwpOwotCWlmIChvcHQpCi0JCXNvY2tfa2ZyZWVfcyhzaywgb3B0LCBvcHQtPnRvdF9sZW4pOworCW9wdCA9IHhjaGcoKF9fZm9yY2Ugc3RydWN0IGlwdjZfdHhvcHRpb25zICoqKSZucC0+b3B0LCBOVUxMKTsKKwlpZiAob3B0KSB7CisJCWF0b21pY19zdWIob3B0LT50b3RfbGVuLCAmc2stPnNrX29tZW1fYWxsb2MpOworCQl0eG9wdF9wdXQob3B0KTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0Nl9kZXN0cm95X3NvY2spOwogCkBAIC02NTksNyArNjY0LDEwIEBACiAJCWZsNi5mbDZfc3BvcnQgPSBpbmV0LT5pbmV0X3Nwb3J0OwogCQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTZfdG9fZmxvd2koJmZsNikpOwogCi0JCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdCgmZmw2LCBucC0+b3B0LCAmZmluYWwpOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdCgmZmw2LCByY3VfZGVyZWZlcmVuY2UobnAtPm9wdCksCisJCQkJCSAmZmluYWwpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAogCQlkc3QgPSBpcDZfZHN0X2xvb2t1cF9mbG93KHNrLCAmZmw2LCBmaW5hbF9wKTsKIAkJaWYgKElTX0VSUihkc3QpKSB7CkBAIC02NjgsNyArNjc2LDcgQEAKIAkJCXJldHVybiBQVFJfRVJSKGRzdCk7CiAJCX0KIAotCQlfX2lwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCwgTlVMTCk7CisJCWlwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCwgTlVMTCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9kYXRhZ3JhbS5jIGIvbmV0L2lwdjYvZGF0YWdyYW0uYwppbmRleCBkNzBiMDIzLi41MTdjNTViIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9kYXRhZ3JhbS5jCisrKyBiL25ldC9pcHY2L2RhdGFncmFtLmMKQEAgLTE2Nyw4ICsxNjcsMTAgQEAKIAogCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssIGZsb3dpNl90b19mbG93aSgmZmw2KSk7CiAKLQlvcHQgPSBmbG93bGFiZWwgPyBmbG93bGFiZWwtPm9wdCA6IG5wLT5vcHQ7CisJcmN1X3JlYWRfbG9jaygpOworCW9wdCA9IGZsb3dsYWJlbCA/IGZsb3dsYWJlbC0+b3B0IDogcmN1X2RlcmVmZXJlbmNlKG5wLT5vcHQpOwogCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdCgmZmw2LCBvcHQsICZmaW5hbCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlkc3QgPSBpcDZfZHN0X2xvb2t1cF9mbG93KHNrLCAmZmw2LCBmaW5hbF9wKTsKIAllcnIgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jCmluZGV4IGNlMjAzYjAuLmVhN2M0ZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2V4dGhkcnMuYworKysgYi9uZXQvaXB2Ni9leHRoZHJzLmMKQEAgLTcyNyw2ICs3MjcsNyBAQAogCQkJKigoY2hhciAqKikmb3B0Mi0+ZHN0MW9wdCkgKz0gZGlmOwogCQlpZiAob3B0Mi0+c3JjcnQpCiAJCQkqKChjaGFyICoqKSZvcHQyLT5zcmNydCkgKz0gZGlmOworCQlhdG9taWNfc2V0KCZvcHQyLT5yZWZjbnQsIDEpOwogCX0KIAlyZXR1cm4gb3B0MjsKIH0KQEAgLTc5MCw3ICs3OTEsNyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PQlVGUyk7CiAKIAltZW1zZXQob3B0MiwgMCwgdG90X2xlbik7Ci0KKwlhdG9taWNfc2V0KCZvcHQyLT5yZWZjbnQsIDEpOwogCW9wdDItPnRvdF9sZW4gPSB0b3RfbGVuOwogCXAgPSAoY2hhciAqKShvcHQyICsgMSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCAzNmM1YTk4Li4wYTM3ZGRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKKysrIGIvbmV0L2lwdjYvaWNtcC5jCkBAIC04MzQsMTEgKzgzNCw2IEBACiAJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k2X3RvX2Zsb3dpKGZsNikpOwogfQogCi0vKgotICogU3BlY2lhbCBsb2NrLWNsYXNzIGZvciBfX2ljbXB2Nl9zazoKLSAqLwotc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpY21wdjZfc29ja2V0X3NrX2RzdF9sb2NrX2tleTsKLQogc3RhdGljIGludCBfX25ldF9pbml0IGljbXB2Nl9za19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC04NjAsMTUgKzg1NSw2IEBACiAKIAkJbmV0LT5pcHY2LmljbXBfc2tbaV0gPSBzazsKIAotCQkvKgotCQkgKiBTcGxpdCBvZmYgdGhlaXIgbG9jay1jbGFzcywgYmVjYXVzZSBzay0+c2tfZHN0X2xvY2sKLQkJICogZ2V0cyB1c2VkIGZyb20gc29mdGlycXMsIHdoaWNoIGlzIHNhZmUgZm9yCi0JCSAqIF9faWNtcHY2X3NrIChiZWNhdXNlIHRob3NlIG5ldmVyIGdldCBkaXJlY3RseSB1c2VkCi0JCSAqIHZpYSB1c2Vyc3BhY2Ugc3lzY2FsbHMpLCBidXQgdW5zYWZlIGZvciBub3JtYWwgc29ja2V0cy4KLQkJICovCi0JCWxvY2tkZXBfc2V0X2NsYXNzKCZzay0+c2tfZHN0X2xvY2ssCi0JCQkJICAmaWNtcHY2X3NvY2tldF9za19kc3RfbG9ja19rZXkpOwotCiAJCS8qIEVub3VnaCBzcGFjZSBmb3IgMiA2NEsgSUNNUCBwYWNrZXRzLCBpbmNsdWRpbmcKIAkJICogc2tfYnVmZiBzdHJ1Y3Qgb3ZlcmhlYWQuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwppbmRleCA1ZDFjN2NlLi5hN2NhMmNkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwpAQCAtNzgsNyArNzgsOSBAQAogCW1lbXNldChmbDYsIDAsIHNpemVvZigqZmw2KSk7CiAJZmw2LT5mbG93aTZfcHJvdG8gPSBwcm90bzsKIAlmbDYtPmRhZGRyID0gaXJlcS0+aXJfdjZfcm10X2FkZHI7Ci0JZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KGZsNiwgbnAtPm9wdCwgJmZpbmFsKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KGZsNiwgcmN1X2RlcmVmZXJlbmNlKG5wLT5vcHQpLCAmZmluYWwpOworCXJjdV9yZWFkX3VubG9jaygpOwogCWZsNi0+c2FkZHIgPSBpcmVxLT5pcl92Nl9sb2NfYWRkcjsKIAlmbDYtPmZsb3dpNl9vaWYgPSBpcmVxLT5pcl9paWY7CiAJZmw2LT5mbG93aTZfbWFyayA9IGlyZXEtPmlyX21hcms7CkBAIC0xMDksMTQgKzExMSw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0Nl9jc2tfYWRkcjJzb2NrYWRkcik7CiAKIHN0YXRpYyBpbmxpbmUKLXZvaWQgX19pbmV0Nl9jc2tfZHN0X3N0b3JlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCi17Ci0JX19pcDZfZHN0X3N0b3JlKHNrLCBkc3QsIGRhZGRyLCBzYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKIHN0cnVjdCBkc3RfZW50cnkgKl9faW5ldDZfY3NrX2RzdF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBjb29raWUpCiB7CiAJcmV0dXJuIF9fc2tfZHN0X2NoZWNrKHNrLCBjb29raWUpOwpAQCAtMTQyLDE0ICsxMzYsMTYgQEAKIAlmbDYtPmZsNl9kcG9ydCA9IGluZXQtPmluZXRfZHBvcnQ7CiAJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k2X3RvX2Zsb3dpKGZsNikpOwogCi0JZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KGZsNiwgbnAtPm9wdCwgJmZpbmFsKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KGZsNiwgcmN1X2RlcmVmZXJlbmNlKG5wLT5vcHQpLCAmZmluYWwpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJZHN0ID0gX19pbmV0Nl9jc2tfZHN0X2NoZWNrKHNrLCBucC0+ZHN0X2Nvb2tpZSk7CiAJaWYgKCFkc3QpIHsKIAkJZHN0ID0gaXA2X2RzdF9sb29rdXBfZmxvdyhzaywgZmw2LCBmaW5hbF9wKTsKIAogCQlpZiAoIUlTX0VSUihkc3QpKQotCQkJX19pbmV0Nl9jc2tfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwsIE5VTEwpOworCQkJaXA2X2RzdF9zdG9yZShzaywgZHN0LCBOVUxMLCBOVUxMKTsKIAl9CiAJcmV0dXJuIGRzdDsKIH0KQEAgLTE3NSw3ICsxNzEsOCBAQAogCS8qIFJlc3RvcmUgZmluYWwgZGVzdGluYXRpb24gYmFjayBhZnRlciByb3V0aW5nIGRvbmUgKi8KIAlmbDYuZGFkZHIgPSBzay0+c2tfdjZfZGFkZHI7CiAKLQlyZXMgPSBpcDZfeG1pdChzaywgc2tiLCAmZmw2LCBucC0+b3B0LCBucC0+dGNsYXNzKTsKKwlyZXMgPSBpcDZfeG1pdChzaywgc2tiLCAmZmw2LCByY3VfZGVyZWZlcmVuY2UobnAtPm9wdCksCisJCSAgICAgICBucC0+dGNsYXNzKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jCmluZGV4IDNjN2I5MzEuLmU1ZWExNzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9ncmUuYworKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKQEAgLTE1NzEsMTMgKzE1NzEsMTEgQEAKIAkJCXJldHVybiAtRUVYSVNUOwogCX0gZWxzZSB7CiAJCXQgPSBudDsKLQotCQlpcDZncmVfdHVubmVsX3VubGluayhpZ24sIHQpOwotCQlpcDZncmVfdG5sX2NoYW5nZSh0LCAmcCwgIXRiW0lGTEFfTVRVXSk7Ci0JCWlwNmdyZV90dW5uZWxfbGluayhpZ24sIHQpOwotCQluZXRkZXZfc3RhdGVfY2hhbmdlKGRldik7CiAJfQogCisJaXA2Z3JlX3R1bm5lbF91bmxpbmsoaWduLCB0KTsKKwlpcDZncmVfdG5sX2NoYW5nZSh0LCAmcCwgIXRiW0lGTEFfTVRVXSk7CisJaXA2Z3JlX3R1bm5lbF9saW5rKGlnbiwgdCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCBlYWJmZmJiLi4xMzdmY2E0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQotCQlpcDZfdG5sX3Blcl9jcHVfZHN0X3NldChyYXdfY3B1X3B0cih0LT5kc3RfY2FjaGUpLCBOVUxMKTsKKwkJaXA2X3RubF9wZXJfY3B1X2RzdF9zZXQocGVyX2NwdV9wdHIodC0+ZHN0X2NhY2hlLCBpKSwgTlVMTCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcDZfdG5sX2RzdF9yZXNldCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IGFkMTkxMzYuLmExMGU3NzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKKysrIGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCQkgICAgICBpbnQgY21kKTsKIHN0YXRpYyBpbnQgaXA2bXJfcnRtX2R1bXByb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7Ci1zdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBtcjZfdGFibGUgKm1ydCk7CitzdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBtcjZfdGFibGUgKm1ydCwgYm9vbCBhbGwpOwogc3RhdGljIHZvaWQgaXBtcl9leHBpcmVfcHJvY2Vzcyh1bnNpZ25lZCBsb25nIGFyZyk7CiAKICNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTCkBAIC0zMzQsNyArMzM0LDcgQEAKIHN0YXRpYyB2b2lkIGlwNm1yX2ZyZWVfdGFibGUoc3RydWN0IG1yNl90YWJsZSAqbXJ0KQogewogCWRlbF90aW1lcl9zeW5jKCZtcnQtPmlwbXJfZXhwaXJlX3RpbWVyKTsKLQltcm91dGVfY2xlYW5fdGFibGVzKG1ydCk7CisJbXJvdXRlX2NsZWFuX3RhYmxlcyhtcnQsIHRydWUpOwogCWtmcmVlKG1ydCk7CiB9CiAKQEAgLTc2NSwxMCArNzY1LDYgQEAKIAlyZXR1cm4gZGV2OwogCiBmYWlsdXJlOgotCS8qIGFsbG93IHRoZSByZWdpc3RlciB0byBiZSBjb21wbGV0ZWQgYmVmb3JlIHVucmVnaXN0ZXJpbmcuICovCi0JcnRubF91bmxvY2soKTsKLQlydG5sX2xvY2soKTsKLQogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNTQyLDcgKzE1MzgsNyBAQAogICoJQ2xvc2UgdGhlIG11bHRpY2FzdCBzb2NrZXQsIGFuZCBjbGVhciB0aGUgdmlmIHRhYmxlcyBldGMKICAqLwogCi1zdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBtcjZfdGFibGUgKm1ydCkKK3N0YXRpYyB2b2lkIG1yb3V0ZV9jbGVhbl90YWJsZXMoc3RydWN0IG1yNl90YWJsZSAqbXJ0LCBib29sIGFsbCkKIHsKIAlpbnQgaTsKIAlMSVNUX0hFQUQobGlzdCk7CkBAIC0xNTUyLDggKzE1NDgsOSBAQAogCSAqCVNodXQgZG93biBhbGwgYWN0aXZlIHZpZiBlbnRyaWVzCiAJICovCiAJZm9yIChpID0gMDsgaSA8IG1ydC0+bWF4dmlmOyBpKyspIHsKLQkJaWYgKCEobXJ0LT52aWY2X3RhYmxlW2ldLmZsYWdzICYgVklGRl9TVEFUSUMpKQotCQkJbWlmNl9kZWxldGUobXJ0LCBpLCAmbGlzdCk7CisJCWlmICghYWxsICYmIChtcnQtPnZpZjZfdGFibGVbaV0uZmxhZ3MgJiBWSUZGX1NUQVRJQykpCisJCQljb250aW51ZTsKKwkJbWlmNl9kZWxldGUobXJ0LCBpLCAmbGlzdCk7CiAJfQogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmxpc3QpOwogCkBAIC0xNTYyLDcgKzE1NTksNyBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBNRkM2X0xJTkVTOyBpKyspIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGMsIG5leHQsICZtcnQtPm1mYzZfY2FjaGVfYXJyYXlbaV0sIGxpc3QpIHsKLQkJCWlmIChjLT5tZmNfZmxhZ3MgJiBNRkNfU1RBVElDKQorCQkJaWYgKCFhbGwgJiYgKGMtPm1mY19mbGFncyAmIE1GQ19TVEFUSUMpKQogCQkJCWNvbnRpbnVlOwogCQkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwogCQkJbGlzdF9kZWwoJmMtPmxpc3QpOwpAQCAtMTYyNSw3ICsxNjIyLDcgQEAKIAkJCQkJCSAgICAgbmV0LT5pcHY2LmRldmNvbmZfYWxsKTsKIAkJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCi0JCQltcm91dGVfY2xlYW5fdGFibGVzKG1ydCk7CisJCQltcm91dGVfY2xlYW5fdGFibGVzKG1ydCwgZmFsc2UpOwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggNjNlNjk1Ni4uNDQ0OWFkMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtMTExLDcgKzExMSw4IEBACiAJCQlpY3NrLT5pY3NrX3N5bmNfbXNzKHNrLCBpY3NrLT5pY3NrX3BtdHVfY29va2llKTsKIAkJfQogCX0KLQlvcHQgPSB4Y2hnKCZpbmV0Nl9zayhzayktPm9wdCwgb3B0KTsKKwlvcHQgPSB4Y2hnKChfX2ZvcmNlIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqKikmaW5ldDZfc2soc2spLT5vcHQsCisJCSAgIG9wdCk7CiAJc2tfZHN0X3Jlc2V0KHNrKTsKIAogCXJldHVybiBvcHQ7CkBAIC0yMzEsOSArMjMyLDEyIEBACiAJCQkJc2stPnNrX3NvY2tldC0+b3BzID0gJmluZXRfZGdyYW1fb3BzOwogCQkJCXNrLT5za19mYW1pbHkgPSBQRl9JTkVUOwogCQkJfQotCQkJb3B0ID0geGNoZygmbnAtPm9wdCwgTlVMTCk7Ci0JCQlpZiAob3B0KQotCQkJCXNvY2tfa2ZyZWVfcyhzaywgb3B0LCBvcHQtPnRvdF9sZW4pOworCQkJb3B0ID0geGNoZygoX19mb3JjZSBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKiopJm5wLT5vcHQsCisJCQkJICAgTlVMTCk7CisJCQlpZiAob3B0KSB7CisJCQkJYXRvbWljX3N1YihvcHQtPnRvdF9sZW4sICZzay0+c2tfb21lbV9hbGxvYyk7CisJCQkJdHhvcHRfcHV0KG9wdCk7CisJCQl9CiAJCQlwa3RvcHQgPSB4Y2hnKCZucC0+cGt0b3B0aW9ucywgTlVMTCk7CiAJCQlrZnJlZV9za2IocGt0b3B0KTsKIApAQCAtNDAzLDcgKzQwNyw4IEBACiAJCWlmIChvcHRuYW1lICE9IElQVjZfUlRIRFIgJiYgIW5zX2NhcGFibGUobmV0LT51c2VyX25zLCBDQVBfTkVUX1JBVykpCiAJCQlicmVhazsKIAotCQlvcHQgPSBpcHY2X3JlbmV3X29wdGlvbnMoc2ssIG5wLT5vcHQsIG9wdG5hbWUsCisJCW9wdCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobnAtPm9wdCwgc29ja19vd25lZF9ieV91c2VyKHNrKSk7CisJCW9wdCA9IGlwdjZfcmVuZXdfb3B0aW9ucyhzaywgb3B0LCBvcHRuYW1lLAogCQkJCQkgKHN0cnVjdCBpcHY2X29wdF9oZHIgX191c2VyICopb3B0dmFsLAogCQkJCQkgb3B0bGVuKTsKIAkJaWYgKElTX0VSUihvcHQpKSB7CkBAIC00MzIsOCArNDM3LDEwIEBACiAJCXJldHYgPSAwOwogCQlvcHQgPSBpcHY2X3VwZGF0ZV9vcHRpb25zKHNrLCBvcHQpOwogc3RpY2t5X2RvbmU6Ci0JCWlmIChvcHQpCi0JCQlzb2NrX2tmcmVlX3Moc2ssIG9wdCwgb3B0LT50b3RfbGVuKTsKKwkJaWYgKG9wdCkgeworCQkJYXRvbWljX3N1YihvcHQtPnRvdF9sZW4sICZzay0+c2tfb21lbV9hbGxvYyk7CisJCQl0eG9wdF9wdXQob3B0KTsKKwkJfQogCQlicmVhazsKIAl9CiAKQEAgLTQ4Niw2ICs0OTMsNyBAQAogCQkJYnJlYWs7CiAKIAkJbWVtc2V0KG9wdCwgMCwgc2l6ZW9mKCpvcHQpKTsKKwkJYXRvbWljX3NldCgmb3B0LT5yZWZjbnQsIDEpOwogCQlvcHQtPnRvdF9sZW4gPSBzaXplb2YoKm9wdCkgKyBvcHRsZW47CiAJCXJldHYgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIob3B0KzEsIG9wdHZhbCwgb3B0bGVuKSkKQEAgLTUwMiw4ICs1MTAsMTAgQEAKIAkJcmV0diA9IDA7CiAJCW9wdCA9IGlwdjZfdXBkYXRlX29wdGlvbnMoc2ssIG9wdCk7CiBkb25lOgotCQlpZiAob3B0KQotCQkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CisJCWlmIChvcHQpIHsKKwkJCWF0b21pY19zdWIob3B0LT50b3RfbGVuLCAmc2stPnNrX29tZW1fYWxsb2MpOworCQkJdHhvcHRfcHV0KG9wdCk7CisJCX0KIAkJYnJlYWs7CiAJfQogCWNhc2UgSVBWNl9VTklDQVNUX0hPUFM6CkBAIC0xMTEwLDEwICsxMTIwLDExIEBACiAJY2FzZSBJUFY2X1JUSERSOgogCWNhc2UgSVBWNl9EU1RPUFRTOgogCXsKKwkJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CiAKIAkJbG9ja19zb2NrKHNrKTsKLQkJbGVuID0gaXB2Nl9nZXRzb2Nrb3B0X3N0aWNreShzaywgbnAtPm9wdCwKLQkJCQkJICAgICBvcHRuYW1lLCBvcHR2YWwsIGxlbik7CisJCW9wdCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobnAtPm9wdCwgc29ja19vd25lZF9ieV91c2VyKHNrKSk7CisJCWxlbiA9IGlwdjZfZ2V0c29ja29wdF9zdGlja3koc2ssIG9wdCwgb3B0bmFtZSwgb3B0dmFsLCBsZW4pOwogCQlyZWxlYXNlX3NvY2soc2spOwogCQkvKiBjaGVjayBpZiBpcHY2X2dldHNvY2tvcHRfc3RpY2t5KCkgcmV0dXJucyBlcnIgY29kZSAqLwogCQlpZiAobGVuIDwgMCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L21jYXN0LmMgYi9uZXQvaXB2Ni9tY2FzdC5jCmluZGV4IDEyNDMzOGEuLjVlZTU2ZDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L21jYXN0LmMKKysrIGIvbmV0L2lwdjYvbWNhc3QuYwpAQCAtMTY1MSw3ICsxNjUxLDYgQEAKIAlpZiAoIWVycikgewogCQlJQ01QNk1TR09VVF9JTkNfU1RBVFMobmV0LCBpZGV2LCBJQ01QVjZfTUxEMl9SRVBPUlQpOwogCQlJQ01QNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJQ01QNl9NSUJfT1VUTVNHUyk7Ci0JCUlQNl9VUERfUE9fU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9PVVRNQ0FTVCwgcGF5bG9hZF9sZW4pOwogCX0gZWxzZSB7CiAJCUlQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAJfQpAQCAtMjAxNSw3ICsyMDE0LDYgQEAKIAlpZiAoIWVycikgewogCQlJQ01QNk1TR09VVF9JTkNfU1RBVFMobmV0LCBpZGV2LCB0eXBlKTsKIAkJSUNNUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSUNNUDZfTUlCX09VVE1TR1MpOwotCQlJUDZfVVBEX1BPX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfT1VUTUNBU1QsIGZ1bGxfbGVuKTsKIAl9IGVsc2UKIAkJSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggM2UwZjg1NS4uODRhZmI5YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC01NTYsOCArNTU2LDcgQEAKIH0KIAogdm9pZCBuZGlzY19zZW5kX25zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc29saWNpdCwKLQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJICAgc3RydWN0IHNrX2J1ZmYgKm9za2IpCisJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaW42X2FkZHIgYWRkcl9idWY7CkBAIC01OTMsOSArNTkyLDYgQEAKIAkJbmRpc2NfZmlsbF9hZGRyX29wdGlvbihza2IsIE5EX09QVF9TT1VSQ0VfTExfQUREUiwKIAkJCQkgICAgICAgZGV2LT5kZXZfYWRkcik7CiAKLQlpZiAoIShkZXYtPnByaXZfZmxhZ3MgJiBJRkZfWE1JVF9EU1RfUkVMRUFTRSkgJiYgb3NrYikKLQkJc2tiX2RzdF9jb3B5KHNrYiwgb3NrYik7Ci0KIAluZGlzY19zZW5kX3NrYihza2IsIGRhZGRyLCBzYWRkcik7CiB9CiAKQEAgLTY4MiwxMiArNjc4LDEyIEBACiAJCQkJICAiJXM6IHRyeWluZyB0byB1Y2FzdCBwcm9iZSBpbiBOVURfSU5WQUxJRDogJXBJNlxuIiwKIAkJCQkgIF9fZnVuY19fLCB0YXJnZXQpOwogCQl9Ci0JCW5kaXNjX3NlbmRfbnMoZGV2LCB0YXJnZXQsIHRhcmdldCwgc2FkZHIsIHNrYik7CisJCW5kaXNjX3NlbmRfbnMoZGV2LCB0YXJnZXQsIHRhcmdldCwgc2FkZHIpOwogCX0gZWxzZSBpZiAoKHByb2JlcyAtPSBORUlHSF9WQVIobmVpZ2gtPnBhcm1zLCBBUFBfUFJPQkVTKSkgPCAwKSB7CiAJCW5laWdoX2FwcF9ucyhuZWlnaCk7CiAJfSBlbHNlIHsKIAkJYWRkcmNvbmZfYWRkcl9zb2xpY3RfbXVsdCh0YXJnZXQsICZtY2FkZHIpOwotCQluZGlzY19zZW5kX25zKGRldiwgdGFyZ2V0LCAmbWNhZGRyLCBzYWRkciwgc2tiKTsKKwkJbmRpc2Nfc2VuZF9ucyhkZXYsIHRhcmdldCwgJm1jYWRkciwgc2FkZHIpOwogCX0KIH0KIApAQCAtMTE4Nyw3ICsxMTgzLDcgQEAKIAkgKi8KIAlpZiAoIWluNl9kZXYtPmNuZi5hY2NlcHRfcmFfZnJvbV9sb2NhbCAmJgogCSAgICBpcHY2X2Noa19hZGRyKGRldl9uZXQoaW42X2Rldi0+ZGV2KSwgJmlwdjZfaGRyKHNrYiktPnNhZGRyLAotCQkJICBOVUxMLCAwKSkgeworCQkJICBpbjZfZGV2LT5kZXYsIDApKSB7CiAJCU5EX1BSSU5USygyLCBpbmZvLAogCQkJICAiUkEgZnJvbSBsb2NhbCBhZGRyZXNzIGRldGVjdGVkIG9uIGRldjogJXM6IGRlZmF1bHQgcm91dGVyIGlnbm9yZWRcbiIsCiAJCQkgIHNrYi0+ZGV2LT5uYW1lKTsKQEAgLTEzNDEsNyArMTMzNyw3IEBACiAjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GTwogCWlmICghaW42X2Rldi0+Y25mLmFjY2VwdF9yYV9mcm9tX2xvY2FsICYmCiAJICAgIGlwdjZfY2hrX2FkZHIoZGV2X25ldChpbjZfZGV2LT5kZXYpLCAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsCi0JCQkgIE5VTEwsIDApKSB7CisJCQkgIGluNl9kZXYtPmRldiwgMCkpIHsKIAkJTkRfUFJJTlRLKDIsIGluZm8sCiAJCQkgICJSQSBmcm9tIGxvY2FsIGFkZHJlc3MgZGV0ZWN0ZWQgb24gZGV2OiAlczogcm91dGVyIGluZm8gaWdub3JlZC5cbiIsCiAJCQkgIHNrYi0+ZGV2LT5uYW1lKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggZjZhMDI0ZS4uZTEwYTA0YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogY29uZmlnIE5GVF9EVVBfSVBWNgogCXRyaXN0YXRlICJJUHY2IG5mX3RhYmxlcyBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLCiAJc2VsZWN0IE5GX0RVUF9JUFY2CiAJaGVscAogCSAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0IGZvciBuZl90YWJsZXMuCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKaW5kZXggZDVlZmViOC4uYmFiNDQ0MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAvKiBDcmVhdGlvbiBwcmltaXRpdmVzLiAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnFfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBpZCwKIAkJCQkJIHUzMiB1c2VyLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKLQkJCQkJIHN0cnVjdCBpbjZfYWRkciAqZHN0LCB1OCBlY24pCisJCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRzdCwgaW50IGlpZiwgdTggZWNuKQogewogCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnE7CiAJc3RydWN0IGlwNl9jcmVhdGVfYXJnIGFyZzsKQEAgLTIwMCw2ICsyMDAsNyBAQAogCWFyZy51c2VyID0gdXNlcjsKIAlhcmcuc3JjID0gc3JjOwogCWFyZy5kc3QgPSBkc3Q7CisJYXJnLmlpZiA9IGlpZjsKIAlhcmcuZWNuID0gZWNuOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwpAQCAtNjAxLDcgKzYwMiw3IEBACiAJZmhkciA9IChzdHJ1Y3QgZnJhZ19oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihjbG9uZSk7CiAKIAlmcSA9IGZxX2ZpbmQobmV0LCBmaGRyLT5pZGVudGlmaWNhdGlvbiwgdXNlciwgJmhkci0+c2FkZHIsICZoZHItPmRhZGRyLAotCQkgICAgIGlwNl9mcmFnX2VjbihoZHIpKTsKKwkJICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5pZmluZGV4IDogMCwgaXA2X2ZyYWdfZWNuKGhkcikpOwogCWlmIChmcSA9PSBOVUxMKSB7CiAJCXByX2RlYnVnKCJDYW4ndCBmaW5kIGFuZCBjYW4ndCBjcmVhdGUgbmV3IHF1ZXVlXG4iKTsKIAkJZ290byByZXRfb3JpZzsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggZGM2NWVjMS4uOTkxNDA5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmF3LmMKKysrIGIvbmV0L2lwdjYvcmF3LmMKQEAgLTczMyw2ICs3MzMsNyBAQAogCiBzdGF0aWMgaW50IHJhd3Y2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHRfdG9fZnJlZSA9IE5VTEw7CiAJc3RydWN0IGlwdjZfdHhvcHRpb25zIG9wdF9zcGFjZTsKIAlERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwgc2luNiwgbXNnLT5tc2dfbmFtZSk7CiAJc3RydWN0IGluNl9hZGRyICpkYWRkciwgKmZpbmFsX3AsIGZpbmFsOwpAQCAtODM5LDggKzg0MCwxMCBAQAogCQlpZiAoIShvcHQtPm9wdF9uZmxlbnxvcHQtPm9wdF9mbGVuKSkKIAkJCW9wdCA9IE5VTEw7CiAJfQotCWlmICghb3B0KQotCQlvcHQgPSBucC0+b3B0OworCWlmICghb3B0KSB7CisJCW9wdCA9IHR4b3B0X2dldChucCk7CisJCW9wdF90b19mcmVlID0gb3B0OworCQl9CiAJaWYgKGZsb3dsYWJlbCkKIAkJb3B0ID0gZmw2X21lcmdlX29wdGlvbnMoJm9wdF9zcGFjZSwgZmxvd2xhYmVsLCBvcHQpOwogCW9wdCA9IGlwdjZfZml4dXBfb3B0aW9ucygmb3B0X3NwYWNlLCBvcHQpOwpAQCAtOTA2LDYgKzkwOSw3IEBACiAJZHN0X3JlbGVhc2UoZHN0KTsKIG91dDoKIAlmbDZfc29ja19yZWxlYXNlKGZsb3dsYWJlbCk7CisJdHhvcHRfcHV0KG9wdF90b19mcmVlKTsKIAlyZXR1cm4gZXJyIDwgMCA/IGVyciA6IGxlbjsKIGRvX2NvbmZpcm06CiAJZHN0X2NvbmZpcm0oZHN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwppbmRleCA0NGUyMWEwLi40NWY1YWU1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKKysrIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCkBAIC0xMDgsNyArMTA4LDEwIEBACiAJcmV0dXJuCWZxLT5pZCA9PSBhcmctPmlkICYmCiAJCWZxLT51c2VyID09IGFyZy0+dXNlciAmJgogCQlpcHY2X2FkZHJfZXF1YWwoJmZxLT5zYWRkciwgYXJnLT5zcmMpICYmCi0JCWlwdjZfYWRkcl9lcXVhbCgmZnEtPmRhZGRyLCBhcmctPmRzdCk7CisJCWlwdjZfYWRkcl9lcXVhbCgmZnEtPmRhZGRyLCBhcmctPmRzdCkgJiYKKwkJKGFyZy0+aWlmID09IGZxLT5paWYgfHwKKwkJICEoaXB2Nl9hZGRyX3R5cGUoYXJnLT5kc3QpICYgKElQVjZfQUREUl9NVUxUSUNBU1QgfAorCQkJCQkgICAgICAgSVBWNl9BRERSX0xJTktMT0NBTCkpKTsKIH0KIEVYUE9SVF9TWU1CT0woaXA2X2ZyYWdfbWF0Y2gpOwogCkBAIC0xODAsNyArMTgzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBmcmFnX3F1ZXVlICoKIGZxX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgaWQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc3JjLAotCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZHN0LCB1OCBlY24pCisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkc3QsIGludCBpaWYsIHU4IGVjbikKIHsKIAlzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxOwogCXN0cnVjdCBpcDZfY3JlYXRlX2FyZyBhcmc7CkBAIC0xOTAsNiArMTkzLDcgQEAKIAlhcmcudXNlciA9IElQNl9ERUZSQUdfTE9DQUxfREVMSVZFUjsKIAlhcmcuc3JjID0gc3JjOwogCWFyZy5kc3QgPSBkc3Q7CisJYXJnLmlpZiA9IGlpZjsKIAlhcmcuZWNuID0gZWNuOwogCiAJaGFzaCA9IGluZXQ2X2hhc2hfZnJhZyhpZCwgc3JjLCBkc3QpOwpAQCAtNTUxLDcgKzU1NSw3IEBACiAJfQogCiAJZnEgPSBmcV9maW5kKG5ldCwgZmhkci0+aWRlbnRpZmljYXRpb24sICZoZHItPnNhZGRyLCAmaGRyLT5kYWRkciwKLQkJICAgICBpcDZfZnJhZ19lY24oaGRyKSk7CisJCSAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+aWZpbmRleCA6IDAsIGlwNl9mcmFnX2VjbihoZHIpKTsKIAlpZiAoZnEpIHsKIAkJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggYzhiYzliNC4uODI2ZTZhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC00MDQsNiArNDA0LDE0IEBACiAJfQogfQogCitzdGF0aWMgYm9vbCBfX3J0Nl9jaGVja19leHBpcmVkKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQpCit7CisJaWYgKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0VYUElSRVMpCisJCXJldHVybiB0aW1lX2FmdGVyKGppZmZpZXMsIHJ0LT5kc3QuZXhwaXJlcyk7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBib29sIHJ0Nl9jaGVja19leHBpcmVkKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7CiAJaWYgKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0VYUElSRVMpIHsKQEAgLTUxNSw3ICs1MjMsNyBAQAogCQljb250YWluZXJfb2Yodywgc3RydWN0IF9fcnQ2X3Byb2JlX3dvcmssIHdvcmspOwogCiAJYWRkcmNvbmZfYWRkcl9zb2xpY3RfbXVsdCgmd29yay0+dGFyZ2V0LCAmbWNhZGRyKTsKLQluZGlzY19zZW5kX25zKHdvcmstPmRldiwgJndvcmstPnRhcmdldCwgJm1jYWRkciwgTlVMTCwgTlVMTCk7CisJbmRpc2Nfc2VuZF9ucyh3b3JrLT5kZXYsICZ3b3JrLT50YXJnZXQsICZtY2FkZHIsIE5VTEwpOwogCWRldl9wdXQod29yay0+ZGV2KTsKIAlrZnJlZSh3b3JrKTsKIH0KQEAgLTEyNTIsNyArMTI2MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpydDZfZHN0X2Zyb21fY2hlY2soc3RydWN0IHJ0Nl9pbmZvICpydCwgdTMyIGNvb2tpZSkKIHsKLQlpZiAocnQtPmRzdC5vYnNvbGV0ZSA9PSBEU1RfT0JTT0xFVEVfRk9SQ0VfQ0hLICYmCisJaWYgKCFfX3J0Nl9jaGVja19leHBpcmVkKHJ0KSAmJgorCSAgICBydC0+ZHN0Lm9ic29sZXRlID09IERTVF9PQlNPTEVURV9GT1JDRV9DSEsgJiYKIAkgICAgcnQ2X2NoZWNrKChzdHJ1Y3QgcnQ2X2luZm8gKikocnQtPmRzdC5mcm9tKSwgY29va2llKSkKIAkJcmV0dXJuICZydC0+ZHN0OwogCWVsc2UKQEAgLTEyNzIsNyArMTI4MSw4IEBACiAKIAlydDZfZHN0X2Zyb21fbWV0cmljc19jaGVjayhydCk7CiAKLQlpZiAoKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX1BDUFUpIHx8IHVubGlrZWx5KGRzdC0+ZmxhZ3MgJiBEU1RfTk9DQUNIRSkpCisJaWYgKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX1BDUFUgfHwKKwkgICAgKHVubGlrZWx5KGRzdC0+ZmxhZ3MgJiBEU1RfTk9DQUNIRSkgJiYgcnQtPmRzdC5mcm9tKSkKIAkJcmV0dXJuIHJ0Nl9kc3RfZnJvbV9jaGVjayhydCwgY29va2llKTsKIAllbHNlCiAJCXJldHVybiBydDZfY2hlY2socnQsIGNvb2tpZSk7CkBAIC0xMzIyLDYgKzEzMzIsMTIgQEAKIAlydDZfdXBkYXRlX2V4cGlyZXMocnQsIG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X210dV9leHBpcmVzKTsKIH0KIAorc3RhdGljIGJvb2wgcnQ2X2NhY2hlX2FsbG93ZWRfZm9yX3BtdHUoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCkKK3sKKwlyZXR1cm4gIShydC0+cnQ2aV9mbGFncyAmIFJURl9DQUNIRSkgJiYKKwkJKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX1BDUFUgfHwgcnQtPnJ0Nmlfbm9kZSk7Cit9CisKIHN0YXRpYyB2b2lkIF9faXA2X3J0X3VwZGF0ZV9wbXR1KHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCSBjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoLCB1MzIgbXR1KQogewpAQCAtMTMzNSw3ICsxMzUxLDcgQEAKIAlpZiAobXR1ID49IGRzdF9tdHUoZHN0KSkKIAkJcmV0dXJuOwogCi0JaWYgKHJ0Ni0+cnQ2aV9mbGFncyAmIFJURl9DQUNIRSkgeworCWlmICghcnQ2X2NhY2hlX2FsbG93ZWRfZm9yX3BtdHUocnQ2KSkgewogCQlydDZfZG9fdXBkYXRlX3BtdHUocnQ2LCBtdHUpOwogCX0gZWxzZSB7CiAJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsICpzYWRkcjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwppbmRleCBiYjhmMmZhLi5lYWY3YWM0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjYvc3luY29va2llcy5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJbWVtc2V0KCZmbDYsIDAsIHNpemVvZihmbDYpKTsKIAkJZmw2LmZsb3dpNl9wcm90byA9IElQUFJPVE9fVENQOwogCQlmbDYuZGFkZHIgPSBpcmVxLT5pcl92Nl9ybXRfYWRkcjsKLQkJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KCZmbDYsIG5wLT5vcHQsICZmaW5hbCk7CisJCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdCgmZmw2LCByY3VfZGVyZWZlcmVuY2UobnAtPm9wdCksICZmaW5hbCk7CiAJCWZsNi5zYWRkciA9IGlyZXEtPmlyX3Y2X2xvY19hZGRyOwogCQlmbDYuZmxvd2k2X29pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAJCWZsNi5mbG93aTZfbWFyayA9IGlyZXEtPmlyX21hcms7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCA1YmFhOGU3Li42YjhhOGE5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTkzLDEwICs5Myw5IEBACiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpOwogCi0JaWYgKGRzdCkgeworCWlmIChkc3QgJiYgZHN0X2hvbGRfc2FmZShkc3QpKSB7CiAJCWNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSAoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICopZHN0OwogCi0JCWRzdF9ob2xkKGRzdCk7CiAJCXNrLT5za19yeF9kc3QgPSBkc3Q7CiAJCWluZXRfc2soc2spLT5yeF9kc3RfaWZpbmRleCA9IHNrYi0+c2tiX2lpZjsKIAkJaW5ldDZfc2soc2spLT5yeF9kc3RfY29va2llID0gcnQ2X2dldF9jb29raWUocnQpOwpAQCAtMTIwLDYgKzExOSw3IEBACiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSBOVUxMLCAqZmluYWxfcCwgZmluYWw7CisJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CiAJc3RydWN0IGZsb3dpNiBmbDY7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBhZGRyX3R5cGU7CkBAIC0yMzUsNyArMjM1LDggQEAKIAlmbDYuZmw2X2Rwb3J0ID0gdXNpbi0+c2luNl9wb3J0OwogCWZsNi5mbDZfc3BvcnQgPSBpbmV0LT5pbmV0X3Nwb3J0OwogCi0JZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KCZmbDYsIG5wLT5vcHQsICZmaW5hbCk7CisJb3B0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChucC0+b3B0LCBzb2NrX293bmVkX2J5X3VzZXIoc2spKTsKKwlmaW5hbF9wID0gZmw2X3VwZGF0ZV9kc3QoJmZsNiwgb3B0LCAmZmluYWwpOwogCiAJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k2X3RvX2Zsb3dpKCZmbDYpKTsKIApAQCAtMjU1LDcgKzI1Niw3IEBACiAJaW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBMT09QQkFDSzRfSVBWNjsKIAogCXNrLT5za19nc29fdHlwZSA9IFNLQl9HU09fVENQVjY7Ci0JX19pcDZfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwsIE5VTEwpOworCWlwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCwgTlVMTCk7CiAKIAlpZiAodGNwX2RlYXRoX3Jvdy5zeXNjdGxfdHdfcmVjeWNsZSAmJgogCSAgICAhdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgJiYKQEAgLTI2Myw5ICsyNjQsOSBAQAogCQl0Y3BfZmV0Y2hfdGltZXdhaXRfc3RhbXAoc2ssIGRzdCk7CiAKIAlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKLQlpZiAobnAtPm9wdCkKLQkJaWNzay0+aWNza19leHRfaGRyX2xlbiA9IChucC0+b3B0LT5vcHRfZmxlbiArCi0JCQkJCSAgbnAtPm9wdC0+b3B0X25mbGVuKTsKKwlpZiAob3B0KQorCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gb3B0LT5vcHRfZmxlbiArCisJCQkJCSBvcHQtPm9wdF9uZmxlbjsKIAogCXRwLT5yeF9vcHQubXNzX2NsYW1wID0gSVBWNl9NSU5fTVRVIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIApAQCAtNDYxLDcgKzQ2Miw4IEBACiAJCWlmIChucC0+cmVwZmxvdyAmJiBpcmVxLT5wa3RvcHRzKQogCQkJZmw2LT5mbG93bGFiZWwgPSBpcDZfZmxvd2xhYmVsKGlwdjZfaGRyKGlyZXEtPnBrdG9wdHMpKTsKIAotCQllcnIgPSBpcDZfeG1pdChzaywgc2tiLCBmbDYsIG5wLT5vcHQsIG5wLT50Y2xhc3MpOworCQllcnIgPSBpcDZfeG1pdChzaywgc2tiLCBmbDYsIHJjdV9kZXJlZmVyZW5jZShucC0+b3B0KSwKKwkJCSAgICAgICBucC0+dGNsYXNzKTsKIAkJZXJyID0gbmV0X3htaXRfZXZhbChlcnIpOwogCX0KIApAQCAtOTcyLDYgKzk3NCw3IEBACiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxOwogCXN0cnVjdCBpcHY2X3BpbmZvICpuZXducDsKIAljb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CiAJc3RydWN0IHRjcDZfc29jayAqbmV3dGNwNnNrOwogCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQ7CiAJc3RydWN0IHRjcF9zb2NrICpuZXd0cDsKQEAgLTEwNTYsNyArMTA1OSw3IEBACiAJICovCiAKIAluZXdzay0+c2tfZ3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY2OwotCV9faXA2X2RzdF9zdG9yZShuZXdzaywgZHN0LCBOVUxMLCBOVUxMKTsKKwlpcDZfZHN0X3N0b3JlKG5ld3NrLCBkc3QsIE5VTEwsIE5VTEwpOwogCWluZXQ2X3NrX3J4X2RzdF9zZXQobmV3c2ssIHNrYik7CiAKIAluZXd0Y3A2c2sgPSAoc3RydWN0IHRjcDZfc29jayAqKW5ld3NrOwpAQCAtMTA5OCwxMyArMTEwMSwxNSBAQAogCSAgIGJ1dCB3ZSBtYWtlIG9uZSBtb3JlIG9uZSB0aGluZyB0aGVyZTogcmVhdHRhY2ggb3B0bWVtCiAJICAgdG8gbmV3c2suCiAJICovCi0JaWYgKG5wLT5vcHQpCi0JCW5ld25wLT5vcHQgPSBpcHY2X2R1cF9vcHRpb25zKG5ld3NrLCBucC0+b3B0KTsKLQorCW9wdCA9IHJjdV9kZXJlZmVyZW5jZShucC0+b3B0KTsKKwlpZiAob3B0KSB7CisJCW9wdCA9IGlwdjZfZHVwX29wdGlvbnMobmV3c2ssIG9wdCk7CisJCVJDVV9JTklUX1BPSU5URVIobmV3bnAtPm9wdCwgb3B0KTsKKwl9CiAJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKLQlpZiAobmV3bnAtPm9wdCkKLQkJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gKG5ld25wLT5vcHQtPm9wdF9uZmxlbiArCi0JCQkJCQkgICAgIG5ld25wLT5vcHQtPm9wdF9mbGVuKTsKKwlpZiAob3B0KQorCQlpbmV0X2NzayhuZXdzayktPmljc2tfZXh0X2hkcl9sZW4gPSBvcHQtPm9wdF9uZmxlbiArCisJCQkJCQkgICAgb3B0LT5vcHRfZmxlbjsKIAogCXRjcF9jYV9vcGVucmVxX2NoaWxkKG5ld3NrLCBkc3QpOwogCkBAIC0xNjkwLDYgKzE2OTUsOCBAQAogCWNvbnN0IHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc3ApOwogCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNwKTsKIAljb25zdCBzdHJ1Y3QgZmFzdG9wZW5fcXVldWUgKmZhc3RvcGVucSA9ICZpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5mYXN0b3BlbnE7CisJaW50IHJ4X3F1ZXVlOworCWludCBzdGF0ZTsKIAogCWRlc3QgID0gJnNwLT5za192Nl9kYWRkcjsKIAlzcmMgICA9ICZzcC0+c2tfdjZfcmN2X3NhZGRyOwpAQCAtMTcxMCw2ICsxNzE3LDE1IEBACiAJCXRpbWVyX2V4cGlyZXMgPSBqaWZmaWVzOwogCX0KIAorCXN0YXRlID0gc2tfc3RhdGVfbG9hZChzcCk7CisJaWYgKHN0YXRlID09IFRDUF9MSVNURU4pCisJCXJ4X3F1ZXVlID0gc3AtPnNrX2Fja19iYWNrbG9nOworCWVsc2UKKwkJLyogQmVjYXVzZSB3ZSBkb24ndCBsb2NrIHRoZSBzb2NrZXQsCisJCSAqIHdlIG1pZ2h0IGZpbmQgYSB0cmFuc2llbnQgbmVnYXRpdmUgdmFsdWUuCisJCSAqLworCQlyeF9xdWV1ZSA9IG1heF90KGludCwgdHAtPnJjdl9ueHQgLSB0cC0+Y29waWVkX3NlcSwgMCk7CisKIAlzZXFfcHJpbnRmKHNlcSwKIAkJICAgIiU0ZDogJTA4WCUwOFglMDhYJTA4WDolMDRYICUwOFglMDhYJTA4WCUwOFg6JTA0WCAiCiAJCSAgICIlMDJYICUwOFg6JTA4WCAlMDJYOiUwOGxYICUwOFggJTV1ICU4ZCAlbHUgJWQgJXBLICVsdSAlbHUgJXUgJXUgJWRcbiIsCkBAIC0xNzE4LDkgKzE3MzQsOSBAQAogCQkgICBzcmMtPnM2X2FkZHIzMlsyXSwgc3JjLT5zNl9hZGRyMzJbM10sIHNyY3AsCiAJCSAgIGRlc3QtPnM2X2FkZHIzMlswXSwgZGVzdC0+czZfYWRkcjMyWzFdLAogCQkgICBkZXN0LT5zNl9hZGRyMzJbMl0sIGRlc3QtPnM2X2FkZHIzMlszXSwgZGVzdHAsCi0JCSAgIHNwLT5za19zdGF0ZSwKLQkJICAgdHAtPndyaXRlX3NlcS10cC0+c25kX3VuYSwKLQkJICAgKHNwLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSA/IHNwLT5za19hY2tfYmFja2xvZyA6ICh0cC0+cmN2X254dCAtIHRwLT5jb3BpZWRfc2VxKSwKKwkJICAgc3RhdGUsCisJCSAgIHRwLT53cml0ZV9zZXEgLSB0cC0+c25kX3VuYSwKKwkJICAgcnhfcXVldWUsCiAJCSAgIHRpbWVyX2FjdGl2ZSwKIAkJICAgamlmZmllc19kZWx0YV90b19jbG9ja190KHRpbWVyX2V4cGlyZXMgLSBqaWZmaWVzKSwKIAkJICAgaWNzay0+aWNza19yZXRyYW5zbWl0cywKQEAgLTE3MzIsNyArMTc0OCw3IEBACiAJCSAgIGppZmZpZXNfdG9fY2xvY2tfdChpY3NrLT5pY3NrX2Fjay5hdG8pLAogCQkgICAoaWNzay0+aWNza19hY2sucXVpY2sgPDwgMSkgfCBpY3NrLT5pY3NrX2Fjay5waW5ncG9uZywKIAkJICAgdHAtPnNuZF9jd25kLAotCQkgICBzcC0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTiA/CisJCSAgIHN0YXRlID09IFRDUF9MSVNURU4gPwogCQkJZmFzdG9wZW5xLT5tYXhfcWxlbiA6CiAJCQkodGNwX2luX2luaXRpYWxfc2xvd3N0YXJ0KHRwKSA/IC0xIDogdHAtPnNuZF9zc3RocmVzaCkKIAkJICAgKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggMDFiY2I0OS4uOWRhMzI4NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTExMTAsNiArMTExMCw3IEBACiAJREVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHNpbjYsIG1zZy0+bXNnX25hbWUpOwogCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIsICpmaW5hbF9wLCBmaW5hbDsKIAlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCA9IE5VTEw7CisJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHRfdG9fZnJlZSA9IE5VTEw7CiAJc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsb3dsYWJlbCA9IE5VTEw7CiAJc3RydWN0IGZsb3dpNiBmbDY7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwpAQCAtMTI2Myw4ICsxMjY0LDEwIEBACiAJCQlvcHQgPSBOVUxMOwogCQljb25uZWN0ZWQgPSAwOwogCX0KLQlpZiAoIW9wdCkKLQkJb3B0ID0gbnAtPm9wdDsKKwlpZiAoIW9wdCkgeworCQlvcHQgPSB0eG9wdF9nZXQobnApOworCQlvcHRfdG9fZnJlZSA9IG9wdDsKKwl9CiAJaWYgKGZsb3dsYWJlbCkKIAkJb3B0ID0gZmw2X21lcmdlX29wdGlvbnMoJm9wdF9zcGFjZSwgZmxvd2xhYmVsLCBvcHQpOwogCW9wdCA9IGlwdjZfZml4dXBfb3B0aW9ucygmb3B0X3NwYWNlLCBvcHQpOwpAQCAtMTM3Myw2ICsxMzc2LDcgQEAKIG91dDoKIAlkc3RfcmVsZWFzZShkc3QpOwogCWZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKTsKKwl0eG9wdF9wdXQob3B0X3RvX2ZyZWUpOwogCWlmICghZXJyKQogCQlyZXR1cm4gbGVuOwogCS8qCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDU2NDM0MjMuLmMwNzQ3NzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAl4ZnJtX2RzdF9pZmRvd24oZHN0LCBkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTZfZHN0X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHN0X29wcyB4ZnJtNl9kc3Rfb3BzX3RlbXBsYXRlID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVDYsCiAJLmdjID0JCQl4ZnJtNl9nYXJiYWdlX2NvbGxlY3QsCiAJLnVwZGF0ZV9wbXR1ID0JCXhmcm02X3VwZGF0ZV9wbXR1LApAQCAtMjkzLDcgKzI5Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvIHhmcm02X3BvbGljeV9hZmluZm8gPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVUNiwKLQkuZHN0X29wcyA9CQkmeGZybTZfZHN0X29wcywKKwkuZHN0X29wcyA9CQkmeGZybTZfZHN0X29wc190ZW1wbGF0ZSwKIAkuZHN0X2xvb2t1cCA9CQl4ZnJtNl9kc3RfbG9va3VwLAogCS5nZXRfc2FkZHIgPQkJeGZybTZfZ2V0X3NhZGRyLAogCS5kZWNvZGVfc2Vzc2lvbiA9CV9kZWNvZGVfc2Vzc2lvbjYsCkBAIC0zMjUsNyArMzI1LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCB4ZnJtNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGRyOwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgeGZybTZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCB4ZnJtNl9uZXRfc3lzY3RsX2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCkBAIC0zNjUsMjQgKzM2NSw1MiBAQAogCWlmICghbmV0X2VxKG5ldCwgJmluaXRfbmV0KSkKIAkJa2ZyZWUodGFibGUpOwogfQorI2Vsc2UgLyogQ09ORklHX1NZU0NUTCAqLworc3RhdGljIGludCBpbmxpbmUgeGZybTZfbmV0X3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5saW5lIHhmcm02X25ldF9zeXNjdGxfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbnQgcmV0OworCisJbWVtY3B5KCZuZXQtPnhmcm0ueGZybTZfZHN0X29wcywgJnhmcm02X2RzdF9vcHNfdGVtcGxhdGUsCisJICAgICAgIHNpemVvZih4ZnJtNl9kc3Rfb3BzX3RlbXBsYXRlKSk7CisJcmV0ID0gZHN0X2VudHJpZXNfaW5pdCgmbmV0LT54ZnJtLnhmcm02X2RzdF9vcHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB4ZnJtNl9uZXRfc3lzY3RsX2luaXQobmV0KTsKKwlpZiAocmV0KQorCQlkc3RfZW50cmllc19kZXN0cm95KCZuZXQtPnhmcm0ueGZybTZfZHN0X29wcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHhmcm02X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwl4ZnJtNl9uZXRfc3lzY3RsX2V4aXQobmV0KTsKKwlkc3RfZW50cmllc19kZXN0cm95KCZuZXQtPnhmcm0ueGZybTZfZHN0X29wcyk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgeGZybTZfbmV0X29wcyA9IHsKIAkuaW5pdAk9IHhmcm02X25ldF9pbml0LAogCS5leGl0CT0geGZybTZfbmV0X2V4aXQsCiB9OwotI2VuZGlmCiAKIGludCBfX2luaXQgeGZybTZfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlkc3RfZW50cmllc19pbml0KCZ4ZnJtNl9kc3Rfb3BzKTsKLQogCXJldCA9IHhmcm02X3BvbGljeV9pbml0KCk7Ci0JaWYgKHJldCkgewotCQlkc3RfZW50cmllc19kZXN0cm95KCZ4ZnJtNl9kc3Rfb3BzKTsKKwlpZiAocmV0KQogCQlnb3RvIG91dDsKLQl9CiAJcmV0ID0geGZybTZfc3RhdGVfaW5pdCgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3BvbGljeTsKQEAgLTM5MSw5ICs0MTksNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3N0YXRlOwogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAogCXJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnhmcm02X25ldF9vcHMpOwotI2VuZGlmCiBvdXQ6CiAJcmV0dXJuIHJldDsKIG91dF9zdGF0ZToKQEAgLTQwNSwxMSArNDMxLDggQEAKIAogdm9pZCB4ZnJtNl9maW5pKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmeGZybTZfbmV0X29wcyk7Ci0jZW5kaWYKIAl4ZnJtNl9wcm90b2NvbF9maW5pKCk7CiAJeGZybTZfcG9saWN5X2ZpbmkoKTsKIAl4ZnJtNl9zdGF0ZV9maW5pKCk7Ci0JZHN0X2VudHJpZXNfZGVzdHJveSgmeGZybTZfZHN0X29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9hZl9pcmRhLmMgYi9uZXQvaXJkYS9hZl9pcmRhLmMKaW5kZXggZTZhYTQ4Yi4uOTIzYWJkNiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvYWZfaXJkYS5jCisrKyBiL25ldC9pcmRhL2FmX2lyZGEuYwpAQCAtMTA4Niw2ICsxMDg2LDkgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGlyZGFfc29jayAqc2VsZjsKIAorCWlmIChwcm90b2NvbCA8IDAgfHwgcHJvdG9jb2wgPiBTS19QUk9UT0NPTF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKG5ldCAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZmNiMjc1Mi4uNDM1NjA4YyAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMTQ4Myw3ICsxNDgzLDcgQEAKIAlpZiAoc29ja193cml0ZWFibGUoc2spICYmIGl1Y3ZfYmVsb3dfbXNnbGltKHNrKSkKIAkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQ7CiAJZWxzZQotCQlzZXRfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiAJcmV0dXJuIG1hc2s7CiB9CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2lwNi5jIGIvbmV0L2wydHAvbDJ0cF9pcDYuYwppbmRleCBhY2EzOGQ4Li5hMmM4NzQ3IDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2lwNi5jCisrKyBiL25ldC9sMnRwL2wydHBfaXA2LmMKQEAgLTQ4Niw2ICs0ODYsNyBAQAogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2wydHBpcDYgKiwgbHNhLCBtc2ctPm1zZ19uYW1lKTsKIAlzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCAqZmluYWxfcCwgZmluYWw7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0X3RvX2ZyZWUgPSBOVUxMOwogCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0ID0gTlVMTDsKIAlzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmxvd2xhYmVsID0gTlVMTDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOwpAQCAtNTc1LDggKzU3NiwxMCBAQAogCQkJb3B0ID0gTlVMTDsKIAl9CiAKLQlpZiAob3B0ID09IE5VTEwpCi0JCW9wdCA9IG5wLT5vcHQ7CisJaWYgKCFvcHQpIHsKKwkJb3B0ID0gdHhvcHRfZ2V0KG5wKTsKKwkJb3B0X3RvX2ZyZWUgPSBvcHQ7CisJfQogCWlmIChmbG93bGFiZWwpCiAJCW9wdCA9IGZsNl9tZXJnZV9vcHRpb25zKCZvcHRfc3BhY2UsIGZsb3dsYWJlbCwgb3B0KTsKIAlvcHQgPSBpcHY2X2ZpeHVwX29wdGlvbnMoJm9wdF9zcGFjZSwgb3B0KTsKQEAgLTYzMSw2ICs2MzQsNyBAQAogCWRzdF9yZWxlYXNlKGRzdCk7CiBvdXQ6CiAJZmw2X3NvY2tfcmVsZWFzZShmbG93bGFiZWwpOworCXR4b3B0X3B1dChvcHRfdG9fZnJlZSk7CiAKIAlyZXR1cm4gZXJyIDwgMCA/IGVyciA6IGxlbjsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCmluZGV4IGE3NThlYjg0Li5mZjc1NzE4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMKKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC01MDAsNyArNTAwLDcgQEAKIAkvKiBzZW5kIEFkZEJBIHJlcXVlc3QgKi8KIAlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHNkYXRhLCBzdGEtPnN0YS5hZGRyLCB0aWQsCiAJCQkJICAgICB0aWRfdHgtPmRpYWxvZ190b2tlbiwgc3RhcnRfc2VxX251bSwKLQkJCQkgICAgIGxvY2FsLT5ody5tYXhfdHhfYWdncmVnYXRpb25fc3ViZnJhbWVzLAorCQkJCSAgICAgSUVFRTgwMjExX01BWF9BTVBEVV9CVUYsCiAJCQkJICAgICB0aWRfdHgtPnRpbWVvdXQpOwogfQogCkBAIC05MjYsNiArOTI2LDcgQEAKIAlhbXNkdSA9IGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX0FNU0RVX01BU0s7CiAJdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOwogCWJ1Zl9zaXplID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0spID4+IDY7CisJYnVmX3NpemUgPSBtaW4oYnVmX3NpemUsIGxvY2FsLT5ody5tYXhfdHhfYWdncmVnYXRpb25fc3ViZnJhbWVzKTsKIAogCW11dGV4X2xvY2soJnN0YS0+YW1wZHVfbWxtZS5tdHgpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggYzJiZDFiNi4uYzEyZjM0OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMTE2OSw4ICsxMTY5LDcgQEAKIAkJICogcmMgaXNuJ3QgaW5pdGlhbGl6ZWQgaGVyZSB5ZXQsIHNvIGlnbm9yZSBpdAogCQkgKi8KIAkJX19pZWVlODAyMTFfdmh0X2hhbmRsZV9vcG1vZGUoc2RhdGEsIHN0YSwKLQkJCQkJICAgICAgcGFyYW1zLT5vcG1vZGVfbm90aWYsCi0JCQkJCSAgICAgIGJhbmQsIGZhbHNlKTsKKwkJCQkJICAgICAgcGFyYW1zLT5vcG1vZGVfbm90aWYsIGJhbmQpOwogCX0KIAogCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQpAQCAtMzQ1NCw4ICszNDUzLDEyIEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAl9IGVsc2UgewotCQkvKiBmb3IgY29va2llIGJlbG93ICovCi0JCWFja19za2IgPSBza2I7CisJCS8qIEFzc2lnbiBhIGR1bW15IG5vbi16ZXJvIGNvb2tpZSwgaXQncyBub3Qgc2VudCB0bworCQkgKiB1c2Vyc3BhY2UgaW4gdGhpcyBjYXNlIGJ1dCB3ZSByZWx5IG9uIGl0cyB2YWx1ZQorCQkgKiBpbnRlcm5hbGx5IGluIHRoZSBuZWVkX29mZmNoYW4gY2FzZSB0byBkaXN0aW5ndWlzaAorCQkgKiBtZ210LXR4IGZyb20gcmVtYWluLW9uLWNoYW5uZWwuCisJCSAqLworCQkqY29va2llID0gMHhmZmZmZmZmZjsKIAl9CiAKIAlpZiAoIW5lZWRfb2ZmY2hhbikgewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCBkODMyYmQ1Li41MzIyYjRjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMTcwOSwxMCArMTcwOSwxMCBAQAogdm9pZCBpZWVlODAyMTFfc3RhX3NldF9yeF9uc3Moc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdTMyIF9faWVlZTgwMjExX3ZodF9oYW5kbGVfb3Btb2RlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1OCBvcG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCBib29sIG5zc19vbmx5KTsKKwkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7CiB2b2lkIGllZWU4MDIxMV92aHRfaGFuZGxlX29wbW9kZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEsIHU4IG9wbW9kZSwKLQkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCBib29sIG5zc19vbmx5KTsKKwkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIHZvaWQgaWVlZTgwMjExX2FwcGx5X3ZodGNhcF9vdmVycmlkZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGFfdmh0X2NhcCAqdmh0X2NhcCk7CiB2b2lkIGllZWU4MDIxMV9nZXRfdmh0X21hc2tfZnJvbV9jYXAoX19sZTE2IHZodF9jYXAsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IGQwZGMxYmYuLmM5ZTMyNWQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC03Niw3ICs3Niw4IEBACiB2b2lkIGllZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgIGJvb2wgdXBkYXRlX2JzcykKIHsKLQlpZiAoX19pZWVlODAyMTFfcmVjYWxjX3R4cG93ZXIoc2RhdGEpIHx8IHVwZGF0ZV9ic3MpCisJaWYgKF9faWVlZTgwMjExX3JlY2FsY190eHBvd2VyKHNkYXRhKSB8fAorCSAgICAodXBkYXRlX2JzcyAmJiBpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpKQogCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfVFhQT1dFUik7CiB9CiAKQEAgLTE4NjEsNiArMTg2Miw3IEBACiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHNkYXRhLT5kZXYpOwogCX0gZWxzZSB7CiAJCWNmZzgwMjExX3VucmVnaXN0ZXJfd2Rldigmc2RhdGEtPndkZXYpOworCQlpZWVlODAyMTFfdGVhcmRvd25fc2RhdGEoc2RhdGEpOwogCQlrZnJlZShzZGF0YSk7CiAJfQogfQpAQCAtMTg3MCw3ICsxODcyLDYgQEAKIAlpZiAoV0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChTREFUQV9TVEFURV9SVU5OSU5HLCAmc2RhdGEtPnN0YXRlKSkpCiAJCXJldHVybjsKIAlpZWVlODAyMTFfZG9fc3RvcChzZGF0YSwgdHJ1ZSk7Ci0JaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhKHNkYXRhKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCA4NThmNmIxLi4xNzVmZmNmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTU0MSw4ICs1NDEsNyBAQAogCQkJICAgTkw4MDIxMV9GRUFUVVJFX0hUX0lCU1MgfAogCQkJICAgTkw4MDIxMV9GRUFUVVJFX1ZJRl9UWFBPV0VSIHwKIAkJCSAgIE5MODAyMTFfRkVBVFVSRV9NQUNfT05fQ1JFQVRFIHwKLQkJCSAgIE5MODAyMTFfRkVBVFVSRV9VU0VSU1BBQ0VfTVBNIHwKLQkJCSAgIE5MODAyMTFfRkVBVFVSRV9GVUxMX0FQX0NMSUVOVF9TVEFURTsKKwkJCSAgIE5MODAyMTFfRkVBVFVSRV9VU0VSU1BBQ0VfTVBNOwogCiAJaWYgKCFvcHMtPmh3X3NjYW4pCiAJCXdpcGh5LT5mZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfTE9XX1BSSU9SSVRZX1NDQU4gfApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCmluZGV4IGI4OTBlMjIuLmIzYjQ0YTUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTc3OSwxMCArNzc5LDggQEAKIHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9ub2RlX3JlY2xhaW0oc3RydWN0IHJjdV9oZWFkICpycCkKIHsKIAlzdHJ1Y3QgbXBhdGhfbm9kZSAqbm9kZSA9IGNvbnRhaW5lcl9vZihycCwgc3RydWN0IG1wYXRoX25vZGUsIHJjdSk7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBub2RlLT5tcGF0aC0+c2RhdGE7CiAKIAlkZWxfdGltZXJfc3luYygmbm9kZS0+bXBhdGgtPnRpbWVyKTsKLQlhdG9taWNfZGVjKCZzZGF0YS0+dS5tZXNoLm1wYXRocyk7CiAJa2ZyZWUobm9kZS0+bXBhdGgpOwogCWtmcmVlKG5vZGUpOwogfQpAQCAtNzkwLDggKzc4OCw5IEBACiAvKiBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBoYXNod2xvY2sgdGFrZW4gKi8KIHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbXBhdGhfbm9kZSAqbm9kZSkKIHsKLQlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKLQltcGF0aCA9IG5vZGUtPm1wYXRoOworCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoID0gbm9kZS0+bXBhdGg7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBub2RlLT5tcGF0aC0+c2RhdGE7CisKIAlzcGluX2xvY2soJm1wYXRoLT5zdGF0ZV9sb2NrKTsKIAltcGF0aC0+ZmxhZ3MgfD0gTUVTSF9QQVRIX1JFU09MVklORzsKIAlpZiAobXBhdGgtPmlzX2dhdGUpCkBAIC03OTksNiArNzk4LDcgQEAKIAlobGlzdF9kZWxfcmN1KCZub2RlLT5saXN0KTsKIAljYWxsX3JjdSgmbm9kZS0+cmN1LCBtZXNoX3BhdGhfbm9kZV9yZWNsYWltKTsKIAlzcGluX3VubG9jaygmbXBhdGgtPnN0YXRlX2xvY2spOworCWF0b21pY19kZWMoJnNkYXRhLT51Lm1lc2gubXBhdGhzKTsKIAlhdG9taWNfZGVjKCZ0YmwtPmVudHJpZXMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCBiMTQwY2M2Li4zYWEwNDM0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTEzNzksMjEgKzEzNzksMjYgQEAKIAkgKi8KIAlpZiAoaGFzXzgwMjExaF9wd3IgJiYKIAkgICAgKCFoYXNfY2lzY29fcHdyIHx8IHB3cl9sZXZlbF84MDIxMWggPD0gcHdyX2xldmVsX2Npc2NvKSkgeworCQluZXdfYXBfbGV2ZWwgPSBwd3JfbGV2ZWxfODAyMTFoOworCisJCWlmIChzZGF0YS0+YXBfcG93ZXJfbGV2ZWwgPT0gbmV3X2FwX2xldmVsKQorCQkJcmV0dXJuIDA7CisKIAkJc2RhdGFfZGJnKHNkYXRhLAogCQkJICAiTGltaXRpbmcgVFggcG93ZXIgdG8gJWQgKCVkIC0gJWQpIGRCbSBhcyBhZHZlcnRpc2VkIGJ5ICVwTVxuIiwKIAkJCSAgcHdyX2xldmVsXzgwMjExaCwgY2hhbl9wd3IsIHB3cl9yZWR1Y3Rpb25fODAyMTFoLAogCQkJICBzZGF0YS0+dS5tZ2QuYnNzaWQpOwotCQluZXdfYXBfbGV2ZWwgPSBwd3JfbGV2ZWxfODAyMTFoOwogCX0gZWxzZSB7ICAvKiBoYXNfY2lzY29fcHdyIGlzIGFsd2F5cyB0cnVlIGhlcmUuICovCisJCW5ld19hcF9sZXZlbCA9IHB3cl9sZXZlbF9jaXNjbzsKKworCQlpZiAoc2RhdGEtPmFwX3Bvd2VyX2xldmVsID09IG5ld19hcF9sZXZlbCkKKwkJCXJldHVybiAwOworCiAJCXNkYXRhX2RiZyhzZGF0YSwKIAkJCSAgIkxpbWl0aW5nIFRYIHBvd2VyIHRvICVkIGRCbSBhcyBhZHZlcnRpc2VkIGJ5ICVwTVxuIiwKIAkJCSAgcHdyX2xldmVsX2Npc2NvLCBzZGF0YS0+dS5tZ2QuYnNzaWQpOwotCQluZXdfYXBfbGV2ZWwgPSBwd3JfbGV2ZWxfY2lzY287CiAJfQogCi0JaWYgKHNkYXRhLT5hcF9wb3dlcl9sZXZlbCA9PSBuZXdfYXBfbGV2ZWwpCi0JCXJldHVybiAwOwotCiAJc2RhdGEtPmFwX3Bvd2VyX2xldmVsID0gbmV3X2FwX2xldmVsOwogCWlmIChfX2llZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzZGF0YSkpCiAJCXJldHVybiBCU1NfQ0hBTkdFRF9UWFBPV0VSOwpAQCAtMzU3NSw3ICszNTgwLDcgQEAKIAogCWlmIChzdGEgJiYgZWxlbXMub3Btb2RlX25vdGlmKQogCQlpZWVlODAyMTFfdmh0X2hhbmRsZV9vcG1vZGUoc2RhdGEsIHN0YSwgKmVsZW1zLm9wbW9kZV9ub3RpZiwKLQkJCQkJICAgIHJ4X3N0YXR1cy0+YmFuZCwgdHJ1ZSk7CisJCQkJCSAgICByeF9zdGF0dXMtPmJhbmQpOwogCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOwogCiAJY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX3B3cl9jb25zdHIoc2RhdGEsIGNoYW4sIG1nbXQsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IDhiYWU1ZGUuLjgyYWY0MDcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC0yNzM2LDggKzI3MzYsNyBAQAogCQkJb3Btb2RlID0gbWdtdC0+dS5hY3Rpb24udS52aHRfb3Btb2RlX25vdGlmLm9wZXJhdGluZ19tb2RlOwogCiAJCQlpZWVlODAyMTFfdmh0X2hhbmRsZV9vcG1vZGUocngtPnNkYXRhLCByeC0+c3RhLAotCQkJCQkJICAgIG9wbW9kZSwgc3RhdHVzLT5iYW5kLAotCQkJCQkJICAgIGZhbHNlKTsKKwkJCQkJCSAgICBvcG1vZGUsIHN0YXR1cy0+YmFuZCk7CiAJCQlnb3RvIGhhbmRsZWQ7CiAJCX0KIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zY2FuLmMgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCmluZGV4IDRhZWNhNGIuLmE0MTNlNTIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmMKKysrIGIvbmV0L21hYzgwMjExL3NjYW4uYwpAQCAtNTk3LDggKzU5Nyw4IEBACiAJCS8qIFdlIG5lZWQgdG8gZW5zdXJlIHBvd2VyIGxldmVsIGlzIGF0IG1heCBmb3Igc2Nhbm5pbmcuICovCiAJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOwogCi0JCWlmICgocmVxLT5jaGFubmVsc1swXS0+ZmxhZ3MgJgotCQkgICAgIElFRUU4MDIxMV9DSEFOX05PX0lSKSB8fAorCQlpZiAoKHJlcS0+Y2hhbm5lbHNbMF0tPmZsYWdzICYgKElFRUU4MDIxMV9DSEFOX05PX0lSIHwKKwkJCQkJCUlFRUU4MDIxMV9DSEFOX1JBREFSKSkgfHwKIAkJICAgICFyZXEtPm5fc3NpZHMpIHsKIAkJCW5leHRfZGVsYXkgPSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUU7CiAJCX0gZWxzZSB7CkBAIC02NDUsNyArNjQ1LDcgQEAKIAkgKiBUT0RPOiBjaGFubmVsIHN3aXRjaGluZyBhbHNvIGNvbnN1bWVzIHF1aXRlIHNvbWUgdGltZSwKIAkgKiBhZGQgdGhhdCBkZWxheSBhcyB3ZWxsIHRvIGdldCBhIGJldHRlciBlc3RpbWF0aW9uCiAJICovCi0JaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSVIpCisJaWYgKGNoYW4tPmZsYWdzICYgKElFRUU4MDIxMV9DSEFOX05PX0lSIHwgSUVFRTgwMjExX0NIQU5fUkFEQVIpKQogCQlyZXR1cm4gSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FOwogCXJldHVybiBJRUVFODAyMTFfUFJPQkVfREVMQVkgKyBJRUVFODAyMTFfQ0hBTk5FTF9USU1FOwogfQpAQCAtNzc3LDcgKzc3Nyw4IEBACiAJICoKIAkgKiBJbiBhbnkgY2FzZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgYSBwYXNzaXZlIHNjYW4uCiAJICovCi0JaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSVIgfHwgIXNjYW5fcmVxLT5uX3NzaWRzKSB7CisJaWYgKChjaGFuLT5mbGFncyAmIChJRUVFODAyMTFfQ0hBTl9OT19JUiB8IElFRUU4MDIxMV9DSEFOX1JBREFSKSkgfHwKKwkgICAgIXNjYW5fcmVxLT5uX3NzaWRzKSB7CiAJCSpuZXh0X2RlbGF5ID0gSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FOwogCQlsb2NhbC0+bmV4dF9zY2FuX3N0YXRlID0gU0NBTl9ERUNJU0lPTjsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggNzQwNTgwMi4uMzMzNDRmNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0xNjQxLDYgKzE2NDEsMjkgQEAKIAlkcnZfc3RvcChsb2NhbCk7CiB9CiAKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9mbHVzaF9jb21wbGV0ZWRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJICAgYm9vbCBhYm9ydGVkKQoreworCS8qIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBkb24ndCBoYW5kbGUgdGhlIHNjYW4gY29tcGxldGlvbiBpbgorCSAqIHRpbWUgZHVyaW5nIHN1c3BlbmQsIHNvIGlmIGl0J3Mgc3RpbGwgbWFya2VkIGFzIGNvbXBsZXRlZAorCSAqIGhlcmUsIHF1ZXVlIHRoZSB3b3JrIGFuZCBmbHVzaCBpdCB0byBjbGVhbiB0aGluZ3MgdXAuCisJICogSW5zdGVhZCBvZiBjYWxsaW5nIHRoZSB3b3JrZXIgZnVuY3Rpb24gZGlyZWN0bHkgaGVyZSwgd2UKKwkgKiByZWFsbHkgcXVldWUgaXQgdG8gYXZvaWQgcG90ZW50aWFsIHJhY2VzIHdpdGggb3RoZXIgZmxvd3MKKwkgKiBzY2hlZHVsaW5nIHRoZSBzYW1lIHdvcmsuCisJICovCisJaWYgKHRlc3RfYml0KFNDQU5fQ09NUExFVEVELCAmbG9jYWwtPnNjYW5uaW5nKSkgeworCQkvKiBJZiBjb21pbmcgZnJvbSByZWNvbmZpZ3VyYXRpb24gZmFpbHVyZSwgYWJvcnQgdGhlIHNjYW4gc28KKwkJICogd2UgZG9uJ3QgYXR0ZW1wdCB0byBjb250aW51ZSBhIHBhcnRpYWwgSFcgc2NhbiAtIHdoaWNoIGlzCisJCSAqIHBvc3NpYmxlIG90aGVyd2lzZSBpZiAoZS5nLikgdGhlIDIuNCBHSHogcG9ydGlvbiB3YXMgdGhlCisJCSAqIGNvbXBsZXRlZCBzY2FuLCBhbmQgYSA1IEdIeiBwb3J0aW9uIGlzIHN0aWxsIHBlbmRpbmcuCisJCSAqLworCQlpZiAoYWJvcnRlZCkKKwkJCXNldF9iaXQoU0NBTl9BQk9SVEVELCAmbG9jYWwtPnNjYW5uaW5nKTsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LCAmbG9jYWwtPnNjYW5fd29yaywgMCk7CisJCWZsdXNoX2RlbGF5ZWRfd29yaygmbG9jYWwtPnNjYW5fd29yayk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX3JlY29uZmlnX2ZhaWx1cmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CkBAIC0xNjYwLDYgKzE2ODMsOCBAQAogCWxvY2FsLT5zdXNwZW5kZWQgPSBmYWxzZTsKIAlsb2NhbC0+aW5fcmVjb25maWcgPSBmYWxzZTsKIAorCWllZWU4MDIxMV9mbHVzaF9jb21wbGV0ZWRfc2Nhbihsb2NhbCwgdHJ1ZSk7CisKIAkvKiBzY2hlZHVsZWQgc2NhbiBjbGVhcmx5IGNhbid0IGJlIHJ1bm5pbmcgYW55IG1vcmUsIGJ1dCB0ZWxsCiAJICogY2ZnODAyMTEgYW5kIGNsZWFyIGxvY2FsIHN0YXRlCiAJICovCkBAIC0xNjk4LDYgKzE3MjMsMjcgQEAKIAltdXRleF91bmxvY2soJmxvY2FsLT5jaGFuY3R4X210eCk7CiB9CiAKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yZWNvbmZpZ19zdGF0aW9ucyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKworCS8qIGFkZCBTVEFzIGJhY2sgKi8KKwltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJZW51bSBpZWVlODAyMTFfc3RhX3N0YXRlIHN0YXRlOworCisJCWlmICghc3RhLT51cGxvYWRlZCB8fCBzdGEtPnNkYXRhICE9IHNkYXRhKQorCQkJY29udGludWU7CisKKwkJZm9yIChzdGF0ZSA9IElFRUU4MDIxMV9TVEFfTk9URVhJU1Q7CisJCSAgICAgc3RhdGUgPCBzdGEtPnN0YV9zdGF0ZTsgc3RhdGUrKykKKwkJCVdBUk5fT04oZHJ2X3N0YV9zdGF0ZShsb2NhbCwgc3RhLT5zZGF0YSwgc3RhLCBzdGF0ZSwKKwkJCQkJICAgICAgc3RhdGUgKyAxKSk7CisJfQorCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOworfQorCiBpbnQgaWVlZTgwMjExX3JlY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKQEAgLTE4MzMsNTAgKzE4NzksMTEgQEAKIAkJCQlXQVJOX09OKGRydl9hZGRfY2hhbmN0eChsb2NhbCwgY3R4KSk7CiAJCW11dGV4X3VubG9jaygmbG9jYWwtPmNoYW5jdHhfbXR4KTsKIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQotCQkJCWNvbnRpbnVlOwotCQkJaWVlZTgwMjExX2Fzc2lnbl9jaGFuY3R4KGxvY2FsLCBzZGF0YSk7Ci0JCX0KLQogCQlzZGF0YSA9IHJ0bmxfZGVyZWZlcmVuY2UobG9jYWwtPm1vbml0b3Jfc2RhdGEpOwogCQlpZiAoc2RhdGEgJiYgaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJaWVlZTgwMjExX2Fzc2lnbl9jaGFuY3R4KGxvY2FsLCBzZGF0YSk7CiAJfQogCi0JLyogYWRkIFNUQXMgYmFjayAqLwotCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgewotCQllbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgc3RhdGU7Ci0KLQkJaWYgKCFzdGEtPnVwbG9hZGVkKQotCQkJY29udGludWU7Ci0KLQkJLyogQVAtbW9kZSBzdGF0aW9ucyB3aWxsIGJlIGFkZGVkIGxhdGVyICovCi0JCWlmIChzdGEtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoc3RhdGUgPSBJRUVFODAyMTFfU1RBX05PVEVYSVNUOwotCQkgICAgIHN0YXRlIDwgc3RhLT5zdGFfc3RhdGU7IHN0YXRlKyspCi0JCQlXQVJOX09OKGRydl9zdGFfc3RhdGUobG9jYWwsIHN0YS0+c2RhdGEsIHN0YSwgc3RhdGUsCi0JCQkJCSAgICAgIHN0YXRlICsgMSkpOwotCX0KLQltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKLQotCS8qIHJlY29uZmlndXJlIHR4IGNvbmYgKi8KLQlpZiAoaHctPnF1ZXVlcyA+PSBJRUVFODAyMTFfTlVNX0FDUykgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiB8fAotCQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SIHx8Ci0JCQkgICAgIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKLQkJCQljb250aW51ZTsKLQotCQkJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspCi0JCQkJZHJ2X2NvbmZfdHgobG9jYWwsIHNkYXRhLCBpLAotCQkJCQkgICAgJnNkYXRhLT50eF9jb25mW2ldKTsKLQkJfQotCX0KLQogCS8qIHJlY29uZmlndXJlIGhhcmR3YXJlICovCiAJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgfjApOwogCkBAIC0xODg5LDYgKzE4OTYsMjIgQEAKIAkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQljb250aW51ZTsKIAorCQlpZWVlODAyMTFfYXNzaWduX2NoYW5jdHgobG9jYWwsIHNkYXRhKTsKKworCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWVlZTgwMjExX3JlY29uZmlnX3N0YXRpb25zKHNkYXRhKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOiAvKiBBUCBzdGF0aW9ucyBhcmUgaGFuZGxlZCBsYXRlciAqLworCQkJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspCisJCQkJZHJ2X2NvbmZfdHgobG9jYWwsIHNkYXRhLCBpLAorCQkJCQkgICAgJnNkYXRhLT50eF9jb25mW2ldKTsKKwkJCWJyZWFrOworCQl9CisKIAkJLyogY29tbW9uIGNoYW5nZSBmbGFncyBmb3IgYWxsIGludGVyZmFjZSB0eXBlcyAqLwogCQljaGFuZ2VkID0gQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UIHwKIAkJCSAgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFIHwKQEAgLTIwNzQsMTcgKzIwOTcsNyBAQAogCW1iKCk7CiAJbG9jYWwtPnJlc3VtaW5nID0gZmFsc2U7CiAKLQkvKiBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgZG9uJ3QgaGFuZGxlIHRoZSBzY2FuIGNvbXBsZXRpb24gaW4KLQkgKiB0aW1lIGR1cmluZyBzdXNwZW5kLCBzbyBpZiBpdCdzIHN0aWxsIG1hcmtlZCBhcyBjb21wbGV0ZWQKLQkgKiBoZXJlLCBxdWV1ZSB0aGUgd29yayBhbmQgZmx1c2ggaXQgdG8gY2xlYW4gdGhpbmdzIHVwLgotCSAqIEluc3RlYWQgb2YgY2FsbGluZyB0aGUgd29ya2VyIGZ1bmN0aW9uIGRpcmVjdGx5IGhlcmUsIHdlCi0JICogcmVhbGx5IHF1ZXVlIGl0IHRvIGF2b2lkIHBvdGVudGlhbCByYWNlcyB3aXRoIG90aGVyIGZsb3dzCi0JICogc2NoZWR1bGluZyB0aGUgc2FtZSB3b3JrLgotCSAqLwotCWlmICh0ZXN0X2JpdChTQ0FOX0NPTVBMRVRFRCwgJmxvY2FsLT5zY2FubmluZykpIHsKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LCAmbG9jYWwtPnNjYW5fd29yaywgMCk7Ci0JCWZsdXNoX2RlbGF5ZWRfd29yaygmbG9jYWwtPnNjYW5fd29yayk7Ci0JfQorCWllZWU4MDIxMV9mbHVzaF9jb21wbGV0ZWRfc2Nhbihsb2NhbCwgZmFsc2UpOwogCiAJaWYgKGxvY2FsLT5vcGVuX2NvdW50ICYmICFyZWNvbmZpZ19kdWVfdG9fd293bGFuKQogCQlkcnZfcmVjb25maWdfY29tcGxldGUobG9jYWwsIElFRUU4MDIxMV9SRUNPTkZJR19UWVBFX1NVU1BFTkQpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3ZodC5jIGIvbmV0L21hYzgwMjExL3ZodC5jCmluZGV4IGZmMWM3OTguLmMzOGIyZjAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS92aHQuYworKysgYi9uZXQvbWFjODAyMTEvdmh0LmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCiB1MzIgX19pZWVlODAyMTFfdmh0X2hhbmRsZV9vcG1vZGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTggb3Btb2RlLAotCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCBib29sIG5zc19vbmx5KQorCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwpAQCAtNDAxLDkgKzQwMSw2IEBACiAJCWNoYW5nZWQgfD0gSUVFRTgwMjExX1JDX05TU19DSEFOR0VEOwogCX0KIAotCWlmIChuc3Nfb25seSkKLQkJcmV0dXJuIGNoYW5nZWQ7Ci0KIAlzd2l0Y2ggKG9wbW9kZSAmIElFRUU4MDIxMV9PUE1PREVfTk9USUZfQ0hBTldJRFRIX01BU0spIHsKIAljYXNlIElFRUU4MDIxMV9PUE1PREVfTk9USUZfQ0hBTldJRFRIXzIwTUhaOgogCQlzdGEtPmN1cl9tYXhfYmFuZHdpZHRoID0gSUVFRTgwMjExX1NUQV9SWF9CV18yMDsKQEAgLTQzMCwxMyArNDI3LDEyIEBACiAKIHZvaWQgaWVlZTgwMjExX3ZodF9oYW5kbGVfb3Btb2RlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTggb3Btb2RlLAotCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIGJvb2wgbnNzX29ubHkpCisJCQkJIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07CiAKLQl1MzIgY2hhbmdlZCA9IF9faWVlZTgwMjExX3ZodF9oYW5kbGVfb3Btb2RlKHNkYXRhLCBzdGEsIG9wbW9kZSwKLQkJCQkJCSAgICBiYW5kLCBuc3Nfb25seSk7CisJdTMyIGNoYW5nZWQgPSBfX2llZWU4MDIxMV92aHRfaGFuZGxlX29wbW9kZShzZGF0YSwgc3RhLCBvcG1vZGUsIGJhbmQpOwogCiAJaWYgKGNoYW5nZWQgPiAwKQogCQlyYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUobG9jYWwsIHNiYW5kLCBzdGEsIGNoYW5nZWQpOwpkaWZmIC0tZ2l0IGEvbmV0L21wbHMvYWZfbXBscy5jIGIvbmV0L21wbHMvYWZfbXBscy5jCmluZGV4IGM3MGQ3NTAuLmMzMmZjNDEgMTAwNjQ0Ci0tLSBhL25ldC9tcGxzL2FmX21wbHMuYworKysgYi9uZXQvbXBscy9hZl9tcGxzLmMKQEAgLTI3LDYgKzI3LDggQEAKICAqLwogI2RlZmluZSBNQVhfTVBfU0VMRUNUX0xBQkVMUyA0CiAKKyNkZWZpbmUgTVBMU19ORUlHSF9UQUJMRV9VTlNQRUMgKE5FSUdIX0xJTktfVEFCTEUgKyAxKQorCiBzdGF0aWMgaW50IHplcm8gPSAwOwogc3RhdGljIGludCBsYWJlbF9saW1pdCA9ICgxIDw8IDIwKSAtIDE7CiAKQEAgLTMxNyw3ICszMTksMTMgQEAKIAkJfQogCX0KIAotCWVyciA9IG5laWdoX3htaXQobmgtPm5oX3ZpYV90YWJsZSwgb3V0X2RldiwgbXBsc19uaF92aWEocnQsIG5oKSwgc2tiKTsKKwkvKiBJZiB2aWEgd2Fzbid0IHNwZWNpZmllZCB0aGVuIHNlbmQgb3V0IHVzaW5nIGRldmljZSBhZGRyZXNzICovCisJaWYgKG5oLT5uaF92aWFfdGFibGUgPT0gTVBMU19ORUlHSF9UQUJMRV9VTlNQRUMpCisJCWVyciA9IG5laWdoX3htaXQoTkVJR0hfTElOS19UQUJMRSwgb3V0X2RldiwKKwkJCQkgb3V0X2Rldi0+ZGV2X2FkZHIsIHNrYik7CisJZWxzZQorCQllcnIgPSBuZWlnaF94bWl0KG5oLT5uaF92aWFfdGFibGUsIG91dF9kZXYsCisJCQkJIG1wbHNfbmhfdmlhKHJ0LCBuaCksIHNrYik7CiAJaWYgKGVycikKIAkJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IHBhY2tldCB0cmFuc21pc3Npb24gZmFpbGVkOiAlZFxuIiwKIAkJCQkgICAgX19mdW5jX18sIGVycik7CkBAIC01MzQsNiArNTQyLDEwIEBACiAJaWYgKCFtcGxzX2Rldl9nZXQoZGV2KSkKIAkJZ290byBlcnJvdXQ7CiAKKwlpZiAoKG5oLT5uaF92aWFfdGFibGUgPT0gTkVJR0hfTElOS19UQUJMRSkgJiYKKwkgICAgKGRldi0+YWRkcl9sZW4gIT0gbmgtPm5oX3ZpYV9hbGVuKSkKKwkJZ290byBlcnJvdXQ7CisKIAlSQ1VfSU5JVF9QT0lOVEVSKG5oLT5uaF9kZXYsIGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTU5MiwxMCArNjA0LDE0IEBACiAJCQlnb3RvIGVycm91dDsKIAl9CiAKLQllcnIgPSBubGFfZ2V0X3ZpYSh2aWEsICZuaC0+bmhfdmlhX2FsZW4sICZuaC0+bmhfdmlhX3RhYmxlLAotCQkJICBfX21wbHNfbmhfdmlhKHJ0LCBuaCkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyb3V0OworCWlmICh2aWEpIHsKKwkJZXJyID0gbmxhX2dldF92aWEodmlhLCAmbmgtPm5oX3ZpYV9hbGVuLCAmbmgtPm5oX3ZpYV90YWJsZSwKKwkJCQkgIF9fbXBsc19uaF92aWEocnQsIG5oKSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm91dDsKKwl9IGVsc2UgeworCQluaC0+bmhfdmlhX3RhYmxlID0gTVBMU19ORUlHSF9UQUJMRV9VTlNQRUM7CisJfQogCiAJZXJyID0gbXBsc19uaF9hc3NpZ25fZGV2KG5ldCwgcnQsIG5oLCBvaWYpOwogCWlmIChlcnIpCkBAIC02NzcsOSArNjkzLDYgQEAKIAkJCW5sYV9uZXdkc3QgPSBubGFfZmluZChhdHRycywgYXR0cmxlbiwgUlRBX05FV0RTVCk7CiAJCX0KIAotCQlpZiAoIW5sYV92aWEpCi0JCQlnb3RvIGVycm91dDsKLQogCQllcnIgPSBtcGxzX25oX2J1aWxkKGNmZy0+cmNfbmxpbmZvLm5sX25ldCwgcnQsIG5oLAogCQkJCSAgICBydG5oLT5ydG5oX2lmaW5kZXgsIG5sYV92aWEsCiAJCQkJICAgIG5sYV9uZXdkc3QpOwpAQCAtMTExOCw2ICsxMTMxLDcgQEAKIAogCWNmZy0+cmNfbGFiZWwJCT0gTEFCRUxfTk9UX1NQRUNJRklFRDsKIAljZmctPnJjX3Byb3RvY29sCT0gcnRtLT5ydG1fcHJvdG9jb2w7CisJY2ZnLT5yY192aWFfdGFibGUJPSBNUExTX05FSUdIX1RBQkxFX1VOU1BFQzsKIAljZmctPnJjX25sZmxhZ3MJCT0gbmxoLT5ubG1zZ19mbGFnczsKIAljZmctPnJjX25saW5mby5wb3J0aWQJPSBORVRMSU5LX0NCKHNrYikucG9ydGlkOwogCWNmZy0+cmNfbmxpbmZvLm5saAk9IG5saDsKQEAgLTEyMzEsNyArMTI0NSw4IEBACiAJCSAgICBubGFfcHV0X2xhYmVscyhza2IsIFJUQV9ORVdEU1QsIG5oLT5uaF9sYWJlbHMsCiAJCQkJICAgbmgtPm5oX2xhYmVsKSkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCQlpZiAobmxhX3B1dF92aWEoc2tiLCBuaC0+bmhfdmlhX3RhYmxlLCBtcGxzX25oX3ZpYShydCwgbmgpLAorCQlpZiAobmgtPm5oX3ZpYV90YWJsZSAhPSBNUExTX05FSUdIX1RBQkxFX1VOU1BFQyAmJgorCQkgICAgbmxhX3B1dF92aWEoc2tiLCBuaC0+bmhfdmlhX3RhYmxlLCBtcGxzX25oX3ZpYShydCwgbmgpLAogCQkJCW5oLT5uaF92aWFfYWxlbikpCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAkJZGV2ID0gcnRubF9kZXJlZmVyZW5jZShuaC0+bmhfZGV2KTsKQEAgLTEyNTcsNyArMTI3Miw4IEBACiAJCQkJCQkJICAgIG5oLT5uaF9sYWJlbHMsCiAJCQkJCQkJICAgIG5oLT5uaF9sYWJlbCkpCiAJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JCQlpZiAobmxhX3B1dF92aWEoc2tiLCBuaC0+bmhfdmlhX3RhYmxlLAorCQkJaWYgKG5oLT5uaF92aWFfdGFibGUgIT0gTVBMU19ORUlHSF9UQUJMRV9VTlNQRUMgJiYKKwkJCSAgICBubGFfcHV0X3ZpYShza2IsIG5oLT5uaF92aWFfdGFibGUsCiAJCQkJCW1wbHNfbmhfdmlhKHJ0LCBuaCksCiAJCQkJCW5oLT5uaF92aWFfYWxlbikpCiAJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CkBAIC0xMzE5LDcgKzEzMzUsOCBAQAogCiAJCWlmIChuaC0+bmhfZGV2KQogCQkJcGF5bG9hZCArPSBubGFfdG90YWxfc2l6ZSg0KTsgLyogUlRBX09JRiAqLwotCQlwYXlsb2FkICs9IG5sYV90b3RhbF9zaXplKDIgKyBuaC0+bmhfdmlhX2FsZW4pOyAvKiBSVEFfVklBICovCisJCWlmIChuaC0+bmhfdmlhX3RhYmxlICE9IE1QTFNfTkVJR0hfVEFCTEVfVU5TUEVDKSAvKiBSVEFfVklBICovCisJCQlwYXlsb2FkICs9IG5sYV90b3RhbF9zaXplKDIgKyBuaC0+bmhfdmlhX2FsZW4pOwogCQlpZiAobmgtPm5oX2xhYmVscykgLyogUlRBX05FV0RTVCAqLwogCQkJcGF5bG9hZCArPSBubGFfdG90YWxfc2l6ZShuaC0+bmhfbGFiZWxzICogNCk7CiAJfSBlbHNlIHsKQEAgLTEzMjgsNyArMTM0NSw5IEBACiAKIAkJZm9yX25leHRob3BzKHJ0KSB7CiAJCQluaHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydG5leHRob3ApKTsKLQkJCW5oc2l6ZSArPSBubGFfdG90YWxfc2l6ZSgyICsgbmgtPm5oX3ZpYV9hbGVuKTsKKwkJCS8qIFJUQV9WSUEgKi8KKwkJCWlmIChuaC0+bmhfdmlhX3RhYmxlICE9IE1QTFNfTkVJR0hfVEFCTEVfVU5TUEVDKQorCQkJCW5oc2l6ZSArPSBubGFfdG90YWxfc2l6ZSgyICsgbmgtPm5oX3ZpYV9hbGVuKTsKIAkJCWlmIChuaC0+bmhfbGFiZWxzKQogCQkJCW5oc2l6ZSArPSBubGFfdG90YWxfc2l6ZShuaC0+bmhfbGFiZWxzICogNCk7CiAJCX0gZW5kZm9yX25leHRob3BzKHJ0KTsKZGlmZiAtLWdpdCBhL25ldC9tcGxzL21wbHNfaXB0dW5uZWwuYyBiL25ldC9tcGxzL21wbHNfaXB0dW5uZWwuYwppbmRleCA2NzU5MWFlLi42NGFmZDNkIDEwMDY0NAotLS0gYS9uZXQvbXBscy9tcGxzX2lwdHVubmVsLmMKKysrIGIvbmV0L21wbHMvbXBsc19pcHR1bm5lbC5jCkBAIC01NCwxMCArNTQsMTAgQEAKIAl1bnNpZ25lZCBpbnQgdHRsOwogCiAJLyogT2J0YWluIHRoZSB0dGwgKi8KLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKwlpZiAoZHN0LT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUKSB7CiAJCXR0bCA9IGlwX2hkcihza2IpLT50dGw7CiAJCXJ0ID0gKHN0cnVjdCBydGFibGUgKilkc3Q7Ci0JfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CisJfSBlbHNlIGlmIChkc3QtPm9wcy0+ZmFtaWx5ID09IEFGX0lORVQ2KSB7CiAJCXR0bCA9IGlwdjZfaGRyKHNrYiktPmhvcF9saW1pdDsKIAkJcnQ2ID0gKHN0cnVjdCBydDZfaW5mbyAqKWRzdDsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGUyMjM0OWUuLjQ2OTI3ODIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTg2OSw3ICs4NjksNyBAQAogCWRlcGVuZHMgb24gSVBWNiB8fCBJUFY2PW4KIAlkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLCiAJc2VsZWN0IE5GX0RVUF9JUFY0Ci0Jc2VsZWN0IE5GX0RVUF9JUFY2IGlmIElQNl9ORl9JUFRBQkxFUworCXNlbGVjdCBORl9EVVBfSVBWNiBpZiBJUDZfTkZfSVBUQUJMRVMgIT0gbgogCS0tLWhlbHAtLS0KIAlUaGlzIG9wdGlvbiBhZGRzIGEgIlRFRSIgdGFyZ2V0IHdpdGggd2hpY2ggYSBwYWNrZXQgY2FuIGJlIGNsb25lZCBhbmQKIAl0aGlzIGNsb25lIGJlIHJlcm91dGVkIHRvIGFub3RoZXIgbmV4dGhvcC4KQEAgLTg4Miw3ICs4ODIsNyBAQAogCWRlcGVuZHMgb24gSVA2X05GX0lQVEFCTEVTIHx8IElQNl9ORl9JUFRBQkxFUz1uCiAJZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUKIAlzZWxlY3QgTkZfREVGUkFHX0lQVjQKLQlzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVA2X05GX0lQVEFCTEVTCisJc2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQNl9ORl9JUFRBQkxFUyAhPSBuCiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBUUFJPWFknIHRhcmdldCwgd2hpY2ggaXMgc29tZXdoYXQgc2ltaWxhciB0bwogCSAgUkVESVJFQ1QuICBJdCBjYW4gb25seSBiZSB1c2VkIGluIHRoZSBtYW5nbGUgdGFibGUgYW5kIGlzIHVzZWZ1bApAQCAtMTM3NSw3ICsxMzc1LDcgQEAKIAlkZXBlbmRzIG9uIElQVjYgfHwgSVBWNj1uCiAJZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgSVA2X05GX0lQVEFCTEVTPW4KIAlzZWxlY3QgTkZfREVGUkFHX0lQVjQKLQlzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVA2X05GX0lQVEFCTEVTCisJc2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQNl9ORl9JUFRBQkxFUyAhPSBuCiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBzb2NrZXQnIG1hdGNoLCB3aGljaCBjYW4gYmUgdXNlZCB0byBtYXRjaAogCSAgcGFja2V0cyBmb3Igd2hpY2ggYSBUQ1Agb3IgVURQIHNvY2tldCBsb29rdXAgZmluZHMgYSB2YWxpZCBzb2NrZXQuCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmggYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfZ2VuLmgKaW5kZXggZDA1ZTc1OS4uYjBiYzQ3NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2dlbi5oCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9nZW4uaApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBtdHlwZV9nYwkJSVBTRVRfVE9LRU4oTVRZUEUsIF9nYykKICNkZWZpbmUgbXR5cGUJCQlNVFlQRQogCi0jZGVmaW5lIGdldF9leHQoc2V0LCBtYXAsIGlkKQkoKG1hcCktPmV4dGVuc2lvbnMgKyAoc2V0KS0+ZHNpemUgKiAoaWQpKQorI2RlZmluZSBnZXRfZXh0KHNldCwgbWFwLCBpZCkJKChtYXApLT5leHRlbnNpb25zICsgKChzZXQpLT5kc2l6ZSAqIChpZCkpKQogCiBzdGF0aWMgdm9pZAogbXR5cGVfZ2NfaW5pdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIHZvaWQgKCpnYykodW5zaWduZWQgbG9uZyB1bF9zZXQpKQpAQCAtNjcsMTIgKzY3LDkgQEAKIAkJZGVsX3RpbWVyX3N5bmMoJm1hcC0+Z2MpOwogCiAJaXBfc2V0X2ZyZWUobWFwLT5tZW1iZXJzKTsKLQlpZiAoc2V0LT5kc2l6ZSkgewotCQlpZiAoc2V0LT5leHRlbnNpb25zICYgSVBTRVRfRVhUX0RFU1RST1kpCi0JCQltdHlwZV9leHRfY2xlYW51cChzZXQpOwotCQlpcF9zZXRfZnJlZShtYXAtPmV4dGVuc2lvbnMpOwotCX0KLQlrZnJlZShtYXApOworCWlmIChzZXQtPmRzaXplICYmIHNldC0+ZXh0ZW5zaW9ucyAmIElQU0VUX0VYVF9ERVNUUk9ZKQorCQltdHlwZV9leHRfY2xlYW51cChzZXQpOworCWlwX3NldF9mcmVlKG1hcCk7CiAKIAlzZXQtPmRhdGEgPSBOVUxMOwogfQpAQCAtOTIsMTYgKzg5LDE0IEBACiB7CiAJY29uc3Qgc3RydWN0IG10eXBlICptYXAgPSBzZXQtPmRhdGE7CiAJc3RydWN0IG5sYXR0ciAqbmVzdGVkOworCXNpemVfdCBtZW1zaXplID0gc2l6ZW9mKCptYXApICsgbWFwLT5tZW1zaXplOwogCiAJbmVzdGVkID0gaXBzZXRfbmVzdF9zdGFydChza2IsIElQU0VUX0FUVFJfREFUQSk7CiAJaWYgKCFuZXN0ZWQpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCWlmIChtdHlwZV9kb19oZWFkKHNrYiwgbWFwKSB8fAogCSAgICBubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLCBodG9ubChzZXQtPnJlZiAtIDEpKSB8fAotCSAgICBubGFfcHV0X25ldDMyKHNrYiwgSVBTRVRfQVRUUl9NRU1TSVpFLAotCQkJICBodG9ubChzaXplb2YoKm1hcCkgKwotCQkJCW1hcC0+bWVtc2l6ZSArCi0JCQkJc2V0LT5kc2l6ZSAqIG1hcC0+ZWxlbWVudHMpKSkKKwkgICAgbmxhX3B1dF9uZXQzMihza2IsIElQU0VUX0FUVFJfTUVNU0laRSwgaHRvbmwobWVtc2l6ZSkpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAlpZiAodW5saWtlbHkoaXBfc2V0X3B1dF9mbGFncyhza2IsIHNldCkpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMKaW5kZXggNjRhNTY0My4uNDc4M2VmZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwLmMKQEAgLTQxLDcgKzQxLDYgQEAKIC8qIFR5cGUgc3RydWN0dXJlICovCiBzdHJ1Y3QgYml0bWFwX2lwIHsKIAl2b2lkICptZW1iZXJzOwkJLyogdGhlIHNldCBtZW1iZXJzICovCi0Jdm9pZCAqZXh0ZW5zaW9uczsJLyogZGF0YSBleHRlbnNpb25zICovCiAJdTMyIGZpcnN0X2lwOwkJLyogaG9zdCBieXRlIG9yZGVyLCBpbmNsdWRlZCBpbiByYW5nZSAqLwogCXUzMiBsYXN0X2lwOwkJLyogaG9zdCBieXRlIG9yZGVyLCBpbmNsdWRlZCBpbiByYW5nZSAqLwogCXUzMiBlbGVtZW50czsJCS8qIG51bWJlciBvZiBtYXggZWxlbWVudHMgaW4gdGhlIHNldCAqLwpAQCAtNDksNiArNDgsOCBAQAogCXNpemVfdCBtZW1zaXplOwkJLyogbWVtYmVycyBzaXplICovCiAJdTggbmV0bWFzazsJCS8qIHN1Ym5ldCBuZXRtYXNrICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZ2M7CS8qIGdhcmJhZ2UgY29sbGVjdGlvbiAqLworCXVuc2lnbmVkIGNoYXIgZXh0ZW5zaW9uc1swXQkvKiBkYXRhIGV4dGVuc2lvbnMgKi8KKwkJX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOwogfTsKIAogLyogQURUIHN0cnVjdHVyZSBmb3IgZ2VuZXJpYyBmdW5jdGlvbiBhcmdzICovCkBAIC0yMjQsMTMgKzIyNSw2IEBACiAJbWFwLT5tZW1iZXJzID0gaXBfc2V0X2FsbG9jKG1hcC0+bWVtc2l6ZSk7CiAJaWYgKCFtYXAtPm1lbWJlcnMpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoc2V0LT5kc2l6ZSkgewotCQltYXAtPmV4dGVuc2lvbnMgPSBpcF9zZXRfYWxsb2Moc2V0LT5kc2l6ZSAqIGVsZW1lbnRzKTsKLQkJaWYgKCFtYXAtPmV4dGVuc2lvbnMpIHsKLQkJCWtmcmVlKG1hcC0+bWVtYmVycyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9CiAJbWFwLT5maXJzdF9pcCA9IGZpcnN0X2lwOwogCW1hcC0+bGFzdF9pcCA9IGxhc3RfaXA7CiAJbWFwLT5lbGVtZW50cyA9IGVsZW1lbnRzOwpAQCAtMzE2LDEzICszMTAsMTMgQEAKIAlwcl9kZWJ1ZygiaG9zdHMgJXUsIGVsZW1lbnRzICVsbHVcbiIsCiAJCSBob3N0cywgKHVuc2lnbmVkIGxvbmcgbG9uZyllbGVtZW50cyk7CiAKLQltYXAgPSBremFsbG9jKHNpemVvZigqbWFwKSwgR0ZQX0tFUk5FTCk7CisJc2V0LT5kc2l6ZSA9IGlwX3NldF9lbGVtX2xlbihzZXQsIHRiLCAwLCAwKTsKKwltYXAgPSBpcF9zZXRfYWxsb2Moc2l6ZW9mKCptYXApICsgZWxlbWVudHMgKiBzZXQtPmRzaXplKTsKIAlpZiAoIW1hcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltYXAtPm1lbXNpemUgPSBiaXRtYXBfYnl0ZXMoMCwgZWxlbWVudHMgLSAxKTsKIAlzZXQtPnZhcmlhbnQgPSAmYml0bWFwX2lwOwotCXNldC0+ZHNpemUgPSBpcF9zZXRfZWxlbV9sZW4oc2V0LCB0YiwgMCk7CiAJaWYgKCFpbml0X21hcF9pcChzZXQsIG1hcCwgZmlyc3RfaXAsIGxhc3RfaXAsCiAJCQkgZWxlbWVudHMsIGhvc3RzLCBuZXRtYXNrKSkgewogCQlrZnJlZShtYXApOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYwppbmRleCAxNDMwNTM1Li4yOWRkZTIwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYwpAQCAtNDcsMjQgKzQ3LDI2IEBACiAvKiBUeXBlIHN0cnVjdHVyZSAqLwogc3RydWN0IGJpdG1hcF9pcG1hYyB7CiAJdm9pZCAqbWVtYmVyczsJCS8qIHRoZSBzZXQgbWVtYmVycyAqLwotCXZvaWQgKmV4dGVuc2lvbnM7CS8qIE1BQyArIGRhdGEgZXh0ZW5zaW9ucyAqLwogCXUzMiBmaXJzdF9pcDsJCS8qIGhvc3QgYnl0ZSBvcmRlciwgaW5jbHVkZWQgaW4gcmFuZ2UgKi8KIAl1MzIgbGFzdF9pcDsJCS8qIGhvc3QgYnl0ZSBvcmRlciwgaW5jbHVkZWQgaW4gcmFuZ2UgKi8KIAl1MzIgZWxlbWVudHM7CQkvKiBudW1iZXIgb2YgbWF4IGVsZW1lbnRzIGluIHRoZSBzZXQgKi8KIAlzaXplX3QgbWVtc2l6ZTsJCS8qIG1lbWJlcnMgc2l6ZSAqLwogCXN0cnVjdCB0aW1lcl9saXN0IGdjOwkvKiBnYXJiYWdlIGNvbGxlY3RvciAqLworCXVuc2lnbmVkIGNoYXIgZXh0ZW5zaW9uc1swXQkvKiBNQUMgKyBkYXRhIGV4dGVuc2lvbnMgKi8KKwkJX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOwogfTsKIAogLyogQURUIHN0cnVjdHVyZSBmb3IgZ2VuZXJpYyBmdW5jdGlvbiBhcmdzICovCiBzdHJ1Y3QgYml0bWFwX2lwbWFjX2FkdF9lbGVtIHsKKwl1bnNpZ25lZCBjaGFyIGV0aGVyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAJdTE2IGlkOwotCXVuc2lnbmVkIGNoYXIgKmV0aGVyOworCXUxNiBhZGRfbWFjOwogfTsKIAogc3RydWN0IGJpdG1hcF9pcG1hY19lbGVtIHsKIAl1bnNpZ25lZCBjaGFyIGV0aGVyW0VUSF9BTEVOXTsKIAl1bnNpZ25lZCBjaGFyIGZpbGxlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQpKTsKK30gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOwogCiBzdGF0aWMgaW5saW5lIHUzMgogaXBfdG9faWQoY29uc3Qgc3RydWN0IGJpdG1hcF9pcG1hYyAqbSwgdTMyIGlwKQpAQCAtNzIsMTEgKzc0LDExIEBACiAJcmV0dXJuIGlwIC0gbS0+Zmlyc3RfaXA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJpdG1hcF9pcG1hY19lbGVtICoKLWdldF9lbGVtKHZvaWQgKmV4dGVuc2lvbnMsIHUxNiBpZCwgc2l6ZV90IGRzaXplKQotewotCXJldHVybiAoc3RydWN0IGJpdG1hcF9pcG1hY19lbGVtICopKGV4dGVuc2lvbnMgKyBpZCAqIGRzaXplKTsKLX0KKyNkZWZpbmUgZ2V0X2VsZW0oZXh0ZW5zaW9ucywgaWQsIGRzaXplKQkJXAorCShzdHJ1Y3QgYml0bWFwX2lwbWFjX2VsZW0gKikoZXh0ZW5zaW9ucyArIChpZCkgKiAoZHNpemUpKQorCisjZGVmaW5lIGdldF9jb25zdF9lbGVtKGV4dGVuc2lvbnMsIGlkLCBkc2l6ZSkJXAorCShjb25zdCBzdHJ1Y3QgYml0bWFwX2lwbWFjX2VsZW0gKikoZXh0ZW5zaW9ucyArIChpZCkgKiAoZHNpemUpKQogCiAvKiBDb21tb24gZnVuY3Rpb25zICovCiAKQEAgLTg4LDEwICs5MCw5IEBACiAKIAlpZiAoIXRlc3RfYml0KGUtPmlkLCBtYXAtPm1lbWJlcnMpKQogCQlyZXR1cm4gMDsKLQllbGVtID0gZ2V0X2VsZW0obWFwLT5leHRlbnNpb25zLCBlLT5pZCwgZHNpemUpOwotCWlmIChlbGVtLT5maWxsZWQgPT0gTUFDX0ZJTExFRCkKLQkJcmV0dXJuICFlLT5ldGhlciB8fAotCQkgICAgICAgZXRoZXJfYWRkcl9lcXVhbChlLT5ldGhlciwgZWxlbS0+ZXRoZXIpOworCWVsZW0gPSBnZXRfY29uc3RfZWxlbShtYXAtPmV4dGVuc2lvbnMsIGUtPmlkLCBkc2l6ZSk7CisJaWYgKGUtPmFkZF9tYWMgJiYgZWxlbS0+ZmlsbGVkID09IE1BQ19GSUxMRUQpCisJCXJldHVybiBldGhlcl9hZGRyX2VxdWFsKGUtPmV0aGVyLCBlbGVtLT5ldGhlcik7CiAJLyogVHJpZ2dlciBrZXJuZWwgdG8gZmlsbCBvdXQgdGhlIGV0aGVybmV0IGFkZHJlc3MgKi8KIAlyZXR1cm4gLUVBR0FJTjsKIH0KQEAgLTEwMyw3ICsxMDQsNyBAQAogCiAJaWYgKCF0ZXN0X2JpdChpZCwgbWFwLT5tZW1iZXJzKSkKIAkJcmV0dXJuIDA7Ci0JZWxlbSA9IGdldF9lbGVtKG1hcC0+ZXh0ZW5zaW9ucywgaWQsIGRzaXplKTsKKwllbGVtID0gZ2V0X2NvbnN0X2VsZW0obWFwLT5leHRlbnNpb25zLCBpZCwgZHNpemUpOwogCS8qIFRpbWVyIG5vdCBzdGFydGVkIGZvciB0aGUgaW5jb21wbGV0ZSBlbGVtZW50cyAqLwogCXJldHVybiBlbGVtLT5maWxsZWQgPT0gTUFDX0ZJTExFRDsKIH0KQEAgLTEzMyw3ICsxMzQsNyBAQAogCQkgKiBhbmQgd2UgY2FuIHJldXNlIGl0IGxhdGVyIHdoZW4gTUFDIGlzIGZpbGxlZCBvdXQsCiAJCSAqIHBvc3NpYmx5IGJ5IHRoZSBrZXJuZWwKIAkJICovCi0JCWlmIChlLT5ldGhlcikKKwkJaWYgKGUtPmFkZF9tYWMpCiAJCQlpcF9zZXRfdGltZW91dF9zZXQodGltZW91dCwgdCk7CiAJCWVsc2UKIAkJCSp0aW1lb3V0ID0gdDsKQEAgLTE1MCw3ICsxNTEsNyBAQAogCWVsZW0gPSBnZXRfZWxlbShtYXAtPmV4dGVuc2lvbnMsIGUtPmlkLCBkc2l6ZSk7CiAJaWYgKHRlc3RfYml0KGUtPmlkLCBtYXAtPm1lbWJlcnMpKSB7CiAJCWlmIChlbGVtLT5maWxsZWQgPT0gTUFDX0ZJTExFRCkgewotCQkJaWYgKGUtPmV0aGVyICYmCisJCQlpZiAoZS0+YWRkX21hYyAmJgogCQkJICAgIChmbGFncyAmIElQU0VUX0ZMQUdfRVhJU1QpICYmCiAJCQkgICAgIWV0aGVyX2FkZHJfZXF1YWwoZS0+ZXRoZXIsIGVsZW0tPmV0aGVyKSkgewogCQkJCS8qIG1lbWNweSBpc24ndCBhdG9taWMgKi8KQEAgLTE1OSw3ICsxNjAsNyBAQAogCQkJCWV0aGVyX2FkZHJfY29weShlbGVtLT5ldGhlciwgZS0+ZXRoZXIpOwogCQkJfQogCQkJcmV0dXJuIElQU0VUX0FERF9GQUlMRUQ7Ci0JCX0gZWxzZSBpZiAoIWUtPmV0aGVyKQorCQl9IGVsc2UgaWYgKCFlLT5hZGRfbWFjKQogCQkJLyogQWxyZWFkeSBhZGRlZCB3aXRob3V0IGV0aGVybmV0IGFkZHJlc3MgKi8KIAkJCXJldHVybiBJUFNFVF9BRERfRkFJTEVEOwogCQkvKiBGaWxsIHRoZSBNQUMgYWRkcmVzcyBhbmQgdHJpZ2dlciB0aGUgdGltZXIgYWN0aXZhdGlvbiAqLwpAQCAtMTY4LDcgKzE2OSw3IEBACiAJCWV0aGVyX2FkZHJfY29weShlbGVtLT5ldGhlciwgZS0+ZXRoZXIpOwogCQllbGVtLT5maWxsZWQgPSBNQUNfRklMTEVEOwogCQlyZXR1cm4gSVBTRVRfQUREX1NUQVJUX1NUT1JFRF9USU1FT1VUOwotCX0gZWxzZSBpZiAoZS0+ZXRoZXIpIHsKKwl9IGVsc2UgaWYgKGUtPmFkZF9tYWMpIHsKIAkJLyogV2UgY2FuIHN0b3JlIE1BQyB0b28gKi8KIAkJZXRoZXJfYWRkcl9jb3B5KGVsZW0tPmV0aGVyLCBlLT5ldGhlcik7CiAJCWVsZW0tPmZpbGxlZCA9IE1BQ19GSUxMRUQ7CkBAIC0xOTEsNyArMTkyLDcgQEAKIAkJICAgICB1MzIgaWQsIHNpemVfdCBkc2l6ZSkKIHsKIAljb25zdCBzdHJ1Y3QgYml0bWFwX2lwbWFjX2VsZW0gKmVsZW0gPQotCQlnZXRfZWxlbShtYXAtPmV4dGVuc2lvbnMsIGlkLCBkc2l6ZSk7CisJCWdldF9jb25zdF9lbGVtKG1hcC0+ZXh0ZW5zaW9ucywgaWQsIGRzaXplKTsKIAogCXJldHVybiBubGFfcHV0X2lwYWRkcjQoc2tiLCBJUFNFVF9BVFRSX0lQLAogCQkJICAgICAgIGh0b25sKG1hcC0+Zmlyc3RfaXAgKyBpZCkpIHx8CkBAIC0yMTMsNyArMjE0LDcgQEAKIHsKIAlzdHJ1Y3QgYml0bWFwX2lwbWFjICptYXAgPSBzZXQtPmRhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtPnZhcmlhbnQtPmFkdFthZHRdOwotCXN0cnVjdCBiaXRtYXBfaXBtYWNfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCB9OworCXN0cnVjdCBiaXRtYXBfaXBtYWNfYWR0X2VsZW0gZSA9IHsgLmlkID0gMCwgLmFkZF9tYWMgPSAxIH07CiAJc3RydWN0IGlwX3NldF9leHQgZXh0ID0gSVBfU0VUX0lOSVRfS0VYVChza2IsIG9wdCwgc2V0KTsKIAl1MzIgaXA7CiAKQEAgLTIzMSw3ICsyMzIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWUuaWQgPSBpcF90b19pZChtYXAsIGlwKTsKLQllLmV0aGVyID0gZXRoX2hkcihza2IpLT5oX3NvdXJjZTsKKwltZW1jcHkoZS5ldGhlciwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgRVRIX0FMRU4pOwogCiAJcmV0dXJuIGFkdGZuKHNldCwgJmUsICZleHQsICZvcHQtPmV4dCwgb3B0LT5jbWRmbGFncyk7CiB9CkBAIC0yNjUsMTEgKzI2NiwxMCBAQAogCQlyZXR1cm4gLUlQU0VUX0VSUl9CSVRNQVBfUkFOR0U7CiAKIAllLmlkID0gaXBfdG9faWQobWFwLCBpcCk7Ci0JaWYgKHRiW0lQU0VUX0FUVFJfRVRIRVJdKQotCQllLmV0aGVyID0gbmxhX2RhdGEodGJbSVBTRVRfQVRUUl9FVEhFUl0pOwotCWVsc2UKLQkJZS5ldGhlciA9IE5VTEw7Ci0KKwlpZiAodGJbSVBTRVRfQVRUUl9FVEhFUl0pIHsKKwkJbWVtY3B5KGUuZXRoZXIsIG5sYV9kYXRhKHRiW0lQU0VUX0FUVFJfRVRIRVJdKSwgRVRIX0FMRU4pOworCQllLmFkZF9tYWMgPSAxOworCX0KIAlyZXQgPSBhZHRmbihzZXQsICZlLCAmZXh0LCAmZXh0LCBmbGFncyk7CiAKIAlyZXR1cm4gaXBfc2V0X2VleGlzdChyZXQsIGZsYWdzKSA/IDAgOiByZXQ7CkBAIC0zMDAsMTMgKzMwMCw2IEBACiAJbWFwLT5tZW1iZXJzID0gaXBfc2V0X2FsbG9jKG1hcC0+bWVtc2l6ZSk7CiAJaWYgKCFtYXAtPm1lbWJlcnMpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoc2V0LT5kc2l6ZSkgewotCQltYXAtPmV4dGVuc2lvbnMgPSBpcF9zZXRfYWxsb2Moc2V0LT5kc2l6ZSAqIGVsZW1lbnRzKTsKLQkJaWYgKCFtYXAtPmV4dGVuc2lvbnMpIHsKLQkJCWtmcmVlKG1hcC0+bWVtYmVycyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9CiAJbWFwLT5maXJzdF9pcCA9IGZpcnN0X2lwOwogCW1hcC0+bGFzdF9pcCA9IGxhc3RfaXA7CiAJbWFwLT5lbGVtZW50cyA9IGVsZW1lbnRzOwpAQCAtMzYxLDE0ICszNTQsMTUgQEAKIAlpZiAoZWxlbWVudHMgPiBJUFNFVF9CSVRNQVBfTUFYX1JBTkdFICsgMSkKIAkJcmV0dXJuIC1JUFNFVF9FUlJfQklUTUFQX1JBTkdFX1NJWkU7CiAKLQltYXAgPSBremFsbG9jKHNpemVvZigqbWFwKSwgR0ZQX0tFUk5FTCk7CisJc2V0LT5kc2l6ZSA9IGlwX3NldF9lbGVtX2xlbihzZXQsIHRiLAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBiaXRtYXBfaXBtYWNfZWxlbSksCisJCQkJICAgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgYml0bWFwX2lwbWFjX2VsZW0pKTsKKwltYXAgPSBpcF9zZXRfYWxsb2Moc2l6ZW9mKCptYXApICsgZWxlbWVudHMgKiBzZXQtPmRzaXplKTsKIAlpZiAoIW1hcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltYXAtPm1lbXNpemUgPSBiaXRtYXBfYnl0ZXMoMCwgZWxlbWVudHMgLSAxKTsKIAlzZXQtPnZhcmlhbnQgPSAmYml0bWFwX2lwbWFjOwotCXNldC0+ZHNpemUgPSBpcF9zZXRfZWxlbV9sZW4oc2V0LCB0YiwKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgYml0bWFwX2lwbWFjX2VsZW0pKTsKIAlpZiAoIWluaXRfbWFwX2lwbWFjKHNldCwgbWFwLCBmaXJzdF9pcCwgbGFzdF9pcCwgZWxlbWVudHMpKSB7CiAJCWtmcmVlKG1hcCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMKaW5kZXggNTMzOGNjZC4uN2YwYzczMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jCkBAIC0zNSwxMiArMzUsMTMgQEAKIC8qIFR5cGUgc3RydWN0dXJlICovCiBzdHJ1Y3QgYml0bWFwX3BvcnQgewogCXZvaWQgKm1lbWJlcnM7CQkvKiB0aGUgc2V0IG1lbWJlcnMgKi8KLQl2b2lkICpleHRlbnNpb25zOwkvKiBkYXRhIGV4dGVuc2lvbnMgKi8KIAl1MTYgZmlyc3RfcG9ydDsJCS8qIGhvc3QgYnl0ZSBvcmRlciwgaW5jbHVkZWQgaW4gcmFuZ2UgKi8KIAl1MTYgbGFzdF9wb3J0OwkJLyogaG9zdCBieXRlIG9yZGVyLCBpbmNsdWRlZCBpbiByYW5nZSAqLwogCXUzMiBlbGVtZW50czsJCS8qIG51bWJlciBvZiBtYXggZWxlbWVudHMgaW4gdGhlIHNldCAqLwogCXNpemVfdCBtZW1zaXplOwkJLyogbWVtYmVycyBzaXplICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZ2M7CS8qIGdhcmJhZ2UgY29sbGVjdGlvbiAqLworCXVuc2lnbmVkIGNoYXIgZXh0ZW5zaW9uc1swXQkvKiBkYXRhIGV4dGVuc2lvbnMgKi8KKwkJX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOwogfTsKIAogLyogQURUIHN0cnVjdHVyZSBmb3IgZ2VuZXJpYyBmdW5jdGlvbiBhcmdzICovCkBAIC0yMDksMTMgKzIxMCw2IEBACiAJbWFwLT5tZW1iZXJzID0gaXBfc2V0X2FsbG9jKG1hcC0+bWVtc2l6ZSk7CiAJaWYgKCFtYXAtPm1lbWJlcnMpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoc2V0LT5kc2l6ZSkgewotCQltYXAtPmV4dGVuc2lvbnMgPSBpcF9zZXRfYWxsb2Moc2V0LT5kc2l6ZSAqIG1hcC0+ZWxlbWVudHMpOwotCQlpZiAoIW1hcC0+ZXh0ZW5zaW9ucykgewotCQkJa2ZyZWUobWFwLT5tZW1iZXJzKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KIAltYXAtPmZpcnN0X3BvcnQgPSBmaXJzdF9wb3J0OwogCW1hcC0+bGFzdF9wb3J0ID0gbGFzdF9wb3J0OwogCXNldC0+dGltZW91dCA9IElQU0VUX05PX1RJTUVPVVQ7CkBAIC0yMzIsNiArMjI2LDcgQEAKIHsKIAlzdHJ1Y3QgYml0bWFwX3BvcnQgKm1hcDsKIAl1MTYgZmlyc3RfcG9ydCwgbGFzdF9wb3J0OworCXUzMiBlbGVtZW50czsKIAogCWlmICh1bmxpa2VseSghaXBfc2V0X2F0dHJfbmV0b3JkZXIodGIsIElQU0VUX0FUVFJfUE9SVCkgfHwKIAkJICAgICAhaXBfc2V0X2F0dHJfbmV0b3JkZXIodGIsIElQU0VUX0FUVFJfUE9SVF9UTykgfHwKQEAgLTI0OCwxNCArMjQzLDE1IEBACiAJCWxhc3RfcG9ydCA9IHRtcDsKIAl9CiAKLQltYXAgPSBremFsbG9jKHNpemVvZigqbWFwKSwgR0ZQX0tFUk5FTCk7CisJZWxlbWVudHMgPSBsYXN0X3BvcnQgLSBmaXJzdF9wb3J0ICsgMTsKKwlzZXQtPmRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsIDAsIDApOworCW1hcCA9IGlwX3NldF9hbGxvYyhzaXplb2YoKm1hcCkgKyBlbGVtZW50cyAqIHNldC0+ZHNpemUpOwogCWlmICghbWFwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1hcC0+ZWxlbWVudHMgPSBsYXN0X3BvcnQgLSBmaXJzdF9wb3J0ICsgMTsKKwltYXAtPmVsZW1lbnRzID0gZWxlbWVudHM7CiAJbWFwLT5tZW1zaXplID0gYml0bWFwX2J5dGVzKDAsIG1hcC0+ZWxlbWVudHMpOwogCXNldC0+dmFyaWFudCA9ICZiaXRtYXBfcG9ydDsKLQlzZXQtPmRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsIDApOwogCWlmICghaW5pdF9tYXBfcG9ydChzZXQsIG1hcCwgZmlyc3RfcG9ydCwgbGFzdF9wb3J0KSkgewogCQlrZnJlZShtYXApOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwppbmRleCA2OWFiOWMyNi4uNTRmM2Q3YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwpAQCAtMzY0LDI1ICszNjQsMjcgQEAKIH0KIAogc2l6ZV90Ci1pcF9zZXRfZWxlbV9sZW4oc3RydWN0IGlwX3NldCAqc2V0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzaXplX3QgbGVuKQoraXBfc2V0X2VsZW1fbGVuKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IG5sYXR0ciAqdGJbXSwgc2l6ZV90IGxlbiwKKwkJc2l6ZV90IGFsaWduKQogewogCWVudW0gaXBfc2V0X2V4dF9pZCBpZDsKLQlzaXplX3Qgb2Zmc2V0ID0gbGVuOwogCXUzMiBjYWR0X2ZsYWdzID0gMDsKIAogCWlmICh0YltJUFNFVF9BVFRSX0NBRFRfRkxBR1NdKQogCQljYWR0X2ZsYWdzID0gaXBfc2V0X2dldF9oMzIodGJbSVBTRVRfQVRUUl9DQURUX0ZMQUdTXSk7CiAJaWYgKGNhZHRfZmxhZ3MgJiBJUFNFVF9GTEFHX1dJVEhfRk9SQ0VBREQpCiAJCXNldC0+ZmxhZ3MgfD0gSVBTRVRfQ1JFQVRFX0ZMQUdfRk9SQ0VBREQ7CisJaWYgKCFhbGlnbikKKwkJYWxpZ24gPSAxOwogCWZvciAoaWQgPSAwOyBpZCA8IElQU0VUX0VYVF9JRF9NQVg7IGlkKyspIHsKIAkJaWYgKCFhZGRfZXh0ZW5zaW9uKGlkLCBjYWR0X2ZsYWdzLCB0YikpCiAJCQljb250aW51ZTsKLQkJb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBpcF9zZXRfZXh0ZW5zaW9uc1tpZF0uYWxpZ24pOwotCQlzZXQtPm9mZnNldFtpZF0gPSBvZmZzZXQ7CisJCWxlbiA9IEFMSUdOKGxlbiwgaXBfc2V0X2V4dGVuc2lvbnNbaWRdLmFsaWduKTsKKwkJc2V0LT5vZmZzZXRbaWRdID0gbGVuOwogCQlzZXQtPmV4dGVuc2lvbnMgfD0gaXBfc2V0X2V4dGVuc2lvbnNbaWRdLnR5cGU7Ci0JCW9mZnNldCArPSBpcF9zZXRfZXh0ZW5zaW9uc1tpZF0ubGVuOworCQlsZW4gKz0gaXBfc2V0X2V4dGVuc2lvbnNbaWRdLmxlbjsKIAl9Ci0JcmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gQUxJR04obGVuLCBhbGlnbik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcF9zZXRfZWxlbV9sZW4pOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9nZW4uaAppbmRleCA2OTFiNTRmLi5lNTMzNmFiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2dlbi5oCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfZ2VuLmgKQEAgLTcyLDggKzcyLDkgQEAKIAlERUNMQVJFX0JJVE1BUCh1c2VkLCBBSEFTSF9NQVhfVFVORUQpOwogCXU4IHNpemU7CQkvKiBzaXplIG9mIHRoZSBhcnJheSAqLwogCXU4IHBvczsJCQkvKiBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgZnJlZSBlbnRyeSAqLwotCXVuc2lnbmVkIGNoYXIgdmFsdWVbMF07CS8qIHRoZSBhcnJheSBvZiB0aGUgdmFsdWVzICovCi19IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKSk7CisJdW5zaWduZWQgY2hhciB2YWx1ZVswXQkvKiB0aGUgYXJyYXkgb2YgdGhlIHZhbHVlcyAqLworCQlfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSk7Cit9OwogCiAvKiBUaGUgaGFzaCB0YWJsZTogdGhlIHRhYmxlIHNpemUgc3RvcmVkIGhlcmUgaW4gb3JkZXIgdG8gbWFrZSByZXNpemluZyBlYXN5ICovCiBzdHJ1Y3QgaHRhYmxlIHsKQEAgLTQ3NSw3ICs0NzYsNyBAQAogbXR5cGVfZXhwaXJlKHN0cnVjdCBpcF9zZXQgKnNldCwgc3RydWN0IGh0eXBlICpoLCB1OCBuZXRzX2xlbmd0aCwgc2l6ZV90IGRzaXplKQogewogCXN0cnVjdCBodGFibGUgKnQ7Ci0Jc3RydWN0IGhidWNrZXQgKm47CisJc3RydWN0IGhidWNrZXQgKm4sICp0bXA7CiAJc3RydWN0IG10eXBlX2VsZW0gKmRhdGE7CiAJdTMyIGksIGosIGQ7CiAjaWZkZWYgSVBfU0VUX0hBU0hfV0lUSF9ORVRTCkBAIC01MTAsOSArNTExLDE0IEBACiAJCQl9CiAJCX0KIAkJaWYgKGQgPj0gQUhBU0hfSU5JVF9TSVpFKSB7Ci0JCQlzdHJ1Y3QgaGJ1Y2tldCAqdG1wID0ga3phbGxvYyhzaXplb2YoKnRtcCkgKwotCQkJCQkobi0+c2l6ZSAtIEFIQVNIX0lOSVRfU0laRSkgKiBkc2l6ZSwKLQkJCQkJR0ZQX0FUT01JQyk7CisJCQlpZiAoZCA+PSBuLT5zaXplKSB7CisJCQkJcmN1X2Fzc2lnbl9wb2ludGVyKGhidWNrZXQodCwgaSksIE5VTEwpOworCQkJCWtmcmVlX3JjdShuLCByY3UpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJdG1wID0ga3phbGxvYyhzaXplb2YoKnRtcCkgKworCQkJCSAgICAgIChuLT5zaXplIC0gQUhBU0hfSU5JVF9TSVpFKSAqIGRzaXplLAorCQkJCSAgICAgIEdGUF9BVE9NSUMpOwogCQkJaWYgKCF0bXApCiAJCQkJLyogU3RpbGwgdHJ5IHRvIGRlbGV0ZSBleHBpcmVkIGVsZW1lbnRzICovCiAJCQkJY29udGludWU7CkBAIC01MjIsNyArNTI4LDcgQEAKIAkJCQkJY29udGludWU7CiAJCQkJZGF0YSA9IGFoYXNoX2RhdGEobiwgaiwgZHNpemUpOwogCQkJCW1lbWNweSh0bXAtPnZhbHVlICsgZCAqIGRzaXplLCBkYXRhLCBkc2l6ZSk7Ci0JCQkJc2V0X2JpdChqLCB0bXAtPnVzZWQpOworCQkJCXNldF9iaXQoZCwgdG1wLT51c2VkKTsKIAkJCQlkKys7CiAJCQl9CiAJCQl0bXAtPnBvcyA9IGQ7CkBAIC0xMzIzLDEyICsxMzI5LDE0IEBACiAjZW5kaWYKIAkJc2V0LT52YXJpYW50ID0gJklQU0VUX1RPS0VOKEhUWVBFLCA0X3ZhcmlhbnQpOwogCQlzZXQtPmRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsCi0JCQkJc2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNF9lbGVtKSkpOworCQkJc2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNF9lbGVtKSksCisJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDRfZWxlbSkpKTsKICNpZm5kZWYgSVBfU0VUX1BST1RPX1VOREVGCiAJfSBlbHNlIHsKIAkJc2V0LT52YXJpYW50ID0gJklQU0VUX1RPS0VOKEhUWVBFLCA2X3ZhcmlhbnQpOwogCQlzZXQtPmRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsCi0JCQkJc2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNl9lbGVtKSkpOworCQkJc2l6ZW9mKHN0cnVjdCBJUFNFVF9UT0tFTihIVFlQRSwgNl9lbGVtKSksCisJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgSVBTRVRfVE9LRU4oSFRZUEUsIDZfZWxlbSkpKTsKIAl9CiAjZW5kaWYKIAlpZiAodGJbSVBTRVRfQVRUUl9USU1FT1VUXSkgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMKaW5kZXggNWEzMGNlNi4uYmJlZGU5NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jCkBAIC0zMSw3ICszMSw3IEBACiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaXBfc2V0X2lkX3QgaWQ7Ci19OworfSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSk7CiAKIHN0cnVjdCBzZXRfYWR0X2VsZW0gewogCWlwX3NldF9pZF90IGlkOwpAQCAtNjE4LDcgKzYxOCw4IEBACiAJCXNpemUgPSBJUF9TRVRfTElTVF9NSU5fU0laRTsKIAogCXNldC0+dmFyaWFudCA9ICZzZXRfdmFyaWFudDsKLQlzZXQtPmRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsIHNpemVvZihzdHJ1Y3Qgc2V0X2VsZW0pKTsKKwlzZXQtPmRzaXplID0gaXBfc2V0X2VsZW1fbGVuKHNldCwgdGIsIHNpemVvZihzdHJ1Y3Qgc2V0X2VsZW0pLAorCQkJCSAgICAgX19hbGlnbm9mX18oc3RydWN0IHNldF9lbGVtKSk7CiAJaWYgKCFpbml0X2xpc3Rfc2V0KG5ldCwgc2V0LCBzaXplKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKHRiW0lQU0VUX0FUVFJfVElNRU9VVF0pIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IDFlMjRmZmYuLmY1N2I0ZGMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMTE3Niw2ICsxMTc2LDcgQEAKIAlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwOwogCXN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZDsKIAlzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7CisJc3RydWN0IHNvY2sgKnNrOwogCiAJRW50ZXJGdW5jdGlvbigxMSk7CiAKQEAgLTExODMsMTMgKzExODQsMTIgQEAKIAlpZiAoc2tiLT5pcHZzX3Byb3BlcnR5KQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCisJc2sgPSBza2JfdG9fZnVsbF9zayhza2IpOwogCS8qIEJhZC4uLiBEbyBub3QgYnJlYWsgcmF3IHNvY2tldHMgKi8KLQlpZiAodW5saWtlbHkoc2tiLT5zayAhPSBOVUxMICYmIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQgJiYKKwlpZiAodW5saWtlbHkoc2sgJiYgaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCAmJgogCQkgICAgIGFmID09IEFGX0lORVQpKSB7Ci0JCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7Ci0JCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrYi0+c2spOwogCi0JCWlmIChpbmV0ICYmIHNrLT5za19mYW1pbHkgPT0gUEZfSU5FVCAmJiBpbmV0LT5ub2RlZnJhZykKKwkJaWYgKHNrLT5za19mYW1pbHkgPT0gUEZfSU5FVCAmJiBpbmV0X3NrKHNrKS0+bm9kZWZyYWcpCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIApAQCAtMTY4MSw2ICsxNjgxLDcgQEAKIAlzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7CiAJaW50IHJldCwgcGt0czsKIAlpbnQgY29ubl9yZXVzZV9tb2RlOworCXN0cnVjdCBzb2NrICpzazsKIAogCS8qIEFscmVhZHkgbWFya2VkIGFzIElQVlMgcmVxdWVzdCBvciByZXBseT8gKi8KIAlpZiAoc2tiLT5pcHZzX3Byb3BlcnR5KQpAQCAtMTcwOCwxMiArMTcwOSwxMSBAQAogCWlwX3ZzX2ZpbGxfaXBoX3NrYihhZiwgc2tiLCBmYWxzZSwgJmlwaCk7CiAKIAkvKiBCYWQuLi4gRG8gbm90IGJyZWFrIHJhdyBzb2NrZXRzICovCi0JaWYgKHVubGlrZWx5KHNrYi0+c2sgIT0gTlVMTCAmJiBob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUICYmCisJc2sgPSBza2JfdG9fZnVsbF9zayhza2IpOworCWlmICh1bmxpa2VseShzayAmJiBob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUICYmCiAJCSAgICAgYWYgPT0gQUZfSU5FVCkpIHsKLQkJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKLQkJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2tiLT5zayk7CiAKLQkJaWYgKGluZXQgJiYgc2stPnNrX2ZhbWlseSA9PSBQRl9JTkVUICYmIGluZXQtPm5vZGVmcmFnKQorCQlpZiAoc2stPnNrX2ZhbWlseSA9PSBQRl9JTkVUICYmIGluZXRfc2soc2spLT5ub2RlZnJhZykKIAkJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCmluZGV4IDkzY2M0NzMuLjJjYjQyOWQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC04OSw2ICs4OSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIG5mdF9jdHhfaW5pdChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAorCQkJIHN0cnVjdCBuZXQgKm5ldCwKIAkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJIHN0cnVjdCBuZnRfYWZfaW5mbyAqYWZpLApAQCAtOTYsNyArOTcsNyBAQAogCQkJIHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluLAogCQkJIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhKQogewotCWN0eC0+bmV0CT0gc29ja19uZXQoc2tiLT5zayk7CisJY3R4LT5uZXQJPSBuZXQ7CiAJY3R4LT5hZmkJPSBhZmk7CiAJY3R4LT50YWJsZQk9IHRhYmxlOwogCWN0eC0+Y2hhaW4JPSBjaGFpbjsKQEAgLTY3MiwxNSArNjczLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBuZl90YWJsZXNfbmV3dGFibGUoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKK3N0YXRpYyBpbnQgbmZfdGFibGVzX25ld3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKm5sc2ssCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSkKIHsKIAljb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShubGgpOwogCWNvbnN0IHN0cnVjdCBubGF0dHIgKm5hbWU7CiAJc3RydWN0IG5mdF9hZl9pbmZvICphZmk7CiAJc3RydWN0IG5mdF90YWJsZSAqdGFibGU7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJaW50IGZhbWlseSA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7CiAJdTMyIGZsYWdzID0gMDsKIAlzdHJ1Y3QgbmZ0X2N0eCBjdHg7CkBAIC03MDYsNyArNzA2LDcgQEAKIAkJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9SRVBMQUNFKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JCW5mdF9jdHhfaW5pdCgmY3R4LCBza2IsIG5saCwgYWZpLCB0YWJsZSwgTlVMTCwgbmxhKTsKKwkJbmZ0X2N0eF9pbml0KCZjdHgsIG5ldCwgc2tiLCBubGgsIGFmaSwgdGFibGUsIE5VTEwsIG5sYSk7CiAJCXJldHVybiBuZl90YWJsZXNfdXBkdGFibGUoJmN0eCk7CiAJfQogCkBAIC03MzAsNyArNzMwLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmdGFibGUtPnNldHMpOwogCXRhYmxlLT5mbGFncyA9IGZsYWdzOwogCi0JbmZ0X2N0eF9pbml0KCZjdHgsIHNrYiwgbmxoLCBhZmksIHRhYmxlLCBOVUxMLCBubGEpOworCW5mdF9jdHhfaW5pdCgmY3R4LCBuZXQsIHNrYiwgbmxoLCBhZmksIHRhYmxlLCBOVUxMLCBubGEpOwogCWVyciA9IG5mdF90cmFuc190YWJsZV9hZGQoJmN0eCwgTkZUX01TR19ORVdUQUJMRSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyMzsKQEAgLTgxMCwxOCArODEwLDE3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBuZl90YWJsZXNfZGVsdGFibGUoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKK3N0YXRpYyBpbnQgbmZfdGFibGVzX2RlbHRhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKm5sc2ssCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSkKIHsKIAljb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShubGgpOwogCXN0cnVjdCBuZnRfYWZfaW5mbyAqYWZpOwogCXN0cnVjdCBuZnRfdGFibGUgKnRhYmxlOwotCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCWludCBmYW1pbHkgPSBuZm1zZy0+bmZnZW5fZmFtaWx5OwogCXN0cnVjdCBuZnRfY3R4IGN0eDsKIAotCW5mdF9jdHhfaW5pdCgmY3R4LCBza2IsIG5saCwgTlVMTCwgTlVMTCwgTlVMTCwgbmxhKTsKKwluZnRfY3R4X2luaXQoJmN0eCwgbmV0LCBza2IsIG5saCwgTlVMTCwgTlVMTCwgTlVMTCwgbmxhKTsKIAlpZiAoZmFtaWx5ID09IEFGX1VOU1BFQyB8fCBubGFbTkZUQV9UQUJMRV9OQU1FXSA9PSBOVUxMKQogCQlyZXR1cm4gbmZ0X2ZsdXNoKCZjdHgsIGZhbWlseSk7CiAKQEAgLTEyMjEsOCArMTIyMCw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdjaGFpbihzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorc3RhdGljIGludCBuZl90YWJsZXNfbmV3Y2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqbmxzaywKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKQogewogCWNvbnN0IHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKG5saCk7CkBAIC0xMjMyLDcgKzEyMzEsNiBAQAogCXN0cnVjdCBuZnRfY2hhaW4gKmNoYWluOwogCXN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluID0gTlVMTDsKIAlzdHJ1Y3QgbmxhdHRyICpoYVtORlRBX0hPT0tfTUFYICsgMV07Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJaW50IGZhbWlseSA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJdTggcG9saWN5ID0gTkZfQUNDRVBUOwpAQCAtMTMxMyw3ICsxMzExLDcgQEAKIAkJCQlyZXR1cm4gUFRSX0VSUihzdGF0cyk7CiAJCX0KIAotCQluZnRfY3R4X2luaXQoJmN0eCwgc2tiLCBubGgsIGFmaSwgdGFibGUsIGNoYWluLCBubGEpOworCQluZnRfY3R4X2luaXQoJmN0eCwgbmV0LCBza2IsIG5saCwgYWZpLCB0YWJsZSwgY2hhaW4sIG5sYSk7CiAJCXRyYW5zID0gbmZ0X3RyYW5zX2FsbG9jKCZjdHgsIE5GVF9NU0dfTkVXQ0hBSU4sCiAJCQkJCXNpemVvZihzdHJ1Y3QgbmZ0X3RyYW5zX2NoYWluKSk7CiAJCWlmICh0cmFucyA9PSBOVUxMKSB7CkBAIC0xNDYxLDcgKzE0NTksNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjE7CiAKLQluZnRfY3R4X2luaXQoJmN0eCwgc2tiLCBubGgsIGFmaSwgdGFibGUsIGNoYWluLCBubGEpOworCW5mdF9jdHhfaW5pdCgmY3R4LCBuZXQsIHNrYiwgbmxoLCBhZmksIHRhYmxlLCBjaGFpbiwgbmxhKTsKIAllcnIgPSBuZnRfdHJhbnNfY2hhaW5fYWRkKCZjdHgsIE5GVF9NU0dfTkVXQ0hBSU4pOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjI7CkBAIC0xNDc2LDE1ICsxNDc0LDE0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKK3N0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGNoYWluKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKm5sc2ssCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSkKIHsKIAljb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShubGgpOwogCXN0cnVjdCBuZnRfYWZfaW5mbyAqYWZpOwogCXN0cnVjdCBuZnRfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBuZnRfY2hhaW4gKmNoYWluOwotCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCWludCBmYW1pbHkgPSBuZm1zZy0+bmZnZW5fZmFtaWx5OwogCXN0cnVjdCBuZnRfY3R4IGN0eDsKIApAQCAtMTUwNiw3ICsxNTAzLDcgQEAKIAlpZiAoY2hhaW4tPnVzZSA+IDApCiAJCXJldHVybiAtRUJVU1k7CiAKLQluZnRfY3R4X2luaXQoJmN0eCwgc2tiLCBubGgsIGFmaSwgdGFibGUsIGNoYWluLCBubGEpOworCW5mdF9jdHhfaW5pdCgmY3R4LCBuZXQsIHNrYiwgbmxoLCBhZmksIHRhYmxlLCBjaGFpbiwgbmxhKTsKIAogCXJldHVybiBuZnRfZGVsY2hhaW4oJmN0eCk7CiB9CkBAIC0yMDEwLDEzICsyMDA3LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfaW5mbyAqaW5mbzsKIAotc3RhdGljIGludCBuZl90YWJsZXNfbmV3cnVsZShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCitzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKm5sc2ssCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pCiB7CiAJY29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgbmZ0X2FmX2luZm8gKmFmaTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTsKIAlzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbjsKIAlzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUsICpvbGRfcnVsZSA9IE5VTEw7CkBAIC0yMDc1LDcgKzIwNzEsNyBAQAogCQkJcmV0dXJuIFBUUl9FUlIob2xkX3J1bGUpOwogCX0KIAotCW5mdF9jdHhfaW5pdCgmY3R4LCBza2IsIG5saCwgYWZpLCB0YWJsZSwgY2hhaW4sIG5sYSk7CisJbmZ0X2N0eF9pbml0KCZjdHgsIG5ldCwgc2tiLCBubGgsIGFmaSwgdGFibGUsIGNoYWluLCBubGEpOwogCiAJbiA9IDA7CiAJc2l6ZSA9IDA7CkBAIC0yMTc2LDEzICsyMTcyLDEyIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBuZl90YWJsZXNfZGVscnVsZShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCitzdGF0aWMgaW50IG5mX3RhYmxlc19kZWxydWxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKm5sc2ssCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pCiB7CiAJY29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgbmZ0X2FmX2luZm8gKmFmaTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTsKIAlzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbiA9IE5VTEw7CiAJc3RydWN0IG5mdF9ydWxlICpydWxlOwpAQCAtMjIwNSw3ICsyMjAwLDcgQEAKIAkJCXJldHVybiBQVFJfRVJSKGNoYWluKTsKIAl9CiAKLQluZnRfY3R4X2luaXQoJmN0eCwgc2tiLCBubGgsIGFmaSwgdGFibGUsIGNoYWluLCBubGEpOworCW5mdF9jdHhfaW5pdCgmY3R4LCBuZXQsIHNrYiwgbmxoLCBhZmksIHRhYmxlLCBjaGFpbiwgbmxhKTsKIAogCWlmIChjaGFpbikgewogCQlpZiAobmxhW05GVEFfUlVMRV9IQU5ETEVdKSB7CkBAIC0yMzQ0LDEyICsyMzM5LDExIEBACiAJW05GVEFfU0VUX0RFU0NfU0laRV0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIH07CiAKLXN0YXRpYyBpbnQgbmZ0X2N0eF9pbml0X2Zyb21fc2V0YXR0cihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAorc3RhdGljIGludCBuZnRfY3R4X2luaXRfZnJvbV9zZXRhdHRyKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSkKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAljb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShubGgpOwogCXN0cnVjdCBuZnRfYWZfaW5mbyAqYWZpID0gTlVMTDsKIAlzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSA9IE5VTEw7CkBAIC0yMzcxLDcgKzIzNjUsNyBAQAogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JbmZ0X2N0eF9pbml0KGN0eCwgc2tiLCBubGgsIGFmaSwgdGFibGUsIE5VTEwsIG5sYSk7CisJbmZ0X2N0eF9pbml0KGN0eCwgbmV0LCBza2IsIG5saCwgYWZpLCB0YWJsZSwgTlVMTCwgbmxhKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjYyMyw2ICsyNjE3LDcgQEAKIAkJCSAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldDsKIAlzdHJ1Y3QgbmZ0X2N0eCBjdHg7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CkBAIC0yNjMwLDcgKzI2MjUsNyBAQAogCWludCBlcnI7CiAKIAkvKiBWZXJpZnkgZXhpc3RlbmNlIGJlZm9yZSBzdGFydGluZyBkdW1wICovCi0JZXJyID0gbmZ0X2N0eF9pbml0X2Zyb21fc2V0YXR0cigmY3R4LCBza2IsIG5saCwgbmxhKTsKKwllcnIgPSBuZnRfY3R4X2luaXRfZnJvbV9zZXRhdHRyKCZjdHgsIG5ldCwgc2tiLCBubGgsIG5sYSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTI2OTMsMTQgKzI2ODgsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0KHN0cnVjdCBzb2NrICpubHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorc3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKm5sc2ssCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKQogewogCWNvbnN0IHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKG5saCk7CiAJY29uc3Qgc3RydWN0IG5mdF9zZXRfb3BzICpvcHM7CiAJc3RydWN0IG5mdF9hZl9pbmZvICphZmk7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJc3RydWN0IG5mdF90YWJsZSAqdGFibGU7CiAJc3RydWN0IG5mdF9zZXQgKnNldDsKIAlzdHJ1Y3QgbmZ0X2N0eCBjdHg7CkBAIC0yNzk4LDcgKzI3OTIsNyBAQAogCWlmIChJU19FUlIodGFibGUpKQogCQlyZXR1cm4gUFRSX0VSUih0YWJsZSk7CiAKLQluZnRfY3R4X2luaXQoJmN0eCwgc2tiLCBubGgsIGFmaSwgdGFibGUsIE5VTEwsIG5sYSk7CisJbmZ0X2N0eF9pbml0KCZjdHgsIG5ldCwgc2tiLCBubGgsIGFmaSwgdGFibGUsIE5VTEwsIG5sYSk7CiAKIAlzZXQgPSBuZl90YWJsZXNfc2V0X2xvb2t1cCh0YWJsZSwgbmxhW05GVEFfU0VUX05BTUVdKTsKIAlpZiAoSVNfRVJSKHNldCkpIHsKQEAgLTI4ODIsOCArMjg3Niw4IEBACiAJbmZ0X3NldF9kZXN0cm95KHNldCk7CiB9CiAKLXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbHNldChzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKK3N0YXRpYyBpbnQgbmZfdGFibGVzX2RlbHNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpubHNrLAorCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSkKIHsKIAljb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShubGgpOwpAQCAtMjg5Niw3ICsyODkwLDcgQEAKIAlpZiAobmxhW05GVEFfU0VUX1RBQkxFXSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVyciA9IG5mdF9jdHhfaW5pdF9mcm9tX3NldGF0dHIoJmN0eCwgc2tiLCBubGgsIG5sYSk7CisJZXJyID0gbmZ0X2N0eF9pbml0X2Zyb21fc2V0YXR0cigmY3R4LCBuZXQsIHNrYiwgbmxoLCBubGEpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zMDI0LDcgKzMwMTgsNyBAQAogCVtORlRBX1NFVF9FTEVNX0xJU1RfU0VUX0lEXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiB9OwogCi1zdGF0aWMgaW50IG5mdF9jdHhfaW5pdF9mcm9tX2VsZW1hdHRyKHN0cnVjdCBuZnRfY3R4ICpjdHgsCitzdGF0aWMgaW50IG5mdF9jdHhfaW5pdF9mcm9tX2VsZW1hdHRyKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSwKQEAgLTMwMzMsNyArMzAyNyw2IEBACiAJY29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgbmZ0X2FmX2luZm8gKmFmaTsKIAlzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAogCWFmaSA9IG5mX3RhYmxlc19hZmluZm9fbG9va3VwKG5ldCwgbmZtc2ctPm5mZ2VuX2ZhbWlseSwgZmFsc2UpOwogCWlmIChJU19FUlIoYWZpKSkKQEAgLTMwNDUsNyArMzAzOCw3IEBACiAJaWYgKCF0cmFucyAmJiAodGFibGUtPmZsYWdzICYgTkZUX1RBQkxFX0lOQUNUSVZFKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQluZnRfY3R4X2luaXQoY3R4LCBza2IsIG5saCwgYWZpLCB0YWJsZSwgTlVMTCwgbmxhKTsKKwluZnRfY3R4X2luaXQoY3R4LCBuZXQsIHNrYiwgbmxoLCBhZmksIHRhYmxlLCBOVUxMLCBubGEpOwogCXJldHVybiAwOwogfQogCkBAIC0zMTM1LDYgKzMxMjgsNyBAQAogCiBzdGF0aWMgaW50IG5mX3RhYmxlc19kdW1wX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldDsKIAlzdHJ1Y3QgbmZ0X3NldF9kdW1wX2FyZ3MgYXJnczsKIAlzdHJ1Y3QgbmZ0X2N0eCBjdHg7CkBAIC0zMTUwLDggKzMxNDQsOCBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gbmZ0X2N0eF9pbml0X2Zyb21fZWxlbWF0dHIoJmN0eCwgY2ItPnNrYiwgY2ItPm5saCwgKHZvaWQgKilubGEsCi0JCQkJCSBmYWxzZSk7CisJZXJyID0gbmZ0X2N0eF9pbml0X2Zyb21fZWxlbWF0dHIoJmN0eCwgbmV0LCBjYi0+c2tiLCBjYi0+bmxoLAorCQkJCQkgKHZvaWQgKilubGEsIGZhbHNlKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMzIxMiwxMSArMzIwNiwxMiBAQAogCQkJCWNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJCWNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAljb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0OwogCXN0cnVjdCBuZnRfY3R4IGN0eDsKIAlpbnQgZXJyOwogCi0JZXJyID0gbmZ0X2N0eF9pbml0X2Zyb21fZWxlbWF0dHIoJmN0eCwgc2tiLCBubGgsIG5sYSwgZmFsc2UpOworCWVyciA9IG5mdF9jdHhfaW5pdF9mcm9tX2VsZW1hdHRyKCZjdHgsIG5ldCwgc2tiLCBubGgsIG5sYSwgZmFsc2UpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zNTI4LDExICszNTIzLDEwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0ZWxlbShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKK3N0YXRpYyBpbnQgbmZfdGFibGVzX25ld3NldGVsZW0oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqbmxzaywKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCQljb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cjsKIAlzdHJ1Y3QgbmZ0X3NldCAqc2V0OwogCXN0cnVjdCBuZnRfY3R4IGN0eDsKQEAgLTM1NDEsNyArMzUzNSw3IEBACiAJaWYgKG5sYVtORlRBX1NFVF9FTEVNX0xJU1RfRUxFTUVOVFNdID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZXJyID0gbmZ0X2N0eF9pbml0X2Zyb21fZWxlbWF0dHIoJmN0eCwgc2tiLCBubGgsIG5sYSwgdHJ1ZSk7CisJZXJyID0gbmZ0X2N0eF9pbml0X2Zyb21fZWxlbWF0dHIoJmN0eCwgbmV0LCBza2IsIG5saCwgbmxhLCB0cnVlKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMzYyMyw4ICszNjE3LDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxzZXRlbGVtKHN0cnVjdCBzb2NrICpubHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCWNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorc3RhdGljIGludCBuZl90YWJsZXNfZGVsc2V0ZWxlbShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpubHNrLAorCQkJCXN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJCWNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSkKIHsKIAljb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyOwpAQCAtMzYzNSw3ICszNjI5LDcgQEAKIAlpZiAobmxhW05GVEFfU0VUX0VMRU1fTElTVF9FTEVNRU5UU10gPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBuZnRfY3R4X2luaXRfZnJvbV9lbGVtYXR0cigmY3R4LCBza2IsIG5saCwgbmxhLCBmYWxzZSk7CisJZXJyID0gbmZ0X2N0eF9pbml0X2Zyb21fZWxlbWF0dHIoJmN0eCwgbmV0LCBza2IsIG5saCwgbmxhLCBmYWxzZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTQwMzAsNyArNDAyNCw4IEBACiAJc3RydWN0IG5mdF90cmFucyAqdHJhbnMsICpuZXh0OwogCXN0cnVjdCBuZnRfdHJhbnNfZWxlbSAqdGU7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHJhbnMsIG5leHQsICZuZXQtPm5mdC5jb21taXRfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHRyYW5zLCBuZXh0LCAmbmV0LT5uZnQuY29tbWl0X2xpc3QsCisJCQkJCSBsaXN0KSB7CiAJCXN3aXRjaCAodHJhbnMtPm1zZ190eXBlKSB7CiAJCWNhc2UgTkZUX01TR19ORVdUQUJMRToKIAkJCWlmIChuZnRfdHJhbnNfdGFibGVfdXBkYXRlKHRyYW5zKSkgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfbmV0ZGV2LmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19uZXRkZXYuYwppbmRleCA3YjljMDUzLi5lZGIzNTAyZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfbmV0ZGV2LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfbmV0ZGV2LmMKQEAgLTk0LDcgKzk0LDcgQEAKIHsKIAlzdHJ1Y3QgbmZ0X3BrdGluZm8gcGt0OwogCi0Jc3dpdGNoIChldGhfaGRyKHNrYiktPmhfcHJvdG8pIHsKKwlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKIAljYXNlIGh0b25zKEVUSF9QX0lQKToKIAkJbmZ0X25ldGRldl9zZXRfcGt0aW5mb19pcHY0KCZwa3QsIHNrYiwgc3RhdGUpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCmluZGV4IDQ2NDUzYWIuLjc3YWZlOTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwpAQCAtMjk1LDggKzI5NSw2IEBACiAJaWYgKCFza2IpCiAJCXJldHVybiBuZXRsaW5rX2Fjayhvc2tiLCBubGgsIC1FTk9NRU0pOwogCi0Jc2tiLT5zayA9IG9za2ItPnNrOwotCiAJbmZubF9sb2NrKHN1YnN5c19pZCk7CiAJc3MgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHRhYmxlW3N1YnN5c19pZF0uc3Vic3lzLAogCQkJCSAgICAgICBsb2NrZGVwX2lzX2hlbGQoJnRhYmxlW3N1YnN5c19pZF0ubXV0ZXgpKTsKQEAgLTM4MSw3ICszNzksNyBAQAogCQkJCWdvdG8gYWNrOwogCiAJCQlpZiAobmMtPmNhbGxfYmF0Y2gpIHsKLQkJCQllcnIgPSBuYy0+Y2FsbF9iYXRjaChuZXQtPm5mbmwsIHNrYiwgbmxoLAorCQkJCWVyciA9IG5jLT5jYWxsX2JhdGNoKG5ldCwgbmV0LT5uZm5sLCBza2IsIG5saCwKIAkJCQkJCSAgICAgKGNvbnN0IHN0cnVjdCBubGF0dHIgKiopY2RhKTsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCAwNmViNDhmLi43NDBjY2U0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtODI1LDcgKzgyNSw3IEBACiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY3RubCk7CiAJc3RydWN0IG5mbmxfbG9nX25ldCAqbG9nID0gbmZubF9sb2dfcGVybmV0KG5ldCk7CiAJaW50IHJldCA9IDA7Ci0JdTE2IGZsYWdzOworCXUxNiBmbGFncyA9IDA7CiAKIAlpZiAobmZ1bGFbTkZVTEFfQ0ZHX0NNRF0pIHsKIAkJdV9pbnQ4X3QgcGYgPSBuZm1zZy0+bmZnZW5fZmFtaWx5OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKaW5kZXggN2Q4MWQyOC4uODYxYzY2MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCkBAIC0zNjUsOCArMzY1LDkgQEAKIAkJYnJlYWs7CiAJfQogCisJbmZubF9jdCA9IHJjdV9kZXJlZmVyZW5jZShuZm5sX2N0X2hvb2spOworCiAJaWYgKHF1ZXVlLT5mbGFncyAmIE5GUUFfQ0ZHX0ZfQ09OTlRSQUNLKSB7Ci0JCW5mbmxfY3QgPSByY3VfZGVyZWZlcmVuY2UobmZubF9jdF9ob29rKTsKIAkJaWYgKG5mbmxfY3QgIT0gTlVMTCkgewogCQkJY3QgPSBuZm5sX2N0LT5nZXRfY3QoZW50c2tiLCAmY3RpbmZvKTsKIAkJCWlmIChjdCAhPSBOVUxMKQpAQCAtMTA2NCw5ICsxMDY1LDEwIEBACiAJaWYgKGVudHJ5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwogCisJLyogcmN1IGxvY2sgYWxyZWFkeSBoZWxkIGZyb20gbmZubC0+Y2FsbF9yY3UuICovCisJbmZubF9jdCA9IHJjdV9kZXJlZmVyZW5jZShuZm5sX2N0X2hvb2spOworCiAJaWYgKG5mcWFbTkZRQV9DVF0pIHsKLQkJLyogcmN1IGxvY2sgYWxyZWFkeSBoZWxkIGZyb20gbmZubC0+Y2FsbF9yY3UuICovCi0JCW5mbmxfY3QgPSByY3VfZGVyZWZlcmVuY2UobmZubF9jdF9ob29rKTsKIAkJaWYgKG5mbmxfY3QgIT0gTlVMTCkKIAkJCWN0ID0gbmZxbmxfY3RfcGFyc2UobmZubF9jdCwgbmxoLCBuZnFhLCBlbnRyeSwgJmN0aW5mbyk7CiAJfQpAQCAtMTQxNyw2ICsxNDE5LDcgQEAKIAogY2xlYW51cF9uZXRsaW5rX25vdGlmaWVyOgogCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmZxbmxfcnRubF9ub3RpZmllcik7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZuZm5sX3F1ZXVlX25ldF9vcHMpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jb3VudGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jb3VudGVyLmMKaW5kZXggMTA2N2ZiNC4uYzc4MDhmYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY291bnRlci5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYwpAQCAtNDcsMjcgKzQ3LDM0IEBACiAJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBpbnQgbmZ0X2NvdW50ZXJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpCitzdGF0aWMgdm9pZCBuZnRfY291bnRlcl9mZXRjaChjb25zdCBzdHJ1Y3QgbmZ0X2NvdW50ZXJfcGVyY3B1IF9fcGVyY3B1ICpjb3VudGVyLAorCQkJICAgICAgc3RydWN0IG5mdF9jb3VudGVyICp0b3RhbCkKIHsKLQlzdHJ1Y3QgbmZ0X2NvdW50ZXJfcGVyY3B1X3ByaXYgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpOwotCXN0cnVjdCBuZnRfY291bnRlcl9wZXJjcHUgKmNwdV9zdGF0czsKLQlzdHJ1Y3QgbmZ0X2NvdW50ZXIgdG90YWw7CisJY29uc3Qgc3RydWN0IG5mdF9jb3VudGVyX3BlcmNwdSAqY3B1X3N0YXRzOwogCXU2NCBieXRlcywgcGFja2V0czsKIAl1bnNpZ25lZCBpbnQgc2VxOwogCWludCBjcHU7CiAKLQltZW1zZXQoJnRvdGFsLCAwLCBzaXplb2YodG90YWwpKTsKKwltZW1zZXQodG90YWwsIDAsIHNpemVvZigqdG90YWwpKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWNwdV9zdGF0cyA9IHBlcl9jcHVfcHRyKHByaXYtPmNvdW50ZXIsIGNwdSk7CisJCWNwdV9zdGF0cyA9IHBlcl9jcHVfcHRyKGNvdW50ZXIsIGNwdSk7CiAJCWRvIHsKIAkJCXNlcQk9IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9pcnEoJmNwdV9zdGF0cy0+c3luY3ApOwogCQkJYnl0ZXMJPSBjcHVfc3RhdHMtPmNvdW50ZXIuYnl0ZXM7CiAJCQlwYWNrZXRzCT0gY3B1X3N0YXRzLT5jb3VudGVyLnBhY2tldHM7CiAJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeV9pcnEoJmNwdV9zdGF0cy0+c3luY3AsIHNlcSkpOwogCi0JCXRvdGFsLnBhY2tldHMgKz0gcGFja2V0czsKLQkJdG90YWwuYnl0ZXMgKz0gYnl0ZXM7CisJCXRvdGFsLT5wYWNrZXRzICs9IHBhY2tldHM7CisJCXRvdGFsLT5ieXRlcyArPSBieXRlczsKIAl9Cit9CisKK3N0YXRpYyBpbnQgbmZ0X2NvdW50ZXJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpCit7CisJc3RydWN0IG5mdF9jb3VudGVyX3BlcmNwdV9wcml2ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTsKKwlzdHJ1Y3QgbmZ0X2NvdW50ZXIgdG90YWw7CisKKwluZnRfY291bnRlcl9mZXRjaChwcml2LT5jb3VudGVyLCAmdG90YWwpOwogCiAJaWYgKG5sYV9wdXRfYmU2NChza2IsIE5GVEFfQ09VTlRFUl9CWVRFUywgY3B1X3RvX2JlNjQodG90YWwuYnl0ZXMpKSB8fAogCSAgICBubGFfcHV0X2JlNjQoc2tiLCBORlRBX0NPVU5URVJfUEFDS0VUUywgY3B1X3RvX2JlNjQodG90YWwucGFja2V0cykpKQpAQCAtMTE4LDYgKzEyNSwzMSBAQAogCWZyZWVfcGVyY3B1KHByaXYtPmNvdW50ZXIpOwogfQogCitzdGF0aWMgaW50IG5mdF9jb3VudGVyX2Nsb25lKHN0cnVjdCBuZnRfZXhwciAqZHN0LCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKnNyYykKK3sKKwlzdHJ1Y3QgbmZ0X2NvdW50ZXJfcGVyY3B1X3ByaXYgKnByaXYgPSBuZnRfZXhwcl9wcml2KHNyYyk7CisJc3RydWN0IG5mdF9jb3VudGVyX3BlcmNwdV9wcml2ICpwcml2X2Nsb25lID0gbmZ0X2V4cHJfcHJpdihkc3QpOworCXN0cnVjdCBuZnRfY291bnRlcl9wZXJjcHUgX19wZXJjcHUgKmNwdV9zdGF0czsKKwlzdHJ1Y3QgbmZ0X2NvdW50ZXJfcGVyY3B1ICp0aGlzX2NwdTsKKwlzdHJ1Y3QgbmZ0X2NvdW50ZXIgdG90YWw7CisKKwluZnRfY291bnRlcl9mZXRjaChwcml2LT5jb3VudGVyLCAmdG90YWwpOworCisJY3B1X3N0YXRzID0gX19uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgbmZ0X2NvdW50ZXJfcGVyY3B1LAorCQkJCQkgICAgICBHRlBfQVRPTUlDKTsKKwlpZiAoY3B1X3N0YXRzID09IE5VTEwpCisJCXJldHVybiBFTk9NRU07CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwl0aGlzX2NwdSA9IHRoaXNfY3B1X3B0cihjcHVfc3RhdHMpOworCXRoaXNfY3B1LT5jb3VudGVyLnBhY2tldHMgPSB0b3RhbC5wYWNrZXRzOworCXRoaXNfY3B1LT5jb3VudGVyLmJ5dGVzID0gdG90YWwuYnl0ZXM7CisJcHJlZW1wdF9lbmFibGUoKTsKKworCXByaXZfY2xvbmUtPmNvdW50ZXIgPSBjcHVfc3RhdHM7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfY291bnRlcl90eXBlOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2NvdW50ZXJfb3BzID0gewogCS50eXBlCQk9ICZuZnRfY291bnRlcl90eXBlLApAQCAtMTI2LDYgKzE1OCw3IEBACiAJLmluaXQJCT0gbmZ0X2NvdW50ZXJfaW5pdCwKIAkuZGVzdHJveQk9IG5mdF9jb3VudGVyX2Rlc3Ryb3ksCiAJLmR1bXAJCT0gbmZ0X2NvdW50ZXJfZHVtcCwKKwkuY2xvbmUJCT0gbmZ0X2NvdW50ZXJfY2xvbmUsCiB9OwogCiBzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2NvdW50ZXJfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMKaW5kZXggOGNiY2EzNC4uOTM5OTIxNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCkBAIC0zNjYsNiArMzY2LDcgQEAKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlzd2l0Y2ggKHByaXYtPmtleSkgeworCWNhc2UgTkZUX0NUX0wzUFJPVE9DT0w6CiAJY2FzZSBORlRfQ1RfUFJPVE9DT0w6CiAJY2FzZSBORlRfQ1RfU1JDOgogCWNhc2UgTkZUX0NUX0RTVDoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMKaW5kZXggNTEzYThlZi4uOWRlYzNiZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMKQEAgLTUwLDggKzUwLDkgQEAKIAl9CiAKIAlleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbSk7Ci0JaWYgKHByaXYtPmV4cHIgIT0gTlVMTCkKLQkJbmZ0X2V4cHJfY2xvbmUobmZ0X3NldF9leHRfZXhwcihleHQpLCBwcml2LT5leHByKTsKKwlpZiAocHJpdi0+ZXhwciAhPSBOVUxMICYmCisJICAgIG5mdF9leHByX2Nsb25lKG5mdF9zZXRfZXh0X2V4cHIoZXh0KSwgcHJpdi0+ZXhwcikgPCAwKQorCQlyZXR1cm4gTlVMTDsKIAogCXJldHVybiBlbGVtOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX3NvY2suYyBiL25ldC9uZmMvbGxjcF9zb2NrLmMKaW5kZXggYjdkZTBkYS4uZWNmMGEwMSAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwX3NvY2suYworKysgYi9uZXQvbmZjL2xsY3Bfc29jay5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAlpZiAoc29ja193cml0ZWFibGUoc2spICYmIHNrLT5za19zdGF0ZSA9PSBMTENQX0NPTk5FQ1RFRCkKIAkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQ7CiAJZWxzZQotCQlzZXRfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiAJcHJfZGVidWcoIm1hc2sgMHgleFxuIiwgbWFzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwppbmRleCBjMmNjMTExLi5lMDA0MDY3IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jCkBAIC01Myw2ICs1Myw4IEBACiAJc3RydWN0IG1kX2xhYmVscyBsYWJlbHM7CiB9OwogCitzdGF0aWMgdm9pZCBfX292c19jdF9mcmVlX2FjdGlvbihzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvKTsKKwogc3RhdGljIHUxNiBrZXlfdG9fbmZwcm90byhjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSkKIHsKIAlzd2l0Y2ggKG50b2hzKGtleS0+ZXRoLnR5cGUpKSB7CkBAIC0xNDEsNiArMTQzLDcgQEAKICAqIHByZXZpb3VzbHkgc2VudCB0aGUgcGFja2V0IHRvIGNvbm50cmFjayB2aWEgdGhlIGN0IGFjdGlvbi4KICAqLwogc3RhdGljIHZvaWQgb3ZzX2N0X3VwZGF0ZV9rZXkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8sCiAJCQkgICAgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwgYm9vbCBwb3N0X2N0KQogewogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqem9uZSA9ICZuZl9jdF96b25lX2RmbHQ7CkBAIC0xNTgsMTMgKzE2MSwxNSBAQAogCQl6b25lID0gbmZfY3Rfem9uZShjdCk7CiAJfSBlbHNlIGlmIChwb3N0X2N0KSB7CiAJCXN0YXRlID0gT1ZTX0NTX0ZfVFJBQ0tFRCB8IE9WU19DU19GX0lOVkFMSUQ7CisJCWlmIChpbmZvKQorCQkJem9uZSA9ICZpbmZvLT56b25lOwogCX0KIAlfX292c19jdF91cGRhdGVfa2V5KGtleSwgc3RhdGUsIHpvbmUsIGN0KTsKIH0KIAogdm9pZCBvdnNfY3RfZmlsbF9rZXkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpCiB7Ci0Jb3ZzX2N0X3VwZGF0ZV9rZXkoc2tiLCBrZXksIGZhbHNlKTsKKwlvdnNfY3RfdXBkYXRlX2tleShza2IsIE5VTEwsIGtleSwgZmFsc2UpOwogfQogCiBpbnQgb3ZzX2N0X3B1dF9rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksIHN0cnVjdCBza19idWZmICpza2IpCkBAIC00MTgsNyArNDIzLDcgQEAKIAkJfQogCX0KIAotCW92c19jdF91cGRhdGVfa2V5KHNrYiwga2V5LCB0cnVlKTsKKwlvdnNfY3RfdXBkYXRlX2tleShza2IsIGluZm8sIGtleSwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY5Myw2ICs2OTgsMTAgQEAKIAkJT1ZTX05MRVJSKGxvZywgIkZhaWxlZCB0byBhbGxvY2F0ZSBjb25udHJhY2sgdGVtcGxhdGUiKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJX19zZXRfYml0KElQU19DT05GSVJNRURfQklULCAmY3RfaW5mby5jdC0+c3RhdHVzKTsKKwluZl9jb25udHJhY2tfZ2V0KCZjdF9pbmZvLmN0LT5jdF9nZW5lcmFsKTsKKwogCWlmIChoZWxwZXIpIHsKIAkJZXJyID0gb3ZzX2N0X2FkZF9oZWxwZXIoJmN0X2luZm8sIGhlbHBlciwga2V5LCBsb2cpOwogCQlpZiAoZXJyKQpAQCAtNzA0LDExICs3MTMsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfY3Q7CiAKLQlfX3NldF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsICZjdF9pbmZvLmN0LT5zdGF0dXMpOwotCW5mX2Nvbm50cmFja19nZXQoJmN0X2luZm8uY3QtPmN0X2dlbmVyYWwpOwogCXJldHVybiAwOwogZXJyX2ZyZWVfY3Q6Ci0JbmZfY29ubnRyYWNrX2ZyZWUoY3RfaW5mby5jdCk7CisJX19vdnNfY3RfZnJlZV9hY3Rpb24oJmN0X2luZm8pOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTc1MCw2ICs3NTcsMTEgQEAKIHsKIAlzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvID0gbmxhX2RhdGEoYSk7CiAKKwlfX292c19jdF9mcmVlX2FjdGlvbihjdF9pbmZvKTsKK30KKworc3RhdGljIHZvaWQgX19vdnNfY3RfZnJlZV9hY3Rpb24oc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqY3RfaW5mbykKK3sKIAlpZiAoY3RfaW5mby0+aGVscGVyKQogCQltb2R1bGVfcHV0KGN0X2luZm8tPmhlbHBlci0+bWUpOwogCWlmIChjdF9pbmZvLT5jdCkKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kcF9ub3RpZnkuYyBiL25ldC9vcGVudnN3aXRjaC9kcF9ub3RpZnkuYwppbmRleCBhN2E4MGE2Li42NTNkMDczIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZHBfbm90aWZ5LmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2RwX25vdGlmeS5jCkBAIC01OCw3ICs1OCw3IEBACiAJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAogCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cG9ydCwgbiwgJmRwLT5wb3J0c1tpXSwgZHBfaGFzaF9ub2RlKSB7Ci0JCQkJaWYgKHZwb3J0LT5vcHMtPnR5cGUgIT0gT1ZTX1ZQT1JUX1RZUEVfTkVUREVWKQorCQkJCWlmICh2cG9ydC0+b3BzLT50eXBlID09IE9WU19WUE9SVF9UWVBFX0lOVEVSTkFMKQogCQkJCQljb250aW51ZTsKIAogCQkJCWlmICghKHZwb3J0LT5kZXYtPnByaXZfZmxhZ3MgJiBJRkZfT1ZTX0RBVEFQQVRIKSkKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYyBiL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYwppbmRleCA5MDdkNmZkLi5kMWJkNGE0IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jCkBAIC0yNDM0LDcgKzI0MzQsMTAgQEAKIAkJaWYgKCFzdGFydCkKIAkJCXJldHVybiAtRU1TR1NJWkU7CiAKLQkJZXJyID0gb3ZzX25sYV9wdXRfdHVubmVsX2luZm8oc2tiLCB0dW5faW5mbyk7CisJCWVyciA9ICBpcF90dW5fdG9fbmxhdHRyKHNrYiwgJnR1bl9pbmZvLT5rZXksCisJCQkJCWlwX3R1bm5lbF9pbmZvX29wdHModHVuX2luZm8pLAorCQkJCQl0dW5faW5mby0+b3B0aW9uc19sZW4sCisJCQkJCWlwX3R1bm5lbF9pbmZvX2FmKHR1bl9pbmZvKSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlubGFfbmVzdF9lbmQoc2tiLCBzdGFydCk7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ2VuZXZlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ2VuZXZlLmMKaW5kZXggZWZiNzM2Yi4uZTQxY2QxMiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LWdlbmV2ZS5jCisrKyBiL25ldC9vcGVudnN3aXRjaC92cG9ydC1nZW5ldmUuYwpAQCAtMTE3LDcgKzExNyw2IEBACiAJLmRlc3Ryb3kJPSBvdnNfbmV0ZGV2X3R1bm5lbF9kZXN0cm95LAogCS5nZXRfb3B0aW9ucwk9IGdlbmV2ZV9nZXRfb3B0aW9ucywKIAkuc2VuZAkJPSBkZXZfcXVldWVfeG1pdCwKLQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG92c19nZW5ldmVfdG5sX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC92cG9ydC1ncmUuYyBiL25ldC9vcGVudnN3aXRjaC92cG9ydC1ncmUuYwppbmRleCBjMzI1N2Q3Li43Zjg4OTdmIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ3JlLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LWdyZS5jCkBAIC04OSw3ICs4OSw2IEBACiAJLmNyZWF0ZQkJPSBncmVfY3JlYXRlLAogCS5zZW5kCQk9IGRldl9xdWV1ZV94bWl0LAogCS5kZXN0cm95CT0gb3ZzX25ldGRldl90dW5uZWxfZGVzdHJveSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvdnNfZ3JlX3RubF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmMgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtbmV0ZGV2LmMKaW5kZXggYjMyNzM2OC4uNmIwMTkwYiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LW5ldGRldi5jCisrKyBiL25ldC9vcGVudnN3aXRjaC92cG9ydC1uZXRkZXYuYwpAQCAtMTgwLDkgKzE4MCwxMyBAQAogCWlmICh2cG9ydC0+ZGV2LT5wcml2X2ZsYWdzICYgSUZGX09WU19EQVRBUEFUSCkKIAkJb3ZzX25ldGRldl9kZXRhY2hfZGV2KHZwb3J0KTsKIAotCS8qIEVhcmx5IHJlbGVhc2Ugc28gd2UgY2FuIHVucmVnaXN0ZXIgdGhlIGRldmljZSAqLworCS8qIFdlIGNhbiBiZSBpbnZva2VkIGJ5IGJvdGggZXhwbGljaXQgdnBvcnQgZGVsZXRpb24gYW5kCisJICogdW5kZXJseWluZyBuZXRkZXYgZGVyZWdpc3RyYXRpb247IGRlbGV0ZSB0aGUgbGluayBvbmx5CisJICogaWYgaXQncyBub3QgYWxyZWFkeSBzaHV0dGluZyBkb3duLgorCSAqLworCWlmICh2cG9ydC0+ZGV2LT5yZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQpCisJCXJ0bmxfZGVsZXRlX2xpbmsodnBvcnQtPmRldik7CiAJZGV2X3B1dCh2cG9ydC0+ZGV2KTsKLQlydG5sX2RlbGV0ZV9saW5rKHZwb3J0LT5kZXYpOwogCXZwb3J0LT5kZXYgPSBOVUxMOwogCXJ0bmxfdW5sb2NrKCk7CiAKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC92cG9ydC5jIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmMKaW5kZXggMGFjMGZkMC4uMzFjYmM4YyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmMKKysrIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmMKQEAgLTcxLDcgKzcxLDcgQEAKIAlyZXR1cm4gJmRldl90YWJsZVtoYXNoICYgKFZQT1JUX0hBU0hfQlVDS0VUUyAtIDEpXTsKIH0KIAotaW50IG92c192cG9ydF9vcHNfcmVnaXN0ZXIoc3RydWN0IHZwb3J0X29wcyAqb3BzKQoraW50IF9fb3ZzX3Zwb3J0X29wc19yZWdpc3RlcihzdHJ1Y3QgdnBvcnRfb3BzICpvcHMpCiB7CiAJaW50IGVyciA9IC1FRVhJU1Q7CiAJc3RydWN0IHZwb3J0X29wcyAqbzsKQEAgLTg3LDcgKzg3LDcgQEAKIAlvdnNfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKG92c192cG9ydF9vcHNfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTF9HUEwoX19vdnNfdnBvcnRfb3BzX3JlZ2lzdGVyKTsKIAogdm9pZCBvdnNfdnBvcnRfb3BzX3VucmVnaXN0ZXIoc3RydWN0IHZwb3J0X29wcyAqb3BzKQogewpAQCAtMjU2LDggKzI1Niw4IEBACiAgKgogICogQHZwb3J0OiB2cG9ydCB0byBkZWxldGUuCiAgKgotICogRGV0YWNoZXMgQHZwb3J0IGZyb20gaXRzIGRhdGFwYXRoIGFuZCBkZXN0cm95cyBpdC4gIEl0IGlzIHBvc3NpYmxlIHRvIGZhaWwKLSAqIGZvciByZWFzb25zIHN1Y2ggYXMgbGFjayBvZiBtZW1vcnkuICBvdnNfbXV0ZXggbXVzdCBiZSBoZWxkLgorICogRGV0YWNoZXMgQHZwb3J0IGZyb20gaXRzIGRhdGFwYXRoIGFuZCBkZXN0cm95cyBpdC4gIG92c19tdXRleCBtdXN0CisgKiBiZSBoZWxkLgogICovCiB2b2lkIG92c192cG9ydF9kZWwoc3RydWN0IHZwb3J0ICp2cG9ydCkKIHsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC92cG9ydC5oIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmgKaW5kZXggYmRmZDgyYS4uOGVhM2E5NiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmgKKysrIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmgKQEAgLTE5Niw3ICsxOTYsMTMgQEAKIAlyZXR1cm4gdnBvcnQtPmRldi0+bmFtZTsKIH0KIAotaW50IG92c192cG9ydF9vcHNfcmVnaXN0ZXIoc3RydWN0IHZwb3J0X29wcyAqb3BzKTsKK2ludCBfX292c192cG9ydF9vcHNfcmVnaXN0ZXIoc3RydWN0IHZwb3J0X29wcyAqb3BzKTsKKyNkZWZpbmUgb3ZzX3Zwb3J0X29wc19yZWdpc3RlcihvcHMpCQlcCisJKHsJCQkJCVwKKwkJKG9wcyktPm93bmVyID0gVEhJU19NT0RVTEU7CVwKKwkJX19vdnNfdnBvcnRfb3BzX3JlZ2lzdGVyKG9wcyk7CVwKKwl9KQorCiB2b2lkIG92c192cG9ydF9vcHNfdW5yZWdpc3RlcihzdHJ1Y3QgdnBvcnRfb3BzICpvcHMpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKm92c190dW5uZWxfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGFmMzk5Y2EuLjk5MjM5NmEgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMTc0MSw2ICsxNzQxLDIwIEBACiAJCWtmcmVlX3JjdShwby0+cm9sbG92ZXIsIHJjdSk7CiB9CiAKK3N0YXRpYyBib29sIHBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwkvKiBFYXJsaWVyIGNvZGUgYXNzdW1lZCB0aGlzIHdvdWxkIGJlIGEgVkxBTiBwa3QsIGRvdWJsZS1jaGVjaworCSAqIHRoaXMgbm93IHRoYXQgd2UgaGF2ZSB0aGUgYWN0dWFsIHBhY2tldCBpbiBoYW5kLiBXZSBjYW4gb25seQorCSAqIGRvIHRoaXMgY2hlY2sgb24gRXRoZXJuZXQgZGV2aWNlcy4KKwkgKi8KKwlpZiAodW5saWtlbHkoZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikpCisJCXJldHVybiBmYWxzZTsKKworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJcmV0dXJuIGxpa2VseShldGhfaGRyKHNrYiktPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wczsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wc19zcGt0OwpAQCAtMTkwMiwxOCArMTkxNiwxMCBAQAogCQlnb3RvIHJldHJ5OwogCX0KIAotCWlmIChsZW4gPiAoZGV2LT5tdHUgKyBkZXYtPmhhcmRfaGVhZGVyX2xlbiArIGV4dHJhX2xlbikpIHsKLQkJLyogRWFybGllciBjb2RlIGFzc3VtZWQgdGhpcyB3b3VsZCBiZSBhIFZMQU4gcGt0LAotCQkgKiBkb3VibGUtY2hlY2sgdGhpcyBub3cgdGhhdCB3ZSBoYXZlIHRoZSBhY3R1YWwKLQkJICogcGFja2V0IGluIGhhbmQuCi0JCSAqLwotCQlzdHJ1Y3QgZXRoaGRyICplaGRyOwotCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQllaGRyID0gZXRoX2hkcihza2IpOwotCQlpZiAoZWhkci0+aF9wcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJCWVyciA9IC1FTVNHU0laRTsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQorCWlmIChsZW4gPiAoZGV2LT5tdHUgKyBkZXYtPmhhcmRfaGVhZGVyX2xlbiArIGV4dHJhX2xlbikgJiYKKwkgICAgIXBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGRldiwgc2tiKSkgeworCQllcnIgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlza2ItPnByb3RvY29sID0gcHJvdG87CkBAIC0yMzIzLDggKzIzMjksOCBAQAogc3RhdGljIGJvb2wgbGxfaGVhZGVyX3RydW5jYXRlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGVuKQogewogCS8qIG5ldCBkZXZpY2UgZG9lc24ndCBsaWtlIGVtcHR5IGhlYWQgKi8KLQlpZiAodW5saWtlbHkobGVuIDw9IGRldi0+aGFyZF9oZWFkZXJfbGVuKSkgewotCQluZXRfd2Fybl9yYXRlbGltaXRlZCgiJXM6IHBhY2tldCBzaXplIGlzIHRvbyBzaG9ydCAoJWQgPD0gJWQpXG4iLAorCWlmICh1bmxpa2VseShsZW4gPCBkZXYtPmhhcmRfaGVhZGVyX2xlbikpIHsKKwkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoIiVzOiBwYWNrZXQgc2l6ZSBpcyB0b28gc2hvcnQgKCVkIDwgJWQpXG4iLAogCQkJCSAgICAgY3VycmVudC0+Y29tbSwgbGVuLCBkZXYtPmhhcmRfaGVhZGVyX2xlbik7CiAJCXJldHVybiB0cnVlOwogCX0KQEAgLTIzMzIsNiArMjMzOCwxNSBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIHZvaWQgdHBhY2tldF9zZXRfcHJvdG9jb2woY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgeworCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCQlza2ItPnByb3RvY29sID0gZXRoX2hkcihza2IpLT5oX3Byb3RvOworCX0KK30KKwogc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsCiAJCXZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2l6ZV9tYXgsCiAJCV9fYmUxNiBwcm90bywgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGhsZW4pCkBAIC0yMzY4LDggKzIzODMsNiBAQAogCXNrYl9yZXNlcnZlKHNrYiwgaGxlbik7CiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAKLQlpZiAoIXBhY2tldF91c2VfZGlyZWN0X3htaXQocG8pKQotCQlza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IsIDApOwogCWlmICh1bmxpa2VseShwby0+dHBfdHhfaGFzX29mZikpIHsKIAkJaW50IG9mZl9taW4sIG9mZl9tYXgsIG9mZjsKIAkJb2ZmX21pbiA9IHBvLT50cF9oZHJsZW4gLSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKTsKQEAgLTI0MTUsNiArMjQyOCw4IEBACiAJCQkJZGV2LT5oYXJkX2hlYWRlcl9sZW4pOwogCQlpZiAodW5saWtlbHkoZXJyKSkKIAkJCXJldHVybiBlcnI7CisJCWlmICghc2tiLT5wcm90b2NvbCkKKwkJCXRwYWNrZXRfc2V0X3Byb3RvY29sKGRldiwgc2tiKTsKIAogCQlkYXRhICs9IGRldi0+aGFyZF9oZWFkZXJfbGVuOwogCQl0b193cml0ZSAtPSBkZXYtPmhhcmRfaGVhZGVyX2xlbjsKQEAgLTI0NDksNiArMjQ2NCw4IEBACiAJCWxlbiA9ICgodG9fd3JpdGUgPiBsZW5fbWF4KSA/IGxlbl9tYXggOiB0b193cml0ZSk7CiAJfQogCisJc2tiX3Byb2JlX3RyYW5zcG9ydF9oZWFkZXIoc2tiLCAwKTsKKwogCXJldHVybiB0cF9sZW47CiB9CiAKQEAgLTI0OTMsMTIgKzI1MTAsMTMgQEAKIAlpZiAodW5saWtlbHkoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkpCiAJCWdvdG8gb3V0X3B1dDsKIAotCXJlc2VydmUgPSBkZXYtPmhhcmRfaGVhZGVyX2xlbiArIFZMQU5fSExFTjsKKwlpZiAocG8tPnNrLnNrX3NvY2tldC0+dHlwZSA9PSBTT0NLX1JBVykKKwkJcmVzZXJ2ZSA9IGRldi0+aGFyZF9oZWFkZXJfbGVuOwogCXNpemVfbWF4ID0gcG8tPnR4X3JpbmcuZnJhbWVfc2l6ZQogCQktIChwby0+dHBfaGRybGVuIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpOwogCi0JaWYgKHNpemVfbWF4ID4gZGV2LT5tdHUgKyByZXNlcnZlKQotCQlzaXplX21heCA9IGRldi0+bXR1ICsgcmVzZXJ2ZTsKKwlpZiAoc2l6ZV9tYXggPiBkZXYtPm10dSArIHJlc2VydmUgKyBWTEFOX0hMRU4pCisJCXNpemVfbWF4ID0gZGV2LT5tdHUgKyByZXNlcnZlICsgVkxBTl9ITEVOOwogCiAJZG8gewogCQlwaCA9IHBhY2tldF9jdXJyZW50X2ZyYW1lKHBvLCAmcG8tPnR4X3JpbmcsCkBAIC0yNTI1LDE4ICsyNTQzLDEwIEBACiAJCXRwX2xlbiA9IHRwYWNrZXRfZmlsbF9za2IocG8sIHNrYiwgcGgsIGRldiwgc2l6ZV9tYXgsIHByb3RvLAogCQkJCQkgIGFkZHIsIGhsZW4pOwogCQlpZiAobGlrZWx5KHRwX2xlbiA+PSAwKSAmJgotCQkgICAgdHBfbGVuID4gZGV2LT5tdHUgKyBkZXYtPmhhcmRfaGVhZGVyX2xlbikgewotCQkJc3RydWN0IGV0aGhkciAqZWhkcjsKLQkJCS8qIEVhcmxpZXIgY29kZSBhc3N1bWVkIHRoaXMgd291bGQgYmUgYSBWTEFOIHBrdCwKLQkJCSAqIGRvdWJsZS1jaGVjayB0aGlzIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGFjdHVhbAotCQkJICogcGFja2V0IGluIGhhbmQuCi0JCQkgKi8KKwkJICAgIHRwX2xlbiA+IGRldi0+bXR1ICsgcmVzZXJ2ZSAmJgorCQkgICAgIXBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGRldiwgc2tiKSkKKwkJCXRwX2xlbiA9IC1FTVNHU0laRTsKIAotCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQkJCWVoZHIgPSBldGhfaGRyKHNrYik7Ci0JCQlpZiAoZWhkci0+aF9wcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpCi0JCQkJdHBfbGVuID0gLUVNU0dTSVpFOwotCQl9CiAJCWlmICh1bmxpa2VseSh0cF9sZW4gPCAwKSkgewogCQkJaWYgKHBvLT50cF9sb3NzKSB7CiAJCQkJX19wYWNrZXRfc2V0X3N0YXR1cyhwbywgcGgsCkBAIC0yNzY1LDE4ICsyNzc1LDEwIEBACiAKIAlzb2NrX3R4X3RpbWVzdGFtcChzaywgJnNrYl9zaGluZm8oc2tiKS0+dHhfZmxhZ3MpOwogCi0JaWYgKCFnc29fdHlwZSAmJiAobGVuID4gZGV2LT5tdHUgKyByZXNlcnZlICsgZXh0cmFfbGVuKSkgewotCQkvKiBFYXJsaWVyIGNvZGUgYXNzdW1lZCB0aGlzIHdvdWxkIGJlIGEgVkxBTiBwa3QsCi0JCSAqIGRvdWJsZS1jaGVjayB0aGlzIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGFjdHVhbAotCQkgKiBwYWNrZXQgaW4gaGFuZC4KLQkJICovCi0JCXN0cnVjdCBldGhoZHIgKmVoZHI7Ci0JCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCWVoZHIgPSBldGhfaGRyKHNrYik7Ci0JCWlmIChlaGRyLT5oX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSkgewotCQkJZXJyID0gLUVNU0dTSVpFOwotCQkJZ290byBvdXRfZnJlZTsKLQkJfQorCWlmICghZ3NvX3R5cGUgJiYgKGxlbiA+IGRldi0+bXR1ICsgcmVzZXJ2ZSArIGV4dHJhX2xlbikgJiYKKwkgICAgIXBhY2tldF9leHRyYV92bGFuX2xlbl9hbGxvd2VkKGRldiwgc2tiKSkgeworCQllcnIgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAJc2tiLT5wcm90b2NvbCA9IHByb3RvOwpAQCAtMjgwNyw4ICsyODA5LDggQEAKIAkJbGVuICs9IHZuZXRfaGRyX2xlbjsKIAl9CiAKLQlpZiAoIXBhY2tldF91c2VfZGlyZWN0X3htaXQocG8pKQotCQlza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IsIHJlc2VydmUpOworCXNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYiwgcmVzZXJ2ZSk7CisKIAlpZiAodW5saWtlbHkoZXh0cmFfbGVuID09IDQpKQogCQlza2ItPm5vX2ZjcyA9IDE7CiAKQEAgLTQxMDcsNyArNDEwOSw3IEBACiAJCWVyciA9IC1FSU5WQUw7CiAJCWlmICh1bmxpa2VseSgoaW50KXJlcS0+dHBfYmxvY2tfc2l6ZSA8PSAwKSkKIAkJCWdvdG8gb3V0OwotCQlpZiAodW5saWtlbHkocmVxLT50cF9ibG9ja19zaXplICYgKFBBR0VfU0laRSAtIDEpKSkKKwkJaWYgKHVubGlrZWx5KCFQQUdFX0FMSUdORUQocmVxLT50cF9ibG9ja19zaXplKSkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKHBvLT50cF92ZXJzaW9uID49IFRQQUNLRVRfVjMgJiYKIAkJICAgIChpbnQpKHJlcS0+dHBfYmxvY2tfc2l6ZSAtCkBAIC00MTE5LDggKzQxMjEsOCBAQAogCQlpZiAodW5saWtlbHkocmVxLT50cF9mcmFtZV9zaXplICYgKFRQQUNLRVRfQUxJR05NRU5UIC0gMSkpKQogCQkJZ290byBvdXQ7CiAKLQkJcmItPmZyYW1lc19wZXJfYmxvY2sgPSByZXEtPnRwX2Jsb2NrX3NpemUvcmVxLT50cF9mcmFtZV9zaXplOwotCQlpZiAodW5saWtlbHkocmItPmZyYW1lc19wZXJfYmxvY2sgPD0gMCkpCisJCXJiLT5mcmFtZXNfcGVyX2Jsb2NrID0gcmVxLT50cF9ibG9ja19zaXplIC8gcmVxLT50cF9mcmFtZV9zaXplOworCQlpZiAodW5saWtlbHkocmItPmZyYW1lc19wZXJfYmxvY2sgPT0gMCkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKHVubGlrZWx5KChyYi0+ZnJhbWVzX3Blcl9ibG9jayAqIHJlcS0+dHBfYmxvY2tfbnIpICE9CiAJCQkJCXJlcS0+dHBfZnJhbWVfbnIpKQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwppbmRleCBkNDU2NDAzLi5lM2IxMThjIDEwMDY0NAotLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYworKysgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwpAQCAtMTg2LDEyICsxODYsNiBAQAogCQl9CiAJfQogCi0JaWYgKHRyYW5zID09IE5VTEwpIHsKLQkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOwotCQljb25uID0gRVJSX1BUUigtRU5PREVWKTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJY29ubi0+Y190cmFucyA9IHRyYW5zOwogCiAJcmV0ID0gdHJhbnMtPmNvbm5fYWxsb2MoY29ubiwgZ2ZwKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggODI3MTU1Yy4uYzljZGIzNSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKKysrIGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTEwMTMsMTEgKzEwMTMsMTMgQEAKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAl9CiAKLQkvKiByYWNpbmcgd2l0aCBhbm90aGVyIHRocmVhZCBiaW5kaW5nIHNlZW1zIG9rIGhlcmUgKi8KKwlsb2NrX3NvY2soc2spOwogCWlmIChkYWRkciA9PSAwIHx8IHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KIAkJZ290byBvdXQ7CiAJfQorCXJlbGVhc2Vfc29jayhzayk7CiAKIAlpZiAocGF5bG9hZF9sZW4gPiByZHNfc2tfc25kYnVmKHJzKSkgewogCQlyZXQgPSAtRU1TR1NJWkU7CmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL2NvcmUuYyBiL25ldC9yZmtpbGwvY29yZS5jCmluZGV4IGI0MWU5ZWEuLmY1M2JmM2I2IDEwMDY0NAotLS0gYS9uZXQvcmZraWxsL2NvcmUuYworKysgYi9uZXQvcmZraWxsL2NvcmUuYwpAQCAtNDksNyArNDksNiBAQAogc3RydWN0IHJma2lsbCB7CiAJc3BpbmxvY2tfdAkJbG9jazsKIAotCWNvbnN0IGNoYXIJCSpuYW1lOwogCWVudW0gcmZraWxsX3R5cGUJdHlwZTsKIAogCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwpAQCAtNzMsNiArNzIsNyBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsJcG9sbF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdAl1ZXZlbnRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc3luY193b3JrOworCWNoYXIJCQluYW1lW107CiB9OwogI2RlZmluZSB0b19yZmtpbGwoZCkJY29udGFpbmVyX29mKGQsIHN0cnVjdCByZmtpbGwsIGRldikKIApAQCAtODc2LDE0ICs4NzYsMTQgQEAKIAlpZiAoV0FSTl9PTih0eXBlID09IFJGS0lMTF9UWVBFX0FMTCB8fCB0eXBlID49IE5VTV9SRktJTExfVFlQRVMpKQogCQlyZXR1cm4gTlVMTDsKIAotCXJma2lsbCA9IGt6YWxsb2Moc2l6ZW9mKCpyZmtpbGwpLCBHRlBfS0VSTkVMKTsKKwlyZmtpbGwgPSBremFsbG9jKHNpemVvZigqcmZraWxsKSArIHN0cmxlbihuYW1lKSArIDEsIEdGUF9LRVJORUwpOwogCWlmICghcmZraWxsKQogCQlyZXR1cm4gTlVMTDsKIAogCXNwaW5fbG9ja19pbml0KCZyZmtpbGwtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZyZmtpbGwtPm5vZGUpOwogCXJma2lsbC0+dHlwZSA9IHR5cGU7Ci0JcmZraWxsLT5uYW1lID0gbmFtZTsKKwlzdHJjcHkocmZraWxsLT5uYW1lLCBuYW1lKTsKIAlyZmtpbGwtPm9wcyA9IG9wczsKIAlyZmtpbGwtPmRhdGEgPSBvcHNfZGF0YTsKIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWFjay5jIGIvbmV0L3J4cnBjL2FyLWFjay5jCmluZGV4IGUwNTQ3ZjUuLmFkYzU1NWUgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1hY2suYworKysgYi9uZXQvcnhycGMvYXItYWNrLmMKQEAgLTcyMyw4ICs3MjMsMTAgQEAKIAogCQkJaWYgKChjYWxsLT5zdGF0ZSA9PSBSWFJQQ19DQUxMX0NMSUVOVF9BV0FJVF9SRVBMWSB8fAogCQkJICAgICBjYWxsLT5zdGF0ZSA9PSBSWFJQQ19DQUxMX1NFUlZFUl9BV0FJVF9BQ0spICYmCi0JCQkgICAgaGFyZCA+IHR4KQorCQkJICAgIGhhcmQgPiB0eCkgeworCQkJCWNhbGwtPmFja3NfaGFyZCA9IHR4OwogCQkJCWdvdG8gYWxsX2Fja2VkOworCQkJfQogCiAJCQlzbXBfcm1iKCk7CiAJCQlyeHJwY19yb3RhdGVfdHhfd2luZG93KGNhbGwsIGhhcmQgLSAxKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1vdXRwdXQuYyBiL25ldC9yeHJwYy9hci1vdXRwdXQuYwppbmRleCBhNDBkM2FmLi4xNGM0ZTEyIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItb3V0cHV0LmMKKysrIGIvbmV0L3J4cnBjL2FyLW91dHB1dC5jCkBAIC01MzEsNyArNTMxLDcgQEAKIAl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlUKTsKIAogCS8qIHRoaXMgc2hvdWxkIGJlIGluIHBvbGwgKi8KLQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiAJaWYgKHNrLT5za19lcnIgfHwgKHNrLT5za19zaHV0ZG93biAmIFNFTkRfU0hVVERPV04pKQogCQlyZXR1cm4gLUVQSVBFOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKaW5kZXggZjQzYzhmMy4uYjVjMmNmMiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuYworKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCkBAIC0yNTMsNyArMjUzLDggQEAKIH0KIAogLyogV2Uga25vdyBoYW5kbGUuIEZpbmQgcWRpc2MgYW1vbmcgYWxsIHFkaXNjJ3MgYXR0YWNoZWQgdG8gZGV2aWNlCi0gICAocm9vdCBxZGlzYywgYWxsIGl0cyBjaGlsZHJlbiwgY2hpbGRyZW4gb2YgY2hpbGRyZW4gZXRjLikKKyAqIChyb290IHFkaXNjLCBhbGwgaXRzIGNoaWxkcmVuLCBjaGlsZHJlbiBvZiBjaGlsZHJlbiBldGMuKQorICogTm90ZTogY2FsbGVyIGVpdGhlciB1c2VzIHJ0bmwgb3IgcmN1X3JlYWRfbG9jaygpCiAgKi8KIAogc3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfbWF0Y2hfZnJvbV9yb290KHN0cnVjdCBRZGlzYyAqcm9vdCwgdTMyIGhhbmRsZSkKQEAgLTI2NCw3ICsyNjUsNyBAQAogCSAgICByb290LT5oYW5kbGUgPT0gaGFuZGxlKQogCQlyZXR1cm4gcm9vdDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocSwgJnJvb3QtPmxpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShxLCAmcm9vdC0+bGlzdCwgbGlzdCkgewogCQlpZiAocS0+aGFuZGxlID09IGhhbmRsZSkKIAkJCXJldHVybiBxOwogCX0KQEAgLTI3NywxNSArMjc4LDE4IEBACiAJCXN0cnVjdCBRZGlzYyAqcm9vdCA9IHFkaXNjX2RldihxKS0+cWRpc2M7CiAKIAkJV0FSTl9PTl9PTkNFKHJvb3QgPT0gJm5vb3BfcWRpc2MpOwotCQlsaXN0X2FkZF90YWlsKCZxLT5saXN0LCAmcm9vdC0+bGlzdCk7CisJCUFTU0VSVF9SVE5MKCk7CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZxLT5saXN0LCAmcm9vdC0+bGlzdCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChxZGlzY19saXN0X2FkZCk7CiAKIHZvaWQgcWRpc2NfbGlzdF9kZWwoc3RydWN0IFFkaXNjICpxKQogewotCWlmICgocS0+cGFyZW50ICE9IFRDX0hfUk9PVCkgJiYgIShxLT5mbGFncyAmIFRDUV9GX0lOR1JFU1MpKQotCQlsaXN0X2RlbCgmcS0+bGlzdCk7CisJaWYgKChxLT5wYXJlbnQgIT0gVENfSF9ST09UKSAmJiAhKHEtPmZsYWdzICYgVENRX0ZfSU5HUkVTUykpIHsKKwkJQVNTRVJUX1JUTkwoKTsKKwkJbGlzdF9kZWxfcmN1KCZxLT5saXN0KTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKHFkaXNjX2xpc3RfZGVsKTsKIApAQCAtNzUwLDE0ICs3NTQsMTggQEAKIAlpZiAobiA9PSAwKQogCQlyZXR1cm47CiAJZHJvcHMgPSBtYXhfdChpbnQsIG4sIDApOworCXJjdV9yZWFkX2xvY2soKTsKIAl3aGlsZSAoKHBhcmVudGlkID0gc2NoLT5wYXJlbnQpKSB7CiAJCWlmIChUQ19IX01BSihwYXJlbnRpZCkgPT0gVENfSF9NQUooVENfSF9JTkdSRVNTKSkKLQkJCXJldHVybjsKKwkJCWJyZWFrOwogCisJCWlmIChzY2gtPmZsYWdzICYgVENRX0ZfTk9QQVJFTlQpCisJCQlicmVhazsKKwkJLyogVE9ETzogcGVyZm9ybSB0aGUgc2VhcmNoIG9uIGEgcGVyIHR4cSBiYXNpcyAqLwogCQlzY2ggPSBxZGlzY19sb29rdXAocWRpc2NfZGV2KHNjaCksIFRDX0hfTUFKKHBhcmVudGlkKSk7CiAJCWlmIChzY2ggPT0gTlVMTCkgewotCQkJV0FSTl9PTihwYXJlbnRpZCAhPSBUQ19IX1JPT1QpOwotCQkJcmV0dXJuOworCQkJV0FSTl9PTl9PTkNFKHBhcmVudGlkICE9IFRDX0hfUk9PVCk7CisJCQlicmVhazsKIAkJfQogCQljb3BzID0gc2NoLT5vcHMtPmNsX29wczsKIAkJaWYgKGNvcHMtPnFsZW5fbm90aWZ5KSB7CkBAIC03NjgsNiArNzc2LDcgQEAKIAkJc2NoLT5xLnFsZW4gLT0gbjsKIAkJX19xZGlzY19xc3RhdHNfZHJvcChzY2gsIGRyb3BzKTsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiBFWFBPUlRfU1lNQk9MKHFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbik7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggY2I1ZDRhZC4uZTgyYTFhZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTczNyw3ICs3MzcsNyBAQAogCQlyZXR1cm47CiAJfQogCWlmICghbmV0aWZfaXNfbXVsdGlxdWV1ZShkZXYpKQotCQlxZGlzYy0+ZmxhZ3MgfD0gVENRX0ZfT05FVFhRVUVVRTsKKwkJcWRpc2MtPmZsYWdzIHw9IFRDUV9GX09ORVRYUVVFVUUgfCBUQ1FfRl9OT1BBUkVOVDsKIAlkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nID0gcWRpc2M7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbXEuYyBiL25ldC9zY2hlZC9zY2hfbXEuYwppbmRleCBmM2NiYWVjLi4zZTgyZjA0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX21xLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9tcS5jCkBAIC02Myw3ICs2Myw3IEBACiAJCWlmIChxZGlzYyA9PSBOVUxMKQogCQkJZ290byBlcnI7CiAJCXByaXYtPnFkaXNjc1tudHhdID0gcWRpc2M7Ci0JCXFkaXNjLT5mbGFncyB8PSBUQ1FfRl9PTkVUWFFVRVVFOworCQlxZGlzYy0+ZmxhZ3MgfD0gVENRX0ZfT05FVFhRVUVVRSB8IFRDUV9GX05PUEFSRU5UOwogCX0KIAogCXNjaC0+ZmxhZ3MgfD0gVENRX0ZfTVFST09UOwpAQCAtMTU2LDcgKzE1Niw3IEBACiAKIAkqb2xkID0gZGV2X2dyYWZ0X3FkaXNjKGRldl9xdWV1ZSwgbmV3KTsKIAlpZiAobmV3KQotCQluZXctPmZsYWdzIHw9IFRDUV9GX09ORVRYUVVFVUU7CisJCW5ldy0+ZmxhZ3MgfD0gVENRX0ZfT05FVFhRVUVVRSB8IFRDUV9GX05PUEFSRU5UOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQogCQlkZXZfYWN0aXZhdGUoZGV2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbXFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX21xcHJpby5jCmluZGV4IDM4MTFhNzQuLmFkNzBlY2YgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbXFwcmlvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9tcXByaW8uYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJCQlnb3RvIGVycjsKIAkJfQogCQlwcml2LT5xZGlzY3NbaV0gPSBxZGlzYzsKLQkJcWRpc2MtPmZsYWdzIHw9IFRDUV9GX09ORVRYUVVFVUU7CisJCXFkaXNjLT5mbGFncyB8PSBUQ1FfRl9PTkVUWFFVRVVFIHwgVENRX0ZfTk9QQVJFTlQ7CiAJfQogCiAJLyogSWYgdGhlIG1xcHJpbyBvcHRpb25zIGluZGljYXRlIHRoYXQgaGFyZHdhcmUgc2hvdWxkIG93bgpAQCAtMjA5LDcgKzIwOSw3IEBACiAJKm9sZCA9IGRldl9ncmFmdF9xZGlzYyhkZXZfcXVldWUsIG5ldyk7CiAKIAlpZiAobmV3KQotCQluZXctPmZsYWdzIHw9IFRDUV9GX09ORVRYUVVFVUU7CisJCW5ldy0+ZmxhZ3MgfD0gVENRX0ZfT05FVFhRVUVVRSB8IFRDUV9GX05PUEFSRU5UOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCiAJCWRldl9hY3RpdmF0ZShkZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXV0aC5jIGIvbmV0L3NjdHAvYXV0aC5jCmluZGV4IDRmMTViN2QuLjE1NDNlMzkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2F1dGguYworKysgYi9uZXQvc2N0cC9hdXRoLmMKQEAgLTgwOSw4ICs4MDksOCBAQAogCWlmICghaGFzX3NoYTEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtY3B5KGVwLT5hdXRoX2htYWNzX2xpc3QtPmhtYWNfaWRzLCAmaG1hY3MtPnNobWFjX2lkZW50c1swXSwKLQkJaG1hY3MtPnNobWFjX251bV9pZGVudHMgKiBzaXplb2YoX191MTYpKTsKKwlmb3IgKGkgPSAwOyBpIDwgaG1hY3MtPnNobWFjX251bV9pZGVudHM7IGkrKykKKwkJZXAtPmF1dGhfaG1hY3NfbGlzdC0+aG1hY19pZHNbaV0gPSBodG9ucyhobWFjcy0+c2htYWNfaWRlbnRzW2ldKTsKIAllcC0+YXV0aF9obWFjc19saXN0LT5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHNjdHBfcGFyYW1oZHJfdCkgKwogCQkJCWhtYWNzLT5zaG1hY19udW1faWRlbnRzICogc2l6ZW9mKF9fdTE2KSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggZTkxN2QyNy4uZWM1MjkxMiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtMjA5LDYgKzIwOSw3IEBACiAJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IGZsb3dpNiAqZmw2ID0gJnRyYW5zcG9ydC0+ZmwudS5pcDY7CisJaW50IHJlczsKIAogCXByX2RlYnVnKCIlczogc2tiOiVwLCBsZW46JWQsIHNyYzolcEk2IGRzdDolcEk2XG4iLCBfX2Z1bmNfXywgc2tiLAogCQkgc2tiLT5sZW4sICZmbDYtPnNhZGRyLCAmZmw2LT5kYWRkcik7CkBAIC0yMjAsNyArMjIxLDEwIEBACiAKIAlTQ1RQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFNDVFBfTUlCX09VVFNDVFBQQUNLUyk7CiAKLQlyZXR1cm4gaXA2X3htaXQoc2ssIHNrYiwgZmw2LCBucC0+b3B0LCBucC0+dGNsYXNzKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmVzID0gaXA2X3htaXQoc2ssIHNrYiwgZmw2LCByY3VfZGVyZWZlcmVuY2UobnAtPm9wdCksIG5wLT50Y2xhc3MpOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXM7CiB9CiAKIC8qIFJldHVybnMgdGhlIGRzdCBjYWNoZSBlbnRyeSBmb3IgdGhlIGdpdmVuIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaXAKQEAgLTI2Miw3ICsyNjYsMTAgQEAKIAkJcHJfZGVidWcoInNyYz0lcEk2IC0gIiwgJmZsNi0+c2FkZHIpOwogCX0KIAotCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdChmbDYsIG5wLT5vcHQsICZmaW5hbCk7CisJcmN1X3JlYWRfbG9jaygpOworCWZpbmFsX3AgPSBmbDZfdXBkYXRlX2RzdChmbDYsIHJjdV9kZXJlZmVyZW5jZShucC0+b3B0KSwgJmZpbmFsKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwogCWRzdCA9IGlwNl9kc3RfbG9va3VwX2Zsb3coc2ssIGZsNiwgZmluYWxfcCk7CiAJaWYgKCFhc29jIHx8IHNhZGRyKQogCQlnb3RvIG91dDsKQEAgLTMxNiwxNCArMzIzLDEzIEBACiAJCQl9CiAJCX0KIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KIAlpZiAoYmFkZHIpIHsKIAkJZmw2LT5zYWRkciA9IGJhZGRyLT52Ni5zaW42X2FkZHI7CiAJCWZsNi0+Zmw2X3Nwb3J0ID0gYmFkZHItPnY2LnNpbjZfcG9ydDsKLQkJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KGZsNiwgbnAtPm9wdCwgJmZpbmFsKTsKKwkJZmluYWxfcCA9IGZsNl91cGRhdGVfZHN0KGZsNiwgcmN1X2RlcmVmZXJlbmNlKG5wLT5vcHQpLCAmZmluYWwpOwogCQlkc3QgPSBpcDZfZHN0X2xvb2t1cF9mbG93KHNrLCBmbDYsIGZpbmFsX3ApOwogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAogb3V0OgogCWlmICghSVNfRVJSX09SX05VTEwoZHN0KSkgewpAQCAtNjM1LDYgKzY0MSw3IEBACiAJc3RydWN0IHNvY2sgKm5ld3NrOwogCXN0cnVjdCBpcHY2X3BpbmZvICpuZXducCwgKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBzY3RwNl9zb2NrICpuZXdzY3RwNnNrOworCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0OwogCiAJbmV3c2sgPSBza19hbGxvYyhzb2NrX25ldChzayksIFBGX0lORVQ2LCBHRlBfS0VSTkVMLCBzay0+c2tfcHJvdCwgMCk7CiAJaWYgKCFuZXdzaykKQEAgLTY1NCw2ICs2NjEsMTMgQEAKIAogCW1lbWNweShuZXducCwgbnAsIHNpemVvZihzdHJ1Y3QgaXB2Nl9waW5mbykpOwogCisJcmN1X3JlYWRfbG9jaygpOworCW9wdCA9IHJjdV9kZXJlZmVyZW5jZShucC0+b3B0KTsKKwlpZiAob3B0KQorCQlvcHQgPSBpcHY2X2R1cF9vcHRpb25zKG5ld3NrLCBvcHQpOworCVJDVV9JTklUX1BPSU5URVIobmV3bnAtPm9wdCwgb3B0KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwogCS8qIEluaXRpYWxpemUgc2sncyBzcG9ydCwgZHBvcnQsIHJjdl9zYWRkciBhbmQgZGFkZHIgZm9yIGdldHNvY2tuYW1lKCkKIAkgKiBhbmQgZ2V0cGVlcm5hbWUoKS4KIAkgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHF1ZXVlLmMgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCmluZGV4IDdlOGYwYTEuLmMwMzgwY2YgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHF1ZXVlLmMKKysrIGIvbmV0L3NjdHAvb3V0cXVldWUuYwpAQCAtMzI0LDYgKzMyNCw3IEBACiAJCQkJIHNjdHBfY25hbWUoU0NUUF9TVF9DSFVOSyhjaHVuay0+Y2h1bmtfaGRyLT50eXBlKSkgOgogCQkJCSAiaWxsZWdhbCBjaHVuayIpOwogCisJCQlzY3RwX2NodW5rX2hvbGQoY2h1bmspOwogCQkJc2N0cF9vdXRxX3RhaWxfZGF0YShxLCBjaHVuayk7CiAJCQlpZiAoY2h1bmstPmNodW5rX2hkci0+ZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKQogCQkJCVNDVFBfSU5DX1NUQVRTKG5ldCwgU0NUUF9NSUJfT1VUVU5PUkRFUkNIVU5LUyk7CkBAIC0xMjUxLDYgKzEyNTIsNyBAQAogCSAqLwogCiAJc2Fja19hX3J3bmQgPSBudG9obChzYWNrLT5hX3J3bmQpOworCWFzb2MtPnBlZXIuemVyb193aW5kb3dfYW5ub3VuY2VkID0gIXNhY2tfYV9yd25kOwogCW91dHN0YW5kaW5nID0gcS0+b3V0c3RhbmRpbmdfYnl0ZXM7CiAKIAlpZiAob3V0c3RhbmRpbmcgPCBzYWNrX2FfcnduZCkKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwppbmRleCA3NjNlMDZhLi41ZDZhMDNmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKKysrIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCkBAIC0xNjUyLDcgKzE2NTIsNyBAQAogCiAJLyogU2V0IGFuIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIGNvb2tpZS4gICovCiAJY29va2llLT5jLmV4cGlyYXRpb24gPSBrdGltZV9hZGQoYXNvYy0+Y29va2llX2xpZmUsCi0JCQkJCSBrdGltZV9nZXQoKSk7CisJCQkJCSBrdGltZV9nZXRfcmVhbCgpKTsKIAogCS8qIENvcHkgdGhlIHBlZXIncyBpbml0IHBhY2tldC4gICovCiAJbWVtY3B5KCZjb29raWUtPmMucGVlcl9pbml0WzBdLCBpbml0X2NodW5rLT5jaHVua19oZHIsCkBAIC0xNzgwLDcgKzE3ODAsNyBAQAogCWlmIChzb2NrX2ZsYWcoZXAtPmJhc2Uuc2ssIFNPQ0tfVElNRVNUQU1QKSkKIAkJa3QgPSBza2JfZ2V0X2t0aW1lKHNrYik7CiAJZWxzZQotCQlrdCA9IGt0aW1lX2dldCgpOworCQlrdCA9IGt0aW1lX2dldF9yZWFsKCk7CiAKIAlpZiAoIWFzb2MgJiYga3RpbWVfYmVmb3JlKGJlYXJfY29va2llLT5leHBpcmF0aW9uLCBrdCkpIHsKIAkJLyoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggNmY0NmFhMS4uMjJjMmJmMyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTQ4MjksNyArNDgyOSw4IEBACiAKIAlyZXR2YWwgPSBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiAKLQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1JFUExZLCBTQ1RQX0NIVU5LKGFib3J0KSk7CisJaWYgKGFib3J0KQorCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1JFUExZLCBTQ1RQX0NIVU5LKGFib3J0KSk7CiAKIAkvKiBFdmVuIGlmIHdlIGNhbid0IHNlbmQgdGhlIEFCT1JUIGR1ZSB0byBsb3cgbWVtb3J5IGRlbGV0ZSB0aGUKIAkgKiBUQ0IuICBUaGlzIGlzIGEgZGVwYXJ0dXJlIGZyb20gb3VyIHR5cGljYWwgTk9NRU0gaGFuZGxpbmcuCkBAIC00OTY2LDcgKzQ5NjcsOCBAQAogCQkJU0NUUF9UTyhTQ1RQX0VWRU5UX1RJTUVPVVRfVDFfSU5JVCkpOwogCXJldHZhbCA9IFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTsKIAotCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQTFksIFNDVFBfQ0hVTksoYWJvcnQpKTsKKwlpZiAoYWJvcnQpCisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQTFksIFNDVFBfQ0hVTksoYWJvcnQpKTsKIAogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfTkVXX1NUQVRFLAogCQkJU0NUUF9TVEFURShTQ1RQX1NUQVRFX0NMT1NFRCkpOwpAQCAtNTQxMiw3ICs1NDE0LDggQEAKIAlTQ1RQX0lOQ19TVEFUUyhuZXQsIFNDVFBfTUlCX1QzX1JUWF9FWFBJUkVEUyk7CiAKIAlpZiAoYXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCA+PSBhc29jLT5tYXhfcmV0cmFucykgewotCQlpZiAoYXNvYy0+c3RhdGUgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB7CisJCWlmIChhc29jLT5wZWVyLnplcm9fd2luZG93X2Fubm91bmNlZCAmJgorCQkgICAgYXNvYy0+c3RhdGUgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB7CiAJCQkvKgogCQkJICogV2UgYXJlIGhlcmUgbGlrZWx5IGJlY2F1c2UgdGhlIHJlY2VpdmVyIGhhZCBpdHMgcnduZAogCQkJICogY2xvc2VkIGZvciBhIHdoaWxlIGFuZCB3ZSBoYXZlIG5vdCBiZWVuIGFibGUgdG8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggODk3YzAxYy4uZWYxZDkwZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTk3Miw3ICs5NzIsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCS8qIEFsbG9jIHNwYWNlIGZvciB0aGUgYWRkcmVzcyBhcnJheSBpbiBrZXJuZWwgbWVtb3J5LiAgKi8KLQlrYWRkcnMgPSBrbWFsbG9jKGFkZHJzX3NpemUsIEdGUF9LRVJORUwpOworCWthZGRycyA9IGttYWxsb2MoYWRkcnNfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pOwogCWlmICh1bmxpa2VseSgha2FkZHJzKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEzMDEsOCArMTMwMSw5IEBACiAJCQkJICAgICAgaW50IGFkZHJzX3NpemUsCiAJCQkJICAgICAgc2N0cF9hc3NvY190ICphc3NvY19pZCkKIHsKLQlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmthZGRyczsKKwlnZnBfdCBnZnAgPSBHRlBfS0VSTkVMOworCWludCBlcnIgPSAwOwogCiAJcHJfZGVidWcoIiVzOiBzazolcCBhZGRyczolcCBhZGRyc19zaXplOiVkXG4iLAogCQkgX19mdW5jX18sIHNrLCBhZGRycywgYWRkcnNfc2l6ZSk7CkBAIC0xMzE1LDcgKzEzMTYsOSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCS8qIEFsbG9jIHNwYWNlIGZvciB0aGUgYWRkcmVzcyBhcnJheSBpbiBrZXJuZWwgbWVtb3J5LiAgKi8KLQlrYWRkcnMgPSBrbWFsbG9jKGFkZHJzX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChzay0+c2tfc29ja2V0LT5maWxlKQorCQlnZnAgPSBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTjsKKwlrYWRkcnMgPSBrbWFsbG9jKGFkZHJzX3NpemUsIGdmcCk7CiAJaWYgKHVubGlrZWx5KCFrYWRkcnMpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTUxMyw4ICsxNTE2LDcgQEAKIAkJCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKIAogCQkJY2h1bmsgPSBzY3RwX21ha2VfYWJvcnRfdXNlcihhc29jLCBOVUxMLCAwKTsKLQkJCWlmIChjaHVuaykKLQkJCQlzY3RwX3ByaW1pdGl2ZV9BQk9SVChuZXQsIGFzb2MsIGNodW5rKTsKKwkJCXNjdHBfcHJpbWl0aXZlX0FCT1JUKG5ldCwgYXNvYywgY2h1bmspOwogCQl9IGVsc2UKIAkJCXNjdHBfcHJpbWl0aXZlX1NIVVRET1dOKG5ldCwgYXNvYywgTlVMTCk7CiAJfQpAQCAtMTk1Miw4ICsxOTU0LDYgQEAKIAogCS8qIE5vdyBzZW5kIHRoZSAocG9zc2libHkpIGZyYWdtZW50ZWQgbWVzc2FnZS4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNodW5rLCAmZGF0YW1zZy0+Y2h1bmtzLCBmcmFnX2xpc3QpIHsKLQkJc2N0cF9jaHVua19ob2xkKGNodW5rKTsKLQogCQkvKiBEbyBhY2NvdW50aW5nIGZvciB0aGUgd3JpdGUgc3BhY2UuICAqLwogCQlzY3RwX3NldF9vd25lcl93KGNodW5rKTsKIApAQCAtMTk2NiwxNSArMTk2NiwxMyBAQAogCSAqIGJyZWFrcy4KIAkgKi8KIAllcnIgPSBzY3RwX3ByaW1pdGl2ZV9TRU5EKG5ldCwgYXNvYywgZGF0YW1zZyk7CisJc2N0cF9kYXRhbXNnX3B1dChkYXRhbXNnKTsKIAkvKiBEaWQgdGhlIGxvd2VyIGxheWVyIGFjY2VwdCB0aGUgY2h1bms/ICovCi0JaWYgKGVycikgewotCQlzY3RwX2RhdGFtc2dfZnJlZShkYXRhbXNnKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwotCX0KIAogCXByX2RlYnVnKCIlczogd2Ugc2VudCBwcmltaXRpdmVseVxuIiwgX19mdW5jX18pOwogCi0Jc2N0cF9kYXRhbXNnX3B1dChkYXRhbXNnKTsKIAllcnIgPSBtc2dfbGVuOwogCiAJaWYgKHVubGlrZWx5KHdhaXRfY29ubmVjdCkpIHsKQEAgLTQ5MjgsNyArNDkyNiw3IEBACiAJdG8gPSBvcHR2YWwgKyBvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRycywgYWRkcnMpOwogCXNwYWNlX2xlZnQgPSBsZW4gLSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRycywgYWRkcnMpOwogCi0JYWRkcnMgPSBrbWFsbG9jKHNwYWNlX2xlZnQsIEdGUF9LRVJORUwpOworCWFkZHJzID0ga21hbGxvYyhzcGFjZV9sZWZ0LCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKCFhZGRycykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTU3NzcsNyArNTc3NSw3IEBACiAKIAlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfaWRzKSArIHNpemVvZihzY3RwX2Fzc29jX3QpICogbnVtOwogCi0JaWRzID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlkcyA9IGttYWxsb2MobGVuLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKHVubGlrZWx5KCFpZHMpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNjQ1OCw3ICs2NDU2LDcgQEAKIAlpZiAoc2N0cF93cml0ZWFibGUoc2spKSB7CiAJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CiAJfSBlbHNlIHsKLQkJc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CisJCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTsKIAkJLyoKIAkJICogU2luY2UgdGhlIHNvY2tldCBpcyBub3QgbG9ja2VkLCB0aGUgYnVmZmVyCiAJCSAqIG1pZ2h0IGJlIG1hZGUgYXZhaWxhYmxlIGFmdGVyIHRoZSB3cml0ZWFibGUgY2hlY2sgYW5kCkBAIC02ODAxLDI2ICs2Nzk5LDMwIEBACiBzdGF0aWMgdm9pZCBfX3NjdHBfd3JpdGVfc3BhY2Uoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gYXNvYy0+YmFzZS5zazsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gc2stPnNrX3NvY2tldDsKIAotCWlmICgoc2N0cF93c3BhY2UoYXNvYykgPiAwKSAmJiBzb2NrKSB7Ci0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZhc29jLT53YWl0KSkKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXNvYy0+d2FpdCk7CisJaWYgKHNjdHBfd3NwYWNlKGFzb2MpIDw9IDApCisJCXJldHVybjsKIAotCQlpZiAoc2N0cF93cml0ZWFibGUoc2spKSB7Ci0JCQl3YWl0X3F1ZXVlX2hlYWRfdCAqd3EgPSBza19zbGVlcChzayk7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmFzb2MtPndhaXQpKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFzb2MtPndhaXQpOwogCi0JCQlpZiAod3EgJiYgd2FpdHF1ZXVlX2FjdGl2ZSh3cSkpCi0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHdxKTsKKwlpZiAoc2N0cF93cml0ZWFibGUoc2spKSB7CisJCXN0cnVjdCBzb2NrZXRfd3EgKndxOworCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJd3EgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX3dxKTsKKwkJaWYgKHdxKSB7CisJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmd3EtPndhaXQpKQorCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmd3EtPndhaXQpOwogCiAJCQkvKiBOb3RlIHRoYXQgd2UgdHJ5IHRvIGluY2x1ZGUgdGhlIEFzeW5jIEkvTyBzdXBwb3J0CiAJCQkgKiBoZXJlIGJ5IG1vZGVsaW5nIGZyb20gdGhlIGN1cnJlbnQgVENQL1VEUCBjb2RlLgogCQkJICogV2UgaGF2ZSBub3QgdGVzdGVkIHdpdGggaXQgeWV0LgogCQkJICovCiAJCQlpZiAoIShzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKLQkJCQlzb2NrX3dha2VfYXN5bmMoc29jaywKLQkJCQkJCVNPQ0tfV0FLRV9TUEFDRSwgUE9MTF9PVVQpOworCQkJCXNvY2tfd2FrZV9hc3luYyh3cSwgU09DS19XQUtFX1NQQUNFLCBQT0xMX09VVCk7CiAJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogfQogCkBAIC03MTYzLDYgKzcxNjUsNyBAQAogCW5ld3NrLT5za190eXBlID0gc2stPnNrX3R5cGU7CiAJbmV3c2stPnNrX2JvdW5kX2Rldl9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAJbmV3c2stPnNrX2ZsYWdzID0gc2stPnNrX2ZsYWdzOworCW5ld3NrLT5za190c2ZsYWdzID0gc2stPnNrX3RzZmxhZ3M7CiAJbmV3c2stPnNrX25vX2NoZWNrX3R4ID0gc2stPnNrX25vX2NoZWNrX3R4OwogCW5ld3NrLT5za19ub19jaGVja19yeCA9IHNrLT5za19ub19jaGVja19yeDsKIAluZXdzay0+c2tfcmV1c2UgPSBzay0+c2tfcmV1c2U7CkBAIC03MTk1LDYgKzcxOTgsMTEgQEAKIAluZXdpbmV0LT5tY190dGwgPSAxOwogCW5ld2luZXQtPm1jX2luZGV4ID0gMDsKIAluZXdpbmV0LT5tY19saXN0ID0gTlVMTDsKKworCWlmIChuZXdzay0+c2tfZmxhZ3MgJiBTS19GTEFHU19USU1FU1RBTVApCisJCW5ldF9lbmFibGVfdGltZXN0YW1wKCk7CisKKwlzZWN1cml0eV9za19jbG9uZShzaywgbmV3c2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF9jb3B5X2Rlc2NlbmRhbnQoc3RydWN0IHNvY2sgKnNrX3RvLApAQCAtNzM3NSw2ICs3MzgzLDEzIEBACiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCisjaW5jbHVkZSA8bmV0L3RyYW5zcF92Ni5oPgorc3RhdGljIHZvaWQgc2N0cF92Nl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKQoreworCXNjdHBfZGVzdHJveV9zb2NrKHNrKTsKKwlpbmV0Nl9kZXN0cm95X3NvY2soc2spOworfQorCiBzdHJ1Y3QgcHJvdG8gc2N0cHY2X3Byb3QgPSB7CiAJLm5hbWUJCT0gIlNDVFB2NiIsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtNzM4NCw3ICs3Mzk5LDcgQEAKIAkuYWNjZXB0CQk9IHNjdHBfYWNjZXB0LAogCS5pb2N0bAkJPSBzY3RwX2lvY3RsLAogCS5pbml0CQk9IHNjdHBfaW5pdF9zb2NrLAotCS5kZXN0cm95CT0gc2N0cF9kZXN0cm95X3NvY2ssCisJLmRlc3Ryb3kJPSBzY3RwX3Y2X2Rlc3Ryb3lfc29jaywKIAkuc2h1dGRvd24JPSBzY3RwX3NodXRkb3duLAogCS5zZXRzb2Nrb3B0CT0gc2N0cF9zZXRzb2Nrb3B0LAogCS5nZXRzb2Nrb3B0CT0gc2N0cF9nZXRzb2Nrb3B0LApkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGRkMmMyNDcuLmQ3MzBlZjkgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTI1Nyw2ICsyNTcsNyBAQAogCX0KIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3cS0+d2FpdCk7CiAJd3EtPmZhc3luY19saXN0ID0gTlVMTDsKKwl3cS0+ZmxhZ3MgPSAwOwogCVJDVV9JTklUX1BPSU5URVIoZWktPnNvY2tldC53cSwgd3EpOwogCiAJZWktPnNvY2tldC5zdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwpAQCAtMTA1NiwyNyArMTA1NywyMCBAQAogCXJldHVybiAwOwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgb25seSB1bmRlciBzb2NrZXQgbG9jayBvciBjYWxsYmFja19sb2NrIG9yIHJjdV9sb2NrICovCisvKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgb25seSB1bmRlciByY3VfbG9jayAqLwogCi1pbnQgc29ja193YWtlX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3csIGludCBiYW5kKQoraW50IHNvY2tfd2FrZV9hc3luYyhzdHJ1Y3Qgc29ja2V0X3dxICp3cSwgaW50IGhvdywgaW50IGJhbmQpCiB7Ci0Jc3RydWN0IHNvY2tldF93cSAqd3E7CisJaWYgKCF3cSB8fCAhd3EtPmZhc3luY19saXN0KQorCQlyZXR1cm4gLTE7CiAKLQlpZiAoIXNvY2spCi0JCXJldHVybiAtMTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jd3EgPSByY3VfZGVyZWZlcmVuY2Uoc29jay0+d3EpOwotCWlmICghd3EgfHwgIXdxLT5mYXN5bmNfbGlzdCkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIC0xOwotCX0KIAlzd2l0Y2ggKGhvdykgewogCWNhc2UgU09DS19XQUtFX1dBSVREOgotCQlpZiAodGVzdF9iaXQoU09DS19BU1lOQ19XQUlUREFUQSwgJnNvY2stPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgJndxLT5mbGFncykpCiAJCQlicmVhazsKIAkJZ290byBjYWxsX2tpbGw7CiAJY2FzZSBTT0NLX1dBS0VfU1BBQ0U6Ci0JCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKSkKKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsICZ3cS0+ZmxhZ3MpKQogCQkJYnJlYWs7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgU09DS19XQUtFX0lPOgpAQCAtMTA4Niw3ICsxMDgwLDcgQEAKIAljYXNlIFNPQ0tfV0FLRV9VUkc6CiAJCWtpbGxfZmFzeW5jKCZ3cS0+ZmFzeW5jX2xpc3QsIFNJR1VSRywgYmFuZCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHNvY2tfd2FrZV9hc3luYyk7CkBAIC0xNzAyLDYgKzE2OTYsNyBAQAogCW1zZy5tc2dfbmFtZSA9IGFkZHIgPyAoc3RydWN0IHNvY2thZGRyICopJmFkZHJlc3MgOiBOVUxMOwogCS8qIFdlIGFzc3VtZSBhbGwga2VybmVsIGNvZGUga25vd3MgdGhlIHNpemUgb2Ygc29ja2FkZHJfc3RvcmFnZSAqLwogCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19pb2NiID0gTlVMTDsKIAlpZiAoc29jay0+ZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCWZsYWdzIHw9IE1TR19ET05UV0FJVDsKIAllcnIgPSBzb2NrX3JlY3Ztc2coc29jaywgJm1zZywgaW92X2l0ZXJfY291bnQoJm1zZy5tc2dfaXRlciksIGZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuYwppbmRleCBmMTRmMjRlLi43M2FkNTdhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NjaGVkLmMKKysrIGIvbmV0L3N1bnJwYy9zY2hlZC5jCkBAIC0yNTAsMTEgKzI1MCwxMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSk7CiAKLXN0YXRpYyBpbnQgcnBjX3dhaXRfYml0X2tpbGxhYmxlKHN0cnVjdCB3YWl0X2JpdF9rZXkgKmtleSkKK3N0YXRpYyBpbnQgcnBjX3dhaXRfYml0X2tpbGxhYmxlKHN0cnVjdCB3YWl0X2JpdF9rZXkgKmtleSwgaW50IG1vZGUpCiB7Ci0JaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCWZyZWV6YWJsZV9zY2hlZHVsZV91bnNhZmUoKTsKKwlpZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUobW9kZSwgY3VycmVudCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IGJjNWI3YjUuLmNjOTg1MjggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjLmMKKysrIGIvbmV0L3N1bnJwYy9zdmMuYwpAQCAtMTM2NCw2ICsxMzY0LDE5IEBACiAJbWVtY3B5KCZycXN0cC0+cnFfYXJnLCAmcmVxLT5ycV9yY3ZfYnVmLCBzaXplb2YocnFzdHAtPnJxX2FyZykpOwogCW1lbWNweSgmcnFzdHAtPnJxX3JlcywgJnJlcS0+cnFfc25kX2J1Ziwgc2l6ZW9mKHJxc3RwLT5ycV9yZXMpKTsKIAorCS8qIEFkanVzdCB0aGUgYXJndW1lbnQgYnVmZmVyIGxlbmd0aCAqLworCXJxc3RwLT5ycV9hcmcubGVuID0gcmVxLT5ycV9wcml2YXRlX2J1Zi5sZW47CisJaWYgKHJxc3RwLT5ycV9hcmcubGVuIDw9IHJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfbGVuKSB7CisJCXJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gcnFzdHAtPnJxX2FyZy5sZW47CisJCXJxc3RwLT5ycV9hcmcucGFnZV9sZW4gPSAwOworCX0gZWxzZSBpZiAocnFzdHAtPnJxX2FyZy5sZW4gPD0gcnFzdHAtPnJxX2FyZy5oZWFkWzBdLmlvdl9sZW4gKworCQkJcnFzdHAtPnJxX2FyZy5wYWdlX2xlbikKKwkJcnFzdHAtPnJxX2FyZy5wYWdlX2xlbiA9IHJxc3RwLT5ycV9hcmcubGVuIC0KKwkJCXJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfbGVuOworCWVsc2UKKwkJcnFzdHAtPnJxX2FyZy5sZW4gPSBycXN0cC0+cnFfYXJnLmhlYWRbMF0uaW92X2xlbiArCisJCQlycXN0cC0+cnFfYXJnLnBhZ2VfbGVuOworCiAJLyogcmVzZXQgcmVzdWx0IHNlbmQgYnVmZmVyICJwdXQiIHBvc2l0aW9uICovCiAJcmVzdi0+aW92X2xlbiA9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHNvY2suYyBiL25ldC9zdW5ycGMveHBydHNvY2suYwppbmRleCAxZDFhNzA0Li4yZmZhZjZhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCkBAIC0zOTgsNyArMzk4LDcgQEAKIAlpZiAodW5saWtlbHkoIXNvY2spKQogCQlyZXR1cm4gLUVOT1RTT0NLOwogCi0JY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKTsKKwljbGVhcl9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncyk7CiAJaWYgKGJhc2UgIT0gMCkgewogCQlhZGRyID0gTlVMTDsKIAkJYWRkcmxlbiA9IDA7CkBAIC00NDIsNyArNDQyLDcgQEAKIAlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQgPSBjb250YWluZXJfb2YodGFzay0+dGtfcnFzdHAtPnJxX3hwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOwogCiAJdHJhbnNwb3J0LT5pbmV0LT5za193cml0ZV9wZW5kaW5nLS07Ci0JY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpOworCWNsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpOwogfQogCiAvKioKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCiAJLyogRG9uJ3QgcmFjZSB3aXRoIGRpc2Nvbm5lY3QgKi8KIAlpZiAoeHBydF9jb25uZWN0ZWQoeHBydCkpIHsKLQkJaWYgKHRlc3RfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpKSB7CiAJCQkvKgogCQkJICogTm90aWZ5IFRDUCB0aGF0IHdlJ3JlIGxpbWl0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uCiAJCQkgKiB3aW5kb3cgc2l6ZQpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCQl4cHJ0X3dhaXRfZm9yX2J1ZmZlcl9zcGFjZSh0YXNrLCB4c19ub3NwYWNlX2NhbGxiYWNrKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZ0cmFuc3BvcnQtPnNvY2stPmZsYWdzKTsKKwkJY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCAmdHJhbnNwb3J0LT5zb2NrLT5mbGFncyk7CiAJCXJldCA9IC1FTk9UQ09OTjsKIAl9CiAKQEAgLTYyNiw3ICs2MjYsNyBAQAogCWNhc2UgLUVQRVJNOgogCQkvKiBXaGVuIHRoZSBzZXJ2ZXIgaGFzIGRpZWQsIGFuIElDTVAgcG9ydCB1bnJlYWNoYWJsZSBtZXNzYWdlCiAJCSAqIHByb21wdHMgRUNPTk5SRUZVU0VELiAqLwotCQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmdHJhbnNwb3J0LT5zb2NrLT5mbGFncyk7CisJCWNsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC03MTUsNyArNzE1LDcgQEAKIAljYXNlIC1FQUREUklOVVNFOgogCWNhc2UgLUVOT0JVRlM6CiAJY2FzZSAtRVBJUEU6Ci0JCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZ0cmFuc3BvcnQtPnNvY2stPmZsYWdzKTsKKwkJY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCAmdHJhbnNwb3J0LT5zb2NrLT5mbGFncyk7CiAJfQogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTE2MTgsNyArMTYxOCw3IEBACiAKIAlpZiAodW5saWtlbHkoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkpCiAJCXJldHVybjsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKSA9PSAwKQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKIAkJcmV0dXJuOwogCiAJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuYwppbmRleCA5ZWZiZGJkLi45MWFlYTA3IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9saW5rLmMKKysrIGIvbmV0L3RpcGMvbGluay5jCkBAIC0xOTEsNiArMTkxLDcgQEAKIAogCXNuZF9sLT5hY2tlcnMrKzsKIAlyY3ZfbC0+YWNrZWQgPSBzbmRfbC0+c25kX254dCAtIDE7CisJc25kX2wtPnN0YXRlID0gTElOS19FU1RBQkxJU0hFRDsKIAl0aXBjX2xpbmtfYnVpbGRfYmNfaW5pdF9tc2codWNfbCwgeG1pdHEpOwogfQogCkBAIC0yMDYsNiArMjA3LDcgQEAKIAlyY3ZfbC0+c3RhdGUgPSBMSU5LX1JFU0VUOwogCWlmICghc25kX2wtPmFja2VycykgewogCQl0aXBjX2xpbmtfcmVzZXQoc25kX2wpOworCQlzbmRfbC0+c3RhdGUgPSBMSU5LX1JFU0VUOwogCQlfX3NrYl9xdWV1ZV9wdXJnZSh4bWl0cSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCA1NTJkYmFiLi5iNTMyNDZmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYworKysgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMTA1LDYgKzEwNSw3IEBACiBzdGF0aWMgaW50IHRpcGNfYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIHRpcGNfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spOwogc3RhdGljIHZvaWQgdGlwY193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spOworc3RhdGljIHZvaWQgdGlwY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzayk7CiBzdGF0aWMgaW50IHRpcGNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKIHN0YXRpYyBpbnQgdGlwY19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3X3NvY2ssIGludCBmbGFncyk7CiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3Jfc25kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvX3ApOwpAQCAtMzgxLDYgKzM4Miw3IEBACiAJc2stPnNrX3JjdmJ1ZiA9IHN5c2N0bF90aXBjX3JtZW1bMV07CiAJc2stPnNrX2RhdGFfcmVhZHkgPSB0aXBjX2RhdGFfcmVhZHk7CiAJc2stPnNrX3dyaXRlX3NwYWNlID0gdGlwY193cml0ZV9zcGFjZTsKKwlzay0+c2tfZGVzdHJ1Y3QgPSB0aXBjX3NvY2tfZGVzdHJ1Y3Q7CiAJdHNrLT5jb25uX3RpbWVvdXQgPSBDT05OX1RJTUVPVVRfREVGQVVMVDsKIAl0c2stPnNlbnRfdW5hY2tlZCA9IDA7CiAJYXRvbWljX3NldCgmdHNrLT5kdXBsX3JjdmNudCwgMCk7CkBAIC00NzAsOSArNDcyLDYgQEAKIAkJdGlwY19ub2RlX3JlbW92ZV9jb25uKG5ldCwgZG5vZGUsIHRzay0+cG9ydGlkKTsKIAl9CiAKLQkvKiBEaXNjYXJkIGFueSByZW1haW5pbmcgKGNvbm5lY3Rpb24tYmFzZWQpIG1lc3NhZ2VzIGluIHJlY2VpdmUgcXVldWUgKi8KLQlfX3NrYl9xdWV1ZV9wdXJnZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpOwotCiAJLyogUmVqZWN0IGFueSBtZXNzYWdlcyB0aGF0IGFjY3VtdWxhdGVkIGluIGJhY2tsb2cgcXVldWUgKi8KIAlzb2NrLT5zdGF0ZSA9IFNTX0RJU0NPTk5FQ1RJTkc7CiAJcmVsZWFzZV9zb2NrKHNrKTsKQEAgLTE1MTUsNiArMTUxNCwxMSBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCitzdGF0aWMgdm9pZCB0aXBjX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQoreworCV9fc2tiX3F1ZXVlX3B1cmdlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Cit9CisKIC8qKgogICogZmlsdGVyX2Nvbm5lY3QgLSBIYW5kbGUgYWxsIGluY29taW5nIG1lc3NhZ2VzIGZvciBhIGNvbm5lY3Rpb24tYmFzZWQgc29ja2V0CiAgKiBAdHNrOiBUSVBDIHNvY2tldApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvdWRwX21lZGlhLmMgYi9uZXQvdGlwYy91ZHBfbWVkaWEuYwppbmRleCBhZDI3MTlhLi43MGMwMzI3IDEwMDY0NAotLS0gYS9uZXQvdGlwYy91ZHBfbWVkaWEuYworKysgYi9uZXQvdGlwYy91ZHBfbWVkaWEuYwpAQCAtMTU4LDggKzE1OCwxMSBAQAogCXN0cnVjdCB1ZHBfbWVkaWFfYWRkciAqc3JjID0gKHN0cnVjdCB1ZHBfbWVkaWFfYWRkciAqKSZiLT5hZGRyLnZhbHVlOwogCXN0cnVjdCBydGFibGUgKnJ0OwogCi0JaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgVURQX01JTl9IRUFEUk9PTSkKLQkJcHNrYl9leHBhbmRfaGVhZChza2IsIFVEUF9NSU5fSEVBRFJPT00sIDAsIEdGUF9BVE9NSUMpOworCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IFVEUF9NSU5fSEVBRFJPT00pIHsKKwkJZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIFVEUF9NSU5fSEVBRFJPT00sIDAsIEdGUF9BVE9NSUMpOworCQlpZiAoZXJyKQorCQkJZ290byB0eF9lcnJvcjsKKwl9CiAKIAlza2Jfc2V0X2lubmVyX3Byb3RvY29sKHNrYiwgaHRvbnMoRVRIX1BfVElQQykpOwogCXViID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwoYi0+bWVkaWFfcHRyKTsKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBhYWEwYjU4Li5hNDYzMTQ3NyAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMzI2LDYgKzMyNiwxMTggQEAKIAlyZXR1cm4gczsKIH0KIAorLyogU3VwcG9ydCBjb2RlIGZvciBhc3ltbWV0cmljYWxseSBjb25uZWN0ZWQgZGdyYW0gc29ja2V0cworICoKKyAqIElmIGEgZGF0YWdyYW0gc29ja2V0IGlzIGNvbm5lY3RlZCB0byBhIHNvY2tldCBub3QgaXRzZWxmIGNvbm5lY3RlZAorICogdG8gdGhlIGZpcnN0IHNvY2tldCAoZWcsIC9kZXYvbG9nKSwgY2xpZW50cyBtYXkgb25seSBlbnF1ZXVlIG1vcmUKKyAqIG1lc3NhZ2VzIGlmIHRoZSBwcmVzZW50IHJlY2VpdmUgcXVldWUgb2YgdGhlIHNlcnZlciBzb2NrZXQgaXMgbm90CisgKiAidG9vIGxhcmdlIi4gVGhpcyBtZWFucyB0aGVyZSdzIGEgc2Vjb25kIHdyaXRlYWJpbGl0eSBjb25kaXRpb24KKyAqIHBvbGwgYW5kIHNlbmRtc2cgbmVlZCB0byB0ZXN0LiBUaGUgZGdyYW0gcmVjdiBjb2RlIHdpbGwgZG8gYSB3YWtlCisgKiB1cCBvbiB0aGUgcGVlcl93YWl0IHdhaXQgcXVldWUgb2YgYSBzb2NrZXQgdXBvbiByZWNlcHRpb24gb2YgYQorICogZGF0YWdyYW0gd2hpY2ggbmVlZHMgdG8gYmUgcHJvcGFnYXRlZCB0byBzbGVlcGluZyB3b3VsZC1iZSB3cml0ZXJzCisgKiBzaW5jZSB0aGVzZSBtaWdodCBub3QgaGF2ZSBzZW50IGFueXRoaW5nIHNvIGZhci4gVGhpcyBjYW4ndCBiZQorICogYWNjb21wbGlzaGVkIHZpYSBwb2xsX3dhaXQgYmVjYXVzZSB0aGUgbGlmZXRpbWUgb2YgdGhlIHNlcnZlcgorICogc29ja2V0IG1pZ2h0IGJlIGxlc3MgdGhhbiB0aGF0IG9mIGl0cyBjbGllbnRzIGlmIHRoZXNlIGJyZWFrIHRoZWlyCisgKiBhc3NvY2lhdGlvbiB3aXRoIGl0IG9yIGlmIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIGNsb3NlZCB3aGlsZSBjbGllbnRzCisgKiBhcmUgc3RpbGwgY29ubmVjdGVkIHRvIGl0IGFuZCB0aGVyZSdzIG5vIHdheSB0byBpbmZvcm0gImEgcG9sbGluZworICogaW1wbGVtZW50YXRpb24iIHRoYXQgaXQgc2hvdWxkIGxldCBnbyBvZiBhIGNlcnRhaW4gd2FpdCBxdWV1ZQorICoKKyAqIEluIG9yZGVyIHRvIHByb3BhZ2F0ZSBhIHdha2UgdXAsIGEgd2FpdF9xdWV1ZV90IG9mIHRoZSBjbGllbnQKKyAqIHNvY2tldCBpcyBlbnF1ZXVlZCBvbiB0aGUgcGVlcl93YWl0IHF1ZXVlIG9mIHRoZSBzZXJ2ZXIgc29ja2V0CisgKiB3aG9zZSB3YWtlIGZ1bmN0aW9uIGRvZXMgYSB3YWtlX3VwIG9uIHRoZSBvcmRpbmFyeSBjbGllbnQgc29ja2V0CisgKiB3YWl0IHF1ZXVlLiBUaGlzIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgd2hlbmV2ZXIgYSB3cml0ZSAob3IKKyAqIHBvbGwgZm9yIHdyaXRlKSBoaXQgdGhlIGZsb3cgY29udHJvbCBjb25kaXRpb24gYW5kIGJyb2tlbiB3aGVuIHRoZQorICogYXNzb2NpYXRpb24gdG8gdGhlIHNlcnZlciBzb2NrZXQgaXMgZGlzc29sdmVkIG9yIGFmdGVyIGEgd2FrZSB1cAorICogd2FzIHJlbGF5ZWQuCisgKi8KKworc3RhdGljIGludCB1bml4X2RncmFtX3BlZXJfd2FrZV9yZWxheSh3YWl0X3F1ZXVlX3QgKnEsIHVuc2lnbmVkIG1vZGUsIGludCBmbGFncywKKwkJCQkgICAgICB2b2lkICprZXkpCit7CisJc3RydWN0IHVuaXhfc29jayAqdTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqdV9zbGVlcDsKKworCXUgPSBjb250YWluZXJfb2YocSwgc3RydWN0IHVuaXhfc29jaywgcGVlcl93YWtlKTsKKworCV9fcmVtb3ZlX3dhaXRfcXVldWUoJnVuaXhfc2sodS0+cGVlcl93YWtlLnByaXZhdGUpLT5wZWVyX3dhaXQsCisJCQkgICAgcSk7CisJdS0+cGVlcl93YWtlLnByaXZhdGUgPSBOVUxMOworCisJLyogcmVsYXlpbmcgY2FuIG9ubHkgaGFwcGVuIHdoaWxlIHRoZSB3cSBzdGlsbCBleGlzdHMgKi8KKwl1X3NsZWVwID0gc2tfc2xlZXAoJnUtPnNrKTsKKwlpZiAodV9zbGVlcCkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwodV9zbGVlcCwga2V5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVuaXhfZGdyYW1fcGVlcl93YWtlX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqb3RoZXIpCit7CisJc3RydWN0IHVuaXhfc29jayAqdSwgKnVfb3RoZXI7CisJaW50IHJjOworCisJdSA9IHVuaXhfc2soc2spOworCXVfb3RoZXIgPSB1bml4X3NrKG90aGVyKTsKKwlyYyA9IDA7CisJc3Bpbl9sb2NrKCZ1X290aGVyLT5wZWVyX3dhaXQubG9jayk7CisKKwlpZiAoIXUtPnBlZXJfd2FrZS5wcml2YXRlKSB7CisJCXUtPnBlZXJfd2FrZS5wcml2YXRlID0gb3RoZXI7CisJCV9fYWRkX3dhaXRfcXVldWUoJnVfb3RoZXItPnBlZXJfd2FpdCwgJnUtPnBlZXJfd2FrZSk7CisKKwkJcmMgPSAxOworCX0KKworCXNwaW5fdW5sb2NrKCZ1X290aGVyLT5wZWVyX3dhaXQubG9jayk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCB1bml4X2RncmFtX3BlZXJfd2FrZV9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBzb2NrICpvdGhlcikKK3sKKwlzdHJ1Y3QgdW5peF9zb2NrICp1LCAqdV9vdGhlcjsKKworCXUgPSB1bml4X3NrKHNrKTsKKwl1X290aGVyID0gdW5peF9zayhvdGhlcik7CisJc3Bpbl9sb2NrKCZ1X290aGVyLT5wZWVyX3dhaXQubG9jayk7CisKKwlpZiAodS0+cGVlcl93YWtlLnByaXZhdGUgPT0gb3RoZXIpIHsKKwkJX19yZW1vdmVfd2FpdF9xdWV1ZSgmdV9vdGhlci0+cGVlcl93YWl0LCAmdS0+cGVlcl93YWtlKTsKKwkJdS0+cGVlcl93YWtlLnByaXZhdGUgPSBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrKCZ1X290aGVyLT5wZWVyX3dhaXQubG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHVuaXhfZGdyYW1fcGVlcl93YWtlX2Rpc2Nvbm5lY3Rfd2FrZXVwKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgIHN0cnVjdCBzb2NrICpvdGhlcikKK3sKKwl1bml4X2RncmFtX3BlZXJfd2FrZV9kaXNjb25uZWN0KHNrLCBvdGhlcik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoc2tfc2xlZXAoc2spLAorCQkJCSAgIFBPTExPVVQgfAorCQkJCSAgIFBPTExXUk5PUk0gfAorCQkJCSAgIFBPTExXUkJBTkQpOworfQorCisvKiBwcmVjb25kaXRpb25zOgorICoJLSB1bml4X3BlZXIoc2spID09IG90aGVyCisgKgktIGFzc29jaWF0aW9uIGlzIHN0YWJsZQorICovCitzdGF0aWMgaW50IHVuaXhfZGdyYW1fcGVlcl93YWtlX21lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm90aGVyKQoreworCWludCBjb25uZWN0ZWQ7CisKKwljb25uZWN0ZWQgPSB1bml4X2RncmFtX3BlZXJfd2FrZV9jb25uZWN0KHNrLCBvdGhlcik7CisKKwlpZiAodW5peF9yZWN2cV9mdWxsKG90aGVyKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoY29ubmVjdGVkKQorCQl1bml4X2RncmFtX3BlZXJfd2FrZV9kaXNjb25uZWN0KHNrLCBvdGhlcik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB1bml4X3dyaXRhYmxlKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAlyZXR1cm4gc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKQEAgLTQzMSw2ICs1NDMsOCBAQAogCQkJc2twYWlyLT5za19zdGF0ZV9jaGFuZ2Uoc2twYWlyKTsKIAkJCXNrX3dha2VfYXN5bmMoc2twYWlyLCBTT0NLX1dBS0VfV0FJVEQsIFBPTExfSFVQKTsKIAkJfQorCisJCXVuaXhfZGdyYW1fcGVlcl93YWtlX2Rpc2Nvbm5lY3Qoc2ssIHNrcGFpcik7CiAJCXNvY2tfcHV0KHNrcGFpcik7IC8qIEl0IG1heSBub3cgZGllICovCiAJCXVuaXhfcGVlcihzaykgPSBOVUxMOwogCX0KQEAgLTQ0MSw2ICs1NTUsNyBAQAogCQlpZiAoc3RhdGUgPT0gVENQX0xJU1RFTikKIAkJCXVuaXhfcmVsZWFzZV9zb2NrKHNrYi0+c2ssIDEpOwogCQkvKiBwYXNzZWQgZmRzIGFyZSBlcmFzZWQgaW4gdGhlIGtmcmVlX3NrYiBob29rCSAgICAgICovCisJCVVOSVhDQihza2IpLmNvbnN1bWVkID0gc2tiLT5sZW47CiAJCWtmcmVlX3NrYihza2IpOwogCX0KIApAQCAtNjY1LDYgKzc4MCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnUtPmxpbmspOwogCW11dGV4X2luaXQoJnUtPnJlYWRsb2NrKTsgLyogc2luZ2xlIHRhc2sgcmVhZGluZyBsb2NrICovCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdS0+cGVlcl93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZ1LT5wZWVyX3dha2UsIHVuaXhfZGdyYW1fcGVlcl93YWtlX3JlbGF5KTsKIAl1bml4X2luc2VydF9zb2NrZXQodW5peF9zb2NrZXRzX3VuYm91bmQoc2spLCBzayk7CiBvdXQ6CiAJaWYgKHNrID09IE5VTEwpCkBAIC0xMDMyLDYgKzExNDgsOCBAQAogCWlmICh1bml4X3BlZXIoc2spKSB7CiAJCXN0cnVjdCBzb2NrICpvbGRfcGVlciA9IHVuaXhfcGVlcihzayk7CiAJCXVuaXhfcGVlcihzaykgPSBvdGhlcjsKKwkJdW5peF9kZ3JhbV9wZWVyX3dha2VfZGlzY29ubmVjdF93YWtldXAoc2ssIG9sZF9wZWVyKTsKKwogCQl1bml4X3N0YXRlX2RvdWJsZV91bmxvY2soc2ssIG90aGVyKTsKIAogCQlpZiAob3RoZXIgIT0gb2xkX3BlZXIpCkBAIC0xNDMzLDYgKzE1NTEsMTQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgYm9vbCB1bml4X3Bhc3NjcmVkX2VuYWJsZWQoY29uc3Qgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCQkgIGNvbnN0IHN0cnVjdCBzb2NrICpvdGhlcikKK3sKKwlyZXR1cm4gdGVzdF9iaXQoU09DS19QQVNTQ1JFRCwgJnNvY2stPmZsYWdzKSB8fAorCSAgICAgICAhb3RoZXItPnNrX3NvY2tldCB8fAorCSAgICAgICB0ZXN0X2JpdChTT0NLX1BBU1NDUkVELCAmb3RoZXItPnNrX3NvY2tldC0+ZmxhZ3MpOworfQorCiAvKgogICogU29tZSBhcHBzIHJlbHkgb24gd3JpdGUoKSBnaXZpbmcgU0NNX0NSRURFTlRJQUxTCiAgKiBXZSBpbmNsdWRlIGNyZWRlbnRpYWxzIGlmIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBzb2NrZXQKQEAgLTE0NDMsMTQgKzE1NjksNDEgQEAKIHsKIAlpZiAoVU5JWENCKHNrYikucGlkKQogCQlyZXR1cm47Ci0JaWYgKHRlc3RfYml0KFNPQ0tfUEFTU0NSRUQsICZzb2NrLT5mbGFncykgfHwKLQkgICAgIW90aGVyLT5za19zb2NrZXQgfHwKLQkgICAgdGVzdF9iaXQoU09DS19QQVNTQ1JFRCwgJm90aGVyLT5za19zb2NrZXQtPmZsYWdzKSkgeworCWlmICh1bml4X3Bhc3NjcmVkX2VuYWJsZWQoc29jaywgb3RoZXIpKSB7CiAJCVVOSVhDQihza2IpLnBpZCAgPSBnZXRfcGlkKHRhc2tfdGdpZChjdXJyZW50KSk7CiAJCWN1cnJlbnRfdWlkX2dpZCgmVU5JWENCKHNrYikudWlkLCAmVU5JWENCKHNrYikuZ2lkKTsKIAl9CiB9CiAKK3N0YXRpYyBpbnQgbWF5YmVfaW5pdF9jcmVkcyhzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLAorCQkJICAgIHN0cnVjdCBzb2NrZXQgKnNvY2tldCwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc29jayAqb3RoZXIpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgLm1zZ19jb250cm9sbGVuID0gMCB9OworCisJZXJyID0gc2NtX3NlbmQoc29ja2V0LCAmbXNnLCBzY20sIGZhbHNlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHVuaXhfcGFzc2NyZWRfZW5hYmxlZChzb2NrZXQsIG90aGVyKSkgeworCQlzY20tPnBpZCA9IGdldF9waWQodGFza190Z2lkKGN1cnJlbnQpKTsKKwkJY3VycmVudF91aWRfZ2lkKCZzY20tPmNyZWRzLnVpZCwgJnNjbS0+Y3JlZHMuZ2lkKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGJvb2wgdW5peF9za2Jfc2NtX2VxKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKK3sKKwljb25zdCBzdHJ1Y3QgdW5peF9za2JfcGFybXMgKnUgPSAmVU5JWENCKHNrYik7CisKKwlyZXR1cm4gdS0+cGlkID09IHNjbS0+cGlkICYmCisJICAgICAgIHVpZF9lcSh1LT51aWQsIHNjbS0+Y3JlZHMudWlkKSAmJgorCSAgICAgICBnaWRfZXEodS0+Z2lkLCBzY20tPmNyZWRzLmdpZCkgJiYKKwkgICAgICAgdW5peF9zZWNkYXRhX2VxKHNjbSwgc2tiKTsKK30KKwogLyoKICAqCVNlbmQgQUZfVU5JWCBkYXRhLgogICovCkBAIC0xNDcxLDYgKzE2MjQsNyBAQAogCXN0cnVjdCBzY21fY29va2llIHNjbTsKIAlpbnQgbWF4X2xldmVsOwogCWludCBkYXRhX2xlbiA9IDA7CisJaW50IHNrX2xvY2tlZDsKIAogCXdhaXRfZm9yX3VuaXhfZ2MoKTsKIAllcnIgPSBzY21fc2VuZChzb2NrLCBtc2csICZzY20sIGZhbHNlKTsKQEAgLTE1NDksMTIgKzE3MDMsMTQgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKKwlza19sb2NrZWQgPSAwOwogCXVuaXhfc3RhdGVfbG9jayhvdGhlcik7CityZXN0YXJ0X2xvY2tlZDoKIAllcnIgPSAtRVBFUk07CiAJaWYgKCF1bml4X21heV9zZW5kKHNrLCBvdGhlcikpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWlmIChzb2NrX2ZsYWcob3RoZXIsIFNPQ0tfREVBRCkpIHsKKwlpZiAodW5saWtlbHkoc29ja19mbGFnKG90aGVyLCBTT0NLX0RFQUQpKSkgewogCQkvKgogCQkgKglDaGVjayB3aXRoIDEwMDMuMWcgLSB3aGF0IHNob3VsZAogCQkgKglkYXRhZ3JhbSBlcnJvcgpAQCAtMTU2MiwxMCArMTcxOCwxNCBAQAogCQl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAJCXNvY2tfcHV0KG90aGVyKTsKIAorCQlpZiAoIXNrX2xvY2tlZCkKKwkJCXVuaXhfc3RhdGVfbG9jayhzayk7CisKIAkJZXJyID0gMDsKLQkJdW5peF9zdGF0ZV9sb2NrKHNrKTsKIAkJaWYgKHVuaXhfcGVlcihzaykgPT0gb3RoZXIpIHsKIAkJCXVuaXhfcGVlcihzaykgPSBOVUxMOworCQkJdW5peF9kZ3JhbV9wZWVyX3dha2VfZGlzY29ubmVjdF93YWtldXAoc2ssIG90aGVyKTsKKwogCQkJdW5peF9zdGF0ZV91bmxvY2soc2spOwogCiAJCQl1bml4X2RncmFtX2Rpc2Nvbm5lY3RlZChzaywgb3RoZXIpOwpAQCAtMTU5MSwyMSArMTc1MSwzOCBAQAogCQkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlmICh1bml4X3BlZXIob3RoZXIpICE9IHNrICYmIHVuaXhfcmVjdnFfZnVsbChvdGhlcikpIHsKLQkJaWYgKCF0aW1lbykgeworCWlmICh1bmxpa2VseSh1bml4X3BlZXIob3RoZXIpICE9IHNrICYmIHVuaXhfcmVjdnFfZnVsbChvdGhlcikpKSB7CisJCWlmICh0aW1lbykgeworCQkJdGltZW8gPSB1bml4X3dhaXRfZm9yX3BlZXIob3RoZXIsIHRpbWVvKTsKKworCQkJZXJyID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlnb3RvIG91dF9mcmVlOworCisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKworCQlpZiAoIXNrX2xvY2tlZCkgeworCQkJdW5peF9zdGF0ZV91bmxvY2sob3RoZXIpOworCQkJdW5peF9zdGF0ZV9kb3VibGVfbG9jayhzaywgb3RoZXIpOworCQl9CisKKwkJaWYgKHVuaXhfcGVlcihzaykgIT0gb3RoZXIgfHwKKwkJICAgIHVuaXhfZGdyYW1fcGVlcl93YWtlX21lKHNrLCBvdGhlcikpIHsKIAkJCWVyciA9IC1FQUdBSU47CisJCQlza19sb2NrZWQgPSAxOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKLQkJdGltZW8gPSB1bml4X3dhaXRfZm9yX3BlZXIob3RoZXIsIHRpbWVvKTsKLQotCQllcnIgPSBzb2NrX2ludHJfZXJybm8odGltZW8pOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlnb3RvIG91dF9mcmVlOwotCi0JCWdvdG8gcmVzdGFydDsKKwkJaWYgKCFza19sb2NrZWQpIHsKKwkJCXNrX2xvY2tlZCA9IDE7CisJCQlnb3RvIHJlc3RhcnRfbG9ja2VkOworCQl9CiAJfQogCisJaWYgKHVubGlrZWx5KHNrX2xvY2tlZCkpCisJCXVuaXhfc3RhdGVfdW5sb2NrKHNrKTsKKwogCWlmIChzb2NrX2ZsYWcob3RoZXIsIFNPQ0tfUkNWVFNUQU1QKSkKIAkJX19uZXRfdGltZXN0YW1wKHNrYik7CiAJbWF5YmVfYWRkX2NyZWRzKHNrYiwgc29jaywgb3RoZXIpOwpAQCAtMTYxOSw2ICsxNzk2LDggQEAKIAlyZXR1cm4gbGVuOwogCiBvdXRfdW5sb2NrOgorCWlmIChza19sb2NrZWQpCisJCXVuaXhfc3RhdGVfdW5sb2NrKHNrKTsKIAl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiBvdXRfZnJlZToKIAlrZnJlZV9za2Ioc2tiKTsKQEAgLTE3NDAsOCArMTkxOSwxMCBAQAogc3RhdGljIHNzaXplX3QgdW5peF9zdHJlYW1fc2VuZHBhZ2Uoc3RydWN0IHNvY2tldCAqc29ja2V0LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgICAgaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKLQlpbnQgZXJyID0gMDsKLQlib29sIHNlbmRfc2lncGlwZSA9IHRydWU7CisJaW50IGVycjsKKwlib29sIHNlbmRfc2lncGlwZSA9IGZhbHNlOworCWJvb2wgaW5pdF9zY20gPSB0cnVlOworCXN0cnVjdCBzY21fY29va2llIHNjbTsKIAlzdHJ1Y3Qgc29jayAqb3RoZXIsICpzayA9IHNvY2tldC0+c2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5ld3NrYiA9IE5VTEwsICp0YWlsID0gTlVMTDsKIApAQCAtMTc1OSw3ICsxOTQwLDcgQEAKIAkJbmV3c2tiID0gc29ja19hbGxvY19zZW5kX3Bza2Ioc2ssIDAsIDAsIGZsYWdzICYgTVNHX0RPTlRXQUlULAogCQkJCQkgICAgICAmZXJyLCAwKTsKIAkJaWYgKCFuZXdza2IpCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byBlcnI7CiAJfQogCiAJLyogd2UgbXVzdCBhY3F1aXJlIHJlYWRsb2NrIGFzIHdlIG1vZGlmeSBhbHJlYWR5IHByZXNlbnQKQEAgLTE3NjgsMTIgKzE5NDksMTIgQEAKIAllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnVuaXhfc2sob3RoZXIpLT5yZWFkbG9jayk7CiAJaWYgKGVycikgewogCQllcnIgPSBmbGFncyAmIE1TR19ET05UV0FJVCA/IC1FQUdBSU4gOiAtRVJFU1RBUlRTWVM7Ci0JCXNlbmRfc2lncGlwZSA9IGZhbHNlOwogCQlnb3RvIGVycjsKIAl9CiAKIAlpZiAoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikgewogCQllcnIgPSAtRVBJUEU7CisJCXNlbmRfc2lncGlwZSA9IHRydWU7CiAJCWdvdG8gZXJyX3VubG9jazsKIAl9CiAKQEAgLTE3ODIsMjMgKzE5NjMsMzQgQEAKIAlpZiAoc29ja19mbGFnKG90aGVyLCBTT0NLX0RFQUQpIHx8CiAJICAgIG90aGVyLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikgewogCQllcnIgPSAtRVBJUEU7CisJCXNlbmRfc2lncGlwZSA9IHRydWU7CiAJCWdvdG8gZXJyX3N0YXRlX3VubG9jazsKIAl9CiAKKwlpZiAoaW5pdF9zY20pIHsKKwkJZXJyID0gbWF5YmVfaW5pdF9jcmVkcygmc2NtLCBzb2NrZXQsIG90aGVyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX3N0YXRlX3VubG9jazsKKwkJaW5pdF9zY20gPSBmYWxzZTsKKwl9CisKIAlza2IgPSBza2JfcGVla190YWlsKCZvdGhlci0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJaWYgKHRhaWwgJiYgdGFpbCA9PSBza2IpIHsKIAkJc2tiID0gbmV3c2tiOwotCX0gZWxzZSBpZiAoIXNrYikgewotCQlpZiAobmV3c2tiKQorCX0gZWxzZSBpZiAoIXNrYiB8fCAhdW5peF9za2Jfc2NtX2VxKHNrYiwgJnNjbSkpIHsKKwkJaWYgKG5ld3NrYikgewogCQkJc2tiID0gbmV3c2tiOwotCQllbHNlCisJCX0gZWxzZSB7CisJCQl0YWlsID0gc2tiOwogCQkJZ290byBhbGxvY19za2I7CisJCX0KIAl9IGVsc2UgaWYgKG5ld3NrYikgewogCQkvKiB0aGlzIGlzIGZhc3QgcGF0aCwgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgbmVlZCB0bwogCQkgKiBjYWxsIHRvIGtmcmVlX3NrYiBldmVuIHRob3VnaCB3aXRoIG5ld3NrYiA9PSBOVUxMCiAJCSAqIHRoaXMgLSBkb2VzIG5vIGhhcm0KIAkJICovCiAJCWNvbnN1bWVfc2tiKG5ld3NrYik7CisJCW5ld3NrYiA9IE5VTEw7CiAJfQogCiAJaWYgKHNrYl9hcHBlbmRfcGFnZWZyYWdzKHNrYiwgcGFnZSwgb2Zmc2V0LCBzaXplKSkgewpAQCAtMTgxMSwxNCArMjAwMywyMCBAQAogCXNrYi0+dHJ1ZXNpemUgKz0gc2l6ZTsKIAlhdG9taWNfYWRkKHNpemUsICZzay0+c2tfd21lbV9hbGxvYyk7CiAKLQlpZiAobmV3c2tiKQorCWlmIChuZXdza2IpIHsKKwkJZXJyID0gdW5peF9zY21fdG9fc2tiKCZzY20sIHNrYiwgZmFsc2UpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfc3RhdGVfdW5sb2NrOworCQlzcGluX2xvY2soJm90aGVyLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOwogCQlfX3NrYl9xdWV1ZV90YWlsKCZvdGhlci0+c2tfcmVjZWl2ZV9xdWV1ZSwgbmV3c2tiKTsKKwkJc3Bpbl91bmxvY2soJm90aGVyLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOworCX0KIAogCXVuaXhfc3RhdGVfdW5sb2NrKG90aGVyKTsKIAltdXRleF91bmxvY2soJnVuaXhfc2sob3RoZXIpLT5yZWFkbG9jayk7CiAKIAlvdGhlci0+c2tfZGF0YV9yZWFkeShvdGhlcik7Ci0KKwlzY21fZGVzdHJveSgmc2NtKTsKIAlyZXR1cm4gc2l6ZTsKIAogZXJyX3N0YXRlX3VubG9jazoKQEAgLTE4MjksNiArMjAyNyw4IEBACiAJa2ZyZWVfc2tiKG5ld3NrYik7CiAJaWYgKHNlbmRfc2lncGlwZSAmJiAhKGZsYWdzICYgTVNHX05PU0lHTkFMKSkKIAkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CisJaWYgKCFpbml0X3NjbSkKKwkJc2NtX2Rlc3Ryb3koJnNjbSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTk5MSw3ICsyMTkxLDcgQEAKIAkJICAgICF0aW1lbykKIAkJCWJyZWFrOwogCi0JCXNldF9iaXQoU09DS19BU1lOQ19XQUlUREFUQSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTsKIAkJdW5peF9zdGF0ZV91bmxvY2soc2spOwogCQl0aW1lbyA9IGZyZWV6YWJsZV9zY2hlZHVsZV90aW1lb3V0KHRpbWVvKTsKIAkJdW5peF9zdGF0ZV9sb2NrKHNrKTsKQEAgLTE5OTksNyArMjE5OSw3IEBACiAJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpCiAJCQlicmVhazsKIAotCQljbGVhcl9iaXQoU09DS19BU1lOQ19XQUlUREFUQSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spOwogCX0KIAogCWZpbmlzaF93YWl0KHNrX3NsZWVwKHNrKSwgJndhaXQpOwpAQCAtMjA1NiwxNCArMjI1Niw3IEBACiAJLyogTG9jayB0aGUgc29ja2V0IHRvIHByZXZlbnQgcXVldWUgZGlzb3JkZXJpbmcKIAkgKiB3aGlsZSBzbGVlcHMgaW4gbWVtY3B5X3RvbXNnCiAJICovCi0JZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ1LT5yZWFkbG9jayk7Ci0JaWYgKHVubGlrZWx5KGVycikpIHsKLQkJLyogcmVjdm1zZygpIGluIG5vbiBibG9ja2luZyBtb2RlIGlzIHN1cHBvc2VkIHRvIHJldHVybiAtRUFHQUlOCi0JCSAqIHNrX3JjdnRpbWVvIGlzIG5vdCBob25vcmVkIGJ5IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgpCi0JCSAqLwotCQllcnIgPSBub2Jsb2NrID8gLUVBR0FJTiA6IC1FUkVTVEFSVFNZUzsKLQkJZ290byBvdXQ7Ci0JfQorCW11dGV4X2xvY2soJnUtPnJlYWRsb2NrKTsKIAogCWlmIChmbGFncyAmIE1TR19QRUVLKQogCQlza2lwID0gc2tfcGVla19vZmZzZXQoc2ssIGZsYWdzKTsKQEAgLTIwNzIsNiArMjI2NSw3IEBACiAKIAlkbyB7CiAJCWludCBjaHVuazsKKwkJYm9vbCBkcm9wX3NrYjsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKmxhc3Q7CiAKIAkJdW5peF9zdGF0ZV9sb2NrKHNrKTsKQEAgLTIxMDYsMTIgKzIzMDAsMTIgQEAKIAkJCXRpbWVvID0gdW5peF9zdHJlYW1fZGF0YV93YWl0KHNrLCB0aW1lbywgbGFzdCwKIAkJCQkJCSAgICAgIGxhc3RfbGVuKTsKIAotCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8Ci0JCQkgICAgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ1LT5yZWFkbG9jaykpIHsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJCWVyciA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKKwkJCW11dGV4X2xvY2soJnUtPnJlYWRsb2NrKTsKIAkJCWNvbnRpbnVlOwogdW5sb2NrOgogCQkJdW5peF9zdGF0ZV91bmxvY2soc2spOwpAQCAtMjEzMSwxMCArMjMyNSw3IEBACiAKIAkJaWYgKGNoZWNrX2NyZWRzKSB7CiAJCQkvKiBOZXZlciBnbHVlIG1lc3NhZ2VzIGZyb20gZGlmZmVyZW50IHdyaXRlcnMgKi8KLQkJCWlmICgoVU5JWENCKHNrYikucGlkICAhPSBzY20ucGlkKSB8fAotCQkJICAgICF1aWRfZXEoVU5JWENCKHNrYikudWlkLCBzY20uY3JlZHMudWlkKSB8fAotCQkJICAgICFnaWRfZXEoVU5JWENCKHNrYikuZ2lkLCBzY20uY3JlZHMuZ2lkKSB8fAotCQkJICAgICF1bml4X3NlY2RhdGFfZXEoJnNjbSwgc2tiKSkKKwkJCWlmICghdW5peF9za2Jfc2NtX2VxKHNrYiwgJnNjbSkpCiAJCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAodGVzdF9iaXQoU09DS19QQVNTQ1JFRCwgJnNvY2stPmZsYWdzKSkgewogCQkJLyogQ29weSBjcmVkZW50aWFscyAqLwpAQCAtMjE1Miw3ICsyMzQzLDExIEBACiAJCX0KIAogCQljaHVuayA9IG1pbl90KHVuc2lnbmVkIGludCwgdW5peF9za2JfbGVuKHNrYikgLSBza2lwLCBzaXplKTsKKwkJc2tiX2dldChza2IpOwogCQljaHVuayA9IHN0YXRlLT5yZWN2X2FjdG9yKHNrYiwgc2tpcCwgY2h1bmssIHN0YXRlKTsKKwkJZHJvcF9za2IgPSAhdW5peF9za2JfbGVuKHNrYik7CisJCS8qIHNrYiBpcyBvbmx5IHNhZmUgdG8gdXNlIGlmICFkcm9wX3NrYiAqLworCQljb25zdW1lX3NrYihza2IpOwogCQlpZiAoY2h1bmsgPCAwKSB7CiAJCQlpZiAoY29waWVkID09IDApCiAJCQkJY29waWVkID0gLUVGQVVMVDsKQEAgLTIxNjEsNiArMjM1NiwxOCBAQAogCQljb3BpZWQgKz0gY2h1bms7CiAJCXNpemUgLT0gY2h1bms7CiAKKwkJaWYgKGRyb3Bfc2tiKSB7CisJCQkvKiB0aGUgc2tiIHdhcyB0b3VjaGVkIGJ5IGEgY29uY3VycmVudCByZWFkZXI7CisJCQkgKiB3ZSBzaG91bGQgbm90IGV4cGVjdCBhbnl0aGluZyBmcm9tIHRoaXMgc2tiCisJCQkgKiBhbnltb3JlIGFuZCBhc3N1bWUgaXQgaW52YWxpZCAtIHdlIGNhbiBiZQorCQkJICogc3VyZSBpdCB3YXMgZHJvcHBlZCBmcm9tIHRoZSBzb2NrZXQgcXVldWUKKwkJCSAqCisJCQkgKiBsZXQncyByZXBvcnQgYSBzaG9ydCByZWFkCisJCQkgKi8KKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQorCiAJCS8qIE1hcmsgcmVhZCBwYXJ0IG9mIHNrYiBhcyB1c2VkICovCiAJCWlmICghKGZsYWdzICYgTVNHX1BFRUspKSB7CiAJCQlVTklYQ0Ioc2tiKS5jb25zdW1lZCArPSBjaHVuazsKQEAgLTI0NTQsMjAgKzI2NjEsMjIgQEAKIAkJcmV0dXJuIG1hc2s7CiAKIAl3cml0YWJsZSA9IHVuaXhfd3JpdGFibGUoc2spOwotCW90aGVyID0gdW5peF9wZWVyX2dldChzayk7Ci0JaWYgKG90aGVyKSB7Ci0JCWlmICh1bml4X3BlZXIob3RoZXIpICE9IHNrKSB7Ci0JCQlzb2NrX3BvbGxfd2FpdChmaWxlLCAmdW5peF9zayhvdGhlciktPnBlZXJfd2FpdCwgd2FpdCk7Ci0JCQlpZiAodW5peF9yZWN2cV9mdWxsKG90aGVyKSkKLQkJCQl3cml0YWJsZSA9IDA7Ci0JCX0KLQkJc29ja19wdXQob3RoZXIpOworCWlmICh3cml0YWJsZSkgeworCQl1bml4X3N0YXRlX2xvY2soc2spOworCisJCW90aGVyID0gdW5peF9wZWVyKHNrKTsKKwkJaWYgKG90aGVyICYmIHVuaXhfcGVlcihvdGhlcikgIT0gc2sgJiYKKwkJICAgIHVuaXhfcmVjdnFfZnVsbChvdGhlcikgJiYKKwkJICAgIHVuaXhfZGdyYW1fcGVlcl93YWtlX21lKHNrLCBvdGhlcikpCisJCQl3cml0YWJsZSA9IDA7CisKKwkJdW5peF9zdGF0ZV91bmxvY2soc2spOwogCX0KIAogCWlmICh3cml0YWJsZSkKIAkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQ7CiAJZWxzZQotCQlzZXRfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKwkJc2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiAJcmV0dXJuIG1hc2s7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCBjNzFlMjc0Li43NWIwZDIzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTc5NDEsOCArNzk0MSwxMCBAQAogCWlmIChubGFfZ2V0X2ZsYWcoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1VTRV9SUk1dKSkgewogCQlpZiAoIShyZGV2LT53aXBoeS5mZWF0dXJlcyAmCiAJCSAgICAgIE5MODAyMTFfRkVBVFVSRV9EU19QQVJBTV9TRVRfSUVfSU5fUFJPQkVTKSB8fAotCQkgICAgIShyZGV2LT53aXBoeS5mZWF0dXJlcyAmIE5MODAyMTFfRkVBVFVSRV9RVUlFVCkpCisJCSAgICAhKHJkZXYtPndpcGh5LmZlYXR1cmVzICYgTkw4MDIxMV9GRUFUVVJFX1FVSUVUKSkgeworCQkJa3pmcmVlKGNvbm5rZXlzKTsKIAkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWNvbm5lY3QuZmxhZ3MgfD0gQVNTT0NfUkVRX1VTRV9SUk07CiAJfQogCkBAIC05NTAzLDYgKzk1MDUsNyBAQAogCWlmIChuZXdfdHJpZ2dlcnMudGNwICYmIG5ld190cmlnZ2Vycy50Y3AtPnNvY2spCiAJCXNvY2tfcmVsZWFzZShuZXdfdHJpZ2dlcnMudGNwLT5zb2NrKTsKIAlrZnJlZShuZXdfdHJpZ2dlcnMudGNwKTsKKwlrZnJlZShuZXdfdHJpZ2dlcnMubmRfY29uZmlnKTsKIAlyZXR1cm4gZXJyOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggMmU4ZDZmMy4uMDZkMDUwZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCisrKyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtMzAyOSw2ICszMDI5LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTigxLCAiaW52YWxpZCBpbml0aWF0b3IgJWRcbiIsIGxyLT5pbml0aWF0b3IpOworCQlrZnJlZShyZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzIyMSw4ICszMjIyLDEwIEBACiAJLyogV2UgYWx3YXlzIHRyeSB0byBnZXQgYW4gdXBkYXRlIGZvciB0aGUgc3RhdGljIHJlZ2RvbWFpbiAqLwogCWVyciA9IHJlZ3VsYXRvcnlfaGludF9jb3JlKGNmZzgwMjExX3dvcmxkX3JlZ2RvbS0+YWxwaGEyKTsKIAlpZiAoZXJyKSB7Ci0JCWlmIChlcnIgPT0gLUVOT01FTSkKKwkJaWYgKGVyciA9PSAtRU5PTUVNKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihyZWdfcGRldik7CiAJCQlyZXR1cm4gZXJyOworCQl9CiAJCS8qCiAJCSAqIE4uQi4ga29iamVjdF91ZXZlbnRfZW52KCkgY2FuIGZhaWwgbWFpbmx5IGZvciB3aGVuIHdlJ3JlIG91dAogCQkgKiBtZW1vcnkgd2hpY2ggaXMgaGFuZGxlZCBhbmQgcHJvcGFnYXRlZCBhcHByb3ByaWF0ZWx5IGFib3ZlCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCAwOWJmY2JhLi5iNWU2NjViIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTMwMyw2ICszMDMsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfYWxsb2MpOwogCitzdGF0aWMgdm9pZCB4ZnJtX3BvbGljeV9kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3kgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHhmcm1fcG9saWN5LCByY3UpOworCisJc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZShwb2xpY3ktPnNlY3VyaXR5KTsKKwlrZnJlZShwb2xpY3kpOworfQorCiAvKiBEZXN0cm95IHhmcm1fcG9saWN5OiBkZXNjZW5kYW50IHJlc291cmNlcyBtdXN0IGJlIHJlbGVhc2VkIHRvIHRoaXMgbW9tZW50LiAqLwogCiB2b2lkIHhmcm1fcG9saWN5X2Rlc3Ryb3koc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3kpCkBAIC0zMTIsOCArMzIwLDcgQEAKIAlpZiAoZGVsX3RpbWVyKCZwb2xpY3ktPnRpbWVyKSB8fCBkZWxfdGltZXIoJnBvbGljeS0+cG9scS5ob2xkX3RpbWVyKSkKIAkJQlVHKCk7CiAKLQlzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKHBvbGljeS0+c2VjdXJpdHkpOwotCWtmcmVlKHBvbGljeSk7CisJY2FsbF9yY3UoJnBvbGljeS0+cmN1LCB4ZnJtX3BvbGljeV9kZXN0cm95X3JjdSk7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2Rlc3Ryb3kpOwogCkBAIC0xMjE0LDggKzEyMjEsMTAgQEAKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcmVhZF9sb2NrX2JoKCZuZXQtPnhmcm0ueGZybV9wb2xpY3lfbG9jayk7Ci0JaWYgKChwb2wgPSBzay0+c2tfcG9saWN5W2Rpcl0pICE9IE5VTEwpIHsKKwlwb2wgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX3BvbGljeVtkaXJdKTsKKwlpZiAocG9sICE9IE5VTEwpIHsKIAkJYm9vbCBtYXRjaCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goJnBvbC0+c2VsZWN0b3IsIGZsLAogCQkJCQkJIHNrLT5za19mYW1pbHkpOwogCQlpbnQgZXJyID0gMDsKQEAgLTEyMzksNiArMTI0OCw3IEBACiAJfQogb3V0OgogCXJlYWRfdW5sb2NrX2JoKCZuZXQtPnhmcm0ueGZybV9wb2xpY3lfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHBvbDsKIH0KIApAQCAtMTMwNywxMyArMTMxNywxNCBAQAogI2VuZGlmCiAKIAl3cml0ZV9sb2NrX2JoKCZuZXQtPnhmcm0ueGZybV9wb2xpY3lfbG9jayk7Ci0Jb2xkX3BvbCA9IHNrLT5za19wb2xpY3lbZGlyXTsKLQlzay0+c2tfcG9saWN5W2Rpcl0gPSBwb2w7CisJb2xkX3BvbCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stPnNrX3BvbGljeVtkaXJdLAorCQkJCWxvY2tkZXBfaXNfaGVsZCgmbmV0LT54ZnJtLnhmcm1fcG9saWN5X2xvY2spKTsKIAlpZiAocG9sKSB7CiAJCXBvbC0+Y3VybGZ0LmFkZF90aW1lID0gZ2V0X3NlY29uZHMoKTsKIAkJcG9sLT5pbmRleCA9IHhmcm1fZ2VuX2luZGV4KG5ldCwgWEZSTV9QT0xJQ1lfTUFYK2RpciwgMCk7CiAJCXhmcm1fc2tfcG9saWN5X2xpbmsocG9sLCBkaXIpOwogCX0KKwlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX3BvbGljeVtkaXJdLCBwb2wpOwogCWlmIChvbGRfcG9sKSB7CiAJCWlmIChwb2wpCiAJCQl4ZnJtX3BvbGljeV9yZXF1ZXVlKG9sZF9wb2wsIHBvbCk7CkBAIC0xMzYxLDE3ICsxMzcyLDI2IEBACiAJcmV0dXJuIG5ld3A7CiB9CiAKLWludCBfX3hmcm1fc2tfY2xvbmVfcG9saWN5KHN0cnVjdCBzb2NrICpzaykKK2ludCBfX3hmcm1fc2tfY2xvbmVfcG9saWN5KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKm9zaykKIHsKLQlzdHJ1Y3QgeGZybV9wb2xpY3kgKnAwID0gc2stPnNrX3BvbGljeVswXSwKLQkJCSAgICpwMSA9IHNrLT5za19wb2xpY3lbMV07CisJY29uc3Qgc3RydWN0IHhmcm1fcG9saWN5ICpwOworCXN0cnVjdCB4ZnJtX3BvbGljeSAqbnA7CisJaW50IGksIHJldCA9IDA7CiAKLQlzay0+c2tfcG9saWN5WzBdID0gc2stPnNrX3BvbGljeVsxXSA9IE5VTEw7Ci0JaWYgKHAwICYmIChzay0+c2tfcG9saWN5WzBdID0gY2xvbmVfcG9saWN5KHAwLCAwKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKHAxICYmIChzay0+c2tfcG9saWN5WzFdID0gY2xvbmVfcG9saWN5KHAxLCAxKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIDA7CisJcmN1X3JlYWRfbG9jaygpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJcCA9IHJjdV9kZXJlZmVyZW5jZShvc2stPnNrX3BvbGljeVtpXSk7CisJCWlmIChwKSB7CisJCQlucCA9IGNsb25lX3BvbGljeShwLCBpKTsKKwkJCWlmICh1bmxpa2VseSghbnApKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihzay0+c2tfcG9saWN5W2ldLCBucCk7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtMjE5OCw2ICsyMjE4LDcgQEAKIAl4ZHN0ID0gTlVMTDsKIAlyb3V0ZSA9IE5VTEw7CiAKKwlzayA9IHNrX2NvbnN0X3RvX2Z1bGxfc2soc2spOwogCWlmIChzayAmJiBzay0+c2tfcG9saWN5W1hGUk1fUE9MSUNZX09VVF0pIHsKIAkJbnVtX3BvbHMgPSAxOwogCQlwb2xzWzBdID0geGZybV9za19wb2xpY3lfbG9va3VwKHNrLCBYRlJNX1BPTElDWV9PVVQsIGZsKTsKQEAgLTI0NzcsNiArMjQ5OCw3IEBACiAJfQogCiAJcG9sID0gTlVMTDsKKwlzayA9IHNrX3RvX2Z1bGxfc2soc2spOwogCWlmIChzayAmJiBzay0+c2tfcG9saWN5W2Rpcl0pIHsKIAkJcG9sID0geGZybV9za19wb2xpY3lfbG9va3VwKHNrLCBkaXIsICZmbCk7CiAJCWlmIChJU19FUlIocG9sKSkgewpAQCAtMjgwNCw3ICsyODI2LDYgQEAKIAogaW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pCiB7Ci0Jc3RydWN0IG5ldCAqbmV0OwogCWludCBlcnIgPSAwOwogCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjgzNSwyNiArMjg1Niw2IEBACiAJfQogCXNwaW5fdW5sb2NrKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7CiAKLQlydG5sX2xvY2soKTsKLQlmb3JfZWFjaF9uZXQobmV0KSB7Ci0JCXN0cnVjdCBkc3Rfb3BzICp4ZnJtX2RzdF9vcHM7Ci0KLQkJc3dpdGNoIChhZmluZm8tPmZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCQl4ZnJtX2RzdF9vcHMgPSAmbmV0LT54ZnJtLnhmcm00X2RzdF9vcHM7Ci0JCQlicmVhazsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQotCQljYXNlIEFGX0lORVQ2OgotCQkJeGZybV9kc3Rfb3BzID0gJm5ldC0+eGZybS54ZnJtNl9kc3Rfb3BzOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCUJVRygpOwotCQl9Ci0JCSp4ZnJtX2RzdF9vcHMgPSAqYWZpbmZvLT5kc3Rfb3BzOwotCX0KLQlydG5sX3VubG9jaygpOwotCiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKTsKQEAgLTI4OTAsMjIgKzI4OTEsNiBAQAogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbyk7CiAKLXN0YXRpYyB2b2lkIF9fbmV0X2luaXQgeGZybV9kc3Rfb3BzX2luaXQoc3RydWN0IG5ldCAqbmV0KQotewotCXN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbzsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlhZmluZm8gPSByY3VfZGVyZWZlcmVuY2UoeGZybV9wb2xpY3lfYWZpbmZvW0FGX0lORVRdKTsKLQlpZiAoYWZpbmZvKQotCQluZXQtPnhmcm0ueGZybTRfZHN0X29wcyA9ICphZmluZm8tPmRzdF9vcHM7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKLQlhZmluZm8gPSByY3VfZGVyZWZlcmVuY2UoeGZybV9wb2xpY3lfYWZpbmZvW0FGX0lORVQ2XSk7Ci0JaWYgKGFmaW5mbykKLQkJbmV0LT54ZnJtLnhmcm02X2RzdF9vcHMgPSAqYWZpbmZvLT5kc3Rfb3BzOwotI2VuZGlmCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KIHN0YXRpYyBpbnQgeGZybV9kZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOwpAQCAtMzA1NCw3ICszMDM5LDYgQEAKIAlydiA9IHhmcm1fcG9saWN5X2luaXQobmV0KTsKIAlpZiAocnYgPCAwKQogCQlnb3RvIG91dF9wb2xpY3k7Ci0JeGZybV9kc3Rfb3BzX2luaXQobmV0KTsKIAlydiA9IHhmcm1fc3lzY3RsX2luaXQobmV0KTsKIAlpZiAocnYgPCAwKQogCQlnb3RvIG91dF9zeXNjdGw7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2JwZi9NYWtlZmlsZSBiL3NhbXBsZXMvYnBmL01ha2VmaWxlCmluZGV4IDc5YjQ1OTYuLmVkZDYzOGIgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvYnBmL01ha2VmaWxlCisrKyBiL3NhbXBsZXMvYnBmL01ha2VmaWxlCkBAIC02NywxMCArNjcsMTMgQEAKICMgcG9pbnQgdGhpcyB0byB5b3VyIExMVk0gYmFja2VuZCB3aXRoIGJwZiBzdXBwb3J0CiBMTEM9JChzcmN0cmVlKS90b29scy9icGYvbGx2bS9ibGQvRGVidWcrQXNzZXJ0cy9iaW4vbGxjCiAKKyMgYXNtL3N5c3JlZy5oIGlubGluZSBhc3NtYmx5IHVzZWQgYnkgaXQgaXMgaW5jb21wYXRpYmxlIHdpdGggbGx2bS4KKyMgQnV0LCBlaGVyZSBpcyBub3QgZWFzeSB3YXkgdG8gZml4IGl0LCBzbyBqdXN0IGV4Y2x1ZGUgaXQgc2luY2UgaXQgaXMKKyMgdXNlbGVzcyBmb3IgQlBGIHNhbXBsZXMuCiAkKG9iaikvJS5vOiAkKHNyYykvJS5jCiAJY2xhbmcgJChOT1NURElOQ19GTEFHUykgJChMSU5VWElOQ0xVREUpICQoRVhUUkFfQ0ZMQUdTKSBcCi0JCS1EX19LRVJORUxfXyAtV25vLXVudXNlZC12YWx1ZSAtV25vLXBvaW50ZXItc2lnbiBcCisJCS1EX19LRVJORUxfXyAtRF9fQVNNX1NZU1JFR19IIC1Xbm8tdW51c2VkLXZhbHVlIC1Xbm8tcG9pbnRlci1zaWduIFwKIAkJLU8yIC1lbWl0LWxsdm0gLWMgJDwgLW8gLXwgJChMTEMpIC1tYXJjaD1icGYgLWZpbGV0eXBlPW9iaiAtbyAkQAogCWNsYW5nICQoTk9TVERJTkNfRkxBR1MpICQoTElOVVhJTkNMVURFKSAkKEVYVFJBX0NGTEFHUykgXAotCQktRF9fS0VSTkVMX18gLVduby11bnVzZWQtdmFsdWUgLVduby1wb2ludGVyLXNpZ24gXAorCQktRF9fS0VSTkVMX18gLURfX0FTTV9TWVNSRUdfSCAtV25vLXVudXNlZC12YWx1ZSAtV25vLXBvaW50ZXItc2lnbiBcCiAJCS1PMiAtZW1pdC1sbHZtIC1jICQ8IC1vIC18ICQoTExDKSAtbWFyY2g9YnBmIC1maWxldHlwZT1hc20gLW8gJEAucwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rZXJuZWwtZG9jIGIvc2NyaXB0cy9rZXJuZWwtZG9jCmluZGV4IDEyNWI5MDYuLjYzOGEzOGUgMTAwNzU1Ci0tLSBhL3NjcmlwdHMva2VybmVsLWRvYworKysgYi9zY3JpcHRzL2tlcm5lbC1kb2MKQEAgLTI3MTEsNyArMjcxMSw3IEBACiAKICMgZ2VuZXJhdGUgYSBzZXF1ZW5jZSBvZiBjb2RlIHRoYXQgd2lsbCBzcGxpY2UgaW4gaGlnaGxpZ2h0aW5nIGluZm9ybWF0aW9uCiAjIHVzaW5nIHRoZSBzLy8gb3BlcmF0b3IuCi1mb3JlYWNoIG15ICRrIChrZXlzIEBoaWdobGlnaHRzKSB7Citmb3IgKG15ICRrID0gMDsgJGsgPCBAaGlnaGxpZ2h0czsgJGsrKykgewogICAgIG15ICRwYXR0ZXJuID0gJGhpZ2hsaWdodHNbJGtdWzBdOwogICAgIG15ICRyZXN1bHQgPSAkaGlnaGxpZ2h0c1ska11bMV07CiAjICAgcHJpbnQgU1RERVJSICJzY2FubmluZyBwYXR0ZXJuOiRwYXR0ZXJuLCBoaWdobGlnaHQ6KCRyZXN1bHQpXG4iOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saW5rLXZtbGludXguc2ggYi9zY3JpcHRzL2xpbmstdm1saW51eC5zaAppbmRleCAxYTEwZDhhLi5kYWNmNzFhIDEwMDc1NQotLS0gYS9zY3JpcHRzL2xpbmstdm1saW51eC5zaAorKysgYi9zY3JpcHRzL2xpbmstdm1saW51eC5zaApAQCAtNjIsNyArNjIsNyBAQAogCQkJLVdsLC0tc3RhcnQtZ3JvdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQkJICR7S0JVSUxEX1ZNTElOVVhfTUFJTn0gICAgICAgICAgICAgICAgICAgICAgXAogCQkJLVdsLC0tZW5kLWdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQktbHV0aWwgJHsxfQorCQkJLWx1dGlsIC1scnQgJHsxfQogCQlybSAtZiBsaW51eAogCWZpCiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5jIGIvc2NyaXB0cy9yZWNvcmRtY291bnQuYwppbmRleCA2OTg3NjhiLi4zMDFkNzBiIDEwMDY0NAotLS0gYS9zY3JpcHRzL3JlY29yZG1jb3VudC5jCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LmMKQEAgLTQ4LDEyICs0OCwxNyBAQAogCiBzdGF0aWMgaW50IGZkX21hcDsJLyogRmlsZSBkZXNjcmlwdG9yIGZvciBmaWxlIGJlaW5nIG1vZGlmaWVkLiAqLwogc3RhdGljIGludCBtbWFwX2ZhaWxlZDsgLyogQm9vbGVhbiBmbGFnLiAqLwotc3RhdGljIHZvaWQgKmVoZHJfY3VycjsgLyogY3VycmVudCBFbGZYWF9FaGRyICogIGZvciByZXNvdXJjZSBjbGVhbnVwICovCiBzdGF0aWMgY2hhciBncGZ4OwkvKiBwcmVmaXggZm9yIGdsb2JhbCBzeW1ib2wgbmFtZSAoc29tZXRpbWVzICdfJykgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3RhdCBzYjsJLyogUmVtZW1iZXIgLnN0X3NpemUsIGV0Yy4gKi8KIHN0YXRpYyBqbXBfYnVmIGptcGVudjsJLyogc2V0am1wL2xvbmdqbXAgcGVyLWZpbGUgZXJyb3IgZXNjYXBlICovCiBzdGF0aWMgY29uc3QgY2hhciAqYWx0bWNvdW50OwkvKiBhbHRlcm5hdGUgbWNvdW50IHN5bWJvbCBuYW1lICovCiBzdGF0aWMgaW50IHdhcm5fb25fbm90cmFjZV9zZWN0OyAvKiB3YXJuIHdoZW4gc2VjdGlvbiBoYXMgbWNvdW50IG5vdCBiZWluZyByZWNvcmRlZCAqLworc3RhdGljIHZvaWQgKmZpbGVfbWFwOwkvKiBwb2ludGVyIG9mIHRoZSBtYXBwZWQgZmlsZSAqLworc3RhdGljIHZvaWQgKmZpbGVfZW5kOwkvKiBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIG1hcHBlZCBmaWxlICovCitzdGF0aWMgaW50IGZpbGVfdXBkYXRlZDsgLyogZmxhZyB0byBzdGF0ZSBmaWxlIHdhcyBjaGFuZ2VkICovCitzdGF0aWMgdm9pZCAqZmlsZV9wdHI7CS8qIGN1cnJlbnQgZmlsZSBwb2ludGVyIGxvY2F0aW9uICovCitzdGF0aWMgdm9pZCAqZmlsZV9hcHBlbmQ7IC8qIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KK3N0YXRpYyBzaXplX3QgZmlsZV9hcHBlbmRfc2l6ZTsgLyogaG93IG11Y2ggaXMgYWRkZWQgdG8gZW5kIG9mIGZpbGUgKi8KIAogLyogc2V0am1wKCkgcmV0dXJuIHZhbHVlcyAqLwogZW51bSB7CkBAIC02NywxMCArNzIsMTQgQEAKIGNsZWFudXAodm9pZCkKIHsKIAlpZiAoIW1tYXBfZmFpbGVkKQotCQltdW5tYXAoZWhkcl9jdXJyLCBzYi5zdF9zaXplKTsKKwkJbXVubWFwKGZpbGVfbWFwLCBzYi5zdF9zaXplKTsKIAllbHNlCi0JCWZyZWUoZWhkcl9jdXJyKTsKLQljbG9zZShmZF9tYXApOworCQlmcmVlKGZpbGVfbWFwKTsKKwlmaWxlX21hcCA9IE5VTEw7CisJZnJlZShmaWxlX2FwcGVuZCk7CisJZmlsZV9hcHBlbmQgPSBOVUxMOworCWZpbGVfYXBwZW5kX3NpemUgPSAwOworCWZpbGVfdXBkYXRlZCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKQEAgLTkyLDEyICsxMDEsMjIgQEAKIHN0YXRpYyBvZmZfdAogdWxzZWVrKGludCBjb25zdCBmZCwgb2ZmX3QgY29uc3Qgb2Zmc2V0LCBpbnQgY29uc3Qgd2hlbmNlKQogewotCW9mZl90IGNvbnN0IHcgPSBsc2VlayhmZCwgb2Zmc2V0LCB3aGVuY2UpOwotCWlmICh3ID09IChvZmZfdCktMSkgewotCQlwZXJyb3IoImxzZWVrIik7CisJc3dpdGNoICh3aGVuY2UpIHsKKwljYXNlIFNFRUtfU0VUOgorCQlmaWxlX3B0ciA9IGZpbGVfbWFwICsgb2Zmc2V0OworCQlicmVhazsKKwljYXNlIFNFRUtfQ1VSOgorCQlmaWxlX3B0ciArPSBvZmZzZXQ7CisJCWJyZWFrOworCWNhc2UgU0VFS19FTkQ6CisJCWZpbGVfcHRyID0gZmlsZV9tYXAgKyAoc2Iuc3Rfc2l6ZSAtIG9mZnNldCk7CisJCWJyZWFrOworCX0KKwlpZiAoZmlsZV9wdHIgPCBmaWxlX21hcCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImxzZWVrOiBzZWVrIGJlZm9yZSBmaWxlXG4iKTsKIAkJZmFpbF9maWxlKCk7CiAJfQotCXJldHVybiB3OworCXJldHVybiBmaWxlX3B0ciAtIGZpbGVfbWFwOwogfQogCiBzdGF0aWMgc2l6ZV90CkBAIC0xMTQsMTIgKzEzMywzOCBAQAogc3RhdGljIHNpemVfdAogdXdyaXRlKGludCBjb25zdCBmZCwgdm9pZCBjb25zdCAqY29uc3QgYnVmLCBzaXplX3QgY29uc3QgY291bnQpCiB7Ci0Jc2l6ZV90IGNvbnN0IG4gPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7Ci0JaWYgKG4gIT0gY291bnQpIHsKLQkJcGVycm9yKCJ3cml0ZSIpOwotCQlmYWlsX2ZpbGUoKTsKKwlzaXplX3QgY250ID0gY291bnQ7CisJb2ZmX3QgaWR4ID0gMDsKKworCWZpbGVfdXBkYXRlZCA9IDE7CisKKwlpZiAoZmlsZV9wdHIgKyBjb3VudCA+PSBmaWxlX2VuZCkgeworCQlvZmZfdCBhb2Zmc2V0ID0gKGZpbGVfcHRyICsgY291bnQpIC0gZmlsZV9lbmQ7CisKKwkJaWYgKGFvZmZzZXQgPiBmaWxlX2FwcGVuZF9zaXplKSB7CisJCQlmaWxlX2FwcGVuZCA9IHJlYWxsb2MoZmlsZV9hcHBlbmQsIGFvZmZzZXQpOworCQkJZmlsZV9hcHBlbmRfc2l6ZSA9IGFvZmZzZXQ7CisJCX0KKwkJaWYgKCFmaWxlX2FwcGVuZCkgeworCQkJcGVycm9yKCJ3cml0ZSIpOworCQkJZmFpbF9maWxlKCk7CisJCX0KKwkJaWYgKGZpbGVfcHRyIDwgZmlsZV9lbmQpIHsKKwkJCWNudCA9IGZpbGVfZW5kIC0gZmlsZV9wdHI7CisJCX0gZWxzZSB7CisJCQljbnQgPSAwOworCQkJaWR4ID0gYW9mZnNldCAtIGNvdW50OworCQl9CiAJfQotCXJldHVybiBuOworCisJaWYgKGNudCkKKwkJbWVtY3B5KGZpbGVfcHRyLCBidWYsIGNudCk7CisKKwlpZiAoY250IDwgY291bnQpCisJCW1lbWNweShmaWxlX2FwcGVuZCArIGlkeCwgYnVmICsgY250LCBjb3VudCAtIGNudCk7CisKKwlmaWxlX3B0ciArPSBjb3VudDsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyB2b2lkICoKQEAgLTE5Miw5ICsyMzcsNyBAQAogICovCiBzdGF0aWMgdm9pZCAqbW1hcF9maWxlKGNoYXIgY29uc3QgKmZuYW1lKQogewotCXZvaWQgKmFkZHI7Ci0KLQlmZF9tYXAgPSBvcGVuKGZuYW1lLCBPX1JEV1IpOworCWZkX21hcCA9IG9wZW4oZm5hbWUsIE9fUkRPTkxZKTsKIAlpZiAoZmRfbWFwIDwgMCB8fCBmc3RhdChmZF9tYXAsICZzYikgPCAwKSB7CiAJCXBlcnJvcihmbmFtZSk7CiAJCWZhaWxfZmlsZSgpOwpAQCAtMjAzLDE1ICsyNDYsNTggQEAKIAkJZnByaW50ZihzdGRlcnIsICJub3QgYSByZWd1bGFyIGZpbGU6ICVzXG4iLCBmbmFtZSk7CiAJCWZhaWxfZmlsZSgpOwogCX0KLQlhZGRyID0gbW1hcCgwLCBzYi5zdF9zaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEUsCi0JCSAgICBmZF9tYXAsIDApOworCWZpbGVfbWFwID0gbW1hcCgwLCBzYi5zdF9zaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEUsCisJCQlmZF9tYXAsIDApOwogCW1tYXBfZmFpbGVkID0gMDsKLQlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7CisJaWYgKGZpbGVfbWFwID09IE1BUF9GQUlMRUQpIHsKIAkJbW1hcF9mYWlsZWQgPSAxOwotCQlhZGRyID0gdW1hbGxvYyhzYi5zdF9zaXplKTsKLQkJdXJlYWQoZmRfbWFwLCBhZGRyLCBzYi5zdF9zaXplKTsKKwkJZmlsZV9tYXAgPSB1bWFsbG9jKHNiLnN0X3NpemUpOworCQl1cmVhZChmZF9tYXAsIGZpbGVfbWFwLCBzYi5zdF9zaXplKTsKIAl9Ci0JcmV0dXJuIGFkZHI7CisJY2xvc2UoZmRfbWFwKTsKKworCWZpbGVfZW5kID0gZmlsZV9tYXAgKyBzYi5zdF9zaXplOworCisJcmV0dXJuIGZpbGVfbWFwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKmZuYW1lKQoreworCWNoYXIgdG1wX2ZpbGVbc3RybGVuKGZuYW1lKSArIDRdOworCXNpemVfdCBuOworCisJaWYgKCFmaWxlX3VwZGF0ZWQpCisJCXJldHVybjsKKworCXNwcmludGYodG1wX2ZpbGUsICIlcy5yYyIsIGZuYW1lKTsKKworCS8qCisJICogQWZ0ZXIgcmVhZGluZyB0aGUgZW50aXJlIGZpbGUgaW50byBtZW1vcnksIGRlbGV0ZSBpdAorCSAqIGFuZCB3cml0ZSBpdCBiYWNrLCB0byBwcmV2ZW50IHdlaXJkIHNpZGUgZWZmZWN0cyBvZiBtb2RpZnlpbmcKKwkgKiBhbiBvYmplY3QgZmlsZSBpbiBwbGFjZS4KKwkgKi8KKwlmZF9tYXAgPSBvcGVuKHRtcF9maWxlLCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0NSRUFULCBzYi5zdF9tb2RlKTsKKwlpZiAoZmRfbWFwIDwgMCkgeworCQlwZXJyb3IoZm5hbWUpOworCQlmYWlsX2ZpbGUoKTsKKwl9CisJbiA9IHdyaXRlKGZkX21hcCwgZmlsZV9tYXAsIHNiLnN0X3NpemUpOworCWlmIChuICE9IHNiLnN0X3NpemUpIHsKKwkJcGVycm9yKCJ3cml0ZSIpOworCQlmYWlsX2ZpbGUoKTsKKwl9CisJaWYgKGZpbGVfYXBwZW5kX3NpemUpIHsKKwkJbiA9IHdyaXRlKGZkX21hcCwgZmlsZV9hcHBlbmQsIGZpbGVfYXBwZW5kX3NpemUpOworCQlpZiAobiAhPSBmaWxlX2FwcGVuZF9zaXplKSB7CisJCQlwZXJyb3IoIndyaXRlIik7CisJCQlmYWlsX2ZpbGUoKTsKKwkJfQorCX0KKwljbG9zZShmZF9tYXApOworCWlmIChyZW5hbWUodG1wX2ZpbGUsIGZuYW1lKSA8IDApIHsKKwkJcGVycm9yKGZuYW1lKTsKKwkJZmFpbF9maWxlKCk7CisJfQogfQogCiAvKiB3OHJldiwgdzhuYXQsIC4uLjogSGFuZGxlIGVuZGlhbm5lc3MuICovCkBAIC0zMTgsNyArNDA0LDYgQEAKIAlFbGYzMl9FaGRyICpjb25zdCBlaGRyID0gbW1hcF9maWxlKGZuYW1lKTsKIAl1bnNpZ25lZCBpbnQgcmVsdHlwZSA9IDA7CiAKLQllaGRyX2N1cnIgPSBlaGRyOwogCXcgPSB3NG5hdDsKIAl3MiA9IHcybmF0OwogCXc4ID0gdzhuYXQ7CkBAIC00NDEsNiArNTI2LDcgQEAKIAl9CiAJfSAgLyogZW5kIHN3aXRjaCAqLwogCisJd3JpdGVfZmlsZShmbmFtZSk7CiAJY2xlYW51cCgpOwogfQogCkBAIC00OTMsMTEgKzU3OSwxNCBAQAogCQljYXNlIFNKX1NFVEpNUDogICAgLyogbm9ybWFsIHNlcXVlbmNlICovCiAJCQkvKiBBdm9pZCBwcm9ibGVtcyBpZiBlYXJseSBjbGVhbnVwKCkgKi8KIAkJCWZkX21hcCA9IC0xOwotCQkJZWhkcl9jdXJyID0gTlVMTDsKIAkJCW1tYXBfZmFpbGVkID0gMTsKKwkJCWZpbGVfbWFwID0gTlVMTDsKKwkJCWZpbGVfcHRyID0gTlVMTDsKKwkJCWZpbGVfdXBkYXRlZCA9IDA7CiAJCQlkb19maWxlKGZpbGUpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0pfRkFJTDogICAgLyogZXJyb3IgaW4gZG9fZmlsZSBvciBiZWxvdyAqLworCQkJc3ByaW50ZigiJXM6IGZhaWxlZFxuIiwgZmlsZSk7CiAJCQkrK25fZXJyb3I7CiAJCQlicmVhazsKIAkJY2FzZSBTSl9TVUNDRUVEOiAgICAvKiBwcmVtYXR1cmUgc3VjY2VzcyAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYyBiL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMKaW5kZXggOTI3ZGI5Zi4uNjk2Y2NmYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYworKysgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jCkBAIC04NDUsNiArODQ1LDggQEAKIAlzaXplX3QgZGF0YWxlbiA9IHByZXAtPmRhdGFsZW47CiAJaW50IHJldCA9IDA7CiAKKwlpZiAodGVzdF9iaXQoS0VZX0ZMQUdfTkVHQVRJVkUsICZrZXktPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9LRVk7CiAJaWYgKGRhdGFsZW4gPD0gMCB8fCBkYXRhbGVuID4gMzI3NjcgfHwgIXByZXAtPmRhdGEpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwppbmRleCBmYjExMWVhLi4xYzM4NzJhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleWN0bC5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKQEAgLTc1MSwxNiArNzUxLDE2IEBACiAKIAkvKiB0aGUga2V5IGlzIHByb2JhYmx5IHJlYWRhYmxlIC0gbm93IHRyeSB0byByZWFkIGl0ICovCiBjYW5fcmVhZF9rZXk6Ci0JcmV0ID0ga2V5X3ZhbGlkYXRlKGtleSk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCQlpZiAoa2V5LT50eXBlLT5yZWFkKSB7Ci0JCQkvKiByZWFkIHRoZSBkYXRhIHdpdGggdGhlIHNlbWFwaG9yZSBoZWxkIChzaW5jZSB3ZQotCQkJICogbWlnaHQgc2xlZXApICovCi0JCQlkb3duX3JlYWQoJmtleS0+c2VtKTsKKwlyZXQgPSAtRU9QTk9UU1VQUDsKKwlpZiAoa2V5LT50eXBlLT5yZWFkKSB7CisJCS8qIFJlYWQgdGhlIGRhdGEgd2l0aCB0aGUgc2VtYXBob3JlIGhlbGQgKHNpbmNlIHdlIG1pZ2h0IHNsZWVwKQorCQkgKiB0byBwcm90ZWN0IGFnYWluc3QgdGhlIGtleSBiZWluZyB1cGRhdGVkIG9yIHJldm9rZWQuCisJCSAqLworCQlkb3duX3JlYWQoJmtleS0+c2VtKTsKKwkJcmV0ID0ga2V5X3ZhbGlkYXRlKGtleSk7CisJCWlmIChyZXQgPT0gMCkKIAkJCXJldCA9IGtleS0+dHlwZS0+cmVhZChrZXksIGJ1ZmZlciwgYnVmbGVuKTsKLQkJCXVwX3JlYWQoJmtleS0+c2VtKTsKLQkJfQorCQl1cF9yZWFkKCZrZXktPnNlbSk7CiAJfQogCiBlcnJvcjI6CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3RydXN0ZWQuYyBiL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC5jCmluZGV4IDkwM2RhY2UuLjE2ZGVjNTMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC5jCisrKyBiL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC5jCkBAIC0xMDA3LDEzICsxMDA3LDE2IEBACiAgKi8KIHN0YXRpYyBpbnQgdHJ1c3RlZF91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKQogewotCXN0cnVjdCB0cnVzdGVkX2tleV9wYXlsb2FkICpwID0ga2V5LT5wYXlsb2FkLmRhdGFbMF07CisJc3RydWN0IHRydXN0ZWRfa2V5X3BheWxvYWQgKnA7CiAJc3RydWN0IHRydXN0ZWRfa2V5X3BheWxvYWQgKm5ld19wOwogCXN0cnVjdCB0cnVzdGVkX2tleV9vcHRpb25zICpuZXdfbzsKIAlzaXplX3QgZGF0YWxlbiA9IHByZXAtPmRhdGFsZW47CiAJY2hhciAqZGF0YWJsb2I7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAodGVzdF9iaXQoS0VZX0ZMQUdfTkVHQVRJVkUsICZrZXktPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9LRVk7CisJcCA9IGtleS0+cGF5bG9hZC5kYXRhWzBdOwogCWlmICghcC0+bWlncmF0YWJsZSkKIAkJcmV0dXJuIC1FUEVSTTsKIAlpZiAoZGF0YWxlbiA8PSAwIHx8IGRhdGFsZW4gPiAzMjc2NyB8fCAhcHJlcC0+ZGF0YSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCmluZGV4IDI4Y2IzMGYuLjg3MDVkNzkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMKKysrIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYwpAQCAtMTIwLDcgKzEyMCwxMCBAQAogCiAJaWYgKHJldCA9PSAwKSB7CiAJCS8qIGF0dGFjaCB0aGUgbmV3IGRhdGEsIGRpc3BsYWNpbmcgdGhlIG9sZCAqLwotCQl6YXAgPSBrZXktPnBheWxvYWQuZGF0YVswXTsKKwkJaWYgKCF0ZXN0X2JpdChLRVlfRkxBR19ORUdBVElWRSwgJmtleS0+ZmxhZ3MpKQorCQkJemFwID0ga2V5LT5wYXlsb2FkLmRhdGFbMF07CisJCWVsc2UKKwkJCXphcCA9IE5VTEw7CiAJCXJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIHVwYXlsb2FkKTsKIAkJa2V5LT5leHBpcnkgPSAwOwogCX0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYwppbmRleCAxODY0M2JmLi40NTZlMWE5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jCkBAIC02MzgsNyArNjM4LDcgQEAKIHsKIAlzdHJ1Y3QgYXZ0YWJfbm9kZSAqbm9kZTsKIAotCWlmICghY3RhYiB8fCAha2V5IHx8ICFhdmQgfHwgIXhwZXJtcykKKwlpZiAoIWN0YWIgfHwgIWtleSB8fCAhYXZkKQogCQlyZXR1cm47CiAKIAlmb3IgKG5vZGUgPSBhdnRhYl9zZWFyY2hfbm9kZShjdGFiLCBrZXkpOyBub2RlOwpAQCAtNjU3LDcgKzY1Nyw3IEBACiAJCWlmICgodTE2KShBVlRBQl9BVURJVEFMTE9XfEFWVEFCX0VOQUJMRUQpID09CiAJCSAgICAobm9kZS0+a2V5LnNwZWNpZmllZCAmIChBVlRBQl9BVURJVEFMTE9XfEFWVEFCX0VOQUJMRUQpKSkKIAkJCWF2ZC0+YXVkaXRhbGxvdyB8PSBub2RlLT5kYXR1bS51LmRhdGE7Ci0JCWlmICgobm9kZS0+a2V5LnNwZWNpZmllZCAmIEFWVEFCX0VOQUJMRUQpICYmCisJCWlmICh4cGVybXMgJiYgKG5vZGUtPmtleS5zcGVjaWZpZWQgJiBBVlRBQl9FTkFCTEVEKSAmJgogCQkJCShub2RlLT5rZXkuc3BlY2lmaWVkICYgQVZUQUJfWFBFUk1TKSkKIAkJCXNlcnZpY2VzX2NvbXB1dGVfeHBlcm1zX2RyaXZlcnMoeHBlcm1zLCBub2RlKTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9kaWNlL2RpY2UuYyBiL3NvdW5kL2ZpcmV3aXJlL2RpY2UvZGljZS5jCmluZGV4IDVkOTk0MzYuLjBjZGEwNWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2ZpcmV3aXJlL2RpY2UvZGljZS5jCisrKyBiL3NvdW5kL2ZpcmV3aXJlL2RpY2UvZGljZS5jCkBAIC0xMiw5ICsxMiwxMSBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogCiAjZGVmaW5lIE9VSV9XRUlTUwkJMHgwMDFjNmEKKyNkZWZpbmUgT1VJX0xPVUQJCTB4MDAwZmYyCiAKICNkZWZpbmUgRElDRV9DQVRFR09SWV9JRAkweDA0CiAjZGVmaW5lIFdFSVNTX0NBVEVHT1JZX0lECTB4MDAKKyNkZWZpbmUgTE9VRF9DQVRFR09SWV9JRAkweDEwCiAKIHN0YXRpYyBpbnQgZGljZV9pbnRlcmZhY2VfY2hlY2soc3RydWN0IGZ3X3VuaXQgKnVuaXQpCiB7CkBAIC01Nyw2ICs1OSw4IEBACiAJfQogCWlmICh2ZW5kb3IgPT0gT1VJX1dFSVNTKQogCQljYXRlZ29yeSA9IFdFSVNTX0NBVEVHT1JZX0lEOworCWVsc2UgaWYgKHZlbmRvciA9PSBPVUlfTE9VRCkKKwkJY2F0ZWdvcnkgPSBMT1VEX0NBVEVHT1JZX0lEOwogCWVsc2UKIAkJY2F0ZWdvcnkgPSBESUNFX0NBVEVHT1JZX0lEOwogCWlmIChkZXZpY2UtPmNvbmZpZ19yb21bM10gIT0gKCh2ZW5kb3IgPDwgOCkgfCBjYXRlZ29yeSkgfHwKZGlmZiAtLWdpdCBhL3NvdW5kL2hkYS9leHQvaGRhY19leHRfY29udHJvbGxlci5jIGIvc291bmQvaGRhL2V4dC9oZGFjX2V4dF9jb250cm9sbGVyLmMKaW5kZXggNjMyMTViMS4uNTQ4Y2MxZSAxMDA2NDQKLS0tIGEvc291bmQvaGRhL2V4dC9oZGFjX2V4dF9jb250cm9sbGVyLmMKKysrIGIvc291bmQvaGRhL2V4dC9oZGFjX2V4dF9jb250cm9sbGVyLmMKQEAgLTc3LDYgKzc3LDEyIEBACiAJCQllYnVzLT5zcGJjYXAgPSBidXMtPnJlbWFwX2FkZHIgKyBvZmZzZXQ7CiAJCQlicmVhazsKIAorCQljYXNlIEFaWF9EUlNNX0NBUF9JRDoKKwkJCS8qIERNQSByZXN1bWUgIGNhcGFiaWxpdHkgZm91bmQsIGhhbmRsZXIgZnVuY3Rpb24gKi8KKwkJCWRldl9kYmcoYnVzLT5kZXYsICJGb3VuZCBEUlNNIGNhcGFiaWxpdHlcbiIpOworCQkJZWJ1cy0+ZHJzbWNhcCA9IGJ1cy0+cmVtYXBfYWRkciArIG9mZnNldDsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQlkZXZfZGJnKGJ1cy0+ZGV2LCAiVW5rbm93biBjYXBhYmlsaXR5ICVkXG4iLCBjdXJfY2FwKTsKIAkJCWJyZWFrOwpAQCAtMjQwLDcgKzI0Niw3IEBACiAJaW50IG1hc2sgPSAoMSA8PCBBWlhfTUxDVExfQ1BBKTsKIAogCXVkZWxheSgzKTsKLQl0aW1lb3V0ID0gNTA7CisJdGltZW91dCA9IDE1MDsKIAogCWRvIHsKIAkJdmFsID0gcmVhZGwobGluay0+bWxfYWRkciArIEFaWF9SRUdfTUxfTENUTCk7CkBAIC0yODIsNiArMjg4LDI3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfaGRhY19leHRfYnVzX2xpbmtfcG93ZXJfZG93bik7CiAKIC8qKgorICogc25kX2hkYWNfZXh0X2J1c19saW5rX3Bvd2VyX3VwX2FsbCAtcG93ZXIgdXAgYWxsIGhkYSBsaW5rCisgKiBAZWJ1czogSEQtYXVkaW8gZXh0ZW5kZWQgYnVzCisgKi8KK2ludCBzbmRfaGRhY19leHRfYnVzX2xpbmtfcG93ZXJfdXBfYWxsKHN0cnVjdCBoZGFjX2V4dF9idXMgKmVidXMpCit7CisJc3RydWN0IGhkYWNfZXh0X2xpbmsgKmhsaW5rID0gTlVMTDsKKwlpbnQgcmV0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShobGluaywgJmVidXMtPmhsaW5rX2xpc3QsIGxpc3QpIHsKKwkJc25kX2hkYWNfdXBkYXRlbChobGluay0+bWxfYWRkciwKKwkJCQlBWlhfUkVHX01MX0xDVEwsIDAsIEFaWF9NTENUTF9TUEEpOworCQlyZXQgPSBjaGVja19oZGFjX2xpbmtfcG93ZXJfYWN0aXZlKGhsaW5rLCB0cnVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX2hkYWNfZXh0X2J1c19saW5rX3Bvd2VyX3VwX2FsbCk7CisKKy8qKgogICogc25kX2hkYWNfZXh0X2J1c19saW5rX3Bvd2VyX2Rvd25fYWxsIC1wb3dlciBkb3duIGFsbCBoZGEgbGluawogICogQGVidXM6IEhELWF1ZGlvIGV4dGVuZGVkIGJ1cwogICovCmRpZmYgLS1naXQgYS9zb3VuZC9oZGEvZXh0L2hkYWNfZXh0X3N0cmVhbS5jIGIvc291bmQvaGRhL2V4dC9oZGFjX2V4dF9zdHJlYW0uYwppbmRleCBjYjg5ZWM3Li4wMjNjYzRjIDEwMDY0NAotLS0gYS9zb3VuZC9oZGEvZXh0L2hkYWNfZXh0X3N0cmVhbS5jCisrKyBiL3NvdW5kL2hkYS9leHQvaGRhY19leHRfc3RyZWFtLmMKQEAgLTU5LDYgKzU5LDEwIEBACiAJCQkJCUFaWF9TUEJfTUFYRklGTzsKIAl9CiAKKwlpZiAoZWJ1cy0+ZHJzbWNhcCkKKwkJc3RyZWFtLT5kcGlicl9hZGRyID0gZWJ1cy0+ZHJzbWNhcCArIEFaWF9EUlNNX0JBU0UgKworCQkJCQlBWlhfRFJTTV9JTlRFUlZBTCAqIGlkeDsKKwogCXN0cmVhbS0+ZGVjb3VwbGVkID0gZmFsc2U7CiAJc25kX2hkYWNfc3RyZWFtX2luaXQoYnVzLCAmc3RyZWFtLT5oc3RyZWFtLCBpZHgsIGRpcmVjdGlvbiwgdGFnKTsKIH0KQEAgLTEwNyw2ICsxMTEsNyBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmYnVzLT5zdHJlYW1fbGlzdCkpIHsKIAkJcyA9IGxpc3RfZmlyc3RfZW50cnkoJmJ1cy0+c3RyZWFtX2xpc3QsIHN0cnVjdCBoZGFjX3N0cmVhbSwgbGlzdCk7CiAJCXN0cmVhbSA9IHN0cmVhbV90b19oZGFjX2V4dF9zdHJlYW0ocyk7CisJCXNuZF9oZGFjX2V4dF9zdHJlYW1fZGVjb3VwbGUoZWJ1cywgc3RyZWFtLCBmYWxzZSk7CiAJCWxpc3RfZGVsKCZzLT5saXN0KTsKIAkJa2ZyZWUoc3RyZWFtKTsKIAl9CkBAIC00OTcsMyArNTAyLDcwIEBACiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX2hkYWNfZXh0X3N0b3Bfc3RyZWFtcyk7CisKKy8qKgorICogc25kX2hkYWNfZXh0X3N0cmVhbV9kcnNtX2VuYWJsZSAtIGVuYWJsZSBETUEgcmVzdW1lIGZvciBhIHN0cmVhbQorICogQGVidXM6IEhELWF1ZGlvIGV4dCBjb3JlIGJ1cworICogQGVuYWJsZTogZmxhZyB0byBlbmFibGUvZGlzYWJsZSBEUlNNCisgKiBAaW5kZXg6IHN0cmVhbSBpbmRleCBmb3Igd2hpY2ggRFJTTSBuZWVkIHRvIGJlIGVuYWJsZWQKKyAqLwordm9pZCBzbmRfaGRhY19leHRfc3RyZWFtX2Ryc21fZW5hYmxlKHN0cnVjdCBoZGFjX2V4dF9idXMgKmVidXMsCisJCQkJYm9vbCBlbmFibGUsIGludCBpbmRleCkKK3sKKwl1MzIgbWFzayA9IDA7CisJdTMyIHJlZ2lzdGVyX21hc2sgPSAwOworCXN0cnVjdCBoZGFjX2J1cyAqYnVzID0gJmVidXMtPmJ1czsKKworCWlmICghZWJ1cy0+ZHJzbWNhcCkgeworCQlkZXZfZXJyKGJ1cy0+ZGV2LCAiQWRkcmVzcyBvZiBEUlNNIGNhcGFiaWxpdHkgaXMgTlVMTCIpOworCQlyZXR1cm47CisJfQorCisJbWFzayB8PSAoMSA8PCBpbmRleCk7CisKKwlyZWdpc3Rlcl9tYXNrID0gcmVhZGwoZWJ1cy0+ZHJzbWNhcCArIEFaWF9SRUdfU1BCX1NQQkZDQ1RMKTsKKworCW1hc2sgfD0gcmVnaXN0ZXJfbWFzazsKKworCWlmIChlbmFibGUpCisJCXNuZF9oZGFjX3VwZGF0ZWwoZWJ1cy0+ZHJzbWNhcCwgQVpYX1JFR19EUlNNX0NUTCwgMCwgbWFzayk7CisJZWxzZQorCQlzbmRfaGRhY191cGRhdGVsKGVidXMtPmRyc21jYXAsIEFaWF9SRUdfRFJTTV9DVEwsIG1hc2ssIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX2hkYWNfZXh0X3N0cmVhbV9kcnNtX2VuYWJsZSk7CisKKy8qKgorICogc25kX2hkYWNfZXh0X3N0cmVhbV9zZXRfZHBpYnIgLSBzZXRzIHRoZSBkcGliciB2YWx1ZSBvZiBhIHN0cmVhbQorICogQGVidXM6IEhELWF1ZGlvIGV4dCBjb3JlIGJ1cworICogQHN0cmVhbTogaGRhY19leHRfc3RyZWFtCisgKiBAdmFsdWU6IGRwaWIgdmFsdWUgdG8gc2V0CisgKi8KK2ludCBzbmRfaGRhY19leHRfc3RyZWFtX3NldF9kcGlicihzdHJ1Y3QgaGRhY19leHRfYnVzICplYnVzLAorCQkJCSBzdHJ1Y3QgaGRhY19leHRfc3RyZWFtICpzdHJlYW0sIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgaGRhY19idXMgKmJ1cyA9ICZlYnVzLT5idXM7CisKKwlpZiAoIWVidXMtPmRyc21jYXApIHsKKwkJZGV2X2VycihidXMtPmRldiwgIkFkZHJlc3Mgb2YgRFJTTSBjYXBhYmlsaXR5IGlzIE5VTEwiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKHZhbHVlLCBzdHJlYW0tPmRwaWJyX2FkZHIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfaGRhY19leHRfc3RyZWFtX3NldF9kcGlicik7CisKKy8qKgorICogc25kX2hkYWNfZXh0X3N0cmVhbV9zZXRfbHBpYiAtIHNldHMgdGhlIGxwaWIgdmFsdWUgb2YgYSBzdHJlYW0KKyAqIEBlYnVzOiBIRC1hdWRpbyBleHQgY29yZSBidXMKKyAqIEBzdHJlYW06IGhkYWNfZXh0X3N0cmVhbQorICogQHZhbHVlOiBscGliIHZhbHVlIHRvIHNldAorICovCitpbnQgc25kX2hkYWNfZXh0X3N0cmVhbV9zZXRfbHBpYihzdHJ1Y3QgaGRhY19leHRfc3RyZWFtICpzdHJlYW0sIHUzMiB2YWx1ZSkKK3sKKwlzbmRfaGRhY19zdHJlYW1fd3JpdGVsKCZzdHJlYW0tPmhzdHJlYW0sIFNEX0xQSUIsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX2hkYWNfZXh0X3N0cmVhbV9zZXRfbHBpYik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCA4YTdmYmRjLi4zYjM2NTgyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTMxMiw2ICszMTIsMTAgQEAKIAkoQVpYX0RDQVBTX0lOVEVMX1BDSCB8IEFaWF9EQ0FQU19TRVBBUkFURV9TVFJFQU1fVEFHIHxcCiAJIEFaWF9EQ0FQU19JOTE1X1BPV0VSV0VMTCkKIAorI2RlZmluZSBBWlhfRENBUFNfSU5URUxfQlJPWFRPTiBcCisJKEFaWF9EQ0FQU19JTlRFTF9QQ0ggfCBBWlhfRENBUFNfU0VQQVJBVEVfU1RSRUFNX1RBRyB8XAorCSBBWlhfRENBUFNfSTkxNV9QT1dFUldFTEwpCisKIC8qIHF1aXJrcyBmb3IgQVRJIFNCIC8gQU1EIEh1ZHNvbiAqLwogI2RlZmluZSBBWlhfRENBUFNfUFJFU0VUX0FUSV9TQiBcCiAJKEFaWF9EQ0FQU19OT19UQ1NFTCB8IEFaWF9EQ0FQU19TWU5DX1dSSVRFIHwgQVpYX0RDQVBTX1BPU0ZJWF9MUElCIHxcCkBAIC0zNTEsNiArMzU1LDggQEAKIAkJCQkJKChwY2kpLT5kZXZpY2UgPT0gMHgwZDBjKSB8fCBcCiAJCQkJCSgocGNpKS0+ZGV2aWNlID09IDB4MTYwYykpCiAKKyNkZWZpbmUgSVNfQlJPWFRPTihwY2kpCSgocGNpKS0+ZGV2aWNlID09IDB4NWE5OCkKKwogc3RhdGljIGNoYXIgKmRyaXZlcl9zaG9ydF9uYW1lc1tdID0gewogCVtBWlhfRFJJVkVSX0lDSF0gPSAiSERBIEludGVsIiwKIAlbQVpYX0RSSVZFUl9QQ0hdID0gIkhEQSBJbnRlbCBQQ0giLApAQCAtNTAyLDE1ICs1MDgsMzYgQEAKICAgICAgICAgfQogfQogCisvKgorICogSW4gQlhULVAgQTAsIEhELUF1ZGlvIERNQSByZXF1ZXN0cyBpcyBsYXRlciB0aGFuIGV4cGVjdGVkLAorICogYW5kIG1ha2VzIGFuIGF1ZGlvIHN0cmVhbSBzZW5zaXRpdmUgdG8gc3lzdGVtIGxhdGVuY2llcyB3aGVuCisgKiAyNC8zMiBiaXRzIGFyZSBwbGF5aW5nLgorICogQWRqdXN0aW5nIHRocmVzaG9sZCBvZiBETUEgZmlmbyB0byBmb3JjZSB0aGUgRE1BIHJlcXVlc3QKKyAqIHNvb25lciB0byBpbXByb3ZlIGxhdGVuY3kgdG9sZXJhbmNlIGF0IHRoZSBleHBlbnNlIG9mIHBvd2VyLgorICovCitzdGF0aWMgdm9pZCBieHRfcmVkdWNlX2RtYV9sYXRlbmN5KHN0cnVjdCBhenggKmNoaXApCit7CisJdTMyIHZhbDsKKworCXZhbCA9IGF6eF9yZWFkbChjaGlwLCBTS0xfRU00TCk7CisJdmFsICY9ICgweDMgPDwgMjApOworCWF6eF93cml0ZWwoY2hpcCwgU0tMX0VNNEwsIHZhbCk7Cit9CisKIHN0YXRpYyB2b2lkIGhkYV9pbnRlbF9pbml0X2NoaXAoc3RydWN0IGF6eCAqY2hpcCwgYm9vbCBmdWxsX3Jlc2V0KQogewogCXN0cnVjdCBoZGFjX2J1cyAqYnVzID0gYXp4X2J1cyhjaGlwKTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gY2hpcC0+cGNpOwogCiAJaWYgKGNoaXAtPmRyaXZlcl9jYXBzICYgQVpYX0RDQVBTX0k5MTVfUE9XRVJXRUxMKQogCQlzbmRfaGRhY19zZXRfY29kZWNfd2FrZXVwKGJ1cywgdHJ1ZSk7CiAJYXp4X2luaXRfY2hpcChjaGlwLCBmdWxsX3Jlc2V0KTsKIAlpZiAoY2hpcC0+ZHJpdmVyX2NhcHMgJiBBWlhfRENBUFNfSTkxNV9QT1dFUldFTEwpCiAJCXNuZF9oZGFjX3NldF9jb2RlY193YWtldXAoYnVzLCBmYWxzZSk7CisKKwkvKiByZWR1Y2UgZG1hIGxhdGVuY3kgdG8gYXZvaWQgbm9pc2UgKi8KKwlpZiAoSVNfQlJPWFRPTihwY2kpKQorCQlieHRfcmVkdWNlX2RtYV9sYXRlbmN5KGNoaXApOwogfQogCiAvKiBjYWxjdWxhdGUgcnVudGltZSBkZWxheSBmcm9tIExQSUIgKi8KQEAgLTkyNyw2ICs5NTQsMzYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgfHwgU1VQUE9SVF9WR0FfU1dJVENIRVJPTyAqLwogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCisvKiBwdXQgY29kZWMgZG93biB0byBEMyBhdCBoaWJlcm5hdGlvbiBmb3IgSW50ZWwgU0tMKzsKKyAqIG90aGVyd2lzZSBCSU9TIG1heSBzdGlsbCBhY2Nlc3MgdGhlIGNvZGVjIGFuZCBzY3JldyB1cCB0aGUgZHJpdmVyCisgKi8KKyNkZWZpbmUgSVNfU0tMKHBjaSkgKChwY2kpLT52ZW5kb3IgPT0gMHg4MDg2ICYmIChwY2kpLT5kZXZpY2UgPT0gMHhhMTcwKQorI2RlZmluZSBJU19TS0xfTFAocGNpKSAoKHBjaSktPnZlbmRvciA9PSAweDgwODYgJiYgKHBjaSktPmRldmljZSA9PSAweDlkNzApCisjZGVmaW5lIElTX0JYVChwY2kpICgocGNpKS0+dmVuZG9yID09IDB4ODA4NiAmJiAocGNpKS0+ZGV2aWNlID09IDB4NWE5OCkKKyNkZWZpbmUgSVNfU0tMX1BMVVMocGNpKSAoSVNfU0tMKHBjaSkgfHwgSVNfU0tMX0xQKHBjaSkgfHwgSVNfQlhUKHBjaSkpCisKK3N0YXRpYyBpbnQgYXp4X2ZyZWV6ZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKKworCWlmIChJU19TS0xfUExVUyhwY2kpKQorCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF6eF90aGF3X25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOworCisJaWYgKElTX1NLTF9QTFVTKHBjaSkpCisJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYXp4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xMDM2LDYgKzEwOTMsMTAgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGF6eF9wbSA9IHsKIAlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhhenhfc3VzcGVuZCwgYXp4X3Jlc3VtZSkKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKwkuZnJlZXplX25vaXJxID0gYXp4X2ZyZWV6ZV9ub2lycSwKKwkudGhhd19ub2lycSA9IGF6eF90aGF3X25vaXJxLAorI2VuZGlmCiAJU0VUX1JVTlRJTUVfUE1fT1BTKGF6eF9ydW50aW1lX3N1c3BlbmQsIGF6eF9ydW50aW1lX3Jlc3VtZSwgYXp4X3J1bnRpbWVfaWRsZSkKIH07CiAKQEAgLTIxMjQsNiArMjE4NSw5IEBACiAJLyogU3VucmlzZSBQb2ludC1MUCAqLwogCXsgUENJX0RFVklDRSgweDgwODYsIDB4OWQ3MCksCiAJICAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1BDSCB8IEFaWF9EQ0FQU19JTlRFTF9TS1lMQUtFIH0sCisJLyogQnJveHRvbi1QKEFwb2xsb2xha2UpICovCisJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHg1YTk4KSwKKwkgIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfUENIIHwgQVpYX0RDQVBTX0lOVEVMX0JST1hUT04gfSwKIAkvKiBIYXN3ZWxsICovCiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHgwYTBjKSwKIAkgIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfSERNSSB8IEFaWF9EQ0FQU19JTlRFTF9IQVNXRUxMIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NhMDEzMi5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jYTAxMzIuYwppbmRleCBmOGExMmNhNC4uNGVmMjI1OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jYTAxMzIuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NhMDEzMi5jCkBAIC03NzgsNyArNzc4LDggQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjYTAxMzJfcXVpcmtzW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDY4NSwgIkFsaWVud2FyZSAxNSIsIFFVSVJLX0FMSUVOV0FSRSksCisJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDY4NSwgIkFsaWVud2FyZSAxNSAyMDE1IiwgUVVJUktfQUxJRU5XQVJFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNjg4LCAiQWxpZW53YXJlIDE3IDIwMTUiLCBRVUlSS19BTElFTldBUkUpLAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggYzhiOGVmNS4uZWYxOTg5MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtOTU1LDYgKzk1NSw3IEBACiAgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfZGV2aWNlX2lkIHNuZF9oZGFfaWRfY29uZXhhbnRbXSA9IHsKKwlIREFfQ09ERUNfRU5UUlkoMHgxNGYxMjAwOCwgIkNYODIwMCIsIHBhdGNoX2NvbmV4YW50X2F1dG8pLAogCUhEQV9DT0RFQ19FTlRSWSgweDE0ZjE1MDQ1LCAiQ1gyMDU0OSAoVmVuaWNlKSIsIHBhdGNoX2NvbmV4YW50X2F1dG8pLAogCUhEQV9DT0RFQ19FTlRSWSgweDE0ZjE1MDQ3LCAiQ1gyMDU1MSAoV2Fpa2lraSkiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKIAlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTA1MSwgIkNYMjA1NjEgKEhlcm1vc2EpIiwgcGF0Y2hfY29uZXhhbnRfYXV0byksCkBAIC05NzIsOSArOTczLDkgQEAKIAlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTBhYywgIkNYMjA2NTIiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKIAlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTBiOCwgIkNYMjA2NjQiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKIAlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTBiOSwgIkNYMjA2NjUiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKLQlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTBmMSwgIkNYMjA3MjEiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKKwlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTBmMSwgIkNYMjE3MjIiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKIAlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTBmMiwgIkNYMjA3MjIiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKLQlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTBmMywgIkNYMjA3MjMiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKKwlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTBmMywgIkNYMjE3MjQiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKIAlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTBmNCwgIkNYMjA3MjQiLCBwYXRjaF9jb25leGFudF9hdXRvKSwKIAlIREFfQ09ERUNfRU5UUlkoMHgxNGYxNTEwZiwgIkNYMjA3NTEvMiIsIHBhdGNoX2NvbmV4YW50X2F1dG8pLAogCUhEQV9DT0RFQ19FTlRSWSgweDE0ZjE1MTEwLCAiQ1gyMDc1MS8yIiwgcGF0Y2hfY29uZXhhbnRfYXV0byksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCmluZGV4IDYwY2Q5ZTcuLjRiNmZiNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCkBAIC0yMzUyLDYgKzIzNTIsMTIgQEAKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGF1ZGlvX3B0cjsKIAlpbnQgcGluX25pZCA9IHBvcnQgKyAweDA0OwogCisJLyogc2tpcCBub3RpZmljYXRpb24gZHVyaW5nIHN5c3RlbSBzdXNwZW5kIChidXQgbm90IGluIHJ1bnRpbWUgUE0pOworCSAqIHRoZSBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgYXQgcmVzdW1lCisJICovCisJaWYgKHNuZF9wb3dlcl9nZXRfc3RhdGUoY29kZWMtPmNhcmQpICE9IFNORFJWX0NUTF9QT1dFUl9EMCkKKwkJcmV0dXJuOworCiAJY2hlY2tfcHJlc2VuY2VfYW5kX3JlcG9ydChjb2RlYywgcGluX25pZCk7CiB9CiAKQEAgLTIzNzgsNyArMjM4NCw4IEBACiAJICogY2FuIGNvdmVyIHRoZSBjb2RlYyBwb3dlciByZXF1ZXN0LCBhbmQgc28gbmVlZCBub3Qgc2V0IHRoaXMgZmxhZy4KIAkgKiBGb3IgcHJldmlvdXMgcGxhdGZvcm1zLCB0aGVyZSBpcyBubyBzdWNoIHBvd2VyIHdlbGwgZmVhdHVyZS4KIAkgKi8KLQlpZiAoaXNfdmFsbGV5dmlld19wbHVzKGNvZGVjKSB8fCBpc19za3lsYWtlKGNvZGVjKSkKKwlpZiAoaXNfdmFsbGV5dmlld19wbHVzKGNvZGVjKSB8fCBpc19za3lsYWtlKGNvZGVjKSB8fAorCQkJaXNfYnJveHRvbihjb2RlYykpCiAJCWNvZGVjLT5jb3JlLmxpbmtfcG93ZXJfY29udHJvbCA9IDE7CiAKIAlpZiAoaXNfaGFzd2VsbF9wbHVzKGNvZGVjKSB8fCBpc192YWxsZXl2aWV3X3BsdXMoY29kZWMpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDJmN2IwNjUuLmZlOTY0MjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0xMTEsNiArMTExLDcgQEAKIAl2b2lkICgqcG93ZXJfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogI2VuZGlmCiAJdm9pZCAoKnNodXR1cCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCXZvaWQgKCpyZWJvb3Rfbm90aWZ5KShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIAlpbnQgaW5pdF9hbXA7CiAJaW50IGNvZGVjX3ZhcmlhbnQ7CS8qIGZsYWcgZm9yIG90aGVyIHZhcmlhbnRzICovCkBAIC03NzMsNiArNzc0LDI1IEBACiAJCXNuZF9oZGFfc2h1dHVwX3BpbnMoY29kZWMpOwogfQogCitzdGF0aWMgdm9pZCBhbGNfcmVib290X25vdGlmeShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCWlmIChzcGVjICYmIHNwZWMtPnJlYm9vdF9ub3RpZnkpCisJCXNwZWMtPnJlYm9vdF9ub3RpZnkoY29kZWMpOworCWVsc2UKKwkJYWxjX3NodXR1cChjb2RlYyk7Cit9CisKKy8qIHBvd2VyIGRvd24gY29kZWMgdG8gRDMgYXQgcmVib290L3NodXRkb3duOyBzZXQgYXMgcmVib290X25vdGlmeSBvcHMgKi8KK3N0YXRpYyB2b2lkIGFsY19kM19hdF9yZWJvb3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc25kX2hkYV9jb2RlY19zZXRfcG93ZXJfdG9fYWxsKGNvZGVjLCBjb2RlYy0+Y29yZS5hZmcsIEFDX1BXUlNUX0QzKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjb2RlYy0+Y29yZS5hZmcsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIEFDX1BXUlNUX0QzKTsKKwltc2xlZXAoMTApOworfQorCiAjZGVmaW5lIGFsY19mcmVlCXNuZF9oZGFfZ2VuX2ZyZWUKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtODE4LDcgKzgzOCw3IEBACiAJLnN1c3BlbmQgPSBhbGNfc3VzcGVuZCwKIAkuY2hlY2tfcG93ZXJfc3RhdHVzID0gc25kX2hkYV9nZW5fY2hlY2tfcG93ZXJfc3RhdHVzLAogI2VuZGlmCi0JLnJlYm9vdF9ub3RpZnkgPSBhbGNfc2h1dHVwLAorCS5yZWJvb3Rfbm90aWZ5ID0gYWxjX3JlYm9vdF9ub3RpZnksCiB9OwogCiAKQEAgLTE3NTUsMTAgKzE3NzUsMTIgQEAKIAlBTEM4ODlfRklYVVBfTUJBMTFfVlJFRiwKIAlBTEM4ODlfRklYVVBfTUJBMjFfVlJFRiwKIAlBTEM4ODlfRklYVVBfTVAxMV9WUkVGLAorCUFMQzg4OV9GSVhVUF9NUDQxX1ZSRUYsCiAJQUxDODgyX0ZJWFVQX0lOVl9ETUlDLAogCUFMQzg4Ml9GSVhVUF9OT19QUklNQVJZX0hQLAogCUFMQzg4N19GSVhVUF9BU1VTX0JBU1MsCiAJQUxDODg3X0ZJWFVQX0JBU1NfQ0hNQVAsCisJQUxDODgyX0ZJWFVQX0RJU0FCTEVfQUFNSVgsCiB9OwogCiBzdGF0aWMgdm9pZCBhbGM4ODlfZml4dXBfY29lZihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKQEAgLTE4NDIsNyArMTg2NCw3IEBACiAJCQkJICBjb25zdCBzdHJ1Y3QgaGRhX2ZpeHVwICpmaXgsIGludCBhY3Rpb24pCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RhdGljIGhkYV9uaWRfdCBuaWRzWzJdID0geyAweDE0LCAweDE1IH07CisJc3RhdGljIGhkYV9uaWRfdCBuaWRzWzNdID0geyAweDE0LCAweDE1LCAweDE5IH07CiAJaW50IGk7CiAKIAlpZiAoYWN0aW9uICE9IEhEQV9GSVhVUF9BQ1RfSU5JVCkKQEAgLTE5MjAsNiArMTk0Miw4IEBACiAKIHN0YXRpYyB2b2lkIGFsY19maXh1cF9iYXNzX2NobWFwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSBjb25zdCBzdHJ1Y3QgaGRhX2ZpeHVwICpmaXgsIGludCBhY3Rpb24pOworc3RhdGljIHZvaWQgYWxjX2ZpeHVwX2Rpc2FibGVfYWFtaXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBoZGFfZml4dXAgKmZpeCwgaW50IGFjdGlvbik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2ZpeHVwIGFsYzg4Ml9maXh1cHNbXSA9IHsKIAlbQUxDODgyX0ZJWFVQX0FCSVRfQVc5RF9NQVhdID0gewpAQCAtMjEzMCw2ICsyMTU0LDEyIEBACiAJCS5jaGFpbmVkID0gdHJ1ZSwKIAkJLmNoYWluX2lkID0gQUxDODg1X0ZJWFVQX01BQ1BST19HUElPLAogCX0sCisJW0FMQzg4OV9GSVhVUF9NUDQxX1ZSRUZdID0geworCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLAorCQkudi5mdW5jID0gYWxjODg5X2ZpeHVwX21icF92cmVmLAorCQkuY2hhaW5lZCA9IHRydWUsCisJCS5jaGFpbl9pZCA9IEFMQzg4NV9GSVhVUF9NQUNQUk9fR1BJTywKKwl9LAogCVtBTEM4ODJfRklYVVBfSU5WX0RNSUNdID0gewogCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLAogCQkudi5mdW5jID0gYWxjX2ZpeHVwX2ludl9kbWljLApAQCAtMjE1MSw2ICsyMTgxLDEwIEBACiAJCS50eXBlID0gSERBX0ZJWFVQX0ZVTkMsCiAJCS52LmZ1bmMgPSBhbGNfZml4dXBfYmFzc19jaG1hcCwKIAl9LAorCVtBTEM4ODJfRklYVVBfRElTQUJMRV9BQU1JWF0gPSB7CisJCS50eXBlID0gSERBX0ZJWFVQX0ZVTkMsCisJCS52LmZ1bmMgPSBhbGNfZml4dXBfZGlzYWJsZV9hYW1peCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg4Ml9maXh1cF90YmxbXSA9IHsKQEAgLTIyMDgsNyArMjI0Miw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4M2YwMCwgIk1hY2Jvb2sgNSwxIiwgQUxDODg5X0ZJWFVQX0lNQUM5MV9WUkVGKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MDAwLCAiTWFjYm9va1BybyA1LDEiLCBBTEM4ODlfRklYVVBfSU1BQzkxX1ZSRUYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDQxMDAsICJNYWNtaW5pIDMsMSIsIEFMQzg4OV9GSVhVUF9JTUFDOTFfVlJFRiksCi0JU05EX1BDSV9RVUlSSygweDEwNmIsIDB4NDIwMCwgIk1hYyBQcm8gNSwxIiwgQUxDODg1X0ZJWFVQX01BQ1BST19HUElPKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MjAwLCAiTWFjIFBybyA0LDEvNSwxIiwgQUxDODg5X0ZJWFVQX01QNDFfVlJFRiksCiAJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4NDMwMCwgImlNYWMgOSwxIiwgQUxDODg5X0ZJWFVQX0lNQUM5MV9WUkVGKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0NjAwLCAiTWFjYm9va1BybyA1LDIiLCBBTEM4ODlfRklYVVBfSU1BQzkxX1ZSRUYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDQ5MDAsICJpTWFjIDksMSBBbHVtaW51bSIsIEFMQzg4OV9GSVhVUF9JTUFDOTFfVlJFRiksCkBAIC0yMjE4LDYgKzIyNTIsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDczNTAsICJNU0ktNzM1MCIsIEFMQzg4OV9GSVhVUF9DRCksCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxNDYyLCAiTVNJIiwgQUxDODgyX0ZJWFVQX0dQSU8zKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgRVA0NS1EUzMvWjg3WC1VRDNIIiwgQUxDODg5X0ZJWFVQX0ZST05UX0hQX05PX1BSRVNFTkNFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMTgyLCAiR2lnYWJ5dGUgWjE3MFgtVUQzIiwgQUxDODgyX0ZJWFVQX0RJU0FCTEVfQUFNSVgpLAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDEwN2EsICJBYml0IEFXOUQtTUFYIiwgQUxDODgyX0ZJWFVQX0FCSVRfQVc5RF9NQVgpLAogCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTU1OCwgIkNsZXZvIGxhcHRvcCIsIEFMQzg4Ml9GSVhVUF9FQVBEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTYxZiwgMHgyMDU0LCAiTWVkaW9uIGxhcHRvcCIsIEFMQzg4M19GSVhVUF9FQVBEKSwKQEAgLTQxOTAsNiArNDIyNSw4IEBACiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKIAlpZiAoYWN0aW9uID09IEhEQV9GSVhVUF9BQ1RfUFJFX1BST0JFKSB7CisJCXNwZWMtPnNodXR1cCA9IGFsY19ub19zaHV0dXA7IC8qIHJlZHVjZSBjbGljayBub2lzZSAqLworCQlzcGVjLT5yZWJvb3Rfbm90aWZ5ID0gYWxjX2QzX2F0X3JlYm9vdDsgLyogcmVkdWNlIG5vaXNlICovCiAJCXNwZWMtPnBhcnNlX2ZsYWdzID0gSERBX1BJTkNGR19OT19IUF9GSVhVUDsKIAkJY29kZWMtPnBvd2VyX3NhdmVfbm9kZSA9IDA7IC8qIGF2b2lkIGNsaWNrIG5vaXNlcyAqLwogCQlzbmRfaGRhX2FwcGx5X3BpbmNmZ3MoY29kZWMsIHBpbmNmZ3MpOwpAQCAtNDU3MCw2ICs0NjA3LDcgQEAKIAlBTEMyNTVfRklYVVBfSEVBRFNFVF9NT0RFX05PX0hQX01JQywKIAlBTEMyOTNfRklYVVBfREVMTDFfTUlDX05PX1BSRVNFTkNFLAogCUFMQzI5Ml9GSVhVUF9UUFQ0NDBfRE9DSywKKwlBTEMyOTJfRklYVVBfVFBUNDQwLAogCUFMQzI4M19GSVhVUF9CWEJUMjgwN19NSUMsCiAJQUxDMjU1X0ZJWFVQX0RFTExfV01JX01JQ19NVVRFX0xFRCwKIAlBTEMyODJfRklYVVBfQVNQSVJFX1Y1X1BJTlMsCkBAIC00NTg1LDggKzQ2MjMsMTEgQEAKIAlBTEMyODhfRklYVVBfRElTQUJMRV9BQU1JWCwKIAlBTEMyOTJfRklYVVBfREVMTF9FN1gsCiAJQUxDMjkyX0ZJWFVQX0RJU0FCTEVfQUFNSVgsCisJQUxDMjkzX0ZJWFVQX0RJU0FCTEVfQUFNSVhfTVVMVElKQUNLLAogCUFMQzI5OF9GSVhVUF9ERUxMMV9NSUNfTk9fUFJFU0VOQ0UsCiAJQUxDMjc1X0ZJWFVQX0RFTExfWFBTLAorCUFMQzI1Nl9GSVhVUF9ERUxMX1hQU18xM19IRUFEUEhPTkVfTk9JU0UsCisJQUxDMjkzX0ZJWFVQX0xFTk9WT19TUEtfTk9JU0UsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9maXh1cCBhbGMyNjlfZml4dXBzW10gPSB7CkBAIC01MDQxLDYgKzUwODIsMTIgQEAKIAkJLmNoYWluZWQgPSB0cnVlLAogCQkuY2hhaW5faWQgPSBBTEMyNjlfRklYVVBfTElNSVRfSU5UX01JQ19CT09TVAogCX0sCisJW0FMQzI5Ml9GSVhVUF9UUFQ0NDBdID0geworCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLAorCQkudi5mdW5jID0gYWxjX2ZpeHVwX2Rpc2FibGVfYWFtaXgsCisJCS5jaGFpbmVkID0gdHJ1ZSwKKwkJLmNoYWluX2lkID0gQUxDMjkyX0ZJWFVQX1RQVDQ0MF9ET0NLLAorCX0sCiAJW0FMQzI4M19GSVhVUF9CWEJUMjgwN19NSUNdID0gewogCQkudHlwZSA9IEhEQV9GSVhVUF9QSU5TLAogCQkudi5waW5zID0gKGNvbnN0IHN0cnVjdCBoZGFfcGludGJsW10pIHsKQEAgLTUxNDAsNiArNTE4NywxMiBAQAogCQkuY2hhaW5lZCA9IHRydWUsCiAJCS5jaGFpbl9pZCA9IEFMQzI2OV9GSVhVUF9ERUxMMl9NSUNfTk9fUFJFU0VOQ0UKIAl9LAorCVtBTEMyOTNfRklYVVBfRElTQUJMRV9BQU1JWF9NVUxUSUpBQ0tdID0geworCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLAorCQkudi5mdW5jID0gYWxjX2ZpeHVwX2Rpc2FibGVfYWFtaXgsCisJCS5jaGFpbmVkID0gdHJ1ZSwKKwkJLmNoYWluX2lkID0gQUxDMjkzX0ZJWFVQX0RFTEwxX01JQ19OT19QUkVTRU5DRQorCX0sCiAJW0FMQzI5Ml9GSVhVUF9ERUxMX0U3WF0gPSB7CiAJCS50eXBlID0gSERBX0ZJWFVQX0ZVTkMsCiAJCS52LmZ1bmMgPSBhbGNfZml4dXBfZGVsbF94cHMxMywKQEAgLTUxNjcsNiArNTIyMCwyMyBAQAogCQkJe30KIAkJfQogCX0sCisJW0FMQzI1Nl9GSVhVUF9ERUxMX1hQU18xM19IRUFEUEhPTkVfTk9JU0VdID0geworCQkudHlwZSA9IEhEQV9GSVhVUF9WRVJCUywKKwkJLnYudmVyYnMgPSAoY29uc3Qgc3RydWN0IGhkYV92ZXJiW10pIHsKKwkJCS8qIERpc2FibGUgcGFzcy10aHJvdWdoIHBhdGggZm9yIEZST05UIDE0aCAqLworCQkJezB4MjAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDB4MzZ9LAorCQkJezB4MjAsIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHgxNzM3fSwKKwkJCXt9CisJCX0sCisJCS5jaGFpbmVkID0gdHJ1ZSwKKwkJLmNoYWluX2lkID0gQUxDMjU1X0ZJWFVQX0RFTEwxX01JQ19OT19QUkVTRU5DRQorCX0sCisJW0FMQzI5M19GSVhVUF9MRU5PVk9fU1BLX05PSVNFXSA9IHsKKwkJLnR5cGUgPSBIREFfRklYVVBfRlVOQywKKwkJLnYuZnVuYyA9IGFsY19maXh1cF9kaXNhYmxlX2FhbWl4LAorCQkuY2hhaW5lZCA9IHRydWUsCisJCS5jaGFpbl9pZCA9IEFMQzI2OV9GSVhVUF9USElOS1BBRF9BQ1BJCisJfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjlfZml4dXBfdGJsW10gPSB7CkBAIC01MTgwLDggKzUyNTAsMTAgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwNzQyLCAiQWNlciBBTzc1NiIsIEFMQzI3MV9GSVhVUF9IUF9HQVRFX01JQ19KQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwNzc1LCAiQWNlciBBc3BpcmUgRTEtNTcyIiwgQUxDMjcxX0ZJWFVQX0hQX0dBVEVfTUlDX0pBQ0tfRTFfNTcyKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwNzliLCAiQWNlciBBc3BpcmUgVjUtNTczRyIsIEFMQzI4Ml9GSVhVUF9BU1BJUkVfVjVfUElOUyksCisJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MTA2ZCwgIkFjZXIgQ2xvdWRib29rIDE0IiwgQUxDMjgzX0ZJWFVQX0NIUk9NRV9CT09LKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDcwLCAiRGVsbCBNMTAxeiIsIEFMQzI2OV9GSVhVUF9ERUxMX00xMDFaKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNTRiLCAiRGVsbCBYUFMgb25lIDI3MTAiLCBBTEMyNzVfRklYVVBfREVMTF9YUFMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA1YmQsICJEZWxsIExhdGl0dWRlIEU2NDQwIiwgQUxDMjkyX0ZJWFVQX0RFTExfRTdYKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNWNhLCAiRGVsbCBMYXRpdHVkZSBFNzI0MCIsIEFMQzI5Ml9GSVhVUF9ERUxMX0U3WCksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDVjYiwgIkRlbGwgTGF0aXR1ZGUgRTc0NDAiLCBBTEMyOTJfRklYVVBfREVMTF9FN1gpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA1ZGEsICJEZWxsIFZvc3RybyA1NDYwIiwgQUxDMjkwX0ZJWFVQX1NVQldPT0ZFUiksCkBAIC01MTk5LDExICs1MjcxLDEyIEBACiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDZjNywgIkRlbGwiLCBBTEMyNTVfRklYVVBfREVMTDFfTUlDX05PX1BSRVNFTkNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNmQ5LCAiRGVsbCIsIEFMQzI5M19GSVhVUF9ERUxMMV9NSUNfTk9fUFJFU0VOQ0UpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA2ZGEsICJEZWxsIiwgQUxDMjkzX0ZJWFVQX0RFTEwxX01JQ19OT19QUkVTRU5DRSksCi0JU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDZkYiwgIkRlbGwiLCBBTEMyOTJfRklYVVBfRElTQUJMRV9BQU1JWCksCi0JU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDZkZCwgIkRlbGwiLCBBTEMyOTJfRklYVVBfRElTQUJMRV9BQU1JWCksCi0JU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDZkZSwgIkRlbGwiLCBBTEMyOTJfRklYVVBfRElTQUJMRV9BQU1JWCksCi0JU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDZkZiwgIkRlbGwiLCBBTEMyOTJfRklYVVBfRElTQUJMRV9BQU1JWCksCi0JU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDZlMCwgIkRlbGwiLCBBTEMyOTJfRklYVVBfRElTQUJMRV9BQU1JWCksCisJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDZkYiwgIkRlbGwiLCBBTEMyOTNfRklYVVBfRElTQUJMRV9BQU1JWF9NVUxUSUpBQ0spLAorCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA2ZGQsICJEZWxsIiwgQUxDMjkzX0ZJWFVQX0RJU0FCTEVfQUFNSVhfTVVMVElKQUNLKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNmRlLCAiRGVsbCIsIEFMQzI5M19GSVhVUF9ESVNBQkxFX0FBTUlYX01VTFRJSkFDSyksCisJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDZkZiwgIkRlbGwiLCBBTEMyOTNfRklYVVBfRElTQUJMRV9BQU1JWF9NVUxUSUpBQ0spLAorCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDA2ZTAsICJEZWxsIiwgQUxDMjkzX0ZJWFVQX0RJU0FCTEVfQUFNSVhfTVVMVElKQUNLKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNzA0LCAiRGVsbCBYUFMgMTMiLCBBTEMyNTZfRklYVVBfREVMTF9YUFNfMTNfSEVBRFBIT05FX05PSVNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgxNjRhLCAiRGVsbCIsIEFMQzI5M19GSVhVUF9ERUxMMV9NSUNfTk9fUFJFU0VOQ0UpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDE2NGIsICJEZWxsIiwgQUxDMjkzX0ZJWFVQX0RFTEwxX01JQ19OT19QUkVTRU5DRSksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTU4NiwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX01VVEVfTEVEX01JQzIpLApAQCAtNTMwMiwxNSArNTM3NSwxNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxZmIsICJUaGlua3BhZCBUNDMwcyIsIEFMQzI2OV9GSVhVUF9MRU5PVk9fRE9DSyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjIwMywgIlRoaW5rcGFkIFgyMzAgVGFibGV0IiwgQUxDMjY5X0ZJWFVQX0xFTk9WT19ET0NLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMjA4LCAiVGhpbmtwYWQgVDQzMXMiLCBBTEMyNjlfRklYVVBfTEVOT1ZPX0RPQ0spLAotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIyMGMsICJUaGlua3BhZCBUNDQwcyIsIEFMQzI5Ml9GSVhVUF9UUFQ0NDBfRE9DSyksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjIwYywgIlRoaW5rcGFkIFQ0NDBzIiwgQUxDMjkyX0ZJWFVQX1RQVDQ0MCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjIwZSwgIlRoaW5rcGFkIFQ0NDBwIiwgQUxDMjkyX0ZJWFVQX1RQVDQ0MF9ET0NLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMjEwLCAiVGhpbmtwYWQgVDU0MHAiLCBBTEMyOTJfRklYVVBfVFBUNDQwX0RPQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIyMTEsICJUaGlua3BhZCBXNTQxIiwgQUxDMjkyX0ZJWFVQX1RQVDQ0MF9ET0NLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMjEyLCAiVGhpbmtwYWQgVDQ0MCIsIEFMQzI5Ml9GSVhVUF9UUFQ0NDBfRE9DSyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjIxNCwgIlRoaW5rcGFkIFgyNDAiLCBBTEMyOTJfRklYVVBfVFBUNDQwX0RPQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIyMTUsICJUaGlua3BhZCIsIEFMQzI2OV9GSVhVUF9MSU1JVF9JTlRfTUlDX0JPT1NUKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMjE4LCAiVGhpbmtwYWQgWDEgQ2FyYm9uIDJuZCIsIEFMQzI5Ml9GSVhVUF9UUFQ0NDBfRE9DSyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjIyMywgIlRoaW5rUGFkIFQ1NTAiLCBBTEMyOTJfRklYVVBfVFBUNDQwX0RPQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIyMjYsICJUaGlua1BhZCBYMjUwIiwgQUxDMjkyX0ZJWFVQX1RQVDQ0MF9ET0NLKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMjMzLCAiVGhpbmtwYWQiLCBBTEMyOTNfRklYVVBfTEVOT1ZPX1NQS19OT0lTRSksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4Mzk3NywgIklkZWFQYWQgUzIxMCIsIEFMQzI4M19GSVhVUF9JTlRfTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOTc4LCAiSWRlYVBhZCBZNDEwUCIsIEFMQzI2OV9GSVhVUF9OT19TSFVUVVApLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDUwMTMsICJUaGlua3BhZCIsIEFMQzI2OV9GSVhVUF9MSU1JVF9JTlRfTUlDX0JPT1NUKSwKQEAgLTUzMjAsNiArNTM5NSw3IEBACiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4NTAzNCwgIlRoaW5rcGFkIFQ0NTAiLCBBTEMyOTJfRklYVVBfVFBUNDQwX0RPQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDUwMzYsICJUaGlua3BhZCBUNDUwcyIsIEFMQzI5Ml9GSVhVUF9UUFQ0NDBfRE9DSyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4NTAzYywgIlRoaW5rcGFkIEw0NTAiLCBBTEMyOTJfRklYVVBfVFBUNDQwX0RPQ0spLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDUwNGIsICJUaGlua3BhZCIsIEFMQzI5M19GSVhVUF9MRU5PVk9fU1BLX05PSVNFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHg1MTA5LCAiVGhpbmtwYWQiLCBBTEMyNjlfRklYVVBfTElNSVRfSU5UX01JQ19CT09TVCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2JmOCwgIlF1YW50YSBGTDEiLCBBTEMyNjlfRklYVVBfUENNXzQ0SyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4OWU1NCwgIkxFTk9WTyBOQiIsIEFMQzI2OV9GSVhVUF9MRU5PVk9fRUFQRCksCkBAIC01NDAwLDYgKzU0NzYsNyBAQAogCXsuaWQgPSBBTEMyODNfRklYVVBfQ0hST01FX0JPT0ssIC5uYW1lID0gImFsYzI4My1kYWMtd2NhcHMifSwKIAl7LmlkID0gQUxDMjgzX0ZJWFVQX1NFTlNFX0NPTUJPX0pBQ0ssIC5uYW1lID0gImFsYzI4My1zZW5zZS1jb21ibyJ9LAogCXsuaWQgPSBBTEMyOTJfRklYVVBfVFBUNDQwX0RPQ0ssIC5uYW1lID0gInRwdDQ0MC1kb2NrIn0sCisJey5pZCA9IEFMQzI5Ml9GSVhVUF9UUFQ0NDAsIC5uYW1lID0gInRwdDQ0MCJ9LAogCXt9CiB9OwogCkBAIC02Mzg2LDYgKzY0NjMsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzY2Ml9maXh1cF90YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg5MDg3LCAiRUNTIiwgQUxDNjYyX0ZJWFVQX0FTVVNfTU9ERTIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAyMmYsICJBY2VyIEFzcGlyZSBPbmUiLCBBTEM2NjJfRklYVVBfSU5WX0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAyNDEsICJQYWNrYXJkIEJlbGwgRE9UUyIsIEFMQzY2Ml9GSVhVUF9JTlZfRE1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDMwOCwgIkFjZXIgQXNwaXJlIDg5NDJHIiwgQUxDNjYyX0ZJWFVQX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDMxYywgIkdhdGV3YXkgTlY3OSIsIEFMQzY2Ml9GSVhVUF9TS1VfSUdOT1JFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMzQ5LCAiZU1hY2hpbmVzIGVNMjUwIiwgQUxDNjYyX0ZJWFVQX0lOVl9ETUlDKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCA4MjYxMjJkLi4yYzdjNWViIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC0zMTEwLDYgKzMxMTAsMjkgQEAKIAlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7CiB9CiAKK3N0YXRpYyBib29sIGlzX2hwX291dHB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbikKK3sKKwl1bnNpZ25lZCBpbnQgcGluX2NmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgcGluKTsKKworCS8qIGNvdW50IGxpbmUtb3V0LCB0b28sIGFzIEJJT1Mgc2V0cyBvZnRlbiBzbyAqLworCXJldHVybiBnZXRfZGVmY2ZnX2Nvbm5lY3QocGluX2NmZykgIT0gQUNfSkFDS19QT1JUX05PTkUgJiYKKwkJKGdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfTElORV9PVVQgfHwKKwkJIGdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfSFBfT1VUKTsKK30KKworc3RhdGljIHZvaWQgZml4dXBfaHBfaGVhZHBob25lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluKQoreworCXVuc2lnbmVkIGludCBwaW5fY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4pOworCisJLyogSXQgd2FzIGNoYW5nZWQgaW4gdGhlIEJJT1MgdG8ganVzdCBzYXRpc2Z5IE1TIERUTS4KKwkgKiBMZXRzIHR1cm4gaXQgYmFjayBpbnRvIHNsYXZlZCBIUAorCSAqLworCXBpbl9jZmcgPSAocGluX2NmZyAmICh+QUNfREVGQ0ZHX0RFVklDRSkpIHwKKwkJKEFDX0pBQ0tfSFBfT1VUIDw8IEFDX0RFRkNGR19ERVZJQ0VfU0hJRlQpOworCXBpbl9jZmcgPSAocGluX2NmZyAmICh+KEFDX0RFRkNGR19ERUZfQVNTT0MgfCBBQ19ERUZDRkdfU0VRVUVOQ0UpKSkgfAorCQkweDFmOworCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgcGluLCBwaW5fY2ZnKTsKK30KIAogc3RhdGljIHZvaWQgc3RhYzkyaGQ3MWJ4eF9maXh1cF9ocChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaGRhX2ZpeHVwICpmaXgsIGludCBhY3Rpb24pCkBAIC0zMTE5LDIyICszMTQyLDEyIEBACiAJaWYgKGFjdGlvbiAhPSBIREFfRklYVVBfQUNUX1BSRV9QUk9CRSkKIAkJcmV0dXJuOwogCi0JaWYgKGhwX2JsaWtlX3N5c3RlbShjb2RlYy0+Y29yZS5zdWJzeXN0ZW1faWQpKSB7Ci0JCXVuc2lnbmVkIGludCBwaW5fY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDBmKTsKLQkJaWYgKGdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfTElORV9PVVQgfHwKLQkJCWdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfU1BFQUtFUiAgfHwKLQkJCWdldF9kZWZjZmdfZGV2aWNlKHBpbl9jZmcpID09IEFDX0pBQ0tfSFBfT1VUKSB7Ci0JCQkvKiBJdCB3YXMgY2hhbmdlZCBpbiB0aGUgQklPUyB0byBqdXN0IHNhdGlzZnkgTVMgRFRNLgotCQkJICogTGV0cyB0dXJuIGl0IGJhY2sgaW50byBzbGF2ZWQgSFAKLQkJCSAqLwotCQkJcGluX2NmZyA9IChwaW5fY2ZnICYgKH5BQ19ERUZDRkdfREVWSUNFKSkKLQkJCQkJfCAoQUNfSkFDS19IUF9PVVQgPDwKLQkJCQkJCUFDX0RFRkNGR19ERVZJQ0VfU0hJRlQpOwotCQkJcGluX2NmZyA9IChwaW5fY2ZnICYgKH4oQUNfREVGQ0ZHX0RFRl9BU1NPQwotCQkJCQkJCXwgQUNfREVGQ0ZHX1NFUVVFTkNFKSkpCi0JCQkJCQkJCXwgMHgxZjsKLQkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZiwgcGluX2NmZyk7Ci0JCX0KKwkvKiB3aGVuIGJvdGggb3V0cHV0IEEgYW5kIEYgYXJlIGFzc2lnbmVkLCB0aGVzZSBhcmUgc3VwcG9zZWRseQorCSAqIGRvY2sgYW5kIGJ1aWx0LWluIGhlYWRwaG9uZXM7IGZpeCBib3RoIHBpbiBjb25maWdzCisJICovCisJaWYgKGlzX2hwX291dHB1dChjb2RlYywgMHgwYSkgJiYgaXNfaHBfb3V0cHV0KGNvZGVjLCAweDBmKSkgeworCQlmaXh1cF9ocF9oZWFkcGhvbmUoY29kZWMsIDB4MGEpOworCQlmaXh1cF9ocF9oZWFkcGhvbmUoY29kZWMsIDB4MGYpOwogCX0KIAogCWlmIChmaW5kX211dGVfbGVkX2NmZyhjb2RlYywgMSkpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDcxNGRmOTAuLjQxYzMxZGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC03NDEsMTAgKzc0MSwxMSBAQAogCXsKIAkJLyogY2hhbmdlIHRvL2Zyb20gZG91YmxlLXNwZWVkOiByZXNldCB0aGUgREFDIChpZiBhdmFpbGFibGUpICovCiAJCXNuZF9ybWU5Nl9yZXNldF9kYWMocm1lOTYpOworCQlyZXR1cm4gMTsgLyogbmVlZCB0byByZXN0b3JlIHZvbHVtZSAqLwogCX0gZWxzZSB7CiAJCXdyaXRlbChybWU5Ni0+d2NyZWcsIHJtZTk2LT5pb2Jhc2UgKyBSTUU5Nl9JT19DT05UUk9MX1JFR0lTVEVSKTsKKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC05ODAsNiArOTgxLDcgQEAKIAlzdHJ1Y3Qgcm1lOTYgKnJtZTk2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGVyciwgcmF0ZSwgZHVtbXk7CisJYm9vbCBhcHBseV9kYWNfdm9sdW1lID0gZmFsc2U7CiAKIAlydW50aW1lLT5kbWFfYXJlYSA9ICh2b2lkIF9fZm9yY2UgKikocm1lOTYtPmlvYmFzZSArCiAJCQkJCSAgICAgUk1FOTZfSU9fUExBWV9CVUZGRVIpOwpAQCAtOTkzLDI0ICs5OTUsMjYgQEAKIAl7CiAgICAgICAgICAgICAgICAgLyogc2xhdmUgY2xvY2sgKi8KICAgICAgICAgICAgICAgICBpZiAoKGludClwYXJhbXNfcmF0ZShwYXJhbXMpICE9IHJhdGUpIHsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcm1lOTYtPmxvY2spOwotCQkJcmV0dXJuIC1FSU87ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB9Ci0JfSBlbHNlIGlmICgoZXJyID0gc25kX3JtZTk2X3BsYXliYWNrX3NldHJhdGUocm1lOTYsIHBhcmFtc19yYXRlKHBhcmFtcykpKSA8IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZybWU5Ni0+bG9jayk7Ci0JCXJldHVybiBlcnI7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0gZWxzZSB7CisJCWVyciA9IHNuZF9ybWU5Nl9wbGF5YmFja19zZXRyYXRlKHJtZTk2LCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycm9yOworCQlhcHBseV9kYWNfdm9sdW1lID0gZXJyID4gMDsgLyogbmVlZCB0byByZXN0b3JlIHZvbHVtZSBsYXRlcj8gKi8KIAl9Ci0JaWYgKChlcnIgPSBzbmRfcm1lOTZfcGxheWJhY2tfc2V0Zm9ybWF0KHJtZTk2LCBwYXJhbXNfZm9ybWF0KHBhcmFtcykpKSA8IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZybWU5Ni0+bG9jayk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCisJZXJyID0gc25kX3JtZTk2X3BsYXliYWNrX3NldGZvcm1hdChybWU5NiwgcGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvcjsKIAlzbmRfcm1lOTZfc2V0ZnJhbWVsb2cocm1lOTYsIHBhcmFtc19jaGFubmVscyhwYXJhbXMpLCAxKTsKIAlpZiAocm1lOTYtPmNhcHR1cmVfcGVyaW9kc2l6ZSAhPSAwKSB7CiAJCWlmIChwYXJhbXNfcGVyaW9kX3NpemUocGFyYW1zKSA8PCBybWU5Ni0+cGxheWJhY2tfZnJsb2cgIT0KIAkJICAgIHJtZTk2LT5jYXB0dXJlX3BlcmlvZHNpemUpCiAJCXsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcm1lOTYtPmxvY2spOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyb3I7CiAJCX0KIAl9CiAJcm1lOTYtPnBsYXliYWNrX3BlcmlvZHNpemUgPQpAQCAtMTAyMSw5ICsxMDI1LDE2IEBACiAJCXJtZTk2LT53Y3JlZyAmPSB+KFJNRTk2X1dDUl9QUk8gfCBSTUU5Nl9XQ1JfRE9MQlkgfCBSTUU5Nl9XQ1JfRU1QKTsKIAkJd3JpdGVsKHJtZTk2LT53Y3JlZyB8PSBybWU5Ni0+d2NyZWdfc3BkaWZfc3RyZWFtLCBybWU5Ni0+aW9iYXNlICsgUk1FOTZfSU9fQ09OVFJPTF9SRUdJU1RFUik7CiAJfQorCisJZXJyID0gMDsKKyBlcnJvcjoKIAlzcGluX3VubG9ja19pcnEoJnJtZTk2LT5sb2NrKTsKLQkJCi0JcmV0dXJuIDA7CisJaWYgKGFwcGx5X2RhY192b2x1bWUpIHsKKwkJdXNsZWVwX3JhbmdlKDMwMDAsIDEwMDAwKTsKKwkJc25kX3JtZTk2X2FwcGx5X2RhY192b2x1bWUocm1lOTYpOworCX0KKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9LY29uZmlnIGIvc291bmQvc29jL0tjb25maWcKaW5kZXggN2ZmN2Q4OC4uN2VhNjZlZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL0tjb25maWcKKysrIGIvc291bmQvc29jL0tjb25maWcKQEAgLTM4LDYgKzM4LDcgQEAKIAogIyBBbGwgdGhlIHN1cHBvcnRlZCBTb0NzCiBzb3VyY2UgInNvdW5kL3NvYy9hZGkvS2NvbmZpZyIKK3NvdXJjZSAic291bmQvc29jL2FtZC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvYXRtZWwvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL2F1MXgvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL2JjbS9LY29uZmlnIgpAQCAtNTAsNiArNTEsNyBAQAogc291cmNlICJzb3VuZC9zb2MvbnVjOTAwL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9vbWFwL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9raXJrd29vZC9LY29uZmlnIgorc291cmNlICJzb3VuZC9zb2MvaW1nL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9pbnRlbC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvbWVkaWF0ZWsvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL214cy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL01ha2VmaWxlIGIvc291bmQvc29jL01ha2VmaWxlCmluZGV4IDhlYjA2ZGIuLjlhMzBmMjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBjb2RlY3MvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gZ2VuZXJpYy8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBhZGkvCitvYmotJChDT05GSUdfU05EX1NPQykJKz0gYW1kLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGF0bWVsLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGF1MXgvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gYmNtLwpAQCAtMjcsNiArMjgsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGR3Yy8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBmc2wvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gano0NzQwLworb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGltZy8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBpbnRlbC8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBtZWRpYXRlay8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBteHMvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL0tjb25maWcgYi9zb3VuZC9zb2MvYW1kL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxODdlYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9hbWQvS2NvbmZpZwpAQCAtMCwwICsxLDQgQEAKK2NvbmZpZyBTTkRfU09DX0FNRF9BQ1AKKwl0cmlzdGF0ZSAiQU1EIEF1ZGlvIENvcHJvY2Vzc29yIHN1cHBvcnQiCisJaGVscAorCSBUaGlzIG9wdGlvbiBlbmFibGVzIEFDUCBETUEgc3VwcG9ydCBvbiBBTUQgcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL01ha2VmaWxlIGIvc291bmQvc29jL2FtZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTY2ZWMwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2FtZC9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK3NuZC1zb2MtYWNwLXBjbS1vYmpzCTo9IGFjcC1wY20tZG1hLm8KKworb2JqLSQoQ09ORklHX1NORF9TT0NfQU1EX0FDUCkgKz0gc25kLXNvYy1hY3AtcGNtLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hbWQvYWNwLXBjbS1kbWEuYyBiL3NvdW5kL3NvYy9hbWQvYWNwLXBjbS1kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTkxZTBhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2FtZC9hY3AtcGNtLWRtYS5jCkBAIC0wLDAgKzEsMTA0MyBAQAorLyoKKyAqIEFNRCBBTFNBIFNvQyBQQ00gRHJpdmVyIGZvciBBQ1AgMi54CisgKgorICogQ29weXJpZ2h0IDIwMTQtMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgImFjcC5oIgorCisjZGVmaW5lIFBMQVlCQUNLX01JTl9OVU1fUEVSSU9EUyAgICAyCisjZGVmaW5lIFBMQVlCQUNLX01BWF9OVU1fUEVSSU9EUyAgICAyCisjZGVmaW5lIFBMQVlCQUNLX01BWF9QRVJJT0RfU0laRSAgICAxNjM4NAorI2RlZmluZSBQTEFZQkFDS19NSU5fUEVSSU9EX1NJWkUgICAgMTAyNAorI2RlZmluZSBDQVBUVVJFX01JTl9OVU1fUEVSSU9EUyAgICAgMgorI2RlZmluZSBDQVBUVVJFX01BWF9OVU1fUEVSSU9EUyAgICAgMgorI2RlZmluZSBDQVBUVVJFX01BWF9QRVJJT0RfU0laRSAgICAgMTYzODQKKyNkZWZpbmUgQ0FQVFVSRV9NSU5fUEVSSU9EX1NJWkUgICAgIDEwMjQKKworI2RlZmluZSBNQVhfQlVGRkVSIChQTEFZQkFDS19NQVhfUEVSSU9EX1NJWkUgKiBQTEFZQkFDS19NQVhfTlVNX1BFUklPRFMpCisjZGVmaW5lIE1JTl9CVUZGRVIgTUFYX0JVRkZFUgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgYWNwX3BjbV9oYXJkd2FyZV9wbGF5YmFjayA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfCBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8IFNORFJWX1BDTV9JTkZPX0JBVENIIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDgsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkucmF0ZV9taW4gPSA4MDAwLAorCS5yYXRlX21heCA9IDk2MDAwLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gUExBWUJBQ0tfTUFYX05VTV9QRVJJT0RTICogUExBWUJBQ0tfTUFYX1BFUklPRF9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gUExBWUJBQ0tfTUlOX1BFUklPRF9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gUExBWUJBQ0tfTUFYX1BFUklPRF9TSVpFLAorCS5wZXJpb2RzX21pbiA9IFBMQVlCQUNLX01JTl9OVU1fUEVSSU9EUywKKwkucGVyaW9kc19tYXggPSBQTEFZQkFDS19NQVhfTlVNX1BFUklPRFMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgYWNwX3BjbV9oYXJkd2FyZV9jYXB0dXJlID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwgU05EUlZfUENNX0lORk9fQkFUQ0ggfAorCSAgICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRSwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkuY2hhbm5lbHNfbWluID0gMSwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCS5yYXRlX21pbiA9IDgwMDAsCisJLnJhdGVfbWF4ID0gNDgwMDAsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSBDQVBUVVJFX01BWF9OVU1fUEVSSU9EUyAqIENBUFRVUkVfTUFYX1BFUklPRF9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gQ0FQVFVSRV9NSU5fUEVSSU9EX1NJWkUsCisJLnBlcmlvZF9ieXRlc19tYXggPSBDQVBUVVJFX01BWF9QRVJJT0RfU0laRSwKKwkucGVyaW9kc19taW4gPSBDQVBUVVJFX01JTl9OVU1fUEVSSU9EUywKKwkucGVyaW9kc19tYXggPSBDQVBUVVJFX01BWF9OVU1fUEVSSU9EUywKK307CisKK3N0cnVjdCBhdWRpb19kcnZfZGF0YSB7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwbGF5X3N0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmNhcHR1cmVfc3RyZWFtOworCXZvaWQgX19pb21lbSAqYWNwX21taW87Cit9OworCitzdGF0aWMgdTMyIGFjcF9yZWdfcmVhZCh2b2lkIF9faW9tZW0gKmFjcF9tbWlvLCB1MzIgcmVnKQoreworCXJldHVybiByZWFkbChhY3BfbW1pbyArIChyZWcgKiA0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFjcF9yZWdfd3JpdGUodTMyIHZhbCwgdm9pZCBfX2lvbWVtICphY3BfbW1pbywgdTMyIHJlZykKK3sKKwl3cml0ZWwodmFsLCBhY3BfbW1pbyArIChyZWcgKiA0KSk7Cit9CisKKy8qIENvbmZpZ3VyZSBhIGdpdmVuIGRtYSBjaGFubmVsIHBhcmFtZXRlcnMgLSBlbmFibGUvZGlzYmxlLAorICogbnVtYmVyIG9mIGRlc2NyaXB0b3JzLCBwcmlvcml0eQorICovCitzdGF0aWMgdm9pZCBjb25maWdfYWNwX2RtYV9jaGFubmVsKHZvaWQgX19pb21lbSAqYWNwX21taW8sIHU4IGNoX251bSwKKwkJCQkgICB1MTYgZHNjcl9zdHJ0X2lkeCwgdTE2IG51bV9kc2NycywKKwkJCQkgICBlbnVtIGFjcF9kbWFfcHJpb3JpdHlfbGV2ZWwgcHJpb3JpdHlfbGV2ZWwpCit7CisJdTMyIGRtYV9jdHJsOworCisJLyogZGlzYWJsZSB0aGUgY2hhbm5lbCBydW4gZmllbGQgKi8KKwlkbWFfY3RybCA9IGFjcF9yZWdfcmVhZChhY3BfbW1pbywgbW1BQ1BfRE1BX0NOVExfMCArIGNoX251bSk7CisJZG1hX2N0cmwgJj0gfkFDUF9ETUFfQ05UTF8wX19ETUFDaFJ1bl9NQVNLOworCWFjcF9yZWdfd3JpdGUoZG1hX2N0cmwsIGFjcF9tbWlvLCBtbUFDUF9ETUFfQ05UTF8wICsgY2hfbnVtKTsKKworCS8qIHByb2dyYW0gYSBETUEgY2hhbm5lbCB3aXRoIGZpcnN0IGRlc2NyaXB0b3IgdG8gYmUgcHJvY2Vzc2VkLiAqLworCWFjcF9yZWdfd3JpdGUoKEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8wX19ETUFDaERzY3JTdHJ0SWR4X01BU0sKKwkJCSYgZHNjcl9zdHJ0X2lkeCksCisJCQlhY3BfbW1pbywgbW1BQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfMCArIGNoX251bSk7CisKKwkvKiBwcm9ncmFtIGEgRE1BIGNoYW5uZWwgd2l0aCB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIGJlCisJICogcHJvY2Vzc2VkIGluIHRoZSB0cmFuc2ZlcgorCSovCisJYWNwX3JlZ193cml0ZShBQ1BfRE1BX0RTQ1JfQ05UXzBfX0RNQUNoRHNjckNudF9NQVNLICYgbnVtX2RzY3JzLAorCQlhY3BfbW1pbywgbW1BQ1BfRE1BX0RTQ1JfQ05UXzAgKyBjaF9udW0pOworCisJLyogc2V0IERNQSBjaGFubmVsIHByaW9yaXR5ICovCisJYWNwX3JlZ193cml0ZShwcmlvcml0eV9sZXZlbCwgYWNwX21taW8sIG1tQUNQX0RNQV9QUklPXzAgKyBjaF9udW0pOworfQorCisvKiBJbml0aWFsaXplIGEgZG1hIGRlc2NyaXB0b3IgaW4gU1JBTSBiYXNlZCBvbiBkZXNjcml0b3IgaW5mb3JtYXRpb24gcGFzc2VkICovCitzdGF0aWMgdm9pZCBjb25maWdfZG1hX2Rlc2NyaXB0b3JfaW5fc3JhbSh2b2lkIF9faW9tZW0gKmFjcF9tbWlvLAorCQkJCQkgIHUxNiBkZXNjcl9pZHgsCisJCQkJCSAgYWNwX2RtYV9kc2NyX3RyYW5zZmVyX3QgKmRlc2NyX2luZm8pCit7CisJdTMyIHNyYW1fb2Zmc2V0OworCisJc3JhbV9vZmZzZXQgPSAoZGVzY3JfaWR4ICogc2l6ZW9mKGFjcF9kbWFfZHNjcl90cmFuc2Zlcl90KSk7CisKKwkvKiBwcm9ncmFtIHRoZSBzb3VyY2UgYmFzZSBhZGRyZXNzLiAqLworCWFjcF9yZWdfd3JpdGUoc3JhbV9vZmZzZXQsIGFjcF9tbWlvLCBtbUFDUF9TUkJNX1RhcmdfSWR4X0FkZHIpOworCWFjcF9yZWdfd3JpdGUoZGVzY3JfaW5mby0+c3JjLAlhY3BfbW1pbywgbW1BQ1BfU1JCTV9UYXJnX0lkeF9EYXRhKTsKKwkvKiBwcm9ncmFtIHRoZSBkZXN0aW5hdGlvbiBiYXNlIGFkZHJlc3MuICovCisJYWNwX3JlZ193cml0ZShzcmFtX29mZnNldCArIDQsCWFjcF9tbWlvLCBtbUFDUF9TUkJNX1RhcmdfSWR4X0FkZHIpOworCWFjcF9yZWdfd3JpdGUoZGVzY3JfaW5mby0+ZGVzdCwgYWNwX21taW8sIG1tQUNQX1NSQk1fVGFyZ19JZHhfRGF0YSk7CisKKwkvKiBwcm9ncmFtIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQgZm9yIHRoaXMgZGVzY3JpcHRvci4gKi8KKwlhY3BfcmVnX3dyaXRlKHNyYW1fb2Zmc2V0ICsgOCwJYWNwX21taW8sIG1tQUNQX1NSQk1fVGFyZ19JZHhfQWRkcik7CisJYWNwX3JlZ193cml0ZShkZXNjcl9pbmZvLT54ZmVyX3ZhbCwgYWNwX21taW8sIG1tQUNQX1NSQk1fVGFyZ19JZHhfRGF0YSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIERNQSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGZvciB0cmFuc2ZlciBiZXR3ZWVuCisgKiBzeXN0ZW0gbWVtb3J5IDwtPiBBQ1AgU1JBTQorICovCitzdGF0aWMgdm9pZCBzZXRfYWNwX3N5c21lbV9kbWFfZGVzY3JpcHRvcnModm9pZCBfX2lvbWVtICphY3BfbW1pbywKKwkJCQkJICAgdTMyIHNpemUsIGludCBkaXJlY3Rpb24sCisJCQkJCSAgIHUzMiBwdGVfb2Zmc2V0KQoreworCXUxNiBpOworCXUxNiBkbWFfZHNjcl9pZHggPSBQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMjsKKwlhY3BfZG1hX2RzY3JfdHJhbnNmZXJfdCBkbWFkc2NyW05VTV9EU0NSU19QRVJfQ0hBTk5FTF07CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0RTQ1JTX1BFUl9DSEFOTkVMOyBpKyspIHsKKwkJZG1hZHNjcltpXS54ZmVyX3ZhbCA9IDA7CisJCWlmIChkaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQkJZG1hX2RzY3JfaWR4ID0gUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTIgKyBpOworCQkJZG1hZHNjcltpXS5kZXN0ID0gQUNQX1NIQVJFRF9SQU1fQkFOS18xX0FERFJFU1MgKworCQkJCQkoc2l6ZSAvIDIpIC0gKGkgKiAoc2l6ZS8yKSk7CisJCQlkbWFkc2NyW2ldLnNyYyA9IEFDUF9JTlRFUk5BTF9BUEVSVFVSRV9XSU5ET1dfMF9BRERSRVNTCisJCQkJKyAocHRlX29mZnNldCAqIFNaXzRLKSArIChpICogKHNpemUvMikpOworCQkJZG1hZHNjcltpXS54ZmVyX3ZhbCB8PQorCQkJKEFDUF9ETUFfQVRUUklCVVRFU19EQUdCX09OSU9OX1RPX1NIQVJFRE1FTSA8PCAxNikgfAorCQkJKHNpemUgLyAyKTsKKwkJfSBlbHNlIHsKKwkJCWRtYV9kc2NyX2lkeCA9IENBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTQgKyBpOworCQkJZG1hZHNjcltpXS5zcmMgPSBBQ1BfU0hBUkVEX1JBTV9CQU5LXzVfQUREUkVTUyArCisJCQkJCShpICogKHNpemUvMikpOworCQkJZG1hZHNjcltpXS5kZXN0ID0gQUNQX0lOVEVSTkFMX0FQRVJUVVJFX1dJTkRPV18wX0FERFJFU1MKKwkJCQkJCSsgKHB0ZV9vZmZzZXQgKiBTWl80SykgKworCQkJCQkJKGkgKiAoc2l6ZS8yKSk7CisJCQlkbWFkc2NyW2ldLnhmZXJfdmFsIHw9CisJCQlCSVQoMjIpIHwKKwkJCShBQ1BfRE1BX0FUVFJJQlVURVNfU0hBUkVETUVNX1RPX0RBR0JfT05JT04gPDwgMTYpIHwKKwkJCShzaXplIC8gMik7CisJCX0KKwkJY29uZmlnX2RtYV9kZXNjcmlwdG9yX2luX3NyYW0oYWNwX21taW8sIGRtYV9kc2NyX2lkeCwKKwkJCQkJCSZkbWFkc2NyW2ldKTsKKwl9CisJaWYgKGRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQljb25maWdfYWNwX2RtYV9jaGFubmVsKGFjcF9tbWlvLCBTWVNSQU1fVE9fQUNQX0NIX05VTSwKKwkJCQkJUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTIsCisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5FTCwKKwkJCQkJQUNQX0RNQV9QUklPUklUWV9MRVZFTF9OT1JNQUwpOworCWVsc2UKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChhY3BfbW1pbywgQUNQX1RPX1NZU1JBTV9DSF9OVU0sCisJCQkJCUNBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTQsCisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5FTCwKKwkJCQkJQUNQX0RNQV9QUklPUklUWV9MRVZFTF9OT1JNQUwpOworfQorCisvKiBJbml0aWFsaXplIHRoZSBETUEgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiBmb3IgdHJhbnNmZXIgYmV0d2VlbgorICogQUNQIFNSQU0gPC0+IEkyUworICovCitzdGF0aWMgdm9pZCBzZXRfYWNwX3RvX2kyc19kbWFfZGVzY3JpcHRvcnModm9pZCBfX2lvbWVtICphY3BfbW1pbywKKwkJCQkJICAgdTMyIHNpemUsIGludCBkaXJlY3Rpb24pCit7CisKKwl1MTYgaTsKKwl1MTYgZG1hX2RzY3JfaWR4ID0gUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTM7CisJYWNwX2RtYV9kc2NyX3RyYW5zZmVyX3QgZG1hZHNjcltOVU1fRFNDUlNfUEVSX0NIQU5ORUxdOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9EU0NSU19QRVJfQ0hBTk5FTDsgaSsrKSB7CisJCWRtYWRzY3JbaV0ueGZlcl92YWwgPSAwOworCQlpZiAoZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCWRtYV9kc2NyX2lkeCA9IFBMQVlCQUNLX1NUQVJUX0RNQV9ERVNDUl9DSDEzICsgaTsKKwkJCWRtYWRzY3JbaV0uc3JjID0gQUNQX1NIQVJFRF9SQU1fQkFOS18xX0FERFJFU1MgKworCQkJCQkgKGkgKiAoc2l6ZS8yKSk7CisJCQkvKiBkbWFkc2NyW2ldLmRlc3QgaXMgdW51c2VkIGJ5IGhhcmR3YXJlLiAqLworCQkJZG1hZHNjcltpXS5kZXN0ID0gMDsKKwkJCWRtYWRzY3JbaV0ueGZlcl92YWwgfD0gQklUKDIyKSB8IChUT19BQ1BfSTJTXzEgPDwgMTYpIHwKKwkJCQkJCShzaXplIC8gMik7CisJCX0gZWxzZSB7CisJCQlkbWFfZHNjcl9pZHggPSBDQVBUVVJFX1NUQVJUX0RNQV9ERVNDUl9DSDE1ICsgaTsKKwkJCS8qIGRtYWRzY3JbaV0uc3JjIGlzIHVudXNlZCBieSBoYXJkd2FyZS4gKi8KKwkJCWRtYWRzY3JbaV0uc3JjID0gMDsKKwkJCWRtYWRzY3JbaV0uZGVzdCA9IEFDUF9TSEFSRURfUkFNX0JBTktfNV9BRERSRVNTICsKKwkJCQkJKGkgKiAoc2l6ZSAvIDIpKTsKKwkJCWRtYWRzY3JbaV0ueGZlcl92YWwgfD0gQklUKDIyKSB8CisJCQkJCShGUk9NX0FDUF9JMlNfMSA8PCAxNikgfCAoc2l6ZSAvIDIpOworCQl9CisJCWNvbmZpZ19kbWFfZGVzY3JpcHRvcl9pbl9zcmFtKGFjcF9tbWlvLCBkbWFfZHNjcl9pZHgsCisJCQkJCQkmZG1hZHNjcltpXSk7CisJfQorCS8qIENvbmZpZ3VyZSB0aGUgRE1BIGNoYW5uZWwgd2l0aCB0aGUgYWJvdmUgZGVzY3JpcHRvcmUgKi8KKwlpZiAoZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWNvbmZpZ19hY3BfZG1hX2NoYW5uZWwoYWNwX21taW8sIEFDUF9UT19JMlNfRE1BX0NIX05VTSwKKwkJCQkJUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTMsCisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5FTCwKKwkJCQkJQUNQX0RNQV9QUklPUklUWV9MRVZFTF9OT1JNQUwpOworCWVsc2UKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChhY3BfbW1pbywgSTJTX1RPX0FDUF9ETUFfQ0hfTlVNLAorCQkJCQlDQVBUVVJFX1NUQVJUX0RNQV9ERVNDUl9DSDE1LAorCQkJCQlOVU1fRFNDUlNfUEVSX0NIQU5ORUwsCisJCQkJCUFDUF9ETUFfUFJJT1JJVFlfTEVWRUxfTk9STUFMKTsKK30KKworLyogQ3JlYXRlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBBQ1AgU1JBTSBmb3IgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKi8KK3N0YXRpYyB2b2lkIGFjcF9wdGVfY29uZmlnKHZvaWQgX19pb21lbSAqYWNwX21taW8sIHN0cnVjdCBwYWdlICpwZywKKwkJCSAgIHUxNiBudW1fb2ZfcGFnZXMsIHUzMiBwdGVfb2Zmc2V0KQoreworCXUxNiBwYWdlX2lkeDsKKwl1NjQgYWRkcjsKKwl1MzIgbG93OworCXUzMiBoaWdoOworCXUzMiBvZmZzZXQ7CisKKwlvZmZzZXQJPSBBQ1BfREFHQl9HUlBfU1JCTV9TUkFNX0JBU0VfT0ZGU0VUICsgKHB0ZV9vZmZzZXQgKiA4KTsKKwlmb3IgKHBhZ2VfaWR4ID0gMDsgcGFnZV9pZHggPCAobnVtX29mX3BhZ2VzKTsgcGFnZV9pZHgrKykgeworCQkvKiBMb2FkIHRoZSBsb3cgYWRkcmVzcyBvZiBwYWdlIGludCBBQ1AgU1JBTSB0aHJvdWdoIFNSQk0gKi8KKwkJYWNwX3JlZ193cml0ZSgob2Zmc2V0ICsgKHBhZ2VfaWR4ICogOCkpLAorCQkJYWNwX21taW8sIG1tQUNQX1NSQk1fVGFyZ19JZHhfQWRkcik7CisJCWFkZHIgPSBwYWdlX3RvX3BoeXMocGcpOworCisJCWxvdyA9IGxvd2VyXzMyX2JpdHMoYWRkcik7CisJCWhpZ2ggPSB1cHBlcl8zMl9iaXRzKGFkZHIpOworCisJCWFjcF9yZWdfd3JpdGUobG93LCBhY3BfbW1pbywgbW1BQ1BfU1JCTV9UYXJnX0lkeF9EYXRhKTsKKworCQkvKiBMb2FkIHRoZSBIaWdoIGFkZHJlc3Mgb2YgcGFnZSBpbnQgQUNQIFNSQU0gdGhyb3VnaCBTUkJNICovCisJCWFjcF9yZWdfd3JpdGUoKG9mZnNldCArIChwYWdlX2lkeCAqIDgpICsgNCksCisJCQlhY3BfbW1pbywgbW1BQ1BfU1JCTV9UYXJnX0lkeF9BZGRyKTsKKworCQkvKiBwYWdlIGVuYWJsZSBpbiBBQ1AgKi8KKwkJaGlnaCB8PSBCSVQoMzEpOworCQlhY3BfcmVnX3dyaXRlKGhpZ2gsIGFjcF9tbWlvLCBtbUFDUF9TUkJNX1RhcmdfSWR4X0RhdGEpOworCisJCS8qIE1vdmUgdG8gbmV4dCBwaHlzaWNhbGx5IGNvbnRpZ3VvcyBwYWdlICovCisJCXBnKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb25maWdfYWNwX2RtYSh2b2lkIF9faW9tZW0gKmFjcF9tbWlvLAorCQkJICAgc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhICphdWRpb19jb25maWcpCit7CisJdTMyIHB0ZV9vZmZzZXQ7CisKKwlpZiAoYXVkaW9fY29uZmlnLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJcHRlX29mZnNldCA9IEFDUF9QTEFZQkFDS19QVEVfT0ZGU0VUOworCWVsc2UKKwkJcHRlX29mZnNldCA9IEFDUF9DQVBUVVJFX1BURV9PRkZTRVQ7CisKKwlhY3BfcHRlX2NvbmZpZyhhY3BfbW1pbywgYXVkaW9fY29uZmlnLT5wZywgYXVkaW9fY29uZmlnLT5udW1fb2ZfcGFnZXMsCisJCQlwdGVfb2Zmc2V0KTsKKworCS8qIENvbmZpZ3VyZSBTeXN0ZW0gbWVtb3J5IDwtPiBBQ1AgU1JBTSBETUEgZGVzY3JpcHRvcnMgKi8KKwlzZXRfYWNwX3N5c21lbV9kbWFfZGVzY3JpcHRvcnMoYWNwX21taW8sIGF1ZGlvX2NvbmZpZy0+c2l6ZSwKKwkJCQkgICAgICAgYXVkaW9fY29uZmlnLT5kaXJlY3Rpb24sIHB0ZV9vZmZzZXQpOworCisJLyogQ29uZmlndXJlIEFDUCBTUkFNIDwtPiBJMlMgRE1BIGRlc2NyaXB0b3JzICovCisJc2V0X2FjcF90b19pMnNfZG1hX2Rlc2NyaXB0b3JzKGFjcF9tbWlvLCBhdWRpb19jb25maWctPnNpemUsCisJCQkJCWF1ZGlvX2NvbmZpZy0+ZGlyZWN0aW9uKTsKK30KKworLyogU3RhcnQgYSBnaXZlbiBETUEgY2hhbm5lbCB0cmFuc2ZlciAqLworc3RhdGljIHZvaWQgYWNwX2RtYV9zdGFydCh2b2lkIF9faW9tZW0gKmFjcF9tbWlvLAorCQkJIHUxNiBjaF9udW0sIGJvb2wgaXNfY2lyY3VsYXIpCit7CisJdTMyIGRtYV9jdHJsOworCisJLyogcmVhZCB0aGUgZG1hIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIGRpc2FibGUgdGhlIGNoYW5uZWwgcnVuIGZpZWxkICovCisJZG1hX2N0cmwgPSBhY3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0pOworCisJLyogSW52YWxpZGF0aW5nIHRoZSBEQUdCIGNhY2hlICovCisJYWNwX3JlZ193cml0ZSgxLCBhY3BfbW1pbywgbW1BQ1BfREFHQl9BVFVfQ1RSTCk7CisKKwkvKiBjb25maWd1cmUgdGhlIERNQSBjaGFubmVsIGFuZCBzdGFydCB0aGUgRE1BIHRyYW5zZmVyCisJICogc2V0IGRtYWNocnVuIGJpdCB0byBzdGFydCB0aGUgdHJhbnNmZXIgYW5kIGVuYWJsZSB0aGUKKwkgKiBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiBvZiB0aGUgZG1hIHRyYW5zZmVyCisJICovCisJZG1hX2N0cmwgfD0gQUNQX0RNQV9DTlRMXzBfX0RNQUNoUnVuX01BU0s7CisKKwlzd2l0Y2ggKGNoX251bSkgeworCWNhc2UgQUNQX1RPX0kyU19ETUFfQ0hfTlVNOgorCWNhc2UgQUNQX1RPX1NZU1JBTV9DSF9OVU06CisJY2FzZSBJMlNfVE9fQUNQX0RNQV9DSF9OVU06CisJCWRtYV9jdHJsIHw9IEFDUF9ETUFfQ05UTF8wX19ETUFDaElPQ0VuX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRtYV9jdHJsICY9IH5BQ1BfRE1BX0NOVExfMF9fRE1BQ2hJT0NFbl9NQVNLOworCQlicmVhazsKKwl9CisKKwkvKiBlbmFibGUgIGZvciBBQ1AgU1JBTSB0by9mcm9tIEkyUyBETUEgY2hhbm5lbCAqLworCWlmIChpc19jaXJjdWxhciA9PSB0cnVlKQorCQlkbWFfY3RybCB8PSBBQ1BfRE1BX0NOVExfMF9fQ2lyY3VsYXJfRE1BX0VuX01BU0s7CisJZWxzZQorCQlkbWFfY3RybCAmPSB+QUNQX0RNQV9DTlRMXzBfX0NpcmN1bGFyX0RNQV9Fbl9NQVNLOworCisJYWNwX3JlZ193cml0ZShkbWFfY3RybCwgYWNwX21taW8sIG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0pOworfQorCisvKiBTdG9wIGEgZ2l2ZW4gRE1BIGNoYW5uZWwgdHJhbnNmZXIgKi8KK3N0YXRpYyBpbnQgYWNwX2RtYV9zdG9wKHZvaWQgX19pb21lbSAqYWNwX21taW8sIHU4IGNoX251bSkKK3sKKwl1MzIgZG1hX2N0cmw7CisJdTMyIGRtYV9jaF9zdHM7CisJdTMyIGNvdW50ID0gQUNQX0RNQV9SRVNFVF9USU1FOworCisJZG1hX2N0cmwgPSBhY3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX0RNQV9DTlRMXzAgKyBjaF9udW0pOworCisJLyogY2xlYXIgdGhlIGRtYSBjb250cm9sIHJlZ2lzdGVyIGZpZWxkcyBiZWZvcmUgd3JpdGluZyB6ZXJvCisJICogaW4gcmVzZXQgYml0CisJKi8KKwlkbWFfY3RybCAmPSB+QUNQX0RNQV9DTlRMXzBfX0RNQUNoUnVuX01BU0s7CisJZG1hX2N0cmwgJj0gfkFDUF9ETUFfQ05UTF8wX19ETUFDaElPQ0VuX01BU0s7CisKKwlhY3BfcmVnX3dyaXRlKGRtYV9jdHJsLCBhY3BfbW1pbywgbW1BQ1BfRE1BX0NOVExfMCArIGNoX251bSk7CisJZG1hX2NoX3N0cyA9IGFjcF9yZWdfcmVhZChhY3BfbW1pbywgbW1BQ1BfRE1BX0NIX1NUUyk7CisKKwlpZiAoZG1hX2NoX3N0cyAmIEJJVChjaF9udW0pKSB7CisJCS8qIHNldCB0aGUgcmVzZXQgYml0IGZvciB0aGlzIGNoYW5uZWwgdG8gc3RvcCB0aGUgZG1hCisJCSogIHRyYW5zZmVyCisJCSovCisJCWRtYV9jdHJsIHw9IEFDUF9ETUFfQ05UTF8wX19ETUFDaFJzdF9NQVNLOworCQlhY3BfcmVnX3dyaXRlKGRtYV9jdHJsLCBhY3BfbW1pbywgbW1BQ1BfRE1BX0NOVExfMCArIGNoX251bSk7CisJfQorCisJLyogY2hlY2sgdGhlIGNoYW5uZWwgc3RhdHVzIGJpdCBmb3Igc29tZSB0aW1lIGFuZCByZXR1cm4gdGhlIHN0YXR1cyAqLworCXdoaWxlICh0cnVlKSB7CisJCWRtYV9jaF9zdHMgPSBhY3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX0RNQV9DSF9TVFMpOworCQlpZiAoIShkbWFfY2hfc3RzICYgQklUKGNoX251bSkpKSB7CisJCQkvKiBjbGVhciB0aGUgcmVzZXQgZmxhZyBhZnRlciBzdWNjZXNzZnVsbHkgc3RvcHBpbmcKKwkJCSogdGhlIGRtYSB0cmFuc2ZlciBhbmQgYnJlYWsgZnJvbSB0aGUgbG9vcAorCQkJKi8KKwkJCWRtYV9jdHJsICY9IH5BQ1BfRE1BX0NOVExfMF9fRE1BQ2hSc3RfTUFTSzsKKworCQkJYWNwX3JlZ193cml0ZShkbWFfY3RybCwgYWNwX21taW8sIG1tQUNQX0RNQV9DTlRMXzAKKwkJCQkJCQkJKyBjaF9udW0pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKC0tY291bnQgPT0gMCkgeworCQkJcHJfZXJyKCJGYWlsZWQgdG8gc3RvcCBBQ1AgRE1BIGNoYW5uZWwgOiAlZFxuIiwgY2hfbnVtKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCXVkZWxheSgxMDApOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWNwX3NldF9zcmFtX2Jhbmtfc3RhdGUodm9pZCBfX2lvbWVtICphY3BfbW1pbywgdTE2IGJhbmssCisJCQkJCWJvb2wgcG93ZXJfb24pCit7CisJdTMyIHZhbCwgcmVxX3JlZywgc3RzX3JlZywgc3RzX3JlZ19tYXNrOworCXUzMiBsb29wcyA9IDEwMDA7CisKKwlpZiAoYmFuayA8IDMyKSB7CisJCXJlcV9yZWcgPSBtbUFDUF9NRU1fU0hVVF9ET1dOX1JFUV9MTzsKKwkJc3RzX3JlZyA9IG1tQUNQX01FTV9TSFVUX0RPV05fU1RTX0xPOworCQlzdHNfcmVnX21hc2sgPSAweEZGRkZGRkZGOworCisJfSBlbHNlIHsKKwkJYmFuayAtPSAzMjsKKwkJcmVxX3JlZyA9IG1tQUNQX01FTV9TSFVUX0RPV05fUkVRX0hJOworCQlzdHNfcmVnID0gbW1BQ1BfTUVNX1NIVVRfRE9XTl9TVFNfSEk7CisJCXN0c19yZWdfbWFzayA9IDB4MDAwMEZGRkY7CisJfQorCisJdmFsID0gYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCByZXFfcmVnKTsKKwlpZiAodmFsICYgKDEgPDwgYmFuaykpIHsKKwkJLyogYmFuayBpcyBpbiBvZmYgc3RhdGUgKi8KKwkJaWYgKHBvd2VyX29uID09IHRydWUpCisJCQkvKiByZXF1ZXN0IHRvIG9uICovCisJCQl2YWwgJj0gfigxIDw8IGJhbmspOworCQllbHNlCisJCQkvKiByZXF1ZXN0IHRvIG9mZiAqLworCQkJcmV0dXJuOworCX0gZWxzZSB7CisJCS8qIGJhbmsgaXMgaW4gb24gc3RhdGUgKi8KKwkJaWYgKHBvd2VyX29uID09IGZhbHNlKQorCQkJLyogcmVxdWVzdCB0byBvZmYgKi8KKwkJCXZhbCB8PSAxIDw8IGJhbms7CisJCWVsc2UKKwkJCS8qIHJlcXVlc3QgdG8gb24gKi8KKwkJCXJldHVybjsKKwl9CisJYWNwX3JlZ193cml0ZSh2YWwsIGFjcF9tbWlvLCByZXFfcmVnKTsKKworCXdoaWxlIChhY3BfcmVnX3JlYWQoYWNwX21taW8sIHN0c19yZWcpICE9IHN0c19yZWdfbWFzaykgeworCQlpZiAoIWxvb3BzLS0pIHsKKwkJCXByX2VycigiQUNQIFNSQU0gYmFuayAlZCBzdGF0ZSBjaGFuZ2UgZmFpbGVkXG4iLCBiYW5rKTsKKwkJCWJyZWFrOworCQl9CisJCWNwdV9yZWxheCgpOworCX0KK30KKworLyogSW5pdGlhbGl6ZSBhbmQgYnJpbmcgQUNQIGhhcmR3YXJlIHRvIGRlZmF1bHQgc3RhdGUuICovCitzdGF0aWMgaW50IGFjcF9pbml0KHZvaWQgX19pb21lbSAqYWNwX21taW8pCit7CisJdTE2IGJhbms7CisJdTMyIHZhbCwgY291bnQsIHNyYW1fcHRlX29mZnNldDsKKworCS8qIEFzc2VydCBTb2Z0IHJlc2V0IG9mIEFDUCAqLworCXZhbCA9IGFjcF9yZWdfcmVhZChhY3BfbW1pbywgbW1BQ1BfU09GVF9SRVNFVCk7CisKKwl2YWwgfD0gQUNQX1NPRlRfUkVTRVRfX1NvZnRSZXNldEF1ZF9NQVNLOworCWFjcF9yZWdfd3JpdGUodmFsLCBhY3BfbW1pbywgbW1BQ1BfU09GVF9SRVNFVCk7CisKKwljb3VudCA9IEFDUF9TT0ZUX1JFU0VUX0RPTkVfVElNRV9PVVRfVkFMVUU7CisJd2hpbGUgKHRydWUpIHsKKwkJdmFsID0gYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9TT0ZUX1JFU0VUKTsKKwkJaWYgKEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRBdWREb25lX01BU0sgPT0KKwkJICAgICh2YWwgJiBBQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0QXVkRG9uZV9NQVNLKSkKKwkJCWJyZWFrOworCQlpZiAoLS1jb3VudCA9PSAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZXNldCBBQ1BcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJdWRlbGF5KDEwMCk7CisJfQorCisJLyogRW5hYmxlIGNsb2NrIHRvIEFDUCBhbmQgd2FpdCB1bnRpbCB0aGUgY2xvY2sgaXMgZW5hYmxlZCAqLworCXZhbCA9IGFjcF9yZWdfcmVhZChhY3BfbW1pbywgbW1BQ1BfQ09OVFJPTCk7CisJdmFsID0gdmFsIHwgQUNQX0NPTlRST0xfX0Nsa0VuX01BU0s7CisJYWNwX3JlZ193cml0ZSh2YWwsIGFjcF9tbWlvLCBtbUFDUF9DT05UUk9MKTsKKworCWNvdW50ID0gQUNQX0NMT0NLX0VOX1RJTUVfT1VUX1ZBTFVFOworCisJd2hpbGUgKHRydWUpIHsKKwkJdmFsID0gYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9TVEFUVVMpOworCQlpZiAodmFsICYgKHUzMikgMHgxKQorCQkJYnJlYWs7CisJCWlmICgtLWNvdW50ID09IDApIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJlc2V0IEFDUFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCQl1ZGVsYXkoMTAwKTsKKwl9CisKKwkvKiBEZWFzc2VydCB0aGUgU09GVCBSRVNFVCBmbGFncyAqLworCXZhbCA9IGFjcF9yZWdfcmVhZChhY3BfbW1pbywgbW1BQ1BfU09GVF9SRVNFVCk7CisJdmFsICY9IH5BQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0QXVkX01BU0s7CisJYWNwX3JlZ193cml0ZSh2YWwsIGFjcF9tbWlvLCBtbUFDUF9TT0ZUX1JFU0VUKTsKKworCS8qIGluaXRpYWlsaXplIE9uaW9uIGNvbnRyb2wgREFHQiByZWdpc3RlciAqLworCWFjcF9yZWdfd3JpdGUoQUNQX09OSU9OX0NOVExfREVGQVVMVCwgYWNwX21taW8sCisJCQltbUFDUF9BWEkyREFHQl9PTklPTl9DTlRMKTsKKworCS8qIGluaXRpYWlsaXplIEdhcmxpYyBjb250cm9sIERBR0IgcmVnaXN0ZXJzICovCisJYWNwX3JlZ193cml0ZShBQ1BfR0FSTElDX0NOVExfREVGQVVMVCwgYWNwX21taW8sCisJCQltbUFDUF9BWEkyREFHQl9HQVJMSUNfQ05UTCk7CisKKwlzcmFtX3B0ZV9vZmZzZXQgPSBBQ1BfREFHQl9HUlBfU1JBTV9CQVNFX0FERFJFU1MgfAorCQkJQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8xX19BWEkyREFHQlNub29wU2VsX01BU0sgfAorCQkJQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8xX19BWEkyREFHQlRhcmdldE1lbVNlbF9NQVNLIHwKKwkJCUFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMV9fQVhJMkRBR0JHcnBFbmFibGVfTUFTSzsKKwlhY3BfcmVnX3dyaXRlKHNyYW1fcHRlX29mZnNldCwgIGFjcF9tbWlvLCBtbUFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMSk7CisJYWNwX3JlZ193cml0ZShBQ1BfUEFHRV9TSVpFXzRLX0VOQUJMRSwgYWNwX21taW8sCisJCQltbUFDUF9EQUdCX1BBR0VfU0laRV9HUlBfMSk7CisKKwlhY3BfcmVnX3dyaXRlKEFDUF9TUkFNX0JBU0VfQUREUkVTUywgYWNwX21taW8sCisJCQltbUFDUF9ETUFfREVTQ19CQVNFX0FERFIpOworCisJLyogTnVtIG9mIGRlc2NyaXB0aW9ycyBpbiBTUkFNIDB4NCwgbWVhbnMgMjU2IGRlc2NyaXB0b3JzOyg2NCAqIDQpICovCisJYWNwX3JlZ193cml0ZSgweDQsIGFjcF9tbWlvLCBtbUFDUF9ETUFfREVTQ19NQVhfTlVNX0RTQ1IpOworCWFjcF9yZWdfd3JpdGUoQUNQX0VYVEVSTkFMX0lOVFJfQ05UTF9fRE1BSU9DTWFza19NQVNLLAorCQlhY3BfbW1pbywgbW1BQ1BfRVhURVJOQUxfSU5UUl9DTlRMKTsKKworICAgICAgIC8qIFdoZW4gQUNQX1RJTEVfUDEgaXMgdHVybmVkIG9uLCBhbGwgU1JBTSBiYW5rcyBnZXQgdHVybmVkIG9uLgorCSogTm93LCB0dXJuIG9mZiBhbGwgb2YgdGhlbS4gVGhpcyBjYW4ndCBiZSBkb25lIGluICdwb3dlcm9uJyBvZgorCSogQUNQIHBtIGRvbWFpbiwgYXMgdGhpcyByZXF1aXJlcyBBQ1AgdG8gYmUgaW5pdGlhbGl6ZWQuCisJKi8KKwlmb3IgKGJhbmsgPSAxOyBiYW5rIDwgNDg7IGJhbmsrKykKKwkJYWNwX3NldF9zcmFtX2Jhbmtfc3RhdGUoYWNwX21taW8sIGJhbmssIGZhbHNlKTsKKworCXJldHVybiAwOworfQorCisvKiBEZWludGlhbGl6ZSBBQ1AgKi8KK3N0YXRpYyBpbnQgYWNwX2RlaW5pdCh2b2lkIF9faW9tZW0gKmFjcF9tbWlvKQoreworCXUzMiB2YWw7CisJdTMyIGNvdW50OworCisJLyogQXNzZXJ0IFNvZnQgcmVzZXQgb2YgQUNQICovCisJdmFsID0gYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9TT0ZUX1JFU0VUKTsKKworCXZhbCB8PSBBQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0QXVkX01BU0s7CisJYWNwX3JlZ193cml0ZSh2YWwsIGFjcF9tbWlvLCBtbUFDUF9TT0ZUX1JFU0VUKTsKKworCWNvdW50ID0gQUNQX1NPRlRfUkVTRVRfRE9ORV9USU1FX09VVF9WQUxVRTsKKwl3aGlsZSAodHJ1ZSkgeworCQl2YWwgPSBhY3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX1NPRlRfUkVTRVQpOworCQlpZiAoQUNQX1NPRlRfUkVTRVRfX1NvZnRSZXNldEF1ZERvbmVfTUFTSyA9PQorCQkgICAgKHZhbCAmIEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRBdWREb25lX01BU0spKQorCQkJYnJlYWs7CisJCWlmICgtLWNvdW50ID09IDApIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJlc2V0IEFDUFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCQl1ZGVsYXkoMTAwKTsKKwl9CisJLyoqIERpc2FibGUgQUNQIGNsb2NrICovCisJdmFsID0gYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9DT05UUk9MKTsKKwl2YWwgJj0gfkFDUF9DT05UUk9MX19DbGtFbl9NQVNLOworCWFjcF9yZWdfd3JpdGUodmFsLCBhY3BfbW1pbywgbW1BQ1BfQ09OVFJPTCk7CisKKwljb3VudCA9IEFDUF9DTE9DS19FTl9USU1FX09VVF9WQUxVRTsKKworCXdoaWxlICh0cnVlKSB7CisJCXZhbCA9IGFjcF9yZWdfcmVhZChhY3BfbW1pbywgbW1BQ1BfU1RBVFVTKTsKKwkJaWYgKCEodmFsICYgKHUzMikgMHgxKSkKKwkJCWJyZWFrOworCQlpZiAoLS1jb3VudCA9PSAwKSB7CisJCQlwcl9lcnIoIkZhaWxlZCB0byByZXNldCBBQ1BcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJdWRlbGF5KDEwMCk7CisJfQorCXJldHVybiAwOworfQorCisvKiBBQ1AgRE1BIGlycSBoYW5kbGVyIHJvdXRpbmUgZm9yIHBsYXliYWNrLCBjYXB0dXJlIHVzZWNhc2VzICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwl1MTYgZHNjcl9pZHg7CisJdTMyIGludHJfZmxhZywgZXh0X2ludHJfc3RhdHVzOworCXN0cnVjdCBhdWRpb19kcnZfZGF0YSAqaXJxX2RhdGE7CisJdm9pZCBfX2lvbWVtICphY3BfbW1pbzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcmc7CisJYm9vbCB2YWxpZF9pcnEgPSBmYWxzZTsKKworCWlycV9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJYWNwX21taW8gPSBpcnFfZGF0YS0+YWNwX21taW87CisKKwlleHRfaW50cl9zdGF0dXMgPSBhY3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX0VYVEVSTkFMX0lOVFJfU1RBVCk7CisJaW50cl9mbGFnID0gKCgoZXh0X2ludHJfc3RhdHVzICYKKwkJICAgICAgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fRE1BSU9DU3RhdF9NQVNLKSA+PgorCQkgICAgIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0RNQUlPQ1N0YXRfX1NISUZUKSk7CisKKwlpZiAoKGludHJfZmxhZyAmIEJJVChBQ1BfVE9fSTJTX0RNQV9DSF9OVU0pKSAhPSAwKSB7CisJCXZhbGlkX2lycSA9IHRydWU7CisJCWlmIChhY3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX0RNQV9DVVJfRFNDUl8xMykgPT0KKwkJCQlQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMykKKwkJCWRzY3JfaWR4ID0gUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTI7CisJCWVsc2UKKwkJCWRzY3JfaWR4ID0gUExBWUJBQ0tfRU5EX0RNQV9ERVNDUl9DSDEyOworCQljb25maWdfYWNwX2RtYV9jaGFubmVsKGFjcF9tbWlvLCBTWVNSQU1fVE9fQUNQX0NIX05VTSwgZHNjcl9pZHgsCisJCQkJICAgICAgIDEsIDApOworCQlhY3BfZG1hX3N0YXJ0KGFjcF9tbWlvLCBTWVNSQU1fVE9fQUNQX0NIX05VTSwgZmFsc2UpOworCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoaXJxX2RhdGEtPnBsYXlfc3RyZWFtKTsKKworCQlhY3BfcmVnX3dyaXRlKChpbnRyX2ZsYWcgJiBCSVQoQUNQX1RPX0kyU19ETUFfQ0hfTlVNKSkgPDwgMTYsCisJCQkJYWNwX21taW8sIG1tQUNQX0VYVEVSTkFMX0lOVFJfU1RBVCk7CisJfQorCisJaWYgKChpbnRyX2ZsYWcgJiBCSVQoSTJTX1RPX0FDUF9ETUFfQ0hfTlVNKSkgIT0gMCkgeworCQl2YWxpZF9pcnEgPSB0cnVlOworCQlpZiAoYWNwX3JlZ19yZWFkKGFjcF9tbWlvLCBtbUFDUF9ETUFfQ1VSX0RTQ1JfMTUpID09CisJCQkJQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNSkKKwkJCWRzY3JfaWR4ID0gQ0FQVFVSRV9FTkRfRE1BX0RFU0NSX0NIMTQ7CisJCWVsc2UKKwkJCWRzY3JfaWR4ID0gQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNDsKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChhY3BfbW1pbywgQUNQX1RPX1NZU1JBTV9DSF9OVU0sIGRzY3JfaWR4LAorCQkJCSAgICAgICAxLCAwKTsKKwkJYWNwX2RtYV9zdGFydChhY3BfbW1pbywgQUNQX1RPX1NZU1JBTV9DSF9OVU0sIGZhbHNlKTsKKworCQlhY3BfcmVnX3dyaXRlKChpbnRyX2ZsYWcgJiBCSVQoSTJTX1RPX0FDUF9ETUFfQ0hfTlVNKSkgPDwgMTYsCisJCQkJYWNwX21taW8sIG1tQUNQX0VYVEVSTkFMX0lOVFJfU1RBVCk7CisJfQorCisJaWYgKChpbnRyX2ZsYWcgJiBCSVQoQUNQX1RPX1NZU1JBTV9DSF9OVU0pKSAhPSAwKSB7CisJCXZhbGlkX2lycSA9IHRydWU7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoaXJxX2RhdGEtPmNhcHR1cmVfc3RyZWFtKTsKKwkJYWNwX3JlZ193cml0ZSgoaW50cl9mbGFnICYgQklUKEFDUF9UT19TWVNSQU1fQ0hfTlVNKSkgPDwgMTYsCisJCQkJYWNwX21taW8sIG1tQUNQX0VYVEVSTkFMX0lOVFJfU1RBVCk7CisJfQorCisJaWYgKHZhbGlkX2lycSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCWVsc2UKKwkJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwl1MTYgYmFuazsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpwcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1ZGlvX2Rydl9kYXRhICppbnRyX2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEocHJ0ZC0+cGxhdGZvcm0tPmRldik7CisKKwlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKmFkYXRhID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFkYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXJ1bnRpbWUtPmh3ID0gYWNwX3BjbV9oYXJkd2FyZV9wbGF5YmFjazsKKwllbHNlCisJCXJ1bnRpbWUtPmh3ID0gYWNwX3BjbV9oYXJkd2FyZV9jYXB0dXJlOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwKKwkJCQkJICAgIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHBydGQtPnBsYXRmb3JtLT5kZXYsICJzZXQgaW50ZWdlciBjb25zdHJhaW50IGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJYWRhdGEtPmFjcF9tbWlvID0gaW50cl9kYXRhLT5hY3BfbW1pbzsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBhZGF0YTsKKworCS8qIEVuYWJsZSBBQ1AgaXJxLCB3aGVuIG5laXRoZXIgcGxheWJhY2sgb3IgY2FwdHVyZSBzdHJlYW1zIGFyZQorCSAqIGFjdGl2ZSBieSB0aGUgdGltZSB3aGVuIGEgbmV3IHN0cmVhbSBpcyBiZWluZyBvcGVuZWQuCisJICogVGhpcyBlbmFibGVtZW50IGlzIG5vdCByZXF1aXJlZCBmb3IgYW5vdGhlciBzdHJlYW0sIGlmIGN1cnJlbnQKKwkgKiBzdHJlYW0gaXMgbm90IGNsb3NlZAorCSovCisJaWYgKCFpbnRyX2RhdGEtPnBsYXlfc3RyZWFtICYmICFpbnRyX2RhdGEtPmNhcHR1cmVfc3RyZWFtKQorCQlhY3BfcmVnX3dyaXRlKDEsIGFkYXRhLT5hY3BfbW1pbywgbW1BQ1BfRVhURVJOQUxfSU5UUl9FTkIpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaW50cl9kYXRhLT5wbGF5X3N0cmVhbSA9IHN1YnN0cmVhbTsKKwkJZm9yIChiYW5rID0gMTsgYmFuayA8PSA0OyBiYW5rKyspCisJCQlhY3Bfc2V0X3NyYW1fYmFua19zdGF0ZShpbnRyX2RhdGEtPmFjcF9tbWlvLCBiYW5rLAorCQkJCQkJdHJ1ZSk7CisJfSBlbHNlIHsKKwkJaW50cl9kYXRhLT5jYXB0dXJlX3N0cmVhbSA9IHN1YnN0cmVhbTsKKwkJZm9yIChiYW5rID0gNTsgYmFuayA8PSA4OyBiYW5rKyspCisJCQlhY3Bfc2V0X3NyYW1fYmFua19zdGF0ZShpbnRyX2RhdGEtPmFjcF9tbWlvLCBiYW5rLAorCQkJCQkJdHJ1ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2RtYV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCWludCBzdGF0dXM7CisJdWludDY0X3Qgc2l6ZTsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmRtYV9idWZmZXI7CisJc3RydWN0IHBhZ2UgKnBnOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisJc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhICpydGQ7CisKKwlkbWFfYnVmZmVyID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKworCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKFdBUk5fT04oIXJ0ZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKTsKKwlzdGF0dXMgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBzaXplKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCW1lbXNldChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhLCAwLCBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcykpOworCXBnID0gdmlydF90b19wYWdlKHN1YnN0cmVhbS0+ZG1hX2J1ZmZlci5hcmVhKTsKKworCWlmIChwZyAhPSBOVUxMKSB7CisJCWFjcF9zZXRfc3JhbV9iYW5rX3N0YXRlKHJ0ZC0+YWNwX21taW8sIDAsIHRydWUpOworCQkvKiBTYXZlIGZvciBydW50aW1lIHByaXZhdGUgZGF0YSAqLworCQlydGQtPnBnID0gcGc7CisJCXJ0ZC0+b3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwkJLyogRmlsbCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIGluIEFDUCBTUkFNICovCisJCXJ0ZC0+cGcgPSBwZzsKKwkJcnRkLT5zaXplID0gc2l6ZTsKKwkJcnRkLT5udW1fb2ZfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpID4+IFBBR0VfU0hJRlQ7CisJCXJ0ZC0+ZGlyZWN0aW9uID0gc3Vic3RyZWFtLT5zdHJlYW07CisKKwkJY29uZmlnX2FjcF9kbWEocnRkLT5hY3BfbW1pbywgcnRkKTsKKwkJc3RhdHVzID0gMDsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgYWNwX2RtYV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXUxNiBkc2NyOworCXUzMiBtdWwsIGRtYV9jb25maWcsIHBlcmlvZF9ieXRlczsKKwl1MzIgcG9zID0gMDsKKworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhICpydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlwZXJpb2RfYnl0ZXMgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWRzY3IgPSBhY3BfcmVnX3JlYWQocnRkLT5hY3BfbW1pbywgbW1BQ1BfRE1BX0NVUl9EU0NSXzEzKTsKKworCQlpZiAoZHNjciA9PSBQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMykKKwkJCW11bCA9IDA7CisJCWVsc2UKKwkJCW11bCA9IDE7CisJCXBvcyA9ICAobXVsICogcGVyaW9kX2J5dGVzKTsKKwl9IGVsc2UgeworCQlkbWFfY29uZmlnID0gYWNwX3JlZ19yZWFkKHJ0ZC0+YWNwX21taW8sIG1tQUNQX0RNQV9DTlRMXzE0KTsKKwkJaWYgKGRtYV9jb25maWcgIT0gMCkgeworCQkJZHNjciA9IGFjcF9yZWdfcmVhZChydGQtPmFjcF9tbWlvLAorCQkJCQkJbW1BQ1BfRE1BX0NVUl9EU0NSXzE0KTsKKwkJCWlmIChkc2NyID09IENBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTQpCisJCQkJbXVsID0gMTsKKwkJCWVsc2UKKwkJCQltdWwgPSAyOworCQkJcG9zID0gKG11bCAqIHBlcmlvZF9ieXRlcyk7CisJCX0KKworCQlpZiAocG9zID49ICgyICogcGVyaW9kX2J5dGVzKSkKKwkJCXBvcyA9IDA7CisKKwl9CisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBwb3MpOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfbW1hcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9kZWZhdWx0X21tYXAoc3Vic3RyZWFtLCB2bWEpOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChydGQtPmFjcF9tbWlvLCBTWVNSQU1fVE9fQUNQX0NIX05VTSwKKwkJCQkJUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTIsCisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5FTCwgMCk7CisJCWNvbmZpZ19hY3BfZG1hX2NoYW5uZWwocnRkLT5hY3BfbW1pbywgQUNQX1RPX0kyU19ETUFfQ0hfTlVNLAorCQkJCQlQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMywKKwkJCQkJTlVNX0RTQ1JTX1BFUl9DSEFOTkVMLCAwKTsKKwkJLyogRmlsbCBBQ1AgU1JBTSAoMiBwZXJpb2RzKSB3aXRoIHplcm9zIGZyb20gU3lzdGVtIFJBTQorCQkgKiB3aGljaCBpcyB6ZXJvLWVkIGluIGh3X3BhcmFtcworCQkqLworCQlhY3BfZG1hX3N0YXJ0KHJ0ZC0+YWNwX21taW8sIFNZU1JBTV9UT19BQ1BfQ0hfTlVNLCBmYWxzZSk7CisKKwkJLyogQUNQIFNSQU0gKDIgcGVyaW9kcyBvZiBidWZmZXIgc2l6ZSkgaXMgaW50aWFsbHkgZmlsbGVkIHdpdGgKKwkJICogemVyb3MuIEJlZm9yZSByZW5kZXJpbmcgc3RhcnRzLCAybmQgaGFsZiBvZiBTUkFNIHdpbGwgYmUKKwkJICogZmlsbGVkIHdpdGggdmFsaWQgYXVkaW8gZGF0YSBETUEnZWQgZnJvbSBmaXJzdCBoYWxmIG9mIHN5c3RlbQorCQkgKiBSQU0gYW5kIDFzdCBoYWxmIG9mIFNSQU0gd2lsbCBiZSBmaWxsZWQgd2l0aCBaZXJvcy4gVGhpcyBpcworCQkgKiB0aGUgaW5pdGlhbCBzY2VuYXJpbyB3aGVuIHJlZGVyaW5nIHN0YXJ0cyBmcm9tIFNSQU0uIExhdGVyCisJCSAqIG9uLCAybmQgaGFsZiBvZiBzeXN0ZW0gbWVtb3J5IHdpbGwgYmUgRE1BJ2VkIHRvIDFzdCBoYWxmIG9mCisJCSAqIFNSQU0sIDFzdCBoYWxmIG9mIHN5c3RlbSBtZW1vcnkgd2lsbCBiZSBETUEnZWQgdG8gMm5kIGhhbGYgb2YKKwkJICogU1JBTSBpbiBwaW5nLXBvbmcgd2F5IHRpbGwgcmVuZGVyaW5nIHN0b3BzLgorCQkqLworCQljb25maWdfYWNwX2RtYV9jaGFubmVsKHJ0ZC0+YWNwX21taW8sIFNZU1JBTV9UT19BQ1BfQ0hfTlVNLAorCQkJCQlQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMiwKKwkJCQkJMSwgMCk7CisJfSBlbHNlIHsKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChydGQtPmFjcF9tbWlvLCBBQ1BfVE9fU1lTUkFNX0NIX05VTSwKKwkJCQkJQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNCwKKwkJCQkJTlVNX0RTQ1JTX1BFUl9DSEFOTkVMLCAwKTsKKwkJY29uZmlnX2FjcF9kbWFfY2hhbm5lbChydGQtPmFjcF9tbWlvLCBJMlNfVE9fQUNQX0RNQV9DSF9OVU0sCisJCQkJCUNBUFRVUkVfU1RBUlRfRE1BX0RFU0NSX0NIMTUsCisJCQkJCU5VTV9EU0NSU19QRVJfQ0hBTk5FTCwgMCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlpbnQgcmV0OworCXUzMiBsb29wcyA9IDEwMDA7CisKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpwcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhICpydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIXJ0ZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCWFjcF9kbWFfc3RhcnQocnRkLT5hY3BfbW1pbywKKwkJCQkJCVNZU1JBTV9UT19BQ1BfQ0hfTlVNLCBmYWxzZSk7CisJCQl3aGlsZSAoYWNwX3JlZ19yZWFkKHJ0ZC0+YWNwX21taW8sIG1tQUNQX0RNQV9DSF9TVFMpICYKKwkJCQkJCUJJVChTWVNSQU1fVE9fQUNQX0NIX05VTSkpIHsKKwkJCQlpZiAoIWxvb3BzLS0pIHsKKwkJCQkJZGV2X2VycihwcnRkLT5wbGF0Zm9ybS0+ZGV2LAorCQkJCQkJImFjcCBkbWEgc3RhcnQgdGltZW91dFxuIik7CisJCQkJCXJldHVybiAtRVRJTUVET1VUOworCQkJCX0KKwkJCQljcHVfcmVsYXgoKTsKKwkJCX0KKworCQkJYWNwX2RtYV9zdGFydChydGQtPmFjcF9tbWlvLAorCQkJCQlBQ1BfVE9fSTJTX0RNQV9DSF9OVU0sIHRydWUpOworCisJCX0gZWxzZSB7CisJCQlhY3BfZG1hX3N0YXJ0KHJ0ZC0+YWNwX21taW8sCisJCQkJCSAgICBJMlNfVE9fQUNQX0RNQV9DSF9OVU0sIHRydWUpOworCQl9CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQkvKiBOZWVkIHRvIHN0b3Agb25seSBjaXJjdWxhciBETUEgY2hhbm5lbHMgOgorCQkgKiBBQ1BfVE9fSTJTX0RNQV9DSF9OVU0gLyBJMlNfVE9fQUNQX0RNQV9DSF9OVU0uIE5vbi1jaXJjdWxhcgorCQkgKiBjaGFubmVscyB3aWxsIHN0b3BwZWQgYXV0b21hdGljYWxseSBhZnRlciBpdHMgdHJhbnNmZXIKKwkJICogY29tcGxldGVzIDogU1lTUkFNX1RPX0FDUF9DSF9OVU0gLyBBQ1BfVE9fU1lTUkFNX0NIX05VTQorCQkgKi8KKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQlyZXQgPSBhY3BfZG1hX3N0b3AocnRkLT5hY3BfbW1pbywKKwkJCQkJQUNQX1RPX0kyU19ETUFfQ0hfTlVNKTsKKwkJZWxzZQorCQkJcmV0ID0gYWNwX2RtYV9zdG9wKHJ0ZC0+YWNwX21taW8sCisJCQkJCUkyU19UT19BQ1BfRE1BX0NIX05VTSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhY3BfZG1hX25ldyhzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHJ0ZC0+cGNtLAorCQkJCQkJCVNORFJWX0RNQV9UWVBFX0RFViwKKwkJCQkJCQlOVUxMLCBNSU5fQlVGRkVSLAorCQkJCQkJCU1BWF9CVUZGRVIpOworfQorCitzdGF0aWMgaW50IGFjcF9kbWFfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJdTE2IGJhbms7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEgKnJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdWRpb19kcnZfZGF0YSAqYWRhdGEgPSBkZXZfZ2V0X2RydmRhdGEocHJ0ZC0+cGxhdGZvcm0tPmRldik7CisKKwlrZnJlZShydGQpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJYWRhdGEtPnBsYXlfc3RyZWFtID0gTlVMTDsKKwkJZm9yIChiYW5rID0gMTsgYmFuayA8PSA0OyBiYW5rKyspCisJCQlhY3Bfc2V0X3NyYW1fYmFua19zdGF0ZShhZGF0YS0+YWNwX21taW8sIGJhbmssCisJCQkJCQlmYWxzZSk7CisJfSBlbHNlIHsKKwkJYWRhdGEtPmNhcHR1cmVfc3RyZWFtID0gTlVMTDsKKwkJZm9yIChiYW5rID0gNTsgYmFuayA8PSA4OyBiYW5rKyspCisJCQlhY3Bfc2V0X3NyYW1fYmFua19zdGF0ZShhZGF0YS0+YWNwX21taW8sIGJhbmssCisJCQkJCQlmYWxzZSk7CisJfQorCisJLyogRGlzYWJsZSBBQ1AgaXJxLCB3aGVuIHRoZSBjdXJyZW50IHN0cmVhbSBpcyBiZWluZyBjbG9zZWQgYW5kCisJICogYW5vdGhlciBzdHJlYW0gaXMgYWxzbyBub3QgYWN0aXZlLgorCSovCisJaWYgKCFhZGF0YS0+cGxheV9zdHJlYW0gJiYgIWFkYXRhLT5jYXB0dXJlX3N0cmVhbSkKKwkJYWNwX3JlZ193cml0ZSgwLCBhZGF0YS0+YWNwX21taW8sIG1tQUNQX0VYVEVSTkFMX0lOVFJfRU5CKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGFjcF9kbWFfb3BzID0geworCS5vcGVuID0gYWNwX2RtYV9vcGVuLAorCS5jbG9zZSA9IGFjcF9kbWFfY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IGFjcF9kbWFfaHdfcGFyYW1zLAorCS5od19mcmVlID0gYWNwX2RtYV9od19mcmVlLAorCS50cmlnZ2VyID0gYWNwX2RtYV90cmlnZ2VyLAorCS5wb2ludGVyID0gYWNwX2RtYV9wb2ludGVyLAorCS5tbWFwID0gYWNwX2RtYV9tbWFwLAorCS5wcmVwYXJlID0gYWNwX2RtYV9wcmVwYXJlLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtX2RyaXZlciBhY3BfYXNvY19wbGF0Zm9ybSA9IHsKKwkub3BzID0gJmFjcF9kbWFfb3BzLAorCS5wY21fbmV3ID0gYWNwX2RtYV9uZXcsCit9OworCitzdGF0aWMgaW50IGFjcF9hdWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGF1ZGlvX2Rydl9kYXRhICphdWRpb19kcnZfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCWF1ZGlvX2Rydl9kYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoYXVkaW9fZHJ2X2RhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWF1ZGlvX2Rydl9kYXRhLT5hY3BfbW1pbyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCisJLyogVGhlIGZvbGxvd2luZyBtZW1iZXJzIGdldHMgcG9wdWxhdGVkIGluIGRldmljZSAnb3BlbicKKwkgKiBmdW5jdGlvbi4gVGlsbCB0aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGluICdhY3BfaW5pdCcKKwkgKiBhbmQgZGV2aWNlIGRvZXNuJ3QgZ2VuZXJhdGUgYW55IGludGVycnVwdHMuCisJICovCisKKwlhdWRpb19kcnZfZGF0YS0+cGxheV9zdHJlYW0gPSBOVUxMOworCWF1ZGlvX2Rydl9kYXRhLT5jYXB0dXJlX3N0cmVhbSA9IE5VTEw7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIklPUkVTT1VSQ0VfSVJRIEZBSUxFRFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0YXR1cyA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgZG1hX2lycV9oYW5kbGVyLAorCQkJCQkwLCAiQUNQX0lSUSIsICZwZGV2LT5kZXYpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQUNQIElSUSByZXF1ZXN0IGZhaWxlZFxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGF1ZGlvX2Rydl9kYXRhKTsKKworCS8qIEluaXRpYWxpemUgdGhlIEFDUCAqLworCWFjcF9pbml0KGF1ZGlvX2Rydl9kYXRhLT5hY3BfbW1pbyk7CisKKwlzdGF0dXMgPSBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYsICZhY3BfYXNvY19wbGF0Zm9ybSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWwgdG8gcmVnaXN0ZXIgQUxTQSBwbGF0Zm9ybSBkZXZpY2VcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KCZwZGV2LT5kZXYsIDEwMDAwKTsKKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYWNwX2F1ZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdWRpb19kcnZfZGF0YSAqYWRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlhY3BfZGVpbml0KGFkYXRhLT5hY3BfbW1pbyk7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcF9wY21fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1MTYgYmFuazsKKwlzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEgKmFkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlhY3BfaW5pdChhZGF0YS0+YWNwX21taW8pOworCisJaWYgKGFkYXRhLT5wbGF5X3N0cmVhbSAmJiBhZGF0YS0+cGxheV9zdHJlYW0tPnJ1bnRpbWUpIHsKKwkJZm9yIChiYW5rID0gMTsgYmFuayA8PSA0OyBiYW5rKyspCisJCQlhY3Bfc2V0X3NyYW1fYmFua19zdGF0ZShhZGF0YS0+YWNwX21taW8sIGJhbmssCisJCQkJCQl0cnVlKTsKKwkJY29uZmlnX2FjcF9kbWEoYWRhdGEtPmFjcF9tbWlvLAorCQkJCWFkYXRhLT5wbGF5X3N0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhKTsKKwl9CisJaWYgKGFkYXRhLT5jYXB0dXJlX3N0cmVhbSAmJiBhZGF0YS0+Y2FwdHVyZV9zdHJlYW0tPnJ1bnRpbWUpIHsKKwkJZm9yIChiYW5rID0gNTsgYmFuayA8PSA4OyBiYW5rKyspCisJCQlhY3Bfc2V0X3NyYW1fYmFua19zdGF0ZShhZGF0YS0+YWNwX21taW8sIGJhbmssCisJCQkJCQl0cnVlKTsKKwkJY29uZmlnX2FjcF9kbWEoYWRhdGEtPmFjcF9tbWlvLAorCQkJCWFkYXRhLT5jYXB0dXJlX3N0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhKTsKKwl9CisJYWNwX3JlZ193cml0ZSgxLCBhZGF0YS0+YWNwX21taW8sIG1tQUNQX0VYVEVSTkFMX0lOVFJfRU5CKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3BfcGNtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1ZGlvX2Rydl9kYXRhICphZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJYWNwX2RlaW5pdChhZGF0YS0+YWNwX21taW8pOworCWFjcF9yZWdfd3JpdGUoMCwgYWRhdGEtPmFjcF9tbWlvLCBtbUFDUF9FWFRFUk5BTF9JTlRSX0VOQik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwX3BjbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1ZGlvX2Rydl9kYXRhICphZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJYWNwX2luaXQoYWRhdGEtPmFjcF9tbWlvKTsKKwlhY3BfcmVnX3dyaXRlKDEsIGFkYXRhLT5hY3BfbW1pbywgbW1BQ1BfRVhURVJOQUxfSU5UUl9FTkIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYWNwX3BtX29wcyA9IHsKKwkucmVzdW1lID0gYWNwX3BjbV9yZXN1bWUsCisJLnJ1bnRpbWVfc3VzcGVuZCA9IGFjcF9wY21fcnVudGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZSA9IGFjcF9wY21fcnVudGltZV9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhY3BfZG1hX2RyaXZlciA9IHsKKwkucHJvYmUgPSBhY3BfYXVkaW9fcHJvYmUsCisJLnJlbW92ZSA9IGFjcF9hdWRpb19yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYWNwX2F1ZGlvX2RtYSIsCisJCS5wbSA9ICZhY3BfcG1fb3BzLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFjcF9kbWFfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiTWFydXRoaS5CYXl5YXZhcmFwdUBhbWQuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBBQ1AgUENNIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphY3AtZG1hLWF1ZGlvIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL2FjcC5oIGIvc291bmQvc29jL2FtZC9hY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA4MzJlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2FtZC9hY3AuaApAQCAtMCwwICsxLDExOCBAQAorI2lmbmRlZiBfX0FDUF9IV19ICisjZGVmaW5lIF9fQUNQX0hXX0gKKworI2luY2x1ZGUgImluY2x1ZGUvYWNwXzJfMl9kLmgiCisjaW5jbHVkZSAiaW5jbHVkZS9hY3BfMl8yX3NoX21hc2suaCIKKworI2RlZmluZSBBQ1BfUEFHRV9TSVpFXzRLX0VOQUJMRQkJCTB4MDIKKworI2RlZmluZSBBQ1BfUExBWUJBQ0tfUFRFX09GRlNFVAkJCTEwCisjZGVmaW5lIEFDUF9DQVBUVVJFX1BURV9PRkZTRVQJCQkwCisKKyNkZWZpbmUgQUNQX0dBUkxJQ19DTlRMX0RFRkFVTFQJCQkweDAwMDAwRkI0CisjZGVmaW5lIEFDUF9PTklPTl9DTlRMX0RFRkFVTFQJCQkweDAwMDAwRkI0CisKKyNkZWZpbmUgQUNQX1BIWVNJQ0FMX0JBU0UJCQkweDE0MDAwCisKKy8qIFBsYXliYWNrIFNSQU0gYWRkcmVzcyAoYXMgYSBkZXN0aW5hdGlvbiBpbiBkbWEgZGVzY3JpcHRvcikgKi8KKyNkZWZpbmUgQUNQX1NIQVJFRF9SQU1fQkFOS18xX0FERFJFU1MJCTB4NDAwMjAwMAorCisvKiBDYXB0dXJlIFNSQU0gYWRkcmVzcyAoYXMgYSBzb3VyY2UgaW4gZG1hIGRlc2NyaXB0b3IpICovCisjZGVmaW5lIEFDUF9TSEFSRURfUkFNX0JBTktfNV9BRERSRVNTCQkweDQwMEEwMDAKKworI2RlZmluZSBBQ1BfRE1BX1JFU0VUX1RJTUUJCQkxMDAwMAorI2RlZmluZSBBQ1BfQ0xPQ0tfRU5fVElNRV9PVVRfVkFMVUUJCTB4MDAwMDAwRkYKKyNkZWZpbmUgQUNQX1NPRlRfUkVTRVRfRE9ORV9USU1FX09VVF9WQUxVRQkweDAwMDAwMEZGCisjZGVmaW5lIEFDUF9ETUFfQ09NUExFVEVfVElNRV9PVVRfVkFMVUUJCTB4MDAwMDAwRkYKKworI2RlZmluZSBBQ1BfU1JBTV9CQVNFX0FERFJFU1MJCQkweDQwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfR1JQX1NSQU1fQkFTRV9BRERSRVNTCQkweDQwMDEwMDAKKyNkZWZpbmUgQUNQX0RBR0JfR1JQX1NSQk1fU1JBTV9CQVNFX09GRlNFVAkweDEwMDAKKyNkZWZpbmUgQUNQX0lOVEVSTkFMX0FQRVJUVVJFX1dJTkRPV18wX0FERFJFU1MJMHgwMDAwMDAwMAorI2RlZmluZSBBQ1BfSU5URVJOQUxfQVBFUlRVUkVfV0lORE9XXzRfQUREUkVTUwkweDAxODAwMDAwCisKKyNkZWZpbmUgVE9fQUNQX0kyU18xICAgMHgyCisjZGVmaW5lIFRPX0FDUF9JMlNfMiAgIDB4NAorI2RlZmluZSBGUk9NX0FDUF9JMlNfMSAweGEKKyNkZWZpbmUgRlJPTV9BQ1BfSTJTXzIgMHhiCisKKyNkZWZpbmUgQUNQX1RJTEVfT05fTUFTSyAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEFDUF9USUxFX09GRl9NQVNLICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BfVElMRV9PTl9SRVRBSU5fUkVHX01BU0sgICAgIDB4MWYKKyNkZWZpbmUgQUNQX1RJTEVfT0ZGX1JFVEFJTl9SRUdfTUFTSyAgICAweDIwCisKKyNkZWZpbmUgQUNQX1RJTEVfUDFfTUFTSyAgICAgICAgICAgICAgICAweDNlCisjZGVmaW5lIEFDUF9USUxFX1AyX01BU0sgICAgICAgICAgICAgICAgMHgzZAorI2RlZmluZSBBQ1BfVElMRV9EU1AwX01BU0sgICAgICAgICAgICAgIDB4M2IKKyNkZWZpbmUgQUNQX1RJTEVfRFNQMV9NQVNLICAgICAgICAgICAgICAweDM3CisKKyNkZWZpbmUgQUNQX1RJTEVfRFNQMl9NQVNLICAgICAgICAgICAgICAweDJmCisvKiBQbGF5YmFjayBETUEgY2hhbm5lbHMgKi8KKyNkZWZpbmUgU1lTUkFNX1RPX0FDUF9DSF9OVU0gMTIKKyNkZWZpbmUgQUNQX1RPX0kyU19ETUFfQ0hfTlVNIDEzCisKKy8qIENhcHR1cmUgRE1BIGNoYW5uZWxzICovCisjZGVmaW5lIEFDUF9UT19TWVNSQU1fQ0hfTlVNIDE0CisjZGVmaW5lIEkyU19UT19BQ1BfRE1BX0NIX05VTSAxNQorCisjZGVmaW5lIE5VTV9EU0NSU19QRVJfQ0hBTk5FTCAyCisKKyNkZWZpbmUgUExBWUJBQ0tfU1RBUlRfRE1BX0RFU0NSX0NIMTIgMAorI2RlZmluZSBQTEFZQkFDS19FTkRfRE1BX0RFU0NSX0NIMTIgMQorI2RlZmluZSBQTEFZQkFDS19TVEFSVF9ETUFfREVTQ1JfQ0gxMyAyCisjZGVmaW5lIFBMQVlCQUNLX0VORF9ETUFfREVTQ1JfQ0gxMyAzCisKKyNkZWZpbmUgQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNCA0CisjZGVmaW5lIENBUFRVUkVfRU5EX0RNQV9ERVNDUl9DSDE0IDUKKyNkZWZpbmUgQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNSA2CisjZGVmaW5lIENBUFRVUkVfRU5EX0RNQV9ERVNDUl9DSDE1IDcKKworZW51bSBhY3BfZG1hX3ByaW9yaXR5X2xldmVsIHsKKwkvKiAweDAgU3BlY2lmaWVzIHRoZSBETUEgY2hhbm5lbCBpcyBnaXZlbiBub3JtYWwgcHJpb3JpdHkgKi8KKwlBQ1BfRE1BX1BSSU9SSVRZX0xFVkVMX05PUk1BTCA9IDB4MCwKKwkvKiAweDEgU3BlY2lmaWVzIHRoZSBETUEgY2hhbm5lbCBpcyBnaXZlbiBoaWdoIHByaW9yaXR5ICovCisJQUNQX0RNQV9QUklPUklUWV9MRVZFTF9ISUdIID0gMHgxLAorCUFDUF9ETUFfUFJJT1JJVFlfTEVWRUxfRk9SQ0VTSVpFID0gMHhGRgorfTsKKworc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhIHsKKwlzdHJ1Y3QgcGFnZSAqcGc7CisJdW5zaWduZWQgaW50IG9yZGVyOworCXUxNiBudW1fb2ZfcGFnZXM7CisJdTE2IGRpcmVjdGlvbjsKKwl1aW50NjRfdCBzaXplOworCXZvaWQgX19pb21lbSAqYWNwX21taW87Cit9OworCitlbnVtIHsKKwlBQ1BfVElMRV9QMSA9IDAsCisJQUNQX1RJTEVfUDIsCisJQUNQX1RJTEVfRFNQMCwKKwlBQ1BfVElMRV9EU1AxLAorCUFDUF9USUxFX0RTUDIsCit9OworCitlbnVtIHsKKwlBQ1BfRE1BX0FUVFJJQlVURVNfU0hBUkVETUVNX1RPX0RBR0JfT05JT04gPSAweDAsCisJQUNQX0RNQV9BVFRSSUJVVEVTX1NIQVJFRF9NRU1fVE9fREFHQl9HQVJMSUMgPSAweDEsCisJQUNQX0RNQV9BVFRSSUJVVEVTX0RBR0JfT05JT05fVE9fU0hBUkVETUVNID0gMHg4LAorCUFDUF9ETUFfQVRUUklCVVRFU19EQUdCX0dBUkxJQ19UT19TSEFSRURNRU0gPSAweDksCisJQUNQX0RNQV9BVFRSSUJVVEVTX0ZPUkNFX1NJWkUgPSAweEYKK307CisKK3R5cGVkZWYgc3RydWN0IGFjcF9kbWFfZHNjcl90cmFuc2ZlciB7CisJLyogU3BlY2lmaWVzIHRoZSBzb3VyY2UgbWVtb3J5IGxvY2F0aW9uIGZvciB0aGUgRE1BIGRhdGEgdHJhbnNmZXIuICovCisJdTMyIHNyYzsKKwkvKiBTcGVjaWZpZXMgdGhlIGRlc3RpbmF0aW9uIG1lbW9yeSBsb2NhdGlvbiB0byB3aGVyZSB0aGUgZGF0YSB3aWxsCisJICogYmUgdHJhbnNmZXJyZWQuCisJKi8KKwl1MzIgZGVzdDsKKwkvKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkIHRvIGJlIHRyYW5zZmVycmVkCisJKiBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiBtZW1vcnkuVHJhbnNmZXIgZGlyZWN0aW9uICYgSU9DIGVuYWJsZQorCSovCisJdTMyIHhmZXJfdmFsOworCS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCisJdTMyIHJlc2VydmVkOworfSBhY3BfZG1hX2RzY3JfdHJhbnNmZXJfdDsKKworI2VuZGlmIC8qX19BQ1BfSFdfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2FtZC9pbmNsdWRlL2FjcF8yXzJfZC5oIGIvc291bmQvc29jL2FtZC9pbmNsdWRlL2FjcF8yXzJfZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMThmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvYW1kL2luY2x1ZGUvYWNwXzJfMl9kLmgKQEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKiBBQ1BfMl8yIFJlZ2lzdGVyIGRvY3VtZW50YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBBQ1BfMl8yX0RfSAorI2RlZmluZSBBQ1BfMl8yX0RfSAorCisjZGVmaW5lIG1tQUNQX0RNQV9DTlRMXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMAorI2RlZmluZSBtbUFDUF9ETUFfQ05UTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDEKKyNkZWZpbmUgbW1BQ1BfRE1BX0NOVExfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDAyCisjZGVmaW5lIG1tQUNQX0RNQV9DTlRMXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwMworI2RlZmluZSBtbUFDUF9ETUFfQ05UTF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDQKKyNkZWZpbmUgbW1BQ1BfRE1BX0NOVExfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDA1CisjZGVmaW5lIG1tQUNQX0RNQV9DTlRMXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwNgorI2RlZmluZSBtbUFDUF9ETUFfQ05UTF83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMDcKKyNkZWZpbmUgbW1BQ1BfRE1BX0NOVExfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDA4CisjZGVmaW5lIG1tQUNQX0RNQV9DTlRMXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwOQorI2RlZmluZSBtbUFDUF9ETUFfQ05UTF8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMGEKKyNkZWZpbmUgbW1BQ1BfRE1BX0NOVExfMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDBiCisjZGVmaW5lIG1tQUNQX0RNQV9DTlRMXzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwYworI2RlZmluZSBtbUFDUF9ETUFfQ05UTF8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMGQKKyNkZWZpbmUgbW1BQ1BfRE1BX0NOVExfMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDBlCisjZGVmaW5lIG1tQUNQX0RNQV9DTlRMXzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAwZgorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9TVFJUX0lEWF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMTAKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDExCisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX1NUUlRfSURYXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAxMgorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9TVFJUX0lEWF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMTMKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDE0CisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX1NUUlRfSURYXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAxNQorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9TVFJUX0lEWF82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMTYKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDE3CisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX1NUUlRfSURYXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAxOAorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9TVFJUX0lEWF85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMTkKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDFhCisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX1NUUlRfSURYXzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAxYgorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMWMKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDFkCisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX1NUUlRfSURYXzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAxZQorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMWYKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfQ05UXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDIwCisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX0NOVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAyMQorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9DTlRfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMjIKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfQ05UXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDIzCisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX0NOVF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAyNAorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9DTlRfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMjUKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfQ05UXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDI2CisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX0NOVF83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAyNworI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9DTlRfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMjgKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfQ05UXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDI5CisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX0NOVF8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAyYQorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9DTlRfMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMmIKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfQ05UXzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDJjCisjZGVmaW5lIG1tQUNQX0RNQV9EU0NSX0NOVF8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAyZAorI2RlZmluZSBtbUFDUF9ETUFfRFNDUl9DTlRfMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMmUKKyNkZWZpbmUgbW1BQ1BfRE1BX0RTQ1JfQ05UXzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDJmCisjZGVmaW5lIG1tQUNQX0RNQV9QUklPXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAzMAorI2RlZmluZSBtbUFDUF9ETUFfUFJJT18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMzEKKyNkZWZpbmUgbW1BQ1BfRE1BX1BSSU9fMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDMyCisjZGVmaW5lIG1tQUNQX0RNQV9QUklPXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAzMworI2RlZmluZSBtbUFDUF9ETUFfUFJJT180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMzQKKyNkZWZpbmUgbW1BQ1BfRE1BX1BSSU9fNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDM1CisjZGVmaW5lIG1tQUNQX0RNQV9QUklPXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAzNgorI2RlZmluZSBtbUFDUF9ETUFfUFJJT183ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMzcKKyNkZWZpbmUgbW1BQ1BfRE1BX1BSSU9fOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDM4CisjZGVmaW5lIG1tQUNQX0RNQV9QUklPXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAzOQorI2RlZmluZSBtbUFDUF9ETUFfUFJJT18xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwM2EKKyNkZWZpbmUgbW1BQ1BfRE1BX1BSSU9fMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDNiCisjZGVmaW5lIG1tQUNQX0RNQV9QUklPXzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAzYworI2RlZmluZSBtbUFDUF9ETUFfUFJJT18xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwM2QKKyNkZWZpbmUgbW1BQ1BfRE1BX1BSSU9fMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDNlCisjZGVmaW5lIG1tQUNQX0RNQV9QUklPXzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAzZgorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX0RTQ1JfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNDAKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9EU0NSXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDQxCisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfRFNDUl8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA0MgorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX0RTQ1JfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNDMKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9EU0NSXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDQ0CisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfRFNDUl81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA0NQorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX0RTQ1JfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNDYKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9EU0NSXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDQ3CisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfRFNDUl84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA0OAorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX0RTQ1JfOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNDkKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9EU0NSXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDRhCisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfRFNDUl8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA0YgorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX0RTQ1JfMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNGMKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9EU0NSXzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDRkCisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfRFNDUl8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA0ZQorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX0RTQ1JfMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNGYKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9UUkFOU19DTlRfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDUwCisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA1MQorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNTIKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9UUkFOU19DTlRfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDUzCisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA1NAorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX1RSQU5TX0NOVF81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNTUKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9UUkFOU19DTlRfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDU2CisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA1NworI2RlZmluZSBtbUFDUF9ETUFfQ1VSX1RSQU5TX0NOVF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNTgKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9UUkFOU19DTlRfOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDU5CisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA1YQorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNWIKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9UUkFOU19DTlRfMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDVjCisjZGVmaW5lIG1tQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA1ZAorI2RlZmluZSBtbUFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNWUKKyNkZWZpbmUgbW1BQ1BfRE1BX0NVUl9UUkFOU19DTlRfMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDVmCisjZGVmaW5lIG1tQUNQX0RNQV9FUlJfU1RTXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA2MAorI2RlZmluZSBtbUFDUF9ETUFfRVJSX1NUU18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNjEKKyNkZWZpbmUgbW1BQ1BfRE1BX0VSUl9TVFNfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDYyCisjZGVmaW5lIG1tQUNQX0RNQV9FUlJfU1RTXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA2MworI2RlZmluZSBtbUFDUF9ETUFfRVJSX1NUU180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNjQKKyNkZWZpbmUgbW1BQ1BfRE1BX0VSUl9TVFNfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDY1CisjZGVmaW5lIG1tQUNQX0RNQV9FUlJfU1RTXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA2NgorI2RlZmluZSBtbUFDUF9ETUFfRVJSX1NUU183ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNjcKKyNkZWZpbmUgbW1BQ1BfRE1BX0VSUl9TVFNfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDY4CisjZGVmaW5lIG1tQUNQX0RNQV9FUlJfU1RTXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA2OQorI2RlZmluZSBtbUFDUF9ETUFfRVJSX1NUU18xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNmEKKyNkZWZpbmUgbW1BQ1BfRE1BX0VSUl9TVFNfMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDZiCisjZGVmaW5lIG1tQUNQX0RNQV9FUlJfU1RTXzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA2YworI2RlZmluZSBtbUFDUF9ETUFfRVJSX1NUU18xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNmQKKyNkZWZpbmUgbW1BQ1BfRE1BX0VSUl9TVFNfMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDZlCisjZGVmaW5lIG1tQUNQX0RNQV9FUlJfU1RTXzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA2ZgorI2RlZmluZSBtbUFDUF9ETUFfREVTQ19CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNzAKKyNkZWZpbmUgbW1BQ1BfRE1BX0RFU0NfTUFYX05VTV9EU0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDcxCisjZGVmaW5lIG1tQUNQX0RNQV9DSF9TVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA3MgorI2RlZmluZSBtbUFDUF9ETUFfQ0hfR1JPVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwNzMKKyNkZWZpbmUgbW1BQ1BfRFNQMF9DQUNIRV9PRkZTRVQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDc4CisjZGVmaW5lIG1tQUNQX0RTUDBfQ0FDSEVfU0laRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA3OQorI2RlZmluZSBtbUFDUF9EU1AwX0NBQ0hFX09GRlNFVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwN2EKKyNkZWZpbmUgbW1BQ1BfRFNQMF9DQUNIRV9TSVpFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDdiCisjZGVmaW5lIG1tQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA3YworI2RlZmluZSBtbUFDUF9EU1AwX0NBQ0hFX1NJWkUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwN2QKKyNkZWZpbmUgbW1BQ1BfRFNQMF9DQUNIRV9PRkZTRVQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDdlCisjZGVmaW5lIG1tQUNQX0RTUDBfQ0FDSEVfU0laRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA3ZgorI2RlZmluZSBtbUFDUF9EU1AwX0NBQ0hFX09GRlNFVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwODAKKyNkZWZpbmUgbW1BQ1BfRFNQMF9DQUNIRV9TSVpFNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDgxCisjZGVmaW5lIG1tQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA4MgorI2RlZmluZSBtbUFDUF9EU1AwX0NBQ0hFX1NJWkU1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwODMKKyNkZWZpbmUgbW1BQ1BfRFNQMF9DQUNIRV9PRkZTRVQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDg0CisjZGVmaW5lIG1tQUNQX0RTUDBfQ0FDSEVfU0laRTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA4NQorI2RlZmluZSBtbUFDUF9EU1AwX0NBQ0hFX09GRlNFVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwODYKKyNkZWZpbmUgbW1BQ1BfRFNQMF9DQUNIRV9TSVpFNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDg3CisjZGVmaW5lIG1tQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA4OAorI2RlZmluZSBtbUFDUF9EU1AwX0NBQ0hFX1NJWkU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwODkKKyNkZWZpbmUgbW1BQ1BfRFNQMF9OT05DQUNIRV9PRkZTRVQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDhhCisjZGVmaW5lIG1tQUNQX0RTUDBfTk9OQ0FDSEVfU0laRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA4YgorI2RlZmluZSBtbUFDUF9EU1AwX05PTkNBQ0hFX09GRlNFVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwOGMKKyNkZWZpbmUgbW1BQ1BfRFNQMF9OT05DQUNIRV9TSVpFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDhkCisjZGVmaW5lIG1tQUNQX0RTUDBfREVCVUdfUEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA4ZQorI2RlZmluZSBtbUFDUF9EU1AwX05NSV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwOGYKKyNkZWZpbmUgbW1BQ1BfRFNQMF9DTEtSU1RfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDkwCisjZGVmaW5lIG1tQUNQX0RTUDBfUlVOU1RBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA5MQorI2RlZmluZSBtbUFDUF9EU1AwX09DRF9IQUxUX09OX1JTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwOTIKKyNkZWZpbmUgbW1BQ1BfRFNQMF9XQUlUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDkzCisjZGVmaW5lIG1tQUNQX0RTUDBfVkVDVF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA5NAorI2RlZmluZSBtbUFDUF9EU1AwX0RFQlVHX1JFRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwOTUKKyNkZWZpbmUgbW1BQ1BfRFNQMF9ERUJVR19SRUcyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDk2CisjZGVmaW5lIG1tQUNQX0RTUDBfREVCVUdfUkVHMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA5NworI2RlZmluZSBtbUFDUF9EU1AxX0NBQ0hFX09GRlNFVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwOWQKKyNkZWZpbmUgbW1BQ1BfRFNQMV9DQUNIRV9TSVpFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDllCisjZGVmaW5lIG1tQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTA5ZgorI2RlZmluZSBtbUFDUF9EU1AxX0NBQ0hFX1NJWkUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYTAKKyNkZWZpbmUgbW1BQ1BfRFNQMV9DQUNIRV9PRkZTRVQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGExCisjZGVmaW5lIG1tQUNQX0RTUDFfQ0FDSEVfU0laRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBhMgorI2RlZmluZSBtbUFDUF9EU1AxX0NBQ0hFX09GRlNFVDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYTMKKyNkZWZpbmUgbW1BQ1BfRFNQMV9DQUNIRV9TSVpFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGE0CisjZGVmaW5lIG1tQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBhNQorI2RlZmluZSBtbUFDUF9EU1AxX0NBQ0hFX1NJWkU0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYTYKKyNkZWZpbmUgbW1BQ1BfRFNQMV9DQUNIRV9PRkZTRVQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGE3CisjZGVmaW5lIG1tQUNQX0RTUDFfQ0FDSEVfU0laRTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBhOAorI2RlZmluZSBtbUFDUF9EU1AxX0NBQ0hFX09GRlNFVDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYTkKKyNkZWZpbmUgbW1BQ1BfRFNQMV9DQUNIRV9TSVpFNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGFhCisjZGVmaW5lIG1tQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBhYgorI2RlZmluZSBtbUFDUF9EU1AxX0NBQ0hFX1NJWkU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYWMKKyNkZWZpbmUgbW1BQ1BfRFNQMV9DQUNIRV9PRkZTRVQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGFkCisjZGVmaW5lIG1tQUNQX0RTUDFfQ0FDSEVfU0laRTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBhZQorI2RlZmluZSBtbUFDUF9EU1AxX05PTkNBQ0hFX09GRlNFVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYWYKKyNkZWZpbmUgbW1BQ1BfRFNQMV9OT05DQUNIRV9TSVpFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGIwCisjZGVmaW5lIG1tQUNQX0RTUDFfTk9OQ0FDSEVfT0ZGU0VUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBiMQorI2RlZmluZSBtbUFDUF9EU1AxX05PTkNBQ0hFX1NJWkUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYjIKKyNkZWZpbmUgbW1BQ1BfRFNQMV9ERUJVR19QQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGIzCisjZGVmaW5lIG1tQUNQX0RTUDFfTk1JX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBiNAorI2RlZmluZSBtbUFDUF9EU1AxX0NMS1JTVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYjUKKyNkZWZpbmUgbW1BQ1BfRFNQMV9SVU5TVEFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGI2CisjZGVmaW5lIG1tQUNQX0RTUDFfT0NEX0hBTFRfT05fUlNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBiNworI2RlZmluZSBtbUFDUF9EU1AxX1dBSVRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYjgKKyNkZWZpbmUgbW1BQ1BfRFNQMV9WRUNUX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGI5CisjZGVmaW5lIG1tQUNQX0RTUDFfREVCVUdfUkVHMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBiYQorI2RlZmluZSBtbUFDUF9EU1AxX0RFQlVHX1JFRzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYmIKKyNkZWZpbmUgbW1BQ1BfRFNQMV9ERUJVR19SRUczICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGJjCisjZGVmaW5lIG1tQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBjMgorI2RlZmluZSBtbUFDUF9EU1AyX0NBQ0hFX1NJWkUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYzMKKyNkZWZpbmUgbW1BQ1BfRFNQMl9DQUNIRV9PRkZTRVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGM0CisjZGVmaW5lIG1tQUNQX0RTUDJfQ0FDSEVfU0laRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBjNQorI2RlZmluZSBtbUFDUF9EU1AyX0NBQ0hFX09GRlNFVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYzYKKyNkZWZpbmUgbW1BQ1BfRFNQMl9DQUNIRV9TSVpFMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGM3CisjZGVmaW5lIG1tQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBjOAorI2RlZmluZSBtbUFDUF9EU1AyX0NBQ0hFX1NJWkUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwYzkKKyNkZWZpbmUgbW1BQ1BfRFNQMl9DQUNIRV9PRkZTRVQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGNhCisjZGVmaW5lIG1tQUNQX0RTUDJfQ0FDSEVfU0laRTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBjYgorI2RlZmluZSBtbUFDUF9EU1AyX0NBQ0hFX09GRlNFVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwY2MKKyNkZWZpbmUgbW1BQ1BfRFNQMl9DQUNIRV9TSVpFNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGNkCisjZGVmaW5lIG1tQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBjZQorI2RlZmluZSBtbUFDUF9EU1AyX0NBQ0hFX1NJWkU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwY2YKKyNkZWZpbmUgbW1BQ1BfRFNQMl9DQUNIRV9PRkZTRVQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGQwCisjZGVmaW5lIG1tQUNQX0RTUDJfQ0FDSEVfU0laRTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBkMQorI2RlZmluZSBtbUFDUF9EU1AyX0NBQ0hFX09GRlNFVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZDIKKyNkZWZpbmUgbW1BQ1BfRFNQMl9DQUNIRV9TSVpFOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGQzCisjZGVmaW5lIG1tQUNQX0RTUDJfTk9OQ0FDSEVfT0ZGU0VUMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBkNAorI2RlZmluZSBtbUFDUF9EU1AyX05PTkNBQ0hFX1NJWkUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZDUKKyNkZWZpbmUgbW1BQ1BfRFNQMl9OT05DQUNIRV9PRkZTRVQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGQ2CisjZGVmaW5lIG1tQUNQX0RTUDJfTk9OQ0FDSEVfU0laRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBkNworI2RlZmluZSBtbUFDUF9EU1AyX0RFQlVHX1BDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZDgKKyNkZWZpbmUgbW1BQ1BfRFNQMl9OTUlfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGQ5CisjZGVmaW5lIG1tQUNQX0RTUDJfQ0xLUlNUX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBkYQorI2RlZmluZSBtbUFDUF9EU1AyX1JVTlNUQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZGIKKyNkZWZpbmUgbW1BQ1BfRFNQMl9PQ0RfSEFMVF9PTl9SU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGRjCisjZGVmaW5lIG1tQUNQX0RTUDJfV0FJVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBkZAorI2RlZmluZSBtbUFDUF9EU1AyX1ZFQ1RfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZGUKKyNkZWZpbmUgbW1BQ1BfRFNQMl9ERUJVR19SRUcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGRmCisjZGVmaW5lIG1tQUNQX0RTUDJfREVCVUdfUkVHMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBlMAorI2RlZmluZSBtbUFDUF9EU1AyX0RFQlVHX1JFRzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZTEKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfT05JT05fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGU3CisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX09OSU9OX0VSUl9TVEFUVVNfV1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBlOAorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZTkKKyNkZWZpbmUgbW1BQ1BfREFHQl9Pbmlvbl9UcmFuc1BlcmZfQ291bnRlcl9Db250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGVhCisjZGVmaW5lIG1tQUNQX0RBR0JfT25pb25fV3JfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBlYgorI2RlZmluZSBtbUFDUF9EQUdCX09uaW9uX1dyX1RyYW5zUGVyZl9Db3VudGVyX1BlYWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZWMKKyNkZWZpbmUgbW1BQ1BfREFHQl9Pbmlvbl9SZF9UcmFuc1BlcmZfQ291bnRlcl9DdXJyZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGVkCisjZGVmaW5lIG1tQUNQX0RBR0JfT25pb25fUmRfVHJhbnNQZXJmX0NvdW50ZXJfUGVhayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBlZQorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9HQVJMSUNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZjMKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfR0FSTElDX0VSUl9TVEFUVVNfV1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGY0CisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX0dBUkxJQ19FUlJfU1RBVFVTX1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBmNQorI2RlZmluZSBtbUFDUF9EQUdCX0dhcmxpY19UcmFuc1BlcmZfQ291bnRlcl9Db250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZjYKKyNkZWZpbmUgbW1BQ1BfREFHQl9HYXJsaWNfV3JfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGY3CisjZGVmaW5lIG1tQUNQX0RBR0JfR2FybGljX1dyX1RyYW5zUGVyZl9Db3VudGVyX1BlYWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBmOAorI2RlZmluZSBtbUFDUF9EQUdCX0dhcmxpY19SZF9UcmFuc1BlcmZfQ291bnRlcl9DdXJyZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwZjkKKyNkZWZpbmUgbW1BQ1BfREFHQl9HYXJsaWNfUmRfVHJhbnNQZXJmX0NvdW50ZXJfUGVhayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MGZhCisjZGVmaW5lIG1tQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTBmZgorI2RlZmluZSBtbUFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxMDAKKyNkZWZpbmUgbW1BQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTAxCisjZGVmaW5lIG1tQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEwMgorI2RlZmluZSBtbUFDUF9EQUdCX1BBR0VfU0laRV9HUlBfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxMDMKKyNkZWZpbmUgbW1BQ1BfREFHQl9CQVNFX0FERFJfR1JQXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTA0CisjZGVmaW5lIG1tQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEwNQorI2RlZmluZSBtbUFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxMDYKKyNkZWZpbmUgbW1BQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTA3CisjZGVmaW5lIG1tQUNQX0RBR0JfQkFTRV9BRERSX0dSUF81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEwOAorI2RlZmluZSBtbUFDUF9EQUdCX1BBR0VfU0laRV9HUlBfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxMDkKKyNkZWZpbmUgbW1BQ1BfREFHQl9CQVNFX0FERFJfR1JQXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTBhCisjZGVmaW5lIG1tQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEwYgorI2RlZmluZSBtbUFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxMGMKKyNkZWZpbmUgbW1BQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTBkCisjZGVmaW5lIG1tQUNQX0RBR0JfQkFTRV9BRERSX0dSUF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEwZQorI2RlZmluZSBtbUFDUF9EQUdCX0FUVV9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxMGYKKyNkZWZpbmUgbW1BQ1BfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTMxCisjZGVmaW5lIG1tQUNQX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEzMworI2RlZmluZSBtbUFDUF9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxMzQKKyNkZWZpbmUgbW1BQ1BfUHdyTWdtdF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTM1CisjZGVmaW5lIG1tQUNQX0NBQ19JTkRJQ0FUT1JfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEzNgorI2RlZmluZSBtbUFDUF9TTVVfTUFJTEJPWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxMzcKKyNkZWZpbmUgbW1BQ1BfRlVUVVJFX1JFR19TQ0xLXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTM4CisjZGVmaW5lIG1tQUNQX0ZVVFVSRV9SRUdfU0NMS18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEzOQorI2RlZmluZSBtbUFDUF9GVVRVUkVfUkVHX1NDTEtfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxM2EKKyNkZWZpbmUgbW1BQ1BfRlVUVVJFX1JFR19TQ0xLXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTNiCisjZGVmaW5lIG1tQUNQX0ZVVFVSRV9SRUdfU0NMS180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEzYworI2RlZmluZSBtbUFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxM2QKKyNkZWZpbmUgbW1BQ1BfREFHQkdfV1JfQVNLX0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTNlCisjZGVmaW5lIG1tQUNQX0RBR0JHX1dSX0dPX0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEzZgorI2RlZmluZSBtbUFDUF9EQUdCR19XUl9FWFBfUkVTUF9DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNDAKKyNkZWZpbmUgbW1BQ1BfREFHQkdfV1JfQUNUVUFMX1JFU1BfQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTQxCisjZGVmaW5lIG1tQUNQX0RBR0JHX1JEX0FTS19DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE0MgorI2RlZmluZSBtbUFDUF9EQUdCR19SRF9HT19DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNDMKKyNkZWZpbmUgbW1BQ1BfREFHQkdfUkRfRVhQX1JFU1BfQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTQ0CisjZGVmaW5lIG1tQUNQX0RBR0JHX1JEX0FDVFVBTF9SRVNQX0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE0NQorI2RlZmluZSBtbUFDUF9EQUdCT19XUl9BU0tfQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNDYKKyNkZWZpbmUgbW1BQ1BfREFHQk9fV1JfR09fQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTQ3CisjZGVmaW5lIG1tQUNQX0RBR0JPX1dSX0VYUF9SRVNQX0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE0OAorI2RlZmluZSBtbUFDUF9EQUdCT19XUl9BQ1RVQUxfUkVTUF9DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNDkKKyNkZWZpbmUgbW1BQ1BfREFHQk9fUkRfQVNLX0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTRhCisjZGVmaW5lIG1tQUNQX0RBR0JPX1JEX0dPX0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE0YgorI2RlZmluZSBtbUFDUF9EQUdCT19SRF9FWFBfUkVTUF9DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNGMKKyNkZWZpbmUgbW1BQ1BfREFHQk9fUkRfQUNUVUFMX1JFU1BfQ05UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTRkCisjZGVmaW5lIG1tQUNQX0JSQl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE1NgorI2RlZmluZSBtbUFDUF9FWFRFUk5BTF9JTlRSX0VOQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNTcKKyNkZWZpbmUgbW1BQ1BfRVhURVJOQUxfSU5UUl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTU4CisjZGVmaW5lIG1tQUNQX0VSUk9SX1NPVVJDRV9TVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE1OQorI2RlZmluZSBtbUFDUF9EU1BfU1dfSU5UUl9UUklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNWEKKyNkZWZpbmUgbW1BQ1BfRFNQX1NXX0lOVFJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTViCisjZGVmaW5lIG1tQUNQX0RBR0JHX1RJTUVPVVRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE1YworI2RlZmluZSBtbUFDUF9EQUdCT19USU1FT1VUX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNWQKKyNkZWZpbmUgbW1BQ1BfRVhURVJOQUxfSU5UUl9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTVlCisjZGVmaW5lIG1tQUNQX0RTUF9TV19JTlRSX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE1ZgorI2RlZmluZSBtbUFDUF9EU1AwX0lOVFJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNjAKKyNkZWZpbmUgbW1BQ1BfRFNQMF9JTlRSX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTYxCisjZGVmaW5lIG1tQUNQX0RTUDBfVElNRU9VVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE2MgorI2RlZmluZSBtbUFDUF9EU1AxX0lOVFJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNjMKKyNkZWZpbmUgbW1BQ1BfRFNQMV9JTlRSX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTY0CisjZGVmaW5lIG1tQUNQX0RTUDFfVElNRU9VVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE2NQorI2RlZmluZSBtbUFDUF9EU1AyX0lOVFJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNjYKKyNkZWZpbmUgbW1BQ1BfRFNQMl9JTlRSX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTY3CisjZGVmaW5lIG1tQUNQX0RTUDJfVElNRU9VVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE2OAorI2RlZmluZSBtbUFDUF9EU1AwX0VYVF9USU1FUl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNjkKKyNkZWZpbmUgbW1BQ1BfRFNQMV9FWFRfVElNRVJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTZhCisjZGVmaW5lIG1tQUNQX0RTUDJfRVhUX1RJTUVSX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE2YgorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNmMKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTZkCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE2ZQorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNmYKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTcwCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE3MQorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNzIKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTczCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE3NAorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNzUKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTc2CisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE3NworI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxNzgKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTc5CisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE3YQorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxN2IKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTdjCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE3ZAorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxN2UKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTdmCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE4MAorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxODEKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTgyCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE4MworI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxODQKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTg1CisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8yNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE4NgorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxODcKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTg4CisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8yOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE4OQorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxOGEKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MThiCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE4YworI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxOGQKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MThlCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8zNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE4ZgorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxOTAKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTkxCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV8zOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE5MgorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fMzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxOTMKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTk0CisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV80MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE5NQorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fNDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxOTYKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTk3CisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV80NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE5OAorI2RlZmluZSBtbUFDUF9BWEkyREFHQl9TRU1fNDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxOTkKKyNkZWZpbmUgbW1BQ1BfQVhJMkRBR0JfU0VNXzQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTlhCisjZGVmaW5lIG1tQUNQX0FYSTJEQUdCX1NFTV80NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE5YgorI2RlZmluZSBtbUFDUF9TUkJNX0NsaWVudF9CYXNlX0FkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxOWMKKyNkZWZpbmUgbW1BQ1BfU1JCTV9DbGllbnRfUkREQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MTlkCisjZGVmaW5lIG1tQUNQX1NSQk1fQ3ljbGVfU3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTE5ZQorI2RlZmluZSBtbUFDUF9TUkJNX1RhcmdfSWR4X0FkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxOWYKKyNkZWZpbmUgbW1BQ1BfU1JCTV9UYXJnX0lkeF9EYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWEwCisjZGVmaW5lIG1tQUNQX1NFTUFfQUREUl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFhMQorI2RlZmluZSBtbUFDUF9TRU1BX0FERFJfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxYTIKKyNkZWZpbmUgbW1BQ1BfU0VNQV9DTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWEzCisjZGVmaW5lIG1tQUNQX1NFTUFfU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFhNAorI2RlZmluZSBtbUFDUF9TRU1BX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxYTUKKyNkZWZpbmUgbW1BQ1BfRldfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWE2CisjZGVmaW5lIG1tQUNQX0ZVVFVSRV9SRUdfQUNMS18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFhNworI2RlZmluZSBtbUFDUF9GVVRVUkVfUkVHX0FDTEtfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxYTgKKyNkZWZpbmUgbW1BQ1BfRlVUVVJFX1JFR19BQ0xLXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWE5CisjZGVmaW5lIG1tQUNQX0ZVVFVSRV9SRUdfQUNMS18zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFhYQorI2RlZmluZSBtbUFDUF9GVVRVUkVfUkVHX0FDTEtfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxYWIKKyNkZWZpbmUgbW1BQ1BfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWFjCisjZGVmaW5lIG1tQUNQX1RJTUVSX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFhZAorI2RlZmluZSBtbUFDUF9EU1AwX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxYWUKKyNkZWZpbmUgbW1BQ1BfRFNQMV9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWFmCisjZGVmaW5lIG1tQUNQX0RTUDJfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFiMAorI2RlZmluZSBtbUFDUF9JMlNfVFJBTlNNSVRfQllURV9DTlRfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxYjEKKyNkZWZpbmUgbW1BQ1BfSTJTX1RSQU5TTUlUX0JZVEVfQ05UX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWIyCisjZGVmaW5lIG1tQUNQX0kyU19CVF9UUkFOU01JVF9CWVRFX0NOVF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFiMworI2RlZmluZSBtbUFDUF9JMlNfQlRfVFJBTlNNSVRfQllURV9DTlRfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxYjQKKyNkZWZpbmUgbW1BQ1BfSTJTX0JUX1JFQ0VJVkVfQllURV9DTlRfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWI1CisjZGVmaW5lIG1tQUNQX0kyU19CVF9SRUNFSVZFX0JZVEVfQ05UX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFiNgorI2RlZmluZSBtbUFDUF9EU1AwX0NTX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxYjcKKyNkZWZpbmUgbW1BQ1BfRFNQMV9DU19TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWI4CisjZGVmaW5lIG1tQUNQX0RTUDJfQ1NfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFiOQorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR19CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxYmEKKyNkZWZpbmUgbW1DQ19BQ1BfRUZVU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWM4CisjZGVmaW5lIG1tQUNQX1BHRlNNX1JFVEFJTl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFjOQorI2RlZmluZSBtbUFDUF9QR0ZTTV9DT05GSUdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxY2EKKyNkZWZpbmUgbW1BQ1BfUEdGU01fV1JJVEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWNiCisjZGVmaW5lIG1tQUNQX1BHRlNNX1JFQURfUkVHXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFjYworI2RlZmluZSBtbUFDUF9QR0ZTTV9SRUFEX1JFR18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxY2QKKyNkZWZpbmUgbW1BQ1BfUEdGU01fUkVBRF9SRUdfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWNlCisjZGVmaW5lIG1tQUNQX1BHRlNNX1JFQURfUkVHXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFjZgorI2RlZmluZSBtbUFDUF9QR0ZTTV9SRUFEX1JFR180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZDAKKyNkZWZpbmUgbW1BQ1BfUEdGU01fUkVBRF9SRUdfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWQxCisjZGVmaW5lIG1tQUNQX0lQX1BHRlNNX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFkMgorI2RlZmluZSBtbUFDUF9JMlNfUElOX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZDMKKyNkZWZpbmUgbW1BQ1BfQVpBTElBX0kyU19TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWQ0CisjZGVmaW5lIG1tQUNQX0NISVBfUEtHX0ZPUl9QQURfSVNPTEFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFkNQorI2RlZmluZSBtbUFDUF9BVURJT19QQURfUFVMTFVQX1BVTExET1dOX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZDYKKyNkZWZpbmUgbW1BQ1BfQlRfVUFSVF9QQURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWQ3CisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJjMAorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyYzEKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmMyCisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJjMworI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyYzQKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmM1CisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJjNgorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR183ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyYzcKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmM4CisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJjOQorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyY2EKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmNiCisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJjYworI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyY2QKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmNlCisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJjZgorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZDAKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmQxCisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJkMgorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18xOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZDMKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmQ0CisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJkNQorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18yMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZDYKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmQ3CisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJkOAorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18yNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZDkKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmRhCisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJkYgorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZGMKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmRkCisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJkZQorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18zMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZGYKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmUwCisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJlMQorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18zNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZTIKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmUzCisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzM2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJlNAorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR18zNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZTUKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfMzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmU2CisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzM5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJlNworI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR180MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZTgKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfNDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmU5CisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJlYQorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR180MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZWIKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfNDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmVjCisjZGVmaW5lIG1tQUNQX1NDUkFUQ0hfUkVHXzQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTJlZAorI2RlZmluZSBtbUFDUF9TQ1JBVENIX1JFR180NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyZWUKKyNkZWZpbmUgbW1BQ1BfU0NSQVRDSF9SRUdfNDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MmVmCisjZGVmaW5lIG1tQUNQX1ZPSUNFX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFlOAorI2RlZmluZSBtbUFDUF9WT0lDRV9XQUtFVVBfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZTkKKyNkZWZpbmUgbW1JMlNfVk9JQ0VfV0FLRVVQX0xPV0VSX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWVhCisjZGVmaW5lIG1tSTJTX1ZPSUNFX1dBS0VVUF9ISUdIRVJfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFlYgorI2RlZmluZSBtbUkyU19WT0lDRV9XQUtFVVBfTk9fT0ZfU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZWMKKyNkZWZpbmUgbW1JMlNfVk9JQ0VfV0FLRVVQX05PX09GX1BFQUtTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWVkCisjZGVmaW5lIG1tSTJTX1ZPSUNFX1dBS0VVUF9EVVJBVElPTl9PRl9OX1BFQUtTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFlZQorI2RlZmluZSBtbUkyU19WT0lDRV9XQUtFVVBfQklUQ0xLX1RPR0dMRV9ERVRFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZWYKKyNkZWZpbmUgbW1JMlNfVk9JQ0VfV0FLRVVQX0RBVEFfUEFUSF9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWYwCisjZGVmaW5lIG1tSTJTX1ZPSUNFX1dBS0VVUF9EQVRBX1BPSU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFmMQorI2RlZmluZSBtbUkyU19WT0lDRV9XQUtFVVBfQVVUSF9NQVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZjIKKyNkZWZpbmUgbW1JMlNfVk9JQ0VfV0FLRVVQXzhLQl9XUkFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWYzCisjZGVmaW5lIG1tQUNQX0kyU19SRUNFSVZFRF9CWVRFX0NOVF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFmNAorI2RlZmluZSBtbUFDUF9JMlNfUkVDRUlWRURfQllURV9DTlRfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZjUKKyNkZWZpbmUgbW1BQ1BfSTJTX01JQ1NQX1RSQU5TTUlUX0JZVEVfQ05UX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWY2CisjZGVmaW5lIG1tQUNQX0kyU19NSUNTUF9UUkFOU01JVF9CWVRFX0NOVF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFmNworI2RlZmluZSBtbUFDUF9NRU1fU0hVVF9ET1dOX1JFUV9MTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZjgKKyNkZWZpbmUgbW1BQ1BfTUVNX1NIVVRfRE9XTl9SRVFfSEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWY5CisjZGVmaW5lIG1tQUNQX01FTV9TSFVUX0RPV05fU1RTX0xPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFmYQorI2RlZmluZSBtbUFDUF9NRU1fU0hVVF9ET1dOX1NUU19ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZmIKKyNkZWZpbmUgbW1BQ1BfTUVNX0RFRVBfU0xFRVBfUkVRX0xPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWZjCisjZGVmaW5lIG1tQUNQX01FTV9ERUVQX1NMRUVQX1JFUV9ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTFmZAorI2RlZmluZSBtbUFDUF9NRU1fREVFUF9TTEVFUF9TVFNfTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUxZmUKKyNkZWZpbmUgbW1BQ1BfTUVNX0RFRVBfU0xFRVBfU1RTX0hJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MWZmCisjZGVmaW5lIG1tQUNQX01FTV9XQUtFVVBfRlJPTV9TSFVUX0RPV05fTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIwMAorI2RlZmluZSBtbUFDUF9NRU1fV0FLRVVQX0ZST01fU0hVVF9ET1dOX0hJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMDEKKyNkZWZpbmUgbW1BQ1BfTUVNX1dBS0VVUF9GUk9NX1NMRUVQX0xPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjAyCisjZGVmaW5lIG1tQUNQX01FTV9XQUtFVVBfRlJPTV9TTEVFUF9ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIwMworI2RlZmluZSBtbUFDUF9JMlNTUF9JRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMTAKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfSVJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjExCisjZGVmaW5lIG1tQUNQX0kyU1NQX0lURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIxMgorI2RlZmluZSBtbUFDUF9JMlNTUF9DRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMTMKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfQ0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjE0CisjZGVmaW5lIG1tQUNQX0kyU1NQX1JYRkZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIxNQorI2RlZmluZSBtbUFDUF9JMlNTUF9UWEZGUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMTYKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfTFJCUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjE4CisjZGVmaW5lIG1tQUNQX0kyU1NQX1JSQlIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIxOQorI2RlZmluZSBtbUFDUF9JMlNTUF9SRVIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMWEKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfVEVSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjFiCisjZGVmaW5lIG1tQUNQX0kyU1NQX1JDUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIxYworI2RlZmluZSBtbUFDUF9JMlNTUF9UQ1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMWQKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfSVNSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjFlCisjZGVmaW5lIG1tQUNQX0kyU1NQX0lNUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIxZgorI2RlZmluZSBtbUFDUF9JMlNTUF9ST1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMjAKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfVE9SMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjIxCisjZGVmaW5lIG1tQUNQX0kyU1NQX1JGQ1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIyMgorI2RlZmluZSBtbUFDUF9JMlNTUF9URkNSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMjMKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfUkZGMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjI0CisjZGVmaW5lIG1tQUNQX0kyU1NQX1RGRjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIyNQorI2RlZmluZSBtbUFDUF9JMlNTUF9SWERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMjYKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfUlJYRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjI3CisjZGVmaW5lIG1tQUNQX0kyU1NQX1RYRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIyOAorI2RlZmluZSBtbUFDUF9JMlNTUF9SVFhETUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMjkKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfQ09NUF9QQVJBTV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjJhCisjZGVmaW5lIG1tQUNQX0kyU1NQX0NPTVBfUEFSQU1fMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIyYgorI2RlZmluZSBtbUFDUF9JMlNTUF9DT01QX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMmMKKyNkZWZpbmUgbW1BQ1BfSTJTU1BfQ09NUF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjJkCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX0lFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIyZQorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9JUkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMmYKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfSVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjMwCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX0NFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIzMQorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9DQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMzIKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfUlhGRlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjMzCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX1RYRkZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIzNAorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9MUkJSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMzYKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfUlJCUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjM3CisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX1JFUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIzOAorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9URVIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyMzkKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfUkNSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjNhCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX1RDUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIzYgorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9JU1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyM2MKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfSU1SMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjNkCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX1JPUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTIzZQorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9UT1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyM2YKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfUkZDUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjQwCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX1RGQ1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI0MQorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9SRkYwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNDIKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfVEZGMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjQzCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX0xSQlIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI0NgorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9SUkJSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNDcKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfUkVSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjQ4CisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX1RFUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI0OQorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9SQ1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNGEKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfVENSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjRiCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX0lTUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI0YworI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9JTVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNGQKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfUk9SMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjRlCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX1RPUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI0ZgorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9SRkNSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNTAKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfVEZDUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjUxCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX1JGRjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI1MgorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9URkYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNTMKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfUlhETUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjU0CisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX1JSWERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI1NQorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9UWERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNTYKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfUlRYRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjU3CisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI1OAorI2RlZmluZSBtbUFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNTkKKyNkZWZpbmUgbW1BQ1BfSTJTTUlDU1BfQ09NUF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjVhCisjZGVmaW5lIG1tQUNQX0kyU01JQ1NQX0NPTVBfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI1YgorI2RlZmluZSBtbUFDUF9JMlNCVF9JRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNWMKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfSVJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjVkCisjZGVmaW5lIG1tQUNQX0kyU0JUX0lURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI1ZQorI2RlZmluZSBtbUFDUF9JMlNCVF9DRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNWYKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfQ0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjYwCisjZGVmaW5lIG1tQUNQX0kyU0JUX1JYRkZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI2MQorI2RlZmluZSBtbUFDUF9JMlNCVF9UWEZGUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNjIKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfTFJCUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjY0CisjZGVmaW5lIG1tQUNQX0kyU0JUX1JSQlIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI2NQorI2RlZmluZSBtbUFDUF9JMlNCVF9SRVIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNjYKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfVEVSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjY3CisjZGVmaW5lIG1tQUNQX0kyU0JUX1JDUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI2OAorI2RlZmluZSBtbUFDUF9JMlNCVF9UQ1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNjkKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfSVNSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjZhCisjZGVmaW5lIG1tQUNQX0kyU0JUX0lNUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI2YgorI2RlZmluZSBtbUFDUF9JMlNCVF9ST1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNmMKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfVE9SMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjZkCisjZGVmaW5lIG1tQUNQX0kyU0JUX1JGQ1IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI2ZQorI2RlZmluZSBtbUFDUF9JMlNCVF9URkNSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNmYKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfUkZGMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjcwCisjZGVmaW5lIG1tQUNQX0kyU0JUX1RGRjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI3MQorI2RlZmluZSBtbUFDUF9JMlNCVF9MUkJSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNzQKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfUlJCUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1Mjc1CisjZGVmaW5lIG1tQUNQX0kyU0JUX1JFUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI3NgorI2RlZmluZSBtbUFDUF9JMlNCVF9URVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyNzcKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfUkNSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1Mjc4CisjZGVmaW5lIG1tQUNQX0kyU0JUX1RDUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI3OQorI2RlZmluZSBtbUFDUF9JMlNCVF9JU1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyN2EKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfSU1SMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjdiCisjZGVmaW5lIG1tQUNQX0kyU0JUX1JPUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI3YworI2RlZmluZSBtbUFDUF9JMlNCVF9UT1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyN2QKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfUkZDUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjdlCisjZGVmaW5lIG1tQUNQX0kyU0JUX1RGQ1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI3ZgorI2RlZmluZSBtbUFDUF9JMlNCVF9SRkYxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyODAKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfVEZGMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MjgxCisjZGVmaW5lIG1tQUNQX0kyU0JUX1JYRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI4MgorI2RlZmluZSBtbUFDUF9JMlNCVF9SUlhETUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyODMKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfVFhETUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1Mjg0CisjZGVmaW5lIG1tQUNQX0kyU0JUX1JUWERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI4NQorI2RlZmluZSBtbUFDUF9JMlNCVF9DT01QX1BBUkFNXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyODYKKyNkZWZpbmUgbW1BQ1BfSTJTQlRfQ09NUF9QQVJBTV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1Mjg3CisjZGVmaW5lIG1tQUNQX0kyU0JUX0NPTVBfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTI4OAorI2RlZmluZSBtbUFDUF9JMlNCVF9DT01QX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUyODkKKworI2VuZGlmIC8qIEFDUF8yXzJfRF9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL2luY2x1ZGUvYWNwXzJfMl9lbnVtLmggYi9zb3VuZC9zb2MvYW1kL2luY2x1ZGUvYWNwXzJfMl9lbnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1NzdjOAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9hbWQvaW5jbHVkZS9hY3BfMl8yX2VudW0uaApAQCAtMCwwICsxLDEwNjggQEAKKy8qCisgKiBBQ1BfMl8yIFJlZ2lzdGVyIGRvY3VtZW50YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBBQ1BfMl8yX0VOVU1fSAorI2RlZmluZSBBQ1BfMl8yX0VOVU1fSAorCit0eXBlZGVmIGVudW0gRGVidWdCbG9ja0lkIHsKKwlEQkdfQkxPQ0tfSURfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJREJHX0JMT0NLX0lEX0RCRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCURCR19CTE9DS19JRF9WTUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlEQkdfQkxPQ0tfSURfUERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisJREJHX0JMT0NLX0lEX0NHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorCURCR19CTE9DS19JRF9TUkJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NSwKKwlEQkdfQkxPQ0tfSURfR1JCTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYsCisJREJHX0JMT0NLX0lEX1JMQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3LAorCURCR19CTE9DS19JRF9DU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OCwKKwlEQkdfQkxPQ0tfSURfU0VNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDksCisJREJHX0JMT0NLX0lEX0lIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhLAorCURCR19CTE9DS19JRF9TQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YiwKKwlEQkdfQkxPQ0tfSURfU1EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGMsCisJREJHX0JMT0NLX0lEX1VWRFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkLAorCURCR19CTE9DS19JRF9TUUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZSwKKwlEQkdfQkxPQ0tfSURfU0RNQTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGYsCisJREJHX0JMT0NLX0lEX1NETUExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMCwKKwlEQkdfQkxPQ0tfSURfU1BJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExLAorCURCR19CTE9DS19JRF9HRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTIsCisJREJHX0JMT0NLX0lEX1ZDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMywKKwlEQkdfQkxPQ0tfSURfVkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0LAorCURCR19CTE9DS19JRF9QQTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTUsCisJREJHX0JMT0NLX0lEX1BBMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNiwKKwlEQkdfQkxPQ0tfSURfQ1AwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE3LAorCURCR19CTE9DS19JRF9DUDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTgsCisJREJHX0JMT0NLX0lEX0NQMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOSwKKwlEQkdfQkxPQ0tfSURfWEJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFhLAorCURCR19CTE9DS19JRF9VVkRNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MWIsCisJREJHX0JMT0NLX0lEX1ZHVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxYywKKwlEQkdfQkxPQ0tfSURfVkdUMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFkLAorCURCR19CTE9DS19JRF9JQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MWUsCisJREJHX0JMT0NLX0lEX1NYTTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxZiwKKwlEQkdfQkxPQ0tfSURfU1hNMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIwLAorCURCR19CTE9DS19JRF9TQ1QwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjEsCisJREJHX0JMT0NLX0lEX1NDVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMiwKKwlEQkdfQkxPQ0tfSURfU1BNMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIzLAorCURCR19CTE9DS19JRF9TUE0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjQsCisJREJHX0JMT0NLX0lEX1VOVVNFRDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2LAorCURCR19CTE9DS19JRF9UQ0FBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjcsCisJREJHX0JMT0NLX0lEX1RDQUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyOCwKKwlEQkdfQkxPQ0tfSURfVENDQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI5LAorCURCR19CTE9DS19JRF9UQ0NCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MmEsCisJREJHX0JMT0NLX0lEX01DQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyYiwKKwlEQkdfQkxPQ0tfSURfTUNDMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDJjLAorCURCR19CTE9DS19JRF9NQ0MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MmQsCisJREJHX0JMT0NLX0lEX01DQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyZSwKKwlEQkdfQkxPQ0tfSURfU1hTMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDJmLAorCURCR19CTE9DS19JRF9TWFMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzAsCisJREJHX0JMT0NLX0lEX1NYUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzMSwKKwlEQkdfQkxPQ0tfSURfU1hTMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMyLAorCURCR19CTE9DS19JRF9TWFM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzMsCisJREJHX0JMT0NLX0lEX1NYUzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzNCwKKwlEQkdfQkxPQ0tfSURfU1hTNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDM1LAorCURCR19CTE9DS19JRF9TWFM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzYsCisJREJHX0JMT0NLX0lEX1NYUzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzNywKKwlEQkdfQkxPQ0tfSURfU1hTOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDM4LAorCURCR19CTE9DS19JRF9CQ0kwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzksCisJREJHX0JMT0NLX0lEX0JDSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzYSwKKwlEQkdfQkxPQ0tfSURfQkNJMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDNiLAorCURCR19CTE9DS19JRF9CQ0kzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4M2MsCisJREJHX0JMT0NLX0lEX01DQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzZCwKKwlEQkdfQkxPQ0tfSURfVU5VU0VENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDNlLAorCURCR19CTE9DS19JRF9TUUEwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4M2YsCisJREJHX0JMT0NLX0lEX1NRQTAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0MCwKKwlEQkdfQkxPQ0tfSURfU1FBMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQxLAorCURCR19CTE9DS19JRF9TUUExMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NDIsCisJREJHX0JMT0NLX0lEX1NRQTExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0MywKKwlEQkdfQkxPQ0tfSURfU1FBMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQ0LAorCURCR19CTE9DS19JRF9VTlVTRUQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NDUsCisJREJHX0JMT0NLX0lEX1VOVVNFRDggICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0NiwKKwlEQkdfQkxPQ0tfSURfU1FCMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQ3LAorCURCR19CTE9DS19JRF9TUUIwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NDgsCisJREJHX0JMT0NLX0lEX1NRQjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0OSwKKwlEQkdfQkxPQ0tfSURfU1FCMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDRhLAorCURCR19CTE9DS19JRF9TUTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NGIsCisJREJHX0JMT0NLX0lEX1NRMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0YywKKwlEQkdfQkxPQ0tfSURfU1ExMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDRkLAorCURCR19CTE9DS19JRF9TUTExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NGUsCisJREJHX0JMT0NLX0lEX0NCMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0ZiwKKwlEQkdfQkxPQ0tfSURfQ0IwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUwLAorCURCR19CTE9DS19JRF9DQjAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NTEsCisJREJHX0JMT0NLX0lEX0NCMDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1MiwKKwlEQkdfQkxPQ0tfSURfQ0IwNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUzLAorCURCR19CTE9DS19JRF9VTlVTRUQ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NTQsCisJREJHX0JMT0NLX0lEX1VOVVNFRDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1NSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDU2LAorCURCR19CTE9DS19JRF9DQjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NTcsCisJREJHX0JMT0NLX0lEX0NCMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1OCwKKwlEQkdfQkxPQ0tfSURfQ0IxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDU5LAorCURCR19CTE9DS19JRF9DQjEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NWEsCisJREJHX0JMT0NLX0lEX0NCMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1YiwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDVjLAorCURCR19CTE9DS19JRF9VTlVTRUQxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NWQsCisJREJHX0JMT0NLX0lEX1VOVVNFRDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1ZSwKKwlEQkdfQkxPQ0tfSURfVENQMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDVmLAorCURCR19CTE9DS19JRF9UQ1AxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjAsCisJREJHX0JMT0NLX0lEX1RDUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2MSwKKwlEQkdfQkxPQ0tfSURfVENQMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYyLAorCURCR19CTE9DS19JRF9UQ1A0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjMsCisJREJHX0JMT0NLX0lEX1RDUDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2NCwKKwlEQkdfQkxPQ0tfSURfVENQNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDY1LAorCURCR19CTE9DS19JRF9UQ1A3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjYsCisJREJHX0JMT0NLX0lEX1RDUDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2NywKKwlEQkdfQkxPQ0tfSURfVENQOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDY4LAorCURCR19CTE9DS19JRF9UQ1AxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjksCisJREJHX0JMT0NLX0lEX1RDUDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2YSwKKwlEQkdfQkxPQ0tfSURfVENQMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDZiLAorCURCR19CTE9DS19JRF9UQ1AxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmMsCisJREJHX0JMT0NLX0lEX1RDUDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2ZCwKKwlEQkdfQkxPQ0tfSURfVENQMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDZlLAorCURCR19CTE9DS19JRF9UQ1AxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmYsCisJREJHX0JMT0NLX0lEX1RDUDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3MCwKKwlEQkdfQkxPQ0tfSURfVENQMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDcxLAorCURCR19CTE9DS19JRF9UQ1AxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzIsCisJREJHX0JMT0NLX0lEX1RDUDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3MywKKwlEQkdfQkxPQ0tfSURfVENQMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDc0LAorCURCR19CTE9DS19JRF9UQ1AyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzUsCisJREJHX0JMT0NLX0lEX1RDUDIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3NiwKKwlEQkdfQkxPQ0tfSURfVENQX1JFU0VSVkVEMCAgICAgICAgICAgICAgICAgICAgICAgPSAweDc3LAorCURCR19CTE9DS19JRF9UQ1BfUkVTRVJWRUQxICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzgsCisJREJHX0JMT0NLX0lEX1RDUF9SRVNFUlZFRDIgICAgICAgICAgICAgICAgICAgICAgID0gMHg3OSwKKwlEQkdfQkxPQ0tfSURfVENQX1JFU0VSVkVEMyAgICAgICAgICAgICAgICAgICAgICAgPSAweDdhLAorCURCR19CTE9DS19JRF9UQ1BfUkVTRVJWRUQ0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4N2IsCisJREJHX0JMT0NLX0lEX1RDUF9SRVNFUlZFRDUgICAgICAgICAgICAgICAgICAgICAgID0gMHg3YywKKwlEQkdfQkxPQ0tfSURfVENQX1JFU0VSVkVENiAgICAgICAgICAgICAgICAgICAgICAgPSAweDdkLAorCURCR19CTE9DS19JRF9UQ1BfUkVTRVJWRUQ3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4N2UsCisJREJHX0JMT0NLX0lEX0RCMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3ZiwKKwlEQkdfQkxPQ0tfSURfREIwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwLAorCURCR19CTE9DS19JRF9EQjAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODEsCisJREJHX0JMT0NLX0lEX0RCMDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MiwKKwlEQkdfQkxPQ0tfSURfREIwNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgzLAorCURCR19CTE9DS19JRF9VTlVTRUQxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODQsCisJREJHX0JMT0NLX0lEX1VOVVNFRDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDg2LAorCURCR19CTE9DS19JRF9EQjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODcsCisJREJHX0JMT0NLX0lEX0RCMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4OCwKKwlEQkdfQkxPQ0tfSURfREIxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDg5LAorCURCR19CTE9DS19JRF9EQjEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OGEsCisJREJHX0JMT0NLX0lEX0RCMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4YiwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhjLAorCURCR19CTE9DS19JRF9VTlVTRUQxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OGQsCisJREJHX0JMT0NLX0lEX1VOVVNFRDIwICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4ZSwKKwlEQkdfQkxPQ0tfSURfVENDMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhmLAorCURCR19CTE9DS19JRF9UQ0MxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OTAsCisJREJHX0JMT0NLX0lEX1RDQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MSwKKwlEQkdfQkxPQ0tfSURfVENDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDkyLAorCURCR19CTE9DS19JRF9UQ0M0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OTMsCisJREJHX0JMT0NLX0lEX1RDQzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5NCwKKwlEQkdfQkxPQ0tfSURfVENDNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDk1LAorCURCR19CTE9DS19JRF9UQ0M3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OTYsCisJREJHX0JMT0NLX0lEX1NQUzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5NywKKwlEQkdfQkxPQ0tfSURfU1BTMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDk4LAorCURCR19CTE9DS19JRF9TUFMwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OTksCisJREJHX0JMT0NLX0lEX1NQUzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5YSwKKwlEQkdfQkxPQ0tfSURfU1BTMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDliLAorCURCR19CTE9DS19JRF9TUFMxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OWMsCisJREJHX0JMT0NLX0lEX1VOVVNFRDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5ZCwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDllLAorCURCR19CTE9DS19JRF9UQTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OWYsCisJREJHX0JMT0NLX0lEX1RBMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhMCwKKwlEQkdfQkxPQ0tfSURfVEEwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGExLAorCURCR19CTE9DS19JRF9UQTAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YTIsCisJREJHX0JMT0NLX0lEX1RBMDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhMywKKwlEQkdfQkxPQ0tfSURfVEEwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGE0LAorCURCR19CTE9DS19JRF9UQTA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YTUsCisJREJHX0JMT0NLX0lEX1RBMDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhNiwKKwlEQkdfQkxPQ0tfSURfVEEwOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGE3LAorCURCR19CTE9DS19JRF9UQTA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YTgsCisJREJHX0JMT0NLX0lEX1RBMEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhOSwKKwlEQkdfQkxPQ0tfSURfVEEwQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGFhLAorCURCR19CTE9DS19JRF9VTlVTRUQyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YWIsCisJREJHX0JMT0NLX0lEX1VOVVNFRDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhYywKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGFkLAorCURCR19CTE9DS19JRF9VTlVTRUQyNiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YWUsCisJREJHX0JMT0NLX0lEX1RBMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhZiwKKwlEQkdfQkxPQ0tfSURfVEExMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGIwLAorCURCR19CTE9DS19JRF9UQTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YjEsCisJREJHX0JMT0NLX0lEX1RBMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhiMiwKKwlEQkdfQkxPQ0tfSURfVEExNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGIzLAorCURCR19CTE9DS19JRF9UQTE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YjQsCisJREJHX0JMT0NLX0lEX1RBMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhiNSwKKwlEQkdfQkxPQ0tfSURfVEExNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGI2LAorCURCR19CTE9DS19JRF9UQTE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YjcsCisJREJHX0JMT0NLX0lEX1RBMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhiOCwKKwlEQkdfQkxPQ0tfSURfVEExQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGI5LAorCURCR19CTE9DS19JRF9UQTFCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YmEsCisJREJHX0JMT0NLX0lEX1VOVVNFRDI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhiYiwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGJjLAorCURCR19CTE9DS19JRF9VTlVTRUQyOSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YmQsCisJREJHX0JMT0NLX0lEX1VOVVNFRDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhiZSwKKwlEQkdfQkxPQ0tfSURfVEQwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGJmLAorCURCR19CTE9DS19JRF9URDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YzAsCisJREJHX0JMT0NLX0lEX1REMDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhjMSwKKwlEQkdfQkxPQ0tfSURfVEQwMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGMyLAorCURCR19CTE9DS19JRF9URDA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YzMsCisJREJHX0JMT0NLX0lEX1REMDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhjNCwKKwlEQkdfQkxPQ0tfSURfVEQwNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGM1LAorCURCR19CTE9DS19JRF9URDA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YzYsCisJREJHX0JMT0NLX0lEX1REMDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhjNywKKwlEQkdfQkxPQ0tfSURfVEQwOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGM4LAorCURCR19CTE9DS19JRF9URDBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YzksCisJREJHX0JMT0NLX0lEX1REMEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhjYSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGNiLAorCURCR19CTE9DS19JRF9VTlVTRUQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4Y2MsCisJREJHX0JMT0NLX0lEX1VOVVNFRDMzICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhjZCwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGNlLAorCURCR19CTE9DS19JRF9URDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4Y2YsCisJREJHX0JMT0NLX0lEX1REMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkMCwKKwlEQkdfQkxPQ0tfSURfVEQxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGQxLAorCURCR19CTE9DS19JRF9URDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZDIsCisJREJHX0JMT0NLX0lEX1REMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkMywKKwlEQkdfQkxPQ0tfSURfVEQxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGQ0LAorCURCR19CTE9DS19JRF9URDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZDUsCisJREJHX0JMT0NLX0lEX1REMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkNiwKKwlEQkdfQkxPQ0tfSURfVEQxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGQ3LAorCURCR19CTE9DS19JRF9URDE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZDgsCisJREJHX0JMT0NLX0lEX1REMUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkOSwKKwlEQkdfQkxPQ0tfSURfVEQxQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGRhLAorCURCR19CTE9DS19JRF9VTlVTRUQzNSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZGIsCisJREJHX0JMT0NLX0lEX1VOVVNFRDM2ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkYywKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGRkLAorCURCR19CTE9DS19JRF9VTlVTRUQzOCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZGUsCisJREJHX0JMT0NLX0lEX0xEUzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkZiwKKwlEQkdfQkxPQ0tfSURfTERTMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGUwLAorCURCR19CTE9DS19JRF9MRFMwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZTEsCisJREJHX0JMT0NLX0lEX0xEUzAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhlMiwKKwlEQkdfQkxPQ0tfSURfTERTMDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGUzLAorCURCR19CTE9DS19JRF9MRFMwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZTQsCisJREJHX0JMT0NLX0lEX0xEUzA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhlNSwKKwlEQkdfQkxPQ0tfSURfTERTMDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGU2LAorCURCR19CTE9DS19JRF9MRFMwOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZTcsCisJREJHX0JMT0NLX0lEX0xEUzA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhlOCwKKwlEQkdfQkxPQ0tfSURfTERTMEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGU5LAorCURCR19CTE9DS19JRF9MRFMwQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZWEsCisJREJHX0JMT0NLX0lEX1VOVVNFRDM5ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhlYiwKKwlEQkdfQkxPQ0tfSURfVU5VU0VENDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGVjLAorCURCR19CTE9DS19JRF9VTlVTRUQ0MSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZWQsCisJREJHX0JMT0NLX0lEX1VOVVNFRDQyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhlZSwKKwlEQkdfQkxPQ0tfSURfTERTMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGVmLAorCURCR19CTE9DS19JRF9MRFMxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZjAsCisJREJHX0JMT0NLX0lEX0xEUzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmMSwKKwlEQkdfQkxPQ0tfSURfTERTMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGYyLAorCURCR19CTE9DS19JRF9MRFMxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZjMsCisJREJHX0JMT0NLX0lEX0xEUzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmNCwKKwlEQkdfQkxPQ0tfSURfTERTMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGY1LAorCURCR19CTE9DS19JRF9MRFMxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZjYsCisJREJHX0JMT0NLX0lEX0xEUzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmNywKKwlEQkdfQkxPQ0tfSURfTERTMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGY4LAorCURCR19CTE9DS19JRF9MRFMxQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZjksCisJREJHX0JMT0NLX0lEX0xEUzFCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmYSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VENDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGZiLAorCURCR19CTE9DS19JRF9VTlVTRUQ0NCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZmMsCisJREJHX0JMT0NLX0lEX1VOVVNFRDQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmZCwKKwlEQkdfQkxPQ0tfSURfVU5VU0VENDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGZlLAorfSBEZWJ1Z0Jsb2NrSWQ7Cit0eXBlZGVmIGVudW0gRGVidWdCbG9ja0lkX0JZMiB7CisJREJHX0JMT0NLX0lEX1JFU0VSVkVEX0JZMiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCURCR19CTE9DS19JRF9WTUNfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJREJHX0JMT0NLX0lEX0dSQk1fQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorCURCR19CTE9DS19JRF9DU0NfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKKwlEQkdfQkxPQ0tfSURfSUhfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisJREJHX0JMT0NLX0lEX1NRX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2LAorCURCR19CTE9DS19JRF9VVkRfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NywKKwlEQkdfQkxPQ0tfSURfU0RNQTBfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgsCisJREJHX0JMT0NLX0lEX1NQSU1fQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5LAorCURCR19CTE9DS19JRF9WQzBfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YSwKKwlEQkdfQkxPQ0tfSURfUEFfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGIsCisJREJHX0JMT0NLX0lEX0NQMF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhjLAorCURCR19CTE9DS19JRF9DUDJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZCwKKwlEQkdfQkxPQ0tfSURfUEMwX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGUsCisJREJHX0JMT0NLX0lEX0JDSTBfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmLAorCURCR19CTE9DS19JRF9TWE0wX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTAsCisJREJHX0JMT0NLX0lEX1NDVDBfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMSwKKwlEQkdfQkxPQ0tfSURfU1BNMF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEyLAorCURCR19CTE9DS19JRF9CQ0kyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTMsCisJREJHX0JMT0NLX0lEX1RDQV9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNCwKKwlEQkdfQkxPQ0tfSURfVENDQV9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE1LAorCURCR19CTE9DS19JRF9NQ0NfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTYsCisJREJHX0JMT0NLX0lEX01DQzJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNywKKwlEQkdfQkxPQ0tfSURfTUNEX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE4LAorCURCR19CTE9DS19JRF9NQ0QyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTksCisJREJHX0JMT0NLX0lEX01DRDRfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxYSwKKwlEQkdfQkxPQ0tfSURfTUNCX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFiLAorCURCR19CTE9DS19JRF9TUUFfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MWMsCisJREJHX0JMT0NLX0lEX1NRQTAyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxZCwKKwlEQkdfQkxPQ0tfSURfU1FBMTFfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFlLAorCURCR19CTE9DS19JRF9VTlVTRUQ4X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MWYsCisJREJHX0JMT0NLX0lEX1NRQl9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMCwKKwlEQkdfQkxPQ0tfSURfU1FCMTBfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIxLAorCURCR19CTE9DS19JRF9VTlVTRUQxMF9CWTIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjIsCisJREJHX0JMT0NLX0lEX1VOVVNFRDEyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMywKKwlEQkdfQkxPQ0tfSURfQ0JfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI0LAorCURCR19CTE9DS19JRF9DQjAyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjUsCisJREJHX0JMT0NLX0lEX0NCMTBfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNiwKKwlEQkdfQkxPQ0tfSURfQ0IxMl9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI3LAorCURCR19CTE9DS19JRF9TWFNfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjgsCisJREJHX0JMT0NLX0lEX1NYUzJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyOSwKKwlEQkdfQkxPQ0tfSURfU1hTNF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDJhLAorCURCR19CTE9DS19JRF9TWFM2X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MmIsCisJREJHX0JMT0NLX0lEX0RCX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyYywKKwlEQkdfQkxPQ0tfSURfREIwMl9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDJkLAorCURCR19CTE9DS19JRF9EQjEwX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MmUsCisJREJHX0JMT0NLX0lEX0RCMTJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyZiwKKwlEQkdfQkxPQ0tfSURfVENQX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMwLAorCURCR19CTE9DS19JRF9UQ1AyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzEsCisJREJHX0JMT0NLX0lEX1RDUDRfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzMiwKKwlEQkdfQkxPQ0tfSURfVENQNl9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMzLAorCURCR19CTE9DS19JRF9UQ1A4X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzQsCisJREJHX0JMT0NLX0lEX1RDUDEwX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzNSwKKwlEQkdfQkxPQ0tfSURfVENQMTJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDM2LAorCURCR19CTE9DS19JRF9UQ1AxNF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzcsCisJREJHX0JMT0NLX0lEX1RDUDE2X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzOCwKKwlEQkdfQkxPQ0tfSURfVENQMThfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDM5LAorCURCR19CTE9DS19JRF9UQ1AyMF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4M2EsCisJREJHX0JMT0NLX0lEX1RDUDIyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzYiwKKwlEQkdfQkxPQ0tfSURfVENQX1JFU0VSVkVEMF9CWTIgICAgICAgICAgICAgICAgICAgPSAweDNjLAorCURCR19CTE9DS19JRF9UQ1BfUkVTRVJWRUQyX0JZMiAgICAgICAgICAgICAgICAgICA9IDB4M2QsCisJREJHX0JMT0NLX0lEX1RDUF9SRVNFUlZFRDRfQlkyICAgICAgICAgICAgICAgICAgID0gMHgzZSwKKwlEQkdfQkxPQ0tfSURfVENQX1JFU0VSVkVENl9CWTIgICAgICAgICAgICAgICAgICAgPSAweDNmLAorCURCR19CTE9DS19JRF9UQ0NfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NDAsCisJREJHX0JMT0NLX0lEX1RDQzJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0MSwKKwlEQkdfQkxPQ0tfSURfVENDNF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQyLAorCURCR19CTE9DS19JRF9UQ0M2X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NDMsCisJREJHX0JMT0NLX0lEX1NQU19CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0NCwKKwlEQkdfQkxPQ0tfSURfU1BTMDJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQ1LAorCURCR19CTE9DS19JRF9TUFMxMV9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NDYsCisJREJHX0JMT0NLX0lEX1VOVVNFRDE0X0JZMiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0NywKKwlEQkdfQkxPQ0tfSURfVEFfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQ4LAorCURCR19CTE9DS19JRF9UQTAyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NDksCisJREJHX0JMT0NLX0lEX1RBMDRfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0YSwKKwlEQkdfQkxPQ0tfSURfVEEwNl9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDRiLAorCURCR19CTE9DS19JRF9UQTA4X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NGMsCisJREJHX0JMT0NLX0lEX1RBMEFfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0ZCwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMjBfQlkyICAgICAgICAgICAgICAgICAgICAgICAgPSAweDRlLAorCURCR19CTE9DS19JRF9VTlVTRUQyMl9CWTIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NGYsCisJREJHX0JMT0NLX0lEX1RBMTBfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1MCwKKwlEQkdfQkxPQ0tfSURfVEExMl9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUxLAorCURCR19CTE9DS19JRF9UQTE0X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NTIsCisJREJHX0JMT0NLX0lEX1RBMTZfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1MywKKwlEQkdfQkxPQ0tfSURfVEExOF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDU0LAorCURCR19CTE9DS19JRF9UQTFBX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NTUsCisJREJHX0JMT0NLX0lEX1VOVVNFRDI0X0JZMiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1NiwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMjZfQlkyICAgICAgICAgICAgICAgICAgICAgICAgPSAweDU3LAorCURCR19CTE9DS19JRF9URF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NTgsCisJREJHX0JMT0NLX0lEX1REMDJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1OSwKKwlEQkdfQkxPQ0tfSURfVEQwNF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDVhLAorCURCR19CTE9DS19JRF9URDA2X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NWIsCisJREJHX0JMT0NLX0lEX1REMDhfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1YywKKwlEQkdfQkxPQ0tfSURfVEQwQV9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDVkLAorCURCR19CTE9DS19JRF9VTlVTRUQyOF9CWTIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NWUsCisJREJHX0JMT0NLX0lEX1VOVVNFRDMwX0JZMiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1ZiwKKwlEQkdfQkxPQ0tfSURfVEQxMF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYwLAorCURCR19CTE9DS19JRF9URDEyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjEsCisJREJHX0JMT0NLX0lEX1REMTRfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2MiwKKwlEQkdfQkxPQ0tfSURfVEQxNl9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYzLAorCURCR19CTE9DS19JRF9URDE4X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjQsCisJREJHX0JMT0NLX0lEX1REMUFfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2NSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMzJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgPSAweDY2LAorCURCR19CTE9DS19JRF9VTlVTRUQzNF9CWTIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjcsCisJREJHX0JMT0NLX0lEX0xEU19CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2OCwKKwlEQkdfQkxPQ0tfSURfTERTMDJfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDY5LAorCURCR19CTE9DS19JRF9MRFMwNF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmEsCisJREJHX0JMT0NLX0lEX0xEUzA2X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2YiwKKwlEQkdfQkxPQ0tfSURfTERTMDhfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDZjLAorCURCR19CTE9DS19JRF9MRFMwQV9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmQsCisJREJHX0JMT0NLX0lEX1VOVVNFRDM2X0JZMiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2ZSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMzhfQlkyICAgICAgICAgICAgICAgICAgICAgICAgPSAweDZmLAorCURCR19CTE9DS19JRF9MRFMxMF9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzAsCisJREJHX0JMT0NLX0lEX0xEUzEyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3MSwKKwlEQkdfQkxPQ0tfSURfTERTMTRfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDcyLAorCURCR19CTE9DS19JRF9MRFMxNl9CWTIgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzMsCisJREJHX0JMT0NLX0lEX0xEUzE4X0JZMiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3NCwKKwlEQkdfQkxPQ0tfSURfTERTMUFfQlkyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDc1LAorCURCR19CTE9DS19JRF9VTlVTRUQ0MF9CWTIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzYsCisJREJHX0JMT0NLX0lEX1VOVVNFRDQyX0JZMiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3NywKK30gRGVidWdCbG9ja0lkX0JZMjsKK3R5cGVkZWYgZW51bSBEZWJ1Z0Jsb2NrSWRfQlk0IHsKKwlEQkdfQkxPQ0tfSURfUkVTRVJWRURfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJREJHX0JMT0NLX0lEX1VOVVNFRDBfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCURCR19CTE9DS19JRF9DU0NfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlEQkdfQkxPQ0tfSURfU1FfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisJREJHX0JMT0NLX0lEX1NETUEwX0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorCURCR19CTE9DS19JRF9WQzBfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NSwKKwlEQkdfQkxPQ0tfSURfQ1AwX0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYsCisJREJHX0JMT0NLX0lEX1VOVVNFRDFfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3LAorCURCR19CTE9DS19JRF9TWE0wX0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OCwKKwlEQkdfQkxPQ0tfSURfU1BNMF9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDksCisJREJHX0JMT0NLX0lEX1RDQUFfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhLAorCURCR19CTE9DS19JRF9NQ0NfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YiwKKwlEQkdfQkxPQ0tfSURfTUNEX0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGMsCisJREJHX0JMT0NLX0lEX01DRDRfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkLAorCURCR19CTE9DS19JRF9TUUFfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZSwKKwlEQkdfQkxPQ0tfSURfU1FBMTFfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGYsCisJREJHX0JMT0NLX0lEX1NRQl9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMCwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMTBfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExLAorCURCR19CTE9DS19JRF9DQl9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTIsCisJREJHX0JMT0NLX0lEX0NCMTBfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMywKKwlEQkdfQkxPQ0tfSURfU1hTX0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0LAorCURCR19CTE9DS19JRF9TWFM0X0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTUsCisJREJHX0JMT0NLX0lEX0RCX0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNiwKKwlEQkdfQkxPQ0tfSURfREIxMF9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE3LAorCURCR19CTE9DS19JRF9UQ1BfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTgsCisJREJHX0JMT0NLX0lEX1RDUDRfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOSwKKwlEQkdfQkxPQ0tfSURfVENQOF9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFhLAorCURCR19CTE9DS19JRF9UQ1AxMl9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MWIsCisJREJHX0JMT0NLX0lEX1RDUDE2X0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxYywKKwlEQkdfQkxPQ0tfSURfVENQMjBfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFkLAorCURCR19CTE9DS19JRF9UQ1BfUkVTRVJWRUQwX0JZNCAgICAgICAgICAgICAgICAgICA9IDB4MWUsCisJREJHX0JMT0NLX0lEX1RDUF9SRVNFUlZFRDRfQlk0ICAgICAgICAgICAgICAgICAgID0gMHgxZiwKKwlEQkdfQkxPQ0tfSURfVENDX0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIwLAorCURCR19CTE9DS19JRF9UQ0M0X0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjEsCisJREJHX0JMT0NLX0lEX1NQU19CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMiwKKwlEQkdfQkxPQ0tfSURfU1BTMTFfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIzLAorCURCR19CTE9DS19JRF9UQV9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjQsCisJREJHX0JMT0NLX0lEX1RBMDRfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNSwKKwlEQkdfQkxPQ0tfSURfVEEwOF9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2LAorCURCR19CTE9DS19JRF9VTlVTRUQyMF9CWTQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjcsCisJREJHX0JMT0NLX0lEX1RBMTBfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyOCwKKwlEQkdfQkxPQ0tfSURfVEExNF9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI5LAorCURCR19CTE9DS19JRF9UQTE4X0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MmEsCisJREJHX0JMT0NLX0lEX1VOVVNFRDI0X0JZNCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyYiwKKwlEQkdfQkxPQ0tfSURfVERfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDJjLAorCURCR19CTE9DS19JRF9URDA0X0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MmQsCisJREJHX0JMT0NLX0lEX1REMDhfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyZSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VEMjhfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDJmLAorCURCR19CTE9DS19JRF9URDEwX0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzAsCisJREJHX0JMT0NLX0lEX1REMTRfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzMSwKKwlEQkdfQkxPQ0tfSURfVEQxOF9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMyLAorCURCR19CTE9DS19JRF9VTlVTRUQzMl9CWTQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzMsCisJREJHX0JMT0NLX0lEX0xEU19CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzNCwKKwlEQkdfQkxPQ0tfSURfTERTMDRfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDM1LAorCURCR19CTE9DS19JRF9MRFMwOF9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzYsCisJREJHX0JMT0NLX0lEX1VOVVNFRDM2X0JZNCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzNywKKwlEQkdfQkxPQ0tfSURfTERTMTBfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDM4LAorCURCR19CTE9DS19JRF9MRFMxNF9CWTQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzksCisJREJHX0JMT0NLX0lEX0xEUzE4X0JZNCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzYSwKKwlEQkdfQkxPQ0tfSURfVU5VU0VENDBfQlk0ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDNiLAorfSBEZWJ1Z0Jsb2NrSWRfQlk0OwordHlwZWRlZiBlbnVtIERlYnVnQmxvY2tJZF9CWTggeworCURCR19CTE9DS19JRF9SRVNFUlZFRF9CWTggICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlEQkdfQkxPQ0tfSURfQ1NDX0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJREJHX0JMT0NLX0lEX1NETUEwX0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorCURCR19CTE9DS19JRF9DUDBfQlk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MywKKwlEQkdfQkxPQ0tfSURfU1hNMF9CWTggICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCisJREJHX0JMT0NLX0lEX1RDQV9CWTggICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1LAorCURCR19CTE9DS19JRF9NQ0RfQlk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NiwKKwlEQkdfQkxPQ0tfSURfU1FBX0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDcsCisJREJHX0JMT0NLX0lEX1NRQl9CWTggICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4LAorCURCR19CTE9DS19JRF9DQl9CWTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OSwKKwlEQkdfQkxPQ0tfSURfU1hTX0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGEsCisJREJHX0JMT0NLX0lEX0RCX0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhiLAorCURCR19CTE9DS19JRF9UQ1BfQlk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YywKKwlEQkdfQkxPQ0tfSURfVENQOF9CWTggICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGQsCisJREJHX0JMT0NLX0lEX1RDUDE2X0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhlLAorCURCR19CTE9DS19JRF9UQ1BfUkVTRVJWRUQwX0JZOCAgICAgICAgICAgICAgICAgICA9IDB4ZiwKKwlEQkdfQkxPQ0tfSURfVENDX0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEwLAorCURCR19CTE9DS19JRF9TUFNfQlk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEsCisJREJHX0JMT0NLX0lEX1RBX0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMiwKKwlEQkdfQkxPQ0tfSURfVEEwOF9CWTggICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEzLAorCURCR19CTE9DS19JRF9UQTEwX0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQsCisJREJHX0JMT0NLX0lEX1RBMThfQlk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNSwKKwlEQkdfQkxPQ0tfSURfVERfQlk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE2LAorCURCR19CTE9DS19JRF9URDA4X0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTcsCisJREJHX0JMT0NLX0lEX1REMTBfQlk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOCwKKwlEQkdfQkxPQ0tfSURfVEQxOF9CWTggICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5LAorCURCR19CTE9DS19JRF9MRFNfQlk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MWEsCisJREJHX0JMT0NLX0lEX0xEUzA4X0JZOCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxYiwKKwlEQkdfQkxPQ0tfSURfTERTMTBfQlk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFjLAorCURCR19CTE9DS19JRF9MRFMxOF9CWTggICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MWQsCit9IERlYnVnQmxvY2tJZF9CWTg7Cit0eXBlZGVmIGVudW0gRGVidWdCbG9ja0lkX0JZMTYgeworCURCR19CTE9DS19JRF9SRVNFUlZFRF9CWTE2ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlEQkdfQkxPQ0tfSURfU0RNQTBfQlkxNiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJREJHX0JMT0NLX0lEX1NYTV9CWTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorCURCR19CTE9DS19JRF9NQ0RfQlkxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MywKKwlEQkdfQkxPQ0tfSURfU1FCX0JZMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCisJREJHX0JMT0NLX0lEX1NYU19CWTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1LAorCURCR19CTE9DS19JRF9UQ1BfQlkxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NiwKKwlEQkdfQkxPQ0tfSURfVENQMTZfQlkxNiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDcsCisJREJHX0JMT0NLX0lEX1RDQ19CWTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4LAorCURCR19CTE9DS19JRF9UQV9CWTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OSwKKwlEQkdfQkxPQ0tfSURfVEExMF9CWTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGEsCisJREJHX0JMT0NLX0lEX1REX0JZMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhiLAorCURCR19CTE9DS19JRF9URDEwX0JZMTYgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YywKKwlEQkdfQkxPQ0tfSURfTERTX0JZMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGQsCisJREJHX0JMT0NLX0lEX0xEUzEwX0JZMTYgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhlLAorfSBEZWJ1Z0Jsb2NrSWRfQlkxNjsKK3R5cGVkZWYgZW51bSBTdXJmYWNlRW5kaWFuIHsKKwlFTkRJQU5fTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJRU5ESUFOXzhJTjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUVORElBTl84SU4zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlFTkRJQU5fOElONjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCit9IFN1cmZhY2VFbmRpYW47Cit0eXBlZGVmIGVudW0gQXJyYXlNb2RlIHsKKwlBUlJBWV9MSU5FQVJfR0VORVJBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQVJSQVlfTElORUFSX0FMSUdORUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUFSUkFZXzFEX1RJTEVEX1RISU4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlBUlJBWV8xRF9USUxFRF9USElDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisJQVJSQVlfMkRfVElMRURfVEhJTjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorCUFSUkFZX1BSVF9USUxFRF9USElOMSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NSwKKwlBUlJBWV9QUlRfMkRfVElMRURfVEhJTjEgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYsCisJQVJSQVlfMkRfVElMRURfVEhJQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3LAorCUFSUkFZXzJEX1RJTEVEX1hUSElDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OCwKKwlBUlJBWV9QUlRfVElMRURfVEhJQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDksCisJQVJSQVlfUFJUXzJEX1RJTEVEX1RISUNLICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhLAorCUFSUkFZX1BSVF8zRF9USUxFRF9USElOMSAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YiwKKwlBUlJBWV8zRF9USUxFRF9USElOMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGMsCisJQVJSQVlfM0RfVElMRURfVEhJQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkLAorCUFSUkFZXzNEX1RJTEVEX1hUSElDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZSwKKwlBUlJBWV9QUlRfM0RfVElMRURfVEhJQ0sgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGYsCit9IEFycmF5TW9kZTsKK3R5cGVkZWYgZW51bSBQaXBlVGlsaW5nIHsKKwlDT05GSUdfMV9QSVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQ09ORklHXzJfUElQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUNPTkZJR180X1BJUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlDT05GSUdfOF9QSVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCit9IFBpcGVUaWxpbmc7Cit0eXBlZGVmIGVudW0gQmFua1RpbGluZyB7CisJQ09ORklHXzRfQkFOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUNPTkZJR184X0JBTksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKK30gQmFua1RpbGluZzsKK3R5cGVkZWYgZW51bSBHcm91cEludGVybGVhdmUgeworCUNPTkZJR18yNTZCX0dST1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlDT05GSUdfNTEyQl9HUk9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCit9IEdyb3VwSW50ZXJsZWF2ZTsKK3R5cGVkZWYgZW51bSBSb3dUaWxpbmcgeworCUNPTkZJR18xS0JfUk9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlDT05GSUdfMktCX1JPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJQ09ORklHXzRLQl9ST1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorCUNPTkZJR184S0JfUk9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MywKKwlDT05GSUdfMUtCX1JPV19PUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCisJQ09ORklHXzJLQl9ST1dfT1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1LAorCUNPTkZJR180S0JfUk9XX09QVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NiwKKwlDT05GSUdfOEtCX1JPV19PUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDcsCit9IFJvd1RpbGluZzsKK3R5cGVkZWYgZW51bSBCYW5rU3dhcEJ5dGVzIHsKKwlDT05GSUdfMTI4Ql9TV0FQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQ09ORklHXzI1NkJfU1dBUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUNPTkZJR181MTJCX1NXQVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlDT05GSUdfMUtCX1NXQVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCit9IEJhbmtTd2FwQnl0ZXM7Cit0eXBlZGVmIGVudW0gU2FtcGxlU3BsaXRCeXRlcyB7CisJQ09ORklHXzFLQl9TUExJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUNPTkZJR18yS0JfU1BMSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlDT05GSUdfNEtCX1NQTElUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQ09ORklHXzhLQl9TUExJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorfSBTYW1wbGVTcGxpdEJ5dGVzOwordHlwZWRlZiBlbnVtIE51bVBpcGVzIHsKKwlBRERSX0NPTkZJR18xX1BJUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQUREUl9DT05GSUdfMl9QSVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUFERFJfQ09ORklHXzRfUElQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlBRERSX0NPTkZJR184X1BJUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCit9IE51bVBpcGVzOwordHlwZWRlZiBlbnVtIFBpcGVJbnRlcmxlYXZlU2l6ZSB7CisJQUREUl9DT05GSUdfUElQRV9JTlRFUkxFQVZFXzI1NkIgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfQ09ORklHX1BJUEVfSU5URVJMRUFWRV81MTJCICAgICAgICAgICAgICAgICA9IDB4MSwKK30gUGlwZUludGVybGVhdmVTaXplOwordHlwZWRlZiBlbnVtIEJhbmtJbnRlcmxlYXZlU2l6ZSB7CisJQUREUl9DT05GSUdfQkFOS19JTlRFUkxFQVZFXzEgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfQ09ORklHX0JBTktfSU5URVJMRUFWRV8yICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlBRERSX0NPTkZJR19CQU5LX0lOVEVSTEVBVkVfNCAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQUREUl9DT05GSUdfQkFOS19JTlRFUkxFQVZFXzggICAgICAgICAgICAgICAgICAgID0gMHgzLAorfSBCYW5rSW50ZXJsZWF2ZVNpemU7Cit0eXBlZGVmIGVudW0gTnVtU2hhZGVyRW5naW5lcyB7CisJQUREUl9DT05GSUdfMV9TSEFERVJfRU5HSU5FICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfQ09ORklHXzJfU0hBREVSX0VOR0lORSAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKK30gTnVtU2hhZGVyRW5naW5lczsKK3R5cGVkZWYgZW51bSBTaGFkZXJFbmdpbmVUaWxlU2l6ZSB7CisJQUREUl9DT05GSUdfU0VfVElMRV8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfQ09ORklHX1NFX1RJTEVfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKK30gU2hhZGVyRW5naW5lVGlsZVNpemU7Cit0eXBlZGVmIGVudW0gTnVtR1BVcyB7CisJQUREUl9DT05GSUdfMV9HUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfQ09ORklHXzJfR1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlBRERSX0NPTkZJR180X0dQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCit9IE51bUdQVXM7Cit0eXBlZGVmIGVudW0gTXVsdGlHUFVUaWxlU2l6ZSB7CisJQUREUl9DT05GSUdfR1BVX1RJTEVfMTYgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfQ09ORklHX0dQVV9USUxFXzMyICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlBRERSX0NPTkZJR19HUFVfVElMRV82NCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQUREUl9DT05GSUdfR1BVX1RJTEVfMTI4ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorfSBNdWx0aUdQVVRpbGVTaXplOwordHlwZWRlZiBlbnVtIFJvd1NpemUgeworCUFERFJfQ09ORklHXzFLQl9ST1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlBRERSX0NPTkZJR18yS0JfUk9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJQUREUl9DT05GSUdfNEtCX1JPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorfSBSb3dTaXplOwordHlwZWRlZiBlbnVtIE51bUxvd2VyUGlwZXMgeworCUFERFJfQ09ORklHXzFfTE9XRVJfUElQRVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlBRERSX0NPTkZJR18yX0xPV0VSX1BJUEVTICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCit9IE51bUxvd2VyUGlwZXM7Cit0eXBlZGVmIGVudW0gQ29sb3JUcmFuc2Zvcm0geworCURDQ19DVF9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlEQ0NfQ1RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJQUJHUl9UT19BX0JHX0dfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorCUJHUkFfVE9fQkdfR19SQl9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MywKK30gQ29sb3JUcmFuc2Zvcm07Cit0eXBlZGVmIGVudW0gQ29tcGFyZVJlZiB7CisJUkVGX05FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCVJFRl9MRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlSRUZfRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJUkVGX0xFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorCVJFRl9HUkVBVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKKwlSRUZfTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisJUkVGX0dFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2LAorCVJFRl9BTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NywKK30gQ29tcGFyZVJlZjsKK3R5cGVkZWYgZW51bSBSZWFkU2l6ZSB7CisJUkVBRF8yNTZfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCVJFQURfNTEyX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKK30gUmVhZFNpemU7Cit0eXBlZGVmIGVudW0gRGVwdGhGb3JtYXQgeworCURFUFRIX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlERVBUSF8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJREVQVEhfWDhfMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorCURFUFRIXzhfMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MywKKwlERVBUSF9YOF8yNF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCisJREVQVEhfOF8yNF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1LAorCURFUFRIXzMyX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NiwKKwlERVBUSF9YMjRfOF8zMl9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDcsCit9IERlcHRoRm9ybWF0OwordHlwZWRlZiBlbnVtIFpGb3JtYXQgeworCVpfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlaXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJWl8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorCVpfMzJfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MywKK30gWkZvcm1hdDsKK3R5cGVkZWYgZW51bSBTdGVuY2lsRm9ybWF0IHsKKwlTVEVOQ0lMX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJU1RFTkNJTF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorfSBTdGVuY2lsRm9ybWF0OwordHlwZWRlZiBlbnVtIENtYXNrTW9kZSB7CisJQ01BU0tfQ0xFQVJfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUNNQVNLX0NMRUFSX09ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlDTUFTS19DTEVBUl9BTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQ01BU0tfQU5ZX0VYUEFOREVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorCUNNQVNLX0FMUEhBMF9GUkFHMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKKwlDTUFTS19BTFBIQTBfRlJBRzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisJQ01BU0tfQUxQSEEwX0ZSQUc0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2LAorCUNNQVNLX0FMUEhBMF9GUkFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NywKKwlDTUFTS19BTFBIQTFfRlJBRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgsCisJQ01BU0tfQUxQSEExX0ZSQUcyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5LAorCUNNQVNLX0FMUEhBMV9GUkFHNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YSwKKwlDTUFTS19BTFBIQTFfRlJBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGIsCisJQ01BU0tfQUxQSEFYX0ZSQUcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhjLAorCUNNQVNLX0FMUEhBWF9GUkFHMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZCwKKwlDTUFTS19BTFBIQVhfRlJBRzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGUsCisJQ01BU0tfQUxQSEFYX0ZSQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmLAorfSBDbWFza01vZGU7Cit0eXBlZGVmIGVudW0gUXVhZEV4cG9ydEZvcm1hdCB7CisJRVhQT1JUX1VOVVNFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUVYUE9SVF8zMl9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlFWFBPUlRfMzJfR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJRVhQT1JUXzMyX0FSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorCUVYUE9SVF9GUDE2X0FCR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKKwlFWFBPUlRfVU5TSUdORUQxNl9BQkdSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisJRVhQT1JUX1NJR05FRDE2X0FCR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2LAorCUVYUE9SVF8zMl9BQkdSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NywKK30gUXVhZEV4cG9ydEZvcm1hdDsKK3R5cGVkZWYgZW51bSBRdWFkRXhwb3J0Rm9ybWF0T2xkIHsKKwlFWFBPUlRfNFBfMzJCUENfQUJHUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJRVhQT1JUXzRQXzE2QlBDX0FCR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUVYUE9SVF80UF8zMkJQQ19HUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlFWFBPUlRfNFBfMzJCUENfQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisJRVhQT1JUXzJQXzMyQlBDX0FCR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorCUVYUE9SVF84UF8zMkJQQ19SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NSwKK30gUXVhZEV4cG9ydEZvcm1hdE9sZDsKK3R5cGVkZWYgZW51bSBDb2xvckZvcm1hdCB7CisJQ09MT1JfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUNPTE9SXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlDT0xPUl8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQ09MT1JfOF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorCUNPTE9SXzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKKwlDT0xPUl8xNl8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisJQ09MT1JfMTBfMTFfMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2LAorCUNPTE9SXzExXzExXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NywKKwlDT0xPUl8xMF8xMF8xMF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgsCisJQ09MT1JfMl8xMF8xMF8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5LAorCUNPTE9SXzhfOF84XzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YSwKKwlDT0xPUl8zMl8zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGIsCisJQ09MT1JfMTZfMTZfMTZfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhjLAorCUNPTE9SX1JFU0VSVkVEXzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZCwKKwlDT0xPUl8zMl8zMl8zMl8zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGUsCisJQ09MT1JfUkVTRVJWRURfMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmLAorCUNPTE9SXzVfNl81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTAsCisJQ09MT1JfMV81XzVfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMSwKKwlDT0xPUl81XzVfNV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEyLAorCUNPTE9SXzRfNF80XzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTMsCisJQ09MT1JfOF8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNCwKKwlDT0xPUl8yNF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE1LAorCUNPTE9SX1gyNF84XzMyX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTYsCisJQ09MT1JfUkVTRVJWRURfMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNywKK30gQ29sb3JGb3JtYXQ7Cit0eXBlZGVmIGVudW0gU3VyZmFjZUZvcm1hdCB7CisJRk1UX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUZNVF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlGTVRfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJRk1UXzhfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorCUZNVF8zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKKwlGTVRfMTZfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisJRk1UXzEwXzExXzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2LAorCUZNVF8xMV8xMV8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NywKKwlGTVRfMTBfMTBfMTBfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgsCisJRk1UXzJfMTBfMTBfMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5LAorCUZNVF84XzhfOF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YSwKKwlGTVRfMzJfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGIsCisJRk1UXzE2XzE2XzE2XzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhjLAorCUZNVF8zMl8zMl8zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZCwKKwlGTVRfMzJfMzJfMzJfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGUsCisJRk1UX1JFU0VSVkVEXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhmLAorCUZNVF81XzZfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTAsCisJRk1UXzFfNV81XzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMSwKKwlGTVRfNV81XzVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEyLAorCUZNVF80XzRfNF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTMsCisJRk1UXzhfMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNCwKKwlGTVRfMjRfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE1LAorCUZNVF9YMjRfOF8zMl9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTYsCisJRk1UX1JFU0VSVkVEXzMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNywKKwlGTVRfMTFfMTFfMTBfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE4LAorCUZNVF8xNl9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTksCisJRk1UXzMyX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxYSwKKwlGTVRfMTZfMTZfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFiLAorCUZNVF84XzI0X0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MWMsCisJRk1UXzI0XzhfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxZCwKKwlGTVRfMzJfMzJfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFlLAorCUZNVF8xMF8xMV8xMV9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MWYsCisJRk1UXzE2XzE2XzE2XzE2X0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMCwKKwlGTVRfM18zXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIxLAorCUZNVF82XzVfNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjIsCisJRk1UXzMyXzMyXzMyXzMyX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMywKKwlGTVRfUkVTRVJWRURfMzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI0LAorCUZNVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjUsCisJRk1UXzFfUkVWRVJTRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNiwKKwlGTVRfR0JfR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI3LAorCUZNVF9CR19SRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjgsCisJRk1UXzMyX0FTXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyOSwKKwlGTVRfMzJfQVNfOF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDJhLAorCUZNVF81XzlfOV85X1NIQVJFREVYUCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MmIsCisJRk1UXzhfOF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyYywKKwlGTVRfMTZfMTZfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDJkLAorCUZNVF8xNl8xNl8xNl9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MmUsCisJRk1UXzRfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyZiwKKwlGTVRfMzJfMzJfMzJfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMwLAorCUZNVF9CQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzEsCisJRk1UX0JDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzMiwKKwlGTVRfQkMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMzLAorCUZNVF9CQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzQsCisJRk1UX0JDNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzNSwKKwlGTVRfQkM2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDM2LAorCUZNVF9CQzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzcsCisJRk1UXzMyX0FTXzMyXzMyXzMyXzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzOCwKKwlGTVRfQVBDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDM5LAorCUZNVF9BUEM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4M2EsCisJRk1UX0FQQzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzYiwKKwlGTVRfQVBDNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDNjLAorCUZNVF9BUEM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4M2QsCisJRk1UX0NUWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzZSwKKwlGTVRfUkVTRVJWRURfNjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDNmLAorfSBTdXJmYWNlRm9ybWF0OwordHlwZWRlZiBlbnVtIEJVRl9EQVRBX0ZPUk1BVCB7CisJQlVGX0RBVEFfRk9STUFUX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUJVRl9EQVRBX0ZPUk1BVF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlCVUZfREFUQV9GT1JNQVRfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQlVGX0RBVEFfRk9STUFUXzhfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorCUJVRl9EQVRBX0ZPUk1BVF8zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKKwlCVUZfREFUQV9GT1JNQVRfMTZfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisJQlVGX0RBVEFfRk9STUFUXzEwXzExXzExICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2LAorCUJVRl9EQVRBX0ZPUk1BVF8xMV8xMV8xMCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NywKKwlCVUZfREFUQV9GT1JNQVRfMTBfMTBfMTBfMiAgICAgICAgICAgICAgICAgICAgICAgPSAweDgsCisJQlVGX0RBVEFfRk9STUFUXzJfMTBfMTBfMTAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5LAorCUJVRl9EQVRBX0ZPUk1BVF84XzhfOF84ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YSwKKwlCVUZfREFUQV9GT1JNQVRfMzJfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGIsCisJQlVGX0RBVEFfRk9STUFUXzE2XzE2XzE2XzE2ICAgICAgICAgICAgICAgICAgICAgID0gMHhjLAorCUJVRl9EQVRBX0ZPUk1BVF8zMl8zMl8zMiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZCwKKwlCVUZfREFUQV9GT1JNQVRfMzJfMzJfMzJfMzIgICAgICAgICAgICAgICAgICAgICAgPSAweGUsCisJQlVGX0RBVEFfRk9STUFUX1JFU0VSVkVEXzE1ICAgICAgICAgICAgICAgICAgICAgID0gMHhmLAorfSBCVUZfREFUQV9GT1JNQVQ7Cit0eXBlZGVmIGVudW0gSU1HX0RBVEFfRk9STUFUIHsKKwlJTUdfREFUQV9GT1JNQVRfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJSU1HX0RBVEFfRk9STUFUXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUlNR19EQVRBX0ZPUk1BVF8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlJTUdfREFUQV9GT1JNQVRfOF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisJSU1HX0RBVEFfRk9STUFUXzMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorCUlNR19EQVRBX0ZPUk1BVF8xNl8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NSwKKwlJTUdfREFUQV9GT1JNQVRfMTBfMTFfMTEgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYsCisJSU1HX0RBVEFfRk9STUFUXzExXzExXzEwICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3LAorCUlNR19EQVRBX0ZPUk1BVF8xMF8xMF8xMF8yICAgICAgICAgICAgICAgICAgICAgICA9IDB4OCwKKwlJTUdfREFUQV9GT1JNQVRfMl8xMF8xMF8xMCAgICAgICAgICAgICAgICAgICAgICAgPSAweDksCisJSU1HX0RBVEFfRk9STUFUXzhfOF84XzggICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhLAorCUlNR19EQVRBX0ZPUk1BVF8zMl8zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YiwKKwlJTUdfREFUQV9GT1JNQVRfMTZfMTZfMTZfMTYgICAgICAgICAgICAgICAgICAgICAgPSAweGMsCisJSU1HX0RBVEFfRk9STUFUXzMyXzMyXzMyICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkLAorCUlNR19EQVRBX0ZPUk1BVF8zMl8zMl8zMl8zMiAgICAgICAgICAgICAgICAgICAgICA9IDB4ZSwKKwlJTUdfREFUQV9GT1JNQVRfUkVTRVJWRURfMTUgICAgICAgICAgICAgICAgICAgICAgPSAweGYsCisJSU1HX0RBVEFfRk9STUFUXzVfNl81ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMCwKKwlJTUdfREFUQV9GT1JNQVRfMV81XzVfNSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExLAorCUlNR19EQVRBX0ZPUk1BVF81XzVfNV8xICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTIsCisJSU1HX0RBVEFfRk9STUFUXzRfNF80XzQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMywKKwlJTUdfREFUQV9GT1JNQVRfOF8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0LAorCUlNR19EQVRBX0ZPUk1BVF8yNF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTUsCisJSU1HX0RBVEFfRk9STUFUX1gyNF84XzMyICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNiwKKwlJTUdfREFUQV9GT1JNQVRfUkVTRVJWRURfMjMgICAgICAgICAgICAgICAgICAgICAgPSAweDE3LAorCUlNR19EQVRBX0ZPUk1BVF9SRVNFUlZFRF8yNCAgICAgICAgICAgICAgICAgICAgICA9IDB4MTgsCisJSU1HX0RBVEFfRk9STUFUX1JFU0VSVkVEXzI1ICAgICAgICAgICAgICAgICAgICAgID0gMHgxOSwKKwlJTUdfREFUQV9GT1JNQVRfUkVTRVJWRURfMjYgICAgICAgICAgICAgICAgICAgICAgPSAweDFhLAorCUlNR19EQVRBX0ZPUk1BVF9SRVNFUlZFRF8yNyAgICAgICAgICAgICAgICAgICAgICA9IDB4MWIsCisJSU1HX0RBVEFfRk9STUFUX1JFU0VSVkVEXzI4ICAgICAgICAgICAgICAgICAgICAgID0gMHgxYywKKwlJTUdfREFUQV9GT1JNQVRfUkVTRVJWRURfMjkgICAgICAgICAgICAgICAgICAgICAgPSAweDFkLAorCUlNR19EQVRBX0ZPUk1BVF9SRVNFUlZFRF8zMCAgICAgICAgICAgICAgICAgICAgICA9IDB4MWUsCisJSU1HX0RBVEFfRk9STUFUX1JFU0VSVkVEXzMxICAgICAgICAgICAgICAgICAgICAgID0gMHgxZiwKKwlJTUdfREFUQV9GT1JNQVRfR0JfR1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIwLAorCUlNR19EQVRBX0ZPUk1BVF9CR19SRyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjEsCisJSU1HX0RBVEFfRk9STUFUXzVfOV85XzkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMiwKKwlJTUdfREFUQV9GT1JNQVRfQkMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIzLAorCUlNR19EQVRBX0ZPUk1BVF9CQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjQsCisJSU1HX0RBVEFfRk9STUFUX0JDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNSwKKwlJTUdfREFUQV9GT1JNQVRfQkM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2LAorCUlNR19EQVRBX0ZPUk1BVF9CQzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjcsCisJSU1HX0RBVEFfRk9STUFUX0JDNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyOCwKKwlJTUdfREFUQV9GT1JNQVRfQkM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI5LAorCUlNR19EQVRBX0ZPUk1BVF9SRVNFUlZFRF80MiAgICAgICAgICAgICAgICAgICAgICA9IDB4MmEsCisJSU1HX0RBVEFfRk9STUFUX1JFU0VSVkVEXzQzICAgICAgICAgICAgICAgICAgICAgID0gMHgyYiwKKwlJTUdfREFUQV9GT1JNQVRfRk1BU0s4X1MyX0YxICAgICAgICAgICAgICAgICAgICAgPSAweDJjLAorCUlNR19EQVRBX0ZPUk1BVF9GTUFTSzhfUzRfRjEgICAgICAgICAgICAgICAgICAgICA9IDB4MmQsCisJSU1HX0RBVEFfRk9STUFUX0ZNQVNLOF9TOF9GMSAgICAgICAgICAgICAgICAgICAgID0gMHgyZSwKKwlJTUdfREFUQV9GT1JNQVRfRk1BU0s4X1MyX0YyICAgICAgICAgICAgICAgICAgICAgPSAweDJmLAorCUlNR19EQVRBX0ZPUk1BVF9GTUFTSzhfUzRfRjIgICAgICAgICAgICAgICAgICAgICA9IDB4MzAsCisJSU1HX0RBVEFfRk9STUFUX0ZNQVNLOF9TNF9GNCAgICAgICAgICAgICAgICAgICAgID0gMHgzMSwKKwlJTUdfREFUQV9GT1JNQVRfRk1BU0sxNl9TMTZfRjEgICAgICAgICAgICAgICAgICAgPSAweDMyLAorCUlNR19EQVRBX0ZPUk1BVF9GTUFTSzE2X1M4X0YyICAgICAgICAgICAgICAgICAgICA9IDB4MzMsCisJSU1HX0RBVEFfRk9STUFUX0ZNQVNLMzJfUzE2X0YyICAgICAgICAgICAgICAgICAgID0gMHgzNCwKKwlJTUdfREFUQV9GT1JNQVRfRk1BU0szMl9TOF9GNCAgICAgICAgICAgICAgICAgICAgPSAweDM1LAorCUlNR19EQVRBX0ZPUk1BVF9GTUFTSzMyX1M4X0Y4ICAgICAgICAgICAgICAgICAgICA9IDB4MzYsCisJSU1HX0RBVEFfRk9STUFUX0ZNQVNLNjRfUzE2X0Y0ICAgICAgICAgICAgICAgICAgID0gMHgzNywKKwlJTUdfREFUQV9GT1JNQVRfRk1BU0s2NF9TMTZfRjggICAgICAgICAgICAgICAgICAgPSAweDM4LAorCUlNR19EQVRBX0ZPUk1BVF80XzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzksCisJSU1HX0RBVEFfRk9STUFUXzZfNV81ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzYSwKKwlJTUdfREFUQV9GT1JNQVRfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDNiLAorCUlNR19EQVRBX0ZPUk1BVF8xX1JFVkVSU0VEICAgICAgICAgICAgICAgICAgICAgICA9IDB4M2MsCisJSU1HX0RBVEFfRk9STUFUXzMyX0FTXzggICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzZCwKKwlJTUdfREFUQV9GT1JNQVRfMzJfQVNfOF84ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDNlLAorCUlNR19EQVRBX0ZPUk1BVF8zMl9BU18zMl8zMl8zMl8zMiAgICAgICAgICAgICAgICA9IDB4M2YsCit9IElNR19EQVRBX0ZPUk1BVDsKK3R5cGVkZWYgZW51bSBCVUZfTlVNX0ZPUk1BVCB7CisJQlVGX05VTV9GT1JNQVRfVU5PUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUJVRl9OVU1fRk9STUFUX1NOT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlCVUZfTlVNX0ZPUk1BVF9VU0NBTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQlVGX05VTV9GT1JNQVRfU1NDQUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorCUJVRl9OVU1fRk9STUFUX1VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKKwlCVUZfTlVNX0ZPUk1BVF9TSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisJQlVGX05VTV9GT1JNQVRfUkVTRVJWRURfNiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2LAorCUJVRl9OVU1fRk9STUFUX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NywKK30gQlVGX05VTV9GT1JNQVQ7Cit0eXBlZGVmIGVudW0gSU1HX05VTV9GT1JNQVQgeworCUlNR19OVU1fRk9STUFUX1VOT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlJTUdfTlVNX0ZPUk1BVF9TTk9STSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJSU1HX05VTV9GT1JNQVRfVVNDQUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorCUlNR19OVU1fRk9STUFUX1NTQ0FMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MywKKwlJTUdfTlVNX0ZPUk1BVF9VSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCisJSU1HX05VTV9GT1JNQVRfU0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg1LAorCUlNR19OVU1fRk9STUFUX1JFU0VSVkVEXzYgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NiwKKwlJTUdfTlVNX0ZPUk1BVF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDcsCisJSU1HX05VTV9GT1JNQVRfUkVTRVJWRURfOCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4LAorCUlNR19OVU1fRk9STUFUX1NSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OSwKKwlJTUdfTlVNX0ZPUk1BVF9SRVNFUlZFRF8xMCAgICAgICAgICAgICAgICAgICAgICAgPSAweGEsCisJSU1HX05VTV9GT1JNQVRfUkVTRVJWRURfMTEgICAgICAgICAgICAgICAgICAgICAgID0gMHhiLAorCUlNR19OVU1fRk9STUFUX1JFU0VSVkVEXzEyICAgICAgICAgICAgICAgICAgICAgICA9IDB4YywKKwlJTUdfTlVNX0ZPUk1BVF9SRVNFUlZFRF8xMyAgICAgICAgICAgICAgICAgICAgICAgPSAweGQsCisJSU1HX05VTV9GT1JNQVRfUkVTRVJWRURfMTQgICAgICAgICAgICAgICAgICAgICAgID0gMHhlLAorCUlNR19OVU1fRk9STUFUX1JFU0VSVkVEXzE1ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZiwKK30gSU1HX05VTV9GT1JNQVQ7Cit0eXBlZGVmIGVudW0gVGlsZVR5cGUgeworCUFSUkFZX0NPTE9SX1RJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlBUlJBWV9ERVBUSF9USUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCit9IFRpbGVUeXBlOwordHlwZWRlZiBlbnVtIE5vbkRpc3BUaWxpbmdPcmRlciB7CisJQUREUl9TVVJGX01JQ1JPX1RJTElOR19ESVNQTEFZICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfU1VSRl9NSUNST19USUxJTkdfTk9OX0RJU1BMQVkgICAgICAgICAgICAgICA9IDB4MSwKK30gTm9uRGlzcFRpbGluZ09yZGVyOwordHlwZWRlZiBlbnVtIE1pY3JvVGlsZU1vZGUgeworCUFERFJfU1VSRl9ESVNQTEFZX01JQ1JPX1RJTElORyAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlBRERSX1NVUkZfVEhJTl9NSUNST19USUxJTkcgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJQUREUl9TVVJGX0RFUFRIX01JQ1JPX1RJTElORyAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorCUFERFJfU1VSRl9ST1RBVEVEX01JQ1JPX1RJTElORyAgICAgICAgICAgICAgICAgICA9IDB4MywKKwlBRERSX1NVUkZfVEhJQ0tfTUlDUk9fVElMSU5HICAgICAgICAgICAgICAgICAgICAgPSAweDQsCit9IE1pY3JvVGlsZU1vZGU7Cit0eXBlZGVmIGVudW0gVGlsZVNwbGl0IHsKKwlBRERSX1NVUkZfVElMRV9TUExJVF82NEIgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQUREUl9TVVJGX1RJTEVfU1BMSVRfMTI4QiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUFERFJfU1VSRl9USUxFX1NQTElUXzI1NkIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlBRERSX1NVUkZfVElMRV9TUExJVF81MTJCICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisJQUREUl9TVVJGX1RJTEVfU1BMSVRfMUtCICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorCUFERFJfU1VSRl9USUxFX1NQTElUXzJLQiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NSwKKwlBRERSX1NVUkZfVElMRV9TUExJVF80S0IgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYsCit9IFRpbGVTcGxpdDsKK3R5cGVkZWYgZW51bSBTYW1wbGVTcGxpdCB7CisJQUREUl9TVVJGX1NBTVBMRV9TUExJVF8xICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfU1VSRl9TQU1QTEVfU1BMSVRfMiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlBRERSX1NVUkZfU0FNUExFX1NQTElUXzQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQUREUl9TVVJGX1NBTVBMRV9TUExJVF84ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorfSBTYW1wbGVTcGxpdDsKK3R5cGVkZWYgZW51bSBQaXBlQ29uZmlnIHsKKwlBRERSX1NVUkZfUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQUREUl9TVVJGX1AyX1JFU0VSVkVEMCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUFERFJfU1VSRl9QMl9SRVNFUlZFRDEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlBRERSX1NVUkZfUDJfUkVTRVJWRUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisJQUREUl9TVVJGX1A0Xzh4MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorCUFERFJfU1VSRl9QNF8xNngxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NSwKKwlBRERSX1NVUkZfUDRfMTZ4MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDYsCisJQUREUl9TVVJGX1A0XzMyeDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg3LAorCUFERFJfU1VSRl9QOF8xNngxNl84eDE2ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OCwKKwlBRERSX1NVUkZfUDhfMTZ4MzJfOHgxNiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDksCisJQUREUl9TVVJGX1A4XzMyeDMyXzh4MTYgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhhLAorCUFERFJfU1VSRl9QOF8xNngzMl8xNngxNiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4YiwKKwlBRERSX1NVUkZfUDhfMzJ4MzJfMTZ4MTYgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGMsCisJQUREUl9TVVJGX1A4XzMyeDMyXzE2eDMyICAgICAgICAgICAgICAgICAgICAgICAgID0gMHhkLAorCUFERFJfU1VSRl9QOF8zMng2NF8zMngzMiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ZSwKKwlBRERSX1NVUkZfUDhfUkVTRVJWRUQwICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweGYsCisJQUREUl9TVVJGX1AxNl8zMngzMl84eDE2ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMCwKKwlBRERSX1NVUkZfUDE2XzMyeDMyXzE2eDE2ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExLAorfSBQaXBlQ29uZmlnOwordHlwZWRlZiBlbnVtIE51bUJhbmtzIHsKKwlBRERSX1NVUkZfMl9CQU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQUREUl9TVVJGXzRfQkFOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUFERFJfU1VSRl84X0JBTksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlBRERSX1NVUkZfMTZfQkFOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCit9IE51bUJhbmtzOwordHlwZWRlZiBlbnVtIEJhbmtXaWR0aCB7CisJQUREUl9TVVJGX0JBTktfV0lEVEhfMSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfU1VSRl9CQU5LX1dJRFRIXzIgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlBRERSX1NVUkZfQkFOS19XSURUSF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQUREUl9TVVJGX0JBTktfV0lEVEhfOCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorfSBCYW5rV2lkdGg7Cit0eXBlZGVmIGVudW0gQmFua0hlaWdodCB7CisJQUREUl9TVVJGX0JBTktfSEVJR0hUXzEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfU1VSRl9CQU5LX0hFSUdIVF8yICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlBRERSX1NVUkZfQkFOS19IRUlHSFRfNCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQUREUl9TVVJGX0JBTktfSEVJR0hUXzggICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorfSBCYW5rSGVpZ2h0OwordHlwZWRlZiBlbnVtIEJhbmtXaWR0aEhlaWdodCB7CisJQUREUl9TVVJGX0JBTktfV0hfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUFERFJfU1VSRl9CQU5LX1dIXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlBRERSX1NVUkZfQkFOS19XSF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJQUREUl9TVVJGX0JBTktfV0hfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorfSBCYW5rV2lkdGhIZWlnaHQ7Cit0eXBlZGVmIGVudW0gTWFjcm9UaWxlQXNwZWN0IHsKKwlBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzEgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQUREUl9TVVJGX01BQ1JPX0FTUEVDVF8yICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUFERFJfU1VSRl9NQUNST19BU1BFQ1RfNCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlBRERSX1NVUkZfTUFDUk9fQVNQRUNUXzggICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCit9IE1hY3JvVGlsZUFzcGVjdDsKK3R5cGVkZWYgZW51bSBHQVRDTDFSZXF1ZXN0VHlwZSB7CisJR0FUQ0wxX1RZUEVfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUdBVENMMV9UWVBFX1NIT09URE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlHQVRDTDFfVFlQRV9CWVBBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCit9IEdBVENMMVJlcXVlc3RUeXBlOwordHlwZWRlZiBlbnVtIFRDQ19DQUNIRV9QT0xJQ0lFUyB7CisJVENDX0NBQ0hFX1BPTElDWV9MUlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCVRDQ19DQUNIRV9QT0xJQ1lfU1RSRUFNICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKK30gVENDX0NBQ0hFX1BPTElDSUVTOwordHlwZWRlZiBlbnVtIE1UWVBFIHsKKwlNVFlQRV9OQ19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJTVRZUEVfTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCU1UWVBFX0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlNVFlQRV9VQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCit9IE1UWVBFOwordHlwZWRlZiBlbnVtIFBFUkZNT05fQ09VTlRFUl9NT0RFIHsKKwlQRVJGTU9OX0NPVU5URVJfTU9ERV9BQ0NVTSAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJUEVSRk1PTl9DT1VOVEVSX01PREVfQUNUSVZFX0NZQ0xFUyAgICAgICAgICAgICAgID0gMHgxLAorCVBFUkZNT05fQ09VTlRFUl9NT0RFX01BWCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlQRVJGTU9OX0NPVU5URVJfTU9ERV9ESVJUWSAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisJUEVSRk1PTl9DT1VOVEVSX01PREVfU0FNUExFICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorCVBFUkZNT05fQ09VTlRFUl9NT0RFX0NZQ0xFU19TSU5DRV9GSVJTVF9FVkVOVCAgICA9IDB4NSwKKwlQRVJGTU9OX0NPVU5URVJfTU9ERV9DWUNMRVNfU0lOQ0VfTEFTVF9FVkVOVCAgICAgPSAweDYsCisJUEVSRk1PTl9DT1VOVEVSX01PREVfQ1lDTEVTX0dFX0hJICAgICAgICAgICAgICAgID0gMHg3LAorCVBFUkZNT05fQ09VTlRFUl9NT0RFX0NZQ0xFU19FUV9ISSAgICAgICAgICAgICAgICA9IDB4OCwKKwlQRVJGTU9OX0NPVU5URVJfTU9ERV9JTkFDVElWRV9DWUNMRVMgICAgICAgICAgICAgPSAweDksCisJUEVSRk1PTl9DT1VOVEVSX01PREVfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgID0gMHhmLAorfSBQRVJGTU9OX0NPVU5URVJfTU9ERTsKK3R5cGVkZWYgZW51bSBQRVJGTU9OX1NQTV9NT0RFIHsKKwlQRVJGTU9OX1NQTV9NT0RFX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJUEVSRk1PTl9TUE1fTU9ERV8xNkJJVF9DTEFNUCAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCVBFUkZNT05fU1BNX01PREVfMTZCSVRfTk9fQ0xBTVAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlQRVJGTU9OX1NQTV9NT0RFXzMyQklUX0NMQU1QICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisJUEVSRk1PTl9TUE1fTU9ERV8zMkJJVF9OT19DTEFNUCAgICAgICAgICAgICAgICAgID0gMHg0LAorCVBFUkZNT05fU1BNX01PREVfUkVTRVJWRURfNSAgICAgICAgICAgICAgICAgICAgICA9IDB4NSwKKwlQRVJGTU9OX1NQTV9NT0RFX1JFU0VSVkVEXzYgICAgICAgICAgICAgICAgICAgICAgPSAweDYsCisJUEVSRk1PTl9TUE1fTU9ERV9SRVNFUlZFRF83ICAgICAgICAgICAgICAgICAgICAgID0gMHg3LAorCVBFUkZNT05fU1BNX01PREVfVEVTVF9NT0RFXzAgICAgICAgICAgICAgICAgICAgICA9IDB4OCwKKwlQRVJGTU9OX1NQTV9NT0RFX1RFU1RfTU9ERV8xICAgICAgICAgICAgICAgICAgICAgPSAweDksCisJUEVSRk1PTl9TUE1fTU9ERV9URVNUX01PREVfMiAgICAgICAgICAgICAgICAgICAgID0gMHhhLAorfSBQRVJGTU9OX1NQTV9NT0RFOwordHlwZWRlZiBlbnVtIFN1cmZhY2VUaWxpbmcgeworCUFSUkFZX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlBUlJBWV9USUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCit9IFN1cmZhY2VUaWxpbmc7Cit0eXBlZGVmIGVudW0gU3VyZmFjZUFycmF5IHsKKwlBUlJBWV8xRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQVJSQVlfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUFSUkFZXzNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKKwlBUlJBWV8zRF9TTElDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMsCit9IFN1cmZhY2VBcnJheTsKK3R5cGVkZWYgZW51bSBDb2xvckFycmF5IHsKKwlBUlJBWV8yRF9BTFRfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQVJSQVlfMkRfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorCUFSUkFZXzNEX1NMSUNFX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MywKK30gQ29sb3JBcnJheTsKK3R5cGVkZWYgZW51bSBEZXB0aEFycmF5IHsKKwlBUlJBWV8yRF9BTFRfREVQVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJQVJSQVlfMkRfREVQVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorfSBEZXB0aEFycmF5OwordHlwZWRlZiBlbnVtIEVOVU1fTlVNX1NJTURfUEVSX0NVIHsKKwlOVU1fU0lNRF9QRVJfQ1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCit9IEVOVU1fTlVNX1NJTURfUEVSX0NVOwordHlwZWRlZiBlbnVtIE1FTV9QV1JfRk9SQ0VfQ1RSTCB7CisJTk9fRk9SQ0VfUkVRVUVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUZPUkNFX0xJR0hUX1NMRUVQX1JFUVVFU1QgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlGT1JDRV9ERUVQX1NMRUVQX1JFUVVFU1QgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisJRk9SQ0VfU0hVVF9ET1dOX1JFUVVFU1QgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzLAorfSBNRU1fUFdSX0ZPUkNFX0NUUkw7Cit0eXBlZGVmIGVudW0gTUVNX1BXUl9GT1JDRV9DVFJMMiB7CisJTk9fRk9SQ0VfUkVRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAorCUZPUkNFX0xJR0hUX1NMRUVQX1JFUSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKK30gTUVNX1BXUl9GT1JDRV9DVFJMMjsKK3R5cGVkZWYgZW51bSBNRU1fUFdSX0RJU19DVFJMIHsKKwlFTkFCTEVfTUVNX1BXUl9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJRElTQUJMRV9NRU1fUFdSX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorfSBNRU1fUFdSX0RJU19DVFJMOwordHlwZWRlZiBlbnVtIE1FTV9QV1JfU0VMX0NUUkwgeworCURZTkFNSUNfU0hVVF9ET1dOX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MCwKKwlEWU5BTUlDX0RFRVBfU0xFRVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisJRFlOQU1JQ19MSUdIVF9TTEVFUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorfSBNRU1fUFdSX1NFTF9DVFJMOwordHlwZWRlZiBlbnVtIE1FTV9QV1JfU0VMX0NUUkwyIHsKKwlEWU5BTUlDX0RFRVBfU0xFRVBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCisJRFlOQU1JQ19MSUdIVF9TTEVFUF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorfSBNRU1fUFdSX1NFTF9DVFJMMjsKKworI2VuZGlmIC8qIEFDUF8yXzJfRU5VTV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL2luY2x1ZGUvYWNwXzJfMl9zaF9tYXNrLmggYi9zb3VuZC9zb2MvYW1kL2luY2x1ZGUvYWNwXzJfMl9zaF9tYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkMmQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9hbWQvaW5jbHVkZS9hY3BfMl8yX3NoX21hc2suaApAQCAtMCwwICsxLDIyOTIgQEAKKy8qCisgKiBBQ1BfMl8yIFJlZ2lzdGVyIGRvY3VtZW50YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBBQ1BfMl8yX1NIX01BU0tfSAorI2RlZmluZSBBQ1BfMl8yX1NIX01BU0tfSAorCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8wX19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfMF9fRE1BQ2hSc3RfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NOVExfMF9fRE1BQ2hSdW5fTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzBfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzBfX0RNQUNoSU9DRW5fTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzBfX0RNQUNoSU9DRW5fX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfMF9fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8wX19DaXJjdWxhcl9ETUFfRW5fX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRE1BX0NOVExfMF9fRE1BQ2hHcmFjZWZ1bFJzdEVuX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfRE1BX0NOVExfMF9fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzFfX0RNQUNoUnN0X01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xX19ETUFDaFJzdF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xX19ETUFDaFJ1bl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfMV9fRE1BQ2hSdW5fX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfMV9fRE1BQ2hJT0NFbl9NQVNLIDB4NAorI2RlZmluZSBBQ1BfRE1BX0NOVExfMV9fRE1BQ2hJT0NFbl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xX19DaXJjdWxhcl9ETUFfRW5fTUFTSyAweDgKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzFfX0NpcmN1bGFyX0RNQV9Fbl9fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xX19ETUFDaEdyYWNlZnVsUnN0RW5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xX19ETUFDaEdyYWNlZnVsUnN0RW5fX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfRE1BX0NOVExfMl9fRE1BQ2hSc3RfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzJfX0RNQUNoUnN0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzJfX0RNQUNoUnVuX01BU0sgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8yX19ETUFDaFJ1bl9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8yX19ETUFDaElPQ0VuX01BU0sgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8yX19ETUFDaElPQ0VuX19TSElGVCAweDIKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzJfX0NpcmN1bGFyX0RNQV9Fbl9NQVNLIDB4OAorI2RlZmluZSBBQ1BfRE1BX0NOVExfMl9fQ2lyY3VsYXJfRE1BX0VuX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzJfX0RNQUNoR3JhY2VmdWxSc3RFbl9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzJfX0RNQUNoR3JhY2VmdWxSc3RFbl9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8zX19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfM19fRE1BQ2hSc3RfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NOVExfM19fRE1BQ2hSdW5fTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzNfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzNfX0RNQUNoSU9DRW5fTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzNfX0RNQUNoSU9DRW5fX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfM19fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8zX19DaXJjdWxhcl9ETUFfRW5fX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRE1BX0NOVExfM19fRE1BQ2hHcmFjZWZ1bFJzdEVuX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfRE1BX0NOVExfM19fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzRfX0RNQUNoUnN0X01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfQ05UTF80X19ETUFDaFJzdF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF80X19ETUFDaFJ1bl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfNF9fRE1BQ2hSdW5fX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfNF9fRE1BQ2hJT0NFbl9NQVNLIDB4NAorI2RlZmluZSBBQ1BfRE1BX0NOVExfNF9fRE1BQ2hJT0NFbl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF80X19DaXJjdWxhcl9ETUFfRW5fTUFTSyAweDgKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzRfX0NpcmN1bGFyX0RNQV9Fbl9fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9ETUFfQ05UTF80X19ETUFDaEdyYWNlZnVsUnN0RW5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF80X19ETUFDaEdyYWNlZnVsUnN0RW5fX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfRE1BX0NOVExfNV9fRE1BQ2hSc3RfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzVfX0RNQUNoUnN0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzVfX0RNQUNoUnVuX01BU0sgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF81X19ETUFDaFJ1bl9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9ETUFfQ05UTF81X19ETUFDaElPQ0VuX01BU0sgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF81X19ETUFDaElPQ0VuX19TSElGVCAweDIKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzVfX0NpcmN1bGFyX0RNQV9Fbl9NQVNLIDB4OAorI2RlZmluZSBBQ1BfRE1BX0NOVExfNV9fQ2lyY3VsYXJfRE1BX0VuX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzVfX0RNQUNoR3JhY2VmdWxSc3RFbl9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzVfX0RNQUNoR3JhY2VmdWxSc3RFbl9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF82X19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfNl9fRE1BQ2hSc3RfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NOVExfNl9fRE1BQ2hSdW5fTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzZfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzZfX0RNQUNoSU9DRW5fTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzZfX0RNQUNoSU9DRW5fX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfNl9fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF82X19DaXJjdWxhcl9ETUFfRW5fX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRE1BX0NOVExfNl9fRE1BQ2hHcmFjZWZ1bFJzdEVuX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfRE1BX0NOVExfNl9fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzdfX0RNQUNoUnN0X01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfQ05UTF83X19ETUFDaFJzdF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF83X19ETUFDaFJ1bl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfN19fRE1BQ2hSdW5fX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfN19fRE1BQ2hJT0NFbl9NQVNLIDB4NAorI2RlZmluZSBBQ1BfRE1BX0NOVExfN19fRE1BQ2hJT0NFbl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF83X19DaXJjdWxhcl9ETUFfRW5fTUFTSyAweDgKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzdfX0NpcmN1bGFyX0RNQV9Fbl9fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9ETUFfQ05UTF83X19ETUFDaEdyYWNlZnVsUnN0RW5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF83X19ETUFDaEdyYWNlZnVsUnN0RW5fX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfRE1BX0NOVExfOF9fRE1BQ2hSc3RfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzhfX0RNQUNoUnN0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzhfX0RNQUNoUnVuX01BU0sgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF84X19ETUFDaFJ1bl9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9ETUFfQ05UTF84X19ETUFDaElPQ0VuX01BU0sgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF84X19ETUFDaElPQ0VuX19TSElGVCAweDIKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzhfX0NpcmN1bGFyX0RNQV9Fbl9NQVNLIDB4OAorI2RlZmluZSBBQ1BfRE1BX0NOVExfOF9fQ2lyY3VsYXJfRE1BX0VuX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzhfX0RNQUNoR3JhY2VmdWxSc3RFbl9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzhfX0RNQUNoR3JhY2VmdWxSc3RFbl9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF85X19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfOV9fRE1BQ2hSc3RfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NOVExfOV9fRE1BQ2hSdW5fTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzlfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzlfX0RNQUNoSU9DRW5fTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzlfX0RNQUNoSU9DRW5fX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfOV9fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF85X19DaXJjdWxhcl9ETUFfRW5fX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRE1BX0NOVExfOV9fRE1BQ2hHcmFjZWZ1bFJzdEVuX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfRE1BX0NOVExfOV9fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEwX19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTBfX0RNQUNoUnN0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEwX19ETUFDaFJ1bl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTBfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEwX19ETUFDaElPQ0VuX01BU0sgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMF9fRE1BQ2hJT0NFbl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMF9fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMF9fQ2lyY3VsYXJfRE1BX0VuX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEwX19ETUFDaEdyYWNlZnVsUnN0RW5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMF9fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzExX19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTFfX0RNQUNoUnN0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzExX19ETUFDaFJ1bl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTFfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzExX19ETUFDaElPQ0VuX01BU0sgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMV9fRE1BQ2hJT0NFbl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMV9fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMV9fQ2lyY3VsYXJfRE1BX0VuX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzExX19ETUFDaEdyYWNlZnVsUnN0RW5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMV9fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEyX19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTJfX0RNQUNoUnN0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEyX19ETUFDaFJ1bl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTJfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEyX19ETUFDaElPQ0VuX01BU0sgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMl9fRE1BQ2hJT0NFbl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMl9fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMl9fQ2lyY3VsYXJfRE1BX0VuX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEyX19ETUFDaEdyYWNlZnVsUnN0RW5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xMl9fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEzX19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTNfX0RNQUNoUnN0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEzX19ETUFDaFJ1bl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTNfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEzX19ETUFDaElPQ0VuX01BU0sgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xM19fRE1BQ2hJT0NFbl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xM19fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xM19fQ2lyY3VsYXJfRE1BX0VuX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzEzX19ETUFDaEdyYWNlZnVsUnN0RW5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xM19fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzE0X19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTRfX0RNQUNoUnN0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzE0X19ETUFDaFJ1bl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTRfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzE0X19ETUFDaElPQ0VuX01BU0sgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xNF9fRE1BQ2hJT0NFbl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xNF9fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xNF9fQ2lyY3VsYXJfRE1BX0VuX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzE0X19ETUFDaEdyYWNlZnVsUnN0RW5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xNF9fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzE1X19ETUFDaFJzdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTVfX0RNQUNoUnN0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzE1X19ETUFDaFJ1bl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRE1BX0NOVExfMTVfX0RNQUNoUnVuX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzE1X19ETUFDaElPQ0VuX01BU0sgMHg0CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xNV9fRE1BQ2hJT0NFbl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xNV9fQ2lyY3VsYXJfRE1BX0VuX01BU0sgMHg4CisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xNV9fQ2lyY3VsYXJfRE1BX0VuX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RNQV9DTlRMXzE1X19ETUFDaEdyYWNlZnVsUnN0RW5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9ETUFfQ05UTF8xNV9fRE1BQ2hHcmFjZWZ1bFJzdEVuX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX1NUUlRfSURYXzBfX0RNQUNoRHNjclN0cnRJZHhfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfMF9fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xX19ETUFDaERzY3JTdHJ0SWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX1NUUlRfSURYXzFfX0RNQUNoRHNjclN0cnRJZHhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfMl9fRE1BQ2hEc2NyU3RydElkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8yX19ETUFDaERzY3JTdHJ0SWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX1NUUlRfSURYXzNfX0RNQUNoRHNjclN0cnRJZHhfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfM19fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF80X19ETUFDaERzY3JTdHJ0SWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX1NUUlRfSURYXzRfX0RNQUNoRHNjclN0cnRJZHhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfNV9fRE1BQ2hEc2NyU3RydElkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF81X19ETUFDaERzY3JTdHJ0SWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX1NUUlRfSURYXzZfX0RNQUNoRHNjclN0cnRJZHhfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfNl9fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF83X19ETUFDaERzY3JTdHJ0SWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX1NUUlRfSURYXzdfX0RNQUNoRHNjclN0cnRJZHhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfOF9fRE1BQ2hEc2NyU3RydElkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF84X19ETUFDaERzY3JTdHJ0SWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX1NUUlRfSURYXzlfX0RNQUNoRHNjclN0cnRJZHhfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfU1RSVF9JRFhfOV9fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xMF9fRE1BQ2hEc2NyU3RydElkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xMF9fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xMV9fRE1BQ2hEc2NyU3RydElkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xMV9fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xMl9fRE1BQ2hEc2NyU3RydElkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xMl9fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xM19fRE1BQ2hEc2NyU3RydElkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xM19fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xNF9fRE1BQ2hEc2NyU3RydElkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xNF9fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xNV9fRE1BQ2hEc2NyU3RydElkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9TVFJUX0lEWF8xNV9fRE1BQ2hEc2NyU3RydElkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9DTlRfMF9fRE1BQ2hEc2NyQ250X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX0NOVF8wX19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzFfX0RNQUNoRHNjckNudF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9DTlRfMV9fRE1BQ2hEc2NyQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX0NOVF8yX19ETUFDaERzY3JDbnRfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzJfX0RNQUNoRHNjckNudF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9DTlRfM19fRE1BQ2hEc2NyQ250X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX0NOVF8zX19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzRfX0RNQUNoRHNjckNudF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9DTlRfNF9fRE1BQ2hEc2NyQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX0NOVF81X19ETUFDaERzY3JDbnRfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzVfX0RNQUNoRHNjckNudF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9DTlRfNl9fRE1BQ2hEc2NyQ250X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX0NOVF82X19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzdfX0RNQUNoRHNjckNudF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9DTlRfN19fRE1BQ2hEc2NyQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX0NOVF84X19ETUFDaERzY3JDbnRfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzhfX0RNQUNoRHNjckNudF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRFNDUl9DTlRfOV9fRE1BQ2hEc2NyQ250X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9EU0NSX0NOVF85X19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzEwX19ETUFDaERzY3JDbnRfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzEwX19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzExX19ETUFDaERzY3JDbnRfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzExX19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzEyX19ETUFDaERzY3JDbnRfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzEyX19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzEzX19ETUFDaERzY3JDbnRfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzEzX19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzE0X19ETUFDaERzY3JDbnRfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzE0X19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzE1X19ETUFDaERzY3JDbnRfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0RTQ1JfQ05UXzE1X19ETUFDaERzY3JDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fMF9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT18wX19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fMV9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT18xX19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fMl9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT18yX19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fM19fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT18zX19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fNF9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT180X19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fNV9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT181X19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fNl9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT182X19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fN19fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT183X19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fOF9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT184X19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fOV9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT185X19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fMTBfX0RNQUNoUHJpb0x2bF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX1BSSU9fMTBfX0RNQUNoUHJpb0x2bF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfUFJJT18xMV9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT18xMV9fRE1BQ2hQcmlvTHZsX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9QUklPXzEyX19ETUFDaFByaW9MdmxfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9QUklPXzEyX19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX1BSSU9fMTNfX0RNQUNoUHJpb0x2bF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX1BSSU9fMTNfX0RNQUNoUHJpb0x2bF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfUFJJT18xNF9fRE1BQ2hQcmlvTHZsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfUFJJT18xNF9fRE1BQ2hQcmlvTHZsX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9QUklPXzE1X19ETUFDaFByaW9MdmxfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9QUklPXzE1X19ETUFDaFByaW9MdmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NVUl9EU0NSXzBfX0RNQUNoQ3VyRHNjcklkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX0RTQ1JfMF9fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xX19ETUFDaEN1ckRzY3JJZHhfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0NVUl9EU0NSXzFfX0RNQUNoQ3VyRHNjcklkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfQ1VSX0RTQ1JfMl9fRE1BQ2hDdXJEc2NySWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8yX19ETUFDaEN1ckRzY3JJZHhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NVUl9EU0NSXzNfX0RNQUNoQ3VyRHNjcklkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX0RTQ1JfM19fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl80X19ETUFDaEN1ckRzY3JJZHhfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0NVUl9EU0NSXzRfX0RNQUNoQ3VyRHNjcklkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfQ1VSX0RTQ1JfNV9fRE1BQ2hDdXJEc2NySWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl81X19ETUFDaEN1ckRzY3JJZHhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NVUl9EU0NSXzZfX0RNQUNoQ3VyRHNjcklkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX0RTQ1JfNl9fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl83X19ETUFDaEN1ckRzY3JJZHhfTUFTSyAweDNmZgorI2RlZmluZSBBQ1BfRE1BX0NVUl9EU0NSXzdfX0RNQUNoQ3VyRHNjcklkeF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfQ1VSX0RTQ1JfOF9fRE1BQ2hDdXJEc2NySWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl84X19ETUFDaEN1ckRzY3JJZHhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NVUl9EU0NSXzlfX0RNQUNoQ3VyRHNjcklkeF9NQVNLIDB4M2ZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX0RTQ1JfOV9fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xMF9fRE1BQ2hDdXJEc2NySWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xMF9fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xMV9fRE1BQ2hDdXJEc2NySWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xMV9fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xMl9fRE1BQ2hDdXJEc2NySWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xMl9fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xM19fRE1BQ2hDdXJEc2NySWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xM19fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xNF9fRE1BQ2hDdXJEc2NySWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xNF9fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xNV9fRE1BQ2hDdXJEc2NySWR4X01BU0sgMHgzZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfRFNDUl8xNV9fRE1BQ2hDdXJEc2NySWR4X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzBfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8wX19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzFfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8xX19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzJfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8yX19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzNfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8zX19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzRfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF80X19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzVfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF81X19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzZfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF82X19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzdfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF83X19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzhfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF84X19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzlfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF85X19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzEwX19ETUFDaEN1clRyYW5zQ250X01BU0sgMHgxZmZmZgorI2RlZmluZSBBQ1BfRE1BX0NVUl9UUkFOU19DTlRfMTBfX0RNQUNoQ3VyVHJhbnNDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NVUl9UUkFOU19DTlRfMTFfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8xMV9fRE1BQ2hDdXJUcmFuc0NudF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8xMl9fRE1BQ2hDdXJUcmFuc0NudF9NQVNLIDB4MWZmZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzEyX19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzEzX19ETUFDaEN1clRyYW5zQ250X01BU0sgMHgxZmZmZgorI2RlZmluZSBBQ1BfRE1BX0NVUl9UUkFOU19DTlRfMTNfX0RNQUNoQ3VyVHJhbnNDbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NVUl9UUkFOU19DTlRfMTRfX0RNQUNoQ3VyVHJhbnNDbnRfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8xNF9fRE1BQ2hDdXJUcmFuc0NudF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfQ1VSX1RSQU5TX0NOVF8xNV9fRE1BQ2hDdXJUcmFuc0NudF9NQVNLIDB4MWZmZmYKKyNkZWZpbmUgQUNQX0RNQV9DVVJfVFJBTlNfQ05UXzE1X19ETUFDaEN1clRyYW5zQ250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzBfX0RNQUNoVGVybUVycl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMF9fRE1BQ2hUZXJtRXJyX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzBfX0RNQUNoRXJyQ29kZV9NQVNLIDB4MWUKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzBfX0RNQUNoRXJyQ29kZV9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xX19ETUFDaFRlcm1FcnJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzFfX0RNQUNoVGVybUVycl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xX19ETUFDaEVyckNvZGVfTUFTSyAweDFlCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xX19ETUFDaEVyckNvZGVfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMl9fRE1BQ2hUZXJtRXJyX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18yX19ETUFDaFRlcm1FcnJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMl9fRE1BQ2hFcnJDb2RlX01BU0sgMHgxZQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMl9fRE1BQ2hFcnJDb2RlX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzNfX0RNQUNoVGVybUVycl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfM19fRE1BQ2hUZXJtRXJyX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzNfX0RNQUNoRXJyQ29kZV9NQVNLIDB4MWUKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzNfX0RNQUNoRXJyQ29kZV9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU180X19ETUFDaFRlcm1FcnJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzRfX0RNQUNoVGVybUVycl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU180X19ETUFDaEVyckNvZGVfTUFTSyAweDFlCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU180X19ETUFDaEVyckNvZGVfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfNV9fRE1BQ2hUZXJtRXJyX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU181X19ETUFDaFRlcm1FcnJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfNV9fRE1BQ2hFcnJDb2RlX01BU0sgMHgxZQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfNV9fRE1BQ2hFcnJDb2RlX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzZfX0RNQUNoVGVybUVycl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfNl9fRE1BQ2hUZXJtRXJyX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzZfX0RNQUNoRXJyQ29kZV9NQVNLIDB4MWUKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzZfX0RNQUNoRXJyQ29kZV9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU183X19ETUFDaFRlcm1FcnJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzdfX0RNQUNoVGVybUVycl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU183X19ETUFDaEVyckNvZGVfTUFTSyAweDFlCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU183X19ETUFDaEVyckNvZGVfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfOF9fRE1BQ2hUZXJtRXJyX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU184X19ETUFDaFRlcm1FcnJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfOF9fRE1BQ2hFcnJDb2RlX01BU0sgMHgxZQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfOF9fRE1BQ2hFcnJDb2RlX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzlfX0RNQUNoVGVybUVycl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfOV9fRE1BQ2hUZXJtRXJyX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzlfX0RNQUNoRXJyQ29kZV9NQVNLIDB4MWUKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzlfX0RNQUNoRXJyQ29kZV9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xMF9fRE1BQ2hUZXJtRXJyX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xMF9fRE1BQ2hUZXJtRXJyX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzEwX19ETUFDaEVyckNvZGVfTUFTSyAweDFlCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xMF9fRE1BQ2hFcnJDb2RlX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzExX19ETUFDaFRlcm1FcnJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzExX19ETUFDaFRlcm1FcnJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMTFfX0RNQUNoRXJyQ29kZV9NQVNLIDB4MWUKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzExX19ETUFDaEVyckNvZGVfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMTJfX0RNQUNoVGVybUVycl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMTJfX0RNQUNoVGVybUVycl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xMl9fRE1BQ2hFcnJDb2RlX01BU0sgMHgxZQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMTJfX0RNQUNoRXJyQ29kZV9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xM19fRE1BQ2hUZXJtRXJyX01BU0sgMHgxCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xM19fRE1BQ2hUZXJtRXJyX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzEzX19ETUFDaEVyckNvZGVfTUFTSyAweDFlCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xM19fRE1BQ2hFcnJDb2RlX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzE0X19ETUFDaFRlcm1FcnJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzE0X19ETUFDaFRlcm1FcnJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMTRfX0RNQUNoRXJyQ29kZV9NQVNLIDB4MWUKKyNkZWZpbmUgQUNQX0RNQV9FUlJfU1RTXzE0X19ETUFDaEVyckNvZGVfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMTVfX0RNQUNoVGVybUVycl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMTVfX0RNQUNoVGVybUVycl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfRVJSX1NUU18xNV9fRE1BQ2hFcnJDb2RlX01BU0sgMHgxZQorI2RlZmluZSBBQ1BfRE1BX0VSUl9TVFNfMTVfX0RNQUNoRXJyQ29kZV9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9ETUFfREVTQ19CQVNFX0FERFJfX0Rlc2NyaXB0b3JCYXNlQWRkcl9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0RNQV9ERVNDX0JBU0VfQUREUl9fRGVzY3JpcHRvckJhc2VBZGRyX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RNQV9ERVNDX01BWF9OVU1fRFNDUl9fTWF4aW11bU51bWJlckRlc2NyX01BU0sgMHhmCisjZGVmaW5lIEFDUF9ETUFfREVTQ19NQVhfTlVNX0RTQ1JfX01heGltdW1OdW1iZXJEZXNjcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9ETUFfQ0hfU1RTX19ETUFDaFN0c19NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfRE1BX0NIX1NUU19fRE1BQ2hTdHNfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRE1BX0NIX0dST1VQX19ETUFDaGFuZWxHcm91cGluZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfRE1BX0NIX0dST1VQX19ETUFDaGFuZWxHcm91cGluZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDBfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQwX19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQwX19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUMF9fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTBfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFMF9fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkUwX19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFMF9fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQxX19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUMV9fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUMV9fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDFfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkUxX19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTFfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFMV9fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTFfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUMl9fT2Zmc2V0X01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDJfX09mZnNldF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDJfX09uaW9uR2FybGljU2VsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQyX19PbmlvbkdhcmxpY1NlbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFMl9fU2l6ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkUyX19TaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTJfX1BhZ2VFbmFibGVfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkUyX19QYWdlRW5hYmxlX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDNfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQzX19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQzX19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUM19fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTNfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFM19fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkUzX19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFM19fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQ0X19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUNF9fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUNF9fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDRfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkU0X19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTRfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFNF9fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTRfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUNV9fT2Zmc2V0X01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDVfX09mZnNldF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDVfX09uaW9uR2FybGljU2VsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQ1X19PbmlvbkdhcmxpY1NlbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFNV9fU2l6ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkU1X19TaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTVfX1BhZ2VFbmFibGVfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkU1X19QYWdlRW5hYmxlX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDZfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQ2X19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQ2X19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUNl9fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTZfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFNl9fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkU2X19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFNl9fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQ3X19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUN19fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUN19fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDdfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkU3X19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTdfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFN19fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRTdfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfT0ZGU0VUOF9fT2Zmc2V0X01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDhfX09mZnNldF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX09GRlNFVDhfX09uaW9uR2FybGljU2VsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9PRkZTRVQ4X19PbmlvbkdhcmxpY1NlbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMF9DQUNIRV9TSVpFOF9fU2l6ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkU4X19TaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfQ0FDSEVfU0laRThfX1BhZ2VFbmFibGVfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AwX0NBQ0hFX1NJWkU4X19QYWdlRW5hYmxlX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AwX05PTkNBQ0hFX09GRlNFVDBfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9OT05DQUNIRV9PRkZTRVQwX19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9OT05DQUNIRV9PRkZTRVQwX19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfTk9OQ0FDSEVfT0ZGU0VUMF9fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDBfTk9OQ0FDSEVfU0laRTBfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9OT05DQUNIRV9TSVpFMF9fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX05PTkNBQ0hFX1NJWkUwX19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMF9OT05DQUNIRV9TSVpFMF9fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMF9OT05DQUNIRV9PRkZTRVQxX19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDBfTk9OQ0FDSEVfT0ZGU0VUMV9fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfTk9OQ0FDSEVfT0ZGU0VUMV9fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AwX05PTkNBQ0hFX09GRlNFVDFfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AwX05PTkNBQ0hFX1NJWkUxX19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDBfTk9OQ0FDSEVfU0laRTFfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9OT05DQUNIRV9TSVpFMV9fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfTk9OQ0FDSEVfU0laRTFfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDBfREVCVUdfUENfX0RlYnVnUENfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX0RFQlVHX1BDX19EZWJ1Z1BDX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfTk1JX1NFTF9fTk1JU2VsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AwX05NSV9TRUxfX05NSVNlbF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX0NMS1JTVF9DTlRMX19DbGtFbl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMF9DTEtSU1RfQ05UTF9fQ2xrRW5fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9DTEtSU1RfQ05UTF9fU29mdFJlc2V0RFNQX01BU0sgMHgyCisjZGVmaW5lIEFDUF9EU1AwX0NMS1JTVF9DTlRMX19Tb2Z0UmVzZXREU1BfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRFNQMF9DTEtSU1RfQ05UTF9fSW50ZXJuYWxTb2Z0UmVzZXRNb2RlX01BU0sgMHg0CisjZGVmaW5lIEFDUF9EU1AwX0NMS1JTVF9DTlRMX19JbnRlcm5hbFNvZnRSZXNldE1vZGVfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRFNQMF9DTEtSU1RfQ05UTF9fRXh0ZXJuYWxTb2Z0UmVzZXRNb2RlX01BU0sgMHg4CisjZGVmaW5lIEFDUF9EU1AwX0NMS1JTVF9DTlRMX19FeHRlcm5hbFNvZnRSZXNldE1vZGVfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRFNQMF9DTEtSU1RfQ05UTF9fU29mdFJlc2V0RFNQRG9uZV9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RTUDBfQ0xLUlNUX0NOVExfX1NvZnRSZXNldERTUERvbmVfX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfRFNQMF9DTEtSU1RfQ05UTF9fQ2xrX09OX1N0YXR1c19NQVNLIDB4MjAKKyNkZWZpbmUgQUNQX0RTUDBfQ0xLUlNUX0NOVExfX0Nsa19PTl9TdGF0dXNfX1NISUZUIDB4NQorI2RlZmluZSBBQ1BfRFNQMF9SVU5TVEFMTF9fUnVuU3RhbGxDbnRsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AwX1JVTlNUQUxMX19SdW5TdGFsbENudGxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9PQ0RfSEFMVF9PTl9SU1RfX09DRF9IQUxUX09OX1JTVF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMF9PQ0RfSEFMVF9PTl9SU1RfX09DRF9IQUxUX09OX1JTVF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX1dBSVRfTU9ERV9fV2FpdE1vZGVfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDBfV0FJVF9NT0RFX19XYWl0TW9kZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX1ZFQ1RfU0VMX19TdGF0aWNWZWN0b3JTZWxfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDBfVkVDVF9TRUxfX1N0YXRpY1ZlY3RvclNlbF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX0RFQlVHX1JFRzFfX0FDUF9EU1BfREVCVUdfUkVHMV9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDBfREVCVUdfUkVHMV9fQUNQX0RTUF9ERUJVR19SRUcxX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfREVCVUdfUkVHMl9fQUNQX0RTUF9ERUJVR19SRUcyX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9ERUJVR19SRUcyX19BQ1BfRFNQX0RFQlVHX1JFRzJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9ERUJVR19SRUczX19BQ1BfRFNQX0RFQlVHX1JFRzNfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX0RFQlVHX1JFRzNfX0FDUF9EU1BfREVCVUdfUkVHM19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDBfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQwX19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQwX19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUMF9fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTBfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFMF9fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkUwX19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFMF9fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQxX19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUMV9fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUMV9fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDFfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkUxX19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTFfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFMV9fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTFfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUMl9fT2Zmc2V0X01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDJfX09mZnNldF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDJfX09uaW9uR2FybGljU2VsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQyX19PbmlvbkdhcmxpY1NlbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFMl9fU2l6ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkUyX19TaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTJfX1BhZ2VFbmFibGVfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkUyX19QYWdlRW5hYmxlX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDNfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQzX19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQzX19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUM19fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTNfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFM19fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkUzX19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFM19fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQ0X19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUNF9fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUNF9fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDRfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkU0X19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTRfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFNF9fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTRfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUNV9fT2Zmc2V0X01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDVfX09mZnNldF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDVfX09uaW9uR2FybGljU2VsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQ1X19PbmlvbkdhcmxpY1NlbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFNV9fU2l6ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkU1X19TaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTVfX1BhZ2VFbmFibGVfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkU1X19QYWdlRW5hYmxlX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDZfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQ2X19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQ2X19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUNl9fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTZfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFNl9fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkU2X19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFNl9fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQ3X19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUN19fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUN19fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDdfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkU3X19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTdfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFN19fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRTdfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfT0ZGU0VUOF9fT2Zmc2V0X01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDhfX09mZnNldF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX09GRlNFVDhfX09uaW9uR2FybGljU2VsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9PRkZTRVQ4X19PbmlvbkdhcmxpY1NlbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMV9DQUNIRV9TSVpFOF9fU2l6ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkU4X19TaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfQ0FDSEVfU0laRThfX1BhZ2VFbmFibGVfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AxX0NBQ0hFX1NJWkU4X19QYWdlRW5hYmxlX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AxX05PTkNBQ0hFX09GRlNFVDBfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMV9OT05DQUNIRV9PRkZTRVQwX19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9OT05DQUNIRV9PRkZTRVQwX19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfTk9OQ0FDSEVfT0ZGU0VUMF9fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDFfTk9OQ0FDSEVfU0laRTBfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMV9OT05DQUNIRV9TSVpFMF9fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX05PTkNBQ0hFX1NJWkUwX19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMV9OT05DQUNIRV9TSVpFMF9fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMV9OT05DQUNIRV9PRkZTRVQxX19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDFfTk9OQ0FDSEVfT0ZGU0VUMV9fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfTk9OQ0FDSEVfT0ZGU0VUMV9fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AxX05PTkNBQ0hFX09GRlNFVDFfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AxX05PTkNBQ0hFX1NJWkUxX19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDFfTk9OQ0FDSEVfU0laRTFfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9OT05DQUNIRV9TSVpFMV9fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfTk9OQ0FDSEVfU0laRTFfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDFfREVCVUdfUENfX0RlYnVnUENfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX0RFQlVHX1BDX19EZWJ1Z1BDX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfTk1JX1NFTF9fTk1JU2VsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AxX05NSV9TRUxfX05NSVNlbF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0NMS1JTVF9DTlRMX19DbGtFbl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMV9DTEtSU1RfQ05UTF9fQ2xrRW5fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9DTEtSU1RfQ05UTF9fU29mdFJlc2V0RFNQX01BU0sgMHgyCisjZGVmaW5lIEFDUF9EU1AxX0NMS1JTVF9DTlRMX19Tb2Z0UmVzZXREU1BfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRFNQMV9DTEtSU1RfQ05UTF9fSW50ZXJuYWxTb2Z0UmVzZXRNb2RlX01BU0sgMHg0CisjZGVmaW5lIEFDUF9EU1AxX0NMS1JTVF9DTlRMX19JbnRlcm5hbFNvZnRSZXNldE1vZGVfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRFNQMV9DTEtSU1RfQ05UTF9fRXh0ZXJuYWxTb2Z0UmVzZXRNb2RlX01BU0sgMHg4CisjZGVmaW5lIEFDUF9EU1AxX0NMS1JTVF9DTlRMX19FeHRlcm5hbFNvZnRSZXNldE1vZGVfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRFNQMV9DTEtSU1RfQ05UTF9fU29mdFJlc2V0RFNQRG9uZV9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RTUDFfQ0xLUlNUX0NOVExfX1NvZnRSZXNldERTUERvbmVfX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfRFNQMV9DTEtSU1RfQ05UTF9fQ2xrX09OX1N0YXR1c19NQVNLIDB4MjAKKyNkZWZpbmUgQUNQX0RTUDFfQ0xLUlNUX0NOVExfX0Nsa19PTl9TdGF0dXNfX1NISUZUIDB4NQorI2RlZmluZSBBQ1BfRFNQMV9SVU5TVEFMTF9fUnVuU3RhbGxDbnRsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AxX1JVTlNUQUxMX19SdW5TdGFsbENudGxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9PQ0RfSEFMVF9PTl9SU1RfX09DRF9IQUxUX09OX1JTVF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMV9PQ0RfSEFMVF9PTl9SU1RfX09DRF9IQUxUX09OX1JTVF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX1dBSVRfTU9ERV9fV2FpdE1vZGVfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDFfV0FJVF9NT0RFX19XYWl0TW9kZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX1ZFQ1RfU0VMX19TdGF0aWNWZWN0b3JTZWxfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDFfVkVDVF9TRUxfX1N0YXRpY1ZlY3RvclNlbF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0RFQlVHX1JFRzFfX0FDUF9EU1BfREVCVUdfUkVHMV9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDFfREVCVUdfUkVHMV9fQUNQX0RTUF9ERUJVR19SRUcxX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfREVCVUdfUkVHMl9fQUNQX0RTUF9ERUJVR19SRUcyX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMV9ERUJVR19SRUcyX19BQ1BfRFNQX0RFQlVHX1JFRzJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9ERUJVR19SRUczX19BQ1BfRFNQX0RFQlVHX1JFRzNfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX0RFQlVHX1JFRzNfX0FDUF9EU1BfREVCVUdfUkVHM19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDBfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQwX19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQwX19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUMF9fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTBfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFMF9fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkUwX19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFMF9fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQxX19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUMV9fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUMV9fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDFfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkUxX19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTFfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFMV9fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTFfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUMl9fT2Zmc2V0X01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDJfX09mZnNldF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDJfX09uaW9uR2FybGljU2VsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQyX19PbmlvbkdhcmxpY1NlbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFMl9fU2l6ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkUyX19TaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTJfX1BhZ2VFbmFibGVfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkUyX19QYWdlRW5hYmxlX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDNfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQzX19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQzX19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUM19fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTNfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFM19fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkUzX19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFM19fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQ0X19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUNF9fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUNF9fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDRfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkU0X19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTRfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFNF9fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTRfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUNV9fT2Zmc2V0X01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDVfX09mZnNldF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDVfX09uaW9uR2FybGljU2VsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQ1X19PbmlvbkdhcmxpY1NlbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFNV9fU2l6ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkU1X19TaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTVfX1BhZ2VFbmFibGVfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkU1X19QYWdlRW5hYmxlX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDZfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQ2X19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQ2X19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUNl9fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTZfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFNl9fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkU2X19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFNl9fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQ3X19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUN19fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUN19fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDdfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkU3X19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTdfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFN19fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRTdfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfT0ZGU0VUOF9fT2Zmc2V0X01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDhfX09mZnNldF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX09GRlNFVDhfX09uaW9uR2FybGljU2VsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9PRkZTRVQ4X19PbmlvbkdhcmxpY1NlbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMl9DQUNIRV9TSVpFOF9fU2l6ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkU4X19TaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfQ0FDSEVfU0laRThfX1BhZ2VFbmFibGVfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AyX0NBQ0hFX1NJWkU4X19QYWdlRW5hYmxlX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AyX05PTkNBQ0hFX09GRlNFVDBfX09mZnNldF9NQVNLIDB4ZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMl9OT05DQUNIRV9PRkZTRVQwX19PZmZzZXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9OT05DQUNIRV9PRkZTRVQwX19PbmlvbkdhcmxpY1NlbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfTk9OQ0FDSEVfT0ZGU0VUMF9fT25pb25HYXJsaWNTZWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDJfTk9OQ0FDSEVfU0laRTBfX1NpemVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMl9OT05DQUNIRV9TSVpFMF9fU2l6ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX05PTkNBQ0hFX1NJWkUwX19QYWdlRW5hYmxlX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMl9OT05DQUNIRV9TSVpFMF9fUGFnZUVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMl9OT05DQUNIRV9PRkZTRVQxX19PZmZzZXRfTUFTSyAweGZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfTk9OQ0FDSEVfT0ZGU0VUMV9fT2Zmc2V0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfTk9OQ0FDSEVfT0ZGU0VUMV9fT25pb25HYXJsaWNTZWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AyX05PTkNBQ0hFX09GRlNFVDFfX09uaW9uR2FybGljU2VsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AyX05PTkNBQ0hFX1NJWkUxX19TaXplX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfTk9OQ0FDSEVfU0laRTFfX1NpemVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9OT05DQUNIRV9TSVpFMV9fUGFnZUVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfTk9OQ0FDSEVfU0laRTFfX1BhZ2VFbmFibGVfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDJfREVCVUdfUENfX0RlYnVnUENfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX0RFQlVHX1BDX19EZWJ1Z1BDX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfTk1JX1NFTF9fTk1JU2VsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AyX05NSV9TRUxfX05NSVNlbF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0NMS1JTVF9DTlRMX19DbGtFbl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMl9DTEtSU1RfQ05UTF9fQ2xrRW5fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9DTEtSU1RfQ05UTF9fU29mdFJlc2V0RFNQX01BU0sgMHgyCisjZGVmaW5lIEFDUF9EU1AyX0NMS1JTVF9DTlRMX19Tb2Z0UmVzZXREU1BfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRFNQMl9DTEtSU1RfQ05UTF9fSW50ZXJuYWxTb2Z0UmVzZXRNb2RlX01BU0sgMHg0CisjZGVmaW5lIEFDUF9EU1AyX0NMS1JTVF9DTlRMX19JbnRlcm5hbFNvZnRSZXNldE1vZGVfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRFNQMl9DTEtSU1RfQ05UTF9fRXh0ZXJuYWxTb2Z0UmVzZXRNb2RlX01BU0sgMHg4CisjZGVmaW5lIEFDUF9EU1AyX0NMS1JTVF9DTlRMX19FeHRlcm5hbFNvZnRSZXNldE1vZGVfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRFNQMl9DTEtSU1RfQ05UTF9fU29mdFJlc2V0RFNQRG9uZV9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RTUDJfQ0xLUlNUX0NOVExfX1NvZnRSZXNldERTUERvbmVfX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfRFNQMl9DTEtSU1RfQ05UTF9fQ2xrX09OX1N0YXR1c19NQVNLIDB4MjAKKyNkZWZpbmUgQUNQX0RTUDJfQ0xLUlNUX0NOVExfX0Nsa19PTl9TdGF0dXNfX1NISUZUIDB4NQorI2RlZmluZSBBQ1BfRFNQMl9SVU5TVEFMTF9fUnVuU3RhbGxDbnRsX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AyX1JVTlNUQUxMX19SdW5TdGFsbENudGxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9PQ0RfSEFMVF9PTl9SU1RfX09DRF9IQUxUX09OX1JTVF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMl9PQ0RfSEFMVF9PTl9SU1RfX09DRF9IQUxUX09OX1JTVF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX1dBSVRfTU9ERV9fV2FpdE1vZGVfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDJfV0FJVF9NT0RFX19XYWl0TW9kZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX1ZFQ1RfU0VMX19TdGF0aWNWZWN0b3JTZWxfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDJfVkVDVF9TRUxfX1N0YXRpY1ZlY3RvclNlbF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0RFQlVHX1JFRzFfX0FDUF9EU1BfREVCVUdfUkVHMV9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfREVCVUdfUkVHMV9fQUNQX0RTUF9ERUJVR19SRUcxX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfREVCVUdfUkVHMl9fQUNQX0RTUF9ERUJVR19SRUcyX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfRFNQMl9ERUJVR19SRUcyX19BQ1BfRFNQX0RFQlVHX1JFRzJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMl9ERUJVR19SRUczX19BQ1BfRFNQX0RFQlVHX1JFRzNfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX0RFQlVHX1JFRzNfX0FDUF9EU1BfREVCVUdfUkVHM19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9DTlRMX19BWEkyREFHQkRhdGFTd2FwX01BU0sgMHgzCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9DTlRMX19BWEkyREFHQkRhdGFTd2FwX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0NOVExfX0FYSTJEQUdCRW5iTXVsdFJkUmVxX01BU0sgMHg0CisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9DTlRMX19BWEkyREFHQkVuYk11bHRSZFJlcV9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9DTlRMX19BWEkyREFHQkVuYk11bHRXclJlcV9NQVNLIDB4MTgKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0NOVExfX0FYSTJEQUdCRW5iTXVsdFdyUmVxX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0NOVExfX0FYSTJEQUdCTWF4UmVhZEJ1cnN0X01BU0sgMHg2MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fQ05UTF9fQVhJMkRBR0JNYXhSZWFkQnVyc3RfX1NISUZUIDB4NQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fQ05UTF9fQVhJMkRBR0JTdGFsbEVuYl9NQVNLIDB4ODAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0NOVExfX0FYSTJEQUdCU3RhbGxFbmJfX1NISUZUIDB4NworI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fQ05UTF9fQVhJMkRBR0JOYWNrQ2hrRW5iX01BU0sgMHgxMDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0NOVExfX0FYSTJEQUdCTmFja0Noa0VuYl9fU0hJRlQgMHg4CisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9DTlRMX19BWEkyREFHQkFkcldpblZpb2xDaGtFbmJfTUFTSyAweDIwMAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fQ05UTF9fQVhJMkRBR0JBZHJXaW5WaW9sQ2hrRW5iX19TSElGVCAweDkKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0NOVExfX0FYSTJEQUdCVXJnRW5iX01BU0sgMHg0MDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0NOVExfX0FYSTJEQUdCVXJnRW5iX19TSElGVCAweGEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0NOVExfX0FYSTJEQUdCVXJnQ250TXVsdF9NQVNLIDB4MTgwMAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fQ05UTF9fQVhJMkRBR0JVcmdDbnRNdWx0X19TSElGVCAweGIKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0NOVExfX0FYSTJEQUdCU3RhbGxNb2RlX01BU0sgMHgyMDAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9DTlRMX19BWEkyREFHQlN0YWxsTW9kZV9fU0hJRlQgMHhkCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1dSX19BWEkyREFHQkFkcldpblZpb2xPdmVyX01BU0sgMHgyMDAwMDAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1dSX19BWEkyREFHQkFkcldpblZpb2xPdmVyX19TSElGVCAweDE5CisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1dSX19BWEkyREFHQkFkcldpblZpb2xTb3VyY2VfTUFTSyAweDFjMDAwMDAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1dSX19BWEkyREFHQkFkcldpblZpb2xTb3VyY2VfX1NISUZUIDB4MWEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0VSUl9TVEFUVVNfV1JfX0FYSTJEQUdCQWRyV2luVmlvbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0VSUl9TVEFUVVNfV1JfX0FYSTJEQUdCQWRyV2luVmlvbF9fU0hJRlQgMHgxZAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fRVJSX1NUQVRVU19XUl9fQVhJMkRBR0JOYWNrT3Zlcl9NQVNLIDB4NDAwMDAwMDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0VSUl9TVEFUVVNfV1JfX0FYSTJEQUdCTmFja092ZXJfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0VSUl9TVEFUVVNfV1JfX0FYSTJEQUdCTmFja1ZhbF9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0VSUl9TVEFUVVNfV1JfX0FYSTJEQUdCTmFja1ZhbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fRVJSX1NUQVRVU19SRF9fQVhJMkRBR0JBZHJXaW5WaW9sT3Zlcl9NQVNLIDB4MjAwMDAwMAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fRVJSX1NUQVRVU19SRF9fQVhJMkRBR0JBZHJXaW5WaW9sT3Zlcl9fU0hJRlQgMHgxOQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fRVJSX1NUQVRVU19SRF9fQVhJMkRBR0JBZHJXaW5WaW9sU291cmNlX01BU0sgMHgxYzAwMDAwMAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfT05JT05fRVJSX1NUQVRVU19SRF9fQVhJMkRBR0JBZHJXaW5WaW9sU291cmNlX19TSElGVCAweDFhCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1JEX19BWEkyREFHQkFkcldpblZpb2xfTUFTSyAweDIwMDAwMDAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1JEX19BWEkyREFHQkFkcldpblZpb2xfX1NISUZUIDB4MWQKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX09OSU9OX0VSUl9TVEFUVVNfUkRfX0FYSTJEQUdCTmFja092ZXJfTUFTSyAweDQwMDAwMDAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1JEX19BWEkyREFHQk5hY2tPdmVyX19TSElGVCAweDFlCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1JEX19BWEkyREFHQk5hY2tWYWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9PTklPTl9FUlJfU1RBVFVTX1JEX19BWEkyREFHQk5hY2tWYWxfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RBR0JfT25pb25fVHJhbnNQZXJmX0NvdW50ZXJfQ29udHJvbF9fRW5iREFHQlRyYW5zUGVyZkNudHJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RBR0JfT25pb25fVHJhbnNQZXJmX0NvdW50ZXJfQ29udHJvbF9fRW5iREFHQlRyYW5zUGVyZkNudHJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfREFHQl9Pbmlvbl9Xcl9UcmFuc1BlcmZfQ291bnRlcl9DdXJyZW50X19DdXJEQUdCVHJhbnNQZXJmQ250clRpbWVfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9EQUdCX09uaW9uX1dyX1RyYW5zUGVyZl9Db3VudGVyX0N1cnJlbnRfX0N1ckRBR0JUcmFuc1BlcmZDbnRyVGltZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX09uaW9uX1dyX1RyYW5zUGVyZl9Db3VudGVyX0N1cnJlbnRfX0NsckN1ckRBR0JUcmFuc1BlcmZDbnRyX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfREFHQl9Pbmlvbl9Xcl9UcmFuc1BlcmZfQ291bnRlcl9DdXJyZW50X19DbHJDdXJEQUdCVHJhbnNQZXJmQ250cl9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9Pbmlvbl9Xcl9UcmFuc1BlcmZfQ291bnRlcl9QZWFrX19QZWFrREFHQlRyYW5zUGVyZkNudHJUaW1lX01BU0sgMHgxZmZmZgorI2RlZmluZSBBQ1BfREFHQl9Pbmlvbl9Xcl9UcmFuc1BlcmZfQ291bnRlcl9QZWFrX19QZWFrREFHQlRyYW5zUGVyZkNudHJUaW1lX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfT25pb25fV3JfVHJhbnNQZXJmX0NvdW50ZXJfUGVha19fQ2xyUGVha0RBR0JUcmFuc1BlcmZDbnRyX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfREFHQl9Pbmlvbl9Xcl9UcmFuc1BlcmZfQ291bnRlcl9QZWFrX19DbHJQZWFrREFHQlRyYW5zUGVyZkNudHJfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RBR0JfT25pb25fUmRfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudF9fQ3VyREFHQlRyYW5zUGVyZkNudHJUaW1lX01BU0sgMHgxZmZmZgorI2RlZmluZSBBQ1BfREFHQl9Pbmlvbl9SZF9UcmFuc1BlcmZfQ291bnRlcl9DdXJyZW50X19DdXJEQUdCVHJhbnNQZXJmQ250clRpbWVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfREFHQl9Pbmlvbl9SZF9UcmFuc1BlcmZfQ291bnRlcl9DdXJyZW50X19DbHJDdXJEQUdCVHJhbnNQZXJmQ250cl9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfT25pb25fUmRfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudF9fQ2xyQ3VyREFHQlRyYW5zUGVyZkNudHJfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RBR0JfT25pb25fUmRfVHJhbnNQZXJmX0NvdW50ZXJfUGVha19fUGVha0RBR0JUcmFuc1BlcmZDbnRyVGltZV9NQVNLIDB4MWZmZmYKKyNkZWZpbmUgQUNQX0RBR0JfT25pb25fUmRfVHJhbnNQZXJmX0NvdW50ZXJfUGVha19fUGVha0RBR0JUcmFuc1BlcmZDbnRyVGltZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX09uaW9uX1JkX1RyYW5zUGVyZl9Db3VudGVyX1BlYWtfX0NsclBlYWtEQUdCVHJhbnNQZXJmQ250cl9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfT25pb25fUmRfVHJhbnNQZXJmX0NvdW50ZXJfUGVha19fQ2xyUGVha0RBR0JUcmFuc1BlcmZDbnRyX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfQ05UTF9fQVhJMkRBR0JEYXRhU3dhcF9NQVNLIDB4MworI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0NOVExfX0FYSTJEQUdCRGF0YVN3YXBfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0NOVExfX0FYSTJEQUdCRW5iTXVsdFJkUmVxX01BU0sgMHg0CisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfQ05UTF9fQVhJMkRBR0JFbmJNdWx0UmRSZXFfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0NOVExfX0FYSTJEQUdCRW5iTXVsdFdyUmVxX01BU0sgMHgxOAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0NOVExfX0FYSTJEQUdCRW5iTXVsdFdyUmVxX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19DTlRMX19BWEkyREFHQk1heFJlYWRCdXJzdF9NQVNLIDB4NjAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19DTlRMX19BWEkyREFHQk1heFJlYWRCdXJzdF9fU0hJRlQgMHg1CisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfQ05UTF9fQVhJMkRBR0JTdGFsbEVuYl9NQVNLIDB4ODAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19DTlRMX19BWEkyREFHQlN0YWxsRW5iX19TSElGVCAweDcKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19DTlRMX19BWEkyREFHQk5hY2tDaGtFbmJfTUFTSyAweDEwMAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0NOVExfX0FYSTJEQUdCTmFja0Noa0VuYl9fU0hJRlQgMHg4CisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfQ05UTF9fQVhJMkRBR0JBZHJXaW5WaW9sQ2hrRW5iX01BU0sgMHgyMDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19DTlRMX19BWEkyREFHQkFkcldpblZpb2xDaGtFbmJfX1NISUZUIDB4OQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0NOVExfX0FYSTJEQUdCVXJnRW5iX01BU0sgMHg0MDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19DTlRMX19BWEkyREFHQlVyZ0VuYl9fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfQ05UTF9fQVhJMkRBR0JVcmdDbnRNdWx0X01BU0sgMHgxODAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfQ05UTF9fQVhJMkRBR0JVcmdDbnRNdWx0X19TSElGVCAweGIKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19DTlRMX19BWEkyREFHQlN0YWxsTW9kZV9NQVNLIDB4MjAwMAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0NOVExfX0FYSTJEQUdCU3RhbGxNb2RlX19TSElGVCAweGQKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19FUlJfU1RBVFVTX1dSX19BWEkyREFHQkFkcldpblZpb2xPdmVyX01BU0sgMHgyMDAwMDAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfRVJSX1NUQVRVU19XUl9fQVhJMkRBR0JBZHJXaW5WaW9sT3Zlcl9fU0hJRlQgMHgxOQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0VSUl9TVEFUVVNfV1JfX0FYSTJEQUdCQWRyV2luVmlvbFNvdXJjZV9NQVNLIDB4MWMwMDAwMDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19FUlJfU1RBVFVTX1dSX19BWEkyREFHQkFkcldpblZpb2xTb3VyY2VfX1NISUZUIDB4MWEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19FUlJfU1RBVFVTX1dSX19BWEkyREFHQkFkcldpblZpb2xfTUFTSyAweDIwMDAwMDAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfRVJSX1NUQVRVU19XUl9fQVhJMkRBR0JBZHJXaW5WaW9sX19TSElGVCAweDFkCisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfRVJSX1NUQVRVU19XUl9fQVhJMkRBR0JOYWNrT3Zlcl9NQVNLIDB4NDAwMDAwMDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19FUlJfU1RBVFVTX1dSX19BWEkyREFHQk5hY2tPdmVyX19TSElGVCAweDFlCisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfRVJSX1NUQVRVU19XUl9fQVhJMkRBR0JOYWNrVmFsX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0VSUl9TVEFUVVNfV1JfX0FYSTJEQUdCTmFja1ZhbF9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0VSUl9TVEFUVVNfUkRfX0FYSTJEQUdCQWRyV2luVmlvbE92ZXJfTUFTSyAweDIwMDAwMDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19FUlJfU1RBVFVTX1JEX19BWEkyREFHQkFkcldpblZpb2xPdmVyX19TSElGVCAweDE5CisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfRVJSX1NUQVRVU19SRF9fQVhJMkRBR0JBZHJXaW5WaW9sU291cmNlX01BU0sgMHgxYzAwMDAwMAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0VSUl9TVEFUVVNfUkRfX0FYSTJEQUdCQWRyV2luVmlvbFNvdXJjZV9fU0hJRlQgMHgxYQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0VSUl9TVEFUVVNfUkRfX0FYSTJEQUdCQWRyV2luVmlvbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19FUlJfU1RBVFVTX1JEX19BWEkyREFHQkFkcldpblZpb2xfX1NISUZUIDB4MWQKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19FUlJfU1RBVFVTX1JEX19BWEkyREFHQk5hY2tPdmVyX01BU0sgMHg0MDAwMDAwMAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfR0FSTElDX0VSUl9TVEFUVVNfUkRfX0FYSTJEQUdCTmFja092ZXJfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX0dBUkxJQ19FUlJfU1RBVFVTX1JEX19BWEkyREFHQk5hY2tWYWxfTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9HQVJMSUNfRVJSX1NUQVRVU19SRF9fQVhJMkRBR0JOYWNrVmFsX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EQUdCX0dhcmxpY19UcmFuc1BlcmZfQ291bnRlcl9Db250cm9sX19FbmJEQUdCVHJhbnNQZXJmQ250cl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfREFHQl9HYXJsaWNfVHJhbnNQZXJmX0NvdW50ZXJfQ29udHJvbF9fRW5iREFHQlRyYW5zUGVyZkNudHJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfREFHQl9HYXJsaWNfV3JfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudF9fQ3VyREFHQlRyYW5zUGVyZkNudHJUaW1lX01BU0sgMHgxZmZmZgorI2RlZmluZSBBQ1BfREFHQl9HYXJsaWNfV3JfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudF9fQ3VyREFHQlRyYW5zUGVyZkNudHJUaW1lX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfR2FybGljX1dyX1RyYW5zUGVyZl9Db3VudGVyX0N1cnJlbnRfX0NsckN1ckRBR0JUcmFuc1BlcmZDbnRyX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfREFHQl9HYXJsaWNfV3JfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudF9fQ2xyQ3VyREFHQlRyYW5zUGVyZkNudHJfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RBR0JfR2FybGljX1dyX1RyYW5zUGVyZl9Db3VudGVyX1BlYWtfX1BlYWtEQUdCVHJhbnNQZXJmQ250clRpbWVfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0dhcmxpY19Xcl9UcmFuc1BlcmZfQ291bnRlcl9QZWFrX19QZWFrREFHQlRyYW5zUGVyZkNudHJUaW1lX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfR2FybGljX1dyX1RyYW5zUGVyZl9Db3VudGVyX1BlYWtfX0NsclBlYWtEQUdCVHJhbnNQZXJmQ250cl9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfR2FybGljX1dyX1RyYW5zUGVyZl9Db3VudGVyX1BlYWtfX0NsclBlYWtEQUdCVHJhbnNQZXJmQ250cl9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9HYXJsaWNfUmRfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudF9fQ3VyREFHQlRyYW5zUGVyZkNudHJUaW1lX01BU0sgMHgxZmZmZgorI2RlZmluZSBBQ1BfREFHQl9HYXJsaWNfUmRfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudF9fQ3VyREFHQlRyYW5zUGVyZkNudHJUaW1lX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfR2FybGljX1JkX1RyYW5zUGVyZl9Db3VudGVyX0N1cnJlbnRfX0NsckN1ckRBR0JUcmFuc1BlcmZDbnRyX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfREFHQl9HYXJsaWNfUmRfVHJhbnNQZXJmX0NvdW50ZXJfQ3VycmVudF9fQ2xyQ3VyREFHQlRyYW5zUGVyZkNudHJfX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RBR0JfR2FybGljX1JkX1RyYW5zUGVyZl9Db3VudGVyX1BlYWtfX1BlYWtEQUdCVHJhbnNQZXJmQ250clRpbWVfTUFTSyAweDFmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0dhcmxpY19SZF9UcmFuc1BlcmZfQ291bnRlcl9QZWFrX19QZWFrREFHQlRyYW5zUGVyZkNudHJUaW1lX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfR2FybGljX1JkX1RyYW5zUGVyZl9Db3VudGVyX1BlYWtfX0NsclBlYWtEQUdCVHJhbnNQZXJmQ250cl9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfR2FybGljX1JkX1RyYW5zUGVyZl9Db3VudGVyX1BlYWtfX0NsclBlYWtEQUdCVHJhbnNQZXJmQ250cl9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzFfX0FYSTJEQUdCUGFnZVNpemVfTUFTSyAweDMKKyNkZWZpbmUgQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF8xX19BWEkyREFHQlBhZ2VTaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8xX19BWEkyREFHQkJhc2VBZGRyX01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMV9fQVhJMkRBR0JCYXNlQWRkcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMV9fQVhJMkRBR0JTbm9vcFNlbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8xX19BWEkyREFHQlNub29wU2VsX19TSElGVCAweDFkCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMV9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSyAweDQwMDAwMDAwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMV9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8xX19BWEkyREFHQkdycEVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8xX19BWEkyREFHQkdycEVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzJfX0FYSTJEQUdCUGFnZVNpemVfTUFTSyAweDMKKyNkZWZpbmUgQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF8yX19BWEkyREFHQlBhZ2VTaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8yX19BWEkyREFHQkJhc2VBZGRyX01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMl9fQVhJMkRBR0JCYXNlQWRkcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMl9fQVhJMkRBR0JTbm9vcFNlbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8yX19BWEkyREFHQlNub29wU2VsX19TSElGVCAweDFkCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMl9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSyAweDQwMDAwMDAwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfMl9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8yX19BWEkyREFHQkdycEVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8yX19BWEkyREFHQkdycEVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzNfX0FYSTJEQUdCUGFnZVNpemVfTUFTSyAweDMKKyNkZWZpbmUgQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF8zX19BWEkyREFHQlBhZ2VTaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8zX19BWEkyREFHQkJhc2VBZGRyX01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfM19fQVhJMkRBR0JCYXNlQWRkcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfM19fQVhJMkRBR0JTbm9vcFNlbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8zX19BWEkyREFHQlNub29wU2VsX19TSElGVCAweDFkCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfM19fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSyAweDQwMDAwMDAwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfM19fQVhJMkRBR0JUYXJnZXRNZW1TZWxfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8zX19BWEkyREFHQkdycEVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF8zX19BWEkyREFHQkdycEVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzRfX0FYSTJEQUdCUGFnZVNpemVfTUFTSyAweDMKKyNkZWZpbmUgQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF80X19BWEkyREFHQlBhZ2VTaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF80X19BWEkyREFHQkJhc2VBZGRyX01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNF9fQVhJMkRBR0JCYXNlQWRkcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNF9fQVhJMkRBR0JTbm9vcFNlbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF80X19BWEkyREFHQlNub29wU2VsX19TSElGVCAweDFkCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNF9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSyAweDQwMDAwMDAwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNF9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF80X19BWEkyREFHQkdycEVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF80X19BWEkyREFHQkdycEVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzVfX0FYSTJEQUdCUGFnZVNpemVfTUFTSyAweDMKKyNkZWZpbmUgQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF81X19BWEkyREFHQlBhZ2VTaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF81X19BWEkyREFHQkJhc2VBZGRyX01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNV9fQVhJMkRBR0JCYXNlQWRkcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNV9fQVhJMkRBR0JTbm9vcFNlbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF81X19BWEkyREFHQlNub29wU2VsX19TSElGVCAweDFkCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNV9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSyAweDQwMDAwMDAwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNV9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF81X19BWEkyREFHQkdycEVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF81X19BWEkyREFHQkdycEVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzZfX0FYSTJEQUdCUGFnZVNpemVfTUFTSyAweDMKKyNkZWZpbmUgQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF82X19BWEkyREFHQlBhZ2VTaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF82X19BWEkyREFHQkJhc2VBZGRyX01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNl9fQVhJMkRBR0JCYXNlQWRkcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNl9fQVhJMkRBR0JTbm9vcFNlbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF82X19BWEkyREFHQlNub29wU2VsX19TSElGVCAweDFkCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNl9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSyAweDQwMDAwMDAwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfNl9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF82X19BWEkyREFHQkdycEVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF82X19BWEkyREFHQkdycEVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzdfX0FYSTJEQUdCUGFnZVNpemVfTUFTSyAweDMKKyNkZWZpbmUgQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF83X19BWEkyREFHQlBhZ2VTaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF83X19BWEkyREFHQkJhc2VBZGRyX01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfN19fQVhJMkRBR0JCYXNlQWRkcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfN19fQVhJMkRBR0JTbm9vcFNlbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF83X19BWEkyREFHQlNub29wU2VsX19TSElGVCAweDFkCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfN19fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSyAweDQwMDAwMDAwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfN19fQVhJMkRBR0JUYXJnZXRNZW1TZWxfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF83X19BWEkyREFHQkdycEVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF83X19BWEkyREFHQkdycEVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9QQUdFX1NJWkVfR1JQXzhfX0FYSTJEQUdCUGFnZVNpemVfTUFTSyAweDMKKyNkZWZpbmUgQUNQX0RBR0JfUEFHRV9TSVpFX0dSUF84X19BWEkyREFHQlBhZ2VTaXplX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF84X19BWEkyREFHQkJhc2VBZGRyX01BU0sgMHhmZmZmZmZmCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfOF9fQVhJMkRBR0JCYXNlQWRkcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfOF9fQVhJMkRBR0JTbm9vcFNlbF9NQVNLIDB4MjAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF84X19BWEkyREFHQlNub29wU2VsX19TSElGVCAweDFkCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfOF9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfTUFTSyAweDQwMDAwMDAwCisjZGVmaW5lIEFDUF9EQUdCX0JBU0VfQUREUl9HUlBfOF9fQVhJMkRBR0JUYXJnZXRNZW1TZWxfX1NISUZUIDB4MWUKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF84X19BWEkyREFHQkdycEVuYWJsZV9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JfQkFTRV9BRERSX0dSUF84X19BWEkyREFHQkdycEVuYWJsZV9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQl9BVFVfQ1RSTF9fQVhJMkRBR0JDYWNoZUludmFsaWRhdGVfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RBR0JfQVRVX0NUUkxfX0FYSTJEQUdCQ2FjaGVJbnZhbGlkYXRlX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0NPTlRST0xfX0Nsa0VuX01BU0sgMHgxCisjZGVmaW5lIEFDUF9DT05UUk9MX19DbGtFbl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9DT05UUk9MX19KdGFnRW5fTUFTSyAweDQwMAorI2RlZmluZSBBQ1BfQ09OVFJPTF9fSnRhZ0VuX19TSElGVCAweGEKKyNkZWZpbmUgQUNQX1NUQVRVU19fQ2xrT25fTUFTSyAweDEKKyNkZWZpbmUgQUNQX1NUQVRVU19fQ2xrT25fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfU1RBVFVTX19BQ1BSZWZDbGtTcGRfTUFTSyAweDIKKyNkZWZpbmUgQUNQX1NUQVRVU19fQUNQUmVmQ2xrU3BkX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX1NUQVRVU19fU01VU3R1dHRlckxhc3RFZGdlX01BU0sgMHg0CisjZGVmaW5lIEFDUF9TVEFUVVNfX1NNVVN0dXR0ZXJMYXN0RWRnZV9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9TVEFUVVNfX01DU3R1dHRlckxhc3RFZGdlX01BU0sgMHg4CisjZGVmaW5lIEFDUF9TVEFUVVNfX01DU3R1dHRlckxhc3RFZGdlX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX1NPRlRfUkVTRVRfX1NvZnRSZXNldEF1ZF9NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRBdWRfX1NISUZUIDB4OAorI2RlZmluZSBBQ1BfU09GVF9SRVNFVF9fU29mdFJlc2V0RE1BX01BU0sgMHgyMDAKKyNkZWZpbmUgQUNQX1NPRlRfUkVTRVRfX1NvZnRSZXNldERNQV9fU0hJRlQgMHg5CisjZGVmaW5lIEFDUF9TT0ZUX1JFU0VUX19JbnRlcm5hbFNvZnRSZXNldE1vZGVfTUFTSyAweDQwMDAKKyNkZWZpbmUgQUNQX1NPRlRfUkVTRVRfX0ludGVybmFsU29mdFJlc2V0TW9kZV9fU0hJRlQgMHhlCisjZGVmaW5lIEFDUF9TT0ZUX1JFU0VUX19FeHRlcm5hbFNvZnRSZXNldE1vZGVfTUFTSyAweDgwMDAKKyNkZWZpbmUgQUNQX1NPRlRfUkVTRVRfX0V4dGVybmFsU29mdFJlc2V0TW9kZV9fU0hJRlQgMHhmCisjZGVmaW5lIEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRBdWREb25lX01BU0sgMHgxMDAwMDAwCisjZGVmaW5lIEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRBdWREb25lX19TSElGVCAweDE4CisjZGVmaW5lIEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRETUFEb25lX01BU0sgMHgyMDAwMDAwCisjZGVmaW5lIEFDUF9TT0ZUX1JFU0VUX19Tb2Z0UmVzZXRETUFEb25lX19TSElGVCAweDE5CisjZGVmaW5lIEFDUF9Qd3JNZ210X0NOVExfX1NDTEtTbGVlcENudGxfTUFTSyAweDMKKyNkZWZpbmUgQUNQX1B3ck1nbXRfQ05UTF9fU0NMS1NsZWVwQ250bF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9DQUNfSU5ESUNBVE9SX0NPTlRST0xfX0FDUF9DYWNfSW5kaWNhdG9yX0NvdW50ZXJfTUFTSyAweGZmZmYKKyNkZWZpbmUgQUNQX0NBQ19JTkRJQ0FUT1JfQ09OVFJPTF9fQUNQX0NhY19JbmRpY2F0b3JfQ291bnRlcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TTVVfTUFJTEJPWF9fQUNQX1NNVV9NYWlsYm94X01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU01VX01BSUxCT1hfX0FDUF9TTVVfTWFpbGJveF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX1NDTEtfMF9fQUNQRnV0dXJlUmVnX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfRlVUVVJFX1JFR19TQ0xLXzBfX0FDUEZ1dHVyZVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX1NDTEtfMV9fQUNQRnV0dXJlUmVnX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfRlVUVVJFX1JFR19TQ0xLXzFfX0FDUEZ1dHVyZVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX1NDTEtfMl9fQUNQRnV0dXJlUmVnX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfRlVUVVJFX1JFR19TQ0xLXzJfX0FDUEZ1dHVyZVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX1NDTEtfM19fQUNQRnV0dXJlUmVnX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfRlVUVVJFX1JFR19TQ0xLXzNfX0FDUEZ1dHVyZVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX1NDTEtfNF9fQUNQRnV0dXJlUmVnX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfRlVUVVJFX1JFR19TQ0xLXzRfX0FDUEZ1dHVyZVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX2dhcmxpY193cl9hc2tfY250X2VuYWJsZV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19nYXJsaWNfd3JfYXNrX2NudF9lbmFibGVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19nYXJsaWNfd3JfZ29fY250X2VuYWJsZV9NQVNLIDB4MgorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19nYXJsaWNfd3JfZ29fY250X2VuYWJsZV9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX2dhcmxpY193cl9leHBfcmVzcGNudF9lbmFibGVfTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RBR0JfREVCVUdfQ05UX0VOQUJMRV9fZ2FybGljX3dyX2V4cF9yZXNwY250X2VuYWJsZV9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX2dhcmxpY193cl9hY3R1YWxfcmVzcGNudF9lbmFibGVfTUFTSyAweDgKKyNkZWZpbmUgQUNQX0RBR0JfREVCVUdfQ05UX0VOQUJMRV9fZ2FybGljX3dyX2FjdHVhbF9yZXNwY250X2VuYWJsZV9fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX2dhcmxpY19yZF9hc2tfY250X2VuYWJsZV9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RBR0JfREVCVUdfQ05UX0VOQUJMRV9fZ2FybGljX3JkX2Fza19jbnRfZW5hYmxlX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RBR0JfREVCVUdfQ05UX0VOQUJMRV9fZ2FybGljX3JkX2dvX2NudF9lbmFibGVfTUFTSyAweDIwCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX2dhcmxpY19yZF9nb19jbnRfZW5hYmxlX19TSElGVCAweDUKKyNkZWZpbmUgQUNQX0RBR0JfREVCVUdfQ05UX0VOQUJMRV9fZ2FybGljX3JkX2V4cF9yZXNwY250X2VuYWJsZV9NQVNLIDB4NDAKKyNkZWZpbmUgQUNQX0RBR0JfREVCVUdfQ05UX0VOQUJMRV9fZ2FybGljX3JkX2V4cF9yZXNwY250X2VuYWJsZV9fU0hJRlQgMHg2CisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX2dhcmxpY19yZF9hY3R1YWxfcmVzcGNudF9lbmFibGVfTUFTSyAweDgwCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX2dhcmxpY19yZF9hY3R1YWxfcmVzcGNudF9lbmFibGVfX1NISUZUIDB4NworI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19vbmlvbl93cl9hc2tfY250X2VuYWJsZV9NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX29uaW9uX3dyX2Fza19jbnRfZW5hYmxlX19TSElGVCAweDgKKyNkZWZpbmUgQUNQX0RBR0JfREVCVUdfQ05UX0VOQUJMRV9fb25pb25fd3JfZ29fY250X2VuYWJsZV9NQVNLIDB4MjAwCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX29uaW9uX3dyX2dvX2NudF9lbmFibGVfX1NISUZUIDB4OQorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19vbmlvbl93cl9leHBfcmVzcGNudF9lbmFibGVfTUFTSyAweDQwMAorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19vbmlvbl93cl9leHBfcmVzcGNudF9lbmFibGVfX1NISUZUIDB4YQorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19vbmlvbl93cl9hY3R1YWxfcmVzcGNudF9lbmFibGVfTUFTSyAweDgwMAorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19vbmlvbl93cl9hY3R1YWxfcmVzcGNudF9lbmFibGVfX1NISUZUIDB4YgorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19vbmlvbl9yZF9hc2tfY250X2VuYWJsZV9NQVNLIDB4MTAwMAorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19vbmlvbl9yZF9hc2tfY250X2VuYWJsZV9fU0hJRlQgMHhjCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX29uaW9uX3JkX2dvX2NudF9lbmFibGVfTUFTSyAweDIwMDAKKyNkZWZpbmUgQUNQX0RBR0JfREVCVUdfQ05UX0VOQUJMRV9fb25pb25fcmRfZ29fY250X2VuYWJsZV9fU0hJRlQgMHhkCisjZGVmaW5lIEFDUF9EQUdCX0RFQlVHX0NOVF9FTkFCTEVfX29uaW9uX3JkX2V4cF9yZXNwY250X2VuYWJsZV9NQVNLIDB4NDAwMAorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19vbmlvbl9yZF9leHBfcmVzcGNudF9lbmFibGVfX1NISUZUIDB4ZQorI2RlZmluZSBBQ1BfREFHQl9ERUJVR19DTlRfRU5BQkxFX19vbmlvbl9yZF9hY3R1YWxfcmVzcGNudF9lbmFibGVfTUFTSyAweDgwMDAKKyNkZWZpbmUgQUNQX0RBR0JfREVCVUdfQ05UX0VOQUJMRV9fb25pb25fcmRfYWN0dWFsX3Jlc3BjbnRfZW5hYmxlX19TSElGVCAweGYKKyNkZWZpbmUgQUNQX0RBR0JHX1dSX0FTS19DTlRfX2dhcmxpY193cl9vbmx5X2Fza19jbnRfTUFTSyAweGZmZmYKKyNkZWZpbmUgQUNQX0RBR0JHX1dSX0FTS19DTlRfX2dhcmxpY193cl9vbmx5X2Fza19jbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfREFHQkdfV1JfR09fQ05UX19nYXJsaWNfd3Jfb25seV9nb19jbnRfTUFTSyAweGZmZmYKKyNkZWZpbmUgQUNQX0RBR0JHX1dSX0dPX0NOVF9fZ2FybGljX3dyX29ubHlfZ29fY250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JHX1dSX0VYUF9SRVNQX0NOVF9fZ2FybGljX3dyX2V4cF9yZXNwX2NudF9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfREFHQkdfV1JfRVhQX1JFU1BfQ05UX19nYXJsaWNfd3JfZXhwX3Jlc3BfY250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JHX1dSX0FDVFVBTF9SRVNQX0NOVF9fZ2FybGljX3dyX2FjdHVhbF9yZXNwX2NudF9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfREFHQkdfV1JfQUNUVUFMX1JFU1BfQ05UX19nYXJsaWNfd3JfYWN0dWFsX3Jlc3BfY250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JHX1JEX0FTS19DTlRfX2dhcmxpY19yZF9vbmx5X2Fza19jbnRfTUFTSyAweGZmZmYKKyNkZWZpbmUgQUNQX0RBR0JHX1JEX0FTS19DTlRfX2dhcmxpY19yZF9vbmx5X2Fza19jbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfREFHQkdfUkRfR09fQ05UX19nYXJsaWNfcmRfb25seV9nb19jbnRfTUFTSyAweGZmZmYKKyNkZWZpbmUgQUNQX0RBR0JHX1JEX0dPX0NOVF9fZ2FybGljX3JkX29ubHlfZ29fY250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JHX1JEX0VYUF9SRVNQX0NOVF9fZ2FybGljX3JkX2V4cF9yZXNwX2NudF9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfREFHQkdfUkRfRVhQX1JFU1BfQ05UX19nYXJsaWNfcmRfZXhwX3Jlc3BfY250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JHX1JEX0FDVFVBTF9SRVNQX0NOVF9fZ2FybGljX3JkX2FjdHVhbF9yZXNwX2NudF9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfREFHQkdfUkRfQUNUVUFMX1JFU1BfQ05UX19nYXJsaWNfcmRfYWN0dWFsX3Jlc3BfY250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JPX1dSX0FTS19DTlRfX29uaW9uX3dyX29ubHlfYXNrX2NudF9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfREFHQk9fV1JfQVNLX0NOVF9fb25pb25fd3Jfb25seV9hc2tfY250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JPX1dSX0dPX0NOVF9fb25pb25fd3Jfb25seV9nb19jbnRfTUFTSyAweGZmZmYKKyNkZWZpbmUgQUNQX0RBR0JPX1dSX0dPX0NOVF9fb25pb25fd3Jfb25seV9nb19jbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfREFHQk9fV1JfRVhQX1JFU1BfQ05UX19vbmlvbl93cl9leHBfcmVzcF9jbnRfTUFTSyAweGZmZmYKKyNkZWZpbmUgQUNQX0RBR0JPX1dSX0VYUF9SRVNQX0NOVF9fb25pb25fd3JfZXhwX3Jlc3BfY250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JPX1dSX0FDVFVBTF9SRVNQX0NOVF9fb25pb25fd3JfYWN0dWFsX3Jlc3BfY250X01BU0sgMHhmZmZmCisjZGVmaW5lIEFDUF9EQUdCT19XUl9BQ1RVQUxfUkVTUF9DTlRfX29uaW9uX3dyX2FjdHVhbF9yZXNwX2NudF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCT19SRF9BU0tfQ05UX19vbmlvbl9yZF9vbmx5X2Fza19jbnRfTUFTSyAweGZmZmYKKyNkZWZpbmUgQUNQX0RBR0JPX1JEX0FTS19DTlRfX29uaW9uX3JkX29ubHlfYXNrX2NudF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCT19SRF9HT19DTlRfX29uaW9uX3JkX29ubHlfZ29fY250X01BU0sgMHhmZmZmCisjZGVmaW5lIEFDUF9EQUdCT19SRF9HT19DTlRfX29uaW9uX3JkX29ubHlfZ29fY250X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RBR0JPX1JEX0VYUF9SRVNQX0NOVF9fb25pb25fcmRfZXhwX3Jlc3BfY250X01BU0sgMHhmZmZmCisjZGVmaW5lIEFDUF9EQUdCT19SRF9FWFBfUkVTUF9DTlRfX29uaW9uX3JkX2V4cF9yZXNwX2NudF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCT19SRF9BQ1RVQUxfUkVTUF9DTlRfX29uaW9uX3JkX2FjdHVhbF9yZXNwX2NudF9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfREFHQk9fUkRfQUNUVUFMX1JFU1BfQ05UX19vbmlvbl9yZF9hY3R1YWxfcmVzcF9jbnRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQlJCX0NPTlRST0xfX0JSQl9CbG9ja1NoYXJlZFJBTUFyYkNudHJsX01BU0sgMHhmCisjZGVmaW5lIEFDUF9CUkJfQ09OVFJPTF9fQlJCX0Jsb2NrU2hhcmVkUkFNQXJiQ250cmxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9FTkJfX0FDUEV4dEludHJFbmJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfRU5CX19BQ1BFeHRJbnRyRW5iX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfQ05UTF9fQUNQRXJyTWFza19NQVNLIDB4MQorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9DTlRMX19BQ1BFcnJNYXNrX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfQ05UTF9fSTJTTWljRGF0YUF2TWFza19NQVNLIDB4MgorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9DTlRMX19JMlNNaWNEYXRhQXZNYXNrX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfQ05UTF9fSTJTU3BrcjBEYXRhRW1wdHlNYXNrX01BU0sgMHg0CisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0kyU1Nwa3IwRGF0YUVtcHR5TWFza19fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0kyU1Nwa3IxRGF0YUVtcHR5TWFza19NQVNLIDB4OAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9DTlRMX19JMlNTcGtyMURhdGFFbXB0eU1hc2tfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9DTlRMX19JMlNCVERhdGFBdk1hc2tfTUFTSyAweDEwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0kyU0JURGF0YUF2TWFza19fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0F6YWxpYUludHJNYXNrX01BU0sgMHg0MAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9DTlRMX19BemFsaWFJbnRyTWFza19fU0hJRlQgMHg2CisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0RTUDBUaW1lb3V0TWFza19NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0RTUDBUaW1lb3V0TWFza19fU0hJRlQgMHg4CisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0RTUDFUaW1lb3V0TWFza19NQVNLIDB4MjAwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0RTUDFUaW1lb3V0TWFza19fU0hJRlQgMHg5CisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0RTUDJUaW1lb3V0TWFza19NQVNLIDB4NDAwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0RTUDJUaW1lb3V0TWFza19fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0kyU0JURGF0YUVtcHR5TWFza19NQVNLIDB4ODAwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0kyU0JURGF0YUVtcHR5TWFza19fU0hJRlQgMHhiCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0RNQUlPQ01hc2tfTUFTSyAweGZmZmYwMDAwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX0NOVExfX0RNQUlPQ01hc2tfX1NISUZUIDB4MTAKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0FDUFJlZ1VkZWZBRERSRXJyX01BU0sgMHgxCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19BQ1BSZWdVZGVmQUREUkVycl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19BQ1BSZWdVZGVmQUREUkVyclNvdXJjZV9NQVNLIDB4ZQorI2RlZmluZSBBQ1BfRVJST1JfU09VUkNFX1NUU19fQUNQUmVnVWRlZkFERFJFcnJTb3VyY2VfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRVJST1JfU09VUkNFX1NUU19fQUNQUmVnVWRlZkFERFJFcnJTb3VyY2VPdmVyX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfRVJST1JfU09VUkNFX1NUU19fQUNQUmVnVWRlZkFERFJFcnJTb3VyY2VPdmVyX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0JSQkFkZHJFcnJfTUFTSyAweDIwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19CUkJBZGRyRXJyX19TSElGVCAweDUKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0JSQkFkZHJFcnJTb3VyY2VfTUFTSyAweDNjMAorI2RlZmluZSBBQ1BfRVJST1JfU09VUkNFX1NUU19fQlJCQWRkckVyclNvdXJjZV9fU0hJRlQgMHg2CisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19CUkJBZGRyRXJyU291cmNlT3Zlcl9NQVNLIDB4NDAwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19CUkJBZGRyRXJyU291cmNlT3Zlcl9fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19JMlNNaWNPdmVyRmxvd0Vycl9NQVNLIDB4ODAwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19JMlNNaWNPdmVyRmxvd0Vycl9fU0hJRlQgMHhiCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19JMlNTcGVha2VyME92ZXJGbG93RXJyX01BU0sgMHgxMDAwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19JMlNTcGVha2VyME92ZXJGbG93RXJyX19TSElGVCAweGMKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0kyU1NwZWFrZXIxT3ZlckZsb3dFcnJfTUFTSyAweDIwMDAKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0kyU1NwZWFrZXIxT3ZlckZsb3dFcnJfX1NISUZUIDB4ZAorI2RlZmluZSBBQ1BfRVJST1JfU09VUkNFX1NUU19fSTJTQlRSeEZpZm9PdmVyRmxvd0Vycl9NQVNLIDB4NDAwMAorI2RlZmluZSBBQ1BfRVJST1JfU09VUkNFX1NUU19fSTJTQlRSeEZpZm9PdmVyRmxvd0Vycl9fU0hJRlQgMHhlCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19EU1BBZHJUcmFuc1JhbmdlRXJyX01BU0sgMHg4MDAwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19EU1BBZHJUcmFuc1JhbmdlRXJyX19TSElGVCAweGYKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0RTUEFkclRyYW5zUmFuZ2VFcnJTb3VyY2VfTUFTSyAweDcwMDAwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19EU1BBZHJUcmFuc1JhbmdlRXJyU291cmNlX19TSElGVCAweDEwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19EU1BBZHJUcmFuc1JhbmdlRXJyU291cmNlT3Zlcl9NQVNLIDB4ODAwMDAKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0RTUEFkclRyYW5zUmFuZ2VFcnJTb3VyY2VPdmVyX19TSElGVCAweDEzCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19EQUdCRXJyX01BU0sgMHgxMDAwMDAKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0RBR0JFcnJfX1NISUZUIDB4MTQKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0RBR0JFcnJTb3VyY2VfTUFTSyAweDFlMDAwMDAKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0RBR0JFcnJTb3VyY2VfX1NISUZUIDB4MTUKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0RBR0JFcnJTb3VyY2VPdmVyX01BU0sgMHgyMDAwMDAwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19EQUdCRXJyU291cmNlT3Zlcl9fU0hJRlQgMHgxOQorI2RlZmluZSBBQ1BfRVJST1JfU09VUkNFX1NUU19fRE1BVGVybU9uRXJyX01BU0sgMHg0MDAwMDAwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19ETUFUZXJtT25FcnJfX1NISUZUIDB4MWEKKyNkZWZpbmUgQUNQX0VSUk9SX1NPVVJDRV9TVFNfX0kyU0JUVHhGaWZvT3ZlckZsb3dFcnJfTUFTSyAweDEwMDAwMDAwCisjZGVmaW5lIEFDUF9FUlJPUl9TT1VSQ0VfU1RTX19JMlNCVFR4Rmlmb092ZXJGbG93RXJyX19TSElGVCAweDFjCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnRIb3N0RFNQMF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfVFJJR19fVHJpZ1NXSW50SG9zdERTUDBfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfVFJJR19fVHJpZ1NXSW50SG9zdERTUDFfTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1RSSUdfX1RyaWdTV0ludEhvc3REU1AxX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1RSSUdfX1RyaWdTV0ludEhvc3REU1AyX01BU0sgMHg0CisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnRIb3N0RFNQMl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnREU1BuRFNQMF9NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnREU1BuRFNQMF9fU0hJRlQgMHg4CisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnREU1BuRFNQMV9NQVNLIDB4MjAwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnREU1BuRFNQMV9fU0hJRlQgMHg5CisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnREU1BuRFNQMl9NQVNLIDB4NDAwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnREU1BuRFNQMl9fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnREU1AwSG9zdF9NQVNLIDB4MTAwMDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1RSSUdfX1RyaWdTV0ludERTUDBIb3N0X19TSElGVCAweDEwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnREU1AxSG9zdF9NQVNLIDB4MjAwMDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1RSSUdfX1RyaWdTV0ludERTUDFIb3N0X19TSElGVCAweDExCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9UUklHX19UcmlnU1dJbnREU1AySG9zdF9NQVNLIDB4NDAwMDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1RSSUdfX1RyaWdTV0ludERTUDJIb3N0X19TSElGVCAweDEyCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9DTlRMX19FbmJTV0ludEhvc3REU1AwX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9DTlRMX19FbmJTV0ludEhvc3REU1AwX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX0NOVExfX0VuYlNXSW50SG9zdERTUDFfTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX0NOVExfX0VuYlNXSW50SG9zdERTUDFfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfQ05UTF9fRW5iU1dJbnRIb3N0RFNQMl9NQVNLIDB4NAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfQ05UTF9fRW5iU1dJbnRIb3N0RFNQMl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9DTlRMX19FbmJTV0ludERTUG5EU1AwX01BU0sgMHgxMDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX0NOVExfX0VuYlNXSW50RFNQbkRTUDBfX1NISUZUIDB4OAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfQ05UTF9fRW5iU1dJbnREU1BuRFNQMV9NQVNLIDB4MjAwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9DTlRMX19FbmJTV0ludERTUG5EU1AxX19TSElGVCAweDkKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX0NOVExfX0VuYlNXSW50RFNQbkRTUDJfTUFTSyAweDQwMAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfQ05UTF9fRW5iU1dJbnREU1BuRFNQMl9fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9DTlRMX19FbmJLZXJuZWxJbnRyRFNQME1hc2tfTUFTSyAweDEwMDAwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9DTlRMX19FbmJLZXJuZWxJbnRyRFNQME1hc2tfX1NISUZUIDB4MTAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX0NOVExfX0VtYktlcm5lbEludHJEU1AxTWFza19NQVNLIDB4MjAwMDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX0NOVExfX0VtYktlcm5lbEludHJEU1AxTWFza19fU0hJRlQgMHgxMQorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfQ05UTF9fRW1iS2VybmVsSW50ckRTUDJNYXNrX01BU0sgMHg0MDAwMAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfQ05UTF9fRW1iS2VybmVsSW50ckRTUDJNYXNrX19TSElGVCAweDEyCisjZGVmaW5lIEFDUF9EQUdCR19USU1FT1VUX0NOVExfX0RBR0JHVGltZW91dFZhbHVlX01BU0sgMHgzZmZmZgorI2RlZmluZSBBQ1BfREFHQkdfVElNRU9VVF9DTlRMX19EQUdCR1RpbWVvdXRWYWx1ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EQUdCR19USU1FT1VUX0NOVExfX0NudEVuX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfREFHQkdfVElNRU9VVF9DTlRMX19DbnRFbl9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfREFHQk9fVElNRU9VVF9DTlRMX19EQUdCT1RpbWVvdXRWYWx1ZV9NQVNLIDB4M2ZmZmYKKyNkZWZpbmUgQUNQX0RBR0JPX1RJTUVPVVRfQ05UTF9fREFHQk9UaW1lb3V0VmFsdWVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfREFHQk9fVElNRU9VVF9DTlRMX19DbnRFbl9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RBR0JPX1RJTUVPVVRfQ05UTF9fQ250RW5fX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fQUNQRXJyU3RhdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19BQ1BFcnJTdGF0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fQUNQRXJyQWNrX01BU0sgMHgxCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0FDUEVyckFja19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0kyU01pY0RhdGFBdlN0YXRfTUFTSyAweDIKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fSTJTTWljRGF0YUF2U3RhdF9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0kyU01pY0RhdGFBdkFja19NQVNLIDB4MgorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19JMlNNaWNEYXRhQXZBY2tfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19JMlNTcGtyMERhdGFFbXB0eVN0YXRfTUFTSyAweDQKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fSTJTU3BrcjBEYXRhRW1wdHlTdGF0X19TSElGVCAweDIKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fSTJTU3BrcjBEYXRhRW1wdHlBY2tfTUFTSyAweDQKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fSTJTU3BrcjBEYXRhRW1wdHlBY2tfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19JMlNTcGtyMURhdGFFbXB0eVN0YXRfTUFTSyAweDgKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fSTJTU3BrcjFEYXRhRW1wdHlTdGF0X19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fSTJTU3BrcjFEYXRhRW1wdHlBY2tfTUFTSyAweDgKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fSTJTU3BrcjFEYXRhRW1wdHlBY2tfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19JMlNCVERhdGFBdlN0YXRfTUFTSyAweDEwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0kyU0JURGF0YUF2U3RhdF9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0kyU0JURGF0YUF2QWNrX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19JMlNCVERhdGFBdkFja19fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0F6YWxpYUludHJTdGF0X01BU0sgMHg0MAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19BemFsaWFJbnRyU3RhdF9fU0hJRlQgMHg2CisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0F6YWxpYUludHJBY2tfTUFTSyAweDQwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0F6YWxpYUludHJBY2tfX1NISUZUIDB4NgorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19EU1AwVGltZW91dFN0YXRfTUFTSyAweDEwMAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19EU1AwVGltZW91dFN0YXRfX1NISUZUIDB4OAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19EU1AwVGltZW91dEFja19NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0RTUDBUaW1lb3V0QWNrX19TSElGVCAweDgKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fRFNQMVRpbWVvdXRTdGF0X01BU0sgMHgyMDAKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fRFNQMVRpbWVvdXRTdGF0X19TSElGVCAweDkKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fRFNQMVRpbWVvdXRBY2tfTUFTSyAweDIwMAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19EU1AxVGltZW91dEFja19fU0hJRlQgMHg5CisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0RTUDJUaW1lb3V0U3RhdF9NQVNLIDB4NDAwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0RTUDJUaW1lb3V0U3RhdF9fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0RTUDJUaW1lb3V0QWNrX01BU0sgMHg0MDAKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fRFNQMlRpbWVvdXRBY2tfX1NISUZUIDB4YQorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19JMlNCVERhdGFFbXB0eVN0YXRfTUFTSyAweDgwMAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19JMlNCVERhdGFFbXB0eVN0YXRfX1NISUZUIDB4YgorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19JMlNCVERhdGFFbXB0eUFja19NQVNLIDB4ODAwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0kyU0JURGF0YUVtcHR5QWNrX19TSElGVCAweGIKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fRE1BSU9DU3RhdF9NQVNLIDB4ZmZmZjAwMDAKKyNkZWZpbmUgQUNQX0VYVEVSTkFMX0lOVFJfU1RBVF9fRE1BSU9DU3RhdF9fU0hJRlQgMHgxMAorI2RlZmluZSBBQ1BfRVhURVJOQUxfSU5UUl9TVEFUX19ETUFJT0NBY2tfTUFTSyAweGZmZmYwMDAwCisjZGVmaW5lIEFDUF9FWFRFUk5BTF9JTlRSX1NUQVRfX0RNQUlPQ0Fja19fU0hJRlQgMHgxMAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dJbnRIb3N0RFNQMFN0YXRfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50SG9zdERTUDBTdGF0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50SG9zdERTUDBBY2tfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50SG9zdERTUDBBY2tfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dJbnRIb3N0RFNQMVN0YXRfTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50SG9zdERTUDFTdGF0X19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50SG9zdERTUDFBY2tfTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50SG9zdERTUDFBY2tfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dJbnRIb3N0RFNQMlN0YXRfTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50SG9zdERTUDJTdGF0X19TSElGVCAweDIKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50SG9zdERTUDJBY2tfTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50SG9zdERTUDJBY2tfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dJbnREU1BuRFNQMFN0YXRfTUFTSyAweDEwMAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dJbnREU1BuRFNQMFN0YXRfX1NISUZUIDB4OAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dJbnREU1BuRFNQMEFja19NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9TVEFUX19TV0ludERTUG5EU1AwQWNrX19TSElGVCAweDgKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50RFNQbkRTUDFTdGF0X01BU0sgMHgyMDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50RFNQbkRTUDFTdGF0X19TSElGVCAweDkKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50RFNQbkRTUDFBY2tfTUFTSyAweDIwMAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dJbnREU1BuRFNQMUFja19fU0hJRlQgMHg5CisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9TVEFUX19TV0ludERTUG5EU1AyU3RhdF9NQVNLIDB4NDAwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9TVEFUX19TV0ludERTUG5EU1AyU3RhdF9fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9TVEFUX19TV0ludERTUG5EU1AyQWNrX01BU0sgMHg0MDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXSW50RFNQbkRTUDJBY2tfX1NISUZUIDB4YQorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dLZXJuZWxJbnRyRFNQMFN0YXRfTUFTSyAweDEwMDAwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9TVEFUX19TV0tlcm5lbEludHJEU1AwU3RhdF9fU0hJRlQgMHgxMAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dLZXJuZWxJbnRyRFNQMEFja19NQVNLIDB4MTAwMDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXS2VybmVsSW50ckRTUDBBY2tfX1NISUZUIDB4MTAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXS2VybmVsSW50ckRTUDFTdGF0X01BU0sgMHgyMDAwMAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dLZXJuZWxJbnRyRFNQMVN0YXRfX1NISUZUIDB4MTEKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXS2VybmVsSW50ckRTUDFBY2tfTUFTSyAweDIwMDAwCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9TVEFUX19TV0tlcm5lbEludHJEU1AxQWNrX19TSElGVCAweDExCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9TVEFUX19TV0tlcm5lbEludHJEU1AyU3RhdF9NQVNLIDB4NDAwMDAKKyNkZWZpbmUgQUNQX0RTUF9TV19JTlRSX1NUQVRfX1NXS2VybmVsSW50ckRTUDJTdGF0X19TSElGVCAweDEyCisjZGVmaW5lIEFDUF9EU1BfU1dfSU5UUl9TVEFUX19TV0tlcm5lbEludHJEU1AyQWNrX01BU0sgMHg0MDAwMAorI2RlZmluZSBBQ1BfRFNQX1NXX0lOVFJfU1RBVF9fU1dLZXJuZWxJbnRyRFNQMkFja19fU0hJRlQgMHgxMgorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX0NOVExfX0FDUEVyck1hc2tfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19BQ1BFcnJNYXNrX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19JMlNNaWNEYXRhQXZNYXNrX01BU0sgMHgyCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfQ05UTF9fSTJTTWljRGF0YUF2TWFza19fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfQ05UTF9fSTJTU3BrcjBEYXRhRW1wdHlNYXNrX01BU0sgMHg0CisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfQ05UTF9fSTJTU3BrcjBEYXRhRW1wdHlNYXNrX19TSElGVCAweDIKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19JMlNTcGtyMURhdGFFbXB0eU1hc2tfTUFTSyAweDgKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19JMlNTcGtyMURhdGFFbXB0eU1hc2tfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRFNQMF9JTlRSX0NOVExfX0kyU0JURGF0YUF2TWFza19NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19JMlNCVERhdGFBdk1hc2tfX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX0NOVExfX0F6YWxpYUludHJNYXNrX01BU0sgMHg0MAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX0NOVExfX0F6YWxpYUludHJNYXNrX19TSElGVCAweDYKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19TTVVNYWlsYm94V3JpdGVNYXNrX01BU0sgMHgxMDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19TTVVNYWlsYm94V3JpdGVNYXNrX19TSElGVCAweDgKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19TTVVTdHV0dGVyU3RhdHVzTWFza19NQVNLIDB4MjAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfQ05UTF9fU01VU3R1dHRlclN0YXR1c01hc2tfX1NISUZUIDB4OQorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX0NOVExfX01DU3R1dHRlclN0YXR1c01hc2tfTUFTSyAweDQwMAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX0NOVExfX01DU3R1dHRlclN0YXR1c01hc2tfX1NISUZUIDB4YQorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX0NOVExfX0RTUEV4dFRpbWVyTWFza19NQVNLIDB4ODAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfQ05UTF9fRFNQRXh0VGltZXJNYXNrX19TSElGVCAweGIKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19EU1BTZW1SZXNwTWFza19NQVNLIDB4MTAwMAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX0NOVExfX0RTUFNlbVJlc3BNYXNrX19TSElGVCAweGMKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19JMlNCVERhdGFFbXB0eU1hc2tfTUFTSyAweDIwMDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9DTlRMX19JMlNCVERhdGFFbXB0eU1hc2tfX1NISUZUIDB4ZAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX0NOVExfX0RNQUlPQ01hc2tfTUFTSyAweGZmZmYwMDAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfQ05UTF9fRE1BSU9DTWFza19fU0hJRlQgMHgxMAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0FDUEVyclN0YXRfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19BQ1BFcnJTdGF0X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19BQ1BFcnJBY2tfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19BQ1BFcnJBY2tfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0kyU01pY0RhdGFBdlN0YXRfTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNNaWNEYXRhQXZTdGF0X19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNNaWNEYXRhQXZBY2tfTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNNaWNEYXRhQXZBY2tfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0kyU1Nwa3IwRGF0YUVtcHR5U3RhdF9NQVNLIDB4NAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0kyU1Nwa3IwRGF0YUVtcHR5U3RhdF9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fSTJTU3BrcjBEYXRhRW1wdHlBY2tfTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNTcGtyMERhdGFFbXB0eUFja19fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fSTJTU3BrcjFEYXRhRW1wdHlTdGF0X01BU0sgMHg4CisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fSTJTU3BrcjFEYXRhRW1wdHlTdGF0X19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNTcGtyMURhdGFFbXB0eUFja19NQVNLIDB4OAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0kyU1Nwa3IxRGF0YUVtcHR5QWNrX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNCVERhdGFBdlN0YXRfTUFTSyAweDEwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fSTJTQlREYXRhQXZTdGF0X19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNCVERhdGFBdkFja19NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNCVERhdGFBdkFja19fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fQXphbGlhSW50clN0YXRfTUFTSyAweDQwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fQXphbGlhSW50clN0YXRfX1NISUZUIDB4NgorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0F6YWxpYUludHJBY2tfTUFTSyAweDQwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fQXphbGlhSW50ckFja19fU0hJRlQgMHg2CisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fU01VTWFpbGJveFdyaXRlU3RhdF9NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fU01VTWFpbGJveFdyaXRlU3RhdF9fU0hJRlQgMHg4CisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fU01VTWFpbGJveFdyaXRlQWNrX01BU0sgMHgxMDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19TTVVNYWlsYm94V3JpdGVBY2tfX1NISUZUIDB4OAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX1NNVVN0dXR0ZXJTdGF0dXNTdGF0X01BU0sgMHgyMDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19TTVVTdHV0dGVyU3RhdHVzU3RhdF9fU0hJRlQgMHg5CisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fU01VU3R1dHRlclN0YXR1c0Fja19NQVNLIDB4MjAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fU01VU3R1dHRlclN0YXR1c0Fja19fU0hJRlQgMHg5CisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fTUNTdHV0dGVyU3RhdHVzU3RhdF9NQVNLIDB4NDAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fTUNTdHV0dGVyU3RhdHVzU3RhdF9fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fTUNTdHV0dGVyU3RhdHVzQWNrX01BU0sgMHg0MDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19NQ1N0dXR0ZXJTdGF0dXNBY2tfX1NISUZUIDB4YQorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0RTUEV4dFRpbWVyU3RhdF9NQVNLIDB4ODAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fRFNQRXh0VGltZXJTdGF0X19TSElGVCAweGIKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19EU1BFeHRUaW1lckFja19NQVNLIDB4ODAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fRFNQRXh0VGltZXJBY2tfX1NISUZUIDB4YgorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0RTUFNlbVJlc3BTdGF0X01BU0sgMHgxMDAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fRFNQU2VtUmVzcFN0YXRfX1NISUZUIDB4YworI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0RTUFNlbVJlc3BBY2tfTUFTSyAweDEwMDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19EU1BTZW1SZXNwQWNrX19TSElGVCAweGMKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNCVERhdGFFbXB0eVN0YXRfTUFTSyAweDIwMDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19JMlNCVERhdGFFbXB0eVN0YXRfX1NISUZUIDB4ZAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0kyU0JURGF0YUVtcHR5QWNrX01BU0sgMHgyMDAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fSTJTQlREYXRhRW1wdHlBY2tfX1NISUZUIDB4ZAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0RNQUlPQ1N0YXRfTUFTSyAweGZmZmYwMDAwCisjZGVmaW5lIEFDUF9EU1AwX0lOVFJfU1RBVF9fRE1BSU9DU3RhdF9fU0hJRlQgMHgxMAorI2RlZmluZSBBQ1BfRFNQMF9JTlRSX1NUQVRfX0RNQUlPQ0Fja19NQVNLIDB4ZmZmZjAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfSU5UUl9TVEFUX19ETUFJT0NBY2tfX1NISUZUIDB4MTAKKyNkZWZpbmUgQUNQX0RTUDBfVElNRU9VVF9DTlRMX19EU1AwVGltZW91dFZhbHVlX01BU0sgMHgzZmZmZgorI2RlZmluZSBBQ1BfRFNQMF9USU1FT1VUX0NOVExfX0RTUDBUaW1lb3V0VmFsdWVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMF9USU1FT1VUX0NOVExfX0NudEVuX01BU0sgMHg4MDAwMDAwMAorI2RlZmluZSBBQ1BfRFNQMF9USU1FT1VUX0NOVExfX0NudEVuX19TSElGVCAweDFmCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfQ05UTF9fQUNQRXJyTWFza19NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX0FDUEVyck1hc2tfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX0kyU01pY0RhdGFBdk1hc2tfTUFTSyAweDIKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9DTlRMX19JMlNNaWNEYXRhQXZNYXNrX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9DTlRMX19JMlNTcGtyMERhdGFFbXB0eU1hc2tfTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9DTlRMX19JMlNTcGtyMERhdGFFbXB0eU1hc2tfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX0kyU1Nwa3IxRGF0YUVtcHR5TWFza19NQVNLIDB4OAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX0kyU1Nwa3IxRGF0YUVtcHR5TWFza19fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfQ05UTF9fSTJTQlREYXRhQXZNYXNrX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX0kyU0JURGF0YUF2TWFza19fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfQ05UTF9fQXphbGlhSW50ck1hc2tfTUFTSyAweDQwCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfQ05UTF9fQXphbGlhSW50ck1hc2tfX1NISUZUIDB4NgorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX1NNVU1haWxib3hXcml0ZU1hc2tfTUFTSyAweDEwMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX1NNVU1haWxib3hXcml0ZU1hc2tfX1NISUZUIDB4OAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX1NNVVN0dXR0ZXJTdGF0dXNNYXNrX01BU0sgMHgyMDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9DTlRMX19TTVVTdHV0dGVyU3RhdHVzTWFza19fU0hJRlQgMHg5CisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfQ05UTF9fTUNTdHV0dGVyU3RhdHVzTWFza19NQVNLIDB4NDAwCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfQ05UTF9fTUNTdHV0dGVyU3RhdHVzTWFza19fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfQ05UTF9fRFNQRXh0VGltZXJNYXNrX01BU0sgMHg4MDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9DTlRMX19EU1BFeHRUaW1lck1hc2tfX1NISUZUIDB4YgorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX0RTUFNlbVJlc3BNYXNrX01BU0sgMHgxMDAwCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfQ05UTF9fRFNQU2VtUmVzcE1hc2tfX1NISUZUIDB4YworI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX0kyU0JURGF0YUVtcHR5TWFza19NQVNLIDB4MjAwMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX0NOVExfX0kyU0JURGF0YUVtcHR5TWFza19fU0hJRlQgMHhkCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfQ05UTF9fRE1BSU9DTWFza19NQVNLIDB4ZmZmZjAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9DTlRMX19ETUFJT0NNYXNrX19TSElGVCAweDEwCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fQUNQRXJyU3RhdF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0FDUEVyclN0YXRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0FDUEVyckFja19NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0FDUEVyckFja19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fSTJTTWljRGF0YUF2U3RhdF9NQVNLIDB4MgorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU01pY0RhdGFBdlN0YXRfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU01pY0RhdGFBdkFja19NQVNLIDB4MgorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU01pY0RhdGFBdkFja19fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fSTJTU3BrcjBEYXRhRW1wdHlTdGF0X01BU0sgMHg0CisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fSTJTU3BrcjBEYXRhRW1wdHlTdGF0X19TSElGVCAweDIKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19JMlNTcGtyMERhdGFFbXB0eUFja19NQVNLIDB4NAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU1Nwa3IwRGF0YUVtcHR5QWNrX19TSElGVCAweDIKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19JMlNTcGtyMURhdGFFbXB0eVN0YXRfTUFTSyAweDgKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19JMlNTcGtyMURhdGFFbXB0eVN0YXRfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU1Nwa3IxRGF0YUVtcHR5QWNrX01BU0sgMHg4CisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fSTJTU3BrcjFEYXRhRW1wdHlBY2tfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU0JURGF0YUF2U3RhdF9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19JMlNCVERhdGFBdlN0YXRfX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU0JURGF0YUF2QWNrX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU0JURGF0YUF2QWNrX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19BemFsaWFJbnRyU3RhdF9NQVNLIDB4NDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19BemFsaWFJbnRyU3RhdF9fU0hJRlQgMHg2CisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fQXphbGlhSW50ckFja19NQVNLIDB4NDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19BemFsaWFJbnRyQWNrX19TSElGVCAweDYKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19TTVVNYWlsYm94V3JpdGVTdGF0X01BU0sgMHgxMDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19TTVVNYWlsYm94V3JpdGVTdGF0X19TSElGVCAweDgKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19TTVVNYWlsYm94V3JpdGVBY2tfTUFTSyAweDEwMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX1NNVU1haWxib3hXcml0ZUFja19fU0hJRlQgMHg4CisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fU01VU3R1dHRlclN0YXR1c1N0YXRfTUFTSyAweDIwMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX1NNVVN0dXR0ZXJTdGF0dXNTdGF0X19TSElGVCAweDkKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19TTVVTdHV0dGVyU3RhdHVzQWNrX01BU0sgMHgyMDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19TTVVTdHV0dGVyU3RhdHVzQWNrX19TSElGVCAweDkKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19NQ1N0dXR0ZXJTdGF0dXNTdGF0X01BU0sgMHg0MDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19NQ1N0dXR0ZXJTdGF0dXNTdGF0X19TSElGVCAweGEKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19NQ1N0dXR0ZXJTdGF0dXNBY2tfTUFTSyAweDQwMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX01DU3R1dHRlclN0YXR1c0Fja19fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fRFNQRXh0VGltZXJTdGF0X01BU0sgMHg4MDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19EU1BFeHRUaW1lclN0YXRfX1NISUZUIDB4YgorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0RTUEV4dFRpbWVyQWNrX01BU0sgMHg4MDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19EU1BFeHRUaW1lckFja19fU0hJRlQgMHhiCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fRFNQU2VtUmVzcFN0YXRfTUFTSyAweDEwMDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19EU1BTZW1SZXNwU3RhdF9fU0hJRlQgMHhjCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fRFNQU2VtUmVzcEFja19NQVNLIDB4MTAwMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0RTUFNlbVJlc3BBY2tfX1NISUZUIDB4YworI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU0JURGF0YUVtcHR5U3RhdF9NQVNLIDB4MjAwMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0kyU0JURGF0YUVtcHR5U3RhdF9fU0hJRlQgMHhkCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fSTJTQlREYXRhRW1wdHlBY2tfTUFTSyAweDIwMDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19JMlNCVERhdGFFbXB0eUFja19fU0hJRlQgMHhkCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fRE1BSU9DU3RhdF9NQVNLIDB4ZmZmZjAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfSU5UUl9TVEFUX19ETUFJT0NTdGF0X19TSElGVCAweDEwCisjZGVmaW5lIEFDUF9EU1AxX0lOVFJfU1RBVF9fRE1BSU9DQWNrX01BU0sgMHhmZmZmMDAwMAorI2RlZmluZSBBQ1BfRFNQMV9JTlRSX1NUQVRfX0RNQUlPQ0Fja19fU0hJRlQgMHgxMAorI2RlZmluZSBBQ1BfRFNQMV9USU1FT1VUX0NOVExfX0RTUDFUaW1lb3V0VmFsdWVfTUFTSyAweDNmZmZmCisjZGVmaW5lIEFDUF9EU1AxX1RJTUVPVVRfQ05UTF9fRFNQMVRpbWVvdXRWYWx1ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX1RJTUVPVVRfQ05UTF9fQ250RW5fTUFTSyAweDgwMDAwMDAwCisjZGVmaW5lIEFDUF9EU1AxX1RJTUVPVVRfQ05UTF9fQ250RW5fX1NISUZUIDB4MWYKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9DTlRMX19BQ1BFcnJNYXNrX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fQUNQRXJyTWFza19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fSTJTTWljRGF0YUF2TWFza19NQVNLIDB4MgorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX0NOVExfX0kyU01pY0RhdGFBdk1hc2tfX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX0NOVExfX0kyU1Nwa3IwRGF0YUVtcHR5TWFza19NQVNLIDB4NAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX0NOVExfX0kyU1Nwa3IwRGF0YUVtcHR5TWFza19fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fSTJTU3BrcjFEYXRhRW1wdHlNYXNrX01BU0sgMHg4CisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fSTJTU3BrcjFEYXRhRW1wdHlNYXNrX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9DTlRMX19JMlNCVERhdGFBdk1hc2tfTUFTSyAweDEwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fSTJTQlREYXRhQXZNYXNrX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9DTlRMX19BemFsaWFJbnRyTWFza19NQVNLIDB4NDAKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9DTlRMX19BemFsaWFJbnRyTWFza19fU0hJRlQgMHg2CisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fU01VTWFpbGJveFdyaXRlTWFza19NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fU01VTWFpbGJveFdyaXRlTWFza19fU0hJRlQgMHg4CisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fU01VU3R1dHRlclN0YXR1c01hc2tfTUFTSyAweDIwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX0NOVExfX1NNVVN0dXR0ZXJTdGF0dXNNYXNrX19TSElGVCAweDkKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9DTlRMX19NQ1N0dXR0ZXJTdGF0dXNNYXNrX01BU0sgMHg0MDAKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9DTlRMX19NQ1N0dXR0ZXJTdGF0dXNNYXNrX19TSElGVCAweGEKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9DTlRMX19EU1BFeHRUaW1lck1hc2tfTUFTSyAweDgwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX0NOVExfX0RTUEV4dFRpbWVyTWFza19fU0hJRlQgMHhiCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fRFNQU2VtUmVzcE1hc2tfTUFTSyAweDEwMDAKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9DTlRMX19EU1BTZW1SZXNwTWFza19fU0hJRlQgMHhjCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fSTJTQlREYXRhRW1wdHlNYXNrX01BU0sgMHgyMDAwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfQ05UTF9fSTJTQlREYXRhRW1wdHlNYXNrX19TSElGVCAweGQKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9DTlRMX19ETUFJT0NNYXNrX01BU0sgMHhmZmZmMDAwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX0NOVExfX0RNQUlPQ01hc2tfX1NISUZUIDB4MTAKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19BQ1BFcnJTdGF0X01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fQUNQRXJyU3RhdF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fQUNQRXJyQWNrX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fQUNQRXJyQWNrX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19JMlNNaWNEYXRhQXZTdGF0X01BU0sgMHgyCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTTWljRGF0YUF2U3RhdF9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTTWljRGF0YUF2QWNrX01BU0sgMHgyCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTTWljRGF0YUF2QWNrX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19JMlNTcGtyMERhdGFFbXB0eVN0YXRfTUFTSyAweDQKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19JMlNTcGtyMERhdGFFbXB0eVN0YXRfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0kyU1Nwa3IwRGF0YUVtcHR5QWNrX01BU0sgMHg0CisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTU3BrcjBEYXRhRW1wdHlBY2tfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0kyU1Nwa3IxRGF0YUVtcHR5U3RhdF9NQVNLIDB4OAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0kyU1Nwa3IxRGF0YUVtcHR5U3RhdF9fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTU3BrcjFEYXRhRW1wdHlBY2tfTUFTSyAweDgKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19JMlNTcGtyMURhdGFFbXB0eUFja19fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTQlREYXRhQXZTdGF0X01BU0sgMHgxMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0kyU0JURGF0YUF2U3RhdF9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTQlREYXRhQXZBY2tfTUFTSyAweDEwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTQlREYXRhQXZBY2tfX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0F6YWxpYUludHJTdGF0X01BU0sgMHg0MAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0F6YWxpYUludHJTdGF0X19TSElGVCAweDYKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19BemFsaWFJbnRyQWNrX01BU0sgMHg0MAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0F6YWxpYUludHJBY2tfX1NISUZUIDB4NgorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX1NNVU1haWxib3hXcml0ZVN0YXRfTUFTSyAweDEwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX1NNVU1haWxib3hXcml0ZVN0YXRfX1NISUZUIDB4OAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX1NNVU1haWxib3hXcml0ZUFja19NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fU01VTWFpbGJveFdyaXRlQWNrX19TSElGVCAweDgKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19TTVVTdHV0dGVyU3RhdHVzU3RhdF9NQVNLIDB4MjAwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fU01VU3R1dHRlclN0YXR1c1N0YXRfX1NISUZUIDB4OQorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX1NNVVN0dXR0ZXJTdGF0dXNBY2tfTUFTSyAweDIwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX1NNVVN0dXR0ZXJTdGF0dXNBY2tfX1NISUZUIDB4OQorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX01DU3R1dHRlclN0YXR1c1N0YXRfTUFTSyAweDQwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX01DU3R1dHRlclN0YXR1c1N0YXRfX1NISUZUIDB4YQorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX01DU3R1dHRlclN0YXR1c0Fja19NQVNLIDB4NDAwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fTUNTdHV0dGVyU3RhdHVzQWNrX19TSElGVCAweGEKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19EU1BFeHRUaW1lclN0YXRfTUFTSyAweDgwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0RTUEV4dFRpbWVyU3RhdF9fU0hJRlQgMHhiCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fRFNQRXh0VGltZXJBY2tfTUFTSyAweDgwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0RTUEV4dFRpbWVyQWNrX19TSElGVCAweGIKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19EU1BTZW1SZXNwU3RhdF9NQVNLIDB4MTAwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0RTUFNlbVJlc3BTdGF0X19TSElGVCAweGMKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19EU1BTZW1SZXNwQWNrX01BU0sgMHgxMDAwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fRFNQU2VtUmVzcEFja19fU0hJRlQgMHhjCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTQlREYXRhRW1wdHlTdGF0X01BU0sgMHgyMDAwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fSTJTQlREYXRhRW1wdHlTdGF0X19TSElGVCAweGQKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19JMlNCVERhdGFFbXB0eUFja19NQVNLIDB4MjAwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0kyU0JURGF0YUVtcHR5QWNrX19TSElGVCAweGQKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19ETUFJT0NTdGF0X01BU0sgMHhmZmZmMDAwMAorI2RlZmluZSBBQ1BfRFNQMl9JTlRSX1NUQVRfX0RNQUlPQ1N0YXRfX1NISUZUIDB4MTAKKyNkZWZpbmUgQUNQX0RTUDJfSU5UUl9TVEFUX19ETUFJT0NBY2tfTUFTSyAweGZmZmYwMDAwCisjZGVmaW5lIEFDUF9EU1AyX0lOVFJfU1RBVF9fRE1BSU9DQWNrX19TSElGVCAweDEwCisjZGVmaW5lIEFDUF9EU1AyX1RJTUVPVVRfQ05UTF9fRFNQMlRpbWVvdXRWYWx1ZV9NQVNLIDB4M2ZmZmYKKyNkZWZpbmUgQUNQX0RTUDJfVElNRU9VVF9DTlRMX19EU1AyVGltZW91dFZhbHVlX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfVElNRU9VVF9DTlRMX19DbnRFbl9NQVNLIDB4ODAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfVElNRU9VVF9DTlRMX19DbnRFbl9fU0hJRlQgMHgxZgorI2RlZmluZSBBQ1BfRFNQMF9FWFRfVElNRVJfQ05UTF9fVGltZXJDb3VudF9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX0VYVF9USU1FUl9DTlRMX19UaW1lckNvdW50X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfRVhUX1RJTUVSX0NOVExfX1RpbWVyQ250bF9NQVNLIDB4YzAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDBfRVhUX1RJTUVSX0NOVExfX1RpbWVyQ250bF9fU0hJRlQgMHgxZQorI2RlZmluZSBBQ1BfRFNQMV9FWFRfVElNRVJfQ05UTF9fVGltZXJDb3VudF9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX0VYVF9USU1FUl9DTlRMX19UaW1lckNvdW50X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDFfRVhUX1RJTUVSX0NOVExfX1RpbWVyQ250bF9NQVNLIDB4YzAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDFfRVhUX1RJTUVSX0NOVExfX1RpbWVyQ250bF9fU0hJRlQgMHgxZQorI2RlZmluZSBBQ1BfRFNQMl9FWFRfVElNRVJfQ05UTF9fVGltZXJDb3VudF9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX0VYVF9USU1FUl9DTlRMX19UaW1lckNvdW50X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDJfRVhUX1RJTUVSX0NOVExfX1RpbWVyQ250bF9NQVNLIDB4YzAwMDAwMDAKKyNkZWZpbmUgQUNQX0RTUDJfRVhUX1RJTUVSX0NOVExfX1RpbWVyQ250bF9fU0hJRlQgMHgxZQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzBfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMF9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzFfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMV9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzJfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMl9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzNfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fM19fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzRfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fNF9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzVfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fNV9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzZfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fNl9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzdfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fN19fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzhfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fOF9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzlfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fOV9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzEwX19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzEwX19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMTFfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMTFfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8xMl9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8xMl9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzEzX19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzEzX19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMTRfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMTRfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8xNV9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8xNV9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzE2X19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzE2X19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMTdfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMTdfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8xOF9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8xOF9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzE5X19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzE5X19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMjBfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMjBfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8yMV9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8yMV9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzIyX19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzIyX19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMjNfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMjNfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8yNF9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8yNF9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzI1X19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzI1X19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMjZfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMjZfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8yN19fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8yN19fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzI4X19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzI4X19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMjlfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMjlfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8zMF9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8zMF9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzMxX19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzMxX19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMzJfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMzJfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8zM19fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8zM19fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzM0X19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzM0X19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMzVfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMzVfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8zNl9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8zNl9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzM3X19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzM3X19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMzhfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fMzhfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8zOV9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV8zOV9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzQwX19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzQwX19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fNDFfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fNDFfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV80Ml9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV80Ml9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzQzX19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzQzX19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fNDRfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fNDRfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV80NV9fQVhJMkRBR0JHYmxTZW1SZWdfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0FYSTJEQUdCX1NFTV80NV9fQVhJMkRBR0JHYmxTZW1SZWdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzQ2X19BWEkyREFHQkdibFNlbVJlZ19NQVNLIDB4MQorI2RlZmluZSBBQ1BfQVhJMkRBR0JfU0VNXzQ2X19BWEkyREFHQkdibFNlbVJlZ19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fNDdfX0FYSTJEQUdCR2JsU2VtUmVnX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWEkyREFHQl9TRU1fNDdfX0FYSTJEQUdCR2JsU2VtUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1NSQk1fQ2xpZW50X0Jhc2VfQWRkcl9fU1JCTV9DbGllbnRfYmFzZV9hZGRyX01BU0sgMHhmZgorI2RlZmluZSBBQ1BfU1JCTV9DbGllbnRfQmFzZV9BZGRyX19TUkJNX0NsaWVudF9iYXNlX2FkZHJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfU1JCTV9DbGllbnRfUkREQVRBX19SZWFkRGF0YV9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX1NSQk1fQ2xpZW50X1JEREFUQV9fUmVhZERhdGFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfU1JCTV9DeWNsZV9TdHNfX1NSQk1fQ2xpZW50X1N0c19NQVNLIDB4MQorI2RlZmluZSBBQ1BfU1JCTV9DeWNsZV9TdHNfX1NSQk1fQ2xpZW50X1N0c19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TUkJNX1RhcmdfSWR4X0FkZHJfX1NSQk1fVGFyZ19JZHhfYWRkcl9NQVNLIDB4N2ZmZmZmZgorI2RlZmluZSBBQ1BfU1JCTV9UYXJnX0lkeF9BZGRyX19TUkJNX1RhcmdfSWR4X2FkZHJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfU1JCTV9UYXJnX0lkeF9EYXRhX19TUkJNX1RhcmdfSWR4X0RhdGFfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9TUkJNX1RhcmdfSWR4X0RhdGFfX1NSQk1fVGFyZ19JZHhfRGF0YV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TRU1BX0FERFJfTE9XX19BRERSXzlfM19NQVNLIDB4N2YKKyNkZWZpbmUgQUNQX1NFTUFfQUREUl9MT1dfX0FERFJfOV8zX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1NFTUFfQUREUl9ISUdIX19BRERSXzM5XzEwX01BU0sgMHgzZmZmZmZmZgorI2RlZmluZSBBQ1BfU0VNQV9BRERSX0hJR0hfX0FERFJfMzlfMTBfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfU0VNQV9DTURfX1JFUV9DTURfTUFTSyAweGYKKyNkZWZpbmUgQUNQX1NFTUFfQ01EX19SRVFfQ01EX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1NFTUFfQ01EX19XUl9QSEFTRV9NQVNLIDB4MzAKKyNkZWZpbmUgQUNQX1NFTUFfQ01EX19XUl9QSEFTRV9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9TRU1BX0NNRF9fVk1JRF9FTl9NQVNLIDB4ODAKKyNkZWZpbmUgQUNQX1NFTUFfQ01EX19WTUlEX0VOX19TSElGVCAweDcKKyNkZWZpbmUgQUNQX1NFTUFfQ01EX19WTUlEX01BU0sgMHhmMDAKKyNkZWZpbmUgQUNQX1NFTUFfQ01EX19WTUlEX19TSElGVCAweDgKKyNkZWZpbmUgQUNQX1NFTUFfQ01EX19BVENfTUFTSyAweDEwMDAKKyNkZWZpbmUgQUNQX1NFTUFfQ01EX19BVENfX1NISUZUIDB4YworI2RlZmluZSBBQ1BfU0VNQV9TVFNfX1JFUV9TVFNfTUFTSyAweDMKKyNkZWZpbmUgQUNQX1NFTUFfU1RTX19SRVFfU1RTX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1NFTUFfU1RTX19SRVFfUkVTUF9BVkFJTF9NQVNLIDB4MTAwCisjZGVmaW5lIEFDUF9TRU1BX1NUU19fUkVRX1JFU1BfQVZBSUxfX1NISUZUIDB4OAorI2RlZmluZSBBQ1BfU0VNQV9SRVFfX0lTU1VFX1BPTExfUkVRX01BU0sgMHgxCisjZGVmaW5lIEFDUF9TRU1BX1JFUV9fSVNTVUVfUE9MTF9SRVFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRldfU1RBVFVTX19SVU5fTUFTSyAweDEKKyNkZWZpbmUgQUNQX0ZXX1NUQVRVU19fUlVOX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0ZVVFVSRV9SRUdfQUNMS18wX19BQ1BGdXR1cmVSZWdfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX0FDTEtfMF9fQUNQRnV0dXJlUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0ZVVFVSRV9SRUdfQUNMS18xX19BQ1BGdXR1cmVSZWdfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX0FDTEtfMV9fQUNQRnV0dXJlUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0ZVVFVSRV9SRUdfQUNMS18yX19BQ1BGdXR1cmVSZWdfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX0FDTEtfMl9fQUNQRnV0dXJlUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0ZVVFVSRV9SRUdfQUNMS18zX19BQ1BGdXR1cmVSZWdfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX0FDTEtfM19fQUNQRnV0dXJlUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0ZVVFVSRV9SRUdfQUNMS180X19BQ1BGdXR1cmVSZWdfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9GVVRVUkVfUkVHX0FDTEtfNF9fQUNQRnV0dXJlUmVnX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1RJTUVSX19BQ1BfVGltZXJfY291bnRfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9USU1FUl9fQUNQX1RpbWVyX2NvdW50X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1RJTUVSX0NOVExfX0FDUF9UaW1lcl9jb250cm9sX01BU0sgMHgxCisjZGVmaW5lIEFDUF9USU1FUl9DTlRMX19BQ1BfVGltZXJfY29udHJvbF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AwX1RJTUVSX19BQ1BfRFNQMF90aW1lcl9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AwX1RJTUVSX19BQ1BfRFNQMF90aW1lcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AxX1RJTUVSX19BQ1BfRFNQMV90aW1lcl9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AxX1RJTUVSX19BQ1BfRFNQMV90aW1lcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX1RJTUVSX19BQ1BfRFNQMl90aW1lcl9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9EU1AyX1RJTUVSX19BQ1BfRFNQMl90aW1lcl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNfVFJBTlNNSVRfQllURV9DTlRfSElHSF9faTJzX3NwX3R4X2J5dGVfY250X2hpZ2hfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNfVFJBTlNNSVRfQllURV9DTlRfSElHSF9faTJzX3NwX3R4X2J5dGVfY250X2hpZ2hfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTX1RSQU5TTUlUX0JZVEVfQ05UX0xPV19faTJzX3NwX3R4X2J5dGVfY250X2xvd19NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0kyU19UUkFOU01JVF9CWVRFX0NOVF9MT1dfX2kyc19zcF90eF9ieXRlX2NudF9sb3dfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTX0JUX1RSQU5TTUlUX0JZVEVfQ05UX0hJR0hfX2kyc19idF90eF9ieXRlX2NudF9oaWdoX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTX0JUX1RSQU5TTUlUX0JZVEVfQ05UX0hJR0hfX2kyc19idF90eF9ieXRlX2NudF9oaWdoX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU19CVF9UUkFOU01JVF9CWVRFX0NOVF9MT1dfX2kyc19idF90eF9ieXRlX2NudF9sb3dfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNfQlRfVFJBTlNNSVRfQllURV9DTlRfTE9XX19pMnNfYnRfdHhfYnl0ZV9jbnRfbG93X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU19CVF9SRUNFSVZFX0JZVEVfQ05UX0hJR0hfX2kyc19idF9yeF9ieXRlX2NudF9oaWdoX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTX0JUX1JFQ0VJVkVfQllURV9DTlRfSElHSF9faTJzX2J0X3J4X2J5dGVfY250X2hpZ2hfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTX0JUX1JFQ0VJVkVfQllURV9DTlRfTE9XX19pMnNfYnRfcnhfYnl0ZV9jbnRfbG93X01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTX0JUX1JFQ0VJVkVfQllURV9DTlRfTE9XX19pMnNfYnRfcnhfYnl0ZV9jbnRfbG93X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0RTUDBfQ1NfU1RBVEVfX0RTUDBfQ1Nfc3RhdGVfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0RTUDBfQ1NfU1RBVEVfX0RTUDBfQ1Nfc3RhdGVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfRFNQMV9DU19TVEFURV9fRFNQMV9DU19zdGF0ZV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfRFNQMV9DU19TVEFURV9fRFNQMV9DU19zdGF0ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9EU1AyX0NTX1NUQVRFX19EU1AyX0NTX3N0YXRlX01BU0sgMHgxCisjZGVmaW5lIEFDUF9EU1AyX0NTX1NUQVRFX19EU1AyX0NTX3N0YXRlX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1NDUkFUQ0hfUkVHX0JBU0VfQUREUl9fU0NSQVRDSF9SRUdfQkFTRV9BRERSX01BU0sgMHg3ZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfQkFTRV9BRERSX19TQ1JBVENIX1JFR19CQVNFX0FERFJfX1NISUZUIDB4MAorI2RlZmluZSBDQ19BQ1BfRUZVU0VfX0RTUDBfRElTQUJMRV9NQVNLIDB4MgorI2RlZmluZSBDQ19BQ1BfRUZVU0VfX0RTUDBfRElTQUJMRV9fU0hJRlQgMHgxCisjZGVmaW5lIENDX0FDUF9FRlVTRV9fRFNQMV9ESVNBQkxFX01BU0sgMHg0CisjZGVmaW5lIENDX0FDUF9FRlVTRV9fRFNQMV9ESVNBQkxFX19TSElGVCAweDIKKyNkZWZpbmUgQ0NfQUNQX0VGVVNFX19EU1AyX0RJU0FCTEVfTUFTSyAweDgKKyNkZWZpbmUgQ0NfQUNQX0VGVVNFX19EU1AyX0RJU0FCTEVfX1NISUZUIDB4MworI2RlZmluZSBDQ19BQ1BfRUZVU0VfX0FDUF9ESVNBQkxFX01BU0sgMHgxMAorI2RlZmluZSBDQ19BQ1BfRUZVU0VfX0FDUF9ESVNBQkxFX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX1BHRlNNX1JFVEFJTl9SRUdfX0FDUF9QMV9PTl9PRkZfTUFTSyAweDEKKyNkZWZpbmUgQUNQX1BHRlNNX1JFVEFJTl9SRUdfX0FDUF9QMV9PTl9PRkZfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfUEdGU01fUkVUQUlOX1JFR19fQUNQX1AyX09OX09GRl9NQVNLIDB4MgorI2RlZmluZSBBQ1BfUEdGU01fUkVUQUlOX1JFR19fQUNQX1AyX09OX09GRl9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9QR0ZTTV9SRVRBSU5fUkVHX19BQ1BfRFNQMF9PTl9PRkZfTUFTSyAweDQKKyNkZWZpbmUgQUNQX1BHRlNNX1JFVEFJTl9SRUdfX0FDUF9EU1AwX09OX09GRl9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9QR0ZTTV9SRVRBSU5fUkVHX19BQ1BfRFNQMV9PTl9PRkZfTUFTSyAweDgKKyNkZWZpbmUgQUNQX1BHRlNNX1JFVEFJTl9SRUdfX0FDUF9EU1AxX09OX09GRl9fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9QR0ZTTV9SRVRBSU5fUkVHX19BQ1BfRFNQMl9PTl9PRkZfTUFTSyAweDEwCisjZGVmaW5lIEFDUF9QR0ZTTV9SRVRBSU5fUkVHX19BQ1BfRFNQMl9PTl9PRkZfX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfUEdGU01fUkVUQUlOX1JFR19fQUNQX0FaX09OX09GRl9NQVNLIDB4MjAKKyNkZWZpbmUgQUNQX1BHRlNNX1JFVEFJTl9SRUdfX0FDUF9BWl9PTl9PRkZfX1NISUZUIDB4NQorI2RlZmluZSBBQ1BfUEdGU01fQ09ORklHX1JFR19fRlNNX0FERFJfTUFTSyAweGZmCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19GU01fQUREUl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19Qb3dlcl9Eb3duX01BU0sgMHgxMDAKKyNkZWZpbmUgQUNQX1BHRlNNX0NPTkZJR19SRUdfX1Bvd2VyX0Rvd25fX1NISUZUIDB4OAorI2RlZmluZSBBQ1BfUEdGU01fQ09ORklHX1JFR19fUG93ZXJfVXBfTUFTSyAweDIwMAorI2RlZmluZSBBQ1BfUEdGU01fQ09ORklHX1JFR19fUG93ZXJfVXBfX1NISUZUIDB4OQorI2RlZmluZSBBQ1BfUEdGU01fQ09ORklHX1JFR19fUDFfU2VsZWN0X01BU0sgMHg0MDAKKyNkZWZpbmUgQUNQX1BHRlNNX0NPTkZJR19SRUdfX1AxX1NlbGVjdF9fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19QMl9TZWxlY3RfTUFTSyAweDgwMAorI2RlZmluZSBBQ1BfUEdGU01fQ09ORklHX1JFR19fUDJfU2VsZWN0X19TSElGVCAweGIKKyNkZWZpbmUgQUNQX1BHRlNNX0NPTkZJR19SRUdfX1dyX01BU0sgMHgxMDAwCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19Xcl9fU0hJRlQgMHhjCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19SZF9NQVNLIDB4MjAwMAorI2RlZmluZSBBQ1BfUEdGU01fQ09ORklHX1JFR19fUmRfX1NISUZUIDB4ZAorI2RlZmluZSBBQ1BfUEdGU01fQ09ORklHX1JFR19fUmREYXRhX1Jlc2V0X01BU0sgMHg0MDAwCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19SZERhdGFfUmVzZXRfX1NISUZUIDB4ZQorI2RlZmluZSBBQ1BfUEdGU01fQ09ORklHX1JFR19fU2hvcnRfRm9ybWF0X01BU0sgMHg4MDAwCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19TaG9ydF9Gb3JtYXRfX1NISUZUIDB4ZgorI2RlZmluZSBBQ1BfUEdGU01fQ09ORklHX1JFR19fQlBNX0NHX01HX0ZHQ0dfTUFTSyAweDNmZjAwMDAKKyNkZWZpbmUgQUNQX1BHRlNNX0NPTkZJR19SRUdfX0JQTV9DR19NR19GR0NHX19TSElGVCAweDEwCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19TUkJNX292ZXJyaWRlX01BU0sgMHg0MDAwMDAwCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19TUkJNX292ZXJyaWRlX19TSElGVCAweDFhCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19Sc3ZkX0JQTV9BZGRyX01BU0sgMHg4MDAwMDAwCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19Sc3ZkX0JQTV9BZGRyX19TSElGVCAweDFiCisjZGVmaW5lIEFDUF9QR0ZTTV9DT05GSUdfUkVHX19SRUdfQUREUl9NQVNLIDB4ZjAwMDAwMDAKKyNkZWZpbmUgQUNQX1BHRlNNX0NPTkZJR19SRUdfX1JFR19BRERSX19TSElGVCAweDFjCisjZGVmaW5lIEFDUF9QR0ZTTV9XUklURV9SRUdfX1dyaXRlX3ZhbHVlX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfUEdGU01fV1JJVEVfUkVHX19Xcml0ZV92YWx1ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9QR0ZTTV9SRUFEX1JFR18wX19SZWFkX3ZhbHVlX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX1BHRlNNX1JFQURfUkVHXzBfX1JlYWRfdmFsdWVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfUEdGU01fUkVBRF9SRUdfMV9fUmVhZF92YWx1ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9QR0ZTTV9SRUFEX1JFR18xX19SZWFkX3ZhbHVlX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1BHRlNNX1JFQURfUkVHXzJfX1JlYWRfdmFsdWVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfUEdGU01fUkVBRF9SRUdfMl9fUmVhZF92YWx1ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9QR0ZTTV9SRUFEX1JFR18zX19SZWFkX3ZhbHVlX01BU0sgMHhmZmZmZmYKKyNkZWZpbmUgQUNQX1BHRlNNX1JFQURfUkVHXzNfX1JlYWRfdmFsdWVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfUEdGU01fUkVBRF9SRUdfNF9fUmVhZF92YWx1ZV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIEFDUF9QR0ZTTV9SRUFEX1JFR180X19SZWFkX3ZhbHVlX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1BHRlNNX1JFQURfUkVHXzVfX1JlYWRfdmFsdWVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBBQ1BfUEdGU01fUkVBRF9SRUdfNV9fUmVhZF92YWx1ZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JUF9QR0ZTTV9FTkFCTEVfX0FDUF9JUF9BQ0NFU1NfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0lQX1BHRlNNX0VOQUJMRV9fQUNQX0lQX0FDQ0VTU19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNfUElOX0NPTkZJR19fQUNQX0kyU19QSU5fQ09ORklHX01BU0sgMHgzCisjZGVmaW5lIEFDUF9JMlNfUElOX0NPTkZJR19fQUNQX0kyU19QSU5fQ09ORklHX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FaQUxJQV9JMlNfU0VMRUNUX19BWl9JMlNfU0VMRUNUX01BU0sgMHgxCisjZGVmaW5lIEFDUF9BWkFMSUFfSTJTX1NFTEVDVF9fQVpfSTJTX1NFTEVDVF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9DSElQX1BLR19GT1JfUEFEX0lTT0xBVElPTl9fZXh0ZXJuYWxfZmNoX3BhY2thZ2VfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0NISVBfUEtHX0ZPUl9QQURfSVNPTEFUSU9OX19leHRlcm5hbF9mY2hfcGFja2FnZV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9BVURJT19QQURfUFVMTFVQX1BVTExET1dOX0NUUkxfX0FDUF9BVURJT19QQURfcHVsbHVwX2Rpc2FibGVfTUFTSyAweDdmZgorI2RlZmluZSBBQ1BfQVVESU9fUEFEX1BVTExVUF9QVUxMRE9XTl9DVFJMX19BQ1BfQVVESU9fUEFEX3B1bGx1cF9kaXNhYmxlX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0FVRElPX1BBRF9QVUxMVVBfUFVMTERPV05fQ1RSTF9fQUNQX0FVRElPX1BBRF9wdWxsZG93bl9lbmFibGVfTUFTSyAweDdmZjAwMDAKKyNkZWZpbmUgQUNQX0FVRElPX1BBRF9QVUxMVVBfUFVMTERPV05fQ1RSTF9fQUNQX0FVRElPX1BBRF9wdWxsZG93bl9lbmFibGVfX1NISUZUIDB4MTAKKyNkZWZpbmUgQUNQX0JUX1VBUlRfUEFEX1NFTF9fQUNQX0JUX1VBUlRfUEFEX1NFTF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfQlRfVUFSVF9QQURfU0VMX19BQ1BfQlRfVUFSVF9QQURfU0VMX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1NDUkFUQ0hfUkVHXzBfX0FDUF9TQ1JBVENIX1JFR19NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX1NDUkFUQ0hfUkVHXzBfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xX19BQ1BfU0NSQVRDSF9SRUdfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xX19BQ1BfU0NSQVRDSF9SRUdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMl9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMl9fQUNQX1NDUkFUQ0hfUkVHX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1NDUkFUQ0hfUkVHXzNfX0FDUF9TQ1JBVENIX1JFR19NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX1NDUkFUQ0hfUkVHXzNfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180X19BQ1BfU0NSQVRDSF9SRUdfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180X19BQ1BfU0NSQVRDSF9SRUdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNV9fQUNQX1NDUkFUQ0hfUkVHX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1NDUkFUQ0hfUkVHXzZfX0FDUF9TQ1JBVENIX1JFR19NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX1NDUkFUQ0hfUkVHXzZfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR183X19BQ1BfU0NSQVRDSF9SRUdfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR183X19BQ1BfU0NSQVRDSF9SRUdfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfOF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfOF9fQUNQX1NDUkFUQ0hfUkVHX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1NDUkFUQ0hfUkVHXzlfX0FDUF9TQ1JBVENIX1JFR19NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX1NDUkFUQ0hfUkVHXzlfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xMF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMTBfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xMV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMTFfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xMl9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMTJfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xM19fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMTNfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xNF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMTRfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xNV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMTVfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xNl9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMTZfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xN19fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMTdfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xOF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMThfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18xOV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMTlfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yMF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjBfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yMV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjFfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yMl9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjJfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yM19fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjNfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yNF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjRfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yNV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjVfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yNl9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjZfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yN19fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjdfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yOF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjhfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18yOV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMjlfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zMF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzBfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zMV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzFfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zMl9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzJfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zM19fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzNfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zNF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzRfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zNV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzVfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zNl9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzZfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zN19fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzdfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zOF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzhfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR18zOV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfMzlfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180MF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNDBfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180MV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNDFfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180Ml9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNDJfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180M19fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNDNfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180NF9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNDRfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180NV9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNDVfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180Nl9fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNDZfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9TQ1JBVENIX1JFR180N19fQUNQX1NDUkFUQ0hfUkVHX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfU0NSQVRDSF9SRUdfNDdfX0FDUF9TQ1JBVENIX1JFR19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9WT0lDRV9XQUtFVVBfRU5BQkxFX192b2ljZV93YWtldXBfZW5hYmxlX01BU0sgMHgxCisjZGVmaW5lIEFDUF9WT0lDRV9XQUtFVVBfRU5BQkxFX192b2ljZV93YWtldXBfZW5hYmxlX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX1ZPSUNFX1dBS0VVUF9TVEFUVVNfX3ZvaWNlX3dha2V1cF9zdGF0dXNfTUFTSyAweDEKKyNkZWZpbmUgQUNQX1ZPSUNFX1dBS0VVUF9TVEFUVVNfX3ZvaWNlX3dha2V1cF9zdGF0dXNfX1NISUZUIDB4MAorI2RlZmluZSBJMlNfVk9JQ0VfV0FLRVVQX0xPV0VSX1RIUkVTSE9MRF9faTJzX3ZvaWNlX3dha2V1cF9sb3dlcl90aHJlc2hvbGRfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEkyU19WT0lDRV9XQUtFVVBfTE9XRVJfVEhSRVNIT0xEX19pMnNfdm9pY2Vfd2FrZXVwX2xvd2VyX3RocmVzaG9sZF9fU0hJRlQgMHgwCisjZGVmaW5lIEkyU19WT0lDRV9XQUtFVVBfSElHSEVSX1RIUkVTSE9MRF9faTJzX3ZvaWNlX3dha2V1cF9oaWdoZXJfdGhyZXNob2xkX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBJMlNfVk9JQ0VfV0FLRVVQX0hJR0hFUl9USFJFU0hPTERfX2kyc192b2ljZV93YWtldXBfaGlnaGVyX3RocmVzaG9sZF9fU0hJRlQgMHgwCisjZGVmaW5lIEkyU19WT0lDRV9XQUtFVVBfTk9fT0ZfU0FNUExFU19faTJzX3ZvaWNlX3dha2V1cF9ub19vZl9zYW1wbGVzX01BU0sgMHhmZmZmCisjZGVmaW5lIEkyU19WT0lDRV9XQUtFVVBfTk9fT0ZfU0FNUExFU19faTJzX3ZvaWNlX3dha2V1cF9ub19vZl9zYW1wbGVzX19TSElGVCAweDAKKyNkZWZpbmUgSTJTX1ZPSUNFX1dBS0VVUF9OT19PRl9QRUFLU19faTJzX3ZvaWNlX3dha2V1cF9ub19vZl9wZWFrc19NQVNLIDB4ZmZmZgorI2RlZmluZSBJMlNfVk9JQ0VfV0FLRVVQX05PX09GX1BFQUtTX19pMnNfdm9pY2Vfd2FrZXVwX25vX29mX3BlYWtzX19TSElGVCAweDAKKyNkZWZpbmUgSTJTX1ZPSUNFX1dBS0VVUF9EVVJBVElPTl9PRl9OX1BFQUtTX19pMnNfdm9pY2Vfd2FrZXVwX2R1cmF0aW9uX29mX25fcGVha3NfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEkyU19WT0lDRV9XQUtFVVBfRFVSQVRJT05fT0ZfTl9QRUFLU19faTJzX3ZvaWNlX3dha2V1cF9kdXJhdGlvbl9vZl9uX3BlYWtzX19TSElGVCAweDAKKyNkZWZpbmUgSTJTX1ZPSUNFX1dBS0VVUF9CSVRDTEtfVE9HR0xFX0RFVEVDVElPTl9faTJzX3ZvaWNlX3dha2V1cF9iaXRjbGtfdG9nZ2xlX3dha2V1cF9lbl9NQVNLIDB4MQorI2RlZmluZSBJMlNfVk9JQ0VfV0FLRVVQX0JJVENMS19UT0dHTEVfREVURUNUSU9OX19pMnNfdm9pY2Vfd2FrZXVwX2JpdGNsa190b2dnbGVfd2FrZXVwX2VuX19TSElGVCAweDAKKyNkZWZpbmUgSTJTX1ZPSUNFX1dBS0VVUF9EQVRBX1BBVEhfU1dJVENIX19pMnNfdm9pY2Vfd2FrZXVwX2RhdGFfcGF0aF9zd2l0Y2hfcmVxX01BU0sgMHgxCisjZGVmaW5lIEkyU19WT0lDRV9XQUtFVVBfREFUQV9QQVRIX1NXSVRDSF9faTJzX3ZvaWNlX3dha2V1cF9kYXRhX3BhdGhfc3dpdGNoX3JlcV9fU0hJRlQgMHgwCisjZGVmaW5lIEkyU19WT0lDRV9XQUtFVVBfREFUQV9QQVRIX1NXSVRDSF9faTJzX3ZvaWNlX3dha2V1cF9kYXRhX3BhdGhfc3dpdGNoX2Fja19NQVNLIDB4MgorI2RlZmluZSBJMlNfVk9JQ0VfV0FLRVVQX0RBVEFfUEFUSF9TV0lUQ0hfX2kyc192b2ljZV93YWtldXBfZGF0YV9wYXRoX3N3aXRjaF9hY2tfX1NISUZUIDB4MQorI2RlZmluZSBJMlNfVk9JQ0VfV0FLRVVQX0RBVEFfUE9JTlRFUl9faTJzX3ZvaWNlX3dha2V1cF9kYXRhX3BvaW50ZXJfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEkyU19WT0lDRV9XQUtFVVBfREFUQV9QT0lOVEVSX19pMnNfdm9pY2Vfd2FrZXVwX2RhdGFfcG9pbnRlcl9fU0hJRlQgMHgwCisjZGVmaW5lIEkyU19WT0lDRV9XQUtFVVBfQVVUSF9NQVRDSF9faTJzX3ZvaWNlX3dha2V1cF9hdXRoZW50aWNhdGlvbl92YWxpZF9NQVNLIDB4MQorI2RlZmluZSBJMlNfVk9JQ0VfV0FLRVVQX0FVVEhfTUFUQ0hfX2kyc192b2ljZV93YWtldXBfYXV0aGVudGljYXRpb25fdmFsaWRfX1NISUZUIDB4MAorI2RlZmluZSBJMlNfVk9JQ0VfV0FLRVVQX0FVVEhfTUFUQ0hfX2kyc192b2ljZV93YWtldXBfYXV0aGVudGljYXRpb25fbWF0Y2hfTUFTSyAweDIKKyNkZWZpbmUgSTJTX1ZPSUNFX1dBS0VVUF9BVVRIX01BVENIX19pMnNfdm9pY2Vfd2FrZXVwX2F1dGhlbnRpY2F0aW9uX21hdGNoX19TSElGVCAweDEKKyNkZWZpbmUgSTJTX1ZPSUNFX1dBS0VVUF84S0JfV1JBUF9faTJzX3ZvaWNlX3dha2V1cF84a2Jfd3JhcF9NQVNLIDB4MQorI2RlZmluZSBJMlNfVk9JQ0VfV0FLRVVQXzhLQl9XUkFQX19pMnNfdm9pY2Vfd2FrZXVwXzhrYl93cmFwX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU19SRUNFSVZFRF9CWVRFX0NOVF9ISUdIX19pMnNfbWljX3J4X2J5dGVfY250X2hpZ2hfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNfUkVDRUlWRURfQllURV9DTlRfSElHSF9faTJzX21pY19yeF9ieXRlX2NudF9oaWdoX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU19SRUNFSVZFRF9CWVRFX0NOVF9MT1dfX2kyc19taWNfcnhfYnl0ZV9jbnRfbG93X01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTX1JFQ0VJVkVEX0JZVEVfQ05UX0xPV19faTJzX21pY19yeF9ieXRlX2NudF9sb3dfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTX01JQ1NQX1RSQU5TTUlUX0JZVEVfQ05UX0hJR0hfX2kyc19taWNzcF90eF9ieXRlX2NudF9oaWdoX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTX01JQ1NQX1RSQU5TTUlUX0JZVEVfQ05UX0hJR0hfX2kyc19taWNzcF90eF9ieXRlX2NudF9oaWdoX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU19NSUNTUF9UUkFOU01JVF9CWVRFX0NOVF9MT1dfX2kyc19taWNzcF90eF9ieXRlX2NudF9sb3dfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNfTUlDU1BfVFJBTlNNSVRfQllURV9DTlRfTE9XX19pMnNfbWljc3BfdHhfYnl0ZV9jbnRfbG93X19TSElGVCAweDAKKyNkZWZpbmUgQUNQX01FTV9TSFVUX0RPV05fUkVRX0xPX19BQ1BfU2h1dERvd25SZXFfUkFNTF9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX01FTV9TSFVUX0RPV05fUkVRX0xPX19BQ1BfU2h1dERvd25SZXFfUkFNTF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9NRU1fU0hVVF9ET1dOX1JFUV9ISV9fQUNQX1NodXREb3duUmVxX1JBTUhfTUFTSyAweGZmZmYKKyNkZWZpbmUgQUNQX01FTV9TSFVUX0RPV05fUkVRX0hJX19BQ1BfU2h1dERvd25SZXFfUkFNSF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9NRU1fU0hVVF9ET1dOX1NUU19MT19fQUNQX1NodXREb3duU3RzX1JBTUxfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9NRU1fU0hVVF9ET1dOX1NUU19MT19fQUNQX1NodXREb3duU3RzX1JBTUxfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfTUVNX1NIVVRfRE9XTl9TVFNfSElfX0FDUF9TaHV0RG93blN0c19SQU1IX01BU0sgMHhmZmZmCisjZGVmaW5lIEFDUF9NRU1fU0hVVF9ET1dOX1NUU19ISV9fQUNQX1NodXREb3duU3RzX1JBTUhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfTUVNX0RFRVBfU0xFRVBfUkVRX0xPX19BQ1BfRGVlcFNsZWVwUmVxX1JBTUxfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9NRU1fREVFUF9TTEVFUF9SRVFfTE9fX0FDUF9EZWVwU2xlZXBSZXFfUkFNTF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9NRU1fREVFUF9TTEVFUF9SRVFfSElfX0FDUF9EZWVwU2xlZXBSZXFfUkFNSF9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfTUVNX0RFRVBfU0xFRVBfUkVRX0hJX19BQ1BfRGVlcFNsZWVwUmVxX1JBTUhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfTUVNX0RFRVBfU0xFRVBfU1RTX0xPX19BQ1BfRGVlcFNsZWVwU3RzX1JBTUxfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9NRU1fREVFUF9TTEVFUF9TVFNfTE9fX0FDUF9EZWVwU2xlZXBTdHNfUkFNTF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9NRU1fREVFUF9TTEVFUF9TVFNfSElfX0FDUF9EZWVwU2xlZXBTdHNfUkFNSF9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfTUVNX0RFRVBfU0xFRVBfU1RTX0hJX19BQ1BfRGVlcFNsZWVwU3RzX1JBTUhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfTUVNX1dBS0VVUF9GUk9NX1NIVVRfRE9XTl9MT19fYWNwX21lbV93YWtldXBfZnJvbV9zaHV0X2Rvd25fbG9fTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9NRU1fV0FLRVVQX0ZST01fU0hVVF9ET1dOX0xPX19hY3BfbWVtX3dha2V1cF9mcm9tX3NodXRfZG93bl9sb19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9NRU1fV0FLRVVQX0ZST01fU0hVVF9ET1dOX0hJX19hY3BfbWVtX3dha2V1cF9mcm9tX3NodXRfZG93bl9oaV9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfTUVNX1dBS0VVUF9GUk9NX1NIVVRfRE9XTl9ISV9fYWNwX21lbV93YWtldXBfZnJvbV9zaHV0X2Rvd25faGlfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfTUVNX1dBS0VVUF9GUk9NX1NMRUVQX0xPX19hY3BfbWVtX3dha2V1cF9mcm9tX3NsZWVwX2xvX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfTUVNX1dBS0VVUF9GUk9NX1NMRUVQX0xPX19hY3BfbWVtX3dha2V1cF9mcm9tX3NsZWVwX2xvX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX01FTV9XQUtFVVBfRlJPTV9TTEVFUF9ISV9fYWNwX21lbV93YWtldXBfZnJvbV9zbGVlcF9oaV9NQVNLIDB4ZmZmZgorI2RlZmluZSBBQ1BfTUVNX1dBS0VVUF9GUk9NX1NMRUVQX0hJX19hY3BfbWVtX3dha2V1cF9mcm9tX3NsZWVwX2hpX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU1NQX0lFUl9fSTJTU1BfSUVOX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNTUF9JRVJfX0kyU1NQX0lFTl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9JUkVSX19JMlNTUF9SWEVOX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNTUF9JUkVSX19JMlNTUF9SWEVOX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU1NQX0lURVJfX0kyU1NQX1RYRU5fTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU1NQX0lURVJfX0kyU1NQX1RYRU5fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfQ0VSX19JMlNTUF9DTEtFTl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTU1BfQ0VSX19JMlNTUF9DTEtFTl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9DQ1JfX0kyU1NQX1NDTEtHX01BU0sgMHg3CisjZGVmaW5lIEFDUF9JMlNTUF9DQ1JfX0kyU1NQX1NDTEtHX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU1NQX0NDUl9fSTJTU1BfV1NTX01BU0sgMHgxOAorI2RlZmluZSBBQ1BfSTJTU1BfQ0NSX19JMlNTUF9XU1NfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfSTJTU1BfUlhGRlJfX0kyU1NQX1JYRkZSX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNTUF9SWEZGUl9fSTJTU1BfUlhGRlJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfVFhGRlJfX0kyU1NQX1RYRkZSX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNTUF9UWEZGUl9fSTJTU1BfVFhGRlJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfTFJCUjBfX0kyU1NQX0xSQlIwX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTU1BfTFJCUjBfX0kyU1NQX0xSQlIwX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU1NQX1JSQlIwX19JMlNTUF9SUkJSMF9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0kyU1NQX1JSQlIwX19JMlNTUF9SUkJSMF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9SRVIwX19JMlNTUF9SWENIRU4wX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNTUF9SRVIwX19JMlNTUF9SWENIRU4wX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU1NQX1RFUjBfX0kyU1NQX1RYQ0hFTjBfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU1NQX1RFUjBfX0kyU1NQX1RYQ0hFTjBfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfUkNSMF9fSTJTU1BfV0xFTl9NQVNLIDB4NworI2RlZmluZSBBQ1BfSTJTU1BfUkNSMF9fSTJTU1BfV0xFTl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9UQ1IwX19JMlNTUF9XTEVOX01BU0sgMHg3CisjZGVmaW5lIEFDUF9JMlNTUF9UQ1IwX19JMlNTUF9XTEVOX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU1NQX0lTUjBfX0kyU1NQX1JYREFfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU1NQX0lTUjBfX0kyU1NQX1JYREFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfSVNSMF9fSTJTU1BfUlhGT19NQVNLIDB4MgorI2RlZmluZSBBQ1BfSTJTU1BfSVNSMF9fSTJTU1BfUlhGT19fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9JMlNTUF9JU1IwX19JMlNTUF9UWEZFX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfSTJTU1BfSVNSMF9fSTJTU1BfVFhGRV9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9JMlNTUF9JU1IwX19JMlNTUF9UWEZPX01BU0sgMHgyMAorI2RlZmluZSBBQ1BfSTJTU1BfSVNSMF9fSTJTU1BfVFhGT19fU0hJRlQgMHg1CisjZGVmaW5lIEFDUF9JMlNTUF9JTVIwX19JMlNTUF9SWERBTV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTU1BfSU1SMF9fSTJTU1BfUlhEQU1fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfSU1SMF9fSTJTU1BfUlhGT01fTUFTSyAweDIKKyNkZWZpbmUgQUNQX0kyU1NQX0lNUjBfX0kyU1NQX1JYRk9NX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0kyU1NQX0lNUjBfX0kyU1NQX1RYRkVNX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfSTJTU1BfSU1SMF9fSTJTU1BfVFhGRU1fX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfSTJTU1BfSU1SMF9fSTJTU1BfVFhGT01fTUFTSyAweDIwCisjZGVmaW5lIEFDUF9JMlNTUF9JTVIwX19JMlNTUF9UWEZPTV9fU0hJRlQgMHg1CisjZGVmaW5lIEFDUF9JMlNTUF9ST1IwX19JMlNTUF9SWENIT19NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTU1BfUk9SMF9fSTJTU1BfUlhDSE9fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfVE9SMF9fSTJTU1BfVFhDSE9fTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU1NQX1RPUjBfX0kyU1NQX1RYQ0hPX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU1NQX1JGQ1IwX19JMlNTUF9SWENIRFRfTUFTSyAweGYKKyNkZWZpbmUgQUNQX0kyU1NQX1JGQ1IwX19JMlNTUF9SWENIRFRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfVEZDUjBfX0kyU1NQX1RYQ0hFVF9NQVNLIDB4ZgorI2RlZmluZSBBQ1BfSTJTU1BfVEZDUjBfX0kyU1NQX1RYQ0hFVF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9SRkYwX19JMlNTUF9SWENIRlJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU1NQX1JGRjBfX0kyU1NQX1JYQ0hGUl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9URkYwX19JMlNTUF9UWENIRlJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU1NQX1RGRjBfX0kyU1NQX1RYQ0hGUl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9SWERNQV9fSTJTU1BfUlhETUFfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNTUF9SWERNQV9fSTJTU1BfUlhETUFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfUlJYRE1BX19JMlNTUF9SUlhETUFfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU1NQX1JSWERNQV9fSTJTU1BfUlJYRE1BX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU1NQX1RYRE1BX19JMlNTUF9UWERNQV9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0kyU1NQX1RYRE1BX19JMlNTUF9UWERNQV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9SVFhETUFfX0kyU1NQX1JUWERNQV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTU1BfUlRYRE1BX19JMlNTUF9SVFhETUFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8yX19JMlNTUF9SWF9XUFJEU0laRV8wX01BU0sgMHg3CisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzJfX0kyU1NQX1JYX1dQUkRTSVpFXzBfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8yX19JMlNTUF9SWF9XUFJEU0laRV8xX01BU0sgMHgzOAorI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8yX19JMlNTUF9SWF9XUFJEU0laRV8xX19TSElGVCAweDMKKyNkZWZpbmUgQUNQX0kyU1NQX0NPTVBfUEFSQU1fMl9fSTJTU1BfUlhfV1BSRFNJWkVfMl9NQVNLIDB4MzgwCisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzJfX0kyU1NQX1JYX1dQUkRTSVpFXzJfX1NISUZUIDB4NworI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8yX19JMlNTUF9SWF9XUFJEU0laRV8zX01BU0sgMHgxYzAwCisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzJfX0kyU1NQX1JYX1dQUkRTSVpFXzNfX1NISUZUIDB4YQorI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8xX19JMlNTUF9BUEJfREFUQV9XSURUSF9NQVNLIDB4MworI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8xX19JMlNTUF9BUEJfREFUQV9XSURUSF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzFfX0kyU1NQX0ZJRk9fREVQVEhfR0xPQkFMX01BU0sgMHhjCisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzFfX0kyU1NQX0ZJRk9fREVQVEhfR0xPQkFMX19TSElGVCAweDIKKyNkZWZpbmUgQUNQX0kyU1NQX0NPTVBfUEFSQU1fMV9fSTJTU1BfTU9ERV9FTl9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0kyU1NQX0NPTVBfUEFSQU1fMV9fSTJTU1BfTU9ERV9FTl9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzFfX0kyU1NQX1RSQU5TTUlUVEVSX0JMT0NLX01BU0sgMHgyMAorI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8xX19JMlNTUF9UUkFOU01JVFRFUl9CTE9DS19fU0hJRlQgMHg1CisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzFfX0kyU1NQX1JFQ0VJVkVSX0JMT0NLX01BU0sgMHg0MAorI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8xX19JMlNTUF9SRUNFSVZFUl9CTE9DS19fU0hJRlQgMHg2CisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzFfX0kyU1NQX1JYX0NIQU5OTEVTX01BU0sgMHgxODAKKyNkZWZpbmUgQUNQX0kyU1NQX0NPTVBfUEFSQU1fMV9fSTJTU1BfUlhfQ0hBTk5MRVNfX1NISUZUIDB4NworI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8xX19JMlNTUF9UWF9DSEFOTkxFU19NQVNLIDB4NjAwCisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzFfX0kyU1NQX1RYX0NIQU5OTEVTX19TSElGVCAweDkKKyNkZWZpbmUgQUNQX0kyU1NQX0NPTVBfUEFSQU1fMV9fSTJTU1BfVFhfV09SRFNJWkVfMF9NQVNLIDB4NzAwMDAKKyNkZWZpbmUgQUNQX0kyU1NQX0NPTVBfUEFSQU1fMV9fSTJTU1BfVFhfV09SRFNJWkVfMF9fU0hJRlQgMHgxMAorI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8xX19JMlNTUF9UWF9XT1JEU0laRV8xX01BU0sgMHgzODAwMDAKKyNkZWZpbmUgQUNQX0kyU1NQX0NPTVBfUEFSQU1fMV9fSTJTU1BfVFhfV09SRFNJWkVfMV9fU0hJRlQgMHgxMworI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8xX19JMlNTUF9UWF9XT1JEU0laRV8yX01BU0sgMHgxYzAwMDAwCisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1BBUkFNXzFfX0kyU1NQX1RYX1dPUkRTSVpFXzJfX1NISUZUIDB4MTYKKyNkZWZpbmUgQUNQX0kyU1NQX0NPTVBfUEFSQU1fMV9fSTJTU1BfVFhfV09SRFNJWkVfM19NQVNLIDB4ZTAwMDAwMAorI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9QQVJBTV8xX19JMlNTUF9UWF9XT1JEU0laRV8zX19TSElGVCAweDE5CisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1ZFUlNJT05fX0kyU1NQX0FQQl9EQVRBX1dJRFRIX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTU1BfQ09NUF9WRVJTSU9OX19JMlNTUF9BUEJfREFUQV9XSURUSF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNTUF9DT01QX1RZUEVfX0kyU1NQX0NPTVBfVFlQRV9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0kyU1NQX0NPTVBfVFlQRV9fSTJTU1BfQ09NUF9UWVBFX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lFUl9fSTJTTUlDU1BfSUVOX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JRVJfX0kyU01JQ1NQX0lFTl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JUkVSX19JMlNNSUNTUF9SWEVOX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JUkVSX19JMlNNSUNTUF9SWEVOX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lURVJfX0kyU01JQ1NQX1RYRU5fTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lURVJfX0kyU01JQ1NQX1RYRU5fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ0VSX19JMlNNSUNTUF9DTEtFTl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ0VSX19JMlNNSUNTUF9DTEtFTl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DQ1JfX0kyU01JQ1NQX1NDTEtHX01BU0sgMHg3CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DQ1JfX0kyU01JQ1NQX1NDTEtHX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NDUl9fSTJTTUlDU1BfV1NTX01BU0sgMHgxOAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ0NSX19JMlNNSUNTUF9XU1NfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfSTJTTUlDU1BfUlhGRlJfX0kyU01JQ1NQX1JYRkZSX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9SWEZGUl9fSTJTTUlDU1BfUlhGRlJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVFhGRlJfX0kyU01JQ1NQX1RYRkZSX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9UWEZGUl9fSTJTTUlDU1BfVFhGRlJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfTFJCUjBfX0kyU01JQ1NQX0xSQlIwX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfTFJCUjBfX0kyU01JQ1NQX0xSQlIwX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JSQlIwX19JMlNNSUNTUF9SUkJSMF9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JSQlIwX19JMlNNSUNTUF9SUkJSMF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9SRVIwX19JMlNNSUNTUF9SWENIRU4wX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9SRVIwX19JMlNNSUNTUF9SWENIRU4wX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1RFUjBfX0kyU01JQ1NQX1RYQ0hFTjBfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1RFUjBfX0kyU01JQ1NQX1RYQ0hFTjBfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfUkNSMF9fSTJTTUlDU1BfV0xFTl9NQVNLIDB4NworI2RlZmluZSBBQ1BfSTJTTUlDU1BfUkNSMF9fSTJTTUlDU1BfV0xFTl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9UQ1IwX19JMlNNSUNTUF9XTEVOX01BU0sgMHg3CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9UQ1IwX19JMlNNSUNTUF9XTEVOX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lTUjBfX0kyU01JQ1NQX1JYREFfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lTUjBfX0kyU01JQ1NQX1JYREFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSVNSMF9fSTJTTUlDU1BfUlhGT19NQVNLIDB4MgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSVNSMF9fSTJTTUlDU1BfUlhGT19fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JU1IwX19JMlNNSUNTUF9UWEZFX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSVNSMF9fSTJTTUlDU1BfVFhGRV9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JU1IwX19JMlNNSUNTUF9UWEZPX01BU0sgMHgyMAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSVNSMF9fSTJTTUlDU1BfVFhGT19fU0hJRlQgMHg1CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JTVIwX19JMlNNSUNTUF9SWERBTV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSU1SMF9fSTJTTUlDU1BfUlhEQU1fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSU1SMF9fSTJTTUlDU1BfUlhGT01fTUFTSyAweDIKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lNUjBfX0kyU01JQ1NQX1JYRk9NX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lNUjBfX0kyU01JQ1NQX1RYRkVNX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSU1SMF9fSTJTTUlDU1BfVFhGRU1fX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSU1SMF9fSTJTTUlDU1BfVFhGT01fTUFTSyAweDIwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JTVIwX19JMlNNSUNTUF9UWEZPTV9fU0hJRlQgMHg1CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9ST1IwX19JMlNNSUNTUF9SWENIT19NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfUk9SMF9fSTJTTUlDU1BfUlhDSE9fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVE9SMF9fSTJTTUlDU1BfVFhDSE9fTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1RPUjBfX0kyU01JQ1NQX1RYQ0hPX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JGQ1IwX19JMlNNSUNTUF9SWENIRFRfTUFTSyAweGYKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JGQ1IwX19JMlNNSUNTUF9SWENIRFRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVEZDUjBfX0kyU01JQ1NQX1RYQ0hFVF9NQVNLIDB4ZgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVEZDUjBfX0kyU01JQ1NQX1RYQ0hFVF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9SRkYwX19JMlNNSUNTUF9SWENIRlJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JGRjBfX0kyU01JQ1NQX1JYQ0hGUl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9URkYwX19JMlNNSUNTUF9UWENIRlJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1RGRjBfX0kyU01JQ1NQX1RYQ0hGUl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9MUkJSMV9fSTJTTUlDU1BfTFJCUjFfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9MUkJSMV9fSTJTTUlDU1BfTFJCUjFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfUlJCUjFfX0kyU01JQ1NQX1JSQlIxX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfUlJCUjFfX0kyU01JQ1NQX1JSQlIxX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JFUjFfX0kyU01JQ1NQX1JYQ0hFTjFfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JFUjFfX0kyU01JQ1NQX1JYQ0hFTjFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVEVSMV9fSTJTTUlDU1BfVFhDSEVOMV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVEVSMV9fSTJTTUlDU1BfVFhDSEVOMV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9SQ1IxX19JMlNNSUNTUF9XTEVOX01BU0sgMHg3CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9SQ1IxX19JMlNNSUNTUF9XTEVOX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1RDUjFfX0kyU01JQ1NQX1dMRU5fTUFTSyAweDcKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1RDUjFfX0kyU01JQ1NQX1dMRU5fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSVNSMV9fSTJTTUlDU1BfUlhEQV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSVNSMV9fSTJTTUlDU1BfUlhEQV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JU1IxX19JMlNNSUNTUF9SWEZPX01BU0sgMHgyCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JU1IxX19JMlNNSUNTUF9SWEZPX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lTUjFfX0kyU01JQ1NQX1RYRkVfTUFTSyAweDEwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JU1IxX19JMlNNSUNTUF9UWEZFX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lTUjFfX0kyU01JQ1NQX1RYRk9fTUFTSyAweDIwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JU1IxX19JMlNNSUNTUF9UWEZPX19TSElGVCAweDUKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lNUjFfX0kyU01JQ1NQX1JYREFNX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JTVIxX19JMlNNSUNTUF9SWERBTV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JTVIxX19JMlNNSUNTUF9SWEZPTV9NQVNLIDB4MgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSU1SMV9fSTJTTUlDU1BfUlhGT01fX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfSU1SMV9fSTJTTUlDU1BfVFhGRU1fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JTVIxX19JMlNNSUNTUF9UWEZFTV9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9JTVIxX19JMlNNSUNTUF9UWEZPTV9NQVNLIDB4MjAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0lNUjFfX0kyU01JQ1NQX1RYRk9NX19TSElGVCAweDUKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JPUjFfX0kyU01JQ1NQX1JYQ0hPX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9ST1IxX19JMlNNSUNTUF9SWENIT19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9UT1IxX19JMlNNSUNTUF9UWENIT19NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVE9SMV9fSTJTTUlDU1BfVFhDSE9fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfUkZDUjFfX0kyU01JQ1NQX1JYQ0hEVF9NQVNLIDB4ZgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfUkZDUjFfX0kyU01JQ1NQX1JYQ0hEVF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9URkNSMV9fSTJTTUlDU1BfVFhDSEVUX01BU0sgMHhmCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9URkNSMV9fSTJTTUlDU1BfVFhDSEVUX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JGRjFfX0kyU01JQ1NQX1JYQ0hGUl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfUkZGMV9fSTJTTUlDU1BfUlhDSEZSX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1RGRjFfX0kyU01JQ1NQX1RYQ0hGUl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVEZGMV9fSTJTTUlDU1BfVFhDSEZSX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JYRE1BX19JMlNNSUNTUF9SWERNQV9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JYRE1BX19JMlNNSUNTUF9SWERNQV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9SUlhETUFfX0kyU01JQ1NQX1JSWERNQV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfUlJYRE1BX19JMlNNSUNTUF9SUlhETUFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVFhETUFfX0kyU01JQ1NQX1RYRE1BX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfVFhETUFfX0kyU01JQ1NQX1RYRE1BX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX1JUWERNQV9fSTJTTUlDU1BfUlRYRE1BX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9SVFhETUFfX0kyU01JQ1NQX1JUWERNQV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzJfX0kyU01JQ1NQX1JYX1dQUkRTSVpFXzBfTUFTSyAweDcKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMl9fSTJTTUlDU1BfUlhfV1BSRFNJWkVfMF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzJfX0kyU01JQ1NQX1JYX1dQUkRTSVpFXzFfTUFTSyAweDM4CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzJfX0kyU01JQ1NQX1JYX1dQUkRTSVpFXzFfX1NISUZUIDB4MworI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ09NUF9QQVJBTV8yX19JMlNNSUNTUF9SWF9XUFJEU0laRV8yX01BU0sgMHgzODAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMl9fSTJTTUlDU1BfUlhfV1BSRFNJWkVfMl9fU0hJRlQgMHg3CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzJfX0kyU01JQ1NQX1JYX1dQUkRTSVpFXzNfTUFTSyAweDFjMDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMl9fSTJTTUlDU1BfUlhfV1BSRFNJWkVfM19fU0hJRlQgMHhhCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzFfX0kyU01JQ1NQX0FQQl9EQVRBX1dJRFRIX01BU0sgMHgzCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzFfX0kyU01JQ1NQX0FQQl9EQVRBX1dJRFRIX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMV9fSTJTTUlDU1BfRklGT19ERVBUSF9HTE9CQUxfTUFTSyAweGMKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMV9fSTJTTUlDU1BfRklGT19ERVBUSF9HTE9CQUxfX1NISUZUIDB4MgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ09NUF9QQVJBTV8xX19JMlNNSUNTUF9NT0RFX0VOX01BU0sgMHgxMAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ09NUF9QQVJBTV8xX19JMlNNSUNTUF9NT0RFX0VOX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMV9fSTJTTUlDU1BfVFJBTlNNSVRURVJfQkxPQ0tfTUFTSyAweDIwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzFfX0kyU01JQ1NQX1RSQU5TTUlUVEVSX0JMT0NLX19TSElGVCAweDUKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMV9fSTJTTUlDU1BfUkVDRUlWRVJfQkxPQ0tfTUFTSyAweDQwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzFfX0kyU01JQ1NQX1JFQ0VJVkVSX0JMT0NLX19TSElGVCAweDYKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMV9fSTJTTUlDU1BfUlhfQ0hBTk5MRVNfTUFTSyAweDE4MAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ09NUF9QQVJBTV8xX19JMlNNSUNTUF9SWF9DSEFOTkxFU19fU0hJRlQgMHg3CisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzFfX0kyU01JQ1NQX1RYX0NIQU5OTEVTX01BU0sgMHg2MDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMV9fSTJTTUlDU1BfVFhfQ0hBTk5MRVNfX1NISUZUIDB4OQorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ09NUF9QQVJBTV8xX19JMlNNSUNTUF9UWF9XT1JEU0laRV8wX01BU0sgMHg3MDAwMAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ09NUF9QQVJBTV8xX19JMlNNSUNTUF9UWF9XT1JEU0laRV8wX19TSElGVCAweDEwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzFfX0kyU01JQ1NQX1RYX1dPUkRTSVpFXzFfTUFTSyAweDM4MDAwMAorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ09NUF9QQVJBTV8xX19JMlNNSUNTUF9UWF9XT1JEU0laRV8xX19TSElGVCAweDEzCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzFfX0kyU01JQ1NQX1RYX1dPUkRTSVpFXzJfTUFTSyAweDFjMDAwMDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfUEFSQU1fMV9fSTJTTUlDU1BfVFhfV09SRFNJWkVfMl9fU0hJRlQgMHgxNgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ09NUF9QQVJBTV8xX19JMlNNSUNTUF9UWF9XT1JEU0laRV8zX01BU0sgMHhlMDAwMDAwCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1BBUkFNXzFfX0kyU01JQ1NQX1RYX1dPUkRTSVpFXzNfX1NISUZUIDB4MTkKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfVkVSU0lPTl9fSTJTTUlDU1BfQVBCX0RBVEFfV0lEVEhfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNNSUNTUF9DT01QX1ZFUlNJT05fX0kyU01JQ1NQX0FQQl9EQVRBX1dJRFRIX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU01JQ1NQX0NPTVBfVFlQRV9fSTJTTUlDU1BfQ09NUF9UWVBFX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTTUlDU1BfQ09NUF9UWVBFX19JMlNNSUNTUF9DT01QX1RZUEVfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfSUVSX19JMlNCVF9JRU5fTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU0JUX0lFUl9fSTJTQlRfSUVOX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX0lSRVJfX0kyU0JUX1JYRU5fTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU0JUX0lSRVJfX0kyU0JUX1JYRU5fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfSVRFUl9fSTJTQlRfVFhFTl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTQlRfSVRFUl9fSTJTQlRfVFhFTl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9DRVJfX0kyU0JUX0NMS0VOX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9DRVJfX0kyU0JUX0NMS0VOX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX0NDUl9fSTJTQlRfU0NMS0dfTUFTSyAweDcKKyNkZWZpbmUgQUNQX0kyU0JUX0NDUl9fSTJTQlRfU0NMS0dfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfQ0NSX19JMlNCVF9XU1NfTUFTSyAweDE4CisjZGVmaW5lIEFDUF9JMlNCVF9DQ1JfX0kyU0JUX1dTU19fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9JMlNCVF9SWEZGUl9fSTJTQlRfUlhGRlJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU0JUX1JYRkZSX19JMlNCVF9SWEZGUl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9UWEZGUl9fSTJTQlRfVFhGRlJfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU0JUX1RYRkZSX19JMlNCVF9UWEZGUl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9MUkJSMF9fSTJTQlRfTFJCUjBfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNCVF9MUkJSMF9fSTJTQlRfTFJCUjBfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfUlJCUjBfX0kyU0JUX1JSQlIwX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTQlRfUlJCUjBfX0kyU0JUX1JSQlIwX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX1JFUjBfX0kyU0JUX1JYQ0hFTjBfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU0JUX1JFUjBfX0kyU0JUX1JYQ0hFTjBfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfVEVSMF9fSTJTQlRfVFhDSEVOMF9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTQlRfVEVSMF9fSTJTQlRfVFhDSEVOMF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9SQ1IwX19JMlNCVF9XTEVOX01BU0sgMHg3CisjZGVmaW5lIEFDUF9JMlNCVF9SQ1IwX19JMlNCVF9XTEVOX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX1RDUjBfX0kyU0JUX1dMRU5fTUFTSyAweDcKKyNkZWZpbmUgQUNQX0kyU0JUX1RDUjBfX0kyU0JUX1dMRU5fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfSVNSMF9fSTJTQlRfUlhEQV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTQlRfSVNSMF9fSTJTQlRfUlhEQV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9JU1IwX19JMlNCVF9SWEZPX01BU0sgMHgyCisjZGVmaW5lIEFDUF9JMlNCVF9JU1IwX19JMlNCVF9SWEZPX19TSElGVCAweDEKKyNkZWZpbmUgQUNQX0kyU0JUX0lTUjBfX0kyU0JUX1RYRkVfTUFTSyAweDEwCisjZGVmaW5lIEFDUF9JMlNCVF9JU1IwX19JMlNCVF9UWEZFX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0kyU0JUX0lTUjBfX0kyU0JUX1RYRk9fTUFTSyAweDIwCisjZGVmaW5lIEFDUF9JMlNCVF9JU1IwX19JMlNCVF9UWEZPX19TSElGVCAweDUKKyNkZWZpbmUgQUNQX0kyU0JUX0lNUjBfX0kyU0JUX1JYREFNX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9JTVIwX19JMlNCVF9SWERBTV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9JTVIwX19JMlNCVF9SWEZPTV9NQVNLIDB4MgorI2RlZmluZSBBQ1BfSTJTQlRfSU1SMF9fSTJTQlRfUlhGT01fX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfSTJTQlRfSU1SMF9fSTJTQlRfVFhGRU1fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9JMlNCVF9JTVIwX19JMlNCVF9UWEZFTV9fU0hJRlQgMHg0CisjZGVmaW5lIEFDUF9JMlNCVF9JTVIwX19JMlNCVF9UWEZPTV9NQVNLIDB4MjAKKyNkZWZpbmUgQUNQX0kyU0JUX0lNUjBfX0kyU0JUX1RYRk9NX19TSElGVCAweDUKKyNkZWZpbmUgQUNQX0kyU0JUX1JPUjBfX0kyU0JUX1JYQ0hPX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9ST1IwX19JMlNCVF9SWENIT19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9UT1IwX19JMlNCVF9UWENIT19NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTQlRfVE9SMF9fSTJTQlRfVFhDSE9fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfUkZDUjBfX0kyU0JUX1JYQ0hEVF9NQVNLIDB4ZgorI2RlZmluZSBBQ1BfSTJTQlRfUkZDUjBfX0kyU0JUX1JYQ0hEVF9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9URkNSMF9fSTJTQlRfVFhDSEVUX01BU0sgMHhmCisjZGVmaW5lIEFDUF9JMlNCVF9URkNSMF9fSTJTQlRfVFhDSEVUX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX1JGRjBfX0kyU0JUX1JYQ0hGUl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTQlRfUkZGMF9fSTJTQlRfUlhDSEZSX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX1RGRjBfX0kyU0JUX1RYQ0hGUl9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTQlRfVEZGMF9fSTJTQlRfVFhDSEZSX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX0xSQlIxX19JMlNCVF9MUkJSMV9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0kyU0JUX0xSQlIxX19JMlNCVF9MUkJSMV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9SUkJSMV9fSTJTQlRfUlJCUjFfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNCVF9SUkJSMV9fSTJTQlRfUlJCUjFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfUkVSMV9fSTJTQlRfUlhDSEVOMV9NQVNLIDB4MQorI2RlZmluZSBBQ1BfSTJTQlRfUkVSMV9fSTJTQlRfUlhDSEVOMV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9URVIxX19JMlNCVF9UWENIRU4xX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9URVIxX19JMlNCVF9UWENIRU4xX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX1JDUjFfX0kyU0JUX1dMRU5fTUFTSyAweDcKKyNkZWZpbmUgQUNQX0kyU0JUX1JDUjFfX0kyU0JUX1dMRU5fX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfVENSMV9fSTJTQlRfV0xFTl9NQVNLIDB4NworI2RlZmluZSBBQ1BfSTJTQlRfVENSMV9fSTJTQlRfV0xFTl9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9JU1IxX19JMlNCVF9SWERBX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9JU1IxX19JMlNCVF9SWERBX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX0lTUjFfX0kyU0JUX1JYRk9fTUFTSyAweDIKKyNkZWZpbmUgQUNQX0kyU0JUX0lTUjFfX0kyU0JUX1JYRk9fX1NISUZUIDB4MQorI2RlZmluZSBBQ1BfSTJTQlRfSVNSMV9fSTJTQlRfVFhGRV9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0kyU0JUX0lTUjFfX0kyU0JUX1RYRkVfX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfSTJTQlRfSVNSMV9fSTJTQlRfVFhGT19NQVNLIDB4MjAKKyNkZWZpbmUgQUNQX0kyU0JUX0lTUjFfX0kyU0JUX1RYRk9fX1NISUZUIDB4NQorI2RlZmluZSBBQ1BfSTJTQlRfSU1SMV9fSTJTQlRfUlhEQU1fTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU0JUX0lNUjFfX0kyU0JUX1JYREFNX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX0lNUjFfX0kyU0JUX1JYRk9NX01BU0sgMHgyCisjZGVmaW5lIEFDUF9JMlNCVF9JTVIxX19JMlNCVF9SWEZPTV9fU0hJRlQgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9JTVIxX19JMlNCVF9UWEZFTV9NQVNLIDB4MTAKKyNkZWZpbmUgQUNQX0kyU0JUX0lNUjFfX0kyU0JUX1RYRkVNX19TSElGVCAweDQKKyNkZWZpbmUgQUNQX0kyU0JUX0lNUjFfX0kyU0JUX1RYRk9NX01BU0sgMHgyMAorI2RlZmluZSBBQ1BfSTJTQlRfSU1SMV9fSTJTQlRfVFhGT01fX1NISUZUIDB4NQorI2RlZmluZSBBQ1BfSTJTQlRfUk9SMV9fSTJTQlRfUlhDSE9fTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU0JUX1JPUjFfX0kyU0JUX1JYQ0hPX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX1RPUjFfX0kyU0JUX1RYQ0hPX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9UT1IxX19JMlNCVF9UWENIT19fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9SRkNSMV9fSTJTQlRfUlhDSERUX01BU0sgMHhmCisjZGVmaW5lIEFDUF9JMlNCVF9SRkNSMV9fSTJTQlRfUlhDSERUX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX1RGQ1IxX19JMlNCVF9UWENIRVRfTUFTSyAweGYKKyNkZWZpbmUgQUNQX0kyU0JUX1RGQ1IxX19JMlNCVF9UWENIRVRfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfUkZGMV9fSTJTQlRfUlhDSEZSX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9SRkYxX19JMlNCVF9SWENIRlJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfVEZGMV9fSTJTQlRfVFhDSEZSX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9URkYxX19JMlNCVF9UWENIRlJfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfUlhETUFfX0kyU0JUX1JYRE1BX01BU0sgMHhmZmZmZmZmZgorI2RlZmluZSBBQ1BfSTJTQlRfUlhETUFfX0kyU0JUX1JYRE1BX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX1JSWERNQV9fSTJTQlRfUlJYRE1BX01BU0sgMHgxCisjZGVmaW5lIEFDUF9JMlNCVF9SUlhETUFfX0kyU0JUX1JSWERNQV9fU0hJRlQgMHgwCisjZGVmaW5lIEFDUF9JMlNCVF9UWERNQV9fSTJTQlRfVFhETUFfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNCVF9UWERNQV9fSTJTQlRfVFhETUFfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfUlRYRE1BX19JMlNCVF9SVFhETUFfTUFTSyAweDEKKyNkZWZpbmUgQUNQX0kyU0JUX1JUWERNQV9fSTJTQlRfUlRYRE1BX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMl9fSTJTQlRfUlhfV1BSRFNJWkVfMF9NQVNLIDB4NworI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8yX19JMlNCVF9SWF9XUFJEU0laRV8wX19TSElGVCAweDAKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMl9fSTJTQlRfUlhfV1BSRFNJWkVfMV9NQVNLIDB4MzgKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMl9fSTJTQlRfUlhfV1BSRFNJWkVfMV9fU0hJRlQgMHgzCisjZGVmaW5lIEFDUF9JMlNCVF9DT01QX1BBUkFNXzJfX0kyU0JUX1JYX1dQUkRTSVpFXzJfTUFTSyAweDM4MAorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8yX19JMlNCVF9SWF9XUFJEU0laRV8yX19TSElGVCAweDcKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMl9fSTJTQlRfUlhfV1BSRFNJWkVfM19NQVNLIDB4MWMwMAorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8yX19JMlNCVF9SWF9XUFJEU0laRV8zX19TSElGVCAweGEKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMV9fSTJTQlRfQVBCX0RBVEFfV0lEVEhfTUFTSyAweDMKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMV9fSTJTQlRfQVBCX0RBVEFfV0lEVEhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8xX19JMlNCVF9GSUZPX0RFUFRIX0dMT0JBTF9NQVNLIDB4YworI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8xX19JMlNCVF9GSUZPX0RFUFRIX0dMT0JBTF9fU0hJRlQgMHgyCisjZGVmaW5lIEFDUF9JMlNCVF9DT01QX1BBUkFNXzFfX0kyU0JUX01PREVfRU5fTUFTSyAweDEwCisjZGVmaW5lIEFDUF9JMlNCVF9DT01QX1BBUkFNXzFfX0kyU0JUX01PREVfRU5fX1NISUZUIDB4NAorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8xX19JMlNCVF9UUkFOU01JVFRFUl9CTE9DS19NQVNLIDB4MjAKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMV9fSTJTQlRfVFJBTlNNSVRURVJfQkxPQ0tfX1NISUZUIDB4NQorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8xX19JMlNCVF9SRUNFSVZFUl9CTE9DS19NQVNLIDB4NDAKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMV9fSTJTQlRfUkVDRUlWRVJfQkxPQ0tfX1NISUZUIDB4NgorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8xX19JMlNCVF9SWF9DSEFOTkxFU19NQVNLIDB4MTgwCisjZGVmaW5lIEFDUF9JMlNCVF9DT01QX1BBUkFNXzFfX0kyU0JUX1JYX0NIQU5OTEVTX19TSElGVCAweDcKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMV9fSTJTQlRfVFhfQ0hBTk5MRVNfTUFTSyAweDYwMAorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8xX19JMlNCVF9UWF9DSEFOTkxFU19fU0hJRlQgMHg5CisjZGVmaW5lIEFDUF9JMlNCVF9DT01QX1BBUkFNXzFfX0kyU0JUX1RYX1dPUkRTSVpFXzBfTUFTSyAweDcwMDAwCisjZGVmaW5lIEFDUF9JMlNCVF9DT01QX1BBUkFNXzFfX0kyU0JUX1RYX1dPUkRTSVpFXzBfX1NISUZUIDB4MTAKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMV9fSTJTQlRfVFhfV09SRFNJWkVfMV9NQVNLIDB4MzgwMDAwCisjZGVmaW5lIEFDUF9JMlNCVF9DT01QX1BBUkFNXzFfX0kyU0JUX1RYX1dPUkRTSVpFXzFfX1NISUZUIDB4MTMKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMV9fSTJTQlRfVFhfV09SRFNJWkVfMl9NQVNLIDB4MWMwMDAwMAorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9QQVJBTV8xX19JMlNCVF9UWF9XT1JEU0laRV8yX19TSElGVCAweDE2CisjZGVmaW5lIEFDUF9JMlNCVF9DT01QX1BBUkFNXzFfX0kyU0JUX1RYX1dPUkRTSVpFXzNfTUFTSyAweGUwMDAwMDAKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfUEFSQU1fMV9fSTJTQlRfVFhfV09SRFNJWkVfM19fU0hJRlQgMHgxOQorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9WRVJTSU9OX19JMlNCVF9BUEJfREFUQV9XSURUSF9NQVNLIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQUNQX0kyU0JUX0NPTVBfVkVSU0lPTl9fSTJTQlRfQVBCX0RBVEFfV0lEVEhfX1NISUZUIDB4MAorI2RlZmluZSBBQ1BfSTJTQlRfQ09NUF9UWVBFX19JMlNCVF9DT01QX1RZUEVfTUFTSyAweGZmZmZmZmZmCisjZGVmaW5lIEFDUF9JMlNCVF9DT01QX1RZUEVfX0kyU0JUX0NPTVBfVFlQRV9fU0hJRlQgMHgwCisKKyNlbmRpZiAvKiBBQ1BfMl8yX1NIX01BU0tfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL0tjb25maWcgYi9zb3VuZC9zb2MvYXRtZWwvS2NvbmZpZwppbmRleCAyZDMwNDY0Li4wNmUwOTllIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvYXRtZWwvS2NvbmZpZwpAQCAtNjgsNCArNjgsMTMgQEAKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgQXRtZWwgQVNvQyBkcml2ZXIgZm9yIGJvYXJkcyB1c2luZwogCSAgQ0xBU1NELgorCitjb25maWcgU05EX0FUTUVMX1NPQ19QRE1JQworCXRyaXN0YXRlICJBdG1lbCBBU29DIGRyaXZlciBmb3IgYm9hcmRzIHVzaW5nIFBETUlDIgorCWRlcGVuZHMgb24gT0YgJiYgKEFSQ0hfQVQ5MSB8fCBDT01QSUxFX1RFU1QpCisJc2VsZWN0IFNORF9TT0NfR0VORVJJQ19ETUFFTkdJTkVfUENNCisJc2VsZWN0IFJFR01BUF9NTUlPCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIEF0bWVsIEFTb0MgZHJpdmVyIGZvciBib2FyZHMgdXNpbmcKKwkgIFBETUlDLgogZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9hdG1lbC9NYWtlZmlsZQppbmRleCBmNmY3ZGI0Li5hMmIxMjdiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2F0bWVsL01ha2VmaWxlCkBAIC0xMiw4ICsxMiwxMCBAQAogc25kLWF0bWVsLXNvYy13bTg5MDQtb2JqcyA6PSBhdG1lbF93bTg5MDQubwogc25kLXNvYy1zYW05eDUtd204NzMxLW9ianMgOj0gc2FtOXg1X3dtODczMS5vCiBzbmQtYXRtZWwtc29jLWNsYXNzZC1vYmpzIDo9IGF0bWVsLWNsYXNzZC5vCitzbmQtYXRtZWwtc29jLXBkbWljLW9ianMgOj0gYXRtZWwtcGRtaWMubwogCiBvYmotJChDT05GSUdfU05EX0FUOTFfU09DX1NBTTlHMjBfV004NzMxKSArPSBzbmQtc29jLXNhbTlnMjAtd204NzMxLm8KIG9iai0kKENPTkZJR19TTkRfQVRNRUxfU09DX1dNODkwNCkgKz0gc25kLWF0bWVsLXNvYy13bTg5MDQubwogb2JqLSQoQ09ORklHX1NORF9BVDkxX1NPQ19TQU05WDVfV004NzMxKSArPSBzbmQtc29jLXNhbTl4NS13bTg3MzEubwogb2JqLSQoQ09ORklHX1NORF9BVE1FTF9TT0NfQ0xBU1NEKSArPSBzbmQtYXRtZWwtc29jLWNsYXNzZC5vCitvYmotJChDT05GSUdfU05EX0FUTUVMX1NPQ19QRE1JQykgKz0gc25kLWF0bWVsLXNvYy1wZG1pYy5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtY2xhc3NkLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtY2xhc3NkLmMKaW5kZXggODI3NjY3NS4uNjEwN2RlOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsLWNsYXNzZC5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1jbGFzc2QuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJLnJhdGVzCQkJPSBBVE1FTF9DTEFTU0RfUkFURVMsCiAJLnJhdGVfbWluCQk9IDgwMDAsCiAJLnJhdGVfbWF4CQk9IDk2MDAwLAotCS5jaGFubmVsc19taW4JCT0gMiwKKwkuY2hhbm5lbHNfbWluCQk9IDEsCiAJLmNoYW5uZWxzX21heAkJPSAyLAogCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQgKiAxMDI0LAogCS5wZXJpb2RfYnl0ZXNfbWluCT0gMjU2LApAQCAtMTQ1LDcgKzE0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGF0bWVsX2NsYXNzZF9jcHVfZGFpID0gewogCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbgk9IDIsCisJCS5jaGFubmVsc19taW4JPSAxLAogCQkuY2hhbm5lbHNfbWF4CT0gMiwKIAkJLnJhdGVzCQk9IEFUTUVMX0NMQVNTRF9SQVRFUywKIAkJLmZvcm1hdHMJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LApAQCAtMTcxLDkgKzE3MSwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAocGFyYW1zX2NoYW5uZWxzKHBhcmFtcykgPT0gMSkKKwkJc2xhdmVfY29uZmlnLT5kc3RfYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOworCWVsc2UKKwkJc2xhdmVfY29uZmlnLT5kc3RfYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOworCiAJc2xhdmVfY29uZmlnLT5kaXJlY3Rpb24JCT0gRE1BX01FTV9UT19ERVY7CiAJc2xhdmVfY29uZmlnLT5kc3RfYWRkcgkJPSBkZC0+cGh5X2Jhc2UgKyBDTEFTU0RfVEhSOwotCXNsYXZlX2NvbmZpZy0+ZHN0X2FkZHJfd2lkdGgJPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKIAlzbGF2ZV9jb25maWctPmRzdF9tYXhidXJzdAk9IDE7CiAJc2xhdmVfY29uZmlnLT5zcmNfbWF4YnVyc3QJPSAxOwogCXNsYXZlX2NvbmZpZy0+ZGV2aWNlX2ZjCQk9IGZhbHNlOwpAQCAtNDg2LDcgKzQ5MCw3IEBACiAJLm5hbWUgPSBBVE1FTF9DTEFTU0RfQ09ERUNfREFJX05BTUUsCiAJLnBsYXliYWNrID0gewogCQkuc3RyZWFtX25hbWUJPSAiUGxheWJhY2siLAotCQkuY2hhbm5lbHNfbWluCT0gMiwKKwkJLmNoYW5uZWxzX21pbgk9IDEsCiAJCS5jaGFubmVsc19tYXgJPSAyLAogCQkucmF0ZXMJCT0gQVRNRUxfQ0xBU1NEX1JBVEVTLAogCQkuZm9ybWF0cwk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLApAQCAtNjM2LDggKzY0MCwxMCBAQAogCiAJLyogcmVnaXN0ZXIgc291bmQgY2FyZCAqLwogCWNhcmQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNhcmQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghY2FyZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHVucmVnaXN0ZXJfY29kZWM7CisJfQogCiAJc25kX3NvY19jYXJkX3NldF9kcnZkYXRhKGNhcmQsIGRkKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKQEAgLTY0NSwxNiArNjUxLDIwIEBACiAJcmV0ID0gYXRtZWxfY2xhc3NkX2Fzb2NfY2FyZF9pbml0KGRldiwgY2FyZCk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHNvdW5kIGNhcmRcbiIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIHVucmVnaXN0ZXJfY29kZWM7CiAJfQogCiAJcmV0ID0gZGV2bV9zbmRfc29jX3JlZ2lzdGVyX2NhcmQoZGV2LCBjYXJkKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHNvdW5kIGNhcmQ6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIHVucmVnaXN0ZXJfY29kZWM7CiAJfQogCiAJcmV0dXJuIDA7CisKK3VucmVnaXN0ZXJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGRldik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdG1lbF9jbGFzc2RfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGRtaWMuYyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wZG1pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTQ3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGRtaWMuYwpAQCAtMCwwICsxLDczOCBAQAorLyogQXRtZWwgUERNSUMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEF0bWVsCisgKgorICogQXV0aG9yOiBTb25nanVuIFd1IDxzb25nanVuLnd1QGF0bWVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgb3IgbGF0ZXIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9kbWFlbmdpbmVfcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgImF0bWVsLXBkbWljLmgiCisKK3N0cnVjdCBhdG1lbF9wZG1pY19wZGF0YSB7CisJdTMyIG1pY19taW5fZnJlcTsKKwl1MzIgbWljX21heF9mcmVxOworCXMzMiBtaWNfb2Zmc2V0OworCWNvbnN0IGNoYXIgKmNhcmRfbmFtZTsKK307CisKK3N0cnVjdCBhdG1lbF9wZG1pYyB7CisJZG1hX2FkZHJfdCBwaHlfYmFzZTsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IGNsayAqcGNsazsKKwlzdHJ1Y3QgY2xrICpnY2xrOworCWludCBpcnE7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJY29uc3Qgc3RydWN0IGF0bWVsX3BkbWljX3BkYXRhICpwZGF0YTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0bWVsX3BkbWljX29mX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJhdG1lbCxzYW1hNWQyLXBkbWljIiwKKwl9LCB7CisJCS8qIHNlbnRpbmVsICovCisJfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0bWVsX3BkbWljX29mX21hdGNoKTsKKworI2RlZmluZSBQRE1JQ19PRkZTRVRfTUFYX1ZBTAlTMTZfTUFYCisjZGVmaW5lIFBETUlDX09GRlNFVF9NSU5fVkFMCVMxNl9NSU4KKworc3RhdGljIHN0cnVjdCBhdG1lbF9wZG1pY19wZGF0YSAqYXRtZWxfcGRtaWNfZHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgYXRtZWxfcGRtaWNfcGRhdGEgKnBkYXRhOworCisJaWYgKCFucCkgeworCQlkZXZfZXJyKGRldiwgImRldmljZSBub2RlIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXBkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiYXRtZWwsbW9kZWwiLCAmcGRhdGEtPmNhcmRfbmFtZSkpCisJCXBkYXRhLT5jYXJkX25hbWUgPSAiUERNSUMiOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYXRtZWwsbWljLW1pbi1mcmVxIiwKKwkJCQkgJnBkYXRhLT5taWNfbWluX2ZyZXEpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtaWMtbWluLWZyZXFcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhdG1lbCxtaWMtbWF4LWZyZXEiLAorCQkJCSAmcGRhdGEtPm1pY19tYXhfZnJlcSkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG1pYy1tYXgtZnJlcVxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWlmIChwZGF0YS0+bWljX21heF9mcmVxIDwgcGRhdGEtPm1pY19taW5fZnJlcSkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJtaWMtbWF4LWZyZXEgc2hvdWxkIG5vdCBsZXNzIHRoYW4gbWljLW1pbi1mcmVxXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfczMyKG5wLCAiYXRtZWwsbWljLW9mZnNldCIsICZwZGF0YS0+bWljX29mZnNldCkpCisJCXBkYXRhLT5taWNfb2Zmc2V0ID0gMDsKKworCWlmIChwZGF0YS0+bWljX29mZnNldCA+IFBETUlDX09GRlNFVF9NQVhfVkFMKSB7CisJCWRldl93YXJuKGRldiwKKwkJCSAibWljLW9mZnNldCB2YWx1ZSAlZCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4IHZhbHVlICVkLCB0aGUgbWF4IHZhbHVlIGlzIHNwZWNpZmllZFxuIiwKKwkJCSBwZGF0YS0+bWljX29mZnNldCwgUERNSUNfT0ZGU0VUX01BWF9WQUwpOworCQlwZGF0YS0+bWljX29mZnNldCA9IFBETUlDX09GRlNFVF9NQVhfVkFMOworCX0gZWxzZSBpZiAocGRhdGEtPm1pY19vZmZzZXQgPCBQRE1JQ19PRkZTRVRfTUlOX1ZBTCkgeworCQlkZXZfd2FybihkZXYsCisJCQkgIm1pYy1vZmZzZXQgdmFsdWUgJWQgaXMgbGVzcyB0aGFuIHRoZSBtaW4gdmFsdWUgJWQsIHRoZSBtaW4gdmFsdWUgaXMgc3BlY2lmaWVkXG4iLAorCQkJIHBkYXRhLT5taWNfb2Zmc2V0LCBQRE1JQ19PRkZTRVRfTUlOX1ZBTCk7CisJCXBkYXRhLT5taWNfb2Zmc2V0ID0gUERNSUNfT0ZGU0VUX01JTl9WQUw7CisJfQorCisJcmV0dXJuIHBkYXRhOworfQorCisvKiBjcHUgZGFpIGNvbXBvbmVudCAqLworc3RhdGljIGludCBhdG1lbF9wZG1pY19jcHVfZGFpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0bWVsX3BkbWljICpkZCA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShydGQtPmNhcmQpOworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGQtPmdjbGspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSAgY2xrX3ByZXBhcmVfZW5hYmxlKGRkLT5wY2xrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogQ2xlYXIgYWxsIGJpdHMgaW4gdGhlIENvbnRyb2wgUmVnaXN0ZXIoUERNSUNfQ1IpICovCisJcmVnbWFwX3dyaXRlKGRkLT5yZWdtYXAsIFBETUlDX0NSLCAwKTsKKworCWRkLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisKKwkvKiBFbmFibGUgdGhlIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0ICovCisJcmVnbWFwX3dyaXRlKGRkLT5yZWdtYXAsIFBETUlDX0lFUiwgUERNSUNfSUVSX09WUkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX3BkbWljX2NwdV9kYWlfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0bWVsX3BkbWljICpkZCA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShydGQtPmNhcmQpOworCisJLyogRGlzYWJsZSB0aGUgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgKi8KKwlyZWdtYXBfd3JpdGUoZGQtPnJlZ21hcCwgUERNSUNfSURSLCBQRE1JQ19JRFJfT1ZSRSk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGQtPmdjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkZC0+cGNsayk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfcGRtaWNfY3B1X2RhaV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdG1lbF9wZG1pYyAqZGQgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEocnRkLT5jYXJkKTsKKwl1MzIgdmFsOworCisJLyogQ2xlYW4gdGhlIFBETUlDIENvbnZlcnRlZCBEYXRhIFJlZ2lzdGVyICovCisJcmV0dXJuIHJlZ21hcF9yZWFkKGRkLT5yZWdtYXAsIFBETUlDX0NEUiwgJnZhbCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGF0bWVsX3BkbWljX2NwdV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gYXRtZWxfcGRtaWNfY3B1X2RhaV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IGF0bWVsX3BkbWljX2NwdV9kYWlfc2h1dGRvd24sCisJLnByZXBhcmUJPSBhdG1lbF9wZG1pY19jcHVfZGFpX3ByZXBhcmUsCit9OworCisjZGVmaW5lIEFUTUVMX1BETUlDX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGF0bWVsX3BkbWljX2NwdV9kYWkgPSB7CisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4JPSAxLAorCQkuY2hhbm5lbHNfbWF4CT0gMSwKKwkJLnJhdGVzCQk9IFNORFJWX1BDTV9SQVRFX0tOT1QsCisJCS5mb3JtYXRzCT0gQVRNRUxfUERNSUNfRk9STUFUUyx9LAorCS5vcHMgPSAmYXRtZWxfcGRtaWNfY3B1X2RhaV9vcHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciBhdG1lbF9wZG1pY19jcHVfZGFpX2NvbXBvbmVudCA9IHsKKwkubmFtZSA9ICJhdG1lbC1wZG1pYyIsCit9OworCisvKiBwbGF0Zm9ybSAqLworI2RlZmluZSBBVE1FTF9QRE1JQ19NQVhfQlVGX1NJWkUgICg2NCAqIDEwMjQpCisjZGVmaW5lIEFUTUVMX1BETUlDX1BSRUFMTE9DX0JVRl9TSVpFICBBVE1FTF9QRE1JQ19NQVhfQlVGX1NJWkUKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGF0bWVsX3BkbWljX2h3ID0geworCS5pbmZvCQkJPSBTTkRSVl9QQ01fSU5GT19NTUFQCisJCQkJfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElECisJCQkJfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRAorCQkJCXwgU05EUlZfUENNX0lORk9fUkVTVU1FCisJCQkJfCBTTkRSVl9QQ01fSU5GT19QQVVTRSwKKwkuZm9ybWF0cwkJPSBBVE1FTF9QRE1JQ19GT1JNQVRTLAorCS5idWZmZXJfYnl0ZXNfbWF4CT0gQVRNRUxfUERNSUNfTUFYX0JVRl9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gMjU2LAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gMzIgKiAxMDI0LAorCS5wZXJpb2RzX21pbgkJPSAyLAorCS5wZXJpb2RzX21heAkJPSAyNTYsCit9OworCitzdGF0aWMgaW50CithdG1lbF9wZG1pY19wbGF0Zm9ybV9jb25maWd1cmVfZG1hKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpzbGF2ZV9jb25maWcpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdG1lbF9wZG1pYyAqZGQgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEocnRkLT5jYXJkKTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX2h3cGFyYW1zX3RvX2RtYV9zbGF2ZV9jb25maWcoc3Vic3RyZWFtLCBwYXJhbXMsCisJCQkJCSAgICAgICBzbGF2ZV9jb25maWcpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihydGQtPnBsYXRmb3JtLT5kZXYsCisJCQkiaHcgcGFyYW1zIHRvIGRtYSBzbGF2ZSBjb25maWd1cmUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzbGF2ZV9jb25maWctPnNyY19hZGRyCQk9IGRkLT5waHlfYmFzZSArIFBETUlDX0NEUjsKKwlzbGF2ZV9jb25maWctPnNyY19tYXhidXJzdAk9IDE7CisJc2xhdmVfY29uZmlnLT5kc3RfbWF4YnVyc3QJPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9wY21fY29uZmlnCithdG1lbF9wZG1pY19kbWFlbmdpbmVfcGNtX2NvbmZpZyA9IHsKKwkucHJlcGFyZV9zbGF2ZV9jb25maWcJPSBhdG1lbF9wZG1pY19wbGF0Zm9ybV9jb25maWd1cmVfZG1hLAorCS5wY21faGFyZHdhcmUJCT0gJmF0bWVsX3BkbWljX2h3LAorCS5wcmVhbGxvY19idWZmZXJfc2l6ZQk9IEFUTUVMX1BETUlDX1BSRUFMTE9DX0JVRl9TSVpFLAorfTsKKworLyogY29kZWMgKi8KKy8qIE1pYyBHYWluID0gZGdhaW4gKiAyXigtc2NhbGUpICovCitzdHJ1Y3QgbWljX2dhaW4geworCXVuc2lnbmVkIGludCBkZ2FpbjsKKwl1bnNpZ25lZCBpbnQgc2NhbGU7Cit9OworCisvKiByYW5nZSBmcm9tIC05MCBkQiB0byA5MCBkQiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBtaWNfZ2FpbiBtaWNfZ2Fpbl90YWJsZVtdID0geworeyAgICAxLCAxNX0sIHsgICAgMSwgMTR9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC05MCwgLTg0IGRCICovCit7ICAgIDMsIDE1fSwgeyAgICAxLCAxM30sIHsgICAgMywgMTR9LCB7ICAgIDEsIDEyfSwgLyogLTgxLCAtNzgsIC03NSwgLTcyIGRCICovCit7ICAgIDUsIDE0fSwgeyAgIDEzLCAxNX0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLTcwLCAtNjggZEIgKi8KK3sgICAgOSwgMTR9LCB7ICAgMjEsIDE1fSwgeyAgIDIzLCAxNX0sIHsgICAxMywgMTR9LCAvKiAtNjUgfiAtNjIgZEIgKi8KK3sgICAyOSwgMTV9LCB7ICAgMzMsIDE1fSwgeyAgIDM3LCAxNX0sIHsgICA0MSwgMTV9LCAvKiAtNjEgfiAtNTggZEIgKi8KK3sgICAyMywgMTR9LCB7ICAgMTMsIDEzfSwgeyAgIDU4LCAxNX0sIHsgICA2NSwgMTV9LCAvKiAtNTcgfiAtNTQgZEIgKi8KK3sgICA3MywgMTV9LCB7ICAgNDEsIDE0fSwgeyAgIDIzLCAxM30sIHsgICAxMywgMTJ9LCAvKiAtNTMgfiAtNTAgZEIgKi8KK3sgICAyOSwgMTN9LCB7ICAgNjUsIDE0fSwgeyAgIDczLCAxNH0sIHsgICA0MSwgMTN9LCAvKiAtNDkgfiAtNDYgZEIgKi8KK3sgICAyMywgMTJ9LCB7ICAyMDcsIDE1fSwgeyAgIDI5LCAxMn0sIHsgICA2NSwgMTN9LCAvKiAtNDUgfiAtNDIgZEIgKi8KK3sgICA3MywgMTN9LCB7ICAgNDEsIDEyfSwgeyAgIDIzLCAxMX0sIHsgIDQxMywgMTV9LCAvKiAtNDEgfiAtMzggZEIgKi8KK3sgIDQ2MywgMTV9LCB7ICA1MTksIDE1fSwgeyAgNTgzLCAxNX0sIHsgIDMyNywgMTR9LCAvKiAtMzcgfiAtMzQgZEIgKi8KK3sgIDM2NywgMTR9LCB7ICA4MjMsIDE1fSwgeyAgMjMxLCAxM30sIHsgMTAzNiwgMTV9LCAvKiAtMzMgfiAtMzAgZEIgKi8KK3sgMTE2MywgMTV9LCB7IDEzMDUsIDE1fSwgeyAgMTgzLCAxMn0sIHsgMTY0MiwgMTV9LCAvKiAtMjkgfiAtMjYgZEIgKi8KK3sgMTg0MywgMTV9LCB7IDIwNjgsIDE1fSwgeyAgMTQ1LCAxMX0sIHsgMjYwMywgMTV9LCAvKiAtMjUgfiAtMjIgZEIgKi8KK3sgIDM2NSwgMTJ9LCB7IDMyNzcsIDE1fSwgeyAzNjc3LCAxNX0sIHsgNDEyNSwgMTV9LCAvKiAtMjEgfiAtMTggZEIgKi8KK3sgNDYyOSwgMTV9LCB7IDUxOTMsIDE1fSwgeyA1ODI3LCAxNX0sIHsgMzI2OSwgMTR9LCAvKiAtMTcgfiAtMTQgZEIgKi8KK3sgIDkxNywgMTJ9LCB7IDgyMzEsIDE1fSwgeyA5MjM1LCAxNX0sIHsgNTE4MSwgMTR9LCAvKiAtMTMgfiAtMTAgZEIgKi8KK3sxMTYyNywgMTV9LCB7MTMwNDUsIDE1fSwgezE0NjM3LCAxNX0sIHsxNjQyMywgMTV9LCAvKiAgLTkgfiAtNiBkQiAqLworezE4NDI3LCAxNX0sIHsyMDY3NSwgMTV9LCB7IDU3OTksIDEzfSwgezI2MDI5LCAxNX0sIC8qICAtNSB+IC0yIGRCICovCit7IDczMDEsIDEzfSwgeyAgICAxLCAgMH0sIHsxODM4MywgMTR9LCB7MTAzMTMsIDEzfSwgLyogIC0xIH4gMiBkQiAqLworezIzMTQzLCAxNH0sIHsyNTk2NywgMTR9LCB7MjkxMzUsIDE0fSwgezE2MzQ1LCAxM30sIC8qICAgMyB+IDYgZEIgKi8KK3sgNDU4NSwgMTF9LCB7MjA1NzcsIDEzfSwgeyAxNDQzLCAgOX0sIHsyNTkwNSwgMTN9LCAvKiAgIDcgfiAxMCBkQiAqLworezE0NTMzLCAxMn0sIHsgODE1MywgMTF9LCB7IDIyODcsICA5fSwgezIwNTI5LCAxMn0sIC8qICAxMSB+IDE0IGRCICovCit7MTE1MTcsIDExfSwgeyA2NDYxLCAxMH0sIHsyODk5NywgMTJ9LCB7IDQwNjcsICA5fSwgLyogIDE1IH4gMTggZEIgKi8KK3sxODI1MywgMTF9LCB7ICAgMTAsICAwfSwgezIyOTc5LCAxMX0sIHsyNTc4MywgMTF9LCAvKiAgMTkgfiAyMiBkQiAqLworezI4OTI5LCAxMX0sIHszMjQ1OSwgMTF9LCB7IDkxMDUsICA5fSwgezIwNDMxLCAxMH0sIC8qICAyMyB+IDI2IGRCICovCit7MjI5MjUsIDEwfSwgezEyODYxLCAgOX0sIHsgNzIxNSwgIDh9LCB7MTYxOTEsICA5fSwgLyogIDI3IH4gMzAgZEIgKi8KK3sgOTA4MywgIDh9LCB7MjAzODMsICA5fSwgezExNDM1LCAgOH0sIHsgNjE0NSwgIDd9LCAvKiAgMzEgfiAzNCBkQiAqLworeyAzNTk5LCAgNn0sIHszMjMwNSwgIDl9LCB7MTgxMjMsICA4fSwgezIwMzM1LCAgOH0sIC8qICAzNSB+IDM4IGRCICovCit7ICA3MTMsICAzfSwgeyAgMTAwLCAgMH0sIHsgNzE4MSwgIDZ9LCB7IDgwNTcsICA2fSwgLyogIDM5IH4gNDIgZEIgKi8KK3sgIDU2NSwgIDJ9LCB7MjAyODcsICA3fSwgezExMzgxLCAgNn0sIHsyNTUzOSwgIDd9LCAvKiAgNDMgfiA0NiBkQiAqLworeyAxNzkxLCAgM30sIHsgNDAxOSwgIDR9LCB7IDkwMTksICA1fSwgezIwMjM5LCAgNn0sIC8qICA0NyB+IDUwIGRCICovCit7IDU2NzcsICA0fSwgezI1NDc5LCAgNn0sIHsgNzE0NywgIDR9LCB7IDgwMTksICA0fSwgLyogIDUxIH4gNTQgZEIgKi8KK3sxNzk5NSwgIDV9LCB7MjAxOTEsICA1fSwgezExMzI3LCAgNH0sIHsxMjcwOSwgIDR9LCAvKiAgNTUgfiA1OCBkQiAqLworeyAzNTY1LCAgMn0sIHsgMTAwMCwgIDB9LCB7IDExMjIsICAwfSwgeyAxMjU5LCAgMH0sIC8qICA1OSB+IDYyIGRCICovCit7IDI4MjUsICAxfSwgezEyNjc5LCAgM30sIHsgNzExMywgIDJ9LCB7IDc5ODEsICAyfSwgLyogIDYzIH4gNjYgZEIgKi8KK3sgODk1NSwgIDJ9LCB7MjAwOTUsICAzfSwgezIyNTQ3LCAgM30sIHsxMjY0OSwgIDJ9LCAvKiAgNjcgfiA3MCBkQiAqLworezI4Mzg1LCAgM30sIHsgMzk4MSwgIDB9LCB7MTc4NjcsICAyfSwgezIwMDQ3LCAgMn0sIC8qICA3MSB+IDc0IGRCICovCit7MTEyNDcsICAxfSwgezEyNjE5LCAgMX0sIHsxNDE1OSwgIDF9LCB7MzE3NzMsICAyfSwgLyogIDc1IH4gNzggZEIgKi8KK3sxNzgyNSwgIDF9LCB7MTAwMDAsICAwfSwgezExMjIwLCAgMH0sIHsxMjU4OSwgIDB9LCAvKiAgNzkgfiA4MiBkQiAqLworezI4MjUxLCAgMX0sIHsxNTg0OSwgIDB9LCB7MTc3ODMsICAwfSwgezE5OTUzLCAgMH0sIC8qICA4MyB+IDg2IGRCICovCit7MjIzODcsICAwfSwgezI1MTE5LCAgMH0sIHsyODE4NCwgIDB9LCB7MzE2MjMsICAwfSwgLyogIDg3IH4gOTAgZEIgKi8KK307CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9SQU5HRShtaWNfZ2Fpbl90bHYsCisJMCwgMSwgVExWX0RCX1NDQUxFX0lURU0oLTkwMDAsIDYwMCwgMCksCisJMiwgNSwgVExWX0RCX1NDQUxFX0lURU0oLTgxMDAsIDMwMCwgMCksCisJNiwgNywgVExWX0RCX1NDQUxFX0lURU0oLTcwMDAsIDIwMCwgMCksCisJOCwgQVJSQVlfU0laRShtaWNfZ2Fpbl90YWJsZSktMSwgVExWX0RCX1NDQUxFX0lURU0oLTY1MDAsIDEwMCwgMCksCispOworCitpbnQgcGRtaWNfZ2V0X21pY192b2xzdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2tjb250cm9sX2NvZGVjKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgZGdhaW5fdmFsLCBzY2FsZV92YWw7CisJaW50IGk7CisKKwlkZ2Fpbl92YWwgPSAoc25kX3NvY19yZWFkKGNvZGVjLCBQRE1JQ19EU1BSMSkgJiBQRE1JQ19EU1BSMV9ER0FJTl9NQVNLKQorCQkgICAgPj4gUERNSUNfRFNQUjFfREdBSU5fU0hJRlQ7CisKKwlzY2FsZV92YWwgPSAoc25kX3NvY19yZWFkKGNvZGVjLCBQRE1JQ19EU1BSMCkgJiBQRE1JQ19EU1BSMF9TQ0FMRV9NQVNLKQorCQkgICAgPj4gUERNSUNfRFNQUjBfU0NBTEVfU0hJRlQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtaWNfZ2Fpbl90YWJsZSk7IGkrKykgeworCQlpZiAoKG1pY19nYWluX3RhYmxlW2ldLmRnYWluID09IGRnYWluX3ZhbCkgJiYKKwkJICAgIChtaWNfZ2Fpbl90YWJsZVtpXS5zY2FsZSA9PSBzY2FsZV92YWwpKQorCQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBkbWljX3B1dF9taWNfdm9sc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2tjb250cm9sX2NvZGVjKGtjb250cm9sKTsKKwlpbnQgbWF4ID0gbWMtPm1heDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXQ7CisKKwl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmICh2YWwgPiBtYXgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUERNSUNfRFNQUjEsIFBETUlDX0RTUFIxX0RHQUlOX01BU0ssCisJCQkgbWljX2dhaW5fdGFibGVbdmFsXS5kZ2FpbiA8PCBQRE1JQ19EU1BSMV9ER0FJTl9TSElGVCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBQRE1JQ19EU1BSMCwgUERNSUNfRFNQUjBfU0NBTEVfTUFTSywKKwkJCSBtaWNfZ2Fpbl90YWJsZVt2YWxdLnNjYWxlIDw8IFBETUlDX0RTUFIwX1NDQUxFX1NISUZUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYXRtZWxfcGRtaWNfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfU0lOR0xFX0VYVF9UTFYoIk1pYyBDYXB0dXJlIFZvbHVtZSIsIFBETUlDX0RTUFIxLCBQRE1JQ19EU1BSMV9ER0FJTl9TSElGVCwKKwkJICAgQVJSQVlfU0laRShtaWNfZ2Fpbl90YWJsZSktMSwgMCwKKwkJICAgcGRtaWNfZ2V0X21pY192b2xzdywgcGRtaWNfcHV0X21pY192b2xzdywgbWljX2dhaW5fdGx2KSwKKworU09DX1NJTkdMRSgiSGlnaCBQYXNzIEZpbHRlciBTd2l0Y2giLCBQRE1JQ19EU1BSMCwKKwkgICBQRE1JQ19EU1BSMF9IUEZCWVBfU0hJRlQsIDEsIDEpLAorCitTT0NfU0lOR0xFKCJTSU5DQyBGaWx0ZXIgU3dpdGNoIiwgUERNSUNfRFNQUjAsIFBETUlDX0RTUFIwX1NJTkJZUF9TSElGVCwgMSwgMSksCit9OworCitzdGF0aWMgaW50IGF0bWVsX3BkbWljX2NvZGVjX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IGF0bWVsX3BkbWljICpkZCA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFBETUlDX0RTUFIxLCBQRE1JQ19EU1BSMV9PRkZTRVRfTUFTSywKKwkJICAgICAodTMyKShkZC0+cGRhdGEtPm1pY19vZmZzZXQgPDwgUERNSUNfRFNQUjFfT0ZGU0VUX1NISUZUKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X3BkbWljID0geworCS5wcm9iZQkJPSBhdG1lbF9wZG1pY19jb2RlY19wcm9iZSwKKwkuY29udHJvbHMJPSBhdG1lbF9wZG1pY19zbmRfY29udHJvbHMsCisJLm51bV9jb250cm9scwk9IEFSUkFZX1NJWkUoYXRtZWxfcGRtaWNfc25kX2NvbnRyb2xzKSwKK307CisKKy8qIGNvZGVjIGRhaSBjb21wb25lbnQgKi8KKyNkZWZpbmUgUERNSUNfTVJfUFJFU0NBTF9NQVhfVkFMIDEyNworCitzdGF0aWMgaW50CithdG1lbF9wZG1pY19jb2RlY19kYWlfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRtZWxfcGRtaWMgKmRkID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHJ0ZC0+Y2FyZCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1bnNpZ25lZCBpbnQgcmF0ZV9taW4gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnJhdGVfbWluOworCXVuc2lnbmVkIGludCByYXRlX21heCA9IHN1YnN0cmVhbS0+cnVudGltZS0+aHcucmF0ZV9tYXg7CisJaW50IGZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwlpbnQgYml0cyA9IHBhcmFtc193aWR0aChwYXJhbXMpOworCXVuc2lnbmVkIGxvbmcgcGNsa19yYXRlLCBnY2xrX3JhdGU7CisJdW5zaWduZWQgaW50IGZfcGRtaWM7CisJdTMyIG1yX3ZhbCwgZHNwcjBfdmFsLCBwY2xrX3ByZXNjYWwsIGdjbGtfcHJlc2NhbDsKKworCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSAhPSAxKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCSJvbmx5IHN1cHBvcnRzIG9uZSBjaGFubmVsXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChmcyA8IHJhdGVfbWluKSB8fCAoZnMgPiByYXRlX21heCkpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJInNhbXBsZSByYXRlIGlzICVkSHosIG1pbiByYXRlIGlzICVkSHosIG1heCByYXRlIGlzICVkSHpcbiIsCisJCQlmcywgcmF0ZV9taW4sIHJhdGVfbWF4KTsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGJpdHMpIHsKKwljYXNlIDE2OgorCQlkc3ByMF92YWwgPSAoUERNSUNfRFNQUjBfU0laRV8xNl9CSVRTCisJCQkgICAgIDw8IFBETUlDX0RTUFIwX1NJWkVfU0hJRlQpOworCQlicmVhazsKKwljYXNlIDMyOgorCQlkc3ByMF92YWwgPSAoUERNSUNfRFNQUjBfU0laRV8zMl9CSVRTCisJCQkgICAgIDw8IFBETUlDX0RTUFIwX1NJWkVfU0hJRlQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKGZzIDw8IDcpID4gKHJhdGVfbWF4IDw8IDYpKSB7CisJCWZfcGRtaWMgPSBmcyA8PCA2OworCQlkc3ByMF92YWwgfD0gUERNSUNfRFNQUjBfT1NSXzY0IDw8IFBETUlDX0RTUFIwX09TUl9TSElGVDsKKwl9IGVsc2UgeworCQlmX3BkbWljID0gZnMgPDwgNzsKKwkJZHNwcjBfdmFsIHw9IFBETUlDX0RTUFIwX09TUl8xMjggPDwgUERNSUNfRFNQUjBfT1NSX1NISUZUOworCX0KKworCXBjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShkZC0+cGNsayk7CisJZ2Nsa19yYXRlID0gY2xrX2dldF9yYXRlKGRkLT5nY2xrKTsKKworCS8qIFBSRVNDQUwgPSBTRUxDSy8oMipmX3BkbWljKSAtIDEqLworCXBjbGtfcHJlc2NhbCA9ICh1MzIpKHBjbGtfcmF0ZS8oZl9wZG1pYyA8PCAxKSkgLSAxOworCWdjbGtfcHJlc2NhbCA9ICh1MzIpKGdjbGtfcmF0ZS8oZl9wZG1pYyA8PCAxKSkgLSAxOworCisJaWYgKChwY2xrX3ByZXNjYWwgPiBQRE1JQ19NUl9QUkVTQ0FMX01BWF9WQUwpIHx8CisJICAgIChnY2xrX3JhdGUvKChnY2xrX3ByZXNjYWwgKyAxKSA8PCAxKSA8CisJICAgICBwY2xrX3JhdGUvKChwY2xrX3ByZXNjYWwgKyAxKSA8PCAxKSkpIHsKKwkJbXJfdmFsID0gZ2Nsa19wcmVzY2FsIDw8IFBETUlDX01SX1BSRVNDQUxfU0hJRlQ7CisJCW1yX3ZhbCB8PSBQRE1JQ19NUl9DTEtTX0dDSyA8PCBQRE1JQ19NUl9DTEtTX1NISUZUOworCX0gZWxzZSB7CisJCW1yX3ZhbCA9IHBjbGtfcHJlc2NhbCA8PCBQRE1JQ19NUl9QUkVTQ0FMX1NISUZUOworCQltcl92YWwgfD0gUERNSUNfTVJfQ0xLU19QQ0sgPDwgUERNSUNfTVJfQ0xLU19TSElGVDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBQRE1JQ19NUiwKKwkJUERNSUNfTVJfUFJFU0NBTF9NQVNLIHwgUERNSUNfTVJfQ0xLU19NQVNLLCBtcl92YWwpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUERNSUNfRFNQUjAsCisJCVBETUlDX0RTUFIwX09TUl9NQVNLIHwgUERNSUNfRFNQUjBfU0laRV9NQVNLLCBkc3ByMF92YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfcGRtaWNfY29kZWNfZGFpX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBQRE1JQ19DUiwgUERNSUNfQ1JfRU5QRE1fTUFTSywKKwkJCSAgICBQRE1JQ19DUl9FTlBETV9ESVMgPDwgUERNSUNfQ1JfRU5QRE1fU0hJRlQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfcGRtaWNfY29kZWNfZGFpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCWludCBjbWQsIHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTMyIHZhbDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCXZhbCA9IFBETUlDX0NSX0VOUERNX0VOIDw8IFBETUlDX0NSX0VOUERNX1NISUZUOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJdmFsID0gUERNSUNfQ1JfRU5QRE1fRElTIDw8IFBETUlDX0NSX0VOUERNX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBQRE1JQ19DUiwgUERNSUNfQ1JfRU5QRE1fTUFTSywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBhdG1lbF9wZG1pY19jb2RlY19kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBhdG1lbF9wZG1pY19jb2RlY19kYWlfaHdfcGFyYW1zLAorCS5wcmVwYXJlCT0gYXRtZWxfcGRtaWNfY29kZWNfZGFpX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBhdG1lbF9wZG1pY19jb2RlY19kYWlfdHJpZ2dlciwKK307CisKKyNkZWZpbmUgQVRNRUxfUERNSUNfQ09ERUNfREFJX05BTUUgICJhdG1lbC1wZG1pYy1oaWZpIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBhdG1lbF9wZG1pY19jb2RlY19kYWkgPSB7CisJLm5hbWUgPSBBVE1FTF9QRE1JQ19DT0RFQ19EQUlfTkFNRSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lCT0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluCT0gMSwKKwkJLmNoYW5uZWxzX21heAk9IDEsCisJCS5yYXRlcwkJPSBTTkRSVl9QQ01fUkFURV9LTk9ULAorCQkuZm9ybWF0cwk9IEFUTUVMX1BETUlDX0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJmF0bWVsX3BkbWljX2NvZGVjX2RhaV9vcHMsCit9OworCisvKiBBU29DIHNvdW5kIGNhcmQgKi8KK3N0YXRpYyBpbnQgYXRtZWxfcGRtaWNfYXNvY19jYXJkX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rOworCXN0cnVjdCBhdG1lbF9wZG1pYyAqZGQgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEoY2FyZCk7CisKKwlkYWlfbGluayA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGFpX2xpbmspLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhaV9saW5rKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhaV9saW5rLT5uYW1lCQkJPSAiUERNSUMiOworCWRhaV9saW5rLT5zdHJlYW1fbmFtZQkJPSAiUERNSUMgUENNIjsKKwlkYWlfbGluay0+Y29kZWNfZGFpX25hbWUJPSBBVE1FTF9QRE1JQ19DT0RFQ19EQUlfTkFNRTsKKwlkYWlfbGluay0+Y3B1X2RhaV9uYW1lCQk9IGRldl9uYW1lKGRldik7CisJZGFpX2xpbmstPmNvZGVjX25hbWUJCT0gZGV2X25hbWUoZGV2KTsKKwlkYWlfbGluay0+cGxhdGZvcm1fbmFtZQkJPSBkZXZfbmFtZShkZXYpOworCisJY2FyZC0+ZGFpX2xpbmsJPSBkYWlfbGluazsKKwljYXJkLT5udW1fbGlua3MJPSAxOworCWNhcmQtPm5hbWUJPSBkZC0+cGRhdGEtPmNhcmRfbmFtZTsKKwljYXJkLT5kZXYJPSBkZXY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXRtZWxfcGRtaWNfZ2V0X3NhbXBsZV9yYXRlKHN0cnVjdCBhdG1lbF9wZG1pYyAqZGQsCisJdW5zaWduZWQgaW50ICpyYXRlX21pbiwgdW5zaWduZWQgaW50ICpyYXRlX21heCkKK3sKKwl1MzIgbWljX21pbl9mcmVxID0gZGQtPnBkYXRhLT5taWNfbWluX2ZyZXE7CisJdTMyIG1pY19tYXhfZnJlcSA9IGRkLT5wZGF0YS0+bWljX21heF9mcmVxOworCXUzMiBjbGtfbWF4X3JhdGUgPSAodTMyKShjbGtfZ2V0X3JhdGUoZGQtPnBjbGspID4+IDEpOworCXUzMiBjbGtfbWluX3JhdGUgPSAodTMyKShjbGtfZ2V0X3JhdGUoZGQtPmdjbGspID4+IDgpOworCisJaWYgKG1pY19tYXhfZnJlcSA+IGNsa19tYXhfcmF0ZSkKKwkJbWljX21heF9mcmVxID0gY2xrX21heF9yYXRlOworCisJaWYgKG1pY19taW5fZnJlcSA8IGNsa19taW5fcmF0ZSkKKwkJbWljX21pbl9mcmVxID0gY2xrX21pbl9yYXRlOworCisJKnJhdGVfbWluID0gRElWX1JPVU5EX0NMT1NFU1QobWljX21pbl9mcmVxLCAxMjgpOworCSpyYXRlX21heCA9IG1pY19tYXhfZnJlcSA+PiA2OworfQorCisvKiBQRE1JQyBpbnRlcnJ1cHQgaGFuZGxlciAqLworc3RhdGljIGlycXJldHVybl90IGF0bWVsX3BkbWljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGF0bWVsX3BkbWljICpkZCA9IChzdHJ1Y3QgYXRtZWxfcGRtaWMgKilkZXZfaWQ7CisJdTMyIHBkbWljX2lzcjsKKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKKworCXJlZ21hcF9yZWFkKGRkLT5yZWdtYXAsIFBETUlDX0lTUiwgJnBkbWljX2lzcik7CisKKwlpZiAocGRtaWNfaXNyICYgUERNSUNfSVNSX09WUkUpIHsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRkLT5yZWdtYXAsIFBETUlDX0NSLCBQRE1JQ19DUl9FTlBETV9NQVNLLAorCQkJCSAgIFBETUlDX0NSX0VOUERNX0RJUyA8PCBQRE1JQ19DUl9FTlBETV9TSElGVCk7CisKKwkJc25kX3BjbV9zdG9wX3hydW4oZGQtPnN1YnN0cmVhbSk7CisKKwkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogcmVnbWFwIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQVRNRUxfUERNSUNfUkVHX01BWCAgICAweDEyNAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGF0bWVsX3BkbWljX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzCT0gMzIsCisJLnJlZ19zdHJpZGUJPSA0LAorCS52YWxfYml0cwk9IDMyLAorCS5tYXhfcmVnaXN0ZXIJPSBBVE1FTF9QRE1JQ19SRUdfTUFYLAorfTsKKworc3RhdGljIGludCBhdG1lbF9wZG1pY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGF0bWVsX3BkbWljICpkZDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CisJY29uc3Qgc3RydWN0IGF0bWVsX3BkbWljX3BkYXRhICpwZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOworCXVuc2lnbmVkIGludCByYXRlX21pbiwgcmF0ZV9tYXg7CisJaW50IHJldDsKKworCXBkYXRhID0gYXRtZWxfcGRtaWNfZHRfaW5pdChkZXYpOworCWlmIChJU19FUlIocGRhdGEpKQorCQlyZXR1cm4gUFRSX0VSUihwZGF0YSk7CisKKwlkZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRkLT5wZGF0YSA9IHBkYXRhOworCisJZGQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGRkLT5pcnEgPCAwKSB7CisJCXJldCA9IGRkLT5pcnE7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNvdWxkIG5vdCBnZXQgaXJxOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZC0+cGNsayA9IGRldm1fY2xrX2dldChkZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihkZC0+cGNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkZC0+cGNsayk7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwZXJpcGhlcmFsIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZC0+Z2NsayA9IGRldm1fY2xrX2dldChkZXYsICJnY2xrIik7CisJaWYgKElTX0VSUihkZC0+Z2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkZC0+Z2Nsayk7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBHQ0s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRoZSBnY2xrIGNsb2NrIGZyZXF1ZW5jeSBtdXN0IGFsd2F5cyBiZSB0cmVlIHRpbWVzCisJICogbG93ZXIgdGhhbiB0aGUgcGNsayBjbG9jayBmcmVxdWVuY3kKKwkgKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoZGQtPmdjbGssIGNsa19nZXRfcmF0ZShkZC0+cGNsaykvMyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgR0NLIGNsb2NrIHJhdGU6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycihkZXYsICJubyBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlvX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoaW9fYmFzZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihpb19iYXNlKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVtYXAgcmVnaXN0ZXIgbWVtb3J5OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZC0+cGh5X2Jhc2UgPSByZXMtPnN0YXJ0OworCisJZGQtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGlvX2Jhc2UsCisJCQkJCSAgICZhdG1lbF9wZG1pY19yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKGRkLT5yZWdtYXApKSB7CisJCXJldCA9IFBUUl9FUlIoZGQtPnJlZ21hcCk7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgcmVnaXN0ZXIgbWFwOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSAgZGV2bV9yZXF1ZXN0X2lycShkZXYsIGRkLT5pcnEsIGF0bWVsX3BkbWljX2ludGVycnVwdCwgMCwKKwkJCQkiUERNSUMiLCAodm9pZCAqKWRkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImNhbid0IHJlZ2lzdGVyIElTUiBmb3IgSVJRICV1IChyZXQ9JWkpXG4iLAorCQkJZGQtPmlycSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBHZXQgdGhlIG1pbmltYWwgYW5kIG1heGltYWwgc2FtcGxlIHJhdGUgdGhhdCBtaWNwaG9uZSBzdXBwb3J0cyAqLworCWF0bWVsX3BkbWljX2dldF9zYW1wbGVfcmF0ZShkZCwgJnJhdGVfbWluLCAmcmF0ZV9tYXgpOworCisJLyogcmVnaXN0ZXIgY3B1IGRhaSAqLworCWF0bWVsX3BkbWljX2NwdV9kYWkuY2FwdHVyZS5yYXRlX21pbiA9IHJhdGVfbWluOworCWF0bWVsX3BkbWljX2NwdV9kYWkuY2FwdHVyZS5yYXRlX21heCA9IHJhdGVfbWF4OworCXJldCA9IGRldm1fc25kX3NvY19yZWdpc3Rlcl9jb21wb25lbnQoZGV2LAorCQkJCQkgICAgICAmYXRtZWxfcGRtaWNfY3B1X2RhaV9jb21wb25lbnQsCisJCQkJCSAgICAgICZhdG1lbF9wZG1pY19jcHVfZGFpLCAxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIENQVSBEQUk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHJlZ2lzdGVyIHBsYXRmb3JtICovCisJcmV0ID0gZGV2bV9zbmRfZG1hZW5naW5lX3BjbV9yZWdpc3RlcihkZXYsCisJCQkJCSAgICAgJmF0bWVsX3BkbWljX2RtYWVuZ2luZV9wY21fY29uZmlnLAorCQkJCQkgICAgIDApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgcGxhdGZvcm06ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHJlZ2lzdGVyIGNvZGVjIGFuZCBjb2RlYyBkYWkgKi8KKwlhdG1lbF9wZG1pY19jb2RlY19kYWkuY2FwdHVyZS5yYXRlX21pbiA9IHJhdGVfbWluOworCWF0bWVsX3BkbWljX2NvZGVjX2RhaS5jYXB0dXJlLnJhdGVfbWF4ID0gcmF0ZV9tYXg7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhkZXYsICZzb2NfY29kZWNfZGV2X3BkbWljLAorCQkJCSAgICAgJmF0bWVsX3BkbWljX2NvZGVjX2RhaSwgMSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogcmVnaXN0ZXIgc291bmQgY2FyZCAqLworCWNhcmQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNhcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byB1bnJlZ2lzdGVyX2NvZGVjOworCX0KKworCXNuZF9zb2NfY2FyZF9zZXRfZHJ2ZGF0YShjYXJkLCBkZCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisKKwlyZXQgPSBhdG1lbF9wZG1pY19hc29jX2NhcmRfaW5pdChkZXYsIGNhcmQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCBzb3VuZCBjYXJkOiAlZFxuIiwgcmV0KTsKKwkJZ290byB1bnJlZ2lzdGVyX2NvZGVjOworCX0KKworCXJldCA9IGRldm1fc25kX3NvY19yZWdpc3Rlcl9jYXJkKGRldiwgY2FyZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBzb3VuZCBjYXJkOiAlZFxuIiwgcmV0KTsKKwkJZ290byB1bnJlZ2lzdGVyX2NvZGVjOworCX0KKworCXJldHVybiAwOworCit1bnJlZ2lzdGVyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfcGRtaWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZwZGV2LT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdG1lbF9wZG1pY19kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJCT0gImF0bWVsLXBkbWljIiwKKwkJLm9mX21hdGNoX3RhYmxlCT0gb2ZfbWF0Y2hfcHRyKGF0bWVsX3BkbWljX29mX21hdGNoKSwKKwkJLnBtCQk9ICZzbmRfc29jX3BtX29wcywKKwl9LAorCS5wcm9iZQk9IGF0bWVsX3BkbWljX3Byb2JlLAorCS5yZW1vdmUJPSBhdG1lbF9wZG1pY19yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhdG1lbF9wZG1pY19kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkF0bWVsIFBETUlDIGRyaXZlciB1bmRlciBBTFNBIFNvQyBhcmNoaXRlY3R1cmUiKTsKK01PRFVMRV9BVVRIT1IoIlNvbmdqdW4gV3UgPHNvbmdqdW4ud3VAYXRtZWwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL2F0bWVsLXBkbWljLmggYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGRtaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTI3YWM3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2F0bWVsL2F0bWVsLXBkbWljLmgKQEAgLTAsMCArMSw4MCBAQAorI2lmbmRlZiBfX0FUTUVMX1BETUlDX0hfCisjZGVmaW5lIF9fQVRNRUxfUERNSUNfSF8KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVmaW5lIFBETUlDX0NSCTB4MDAwMDAwMDAKKworI2RlZmluZSBQRE1JQ19DUl9TV1JTVAkJMHgxCisjZGVmaW5lIFBETUlDX0NSX1NXUlNUX01BU0sJQklUKDApCisjZGVmaW5lIFBETUlDX0NSX1NXUlNUX1NISUZUCSgwKQorCisjZGVmaW5lIFBETUlDX0NSX0VOUERNX0RJUwkweDAKKyNkZWZpbmUgUERNSUNfQ1JfRU5QRE1fRU4JMHgxCisjZGVmaW5lIFBETUlDX0NSX0VOUERNX01BU0sJQklUKDQpCisjZGVmaW5lIFBETUlDX0NSX0VOUERNX1NISUZUCSg0KQorCisjZGVmaW5lIFBETUlDX01SCTB4MDAwMDAwMDQKKworI2RlZmluZSBQRE1JQ19NUl9DTEtTX1BDSwkweDAKKyNkZWZpbmUgUERNSUNfTVJfQ0xLU19HQ0sJMHgxCisjZGVmaW5lIFBETUlDX01SX0NMS1NfTUFTSwlCSVQoNCkKKyNkZWZpbmUgUERNSUNfTVJfQ0xLU19TSElGVAkoNCkKKworI2RlZmluZSBQRE1JQ19NUl9QUkVTQ0FMX01BU0sJR0VOTUFTSygxNCwgOCkKKyNkZWZpbmUgUERNSUNfTVJfUFJFU0NBTF9TSElGVAkoOCkKKworI2RlZmluZSBQRE1JQ19DRFIJMHgwMDAwMDAxNAorCisjZGVmaW5lIFBETUlDX0lFUgkweDAwMDAwMDE4CisjZGVmaW5lIFBETUlDX0lFUl9PVlJFCQkJQklUKDI1KQorCisjZGVmaW5lIFBETUlDX0lEUgkweDAwMDAwMDFjCisjZGVmaW5lIFBETUlDX0lEUl9PVlJFCQkJQklUKDI1KQorCisjZGVmaW5lIFBETUlDX0lNUgkweDAwMDAwMDIwCisKKyNkZWZpbmUgUERNSUNfSVNSCTB4MDAwMDAwMjQKKyNkZWZpbmUgUERNSUNfSVNSX09WUkUJCQlCSVQoMjUpCisKKyNkZWZpbmUgUERNSUNfRFNQUjAJMHgwMDAwMDA1OAorCisjZGVmaW5lIFBETUlDX0RTUFIwX0hQRkJZUF9ESVMJCTB4MQorI2RlZmluZSBQRE1JQ19EU1BSMF9IUEZCWVBfRU4JCTB4MAorI2RlZmluZSBQRE1JQ19EU1BSMF9IUEZCWVBfTUFTSwkJQklUKDEpCisjZGVmaW5lIFBETUlDX0RTUFIwX0hQRkJZUF9TSElGVAkoMSkKKworI2RlZmluZSBQRE1JQ19EU1BSMF9TSU5CWVBfRElTCQkweDEKKyNkZWZpbmUgUERNSUNfRFNQUjBfU0lOQllQX0VOCQkweDAKKyNkZWZpbmUgUERNSUNfRFNQUjBfU0lOQllQX01BU0sJCUJJVCgyKQorI2RlZmluZSBQRE1JQ19EU1BSMF9TSU5CWVBfU0hJRlQJKDIpCisKKyNkZWZpbmUgUERNSUNfRFNQUjBfU0laRV8xNl9CSVRTCTB4MAorI2RlZmluZSBQRE1JQ19EU1BSMF9TSVpFXzMyX0JJVFMJMHgxCisjZGVmaW5lIFBETUlDX0RTUFIwX1NJWkVfTUFTSwkJQklUKDMpCisjZGVmaW5lIFBETUlDX0RTUFIwX1NJWkVfU0hJRlQJCSgzKQorCisjZGVmaW5lIFBETUlDX0RTUFIwX09TUl8xMjgJCTB4MAorI2RlZmluZSBQRE1JQ19EU1BSMF9PU1JfNjQJCTB4MQorI2RlZmluZSBQRE1JQ19EU1BSMF9PU1JfTUFTSwkJR0VOTUFTSyg2LCA0KQorI2RlZmluZSBQRE1JQ19EU1BSMF9PU1JfU0hJRlQJCSg0KQorCisjZGVmaW5lIFBETUlDX0RTUFIwX1NDQUxFX01BU0sJCUdFTk1BU0soMTEsIDgpCisjZGVmaW5lIFBETUlDX0RTUFIwX1NDQUxFX1NISUZUCQkoOCkKKworI2RlZmluZSBQRE1JQ19EU1BSMF9TSElGVF9NQVNLCQlHRU5NQVNLKDE1LCAxMikKKyNkZWZpbmUgUERNSUNfRFNQUjBfU0hJRlRfU0hJRlQJCSgxMikKKworI2RlZmluZSBQRE1JQ19EU1BSMQkweDAwMDAwMDVjCisKKyNkZWZpbmUgUERNSUNfRFNQUjFfREdBSU5fTUFTSwkJR0VOTUFTSygxNCwgMCkKKyNkZWZpbmUgUERNSUNfRFNQUjFfREdBSU5fU0hJRlQJCSgwKQorCisjZGVmaW5lIFBETUlDX0RTUFIxX09GRlNFVF9NQVNLCQlHRU5NQVNLKDMxLCAxNikKKyNkZWZpbmUgUERNSUNfRFNQUjFfT0ZGU0VUX1NISUZUCSgxNikKKworI2RlZmluZSBQRE1JQ19XUE1SCTB4MDAwMDAwZTQKKworI2RlZmluZSBQRE1JQ19XUFNSCTB4MDAwMDAwZTgKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfd204OTA0LmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfd204OTA0LmMKaW5kZXggMTkzM2JjZC4uZmRkMjhlZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsX3dtODkwNC5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF93bTg5MDQuYwpAQCAtMTgzLDYgKzE4Myw3IEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiYXRtZWwtd204OTA0LWF1ZGlvIiwKIAkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGF0bWVsX2Fzb2Nfd204OTA0X2R0X2lkcyksCisJCS5wbQkJPSAmc25kX3NvY19wbV9vcHMsCiAJfSwKIAkucHJvYmUgPSBhdG1lbF9hc29jX3dtODkwNF9wcm9iZSwKIAkucmVtb3ZlID0gYXRtZWxfYXNvY193bTg5MDRfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JjbS9iY20yODM1LWkycy5jIGIvc291bmQvc29jL2JjbS9iY20yODM1LWkycy5jCmluZGV4IDhjNDM1YmUuLjMzMDNkNWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9iY20vYmNtMjgzNS1pMnMuYworKysgYi9zb3VuZC9zb2MvYmNtL2JjbTI4MzUtaTJzLmMKQEAgLTMxLDIwICszMSwyMCBAQAogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9kbWFlbmdpbmVfcGNtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvZG1hZW5naW5lX3BjbS5oPgogCiAvKiBDbG9jayByZWdpc3RlcnMgKi8KICNkZWZpbmUgQkNNMjgzNV9DTEtfUENNQ1RMX1JFRyAgMHgwMApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCmluZGV4IGNmZGFmYzQuLjUwNjkzYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKQEAgLTU1LDkgKzU1LDExIEBACiAJc2VsZWN0IFNORF9TT0NfQ1M0MjcxX1NQSSBpZiBTUElfTUFTVEVSCiAJc2VsZWN0IFNORF9TT0NfQ1M0MlhYOF9JMkMgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQ1M0MzQ5IGlmIEkyQworCXNlbGVjdCBTTkRfU09DX0NTNDdMMjQgaWYgTUZEX0NTNDdMMjQKIAlzZWxlY3QgU05EX1NPQ19DWDIwNDQyIGlmIFRUWQogCXNlbGVjdCBTTkRfU09DX0RBNzIxMCBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCiAJc2VsZWN0IFNORF9TT0NfREE3MjEzIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX0RBNzIxOCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19EQTcyMTkgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfREE3MzJYIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0RBOTA1NSBpZiBJMkMKQEAgLTY2LDcgKzY4LDkgQEAKIAlzZWxlY3QgU05EX1NPQ19FUzgzMjhfU1BJIGlmIFNQSV9NQVNURVIKIAlzZWxlY3QgU05EX1NPQ19FUzgzMjhfSTJDIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0dUTTYwMQorCXNlbGVjdCBTTkRfU09DX0hEQUNfSERNSQogCXNlbGVjdCBTTkRfU09DX0lDUzQzNDMyCisJc2VsZWN0IFNORF9TT0NfSU5OT19SSzMwMzYKIAlzZWxlY3QgU05EX1NPQ19JU0FCRUxMRSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19KWjQ3NDBfQ09ERUMKIAlzZWxlY3QgU05EX1NPQ19MTTQ4NTcgaWYgSTJDCkBAIC04MywxNiArODcsMjAgQEAKIAlzZWxlY3QgU05EX1NPQ19NTDI2MTI0IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX05BVTg4MjUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUENNMTY4MSBpZiBJMkMKLQlzZWxlY3QgU05EX1NPQ19QQ00xNzkyQSBpZiBTUElfTUFTVEVSCisJc2VsZWN0IFNORF9TT0NfUENNMTc5WCBpZiBTUElfTUFTVEVSCiAJc2VsZWN0IFNORF9TT0NfUENNMzAwOAorCXNlbGVjdCBTTkRfU09DX1BDTTMxNjhBX0kyQyBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19QQ00zMTY4QV9TUEkgaWYgU1BJX01BU1RFUgogCXNlbGVjdCBTTkRfU09DX1BDTTUxMnhfSTJDIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1BDTTUxMnhfU1BJIGlmIFNQSV9NQVNURVIKIAlzZWxlY3QgU05EX1NPQ19SVDI4NiBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19SVDI5OCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19SVDU2MTYgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUlQ1NjMxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1JUNTY0MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19SVDU2NDUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUlQ1NjUxIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1JUNTY1OSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19SVDU2NzAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUlQ1Njc3IGlmIEkyQyAmJiBTUElfTUFTVEVSCiAJc2VsZWN0IFNORF9TT0NfU0dUTDUwMDAgaWYgSTJDCkBAIC0xOTUsMTAgKzIwMywxMiBAQAogCiBjb25maWcgU05EX1NPQ19BUklaT05BCiAJdHJpc3RhdGUKKwlkZWZhdWx0IHkgaWYgU05EX1NPQ19DUzQ3TDI0PXkKIAlkZWZhdWx0IHkgaWYgU05EX1NPQ19XTTUxMDI9eQogCWRlZmF1bHQgeSBpZiBTTkRfU09DX1dNNTExMD15CiAJZGVmYXVsdCB5IGlmIFNORF9TT0NfV004OTk3PXkKIAlkZWZhdWx0IHkgaWYgU05EX1NPQ19XTTg5OTg9eQorCWRlZmF1bHQgbSBpZiBTTkRfU09DX0NTNDdMMjQ9bQogCWRlZmF1bHQgbSBpZiBTTkRfU09DX1dNNTEwMj1tCiAJZGVmYXVsdCBtIGlmIFNORF9TT0NfV001MTEwPW0KIAlkZWZhdWx0IG0gaWYgU05EX1NPQ19XTTg5OTc9bQpAQCAtMjExLDkgKzIyMSwxMiBAQAogCiBjb25maWcgU05EX1NPQ19XTV9BRFNQCiAJdHJpc3RhdGUKKwlzZWxlY3QgU05EX1NPQ19DT01QUkVTUworCWRlZmF1bHQgeSBpZiBTTkRfU09DX0NTNDdMMjQ9eQogCWRlZmF1bHQgeSBpZiBTTkRfU09DX1dNNTEwMj15CiAJZGVmYXVsdCB5IGlmIFNORF9TT0NfV001MTEwPXkKIAlkZWZhdWx0IHkgaWYgU05EX1NPQ19XTTIyMDA9eQorCWRlZmF1bHQgbSBpZiBTTkRfU09DX0NTNDdMMjQ9bQogCWRlZmF1bHQgbSBpZiBTTkRfU09DX1dNNTEwMj1tCiAJZGVmYXVsdCBtIGlmIFNORF9TT0NfV001MTEwPW0KIAlkZWZhdWx0IG0gaWYgU05EX1NPQ19XTTIyMDA9bQpAQCAtNDIyLDYgKzQzNSw5IEBACiAJdHJpc3RhdGUgIkNpcnJ1cyBMb2dpYyBDUzQzNDkgQ09ERUMiCiAJZGVwZW5kcyBvbiBJMkMKIAorY29uZmlnIFNORF9TT0NfQ1M0N0wyNAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0NYMjA0NDIKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gVFRZCkBAIC00MzksNiArNDU1LDkgQEAKIGNvbmZpZyBTTkRfU09DX0RBNzIxMwogICAgICAgICB0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19EQTcyMTgKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19EQTcyMTkKICAgICAgICAgdHJpc3RhdGUKIApAQCAtNDY4LDkgKzQ4NywxNyBAQAogY29uZmlnIFNORF9TT0NfR1RNNjAxCiAJdHJpc3RhdGUgJ0dUTTYwMSBVTVRTIG1vZGVtIGF1ZGlvIGNvZGVjJwogCitjb25maWcgU05EX1NPQ19IREFDX0hETUkKKwl0cmlzdGF0ZQorCXNlbGVjdCBTTkRfSERBX0VYVF9DT1JFCisJc2VsZWN0IEhETUkKKwogY29uZmlnIFNORF9TT0NfSUNTNDM0MzIKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19JTk5PX1JLMzAzNgorCXRyaXN0YXRlICJJbm5vIGNvZGVjIGRyaXZlciBmb3IgUkszMDM2IFNvQyIKKwogY29uZmlnIFNORF9TT0NfSVNBQkVMTEUKICAgICAgICAgdHJpc3RhdGUKIApAQCAtNDk5LDEzICs1MjYsMjggQEAKIAl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgUENNMTY4MSBDT0RFQyIKIAlkZXBlbmRzIG9uIEkyQwogCi1jb25maWcgU05EX1NPQ19QQ00xNzkyQQotCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBQQ00xNzkyQSBDT0RFQyIKK2NvbmZpZyBTTkRfU09DX1BDTTE3OVgKKwl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgUENNMTc5WCBDT0RFQyIKIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIKIAogY29uZmlnIFNORF9TT0NfUENNMzAwOAogICAgICAgIHRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1BDTTMxNjhBCisJdHJpc3RhdGUKKworY29uZmlnIFNORF9TT0NfUENNMzE2OEFfSTJDCisJdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFBDTTMxNjhBIENPREVDIC0gSTJDIgorCWRlcGVuZHMgb24gSTJDCisJc2VsZWN0IFNORF9TT0NfUENNMzE2OEEKKwlzZWxlY3QgUkVHTUFQX0kyQworCitjb25maWcgU05EX1NPQ19QQ00zMTY4QV9TUEkKKwl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgUENNMzE2OEEgQ09ERUMgLSBTUEkiCisJZGVwZW5kcyBvbiBTUElfTUFTVEVSCisJc2VsZWN0IFNORF9TT0NfUENNMzE2OEEKKwlzZWxlY3QgUkVHTUFQX1NQSQorCiBjb25maWcgU05EX1NPQ19QQ001MTJ4CiAJdHJpc3RhdGUKIApAQCAtNTIzLDE0ICs1NjUsMTggQEAKIAogY29uZmlnIFNORF9TT0NfUkw2MjMxCiAJdHJpc3RhdGUKKwlkZWZhdWx0IHkgaWYgU05EX1NPQ19SVDU2MTY9eQogCWRlZmF1bHQgeSBpZiBTTkRfU09DX1JUNTY0MD15CiAJZGVmYXVsdCB5IGlmIFNORF9TT0NfUlQ1NjQ1PXkKIAlkZWZhdWx0IHkgaWYgU05EX1NPQ19SVDU2NTE9eQorCWRlZmF1bHQgeSBpZiBTTkRfU09DX1JUNTY1OT15CiAJZGVmYXVsdCB5IGlmIFNORF9TT0NfUlQ1NjcwPXkKIAlkZWZhdWx0IHkgaWYgU05EX1NPQ19SVDU2Nzc9eQorCWRlZmF1bHQgbSBpZiBTTkRfU09DX1JUNTYxNj1tCiAJZGVmYXVsdCBtIGlmIFNORF9TT0NfUlQ1NjQwPW0KIAlkZWZhdWx0IG0gaWYgU05EX1NPQ19SVDU2NDU9bQogCWRlZmF1bHQgbSBpZiBTTkRfU09DX1JUNTY1MT1tCisJZGVmYXVsdCBtIGlmIFNORF9TT0NfUlQ1NjU5PW0KIAlkZWZhdWx0IG0gaWYgU05EX1NPQ19SVDU2NzA9bQogCWRlZmF1bHQgbSBpZiBTTkRfU09DX1JUNTY3Nz1tCiAKQEAgLTU0OSw2ICs1OTUsOSBAQAogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBJMkMKIAorY29uZmlnIFNORF9TT0NfUlQ1NjE2CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfUlQ1NjMxCiAJdHJpc3RhdGUgIlJlYWx0ZWsgQUxDNTYzMS9SVDU2MzEgQ09ERUMiCiAJZGVwZW5kcyBvbiBJMkMKQEAgLTU2Miw2ICs2MTEsOSBAQAogY29uZmlnIFNORF9TT0NfUlQ1NjUxCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfUlQ1NjU5CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfUlQ1NjcwCiAJdHJpc3RhdGUKIApAQCAtODM4LDcgKzg5MCw4IEBACiAJdHJpc3RhdGUKIAogY29uZmlnIFNORF9TT0NfV004OTc0Ci0JdHJpc3RhdGUKKwl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODk3NCBjb2RlYyIKKwlkZXBlbmRzIG9uIEkyQwogCiBjb25maWcgU05EX1NPQ19XTTg5NzgKIAl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODk3OCBjb2RlYyIKQEAgLTg5MSw2ICs5NDQsNyBAQAogCiBjb25maWcgU05EX1NPQ19XTTk3MTMKIAl0cmlzdGF0ZQorCXNlbGVjdCBSRUdNQVBfQUM5NwogCiAjIEFtcAogY29uZmlnIFNORF9TT0NfTE00ODU3CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQppbmRleCBmNjMyZmM0Li5kNDRmN2QzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKQEAgLTQ3LDkgKzQ3LDExIEBACiBzbmQtc29jLWNzNDJ4eDgtb2JqcyA6PSBjczQyeHg4Lm8KIHNuZC1zb2MtY3M0Mnh4OC1pMmMtb2JqcyA6PSBjczQyeHg4LWkyYy5vCiBzbmQtc29jLWNzNDM0OS1vYmpzIDo9IGNzNDM0OS5vCitzbmQtc29jLWNzNDdsMjQtb2JqcyA6PSBjczQ3bDI0Lm8KIHNuZC1zb2MtY3gyMDQ0Mi1vYmpzIDo9IGN4MjA0NDIubwogc25kLXNvYy1kYTcyMTAtb2JqcyA6PSBkYTcyMTAubwogc25kLXNvYy1kYTcyMTMtb2JqcyA6PSBkYTcyMTMubworc25kLXNvYy1kYTcyMTgtb2JqcyA6PSBkYTcyMTgubwogc25kLXNvYy1kYTcyMTktb2JqcyA6PSBkYTcyMTkubyBkYTcyMTktYWFkLm8KIHNuZC1zb2MtZGE3MzJ4LW9ianMgOj0gZGE3MzJ4Lm8KIHNuZC1zb2MtZGE5MDU1LW9ianMgOj0gZGE5MDU1Lm8KQEAgLTU5LDcgKzYxLDkgQEAKIHNuZC1zb2MtZXM4MzI4LWkyYy1vYmpzIDo9IGVzODMyOC1pMmMubwogc25kLXNvYy1lczgzMjgtc3BpLW9ianMgOj0gZXM4MzI4LXNwaS5vCiBzbmQtc29jLWd0bTYwMS1vYmpzIDo9IGd0bTYwMS5vCitzbmQtc29jLWhkYWMtaGRtaS1vYmpzIDo9IGhkYWNfaGRtaS5vCiBzbmQtc29jLWljczQzNDMyLW9ianMgOj0gaWNzNDM0MzIubworc25kLXNvYy1pbm5vLXJrMzAzNi1vYmpzIDo9IGlubm9fcmszMDM2Lm8KIHNuZC1zb2MtaXNhYmVsbGUtb2JqcyA6PSBpc2FiZWxsZS5vCiBzbmQtc29jLWp6NDc0MC1jb2RlYy1vYmpzIDo9IGp6NDc0MC5vCiBzbmQtc29jLWwzLW9ianMgOj0gbDMubwpAQCAtNzYsOCArODAsMTEgQEAKIHNuZC1zb2MtbWwyNjEyNC1vYmpzIDo9IG1sMjYxMjQubwogc25kLXNvYy1uYXU4ODI1LW9ianMgOj0gbmF1ODgyNS5vCiBzbmQtc29jLXBjbTE2ODEtb2JqcyA6PSBwY20xNjgxLm8KLXNuZC1zb2MtcGNtMTc5MmEtY29kZWMtb2JqcyA6PSBwY20xNzkyYS5vCitzbmQtc29jLXBjbTE3OXgtY29kZWMtb2JqcyA6PSBwY20xNzl4Lm8KIHNuZC1zb2MtcGNtMzAwOC1vYmpzIDo9IHBjbTMwMDgubworc25kLXNvYy1wY20zMTY4YS1vYmpzIDo9IHBjbTMxNjhhLm8KK3NuZC1zb2MtcGNtMzE2OGEtaTJjLW9ianMgOj0gcGNtMzE2OGEtaTJjLm8KK3NuZC1zb2MtcGNtMzE2OGEtc3BpLW9ianMgOj0gcGNtMzE2OGEtc3BpLm8KIHNuZC1zb2MtcGNtNTEyeC1vYmpzIDo9IHBjbTUxMngubwogc25kLXNvYy1wY201MTJ4LWkyYy1vYmpzIDo9IHBjbTUxMngtaTJjLm8KIHNuZC1zb2MtcGNtNTEyeC1zcGktb2JqcyA6PSBwY201MTJ4LXNwaS5vCkBAIC04NSwxMCArOTIsMTIgQEAKIHNuZC1zb2Mtcmw2MzQ3YS1vYmpzIDo9IHJsNjM0N2Eubwogc25kLXNvYy1ydDI4Ni1vYmpzIDo9IHJ0Mjg2Lm8KIHNuZC1zb2MtcnQyOTgtb2JqcyA6PSBydDI5OC5vCitzbmQtc29jLXJ0NTYxNi1vYmpzIDo9IHJ0NTYxNi5vCiBzbmQtc29jLXJ0NTYzMS1vYmpzIDo9IHJ0NTYzMS5vCiBzbmQtc29jLXJ0NTY0MC1vYmpzIDo9IHJ0NTY0MC5vCiBzbmQtc29jLXJ0NTY0NS1vYmpzIDo9IHJ0NTY0NS5vCiBzbmQtc29jLXJ0NTY1MS1vYmpzIDo9IHJ0NTY1MS5vCitzbmQtc29jLXJ0NTY1OS1vYmpzIDo9IHJ0NTY1OS5vCiBzbmQtc29jLXJ0NTY3MC1vYmpzIDo9IHJ0NTY3MC5vCiBzbmQtc29jLXJ0NTY3Ny1vYmpzIDo9IHJ0NTY3Ny5vCiBzbmQtc29jLXJ0NTY3Ny1zcGktb2JqcyA6PSBydDU2Nzctc3BpLm8KQEAgLTI0Miw5ICsyNTEsMTEgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX0NTNDJYWDgpCSs9IHNuZC1zb2MtY3M0Mnh4OC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19DUzQyWFg4X0kyQykgKz0gc25kLXNvYy1jczQyeHg4LWkyYy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19DUzQzNDkpCSs9IHNuZC1zb2MtY3M0MzQ5Lm8KK29iai0kKENPTkZJR19TTkRfU09DX0NTNDdMMjQpCSs9IHNuZC1zb2MtY3M0N2wyNC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19DWDIwNDQyKQkrPSBzbmQtc29jLWN4MjA0NDIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfREE3MjEwKQkrPSBzbmQtc29jLWRhNzIxMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19EQTcyMTMpCSs9IHNuZC1zb2MtZGE3MjEzLm8KK29iai0kKENPTkZJR19TTkRfU09DX0RBNzIxOCkJKz0gc25kLXNvYy1kYTcyMTgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfREE3MjE5KQkrPSBzbmQtc29jLWRhNzIxOS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19EQTczMlgpCSs9IHNuZC1zb2MtZGE3MzJ4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0RBOTA1NSkJKz0gc25kLXNvYy1kYTkwNTUubwpAQCAtMjU0LDcgKzI2NSw5IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19FUzgzMjhfSTJDKSs9IHNuZC1zb2MtZXM4MzI4LWkyYy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19FUzgzMjhfU1BJKSs9IHNuZC1zb2MtZXM4MzI4LXNwaS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19HVE02MDEpICAgICs9IHNuZC1zb2MtZ3RtNjAxLm8KK29iai0kKENPTkZJR19TTkRfU09DX0hEQUNfSERNSSkgKz0gc25kLXNvYy1oZGFjLWhkbWkubwogb2JqLSQoQ09ORklHX1NORF9TT0NfSUNTNDM0MzIpCSs9IHNuZC1zb2MtaWNzNDM0MzIubworb2JqLSQoQ09ORklHX1NORF9TT0NfSU5OT19SSzMwMzYpCSs9IHNuZC1zb2MtaW5uby1yazMwMzYubwogb2JqLSQoQ09ORklHX1NORF9TT0NfSVNBQkVMTEUpCSs9IHNuZC1zb2MtaXNhYmVsbGUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfSlo0NzQwX0NPREVDKQkrPSBzbmQtc29jLWp6NDc0MC1jb2RlYy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19MMykJKz0gc25kLXNvYy1sMy5vCkBAIC0yNzEsOCArMjg0LDExIEBACiBvYmotJChDT05GSUdfU05EX1NPQ19NTDI2MTI0KQkrPSBzbmQtc29jLW1sMjYxMjQubwogb2JqLSQoQ09ORklHX1NORF9TT0NfTkFVODgyNSkgICArPSBzbmQtc29jLW5hdTg4MjUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfUENNMTY4MSkJKz0gc25kLXNvYy1wY20xNjgxLm8KLW9iai0kKENPTkZJR19TTkRfU09DX1BDTTE3OTJBKQkrPSBzbmQtc29jLXBjbTE3OTJhLWNvZGVjLm8KK29iai0kKENPTkZJR19TTkRfU09DX1BDTTE3OVgpCSs9IHNuZC1zb2MtcGNtMTc5eC1jb2RlYy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19QQ00zMDA4KQkrPSBzbmQtc29jLXBjbTMwMDgubworb2JqLSQoQ09ORklHX1NORF9TT0NfUENNMzE2OEEpCSs9IHNuZC1zb2MtcGNtMzE2OGEubworb2JqLSQoQ09ORklHX1NORF9TT0NfUENNMzE2OEFfSTJDKQkrPSBzbmQtc29jLXBjbTMxNjhhLWkyYy5vCitvYmotJChDT05GSUdfU05EX1NPQ19QQ00zMTY4QV9TUEkpCSs9IHNuZC1zb2MtcGNtMzE2OGEtc3BpLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1BDTTUxMngpCSs9IHNuZC1zb2MtcGNtNTEyeC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19QQ001MTJ4X0kyQykJKz0gc25kLXNvYy1wY201MTJ4LWkyYy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19QQ001MTJ4X1NQSSkJKz0gc25kLXNvYy1wY201MTJ4LXNwaS5vCkBAIC0yODAsMTAgKzI5NiwxMiBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfUkw2MzQ3QSkJKz0gc25kLXNvYy1ybDYzNDdhLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1JUMjg2KQkrPSBzbmQtc29jLXJ0Mjg2Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1JUMjk4KQkrPSBzbmQtc29jLXJ0Mjk4Lm8KK29iai0kKENPTkZJR19TTkRfU09DX1JUNTYxNikJKz0gc25kLXNvYy1ydDU2MTYubwogb2JqLSQoQ09ORklHX1NORF9TT0NfUlQ1NjMxKQkrPSBzbmQtc29jLXJ0NTYzMS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19SVDU2NDApCSs9IHNuZC1zb2MtcnQ1NjQwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1JUNTY0NSkJKz0gc25kLXNvYy1ydDU2NDUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfUlQ1NjUxKQkrPSBzbmQtc29jLXJ0NTY1MS5vCitvYmotJChDT05GSUdfU05EX1NPQ19SVDU2NTkpCSs9IHNuZC1zb2MtcnQ1NjU5Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1JUNTY3MCkJKz0gc25kLXNvYy1ydDU2NzAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfUlQ1Njc3KQkrPSBzbmQtc29jLXJ0NTY3Ny5vCiBvYmotJChDT05GSUdfU05EX1NPQ19SVDU2NzdfU1BJKQkrPSBzbmQtc29jLXJ0NTY3Ny1zcGkubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ2MTMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjEzLmMKaW5kZXggMDdhMjY2NC4uNjQ3ZjY5ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQ2MTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDYxMy5jCkBAIC03MCwxOCArNzAsMTEgQEAKICNkZWZpbmUgRk1UX01BU0sJKDB4ZjgpCiAKIC8qIENUUkwyICovCisjZGVmaW5lIERGU19NQVNLCQkoMyA8PCAyKQogI2RlZmluZSBERlNfTk9STUFMX1NQRUVECSgwIDw8IDIpCiAjZGVmaW5lIERGU19ET1VCTEVfU1BFRUQJKDEgPDwgMikKICNkZWZpbmUgREZTX1FVQURfU1BFRUQJCSgyIDw8IDIpCiAKLXN0cnVjdCBhazQ2MTNfcHJpdiB7Ci0Jc3RydWN0IG11dGV4IGxvY2s7Ci0KLQl1bnNpZ25lZCBpbnQgZm10OwotCXU4IGZtdF9jdHJsOwotCWludCBjbnQ7Ci19OwotCiBzdHJ1Y3QgYWs0NjEzX2Zvcm1hdHMgewogCXVuc2lnbmVkIGludCB3aWR0aDsKIAl1bnNpZ25lZCBpbnQgZm10OwpAQCAtOTIsNiArODUsMTYgQEAKIAlzdHJ1Y3QgYWs0NjEzX2Zvcm1hdHMgcGxheWJhY2s7CiB9OwogCitzdHJ1Y3QgYWs0NjEzX3ByaXYgeworCXN0cnVjdCBtdXRleCBsb2NrOworCWNvbnN0IHN0cnVjdCBhazQ2MTNfaW50ZXJmYWNlICppZmFjZTsKKworCXVuc2lnbmVkIGludCBmbXQ7CisJdTggb2M7CisJdTggaWM7CisJaW50IGNudDsKK307CisKIC8qCiAgKiBQbGF5YmFjayBWb2x1bWUKICAqCkBAIC0xMjYsNyArMTI5LDcgQEAKIAl7IDB4MTQsIDB4MDAgfSwgeyAweDE1LCAweDAwIH0sIHsgMHgxNiwgMHgwMCB9LAogfTsKIAotI2RlZmluZSBBVURJT19JRkFDRV9JRFhfVE9fVkFMKGkpIChpIDw8IDMpCisjZGVmaW5lIEFVRElPX0lGQUNFX1RPX1ZBTChmbXRzKSAoKGZtdHMgLSBhazQ2MTNfaWZhY2UpIDw8IDMpCiAjZGVmaW5lIEFVRElPX0lGQUNFKGIsIGZtdCkgeyBiLCBTTkRfU09DX0RBSUZNVF8jI2ZtdCB9CiBzdGF0aWMgY29uc3Qgc3RydWN0IGFrNDYxM19pbnRlcmZhY2UgYWs0NjEzX2lmYWNlW10gPSB7CiAJLyogY2FwdHVyZSAqLwkJCQkvKiBwbGF5YmFjayAqLwpAQCAtMjQwLDcgKzI0Myw3IEBACiAJCXByaXYtPmNudCA9IDA7CiAJfQogCWlmICghcHJpdi0+Y250KQotCQlwcml2LT5mbXRfY3RybCA9IE5PX0ZNVDsKKwkJcHJpdi0+aWZhY2UgPSBOVUxMOwogCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CiB9CiAKQEAgLTI2NSwxMyArMjY4LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBib29sIGFrNDYxM19kYWlfZm10X21hdGNoaW5nKGNvbnN0IHN0cnVjdCBhazQ2MTNfaW50ZXJmYWNlICppZmFjZSwKKwkJCQkgICAgaW50IGlzX3BsYXksCisJCQkJICAgIHVuc2lnbmVkIGludCBmbXQsIHVuc2lnbmVkIGludCB3aWR0aCkKK3sKKwljb25zdCBzdHJ1Y3QgYWs0NjEzX2Zvcm1hdHMgKmZtdHM7CisKKwlmbXRzID0gKGlzX3BsYXkpID8gJmlmYWNlLT5wbGF5YmFjayA6ICZpZmFjZS0+Y2FwdHVyZTsKKworCWlmIChmbXRzLT5mbXQgIT0gZm10KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZm10ID09IFNORF9TT0NfREFJRk1UX1JJR0hUX0opIHsKKwkJaWYgKGZtdHMtPndpZHRoICE9IHdpZHRoKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSB7CisJCWlmIChmbXRzLT53aWR0aCA8IHdpZHRoKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgaW50IGFrNDYxM19kYWlfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CiAJc3RydWN0IGFrNDYxM19wcml2ICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JY29uc3Qgc3RydWN0IGFrNDYxM19mb3JtYXRzICpmbXRzOworCWNvbnN0IHN0cnVjdCBhazQ2MTNfaW50ZXJmYWNlICppZmFjZTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb2RlYy0+ZGV2OwogCXVuc2lnbmVkIGludCB3aWR0aCA9IHBhcmFtc193aWR0aChwYXJhbXMpOwogCXVuc2lnbmVkIGludCBmbXQgPSBwcml2LT5mbXQ7CkBAIC0zMDUsMzMgKzMzMCwyNyBAQAogCSAqIEl0IGRvZXNuJ3Qgc3VwcG9ydCBURE0gYXQgdGhpcyBwb2ludAogCSAqLwogCWZtdF9jdHJsID0gTk9fRk1UOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFrNDYxM19pZmFjZSk7IGkrKykgewotCQlmbXRzID0gKGlzX3BsYXkpID8JJmFrNDYxM19pZmFjZVtpXS5wbGF5YmFjayA6Ci0JCQkJCSZhazQ2MTNfaWZhY2VbaV0uY2FwdHVyZTsKLQotCQlpZiAoZm10cy0+Zm10ICE9IGZtdCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChmbXQgPT0gU05EX1NPQ19EQUlGTVRfUklHSFRfSikgewotCQkJaWYgKGZtdHMtPndpZHRoICE9IHdpZHRoKQotCQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgewotCQkJaWYgKGZtdHMtPndpZHRoIDwgd2lkdGgpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlmbXRfY3RybCA9IEFVRElPX0lGQUNFX0lEWF9UT19WQUwoaSk7Ci0JCWJyZWFrOwotCX0KLQogCXJldCA9IC1FSU5WQUw7Ci0JaWYgKGZtdF9jdHJsID09IE5PX0ZNVCkKLQkJZ290byBod19wYXJhbXNfZW5kOworCWlmYWNlID0gTlVMTDsKIAogCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwotCWlmICgocHJpdi0+Zm10X2N0cmwgPT0gTk9fRk1UKSB8fAotCSAgICAocHJpdi0+Zm10X2N0cmwgPT0gZm10X2N0cmwpKSB7Ci0JCXByaXYtPmZtdF9jdHJsID0gZm10X2N0cmw7CisJaWYgKHByaXYtPmlmYWNlKSB7CisJCWlmIChhazQ2MTNfZGFpX2ZtdF9tYXRjaGluZyhwcml2LT5pZmFjZSwgaXNfcGxheSwgZm10LCB3aWR0aCkpCisJCQlpZmFjZSA9IHByaXYtPmlmYWNlOworCX0gZWxzZSB7CisJCWZvciAoaSA9IEFSUkFZX1NJWkUoYWs0NjEzX2lmYWNlKTsgaSA+PSAwOyBpLS0pIHsKKwkJCWlmICghYWs0NjEzX2RhaV9mbXRfbWF0Y2hpbmcoYWs0NjEzX2lmYWNlICsgaSwKKwkJCQkJCSAgICAgaXNfcGxheSwKKwkJCQkJCSAgICAgZm10LCB3aWR0aCkpCisJCQkJY29udGludWU7CisJCQlpZmFjZSA9IGFrNDYxM19pZmFjZSArIGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICgocHJpdi0+aWZhY2UgPT0gTlVMTCkgfHwKKwkgICAgKHByaXYtPmlmYWNlID09IGlmYWNlKSkgeworCQlwcml2LT5pZmFjZSA9IGlmYWNlOwogCQlwcml2LT5jbnQrKzsKIAkJcmV0ID0gMDsKIAl9CkBAIC0zNDAsOCArMzU5LDEzIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gaHdfcGFyYW1zX2VuZDsKIAorCWZtdF9jdHJsID0gQVVESU9fSUZBQ0VfVE9fVkFMKGlmYWNlKTsKKwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIENUUkwxLCBGTVRfTUFTSywgZm10X2N0cmwpOwotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIENUUkwyLCBjdHJsMik7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQ1RSTDIsIERGU19NQVNLLCBjdHJsMik7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBJQ1RSTCwgcHJpdi0+aWMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIE9DVFJMLCBwcml2LT5vYyk7CiAKIGh3X3BhcmFtc19lbmQ6CiAJaWYgKHJldCA8IDApCkBAIC00MzEsNiArNDU1LDI4IEBACiAJLm51bV9kYXBtX3JvdXRlcwk9IEFSUkFZX1NJWkUoYWs0NjEzX2ludGVyY29uKSwKIH07CiAKK3N0YXRpYyB2b2lkIGFrNDYxM19wYXJzZV9vZihzdHJ1Y3QgYWs0NjEzX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJY2hhciBwcm9wWzMyXTsKKwlpbnQgaTsKKworCS8qIElucHV0IDEgLSAyICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlzbnByaW50Zihwcm9wLCBzaXplb2YocHJvcCksICJhc2FoaS1rYXNlaSxpbiVkLXNpbmdsZS1lbmQiLCBpICsgMSk7CisJCWlmICghb2ZfZ2V0X3Byb3BlcnR5KG5wLCBwcm9wLCBOVUxMKSkKKwkJCXByaXYtPmljIHw9IDEgPDwgaTsKKwl9CisKKwkvKiBPdXRwdXQgMSAtIDYgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCXNucHJpbnRmKHByb3AsIHNpemVvZihwcm9wKSwgImFzYWhpLWthc2VpLG91dCVkLXNpbmdsZS1lbmQiLCBpICsgMSk7CisJCWlmICghb2ZfZ2V0X3Byb3BlcnR5KG5wLCBwcm9wLCBOVUxMKSkKKwkJCXByaXYtPm9jIHw9IDEgPDwgaTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgYWs0NjEzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTQ1OCw3ICs1MDQsOSBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcml2LT5mbXRfY3RybAkJPSBOT19GTVQ7CisJYWs0NjEzX3BhcnNlX29mKHByaXYsIGRldik7CisKKwlwcml2LT5pZmFjZQkJPSBOVUxMOwogCXByaXYtPmNudAkJPSAwOwogCiAJbXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FyaXpvbmEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5jCmluZGV4IDk5MjllZmMuLjMzMTQzZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFyaXpvbmFfaW5pdF9ncGlvKTsKIAotY29uc3QgY2hhciAqYXJpem9uYV9taXhlcl90ZXh0c1tBUklaT05BX05VTV9NSVhFUl9JTlBVVFNdID0geworY29uc3QgY2hhciAqIGNvbnN0IGFyaXpvbmFfbWl4ZXJfdGV4dHNbQVJJWk9OQV9OVU1fTUlYRVJfSU5QVVRTXSA9IHsKIAkiTm9uZSIsCiAJIlRvbmUgR2VuZXJhdG9yIDEiLAogCSJUb25lIEdlbmVyYXRvciAyIiwKQEAgLTQxOCw3ICs0MTgsNyBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFyaXpvbmFfbWl4ZXJfdGV4dHMpOwogCi1pbnQgYXJpem9uYV9taXhlcl92YWx1ZXNbQVJJWk9OQV9OVU1fTUlYRVJfSU5QVVRTXSA9IHsKK3Vuc2lnbmVkIGludCBhcml6b25hX21peGVyX3ZhbHVlc1tBUklaT05BX05VTV9NSVhFUl9JTlBVVFNdID0gewogCTB4MDAsICAvKiBOb25lICovCiAJMHgwNCwgIC8qIFRvbmUgKi8KIAkweDA1LApAQCAtNTU1LDEyICs1NTUsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFyaXpvbmFfc2FtcGxlX3JhdGVfdmFsX3RvX25hbWUpOwogCi1jb25zdCBjaGFyICphcml6b25hX3JhdGVfdGV4dFtBUklaT05BX1JBVEVfRU5VTV9TSVpFXSA9IHsKK2NvbnN0IGNoYXIgKiBjb25zdCBhcml6b25hX3JhdGVfdGV4dFtBUklaT05BX1JBVEVfRU5VTV9TSVpFXSA9IHsKIAkiU1lOQ0NMSyByYXRlIiwgIjhrSHoiLCAiMTZrSHoiLCAiQVNZTkNDTEsgcmF0ZSIsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYXJpem9uYV9yYXRlX3RleHQpOwogCi1jb25zdCBpbnQgYXJpem9uYV9yYXRlX3ZhbFtBUklaT05BX1JBVEVfRU5VTV9TSVpFXSA9IHsKK2NvbnN0IHVuc2lnbmVkIGludCBhcml6b25hX3JhdGVfdmFsW0FSSVpPTkFfUkFURV9FTlVNX1NJWkVdID0gewogCTAsIDEsIDIsIDgsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYXJpem9uYV9yYXRlX3ZhbCk7CkBAIC03MDIsNiArNzAyLDEwMCBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFyaXpvbmFfaW5fZG1pY19vc3IpOwogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFyaXpvbmFfYW5jX2lucHV0X3NyY190ZXh0W10gPSB7CisJIk5vbmUiLCAiSU4xIiwgIklOMiIsICJJTjMiLCAiSU40IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXJpem9uYV9hbmNfY2hhbm5lbF9zcmNfdGV4dFtdID0geworCSJOb25lIiwgIkxlZnQiLCAiUmlnaHQiLCAiQ29tYmluZSIsCit9OworCitjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYXJpem9uYV9hbmNfaW5wdXRfc3JjW10gPSB7CisJU09DX0VOVU1fU0lOR0xFKEFSSVpPTkFfQU5DX1NSQywKKwkJCUFSSVpPTkFfSU5fUlhBTkNMX1NFTF9TSElGVCwKKwkJCUFSUkFZX1NJWkUoYXJpem9uYV9hbmNfaW5wdXRfc3JjX3RleHQpLAorCQkJYXJpem9uYV9hbmNfaW5wdXRfc3JjX3RleHQpLAorCVNPQ19FTlVNX1NJTkdMRShBUklaT05BX0ZDTF9BRENfUkVGT1JNQVRURVJfQ09OVFJPTCwKKwkJCUFSSVpPTkFfRkNMX01JQ19NT0RFX1NFTCwKKwkJCUFSUkFZX1NJWkUoYXJpem9uYV9hbmNfY2hhbm5lbF9zcmNfdGV4dCksCisJCQlhcml6b25hX2FuY19jaGFubmVsX3NyY190ZXh0KSwKKwlTT0NfRU5VTV9TSU5HTEUoQVJJWk9OQV9BTkNfU1JDLAorCQkJQVJJWk9OQV9JTl9SWEFOQ1JfU0VMX1NISUZULAorCQkJQVJSQVlfU0laRShhcml6b25hX2FuY19pbnB1dF9zcmNfdGV4dCksCisJCQlhcml6b25hX2FuY19pbnB1dF9zcmNfdGV4dCksCisJU09DX0VOVU1fU0lOR0xFKEFSSVpPTkFfRkNSX0FEQ19SRUZPUk1BVFRFUl9DT05UUk9MLAorCQkJQVJJWk9OQV9GQ1JfTUlDX01PREVfU0VMLAorCQkJQVJSQVlfU0laRShhcml6b25hX2FuY19jaGFubmVsX3NyY190ZXh0KSwKKwkJCWFyaXpvbmFfYW5jX2NoYW5uZWxfc3JjX3RleHQpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGFyaXpvbmFfYW5jX2lucHV0X3NyYyk7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXJpem9uYV9hbmNfbmdfdGV4dHNbXSA9IHsKKwkiTm9uZSIsCisJIkludGVybmFsIiwKKwkiRXh0ZXJuYWwiLAorfTsKKworU09DX0VOVU1fU0lOR0xFX0RFQ0woYXJpem9uYV9hbmNfbmdfZW51bSwgU05EX1NPQ19OT1BNLCAwLAorCQkgICAgIGFyaXpvbmFfYW5jX25nX3RleHRzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGFyaXpvbmFfYW5jX25nX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dFtdID0geworCSJOb25lIiwgIlJYQU5DTCIsICJSWEFOQ1IiLAorfTsKKworY29uc3Qgc3RydWN0IHNvY19lbnVtIGFyaXpvbmFfb3V0cHV0X2FuY19zcmNbXSA9IHsKKwlTT0NfRU5VTV9TSU5HTEUoQVJJWk9OQV9PVVRQVVRfUEFUSF9DT05GSUdfMUwsCisJCQlBUklaT05BX09VVDFMX0FOQ19TUkNfU0hJRlQsCisJCQlBUlJBWV9TSVpFKGFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dCksCisJCQlhcml6b25hX291dHB1dF9hbmNfc3JjX3RleHQpLAorCVNPQ19FTlVNX1NJTkdMRShBUklaT05BX09VVFBVVF9QQVRIX0NPTkZJR18xUiwKKwkJCUFSSVpPTkFfT1VUMVJfQU5DX1NSQ19TSElGVCwKKwkJCUFSUkFZX1NJWkUoYXJpem9uYV9vdXRwdXRfYW5jX3NyY190ZXh0KSwKKwkJCWFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dCksCisJU09DX0VOVU1fU0lOR0xFKEFSSVpPTkFfT1VUUFVUX1BBVEhfQ09ORklHXzJMLAorCQkJQVJJWk9OQV9PVVQyTF9BTkNfU1JDX1NISUZULAorCQkJQVJSQVlfU0laRShhcml6b25hX291dHB1dF9hbmNfc3JjX3RleHQpLAorCQkJYXJpem9uYV9vdXRwdXRfYW5jX3NyY190ZXh0KSwKKwlTT0NfRU5VTV9TSU5HTEUoQVJJWk9OQV9PVVRQVVRfUEFUSF9DT05GSUdfMlIsCisJCQlBUklaT05BX09VVDJSX0FOQ19TUkNfU0hJRlQsCisJCQlBUlJBWV9TSVpFKGFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dCksCisJCQlhcml6b25hX291dHB1dF9hbmNfc3JjX3RleHQpLAorCVNPQ19FTlVNX1NJTkdMRShBUklaT05BX09VVFBVVF9QQVRIX0NPTkZJR18zTCwKKwkJCUFSSVpPTkFfT1VUM0xfQU5DX1NSQ19TSElGVCwKKwkJCUFSUkFZX1NJWkUoYXJpem9uYV9vdXRwdXRfYW5jX3NyY190ZXh0KSwKKwkJCWFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dCksCisJU09DX0VOVU1fU0lOR0xFKEFSSVpPTkFfREFDX1ZPTFVNRV9MSU1JVF8zUiwKKwkJCUFSSVpPTkFfT1VUM1JfQU5DX1NSQ19TSElGVCwKKwkJCUFSUkFZX1NJWkUoYXJpem9uYV9vdXRwdXRfYW5jX3NyY190ZXh0KSwKKwkJCWFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dCksCisJU09DX0VOVU1fU0lOR0xFKEFSSVpPTkFfT1VUUFVUX1BBVEhfQ09ORklHXzRMLAorCQkJQVJJWk9OQV9PVVQ0TF9BTkNfU1JDX1NISUZULAorCQkJQVJSQVlfU0laRShhcml6b25hX291dHB1dF9hbmNfc3JjX3RleHQpLAorCQkJYXJpem9uYV9vdXRwdXRfYW5jX3NyY190ZXh0KSwKKwlTT0NfRU5VTV9TSU5HTEUoQVJJWk9OQV9PVVRQVVRfUEFUSF9DT05GSUdfNFIsCisJCQlBUklaT05BX09VVDRSX0FOQ19TUkNfU0hJRlQsCisJCQlBUlJBWV9TSVpFKGFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dCksCisJCQlhcml6b25hX291dHB1dF9hbmNfc3JjX3RleHQpLAorCVNPQ19FTlVNX1NJTkdMRShBUklaT05BX09VVFBVVF9QQVRIX0NPTkZJR181TCwKKwkJCUFSSVpPTkFfT1VUNUxfQU5DX1NSQ19TSElGVCwKKwkJCUFSUkFZX1NJWkUoYXJpem9uYV9vdXRwdXRfYW5jX3NyY190ZXh0KSwKKwkJCWFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dCksCisJU09DX0VOVU1fU0lOR0xFKEFSSVpPTkFfT1VUUFVUX1BBVEhfQ09ORklHXzVSLAorCQkJQVJJWk9OQV9PVVQ1Ul9BTkNfU1JDX1NISUZULAorCQkJQVJSQVlfU0laRShhcml6b25hX291dHB1dF9hbmNfc3JjX3RleHQpLAorCQkJYXJpem9uYV9vdXRwdXRfYW5jX3NyY190ZXh0KSwKKwlTT0NfRU5VTV9TSU5HTEUoQVJJWk9OQV9PVVRQVVRfUEFUSF9DT05GSUdfNkwsCisJCQlBUklaT05BX09VVDZMX0FOQ19TUkNfU0hJRlQsCisJCQlBUlJBWV9TSVpFKGFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dCksCisJCQlhcml6b25hX291dHB1dF9hbmNfc3JjX3RleHQpLAorCVNPQ19FTlVNX1NJTkdMRShBUklaT05BX09VVFBVVF9QQVRIX0NPTkZJR182UiwKKwkJCUFSSVpPTkFfT1VUNlJfQU5DX1NSQ19TSElGVCwKKwkJCUFSUkFZX1NJWkUoYXJpem9uYV9vdXRwdXRfYW5jX3NyY190ZXh0KSwKKwkJCWFyaXpvbmFfb3V0cHV0X2FuY19zcmNfdGV4dCksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoYXJpem9uYV9vdXRwdXRfYW5jX3NyYyk7CisKIHN0YXRpYyB2b2lkIGFyaXpvbmFfaW5fc2V0X3Z1KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGVuYSkKIHsKIAlzdHJ1Y3QgYXJpem9uYV9wcml2ICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CkBAIC0xMDIzLDI0ICsxMTE3LDQzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhcml6b25hX2luaXRfZHZmcyk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXJpem9uYV9zeXNjbGtfNDhrX3JhdGVzW10gPSB7CitpbnQgYXJpem9uYV9hbmNfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkgICBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCXVuc2lnbmVkIGludCBtYXNrID0gMHgzIDw8IHctPnNoaWZ0OworCXVuc2lnbmVkIGludCB2YWw7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCXZhbCA9IDEgPDwgdy0+c2hpZnQ7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCXZhbCA9IDEgPDwgKHctPnNoaWZ0ICsgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFSSVpPTkFfQ0xPQ0tfQ09OVFJPTCwgbWFzaywgdmFsKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXJpem9uYV9hbmNfZXYpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGFyaXpvbmFfb3BjbGtfcmVmXzQ4a19yYXRlc1tdID0gewogCTYxNDQwMDAsCiAJMTIyODgwMDAsCiAJMjQ1NzYwMDAsCiAJNDkxNTIwMDAsCi0JNzM3MjgwMDAsCi0JOTgzMDQwMDAsCi0JMTQ3NDU2MDAwLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBhcml6b25hX3N5c2Nsa180NGsxX3JhdGVzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGFyaXpvbmFfb3BjbGtfcmVmXzQ0azFfcmF0ZXNbXSA9IHsKIAk1NjQ0ODAwLAogCTExMjg5NjAwLAogCTIyNTc5MjAwLAogCTQ1MTU4NDAwLAotCTY3NzM3NjAwLAotCTkwMzE2ODAwLAotCTEzNTQ3NTIwMCwKIH07CiAKIHN0YXRpYyBpbnQgYXJpem9uYV9zZXRfb3BjbGsoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgY2xrLApAQCAtMTA2NSwxMSArMTE3OCwxMSBAQAogCX0KIAogCWlmIChyZWZjbGsgJSA4MDAwKQotCQlyYXRlcyA9IGFyaXpvbmFfc3lzY2xrXzQ0azFfcmF0ZXM7CisJCXJhdGVzID0gYXJpem9uYV9vcGNsa19yZWZfNDRrMV9yYXRlczsKIAllbHNlCi0JCXJhdGVzID0gYXJpem9uYV9zeXNjbGtfNDhrX3JhdGVzOworCQlyYXRlcyA9IGFyaXpvbmFfb3BjbGtfcmVmXzQ4a19yYXRlczsKIAotCWZvciAocmVmID0gMDsgcmVmIDwgQVJSQVlfU0laRShhcml6b25hX3N5c2Nsa180OGtfcmF0ZXMpICYmCisJZm9yIChyZWYgPSAwOyByZWYgPCBBUlJBWV9TSVpFKGFyaXpvbmFfb3BjbGtfcmVmXzQ4a19yYXRlcykgJiYKIAkJICAgICByYXRlc1tyZWZdIDw9IHJlZmNsazsgcmVmKyspIHsKIAkJZGl2ID0gMTsKIAkJd2hpbGUgKHJhdGVzW3JlZl0gLyBkaXYgPj0gZnJlcSAmJiBkaXYgPCAzMikgewpAQCAtMTEwMSw3ICsxMjE0LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnOwogCXVuc2lnbmVkIGludCBtYXNrID0gQVJJWk9OQV9TWVNDTEtfRlJFUV9NQVNLIHwgQVJJWk9OQV9TWVNDTEtfU1JDX01BU0s7CiAJdW5zaWduZWQgaW50IHZhbCA9IHNvdXJjZSA8PCBBUklaT05BX1NZU0NMS19TUkNfU0hJRlQ7Ci0JdW5zaWduZWQgaW50ICpjbGs7CisJaW50ICpjbGs7CiAKIAlzd2l0Y2ggKGNsa19pZCkgewogCWNhc2UgQVJJWk9OQV9DTEtfU1lTQ0xLOgpAQCAtMTM4MSw2ICsxNDk0LDkgQEAKIAljb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgKmNvbnN0cmFpbnQ7CiAJdW5zaWduZWQgaW50IGJhc2VfcmF0ZTsKIAorCWlmICghc3Vic3RyZWFtLT5ydW50aW1lKQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAoZGFpX3ByaXYtPmNsaykgewogCWNhc2UgQVJJWk9OQV9DTEtfU1lTQ0xLOgogCQliYXNlX3JhdGUgPSBwcml2LT5zeXNjbGs7CkBAIC0xNTQzLDcgKzE2NTksNyBAQAogCWJvb2wgcmVjb25maWc7CiAJdW5zaWduZWQgaW50IGFpZl90eF9zdGF0ZSwgYWlmX3J4X3N0YXRlOwogCi0JaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgJSA4MDAwKQorCWlmIChwYXJhbXNfcmF0ZShwYXJhbXMpICUgNDAwMCkKIAkJcmF0ZXMgPSAmYXJpem9uYV80NGsxX2JjbGtfcmF0ZXNbMF07CiAJZWxzZQogCQlyYXRlcyA9ICZhcml6b25hXzQ4a19iY2xrX3JhdGVzWzBdOwpAQCAtMTkwNywxOCArMjAyMywxOCBAQAogCX0KIAogCXN3aXRjaCAoZmxsLT5hcml6b25hLT50eXBlKSB7CisJY2FzZSBXTTUxMDI6CisJY2FzZSBXTTg5OTc6CisJCXJldHVybiBpbml0X3JhdGlvOwogCWNhc2UgV001MTEwOgogCWNhc2UgV004MjgwOgogCQlpZiAoZmxsLT5hcml6b25hLT5yZXYgPCAzIHx8IHN5bmMpCiAJCQlyZXR1cm4gaW5pdF9yYXRpbzsKIAkJYnJlYWs7Ci0JY2FzZSBXTTg5OTg6Ci0JY2FzZSBXTTE4MTQ6CisJZGVmYXVsdDoKIAkJaWYgKHN5bmMpCiAJCQlyZXR1cm4gaW5pdF9yYXRpbzsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGluaXRfcmF0aW87CiAJfQogCiAJY2ZnLT5mcmF0aW8gPSBpbml0X3JhdGlvIC0gMTsKQEAgLTIwOTksOSArMjIxNSw5IEBACiAJCS8qIEZhY2lsaXRhdGUgc21vb3RoIHJlZmNsayBhY3Jvc3MgdGhlIHRyYW5zaXRpb24gKi8KIAkJcmVnbWFwX3VwZGF0ZV9iaXRzX2FzeW5jKGZsbC0+YXJpem9uYS0+cmVnbWFwLCBmbGwtPmJhc2UgKyAweDksCiAJCQkJCSBBUklaT05BX0ZMTDFfR0FJTl9NQVNLLCAwKTsKLQkJcmVnbWFwX3VwZGF0ZV9iaXRzX2FzeW5jKGZsbC0+YXJpem9uYS0+cmVnbWFwLCBmbGwtPmJhc2UgKyAxLAotCQkJCQkgQVJJWk9OQV9GTEwxX0ZSRUVSVU4sCi0JCQkJCSBBUklaT05BX0ZMTDFfRlJFRVJVTik7CisJCXJlZ21hcF91cGRhdGVfYml0cyhmbGwtPmFyaXpvbmEtPnJlZ21hcCwgZmxsLT5iYXNlICsgMSwKKwkJCQkgICBBUklaT05BX0ZMTDFfRlJFRVJVTiwgQVJJWk9OQV9GTEwxX0ZSRUVSVU4pOworCQl1ZGVsYXkoMzIpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FyaXpvbmEuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5oCmluZGV4IGZlYThiOGEuLjhiNmFkYjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5oCkBAIC01Nyw3ICs1Nyw3IEBACiAjZGVmaW5lIEFSSVpPTkFfQ0xLXzk4TUhaICA1CiAjZGVmaW5lIEFSSVpPTkFfQ0xLXzE0N01IWiA2CiAKLSNkZWZpbmUgQVJJWk9OQV9NQVhfREFJICA2CisjZGVmaW5lIEFSSVpPTkFfTUFYX0RBSSAgOAogI2RlZmluZSBBUklaT05BX01BWF9BRFNQIDQKIAogI2RlZmluZSBBUklaT05BX0RWRlNfU1IxX1JRCTB4MDAxCkBAIC05Niw4ICs5Niw4IEBACiAjZGVmaW5lIEFSSVpPTkFfTlVNX01JWEVSX0lOUFVUUyAxMDQKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBhcml6b25hX21peGVyX3RsdltdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmFyaXpvbmFfbWl4ZXJfdGV4dHNbQVJJWk9OQV9OVU1fTUlYRVJfSU5QVVRTXTsKLWV4dGVybiBpbnQgYXJpem9uYV9taXhlcl92YWx1ZXNbQVJJWk9OQV9OVU1fTUlYRVJfSU5QVVRTXTsKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgYXJpem9uYV9taXhlcl90ZXh0c1tBUklaT05BX05VTV9NSVhFUl9JTlBVVFNdOworZXh0ZXJuIHVuc2lnbmVkIGludCBhcml6b25hX21peGVyX3ZhbHVlc1tBUklaT05BX05VTV9NSVhFUl9JTlBVVFNdOwogCiAjZGVmaW5lIEFSSVpPTkFfR0FJTk1VWF9DT05UUk9MUyhuYW1lLCBiYXNlKSBcCiAJU09DX1NJTkdMRV9SQU5HRV9UTFYobmFtZSAiIElucHV0IFZvbHVtZSIsIGJhc2UgKyAxLAkJXApAQCAtMjE2LDggKzIxNiw4IEBACiAjZGVmaW5lIEFSSVpPTkFfUkFURV9FTlVNX1NJWkUgNAogI2RlZmluZSBBUklaT05BX1NBTVBMRV9SQVRFX0VOVU1fU0laRSAxNAogCi1leHRlcm4gY29uc3QgY2hhciAqYXJpem9uYV9yYXRlX3RleHRbQVJJWk9OQV9SQVRFX0VOVU1fU0laRV07Ci1leHRlcm4gY29uc3QgaW50IGFyaXpvbmFfcmF0ZV92YWxbQVJJWk9OQV9SQVRFX0VOVU1fU0laRV07CitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGFyaXpvbmFfcmF0ZV90ZXh0W0FSSVpPTkFfUkFURV9FTlVNX1NJWkVdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBhcml6b25hX3JhdGVfdmFsW0FSSVpPTkFfUkFURV9FTlVNX1NJWkVdOwogZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBhcml6b25hX3NhbXBsZV9yYXRlX3RleHRbQVJJWk9OQV9TQU1QTEVfUkFURV9FTlVNX1NJWkVdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBhcml6b25hX3NhbXBsZV9yYXRlX3ZhbFtBUklaT05BX1NBTVBMRV9SQVRFX0VOVU1fU0laRV07CiAKQEAgLTI0Miw2ICsyNDIsMTAgQEAKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFyaXpvbmFfYWRzcDJfcmF0ZV9jb250cm9sc1tdOwogCitleHRlcm4gY29uc3Qgc3RydWN0IHNvY19lbnVtIGFyaXpvbmFfYW5jX2lucHV0X3NyY1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhcml6b25hX2FuY19uZ19lbnVtOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhcml6b25hX291dHB1dF9hbmNfc3JjW107CisKIGV4dGVybiBpbnQgYXJpem9uYV9pbl9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSBpbnQgZXZlbnQpOwpAQCAtMjUxLDYgKzI1NSw5IEBACiBleHRlcm4gaW50IGFyaXpvbmFfaHBfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgaW50IGV2ZW50KTsKK2V4dGVybiBpbnQgYXJpem9uYV9hbmNfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICBpbnQgZXZlbnQpOwogCiBleHRlcm4gaW50IGFyaXpvbmFfZXFfY29lZmZfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0N2wyNC5jIGIvc291bmQvc29jL2NvZGVjcy9jczQ3bDI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1YWU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0N2wyNC5jCkBAIC0wLDAgKzEsMTE0OCBAQAorLyoKKyAqIGNzNDdsMjQuaCAgLS0gIEFMU0EgU29DIEF1ZGlvIGRyaXZlciBmb3IgQ2lycnVzIExvZ2ljIENTNDdMMjQKKyAqCisgKiBDb3B5cmlnaHQgMjAxNSBDaXJydXMgTG9naWMgSW5jLgorICoKKyAqIEF1dGhvcjogUmljaGFyZCBGaXR6Z2VyYWxkIDxyZkBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL2FyaXpvbmEvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9hcml6b25hL3JlZ2lzdGVycy5oPgorCisjaW5jbHVkZSAiYXJpem9uYS5oIgorI2luY2x1ZGUgIndtX2Fkc3AuaCIKKyNpbmNsdWRlICJjczQ3bDI0LmgiCisKK3N0cnVjdCBjczQ3bDI0X3ByaXYgeworCXN0cnVjdCBhcml6b25hX3ByaXYgY29yZTsKKwlzdHJ1Y3QgYXJpem9uYV9mbGwgZmxsWzJdOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3bV9hZHNwX3JlZ2lvbiBjczQ3bDI0X2RzcDJfcmVnaW9uc1tdID0geworCXsgLnR5cGUgPSBXTUZXX0FEU1AyX1BNLCAuYmFzZSA9IDB4MjAwMDAwIH0sCisJeyAudHlwZSA9IFdNRldfQURTUDJfWk0sIC5iYXNlID0gMHgyODAwMDAgfSwKKwl7IC50eXBlID0gV01GV19BRFNQMl9YTSwgLmJhc2UgPSAweDI5MDAwMCB9LAorCXsgLnR5cGUgPSBXTUZXX0FEU1AyX1lNLCAuYmFzZSA9IDB4MmE4MDAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHdtX2Fkc3BfcmVnaW9uIGNzNDdsMjRfZHNwM19yZWdpb25zW10gPSB7CisJeyAudHlwZSA9IFdNRldfQURTUDJfUE0sIC5iYXNlID0gMHgzMDAwMDAgfSwKKwl7IC50eXBlID0gV01GV19BRFNQMl9aTSwgLmJhc2UgPSAweDM4MDAwMCB9LAorCXsgLnR5cGUgPSBXTUZXX0FEU1AyX1hNLCAuYmFzZSA9IDB4MzkwMDAwIH0sCisJeyAudHlwZSA9IFdNRldfQURTUDJfWU0sIC5iYXNlID0gMHgzYTgwMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd21fYWRzcF9yZWdpb24gKmNzNDdsMjRfZHNwX3JlZ2lvbnNbXSA9IHsKKwljczQ3bDI0X2RzcDJfcmVnaW9ucywKKwljczQ3bDI0X2RzcDNfcmVnaW9ucywKK307CisKK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShlcV90bHYsIC0xMjAwLCAxMDAsIDApOworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGRpZ2l0YWxfdGx2LCAtNjQwMCwgNTAsIDApOworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKG5vaXNlX3RsdiwgLTEzMjAwLCA2MDAsIDApOworc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKG5nX3RsdiwgLTEwMjAwLCA2MDAsIDApOworCisjZGVmaW5lIENTNDdMMjRfTkdfU1JDKG5hbWUsIGJhc2UpIFwKKwlTT0NfU0lOR0xFKG5hbWUgIiBORyBIUE9VVDFMIFN3aXRjaCIsICBiYXNlLCAgMCwgMSwgMCksIFwKKwlTT0NfU0lOR0xFKG5hbWUgIiBORyBIUE9VVDFSIFN3aXRjaCIsICBiYXNlLCAgMSwgMSwgMCksIFwKKwlTT0NfU0lOR0xFKG5hbWUgIiBORyBTUEtPVVQgU3dpdGNoIiwgIGJhc2UsICA2LCAxLCAwKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3M0N2wyNF9zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19FTlVNKCJJTjEgT1NSIiwgYXJpem9uYV9pbl9kbWljX29zclswXSksCitTT0NfRU5VTSgiSU4yIE9TUiIsIGFyaXpvbmFfaW5fZG1pY19vc3JbMV0pLAorCitTT0NfRU5VTSgiSU4gSFBGIEN1dG9mZiBGcmVxdWVuY3kiLCBhcml6b25hX2luX2hwZl9jdXRfZW51bSksCisKK1NPQ19TSU5HTEUoIklOMUwgSFBGIFN3aXRjaCIsIEFSSVpPTkFfSU4xTF9DT05UUk9MLAorCSAgIEFSSVpPTkFfSU4xTF9IUEZfU0hJRlQsIDEsIDApLAorU09DX1NJTkdMRSgiSU4xUiBIUEYgU3dpdGNoIiwgQVJJWk9OQV9JTjFSX0NPTlRST0wsCisJICAgQVJJWk9OQV9JTjFSX0hQRl9TSElGVCwgMSwgMCksCitTT0NfU0lOR0xFKCJJTjJMIEhQRiBTd2l0Y2giLCBBUklaT05BX0lOMkxfQ09OVFJPTCwKKwkgICBBUklaT05BX0lOMkxfSFBGX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEUoIklOMlIgSFBGIFN3aXRjaCIsIEFSSVpPTkFfSU4yUl9DT05UUk9MLAorCSAgIEFSSVpPTkFfSU4yUl9IUEZfU0hJRlQsIDEsIDApLAorCitTT0NfU0lOR0xFX1RMVigiSU4xTCBEaWdpdGFsIFZvbHVtZSIsIEFSSVpPTkFfQURDX0RJR0lUQUxfVk9MVU1FXzFMLAorCSAgICAgICBBUklaT05BX0lOMUxfRElHX1ZPTF9TSElGVCwgMHhiZiwgMCwgZGlnaXRhbF90bHYpLAorU09DX1NJTkdMRV9UTFYoIklOMVIgRGlnaXRhbCBWb2x1bWUiLCBBUklaT05BX0FEQ19ESUdJVEFMX1ZPTFVNRV8xUiwKKwkgICAgICAgQVJJWk9OQV9JTjFSX0RJR19WT0xfU0hJRlQsIDB4YmYsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJJTjJMIERpZ2l0YWwgVm9sdW1lIiwgQVJJWk9OQV9BRENfRElHSVRBTF9WT0xVTUVfMkwsCisJICAgICAgIEFSSVpPTkFfSU4yTF9ESUdfVk9MX1NISUZULCAweGJmLCAwLCBkaWdpdGFsX3RsdiksCitTT0NfU0lOR0xFX1RMVigiSU4yUiBEaWdpdGFsIFZvbHVtZSIsIEFSSVpPTkFfQURDX0RJR0lUQUxfVk9MVU1FXzJSLAorCSAgICAgICBBUklaT05BX0lOMlJfRElHX1ZPTF9TSElGVCwgMHhiZiwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfRU5VTSgiSW5wdXQgUmFtcCBVcCIsIGFyaXpvbmFfaW5fdmlfcmFtcCksCitTT0NfRU5VTSgiSW5wdXQgUmFtcCBEb3duIiwgYXJpem9uYV9pbl92ZF9yYW1wKSwKKworQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiRVExIiwgQVJJWk9OQV9FUTFNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiRVEyIiwgQVJJWk9OQV9FUTJNSVhfSU5QVVRfMV9TT1VSQ0UpLAorCitBUklaT05BX0VRX0NPTlRST0woIkVRMSBDb2VmZmljaWVudHMiLCBBUklaT05BX0VRMV8yKSwKK1NPQ19TSU5HTEVfVExWKCJFUTEgQjEgVm9sdW1lIiwgQVJJWk9OQV9FUTFfMSwgQVJJWk9OQV9FUTFfQjFfR0FJTl9TSElGVCwKKwkgICAgICAgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVExIEIyIFZvbHVtZSIsIEFSSVpPTkFfRVExXzEsIEFSSVpPTkFfRVExX0IyX0dBSU5fU0hJRlQsCisJICAgICAgIDI0LCAwLCBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkVRMSBCMyBWb2x1bWUiLCBBUklaT05BX0VRMV8xLCBBUklaT05BX0VRMV9CM19HQUlOX1NISUZULAorCSAgICAgICAyNCwgMCwgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJFUTEgQjQgVm9sdW1lIiwgQVJJWk9OQV9FUTFfMiwgQVJJWk9OQV9FUTFfQjRfR0FJTl9TSElGVCwKKwkgICAgICAgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVExIEI1IFZvbHVtZSIsIEFSSVpPTkFfRVExXzIsIEFSSVpPTkFfRVExX0I1X0dBSU5fU0hJRlQsCisJICAgICAgIDI0LCAwLCBlcV90bHYpLAorCitBUklaT05BX0VRX0NPTlRST0woIkVRMiBDb2VmZmljaWVudHMiLCBBUklaT05BX0VRMl8yKSwKK1NPQ19TSU5HTEVfVExWKCJFUTIgQjEgVm9sdW1lIiwgQVJJWk9OQV9FUTJfMSwgQVJJWk9OQV9FUTJfQjFfR0FJTl9TSElGVCwKKwkgICAgICAgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVEyIEIyIFZvbHVtZSIsIEFSSVpPTkFfRVEyXzEsIEFSSVpPTkFfRVEyX0IyX0dBSU5fU0hJRlQsCisJICAgICAgIDI0LCAwLCBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkVRMiBCMyBWb2x1bWUiLCBBUklaT05BX0VRMl8xLCBBUklaT05BX0VRMl9CM19HQUlOX1NISUZULAorCSAgICAgICAyNCwgMCwgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJFUTIgQjQgVm9sdW1lIiwgQVJJWk9OQV9FUTJfMiwgQVJJWk9OQV9FUTJfQjRfR0FJTl9TSElGVCwKKwkgICAgICAgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVEyIEI1IFZvbHVtZSIsIEFSSVpPTkFfRVEyXzIsIEFSSVpPTkFfRVEyX0I1X0dBSU5fU0hJRlQsCisJICAgICAgIDI0LCAwLCBlcV90bHYpLAorCitBUklaT05BX01JWEVSX0NPTlRST0xTKCJEUkMxTCIsIEFSSVpPTkFfRFJDMUxNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiRFJDMVIiLCBBUklaT05BX0RSQzFSTUlYX0lOUFVUXzFfU09VUkNFKSwKK0FSSVpPTkFfTUlYRVJfQ09OVFJPTFMoIkRSQzJMIiwgQVJJWk9OQV9EUkMyTE1JWF9JTlBVVF8xX1NPVVJDRSksCitBUklaT05BX01JWEVSX0NPTlRST0xTKCJEUkMyUiIsIEFSSVpPTkFfRFJDMlJNSVhfSU5QVVRfMV9TT1VSQ0UpLAorCitTTkRfU09DX0JZVEVTX01BU0soIkRSQzEiLCBBUklaT05BX0RSQzFfQ1RSTDEsIDUsCisJCSAgIEFSSVpPTkFfRFJDMVJfRU5BIHwgQVJJWk9OQV9EUkMxTF9FTkEpLAorU05EX1NPQ19CWVRFU19NQVNLKCJEUkMyIiwgQVJJWk9OQV9EUkMyX0NUUkwxLCA1LAorCQkgICBBUklaT05BX0RSQzJSX0VOQSB8IEFSSVpPTkFfRFJDMkxfRU5BKSwKKworQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiTEhQRjEiLCBBUklaT05BX0hQTFAxTUlYX0lOUFVUXzFfU09VUkNFKSwKK0FSSVpPTkFfTUlYRVJfQ09OVFJPTFMoIkxIUEYyIiwgQVJJWk9OQV9IUExQMk1JWF9JTlBVVF8xX1NPVVJDRSksCitBUklaT05BX01JWEVSX0NPTlRST0xTKCJMSFBGMyIsIEFSSVpPTkFfSFBMUDNNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiTEhQRjQiLCBBUklaT05BX0hQTFA0TUlYX0lOUFVUXzFfU09VUkNFKSwKKworQVJJWk9OQV9MSFBGX0NPTlRST0woIkxIUEYxIENvZWZmaWNpZW50cyIsIEFSSVpPTkFfSFBMUEYxXzIpLAorQVJJWk9OQV9MSFBGX0NPTlRST0woIkxIUEYyIENvZWZmaWNpZW50cyIsIEFSSVpPTkFfSFBMUEYyXzIpLAorQVJJWk9OQV9MSFBGX0NPTlRST0woIkxIUEYzIENvZWZmaWNpZW50cyIsIEFSSVpPTkFfSFBMUEYzXzIpLAorQVJJWk9OQV9MSFBGX0NPTlRST0woIkxIUEY0IENvZWZmaWNpZW50cyIsIEFSSVpPTkFfSFBMUEY0XzIpLAorCitTT0NfRU5VTSgiTEhQRjEgTW9kZSIsIGFyaXpvbmFfbGhwZjFfbW9kZSksCitTT0NfRU5VTSgiTEhQRjIgTW9kZSIsIGFyaXpvbmFfbGhwZjJfbW9kZSksCitTT0NfRU5VTSgiTEhQRjMgTW9kZSIsIGFyaXpvbmFfbGhwZjNfbW9kZSksCitTT0NfRU5VTSgiTEhQRjQgTW9kZSIsIGFyaXpvbmFfbGhwZjRfbW9kZSksCisKK1NPQ19FTlVNKCJJU1JDMSBGU0wiLCBhcml6b25hX2lzcmNfZnNsWzBdKSwKK1NPQ19FTlVNKCJJU1JDMiBGU0wiLCBhcml6b25hX2lzcmNfZnNsWzFdKSwKK1NPQ19FTlVNKCJJU1JDMyBGU0wiLCBhcml6b25hX2lzcmNfZnNsWzJdKSwKK1NPQ19FTlVNKCJJU1JDMSBGU0giLCBhcml6b25hX2lzcmNfZnNoWzBdKSwKK1NPQ19FTlVNKCJJU1JDMiBGU0giLCBhcml6b25hX2lzcmNfZnNoWzFdKSwKK1NPQ19FTlVNKCJJU1JDMyBGU0giLCBhcml6b25hX2lzcmNfZnNoWzJdKSwKK1NPQ19FTlVNKCJBU1JDIFJBVEUgMSIsIGFyaXpvbmFfYXNyY19yYXRlMSksCisKK0FSSVpPTkFfTUlYRVJfQ09OVFJPTFMoIkRTUDJMIiwgQVJJWk9OQV9EU1AyTE1JWF9JTlBVVF8xX1NPVVJDRSksCitBUklaT05BX01JWEVSX0NPTlRST0xTKCJEU1AyUiIsIEFSSVpPTkFfRFNQMlJNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiRFNQM0wiLCBBUklaT05BX0RTUDNMTUlYX0lOUFVUXzFfU09VUkNFKSwKK0FSSVpPTkFfTUlYRVJfQ09OVFJPTFMoIkRTUDNSIiwgQVJJWk9OQV9EU1AzUk1JWF9JTlBVVF8xX1NPVVJDRSksCisKK1NPQ19TSU5HTEVfVExWKCJOb2lzZSBHZW5lcmF0b3IgVm9sdW1lIiwgQVJJWk9OQV9DT01GT1JUX05PSVNFX0dFTkVSQVRPUiwKKwkgICAgICAgQVJJWk9OQV9OT0lTRV9HRU5fR0FJTl9TSElGVCwgMHgxNiwgMCwgbm9pc2VfdGx2KSwKKworQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiSFBPVVQxTCIsIEFSSVpPTkFfT1VUMUxNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiSFBPVVQxUiIsIEFSSVpPTkFfT1VUMVJNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiU1BLT1VUIiwgQVJJWk9OQV9PVVQ0TE1JWF9JTlBVVF8xX1NPVVJDRSksCisKK1NPQ19TSU5HTEUoIkhQT1VUMSBTQyBQcm90ZWN0IFN3aXRjaCIsIEFSSVpPTkFfSFAxX1NIT1JUX0NJUkNVSVRfQ1RSTCwKKwkgICBBUklaT05BX0hQMV9TQ19FTkFfU0hJRlQsIDEsIDApLAorCitTT0NfRE9VQkxFX1IoIkhQT1VUMSBEaWdpdGFsIFN3aXRjaCIsIEFSSVpPTkFfREFDX0RJR0lUQUxfVk9MVU1FXzFMLAorCSAgICAgQVJJWk9OQV9EQUNfRElHSVRBTF9WT0xVTUVfMVIsIEFSSVpPTkFfT1VUMUxfTVVURV9TSElGVCwgMSwgMSksCitTT0NfU0lOR0xFKCJTcGVha2VyIERpZ2l0YWwgU3dpdGNoIiwgQVJJWk9OQV9EQUNfRElHSVRBTF9WT0xVTUVfNEwsCisJICAgICBBUklaT05BX09VVDRMX01VVEVfU0hJRlQsIDEsIDEpLAorCitTT0NfRE9VQkxFX1JfVExWKCJIUE9VVDEgRGlnaXRhbCBWb2x1bWUiLCBBUklaT05BX0RBQ19ESUdJVEFMX1ZPTFVNRV8xTCwKKwkJIEFSSVpPTkFfREFDX0RJR0lUQUxfVk9MVU1FXzFSLCBBUklaT05BX09VVDFMX1ZPTF9TSElGVCwKKwkJIDB4YmYsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJTcGVha2VyIERpZ2l0YWwgVm9sdW1lIiwgQVJJWk9OQV9EQUNfRElHSVRBTF9WT0xVTUVfNEwsCisJCSBBUklaT05BX09VVDRMX1ZPTF9TSElGVCwKKwkJIDB4YmYsIDAsIGRpZ2l0YWxfdGx2KSwKKworU09DX0VOVU0oIk91dHB1dCBSYW1wIFVwIiwgYXJpem9uYV9vdXRfdmlfcmFtcCksCitTT0NfRU5VTSgiT3V0cHV0IFJhbXAgRG93biIsIGFyaXpvbmFfb3V0X3ZkX3JhbXApLAorCitTT0NfU0lOR0xFKCJOb2lzZSBHYXRlIFN3aXRjaCIsIEFSSVpPTkFfTk9JU0VfR0FURV9DT05UUk9MLAorCSAgIEFSSVpPTkFfTkdBVEVfRU5BX1NISUZULCAxLCAwKSwKK1NPQ19TSU5HTEVfVExWKCJOb2lzZSBHYXRlIFRocmVzaG9sZCBWb2x1bWUiLCBBUklaT05BX05PSVNFX0dBVEVfQ09OVFJPTCwKKwkgICAgICAgQVJJWk9OQV9OR0FURV9USFJfU0hJRlQsIDcsIDEsIG5nX3RsdiksCitTT0NfRU5VTSgiTm9pc2UgR2F0ZSBIb2xkIiwgYXJpem9uYV9uZ19ob2xkKSwKKworQ1M0N0wyNF9OR19TUkMoIkhQT1VUMUwiLCBBUklaT05BX05PSVNFX0dBVEVfU0VMRUNUXzFMKSwKK0NTNDdMMjRfTkdfU1JDKCJIUE9VVDFSIiwgQVJJWk9OQV9OT0lTRV9HQVRFX1NFTEVDVF8xUiksCitDUzQ3TDI0X05HX1NSQygiU1BLT1VUIiwgQVJJWk9OQV9OT0lTRV9HQVRFX1NFTEVDVF80TCksCisKK0FSSVpPTkFfTUlYRVJfQ09OVFJPTFMoIkFJRjFUWDEiLCBBUklaT05BX0FJRjFUWDFNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiQUlGMVRYMiIsIEFSSVpPTkFfQUlGMVRYMk1JWF9JTlBVVF8xX1NPVVJDRSksCitBUklaT05BX01JWEVSX0NPTlRST0xTKCJBSUYxVFgzIiwgQVJJWk9OQV9BSUYxVFgzTUlYX0lOUFVUXzFfU09VUkNFKSwKK0FSSVpPTkFfTUlYRVJfQ09OVFJPTFMoIkFJRjFUWDQiLCBBUklaT05BX0FJRjFUWDRNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiQUlGMVRYNSIsIEFSSVpPTkFfQUlGMVRYNU1JWF9JTlBVVF8xX1NPVVJDRSksCitBUklaT05BX01JWEVSX0NPTlRST0xTKCJBSUYxVFg2IiwgQVJJWk9OQV9BSUYxVFg2TUlYX0lOUFVUXzFfU09VUkNFKSwKK0FSSVpPTkFfTUlYRVJfQ09OVFJPTFMoIkFJRjFUWDciLCBBUklaT05BX0FJRjFUWDdNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiQUlGMVRYOCIsIEFSSVpPTkFfQUlGMVRYOE1JWF9JTlBVVF8xX1NPVVJDRSksCisKK0FSSVpPTkFfTUlYRVJfQ09OVFJPTFMoIkFJRjJUWDEiLCBBUklaT05BX0FJRjJUWDFNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiQUlGMlRYMiIsIEFSSVpPTkFfQUlGMlRYMk1JWF9JTlBVVF8xX1NPVVJDRSksCitBUklaT05BX01JWEVSX0NPTlRST0xTKCJBSUYyVFgzIiwgQVJJWk9OQV9BSUYyVFgzTUlYX0lOUFVUXzFfU09VUkNFKSwKK0FSSVpPTkFfTUlYRVJfQ09OVFJPTFMoIkFJRjJUWDQiLCBBUklaT05BX0FJRjJUWDRNSVhfSU5QVVRfMV9TT1VSQ0UpLAorQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiQUlGMlRYNSIsIEFSSVpPTkFfQUlGMlRYNU1JWF9JTlBVVF8xX1NPVVJDRSksCitBUklaT05BX01JWEVSX0NPTlRST0xTKCJBSUYyVFg2IiwgQVJJWk9OQV9BSUYyVFg2TUlYX0lOUFVUXzFfU09VUkNFKSwKKworQVJJWk9OQV9NSVhFUl9DT05UUk9MUygiQUlGM1RYMSIsIEFSSVpPTkFfQUlGM1RYMU1JWF9JTlBVVF8xX1NPVVJDRSksCitBUklaT05BX01JWEVSX0NPTlRST0xTKCJBSUYzVFgyIiwgQVJJWk9OQV9BSUYzVFgyTUlYX0lOUFVUXzFfU09VUkNFKSwKK307CisKK0FSSVpPTkFfTUlYRVJfRU5VTVMoRVExLCBBUklaT05BX0VRMU1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01JWEVSX0VOVU1TKEVRMiwgQVJJWk9OQV9FUTJNSVhfSU5QVVRfMV9TT1VSQ0UpOworCitBUklaT05BX01JWEVSX0VOVU1TKERSQzFMLCBBUklaT05BX0RSQzFMTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTUlYRVJfRU5VTVMoRFJDMVIsIEFSSVpPTkFfRFJDMVJNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhEUkMyTCwgQVJJWk9OQV9EUkMyTE1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01JWEVSX0VOVU1TKERSQzJSLCBBUklaT05BX0RSQzJSTUlYX0lOUFVUXzFfU09VUkNFKTsKKworQVJJWk9OQV9NSVhFUl9FTlVNUyhMSFBGMSwgQVJJWk9OQV9IUExQMU1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01JWEVSX0VOVU1TKExIUEYyLCBBUklaT05BX0hQTFAyTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTUlYRVJfRU5VTVMoTEhQRjMsIEFSSVpPTkFfSFBMUDNNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhMSFBGNCwgQVJJWk9OQV9IUExQNE1JWF9JTlBVVF8xX1NPVVJDRSk7CisKK0FSSVpPTkFfTUlYRVJfRU5VTVMoRFNQMkwsIEFSSVpPTkFfRFNQMkxNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhEU1AyUiwgQVJJWk9OQV9EU1AyUk1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX0RTUF9BVVhfRU5VTVMoRFNQMiwgQVJJWk9OQV9EU1AyQVVYMU1JWF9JTlBVVF8xX1NPVVJDRSk7CisKK0FSSVpPTkFfTUlYRVJfRU5VTVMoRFNQM0wsIEFSSVpPTkFfRFNQM0xNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhEU1AzUiwgQVJJWk9OQV9EU1AzUk1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX0RTUF9BVVhfRU5VTVMoRFNQMywgQVJJWk9OQV9EU1AzQVVYMU1JWF9JTlBVVF8xX1NPVVJDRSk7CisKK0FSSVpPTkFfTUlYRVJfRU5VTVMoUFdNMSwgQVJJWk9OQV9QV00xTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTUlYRVJfRU5VTVMoUFdNMiwgQVJJWk9OQV9QV00yTUlYX0lOUFVUXzFfU09VUkNFKTsKKworQVJJWk9OQV9NSVhFUl9FTlVNUyhPVVQxTCwgQVJJWk9OQV9PVVQxTE1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01JWEVSX0VOVU1TKE9VVDFSLCBBUklaT05BX09VVDFSTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTUlYRVJfRU5VTVMoU1BLT1VULCBBUklaT05BX09VVDRMTUlYX0lOUFVUXzFfU09VUkNFKTsKKworQVJJWk9OQV9NSVhFUl9FTlVNUyhBSUYxVFgxLCBBUklaT05BX0FJRjFUWDFNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhBSUYxVFgyLCBBUklaT05BX0FJRjFUWDJNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhBSUYxVFgzLCBBUklaT05BX0FJRjFUWDNNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhBSUYxVFg0LCBBUklaT05BX0FJRjFUWDRNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhBSUYxVFg1LCBBUklaT05BX0FJRjFUWDVNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhBSUYxVFg2LCBBUklaT05BX0FJRjFUWDZNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhBSUYxVFg3LCBBUklaT05BX0FJRjFUWDdNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NSVhFUl9FTlVNUyhBSUYxVFg4LCBBUklaT05BX0FJRjFUWDhNSVhfSU5QVVRfMV9TT1VSQ0UpOworCitBUklaT05BX01JWEVSX0VOVU1TKEFJRjJUWDEsIEFSSVpPTkFfQUlGMlRYMU1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01JWEVSX0VOVU1TKEFJRjJUWDIsIEFSSVpPTkFfQUlGMlRYMk1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01JWEVSX0VOVU1TKEFJRjJUWDMsIEFSSVpPTkFfQUlGMlRYM01JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01JWEVSX0VOVU1TKEFJRjJUWDQsIEFSSVpPTkFfQUlGMlRYNE1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01JWEVSX0VOVU1TKEFJRjJUWDUsIEFSSVpPTkFfQUlGMlRYNU1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01JWEVSX0VOVU1TKEFJRjJUWDYsIEFSSVpPTkFfQUlGMlRYNk1JWF9JTlBVVF8xX1NPVVJDRSk7CisKK0FSSVpPTkFfTUlYRVJfRU5VTVMoQUlGM1RYMSwgQVJJWk9OQV9BSUYzVFgxTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTUlYRVJfRU5VTVMoQUlGM1RYMiwgQVJJWk9OQV9BSUYzVFgyTUlYX0lOUFVUXzFfU09VUkNFKTsKKworQVJJWk9OQV9NVVhfRU5VTVMoQVNSQzFMLCBBUklaT05BX0FTUkMxTE1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01VWF9FTlVNUyhBU1JDMVIsIEFSSVpPTkFfQVNSQzFSTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTVVYX0VOVU1TKEFTUkMyTCwgQVJJWk9OQV9BU1JDMkxNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NVVhfRU5VTVMoQVNSQzJSLCBBUklaT05BX0FTUkMyUk1JWF9JTlBVVF8xX1NPVVJDRSk7CisKK0FSSVpPTkFfTVVYX0VOVU1TKElTUkMxSU5UMSwgQVJJWk9OQV9JU1JDMUlOVDFNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NVVhfRU5VTVMoSVNSQzFJTlQyLCBBUklaT05BX0lTUkMxSU5UMk1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01VWF9FTlVNUyhJU1JDMUlOVDMsIEFSSVpPTkFfSVNSQzFJTlQzTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTVVYX0VOVU1TKElTUkMxSU5UNCwgQVJJWk9OQV9JU1JDMUlOVDRNSVhfSU5QVVRfMV9TT1VSQ0UpOworCitBUklaT05BX01VWF9FTlVNUyhJU1JDMURFQzEsIEFSSVpPTkFfSVNSQzFERUMxTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTVVYX0VOVU1TKElTUkMxREVDMiwgQVJJWk9OQV9JU1JDMURFQzJNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NVVhfRU5VTVMoSVNSQzFERUMzLCBBUklaT05BX0lTUkMxREVDM01JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01VWF9FTlVNUyhJU1JDMURFQzQsIEFSSVpPTkFfSVNSQzFERUM0TUlYX0lOUFVUXzFfU09VUkNFKTsKKworQVJJWk9OQV9NVVhfRU5VTVMoSVNSQzJJTlQxLCBBUklaT05BX0lTUkMySU5UMU1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01VWF9FTlVNUyhJU1JDMklOVDIsIEFSSVpPTkFfSVNSQzJJTlQyTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTVVYX0VOVU1TKElTUkMySU5UMywgQVJJWk9OQV9JU1JDMklOVDNNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NVVhfRU5VTVMoSVNSQzJJTlQ0LCBBUklaT05BX0lTUkMySU5UNE1JWF9JTlBVVF8xX1NPVVJDRSk7CisKK0FSSVpPTkFfTVVYX0VOVU1TKElTUkMyREVDMSwgQVJJWk9OQV9JU1JDMkRFQzFNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NVVhfRU5VTVMoSVNSQzJERUMyLCBBUklaT05BX0lTUkMyREVDMk1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01VWF9FTlVNUyhJU1JDMkRFQzMsIEFSSVpPTkFfSVNSQzJERUMzTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTVVYX0VOVU1TKElTUkMyREVDNCwgQVJJWk9OQV9JU1JDMkRFQzRNSVhfSU5QVVRfMV9TT1VSQ0UpOworCitBUklaT05BX01VWF9FTlVNUyhJU1JDM0lOVDEsIEFSSVpPTkFfSVNSQzNJTlQxTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTVVYX0VOVU1TKElTUkMzSU5UMiwgQVJJWk9OQV9JU1JDM0lOVDJNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NVVhfRU5VTVMoSVNSQzNJTlQzLCBBUklaT05BX0lTUkMzSU5UM01JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01VWF9FTlVNUyhJU1JDM0lOVDQsIEFSSVpPTkFfSVNSQzNJTlQ0TUlYX0lOUFVUXzFfU09VUkNFKTsKKworQVJJWk9OQV9NVVhfRU5VTVMoSVNSQzNERUMxLCBBUklaT05BX0lTUkMzREVDMU1JWF9JTlBVVF8xX1NPVVJDRSk7CitBUklaT05BX01VWF9FTlVNUyhJU1JDM0RFQzIsIEFSSVpPTkFfSVNSQzNERUMyTUlYX0lOUFVUXzFfU09VUkNFKTsKK0FSSVpPTkFfTVVYX0VOVU1TKElTUkMzREVDMywgQVJJWk9OQV9JU1JDM0RFQzNNSVhfSU5QVVRfMV9TT1VSQ0UpOworQVJJWk9OQV9NVVhfRU5VTVMoSVNSQzNERUM0LCBBUklaT05BX0lTUkMzREVDNE1JWF9JTlBVVF8xX1NPVVJDRSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY3M0N2wyNF9hZWNfbG9vcGJhY2tfdGV4dHNbXSA9IHsKKwkiSFBPVVQxTCIsICJIUE9VVDFSIiwgIlNQS09VVCIsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNzNDdsMjRfYWVjX2xvb3BiYWNrX3ZhbHVlc1tdID0geworCTAsIDEsIDYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGNzNDdsMjRfYWVjX2xvb3BiYWNrID0KKwlTT0NfVkFMVUVfRU5VTV9TSU5HTEUoQVJJWk9OQV9EQUNfQUVDX0NPTlRST0xfMSwKKwkJCSAgICAgIEFSSVpPTkFfQUVDX0xPT1BCQUNLX1NSQ19TSElGVCwgMHhmLAorCQkJICAgICAgQVJSQVlfU0laRShjczQ3bDI0X2FlY19sb29wYmFja190ZXh0cyksCisJCQkgICAgICBjczQ3bDI0X2FlY19sb29wYmFja190ZXh0cywKKwkJCSAgICAgIGNzNDdsMjRfYWVjX2xvb3BiYWNrX3ZhbHVlcyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjczQ3bDI0X2FlY19sb29wYmFja19tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFFQyBMb29wYmFjayIsIGNzNDdsMjRfYWVjX2xvb3BiYWNrKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGNzNDdsMjRfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fU1VQUExZKCJTWVNDTEsiLCBBUklaT05BX1NZU1RFTV9DTE9DS18xLAorCQkgICAgQVJJWk9OQV9TWVNDTEtfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFTWU5DQ0xLIiwgQVJJWk9OQV9BU1lOQ19DTE9DS18xLAorCQkgICAgQVJJWk9OQV9BU1lOQ19DTEtfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIk9QQ0xLIiwgQVJJWk9OQV9PVVRQVVRfU1lTVEVNX0NMT0NLLAorCQkgICAgQVJJWk9OQV9PUENMS19FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiQVNZTkNPUENMSyIsIEFSSVpPTkFfT1VUUFVUX0FTWU5DX0NMT0NLLAorCQkgICAgQVJJWk9OQV9PUENMS19BU1lOQ19FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fUkVHVUxBVE9SX1NVUFBMWSgiQ1BWREQiLCAyMCwgMCksCitTTkRfU09DX0RBUE1fUkVHVUxBVE9SX1NVUFBMWSgiTUlDVkREIiwgMCwgU05EX1NPQ19EQVBNX1JFR1VMQVRPUl9CWVBBU1MpLAorU05EX1NPQ19EQVBNX1JFR1VMQVRPUl9TVVBQTFkoIlNQS1ZERCIsIDAsIDApLAorCitTTkRfU09DX0RBUE1fU0lHR0VOKCJUT05FIiksCitTTkRfU09DX0RBUE1fU0lHR0VOKCJOT0lTRSIpLAorU05EX1NPQ19EQVBNX1NJR0dFTigiSEFQVElDUyIpLAorCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMUwiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xUiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJMIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMlIiKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiRFJDMSBTaWduYWwgQWN0aXZpdHkiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkRSQzIgU2lnbmFsIEFjdGl2aXR5IiksCisKK1NORF9TT0NfREFQTV9QR0FfRSgiSU4xTCBQR0EiLCBBUklaT05BX0lOUFVUX0VOQUJMRVMsIEFSSVpPTkFfSU4xTF9FTkFfU0hJRlQsCisJCSAgIDAsIE5VTEwsIDAsIGFyaXpvbmFfaW5fZXYsCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorU05EX1NPQ19EQVBNX1BHQV9FKCJJTjFSIFBHQSIsIEFSSVpPTkFfSU5QVVRfRU5BQkxFUywgQVJJWk9OQV9JTjFSX0VOQV9TSElGVCwKKwkJICAgMCwgTlVMTCwgMCwgYXJpem9uYV9pbl9ldiwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQgfAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCitTTkRfU09DX0RBUE1fUEdBX0UoIklOMkwgUEdBIiwgQVJJWk9OQV9JTlBVVF9FTkFCTEVTLCBBUklaT05BX0lOMkxfRU5BX1NISUZULAorCQkgICAwLCBOVUxMLCAwLCBhcml6b25hX2luX2V2LAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKK1NORF9TT0NfREFQTV9QR0FfRSgiSU4yUiBQR0EiLCBBUklaT05BX0lOUFVUX0VOQUJMRVMsIEFSSVpPTkFfSU4yUl9FTkFfU0hJRlQsCisJCSAgIDAsIE5VTEwsIDAsIGFyaXpvbmFfaW5fZXYsCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJNSUNCSUFTMSIsIEFSSVpPTkFfTUlDX0JJQVNfQ1RSTF8xLAorCQkgICAgQVJJWk9OQV9NSUNCMV9FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiTUlDQklBUzIiLCBBUklaT05BX01JQ19CSUFTX0NUUkxfMiwKKwkJICAgIEFSSVpPTkFfTUlDQjFfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiTm9pc2UgR2VuZXJhdG9yIiwgQVJJWk9OQV9DT01GT1JUX05PSVNFX0dFTkVSQVRPUiwKKwkJIEFSSVpPTkFfTk9JU0VfR0VOX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9QR0EoIlRvbmUgR2VuZXJhdG9yIDEiLCBBUklaT05BX1RPTkVfR0VORVJBVE9SXzEsCisJCSBBUklaT05BX1RPTkUxX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJUb25lIEdlbmVyYXRvciAyIiwgQVJJWk9OQV9UT05FX0dFTkVSQVRPUl8xLAorCQkgQVJJWk9OQV9UT05FMl9FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fUEdBKCJFUTEiLCBBUklaT05BX0VRMV8xLCBBUklaT05BX0VRMV9FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiRVEyIiwgQVJJWk9OQV9FUTJfMSwgQVJJWk9OQV9FUTJfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiRFJDMUwiLCBBUklaT05BX0RSQzFfQ1RSTDEsIEFSSVpPTkFfRFJDMUxfRU5BX1NISUZULCAwLAorCQkgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJEUkMxUiIsIEFSSVpPTkFfRFJDMV9DVFJMMSwgQVJJWk9OQV9EUkMxUl9FTkFfU0hJRlQsIDAsCisJCSBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkRSQzJMIiwgQVJJWk9OQV9EUkMyX0NUUkwxLCBBUklaT05BX0RSQzJMX0VOQV9TSElGVCwgMCwKKwkJIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiRFJDMlIiLCBBUklaT05BX0RSQzJfQ1RSTDEsIEFSSVpPTkFfRFJDMlJfRU5BX1NISUZULCAwLAorCQkgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9QR0EoIkxIUEYxIiwgQVJJWk9OQV9IUExQRjFfMSwgQVJJWk9OQV9MSFBGMV9FTkFfU0hJRlQsIDAsCisJCSBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxIUEYyIiwgQVJJWk9OQV9IUExQRjJfMSwgQVJJWk9OQV9MSFBGMl9FTkFfU0hJRlQsIDAsCisJCSBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxIUEYzIiwgQVJJWk9OQV9IUExQRjNfMSwgQVJJWk9OQV9MSFBGM19FTkFfU0hJRlQsIDAsCisJCSBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxIUEY0IiwgQVJJWk9OQV9IUExQRjRfMSwgQVJJWk9OQV9MSFBGNF9FTkFfU0hJRlQsIDAsCisJCSBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiUFdNMSBEcml2ZXIiLCBBUklaT05BX1BXTV9EUklWRV8xLCBBUklaT05BX1BXTTFfRU5BX1NISUZULAorCQkgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJQV00yIERyaXZlciIsIEFSSVpPTkFfUFdNX0RSSVZFXzEsIEFSSVpPTkFfUFdNMl9FTkFfU0hJRlQsCisJCSAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiQVNSQzFMIiwgQVJJWk9OQV9BU1JDX0VOQUJMRSwgQVJJWk9OQV9BU1JDMUxfRU5BX1NISUZULCAwLAorCQkgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJBU1JDMVIiLCBBUklaT05BX0FTUkNfRU5BQkxFLCBBUklaT05BX0FTUkMxUl9FTkFfU0hJRlQsIDAsCisJCSBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkFTUkMyTCIsIEFSSVpPTkFfQVNSQ19FTkFCTEUsIEFSSVpPTkFfQVNSQzJMX0VOQV9TSElGVCwgMCwKKwkJIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiQVNSQzJSIiwgQVJJWk9OQV9BU1JDX0VOQUJMRSwgQVJJWk9OQV9BU1JDMlJfRU5BX1NISUZULCAwLAorCQkgTlVMTCwgMCksCisKK1dNX0FEU1AyKCJEU1AyIiwgMSksCitXTV9BRFNQMigiRFNQMyIsIDIpLAorCitTTkRfU09DX0RBUE1fUEdBKCJJU1JDMUlOVDEiLCBBUklaT05BX0lTUkNfMV9DVFJMXzMsCisJCSBBUklaT05BX0lTUkMxX0lOVDBfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIklTUkMxSU5UMiIsIEFSSVpPTkFfSVNSQ18xX0NUUkxfMywKKwkJIEFSSVpPTkFfSVNSQzFfSU5UMV9FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSVNSQzFJTlQzIiwgQVJJWk9OQV9JU1JDXzFfQ1RSTF8zLAorCQkgQVJJWk9OQV9JU1JDMV9JTlQyX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJJU1JDMUlOVDQiLCBBUklaT05BX0lTUkNfMV9DVFJMXzMsCisJCSBBUklaT05BX0lTUkMxX0lOVDNfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiSVNSQzFERUMxIiwgQVJJWk9OQV9JU1JDXzFfQ1RSTF8zLAorCQkgQVJJWk9OQV9JU1JDMV9ERUMwX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJJU1JDMURFQzIiLCBBUklaT05BX0lTUkNfMV9DVFJMXzMsCisJCSBBUklaT05BX0lTUkMxX0RFQzFfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIklTUkMxREVDMyIsIEFSSVpPTkFfSVNSQ18xX0NUUkxfMywKKwkJIEFSSVpPTkFfSVNSQzFfREVDMl9FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSVNSQzFERUM0IiwgQVJJWk9OQV9JU1JDXzFfQ1RSTF8zLAorCQkgQVJJWk9OQV9JU1JDMV9ERUMzX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9QR0EoIklTUkMySU5UMSIsIEFSSVpPTkFfSVNSQ18yX0NUUkxfMywKKwkJIEFSSVpPTkFfSVNSQzJfSU5UMF9FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSVNSQzJJTlQyIiwgQVJJWk9OQV9JU1JDXzJfQ1RSTF8zLAorCQkgQVJJWk9OQV9JU1JDMl9JTlQxX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJJU1JDMklOVDMiLCBBUklaT05BX0lTUkNfMl9DVFJMXzMsCisJCSBBUklaT05BX0lTUkMyX0lOVDJfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIklTUkMySU5UNCIsIEFSSVpPTkFfSVNSQ18yX0NUUkxfMywKKwkJIEFSSVpPTkFfSVNSQzJfSU5UM19FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fUEdBKCJJU1JDMkRFQzEiLCBBUklaT05BX0lTUkNfMl9DVFJMXzMsCisJCSBBUklaT05BX0lTUkMyX0RFQzBfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIklTUkMyREVDMiIsIEFSSVpPTkFfSVNSQ18yX0NUUkxfMywKKwkJIEFSSVpPTkFfSVNSQzJfREVDMV9FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSVNSQzJERUMzIiwgQVJJWk9OQV9JU1JDXzJfQ1RSTF8zLAorCQkgQVJJWk9OQV9JU1JDMl9ERUMyX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJJU1JDMkRFQzQiLCBBUklaT05BX0lTUkNfMl9DVFJMXzMsCisJCSBBUklaT05BX0lTUkMyX0RFQzNfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiSVNSQzNJTlQxIiwgQVJJWk9OQV9JU1JDXzNfQ1RSTF8zLAorCQkgQVJJWk9OQV9JU1JDM19JTlQwX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJJU1JDM0lOVDIiLCBBUklaT05BX0lTUkNfM19DVFJMXzMsCisJCSBBUklaT05BX0lTUkMzX0lOVDFfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIklTUkMzSU5UMyIsIEFSSVpPTkFfSVNSQ18zX0NUUkxfMywKKwkJIEFSSVpPTkFfSVNSQzNfSU5UMl9FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSVNSQzNJTlQ0IiwgQVJJWk9OQV9JU1JDXzNfQ1RSTF8zLAorCQkgQVJJWk9OQV9JU1JDM19JTlQzX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9QR0EoIklTUkMzREVDMSIsIEFSSVpPTkFfSVNSQ18zX0NUUkxfMywKKwkJIEFSSVpPTkFfSVNSQzNfREVDMF9FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiSVNSQzNERUMyIiwgQVJJWk9OQV9JU1JDXzNfQ1RSTF8zLAorCQkgQVJJWk9OQV9JU1JDM19ERUMxX0VOQV9TSElGVCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJJU1JDM0RFQzMiLCBBUklaT05BX0lTUkNfM19DVFJMXzMsCisJCSBBUklaT05BX0lTUkMzX0RFQzJfRU5BX1NISUZULCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIklTUkMzREVDNCIsIEFSSVpPTkFfSVNSQ18zX0NUUkxfMywKKwkJIEFSSVpPTkFfSVNSQzNfREVDM19FTkFfU0hJRlQsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJBRUMgTG9vcGJhY2siLCBBUklaT05BX0RBQ19BRUNfQ09OVFJPTF8xLAorCQkgICAgICAgQVJJWk9OQV9BRUNfTE9PUEJBQ0tfRU5BX1NISUZULCAwLAorCQkgICAgICAgJmNzNDdsMjRfYWVjX2xvb3BiYWNrX211eCksCisKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFgxIiwgTlVMTCwgMCwKKwkJICAgICBBUklaT05BX0FJRjFfVFhfRU5BQkxFUywgQVJJWk9OQV9BSUYxVFgxX0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMVRYMiIsIE5VTEwsIDAsCisJCSAgICAgQVJJWk9OQV9BSUYxX1RYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMVRYMl9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWDMiLCBOVUxMLCAwLAorCQkgICAgIEFSSVpPTkFfQUlGMV9UWF9FTkFCTEVTLCBBUklaT05BX0FJRjFUWDNfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFg0IiwgTlVMTCwgMCwKKwkJICAgICBBUklaT05BX0FJRjFfVFhfRU5BQkxFUywgQVJJWk9OQV9BSUYxVFg0X0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMVRYNSIsIE5VTEwsIDAsCisJCSAgICAgQVJJWk9OQV9BSUYxX1RYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMVRYNV9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWDYiLCBOVUxMLCAwLAorCQkgICAgIEFSSVpPTkFfQUlGMV9UWF9FTkFCTEVTLCBBUklaT05BX0FJRjFUWDZfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFg3IiwgTlVMTCwgMCwKKwkJICAgICBBUklaT05BX0FJRjFfVFhfRU5BQkxFUywgQVJJWk9OQV9BSUYxVFg3X0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMVRYOCIsIE5VTEwsIDAsCisJCSAgICAgQVJJWk9OQV9BSUYxX1RYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMVRYOF9FTkFfU0hJRlQsIDApLAorCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxUlgxIiwgTlVMTCwgMCwKKwkJICAgIEFSSVpPTkFfQUlGMV9SWF9FTkFCTEVTLCBBUklaT05BX0FJRjFSWDFfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFSWDIiLCBOVUxMLCAwLAorCQkgICAgQVJJWk9OQV9BSUYxX1JYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMVJYMl9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMyIsIE5VTEwsIDAsCisJCSAgICBBUklaT05BX0FJRjFfUlhfRU5BQkxFUywgQVJJWk9OQV9BSUYxUlgzX0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxUlg0IiwgTlVMTCwgMCwKKwkJICAgIEFSSVpPTkFfQUlGMV9SWF9FTkFCTEVTLCBBUklaT05BX0FJRjFSWDRfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFSWDUiLCBOVUxMLCAwLAorCQkgICAgQVJJWk9OQV9BSUYxX1JYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMVJYNV9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYNiIsIE5VTEwsIDAsCisJCSAgICBBUklaT05BX0FJRjFfUlhfRU5BQkxFUywgQVJJWk9OQV9BSUYxUlg2X0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxUlg3IiwgTlVMTCwgMCwKKwkJICAgIEFSSVpPTkFfQUlGMV9SWF9FTkFCTEVTLCBBUklaT05BX0FJRjFSWDdfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFSWDgiLCBOVUxMLCAwLAorCQkgICAgQVJJWk9OQV9BSUYxX1JYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMVJYOF9FTkFfU0hJRlQsIDApLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMlRYMSIsIE5VTEwsIDAsCisJCSAgICAgQVJJWk9OQV9BSUYyX1RYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMlRYMV9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjJUWDIiLCBOVUxMLCAwLAorCQkgICAgIEFSSVpPTkFfQUlGMl9UWF9FTkFCTEVTLCBBUklaT05BX0FJRjJUWDJfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYyVFgzIiwgTlVMTCwgMCwKKwkJICAgICBBUklaT05BX0FJRjJfVFhfRU5BQkxFUywgQVJJWk9OQV9BSUYyVFgzX0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMlRYNCIsIE5VTEwsIDAsCisJCSAgICAgQVJJWk9OQV9BSUYyX1RYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMlRYNF9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjJUWDUiLCBOVUxMLCAwLAorCQkgICAgIEFSSVpPTkFfQUlGMl9UWF9FTkFCTEVTLCBBUklaT05BX0FJRjJUWDVfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYyVFg2IiwgTlVMTCwgMCwKKwkJICAgICBBUklaT05BX0FJRjJfVFhfRU5BQkxFUywgQVJJWk9OQV9BSUYyVFg2X0VOQV9TSElGVCwgMCksCisKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJSWDEiLCBOVUxMLCAwLAorCQkgICAgQVJJWk9OQV9BSUYyX1JYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMlJYMV9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMlJYMiIsIE5VTEwsIDAsCisJCSAgICBBUklaT05BX0FJRjJfUlhfRU5BQkxFUywgQVJJWk9OQV9BSUYyUlgyX0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyUlgzIiwgTlVMTCwgMCwKKwkJICAgIEFSSVpPTkFfQUlGMl9SWF9FTkFCTEVTLCBBUklaT05BX0FJRjJSWDNfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJSWDQiLCBOVUxMLCAwLAorCQkgICAgQVJJWk9OQV9BSUYyX1JYX0VOQUJMRVMsIEFSSVpPTkFfQUlGMlJYNF9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMlJYNSIsIE5VTEwsIDAsCisJCSAgICBBUklaT05BX0FJRjJfUlhfRU5BQkxFUywgQVJJWk9OQV9BSUYyUlg1X0VOQV9TSElGVCwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyUlg2IiwgTlVMTCwgMCwKKwkJICAgIEFSSVpPTkFfQUlGMl9SWF9FTkFCTEVTLCBBUklaT05BX0FJRjJSWDZfRU5BX1NISUZULCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjNUWDEiLCBOVUxMLCAwLAorCQkgICAgIEFSSVpPTkFfQUlGM19UWF9FTkFCTEVTLCBBUklaT05BX0FJRjNUWDFfRU5BX1NISUZULCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYzVFgyIiwgTlVMTCwgMCwKKwkJICAgICBBUklaT05BX0FJRjNfVFhfRU5BQkxFUywgQVJJWk9OQV9BSUYzVFgyX0VOQV9TSElGVCwgMCksCisKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjNSWDEiLCBOVUxMLCAwLAorCQkgICAgQVJJWk9OQV9BSUYzX1JYX0VOQUJMRVMsIEFSSVpPTkFfQUlGM1JYMV9FTkFfU0hJRlQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGM1JYMiIsIE5VTEwsIDAsCisJCSAgICBBUklaT05BX0FJRjNfUlhfRU5BQkxFUywgQVJJWk9OQV9BSUYzUlgyX0VOQV9TSElGVCwgMCksCisKK1NORF9TT0NfREFQTV9QR0FfRSgiT1VUMUwiLCBTTkRfU09DX05PUE0sCisJCSAgIEFSSVpPTkFfT1VUMUxfRU5BX1NISUZULCAwLCBOVUxMLCAwLCBhcml6b25hX2hwX2V2LAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKK1NORF9TT0NfREFQTV9QR0FfRSgiT1VUMVIiLCBTTkRfU09DX05PUE0sCisJCSAgIEFSSVpPTkFfT1VUMVJfRU5BX1NISUZULCAwLCBOVUxMLCAwLCBhcml6b25hX2hwX2V2LAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKworQVJJWk9OQV9NSVhFUl9XSURHRVRTKEVRMSwgIkVRMSIpLAorQVJJWk9OQV9NSVhFUl9XSURHRVRTKEVRMiwgIkVRMiIpLAorCitBUklaT05BX01JWEVSX1dJREdFVFMoRFJDMUwsICJEUkMxTCIpLAorQVJJWk9OQV9NSVhFUl9XSURHRVRTKERSQzFSLCAiRFJDMVIiKSwKK0FSSVpPTkFfTUlYRVJfV0lER0VUUyhEUkMyTCwgIkRSQzJMIiksCitBUklaT05BX01JWEVSX1dJREdFVFMoRFJDMlIsICJEUkMyUiIpLAorCitBUklaT05BX01JWEVSX1dJREdFVFMoTEhQRjEsICJMSFBGMSIpLAorQVJJWk9OQV9NSVhFUl9XSURHRVRTKExIUEYyLCAiTEhQRjIiKSwKK0FSSVpPTkFfTUlYRVJfV0lER0VUUyhMSFBGMywgIkxIUEYzIiksCitBUklaT05BX01JWEVSX1dJREdFVFMoTEhQRjQsICJMSFBGNCIpLAorCitBUklaT05BX01JWEVSX1dJREdFVFMoUFdNMSwgIlBXTTEiKSwKK0FSSVpPTkFfTUlYRVJfV0lER0VUUyhQV00yLCAiUFdNMiIpLAorCitBUklaT05BX01JWEVSX1dJREdFVFMoT1VUMUwsICJIUE9VVDFMIiksCitBUklaT05BX01JWEVSX1dJREdFVFMoT1VUMVIsICJIUE9VVDFSIiksCitBUklaT05BX01JWEVSX1dJREdFVFMoU1BLT1VULCAiU1BLT1VUIiksCisKK0FSSVpPTkFfTUlYRVJfV0lER0VUUyhBSUYxVFgxLCAiQUlGMVRYMSIpLAorQVJJWk9OQV9NSVhFUl9XSURHRVRTKEFJRjFUWDIsICJBSUYxVFgyIiksCitBUklaT05BX01JWEVSX1dJREdFVFMoQUlGMVRYMywgIkFJRjFUWDMiKSwKK0FSSVpPTkFfTUlYRVJfV0lER0VUUyhBSUYxVFg0LCAiQUlGMVRYNCIpLAorQVJJWk9OQV9NSVhFUl9XSURHRVRTKEFJRjFUWDUsICJBSUYxVFg1IiksCitBUklaT05BX01JWEVSX1dJREdFVFMoQUlGMVRYNiwgIkFJRjFUWDYiKSwKK0FSSVpPTkFfTUlYRVJfV0lER0VUUyhBSUYxVFg3LCAiQUlGMVRYNyIpLAorQVJJWk9OQV9NSVhFUl9XSURHRVRTKEFJRjFUWDgsICJBSUYxVFg4IiksCisKK0FSSVpPTkFfTUlYRVJfV0lER0VUUyhBSUYyVFgxLCAiQUlGMlRYMSIpLAorQVJJWk9OQV9NSVhFUl9XSURHRVRTKEFJRjJUWDIsICJBSUYyVFgyIiksCitBUklaT05BX01JWEVSX1dJREdFVFMoQUlGMlRYMywgIkFJRjJUWDMiKSwKK0FSSVpPTkFfTUlYRVJfV0lER0VUUyhBSUYyVFg0LCAiQUlGMlRYNCIpLAorQVJJWk9OQV9NSVhFUl9XSURHRVRTKEFJRjJUWDUsICJBSUYyVFg1IiksCitBUklaT05BX01JWEVSX1dJREdFVFMoQUlGMlRYNiwgIkFJRjJUWDYiKSwKKworQVJJWk9OQV9NSVhFUl9XSURHRVRTKEFJRjNUWDEsICJBSUYzVFgxIiksCitBUklaT05BX01JWEVSX1dJREdFVFMoQUlGM1RYMiwgIkFJRjNUWDIiKSwKKworQVJJWk9OQV9NVVhfV0lER0VUUyhBU1JDMUwsICJBU1JDMUwiKSwKK0FSSVpPTkFfTVVYX1dJREdFVFMoQVNSQzFSLCAiQVNSQzFSIiksCitBUklaT05BX01VWF9XSURHRVRTKEFTUkMyTCwgIkFTUkMyTCIpLAorQVJJWk9OQV9NVVhfV0lER0VUUyhBU1JDMlIsICJBU1JDMlIiKSwKKworQVJJWk9OQV9EU1BfV0lER0VUUyhEU1AyLCAiRFNQMiIpLAorQVJJWk9OQV9EU1BfV0lER0VUUyhEU1AzLCAiRFNQMyIpLAorCitBUklaT05BX01VWF9XSURHRVRTKElTUkMxREVDMSwgIklTUkMxREVDMSIpLAorQVJJWk9OQV9NVVhfV0lER0VUUyhJU1JDMURFQzIsICJJU1JDMURFQzIiKSwKK0FSSVpPTkFfTVVYX1dJREdFVFMoSVNSQzFERUMzLCAiSVNSQzFERUMzIiksCitBUklaT05BX01VWF9XSURHRVRTKElTUkMxREVDNCwgIklTUkMxREVDNCIpLAorCitBUklaT05BX01VWF9XSURHRVRTKElTUkMxSU5UMSwgIklTUkMxSU5UMSIpLAorQVJJWk9OQV9NVVhfV0lER0VUUyhJU1JDMUlOVDIsICJJU1JDMUlOVDIiKSwKK0FSSVpPTkFfTVVYX1dJREdFVFMoSVNSQzFJTlQzLCAiSVNSQzFJTlQzIiksCitBUklaT05BX01VWF9XSURHRVRTKElTUkMxSU5UNCwgIklTUkMxSU5UNCIpLAorCitBUklaT05BX01VWF9XSURHRVRTKElTUkMyREVDMSwgIklTUkMyREVDMSIpLAorQVJJWk9OQV9NVVhfV0lER0VUUyhJU1JDMkRFQzIsICJJU1JDMkRFQzIiKSwKK0FSSVpPTkFfTVVYX1dJREdFVFMoSVNSQzJERUMzLCAiSVNSQzJERUMzIiksCitBUklaT05BX01VWF9XSURHRVRTKElTUkMyREVDNCwgIklTUkMyREVDNCIpLAorCitBUklaT05BX01VWF9XSURHRVRTKElTUkMySU5UMSwgIklTUkMySU5UMSIpLAorQVJJWk9OQV9NVVhfV0lER0VUUyhJU1JDMklOVDIsICJJU1JDMklOVDIiKSwKK0FSSVpPTkFfTVVYX1dJREdFVFMoSVNSQzJJTlQzLCAiSVNSQzJJTlQzIiksCitBUklaT05BX01VWF9XSURHRVRTKElTUkMySU5UNCwgIklTUkMySU5UNCIpLAorCitBUklaT05BX01VWF9XSURHRVRTKElTUkMzREVDMSwgIklTUkMzREVDMSIpLAorQVJJWk9OQV9NVVhfV0lER0VUUyhJU1JDM0RFQzIsICJJU1JDM0RFQzIiKSwKK0FSSVpPTkFfTVVYX1dJREdFVFMoSVNSQzNERUMzLCAiSVNSQzNERUMzIiksCitBUklaT05BX01VWF9XSURHRVRTKElTUkMzREVDNCwgIklTUkMzREVDNCIpLAorCitBUklaT05BX01VWF9XSURHRVRTKElTUkMzSU5UMSwgIklTUkMzSU5UMSIpLAorQVJJWk9OQV9NVVhfV0lER0VUUyhJU1JDM0lOVDIsICJJU1JDM0lOVDIiKSwKK0FSSVpPTkFfTVVYX1dJREdFVFMoSVNSQzNJTlQzLCAiSVNSQzNJTlQzIiksCitBUklaT05BX01VWF9XSURHRVRTKElTUkMzSU5UNCwgIklTUkMzSU5UNCIpLAorCitTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVDFMIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVDFSIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtPVVROIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtPVVRQIiksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIk1JQ1NVUFAiKSwKK307CisKKyNkZWZpbmUgQVJJWk9OQV9NSVhFUl9JTlBVVF9ST1VURVMobmFtZSkJXAorCXsgbmFtZSwgIk5vaXNlIEdlbmVyYXRvciIsICJOb2lzZSBHZW5lcmF0b3IiIH0sIFwKKwl7IG5hbWUsICJUb25lIEdlbmVyYXRvciAxIiwgIlRvbmUgR2VuZXJhdG9yIDEiIH0sIFwKKwl7IG5hbWUsICJUb25lIEdlbmVyYXRvciAyIiwgIlRvbmUgR2VuZXJhdG9yIDIiIH0sIFwKKwl7IG5hbWUsICJIYXB0aWNzIiwgIkhBUFRJQ1MiIH0sIFwKKwl7IG5hbWUsICJBRUMiLCAiQUVDIExvb3BiYWNrIiB9LCBcCisJeyBuYW1lLCAiSU4xTCIsICJJTjFMIFBHQSIgfSwgXAorCXsgbmFtZSwgIklOMVIiLCAiSU4xUiBQR0EiIH0sIFwKKwl7IG5hbWUsICJJTjJMIiwgIklOMkwgUEdBIiB9LCBcCisJeyBuYW1lLCAiSU4yUiIsICJJTjJSIFBHQSIgfSwgXAorCXsgbmFtZSwgIkFJRjFSWDEiLCAiQUlGMVJYMSIgfSwgXAorCXsgbmFtZSwgIkFJRjFSWDIiLCAiQUlGMVJYMiIgfSwgXAorCXsgbmFtZSwgIkFJRjFSWDMiLCAiQUlGMVJYMyIgfSwgXAorCXsgbmFtZSwgIkFJRjFSWDQiLCAiQUlGMVJYNCIgfSwgXAorCXsgbmFtZSwgIkFJRjFSWDUiLCAiQUlGMVJYNSIgfSwgXAorCXsgbmFtZSwgIkFJRjFSWDYiLCAiQUlGMVJYNiIgfSwgXAorCXsgbmFtZSwgIkFJRjFSWDciLCAiQUlGMVJYNyIgfSwgXAorCXsgbmFtZSwgIkFJRjFSWDgiLCAiQUlGMVJYOCIgfSwgXAorCXsgbmFtZSwgIkFJRjJSWDEiLCAiQUlGMlJYMSIgfSwgXAorCXsgbmFtZSwgIkFJRjJSWDIiLCAiQUlGMlJYMiIgfSwgXAorCXsgbmFtZSwgIkFJRjJSWDMiLCAiQUlGMlJYMyIgfSwgXAorCXsgbmFtZSwgIkFJRjJSWDQiLCAiQUlGMlJYNCIgfSwgXAorCXsgbmFtZSwgIkFJRjJSWDUiLCAiQUlGMlJYNSIgfSwgXAorCXsgbmFtZSwgIkFJRjJSWDYiLCAiQUlGMlJYNiIgfSwgXAorCXsgbmFtZSwgIkFJRjNSWDEiLCAiQUlGM1JYMSIgfSwgXAorCXsgbmFtZSwgIkFJRjNSWDIiLCAiQUlGM1JYMiIgfSwgXAorCXsgbmFtZSwgIkVRMSIsICJFUTEiIH0sIFwKKwl7IG5hbWUsICJFUTIiLCAiRVEyIiB9LCBcCisJeyBuYW1lLCAiRFJDMUwiLCAiRFJDMUwiIH0sIFwKKwl7IG5hbWUsICJEUkMxUiIsICJEUkMxUiIgfSwgXAorCXsgbmFtZSwgIkRSQzJMIiwgIkRSQzJMIiB9LCBcCisJeyBuYW1lLCAiRFJDMlIiLCAiRFJDMlIiIH0sIFwKKwl7IG5hbWUsICJMSFBGMSIsICJMSFBGMSIgfSwgXAorCXsgbmFtZSwgIkxIUEYyIiwgIkxIUEYyIiB9LCBcCisJeyBuYW1lLCAiTEhQRjMiLCAiTEhQRjMiIH0sIFwKKwl7IG5hbWUsICJMSFBGNCIsICJMSFBGNCIgfSwgXAorCXsgbmFtZSwgIkFTUkMxTCIsICJBU1JDMUwiIH0sIFwKKwl7IG5hbWUsICJBU1JDMVIiLCAiQVNSQzFSIiB9LCBcCisJeyBuYW1lLCAiQVNSQzJMIiwgIkFTUkMyTCIgfSwgXAorCXsgbmFtZSwgIkFTUkMyUiIsICJBU1JDMlIiIH0sIFwKKwl7IG5hbWUsICJJU1JDMURFQzEiLCAiSVNSQzFERUMxIiB9LCBcCisJeyBuYW1lLCAiSVNSQzFERUMyIiwgIklTUkMxREVDMiIgfSwgXAorCXsgbmFtZSwgIklTUkMxREVDMyIsICJJU1JDMURFQzMiIH0sIFwKKwl7IG5hbWUsICJJU1JDMURFQzQiLCAiSVNSQzFERUM0IiB9LCBcCisJeyBuYW1lLCAiSVNSQzFJTlQxIiwgIklTUkMxSU5UMSIgfSwgXAorCXsgbmFtZSwgIklTUkMxSU5UMiIsICJJU1JDMUlOVDIiIH0sIFwKKwl7IG5hbWUsICJJU1JDMUlOVDMiLCAiSVNSQzFJTlQzIiB9LCBcCisJeyBuYW1lLCAiSVNSQzFJTlQ0IiwgIklTUkMxSU5UNCIgfSwgXAorCXsgbmFtZSwgIklTUkMyREVDMSIsICJJU1JDMkRFQzEiIH0sIFwKKwl7IG5hbWUsICJJU1JDMkRFQzIiLCAiSVNSQzJERUMyIiB9LCBcCisJeyBuYW1lLCAiSVNSQzJERUMzIiwgIklTUkMyREVDMyIgfSwgXAorCXsgbmFtZSwgIklTUkMyREVDNCIsICJJU1JDMkRFQzQiIH0sIFwKKwl7IG5hbWUsICJJU1JDMklOVDEiLCAiSVNSQzJJTlQxIiB9LCBcCisJeyBuYW1lLCAiSVNSQzJJTlQyIiwgIklTUkMySU5UMiIgfSwgXAorCXsgbmFtZSwgIklTUkMySU5UMyIsICJJU1JDMklOVDMiIH0sIFwKKwl7IG5hbWUsICJJU1JDMklOVDQiLCAiSVNSQzJJTlQ0IiB9LCBcCisJeyBuYW1lLCAiSVNSQzNERUMxIiwgIklTUkMzREVDMSIgfSwgXAorCXsgbmFtZSwgIklTUkMzREVDMiIsICJJU1JDM0RFQzIiIH0sIFwKKwl7IG5hbWUsICJJU1JDM0RFQzMiLCAiSVNSQzNERUMzIiB9LCBcCisJeyBuYW1lLCAiSVNSQzNERUM0IiwgIklTUkMzREVDNCIgfSwgXAorCXsgbmFtZSwgIklTUkMzSU5UMSIsICJJU1JDM0lOVDEiIH0sIFwKKwl7IG5hbWUsICJJU1JDM0lOVDIiLCAiSVNSQzNJTlQyIiB9LCBcCisJeyBuYW1lLCAiSVNSQzNJTlQzIiwgIklTUkMzSU5UMyIgfSwgXAorCXsgbmFtZSwgIklTUkMzSU5UNCIsICJJU1JDM0lOVDQiIH0sIFwKKwl7IG5hbWUsICJEU1AyLjEiLCAiRFNQMiIgfSwgXAorCXsgbmFtZSwgIkRTUDIuMiIsICJEU1AyIiB9LCBcCisJeyBuYW1lLCAiRFNQMi4zIiwgIkRTUDIiIH0sIFwKKwl7IG5hbWUsICJEU1AyLjQiLCAiRFNQMiIgfSwgXAorCXsgbmFtZSwgIkRTUDIuNSIsICJEU1AyIiB9LCBcCisJeyBuYW1lLCAiRFNQMi42IiwgIkRTUDIiIH0sIFwKKwl7IG5hbWUsICJEU1AzLjEiLCAiRFNQMyIgfSwgXAorCXsgbmFtZSwgIkRTUDMuMiIsICJEU1AzIiB9LCBcCisJeyBuYW1lLCAiRFNQMy4zIiwgIkRTUDMiIH0sIFwKKwl7IG5hbWUsICJEU1AzLjQiLCAiRFNQMyIgfSwgXAorCXsgbmFtZSwgIkRTUDMuNSIsICJEU1AzIiB9LCBcCisJeyBuYW1lLCAiRFNQMy42IiwgIkRTUDMiIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgY3M0N2wyNF9kYXBtX3JvdXRlc1tdID0geworCXsgIk9VVDFMIiwgTlVMTCwgIkNQVkREIiB9LAorCXsgIk9VVDFSIiwgTlVMTCwgIkNQVkREIiB9LAorCisJeyAiT1VUNEwiLCBOVUxMLCAiU1BLVkREIiB9LAorCisJeyAiT1VUMUwiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIk9VVDFSIiwgTlVMTCwgIlNZU0NMSyIgfSwKKwl7ICJPVVQ0TCIsIE5VTEwsICJTWVNDTEsiIH0sCisKKwl7ICJJTjFMIiwgTlVMTCwgIlNZU0NMSyIgfSwKKwl7ICJJTjFSIiwgTlVMTCwgIlNZU0NMSyIgfSwKKwl7ICJJTjJMIiwgTlVMTCwgIlNZU0NMSyIgfSwKKwl7ICJJTjJSIiwgTlVMTCwgIlNZU0NMSyIgfSwKKworCXsgIk1JQ0JJQVMxIiwgTlVMTCwgIk1JQ1ZERCIgfSwKKwl7ICJNSUNCSUFTMiIsIE5VTEwsICJNSUNWREQiIH0sCisKKwl7ICJOb2lzZSBHZW5lcmF0b3IiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIlRvbmUgR2VuZXJhdG9yIDEiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIlRvbmUgR2VuZXJhdG9yIDIiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCisJeyAiTm9pc2UgR2VuZXJhdG9yIiwgTlVMTCwgIk5PSVNFIiB9LAorCXsgIlRvbmUgR2VuZXJhdG9yIDEiLCBOVUxMLCAiVE9ORSIgfSwKKwl7ICJUb25lIEdlbmVyYXRvciAyIiwgTlVMTCwgIlRPTkUiIH0sCisKKwl7ICJBSUYxIENhcHR1cmUiLCBOVUxMLCAiQUlGMVRYMSIgfSwKKwl7ICJBSUYxIENhcHR1cmUiLCBOVUxMLCAiQUlGMVRYMiIgfSwKKwl7ICJBSUYxIENhcHR1cmUiLCBOVUxMLCAiQUlGMVRYMyIgfSwKKwl7ICJBSUYxIENhcHR1cmUiLCBOVUxMLCAiQUlGMVRYNCIgfSwKKwl7ICJBSUYxIENhcHR1cmUiLCBOVUxMLCAiQUlGMVRYNSIgfSwKKwl7ICJBSUYxIENhcHR1cmUiLCBOVUxMLCAiQUlGMVRYNiIgfSwKKwl7ICJBSUYxIENhcHR1cmUiLCBOVUxMLCAiQUlGMVRYNyIgfSwKKwl7ICJBSUYxIENhcHR1cmUiLCBOVUxMLCAiQUlGMVRYOCIgfSwKKworCXsgIkFJRjFSWDEiLCBOVUxMLCAiQUlGMSBQbGF5YmFjayIgfSwKKwl7ICJBSUYxUlgyIiwgTlVMTCwgIkFJRjEgUGxheWJhY2siIH0sCisJeyAiQUlGMVJYMyIsIE5VTEwsICJBSUYxIFBsYXliYWNrIiB9LAorCXsgIkFJRjFSWDQiLCBOVUxMLCAiQUlGMSBQbGF5YmFjayIgfSwKKwl7ICJBSUYxUlg1IiwgTlVMTCwgIkFJRjEgUGxheWJhY2siIH0sCisJeyAiQUlGMVJYNiIsIE5VTEwsICJBSUYxIFBsYXliYWNrIiB9LAorCXsgIkFJRjFSWDciLCBOVUxMLCAiQUlGMSBQbGF5YmFjayIgfSwKKwl7ICJBSUYxUlg4IiwgTlVMTCwgIkFJRjEgUGxheWJhY2siIH0sCisKKwl7ICJBSUYyIENhcHR1cmUiLCBOVUxMLCAiQUlGMlRYMSIgfSwKKwl7ICJBSUYyIENhcHR1cmUiLCBOVUxMLCAiQUlGMlRYMiIgfSwKKwl7ICJBSUYyIENhcHR1cmUiLCBOVUxMLCAiQUlGMlRYMyIgfSwKKwl7ICJBSUYyIENhcHR1cmUiLCBOVUxMLCAiQUlGMlRYNCIgfSwKKwl7ICJBSUYyIENhcHR1cmUiLCBOVUxMLCAiQUlGMlRYNSIgfSwKKwl7ICJBSUYyIENhcHR1cmUiLCBOVUxMLCAiQUlGMlRYNiIgfSwKKworCXsgIkFJRjJSWDEiLCBOVUxMLCAiQUlGMiBQbGF5YmFjayIgfSwKKwl7ICJBSUYyUlgyIiwgTlVMTCwgIkFJRjIgUGxheWJhY2siIH0sCisJeyAiQUlGMlJYMyIsIE5VTEwsICJBSUYyIFBsYXliYWNrIiB9LAorCXsgIkFJRjJSWDQiLCBOVUxMLCAiQUlGMiBQbGF5YmFjayIgfSwKKwl7ICJBSUYyUlg1IiwgTlVMTCwgIkFJRjIgUGxheWJhY2siIH0sCisJeyAiQUlGMlJYNiIsIE5VTEwsICJBSUYyIFBsYXliYWNrIiB9LAorCisJeyAiQUlGMyBDYXB0dXJlIiwgTlVMTCwgIkFJRjNUWDEiIH0sCisJeyAiQUlGMyBDYXB0dXJlIiwgTlVMTCwgIkFJRjNUWDIiIH0sCisKKwl7ICJBSUYzUlgxIiwgTlVMTCwgIkFJRjMgUGxheWJhY2siIH0sCisJeyAiQUlGM1JYMiIsIE5VTEwsICJBSUYzIFBsYXliYWNrIiB9LAorCisJeyAiQUlGMSBQbGF5YmFjayIsIE5VTEwsICJTWVNDTEsiIH0sCisJeyAiQUlGMiBQbGF5YmFjayIsIE5VTEwsICJTWVNDTEsiIH0sCisJeyAiQUlGMyBQbGF5YmFjayIsIE5VTEwsICJTWVNDTEsiIH0sCisKKwl7ICJBSUYxIENhcHR1cmUiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIkFJRjIgQ2FwdHVyZSIsIE5VTEwsICJTWVNDTEsiIH0sCisJeyAiQUlGMyBDYXB0dXJlIiwgTlVMTCwgIlNZU0NMSyIgfSwKKworCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMUwiIH0sCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4xUiIgfSwKKworCXsgIklOMkwgUEdBIiwgTlVMTCwgIklOMkwiIH0sCisJeyAiSU4yUiBQR0EiLCBOVUxMLCAiSU4yUiIgfSwKKworCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJPVVQxTCIsICJIUE9VVDFMIiksCisJQVJJWk9OQV9NSVhFUl9ST1VURVMoIk9VVDFSIiwgIkhQT1VUMVIiKSwKKworCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJPVVQ0TCIsICJTUEtPVVQiKSwKKworCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJQV00xIERyaXZlciIsICJQV00xIiksCisJQVJJWk9OQV9NSVhFUl9ST1VURVMoIlBXTTIgRHJpdmVyIiwgIlBXTTIiKSwKKworCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJBSUYxVFgxIiwgIkFJRjFUWDEiKSwKKwlBUklaT05BX01JWEVSX1JPVVRFUygiQUlGMVRYMiIsICJBSUYxVFgyIiksCisJQVJJWk9OQV9NSVhFUl9ST1VURVMoIkFJRjFUWDMiLCAiQUlGMVRYMyIpLAorCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJBSUYxVFg0IiwgIkFJRjFUWDQiKSwKKwlBUklaT05BX01JWEVSX1JPVVRFUygiQUlGMVRYNSIsICJBSUYxVFg1IiksCisJQVJJWk9OQV9NSVhFUl9ST1VURVMoIkFJRjFUWDYiLCAiQUlGMVRYNiIpLAorCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJBSUYxVFg3IiwgIkFJRjFUWDciKSwKKwlBUklaT05BX01JWEVSX1JPVVRFUygiQUlGMVRYOCIsICJBSUYxVFg4IiksCisKKwlBUklaT05BX01JWEVSX1JPVVRFUygiQUlGMlRYMSIsICJBSUYyVFgxIiksCisJQVJJWk9OQV9NSVhFUl9ST1VURVMoIkFJRjJUWDIiLCAiQUlGMlRYMiIpLAorCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJBSUYyVFgzIiwgIkFJRjJUWDMiKSwKKwlBUklaT05BX01JWEVSX1JPVVRFUygiQUlGMlRYNCIsICJBSUYyVFg0IiksCisJQVJJWk9OQV9NSVhFUl9ST1VURVMoIkFJRjJUWDUiLCAiQUlGMlRYNSIpLAorCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJBSUYyVFg2IiwgIkFJRjJUWDYiKSwKKworCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJBSUYzVFgxIiwgIkFJRjNUWDEiKSwKKwlBUklaT05BX01JWEVSX1JPVVRFUygiQUlGM1RYMiIsICJBSUYzVFgyIiksCisKKwlBUklaT05BX01JWEVSX1JPVVRFUygiRVExIiwgIkVRMSIpLAorCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJFUTIiLCAiRVEyIiksCisKKwlBUklaT05BX01JWEVSX1JPVVRFUygiRFJDMUwiLCAiRFJDMUwiKSwKKwlBUklaT05BX01JWEVSX1JPVVRFUygiRFJDMVIiLCAiRFJDMVIiKSwKKwlBUklaT05BX01JWEVSX1JPVVRFUygiRFJDMkwiLCAiRFJDMkwiKSwKKwlBUklaT05BX01JWEVSX1JPVVRFUygiRFJDMlIiLCAiRFJDMlIiKSwKKworCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJMSFBGMSIsICJMSFBGMSIpLAorCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJMSFBGMiIsICJMSFBGMiIpLAorCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJMSFBGMyIsICJMSFBGMyIpLAorCUFSSVpPTkFfTUlYRVJfUk9VVEVTKCJMSFBGNCIsICJMSFBGNCIpLAorCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJBU1JDMUwiLCAiQVNSQzFMIiksCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJBU1JDMVIiLCAiQVNSQzFSIiksCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJBU1JDMkwiLCAiQVNSQzJMIiksCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJBU1JDMlIiLCAiQVNSQzJSIiksCisKKwlBUklaT05BX0RTUF9ST1VURVMoIkRTUDIiKSwKKwlBUklaT05BX0RTUF9ST1VURVMoIkRTUDMiKSwKKworCUFSSVpPTkFfTVVYX1JPVVRFUygiSVNSQzFJTlQxIiwgIklTUkMxSU5UMSIpLAorCUFSSVpPTkFfTVVYX1JPVVRFUygiSVNSQzFJTlQyIiwgIklTUkMxSU5UMiIpLAorCUFSSVpPTkFfTVVYX1JPVVRFUygiSVNSQzFJTlQzIiwgIklTUkMxSU5UMyIpLAorCUFSSVpPTkFfTVVYX1JPVVRFUygiSVNSQzFJTlQ0IiwgIklTUkMxSU5UNCIpLAorCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJJU1JDMURFQzEiLCAiSVNSQzFERUMxIiksCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJJU1JDMURFQzIiLCAiSVNSQzFERUMyIiksCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJJU1JDMURFQzMiLCAiSVNSQzFERUMzIiksCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJJU1JDMURFQzQiLCAiSVNSQzFERUM0IiksCisKKwlBUklaT05BX01VWF9ST1VURVMoIklTUkMySU5UMSIsICJJU1JDMklOVDEiKSwKKwlBUklaT05BX01VWF9ST1VURVMoIklTUkMySU5UMiIsICJJU1JDMklOVDIiKSwKKwlBUklaT05BX01VWF9ST1VURVMoIklTUkMySU5UMyIsICJJU1JDMklOVDMiKSwKKwlBUklaT05BX01VWF9ST1VURVMoIklTUkMySU5UNCIsICJJU1JDMklOVDQiKSwKKworCUFSSVpPTkFfTVVYX1JPVVRFUygiSVNSQzJERUMxIiwgIklTUkMyREVDMSIpLAorCUFSSVpPTkFfTVVYX1JPVVRFUygiSVNSQzJERUMyIiwgIklTUkMyREVDMiIpLAorCUFSSVpPTkFfTVVYX1JPVVRFUygiSVNSQzJERUMzIiwgIklTUkMyREVDMyIpLAorCUFSSVpPTkFfTVVYX1JPVVRFUygiSVNSQzJERUM0IiwgIklTUkMyREVDNCIpLAorCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJJU1JDM0lOVDEiLCAiSVNSQzNJTlQxIiksCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJJU1JDM0lOVDIiLCAiSVNSQzNJTlQyIiksCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJJU1JDM0lOVDMiLCAiSVNSQzNJTlQzIiksCisJQVJJWk9OQV9NVVhfUk9VVEVTKCJJU1JDM0lOVDQiLCAiSVNSQzNJTlQ0IiksCisKKwlBUklaT05BX01VWF9ST1VURVMoIklTUkMzREVDMSIsICJJU1JDM0RFQzEiKSwKKwlBUklaT05BX01VWF9ST1VURVMoIklTUkMzREVDMiIsICJJU1JDM0RFQzIiKSwKKwlBUklaT05BX01VWF9ST1VURVMoIklTUkMzREVDMyIsICJJU1JDM0RFQzMiKSwKKwlBUklaT05BX01VWF9ST1VURVMoIklTUkMzREVDNCIsICJJU1JDM0RFQzQiKSwKKworCXsgIkFFQyBMb29wYmFjayIsICJIUE9VVDFMIiwgIk9VVDFMIiB9LAorCXsgIkFFQyBMb29wYmFjayIsICJIUE9VVDFSIiwgIk9VVDFSIiB9LAorCXsgIkhQT1VUMUwiLCBOVUxMLCAiT1VUMUwiIH0sCisJeyAiSFBPVVQxUiIsIE5VTEwsICJPVVQxUiIgfSwKKworCXsgIkFFQyBMb29wYmFjayIsICJTUEtPVVQiLCAiT1VUNEwiIH0sCisJeyAiU1BLT1VUTiIsIE5VTEwsICJPVVQ0TCIgfSwKKwl7ICJTUEtPVVRQIiwgTlVMTCwgIk9VVDRMIiB9LAorCisJeyAiTUlDU1VQUCIsIE5VTEwsICJTWVNDTEsiIH0sCisKKwl7ICJEUkMxIFNpZ25hbCBBY3Rpdml0eSIsIE5VTEwsICJEUkMxTCIgfSwKKwl7ICJEUkMxIFNpZ25hbCBBY3Rpdml0eSIsIE5VTEwsICJEUkMxUiIgfSwKKwl7ICJEUkMyIFNpZ25hbCBBY3Rpdml0eSIsIE5VTEwsICJEUkMyTCIgfSwKKwl7ICJEUkMyIFNpZ25hbCBBY3Rpdml0eSIsIE5VTEwsICJEUkMyUiIgfSwKK307CisKK3N0YXRpYyBpbnQgY3M0N2wyNF9zZXRfZmxsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGZsbF9pZCwgaW50IHNvdXJjZSwKKwkJCSAgdW5zaWduZWQgaW50IEZyZWYsIHVuc2lnbmVkIGludCBGb3V0KQoreworCXN0cnVjdCBjczQ3bDI0X3ByaXYgKmNzNDdsMjQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXN3aXRjaCAoZmxsX2lkKSB7CisJY2FzZSBDUzQ3TDI0X0ZMTDE6CisJCXJldHVybiBhcml6b25hX3NldF9mbGwoJmNzNDdsMjQtPmZsbFswXSwgc291cmNlLCBGcmVmLCBGb3V0KTsKKwljYXNlIENTNDdMMjRfRkxMMjoKKwkJcmV0dXJuIGFyaXpvbmFfc2V0X2ZsbCgmY3M0N2wyNC0+ZmxsWzFdLCBzb3VyY2UsIEZyZWYsIEZvdXQpOworCWNhc2UgQ1M0N0wyNF9GTEwxX1JFRkNMSzoKKwkJcmV0dXJuIGFyaXpvbmFfc2V0X2ZsbF9yZWZjbGsoJmNzNDdsMjQtPmZsbFswXSwgc291cmNlLCBGcmVmLAorCQkJCQkgICAgICBGb3V0KTsKKwljYXNlIENTNDdMMjRfRkxMMl9SRUZDTEs6CisJCXJldHVybiBhcml6b25hX3NldF9mbGxfcmVmY2xrKCZjczQ3bDI0LT5mbGxbMV0sIHNvdXJjZSwgRnJlZiwKKwkJCQkJICAgICAgRm91dCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisjZGVmaW5lIENTNDdMMjRfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAKKworI2RlZmluZSBDUzQ3TDI0X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCisJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgY3M0N2wyNF9kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gImNzNDdsMjQtYWlmMSIsCisJCS5pZCA9IDEsCisJCS5iYXNlID0gQVJJWk9OQV9BSUYxX0JDTEtfQ1RSTCwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjEgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gOCwKKwkJCS5yYXRlcyA9IENTNDdMMjRfUkFURVMsCisJCQkuZm9ybWF0cyA9IENTNDdMMjRfRk9STUFUUywKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkgLnN0cmVhbV9uYW1lID0gIkFJRjEgQ2FwdHVyZSIsCisJCQkgLmNoYW5uZWxzX21pbiA9IDEsCisJCQkgLmNoYW5uZWxzX21heCA9IDgsCisJCQkgLnJhdGVzID0gQ1M0N0wyNF9SQVRFUywKKwkJCSAuZm9ybWF0cyA9IENTNDdMMjRfRk9STUFUUywKKwkJIH0sCisJCS5vcHMgPSAmYXJpem9uYV9kYWlfb3BzLAorCQkuc3ltbWV0cmljX3JhdGVzID0gMSwKKwkJLnN5bW1ldHJpY19zYW1wbGViaXRzID0gMSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiY3M0N2wyNC1haWYyIiwKKwkJLmlkID0gMiwKKwkJLmJhc2UgPSBBUklaT05BX0FJRjJfQkNMS19DVFJMLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMiBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSA2LAorCQkJLnJhdGVzID0gQ1M0N0wyNF9SQVRFUywKKwkJCS5mb3JtYXRzID0gQ1M0N0wyNF9GT1JNQVRTLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCSAuc3RyZWFtX25hbWUgPSAiQUlGMiBDYXB0dXJlIiwKKwkJCSAuY2hhbm5lbHNfbWluID0gMSwKKwkJCSAuY2hhbm5lbHNfbWF4ID0gNiwKKwkJCSAucmF0ZXMgPSBDUzQ3TDI0X1JBVEVTLAorCQkJIC5mb3JtYXRzID0gQ1M0N0wyNF9GT1JNQVRTLAorCQkgfSwKKwkJLm9wcyA9ICZhcml6b25hX2RhaV9vcHMsCisJCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAorCQkuc3ltbWV0cmljX3NhbXBsZWJpdHMgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJjczQ3bDI0LWFpZjMiLAorCQkuaWQgPSAzLAorCQkuYmFzZSA9IEFSSVpPTkFfQUlGM19CQ0xLX0NUUkwsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYzIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBDUzQ3TDI0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBDUzQ3TDI0X0ZPUk1BVFMsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJIC5zdHJlYW1fbmFtZSA9ICJBSUYzIENhcHR1cmUiLAorCQkJIC5jaGFubmVsc19taW4gPSAxLAorCQkJIC5jaGFubmVsc19tYXggPSAyLAorCQkJIC5yYXRlcyA9IENTNDdMMjRfUkFURVMsCisJCQkgLmZvcm1hdHMgPSBDUzQ3TDI0X0ZPUk1BVFMsCisJCSB9LAorCQkub3BzID0gJmFyaXpvbmFfZGFpX29wcywKKwkJLnN5bW1ldHJpY19yYXRlcyA9IDEsCisJCS5zeW1tZXRyaWNfc2FtcGxlYml0cyA9IDEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgY3M0N2wyNF9jb2RlY19wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gc25kX3NvY19jb2RlY19nZXRfZGFwbShjb2RlYyk7CisJc3RydWN0IGNzNDdsMjRfcHJpdiAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCByZXQ7CisKKwlwcml2LT5jb3JlLmFyaXpvbmEtPmRhcG0gPSBkYXBtOworCisJYXJpem9uYV9pbml0X3Nwayhjb2RlYyk7CisJYXJpem9uYV9pbml0X2dwaW8oY29kZWMpOworCWFyaXpvbmFfaW5pdF9tb25vKGNvZGVjKTsKKworCXJldCA9IHdtX2Fkc3AyX2NvZGVjX3Byb2JlKCZwcml2LT5jb3JlLmFkc3BbMV0sIGNvZGVjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hZHNwMl9jb2RlY19wcm9iZTsKKworCXJldCA9IHdtX2Fkc3AyX2NvZGVjX3Byb2JlKCZwcml2LT5jb3JlLmFkc3BbMl0sIGNvZGVjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hZHNwMl9jb2RlY19wcm9iZTsKKworCXJldCA9IHNuZF9zb2NfYWRkX2NvZGVjX2NvbnRyb2xzKGNvZGVjLAorCQkJCQkgJmFyaXpvbmFfYWRzcDJfcmF0ZV9jb250cm9sc1sxXSwgMik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYWRzcDJfY29kZWNfcHJvYmU7CisKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIkhBUFRJQ1MiKTsKKworCXJldHVybiAwOworCitlcnJfYWRzcDJfY29kZWNfcHJvYmU6CisJd21fYWRzcDJfY29kZWNfcmVtb3ZlKCZwcml2LT5jb3JlLmFkc3BbMV0sIGNvZGVjKTsKKwl3bV9hZHNwMl9jb2RlY19yZW1vdmUoJnByaXYtPmNvcmUuYWRzcFsyXSwgY29kZWMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjczQ3bDI0X2NvZGVjX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNzNDdsMjRfcHJpdiAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisKKwl3bV9hZHNwMl9jb2RlY19yZW1vdmUoJnByaXYtPmNvcmUuYWRzcFsxXSwgY29kZWMpOworCXdtX2Fkc3AyX2NvZGVjX3JlbW92ZSgmcHJpdi0+Y29yZS5hZHNwWzJdLCBjb2RlYyk7CisKKwlwcml2LT5jb3JlLmFyaXpvbmEtPmRhcG0gPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQ1M0N0wyNF9ESUdfVlUgMHgwMjAwCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3M0N2wyNF9kaWdpdGFsX3Z1W10gPSB7CisJQVJJWk9OQV9EQUNfRElHSVRBTF9WT0xVTUVfMUwsCisJQVJJWk9OQV9EQUNfRElHSVRBTF9WT0xVTUVfMVIsCisJQVJJWk9OQV9EQUNfRElHSVRBTF9WT0xVTUVfNEwsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ21hcCAqY3M0N2wyNF9nZXRfcmVnbWFwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY3M0N2wyNF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gcHJpdi0+Y29yZS5hcml6b25hLT5yZWdtYXA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9jczQ3bDI0ID0geworCS5wcm9iZSA9IGNzNDdsMjRfY29kZWNfcHJvYmUsCisJLnJlbW92ZSA9IGNzNDdsMjRfY29kZWNfcmVtb3ZlLAorCS5nZXRfcmVnbWFwID0gY3M0N2wyNF9nZXRfcmVnbWFwLAorCisJLmlkbGVfYmlhc19vZmYgPSB0cnVlLAorCisJLnNldF9zeXNjbGsgPSBhcml6b25hX3NldF9zeXNjbGssCisJLnNldF9wbGwgPSBjczQ3bDI0X3NldF9mbGwsCisKKwkuY29udHJvbHMgPSBjczQ3bDI0X3NuZF9jb250cm9scywKKwkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRShjczQ3bDI0X3NuZF9jb250cm9scyksCisJLmRhcG1fd2lkZ2V0cyA9IGNzNDdsMjRfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShjczQ3bDI0X2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gY3M0N2wyNF9kYXBtX3JvdXRlcywKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShjczQ3bDI0X2RhcG1fcm91dGVzKSwKK307CisKK3N0YXRpYyBpbnQgY3M0N2wyNF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhcml6b25hICphcml6b25hID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBjczQ3bDI0X3ByaXYgKmNzNDdsMjQ7CisJaW50IGksIHJldDsKKworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGNzNDdsMjRfZGFpKSA+IEFSSVpPTkFfTUFYX0RBSSk7CisKKwljczQ3bDI0ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgY3M0N2wyNF9wcml2KSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghY3M0N2wyNCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjczQ3bDI0KTsKKworCWNzNDdsMjQtPmNvcmUuYXJpem9uYSA9IGFyaXpvbmE7CisJY3M0N2wyNC0+Y29yZS5udW1faW5wdXRzID0gNDsKKworCWZvciAoaSA9IDE7IGkgPD0gMjsgaSsrKSB7CisJCWNzNDdsMjQtPmNvcmUuYWRzcFtpXS5wYXJ0ID0gImNzNDdsMjQiOworCQljczQ3bDI0LT5jb3JlLmFkc3BbaV0ubnVtID0gaSArIDE7CisJCWNzNDdsMjQtPmNvcmUuYWRzcFtpXS50eXBlID0gV01GV19BRFNQMjsKKwkJY3M0N2wyNC0+Y29yZS5hZHNwW2ldLmRldiA9IGFyaXpvbmEtPmRldjsKKwkJY3M0N2wyNC0+Y29yZS5hZHNwW2ldLnJlZ21hcCA9IGFyaXpvbmEtPnJlZ21hcDsKKworCQljczQ3bDI0LT5jb3JlLmFkc3BbaV0uYmFzZSA9IEFSSVpPTkFfRFNQMV9DT05UUk9MXzEgKworCQkJCQkgICAgICgweDEwMCAqIGkpOworCQljczQ3bDI0LT5jb3JlLmFkc3BbaV0ubWVtID0gY3M0N2wyNF9kc3BfcmVnaW9uc1tpIC0gMV07CisJCWNzNDdsMjQtPmNvcmUuYWRzcFtpXS5udW1fbWVtcyA9CisJCQkJQVJSQVlfU0laRShjczQ3bDI0X2RzcDJfcmVnaW9ucyk7CisKKwkJcmV0ID0gd21fYWRzcDJfaW5pdCgmY3M0N2wyNC0+Y29yZS5hZHNwW2ldKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjczQ3bDI0LT5mbGwpOyBpKyspCisJCWNzNDdsMjQtPmZsbFtpXS52Y29fbXVsdCA9IDM7CisKKwlhcml6b25hX2luaXRfZmxsKGFyaXpvbmEsIDEsIEFSSVpPTkFfRkxMMV9DT05UUk9MXzEgLSAxLAorCQkJIEFSSVpPTkFfSVJRX0ZMTDFfTE9DSywgQVJJWk9OQV9JUlFfRkxMMV9DTE9DS19PSywKKwkJCSAmY3M0N2wyNC0+ZmxsWzBdKTsKKwlhcml6b25hX2luaXRfZmxsKGFyaXpvbmEsIDIsIEFSSVpPTkFfRkxMMl9DT05UUk9MXzEgLSAxLAorCQkJIEFSSVpPTkFfSVJRX0ZMTDJfTE9DSywgQVJJWk9OQV9JUlFfRkxMMl9DTE9DS19PSywKKwkJCSAmY3M0N2wyNC0+ZmxsWzFdKTsKKworCS8qIFNSMiBmaXhlZCBhdCA4a0h6LCBTUjMgZml4ZWQgYXQgMTZrSHogKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoYXJpem9uYS0+cmVnbWFwLCBBUklaT05BX1NBTVBMRV9SQVRFXzIsCisJCQkgICBBUklaT05BX1NBTVBMRV9SQVRFXzJfTUFTSywgMHgxMSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFyaXpvbmEtPnJlZ21hcCwgQVJJWk9OQV9TQU1QTEVfUkFURV8zLAorCQkJICAgQVJJWk9OQV9TQU1QTEVfUkFURV8zX01BU0ssIDB4MTIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3M0N2wyNF9kYWkpOyBpKyspCisJCWFyaXpvbmFfaW5pdF9kYWkoJmNzNDdsMjQtPmNvcmUsIGkpOworCisJLyogTGF0Y2ggdm9sdW1lIHVwZGF0ZSBiaXRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3M0N2wyNF9kaWdpdGFsX3Z1KTsgaSsrKQorCQlyZWdtYXBfdXBkYXRlX2JpdHMoYXJpem9uYS0+cmVnbWFwLCBjczQ3bDI0X2RpZ2l0YWxfdnVbaV0sCisJCQkJICAgQ1M0N0wyNF9ESUdfVlUsIENTNDdMMjRfRElHX1ZVKTsKKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfaWRsZSgmcGRldi0+ZGV2KTsKKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZwZGV2LT5kZXYsICZzb2NfY29kZWNfZGV2X2NzNDdsMjQsCisJCQkJICAgICAgY3M0N2wyNF9kYWksIEFSUkFZX1NJWkUoY3M0N2wyNF9kYWkpKTsKK30KKworc3RhdGljIGludCBjczQ3bDI0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY3M0N2wyNF9jb2RlY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiY3M0N2wyNC1jb2RlYyIsCisJfSwKKwkucHJvYmUgPSBjczQ3bDI0X3Byb2JlLAorCS5yZW1vdmUgPSBjczQ3bDI0X3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY3M0N2wyNF9jb2RlY19kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgQ1M0N0wyNCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlJpY2hhcmQgRml0emdlcmFsZCA8cmZAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpjczQ3bDI0LWNvZGVjIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzNDdsMjQuaCBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0N2wyNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YWIyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDdsMjQuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogY3M0N2wyNC5oICAtLSAgQUxTQSBTb0MgQXVkaW8gZHJpdmVyIGZvciBDaXJydXMgTG9naWMgQ1M0N0wyNAorICoKKyAqIENvcHlyaWdodCAyMDE1IENpcnJ1cyBMb2dpYyBJbmMuCisgKgorICogQXV0aG9yOiBSaWNoYXJkIEZpdHpnZXJhbGQgPHJmQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0NTNDdMMjRfSAorI2RlZmluZSBfQ1M0N0wyNF9ICisKKyNpbmNsdWRlICJhcml6b25hLmgiCisKKyNkZWZpbmUgQ1M0N0wyNF9GTEwxICAgICAgICAxCisjZGVmaW5lIENTNDdMMjRfRkxMMiAgICAgICAgMgorI2RlZmluZSBDUzQ3TDI0X0ZMTDFfUkVGQ0xLIDMKKyNkZWZpbmUgQ1M0N0wyNF9GTEwyX1JFRkNMSyA0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9kYTcyMTguYyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjE4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM1NzVmMgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjE4LmMKQEAgLTAsMCArMSwzMzQxIEBACisvKgorICogZGE3MjE4LmMgLSBEQTcyMTggQUxTQSBTb0MgQ29kZWMgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE1IERpYWxvZyBTZW1pY29uZHVjdG9yCisgKgorICogQXV0aG9yOiBBZGFtIFRob21zb24gPEFkYW0uVGhvbXNvbi5PcGVuc291cmNlQGRpYXNlbWkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgPHNvdW5kL2RhNzIxOC5oPgorI2luY2x1ZGUgImRhNzIxOC5oIgorCisKKy8qCisgKiBUTFZzIGFuZCBFbnVtcworICovCisKKy8qIElucHV0IFRMVnMgKi8KK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYTcyMThfbWljX2dhaW5fdGx2LCAtNjAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhNzIxOF9taXhpbl9nYWluX3RsdiwgLTQ1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYTcyMThfaW5fZGlnX2dhaW5fdGx2LCAtODMyNSwgNzUsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhNzIxOF9hZ3NfdHJpZ2dlcl90bHYsIC05MDAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhNzIxOF9hZ3NfYXR0X21heF90bHYsIDAsIDYwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGE3MjE4X2FsY190aHJlc2hvbGRfdGx2LCAtOTQ1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYTcyMThfYWxjX2dhaW5fdGx2LCAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhNzIxOF9hbGNfYW5hX2dhaW5fdGx2LCAwLCA2MDAsIDApOworCisvKiBJbnB1dC9PdXRwdXQgVExWcyAqLworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhNzIxOF9kbWl4X2dhaW5fdGx2LCAtNDIwMCwgMTUwLCAwKTsKKworLyogT3V0cHV0IFRMVnMgKi8KK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYTcyMThfZGdzX3RyaWdnZXJfdGx2LCAtOTQ1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYTcyMThfZGdzX2FudGljbGlwX3RsdiwgLTQyMDAsIDYwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGE3MjE4X2Rnc19zaWduYWxfdGx2LCAtOTAwMCwgNjAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYTcyMThfb3V0X2VxX2JhbmRfdGx2LCAtMTA1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYTcyMThfb3V0X2RpZ19nYWluX3RsdiwgLTgzMjUsIDc1LCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYTcyMThfZGFjX25nX3RocmVzaG9sZF90bHYsIC0xMDIwMCwgNjAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYTcyMThfbWl4b3V0X2dhaW5fdGx2LCAtMTAwLCA1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGE3MjE4X2hwX2dhaW5fdGx2LCAtNTcwMCwgMTUwLCAwKTsKKworLyogSW5wdXQgRW51bXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGE3MjE4X2FsY19hdHRhY2tfcmF0ZV90eHRbXSA9IHsKKwkiNy4zMy9mcyIsICIxNC42Ni9mcyIsICIyOS4zMi9mcyIsICI1OC42NC9mcyIsICIxMTcuMy9mcyIsICIyMzQuNi9mcyIsCisJIjQ2OS4xL2ZzIiwgIjkzOC4yL2ZzIiwgIjE4NzYvZnMiLCAiMzc1My9mcyIsICI3NTA2L2ZzIiwgIjE1MDEyL2ZzIiwKKwkiMzAwMjQvZnMiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfYWxjX2F0dGFja19yYXRlID0KKwlTT0NfRU5VTV9TSU5HTEUoREE3MjE4X0FMQ19DVFJMMiwgREE3MjE4X0FMQ19BVFRBQ0tfU0hJRlQsCisJCQlEQTcyMThfQUxDX0FUVEFDS19NQVgsIGRhNzIxOF9hbGNfYXR0YWNrX3JhdGVfdHh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfYWxjX3JlbGVhc2VfcmF0ZV90eHRbXSA9IHsKKwkiMjguNjYvZnMiLCAiNTcuMzMvZnMiLCAiMTE0LjYvZnMiLCAiMjI5LjMvZnMiLCAiNDU4LjYvZnMiLCAiOTE3LjEvZnMiLAorCSIxODM0L2ZzIiwgIjM2NjgvZnMiLCAiNzMzNy9mcyIsICIxNDY3NC9mcyIsICIyOTM0OC9mcyIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9hbGNfcmVsZWFzZV9yYXRlID0KKwlTT0NfRU5VTV9TSU5HTEUoREE3MjE4X0FMQ19DVFJMMiwgREE3MjE4X0FMQ19SRUxFQVNFX1NISUZULAorCQkJREE3MjE4X0FMQ19SRUxFQVNFX01BWCwgZGE3MjE4X2FsY19yZWxlYXNlX3JhdGVfdHh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfYWxjX2hvbGRfdGltZV90eHRbXSA9IHsKKwkiNjIvZnMiLCAiMTI0L2ZzIiwgIjI0OC9mcyIsICI0OTYvZnMiLCAiOTkyL2ZzIiwgIjE5ODQvZnMiLCAiMzk2OC9mcyIsCisJIjc5MzYvZnMiLCAiMTU4NzIvZnMiLCAiMzE3NDQvZnMiLCAiNjM0ODgvZnMiLCAiMTI2OTc2L2ZzIiwKKwkiMjUzOTUyL2ZzIiwgIjUwNzkwNC9mcyIsICIxMDE1ODA4L2ZzIiwgIjIwMzE2MTYvZnMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9hbGNfaG9sZF90aW1lID0KKwlTT0NfRU5VTV9TSU5HTEUoREE3MjE4X0FMQ19DVFJMMywgREE3MjE4X0FMQ19IT0xEX1NISUZULAorCQkJREE3MjE4X0FMQ19IT0xEX01BWCwgZGE3MjE4X2FsY19ob2xkX3RpbWVfdHh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfYWxjX2FudGljbGlwX3N0ZXBfdHh0W10gPSB7CisJIjAuMDM0ZEIvZnMiLCAiMC4wNjhkQi9mcyIsICIwLjEzNmRCL2ZzIiwgIjAuMjcyZEIvZnMiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfYWxjX2FudGljbGlwX3N0ZXAgPQorCVNPQ19FTlVNX1NJTkdMRShEQTcyMThfQUxDX0FOVElDTElQX0NUUkwsCisJCQlEQTcyMThfQUxDX0FOVElDTElQX1NURVBfU0hJRlQsCisJCQlEQTcyMThfQUxDX0FOVElDTElQX1NURVBfTUFYLAorCQkJZGE3MjE4X2FsY19hbnRpY2xpcF9zdGVwX3R4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGE3MjE4X2ludGVnX3JhdGVfdHh0W10gPSB7CisJIjEvNCIsICIxLzE2IiwgIjEvMjU2IiwgIjEvNjU1MzYiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9pbnRlZ19hdHRhY2tfcmF0ZSA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9FTlZfVFJBQ0tfQ1RSTCwgREE3MjE4X0lOVEVHX0FUVEFDS19TSElGVCwKKwkJCURBNzIxOF9JTlRFR19NQVgsIGRhNzIxOF9pbnRlZ19yYXRlX3R4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGE3MjE4X2ludGVnX3JlbGVhc2VfcmF0ZSA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9FTlZfVFJBQ0tfQ1RSTCwgREE3MjE4X0lOVEVHX1JFTEVBU0VfU0hJRlQsCisJCQlEQTcyMThfSU5URUdfTUFYLCBkYTcyMThfaW50ZWdfcmF0ZV90eHQpOworCisvKiBJbnB1dC9PdXRwdXQgRW51bXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGE3MjE4X2dhaW5fcmFtcF9yYXRlX3R4dFtdID0geworCSJOb21pbmFsIFJhdGUgKiA4IiwgIk5vbWluYWwgUmF0ZSIsICJOb21pbmFsIFJhdGUgLyA4IiwKKwkiTm9taW5hbCBSYXRlIC8gMTYiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfZ2Fpbl9yYW1wX3JhdGUgPQorCVNPQ19FTlVNX1NJTkdMRShEQTcyMThfR0FJTl9SQU1QX0NUUkwsIERBNzIxOF9HQUlOX1JBTVBfUkFURV9TSElGVCwKKwkJCURBNzIxOF9HQUlOX1JBTVBfUkFURV9NQVgsIGRhNzIxOF9nYWluX3JhbXBfcmF0ZV90eHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhNzIxOF9ocGZfbW9kZV90eHRbXSA9IHsKKwkiRGlzYWJsZWQiLCAiQXVkaW8iLCAiVm9pY2UiLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkYTcyMThfaHBmX21vZGVfdmFsW10gPSB7CisJREE3MjE4X0hQRl9ESVNBQkxFRCwgREE3MjE4X0hQRl9BVURJT19FTiwgREE3MjE4X0hQRl9WT0lDRV9FTiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGE3MjE4X2luMV9ocGZfbW9kZSA9CisJU09DX1ZBTFVFX0VOVU1fU0lOR0xFKERBNzIxOF9JTl8xX0hQRl9GSUxURVJfQ1RSTCwKKwkJCSAgICAgIERBNzIxOF9IUEZfTU9ERV9TSElGVCwgREE3MjE4X0hQRl9NT0RFX01BU0ssCisJCQkgICAgICBEQTcyMThfSFBGX01PREVfTUFYLCBkYTcyMThfaHBmX21vZGVfdHh0LAorCQkJICAgICAgZGE3MjE4X2hwZl9tb2RlX3ZhbCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGE3MjE4X2luMl9ocGZfbW9kZSA9CisJU09DX1ZBTFVFX0VOVU1fU0lOR0xFKERBNzIxOF9JTl8yX0hQRl9GSUxURVJfQ1RSTCwKKwkJCSAgICAgIERBNzIxOF9IUEZfTU9ERV9TSElGVCwgREE3MjE4X0hQRl9NT0RFX01BU0ssCisJCQkgICAgICBEQTcyMThfSFBGX01PREVfTUFYLCBkYTcyMThfaHBmX21vZGVfdHh0LAorCQkJICAgICAgZGE3MjE4X2hwZl9tb2RlX3ZhbCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGE3MjE4X291dDFfaHBmX21vZGUgPQorCVNPQ19WQUxVRV9FTlVNX1NJTkdMRShEQTcyMThfT1VUXzFfSFBGX0ZJTFRFUl9DVFJMLAorCQkJICAgICAgREE3MjE4X0hQRl9NT0RFX1NISUZULCBEQTcyMThfSFBGX01PREVfTUFTSywKKwkJCSAgICAgIERBNzIxOF9IUEZfTU9ERV9NQVgsIGRhNzIxOF9ocGZfbW9kZV90eHQsCisJCQkgICAgICBkYTcyMThfaHBmX21vZGVfdmFsKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfYXVkaW9faHBmX2Nvcm5lcl90eHRbXSA9IHsKKwkiMkh6IiwgIjRIeiIsICI4SHoiLCAiMTZIeiIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9pbjFfYXVkaW9faHBmX2Nvcm5lciA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9JTl8xX0hQRl9GSUxURVJfQ1RSTCwKKwkJCURBNzIxOF9JTl8xX0FVRElPX0hQRl9DT1JORVJfU0hJRlQsCisJCQlEQTcyMThfQVVESU9fSFBGX0NPUk5FUl9NQVgsCisJCQlkYTcyMThfYXVkaW9faHBmX2Nvcm5lcl90eHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9pbjJfYXVkaW9faHBmX2Nvcm5lciA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9JTl8yX0hQRl9GSUxURVJfQ1RSTCwKKwkJCURBNzIxOF9JTl8yX0FVRElPX0hQRl9DT1JORVJfU0hJRlQsCisJCQlEQTcyMThfQVVESU9fSFBGX0NPUk5FUl9NQVgsCisJCQlkYTcyMThfYXVkaW9faHBmX2Nvcm5lcl90eHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9vdXQxX2F1ZGlvX2hwZl9jb3JuZXIgPQorCVNPQ19FTlVNX1NJTkdMRShEQTcyMThfT1VUXzFfSFBGX0ZJTFRFUl9DVFJMLAorCQkJREE3MjE4X09VVF8xX0FVRElPX0hQRl9DT1JORVJfU0hJRlQsCisJCQlEQTcyMThfQVVESU9fSFBGX0NPUk5FUl9NQVgsCisJCQlkYTcyMThfYXVkaW9faHBmX2Nvcm5lcl90eHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhNzIxOF92b2ljZV9ocGZfY29ybmVyX3R4dFtdID0geworCSIyLjVIeiIsICIyNUh6IiwgIjUwSHoiLCAiMTAwSHoiLCAiMTUwSHoiLCAiMjAwSHoiLCAiMzAwSHoiLCAiNDAwSHoiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfaW4xX3ZvaWNlX2hwZl9jb3JuZXIgPQorCVNPQ19FTlVNX1NJTkdMRShEQTcyMThfSU5fMV9IUEZfRklMVEVSX0NUUkwsCisJCQlEQTcyMThfSU5fMV9WT0lDRV9IUEZfQ09STkVSX1NISUZULAorCQkJREE3MjE4X1ZPSUNFX0hQRl9DT1JORVJfTUFYLAorCQkJZGE3MjE4X3ZvaWNlX2hwZl9jb3JuZXJfdHh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfaW4yX3ZvaWNlX2hwZl9jb3JuZXIgPQorCVNPQ19FTlVNX1NJTkdMRShEQTcyMThfSU5fMl9IUEZfRklMVEVSX0NUUkwsCisJCQlEQTcyMThfSU5fMl9WT0lDRV9IUEZfQ09STkVSX1NISUZULAorCQkJREE3MjE4X1ZPSUNFX0hQRl9DT1JORVJfTUFYLAorCQkJZGE3MjE4X3ZvaWNlX2hwZl9jb3JuZXJfdHh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfb3V0MV92b2ljZV9ocGZfY29ybmVyID0KKwlTT0NfRU5VTV9TSU5HTEUoREE3MjE4X09VVF8xX0hQRl9GSUxURVJfQ1RSTCwKKwkJCURBNzIxOF9PVVRfMV9WT0lDRV9IUEZfQ09STkVSX1NISUZULAorCQkJREE3MjE4X1ZPSUNFX0hQRl9DT1JORVJfTUFYLAorCQkJZGE3MjE4X3ZvaWNlX2hwZl9jb3JuZXJfdHh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfdG9uZWdlbl9kdG1mX2tleV90eHRbXSA9IHsKKwkiMCIsICIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSIsICJBIiwgIkIiLCAiQyIsICJEIiwKKwkiKiIsICIjIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfdG9uZWdlbl9kdG1mX2tleSA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9UT05FX0dFTl9DRkcxLCBEQTcyMThfRFRNRl9SRUdfU0hJRlQsCisJCQlEQTcyMThfRFRNRl9SRUdfTUFYLCBkYTcyMThfdG9uZWdlbl9kdG1mX2tleV90eHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhNzIxOF90b25lZ2VuX3N3Z19zZWxfdHh0W10gPSB7CisJIlN1bSIsICJTV0cxIiwgIlNXRzIiLCAiU1dHMV8xLUNvcyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGE3MjE4X3RvbmVnZW5fc3dnX3NlbCA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9UT05FX0dFTl9DRkcyLCBEQTcyMThfU1dHX1NFTF9TSElGVCwKKwkJCURBNzIxOF9TV0dfU0VMX01BWCwgZGE3MjE4X3RvbmVnZW5fc3dnX3NlbF90eHQpOworCisvKiBPdXRwdXQgRW51bXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGE3MjE4X2Rnc19yaXNlX2NvZWZmX3R4dFtdID0geworCSIxLzEiLCAiMS8xNiIsICIxLzY0IiwgIjEvMjU2IiwgIjEvMTAyNCIsICIxLzQwOTYiLCAiMS8xNjM4NCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9kZ3NfcmlzZV9jb2VmZiA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9ER1NfUklTRV9GQUxMLCBEQTcyMThfREdTX1JJU0VfQ09FRkZfU0hJRlQsCisJCQlEQTcyMThfREdTX1JJU0VfQ09FRkZfTUFYLCBkYTcyMThfZGdzX3Jpc2VfY29lZmZfdHh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfZGdzX2ZhbGxfY29lZmZfdHh0W10gPSB7CisJIjEvNCIsICIxLzE2IiwgIjEvNjQiLCAiMS8yNTYiLCAiMS8xMDI0IiwgIjEvNDA5NiIsICIxLzE2Mzg0IiwgIjEvNjU1MzYiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfZGdzX2ZhbGxfY29lZmYgPQorCVNPQ19FTlVNX1NJTkdMRShEQTcyMThfREdTX1JJU0VfRkFMTCwgREE3MjE4X0RHU19GQUxMX0NPRUZGX1NISUZULAorCQkJREE3MjE4X0RHU19GQUxMX0NPRUZGX01BWCwgZGE3MjE4X2Rnc19mYWxsX2NvZWZmX3R4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGE3MjE4X2RhY19uZ19zZXR1cF90aW1lX3R4dFtdID0geworCSIyNTYgU2FtcGxlcyIsICI1MTIgU2FtcGxlcyIsICIxMDI0IFNhbXBsZXMiLCAiMjA0OCBTYW1wbGVzIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfZGFjX25nX3NldHVwX3RpbWUgPQorCVNPQ19FTlVNX1NJTkdMRShEQTcyMThfREFDX05HX1NFVFVQX1RJTUUsCisJCQlEQTcyMThfREFDX05HX1NFVFVQX1RJTUVfU0hJRlQsCisJCQlEQTcyMThfREFDX05HX1NFVFVQX1RJTUVfTUFYLAorCQkJZGE3MjE4X2RhY19uZ19zZXR1cF90aW1lX3R4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGE3MjE4X2RhY19uZ19yYW1wdXBfdHh0W10gPSB7CisJIjAuMjJtcy9kQiIsICIwLjAxMzhtcy9kQiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGE3MjE4X2RhY19uZ19yYW1wdXBfcmF0ZSA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9EQUNfTkdfU0VUVVBfVElNRSwKKwkJCURBNzIxOF9EQUNfTkdfUkFNUFVQX1JBVEVfU0hJRlQsCisJCQlEQTcyMThfREFDX05HX1JBTVBVUF9SQVRFX01BWCwKKwkJCWRhNzIxOF9kYWNfbmdfcmFtcHVwX3R4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGE3MjE4X2RhY19uZ19yYW1wZG93bl90eHRbXSA9IHsKKwkiMC44OG1zL2RCIiwgIjE0LjA4bXMvZEIiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9kYWNfbmdfcmFtcGRvd25fcmF0ZSA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9EQUNfTkdfU0VUVVBfVElNRSwKKwkJCURBNzIxOF9EQUNfTkdfUkFNUEROX1JBVEVfU0hJRlQsCisJCQlEQTcyMThfREFDX05HX1JBTVBETl9SQVRFX01BWCwKKwkJCWRhNzIxOF9kYWNfbmdfcmFtcGRvd25fdHh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfY3BfbWNoYW5nZV90eHRbXSA9IHsKKwkiTGFyZ2VzdCBWb2x1bWUiLCAiREFDIFZvbHVtZSIsICJTaWduYWwgTWFnbml0dWRlIgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkYTcyMThfY3BfbWNoYW5nZV92YWxbXSA9IHsKKwlEQTcyMThfQ1BfTUNIQU5HRV9MQVJHRVNUX1ZPTCwgREE3MjE4X0NQX01DSEFOR0VfREFDX1ZPTCwKKwlEQTcyMThfQ1BfTUNIQU5HRV9TSUdfTUFHCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9jcF9tY2hhbmdlID0KKwlTT0NfVkFMVUVfRU5VTV9TSU5HTEUoREE3MjE4X0NQX0NUUkwsIERBNzIxOF9DUF9NQ0hBTkdFX1NISUZULAorCQkJICAgICAgREE3MjE4X0NQX01DSEFOR0VfUkVMX01BU0ssIERBNzIxOF9DUF9NQ0hBTkdFX01BWCwKKwkJCSAgICAgIGRhNzIxOF9jcF9tY2hhbmdlX3R4dCwgZGE3MjE4X2NwX21jaGFuZ2VfdmFsKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfY3BfZmNvbnRyb2xfdHh0W10gPSB7CisJIjFNSHoiLCAiNTAwS0h6IiwgIjI1MEtIeiIsICIxMjVLSHoiLCAiNjNLSHoiLCAiMEtIeiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGE3MjE4X2NwX2Zjb250cm9sID0KKwlTT0NfRU5VTV9TSU5HTEUoREE3MjE4X0NQX0RFTEFZLCBEQTcyMThfQ1BfRkNPTlRST0xfU0hJRlQsCisJCQlEQTcyMThfQ1BfRkNPTlRST0xfTUFYLCBkYTcyMThfY3BfZmNvbnRyb2xfdHh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfY3BfdGF1X2RlbGF5X3R4dFtdID0geworCSIwbXMiLCAiMm1zIiwgIjRtcyIsICIxNm1zIiwgIjY0bXMiLCAiMTI4bXMiLCAiMjU2bXMiLCAiNTEybXMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9jcF90YXVfZGVsYXkgPQorCVNPQ19FTlVNX1NJTkdMRShEQTcyMThfQ1BfREVMQVksIERBNzIxOF9DUF9UQVVfREVMQVlfU0hJRlQsCisJCQlEQTcyMThfQ1BfVEFVX0RFTEFZX01BWCwgZGE3MjE4X2NwX3RhdV9kZWxheV90eHQpOworCisvKgorICogQ29udHJvbCBGdW5jdGlvbnMKKyAqLworCisvKiBBTEMgKi8KK3N0YXRpYyB2b2lkIGRhNzIxOF9hbGNfY2FsaWIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXU4IG1pY18xX2N0cmwsIG1pY18yX2N0cmw7CisJdTggbWl4aW5fMV9jdHJsLCBtaXhpbl8yX2N0cmw7CisJdTggaW5fMWxfZmlsdF9jdHJsLCBpbl8xcl9maWx0X2N0cmwsIGluXzJsX2ZpbHRfY3RybCwgaW5fMnJfZmlsdF9jdHJsOworCXU4IGluXzFfaHBmX2N0cmwsIGluXzJfaHBmX2N0cmw7CisJdTggY2FsaWJfY3RybDsKKwlpbnQgaSA9IDA7CisJYm9vbCBjYWxpYnJhdGVkID0gZmFsc2U7CisKKwkvKiBTYXZlIGN1cnJlbnQgc3RhdGUgb2YgTUlDIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJbWljXzFfY3RybCA9IHNuZF9zb2NfcmVhZChjb2RlYywgREE3MjE4X01JQ18xX0NUUkwpOworCW1pY18yX2N0cmwgPSBzbmRfc29jX3JlYWQoY29kZWMsIERBNzIxOF9NSUNfMl9DVFJMKTsKKworCS8qIFNhdmUgY3VycmVudCBzdGF0ZSBvZiBpbnB1dCBtaXhlciBjb250cm9sIHJlZ2lzdGVycyAqLworCW1peGluXzFfY3RybCA9IHNuZF9zb2NfcmVhZChjb2RlYywgREE3MjE4X01JWElOXzFfQ1RSTCk7CisJbWl4aW5fMl9jdHJsID0gc25kX3NvY19yZWFkKGNvZGVjLCBEQTcyMThfTUlYSU5fMl9DVFJMKTsKKworCS8qIFNhdmUgY3VycmVudCBzdGF0ZSBvZiBpbnB1dCBmaWx0ZXIgY29udHJvbCByZWdpc3RlcnMgKi8KKwlpbl8xbF9maWx0X2N0cmwgPSBzbmRfc29jX3JlYWQoY29kZWMsIERBNzIxOF9JTl8xTF9GSUxURVJfQ1RSTCk7CisJaW5fMXJfZmlsdF9jdHJsID0gc25kX3NvY19yZWFkKGNvZGVjLCBEQTcyMThfSU5fMVJfRklMVEVSX0NUUkwpOworCWluXzJsX2ZpbHRfY3RybCA9IHNuZF9zb2NfcmVhZChjb2RlYywgREE3MjE4X0lOXzJMX0ZJTFRFUl9DVFJMKTsKKwlpbl8ycl9maWx0X2N0cmwgPSBzbmRfc29jX3JlYWQoY29kZWMsIERBNzIxOF9JTl8yUl9GSUxURVJfQ1RSTCk7CisKKwkvKiBTYXZlIGN1cnJlbnQgc3RhdGUgb2YgaW5wdXQgSFBGIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJaW5fMV9ocGZfY3RybCA9IHNuZF9zb2NfcmVhZChjb2RlYywgREE3MjE4X0lOXzFfSFBGX0ZJTFRFUl9DVFJMKTsKKwlpbl8yX2hwZl9jdHJsID0gc25kX3NvY19yZWFkKGNvZGVjLCBEQTcyMThfSU5fMl9IUEZfRklMVEVSX0NUUkwpOworCisJLyogRW5hYmxlIHRoZW4gTXV0ZSBNSUMgUEdBcyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9NSUNfMV9DVFJMLCBEQTcyMThfTUlDXzFfQU1QX0VOX01BU0ssCisJCQkgICAgREE3MjE4X01JQ18xX0FNUF9FTl9NQVNLKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfTUlDXzJfQ1RSTCwgREE3MjE4X01JQ18yX0FNUF9FTl9NQVNLLAorCQkJICAgIERBNzIxOF9NSUNfMl9BTVBfRU5fTUFTSyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X01JQ18xX0NUUkwsCisJCQkgICAgREE3MjE4X01JQ18xX0FNUF9NVVRFX0VOX01BU0ssCisJCQkgICAgREE3MjE4X01JQ18xX0FNUF9NVVRFX0VOX01BU0spOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9NSUNfMl9DVFJMLAorCQkJICAgIERBNzIxOF9NSUNfMl9BTVBfTVVURV9FTl9NQVNLLAorCQkJICAgIERBNzIxOF9NSUNfMl9BTVBfTVVURV9FTl9NQVNLKTsKKworCS8qIEVuYWJsZSBpbnB1dCBtaXhlcnMgdW5tdXRlZCAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9NSVhJTl8xX0NUUkwsCisJCQkgICAgREE3MjE4X01JWElOXzFfQU1QX0VOX01BU0sgfAorCQkJICAgIERBNzIxOF9NSVhJTl8xX0FNUF9NVVRFX0VOX01BU0ssCisJCQkgICAgREE3MjE4X01JWElOXzFfQU1QX0VOX01BU0spOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9NSVhJTl8yX0NUUkwsCisJCQkgICAgREE3MjE4X01JWElOXzJfQU1QX0VOX01BU0sgfAorCQkJICAgIERBNzIxOF9NSVhJTl8yX0FNUF9NVVRFX0VOX01BU0ssCisJCQkgICAgREE3MjE4X01JWElOXzJfQU1QX0VOX01BU0spOworCisJLyogRW5hYmxlIGlucHV0IGZpbHRlcnMgdW5tdXRlZCAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9JTl8xTF9GSUxURVJfQ1RSTCwKKwkJCSAgICBEQTcyMThfSU5fMUxfRklMVEVSX0VOX01BU0sgfAorCQkJICAgIERBNzIxOF9JTl8xTF9NVVRFX0VOX01BU0ssCisJCQkgICAgREE3MjE4X0lOXzFMX0ZJTFRFUl9FTl9NQVNLKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfSU5fMVJfRklMVEVSX0NUUkwsCisJCQkgICAgREE3MjE4X0lOXzFSX0ZJTFRFUl9FTl9NQVNLIHwKKwkJCSAgICBEQTcyMThfSU5fMVJfTVVURV9FTl9NQVNLLAorCQkJICAgIERBNzIxOF9JTl8xUl9GSUxURVJfRU5fTUFTSyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X0lOXzJMX0ZJTFRFUl9DVFJMLAorCQkJICAgIERBNzIxOF9JTl8yTF9GSUxURVJfRU5fTUFTSyB8CisJCQkgICAgREE3MjE4X0lOXzJMX01VVEVfRU5fTUFTSywKKwkJCSAgICBEQTcyMThfSU5fMkxfRklMVEVSX0VOX01BU0spOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9JTl8yUl9GSUxURVJfQ1RSTCwKKwkJCSAgICBEQTcyMThfSU5fMlJfRklMVEVSX0VOX01BU0sgfAorCQkJICAgIERBNzIxOF9JTl8yUl9NVVRFX0VOX01BU0ssCisJCQkgICAgREE3MjE4X0lOXzJSX0ZJTFRFUl9FTl9NQVNLKTsKKworCS8qCisJICogTWFrZSBzdXJlIGlucHV0IEhQRnMgdm9pY2UgbW9kZSBpcyBkaXNhYmxlZCwgb3RoZXJ3aXNlIGZvciBzYW1wbGluZworCSAqIHJhdGVzIGFib3ZlIDMyS0h6IHRoZSBBREMgc2lnbmFscyB3aWxsIGJlIHN0b3BwZWQgYW5kIHdpbGwgY2F1c2UKKwkgKiBjYWxpYnJhdGlvbiB0byBsb2NrIHVwLgorCSAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9JTl8xX0hQRl9GSUxURVJfQ1RSTCwKKwkJCSAgICBEQTcyMThfSU5fMV9WT0lDRV9FTl9NQVNLLCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfSU5fMl9IUEZfRklMVEVSX0NUUkwsCisJCQkgICAgREE3MjE4X0lOXzJfVk9JQ0VfRU5fTUFTSywgMCk7CisKKwkvKiBQZXJmb3JtIGF1dG8gY2FsaWJyYXRpb24gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfQ0FMSUJfQ1RSTCwgREE3MjE4X0NBTElCX0FVVE9fRU5fTUFTSywKKwkJCSAgICBEQTcyMThfQ0FMSUJfQVVUT19FTl9NQVNLKTsKKwlkbyB7CisJCWNhbGliX2N0cmwgPSBzbmRfc29jX3JlYWQoY29kZWMsIERBNzIxOF9DQUxJQl9DVFJMKTsKKwkJaWYgKGNhbGliX2N0cmwgJiBEQTcyMThfQ0FMSUJfQVVUT19FTl9NQVNLKSB7CisJCQkrK2k7CisJCQl1c2xlZXBfcmFuZ2UoREE3MjE4X0FMQ19DQUxJQl9ERUxBWV9NSU4sCisJCQkJICAgICBEQTcyMThfQUxDX0NBTElCX0RFTEFZX01BWCk7CisJCX0gZWxzZSB7CisJCQljYWxpYnJhdGVkID0gdHJ1ZTsKKwkJfQorCisJfSB3aGlsZSAoKGkgPCBEQTcyMThfQUxDX0NBTElCX01BWF9UUklFUykgJiYgKCFjYWxpYnJhdGVkKSk7CisKKwkvKiBJZiBhdXRvIGNhbGlicmF0aW9uIGZhaWxzLCBkaXNhYmxlIERDIG9mZnNldCwgaHlicmlkIEFMQyAqLworCWlmICgoIWNhbGlicmF0ZWQpIHx8IChjYWxpYl9jdHJsICYgREE3MjE4X0NBTElCX09WRVJGTE9XX01BU0spKSB7CisJCWRldl93YXJuKGNvZGVjLT5kZXYsCisJCQkgIkFMQyBhdXRvIGNhbGlicmF0aW9uIGZhaWxlZCAtICVzXG4iLAorCQkJIChjYWxpYnJhdGVkKSA/ICJvdmVyZmxvdyIgOiAidGltZW91dCIpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfQ0FMSUJfQ1RSTCwKKwkJCQkgICAgREE3MjE4X0NBTElCX09GRlNFVF9FTl9NQVNLLCAwKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X0FMQ19DVFJMMSwKKwkJCQkgICAgREE3MjE4X0FMQ19TWU5DX01PREVfTUFTSywgMCk7CisKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfQ0FMSUJfQ1RSTCwKKwkJCQkgICAgREE3MjE4X0NBTElCX09GRlNFVF9FTl9NQVNLLAorCQkJCSAgICBEQTcyMThfQ0FMSUJfT0ZGU0VUX0VOX01BU0spOworCisJCS8qIEVuYWJsZSBBTEMgaHlicmlkIG1vZGUgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X0FMQ19DVFJMMSwKKwkJCQkgICAgREE3MjE4X0FMQ19TWU5DX01PREVfTUFTSywKKwkJCQkgICAgREE3MjE4X0FMQ19TWU5DX01PREVfQ0gxIHwKKwkJCQkgICAgREE3MjE4X0FMQ19TWU5DX01PREVfQ0gyKTsKKwl9CisKKwkvKiBSZXN0b3JlIGlucHV0IEhQRiBjb250cm9sIHJlZ2lzdGVycyB0byBvcmlnaW5hbCBzdGF0ZXMgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfSU5fMV9IUEZfRklMVEVSX0NUUkwsIGluXzFfaHBmX2N0cmwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9JTl8yX0hQRl9GSUxURVJfQ1RSTCwgaW5fMl9ocGZfY3RybCk7CisKKwkvKiBSZXN0b3JlIGlucHV0IGZpbHRlciBjb250cm9sIHJlZ2lzdGVycyB0byBvcmlnaW5hbCBzdGF0ZXMgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfSU5fMUxfRklMVEVSX0NUUkwsIGluXzFsX2ZpbHRfY3RybCk7CisJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X0lOXzFSX0ZJTFRFUl9DVFJMLCBpbl8xcl9maWx0X2N0cmwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9JTl8yTF9GSUxURVJfQ1RSTCwgaW5fMmxfZmlsdF9jdHJsKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfSU5fMlJfRklMVEVSX0NUUkwsIGluXzJyX2ZpbHRfY3RybCk7CisKKwkvKiBSZXN0b3JlIGlucHV0IG1peGVyIGNvbnRyb2wgcmVnaXN0ZXJzIHRvIG9yaWdpbmFsIHN0YXRlICovCisJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X01JWElOXzFfQ1RSTCwgbWl4aW5fMV9jdHJsKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfTUlYSU5fMl9DVFJMLCBtaXhpbl8yX2N0cmwpOworCisJLyogUmVzdG9yZSBNSUMgY29udHJvbCByZWdpc3RlcnMgdG8gb3JpZ2luYWwgc3RhdGVzICovCisJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X01JQ18xX0NUUkwsIG1pY18xX2N0cmwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9NSUNfMl9DVFJMLCBtaWNfMl9jdHJsKTsKK30KKworc3RhdGljIGludCBkYTcyMThfbWl4aW5fZ2Fpbl9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2Nfa2NvbnRyb2xfY29kZWMoa2NvbnRyb2wpOworCXN0cnVjdCBkYTcyMThfcHJpdiAqZGE3MjE4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfcHV0X3ZvbHN3KGtjb250cm9sLCB1Y29udHJvbCk7CisKKwkvKgorCSAqIElmIEFMQyBpbiBvcGVyYXRpb24gYW5kIHZhbHVlIG9mIGNvbnRyb2wgaGFzIGJlZW4gdXBkYXRlZCwKKwkgKiBtYWtlIHN1cmUgY2FsaWJyYXRlZCBvZmZzZXRzIGFyZSB1cGRhdGVkLgorCSAqLworCWlmICgocmV0ID09IDEpICYmIChkYTcyMTgtPmFsY19lbikpCisJCWRhNzIxOF9hbGNfY2FsaWIoY29kZWMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkYTcyMThfYWxjX3N3X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKikga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19rY29udHJvbF9jb2RlYyhrY29udHJvbCk7CisJc3RydWN0IGRhNzIxOF9wcml2ICpkYTcyMTggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1bnNpZ25lZCBpbnQgbHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJdW5zaWduZWQgaW50IHJ2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOworCXVuc2lnbmVkIGludCBsc2hpZnQgPSBtYy0+c2hpZnQ7CisJdW5zaWduZWQgaW50IHJzaGlmdCA9IG1jLT5yc2hpZnQ7CisJdW5zaWduZWQgaW50IG1hc2sgPSAobWMtPm1heCA8PCBsc2hpZnQpIHwgKG1jLT5tYXggPDwgcnNoaWZ0KTsKKworCS8qIEZvcmNlIEFMQyBvZmZzZXQgY2FsaWJyYXRpb24gaWYgZW5hYmxpbmcgQUxDICovCisJaWYgKChsdmFsdWUgfHwgcnZhbHVlKSAmJiAoIWRhNzIxOC0+YWxjX2VuKSkKKwkJZGE3MjE4X2FsY19jYWxpYihjb2RlYyk7CisKKwkvKiBVcGRhdGUgYml0cyB0byBkZXRhaWwgd2hpY2ggY2hhbm5lbHMgYXJlIGVuYWJsZWQvZGlzYWJsZWQgKi8KKwlkYTcyMTgtPmFsY19lbiAmPSB+bWFzazsKKwlkYTcyMTgtPmFsY19lbiB8PSAobHZhbHVlIDw8IGxzaGlmdCkgfCAocnZhbHVlIDw8IHJzaGlmdCk7CisKKwlyZXR1cm4gc25kX3NvY19wdXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKK30KKworLyogVG9uZUdlbiAqLworc3RhdGljIGludCBkYTcyMThfdG9uZWdlbl9mcmVxX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2tjb250cm9sX2NvZGVjKGtjb250cm9sKTsKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxOCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWl4ZXJfY3RybCA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKikga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdW5zaWduZWQgaW50IHJlZyA9IG1peGVyX2N0cmwtPnJlZzsKKwl1MTYgdmFsOworCWludCByZXQ7CisKKwkvKgorCSAqIEZyZXF1ZW5jeSB2YWx1ZSBzcGFucyB0d28gOC1iaXQgcmVnaXN0ZXJzLCBsb3dlciB0aGVuIHVwcGVyIGJ5dGUuCisJICogVGhlcmVmb3JlIHdlIG5lZWQgdG8gY29udmVydCB0byBob3N0IGVuZGlhbm5lc3MgaGVyZS4KKwkgKi8KKwlyZXQgPSByZWdtYXBfcmF3X3JlYWQoZGE3MjE4LT5yZWdtYXAsIHJlZywgJnZhbCwgMik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbGUxNl90b19jcHUodmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhNzIxOF90b25lZ2VuX2ZyZXFfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2Nfa2NvbnRyb2xfY29kZWMoa2NvbnRyb2wpOworCXN0cnVjdCBkYTcyMThfcHJpdiAqZGE3MjE4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptaXhlcl9jdHJsID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwl1bnNpZ25lZCBpbnQgcmVnID0gbWl4ZXJfY3RybC0+cmVnOworCXUxNiB2YWw7CisKKwkvKgorCSAqIEZyZXF1ZW5jeSB2YWx1ZSBzcGFucyB0d28gOC1iaXQgcmVnaXN0ZXJzLCBsb3dlciB0aGVuIHVwcGVyIGJ5dGUuCisJICogVGhlcmVmb3JlIHdlIG5lZWQgdG8gY29udmVydCB0byBsaXR0bGUgZW5kaWFuIGhlcmUgdG8gYWxpZ24gd2l0aAorCSAqIEhXIHJlZ2lzdGVycy4KKwkgKi8KKwl2YWwgPSBjcHVfdG9fbGUxNih1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisKKwlyZXR1cm4gcmVnbWFwX3Jhd193cml0ZShkYTcyMTgtPnJlZ21hcCwgcmVnLCAmdmFsLCAyKTsKK30KKworc3RhdGljIGludCBkYTcyMThfbWljX2x2bF9kZXRfc3dfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19rY29udHJvbF9jb2RlYyhrY29udHJvbCk7CisJc3RydWN0IGRhNzIxOF9wcml2ICpkYTcyMTggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1peGVyX2N0cmwgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXVuc2lnbmVkIGludCBsdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwl1bnNpZ25lZCBpbnQgcnZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV07CisJdW5zaWduZWQgaW50IGxzaGlmdCA9IG1peGVyX2N0cmwtPnNoaWZ0OworCXVuc2lnbmVkIGludCByc2hpZnQgPSBtaXhlcl9jdHJsLT5yc2hpZnQ7CisJdW5zaWduZWQgaW50IG1hc2sgPSAobWl4ZXJfY3RybC0+bWF4IDw8IGxzaGlmdCkgfAorCQkJICAgIChtaXhlcl9jdHJsLT5tYXggPDwgcnNoaWZ0KTsKKwlkYTcyMTgtPm1pY19sdmxfZGV0X2VuICY9IH5tYXNrOworCWRhNzIxOC0+bWljX2x2bF9kZXRfZW4gfD0gKGx2YWx1ZSA8PCBsc2hpZnQpIHwgKHJ2YWx1ZSA8PCByc2hpZnQpOworCisJLyoKKwkgKiBIZXJlIHdlIG9ubHkgZW5hYmxlIHRoZSBmZWF0dXJlIG9uIHBhdGhzIHdoaWNoIGFyZSBhbHJlYWR5CisJICogcG93ZXJlZC4gSWYgYSBjaGFubmVsIGlzIGVuYWJsZWQgaGVyZSBmb3IgbGV2ZWwgZGV0ZWN0LCBidXQgdGhhdCBwYXRoCisJICogaXNuJ3QgcG93ZXJlZCwgdGhlbiB0aGUgY2hhbm5lbCB3aWxsIGFjdHVhbGx5IGJlIGVuYWJsZWQgd2hlbiB3ZSBkbworCSAqIHBvd2VyIHRoZSBwYXRoIChJTl9GSUxURVIgd2lkZ2V0IGV2ZW50cykuIFRoaXMgaGFuZGxpbmcgYXZvaWRzCisJICogdW53YW50ZWQgbGV2ZWwgZGV0ZWN0IGV2ZW50cy4KKwkgKi8KKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgbWl4ZXJfY3RybC0+cmVnLAorCQkJICAgICAoZGE3MjE4LT5pbl9maWx0X2VuICYgZGE3MjE4LT5taWNfbHZsX2RldF9lbikpOworfQorCitzdGF0aWMgaW50IGRhNzIxOF9taWNfbHZsX2RldF9zd19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2tjb250cm9sX2NvZGVjKGtjb250cm9sKTsKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxOCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWl4ZXJfY3RybCA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKikga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdW5zaWduZWQgaW50IGxzaGlmdCA9IG1peGVyX2N0cmwtPnNoaWZ0OworCXVuc2lnbmVkIGludCByc2hpZnQgPSBtaXhlcl9jdHJsLT5yc2hpZnQ7CisJdW5zaWduZWQgaW50IGxtYXNrID0gKG1peGVyX2N0cmwtPm1heCA8PCBsc2hpZnQpOworCXVuc2lnbmVkIGludCBybWFzayA9IChtaXhlcl9jdHJsLT5tYXggPDwgcnNoaWZ0KTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJKGRhNzIxOC0+bWljX2x2bF9kZXRfZW4gJiBsbWFzaykgPj4gbHNoaWZ0OworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0KKwkJKGRhNzIxOC0+bWljX2x2bF9kZXRfZW4gJiBybWFzaykgPj4gcnNoaWZ0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGE3MjE4X2JpcXVhZF9jb2VmZl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19rY29udHJvbF9jb2RlYyhrY29udHJvbCk7CisJc3RydWN0IGRhNzIxOF9wcml2ICpkYTcyMTggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgc29jX2J5dGVzX2V4dCAqYnl0ZXNfZXh0ID0KKwkJKHN0cnVjdCBzb2NfYnl0ZXNfZXh0ICopIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCisJLyogRGV0ZXJtaW5lIHdoaWNoIEJpUXVhZHMgd2UncmUgc2V0dGluZyBiYXNlZCBvbiBzaXplIG9mIGNvbmZpZyBkYXRhICovCisJc3dpdGNoIChieXRlc19leHQtPm1heCkgeworCWNhc2UgREE3MjE4X09VVF8xX0JJUV81U1RBR0VfQ0ZHX1NJWkU6CisJCW1lbWNweSh1Y29udHJvbC0+dmFsdWUuYnl0ZXMuZGF0YSwgZGE3MjE4LT5iaXFfNXN0YWdlX2NvZWZmLAorCQkgICAgICAgYnl0ZXNfZXh0LT5tYXgpOworCQlicmVhazsKKwljYXNlIERBNzIxOF9TSURFVE9ORV9CSVFfM1NUQUdFX0NGR19TSVpFOgorCQltZW1jcHkodWNvbnRyb2wtPnZhbHVlLmJ5dGVzLmRhdGEsIGRhNzIxOC0+c3RiaXFfM3N0YWdlX2NvZWZmLAorCQkgICAgICAgYnl0ZXNfZXh0LT5tYXgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTcyMThfYmlxdWFkX2NvZWZmX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2tjb250cm9sX2NvZGVjKGtjb250cm9sKTsKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxOCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzb2NfYnl0ZXNfZXh0ICpieXRlc19leHQgPQorCQkoc3RydWN0IHNvY19ieXRlc19leHQgKikga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdTggcmVnLCBvdXRfZmlsdDFsOworCXU4IGNmZ1tEQTcyMThfQklRX0NGR19TSVpFXTsKKwlpbnQgaTsKKworCS8qCisJICogRGV0ZXJtaW5lIHdoaWNoIEJpUXVhZHMgd2UncmUgc2V0dGluZyBiYXNlZCBvbiBzaXplIG9mIGNvbmZpZyBkYXRhLAorCSAqIGFuZCBzdG9yZWQgdGhlIGRhdGEgZm9yIHVzZSBieSBnZXQgZnVuY3Rpb24uCisJICovCisJc3dpdGNoIChieXRlc19leHQtPm1heCkgeworCWNhc2UgREE3MjE4X09VVF8xX0JJUV81U1RBR0VfQ0ZHX1NJWkU6CisJCXJlZyA9IERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0RBVEE7CisJCW1lbWNweShkYTcyMTgtPmJpcV81c3RhZ2VfY29lZmYsIHVjb250cm9sLT52YWx1ZS5ieXRlcy5kYXRhLAorCQkgICAgICAgYnl0ZXNfZXh0LT5tYXgpOworCQlicmVhazsKKwljYXNlIERBNzIxOF9TSURFVE9ORV9CSVFfM1NUQUdFX0NGR19TSVpFOgorCQlyZWcgPSBEQTcyMThfU0lERVRPTkVfQklRXzNTVEFHRV9EQVRBOworCQltZW1jcHkoZGE3MjE4LT5zdGJpcV8zc3RhZ2VfY29lZmYsIHVjb250cm9sLT52YWx1ZS5ieXRlcy5kYXRhLAorCQkgICAgICAgYnl0ZXNfZXh0LT5tYXgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBNYWtlIHN1cmUgYXQgbGVhc3Qgb3V0IGZpbHRlcjEgZW5hYmxlZCB0byBhbGxvdyBwcm9ncmFtbWluZyAqLworCW91dF9maWx0MWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIERBNzIxOF9PVVRfMUxfRklMVEVSX0NUUkwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9PVVRfMUxfRklMVEVSX0NUUkwsCisJCSAgICAgIG91dF9maWx0MWwgfCBEQTcyMThfT1VUXzFMX0ZJTFRFUl9FTl9NQVNLKTsKKworCWZvciAoaSA9IDA7IGkgPCBieXRlc19leHQtPm1heDsgKytpKSB7CisJCWNmZ1tEQTcyMThfQklRX0NGR19EQVRBXSA9IHVjb250cm9sLT52YWx1ZS5ieXRlcy5kYXRhW2ldOworCQljZmdbREE3MjE4X0JJUV9DRkdfQUREUl0gPSBpOworCQlyZWdtYXBfcmF3X3dyaXRlKGRhNzIxOC0+cmVnbWFwLCByZWcsIGNmZywgREE3MjE4X0JJUV9DRkdfU0laRSk7CisJfQorCisJLyogUmVzdG9yZSBmaWx0ZXIgdG8gcHJldmlvdXMgc2V0dGluZyAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9PVVRfMUxfRklMVEVSX0NUUkwsIG91dF9maWx0MWwpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIEtDb250cm9scworICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYTcyMThfc25kX2NvbnRyb2xzW10gPSB7CisJLyogTWljcyAqLworCVNPQ19TSU5HTEVfVExWKCJNaWMxIFZvbHVtZSIsIERBNzIxOF9NSUNfMV9HQUlOLAorCQkgICAgICAgREE3MjE4X01JQ18xX0FNUF9HQUlOX1NISUZULCBEQTcyMThfTUlDX0FNUF9HQUlOX01BWCwKKwkJICAgICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9taWNfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEUoIk1pYzEgU3dpdGNoIiwgREE3MjE4X01JQ18xX0NUUkwsCisJCSAgIERBNzIxOF9NSUNfMV9BTVBfTVVURV9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9JTlZFUlQpLAorCVNPQ19TSU5HTEVfVExWKCJNaWMyIFZvbHVtZSIsIERBNzIxOF9NSUNfMl9HQUlOLAorCQkgICAgICAgREE3MjE4X01JQ18yX0FNUF9HQUlOX1NISUZULCBEQTcyMThfTUlDX0FNUF9HQUlOX01BWCwKKwkJICAgICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9taWNfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEUoIk1pYzIgU3dpdGNoIiwgREE3MjE4X01JQ18yX0NUUkwsCisJCSAgIERBNzIxOF9NSUNfMl9BTVBfTVVURV9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9JTlZFUlQpLAorCisJLyogTWl4ZXIgSW5wdXQgKi8KKwlTT0NfU0lOR0xFX0VYVF9UTFYoIk1peGluMSBWb2x1bWUiLCBEQTcyMThfTUlYSU5fMV9HQUlOLAorCQkJICAgREE3MjE4X01JWElOXzFfQU1QX0dBSU5fU0hJRlQsCisJCQkgICBEQTcyMThfTUlYSU5fQU1QX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkJICAgc25kX3NvY19nZXRfdm9sc3csIGRhNzIxOF9taXhpbl9nYWluX3B1dCwKKwkJCSAgIGRhNzIxOF9taXhpbl9nYWluX3RsdiksCisJU09DX1NJTkdMRSgiTWl4aW4xIFN3aXRjaCIsIERBNzIxOF9NSVhJTl8xX0NUUkwsCisJCSAgIERBNzIxOF9NSVhJTl8xX0FNUF9NVVRFX0VOX1NISUZULCBEQTcyMThfU1dJVENIX0VOX01BWCwKKwkJICAgREE3MjE4X0lOVkVSVCksCisJU09DX1NJTkdMRSgiTWl4aW4xIEdhaW4gUmFtcCBTd2l0Y2giLCBEQTcyMThfTUlYSU5fMV9DVFJMLAorCQkgICBEQTcyMThfTUlYSU5fMV9BTVBfUkFNUF9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9OT19JTlZFUlQpLAorCVNPQ19TSU5HTEUoIk1peGluMSBaQyBHYWluIFN3aXRjaCIsIERBNzIxOF9NSVhJTl8xX0NUUkwsCisJCSAgIERBNzIxOF9NSVhJTl8xX0FNUF9aQ19FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9OT19JTlZFUlQpLAorCVNPQ19TSU5HTEVfRVhUX1RMVigiTWl4aW4yIFZvbHVtZSIsIERBNzIxOF9NSVhJTl8yX0dBSU4sCisJCQkgICBEQTcyMThfTUlYSU5fMl9BTVBfR0FJTl9TSElGVCwKKwkJCSAgIERBNzIxOF9NSVhJTl9BTVBfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCQkgICBzbmRfc29jX2dldF92b2xzdywgZGE3MjE4X21peGluX2dhaW5fcHV0LAorCQkJICAgZGE3MjE4X21peGluX2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFKCJNaXhpbjIgU3dpdGNoIiwgREE3MjE4X01JWElOXzJfQ1RSTCwKKwkJICAgREE3MjE4X01JWElOXzJfQU1QX01VVEVfRU5fU0hJRlQsIERBNzIxOF9TV0lUQ0hfRU5fTUFYLAorCQkgICBEQTcyMThfSU5WRVJUKSwKKwlTT0NfU0lOR0xFKCJNaXhpbjIgR2FpbiBSYW1wIFN3aXRjaCIsIERBNzIxOF9NSVhJTl8yX0NUUkwsCisJCSAgIERBNzIxOF9NSVhJTl8yX0FNUF9SQU1QX0VOX1NISUZULCBEQTcyMThfU1dJVENIX0VOX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisJU09DX1NJTkdMRSgiTWl4aW4yIFpDIEdhaW4gU3dpdGNoIiwgREE3MjE4X01JWElOXzJfQ1RSTCwKKwkJICAgREE3MjE4X01JWElOXzJfQU1QX1pDX0VOX1NISUZULCBEQTcyMThfU1dJVENIX0VOX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisKKwkvKiBBRENzICovCisJU09DX1NJTkdMRSgiQURDMSBBQUYgU3dpdGNoIiwgREE3MjE4X0FEQ18xX0NUUkwsCisJCSAgIERBNzIxOF9BRENfMV9BQUZfRU5fU0hJRlQsIERBNzIxOF9TV0lUQ0hfRU5fTUFYLAorCQkgICBEQTcyMThfTk9fSU5WRVJUKSwKKwlTT0NfU0lOR0xFKCJBREMyIEFBRiBTd2l0Y2giLCBEQTcyMThfQURDXzJfQ1RSTCwKKwkJICAgREE3MjE4X0FEQ18yX0FBRl9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9OT19JTlZFUlQpLAorCVNPQ19TSU5HTEUoIkFEQyBMUCBNb2RlIFN3aXRjaCIsIERBNzIxOF9BRENfTU9ERSwKKwkJICAgREE3MjE4X0FEQ19MUF9NT0RFX1NISUZULCBEQTcyMThfU1dJVENIX0VOX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisKKwkvKiBJbnB1dCBGaWx0ZXJzICovCisJU09DX1NJTkdMRV9UTFYoIkluIEZpbHRlcjFMIFZvbHVtZSIsIERBNzIxOF9JTl8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X0lOXzFMX0RJR0lUQUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9JTl9ESUdJVEFMX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2luX2RpZ19nYWluX3RsdiksCisJU09DX1NJTkdMRSgiSW4gRmlsdGVyMUwgU3dpdGNoIiwgREE3MjE4X0lOXzFMX0ZJTFRFUl9DVFJMLAorCQkgICBEQTcyMThfSU5fMUxfTVVURV9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9JTlZFUlQpLAorCVNPQ19TSU5HTEUoIkluIEZpbHRlcjFMIEdhaW4gUmFtcCBTd2l0Y2giLCBEQTcyMThfSU5fMUxfRklMVEVSX0NUUkwsCisJCSAgIERBNzIxOF9JTl8xTF9SQU1QX0VOX1NISUZULCBEQTcyMThfU1dJVENIX0VOX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisJU09DX1NJTkdMRV9UTFYoIkluIEZpbHRlcjFSIFZvbHVtZSIsIERBNzIxOF9JTl8xUl9HQUlOLAorCQkgICAgICAgREE3MjE4X0lOXzFSX0RJR0lUQUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9JTl9ESUdJVEFMX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2luX2RpZ19nYWluX3RsdiksCisJU09DX1NJTkdMRSgiSW4gRmlsdGVyMVIgU3dpdGNoIiwgREE3MjE4X0lOXzFSX0ZJTFRFUl9DVFJMLAorCQkgICBEQTcyMThfSU5fMVJfTVVURV9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9JTlZFUlQpLAorCVNPQ19TSU5HTEUoIkluIEZpbHRlcjFSIEdhaW4gUmFtcCBTd2l0Y2giLAorCQkgICBEQTcyMThfSU5fMVJfRklMVEVSX0NUUkwsIERBNzIxOF9JTl8xUl9SQU1QX0VOX1NISUZULAorCQkgICBEQTcyMThfU1dJVENIX0VOX01BWCwgREE3MjE4X05PX0lOVkVSVCksCisJU09DX1NJTkdMRV9UTFYoIkluIEZpbHRlcjJMIFZvbHVtZSIsIERBNzIxOF9JTl8yTF9HQUlOLAorCQkgICAgICAgREE3MjE4X0lOXzJMX0RJR0lUQUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9JTl9ESUdJVEFMX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2luX2RpZ19nYWluX3RsdiksCisJU09DX1NJTkdMRSgiSW4gRmlsdGVyMkwgU3dpdGNoIiwgREE3MjE4X0lOXzJMX0ZJTFRFUl9DVFJMLAorCQkgICBEQTcyMThfSU5fMkxfTVVURV9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9JTlZFUlQpLAorCVNPQ19TSU5HTEUoIkluIEZpbHRlcjJMIEdhaW4gUmFtcCBTd2l0Y2giLCBEQTcyMThfSU5fMkxfRklMVEVSX0NUUkwsCisJCSAgIERBNzIxOF9JTl8yTF9SQU1QX0VOX1NISUZULCBEQTcyMThfU1dJVENIX0VOX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisJU09DX1NJTkdMRV9UTFYoIkluIEZpbHRlcjJSIFZvbHVtZSIsIERBNzIxOF9JTl8yUl9HQUlOLAorCQkgICAgICAgREE3MjE4X0lOXzJSX0RJR0lUQUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9JTl9ESUdJVEFMX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2luX2RpZ19nYWluX3RsdiksCisJU09DX1NJTkdMRSgiSW4gRmlsdGVyMlIgU3dpdGNoIiwgREE3MjE4X0lOXzJSX0ZJTFRFUl9DVFJMLAorCQkgICBEQTcyMThfSU5fMlJfTVVURV9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9JTlZFUlQpLAorCVNPQ19TSU5HTEUoIkluIEZpbHRlcjJSIEdhaW4gUmFtcCBTd2l0Y2giLAorCQkgICBEQTcyMThfSU5fMlJfRklMVEVSX0NUUkwsIERBNzIxOF9JTl8yUl9SQU1QX0VOX1NISUZULAorCQkgICBEQTcyMThfU1dJVENIX0VOX01BWCwgREE3MjE4X05PX0lOVkVSVCksCisKKwkvKiBBR1MgKi8KKwlTT0NfU0lOR0xFX1RMVigiQUdTIFRyaWdnZXIiLCBEQTcyMThfQUdTX1RSSUdHRVIsCisJCSAgICAgICBEQTcyMThfQUdTX1RSSUdHRVJfU0hJRlQsIERBNzIxOF9BR1NfVFJJR0dFUl9NQVgsCisJCSAgICAgICBEQTcyMThfSU5WRVJULCBkYTcyMThfYWdzX3RyaWdnZXJfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiQUdTIE1heCBBdHRlbnVhdGlvbiIsIERBNzIxOF9BR1NfQVRUX01BWCwKKwkJICAgICAgIERBNzIxOF9BR1NfQVRUX01BWF9TSElGVCwgREE3MjE4X0FHU19BVFRfTUFYX01BWCwKKwkJICAgICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9hZ3NfYXR0X21heF90bHYpLAorCVNPQ19TSU5HTEUoIkFHUyBBbnRpY2xpcCBTd2l0Y2giLCBEQTcyMThfQUdTX0FOVElDTElQX0NUUkwsCisJCSAgIERBNzIxOF9BR1NfQU5USUNMSVBfRU5fU0hJRlQsIERBNzIxOF9TV0lUQ0hfRU5fTUFYLAorCQkgICBEQTcyMThfTk9fSU5WRVJUKSwKKwlTT0NfU0lOR0xFKCJBR1MgQ2hhbm5lbDEgU3dpdGNoIiwgREE3MjE4X0FHU19FTkFCTEUsCisJCSAgIERBNzIxOF9BR1NfRU5BQkxFX0NIQU4xX1NISUZULCBEQTcyMThfU1dJVENIX0VOX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisJU09DX1NJTkdMRSgiQUdTIENoYW5uZWwyIFN3aXRjaCIsIERBNzIxOF9BR1NfRU5BQkxFLAorCQkgICBEQTcyMThfQUdTX0VOQUJMRV9DSEFOMl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9OT19JTlZFUlQpLAorCisJLyogQUxDICovCisJU09DX0VOVU0oIkFMQyBBdHRhY2sgUmF0ZSIsIGRhNzIxOF9hbGNfYXR0YWNrX3JhdGUpLAorCVNPQ19FTlVNKCJBTEMgUmVsZWFzZSBSYXRlIiwgZGE3MjE4X2FsY19yZWxlYXNlX3JhdGUpLAorCVNPQ19FTlVNKCJBTEMgSG9sZCBUaW1lIiwgZGE3MjE4X2FsY19ob2xkX3RpbWUpLAorCVNPQ19TSU5HTEVfVExWKCJBTEMgTm9pc2UgVGhyZXNob2xkIiwgREE3MjE4X0FMQ19OT0lTRSwKKwkJICAgICAgIERBNzIxOF9BTENfTk9JU0VfU0hJRlQsIERBNzIxOF9BTENfVEhSRVNIT0xEX01BWCwKKwkJICAgICAgIERBNzIxOF9JTlZFUlQsIGRhNzIxOF9hbGNfdGhyZXNob2xkX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkFMQyBNaW4gVGhyZXNob2xkIiwgREE3MjE4X0FMQ19UQVJHRVRfTUlOLAorCQkgICAgICAgREE3MjE4X0FMQ19USFJFU0hPTERfTUlOX1NISUZULCBEQTcyMThfQUxDX1RIUkVTSE9MRF9NQVgsCisJCSAgICAgICBEQTcyMThfSU5WRVJULCBkYTcyMThfYWxjX3RocmVzaG9sZF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJBTEMgTWF4IFRocmVzaG9sZCIsIERBNzIxOF9BTENfVEFSR0VUX01BWCwKKwkJICAgICAgIERBNzIxOF9BTENfVEhSRVNIT0xEX01BWF9TSElGVCwgREE3MjE4X0FMQ19USFJFU0hPTERfTUFYLAorCQkgICAgICAgREE3MjE4X0lOVkVSVCwgZGE3MjE4X2FsY190aHJlc2hvbGRfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiQUxDIE1heCBBdHRlbnVhdGlvbiIsIERBNzIxOF9BTENfR0FJTl9MSU1JVFMsCisJCSAgICAgICBEQTcyMThfQUxDX0FUVEVOX01BWF9TSElGVCwgREE3MjE4X0FMQ19BVFRFTl9HQUlOX01BWCwKKwkJICAgICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9hbGNfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJBTEMgTWF4IEdhaW4iLCBEQTcyMThfQUxDX0dBSU5fTElNSVRTLAorCQkgICAgICAgREE3MjE4X0FMQ19HQUlOX01BWF9TSElGVCwgREE3MjE4X0FMQ19BVFRFTl9HQUlOX01BWCwKKwkJICAgICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9hbGNfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfUkFOR0VfVExWKCJBTEMgTWluIEFuYWxvZyBHYWluIiwgREE3MjE4X0FMQ19BTkFfR0FJTl9MSU1JVFMsCisJCQkgICAgIERBNzIxOF9BTENfQU5BX0dBSU5fTUlOX1NISUZULAorCQkJICAgICBEQTcyMThfQUxDX0FOQV9HQUlOX01JTiwgREE3MjE4X0FMQ19BTkFfR0FJTl9NQVgsCisJCQkgICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9hbGNfYW5hX2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1JBTkdFX1RMVigiQUxDIE1heCBBbmFsb2cgR2FpbiIsIERBNzIxOF9BTENfQU5BX0dBSU5fTElNSVRTLAorCQkJICAgICBEQTcyMThfQUxDX0FOQV9HQUlOX01BWF9TSElGVCwKKwkJCSAgICAgREE3MjE4X0FMQ19BTkFfR0FJTl9NSU4sIERBNzIxOF9BTENfQU5BX0dBSU5fTUFYLAorCQkJICAgICBEQTcyMThfTk9fSU5WRVJULCBkYTcyMThfYWxjX2FuYV9nYWluX3RsdiksCisJU09DX0VOVU0oIkFMQyBBbnRpY2xpcCBTdGVwIiwgZGE3MjE4X2FsY19hbnRpY2xpcF9zdGVwKSwKKwlTT0NfU0lOR0xFKCJBTEMgQW50aWNsaXAgU3dpdGNoIiwgREE3MjE4X0FMQ19BTlRJQ0xJUF9DVFJMLAorCQkgICBEQTcyMThfQUxDX0FOVElDTElQX0VOX1NISUZULCBEQTcyMThfU1dJVENIX0VOX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisJU09DX0RPVUJMRV9FWFQoIkFMQyBDaGFubmVsMSBTd2l0Y2giLCBEQTcyMThfQUxDX0NUUkwxLAorCQkgICAgICAgREE3MjE4X0FMQ19DSEFOMV9MX0VOX1NISUZULCBEQTcyMThfQUxDX0NIQU4xX1JfRU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfU1dJVENIX0VOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIHNuZF9zb2NfZ2V0X3ZvbHN3LCBkYTcyMThfYWxjX3N3X3B1dCksCisJU09DX0RPVUJMRV9FWFQoIkFMQyBDaGFubmVsMiBTd2l0Y2giLCBEQTcyMThfQUxDX0NUUkwxLAorCQkgICAgICAgREE3MjE4X0FMQ19DSEFOMl9MX0VOX1NISUZULCBEQTcyMThfQUxDX0NIQU4yX1JfRU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfU1dJVENIX0VOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIHNuZF9zb2NfZ2V0X3ZvbHN3LCBkYTcyMThfYWxjX3N3X3B1dCksCisKKwkvKiBFbnZlbG9wZSBUcmFja2luZyAqLworCVNPQ19FTlVNKCJFbnZlbG9wZSBUcmFja2luZyBBdHRhY2sgUmF0ZSIsIGRhNzIxOF9pbnRlZ19hdHRhY2tfcmF0ZSksCisJU09DX0VOVU0oIkVudmVsb3BlIFRyYWNraW5nIFJlbGVhc2UgUmF0ZSIsIGRhNzIxOF9pbnRlZ19yZWxlYXNlX3JhdGUpLAorCisJLyogSW5wdXQgSGlnaC1QYXNzIEZpbHRlcnMgKi8KKwlTT0NfRU5VTSgiSW4gRmlsdGVyMSBIUEYgTW9kZSIsIGRhNzIxOF9pbjFfaHBmX21vZGUpLAorCVNPQ19FTlVNKCJJbiBGaWx0ZXIxIEhQRiBDb3JuZXIgQXVkaW8iLCBkYTcyMThfaW4xX2F1ZGlvX2hwZl9jb3JuZXIpLAorCVNPQ19FTlVNKCJJbiBGaWx0ZXIxIEhQRiBDb3JuZXIgVm9pY2UiLCBkYTcyMThfaW4xX3ZvaWNlX2hwZl9jb3JuZXIpLAorCVNPQ19FTlVNKCJJbiBGaWx0ZXIyIEhQRiBNb2RlIiwgZGE3MjE4X2luMl9ocGZfbW9kZSksCisJU09DX0VOVU0oIkluIEZpbHRlcjIgSFBGIENvcm5lciBBdWRpbyIsIGRhNzIxOF9pbjJfYXVkaW9faHBmX2Nvcm5lciksCisJU09DX0VOVU0oIkluIEZpbHRlcjIgSFBGIENvcm5lciBWb2ljZSIsIGRhNzIxOF9pbjJfdm9pY2VfaHBmX2Nvcm5lciksCisKKwkvKiBNaWMgTGV2ZWwgRGV0ZWN0ICovCisJU09DX0RPVUJMRV9FWFQoIk1pYyBMZXZlbCBEZXRlY3QgQ2hhbm5lbDEgU3dpdGNoIiwgREE3MjE4X0xWTF9ERVRfQ1RSTCwKKwkJICAgICAgIERBNzIxOF9MVkxfREVUX0VOX0NIQU4xTF9TSElGVCwKKwkJICAgICAgIERBNzIxOF9MVkxfREVUX0VOX0NIQU4xUl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgICAgICBEQTcyMThfTk9fSU5WRVJULCBkYTcyMThfbWljX2x2bF9kZXRfc3dfZ2V0LAorCQkgICAgICAgZGE3MjE4X21pY19sdmxfZGV0X3N3X3B1dCksCisJU09DX0RPVUJMRV9FWFQoIk1pYyBMZXZlbCBEZXRlY3QgQ2hhbm5lbDIgU3dpdGNoIiwgREE3MjE4X0xWTF9ERVRfQ1RSTCwKKwkJICAgICAgIERBNzIxOF9MVkxfREVUX0VOX0NIQU4yTF9TSElGVCwKKwkJICAgICAgIERBNzIxOF9MVkxfREVUX0VOX0NIQU4yUl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgICAgICBEQTcyMThfTk9fSU5WRVJULCBkYTcyMThfbWljX2x2bF9kZXRfc3dfZ2V0LAorCQkgICAgICAgZGE3MjE4X21pY19sdmxfZGV0X3N3X3B1dCksCisJU09DX1NJTkdMRSgiTWljIExldmVsIERldGVjdCBMZXZlbCIsIERBNzIxOF9MVkxfREVUX0xFVkVMLAorCQkgICBEQTcyMThfTFZMX0RFVF9MRVZFTF9TSElGVCwgREE3MjE4X0xWTF9ERVRfTEVWRUxfTUFYLAorCQkgICBEQTcyMThfTk9fSU5WRVJUKSwKKworCS8qIERpZ2l0YWwgTWl4ZXIgKElucHV0KSAqLworCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjFMIE91dDEgREFJTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzFMX0lORklMVF8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8xTF9JTkZJTFRfMUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjFMIE91dDEgREFJUiBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzFSX0lORklMVF8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8xUl9JTkZJTFRfMUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjFMIE91dDIgREFJTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzJMX0lORklMVF8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8yTF9JTkZJTFRfMUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjFMIE91dDIgREFJUiBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzJSX0lORklMVF8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8yUl9JTkZJTFRfMUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gRmlsdGVyMVIgT3V0MSBEQUlMIFZvbHVtZSIsCisJCSAgICAgICBEQTcyMThfRE1JWF9PVVREQUlfMUxfSU5GSUxUXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzFMX0lORklMVF8xUl9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gRmlsdGVyMVIgT3V0MSBEQUlSIFZvbHVtZSIsCisJCSAgICAgICBEQTcyMThfRE1JWF9PVVREQUlfMVJfSU5GSUxUXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzFSX0lORklMVF8xUl9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gRmlsdGVyMVIgT3V0MiBEQUlMIFZvbHVtZSIsCisJCSAgICAgICBEQTcyMThfRE1JWF9PVVREQUlfMkxfSU5GSUxUXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzJMX0lORklMVF8xUl9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gRmlsdGVyMVIgT3V0MiBEQUlSIFZvbHVtZSIsCisJCSAgICAgICBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5GSUxUXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzJSX0lORklMVF8xUl9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBGaWx0ZXIyTCBPdXQxIERBSUwgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8xTF9JTkZJTFRfMkxfR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVREQUlfMUxfSU5GSUxUXzJMX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBGaWx0ZXIyTCBPdXQxIERBSVIgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8xUl9JTkZJTFRfMkxfR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVREQUlfMVJfSU5GSUxUXzJMX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBGaWx0ZXIyTCBPdXQyIERBSUwgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8yTF9JTkZJTFRfMkxfR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVREQUlfMkxfSU5GSUxUXzJMX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBGaWx0ZXIyTCBPdXQyIERBSVIgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8yUl9JTkZJTFRfMkxfR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVREQUlfMlJfSU5GSUxUXzJMX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjJSIE91dDEgREFJTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzFMX0lORklMVF8yUl9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8xTF9JTkZJTFRfMlJfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjJSIE91dDEgREFJUiBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzFSX0lORklMVF8yUl9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8xUl9JTkZJTFRfMlJfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjJSIE91dDIgREFJTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzJMX0lORklMVF8yUl9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8yTF9JTkZJTFRfMlJfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjJSIE91dDIgREFJUiBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzJSX0lORklMVF8yUl9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8yUl9JTkZJTFRfMlJfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCisJU09DX1NJTkdMRV9UTFYoIkRNaXggVG9uZUdlbiBPdXQxIERBSUwgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8xTF9UT05FR0VOX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzFMX1RPTkVHRU5fR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJETWl4IFRvbmVHZW4gT3V0MSBEQUlSIFZvbHVtZSIsCisJCSAgICAgICBEQTcyMThfRE1JWF9PVVREQUlfMVJfVE9ORUdFTl9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8xUl9UT05FR0VOX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBUb25lR2VuIE91dDIgREFJTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzJMX1RPTkVHRU5fR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVREQUlfMkxfVE9ORUdFTl9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkRNaXggVG9uZUdlbiBPdXQyIERBSVIgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8yUl9UT05FR0VOX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzJSX1RPTkVHRU5fR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gREFJTCBPdXQxIERBSUwgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8xTF9JTkRBSV8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8xTF9JTkRBSV8xTF9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gREFJTCBPdXQxIERBSVIgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8xUl9JTkRBSV8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8xUl9JTkRBSV8xTF9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gREFJTCBPdXQyIERBSUwgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8yTF9JTkRBSV8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8yTF9JTkRBSV8xTF9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gREFJTCBPdXQyIERBSVIgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVERBSV8yUl9JTkRBSV8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVERBSV8yUl9JTkRBSV8xTF9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBEQUlSIE91dDEgREFJTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzFMX0lOREFJXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzFMX0lOREFJXzFSX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBEQUlSIE91dDEgREFJUiBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzFSX0lOREFJXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzFSX0lOREFJXzFSX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBEQUlSIE91dDIgREFJTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzJMX0lOREFJXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzJMX0lOREFJXzFSX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBEQUlSIE91dDIgREFJUiBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VUREFJXzJSX0lOREFJXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VUREFJXzJSX0lOREFJXzFSX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKworCS8qIERpZ2l0YWwgTWl4ZXIgKE91dHB1dCkgKi8KKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBGaWx0ZXIxTCBPdXQgRmlsdGVyTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VURklMVF8xTF9JTkZJTFRfMUxfR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVRGSUxUXzFMX0lORklMVF8xTF9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gRmlsdGVyMUwgT3V0IEZpbHRlclIgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5GSUxUXzFMX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VURklMVF8xUl9JTkZJTFRfMUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gRmlsdGVyMVIgT3V0IEZpbHRlckwgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5GSUxUXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VURklMVF8xTF9JTkZJTFRfMVJfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjFSIE91dCBGaWx0ZXJSIFZvbHVtZSIsCisJCSAgICAgICBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX0lORklMVF8xUl9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVEZJTFRfMVJfSU5GSUxUXzFSX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIEZpbHRlcjJMIE91dCBGaWx0ZXJMIFZvbHVtZSIsCisJCSAgICAgICBEQTcyMThfRE1JWF9PVVRGSUxUXzFMX0lORklMVF8yTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVEZJTFRfMUxfSU5GSUxUXzJMX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBGaWx0ZXIyTCBPdXQgRmlsdGVyUiBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VURklMVF8xUl9JTkZJTFRfMkxfR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVRGSUxUXzFSX0lORklMVF8yTF9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBGaWx0ZXIyUiBPdXQgRmlsdGVyTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VURklMVF8xTF9JTkZJTFRfMlJfR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVRGSUxUXzFMX0lORklMVF8yUl9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gRmlsdGVyMlIgT3V0IEZpbHRlclIgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5GSUxUXzJSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VURklMVF8xUl9JTkZJTFRfMlJfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCisJU09DX1NJTkdMRV9UTFYoIkRNaXggVG9uZUdlbiBPdXQgRmlsdGVyTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VURklMVF8xTF9UT05FR0VOX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VURklMVF8xTF9UT05FR0VOX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBUb25lR2VuIE91dCBGaWx0ZXJSIFZvbHVtZSIsCisJCSAgICAgICBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX1RPTkVHRU5fR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVRGSUxUXzFSX1RPTkVHRU5fR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCisJU09DX1NJTkdMRV9UTFYoIkRNaXggSW4gREFJTCBPdXQgRmlsdGVyTCBWb2x1bWUiLAorCQkgICAgICAgREE3MjE4X0RNSVhfT1VURklMVF8xTF9JTkRBSV8xTF9HQUlOLAorCQkgICAgICAgREE3MjE4X09VVEZJTFRfMUxfSU5EQUlfMUxfR0FJTl9TSElGVCwKKwkJICAgICAgIERBNzIxOF9ETUlYX0dBSU5fTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2RtaXhfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIERBSUwgT3V0IEZpbHRlclIgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5EQUlfMUxfR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVRGSUxUXzFSX0lOREFJXzFMX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJETWl4IEluIERBSVIgT3V0IEZpbHRlckwgVm9sdW1lIiwKKwkJICAgICAgIERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5EQUlfMVJfR0FJTiwKKwkJICAgICAgIERBNzIxOF9PVVRGSUxUXzFMX0lOREFJXzFSX0dBSU5fU0hJRlQsCisJCSAgICAgICBEQTcyMThfRE1JWF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiRE1peCBJbiBEQUlSIE91dCBGaWx0ZXJSIFZvbHVtZSIsCisJCSAgICAgICBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX0lOREFJXzFSX0dBSU4sCisJCSAgICAgICBEQTcyMThfT1VURklMVF8xUl9JTkRBSV8xUl9HQUlOX1NISUZULAorCQkgICAgICAgREE3MjE4X0RNSVhfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZG1peF9nYWluX3RsdiksCisKKwkvKiBTaWRldG9uZSBGaWx0ZXIgKi8KKwlTTkRfU09DX0JZVEVTX0VYVCgiU2lkZXRvbmUgQmlRdWFkIENvZWZmaWNpZW50cyIsCisJCQkgIERBNzIxOF9TSURFVE9ORV9CSVFfM1NUQUdFX0NGR19TSVpFLAorCQkJICBkYTcyMThfYmlxdWFkX2NvZWZmX2dldCwgZGE3MjE4X2JpcXVhZF9jb2VmZl9wdXQpLAorCVNPQ19TSU5HTEVfVExWKCJTaWRldG9uZSBWb2x1bWUiLCBEQTcyMThfU0lERVRPTkVfR0FJTiwKKwkJICAgICAgIERBNzIxOF9TSURFVE9ORV9HQUlOX1NISUZULCBEQTcyMThfRE1JWF9HQUlOX01BWCwKKwkJICAgICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9kbWl4X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFKCJTaWRldG9uZSBTd2l0Y2giLCBEQTcyMThfU0lERVRPTkVfQ1RSTCwKKwkJICAgREE3MjE4X1NJREVUT05FX01VVEVfRU5fU0hJRlQsIERBNzIxOF9TV0lUQ0hfRU5fTUFYLAorCQkgICBEQTcyMThfSU5WRVJUKSwKKworCS8qIFRvbmUgR2VuZXJhdG9yICovCisJU09DX0VOVU0oIlRvbmVHZW4gRFRNRiBLZXkiLCBkYTcyMThfdG9uZWdlbl9kdG1mX2tleSksCisJU09DX1NJTkdMRSgiVG9uZUdlbiBEVE1GIFN3aXRjaCIsIERBNzIxOF9UT05FX0dFTl9DRkcxLAorCQkgICBEQTcyMThfRFRNRl9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgIERBNzIxOF9OT19JTlZFUlQpLAorCVNPQ19FTlVNKCJUb25lR2VuIFNpbmV3YXZlIEdlbiBUeXBlIiwgZGE3MjE4X3RvbmVnZW5fc3dnX3NlbCksCisJU09DX1NJTkdMRV9FWFQoIlRvbmVHZW4gU2luZXdhdmUxIEZyZXEiLCBEQTcyMThfVE9ORV9HRU5fRlJFUTFfTCwKKwkJICAgICAgIERBNzIxOF9GUkVRMV9MX1NISUZULCBEQTcyMThfRlJFUV9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfdG9uZWdlbl9mcmVxX2dldCwgZGE3MjE4X3RvbmVnZW5fZnJlcV9wdXQpLAorCVNPQ19TSU5HTEVfRVhUKCJUb25lR2VuIFNpbmV3YXZlMiBGcmVxIiwgREE3MjE4X1RPTkVfR0VOX0ZSRVEyX0wsCisJCSAgICAgICBEQTcyMThfRlJFUTJfTF9TSElGVCwgREE3MjE4X0ZSRVFfTUFYLCBEQTcyMThfTk9fSU5WRVJULAorCQkgICAgICAgZGE3MjE4X3RvbmVnZW5fZnJlcV9nZXQsIGRhNzIxOF90b25lZ2VuX2ZyZXFfcHV0KSwKKwlTT0NfU0lOR0xFKCJUb25lR2VuIE9uIFRpbWUiLCBEQTcyMThfVE9ORV9HRU5fT05fUEVSLAorCQkgICBEQTcyMThfQkVFUF9PTl9QRVJfU0hJRlQsIERBNzIxOF9CRUVQX09OX09GRl9NQVgsCisJCSAgIERBNzIxOF9OT19JTlZFUlQpLAorCVNPQ19TSU5HTEUoIlRvbmVHZW4gT2ZmIFRpbWUiLCBEQTcyMThfVE9ORV9HRU5fT0ZGX1BFUiwKKwkJICAgREE3MjE4X0JFRVBfT0ZGX1BFUl9TSElGVCwgREE3MjE4X0JFRVBfT05fT0ZGX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisKKwkvKiBHYWluIHJhbXBpbmcgKi8KKwlTT0NfRU5VTSgiR2FpbiBSYW1wIFJhdGUiLCBkYTcyMThfZ2Fpbl9yYW1wX3JhdGUpLAorCisJLyogREdTICovCisJU09DX1NJTkdMRV9UTFYoIkRHUyBUcmlnZ2VyIiwgREE3MjE4X0RHU19UUklHR0VSLAorCQkgICAgICAgREE3MjE4X0RHU19UUklHR0VSX0xWTF9TSElGVCwgREE3MjE4X0RHU19UUklHR0VSX01BWCwKKwkJICAgICAgIERBNzIxOF9JTlZFUlQsIGRhNzIxOF9kZ3NfdHJpZ2dlcl90bHYpLAorCVNPQ19FTlVNKCJER1MgUmlzZSBDb2VmZmljaWVudCIsIGRhNzIxOF9kZ3NfcmlzZV9jb2VmZiksCisJU09DX0VOVU0oIkRHUyBGYWxsIENvZWZmaWNpZW50IiwgZGE3MjE4X2Rnc19mYWxsX2NvZWZmKSwKKwlTT0NfU0lOR0xFKCJER1MgU3luYyBEZWxheSIsIERBNzIxOF9ER1NfU1lOQ19ERUxBWSwKKwkJICAgREE3MjE4X0RHU19TWU5DX0RFTEFZX1NISUZULCBEQTcyMThfREdTX1NZTkNfREVMQVlfTUFYLAorCQkgICBEQTcyMThfTk9fSU5WRVJUKSwKKwlTT0NfU0lOR0xFKCJER1MgRmFzdCBTUiBTeW5jIERlbGF5IiwgREE3MjE4X0RHU19TWU5DX0RFTEFZMiwKKwkJICAgREE3MjE4X0RHU19TWU5DX0RFTEFZMl9TSElGVCwgREE3MjE4X0RHU19TWU5DX0RFTEFZX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisJU09DX1NJTkdMRSgiREdTIFZvaWNlIEZpbHRlciBTeW5jIERlbGF5IiwgREE3MjE4X0RHU19TWU5DX0RFTEFZMywKKwkJICAgREE3MjE4X0RHU19TWU5DX0RFTEFZM19TSElGVCwgREE3MjE4X0RHU19TWU5DX0RFTEFZM19NQVgsCisJCSAgIERBNzIxOF9OT19JTlZFUlQpLAorCVNPQ19TSU5HTEVfVExWKCJER1MgQW50aWNsaXAgTGV2ZWwiLCBEQTcyMThfREdTX0xFVkVMUywKKwkJICAgICAgIERBNzIxOF9ER1NfQU5USUNMSVBfTFZMX1NISUZULAorCQkgICAgICAgREE3MjE4X0RHU19BTlRJQ0xJUF9MVkxfTUFYLCBEQTcyMThfSU5WRVJULAorCQkgICAgICAgZGE3MjE4X2Rnc19hbnRpY2xpcF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJER1MgU2lnbmFsIExldmVsIiwgREE3MjE4X0RHU19MRVZFTFMsCisJCSAgICAgICBEQTcyMThfREdTX1NJR05BTF9MVkxfU0hJRlQsIERBNzIxOF9ER1NfU0lHTkFMX0xWTF9NQVgsCisJCSAgICAgICBEQTcyMThfSU5WRVJULCBkYTcyMThfZGdzX3NpZ25hbF90bHYpLAorCVNPQ19TSU5HTEUoIkRHUyBHYWluIFN1YnJhbmdlIFN3aXRjaCIsIERBNzIxOF9ER1NfR0FJTl9DVFJMLAorCQkgICBEQTcyMThfREdTX1NVQlJfRU5fU0hJRlQsIERBNzIxOF9TV0lUQ0hfRU5fTUFYLAorCQkgICBEQTcyMThfTk9fSU5WRVJUKSwKKwlTT0NfU0lOR0xFKCJER1MgR2FpbiBSYW1wIFN3aXRjaCIsIERBNzIxOF9ER1NfR0FJTl9DVFJMLAorCQkgICBEQTcyMThfREdTX1JBTVBfRU5fU0hJRlQsIERBNzIxOF9TV0lUQ0hfRU5fTUFYLAorCQkgICBEQTcyMThfTk9fSU5WRVJUKSwKKwlTT0NfU0lOR0xFKCJER1MgR2FpbiBTdGVwcyIsIERBNzIxOF9ER1NfR0FJTl9DVFJMLAorCQkgICBEQTcyMThfREdTX1NURVBTX1NISUZULCBEQTcyMThfREdTX1NURVBTX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisJU09DX0RPVUJMRSgiREdTIFN3aXRjaCIsIERBNzIxOF9ER1NfRU5BQkxFLCBEQTcyMThfREdTX0VOQUJMRV9MX1NISUZULAorCQkgICBEQTcyMThfREdTX0VOQUJMRV9SX1NISUZULCBEQTcyMThfU1dJVENIX0VOX01BWCwKKwkJICAgREE3MjE4X05PX0lOVkVSVCksCisKKwkvKiBPdXRwdXQgSGlnaC1QYXNzIEZpbHRlciAqLworCVNPQ19FTlVNKCJPdXQgRmlsdGVyIEhQRiBNb2RlIiwgZGE3MjE4X291dDFfaHBmX21vZGUpLAorCVNPQ19FTlVNKCJPdXQgRmlsdGVyIEhQRiBDb3JuZXIgQXVkaW8iLCBkYTcyMThfb3V0MV9hdWRpb19ocGZfY29ybmVyKSwKKwlTT0NfRU5VTSgiT3V0IEZpbHRlciBIUEYgQ29ybmVyIFZvaWNlIiwgZGE3MjE4X291dDFfdm9pY2VfaHBmX2Nvcm5lciksCisKKwkvKiA1LUJhbmQgRXF1YWxpc2VyICovCisJU09DX1NJTkdMRV9UTFYoIk91dCBFUSBCYW5kMSBWb2x1bWUiLCBEQTcyMThfT1VUXzFfRVFfMTJfRklMVEVSX0NUUkwsCisJCSAgICAgICBEQTcyMThfT1VUXzFfRVFfQkFORDFfU0hJRlQsIERBNzIxOF9PVVRfRVFfQkFORF9NQVgsCisJCSAgICAgICBEQTcyMThfTk9fSU5WRVJULCBkYTcyMThfb3V0X2VxX2JhbmRfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiT3V0IEVRIEJhbmQyIFZvbHVtZSIsIERBNzIxOF9PVVRfMV9FUV8xMl9GSUxURVJfQ1RSTCwKKwkJICAgICAgIERBNzIxOF9PVVRfMV9FUV9CQU5EMl9TSElGVCwgREE3MjE4X09VVF9FUV9CQU5EX01BWCwKKwkJICAgICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9vdXRfZXFfYmFuZF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJPdXQgRVEgQmFuZDMgVm9sdW1lIiwgREE3MjE4X09VVF8xX0VRXzM0X0ZJTFRFUl9DVFJMLAorCQkgICAgICAgREE3MjE4X09VVF8xX0VRX0JBTkQzX1NISUZULCBEQTcyMThfT1VUX0VRX0JBTkRfTUFYLAorCQkgICAgICAgREE3MjE4X05PX0lOVkVSVCwgZGE3MjE4X291dF9lcV9iYW5kX3RsdiksCisJU09DX1NJTkdMRV9UTFYoIk91dCBFUSBCYW5kNCBWb2x1bWUiLCBEQTcyMThfT1VUXzFfRVFfMzRfRklMVEVSX0NUUkwsCisJCSAgICAgICBEQTcyMThfT1VUXzFfRVFfQkFORDRfU0hJRlQsIERBNzIxOF9PVVRfRVFfQkFORF9NQVgsCisJCSAgICAgICBEQTcyMThfTk9fSU5WRVJULCBkYTcyMThfb3V0X2VxX2JhbmRfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiT3V0IEVRIEJhbmQ1IFZvbHVtZSIsIERBNzIxOF9PVVRfMV9FUV81X0ZJTFRFUl9DVFJMLAorCQkgICAgICAgREE3MjE4X09VVF8xX0VRX0JBTkQ1X1NISUZULCBEQTcyMThfT1VUX0VRX0JBTkRfTUFYLAorCQkgICAgICAgREE3MjE4X05PX0lOVkVSVCwgZGE3MjE4X291dF9lcV9iYW5kX3RsdiksCisJU09DX1NJTkdMRSgiT3V0IEVRIFN3aXRjaCIsIERBNzIxOF9PVVRfMV9FUV81X0ZJTFRFUl9DVFJMLAorCQkgICBEQTcyMThfT1VUXzFfRVFfRU5fU0hJRlQsIERBNzIxOF9TV0lUQ0hfRU5fTUFYLAorCQkgICBEQTcyMThfTk9fSU5WRVJUKSwKKworCS8qIEJpUXVhZCBGaWx0ZXJzICovCisJU05EX1NPQ19CWVRFU19FWFQoIkJpUXVhZCBDb2VmZmljaWVudHMiLAorCQkJICBEQTcyMThfT1VUXzFfQklRXzVTVEFHRV9DRkdfU0laRSwKKwkJCSAgZGE3MjE4X2JpcXVhZF9jb2VmZl9nZXQsIGRhNzIxOF9iaXF1YWRfY29lZmZfcHV0KSwKKwlTT0NfU0lOR0xFKCJCaVF1YWQgRmlsdGVyIFN3aXRjaCIsIERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0NUUkwsCisJCSAgIERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX01VVEVfRU5fU0hJRlQsIERBNzIxOF9TV0lUQ0hfRU5fTUFYLAorCQkgICBEQTcyMThfSU5WRVJUKSwKKworCS8qIE91dHB1dCBGaWx0ZXJzICovCisJU09DX0RPVUJMRV9SX1JBTkdFX1RMVigiT3V0IEZpbHRlciBWb2x1bWUiLCBEQTcyMThfT1VUXzFMX0dBSU4sCisJCQkgICAgICAgREE3MjE4X09VVF8xUl9HQUlOLAorCQkJICAgICAgIERBNzIxOF9PVVRfMUxfRElHSVRBTF9HQUlOX1NISUZULAorCQkJICAgICAgIERBNzIxOF9PVVRfRElHSVRBTF9HQUlOX01JTiwKKwkJCSAgICAgICBEQTcyMThfT1VUX0RJR0lUQUxfR0FJTl9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCQkgICAgICAgZGE3MjE4X291dF9kaWdfZ2Fpbl90bHYpLAorCVNPQ19ET1VCTEVfUigiT3V0IEZpbHRlciBTd2l0Y2giLCBEQTcyMThfT1VUXzFMX0ZJTFRFUl9DVFJMLAorCQkgICAgIERBNzIxOF9PVVRfMVJfRklMVEVSX0NUUkwsIERBNzIxOF9PVVRfMUxfTVVURV9FTl9TSElGVCwKKwkJICAgICBEQTcyMThfU1dJVENIX0VOX01BWCwgREE3MjE4X0lOVkVSVCksCisJU09DX0RPVUJMRV9SKCJPdXQgRmlsdGVyIEdhaW4gU3VicmFuZ2UgU3dpdGNoIiwKKwkJICAgICBEQTcyMThfT1VUXzFMX0ZJTFRFUl9DVFJMLCBEQTcyMThfT1VUXzFSX0ZJTFRFUl9DVFJMLAorCQkgICAgIERBNzIxOF9PVVRfMUxfU1VCUkFOR0VfRU5fU0hJRlQsIERBNzIxOF9TV0lUQ0hfRU5fTUFYLAorCQkgICAgIERBNzIxOF9OT19JTlZFUlQpLAorCVNPQ19ET1VCTEVfUigiT3V0IEZpbHRlciBHYWluIFJhbXAgU3dpdGNoIiwgREE3MjE4X09VVF8xTF9GSUxURVJfQ1RSTCwKKwkJICAgICBEQTcyMThfT1VUXzFSX0ZJTFRFUl9DVFJMLCBEQTcyMThfT1VUXzFMX1JBTVBfRU5fU0hJRlQsCisJCSAgICAgREE3MjE4X1NXSVRDSF9FTl9NQVgsIERBNzIxOF9OT19JTlZFUlQpLAorCisJLyogTWl4ZXIgT3V0cHV0ICovCisJU09DX0RPVUJMRV9SX1JBTkdFX1RMVigiTWl4b3V0IFZvbHVtZSIsIERBNzIxOF9NSVhPVVRfTF9HQUlOLAorCQkJICAgICAgIERBNzIxOF9NSVhPVVRfUl9HQUlOLAorCQkJICAgICAgIERBNzIxOF9NSVhPVVRfTF9BTVBfR0FJTl9TSElGVCwKKwkJCSAgICAgICBEQTcyMThfTUlYT1VUX0FNUF9HQUlOX01JTiwKKwkJCSAgICAgICBEQTcyMThfTUlYT1VUX0FNUF9HQUlOX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJCSAgICAgICBkYTcyMThfbWl4b3V0X2dhaW5fdGx2KSwKKworCS8qIERBQyBOb2lzZSBHYXRlICovCisJU09DX0VOVU0oIkRBQyBORyBTZXR1cCBUaW1lIiwgZGE3MjE4X2RhY19uZ19zZXR1cF90aW1lKSwKKwlTT0NfRU5VTSgiREFDIE5HIFJhbXB1cCBSYXRlIiwgZGE3MjE4X2RhY19uZ19yYW1wdXBfcmF0ZSksCisJU09DX0VOVU0oIkRBQyBORyBSYW1wZG93biBSYXRlIiwgZGE3MjE4X2RhY19uZ19yYW1wZG93bl9yYXRlKSwKKwlTT0NfU0lOR0xFX1RMVigiREFDIE5HIE9mZiBUaHJlc2hvbGQiLCBEQTcyMThfREFDX05HX09GRl9USFJFU0gsCisJCSAgICAgICBEQTcyMThfREFDX05HX09GRl9USFJFU0hPTERfU0hJRlQsCisJCSAgICAgICBEQTcyMThfREFDX05HX1RIUkVTSE9MRF9NQVgsIERBNzIxOF9OT19JTlZFUlQsCisJCSAgICAgICBkYTcyMThfZGFjX25nX3RocmVzaG9sZF90bHYpLAorCVNPQ19TSU5HTEVfVExWKCJEQUMgTkcgT24gVGhyZXNob2xkIiwgREE3MjE4X0RBQ19OR19PTl9USFJFU0gsCisJCSAgICAgICBEQTcyMThfREFDX05HX09OX1RIUkVTSE9MRF9TSElGVCwKKwkJICAgICAgIERBNzIxOF9EQUNfTkdfVEhSRVNIT0xEX01BWCwgREE3MjE4X05PX0lOVkVSVCwKKwkJICAgICAgIGRhNzIxOF9kYWNfbmdfdGhyZXNob2xkX3RsdiksCisJU09DX1NJTkdMRSgiREFDIE5HIFN3aXRjaCIsIERBNzIxOF9EQUNfTkdfQ1RSTCwgREE3MjE4X0RBQ19OR19FTl9TSElGVCwKKwkJICAgREE3MjE4X1NXSVRDSF9FTl9NQVgsIERBNzIxOF9OT19JTlZFUlQpLAorCisJLyogQ1AgKi8KKwlTT0NfRU5VTSgiQ2hhcmdlIFB1bXAgVHJhY2sgTW9kZSIsIGRhNzIxOF9jcF9tY2hhbmdlKSwKKwlTT0NfRU5VTSgiQ2hhcmdlIFB1bXAgRnJlcXVlbmN5IiwgZGE3MjE4X2NwX2Zjb250cm9sKSwKKwlTT0NfRU5VTSgiQ2hhcmdlIFB1bXAgRGVjYXkgUmF0ZSIsIGRhNzIxOF9jcF90YXVfZGVsYXkpLAorCVNPQ19TSU5HTEUoIkNoYXJnZSBQdW1wIFRocmVzaG9sZCIsIERBNzIxOF9DUF9WT0xfVEhSRVNIT0xEMSwKKwkJICAgREE3MjE4X0NQX1RIUkVTSF9WREQyX1NISUZULCBEQTcyMThfQ1BfVEhSRVNIX1ZERDJfTUFYLAorCQkgICBEQTcyMThfTk9fSU5WRVJUKSwKKworCS8qIEhlYWRwaG9uZXMgKi8KKwlTT0NfRE9VQkxFX1JfUkFOR0VfVExWKCJIZWFkcGhvbmUgVm9sdW1lIiwgREE3MjE4X0hQX0xfR0FJTiwKKwkJCSAgICAgICBEQTcyMThfSFBfUl9HQUlOLCBEQTcyMThfSFBfTF9BTVBfR0FJTl9TSElGVCwKKwkJCSAgICAgICBEQTcyMThfSFBfQU1QX0dBSU5fTUlOLCBEQTcyMThfSFBfQU1QX0dBSU5fTUFYLAorCQkJICAgICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9ocF9nYWluX3RsdiksCisJU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgU3dpdGNoIiwgREE3MjE4X0hQX0xfQ1RSTCwgREE3MjE4X0hQX1JfQ1RSTCwKKwkJICAgICBEQTcyMThfSFBfTF9BTVBfTVVURV9FTl9TSElGVCwgREE3MjE4X1NXSVRDSF9FTl9NQVgsCisJCSAgICAgREE3MjE4X0lOVkVSVCksCisJU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgR2FpbiBSYW1wIFN3aXRjaCIsIERBNzIxOF9IUF9MX0NUUkwsCisJCSAgICAgREE3MjE4X0hQX1JfQ1RSTCwgREE3MjE4X0hQX0xfQU1QX1JBTVBfRU5fU0hJRlQsCisJCSAgICAgREE3MjE4X1NXSVRDSF9FTl9NQVgsIERBNzIxOF9OT19JTlZFUlQpLAorCVNPQ19ET1VCTEVfUigiSGVhZHBob25lIFpDIEdhaW4gU3dpdGNoIiwgREE3MjE4X0hQX0xfQ1RSTCwKKwkJICAgICBEQTcyMThfSFBfUl9DVFJMLCBEQTcyMThfSFBfTF9BTVBfWkNfRU5fU0hJRlQsCisJCSAgICAgREE3MjE4X1NXSVRDSF9FTl9NQVgsIERBNzIxOF9OT19JTlZFUlQpLAorfTsKKworCisvKgorICogREFQTSBNdXggQ29udHJvbHMKKyAqLworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhNzIxOF9taWNfc2VsX3RleHRbXSA9IHsgIkFuYWxvZyIsICJEaWdpdGFsIiB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9taWMxX3NlbCA9CisJU09DX0VOVU1fU0lOR0xFX0VYVChBUlJBWV9TSVpFKGRhNzIxOF9taWNfc2VsX3RleHQpLAorCQkJICAgIGRhNzIxOF9taWNfc2VsX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGE3MjE4X21pYzFfc2VsX211eCA9CisJU09DX0RBUE1fRU5VTSgiTWljMSBNdXgiLCBkYTcyMThfbWljMV9zZWwpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9taWMyX3NlbCA9CisJU09DX0VOVU1fU0lOR0xFX0VYVChBUlJBWV9TSVpFKGRhNzIxOF9taWNfc2VsX3RleHQpLAorCQkJICAgIGRhNzIxOF9taWNfc2VsX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGE3MjE4X21pYzJfc2VsX211eCA9CisJU09DX0RBUE1fRU5VTSgiTWljMiBNdXgiLCBkYTcyMThfbWljMl9zZWwpOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRhNzIxOF9zaWRldG9uZV9pbl9zZWxfdHh0W10gPSB7CisJIkluIEZpbHRlcjFMIiwgIkluIEZpbHRlcjFSIiwgIkluIEZpbHRlcjJMIiwgIkluIEZpbHRlcjJSIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYTcyMThfc2lkZXRvbmVfaW5fc2VsID0KKwlTT0NfRU5VTV9TSU5HTEUoREE3MjE4X1NJREVUT05FX0lOX1NFTEVDVCwKKwkJCURBNzIxOF9TSURFVE9ORV9JTl9TRUxFQ1RfU0hJRlQsCisJCQlEQTcyMThfU0lERVRPTkVfSU5fU0VMRUNUX01BWCwKKwkJCWRhNzIxOF9zaWRldG9uZV9pbl9zZWxfdHh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhNzIxOF9zaWRldG9uZV9pbl9zZWxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTaWRldG9uZSBNdXgiLCBkYTcyMThfc2lkZXRvbmVfaW5fc2VsKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkYTcyMThfb3V0X2ZpbHRfYmlxX3NlbF90eHRbXSA9IHsKKwkiQnlwYXNzIiwgIkVuYWJsZWQiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhNzIxOF9vdXRfZmlsdGxfYmlxX3NlbCA9CisJU09DX0VOVU1fU0lOR0xFKERBNzIxOF9PVVRfMUxfRklMVEVSX0NUUkwsCisJCQlEQTcyMThfT1VUXzFMX0JJUV81U1RBR0VfU0VMX1NISUZULAorCQkJREE3MjE4X09VVF9CSVFfNVNUQUdFX1NFTF9NQVgsCisJCQlkYTcyMThfb3V0X2ZpbHRfYmlxX3NlbF90eHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGE3MjE4X291dF9maWx0bF9iaXFfc2VsX211eCA9CisJU09DX0RBUE1fRU5VTSgiT3V0IEZpbHRlckwgQmlRdWFkIE11eCIsIGRhNzIxOF9vdXRfZmlsdGxfYmlxX3NlbCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGE3MjE4X291dF9maWx0cl9iaXFfc2VsID0KKwlTT0NfRU5VTV9TSU5HTEUoREE3MjE4X09VVF8xUl9GSUxURVJfQ1RSTCwKKwkJCURBNzIxOF9PVVRfMVJfQklRXzVTVEFHRV9TRUxfU0hJRlQsCisJCQlEQTcyMThfT1VUX0JJUV81U1RBR0VfU0VMX01BWCwKKwkJCWRhNzIxOF9vdXRfZmlsdF9iaXFfc2VsX3R4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYTcyMThfb3V0X2ZpbHRyX2JpcV9zZWxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJPdXQgRmlsdGVyUiBCaVF1YWQgTXV4IiwgZGE3MjE4X291dF9maWx0cl9iaXFfc2VsKTsKKworCisvKgorICogREFQTSBNaXhlciBDb250cm9scworICovCisKKyNkZWZpbmUgREE3MjE4X0RNSVhfQ1RSTFMocmVnKQkJCQkJCVwKKwlTT0NfREFQTV9TSU5HTEUoIkluIEZpbHRlcjFMIFN3aXRjaCIsIHJlZywJCQlcCisJCQlEQTcyMThfRE1JWF9TUkNfSU5GSUxUMUwsCQkJXAorCQkJREE3MjE4X1NXSVRDSF9FTl9NQVgsIERBNzIxOF9OT19JTlZFUlQpLAlcCisJU09DX0RBUE1fU0lOR0xFKCJJbiBGaWx0ZXIxUiBTd2l0Y2giLCByZWcsCQkJXAorCQkJREE3MjE4X0RNSVhfU1JDX0lORklMVDFSLAkJCVwKKwkJCURBNzIxOF9TV0lUQ0hfRU5fTUFYLCBEQTcyMThfTk9fSU5WRVJUKSwJXAorCVNPQ19EQVBNX1NJTkdMRSgiSW4gRmlsdGVyMkwgU3dpdGNoIiwgcmVnLAkJCVwKKwkJCURBNzIxOF9ETUlYX1NSQ19JTkZJTFQyTCwJCQlcCisJCQlEQTcyMThfU1dJVENIX0VOX01BWCwgREE3MjE4X05PX0lOVkVSVCksCVwKKwlTT0NfREFQTV9TSU5HTEUoIkluIEZpbHRlcjJSIFN3aXRjaCIsIHJlZywJCQlcCisJCQlEQTcyMThfRE1JWF9TUkNfSU5GSUxUMlIsCQkJXAorCQkJREE3MjE4X1NXSVRDSF9FTl9NQVgsIERBNzIxOF9OT19JTlZFUlQpLAlcCisJU09DX0RBUE1fU0lOR0xFKCJUb25lR2VuIFN3aXRjaCIsIHJlZywJCQkJXAorCQkJREE3MjE4X0RNSVhfU1JDX1RPTkVHRU4sCQkJXAorCQkJREE3MjE4X1NXSVRDSF9FTl9NQVgsIERBNzIxOF9OT19JTlZFUlQpLAlcCisJU09DX0RBUE1fU0lOR0xFKCJEQUlMIFN3aXRjaCIsIHJlZywgREE3MjE4X0RNSVhfU1JDX0RBSUwsCVwKKwkJCURBNzIxOF9TV0lUQ0hfRU5fTUFYLCBEQTcyMThfTk9fSU5WRVJUKSwJXAorCVNPQ19EQVBNX1NJTkdMRSgiREFJUiBTd2l0Y2giLCByZWcsIERBNzIxOF9ETUlYX1NSQ19EQUlSLAlcCisJCQlEQTcyMThfU1dJVENIX0VOX01BWCwgREE3MjE4X05PX0lOVkVSVCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhNzIxOF9vdXRfZGFpMWxfbWl4X2NvbnRyb2xzW10gPSB7CisJREE3MjE4X0RNSVhfQ1RSTFMoREE3MjE4X0RST1VUSU5HX09VVERBSV8xTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGE3MjE4X291dF9kYWkxcl9taXhfY29udHJvbHNbXSA9IHsKKwlEQTcyMThfRE1JWF9DVFJMUyhEQTcyMThfRFJPVVRJTkdfT1VUREFJXzFSKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYTcyMThfb3V0X2RhaTJsX21peF9jb250cm9sc1tdID0geworCURBNzIxOF9ETUlYX0NUUkxTKERBNzIxOF9EUk9VVElOR19PVVREQUlfMkwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhNzIxOF9vdXRfZGFpMnJfbWl4X2NvbnRyb2xzW10gPSB7CisJREE3MjE4X0RNSVhfQ1RSTFMoREE3MjE4X0RST1VUSU5HX09VVERBSV8yUiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGE3MjE4X291dF9maWx0bF9taXhfY29udHJvbHNbXSA9IHsKKwlEQTcyMThfRE1JWF9DVFJMUyhEQTcyMThfRFJPVVRJTkdfT1VURklMVF8xTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGE3MjE4X291dF9maWx0cl9taXhfY29udHJvbHNbXSA9IHsKKwlEQTcyMThfRE1JWF9DVFJMUyhEQTcyMThfRFJPVVRJTkdfT1VURklMVF8xUiksCit9OworCisjZGVmaW5lIERBNzIxOF9ETUlYX1NUX0NUUkxTKHJlZykJCQkJCVwKKwlTT0NfREFQTV9TSU5HTEUoIk91dCBGaWx0ZXJMIFN3aXRjaCIsIHJlZywJCQlcCisJCQlEQTcyMThfRE1JWF9TVF9TUkNfT1VURklMVDFMLAkJCVwKKwkJCURBNzIxOF9TV0lUQ0hfRU5fTUFYLCBEQTcyMThfTk9fSU5WRVJUKSwJXAorCVNPQ19EQVBNX1NJTkdMRSgiT3V0IEZpbHRlclIgU3dpdGNoIiwgcmVnLAkJCVwKKwkJCURBNzIxOF9ETUlYX1NUX1NSQ19PVVRGSUxUMVIsCQkJXAorCQkJREE3MjE4X1NXSVRDSF9FTl9NQVgsIERBNzIxOF9OT19JTlZFUlQpLAlcCisJU09DX0RBUE1fU0lOR0xFKCJTaWRldG9uZSBTd2l0Y2giLCByZWcsCQkJCVwKKwkJCURBNzIxOF9ETUlYX1NUX1NSQ19TSURFVE9ORSwJCQlcCisJCQlEQTcyMThfU1dJVENIX0VOX01BWCwgREE3MjE4X05PX0lOVkVSVCkJCVwKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhNzIxOF9zdF9vdXRfZmlsdGxfbWl4X2NvbnRyb2xzW10gPSB7CisJREE3MjE4X0RNSVhfU1RfQ1RSTFMoREE3MjE4X0RST1VUSU5HX1NUX09VVEZJTFRfMUwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhNzIxOF9zdF9vdXRfZmlsdHJfbWl4X2NvbnRyb2xzW10gPSB7CisJREE3MjE4X0RNSVhfU1RfQ1RSTFMoREE3MjE4X0RST1VUSU5HX1NUX09VVEZJTFRfMVIpLAorfTsKKworCisvKgorICogREFQTSBFdmVudHMKKyAqLworCisvKgorICogV2Uga2VlcCB0cmFjayBvZiB3aGljaCBpbnB1dCBmaWx0ZXJzIGFyZSBlbmFibGVkLiBUaGlzIGlzIHVzZWQgaW4gdGhlIGxvZ2ljCisgKiBmb3IgY29udHJvbGxpbmcgdGhlIG1pYyBsZXZlbCBkZXRlY3QgZmVhdHVyZS4KKyAqLworc3RhdGljIGludCBkYTcyMThfaW5fZmlsdGVyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisJc3RydWN0IGRhNzIxOF9wcml2ICpkYTcyMTggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1OCBtYXNrOworCisJc3dpdGNoICh3LT5yZWcpIHsKKwljYXNlIERBNzIxOF9JTl8xTF9GSUxURVJfQ1RSTDoKKwkJbWFzayA9ICgxIDw8IERBNzIxOF9MVkxfREVUX0VOX0NIQU4xTF9TSElGVCk7CisJCWJyZWFrOworCWNhc2UgREE3MjE4X0lOXzFSX0ZJTFRFUl9DVFJMOgorCQltYXNrID0gKDEgPDwgREE3MjE4X0xWTF9ERVRfRU5fQ0hBTjFSX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSBEQTcyMThfSU5fMkxfRklMVEVSX0NUUkw6CisJCW1hc2sgPSAoMSA8PCBEQTcyMThfTFZMX0RFVF9FTl9DSEFOMkxfU0hJRlQpOworCQlicmVhazsKKwljYXNlIERBNzIxOF9JTl8yUl9GSUxURVJfQ1RSTDoKKwkJbWFzayA9ICgxIDw8IERBNzIxOF9MVkxfREVUX0VOX0NIQU4yUl9TSElGVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKKwkJZGE3MjE4LT5pbl9maWx0X2VuIHw9IG1hc2s7CisJCS8qCisJCSAqIElmIHdlJ3JlIGVuYWJsaW5nIHBhdGggZm9yIG1pYyBsZXZlbCBkZXRlY3QsIHdhaXQgZm9yIHBhdGgKKwkJICogdG8gc2V0dGxlIGJlZm9yZSBlbmFibGluZyBmZWF0dXJlIHRvIGF2b2lkIGluY29ycmVjdCBhbmQKKwkJICogdW53YW50ZWQgZGV0ZWN0IGV2ZW50cy4KKwkJICovCisJCWlmIChtYXNrICYgZGE3MjE4LT5taWNfbHZsX2RldF9lbikKKwkJCW1zbGVlcChEQTcyMThfTUlDX0xWTF9ERVRfREVMQVkpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQlkYTcyMTgtPmluX2ZpbHRfZW4gJj0gfm1hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEVuYWJsZSBjb25maWd1cmVkIGxldmVsIGRldGVjdGlvbiBwYXRocyAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9MVkxfREVUX0NUUkwsCisJCSAgICAgIChkYTcyMTgtPmluX2ZpbHRfZW4gJiBkYTcyMTgtPm1pY19sdmxfZGV0X2VuKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTcyMThfZGFpX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCXN0cnVjdCBkYTcyMThfcHJpdiAqZGE3MjE4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTggcGxsX2N0cmwsIHBsbF9zdGF0dXMsIHJlZm9zY19jYWw7CisJaW50IGk7CisJYm9vbCBzdWNjZXNzOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQlpZiAoZGE3MjE4LT5tYXN0ZXIpCisJCQkvKiBFbmFibGUgREFJIGNsa3MgZm9yIG1hc3RlciBtb2RlICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfREFJX0NMS19NT0RFLAorCQkJCQkgICAgREE3MjE4X0RBSV9DTEtfRU5fTUFTSywKKwkJCQkJICAgIERBNzIxOF9EQUlfQ0xLX0VOX01BU0spOworCisJCS8qIFR1bmUgcmVmZXJlbmNlIG9zY2lsbGF0b3IgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X1BMTF9SRUZPU0NfQ0FMLAorCQkJICAgICAgREE3MjE4X1BMTF9SRUZPU0NfQ0FMX1NUQVJUX01BU0spOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfUExMX1JFRk9TQ19DQUwsCisJCQkgICAgICBEQTcyMThfUExMX1JFRk9TQ19DQUxfU1RBUlRfTUFTSyB8CisJCQkgICAgICBEQTcyMThfUExMX1JFRk9TQ19DQUxfRU5fTUFTSyk7CisKKwkJLyogQ2hlY2sgdHVuaW5nIGNvbXBsZXRlICovCisJCWkgPSAwOworCQlzdWNjZXNzID0gZmFsc2U7CisJCWRvIHsKKwkJCXJlZm9zY19jYWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIERBNzIxOF9QTExfUkVGT1NDX0NBTCk7CisJCQlpZiAoIShyZWZvc2NfY2FsICYgREE3MjE4X1BMTF9SRUZPU0NfQ0FMX1NUQVJUX01BU0spKSB7CisJCQkJc3VjY2VzcyA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCSsraTsKKwkJCQl1c2xlZXBfcmFuZ2UoREE3MjE4X1JFRl9PU0NfQ0hFQ0tfREVMQVlfTUlOLAorCQkJCQkgICAgIERBNzIxOF9SRUZfT1NDX0NIRUNLX0RFTEFZX01BWCk7CisJCQl9CisJCX0gd2hpbGUgKChpIDwgREE3MjE4X1JFRl9PU0NfQ0hFQ0tfVFJJRVMpICYmICghc3VjY2VzcykpOworCisJCWlmICghc3VjY2VzcykKKwkJCWRldl93YXJuKGNvZGVjLT5kZXYsCisJCQkJICJSZWZlcmVuY2Ugb3NjaWxsYXRvciBmYWlsZWQgY2FsaWJyYXRpb25cbiIpOworCisJCS8qIFBDIHN5bmNocm9uaXNlZCB0byBEQUkgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X1BDX0NPVU5ULAorCQkJICAgICAgREE3MjE4X1BDX1JFU1lOQ19BVVRPX01BU0spOworCisJCS8qIElmIFNSTSBub3QgZW5hYmxlZCwgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBzdGF0dXMgKi8KKwkJcGxsX2N0cmwgPSBzbmRfc29jX3JlYWQoY29kZWMsIERBNzIxOF9QTExfQ1RSTCk7CisJCWlmICgocGxsX2N0cmwgJiBEQTcyMThfUExMX01PREVfTUFTSykgIT0gREE3MjE4X1BMTF9NT0RFX1NSTSkKKwkJCXJldHVybiAwOworCisJCS8qIENoZWNrIFNSTSBoYXMgbG9ja2VkICovCisJCWkgPSAwOworCQlzdWNjZXNzID0gZmFsc2U7CisJCWRvIHsKKwkJCXBsbF9zdGF0dXMgPSBzbmRfc29jX3JlYWQoY29kZWMsIERBNzIxOF9QTExfU1RBVFVTKTsKKwkJCWlmIChwbGxfc3RhdHVzICYgREE3MjE4X1BMTF9TUk1fU1RBVFVTX1NSTV9MT0NLKSB7CisJCQkJc3VjY2VzcyA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCSsraTsKKwkJCQltc2xlZXAoREE3MjE4X1NSTV9DSEVDS19ERUxBWSk7CisJCQl9CisJCX0gd2hpbGUgKChpIDwgREE3MjE4X1NSTV9DSEVDS19UUklFUykgJiAoIXN1Y2Nlc3MpKTsKKworCQlpZiAoIXN1Y2Nlc3MpCisJCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiU1JNIGZhaWxlZCB0byBsb2NrXG4iKTsKKworCQlyZXR1cm4gMDsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJLyogUEMgZnJlZS1ydW5uaW5nICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9QQ19DT1VOVCwgREE3MjE4X1BDX0ZSRUVSVU5fTUFTSyk7CisKKwkJaWYgKGRhNzIxOC0+bWFzdGVyKQorCQkJLyogRGlzYWJsZSBEQUkgY2xrcyBmb3IgbWFzdGVyIG1vZGUgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9EQUlfQ0xLX01PREUsCisJCQkJCSAgICBEQTcyMThfREFJX0NMS19FTl9NQVNLLCAwKTsKKworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGE3MjE4X2NwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisJc3RydWN0IGRhNzIxOF9wcml2ICpkYTcyMTggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBEQTcyMTcgYW5kIHdlJ3JlIHVzaW5nIHNpbmdsZSBzdXBwbHkgZm9yIGRpZmZlcmVudGlhbAorCSAqIG91dHB1dCwgd2UgcmVhbGx5IGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGNoYXJnZSBwdW1wLgorCSAqLworCWlmIChkYTcyMTgtPmhwX3NpbmdsZV9zdXBwbHkpCisJCXJldHVybiAwOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9DUF9DVFJMLCBEQTcyMThfQ1BfRU5fTUFTSywKKwkJCQkgICAgREE3MjE4X0NQX0VOX01BU0spOworCQlyZXR1cm4gMDsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfQ1BfQ1RSTCwgREE3MjE4X0NQX0VOX01BU0ssCisJCQkJICAgIDApOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGE3MjE4X2hwX3BnYV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKKwkJLyogRW5hYmxlIGhlYWRwaG9uZSBvdXRwdXQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgdy0+cmVnLCBEQTcyMThfSFBfQU1QX09FX01BU0ssCisJCQkJICAgIERBNzIxOF9IUF9BTVBfT0VfTUFTSyk7CisJCXJldHVybiAwOworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCS8qIEhlYWRwaG9uZSBvdXRwdXQgaGlnaCBpbXBlZGFuY2UgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgdy0+cmVnLCBEQTcyMThfSFBfQU1QX09FX01BU0ssIDApOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworLyoKKyAqIERBUE0gV2lkZ2V0cworICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBkYTcyMThfZGFwbV93aWRnZXRzW10gPSB7CisJLyogSW5wdXQgU3VwcGxpZXMgKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZKCJNaWMgQmlhczEiLCBEQTcyMThfTUlDQklBU19FTiwKKwkJCSAgICBEQTcyMThfTUlDQklBU18xX0VOX1NISUZULCBEQTcyMThfTk9fSU5WRVJULAorCQkJICAgIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIk1pYyBCaWFzMiIsIERBNzIxOF9NSUNCSUFTX0VOLAorCQkJICAgIERBNzIxOF9NSUNCSUFTXzJfRU5fU0hJRlQsIERBNzIxOF9OT19JTlZFUlQsCisJCQkgICAgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiRE1pYzEgTGVmdCIsIERBNzIxOF9ETUlDXzFfQ1RSTCwKKwkJCSAgICBEQTcyMThfRE1JQ18xTF9FTl9TSElGVCwgREE3MjE4X05PX0lOVkVSVCwKKwkJCSAgICBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJETWljMSBSaWdodCIsIERBNzIxOF9ETUlDXzFfQ1RSTCwKKwkJCSAgICBEQTcyMThfRE1JQ18xUl9FTl9TSElGVCwgREE3MjE4X05PX0lOVkVSVCwKKwkJCSAgICBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJETWljMiBMZWZ0IiwgREE3MjE4X0RNSUNfMl9DVFJMLAorCQkJICAgIERBNzIxOF9ETUlDXzJMX0VOX1NISUZULCBEQTcyMThfTk9fSU5WRVJULAorCQkJICAgIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkRNaWMyIFJpZ2h0IiwgREE3MjE4X0RNSUNfMl9DVFJMLAorCQkJICAgIERBNzIxOF9ETUlDXzJSX0VOX1NISUZULCBEQTcyMThfTk9fSU5WRVJULAorCQkJICAgIE5VTEwsIDApLAorCisJLyogSW5wdXRzICovCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMxIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMyIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMUwiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkRNSUMxUiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzJMIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMlIiKSwKKworCS8qIElucHV0IE1peGVyIFN1cHBsaWVzICovCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiTWl4aW4xIFN1cHBseSIsIERBNzIxOF9NSVhJTl8xX0NUUkwsCisJCQkgICAgREE3MjE4X01JWElOXzFfTUlYX1NFTF9TSElGVCwgREE3MjE4X05PX0lOVkVSVCwKKwkJCSAgICBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJNaXhpbjIgU3VwcGx5IiwgREE3MjE4X01JWElOXzJfQ1RSTCwKKwkJCSAgICBEQTcyMThfTUlYSU5fMl9NSVhfU0VMX1NISUZULCBEQTcyMThfTk9fSU5WRVJULAorCQkJICAgIE5VTEwsIDApLAorCisJLyogSW5wdXQgUEdBcyAqLworCVNORF9TT0NfREFQTV9QR0EoIk1pYzEgUEdBIiwgREE3MjE4X01JQ18xX0NUUkwsCisJCQkgREE3MjE4X01JQ18xX0FNUF9FTl9TSElGVCwgREE3MjE4X05PX0lOVkVSVCwKKwkJCSBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJNaWMyIFBHQSIsIERBNzIxOF9NSUNfMl9DVFJMLAorCQkJIERBNzIxOF9NSUNfMl9BTVBfRU5fU0hJRlQsIERBNzIxOF9OT19JTlZFUlQsCisJCQkgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTWl4aW4xIFBHQSIsIERBNzIxOF9NSVhJTl8xX0NUUkwsCisJCQkgREE3MjE4X01JWElOXzFfQU1QX0VOX1NISUZULCBEQTcyMThfTk9fSU5WRVJULAorCQkJIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIk1peGluMiBQR0EiLCBEQTcyMThfTUlYSU5fMl9DVFJMLAorCQkJIERBNzIxOF9NSVhJTl8yX0FNUF9FTl9TSElGVCwgREE3MjE4X05PX0lOVkVSVCwKKwkJCSBOVUxMLCAwKSwKKworCS8qIE1pYy9ETWljIE11eGVzICovCisJU05EX1NPQ19EQVBNX01VWCgiTWljMSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZkYTcyMThfbWljMV9zZWxfbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJNaWMyIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmRhNzIxOF9taWMyX3NlbF9tdXgpLAorCisJLyogSW5wdXQgRmlsdGVycyAqLworCVNORF9TT0NfREFQTV9BRENfRSgiSW4gRmlsdGVyMUwiLCBOVUxMLCBEQTcyMThfSU5fMUxfRklMVEVSX0NUUkwsCisJCQkgICBEQTcyMThfSU5fMUxfRklMVEVSX0VOX1NISUZULCBEQTcyMThfTk9fSU5WRVJULAorCQkJICAgZGE3MjE4X2luX2ZpbHRlcl9ldmVudCwKKwkJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKwlTTkRfU09DX0RBUE1fQURDX0UoIkluIEZpbHRlcjFSIiwgTlVMTCwgREE3MjE4X0lOXzFSX0ZJTFRFUl9DVFJMLAorCQkJICAgREE3MjE4X0lOXzFSX0ZJTFRFUl9FTl9TSElGVCwgREE3MjE4X05PX0lOVkVSVCwKKwkJCSAgIGRhNzIxOF9pbl9maWx0ZXJfZXZlbnQsCisJCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisJU05EX1NPQ19EQVBNX0FEQ19FKCJJbiBGaWx0ZXIyTCIsIE5VTEwsIERBNzIxOF9JTl8yTF9GSUxURVJfQ1RSTCwKKwkJCSAgIERBNzIxOF9JTl8yTF9GSUxURVJfRU5fU0hJRlQsIERBNzIxOF9OT19JTlZFUlQsCisJCQkgICBkYTcyMThfaW5fZmlsdGVyX2V2ZW50LAorCQkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorCVNORF9TT0NfREFQTV9BRENfRSgiSW4gRmlsdGVyMlIiLCBOVUxMLCBEQTcyMThfSU5fMlJfRklMVEVSX0NUUkwsCisJCQkgICBEQTcyMThfSU5fMlJfRklMVEVSX0VOX1NISUZULCBEQTcyMThfTk9fSU5WRVJULAorCQkJICAgZGE3MjE4X2luX2ZpbHRlcl9ldmVudCwKKwkJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKworCS8qIFRvbmUgR2VuZXJhdG9yICovCisJU05EX1NPQ19EQVBNX1NJR0dFTigiVE9ORSIpLAorCVNORF9TT0NfREFQTV9QR0EoIlRvbmUgR2VuZXJhdG9yIiwgREE3MjE4X1RPTkVfR0VOX0NGRzEsCisJCQkgREE3MjE4X1NUQVJUX1NUT1BOX1NISUZULCBEQTcyMThfTk9fSU5WRVJULCBOVUxMLCAwKSwKKworCS8qIFNpZGV0b25lIElucHV0ICovCisJU05EX1NPQ19EQVBNX01VWCgiU2lkZXRvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJICZkYTcyMThfc2lkZXRvbmVfaW5fc2VsX211eCksCisJU05EX1NPQ19EQVBNX0FEQygiU2lkZXRvbmUgRmlsdGVyIiwgTlVMTCwgREE3MjE4X1NJREVUT05FX0NUUkwsCisJCQkgREE3MjE4X1NJREVUT05FX0ZJTFRFUl9FTl9TSElGVCwgREE3MjE4X05PX0lOVkVSVCksCisKKwkvKiBJbnB1dCBNaXhlcnMgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1peGVyIERBSTFMIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJICAgZGE3MjE4X291dF9kYWkxbF9taXhfY29udHJvbHMsCisJCQkgICBBUlJBWV9TSVpFKGRhNzIxOF9vdXRfZGFpMWxfbWl4X2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJNaXhlciBEQUkxUiIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgIGRhNzIxOF9vdXRfZGFpMXJfbWl4X2NvbnRyb2xzLAorCQkJICAgQVJSQVlfU0laRShkYTcyMThfb3V0X2RhaTFyX21peF9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9NSVhFUigiTWl4ZXIgREFJMkwiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICBkYTcyMThfb3V0X2RhaTJsX21peF9jb250cm9scywKKwkJCSAgIEFSUkFZX1NJWkUoZGE3MjE4X291dF9kYWkybF9taXhfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1peGVyIERBSTJSIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJICAgZGE3MjE4X291dF9kYWkycl9taXhfY29udHJvbHMsCisJCQkgICBBUlJBWV9TSVpFKGRhNzIxOF9vdXRfZGFpMnJfbWl4X2NvbnRyb2xzKSksCisKKwkvKiBEQUkgU3VwcGx5ICovCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiREFJIiwgREE3MjE4X0RBSV9DVFJMLCBEQTcyMThfREFJX0VOX1NISUZULAorCQkJICAgIERBNzIxOF9OT19JTlZFUlQsIGRhNzIxOF9kYWlfZXZlbnQsCisJCQkgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworCS8qIERBSSAqLworCVNORF9TT0NfREFQTV9BSUZfT1VUKCJEQUlPVVQiLCAiQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FJRl9JTigiREFJSU4iLCAiUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorCisJLyogT3V0cHV0IE1peGVycyAqLworCVNORF9TT0NfREFQTV9NSVhFUigiTWl4ZXIgT3V0IEZpbHRlckwiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICBkYTcyMThfb3V0X2ZpbHRsX21peF9jb250cm9scywKKwkJCSAgIEFSUkFZX1NJWkUoZGE3MjE4X291dF9maWx0bF9taXhfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1peGVyIE91dCBGaWx0ZXJSIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJICAgZGE3MjE4X291dF9maWx0cl9taXhfY29udHJvbHMsCisJCQkgICBBUlJBWV9TSVpFKGRhNzIxOF9vdXRfZmlsdHJfbWl4X2NvbnRyb2xzKSksCisKKwkvKiBCaVF1YWQgRmlsdGVycyAqLworCVNORF9TT0NfREFQTV9NVVgoIk91dCBGaWx0ZXJMIEJpUXVhZCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgJmRhNzIxOF9vdXRfZmlsdGxfYmlxX3NlbF9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIk91dCBGaWx0ZXJSIEJpUXVhZCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgJmRhNzIxOF9vdXRfZmlsdHJfYmlxX3NlbF9tdXgpLAorCVNORF9TT0NfREFQTV9EQUMoIkJpUXVhZCBGaWx0ZXIiLCBOVUxMLCBEQTcyMThfT1VUXzFfQklRXzVTVEFHRV9DVFJMLAorCQkJIERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0ZJTFRFUl9FTl9TSElGVCwKKwkJCSBEQTcyMThfTk9fSU5WRVJUKSwKKworCS8qIFNpZGV0b25lIE1peGVycyAqLworCVNORF9TT0NfREFQTV9NSVhFUigiU1QgTWl4ZXIgT3V0IEZpbHRlckwiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICBkYTcyMThfc3Rfb3V0X2ZpbHRsX21peF9jb250cm9scywKKwkJCSAgIEFSUkFZX1NJWkUoZGE3MjE4X3N0X291dF9maWx0bF9taXhfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlNUIE1peGVyIE91dCBGaWx0ZXJSIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJICAgZGE3MjE4X3N0X291dF9maWx0cl9taXhfY29udHJvbHMsCisJCQkgICBBUlJBWV9TSVpFKGRhNzIxOF9zdF9vdXRfZmlsdHJfbWl4X2NvbnRyb2xzKSksCisKKwkvKiBPdXRwdXQgRmlsdGVycyAqLworCVNORF9TT0NfREFQTV9EQUMoIk91dCBGaWx0ZXJMIiwgTlVMTCwgREE3MjE4X09VVF8xTF9GSUxURVJfQ1RSTCwKKwkJCSBEQTcyMThfT1VUXzFMX0ZJTFRFUl9FTl9TSElGVCwgREE3MjE4X05PX0lOVkVSVCksCisJU05EX1NPQ19EQVBNX0RBQygiT3V0IEZpbHRlclIiLCBOVUxMLCBEQTcyMThfT1VUXzFSX0ZJTFRFUl9DVFJMLAorCQkJIERBNzIxOF9JTl8xUl9GSUxURVJfRU5fU0hJRlQsIERBNzIxOF9OT19JTlZFUlQpLAorCisJLyogT3V0cHV0IFBHQXMgKi8KKwlTTkRfU09DX0RBUE1fUEdBKCJNaXhvdXQgTGVmdCBQR0EiLCBEQTcyMThfTUlYT1VUX0xfQ1RSTCwKKwkJCSBEQTcyMThfTUlYT1VUX0xfQU1QX0VOX1NISUZULCBEQTcyMThfTk9fSU5WRVJULAorCQkJIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIk1peG91dCBSaWdodCBQR0EiLCBEQTcyMThfTUlYT1VUX1JfQ1RSTCwKKwkJCSBEQTcyMThfTUlYT1VUX1JfQU1QX0VOX1NISUZULCBEQTcyMThfTk9fSU5WRVJULAorCQkJIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIExlZnQgUEdBIiwgREE3MjE4X0hQX0xfQ1RSTCwKKwkJCSAgIERBNzIxOF9IUF9MX0FNUF9FTl9TSElGVCwgREE3MjE4X05PX0lOVkVSVCwgTlVMTCwgMCwKKwkJCSAgIGRhNzIxOF9ocF9wZ2FfZXZlbnQsCisJCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgUmlnaHQgUEdBIiwgREE3MjE4X0hQX1JfQ1RSTCwKKwkJCSAgIERBNzIxOF9IUF9SX0FNUF9FTl9TSElGVCwgREE3MjE4X05PX0lOVkVSVCwgTlVMTCwgMCwKKwkJCSAgIGRhNzIxOF9ocF9wZ2FfZXZlbnQsCisJCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKKwkvKiBPdXRwdXQgU3VwcGxpZXMgKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZKCJDaGFyZ2UgUHVtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgZGE3MjE4X2NwX2V2ZW50LAorCQkJICAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorCisJLyogT3V0cHV0cyAqLworCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQTCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQUiIpLAorfTsKKworCisvKgorICogREFQTSBNaXhlciBSb3V0ZXMKKyAqLworCisjZGVmaW5lIERBNzIxOF9ETUlYX1JPVVRFUyhuYW1lKQkJCQlcCisJe25hbWUsICJJbiBGaWx0ZXIxTCBTd2l0Y2giLCAiSW4gRmlsdGVyMUwifSwJCVwKKwl7bmFtZSwgIkluIEZpbHRlcjFSIFN3aXRjaCIsICJJbiBGaWx0ZXIxUiJ9LAkJXAorCXtuYW1lLCAiSW4gRmlsdGVyMkwgU3dpdGNoIiwgIkluIEZpbHRlcjJMIn0sCQlcCisJe25hbWUsICJJbiBGaWx0ZXIyUiBTd2l0Y2giLCAiSW4gRmlsdGVyMlIifSwJCVwKKwl7bmFtZSwgIlRvbmVHZW4gU3dpdGNoIiwgIlRvbmUgR2VuZXJhdG9yIn0sCQlcCisJe25hbWUsICJEQUlMIFN3aXRjaCIsICJEQUlJTiJ9LAkJCQlcCisJe25hbWUsICJEQUlSIFN3aXRjaCIsICJEQUlJTiJ9CisKKyNkZWZpbmUgREE3MjE4X0RNSVhfU1RfUk9VVEVTKG5hbWUpCQkJCVwKKwl7bmFtZSwgIk91dCBGaWx0ZXJMIFN3aXRjaCIsICJPdXQgRmlsdGVyTCBCaVF1YWQgTXV4In0sCVwKKwl7bmFtZSwgIk91dCBGaWx0ZXJSIFN3aXRjaCIsICJPdXQgRmlsdGVyUiBCaVF1YWQgTXV4In0sCVwKKwl7bmFtZSwgIlNpZGV0b25lIFN3aXRjaCIsICJTaWRldG9uZSBGaWx0ZXIifQorCisKKy8qCisgKiBEQVBNIGF1ZGlvIHJvdXRlIGRlZmluaXRpb24KKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBkYTcyMThfYXVkaW9fbWFwW10gPSB7CisJLyogSW5wdXQgcGF0aHMgKi8KKwl7Ik1JQzEiLCBOVUxMLCAiTWljIEJpYXMxIn0sCisJeyJNSUMyIiwgTlVMTCwgIk1pYyBCaWFzMiJ9LAorCXsiRE1JQzFMIiwgTlVMTCwgIk1pYyBCaWFzMSJ9LAorCXsiRE1JQzFMIiwgTlVMTCwgIkRNaWMxIExlZnQifSwKKwl7IkRNSUMxUiIsIE5VTEwsICJNaWMgQmlhczEifSwKKwl7IkRNSUMxUiIsIE5VTEwsICJETWljMSBSaWdodCJ9LAorCXsiRE1JQzJMIiwgTlVMTCwgIk1pYyBCaWFzMiJ9LAorCXsiRE1JQzJMIiwgTlVMTCwgIkRNaWMyIExlZnQifSwKKwl7IkRNSUMyUiIsIE5VTEwsICJNaWMgQmlhczIifSwKKwl7IkRNSUMyUiIsIE5VTEwsICJETWljMiBSaWdodCJ9LAorCisJeyJNaWMxIFBHQSIsIE5VTEwsICJNSUMxIn0sCisJeyJNaWMyIFBHQSIsIE5VTEwsICJNSUMyIn0sCisKKwl7Ik1peGluMSBQR0EiLCBOVUxMLCAiTWl4aW4xIFN1cHBseSJ9LAorCXsiTWl4aW4yIFBHQSIsIE5VTEwsICJNaXhpbjIgU3VwcGx5In0sCisKKwl7Ik1peGluMSBQR0EiLCBOVUxMLCAiTWljMSBQR0EifSwKKwl7Ik1peGluMiBQR0EiLCBOVUxMLCAiTWljMiBQR0EifSwKKworCXsiTWljMSBNdXgiLCAiQW5hbG9nIiwgIk1peGluMSBQR0EifSwKKwl7Ik1pYzEgTXV4IiwgIkRpZ2l0YWwiLCAiRE1JQzFMIn0sCisJeyJNaWMxIE11eCIsICJEaWdpdGFsIiwgIkRNSUMxUiJ9LAorCXsiTWljMiBNdXgiLCAiQW5hbG9nIiwgIk1peGluMiBQR0EifSwKKwl7Ik1pYzIgTXV4IiwgIkRpZ2l0YWwiLCAiRE1JQzJMIn0sCisJeyJNaWMyIE11eCIsICJEaWdpdGFsIiwgIkRNSUMyUiJ9LAorCisJeyJJbiBGaWx0ZXIxTCIsIE5VTEwsICJNaWMxIE11eCJ9LAorCXsiSW4gRmlsdGVyMVIiLCBOVUxMLCAiTWljMSBNdXgifSwKKwl7IkluIEZpbHRlcjJMIiwgTlVMTCwgIk1pYzIgTXV4In0sCisJeyJJbiBGaWx0ZXIyUiIsIE5VTEwsICJNaWMyIE11eCJ9LAorCisJeyJUb25lIEdlbmVyYXRvciIsIE5VTEwsICJUT05FIn0sCisKKwl7IlNpZGV0b25lIE11eCIsICJJbiBGaWx0ZXIxTCIsICJJbiBGaWx0ZXIxTCJ9LAorCXsiU2lkZXRvbmUgTXV4IiwgIkluIEZpbHRlcjFSIiwgIkluIEZpbHRlcjFSIn0sCisJeyJTaWRldG9uZSBNdXgiLCAiSW4gRmlsdGVyMkwiLCAiSW4gRmlsdGVyMkwifSwKKwl7IlNpZGV0b25lIE11eCIsICJJbiBGaWx0ZXIyUiIsICJJbiBGaWx0ZXIyUiJ9LAorCXsiU2lkZXRvbmUgRmlsdGVyIiwgTlVMTCwgIlNpZGV0b25lIE11eCJ9LAorCisJREE3MjE4X0RNSVhfUk9VVEVTKCJNaXhlciBEQUkxTCIpLAorCURBNzIxOF9ETUlYX1JPVVRFUygiTWl4ZXIgREFJMVIiKSwKKwlEQTcyMThfRE1JWF9ST1VURVMoIk1peGVyIERBSTJMIiksCisJREE3MjE4X0RNSVhfUk9VVEVTKCJNaXhlciBEQUkyUiIpLAorCisJeyJEQUlPVVQiLCBOVUxMLCAiTWl4ZXIgREFJMUwifSwKKwl7IkRBSU9VVCIsIE5VTEwsICJNaXhlciBEQUkxUiJ9LAorCXsiREFJT1VUIiwgTlVMTCwgIk1peGVyIERBSTJMIn0sCisJeyJEQUlPVVQiLCBOVUxMLCAiTWl4ZXIgREFJMlIifSwKKworCXsiREFJT1VUIiwgTlVMTCwgIkRBSSJ9LAorCisJLyogT3V0cHV0IHBhdGhzICovCisJeyJEQUlJTiIsIE5VTEwsICJEQUkifSwKKworCURBNzIxOF9ETUlYX1JPVVRFUygiTWl4ZXIgT3V0IEZpbHRlckwiKSwKKwlEQTcyMThfRE1JWF9ST1VURVMoIk1peGVyIE91dCBGaWx0ZXJSIiksCisKKwl7IkJpUXVhZCBGaWx0ZXIiLCBOVUxMLCAiTWl4ZXIgT3V0IEZpbHRlckwifSwKKwl7IkJpUXVhZCBGaWx0ZXIiLCBOVUxMLCAiTWl4ZXIgT3V0IEZpbHRlclIifSwKKworCXsiT3V0IEZpbHRlckwgQmlRdWFkIE11eCIsICJCeXBhc3MiLCAiTWl4ZXIgT3V0IEZpbHRlckwifSwKKwl7Ik91dCBGaWx0ZXJMIEJpUXVhZCBNdXgiLCAiRW5hYmxlZCIsICJCaVF1YWQgRmlsdGVyIn0sCisJeyJPdXQgRmlsdGVyUiBCaVF1YWQgTXV4IiwgIkJ5cGFzcyIsICJNaXhlciBPdXQgRmlsdGVyUiJ9LAorCXsiT3V0IEZpbHRlclIgQmlRdWFkIE11eCIsICJFbmFibGVkIiwgIkJpUXVhZCBGaWx0ZXIifSwKKworCURBNzIxOF9ETUlYX1NUX1JPVVRFUygiU1QgTWl4ZXIgT3V0IEZpbHRlckwiKSwKKwlEQTcyMThfRE1JWF9TVF9ST1VURVMoIlNUIE1peGVyIE91dCBGaWx0ZXJSIiksCisKKwl7Ik91dCBGaWx0ZXJMIiwgTlVMTCwgIlNUIE1peGVyIE91dCBGaWx0ZXJMIn0sCisJeyJPdXQgRmlsdGVyUiIsIE5VTEwsICJTVCBNaXhlciBPdXQgRmlsdGVyUiJ9LAorCisJeyJNaXhvdXQgTGVmdCBQR0EiLCBOVUxMLCAiT3V0IEZpbHRlckwifSwKKwl7Ik1peG91dCBSaWdodCBQR0EiLCBOVUxMLCAiT3V0IEZpbHRlclIifSwKKworCXsiSGVhZHBob25lIExlZnQgUEdBIiwgTlVMTCwgIk1peG91dCBMZWZ0IFBHQSJ9LAorCXsiSGVhZHBob25lIFJpZ2h0IFBHQSIsIE5VTEwsICJNaXhvdXQgUmlnaHQgUEdBIn0sCisKKwl7IkhQTCIsIE5VTEwsICJIZWFkcGhvbmUgTGVmdCBQR0EifSwKKwl7IkhQUiIsIE5VTEwsICJIZWFkcGhvbmUgUmlnaHQgUEdBIn0sCisKKwl7IkhQTCIsIE5VTEwsICJDaGFyZ2UgUHVtcCJ9LAorCXsiSFBSIiwgTlVMTCwgIkNoYXJnZSBQdW1wIn0sCit9OworCisKKy8qCisgKiBEQUkgb3BlcmF0aW9ucworICovCisKK3N0YXRpYyBpbnQgZGE3MjE4X3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJCSBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCBkYTcyMThfcHJpdiAqZGE3MjE4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHJldDsKKworCWlmIChkYTcyMTgtPm1jbGtfcmF0ZSA9PSBmcmVxKQorCQlyZXR1cm4gMDsKKworCWlmICgoKGZyZXEgPCAyMDAwMDAwKSAmJiAoZnJlcSAhPSAzMjc2OCkpIHx8IChmcmVxID4gNTQwMDAwMDApKSB7CisJCWRldl9lcnIoY29kZWNfZGFpLT5kZXYsICJVbnN1cHBvcnRlZCBNQ0xLIHZhbHVlICVkXG4iLAorCQkJZnJlcSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBEQTcyMThfQ0xLU1JDX01DTEtfU1FSOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfUExMX0NUUkwsCisJCQkJICAgIERBNzIxOF9QTExfTUNMS19TUVJfRU5fTUFTSywKKwkJCQkgICAgREE3MjE4X1BMTF9NQ0xLX1NRUl9FTl9NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSBEQTcyMThfQ0xLU1JDX01DTEs6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9QTExfQ1RSTCwKKwkJCQkgICAgREE3MjE4X1BMTF9NQ0xLX1NRUl9FTl9NQVNLLCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlY19kYWktPmRldiwgIlVua25vd24gY2xvY2sgc291cmNlICVkXG4iLCBjbGtfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGE3MjE4LT5tY2xrKSB7CisJCWZyZXEgPSBjbGtfcm91bmRfcmF0ZShkYTcyMTgtPm1jbGssIGZyZXEpOworCQlyZXQgPSBjbGtfc2V0X3JhdGUoZGE3MjE4LT5tY2xrLCBmcmVxKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycihjb2RlY19kYWktPmRldiwgIkZhaWxlZCB0byBzZXQgY2xvY2sgcmF0ZSAlZFxuIiwKKwkJCQlmcmVxKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlkYTcyMTgtPm1jbGtfcmF0ZSA9IGZyZXE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTcyMThfc2V0X2RhaV9wbGwoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIGludCBwbGxfaWQsCisJCQkgICAgICBpbnQgc291cmNlLCB1bnNpZ25lZCBpbnQgZnJlZiwgdW5zaWduZWQgaW50IGZvdXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxOCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJdTggcGxsX2N0cmwsIGluZGl2X2JpdHMsIGluZGl2OworCXU4IHBsbF9mcmFjX3RvcCwgcGxsX2ZyYWNfYm90LCBwbGxfaW50ZWdlcjsKKwl1MzIgZnJlcV9yZWY7CisJdTY0IGZyYWNfZGl2OworCisJLyogVmVyaWZ5IDMyS0h6LCAyTUh6IC0gNTRNSHogTUNMSyBwcm92aWRlZCwgYW5kIHNldCBpbnB1dCBkaXZpZGVyICovCisJaWYgKGRhNzIxOC0+bWNsa19yYXRlID09IDMyNzY4KSB7CisJCWluZGl2X2JpdHMgPSBEQTcyMThfUExMX0lORElWXzJfNV9NSFo7CisJCWluZGl2ID0gREE3MjE4X1BMTF9JTkRJVl8yXzEwX01IWl9WQUw7CisJfSBlbHNlIGlmIChkYTcyMTgtPm1jbGtfcmF0ZSA8IDIwMDAwMDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiUExMIGlucHV0IGNsb2NrICVkIGJlbG93IHZhbGlkIHJhbmdlXG4iLAorCQkJZGE3MjE4LT5tY2xrX3JhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGRhNzIxOC0+bWNsa19yYXRlIDw9IDUwMDAwMDApIHsKKwkJaW5kaXZfYml0cyA9IERBNzIxOF9QTExfSU5ESVZfMl81X01IWjsKKwkJaW5kaXYgPSBEQTcyMThfUExMX0lORElWXzJfMTBfTUhaX1ZBTDsKKwl9IGVsc2UgaWYgKGRhNzIxOC0+bWNsa19yYXRlIDw9IDEwMDAwMDAwKSB7CisJCWluZGl2X2JpdHMgPSBEQTcyMThfUExMX0lORElWXzVfMTBfTUhaOworCQlpbmRpdiA9IERBNzIxOF9QTExfSU5ESVZfMl8xMF9NSFpfVkFMOworCX0gZWxzZSBpZiAoZGE3MjE4LT5tY2xrX3JhdGUgPD0gMjAwMDAwMDApIHsKKwkJaW5kaXZfYml0cyA9IERBNzIxOF9QTExfSU5ESVZfMTBfMjBfTUhaOworCQlpbmRpdiA9IERBNzIxOF9QTExfSU5ESVZfMTBfMjBfTUhaX1ZBTDsKKwl9IGVsc2UgaWYgKGRhNzIxOC0+bWNsa19yYXRlIDw9IDQwMDAwMDAwKSB7CisJCWluZGl2X2JpdHMgPSBEQTcyMThfUExMX0lORElWXzIwXzQwX01IWjsKKwkJaW5kaXYgPSBEQTcyMThfUExMX0lORElWXzIwXzQwX01IWl9WQUw7CisJfSBlbHNlIGlmIChkYTcyMTgtPm1jbGtfcmF0ZSA8PSA1NDAwMDAwMCkgeworCQlpbmRpdl9iaXRzID0gREE3MjE4X1BMTF9JTkRJVl80MF81NF9NSFo7CisJCWluZGl2ID0gREE3MjE4X1BMTF9JTkRJVl80MF81NF9NSFpfVkFMOworCX0gZWxzZSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlBMTCBpbnB1dCBjbG9jayAlZCBhYm92ZSB2YWxpZCByYW5nZVxuIiwKKwkJCWRhNzIxOC0+bWNsa19yYXRlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZyZXFfcmVmID0gKGRhNzIxOC0+bWNsa19yYXRlIC8gaW5kaXYpOworCXBsbF9jdHJsID0gaW5kaXZfYml0czsKKworCS8qIENvbmZpZ3VyZSBQTEwgKi8KKwlzd2l0Y2ggKHNvdXJjZSkgeworCWNhc2UgREE3MjE4X1NZU0NMS19NQ0xLOgorCQlwbGxfY3RybCB8PSBEQTcyMThfUExMX01PREVfQllQQVNTOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfUExMX0NUUkwsCisJCQkJICAgIERBNzIxOF9QTExfSU5ESVZfTUFTSyB8CisJCQkJICAgIERBNzIxOF9QTExfTU9ERV9NQVNLLCBwbGxfY3RybCk7CisJCXJldHVybiAwOworCWNhc2UgREE3MjE4X1NZU0NMS19QTEw6CisJCXBsbF9jdHJsIHw9IERBNzIxOF9QTExfTU9ERV9OT1JNQUw7CisJCWJyZWFrOworCWNhc2UgREE3MjE4X1NZU0NMS19QTExfU1JNOgorCQlwbGxfY3RybCB8PSBEQTcyMThfUExMX01PREVfU1JNOworCQlicmVhazsKKwljYXNlIERBNzIxOF9TWVNDTEtfUExMXzMyS0haOgorCQlwbGxfY3RybCB8PSBEQTcyMThfUExMX01PREVfMzJLSFo7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgUExMIGNvbmZpZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENhbGN1bGF0ZSBkaXZpZGVycyBmb3IgUExMICovCisJcGxsX2ludGVnZXIgPSBmb3V0IC8gZnJlcV9yZWY7CisJZnJhY19kaXYgPSAodTY0KShmb3V0ICUgZnJlcV9yZWYpICogODE5MlVMTDsKKwlkb19kaXYoZnJhY19kaXYsIGZyZXFfcmVmKTsKKwlwbGxfZnJhY190b3AgPSAoZnJhY19kaXYgPj4gREE3MjE4X0JZVEVfU0hJRlQpICYgREE3MjE4X0JZVEVfTUFTSzsKKwlwbGxfZnJhY19ib3QgPSAoZnJhY19kaXYpICYgREE3MjE4X0JZVEVfTUFTSzsKKworCS8qIFdyaXRlIFBMTCBjb25maWcgJiBkaXZpZGVycyAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9QTExfRlJBQ19UT1AsIHBsbF9mcmFjX3RvcCk7CisJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X1BMTF9GUkFDX0JPVCwgcGxsX2ZyYWNfYm90KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfUExMX0lOVEVHRVIsIHBsbF9pbnRlZ2VyKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfUExMX0NUUkwsCisJCQkgICAgREE3MjE4X1BMTF9NT0RFX01BU0sgfCBEQTcyMThfUExMX0lORElWX01BU0ssCisJCQkgICAgcGxsX2N0cmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGE3MjE4X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IGRhNzIxOF9wcml2ICpkYTcyMTggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1OCBkYWlfY2xrX21vZGUgPSAwLCBkYWlfY3RybCA9IDA7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlkYTcyMTgtPm1hc3RlciA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJZGE3MjE4LT5tYXN0ZXIgPSBmYWxzZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCQlkYWlfY2xrX21vZGUgfD0gREE3MjE4X0RBSV9XQ0xLX1BPTF9JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWRhaV9jbGtfbW9kZSB8PSBEQTcyMThfREFJX0NMS19QT0xfSU5WOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCQlkYWlfY2xrX21vZGUgfD0gREE3MjE4X0RBSV9XQ0xLX1BPTF9JTlYgfAorCQkJCQlEQTcyMThfREFJX0NMS19QT0xfSU5WOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlkYWlfY2xrX21vZGUgfD0gREE3MjE4X0RBSV9DTEtfUE9MX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkJZGFpX2Nsa19tb2RlIHw9IERBNzIxOF9EQUlfV0NMS19QT0xfSU5WIHwKKwkJCQkJREE3MjE4X0RBSV9DTEtfUE9MX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCQlkYWlfY2xrX21vZGUgfD0gREE3MjE4X0RBSV9XQ0xLX1BPTF9JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJZGFpX2N0cmwgfD0gREE3MjE4X0RBSV9GT1JNQVRfSTJTOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJZGFpX2N0cmwgfD0gREE3MjE4X0RBSV9GT1JNQVRfTEVGVF9KOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWRhaV9jdHJsIHw9IERBNzIxOF9EQUlfRk9STUFUX1JJR0hUX0o7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWRhaV9jdHJsIHw9IERBNzIxOF9EQUlfRk9STUFUX0RTUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQnkgZGVmYXVsdCA2NCBCQ0xLcyBwZXIgV0NMSyBpcyBzdXBwb3J0ZWQgKi8KKwlkYWlfY2xrX21vZGUgfD0gREE3MjE4X0RBSV9CQ0xLU19QRVJfV0NMS182NDsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9EQUlfQ0xLX01PREUsIGRhaV9jbGtfbW9kZSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X0RBSV9DVFJMLCBEQTcyMThfREFJX0ZPUk1BVF9NQVNLLAorCQkJICAgIGRhaV9jdHJsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhNzIxOF9zZXRfZGFpX3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkJCSAgIHVuc2lnbmVkIGludCB0eF9tYXNrLCB1bnNpZ25lZCBpbnQgcnhfbWFzaywKKwkJCQkgICBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTggZGFpX2JjbGtzX3Blcl93Y2xrOworCXUzMiBmcmFtZV9zaXplOworCisJLyogTm8gY2hhbm5lbHMgZW5hYmxlZCBzbyBkaXNhYmxlIFRETSwgcmV2ZXJ0IHRvIDY0LWJpdCBmcmFtZXMgKi8KKwlpZiAoIXR4X21hc2spIHsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X0RBSV9URE1fQ1RSTCwKKwkJCQkgICAgREE3MjE4X0RBSV9URE1fQ0hfRU5fTUFTSyB8CisJCQkJICAgIERBNzIxOF9EQUlfVERNX01PREVfRU5fTUFTSywgMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9EQUlfQ0xLX01PREUsCisJCQkJICAgIERBNzIxOF9EQUlfQkNMS1NfUEVSX1dDTEtfTUFTSywKKwkJCQkgICAgREE3MjE4X0RBSV9CQ0xLU19QRVJfV0NMS182NCk7CisJCXJldHVybiAwOworCX0KKworCS8qIENoZWNrIHdlIGhhdmUgdmFsaWQgc2xvdHMgKi8KKwlpZiAoZmxzKHR4X21hc2spID4gREE3MjE4X0RBSV9URE1fTUFYX1NMT1RTKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgbnVtYmVyIG9mIHNsb3RzLCBtYXggPSAlZFxuIiwKKwkJCURBNzIxOF9EQUlfVERNX01BWF9TTE9UUyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIHdlIGhhdmUgYSB2YWxpZCBvZmZzZXQgZ2l2ZW4gKGZpcnN0IDIgYnl0ZXMgb2YgcnhfbWFzaykgKi8KKwlpZiAocnhfbWFzayA+PiBEQTcyMThfMkJZVEVfU0hJRlQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBzbG90IG9mZnNldCwgbWF4ID0gJWRcbiIsCisJCQlEQTcyMThfMkJZVEVfTUFTSyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENhbGN1bGF0ZSAmIHZhbGlkYXRlIGZyYW1lIHNpemUgYmFzZWQgb24gc2xvdCBpbmZvIHByb3ZpZGVkLiAqLworCWZyYW1lX3NpemUgPSBzbG90cyAqIHNsb3Rfd2lkdGg7CisJc3dpdGNoIChmcmFtZV9zaXplKSB7CisJY2FzZSAzMjoKKwkJZGFpX2JjbGtzX3Blcl93Y2xrID0gREE3MjE4X0RBSV9CQ0xLU19QRVJfV0NMS18zMjsKKwkJYnJlYWs7CisJY2FzZSA2NDoKKwkJZGFpX2JjbGtzX3Blcl93Y2xrID0gREE3MjE4X0RBSV9CQ0xLU19QRVJfV0NMS182NDsKKwkJYnJlYWs7CisJY2FzZSAxMjg6CisJCWRhaV9iY2xrc19wZXJfd2NsayA9IERBNzIxOF9EQUlfQkNMS1NfUEVSX1dDTEtfMTI4OworCQlicmVhazsKKwljYXNlIDI1NjoKKwkJZGFpX2JjbGtzX3Blcl93Y2xrID0gREE3MjE4X0RBSV9CQ0xLU19QRVJfV0NMS18yNTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgZnJhbWUgc2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9EQUlfQ0xLX01PREUsCisJCQkgICAgREE3MjE4X0RBSV9CQ0xLU19QRVJfV0NMS19NQVNLLAorCQkJICAgIGRhaV9iY2xrc19wZXJfd2Nsayk7CisJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X0RBSV9PRkZTRVRfTE9XRVIsCisJCSAgICAgIChyeF9tYXNrICYgREE3MjE4X0JZVEVfTUFTSykpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9EQUlfT0ZGU0VUX1VQUEVSLAorCQkgICAgICAoKHJ4X21hc2sgPj4gREE3MjE4X0JZVEVfU0hJRlQpICYgREE3MjE4X0JZVEVfTUFTSykpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9EQUlfVERNX0NUUkwsCisJCQkgICAgREE3MjE4X0RBSV9URE1fQ0hfRU5fTUFTSyB8CisJCQkgICAgREE3MjE4X0RBSV9URE1fTU9ERV9FTl9NQVNLLAorCQkJICAgICh0eF9tYXNrIDw8IERBNzIxOF9EQUlfVERNX0NIX0VOX1NISUZUKSB8CisJCQkgICAgREE3MjE4X0RBSV9URE1fTU9ERV9FTl9NQVNLKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhNzIxOF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwl1OCBkYWlfY3RybCA9IDAsIGZzOworCXVuc2lnbmVkIGludCBjaGFubmVsczsKKworCXN3aXRjaCAocGFyYW1zX3dpZHRoKHBhcmFtcykpIHsKKwljYXNlIDE2OgorCQlkYWlfY3RybCB8PSBEQTcyMThfREFJX1dPUkRfTEVOR1RIX1MxNl9MRTsKKwkJYnJlYWs7CisJY2FzZSAyMDoKKwkJZGFpX2N0cmwgfD0gREE3MjE4X0RBSV9XT1JEX0xFTkdUSF9TMjBfTEU7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCWRhaV9jdHJsIHw9IERBNzIxOF9EQUlfV09SRF9MRU5HVEhfUzI0X0xFOworCQlicmVhazsKKwljYXNlIDMyOgorCQlkYWlfY3RybCB8PSBEQTcyMThfREFJX1dPUkRfTEVOR1RIX1MzMl9MRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKKwlpZiAoKGNoYW5uZWxzIDwgMSkgfHwgKGNoYW5uZWxzID4gREE3MjE4X0RBSV9DSF9OVU1fTUFYKSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkiSW52YWxpZCBudW1iZXIgb2YgY2hhbm5lbHMsIG9ubHkgMSB0byAlZCBzdXBwb3J0ZWRcbiIsCisJCQlEQTcyMThfREFJX0NIX05VTV9NQVgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGFpX2N0cmwgfD0gY2hhbm5lbHMgPDwgREE3MjE4X0RBSV9DSF9OVU1fU0hJRlQ7CisKKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwljYXNlIDgwMDA6CisJCWZzID0gREE3MjE4X1NSXzgwMDA7CisJCWJyZWFrOworCWNhc2UgMTEwMjU6CisJCWZzID0gREE3MjE4X1NSXzExMDI1OworCQlicmVhazsKKwljYXNlIDEyMDAwOgorCQlmcyA9IERBNzIxOF9TUl8xMjAwMDsKKwkJYnJlYWs7CisJY2FzZSAxNjAwMDoKKwkJZnMgPSBEQTcyMThfU1JfMTYwMDA7CisJCWJyZWFrOworCWNhc2UgMjIwNTA6CisJCWZzID0gREE3MjE4X1NSXzIyMDUwOworCQlicmVhazsKKwljYXNlIDI0MDAwOgorCQlmcyA9IERBNzIxOF9TUl8yNDAwMDsKKwkJYnJlYWs7CisJY2FzZSAzMjAwMDoKKwkJZnMgPSBEQTcyMThfU1JfMzIwMDA7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCWZzID0gREE3MjE4X1NSXzQ0MTAwOworCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQlmcyA9IERBNzIxOF9TUl80ODAwMDsKKwkJYnJlYWs7CisJY2FzZSA4ODIwMDoKKwkJZnMgPSBEQTcyMThfU1JfODgyMDA7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCWZzID0gREE3MjE4X1NSXzk2MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfREFJX0NUUkwsCisJCQkgICAgREE3MjE4X0RBSV9XT1JEX0xFTkdUSF9NQVNLIHwgREE3MjE4X0RBSV9DSF9OVU1fTUFTSywKKwkJCSAgICBkYWlfY3RybCk7CisJLyogU1JzIHRpZWQgZm9yIEFEQ3MgYW5kIERBQ3MuICovCisJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X1NSLAorCQkgICAgICAoZnMgPDwgREE3MjE4X1NSX0RBQ19TSElGVCkgfCAoZnMgPDwgREE3MjE4X1NSX0FEQ19TSElGVCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGRhNzIxOF9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBkYTcyMThfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrCT0gZGE3MjE4X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfcGxsCT0gZGE3MjE4X3NldF9kYWlfcGxsLAorCS5zZXRfZm10CT0gZGE3MjE4X3NldF9kYWlfZm10LAorCS5zZXRfdGRtX3Nsb3QJPSBkYTcyMThfc2V0X2RhaV90ZG1fc2xvdCwKK307CisKKyNkZWZpbmUgREE3MjE4X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBkYTcyMThfZGFpID0geworCS5uYW1lID0gImRhNzIxOC1oaWZpIiwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gNCwJLyogT25seSAyIGNoYW5uZWxzIG9mIGRhdGEgKi8KKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJLmZvcm1hdHMgPSBEQTcyMThfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gNCwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJLmZvcm1hdHMgPSBEQTcyMThfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmZGE3MjE4X2RhaV9vcHMsCisJLnN5bW1ldHJpY19yYXRlcyA9IDEsCisJLnN5bW1ldHJpY19jaGFubmVscyA9IDEsCisJLnN5bW1ldHJpY19zYW1wbGViaXRzID0gMSwKK307CisKKworLyoKKyAqIEhQIERldGVjdAorICovCisKK2ludCBkYTcyMThfaHBsZGV0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9zb2NfamFjayAqamFjaykKK3sKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxOCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJaWYgKGRhNzIxOC0+ZGV2X2lkID09IERBNzIxN19ERVZfSUQpCisJCXJldHVybiAtRUlOVkFMOworCisJZGE3MjE4LT5qYWNrID0gamFjazsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfSFBMREVUX0pBQ0ssCisJCQkgICAgREE3MjE4X0hQTERFVF9KQUNLX0VOX01BU0ssCisJCQkgICAgamFjayA/IERBNzIxOF9IUExERVRfSkFDS19FTl9NQVNLIDogMCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhNzIxOF9ocGxkZXQpOworCitzdGF0aWMgdm9pZCBkYTcyMThfbWljbGRldF9pcnEoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWNoYXIgKmVudnBbXSA9IHsKKwkJIkVWRU5UPU1JQ19MRVZFTF9ERVRFQ1QiLAorCQlOVUxMLAorCX07CisKKwlrb2JqZWN0X3VldmVudF9lbnYoJmNvZGVjLT5kZXYtPmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKK30KKworc3RhdGljIHZvaWQgZGE3MjE4X2hwbGRldF9pcnEoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBkYTcyMThfcHJpdiAqZGE3MjE4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTggamFja19zdGF0dXM7CisJaW50IHJlcG9ydDsKKworCWphY2tfc3RhdHVzID0gc25kX3NvY19yZWFkKGNvZGVjLCBEQTcyMThfRVZFTlRfU1RBVFVTKTsKKworCWlmIChqYWNrX3N0YXR1cyAmIERBNzIxOF9IUExERVRfSkFDS19TVFNfTUFTSykKKwkJcmVwb3J0ID0gU05EX0pBQ0tfSEVBRFBIT05FOworCWVsc2UKKwkJcmVwb3J0ID0gMDsKKworCXNuZF9zb2NfamFja19yZXBvcnQoZGE3MjE4LT5qYWNrLCByZXBvcnQsIFNORF9KQUNLX0hFQURQSE9ORSk7Cit9CisKKy8qCisgKiBJUlEKKyAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgZGE3MjE4X2lycV90aHJlYWQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYXRhOworCXU4IHN0YXR1czsKKworCS8qIFJlYWQgSVJRIHN0YXR1cyByZWcgKi8KKwlzdGF0dXMgPSBzbmRfc29jX3JlYWQoY29kZWMsIERBNzIxOF9FVkVOVCk7CisJaWYgKCFzdGF0dXMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIE1pYyBsZXZlbCBkZXRlY3QgKi8KKwlpZiAoc3RhdHVzICYgREE3MjE4X0xWTF9ERVRfRVZFTlRfTUFTSykKKwkJZGE3MjE4X21pY2xkZXRfaXJxKGNvZGVjKTsKKworCS8qIEhQIGRldGVjdCAqLworCWlmIChzdGF0dXMgJiBEQTcyMThfSFBMREVUX0pBQ0tfRVZFTlRfTUFTSykKKwkJZGE3MjE4X2hwbGRldF9pcnEoY29kZWMpOworCisJLyogQ2xlYXIgaW50ZXJydXB0cyAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9FVkVOVCwgc3RhdHVzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIERUCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZGE3MjE4X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJkbGcsZGE3MjE3IiwgLmRhdGEgPSAodm9pZCAqKSBEQTcyMTdfREVWX0lEIH0sCisJeyAuY29tcGF0aWJsZSA9ICJkbGcsZGE3MjE4IiwgLmRhdGEgPSAodm9pZCAqKSBEQTcyMThfREVWX0lEIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZGE3MjE4X29mX21hdGNoKTsKKworc3RhdGljIGlubGluZSBpbnQgZGE3MjE4X29mX2dldF9pZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqaWQgPSBvZl9tYXRjaF9kZXZpY2UoZGE3MjE4X29mX21hdGNoLCBkZXYpOworCisJaWYgKGlkKQorCQlyZXR1cm4gKHVpbnRwdHJfdClpZC0+ZGF0YTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgZW51bSBkYTcyMThfbWljYmlhc192b2x0YWdlCisJZGE3MjE4X29mX21pY2JpYXNfbHZsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTMyIHZhbCkKK3sKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMTIwMDoKKwkJcmV0dXJuIERBNzIxOF9NSUNCSUFTXzFfMlY7CisJY2FzZSAxNjAwOgorCQlyZXR1cm4gREE3MjE4X01JQ0JJQVNfMV82VjsKKwljYXNlIDE4MDA6CisJCXJldHVybiBEQTcyMThfTUlDQklBU18xXzhWOworCWNhc2UgMjAwMDoKKwkJcmV0dXJuIERBNzIxOF9NSUNCSUFTXzJfMFY7CisJY2FzZSAyMjAwOgorCQlyZXR1cm4gREE3MjE4X01JQ0JJQVNfMl8yVjsKKwljYXNlIDI0MDA6CisJCXJldHVybiBEQTcyMThfTUlDQklBU18yXzRWOworCWNhc2UgMjYwMDoKKwkJcmV0dXJuIERBNzIxOF9NSUNCSUFTXzJfNlY7CisJY2FzZSAyODAwOgorCQlyZXR1cm4gREE3MjE4X01JQ0JJQVNfMl84VjsKKwljYXNlIDMwMDA6CisJCXJldHVybiBEQTcyMThfTUlDQklBU18zXzBWOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGNvZGVjLT5kZXYsICJJbnZhbGlkIG1pY2JpYXMgbGV2ZWwiKTsKKwkJcmV0dXJuIERBNzIxOF9NSUNCSUFTXzFfNlY7CisJfQorfQorCitzdGF0aWMgZW51bSBkYTcyMThfbWljX2FtcF9pbl9zZWwKKwlkYTcyMThfb2ZfbWljX2FtcF9pbl9zZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpzdHIpCit7CisJaWYgKCFzdHJjbXAoc3RyLCAiZGlmZiIpKSB7CisJCXJldHVybiBEQTcyMThfTUlDX0FNUF9JTl9TRUxfRElGRjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAic2VfcCIpKSB7CisJCXJldHVybiBEQTcyMThfTUlDX0FNUF9JTl9TRUxfU0VfUDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAic2VfbiIpKSB7CisJCXJldHVybiBEQTcyMThfTUlDX0FNUF9JTl9TRUxfU0VfTjsKKwl9IGVsc2UgeworCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiSW52YWxpZCBtaWMgaW5wdXQgdHlwZSBzZWxlY3Rpb24iKTsKKwkJcmV0dXJuIERBNzIxOF9NSUNfQU1QX0lOX1NFTF9ESUZGOworCX0KK30KKworc3RhdGljIGVudW0gZGE3MjE4X2RtaWNfZGF0YV9zZWwKKwlkYTcyMThfb2ZfZG1pY19kYXRhX3NlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpZiAoIXN0cmNtcChzdHIsICJscmlzZV9yZmFsbCIpKSB7CisJCXJldHVybiBEQTcyMThfRE1JQ19EQVRBX0xSSVNFX1JGQUxMOworCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICJsZmFsbF9ycmlzZSIpKSB7CisJCXJldHVybiBEQTcyMThfRE1JQ19EQVRBX0xGQUxMX1JSSVNFOworCX0gZWxzZSB7CisJCWRldl93YXJuKGNvZGVjLT5kZXYsICJJbnZhbGlkIERNSUMgZGF0YSB0eXBlIHNlbGVjdGlvbiIpOworCQlyZXR1cm4gREE3MjE4X0RNSUNfREFUQV9MUklTRV9SRkFMTDsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGRhNzIxOF9kbWljX3NhbXBsZXBoYXNlCisJZGE3MjE4X29mX2RtaWNfc2FtcGxlcGhhc2Uoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpzdHIpCit7CisJaWYgKCFzdHJjbXAoc3RyLCAib25fY2xrZWRnZSIpKSB7CisJCXJldHVybiBEQTcyMThfRE1JQ19TQU1QTEVfT05fQ0xLRURHRTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiYmV0d2Vlbl9jbGtlZGdlIikpIHsKKwkJcmV0dXJuIERBNzIxOF9ETUlDX1NBTVBMRV9CRVRXRUVOX0NMS0VER0U7CisJfSBlbHNlIHsKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIkludmFsaWQgRE1JQyBzYW1wbGUgcGhhc2UiKTsKKwkJcmV0dXJuIERBNzIxOF9ETUlDX1NBTVBMRV9PTl9DTEtFREdFOworCX0KK30KKworc3RhdGljIGVudW0gZGE3MjE4X2RtaWNfY2xrX3JhdGUKKwlkYTcyMThfb2ZfZG1pY19jbGtyYXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTMyIHZhbCkKK3sKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMTUwMDAwMDoKKwkJcmV0dXJuIERBNzIxOF9ETUlDX0NMS18xXzVNSFo7CisJY2FzZSAzMDAwMDAwOgorCQlyZXR1cm4gREE3MjE4X0RNSUNfQ0xLXzNfME1IWjsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiSW52YWxpZCBETUlDIGNsb2NrIHJhdGUiKTsKKwkJcmV0dXJuIERBNzIxOF9ETUlDX0NMS18zXzBNSFo7CisJfQorfQorCitzdGF0aWMgZW51bSBkYTcyMThfaHBsZGV0X2phY2tfcmF0ZQorCWRhNzIxOF9vZl9qYWNrX3JhdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1MzIgdmFsKQoreworCXN3aXRjaCAodmFsKSB7CisJY2FzZSA1OgorCQlyZXR1cm4gREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfNVVTOworCWNhc2UgMTA6CisJCXJldHVybiBEQTcyMThfSFBMREVUX0pBQ0tfUkFURV8xMFVTOworCWNhc2UgMjA6CisJCXJldHVybiBEQTcyMThfSFBMREVUX0pBQ0tfUkFURV8yMFVTOworCWNhc2UgNDA6CisJCXJldHVybiBEQTcyMThfSFBMREVUX0pBQ0tfUkFURV80MFVTOworCWNhc2UgODA6CisJCXJldHVybiBEQTcyMThfSFBMREVUX0pBQ0tfUkFURV84MFVTOworCWNhc2UgMTYwOgorCQlyZXR1cm4gREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfMTYwVVM7CisJY2FzZSAzMjA6CisJCXJldHVybiBEQTcyMThfSFBMREVUX0pBQ0tfUkFURV8zMjBVUzsKKwljYXNlIDY0MDoKKwkJcmV0dXJuIERBNzIxOF9IUExERVRfSkFDS19SQVRFXzY0MFVTOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGNvZGVjLT5kZXYsICJJbnZhbGlkIGphY2sgZGV0ZWN0IHJhdGUiKTsKKwkJcmV0dXJuIERBNzIxOF9IUExERVRfSkFDS19SQVRFXzQwVVM7CisJfQorfQorCitzdGF0aWMgZW51bSBkYTcyMThfaHBsZGV0X2phY2tfZGVib3VuY2UKKwlkYTcyMThfb2ZfamFja19kZWJvdW5jZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHUzMiB2YWwpCit7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CisJCXJldHVybiBEQTcyMThfSFBMREVUX0pBQ0tfREVCT1VOQ0VfT0ZGOworCWNhc2UgMjoKKwkJcmV0dXJuIERBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV8yOworCWNhc2UgMzoKKwkJcmV0dXJuIERBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV8zOworCWNhc2UgNDoKKwkJcmV0dXJuIERBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV80OworCWRlZmF1bHQ6CisJCWRldl93YXJuKGNvZGVjLT5kZXYsICJJbnZhbGlkIGphY2sgZGVib3VuY2UiKTsKKwkJcmV0dXJuIERBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV8yOworCX0KK30KKworc3RhdGljIGVudW0gZGE3MjE4X2hwbGRldF9qYWNrX3RocgorCWRhNzIxOF9vZl9qYWNrX3RocihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHUzMiB2YWwpCit7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDg0OgorCQlyZXR1cm4gREE3MjE4X0hQTERFVF9KQUNLX1RIUl84NFBDVDsKKwljYXNlIDg4OgorCQlyZXR1cm4gREE3MjE4X0hQTERFVF9KQUNLX1RIUl84OFBDVDsKKwljYXNlIDkyOgorCQlyZXR1cm4gREE3MjE4X0hQTERFVF9KQUNLX1RIUl85MlBDVDsKKwljYXNlIDk2OgorCQlyZXR1cm4gREE3MjE4X0hQTERFVF9KQUNLX1RIUl85NlBDVDsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiSW52YWxpZCBqYWNrIHRocmVzaG9sZCBsZXZlbCIpOworCQlyZXR1cm4gREE3MjE4X0hQTERFVF9KQUNLX1RIUl84NFBDVDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGE3MjE4X3BkYXRhICpkYTcyMThfb2ZfdG9fcGRhdGEoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBkYTcyMThfcHJpdiAqZGE3MjE4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGNvZGVjLT5kZXYtPm9mX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpocGxkZXRfbnA7CisJc3RydWN0IGRhNzIxOF9wZGF0YSAqcGRhdGE7CisJc3RydWN0IGRhNzIxOF9ocGxkZXRfcGRhdGEgKmhwbGRldF9wZGF0YTsKKwljb25zdCBjaGFyICpvZl9zdHI7CisJdTMyIG9mX3ZhbDMyOworCisJcGRhdGEgPSBkZXZtX2t6YWxsb2MoY29kZWMtPmRldiwgc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpIHsKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBkYXRhXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiZGxnLG1pY2JpYXMxLWx2bC1taWxsaXZvbHQiLCAmb2ZfdmFsMzIpID49IDApCisJCXBkYXRhLT5taWNiaWFzMV9sdmwgPSBkYTcyMThfb2ZfbWljYmlhc19sdmwoY29kZWMsIG9mX3ZhbDMyKTsKKwllbHNlCisJCXBkYXRhLT5taWNiaWFzMV9sdmwgPSBEQTcyMThfTUlDQklBU18xXzZWOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiZGxnLG1pY2JpYXMyLWx2bC1taWxsaXZvbHQiLCAmb2ZfdmFsMzIpID49IDApCisJCXBkYXRhLT5taWNiaWFzMl9sdmwgPSBkYTcyMThfb2ZfbWljYmlhc19sdmwoY29kZWMsIG9mX3ZhbDMyKTsKKwllbHNlCisJCXBkYXRhLT5taWNiaWFzMl9sdmwgPSBEQTcyMThfTUlDQklBU18xXzZWOworCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImRsZyxtaWMxLWFtcC1pbi1zZWwiLCAmb2Zfc3RyKSkKKwkJcGRhdGEtPm1pYzFfYW1wX2luX3NlbCA9CisJCQlkYTcyMThfb2ZfbWljX2FtcF9pbl9zZWwoY29kZWMsIG9mX3N0cik7CisJZWxzZQorCQlwZGF0YS0+bWljMV9hbXBfaW5fc2VsID0gREE3MjE4X01JQ19BTVBfSU5fU0VMX0RJRkY7CisKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiZGxnLG1pYzItYW1wLWluLXNlbCIsICZvZl9zdHIpKQorCQlwZGF0YS0+bWljMl9hbXBfaW5fc2VsID0KKwkJCWRhNzIxOF9vZl9taWNfYW1wX2luX3NlbChjb2RlYywgb2Zfc3RyKTsKKwllbHNlCisJCXBkYXRhLT5taWMyX2FtcF9pbl9zZWwgPSBEQTcyMThfTUlDX0FNUF9JTl9TRUxfRElGRjsKKworCWlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJkbGcsZG1pYzEtZGF0YS1zZWwiLCAmb2Zfc3RyKSkKKwkJcGRhdGEtPmRtaWMxX2RhdGFfc2VsID0JZGE3MjE4X29mX2RtaWNfZGF0YV9zZWwoY29kZWMsIG9mX3N0cik7CisJZWxzZQorCQlwZGF0YS0+ZG1pYzFfZGF0YV9zZWwgPQlEQTcyMThfRE1JQ19EQVRBX0xSSVNFX1JGQUxMOworCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImRsZyxkbWljMS1zYW1wbGVwaGFzZSIsICZvZl9zdHIpKQorCQlwZGF0YS0+ZG1pYzFfc2FtcGxlcGhhc2UgPQorCQkJZGE3MjE4X29mX2RtaWNfc2FtcGxlcGhhc2UoY29kZWMsIG9mX3N0cik7CisJZWxzZQorCQlwZGF0YS0+ZG1pYzFfc2FtcGxlcGhhc2UgPSBEQTcyMThfRE1JQ19TQU1QTEVfT05fQ0xLRURHRTsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImRsZyxkbWljMS1jbGtyYXRlLWh6IiwgJm9mX3ZhbDMyKSA+PSAwKQorCQlwZGF0YS0+ZG1pYzFfY2xrX3JhdGUgPSBkYTcyMThfb2ZfZG1pY19jbGtyYXRlKGNvZGVjLCBvZl92YWwzMik7CisJZWxzZQorCQlwZGF0YS0+ZG1pYzFfY2xrX3JhdGUgPSBEQTcyMThfRE1JQ19DTEtfM18wTUhaOworCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImRsZyxkbWljMi1kYXRhLXNlbCIsICZvZl9zdHIpKQorCQlwZGF0YS0+ZG1pYzJfZGF0YV9zZWwgPSBkYTcyMThfb2ZfZG1pY19kYXRhX3NlbChjb2RlYywgb2Zfc3RyKTsKKwllbHNlCisJCXBkYXRhLT5kbWljMl9kYXRhX3NlbCA9CURBNzIxOF9ETUlDX0RBVEFfTFJJU0VfUkZBTEw7CisKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiZGxnLGRtaWMyLXNhbXBsZXBoYXNlIiwgJm9mX3N0cikpCisJCXBkYXRhLT5kbWljMl9zYW1wbGVwaGFzZSA9CisJCQlkYTcyMThfb2ZfZG1pY19zYW1wbGVwaGFzZShjb2RlYywgb2Zfc3RyKTsKKwllbHNlCisJCXBkYXRhLT5kbWljMl9zYW1wbGVwaGFzZSA9IERBNzIxOF9ETUlDX1NBTVBMRV9PTl9DTEtFREdFOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiZGxnLGRtaWMyLWNsa3JhdGUtaHoiLCAmb2ZfdmFsMzIpID49IDApCisJCXBkYXRhLT5kbWljMl9jbGtfcmF0ZSA9IGRhNzIxOF9vZl9kbWljX2Nsa3JhdGUoY29kZWMsIG9mX3ZhbDMyKTsKKwllbHNlCisJCXBkYXRhLT5kbWljMl9jbGtfcmF0ZSA9IERBNzIxOF9ETUlDX0NMS18zXzBNSFo7CisKKwlpZiAoZGE3MjE4LT5kZXZfaWQgPT0gREE3MjE3X0RFVl9JRCkgeworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiZGxnLGhwLWRpZmYtc2luZ2xlLXN1cHBseSIpKQorCQkJcGRhdGEtPmhwX2RpZmZfc2luZ2xlX3N1cHBseSA9IHRydWU7CisJfQorCisJaWYgKGRhNzIxOC0+ZGV2X2lkID09IERBNzIxOF9ERVZfSUQpIHsKKwkJaHBsZGV0X25wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUobnAsICJkYTcyMThfaHBsZGV0Iik7CisJCWlmICghaHBsZGV0X25wKQorCQkJcmV0dXJuIHBkYXRhOworCisJCWhwbGRldF9wZGF0YSA9IGRldm1fa3phbGxvYyhjb2RlYy0+ZGV2LCBzaXplb2YoKmhwbGRldF9wZGF0YSksCisJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFocGxkZXRfcGRhdGEpIHsKKwkJCWRldl93YXJuKGNvZGVjLT5kZXYsCisJCQkJICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBocGxkZXQgcGRhdGFcbiIpOworCQkJb2Zfbm9kZV9wdXQoaHBsZGV0X25wKTsKKwkJCXJldHVybiBwZGF0YTsKKwkJfQorCQlwZGF0YS0+aHBsZGV0X3BkYXRhID0gaHBsZGV0X3BkYXRhOworCisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihocGxkZXRfbnAsICJkbGcsamFjay1yYXRlLXVzIiwKKwkJCQkJICZvZl92YWwzMikgPj0gMCkKKwkJCWhwbGRldF9wZGF0YS0+amFja19yYXRlID0KKwkJCQlkYTcyMThfb2ZfamFja19yYXRlKGNvZGVjLCBvZl92YWwzMik7CisJCWVsc2UKKwkJCWhwbGRldF9wZGF0YS0+amFja19yYXRlID0gREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfNDBVUzsKKworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoaHBsZGV0X25wLCAiZGxnLGphY2stZGVib3VuY2UiLAorCQkJCQkgJm9mX3ZhbDMyKSA+PSAwKQorCQkJaHBsZGV0X3BkYXRhLT5qYWNrX2RlYm91bmNlID0KKwkJCQlkYTcyMThfb2ZfamFja19kZWJvdW5jZShjb2RlYywgb2ZfdmFsMzIpOworCQllbHNlCisJCQlocGxkZXRfcGRhdGEtPmphY2tfZGVib3VuY2UgPQorCQkJCURBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV8yOworCisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihocGxkZXRfbnAsICJkbGcsamFjay10aHJlc2hvbGQtcGN0IiwKKwkJCQkJICZvZl92YWwzMikgPj0gMCkKKwkJCWhwbGRldF9wZGF0YS0+amFja190aHIgPQorCQkJCWRhNzIxOF9vZl9qYWNrX3Rocihjb2RlYywgb2ZfdmFsMzIpOworCQllbHNlCisJCQlocGxkZXRfcGRhdGEtPmphY2tfdGhyID0gREE3MjE4X0hQTERFVF9KQUNLX1RIUl84NFBDVDsKKworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGhwbGRldF9ucCwgImRsZyxjb21wLWludiIpKQorCQkJaHBsZGV0X3BkYXRhLT5jb21wX2ludiA9IHRydWU7CisKKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChocGxkZXRfbnAsICJkbGcsaHlzdCIpKQorCQkJaHBsZGV0X3BkYXRhLT5oeXN0ID0gdHJ1ZTsKKworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGhwbGRldF9ucCwgImRsZyxkaXNjaGFyZ2UiKSkKKwkJCWhwbGRldF9wZGF0YS0+ZGlzY2hhcmdlID0gdHJ1ZTsKKworCQlvZl9ub2RlX3B1dChocGxkZXRfbnApOworCX0KKworCXJldHVybiBwZGF0YTsKK30KKworCisvKgorICogQ29kZWMgZHJpdmVyIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgZGE3MjE4X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IGRhNzIxOF9wcml2ICpkYTcyMTggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChzbmRfc29jX2NvZGVjX2dldF9iaWFzX2xldmVsKGNvZGVjKSA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQkvKiBNQ0xLICovCisJCQlpZiAoZGE3MjE4LT5tY2xrKSB7CisJCQkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRhNzIxOC0+bWNsayk7CisJCQkJaWYgKHJldCkgeworCQkJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJCQkiRmFpbGVkIHRvIGVuYWJsZSBtY2xrXG4iKTsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9CisJCQl9CisKKwkJCS8qIE1hc3RlciBiaWFzICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfUkVGRVJFTkNFUywKKwkJCQkJICAgIERBNzIxOF9CSUFTX0VOX01BU0ssCisJCQkJCSAgICBEQTcyMThfQklBU19FTl9NQVNLKTsKKworCQkJLyogSW50ZXJuYWwgTERPICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfTERPX0NUUkwsCisJCQkJCSAgICBEQTcyMThfTERPX0VOX01BU0ssCisJCQkJCSAgICBEQTcyMThfTERPX0VOX01BU0spOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogT25seSBkaXNhYmxlIGlmIGphY2sgZGV0ZWN0aW9uIGRpc2FibGVkICovCisJCWlmICghZGE3MjE4LT5qYWNrKSB7CisJCQkvKiBJbnRlcm5hbCBMRE8gKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9MRE9fQ1RSTCwKKwkJCQkJICAgIERBNzIxOF9MRE9fRU5fTUFTSywgMCk7CisKKwkJCS8qIE1hc3RlciBiaWFzICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfUkVGRVJFTkNFUywKKwkJCQkJICAgIERBNzIxOF9CSUFTX0VOX01BU0ssIDApOworCQl9CisKKwkJLyogTUNMSyAqLworCQlpZiAoZGE3MjE4LT5tY2xrKQorCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRhNzIxOC0+bWNsayk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZGE3MjE4X3N1cHBseV9uYW1lc1tEQTcyMThfTlVNX1NVUFBMSUVTXSA9IHsKKwlbREE3MjE4X1NVUFBMWV9WRERdID0gIlZERCIsCisJW0RBNzIxOF9TVVBQTFlfVkRETUlDXSA9ICJWRERNSUMiLAorCVtEQTcyMThfU1VQUExZX1ZERElPXSA9ICJWRERJTyIsCit9OworCitzdGF0aWMgaW50IGRhNzIxOF9oYW5kbGVfc3VwcGxpZXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBkYTcyMThfcHJpdiAqZGE3MjE4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IHJlZ3VsYXRvciAqdmRkaW87CisJdTggaW9fdm9sdGFnZV9sdmwgPSBEQTcyMThfSU9fVk9MVEFHRV9MRVZFTF8yXzVWXzNfNlY7CisJaW50IGksIHJldDsKKworCS8qIEdldCByZXF1aXJlZCBzdXBwbGllcyAqLworCWZvciAoaSA9IDA7IGkgPCBEQTcyMThfTlVNX1NVUFBMSUVTOyArK2kpCisJCWRhNzIxOC0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gZGE3MjE4X3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIERBNzIxOF9OVU1fU1VQUExJRVMsCisJCQkJICAgICAgZGE3MjE4LT5zdXBwbGllcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHN1cHBsaWVzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEZXRlcm1pbmUgVkRESU8gdm9sdGFnZSBwcm92aWRlZCAqLworCXZkZGlvID0gZGE3MjE4LT5zdXBwbGllc1tEQTcyMThfU1VQUExZX1ZERElPXS5jb25zdW1lcjsKKwlyZXQgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UodmRkaW8pOworCWlmIChyZXQgPCAxNTAwMDAwKQorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiSW52YWxpZCBWRERJTyB2b2x0YWdlXG4iKTsKKwllbHNlIGlmIChyZXQgPCAyNTAwMDAwKQorCQlpb192b2x0YWdlX2x2bCA9IERBNzIxOF9JT19WT0xUQUdFX0xFVkVMXzFfNVZfMl81VjsKKworCS8qIEVuYWJsZSBtYWluIHN1cHBsaWVzICovCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKERBNzIxOF9OVU1fU1VQUExJRVMsIGRhNzIxOC0+c3VwcGxpZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRW5zdXJlIGRldmljZSBpbiBhY3RpdmUgbW9kZSAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9TWVNURU1fQUNUSVZFLCBEQTcyMThfU1lTVEVNX0FDVElWRV9NQVNLKTsKKworCS8qIFVwZGF0ZSBJTyB2b2x0YWdlIGxldmVsIHJhbmdlICovCisJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X0lPX0NUUkwsIGlvX3ZvbHRhZ2VfbHZsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkYTcyMThfaGFuZGxlX3BkYXRhKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxOCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBkYTcyMThfcGRhdGEgKnBkYXRhID0gZGE3MjE4LT5wZGF0YTsKKworCWlmIChwZGF0YSkgeworCQl1OCBtaWNiaWFzX2x2bCA9IDAsIGRtaWNfY2ZnID0gMDsKKworCQkvKiBNaWMgQmlhcyB2b2x0YWdlcyAqLworCQlzd2l0Y2ggKHBkYXRhLT5taWNiaWFzMV9sdmwpIHsKKwkJY2FzZSBEQTcyMThfTUlDQklBU18xXzJWOgorCQkJbWljYmlhc19sdmwgfD0gREE3MjE4X01JQ0JJQVNfMV9MUF9NT0RFX01BU0s7CisJCQlicmVhazsKKwkJY2FzZSBEQTcyMThfTUlDQklBU18xXzZWOgorCQljYXNlIERBNzIxOF9NSUNCSUFTXzFfOFY6CisJCWNhc2UgREE3MjE4X01JQ0JJQVNfMl8wVjoKKwkJY2FzZSBEQTcyMThfTUlDQklBU18yXzJWOgorCQljYXNlIERBNzIxOF9NSUNCSUFTXzJfNFY6CisJCWNhc2UgREE3MjE4X01JQ0JJQVNfMl82VjoKKwkJY2FzZSBEQTcyMThfTUlDQklBU18yXzhWOgorCQljYXNlIERBNzIxOF9NSUNCSUFTXzNfMFY6CisJCQltaWNiaWFzX2x2bCB8PSAocGRhdGEtPm1pY2JpYXMxX2x2bCA8PAorCQkJCQlEQTcyMThfTUlDQklBU18xX0xFVkVMX1NISUZUKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChwZGF0YS0+bWljYmlhczJfbHZsKSB7CisJCWNhc2UgREE3MjE4X01JQ0JJQVNfMV8yVjoKKwkJCW1pY2JpYXNfbHZsIHw9IERBNzIxOF9NSUNCSUFTXzJfTFBfTU9ERV9NQVNLOworCQkJYnJlYWs7CisJCWNhc2UgREE3MjE4X01JQ0JJQVNfMV82VjoKKwkJY2FzZSBEQTcyMThfTUlDQklBU18xXzhWOgorCQljYXNlIERBNzIxOF9NSUNCSUFTXzJfMFY6CisJCWNhc2UgREE3MjE4X01JQ0JJQVNfMl8yVjoKKwkJY2FzZSBEQTcyMThfTUlDQklBU18yXzRWOgorCQljYXNlIERBNzIxOF9NSUNCSUFTXzJfNlY6CisJCWNhc2UgREE3MjE4X01JQ0JJQVNfMl84VjoKKwkJY2FzZSBEQTcyMThfTUlDQklBU18zXzBWOgorCQkJbWljYmlhc19sdmwgfD0gKHBkYXRhLT5taWNiaWFzMl9sdmwgPDwKKwkJCQkJIERBNzIxOF9NSUNCSUFTXzJfTEVWRUxfU0hJRlQpOworCQkJYnJlYWs7CisJCX0KKworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfTUlDQklBU19DVFJMLCBtaWNiaWFzX2x2bCk7CisKKwkJLyogTWljICovCisJCXN3aXRjaCAocGRhdGEtPm1pYzFfYW1wX2luX3NlbCkgeworCQljYXNlIERBNzIxOF9NSUNfQU1QX0lOX1NFTF9ESUZGOgorCQljYXNlIERBNzIxOF9NSUNfQU1QX0lOX1NFTF9TRV9QOgorCQljYXNlIERBNzIxOF9NSUNfQU1QX0lOX1NFTF9TRV9OOgorCQkJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X01JQ18xX1NFTEVDVCwKKwkJCQkgICAgICBwZGF0YS0+bWljMV9hbXBfaW5fc2VsKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChwZGF0YS0+bWljMl9hbXBfaW5fc2VsKSB7CisJCWNhc2UgREE3MjE4X01JQ19BTVBfSU5fU0VMX0RJRkY6CisJCWNhc2UgREE3MjE4X01JQ19BTVBfSU5fU0VMX1NFX1A6CisJCWNhc2UgREE3MjE4X01JQ19BTVBfSU5fU0VMX1NFX046CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfTUlDXzJfU0VMRUNULAorCQkJCSAgICAgIHBkYXRhLT5taWMyX2FtcF9pbl9zZWwpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBETWljICovCisJCXN3aXRjaCAocGRhdGEtPmRtaWMxX2RhdGFfc2VsKSB7CisJCWNhc2UgREE3MjE4X0RNSUNfREFUQV9MRkFMTF9SUklTRToKKwkJY2FzZSBEQTcyMThfRE1JQ19EQVRBX0xSSVNFX1JGQUxMOgorCQkJZG1pY19jZmcgfD0gKHBkYXRhLT5kbWljMV9kYXRhX3NlbCA8PAorCQkJCSAgICAgREE3MjE4X0RNSUNfMV9EQVRBX1NFTF9TSElGVCk7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAocGRhdGEtPmRtaWMxX3NhbXBsZXBoYXNlKSB7CisJCWNhc2UgREE3MjE4X0RNSUNfU0FNUExFX09OX0NMS0VER0U6CisJCWNhc2UgREE3MjE4X0RNSUNfU0FNUExFX0JFVFdFRU5fQ0xLRURHRToKKwkJCWRtaWNfY2ZnIHw9IChwZGF0YS0+ZG1pYzFfc2FtcGxlcGhhc2UgPDwKKwkJCQkgICAgIERBNzIxOF9ETUlDXzFfU0FNUExFUEhBU0VfU0hJRlQpOworCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKHBkYXRhLT5kbWljMV9jbGtfcmF0ZSkgeworCQljYXNlIERBNzIxOF9ETUlDX0NMS18zXzBNSFo6CisJCWNhc2UgREE3MjE4X0RNSUNfQ0xLXzFfNU1IWjoKKwkJCWRtaWNfY2ZnIHw9IChwZGF0YS0+ZG1pYzFfY2xrX3JhdGUgPDwKKwkJCQkgICAgIERBNzIxOF9ETUlDXzFfQ0xLX1JBVEVfU0hJRlQpOworCQkJYnJlYWs7CisJCX0KKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfRE1JQ18xX0NUUkwsCisJCQkJICAgIERBNzIxOF9ETUlDXzFfREFUQV9TRUxfTUFTSyB8CisJCQkJICAgIERBNzIxOF9ETUlDXzFfU0FNUExFUEhBU0VfTUFTSyB8CisJCQkJICAgIERBNzIxOF9ETUlDXzFfQ0xLX1JBVEVfTUFTSywgZG1pY19jZmcpOworCisJCWRtaWNfY2ZnID0gMDsKKwkJc3dpdGNoIChwZGF0YS0+ZG1pYzJfZGF0YV9zZWwpIHsKKwkJY2FzZSBEQTcyMThfRE1JQ19EQVRBX0xGQUxMX1JSSVNFOgorCQljYXNlIERBNzIxOF9ETUlDX0RBVEFfTFJJU0VfUkZBTEw6CisJCQlkbWljX2NmZyB8PSAocGRhdGEtPmRtaWMyX2RhdGFfc2VsIDw8CisJCQkJICAgICBEQTcyMThfRE1JQ18yX0RBVEFfU0VMX1NISUZUKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChwZGF0YS0+ZG1pYzJfc2FtcGxlcGhhc2UpIHsKKwkJY2FzZSBEQTcyMThfRE1JQ19TQU1QTEVfT05fQ0xLRURHRToKKwkJY2FzZSBEQTcyMThfRE1JQ19TQU1QTEVfQkVUV0VFTl9DTEtFREdFOgorCQkJZG1pY19jZmcgfD0gKHBkYXRhLT5kbWljMl9zYW1wbGVwaGFzZSA8PAorCQkJCSAgICAgREE3MjE4X0RNSUNfMl9TQU1QTEVQSEFTRV9TSElGVCk7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAocGRhdGEtPmRtaWMyX2Nsa19yYXRlKSB7CisJCWNhc2UgREE3MjE4X0RNSUNfQ0xLXzNfME1IWjoKKwkJY2FzZSBEQTcyMThfRE1JQ19DTEtfMV81TUhaOgorCQkJZG1pY19jZmcgfD0gKHBkYXRhLT5kbWljMl9jbGtfcmF0ZSA8PAorCQkJCSAgICAgREE3MjE4X0RNSUNfMl9DTEtfUkFURV9TSElGVCk7CisJCQlicmVhazsKKwkJfQorCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9ETUlDXzJfQ1RSTCwKKwkJCQkgICAgREE3MjE4X0RNSUNfMl9EQVRBX1NFTF9NQVNLIHwKKwkJCQkgICAgREE3MjE4X0RNSUNfMl9TQU1QTEVQSEFTRV9NQVNLIHwKKwkJCQkgICAgREE3MjE4X0RNSUNfMl9DTEtfUkFURV9NQVNLLCBkbWljX2NmZyk7CisKKwkJLyogREE3MjE3IFNwZWNpZmljICovCisJCWlmIChkYTcyMTgtPmRldl9pZCA9PSBEQTcyMTdfREVWX0lEKSB7CisJCQlkYTcyMTgtPmhwX3NpbmdsZV9zdXBwbHkgPQorCQkJCXBkYXRhLT5ocF9kaWZmX3NpbmdsZV9zdXBwbHk7CisKKwkJCWlmIChkYTcyMTgtPmhwX3NpbmdsZV9zdXBwbHkpIHsKKwkJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfSFBfRElGRl9VTkxPQ0ssCisJCQkJCSAgICAgIERBNzIxOF9IUF9ESUZGX1VOTE9DS19WQUwpOworCQkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9IUF9ESUZGX0NUUkwsCisJCQkJCQkgICAgREE3MjE4X0hQX0FNUF9TSU5HTEVfU1VQUExZX0VOX01BU0ssCisJCQkJCQkgICAgREE3MjE4X0hQX0FNUF9TSU5HTEVfU1VQUExZX0VOX01BU0spOworCQkJfQorCQl9CisKKwkJLyogREE3MjE4IFNwZWNpZmljICovCisJCWlmICgoZGE3MjE4LT5kZXZfaWQgPT0gREE3MjE4X0RFVl9JRCkgJiYKKwkJICAgIChwZGF0YS0+aHBsZGV0X3BkYXRhKSkgeworCQkJc3RydWN0IGRhNzIxOF9ocGxkZXRfcGRhdGEgKmhwbGRldF9wZGF0YSA9CisJCQkJcGRhdGEtPmhwbGRldF9wZGF0YTsKKwkJCXU4IGhwbGRldF9jZmcgPSAwOworCisJCQlzd2l0Y2ggKGhwbGRldF9wZGF0YS0+amFja19yYXRlKSB7CisJCQljYXNlIERBNzIxOF9IUExERVRfSkFDS19SQVRFXzVVUzoKKwkJCWNhc2UgREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfMTBVUzoKKwkJCWNhc2UgREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfMjBVUzoKKwkJCWNhc2UgREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfNDBVUzoKKwkJCWNhc2UgREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfODBVUzoKKwkJCWNhc2UgREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfMTYwVVM6CisJCQljYXNlIERBNzIxOF9IUExERVRfSkFDS19SQVRFXzMyMFVTOgorCQkJY2FzZSBEQTcyMThfSFBMREVUX0pBQ0tfUkFURV82NDBVUzoKKwkJCQlocGxkZXRfY2ZnIHw9CisJCQkJCShocGxkZXRfcGRhdGEtPmphY2tfcmF0ZSA8PAorCQkJCQkgREE3MjE4X0hQTERFVF9KQUNLX1JBVEVfU0hJRlQpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlzd2l0Y2ggKGhwbGRldF9wZGF0YS0+amFja19kZWJvdW5jZSkgeworCQkJY2FzZSBEQTcyMThfSFBMREVUX0pBQ0tfREVCT1VOQ0VfT0ZGOgorCQkJY2FzZSBEQTcyMThfSFBMREVUX0pBQ0tfREVCT1VOQ0VfMjoKKwkJCWNhc2UgREE3MjE4X0hQTERFVF9KQUNLX0RFQk9VTkNFXzM6CisJCQljYXNlIERBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV80OgorCQkJCWhwbGRldF9jZmcgfD0KKwkJCQkJKGhwbGRldF9wZGF0YS0+amFja19kZWJvdW5jZSA8PAorCQkJCQkgREE3MjE4X0hQTERFVF9KQUNLX0RFQk9VTkNFX1NISUZUKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc3dpdGNoIChocGxkZXRfcGRhdGEtPmphY2tfdGhyKSB7CisJCQljYXNlIERBNzIxOF9IUExERVRfSkFDS19USFJfODRQQ1Q6CisJCQljYXNlIERBNzIxOF9IUExERVRfSkFDS19USFJfODhQQ1Q6CisJCQljYXNlIERBNzIxOF9IUExERVRfSkFDS19USFJfOTJQQ1Q6CisJCQljYXNlIERBNzIxOF9IUExERVRfSkFDS19USFJfOTZQQ1Q6CisJCQkJaHBsZGV0X2NmZyB8PQorCQkJCQkoaHBsZGV0X3BkYXRhLT5qYWNrX3RociA8PAorCQkJCQkgREE3MjE4X0hQTERFVF9KQUNLX1RIUl9TSElGVCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfSFBMREVUX0pBQ0ssCisJCQkJCSAgICBEQTcyMThfSFBMREVUX0pBQ0tfUkFURV9NQVNLIHwKKwkJCQkJICAgIERBNzIxOF9IUExERVRfSkFDS19ERUJPVU5DRV9NQVNLIHwKKwkJCQkJICAgIERBNzIxOF9IUExERVRfSkFDS19USFJfTUFTSywKKwkJCQkJICAgIGhwbGRldF9jZmcpOworCisJCQlocGxkZXRfY2ZnID0gMDsKKwkJCWlmIChocGxkZXRfcGRhdGEtPmNvbXBfaW52KQorCQkJCWhwbGRldF9jZmcgfD0gREE3MjE4X0hQTERFVF9DT01QX0lOVl9NQVNLOworCisJCQlpZiAoaHBsZGV0X3BkYXRhLT5oeXN0KQorCQkJCWhwbGRldF9jZmcgfD0gREE3MjE4X0hQTERFVF9IWVNUX0VOX01BU0s7CisKKwkJCWlmIChocGxkZXRfcGRhdGEtPmRpc2NoYXJnZSkKKwkJCQlocGxkZXRfY2ZnIHw9IERBNzIxOF9IUExERVRfRElTQ0hBUkdFX0VOX01BU0s7CisKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9IUExERVRfQ1RSTCwgaHBsZGV0X2NmZyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZGE3MjE4X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxOCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCByZXQ7CisKKwkvKiBSZWd1bGF0b3IgY29uZmlndXJhdGlvbiAqLworCXJldCA9IGRhNzIxOF9oYW5kbGVfc3VwcGxpZXMoY29kZWMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBIYW5kbGUgRFQvUGxhdGZvcm0gZGF0YSAqLworCWlmIChjb2RlYy0+ZGV2LT5vZl9ub2RlKQorCQlkYTcyMTgtPnBkYXRhID0gZGE3MjE4X29mX3RvX3BkYXRhKGNvZGVjKTsKKwllbHNlCisJCWRhNzIxOC0+cGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKGNvZGVjLT5kZXYpOworCisJZGE3MjE4X2hhbmRsZV9wZGF0YShjb2RlYyk7CisKKwkvKiBDaGVjayBpZiBNQ0xLIHByb3ZpZGVkLCBpZiBub3QgdGhlIGNsb2NrIGlzIE5VTEwgKi8KKwlkYTcyMTgtPm1jbGsgPSBkZXZtX2Nsa19nZXQoY29kZWMtPmRldiwgIm1jbGsiKTsKKwlpZiAoSVNfRVJSKGRhNzIxOC0+bWNsaykpIHsKKwkJaWYgKFBUUl9FUlIoZGE3MjE4LT5tY2xrKSAhPSAtRU5PRU5UKSB7CisJCQlyZXQgPSBQVFJfRVJSKGRhNzIxOC0+bWNsayk7CisJCQlnb3RvIGVycl9kaXNhYmxlX3JlZzsKKwkJfSBlbHNlIHsKKwkJCWRhNzIxOC0+bWNsayA9IE5VTEw7CisJCX0KKwl9CisKKwkvKiBEZWZhdWx0IFBDIHRvIGZyZWUtcnVubmluZyAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9QQ19DT1VOVCwgREE3MjE4X1BDX0ZSRUVSVU5fTUFTSyk7CisKKwkvKgorCSAqIERlZmF1bHQgT3V0cHV0IEZpbHRlciBtaXhlcnMgdG8gb2ZmIG90aGVyd2lzZSBEQVBNIHdpbGwgcG93ZXIKKwkgKiBNaWMgdG8gSFAgcGFzc3Rocm91Z2ggcGF0aHMgYnkgZGVmYXVsdCBhdCBzdGFydHVwLgorCSAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9EUk9VVElOR19PVVRGSUxUXzFMLCAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfRFJPVVRJTkdfT1VURklMVF8xUiwgMCk7CisKKwkvKiBEZWZhdWx0IENQIHRvIG5vcm1hbCBsb2FkLCBwb3dlciBtb2RlICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X0NQX0NUUkwsCisJCQkgICAgREE3MjE4X0NQX1NNQUxMX1NXSVRDSF9GUkVRX0VOX01BU0ssIDApOworCisJLyogRGVmYXVsdCBnYWluIHJhbXBpbmcgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMThfTUlYSU5fMV9DVFJMLAorCQkJICAgIERBNzIxOF9NSVhJTl8xX0FNUF9SQU1QX0VOX01BU0ssCisJCQkgICAgREE3MjE4X01JWElOXzFfQU1QX1JBTVBfRU5fTUFTSyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X01JWElOXzJfQ1RSTCwKKwkJCSAgICBEQTcyMThfTUlYSU5fMl9BTVBfUkFNUF9FTl9NQVNLLAorCQkJICAgIERBNzIxOF9NSVhJTl8yX0FNUF9SQU1QX0VOX01BU0spOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9JTl8xTF9GSUxURVJfQ1RSTCwKKwkJCSAgICBEQTcyMThfSU5fMUxfUkFNUF9FTl9NQVNLLAorCQkJICAgIERBNzIxOF9JTl8xTF9SQU1QX0VOX01BU0spOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9JTl8xUl9GSUxURVJfQ1RSTCwKKwkJCSAgICBEQTcyMThfSU5fMVJfUkFNUF9FTl9NQVNLLAorCQkJICAgIERBNzIxOF9JTl8xUl9SQU1QX0VOX01BU0spOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9JTl8yTF9GSUxURVJfQ1RSTCwKKwkJCSAgICBEQTcyMThfSU5fMkxfUkFNUF9FTl9NQVNLLAorCQkJICAgIERBNzIxOF9JTl8yTF9SQU1QX0VOX01BU0spOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9JTl8yUl9GSUxURVJfQ1RSTCwKKwkJCSAgICBEQTcyMThfSU5fMlJfUkFNUF9FTl9NQVNLLAorCQkJICAgIERBNzIxOF9JTl8yUl9SQU1QX0VOX01BU0spOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9ER1NfR0FJTl9DVFJMLAorCQkJICAgIERBNzIxOF9ER1NfUkFNUF9FTl9NQVNLLCBEQTcyMThfREdTX1JBTVBfRU5fTUFTSyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X09VVF8xTF9GSUxURVJfQ1RSTCwKKwkJCSAgICBEQTcyMThfT1VUXzFMX1JBTVBfRU5fTUFTSywKKwkJCSAgICBEQTcyMThfT1VUXzFMX1JBTVBfRU5fTUFTSyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X09VVF8xUl9GSUxURVJfQ1RSTCwKKwkJCSAgICBEQTcyMThfT1VUXzFSX1JBTVBfRU5fTUFTSywKKwkJCSAgICBEQTcyMThfT1VUXzFSX1JBTVBfRU5fTUFTSyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X0hQX0xfQ1RSTCwKKwkJCSAgICBEQTcyMThfSFBfTF9BTVBfUkFNUF9FTl9NQVNLLAorCQkJICAgIERBNzIxOF9IUF9MX0FNUF9SQU1QX0VOX01BU0spOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOF9IUF9SX0NUUkwsCisJCQkgICAgREE3MjE4X0hQX1JfQU1QX1JBTVBfRU5fTUFTSywKKwkJCSAgICBEQTcyMThfSFBfUl9BTVBfUkFNUF9FTl9NQVNLKTsKKworCS8qIERlZmF1bHQgaW5maW5pdGUgdG9uZSBnZW4sIHN0YXJ0L3N0b3AgYnkgS2NvbnRyb2wgKi8KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBEQTcyMThfVE9ORV9HRU5fQ1lDTEVTLCBEQTcyMThfQkVFUF9DWUNMRVNfTUFTSyk7CisKKwkvKiBEQTcyMTcgc3BlY2lmaWMgY29uZmlnICovCisJaWYgKGRhNzIxOC0+ZGV2X2lkID09IERBNzIxN19ERVZfSUQpIHsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE4X0hQX0RJRkZfQ1RSTCwKKwkJCQkgICAgREE3MjE4X0hQX0FNUF9ESUZGX01PREVfRU5fTUFTSywKKwkJCQkgICAgREE3MjE4X0hQX0FNUF9ESUZGX01PREVfRU5fTUFTSyk7CisKKwkJLyogT25seSBEQTcyMTggc3VwcG9ydHMgSFAgZGV0ZWN0LCBtYXNrIG9mZiBmb3IgREE3MjE3ICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOF9FVkVOVF9NQVNLLAorCQkJICAgICAgREE3MjE4X0hQTERFVF9KQUNLX0VWRU5UX0lSUV9NU0tfTUFTSyk7CisJfQorCisJaWYgKGRhNzIxOC0+aXJxKSB7CisJCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoY29kZWMtPmRldiwgZGE3MjE4LT5pcnEsIE5VTEwsCisJCQkJCQlkYTcyMThfaXJxX3RocmVhZCwKKwkJCQkJCUlSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsCisJCQkJCQkiZGE3MjE4IiwgY29kZWMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUSAlZDogJWRcbiIsCisJCQkJZGE3MjE4LT5pcnEsIHJldCk7CisJCQlnb3RvIGVycl9kaXNhYmxlX3JlZzsKKwkJfQorCisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX3JlZzoKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKERBNzIxOF9OVU1fU1VQUExJRVMsIGRhNzIxOC0+c3VwcGxpZXMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkYTcyMThfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxOCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShEQTcyMThfTlVNX1NVUFBMSUVTLCBkYTcyMTgtPnN1cHBsaWVzKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGRhNzIxOF9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxOCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJZGE3MjE4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCS8qIFB1dCBkZXZpY2UgaW50byBzdGFuZGJ5IG1vZGUgaWYgamFjayBkZXRlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWRhNzIxOC0+amFjaykKKwkJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X1NZU1RFTV9BQ1RJVkUsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGE3MjE4X3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGRhNzIxOF9wcml2ICpkYTcyMTggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCS8qIFB1dCBkZXZpY2UgaW50byBhY3RpdmUgbW9kZSBpZiBwcmV2aW91c2x5IG1vdmVkIHRvIHN0YW5kYnkgKi8KKwlpZiAoIWRhNzIxOC0+amFjaykKKwkJc25kX3NvY193cml0ZShjb2RlYywgREE3MjE4X1NZU1RFTV9BQ1RJVkUsCisJCQkgICAgICBEQTcyMThfU1lTVEVNX0FDVElWRV9NQVNLKTsKKworCWRhNzIxOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBkYTcyMThfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGRhNzIxOF9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9kYTcyMTggPSB7CisJLnByb2JlCQkJPSBkYTcyMThfcHJvYmUsCisJLnJlbW92ZQkJCT0gZGE3MjE4X3JlbW92ZSwKKwkuc3VzcGVuZAkJPSBkYTcyMThfc3VzcGVuZCwKKwkucmVzdW1lCQkJPSBkYTcyMThfcmVzdW1lLAorCS5zZXRfYmlhc19sZXZlbAkJPSBkYTcyMThfc2V0X2JpYXNfbGV2ZWwsCisKKwkuY29udHJvbHMJCT0gZGE3MjE4X3NuZF9jb250cm9scywKKwkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUoZGE3MjE4X3NuZF9jb250cm9scyksCisKKwkuZGFwbV93aWRnZXRzCQk9IGRhNzIxOF9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMJPSBBUlJBWV9TSVpFKGRhNzIxOF9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcwkJPSBkYTcyMThfYXVkaW9fbWFwLAorCS5udW1fZGFwbV9yb3V0ZXMJPSBBUlJBWV9TSVpFKGRhNzIxOF9hdWRpb19tYXApLAorfTsKKworCisvKgorICogUmVnbWFwIGNvbmZpZ3MKKyAqLworCitzdGF0aWMgc3RydWN0IHJlZ19kZWZhdWx0IGRhNzIxOF9yZWdfZGVmYXVsdHNbXSA9IHsKKwl7IERBNzIxOF9TWVNURU1fQUNUSVZFLCAweDAwIH0sCisJeyBEQTcyMThfQ0lGX0NUUkwsIDB4MDAgfSwKKwl7IERBNzIxOF9TUEFSRTEsIDB4MDAgfSwKKwl7IERBNzIxOF9TUiwgMHhBQSB9LAorCXsgREE3MjE4X1BDX0NPVU5ULCAweDAyIH0sCisJeyBEQTcyMThfR0FJTl9SQU1QX0NUUkwsIDB4MDAgfSwKKwl7IERBNzIxOF9DSUZfVElNRU9VVF9DVFJMLCAweDAxIH0sCisJeyBEQTcyMThfU1lTVEVNX01PREVTX0lOUFVULCAweDAwIH0sCisJeyBEQTcyMThfU1lTVEVNX01PREVTX09VVFBVVCwgMHgwMCB9LAorCXsgREE3MjE4X0lOXzFMX0ZJTFRFUl9DVFJMLCAweDAwIH0sCisJeyBEQTcyMThfSU5fMVJfRklMVEVSX0NUUkwsIDB4MDAgfSwKKwl7IERBNzIxOF9JTl8yTF9GSUxURVJfQ1RSTCwgMHgwMCB9LAorCXsgREE3MjE4X0lOXzJSX0ZJTFRFUl9DVFJMLCAweDAwIH0sCisJeyBEQTcyMThfT1VUXzFMX0ZJTFRFUl9DVFJMLCAweDQwIH0sCisJeyBEQTcyMThfT1VUXzFSX0ZJTFRFUl9DVFJMLCAweDQwIH0sCisJeyBEQTcyMThfT1VUXzFfSFBGX0ZJTFRFUl9DVFJMLCAweDgwIH0sCisJeyBEQTcyMThfT1VUXzFfRVFfMTJfRklMVEVSX0NUUkwsIDB4NzcgfSwKKwl7IERBNzIxOF9PVVRfMV9FUV8zNF9GSUxURVJfQ1RSTCwgMHg3NyB9LAorCXsgREE3MjE4X09VVF8xX0VRXzVfRklMVEVSX0NUUkwsIDB4MDcgfSwKKwl7IERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0NUUkwsIDB4NDAgfSwKKwl7IERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0RBVEEsIDB4MDAgfSwKKwl7IERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0FERFIsIDB4MDAgfSwKKwl7IERBNzIxOF9NSVhJTl8xX0NUUkwsIDB4NDggfSwKKwl7IERBNzIxOF9NSVhJTl8xX0dBSU4sIDB4MDMgfSwKKwl7IERBNzIxOF9NSVhJTl8yX0NUUkwsIDB4NDggfSwKKwl7IERBNzIxOF9NSVhJTl8yX0dBSU4sIDB4MDMgfSwKKwl7IERBNzIxOF9BTENfQ1RSTDEsIDB4MDAgfSwKKwl7IERBNzIxOF9BTENfQ1RSTDIsIDB4MDAgfSwKKwl7IERBNzIxOF9BTENfQ1RSTDMsIDB4MDAgfSwKKwl7IERBNzIxOF9BTENfTk9JU0UsIDB4M0YgfSwKKwl7IERBNzIxOF9BTENfVEFSR0VUX01JTiwgMHgzRiB9LAorCXsgREE3MjE4X0FMQ19UQVJHRVRfTUFYLCAweDAwIH0sCisJeyBEQTcyMThfQUxDX0dBSU5fTElNSVRTLCAweEZGIH0sCisJeyBEQTcyMThfQUxDX0FOQV9HQUlOX0xJTUlUUywgMHg3MSB9LAorCXsgREE3MjE4X0FMQ19BTlRJQ0xJUF9DVFJMLCAweDAwIH0sCisJeyBEQTcyMThfQUdTX0VOQUJMRSwgMHgwMCB9LAorCXsgREE3MjE4X0FHU19UUklHR0VSLCAweDA5IH0sCisJeyBEQTcyMThfQUdTX0FUVF9NQVgsIDB4MDAgfSwKKwl7IERBNzIxOF9BR1NfVElNRU9VVCwgMHgwMCB9LAorCXsgREE3MjE4X0FHU19BTlRJQ0xJUF9DVFJMLCAweDAwIH0sCisJeyBEQTcyMThfRU5WX1RSQUNLX0NUUkwsIDB4MDAgfSwKKwl7IERBNzIxOF9MVkxfREVUX0NUUkwsIDB4MDAgfSwKKwl7IERBNzIxOF9MVkxfREVUX0xFVkVMLCAweDdGIH0sCisJeyBEQTcyMThfREdTX1RSSUdHRVIsIDB4MjQgfSwKKwl7IERBNzIxOF9ER1NfRU5BQkxFLCAweDAwIH0sCisJeyBEQTcyMThfREdTX1JJU0VfRkFMTCwgMHg1MCB9LAorCXsgREE3MjE4X0RHU19TWU5DX0RFTEFZLCAweEEzIH0sCisJeyBEQTcyMThfREdTX1NZTkNfREVMQVkyLCAweDMxIH0sCisJeyBEQTcyMThfREdTX1NZTkNfREVMQVkzLCAweDExIH0sCisJeyBEQTcyMThfREdTX0xFVkVMUywgMHgwMSB9LAorCXsgREE3MjE4X0RHU19HQUlOX0NUUkwsIDB4NzQgfSwKKwl7IERBNzIxOF9EUk9VVElOR19PVVREQUlfMUwsIDB4MDEgfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8xTF9JTkZJTFRfMUxfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzFMX0lORklMVF8xUl9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRE1JWF9PVVREQUlfMUxfSU5GSUxUXzJMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8xTF9JTkZJTFRfMlJfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzFMX1RPTkVHRU5fR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzFMX0lOREFJXzFMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8xTF9JTkRBSV8xUl9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRFJPVVRJTkdfT1VUREFJXzFSLCAweDA0IH0sCisJeyBEQTcyMThfRE1JWF9PVVREQUlfMVJfSU5GSUxUXzFMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8xUl9JTkZJTFRfMVJfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzFSX0lORklMVF8yTF9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRE1JWF9PVVREQUlfMVJfSU5GSUxUXzJSX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8xUl9UT05FR0VOX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8xUl9JTkRBSV8xTF9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRE1JWF9PVVREQUlfMVJfSU5EQUlfMVJfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RST1VUSU5HX09VVEZJTFRfMUwsIDB4MDEgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5GSUxUXzFMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5GSUxUXzFSX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5GSUxUXzJMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5GSUxUXzJSX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMUxfVE9ORUdFTl9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRE1JWF9PVVRGSUxUXzFMX0lOREFJXzFMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5EQUlfMVJfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RST1VUSU5HX09VVEZJTFRfMVIsIDB4MDQgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5GSUxUXzFMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5GSUxUXzFSX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5GSUxUXzJMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5GSUxUXzJSX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMVJfVE9ORUdFTl9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX0lOREFJXzFMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5EQUlfMVJfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RST1VUSU5HX09VVERBSV8yTCwgMHgwNCB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzJMX0lORklMVF8xTF9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRE1JWF9PVVREQUlfMkxfSU5GSUxUXzFSX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8yTF9JTkZJTFRfMkxfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzJMX0lORklMVF8yUl9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRE1JWF9PVVREQUlfMkxfVE9ORUdFTl9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRE1JWF9PVVREQUlfMkxfSU5EQUlfMUxfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzJMX0lOREFJXzFSX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9EUk9VVElOR19PVVREQUlfMlIsIDB4MDggfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8yUl9JTkZJTFRfMUxfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzJSX0lORklMVF8xUl9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5GSUxUXzJMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8yUl9JTkZJTFRfMlJfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzJSX1RPTkVHRU5fR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RNSVhfT1VUREFJXzJSX0lOREFJXzFMX0dBSU4sIDB4MUMgfSwKKwl7IERBNzIxOF9ETUlYX09VVERBSV8yUl9JTkRBSV8xUl9HQUlOLCAweDFDIH0sCisJeyBEQTcyMThfREFJX0NUUkwsIDB4MjggfSwKKwl7IERBNzIxOF9EQUlfVERNX0NUUkwsIDB4NDAgfSwKKwl7IERBNzIxOF9EQUlfT0ZGU0VUX0xPV0VSLCAweDAwIH0sCisJeyBEQTcyMThfREFJX09GRlNFVF9VUFBFUiwgMHgwMCB9LAorCXsgREE3MjE4X0RBSV9DTEtfTU9ERSwgMHgwMSB9LAorCXsgREE3MjE4X1BMTF9DVFJMLCAweDA0IH0sCisJeyBEQTcyMThfUExMX0ZSQUNfVE9QLCAweDAwIH0sCisJeyBEQTcyMThfUExMX0ZSQUNfQk9ULCAweDAwIH0sCisJeyBEQTcyMThfUExMX0lOVEVHRVIsIDB4MjAgfSwKKwl7IERBNzIxOF9EQUNfTkdfQ1RSTCwgMHgwMCB9LAorCXsgREE3MjE4X0RBQ19OR19TRVRVUF9USU1FLCAweDAwIH0sCisJeyBEQTcyMThfREFDX05HX09GRl9USFJFU0gsIDB4MDAgfSwKKwl7IERBNzIxOF9EQUNfTkdfT05fVEhSRVNILCAweDAwIH0sCisJeyBEQTcyMThfVE9ORV9HRU5fQ0ZHMiwgMHgwMCB9LAorCXsgREE3MjE4X1RPTkVfR0VOX0ZSRVExX0wsIDB4NTUgfSwKKwl7IERBNzIxOF9UT05FX0dFTl9GUkVRMV9VLCAweDE1IH0sCisJeyBEQTcyMThfVE9ORV9HRU5fRlJFUTJfTCwgMHgwMCB9LAorCXsgREE3MjE4X1RPTkVfR0VOX0ZSRVEyX1UsIDB4NDAgfSwKKwl7IERBNzIxOF9UT05FX0dFTl9DWUNMRVMsIDB4MDAgfSwKKwl7IERBNzIxOF9UT05FX0dFTl9PTl9QRVIsIDB4MDIgfSwKKwl7IERBNzIxOF9UT05FX0dFTl9PRkZfUEVSLCAweDAxIH0sCisJeyBEQTcyMThfQ1BfQ1RSTCwgMHg2MCB9LAorCXsgREE3MjE4X0NQX0RFTEFZLCAweDExIH0sCisJeyBEQTcyMThfQ1BfVk9MX1RIUkVTSE9MRDEsIDB4MEUgfSwKKwl7IERBNzIxOF9NSUNfMV9DVFJMLCAweDQwIH0sCisJeyBEQTcyMThfTUlDXzFfR0FJTiwgMHgwMSB9LAorCXsgREE3MjE4X01JQ18xX1NFTEVDVCwgMHgwMCB9LAorCXsgREE3MjE4X01JQ18yX0NUUkwsIDB4NDAgfSwKKwl7IERBNzIxOF9NSUNfMl9HQUlOLCAweDAxIH0sCisJeyBEQTcyMThfTUlDXzJfU0VMRUNULCAweDAwIH0sCisJeyBEQTcyMThfSU5fMV9IUEZfRklMVEVSX0NUUkwsIDB4ODAgfSwKKwl7IERBNzIxOF9JTl8yX0hQRl9GSUxURVJfQ1RSTCwgMHg4MCB9LAorCXsgREE3MjE4X0FEQ18xX0NUUkwsIDB4MDcgfSwKKwl7IERBNzIxOF9BRENfMl9DVFJMLCAweDA3IH0sCisJeyBEQTcyMThfTUlYT1VUX0xfQ1RSTCwgMHgwMCB9LAorCXsgREE3MjE4X01JWE9VVF9MX0dBSU4sIDB4MDMgfSwKKwl7IERBNzIxOF9NSVhPVVRfUl9DVFJMLCAweDAwIH0sCisJeyBEQTcyMThfTUlYT1VUX1JfR0FJTiwgMHgwMyB9LAorCXsgREE3MjE4X0hQX0xfQ1RSTCwgMHg0MCB9LAorCXsgREE3MjE4X0hQX0xfR0FJTiwgMHgzQiB9LAorCXsgREE3MjE4X0hQX1JfQ1RSTCwgMHg0MCB9LAorCXsgREE3MjE4X0hQX1JfR0FJTiwgMHgzQiB9LAorCXsgREE3MjE4X0hQX0RJRkZfQ1RSTCwgMHgwMCB9LAorCXsgREE3MjE4X0hQX0RJRkZfVU5MT0NLLCAweEMzIH0sCisJeyBEQTcyMThfSFBMREVUX0pBQ0ssIDB4MEIgfSwKKwl7IERBNzIxOF9IUExERVRfQ1RSTCwgMHgwMCB9LAorCXsgREE3MjE4X1JFRkVSRU5DRVMsIDB4MDggfSwKKwl7IERBNzIxOF9JT19DVFJMLCAweDAwIH0sCisJeyBEQTcyMThfTERPX0NUUkwsIDB4MDAgfSwKKwl7IERBNzIxOF9TSURFVE9ORV9DVFJMLCAweDQwIH0sCisJeyBEQTcyMThfU0lERVRPTkVfSU5fU0VMRUNULCAweDAwIH0sCisJeyBEQTcyMThfU0lERVRPTkVfR0FJTiwgMHgxQyB9LAorCXsgREE3MjE4X0RST1VUSU5HX1NUX09VVEZJTFRfMUwsIDB4MDEgfSwKKwl7IERBNzIxOF9EUk9VVElOR19TVF9PVVRGSUxUXzFSLCAweDAyIH0sCisJeyBEQTcyMThfU0lERVRPTkVfQklRXzNTVEFHRV9EQVRBLCAweDAwIH0sCisJeyBEQTcyMThfU0lERVRPTkVfQklRXzNTVEFHRV9BRERSLCAweDAwIH0sCisJeyBEQTcyMThfRVZFTlRfTUFTSywgMHgwMCB9LAorCXsgREE3MjE4X0RNSUNfMV9DVFJMLCAweDAwIH0sCisJeyBEQTcyMThfRE1JQ18yX0NUUkwsIDB4MDAgfSwKKwl7IERBNzIxOF9JTl8xTF9HQUlOLCAweDZGIH0sCisJeyBEQTcyMThfSU5fMVJfR0FJTiwgMHg2RiB9LAorCXsgREE3MjE4X0lOXzJMX0dBSU4sIDB4NkYgfSwKKwl7IERBNzIxOF9JTl8yUl9HQUlOLCAweDZGIH0sCisJeyBEQTcyMThfT1VUXzFMX0dBSU4sIDB4NkYgfSwKKwl7IERBNzIxOF9PVVRfMVJfR0FJTiwgMHg2RiB9LAorCXsgREE3MjE4X01JQ0JJQVNfQ1RSTCwgMHgwMCB9LAorCXsgREE3MjE4X01JQ0JJQVNfRU4sIDB4MDAgfSwKK307CisKK3N0YXRpYyBib29sIGRhNzIxOF92b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIERBNzIxOF9TVEFUVVMxOgorCWNhc2UgREE3MjE4X1NPRlRfUkVTRVQ6CisJY2FzZSBEQTcyMThfU1lTVEVNX1NUQVRVUzoKKwljYXNlIERBNzIxOF9DQUxJQl9DVFJMOgorCWNhc2UgREE3MjE4X0NBTElCX09GRlNFVF9BVVRPX01fMToKKwljYXNlIERBNzIxOF9DQUxJQl9PRkZTRVRfQVVUT19VXzE6CisJY2FzZSBEQTcyMThfQ0FMSUJfT0ZGU0VUX0FVVE9fTV8yOgorCWNhc2UgREE3MjE4X0NBTElCX09GRlNFVF9BVVRPX1VfMjoKKwljYXNlIERBNzIxOF9QTExfU1RBVFVTOgorCWNhc2UgREE3MjE4X1BMTF9SRUZPU0NfQ0FMOgorCWNhc2UgREE3MjE4X1RPTkVfR0VOX0NGRzE6CisJY2FzZSBEQTcyMThfQURDX01PREU6CisJY2FzZSBEQTcyMThfSFBfU05HTF9DVFJMOgorCWNhc2UgREE3MjE4X0hQTERFVF9URVNUOgorCWNhc2UgREE3MjE4X0VWRU5UX1NUQVRVUzoKKwljYXNlIERBNzIxOF9FVkVOVDoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGRhNzIxOF9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyA9IDgsCisJLnZhbF9iaXRzID0gOCwKKworCS5tYXhfcmVnaXN0ZXIgPSBEQTcyMThfTUlDQklBU19FTiwKKwkucmVnX2RlZmF1bHRzID0gZGE3MjE4X3JlZ19kZWZhdWx0cywKKwkubnVtX3JlZ19kZWZhdWx0cyA9IEFSUkFZX1NJWkUoZGE3MjE4X3JlZ19kZWZhdWx0cyksCisJLnZvbGF0aWxlX3JlZyA9IGRhNzIxOF92b2xhdGlsZV9yZWdpc3RlciwKKwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX1JCVFJFRSwKK307CisKKworLyoKKyAqIEkyQyBsYXllcgorICovCisKK3N0YXRpYyBpbnQgZGE3MjE4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGE3MjE4X3ByaXYgKmRhNzIxODsKKwlpbnQgcmV0OworCisJZGE3MjE4ID0gZGV2bV9remFsbG9jKCZpMmMtPmRldiwgc2l6ZW9mKHN0cnVjdCBkYTcyMThfcHJpdiksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhNzIxOCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBkYTcyMTgpOworCisJaWYgKGkyYy0+ZGV2Lm9mX25vZGUpCisJCWRhNzIxOC0+ZGV2X2lkID0gZGE3MjE4X29mX2dldF9pZCgmaTJjLT5kZXYpOworCWVsc2UKKwkJZGE3MjE4LT5kZXZfaWQgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoKGRhNzIxOC0+ZGV2X2lkICE9IERBNzIxN19ERVZfSUQpICYmCisJICAgIChkYTcyMTgtPmRldl9pZCAhPSBEQTcyMThfREVWX0lEKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkludmFsaWQgZGV2aWNlIElkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGE3MjE4LT5pcnEgPSBpMmMtPmlycTsKKworCWRhNzIxOC0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCAmZGE3MjE4X3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoZGE3MjE4LT5yZWdtYXApKSB7CisJCXJldCA9IFBUUl9FUlIoZGE3MjE4LT5yZWdtYXApOworCQlkZXZfZXJyKCZpMmMtPmRldiwgInJlZ21hcF9pbml0KCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZpMmMtPmRldiwKKwkJCSZzb2NfY29kZWNfZGV2X2RhNzIxOCwgJmRhNzIxOF9kYWksIDEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGRhNzIxOCBjb2RlYzogJWRcbiIsCisJCQlyZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRhNzIxOF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBkYTcyMThfaTJjX2lkW10gPSB7CisJeyAiZGE3MjE3IiwgREE3MjE3X0RFVl9JRCB9LAorCXsgImRhNzIxOCIsIERBNzIxOF9ERVZfSUQgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZGE3MjE4X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkYTcyMThfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJkYTcyMTgiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoZGE3MjE4X29mX21hdGNoKSwKKwl9LAorCS5wcm9iZQkJPSBkYTcyMThfaTJjX3Byb2JlLAorCS5yZW1vdmUJCT0gZGE3MjE4X2kyY19yZW1vdmUsCisJLmlkX3RhYmxlCT0gZGE3MjE4X2kyY19pZCwKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKGRhNzIxOF9pMmNfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIERBNzIxOCBDb2RlYyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFkYW0gVGhvbXNvbiA8QWRhbS5UaG9tc29uLk9wZW5zb3VyY2VAZGlhc2VtaS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2RhNzIxOC5oIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmM1OTA0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTguaApAQCAtMCwwICsxLDE0MTQgQEAKKy8qCisgKiBkYTcyMTguaCAtIERBNzIxOCBBTFNBIFNvQyBDb2RlYyBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgRGlhbG9nIFNlbWljb25kdWN0b3IKKyAqCisgKiBBdXRob3I6IEFkYW0gVGhvbXNvbiA8QWRhbS5UaG9tc29uLk9wZW5zb3VyY2VAZGlhc2VtaS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9EQTcyMThfSAorI2RlZmluZSBfREE3MjE4X0gKKworI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPHNvdW5kL2RhNzIxOC5oPgorCisKKy8qCisgKiBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBEQTcyMThfU1lTVEVNX0FDVElWRQkJCTB4MAorI2RlZmluZSBEQTcyMThfQ0lGX0NUUkwJCQkJMHgxCisjZGVmaW5lIERBNzIxOF9DSElQX0lEMQkJCQkweDQKKyNkZWZpbmUgREE3MjE4X0NISVBfSUQyCQkJCTB4NQorI2RlZmluZSBEQTcyMThfQ0hJUF9SRVZJU0lPTgkJCTB4NgorI2RlZmluZSBEQTcyMThfU1BBUkUxCQkJCTB4NworI2RlZmluZSBEQTcyMThfU1RBVFVTMQkJCQkweDgKKyNkZWZpbmUgREE3MjE4X1NPRlRfUkVTRVQJCQkweDkKKyNkZWZpbmUgREE3MjE4X1NSCQkJCTB4QgorI2RlZmluZSBEQTcyMThfUENfQ09VTlQJCQkJMHhDCisjZGVmaW5lIERBNzIxOF9HQUlOX1JBTVBfQ1RSTAkJCTB4RAorI2RlZmluZSBEQTcyMThfQ0lGX1RJTUVPVVRfQ1RSTAkJCTB4MTAKKyNkZWZpbmUgREE3MjE4X1NZU1RFTV9NT0RFU19JTlBVVAkJMHgxNAorI2RlZmluZSBEQTcyMThfU1lTVEVNX01PREVTX09VVFBVVAkJMHgxNQorI2RlZmluZSBEQTcyMThfU1lTVEVNX1NUQVRVUwkJCTB4MTYKKyNkZWZpbmUgREE3MjE4X0lOXzFMX0ZJTFRFUl9DVFJMCQkweDE4CisjZGVmaW5lIERBNzIxOF9JTl8xUl9GSUxURVJfQ1RSTAkJMHgxOQorI2RlZmluZSBEQTcyMThfSU5fMkxfRklMVEVSX0NUUkwJCTB4MUEKKyNkZWZpbmUgREE3MjE4X0lOXzJSX0ZJTFRFUl9DVFJMCQkweDFCCisjZGVmaW5lIERBNzIxOF9PVVRfMUxfRklMVEVSX0NUUkwJCTB4MjAKKyNkZWZpbmUgREE3MjE4X09VVF8xUl9GSUxURVJfQ1RSTAkJMHgyMQorI2RlZmluZSBEQTcyMThfT1VUXzFfSFBGX0ZJTFRFUl9DVFJMCQkweDI0CisjZGVmaW5lIERBNzIxOF9PVVRfMV9FUV8xMl9GSUxURVJfQ1RSTAkJMHgyNQorI2RlZmluZSBEQTcyMThfT1VUXzFfRVFfMzRfRklMVEVSX0NUUkwJCTB4MjYKKyNkZWZpbmUgREE3MjE4X09VVF8xX0VRXzVfRklMVEVSX0NUUkwJCTB4MjcKKyNkZWZpbmUgREE3MjE4X09VVF8xX0JJUV81U1RBR0VfQ1RSTAkJMHgyOAorI2RlZmluZSBEQTcyMThfT1VUXzFfQklRXzVTVEFHRV9EQVRBCQkweDI5CisjZGVmaW5lIERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0FERFIJCTB4MkEKKyNkZWZpbmUgREE3MjE4X01JWElOXzFfQ1RSTAkJCTB4MkMKKyNkZWZpbmUgREE3MjE4X01JWElOXzFfR0FJTgkJCTB4MkQKKyNkZWZpbmUgREE3MjE4X01JWElOXzJfQ1RSTAkJCTB4MkUKKyNkZWZpbmUgREE3MjE4X01JWElOXzJfR0FJTgkJCTB4MkYKKyNkZWZpbmUgREE3MjE4X0FMQ19DVFJMMQkJCTB4MzAKKyNkZWZpbmUgREE3MjE4X0FMQ19DVFJMMgkJCTB4MzEKKyNkZWZpbmUgREE3MjE4X0FMQ19DVFJMMwkJCTB4MzIKKyNkZWZpbmUgREE3MjE4X0FMQ19OT0lTRQkJCTB4MzMKKyNkZWZpbmUgREE3MjE4X0FMQ19UQVJHRVRfTUlOCQkJMHgzNAorI2RlZmluZSBEQTcyMThfQUxDX1RBUkdFVF9NQVgJCQkweDM1CisjZGVmaW5lIERBNzIxOF9BTENfR0FJTl9MSU1JVFMJCQkweDM2CisjZGVmaW5lIERBNzIxOF9BTENfQU5BX0dBSU5fTElNSVRTCQkweDM3CisjZGVmaW5lIERBNzIxOF9BTENfQU5USUNMSVBfQ1RSTAkJMHgzOAorI2RlZmluZSBEQTcyMThfQUdTX0VOQUJMRQkJCTB4M0MKKyNkZWZpbmUgREE3MjE4X0FHU19UUklHR0VSCQkJMHgzRAorI2RlZmluZSBEQTcyMThfQUdTX0FUVF9NQVgJCQkweDNFCisjZGVmaW5lIERBNzIxOF9BR1NfVElNRU9VVAkJCTB4M0YKKyNkZWZpbmUgREE3MjE4X0FHU19BTlRJQ0xJUF9DVFJMCQkweDQwCisjZGVmaW5lIERBNzIxOF9DQUxJQl9DVFJMCQkJMHg0NAorI2RlZmluZSBEQTcyMThfQ0FMSUJfT0ZGU0VUX0FVVE9fTV8xCQkweDQ1CisjZGVmaW5lIERBNzIxOF9DQUxJQl9PRkZTRVRfQVVUT19VXzEJCTB4NDYKKyNkZWZpbmUgREE3MjE4X0NBTElCX09GRlNFVF9BVVRPX01fMgkJMHg0NworI2RlZmluZSBEQTcyMThfQ0FMSUJfT0ZGU0VUX0FVVE9fVV8yCQkweDQ4CisjZGVmaW5lIERBNzIxOF9FTlZfVFJBQ0tfQ1RSTAkJCTB4NEMKKyNkZWZpbmUgREE3MjE4X0xWTF9ERVRfQ1RSTAkJCTB4NTAKKyNkZWZpbmUgREE3MjE4X0xWTF9ERVRfTEVWRUwJCQkweDUxCisjZGVmaW5lIERBNzIxOF9ER1NfVFJJR0dFUgkJCTB4NTQKKyNkZWZpbmUgREE3MjE4X0RHU19FTkFCTEUJCQkweDU1CisjZGVmaW5lIERBNzIxOF9ER1NfUklTRV9GQUxMCQkJMHg1NgorI2RlZmluZSBEQTcyMThfREdTX1NZTkNfREVMQVkJCQkweDU3CisjZGVmaW5lIERBNzIxOF9ER1NfU1lOQ19ERUxBWTIJCQkweDU4CisjZGVmaW5lIERBNzIxOF9ER1NfU1lOQ19ERUxBWTMJCQkweDU5CisjZGVmaW5lIERBNzIxOF9ER1NfTEVWRUxTCQkJMHg1QQorI2RlZmluZSBEQTcyMThfREdTX0dBSU5fQ1RSTAkJCTB4NUIKKyNkZWZpbmUgREE3MjE4X0RST1VUSU5HX09VVERBSV8xTAkJMHg1QworI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMUxfSU5GSUxUXzFMX0dBSU4JMHg1RAorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMUxfSU5GSUxUXzFSX0dBSU4JMHg1RQorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMUxfSU5GSUxUXzJMX0dBSU4JMHg1RgorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMUxfSU5GSUxUXzJSX0dBSU4JMHg2MAorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMUxfVE9ORUdFTl9HQUlOCTB4NjEKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VUREFJXzFMX0lOREFJXzFMX0dBSU4JMHg2MgorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMUxfSU5EQUlfMVJfR0FJTgkweDYzCisjZGVmaW5lIERBNzIxOF9EUk9VVElOR19PVVREQUlfMVIJCTB4NjQKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VUREFJXzFSX0lORklMVF8xTF9HQUlOCTB4NjUKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VUREFJXzFSX0lORklMVF8xUl9HQUlOCTB4NjYKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VUREFJXzFSX0lORklMVF8yTF9HQUlOCTB4NjcKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VUREFJXzFSX0lORklMVF8yUl9HQUlOCTB4NjgKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VUREFJXzFSX1RPTkVHRU5fR0FJTgkweDY5CisjZGVmaW5lIERBNzIxOF9ETUlYX09VVERBSV8xUl9JTkRBSV8xTF9HQUlOCTB4NkEKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VUREFJXzFSX0lOREFJXzFSX0dBSU4JMHg2QgorI2RlZmluZSBEQTcyMThfRFJPVVRJTkdfT1VURklMVF8xTAkJMHg2QworI2RlZmluZSBEQTcyMThfRE1JWF9PVVRGSUxUXzFMX0lORklMVF8xTF9HQUlOCTB4NkQKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VURklMVF8xTF9JTkZJTFRfMVJfR0FJTgkweDZFCisjZGVmaW5lIERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5GSUxUXzJMX0dBSU4JMHg2RgorI2RlZmluZSBEQTcyMThfRE1JWF9PVVRGSUxUXzFMX0lORklMVF8yUl9HQUlOCTB4NzAKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VURklMVF8xTF9UT05FR0VOX0dBSU4JMHg3MQorI2RlZmluZSBEQTcyMThfRE1JWF9PVVRGSUxUXzFMX0lOREFJXzFMX0dBSU4JMHg3MgorI2RlZmluZSBEQTcyMThfRE1JWF9PVVRGSUxUXzFMX0lOREFJXzFSX0dBSU4JMHg3MworI2RlZmluZSBEQTcyMThfRFJPVVRJTkdfT1VURklMVF8xUgkJMHg3NAorI2RlZmluZSBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX0lORklMVF8xTF9HQUlOCTB4NzUKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VURklMVF8xUl9JTkZJTFRfMVJfR0FJTgkweDc2CisjZGVmaW5lIERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5GSUxUXzJMX0dBSU4JMHg3NworI2RlZmluZSBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX0lORklMVF8yUl9HQUlOCTB4NzgKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VURklMVF8xUl9UT05FR0VOX0dBSU4JMHg3OQorI2RlZmluZSBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX0lOREFJXzFMX0dBSU4JMHg3QQorI2RlZmluZSBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX0lOREFJXzFSX0dBSU4JMHg3QgorI2RlZmluZSBEQTcyMThfRFJPVVRJTkdfT1VUREFJXzJMCQkweDdDCisjZGVmaW5lIERBNzIxOF9ETUlYX09VVERBSV8yTF9JTkZJTFRfMUxfR0FJTgkweDdECisjZGVmaW5lIERBNzIxOF9ETUlYX09VVERBSV8yTF9JTkZJTFRfMVJfR0FJTgkweDdFCisjZGVmaW5lIERBNzIxOF9ETUlYX09VVERBSV8yTF9JTkZJTFRfMkxfR0FJTgkweDdGCisjZGVmaW5lIERBNzIxOF9ETUlYX09VVERBSV8yTF9JTkZJTFRfMlJfR0FJTgkweDgwCisjZGVmaW5lIERBNzIxOF9ETUlYX09VVERBSV8yTF9UT05FR0VOX0dBSU4JMHg4MQorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMkxfSU5EQUlfMUxfR0FJTgkweDgyCisjZGVmaW5lIERBNzIxOF9ETUlYX09VVERBSV8yTF9JTkRBSV8xUl9HQUlOCTB4ODMKKyNkZWZpbmUgREE3MjE4X0RST1VUSU5HX09VVERBSV8yUgkJMHg4NAorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5GSUxUXzFMX0dBSU4JMHg4NQorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5GSUxUXzFSX0dBSU4JMHg4NgorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5GSUxUXzJMX0dBSU4JMHg4NworI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5GSUxUXzJSX0dBSU4JMHg4OAorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMlJfVE9ORUdFTl9HQUlOCTB4ODkKKyNkZWZpbmUgREE3MjE4X0RNSVhfT1VUREFJXzJSX0lOREFJXzFMX0dBSU4JMHg4QQorI2RlZmluZSBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5EQUlfMVJfR0FJTgkweDhCCisjZGVmaW5lIERBNzIxOF9EQUlfQ1RSTAkJCQkweDhDCisjZGVmaW5lIERBNzIxOF9EQUlfVERNX0NUUkwJCQkweDhECisjZGVmaW5lIERBNzIxOF9EQUlfT0ZGU0VUX0xPV0VSCQkJMHg4RQorI2RlZmluZSBEQTcyMThfREFJX09GRlNFVF9VUFBFUgkJCTB4OEYKKyNkZWZpbmUgREE3MjE4X0RBSV9DTEtfTU9ERQkJCTB4OTAKKyNkZWZpbmUgREE3MjE4X1BMTF9DVFJMCQkJCTB4OTEKKyNkZWZpbmUgREE3MjE4X1BMTF9GUkFDX1RPUAkJCTB4OTIKKyNkZWZpbmUgREE3MjE4X1BMTF9GUkFDX0JPVAkJCTB4OTMKKyNkZWZpbmUgREE3MjE4X1BMTF9JTlRFR0VSCQkJMHg5NAorI2RlZmluZSBEQTcyMThfUExMX1NUQVRVUwkJCTB4OTUKKyNkZWZpbmUgREE3MjE4X1BMTF9SRUZPU0NfQ0FMCQkJMHg5OAorI2RlZmluZSBEQTcyMThfREFDX05HX0NUUkwJCQkweDlDCisjZGVmaW5lIERBNzIxOF9EQUNfTkdfU0VUVVBfVElNRQkJMHg5RAorI2RlZmluZSBEQTcyMThfREFDX05HX09GRl9USFJFU0gJCTB4OUUKKyNkZWZpbmUgREE3MjE4X0RBQ19OR19PTl9USFJFU0gJCQkweDlGCisjZGVmaW5lIERBNzIxOF9UT05FX0dFTl9DRkcxCQkJMHhBMAorI2RlZmluZSBEQTcyMThfVE9ORV9HRU5fQ0ZHMgkJCTB4QTEKKyNkZWZpbmUgREE3MjE4X1RPTkVfR0VOX0ZSRVExX0wJCQkweEEyCisjZGVmaW5lIERBNzIxOF9UT05FX0dFTl9GUkVRMV9VCQkJMHhBMworI2RlZmluZSBEQTcyMThfVE9ORV9HRU5fRlJFUTJfTAkJCTB4QTQKKyNkZWZpbmUgREE3MjE4X1RPTkVfR0VOX0ZSRVEyX1UJCQkweEE1CisjZGVmaW5lIERBNzIxOF9UT05FX0dFTl9DWUNMRVMJCQkweEE2CisjZGVmaW5lIERBNzIxOF9UT05FX0dFTl9PTl9QRVIJCQkweEE3CisjZGVmaW5lIERBNzIxOF9UT05FX0dFTl9PRkZfUEVSCQkJMHhBOAorI2RlZmluZSBEQTcyMThfQ1BfQ1RSTAkJCQkweEFDCisjZGVmaW5lIERBNzIxOF9DUF9ERUxBWQkJCQkweEFECisjZGVmaW5lIERBNzIxOF9DUF9WT0xfVEhSRVNIT0xEMQkJMHhBRQorI2RlZmluZSBEQTcyMThfTUlDXzFfQ1RSTAkJCTB4QjQKKyNkZWZpbmUgREE3MjE4X01JQ18xX0dBSU4JCQkweEI1CisjZGVmaW5lIERBNzIxOF9NSUNfMV9TRUxFQ1QJCQkweEI3CisjZGVmaW5lIERBNzIxOF9NSUNfMl9DVFJMCQkJMHhCOAorI2RlZmluZSBEQTcyMThfTUlDXzJfR0FJTgkJCTB4QjkKKyNkZWZpbmUgREE3MjE4X01JQ18yX1NFTEVDVAkJCTB4QkIKKyNkZWZpbmUgREE3MjE4X0lOXzFfSFBGX0ZJTFRFUl9DVFJMCQkweEJDCisjZGVmaW5lIERBNzIxOF9JTl8yX0hQRl9GSUxURVJfQ1RSTAkJMHhCRAorI2RlZmluZSBEQTcyMThfQURDXzFfQ1RSTAkJCTB4QzAKKyNkZWZpbmUgREE3MjE4X0FEQ18yX0NUUkwJCQkweEMxCisjZGVmaW5lIERBNzIxOF9BRENfTU9ERQkJCQkweEMyCisjZGVmaW5lIERBNzIxOF9NSVhPVVRfTF9DVFJMCQkJMHhDQworI2RlZmluZSBEQTcyMThfTUlYT1VUX0xfR0FJTgkJCTB4Q0QKKyNkZWZpbmUgREE3MjE4X01JWE9VVF9SX0NUUkwJCQkweENFCisjZGVmaW5lIERBNzIxOF9NSVhPVVRfUl9HQUlOCQkJMHhDRgorI2RlZmluZSBEQTcyMThfSFBfTF9DVFJMCQkJMHhEMAorI2RlZmluZSBEQTcyMThfSFBfTF9HQUlOCQkJMHhEMQorI2RlZmluZSBEQTcyMThfSFBfUl9DVFJMCQkJMHhEMgorI2RlZmluZSBEQTcyMThfSFBfUl9HQUlOCQkJMHhEMworI2RlZmluZSBEQTcyMThfSFBfU05HTF9DVFJMCQkJMHhENAorI2RlZmluZSBEQTcyMThfSFBfRElGRl9DVFJMCQkJMHhENQorI2RlZmluZSBEQTcyMThfSFBfRElGRl9VTkxPQ0sJCQkweEQ3CisjZGVmaW5lIERBNzIxOF9IUExERVRfSkFDSwkJCTB4RDgKKyNkZWZpbmUgREE3MjE4X0hQTERFVF9DVFJMCQkJMHhEOQorI2RlZmluZSBEQTcyMThfSFBMREVUX1RFU1QJCQkweERBCisjZGVmaW5lIERBNzIxOF9SRUZFUkVOQ0VTCQkJMHhEQworI2RlZmluZSBEQTcyMThfSU9fQ1RSTAkJCQkweEUwCisjZGVmaW5lIERBNzIxOF9MRE9fQ1RSTAkJCQkweEUxCisjZGVmaW5lIERBNzIxOF9TSURFVE9ORV9DVFJMCQkJMHhFNAorI2RlZmluZSBEQTcyMThfU0lERVRPTkVfSU5fU0VMRUNUCQkweEU1CisjZGVmaW5lIERBNzIxOF9TSURFVE9ORV9HQUlOCQkJMHhFNgorI2RlZmluZSBEQTcyMThfRFJPVVRJTkdfU1RfT1VURklMVF8xTAkJMHhFOAorI2RlZmluZSBEQTcyMThfRFJPVVRJTkdfU1RfT1VURklMVF8xUgkJMHhFOQorI2RlZmluZSBEQTcyMThfU0lERVRPTkVfQklRXzNTVEFHRV9EQVRBCQkweEVBCisjZGVmaW5lIERBNzIxOF9TSURFVE9ORV9CSVFfM1NUQUdFX0FERFIJCTB4RUIKKyNkZWZpbmUgREE3MjE4X0VWRU5UX1NUQVRVUwkJCTB4RUMKKyNkZWZpbmUgREE3MjE4X0VWRU5UCQkJCTB4RUQKKyNkZWZpbmUgREE3MjE4X0VWRU5UX01BU0sJCQkweEVFCisjZGVmaW5lIERBNzIxOF9ETUlDXzFfQ1RSTAkJCTB4RjAKKyNkZWZpbmUgREE3MjE4X0RNSUNfMl9DVFJMCQkJMHhGMQorI2RlZmluZSBEQTcyMThfSU5fMUxfR0FJTgkJCTB4RjQKKyNkZWZpbmUgREE3MjE4X0lOXzFSX0dBSU4JCQkweEY1CisjZGVmaW5lIERBNzIxOF9JTl8yTF9HQUlOCQkJMHhGNgorI2RlZmluZSBEQTcyMThfSU5fMlJfR0FJTgkJCTB4RjcKKyNkZWZpbmUgREE3MjE4X09VVF8xTF9HQUlOCQkJMHhGOAorI2RlZmluZSBEQTcyMThfT1VUXzFSX0dBSU4JCQkweEY5CisjZGVmaW5lIERBNzIxOF9NSUNCSUFTX0NUUkwJCQkweEZDCisjZGVmaW5lIERBNzIxOF9NSUNCSUFTX0VOCQkJMHhGRAorCisKKy8qCisgKiBCaXQgRmllbGRzCisgKi8KKworI2RlZmluZSBEQTcyMThfU1dJVENIX0VOX01BWAkJMHgxCisKKy8qIERBNzIxOF9TWVNURU1fQUNUSVZFID0gMHgwICovCisjZGVmaW5lIERBNzIxOF9TWVNURU1fQUNUSVZFX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X1NZU1RFTV9BQ1RJVkVfTUFTSwkoMHgxIDw8IDApCisKKy8qIERBNzIxOF9DSUZfQ1RSTCA9IDB4MSAqLworI2RlZmluZSBEQTcyMThfQ0lGX0kyQ19XUklURV9NT0RFX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0NJRl9JMkNfV1JJVEVfTU9ERV9NQVNLCSgweDEgPDwgMCkKKworLyogREE3MjE4X0NISVBfSUQxID0gMHg0ICovCisjZGVmaW5lIERBNzIxOF9DSElQX0lEMV9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9DSElQX0lEMV9NQVNLCSgweEZGIDw8IDApCisKKy8qIERBNzIxOF9DSElQX0lEMiA9IDB4NSAqLworI2RlZmluZSBEQTcyMThfQ0hJUF9JRDJfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQ0hJUF9JRDJfTUFTSwkoMHhGRiA8PCAwKQorCisvKiBEQTcyMThfQ0hJUF9SRVZJU0lPTiA9IDB4NiAqLworI2RlZmluZSBEQTcyMThfQ0hJUF9NSU5PUl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9DSElQX01JTk9SX01BU0sJKDB4RiA8PCAwKQorI2RlZmluZSBEQTcyMThfQ0hJUF9NQUpPUl9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9DSElQX01BSk9SX01BU0sJKDB4RiA8PCA0KQorCisvKiBEQTcyMThfU1BBUkUxID0gMHg3ICovCisjZGVmaW5lIERBNzIxOF9TUEFSRTFfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfU1BBUkUxX01BU0sJKDB4RkYgPDwgMCkKKworLyogREE3MjE4X1NUQVRVUzEgPSAweDggKi8KKyNkZWZpbmUgREE3MjE4X1NUQVRVU19TUEFSRTFfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfU1RBVFVTX1NQQVJFMV9NQVNLCSgweEZGIDw8IDApCisKKy8qIERBNzIxOF9TT0ZUX1JFU0VUID0gMHg5ICovCisjZGVmaW5lIERBNzIxOF9DSUZfUkVHX1NPRlRfUkVTRVRfU0hJRlQJNworI2RlZmluZSBEQTcyMThfQ0lGX1JFR19TT0ZUX1JFU0VUX01BU0sJKDB4MSA8PCA3KQorCisvKiBEQTcyMThfU1IgPSAweEIgKi8KKyNkZWZpbmUgREE3MjE4X1NSX0FEQ19TSElGVAkwCisjZGVmaW5lIERBNzIxOF9TUl9BRENfTUFTSwkoMHhGIDw8IDApCisjZGVmaW5lIERBNzIxOF9TUl9EQUNfU0hJRlQJNAorI2RlZmluZSBEQTcyMThfU1JfREFDX01BU0sJKDB4RiA8PCA0KQorI2RlZmluZSBEQTcyMThfU1JfODAwMAkJMHgwMQorI2RlZmluZSBEQTcyMThfU1JfMTEwMjUJCTB4MDIKKyNkZWZpbmUgREE3MjE4X1NSXzEyMDAwCQkweDAzCisjZGVmaW5lIERBNzIxOF9TUl8xNjAwMAkJMHgwNQorI2RlZmluZSBEQTcyMThfU1JfMjIwNTAJCTB4MDYKKyNkZWZpbmUgREE3MjE4X1NSXzI0MDAwCQkweDA3CisjZGVmaW5lIERBNzIxOF9TUl8zMjAwMAkJMHgwOQorI2RlZmluZSBEQTcyMThfU1JfNDQxMDAJCTB4MEEKKyNkZWZpbmUgREE3MjE4X1NSXzQ4MDAwCQkweDBCCisjZGVmaW5lIERBNzIxOF9TUl84ODIwMAkJMHgwRQorI2RlZmluZSBEQTcyMThfU1JfOTYwMDAJCTB4MEYKKworLyogREE3MjE4X1BDX0NPVU5UID0gMHhDICovCisjZGVmaW5lIERBNzIxOF9QQ19GUkVFUlVOX1NISUZUCQkwCisjZGVmaW5lIERBNzIxOF9QQ19GUkVFUlVOX01BU0sJCSgweDEgPDwgMCkKKyNkZWZpbmUgREE3MjE4X1BDX1JFU1lOQ19BVVRPX1NISUZUCTEKKyNkZWZpbmUgREE3MjE4X1BDX1JFU1lOQ19BVVRPX01BU0sJKDB4MSA8PCAxKQorCisvKiBEQTcyMThfR0FJTl9SQU1QX0NUUkwgPSAweEQgKi8KKyNkZWZpbmUgREE3MjE4X0dBSU5fUkFNUF9SQVRFX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0dBSU5fUkFNUF9SQVRFX01BU0sJKDB4MyA8PCAwKQorI2RlZmluZSBEQTcyMThfR0FJTl9SQU1QX1JBVEVfTUFYCTQKKworLyogREE3MjE4X0NJRl9USU1FT1VUX0NUUkwgPSAweDEwICovCisjZGVmaW5lIERBNzIxOF9JMkNfVElNRU9VVF9FTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9JMkNfVElNRU9VVF9FTl9NQVNLCSgweDEgPDwgMCkKKworLyogREE3MjE4X1NZU1RFTV9NT0RFU19JTlBVVCA9IDB4MTQgKi8KKyNkZWZpbmUgREE3MjE4X01PREVfU1VCTUlUX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X01PREVfU1VCTUlUX01BU0sJCSgweDEgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0FEQ19NT0RFX1NISUZUCQkxCisjZGVmaW5lIERBNzIxOF9BRENfTU9ERV9NQVNLCQkoMHg3RiA8PCAxKQorCisvKiBEQTcyMThfU1lTVEVNX01PREVTX09VVFBVVCA9IDB4MTUgKi8KKyNkZWZpbmUgREE3MjE4X01PREVfU1VCTUlUX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X01PREVfU1VCTUlUX01BU0sJCSgweDEgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RBQ19NT0RFX1NISUZUCQkxCisjZGVmaW5lIERBNzIxOF9EQUNfTU9ERV9NQVNLCQkoMHg3RiA8PCAxKQorCisvKiBEQTcyMThfU1lTVEVNX1NUQVRVUyA9IDB4MTYgKi8KKyNkZWZpbmUgREE3MjE4X1NDMV9CVVNZX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X1NDMV9CVVNZX01BU0sJKDB4MSA8PCAwKQorI2RlZmluZSBEQTcyMThfU0MyX0JVU1lfU0hJRlQJMQorI2RlZmluZSBEQTcyMThfU0MyX0JVU1lfTUFTSwkoMHgxIDw8IDEpCisKKy8qIERBNzIxOF9JTl8xTF9GSUxURVJfQ1RSTCA9IDB4MTggKi8KKyNkZWZpbmUgREE3MjE4X0lOXzFMX1JBTVBfRU5fU0hJRlQJNQorI2RlZmluZSBEQTcyMThfSU5fMUxfUkFNUF9FTl9NQVNLCSgweDEgPDwgNSkKKyNkZWZpbmUgREE3MjE4X0lOXzFMX01VVEVfRU5fU0hJRlQJNgorI2RlZmluZSBEQTcyMThfSU5fMUxfTVVURV9FTl9NQVNLCSgweDEgPDwgNikKKyNkZWZpbmUgREE3MjE4X0lOXzFMX0ZJTFRFUl9FTl9TSElGVAk3CisjZGVmaW5lIERBNzIxOF9JTl8xTF9GSUxURVJfRU5fTUFTSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9JTl8xUl9GSUxURVJfQ1RSTCA9IDB4MTkgKi8KKyNkZWZpbmUgREE3MjE4X0lOXzFSX1JBTVBfRU5fU0hJRlQJNQorI2RlZmluZSBEQTcyMThfSU5fMVJfUkFNUF9FTl9NQVNLCSgweDEgPDwgNSkKKyNkZWZpbmUgREE3MjE4X0lOXzFSX01VVEVfRU5fU0hJRlQJNgorI2RlZmluZSBEQTcyMThfSU5fMVJfTVVURV9FTl9NQVNLCSgweDEgPDwgNikKKyNkZWZpbmUgREE3MjE4X0lOXzFSX0ZJTFRFUl9FTl9TSElGVAk3CisjZGVmaW5lIERBNzIxOF9JTl8xUl9GSUxURVJfRU5fTUFTSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9JTl8yTF9GSUxURVJfQ1RSTCA9IDB4MUEgKi8KKyNkZWZpbmUgREE3MjE4X0lOXzJMX1JBTVBfRU5fU0hJRlQJNQorI2RlZmluZSBEQTcyMThfSU5fMkxfUkFNUF9FTl9NQVNLCSgweDEgPDwgNSkKKyNkZWZpbmUgREE3MjE4X0lOXzJMX01VVEVfRU5fU0hJRlQJNgorI2RlZmluZSBEQTcyMThfSU5fMkxfTVVURV9FTl9NQVNLCSgweDEgPDwgNikKKyNkZWZpbmUgREE3MjE4X0lOXzJMX0ZJTFRFUl9FTl9TSElGVAk3CisjZGVmaW5lIERBNzIxOF9JTl8yTF9GSUxURVJfRU5fTUFTSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9JTl8yUl9GSUxURVJfQ1RSTCA9IDB4MUIgKi8KKyNkZWZpbmUgREE3MjE4X0lOXzJSX1JBTVBfRU5fU0hJRlQJNQorI2RlZmluZSBEQTcyMThfSU5fMlJfUkFNUF9FTl9NQVNLCSgweDEgPDwgNSkKKyNkZWZpbmUgREE3MjE4X0lOXzJSX01VVEVfRU5fU0hJRlQJNgorI2RlZmluZSBEQTcyMThfSU5fMlJfTVVURV9FTl9NQVNLCSgweDEgPDwgNikKKyNkZWZpbmUgREE3MjE4X0lOXzJSX0ZJTFRFUl9FTl9TSElGVAk3CisjZGVmaW5lIERBNzIxOF9JTl8yUl9GSUxURVJfRU5fTUFTSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9PVVRfMUxfRklMVEVSX0NUUkwgPSAweDIwICovCisjZGVmaW5lIERBNzIxOF9PVVRfMUxfQklRXzVTVEFHRV9TRUxfU0hJRlQJMworI2RlZmluZSBEQTcyMThfT1VUXzFMX0JJUV81U1RBR0VfU0VMX01BU0sJKDB4MSA8PCAzKQorI2RlZmluZSBEQTcyMThfT1VUX0JJUV81U1RBR0VfU0VMX01BWAkJMgorI2RlZmluZSBEQTcyMThfT1VUXzFMX1NVQlJBTkdFX0VOX1NISUZUCQk0CisjZGVmaW5lIERBNzIxOF9PVVRfMUxfU1VCUkFOR0VfRU5fTUFTSwkJKDB4MSA8PCA0KQorI2RlZmluZSBEQTcyMThfT1VUXzFMX1JBTVBfRU5fU0hJRlQJCTUKKyNkZWZpbmUgREE3MjE4X09VVF8xTF9SQU1QX0VOX01BU0sJCSgweDEgPDwgNSkKKyNkZWZpbmUgREE3MjE4X09VVF8xTF9NVVRFX0VOX1NISUZUCQk2CisjZGVmaW5lIERBNzIxOF9PVVRfMUxfTVVURV9FTl9NQVNLCQkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9PVVRfMUxfRklMVEVSX0VOX1NISUZUCQk3CisjZGVmaW5lIERBNzIxOF9PVVRfMUxfRklMVEVSX0VOX01BU0sJCSgweDEgPDwgNykKKworLyogREE3MjE4X09VVF8xUl9GSUxURVJfQ1RSTCA9IDB4MjEgKi8KKyNkZWZpbmUgREE3MjE4X09VVF8xUl9CSVFfNVNUQUdFX1NFTF9TSElGVAkzCisjZGVmaW5lIERBNzIxOF9PVVRfMVJfQklRXzVTVEFHRV9TRUxfTUFTSwkoMHgxIDw8IDMpCisjZGVmaW5lIERBNzIxOF9PVVRfMVJfU1VCUkFOR0VfRU5fU0hJRlQJCTQKKyNkZWZpbmUgREE3MjE4X09VVF8xUl9TVUJSQU5HRV9FTl9NQVNLCQkoMHgxIDw8IDQpCisjZGVmaW5lIERBNzIxOF9PVVRfMVJfUkFNUF9FTl9TSElGVAkJNQorI2RlZmluZSBEQTcyMThfT1VUXzFSX1JBTVBfRU5fTUFTSwkJKDB4MSA8PCA1KQorI2RlZmluZSBEQTcyMThfT1VUXzFSX01VVEVfRU5fU0hJRlQJCTYKKyNkZWZpbmUgREE3MjE4X09VVF8xUl9NVVRFX0VOX01BU0sJCSgweDEgPDwgNikKKyNkZWZpbmUgREE3MjE4X09VVF8xUl9GSUxURVJfRU5fU0hJRlQJCTcKKyNkZWZpbmUgREE3MjE4X09VVF8xUl9GSUxURVJfRU5fTUFTSwkJKDB4MSA8PCA3KQorCisvKiBEQTcyMThfT1VUXzFfSFBGX0ZJTFRFUl9DVFJMID0gMHgyNCAqLworI2RlZmluZSBEQTcyMThfT1VUXzFfVk9JQ0VfSFBGX0NPUk5FUl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRfMV9WT0lDRV9IUEZfQ09STkVSX01BU0sJKDB4NyA8PCAwKQorI2RlZmluZSBEQTcyMThfVk9JQ0VfSFBGX0NPUk5FUl9NQVgJCTgKKyNkZWZpbmUgREE3MjE4X09VVF8xX1ZPSUNFX0VOX1NISUZUCQkzCisjZGVmaW5lIERBNzIxOF9PVVRfMV9WT0lDRV9FTl9NQVNLCQkoMHgxIDw8IDMpCisjZGVmaW5lIERBNzIxOF9PVVRfMV9BVURJT19IUEZfQ09STkVSX1NISUZUCTQKKyNkZWZpbmUgREE3MjE4X09VVF8xX0FVRElPX0hQRl9DT1JORVJfTUFTSwkoMHgzIDw8IDQpCisjZGVmaW5lIERBNzIxOF9BVURJT19IUEZfQ09STkVSX01BWAkJNAorI2RlZmluZSBEQTcyMThfT1VUXzFfSFBGX0VOX1NISUZUCQk3CisjZGVmaW5lIERBNzIxOF9PVVRfMV9IUEZfRU5fTUFTSwkJKDB4MSA8PCA3KQorI2RlZmluZSBEQTcyMThfSFBGX01PREVfU0hJRlQJCQkwCisjZGVmaW5lIERBNzIxOF9IUEZfRElTQUJMRUQJCQkoKDB4MCA8PCAzKSB8ICgweDAgPDwgNykpCisjZGVmaW5lIERBNzIxOF9IUEZfQVVESU9fRU4JCQkoKDB4MCA8PCAzKSB8ICgweDEgPDwgNykpCisjZGVmaW5lIERBNzIxOF9IUEZfVk9JQ0VfRU4JCQkoKDB4MSA8PCAzKSB8ICgweDEgPDwgNykpCisjZGVmaW5lIERBNzIxOF9IUEZfTU9ERV9NQVNLCQkJKCgweDEgPDwgMykgfCAoMHgxIDw8IDcpKQorI2RlZmluZSBEQTcyMThfSFBGX01PREVfTUFYCQkJMworCisvKiBEQTcyMThfT1VUXzFfRVFfMTJfRklMVEVSX0NUUkwgPSAweDI1ICovCisjZGVmaW5lIERBNzIxOF9PVVRfMV9FUV9CQU5EMV9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRfMV9FUV9CQU5EMV9NQVNLCSgweEYgPDwgMCkKKyNkZWZpbmUgREE3MjE4X09VVF9FUV9CQU5EX01BWAkJMHhGCisjZGVmaW5lIERBNzIxOF9PVVRfMV9FUV9CQU5EMl9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9PVVRfMV9FUV9CQU5EMl9NQVNLCSgweEYgPDwgNCkKKworLyogREE3MjE4X09VVF8xX0VRXzM0X0ZJTFRFUl9DVFJMID0gMHgyNiAqLworI2RlZmluZSBEQTcyMThfT1VUXzFfRVFfQkFORDNfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUXzFfRVFfQkFORDNfTUFTSwkoMHhGIDw8IDApCisjZGVmaW5lIERBNzIxOF9PVVRfMV9FUV9CQU5ENF9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9PVVRfMV9FUV9CQU5ENF9NQVNLCSgweEYgPDwgNCkKKworLyogREE3MjE4X09VVF8xX0VRXzVfRklMVEVSX0NUUkwgPSAweDI3ICovCisjZGVmaW5lIERBNzIxOF9PVVRfMV9FUV9CQU5ENV9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRfMV9FUV9CQU5ENV9NQVNLCSgweEYgPDwgMCkKKyNkZWZpbmUgREE3MjE4X09VVF8xX0VRX0VOX1NISUZUCTcKKyNkZWZpbmUgREE3MjE4X09VVF8xX0VRX0VOX01BU0sJCSgweDEgPDwgNykKKworLyogREE3MjE4X09VVF8xX0JJUV81U1RBR0VfQ1RSTCA9IDB4MjggKi8KKyNkZWZpbmUgREE3MjE4X09VVF8xX0JJUV81U1RBR0VfTVVURV9FTl9TSElGVAk2CisjZGVmaW5lIERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX01VVEVfRU5fTUFTSwkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0ZJTFRFUl9FTl9TSElGVAk3CisjZGVmaW5lIERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0ZJTFRFUl9FTl9NQVNLCSgweDEgPDwgNykKKworLyogREE3MjE4X09VVF8xX0JJUV81U1RBR0VfREFUQSA9IDB4MjkgKi8KKyNkZWZpbmUgREE3MjE4X09VVF8xX0JJUV81U1RBR0VfREFUQV9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0RBVEFfTUFTSwkoMHhGRiA8PCAwKQorCisvKiBEQTcyMThfT1VUXzFfQklRXzVTVEFHRV9BRERSID0gMHgyQSAqLworI2RlZmluZSBEQTcyMThfT1VUXzFfQklRXzVTVEFHRV9BRERSX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVF8xX0JJUV81U1RBR0VfQUREUl9NQVNLCSgweDNGIDw8IDApCisjZGVmaW5lIERBNzIxOF9PVVRfMV9CSVFfNVNUQUdFX0NGR19TSVpFCTUwCisKKy8qIERBNzIxOF9NSVhJTl8xX0NUUkwgPSAweDJDICovCisjZGVmaW5lIERBNzIxOF9NSVhJTl8xX01JWF9TRUxfU0hJRlQJCTMKKyNkZWZpbmUgREE3MjE4X01JWElOXzFfTUlYX1NFTF9NQVNLCQkoMHgxIDw8IDMpCisjZGVmaW5lIERBNzIxOF9NSVhJTl8xX0FNUF9aQ19FTl9TSElGVAkJNAorI2RlZmluZSBEQTcyMThfTUlYSU5fMV9BTVBfWkNfRU5fTUFTSwkJKDB4MSA8PCA0KQorI2RlZmluZSBEQTcyMThfTUlYSU5fMV9BTVBfUkFNUF9FTl9TSElGVAk1CisjZGVmaW5lIERBNzIxOF9NSVhJTl8xX0FNUF9SQU1QX0VOX01BU0sJCSgweDEgPDwgNSkKKyNkZWZpbmUgREE3MjE4X01JWElOXzFfQU1QX01VVEVfRU5fU0hJRlQJNgorI2RlZmluZSBEQTcyMThfTUlYSU5fMV9BTVBfTVVURV9FTl9NQVNLCQkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9NSVhJTl8xX0FNUF9FTl9TSElGVAkJNworI2RlZmluZSBEQTcyMThfTUlYSU5fMV9BTVBfRU5fTUFTSwkJKDB4MSA8PCA3KQorCisvKiBEQTcyMThfTUlYSU5fMV9HQUlOID0gMHgyRCAqLworI2RlZmluZSBEQTcyMThfTUlYSU5fMV9BTVBfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9NSVhJTl8xX0FNUF9HQUlOX01BU0sJKDB4RiA8PCAwKQorI2RlZmluZSBEQTcyMThfTUlYSU5fQU1QX0dBSU5fTUFYCTB4RgorCisvKiBEQTcyMThfTUlYSU5fMl9DVFJMID0gMHgyRSAqLworI2RlZmluZSBEQTcyMThfTUlYSU5fMl9NSVhfU0VMX1NISUZUCQkzCisjZGVmaW5lIERBNzIxOF9NSVhJTl8yX01JWF9TRUxfTUFTSwkJKDB4MSA8PCAzKQorI2RlZmluZSBEQTcyMThfTUlYSU5fMl9BTVBfWkNfRU5fU0hJRlQJCTQKKyNkZWZpbmUgREE3MjE4X01JWElOXzJfQU1QX1pDX0VOX01BU0sJCSgweDEgPDwgNCkKKyNkZWZpbmUgREE3MjE4X01JWElOXzJfQU1QX1JBTVBfRU5fU0hJRlQJNQorI2RlZmluZSBEQTcyMThfTUlYSU5fMl9BTVBfUkFNUF9FTl9NQVNLCQkoMHgxIDw8IDUpCisjZGVmaW5lIERBNzIxOF9NSVhJTl8yX0FNUF9NVVRFX0VOX1NISUZUCTYKKyNkZWZpbmUgREE3MjE4X01JWElOXzJfQU1QX01VVEVfRU5fTUFTSwkJKDB4MSA8PCA2KQorI2RlZmluZSBEQTcyMThfTUlYSU5fMl9BTVBfRU5fU0hJRlQJCTcKKyNkZWZpbmUgREE3MjE4X01JWElOXzJfQU1QX0VOX01BU0sJCSgweDEgPDwgNykKKworLyogREE3MjE4X01JWElOXzJfR0FJTiA9IDB4MkYgKi8KKyNkZWZpbmUgREE3MjE4X01JWElOXzJfQU1QX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfTUlYSU5fMl9BTVBfR0FJTl9NQVNLCSgweEYgPDwgMCkKKworLyogREE3MjE4X0FMQ19DVFJMMSA9IDB4MzAgKi8KKyNkZWZpbmUgREE3MjE4X0FMQ19FTl9TSElGVAkJMAorI2RlZmluZSBEQTcyMThfQUxDX0VOX01BU0sJCSgweEYgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0FMQ19DSEFOMV9MX0VOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0FMQ19DSEFOMV9SX0VOX1NISUZUCTEKKyNkZWZpbmUgREE3MjE4X0FMQ19DSEFOMl9MX0VOX1NISUZUCTIKKyNkZWZpbmUgREE3MjE4X0FMQ19DSEFOMl9SX0VOX1NISUZUCTMKKyNkZWZpbmUgREE3MjE4X0FMQ19TWU5DX01PREVfU0hJRlQJNAorI2RlZmluZSBEQTcyMThfQUxDX1NZTkNfTU9ERV9NQVNLCSgweEYgPDwgNCkKKyNkZWZpbmUgREE3MjE4X0FMQ19TWU5DX01PREVfQ0gxCSgweDEgPDwgNCkKKyNkZWZpbmUgREE3MjE4X0FMQ19TWU5DX01PREVfQ0gyCSgweDQgPDwgNCkKKworLyogREE3MjE4X0FMQ19DVFJMMiA9IDB4MzEgKi8KKyNkZWZpbmUgREE3MjE4X0FMQ19BVFRBQ0tfU0hJRlQJCTAKKyNkZWZpbmUgREE3MjE4X0FMQ19BVFRBQ0tfTUFTSwkJKDB4RiA8PCAwKQorI2RlZmluZSBEQTcyMThfQUxDX0FUVEFDS19NQVgJCTEzCisjZGVmaW5lIERBNzIxOF9BTENfUkVMRUFTRV9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9BTENfUkVMRUFTRV9NQVNLCQkoMHhGIDw8IDQpCisjZGVmaW5lIERBNzIxOF9BTENfUkVMRUFTRV9NQVgJCTExCisKKy8qIERBNzIxOF9BTENfQ1RSTDMgPSAweDMyICovCisjZGVmaW5lIERBNzIxOF9BTENfSE9MRF9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9BTENfSE9MRF9NQVNLCSgweEYgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0FMQ19IT0xEX01BWAkxNgorCisvKiBEQTcyMThfQUxDX05PSVNFID0gMHgzMyAqLworI2RlZmluZSBEQTcyMThfQUxDX05PSVNFX1NISUZUCQkwCisjZGVmaW5lIERBNzIxOF9BTENfTk9JU0VfTUFTSwkJKDB4M0YgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0FMQ19USFJFU0hPTERfTUFYCTB4M0YKKworLyogREE3MjE4X0FMQ19UQVJHRVRfTUlOID0gMHgzNCAqLworI2RlZmluZSBEQTcyMThfQUxDX1RIUkVTSE9MRF9NSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQUxDX1RIUkVTSE9MRF9NSU5fTUFTSwkoMHgzRiA8PCAwKQorCisvKiBEQTcyMThfQUxDX1RBUkdFVF9NQVggPSAweDM1ICovCisjZGVmaW5lIERBNzIxOF9BTENfVEhSRVNIT0xEX01BWF9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9BTENfVEhSRVNIT0xEX01BWF9NQVNLCSgweDNGIDw8IDApCisKKy8qIERBNzIxOF9BTENfR0FJTl9MSU1JVFMgPSAweDM2ICovCisjZGVmaW5lIERBNzIxOF9BTENfQVRURU5fTUFYX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0FMQ19BVFRFTl9NQVhfTUFTSwkoMHhGIDw8IDApCisjZGVmaW5lIERBNzIxOF9BTENfQVRURU5fR0FJTl9NQVgJMHhGCisjZGVmaW5lIERBNzIxOF9BTENfR0FJTl9NQVhfU0hJRlQJNAorI2RlZmluZSBEQTcyMThfQUxDX0dBSU5fTUFYX01BU0sJKDB4RiA8PCA0KQorCisvKiBEQTcyMThfQUxDX0FOQV9HQUlOX0xJTUlUUyA9IDB4MzcgKi8KKyNkZWZpbmUgREE3MjE4X0FMQ19BTkFfR0FJTl9NSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQUxDX0FOQV9HQUlOX01JTl9NQVNLCSgweDcgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0FMQ19BTkFfR0FJTl9NSU4JCTB4MQorI2RlZmluZSBEQTcyMThfQUxDX0FOQV9HQUlOX01BWAkJMHg3CisjZGVmaW5lIERBNzIxOF9BTENfQU5BX0dBSU5fTUFYX1NISUZUCTQKKyNkZWZpbmUgREE3MjE4X0FMQ19BTkFfR0FJTl9NQVhfTUFTSwkoMHg3IDw8IDQpCisKKy8qIERBNzIxOF9BTENfQU5USUNMSVBfQ1RSTCA9IDB4MzggKi8KKyNkZWZpbmUgREE3MjE4X0FMQ19BTlRJQ0xJUF9TVEVQX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0FMQ19BTlRJQ0xJUF9TVEVQX01BU0sJKDB4MyA8PCAwKQorI2RlZmluZSBEQTcyMThfQUxDX0FOVElDTElQX1NURVBfTUFYCTQKKyNkZWZpbmUgREE3MjE4X0FMQ19BTlRJQ0xJUF9FTl9TSElGVAk3CisjZGVmaW5lIERBNzIxOF9BTENfQU5USUNMSVBfRU5fTUFTSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9BR1NfRU5BQkxFID0gMHgzQyAqLworI2RlZmluZSBEQTcyMThfQUdTX0VOQUJMRV9TSElGVAkJMAorI2RlZmluZSBEQTcyMThfQUdTX0VOQUJMRV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lIERBNzIxOF9BR1NfRU5BQkxFX0NIQU4xX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0FHU19FTkFCTEVfQ0hBTjJfU0hJRlQJMQorCisvKiBEQTcyMThfQUdTX1RSSUdHRVIgPSAweDNEICovCisjZGVmaW5lIERBNzIxOF9BR1NfVFJJR0dFUl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9BR1NfVFJJR0dFUl9NQVNLCQkoMHhGIDw8IDApCisjZGVmaW5lIERBNzIxOF9BR1NfVFJJR0dFUl9NQVgJCTB4RgorCisvKiBEQTcyMThfQUdTX0FUVF9NQVggPSAweDNFICovCisjZGVmaW5lIERBNzIxOF9BR1NfQVRUX01BWF9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9BR1NfQVRUX01BWF9NQVNLCQkoMHg3IDw8IDApCisjZGVmaW5lIERBNzIxOF9BR1NfQVRUX01BWF9NQVgJCTB4NworCisvKiBEQTcyMThfQUdTX1RJTUVPVVQgPSAweDNGICovCisjZGVmaW5lIERBNzIxOF9BR1NfVElNRU9VVF9FTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9BR1NfVElNRU9VVF9FTl9NQVNLCSgweDEgPDwgMCkKKworLyogREE3MjE4X0FHU19BTlRJQ0xJUF9DVFJMID0gMHg0MCAqLworI2RlZmluZSBEQTcyMThfQUdTX0FOVElDTElQX0VOX1NISUZUCTcKKyNkZWZpbmUgREE3MjE4X0FHU19BTlRJQ0xJUF9FTl9NQVNLCSgweDEgPDwgNykKKworLyogREE3MjE4X0NBTElCX0NUUkwgPSAweDQ0ICovCisjZGVmaW5lIERBNzIxOF9DQUxJQl9PRkZTRVRfRU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQ0FMSUJfT0ZGU0VUX0VOX01BU0sJKDB4MSA8PCAwKQorI2RlZmluZSBEQTcyMThfQ0FMSUJfQVVUT19FTl9TSElGVAkyCisjZGVmaW5lIERBNzIxOF9DQUxJQl9BVVRPX0VOX01BU0sJKDB4MSA8PCAyKQorI2RlZmluZSBEQTcyMThfQ0FMSUJfT1ZFUkZMT1dfU0hJRlQJMworI2RlZmluZSBEQTcyMThfQ0FMSUJfT1ZFUkZMT1dfTUFTSwkoMHgxIDw8IDMpCisKKy8qIERBNzIxOF9DQUxJQl9PRkZTRVRfQVVUT19NXzEgPSAweDQ1ICovCisjZGVmaW5lIERBNzIxOF9DQUxJQl9PRkZTRVRfQVVUT19NXzFfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQ0FMSUJfT0ZGU0VUX0FVVE9fTV8xX01BU0sJKDB4RkYgPDwgMCkKKworLyogREE3MjE4X0NBTElCX09GRlNFVF9BVVRPX1VfMSA9IDB4NDYgKi8KKyNkZWZpbmUgREE3MjE4X0NBTElCX09GRlNFVF9BVVRPX1VfMV9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9DQUxJQl9PRkZTRVRfQVVUT19VXzFfTUFTSwkoMHhGIDw8IDApCisKKy8qIERBNzIxOF9DQUxJQl9PRkZTRVRfQVVUT19NXzIgPSAweDQ3ICovCisjZGVmaW5lIERBNzIxOF9DQUxJQl9PRkZTRVRfQVVUT19NXzJfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQ0FMSUJfT0ZGU0VUX0FVVE9fTV8yX01BU0sJKDB4RkYgPDwgMCkKKworLyogREE3MjE4X0NBTElCX09GRlNFVF9BVVRPX1VfMiA9IDB4NDggKi8KKyNkZWZpbmUgREE3MjE4X0NBTElCX09GRlNFVF9BVVRPX1VfMl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9DQUxJQl9PRkZTRVRfQVVUT19VXzJfTUFTSwkoMHhGIDw8IDApCisKKy8qIERBNzIxOF9FTlZfVFJBQ0tfQ1RSTCA9IDB4NEMgKi8KKyNkZWZpbmUgREE3MjE4X0lOVEVHX0FUVEFDS19TSElGVAkwCisjZGVmaW5lIERBNzIxOF9JTlRFR19BVFRBQ0tfTUFTSwkoMHgzIDw8IDApCisjZGVmaW5lIERBNzIxOF9JTlRFR19SRUxFQVNFX1NISUZUCTQKKyNkZWZpbmUgREE3MjE4X0lOVEVHX1JFTEVBU0VfTUFTSwkoMHgzIDw8IDQpCisjZGVmaW5lIERBNzIxOF9JTlRFR19NQVgJCTQKKworLyogREE3MjE4X0xWTF9ERVRfQ1RSTCA9IDB4NTAgKi8KKyNkZWZpbmUgREE3MjE4X0xWTF9ERVRfRU5fU0hJRlQJCTAKKyNkZWZpbmUgREE3MjE4X0xWTF9ERVRfRU5fTUFTSwkJKDB4RiA8PCAwKQorI2RlZmluZSBEQTcyMThfTFZMX0RFVF9FTl9DSEFOMUxfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfTFZMX0RFVF9FTl9DSEFOMVJfU0hJRlQJMQorI2RlZmluZSBEQTcyMThfTFZMX0RFVF9FTl9DSEFOMkxfU0hJRlQJMgorI2RlZmluZSBEQTcyMThfTFZMX0RFVF9FTl9DSEFOMlJfU0hJRlQJMworCisvKiBEQTcyMThfTFZMX0RFVF9MRVZFTCA9IDB4NTEgKi8KKyNkZWZpbmUgREE3MjE4X0xWTF9ERVRfTEVWRUxfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfTFZMX0RFVF9MRVZFTF9NQVNLCSgweDdGIDw8IDApCisjZGVmaW5lIERBNzIxOF9MVkxfREVUX0xFVkVMX01BWAkweDdGCisKKy8qIERBNzIxOF9ER1NfVFJJR0dFUiA9IDB4NTQgKi8KKyNkZWZpbmUgREE3MjE4X0RHU19UUklHR0VSX0xWTF9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9ER1NfVFJJR0dFUl9MVkxfTUFTSwkoMHgzRiA8PCAwKQorI2RlZmluZSBEQTcyMThfREdTX1RSSUdHRVJfTUFYCQkweDNGCisKKy8qIERBNzIxOF9ER1NfRU5BQkxFID0gMHg1NSAqLworI2RlZmluZSBEQTcyMThfREdTX0VOQUJMRV9TSElGVAkJMAorI2RlZmluZSBEQTcyMThfREdTX0VOQUJMRV9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lIERBNzIxOF9ER1NfRU5BQkxFX0xfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfREdTX0VOQUJMRV9SX1NISUZUCTEKKworLyogREE3MjE4X0RHU19SSVNFX0ZBTEwgPSAweDU2ICovCisjZGVmaW5lIERBNzIxOF9ER1NfUklTRV9DT0VGRl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9ER1NfUklTRV9DT0VGRl9NQVNLCSgweDcgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RHU19SSVNFX0NPRUZGX01BWAk3CisjZGVmaW5lIERBNzIxOF9ER1NfRkFMTF9DT0VGRl9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9ER1NfRkFMTF9DT0VGRl9NQVNLCSgweDcgPDwgNCkKKyNkZWZpbmUgREE3MjE4X0RHU19GQUxMX0NPRUZGX01BWAk4CisKKy8qIERBNzIxOF9ER1NfU1lOQ19ERUxBWSA9IDB4NTcgKi8KKyNkZWZpbmUgREE3MjE4X0RHU19TWU5DX0RFTEFZX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0RHU19TWU5DX0RFTEFZX01BU0sJKDB4RkYgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RHU19TWU5DX0RFTEFZX01BWAkweEZGCisKKy8qIERBNzIxOF9ER1NfU1lOQ19ERUxBWTIgPSAweDU4ICovCisjZGVmaW5lIERBNzIxOF9ER1NfU1lOQ19ERUxBWTJfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfREdTX1NZTkNfREVMQVkyX01BU0sJKDB4RkYgPDwgMCkKKworLyogREE3MjE4X0RHU19TWU5DX0RFTEFZMyA9IDB4NTkgKi8KKyNkZWZpbmUgREE3MjE4X0RHU19TWU5DX0RFTEFZM19TSElGVAkwCisjZGVmaW5lIERBNzIxOF9ER1NfU1lOQ19ERUxBWTNfTUFTSwkoMHg3RiA8PCAwKQorI2RlZmluZSBEQTcyMThfREdTX1NZTkNfREVMQVkzX01BWAkweDdGCisKKy8qIERBNzIxOF9ER1NfTEVWRUxTID0gMHg1QSAqLworI2RlZmluZSBEQTcyMThfREdTX0FOVElDTElQX0xWTF9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9ER1NfQU5USUNMSVBfTFZMX01BU0sJKDB4NyA8PCAwKQorI2RlZmluZSBEQTcyMThfREdTX0FOVElDTElQX0xWTF9NQVgJMHg3CisjZGVmaW5lIERBNzIxOF9ER1NfU0lHTkFMX0xWTF9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9ER1NfU0lHTkFMX0xWTF9NQVNLCSgweEYgPDwgNCkKKyNkZWZpbmUgREE3MjE4X0RHU19TSUdOQUxfTFZMX01BWAkweEYKKworLyogREE3MjE4X0RHU19HQUlOX0NUUkwgPSAweDVCICovCisjZGVmaW5lIERBNzIxOF9ER1NfU1RFUFNfU0hJRlQJCTAKKyNkZWZpbmUgREE3MjE4X0RHU19TVEVQU19NQVNLCQkoMHgxRiA8PCAwKQorI2RlZmluZSBEQTcyMThfREdTX1NURVBTX01BWAkJMHgxRgorI2RlZmluZSBEQTcyMThfREdTX1JBTVBfRU5fU0hJRlQJNQorI2RlZmluZSBEQTcyMThfREdTX1JBTVBfRU5fTUFTSwkJKDB4MSA8PCA1KQorI2RlZmluZSBEQTcyMThfREdTX1NVQlJfRU5fU0hJRlQJNgorI2RlZmluZSBEQTcyMThfREdTX1NVQlJfRU5fTUFTSwkJKDB4MSA8PCA2KQorCisvKiBEQTcyMThfRFJPVVRJTkdfT1VUREFJXzFMID0gMHg1QyAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzFMX1NSQ19TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMUxfU1JDX01BU0sJKDB4N0YgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RNSVhfU1JDX0lORklMVDFMCTAKKyNkZWZpbmUgREE3MjE4X0RNSVhfU1JDX0lORklMVDFSCTEKKyNkZWZpbmUgREE3MjE4X0RNSVhfU1JDX0lORklMVDJMCTIKKyNkZWZpbmUgREE3MjE4X0RNSVhfU1JDX0lORklMVDJSCTMKKyNkZWZpbmUgREE3MjE4X0RNSVhfU1JDX1RPTkVHRU4JCTQKKyNkZWZpbmUgREE3MjE4X0RNSVhfU1JDX0RBSUwJCTUKKyNkZWZpbmUgREE3MjE4X0RNSVhfU1JDX0RBSVIJCTYKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzFMX0lORklMVF8xTF9HQUlOID0gMHg1RCAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzFMX0lORklMVF8xTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8xTF9JTkZJTFRfMUxfR0FJTl9NQVNLCSgweDFGIDw8IDApCisjZGVmaW5lIERBNzIxOF9ETUlYX0dBSU5fTUFYCQkJMHgxRgorCisvKiBEQTcyMThfRE1JWF9PVVREQUlfMUxfSU5GSUxUXzFSX0dBSU4gPSAweDVFICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMUxfSU5GSUxUXzFSX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUREFJXzFMX0lORklMVF8xUl9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzFMX0lORklMVF8yTF9HQUlOID0gMHg1RiAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzFMX0lORklMVF8yTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8xTF9JTkZJTFRfMkxfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVERBSV8xTF9JTkZJTFRfMlJfR0FJTiA9IDB4NjAgKi8KKyNkZWZpbmUgREE3MjE4X09VVERBSV8xTF9JTkZJTFRfMlJfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMUxfSU5GSUxUXzJSX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVREQUlfMUxfVE9ORUdFTl9HQUlOID0gMHg2MSAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzFMX1RPTkVHRU5fR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMUxfVE9ORUdFTl9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzFMX0lOREFJXzFMX0dBSU4gPSAweDYyICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMUxfSU5EQUlfMUxfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMUxfSU5EQUlfMUxfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVERBSV8xTF9JTkRBSV8xUl9HQUlOID0gMHg2MyAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzFMX0lOREFJXzFSX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUREFJXzFMX0lOREFJXzFSX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRFJPVVRJTkdfT1VUREFJXzFSID0gMHg2NCAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzFSX1NSQ19TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMVJfU1JDX01BU0sJKDB4N0YgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzFSX0lORklMVF8xTF9HQUlOID0gMHg2NSAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzFSX0lORklMVF8xTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8xUl9JTkZJTFRfMUxfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVERBSV8xUl9JTkZJTFRfMVJfR0FJTiA9IDB4NjYgKi8KKyNkZWZpbmUgREE3MjE4X09VVERBSV8xUl9JTkZJTFRfMVJfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMVJfSU5GSUxUXzFSX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVREQUlfMVJfSU5GSUxUXzJMX0dBSU4gPSAweDY3ICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMVJfSU5GSUxUXzJMX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUREFJXzFSX0lORklMVF8yTF9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzFSX0lORklMVF8yUl9HQUlOID0gMHg2OCAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzFSX0lORklMVF8yUl9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8xUl9JTkZJTFRfMlJfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVERBSV8xUl9UT05FR0VOX0dBSU4gPSAweDY5ICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMVJfVE9ORUdFTl9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8xUl9UT05FR0VOX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVREQUlfMVJfSU5EQUlfMUxfR0FJTiA9IDB4NkEgKi8KKyNkZWZpbmUgREE3MjE4X09VVERBSV8xUl9JTkRBSV8xTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8xUl9JTkRBSV8xTF9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzFSX0lOREFJXzFSX0dBSU4gPSAweDZCICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMVJfSU5EQUlfMVJfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMVJfSU5EQUlfMVJfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9EUk9VVElOR19PVVRGSUxUXzFMID0gMHg2QyAqLworI2RlZmluZSBEQTcyMThfT1VURklMVF8xTF9TUkNfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VURklMVF8xTF9TUkNfTUFTSwkoMHg3RiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVRGSUxUXzFMX0lORklMVF8xTF9HQUlOID0gMHg2RCAqLworI2RlZmluZSBEQTcyMThfT1VURklMVF8xTF9JTkZJTFRfMUxfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFMX0lORklMVF8xTF9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VURklMVF8xTF9JTkZJTFRfMVJfR0FJTiA9IDB4NkUgKi8KKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMUxfSU5GSUxUXzFSX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VURklMVF8xTF9JTkZJTFRfMVJfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5GSUxUXzJMX0dBSU4gPSAweDZGICovCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFMX0lORklMVF8yTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMUxfSU5GSUxUXzJMX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVRGSUxUXzFMX0lORklMVF8yUl9HQUlOID0gMHg3MCAqLworI2RlZmluZSBEQTcyMThfT1VURklMVF8xTF9JTkZJTFRfMlJfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFMX0lORklMVF8yUl9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VURklMVF8xTF9UT05FR0VOX0dBSU4gPSAweDcxICovCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFMX1RPTkVHRU5fR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFMX1RPTkVHRU5fR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVEZJTFRfMUxfSU5EQUlfMUxfR0FJTiA9IDB4NzIgKi8KKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMUxfSU5EQUlfMUxfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFMX0lOREFJXzFMX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVRGSUxUXzFMX0lOREFJXzFSX0dBSU4gPSAweDczICovCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFMX0lOREFJXzFSX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VURklMVF8xTF9JTkRBSV8xUl9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RST1VUSU5HX09VVEZJTFRfMVIgPSAweDc0ICovCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFSX1NSQ19TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFSX1NSQ19NQVNLCSgweDdGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5GSUxUXzFMX0dBSU4gPSAweDc1ICovCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFSX0lORklMVF8xTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMVJfSU5GSUxUXzFMX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX0lORklMVF8xUl9HQUlOID0gMHg3NiAqLworI2RlZmluZSBEQTcyMThfT1VURklMVF8xUl9JTkZJTFRfMVJfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFSX0lORklMVF8xUl9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VURklMVF8xUl9JTkZJTFRfMkxfR0FJTiA9IDB4NzcgKi8KKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMVJfSU5GSUxUXzJMX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VURklMVF8xUl9JTkZJTFRfMkxfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5GSUxUXzJSX0dBSU4gPSAweDc4ICovCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFSX0lORklMVF8yUl9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMVJfSU5GSUxUXzJSX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVRGSUxUXzFSX1RPTkVHRU5fR0FJTiA9IDB4NzkgKi8KKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMVJfVE9ORUdFTl9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMVJfVE9ORUdFTl9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VURklMVF8xUl9JTkRBSV8xTF9HQUlOID0gMHg3QSAqLworI2RlZmluZSBEQTcyMThfT1VURklMVF8xUl9JTkRBSV8xTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMVJfSU5EQUlfMUxfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVEZJTFRfMVJfSU5EQUlfMVJfR0FJTiA9IDB4N0IgKi8KKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfMVJfSU5EQUlfMVJfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVRGSUxUXzFSX0lOREFJXzFSX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRFJPVVRJTkdfT1VUREFJXzJMID0gMHg3QyAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzJMX1NSQ19TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMkxfU1JDX01BU0sJKDB4N0YgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzJMX0lORklMVF8xTF9HQUlOID0gMHg3RCAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzJMX0lORklMVF8xTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8yTF9JTkZJTFRfMUxfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVERBSV8yTF9JTkZJTFRfMVJfR0FJTiA9IDB4N0UgKi8KKyNkZWZpbmUgREE3MjE4X09VVERBSV8yTF9JTkZJTFRfMVJfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMkxfSU5GSUxUXzFSX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVREQUlfMkxfSU5GSUxUXzJMX0dBSU4gPSAweDdGICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMkxfSU5GSUxUXzJMX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUREFJXzJMX0lORklMVF8yTF9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzJMX0lORklMVF8yUl9HQUlOID0gMHg4MCAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzJMX0lORklMVF8yUl9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8yTF9JTkZJTFRfMlJfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVERBSV8yTF9UT05FR0VOX0dBSU4gPSAweDgxICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMkxfVE9ORUdFTl9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8yTF9UT05FR0VOX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVREQUlfMkxfSU5EQUlfMUxfR0FJTiA9IDB4ODIgKi8KKyNkZWZpbmUgREE3MjE4X09VVERBSV8yTF9JTkRBSV8xTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8yTF9JTkRBSV8xTF9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzJMX0lOREFJXzFSX0dBSU4gPSAweDgzICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMkxfSU5EQUlfMVJfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMkxfSU5EQUlfMVJfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9EUk9VVElOR19PVVREQUlfMlIgPSAweDg0ICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMlJfU1JDX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8yUl9TUkNfTUFTSwkoMHg3RiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5GSUxUXzFMX0dBSU4gPSAweDg1ICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMlJfSU5GSUxUXzFMX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUREFJXzJSX0lORklMVF8xTF9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzJSX0lORklMVF8xUl9HQUlOID0gMHg4NiAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzJSX0lORklMVF8xUl9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8yUl9JTkZJTFRfMVJfR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVERBSV8yUl9JTkZJTFRfMkxfR0FJTiA9IDB4ODcgKi8KKyNkZWZpbmUgREE3MjE4X09VVERBSV8yUl9JTkZJTFRfMkxfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMlJfSU5GSUxUXzJMX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5GSUxUXzJSX0dBSU4gPSAweDg4ICovCisjZGVmaW5lIERBNzIxOF9PVVREQUlfMlJfSU5GSUxUXzJSX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUREFJXzJSX0lORklMVF8yUl9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RNSVhfT1VUREFJXzJSX1RPTkVHRU5fR0FJTiA9IDB4ODkgKi8KKyNkZWZpbmUgREE3MjE4X09VVERBSV8yUl9UT05FR0VOX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUREFJXzJSX1RPTkVHRU5fR0FJTl9NQVNLCSgweDFGIDw8IDApCisKKy8qIERBNzIxOF9ETUlYX09VVERBSV8yUl9JTkRBSV8xTF9HQUlOID0gMHg4QSAqLworI2RlZmluZSBEQTcyMThfT1VUREFJXzJSX0lOREFJXzFMX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUREFJXzJSX0lOREFJXzFMX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRE1JWF9PVVREQUlfMlJfSU5EQUlfMVJfR0FJTiA9IDB4OEIgKi8KKyNkZWZpbmUgREE3MjE4X09VVERBSV8yUl9JTkRBSV8xUl9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVERBSV8yUl9JTkRBSV8xUl9HQUlOX01BU0sJKDB4MUYgPDwgMCkKKworLyogREE3MjE4X0RBSV9DVFJMID0gMHg4QyAqLworI2RlZmluZSBEQTcyMThfREFJX0ZPUk1BVF9TSElGVAkJMAorI2RlZmluZSBEQTcyMThfREFJX0ZPUk1BVF9NQVNLCQkoMHgzIDw8IDApCisjZGVmaW5lIERBNzIxOF9EQUlfRk9STUFUX0kyUwkJKDB4MCA8PCAwKQorI2RlZmluZSBEQTcyMThfREFJX0ZPUk1BVF9MRUZUX0oJKDB4MSA8PCAwKQorI2RlZmluZSBEQTcyMThfREFJX0ZPUk1BVF9SSUdIVF9KCSgweDIgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RBSV9GT1JNQVRfRFNQCQkoMHgzIDw8IDApCisjZGVmaW5lIERBNzIxOF9EQUlfV09SRF9MRU5HVEhfU0hJRlQJMgorI2RlZmluZSBEQTcyMThfREFJX1dPUkRfTEVOR1RIX01BU0sJKDB4MyA8PCAyKQorI2RlZmluZSBEQTcyMThfREFJX1dPUkRfTEVOR1RIX1MxNl9MRQkoMHgwIDw8IDIpCisjZGVmaW5lIERBNzIxOF9EQUlfV09SRF9MRU5HVEhfUzIwX0xFCSgweDEgPDwgMikKKyNkZWZpbmUgREE3MjE4X0RBSV9XT1JEX0xFTkdUSF9TMjRfTEUJKDB4MiA8PCAyKQorI2RlZmluZSBEQTcyMThfREFJX1dPUkRfTEVOR1RIX1MzMl9MRQkoMHgzIDw8IDIpCisjZGVmaW5lIERBNzIxOF9EQUlfQ0hfTlVNX1NISUZUCQk0CisjZGVmaW5lIERBNzIxOF9EQUlfQ0hfTlVNX01BU0sJCSgweDcgPDwgNCkKKyNkZWZpbmUgREE3MjE4X0RBSV9DSF9OVU1fTUFYCQk0CisjZGVmaW5lIERBNzIxOF9EQUlfRU5fU0hJRlQJCTcKKyNkZWZpbmUgREE3MjE4X0RBSV9FTl9NQVNLCQkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9EQUlfVERNX0NUUkwgPSAweDhEICovCisjZGVmaW5lIERBNzIxOF9EQUlfVERNX0NIX0VOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0RBSV9URE1fQ0hfRU5fTUFTSwkoMHhGIDw8IDApCisjZGVmaW5lIERBNzIxOF9EQUlfVERNX01BWF9TTE9UUwk0CisjZGVmaW5lIERBNzIxOF9EQUlfT0VfU0hJRlQJCTYKKyNkZWZpbmUgREE3MjE4X0RBSV9PRV9NQVNLCQkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9EQUlfVERNX01PREVfRU5fU0hJRlQJNworI2RlZmluZSBEQTcyMThfREFJX1RETV9NT0RFX0VOX01BU0sJKDB4MSA8PCA3KQorCisvKiBEQTcyMThfREFJX09GRlNFVF9MT1dFUiA9IDB4OEUgKi8KKyNkZWZpbmUgREE3MjE4X0RBSV9PRkZTRVRfTE9XRVJfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfREFJX09GRlNFVF9MT1dFUl9NQVNLCSgweEZGIDw8IDApCisKKy8qIERBNzIxOF9EQUlfT0ZGU0VUX1VQUEVSID0gMHg4RiAqLworI2RlZmluZSBEQTcyMThfREFJX09GRlNFVF9VUFBFUl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9EQUlfT0ZGU0VUX1VQUEVSX01BU0sJKDB4NyA8PCAwKQorCisvKiBEQTcyMThfREFJX0NMS19NT0RFID0gMHg5MCAqLworI2RlZmluZSBEQTcyMThfREFJX0JDTEtTX1BFUl9XQ0xLX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0RBSV9CQ0xLU19QRVJfV0NMS19NQVNLCSgweDMgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RBSV9CQ0xLU19QRVJfV0NMS18zMgkoMHgwIDw8IDApCisjZGVmaW5lIERBNzIxOF9EQUlfQkNMS1NfUEVSX1dDTEtfNjQJKDB4MSA8PCAwKQorI2RlZmluZSBEQTcyMThfREFJX0JDTEtTX1BFUl9XQ0xLXzEyOAkoMHgyIDw8IDApCisjZGVmaW5lIERBNzIxOF9EQUlfQkNMS1NfUEVSX1dDTEtfMjU2CSgweDMgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RBSV9DTEtfUE9MX1NISUZUCTIKKyNkZWZpbmUgREE3MjE4X0RBSV9DTEtfUE9MX01BU0sJCSgweDEgPDwgMikKKyNkZWZpbmUgREE3MjE4X0RBSV9DTEtfUE9MX0lOVgkJKDB4MSA8PCAyKQorI2RlZmluZSBEQTcyMThfREFJX1dDTEtfUE9MX1NISUZUCTMKKyNkZWZpbmUgREE3MjE4X0RBSV9XQ0xLX1BPTF9NQVNLCSgweDEgPDwgMykKKyNkZWZpbmUgREE3MjE4X0RBSV9XQ0xLX1BPTF9JTlYJCSgweDEgPDwgMykKKyNkZWZpbmUgREE3MjE4X0RBSV9XQ0xLX1RSSV9TVEFURV9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9EQUlfV0NMS19UUklfU1RBVEVfTUFTSwkoMHgxIDw8IDQpCisjZGVmaW5lIERBNzIxOF9EQUlfQ0xLX0VOX1NISUZUCQk3CisjZGVmaW5lIERBNzIxOF9EQUlfQ0xLX0VOX01BU0sJCSgweDEgPDwgNykKKworLyogREE3MjE4X1BMTF9DVFJMID0gMHg5MSAqLworI2RlZmluZSBEQTcyMThfUExMX0lORElWX1NISUZUCQkwCisjZGVmaW5lIERBNzIxOF9QTExfSU5ESVZfTUFTSwkJKDB4NyA8PCAwKQorI2RlZmluZSBEQTcyMThfUExMX0lORElWXzJfNV9NSFoJKDB4MCA8PCAwKQorI2RlZmluZSBEQTcyMThfUExMX0lORElWXzVfMTBfTUhaCSgweDEgPDwgMCkKKyNkZWZpbmUgREE3MjE4X1BMTF9JTkRJVl8xMF8yMF9NSFoJKDB4MiA8PCAwKQorI2RlZmluZSBEQTcyMThfUExMX0lORElWXzIwXzQwX01IWgkoMHgzIDw8IDApCisjZGVmaW5lIERBNzIxOF9QTExfSU5ESVZfNDBfNTRfTUhaCSgweDQgPDwgMCkKKyNkZWZpbmUgREE3MjE4X1BMTF9JTkRJVl8yXzEwX01IWl9WQUwJMgorI2RlZmluZSBEQTcyMThfUExMX0lORElWXzEwXzIwX01IWl9WQUwJNAorI2RlZmluZSBEQTcyMThfUExMX0lORElWXzIwXzQwX01IWl9WQUwJOAorI2RlZmluZSBEQTcyMThfUExMX0lORElWXzQwXzU0X01IWl9WQUwJMTYKKyNkZWZpbmUgREE3MjE4X1BMTF9NQ0xLX1NRUl9FTl9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9QTExfTUNMS19TUVJfRU5fTUFTSwkoMHgxIDw8IDQpCisjZGVmaW5lIERBNzIxOF9QTExfTU9ERV9TSElGVAkJNgorI2RlZmluZSBEQTcyMThfUExMX01PREVfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZSBEQTcyMThfUExMX01PREVfQllQQVNTCQkoMHgwIDw8IDYpCisjZGVmaW5lIERBNzIxOF9QTExfTU9ERV9OT1JNQUwJCSgweDEgPDwgNikKKyNkZWZpbmUgREE3MjE4X1BMTF9NT0RFX1NSTQkJKDB4MiA8PCA2KQorI2RlZmluZSBEQTcyMThfUExMX01PREVfMzJLSFoJCSgweDMgPDwgNikKKworLyogREE3MjE4X1BMTF9GUkFDX1RPUCA9IDB4OTIgKi8KKyNkZWZpbmUgREE3MjE4X1BMTF9GQkRJVl9GUkFDX1RPUF9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9QTExfRkJESVZfRlJBQ19UT1BfTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfUExMX0ZSQUNfQk9UID0gMHg5MyAqLworI2RlZmluZSBEQTcyMThfUExMX0ZCRElWX0ZSQUNfQk9UX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X1BMTF9GQkRJVl9GUkFDX0JPVF9NQVNLCSgweEZGIDw8IDApCisKKy8qIERBNzIxOF9QTExfSU5URUdFUiA9IDB4OTQgKi8KKyNkZWZpbmUgREE3MjE4X1BMTF9GQkRJVl9JTlRFR0VSX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X1BMTF9GQkRJVl9JTlRFR0VSX01BU0sJKDB4N0YgPDwgMCkKKworLyogREE3MjE4X1BMTF9TVEFUVVMgPSAweDk1ICovCisjZGVmaW5lIERBNzIxOF9QTExfU1JNX1NUQVRVU19TSElGVAkwCisjZGVmaW5lIERBNzIxOF9QTExfU1JNX1NUQVRVU19NQVNLCSgweEZGIDw8IDApCisjZGVmaW5lIERBNzIxOF9QTExfU1JNX1NUQVRVU19TUk1fTE9DSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9QTExfUkVGT1NDX0NBTCA9IDB4OTggKi8KKyNkZWZpbmUgREE3MjE4X1BMTF9SRUZPU0NfQ0FMX0NUUkxfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfUExMX1JFRk9TQ19DQUxfQ1RSTF9NQVNLCQkoMHgxRiA8PCAwKQorI2RlZmluZSBEQTcyMThfUExMX1JFRk9TQ19DQUxfU1RBUlRfU0hJRlQJNgorI2RlZmluZSBEQTcyMThfUExMX1JFRk9TQ19DQUxfU1RBUlRfTUFTSwkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9QTExfUkVGT1NDX0NBTF9FTl9TSElGVAkJNworI2RlZmluZSBEQTcyMThfUExMX1JFRk9TQ19DQUxfRU5fTUFTSwkJKDB4MSA8PCA3KQorCisvKiBEQTcyMThfREFDX05HX0NUUkwgPSAweDlDICovCisjZGVmaW5lIERBNzIxOF9EQUNfTkdfRU5fU0hJRlQJNworI2RlZmluZSBEQTcyMThfREFDX05HX0VOX01BU0sJKDB4MSA8PCA3KQorCisvKiBEQTcyMThfREFDX05HX1NFVFVQX1RJTUUgPSAweDlEICovCisjZGVmaW5lIERBNzIxOF9EQUNfTkdfU0VUVVBfVElNRV9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9EQUNfTkdfU0VUVVBfVElNRV9NQVNLCSgweDMgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RBQ19OR19TRVRVUF9USU1FX01BWAk0CisjZGVmaW5lIERBNzIxOF9EQUNfTkdfUkFNUFVQX1JBVEVfU0hJRlQJMgorI2RlZmluZSBEQTcyMThfREFDX05HX1JBTVBVUF9SQVRFX01BU0sJKDB4MSA8PCAyKQorI2RlZmluZSBEQTcyMThfREFDX05HX1JBTVBVUF9SQVRFX01BWAkyCisjZGVmaW5lIERBNzIxOF9EQUNfTkdfUkFNUEROX1JBVEVfU0hJRlQJMworI2RlZmluZSBEQTcyMThfREFDX05HX1JBTVBETl9SQVRFX01BU0sJKDB4MSA8PCAzKQorI2RlZmluZSBEQTcyMThfREFDX05HX1JBTVBETl9SQVRFX01BWAkyCisKKy8qIERBNzIxOF9EQUNfTkdfT0ZGX1RIUkVTSCA9IDB4OUUgKi8KKyNkZWZpbmUgREE3MjE4X0RBQ19OR19PRkZfVEhSRVNIT0xEX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0RBQ19OR19PRkZfVEhSRVNIT0xEX01BU0sJKDB4NyA8PCAwKQorI2RlZmluZSBEQTcyMThfREFDX05HX1RIUkVTSE9MRF9NQVgJCTB4NworCisvKiBEQTcyMThfREFDX05HX09OX1RIUkVTSCA9IDB4OUYgKi8KKyNkZWZpbmUgREE3MjE4X0RBQ19OR19PTl9USFJFU0hPTERfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfREFDX05HX09OX1RIUkVTSE9MRF9NQVNLCQkoMHg3IDw8IDApCisKKy8qIERBNzIxOF9UT05FX0dFTl9DRkcxID0gMHhBMCAqLworI2RlZmluZSBEQTcyMThfRFRNRl9SRUdfU0hJRlQJCTAKKyNkZWZpbmUgREE3MjE4X0RUTUZfUkVHX01BU0sJCSgweEYgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RUTUZfUkVHX01BWAkJMTYKKyNkZWZpbmUgREE3MjE4X0RUTUZfRU5fU0hJRlQJCTQKKyNkZWZpbmUgREE3MjE4X0RUTUZfRU5fTUFTSwkJKDB4MSA8PCA0KQorI2RlZmluZSBEQTcyMThfU1RBUlRfU1RPUE5fU0hJRlQJNworI2RlZmluZSBEQTcyMThfU1RBUlRfU1RPUE5fTUFTSwkJKDB4MSA8PCA3KQorCisvKiBEQTcyMThfVE9ORV9HRU5fQ0ZHMiA9IDB4QTEgKi8KKyNkZWZpbmUgREE3MjE4X1NXR19TRUxfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfU1dHX1NFTF9NQVNLCSgweDMgPDwgMCkKKyNkZWZpbmUgREE3MjE4X1NXR19TRUxfTUFYCTQKKworLyogREE3MjE4X1RPTkVfR0VOX0ZSRVExX0wgPSAweEEyICovCisjZGVmaW5lIERBNzIxOF9GUkVRMV9MX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0ZSRVExX0xfTUFTSwkoMHhGRiA8PCAwKQorI2RlZmluZSBEQTcyMThfRlJFUV9NQVgJCTB4RkZGRgorCisvKiBEQTcyMThfVE9ORV9HRU5fRlJFUTFfVSA9IDB4QTMgKi8KKyNkZWZpbmUgREE3MjE4X0ZSRVExX1VfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfRlJFUTFfVV9NQVNLCSgweEZGIDw8IDApCisKKy8qIERBNzIxOF9UT05FX0dFTl9GUkVRMl9MID0gMHhBNCAqLworI2RlZmluZSBEQTcyMThfRlJFUTJfTF9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9GUkVRMl9MX01BU0sJKDB4RkYgPDwgMCkKKworLyogREE3MjE4X1RPTkVfR0VOX0ZSRVEyX1UgPSAweEE1ICovCisjZGVmaW5lIERBNzIxOF9GUkVRMl9VX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0ZSRVEyX1VfTUFTSwkoMHhGRiA8PCAwKQorCisvKiBEQTcyMThfVE9ORV9HRU5fQ1lDTEVTID0gMHhBNiAqLworI2RlZmluZSBEQTcyMThfQkVFUF9DWUNMRVNfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQkVFUF9DWUNMRVNfTUFTSwkJKDB4NyA8PCAwKQorCisvKiBEQTcyMThfVE9ORV9HRU5fT05fUEVSID0gMHhBNyAqLworI2RlZmluZSBEQTcyMThfQkVFUF9PTl9QRVJfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQkVFUF9PTl9QRVJfTUFTSwkJKDB4M0YgPDwgMCkKKworLyogREE3MjE4X1RPTkVfR0VOX09GRl9QRVIgPSAweEE4ICovCisjZGVmaW5lIERBNzIxOF9CRUVQX09GRl9QRVJfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQkVFUF9PRkZfUEVSX01BU0sJKDB4M0YgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0JFRVBfT05fT0ZGX01BWAkJMHgzRgorCisvKiBEQTcyMThfQ1BfQ1RSTCA9IDB4QUMgKi8KKyNkZWZpbmUgREE3MjE4X0NQX01PRF9TSElGVAkJCTIKKyNkZWZpbmUgREE3MjE4X0NQX01PRF9NQVNLCQkJKDB4MyA8PCAyKQorI2RlZmluZSBEQTcyMThfQ1BfTUNIQU5HRV9TSElGVAkJCTQKKyNkZWZpbmUgREE3MjE4X0NQX01DSEFOR0VfTUFTSwkJCSgweDMgPDwgNCkKKyNkZWZpbmUgREE3MjE4X0NQX01DSEFOR0VfUkVMX01BU0sJCTB4MworI2RlZmluZSBEQTcyMThfQ1BfTUNIQU5HRV9NQVgJCQkzCisjZGVmaW5lIERBNzIxOF9DUF9NQ0hBTkdFX0xBUkdFU1RfVk9MCQkweDEKKyNkZWZpbmUgREE3MjE4X0NQX01DSEFOR0VfREFDX1ZPTAkJMHgyCisjZGVmaW5lIERBNzIxOF9DUF9NQ0hBTkdFX1NJR19NQUcJCTB4MworI2RlZmluZSBEQTcyMThfQ1BfU01BTExfU1dJVENIX0ZSRVFfRU5fU0hJRlQJNgorI2RlZmluZSBEQTcyMThfQ1BfU01BTExfU1dJVENIX0ZSRVFfRU5fTUFTSwkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9DUF9FTl9TSElGVAkJCTcKKyNkZWZpbmUgREE3MjE4X0NQX0VOX01BU0sJCQkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9DUF9ERUxBWSA9IDB4QUQgKi8KKyNkZWZpbmUgREE3MjE4X0NQX0ZDT05UUk9MX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0NQX0ZDT05UUk9MX01BU0sJCSgweDcgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0NQX0ZDT05UUk9MX01BWAkJNgorI2RlZmluZSBEQTcyMThfQ1BfVEFVX0RFTEFZX1NISUZUCTMKKyNkZWZpbmUgREE3MjE4X0NQX1RBVV9ERUxBWV9NQVNLCSgweDcgPDwgMykKKyNkZWZpbmUgREE3MjE4X0NQX1RBVV9ERUxBWV9NQVgJCTgKKworLyogREE3MjE4X0NQX1ZPTF9USFJFU0hPTEQxID0gMHhBRSAqLworI2RlZmluZSBEQTcyMThfQ1BfVEhSRVNIX1ZERDJfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfQ1BfVEhSRVNIX1ZERDJfTUFTSwkoMHgzRiA8PCAwKQorI2RlZmluZSBEQTcyMThfQ1BfVEhSRVNIX1ZERDJfTUFYCTB4M0YKKworLyogREE3MjE4X01JQ18xX0NUUkwgPSAweEI0ICovCisjZGVmaW5lIERBNzIxOF9NSUNfMV9BTVBfTVVURV9FTl9TSElGVAk2CisjZGVmaW5lIERBNzIxOF9NSUNfMV9BTVBfTVVURV9FTl9NQVNLCSgweDEgPDwgNikKKyNkZWZpbmUgREE3MjE4X01JQ18xX0FNUF9FTl9TSElGVAk3CisjZGVmaW5lIERBNzIxOF9NSUNfMV9BTVBfRU5fTUFTSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9NSUNfMV9HQUlOID0gMHhCNSAqLworI2RlZmluZSBEQTcyMThfTUlDXzFfQU1QX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfTUlDXzFfQU1QX0dBSU5fTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIERBNzIxOF9NSUNfQU1QX0dBSU5fTUFYCQkweDcKKworLyogREE3MjE4X01JQ18xX1NFTEVDVCA9IDB4QjcgKi8KKyNkZWZpbmUgREE3MjE4X01JQ18xX0FNUF9JTl9TRUxfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfTUlDXzFfQU1QX0lOX1NFTF9NQVNLCSgweDMgPDwgMCkKKworLyogREE3MjE4X01JQ18yX0NUUkwgPSAweEI4ICovCisjZGVmaW5lIERBNzIxOF9NSUNfMl9BTVBfTVVURV9FTl9TSElGVAk2CisjZGVmaW5lIERBNzIxOF9NSUNfMl9BTVBfTVVURV9FTl9NQVNLCSgweDEgPDwgNikKKyNkZWZpbmUgREE3MjE4X01JQ18yX0FNUF9FTl9TSElGVAk3CisjZGVmaW5lIERBNzIxOF9NSUNfMl9BTVBfRU5fTUFTSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9NSUNfMl9HQUlOID0gMHhCOSAqLworI2RlZmluZSBEQTcyMThfTUlDXzJfQU1QX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfTUlDXzJfQU1QX0dBSU5fTUFTSwkoMHg3IDw8IDApCisKKy8qIERBNzIxOF9NSUNfMl9TRUxFQ1QgPSAweEJCICovCisjZGVmaW5lIERBNzIxOF9NSUNfMl9BTVBfSU5fU0VMX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X01JQ18yX0FNUF9JTl9TRUxfTUFTSwkoMHgzIDw8IDApCisKKy8qIERBNzIxOF9JTl8xX0hQRl9GSUxURVJfQ1RSTCA9IDB4QkMgKi8KKyNkZWZpbmUgREE3MjE4X0lOXzFfVk9JQ0VfSFBGX0NPUk5FUl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9JTl8xX1ZPSUNFX0hQRl9DT1JORVJfTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIERBNzIxOF9JTl9WT0lDRV9IUEZfQ09STkVSX01BWAkJOAorI2RlZmluZSBEQTcyMThfSU5fMV9WT0lDRV9FTl9TSElGVAkJMworI2RlZmluZSBEQTcyMThfSU5fMV9WT0lDRV9FTl9NQVNLCQkoMHgxIDw8IDMpCisjZGVmaW5lIERBNzIxOF9JTl8xX0FVRElPX0hQRl9DT1JORVJfU0hJRlQJNAorI2RlZmluZSBEQTcyMThfSU5fMV9BVURJT19IUEZfQ09STkVSX01BU0sJKDB4MyA8PCA0KQorI2RlZmluZSBEQTcyMThfSU5fMV9IUEZfRU5fU0hJRlQJCTcKKyNkZWZpbmUgREE3MjE4X0lOXzFfSFBGX0VOX01BU0sJCQkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9JTl8yX0hQRl9GSUxURVJfQ1RSTCA9IDB4QkQgKi8KKyNkZWZpbmUgREE3MjE4X0lOXzJfVk9JQ0VfSFBGX0NPUk5FUl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9JTl8yX1ZPSUNFX0hQRl9DT1JORVJfTUFTSwkoMHg3IDw8IDApCisjZGVmaW5lIERBNzIxOF9JTl8yX1ZPSUNFX0VOX1NISUZUCQkzCisjZGVmaW5lIERBNzIxOF9JTl8yX1ZPSUNFX0VOX01BU0sJCSgweDEgPDwgMykKKyNkZWZpbmUgREE3MjE4X0lOXzJfQVVESU9fSFBGX0NPUk5FUl9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9JTl8yX0FVRElPX0hQRl9DT1JORVJfTUFTSwkoMHgzIDw8IDQpCisjZGVmaW5lIERBNzIxOF9JTl8yX0hQRl9FTl9TSElGVAkJNworI2RlZmluZSBEQTcyMThfSU5fMl9IUEZfRU5fTUFTSwkJCSgweDEgPDwgNykKKworLyogREE3MjE4X0FEQ18xX0NUUkwgPSAweEMwICovCisjZGVmaW5lIERBNzIxOF9BRENfMV9BQUZfRU5fU0hJRlQJMgorI2RlZmluZSBEQTcyMThfQURDXzFfQUFGX0VOX01BU0sJKDB4MSA8PCAyKQorCisvKiBEQTcyMThfQURDXzJfQ1RSTCA9IDB4QzEgKi8KKyNkZWZpbmUgREE3MjE4X0FEQ18yX0FBRl9FTl9TSElGVAkyCisjZGVmaW5lIERBNzIxOF9BRENfMl9BQUZfRU5fTUFTSwkoMHgxIDw8IDIpCisKKy8qIERBNzIxOF9BRENfTU9ERSA9IDB4QzIgKi8KKyNkZWZpbmUgREE3MjE4X0FEQ19MUF9NT0RFX1NISUZUCQkwCisjZGVmaW5lIERBNzIxOF9BRENfTFBfTU9ERV9NQVNLCQkJKDB4MSA8PCAwKQorI2RlZmluZSBEQTcyMThfQURDX0xWTERFVF9NT0RFX1NISUZUCQkxCisjZGVmaW5lIERBNzIxOF9BRENfTFZMREVUX01PREVfTUFTSwkJKDB4MSA8PCAxKQorI2RlZmluZSBEQTcyMThfQURDX0xWTERFVF9BVVRPX0VYSVRfU0hJRlQJMgorI2RlZmluZSBEQTcyMThfQURDX0xWTERFVF9BVVRPX0VYSVRfTUFTSwkoMHgxIDw8IDIpCisKKy8qIERBNzIxOF9NSVhPVVRfTF9DVFJMID0gMHhDQyAqLworI2RlZmluZSBEQTcyMThfTUlYT1VUX0xfQU1QX0VOX1NISUZUCTcKKyNkZWZpbmUgREE3MjE4X01JWE9VVF9MX0FNUF9FTl9NQVNLCSgweDEgPDwgNykKKworLyogREE3MjE4X01JWE9VVF9MX0dBSU4gPSAweENEICovCisjZGVmaW5lIERBNzIxOF9NSVhPVVRfTF9BTVBfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9NSVhPVVRfTF9BTVBfR0FJTl9NQVNLCSgweDMgPDwgMCkKKyNkZWZpbmUgREE3MjE4X01JWE9VVF9BTVBfR0FJTl9NSU4JMHgxCisjZGVmaW5lIERBNzIxOF9NSVhPVVRfQU1QX0dBSU5fTUFYCTB4MworCisvKiBEQTcyMThfTUlYT1VUX1JfQ1RSTCA9IDB4Q0UgKi8KKyNkZWZpbmUgREE3MjE4X01JWE9VVF9SX0FNUF9FTl9TSElGVAk3CisjZGVmaW5lIERBNzIxOF9NSVhPVVRfUl9BTVBfRU5fTUFTSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9NSVhPVVRfUl9HQUlOID0gMHhDRiAqLworI2RlZmluZSBEQTcyMThfTUlYT1VUX1JfQU1QX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfTUlYT1VUX1JfQU1QX0dBSU5fTUFTSwkoMHgzIDw8IDApCisKKy8qIERBNzIxOF9IUF9MX0NUUkwgPSAweEQwICovCisjZGVmaW5lIERBNzIxOF9IUF9MX0FNUF9NSU5fR0FJTl9FTl9TSElGVAkyCisjZGVmaW5lIERBNzIxOF9IUF9MX0FNUF9NSU5fR0FJTl9FTl9NQVNLCSgweDEgPDwgMikKKyNkZWZpbmUgREE3MjE4X0hQX0xfQU1QX09FX1NISUZUCQkzCisjZGVmaW5lIERBNzIxOF9IUF9MX0FNUF9PRV9NQVNLCQkJKDB4MSA8PCAzKQorI2RlZmluZSBEQTcyMThfSFBfTF9BTVBfWkNfRU5fU0hJRlQJCTQKKyNkZWZpbmUgREE3MjE4X0hQX0xfQU1QX1pDX0VOX01BU0sJCSgweDEgPDwgNCkKKyNkZWZpbmUgREE3MjE4X0hQX0xfQU1QX1JBTVBfRU5fU0hJRlQJCTUKKyNkZWZpbmUgREE3MjE4X0hQX0xfQU1QX1JBTVBfRU5fTUFTSwkJKDB4MSA8PCA1KQorI2RlZmluZSBEQTcyMThfSFBfTF9BTVBfTVVURV9FTl9TSElGVAkJNgorI2RlZmluZSBEQTcyMThfSFBfTF9BTVBfTVVURV9FTl9NQVNLCQkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9IUF9MX0FNUF9FTl9TSElGVAkJNworI2RlZmluZSBEQTcyMThfSFBfTF9BTVBfRU5fTUFTSwkJCSgweDEgPDwgNykKKyNkZWZpbmUgREE3MjE4X0hQX0FNUF9PRV9NQVNLCQkJKDB4MSA8PCAzKQorCisvKiBEQTcyMThfSFBfTF9HQUlOID0gMHhEMSAqLworI2RlZmluZSBEQTcyMThfSFBfTF9BTVBfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9IUF9MX0FNUF9HQUlOX01BU0sJKDB4M0YgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0hQX0FNUF9HQUlOX01JTgkJMHgxNQorI2RlZmluZSBEQTcyMThfSFBfQU1QX0dBSU5fTUFYCQkweDNGCisKKy8qIERBNzIxOF9IUF9SX0NUUkwgPSAweEQyICovCisjZGVmaW5lIERBNzIxOF9IUF9SX0FNUF9NSU5fR0FJTl9FTl9TSElGVAkyCisjZGVmaW5lIERBNzIxOF9IUF9SX0FNUF9NSU5fR0FJTl9FTl9NQVNLCSgweDEgPDwgMikKKyNkZWZpbmUgREE3MjE4X0hQX1JfQU1QX09FX1NISUZUCQkzCisjZGVmaW5lIERBNzIxOF9IUF9SX0FNUF9PRV9NQVNLCQkJKDB4MSA8PCAzKQorI2RlZmluZSBEQTcyMThfSFBfUl9BTVBfWkNfRU5fU0hJRlQJCTQKKyNkZWZpbmUgREE3MjE4X0hQX1JfQU1QX1pDX0VOX01BU0sJCSgweDEgPDwgNCkKKyNkZWZpbmUgREE3MjE4X0hQX1JfQU1QX1JBTVBfRU5fU0hJRlQJCTUKKyNkZWZpbmUgREE3MjE4X0hQX1JfQU1QX1JBTVBfRU5fTUFTSwkJKDB4MSA8PCA1KQorI2RlZmluZSBEQTcyMThfSFBfUl9BTVBfTVVURV9FTl9TSElGVAkJNgorI2RlZmluZSBEQTcyMThfSFBfUl9BTVBfTVVURV9FTl9NQVNLCQkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9IUF9SX0FNUF9FTl9TSElGVAkJNworI2RlZmluZSBEQTcyMThfSFBfUl9BTVBfRU5fTUFTSwkJCSgweDEgPDwgNykKKworLyogREE3MjE4X0hQX1JfR0FJTiA9IDB4RDMgKi8KKyNkZWZpbmUgREE3MjE4X0hQX1JfQU1QX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfSFBfUl9BTVBfR0FJTl9NQVNLCSgweDNGIDw8IDApCisKKy8qIERBNzIxOF9IUF9TTkdMX0NUUkwgPSAweEQ0ICovCisjZGVmaW5lIERBNzIxOF9IUF9BTVBfU1RFUkVPX0RFVEVDVF9TVEFUVVNfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfSFBfQU1QX1NURVJFT19ERVRFQ1RfU1RBVFVTX01BU0sJCSgweDEgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0hQTF9BTVBfTE9BRF9ERVRFQ1RfU1RBVFVTX1NISUZUCQkxCisjZGVmaW5lIERBNzIxOF9IUExfQU1QX0xPQURfREVURUNUX1NUQVRVU19NQVNLCQkoMHgxIDw8IDEpCisjZGVmaW5lIERBNzIxOF9IUFJfQU1QX0xPQURfREVURUNUX1NUQVRVU19TSElGVAkJMgorI2RlZmluZSBEQTcyMThfSFBSX0FNUF9MT0FEX0RFVEVDVF9TVEFUVVNfTUFTSwkJKDB4MSA8PCAyKQorI2RlZmluZSBEQTcyMThfSFBfQU1QX0xPQURfREVURUNUX0VOX1NISUZUCQk2CisjZGVmaW5lIERBNzIxOF9IUF9BTVBfTE9BRF9ERVRFQ1RfRU5fTUFTSwkJKDB4MSA8PCA2KQorI2RlZmluZSBEQTcyMThfSFBfQU1QX1NURVJFT19ERVRFQ1RfRU5fU0hJRlQJCTcKKyNkZWZpbmUgREE3MjE4X0hQX0FNUF9TVEVSRU9fREVURUNUX0VOX01BU0sJCSgweDEgPDwgNykKKworLyogREE3MjE4X0hQX0RJRkZfQ1RSTCA9IDB4RDUgKi8KKyNkZWZpbmUgREE3MjE4X0hQX0FNUF9ESUZGX01PREVfRU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfSFBfQU1QX0RJRkZfTU9ERV9FTl9NQVNLCQkoMHgxIDw8IDApCisjZGVmaW5lIERBNzIxOF9IUF9BTVBfU0lOR0xFX1NVUFBMWV9FTl9TSElGVAk0CisjZGVmaW5lIERBNzIxOF9IUF9BTVBfU0lOR0xFX1NVUFBMWV9FTl9NQVNLCSgweDEgPDwgNCkKKworLyogREE3MjE4X0hQX0RJRkZfVU5MT0NLID0gMHhENyAqLworI2RlZmluZSBEQTcyMThfSFBfRElGRl9VTkxPQ0tfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfSFBfRElGRl9VTkxPQ0tfTUFTSwkoMHgxIDw8IDApCisjZGVmaW5lIERBNzIxOF9IUF9ESUZGX1VOTE9DS19WQUwJMHhDMworCisvKiBEQTcyMThfSFBMREVUX0pBQ0sgPSAweEQ4ICovCisjZGVmaW5lIERBNzIxOF9IUExERVRfSkFDS19SQVRFX1NISUZUCQkwCisjZGVmaW5lIERBNzIxOF9IUExERVRfSkFDS19SQVRFX01BU0sJCSgweDcgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0hQTERFVF9KQUNLX0RFQk9VTkNFX1NISUZUCTMKKyNkZWZpbmUgREE3MjE4X0hQTERFVF9KQUNLX0RFQk9VTkNFX01BU0sJKDB4MyA8PCAzKQorI2RlZmluZSBEQTcyMThfSFBMREVUX0pBQ0tfVEhSX1NISUZUCQk1CisjZGVmaW5lIERBNzIxOF9IUExERVRfSkFDS19USFJfTUFTSwkJKDB4MyA8PCA1KQorI2RlZmluZSBEQTcyMThfSFBMREVUX0pBQ0tfRU5fU0hJRlQJCTcKKyNkZWZpbmUgREE3MjE4X0hQTERFVF9KQUNLX0VOX01BU0sJCSgweDEgPDwgNykKKworLyogREE3MjE4X0hQTERFVF9DVFJMID0gMHhEOSAqLworI2RlZmluZSBEQTcyMThfSFBMREVUX0NPTVBfSU5WX1NISUZUCQkwCisjZGVmaW5lIERBNzIxOF9IUExERVRfQ09NUF9JTlZfTUFTSwkJKDB4MSA8PCAwKQorI2RlZmluZSBEQTcyMThfSFBMREVUX0hZU1RfRU5fU0hJRlQJCTEKKyNkZWZpbmUgREE3MjE4X0hQTERFVF9IWVNUX0VOX01BU0sJCSgweDEgPDwgMSkKKyNkZWZpbmUgREE3MjE4X0hQTERFVF9ESVNDSEFSR0VfRU5fU0hJRlQJNworI2RlZmluZSBEQTcyMThfSFBMREVUX0RJU0NIQVJHRV9FTl9NQVNLCQkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9IUExERVRfVEVTVCA9IDB4REEgKi8KKyNkZWZpbmUgREE3MjE4X0hQTERFVF9DT01QX1NUU19TSElGVAk0CisjZGVmaW5lIERBNzIxOF9IUExERVRfQ09NUF9TVFNfTUFTSwkoMHgxIDw8IDQpCisKKy8qIERBNzIxOF9SRUZFUkVOQ0VTID0gMHhEQyAqLworI2RlZmluZSBEQTcyMThfQklBU19FTl9TSElGVAkzCisjZGVmaW5lIERBNzIxOF9CSUFTX0VOX01BU0sJKDB4MSA8PCAzKQorCisvKiBEQTcyMThfSU9fQ1RSTCA9IDB4RTAgKi8KKyNkZWZpbmUgREE3MjE4X0lPX1ZPTFRBR0VfTEVWRUxfU0hJRlQJCTAKKyNkZWZpbmUgREE3MjE4X0lPX1ZPTFRBR0VfTEVWRUxfTUFTSwkJKDB4MSA8PCAwKQorI2RlZmluZSBEQTcyMThfSU9fVk9MVEFHRV9MRVZFTF8yXzVWXzNfNlYJMAorI2RlZmluZSBEQTcyMThfSU9fVk9MVEFHRV9MRVZFTF8xXzVWXzJfNVYJMQorCisvKiBEQTcyMThfTERPX0NUUkwgPSAweEUxICovCisjZGVmaW5lIERBNzIxOF9MRE9fTEVWRUxfU0VMRUNUX1NISUZUCTQKKyNkZWZpbmUgREE3MjE4X0xET19MRVZFTF9TRUxFQ1RfTUFTSwkoMHgzIDw8IDQpCisjZGVmaW5lIERBNzIxOF9MRE9fRU5fU0hJRlQJCTcKKyNkZWZpbmUgREE3MjE4X0xET19FTl9NQVNLCQkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9TSURFVE9ORV9DVFJMID0gMHhFNCAqLworI2RlZmluZSBEQTcyMThfU0lERVRPTkVfTVVURV9FTl9TSElGVAk2CisjZGVmaW5lIERBNzIxOF9TSURFVE9ORV9NVVRFX0VOX01BU0sJKDB4MSA8PCA2KQorI2RlZmluZSBEQTcyMThfU0lERVRPTkVfRklMVEVSX0VOX1NISUZUCTcKKyNkZWZpbmUgREE3MjE4X1NJREVUT05FX0ZJTFRFUl9FTl9NQVNLCSgweDEgPDwgNykKKworLyogREE3MjE4X1NJREVUT05FX0lOX1NFTEVDVCA9IDB4RTUgKi8KKyNkZWZpbmUgREE3MjE4X1NJREVUT05FX0lOX1NFTEVDVF9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9TSURFVE9ORV9JTl9TRUxFQ1RfTUFTSwkoMHgzIDw8IDApCisjZGVmaW5lIERBNzIxOF9TSURFVE9ORV9JTl9TRUxFQ1RfTUFYCTQKKworLyogREE3MjE4X1NJREVUT05FX0dBSU4gPSAweEU2ICovCisjZGVmaW5lIERBNzIxOF9TSURFVE9ORV9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X1NJREVUT05FX0dBSU5fTUFTSwkoMHgxRiA8PCAwKQorCisvKiBEQTcyMThfRFJPVVRJTkdfU1RfT1VURklMVF8xTCA9IDB4RTggKi8KKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfU1RfMUxfU1JDX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVEZJTFRfU1RfMUxfU1JDX01BU0sJKDB4NyA8PCAwKQorI2RlZmluZSBEQTcyMThfRE1JWF9TVF9TUkNfT1VURklMVDFMCTAKKyNkZWZpbmUgREE3MjE4X0RNSVhfU1RfU1JDX09VVEZJTFQxUgkxCisjZGVmaW5lIERBNzIxOF9ETUlYX1NUX1NSQ19TSURFVE9ORQkyCisKKy8qIERBNzIxOF9EUk9VVElOR19TVF9PVVRGSUxUXzFSID0gMHhFOSAqLworI2RlZmluZSBEQTcyMThfT1VURklMVF9TVF8xUl9TUkNfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VURklMVF9TVF8xUl9TUkNfTUFTSwkoMHg3IDw8IDApCisKKy8qIERBNzIxOF9TSURFVE9ORV9CSVFfM1NUQUdFX0RBVEEgPSAweEVBICovCisjZGVmaW5lIERBNzIxOF9TSURFVE9ORV9CSVFfM1NUQUdFX0RBVEFfU0hJRlQJMAorI2RlZmluZSBEQTcyMThfU0lERVRPTkVfQklRXzNTVEFHRV9EQVRBX01BU0sJKDB4RkYgPDwgMCkKKworLyogREE3MjE4X1NJREVUT05FX0JJUV8zU1RBR0VfQUREUiA9IDB4RUIgKi8KKyNkZWZpbmUgREE3MjE4X1NJREVUT05FX0JJUV8zU1RBR0VfQUREUl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9TSURFVE9ORV9CSVFfM1NUQUdFX0FERFJfTUFTSwkoMHgxRiA8PCAwKQorI2RlZmluZSBEQTcyMThfU0lERVRPTkVfQklRXzNTVEFHRV9DRkdfU0laRQkzMAorCisvKiBEQTcyMThfRVZFTlRfU1RBVFVTID0gMHhFQyAqLworI2RlZmluZSBEQTcyMThfSFBMREVUX0pBQ0tfU1RTX1NISUZUCTcKKyNkZWZpbmUgREE3MjE4X0hQTERFVF9KQUNLX1NUU19NQVNLCSgweDEgPDwgNykKKworLyogREE3MjE4X0VWRU5UID0gMHhFRCAqLworI2RlZmluZSBEQTcyMThfTFZMX0RFVF9FVkVOVF9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9MVkxfREVUX0VWRU5UX01BU0sJKDB4MSA8PCAwKQorI2RlZmluZSBEQTcyMThfSFBMREVUX0pBQ0tfRVZFTlRfU0hJRlQJNworI2RlZmluZSBEQTcyMThfSFBMREVUX0pBQ0tfRVZFTlRfTUFTSwkoMHgxIDw8IDcpCisKKy8qIERBNzIxOF9FVkVOVF9NQVNLCT0gMHhFRSAqLworI2RlZmluZSBEQTcyMThfTFZMX0RFVF9FVkVOVF9NU0tfU0hJRlQJCTAKKyNkZWZpbmUgREE3MjE4X0xWTF9ERVRfRVZFTlRfTVNLX01BU0sJCSgweDEgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0hQTERFVF9KQUNLX0VWRU5UX0lSUV9NU0tfU0hJRlQJNworI2RlZmluZSBEQTcyMThfSFBMREVUX0pBQ0tfRVZFTlRfSVJRX01TS19NQVNLCSgweDEgPDwgNykKKworLyogREE3MjE4X0RNSUNfMV9DVFJMID0gMHhGMCAqLworI2RlZmluZSBEQTcyMThfRE1JQ18xX0RBVEFfU0VMX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0RNSUNfMV9EQVRBX1NFTF9NQVNLCSgweDEgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RNSUNfMV9TQU1QTEVQSEFTRV9TSElGVAkxCisjZGVmaW5lIERBNzIxOF9ETUlDXzFfU0FNUExFUEhBU0VfTUFTSwkoMHgxIDw8IDEpCisjZGVmaW5lIERBNzIxOF9ETUlDXzFfQ0xLX1JBVEVfU0hJRlQJMgorI2RlZmluZSBEQTcyMThfRE1JQ18xX0NMS19SQVRFX01BU0sJKDB4MSA8PCAyKQorI2RlZmluZSBEQTcyMThfRE1JQ18xTF9FTl9TSElGVAkJNgorI2RlZmluZSBEQTcyMThfRE1JQ18xTF9FTl9NQVNLCQkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9ETUlDXzFSX0VOX1NISUZUCQk3CisjZGVmaW5lIERBNzIxOF9ETUlDXzFSX0VOX01BU0sJCSgweDEgPDwgNykKKworLyogREE3MjE4X0RNSUNfMl9DVFJMID0gMHhGMSAqLworI2RlZmluZSBEQTcyMThfRE1JQ18yX0RBVEFfU0VMX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X0RNSUNfMl9EQVRBX1NFTF9NQVNLCSgweDEgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0RNSUNfMl9TQU1QTEVQSEFTRV9TSElGVAkxCisjZGVmaW5lIERBNzIxOF9ETUlDXzJfU0FNUExFUEhBU0VfTUFTSwkoMHgxIDw8IDEpCisjZGVmaW5lIERBNzIxOF9ETUlDXzJfQ0xLX1JBVEVfU0hJRlQJMgorI2RlZmluZSBEQTcyMThfRE1JQ18yX0NMS19SQVRFX01BU0sJKDB4MSA8PCAyKQorI2RlZmluZSBEQTcyMThfRE1JQ18yTF9FTl9TSElGVAkJNgorI2RlZmluZSBEQTcyMThfRE1JQ18yTF9FTl9NQVNLCQkoMHgxIDw8IDYpCisjZGVmaW5lIERBNzIxOF9ETUlDXzJSX0VOX1NISUZUCQk3CisjZGVmaW5lIERBNzIxOF9ETUlDXzJSX0VOX01BU0sJCSgweDEgPDwgNykKKworLyogREE3MjE4X0lOXzFMX0dBSU4gPSAweEY0ICovCisjZGVmaW5lIERBNzIxOF9JTl8xTF9ESUdJVEFMX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfSU5fMUxfRElHSVRBTF9HQUlOX01BU0sJKDB4N0YgPDwgMCkKKyNkZWZpbmUgREE3MjE4X0lOX0RJR0lUQUxfR0FJTl9NQVgJMHg3RgorCisvKiBEQTcyMThfSU5fMVJfR0FJTiA9IDB4RjUgKi8KKyNkZWZpbmUgREE3MjE4X0lOXzFSX0RJR0lUQUxfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9JTl8xUl9ESUdJVEFMX0dBSU5fTUFTSwkoMHg3RiA8PCAwKQorCisvKiBEQTcyMThfSU5fMkxfR0FJTiA9IDB4RjYgKi8KKyNkZWZpbmUgREE3MjE4X0lOXzJMX0RJR0lUQUxfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9JTl8yTF9ESUdJVEFMX0dBSU5fTUFTSwkoMHg3RiA8PCAwKQorCisvKiBEQTcyMThfSU5fMlJfR0FJTiA9IDB4RjcgKi8KKyNkZWZpbmUgREE3MjE4X0lOXzJSX0RJR0lUQUxfR0FJTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9JTl8yUl9ESUdJVEFMX0dBSU5fTUFTSwkoMHg3RiA8PCAwKQorCisvKiBEQTcyMThfT1VUXzFMX0dBSU4gPSAweEY4ICovCisjZGVmaW5lIERBNzIxOF9PVVRfMUxfRElHSVRBTF9HQUlOX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X09VVF8xTF9ESUdJVEFMX0dBSU5fTUFTSwkJKDB4RkYgPDwgMCkKKyNkZWZpbmUgREE3MjE4X09VVF9ESUdJVEFMX0dBSU5fTUlOCQkweDAKKyNkZWZpbmUgREE3MjE4X09VVF9ESUdJVEFMX0dBSU5fTUFYCQkweDk3CisKKy8qIERBNzIxOF9PVVRfMVJfR0FJTiA9IDB4RjkgKi8KKyNkZWZpbmUgREE3MjE4X09VVF8xUl9ESUdJVEFMX0dBSU5fU0hJRlQJMAorI2RlZmluZSBEQTcyMThfT1VUXzFSX0RJR0lUQUxfR0FJTl9NQVNLCQkoMHhGRiA8PCAwKQorCisvKiBEQTcyMThfTUlDQklBU19DVFJMID0gMHhGQyAqLworI2RlZmluZSBEQTcyMThfTUlDQklBU18xX0xFVkVMX1NISUZUCTAKKyNkZWZpbmUgREE3MjE4X01JQ0JJQVNfMV9MRVZFTF9NQVNLCSgweDcgPDwgMCkKKyNkZWZpbmUgREE3MjE4X01JQ0JJQVNfMV9MUF9NT0RFX1NISUZUCTMKKyNkZWZpbmUgREE3MjE4X01JQ0JJQVNfMV9MUF9NT0RFX01BU0sJKDB4MSA8PCAzKQorI2RlZmluZSBEQTcyMThfTUlDQklBU18yX0xFVkVMX1NISUZUCTQKKyNkZWZpbmUgREE3MjE4X01JQ0JJQVNfMl9MRVZFTF9NQVNLCSgweDcgPDwgNCkKKyNkZWZpbmUgREE3MjE4X01JQ0JJQVNfMl9MUF9NT0RFX1NISUZUCTcKKyNkZWZpbmUgREE3MjE4X01JQ0JJQVNfMl9MUF9NT0RFX01BU0sJKDB4MSA8PCA3KQorCisvKiBEQTcyMThfTUlDQklBU19FTiA9IDB4RkQgKi8KKyNkZWZpbmUgREE3MjE4X01JQ0JJQVNfMV9FTl9TSElGVAkwCisjZGVmaW5lIERBNzIxOF9NSUNCSUFTXzFfRU5fTUFTSwkoMHgxIDw8IDApCisjZGVmaW5lIERBNzIxOF9NSUNCSUFTXzJfRU5fU0hJRlQJNAorI2RlZmluZSBEQTcyMThfTUlDQklBU18yX0VOX01BU0sJKDB4MSA8PCA0KQorCisKKy8qCisgKiBHZW5lcmFsIGRlZmluZXMgJiBkYXRhCisgKi8KKworLyogUmVnaXN0ZXIgaW52ZXJzaW9uICovCisjZGVmaW5lIERBNzIxOF9OT19JTlZFUlQJMAorI2RlZmluZSBEQTcyMThfSU5WRVJUCQkxCisKKy8qIEJ5dGUgcmVsYXRlZCBkZWZpbmVzICovCisjZGVmaW5lIERBNzIxOF9CWVRFX1NISUZUCTgKKyNkZWZpbmUgREE3MjE4X0JZVEVfTUFTSwkweEZGCisjZGVmaW5lIERBNzIxOF8yQllURV9TSElGVAkxNgorI2RlZmluZSBEQTcyMThfMkJZVEVfTUFTSwkweEZGRkYKKworLyogUExMIE91dHB1dCBGcmVxdWVuY2llcyAqLworI2RlZmluZSBEQTcyMThfUExMX0ZSRVFfT1VUXzkwMzE2CTkwMzE2ODAwCisjZGVmaW5lIERBNzIxOF9QTExfRlJFUV9PVVRfOTgzMDQJOTgzMDQwMDAKKworLyogQUxDIENhbGlicmF0aW9uICovCisjZGVmaW5lIERBNzIxOF9BTENfQ0FMSUJfREVMQVlfTUlOCTI1MDAKKyNkZWZpbmUgREE3MjE4X0FMQ19DQUxJQl9ERUxBWV9NQVgJNTAwMAorI2RlZmluZSBEQTcyMThfQUxDX0NBTElCX01BWF9UUklFUwk1CisKKy8qIFJlZiBPc2NpbGxhdG9yICovCisjZGVmaW5lIERBNzIxOF9SRUZfT1NDX0NIRUNLX0RFTEFZX01JTgk1MDAwCisjZGVmaW5lIERBNzIxOF9SRUZfT1NDX0NIRUNLX0RFTEFZX01BWAkxMDAwMAorI2RlZmluZSBEQTcyMThfUkVGX09TQ19DSEVDS19UUklFUwk0CisKKy8qIFNSTSAqLworI2RlZmluZSBEQTcyMThfU1JNX0NIRUNLX0RFTEFZCQk1MAorI2RlZmluZSBEQTcyMThfU1JNX0NIRUNLX1RSSUVTCQk4CisKKy8qIE1pYyBMZXZlbCBEZXRlY3QgKi8KKyNkZWZpbmUgREE3MjE4X01JQ19MVkxfREVUX0RFTEFZCTUwCisKK2VudW0gZGE3MjE4X2JpcV9jZmcgeworCURBNzIxOF9CSVFfQ0ZHX0RBVEEgPSAwLAorCURBNzIxOF9CSVFfQ0ZHX0FERFIsCisJREE3MjE4X0JJUV9DRkdfU0laRSwKK307CisKK2VudW0gZGE3MjE4X2Nsa19zcmMgeworCURBNzIxOF9DTEtTUkNfTUNMSyA9IDAsCisJREE3MjE4X0NMS1NSQ19NQ0xLX1NRUiwKK307CisKK2VudW0gZGE3MjE4X3N5c19jbGsgeworCURBNzIxOF9TWVNDTEtfTUNMSyA9IDAsCisJREE3MjE4X1NZU0NMS19QTEwsCisJREE3MjE4X1NZU0NMS19QTExfU1JNLAorCURBNzIxOF9TWVNDTEtfUExMXzMyS0haCit9OworCitlbnVtIGRhNzIxOF9kZXZfaWQgeworCURBNzIxN19ERVZfSUQgPSAwLAorCURBNzIxOF9ERVZfSUQsCit9OworCisvKiBSZWd1bGF0b3JzICovCitlbnVtIGRhNzIxOF9zdXBwbGllcyB7CisJREE3MjE4X1NVUFBMWV9WREQgPSAwLAorCURBNzIxOF9TVVBQTFlfVkRETUlDLAorCURBNzIxOF9TVVBQTFlfVkRESU8sCisJREE3MjE4X05VTV9TVVBQTElFUywKK307CisKKy8qIFByaXZhdGUgZGF0YSAqLworc3RydWN0IGRhNzIxOF9wcml2IHsKKwlzdHJ1Y3QgZGE3MjE4X3BkYXRhICpwZGF0YTsKKworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0RBNzIxOF9OVU1fU1VQUExJRVNdOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlpbnQgZGV2X2lkOworCisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjazsKKwlpbnQgaXJxOworCisJc3RydWN0IGNsayAqbWNsazsKKwl1bnNpZ25lZCBpbnQgbWNsa19yYXRlOworCisJYm9vbCBocF9zaW5nbGVfc3VwcGx5OworCWJvb2wgbWFzdGVyOworCXU4IGFsY19lbjsKKwl1OCBpbl9maWx0X2VuOworCXU4IG1pY19sdmxfZGV0X2VuOworCisJdTggYmlxXzVzdGFnZV9jb2VmZltEQTcyMThfT1VUXzFfQklRXzVTVEFHRV9DRkdfU0laRV07CisJdTggc3RiaXFfM3N0YWdlX2NvZWZmW0RBNzIxOF9TSURFVE9ORV9CSVFfM1NUQUdFX0NGR19TSVpFXTsKK307CisKKy8qIEhQIGRldGVjdCBjb250cm9sICovCitpbnQgZGE3MjE4X2hwbGRldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2spOworCisjZW5kaWYgLyogX0RBNzIxOF9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2RhNzIxOS5jIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTkuYwppbmRleCBmMjM4YzFlLi44MWMwNzA4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2RhNzIxOS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjE5LmMKQEAgLTk2OCwxMCArOTY4LDExIEBACiAJeyJNaXhpbiBQR0EiLCBOVUxMLCAiTWljIFBHQSJ9LAogCXsiQURDIiwgTlVMTCwgIk1peGluIFBHQSJ9LAogCi0JeyJTaWRldG9uZSBGaWx0ZXIiLCBOVUxMLCAiQURDIn0sCiAJeyJNaXhlciBJbiIsIE5VTEwsICJNaXhlciBJbiBTdXBwbHkifSwKIAl7Ik1peGVyIEluIiwgIk1pYyBTd2l0Y2giLCAiQURDIn0sCiAKKwl7IlNpZGV0b25lIEZpbHRlciIsIE5VTEwsICJNaXhlciBJbiJ9LAorCiAJeyJUb25lIEdlbmVyYXRvciIsIE5VTEwsICJUT05FIn0sCiAKIAlEQTcyMTlfT1VUX0RBSV9NVVhfUk9VVEVTKCJPdXQgREFJTCBNdXgiKSwKQEAgLTEwNzMsMTEgKzEwNzQsOCBAQAogCXUzMiBmcmVxX3JlZjsKIAl1NjQgZnJhY19kaXY7CiAKLQkvKiBWZXJpZnkgMzJLSHosIDJNSHogLSA1NE1IeiBNQ0xLIHByb3ZpZGVkLCBhbmQgc2V0IGlucHV0IGRpdmlkZXIgKi8KLQlpZiAoZGE3MjE5LT5tY2xrX3JhdGUgPT0gMzI3NjgpIHsKLQkJaW5kaXZfYml0cyA9IERBNzIxOV9QTExfSU5ESVZfMl81X01IWjsKLQkJaW5kaXYgPSBEQTcyMTlfUExMX0lORElWXzJfNV9NSFpfVkFMOwotCX0gZWxzZSBpZiAoZGE3MjE5LT5tY2xrX3JhdGUgPCAyMDAwMDAwKSB7CisJLyogVmVyaWZ5IDJNSHogLSA1NE1IeiBNQ0xLIHByb3ZpZGVkLCBhbmQgc2V0IGlucHV0IGRpdmlkZXIgKi8KKwlpZiAoZGE3MjE5LT5tY2xrX3JhdGUgPCAyMDAwMDAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIlBMTCBpbnB1dCBjbG9jayAlZCBiZWxvdyB2YWxpZCByYW5nZVxuIiwKIAkJCWRhNzIxOS0+bWNsa19yYXRlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTE4LDkgKzExMTYsNiBAQAogCWNhc2UgREE3MjE5X1NZU0NMS19QTExfU1JNOgogCQlwbGxfY3RybCB8PSBEQTcyMTlfUExMX01PREVfU1JNOwogCQlicmVhazsKLQljYXNlIERBNzIxOV9TWVNDTEtfUExMXzMyS0haOgotCQlwbGxfY3RybCB8PSBEQTcyMTlfUExMX01PREVfMzJLSFo7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgUExMIGNvbmZpZ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE2MSwxOCArMTE1Niw0NCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJCWRhaV9jbGtfbW9kZSB8PSBEQTcyMTlfREFJX1dDTEtfUE9MX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJZGFpX2Nsa19tb2RlIHw9IERBNzIxOV9EQUlfQ0xLX1BPTF9JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCWRhaV9jbGtfbW9kZSB8PSBEQTcyMTlfREFJX1dDTEtfUE9MX0lOViB8CisJCQkJCURBNzIxOV9EQUlfQ0xLX1BPTF9JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6Ci0JCWRhaV9jbGtfbW9kZSB8PSBEQTcyMTlfREFJX1dDTEtfUE9MX0lOVjsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKLQkJZGFpX2Nsa19tb2RlIHw9IERBNzIxOV9EQUlfQ0xLX1BPTF9JTlY7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6Ci0JCWRhaV9jbGtfbW9kZSB8PSBEQTcyMTlfREFJX1dDTEtfUE9MX0lOViB8Ci0JCQkJREE3MjE5X0RBSV9DTEtfUE9MX0lOVjsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlkYWlfY2xrX21vZGUgfD0gREE3MjE5X0RBSV9DTEtfUE9MX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkJZGFpX2Nsa19tb2RlIHw9IERBNzIxOV9EQUlfV0NMS19QT0xfSU5WIHwKKwkJCQkJREE3MjE5X0RBSV9DTEtfUE9MX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCQlkYWlfY2xrX21vZGUgfD0gREE3MjE5X0RBSV9XQ0xLX1BPTF9JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMwNiw3ICsxMzI3LDcgQEAKIAl9CiAKIAljaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOwotCWlmICgoY2hhbm5lbHMgPCAxKSB8IChjaGFubmVscyA+IERBNzIxOV9EQUlfQ0hfTlVNX01BWCkpIHsKKwlpZiAoKGNoYW5uZWxzIDwgMSkgfHwgKGNoYW5uZWxzID4gREE3MjE5X0RBSV9DSF9OVU1fTUFYKSkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsCiAJCQkiSW52YWxpZCBudW1iZXIgb2YgY2hhbm5lbHMsIG9ubHkgMSB0byAlZCBzdXBwb3J0ZWRcbiIsCiAJCQlEQTcyMTlfREFJX0NIX05VTV9NQVgpOwpAQCAtMTQwNSwyOCArMTQyNiwxMiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGRhNzIxOV9vZl9tYXRjaCk7CiAKLXN0YXRpYyBlbnVtIGRhNzIxOV9sZG9fbHZsX3NlbCBkYTcyMTlfb2ZfbGRvX2x2bChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJCQkgdTMyIHZhbCkKLXsKLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgMTA1MDoKLQkJcmV0dXJuIERBNzIxOV9MRE9fTFZMX1NFTF8xXzA1VjsKLQljYXNlIDExMDA6Ci0JCXJldHVybiBEQTcyMTlfTERPX0xWTF9TRUxfMV8xMFY7Ci0JY2FzZSAxMjAwOgotCQlyZXR1cm4gREE3MjE5X0xET19MVkxfU0VMXzFfMjBWOwotCWNhc2UgMTQwMDoKLQkJcmV0dXJuIERBNzIxOV9MRE9fTFZMX1NFTF8xXzQwVjsKLQlkZWZhdWx0OgotCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiSW52YWxpZCBMRE8gbGV2ZWwiKTsKLQkJcmV0dXJuIERBNzIxOV9MRE9fTFZMX1NFTF8xXzA1VjsKLQl9Ci19Ci0KIHN0YXRpYyBlbnVtIGRhNzIxOV9taWNiaWFzX3ZvbHRhZ2UKIAlkYTcyMTlfb2ZfbWljYmlhc19sdmwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1MzIgdmFsKQogewogCXN3aXRjaCAodmFsKSB7CisJY2FzZSAxNjAwOgorCQlyZXR1cm4gREE3MjE5X01JQ0JJQVNfMV82VjsKIAljYXNlIDE4MDA6CiAJCXJldHVybiBEQTcyMTlfTUlDQklBU18xXzhWOwogCWNhc2UgMjAwMDoKQEAgLTE0NjksOSArMTQ3NCw2IEBACiAJaWYgKCFwZGF0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJkbGcsbGRvLWx2bCIsICZvZl92YWwzMikgPj0gMCkKLQkJcGRhdGEtPmxkb19sdmxfc2VsID0gZGE3MjE5X29mX2xkb19sdmwoY29kZWMsIG9mX3ZhbDMyKTsKLQogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImRsZyxtaWNiaWFzLWx2bCIsICZvZl92YWwzMikgPj0gMCkKIAkJcGRhdGEtPm1pY2JpYXNfbHZsID0gZGE3MjE5X29mX21pY2JpYXNfbHZsKGNvZGVjLCBvZl92YWwzMik7CiAJZWxzZQpAQCAtMTUxNiwyNCArMTUxOCwxMyBAQAogCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE5X1JFRkVSRU5DRVMsCiAJCQkJCSAgICBEQTcyMTlfQklBU19FTl9NQVNLLAogCQkJCQkgICAgREE3MjE5X0JJQVNfRU5fTUFTSyk7Ci0KLQkJCS8qIEVuYWJsZSBJbnRlcm5hbCBEaWdpdGFsIExETyAqLwotCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE5X0xET19DVFJMLAotCQkJCQkgICAgREE3MjE5X0xET19FTl9NQVNLLAotCQkJCQkgICAgREE3MjE5X0xET19FTl9NQVNLKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6Ci0JCS8qIE9ubHkgZGlzYWJsZSBpZiBqYWNrIGRldGVjdGlvbiBub3QgYWN0aXZlICovCi0JCWlmICghZGE3MjE5LT5hYWQtPmphY2spIHsKLQkJCS8qIEJ5cGFzcyBJbnRlcm5hbCBEaWdpdGFsIExETyAqLwotCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjE5X0xET19DVFJMLAotCQkJCQkgICAgREE3MjE5X0xET19FTl9NQVNLLCAwKTsKLQotCQkJLyogTWFzdGVyIGJpYXMgKi8KKwkJLyogT25seSBkaXNhYmxlIG1hc3RlciBiaWFzIGlmIGphY2sgZGV0ZWN0aW9uIG5vdCBhY3RpdmUgKi8KKwkJaWYgKCFkYTcyMTktPmFhZC0+amFjaykKIAkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOV9SRUZFUkVOQ0VTLAogCQkJCQkgICAgREE3MjE5X0JJQVNfRU5fTUFTSywgMCk7Ci0JCX0KIAogCQkvKiBNQ0xLICovCiAJCWlmIChkYTcyMTktPm1jbGspCkBAIC0xNjAwLDIxICsxNTkxLDkgQEAKIAlpZiAocGRhdGEpIHsKIAkJdTggbWljYmlhc19sdmwgPSAwOwogCi0JCS8qIEludGVybmFsIExETyAqLwotCQlzd2l0Y2ggKHBkYXRhLT5sZG9fbHZsX3NlbCkgewotCQljYXNlIERBNzIxOV9MRE9fTFZMX1NFTF8xXzA1VjoKLQkJY2FzZSBEQTcyMTlfTERPX0xWTF9TRUxfMV8xMFY6Ci0JCWNhc2UgREE3MjE5X0xET19MVkxfU0VMXzFfMjBWOgotCQljYXNlIERBNzIxOV9MRE9fTFZMX1NFTF8xXzQwVjoKLQkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxOV9MRE9fQ1RSTCwKLQkJCQkJICAgIERBNzIxOV9MRE9fTEVWRUxfU0VMRUNUX01BU0ssCi0JCQkJCSAgICAocGRhdGEtPmxkb19sdmxfc2VsIDw8Ci0JCQkJCSAgICAgREE3MjE5X0xET19MRVZFTF9TRUxFQ1RfU0hJRlQpKTsKLQkJCWJyZWFrOwotCQl9Ci0KIAkJLyogTWljIEJpYXMgdm9sdGFnZXMgKi8KIAkJc3dpdGNoIChwZGF0YS0+bWljYmlhc19sdmwpIHsKKwkJY2FzZSBEQTcyMTlfTUlDQklBU18xXzZWOgogCQljYXNlIERBNzIxOV9NSUNCSUFTXzFfOFY6CiAJCWNhc2UgREE3MjE5X01JQ0JJQVNfMl8wVjoKIAkJY2FzZSBEQTcyMTlfTUlDQklBU18yXzJWOgpAQCAtMTYzOSw5ICsxNjE4LDE0IEBACiAJfQogfQogCitzdGF0aWMgc3RydWN0IHJlZ19zZXF1ZW5jZSBkYTcyMTlfcmV2X2FhX3BhdGNoW10gPSB7CisJeyBEQTcyMTlfUkVGRVJFTkNFUywgMHgwOCB9LAorfTsKKwogc3RhdGljIGludCBkYTcyMTlfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBkYTcyMTlfcHJpdiAqZGE3MjE5ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdW5zaWduZWQgaW50IHJldjsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfaW5pdCgmZGE3MjE5LT5sb2NrKTsKQEAgLTE2NTEsNiArMTYzNSwyNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSByZWdtYXBfcmVhZChkYTcyMTktPnJlZ21hcCwgREE3MjE5X0NISVBfUkVWSVNJT04sICZyZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2hpcCByZXZpc2lvbjogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2Rpc2FibGVfcmVnOworCX0KKworCXN3aXRjaCAocmV2ICYgREE3MjE5X0NISVBfTUlOT1JfTUFTSykgeworCWNhc2UgMDoKKwkJcmV0ID0gcmVnbWFwX3JlZ2lzdGVyX3BhdGNoKGRhNzIxOS0+cmVnbWFwLCBkYTcyMTlfcmV2X2FhX3BhdGNoLAorCQkJCQkgICAgQVJSQVlfU0laRShkYTcyMTlfcmV2X2FhX3BhdGNoKSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBBQSBwYXRjaDogJWRcbiIsCisJCQkJcmV0KTsKKwkJCWdvdG8gZXJyX2Rpc2FibGVfcmVnOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwogCS8qIEhhbmRsZSBEVC9QbGF0Zm9ybSBkYXRhICovCiAJaWYgKGNvZGVjLT5kZXYtPm9mX25vZGUpCiAJCWRhNzIxOS0+cGRhdGEgPSBkYTcyMTlfb2ZfdG9fcGRhdGEoY29kZWMpOwpAQCAtMTY2MiwxMCArMTY2NiwxMiBAQAogCS8qIENoZWNrIGlmIE1DTEsgcHJvdmlkZWQgKi8KIAlkYTcyMTktPm1jbGsgPSBkZXZtX2Nsa19nZXQoY29kZWMtPmRldiwgIm1jbGsiKTsKIAlpZiAoSVNfRVJSKGRhNzIxOS0+bWNsaykpIHsKLQkJaWYgKFBUUl9FUlIoZGE3MjE5LT5tY2xrKSAhPSAtRU5PRU5UKQotCQkJcmV0dXJuIFBUUl9FUlIoZGE3MjE5LT5tY2xrKTsKLQkJZWxzZQorCQlpZiAoUFRSX0VSUihkYTcyMTktPm1jbGspICE9IC1FTk9FTlQpIHsKKwkJCXJldCA9IFBUUl9FUlIoZGE3MjE5LT5tY2xrKTsKKwkJCWdvdG8gZXJyX2Rpc2FibGVfcmVnOworCQl9IGVsc2UgewogCQkJZGE3MjE5LT5tY2xrID0gTlVMTDsKKwkJfQogCX0KIAogCS8qIERlZmF1bHQgUEMgY291bnRlciB0byBmcmVlLXJ1bm5pbmcgKi8KQEAgLTE2OTMsNyArMTY5OSwxNiBAQAogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIERBNzIxOV9UT05FX0dFTl9DWUNMRVMsIERBNzIxOV9CRUVQX0NZQ0xFU19NQVNLKTsKIAogCS8qIEluaXRpYWxpc2UgQUFEIGJsb2NrICovCi0JcmV0dXJuIGRhNzIxOV9hYWRfaW5pdChjb2RlYyk7CisJcmV0ID0gZGE3MjE5X2FhZF9pbml0KGNvZGVjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kaXNhYmxlX3JlZzsKKworCXJldHVybiAwOworCitlcnJfZGlzYWJsZV9yZWc6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShEQTcyMTlfTlVNX1NVUFBMSUVTLCBkYTcyMTktPnN1cHBsaWVzKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGE3MjE5X3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCkBAIC0xNzc2LDcgKzE3OTEsNyBAQAogCXsgREE3MjE5X0RJR19ST1VUSU5HX0RBQywgMHgzMiB9LAogCXsgREE3MjE5X0RBSV9PRkZTRVRfTE9XRVIsIDB4MDAgfSwKIAl7IERBNzIxOV9EQUlfT0ZGU0VUX1VQUEVSLCAweDAwIH0sCi0JeyBEQTcyMTlfUkVGRVJFTkNFUywgMHgwMCB9LAorCXsgREE3MjE5X1JFRkVSRU5DRVMsIDB4MDggfSwKIAl7IERBNzIxOV9NSVhJTl9MX1NFTEVDVCwgMHgwMCB9LAogCXsgREE3MjE5X01JWElOX0xfR0FJTiwgMHgwMyB9LAogCXsgREE3MjE5X0FEQ19MX0dBSU4sIDB4NkYgfSwKQEAgLTE4MTAsOCArMTgyNSw2IEBACiAJeyBEQTcyMTlfTUlYT1VUX1JfQ1RSTCwgMHgxMCB9LAogCXsgREE3MjE5X0NISVBfSUQxLCAweDIzIH0sCiAJeyBEQTcyMTlfQ0hJUF9JRDIsIDB4OTMgfSwKLQl7IERBNzIxOV9DSElQX1JFVklTSU9OLCAweDAwIH0sCi0JeyBEQTcyMTlfTERPX0NUUkwsIDB4MDAgfSwKIAl7IERBNzIxOV9JT19DVFJMLCAweDAwIH0sCiAJeyBEQTcyMTlfR0FJTl9SQU1QX0NUUkwsIDB4MDAgfSwKIAl7IERBNzIxOV9QQ19DT1VOVCwgMHgwMiB9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9kYTcyMTkuaCBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjE5LmgKaW5kZXggYjUxNDI2OC4uNWE3ODdlNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9kYTcyMTkuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2RhNzIxOS5oCkBAIC04NSw3ICs4NSw2IEBACiAjZGVmaW5lIERBNzIxOV9DSElQX0lEMQkJCTB4ODEKICNkZWZpbmUgREE3MjE5X0NISVBfSUQyCQkJMHg4MgogI2RlZmluZSBEQTcyMTlfQ0hJUF9SRVZJU0lPTgkJMHg4MwotI2RlZmluZSBEQTcyMTlfTERPX0NUUkwJCQkweDkwCiAjZGVmaW5lIERBNzIxOV9JT19DVFJMCQkJMHg5MQogI2RlZmluZSBEQTcyMTlfR0FJTl9SQU1QX0NUUkwJCTB4OTIKICNkZWZpbmUgREE3MjE5X1BDX0NPVU5UCQkJMHg5NApAQCAtMjA3LDcgKzIwNiw2IEBACiAjZGVmaW5lIERBNzIxOV9QTExfTU9ERV9CWVBBU1MJCSgweDAgPDwgNikKICNkZWZpbmUgREE3MjE5X1BMTF9NT0RFX05PUk1BTAkJKDB4MSA8PCA2KQogI2RlZmluZSBEQTcyMTlfUExMX01PREVfU1JNCQkoMHgyIDw8IDYpCi0jZGVmaW5lIERBNzIxOV9QTExfTU9ERV8zMktIWgkJKDB4MyA8PCA2KQogCiAvKiBEQTcyMTlfUExMX0ZSQUNfVE9QID0gMHgyMiAqLwogI2RlZmluZSBEQTcyMTlfUExMX0ZCRElWX0ZSQUNfVE9QX1NISUZUCTAKQEAgLTU2OSwxMiArNTY3LDYgQEAKICNkZWZpbmUgREE3MjE5X0NISVBfTUFKT1JfU0hJRlQJNAogI2RlZmluZSBEQTcyMTlfQ0hJUF9NQUpPUl9NQVNLCSgweEYgPDwgNCkKIAotLyogREE3MjE5X0xET19DVFJMID0gMHg5MCAqLwotI2RlZmluZSBEQTcyMTlfTERPX0xFVkVMX1NFTEVDVF9TSElGVAk0Ci0jZGVmaW5lIERBNzIxOV9MRE9fTEVWRUxfU0VMRUNUX01BU0sJKDB4MyA8PCA0KQotI2RlZmluZSBEQTcyMTlfTERPX0VOX1NISUZUCQk3Ci0jZGVmaW5lIERBNzIxOV9MRE9fRU5fTUFTSwkJKDB4MSA8PCA3KQotCiAvKiBEQTcyMTlfSU9fQ1RSTCA9IDB4OTEgKi8KICNkZWZpbmUgREE3MjE5X0lPX1ZPTFRBR0VfTEVWRUxfU0hJRlQJCTAKICNkZWZpbmUgREE3MjE5X0lPX1ZPTFRBR0VfTEVWRUxfTUFTSwkJKDB4MSA8PCAwKQpAQCAtNzg3LDcgKzc3OSw2IEBACiAJREE3MjE5X1NZU0NMS19NQ0xLID0gMCwKIAlEQTcyMTlfU1lTQ0xLX1BMTCwKIAlEQTcyMTlfU1lTQ0xLX1BMTF9TUk0sCi0JREE3MjE5X1NZU0NMS19QTExfMzJLSFoKIH07CiAKIC8qIFJlZ3VsYXRvcnMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvZXM4MzI4LmMgYi9zb3VuZC9zb2MvY29kZWNzL2VzODMyOC5jCmluZGV4IDk2OWUzMzcuLmFmYTZjNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvZXM4MzI4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9lczgzMjguYwpAQCAtODUsNyArODUsMTUgQEAKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShieXBhc3NfdGx2LCAtMTUwMCwgMzAwLCAwKTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtaWNfdGx2LCAwLCAzMDAsIDApOwogCi1zdGF0aWMgY29uc3QgaW50IGRlZW1waF9zZXR0aW5nc1tdID0geyAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlpbnQgcmF0ZTsKKwl1bnNpZ25lZCBpbnQgdmFsOworfSBkZWVtcGhfc2V0dGluZ3NbXSA9IHsKKwl7IDAsICAgICBFUzgzMjhfREFDQ09OVFJPTDZfREVFTVBIX09GRiB9LAorCXsgMzIwMDAsIEVTODMyOF9EQUNDT05UUk9MNl9ERUVNUEhfMzJrIH0sCisJeyA0NDEwMCwgRVM4MzI4X0RBQ0NPTlRST0w2X0RFRU1QSF80NF8xayB9LAorCXsgNDgwMDAsIEVTODMyOF9EQUNDT05UUk9MNl9ERUVNUEhfNDhrIH0sCit9OwogCiBzdGF0aWMgaW50IGVzODMyOF9zZXRfZGVlbXBoKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKQEAgLTk3LDIxICsxMDUsMjIgQEAKIAkgKiByYXRlLgogCSAqLwogCWlmIChlczgzMjgtPmRlZW1waCkgewotCQliZXN0ID0gMTsKLQkJZm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUoZGVlbXBoX3NldHRpbmdzKTsgaSsrKSB7Ci0JCQlpZiAoYWJzKGRlZW1waF9zZXR0aW5nc1tpXSAtIGVzODMyOC0+cGxheWJhY2tfZnMpIDwKLQkJCSAgICBhYnMoZGVlbXBoX3NldHRpbmdzW2Jlc3RdIC0gZXM4MzI4LT5wbGF5YmFja19mcykpCisJCWJlc3QgPSAwOworCQlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShkZWVtcGhfc2V0dGluZ3MpOyBpKyspIHsKKwkJCWlmIChhYnMoZGVlbXBoX3NldHRpbmdzW2ldLnJhdGUgLSBlczgzMjgtPnBsYXliYWNrX2ZzKSA8CisJCQkgICAgYWJzKGRlZW1waF9zZXR0aW5nc1tiZXN0XS5yYXRlIC0gZXM4MzI4LT5wbGF5YmFja19mcykpCiAJCQkJYmVzdCA9IGk7CiAJCX0KIAotCQl2YWwgPSBiZXN0IDw8IDE7CisJCXZhbCA9IGRlZW1waF9zZXR0aW5nc1tiZXN0XS52YWw7CiAJfSBlbHNlIHsKLQkJdmFsID0gMDsKKwkJdmFsID0gRVM4MzI4X0RBQ0NPTlRST0w2X0RFRU1QSF9PRkY7CiAJfQogCiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2V0IGRlZW1waGFzaXMgJWRcbiIsIHZhbCk7CiAKLQlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgRVM4MzI4X0RBQ0NPTlRST0w2LCAweDYsIHZhbCk7CisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEVTODMyOF9EQUNDT05UUk9MNiwKKwkJCUVTODMyOF9EQUNDT05UUk9MNl9ERUVNUEhfTUFTSywgdmFsKTsKIH0KIAogc3RhdGljIGludCBlczgzMjhfZ2V0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTIwNSwxOCArMjE0LDE4IEBACiAKIC8qIExlZnQgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBlczgzMjhfbGVmdF9taXhlcl9jb250cm9sc1tdID0gewotCVNPQ19EQVBNX1NJTkdMRSgiUGxheWJhY2sgU3dpdGNoIiwgRVM4MzI4X0RBQ0NPTlRST0wxNywgOCwgMSwgMCksCi0JU09DX0RBUE1fU0lOR0xFKCJMZWZ0IEJ5cGFzcyBTd2l0Y2giLCBFUzgzMjhfREFDQ09OVFJPTDE3LCA3LCAxLCAwKSwKLQlTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFBsYXliYWNrIFN3aXRjaCIsIEVTODMyOF9EQUNDT05UUk9MMTgsIDgsIDEsIDApLAotCVNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgQnlwYXNzIFN3aXRjaCIsIEVTODMyOF9EQUNDT05UUk9MMTgsIDcsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUGxheWJhY2sgU3dpdGNoIiwgRVM4MzI4X0RBQ0NPTlRST0wxNywgNywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJMZWZ0IEJ5cGFzcyBTd2l0Y2giLCBFUzgzMjhfREFDQ09OVFJPTDE3LCA2LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFBsYXliYWNrIFN3aXRjaCIsIEVTODMyOF9EQUNDT05UUk9MMTgsIDcsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgQnlwYXNzIFN3aXRjaCIsIEVTODMyOF9EQUNDT05UUk9MMTgsIDYsIDEsIDApLAogfTsKIAogLyogUmlnaHQgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBlczgzMjhfcmlnaHRfbWl4ZXJfY29udHJvbHNbXSA9IHsKLQlTT0NfREFQTV9TSU5HTEUoIkxlZnQgUGxheWJhY2sgU3dpdGNoIiwgRVM4MzI4X0RBQ0NPTlRST0wxOSwgOCwgMSwgMCksCi0JU09DX0RBUE1fU0lOR0xFKCJMZWZ0IEJ5cGFzcyBTd2l0Y2giLCBFUzgzMjhfREFDQ09OVFJPTDE5LCA3LCAxLCAwKSwKLQlTT0NfREFQTV9TSU5HTEUoIlBsYXliYWNrIFN3aXRjaCIsIEVTODMyOF9EQUNDT05UUk9MMjAsIDgsIDEsIDApLAotCVNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgQnlwYXNzIFN3aXRjaCIsIEVTODMyOF9EQUNDT05UUk9MMjAsIDcsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTGVmdCBQbGF5YmFjayBTd2l0Y2giLCBFUzgzMjhfREFDQ09OVFJPTDE5LCA3LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkxlZnQgQnlwYXNzIFN3aXRjaCIsIEVTODMyOF9EQUNDT05UUk9MMTksIDYsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUGxheWJhY2sgU3dpdGNoIiwgRVM4MzI4X0RBQ0NPTlRST0wyMCwgNywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJSaWdodCBCeXBhc3MgU3dpdGNoIiwgRVM4MzI4X0RBQ0NPTlRST0wyMCwgNiwgMSwgMCksCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVzODMyOF9wZ2Ffc2VsW10gPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2VzODMyOC5oIGIvc291bmQvc29jL2NvZGVjcy9lczgzMjguaAppbmRleCBjYjM2YWZlLi4xNTZjNzQ4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2VzODMyOC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZXM4MzI4LmgKQEAgLTE1Myw2ICsxNTMsNyBAQAogI2RlZmluZSBFUzgzMjhfREFDQ09OVFJPTDZfQ0xJQ0tGUkVFICgxIDw8IDMpCiAjZGVmaW5lIEVTODMyOF9EQUNDT05UUk9MNl9EQUNfSU5WUiAoMSA8PCA0KQogI2RlZmluZSBFUzgzMjhfREFDQ09OVFJPTDZfREFDX0lOVkwgKDEgPDwgNSkKKyNkZWZpbmUgRVM4MzI4X0RBQ0NPTlRST0w2X0RFRU1QSF9NQVNLICgzIDw8IDYpCiAjZGVmaW5lIEVTODMyOF9EQUNDT05UUk9MNl9ERUVNUEhfT0ZGICgwIDw8IDYpCiAjZGVmaW5lIEVTODMyOF9EQUNDT05UUk9MNl9ERUVNUEhfMzJrICgxIDw8IDYpCiAjZGVmaW5lIEVTODMyOF9EQUNDT05UUk9MNl9ERUVNUEhfNDRfMWsgKDIgPDwgNikKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvaGRhY19oZG1pLmMgYi9zb3VuZC9zb2MvY29kZWNzL2hkYWNfaGRtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWVjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2hkYWNfaGRtaS5jCkBAIC0wLDAgKzEsNjk3IEBACisvKgorICogIGhkYWNfaGRtaS5jIC0gQVNvYyBIREEtSERNSSBjb2RlYyBkcml2ZXIgZm9yIEludGVsIHBsYXRmb3JtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3JwCisgKiAgQXV0aG9yOiBTYW1yZWVuIE5pbG9mZXIgPHNhbXJlZW4ubmlsb2ZlckBpbnRlbC5jb20+CisgKgkgICAgU3ViaHJhbnN1IFMuIFBydXN0eSA8c3ViaHJhbnN1LnMucHJ1c3R5QGludGVsLmNvbT4KKyAqICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9oZGF1ZGlvX2V4dC5oPgorI2luY2x1ZGUgPHNvdW5kL2hkYV9pOTE1Lmg+CisjaW5jbHVkZSAiLi4vLi4vaGRhL2xvY2FsLmgiCisKKyNkZWZpbmUgQU1QX09VVF9NVVRFCQkweGIwODAKKyNkZWZpbmUgQU1QX09VVF9VTk1VVEUJCTB4YjAwMAorI2RlZmluZSBQSU5fT1VUCQkJKEFDX1BJTkNUTF9PVVRfRU4pCisKKyNkZWZpbmUgSERBX01BWF9DT05ORUNUSU9OUyAgICAgMzIKKworc3RydWN0IGhkYWNfaGRtaV9jdnRfcGFyYW1zIHsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbWluOworCXVuc2lnbmVkIGludCBjaGFubmVsc19tYXg7CisJdTMyIHJhdGVzOworCXU2NCBmb3JtYXRzOworCXVuc2lnbmVkIGludCBtYXhicHM7Cit9OworCitzdHJ1Y3QgaGRhY19oZG1pX2N2dCB7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCWhkYV9uaWRfdCBuaWQ7CisJc3RydWN0IGhkYWNfaGRtaV9jdnRfcGFyYW1zIHBhcmFtczsKK307CisKK3N0cnVjdCBoZGFjX2hkbWlfcGluIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJaGRhX25pZF90IG5pZDsKKwlpbnQgbnVtX211eF9uaWRzOworCWhkYV9uaWRfdCBtdXhfbmlkc1tIREFfTUFYX0NPTk5FQ1RJT05TXTsKK307CisKK3N0cnVjdCBoZGFjX2hkbWlfZGFpX3Bpbl9tYXAgeworCWludCBkYWlfaWQ7CisJc3RydWN0IGhkYWNfaGRtaV9waW4gKnBpbjsKKwlzdHJ1Y3QgaGRhY19oZG1pX2N2dCAqY3Z0OworfTsKKworc3RydWN0IGhkYWNfaGRtaV9wcml2IHsKKwlzdHJ1Y3QgaGRhY19oZG1pX2RhaV9waW5fbWFwIGRhaV9tYXBbM107CisJc3RydWN0IGxpc3RfaGVhZCBwaW5fbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGN2dF9saXN0OworCWludCBudW1fcGluOworCWludCBudW1fY3Z0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaGRhY19leHRfZGV2aWNlICp0b19oZGFfZXh0X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkYWNfZGV2aWNlICpoZGFjID0gZGV2X3RvX2hkYWNfZGV2KGRldik7CisKKwlyZXR1cm4gdG9fZWhkYWNfZGV2aWNlKGhkYWMpOworfQorCitzdGF0aWMgaW50IGhkYWNfaGRtaV9zZXR1cF9zdHJlYW0oc3RydWN0IGhkYWNfZXh0X2RldmljZSAqaGRhYywKKwkJCQloZGFfbmlkX3QgY3Z0X25pZCwgaGRhX25pZF90IHBpbl9uaWQsCisJCQkJdTMyIHN0cmVhbV90YWcsIGludCBmb3JtYXQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWRldl9kYmcoJmhkYWMtPmhkYWMuZGV2LCAiY3Z0IG5pZCAlZCBwbmlkICVkIHN0cmVhbSAlZCBmb3JtYXQgMHgleFxuIiwKKwkJCWN2dF9uaWQsIHBpbl9uaWQsIHN0cmVhbV90YWcsIGZvcm1hdCk7CisKKwl2YWwgPSAoc3RyZWFtX3RhZyA8PCA0KTsKKworCXNuZF9oZGFjX2NvZGVjX3dyaXRlKCZoZGFjLT5oZGFjLCBjdnRfbmlkLCAwLAorCQkJCUFDX1ZFUkJfU0VUX0NIQU5ORUxfU1RSRUFNSUQsIHZhbCk7CisJc25kX2hkYWNfY29kZWNfd3JpdGUoJmhkYWMtPmhkYWMsIGN2dF9uaWQsIDAsCisJCQkJQUNfVkVSQl9TRVRfU1RSRUFNX0ZPUk1BVCwgZm9ybWF0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraGRhY19oZG1pX3NldF9kaXBfaW5kZXgoc3RydWN0IGhkYWNfZXh0X2RldmljZSAqaGRhYywgaGRhX25pZF90IHBpbl9uaWQsCisJCQkJaW50IHBhY2tldF9pbmRleCwgaW50IGJ5dGVfaW5kZXgpCit7CisJaW50IHZhbDsKKworCXZhbCA9IChwYWNrZXRfaW5kZXggPDwgNSkgfCAoYnl0ZV9pbmRleCAmIDB4MWYpOworCisJc25kX2hkYWNfY29kZWNfd3JpdGUoJmhkYWMtPmhkYWMsIHBpbl9uaWQsIDAsCisJCQkJQUNfVkVSQl9TRVRfSERNSV9ESVBfSU5ERVgsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgaGRhY19oZG1pX3NldHVwX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaGRhY19leHRfZGV2aWNlICpoZGFjLAorCQkJCWhkYV9uaWRfdCBjdnRfbmlkLCBoZGFfbmlkX3QgcGluX25pZCkKK3sKKwl1aW50OF90IGJ1ZmZlcltIRE1JX0lORk9GUkFNRV9IRUFERVJfU0laRSArIEhETUlfQVVESU9fSU5GT0ZSQU1FX1NJWkVdOworCXN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSBmcmFtZTsKKwl1OCAqZGlwID0gKHU4ICopJmZyYW1lOworCWludCByZXQ7CisJaW50IGk7CisKKwloZG1pX2F1ZGlvX2luZm9mcmFtZV9pbml0KCZmcmFtZSk7CisKKwkvKiBEZWZhdWx0IHN0ZXJlbyBmb3Igbm93ICovCisJZnJhbWUuY2hhbm5lbHMgPSAyOworCisJLyogc2V0dXAgY2hhbm5lbCBjb3VudCAqLworCXNuZF9oZGFjX2NvZGVjX3dyaXRlKCZoZGFjLT5oZGFjLCBjdnRfbmlkLCAwLAorCQkJICAgIEFDX1ZFUkJfU0VUX0NWVF9DSEFOX0NPVU5ULCBmcmFtZS5jaGFubmVscyAtIDEpOworCisJcmV0ID0gaGRtaV9hdWRpb19pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc3RvcCBpbmZvZnJhbWUgdHJhbnNtaXNzaW9uICovCisJaGRhY19oZG1pX3NldF9kaXBfaW5kZXgoaGRhYywgcGluX25pZCwgMHgwLCAweDApOworCXNuZF9oZGFjX2NvZGVjX3dyaXRlKCZoZGFjLT5oZGFjLCBwaW5fbmlkLCAwLAorCQkJQUNfVkVSQl9TRVRfSERNSV9ESVBfWE1JVCwgQUNfRElQWE1JVF9ESVNBQkxFKTsKKworCisJLyogIEZpbGwgaW5mb2ZyYW1lLiBJbmRleCBhdXRvLWluY3JlbWVudGVkICovCisJaGRhY19oZG1pX3NldF9kaXBfaW5kZXgoaGRhYywgcGluX25pZCwgMHgwLCAweDApOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZnJhbWUpOyBpKyspCisJCXNuZF9oZGFjX2NvZGVjX3dyaXRlKCZoZGFjLT5oZGFjLCBwaW5fbmlkLCAwLAorCQkJCUFDX1ZFUkJfU0VUX0hETUlfRElQX0RBVEEsIGRpcFtpXSk7CisKKwkvKiBTdGFydCBpbmZvZnJhbWUgKi8KKwloZGFjX2hkbWlfc2V0X2RpcF9pbmRleChoZGFjLCBwaW5fbmlkLCAweDAsIDB4MCk7CisJc25kX2hkYWNfY29kZWNfd3JpdGUoJmhkYWMtPmhkYWMsIHBpbl9uaWQsIDAsCisJCQlBQ19WRVJCX1NFVF9IRE1JX0RJUF9YTUlULCBBQ19ESVBYTUlUX0JFU1QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhkYWNfaGRtaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGhkYWNfZXh0X2RldmljZSAqZWRldiwKKwkJc3RydWN0IGhkYWNfaGRtaV9kYWlfcGluX21hcCAqZGFpX21hcCwgdW5zaWduZWQgaW50IHB3cl9zdGF0ZSkKK3sKKwkvKiBQb3dlciB1cCBwaW4gd2lkZ2V0ICovCisJaWYgKCFzbmRfaGRhY19jaGVja19wb3dlcl9zdGF0ZSgmZWRldi0+aGRhYywgZGFpX21hcC0+cGluLT5uaWQsCisJCQkJCQlwd3Jfc3RhdGUpKQorCQlzbmRfaGRhY19jb2RlY193cml0ZSgmZWRldi0+aGRhYywgZGFpX21hcC0+cGluLT5uaWQsIDAsCisJCQlBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgcHdyX3N0YXRlKTsKKworCS8qIFBvd2VyIHVwIGNvbnZlcnRlciAqLworCWlmICghc25kX2hkYWNfY2hlY2tfcG93ZXJfc3RhdGUoJmVkZXYtPmhkYWMsIGRhaV9tYXAtPmN2dC0+bmlkLAorCQkJCQkJcHdyX3N0YXRlKSkKKwkJc25kX2hkYWNfY29kZWNfd3JpdGUoJmVkZXYtPmhkYWMsIGRhaV9tYXAtPmN2dC0+bmlkLCAwLAorCQkJQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIHB3cl9zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgaGRhY19oZG1pX3BsYXliYWNrX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGhkYWNfZXh0X2RldmljZSAqaGRhYyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJc3RydWN0IGhkYWNfaGRtaV9wcml2ICpoZG1pID0gaGRhYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZGFjX2hkbWlfZGFpX3Bpbl9tYXAgKmRhaV9tYXA7CisJc3RydWN0IGhkYWNfZXh0X2RtYV9wYXJhbXMgKmRkOworCWludCByZXQ7CisKKwlpZiAoZGFpLT5pZCA+IDApIHsKKwkJZGV2X2VycigmaGRhYy0+aGRhYy5kZXYsICJPbmx5IG9uZSBkYWkgc3VwcG9ydGVkIGFzIG9mIG5vd1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRhaV9tYXAgPSAmaGRtaS0+ZGFpX21hcFtkYWktPmlkXTsKKworCWRkID0gKHN0cnVjdCBoZGFjX2V4dF9kbWFfcGFyYW1zICopc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKGRhaSwgc3Vic3RyZWFtKTsKKwlkZXZfZGJnKCZoZGFjLT5oZGFjLmRldiwgInN0cmVhbSB0YWcgZnJvbSBjcHUgZGFpICVkIGZvcm1hdCBpbiBjdnQgMHgleFxuIiwKKwkJCWRkLT5zdHJlYW1fdGFnLAlkZC0+Zm9ybWF0KTsKKworCXJldCA9IGhkYWNfaGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoaGRhYywgZGFpX21hcC0+Y3Z0LT5uaWQsCisJCQkJCQlkYWlfbWFwLT5waW4tPm5pZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gaGRhY19oZG1pX3NldHVwX3N0cmVhbShoZGFjLCBkYWlfbWFwLT5jdnQtPm5pZCwKKwkJCWRhaV9tYXAtPnBpbi0+bmlkLCBkZC0+c3RyZWFtX3RhZywgZGQtPmZvcm1hdCk7Cit9CisKK3N0YXRpYyBpbnQgaGRhY19oZG1pX3NldF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpocGFyYW1zLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgaGRhY19leHRfZGV2aWNlICpoZGFjID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKwlzdHJ1Y3QgaGRhY19leHRfZG1hX3BhcmFtcyAqZGQ7CisKKwlpZiAoZGFpLT5pZCA+IDApIHsKKwkJZGV2X2VycigmaGRhYy0+aGRhYy5kZXYsICJPbmx5IG9uZSBkYWkgc3VwcG9ydGVkIGFzIG9mIG5vd1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRkID0ga3phbGxvYyhzaXplb2YoKmRkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGQtPmZvcm1hdCA9IHNuZF9oZGFjX2NhbGNfc3RyZWFtX2Zvcm1hdChwYXJhbXNfcmF0ZShocGFyYW1zKSwKKwkJCXBhcmFtc19jaGFubmVscyhocGFyYW1zKSwgcGFyYW1zX2Zvcm1hdChocGFyYW1zKSwKKwkJCTI0LCAwKTsKKworCXNuZF9zb2NfZGFpX3NldF9kbWFfZGF0YShkYWksIHN1YnN0cmVhbSwgKHZvaWQgKilkZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZGFjX2hkbWlfcGxheWJhY2tfY2xlYW51cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGhkYWNfZXh0X2RldmljZSAqZWRldiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJc3RydWN0IGhkYWNfZXh0X2RtYV9wYXJhbXMgKmRkOworCXN0cnVjdCBoZGFjX2hkbWlfcHJpdiAqaGRtaSA9IGVkZXYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRhY19oZG1pX2RhaV9waW5fbWFwICpkYWlfbWFwOworCisJZGFpX21hcCA9ICZoZG1pLT5kYWlfbWFwW2RhaS0+aWRdOworCisJc25kX2hkYWNfY29kZWNfd3JpdGUoJmVkZXYtPmhkYWMsIGRhaV9tYXAtPmN2dC0+bmlkLCAwLAorCQkJCUFDX1ZFUkJfU0VUX0NIQU5ORUxfU1RSRUFNSUQsIDApOworCXNuZF9oZGFjX2NvZGVjX3dyaXRlKCZlZGV2LT5oZGFjLCBkYWlfbWFwLT5jdnQtPm5pZCwgMCwKKwkJCQlBQ19WRVJCX1NFVF9TVFJFQU1fRk9STUFULCAwKTsKKworCWRkID0gKHN0cnVjdCBoZGFjX2V4dF9kbWFfcGFyYW1zICopc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKGRhaSwgc3Vic3RyZWFtKTsKKwlzbmRfc29jX2RhaV9zZXRfZG1hX2RhdGEoZGFpLCBzdWJzdHJlYW0sIE5VTEwpOworCisJa2ZyZWUoZGQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGRhY19oZG1pX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGhkYWNfZXh0X2RldmljZSAqaGRhYyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJc3RydWN0IGhkYWNfaGRtaV9wcml2ICpoZG1pID0gaGRhYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZGFjX2hkbWlfZGFpX3Bpbl9tYXAgKmRhaV9tYXA7CisJaW50IHZhbDsKKworCWlmIChkYWktPmlkID4gMCkgeworCQlkZXZfZXJyKCZoZGFjLT5oZGFjLmRldiwgIk9ubHkgb25lIGRhaSBzdXBwb3J0ZWQgYXMgb2Ygbm93XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGFpX21hcCA9ICZoZG1pLT5kYWlfbWFwW2RhaS0+aWRdOworCisJdmFsID0gc25kX2hkYWNfY29kZWNfcmVhZCgmaGRhYy0+aGRhYywgZGFpX21hcC0+cGluLT5uaWQsIDAsCisJCQkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCk7CisJZGV2X2luZm8oJmhkYWMtPmhkYWMuZGV2LCAiVmFsIGZvciBBQ19WRVJCX0dFVF9QSU5fU0VOU0U6ICV4XG4iLCB2YWwpOworCisJaWYgKCghKHZhbCAmIEFDX1BJTlNFTlNFX1BSRVNFTkNFKSkgfHwgKCEodmFsICYgQUNfUElOU0VOU0VfRUxEVikpKSB7CisJCWRldl9lcnIoJmhkYWMtPmhkYWMuZGV2LCAiTW9uaXRvciBwcmVzZW5jZSBpbnZhbGlkIHdpdGggdmFsOiAleFxuIiwgdmFsKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaGRhY19oZG1pX3NldF9wb3dlcl9zdGF0ZShoZGFjLCBkYWlfbWFwLCBBQ19QV1JTVF9EMCk7CisKKwlzbmRfaGRhY19jb2RlY193cml0ZSgmaGRhYy0+aGRhYywgZGFpX21hcC0+cGluLT5uaWQsIDAsCisJCQlBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSk7CisKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoZGFjX2hkbWlfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgaGRhY19leHRfZGV2aWNlICpoZGFjID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKwlzdHJ1Y3QgaGRhY19oZG1pX3ByaXYgKmhkbWkgPSBoZGFjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkYWNfaGRtaV9kYWlfcGluX21hcCAqZGFpX21hcDsKKworCWRhaV9tYXAgPSAmaGRtaS0+ZGFpX21hcFtkYWktPmlkXTsKKworCWhkYWNfaGRtaV9zZXRfcG93ZXJfc3RhdGUoaGRhYywgZGFpX21hcCwgQUNfUFdSU1RfRDMpOworCisJc25kX2hkYWNfY29kZWNfd3JpdGUoJmhkYWMtPmhkYWMsIGRhaV9tYXAtPnBpbi0+bmlkLCAwLAorCQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFKTsKK30KKworc3RhdGljIGludAoraGRhY19oZG1pX3F1ZXJ5X2N2dF9wYXJhbXMoc3RydWN0IGhkYWNfZGV2aWNlICpoZGFjLCBzdHJ1Y3QgaGRhY19oZG1pX2N2dCAqY3Z0KQoreworCWludCBlcnI7CisKKwkvKiBPbmx5IHN0ZXJlbyBzdXBwb3J0ZWQgYXMgb2Ygbm93ICovCisJY3Z0LT5wYXJhbXMuY2hhbm5lbHNfbWluID0gY3Z0LT5wYXJhbXMuY2hhbm5lbHNfbWF4ID0gMjsKKworCWVyciA9IHNuZF9oZGFjX3F1ZXJ5X3N1cHBvcnRlZF9wY20oaGRhYywgY3Z0LT5uaWQsCisJCQkmY3Z0LT5wYXJhbXMucmF0ZXMsCisJCQkmY3Z0LT5wYXJhbXMuZm9ybWF0cywKKwkJCSZjdnQtPnBhcmFtcy5tYXhicHMpOworCWlmIChlcnIgPCAwKQorCQlkZXZfZXJyKCZoZGFjLT5kZXYsCisJCQkiRmFpbGVkIHRvIHF1ZXJ5IHBjbSBwYXJhbXMgZm9yIG5pZCAlZDogJWRcbiIsCisJCQljdnQtPm5pZCwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGhkYWNfaGRtaV9maWxsX3dpZGdldF9pbmZvKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCWVudW0gc25kX3NvY19kYXBtX3R5cGUgaWQsCisJCQkJY29uc3QgY2hhciAqd25hbWUsIGNvbnN0IGNoYXIgKnN0cmVhbSkKK3sKKwl3LT5pZCA9IGlkOworCXctPm5hbWUgPSB3bmFtZTsKKwl3LT5zbmFtZSA9IHN0cmVhbTsKKwl3LT5yZWcgPSBTTkRfU09DX05PUE07CisJdy0+c2hpZnQgPSAwOworCXctPmtjb250cm9sX25ld3MgPSBOVUxMOworCXctPm51bV9rY29udHJvbHMgPSAwOworCXctPnByaXYgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBoZGFjX2hkbWlfZmlsbF9yb3V0ZShzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlICpyb3V0ZSwKKwkJY29uc3QgY2hhciAqc2luaywgY29uc3QgY2hhciAqY29udHJvbCwgY29uc3QgY2hhciAqc3JjKQoreworCXJvdXRlLT5zaW5rID0gc2luazsKKwlyb3V0ZS0+c291cmNlID0gc3JjOworCXJvdXRlLT5jb250cm9sID0gY29udHJvbDsKKwlyb3V0ZS0+Y29ubmVjdGVkID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2ZpbGxfd2lkZ2V0X3JvdXRlX21hcChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCisJCQkJCXN0cnVjdCBoZGFjX2hkbWlfZGFpX3Bpbl9tYXAgKmRhaV9tYXApCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSByb3V0ZVsxXTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3aWRnZXRzWzJdID0geyB7MH0gfTsKKworCW1lbXNldCgmcm91dGUsIDAsIHNpemVvZihyb3V0ZSkpOworCisJaGRhY19oZG1pX2ZpbGxfd2lkZ2V0X2luZm8oJndpZGdldHNbMF0sIHNuZF9zb2NfZGFwbV9vdXRwdXQsCisJCQkiaGlmMSBPdXRwdXQiLCBOVUxMKTsKKwloZGFjX2hkbWlfZmlsbF93aWRnZXRfaW5mbygmd2lkZ2V0c1sxXSwgc25kX3NvY19kYXBtX2FpZl9pbiwKKwkJCSJDb3ZlcnRlciAxIiwgImhpZjEiKTsKKworCWhkYWNfaGRtaV9maWxsX3JvdXRlKCZyb3V0ZVswXSwgImhpZjEgT3V0cHV0IiwgTlVMTCwgIkNvdmVydGVyIDEiKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd2lkZ2V0cywgQVJSQVlfU0laRSh3aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgcm91dGUsIEFSUkFZX1NJWkUocm91dGUpKTsKK30KKworc3RhdGljIGludCBoZGFjX2hkbWlfaW5pdF9kYWlfbWFwKHN0cnVjdCBoZGFjX2V4dF9kZXZpY2UgKmVkZXYpCit7CisJc3RydWN0IGhkYWNfaGRtaV9wcml2ICpoZG1pID0gZWRldi0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZGFjX2hkbWlfZGFpX3Bpbl9tYXAgKmRhaV9tYXAgPSAmaGRtaS0+ZGFpX21hcFswXTsKKwlzdHJ1Y3QgaGRhY19oZG1pX2N2dCAqY3Z0OworCXN0cnVjdCBoZGFjX2hkbWlfcGluICpwaW47CisKKwlpZiAobGlzdF9lbXB0eSgmaGRtaS0+Y3Z0X2xpc3QpIHx8IGxpc3RfZW1wdHkoJmhkbWktPnBpbl9saXN0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEN1cnJlbnRseSBvbiBib2FyZCBvbmx5IDEgcGluIGFuZCAxIGNvbnZlcnRlciBpcyBlbmFibGVkIGZvcgorCSAqIHNpbXBsaWZpY2F0aW9uLCBtb3JlIHdpbGwgYmUgYWRkZWQgZXZlbnR1YWxseQorCSAqIFNvIHVzaW5nIGZpeGVkIG1hcCBmb3IgZGFpX2lkOnBpbjpjdnQKKwkgKi8KKwljdnQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZoZG1pLT5jdnRfbGlzdCwgc3RydWN0IGhkYWNfaGRtaV9jdnQsIGhlYWQpOworCXBpbiA9IGxpc3RfZmlyc3RfZW50cnkoJmhkbWktPnBpbl9saXN0LCBzdHJ1Y3QgaGRhY19oZG1pX3BpbiwgaGVhZCk7CisKKwlkYWlfbWFwLT5kYWlfaWQgPSAwOworCWRhaV9tYXAtPnBpbiA9IHBpbjsKKworCWRhaV9tYXAtPmN2dCA9IGN2dDsKKworCS8qIEVuYWJsZSBvdXQgcGF0aCBmb3IgdGhpcyBwaW4gd2lkZ2V0ICovCisJc25kX2hkYWNfY29kZWNfd3JpdGUoJmVkZXYtPmhkYWMsIHBpbi0+bmlkLCAwLAorCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKKworCS8qIEVuYWJsZSB0cmFuc21pc3Npb24gKi8KKwlzbmRfaGRhY19jb2RlY193cml0ZSgmZWRldi0+aGRhYywgY3Z0LT5uaWQsIDAsCisJCQlBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMSk7CisKKwkvKiBDYXRlZ29yeSBDb2RlIChDQykgdG8gemVybyAqLworCXNuZF9oZGFjX2NvZGVjX3dyaXRlKCZlZGV2LT5oZGFjLCBjdnQtPm5pZCwgMCwKKwkJCUFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8yLCAwKTsKKworCXNuZF9oZGFjX2NvZGVjX3dyaXRlKCZlZGV2LT5oZGFjLCBwaW4tPm5pZCwgMCwKKwkJCUFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkYWNfaGRtaV9hZGRfY3Z0KHN0cnVjdCBoZGFjX2V4dF9kZXZpY2UgKmVkZXYsIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IGhkYWNfaGRtaV9wcml2ICpoZG1pID0gZWRldi0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZGFjX2hkbWlfY3Z0ICpjdnQ7CisKKwljdnQgPSBremFsbG9jKHNpemVvZigqY3Z0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdnQpCisJCXJldHVybiAtRU5PTUVNOworCisJY3Z0LT5uaWQgPSBuaWQ7CisKKwlsaXN0X2FkZF90YWlsKCZjdnQtPmhlYWQsICZoZG1pLT5jdnRfbGlzdCk7CisJaGRtaS0+bnVtX2N2dCsrOworCisJcmV0dXJuIGhkYWNfaGRtaV9xdWVyeV9jdnRfcGFyYW1zKCZlZGV2LT5oZGFjLCBjdnQpOworfQorCitzdGF0aWMgaW50IGhkYWNfaGRtaV9hZGRfcGluKHN0cnVjdCBoZGFjX2V4dF9kZXZpY2UgKmVkZXYsIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IGhkYWNfaGRtaV9wcml2ICpoZG1pID0gZWRldi0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZGFjX2hkbWlfcGluICpwaW47CisKKwlwaW4gPSBremFsbG9jKHNpemVvZigqcGluKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaW4pCisJCXJldHVybiAtRU5PTUVNOworCisJcGluLT5uaWQgPSBuaWQ7CisKKwlsaXN0X2FkZF90YWlsKCZwaW4tPmhlYWQsICZoZG1pLT5waW5fbGlzdCk7CisJaGRtaS0+bnVtX3BpbisrOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQYXJzZSBhbGwgbm9kZXMgYW5kIHN0b3JlIHRoZSBjdnQvcGluIG5pZHMgaW4gYXJyYXkKKyAqIEFkZCBvbmUgdGltZSBpbml0aWFsaXphdGlvbiBmb3IgcGluIGFuZCBjdnQgd2lkZ2V0cworICovCitzdGF0aWMgaW50IGhkYWNfaGRtaV9wYXJzZV9hbmRfbWFwX25pZChzdHJ1Y3QgaGRhY19leHRfZGV2aWNlICplZGV2KQoreworCWhkYV9uaWRfdCBuaWQ7CisJaW50IGksIG51bV9ub2RlczsKKwlzdHJ1Y3QgaGRhY19kZXZpY2UgKmhkYWMgPSAmZWRldi0+aGRhYzsKKwlzdHJ1Y3QgaGRhY19oZG1pX3ByaXYgKmhkbWkgPSBlZGV2LT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCW51bV9ub2RlcyA9IHNuZF9oZGFjX2dldF9zdWJfbm9kZXMoaGRhYywgaGRhYy0+YWZnLCAmbmlkKTsKKwlpZiAoIW5pZCB8fCBudW1fbm9kZXMgPD0gMCkgeworCQlkZXZfd2FybigmaGRhYy0+ZGV2LCAiSERNSTogZmFpbGVkIHRvIGdldCBhZmcgc3ViIG5vZGVzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaGRhYy0+bnVtX25vZGVzID0gbnVtX25vZGVzOworCWhkYWMtPnN0YXJ0X25pZCA9IG5pZDsKKworCWZvciAoaSA9IDA7IGkgPCBoZGFjLT5udW1fbm9kZXM7IGkrKywgbmlkKyspIHsKKwkJdW5zaWduZWQgaW50IGNhcHM7CisJCXVuc2lnbmVkIGludCB0eXBlOworCisJCWNhcHMgPSBnZXRfd2NhcHMoaGRhYywgbmlkKTsKKwkJdHlwZSA9IGdldF93Y2Fwc190eXBlKGNhcHMpOworCisJCWlmICghKGNhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoICh0eXBlKSB7CisKKwkJY2FzZSBBQ19XSURfQVVEX09VVDoKKwkJCXJldCA9IGhkYWNfaGRtaV9hZGRfY3Z0KGVkZXYsIG5pZCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CisKKwkJY2FzZSBBQ19XSURfUElOOgorCQkJcmV0ID0gaGRhY19oZG1pX2FkZF9waW4oZWRldiwgbmlkKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCWhkYWMtPmVuZF9uaWQgPSBuaWQ7CisKKwlpZiAoIWhkbWktPm51bV9waW4gfHwgIWhkbWktPm51bV9jdnQpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIGhkYWNfaGRtaV9pbml0X2RhaV9tYXAoZWRldik7Cit9CisKK3N0YXRpYyBpbnQgaGRtaV9jb2RlY19wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGhkYWNfZXh0X2RldmljZSAqZWRldiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBoZGFjX2hkbWlfcHJpdiAqaGRtaSA9IGVkZXYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPQorCQlzbmRfc29jX2NvbXBvbmVudF9nZXRfZGFwbSgmY29kZWMtPmNvbXBvbmVudCk7CisKKwllZGV2LT5zY29kZWMgPSBjb2RlYzsKKworCWNyZWF0ZV9maWxsX3dpZGdldF9yb3V0ZV9tYXAoZGFwbSwgJmhkbWktPmRhaV9tYXBbMF0pOworCisJLyogSW1wOiBTdG9yZSB0aGUgY2FyZCBwb2ludGVyIGluIGhkYV9jb2RlYyAqLworCWVkZXYtPmNhcmQgPSBkYXBtLT5jYXJkLT5zbmRfY2FyZDsKKworCS8qCisJICogaGRhY19kZXZpY2UgY29yZSBhbHJlYWR5IHNldHMgdGhlIHN0YXRlIHRvIGFjdGl2ZSBhbmQgY2FsbHMKKwkgKiBnZXRfbm9yZXN1bWUuIFNvIGVuYWJsZSBydW50aW1lIGFuZCBzZXQgdGhlIGRldmljZSB0byBzdXNwZW5kLgorCSAqLworCXBtX3J1bnRpbWVfZW5hYmxlKCZlZGV2LT5oZGFjLmRldik7CisJcG1fcnVudGltZV9wdXQoJmVkZXYtPmhkYWMuZGV2KTsKKwlwbV9ydW50aW1lX3N1c3BlbmQoJmVkZXYtPmhkYWMuZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkbWlfY29kZWNfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgaGRhY19leHRfZGV2aWNlICplZGV2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJmVkZXYtPmhkYWMuZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBoZG1pX2hkYV9jb2RlYyA9IHsKKwkucHJvYmUJCT0gaGRtaV9jb2RlY19wcm9iZSwKKwkucmVtb3ZlCQk9IGhkbWlfY29kZWNfcmVtb3ZlLAorCS5pZGxlX2JpYXNfb2ZmCT0gdHJ1ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGhkbWlfZGFpX29wcyA9IHsKKwkuc3RhcnR1cCA9IGhkYWNfaGRtaV9wY21fb3BlbiwKKwkuc2h1dGRvd24gPSBoZGFjX2hkbWlfcGNtX2Nsb3NlLAorCS5od19wYXJhbXMgPSBoZGFjX2hkbWlfc2V0X2h3X3BhcmFtcywKKwkucHJlcGFyZSA9IGhkYWNfaGRtaV9wbGF5YmFja19wcmVwYXJlLAorCS5od19mcmVlID0gaGRhY19oZG1pX3BsYXliYWNrX2NsZWFudXAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBoZG1pX2RhaXNbXSA9IHsKKwl7CS5uYW1lID0gImludGVsLWhkbWktaGlmMSIsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJoaWYxIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV8zMjAwMCB8CisJCQkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCB8CisJCQkJU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCB8CisJCQkJU05EUlZfUENNX1JBVEVfMTc2NDAwIHwgU05EUlZfUENNX1JBVEVfMTkyMDAwLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQkJU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwKKwkJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8CisJCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisKKwkJfSwKKwkJLm9wcyA9ICZoZG1pX2RhaV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgaGRhY19oZG1pX2Rldl9wcm9iZShzdHJ1Y3QgaGRhY19leHRfZGV2aWNlICplZGV2KQoreworCXN0cnVjdCBoZGFjX2RldmljZSAqY29kZWMgPSAmZWRldi0+aGRhYzsKKwlzdHJ1Y3QgaGRhY19oZG1pX3ByaXYgKmhkbWlfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCWhkbWlfcHJpdiA9IGRldm1fa3phbGxvYygmY29kZWMtPmRldiwgc2l6ZW9mKCpoZG1pX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaGRtaV9wcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZWRldi0+cHJpdmF0ZV9kYXRhID0gaGRtaV9wcml2OworCisJZGV2X3NldF9kcnZkYXRhKCZjb2RlYy0+ZGV2LCBlZGV2KTsKKworCUlOSVRfTElTVF9IRUFEKCZoZG1pX3ByaXYtPnBpbl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaGRtaV9wcml2LT5jdnRfbGlzdCk7CisKKwlyZXQgPSBoZGFjX2hkbWlfcGFyc2VfYW5kX21hcF9uaWQoZWRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBBU29DIHNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmNvZGVjLT5kZXYsICZoZG1pX2hkYV9jb2RlYywKKwkJCWhkbWlfZGFpcywgQVJSQVlfU0laRShoZG1pX2RhaXMpKTsKK30KKworc3RhdGljIGludCBoZGFjX2hkbWlfZGV2X3JlbW92ZShzdHJ1Y3QgaGRhY19leHRfZGV2aWNlICplZGV2KQoreworCXN0cnVjdCBoZGFjX2hkbWlfcHJpdiAqaGRtaSA9IGVkZXYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRhY19oZG1pX3BpbiAqcGluLCAqcGluX25leHQ7CisJc3RydWN0IGhkYWNfaGRtaV9jdnQgKmN2dCwgKmN2dF9uZXh0OworCisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZlZGV2LT5oZGFjLmRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3Z0LCBjdnRfbmV4dCwgJmhkbWktPmN2dF9saXN0LCBoZWFkKSB7CisJCWxpc3RfZGVsKCZjdnQtPmhlYWQpOworCQlrZnJlZShjdnQpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwaW4sIHBpbl9uZXh0LCAmaGRtaS0+cGluX2xpc3QsIGhlYWQpIHsKKwkJbGlzdF9kZWwoJnBpbi0+aGVhZCk7CisJCWtmcmVlKHBpbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaGRhY19oZG1pX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkYWNfZXh0X2RldmljZSAqZWRldiA9IHRvX2hkYV9leHRfZGV2aWNlKGRldik7CisJc3RydWN0IGhkYWNfZGV2aWNlICpoZGFjID0gJmVkZXYtPmhkYWM7CisJc3RydWN0IGhkYWNfYnVzICpidXMgPSBoZGFjLT5idXM7CisJaW50IGVycjsKKworCWRldl9kYmcoZGV2LCAiRW50ZXI6ICVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBjb250cm9sbGVyIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIGZvciB0aGUgZmlyc3QgdGltZSAqLworCWlmICghYnVzKQorCQlyZXR1cm4gMDsKKworCS8qIFBvd2VyIGRvd24gYWZnICovCisJaWYgKCFzbmRfaGRhY19jaGVja19wb3dlcl9zdGF0ZShoZGFjLCBoZGFjLT5hZmcsIEFDX1BXUlNUX0QzKSkKKwkJc25kX2hkYWNfY29kZWNfd3JpdGUoaGRhYywgaGRhYy0+YWZnLCAwLAorCQkJQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIEFDX1BXUlNUX0QzKTsKKworCWVyciA9IHNuZF9oZGFjX2Rpc3BsYXlfcG93ZXIoYnVzLCBmYWxzZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihidXMtPmRldiwgIkNhbm5vdCB0dXJuIG9uIGRpc3BsYXkgcG93ZXIgb24gaTkxNVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGRhY19oZG1pX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaGRhY19leHRfZGV2aWNlICplZGV2ID0gdG9faGRhX2V4dF9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgaGRhY19kZXZpY2UgKmhkYWMgPSAmZWRldi0+aGRhYzsKKwlzdHJ1Y3QgaGRhY19idXMgKmJ1cyA9IGhkYWMtPmJ1czsKKwlpbnQgZXJyOworCisJZGV2X2RiZyhkZXYsICJFbnRlcjogJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIGNvbnRyb2xsZXIgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgZm9yIHRoZSBmaXJzdCB0aW1lICovCisJaWYgKCFidXMpCisJCXJldHVybiAwOworCisJZXJyID0gc25kX2hkYWNfZGlzcGxheV9wb3dlcihidXMsIHRydWUpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoYnVzLT5kZXYsICJDYW5ub3QgdHVybiBvbiBkaXNwbGF5IHBvd2VyIG9uIGk5MTVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFBvd2VyIHVwIGFmZyAqLworCWlmICghc25kX2hkYWNfY2hlY2tfcG93ZXJfc3RhdGUoaGRhYywgaGRhYy0+YWZnLCBBQ19QV1JTVF9EMCkpCisJCXNuZF9oZGFjX2NvZGVjX3dyaXRlKGhkYWMsIGhkYWMtPmFmZywgMCwKKwkJCUFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBBQ19QV1JTVF9EMCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGhkYWNfaGRtaV9ydW50aW1lX3N1c3BlbmQgTlVMTAorI2RlZmluZSBoZGFjX2hkbWlfcnVudGltZV9yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBoZGFjX2hkbWlfcG0gPSB7CisJU0VUX1JVTlRJTUVfUE1fT1BTKGhkYWNfaGRtaV9ydW50aW1lX3N1c3BlbmQsIGhkYWNfaGRtaV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2RldmljZV9pZCBoZG1pX2xpc3RbXSA9IHsKKwlIREFfQ09ERUNfRVhUX0VOVFJZKDB4ODA4NjI4MDksIDB4MTAwMDAwLCAiU2t5bGFrZSBIRE1JIiwgMCksCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGRhdWRpbywgaGRtaV9saXN0KTsKKworc3RhdGljIHN0cnVjdCBoZGFjX2V4dF9kcml2ZXIgaGRtaV9kcml2ZXIgPSB7CisJLiBoZGFjID0geworCQkuZHJpdmVyID0geworCQkJLm5hbWUgICA9ICJIRE1JIEhEQSBDb2RlYyIsCisJCQkucG0gPSAmaGRhY19oZG1pX3BtLAorCQl9LAorCQkuaWRfdGFibGUgICAgICAgPSBoZG1pX2xpc3QsCisJfSwKKwkucHJvYmUgICAgICAgICAgPSBoZGFjX2hkbWlfZGV2X3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IGhkYWNfaGRtaV9kZXZfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGRtaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNuZF9oZGFfZXh0X2RyaXZlcl9yZWdpc3RlcigmaGRtaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGRtaV9leGl0KHZvaWQpCit7CisJc25kX2hkYV9leHRfZHJpdmVyX3VucmVnaXN0ZXIoJmhkbWlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaGRtaV9pbml0KTsKK21vZHVsZV9leGl0KGhkbWlfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSERNSSBIRCBjb2RlYyIpOworTU9EVUxFX0FVVEhPUigiU2FtcmVlbiBOaWxvZmVyPHNhbXJlZW4ubmlsb2ZlckBpbnRlbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJTdWJocmFuc3UgUy4gUHJ1c3R5PHN1YmhyYW5zdS5zLnBydXN0eUBpbnRlbC5jb20+Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2lubm9fcmszMDM2LmMgYi9zb3VuZC9zb2MvY29kZWNzL2lubm9fcmszMDM2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2ZTg4NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvaW5ub19yazMwMzYuYwpAQCAtMCwwICsxLDQ5MCBAQAorLyoKKyAqIERyaXZlciBvZiBJbm5vIGNvZGVjIGZvciByazMwMzYgYnkgUm9ja2NoaXAgSW5jLgorICoKKyAqIEF1dGhvcjogUm9ja2NoaXAgSW5jLgorICogQXV0aG9yOiBaaGVuZyBTaHVuUWlhbjx6aGVuZ3NxQHJvY2stY2hpcHMuY29tPgorICovCisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSAiaW5ub19yazMwMzYuaCIKKworc3RydWN0IHJrMzAzNl9jb2RlY19wcml2IHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IGNsayAqcGNsazsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IGRldmljZSAqZGV2OworfTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX01JTk1BWChyazMwMzZfY29kZWNfaHBfdGx2LCAtMzksIDApOworCitzdGF0aWMgaW50IHJrMzAzNl9jb2RlY19hbnRpcG9wX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworCXVpbmZvLT5jb3VudCA9IDI7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmszMDM2X2NvZGVjX2FudGlwb3BfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgdmFsLCByZXQsIHJlZ3ZhbDsKKworCXJldCA9IHNuZF9zb2NfY29tcG9uZW50X3JlYWQoY29tcG9uZW50LCBJTk5PX1IwOSwgJnJlZ3ZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl2YWwgPSAoKHJlZ3ZhbCA+PiBJTk5PX1IwOV9IUExfQU5JVFBPUF9TSElGVCkgJgorCSAgICAgICBJTk5PX1IwOV9IUF9BTlRJUE9QX01TSykgPT0gSU5OT19SMDlfSFBfQU5USVBPUF9PTjsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHZhbDsKKworCXZhbCA9ICgocmVndmFsID4+IElOTk9fUjA5X0hQUl9BTklUUE9QX1NISUZUKSAmCisJICAgICAgIElOTk9fUjA5X0hQX0FOVElQT1BfTVNLKSA9PSBJTk5PX1IwOV9IUF9BTlRJUE9QX09OOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gdmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmszMDM2X2NvZGVjX2FudGlwb3BfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgdmFsLCByZXQsIHJlZ21zazsKKworCXZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA/CisJICAgICAgIElOTk9fUjA5X0hQX0FOVElQT1BfT04gOiBJTk5PX1IwOV9IUF9BTlRJUE9QX09GRikgPDwKKwkgICAgICBJTk5PX1IwOV9IUExfQU5JVFBPUF9TSElGVDsKKwl2YWwgfD0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID8KKwkJSU5OT19SMDlfSFBfQU5USVBPUF9PTiA6IElOTk9fUjA5X0hQX0FOVElQT1BfT0ZGKSA8PAorCSAgICAgICBJTk5PX1IwOV9IUFJfQU5JVFBPUF9TSElGVDsKKworCXJlZ21zayA9IElOTk9fUjA5X0hQX0FOVElQT1BfTVNLIDw8IElOTk9fUjA5X0hQTF9BTklUUE9QX1NISUZUIHwKKwkJIElOTk9fUjA5X0hQX0FOVElQT1BfTVNLIDw8IElOTk9fUjA5X0hQUl9BTklUUE9QX1NISUZUOworCisJcmV0ID0gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoY29tcG9uZW50LCBJTk5PX1IwOSwKKwkJCQkJICAgIHJlZ21zaywgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFNPQ19SSzMwMzZfQ09ERUNfQU5USVBPUF9ERUNMKHhuYW1lKSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSByazMwMzZfY29kZWNfYW50aXBvcF9pbmZvLCAuZ2V0ID0gcmszMDM2X2NvZGVjX2FudGlwb3BfZ2V0LCBcCisJLnB1dCA9IHJrMzAzNl9jb2RlY19hbnRpcG9wX3B1dCwgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcmszMDM2X2NvZGVjX2RhcG1fY29udHJvbHNbXSA9IHsKKwlTT0NfRE9VQkxFX1JfUkFOR0VfVExWKCJIZWFkcGhvbmUgVm9sdW1lIiwgSU5OT19SMDcsIElOTk9fUjA4LAorCQlJTk5PX0hQX0dBSU5fU0hJRlQsIElOTk9fSFBfR0FJTl9OMzlEQiwKKwkJSU5OT19IUF9HQUlOXzBEQiwgMCwgcmszMDM2X2NvZGVjX2hwX3RsdiksCisJU09DX0RPVUJMRSgiWmVybyBDcm9zcyBTd2l0Y2giLCBJTk5PX1IwNiwgSU5OT19SMDZfVk9VVExfQ1pfU0hJRlQsCisJCUlOTk9fUjA2X1ZPVVRSX0NaX1NISUZULCAxLCAwKSwKKwlTT0NfRE9VQkxFKCJIZWFkcGhvbmUgU3dpdGNoIiwgSU5OT19SMDksIElOTk9fUjA5X0hQTF9NVVRFX1NISUZULAorCQlJTk5PX1IwOV9IUFJfTVVURV9TSElGVCwgMSwgMCksCisJU09DX1JLMzAzNl9DT0RFQ19BTlRJUE9QX0RFQ0woIkFudGktcG9wIFN3aXRjaCIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJrMzAzNl9jb2RlY19ocGxfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBMZWZ0IE91dCBTd2l0Y2giLCBJTk5PX1IwOSwKKwkJCUlOTk9fUjA5X0RBQ0xfU1dJVENIX1NISUZULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyByazMwMzZfY29kZWNfaHByX21peGVyX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJEQUMgUmlnaHQgT3V0IFN3aXRjaCIsIElOTk9fUjA5LAorCQkJSU5OT19SMDlfREFDUl9TV0lUQ0hfU0hJRlQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJrMzAzNl9jb2RlY19ocGxfc3dpdGNoX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJIUCBMZWZ0IE91dCBTd2l0Y2giLCBJTk5PX1IwNSwKKwkJCUlOTk9fUjA1X0hQTF9XT1JLX1NISUZULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyByazMwMzZfY29kZWNfaHByX3N3aXRjaF9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiSFAgUmlnaHQgT3V0IFN3aXRjaCIsIElOTk9fUjA1LAorCQkJSU5OT19SMDVfSFBSX1dPUktfU0hJRlQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHJrMzAzNl9jb2RlY19kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkRBQyBQV1IiLCAxLCBJTk5PX1IwNiwKKwkJCSAgICAgIElOTk9fUjA2X0RBQ19FTl9TSElGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUNMIFZSRUYiLCAyLCBJTk5PX1IwNCwKKwkJCSAgICAgIElOTk9fUjA0X0RBQ0xfVlJFRl9TSElGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUNSIFZSRUYiLCAyLCBJTk5PX1IwNCwKKwkJCSAgICAgIElOTk9fUjA0X0RBQ1JfVlJFRl9TSElGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUNMIEhpTG8gVlJFRiIsIDMsIElOTk9fUjA2LAorCQkJICAgICAgSU5OT19SMDZfREFDTF9ISUxPX1ZSRUZfU0hJRlQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiREFDUiBIaUxvIFZSRUYiLCAzLCBJTk5PX1IwNiwKKwkJCSAgICAgIElOTk9fUjA2X0RBQ1JfSElMT19WUkVGX1NISUZULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkRBQ1IgQ0xLIiwgMywgSU5OT19SMDQsCisJCQkgICAgICBJTk5PX1IwNF9EQUNSX0NMS19TSElGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUNMIENMSyIsIDMsIElOTk9fUjA0LAorCQkJICAgICAgSU5OT19SMDRfREFDTF9DTEtfU0hJRlQsIDAsIE5VTEwsIDApLAorCisJU05EX1NPQ19EQVBNX0RBQygiREFDTCIsICJMZWZ0IFBsYXliYWNrIiwgSU5OT19SMDQsCisJCQkgSU5OT19SMDRfREFDTF9TV19TSElGVCwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiREFDUiIsICJSaWdodCBQbGF5YmFjayIsIElOTk9fUjA0LAorCQkJIElOTk9fUjA0X0RBQ1JfU1dfU0hJRlQsIDApLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJMZWZ0IEhlYWRwaG9uZSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJcmszMDM2X2NvZGVjX2hwbF9taXhlcl9jb250cm9scywKKwkJQVJSQVlfU0laRShyazMwMzZfY29kZWNfaHBsX21peGVyX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJSaWdodCBIZWFkcGhvbmUgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJrMzAzNl9jb2RlY19ocHJfbWl4ZXJfY29udHJvbHMsCisJCUFSUkFZX1NJWkUocmszMDM2X2NvZGVjX2hwcl9taXhlcl9jb250cm9scykpLAorCisJU05EX1NPQ19EQVBNX1BHQSgiSFAgTGVmdCBPdXQiLCBJTk5PX1IwNSwKKwkJCSBJTk5PX1IwNV9IUExfRU5fU0hJRlQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkhQIFJpZ2h0IE91dCIsIElOTk9fUjA1LAorCQkJIElOTk9fUjA1X0hQUl9FTl9TSElGVCwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkhQIExlZnQgU3dpdGNoIiwgIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgIHJrMzAzNl9jb2RlY19ocGxfc3dpdGNoX2NvbnRyb2xzLAorCQkJICAgQVJSQVlfU0laRShyazMwMzZfY29kZWNfaHBsX3N3aXRjaF9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9NSVhFUigiSFAgUmlnaHQgU3dpdGNoIiwgIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgIHJrMzAzNl9jb2RlY19ocHJfc3dpdGNoX2NvbnRyb2xzLAorCQkJICAgQVJSQVlfU0laRShyazMwMzZfY29kZWNfaHByX3N3aXRjaF9jb250cm9scykpLAorCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBMIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBSIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSByazMwMzZfY29kZWNfZGFwbV9yb3V0ZXNbXSA9IHsKKwl7IkRBQ0wgVlJFRiIsIE5VTEwsICJEQUMgUFdSIn0sCisJeyJEQUNSIFZSRUYiLCBOVUxMLCAiREFDIFBXUiJ9LAorCXsiREFDTCBIaUxvIFZSRUYiLCBOVUxMLCAiREFDIFBXUiJ9LAorCXsiREFDUiBIaUxvIFZSRUYiLCBOVUxMLCAiREFDIFBXUiJ9LAorCXsiREFDTCBDTEsiLCBOVUxMLCAiREFDIFBXUiJ9LAorCXsiREFDUiBDTEsiLCBOVUxMLCAiREFDIFBXUiJ9LAorCisJeyJEQUNMIiwgTlVMTCwgIkRBQ0wgVlJFRiJ9LAorCXsiREFDTCIsIE5VTEwsICJEQUNMIEhpTG8gVlJFRiJ9LAorCXsiREFDTCIsIE5VTEwsICJEQUNMIENMSyJ9LAorCXsiREFDUiIsIE5VTEwsICJEQUNSIFZSRUYifSwKKwl7IkRBQ1IiLCBOVUxMLCAiREFDUiBIaUxvIFZSRUYifSwKKwl7IkRBQ1IiLCBOVUxMLCAiREFDUiBDTEsifSwKKworCXsiTGVmdCBIZWFkcGhvbmUgTWl4ZXIiLCAiREFDIExlZnQgT3V0IFN3aXRjaCIsICJEQUNMIn0sCisJeyJSaWdodCBIZWFkcGhvbmUgTWl4ZXIiLCAiREFDIFJpZ2h0IE91dCBTd2l0Y2giLCAiREFDUiJ9LAorCXsiSFAgTGVmdCBPdXQiLCBOVUxMLCAiTGVmdCBIZWFkcGhvbmUgTWl4ZXIifSwKKwl7IkhQIFJpZ2h0IE91dCIsIE5VTEwsICJSaWdodCBIZWFkcGhvbmUgTWl4ZXIifSwKKworCXsiSFAgTGVmdCBTd2l0Y2giLCAiSFAgTGVmdCBPdXQgU3dpdGNoIiwgIkhQIExlZnQgT3V0In0sCisJeyJIUCBSaWdodCBTd2l0Y2giLCAiSFAgUmlnaHQgT3V0IFN3aXRjaCIsICJIUCBSaWdodCBPdXQifSwKKworCXsiSFBMIiwgTlVMTCwgIkhQIExlZnQgU3dpdGNoIn0sCisJeyJIUFIiLCBOVUxMLCAiSFAgUmlnaHQgU3dpdGNoIn0sCit9OworCitzdGF0aWMgaW50IHJrMzAzNl9jb2RlY19kYWlfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXVuc2lnbmVkIGludCByZWcwMV92YWwgPSAwLCAgcmVnMDJfdmFsID0gMCwgcmVnMDNfdmFsID0gMDsKKworCWRldl9kYmcoY29kZWMtPmRldiwgInJrMzAzNl9jb2RlYyBkYWkgc2V0IGZtdCA6ICUwOHhcbiIsIGZtdCk7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlyZWcwMV92YWwgfD0gSU5OT19SMDFfUElORElSX0lOX1NMQVZFIHwKKwkJCSAgICAgSU5OT19SMDFfSTJTTU9ERV9TTEFWRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlyZWcwMV92YWwgfD0gSU5OT19SMDFfUElORElSX09VVF9NQVNURVIgfAorCQkJICAgICBJTk5PX1IwMV9JMlNNT0RFX01BU1RFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaW52YWxpZCBmbXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJcmVnMDJfdmFsIHw9IElOTk9fUjAyX0RBQ01fUENNOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJcmVnMDJfdmFsIHw9IElOTk9fUjAyX0RBQ01fSTJTOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCXJlZzAyX3ZhbCB8PSBJTk5PX1IwMl9EQUNNX1JKTTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCXJlZzAyX3ZhbCB8PSBJTk5PX1IwMl9EQUNNX0xKTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAic2V0IGRhaSBmb3JtYXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCXJlZzAyX3ZhbCB8PSBJTk5PX1IwMl9MUkNQX05PUk1BTDsKKwkJcmVnMDNfdmFsIHw9IElOTk9fUjAzX0JDUF9OT1JNQUw7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCXJlZzAyX3ZhbCB8PSBJTk5PX1IwMl9MUkNQX1JFVkVSU0FMOworCQlyZWcwM192YWwgfD0gSU5OT19SMDNfQkNQX1JFVkVSU0FMOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQlyZWcwMl92YWwgfD0gSU5OT19SMDJfTFJDUF9SRVZFUlNBTDsKKwkJcmVnMDNfdmFsIHw9IElOTk9fUjAzX0JDUF9OT1JNQUw7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCXJlZzAyX3ZhbCB8PSBJTk5PX1IwMl9MUkNQX05PUk1BTDsKKwkJcmVnMDNfdmFsIHw9IElOTk9fUjAzX0JDUF9SRVZFUlNBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAic2V0IGRhaSBmb3JtYXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgSU5OT19SMDEsIElOTk9fUjAxX0kyU01PREVfTVNLIHwKKwkJCSAgICBJTk5PX1IwMV9QSU5ESVJfTVNLLCByZWcwMV92YWwpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIElOTk9fUjAyLCBJTk5PX1IwMl9MUkNQX01TSyB8CisJCQkgICAgSU5OT19SMDJfREFDTV9NU0ssIHJlZzAyX3ZhbCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgSU5OT19SMDMsIElOTk9fUjAzX0JDUF9NU0ssIHJlZzAzX3ZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByazMwMzZfY29kZWNfZGFpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcywKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXVuc2lnbmVkIGludCByZWcwMl92YWwgPSAwLCByZWcwM192YWwgPSAwOworCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlyZWcwMl92YWwgfD0gSU5OT19SMDJfVldMXzE2QklUOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJcmVnMDJfdmFsIHw9IElOTk9fUjAyX1ZXTF8yMEJJVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJcmVnMDJfdmFsIHw9IElOTk9fUjAyX1ZXTF8yNEJJVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJcmVnMDJfdmFsIHw9IElOTk9fUjAyX1ZXTF8zMkJJVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVnMDJfdmFsIHw9IElOTk9fUjAyX0xSQ1BfTk9STUFMOworCXJlZzAzX3ZhbCB8PSBJTk5PX1IwM19GV0xfMzJCSVQgfCBJTk5PX1IwM19EQUNSX1dPUks7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBJTk5PX1IwMiwgSU5OT19SMDJfTFJDUF9NU0sgfAorCQkJICAgIElOTk9fUjAyX1ZXTF9NU0ssIHJlZzAyX3ZhbCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgSU5OT19SMDMsIElOTk9fUjAzX0RBQ1JfTVNLIHwKKwkJCSAgICBJTk5PX1IwM19GV0xfTVNLLCByZWcwM192YWwpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFJLMzAzNl9DT0RFQ19SQVRFUyAoU05EUlZfUENNX1JBVEVfODAwMCAgfCBcCisJCQkgICAgU05EUlZfUENNX1JBVEVfMTYwMDAgfCBcCisJCQkgICAgU05EUlZfUENNX1JBVEVfMzIwMDAgfCBcCisJCQkgICAgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCisJCQkgICAgU05EUlZfUENNX1JBVEVfNDgwMDAgfCBcCisJCQkgICAgU05EUlZfUENNX1JBVEVfOTYwMDApCisKKyNkZWZpbmUgUkszMDM2X0NPREVDX0ZNVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFICB8IFwKKwkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKKwkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFICB8IFwKKwkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyByazMwMzZfY29kZWNfZGFpX29wcyA9IHsKKwkuc2V0X2ZtdAk9IHJrMzAzNl9jb2RlY19kYWlfc2V0X2ZtdCwKKwkuaHdfcGFyYW1zCT0gcmszMDM2X2NvZGVjX2RhaV9od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciByazMwMzZfY29kZWNfZGFpX2RyaXZlcltdID0geworCXsKKwkJLm5hbWUgPSAicmszMDM2LWNvZGVjLWRhaSIsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gUkszMDM2X0NPREVDX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBSSzMwMzZfQ09ERUNfRk1UUywKKwkJfSwKKwkJLm9wcyA9ICZyazMwMzZfY29kZWNfZGFpX29wcywKKwkJLnN5bW1ldHJpY19yYXRlcyA9IDEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHJrMzAzNl9jb2RlY19yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY193cml0ZShjb2RlYywgSU5OT19SMDAsCisJCSAgICAgIElOTk9fUjAwX0NTUl9SRVNFVCB8IElOTk9fUjAwX0NEQ1JfUkVTRVQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIElOTk9fUjAwLAorCQkgICAgICBJTk5PX1IwMF9DU1JfV09SSyB8IElOTk9fUjAwX0NEQ1JfV09SSyk7Cit9CisKK3N0YXRpYyBpbnQgcmszMDM2X2NvZGVjX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyazMwMzZfY29kZWNfcmVzZXQoY29kZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJrMzAzNl9jb2RlY19yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJrMzAzNl9jb2RlY19yZXNldChjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmszMDM2X2NvZGVjX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCS8qIHNldCBhIGJpZyBjdXJyZW50IGZvciBjYXBhY2l0b3IgY2hhcmdpbmcuICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIElOTk9fUjEwLCBJTk5PX1IxMF9NQVhfQ1VSKTsKKwkJLyogc3RhcnQgcHJlY2hhcmdlICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIElOTk9fUjA2LCBJTk5PX1IwNl9EQUNfUFJFQ0hBUkdFKTsKKworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogc2V0IGEgYmlnIGN1cnJlbnQgZm9yIGNhcGFjaXRvciBkaXNjaGFyZ2luZy4gKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgSU5OT19SMTAsIElOTk9fUjEwX01BWF9DVVIpOworCQkvKiBzdGFydCBkaXNjaGFyZ2UuICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIElOTk9fUjA2LCBJTk5PX1IwNl9EQUNfRElTQ0hBUkdFKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciByazMwMzZfY29kZWNfZHJpdmVyID0geworCS5wcm9iZQkJCT0gcmszMDM2X2NvZGVjX3Byb2JlLAorCS5yZW1vdmUJCQk9IHJrMzAzNl9jb2RlY19yZW1vdmUsCisJLnNldF9iaWFzX2xldmVsCQk9IHJrMzAzNl9jb2RlY19zZXRfYmlhc19sZXZlbCwKKwkuY29udHJvbHMJCT0gcmszMDM2X2NvZGVjX2RhcG1fY29udHJvbHMsCisJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKHJrMzAzNl9jb2RlY19kYXBtX2NvbnRyb2xzKSwKKwkuZGFwbV9yb3V0ZXMJCT0gcmszMDM2X2NvZGVjX2RhcG1fcm91dGVzLAorCS5udW1fZGFwbV9yb3V0ZXMJPSBBUlJBWV9TSVpFKHJrMzAzNl9jb2RlY19kYXBtX3JvdXRlcyksCisJLmRhcG1fd2lkZ2V0cwkJPSByazMwMzZfY29kZWNfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzCT0gQVJSQVlfU0laRShyazMwMzZfY29kZWNfZGFwbV93aWRnZXRzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByazMwMzZfY29kZWNfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAzMiwKKwkucmVnX3N0cmlkZSA9IDQsCisJLnZhbF9iaXRzID0gMzIsCit9OworCisjZGVmaW5lIEdSRl9TT0NfQ09OMAkJMHgwMDE0MAorI2RlZmluZSBHUkZfQUNPREVDX1NFTAkJKEJJVCgxMCkgfCBCSVQoMTYgKyAxMCkpCisKK3N0YXRpYyBpbnQgcmszMDM2X2NvZGVjX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJrMzAzNl9jb2RlY19wcml2ICpwcml2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgcmVnbWFwICpncmY7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGJhc2UpOworCisJcHJpdi0+YmFzZSA9IGJhc2U7CisJcHJpdi0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKCZwZGV2LT5kZXYsIHByaXYtPmJhc2UsCisJCQkJCSAgICAgJnJrMzAzNl9jb2RlY19yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKHByaXYtPnJlZ21hcCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW5pdCByZWdtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+cmVnbWFwKTsKKwl9CisKKwlncmYgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG9mX25vZGUsICJyb2NrY2hpcCxncmYiKTsKKwlpZiAoSVNfRVJSKGdyZikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibmVlZHMgJ3JvY2tjaGlwLGdyZicgcHJvcGVydHlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihncmYpOworCX0KKwlyZXQgPSByZWdtYXBfd3JpdGUoZ3JmLCBHUkZfU09DX0NPTjAsIEdSRl9BQ09ERUNfU0VMKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCB3cml0ZSB0byBHUkY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXByaXYtPnBjbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImFjb2RlY19wY2xrIik7CisJaWYgKElTX0VSUihwcml2LT5wY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+cGNsayk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+cGNsayk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbGtcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXByaXYtPmRldiA9ICZwZGV2LT5kZXY7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIHByaXYpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmcGRldi0+ZGV2LCAmcmszMDM2X2NvZGVjX2RyaXZlciwKKwkJCQkgICAgIHJrMzAzNl9jb2RlY19kYWlfZHJpdmVyLAorCQkJCSAgICAgQVJSQVlfU0laRShyazMwMzZfY29kZWNfZGFpX2RyaXZlcikpOworCWlmIChyZXQpIHsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPnBjbGspOworCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByazMwMzZfY29kZWNfcGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJrMzAzNl9jb2RlY19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZwZGV2LT5kZXYpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5wY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCByazMwMzZfY29kZWNfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzAzNi1jb2RlYyIsIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCByazMwMzZfY29kZWNfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByazMwMzZfY29kZWNfcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInJrMzAzNi1jb2RlYy1wbGF0Zm9ybSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihyazMwMzZfY29kZWNfb2ZfbWF0Y2gpLAorCX0sCisJLnByb2JlID0gcmszMDM2X2NvZGVjX3BsYXRmb3JtX3Byb2JlLAorCS5yZW1vdmUgPSByazMwMzZfY29kZWNfcGxhdGZvcm1fcmVtb3ZlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyazMwMzZfY29kZWNfcGxhdGZvcm1fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiUm9ja2NoaXAgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSb2NrY2hpcCByazMwMzYgY29kZWMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2lubm9fcmszMDM2LmggYi9zb3VuZC9zb2MvY29kZWNzL2lubm9fcmszMDM2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3NTljNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvaW5ub19yazMwMzYuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIERyaXZlciBvZiBJbm5vIENvZGVjIGZvciByazMwMzYgYnkgUm9ja2NoaXAgSW5jLgorICoKKyAqIEF1dGhvcjogWmhlbmcgU2h1blFpYW48emhlbmdzcUByb2NrLWNoaXBzLmNvbT4KKyAqLworCisjaWZuZGVmIF9JTk5PX1JLMzAzNl9DT0RFQ19ICisjZGVmaW5lIF9JTk5PX1JLMzAzNl9DT0RFQ19ICisKKy8qIGNvZGVjIHJlZ2lzdGVycyAqLworI2RlZmluZSBJTk5PX1IwMAkweDAwCisjZGVmaW5lIElOTk9fUjAxCTB4MGMKKyNkZWZpbmUgSU5OT19SMDIJMHgxMAorI2RlZmluZSBJTk5PX1IwMwkweDE0CisjZGVmaW5lIElOTk9fUjA0CTB4ODgKKyNkZWZpbmUgSU5OT19SMDUJMHg4YworI2RlZmluZSBJTk5PX1IwNgkweDkwCisjZGVmaW5lIElOTk9fUjA3CTB4OTQKKyNkZWZpbmUgSU5OT19SMDgJMHg5OAorI2RlZmluZSBJTk5PX1IwOQkweDljCisjZGVmaW5lIElOTk9fUjEwCTB4YTAKKworLyogcmVnaXN0ZXIgYml0IGZpbGVkICovCisjZGVmaW5lIElOTk9fUjAwX0NTUl9SRVNFVAkJKDB4MCA8PCAwKSAvKmNvZGVjIHN5c3RlbSByZXNldCovCisjZGVmaW5lIElOTk9fUjAwX0NTUl9XT1JLCQkoMHgxIDw8IDApCisjZGVmaW5lIElOTk9fUjAwX0NEQ1JfUkVTRVQJCSgweDAgPDwgMSkgLypjb2RlYyBkaWdpdGFsIGNvcmUgcmVzZXQqLworI2RlZmluZSBJTk5PX1IwMF9DRENSX1dPUksJCSgweDEgPDwgMSkKKyNkZWZpbmUgSU5OT19SMDBfUFJCX0RJU0FCTEUJCSgweDAgPDwgNikgLypwb3dlciByZXNldCBieXBhc3MqLworI2RlZmluZSBJTk5PX1IwMF9QUkJfRU5BQkxFCQkoMHgxIDw8IDYpCisKKyNkZWZpbmUgSU5OT19SMDFfSTJTTU9ERV9NU0sJCSgweDEgPDwgNCkKKyNkZWZpbmUgSU5OT19SMDFfSTJTTU9ERV9TTEFWRQkJKDB4MCA8PCA0KQorI2RlZmluZSBJTk5PX1IwMV9JMlNNT0RFX01BU1RFUgkJKDB4MSA8PCA0KQorI2RlZmluZSBJTk5PX1IwMV9QSU5ESVJfTVNLCQkoMHgxIDw8IDUpCisjZGVmaW5lIElOTk9fUjAxX1BJTkRJUl9JTl9TTEFWRQkoMHgwIDw8IDUpIC8qZGlyZWN0aW9uIG9mIHBpbiovCisjZGVmaW5lIElOTk9fUjAxX1BJTkRJUl9PVVRfTUFTVEVSCSgweDEgPDwgNSkKKworI2RlZmluZSBJTk5PX1IwMl9MUlNfTVNLCQkoMHgxIDw8IDIpCisjZGVmaW5lIElOTk9fUjAyX0xSU19OT1JNQUwJCSgweDAgPDwgMikgLypEQUMgTGVmdCBSaWdodCBTd2FwKi8KKyNkZWZpbmUgSU5OT19SMDJfTFJTX1NXQVAJCSgweDEgPDwgMikKKyNkZWZpbmUgSU5OT19SMDJfREFDTV9NU0sJCSgweDMgPDwgMykKKyNkZWZpbmUgSU5OT19SMDJfREFDTV9QQ00JCSgweDMgPDwgMykgLypEQUMgTW9kZSovCisjZGVmaW5lIElOTk9fUjAyX0RBQ01fSTJTCQkoMHgyIDw8IDMpCisjZGVmaW5lIElOTk9fUjAyX0RBQ01fTEpNCQkoMHgxIDw8IDMpCisjZGVmaW5lIElOTk9fUjAyX0RBQ01fUkpNCQkoMHgwIDw8IDMpCisjZGVmaW5lIElOTk9fUjAyX1ZXTF9NU0sJCSgweDMgPDwgNSkKKyNkZWZpbmUgSU5OT19SMDJfVldMXzMyQklUCQkoMHgzIDw8IDUpIC8qMS8yRnJhbWUgVmFsaWQgV29yZCBMZW4qLworI2RlZmluZSBJTk5PX1IwMl9WV0xfMjRCSVQJCSgweDIgPDwgNSkKKyNkZWZpbmUgSU5OT19SMDJfVldMXzIwQklUCQkoMHgxIDw8IDUpCisjZGVmaW5lIElOTk9fUjAyX1ZXTF8xNkJJVAkJKDB4MCA8PCA1KQorI2RlZmluZSBJTk5PX1IwMl9MUkNQX01TSwkJKDB4MSA8PCA3KQorI2RlZmluZSBJTk5PX1IwMl9MUkNQX05PUk1BTAkJKDB4MCA8PCA3KSAvKkxlZnQgUmlnaHQgUG9sYXJpdHkqLworI2RlZmluZSBJTk5PX1IwMl9MUkNQX1JFVkVSU0FMCQkoMHgxIDw8IDcpCisKKyNkZWZpbmUgSU5OT19SMDNfQkNQX01TSwkJKDB4MSA8PCAwKQorI2RlZmluZSBJTk5PX1IwM19CQ1BfTk9STUFMCQkoMHgwIDw8IDApIC8qREFDIGJpdCBjbG9jayBwb2xhcml0eSovCisjZGVmaW5lIElOTk9fUjAzX0JDUF9SRVZFUlNBTAkJKDB4MSA8PCAwKQorI2RlZmluZSBJTk5PX1IwM19EQUNSX01TSwkJKDB4MSA8PCAxKQorI2RlZmluZSBJTk5PX1IwM19EQUNSX1JFU0VUCQkoMHgwIDw8IDEpIC8qREFDIFJlc2V0Ki8KKyNkZWZpbmUgSU5OT19SMDNfREFDUl9XT1JLCQkoMHgxIDw8IDEpCisjZGVmaW5lIElOTk9fUjAzX0ZXTF9NU0sJCSgweDMgPDwgMikKKyNkZWZpbmUgSU5OT19SMDNfRldMXzMyQklUCQkoMHgzIDw8IDIpIC8qMS8yRnJhbWUgV29yZCBMZW5ndGgqLworI2RlZmluZSBJTk5PX1IwM19GV0xfMjRCSVQJCSgweDIgPDwgMikKKyNkZWZpbmUgSU5OT19SMDNfRldMXzIwQklUCQkoMHgxIDw8IDIpCisjZGVmaW5lIElOTk9fUjAzX0ZXTF8xNkJJVAkJKDB4MCA8PCAyKQorCisjZGVmaW5lIElOTk9fUjA0X0RBQ1JfU1dfU0hJRlQJCTAKKyNkZWZpbmUgSU5OT19SMDRfREFDTF9TV19TSElGVAkJMQorI2RlZmluZSBJTk5PX1IwNF9EQUNSX0NMS19TSElGVAkJMgorI2RlZmluZSBJTk5PX1IwNF9EQUNMX0NMS19TSElGVAkJMworI2RlZmluZSBJTk5PX1IwNF9EQUNSX1ZSRUZfU0hJRlQJNAorI2RlZmluZSBJTk5PX1IwNF9EQUNMX1ZSRUZfU0hJRlQJNQorCisjZGVmaW5lIElOTk9fUjA1X0hQUl9FTl9TSElGVAkJMAorI2RlZmluZSBJTk5PX1IwNV9IUExfRU5fU0hJRlQJCTEKKyNkZWZpbmUgSU5OT19SMDVfSFBSX1dPUktfU0hJRlQJCTIKKyNkZWZpbmUgSU5OT19SMDVfSFBMX1dPUktfU0hJRlQJCTMKKworI2RlZmluZSBJTk5PX1IwNl9WT1VUUl9DWl9TSElGVAkJMAorI2RlZmluZSBJTk5PX1IwNl9WT1VUTF9DWl9TSElGVAkJMQorI2RlZmluZSBJTk5PX1IwNl9EQUNSX0hJTE9fVlJFRl9TSElGVAkyCisjZGVmaW5lIElOTk9fUjA2X0RBQ0xfSElMT19WUkVGX1NISUZUCTMKKyNkZWZpbmUgSU5OT19SMDZfREFDX0VOX1NISUZUCQk1CisKKyNkZWZpbmUgSU5OT19SMDZfREFDX1BSRUNIQVJHRQkJKDB4MCA8PCA0KSAvKlByZUNoYXJnZSBjb250cm9sIGZvciBEQUMqLworI2RlZmluZSBJTk5PX1IwNl9EQUNfRElTQ0hBUkdFCQkoMHgxIDw8IDQpCisKKyNkZWZpbmUgSU5OT19IUF9HQUlOX1NISUZUCQkwCisvKiBHYWluIG9mIG91dHB1dCwgMS41ZGIgc3RlcDogLTM5ZGIoMHgwKSB+IDBkYigweDFhKSB+IDZkYigweDFmKSAqLworI2RlZmluZSBJTk5PX0hQX0dBSU5fMERCCQkweDFhCisjZGVmaW5lIElOTk9fSFBfR0FJTl9OMzlEQgkJMHgwCisKKyNkZWZpbmUgSU5OT19SMDlfSFBfQU5USVBPUF9NU0sJCTB4MworI2RlZmluZSBJTk5PX1IwOV9IUF9BTlRJUE9QX09GRgkJMHgxCisjZGVmaW5lIElOTk9fUjA5X0hQX0FOVElQT1BfT04JCTB4MgorI2RlZmluZSBJTk5PX1IwOV9IUFJfQU5JVFBPUF9TSElGVAkwCisjZGVmaW5lIElOTk9fUjA5X0hQTF9BTklUUE9QX1NISUZUCTIKKyNkZWZpbmUgSU5OT19SMDlfSFBSX01VVEVfU0hJRlQJCTQKKyNkZWZpbmUgSU5OT19SMDlfSFBMX01VVEVfU0hJRlQJCTUKKyNkZWZpbmUgSU5OT19SMDlfREFDUl9TV0lUQ0hfU0hJRlQJNgorI2RlZmluZSBJTk5PX1IwOV9EQUNMX1NXSVRDSF9TSElGVAk3CisKKyNkZWZpbmUgSU5OT19SMTBfQ0hBUkdFX1NFTF9DVVJfNDAwSV9ZRVMJKDB4MCA8PCAwKQorI2RlZmluZSBJTk5PX1IxMF9DSEFSR0VfU0VMX0NVUl80MDBJX05PCQkoMHgxIDw8IDApCisjZGVmaW5lIElOTk9fUjEwX0NIQVJHRV9TRUxfQ1VSXzI2MElfWUVTCSgweDAgPDwgMSkKKyNkZWZpbmUgSU5OT19SMTBfQ0hBUkdFX1NFTF9DVVJfMjYwSV9OTwkJKDB4MSA8PCAxKQorI2RlZmluZSBJTk5PX1IxMF9DSEFSR0VfU0VMX0NVUl8xMzBJX1lFUwkoMHgwIDw8IDIpCisjZGVmaW5lIElOTk9fUjEwX0NIQVJHRV9TRUxfQ1VSXzEzMElfTk8JCSgweDEgPDwgMikKKyNkZWZpbmUgSU5OT19SMTBfQ0hBUkdFX1NFTF9DVVJfMTAwSV9ZRVMJKDB4MCA8PCAzKQorI2RlZmluZSBJTk5PX1IxMF9DSEFSR0VfU0VMX0NVUl8xMDBJX05PCQkoMHgxIDw8IDMpCisjZGVmaW5lIElOTk9fUjEwX0NIQVJHRV9TRUxfQ1VSXzA1MElfWUVTCSgweDAgPDwgNCkKKyNkZWZpbmUgSU5OT19SMTBfQ0hBUkdFX1NFTF9DVVJfMDUwSV9OTwkJKDB4MSA8PCA0KQorI2RlZmluZSBJTk5PX1IxMF9DSEFSR0VfU0VMX0NVUl8wMjdJX1lFUwkoMHgwIDw8IDUpCisjZGVmaW5lIElOTk9fUjEwX0NIQVJHRV9TRUxfQ1VSXzAyN0lfTk8JCSgweDEgPDwgNSkKKworI2RlZmluZSBJTk5PX1IxMF9NQVhfQ1VSIChJTk5PX1IxMF9DSEFSR0VfU0VMX0NVUl80MDBJX1lFUyB8IFwKKwkJCSAgSU5OT19SMTBfQ0hBUkdFX1NFTF9DVVJfMjYwSV9ZRVMgfCBcCisJCQkgIElOTk9fUjEwX0NIQVJHRV9TRUxfQ1VSXzEzMElfWUVTIHwgXAorCQkJICBJTk5PX1IxMF9DSEFSR0VfU0VMX0NVUl8xMDBJX1lFUyB8IFwKKwkJCSAgSU5OT19SMTBfQ0hBUkdFX1NFTF9DVVJfMDUwSV9ZRVMgfCBcCisJCQkgIElOTk9fUjEwX0NIQVJHRV9TRUxfQ1VSXzAyN0lfWUVTKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgzNTdhLmMgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4MzU3YS5jCmluZGV4IGY1ZTNkY2UuLjViMWRmYjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgzNTdhLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9tYXg5ODM1N2EuYwpAQCAtMTIsNiArMTIsNyBAQAogICogbWF4OTgzNTdhLmMgLS0gTUFYOTgzNTdBIEFMU0EgU29DIENvZGVjIGRyaXZlcgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpAQCAtMTIzLDEwICsxMjQsMTkgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1heDk4MzU3YV9kZXZpY2VfaWQpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQUNQSQorc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBtYXg5ODM1N2FfYWNwaV9tYXRjaFtdID0geworCXsgIk1YOTgzNTdBIiwgMCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgbWF4OTgzNTdhX2FjcGlfbWF0Y2gpOworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1heDk4MzU3YV9wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAibWF4OTgzNTdhIiwKIAkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG1heDk4MzU3YV9kZXZpY2VfaWQpLAorCQkuYWNwaV9tYXRjaF90YWJsZSA9IEFDUElfUFRSKG1heDk4MzU3YV9hY3BpX21hdGNoKSwKIAl9LAogCS5wcm9iZQk9IG1heDk4MzU3YV9wbGF0Zm9ybV9wcm9iZSwKIAkucmVtb3ZlID0gbWF4OTgzNTdhX3BsYXRmb3JtX3JlbW92ZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvbmF1ODgyNS5jIGIvc291bmQvc29jL2NvZGVjcy9uYXU4ODI1LmMKaW5kZXggN2ZjN2I0ZS4uYzFiODdjNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9uYXU4ODI1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9uYXU4ODI1LmMKQEAgLTEyNzEsNiArMTI3MSwzNiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG5hdTg4MjVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbmF1ODgyNSAqbmF1ODgyNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZGlzYWJsZV9pcnEoY2xpZW50LT5pcnEpOworCXJlZ2NhY2hlX2NhY2hlX29ubHkobmF1ODgyNS0+cmVnbWFwLCB0cnVlKTsKKwlyZWdjYWNoZV9tYXJrX2RpcnR5KG5hdTg4MjUtPnJlZ21hcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuYXU4ODI1X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbmF1ODgyNSAqbmF1ODgyNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmVnY2FjaGVfY2FjaGVfb25seShuYXU4ODI1LT5yZWdtYXAsIGZhbHNlKTsKKwlyZWdjYWNoZV9zeW5jKG5hdTg4MjUtPnJlZ21hcCk7CisJZW5hYmxlX2lycShjbGllbnQtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbmF1ODgyNV9wbSA9IHsKKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhuYXU4ODI1X3N1c3BlbmQsIG5hdTg4MjVfcmVzdW1lKQorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG5hdTg4MjVfaTJjX2lkc1tdID0gewogCXsgIm5hdTg4MjUiLCAwIH0sCiAJeyB9CkBAIC0xMjk3LDYgKzEzMjcsNyBAQAogCQkubmFtZSA9ICJuYXU4ODI1IiwKIAkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG5hdTg4MjVfb2ZfaWRzKSwKIAkJLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUihuYXU4ODI1X2FjcGlfbWF0Y2gpLAorCQkucG0gPSAmbmF1ODgyNV9wbSwKIAl9LAogCS5wcm9iZSA9IG5hdTg4MjVfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSBuYXU4ODI1X2kyY19yZW1vdmUsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3BjbTE3OTJhLmMgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTE3OTJhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4YmI0ODYuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL2NvZGVjcy9wY20xNzkyYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8qCi0gKiBQQ00xNzkyQSBBU29DIGNvZGVjIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoYykgQW1hcnVsYSBTb2x1dGlvbnMgQi5WLiAyMDEzCi0gKgotICogICAgIE1pY2hhZWwgVHJpbWFyY2hpIDxtaWNoYWVsQGFtYXJ1bGFzb2x1dGlvbnMuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJwY20xNzkyYS5oIgotCi0jZGVmaW5lIFBDTTE3OTJBX0RBQ19WT0xfTEVGVAkweDEwCi0jZGVmaW5lIFBDTTE3OTJBX0RBQ19WT0xfUklHSFQJMHgxMQotI2RlZmluZSBQQ00xNzkyQV9GTVRfQ09OVFJPTAkweDEyCi0jZGVmaW5lIFBDTTE3OTJBX01PREVfQ09OVFJPTAkweDEzCi0jZGVmaW5lIFBDTTE3OTJBX1NPRlRfTVVURQlQQ00xNzkyQV9GTVRfQ09OVFJPTAotCi0jZGVmaW5lIFBDTTE3OTJBX0ZNVF9NQVNLCTB4NzAKLSNkZWZpbmUgUENNMTc5MkFfRk1UX1NISUZUCTQKLSNkZWZpbmUgUENNMTc5MkFfTVVURV9NQVNLCTB4MDEKLSNkZWZpbmUgUENNMTc5MkFfTVVURV9TSElGVAkwCi0jZGVmaW5lIFBDTTE3OTJBX0FUTERfRU5BQkxFCSgxIDw8IDcpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2RlZmF1bHQgcGNtMTc5MmFfcmVnX2RlZmF1bHRzW10gPSB7Ci0JeyAweDEwLCAweGZmIH0sCi0JeyAweDExLCAweGZmIH0sCi0JeyAweDEyLCAweDUwIH0sCi0JeyAweDEzLCAweDAwIH0sCi0JeyAweDE0LCAweDAwIH0sCi0JeyAweDE1LCAweDAxIH0sCi0JeyAweDE2LCAweDAwIH0sCi0JeyAweDE3LCAweDAwIH0sCi19OwotCi1zdGF0aWMgYm9vbCBwY20xNzkyYV9hY2Nlc3NpYmxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCi17Ci0JcmV0dXJuIHJlZyA+PSAweDEwICYmIHJlZyA8PSAweDE3OwotfQotCi1zdGF0aWMgYm9vbCBwY20xNzkyYV93cml0ZWFibGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgcmVnaXN0ZXIgcmVnKQotewotCWJvb2wgYWNjZXNzaWJsZTsKLQotCWFjY2Vzc2libGUgPSBwY20xNzkyYV9hY2Nlc3NpYmxlX3JlZyhkZXYsIHJlZyk7Ci0KLQlyZXR1cm4gYWNjZXNzaWJsZSAmJiByZWcgIT0gMHgxNiAmJiByZWcgIT0gMHgxNzsKLX0KLQotc3RydWN0IHBjbTE3OTJhX3ByaXZhdGUgewotCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKLQl1bnNpZ25lZCBpbnQgZm9ybWF0OwotCXVuc2lnbmVkIGludCByYXRlOwotfTsKLQotc3RhdGljIGludCBwY20xNzkyYV9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZvcm1hdCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwotCXN0cnVjdCBwY20xNzkyYV9wcml2YXRlICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0KLQlwcml2LT5mb3JtYXQgPSBmb3JtYXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY20xNzkyYV9kaWdpdGFsX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0Jc3RydWN0IHBjbTE3OTJhX3ByaXZhdGUgKnByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgUENNMTc5MkFfU09GVF9NVVRFLAotCQkJCSBQQ00xNzkyQV9NVVRFX01BU0ssICEhbXV0ZSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY20xNzkyYV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXN0cnVjdCBwY20xNzkyYV9wcml2YXRlICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IHZhbCA9IDAsIHJldDsKLQotCXByaXYtPnJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwotCi0Jc3dpdGNoIChwcml2LT5mb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKLQkJc3dpdGNoIChwYXJhbXNfd2lkdGgocGFyYW1zKSkgewotCQljYXNlIDI0OgotCQljYXNlIDMyOgotCQkJdmFsID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIDE2OgotCQkJdmFsID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCXN3aXRjaCAocGFyYW1zX3dpZHRoKHBhcmFtcykpIHsKLQkJY2FzZSAyNDoKLQkJY2FzZSAzMjoKLQkJCXZhbCA9IDU7Ci0JCQlicmVhazsKLQkJY2FzZSAxNjoKLQkJCXZhbCA9IDQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgREFJIGZvcm1hdFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXZhbCA9IHZhbCA8PCBQQ00xNzkyQV9GTVRfU0hJRlQgfCBQQ00xNzkyQV9BVExEX0VOQUJMRTsKLQotCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFBDTTE3OTJBX0ZNVF9DT05UUk9MLAotCQkJCSBQQ00xNzkyQV9GTVRfTUFTSyB8IFBDTTE3OTJBX0FUTERfRU5BQkxFLCB2YWwpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHBjbTE3OTJhX2RhaV9vcHMgPSB7Ci0JLnNldF9mbXQJPSBwY20xNzkyYV9zZXRfZGFpX2ZtdCwKLQkuaHdfcGFyYW1zCT0gcGNtMTc5MmFfaHdfcGFyYW1zLAotCS5kaWdpdGFsX211dGUJPSBwY20xNzkyYV9kaWdpdGFsX211dGUsCi19OwotCi1zdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUocGNtMTc5MmFfZGFjX3RsdiwgLTEyMDAwLCA1MCwgMSk7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBwY20xNzkyYV9jb250cm9sc1tdID0gewotCVNPQ19ET1VCTEVfUl9SQU5HRV9UTFYoIkRBQyBQbGF5YmFjayBWb2x1bWUiLCBQQ00xNzkyQV9EQUNfVk9MX0xFRlQsCi0JCQkgUENNMTc5MkFfREFDX1ZPTF9SSUdIVCwgMCwgMHhmLCAweGZmLCAwLAotCQkJIHBjbTE3OTJhX2RhY190bHYpLAotCVNPQ19TSU5HTEUoIkRBQyBJbnZlcnQgT3V0cHV0IFN3aXRjaCIsIFBDTTE3OTJBX01PREVfQ09OVFJPTCwgNywgMSwgMCksCi0JU09DX1NJTkdMRSgiREFDIFJvbGxvZmYgRmlsdGVyIFN3aXRjaCIsIFBDTTE3OTJBX01PREVfQ09OVFJPTCwgMSwgMSwgMCksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgcGNtMTc5MmFfZGFwbV93aWRnZXRzW10gPSB7Ci1TTkRfU09DX0RBUE1fT1VUUFVUKCJJT1VUTCsiKSwKLVNORF9TT0NfREFQTV9PVVRQVVQoIklPVVRMLSIpLAotU05EX1NPQ19EQVBNX09VVFBVVCgiSU9VVFIrIiksCi1TTkRfU09DX0RBUE1fT1VUUFVUKCJJT1VUUi0iKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHBjbTE3OTJhX2RhcG1fcm91dGVzW10gPSB7Ci0JeyAiSU9VVEwrIiwgTlVMTCwgIlBsYXliYWNrIiB9LAotCXsgIklPVVRMLSIsIE5VTEwsICJQbGF5YmFjayIgfSwKLQl7ICJJT1VUUisiLCBOVUxMLCAiUGxheWJhY2siIH0sCi0JeyAiSU9VVFItIiwgTlVMTCwgIlBsYXliYWNrIiB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgcGNtMTc5MmFfZGFpID0gewotCS5uYW1lID0gInBjbTE3OTJhLWhpZmkiLAotCS5wbGF5YmFjayA9IHsKLQkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKLQkJLmNoYW5uZWxzX21pbiA9IDIsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBQQ00xNzkyQV9SQVRFUywKLQkJLmZvcm1hdHMgPSBQQ00xNzkyQV9GT1JNQVRTLCB9LAotCS5vcHMgPSAmcGNtMTc5MmFfZGFpX29wcywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBjbTE3OTJhX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJ0aSxwY20xNzkyYSIsIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcGNtMTc5MmFfb2ZfbWF0Y2gpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcGNtMTc5MmFfcmVnbWFwID0gewotCS5yZWdfYml0cwkJPSA4LAotCS52YWxfYml0cwkJPSA4LAotCS5tYXhfcmVnaXN0ZXIJCT0gMjMsCi0JLnJlZ19kZWZhdWx0cwkJPSBwY20xNzkyYV9yZWdfZGVmYXVsdHMsCi0JLm51bV9yZWdfZGVmYXVsdHMJPSBBUlJBWV9TSVpFKHBjbTE3OTJhX3JlZ19kZWZhdWx0cyksCi0JLndyaXRlYWJsZV9yZWcJCT0gcGNtMTc5MmFfd3JpdGVhYmxlX3JlZywKLQkucmVhZGFibGVfcmVnCQk9IHBjbTE3OTJhX2FjY2Vzc2libGVfcmVnLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X3BjbTE3OTJhID0gewotCS5jb250cm9scwkJPSBwY20xNzkyYV9jb250cm9scywKLQkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUocGNtMTc5MmFfY29udHJvbHMpLAotCS5kYXBtX3dpZGdldHMJCT0gcGNtMTc5MmFfZGFwbV93aWRnZXRzLAotCS5udW1fZGFwbV93aWRnZXRzCT0gQVJSQVlfU0laRShwY20xNzkyYV9kYXBtX3dpZGdldHMpLAotCS5kYXBtX3JvdXRlcwkJPSBwY20xNzkyYV9kYXBtX3JvdXRlcywKLQkubnVtX2RhcG1fcm91dGVzCT0gQVJSQVlfU0laRShwY20xNzkyYV9kYXBtX3JvdXRlcyksCi19OwotCi1zdGF0aWMgaW50IHBjbTE3OTJhX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBwY20xNzkyYV9wcml2YXRlICpwY20xNzkyYTsKLQlpbnQgcmV0OwotCi0JcGNtMTc5MmEgPSBkZXZtX2t6YWxsb2MoJnNwaS0+ZGV2LCBzaXplb2Yoc3RydWN0IHBjbTE3OTJhX3ByaXZhdGUpLAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghcGNtMTc5MmEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3BpX3NldF9kcnZkYXRhKHNwaSwgcGNtMTc5MmEpOwotCi0JcGNtMTc5MmEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfc3BpKHNwaSwgJnBjbTE3OTJhX3JlZ21hcCk7Ci0JaWYgKElTX0VSUihwY20xNzkyYS0+cmVnbWFwKSkgewotCQlyZXQgPSBQVFJfRVJSKHBjbTE3OTJhLT5yZWdtYXApOwotCQlkZXZfZXJyKCZzcGktPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciByZWdtYXA6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZzcGktPmRldiwKLQkJCSZzb2NfY29kZWNfZGV2X3BjbTE3OTJhLCAmcGNtMTc5MmFfZGFpLCAxKTsKLX0KLQotc3RhdGljIGludCBwY20xNzkyYV9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZzcGktPmRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBwY20xNzkyYV9zcGlfaWRzW10gPSB7Ci0JeyAicGNtMTc5MmEiLCAwIH0sCi0JeyB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCBwY20xNzkyYV9zcGlfaWRzKTsKLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHBjbTE3OTJhX2NvZGVjX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJwY20xNzkyYSIsCi0JCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihwY20xNzkyYV9vZl9tYXRjaCksCi0JfSwKLQkuaWRfdGFibGUgPSBwY20xNzkyYV9zcGlfaWRzLAotCS5wcm9iZSA9IHBjbTE3OTJhX3NwaV9wcm9iZSwKLQkucmVtb3ZlID0gcGNtMTc5MmFfc3BpX3JlbW92ZSwKLX07Ci0KLW1vZHVsZV9zcGlfZHJpdmVyKHBjbTE3OTJhX2NvZGVjX2RyaXZlcik7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiQVNvQyBQQ00xNzkyQSBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgVHJpbWFyY2hpIDxtaWNoYWVsQGFtYXJ1bGFzb2x1dGlvbnMuY29tPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9wY20xNzl4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTE3OXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTZjN2I3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9wY20xNzl4LmMKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBQQ00xNzlYIEFTb0MgY29kZWMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSBBbWFydWxhIFNvbHV0aW9ucyBCLlYuIDIwMTMKKyAqCisgKiAgICAgTWljaGFlbCBUcmltYXJjaGkgPG1pY2hhZWxAYW1hcnVsYXNvbHV0aW9ucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKworI2luY2x1ZGUgInBjbTE3OXguaCIKKworI2RlZmluZSBQQ00xNzlYX0RBQ19WT0xfTEVGVAkweDEwCisjZGVmaW5lIFBDTTE3OVhfREFDX1ZPTF9SSUdIVAkweDExCisjZGVmaW5lIFBDTTE3OVhfRk1UX0NPTlRST0wJMHgxMgorI2RlZmluZSBQQ00xNzlYX01PREVfQ09OVFJPTAkweDEzCisjZGVmaW5lIFBDTTE3OVhfU09GVF9NVVRFCVBDTTE3OVhfRk1UX0NPTlRST0wKKworI2RlZmluZSBQQ00xNzlYX0ZNVF9NQVNLCTB4NzAKKyNkZWZpbmUgUENNMTc5WF9GTVRfU0hJRlQJNAorI2RlZmluZSBQQ00xNzlYX01VVEVfTUFTSwkweDAxCisjZGVmaW5lIFBDTTE3OVhfTVVURV9TSElGVAkwCisjZGVmaW5lIFBDTTE3OVhfQVRMRF9FTkFCTEUJKDEgPDwgNykKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfZGVmYXVsdCBwY20xNzl4X3JlZ19kZWZhdWx0c1tdID0geworCXsgMHgxMCwgMHhmZiB9LAorCXsgMHgxMSwgMHhmZiB9LAorCXsgMHgxMiwgMHg1MCB9LAorCXsgMHgxMywgMHgwMCB9LAorCXsgMHgxNCwgMHgwMCB9LAorCXsgMHgxNSwgMHgwMSB9LAorCXsgMHgxNiwgMHgwMCB9LAorCXsgMHgxNywgMHgwMCB9LAorfTsKKworc3RhdGljIGJvb2wgcGNtMTc5eF9hY2Nlc3NpYmxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlZyA+PSAweDEwICYmIHJlZyA8PSAweDE3OworfQorCitzdGF0aWMgYm9vbCBwY20xNzl4X3dyaXRlYWJsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCByZWdpc3RlciByZWcpCit7CisJYm9vbCBhY2Nlc3NpYmxlOworCisJYWNjZXNzaWJsZSA9IHBjbTE3OXhfYWNjZXNzaWJsZV9yZWcoZGV2LCByZWcpOworCisJcmV0dXJuIGFjY2Vzc2libGUgJiYgcmVnICE9IDB4MTYgJiYgcmVnICE9IDB4MTc7Cit9CisKK3N0cnVjdCBwY20xNzl4X3ByaXZhdGUgeworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwl1bnNpZ25lZCBpbnQgZm9ybWF0OworCXVuc2lnbmVkIGludCByYXRlOworfTsKKworc3RhdGljIGludCBwY20xNzl4X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHBjbTE3OXhfcHJpdmF0ZSAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJcHJpdi0+Zm9ybWF0ID0gZm9ybWF0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNtMTc5eF9kaWdpdGFsX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHBjbTE3OXhfcHJpdmF0ZSAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCByZXQ7CisKKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBQQ00xNzlYX1NPRlRfTVVURSwKKwkJCQkgUENNMTc5WF9NVVRFX01BU0ssICEhbXV0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY20xNzl4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHBjbTE3OXhfcHJpdmF0ZSAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCB2YWwgPSAwLCByZXQ7CisKKwlwcml2LT5yYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCXN3aXRjaCAocHJpdi0+Zm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCXN3aXRjaCAocGFyYW1zX3dpZHRoKHBhcmFtcykpIHsKKwkJY2FzZSAyNDoKKwkJY2FzZSAzMjoKKwkJCXZhbCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAxNjoKKwkJCXZhbCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlzd2l0Y2ggKHBhcmFtc193aWR0aChwYXJhbXMpKSB7CisJCWNhc2UgMjQ6CisJCWNhc2UgMzI6CisJCQl2YWwgPSA1OworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQl2YWwgPSA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJJbnZhbGlkIERBSSBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2YWwgPSB2YWwgPDwgUENNMTc5WF9GTVRfU0hJRlQgfCBQQ00xNzlYX0FUTERfRU5BQkxFOworCisJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgUENNMTc5WF9GTVRfQ09OVFJPTCwKKwkJCQkgUENNMTc5WF9GTVRfTUFTSyB8IFBDTTE3OVhfQVRMRF9FTkFCTEUsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcGNtMTc5eF9kYWlfb3BzID0geworCS5zZXRfZm10CT0gcGNtMTc5eF9zZXRfZGFpX2ZtdCwKKwkuaHdfcGFyYW1zCT0gcGNtMTc5eF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHBjbTE3OXhfZGlnaXRhbF9tdXRlLAorfTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHBjbTE3OXhfZGFjX3RsdiwgLTEyMDAwLCA1MCwgMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBwY20xNzl4X2NvbnRyb2xzW10gPSB7CisJU09DX0RPVUJMRV9SX1JBTkdFX1RMVigiREFDIFBsYXliYWNrIFZvbHVtZSIsIFBDTTE3OVhfREFDX1ZPTF9MRUZULAorCQkJIFBDTTE3OVhfREFDX1ZPTF9SSUdIVCwgMCwgMHhmLCAweGZmLCAwLAorCQkJIHBjbTE3OXhfZGFjX3RsdiksCisJU09DX1NJTkdMRSgiREFDIEludmVydCBPdXRwdXQgU3dpdGNoIiwgUENNMTc5WF9NT0RFX0NPTlRST0wsIDcsIDEsIDApLAorCVNPQ19TSU5HTEUoIkRBQyBSb2xsb2ZmIEZpbHRlciBTd2l0Y2giLCBQQ00xNzlYX01PREVfQ09OVFJPTCwgMSwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgcGNtMTc5eF9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9PVVRQVVQoIklPVVRMKyIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiSU9VVEwtIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJJT1VUUisiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIklPVVRSLSIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgcGNtMTc5eF9kYXBtX3JvdXRlc1tdID0geworCXsgIklPVVRMKyIsIE5VTEwsICJQbGF5YmFjayIgfSwKKwl7ICJJT1VUTC0iLCBOVUxMLCAiUGxheWJhY2siIH0sCisJeyAiSU9VVFIrIiwgTlVMTCwgIlBsYXliYWNrIiB9LAorCXsgIklPVVRSLSIsIE5VTEwsICJQbGF5YmFjayIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHBjbTE3OXhfZGFpID0geworCS5uYW1lID0gInBjbTE3OXgtaGlmaSIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFBDTTE3OTJBX1JBVEVTLAorCQkuZm9ybWF0cyA9IFBDTTE3OTJBX0ZPUk1BVFMsIH0sCisJLm9wcyA9ICZwY20xNzl4X2RhaV9vcHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwY20xNzl4X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJ0aSxwY20xNzkyYSIsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcGNtMTc5eF9vZl9tYXRjaCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBwY20xNzl4X3JlZ21hcCA9IHsKKwkucmVnX2JpdHMJCT0gOCwKKwkudmFsX2JpdHMJCT0gOCwKKwkubWF4X3JlZ2lzdGVyCQk9IDIzLAorCS5yZWdfZGVmYXVsdHMJCT0gcGNtMTc5eF9yZWdfZGVmYXVsdHMsCisJLm51bV9yZWdfZGVmYXVsdHMJPSBBUlJBWV9TSVpFKHBjbTE3OXhfcmVnX2RlZmF1bHRzKSwKKwkud3JpdGVhYmxlX3JlZwkJPSBwY20xNzl4X3dyaXRlYWJsZV9yZWcsCisJLnJlYWRhYmxlX3JlZwkJPSBwY20xNzl4X2FjY2Vzc2libGVfcmVnLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X3BjbTE3OXggPSB7CisJLmNvbnRyb2xzCQk9IHBjbTE3OXhfY29udHJvbHMsCisJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKHBjbTE3OXhfY29udHJvbHMpLAorCS5kYXBtX3dpZGdldHMJCT0gcGNtMTc5eF9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMJPSBBUlJBWV9TSVpFKHBjbTE3OXhfZGFwbV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMJCT0gcGNtMTc5eF9kYXBtX3JvdXRlcywKKwkubnVtX2RhcG1fcm91dGVzCT0gQVJSQVlfU0laRShwY20xNzl4X2RhcG1fcm91dGVzKSwKK307CisKK3N0YXRpYyBpbnQgcGNtMTc5eF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgcGNtMTc5eF9wcml2YXRlICpwY20xNzl4OworCWludCByZXQ7CisKKwlwY20xNzl4ID0gZGV2bV9remFsbG9jKCZzcGktPmRldiwgc2l6ZW9mKHN0cnVjdCBwY20xNzl4X3ByaXZhdGUpLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghcGNtMTc5eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBwY20xNzl4KTsKKworCXBjbTE3OXgtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfc3BpKHNwaSwgJnBjbTE3OXhfcmVnbWFwKTsKKwlpZiAoSVNfRVJSKHBjbTE3OXgtPnJlZ21hcCkpIHsKKwkJcmV0ID0gUFRSX0VSUihwY20xNzl4LT5yZWdtYXApOworCQlkZXZfZXJyKCZzcGktPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciByZWdtYXA6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZzcGktPmRldiwKKwkJCSZzb2NfY29kZWNfZGV2X3BjbTE3OXgsICZwY20xNzl4X2RhaSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgcGNtMTc5eF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZzcGktPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBwY20xNzl4X3NwaV9pZHNbXSA9IHsKKwl7ICJwY20xNzl4IiwgMCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgcGNtMTc5eF9zcGlfaWRzKTsKKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHBjbTE3OXhfY29kZWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInBjbTE3OXgiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIocGNtMTc5eF9vZl9tYXRjaCksCisJfSwKKwkuaWRfdGFibGUgPSBwY20xNzl4X3NwaV9pZHMsCisJLnByb2JlID0gcGNtMTc5eF9zcGlfcHJvYmUsCisJLnJlbW92ZSA9IHBjbTE3OXhfc3BpX3JlbW92ZSwKK307CisKK21vZHVsZV9zcGlfZHJpdmVyKHBjbTE3OXhfY29kZWNfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFBDTTE3OVggZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFRyaW1hcmNoaSA8bWljaGFlbEBhbWFydWxhc29sdXRpb25zLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtMTc5MmEuaCBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtMTc5eC5oCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIHNvdW5kL3NvYy9jb2RlY3MvcGNtMTc5MmEuaApyZW5hbWUgdG8gc291bmQvc29jL2NvZGVjcy9wY20xNzl4LmgKaW5kZXggNTFkNTQ3MC4uYzZmZGMwNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9wY20xNzkyYS5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtMTc5eC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGRlZmluaXRpb25zIGZvciBQQ00xNzkyQQorICogZGVmaW5pdGlvbnMgZm9yIFBDTTE3OVgKICAqCiAgKiBDb3B5cmlnaHQgMjAxMyBBbWFydWxhIFNvbHV0aW9ucwogICoKQEAgLTE0LDggKzE0LDggQEAKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2lmbmRlZiBfX1BDTTE3OTJBX0hfXwotI2RlZmluZSBfX1BDTTE3OTJBX0hfXworI2lmbmRlZiBfX1BDTTE3OVhfSF9fCisjZGVmaW5lIF9fUENNMTc5WF9IX18KIAogI2RlZmluZSBQQ00xNzkyQV9SQVRFUyAoU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwIHwgXAogCQkJU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCB8IFwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzE2OGEtaTJjLmMgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMxNjhhLWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZWIwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMxNjhhLWkyYy5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBQQ00zMTY4QSBjb2RlYyBpMmMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogQXV0aG9yOiBEYW1pZW4gSG9yc2xleSA8RGFtaWVuLkhvcnNsZXlAaW1ndGVjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSAicGNtMzE2OGEuaCIKKworc3RhdGljIGludCBwY20zMTY4YV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKworCXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgJnBjbTMxNjhhX3JlZ21hcCk7CisJaWYgKElTX0VSUihyZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihyZWdtYXApOworCisJcmV0dXJuIHBjbTMxNjhhX3Byb2JlKCZpMmMtPmRldiwgcmVnbWFwKTsKK30KKworc3RhdGljIGludCBwY20zMTY4YV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJcGNtMzE2OGFfcmVtb3ZlKCZpMmMtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHBjbTMxNjhhX2kyY19pZFtdID0geworCXsgInBjbTMxNjhhIiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcGNtMzE2OGFfaTJjX2lkKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGNtMzE2OGFfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInRpLHBjbTMxNjhhIiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwY20zMTY4YV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwY20zMTY4YV9pMmNfZHJpdmVyID0geworCS5wcm9iZQkJPSBwY20zMTY4YV9pMmNfcHJvYmUsCisJLnJlbW92ZQkJPSBwY20zMTY4YV9pMmNfcmVtb3ZlLAorCS5pZF90YWJsZQk9IHBjbTMxNjhhX2kyY19pZCwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicGNtMzE2OGEiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBwY20zMTY4YV9vZl9tYXRjaCwKKwkJLnBtCQk9ICZwY20zMTY4YV9wbV9vcHMsCisJfSwKK307Cittb2R1bGVfaTJjX2RyaXZlcihwY20zMTY4YV9pMmNfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ00zMTY4QSBJMkMgY29kZWMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJEYW1pZW4gSG9yc2xleSA8RGFtaWVuLkhvcnNsZXlAaW1ndGVjLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzE2OGEtc3BpLmMgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMxNjhhLXNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTQ1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMxNjhhLXNwaS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBQQ00zMTY4QSBjb2RlYyBzcGkgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogQXV0aG9yOiBEYW1pZW4gSG9yc2xleSA8RGFtaWVuLkhvcnNsZXlAaW1ndGVjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgInBjbTMxNjhhLmgiCisKK3N0YXRpYyBpbnQgcGNtMzE2OGFfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCisJcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9zcGkoc3BpLCAmcGNtMzE2OGFfcmVnbWFwKTsKKwlpZiAoSVNfRVJSKHJlZ21hcCkpCisJCXJldHVybiBQVFJfRVJSKHJlZ21hcCk7CisKKwlyZXR1cm4gcGNtMzE2OGFfcHJvYmUoJnNwaS0+ZGV2LCByZWdtYXApOworfQorCitzdGF0aWMgaW50IHBjbTMxNjhhX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlwY20zMTY4YV9yZW1vdmUoJnNwaS0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgcGNtMzE2OGFfc3BpX2lkW10gPSB7CisJeyAicGNtMzE2OGEiLCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgcGNtMzE2OGFfc3BpX2lkKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGNtMzE2OGFfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInRpLHBjbTMxNjhhIiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwY20zMTY4YV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBwY20zMTY4YV9zcGlfZHJpdmVyID0geworCS5wcm9iZQkJPSBwY20zMTY4YV9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBwY20zMTY4YV9zcGlfcmVtb3ZlLAorCS5pZF90YWJsZQk9IHBjbTMxNjhhX3NwaV9pZCwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJwY20zMTY4YSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHBjbTMxNjhhX29mX21hdGNoLAorCQkucG0JCT0gJnBjbTMxNjhhX3BtX29wcywKKwl9LAorfTsKK21vZHVsZV9zcGlfZHJpdmVyKHBjbTMxNjhhX3NwaV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBDTTMxNjhBIFNQSSBjb2RlYyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRhbWllbiBIb3JzbGV5IDxEYW1pZW4uSG9yc2xleUBpbWd0ZWMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9wY20zMTY4YS5jIGIvc291bmQvc29jL2NvZGVjcy9wY20zMTY4YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YjI2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMxNjhhLmMKQEAgLTAsMCArMSw3NjcgQEAKKy8qCisgKiBQQ00zMTY4QSBjb2RlYyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBBdXRob3I6IERhbWllbiBIb3JzbGV5IDxEYW1pZW4uSG9yc2xleUBpbWd0ZWMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJwY20zMTY4YS5oIgorCisjZGVmaW5lIFBDTTMxNjhBX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgXAorCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFwKKwkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFwKKwkJCSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworI2RlZmluZSBQQ00zMTY4QV9GTVRfSTJTCQkweDAKKyNkZWZpbmUgUENNMzE2OEFfRk1UX0xFRlRfSgkJMHgxCisjZGVmaW5lIFBDTTMxNjhBX0ZNVF9SSUdIVF9KCQkweDIKKyNkZWZpbmUgUENNMzE2OEFfRk1UX1JJR0hUX0pfMTYJCTB4MworI2RlZmluZSBQQ00zMTY4QV9GTVRfRFNQX0EJCTB4NAorI2RlZmluZSBQQ00zMTY4QV9GTVRfRFNQX0IJCTB4NQorI2RlZmluZSBQQ00zMTY4QV9GTVRfRFNQX01BU0sJCTB4NAorCisjZGVmaW5lIFBDTTMxNjhBX05VTV9TVVBQTElFUyA2CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcGNtMzE2OGFfc3VwcGx5X25hbWVzW1BDTTMxNjhBX05VTV9TVVBQTElFU10gPSB7CisJIlZERDEiLAorCSJWREQyIiwKKwkiVkNDQUQxIiwKKwkiVkNDQUQyIiwKKwkiVkNDREExIiwKKwkiVkNDREEyIgorfTsKKworc3RydWN0IHBjbTMxNjhhX3ByaXYgeworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1BDTTMxNjhBX05VTV9TVVBQTElFU107CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCBjbGsgKnNja2k7CisJYm9vbCBhZGNfbWFzdGVyX21vZGU7CisJYm9vbCBkYWNfbWFzdGVyX21vZGU7CisJdW5zaWduZWQgbG9uZyBzeXNjbGs7CisJdW5zaWduZWQgaW50IGFkY19mbXQ7CisJdW5zaWduZWQgaW50IGRhY19mbXQ7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcGNtMzE2OGFfcm9sbF9vZmZbXSA9IHsgIlNoYXJwIiwgIlNsb3ciIH07CisKK3N0YXRpYyBTT0NfRU5VTV9TSU5HTEVfREVDTChwY20zMTY4YV9kMV9yb2xsX29mZiwgUENNMzE2OEFfREFDX09QX0ZMVCwKKwkJUENNMzE2OEFfREFDX0ZMVF9TSElGVCwgcGNtMzE2OGFfcm9sbF9vZmYpOworc3RhdGljIFNPQ19FTlVNX1NJTkdMRV9ERUNMKHBjbTMxNjhhX2QyX3JvbGxfb2ZmLCBQQ00zMTY4QV9EQUNfT1BfRkxULAorCQlQQ00zMTY4QV9EQUNfRkxUX1NISUZUICsgMSwgcGNtMzE2OGFfcm9sbF9vZmYpOworc3RhdGljIFNPQ19FTlVNX1NJTkdMRV9ERUNMKHBjbTMxNjhhX2QzX3JvbGxfb2ZmLCBQQ00zMTY4QV9EQUNfT1BfRkxULAorCQlQQ00zMTY4QV9EQUNfRkxUX1NISUZUICsgMiwgcGNtMzE2OGFfcm9sbF9vZmYpOworc3RhdGljIFNPQ19FTlVNX1NJTkdMRV9ERUNMKHBjbTMxNjhhX2Q0X3JvbGxfb2ZmLCBQQ00zMTY4QV9EQUNfT1BfRkxULAorCQlQQ00zMTY4QV9EQUNfRkxUX1NISUZUICsgMywgcGNtMzE2OGFfcm9sbF9vZmYpOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcGNtMzE2OGFfdm9sdW1lX3R5cGVbXSA9IHsKKwkJIkluZGl2aWR1YWwiLCAiTWFzdGVyICsgSW5kaXZpZHVhbCIgfTsKKworc3RhdGljIFNPQ19FTlVNX1NJTkdMRV9ERUNMKHBjbTMxNjhhX2RhY192b2x1bWVfdHlwZSwgUENNMzE2OEFfREFDX0FUVF9ERU1QX1pGLAorCQlQQ00zMTY4QV9EQUNfQVRNRERBX1NISUZULCBwY20zMTY4YV92b2x1bWVfdHlwZSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBwY20zMTY4YV9hdHRfc3BlZWRfbXVsdFtdID0geyAiMjA0OCIsICI0MDk2IiB9OworCitzdGF0aWMgU09DX0VOVU1fU0lOR0xFX0RFQ0wocGNtMzE2OGFfZGFjX2F0dF9tdWx0LCBQQ00zMTY4QV9EQUNfQVRUX0RFTVBfWkYsCisJCVBDTTMxNjhBX0RBQ19BVFNQREFfU0hJRlQsIHBjbTMxNjhhX2F0dF9zcGVlZF9tdWx0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHBjbTMxNjhhX2RlbXBbXSA9IHsKKwkJIkRpc2FibGVkIiwgIjQ4a2h6IiwgIjQ0LjFraHoiLCAiMzJraHoiIH07CisKK3N0YXRpYyBTT0NfRU5VTV9TSU5HTEVfREVDTChwY20zMTY4YV9kYWNfZGVtcCwgUENNMzE2OEFfREFDX0FUVF9ERU1QX1pGLAorCQlQQ00zMTY4QV9EQUNfREVNUF9TSElGVCwgcGNtMzE2OGFfZGVtcCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBwY20zMTY4YV96Zl9mdW5jW10gPSB7CisJCSJEQUMgMS8yLzMvNCBBTkQiLCAiREFDIDEvMi8zLzQgT1IiLCAiREFDIDEvMi8zIEFORCIsCisJCSJEQUMgMS8yLzMgT1IiLCAiREFDIDQgQU5EIiwgIkRBQyA0IE9SIiB9OworCitzdGF0aWMgU09DX0VOVU1fU0lOR0xFX0RFQ0wocGNtMzE2OGFfZGFjX3pmX2Z1bmMsIFBDTTMxNjhBX0RBQ19BVFRfREVNUF9aRiwKKwkJUENNMzE2OEFfREFDX0FaUk9fU0hJRlQsIHBjbTMxNjhhX3pmX2Z1bmMpOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcGNtMzE2OGFfcG9sW10gPSB7ICJBY3RpdmUgSGlnaCIsICJBY3RpdmUgTG93IiB9OworCitzdGF0aWMgU09DX0VOVU1fU0lOR0xFX0RFQ0wocGNtMzE2OGFfZGFjX3pmX3BvbCwgUENNMzE2OEFfREFDX0FUVF9ERU1QX1pGLAorCQlQQ00zMTY4QV9EQUNfQVRTUERBX1NISUZULCBwY20zMTY4YV9wb2wpOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcGNtMzE2OGFfY29uW10gPSB7ICJEaWZmZXJlbnRpYWwiLCAiU2luZ2xlLUVuZGVkIiB9OworCitzdGF0aWMgU09DX0VOVU1fRE9VQkxFX0RFQ0wocGNtMzE2OGFfYWRjMV9jb24sIFBDTTMxNjhBX0FEQ19TRUFELAorCQkJCTAsIDEsIHBjbTMxNjhhX2Nvbik7CitzdGF0aWMgU09DX0VOVU1fRE9VQkxFX0RFQ0wocGNtMzE2OGFfYWRjMl9jb24sIFBDTTMxNjhBX0FEQ19TRUFELAorCQkJCTIsIDMsIHBjbTMxNjhhX2Nvbik7CitzdGF0aWMgU09DX0VOVU1fRE9VQkxFX0RFQ0wocGNtMzE2OGFfYWRjM19jb24sIFBDTTMxNjhBX0FEQ19TRUFELAorCQkJCTQsIDUsIHBjbTMxNjhhX2Nvbik7CisKK3N0YXRpYyBTT0NfRU5VTV9TSU5HTEVfREVDTChwY20zMTY4YV9hZGNfdm9sdW1lX3R5cGUsIFBDTTMxNjhBX0FEQ19BVFRfT1ZGLAorCQlQQ00zMTY4QV9BRENfQVRNREFEX1NISUZULCBwY20zMTY4YV92b2x1bWVfdHlwZSk7CisKK3N0YXRpYyBTT0NfRU5VTV9TSU5HTEVfREVDTChwY20zMTY4YV9hZGNfYXR0X211bHQsIFBDTTMxNjhBX0FEQ19BVFRfT1ZGLAorCQlQQ00zMTY4QV9BRENfQVRTUEFEX1NISUZULCBwY20zMTY4YV9hdHRfc3BlZWRfbXVsdCk7CisKK3N0YXRpYyBTT0NfRU5VTV9TSU5HTEVfREVDTChwY20zMTY4YV9hZGNfb3ZfcG9sLCBQQ00zMTY4QV9BRENfQVRUX09WRiwKKwkJUENNMzE2OEFfQURDX09WRlBfU0hJRlQsIHBjbTMxNjhhX3BvbCk7CisKKy8qIC0xMDBkYiB0byAwZGIsIHJlZ2lzdGVyIHZhbHVlcyAwLTU0IGNhdXNlIG11dGUgKi8KK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShwY20zMTY4YV9kYWNfdGx2LCAtMTAwNTAsIDUwLCAxKTsKKworLyogLTEwMGRiIHRvIDIwZGIsIHJlZ2lzdGVyIHZhbHVlcyAwLTE0IGNhdXNlIG11dGUgKi8KK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShwY20zMTY4YV9hZGNfdGx2LCAtMTAwNTAsIDUwLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHBjbTMxNjhhX3NuZF9jb250cm9sc1tdID0geworCVNPQ19TSU5HTEUoIkRBQyBQb3dlci1TYXZlIFN3aXRjaCIsIFBDTTMxNjhBX0RBQ19QV1JfTVNUX0ZNVCwKKwkJCVBDTTMxNjhBX0RBQ19QU01EQV9TSElGVCwgMSwgMSksCisJU09DX0VOVU0oIkRBQzEgRGlnaXRhbCBGaWx0ZXIgcm9sbC1vZmYiLCBwY20zMTY4YV9kMV9yb2xsX29mZiksCisJU09DX0VOVU0oIkRBQzIgRGlnaXRhbCBGaWx0ZXIgcm9sbC1vZmYiLCBwY20zMTY4YV9kMl9yb2xsX29mZiksCisJU09DX0VOVU0oIkRBQzMgRGlnaXRhbCBGaWx0ZXIgcm9sbC1vZmYiLCBwY20zMTY4YV9kM19yb2xsX29mZiksCisJU09DX0VOVU0oIkRBQzQgRGlnaXRhbCBGaWx0ZXIgcm9sbC1vZmYiLCBwY20zMTY4YV9kNF9yb2xsX29mZiksCisJU09DX0RPVUJMRSgiREFDMSBJbnZlcnQgU3dpdGNoIiwgUENNMzE2OEFfREFDX0lOViwgMCwgMSwgMSwgMCksCisJU09DX0RPVUJMRSgiREFDMiBJbnZlcnQgU3dpdGNoIiwgUENNMzE2OEFfREFDX0lOViwgMiwgMywgMSwgMCksCisJU09DX0RPVUJMRSgiREFDMyBJbnZlcnQgU3dpdGNoIiwgUENNMzE2OEFfREFDX0lOViwgNCwgNSwgMSwgMCksCisJU09DX0RPVUJMRSgiREFDNCBJbnZlcnQgU3dpdGNoIiwgUENNMzE2OEFfREFDX0lOViwgNiwgNywgMSwgMCksCisJU09DX0RPVUJMRV9TVFMoIkRBQzEgWmVybyBGbGFnIiwgUENNMzE2OEFfREFDX1pFUk8sIDAsIDEsIDEsIDApLAorCVNPQ19ET1VCTEVfU1RTKCJEQUMyIFplcm8gRmxhZyIsIFBDTTMxNjhBX0RBQ19aRVJPLCAyLCAzLCAxLCAwKSwKKwlTT0NfRE9VQkxFX1NUUygiREFDMyBaZXJvIEZsYWciLCBQQ00zMTY4QV9EQUNfWkVSTywgNCwgNSwgMSwgMCksCisJU09DX0RPVUJMRV9TVFMoIkRBQzQgWmVybyBGbGFnIiwgUENNMzE2OEFfREFDX1pFUk8sIDYsIDcsIDEsIDApLAorCVNPQ19FTlVNKCJEQUMgVm9sdW1lIENvbnRyb2wgVHlwZSIsIHBjbTMxNjhhX2RhY192b2x1bWVfdHlwZSksCisJU09DX0VOVU0oIkRBQyBWb2x1bWUgUmF0ZSBNdWx0aXBsaWVyIiwgcGNtMzE2OGFfZGFjX2F0dF9tdWx0KSwKKwlTT0NfRU5VTSgiREFDIERlLUVtcGhhc2lzIiwgcGNtMzE2OGFfZGFjX2RlbXApLAorCVNPQ19FTlVNKCJEQUMgWmVybyBGbGFnIEZ1bmN0aW9uIiwgcGNtMzE2OGFfZGFjX3pmX2Z1bmMpLAorCVNPQ19FTlVNKCJEQUMgWmVybyBGbGFnIFBvbGFyaXR5IiwgcGNtMzE2OGFfZGFjX3pmX3BvbCksCisJU09DX1NJTkdMRV9SQU5HRV9UTFYoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCQkJUENNMzE2OEFfREFDX1ZPTF9NQVNURVIsIDAsIDU0LCAyNTUsIDAsCisJCQlwY20zMTY4YV9kYWNfdGx2KSwKKwlTT0NfRE9VQkxFX1JfUkFOR0VfVExWKCJEQUMxIFBsYXliYWNrIFZvbHVtZSIsCisJCQlQQ00zMTY4QV9EQUNfVk9MX0NIQU5fU1RBUlQsCisJCQlQQ00zMTY4QV9EQUNfVk9MX0NIQU5fU1RBUlQgKyAxLAorCQkJMCwgNTQsIDI1NSwgMCwgcGNtMzE2OGFfZGFjX3RsdiksCisJU09DX0RPVUJMRV9SX1JBTkdFX1RMVigiREFDMiBQbGF5YmFjayBWb2x1bWUiLAorCQkJUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUICsgMiwKKwkJCVBDTTMxNjhBX0RBQ19WT0xfQ0hBTl9TVEFSVCArIDMsCisJCQkwLCA1NCwgMjU1LCAwLCBwY20zMTY4YV9kYWNfdGx2KSwKKwlTT0NfRE9VQkxFX1JfUkFOR0VfVExWKCJEQUMzIFBsYXliYWNrIFZvbHVtZSIsCisJCQlQQ00zMTY4QV9EQUNfVk9MX0NIQU5fU1RBUlQgKyA0LAorCQkJUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUICsgNSwKKwkJCTAsIDU0LCAyNTUsIDAsIHBjbTMxNjhhX2RhY190bHYpLAorCVNPQ19ET1VCTEVfUl9SQU5HRV9UTFYoIkRBQzQgUGxheWJhY2sgVm9sdW1lIiwKKwkJCVBDTTMxNjhBX0RBQ19WT0xfQ0hBTl9TVEFSVCArIDYsCisJCQlQQ00zMTY4QV9EQUNfVk9MX0NIQU5fU1RBUlQgKyA3LAorCQkJMCwgNTQsIDI1NSwgMCwgcGNtMzE2OGFfZGFjX3RsdiksCisJU09DX1NJTkdMRSgiQURDMSBIaWdoLVBhc3MgRmlsdGVyIFN3aXRjaCIsIFBDTTMxNjhBX0FEQ19QV1JfSFBGQiwKKwkJCVBDTTMxNjhBX0FEQ19CWVBfU0hJRlQsIDEsIDEpLAorCVNPQ19TSU5HTEUoIkFEQzIgSGlnaC1QYXNzIEZpbHRlciBTd2l0Y2giLCBQQ00zMTY4QV9BRENfUFdSX0hQRkIsCisJCQlQQ00zMTY4QV9BRENfQllQX1NISUZUICsgMSwgMSwgMSksCisJU09DX1NJTkdMRSgiQURDMyBIaWdoLVBhc3MgRmlsdGVyIFN3aXRjaCIsIFBDTTMxNjhBX0FEQ19QV1JfSFBGQiwKKwkJCVBDTTMxNjhBX0FEQ19CWVBfU0hJRlQgKyAyLCAxLCAxKSwKKwlTT0NfRU5VTSgiQURDMSBDb25uZWN0aW9uIFR5cGUiLCBwY20zMTY4YV9hZGMxX2NvbiksCisJU09DX0VOVU0oIkFEQzIgQ29ubmVjdGlvbiBUeXBlIiwgcGNtMzE2OGFfYWRjMl9jb24pLAorCVNPQ19FTlVNKCJBREMzIENvbm5lY3Rpb24gVHlwZSIsIHBjbTMxNjhhX2FkYzNfY29uKSwKKwlTT0NfRE9VQkxFKCJBREMxIEludmVydCBTd2l0Y2giLCBQQ00zMTY4QV9BRENfSU5WLCAwLCAxLCAxLCAwKSwKKwlTT0NfRE9VQkxFKCJBREMyIEludmVydCBTd2l0Y2giLCBQQ00zMTY4QV9BRENfSU5WLCAyLCAzLCAxLCAwKSwKKwlTT0NfRE9VQkxFKCJBREMzIEludmVydCBTd2l0Y2giLCBQQ00zMTY4QV9BRENfSU5WLCA0LCA1LCAxLCAwKSwKKwlTT0NfRE9VQkxFKCJBREMxIE11dGUgU3dpdGNoIiwgUENNMzE2OEFfQURDX01VVEUsIDAsIDEsIDEsIDApLAorCVNPQ19ET1VCTEUoIkFEQzIgTXV0ZSBTd2l0Y2giLCBQQ00zMTY4QV9BRENfTVVURSwgMiwgMywgMSwgMCksCisJU09DX0RPVUJMRSgiQURDMyBNdXRlIFN3aXRjaCIsIFBDTTMxNjhBX0FEQ19NVVRFLCA0LCA1LCAxLCAwKSwKKwlTT0NfRE9VQkxFX1NUUygiQURDMSBPdmVyZmxvdyBGbGFnIiwgUENNMzE2OEFfQURDX09WLCAwLCAxLCAxLCAwKSwKKwlTT0NfRE9VQkxFX1NUUygiQURDMiBPdmVyZmxvdyBGbGFnIiwgUENNMzE2OEFfQURDX09WLCAyLCAzLCAxLCAwKSwKKwlTT0NfRE9VQkxFX1NUUygiQURDMyBPdmVyZmxvdyBGbGFnIiwgUENNMzE2OEFfQURDX09WLCA0LCA1LCAxLCAwKSwKKwlTT0NfRU5VTSgiQURDIFZvbHVtZSBDb250cm9sIFR5cGUiLCBwY20zMTY4YV9hZGNfdm9sdW1lX3R5cGUpLAorCVNPQ19FTlVNKCJBREMgVm9sdW1lIFJhdGUgTXVsdGlwbGllciIsIHBjbTMxNjhhX2FkY19hdHRfbXVsdCksCisJU09DX0VOVU0oIkFEQyBPdmVyZmxvdyBGbGFnIFBvbGFyaXR5IiwgcGNtMzE2OGFfYWRjX292X3BvbCksCisJU09DX1NJTkdMRV9SQU5HRV9UTFYoIk1hc3RlciBDYXB0dXJlIFZvbHVtZSIsCisJCQlQQ00zMTY4QV9BRENfVk9MX01BU1RFUiwgMCwgMTQsIDI1NSwgMCwKKwkJCXBjbTMxNjhhX2FkY190bHYpLAorCVNPQ19ET1VCTEVfUl9SQU5HRV9UTFYoIkFEQzEgQ2FwdHVyZSBWb2x1bWUiLAorCQkJUENNMzE2OEFfQURDX1ZPTF9DSEFOX1NUQVJULAorCQkJUENNMzE2OEFfQURDX1ZPTF9DSEFOX1NUQVJUICsgMSwKKwkJCTAsIDE0LCAyNTUsIDAsIHBjbTMxNjhhX2FkY190bHYpLAorCVNPQ19ET1VCTEVfUl9SQU5HRV9UTFYoIkFEQzIgQ2FwdHVyZSBWb2x1bWUiLAorCQkJUENNMzE2OEFfQURDX1ZPTF9DSEFOX1NUQVJUICsgMiwKKwkJCVBDTTMxNjhBX0FEQ19WT0xfQ0hBTl9TVEFSVCArIDMsCisJCQkwLCAxNCwgMjU1LCAwLCBwY20zMTY4YV9hZGNfdGx2KSwKKwlTT0NfRE9VQkxFX1JfUkFOR0VfVExWKCJBREMzIENhcHR1cmUgVm9sdW1lIiwKKwkJCVBDTTMxNjhBX0FEQ19WT0xfQ0hBTl9TVEFSVCArIDQsCisJCQlQQ00zMTY4QV9BRENfVk9MX0NIQU5fU1RBUlQgKyA1LAorCQkJMCwgMTQsIDI1NSwgMCwgcGNtMzE2OGFfYWRjX3RsdikKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBwY20zMTY4YV9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMxIiwgIlBsYXliYWNrIiwgUENNMzE2OEFfREFDX09QX0ZMVCwKKwkJCVBDTTMxNjhBX0RBQ19PUEVEQV9TSElGVCwgMSksCisJU05EX1NPQ19EQVBNX0RBQygiREFDMiIsICJQbGF5YmFjayIsIFBDTTMxNjhBX0RBQ19PUF9GTFQsCisJCQlQQ00zMTY4QV9EQUNfT1BFREFfU0hJRlQgKyAxLCAxKSwKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMzIiwgIlBsYXliYWNrIiwgUENNMzE2OEFfREFDX09QX0ZMVCwKKwkJCVBDTTMxNjhBX0RBQ19PUEVEQV9TSElGVCArIDIsIDEpLAorCVNORF9TT0NfREFQTV9EQUMoIkRBQzQiLCAiUGxheWJhY2siLCBQQ00zMTY4QV9EQUNfT1BfRkxULAorCQkJUENNMzE2OEFfREFDX09QRURBX1NISUZUICsgMywgMSksCisKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJBT1VUMUwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJBT1VUMVIiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJBT1VUMkwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJBT1VUMlIiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJBT1VUM0wiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJBT1VUM1IiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJBT1VUNEwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJBT1VUNFIiKSwKKworCVNORF9TT0NfREFQTV9BREMoIkFEQzEiLCAiQ2FwdHVyZSIsIFBDTTMxNjhBX0FEQ19QV1JfSFBGQiwKKwkJCVBDTTMxNjhBX0FEQ19QU1ZBRF9TSElGVCwgMSksCisJU05EX1NPQ19EQVBNX0FEQygiQURDMiIsICJDYXB0dXJlIiwgUENNMzE2OEFfQURDX1BXUl9IUEZCLAorCQkJUENNMzE2OEFfQURDX1BTVkFEX1NISUZUICsgMSwgMSksCisJU05EX1NPQ19EQVBNX0FEQygiQURDMyIsICJDYXB0dXJlIiwgUENNMzE2OEFfQURDX1BXUl9IUEZCLAorCQkJUENNMzE2OEFfQURDX1BTVkFEX1NISUZUICsgMiwgMSksCisKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFJTjFMIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJBSU4xUiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlOMkwiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFJTjJSIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJBSU4zTCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlOM1IiKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgcGNtMzE2OGFfZGFwbV9yb3V0ZXNbXSA9IHsKKwkvKiBQbGF5YmFjayAqLworCXsgIkFPVVQxTCIsIE5VTEwsICJEQUMxIiB9LAorCXsgIkFPVVQxUiIsIE5VTEwsICJEQUMxIiB9LAorCisJeyAiQU9VVDJMIiwgTlVMTCwgIkRBQzIiIH0sCisJeyAiQU9VVDJSIiwgTlVMTCwgIkRBQzIiIH0sCisKKwl7ICJBT1VUM0wiLCBOVUxMLCAiREFDMyIgfSwKKwl7ICJBT1VUM1IiLCBOVUxMLCAiREFDMyIgfSwKKworCXsgIkFPVVQ0TCIsIE5VTEwsICJEQUM0IiB9LAorCXsgIkFPVVQ0UiIsIE5VTEwsICJEQUM0IiB9LAorCisJLyogQ2FwdHVyZSAqLworCXsgIkFEQzEiLCBOVUxMLCAiQUlOMUwiIH0sCisJeyAiQURDMSIsIE5VTEwsICJBSU4xUiIgfSwKKworCXsgIkFEQzIiLCBOVUxMLCAiQUlOMkwiIH0sCisJeyAiQURDMiIsIE5VTEwsICJBSU4yUiIgfSwKKworCXsgIkFEQzMiLCBOVUxMLCAiQUlOM0wiIH0sCisJeyAiQURDMyIsIE5VTEwsICJBSU4zUiIgfQorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBwY20zMTY4YV9zY2tpX3JhdGlvc1tdID0geworCTc2OCwKKwk1MTIsCisJMzg0LAorCTI1NiwKKwkxOTIsCisJMTI4Cit9OworCisjZGVmaW5lIFBDTTMxNjhBX05VTV9TQ0tJX1JBVElPU19EQUMJQVJSQVlfU0laRShwY20zMTY4YV9zY2tpX3JhdGlvcykKKyNkZWZpbmUgUENNMzE2OEFfTlVNX1NDS0lfUkFUSU9TX0FEQwkoQVJSQVlfU0laRShwY20zMTY4YV9zY2tpX3JhdGlvcykgLSAyKQorCisjZGVmaW5lIFBDTTEzNjhBX01BWF9TWVNDTEsJCTM2ODY0MDAwCisKK3N0YXRpYyBpbnQgcGNtMzE2OGFfcmVzZXQoc3RydWN0IHBjbTMxNjhhX3ByaXYgKnBjbTMxNjhhKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdtYXBfd3JpdGUocGNtMzE2OGEtPnJlZ21hcCwgUENNMzE2OEFfUlNUX1NNT0RFLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogSW50ZXJuYWwgcmVzZXQgaXMgZGUtYXNzZXJ0ZWQgYWZ0ZXIgMzg0NiBTQ0tJIGN5Y2xlcyAqLworCW1zbGVlcChESVZfUk9VTkRfVVAoMzg0NiAqIDEwMDAsIHBjbTMxNjhhLT5zeXNjbGspKTsKKworCXJldHVybiByZWdtYXBfd3JpdGUocGNtMzE2OGEtPnJlZ21hcCwgUENNMzE2OEFfUlNUX1NNT0RFLAorCQkJUENNMzE2OEFfTVJTVF9NQVNLIHwgUENNMzE2OEFfU1JTVF9NQVNLKTsKK30KKworc3RhdGljIGludCBwY20zMTY4YV9kaWdpdGFsX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHBjbTMxNjhhX3ByaXYgKnBjbTMxNjhhID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlyZWdtYXBfd3JpdGUocGNtMzE2OGEtPnJlZ21hcCwgUENNMzE2OEFfREFDX01VVEUsIG11dGUgPyAweGZmIDogMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY20zMTY4YV9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJCQkgIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBwY20zMTY4YV9wcml2ICpwY20zMTY4YSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoZGFpLT5jb2RlYyk7CisKKwlpZiAoZnJlcSA+IFBDTTEzNjhBX01BWF9TWVNDTEspCisJCXJldHVybiAtRUlOVkFMOworCisJcGNtMzE2OGEtPnN5c2NsayA9IGZyZXE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY20zMTY4YV9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LCBib29sIGRhYykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCBwY20zMTY4YV9wcml2ICpwY20zMTY4YSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXUzMiBmbXQsIHJlZywgbWFzaywgc2hpZnQ7CisJYm9vbCBtYXN0ZXJfbW9kZTsKKworCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJZm10ID0gUENNMzE2OEFfRk1UX0xFRlRfSjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWZtdCA9IFBDTTMxNjhBX0ZNVF9JMlM7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJZm10ID0gUENNMzE2OEFfRk1UX1JJR0hUX0o7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWZtdCA9IFBDTTMxNjhBX0ZNVF9EU1BfQTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJZm10ID0gUENNMzE2OEFfRk1UX0RTUF9COworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJ1bnN1cHBvcnRlZCBkYWkgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJbWFzdGVyX21vZGUgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQltYXN0ZXJfbW9kZSA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgInVuc3VwcG9ydGVkIG1hc3Rlci9zbGF2ZSBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkYWMpIHsKKwkJcmVnID0gUENNMzE2OEFfREFDX1BXUl9NU1RfRk1UOworCQltYXNrID0gUENNMzE2OEFfREFDX0ZNVF9NQVNLOworCQlzaGlmdCA9IFBDTTMxNjhBX0RBQ19GTVRfU0hJRlQ7CisJCXBjbTMxNjhhLT5kYWNfbWFzdGVyX21vZGUgPSBtYXN0ZXJfbW9kZTsKKwkJcGNtMzE2OGEtPmRhY19mbXQgPSBmbXQ7CisJfSBlbHNlIHsKKwkJcmVnID0gUENNMzE2OEFfQURDX01TVF9GTVQ7CisJCW1hc2sgPSBQQ00zMTY4QV9BRENfRk1UQURfTUFTSzsKKwkJc2hpZnQgPSBQQ00zMTY4QV9BRENfRk1UQURfU0hJRlQ7CisJCXBjbTMxNjhhLT5hZGNfbWFzdGVyX21vZGUgPSBtYXN0ZXJfbW9kZTsKKwkJcGNtMzE2OGEtPmFkY19mbXQgPSBmbXQ7CisJfQorCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBjbTMxNjhhLT5yZWdtYXAsIHJlZywgbWFzaywgZm10IDw8IHNoaWZ0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbTMxNjhhX3NldF9kYWlfZm10X2RhYyhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0KQoreworCXJldHVybiBwY20zMTY4YV9zZXRfZGFpX2ZtdChkYWksIGZvcm1hdCwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgcGNtMzE2OGFfc2V0X2RhaV9mbXRfYWRjKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQpCit7CisJcmV0dXJuIHBjbTMxNjhhX3NldF9kYWlfZm10KGRhaSwgZm9ybWF0LCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgcGNtMzE2OGFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgcGNtMzE2OGFfcHJpdiAqcGNtMzE2OGEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlib29sIHR4LCBtYXN0ZXJfbW9kZTsKKwl1MzIgdmFsLCBtYXNrLCBzaGlmdCwgcmVnOworCXVuc2lnbmVkIGludCByYXRlLCBjaGFubmVscywgZm10LCByYXRpbywgbWF4X3JhdGlvOworCWludCBpLCBtaW5fZnJhbWVfc2l6ZTsKKwlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdDsKKworCXJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWZvcm1hdCA9IHBhcmFtc19mb3JtYXQocGFyYW1zKTsKKwljaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCisJcmF0aW8gPSBwY20zMTY4YS0+c3lzY2xrIC8gcmF0ZTsKKworCXR4ID0gc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKKwlpZiAodHgpIHsKKwkJbWF4X3JhdGlvID0gUENNMzE2OEFfTlVNX1NDS0lfUkFUSU9TX0RBQzsKKwkJcmVnID0gUENNMzE2OEFfREFDX1BXUl9NU1RfRk1UOworCQltYXNrID0gUENNMzE2OEFfREFDX01TREFfTUFTSzsKKwkJc2hpZnQgPSBQQ00zMTY4QV9EQUNfTVNEQV9TSElGVDsKKwkJbWFzdGVyX21vZGUgPSBwY20zMTY4YS0+ZGFjX21hc3Rlcl9tb2RlOworCQlmbXQgPSBwY20zMTY4YS0+ZGFjX2ZtdDsKKwl9IGVsc2UgeworCQltYXhfcmF0aW8gPSBQQ00zMTY4QV9OVU1fU0NLSV9SQVRJT1NfQURDOworCQlyZWcgPSBQQ00zMTY4QV9BRENfTVNUX0ZNVDsKKwkJbWFzayA9IFBDTTMxNjhBX0FEQ19NU0FEX01BU0s7CisJCXNoaWZ0ID0gUENNMzE2OEFfQURDX01TQURfU0hJRlQ7CisJCW1hc3Rlcl9tb2RlID0gcGNtMzE2OGEtPmFkY19tYXN0ZXJfbW9kZTsKKwkJZm10ID0gcGNtMzE2OGEtPmFkY19mbXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG1heF9yYXRpbzsgaSsrKSB7CisJCWlmIChwY20zMTY4YV9zY2tpX3JhdGlvc1tpXSA9PSByYXRpbykKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IG1heF9yYXRpbykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJ1bnN1cHBvcnRlZCBzeXNjbGsgcmF0aW9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltaW5fZnJhbWVfc2l6ZSA9IHBhcmFtc193aWR0aChwYXJhbXMpICogMjsKKwlzd2l0Y2ggKG1pbl9mcmFtZV9zaXplKSB7CisJY2FzZSAzMjoKKwkJaWYgKG1hc3Rlcl9tb2RlIHx8IChmbXQgIT0gUENNMzE2OEFfRk1UX1JJR0hUX0opKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICIzMi1iaXQgZnJhbWVzIGFyZSBzdXBwb3J0ZWQgb25seSBmb3Igc2xhdmUgbW9kZSB1c2luZyByaWdodCBqdXN0aWZpZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZm10ID0gUENNMzE2OEFfRk1UX1JJR0hUX0pfMTY7CisJCWJyZWFrOworCWNhc2UgNDg6CisJCWlmIChtYXN0ZXJfbW9kZSB8fCAoZm10ICYgUENNMzE2OEFfRk1UX0RTUF9NQVNLKSkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiNDgtYml0IGZyYW1lcyBub3Qgc3VwcG9ydGVkIGluIG1hc3RlciBtb2RlLCBvciBzbGF2ZSBtb2RlIHVzaW5nIERTUFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIDY0OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJ1bnN1cHBvcnRlZCBmcmFtZSBzaXplOiAlZFxuIiwgbWluX2ZyYW1lX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobWFzdGVyX21vZGUpCisJCXZhbCA9ICgoaSArIDEpIDw8IHNoaWZ0KTsKKwllbHNlCisJCXZhbCA9IDA7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGNtMzE2OGEtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWwpOworCisJaWYgKHR4KSB7CisJCW1hc2sgPSBQQ00zMTY4QV9EQUNfRk1UX01BU0s7CisJCXNoaWZ0ID0gUENNMzE2OEFfREFDX0ZNVF9TSElGVDsKKwl9IGVsc2UgeworCQltYXNrID0gUENNMzE2OEFfQURDX0ZNVEFEX01BU0s7CisJCXNoaWZ0ID0gUENNMzE2OEFfQURDX0ZNVEFEX1NISUZUOworCX0KKworCXJlZ21hcF91cGRhdGVfYml0cyhwY20zMTY4YS0+cmVnbWFwLCByZWcsIG1hc2ssIGZtdCA8PCBzaGlmdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcGNtMzE2OGFfZGFjX2RhaV9vcHMgPSB7CisJLnNldF9mbXQJPSBwY20zMTY4YV9zZXRfZGFpX2ZtdF9kYWMsCisJLnNldF9zeXNjbGsJPSBwY20zMTY4YV9zZXRfZGFpX3N5c2NsaywKKwkuaHdfcGFyYW1zCT0gcGNtMzE2OGFfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUJPSBwY20zMTY4YV9kaWdpdGFsX211dGUKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHBjbTMxNjhhX2FkY19kYWlfb3BzID0geworCS5zZXRfZm10CT0gcGNtMzE2OGFfc2V0X2RhaV9mbXRfYWRjLAorCS5zZXRfc3lzY2xrCT0gcGNtMzE2OGFfc2V0X2RhaV9zeXNjbGssCisJLmh3X3BhcmFtcwk9IHBjbTMxNjhhX2h3X3BhcmFtcworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgcGNtMzE2OGFfZGFpc1tdID0geworCXsKKwkJLm5hbWUgPSAicGNtMzE2OGEtZGFjIiwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDgsCisJCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKKwkJCS5mb3JtYXRzID0gUENNMzE2OEFfRk9STUFUUworCQl9LAorCQkub3BzID0gJnBjbTMxNjhhX2RhY19kYWlfb3BzCisJfSwKKwl7CisJCS5uYW1lID0gInBjbTMxNjhhLWFkYyIsCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gNiwKKwkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCQkuZm9ybWF0cyA9IFBDTTMxNjhBX0ZPUk1BVFMKKwkJfSwKKwkJLm9wcyA9ICZwY20zMTY4YV9hZGNfZGFpX29wcworCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19kZWZhdWx0IHBjbTMxNjhhX3JlZ19kZWZhdWx0W10gPSB7CisJeyBQQ00zMTY4QV9SU1RfU01PREUsIFBDTTMxNjhBX01SU1RfTUFTSyB8IFBDTTMxNjhBX1NSU1RfTUFTSyB9LAorCXsgUENNMzE2OEFfREFDX1BXUl9NU1RfRk1ULCAweDAwIH0sCisJeyBQQ00zMTY4QV9EQUNfT1BfRkxULCAweDAwIH0sCisJeyBQQ00zMTY4QV9EQUNfSU5WLCAweDAwIH0sCisJeyBQQ00zMTY4QV9EQUNfTVVURSwgMHgwMCB9LAorCXsgUENNMzE2OEFfREFDX1pFUk8sIDB4MDAgfSwKKwl7IFBDTTMxNjhBX0RBQ19BVFRfREVNUF9aRiwgMHgwMCB9LAorCXsgUENNMzE2OEFfREFDX1ZPTF9NQVNURVIsIDB4ZmYgfSwKKwl7IFBDTTMxNjhBX0RBQ19WT0xfQ0hBTl9TVEFSVCwgMHhmZiB9LAorCXsgUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUICsgMSwgMHhmZiB9LAorCXsgUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUICsgMiwgMHhmZiB9LAorCXsgUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUICsgMywgMHhmZiB9LAorCXsgUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUICsgNCwgMHhmZiB9LAorCXsgUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUICsgNSwgMHhmZiB9LAorCXsgUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUICsgNiwgMHhmZiB9LAorCXsgUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUICsgNywgMHhmZiB9LAorCXsgUENNMzE2OEFfQURDX1NNT0RFLCAweDAwIH0sCisJeyBQQ00zMTY4QV9BRENfTVNUX0ZNVCwgMHgwMCB9LAorCXsgUENNMzE2OEFfQURDX1BXUl9IUEZCLCAweDAwIH0sCisJeyBQQ00zMTY4QV9BRENfU0VBRCwgMHgwMCB9LAorCXsgUENNMzE2OEFfQURDX0lOViwgMHgwMCB9LAorCXsgUENNMzE2OEFfQURDX01VVEUsIDB4MDAgfSwKKwl7IFBDTTMxNjhBX0FEQ19PViwgMHgwMCB9LAorCXsgUENNMzE2OEFfQURDX0FUVF9PVkYsIDB4MDAgfSwKKwl7IFBDTTMxNjhBX0FEQ19WT0xfTUFTVEVSLCAweGQzIH0sCisJeyBQQ00zMTY4QV9BRENfVk9MX0NIQU5fU1RBUlQsIDB4ZDMgfSwKKwl7IFBDTTMxNjhBX0FEQ19WT0xfQ0hBTl9TVEFSVCArIDEsIDB4ZDMgfSwKKwl7IFBDTTMxNjhBX0FEQ19WT0xfQ0hBTl9TVEFSVCArIDIsIDB4ZDMgfSwKKwl7IFBDTTMxNjhBX0FEQ19WT0xfQ0hBTl9TVEFSVCArIDMsIDB4ZDMgfSwKKwl7IFBDTTMxNjhBX0FEQ19WT0xfQ0hBTl9TVEFSVCArIDQsIDB4ZDMgfSwKKwl7IFBDTTMxNjhBX0FEQ19WT0xfQ0hBTl9TVEFSVCArIDUsIDB4ZDMgfQorfTsKKworc3RhdGljIGJvb2wgcGNtMzE2OGFfcmVhZGFibGVfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCWlmIChyZWcgPj0gUENNMzE2OEFfUlNUX1NNT0RFKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgcGNtMzE2OGFfdm9sYXRpbGVfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBQQ00zMTY4QV9EQUNfWkVSTzoKKwljYXNlIFBDTTMxNjhBX0FEQ19PVjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGJvb2wgcGNtMzE2OGFfd3JpdGVhYmxlX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlpZiAocmVnIDwgUENNMzE2OEFfUlNUX1NNT0RFKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUENNMzE2OEFfREFDX1pFUk86CisJY2FzZSBQQ00zMTY4QV9BRENfT1Y6CisJCXJldHVybiBmYWxzZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CisKK2NvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHBjbTMxNjhhX3JlZ21hcCA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisKKwkubWF4X3JlZ2lzdGVyID0gUENNMzE2OEFfQURDX1ZPTF9DSEFOX1NUQVJUICsgNSwKKwkucmVnX2RlZmF1bHRzID0gcGNtMzE2OGFfcmVnX2RlZmF1bHQsCisJLm51bV9yZWdfZGVmYXVsdHMgPSBBUlJBWV9TSVpFKHBjbTMxNjhhX3JlZ19kZWZhdWx0KSwKKwkucmVhZGFibGVfcmVnID0gcGNtMzE2OGFfcmVhZGFibGVfcmVnaXN0ZXIsCisJLnZvbGF0aWxlX3JlZyA9IHBjbTMxNjhhX3ZvbGF0aWxlX3JlZ2lzdGVyLAorCS53cml0ZWFibGVfcmVnID0gcGNtMzE2OGFfd3JpdGVhYmxlX3JlZ2lzdGVyLAorCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfRkxBVAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBjbTMxNjhhX3JlZ21hcCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgcGNtMzE2OGFfZHJpdmVyID0geworCS5pZGxlX2JpYXNfb2ZmID0gdHJ1ZSwKKwkuY29udHJvbHMgPSBwY20zMTY4YV9zbmRfY29udHJvbHMsCisJLm51bV9jb250cm9scyA9IEFSUkFZX1NJWkUocGNtMzE2OGFfc25kX2NvbnRyb2xzKSwKKwkuZGFwbV93aWRnZXRzID0gcGNtMzE2OGFfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShwY20zMTY4YV9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IHBjbTMxNjhhX2RhcG1fcm91dGVzLAorCS5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKHBjbTMxNjhhX2RhcG1fcm91dGVzKQorfTsKKworaW50IHBjbTMxNjhhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlZ21hcCAqcmVnbWFwKQoreworCXN0cnVjdCBwY20zMTY4YV9wcml2ICpwY20zMTY4YTsKKwlpbnQgcmV0LCBpOworCisJcGNtMzE2OGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBjbTMxNjhhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBjbTMxNjhhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgcGNtMzE2OGEpOworCisJcGNtMzE2OGEtPnNja2kgPSBkZXZtX2Nsa19nZXQoZGV2LCAic2NraSIpOworCWlmIChJU19FUlIocGNtMzE2OGEtPnNja2kpKSB7CisJCXJldCA9IFBUUl9FUlIocGNtMzE2OGEtPnNja2kpOworCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhY3F1aXJlIGNsb2NrICdzY2tpJzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBjbTMxNjhhLT5zY2tpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBtY2xrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwY20zMTY4YS0+c3lzY2xrID0gY2xrX2dldF9yYXRlKHBjbTMxNjhhLT5zY2tpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjbTMxNjhhLT5zdXBwbGllcyk7IGkrKykKKwkJcGNtMzE2OGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHBjbTMxNjhhX3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGRldiwKKwkJCUFSUkFZX1NJWkUocGNtMzE2OGEtPnN1cHBsaWVzKSwgcGNtMzE2OGEtPnN1cHBsaWVzKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jbGs7CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUocGNtMzE2OGEtPnN1cHBsaWVzKSwKKwkJCQkgICAgcGNtMzE2OGEtPnN1cHBsaWVzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NsazsKKwl9CisKKwlwY20zMTY4YS0+cmVnbWFwID0gcmVnbWFwOworCWlmIChJU19FUlIocGNtMzE2OGEtPnJlZ21hcCkpIHsKKwkJcmV0ID0gUFRSX0VSUihwY20zMTY4YS0+cmVnbWFwKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgcmVnbWFwOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVndWxhdG9yOworCX0KKworCXJldCA9IHBjbTMxNjhhX3Jlc2V0KHBjbTMxNjhhKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlc2V0IGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ3VsYXRvcjsKKwl9CisKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2KTsKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCXBtX3J1bnRpbWVfaWRsZShkZXYpOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhkZXYsICZwY20zMTY4YV9kcml2ZXIsIHBjbTMxNjhhX2RhaXMsCisJCQlBUlJBWV9TSVpFKHBjbTMxNjhhX2RhaXMpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVndWxhdG9yOworCX0KKworCXJldHVybiAwOworCitlcnJfcmVndWxhdG9yOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShwY20zMTY4YS0+c3VwcGxpZXMpLAorCQkJcGNtMzE2OGEtPnN1cHBsaWVzKTsKK2Vycl9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBjbTMxNjhhLT5zY2tpKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY20zMTY4YV9wcm9iZSk7CisKK3ZvaWQgcGNtMzE2OGFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNtMzE2OGFfcHJpdiAqcGNtMzE2OGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhkZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShwY20zMTY4YS0+c3VwcGxpZXMpLAorCQkJCXBjbTMxNjhhLT5zdXBwbGllcyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBjbTMxNjhhLT5zY2tpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjbTMxNjhhX3JlbW92ZSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcGNtMzE2OGFfcnRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNtMzE2OGFfcHJpdiAqcGNtMzE2OGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBjbTMxNjhhLT5zY2tpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBtY2xrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShwY20zMTY4YS0+c3VwcGxpZXMpLAorCQkJCSAgICBwY20zMTY4YS0+c3VwcGxpZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY2xrOworCX0KKworCXJldCA9IHBjbTMxNjhhX3Jlc2V0KHBjbTMxNjhhKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlc2V0IGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ3VsYXRvcjsKKwl9CisKKwlyZWdjYWNoZV9jYWNoZV9vbmx5KHBjbTMxNjhhLT5yZWdtYXAsIGZhbHNlKTsKKworCXJlZ2NhY2hlX21hcmtfZGlydHkocGNtMzE2OGEtPnJlZ21hcCk7CisKKwlyZXQgPSByZWdjYWNoZV9zeW5jKHBjbTMxNjhhLT5yZWdtYXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc3luYyByZWdtYXA6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9yZWd1bGF0b3I7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZWd1bGF0b3I6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHBjbTMxNjhhLT5zdXBwbGllcyksCisJCQkgICAgICAgcGNtMzE2OGEtPnN1cHBsaWVzKTsKK2Vycl9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBjbTMxNjhhLT5zY2tpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGNtMzE2OGFfcnRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjbTMxNjhhX3ByaXYgKnBjbTMxNjhhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZWdjYWNoZV9jYWNoZV9vbmx5KHBjbTMxNjhhLT5yZWdtYXAsIHRydWUpOworCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHBjbTMxNjhhLT5zdXBwbGllcyksCisJCQkgICAgICAgcGNtMzE2OGEtPnN1cHBsaWVzKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwY20zMTY4YS0+c2NraSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwY20zMTY4YV9wbV9vcHMgPSB7CisJU0VUX1JVTlRJTUVfUE1fT1BTKHBjbTMxNjhhX3J0X3N1c3BlbmQsIHBjbTMxNjhhX3J0X3Jlc3VtZSwgTlVMTCkKK307CitFWFBPUlRfU1lNQk9MX0dQTChwY20zMTY4YV9wbV9vcHMpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBDTTMxNjhBIGNvZGVjIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRGFtaWVuIEhvcnNsZXkgPERhbWllbi5Ib3JzbGV5QGltZ3RlYy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3BjbTMxNjhhLmggYi9zb3VuZC9zb2MvY29kZWNzL3BjbTMxNjhhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjODMzMgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzE2OGEuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIFBDTTMxNjhBIGNvZGVjIGRyaXZlciBoZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBBdXRob3I6IERhbWllbiBIb3JzbGV5IDxEYW1pZW4uSG9yc2xleUBpbWd0ZWMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fUENNMzE2OEFfSF9fCisjZGVmaW5lIF9fUENNMzE2OEFfSF9fCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwY20zMTY4YV9wbV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcGNtMzE2OGFfcmVnbWFwOworCitleHRlcm4gaW50IHBjbTMxNjhhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlZ21hcCAqcmVnbWFwKTsKK2V4dGVybiB2b2lkIHBjbTMxNjhhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisjZGVmaW5lIFBDTTMxNjhBX1JTVF9TTU9ERQkJCTB4NDAKKyNkZWZpbmUgUENNMzE2OEFfTVJTVF9NQVNLCQkJMHg4MAorI2RlZmluZSBQQ00zMTY4QV9TUlNUX01BU0sJCQkweDQwCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19TUkRBX1NISUZUCQkJMAorI2RlZmluZSBQQ00zMTY4QV9EQUNfU1JEQV9NQVNLCQkJMHgzCisKKyNkZWZpbmUgUENNMzE2OEFfREFDX1BXUl9NU1RfRk1UCQkweDQxCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19QU01EQV9TSElGVAkJNworI2RlZmluZSBQQ00zMTY4QV9EQUNfUFNNREFfTUFTSwkJCTB4ODAKKyNkZWZpbmUgUENNMzE2OEFfREFDX01TREFfU0hJRlQJCQk0CisjZGVmaW5lIFBDTTMxNjhBX0RBQ19NU0RBX01BU0sJCQkweDcwCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19GTVRfU0hJRlQJCQkwCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19GTVRfTUFTSwkJCTB4ZgorCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19PUF9GTFQJCQkweDQyCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19PUEVEQV9TSElGVAkJNAorI2RlZmluZSBQQ00zMTY4QV9EQUNfT1BFREFfTUFTSwkJCTB4ZjAKKyNkZWZpbmUgUENNMzE2OEFfREFDX0ZMVF9TSElGVAkJCTAKKyNkZWZpbmUgUENNMzE2OEFfREFDX0ZMVF9NQVNLCQkJMHhmCisKKyNkZWZpbmUgUENNMzE2OEFfREFDX0lOVgkJCTB4NDMKKworI2RlZmluZSBQQ00zMTY4QV9EQUNfTVVURQkJCTB4NDQKKworI2RlZmluZSBQQ00zMTY4QV9EQUNfWkVSTwkJCTB4NDUKKworI2RlZmluZSBQQ00zMTY4QV9EQUNfQVRUX0RFTVBfWkYJCTB4NDYKKyNkZWZpbmUgUENNMzE2OEFfREFDX0FUTUREQV9NQVNLCQkweDgwCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19BVE1EREFfU0hJRlQJCTcKKyNkZWZpbmUgUENNMzE2OEFfREFDX0FUU1BEQV9NQVNLCQkweDQwCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19BVFNQREFfU0hJRlQJCTYKKyNkZWZpbmUgUENNMzE2OEFfREFDX0RFTVBfU0hJRlQJCQk0CisjZGVmaW5lIFBDTTMxNjhBX0RBQ19ERU1QX01BU0sJCQkweDMwCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19BWlJPX1NISUZUCQkJMQorI2RlZmluZSBQQ00zMTY4QV9EQUNfQVpST19NQVNLCQkJMHhlCisjZGVmaW5lIFBDTTMxNjhBX0RBQ19aUkVWX01BU0sJCQkweDEKKyNkZWZpbmUgUENNMzE2OEFfREFDX1pSRVZfU0hJRlQJCQkwCisKKyNkZWZpbmUgUENNMzE2OEFfREFDX1ZPTF9NQVNURVIJCQkweDQ3CisKKyNkZWZpbmUgUENNMzE2OEFfREFDX1ZPTF9DSEFOX1NUQVJUCQkweDQ4CisKKyNkZWZpbmUgUENNMzE2OEFfQURDX1NNT0RFCQkJMHg1MAorI2RlZmluZSBQQ00zMTY4QV9BRENfU1JBRF9TSElGVAkJCTAKKyNkZWZpbmUgUENNMzE2OEFfQURDX1NSQURfTUFTSwkJCTB4MworCisjZGVmaW5lIFBDTTMxNjhBX0FEQ19NU1RfRk1UCQkJMHg1MQorI2RlZmluZSBQQ00zMTY4QV9BRENfTVNBRF9TSElGVAkJCTQKKyNkZWZpbmUgUENNMzE2OEFfQURDX01TQURfTUFTSwkJCTB4NzAKKyNkZWZpbmUgUENNMzE2OEFfQURDX0ZNVEFEX1NISUZUCQkwCisjZGVmaW5lIFBDTTMxNjhBX0FEQ19GTVRBRF9NQVNLCQkJMHg3CisKKyNkZWZpbmUgUENNMzE2OEFfQURDX1BXUl9IUEZCCQkJMHg1MgorI2RlZmluZSBQQ00zMTY4QV9BRENfUFNWQURfU0hJRlQJCTQKKyNkZWZpbmUgUENNMzE2OEFfQURDX1BTVkFEX01BU0sJCQkweDcwCisjZGVmaW5lIFBDTTMxNjhBX0FEQ19CWVBfU0hJRlQJCQkwCisjZGVmaW5lIFBDTTMxNjhBX0FEQ19CWVBfTUFTSwkJCTB4NworCisjZGVmaW5lIFBDTTMxNjhBX0FEQ19TRUFECQkJMHg1MworCisjZGVmaW5lIFBDTTMxNjhBX0FEQ19JTlYJCQkweDU0CisKKyNkZWZpbmUgUENNMzE2OEFfQURDX01VVEUJCQkweDU1CisKKyNkZWZpbmUgUENNMzE2OEFfQURDX09WCQkJCTB4NTYKKworI2RlZmluZSBQQ00zMTY4QV9BRENfQVRUX09WRgkJCTB4NTcKKyNkZWZpbmUgUENNMzE2OEFfQURDX0FUTURBRF9NQVNLCQkweDgwCisjZGVmaW5lIFBDTTMxNjhBX0FEQ19BVE1EQURfU0hJRlQJCTcKKyNkZWZpbmUgUENNMzE2OEFfQURDX0FUU1BBRF9NQVNLCQkweDQwCisjZGVmaW5lIFBDTTMxNjhBX0FEQ19BVFNQQURfU0hJRlQJCTYKKyNkZWZpbmUgUENNMzE2OEFfQURDX09WRlBfTUFTSwkJCTB4MQorI2RlZmluZSBQQ00zMTY4QV9BRENfT1ZGUF9TSElGVAkJCTAKKworI2RlZmluZSBQQ00zMTY4QV9BRENfVk9MX01BU1RFUgkJCTB4NTgKKworI2RlZmluZSBQQ00zMTY4QV9BRENfVk9MX0NIQU5fU1RBUlQJCTB4NTkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3JsNjIzMS5jIGIvc291bmQvc29jL2NvZGVjcy9ybDYyMzEuYwppbmRleCBhY2E0NzlmLi4xZGM2OGFiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3JsNjIzMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvcmw2MjMxLmMKQEAgLTgwLDggKzgwLDEwIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGl2KTsgaSsrKSB7Ci0JCS8qIGZpbmQgZGl2aWRlciB0aGF0IGdpdmVzIERNSUMgZnJlcXVlbmN5IGJlbG93IDNNSHogKi8KLQkJaWYgKDMwMDAwMDAgKiBkaXZbaV0gPj0gcmF0ZSkKKwkJaWYgKChkaXZbaV0gJSAzKSA9PSAwKQorCQkJY29udGludWU7CisJCS8qIGZpbmQgZGl2aWRlciB0aGF0IGdpdmVzIERNSUMgZnJlcXVlbmN5IGJlbG93IDMuMDcyTUh6ICovCisJCWlmICgzMDcyMDAwICogZGl2W2ldID49IHJhdGUpCiAJCQlyZXR1cm4gaTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQyODYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQyODYuYwppbmRleCBhZjJlZDc3Li5iYzA4ZjBjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3J0Mjg2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDI4Ni5jCkBAIC0xMTE0LDYgKzExMTQsMTIgQEAKIAkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIldpbHNvbiBCZWFjaCBTRFMiKQogCQl9CiAJfSwKKwl7CisJCS5pZGVudCA9ICJJbnRlbCBTa3lsYWtlIFJWUCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTa3lsYWtlIENsaWVudCBwbGF0Zm9ybSIpCisJCX0KKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDI5OC5jIGIvc291bmQvc29jL2NvZGVjcy9ydDI5OC5jCmluZGV4IGIzZjc5NWMuLjMwYzZkZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQyOTguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3J0Mjk4LmMKQEAgLTg1NSw4ICs4NTUsNiBAQAogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAogCQkJUlQyOThfSTJTX0NUUkwyLCAweDAxMDAsIDB4MDEwMCk7CiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCi0JCQlSVDI5OF9QTExfQ1RSTCwgMHg0LCAweDQpOwotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAogCQkJUlQyOThfUExMX0NUUkwxLCAweDIwLCAweDApOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDU2MTYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxMGQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjE2LmMKQEAgLTAsMCArMSwxMzgxIEBACisvKgorICogcnQ1NjE2LmMgIC0tICBSVDU2MTYgQUxTQSBTb0MgYXVkaW8gY29kZWMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTUgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBdXRob3I6IEJhcmQgTGlhbyA8YmFyZGxpYW9AcmVhbHRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAicmw2MjMxLmgiCisjaW5jbHVkZSAicnQ1NjE2LmgiCisKKyNkZWZpbmUgUlQ1NjE2X1BSX1JBTkdFX0JBU0UgKDB4ZmYgKyAxKQorI2RlZmluZSBSVDU2MTZfUFJfU1BBQ0lORyAweDEwMAorCisjZGVmaW5lIFJUNTYxNl9QUl9CQVNFIChSVDU2MTZfUFJfUkFOR0VfQkFTRSArICgwICogUlQ1NjE2X1BSX1NQQUNJTkcpKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9yYW5nZV9jZmcgcnQ1NjE2X3Jhbmdlc1tdID0geworCXsKKwkJLm5hbWUgPSAiUFIiLAorCQkucmFuZ2VfbWluID0gUlQ1NjE2X1BSX0JBU0UsCisJCS5yYW5nZV9tYXggPSBSVDU2MTZfUFJfQkFTRSArIDB4ZjgsCisJCS5zZWxlY3Rvcl9yZWcgPSBSVDU2MTZfUFJJVl9JTkRFWCwKKwkJLnNlbGVjdG9yX21hc2sgPSAweGZmLAorCQkuc2VsZWN0b3Jfc2hpZnQgPSAweDAsCisJCS53aW5kb3dfc3RhcnQgPSBSVDU2MTZfUFJJVl9EQVRBLAorCQkud2luZG93X2xlbiA9IDB4MSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfc2VxdWVuY2UgaW5pdF9saXN0W10gPSB7CisJe1JUNTYxNl9QUl9CQVNFICsgMHgzZCwJMHgzZTAwfSwKKwl7UlQ1NjE2X1BSX0JBU0UgKyAweDI1LAkweDYxMTB9LAorCXtSVDU2MTZfUFJfQkFTRSArIDB4MjAsCTB4NjExZn0sCisJe1JUNTYxNl9QUl9CQVNFICsgMHgyMSwJMHg0MDQwfSwKKwl7UlQ1NjE2X1BSX0JBU0UgKyAweDIzLAkweDAwMDR9LAorfTsKKyNkZWZpbmUgUlQ1NjE2X0lOSVRfUkVHX0xFTiBBUlJBWV9TSVpFKGluaXRfbGlzdCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfZGVmYXVsdCBydDU2MTZfcmVnW10gPSB7CisJeyAweDAwLCAweDAwMjEgfSwKKwl7IDB4MDIsIDB4YzhjOCB9LAorCXsgMHgwMywgMHhjOGM4IH0sCisJeyAweDA1LCAweDAwMDAgfSwKKwl7IDB4MGQsIDB4MDAwMCB9LAorCXsgMHgwZiwgMHgwODA4IH0sCisJeyAweDE5LCAweGFmYWYgfSwKKwl7IDB4MWMsIDB4MmYyZiB9LAorCXsgMHgxZSwgMHgwMDAwIH0sCisJeyAweDI3LCAweDc4NjAgfSwKKwl7IDB4MjksIDB4ODA4MCB9LAorCXsgMHgyYSwgMHg1MjUyIH0sCisJeyAweDNiLCAweDAwMDAgfSwKKwl7IDB4M2MsIDB4MDA2ZiB9LAorCXsgMHgzZCwgMHgwMDAwIH0sCisJeyAweDNlLCAweDAwNmYgfSwKKwl7IDB4NDUsIDB4NjAwMCB9LAorCXsgMHg0ZCwgMHgwMDAwIH0sCisJeyAweDRlLCAweDAwMDAgfSwKKwl7IDB4NGYsIDB4MDI3OSB9LAorCXsgMHg1MCwgMHgwMDAwIH0sCisJeyAweDUxLCAweDAwMDAgfSwKKwl7IDB4NTIsIDB4MDI3OSB9LAorCXsgMHg1MywgMHhmMDAwIH0sCisJeyAweDYxLCAweDAwMDAgfSwKKwl7IDB4NjIsIDB4MDAwMCB9LAorCXsgMHg2MywgMHgwMGMwIH0sCisJeyAweDY0LCAweDAwMDAgfSwKKwl7IDB4NjUsIDB4MDAwMCB9LAorCXsgMHg2NiwgMHgwMDAwIH0sCisJeyAweDcwLCAweDgwMDAgfSwKKwl7IDB4NzMsIDB4MTEwNCB9LAorCXsgMHg3NCwgMHgwYzAwIH0sCisJeyAweDgwLCAweDAwMDAgfSwKKwl7IDB4ODEsIDB4MDAwMCB9LAorCXsgMHg4MiwgMHgwMDAwIH0sCisJeyAweDhiLCAweDA2MDAgfSwKKwl7IDB4OGUsIDB4MDAwNCB9LAorCXsgMHg4ZiwgMHgxMTAwIH0sCisJeyAweDkwLCAweDAwMDAgfSwKKwl7IDB4OTEsIDB4MDAwMCB9LAorCXsgMHg5MiwgMHgwMDAwIH0sCisJeyAweDkzLCAweDIwMDAgfSwKKwl7IDB4OTQsIDB4MDIwMCB9LAorCXsgMHg5NSwgMHgwMDAwIH0sCisJeyAweGIwLCAweDIwODAgfSwKKwl7IDB4YjEsIDB4MDAwMCB9LAorCXsgMHhiMiwgMHgwMDAwIH0sCisJeyAweGI0LCAweDIyMDYgfSwKKwl7IDB4YjUsIDB4MWYwMCB9LAorCXsgMHhiNiwgMHgwMDAwIH0sCisJeyAweGI3LCAweDAwMDAgfSwKKwl7IDB4YmIsIDB4MDAwMCB9LAorCXsgMHhiYywgMHgwMDAwIH0sCisJeyAweGJkLCAweDAwMDAgfSwKKwl7IDB4YmUsIDB4MDAwMCB9LAorCXsgMHhiZiwgMHgwMDAwIH0sCisJeyAweGMwLCAweDAxMDAgfSwKKwl7IDB4YzEsIDB4MDAwMCB9LAorCXsgMHhjMiwgMHgwMDAwIH0sCisJeyAweGM4LCAweDAwMDAgfSwKKwl7IDB4YzksIDB4MDAwMCB9LAorCXsgMHhjYSwgMHgwMDAwIH0sCisJeyAweGNiLCAweDAwMDAgfSwKKwl7IDB4Y2MsIDB4MDAwMCB9LAorCXsgMHhjZCwgMHgwMDAwIH0sCisJeyAweGNlLCAweDAwMDAgfSwKKwl7IDB4Y2YsIDB4MDAxMyB9LAorCXsgMHhkMCwgMHgwNjgwIH0sCisJeyAweGQxLCAweDFjMTcgfSwKKwl7IDB4ZDMsIDB4YjMyMCB9LAorCXsgMHhkNCwgMHgwMDAwIH0sCisJeyAweGQ2LCAweDAwMDAgfSwKKwl7IDB4ZDcsIDB4MDAwMCB9LAorCXsgMHhkOSwgMHgwODA5IH0sCisJeyAweGRhLCAweDAwMDAgfSwKKwl7IDB4ZmEsIDB4MDAxMCB9LAorCXsgMHhmYiwgMHgwMDAwIH0sCisJeyAweGZjLCAweDAwMDAgfSwKKwl7IDB4ZmUsIDB4MTBlYyB9LAorCXsgMHhmZiwgMHg2MjgxIH0sCit9OworCitzdHJ1Y3QgcnQ1NjE2X3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHBhdGNoX3dvcms7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCisJaW50IHN5c2NsazsKKwlpbnQgc3lzY2xrX3NyYzsKKwlpbnQgbHJja1tSVDU2MTZfQUlGU107CisJaW50IGJjbGtbUlQ1NjE2X0FJRlNdOworCWludCBtYXN0ZXJbUlQ1NjE2X0FJRlNdOworCisJaW50IHBsbF9zcmM7CisJaW50IHBsbF9pbjsKKwlpbnQgcGxsX291dDsKKworfTsKKworc3RhdGljIGJvb2wgcnQ1NjE2X3ZvbGF0aWxlX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0NTYxNl9yYW5nZXMpOyBpKyspIHsKKwkJaWYgKHJlZyA+PSBydDU2MTZfcmFuZ2VzW2ldLnJhbmdlX21pbiAmJgorCQkJcmVnIDw9IHJ0NTYxNl9yYW5nZXNbaV0ucmFuZ2VfbWF4KSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBSVDU2MTZfUkVTRVQ6CisJY2FzZSBSVDU2MTZfUFJJVl9EQVRBOgorCWNhc2UgUlQ1NjE2X0VRX0NUUkwxOgorCWNhc2UgUlQ1NjE2X0RSQ19BR0NfMToKKwljYXNlIFJUNTYxNl9JUlFfQ1RSTDI6CisJY2FzZSBSVDU2MTZfSU5UX0lSUV9TVDoKKwljYXNlIFJUNTYxNl9QR01fUkVHX0FSUjE6CisJY2FzZSBSVDU2MTZfUEdNX1JFR19BUlIzOgorCWNhc2UgUlQ1NjE2X1ZFTkRPUl9JRDoKKwljYXNlIFJUNTYxNl9ERVZJQ0VfSUQ6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIHJ0NTYxNl9yZWFkYWJsZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShydDU2MTZfcmFuZ2VzKTsgaSsrKSB7CisJCWlmIChyZWcgPj0gcnQ1NjE2X3Jhbmdlc1tpXS5yYW5nZV9taW4gJiYKKwkJCXJlZyA8PSBydDU2MTZfcmFuZ2VzW2ldLnJhbmdlX21heCkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUlQ1NjE2X1JFU0VUOgorCWNhc2UgUlQ1NjE2X1ZFUlNJT05fSUQ6CisJY2FzZSBSVDU2MTZfVkVORE9SX0lEOgorCWNhc2UgUlQ1NjE2X0RFVklDRV9JRDoKKwljYXNlIFJUNTYxNl9IUF9WT0w6CisJY2FzZSBSVDU2MTZfTE9VVF9DVFJMMToKKwljYXNlIFJUNTYxNl9MT1VUX0NUUkwyOgorCWNhc2UgUlQ1NjE2X0lOMV9JTjI6CisJY2FzZSBSVDU2MTZfSU5MMV9JTlIxX1ZPTDoKKwljYXNlIFJUNTYxNl9EQUMxX0RJR19WT0w6CisJY2FzZSBSVDU2MTZfQURDX0RJR19WT0w6CisJY2FzZSBSVDU2MTZfQURDX0JTVF9WT0w6CisJY2FzZSBSVDU2MTZfU1RPMV9BRENfTUlYRVI6CisJY2FzZSBSVDU2MTZfQURfREFfTUlYRVI6CisJY2FzZSBSVDU2MTZfU1RPX0RBQ19NSVhFUjoKKwljYXNlIFJUNTYxNl9SRUNfTDFfTUlYRVI6CisJY2FzZSBSVDU2MTZfUkVDX0wyX01JWEVSOgorCWNhc2UgUlQ1NjE2X1JFQ19SMV9NSVhFUjoKKwljYXNlIFJUNTYxNl9SRUNfUjJfTUlYRVI6CisJY2FzZSBSVDU2MTZfSFBPX01JWEVSOgorCWNhc2UgUlQ1NjE2X09VVF9MMV9NSVhFUjoKKwljYXNlIFJUNTYxNl9PVVRfTDJfTUlYRVI6CisJY2FzZSBSVDU2MTZfT1VUX0wzX01JWEVSOgorCWNhc2UgUlQ1NjE2X09VVF9SMV9NSVhFUjoKKwljYXNlIFJUNTYxNl9PVVRfUjJfTUlYRVI6CisJY2FzZSBSVDU2MTZfT1VUX1IzX01JWEVSOgorCWNhc2UgUlQ1NjE2X0xPVVRfTUlYRVI6CisJY2FzZSBSVDU2MTZfUFdSX0RJRzE6CisJY2FzZSBSVDU2MTZfUFdSX0RJRzI6CisJY2FzZSBSVDU2MTZfUFdSX0FOTEcxOgorCWNhc2UgUlQ1NjE2X1BXUl9BTkxHMjoKKwljYXNlIFJUNTYxNl9QV1JfTUlYRVI6CisJY2FzZSBSVDU2MTZfUFdSX1ZPTDoKKwljYXNlIFJUNTYxNl9QUklWX0lOREVYOgorCWNhc2UgUlQ1NjE2X1BSSVZfREFUQToKKwljYXNlIFJUNTYxNl9JMlMxX1NEUDoKKwljYXNlIFJUNTYxNl9BRERBX0NMSzE6CisJY2FzZSBSVDU2MTZfQUREQV9DTEsyOgorCWNhc2UgUlQ1NjE2X0dMQl9DTEs6CisJY2FzZSBSVDU2MTZfUExMX0NUUkwxOgorCWNhc2UgUlQ1NjE2X1BMTF9DVFJMMjoKKwljYXNlIFJUNTYxNl9IUF9PVkNEOgorCWNhc2UgUlQ1NjE2X0RFUE9QX00xOgorCWNhc2UgUlQ1NjE2X0RFUE9QX00yOgorCWNhc2UgUlQ1NjE2X0RFUE9QX00zOgorCWNhc2UgUlQ1NjE2X0NIQVJHRV9QVU1QOgorCWNhc2UgUlQ1NjE2X1BWX0RFVF9TUEtfRzoKKwljYXNlIFJUNTYxNl9NSUNCSUFTOgorCWNhc2UgUlQ1NjE2X0FfSkRfQ1RMMToKKwljYXNlIFJUNTYxNl9BX0pEX0NUTDI6CisJY2FzZSBSVDU2MTZfRVFfQ1RSTDE6CisJY2FzZSBSVDU2MTZfRVFfQ1RSTDI6CisJY2FzZSBSVDU2MTZfV0lORF9GSUxURVI6CisJY2FzZSBSVDU2MTZfRFJDX0FHQ18xOgorCWNhc2UgUlQ1NjE2X0RSQ19BR0NfMjoKKwljYXNlIFJUNTYxNl9EUkNfQUdDXzM6CisJY2FzZSBSVDU2MTZfU1ZPTF9aQzoKKwljYXNlIFJUNTYxNl9KRF9DVFJMMToKKwljYXNlIFJUNTYxNl9KRF9DVFJMMjoKKwljYXNlIFJUNTYxNl9JUlFfQ1RSTDE6CisJY2FzZSBSVDU2MTZfSVJRX0NUUkwyOgorCWNhc2UgUlQ1NjE2X0lOVF9JUlFfU1Q6CisJY2FzZSBSVDU2MTZfR1BJT19DVFJMMToKKwljYXNlIFJUNTYxNl9HUElPX0NUUkwyOgorCWNhc2UgUlQ1NjE2X0dQSU9fQ1RSTDM6CisJY2FzZSBSVDU2MTZfUEdNX1JFR19BUlIxOgorCWNhc2UgUlQ1NjE2X1BHTV9SRUdfQVJSMjoKKwljYXNlIFJUNTYxNl9QR01fUkVHX0FSUjM6CisJY2FzZSBSVDU2MTZfUEdNX1JFR19BUlI0OgorCWNhc2UgUlQ1NjE2X1BHTV9SRUdfQVJSNToKKwljYXNlIFJUNTYxNl9TQ0JfRlVOQzoKKwljYXNlIFJUNTYxNl9TQ0JfQ1RSTDoKKwljYXNlIFJUNTYxNl9CQVNFX0JBQ0s6CisJY2FzZSBSVDU2MTZfTVAzX1BMVVMxOgorCWNhc2UgUlQ1NjE2X01QM19QTFVTMjoKKwljYXNlIFJUNTYxNl9BREpfSFBGX0NUUkwxOgorCWNhc2UgUlQ1NjE2X0FESl9IUEZfQ1RSTDI6CisJY2FzZSBSVDU2MTZfSFBfQ0FMSUJfQU1QX0RFVDoKKwljYXNlIFJUNTYxNl9IUF9DQUxJQjI6CisJY2FzZSBSVDU2MTZfU1ZfWkNEMToKKwljYXNlIFJUNTYxNl9TVl9aQ0QyOgorCWNhc2UgUlQ1NjE2X0RfTUlTQzoKKwljYXNlIFJUNTYxNl9EVU1NWTI6CisJY2FzZSBSVDU2MTZfRFVNTVkzOgorCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0X3ZvbF90bHYsIC00NjUwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhY192b2xfdGx2LCAtNjU2MjUsIDM3NSwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5fdm9sX3RsdiwgLTM0NTAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYWRjX3ZvbF90bHYsIC0xNzYyNSwgMzc1LCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShhZGNfYnN0X3RsdiwgMCwgMTIwMCwgMCk7CisKKy8qIHswLCArMjAsICsyNCwgKzMwLCArMzUsICs0MCwgKzQ0LCArNTAsICs1Mn0gZEIgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYnN0X3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDcpLAorCTAsIDAsIFRMVl9EQl9TQ0FMRV9JVEVNKDAsIDAsIDApLAorCTEsIDEsIFRMVl9EQl9TQ0FMRV9JVEVNKDIwMDAsIDAsIDApLAorCTIsIDIsIFRMVl9EQl9TQ0FMRV9JVEVNKDI0MDAsIDAsIDApLAorCTMsIDUsIFRMVl9EQl9TQ0FMRV9JVEVNKDMwMDAsIDUwMCwgMCksCisJNiwgNiwgVExWX0RCX1NDQUxFX0lURU0oNDQwMCwgMCwgMCksCisJNywgNywgVExWX0RCX1NDQUxFX0lURU0oNTAwMCwgMCwgMCksCisJOCwgOCwgVExWX0RCX1NDQUxFX0lURU0oNTIwMCwgMCwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjE2X3NuZF9jb250cm9sc1tdID0geworCS8qIEhlYWRwaG9uZSBPdXRwdXQgVm9sdW1lICovCisJU09DX0RPVUJMRSgiSFAgUGxheWJhY2sgU3dpdGNoIiwgUlQ1NjE2X0hQX1ZPTCwKKwkJUlQ1NjE2X0xfTVVURV9TRlQsIFJUNTYxNl9SX01VVEVfU0ZULCAxLCAxKSwKKwlTT0NfRE9VQkxFX1RMVigiSFAgUGxheWJhY2sgVm9sdW1lIiwgUlQ1NjE2X0hQX1ZPTCwKKwkJUlQ1NjE2X0xfVk9MX1NGVCwgUlQ1NjE2X1JfVk9MX1NGVCwgMzksIDEsIG91dF92b2xfdGx2KSwKKwkvKiBPVVRQVVQgQ29udHJvbCAqLworCVNPQ19ET1VCTEUoIk9VVCBQbGF5YmFjayBTd2l0Y2giLCBSVDU2MTZfTE9VVF9DVFJMMSwKKwkJUlQ1NjE2X0xfTVVURV9TRlQsIFJUNTYxNl9SX01VVEVfU0ZULCAxLCAxKSwKKwlTT0NfRE9VQkxFKCJPVVQgQ2hhbm5lbCBTd2l0Y2giLCBSVDU2MTZfTE9VVF9DVFJMMSwKKwkJUlQ1NjE2X1ZPTF9MX1NGVCwgUlQ1NjE2X1ZPTF9SX1NGVCwgMSwgMSksCisJU09DX0RPVUJMRV9UTFYoIk9VVCBQbGF5YmFjayBWb2x1bWUiLCBSVDU2MTZfTE9VVF9DVFJMMSwKKwkJUlQ1NjE2X0xfVk9MX1NGVCwgUlQ1NjE2X1JfVk9MX1NGVCwgMzksIDEsIG91dF92b2xfdGx2KSwKKworCS8qIERBQyBEaWdpdGFsIFZvbHVtZSAqLworCVNPQ19ET1VCTEVfVExWKCJEQUMxIFBsYXliYWNrIFZvbHVtZSIsIFJUNTYxNl9EQUMxX0RJR19WT0wsCisJCQlSVDU2MTZfTF9WT0xfU0ZULCBSVDU2MTZfUl9WT0xfU0ZULAorCQkJMTc1LCAwLCBkYWNfdm9sX3RsdiksCisJLyogSU4xL0lOMiBDb250cm9sICovCisJU09DX1NJTkdMRV9UTFYoIklOMSBCb29zdCBWb2x1bWUiLCBSVDU2MTZfSU4xX0lOMiwKKwkJUlQ1NjE2X0JTVF9TRlQxLCA4LCAwLCBic3RfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiSU4yIEJvb3N0IFZvbHVtZSIsIFJUNTYxNl9JTjFfSU4yLAorCQlSVDU2MTZfQlNUX1NGVDIsIDgsIDAsIGJzdF90bHYpLAorCS8qIElOTC9JTlIgVm9sdW1lIENvbnRyb2wgKi8KKwlTT0NfRE9VQkxFX1RMVigiSU4gQ2FwdHVyZSBWb2x1bWUiLCBSVDU2MTZfSU5MMV9JTlIxX1ZPTCwKKwkJCVJUNTYxNl9JTkxfVk9MX1NGVCwgUlQ1NjE2X0lOUl9WT0xfU0ZULAorCQkJMzEsIDEsIGluX3ZvbF90bHYpLAorCS8qIEFEQyBEaWdpdGFsIFZvbHVtZSBDb250cm9sICovCisJU09DX0RPVUJMRSgiQURDIENhcHR1cmUgU3dpdGNoIiwgUlQ1NjE2X0FEQ19ESUdfVk9MLAorCQlSVDU2MTZfTF9NVVRFX1NGVCwgUlQ1NjE2X1JfTVVURV9TRlQsIDEsIDEpLAorCVNPQ19ET1VCTEVfVExWKCJBREMgQ2FwdHVyZSBWb2x1bWUiLCBSVDU2MTZfQURDX0RJR19WT0wsCisJCQlSVDU2MTZfTF9WT0xfU0ZULCBSVDU2MTZfUl9WT0xfU0ZULAorCQkJMTI3LCAwLCBhZGNfdm9sX3RsdiksCisKKwkvKiBBREMgQm9vc3QgVm9sdW1lIENvbnRyb2wgKi8KKwlTT0NfRE9VQkxFX1RMVigiQURDIEJvb3N0IFZvbHVtZSIsIFJUNTYxNl9BRENfQlNUX1ZPTCwKKwkJCVJUNTYxNl9BRENfTF9CU1RfU0ZULCBSVDU2MTZfQURDX1JfQlNUX1NGVCwKKwkJCTMsIDAsIGFkY19ic3RfdGx2KSwKK307CisKK3N0YXRpYyBpbnQgaXNfc3lzX2Nsa19mcm9tX3BsbChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAorCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBzbmRfc29jX3JlYWQoc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSksIFJUNTYxNl9HTEJfQ0xLKTsKKwl2YWwgJj0gUlQ1NjE2X1NDTEtfU1JDX01BU0s7CisJaWYgKHZhbCA9PSBSVDU2MTZfU0NMS19TUkNfUExMMSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogRGlnaXRhbCBNaXhlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTYxNl9zdG8xX2FkY19sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQURDMSBTd2l0Y2giLCBSVDU2MTZfU1RPMV9BRENfTUlYRVIsCisJCQlSVDU2MTZfTV9TVE8xX0FEQ19MMV9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTYxNl9zdG8xX2FkY19yX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQURDMSBTd2l0Y2giLCBSVDU2MTZfU1RPMV9BRENfTUlYRVIsCisJCQlSVDU2MTZfTV9TVE8xX0FEQ19SMV9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTYxNl9kYWNfbF9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIlN0ZXJlbyBBREMgU3dpdGNoIiwgUlQ1NjE2X0FEX0RBX01JWEVSLAorCQkJUlQ1NjE2X01fQURDTUlYX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIklORjEgU3dpdGNoIiwgUlQ1NjE2X0FEX0RBX01JWEVSLAorCQkJUlQ1NjE2X01fSUYxX0RBQ19MX1NGVCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjE2X2RhY19yX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiU3RlcmVvIEFEQyBTd2l0Y2giLCBSVDU2MTZfQURfREFfTUlYRVIsCisJCQlSVDU2MTZfTV9BRENNSVhfUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiSU5GMSBTd2l0Y2giLCBSVDU2MTZfQURfREFfTUlYRVIsCisJCQlSVDU2MTZfTV9JRjFfREFDX1JfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2MTZfc3RvX2RhY19sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiREFDIEwxIFN3aXRjaCIsIFJUNTYxNl9TVE9fREFDX01JWEVSLAorCQkJUlQ1NjE2X01fREFDX0wxX01JWExfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBSMSBTd2l0Y2giLCBSVDU2MTZfU1RPX0RBQ19NSVhFUiwKKwkJCVJUNTYxNl9NX0RBQ19SMV9NSVhMX1NGVCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjE2X3N0b19kYWNfcl9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBSMSBTd2l0Y2giLCBSVDU2MTZfU1RPX0RBQ19NSVhFUiwKKwkJCVJUNTYxNl9NX0RBQ19SMV9NSVhSX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJEQUMgTDEgU3dpdGNoIiwgUlQ1NjE2X1NUT19EQUNfTUlYRVIsCisJCQlSVDU2MTZfTV9EQUNfTDFfTUlYUl9TRlQsIDEsIDEpLAorfTsKKworLyogQW5hbG9nIElucHV0IE1peGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjE2X3JlY19sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiSU5MMSBTd2l0Y2giLCBSVDU2MTZfUkVDX0wyX01JWEVSLAorCQkJUlQ1NjE2X01fSU4xX0xfUk1fTF9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUMiBTd2l0Y2giLCBSVDU2MTZfUkVDX0wyX01JWEVSLAorCQkJUlQ1NjE2X01fQlNUMl9STV9MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QxIFN3aXRjaCIsIFJUNTYxNl9SRUNfTDJfTUlYRVIsCisJCQlSVDU2MTZfTV9CU1QxX1JNX0xfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2MTZfcmVjX3JfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJJTlIxIFN3aXRjaCIsIFJUNTYxNl9SRUNfUjJfTUlYRVIsCisJCQlSVDU2MTZfTV9JTjFfUl9STV9SX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QyIFN3aXRjaCIsIFJUNTYxNl9SRUNfUjJfTUlYRVIsCisJCQlSVDU2MTZfTV9CU1QyX1JNX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDEgU3dpdGNoIiwgUlQ1NjE2X1JFQ19SMl9NSVhFUiwKKwkJCVJUNTYxNl9NX0JTVDFfUk1fUl9TRlQsIDEsIDEpLAorfTsKKworLyogQW5hbG9nIE91dHB1dCBNaXhlciAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjE2X291dF9sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQlNUMSBTd2l0Y2giLCBSVDU2MTZfT1VUX0wzX01JWEVSLAorCQkJUlQ1NjE2X01fQlNUMV9PTV9MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QyIFN3aXRjaCIsIFJUNTYxNl9PVVRfTDNfTUlYRVIsCisJCQlSVDU2MTZfTV9CU1QyX09NX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOTDEgU3dpdGNoIiwgUlQ1NjE2X09VVF9MM19NSVhFUiwKKwkJCVJUNTYxNl9NX0lOMV9MX09NX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIlJFQyBNSVhMIFN3aXRjaCIsIFJUNTYxNl9PVVRfTDNfTUlYRVIsCisJCQlSVDU2MTZfTV9STV9MX09NX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBMMSBTd2l0Y2giLCBSVDU2MTZfT1VUX0wzX01JWEVSLAorCQkJUlQ1NjE2X01fREFDX0wxX09NX0xfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2MTZfb3V0X3JfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJCU1QyIFN3aXRjaCIsIFJUNTYxNl9PVVRfUjNfTUlYRVIsCisJCQlSVDU2MTZfTV9CU1QyX09NX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDEgU3dpdGNoIiwgUlQ1NjE2X09VVF9SM19NSVhFUiwKKwkJCVJUNTYxNl9NX0JTVDFfT01fUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiSU5SMSBTd2l0Y2giLCBSVDU2MTZfT1VUX1IzX01JWEVSLAorCQkJUlQ1NjE2X01fSU4xX1JfT01fUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiUkVDIE1JWFIgU3dpdGNoIiwgUlQ1NjE2X09VVF9SM19NSVhFUiwKKwkJCVJUNTYxNl9NX1JNX1JfT01fUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiREFDIFIxIFN3aXRjaCIsIFJUNTYxNl9PVVRfUjNfTUlYRVIsCisJCQlSVDU2MTZfTV9EQUNfUjFfT01fUl9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTYxNl9ocG9fbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJEQUMxIFN3aXRjaCIsIFJUNTYxNl9IUE9fTUlYRVIsCisJCQlSVDU2MTZfTV9EQUMxX0hNX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJIUFZPTCBTd2l0Y2giLCBSVDU2MTZfSFBPX01JWEVSLAorCQkJUlQ1NjE2X01fSFBWT0xfSE1fU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2MTZfbG91dF9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBMMSBTd2l0Y2giLCBSVDU2MTZfTE9VVF9NSVhFUiwKKwkJCVJUNTYxNl9NX0RBQ19MMV9MTV9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiREFDIFIxIFN3aXRjaCIsIFJUNTYxNl9MT1VUX01JWEVSLAorCQkJUlQ1NjE2X01fREFDX1IxX0xNX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJPVVRWT0wgTCBTd2l0Y2giLCBSVDU2MTZfTE9VVF9NSVhFUiwKKwkJCVJUNTYxNl9NX09WX0xfTE1fU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIk9VVFZPTCBSIFN3aXRjaCIsIFJUNTYxNl9MT1VUX01JWEVSLAorCQkJUlQ1NjE2X01fT1ZfUl9MTV9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGludCBydDU2MTZfYWRjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfQURDX0RJR19WT0wsCisJCQkJUlQ1NjE2X0xfTVVURSB8IFJUNTYxNl9SX01VVEUsIDApOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfQURDX0RJR19WT0wsCisJCQkJUlQ1NjE2X0xfTVVURSB8IFJUNTYxNl9SX01VVEUsCisJCQkJUlQ1NjE2X0xfTVVURSB8IFJUNTYxNl9SX01VVEUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0NTYxNl9jaGFyZ2VfcHVtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQkvKiBkZXBvcCBwYXJhbWV0ZXJzICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9ERVBPUF9NMiwKKwkJCVJUNTYxNl9ERVBPUF9NQVNLLCBSVDU2MTZfREVQT1BfTUFOKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0RFUE9QX00xLAorCQkJUlQ1NjE2X0hQX0NQX01BU0sgfCBSVDU2MTZfSFBfU0dfTUFTSyB8CisJCQlSVDU2MTZfSFBfQ0JfTUFTSywgUlQ1NjE2X0hQX0NQX1BVIHwKKwkJCVJUNTYxNl9IUF9TR19ESVMgfCBSVDU2MTZfSFBfQ0JfUFUpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2MTZfUFJfQkFTRSArCisJCQlSVDU2MTZfSFBfRENDX0lOVDEsIDB4OWYwMCk7CisJCS8qIGhlYWRwaG9uZSBhbXAgcG93ZXIgb24gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X1BXUl9BTkxHMSwKKwkJCVJUNTYxNl9QV1JfRlYxIHwgUlQ1NjE2X1BXUl9GVjIsIDApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfUFdSX1ZPTCwKKwkJCVJUNTYxNl9QV1JfSFZfTCB8IFJUNTYxNl9QV1JfSFZfUiwKKwkJCVJUNTYxNl9QV1JfSFZfTCB8IFJUNTYxNl9QV1JfSFZfUik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9QV1JfQU5MRzEsCisJCQlSVDU2MTZfUFdSX0hQX0wgfCBSVDU2MTZfUFdSX0hQX1IgfAorCQkJUlQ1NjE2X1BXUl9IQSwgUlQ1NjE2X1BXUl9IUF9MIHwKKwkJCVJUNTYxNl9QV1JfSFBfUiB8IFJUNTYxNl9QV1JfSEEpOworCQltc2xlZXAoNTApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfUFdSX0FOTEcxLAorCQkJUlQ1NjE2X1BXUl9GVjEgfCBSVDU2MTZfUFdSX0ZWMiwKKwkJCVJUNTYxNl9QV1JfRlYxIHwgUlQ1NjE2X1BXUl9GVjIpOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9DSEFSR0VfUFVNUCwKKwkJCVJUNTYxNl9QTV9IUF9NQVNLLCBSVDU2MTZfUE1fSFBfSFYpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfUFJfQkFTRSArCisJCQlSVDU2MTZfQ0hPUF9EQUNfQURDLCAweDAyMDAsIDB4MDIwMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9ERVBPUF9NMSwKKwkJCVJUNTYxNl9IUF9DT19NQVNLIHwgUlQ1NjE2X0hQX1NHX01BU0ssCisJCQlSVDU2MTZfSFBfQ09fRU4gfCBSVDU2MTZfSFBfU0dfRU4pOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfUFJfQkFTRSArCisJCQlSVDU2MTZfQ0hPUF9EQUNfQURDLCAweDAyMDAsIDB4MCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9ERVBPUF9NMSwKKwkJCVJUNTYxNl9IUF9TR19NQVNLIHwgUlQ1NjE2X0hQX0xfU01UX01BU0sgfAorCQkJUlQ1NjE2X0hQX1JfU01UX01BU0ssIFJUNTYxNl9IUF9TR19ESVMgfAorCQkJUlQ1NjE2X0hQX0xfU01UX0RJUyB8IFJUNTYxNl9IUF9SX1NNVF9ESVMpOworCQkvKiBoZWFkcGhvbmUgYW1wIHBvd2VyIGRvd24gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0RFUE9QX00xLAorCQkJUlQ1NjE2X1NNVF9UUklHX01BU0sgfCBSVDU2MTZfSFBfQ0RfUERfTUFTSyB8CisJCQlSVDU2MTZfSFBfQ09fTUFTSyB8IFJUNTYxNl9IUF9DUF9NQVNLIHwKKwkJCVJUNTYxNl9IUF9TR19NQVNLIHwgUlQ1NjE2X0hQX0NCX01BU0ssCisJCQlSVDU2MTZfU01UX1RSSUdfRElTIHwgUlQ1NjE2X0hQX0NEX1BEX0VOIHwKKwkJCVJUNTYxNl9IUF9DT19ESVMgfCBSVDU2MTZfSFBfQ1BfUEQgfAorCQkJUlQ1NjE2X0hQX1NHX0VOIHwgUlQ1NjE2X0hQX0NCX1BEKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X1BXUl9BTkxHMSwKKwkJCVJUNTYxNl9QV1JfSFBfTCB8IFJUNTYxNl9QV1JfSFBfUiB8CisJCQlSVDU2MTZfUFdSX0hBLCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnQ1NjE2X2hwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQkvKiBoZWFkcGhvbmUgdW5tdXRlIHNlcXVlbmNlICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9ERVBPUF9NMywKKwkJCVJUNTYxNl9DUF9GUTFfTUFTSyB8IFJUNTYxNl9DUF9GUTJfTUFTSyB8CisJCQlSVDU2MTZfQ1BfRlEzX01BU0ssCisJCQkoUlQ1NjE2X0NQX0ZRXzE5Ml9LSFogPDwgUlQ1NjE2X0NQX0ZRMV9TRlQpIHwKKwkJCShSVDU2MTZfQ1BfRlFfMTJfS0haIDw8IFJUNTYxNl9DUF9GUTJfU0ZUKSB8CisJCQkoUlQ1NjE2X0NQX0ZRXzE5Ml9LSFogPDwgUlQ1NjE2X0NQX0ZRM19TRlQpKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgUlQ1NjE2X1BSX0JBU0UgKworCQkJUlQ1NjE2X01BTVBfSU5UX1JFRzIsIDB4ZmMwMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9ERVBPUF9NMSwKKwkJCVJUNTYxNl9TTVRfVFJJR19NQVNLLCBSVDU2MTZfU01UX1RSSUdfRU4pOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfREVQT1BfTTEsCisJCQlSVDU2MTZfUlNUTl9NQVNLLCBSVDU2MTZfUlNUTl9FTik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9ERVBPUF9NMSwKKwkJCVJUNTYxNl9SU1ROX01BU0sgfCBSVDU2MTZfSFBfTF9TTVRfTUFTSyB8CisJCQlSVDU2MTZfSFBfUl9TTVRfTUFTSywgUlQ1NjE2X1JTVE5fRElTIHwKKwkJCVJUNTYxNl9IUF9MX1NNVF9FTiB8IFJUNTYxNl9IUF9SX1NNVF9FTik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9IUF9WT0wsCisJCQlSVDU2MTZfTF9NVVRFIHwgUlQ1NjE2X1JfTVVURSwgMCk7CisJCW1zbGVlcCgxMDApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfREVQT1BfTTEsCisJCQlSVDU2MTZfSFBfU0dfTUFTSyB8IFJUNTYxNl9IUF9MX1NNVF9NQVNLIHwKKwkJCVJUNTYxNl9IUF9SX1NNVF9NQVNLLCBSVDU2MTZfSFBfU0dfRElTIHwKKwkJCVJUNTYxNl9IUF9MX1NNVF9ESVMgfCBSVDU2MTZfSFBfUl9TTVRfRElTKTsKKwkJbXNsZWVwKDIwKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0hQX0NBTElCX0FNUF9ERVQsCisJCQlSVDU2MTZfSFBEX1BTX01BU0ssIFJUNTYxNl9IUERfUFNfRU4pOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCS8qIGhlYWRwaG9uZSBtdXRlIHNlcXVlbmNlICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9ERVBPUF9NMywKKwkJCVJUNTYxNl9DUF9GUTFfTUFTSyB8IFJUNTYxNl9DUF9GUTJfTUFTSyB8CisJCQlSVDU2MTZfQ1BfRlEzX01BU0ssCisJCQkoUlQ1NjE2X0NQX0ZRXzk2X0tIWiA8PCBSVDU2MTZfQ1BfRlExX1NGVCkgfAorCQkJKFJUNTYxNl9DUF9GUV8xMl9LSFogPDwgUlQ1NjE2X0NQX0ZRMl9TRlQpIHwKKwkJCShSVDU2MTZfQ1BfRlFfOTZfS0haIDw8IFJUNTYxNl9DUF9GUTNfU0ZUKSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFJUNTYxNl9QUl9CQVNFICsKKwkJCVJUNTYxNl9NQU1QX0lOVF9SRUcyLCAweGZjMDApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfREVQT1BfTTEsCisJCQlSVDU2MTZfSFBfU0dfTUFTSywgUlQ1NjE2X0hQX1NHX0VOKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0RFUE9QX00xLAorCQkJUlQ1NjE2X1JTVFBfTUFTSywgUlQ1NjE2X1JTVFBfRU4pOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfREVQT1BfTTEsCisJCQlSVDU2MTZfUlNUUF9NQVNLIHwgUlQ1NjE2X0hQX0xfU01UX01BU0sgfAorCQkJUlQ1NjE2X0hQX1JfU01UX01BU0ssIFJUNTYxNl9SU1RQX0RJUyB8CisJCQlSVDU2MTZfSFBfTF9TTVRfRU4gfCBSVDU2MTZfSFBfUl9TTVRfRU4pOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfSFBfQ0FMSUJfQU1QX0RFVCwKKwkJCVJUNTYxNl9IUERfUFNfTUFTSywgUlQ1NjE2X0hQRF9QU19ESVMpOworCQltc2xlZXAoOTApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfSFBfVk9MLAorCQkJUlQ1NjE2X0xfTVVURSB8IFJUNTYxNl9SX01VVEUsCisJCQlSVDU2MTZfTF9NVVRFIHwgUlQ1NjE2X1JfTVVURSk7CisJCW1zbGVlcCgzMCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnQ1NjE2X2xvdXRfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9QV1JfQU5MRzEsCisJCQlSVDU2MTZfUFdSX0xNLCBSVDU2MTZfUFdSX0xNKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0xPVVRfQ1RSTDEsCisJCQlSVDU2MTZfTF9NVVRFIHwgUlQ1NjE2X1JfTVVURSwgMCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0xPVVRfQ1RSTDEsCisJCQlSVDU2MTZfTF9NVVRFIHwgUlQ1NjE2X1JfTVVURSwKKwkJCVJUNTYxNl9MX01VVEUgfCBSVDU2MTZfUl9NVVRFKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X1BXUl9BTkxHMSwKKwkJCVJUNTYxNl9QV1JfTE0sIDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0NTYxNl9ic3QxX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfUFdSX0FOTEcyLAorCQkJUlQ1NjE2X1BXUl9CU1QxX09QMiwgUlQ1NjE2X1BXUl9CU1QxX09QMik7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X1BXUl9BTkxHMiwKKwkJCVJUNTYxNl9QV1JfQlNUMV9PUDIsIDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0NTYxNl9ic3QyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfUFdSX0FOTEcyLAorCQkJUlQ1NjE2X1BXUl9CU1QyX09QMiwgUlQ1NjE2X1BXUl9CU1QyX09QMik7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X1BXUl9BTkxHMiwKKwkJCVJUNTYxNl9QV1JfQlNUMl9PUDIsIDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgcnQ1NjE2X2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9TVVBQTFkoIlBMTDEiLCBSVDU2MTZfUFdSX0FOTEcyLAorCQkJUlQ1NjE2X1BXUl9QTExfQklULCAwLCBOVUxMLCAwKSwKKwkvKiBJbnB1dCBTaWRlICovCisJLyogbWljYmlhcyAqLworCVNORF9TT0NfREFQTV9TVVBQTFkoIkxETyIsIFJUNTYxNl9QV1JfQU5MRzEsCisJCQlSVDU2MTZfUFdSX0xET19CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIm1pY2JpYXMxIiwgUlQ1NjE2X1BXUl9BTkxHMiwKKwkJCVJUNTYxNl9QV1JfTUIxX0JJVCwgMCwgTlVMTCwgMCksCisKKwkvKiBJbnB1dCBMaW5lcyAqLworCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDMSIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDMiIpLAorCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFQIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJQIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJOIiksCisKKwkvKiBCb29zdCAqLworCVNORF9TT0NfREFQTV9QR0FfRSgiQlNUMSIsIFJUNTYxNl9QV1JfQU5MRzIsCisJCVJUNTYxNl9QV1JfQlNUMV9CSVQsIDAsIE5VTEwsIDAsIHJ0NTYxNl9ic3QxX2V2ZW50LAorCQlTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJCU1QyIiwgUlQ1NjE2X1BXUl9BTkxHMiwKKwkJUlQ1NjE2X1BXUl9CU1QyX0JJVCwgMCwgTlVMTCwgMCwgcnQ1NjE2X2JzdDJfZXZlbnQsCisJCVNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKwkvKiBJbnB1dCBWb2x1bWUgKi8KKwlTTkRfU09DX0RBUE1fUEdBKCJJTkwxIFZPTCIsIFJUNTYxNl9QV1JfVk9MLAorCQlSVDU2MTZfUFdSX0lOMV9MX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSU5SMSBWT0wiLCBSVDU2MTZfUFdSX1ZPTCwKKwkJUlQ1NjE2X1BXUl9JTjFfUl9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklOTDIgVk9MIiwgUlQ1NjE2X1BXUl9WT0wsCisJCVJUNTYxNl9QV1JfSU4yX0xfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJJTlIyIFZPTCIsIFJUNTYxNl9QV1JfVk9MLAorCQlSVDU2MTZfUFdSX0lOMl9SX0JJVCwgMCwgTlVMTCwgMCksCisKKwkvKiBSRUMgTWl4ZXIgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJFQ01JWEwiLCBSVDU2MTZfUFdSX01JWEVSLCBSVDU2MTZfUFdSX1JNX0xfQklULCAwLAorCQkJcnQ1NjE2X3JlY19sX21peCwgQVJSQVlfU0laRShydDU2MTZfcmVjX2xfbWl4KSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJSRUNNSVhSIiwgUlQ1NjE2X1BXUl9NSVhFUiwgUlQ1NjE2X1BXUl9STV9SX0JJVCwgMCwKKwkJCXJ0NTYxNl9yZWNfcl9taXgsIEFSUkFZX1NJWkUocnQ1NjE2X3JlY19yX21peCkpLAorCS8qIEFEQ3MgKi8KKwlTTkRfU09DX0RBUE1fQURDX0UoIkFEQyBMIiwgTlVMTCwgUlQ1NjE2X1BXUl9ESUcxLAorCQlSVDU2MTZfUFdSX0FEQ19MX0JJVCwgMCwgcnQ1NjE2X2FkY19ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKwlTTkRfU09DX0RBUE1fQURDX0UoIkFEQyBSIiwgTlVMTCwgUlQ1NjE2X1BXUl9ESUcxLAorCQlSVDU2MTZfUFdSX0FEQ19SX0JJVCwgMCwgcnQ1NjE2X2FkY19ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKworCS8qIEFEQyBNaXhlciAqLworCVNORF9TT0NfREFQTV9TVVBQTFkoInN0ZXJlbzEgZmlsdGVyIiwgUlQ1NjE2X1BXUl9ESUcyLAorCQlSVDU2MTZfUFdSX0FEQ19TVE8xX0ZfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlN0ZXJlbzEgQURDIE1JWEwiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJ0NTYxNl9zdG8xX2FkY19sX21peCwgQVJSQVlfU0laRShydDU2MTZfc3RvMV9hZGNfbF9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlN0ZXJlbzEgQURDIE1JWFIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJ0NTYxNl9zdG8xX2FkY19yX21peCwgQVJSQVlfU0laRShydDU2MTZfc3RvMV9hZGNfcl9taXgpKSwKKworCS8qIERpZ2l0YWwgSW50ZXJmYWNlICovCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiSTJTMSIsIFJUNTYxNl9QV1JfRElHMSwKKwkJUlQ1NjE2X1BXUl9JMlMxX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYxIERBQyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYxIERBQzEgTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYxIERBQzEgUiIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYxIEFEQzEiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCisJLyogRGlnaXRhbCBJbnRlcmZhY2UgU2VsZWN0ICovCisKKwkvKiBBdWRpbyBJbnRlcmZhY2UgKi8KKwlTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxUlgiLCAiQUlGMSBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWCIsICJBSUYxIENhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorCisJLyogQXVkaW8gRFNQICovCisJU05EX1NPQ19EQVBNX1BHQSgiQXVkaW8gRFNQIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKworCS8qIE91dHB1dCBTaWRlICovCisJLyogREFDIG1peGVyIGJlZm9yZSBzb3VuZCBlZmZlY3QgICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJEQUMgTUlYTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJcnQ1NjE2X2RhY19sX21peCwgQVJSQVlfU0laRShydDU2MTZfZGFjX2xfbWl4KSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJEQUMgTUlYUiIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJcnQ1NjE2X2RhY19yX21peCwgQVJSQVlfU0laRShydDU2MTZfZGFjX3JfbWl4KSksCisKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJTdGVybzEgREFDIFBvd2VyIiwgUlQ1NjE2X1BXUl9ESUcyLAorCQkJUlQ1NjE2X1BXUl9EQUNfU1RPMV9GX0JJVCwgMCwgTlVMTCwgMCksCisKKwkvKiBEQUMgTWl4ZXIgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIlN0ZXJlbyBEQUMgTUlYTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJcnQ1NjE2X3N0b19kYWNfbF9taXgsIEFSUkFZX1NJWkUocnQ1NjE2X3N0b19kYWNfbF9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlN0ZXJlbyBEQUMgTUlYUiIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJcnQ1NjE2X3N0b19kYWNfcl9taXgsIEFSUkFZX1NJWkUocnQ1NjE2X3N0b19kYWNfcl9taXgpKSwKKworCS8qIERBQ3MgKi8KKwlTTkRfU09DX0RBUE1fREFDKCJEQUMgTDEiLCBOVUxMLCBSVDU2MTZfUFdSX0RJRzEsCisJCQlSVDU2MTZfUFdSX0RBQ19MMV9CSVQsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIkRBQyBSMSIsIE5VTEwsIFJUNTYxNl9QV1JfRElHMSwKKwkJCVJUNTYxNl9QV1JfREFDX1IxX0JJVCwgMCksCisJLyogT1VUIE1peGVyICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJPVVQgTUlYTCIsIFJUNTYxNl9QV1JfTUlYRVIsIFJUNTYxNl9QV1JfT01fTF9CSVQsCisJCTAsIHJ0NTYxNl9vdXRfbF9taXgsIEFSUkFZX1NJWkUocnQ1NjE2X291dF9sX21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiT1VUIE1JWFIiLCBSVDU2MTZfUFdSX01JWEVSLCBSVDU2MTZfUFdSX09NX1JfQklULAorCQkwLCBydDU2MTZfb3V0X3JfbWl4LCBBUlJBWV9TSVpFKHJ0NTYxNl9vdXRfcl9taXgpKSwKKwkvKiBPdXRwdXQgVm9sdW1lICovCisJU05EX1NPQ19EQVBNX1BHQSgiT1VUVk9MIEwiLCBSVDU2MTZfUFdSX1ZPTCwKKwkJUlQ1NjE2X1BXUl9PVl9MX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiT1VUVk9MIFIiLCBSVDU2MTZfUFdSX1ZPTCwKKwkJUlQ1NjE2X1BXUl9PVl9SX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSFBPVk9MIEwiLCBSVDU2MTZfUFdSX1ZPTCwKKwkJUlQ1NjE2X1BXUl9IVl9MX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSFBPVk9MIFIiLCBSVDU2MTZfUFdSX1ZPTCwKKwkJUlQ1NjE2X1BXUl9IVl9SX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiREFDIDEiLCBTTkRfU09DX05PUE0sCisJCTAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkRBQyAyIiwgU05EX1NPQ19OT1BNLAorCQkwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJIUE9WT0wiLCBTTkRfU09DX05PUE0sCisJCTAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklOTDEiLCBSVDU2MTZfUFdSX1ZPTCwKKwkJUlQ1NjE2X1BXUl9JTjFfTF9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklOUjEiLCBSVDU2MTZfUFdSX1ZPTCwKKwkJUlQ1NjE2X1BXUl9JTjFfUl9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklOTDIiLCBSVDU2MTZfUFdSX1ZPTCwKKwkJUlQ1NjE2X1BXUl9JTjJfTF9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklOUjIiLCBSVDU2MTZfUFdSX1ZPTCwKKwkJUlQ1NjE2X1BXUl9JTjJfUl9CSVQsIDAsIE5VTEwsIDApLAorCS8qIEhQTy9MT1VUL01vbm8gTWl4ZXIgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIkhQTyBNSVgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJ0NTYxNl9ocG9fbWl4LCBBUlJBWV9TSVpFKHJ0NTYxNl9ocG9fbWl4KSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJMT1VUIE1JWCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJcnQ1NjE2X2xvdXRfbWl4LCBBUlJBWV9TSVpFKHJ0NTYxNl9sb3V0X21peCkpLAorCisJU05EX1NPQ19EQVBNX1BHQV9TKCJIUCBhbXAiLCAxLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJ0NTYxNl9ocF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTUQgfAorCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCVNORF9TT0NfREFQTV9QR0FfUygiTE9VVCBhbXAiLCAxLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJ0NTYxNl9sb3V0X2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNRCB8CisJCVNORF9TT0NfREFQTV9QT1NUX1BNVSksCisKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkNoYXJnZSBQdW1wIiwgMSwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQlydDU2MTZfY2hhcmdlX3B1bXBfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8CisJCVNORF9TT0NfREFQTV9QUkVfUE1EKSwKKworCS8qIE91dHB1dCBMaW5lcyAqLworCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT0wiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9SIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTE9VVEwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUUiIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgcnQ1NjE2X2RhcG1fcm91dGVzW10gPSB7CisJeyJJTjFQIiwgTlVMTCwgIkxETyJ9LAorCXsiSU4yUCIsIE5VTEwsICJMRE8ifSwKKworCXsiSU4xUCIsIE5VTEwsICJNSUMxIn0sCisJeyJJTjJQIiwgTlVMTCwgIk1JQzIifSwKKwl7IklOMk4iLCBOVUxMLCAiTUlDMiJ9LAorCisJeyJCU1QxIiwgTlVMTCwgIklOMVAifSwKKwl7IkJTVDIiLCBOVUxMLCAiSU4yUCJ9LAorCXsiQlNUMiIsIE5VTEwsICJJTjJOIn0sCisJeyJCU1QxIiwgTlVMTCwgIm1pY2JpYXMxIn0sCisJeyJCU1QyIiwgTlVMTCwgIm1pY2JpYXMxIn0sCisKKwl7IklOTDEgVk9MIiwgTlVMTCwgIklOMlAifSwKKwl7IklOUjEgVk9MIiwgTlVMTCwgIklOMk4ifSwKKworCXsiUkVDTUlYTCIsICJJTkwxIFN3aXRjaCIsICJJTkwxIFZPTCJ9LAorCXsiUkVDTUlYTCIsICJCU1QyIFN3aXRjaCIsICJCU1QyIn0sCisJeyJSRUNNSVhMIiwgIkJTVDEgU3dpdGNoIiwgIkJTVDEifSwKKworCXsiUkVDTUlYUiIsICJJTlIxIFN3aXRjaCIsICJJTlIxIFZPTCJ9LAorCXsiUkVDTUlYUiIsICJCU1QyIFN3aXRjaCIsICJCU1QyIn0sCisJeyJSRUNNSVhSIiwgIkJTVDEgU3dpdGNoIiwgIkJTVDEifSwKKworCXsiQURDIEwiLCBOVUxMLCAiUkVDTUlYTCJ9LAorCXsiQURDIFIiLCBOVUxMLCAiUkVDTUlYUiJ9LAorCisJeyJTdGVyZW8xIEFEQyBNSVhMIiwgIkFEQzEgU3dpdGNoIiwgIkFEQyBMIn0sCisJeyJTdGVyZW8xIEFEQyBNSVhMIiwgTlVMTCwgInN0ZXJlbzEgZmlsdGVyIn0sCisJeyJzdGVyZW8xIGZpbHRlciIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbH0sCisKKwl7IlN0ZXJlbzEgQURDIE1JWFIiLCAiQURDMSBTd2l0Y2giLCAiQURDIFIifSwKKwl7IlN0ZXJlbzEgQURDIE1JWFIiLCBOVUxMLCAic3RlcmVvMSBmaWx0ZXIifSwKKwl7InN0ZXJlbzEgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsfSwKKworCXsiSUYxIEFEQzEiLCBOVUxMLCAiU3RlcmVvMSBBREMgTUlYTCJ9LAorCXsiSUYxIEFEQzEiLCBOVUxMLCAiU3RlcmVvMSBBREMgTUlYUiJ9LAorCXsiSUYxIEFEQzEiLCBOVUxMLCAiSTJTMSJ9LAorCisJeyJBSUYxVFgiLCBOVUxMLCAiSUYxIEFEQzEifSwKKworCXsiSUYxIERBQyIsIE5VTEwsICJBSUYxUlgifSwKKwl7IklGMSBEQUMiLCBOVUxMLCAiSTJTMSJ9LAorCisJeyJJRjEgREFDMSBMIiwgTlVMTCwgIklGMSBEQUMifSwKKwl7IklGMSBEQUMxIFIiLCBOVUxMLCAiSUYxIERBQyJ9LAorCisJeyJEQUMgTUlYTCIsICJTdGVyZW8gQURDIFN3aXRjaCIsICJTdGVyZW8xIEFEQyBNSVhMIn0sCisJeyJEQUMgTUlYTCIsICJJTkYxIFN3aXRjaCIsICJJRjEgREFDMSBMIn0sCisJeyJEQUMgTUlYUiIsICJTdGVyZW8gQURDIFN3aXRjaCIsICJTdGVyZW8xIEFEQyBNSVhSIn0sCisJeyJEQUMgTUlYUiIsICJJTkYxIFN3aXRjaCIsICJJRjEgREFDMSBSIn0sCisKKwl7IkF1ZGlvIERTUCIsIE5VTEwsICJEQUMgTUlYTCJ9LAorCXsiQXVkaW8gRFNQIiwgTlVMTCwgIkRBQyBNSVhSIn0sCisKKwl7IlN0ZXJlbyBEQUMgTUlYTCIsICJEQUMgTDEgU3dpdGNoIiwgIkF1ZGlvIERTUCJ9LAorCXsiU3RlcmVvIERBQyBNSVhMIiwgIkRBQyBSMSBTd2l0Y2giLCAiREFDIE1JWFIifSwKKwl7IlN0ZXJlbyBEQUMgTUlYTCIsIE5VTEwsICJTdGVybzEgREFDIFBvd2VyIn0sCisJeyJTdGVyZW8gREFDIE1JWFIiLCAiREFDIFIxIFN3aXRjaCIsICJBdWRpbyBEU1AifSwKKwl7IlN0ZXJlbyBEQUMgTUlYUiIsICJEQUMgTDEgU3dpdGNoIiwgIkRBQyBNSVhMIn0sCisJeyJTdGVyZW8gREFDIE1JWFIiLCBOVUxMLCAiU3Rlcm8xIERBQyBQb3dlciJ9LAorCisJeyJEQUMgTDEiLCBOVUxMLCAiU3RlcmVvIERBQyBNSVhMIn0sCisJeyJEQUMgTDEiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGx9LAorCXsiREFDIFIxIiwgTlVMTCwgIlN0ZXJlbyBEQUMgTUlYUiJ9LAorCXsiREFDIFIxIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsfSwKKworCXsiT1VUIE1JWEwiLCAiQlNUMSBTd2l0Y2giLCAiQlNUMSJ9LAorCXsiT1VUIE1JWEwiLCAiQlNUMiBTd2l0Y2giLCAiQlNUMiJ9LAorCXsiT1VUIE1JWEwiLCAiSU5MMSBTd2l0Y2giLCAiSU5MMSBWT0wifSwKKwl7Ik9VVCBNSVhMIiwgIlJFQyBNSVhMIFN3aXRjaCIsICJSRUNNSVhMIn0sCisJeyJPVVQgTUlYTCIsICJEQUMgTDEgU3dpdGNoIiwgIkRBQyBMMSJ9LAorCisJeyJPVVQgTUlYUiIsICJCU1QyIFN3aXRjaCIsICJCU1QyIn0sCisJeyJPVVQgTUlYUiIsICJCU1QxIFN3aXRjaCIsICJCU1QxIn0sCisJeyJPVVQgTUlYUiIsICJJTlIxIFN3aXRjaCIsICJJTlIxIFZPTCJ9LAorCXsiT1VUIE1JWFIiLCAiUkVDIE1JWFIgU3dpdGNoIiwgIlJFQ01JWFIifSwKKwl7Ik9VVCBNSVhSIiwgIkRBQyBSMSBTd2l0Y2giLCAiREFDIFIxIn0sCisKKwl7IkhQT1ZPTCBMIiwgTlVMTCwgIk9VVCBNSVhMIn0sCisJeyJIUE9WT0wgUiIsIE5VTEwsICJPVVQgTUlYUiJ9LAorCXsiT1VUVk9MIEwiLCBOVUxMLCAiT1VUIE1JWEwifSwKKwl7Ik9VVFZPTCBSIiwgTlVMTCwgIk9VVCBNSVhSIn0sCisKKwl7IkRBQyAxIiwgTlVMTCwgIkRBQyBMMSJ9LAorCXsiREFDIDEiLCBOVUxMLCAiREFDIFIxIn0sCisJeyJIUE9WT0wiLCBOVUxMLCAiSFBPVk9MIEwifSwKKwl7IkhQT1ZPTCIsIE5VTEwsICJIUE9WT0wgUiJ9LAorCXsiSFBPIE1JWCIsICJEQUMxIFN3aXRjaCIsICJEQUMgMSJ9LAorCXsiSFBPIE1JWCIsICJIUFZPTCBTd2l0Y2giLCAiSFBPVk9MIn0sCisKKwl7IkxPVVQgTUlYIiwgIkRBQyBMMSBTd2l0Y2giLCAiREFDIEwxIn0sCisJeyJMT1VUIE1JWCIsICJEQUMgUjEgU3dpdGNoIiwgIkRBQyBSMSJ9LAorCXsiTE9VVCBNSVgiLCAiT1VUVk9MIEwgU3dpdGNoIiwgIk9VVFZPTCBMIn0sCisJeyJMT1VUIE1JWCIsICJPVVRWT0wgUiBTd2l0Y2giLCAiT1VUVk9MIFIifSwKKworCXsiSFAgYW1wIiwgTlVMTCwgIkhQTyBNSVgifSwKKwl7IkhQIGFtcCIsIE5VTEwsICJDaGFyZ2UgUHVtcCJ9LAorCXsiSFBPTCIsIE5VTEwsICJIUCBhbXAifSwKKwl7IkhQT1IiLCBOVUxMLCAiSFAgYW1wIn0sCisKKwl7IkxPVVQgYW1wIiwgTlVMTCwgIkxPVVQgTUlYIn0sCisJeyJMT1VUIGFtcCIsIE5VTEwsICJDaGFyZ2UgUHVtcCJ9LAorCXsiTE9VVEwiLCBOVUxMLCAiTE9VVCBhbXAifSwKKwl7IkxPVVRSIiwgTlVMTCwgIkxPVVQgYW1wIn0sCisKK307CisKK3N0YXRpYyBpbnQgcnQ1NjE2X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisJc3RydWN0IHJ0NTYxNl9wcml2ICpydDU2MTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1bnNpZ25lZCBpbnQgdmFsX2xlbiA9IDAsIHZhbF9jbGssIG1hc2tfY2xrOworCWludCBwcmVfZGl2LCBiY2xrX21zLCBmcmFtZV9zaXplOworCisJcnQ1NjE2LT5scmNrW2RhaS0+aWRdID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCXByZV9kaXYgPSBybDYyMzFfZ2V0X2Nsa19pbmZvKHJ0NTYxNi0+c3lzY2xrLCBydDU2MTYtPmxyY2tbZGFpLT5pZF0pOworCisJaWYgKHByZV9kaXYgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVuc3VwcG9ydGVkIGNsb2NrIHNldHRpbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZnJhbWVfc2l6ZSA9IHNuZF9zb2NfcGFyYW1zX3RvX2ZyYW1lX3NpemUocGFyYW1zKTsKKwlpZiAoZnJhbWVfc2l6ZSA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5zdXBwb3J0ZWQgZnJhbWUgc2l6ZTogJWRcbiIsIGZyYW1lX3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJYmNsa19tcyA9IGZyYW1lX3NpemUgPiAzMiA/IDEgOiAwOworCXJ0NTYxNi0+YmNsa1tkYWktPmlkXSA9IHJ0NTYxNi0+bHJja1tkYWktPmlkXSAqICgzMiA8PCBiY2xrX21zKTsKKworCWRldl9kYmcoZGFpLT5kZXYsICJiY2xrIGlzICVkSHogYW5kIGxyY2sgaXMgJWRIelxuIiwKKwkJcnQ1NjE2LT5iY2xrW2RhaS0+aWRdLCBydDU2MTYtPmxyY2tbZGFpLT5pZF0pOworCWRldl9kYmcoZGFpLT5kZXYsICJiY2xrX21zIGlzICVkIGFuZCBwcmVfZGl2IGlzICVkIGZvciBpaXMgJWRcbiIsCisJCQkJYmNsa19tcywgcHJlX2RpdiwgZGFpLT5pZCk7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQl2YWxfbGVuIHw9IFJUNTYxNl9JMlNfRExfMjA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCXZhbF9sZW4gfD0gUlQ1NjE2X0kyU19ETF8yNDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgorCQl2YWxfbGVuIHw9IFJUNTYxNl9JMlNfRExfODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWFza19jbGsgPSBSVDU2MTZfSTJTX1BEMV9NQVNLOworCXZhbF9jbGsgPSBwcmVfZGl2IDw8IFJUNTYxNl9JMlNfUEQxX1NGVDsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfSTJTMV9TRFAsCisJCVJUNTYxNl9JMlNfRExfTUFTSywgdmFsX2xlbik7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0FEREFfQ0xLMSwgbWFza19jbGssIHZhbF9jbGspOworCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydDU2MTZfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgcnQ1NjE2X3ByaXYgKnJ0NTYxNiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXVuc2lnbmVkIGludCByZWdfdmFsID0gMDsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCXJ0NTYxNi0+bWFzdGVyW2RhaS0+aWRdID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlyZWdfdmFsIHw9IFJUNTYxNl9JMlNfTVNfUzsKKwkJcnQ1NjE2LT5tYXN0ZXJbZGFpLT5pZF0gPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJcmVnX3ZhbCB8PSBSVDU2MTZfSTJTX0JQX0lOVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJcmVnX3ZhbCB8PSBSVDU2MTZfSTJTX0RGX0xFRlQ7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCXJlZ192YWwgfD0gUlQ1NjE2X0kyU19ERl9QQ01fQTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJcmVnX3ZhbCB8PSBSVDU2MTZfSTJTX0RGX1BDTV9COworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfSTJTMV9TRFAsCisJCVJUNTYxNl9JMlNfTVNfTUFTSyB8IFJUNTYxNl9JMlNfQlBfTUFTSyB8CisJCVJUNTYxNl9JMlNfREZfTUFTSywgcmVnX3ZhbCk7CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0NTYxNl9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgcnQ1NjE2X3ByaXYgKnJ0NTYxNiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXVuc2lnbmVkIGludCByZWdfdmFsID0gMDsKKworCWlmIChmcmVxID09IHJ0NTYxNi0+c3lzY2xrICYmIGNsa19pZCA9PSBydDU2MTYtPnN5c2Nsa19zcmMpCisJCXJldHVybiAwOworCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFJUNTYxNl9TQ0xLX1NfTUNMSzoKKwkJcmVnX3ZhbCB8PSBSVDU2MTZfU0NMS19TUkNfTUNMSzsKKwkJYnJlYWs7CisJY2FzZSBSVDU2MTZfU0NMS19TX1BMTDE6CisJCXJlZ192YWwgfD0gUlQ1NjE2X1NDTEtfU1JDX1BMTDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgY2xvY2sgaWQgKCVkKVxuIiwgY2xrX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9HTEJfQ0xLLAorCQlSVDU2MTZfU0NMS19TUkNfTUFTSywgcmVnX3ZhbCk7CisJcnQ1NjE2LT5zeXNjbGsgPSBmcmVxOworCXJ0NTYxNi0+c3lzY2xrX3NyYyA9IGNsa19pZDsKKworCWRldl9kYmcoZGFpLT5kZXYsICJTeXNjbGsgaXMgJWRIeiBhbmQgY2xvY2sgaWQgaXMgJWRcbiIsIGZyZXEsIGNsa19pZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydDU2MTZfc2V0X2RhaV9wbGwoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBwbGxfaWQsIGludCBzb3VyY2UsCisJCQl1bnNpZ25lZCBpbnQgZnJlcV9pbiwgdW5zaWduZWQgaW50IGZyZXFfb3V0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHJ0NTYxNl9wcml2ICpydDU2MTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgcmw2MjMxX3BsbF9jb2RlIHBsbF9jb2RlOworCWludCByZXQ7CisKKwlpZiAoc291cmNlID09IHJ0NTYxNi0+cGxsX3NyYyAmJiBmcmVxX2luID09IHJ0NTYxNi0+cGxsX2luICYmCisJICAgIGZyZXFfb3V0ID09IHJ0NTYxNi0+cGxsX291dCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWZyZXFfaW4gfHwgIWZyZXFfb3V0KSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIlBMTCBkaXNhYmxlZFxuIik7CisKKwkJcnQ1NjE2LT5wbGxfaW4gPSAwOworCQlydDU2MTYtPnBsbF9vdXQgPSAwOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2MTZfR0xCX0NMSywKKwkJCVJUNTYxNl9TQ0xLX1NSQ19NQVNLLCBSVDU2MTZfU0NMS19TUkNfTUNMSyk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoc291cmNlKSB7CisJY2FzZSBSVDU2MTZfUExMMV9TX01DTEs6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9HTEJfQ0xLLAorCQkJUlQ1NjE2X1BMTDFfU1JDX01BU0ssIFJUNTYxNl9QTEwxX1NSQ19NQ0xLKTsKKwkJYnJlYWs7CisJY2FzZSBSVDU2MTZfUExMMV9TX0JDTEsxOgorCWNhc2UgUlQ1NjE2X1BMTDFfU19CQ0xLMjoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0dMQl9DTEssCisJCQlSVDU2MTZfUExMMV9TUkNfTUFTSywgUlQ1NjE2X1BMTDFfU1JDX0JDTEsxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5rbm93biBQTEwgc291cmNlICVkXG4iLCBzb3VyY2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBybDYyMzFfcGxsX2NhbGMoZnJlcV9pbiwgZnJlcV9vdXQsICZwbGxfY29kZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5zdXBwb3J0IGlucHV0IGNsb2NrICVkXG4iLCBmcmVxX2luKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJieXBhc3M9JWQgbT0lZCBuPSVkIGs9JWRcbiIsCisJCXBsbF9jb2RlLm1fYnAsIChwbGxfY29kZS5tX2JwID8gMCA6IHBsbF9jb2RlLm1fY29kZSksCisJCXBsbF9jb2RlLm5fY29kZSwgcGxsX2NvZGUua19jb2RlKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFJUNTYxNl9QTExfQ1RSTDEsCisJCXBsbF9jb2RlLm5fY29kZSA8PCBSVDU2MTZfUExMX05fU0ZUIHwgcGxsX2NvZGUua19jb2RlKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2MTZfUExMX0NUUkwyLAorCQkocGxsX2NvZGUubV9icCA/IDAgOiBwbGxfY29kZS5tX2NvZGUpIDw8IFJUNTYxNl9QTExfTV9TRlQgfAorCQlwbGxfY29kZS5tX2JwIDw8IFJUNTYxNl9QTExfTV9CUF9TRlQpOworCisJcnQ1NjE2LT5wbGxfaW4gPSBmcmVxX2luOworCXJ0NTYxNi0+cGxsX291dCA9IGZyZXFfb3V0OworCXJ0NTYxNi0+cGxsX3NyYyA9IHNvdXJjZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0NTYxNl9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJaWYgKHNuZF9zb2NfY29kZWNfZ2V0X2JpYXNfbGV2ZWwoY29kZWMpID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTYxNl9QV1JfQU5MRzEsCisJCQkJUlQ1NjE2X1BXUl9WUkVGMSB8IFJUNTYxNl9QV1JfTUIgfAorCQkJCVJUNTYxNl9QV1JfQkcgfCBSVDU2MTZfUFdSX1ZSRUYyLAorCQkJCVJUNTYxNl9QV1JfVlJFRjEgfCBSVDU2MTZfUFdSX01CIHwKKwkJCQlSVDU2MTZfUFdSX0JHIHwgUlQ1NjE2X1BXUl9WUkVGMik7CisJCQltZGVsYXkoMTApOworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X1BXUl9BTkxHMSwKKwkJCQlSVDU2MTZfUFdSX0ZWMSB8IFJUNTYxNl9QV1JfRlYyLAorCQkJCVJUNTYxNl9QV1JfRlYxIHwgUlQ1NjE2X1BXUl9GVjIpOworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0RfTUlTQywKKwkJCQlSVDU2MTZfRF9HQVRFX0VOLCBSVDU2MTZfRF9HQVRFX0VOKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjE2X0RfTUlTQywgUlQ1NjE2X0RfR0FURV9FTiwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFJUNTYxNl9QV1JfRElHMSwgMHgwMDAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgUlQ1NjE2X1BXUl9ESUcyLCAweDAwMDApOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2MTZfUFdSX1ZPTCwgMHgwMDAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgUlQ1NjE2X1BXUl9NSVhFUiwgMHgwMDAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgUlQ1NjE2X1BXUl9BTkxHMSwgMHgwMDAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgUlQ1NjE2X1BXUl9BTkxHMiwgMHgwMDAwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydDU2MTZfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBydDU2MTZfcHJpdiAqcnQ1NjE2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlydDU2MTYtPmNvZGVjID0gY29kZWM7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBydDU2MTZfc3VzcGVuZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHJ0NTYxNl9wcml2ICpydDU2MTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXJlZ2NhY2hlX2NhY2hlX29ubHkocnQ1NjE2LT5yZWdtYXAsIHRydWUpOworCXJlZ2NhY2hlX21hcmtfZGlydHkocnQ1NjE2LT5yZWdtYXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnQ1NjE2X3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHJ0NTYxNl9wcml2ICpydDU2MTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXJlZ2NhY2hlX2NhY2hlX29ubHkocnQ1NjE2LT5yZWdtYXAsIGZhbHNlKTsKKwlyZWdjYWNoZV9zeW5jKHJ0NTYxNi0+cmVnbWFwKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHJ0NTYxNl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgcnQ1NjE2X3Jlc3VtZSBOVUxMCisjZW5kaWYKKworI2RlZmluZSBSVDU2MTZfU1RFUkVPX1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKyNkZWZpbmUgUlQ1NjE2X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1M4KQorCisKK3N0cnVjdCBzbmRfc29jX2RhaV9vcHMgcnQ1NjE2X2FpZl9kYWlfb3BzID0geworCS5od19wYXJhbXMgPSBydDU2MTZfaHdfcGFyYW1zLAorCS5zZXRfZm10ID0gcnQ1NjE2X3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrID0gcnQ1NjE2X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfcGxsID0gcnQ1NjE2X3NldF9kYWlfcGxsLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBydDU2MTZfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJydDU2MTYtYWlmMSIsCisJCS5pZCA9IFJUNTYxNl9BSUYxLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMSBQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gUlQ1NjE2X1NURVJFT19SQVRFUywKKwkJCS5mb3JtYXRzID0gUlQ1NjE2X0ZPUk1BVFMsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjEgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gUlQ1NjE2X1NURVJFT19SQVRFUywKKwkJCS5mb3JtYXRzID0gUlQ1NjE2X0ZPUk1BVFMsCisJCX0sCisJCS5vcHMgPSAmcnQ1NjE2X2FpZl9kYWlfb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfcnQ1NjE2ID0geworCS5wcm9iZSA9IHJ0NTYxNl9wcm9iZSwKKwkuc3VzcGVuZCA9IHJ0NTYxNl9zdXNwZW5kLAorCS5yZXN1bWUgPSBydDU2MTZfcmVzdW1lLAorCS5zZXRfYmlhc19sZXZlbCA9IHJ0NTYxNl9zZXRfYmlhc19sZXZlbCwKKwkuaWRsZV9iaWFzX29mZiA9IHRydWUsCisJLmNvbnRyb2xzID0gcnQ1NjE2X3NuZF9jb250cm9scywKKwkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRShydDU2MTZfc25kX2NvbnRyb2xzKSwKKwkuZGFwbV93aWRnZXRzID0gcnQ1NjE2X2RhcG1fd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUocnQ1NjE2X2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gcnQ1NjE2X2RhcG1fcm91dGVzLAorCS5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKHJ0NTYxNl9kYXBtX3JvdXRlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcnQ1NjE2X3JlZ21hcCA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDE2LAorCS51c2Vfc2luZ2xlX3J3ID0gdHJ1ZSwKKwkubWF4X3JlZ2lzdGVyID0gUlQ1NjE2X0RFVklDRV9JRCArIDEgKyAoQVJSQVlfU0laRShydDU2MTZfcmFuZ2VzKSAqCisJCQkJCSAgICAgICBSVDU2MTZfUFJfU1BBQ0lORyksCisJLnZvbGF0aWxlX3JlZyA9IHJ0NTYxNl92b2xhdGlsZV9yZWdpc3RlciwKKwkucmVhZGFibGVfcmVnID0gcnQ1NjE2X3JlYWRhYmxlX3JlZ2lzdGVyLAorCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfUkJUUkVFLAorCS5yZWdfZGVmYXVsdHMgPSBydDU2MTZfcmVnLAorCS5udW1fcmVnX2RlZmF1bHRzID0gQVJSQVlfU0laRShydDU2MTZfcmVnKSwKKwkucmFuZ2VzID0gcnQ1NjE2X3JhbmdlcywKKwkubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUocnQ1NjE2X3JhbmdlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcnQ1NjE2X2kyY19pZFtdID0geworCXsgInJ0NTYxNiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcnQ1NjE2X2kyY19pZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19PRikKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0NTYxNl9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicmVhbHRlayxydDU2MTYiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0NTYxNl9vZl9tYXRjaCk7CisjZW5kaWYKKworc3RhdGljIGludCBydDU2MTZfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHJ0NTYxNl9wcml2ICpydDU2MTY7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0OworCisJcnQ1NjE2ID0gZGV2bV9remFsbG9jKCZpMmMtPmRldiwgc2l6ZW9mKHN0cnVjdCBydDU2MTZfcHJpdiksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKHJ0NTYxNiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHJ0NTYxNik7CisKKwlydDU2MTYtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgJnJ0NTYxNl9yZWdtYXApOworCWlmIChJU19FUlIocnQ1NjE2LT5yZWdtYXApKSB7CisJCXJldCA9IFBUUl9FUlIocnQ1NjE2LT5yZWdtYXApOworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBtYXA6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWdtYXBfcmVhZChydDU2MTYtPnJlZ21hcCwgUlQ1NjE2X0RFVklDRV9JRCwgJnZhbCk7CisJaWYgKHZhbCAhPSAweDYyODEpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsCisJCQkiRGV2aWNlIHdpdGggSUQgcmVnaXN0ZXIgJSN4IGlzIG5vdCBydDU2MTZcbiIsCisJCQl2YWwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmVnbWFwX3dyaXRlKHJ0NTYxNi0+cmVnbWFwLCBSVDU2MTZfUkVTRVQsIDApOworCXJlZ21hcF91cGRhdGVfYml0cyhydDU2MTYtPnJlZ21hcCwgUlQ1NjE2X1BXUl9BTkxHMSwKKwkJUlQ1NjE2X1BXUl9WUkVGMSB8IFJUNTYxNl9QV1JfTUIgfAorCQlSVDU2MTZfUFdSX0JHIHwgUlQ1NjE2X1BXUl9WUkVGMiwKKwkJUlQ1NjE2X1BXUl9WUkVGMSB8IFJUNTYxNl9QV1JfTUIgfAorCQlSVDU2MTZfUFdSX0JHIHwgUlQ1NjE2X1BXUl9WUkVGMik7CisJbWRlbGF5KDEwKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjE2LT5yZWdtYXAsIFJUNTYxNl9QV1JfQU5MRzEsCisJCVJUNTYxNl9QV1JfRlYxIHwgUlQ1NjE2X1BXUl9GVjIsCisJCVJUNTYxNl9QV1JfRlYxIHwgUlQ1NjE2X1BXUl9GVjIpOworCisJcmV0ID0gcmVnbWFwX3JlZ2lzdGVyX3BhdGNoKHJ0NTYxNi0+cmVnbWFwLCBpbml0X2xpc3QsCisJCQkJICAgIEFSUkFZX1NJWkUoaW5pdF9saXN0KSk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfd2FybigmaTJjLT5kZXYsICJGYWlsZWQgdG8gYXBwbHkgcmVnbWFwIHBhdGNoOiAlZFxuIiwgcmV0KTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhydDU2MTYtPnJlZ21hcCwgUlQ1NjE2X1BXUl9BTkxHMSwKKwkJUlQ1NjE2X1BXUl9MRE9fRFZPX01BU0ssIFJUNTYxNl9QV1JfTERPX0RWT18xXzJWKTsKKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZpMmMtPmRldiwgJnNvY19jb2RlY19kZXZfcnQ1NjE2LAorCQkJcnQ1NjE2X2RhaSwgQVJSQVlfU0laRShydDU2MTZfZGFpKSk7CisKK30KKworc3RhdGljIGludCBydDU2MTZfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0NTYxNl9pMmNfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgcnQ1NjE2X3ByaXYgKnJ0NTYxNiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJcmVnbWFwX3dyaXRlKHJ0NTYxNi0+cmVnbWFwLCBSVDU2MTZfSFBfVk9MLCAweGM4YzgpOworCXJlZ21hcF93cml0ZShydDU2MTYtPnJlZ21hcCwgUlQ1NjE2X0xPVVRfQ1RSTDEsIDB4YzhjOCk7CisKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0NTYxNl9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInJ0NTYxNiIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihydDU2MTZfb2ZfbWF0Y2gpLAorCX0sCisJLnByb2JlID0gcnQ1NjE2X2kyY19wcm9iZSwKKwkucmVtb3ZlID0gcnQ1NjE2X2kyY19yZW1vdmUsCisJLnNodXRkb3duID0gcnQ1NjE2X2kyY19zaHV0ZG93biwKKwkuaWRfdGFibGUgPSBydDU2MTZfaTJjX2lkLAorfTsKK21vZHVsZV9pMmNfZHJpdmVyKHJ0NTYxNl9pMmNfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFJUNTYxNiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkJhcmQgTGlhbyA8YmFyZGxpYW9AcmVhbHRlay5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3J0NTYxNi5oIGIvc291bmQvc29jL2NvZGVjcy9ydDU2MTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhjZGRkCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDU2MTYuaApAQCAtMCwwICsxLDE4MTkgQEAKKy8qCisgKiBydDU2MTYuaCAgLS0gIFJUNTYxNiBBTFNBIFNvQyBhdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBSZWFsdGVrIE1pY3JvZWxlY3Ryb25pY3MKKyAqIEF1dGhvcjogSm9obm55IEhzdSA8am9obm55aHN1QHJlYWx0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1JUNTYxNl9IX18KKyNkZWZpbmUgX19SVDU2MTZfSF9fCisKKy8qIEluZm8gKi8KKyNkZWZpbmUgUlQ1NjE2X1JFU0VUCQkJCTB4MDAKKyNkZWZpbmUgUlQ1NjE2X1ZFUlNJT05fSUQJCQkweGZkCisjZGVmaW5lIFJUNTYxNl9WRU5ET1JfSUQJCQkweGZlCisjZGVmaW5lIFJUNTYxNl9ERVZJQ0VfSUQJCQkweGZmCisvKiAgSS9PIC0gT3V0cHV0ICovCisjZGVmaW5lIFJUNTYxNl9IUF9WT0wJCQkJMHgwMgorI2RlZmluZSBSVDU2MTZfTE9VVF9DVFJMMQkJCTB4MDMKKyNkZWZpbmUgUlQ1NjE2X0xPVVRfQ1RSTDIJCQkweDA1CisvKiBJL08gLSBJbnB1dCAqLworI2RlZmluZSBSVDU2MTZfSU4xX0lOMgkJCQkweDBkCisjZGVmaW5lIFJUNTYxNl9JTkwxX0lOUjFfVk9MCQkJMHgwZgorLyogSS9PIC0gQURDL0RBQy9ETUlDICovCisjZGVmaW5lIFJUNTYxNl9EQUMxX0RJR19WT0wJCQkweDE5CisjZGVmaW5lIFJUNTYxNl9BRENfRElHX1ZPTAkJCTB4MWMKKyNkZWZpbmUgUlQ1NjE2X0FEQ19CU1RfVk9MCQkJMHgxZQorLyogTWl4ZXIgLSBELUQgKi8KKyNkZWZpbmUgUlQ1NjE2X1NUTzFfQURDX01JWEVSCQkJMHgyNworI2RlZmluZSBSVDU2MTZfQURfREFfTUlYRVIJCQkweDI5CisjZGVmaW5lIFJUNTYxNl9TVE9fREFDX01JWEVSCQkJMHgyYQorCisvKiBNaXhlciAtIEFEQyAqLworI2RlZmluZSBSVDU2MTZfUkVDX0wxX01JWEVSCQkJMHgzYgorI2RlZmluZSBSVDU2MTZfUkVDX0wyX01JWEVSCQkJMHgzYworI2RlZmluZSBSVDU2MTZfUkVDX1IxX01JWEVSCQkJMHgzZAorI2RlZmluZSBSVDU2MTZfUkVDX1IyX01JWEVSCQkJMHgzZQorLyogTWl4ZXIgLSBEQUMgKi8KKyNkZWZpbmUgUlQ1NjE2X0hQT19NSVhFUgkJCTB4NDUKKyNkZWZpbmUgUlQ1NjE2X09VVF9MMV9NSVhFUgkJCTB4NGQKKyNkZWZpbmUgUlQ1NjE2X09VVF9MMl9NSVhFUgkJCTB4NGUKKyNkZWZpbmUgUlQ1NjE2X09VVF9MM19NSVhFUgkJCTB4NGYKKyNkZWZpbmUgUlQ1NjE2X09VVF9SMV9NSVhFUgkJCTB4NTAKKyNkZWZpbmUgUlQ1NjE2X09VVF9SMl9NSVhFUgkJCTB4NTEKKyNkZWZpbmUgUlQ1NjE2X09VVF9SM19NSVhFUgkJCTB4NTIKKyNkZWZpbmUgUlQ1NjE2X0xPVVRfTUlYRVIJCQkweDUzCisvKiBQb3dlciAqLworI2RlZmluZSBSVDU2MTZfUFdSX0RJRzEJCQkJMHg2MQorI2RlZmluZSBSVDU2MTZfUFdSX0RJRzIJCQkJMHg2MgorI2RlZmluZSBSVDU2MTZfUFdSX0FOTEcxCQkJMHg2MworI2RlZmluZSBSVDU2MTZfUFdSX0FOTEcyCQkJMHg2NAorI2RlZmluZSBSVDU2MTZfUFdSX01JWEVSCQkJMHg2NQorI2RlZmluZSBSVDU2MTZfUFdSX1ZPTAkJCQkweDY2CisvKiBQcml2YXRlIFJlZ2lzdGVyIENvbnRyb2wgKi8KKyNkZWZpbmUgUlQ1NjE2X1BSSVZfSU5ERVgJCQkweDZhCisjZGVmaW5lIFJUNTYxNl9QUklWX0RBVEEJCQkweDZjCisvKiBGb3JtYXQgLSBBREMvREFDICovCisjZGVmaW5lIFJUNTYxNl9JMlMxX1NEUAkJCQkweDcwCisjZGVmaW5lIFJUNTYxNl9BRERBX0NMSzEJCQkweDczCisjZGVmaW5lIFJUNTYxNl9BRERBX0NMSzIJCQkweDc0CisKKy8qIEZ1bmN0aW9uIC0gQW5hbG9nICovCisjZGVmaW5lIFJUNTYxNl9HTEJfQ0xLCQkJCTB4ODAKKyNkZWZpbmUgUlQ1NjE2X1BMTF9DVFJMMQkJCTB4ODEKKyNkZWZpbmUgUlQ1NjE2X1BMTF9DVFJMMgkJCTB4ODIKKyNkZWZpbmUgUlQ1NjE2X0hQX09WQ0QJCQkJMHg4YgorI2RlZmluZSBSVDU2MTZfREVQT1BfTTEJCQkJMHg4ZQorI2RlZmluZSBSVDU2MTZfREVQT1BfTTIJCQkJMHg4ZgorI2RlZmluZSBSVDU2MTZfREVQT1BfTTMJCQkJMHg5MAorI2RlZmluZSBSVDU2MTZfQ0hBUkdFX1BVTVAJCQkweDkxCisjZGVmaW5lIFJUNTYxNl9QVl9ERVRfU1BLX0cJCQkweDkyCisjZGVmaW5lIFJUNTYxNl9NSUNCSUFTCQkJCTB4OTMKKyNkZWZpbmUgUlQ1NjE2X0FfSkRfQ1RMMQkJCTB4OTQKKyNkZWZpbmUgUlQ1NjE2X0FfSkRfQ1RMMgkJCTB4OTUKKy8qIEZ1bmN0aW9uIC0gRGlnaXRhbCAqLworI2RlZmluZSBSVDU2MTZfRVFfQ1RSTDEJCQkJMHhiMAorI2RlZmluZSBSVDU2MTZfRVFfQ1RSTDIJCQkJMHhiMQorI2RlZmluZSBSVDU2MTZfV0lORF9GSUxURVIJCQkweGIyCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDXzEJCQkweGI0CisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDXzIJCQkweGI1CisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDXzMJCQkweGI2CisjZGVmaW5lIFJUNTYxNl9TVk9MX1pDCQkJCTB4YjcKKyNkZWZpbmUgUlQ1NjE2X0pEX0NUUkwxCQkJCTB4YmIKKyNkZWZpbmUgUlQ1NjE2X0pEX0NUUkwyCQkJCTB4YmMKKyNkZWZpbmUgUlQ1NjE2X0lSUV9DVFJMMQkJCTB4YmQKKyNkZWZpbmUgUlQ1NjE2X0lSUV9DVFJMMgkJCTB4YmUKKyNkZWZpbmUgUlQ1NjE2X0lOVF9JUlFfU1QJCQkweGJmCisjZGVmaW5lIFJUNTYxNl9HUElPX0NUUkwxCQkJMHhjMAorI2RlZmluZSBSVDU2MTZfR1BJT19DVFJMMgkJCTB4YzEKKyNkZWZpbmUgUlQ1NjE2X0dQSU9fQ1RSTDMJCQkweGMyCisjZGVmaW5lIFJUNTYxNl9QR01fUkVHX0FSUjEJCQkweGM4CisjZGVmaW5lIFJUNTYxNl9QR01fUkVHX0FSUjIJCQkweGM5CisjZGVmaW5lIFJUNTYxNl9QR01fUkVHX0FSUjMJCQkweGNhCisjZGVmaW5lIFJUNTYxNl9QR01fUkVHX0FSUjQJCQkweGNiCisjZGVmaW5lIFJUNTYxNl9QR01fUkVHX0FSUjUJCQkweGNjCisjZGVmaW5lIFJUNTYxNl9TQ0JfRlVOQwkJCQkweGNkCisjZGVmaW5lIFJUNTYxNl9TQ0JfQ1RSTAkJCQkweGNlCisjZGVmaW5lIFJUNTYxNl9CQVNFX0JBQ0sJCQkweGNmCisjZGVmaW5lIFJUNTYxNl9NUDNfUExVUzEJCQkweGQwCisjZGVmaW5lIFJUNTYxNl9NUDNfUExVUzIJCQkweGQxCisjZGVmaW5lIFJUNTYxNl9BREpfSFBGX0NUUkwxCQkJMHhkMworI2RlZmluZSBSVDU2MTZfQURKX0hQRl9DVFJMMgkJCTB4ZDQKKyNkZWZpbmUgUlQ1NjE2X0hQX0NBTElCX0FNUF9ERVQJCQkweGQ2CisjZGVmaW5lIFJUNTYxNl9IUF9DQUxJQjIJCQkweGQ3CisjZGVmaW5lIFJUNTYxNl9TVl9aQ0QxCQkJCTB4ZDkKKyNkZWZpbmUgUlQ1NjE2X1NWX1pDRDIJCQkJMHhkYQorI2RlZmluZSBSVDU2MTZfRF9NSVNDCQkJCTB4ZmEKKy8qIER1bW15IFJlZ2lzdGVyICovCisjZGVmaW5lIFJUNTYxNl9EVU1NWTIJCQkJMHhmYgorI2RlZmluZSBSVDU2MTZfRFVNTVkzCQkJCTB4ZmMKKworCisvKiBJbmRleCBvZiBDb2RlYyBQcml2YXRlIFJlZ2lzdGVyIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgUlQ1NjE2X0JJQVNfQ1VSMQkJCTB4MTIKKyNkZWZpbmUgUlQ1NjE2X0JJQVNfQ1VSMwkJCTB4MTQKKyNkZWZpbmUgUlQ1NjE2X0NMU0RfSU5UX1JFRzEJCQkweDFjCisjZGVmaW5lIFJUNTYxNl9NQU1QX0lOVF9SRUcyCQkJMHgzNworI2RlZmluZSBSVDU2MTZfQ0hPUF9EQUNfQURDCQkJMHgzZAorI2RlZmluZSBSVDU2MTZfM0RfU1BLCQkJCTB4NjMKKyNkZWZpbmUgUlQ1NjE2X1dORF8xCQkJCTB4NmMKKyNkZWZpbmUgUlQ1NjE2X1dORF8yCQkJCTB4NmQKKyNkZWZpbmUgUlQ1NjE2X1dORF8zCQkJCTB4NmUKKyNkZWZpbmUgUlQ1NjE2X1dORF80CQkJCTB4NmYKKyNkZWZpbmUgUlQ1NjE2X1dORF81CQkJCTB4NzAKKyNkZWZpbmUgUlQ1NjE2X1dORF84CQkJCTB4NzMKKyNkZWZpbmUgUlQ1NjE2X0RJUF9TUEtfSU5GCQkJMHg3NQorI2RlZmluZSBSVDU2MTZfSFBfRENDX0lOVDEJCQkweDc3CisjZGVmaW5lIFJUNTYxNl9FUV9CV19MT1AJCQkweGEwCisjZGVmaW5lIFJUNTYxNl9FUV9HTl9MT1AJCQkweGExCisjZGVmaW5lIFJUNTYxNl9FUV9GQ19CUDEJCQkweGEyCisjZGVmaW5lIFJUNTYxNl9FUV9CV19CUDEJCQkweGEzCisjZGVmaW5lIFJUNTYxNl9FUV9HTl9CUDEJCQkweGE0CisjZGVmaW5lIFJUNTYxNl9FUV9GQ19CUDIJCQkweGE1CisjZGVmaW5lIFJUNTYxNl9FUV9CV19CUDIJCQkweGE2CisjZGVmaW5lIFJUNTYxNl9FUV9HTl9CUDIJCQkweGE3CisjZGVmaW5lIFJUNTYxNl9FUV9GQ19CUDMJCQkweGE4CisjZGVmaW5lIFJUNTYxNl9FUV9CV19CUDMJCQkweGE5CisjZGVmaW5lIFJUNTYxNl9FUV9HTl9CUDMJCQkweGFhCisjZGVmaW5lIFJUNTYxNl9FUV9GQ19CUDQJCQkweGFiCisjZGVmaW5lIFJUNTYxNl9FUV9CV19CUDQJCQkweGFjCisjZGVmaW5lIFJUNTYxNl9FUV9HTl9CUDQJCQkweGFkCisjZGVmaW5lIFJUNTYxNl9FUV9GQ19ISVAxCQkJMHhhZQorI2RlZmluZSBSVDU2MTZfRVFfR05fSElQMQkJCTB4YWYKKyNkZWZpbmUgUlQ1NjE2X0VRX0ZDX0hJUDIJCQkweGIwCisjZGVmaW5lIFJUNTYxNl9FUV9CV19ISVAyCQkJMHhiMQorI2RlZmluZSBSVDU2MTZfRVFfR05fSElQMgkJCTB4YjIKKyNkZWZpbmUgUlQ1NjE2X0VRX1BSRV9WT0wJCQkweGIzCisjZGVmaW5lIFJUNTYxNl9FUV9QU1RfVk9MCQkJMHhiNAorCisKKy8qIGdsb2JhbCBkZWZpbml0aW9uICovCisjZGVmaW5lIFJUNTYxNl9MX01VVEUJCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X0xfTVVURV9TRlQJCQkxNQorI2RlZmluZSBSVDU2MTZfVk9MX0xfTVVURQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9WT0xfTF9TRlQJCQkxNAorI2RlZmluZSBSVDU2MTZfUl9NVVRFCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X1JfTVVURV9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9WT0xfUl9NVVRFCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfVk9MX1JfU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfTF9WT0xfTUFTSwkJCSgweDNmIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9MX1ZPTF9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9SX1ZPTF9NQVNLCQkJKDB4M2YpCisjZGVmaW5lIFJUNTYxNl9SX1ZPTF9TRlQJCQkwCisKKy8qIExPVVQgQ29udHJvbCAyKDB4MDUpICovCisjZGVmaW5lIFJUNTYxNl9FTl9ERk8JCQkJKDB4MSA8PCAxNSkKKworLyogSU4xIGFuZCBJTjIgQ29udHJvbCAoMHgwZCkgKi8KKy8qIElOMyBhbmQgSU40IENvbnRyb2wgKDB4MGUpICovCisjZGVmaW5lIFJUNTYxNl9CU1RfTUFTSzEJCQkoMHhmPDwxMikKKyNkZWZpbmUgUlQ1NjE2X0JTVF9TRlQxCQkJCTEyCisjZGVmaW5lIFJUNTYxNl9CU1RfTUFTSzIJCQkoMHhmPDw4KQorI2RlZmluZSBSVDU2MTZfQlNUX1NGVDIJCQkJOAorI2RlZmluZSBSVDU2MTZfSU5fREYxCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X0lOX1NGVDEJCQkJNworI2RlZmluZSBSVDU2MTZfSU5fREYyCQkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0lOX1NGVDIJCQkJNgorCisvKiBJTkwxIGFuZCBJTlIxIFZvbHVtZSBDb250cm9sICgweDBmKSAqLworI2RlZmluZSBSVDU2MTZfSU5MX1ZPTF9NQVNLCQkJKDB4MWYgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0lOTF9WT0xfU0ZUCQkJOAorI2RlZmluZSBSVDU2MTZfSU5SX1NFTF9NQVNLCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfSU5SX1NFTF9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9JTlJfU0VMX0lONE4JCQkoMHgwIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9JTlJfU0VMX01PTk9OCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfSU5SX1ZPTF9NQVNLCQkJKDB4MWYpCisjZGVmaW5lIFJUNTYxNl9JTlJfVk9MX1NGVAkJCTAKKworLyogREFDMSBEaWdpdGFsIFZvbHVtZSAoMHgxOSkgKi8KKyNkZWZpbmUgUlQ1NjE2X0RBQ19MMV9WT0xfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9EQUNfTDFfVk9MX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X0RBQ19SMV9WT0xfTUFTSwkJCSgweGZmKQorI2RlZmluZSBSVDU2MTZfREFDX1IxX1ZPTF9TRlQJCQkwCisKKy8qIERBQzIgRGlnaXRhbCBWb2x1bWUgKDB4MWEpICovCisjZGVmaW5lIFJUNTYxNl9EQUNfTDJfVk9MX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBSVDU2MTZfREFDX0wyX1ZPTF9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9EQUNfUjJfVk9MX01BU0sJCQkoMHhmZikKKyNkZWZpbmUgUlQ1NjE2X0RBQ19SMl9WT0xfU0ZUCQkJMAorCisvKiBBREMgRGlnaXRhbCBWb2x1bWUgQ29udHJvbCAoMHgxYykgKi8KKyNkZWZpbmUgUlQ1NjE2X0FEQ19MX1ZPTF9NQVNLCQkJKDB4N2YgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0FEQ19MX1ZPTF9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9BRENfUl9WT0xfTUFTSwkJCSgweDdmKQorI2RlZmluZSBSVDU2MTZfQURDX1JfVk9MX1NGVAkJCTAKKworLyogTW9ubyBBREMgRGlnaXRhbCBWb2x1bWUgQ29udHJvbCAoMHgxZCkgKi8KKyNkZWZpbmUgUlQ1NjE2X01fTU9OT19BRENfTAkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9NX01PTk9fQURDX0xfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjE2X01PTk9fQURDX0xfVk9MX01BU0sJCSgweDdmIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9NT05PX0FEQ19MX1ZPTF9TRlQJCTgKKyNkZWZpbmUgUlQ1NjE2X01fTU9OT19BRENfUgkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X01fTU9OT19BRENfUl9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9NT05PX0FEQ19SX1ZPTF9NQVNLCQkoMHg3ZikKKyNkZWZpbmUgUlQ1NjE2X01PTk9fQURDX1JfVk9MX1NGVAkJMAorCisvKiBBREMgQm9vc3QgVm9sdW1lIENvbnRyb2wgKDB4MWUpICovCisjZGVmaW5lIFJUNTYxNl9BRENfTF9CU1RfTUFTSwkJCSgweDMgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9BRENfTF9CU1RfU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X0FEQ19SX0JTVF9NQVNLCQkJKDB4MyA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0FEQ19SX0JTVF9TRlQJCQkxMgorI2RlZmluZSBSVDU2MTZfQURDX0NPTVBfTUFTSwkJCSgweDMgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9BRENfQ09NUF9TRlQJCQkxMAorCisvKiBTdGVyZW8gQURDMSBNaXhlciBDb250cm9sICgweDI3KSAqLworI2RlZmluZSBSVDU2MTZfTV9TVE8xX0FEQ19MMQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9NX1NUTzFfQURDX0wxX1NGVAkJMTQKKyNkZWZpbmUgUlQ1NjE2X01fU1RPMV9BRENfUjEJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9NX1NUTzFfQURDX1IxX1NGVAkJNgorCisvKiBBREMgTWl4ZXIgdG8gREFDIE1peGVyIENvbnRyb2wgKDB4MjkpICovCisjZGVmaW5lIFJUNTYxNl9NX0FEQ01JWF9MCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X01fQURDTUlYX0xfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjE2X01fSUYxX0RBQ19MCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X01fSUYxX0RBQ19MX1NGVAkJCTE0CisjZGVmaW5lIFJUNTYxNl9NX0FEQ01JWF9SCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfTV9BRENNSVhfUl9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9NX0lGMV9EQUNfUgkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X01fSUYxX0RBQ19SX1NGVAkJCTYKKworLyogU3RlcmVvIERBQyBNaXhlciBDb250cm9sICgweDJhKSAqLworI2RlZmluZSBSVDU2MTZfTV9EQUNfTDFfTUlYTAkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19MMV9NSVhMX1NGVAkJMTQKKyNkZWZpbmUgUlQ1NjE2X0RBQ19MMV9TVE9fTF9WT0xfTUFTSwkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0RBQ19MMV9TVE9fTF9WT0xfU0ZUCQkxMworI2RlZmluZSBSVDU2MTZfTV9EQUNfUjFfTUlYTAkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X01fREFDX1IxX01JWExfU0ZUCQk5CisjZGVmaW5lIFJUNTYxNl9EQUNfUjFfU1RPX0xfVk9MX01BU0sJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0RBQ19SMV9TVE9fTF9WT0xfU0ZUCQk4CisjZGVmaW5lIFJUNTYxNl9NX0RBQ19SMV9NSVhSCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfTV9EQUNfUjFfTUlYUl9TRlQJCTYKKyNkZWZpbmUgUlQ1NjE2X0RBQ19SMV9TVE9fUl9WT0xfTUFTSwkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfREFDX1IxX1NUT19SX1ZPTF9TRlQJCTUKKyNkZWZpbmUgUlQ1NjE2X01fREFDX0wxX01JWFIJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19MMV9NSVhSX1NGVAkJMQorI2RlZmluZSBSVDU2MTZfREFDX0wxX1NUT19SX1ZPTF9NQVNLCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfREFDX0wxX1NUT19SX1ZPTF9TRlQJCTAKKworLyogREQgTWl4ZXIgQ29udHJvbCAoMHgyYikgKi8KKyNkZWZpbmUgUlQ1NjE2X01fU1RPX0REX0wxCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X01fU1RPX0REX0wxX1NGVAkJCTE0CisjZGVmaW5lIFJUNTYxNl9TVE9fRERfTDFfVk9MX01BU0sJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9EQUNfRERfTDFfVk9MX1NGVAkJMTMKKyNkZWZpbmUgUlQ1NjE2X01fU1RPX0REX0wyCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X01fU1RPX0REX0wyX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9TVE9fRERfTDJfVk9MX01BU0sJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9TVE9fRERfTDJfVk9MX1NGVAkJMTEKKyNkZWZpbmUgUlQ1NjE2X01fU1RPX0REX1IyX0wJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfTV9TVE9fRERfUjJfTF9TRlQJCTEwCisjZGVmaW5lIFJUNTYxNl9TVE9fRERfUjJfTF9WT0xfTUFTSwkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2MTZfU1RPX0REX1IyX0xfVk9MX1NGVAkJOQorI2RlZmluZSBSVDU2MTZfTV9TVE9fRERfUjEJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9NX1NUT19ERF9SMV9TRlQJCQk2CisjZGVmaW5lIFJUNTYxNl9TVE9fRERfUjFfVk9MX01BU0sJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X1NUT19ERF9SMV9WT0xfU0ZUCQk1CisjZGVmaW5lIFJUNTYxNl9NX1NUT19ERF9SMgkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X01fU1RPX0REX1IyX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X1NUT19ERF9SMl9WT0xfTUFTSwkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2MTZfU1RPX0REX1IyX1ZPTF9TRlQJCTMKKyNkZWZpbmUgUlQ1NjE2X01fU1RPX0REX0wyX1IJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9NX1NUT19ERF9MMl9SX1NGVAkJMgorI2RlZmluZSBSVDU2MTZfU1RPX0REX0wyX1JfVk9MX01BU0sJCSgweDEgPDwgMSkKKyNkZWZpbmUgUlQ1NjE2X1NUT19ERF9MMl9SX1ZPTF9TRlQJCTEKKworLyogRGlnaXRhbCBNaXhlciBDb250cm9sICgweDJjKSAqLworI2RlZmluZSBSVDU2MTZfTV9TVE9fTF9EQUNfTAkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9NX1NUT19MX0RBQ19MX1NGVAkJMTUKKyNkZWZpbmUgUlQ1NjE2X1NUT19MX0RBQ19MX1ZPTF9NQVNLCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfU1RPX0xfREFDX0xfVk9MX1NGVAkJMTQKKyNkZWZpbmUgUlQ1NjE2X01fREFDX0wyX0RBQ19MCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X01fREFDX0wyX0RBQ19MX1NGVAkJMTMKKyNkZWZpbmUgUlQ1NjE2X0RBQ19MMl9EQUNfTF9WT0xfTUFTSwkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0RBQ19MMl9EQUNfTF9WT0xfU0ZUCQkxMgorI2RlZmluZSBSVDU2MTZfTV9TVE9fUl9EQUNfUgkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9NX1NUT19SX0RBQ19SX1NGVAkJMTEKKyNkZWZpbmUgUlQ1NjE2X1NUT19SX0RBQ19SX1ZPTF9NQVNLCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfU1RPX1JfREFDX1JfVk9MX1NGVAkJMTAKKyNkZWZpbmUgUlQ1NjE2X01fREFDX1IyX0RBQ19SCQkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2MTZfTV9EQUNfUjJfREFDX1JfU0ZUCQk5CisjZGVmaW5lIFJUNTYxNl9EQUNfUjJfREFDX1JfVk9MX01BU0sJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0RBQ19SMl9EQUNfUl9WT0xfU0ZUCQk4CisKKy8qIERTUCBQYXRoIENvbnRyb2wgMSAoMHgyZCkgKi8KKyNkZWZpbmUgUlQ1NjE2X1JYRFBfU1JDX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfUlhEUF9TUkNfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjE2X1JYRFBfU1JDX05PUgkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9SWERQX1NSQ19ESVYzCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1RYRFBfU1JDX01BU0sJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfVFhEUF9TUkNfU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X1RYRFBfU1JDX05PUgkJCSgweDAgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9UWERQX1NSQ19ESVYzCQkJKDB4MSA8PCAxNCkKKworLyogRFNQIFBhdGggQ29udHJvbCAyICgweDJlKSAqLworI2RlZmluZSBSVDU2MTZfREFDX0wyX1NFTF9NQVNLCQkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X0RBQ19MMl9TRUxfU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X0RBQ19MMl9TRUxfSUYyCQkJKDB4MCA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X0RBQ19MMl9TRUxfSUYzCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X0RBQ19MMl9TRUxfVFhEQwkJCSgweDIgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9EQUNfTDJfU0VMX0JBU1MJCQkoMHgzIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfREFDX1IyX1NFTF9NQVNLCQkJKDB4MyA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0RBQ19SMl9TRUxfU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjE2X0RBQ19SMl9TRUxfSUYyCQkJKDB4MCA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0RBQ19SMl9TRUxfSUYzCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0RBQ19SMl9TRUxfVFhEQwkJCSgweDIgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9JRjJfQURDX0xfU0VMX01BU0sJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9JRjJfQURDX0xfU0VMX1NGVAkJMTEKKyNkZWZpbmUgUlQ1NjE2X0lGMl9BRENfTF9TRUxfVFhEUAkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X0lGMl9BRENfTF9TRUxfUEFTUwkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X0lGMl9BRENfUl9TRUxfTUFTSwkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X0lGMl9BRENfUl9TRUxfU0ZUCQkxMAorI2RlZmluZSBSVDU2MTZfSUYyX0FEQ19SX1NFTF9UWERQCQkoMHgwIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfSUYyX0FEQ19SX1NFTF9QQVNTCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfUlhEQ19TRUxfTUFTSwkJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X1JYRENfU0VMX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X1JYRENfU0VMX05PUgkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X1JYRENfU0VMX0wyUgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X1JYRENfU0VMX1IyTAkJCSgweDIgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X1JYRENfU0VMX1NXQVAJCQkoMHgzIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9SWERQX1NFTF9NQVNLCQkJKDB4MyA8PCA2KQorI2RlZmluZSBSVDU2MTZfUlhEUF9TRUxfU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfUlhEUF9TRUxfTk9SCQkJKDB4MCA8PCA2KQorI2RlZmluZSBSVDU2MTZfUlhEUF9TRUxfTDJSCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfUlhEUF9TRUxfUjJMCQkJKDB4MiA8PCA2KQorI2RlZmluZSBSVDU2MTZfUlhEUF9TRUxfU1dBUAkJCSgweDMgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X1RYRENfU0VMX01BU0sJCQkoMHgzIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9UWERDX1NFTF9TRlQJCQk0CisjZGVmaW5lIFJUNTYxNl9UWERDX1NFTF9OT1IJCQkoMHgwIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9UWERDX1NFTF9MMlIJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9UWERDX1NFTF9SMkwJCQkoMHgyIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9UWERDX1NFTF9TV0FQCQkJKDB4MyA8PCA0KQorI2RlZmluZSBSVDU2MTZfVFhEUF9TRUxfTUFTSwkJCSgweDMgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X1RYRFBfU0VMX1NGVAkJCTIKKyNkZWZpbmUgUlQ1NjE2X1RYRFBfU0VMX05PUgkJCSgweDAgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X1RYRFBfU0VMX0wyUgkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X1RYRFBfU0VMX1IyTAkJCSgweDIgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X1RSWERQX1NFTF9TV0FQCQkJKDB4MyA8PCAyKQorCisvKiBSRUMgTGVmdCBNaXhlciBDb250cm9sIDEgKDB4M2IpICovCisjZGVmaW5lIFJUNTYxNl9HX0xOX0wyX1JNX0xfTUFTSwkJKDB4NyA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0dfSU5fTDJfUk1fTF9TRlQJCQkxMworI2RlZmluZSBSVDU2MTZfR19MTl9MMV9STV9MX01BU0sJCSgweDcgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9HX0lOX0wxX1JNX0xfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjE2X0dfQlNUM19STV9MX01BU0sJCQkoMHg3IDw8IDQpCisjZGVmaW5lIFJUNTYxNl9HX0JTVDNfUk1fTF9TRlQJCQk0CisjZGVmaW5lIFJUNTYxNl9HX0JTVDJfUk1fTF9NQVNLCQkJKDB4NyA8PCAxKQorI2RlZmluZSBSVDU2MTZfR19CU1QyX1JNX0xfU0ZUCQkJMQorCisvKiBSRUMgTGVmdCBNaXhlciBDb250cm9sIDIgKDB4M2MpICovCisjZGVmaW5lIFJUNTYxNl9HX0JTVDFfUk1fTF9NQVNLCQkJKDB4NyA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0dfQlNUMV9STV9MX1NGVAkJCTEzCisjZGVmaW5lIFJUNTYxNl9HX09NX0xfUk1fTF9NQVNLCQkJKDB4NyA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X0dfT01fTF9STV9MX1NGVAkJCTEwCisjZGVmaW5lIFJUNTYxNl9NX0lOMl9MX1JNX0wJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9NX0lOMl9MX1JNX0xfU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfTV9JTjFfTF9STV9MCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfTV9JTjFfTF9STV9MX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X01fQlNUM19STV9MCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2MTZfTV9CU1QzX1JNX0xfU0ZUCQkJMworI2RlZmluZSBSVDU2MTZfTV9CU1QyX1JNX0wJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9NX0JTVDJfUk1fTF9TRlQJCQkyCisjZGVmaW5lIFJUNTYxNl9NX0JTVDFfUk1fTAkJCSgweDEgPDwgMSkKKyNkZWZpbmUgUlQ1NjE2X01fQlNUMV9STV9MX1NGVAkJCTEKKyNkZWZpbmUgUlQ1NjE2X01fT01fTF9STV9MCQkJKDB4MSkKKyNkZWZpbmUgUlQ1NjE2X01fT01fTF9STV9MX1NGVAkJCTAKKworLyogUkVDIFJpZ2h0IE1peGVyIENvbnRyb2wgMSAoMHgzZCkgKi8KKyNkZWZpbmUgUlQ1NjE2X0dfSU4yX1JfUk1fUl9NQVNLCQkoMHg3IDw8IDEzKQorI2RlZmluZSBSVDU2MTZfR19JTjJfUl9STV9SX1NGVAkJCTEzCisjZGVmaW5lIFJUNTYxNl9HX0lOMV9SX1JNX1JfTUFTSwkJKDB4NyA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X0dfSU4xX1JfUk1fUl9TRlQJCQkxMAorI2RlZmluZSBSVDU2MTZfR19CU1QzX1JNX1JfTUFTSwkJCSgweDcgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X0dfQlNUM19STV9SX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X0dfQlNUMl9STV9SX01BU0sJCQkoMHg3IDw8IDEpCisjZGVmaW5lIFJUNTYxNl9HX0JTVDJfUk1fUl9TRlQJCQkxCisKKy8qIFJFQyBSaWdodCBNaXhlciBDb250cm9sIDIgKDB4M2UpICovCisjZGVmaW5lIFJUNTYxNl9HX0JTVDFfUk1fUl9NQVNLCQkJKDB4NyA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0dfQlNUMV9STV9SX1NGVAkJCTEzCisjZGVmaW5lIFJUNTYxNl9HX09NX1JfUk1fUl9NQVNLCQkJKDB4NyA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X0dfT01fUl9STV9SX1NGVAkJCTEwCisjZGVmaW5lIFJUNTYxNl9NX0lOMl9SX1JNX1IJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9NX0lOMl9SX1JNX1JfU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfTV9JTjFfUl9STV9SCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfTV9JTjFfUl9STV9SX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X01fQlNUM19STV9SCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2MTZfTV9CU1QzX1JNX1JfU0ZUCQkJMworI2RlZmluZSBSVDU2MTZfTV9CU1QyX1JNX1IJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9NX0JTVDJfUk1fUl9TRlQJCQkyCisjZGVmaW5lIFJUNTYxNl9NX0JTVDFfUk1fUgkJCSgweDEgPDwgMSkKKyNkZWZpbmUgUlQ1NjE2X01fQlNUMV9STV9SX1NGVAkJCTEKKyNkZWZpbmUgUlQ1NjE2X01fT01fUl9STV9SCQkJKDB4MSkKKyNkZWZpbmUgUlQ1NjE2X01fT01fUl9STV9SX1NGVAkJCTAKKworLyogSFBNSVggQ29udHJvbCAoMHg0NSkgKi8KKyNkZWZpbmUgUlQ1NjE2X01fREFDMV9ITQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9NX0RBQzFfSE1fU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X01fSFBWT0xfSE0JCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfTV9IUFZPTF9ITV9TRlQJCQkxMworI2RlZmluZSBSVDU2MTZfR19IUE9NSVhfTUFTSwkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9HX0hQT01JWF9TRlQJCQkxMgorCisvKiBTUEsgTGVmdCBNaXhlciBDb250cm9sICgweDQ2KSAqLworI2RlZmluZSBSVDU2MTZfR19STV9MX1NNX0xfTUFTSwkJCSgweDMgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9HX1JNX0xfU01fTF9TRlQJCQkxNAorI2RlZmluZSBSVDU2MTZfR19JTl9MX1NNX0xfTUFTSwkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9HX0lOX0xfU01fTF9TRlQJCQkxMgorI2RlZmluZSBSVDU2MTZfR19EQUNfTDFfU01fTF9NQVNLCQkoMHgzIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfR19EQUNfTDFfU01fTF9TRlQJCTEwCisjZGVmaW5lIFJUNTYxNl9HX0RBQ19MMl9TTV9MX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0dfREFDX0wyX1NNX0xfU0ZUCQk4CisjZGVmaW5lIFJUNTYxNl9HX09NX0xfU01fTF9NQVNLCQkJKDB4MyA8PCA2KQorI2RlZmluZSBSVDU2MTZfR19PTV9MX1NNX0xfU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfTV9STV9MX1NNX0wJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9NX1JNX0xfU01fTF9TRlQJCQk1CisjZGVmaW5lIFJUNTYxNl9NX0lOX0xfU01fTAkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X01fSU5fTF9TTV9MX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X01fREFDX0wxX1NNX0wJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19MMV9TTV9MX1NGVAkJMworI2RlZmluZSBSVDU2MTZfTV9EQUNfTDJfU01fTAkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X01fREFDX0wyX1NNX0xfU0ZUCQkyCisjZGVmaW5lIFJUNTYxNl9NX09NX0xfU01fTAkJCSgweDEgPDwgMSkKKyNkZWZpbmUgUlQ1NjE2X01fT01fTF9TTV9MX1NGVAkJCTEKKworLyogU1BLIFJpZ2h0IE1peGVyIENvbnRyb2wgKDB4NDcpICovCisjZGVmaW5lIFJUNTYxNl9HX1JNX1JfU01fUl9NQVNLCQkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X0dfUk1fUl9TTV9SX1NGVAkJCTE0CisjZGVmaW5lIFJUNTYxNl9HX0lOX1JfU01fUl9NQVNLCQkJKDB4MyA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0dfSU5fUl9TTV9SX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9HX0RBQ19SMV9TTV9SX01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9HX0RBQ19SMV9TTV9SX1NGVAkJMTAKKyNkZWZpbmUgUlQ1NjE2X0dfREFDX1IyX1NNX1JfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZSBSVDU2MTZfR19EQUNfUjJfU01fUl9TRlQJCTgKKyNkZWZpbmUgUlQ1NjE2X0dfT01fUl9TTV9SX01BU0sJCQkoMHgzIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9HX09NX1JfU01fUl9TRlQJCQk2CisjZGVmaW5lIFJUNTYxNl9NX1JNX1JfU01fUgkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X01fUk1fUl9TTV9SX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X01fSU5fUl9TTV9SCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfTV9JTl9SX1NNX1JfU0ZUCQkJNAorI2RlZmluZSBSVDU2MTZfTV9EQUNfUjFfU01fUgkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X01fREFDX1IxX1NNX1JfU0ZUCQkzCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19SMl9TTV9SCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2MTZfTV9EQUNfUjJfU01fUl9TRlQJCTIKKyNkZWZpbmUgUlQ1NjE2X01fT01fUl9TTV9SCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2MTZfTV9PTV9SX1NNX1JfU0ZUCQkJMQorCisvKiBTUE9MTUlYIENvbnRyb2wgKDB4NDgpICovCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19SMV9TUE1fTAkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19SMV9TUE1fTF9TRlQJCTE1CisjZGVmaW5lIFJUNTYxNl9NX0RBQ19MMV9TUE1fTAkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19MMV9TUE1fTF9TRlQJCTE0CisjZGVmaW5lIFJUNTYxNl9NX1NWX1JfU1BNX0wJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfTV9TVl9SX1NQTV9MX1NGVAkJCTEzCisjZGVmaW5lIFJUNTYxNl9NX1NWX0xfU1BNX0wJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2MTZfTV9TVl9MX1NQTV9MX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9NX0JTVDFfU1BNX0wJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfTV9CU1QxX1NQTV9MX1NGVAkJCTExCisKKy8qIFNQT1JNSVggQ29udHJvbCAoMHg0OSkgKi8KKyNkZWZpbmUgUlQ1NjE2X01fREFDX1IxX1NQTV9SCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X01fREFDX1IxX1NQTV9SX1NGVAkJMTMKKyNkZWZpbmUgUlQ1NjE2X01fU1ZfUl9TUE1fUgkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9NX1NWX1JfU1BNX1JfU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjE2X01fQlNUMV9TUE1fUgkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9NX0JTVDFfU1BNX1JfU0ZUCQkJMTEKKworLyogU1BPTE1JWCAvIFNQT1JNSVggUmF0aW8gQ29udHJvbCAoMHg0YSkgKi8KKyNkZWZpbmUgUlQ1NjE2X1NQT19DTFNEX1JBVElPX01BU0sJCSgweDcpCisjZGVmaW5lIFJUNTYxNl9TUE9fQ0xTRF9SQVRJT19TRlQJCTAKKworLyogTW9ubyBPdXRwdXQgTWl4ZXIgQ29udHJvbCAoMHg0YykgKi8KKyNkZWZpbmUgUlQ1NjE2X01fREFDX1IyX01NCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X01fREFDX1IyX01NX1NGVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9NX0RBQ19MMl9NTQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19MMl9NTV9TRlQJCQkxNAorI2RlZmluZSBSVDU2MTZfTV9PVl9SX01NCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X01fT1ZfUl9NTV9TRlQJCQkxMworI2RlZmluZSBSVDU2MTZfTV9PVl9MX01NCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X01fT1ZfTF9NTV9TRlQJCQkxMgorI2RlZmluZSBSVDU2MTZfTV9CU1QxX01NCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X01fQlNUMV9NTV9TRlQJCQkxMQorI2RlZmluZSBSVDU2MTZfR19NT05PTUlYX01BU0sJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfR19NT05PTUlYX1NGVAkJCTEwCisKKy8qIE91dHB1dCBMZWZ0IE1peGVyIENvbnRyb2wgMSAoMHg0ZCkgKi8KKyNkZWZpbmUgUlQ1NjE2X0dfQlNUMl9PTV9MX01BU0sJCQkoMHg3IDw8IDEwKQorI2RlZmluZSBSVDU2MTZfR19CU1QyX09NX0xfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjE2X0dfQlNUMV9PTV9MX01BU0sJCQkoMHg3IDw8IDcpCisjZGVmaW5lIFJUNTYxNl9HX0JTVDFfT01fTF9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9HX0lOMV9MX09NX0xfTUFTSwkJKDB4NyA8PCA0KQorI2RlZmluZSBSVDU2MTZfR19JTjFfTF9PTV9MX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X0dfUk1fTF9PTV9MX01BU0sJCQkoMHg3IDw8IDEpCisjZGVmaW5lIFJUNTYxNl9HX1JNX0xfT01fTF9TRlQJCQkxCisKKy8qIE91dHB1dCBMZWZ0IE1peGVyIENvbnRyb2wgMiAoMHg0ZSkgKi8KKyNkZWZpbmUgUlQ1NjE2X0dfREFDX0wxX09NX0xfTUFTSwkJKDB4NyA8PCA3KQorI2RlZmluZSBSVDU2MTZfR19EQUNfTDFfT01fTF9TRlQJCTcKKyNkZWZpbmUgUlQ1NjE2X0dfSU4yX0xfT01fTF9NQVNLCQkoMHg3IDw8IDQpCisjZGVmaW5lIFJUNTYxNl9HX0lOMl9MX09NX0xfU0ZUCQkJNAorCisvKiBPdXRwdXQgTGVmdCBNaXhlciBDb250cm9sIDMgKDB4NGYpICovCisjZGVmaW5lIFJUNTYxNl9NX0lOMl9MX09NX0wJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9NX0lOMl9MX09NX0xfU0ZUCQkJOQorI2RlZmluZSBSVDU2MTZfTV9CU1QyX09NX0wJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9NX0JTVDJfT01fTF9TRlQJCQk2CisjZGVmaW5lIFJUNTYxNl9NX0JTVDFfT01fTAkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X01fQlNUMV9PTV9MX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X01fSU4xX0xfT01fTAkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X01fSU4xX0xfT01fTF9TRlQJCQk0CisjZGVmaW5lIFJUNTYxNl9NX1JNX0xfT01fTAkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X01fUk1fTF9PTV9MX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X01fREFDX0wxX09NX0wJCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfTV9EQUNfTDFfT01fTF9TRlQJCTAKKworLyogT3V0cHV0IFJpZ2h0IE1peGVyIENvbnRyb2wgMSAoMHg1MCkgKi8KKyNkZWZpbmUgUlQ1NjE2X0dfQlNUMl9PTV9SX01BU0sJCQkoMHg3IDw8IDEwKQorI2RlZmluZSBSVDU2MTZfR19CU1QyX09NX1JfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjE2X0dfQlNUMV9PTV9SX01BU0sJCQkoMHg3IDw8IDcpCisjZGVmaW5lIFJUNTYxNl9HX0JTVDFfT01fUl9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9HX0lOMV9SX09NX1JfTUFTSwkJKDB4NyA8PCA0KQorI2RlZmluZSBSVDU2MTZfR19JTjFfUl9PTV9SX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X0dfUk1fUl9PTV9SX01BU0sJCQkoMHg3IDw8IDEpCisjZGVmaW5lIFJUNTYxNl9HX1JNX1JfT01fUl9TRlQJCQkxCisKKy8qIE91dHB1dCBSaWdodCBNaXhlciBDb250cm9sIDIgKDB4NTEpICovCisjZGVmaW5lIFJUNTYxNl9HX0RBQ19SMV9PTV9SX01BU0sJCSgweDcgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X0dfREFDX1IxX09NX1JfU0ZUCQk3CisjZGVmaW5lIFJUNTYxNl9HX0lOMl9SX09NX1JfTUFTSwkJKDB4NyA8PCA0KQorI2RlZmluZSBSVDU2MTZfR19JTjJfUl9PTV9SX1NGVAkJCTQKKworLyogT3V0cHV0IFJpZ2h0IE1peGVyIENvbnRyb2wgMyAoMHg1MikgKi8KKyNkZWZpbmUgUlQ1NjE2X01fSU4yX1JfT01fUgkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X01fSU4yX1JfT01fUl9TRlQJCQk5CisjZGVmaW5lIFJUNTYxNl9NX0JTVDJfT01fUgkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X01fQlNUMl9PTV9SX1NGVAkJCTYKKyNkZWZpbmUgUlQ1NjE2X01fQlNUMV9PTV9SCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfTV9CU1QxX09NX1JfU0ZUCQkJNQorI2RlZmluZSBSVDU2MTZfTV9JTjFfUl9PTV9SCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfTV9JTjFfUl9PTV9SX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X01fUk1fUl9PTV9SCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2MTZfTV9STV9SX09NX1JfU0ZUCQkJMworI2RlZmluZSBSVDU2MTZfTV9EQUNfUjFfT01fUgkJCSgweDEpCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19SMV9PTV9SX1NGVAkJMAorCisvKiBMT1VUIE1peGVyIENvbnRyb2wgKDB4NTMpICovCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19MMV9MTQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9NX0RBQ19MMV9MTV9TRlQJCQkxNQorI2RlZmluZSBSVDU2MTZfTV9EQUNfUjFfTE0JCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfTV9EQUNfUjFfTE1fU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X01fT1ZfTF9MTQkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9NX09WX0xfTE1fU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjE2X01fT1ZfUl9MTQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9NX09WX1JfTE1fU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjE2X0dfTE9VVE1JWF9NQVNLCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X0dfTE9VVE1JWF9TRlQJCQkxMQorCisvKiBQb3dlciBNYW5hZ2VtZW50IGZvciBEaWdpdGFsIDEgKDB4NjEpICovCisjZGVmaW5lIFJUNTYxNl9QV1JfSTJTMQkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfUFdSX0kyUzFfQklUCQkJMTUKKyNkZWZpbmUgUlQ1NjE2X1BXUl9JMlMyCQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9QV1JfSTJTMl9CSVQJCQkxNAorI2RlZmluZSBSVDU2MTZfUFdSX0RBQ19MMQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9QV1JfREFDX0wxX0JJVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9QV1JfREFDX1IxCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9EQUNfUjFfQklUCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X1BXUl9BRENfTAkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X1BXUl9BRENfTF9CSVQJCQkyCisjZGVmaW5lIFJUNTYxNl9QV1JfQURDX1IJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTYxNl9QV1JfQURDX1JfQklUCQkJMQorCisvKiBQb3dlciBNYW5hZ2VtZW50IGZvciBEaWdpdGFsIDIgKDB4NjIpICovCisjZGVmaW5lIFJUNTYxNl9QV1JfQURDX1NUTzFfRgkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9QV1JfQURDX1NUTzFfRl9CSVQJCTE1CisjZGVmaW5lIFJUNTYxNl9QV1JfREFDX1NUTzFfRgkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9QV1JfREFDX1NUTzFfRl9CSVQJCTExCisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgZm9yIEFuYWxvZyAxICgweDYzKSAqLworI2RlZmluZSBSVDU2MTZfUFdSX1ZSRUYxCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9WUkVGMV9CSVQJCQkxNQorI2RlZmluZSBSVDU2MTZfUFdSX0ZWMQkJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfUFdSX0ZWMV9CSVQJCQkxNAorI2RlZmluZSBSVDU2MTZfUFdSX01CCQkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9QV1JfTUJfQklUCQkJMTMKKyNkZWZpbmUgUlQ1NjE2X1BXUl9MTQkJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2MTZfUFdSX0xNX0JJVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9QV1JfQkcJCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9CR19CSVQJCQkxMQorI2RlZmluZSBSVDU2MTZfUFdSX0hQX0wJCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfUFdSX0hQX0xfQklUCQkJNworI2RlZmluZSBSVDU2MTZfUFdSX0hQX1IJCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfUFdSX0hQX1JfQklUCQkJNgorI2RlZmluZSBSVDU2MTZfUFdSX0hBCQkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9IQV9CSVQJCQk1CisjZGVmaW5lIFJUNTYxNl9QV1JfVlJFRjIJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9QV1JfVlJFRjJfQklUCQkJNAorI2RlZmluZSBSVDU2MTZfUFdSX0ZWMgkJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9QV1JfRlYyX0JJVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X1BXUl9MRE8JCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2MTZfUFdSX0xET19CSVQJCQkyCisjZGVmaW5lIFJUNTYxNl9QV1JfTERPX0RWT19NQVNLCQkJKDB4MykKKyNkZWZpbmUgUlQ1NjE2X1BXUl9MRE9fRFZPXzFfMFYJCQkwCisjZGVmaW5lIFJUNTYxNl9QV1JfTERPX0RWT18xXzFWCQkJMQorI2RlZmluZSBSVDU2MTZfUFdSX0xET19EVk9fMV8yVgkJCTIKKyNkZWZpbmUgUlQ1NjE2X1BXUl9MRE9fRFZPXzFfM1YJCQkzCisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgZm9yIEFuYWxvZyAyICgweDY0KSAqLworI2RlZmluZSBSVDU2MTZfUFdSX0JTVDEJCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9CU1QxX0JJVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9QV1JfQlNUMgkJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfUFdSX0JTVDJfQklUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X1BXUl9NQjEJCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9NQjFfQklUCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X1BXUl9QTEwJCQkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2MTZfUFdSX1BMTF9CSVQJCQk5CisjZGVmaW5lIFJUNTYxNl9QV1JfQlNUMV9PUDIJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9QV1JfQlNUMV9PUDJfQklUCQkJNQorI2RlZmluZSBSVDU2MTZfUFdSX0JTVDJfT1AyCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfUFdSX0JTVDJfT1AyX0JJVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X1BXUl9CU1QzX09QMgkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X1BXUl9CU1QzX09QMl9CSVQJCQkzCisjZGVmaW5lIFJUNTYxNl9QV1JfSkRfTQkJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9QV01fSkRfTV9CSVQJCQkyCisjZGVmaW5lIFJUNTYxNl9QV1JfSkQyCQkJCSgweDEgPDwgMSkKKyNkZWZpbmUgUlQ1NjE2X1BXTV9KRDJfQklUCQkJMQorI2RlZmluZSBSVDU2MTZfUFdSX0pEMwkJCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfUFdNX0pEM19CSVQJCQkwCisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgZm9yIE1peGVyICgweDY1KSAqLworI2RlZmluZSBSVDU2MTZfUFdSX09NX0wJCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9PTV9MX0JJVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9QV1JfT01fUgkJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfUFdSX09NX1JfQklUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X1BXUl9STV9MCQkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9QV1JfUk1fTF9CSVQJCQkxMQorI2RlZmluZSBSVDU2MTZfUFdSX1JNX1IJCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9STV9SX0JJVAkJCTEwCisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgZm9yIFZvbHVtZSAoMHg2NikgKi8KKyNkZWZpbmUgUlQ1NjE2X1BXUl9PVl9MCQkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9QV1JfT1ZfTF9CSVQJCQkxMworI2RlZmluZSBSVDU2MTZfUFdSX09WX1IJCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X1BXUl9PVl9SX0JJVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9QV1JfSFZfTAkJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfUFdSX0hWX0xfQklUCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X1BXUl9IVl9SCQkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9QV1JfSFZfUl9CSVQJCQkxMAorI2RlZmluZSBSVDU2MTZfUFdSX0lOMV9MCQkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2MTZfUFdSX0lOMV9MX0JJVAkJCTkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9JTjFfUgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9JTjFfUl9CSVQJCQk4CisjZGVmaW5lIFJUNTYxNl9QV1JfSU4yX0wJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9QV1JfSU4yX0xfQklUCQkJNworI2RlZmluZSBSVDU2MTZfUFdSX0lOMl9SCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfUFdSX0lOMl9SX0JJVAkJCTYKKworLyogSTJTMS8yLzMgQXVkaW8gU2VyaWFsIERhdGEgUG9ydCBDb250cm9sICgweDcwIDB4NzEpICovCisjZGVmaW5lIFJUNTYxNl9JMlNfTVNfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9JMlNfTVNfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjE2X0kyU19NU19NCQkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9JMlNfTVNfUwkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfSTJTX09fQ1BfTUFTSwkJCSgweDMgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9JMlNfT19DUF9TRlQJCQkxMAorI2RlZmluZSBSVDU2MTZfSTJTX09fQ1BfT0ZGCQkJKDB4MCA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X0kyU19PX0NQX1VfTEFXCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X0kyU19PX0NQX0FfTEFXCQkJKDB4MiA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X0kyU19JX0NQX01BU0sJCQkoMHgzIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9JMlNfSV9DUF9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9JMlNfSV9DUF9PRkYJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9JMlNfSV9DUF9VX0xBVwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0kyU19JX0NQX0FfTEFXCQkJKDB4MiA8PCA4KQorI2RlZmluZSBSVDU2MTZfSTJTX0JQX01BU0sJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9JMlNfQlBfU0ZUCQkJNworI2RlZmluZSBSVDU2MTZfSTJTX0JQX05PUgkJCSgweDAgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X0kyU19CUF9JTlYJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9JMlNfRExfTUFTSwkJCSgweDMgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0kyU19ETF9TRlQJCQkyCisjZGVmaW5lIFJUNTYxNl9JMlNfRExfMTYJCQkoMHgwIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9JMlNfRExfMjAJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9JMlNfRExfMjQJCQkoMHgyIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9JMlNfRExfOAkJCQkoMHgzIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9JMlNfREZfTUFTSwkJCSgweDMpCisjZGVmaW5lIFJUNTYxNl9JMlNfREZfU0ZUCQkJMAorI2RlZmluZSBSVDU2MTZfSTJTX0RGX0kyUwkJCSgweDApCisjZGVmaW5lIFJUNTYxNl9JMlNfREZfTEVGVAkJCSgweDEpCisjZGVmaW5lIFJUNTYxNl9JMlNfREZfUENNX0EJCQkoMHgyKQorI2RlZmluZSBSVDU2MTZfSTJTX0RGX1BDTV9CCQkJKDB4MykKKworLyogQURDL0RBQyBDbG9jayBDb250cm9sIDEgKDB4NzMpICovCisjZGVmaW5lIFJUNTYxNl9JMlNfUEQxX01BU0sJCQkoMHg3IDw8IDEyKQorI2RlZmluZSBSVDU2MTZfSTJTX1BEMV9TRlQJCQkxMgorI2RlZmluZSBSVDU2MTZfSTJTX1BEMV8xCQkJKDB4MCA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0kyU19QRDFfMgkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9JMlNfUEQxXzMJCQkoMHgyIDw8IDEyKQorI2RlZmluZSBSVDU2MTZfSTJTX1BEMV80CQkJKDB4MyA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0kyU19QRDFfNgkJCSgweDQgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9JMlNfUEQxXzgJCQkoMHg1IDw8IDEyKQorI2RlZmluZSBSVDU2MTZfSTJTX1BEMV8xMgkJCSgweDYgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9JMlNfUEQxXzE2CQkJKDB4NyA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0kyU19CQ0xLX01TMl9NQVNLCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfREFDX09TUl9NQVNLCQkJKDB4MyA8PCAyKQorI2RlZmluZSBSVDU2MTZfREFDX09TUl9TRlQJCQkyCisjZGVmaW5lIFJUNTYxNl9EQUNfT1NSXzEyOAkJCSgweDAgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0RBQ19PU1JfNjQJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9EQUNfT1NSXzMyCQkJKDB4MiA8PCAyKQorI2RlZmluZSBSVDU2MTZfREFDX09TUl8xMjhfMwkJCSgweDMgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0FEQ19PU1JfTUFTSwkJCSgweDMpCisjZGVmaW5lIFJUNTYxNl9BRENfT1NSX1NGVAkJCTAKKyNkZWZpbmUgUlQ1NjE2X0FEQ19PU1JfMTI4CQkJKDB4MCkKKyNkZWZpbmUgUlQ1NjE2X0FEQ19PU1JfNjQJCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfQURDX09TUl8zMgkJCSgweDIpCisjZGVmaW5lIFJUNTYxNl9BRENfT1NSXzEyOF8zCQkJKDB4MykKKworLyogQURDL0RBQyBDbG9jayBDb250cm9sIDIgKDB4NzQpICovCisjZGVmaW5lIFJUNTYxNl9EQUhQRl9FTgkJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfREFIUEZfRU5fU0ZUCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X0FESFBGX0VOCQkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9BREhQRl9FTl9TRlQJCQkxMAorCisvKiBURE0gQ29udHJvbCAxICgweDc3KSAqLworI2RlZmluZSBSVDU2MTZfVERNX0lOVEVMX1NFTF9NQVNLCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfVERNX0lOVEVMX1NFTF9TRlQJCTE1CisjZGVmaW5lIFJUNTYxNl9URE1fSU5URUxfU0VMXzY0CQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1RETV9JTlRFTF9TRUxfNTAJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfVERNX01PREVfU0VMX01BU0sJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9URE1fTU9ERV9TRUxfU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X1RETV9NT0RFX1NFTF9OT1IJCQkoMHgwIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfVERNX01PREVfU0VMX1RETQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9URE1fQ0hfTlVNX1NFTF9NQVNLCQkoMHgzIDw8IDEyKQorI2RlZmluZSBSVDU2MTZfVERNX0NIX05VTV9TRUxfU0ZUCQkxMgorI2RlZmluZSBSVDU2MTZfVERNX0NIX05VTV9TRUxfMgkJCSgweDAgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9URE1fQ0hfTlVNX1NFTF80CQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X1RETV9DSF9OVU1fU0VMXzYJCQkoMHgyIDw8IDEyKQorI2RlZmluZSBSVDU2MTZfVERNX0NIX05VTV9TRUxfOAkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9URE1fQ0hfTEVOX1NFTF9NQVNLCQkoMHgzIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfVERNX0NIX0xFTl9TRUxfU0ZUCQkxMAorI2RlZmluZSBSVDU2MTZfVERNX0NIX0xFTl9TRUxfMTYJCSgweDAgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9URE1fQ0hfTEVOX1NFTF8yMAkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X1RETV9DSF9MRU5fU0VMXzI0CQkoMHgyIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfVERNX0NIX0xFTl9TRUxfMzIJCSgweDMgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9URE1fQURDX1NFTF9NQVNLCQkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2MTZfVERNX0FEQ19TRUxfU0ZUCQkJOQorI2RlZmluZSBSVDU2MTZfVERNX0FEQ19TRUxfTk9SCQkJKDB4MCA8PCA5KQorI2RlZmluZSBSVDU2MTZfVERNX0FEQ19TRUxfU1dBUAkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X1RETV9BRENfU1RBUlRfU0VMX01BU0sJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X1RETV9BRENfU1RBUlRfU0VMX1NGVAkJOAorI2RlZmluZSBSVDU2MTZfVERNX0FEQ19TVEFSVF9TRUxfU0wwCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9URE1fQURDX1NUQVJUX1NFTF9TTDQJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X1RETV9JMlNfQ0gyX1NFTF9NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9URE1fSTJTX0NIMl9TRUxfU0ZUCQk2CisjZGVmaW5lIFJUNTYxNl9URE1fSTJTX0NIMl9TRUxfTFIJCSgweDAgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X1RETV9JMlNfQ0gyX1NFTF9STAkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfVERNX0kyU19DSDJfU0VMX0xMCQkoMHgyIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9URE1fSTJTX0NIMl9TRUxfUlIJCSgweDMgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X1RETV9JMlNfQ0g0X1NFTF9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9URE1fSTJTX0NINF9TRUxfU0ZUCQk0CisjZGVmaW5lIFJUNTYxNl9URE1fSTJTX0NINF9TRUxfTFIJCSgweDAgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X1RETV9JMlNfQ0g0X1NFTF9STAkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfVERNX0kyU19DSDRfU0VMX0xMCQkoMHgyIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9URE1fSTJTX0NINF9TRUxfUlIJCSgweDMgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X1RETV9JMlNfQ0g2X1NFTF9NQVNLCQkoMHgzIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9URE1fSTJTX0NINl9TRUxfU0ZUCQkyCisjZGVmaW5lIFJUNTYxNl9URE1fSTJTX0NINl9TRUxfTFIJCSgweDAgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X1RETV9JMlNfQ0g2X1NFTF9STAkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2MTZfVERNX0kyU19DSDZfU0VMX0xMCQkoMHgyIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9URE1fSTJTX0NINl9TRUxfUlIJCSgweDMgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X1RETV9JMlNfQ0g4X1NFTF9NQVNLCQkoMHgzKQorI2RlZmluZSBSVDU2MTZfVERNX0kyU19DSDhfU0VMX1NGVAkJMAorI2RlZmluZSBSVDU2MTZfVERNX0kyU19DSDhfU0VMX0xSCQkoMHgwKQorI2RlZmluZSBSVDU2MTZfVERNX0kyU19DSDhfU0VMX1JMCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfVERNX0kyU19DSDhfU0VMX0xMCQkoMHgyKQorI2RlZmluZSBSVDU2MTZfVERNX0kyU19DSDhfU0VMX1JSCQkoMHgzKQorCisvKiBURE0gQ29udHJvbCAyICgweDc4KSAqLworI2RlZmluZSBSVDU2MTZfVERNX0xSQ0tfUE9MX1NFTF9NQVNLCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfVERNX0xSQ0tfUE9MX1NFTF9TRlQJCTE1CisjZGVmaW5lIFJUNTYxNl9URE1fTFJDS19QT0xfU0VMX05PUgkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1RETV9MUkNLX1BPTF9TRUxfSU5WCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfVERNX0NIX1ZBTF9TRUxfTUFTSwkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X1RETV9DSF9WQUxfU0VMX1NGVAkJMTQKKyNkZWZpbmUgUlQ1NjE2X1RETV9DSF9WQUxfU0VMX0NIMDEJCSgweDAgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9URE1fQ0hfVkFMX1NFTF9DSDAxMjMJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9URE1fQ0hfVkFMX0VOCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X1RETV9DSF9WQUxfU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjE2X1RETV9MUEJLX0VOCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X1RETV9MUEJLX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9URE1fTFJDS19QVUxTRV9TRUxfTUFTSwkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X1RETV9MUkNLX1BVTFNFX1NFTF9TRlQJCTExCisjZGVmaW5lIFJUNTYxNl9URE1fTFJDS19QVUxTRV9TRUxfQkNMSwkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X1RETV9MUkNLX1BVTFNFX1NFTF9DSAkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X1RETV9FTkRfRURHRV9TRUxfTUFTSwkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X1RETV9FTkRfRURHRV9TRUxfU0ZUCQkxMAorI2RlZmluZSBSVDU2MTZfVERNX0VORF9FREdFX1NFTF9QT1MJCSgweDAgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9URE1fRU5EX0VER0VfU0VMX05FRwkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X1RETV9FTkRfRURHRV9FTgkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X1RETV9FTkRfRURHRV9FTl9TRlQJCTkKKyNkZWZpbmUgUlQ1NjE2X1RETV9UUkFOX0VER0VfU0VMX01BU0sJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X1RETV9UUkFOX0VER0VfU0VMX1NGVAkJOAorI2RlZmluZSBSVDU2MTZfVERNX1RSQU5fRURHRV9TRUxfUE9TCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9URE1fVFJBTl9FREdFX1NFTF9ORUcJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X01fVERNMl9MCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X01fVERNMl9MX1NGVAkJCTcKKyNkZWZpbmUgUlQ1NjE2X01fVERNMl9SCQkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X01fVERNMl9SX1NGVAkJCTYKKyNkZWZpbmUgUlQ1NjE2X01fVERNNF9MCQkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X01fVERNNF9MX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X01fVERNNF9SCQkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X01fVERNNF9SX1NGVAkJCTQKKworLyogR2xvYmFsIENsb2NrIENvbnRyb2wgKDB4ODApICovCisjZGVmaW5lIFJUNTYxNl9TQ0xLX1NSQ19NQVNLCQkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X1NDTEtfU1JDX1NGVAkJCTE0CisjZGVmaW5lIFJUNTYxNl9TQ0xLX1NSQ19NQ0xLCQkJKDB4MCA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X1NDTEtfU1JDX1BMTDEJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfUExMMV9TUkNfTUFTSwkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9QTEwxX1NSQ19TRlQJCQkxMgorI2RlZmluZSBSVDU2MTZfUExMMV9TUkNfTUNMSwkJCSgweDAgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9QTEwxX1NSQ19CQ0xLMQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9QTEwxX1NSQ19CQ0xLMgkJCSgweDIgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9QTEwxX1BEX01BU0sJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9QTEwxX1BEX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X1BMTDFfUERfMQkJCSgweDAgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X1BMTDFfUERfMgkJCSgweDEgPDwgMykKKworI2RlZmluZSBSVDU2MTZfUExMX0lOUF9NQVgJCQk0MDAwMDAwMAorI2RlZmluZSBSVDU2MTZfUExMX0lOUF9NSU4JCQkyNTYwMDAKKy8qIFBMTCBNL04vSyBDb2RlIENvbnRyb2wgMSAoMHg4MSkgKi8KKyNkZWZpbmUgUlQ1NjE2X1BMTF9OX01BWAkJCTB4MWZmCisjZGVmaW5lIFJUNTYxNl9QTExfTl9NQVNLCQkJKFJUNTYxNl9QTExfTl9NQVggPDwgNykKKyNkZWZpbmUgUlQ1NjE2X1BMTF9OX1NGVAkJCTcKKyNkZWZpbmUgUlQ1NjE2X1BMTF9LX01BWAkJCTB4MWYKKyNkZWZpbmUgUlQ1NjE2X1BMTF9LX01BU0sJCQkoUlQ1NjE2X1BMTF9LX01BWCkKKyNkZWZpbmUgUlQ1NjE2X1BMTF9LX1NGVAkJCTAKKworLyogUExMIE0vTi9LIENvZGUgQ29udHJvbCAyICgweDgyKSAqLworI2RlZmluZSBSVDU2MTZfUExMX01fTUFYCQkJMHhmCisjZGVmaW5lIFJUNTYxNl9QTExfTV9NQVNLCQkJKFJUNTYxNl9QTExfTV9NQVggPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9QTExfTV9TRlQJCQkxMgorI2RlZmluZSBSVDU2MTZfUExMX01fQlAJCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X1BMTF9NX0JQX1NGVAkJCTExCisKKy8qIFBMTCB0cmFja2luZyBtb2RlIDEgKDB4ODMpICovCisjZGVmaW5lIFJUNTYxNl9TVE8xX1RfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9TVE8xX1RfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjE2X1NUTzFfVF9TQ0xLCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1NUTzFfVF9MUkNLMQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9TVE8yX1RfTUFTSwkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9TVE8yX1RfU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjE2X1NUTzJfVF9JMlMyCQkJKDB4MCA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X1NUTzJfVF9MUkNLMgkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9BU1JDMl9SRUZfTUFTSwkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9BU1JDMl9SRUZfU0ZUCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X0FTUkMyX1JFRl9MUkNLMgkJCSgweDAgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9BU1JDMl9SRUZfTFJDSzEJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfRE1JQ18xX01fTUFTSwkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0RNSUNfMV9NX1NGVAkJCTkKKyNkZWZpbmUgUlQ1NjE2X0RNSUNfMV9NX05PUgkJCSgweDAgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0RNSUNfMV9NX0FTWU4JCQkoMHgxIDw8IDkpCisKKy8qIFBMTCB0cmFja2luZyBtb2RlIDIgKDB4ODQpICovCisjZGVmaW5lIFJUNTYxNl9TVE8xX0FTUkNfRU4JCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfU1RPMV9BU1JDX0VOX1NGVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9TVE8yX0FTUkNfRU4JCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfU1RPMl9BU1JDX0VOX1NGVAkJCTE0CisjZGVmaW5lIFJUNTYxNl9TVE8xX0RBQ19NX01BU0sJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfU1RPMV9EQUNfTV9TRlQJCQkxMworI2RlZmluZSBSVDU2MTZfU1RPMV9EQUNfTV9OT1IJCQkoMHgwIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfU1RPMV9EQUNfTV9BU1JDCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X1NUTzJfREFDX01fTUFTSwkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9TVE8yX0RBQ19NX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9TVE8yX0RBQ19NX05PUgkJCSgweDAgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9TVE8yX0RBQ19NX0FTUkMJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2MTZfQURDX01fTUFTSwkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9BRENfTV9TRlQJCQkxMQorI2RlZmluZSBSVDU2MTZfQURDX01fTk9SCQkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X0FEQ19NX0FTUkMJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfSTJTMV9SX0RfTUFTSwkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X0kyUzFfUl9EX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X0kyUzFfUl9EX0RJUwkJCSgweDAgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X0kyUzFfUl9EX0VOCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfSTJTMl9SX0RfTUFTSwkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0kyUzJfUl9EX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X0kyUzJfUl9EX0RJUwkJCSgweDAgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0kyUzJfUl9EX0VOCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2MTZfUFJFX1NDTEtfTUFTSwkJCSgweDMpCisjZGVmaW5lIFJUNTYxNl9QUkVfU0NMS19TRlQJCQkwCisjZGVmaW5lIFJUNTYxNl9QUkVfU0NMS181MTIJCQkoMHgwKQorI2RlZmluZSBSVDU2MTZfUFJFX1NDTEtfMTAyNAkJCSgweDEpCisjZGVmaW5lIFJUNTYxNl9QUkVfU0NMS18yMDQ4CQkJKDB4MikKKworLyogUExMIHRyYWNraW5nIG1vZGUgMyAoMHg4NSkgKi8KKyNkZWZpbmUgUlQ1NjE2X0kyUzFfUkFURV9NQVNLCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0kyUzFfUkFURV9TRlQJCQkxMgorI2RlZmluZSBSVDU2MTZfSTJTMl9SQVRFX01BU0sJCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9JMlMyX1JBVEVfU0ZUCQkJOAorI2RlZmluZSBSVDU2MTZfR19BU1JDX0xQX01BU0sJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9HX0FTUkNfTFBfU0ZUCQkJMworI2RlZmluZSBSVDU2MTZfQVNSQ19MUF9GX00JCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9BU1JDX0xQX0ZfU0ZUCQkJMgorI2RlZmluZSBSVDU2MTZfQVNSQ19MUF9GX05PUgkJCSgweDAgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0FTUkNfTFBfRl9TQgkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0ZUS19QSF9ERVRfTUFTSwkJCSgweDMpCisjZGVmaW5lIFJUNTYxNl9GVEtfUEhfREVUX1NGVAkJCTAKKyNkZWZpbmUgUlQ1NjE2X0ZUS19QSF9ERVRfRElWMQkJCSgweDApCisjZGVmaW5lIFJUNTYxNl9GVEtfUEhfREVUX0RJVjIJCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfRlRLX1BIX0RFVF9ESVY0CQkJKDB4MikKKyNkZWZpbmUgUlQ1NjE2X0ZUS19QSF9ERVRfRElWOAkJCSgweDMpCisKKy8qUExMIHRyYWNraW5nIG1vZGUgNiAoMHg4OSkgKi8KKyNkZWZpbmUgUlQ1NjE2X0kyUzFfUERfTUFTSwkJCSgweDcgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9JMlMxX1BEX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9JMlMyX1BEX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIFJUNTYxNl9JMlMyX1BEX1NGVAkJCTgKKworLypQTEwgdHJhY2tpbmcgbW9kZSA3ICgweDhhKSAqLworI2RlZmluZSBSVDU2MTZfRlNJMV9SQVRFX01BU0sJCQkoMHhmIDw8IDEyKQorI2RlZmluZSBSVDU2MTZfRlNJMV9SQVRFX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9GU0kyX1JBVEVfTUFTSwkJCSgweGYgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0ZTSTJfUkFURV9TRlQJCQk4CisKKy8qIEhQT1VUIE92ZXIgQ3VycmVudCBEZXRlY3Rpb24gKDB4OGIpICovCisjZGVmaW5lIFJUNTYxNl9IUF9PVkNEX01BU0sJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfSFBfT1ZDRF9TRlQJCQkxMAorI2RlZmluZSBSVDU2MTZfSFBfT1ZDRF9ESVMJCQkoMHgwIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfSFBfT1ZDRF9FTgkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9IUF9PQ19USF9NQVNLCQkJKDB4MyA8PCA4KQorI2RlZmluZSBSVDU2MTZfSFBfT0NfVEhfU0ZUCQkJOAorI2RlZmluZSBSVDU2MTZfSFBfT0NfVEhfOTAJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9IUF9PQ19USF8xMDUJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9IUF9PQ19USF8xMjAJCQkoMHgyIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9IUF9PQ19USF8xMzUJCQkoMHgzIDw8IDgpCisKKy8qIERlcG9wIE1vZGUgQ29udHJvbCAxICgweDhlKSAqLworI2RlZmluZSBSVDU2MTZfU01UX1RSSUdfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9TTVRfVFJJR19TRlQJCQkxNQorI2RlZmluZSBSVDU2MTZfU01UX1RSSUdfRElTCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1NNVF9UUklHX0VOCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X0hQX0xfU01UX01BU0sJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9IUF9MX1NNVF9TRlQJCQk5CisjZGVmaW5lIFJUNTYxNl9IUF9MX1NNVF9ESVMJCQkoMHgwIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9IUF9MX1NNVF9FTgkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0hQX1JfU01UX01BU0sJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9IUF9SX1NNVF9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9IUF9SX1NNVF9ESVMJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9IUF9SX1NNVF9FTgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0hQX0NEX1BEX01BU0sJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9IUF9DRF9QRF9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9IUF9DRF9QRF9ESVMJCQkoMHgwIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9IUF9DRF9QRF9FTgkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X1JTVE5fTUFTSwkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X1JTVE5fU0ZUCQkJCTYKKyNkZWZpbmUgUlQ1NjE2X1JTVE5fRElTCQkJCSgweDAgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X1JTVE5fRU4JCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfUlNUUF9NQVNLCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfUlNUUF9TRlQJCQkJNQorI2RlZmluZSBSVDU2MTZfUlNUUF9ESVMJCQkJKDB4MCA8PCA1KQorI2RlZmluZSBSVDU2MTZfUlNUUF9FTgkJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9IUF9DT19NQVNLCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfSFBfQ09fU0ZUCQkJNAorI2RlZmluZSBSVDU2MTZfSFBfQ09fRElTCQkJKDB4MCA8PCA0KQorI2RlZmluZSBSVDU2MTZfSFBfQ09fRU4JCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfSFBfQ1BfTUFTSwkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0hQX0NQX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X0hQX0NQX1BECQkJCSgweDAgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0hQX0NQX1BVCQkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0hQX1NHX01BU0sJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9IUF9TR19TRlQJCQkyCisjZGVmaW5lIFJUNTYxNl9IUF9TR19ESVMJCQkoMHgwIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9IUF9TR19FTgkJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9IUF9EUF9NQVNLCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2MTZfSFBfRFBfU0ZUCQkJMQorI2RlZmluZSBSVDU2MTZfSFBfRFBfUEQJCQkJKDB4MCA8PCAxKQorI2RlZmluZSBSVDU2MTZfSFBfRFBfUFUJCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2MTZfSFBfQ0JfTUFTSwkJCSgweDEpCisjZGVmaW5lIFJUNTYxNl9IUF9DQl9TRlQJCQkwCisjZGVmaW5lIFJUNTYxNl9IUF9DQl9QRAkJCQkoMHgwKQorI2RlZmluZSBSVDU2MTZfSFBfQ0JfUFUJCQkJKDB4MSkKKworLyogRGVwb3AgTW9kZSBDb250cm9sIDIgKDB4OGYpICovCisjZGVmaW5lIFJUNTYxNl9ERVBPUF9NQVNLCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0RFUE9QX1NGVAkJCTEzCisjZGVmaW5lIFJUNTYxNl9ERVBPUF9BVVRPCQkJKDB4MCA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0RFUE9QX01BTgkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9SQU1QX01BU0sJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2MTZfUkFNUF9TRlQJCQkJMTIKKyNkZWZpbmUgUlQ1NjE2X1JBTVBfRElTCQkJCSgweDAgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9SQU1QX0VOCQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9CUFNfTUFTSwkJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfQlBTX1NGVAkJCQkxMQorI2RlZmluZSBSVDU2MTZfQlBTX0RJUwkJCQkoMHgwIDw8IDExKQorI2RlZmluZSBSVDU2MTZfQlBTX0VOCQkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9GQVNUX1VQRE5fTUFTSwkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9GQVNUX1VQRE5fU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjE2X0ZBU1RfVVBETl9ESVMJCQkoMHgwIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfRkFTVF9VUEROX0VOCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X01SRVNfTUFTSwkJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X01SRVNfU0ZUCQkJCTgKKyNkZWZpbmUgUlQ1NjE2X01SRVNfMTVNTwkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X01SRVNfMjVNTwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X01SRVNfMzVNTwkJCSgweDIgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X01SRVNfNDVNTwkJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X1ZMT19NQVNLCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X1ZMT19TRlQJCQkJNworI2RlZmluZSBSVDU2MTZfVkxPXzNWCQkJCSgweDAgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X1ZMT18zMlYJCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfRElHX0RQX01BU0sJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9ESUdfRFBfU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfRElHX0RQX0RJUwkJCSgweDAgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0RJR19EUF9FTgkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0RQX1RIX01BU0sJCQkoMHgzIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9EUF9USF9TRlQJCQk0CisKKy8qIERlcG9wIE1vZGUgQ29udHJvbCAzICgweDkwKSAqLworI2RlZmluZSBSVDU2MTZfQ1BfU1lTX01BU0sJCQkoMHg3IDw8IDEyKQorI2RlZmluZSBSVDU2MTZfQ1BfU1lTX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9DUF9GUTFfTUFTSwkJCSgweDcgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0NQX0ZRMV9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9DUF9GUTJfTUFTSwkJCSgweDcgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X0NQX0ZRMl9TRlQJCQk0CisjZGVmaW5lIFJUNTYxNl9DUF9GUTNfTUFTSwkJCSgweDcpCisjZGVmaW5lIFJUNTYxNl9DUF9GUTNfU0ZUCQkJMAorI2RlZmluZSBSVDU2MTZfQ1BfRlFfMV81X0tIWgkJCTAKKyNkZWZpbmUgUlQ1NjE2X0NQX0ZRXzNfS0haCQkJMQorI2RlZmluZSBSVDU2MTZfQ1BfRlFfNl9LSFoJCQkyCisjZGVmaW5lIFJUNTYxNl9DUF9GUV8xMl9LSFoJCQkzCisjZGVmaW5lIFJUNTYxNl9DUF9GUV8yNF9LSFoJCQk0CisjZGVmaW5lIFJUNTYxNl9DUF9GUV80OF9LSFoJCQk1CisjZGVmaW5lIFJUNTYxNl9DUF9GUV85Nl9LSFoJCQk2CisjZGVmaW5lIFJUNTYxNl9DUF9GUV8xOTJfS0haCQkJNworCisvKiBIUE9VVCBjaGFyZ2UgcHVtcCAoMHg5MSkgKi8KKyNkZWZpbmUgUlQ1NjE2X09TV19MX01BU0sJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfT1NXX0xfU0ZUCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X09TV19MX0RJUwkJCSgweDAgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9PU1dfTF9FTgkJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfT1NXX1JfTUFTSwkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9PU1dfUl9TRlQJCQkxMAorI2RlZmluZSBSVDU2MTZfT1NXX1JfRElTCQkJKDB4MCA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X09TV19SX0VOCQkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9QTV9IUF9NQVNLCQkJKDB4MyA8PCA4KQorI2RlZmluZSBSVDU2MTZfUE1fSFBfU0ZUCQkJOAorI2RlZmluZSBSVDU2MTZfUE1fSFBfTFYJCQkJKDB4MCA8PCA4KQorI2RlZmluZSBSVDU2MTZfUE1fSFBfTVYJCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2MTZfUE1fSFBfSFYJCQkJKDB4MiA8PCA4KQorI2RlZmluZSBSVDU2MTZfSUJfSFBfTUFTSwkJCSgweDMgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0lCX0hQX1NGVAkJCTYKKyNkZWZpbmUgUlQ1NjE2X0lCX0hQXzEyNUlMCQkJKDB4MCA8PCA2KQorI2RlZmluZSBSVDU2MTZfSUJfSFBfMjVJTAkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0lCX0hQXzVJTAkJCSgweDIgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0lCX0hQXzFJTAkJCSgweDMgPDwgNikKKworLyogTWljYmlhcyBDb250cm9sICgweDkzKSAqLworI2RlZmluZSBSVDU2MTZfTUlDMV9CU19NQVNLCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X01JQzFfQlNfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjE2X01JQzFfQlNfOUFWCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X01JQzFfQlNfNzVBVgkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9NSUMxX0NMS19NQVNLCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X01JQzFfQ0xLX1NGVAkJCTEzCisjZGVmaW5lIFJUNTYxNl9NSUMxX0NMS19ESVMJCQkoMHgwIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfTUlDMV9DTEtfRU4JCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfTUlDMV9PVkNEX01BU0sJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfTUlDMV9PVkNEX1NGVAkJCTExCisjZGVmaW5lIFJUNTYxNl9NSUMxX09WQ0RfRElTCQkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X01JQzFfT1ZDRF9FTgkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9NSUMxX09WVEhfTUFTSwkJCSgweDMgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X01JQzFfT1ZUSF9TRlQJCQk5CisjZGVmaW5lIFJUNTYxNl9NSUMxX09WVEhfNjAwVUEJCQkoMHgwIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9NSUMxX09WVEhfMTUwMFVBCQkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2MTZfTUlDMV9PVlRIXzIwMDBVQQkJCSgweDIgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9NQl9NQVNLCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfUFdSX01CX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X1BXUl9NQl9QRAkJCSgweDAgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9NQl9QVQkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9DTEsxMk1fTUFTSwkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9DTEsxMk1fU0ZUCQkJNAorI2RlZmluZSBSVDU2MTZfUFdSX0NMSzEyTV9QRAkJCSgweDAgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X1BXUl9DTEsxMk1fUFUJCQkoMHgxIDw8IDQpCisKKy8qIEFuYWxvZyBKRCBDb250cm9sIDEgKDB4OTQpICovCisjZGVmaW5lIFJUNTYxNl9KRDJfQ01QX01BU0sJCQkoMHg3IDw8IDEyKQorI2RlZmluZSBSVDU2MTZfSkQyX0NNUF9TRlQJCQkxMgorI2RlZmluZSBSVDU2MTZfSkRfUFUJCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X0pEX1BVX1NGVAkJCTExCisjZGVmaW5lIFJUNTYxNl9KRF9QRAkJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfSkRfUERfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjE2X0pEX01PREVfU0VMX01BU0sJCQkoMHgzIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9KRF9NT0RFX1NFTF9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9KRF9NT0RFX1NFTF9NMAkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0pEX01PREVfU0VMX00xCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2MTZfSkRfTU9ERV9TRUxfTTIJCQkoMHgyIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9KRF9NX0NNUAkJCQkoMHg3IDw8IDQpCisjZGVmaW5lIFJUNTYxNl9KRF9NX0NNUF9TRlQJCQk0CisjZGVmaW5lIFJUNTYxNl9KRF9NX1BVCQkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0pEX01fUFVfU0ZUCQkJMworI2RlZmluZSBSVDU2MTZfSkRfTV9QRAkJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9KRF9NX1BEX1NGVAkJCTIKKyNkZWZpbmUgUlQ1NjE2X0pEX01fTU9ERV9TRUxfTUFTSwkJKDB4MykKKyNkZWZpbmUgUlQ1NjE2X0pEX01fTU9ERV9TRUxfU0ZUCQkwCisjZGVmaW5lIFJUNTYxNl9KRF9NX01PREVfU0VMX00wCQkJKDB4MCkKKyNkZWZpbmUgUlQ1NjE2X0pEX01fTU9ERV9TRUxfTTEJCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfSkRfTV9NT0RFX1NFTF9NMgkJCSgweDIpCisKKy8qIEFuYWxvZyBKRCBDb250cm9sIDIgKDB4OTUpICovCisjZGVmaW5lIFJUNTYxNl9KRDNfQ01QX01BU0sJCQkoMHg3IDw8IDEyKQorI2RlZmluZSBSVDU2MTZfSkQzX0NNUF9TRlQJCQkxMgorCisvKiBFUSBDb250cm9sIDEgKDB4YjApICovCisjZGVmaW5lIFJUNTYxNl9FUV9TUkNfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9FUV9TUkNfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjE2X0VRX1NSQ19EQUMJCQkoMHgwIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfRVFfU1JDX0FEQwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9FUV9VUEQJCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X0VRX1VQRF9CSVQJCQkxNAorI2RlZmluZSBSVDU2MTZfRVFfQ0RfTUFTSwkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9FUV9DRF9TRlQJCQkxMworI2RlZmluZSBSVDU2MTZfRVFfQ0RfRElTCQkJKDB4MCA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0VRX0NEX0VOCQkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9FUV9ESVRIX01BU0sJCQkoMHgzIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9FUV9ESVRIX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X0VRX0RJVEhfTk9SCQkJKDB4MCA8PCA4KQorI2RlZmluZSBSVDU2MTZfRVFfRElUSF9MU0IJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9FUV9ESVRIX0xTQl8xCQkJKDB4MiA8PCA4KQorI2RlZmluZSBSVDU2MTZfRVFfRElUSF9MU0JfMgkJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0VRX0NEX0YJCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfRVFfQ0RfRl9CSVQJCQk3CisjZGVmaW5lIFJUNTYxNl9FUV9TVEFfSFAyCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfRVFfU1RBX0hQMl9CSVQJCQk2CisjZGVmaW5lIFJUNTYxNl9FUV9TVEFfSFAxCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfRVFfU1RBX0hQMV9CSVQJCQk1CisjZGVmaW5lIFJUNTYxNl9FUV9TVEFfQlA0CQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfRVFfU1RBX0JQNF9CSVQJCQk0CisjZGVmaW5lIFJUNTYxNl9FUV9TVEFfQlAzCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2MTZfRVFfU1RBX0JQM19CSVQJCQkzCisjZGVmaW5lIFJUNTYxNl9FUV9TVEFfQlAyCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2MTZfRVFfU1RBX0JQMl9CSVQJCQkyCisjZGVmaW5lIFJUNTYxNl9FUV9TVEFfQlAxCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2MTZfRVFfU1RBX0JQMV9CSVQJCQkxCisjZGVmaW5lIFJUNTYxNl9FUV9TVEFfTFAJCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfRVFfU1RBX0xQX0JJVAkJCTAKKworLyogRVEgQ29udHJvbCAyICgweGIxKSAqLworI2RlZmluZSBSVDU2MTZfRVFfSFBGMV9NX01BU0sJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9FUV9IUEYxX01fU0ZUCQkJOAorI2RlZmluZSBSVDU2MTZfRVFfSFBGMV9NX0hJCQkJKDB4MCA8PCA4KQorI2RlZmluZSBSVDU2MTZfRVFfSFBGMV9NXzFTVAkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0VRX0xQRjFfTV9NQVNLCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfRVFfTFBGMV9NX1NGVAkJCTcKKyNkZWZpbmUgUlQ1NjE2X0VRX0xQRjFfTV9MTwkJCSgweDAgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X0VRX0xQRjFfTV8xU1QJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9FUV9IUEYyX01BU0sJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9FUV9IUEYyX1NGVAkJCTYKKyNkZWZpbmUgUlQ1NjE2X0VRX0hQRjJfRElTCQkJKDB4MCA8PCA2KQorI2RlZmluZSBSVDU2MTZfRVFfSFBGMl9FTgkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0VRX0hQRjFfTUFTSwkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0VRX0hQRjFfU0ZUCQkJNQorI2RlZmluZSBSVDU2MTZfRVFfSFBGMV9ESVMJCQkoMHgwIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9FUV9IUEYxX0VOCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfRVFfQlBGNF9NQVNLCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfRVFfQlBGNF9TRlQJCQk0CisjZGVmaW5lIFJUNTYxNl9FUV9CUEY0X0RJUwkJCSgweDAgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X0VRX0JQRjRfRU4JCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9FUV9CUEYzX01BU0sJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9FUV9CUEYzX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X0VRX0JQRjNfRElTCQkJKDB4MCA8PCAzKQorI2RlZmluZSBSVDU2MTZfRVFfQlBGM19FTgkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0VRX0JQRjJfTUFTSwkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0VRX0JQRjJfU0ZUCQkJMgorI2RlZmluZSBSVDU2MTZfRVFfQlBGMl9ESVMJCQkoMHgwIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9FUV9CUEYyX0VOCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2MTZfRVFfQlBGMV9NQVNLCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2MTZfRVFfQlBGMV9TRlQJCQkxCisjZGVmaW5lIFJUNTYxNl9FUV9CUEYxX0RJUwkJCSgweDAgPDwgMSkKKyNkZWZpbmUgUlQ1NjE2X0VRX0JQRjFfRU4JCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTYxNl9FUV9MUEZfTUFTSwkJCSgweDEpCisjZGVmaW5lIFJUNTYxNl9FUV9MUEZfU0ZUCQkJMAorI2RlZmluZSBSVDU2MTZfRVFfTFBGX0RJUwkJCSgweDApCisjZGVmaW5lIFJUNTYxNl9FUV9MUEZfRU4JCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfRVFfQ1RSTF9NQVNLCQkJKDB4N2YpCisKKy8qIE1lbW9yeSBUZXN0ICgweGIyKSAqLworI2RlZmluZSBSVDU2MTZfTVRfTUFTSwkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfTVRfU0ZUCQkJCTE1CisjZGVmaW5lIFJUNTYxNl9NVF9ESVMJCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X01UX0VOCQkJCSgweDEgPDwgMTUpCisKKy8qIERSQy9BR0MgQ29udHJvbCAxICgweGI0KSAqLworI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19QX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19QX1NGVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX1BfREFDCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfUF9BREMJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19NQVNLCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfRElTCQkJKDB4MCA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfRU4JCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19VUEQJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19VUERfQklUCQkJMTMKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfQVJfTUFTSwkJCSgweDFmIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX0FSX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfUl9NQVNLCQkJKDB4NyA8PCA1KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19SX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfUl80OEsJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX1JfOTZLCQkJKDB4MiA8PCA1KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19SXzE5MksJCQkoMHgzIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX1JfNDQxSwkJCSgweDUgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfUl84ODJLCQkJKDB4NiA8PCA1KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19SXzE3NjRLCQkJKDB4NyA8PCA1KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19SQ19NQVNLCQkJKDB4MWYpCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX1JDX1NGVAkJCTAKKworLyogRFJDL0FHQyBDb250cm9sIDIgKDB4YjUpICovCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX1BPQl9NQVNLCQkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfUE9CX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfQ1BfTUFTSwkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfQ1BfU0ZUCQkJNworI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19DUF9ESVMJCQkoMHgwIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX0NQX0VOCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19DUFJfTUFTSwkJCSgweDMgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfQ1BSX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfQ1BSXzFfMQkJCSgweDAgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfQ1BSXzFfMgkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfQ1BSXzFfMwkJCSgweDIgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfQ1BSXzFfNAkJCSgweDMgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfUFJCX01BU0sJCQkoMHgxZikKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfUFJCX1NGVAkJCTAKKworLyogRFJDL0FHQyBDb250cm9sIDMgKDB4YjYpICovCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX05HQl9NQVNLCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfTkdCX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX1RBUl9NQVNLCQkJKDB4MWYgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfVEFSX1NGVAkJCTcKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfTkdfTUFTSwkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfTkdfU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19OR19ESVMJCQkoMHgwIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9EUkNfQUdDX05HX0VOCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19OR0hfTUFTSwkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfTkdIX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfTkdIX0RJUwkJCSgweDAgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0RSQ19BR0NfTkdIX0VOCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19OR1RfTUFTSwkJCSgweDFmKQorI2RlZmluZSBSVDU2MTZfRFJDX0FHQ19OR1RfU0ZUCQkJMAorCisvKiBKYWNrIERldGVjdCBDb250cm9sIDEgKDB4YmIpICovCisjZGVmaW5lIFJUNTYxNl9KRF9NQVNLCQkJCSgweDcgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9KRF9TRlQJCQkJMTMKKyNkZWZpbmUgUlQ1NjE2X0pEX0RJUwkJCQkoMHgwIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfSkRfR1BJTzEJCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0pEX0dQSU8yCQkJCSgweDIgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9KRF9HUElPMwkJCQkoMHgzIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfSkRfR1BJTzQJCQkJKDB4NCA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0pEX0dQSU81CQkJCSgweDUgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9KRF9HUElPNgkJCQkoMHg2IDw8IDEzKQorI2RlZmluZSBSVDU2MTZfSkRfSFBfTUFTSwkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9KRF9IUF9TRlQJCQkxMQorI2RlZmluZSBSVDU2MTZfSkRfSFBfRElTCQkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X0pEX0hQX0VOCQkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9KRF9IUF9UUkdfTUFTSwkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9KRF9IUF9UUkdfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjE2X0pEX0hQX1RSR19MTwkJCSgweDAgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9KRF9IUF9UUkdfSEkJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfSkRfU1BMX01BU0sJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9KRF9TUExfU0ZUCQkJOQorI2RlZmluZSBSVDU2MTZfSkRfU1BMX0RJUwkJCSgweDAgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0pEX1NQTF9FTgkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0pEX1NQTF9UUkdfTUFTSwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0pEX1NQTF9UUkdfU0ZUCQkJOAorI2RlZmluZSBSVDU2MTZfSkRfU1BMX1RSR19MTwkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0pEX1NQTF9UUkdfSEkJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9KRF9TUFJfTUFTSwkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X0pEX1NQUl9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9KRF9TUFJfRElTCQkJKDB4MCA8PCA3KQorI2RlZmluZSBSVDU2MTZfSkRfU1BSX0VOCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfSkRfU1BSX1RSR19NQVNLCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfSkRfU1BSX1RSR19TRlQJCQk2CisjZGVmaW5lIFJUNTYxNl9KRF9TUFJfVFJHX0xPCQkJKDB4MCA8PCA2KQorI2RlZmluZSBSVDU2MTZfSkRfU1BSX1RSR19ISQkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0pEX0xPX01BU0sJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9KRF9MT19TRlQJCQkzCisjZGVmaW5lIFJUNTYxNl9KRF9MT19ESVMJCQkoMHgwIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9KRF9MT19FTgkJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9KRF9MT19UUkdfTUFTSwkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0pEX0xPX1RSR19TRlQJCQkyCisjZGVmaW5lIFJUNTYxNl9KRF9MT19UUkdfTE8JCQkoMHgwIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9KRF9MT19UUkdfSEkJCQkoMHgxIDw8IDIpCisKKy8qIEphY2sgRGV0ZWN0IENvbnRyb2wgMiAoMHhiYykgKi8KKyNkZWZpbmUgUlQ1NjE2X0pEX1RSR19TRUxfTUFTSwkJCSgweDcgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0pEX1RSR19TRUxfU0ZUCQkJOQorI2RlZmluZSBSVDU2MTZfSkRfVFJHX1NFTF9HUElPCQkJKDB4MCA8PCA5KQorI2RlZmluZSBSVDU2MTZfSkRfVFJHX1NFTF9KRDFfMQkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0pEX1RSR19TRUxfSkQxXzIJCQkoMHgyIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9KRF9UUkdfU0VMX0pEMgkJCSgweDMgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0pEX1RSR19TRUxfSkQzCQkJKDB4NCA8PCA5KQorI2RlZmluZSBSVDU2MTZfSkQzX0lSUV9FTgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0pEM19JUlFfRU5fU0ZUCQkJOAorI2RlZmluZSBSVDU2MTZfSkQzX0VOX1NUS1kJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9KRDNfRU5fU1RLWV9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9KRDNfSU5WCQkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0pEM19JTlZfU0ZUCQkJNgorCisvKiBJUlEgQ29udHJvbCAxICgweGJkKSAqLworI2RlZmluZSBSVDU2MTZfSVJRX0pEX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfSVJRX0pEX1NGVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9JUlFfSkRfQlAJCQkoMHgwIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfSVJRX0pEX05PUgkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9KRF9TVEtZX01BU0sJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfSkRfU1RLWV9TRlQJCQkxMworI2RlZmluZSBSVDU2MTZfSkRfU1RLWV9ESVMJCQkoMHgwIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfSkRfU1RLWV9FTgkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9KRF9QX01BU0sJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfSkRfUF9TRlQJCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X0pEX1BfTk9SCQkJCSgweDAgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9KRF9QX0lOVgkJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfSkQxXzFfSVJRX0VOCQkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2MTZfSkQxXzFfSVJRX0VOX1NGVAkJCTkKKyNkZWZpbmUgUlQ1NjE2X0pEMV8xX0VOX1NUS1kJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9KRDFfMV9FTl9TVEtZX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X0pEMV8xX0lOVgkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X0pEMV8xX0lOVl9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9KRDFfMl9JUlFfRU4JCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9KRDFfMl9JUlFfRU5fU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfSkQxXzJfRU5fU1RLWQkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0pEMV8yX0VOX1NUS1lfU0ZUCQkJNQorI2RlZmluZSBSVDU2MTZfSkQxXzJfSU5WCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfSkQxXzJfSU5WX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X0pEMl9JUlFfRU4JCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9KRDJfSVJRX0VOX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X0pEMl9FTl9TVEtZCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2MTZfSkQyX0VOX1NUS1lfU0ZUCQkJMgorI2RlZmluZSBSVDU2MTZfSkQyX0lOVgkJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTYxNl9KRDJfSU5WX1NGVAkJCTEKKworLyogSVJRIENvbnRyb2wgMiAoMHhiZSkgKi8KKyNkZWZpbmUgUlQ1NjE2X0lSUV9NQjFfT0NfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9JUlFfTUIxX09DX1NGVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9JUlFfTUIxX09DX0JQCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X0lSUV9NQjFfT0NfTk9SCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X01CMV9PQ19TVEtZX01BU0sJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfTUIxX09DX1NUS1lfU0ZUCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X01CMV9PQ19TVEtZX0RJUwkJCSgweDAgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9NQjFfT0NfU1RLWV9FTgkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9NQjFfT0NfUF9NQVNLCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfTUIxX09DX1BfU0ZUCQkJNworI2RlZmluZSBSVDU2MTZfTUIxX09DX1BfTk9SCQkJKDB4MCA8PCA3KQorI2RlZmluZSBSVDU2MTZfTUIxX09DX1BfSU5WCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfTUIyX09DX1BfTUFTSwkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X01CMV9PQ19DTFIJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9NQjFfT0NfQ0xSX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X1NUQV9HUElPOAkJCSgweDEpCisjZGVmaW5lIFJUNTYxNl9TVEFfR1BJTzhfQklUCQkJMAorCisvKiBJbnRlcm5hbCBTdGF0dXMgYW5kIEdQSU8gc3RhdHVzICgweGJmKSAqLworI2RlZmluZSBSVDU2MTZfU1RBX0pEMwkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfU1RBX0pEM19CSVQJCQkxNQorI2RlZmluZSBSVDU2MTZfU1RBX0pEMgkJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfU1RBX0pEMl9CSVQJCQkxNAorI2RlZmluZSBSVDU2MTZfU1RBX0pEMV8yCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X1NUQV9KRDFfMl9CSVQJCQkxMworI2RlZmluZSBSVDU2MTZfU1RBX0pEMV8xCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X1NUQV9KRDFfMV9CSVQJCQkxMgorI2RlZmluZSBSVDU2MTZfU1RBX0dQNwkJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2MTZfU1RBX0dQN19CSVQJCQkxMQorI2RlZmluZSBSVDU2MTZfU1RBX0dQNgkJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfU1RBX0dQNl9CSVQJCQkxMAorI2RlZmluZSBSVDU2MTZfU1RBX0dQNQkJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9TVEFfR1A1X0JJVAkJCTkKKyNkZWZpbmUgUlQ1NjE2X1NUQV9HUDEJCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2MTZfU1RBX0dQMV9CSVQJCQk4CisjZGVmaW5lIFJUNTYxNl9TVEFfR1AyCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X1NUQV9HUDJfQklUCQkJNworI2RlZmluZSBSVDU2MTZfU1RBX0dQMwkJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9TVEFfR1AzX0JJVAkJCTYKKyNkZWZpbmUgUlQ1NjE2X1NUQV9HUDQJCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfU1RBX0dQNF9CSVQJCQk1CisjZGVmaW5lIFJUNTYxNl9TVEFfR1BfSkQJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9TVEFfR1BfSkRfQklUCQkJNAorCisvKiBHUElPIENvbnRyb2wgMSAoMHhjMCkgKi8KKyNkZWZpbmUgUlQ1NjE2X0dQMV9QSU5fTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9HUDFfUElOX1NGVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9HUDFfUElOX0dQSU8xCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X0dQMV9QSU5fSVJRCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X0dQMl9QSU5fTUFTSwkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9HUDJfUElOX1NGVAkJCTE0CisjZGVmaW5lIFJUNTYxNl9HUDJfUElOX0dQSU8yCQkJKDB4MCA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X0dQMl9QSU5fRE1JQzFfU0NMCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfR1BJT19NX01BU0sJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9HUElPX01fU0ZUCQkJOQorI2RlZmluZSBSVDU2MTZfR1BJT19NX0ZMVAkJCSgweDAgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0dQSU9fTV9QSAkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0kyUzJfU0VMX01BU0sJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9JMlMyX1NFTF9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9JMlMyX1NFTF9JMlMJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9JMlMyX1NFTF9HUElPCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2MTZfR1A1X1BJTl9NQVNLCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfR1A1X1BJTl9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9HUDVfUElOX0dQSU81CQkJKDB4MCA8PCA3KQorI2RlZmluZSBSVDU2MTZfR1A1X1BJTl9JUlEJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9HUDZfUElOX01BU0sJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9HUDZfUElOX1NGVAkJCTYKKyNkZWZpbmUgUlQ1NjE2X0dQNl9QSU5fR1BJTzYJCQkoMHgwIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9HUDZfUElOX0RNSUNfU0RBCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2MTZfR1A3X1BJTl9NQVNLCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfR1A3X1BJTl9TRlQJCQk1CisjZGVmaW5lIFJUNTYxNl9HUDdfUElOX0dQSU83CQkJKDB4MCA8PCA1KQorI2RlZmluZSBSVDU2MTZfR1A3X1BJTl9JUlEJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9HUDhfUElOX01BU0sJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9HUDhfUElOX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X0dQOF9QSU5fR1BJTzgJCQkoMHgwIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9HUDhfUElOX0RNSUNfU0RBCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfR1BJT19QRE1fU0VMX01BU0sJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0dQSU9fUERNX1NFTF9TRlQJCQkzCisjZGVmaW5lIFJUNTYxNl9HUElPX1BETV9TRUxfR1BJTwkJKDB4MCA8PCAzKQorI2RlZmluZSBSVDU2MTZfR1BJT19QRE1fU0VMX1BETQkJCSgweDEgPDwgMykKKworLyogR1BJTyBDb250cm9sIDIgKDB4YzEpICovCisjZGVmaW5lIFJUNTYxNl9HUDVfRFJfTUFTSwkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9HUDVfRFJfU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X0dQNV9EUl9JTgkJCSgweDAgPDwgMTQpCisjZGVmaW5lIFJUNTYxNl9HUDVfRFJfT1VUCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X0dQNV9PVVRfTUFTSwkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9HUDVfT1VUX1NGVAkJCTEzCisjZGVmaW5lIFJUNTYxNl9HUDVfT1VUX0xPCQkJKDB4MCA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X0dQNV9PVVRfSEkJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfR1A1X1BfTUFTSwkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9HUDVfUF9TRlQJCQkxMgorI2RlZmluZSBSVDU2MTZfR1A1X1BfTk9SCQkJKDB4MCA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0dQNV9QX0lOVgkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9HUDRfRFJfTUFTSwkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9HUDRfRFJfU0ZUCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X0dQNF9EUl9JTgkJCSgweDAgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9HUDRfRFJfT1VUCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X0dQNF9PVVRfTUFTSwkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9HUDRfT1VUX1NGVAkJCTEwCisjZGVmaW5lIFJUNTYxNl9HUDRfT1VUX0xPCQkJKDB4MCA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X0dQNF9PVVRfSEkJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfR1A0X1BfTUFTSwkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0dQNF9QX1NGVAkJCTkKKyNkZWZpbmUgUlQ1NjE2X0dQNF9QX05PUgkJCSgweDAgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0dQNF9QX0lOVgkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0dQM19EUl9NQVNLCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2MTZfR1AzX0RSX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X0dQM19EUl9JTgkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0dQM19EUl9PVVQJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9HUDNfT1VUX01BU0sJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9HUDNfT1VUX1NGVAkJCTcKKyNkZWZpbmUgUlQ1NjE2X0dQM19PVVRfTE8JCQkoMHgwIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9HUDNfT1VUX0hJCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfR1AzX1BfTUFTSwkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0dQM19QX1NGVAkJCTYKKyNkZWZpbmUgUlQ1NjE2X0dQM19QX05PUgkJCSgweDAgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0dQM19QX0lOVgkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0dQMl9EUl9NQVNLCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfR1AyX0RSX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjE2X0dQMl9EUl9JTgkJCSgweDAgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0dQMl9EUl9PVVQJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9HUDJfT1VUX01BU0sJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9HUDJfT1VUX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjE2X0dQMl9PVVRfTE8JCQkoMHgwIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9HUDJfT1VUX0hJCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfR1AyX1BfTUFTSwkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0dQMl9QX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X0dQMl9QX05PUgkJCSgweDAgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0dQMl9QX0lOVgkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0dQMV9EUl9NQVNLCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2MTZfR1AxX0RSX1NGVAkJCTIKKyNkZWZpbmUgUlQ1NjE2X0dQMV9EUl9JTgkJCSgweDAgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0dQMV9EUl9PVVQJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9HUDFfT1VUX01BU0sJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTYxNl9HUDFfT1VUX1NGVAkJCTEKKyNkZWZpbmUgUlQ1NjE2X0dQMV9PVVRfTE8JCQkoMHgwIDw8IDEpCisjZGVmaW5lIFJUNTYxNl9HUDFfT1VUX0hJCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2MTZfR1AxX1BfTUFTSwkJCSgweDEpCisjZGVmaW5lIFJUNTYxNl9HUDFfUF9TRlQJCQkwCisjZGVmaW5lIFJUNTYxNl9HUDFfUF9OT1IJCQkoMHgwKQorI2RlZmluZSBSVDU2MTZfR1AxX1BfSU5WCQkJKDB4MSkKKworLyogR1BJTyBDb250cm9sIDMgKDB4YzIpICovCisjZGVmaW5lIFJUNTYxNl9HUDhfRFJfTUFTSwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0dQOF9EUl9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9HUDhfRFJfSU4JCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTYxNl9HUDhfRFJfT1VUCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2MTZfR1A4X09VVF9NQVNLCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfR1A4X09VVF9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9HUDhfT1VUX0xPCQkJKDB4MCA8PCA3KQorI2RlZmluZSBSVDU2MTZfR1A4X09VVF9ISQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X0dQOF9QX01BU0sJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9HUDhfUF9TRlQJCQk2CisjZGVmaW5lIFJUNTYxNl9HUDhfUF9OT1IJCQkoMHgwIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9HUDhfUF9JTlYJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTYxNl9HUDdfRFJfTUFTSwkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0dQN19EUl9TRlQJCQk1CisjZGVmaW5lIFJUNTYxNl9HUDdfRFJfSU4JCQkoMHgwIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9HUDdfRFJfT1VUCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2MTZfR1A3X09VVF9NQVNLCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfR1A3X09VVF9TRlQJCQk0CisjZGVmaW5lIFJUNTYxNl9HUDdfT1VUX0xPCQkJKDB4MCA8PCA0KQorI2RlZmluZSBSVDU2MTZfR1A3X09VVF9ISQkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X0dQN19QX01BU0sJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9HUDdfUF9TRlQJCQkzCisjZGVmaW5lIFJUNTYxNl9HUDdfUF9OT1IJCQkoMHgwIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9HUDdfUF9JTlYJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9HUDZfRFJfTUFTSwkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0dQNl9EUl9TRlQJCQkyCisjZGVmaW5lIFJUNTYxNl9HUDZfRFJfSU4JCQkoMHgwIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9HUDZfRFJfT1VUCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2MTZfR1A2X09VVF9NQVNLCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2MTZfR1A2X09VVF9TRlQJCQkxCisjZGVmaW5lIFJUNTYxNl9HUDZfT1VUX0xPCQkJKDB4MCA8PCAxKQorI2RlZmluZSBSVDU2MTZfR1A2X09VVF9ISQkJCSgweDEgPDwgMSkKKyNkZWZpbmUgUlQ1NjE2X0dQNl9QX01BU0sJCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfR1A2X1BfU0ZUCQkJMAorI2RlZmluZSBSVDU2MTZfR1A2X1BfTk9SCQkJKDB4MCkKKyNkZWZpbmUgUlQ1NjE2X0dQNl9QX0lOVgkJCSgweDEpCisKKy8qIFNjcmFtYmxlIENvbnRyb2wgKDB4Y2UpICovCisjZGVmaW5lIFJUNTYxNl9TQ0JfU1dBUF9NQVNLCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1NDQl9TV0FQX1NGVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9TQ0JfU1dBUF9ESVMJCQkoMHgwIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfU0NCX1NXQVBfRU4JCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfU0NCX01BU0sJCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X1NDQl9TRlQJCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X1NDQl9ESVMJCQkJKDB4MCA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X1NDQl9FTgkJCQkoMHgxIDw8IDE0KQorCisvKiBCYXNlYmFjayBDb250cm9sICgweGNmKSAqLworI2RlZmluZSBSVDU2MTZfQkJfTUFTSwkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfQkJfU0ZUCQkJCTE1CisjZGVmaW5lIFJUNTYxNl9CQl9ESVMJCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X0JCX0VOCQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9CQl9DVF9NQVNLCQkJKDB4NyA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0JCX0NUX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9CQl9DVF9BCQkJCSgweDAgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9CQl9DVF9CCQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9CQl9DVF9DCQkJCSgweDIgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9CQl9DVF9ECQkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTYxNl9NX0JCX0xfTUFTSwkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X01fQkJfTF9TRlQJCQk5CisjZGVmaW5lIFJUNTYxNl9NX0JCX1JfTUFTSwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X01fQkJfUl9TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9NX0JCX0hQRl9MX01BU0sJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9NX0JCX0hQRl9MX1NGVAkJCTcKKyNkZWZpbmUgUlQ1NjE2X01fQkJfSFBGX1JfTUFTSwkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X01fQkJfSFBGX1JfU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfR19CQl9CU1RfTUFTSwkJCSgweDNmKQorI2RlZmluZSBSVDU2MTZfR19CQl9CU1RfU0ZUCQkJMAorCisvKiBNUDMgUGx1cyBDb250cm9sIDEgKDB4ZDApICovCisjZGVmaW5lIFJUNTYxNl9NX01QM19MX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfTV9NUDNfTF9TRlQJCQkxNQorI2RlZmluZSBSVDU2MTZfTV9NUDNfUl9NQVNLCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2X01fTVAzX1JfU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjE2X01fTVAzX01BU0sJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfTV9NUDNfU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjE2X01fTVAzX0RJUwkJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9NX01QM19FTgkJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfRUdfTVAzX01BU0sJCQkoMHgxZiA8PCA4KQorI2RlZmluZSBSVDU2MTZfRUdfTVAzX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X01QM19ITFBfTUFTSwkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjE2X01QM19ITFBfU0ZUCQkJNworI2RlZmluZSBSVDU2MTZfTVAzX0hMUF9ESVMJCQkoMHgwIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9NUDNfSExQX0VOCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfTV9NUDNfT1JHX0xfTUFTSwkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X01fTVAzX09SR19MX1NGVAkJCTYKKyNkZWZpbmUgUlQ1NjE2X01fTVAzX09SR19SX01BU0sJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9NX01QM19PUkdfUl9TRlQJCQk1CisKKy8qIE1QMyBQbHVzIENvbnRyb2wgMiAoMHhkMSkgKi8KKyNkZWZpbmUgUlQ1NjE2X01QM19XVF9NQVNLCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X01QM19XVF9TRlQJCQkxMworI2RlZmluZSBSVDU2MTZfTVAzX1dUXzFfNAkJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9NUDNfV1RfMV8yCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X09HX01QM19NQVNLCQkJKDB4MWYgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X09HX01QM19TRlQJCQk4CisjZGVmaW5lIFJUNTYxNl9IR19NUDNfTUFTSwkJCSgweDNmKQorI2RlZmluZSBSVDU2MTZfSEdfTVAzX1NGVAkJCTAKKworLyogM0QgSFAgQ29udHJvbCAxICgweGQyKSAqLworI2RlZmluZSBSVDU2MTZfM0RfQ0ZfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl8zRF9DRl9TRlQJCQkxNQorI2RlZmluZSBSVDU2MTZfM0RfQ0ZfRElTCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2XzNEX0NGX0VOCQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl8zRF9IUF9NQVNLCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2XzNEX0hQX1NGVAkJCTE0CisjZGVmaW5lIFJUNTYxNl8zRF9IUF9ESVMJCQkoMHgwIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfM0RfSFBfRU4JCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjE2XzNEX0JUX01BU0sJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfM0RfQlRfU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjE2XzNEX0JUX0RJUwkJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl8zRF9CVF9FTgkJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfM0RfMUZfTUlYX01BU0sJCQkoMHgzIDw8IDExKQorI2RlZmluZSBSVDU2MTZfM0RfMUZfTUlYX1NGVAkJCTExCisjZGVmaW5lIFJUNTYxNl8zRF9IUF9NX01BU0sJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfM0RfSFBfTV9TRlQJCQkxMAorI2RlZmluZSBSVDU2MTZfM0RfSFBfTV9TVVIJCQkoMHgwIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfM0RfSFBfTV9GUk8JCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfTV8zRF9IUlRGX01BU0sJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9NXzNEX0hSVEZfU0ZUCQkJOQorI2RlZmluZSBSVDU2MTZfTV8zRF9EMkhfTUFTSwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X01fM0RfRDJIX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X01fM0RfRDJSX01BU0sJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTYxNl9NXzNEX0QyUl9TRlQJCQk3CisjZGVmaW5lIFJUNTYxNl9NXzNEX1JFVkJfTUFTSwkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X01fM0RfUkVWQl9TRlQJCQk2CisKKy8qIEFkanVzdGFibGUgaGlnaCBwYXNzIGZpbHRlciBjb250cm9sIDEgKDB4ZDMpICovCisjZGVmaW5lIFJUNTYxNl8yTkRfSFBGX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfMk5EX0hQRl9TRlQJCQkxNQorI2RlZmluZSBSVDU2MTZfMk5EX0hQRl9ESVMJCQkoMHgwIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfMk5EX0hQRl9FTgkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9IUEZfQ0ZfTF9NQVNLCQkJKDB4NyA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0hQRl9DRl9MX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9IUEZfQ0ZfUl9NQVNLCQkJKDB4NyA8PCA4KQorI2RlZmluZSBSVDU2MTZfSFBGX0NGX1JfU0ZUCQkJOAorI2RlZmluZSBSVDU2MTZfWkRfVF9NQVNLCQkJKDB4MyA8PCA2KQorI2RlZmluZSBSVDU2MTZfWkRfVF9TRlQJCQkJNgorI2RlZmluZSBSVDU2MTZfWkRfRl9NQVNLCQkJKDB4MyA8PCA0KQorI2RlZmluZSBSVDU2MTZfWkRfRl9TRlQJCQkJNAorI2RlZmluZSBSVDU2MTZfWkRfRl9JTQkJCQkoMHgwIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9aRF9GX1pDX0lNCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfWkRfRl9aQ19JT0QJCQkoMHgyIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9aRF9GX1VOCQkJCSgweDMgPDwgNCkKKworLyogQWRqdXN0YWJsZSBoaWdoIHBhc3MgZmlsdGVyIGNvbnRyb2wgMiAoMHhkNCkgKi8KKyNkZWZpbmUgUlQ1NjE2X0hQRl9DRl9MX05VTV9NQVNLCQkoMHgzZiA8PCA4KQorI2RlZmluZSBSVDU2MTZfSFBGX0NGX0xfTlVNX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2X0hQRl9DRl9SX05VTV9NQVNLCQkoMHgzZikKKyNkZWZpbmUgUlQ1NjE2X0hQRl9DRl9SX05VTV9TRlQJCQkwCisKKy8qIEhQIGNhbGlicmF0aW9uIGNvbnRyb2wgYW5kIEFtcCBkZXRlY3Rpb24gKDB4ZDYpICovCisjZGVmaW5lIFJUNTYxNl9TSV9EQUNfTUFTSwkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9TSV9EQUNfU0ZUCQkJMTEKKyNkZWZpbmUgUlQ1NjE2X1NJX0RBQ19BVVRPCQkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X1NJX0RBQ19URVNUCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X0RDX0NBTF9NX01BU0sJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfRENfQ0FMX01fU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjE2X0RDX0NBTF9NX05PUgkJCSgweDAgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9EQ19DQUxfTV9DQUwJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfRENfQ0FMX01BU0sJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTYxNl9EQ19DQUxfU0ZUCQkJOQorI2RlZmluZSBSVDU2MTZfRENfQ0FMX0RJUwkJCSgweDAgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0RDX0NBTF9FTgkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjE2X0hQRF9SQ1ZfTUFTSwkJCSgweDcgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0hQRF9SQ1ZfU0ZUCQkJNgorI2RlZmluZSBSVDU2MTZfSFBEX1BTX01BU0sJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9IUERfUFNfU0ZUCQkJNQorI2RlZmluZSBSVDU2MTZfSFBEX1BTX0RJUwkJCSgweDAgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0hQRF9QU19FTgkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjE2X0NBTF9NX01BU0sJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9DQUxfTV9TRlQJCQk0CisjZGVmaW5lIFJUNTYxNl9DQUxfTV9ERVAJCQkoMHgwIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9DQUxfTV9DQUwJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9DQUxfTUFTSwkJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9DQUxfU0ZUCQkJCTMKKyNkZWZpbmUgUlQ1NjE2X0NBTF9ESVMJCQkJKDB4MCA8PCAzKQorI2RlZmluZSBSVDU2MTZfQ0FMX0VOCQkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjE2X0NBTF9URVNUX01BU0sJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9DQUxfVEVTVF9TRlQJCQkyCisjZGVmaW5lIFJUNTYxNl9DQUxfVEVTVF9ESVMJCQkoMHgwIDw8IDIpCisjZGVmaW5lIFJUNTYxNl9DQUxfVEVTVF9FTgkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjE2X0NBTF9QX01BU0sJCQkoMHgzKQorI2RlZmluZSBSVDU2MTZfQ0FMX1BfU0ZUCQkJMAorI2RlZmluZSBSVDU2MTZfQ0FMX1BfTk9ORQkJCSgweDApCisjZGVmaW5lIFJUNTYxNl9DQUxfUF9DQUwJCQkoMHgxKQorI2RlZmluZSBSVDU2MTZfQ0FMX1BfREFDX0NBTAkJCSgweDIpCisKKy8qIFNvZnQgdm9sdW1lIGFuZCB6ZXJvIGNyb3NzIGNvbnRyb2wgMSAoMHhkOSkgKi8KKyNkZWZpbmUgUlQ1NjE2X1NWX01BU0sJCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1NWX1NGVAkJCQkxNQorI2RlZmluZSBSVDU2MTZfU1ZfRElTCQkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl9TVl9FTgkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfT1VUX1NWX01BU0sJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2MTZfT1VUX1NWX1NGVAkJCTEzCisjZGVmaW5lIFJUNTYxNl9PVVRfU1ZfRElTCQkJKDB4MCA8PCAxMykKKyNkZWZpbmUgUlQ1NjE2X09VVF9TVl9FTgkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl9IUF9TVl9NQVNLCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X0hQX1NWX1NGVAkJCTEyCisjZGVmaW5lIFJUNTYxNl9IUF9TVl9ESVMJCQkoMHgwIDw8IDEyKQorI2RlZmluZSBSVDU2MTZfSFBfU1ZfRU4JCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjE2X1pDRF9ESUdfTUFTSwkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9aQ0RfRElHX1NGVAkJCTExCisjZGVmaW5lIFJUNTYxNl9aQ0RfRElHX0RJUwkJCSgweDAgPDwgMTEpCisjZGVmaW5lIFJUNTYxNl9aQ0RfRElHX0VOCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjE2X1pDRF9NQVNLCQkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9aQ0RfU0ZUCQkJCTEwCisjZGVmaW5lIFJUNTYxNl9aQ0RfUEQJCQkJKDB4MCA8PCAxMCkKKyNkZWZpbmUgUlQ1NjE2X1pDRF9QVQkJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfTV9aQ0RfTUFTSwkJCSgweDNmIDw8IDQpCisjZGVmaW5lIFJUNTYxNl9NX1pDRF9TRlQJCQk0CisjZGVmaW5lIFJUNTYxNl9NX1pDRF9PTV9MCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2MTZfTV9aQ0RfT01fUgkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X01fWkNEX1JNX0wJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTYxNl9NX1pDRF9STV9SCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2MTZfU1ZfRExZX01BU0sJCQkoMHhmKQorI2RlZmluZSBSVDU2MTZfU1ZfRExZX1NGVAkJCTAKKworLyogU29mdCB2b2x1bWUgYW5kIHplcm8gY3Jvc3MgY29udHJvbCAyICgweGRhKSAqLworI2RlZmluZSBSVDU2MTZfWkNEX0hQX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfWkNEX0hQX1NGVAkJCTE1CisjZGVmaW5lIFJUNTYxNl9aQ0RfSFBfRElTCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2X1pDRF9IUF9FTgkJCSgweDEgPDwgMTUpCisKKy8qIERpZ2l0YWwgTWlzYyBDb250cm9sICgweGZhKSAqLworI2RlZmluZSBSVDU2MTZfSTJTMl9NU19TUF9NQVNLCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2MTZfSTJTMl9NU19TUF9TRUwJCQk4CisjZGVmaW5lIFJUNTYxNl9JMlMyX01TX1NQXzY0CQkJKDB4MCA8PCA4KQorI2RlZmluZSBSVDU2MTZfSTJTMl9NU19TUF81MAkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjE2X0NMS19ERVRfRU4JCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTYxNl9DTEtfREVUX0VOX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjE2X0FNUF9ERVRfRU4JCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTYxNl9BTVBfREVUX0VOX1NGVAkJCTEKKyNkZWZpbmUgUlQ1NjE2X0RfR0FURV9FTgkJCSgweDEpCisjZGVmaW5lIFJUNTYxNl9EX0dBVEVfRU5fU0ZUCQkJMAorCisvKiBDb2RlYyBQcml2YXRlIFJlZ2lzdGVyIGRlZmluaXRpb24gKi8KKy8qIDNEIFNwZWFrZXIgQ29udHJvbCAoMHg2MykgKi8KKyNkZWZpbmUgUlQ1NjE2XzNEX1NQS19NQVNLCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjE2XzNEX1NQS19TRlQJCQkxNQorI2RlZmluZSBSVDU2MTZfM0RfU1BLX0RJUwkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTYxNl8zRF9TUEtfRU4JCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfM0RfU1BLX01fTUFTSwkJCSgweDMgPDwgMTMpCisjZGVmaW5lIFJUNTYxNl8zRF9TUEtfTV9TRlQJCQkxMworI2RlZmluZSBSVDU2MTZfM0RfU1BLX0NHX01BU0sJCQkoMHgxZiA8PCA4KQorI2RlZmluZSBSVDU2MTZfM0RfU1BLX0NHX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjE2XzNEX1NQS19TR19NQVNLCQkJKDB4MWYpCisjZGVmaW5lIFJUNTYxNl8zRF9TUEtfU0dfU0ZUCQkJMAorCisvKiBXaW5kIE5vaXNlIERldGVjdGlvbiBDb250cm9sIDEgKDB4NmMpICovCisjZGVmaW5lIFJUNTYxNl9XTkRfTUFTSwkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfV05EX1NGVAkJCQkxNQorI2RlZmluZSBSVDU2MTZfV05EX0RJUwkJCQkoMHgwIDw8IDE1KQorI2RlZmluZSBSVDU2MTZfV05EX0VOCQkJCSgweDEgPDwgMTUpCisKKy8qIFdpbmQgTm9pc2UgRGV0ZWN0aW9uIENvbnRyb2wgMiAoMHg2ZCkgKi8KKyNkZWZpbmUgUlQ1NjE2X1dORF9GQ19OV19NQVNLCQkJKDB4M2YgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9XTkRfRkNfTldfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjE2X1dORF9GQ19XS19NQVNLCQkJKDB4M2YgPDwgNCkKKyNkZWZpbmUgUlQ1NjE2X1dORF9GQ19XS19TRlQJCQk0CisKKy8qIFdpbmQgTm9pc2UgRGV0ZWN0aW9uIENvbnRyb2wgMyAoMHg2ZSkgKi8KKyNkZWZpbmUgUlQ1NjE2X0hQRl9GQ19NQVNLCQkJKDB4M2YgPDwgNikKKyNkZWZpbmUgUlQ1NjE2X0hQRl9GQ19TRlQJCQk2CisjZGVmaW5lIFJUNTYxNl9XTkRfRkNfU1RfTUFTSwkJCSgweDNmKQorI2RlZmluZSBSVDU2MTZfV05EX0ZDX1NUX1NGVAkJCTAKKworLyogV2luZCBOb2lzZSBEZXRlY3Rpb24gQ29udHJvbCA0ICgweDZmKSAqLworI2RlZmluZSBSVDU2MTZfV05EX1RIX0xPX01BU0sJCQkoMHgzZmYpCisjZGVmaW5lIFJUNTYxNl9XTkRfVEhfTE9fU0ZUCQkJMAorCisvKiBXaW5kIE5vaXNlIERldGVjdGlvbiBDb250cm9sIDUgKDB4NzApICovCisjZGVmaW5lIFJUNTYxNl9XTkRfVEhfSElfTUFTSwkJCSgweDNmZikKKyNkZWZpbmUgUlQ1NjE2X1dORF9USF9ISV9TRlQJCQkwCisKKy8qIFdpbmQgTm9pc2UgRGV0ZWN0aW9uIENvbnRyb2wgOCAoMHg3MykgKi8KKyNkZWZpbmUgUlQ1NjE2X1dORF9XSU5EX01BU0sJCQkoMHgxIDw8IDEzKSAvKiBSZWFkLU9ubHkgKi8KKyNkZWZpbmUgUlQ1NjE2X1dORF9XSU5EX1NGVAkJCTEzCisjZGVmaW5lIFJUNTYxNl9XTkRfU1RST05HX01BU0sJCQkoMHgxIDw8IDEyKSAvKiBSZWFkLU9ubHkgKi8KKyNkZWZpbmUgUlQ1NjE2X1dORF9TVFJPTkdfU0ZUCQkJMTIKK2VudW0geworCVJUNTYxNl9OT19XSU5ELAorCVJUNTYxNl9CUkVFWkUsCisJUlQ1NjE2X1NUT1JNLAorfTsKKworLyogRGlwb2xlIFNwZWFrZXIgSW50ZXJmYWNlICgweDc1KSAqLworI2RlZmluZSBSVDU2MTZfRFBfQVRUX01BU0sJCQkoMHgzIDw8IDE0KQorI2RlZmluZSBSVDU2MTZfRFBfQVRUX1NGVAkJCTE0CisjZGVmaW5lIFJUNTYxNl9EUF9TUEtfTUFTSwkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTYxNl9EUF9TUEtfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjE2X0RQX1NQS19ESVMJCQkoMHgwIDw8IDEwKQorI2RlZmluZSBSVDU2MTZfRFBfU1BLX0VOCQkJKDB4MSA8PCAxMCkKKworLyogRVEgUHJlIFZvbHVtZSBDb250cm9sICgweGIzKSAqLworI2RlZmluZSBSVDU2MTZfRVFfUFJFX1ZPTF9NQVNLCQkJKDB4ZmZmZikKKyNkZWZpbmUgUlQ1NjE2X0VRX1BSRV9WT0xfU0ZUCQkJMAorCisvKiBFUSBQb3N0IFZvbHVtZSBDb250cm9sICgweGI0KSAqLworI2RlZmluZSBSVDU2MTZfRVFfUFNUX1ZPTF9NQVNLCQkJKDB4ZmZmZikKKyNkZWZpbmUgUlQ1NjE2X0VRX1BTVF9WT0xfU0ZUCQkJMAorCisvKiBTeXN0ZW0gQ2xvY2sgU291cmNlICovCitlbnVtIHsKKwlSVDU2MTZfU0NMS19TX01DTEssCisJUlQ1NjE2X1NDTEtfU19QTEwxLAorfTsKKworLyogUExMMSBTb3VyY2UgKi8KK2VudW0geworCVJUNTYxNl9QTEwxX1NfTUNMSywKKwlSVDU2MTZfUExMMV9TX0JDTEsxLAorCVJUNTYxNl9QTEwxX1NfQkNMSzIsCit9OworCitlbnVtIHsKKwlSVDU2MTZfQUlGMSwKKwlSVDU2MTZfQUlGUywKK307CisKKyNlbmRpZiAvKiBfX1JUNTYxNl9IX18gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY0MC5jCmluZGV4IGYyYmViMWEuLjExZDAzMmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NDAuYwpAQCAtNDg4LDYgKzQ4OCwxOCBAQAogCQlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpc191c2luZ19hc3JjKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCisJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSk7CisJc3RydWN0IHJ0NTY0MF9wcml2ICpydDU2NDAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCWlmICghcnQ1NjQwLT5hc3JjX2VuKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCiAvKiBEaWdpdGFsIE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjQwX3N0b19hZGNfbF9taXhbXSA9IHsKIAlTT0NfREFQTV9TSU5HTEUoIkFEQzEgU3dpdGNoIiwgUlQ1NjQwX1NUT19BRENfTUlYRVIsCkBAIC0xMDU5LDYgKzEwNzEsMjAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBydDU2NDBfZGFwbV93aWRnZXRzW10gPSB7CiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiUExMMSIsIFJUNTY0MF9QV1JfQU5MRzIsCiAJCQlSVDU2NDBfUFdSX1BMTF9CSVQsIDAsIE5VTEwsIDApLAorCisJLyogQVNSQyAqLworCVNORF9TT0NfREFQTV9TVVBQTFlfUygiU3RlcmVvIEZpbHRlciBBU1JDIiwgMSwgUlQ1NjQwX0FTUkNfMSwKKwkJCSAxNSwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJJMlMyIEZpbHRlciBBU1JDIiwgMSwgUlQ1NjQwX0FTUkNfMSwKKwkJCSAxMiwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJJMlMyIEFTUkMiLCAxLCBSVDU2NDBfQVNSQ18xLAorCQkJIDExLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkRNSUMxIEFTUkMiLCAxLCBSVDU2NDBfQVNSQ18xLAorCQkJIDksIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiRE1JQzIgQVNSQyIsIDEsIFJUNTY0MF9BU1JDXzEsCisJCQkgOCwgMCwgTlVMTCwgMCksCisKKwogCS8qIElucHV0IFNpZGUgKi8KIAkvKiBtaWNiaWFzICovCiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiTERPMiIsIFJUNTY0MF9QV1JfQU5MRzEsCkBAIC0xMzE5LDYgKzEzNDUsMTIgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHJ0NTY0MF9kYXBtX3JvdXRlc1tdID0geworCXsgIkkyUzEiLCBOVUxMLCAiU3RlcmVvIEZpbHRlciBBU1JDIiwgaXNfdXNpbmdfYXNyYyB9LAorCXsgIkkyUzIiLCBOVUxMLCAiSTJTMiBBU1JDIiwgaXNfdXNpbmdfYXNyYyB9LAorCXsgIkkyUzIiLCBOVUxMLCAiSTJTMiBGaWx0ZXIgQVNSQyIsIGlzX3VzaW5nX2FzcmMgfSwKKwl7ICJETUlDMSIsIE5VTEwsICJETUlDMSBBU1JDIiwgaXNfdXNpbmdfYXNyYyB9LAorCXsgIkRNSUMyIiwgTlVMTCwgIkRNSUMyIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisKIAl7IklOMVAiLCBOVUxMLCAiTERPMiJ9LAogCXsiSU4yUCIsIE5VTEwsICJMRE8yIn0sCiAJeyJJTjNQIiwgTlVMTCwgIkxETzIifSwKQEAgLTE5ODEsNiArMjAxMyw3NiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQ1NjQwX2RtaWNfZW5hYmxlKTsKIAoraW50IHJ0NTY0MF9zZWxfYXNyY19jbGtfc3JjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJdW5zaWduZWQgaW50IGZpbHRlcl9tYXNrLCB1bnNpZ25lZCBpbnQgY2xrX3NyYykKK3sKKwlzdHJ1Y3QgcnQ1NjQwX3ByaXYgKnJ0NTY0MCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXVuc2lnbmVkIGludCBhc3JjMl9tYXNrID0gMDsKKwl1bnNpZ25lZCBpbnQgYXNyYzJfdmFsdWUgPSAwOworCisJc3dpdGNoIChjbGtfc3JjKSB7CisJY2FzZSBSVDU2NDBfQ0xLX1NFTF9TWVM6CisJY2FzZSBSVDU2NDBfQ0xLX1NFTF9BU1JDOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZmlsdGVyX21hc2spCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjQwX0RBX1NURVJFT19GSUxURVIpIHsKKwkJYXNyYzJfbWFzayB8PSBSVDU2NDBfU1RPX0RBQ19NX01BU0s7CisJCWFzcmMyX3ZhbHVlID0gKGFzcmMyX3ZhbHVlICYgflJUNTY0MF9TVE9fREFDX01fTUFTSykKKwkJCXwgKGNsa19zcmMgPDwgUlQ1NjQwX1NUT19EQUNfTV9TRlQpOworCX0KKworCWlmIChmaWx0ZXJfbWFzayAmIFJUNTY0MF9EQV9NT05PX0xfRklMVEVSKSB7CisJCWFzcmMyX21hc2sgfD0gUlQ1NjQwX01EQV9MX01fTUFTSzsKKwkJYXNyYzJfdmFsdWUgPSAoYXNyYzJfdmFsdWUgJiB+UlQ1NjQwX01EQV9MX01fTUFTSykKKwkJCXwgKGNsa19zcmMgPDwgUlQ1NjQwX01EQV9MX01fU0ZUKTsKKwl9CisKKwlpZiAoZmlsdGVyX21hc2sgJiBSVDU2NDBfREFfTU9OT19SX0ZJTFRFUikgeworCQlhc3JjMl9tYXNrIHw9IFJUNTY0MF9NREFfUl9NX01BU0s7CisJCWFzcmMyX3ZhbHVlID0gKGFzcmMyX3ZhbHVlICYgflJUNTY0MF9NREFfUl9NX01BU0spCisJCQl8IChjbGtfc3JjIDw8IFJUNTY0MF9NREFfUl9NX1NGVCk7CisJfQorCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjQwX0FEX1NURVJFT19GSUxURVIpIHsKKwkJYXNyYzJfbWFzayB8PSBSVDU2NDBfQURDX01fTUFTSzsKKwkJYXNyYzJfdmFsdWUgPSAoYXNyYzJfdmFsdWUgJiB+UlQ1NjQwX0FEQ19NX01BU0spCisJCQl8IChjbGtfc3JjIDw8IFJUNTY0MF9BRENfTV9TRlQpOworCX0KKworCWlmIChmaWx0ZXJfbWFzayAmIFJUNTY0MF9BRF9NT05PX0xfRklMVEVSKSB7CisJCWFzcmMyX21hc2sgfD0gUlQ1NjQwX01BRF9MX01fTUFTSzsKKwkJYXNyYzJfdmFsdWUgPSAoYXNyYzJfdmFsdWUgJiB+UlQ1NjQwX01BRF9MX01fTUFTSykKKwkJCXwgKGNsa19zcmMgPDwgUlQ1NjQwX01BRF9MX01fU0ZUKTsKKwl9CisKKwlpZiAoZmlsdGVyX21hc2sgJiBSVDU2NDBfQURfTU9OT19SX0ZJTFRFUikgIHsKKwkJYXNyYzJfbWFzayB8PSBSVDU2NDBfTUFEX1JfTV9NQVNLOworCQlhc3JjMl92YWx1ZSA9IChhc3JjMl92YWx1ZSAmIH5SVDU2NDBfTUFEX1JfTV9NQVNLKQorCQkJfCAoY2xrX3NyYyA8PCBSVDU2NDBfTUFEX1JfTV9TRlQpOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY0MF9BU1JDXzIsCisJCWFzcmMyX21hc2ssIGFzcmMyX3ZhbHVlKTsKKworCWlmIChzbmRfc29jX3JlYWQoY29kZWMsIFJUNTY0MF9BU1JDXzIpKSB7CisJCXJ0NTY0MC0+YXNyY19lbiA9IHRydWU7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY0MF9KRF9DVFJMLCAweDMsIDB4Myk7CisJfSBlbHNlIHsKKwkJcnQ1NjQwLT5hc3JjX2VuID0gZmFsc2U7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY0MF9KRF9DVFJMLCAweDMsIDB4MCk7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDU2NDBfc2VsX2FzcmNfY2xrX3NyYyk7CisKIHN0YXRpYyBpbnQgcnQ1NjQwX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSBzbmRfc29jX2NvZGVjX2dldF9kYXBtKGNvZGVjKTsKQEAgLTIxNzUsNiArMjI3Nyw3IEBACiAJeyAiSU5UMzNDQSIsIDAgfSwKIAl7ICIxMEVDNTY0MCIsIDAgfSwKIAl7ICIxMEVDNTY0MiIsIDAgfSwKKwl7ICJJTlRDQ0ZGRCIsIDAgfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBydDU2NDBfYWNwaV9tYXRjaCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY0MC5oIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NDAuaAppbmRleCAzZGViOGJhLi44M2E3MTUwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY0MC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQwLmgKQEAgLTEwMzMsNiArMTAzMywxMCBAQAogI2RlZmluZSBSVDU2NDBfRE1JQ18yX01fTk9SCQkJKDB4MCA8PCA4KQogI2RlZmluZSBSVDU2NDBfRE1JQ18yX01fQVNZTgkJCSgweDEgPDwgOCkKIAorLyogQVNSQyBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uICgweDg0KSAqLworI2RlZmluZSBSVDU2NDBfQ0xLX1NFTF9TWVMJCQkoMHgwKQorI2RlZmluZSBSVDU2NDBfQ0xLX1NFTF9BU1JDCQkJKDB4MSkKKwogLyogQVNSQyBDb250cm9sIDIgKDB4ODQpICovCiAjZGVmaW5lIFJUNTY0MF9NREFfTF9NX01BU0sJCQkoMHgxIDw8IDE1KQogI2RlZmluZSBSVDU2NDBfTURBX0xfTV9TRlQJCQkxNQpAQCAtMjA3OSw2ICsyMDgzLDE2IEBACiAJUlQ1NjQwX0RNSUMyLAogfTsKIAorLyogZmlsdGVyIG1hc2sgKi8KK2VudW0geworCVJUNTY0MF9EQV9TVEVSRU9fRklMVEVSID0gMHgxLAorCVJUNTY0MF9EQV9NT05PX0xfRklMVEVSID0gKDB4MSA8PCAxKSwKKwlSVDU2NDBfREFfTU9OT19SX0ZJTFRFUiA9ICgweDEgPDwgMiksCisJUlQ1NjQwX0FEX1NURVJFT19GSUxURVIgPSAoMHgxIDw8IDMpLAorCVJUNTY0MF9BRF9NT05PX0xfRklMVEVSID0gKDB4MSA8PCA0KSwKKwlSVDU2NDBfQURfTU9OT19SX0ZJTFRFUiA9ICgweDEgPDwgNSksCit9OworCiBzdHJ1Y3QgcnQ1NjQwX3ByaXYgewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlzdHJ1Y3QgcnQ1NjQwX3BsYXRmb3JtX2RhdGEgcGRhdGE7CkBAIC0yMDk1LDkgKzIxMDksMTIgQEAKIAlpbnQgcGxsX291dDsKIAogCWJvb2wgaHBfbXV0ZTsKKwlib29sIGFzcmNfZW47CiB9OwogCiBpbnQgcnQ1NjQwX2RtaWNfZW5hYmxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJICAgICAgIGJvb2wgZG1pYzFfZGF0YV9waW4sIGJvb2wgZG1pYzJfZGF0YV9waW4pOworaW50IHJ0NTY0MF9zZWxfYXNyY19jbGtfc3JjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJdW5zaWduZWQgaW50IGZpbHRlcl9tYXNrLCB1bnNpZ25lZCBpbnQgY2xrX3NyYyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDU2NDUuYyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQ1LmMKaW5kZXggMjgxMzIzNy4uYzYxZDM4YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9ydDU2NDUuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY0NS5jCkBAIC02NCw3ICs2NCw2IEBACiAJe1JUNTY0NV9QUl9CQVNFICsgMHgyMSwJMHg0MDQwfSwKIAl7UlQ1NjQ1X1BSX0JBU0UgKyAweDIzLAkweDAwMDR9LAogfTsKLSNkZWZpbmUgUlQ1NjQ1X0lOSVRfUkVHX0xFTiBBUlJBWV9TSVpFKGluaXRfbGlzdCkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfc2VxdWVuY2UgcnQ1NjUwX2luaXRfbGlzdFtdID0gewogCXsweGY2LAkweDAxMDB9LApAQCAtMjI2LDYgKzIyNSwxNjMgQEAKIAl7IDB4ZmYsIDB4NjMwOCB9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfZGVmYXVsdCBydDU2NTBfcmVnW10gPSB7CisJeyAweDAwLCAweDAwMDAgfSwKKwl7IDB4MDEsIDB4YzhjOCB9LAorCXsgMHgwMiwgMHhjOGM4IH0sCisJeyAweDAzLCAweGM4YzggfSwKKwl7IDB4MGEsIDB4MDAwMiB9LAorCXsgMHgwYiwgMHgyODI3IH0sCisJeyAweDBjLCAweGUwMDAgfSwKKwl7IDB4MGQsIDB4MDAwMCB9LAorCXsgMHgwZSwgMHgwMDAwIH0sCisJeyAweDBmLCAweDA4MDggfSwKKwl7IDB4MTQsIDB4MzMzMyB9LAorCXsgMHgxNiwgMHg0YjAwIH0sCisJeyAweDE4LCAweDAxOGIgfSwKKwl7IDB4MTksIDB4YWZhZiB9LAorCXsgMHgxYSwgMHhhZmFmIH0sCisJeyAweDFiLCAweDAwMDEgfSwKKwl7IDB4MWMsIDB4MmYyZiB9LAorCXsgMHgxZCwgMHgyZjJmIH0sCisJeyAweDFlLCAweDAwMDAgfSwKKwl7IDB4MjAsIDB4MDAwMCB9LAorCXsgMHgyNywgMHg3MDYwIH0sCisJeyAweDI4LCAweDcwNzAgfSwKKwl7IDB4MjksIDB4ODA4MCB9LAorCXsgMHgyYSwgMHg1NjU2IH0sCisJeyAweDJiLCAweDU0NTQgfSwKKwl7IDB4MmMsIDB4YWFhMCB9LAorCXsgMHgyZCwgMHgwMDAwIH0sCisJeyAweDJmLCAweDEwMDIgfSwKKwl7IDB4MzEsIDB4NTAwMCB9LAorCXsgMHgzMiwgMHgwMDAwIH0sCisJeyAweDMzLCAweDAwMDAgfSwKKwl7IDB4MzQsIDB4MDAwMCB9LAorCXsgMHgzNSwgMHgwMDAwIH0sCisJeyAweDNiLCAweDAwMDAgfSwKKwl7IDB4M2MsIDB4MDA3ZiB9LAorCXsgMHgzZCwgMHgwMDAwIH0sCisJeyAweDNlLCAweDAwN2YgfSwKKwl7IDB4M2YsIDB4MDAwMCB9LAorCXsgMHg0MCwgMHgwMDFmIH0sCisJeyAweDQxLCAweDAwMDAgfSwKKwl7IDB4NDIsIDB4MDAxZiB9LAorCXsgMHg0NSwgMHg2MDAwIH0sCisJeyAweDQ2LCAweDAwM2UgfSwKKwl7IDB4NDcsIDB4MDAzZSB9LAorCXsgMHg0OCwgMHhmODA3IH0sCisJeyAweDRhLCAweDAwMDQgfSwKKwl7IDB4NGQsIDB4MDAwMCB9LAorCXsgMHg0ZSwgMHgwMDAwIH0sCisJeyAweDRmLCAweDAxZmYgfSwKKwl7IDB4NTAsIDB4MDAwMCB9LAorCXsgMHg1MSwgMHgwMDAwIH0sCisJeyAweDUyLCAweDAxZmYgfSwKKwl7IDB4NTMsIDB4ZjAwMCB9LAorCXsgMHg1NiwgMHgwMTExIH0sCisJeyAweDU3LCAweDAwNjQgfSwKKwl7IDB4NTgsIDB4ZWYwZSB9LAorCXsgMHg1OSwgMHhmMGYwIH0sCisJeyAweDVhLCAweGVmMGUgfSwKKwl7IDB4NWIsIDB4ZjBmMCB9LAorCXsgMHg1YywgMHhlZjBlIH0sCisJeyAweDVkLCAweGYwZjAgfSwKKwl7IDB4NWUsIDB4ZjAwMCB9LAorCXsgMHg1ZiwgMHgwMDAwIH0sCisJeyAweDYxLCAweDAzMDAgfSwKKwl7IDB4NjIsIDB4MDAwMCB9LAorCXsgMHg2MywgMHgwMGMyIH0sCisJeyAweDY0LCAweDAwMDAgfSwKKwl7IDB4NjUsIDB4MDAwMCB9LAorCXsgMHg2NiwgMHgwMDAwIH0sCisJeyAweDZhLCAweDAwMDAgfSwKKwl7IDB4NmMsIDB4MGFhYSB9LAorCXsgMHg3MCwgMHg4MDAwIH0sCisJeyAweDcxLCAweDgwMDAgfSwKKwl7IDB4NzIsIDB4ODAwMCB9LAorCXsgMHg3MywgMHg3NzcwIH0sCisJeyAweDc0LCAweDNlMDAgfSwKKwl7IDB4NzUsIDB4MjQwOSB9LAorCXsgMHg3NiwgMHgwMDBhIH0sCisJeyAweDc3LCAweDBjMDAgfSwKKwl7IDB4NzgsIDB4MDAwMCB9LAorCXsgMHg3OSwgMHgwMTIzIH0sCisJeyAweDdhLCAweDAxMjMgfSwKKwl7IDB4ODAsIDB4MDAwMCB9LAorCXsgMHg4MSwgMHgwMDAwIH0sCisJeyAweDgyLCAweDAwMDAgfSwKKwl7IDB4ODMsIDB4MDAwMCB9LAorCXsgMHg4NCwgMHgwMDAwIH0sCisJeyAweDg1LCAweDAwMDAgfSwKKwl7IDB4OGEsIDB4MDAwMCB9LAorCXsgMHg4ZSwgMHgwMDA0IH0sCisJeyAweDhmLCAweDExMDAgfSwKKwl7IDB4OTAsIDB4MDY0NiB9LAorCXsgMHg5MSwgMHgwYzA2IH0sCisJeyAweDkzLCAweDAwMDAgfSwKKwl7IDB4OTQsIDB4MDIwMCB9LAorCXsgMHg5NSwgMHgwMDAwIH0sCisJeyAweDlhLCAweDIxODQgfSwKKwl7IDB4OWIsIDB4MDEwYSB9LAorCXsgMHg5YywgMHgwYWVhIH0sCisJeyAweDlkLCAweDAwMGMgfSwKKwl7IDB4OWUsIDB4MDQwMCB9LAorCXsgMHhhMCwgMHhhMGE4IH0sCisJeyAweGExLCAweDAwNTkgfSwKKwl7IDB4YTIsIDB4MDAwMSB9LAorCXsgMHhhZSwgMHg2MDAwIH0sCisJeyAweGFmLCAweDAwMDAgfSwKKwl7IDB4YjAsIDB4NjAwMCB9LAorCXsgMHhiMSwgMHgwMDAwIH0sCisJeyAweGIyLCAweDAwMDAgfSwKKwl7IDB4YjMsIDB4MDAxZiB9LAorCXsgMHhiNCwgMHgwMjBjIH0sCisJeyAweGI1LCAweDFmMDAgfSwKKwl7IDB4YjYsIDB4MDAwMCB9LAorCXsgMHhiYiwgMHgwMDAwIH0sCisJeyAweGJjLCAweDAwMDAgfSwKKwl7IDB4YmQsIDB4MDAwMCB9LAorCXsgMHhiZSwgMHgwMDAwIH0sCisJeyAweGJmLCAweDMxMDAgfSwKKwl7IDB4YzAsIDB4MDAwMCB9LAorCXsgMHhjMSwgMHgwMDAwIH0sCisJeyAweGMyLCAweDAwMDAgfSwKKwl7IDB4YzMsIDB4MjAwMCB9LAorCXsgMHhjZCwgMHgwMDAwIH0sCisJeyAweGNlLCAweDAwMDAgfSwKKwl7IDB4Y2YsIDB4MTgxMyB9LAorCXsgMHhkMCwgMHgwNjkwIH0sCisJeyAweGQxLCAweDFjMTcgfSwKKwl7IDB4ZDMsIDB4YjMyMCB9LAorCXsgMHhkNCwgMHgwMDAwIH0sCisJeyAweGQ2LCAweDA0MDAgfSwKKwl7IDB4ZDksIDB4MDgwOSB9LAorCXsgMHhkYSwgMHgwMDAwIH0sCisJeyAweGRiLCAweDAwMDMgfSwKKwl7IDB4ZGMsIDB4MDA0OSB9LAorCXsgMHhkZCwgMHgwMDFiIH0sCisJeyAweGRmLCAweDAwMDggfSwKKwl7IDB4ZTAsIDB4NDAwMCB9LAorCXsgMHhlNiwgMHg4MDAwIH0sCisJeyAweGU3LCAweDAyMDAgfSwKKwl7IDB4ZWMsIDB4YjMwMCB9LAorCXsgMHhlZCwgMHgwMDAwIH0sCisJeyAweGYwLCAweDAwMWYgfSwKKwl7IDB4ZjEsIDB4MDIwYyB9LAorCXsgMHhmMiwgMHgxZjAwIH0sCisJeyAweGYzLCAweDAwMDAgfSwKKwl7IDB4ZjQsIDB4NDAwMCB9LAorCXsgMHhmOCwgMHgwMDAwIH0sCisJeyAweGY5LCAweDAwMDAgfSwKKwl7IDB4ZmEsIDB4MjA2MCB9LAorCXsgMHhmYiwgMHg0MDQwIH0sCisJeyAweGZjLCAweDAwMDAgfSwKKwl7IDB4ZmQsIDB4MDAwMiB9LAorCXsgMHhmZSwgMHgxMGVjIH0sCisJeyAweGZmLCAweDYzMDggfSwKK307CisKIHN0cnVjdCBydDU2NDVfZXFfcGFyYW1fcyB7CiAJdW5zaWduZWQgc2hvcnQgcmVnOwogCXVuc2lnbmVkIHNob3J0IHZhbDsKQEAgLTI0NSw5ICs0MDEsMTAgQEAKIAlzdHJ1Y3Qgc25kX3NvY19qYWNrICpocF9qYWNrOwogCXN0cnVjdCBzbmRfc29jX2phY2sgKm1pY19qYWNrOwogCXN0cnVjdCBzbmRfc29jX2phY2sgKmJ0bl9qYWNrOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgamFja19kZXRlY3Rfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGphY2tfZGV0ZWN0X3dvcmssIHJjY2xvY2tfd29yazsKIAlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tBUlJBWV9TSVpFKHJ0NTY0NV9zdXBwbHlfbmFtZXMpXTsKIAlzdHJ1Y3QgcnQ1NjQ1X2VxX3BhcmFtX3MgKmVxX3BhcmFtOworCXN0cnVjdCB0aW1lcl9saXN0IGJ0bl9jaGVja190aW1lcjsKIAogCWludCBjb2RlY190eXBlOwogCWludCBzeXNjbGs7CkBAIC01NjUsMTIgKzcyMiwzMSBAQAogCS5wdXQgPSBydDU2NDVfaHdlcV9wdXQgXAogfQogCitzdGF0aWMgaW50IHJ0NTY0NV9zcGtfcHV0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgcnQ1NjQ1X3ByaXYgKnJ0NTY0NSA9IHNuZF9zb2NfY29tcG9uZW50X2dldF9kcnZkYXRhKGNvbXBvbmVudCk7CisJaW50IHJldDsKKworCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NDUtPnJlZ21hcCwgUlQ1NjQ1X01JQ0JJQVMsCisJCVJUNTY0NV9QV1JfQ0xLMjVNX01BU0ssIFJUNTY0NV9QV1JfQ0xLMjVNX1BVKTsKKworCXJldCA9IHNuZF9zb2NfcHV0X3ZvbHN3KGtjb250cm9sLCB1Y29udHJvbCk7CisKKwltb2RfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsICZydDU2NDUtPnJjY2xvY2tfd29yaywKKwkJbXNlY3NfdG9famlmZmllcygyMDApKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NDVfc25kX2NvbnRyb2xzW10gPSB7CiAJLyogU3BlYWtlciBPdXRwdXQgVm9sdW1lICovCiAJU09DX0RPVUJMRSgiU3BlYWtlciBDaGFubmVsIFN3aXRjaCIsIFJUNTY0NV9TUEtfVk9MLAogCQlSVDU2NDVfVk9MX0xfU0ZULCBSVDU2NDVfVk9MX1JfU0ZULCAxLCAxKSwKLQlTT0NfRE9VQkxFX1RMVigiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCBSVDU2NDVfU1BLX1ZPTCwKLQkJUlQ1NjQ1X0xfVk9MX1NGVCwgUlQ1NjQ1X1JfVk9MX1NGVCwgMzksIDEsIG91dF92b2xfdGx2KSwKKwlTT0NfRE9VQkxFX0VYVF9UTFYoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgUlQ1NjQ1X1NQS19WT0wsCisJCVJUNTY0NV9MX1ZPTF9TRlQsIFJUNTY0NV9SX1ZPTF9TRlQsIDM5LCAxLCBzbmRfc29jX2dldF92b2xzdywKKwkJcnQ1NjQ1X3Nwa19wdXRfdm9sc3csIG91dF92b2xfdGx2KSwKIAogCS8qIENsYXNzRCBtb2R1bGF0b3IgU3BlYWtlciBHYWluIFJhdGlvICovCiAJU09DX1NJTkdMRV9UTFYoIlNwZWFrZXIgQ2xhc3NEIFBsYXliYWNrIFZvbHVtZSIsIFJUNTY0NV9TUE9fQ0xTRF9SQVRJTywKQEAgLTE0OTgsNyArMTY3NCw3IEBACiAJCQkJcmVnbWFwX3dyaXRlKHJ0NTY0NS0+cmVnbWFwLCBSVDU2NDVfUFJfQkFTRSArCiAJCQkJCVJUNTY0NV9NQU1QX0lOVF9SRUcyLCAweGZjMDApOwogCQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFJUNTY0NV9ERVBPUF9NMiwgMHgxMTQwKTsKLQkJCQltc2xlZXAoNDApOworCQkJCW1zbGVlcCg3MCk7CiAJCQkJcnQ1NjQ1LT5ocF9vbiA9IHRydWU7CiAJCQl9IGVsc2UgewogCQkJCS8qIGRlcG9wIHBhcmFtZXRlcnMgKi8KQEAgLTE2NDYsOSArMTgyMiwxMyBAQAogCQkJUlQ1NjQ1X1BXUl9DTFNfRF9MLAogCQkJUlQ1NjQ1X1BXUl9DTFNfRCB8IFJUNTY0NV9QV1JfQ0xTX0RfUiB8CiAJCQlSVDU2NDVfUFdSX0NMU19EX0wpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NDVfR0VOX0NUUkwzLAorCQkJUlQ1NjQ1X0RFVF9DTEtfTUFTSywgUlQ1NjQ1X0RFVF9DTEtfTU9ERTEpOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY0NV9HRU5fQ1RSTDMsCisJCQlSVDU2NDVfREVUX0NMS19NQVNLLCBSVDU2NDVfREVUX0NMS19ESVMpOwogCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NDVfRVFfQ1RSTDIsIDApOwogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NDVfUFdSX0RJRzEsCiAJCQlSVDU2NDVfUFdSX0NMU19EIHwgUlQ1NjQ1X1BXUl9DTFNfRF9SIHwKQEAgLTI4ODYsNiArMzA2Niw3IEBACiAJCXNuZF9zb2NfZGFwbV9mb3JjZV9lbmFibGVfcGluKGRhcG0sICJBREMgUiBwb3dlciIpOwogCQlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTBfNEJUTl9JTF9DTUQxLCAweDMsIDB4Myk7CiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCiAJCQkJCVJUNTY0NV9JTlRfSVJRX1NULCAweDgsIDB4OCk7CiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCkBAIC0yOTU0LDcgKzMxMzUsNyBAQAogCQl9CiAJCWlmIChydDU2NDUtPnBkYXRhLmpkX2ludmVydCkKIAkJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NDUtPnJlZ21hcCwgUlQ1NjQ1X0lSUV9DVFJMMiwKLQkJCQlSVDU2NDVfSkRfMV8xX01BU0ssIFJUNTY0NV9KRF8xXzFfSU5WKTsKKwkJCQlSVDU2NDVfSkRfMV8xX01BU0ssIFJUNTY0NV9KRF8xXzFfTk9SKTsKIAl9IGVsc2UgeyAvKiBqYWNrIG91dCAqLwogCQlydDU2NDUtPmphY2tfdHlwZSA9IDA7CiAKQEAgLTI5NzUsNyArMzE1Niw3IEBACiAJCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOwogCQlpZiAocnQ1NjQ1LT5wZGF0YS5qZF9pbnZlcnQpCiAJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjQ1LT5yZWdtYXAsIFJUNTY0NV9JUlFfQ1RSTDIsCi0JCQkJUlQ1NjQ1X0pEXzFfMV9NQVNLLCBSVDU2NDVfSkRfMV8xX05PUik7CisJCQkJUlQ1NjQ1X0pEXzFfMV9NQVNLLCBSVDU2NDVfSkRfMV8xX0lOVik7CiAJfQogCiAJcmV0dXJuIHJ0NTY0NS0+amFja190eXBlOwpAQCAtMzA5OSw2ICszMjgwLDEyIEBACiAJCX0KIAkJaWYgKGJ0bl90eXBlID09IDApLyogYnV0dG9uIHJlbGVhc2UgKi8KIAkJCXJlcG9ydCA9ICBydDU2NDUtPmphY2tfdHlwZTsKKwkJZWxzZSB7CisJCQlpZiAocnQ1NjQ1LT5wZGF0YS5qZF9pbnZlcnQpIHsKKwkJCQltb2RfdGltZXIoJnJ0NTY0NS0+YnRuX2NoZWNrX3RpbWVyLAorCQkJCQltc2Vjc190b19qaWZmaWVzKDEwMCkpOworCQkJfQorCQl9CiAKIAkJYnJlYWs7CiAJLyogamFjayBvdXQgKi8KQEAgLTMxMjIsNiArMzMwOSwxNSBAQAogCQkJCVNORF9KQUNLX0JUTl8yIHwgU05EX0pBQ0tfQlROXzMpOwogfQogCitzdGF0aWMgdm9pZCBydDU2NDVfcmNjbG9ja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcnQ1NjQ1X3ByaXYgKnJ0NTY0NSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQ1NjQ1X3ByaXYsIHJjY2xvY2tfd29yay53b3JrKTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NDUtPnJlZ21hcCwgUlQ1NjQ1X01JQ0JJQVMsCisJCVJUNTY0NV9QV1JfQ0xLMjVNX01BU0ssIFJUNTY0NV9QV1JfQ0xLMjVNX1BEKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IHJ0NTY0NV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcnQ1NjQ1X3ByaXYgKnJ0NTY0NSA9IGRhdGE7CkBAIC0zMTMyLDYgKzMzMjgsMTQgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0NTY0NV9idG5fY2hlY2tfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBydDU2NDVfcHJpdiAqcnQ1NjQ1ID0gKHN0cnVjdCBydDU2NDVfcHJpdiAqKWRhdGE7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwKKwkJICAgJnJ0NTY0NS0+amFja19kZXRlY3Rfd29yaywgbXNlY3NfdG9famlmZmllcyg1KSk7Cit9CisKIHN0YXRpYyBpbnQgcnQ1NjQ1X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSBzbmRfc29jX2NvZGVjX2dldF9kYXBtKGNvZGVjKTsKQEAgLTMyODgsNiArMzQ5MiwzMSBAQAogCS5udW1fcmFuZ2VzID0gQVJSQVlfU0laRShydDU2NDVfcmFuZ2VzKSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBydDU2NTBfcmVnbWFwID0geworCS5yZWdfYml0cyA9IDgsCisJLnZhbF9iaXRzID0gMTYsCisJLnVzZV9zaW5nbGVfcncgPSB0cnVlLAorCS5tYXhfcmVnaXN0ZXIgPSBSVDU2NDVfVkVORE9SX0lEMiArIDEgKyAoQVJSQVlfU0laRShydDU2NDVfcmFuZ2VzKSAqCisJCQkJCSAgICAgICBSVDU2NDVfUFJfU1BBQ0lORyksCisJLnZvbGF0aWxlX3JlZyA9IHJ0NTY0NV92b2xhdGlsZV9yZWdpc3RlciwKKwkucmVhZGFibGVfcmVnID0gcnQ1NjQ1X3JlYWRhYmxlX3JlZ2lzdGVyLAorCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRSRUUsCisJLnJlZ19kZWZhdWx0cyA9IHJ0NTY1MF9yZWcsCisJLm51bV9yZWdfZGVmYXVsdHMgPSBBUlJBWV9TSVpFKHJ0NTY1MF9yZWcpLAorCS5yYW5nZXMgPSBydDU2NDVfcmFuZ2VzLAorCS5udW1fcmFuZ2VzID0gQVJSQVlfU0laRShydDU2NDVfcmFuZ2VzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB0ZW1wX3JlZ21hcCA9IHsKKwkubmFtZT0ibm9jYWNoZSIsCisJLnJlZ19iaXRzID0gOCwKKwkudmFsX2JpdHMgPSAxNiwKKwkudXNlX3NpbmdsZV9ydyA9IHRydWUsCisJLm1heF9yZWdpc3RlciA9IFJUNTY0NV9WRU5ET1JfSUQyICsgMSwKKwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcnQ1NjQ1X2kyY19pZFtdID0gewogCXsgInJ0NTY0NSIsIDAgfSwKIAl7ICJydDU2NTAiLCAwIH0sCkBAIC0zMjk2LDcgKzM1MjUsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHJ0NTY0NV9pMmNfaWQpOwogCiAjaWZkZWYgQ09ORklHX0FDUEkKLXN0YXRpYyBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgcnQ1NjQ1X2FjcGlfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgcnQ1NjQ1X2FjcGlfbWF0Y2hbXSA9IHsKIAl7ICIxMEVDNTY0NSIsIDAgfSwKIAl7ICIxMEVDNTY1MCIsIDAgfSwKIAl7fSwKQEAgLTMzMDQsNDggKzM1MzMsMjMgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgcnQ1NjQ1X2FjcGlfbWF0Y2gpOwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcnQ1NjQ1X3BsYXRmb3JtX2RhdGEgKnJ0NTY0NV9wZGF0YTsKLQotc3RhdGljIHN0cnVjdCBydDU2NDVfcGxhdGZvcm1fZGF0YSBzdHJhZ29fcGxhdGZvcm1fZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcnQ1NjQ1X3BsYXRmb3JtX2RhdGEgZ2VuZXJhbF9wbGF0Zm9ybV9kYXRhID0gewogCS5kbWljMV9kYXRhX3BpbiA9IFJUNTY0NV9ETUlDMV9ESVNBQkxFLAogCS5kbWljMl9kYXRhX3BpbiA9IFJUNTY0NV9ETUlDX0RBVEFfSU4yUCwKIAkuamRfbW9kZSA9IDMsCiB9OwogCi1zdGF0aWMgaW50IHN0cmFnb19xdWlya19jYihjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCi17Ci0JcnQ1NjQ1X3BkYXRhID0gJnN0cmFnb19wbGF0Zm9ybV9kYXRhOwotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBkbWlfcGxhdGZvcm1faW50ZWxfYnJhc3dlbGxbXSA9IHsKIAl7CiAJCS5pZGVudCA9ICJJbnRlbCBTdHJhZ28iLAotCQkuY2FsbGJhY2sgPSBzdHJhZ29fcXVpcmtfY2IsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTdHJhZ28iKSwKIAkJfSwKIAl9LAogCXsKLQkJLmlkZW50ID0gIkdvb2dsZSBDZWxlcyIsCi0JCS5jYWxsYmFjayA9IHN0cmFnb19xdWlya19jYiwKKwkJLmlkZW50ID0gIkdvb2dsZSBDaHJvbWUiLAogCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQ2VsZXMiKSwKLQkJfSwKLQl9LAotCXsKLQkJLmlkZW50ID0gIkdvb2dsZSBVbHRpbWEiLAotCQkuY2FsbGJhY2sgPSBzdHJhZ29fcXVpcmtfY2IsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJVbHRpbWEiKSwKLQkJfSwKLQl9LAotCXsKLQkJLmlkZW50ID0gIkdvb2dsZSBSZWtzIiwKLQkJLmNhbGxiYWNrID0gc3RyYWdvX3F1aXJrX2NiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUmVrcyIpLAorCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiR09PR0xFIiksCiAJCX0sCiAJfSwKIAl7IH0KQEAgLTMzNTgsMTcgKzM1NjIsOSBAQAogCS5qZF9pbnZlcnQgPSB0cnVlLAogfTsKIAotc3RhdGljIGludCBidWRkeV9xdWlya19jYihjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCi17Ci0JcnQ1NjQ1X3BkYXRhID0gJmJ1ZGR5X3BsYXRmb3JtX2RhdGE7Ci0KLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGRtaV9wbGF0Zm9ybV9pbnRlbF9icm9hZHdlbGxbXSA9IHsKIAl7CiAJCS5pZGVudCA9ICJDaHJvbWUgQnVkZHkiLAotCQkuY2FsbGJhY2sgPSBidWRkeV9xdWlya19jYiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkJ1ZGR5IiksCiAJCX0sCkBAIC0zMzc2LDYgKzM1NzIsMTYgQEAKIAl7IH0KIH07CiAKK3N0YXRpYyBib29sIHJ0NTY0NV9jaGVja19kcChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KGRldiwgInJlYWx0ZWssaW4yLWRpZmZlcmVudGlhbCIpIHx8CisJCWRldmljZV9wcm9wZXJ0eV9wcmVzZW50KGRldiwgInJlYWx0ZWssZG1pYzEtZGF0YS1waW4iKSB8fAorCQlkZXZpY2VfcHJvcGVydHlfcHJlc2VudChkZXYsICJyZWFsdGVrLGRtaWMyLWRhdGEtcGluIikgfHwKKwkJZGV2aWNlX3Byb3BlcnR5X3ByZXNlbnQoZGV2LCAicmVhbHRlayxqZC1tb2RlIikpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQogCiBzdGF0aWMgaW50IHJ0NTY0NV9wYXJzZV9kdChzdHJ1Y3QgcnQ1NjQ1X3ByaXYgKnJ0NTY0NSwgc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMzM5OCw2ICszNjA0LDcgQEAKIAlzdHJ1Y3QgcnQ1NjQ1X3ByaXYgKnJ0NTY0NTsKIAlpbnQgcmV0LCBpOwogCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogCiAJcnQ1NjQ1ID0gZGV2bV9remFsbG9jKCZpMmMtPmRldiwgc2l6ZW9mKHN0cnVjdCBydDU2NDVfcHJpdiksCiAJCQkJR0ZQX0tFUk5FTCk7CkBAIC0zNDA5LDExICszNjE2LDEyIEBACiAKIAlpZiAocGRhdGEpCiAJCXJ0NTY0NS0+cGRhdGEgPSAqcGRhdGE7Ci0JZWxzZSBpZiAoZG1pX2NoZWNrX3N5c3RlbShkbWlfcGxhdGZvcm1faW50ZWxfYnJhc3dlbGwpIHx8Ci0JCQlkbWlfY2hlY2tfc3lzdGVtKGRtaV9wbGF0Zm9ybV9pbnRlbF9icm9hZHdlbGwpKQotCQlydDU2NDUtPnBkYXRhID0gKnJ0NTY0NV9wZGF0YTsKLQllbHNlCisJZWxzZSBpZiAoZG1pX2NoZWNrX3N5c3RlbShkbWlfcGxhdGZvcm1faW50ZWxfYnJvYWR3ZWxsKSkKKwkJcnQ1NjQ1LT5wZGF0YSA9IGJ1ZGR5X3BsYXRmb3JtX2RhdGE7CisJZWxzZSBpZiAocnQ1NjQ1X2NoZWNrX2RwKCZpMmMtPmRldikpCiAJCXJ0NTY0NV9wYXJzZV9kdChydDU2NDUsICZpMmMtPmRldik7CisJZWxzZSBpZiAoZG1pX2NoZWNrX3N5c3RlbShkbWlfcGxhdGZvcm1faW50ZWxfYnJhc3dlbGwpKQorCQlydDU2NDUtPnBkYXRhID0gZ2VuZXJhbF9wbGF0Zm9ybV9kYXRhOwogCiAJcnQ1NjQ1LT5ncGlvZF9ocF9kZXQgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgmaTJjLT5kZXYsICJocC1kZXRlY3QiLAogCQkJCQkJICAgICAgIEdQSU9EX0lOKTsKQEAgLTM0MjMsMTQgKzM2MzEsNiBAQAogCQlyZXR1cm4gUFRSX0VSUihydDU2NDUtPmdwaW9kX2hwX2RldCk7CiAJfQogCi0JcnQ1NjQ1LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsICZydDU2NDVfcmVnbWFwKTsKLQlpZiAoSVNfRVJSKHJ0NTY0NS0+cmVnbWFwKSkgewotCQlyZXQgPSBQVFJfRVJSKHJ0NTY0NS0+cmVnbWFwKTsKLQkJZGV2X2VycigmaTJjLT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVnaXN0ZXIgbWFwOiAlZFxuIiwKLQkJCXJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnQ1NjQ1LT5zdXBwbGllcyk7IGkrKykKIAkJcnQ1NjQ1LT5zdXBwbGllc1tpXS5zdXBwbHkgPSBydDU2NDVfc3VwcGx5X25hbWVzW2ldOwogCkBAIC0zNDQ5LDEzICszNjQ5LDIyIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmVnbWFwX3JlYWQocnQ1NjQ1LT5yZWdtYXAsIFJUNTY0NV9WRU5ET1JfSUQyLCAmdmFsKTsKKwlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsICZ0ZW1wX3JlZ21hcCk7CisJaWYgKElTX0VSUihyZWdtYXApKSB7CisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgdGVtcCByZWdpc3RlciBtYXA6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmVnbWFwX3JlYWQocmVnbWFwLCBSVDU2NDVfVkVORE9SX0lEMiwgJnZhbCk7CiAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgUlQ1NjQ1X0RFVklDRV9JRDoKKwkJcnQ1NjQ1LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsICZydDU2NDVfcmVnbWFwKTsKIAkJcnQ1NjQ1LT5jb2RlY190eXBlID0gQ09ERUNfVFlQRV9SVDU2NDU7CiAJCWJyZWFrOwogCWNhc2UgUlQ1NjUwX0RFVklDRV9JRDoKKwkJcnQ1NjQ1LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsICZydDU2NTBfcmVnbWFwKTsKIAkJcnQ1NjQ1LT5jb2RlY190eXBlID0gQ09ERUNfVFlQRV9SVDU2NTA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zNDY2LDYgKzM2NzUsMTMgQEAKIAkJZ290byBlcnJfZW5hYmxlOwogCX0KIAorCWlmIChJU19FUlIocnQ1NjQ1LT5yZWdtYXApKSB7CisJCXJldCA9IFBUUl9FUlIocnQ1NjQ1LT5yZWdtYXApOworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBtYXA6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAlyZWdtYXBfd3JpdGUocnQ1NjQ1LT5yZWdtYXAsIFJUNTY0NV9SRVNFVCwgMCk7CiAKIAlyZXQgPSByZWdtYXBfcmVnaXN0ZXJfcGF0Y2gocnQ1NjQ1LT5yZWdtYXAsIGluaXRfbGlzdCwKQEAgLTM1ODYsNyArMzgwMiwxNSBAQAogCQl9CiAJfQogCisJaWYgKHJ0NTY0NS0+cGRhdGEuamRfaW52ZXJ0KSB7CisJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NDUtPnJlZ21hcCwgUlQ1NjQ1X0lSUV9DVFJMMiwKKwkJCVJUNTY0NV9KRF8xXzFfTUFTSywgUlQ1NjQ1X0pEXzFfMV9JTlYpOworCQlzZXR1cF90aW1lcigmcnQ1NjQ1LT5idG5fY2hlY2tfdGltZXIsCisJCQlydDU2NDVfYnRuX2NoZWNrX2NhbGxiYWNrLCAodW5zaWduZWQgbG9uZylydDU2NDUpOworCX0KKwogCUlOSVRfREVMQVlFRF9XT1JLKCZydDU2NDUtPmphY2tfZGV0ZWN0X3dvcmssIHJ0NTY0NV9qYWNrX2RldGVjdF93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmcnQ1NjQ1LT5yY2Nsb2NrX3dvcmssIHJ0NTY0NV9yY2Nsb2NrX3dvcmspOwogCiAJaWYgKHJ0NTY0NS0+aTJjLT5pcnEpIHsKIAkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocnQ1NjQ1LT5pMmMtPmlycSwgTlVMTCwgcnQ1NjQ1X2lycSwKQEAgLTM2MjEsNiArMzg0NSw3IEBACiAJCWZyZWVfaXJxKGkyYy0+aXJxLCBydDU2NDUpOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDU2NDUtPmphY2tfZGV0ZWN0X3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQ1NjQ1LT5yY2Nsb2NrX3dvcmspOwogCiAJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZpMmMtPmRldik7CiAJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHJ0NTY0NS0+c3VwcGxpZXMpLCBydDU2NDUtPnN1cHBsaWVzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQ1LmggYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY0NS5oCmluZGV4IDA5M2U0NmQuLjIwNWUwNzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQ1LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NDUuaApAQCAtMjEyMiw2ICsyMTIyLDEwIEBACiAvKiBHZW5lcmFsIENvbnRyb2wzICgweGZjKSAqLwogI2RlZmluZSBSVDU2NDVfSkRfUFNWX01PREUJCQkoMHgxIDw8IDEyKQogI2RlZmluZSBSVDU2NDVfSVJRX0NMS19HQVRFX0NUUkwJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTY0NV9ERVRfQ0xLX01BU0sJCQkoMHgzIDw8IDkpCisjZGVmaW5lIFJUNTY0NV9ERVRfQ0xLX0RJUwkJCSgweDAgPDwgOSkKKyNkZWZpbmUgUlQ1NjQ1X0RFVF9DTEtfTU9ERTEJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTY0NV9ERVRfQ0xLX01PREUyCQkJKDB4MiA8PCA5KQogI2RlZmluZSBSVDU2NDVfTUlDSU5ERVRfTUFOVQkJCSgweDEgPDwgNykKICNkZWZpbmUgUlQ1NjQ1X1JJTkcyX1NMRUVWRV9HTkQJCQkoMHgxIDw8IDUpCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjU5LmMgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY1OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMGQ4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY1OS5jCkBAIC0wLDAgKzEsNDIyMyBAQAorLyoKKyAqIHJ0NTY1OS5jICAtLSAgUlQ1NjU5L1JUNTY1OCBBTFNBIFNvQyBhdWRpbyBjb2RlYyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxNSBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEF1dGhvcjogQmFyZCBMaWFvIDxiYXJkbGlhb0ByZWFsdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3J0NTY1OS5oPgorCisjaW5jbHVkZSAicmw2MjMxLmgiCisjaW5jbHVkZSAicnQ1NjU5LmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2RlZmF1bHQgcnQ1NjU5X3JlZ1tdID0geworCXsgMHgwMDAwLCAweDAwMDAgfSwKKwl7IDB4MDAwMSwgMHg0ODQ4IH0sCisJeyAweDAwMDIsIDB4ODA4MCB9LAorCXsgMHgwMDAzLCAweGM4YzggfSwKKwl7IDB4MDAwNCwgMHhjODBhIH0sCisJeyAweDAwMDUsIDB4MDAwMCB9LAorCXsgMHgwMDA2LCAweDAwMDAgfSwKKwl7IDB4MDAwNywgMHgwMTAzIH0sCisJeyAweDAwMDgsIDB4MDA4MCB9LAorCXsgMHgwMDA5LCAweDAwMDAgfSwKKwl7IDB4MDAwYSwgMHgwMDAwIH0sCisJeyAweDAwMGMsIDB4MDAwMCB9LAorCXsgMHgwMDBkLCAweDAwMDAgfSwKKwl7IDB4MDAwZiwgMHgwODA4IH0sCisJeyAweDAwMTAsIDB4MzA4MCB9LAorCXsgMHgwMDExLCAweDRhMDAgfSwKKwl7IDB4MDAxMiwgMHg0ZTAwIH0sCisJeyAweDAwMTUsIDB4NDJjMSB9LAorCXsgMHgwMDE2LCAweDAwMDAgfSwKKwl7IDB4MDAxOCwgMHgwMDBiIH0sCisJeyAweDAwMTksIDB4YWZhZiB9LAorCXsgMHgwMDFhLCAweGFmYWYgfSwKKwl7IDB4MDAxYiwgMHgwMDExIH0sCisJeyAweDAwMWMsIDB4MmYyZiB9LAorCXsgMHgwMDFkLCAweDJmMmYgfSwKKwl7IDB4MDAxZSwgMHgyZjJmIH0sCisJeyAweDAwMWYsIDB4MDAwMCB9LAorCXsgMHgwMDIwLCAweDAwMDAgfSwKKwl7IDB4MDAyMSwgMHgwMDAwIH0sCisJeyAweDAwMjIsIDB4NTc1NyB9LAorCXsgMHgwMDIzLCAweDAwMzkgfSwKKwl7IDB4MDAyNiwgMHhjMDYwIH0sCisJeyAweDAwMjcsIDB4ZDhkOCB9LAorCXsgMHgwMDI5LCAweDgwODAgfSwKKwl7IDB4MDAyYSwgMHhhYWFhIH0sCisJeyAweDAwMmIsIDB4YWFhYSB9LAorCXsgMHgwMDJjLCAweDAwYWYgfSwKKwl7IDB4MDAyZCwgMHgwMDAwIH0sCisJeyAweDAwMmYsIDB4MTAwMiB9LAorCXsgMHgwMDMxLCAweDUwMDAgfSwKKwl7IDB4MDAzMiwgMHgwMDAwIH0sCisJeyAweDAwMzMsIDB4MDAwMCB9LAorCXsgMHgwMDM0LCAweDAwMDAgfSwKKwl7IDB4MDAzNSwgMHgwMDAwIH0sCisJeyAweDAwMzYsIDB4MDAwMCB9LAorCXsgMHgwMDNhLCAweDAwMDAgfSwKKwl7IDB4MDAzYiwgMHgwMDAwIH0sCisJeyAweDAwM2MsIDB4MDA3ZiB9LAorCXsgMHgwMDNkLCAweDAwMDAgfSwKKwl7IDB4MDAzZSwgMHgwMDdmIH0sCisJeyAweDAwNDAsIDB4MDgwOCB9LAorCXsgMHgwMDQ2LCAweDAwMWYgfSwKKwl7IDB4MDA0NywgMHgwMDFmIH0sCisJeyAweDAwNDgsIDB4MDAwMyB9LAorCXsgMHgwMDQ5LCAweGUwNjEgfSwKKwl7IDB4MDA0YSwgMHgwMDAwIH0sCisJeyAweDAwNGIsIDB4MDMxZiB9LAorCXsgMHgwMDRkLCAweDAwMDAgfSwKKwl7IDB4MDA0ZSwgMHgwMDFmIH0sCisJeyAweDAwNGYsIDB4MDAwMCB9LAorCXsgMHgwMDUwLCAweDAwMWYgfSwKKwl7IDB4MDA1MiwgMHhmMDAwIH0sCisJeyAweDAwNTMsIDB4MDExMSB9LAorCXsgMHgwMDU0LCAweDAwNjQgfSwKKwl7IDB4MDA1NSwgMHgwMDgwIH0sCisJeyAweDAwNTYsIDB4ZWYwZSB9LAorCXsgMHgwMDU3LCAweGYwZjAgfSwKKwl7IDB4MDA1OCwgMHhlZjBlIH0sCisJeyAweDAwNTksIDB4ZjBmMCB9LAorCXsgMHgwMDVhLCAweGVmMGUgfSwKKwl7IDB4MDA1YiwgMHhmMGYwIH0sCisJeyAweDAwNWMsIDB4ZjAwMCB9LAorCXsgMHgwMDVkLCAweDAwMDAgfSwKKwl7IDB4MDA1ZSwgMHgxZjJjIH0sCisJeyAweDAwNWYsIDB4MWYyYyB9LAorCXsgMHgwMDYwLCAweDI3MTcgfSwKKwl7IDB4MDA2MSwgMHgwMDAwIH0sCisJeyAweDAwNjIsIDB4MDAwMCB9LAorCXsgMHgwMDYzLCAweDAwM2UgfSwKKwl7IDB4MDA2NCwgMHgwMDAwIH0sCisJeyAweDAwNjUsIDB4MDAwMCB9LAorCXsgMHgwMDY2LCAweDAwMDAgfSwKKwl7IDB4MDA2NywgMHgwMDAwIH0sCisJeyAweDAwNmEsIDB4MDAwMCB9LAorCXsgMHgwMDZiLCAweDAwMDAgfSwKKwl7IDB4MDA2YywgMHgwMDAwIH0sCisJeyAweDAwNmUsIDB4MDAwMCB9LAorCXsgMHgwMDZmLCAweDAwMDAgfSwKKwl7IDB4MDA3MCwgMHg4MDAwIH0sCisJeyAweDAwNzEsIDB4ODAwMCB9LAorCXsgMHgwMDcyLCAweDgwMDAgfSwKKwl7IDB4MDA3MywgMHgxMTEwIH0sCisJeyAweDAwNzQsIDB4ZmUwMCB9LAorCXsgMHgwMDc1LCAweDI0MDkgfSwKKwl7IDB4MDA3NiwgMHgwMDBhIH0sCisJeyAweDAwNzcsIDB4MDBmMCB9LAorCXsgMHgwMDc4LCAweDAwMDAgfSwKKwl7IDB4MDA3OSwgMHgwMDAwIH0sCisJeyAweDAwN2EsIDB4MDEyMyB9LAorCXsgMHgwMDdiLCAweDgwMDMgfSwKKwl7IDB4MDA4MCwgMHgwMDAwIH0sCisJeyAweDAwODEsIDB4MDAwMCB9LAorCXsgMHgwMDgyLCAweDAwMDAgfSwKKwl7IDB4MDA4MywgMHgwMDAwIH0sCisJeyAweDAwODQsIDB4MDAwMCB9LAorCXsgMHgwMDg1LCAweDAwMDAgfSwKKwl7IDB4MDA4NiwgMHgwMDA4IH0sCisJeyAweDAwODcsIDB4MDAwMCB9LAorCXsgMHgwMDg4LCAweDAwMDAgfSwKKwl7IDB4MDA4OSwgMHgwMDAwIH0sCisJeyAweDAwOGEsIDB4MDAwMCB9LAorCXsgMHgwMDhiLCAweDAwMDAgfSwKKwl7IDB4MDA4YywgMHgwMDAzIH0sCisJeyAweDAwOGUsIDB4MDAwMCB9LAorCXsgMHgwMDhmLCAweDEwMDAgfSwKKwl7IDB4MDA5MCwgMHgwNjQ2IH0sCisJeyAweDAwOTEsIDB4MGMxNiB9LAorCXsgMHgwMDkyLCAweDAwNzMgfSwKKwl7IDB4MDA5MywgMHgwMDAwIH0sCisJeyAweDAwOTQsIDB4MDA4MCB9LAorCXsgMHgwMDk3LCAweDAwMDAgfSwKKwl7IDB4MDA5OCwgMHgwMDAwIH0sCisJeyAweDAwOTksIDB4MDAwMCB9LAorCXsgMHgwMDlhLCAweDAwMDAgfSwKKwl7IDB4MDA5YiwgMHgwMDAwIH0sCisJeyAweDAwOWMsIDB4MDA3ZiB9LAorCXsgMHgwMDlkLCAweDAwMDAgfSwKKwl7IDB4MDA5ZSwgMHgwMDdmIH0sCisJeyAweDAwOWYsIDB4MDAwMCB9LAorCXsgMHgwMGEwLCAweDAwNjAgfSwKKwl7IDB4MDBhMSwgMHg5MGExIH0sCisJeyAweDAwYWUsIDB4MjAwMCB9LAorCXsgMHgwMGFmLCAweDAwMDAgfSwKKwl7IDB4MDBiMCwgMHgyMDAwIH0sCisJeyAweDAwYjEsIDB4MDAwMCB9LAorCXsgMHgwMGIyLCAweDAwMDAgfSwKKwl7IDB4MDBiNiwgMHgwMDAwIH0sCisJeyAweDAwYjcsIDB4MDAwMCB9LAorCXsgMHgwMGI4LCAweDAwMDAgfSwKKwl7IDB4MDBiOSwgMHgwMDAwIH0sCisJeyAweDAwYmEsIDB4MDAwMCB9LAorCXsgMHgwMGJiLCAweDAwMDAgfSwKKwl7IDB4MDBiZSwgMHgwMDAwIH0sCisJeyAweDAwYmYsIDB4MDAwMCB9LAorCXsgMHgwMGMwLCAweDAwMDAgfSwKKwl7IDB4MDBjMSwgMHgwMDAwIH0sCisJeyAweDAwYzIsIDB4MDAwMCB9LAorCXsgMHgwMGMzLCAweDAwMDAgfSwKKwl7IDB4MDBjNCwgMHgwMDAzIH0sCisJeyAweDAwYzUsIDB4MDAwMCB9LAorCXsgMHgwMGNiLCAweGEwMmYgfSwKKwl7IDB4MDBjYywgMHgwMDAwIH0sCisJeyAweDAwY2QsIDB4MGUwMiB9LAorCXsgMHgwMGQ2LCAweDAwMDAgfSwKKwl7IDB4MDBkNywgMHgyMjQ0IH0sCisJeyAweDAwZDksIDB4MDgwOSB9LAorCXsgMHgwMGRhLCAweDAwMDAgfSwKKwl7IDB4MDBkYiwgMHgwMDA4IH0sCisJeyAweDAwZGMsIDB4MDBjMCB9LAorCXsgMHgwMGRkLCAweDY3MjQgfSwKKwl7IDB4MDBkZSwgMHgzMTMxIH0sCisJeyAweDAwZGYsIDB4MDAwOCB9LAorCXsgMHgwMGUwLCAweDQwMDAgfSwKKwl7IDB4MDBlMSwgMHgzMTMxIH0sCisJeyAweDAwZTQsIDB4NDAwYyB9LAorCXsgMHgwMGU1LCAweDgwMzEgfSwKKwl7IDB4MDBlYSwgMHhiMzIwIH0sCisJeyAweDAwZWIsIDB4MDAwMCB9LAorCXsgMHgwMGVjLCAweGIzMDAgfSwKKwl7IDB4MDBlZCwgMHgwMDAwIH0sCisJeyAweDAwZjAsIDB4MDAwMCB9LAorCXsgMHgwMGYxLCAweDAyMDIgfSwKKwl7IDB4MDBmMiwgMHgwZGRkIH0sCisJeyAweDAwZjMsIDB4MGRkZCB9LAorCXsgMHgwMGY0LCAweDBkZGQgfSwKKwl7IDB4MDBmNiwgMHgwMDAwIH0sCisJeyAweDAwZjcsIDB4MDAwMCB9LAorCXsgMHgwMGY4LCAweDAwMDAgfSwKKwl7IDB4MDBmOSwgMHgwMDAwIH0sCisJeyAweDAwZmEsIDB4ODAwMCB9LAorCXsgMHgwMGZiLCAweDAwMDAgfSwKKwl7IDB4MDBmYywgMHgwMDAwIH0sCisJeyAweDAwZmQsIDB4MDAwMSB9LAorCXsgMHgwMGZlLCAweDEwZWMgfSwKKwl7IDB4MDBmZiwgMHg2MzExIH0sCisJeyAweDAxMDAsIDB4YWFhYSB9LAorCXsgMHgwMTBhLCAweGFhYWEgfSwKKwl7IDB4MDEwYiwgMHgwMGEwIH0sCisJeyAweDAxMGMsIDB4YWVhZSB9LAorCXsgMHgwMTBkLCAweGFhYWEgfSwKKwl7IDB4MDEwZSwgMHhhYWE4IH0sCisJeyAweDAxMGYsIDB4YTBhYSB9LAorCXsgMHgwMTEwLCAweGUwMmEgfSwKKwl7IDB4MDExMSwgMHhhNzAyIH0sCisJeyAweDAxMTIsIDB4YWFhYSB9LAorCXsgMHgwMTEzLCAweDI4MDAgfSwKKwl7IDB4MDExNiwgMHgwMDAwIH0sCisJeyAweDAxMTcsIDB4MGYwMCB9LAorCXsgMHgwMTFhLCAweDAwMjAgfSwKKwl7IDB4MDExYiwgMHgwMDExIH0sCisJeyAweDAxMWMsIDB4MDE1MCB9LAorCXsgMHgwMTFkLCAweDAwMDAgfSwKKwl7IDB4MDExZSwgMHgwMDAwIH0sCisJeyAweDAxMWYsIDB4MDAwMCB9LAorCXsgMHgwMTIwLCAweDAwMDAgfSwKKwl7IDB4MDEyMSwgMHgwMDliIH0sCisJeyAweDAxMjIsIDB4NTAxNCB9LAorCXsgMHgwMTIzLCAweDA0MjEgfSwKKwl7IDB4MDEyNCwgMHg3Y2VhIH0sCisJeyAweDAxMjUsIDB4MDQyMCB9LAorCXsgMHgwMTI2LCAweDU1NTAgfSwKKwl7IDB4MDEzMiwgMHgwMDAwIH0sCisJeyAweDAxMzMsIDB4MDAwMCB9LAorCXsgMHgwMTM3LCAweDUwNTUgfSwKKwl7IDB4MDEzOCwgMHgzNzAwIH0sCisJeyAweDAxMzksIDB4NzlhMSB9LAorCXsgMHgwMTNhLCAweDIwMjAgfSwKKwl7IDB4MDEzYiwgMHgyMDIwIH0sCisJeyAweDAxM2MsIDB4MjAwNSB9LAorCXsgMHgwMTNlLCAweDFmMDAgfSwKKwl7IDB4MDEzZiwgMHgwMDAwIH0sCisJeyAweDAxNDUsIDB4MDAwMiB9LAorCXsgMHgwMTQ2LCAweDAwMDAgfSwKKwl7IDB4MDE0NywgMHgwMDAwIH0sCisJeyAweDAxNDgsIDB4MDAwMCB9LAorCXsgMHgwMTUwLCAweDE4MTMgfSwKKwl7IDB4MDE1MSwgMHgwNjkwIH0sCisJeyAweDAxNTIsIDB4MWMxNyB9LAorCXsgMHgwMTUzLCAweDY4ODMgfSwKKwl7IDB4MDE1NCwgMHhkM2NlIH0sCisJeyAweDAxNTUsIDB4MzUyZCB9LAorCXsgMHgwMTU2LCAweDAwZWIgfSwKKwl7IDB4MDE1NywgMHgzNzE3IH0sCisJeyAweDAxNTgsIDB4NGM2YSB9LAorCXsgMHgwMTU5LCAweGU0MWIgfSwKKwl7IDB4MDE1YSwgMHgyYTEzIH0sCisJeyAweDAxNWIsIDB4YjYwMCB9LAorCXsgMHgwMTVjLCAweGM3MzAgfSwKKwl7IDB4MDE1ZCwgMHgzNWQ0IH0sCisJeyAweDAxNWUsIDB4MDBiZiB9LAorCXsgMHgwMTYwLCAweDBlYzAgfSwKKwl7IDB4MDE2MSwgMHgwMDIwIH0sCisJeyAweDAxNjIsIDB4MDA4MCB9LAorCXsgMHgwMTYzLCAweDA4MDAgfSwKKwl7IDB4MDE2NCwgMHgwMDAwIH0sCisJeyAweDAxNjUsIDB4MDAwMCB9LAorCXsgMHgwMTY2LCAweDAwMDAgfSwKKwl7IDB4MDE2NywgMHgwMDFmIH0sCisJeyAweDAxNzAsIDB4NGU4MCB9LAorCXsgMHgwMTcxLCAweDAwMjAgfSwKKwl7IDB4MDE3MiwgMHgwMDgwIH0sCisJeyAweDAxNzMsIDB4MDgwMCB9LAorCXsgMHgwMTc0LCAweDAwMGMgfSwKKwl7IDB4MDE3NSwgMHgwMDAwIH0sCisJeyAweDAxOTAsIDB4MzMwMCB9LAorCXsgMHgwMTkxLCAweDIyMDAgfSwKKwl7IDB4MDE5MiwgMHgwMDAwIH0sCisJeyAweDAxYjAsIDB4NGIzOCB9LAorCXsgMHgwMWIxLCAweDAwMDAgfSwKKwl7IDB4MDFiMiwgMHgwMDAwIH0sCisJeyAweDAxYjMsIDB4MDAwMCB9LAorCXsgMHgwMWMwLCAweDAwNDUgfSwKKwl7IDB4MDFjMSwgMHgwNTQwIH0sCisJeyAweDAxYzIsIDB4MDAwMCB9LAorCXsgMHgwMWMzLCAweDAwMzAgfSwKKwl7IDB4MDFjNywgMHgwMDAwIH0sCisJeyAweDAxYzgsIDB4NTc1NyB9LAorCXsgMHgwMWM5LCAweDU3NTcgfSwKKwl7IDB4MDFjYSwgMHg1NzU3IH0sCisJeyAweDAxY2IsIDB4NTc1NyB9LAorCXsgMHgwMWNjLCAweDU3NTcgfSwKKwl7IDB4MDFjZCwgMHg1NzU3IH0sCisJeyAweDAxY2UsIDB4MDA2ZiB9LAorCXsgMHgwMWRhLCAweDAwMDAgfSwKKwl7IDB4MDFkYiwgMHgwMDAwIH0sCisJeyAweDAxZGUsIDB4N2QwMCB9LAorCXsgMHgwMWRmLCAweDEwYzAgfSwKKwl7IDB4MDFlMCwgMHgwNmExIH0sCisJeyAweDAxZTEsIDB4MDAwMCB9LAorCXsgMHgwMWUyLCAweDAwMDAgfSwKKwl7IDB4MDFlMywgMHgwMDAwIH0sCisJeyAweDAxZTQsIDB4MDAwMSB9LAorCXsgMHgwMWU2LCAweDAwMDAgfSwKKwl7IDB4MDFlNywgMHgwMDAwIH0sCisJeyAweDAxZTgsIDB4MDAwMCB9LAorCXsgMHgwMWVhLCAweDAwMDAgfSwKKwl7IDB4MDFlYiwgMHgwMDAwIH0sCisJeyAweDAxZWMsIDB4MDAwMCB9LAorCXsgMHgwMWVkLCAweDAwMDAgfSwKKwl7IDB4MDFlZSwgMHgwMDAwIH0sCisJeyAweDAxZWYsIDB4MDAwMCB9LAorCXsgMHgwMWYwLCAweDAwMDAgfSwKKwl7IDB4MDFmMSwgMHgwMDAwIH0sCisJeyAweDAxZjIsIDB4MDAwMCB9LAorCXsgMHgwMWY2LCAweDFlMDQgfSwKKwl7IDB4MDFmNywgMHgwMWExIH0sCisJeyAweDAxZjgsIDB4MDAwMCB9LAorCXsgMHgwMWY5LCAweDAwMDAgfSwKKwl7IDB4MDFmYSwgMHgwMDAyIH0sCisJeyAweDAxZmIsIDB4MDAwMCB9LAorCXsgMHgwMWZjLCAweDAwMDAgfSwKKwl7IDB4MDFmZCwgMHgwMDAwIH0sCisJeyAweDAxZmUsIDB4MDAwMCB9LAorCXsgMHgwMjAwLCAweDA2NmMgfSwKKwl7IDB4MDIwMSwgMHg3ZmZmIH0sCisJeyAweDAyMDIsIDB4N2ZmZiB9LAorCXsgMHgwMjAzLCAweDAwMDAgfSwKKwl7IDB4MDIwNCwgMHgwMDAwIH0sCisJeyAweDAyMDUsIDB4MDAwMCB9LAorCXsgMHgwMjA2LCAweDAwMDAgfSwKKwl7IDB4MDIwNywgMHgwMDAwIH0sCisJeyAweDAyMDgsIDB4MDAwMCB9LAorCXsgMHgwMjU2LCAweDAwMDAgfSwKKwl7IDB4MDI1NywgMHgwMDAwIH0sCisJeyAweDAyNTgsIDB4MDAwMCB9LAorCXsgMHgwMjU5LCAweDAwMDAgfSwKKwl7IDB4MDI1YSwgMHgwMDAwIH0sCisJeyAweDAyNWIsIDB4MzMzMyB9LAorCXsgMHgwMjVjLCAweDMzMzMgfSwKKwl7IDB4MDI1ZCwgMHgzMzMzIH0sCisJeyAweDAyNWUsIDB4MDAwMCB9LAorCXsgMHgwMjVmLCAweDAwMDAgfSwKKwl7IDB4MDI2MCwgMHgwMDAwIH0sCisJeyAweDAyNjEsIDB4MDAyMiB9LAorCXsgMHgwMjYyLCAweDAzMDAgfSwKKwl7IDB4MDI2NSwgMHgxZTgwIH0sCisJeyAweDAyNjYsIDB4MDEzMSB9LAorCXsgMHgwMjY3LCAweDAwMDMgfSwKKwl7IDB4MDI2OCwgMHgwMDAwIH0sCisJeyAweDAyNjksIDB4MDAwMCB9LAorCXsgMHgwMjZhLCAweDAwMDAgfSwKKwl7IDB4MDI2YiwgMHgwMDAwIH0sCisJeyAweDAyNmMsIDB4MDAwMCB9LAorCXsgMHgwMjZkLCAweDAwMDAgfSwKKwl7IDB4MDI2ZSwgMHgwMDAwIH0sCisJeyAweDAyNmYsIDB4MDAwMCB9LAorCXsgMHgwMjcwLCAweDAwMDAgfSwKKwl7IDB4MDI3MSwgMHgwMDAwIH0sCisJeyAweDAyNzIsIDB4MDAwMCB9LAorCXsgMHgwMjczLCAweDAwMDAgfSwKKwl7IDB4MDI4MCwgMHgwMDAwIH0sCisJeyAweDAyODEsIDB4MDAwMCB9LAorCXsgMHgwMjgyLCAweDA0MTggfSwKKwl7IDB4MDI4MywgMHg3ZmZmIH0sCisJeyAweDAyODQsIDB4NzAwMCB9LAorCXsgMHgwMjkwLCAweDAxZDAgfSwKKwl7IDB4MDI5MSwgMHgwMTAwIH0sCisJeyAweDAyZmEsIDB4MDAwMCB9LAorCXsgMHgwMmZiLCAweDAwMDAgfSwKKwl7IDB4MDJmYywgMHgwMDAwIH0sCisJeyAweDAzMDAsIDB4MDAxZiB9LAorCXsgMHgwMzAxLCAweDAzMmMgfSwKKwl7IDB4MDMwMiwgMHg1ZjIxIH0sCisJeyAweDAzMDMsIDB4NDAwMCB9LAorCXsgMHgwMzA0LCAweDQwMDAgfSwKKwl7IDB4MDMwNSwgMHgwNjAwIH0sCisJeyAweDAzMDYsIDB4ODAwMCB9LAorCXsgMHgwMzA3LCAweDA3MDAgfSwKKwl7IDB4MDMwOCwgMHgwMDFmIH0sCisJeyAweDAzMDksIDB4MDMyYyB9LAorCXsgMHgwMzBhLCAweDVmMjEgfSwKKwl7IDB4MDMwYiwgMHg0MDAwIH0sCisJeyAweDAzMGMsIDB4NDAwMCB9LAorCXsgMHgwMzBkLCAweDA2MDAgfSwKKwl7IDB4MDMwZSwgMHg4MDAwIH0sCisJeyAweDAzMGYsIDB4MDcwMCB9LAorCXsgMHgwMzEwLCAweDQ1NjAgfSwKKwl7IDB4MDMxMSwgMHhhNGE4IH0sCisJeyAweDAzMTIsIDB4NzQxOCB9LAorCXsgMHgwMzEzLCAweDAwMDAgfSwKKwl7IDB4MDMxNCwgMHgwMDA2IH0sCisJeyAweDAzMTUsIDB4MDBmZiB9LAorCXsgMHgwMzE2LCAweGM0MDAgfSwKKwl7IDB4MDMxNywgMHg0NTYwIH0sCisJeyAweDAzMTgsIDB4YTRhOCB9LAorCXsgMHgwMzE5LCAweDc0MTggfSwKKwl7IDB4MDMxYSwgMHgwMDAwIH0sCisJeyAweDAzMWIsIDB4MDAwNiB9LAorCXsgMHgwMzFjLCAweDAwZmYgfSwKKwl7IDB4MDMxZCwgMHhjNDAwIH0sCisJeyAweDAzMjAsIDB4MGYyMCB9LAorCXsgMHgwMzIxLCAweDg3MDAgfSwKKwl7IDB4MDMyMiwgMHg3ZGMyIH0sCisJeyAweDAzMjMsIDB4YTE3OCB9LAorCXsgMHgwMzI0LCAweDUzODMgfSwKKwl7IDB4MDMyNSwgMHg3ZGMyIH0sCisJeyAweDAzMjYsIDB4YTE3OCB9LAorCXsgMHgwMzI3LCAweDUzODMgfSwKKwl7IDB4MDMyOCwgMHgwMDNlIH0sCisJeyAweDAzMjksIDB4MDJjMSB9LAorCXsgMHgwMzJhLCAweGQzN2QgfSwKKwl7IDB4MDMzMCwgMHgwMGE2IH0sCisJeyAweDAzMzEsIDB4MDRjMyB9LAorCXsgMHgwMzMyLCAweDI3YzggfSwKKwl7IDB4MDMzMywgMHhiZjUwIH0sCisJeyAweDAzMzQsIDB4MDA0NSB9LAorCXsgMHgwMzM1LCAweDIwMDcgfSwKKwl7IDB4MDMzNiwgMHg3NDE4IH0sCisJeyAweDAzMzcsIDB4MDUwMSB9LAorCXsgMHgwMzM4LCAweDAwMDAgfSwKKwl7IDB4MDMzOSwgMHgwMDEwIH0sCisJeyAweDAzM2EsIDB4MTAxMCB9LAorCXsgMHgwMzQwLCAweDA4MDAgfSwKKwl7IDB4MDM0MSwgMHgwODAwIH0sCisJeyAweDAzNDIsIDB4MDgwMCB9LAorCXsgMHgwMzQzLCAweDA4MDAgfSwKKwl7IDB4MDM0NCwgMHgwMDAwIH0sCisJeyAweDAzNDUsIDB4MDAwMCB9LAorCXsgMHgwMzQ2LCAweDAwMDAgfSwKKwl7IDB4MDM0NywgMHgwMDAwIH0sCisJeyAweDAzNDgsIDB4MDAwMCB9LAorCXsgMHgwMzQ5LCAweDAwMDAgfSwKKwl7IDB4MDM0YSwgMHgwMDAwIH0sCisJeyAweDAzNGIsIDB4MDAwMCB9LAorCXsgMHgwMzRjLCAweDAwMDAgfSwKKwl7IDB4MDM0ZCwgMHgwMDAwIH0sCisJeyAweDAzNGUsIDB4MDAwMCB9LAorCXsgMHgwMzRmLCAweDAwMDAgfSwKKwl7IDB4MDM1MCwgMHgwMDAwIH0sCisJeyAweDAzNTEsIDB4MDAwMCB9LAorCXsgMHgwMzUyLCAweDAwMDAgfSwKKwl7IDB4MDM1MywgMHgwMDAwIH0sCisJeyAweDAzNTQsIDB4MDAwMCB9LAorCXsgMHgwMzU1LCAweDAwMDAgfSwKKwl7IDB4MDM1NiwgMHgwMDAwIH0sCisJeyAweDAzNTcsIDB4MDAwMCB9LAorCXsgMHgwMzU4LCAweDAwMDAgfSwKKwl7IDB4MDM1OSwgMHgwMDAwIH0sCisJeyAweDAzNWEsIDB4MDAwMCB9LAorCXsgMHgwMzViLCAweDAwMDAgfSwKKwl7IDB4MDM1YywgMHgwMDAwIH0sCisJeyAweDAzNWQsIDB4MDAwMCB9LAorCXsgMHgwMzVlLCAweDIwMDAgfSwKKwl7IDB4MDM1ZiwgMHgwMDAwIH0sCisJeyAweDAzNjAsIDB4MjAwMCB9LAorCXsgMHgwMzYxLCAweDIwMDAgfSwKKwl7IDB4MDM2MiwgMHgwMDAwIH0sCisJeyAweDAzNjMsIDB4MjAwMCB9LAorCXsgMHgwMzY0LCAweDAyMDAgfSwKKwl7IDB4MDM2NSwgMHgwMDAwIH0sCisJeyAweDAzNjYsIDB4MDAwMCB9LAorCXsgMHgwMzY3LCAweDAwMDAgfSwKKwl7IDB4MDM2OCwgMHgwMDAwIH0sCisJeyAweDAzNjksIDB4MDAwMCB9LAorCXsgMHgwMzZhLCAweDAwMDAgfSwKKwl7IDB4MDM2YiwgMHgwMDAwIH0sCisJeyAweDAzNmMsIDB4MDAwMCB9LAorCXsgMHgwMzZkLCAweDAwMDAgfSwKKwl7IDB4MDM2ZSwgMHgwMjAwIH0sCisJeyAweDAzNmYsIDB4MDAwMCB9LAorCXsgMHgwMzcwLCAweDAwMDAgfSwKKwl7IDB4MDM3MSwgMHgwMDAwIH0sCisJeyAweDAzNzIsIDB4MDAwMCB9LAorCXsgMHgwMzczLCAweDAwMDAgfSwKKwl7IDB4MDM3NCwgMHgwMDAwIH0sCisJeyAweDAzNzUsIDB4MDAwMCB9LAorCXsgMHgwMzc2LCAweDAwMDAgfSwKKwl7IDB4MDM3NywgMHgwMDAwIH0sCisJeyAweDAzZDAsIDB4MDAwMCB9LAorCXsgMHgwM2QxLCAweDAwMDAgfSwKKwl7IDB4MDNkMiwgMHgwMDAwIH0sCisJeyAweDAzZDMsIDB4MDAwMCB9LAorCXsgMHgwM2Q0LCAweDIwMDAgfSwKKwl7IDB4MDNkNSwgMHgyMDAwIH0sCisJeyAweDAzZDYsIDB4MDAwMCB9LAorCXsgMHgwM2Q3LCAweDAwMDAgfSwKKwl7IDB4MDNkOCwgMHgyMDAwIH0sCisJeyAweDAzZDksIDB4MjAwMCB9LAorCXsgMHgwM2RhLCAweDIwMDAgfSwKKwl7IDB4MDNkYiwgMHgyMDAwIH0sCisJeyAweDAzZGMsIDB4MDAwMCB9LAorCXsgMHgwM2RkLCAweDAwMDAgfSwKKwl7IDB4MDNkZSwgMHgwMDAwIH0sCisJeyAweDAzZGYsIDB4MjAwMCB9LAorCXsgMHgwM2UwLCAweDAwMDAgfSwKKwl7IDB4MDNlMSwgMHgwMDAwIH0sCisJeyAweDAzZTIsIDB4MDAwMCB9LAorCXsgMHgwM2UzLCAweDAwMDAgfSwKKwl7IDB4MDNlNCwgMHgwMDAwIH0sCisJeyAweDAzZTUsIDB4MDAwMCB9LAorCXsgMHgwM2U2LCAweDAwMDAgfSwKKwl7IDB4MDNlNywgMHgwMDAwIH0sCisJeyAweDAzZTgsIDB4MDAwMCB9LAorCXsgMHgwM2U5LCAweDAwMDAgfSwKKwl7IDB4MDNlYSwgMHgwMDAwIH0sCisJeyAweDAzZWIsIDB4MDAwMCB9LAorCXsgMHgwM2VjLCAweDAwMDAgfSwKKwl7IDB4MDNlZCwgMHgwMDAwIH0sCisJeyAweDAzZWUsIDB4MDAwMCB9LAorCXsgMHgwM2VmLCAweDAwMDAgfSwKKwl7IDB4MDNmMCwgMHgwODAwIH0sCisJeyAweDAzZjEsIDB4MDgwMCB9LAorCXsgMHgwM2YyLCAweDA4MDAgfSwKKwl7IDB4MDNmMywgMHgwODAwIH0sCit9OworCitzdGF0aWMgYm9vbCBydDU2NTlfdm9sYXRpbGVfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBSVDU2NTlfUkVTRVQ6CisJY2FzZSBSVDU2NTlfRUpEX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9TSUxFTkNFX0NUUkw6CisJY2FzZSBSVDU2NTlfREFDMl9ESUdfVk9MOgorCWNhc2UgUlQ1NjU5X0hQX0lNUF9HQUlOXzI6CisJY2FzZSBSVDU2NTlfUERNX09VVF9DVFJMOgorCWNhc2UgUlQ1NjU5X1BETV9EQVRBX0NUUkxfMToKKwljYXNlIFJUNTY1OV9QRE1fREFUQV9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzM6CisJY2FzZSBSVDU2NTlfSEFQVElDX0xQRl9DVFJMXzM6CisJY2FzZSBSVDU2NTlfQ0xLX0RFVDoKKwljYXNlIFJUNTY1OV9NSUNCSUFTXzE6CisJY2FzZSBSVDU2NTlfQVNSQ18xMToKKwljYXNlIFJUNTY1OV9BRENfRVFfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0RBQ19FUV9DVFJMXzE6CisJY2FzZSBSVDU2NTlfSU5UX1NUXzE6CisJY2FzZSBSVDU2NTlfSU5UX1NUXzI6CisJY2FzZSBSVDU2NTlfR1BJT19TVEE6CisJY2FzZSBSVDU2NTlfU0lORV9HRU5fQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0lMX0NNRF8xOgorCWNhc2UgUlQ1NjU5XzRCVE5fSUxfQ01EXzE6CisJY2FzZSBSVDU2NTlfUFNWX0lMX0NNRF8xOgorCWNhc2UgUlQ1NjU5X0FKRDFfQ1RSTDoKKwljYXNlIFJUNTY1OV9BSkQyX0FKRDNfQ1RSTDoKKwljYXNlIFJUNTY1OV9KRF9DVFJMXzM6CisJY2FzZSBSVDU2NTlfVkVORE9SX0lEOgorCWNhc2UgUlQ1NjU5X1ZFTkRPUl9JRF8xOgorCWNhc2UgUlQ1NjU5X0RFVklDRV9JRDoKKwljYXNlIFJUNTY1OV9NRU1PUllfVEVTVDoKKwljYXNlIFJUNTY1OV9TT0ZUX1JBTVBfREVQT1BfREFDX0NMS19DVFJMOgorCWNhc2UgUlQ1NjU5X1ZPTF9URVNUOgorCWNhc2UgUlQ1NjU5X1NUT19ORzJfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X1NUT19ORzJfQ1RSTF81OgorCWNhc2UgUlQ1NjU5X1NUT19ORzJfQ1RSTF82OgorCWNhc2UgUlQ1NjU5X1NUT19ORzJfQ1RSTF83OgorCWNhc2UgUlQ1NjU5X01PTk9fTkcyX0NUUkxfMToKKwljYXNlIFJUNTY1OV9NT05PX05HMl9DVFJMXzU6CisJY2FzZSBSVDU2NTlfTU9OT19ORzJfQ1RSTF82OgorCWNhc2UgUlQ1NjU5X0hQX0lNUF9TRU5TX0NUUkxfMToKKwljYXNlIFJUNTY1OV9IUF9JTVBfU0VOU19DVFJMXzM6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfQ1RSTF80OgorCWNhc2UgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMToKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzk6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzE6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzI6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzM6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzQ6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzU6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzY6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzc6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzg6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzk6CisJY2FzZSBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X01PTk9fQU1QX0NBTElCX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9NT05PX0FNUF9DQUxJQl9TVEFfMToKKwljYXNlIFJUNTY1OV9NT05PX0FNUF9DQUxJQl9TVEFfMjoKKwljYXNlIFJUNTY1OV9NT05PX0FNUF9DQUxJQl9TVEFfMzoKKwljYXNlIFJUNTY1OV9NT05PX0FNUF9DQUxJQl9TVEFfNDoKKwljYXNlIFJUNTY1OV9TUEtfUFdSX0xNVF9TVEFfMToKKwljYXNlIFJUNTY1OV9TUEtfUFdSX0xNVF9TVEFfMjoKKwljYXNlIFJUNTY1OV9TUEtfUFdSX0xNVF9TVEFfMzoKKwljYXNlIFJUNTY1OV9TUEtfUFdSX0xNVF9TVEFfNDoKKwljYXNlIFJUNTY1OV9TUEtfUFdSX0xNVF9TVEFfNToKKwljYXNlIFJUNTY1OV9TUEtfUFdSX0xNVF9TVEFfNjoKKwljYXNlIFJUNTY1OV9TUEtfRENfQ0FJTEJfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfMToKKwljYXNlIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzI6CisJY2FzZSBSVDU2NTlfU1BLX0RDX0NBSUxCX1NUQV8zOgorCWNhc2UgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfNDoKKwljYXNlIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzU6CisJY2FzZSBSVDU2NTlfU1BLX0RDX0NBSUxCX1NUQV82OgorCWNhc2UgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfNzoKKwljYXNlIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzg6CisJY2FzZSBSVDU2NTlfU1BLX0RDX0NBSUxCX1NUQV85OgorCWNhc2UgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfMTA6CisJY2FzZSBSVDU2NTlfU1BLX1ZERF9TVEFfMToKKwljYXNlIFJUNTY1OV9TUEtfVkREX1NUQV8yOgorCWNhc2UgUlQ1NjU5X1NQS19EQ19ERVRfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X1BVUkVfRENfREVUX0NUUkxfMToKKwljYXNlIFJUNTY1OV9QVVJFX0RDX0RFVF9DVFJMXzI6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzE6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzQ6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzU6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzY6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzc6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzE6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzQ6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzU6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzY6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzc6CisJY2FzZSBSVDU2NTlfQUxDX1BHQV9TVEFfMToKKwljYXNlIFJUNTY1OV9BTENfUEdBX1NUQV8yOgorCWNhc2UgUlQ1NjU5X0FMQ19QR0FfU1RBXzM6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIHJ0NTY1OV9yZWFkYWJsZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFJUNTY1OV9SRVNFVDoKKwljYXNlIFJUNTY1OV9TUE9fVk9MOgorCWNhc2UgUlQ1NjU5X0hQX1ZPTDoKKwljYXNlIFJUNTY1OV9MT1VUOgorCWNhc2UgUlQ1NjU5X01PTk9fT1VUOgorCWNhc2UgUlQ1NjU5X0hQTF9HQUlOOgorCWNhc2UgUlQ1NjU5X0hQUl9HQUlOOgorCWNhc2UgUlQ1NjU5X01PTk9fR0FJTjoKKwljYXNlIFJUNTY1OV9TUERJRl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfU1BESUZfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X0NBTF9CU1RfQ1RSTDoKKwljYXNlIFJUNTY1OV9JTjFfSU4yOgorCWNhc2UgUlQ1NjU5X0lOM19JTjQ6CisJY2FzZSBSVDU2NTlfSU5MMV9JTlIxX1ZPTDoKKwljYXNlIFJUNTY1OV9FSkRfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0VKRF9DVFJMXzI6CisJY2FzZSBSVDU2NTlfRUpEX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9TSUxFTkNFX0NUUkw6CisJY2FzZSBSVDU2NTlfUFNWX0NUUkw6CisJY2FzZSBSVDU2NTlfU0lERVRPTkVfQ1RSTDoKKwljYXNlIFJUNTY1OV9EQUMxX0RJR19WT0w6CisJY2FzZSBSVDU2NTlfREFDMl9ESUdfVk9MOgorCWNhc2UgUlQ1NjU5X0RBQ19DVFJMOgorCWNhc2UgUlQ1NjU5X1NUTzFfQURDX0RJR19WT0w6CisJY2FzZSBSVDU2NTlfTU9OT19BRENfRElHX1ZPTDoKKwljYXNlIFJUNTY1OV9TVE8yX0FEQ19ESUdfVk9MOgorCWNhc2UgUlQ1NjU5X1NUTzFfQk9PU1Q6CisJY2FzZSBSVDU2NTlfTU9OT19CT09TVDoKKwljYXNlIFJUNTY1OV9TVE8yX0JPT1NUOgorCWNhc2UgUlQ1NjU5X0hQX0lNUF9HQUlOXzE6CisJY2FzZSBSVDU2NTlfSFBfSU1QX0dBSU5fMjoKKwljYXNlIFJUNTY1OV9TVE8xX0FEQ19NSVhFUjoKKwljYXNlIFJUNTY1OV9NT05PX0FEQ19NSVhFUjoKKwljYXNlIFJUNTY1OV9BRF9EQV9NSVhFUjoKKwljYXNlIFJUNTY1OV9TVE9fREFDX01JWEVSOgorCWNhc2UgUlQ1NjU5X01PTk9fREFDX01JWEVSOgorCWNhc2UgUlQ1NjU5X0RJR19NSVhFUjoKKwljYXNlIFJUNTY1OV9BX0RBQ19NVVg6CisJY2FzZSBSVDU2NTlfRElHX0lORjIzX0RBVEE6CisJY2FzZSBSVDU2NTlfUERNX09VVF9DVFJMOgorCWNhc2UgUlQ1NjU5X1BETV9EQVRBX0NUUkxfMToKKwljYXNlIFJUNTY1OV9QRE1fREFUQV9DVFJMXzI6CisJY2FzZSBSVDU2NTlfUERNX0RBVEFfQ1RSTF8zOgorCWNhc2UgUlQ1NjU5X1BETV9EQVRBX0NUUkxfNDoKKwljYXNlIFJUNTY1OV9TUERJRl9DVFJMOgorCWNhc2UgUlQ1NjU5X1JFQzFfR0FJTjoKKwljYXNlIFJUNTY1OV9SRUMxX0wxX01JWEVSOgorCWNhc2UgUlQ1NjU5X1JFQzFfTDJfTUlYRVI6CisJY2FzZSBSVDU2NTlfUkVDMV9SMV9NSVhFUjoKKwljYXNlIFJUNTY1OV9SRUMxX1IyX01JWEVSOgorCWNhc2UgUlQ1NjU5X0NBTF9SRUM6CisJY2FzZSBSVDU2NTlfUkVDMl9MMV9NSVhFUjoKKwljYXNlIFJUNTY1OV9SRUMyX0wyX01JWEVSOgorCWNhc2UgUlQ1NjU5X1JFQzJfUjFfTUlYRVI6CisJY2FzZSBSVDU2NTlfUkVDMl9SMl9NSVhFUjoKKwljYXNlIFJUNTY1OV9TUEtfTF9NSVhFUjoKKwljYXNlIFJUNTY1OV9TUEtfUl9NSVhFUjoKKwljYXNlIFJUNTY1OV9TUE9fQU1QX0dBSU46CisJY2FzZSBSVDU2NTlfQUxDX0JBQ0tfR0FJTjoKKwljYXNlIFJUNTY1OV9NT05PTUlYX0dBSU46CisJY2FzZSBSVDU2NTlfTU9OT01JWF9JTl9HQUlOOgorCWNhc2UgUlQ1NjU5X09VVF9MX0dBSU46CisJY2FzZSBSVDU2NTlfT1VUX0xfTUlYRVI6CisJY2FzZSBSVDU2NTlfT1VUX1JfR0FJTjoKKwljYXNlIFJUNTY1OV9PVVRfUl9NSVhFUjoKKwljYXNlIFJUNTY1OV9MT1VUX01JWEVSOgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF8zOgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF80OgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF81OgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF82OgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF83OgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF84OgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF85OgorCWNhc2UgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF8xMDoKKwljYXNlIFJUNTY1OV9IQVBUSUNfR0VOX0NUUkxfMTE6CisJY2FzZSBSVDU2NTlfSEFQVElDX0xQRl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfSEFQVElDX0xQRl9DVFJMXzI6CisJY2FzZSBSVDU2NTlfSEFQVElDX0xQRl9DVFJMXzM6CisJY2FzZSBSVDU2NTlfUFdSX0RJR18xOgorCWNhc2UgUlQ1NjU5X1BXUl9ESUdfMjoKKwljYXNlIFJUNTY1OV9QV1JfQU5MR18xOgorCWNhc2UgUlQ1NjU5X1BXUl9BTkxHXzI6CisJY2FzZSBSVDU2NTlfUFdSX0FOTEdfMzoKKwljYXNlIFJUNTY1OV9QV1JfTUlYRVI6CisJY2FzZSBSVDU2NTlfUFdSX1ZPTDoKKwljYXNlIFJUNTY1OV9QUklWX0lOREVYOgorCWNhc2UgUlQ1NjU5X0NMS19ERVQ6CisJY2FzZSBSVDU2NTlfUFJJVl9EQVRBOgorCWNhc2UgUlQ1NjU5X1BSRV9ESVZfMToKKwljYXNlIFJUNTY1OV9QUkVfRElWXzI6CisJY2FzZSBSVDU2NTlfSTJTMV9TRFA6CisJY2FzZSBSVDU2NTlfSTJTMl9TRFA6CisJY2FzZSBSVDU2NTlfSTJTM19TRFA6CisJY2FzZSBSVDU2NTlfQUREQV9DTEtfMToKKwljYXNlIFJUNTY1OV9BRERBX0NMS18yOgorCWNhc2UgUlQ1NjU5X0RNSUNfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0RNSUNfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X1RETV9DVFJMXzE6CisJY2FzZSBSVDU2NTlfVERNX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9URE1fQ1RSTF8zOgorCWNhc2UgUlQ1NjU5X1RETV9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfVERNX0NUUkxfNToKKwljYXNlIFJUNTY1OV9HTEJfQ0xLOgorCWNhc2UgUlQ1NjU5X1BMTF9DVFJMXzE6CisJY2FzZSBSVDU2NTlfUExMX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9BU1JDXzE6CisJY2FzZSBSVDU2NTlfQVNSQ18yOgorCWNhc2UgUlQ1NjU5X0FTUkNfMzoKKwljYXNlIFJUNTY1OV9BU1JDXzQ6CisJY2FzZSBSVDU2NTlfQVNSQ181OgorCWNhc2UgUlQ1NjU5X0FTUkNfNjoKKwljYXNlIFJUNTY1OV9BU1JDXzc6CisJY2FzZSBSVDU2NTlfQVNSQ184OgorCWNhc2UgUlQ1NjU5X0FTUkNfOToKKwljYXNlIFJUNTY1OV9BU1JDXzEwOgorCWNhc2UgUlQ1NjU5X0RFUE9QXzE6CisJY2FzZSBSVDU2NTlfREVQT1BfMjoKKwljYXNlIFJUNTY1OV9ERVBPUF8zOgorCWNhc2UgUlQ1NjU5X0hQX0NIQVJHRV9QVU1QXzE6CisJY2FzZSBSVDU2NTlfSFBfQ0hBUkdFX1BVTVBfMjoKKwljYXNlIFJUNTY1OV9NSUNCSUFTXzE6CisJY2FzZSBSVDU2NTlfTUlDQklBU18yOgorCWNhc2UgUlQ1NjU5X0FTUkNfMTE6CisJY2FzZSBSVDU2NTlfQVNSQ18xMjoKKwljYXNlIFJUNTY1OV9BU1JDXzEzOgorCWNhc2UgUlQ1NjU5X1JFQ19NMV9NMl9HQUlOX0NUUkw6CisJY2FzZSBSVDU2NTlfUkNfQ0xLX0NUUkw6CisJY2FzZSBSVDU2NTlfQ0xBU1NEX0NUUkxfMToKKwljYXNlIFJUNTY1OV9DTEFTU0RfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X0FEQ19FUV9DVFJMXzE6CisJY2FzZSBSVDU2NTlfQURDX0VRX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9EQUNfRVFfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0RBQ19FUV9DVFJMXzI6CisJY2FzZSBSVDU2NTlfREFDX0VRX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9JUlFfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0lSUV9DVFJMXzI6CisJY2FzZSBSVDU2NTlfSVJRX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9JUlFfQ1RSTF80OgorCWNhc2UgUlQ1NjU5X0lSUV9DVFJMXzU6CisJY2FzZSBSVDU2NTlfSVJRX0NUUkxfNjoKKwljYXNlIFJUNTY1OV9JTlRfU1RfMToKKwljYXNlIFJUNTY1OV9JTlRfU1RfMjoKKwljYXNlIFJUNTY1OV9HUElPX0NUUkxfMToKKwljYXNlIFJUNTY1OV9HUElPX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9HUElPX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9HUElPX0NUUkxfNDoKKwljYXNlIFJUNTY1OV9HUElPX0NUUkxfNToKKwljYXNlIFJUNTY1OV9HUElPX1NUQToKKwljYXNlIFJUNTY1OV9TSU5FX0dFTl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfU0lORV9HRU5fQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X1NJTkVfR0VOX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9IUF9BTVBfREVUX0NUUkxfMToKKwljYXNlIFJUNTY1OV9IUF9BTVBfREVUX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9TVl9aQ0RfMToKKwljYXNlIFJUNTY1OV9TVl9aQ0RfMjoKKwljYXNlIFJUNTY1OV9JTF9DTURfMToKKwljYXNlIFJUNTY1OV9JTF9DTURfMjoKKwljYXNlIFJUNTY1OV9JTF9DTURfMzoKKwljYXNlIFJUNTY1OV9JTF9DTURfNDoKKwljYXNlIFJUNTY1OV80QlROX0lMX0NNRF8xOgorCWNhc2UgUlQ1NjU5XzRCVE5fSUxfQ01EXzI6CisJY2FzZSBSVDU2NTlfNEJUTl9JTF9DTURfMzoKKwljYXNlIFJUNTY1OV9QU1ZfSUxfQ01EXzE6CisJY2FzZSBSVDU2NTlfUFNWX0lMX0NNRF8yOgorCWNhc2UgUlQ1NjU5X0FEQ19TVE8xX0hQX0NUUkxfMToKKwljYXNlIFJUNTY1OV9BRENfU1RPMV9IUF9DVFJMXzI6CisJY2FzZSBSVDU2NTlfQURDX01PTk9fSFBfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0FEQ19NT05PX0hQX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9BSkQxX0NUUkw6CisJY2FzZSBSVDU2NTlfQUpEMl9BSkQzX0NUUkw6CisJY2FzZSBSVDU2NTlfSkQxX1RIRDoKKwljYXNlIFJUNTY1OV9KRDJfVEhEOgorCWNhc2UgUlQ1NjU5X0pEM19USEQ6CisJY2FzZSBSVDU2NTlfSkRfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0pEX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9KRF9DVFJMXzM6CisJY2FzZSBSVDU2NTlfSkRfQ1RSTF80OgorCWNhc2UgUlQ1NjU5X0RJR19NSVNDOgorCWNhc2UgUlQ1NjU5X0RVTU1ZXzI6CisJY2FzZSBSVDU2NTlfRFVNTVlfMzoKKwljYXNlIFJUNTY1OV9WRU5ET1JfSUQ6CisJY2FzZSBSVDU2NTlfVkVORE9SX0lEXzE6CisJY2FzZSBSVDU2NTlfREVWSUNFX0lEOgorCWNhc2UgUlQ1NjU5X0RBQ19BRENfRElHX1ZPTDoKKwljYXNlIFJUNTY1OV9CSUFTX0NVUl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfQklBU19DVVJfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X0JJQVNfQ1VSX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9CSUFTX0NVUl9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfQklBU19DVVJfQ1RSTF81OgorCWNhc2UgUlQ1NjU5X0JJQVNfQ1VSX0NUUkxfNjoKKwljYXNlIFJUNTY1OV9CSUFTX0NVUl9DVFJMXzc6CisJY2FzZSBSVDU2NTlfQklBU19DVVJfQ1RSTF84OgorCWNhc2UgUlQ1NjU5X0JJQVNfQ1VSX0NUUkxfOToKKwljYXNlIFJUNTY1OV9CSUFTX0NVUl9DVFJMXzEwOgorCWNhc2UgUlQ1NjU5X01FTU9SWV9URVNUOgorCWNhc2UgUlQ1NjU5X1ZSRUZfUkVDX09QX0ZCX0NBUF9DVFJMOgorCWNhc2UgUlQ1NjU5X0NMQVNTRF8wOgorCWNhc2UgUlQ1NjU5X0NMQVNTRF8xOgorCWNhc2UgUlQ1NjU5X0NMQVNTRF8yOgorCWNhc2UgUlQ1NjU5X0NMQVNTRF8zOgorCWNhc2UgUlQ1NjU5X0NMQVNTRF80OgorCWNhc2UgUlQ1NjU5X0NMQVNTRF81OgorCWNhc2UgUlQ1NjU5X0NMQVNTRF82OgorCWNhc2UgUlQ1NjU5X0NMQVNTRF83OgorCWNhc2UgUlQ1NjU5X0NMQVNTRF84OgorCWNhc2UgUlQ1NjU5X0NMQVNTRF85OgorCWNhc2UgUlQ1NjU5X0NMQVNTRF8xMDoKKwljYXNlIFJUNTY1OV9DSEFSR0VfUFVNUF8xOgorCWNhc2UgUlQ1NjU5X0NIQVJHRV9QVU1QXzI6CisJY2FzZSBSVDU2NTlfRElHX0lOX0NUUkxfMToKKwljYXNlIFJUNTY1OV9ESUdfSU5fQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X1BBRF9EUklWSU5HX0NUUkw6CisJY2FzZSBSVDU2NTlfU09GVF9SQU1QX0RFUE9QOgorCWNhc2UgUlQ1NjU5X1BMTDoKKwljYXNlIFJUNTY1OV9DSE9QX0RBQzoKKwljYXNlIFJUNTY1OV9DSE9QX0FEQzoKKwljYXNlIFJUNTY1OV9DQUxJQl9BRENfQ1RSTDoKKwljYXNlIFJUNTY1OV9TT0ZUX1JBTVBfREVQT1BfREFDX0NMS19DVFJMOgorCWNhc2UgUlQ1NjU5X1ZPTF9URVNUOgorCWNhc2UgUlQ1NjU5X1RFU1RfTU9ERV9DVFJMXzE6CisJY2FzZSBSVDU2NTlfVEVTVF9NT0RFX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9URVNUX01PREVfQ1RSTF8zOgorCWNhc2UgUlQ1NjU5X1RFU1RfTU9ERV9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfQkFTU0JBQ0tfQ1RSTDoKKwljYXNlIFJUNTY1OV9NUDNfUExVU19DVFJMXzE6CisJY2FzZSBSVDU2NTlfTVAzX1BMVVNfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X01QM19IUEZfQTE6CisJY2FzZSBSVDU2NTlfTVAzX0hQRl9BMjoKKwljYXNlIFJUNTY1OV9NUDNfSFBGX0gwOgorCWNhc2UgUlQ1NjU5X01QM19MUEZfSDA6CisJY2FzZSBSVDU2NTlfM0RfU1BLX0NUUkw6CisJY2FzZSBSVDU2NTlfM0RfU1BLX0NPRUZfMToKKwljYXNlIFJUNTY1OV8zRF9TUEtfQ09FRl8yOgorCWNhc2UgUlQ1NjU5XzNEX1NQS19DT0VGXzM6CisJY2FzZSBSVDU2NTlfM0RfU1BLX0NPRUZfNDoKKwljYXNlIFJUNTY1OV8zRF9TUEtfQ09FRl81OgorCWNhc2UgUlQ1NjU5XzNEX1NQS19DT0VGXzY6CisJY2FzZSBSVDU2NTlfM0RfU1BLX0NPRUZfNzoKKwljYXNlIFJUNTY1OV9TVE9fTkcyX0NUUkxfMToKKwljYXNlIFJUNTY1OV9TVE9fTkcyX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9TVE9fTkcyX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9TVE9fTkcyX0NUUkxfNDoKKwljYXNlIFJUNTY1OV9TVE9fTkcyX0NUUkxfNToKKwljYXNlIFJUNTY1OV9TVE9fTkcyX0NUUkxfNjoKKwljYXNlIFJUNTY1OV9TVE9fTkcyX0NUUkxfNzoKKwljYXNlIFJUNTY1OV9TVE9fTkcyX0NUUkxfODoKKwljYXNlIFJUNTY1OV9NT05PX05HMl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfTU9OT19ORzJfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X01PTk9fTkcyX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9NT05PX05HMl9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfTU9OT19ORzJfQ1RSTF81OgorCWNhc2UgUlQ1NjU5X01PTk9fTkcyX0NUUkxfNjoKKwljYXNlIFJUNTY1OV9NSURfSFBfQU1QX0RFVDoKKwljYXNlIFJUNTY1OV9MT1dfSFBfQU1QX0RFVDoKKwljYXNlIFJUNTY1OV9MRE9fQ1RSTDoKKwljYXNlIFJUNTY1OV9IUF9ERUNST1NTX0NUUkxfMToKKwljYXNlIFJUNTY1OV9IUF9ERUNST1NTX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9IUF9ERUNST1NTX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9IUF9ERUNST1NTX0NUUkxfNDoKKwljYXNlIFJUNTY1OV9IUF9JTVBfU0VOU19DVFJMXzE6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X0hQX0lNUF9TRU5TX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9IUF9JTVBfU0VOU19DVFJMXzQ6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfTUFQXzE6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfTUFQXzI6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfTUFQXzM6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfTUFQXzQ6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfTUFQXzU6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfTUFQXzY6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfTUFQXzc6CisJY2FzZSBSVDU2NTlfSFBfSU1QX1NFTlNfTUFQXzg6CisJY2FzZSBSVDU2NTlfSFBfTE9HSUNfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X0hQX0xPR0lDX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF81OgorCWNhc2UgUlQ1NjU5X0hQX0NBTElCX0NUUkxfNjoKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzc6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF85OgorCWNhc2UgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMTA6CisJY2FzZSBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF8xMToKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9TVEFfMToKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9TVEFfMjoKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9TVEFfMzoKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9TVEFfNDoKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9TVEFfNToKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9TVEFfNjoKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9TVEFfNzoKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9TVEFfODoKKwljYXNlIFJUNTY1OV9IUF9DQUxJQl9TVEFfOToKKwljYXNlIFJUNTY1OV9NT05PX0FNUF9DQUxJQl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X01PTk9fQU1QX0NBTElCX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9NT05PX0FNUF9DQUxJQl9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfQ1RSTF81OgorCWNhc2UgUlQ1NjU5X01PTk9fQU1QX0NBTElCX1NUQV8xOgorCWNhc2UgUlQ1NjU5X01PTk9fQU1QX0NBTElCX1NUQV8yOgorCWNhc2UgUlQ1NjU5X01PTk9fQU1QX0NBTElCX1NUQV8zOgorCWNhc2UgUlQ1NjU5X01PTk9fQU1QX0NBTElCX1NUQV80OgorCWNhc2UgUlQ1NjU5X1NQS19QV1JfTE1UX0NUUkxfMToKKwljYXNlIFJUNTY1OV9TUEtfUFdSX0xNVF9DVFJMXzI6CisJY2FzZSBSVDU2NTlfU1BLX1BXUl9MTVRfQ1RSTF8zOgorCWNhc2UgUlQ1NjU5X1NQS19QV1JfTE1UX1NUQV8xOgorCWNhc2UgUlQ1NjU5X1NQS19QV1JfTE1UX1NUQV8yOgorCWNhc2UgUlQ1NjU5X1NQS19QV1JfTE1UX1NUQV8zOgorCWNhc2UgUlQ1NjU5X1NQS19QV1JfTE1UX1NUQV80OgorCWNhc2UgUlQ1NjU5X1NQS19QV1JfTE1UX1NUQV81OgorCWNhc2UgUlQ1NjU5X1NQS19QV1JfTE1UX1NUQV82OgorCWNhc2UgUlQ1NjU5X0ZMRVhfU1BLX0JTVF9DVFJMXzE6CisJY2FzZSBSVDU2NTlfRkxFWF9TUEtfQlNUX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9GTEVYX1NQS19CU1RfQ1RSTF8zOgorCWNhc2UgUlQ1NjU5X0ZMRVhfU1BLX0JTVF9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfU1BLX0VYX0xNVF9DVFJMXzE6CisJY2FzZSBSVDU2NTlfU1BLX0VYX0xNVF9DVFJMXzI6CisJY2FzZSBSVDU2NTlfU1BLX0VYX0xNVF9DVFJMXzM6CisJY2FzZSBSVDU2NTlfU1BLX0VYX0xNVF9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfU1BLX0VYX0xNVF9DVFJMXzU6CisJY2FzZSBSVDU2NTlfU1BLX0VYX0xNVF9DVFJMXzY6CisJY2FzZSBSVDU2NTlfU1BLX0VYX0xNVF9DVFJMXzc6CisJY2FzZSBSVDU2NTlfQURKX0hQRl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfQURKX0hQRl9DVFJMXzI6CisJY2FzZSBSVDU2NTlfU1BLX0RDX0NBSUxCX0NUUkxfMToKKwljYXNlIFJUNTY1OV9TUEtfRENfQ0FJTEJfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X1NQS19EQ19DQUlMQl9DVFJMXzM6CisJY2FzZSBSVDU2NTlfU1BLX0RDX0NBSUxCX0NUUkxfNDoKKwljYXNlIFJUNTY1OV9TUEtfRENfQ0FJTEJfQ1RSTF81OgorCWNhc2UgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfMToKKwljYXNlIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzI6CisJY2FzZSBSVDU2NTlfU1BLX0RDX0NBSUxCX1NUQV8zOgorCWNhc2UgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfNDoKKwljYXNlIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzU6CisJY2FzZSBSVDU2NTlfU1BLX0RDX0NBSUxCX1NUQV82OgorCWNhc2UgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfNzoKKwljYXNlIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzg6CisJY2FzZSBSVDU2NTlfU1BLX0RDX0NBSUxCX1NUQV85OgorCWNhc2UgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfMTA6CisJY2FzZSBSVDU2NTlfU1BLX1ZERF9TVEFfMToKKwljYXNlIFJUNTY1OV9TUEtfVkREX1NUQV8yOgorCWNhc2UgUlQ1NjU5X1NQS19EQ19ERVRfQ1RSTF8xOgorCWNhc2UgUlQ1NjU5X1NQS19EQ19ERVRfQ1RSTF8yOgorCWNhc2UgUlQ1NjU5X1NQS19EQ19ERVRfQ1RSTF8zOgorCWNhc2UgUlQ1NjU5X1BVUkVfRENfREVUX0NUUkxfMToKKwljYXNlIFJUNTY1OV9QVVJFX0RDX0RFVF9DVFJMXzI6CisJY2FzZSBSVDU2NTlfRFVNTVlfNDoKKwljYXNlIFJUNTY1OV9EVU1NWV81OgorCWNhc2UgUlQ1NjU5X0RVTU1ZXzY6CisJY2FzZSBSVDU2NTlfRFJDMV9DVFJMXzE6CisJY2FzZSBSVDU2NTlfRFJDMV9DVFJMXzI6CisJY2FzZSBSVDU2NTlfRFJDMV9DVFJMXzM6CisJY2FzZSBSVDU2NTlfRFJDMV9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfRFJDMV9DVFJMXzU6CisJY2FzZSBSVDU2NTlfRFJDMV9DVFJMXzY6CisJY2FzZSBSVDU2NTlfRFJDMV9IQVJEX0xNVF9DVFJMXzE6CisJY2FzZSBSVDU2NTlfRFJDMV9IQVJEX0xNVF9DVFJMXzI6CisJY2FzZSBSVDU2NTlfRFJDMl9DVFJMXzE6CisJY2FzZSBSVDU2NTlfRFJDMl9DVFJMXzI6CisJY2FzZSBSVDU2NTlfRFJDMl9DVFJMXzM6CisJY2FzZSBSVDU2NTlfRFJDMl9DVFJMXzQ6CisJY2FzZSBSVDU2NTlfRFJDMl9DVFJMXzU6CisJY2FzZSBSVDU2NTlfRFJDMl9DVFJMXzY6CisJY2FzZSBSVDU2NTlfRFJDMl9IQVJEX0xNVF9DVFJMXzE6CisJY2FzZSBSVDU2NTlfRFJDMl9IQVJEX0xNVF9DVFJMXzI6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzE6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzI6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzM6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzQ6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzU6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzY6CisJY2FzZSBSVDU2NTlfRFJDMV9QUklWXzc6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzE6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzI6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzM6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzQ6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzU6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzY6CisJY2FzZSBSVDU2NTlfRFJDMl9QUklWXzc6CisJY2FzZSBSVDU2NTlfTVVMVElfRFJDX0NUUkw6CisJY2FzZSBSVDU2NTlfQ1JPU1NfT1ZFUl8xOgorCWNhc2UgUlQ1NjU5X0NST1NTX09WRVJfMjoKKwljYXNlIFJUNTY1OV9DUk9TU19PVkVSXzM6CisJY2FzZSBSVDU2NTlfQ1JPU1NfT1ZFUl80OgorCWNhc2UgUlQ1NjU5X0NST1NTX09WRVJfNToKKwljYXNlIFJUNTY1OV9DUk9TU19PVkVSXzY6CisJY2FzZSBSVDU2NTlfQ1JPU1NfT1ZFUl83OgorCWNhc2UgUlQ1NjU5X0NST1NTX09WRVJfODoKKwljYXNlIFJUNTY1OV9DUk9TU19PVkVSXzk6CisJY2FzZSBSVDU2NTlfQ1JPU1NfT1ZFUl8xMDoKKwljYXNlIFJUNTY1OV9BTENfUEdBX0NUUkxfMToKKwljYXNlIFJUNTY1OV9BTENfUEdBX0NUUkxfMjoKKwljYXNlIFJUNTY1OV9BTENfUEdBX0NUUkxfMzoKKwljYXNlIFJUNTY1OV9BTENfUEdBX0NUUkxfNDoKKwljYXNlIFJUNTY1OV9BTENfUEdBX0NUUkxfNToKKwljYXNlIFJUNTY1OV9BTENfUEdBX0NUUkxfNjoKKwljYXNlIFJUNTY1OV9BTENfUEdBX0NUUkxfNzoKKwljYXNlIFJUNTY1OV9BTENfUEdBX0NUUkxfODoKKwljYXNlIFJUNTY1OV9BTENfUEdBX1NUQV8xOgorCWNhc2UgUlQ1NjU5X0FMQ19QR0FfU1RBXzI6CisJY2FzZSBSVDU2NTlfQUxDX1BHQV9TVEFfMzoKKwljYXNlIFJUNTY1OV9EQUNfTF9FUV9QUkVfVk9MOgorCWNhc2UgUlQ1NjU5X0RBQ19SX0VRX1BSRV9WT0w6CisJY2FzZSBSVDU2NTlfREFDX0xfRVFfUE9TVF9WT0w6CisJY2FzZSBSVDU2NTlfREFDX1JfRVFfUE9TVF9WT0w6CisJY2FzZSBSVDU2NTlfREFDX0xfRVFfTFBGMV9BMToKKwljYXNlIFJUNTY1OV9EQUNfTF9FUV9MUEYxX0gwOgorCWNhc2UgUlQ1NjU5X0RBQ19SX0VRX0xQRjFfQTE6CisJY2FzZSBSVDU2NTlfREFDX1JfRVFfTFBGMV9IMDoKKwljYXNlIFJUNTY1OV9EQUNfTF9FUV9CUEYyX0ExOgorCWNhc2UgUlQ1NjU5X0RBQ19MX0VRX0JQRjJfQTI6CisJY2FzZSBSVDU2NTlfREFDX0xfRVFfQlBGMl9IMDoKKwljYXNlIFJUNTY1OV9EQUNfUl9FUV9CUEYyX0ExOgorCWNhc2UgUlQ1NjU5X0RBQ19SX0VRX0JQRjJfQTI6CisJY2FzZSBSVDU2NTlfREFDX1JfRVFfQlBGMl9IMDoKKwljYXNlIFJUNTY1OV9EQUNfTF9FUV9CUEYzX0ExOgorCWNhc2UgUlQ1NjU5X0RBQ19MX0VRX0JQRjNfQTI6CisJY2FzZSBSVDU2NTlfREFDX0xfRVFfQlBGM19IMDoKKwljYXNlIFJUNTY1OV9EQUNfUl9FUV9CUEYzX0ExOgorCWNhc2UgUlQ1NjU5X0RBQ19SX0VRX0JQRjNfQTI6CisJY2FzZSBSVDU2NTlfREFDX1JfRVFfQlBGM19IMDoKKwljYXNlIFJUNTY1OV9EQUNfTF9FUV9CUEY0X0ExOgorCWNhc2UgUlQ1NjU5X0RBQ19MX0VRX0JQRjRfQTI6CisJY2FzZSBSVDU2NTlfREFDX0xfRVFfQlBGNF9IMDoKKwljYXNlIFJUNTY1OV9EQUNfUl9FUV9CUEY0X0ExOgorCWNhc2UgUlQ1NjU5X0RBQ19SX0VRX0JQRjRfQTI6CisJY2FzZSBSVDU2NTlfREFDX1JfRVFfQlBGNF9IMDoKKwljYXNlIFJUNTY1OV9EQUNfTF9FUV9IUEYxX0ExOgorCWNhc2UgUlQ1NjU5X0RBQ19MX0VRX0hQRjFfSDA6CisJY2FzZSBSVDU2NTlfREFDX1JfRVFfSFBGMV9BMToKKwljYXNlIFJUNTY1OV9EQUNfUl9FUV9IUEYxX0gwOgorCWNhc2UgUlQ1NjU5X0RBQ19MX0VRX0hQRjJfQTE6CisJY2FzZSBSVDU2NTlfREFDX0xfRVFfSFBGMl9BMjoKKwljYXNlIFJUNTY1OV9EQUNfTF9FUV9IUEYyX0gwOgorCWNhc2UgUlQ1NjU5X0RBQ19SX0VRX0hQRjJfQTE6CisJY2FzZSBSVDU2NTlfREFDX1JfRVFfSFBGMl9BMjoKKwljYXNlIFJUNTY1OV9EQUNfUl9FUV9IUEYyX0gwOgorCWNhc2UgUlQ1NjU5X0RBQ19MX0JJX0VRX0JQRjFfSDBfMToKKwljYXNlIFJUNTY1OV9EQUNfTF9CSV9FUV9CUEYxX0gwXzI6CisJY2FzZSBSVDU2NTlfREFDX0xfQklfRVFfQlBGMV9CMV8xOgorCWNhc2UgUlQ1NjU5X0RBQ19MX0JJX0VRX0JQRjFfQjFfMjoKKwljYXNlIFJUNTY1OV9EQUNfTF9CSV9FUV9CUEYxX0IyXzE6CisJY2FzZSBSVDU2NTlfREFDX0xfQklfRVFfQlBGMV9CMl8yOgorCWNhc2UgUlQ1NjU5X0RBQ19MX0JJX0VRX0JQRjFfQTFfMToKKwljYXNlIFJUNTY1OV9EQUNfTF9CSV9FUV9CUEYxX0ExXzI6CisJY2FzZSBSVDU2NTlfREFDX0xfQklfRVFfQlBGMV9BMl8xOgorCWNhc2UgUlQ1NjU5X0RBQ19MX0JJX0VRX0JQRjFfQTJfMjoKKwljYXNlIFJUNTY1OV9EQUNfUl9CSV9FUV9CUEYxX0gwXzE6CisJY2FzZSBSVDU2NTlfREFDX1JfQklfRVFfQlBGMV9IMF8yOgorCWNhc2UgUlQ1NjU5X0RBQ19SX0JJX0VRX0JQRjFfQjFfMToKKwljYXNlIFJUNTY1OV9EQUNfUl9CSV9FUV9CUEYxX0IxXzI6CisJY2FzZSBSVDU2NTlfREFDX1JfQklfRVFfQlBGMV9CMl8xOgorCWNhc2UgUlQ1NjU5X0RBQ19SX0JJX0VRX0JQRjFfQjJfMjoKKwljYXNlIFJUNTY1OV9EQUNfUl9CSV9FUV9CUEYxX0ExXzE6CisJY2FzZSBSVDU2NTlfREFDX1JfQklfRVFfQlBGMV9BMV8yOgorCWNhc2UgUlQ1NjU5X0RBQ19SX0JJX0VRX0JQRjFfQTJfMToKKwljYXNlIFJUNTY1OV9EQUNfUl9CSV9FUV9CUEYxX0EyXzI6CisJY2FzZSBSVDU2NTlfQURDX0xfRVFfTFBGMV9BMToKKwljYXNlIFJUNTY1OV9BRENfUl9FUV9MUEYxX0ExOgorCWNhc2UgUlQ1NjU5X0FEQ19MX0VRX0xQRjFfSDA6CisJY2FzZSBSVDU2NTlfQURDX1JfRVFfTFBGMV9IMDoKKwljYXNlIFJUNTY1OV9BRENfTF9FUV9CUEYxX0ExOgorCWNhc2UgUlQ1NjU5X0FEQ19SX0VRX0JQRjFfQTE6CisJY2FzZSBSVDU2NTlfQURDX0xfRVFfQlBGMV9BMjoKKwljYXNlIFJUNTY1OV9BRENfUl9FUV9CUEYxX0EyOgorCWNhc2UgUlQ1NjU5X0FEQ19MX0VRX0JQRjFfSDA6CisJY2FzZSBSVDU2NTlfQURDX1JfRVFfQlBGMV9IMDoKKwljYXNlIFJUNTY1OV9BRENfTF9FUV9CUEYyX0ExOgorCWNhc2UgUlQ1NjU5X0FEQ19SX0VRX0JQRjJfQTE6CisJY2FzZSBSVDU2NTlfQURDX0xfRVFfQlBGMl9BMjoKKwljYXNlIFJUNTY1OV9BRENfUl9FUV9CUEYyX0EyOgorCWNhc2UgUlQ1NjU5X0FEQ19MX0VRX0JQRjJfSDA6CisJY2FzZSBSVDU2NTlfQURDX1JfRVFfQlBGMl9IMDoKKwljYXNlIFJUNTY1OV9BRENfTF9FUV9CUEYzX0ExOgorCWNhc2UgUlQ1NjU5X0FEQ19SX0VRX0JQRjNfQTE6CisJY2FzZSBSVDU2NTlfQURDX0xfRVFfQlBGM19BMjoKKwljYXNlIFJUNTY1OV9BRENfUl9FUV9CUEYzX0EyOgorCWNhc2UgUlQ1NjU5X0FEQ19MX0VRX0JQRjNfSDA6CisJY2FzZSBSVDU2NTlfQURDX1JfRVFfQlBGM19IMDoKKwljYXNlIFJUNTY1OV9BRENfTF9FUV9CUEY0X0ExOgorCWNhc2UgUlQ1NjU5X0FEQ19SX0VRX0JQRjRfQTE6CisJY2FzZSBSVDU2NTlfQURDX0xfRVFfQlBGNF9BMjoKKwljYXNlIFJUNTY1OV9BRENfUl9FUV9CUEY0X0EyOgorCWNhc2UgUlQ1NjU5X0FEQ19MX0VRX0JQRjRfSDA6CisJY2FzZSBSVDU2NTlfQURDX1JfRVFfQlBGNF9IMDoKKwljYXNlIFJUNTY1OV9BRENfTF9FUV9IUEYxX0ExOgorCWNhc2UgUlQ1NjU5X0FEQ19SX0VRX0hQRjFfQTE6CisJY2FzZSBSVDU2NTlfQURDX0xfRVFfSFBGMV9IMDoKKwljYXNlIFJUNTY1OV9BRENfUl9FUV9IUEYxX0gwOgorCWNhc2UgUlQ1NjU5X0FEQ19MX0VRX1BSRV9WT0w6CisJY2FzZSBSVDU2NTlfQURDX1JfRVFfUFJFX1ZPTDoKKwljYXNlIFJUNTY1OV9BRENfTF9FUV9QT1NUX1ZPTDoKKwljYXNlIFJUNTY1OV9BRENfUl9FUV9QT1NUX1ZPTDoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGhwX3ZvbF90bHYsIC0yMzI1LCA3NSwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0X3ZvbF90bHYsIC00NjUwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhY192b2xfdGx2LCAtNjU2MjUsIDM3NSwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5fdm9sX3RsdiwgLTM0NTAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYWRjX3ZvbF90bHYsIC0xNzYyNSwgMzc1LCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShhZGNfYnN0X3RsdiwgMCwgMTIwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5fYnN0X3RsdiwgLTEyMDAsIDc1LCAwKTsKKworLyogSW50ZXJmYWNlIGRhdGEgc2VsZWN0ICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJ0NTY1OV9kYXRhX3NlbGVjdFtdID0geworCSJML1IiLCAiUi9MIiwgIkwvTCIsICJSL1IiCit9OworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0wocnQ1NjU5X2lmMV8wMV9hZGNfZW51bSwKKwlSVDU2NTlfVERNX0NUUkxfMiwgUlQ1NjU5X0RTX0FEQ19TTE9UMDFfU0ZULCBydDU2NTlfZGF0YV9zZWxlY3QpOworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0wocnQ1NjU5X2lmMV8yM19hZGNfZW51bSwKKwlSVDU2NTlfVERNX0NUUkxfMiwgUlQ1NjU5X0RTX0FEQ19TTE9UMjNfU0ZULCBydDU2NTlfZGF0YV9zZWxlY3QpOworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0wocnQ1NjU5X2lmMV80NV9hZGNfZW51bSwKKwlSVDU2NTlfVERNX0NUUkxfMiwgUlQ1NjU5X0RTX0FEQ19TTE9UNDVfU0ZULCBydDU2NTlfZGF0YV9zZWxlY3QpOworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0wocnQ1NjU5X2lmMV82N19hZGNfZW51bSwKKwlSVDU2NTlfVERNX0NUUkxfMiwgUlQ1NjU5X0RTX0FEQ19TTE9UNjdfU0ZULCBydDU2NTlfZGF0YV9zZWxlY3QpOworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0wocnQ1NjU5X2lmMl9kYWNfZW51bSwKKwlSVDU2NTlfRElHX0lORjIzX0RBVEEsIFJUNTY1OV9JRjJfREFDX1NFTF9TRlQsIHJ0NTY1OV9kYXRhX3NlbGVjdCk7CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChydDU2NTlfaWYyX2FkY19lbnVtLAorCVJUNTY1OV9ESUdfSU5GMjNfREFUQSwgUlQ1NjU5X0lGMl9BRENfU0VMX1NGVCwgcnQ1NjU5X2RhdGFfc2VsZWN0KTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKHJ0NTY1OV9pZjNfZGFjX2VudW0sCisJUlQ1NjU5X0RJR19JTkYyM19EQVRBLCBSVDU2NTlfSUYzX0RBQ19TRUxfU0ZULCBydDU2NTlfZGF0YV9zZWxlY3QpOworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0wocnQ1NjU5X2lmM19hZGNfZW51bSwKKwlSVDU2NTlfRElHX0lORjIzX0RBVEEsIFJUNTY1OV9JRjNfQURDX1NFTF9TRlQsIHJ0NTY1OV9kYXRhX3NlbGVjdCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfaWYxXzAxX2FkY19zd2FwX211eCA9CisJU09DX0RBUE1fRU5VTSgiSUYxIDAxIEFEQyBTd2FwIFNvdXJjZSIsIHJ0NTY1OV9pZjFfMDFfYWRjX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X2lmMV8yM19hZGNfc3dhcF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIklGMSAyMyBBREMxIFN3YXAgU291cmNlIiwgcnQ1NjU5X2lmMV8yM19hZGNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfaWYxXzQ1X2FkY19zd2FwX211eCA9CisJU09DX0RBUE1fRU5VTSgiSUYxIDQ1IEFEQzEgU3dhcCBTb3VyY2UiLCBydDU2NTlfaWYxXzQ1X2FkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9pZjFfNjdfYWRjX3N3YXBfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJJRjEgNjcgQURDMSBTd2FwIFNvdXJjZSIsIHJ0NTY1OV9pZjFfNjdfYWRjX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X2lmMl9kYWNfc3dhcF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIklGMiBEQUMgU3dhcCBTb3VyY2UiLCBydDU2NTlfaWYyX2RhY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9pZjJfYWRjX3N3YXBfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJJRjIgQURDIFN3YXAgU291cmNlIiwgcnQ1NjU5X2lmMl9hZGNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfaWYzX2RhY19zd2FwX211eCA9CisJU09DX0RBUE1fRU5VTSgiSUYzIERBQyBTd2FwIFNvdXJjZSIsIHJ0NTY1OV9pZjNfZGFjX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X2lmM19hZGNfc3dhcF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIklGMyBBREMgU3dhcCBTb3VyY2UiLCBydDU2NTlfaWYzX2FkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTlfYXNyY19jbGtfc3JjW10gPSB7CisJImNsa19zeXN5X2Rpdl9vdXQiLCAiY2xrX2kyczFfdHJhY2siLCAiY2xrX2kyczJfdHJhY2siLAorCSJjbGtfaTJzM190cmFjayIsICJjbGtfc3lzMiIsICJjbGtfc3lzMyIKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnQ1NjU5X2FzcmNfY2xrX21hcF92YWx1ZXNbXSA9IHsKKwkwLCAxLCAyLCAzLCA1LCA2LAorfTsKKworc3RhdGljIGNvbnN0IFNPQ19WQUxVRV9FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9kYV9zdG9fYXNyY19lbnVtLCBSVDU2NTlfQVNSQ18yLCBSVDU2NTlfREFfU1RPX1RfU0ZULCAweDcsCisJcnQ1NjU5X2FzcmNfY2xrX3NyYywgcnQ1NjU5X2FzcmNfY2xrX21hcF92YWx1ZXMpOworCitzdGF0aWMgY29uc3QgU09DX1ZBTFVFX0VOVU1fU0lOR0xFX0RFQ0woCisJcnQ1NjU5X2RhX21vbm9sX2FzcmNfZW51bSwgUlQ1NjU5X0FTUkNfMiwgUlQ1NjU5X0RBX01PTk9fTF9UX1NGVCwgMHg3LAorCXJ0NTY1OV9hc3JjX2Nsa19zcmMsIHJ0NTY1OV9hc3JjX2Nsa19tYXBfdmFsdWVzKTsKKworc3RhdGljIGNvbnN0IFNPQ19WQUxVRV9FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9kYV9tb25vcl9hc3JjX2VudW0sIFJUNTY1OV9BU1JDXzIsIFJUNTY1OV9EQV9NT05PX1JfVF9TRlQsIDB4NywKKwlydDU2NTlfYXNyY19jbGtfc3JjLCBydDU2NTlfYXNyY19jbGtfbWFwX3ZhbHVlcyk7CisKK3N0YXRpYyBjb25zdCBTT0NfVkFMVUVfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfYWRfc3RvMV9hc3JjX2VudW0sIFJUNTY1OV9BU1JDXzIsIFJUNTY1OV9BRF9TVE8xX1RfU0ZULCAweDcsCisJcnQ1NjU5X2FzcmNfY2xrX3NyYywgcnQ1NjU5X2FzcmNfY2xrX21hcF92YWx1ZXMpOworCitzdGF0aWMgY29uc3QgU09DX1ZBTFVFX0VOVU1fU0lOR0xFX0RFQ0woCisJcnQ1NjU5X2FkX3N0bzJfYXNyY19lbnVtLCBSVDU2NTlfQVNSQ18zLCBSVDU2NTlfQURfU1RPMl9UX1NGVCwgMHg3LAorCXJ0NTY1OV9hc3JjX2Nsa19zcmMsIHJ0NTY1OV9hc3JjX2Nsa19tYXBfdmFsdWVzKTsKKworc3RhdGljIGNvbnN0IFNPQ19WQUxVRV9FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9hZF9tb25vbF9hc3JjX2VudW0sIFJUNTY1OV9BU1JDXzMsIFJUNTY1OV9BRF9NT05PX0xfVF9TRlQsIDB4NywKKwlydDU2NTlfYXNyY19jbGtfc3JjLCBydDU2NTlfYXNyY19jbGtfbWFwX3ZhbHVlcyk7CisKK3N0YXRpYyBjb25zdCBTT0NfVkFMVUVfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfYWRfbW9ub3JfYXNyY19lbnVtLCBSVDU2NTlfQVNSQ18zLCBSVDU2NTlfQURfTU9OT19SX1RfU0ZULCAweDcsCisJcnQ1NjU5X2FzcmNfY2xrX3NyYywgcnQ1NjU5X2FzcmNfY2xrX21hcF92YWx1ZXMpOworCitzdGF0aWMgaW50IHJ0NTY1OV9ocF92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2tjb250cm9sX2NvZGVjKGtjb250cm9sKTsKKwlpbnQgcmV0ID0gc25kX3NvY19wdXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKKworCWlmIChzbmRfc29jX3JlYWQoY29kZWMsIFJUNTY1OV9TVE9fTkcyX0NUUkxfMSkgJiBSVDU2NTlfTkcyX0VOKSB7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9TVE9fTkcyX0NUUkxfMSwKKwkJCVJUNTY1OV9ORzJfRU5fTUFTSywgUlQ1NjU5X05HMl9ESVMpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfU1RPX05HMl9DVFJMXzEsCisJCQlSVDU2NTlfTkcyX0VOX01BU0ssIFJUNTY1OV9ORzJfRU4pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJ0NTY1OV9lbmFibGVfcHVzaF9idXR0b25faXJxKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwlib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSBzbmRfc29jX2NvZGVjX2dldF9kYXBtKGNvZGVjKTsKKworCWlmIChlbmFibGUpIHsKKwkJc25kX3NvY193cml0ZShjb2RlYywgUlQ1NjU5XzRCVE5fSUxfQ01EXzEsIDB4MDAwYik7CisKKwkJLyogTUlDQklBUzEgYW5kIE1pYyBEZXQgUG93ZXIgZm9yIGJ1dHRvbiBkZXRlY3QqLworCQlzbmRfc29jX2RhcG1fZm9yY2VfZW5hYmxlX3BpbihkYXBtLCAiTUlDQklBUzEiKTsKKwkJc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4oZGFwbSwKKwkJCSJNaWMgRGV0IFBvd2VyIik7CisJCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9QV1JfQU5MR18yLAorCQkJUlQ1NjU5X1BXUl9NQjEsIFJUNTY1OV9QV1JfTUIxKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X1BXUl9WT0wsCisJCQlSVDU2NTlfUFdSX01JQ19ERVQsIFJUNTY1OV9QV1JfTUlDX0RFVCk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0lSUV9DVFJMXzIsCisJCQkJUlQ1NjU5X0lMX0lSUV9NQVNLLCBSVDU2NTlfSUxfSVJRX0VOKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5XzRCVE5fSUxfQ01EXzIsCisJCQkJUlQ1NjU5XzRCVE5fSUxfTUFTSywgUlQ1NjU5XzRCVE5fSUxfRU4pOworCX0gZWxzZSB7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV80QlROX0lMX0NNRF8yLAorCQkJCVJUNTY1OV80QlROX0lMX01BU0ssIFJUNTY1OV80QlROX0lMX0RJUyk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9JUlFfQ1RSTF8yLAorCQkJCVJUNTY1OV9JTF9JUlFfTUFTSywgUlQ1NjU5X0lMX0lSUV9ESVMpOworCQkvKiBNSUNCSUFTMSBhbmQgTWljIERldCBQb3dlciBmb3IgYnV0dG9uIGRldGVjdCovCisJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTUlDQklBUzEiKTsKKwkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJNaWMgRGV0IFBvd2VyIik7CisJCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOworCX0KK30KKworLyoqCisgKiBydDU2NTlfaGVhZHNldF9kZXRlY3QgLSBEZXRlY3QgaGVhZHNldC4KKyAqIEBjb2RlYzogU29DIGF1ZGlvIGNvZGVjIGRldmljZS4KKyAqIEBqYWNrX2luc2VydDogSmFjayBpbnNlcnQgb3Igbm90LgorICoKKyAqIERldGVjdCB3aGV0aGVyIGlzIGhlYWRzZXQgb3Igbm90IHdoZW4gamFjayBpbnNlcnRlZC4KKyAqCisgKiBSZXR1cm5zIGRldGVjdCBzdGF0dXMuCisgKi8KKworc3RhdGljIGludCBydDU2NTlfaGVhZHNldF9kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgamFja19pbnNlcnQpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gc25kX3NvY19jb2RlY19nZXRfZGFwbShjb2RlYyk7CisJaW50IHZhbCwgaSA9IDAsIHNsZWVwX3RpbWVbNV0gPSB7MzAwLCAxNTAsIDEwMCwgNTAsIDMwfTsKKwlpbnQgcmVnXzYzOworCisJc3RydWN0IHJ0NTY1OV9wcml2ICpydDU2NTkgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCWlmIChqYWNrX2luc2VydCkgeworCQlzbmRfc29jX2RhcG1fZm9yY2VfZW5hYmxlX3BpbihkYXBtLAorCQkJIk1pYyBEZXQgUG93ZXIiKTsKKwkJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisJCXJlZ182MyA9IHNuZF9zb2NfcmVhZChjb2RlYywgUlQ1NjU5X1BXUl9BTkxHXzEpOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9QV1JfQU5MR18xLAorCQkJUlQ1NjU5X1BXUl9WUkVGMiB8IFJUNTY1OV9QV1JfTUIsCisJCQlSVDU2NTlfUFdSX1ZSRUYyIHwgUlQ1NjU5X1BXUl9NQik7CisJCW1zbGVlcCgyMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9QV1JfQU5MR18xLAorCQkJUlQ1NjU5X1BXUl9GVjIsIFJUNTY1OV9QV1JfRlYyKTsKKworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NTlfRUpEX0NUUkxfMiwgMHg0MTYwKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0VKRF9DVFJMXzEsCisJCQkweDIwLCAweDApOworCQltc2xlZXAoMjApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfRUpEX0NUUkxfMSwKKwkJCTB4MjAsIDB4MjApOworCisJCXdoaWxlIChpIDwgNSkgeworCQkJbXNsZWVwKHNsZWVwX3RpbWVbaV0pOworCQkJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCBSVDU2NTlfRUpEX0NUUkxfMikgJiAweDAwMDM7CisJCQlpKys7CisJCQlpZiAodmFsID09IDB4MSB8fCB2YWwgPT0gMHgyIHx8IHZhbCA9PSAweDMpCisJCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKHZhbCkgeworCQljYXNlIDE6CisJCQlydDU2NTktPmphY2tfdHlwZSA9IFNORF9KQUNLX0hFQURTRVQ7CisJCQlydDU2NTlfZW5hYmxlX3B1c2hfYnV0dG9uX2lycShjb2RlYywgdHJ1ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFJUNTY1OV9QV1JfQU5MR18xLCByZWdfNjMpOworCQkJcnQ1NjU5LT5qYWNrX3R5cGUgPSBTTkRfSkFDS19IRUFEUEhPTkU7CisJCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIk1pYyBEZXQgUG93ZXIiKTsKKwkJCXNuZF9zb2NfZGFwbV9zeW5jKGRhcG0pOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oZGFwbSwgIk1pYyBEZXQgUG93ZXIiKTsKKwkJc25kX3NvY19kYXBtX3N5bmMoZGFwbSk7CisJCWlmIChydDU2NTktPmphY2tfdHlwZSA9PSBTTkRfSkFDS19IRUFEU0VUKQorCQkJcnQ1NjU5X2VuYWJsZV9wdXNoX2J1dHRvbl9pcnEoY29kZWMsIGZhbHNlKTsKKwkJcnQ1NjU5LT5qYWNrX3R5cGUgPSAwOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgImphY2tfdHlwZSA9ICVkXG4iLCBydDU2NTktPmphY2tfdHlwZSk7CisJcmV0dXJuIHJ0NTY1OS0+amFja190eXBlOworfQorCitzdGF0aWMgaW50IHJ0NTY1OV9idXR0b25fZGV0ZWN0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgYnRuX3R5cGUsIHZhbDsKKworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgUlQ1NjU5XzRCVE5fSUxfQ01EXzEpOworCWJ0bl90eXBlID0gdmFsICYgMHhmZmYwOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFJUNTY1OV80QlROX0lMX0NNRF8xLCB2YWwpOworCisJcmV0dXJuIGJ0bl90eXBlOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcnQ1NjU5X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBydDU2NTlfcHJpdiAqcnQ1NjU5ID0gZGF0YTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLAorCQkJICAgJnJ0NTY1OS0+amFja19kZXRlY3Rfd29yaywgbXNlY3NfdG9famlmZmllcygyNTApKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IHJ0NTY1OV9zZXRfamFja19kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCXN0cnVjdCBzbmRfc29jX2phY2sgKmhzX2phY2spCit7CisJc3RydWN0IHJ0NTY1OV9wcml2ICpydDU2NTkgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXJ0NTY1OS0+aHNfamFjayA9IGhzX2phY2s7CisKKwlydDU2NTlfaXJxKDAsIHJ0NTY1OSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0NTY1OV9zZXRfamFja19kZXRlY3QpOworCitzdGF0aWMgdm9pZCBydDU2NTlfamFja19kZXRlY3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJ0NTY1OV9wcml2ICpydDU2NTkgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0NTY1OV9wcml2LCBqYWNrX2RldGVjdF93b3JrLndvcmspOworCWludCB2YWwsIGJ0bl90eXBlLCByZXBvcnQgPSAwOworCisJaWYgKCFydDU2NTktPmNvZGVjKQorCQlyZXR1cm47CisKKwl2YWwgPSBzbmRfc29jX3JlYWQocnQ1NjU5LT5jb2RlYywgUlQ1NjU5X0lOVF9TVF8xKSAmIDB4MDA4MDsKKwlpZiAoIXZhbCkgeworCQkvKiBqYWNrIGluICovCisJCWlmIChydDU2NTktPmphY2tfdHlwZSA9PSAwKSB7CisJCQkvKiBqYWNrIHdhcyBvdXQsIHJlcG9ydCBqYWNrIHR5cGUgKi8KKwkJCXJlcG9ydCA9IHJ0NTY1OV9oZWFkc2V0X2RldGVjdChydDU2NTktPmNvZGVjLCAxKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGphY2sgaXMgYWxyZWFkeSBpbiwgcmVwb3J0IGJ1dHRvbiBldmVudCAqLworCQkJcmVwb3J0ID0gU05EX0pBQ0tfSEVBRFNFVDsKKwkJCWJ0bl90eXBlID0gcnQ1NjU5X2J1dHRvbl9kZXRlY3QocnQ1NjU5LT5jb2RlYyk7CisJCQkvKioKKwkJCSAqIHJ0NTY1OSBjYW4gcmVwb3J0IHRocmVlIGtpbmRzIG9mIGJ1dHRvbiBiZWhhdmlvciwKKwkJCSAqIG9uZSBjbGljaywgZG91YmxlIGNsaWNrIGFuZCBob2xkLiBIb3dldmVyLAorCQkJICogY3VycmVudGx5IHdlIHdpbGwgcmVwb3J0IGJ1dHRvbiBwcmVzc2VkL3JlbGVhc2VkCisJCQkgKiBldmVudC4gU28gYWxsIHRoZSB0aHJlZSBidXR0b24gYmVoYXZpb3JzIGFyZQorCQkJICogdHJlYXRlZCBhcyBidXR0b24gcHJlc3NlZC4KKwkJCSAqLworCQkJc3dpdGNoIChidG5fdHlwZSkgeworCQkJY2FzZSAweDgwMDA6CisJCQljYXNlIDB4NDAwMDoKKwkJCWNhc2UgMHgyMDAwOgorCQkJCXJlcG9ydCB8PSBTTkRfSkFDS19CVE5fMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgxMDAwOgorCQkJY2FzZSAweDA4MDA6CisJCQljYXNlIDB4MDQwMDoKKwkJCQlyZXBvcnQgfD0gU05EX0pBQ0tfQlROXzE7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDIwMDoKKwkJCWNhc2UgMHgwMTAwOgorCQkJY2FzZSAweDAwODA6CisJCQkJcmVwb3J0IHw9IFNORF9KQUNLX0JUTl8yOworCQkJCWJyZWFrOworCQkJY2FzZSAweDAwNDA6CisJCQljYXNlIDB4MDAyMDoKKwkJCWNhc2UgMHgwMDEwOgorCQkJCXJlcG9ydCB8PSBTTkRfSkFDS19CVE5fMzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgwMDAwOiAvKiB1bnByZXNzZWQgKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnRuX3R5cGUgPSAwOworCQkJCWRldl9lcnIocnQ1NjU5LT5jb2RlYy0+ZGV2LAorCQkJCQkiVW5leHBlY3RlZCBidXR0b24gY29kZSAweCUwNHhcbiIsCisJCQkJCWJ0bl90eXBlKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogYnV0dG9uIHJlbGVhc2Ugb3Igc3B1cmlvdXMgaW50ZXJycHV0Ki8KKwkJCWlmIChidG5fdHlwZSA9PSAwKQorCQkJCXJlcG9ydCA9ICBydDU2NTktPmphY2tfdHlwZTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGphY2sgb3V0ICovCisJCXJlcG9ydCA9IHJ0NTY1OV9oZWFkc2V0X2RldGVjdChydDU2NTktPmNvZGVjLCAwKTsKKwl9CisKKwlzbmRfc29jX2phY2tfcmVwb3J0KHJ0NTY1OS0+aHNfamFjaywgcmVwb3J0LCBTTkRfSkFDS19IRUFEU0VUIHwKKwkJCSAgICBTTkRfSkFDS19CVE5fMCB8IFNORF9KQUNLX0JUTl8xIHwKKwkJCSAgICBTTkRfSkFDS19CVE5fMiB8IFNORF9KQUNLX0JUTl8zKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9zbmRfY29udHJvbHNbXSA9IHsKKwkvKiBTcGVha2VyIE91dHB1dCBWb2x1bWUgKi8KKwlTT0NfRE9VQkxFX1RMVigiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCBSVDU2NTlfU1BPX1ZPTCwKKwkJUlQ1NjU5X0xfVk9MX1NGVCwgUlQ1NjU5X1JfVk9MX1NGVCwgMzksIDEsIG91dF92b2xfdGx2KSwKKworCS8qIEhlYWRwaG9uZSBPdXRwdXQgVm9sdW1lICovCisJU09DX0RPVUJMRV9SX0VYVF9UTFYoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCBSVDU2NTlfSFBMX0dBSU4sCisJCVJUNTY1OV9IUFJfR0FJTiwgUlQ1NjU5X0dfSFBfU0ZULCAzMSwgMSwgc25kX3NvY19nZXRfdm9sc3csCisJCXJ0NTY1OV9ocF92b2xfcHV0LCBocF92b2xfdGx2KSwKKworCS8qIE1vbm8gT3V0cHV0IFZvbHVtZSAqLworCVNPQ19TSU5HTEVfVExWKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIFJUNTY1OV9NT05PX09VVCwKKwkJUlQ1NjU5X0xfVk9MX1NGVCwgMzksIDEsIG91dF92b2xfdGx2KSwKKworCS8qIE91dHB1dCBWb2x1bWUgKi8KKwlTT0NfRE9VQkxFX1RMVigiT1VUIFBsYXliYWNrIFZvbHVtZSIsIFJUNTY1OV9MT1VULAorCQlSVDU2NTlfTF9WT0xfU0ZULCBSVDU2NTlfUl9WT0xfU0ZULCAzOSwgMSwgb3V0X3ZvbF90bHYpLAorCisJLyogREFDIERpZ2l0YWwgVm9sdW1lICovCisJU09DX0RPVUJMRV9UTFYoIkRBQzEgUGxheWJhY2sgVm9sdW1lIiwgUlQ1NjU5X0RBQzFfRElHX1ZPTCwKKwkJUlQ1NjU5X0xfVk9MX1NGVCwgUlQ1NjU5X1JfVk9MX1NGVCwgMTc1LCAwLCBkYWNfdm9sX3RsdiksCisJU09DX0RPVUJMRSgiREFDMSBQbGF5YmFjayBTd2l0Y2giLCBSVDU2NTlfQURfREFfTUlYRVIsCisJCVJUNTY1OV9NX0RBQzFfTF9TRlQsIFJUNTY1OV9NX0RBQzFfUl9TRlQsIDEsIDEpLAorCisJU09DX0RPVUJMRV9UTFYoIkRBQzIgUGxheWJhY2sgVm9sdW1lIiwgUlQ1NjU5X0RBQzJfRElHX1ZPTCwKKwkJUlQ1NjU5X0xfVk9MX1NGVCwgUlQ1NjU5X1JfVk9MX1NGVCwgMTc1LCAwLCBkYWNfdm9sX3RsdiksCisJU09DX0RPVUJMRSgiREFDMiBQbGF5YmFjayBTd2l0Y2giLCBSVDU2NTlfREFDX0NUUkwsCisJCVJUNTY1OV9NX0RBQzJfTF9WT0xfU0ZULCBSVDU2NTlfTV9EQUMyX1JfVk9MX1NGVCwgMSwgMSksCisKKwkvKiBJTjEvSU4yL0lOMy9JTjQgVm9sdW1lICovCisJU09DX1NJTkdMRV9UTFYoIklOMSBCb29zdCBWb2x1bWUiLCBSVDU2NTlfSU4xX0lOMiwKKwkJUlQ1NjU5X0JTVDFfU0ZULCA2OSwgMCwgaW5fYnN0X3RsdiksCisJU09DX1NJTkdMRV9UTFYoIklOMiBCb29zdCBWb2x1bWUiLCBSVDU2NTlfSU4xX0lOMiwKKwkJUlQ1NjU5X0JTVDJfU0ZULCA2OSwgMCwgaW5fYnN0X3RsdiksCisJU09DX1NJTkdMRV9UTFYoIklOMyBCb29zdCBWb2x1bWUiLCBSVDU2NTlfSU4zX0lONCwKKwkJUlQ1NjU5X0JTVDNfU0ZULCA2OSwgMCwgaW5fYnN0X3RsdiksCisJU09DX1NJTkdMRV9UTFYoIklONCBCb29zdCBWb2x1bWUiLCBSVDU2NTlfSU4zX0lONCwKKwkJUlQ1NjU5X0JTVDRfU0ZULCA2OSwgMCwgaW5fYnN0X3RsdiksCisKKwkvKiBJTkwvSU5SIFZvbHVtZSBDb250cm9sICovCisJU09DX0RPVUJMRV9UTFYoIklOIENhcHR1cmUgVm9sdW1lIiwgUlQ1NjU5X0lOTDFfSU5SMV9WT0wsCisJCVJUNTY1OV9JTkxfVk9MX1NGVCwgUlQ1NjU5X0lOUl9WT0xfU0ZULCAzMSwgMSwgaW5fdm9sX3RsdiksCisKKwkvKiBBREMgRGlnaXRhbCBWb2x1bWUgQ29udHJvbCAqLworCVNPQ19ET1VCTEUoIlNUTzEgQURDIENhcHR1cmUgU3dpdGNoIiwgUlQ1NjU5X1NUTzFfQURDX0RJR19WT0wsCisJCVJUNTY1OV9MX01VVEVfU0ZULCBSVDU2NTlfUl9NVVRFX1NGVCwgMSwgMSksCisJU09DX0RPVUJMRV9UTFYoIlNUTzEgQURDIENhcHR1cmUgVm9sdW1lIiwgUlQ1NjU5X1NUTzFfQURDX0RJR19WT0wsCisJCVJUNTY1OV9MX1ZPTF9TRlQsIFJUNTY1OV9SX1ZPTF9TRlQsIDEyNywgMCwgYWRjX3ZvbF90bHYpLAorCVNPQ19ET1VCTEUoIk1vbm8gQURDIENhcHR1cmUgU3dpdGNoIiwgUlQ1NjU5X01PTk9fQURDX0RJR19WT0wsCisJCVJUNTY1OV9MX01VVEVfU0ZULCBSVDU2NTlfUl9NVVRFX1NGVCwgMSwgMSksCisJU09DX0RPVUJMRV9UTFYoIk1vbm8gQURDIENhcHR1cmUgVm9sdW1lIiwgUlQ1NjU5X01PTk9fQURDX0RJR19WT0wsCisJCVJUNTY1OV9MX1ZPTF9TRlQsIFJUNTY1OV9SX1ZPTF9TRlQsIDEyNywgMCwgYWRjX3ZvbF90bHYpLAorCVNPQ19ET1VCTEUoIlNUTzIgQURDIENhcHR1cmUgU3dpdGNoIiwgUlQ1NjU5X1NUTzJfQURDX0RJR19WT0wsCisJCVJUNTY1OV9MX01VVEVfU0ZULCBSVDU2NTlfUl9NVVRFX1NGVCwgMSwgMSksCisJU09DX0RPVUJMRV9UTFYoIlNUTzIgQURDIENhcHR1cmUgVm9sdW1lIiwgUlQ1NjU5X1NUTzJfQURDX0RJR19WT0wsCisJCVJUNTY1OV9MX1ZPTF9TRlQsIFJUNTY1OV9SX1ZPTF9TRlQsIDEyNywgMCwgYWRjX3ZvbF90bHYpLAorCisJLyogQURDIEJvb3N0IFZvbHVtZSBDb250cm9sICovCisJU09DX0RPVUJMRV9UTFYoIlNUTzEgQURDIEJvb3N0IEdhaW4gVm9sdW1lIiwgUlQ1NjU5X1NUTzFfQk9PU1QsCisJCVJUNTY1OV9TVE8xX0FEQ19MX0JTVF9TRlQsIFJUNTY1OV9TVE8xX0FEQ19SX0JTVF9TRlQsCisJCTMsIDAsIGFkY19ic3RfdGx2KSwKKworCVNPQ19ET1VCTEVfVExWKCJNb25vIEFEQyBCb29zdCBHYWluIFZvbHVtZSIsIFJUNTY1OV9NT05PX0JPT1NULAorCQlSVDU2NTlfTU9OT19BRENfTF9CU1RfU0ZULCBSVDU2NTlfTU9OT19BRENfUl9CU1RfU0ZULAorCQkzLCAwLCBhZGNfYnN0X3RsdiksCisKKwlTT0NfRE9VQkxFX1RMVigiU1RPMiBBREMgQm9vc3QgR2FpbiBWb2x1bWUiLCBSVDU2NTlfU1RPMl9CT09TVCwKKwkJUlQ1NjU5X1NUTzJfQURDX0xfQlNUX1NGVCwgUlQ1NjU5X1NUTzJfQURDX1JfQlNUX1NGVCwKKwkJMywgMCwgYWRjX2JzdF90bHYpLAorCisJU09DX1NJTkdMRSgiREFDIElGMSBEQUMxIEwgRGF0YSBTd2l0Y2giLCBSVDU2NTlfVERNX0NUUkxfNCwgMTIsIDcsIDApLAorCVNPQ19TSU5HTEUoIkRBQyBJRjEgREFDMSBSIERhdGEgU3dpdGNoIiwgUlQ1NjU5X1RETV9DVFJMXzQsIDgsIDcsIDApLAorCVNPQ19TSU5HTEUoIkRBQyBJRjEgREFDMiBMIERhdGEgU3dpdGNoIiwgUlQ1NjU5X1RETV9DVFJMXzQsIDQsIDcsIDApLAorCVNPQ19TSU5HTEUoIkRBQyBJRjEgREFDMiBSIERhdGEgU3dpdGNoIiwgUlQ1NjU5X1RETV9DVFJMXzQsIDAsIDcsIDApLAorfTsKKworLyoqCisgKiBzZXRfZG1pY19jbGsgLSBTZXQgcGFyYW1ldGVyIG9mIGRtaWMuCisgKgorICogQHc6IERBUE0gd2lkZ2V0LgorICogQGtjb250cm9sOiBUaGUga2NvbnRyb2wgb2YgdGhpcyB3aWRnZXQuCisgKiBAZXZlbnQ6IEV2ZW50IGlkLgorICoKKyAqIENob29zZSBkbWljIGNsb2NrIGJldHdlZW4gMU1IeiBhbmQgM01Iei4KKyAqIEl0IGlzIGJldHRlciBmb3IgY2xvY2sgdG8gYXBwcm94aW1hdGUgM01Iei4KKyAqLworc3RhdGljIGludCBzZXRfZG1pY19jbGsoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisJc3RydWN0IHJ0NTY1OV9wcml2ICpydDU2NTkgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgcGQsIGlkeCA9IC1FSU5WQUw7CisKKwlwZCA9IHJsNjIzMV9nZXRfcHJlX2RpdihydDU2NTktPnJlZ21hcCwKKwkJUlQ1NjU5X0FEREFfQ0xLXzEsIFJUNTY1OV9JMlNfUEQxX1NGVCk7CisJaWR4ID0gcmw2MjMxX2NhbGNfZG1pY19jbGsocnQ1NjU5LT5zeXNjbGsgLyBwZCk7CisKKwlpZiAoaWR4IDwgMCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBETUlDIGNsb2NrXG4iKTsKKwllbHNlIHsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0RNSUNfQ1RSTF8xLAorCQkJUlQ1NjU5X0RNSUNfQ0xLX01BU0ssIGlkeCA8PCBSVDU2NTlfRE1JQ19DTEtfU0ZUKTsKKwl9CisJcmV0dXJuIGlkeDsKK30KKworc3RhdGljIGludCBzZXRfYWRjX2NsayhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0NIT1BfQURDLAorCQkJUlQ1NjU5X0NLWEVOX0FEQ0NfTUFTSyB8IFJUNTY1OV9DS0dFTl9BRENDX01BU0ssCisJCQlSVDU2NTlfQ0tYRU5fQURDQ19NQVNLIHwgUlQ1NjU5X0NLR0VOX0FEQ0NfTUFTSyk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0NIT1BfQURDLAorCQkJUlQ1NjU5X0NLWEVOX0FEQ0NfTUFTSyB8IFJUNTY1OV9DS0dFTl9BRENDX01BU0ssIDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgcnQ1NjU5X2NoYXJnZV9wdW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCS8qIERlcG9wICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFJUNTY1OV9ERVBPUF8xLCAweDAwMDkpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJc25kX3NvY193cml0ZShjb2RlYywgUlQ1NjU5X0hQX0NIQVJHRV9QVU1QXzEsIDB4MGMxNik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX3N5c19jbGtfZnJvbV9wbGwoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisKKwl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFJUNTY1OV9HTEJfQ0xLKTsKKwl2YWwgJj0gUlQ1NjU5X1NDTEtfU1JDX01BU0s7CisJaWYgKHZhbCA9PSBSVDU2NTlfU0NMS19TUkNfUExMMSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc191c2luZ19hc3JjKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQoreworCXVuc2lnbmVkIGludCByZWcsIHNoaWZ0LCB2YWw7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCisJc3dpdGNoICh3LT5zaGlmdCkgeworCWNhc2UgUlQ1NjU5X0FEQ19NT05PX1JfQVNSQ19TRlQ6CisJCXJlZyA9IFJUNTY1OV9BU1JDXzM7CisJCXNoaWZ0ID0gUlQ1NjU5X0FEX01PTk9fUl9UX1NGVDsKKwkJYnJlYWs7CisJY2FzZSBSVDU2NTlfQURDX01PTk9fTF9BU1JDX1NGVDoKKwkJcmVnID0gUlQ1NjU5X0FTUkNfMzsKKwkJc2hpZnQgPSBSVDU2NTlfQURfTU9OT19MX1RfU0ZUOworCQlicmVhazsKKwljYXNlIFJUNTY1OV9BRENfU1RPMV9BU1JDX1NGVDoKKwkJcmVnID0gUlQ1NjU5X0FTUkNfMjsKKwkJc2hpZnQgPSBSVDU2NTlfQURfU1RPMV9UX1NGVDsKKwkJYnJlYWs7CisJY2FzZSBSVDU2NTlfREFDX01PTk9fUl9BU1JDX1NGVDoKKwkJcmVnID0gUlQ1NjU5X0FTUkNfMjsKKwkJc2hpZnQgPSBSVDU2NTlfREFfTU9OT19SX1RfU0ZUOworCQlicmVhazsKKwljYXNlIFJUNTY1OV9EQUNfTU9OT19MX0FTUkNfU0ZUOgorCQlyZWcgPSBSVDU2NTlfQVNSQ18yOworCQlzaGlmdCA9IFJUNTY1OV9EQV9NT05PX0xfVF9TRlQ7CisJCWJyZWFrOworCWNhc2UgUlQ1NjU5X0RBQ19TVE9fQVNSQ19TRlQ6CisJCXJlZyA9IFJUNTY1OV9BU1JDXzI7CisJCXNoaWZ0ID0gUlQ1NjU5X0RBX1NUT19UX1NGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJdmFsID0gKHNuZF9zb2NfcmVhZChjb2RlYywgcmVnKSA+PiBzaGlmdCkgJiAweGY7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJLyogSTJTX1ByZV9EaXYxIHNob3VsZCBiZSAxIGluIGFzcmMgbW9kZSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfQUREQV9DTEtfMSwKKwkJCVJUNTY1OV9JMlNfUEQxX01BU0ssIFJUNTY1OV9JMlNfUEQxXzIpOworCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKK30KKworLyogRGlnaXRhbCBNaXhlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9zdG8xX2FkY19sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQURDMSBTd2l0Y2giLCBSVDU2NTlfU1RPMV9BRENfTUlYRVIsCisJCQlSVDU2NTlfTV9TVE8xX0FEQ19MMV9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQURDMiBTd2l0Y2giLCBSVDU2NTlfU1RPMV9BRENfTUlYRVIsCisJCQlSVDU2NTlfTV9TVE8xX0FEQ19MMl9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9zdG8xX2FkY19yX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQURDMSBTd2l0Y2giLCBSVDU2NTlfU1RPMV9BRENfTUlYRVIsCisJCQlSVDU2NTlfTV9TVE8xX0FEQ19SMV9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQURDMiBTd2l0Y2giLCBSVDU2NTlfU1RPMV9BRENfTUlYRVIsCisJCQlSVDU2NTlfTV9TVE8xX0FEQ19SMl9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9tb25vX2FkY19sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQURDMSBTd2l0Y2giLCBSVDU2NTlfTU9OT19BRENfTUlYRVIsCisJCQlSVDU2NTlfTV9NT05PX0FEQ19MMV9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQURDMiBTd2l0Y2giLCBSVDU2NTlfTU9OT19BRENfTUlYRVIsCisJCQlSVDU2NTlfTV9NT05PX0FEQ19MMl9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9tb25vX2FkY19yX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQURDMSBTd2l0Y2giLCBSVDU2NTlfTU9OT19BRENfTUlYRVIsCisJCQlSVDU2NTlfTV9NT05PX0FEQ19SMV9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQURDMiBTd2l0Y2giLCBSVDU2NTlfTU9OT19BRENfTUlYRVIsCisJCQlSVDU2NTlfTV9NT05PX0FEQ19SMl9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9kYWNfbF9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIlN0ZXJlbyBBREMgU3dpdGNoIiwgUlQ1NjU5X0FEX0RBX01JWEVSLAorCQkJUlQ1NjU5X01fQURDTUlYX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkRBQzEgU3dpdGNoIiwgUlQ1NjU5X0FEX0RBX01JWEVSLAorCQkJUlQ1NjU5X01fREFDMV9MX1NGVCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X2RhY19yX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiU3RlcmVvIEFEQyBTd2l0Y2giLCBSVDU2NTlfQURfREFfTUlYRVIsCisJCQlSVDU2NTlfTV9BRENNSVhfUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiREFDMSBTd2l0Y2giLCBSVDU2NTlfQURfREFfTUlYRVIsCisJCQlSVDU2NTlfTV9EQUMxX1JfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfc3RvX2RhY19sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiREFDIEwxIFN3aXRjaCIsIFJUNTY1OV9TVE9fREFDX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX0wxX1NUT19MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJEQUMgUjEgU3dpdGNoIiwgUlQ1NjU5X1NUT19EQUNfTUlYRVIsCisJCQlSVDU2NTlfTV9EQUNfUjFfU1RPX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBMMiBTd2l0Y2giLCBSVDU2NTlfU1RPX0RBQ19NSVhFUiwKKwkJCVJUNTY1OV9NX0RBQ19MMl9TVE9fTF9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiREFDIFIyIFN3aXRjaCIsIFJUNTY1OV9TVE9fREFDX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX1IyX1NUT19MX1NGVCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X3N0b19kYWNfcl9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBMMSBTd2l0Y2giLCBSVDU2NTlfU1RPX0RBQ19NSVhFUiwKKwkJCVJUNTY1OV9NX0RBQ19MMV9TVE9fUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiREFDIFIxIFN3aXRjaCIsIFJUNTY1OV9TVE9fREFDX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX1IxX1NUT19SX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJEQUMgTDIgU3dpdGNoIiwgUlQ1NjU5X1NUT19EQUNfTUlYRVIsCisJCQlSVDU2NTlfTV9EQUNfTDJfU1RPX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBSMiBTd2l0Y2giLCBSVDU2NTlfU1RPX0RBQ19NSVhFUiwKKwkJCVJUNTY1OV9NX0RBQ19SMl9TVE9fUl9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9tb25vX2RhY19sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiREFDIEwxIFN3aXRjaCIsIFJUNTY1OV9NT05PX0RBQ19NSVhFUiwKKwkJCVJUNTY1OV9NX0RBQ19MMV9NT05PX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBSMSBTd2l0Y2giLCBSVDU2NTlfTU9OT19EQUNfTUlYRVIsCisJCQlSVDU2NTlfTV9EQUNfUjFfTU9OT19MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJEQUMgTDIgU3dpdGNoIiwgUlQ1NjU5X01PTk9fREFDX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX0wyX01PTk9fTF9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiREFDIFIyIFN3aXRjaCIsIFJUNTY1OV9NT05PX0RBQ19NSVhFUiwKKwkJCVJUNTY1OV9NX0RBQ19SMl9NT05PX0xfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfbW9ub19kYWNfcl9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBMMSBTd2l0Y2giLCBSVDU2NTlfTU9OT19EQUNfTUlYRVIsCisJCQlSVDU2NTlfTV9EQUNfTDFfTU9OT19SX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJEQUMgUjEgU3dpdGNoIiwgUlQ1NjU5X01PTk9fREFDX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX1IxX01PTk9fUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiREFDIEwyIFN3aXRjaCIsIFJUNTY1OV9NT05PX0RBQ19NSVhFUiwKKwkJCVJUNTY1OV9NX0RBQ19MMl9NT05PX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBSMiBTd2l0Y2giLCBSVDU2NTlfTU9OT19EQUNfTUlYRVIsCisJCQlSVDU2NTlfTV9EQUNfUjJfTU9OT19SX1NGVCwgMSwgMSksCit9OworCisvKiBBbmFsb2cgSW5wdXQgTWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfcmVjMV9sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiU1BLVk9MTCBTd2l0Y2giLCBSVDU2NTlfUkVDMV9MMl9NSVhFUiwKKwkJCVJUNTY1OV9NX1NQS1ZPTExfUk0xX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOTCBTd2l0Y2giLCBSVDU2NTlfUkVDMV9MMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0lOTF9STTFfTF9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUNCBTd2l0Y2giLCBSVDU2NTlfUkVDMV9MMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDRfUk0xX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDMgU3dpdGNoIiwgUlQ1NjU5X1JFQzFfTDJfTUlYRVIsCisJCQlSVDU2NTlfTV9CU1QzX1JNMV9MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QyIFN3aXRjaCIsIFJUNTY1OV9SRUMxX0wyX01JWEVSLAorCQkJUlQ1NjU5X01fQlNUMl9STTFfTF9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUMSBTd2l0Y2giLCBSVDU2NTlfUkVDMV9MMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDFfUk0xX0xfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfcmVjMV9yX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiSFBPVk9MUiBTd2l0Y2giLCBSVDU2NTlfUkVDMV9MMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0hQT1ZPTFJfUk0xX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOUiBTd2l0Y2giLCBSVDU2NTlfUkVDMV9SMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0lOUl9STTFfUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUNCBTd2l0Y2giLCBSVDU2NTlfUkVDMV9SMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDRfUk0xX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDMgU3dpdGNoIiwgUlQ1NjU5X1JFQzFfUjJfTUlYRVIsCisJCQlSVDU2NTlfTV9CU1QzX1JNMV9SX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QyIFN3aXRjaCIsIFJUNTY1OV9SRUMxX1IyX01JWEVSLAorCQkJUlQ1NjU5X01fQlNUMl9STTFfUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUMSBTd2l0Y2giLCBSVDU2NTlfUkVDMV9SMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDFfUk0xX1JfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfcmVjMl9sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiU1BLVk9MTCBTd2l0Y2giLCBSVDU2NTlfUkVDMl9MMl9NSVhFUiwKKwkJCVJUNTY1OV9NX1NQS1ZPTF9STTJfTF9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiT1VUVk9MTCBTd2l0Y2giLCBSVDU2NTlfUkVDMl9MMl9NSVhFUiwKKwkJCVJUNTY1OV9NX09VVFZPTExfUk0yX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDQgU3dpdGNoIiwgUlQ1NjU5X1JFQzJfTDJfTUlYRVIsCisJCQlSVDU2NTlfTV9CU1Q0X1JNMl9MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QzIFN3aXRjaCIsIFJUNTY1OV9SRUMyX0wyX01JWEVSLAorCQkJUlQ1NjU5X01fQlNUM19STTJfTF9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUMiBTd2l0Y2giLCBSVDU2NTlfUkVDMl9MMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDJfUk0yX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDEgU3dpdGNoIiwgUlQ1NjU5X1JFQzJfTDJfTUlYRVIsCisJCQlSVDU2NTlfTV9CU1QxX1JNMl9MX1NGVCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X3JlYzJfcl9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIk1PTk9WT0wgU3dpdGNoIiwgUlQ1NjU5X1JFQzJfUjJfTUlYRVIsCisJCQlSVDU2NTlfTV9NT05PVk9MX1JNMl9SX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJPVVRWT0xSIFN3aXRjaCIsIFJUNTY1OV9SRUMyX1IyX01JWEVSLAorCQkJUlQ1NjU5X01fT1VUVk9MUl9STTJfUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUNCBTd2l0Y2giLCBSVDU2NTlfUkVDMl9SMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDRfUk0yX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDMgU3dpdGNoIiwgUlQ1NjU5X1JFQzJfUjJfTUlYRVIsCisJCQlSVDU2NTlfTV9CU1QzX1JNMl9SX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QyIFN3aXRjaCIsIFJUNTY1OV9SRUMyX1IyX01JWEVSLAorCQkJUlQ1NjU5X01fQlNUMl9STTJfUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUMSBTd2l0Y2giLCBSVDU2NTlfUkVDMl9SMl9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDFfUk0yX1JfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfc3BrX2xfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJEQUMgTDIgU3dpdGNoIiwgUlQ1NjU5X1NQS19MX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX0wyX1NNX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDEgU3dpdGNoIiwgUlQ1NjU5X1NQS19MX01JWEVSLAorCQkJUlQ1NjU5X01fQlNUMV9TTV9MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJJTkwgU3dpdGNoIiwgUlQ1NjU5X1NQS19MX01JWEVSLAorCQkJUlQ1NjU5X01fSU5fTF9TTV9MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJJTlIgU3dpdGNoIiwgUlQ1NjU5X1NQS19MX01JWEVSLAorCQkJUlQ1NjU5X01fSU5fUl9TTV9MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QzIFN3aXRjaCIsIFJUNTY1OV9TUEtfTF9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDNfU01fTF9TRlQsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9zcGtfcl9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBSMiBTd2l0Y2giLCBSVDU2NTlfU1BLX1JfTUlYRVIsCisJCQlSVDU2NTlfTV9EQUNfUjJfU01fUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUNCBTd2l0Y2giLCBSVDU2NTlfU1BLX1JfTUlYRVIsCisJCQlSVDU2NTlfTV9CU1Q0X1NNX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOTCBTd2l0Y2giLCBSVDU2NTlfU1BLX1JfTUlYRVIsCisJCQlSVDU2NTlfTV9JTl9MX1NNX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOUiBTd2l0Y2giLCBSVDU2NTlfU1BLX1JfTUlYRVIsCisJCQlSVDU2NTlfTV9JTl9SX1NNX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDMgU3dpdGNoIiwgUlQ1NjU5X1NQS19SX01JWEVSLAorCQkJUlQ1NjU5X01fQlNUM19TTV9SX1NGVCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X21vbm92b2xfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJEQUMgTDIgU3dpdGNoIiwgUlQ1NjU5X01PTk9NSVhfSU5fR0FJTiwKKwkJCVJUNTY1OV9NX0RBQ19MMl9NTV9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiREFDIFIyIFN3aXRjaCIsIFJUNTY1OV9NT05PTUlYX0lOX0dBSU4sCisJCQlSVDU2NTlfTV9EQUNfUjJfTU1fU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDEgU3dpdGNoIiwgUlQ1NjU5X01PTk9NSVhfSU5fR0FJTiwKKwkJCVJUNTY1OV9NX0JTVDFfTU1fU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDIgU3dpdGNoIiwgUlQ1NjU5X01PTk9NSVhfSU5fR0FJTiwKKwkJCVJUNTY1OV9NX0JTVDJfTU1fU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDMgU3dpdGNoIiwgUlQ1NjU5X01PTk9NSVhfSU5fR0FJTiwKKwkJCVJUNTY1OV9NX0JTVDNfTU1fU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfb3V0X2xfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJEQUMgTDIgU3dpdGNoIiwgUlQ1NjU5X09VVF9MX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX0wyX09NX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOTCBTd2l0Y2giLCBSVDU2NTlfT1VUX0xfTUlYRVIsCisJCQlSVDU2NTlfTV9JTl9MX09NX0xfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDEgU3dpdGNoIiwgUlQ1NjU5X09VVF9MX01JWEVSLAorCQkJUlQ1NjU5X01fQlNUMV9PTV9MX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QyIFN3aXRjaCIsIFJUNTY1OV9PVVRfTF9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDJfT01fTF9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUMyBTd2l0Y2giLCBSVDU2NTlfT1VUX0xfTUlYRVIsCisJCQlSVDU2NTlfTV9CU1QzX09NX0xfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfb3V0X3JfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJEQUMgUjIgU3dpdGNoIiwgUlQ1NjU5X09VVF9SX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX1IyX09NX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIklOUiBTd2l0Y2giLCBSVDU2NTlfT1VUX1JfTUlYRVIsCisJCQlSVDU2NTlfTV9JTl9SX09NX1JfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIkJTVDIgU3dpdGNoIiwgUlQ1NjU5X09VVF9SX01JWEVSLAorCQkJUlQ1NjU5X01fQlNUMl9PTV9SX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJCU1QzIFN3aXRjaCIsIFJUNTY1OV9PVVRfUl9NSVhFUiwKKwkJCVJUNTY1OV9NX0JTVDNfT01fUl9TRlQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRSgiQlNUNCBTd2l0Y2giLCBSVDU2NTlfT1VUX1JfTUlYRVIsCisJCQlSVDU2NTlfTV9CU1Q0X09NX1JfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfc3BvX2xfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJEQUMgTDIgU3dpdGNoIiwgUlQ1NjU5X1NQT19BTVBfR0FJTiwKKwkJCVJUNTY1OV9NX0RBQ19MMl9TUEtPTUlYX1NGVCwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJTUEtWT0wgTCBTd2l0Y2giLCBSVDU2NTlfU1BPX0FNUF9HQUlOLAorCQkJUlQ1NjU5X01fU1BLVk9MTF9TUEtPTUlYX1NGVCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X3Nwb19yX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiREFDIFIyIFN3aXRjaCIsIFJUNTY1OV9TUE9fQU1QX0dBSU4sCisJCQlSVDU2NTlfTV9EQUNfUjJfU1BLT01JWF9TRlQsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiU1BLVk9MIFIgU3dpdGNoIiwgUlQ1NjU5X1NQT19BTVBfR0FJTiwKKwkJCVJUNTY1OV9NX1NQS1ZPTFJfU1BLT01JWF9TRlQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9tb25vX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiREFDIEwyIFN3aXRjaCIsIFJUNTY1OV9NT05PTUlYX0lOX0dBSU4sCisJCQlSVDU2NTlfTV9EQUNfTDJfTUFfU0ZULCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1PTk9WT0wgU3dpdGNoIiwgUlQ1NjU5X01PTk9NSVhfSU5fR0FJTiwKKwkJCVJUNTY1OV9NX01PTk9WT0xfTUFfU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfbG91dF9sX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiREFDIEwyIFN3aXRjaCIsIFJUNTY1OV9MT1VUX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX0wyX0xNX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJPVVRWT0wgTCBTd2l0Y2giLCBSVDU2NTlfTE9VVF9NSVhFUiwKKwkJCVJUNTY1OV9NX09WX0xfTE1fU0ZULCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfbG91dF9yX21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRSgiREFDIFIyIFN3aXRjaCIsIFJUNTY1OV9MT1VUX01JWEVSLAorCQkJUlQ1NjU5X01fREFDX1IyX0xNX1NGVCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFKCJPVVRWT0wgUiBTd2l0Y2giLCBSVDU2NTlfTE9VVF9NSVhFUiwKKwkJCVJUNTY1OV9NX09WX1JfTE1fU0ZULCAxLCAxKSwKK307CisKKy8qREFDIEwyLCBEQUMgUjIqLworLypNWC0xQiBbNjo0XSwgTVgtMUIgWzI6MF0qLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTlfZGFjMl9zcmNbXSA9IHsKKwkiSUYxIERBQzIiLCAiSUYyIERBQyIsICJJRjMgREFDIiwgIk1vbm8gQURDIE1JWCIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfZGFjX2wyX2VudW0sIFJUNTY1OV9EQUNfQ1RSTCwKKwlSVDU2NTlfREFDX0wyX1NFTF9TRlQsIHJ0NTY1OV9kYWMyX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfZGFjX2wyX211eCA9CisJU09DX0RBUE1fRU5VTSgiREFDIEwyIFNvdXJjZSIsIHJ0NTY1OV9kYWNfbDJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfZGFjX3IyX2VudW0sIFJUNTY1OV9EQUNfQ1RSTCwKKwlSVDU2NTlfREFDX1IyX1NFTF9TRlQsIHJ0NTY1OV9kYWMyX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfZGFjX3IyX211eCA9CisJU09DX0RBUE1fRU5VTSgiREFDIFIyIFNvdXJjZSIsIHJ0NTY1OV9kYWNfcjJfZW51bSk7CisKKworLyogU1RPMSBBREMxIFNvdXJjZSAqLworLyogTVgtMjYgWzEzXSAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTlfc3RvMV9hZGMxX3NyY1tdID0geworCSJEQUMgTUlYIiwgIkFEQyIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfc3RvMV9hZGMxX2VudW0sIFJUNTY1OV9TVE8xX0FEQ19NSVhFUiwKKwlSVDU2NTlfU1RPMV9BREMxX1NSQ19TRlQsIHJ0NTY1OV9zdG8xX2FkYzFfc3JjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9zdG8xX2FkYzFfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTdGVyZW8xIEFEQzEgU291cmNlIiwgcnQ1NjU5X3N0bzFfYWRjMV9lbnVtKTsKKworLyogU1RPMSBBREMgU291cmNlICovCisvKiBNWC0yNiBbMTJdICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJ0NTY1OV9zdG8xX2FkY19zcmNbXSA9IHsKKwkiQURDMSIsICJBREMyIgorfTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9zdG8xX2FkY19lbnVtLCBSVDU2NTlfU1RPMV9BRENfTUlYRVIsCisJUlQ1NjU5X1NUTzFfQURDX1NSQ19TRlQsIHJ0NTY1OV9zdG8xX2FkY19zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X3N0bzFfYWRjX211eCA9CisJU09DX0RBUE1fRU5VTSgiU3RlcmVvMSBBREMgU291cmNlIiwgcnQ1NjU5X3N0bzFfYWRjX2VudW0pOworCisvKiBTVE8xIEFEQzIgU291cmNlICovCisvKiBNWC0yNiBbMTFdICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJ0NTY1OV9zdG8xX2FkYzJfc3JjW10gPSB7CisJIkRBQyBNSVgiLCAiRE1JQyIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfc3RvMV9hZGMyX2VudW0sIFJUNTY1OV9TVE8xX0FEQ19NSVhFUiwKKwlSVDU2NTlfU1RPMV9BREMyX1NSQ19TRlQsIHJ0NTY1OV9zdG8xX2FkYzJfc3JjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9zdG8xX2FkYzJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTdGVyZW8xIEFEQzIgU291cmNlIiwgcnQ1NjU5X3N0bzFfYWRjMl9lbnVtKTsKKworLyogU1RPMSBETUlDIFNvdXJjZSAqLworLyogTVgtMjYgWzhdICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJ0NTY1OV9zdG8xX2RtaWNfc3JjW10gPSB7CisJIkRNSUMxIiwgIkRNSUMyIgorfTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9zdG8xX2RtaWNfZW51bSwgUlQ1NjU5X1NUTzFfQURDX01JWEVSLAorCVJUNTY1OV9TVE8xX0RNSUNfU1JDX1NGVCwgcnQ1NjU5X3N0bzFfZG1pY19zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X3N0bzFfZG1pY19tdXggPQorCVNPQ19EQVBNX0VOVU0oIlN0ZXJlbzEgRE1JQyBTb3VyY2UiLCBydDU2NTlfc3RvMV9kbWljX2VudW0pOworCisKKy8qIE1PTk8gQURDIEwyIFNvdXJjZSAqLworLyogTVgtMjcgWzEyXSAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTlfbW9ub19hZGNfbDJfc3JjW10gPSB7CisJIk1vbm8gREFDIE1JWEwiLCAiRE1JQyIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfbW9ub19hZGNfbDJfZW51bSwgUlQ1NjU5X01PTk9fQURDX01JWEVSLAorCVJUNTY1OV9NT05PX0FEQ19MMl9TUkNfU0ZULCBydDU2NTlfbW9ub19hZGNfbDJfc3JjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9tb25vX2FkY19sMl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIk1vbm8gQURDIEwyIFNvdXJjZSIsIHJ0NTY1OV9tb25vX2FkY19sMl9lbnVtKTsKKworCisvKiBNT05PIEFEQyBMMSBTb3VyY2UgKi8KKy8qIE1YLTI3IFsxMV0gKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcnQ1NjU5X21vbm9fYWRjX2wxX3NyY1tdID0geworCSJNb25vIERBQyBNSVhMIiwgIkFEQyIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfbW9ub19hZGNfbDFfZW51bSwgUlQ1NjU5X01PTk9fQURDX01JWEVSLAorCVJUNTY1OV9NT05PX0FEQ19MMV9TUkNfU0ZULCBydDU2NTlfbW9ub19hZGNfbDFfc3JjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9tb25vX2FkY19sMV9tdXggPQorCVNPQ19EQVBNX0VOVU0oIk1vbm8gQURDIEwxIFNvdXJjZSIsIHJ0NTY1OV9tb25vX2FkY19sMV9lbnVtKTsKKworLyogTU9OTyBBREMgTCBTb3VyY2UsIE1PTk8gQURDIFIgU291cmNlKi8KKy8qIE1YLTI3IFsxMDo5XSwgTVgtMjcgWzI6MV0gKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcnQ1NjU5X21vbm9fYWRjX3NyY1tdID0geworCSJBREMxIEwiLCAiQURDMSBSIiwgIkFEQzIgTCIsICJBREMyIFIiCit9OworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woCisJcnQ1NjU5X21vbm9fYWRjX2xfZW51bSwgUlQ1NjU5X01PTk9fQURDX01JWEVSLAorCVJUNTY1OV9NT05PX0FEQ19MX1NSQ19TRlQsIHJ0NTY1OV9tb25vX2FkY19zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X21vbm9fYWRjX2xfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJNb25vIEFEQyBMIFNvdXJjZSIsIHJ0NTY1OV9tb25vX2FkY19sX2VudW0pOworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woCisJcnQ1NjU5X21vbm9fYWRjcl9lbnVtLCBSVDU2NTlfTU9OT19BRENfTUlYRVIsCisJUlQ1NjU5X01PTk9fQURDX1JfU1JDX1NGVCwgcnQ1NjU5X21vbm9fYWRjX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfbW9ub19hZGNfcl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIk1vbm8gQURDIFIgU291cmNlIiwgcnQ1NjU5X21vbm9fYWRjcl9lbnVtKTsKKworLyogTU9OTyBETUlDIEwgU291cmNlICovCisvKiBNWC0yNyBbOF0gKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcnQ1NjU5X21vbm9fZG1pY19sX3NyY1tdID0geworCSJETUlDMSBMIiwgIkRNSUMyIEwiCit9OworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woCisJcnQ1NjU5X21vbm9fZG1pY19sX2VudW0sIFJUNTY1OV9NT05PX0FEQ19NSVhFUiwKKwlSVDU2NTlfTU9OT19ETUlDX0xfU1JDX1NGVCwgcnQ1NjU5X21vbm9fZG1pY19sX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfbW9ub19kbWljX2xfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJNb25vIERNSUMgTCBTb3VyY2UiLCBydDU2NTlfbW9ub19kbWljX2xfZW51bSk7CisKKy8qIE1PTk8gQURDIFIyIFNvdXJjZSAqLworLyogTVgtMjcgWzRdICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJ0NTY1OV9tb25vX2FkY19yMl9zcmNbXSA9IHsKKwkiTW9ubyBEQUMgTUlYUiIsICJETUlDIgorfTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9tb25vX2FkY19yMl9lbnVtLCBSVDU2NTlfTU9OT19BRENfTUlYRVIsCisJUlQ1NjU5X01PTk9fQURDX1IyX1NSQ19TRlQsIHJ0NTY1OV9tb25vX2FkY19yMl9zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X21vbm9fYWRjX3IyX211eCA9CisJU09DX0RBUE1fRU5VTSgiTW9ubyBBREMgUjIgU291cmNlIiwgcnQ1NjU5X21vbm9fYWRjX3IyX2VudW0pOworCisvKiBNT05PIEFEQyBSMSBTb3VyY2UgKi8KKy8qIE1YLTI3IFszXSAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTlfbW9ub19hZGNfcjFfc3JjW10gPSB7CisJIk1vbm8gREFDIE1JWFIiLCAiQURDIgorfTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9tb25vX2FkY19yMV9lbnVtLCBSVDU2NTlfTU9OT19BRENfTUlYRVIsCisJUlQ1NjU5X01PTk9fQURDX1IxX1NSQ19TRlQsIHJ0NTY1OV9tb25vX2FkY19yMV9zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X21vbm9fYWRjX3IxX211eCA9CisJU09DX0RBUE1fRU5VTSgiTW9ubyBBREMgUjEgU291cmNlIiwgcnQ1NjU5X21vbm9fYWRjX3IxX2VudW0pOworCisvKiBNT05PIERNSUMgUiBTb3VyY2UgKi8KKy8qIE1YLTI3IFswXSAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTlfbW9ub19kbWljX3Jfc3JjW10gPSB7CisJIkRNSUMxIFIiLCAiRE1JQzIgUiIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfbW9ub19kbWljX3JfZW51bSwgUlQ1NjU5X01PTk9fQURDX01JWEVSLAorCVJUNTY1OV9NT05PX0RNSUNfUl9TUkNfU0ZULCBydDU2NTlfbW9ub19kbWljX3Jfc3JjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9tb25vX2RtaWNfcl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIk1vbm8gRE1JQyBSIFNvdXJjZSIsIHJ0NTY1OV9tb25vX2RtaWNfcl9lbnVtKTsKKworCisvKiBEQUMgUjEgU291cmNlLCBEQUMgTDEgU291cmNlKi8KKy8qIE1YLTI5IFsxMToxMF0sIE1YLTI5IFs5OjhdKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcnQ1NjU5X2RhYzFfc3JjW10gPSB7CisJIklGMSBEQUMxIiwgIklGMiBEQUMiLCAiSUYzIERBQyIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfZGFjX3IxX2VudW0sIFJUNTY1OV9BRF9EQV9NSVhFUiwKKwlSVDU2NTlfREFDMV9SX1NFTF9TRlQsIHJ0NTY1OV9kYWMxX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfZGFjX3IxX211eCA9CisJU09DX0RBUE1fRU5VTSgiREFDIFIxIFNvdXJjZSIsIHJ0NTY1OV9kYWNfcjFfZW51bSk7CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfZGFjX2wxX2VudW0sIFJUNTY1OV9BRF9EQV9NSVhFUiwKKwlSVDU2NTlfREFDMV9MX1NFTF9TRlQsIHJ0NTY1OV9kYWMxX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfZGFjX2wxX211eCA9CisJU09DX0RBUE1fRU5VTSgiREFDIEwxIFNvdXJjZSIsIHJ0NTY1OV9kYWNfbDFfZW51bSk7CisKKy8qIERBQyBEaWdpdGFsIE1peGVyIEwgU291cmNlLCBEQUMgRGlnaXRhbCBNaXhlciBSIFNvdXJjZSovCisvKiBNWC0yQyBbNl0sIE1YLTJDIFs0XSovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJ0NTY1OV9kaWdfZGFjX21peF9zcmNbXSA9IHsKKwkiU3RlcmVvIERBQyBNaXhlciIsICJNb25vIERBQyBNaXhlciIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfZGlnX2RhY19taXhsX2VudW0sIFJUNTY1OV9ESUdfTUlYRVIsCisJUlQ1NjU5X0RBQ19NSVhfTF9TRlQsIHJ0NTY1OV9kaWdfZGFjX21peF9zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X2RpZ19kYWNfbWl4bF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkRBQyBEaWdpdGFsIE1peGVyIEwgU291cmNlIiwgcnQ1NjU5X2RpZ19kYWNfbWl4bF9lbnVtKTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9kaWdfZGFjX21peHJfZW51bSwgUlQ1NjU5X0RJR19NSVhFUiwKKwlSVDU2NTlfREFDX01JWF9SX1NGVCwgcnQ1NjU5X2RpZ19kYWNfbWl4X3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfZGlnX2RhY19taXhyX211eCA9CisJU09DX0RBUE1fRU5VTSgiREFDIERpZ2l0YWwgTWl4ZXIgUiBTb3VyY2UiLCBydDU2NTlfZGlnX2RhY19taXhyX2VudW0pOworCisvKiBBbmFsb2cgREFDIEwxIFNvdXJjZSwgQW5hbG9nIERBQyBSMSBTb3VyY2UqLworLyogTVgtMkQgWzNdLCBNWC0yRCBbMl0qLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTlfYWxnX2RhYzFfc3JjW10gPSB7CisJIkRBQyIsICJTdGVyZW8gREFDIE1peGVyIgorfTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9hbGdfZGFjX2wxX2VudW0sIFJUNTY1OV9BX0RBQ19NVVgsCisJUlQ1NjU5X0FfREFDTDFfU0ZULCBydDU2NTlfYWxnX2RhYzFfc3JjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9hbGdfZGFjX2wxX211eCA9CisJU09DX0RBUE1fRU5VTSgiQW5hbG9nIERBQ0wxIFNvdXJjZSIsIHJ0NTY1OV9hbGdfZGFjX2wxX2VudW0pOworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woCisJcnQ1NjU5X2FsZ19kYWNfcjFfZW51bSwgUlQ1NjU5X0FfREFDX01VWCwKKwlSVDU2NTlfQV9EQUNSMV9TRlQsIHJ0NTY1OV9hbGdfZGFjMV9zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X2FsZ19kYWNfcjFfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBbmFsb2cgREFDUjEgU291cmNlIiwgcnQ1NjU5X2FsZ19kYWNfcjFfZW51bSk7CisKKy8qIEFuYWxvZyBEQUMgTFIgU291cmNlLCBBbmFsb2cgREFDIFIyIFNvdXJjZSovCisvKiBNWC0yRCBbMV0sIE1YLTJEIFswXSovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJ0NTY1OV9hbGdfZGFjMl9zcmNbXSA9IHsKKwkiU3RlcmVvIERBQyBNaXhlciIsICJNb25vIERBQyBNaXhlciIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfYWxnX2RhY19sMl9lbnVtLCBSVDU2NTlfQV9EQUNfTVVYLAorCVJUNTY1OV9BX0RBQ0wyX1NGVCwgcnQ1NjU5X2FsZ19kYWMyX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfYWxnX2RhY19sMl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFuYWxvZyBEQUMgTDIgU291cmNlIiwgcnQ1NjU5X2FsZ19kYWNfbDJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfYWxnX2RhY19yMl9lbnVtLCBSVDU2NTlfQV9EQUNfTVVYLAorCVJUNTY1OV9BX0RBQ1IyX1NGVCwgcnQ1NjU5X2FsZ19kYWMyX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfYWxnX2RhY19yMl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFuYWxvZyBEQUMgUjIgU291cmNlIiwgcnQ1NjU5X2FsZ19kYWNfcjJfZW51bSk7CisKKy8qIEludGVyZmFjZTIgQURDIERhdGEgSW5wdXQqLworLyogTVgtMkYgWzEzOjEyXSAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTlfaWYyX2FkY19pbl9zcmNbXSA9IHsKKwkiSUZfQURDMSIsICJJRl9BREMyIiwgIkRBQ19SRUYiLCAiSUZfQURDMyIKK307CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfaWYyX2FkY19pbl9lbnVtLCBSVDU2NTlfRElHX0lORjIzX0RBVEEsCisJUlQ1NjU5X0lGMl9BRENfSU5fU0ZULCBydDU2NTlfaWYyX2FkY19pbl9zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X2lmMl9hZGNfaW5fbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJJRjIgQURDIElOIFNvdXJjZSIsIHJ0NTY1OV9pZjJfYWRjX2luX2VudW0pOworCisvKiBJbnRlcmZhY2UzIEFEQyBEYXRhIElucHV0Ki8KKy8qIE1YLTJGIFsxOjBdICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJ0NTY1OV9pZjNfYWRjX2luX3NyY1tdID0geworCSJJRl9BREMxIiwgIklGX0FEQzIiLCAiREFDX1JFRiIsICJTdGVyZW8yX0FEQ19ML1IiCit9OworCitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woCisJcnQ1NjU5X2lmM19hZGNfaW5fZW51bSwgUlQ1NjU5X0RJR19JTkYyM19EQVRBLAorCVJUNTY1OV9JRjNfQURDX0lOX1NGVCwgcnQ1NjU5X2lmM19hZGNfaW5fc3JjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1OV9pZjNfYWRjX2luX211eCA9CisJU09DX0RBUE1fRU5VTSgiSUYzIEFEQyBJTiBTb3VyY2UiLCBydDU2NTlfaWYzX2FkY19pbl9lbnVtKTsKKworLyogUERNIDEgTC9SKi8KKy8qIE1YLTMxIFsxNV0gWzEzXSAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTlfcGRtX3NyY1tdID0geworCSJNb25vIERBQyIsICJTdGVyZW8gREFDIgorfTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9wZG1fbF9lbnVtLCBSVDU2NTlfUERNX09VVF9DVFJMLAorCVJUNTY1OV9QRE0xX0xfU0ZULCBydDU2NTlfcGRtX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfcGRtX2xfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJQRE0gTCBTb3VyY2UiLCBydDU2NTlfcGRtX2xfZW51bSk7CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTlfcGRtX3JfZW51bSwgUlQ1NjU5X1BETV9PVVRfQ1RSTCwKKwlSVDU2NTlfUERNMV9SX1NGVCwgcnQ1NjU5X3BkbV9zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X3BkbV9yX211eCA9CisJU09DX0RBUE1fRU5VTSgiUERNIFIgU291cmNlIiwgcnQ1NjU5X3BkbV9yX2VudW0pOworCisvKiBTUERJRiBPdXRwdXQgc291cmNlKi8KKy8qIE1YLTM2IFsxOjBdICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJ0NTY1OV9zcGRpZl9zcmNbXSA9IHsKKwkiSUYxX0RBQzEiLCAiSUYxX0RBQzIiLCAiSUYyX0RBQyIsICJJRjNfREFDIgorfTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9zcGRpZl9lbnVtLCBSVDU2NTlfU1BESUZfQ1RSTCwKKwlSVDU2NTlfU1BESUZfU0VMX1NGVCwgcnQ1NjU5X3NwZGlmX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTlfc3BkaWZfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJTUERJRiBTb3VyY2UiLCBydDU2NTlfc3BkaWZfZW51bSk7CisKKy8qIEkyUzEgVERNIEFEQ0RBVCBTb3VyY2UgKi8KKy8qIE1YLTc4WzQ6MF0gKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcnQ1NjU5X3J4X2FkY19kYXRhX3NyY1tdID0geworCSJBRDE6QUQyOkRBQzpOVUwiLCAiQUQxOkFEMjpOVUw6REFDIiwgIkFEMTpEQUM6QUQyOk5VTCIsCisJIkFEMTpEQUM6TlVMOkFEMiIsICJBRDE6TlVMOkRBQzpBRDIiLCAiQUQxOk5VTDpBRDI6REFDIiwKKwkiQUQyOkFEMTpEQUM6TlVMIiwgIkFEMjpBRDE6TlVMOkRBQyIsICJBRDI6REFDOkFEMTpOVUwiLAorCSJBRDI6REFDOk5VTDpBRDEiLCAiQUQyOk5VTDpEQUM6QUQxIiwgIkFEMTpOVUw6QUQxOkRBQyIsCisJIkRBQzpBRDE6QUQyOk5VTCIsICJEQUM6QUQxOk5VTDpBRDIiLCAiREFDOkFEMjpBRDE6TlVMIiwKKwkiREFDOkFEMjpOVUw6QUQxIiwgIkRBQzpOVUw6REFDOkFEMiIsICJEQUM6TlVMOkFEMjpEQUMiLAorCSJOVUw6QUQxOkFEMjpEQUMiLCAiTlVMOkFEMTpEQUM6QUQyIiwgIk5VTDpBRDI6QUQxOkRBQyIsCisJIk5VTDpBRDI6REFDOkFEMSIsICJOVUw6REFDOkRBQzpBRDIiLCAiTlVMOkRBQzpBRDI6REFDIgorfTsKKworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1OV9yeF9hZGNfZGF0YV9lbnVtLCBSVDU2NTlfVERNX0NUUkxfMiwKKwlSVDU2NTlfQURDREFUX1NSQ19TRlQsIHJ0NTY1OV9yeF9hZGNfZGF0YV9zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjU5X3J4X2FkY19kYWNfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJURE0gQURDREFUIFNvdXJjZSIsIHJ0NTY1OV9yeF9hZGNfZGF0YV9lbnVtKTsKKworLyogT3V0IFZvbHVtZSBTd2l0Y2ggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzcGt2b2xfbF9zd2l0Y2ggPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgUlQ1NjU5X1NQT19WT0wsIFJUNTY1OV9WT0xfTF9TRlQsIDEsIDEpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3Brdm9sX3Jfc3dpdGNoID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFJUNTY1OV9TUE9fVk9MLCBSVDU2NTlfVk9MX1JfU0ZULCAxLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1vbm92b2xfc3dpdGNoID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFJUNTY1OV9NT05PX09VVCwgUlQ1NjU5X1ZPTF9MX1NGVCwgMSwgMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBvdXR2b2xfbF9zd2l0Y2ggPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgUlQ1NjU5X0xPVVQsIFJUNTY1OV9WT0xfTF9TRlQsIDEsIDEpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgb3V0dm9sX3Jfc3dpdGNoID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFJUNTY1OV9MT1VULCBSVDU2NTlfVk9MX1JfU0ZULCAxLCAxKTsKKworLyogT3V0IFN3aXRjaCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNwb19zd2l0Y2ggPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgUlQ1NjU5X0NMQVNTRF8yLCBSVDU2NTlfTV9SRl9ESUdfU0ZULCAxLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1vbm9fc3dpdGNoID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFJUNTY1OV9NT05PX09VVCwgUlQ1NjU5X0xfTVVURV9TRlQsIDEsIDEpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaHBvX2xfc3dpdGNoID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFJUNTY1OV9IUF9WT0wsIFJUNTY1OV9MX01VVEVfU0ZULCAxLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhwb19yX3N3aXRjaCA9CisJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBSVDU2NTlfSFBfVk9MLCBSVDU2NTlfUl9NVVRFX1NGVCwgMSwgMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsb3V0X2xfc3dpdGNoID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFJUNTY1OV9MT1VULCBSVDU2NTlfTF9NVVRFX1NGVCwgMSwgMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsb3V0X3Jfc3dpdGNoID0KKwlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFJUNTY1OV9MT1VULCBSVDU2NTlfUl9NVVRFX1NGVCwgMSwgMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBwZG1fbF9zd2l0Y2ggPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgUlQ1NjU5X1BETV9PVVRfQ1RSTCwgUlQ1NjU5X01fUERNMV9MX1NGVCwgMSwKKwkJMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBwZG1fcl9zd2l0Y2ggPQorCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgUlQ1NjU5X1BETV9PVVRfQ1RSTCwgUlQ1NjU5X01fUERNMV9SX1NGVCwgMSwKKwkJMSk7CisKK3N0YXRpYyBpbnQgcnQ1NjU5X3Nwa19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfQ0xBU1NEX0NUUkxfMSwKKwkJCVJUNTY1OV9QT1dfQ0xTRF9EQl9NQVNLLCBSVDU2NTlfUE9XX0NMU0RfREJfRU4pOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfQ0xBU1NEXzIsCisJCQlSVDU2NTlfTV9SSV9ESUcsIFJUNTY1OV9NX1JJX0RJRyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFJUNTY1OV9DTEFTU0RfMSwgMHgwODAzKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgUlQ1NjU5X1NQS19EQ19DQUlMQl9DVFJMXzMsIDB4MDAwMCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFJUNTY1OV9DTEFTU0RfMSwgMHgwMDExKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0NMQVNTRF8yLAorCQkJUlQ1NjU5X01fUklfRElHLCAweDApOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NTlfU1BLX0RDX0NBSUxCX0NUUkxfMywgMHgwMDAzKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0NMQVNTRF9DVFJMXzEsCisJCQlSVDU2NTlfUE9XX0NMU0RfREJfTUFTSywgUlQ1NjU5X1BPV19DTFNEX0RCX0RJUyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBydDU2NTlfbW9ub19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfQ1RSTF8xLCAweDFlMDApOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfQ1RSTF8xLCAweDFlMDQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgcnQ1NjU5X2hwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NTlfSFBfQ0hBUkdFX1BVTVBfMSwgMHgwZTFlKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0RFUE9QXzEsIDB4MDAxMCwgMHgwMDEwKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NTlfREVQT1BfMSwgMHgwMDAwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfZG1pY19wb3dlcihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKKwkJLypBZGQgZGVsYXkgdG8gYXZvaWQgcG9wIG5vaXNlKi8KKwkJbXNsZWVwKDQ1MCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBydDU2NTlfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX1NVUFBMWSgiTERPMiIsIFJUNTY1OV9QV1JfQU5MR18zLCBSVDU2NTlfUFdSX0xETzJfQklULCAwLAorCQlOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJQTEwiLCBSVDU2NTlfUFdSX0FOTEdfMywgUlQ1NjU5X1BXUl9QTExfQklULCAwLAorCQlOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJNaWMgRGV0IFBvd2VyIiwgUlQ1NjU5X1BXUl9WT0wsCisJCVJUNTY1OV9QV1JfTUlDX0RFVF9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIk1vbm8gVnJlZiIsIFJUNTY1OV9QV1JfQU5MR18xLAorCQlSVDU2NTlfUFdSX1ZSRUYzX0JJVCwgMCwgTlVMTCwgMCksCisKKwkvKiBBU1JDICovCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJJMlMxIEFTUkMiLCAxLCBSVDU2NTlfQVNSQ18xLAorCQlSVDU2NTlfSTJTMV9BU1JDX1NGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJJMlMyIEFTUkMiLCAxLCBSVDU2NTlfQVNSQ18xLAorCQlSVDU2NTlfSTJTMl9BU1JDX1NGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJJMlMzIEFTUkMiLCAxLCBSVDU2NTlfQVNSQ18xLAorCQlSVDU2NTlfSTJTM19BU1JDX1NGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUMgU1RPIEFTUkMiLCAxLCBSVDU2NTlfQVNSQ18xLAorCQlSVDU2NTlfREFDX1NUT19BU1JDX1NGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUMgTW9ubyBMIEFTUkMiLCAxLCBSVDU2NTlfQVNSQ18xLAorCQlSVDU2NTlfREFDX01PTk9fTF9BU1JDX1NGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUMgTW9ubyBSIEFTUkMiLCAxLCBSVDU2NTlfQVNSQ18xLAorCQlSVDU2NTlfREFDX01PTk9fUl9BU1JDX1NGVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJBREMgU1RPMSBBU1JDIiwgMSwgUlQ1NjU5X0FTUkNfMSwKKwkJUlQ1NjU5X0FEQ19TVE8xX0FTUkNfU0ZULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkFEQyBNb25vIEwgQVNSQyIsIDEsIFJUNTY1OV9BU1JDXzEsCisJCVJUNTY1OV9BRENfTU9OT19MX0FTUkNfU0ZULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkFEQyBNb25vIFIgQVNSQyIsIDEsIFJUNTY1OV9BU1JDXzEsCisJCVJUNTY1OV9BRENfTU9OT19SX0FTUkNfU0ZULCAwLCBOVUxMLCAwKSwKKworCS8qIElucHV0IFNpZGUgKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZKCJNSUNCSUFTMSIsIFJUNTY1OV9QV1JfQU5MR18yLCBSVDU2NTlfUFdSX01CMV9CSVQsCisJCTAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIk1JQ0JJQVMyIiwgUlQ1NjU5X1BXUl9BTkxHXzIsIFJUNTY1OV9QV1JfTUIyX0JJVCwKKwkJMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiTUlDQklBUzMiLCBSVDU2NTlfUFdSX0FOTEdfMiwgUlQ1NjU5X1BXUl9NQjNfQklULAorCQkwLCBOVUxMLCAwKSwKKworCS8qIElucHV0IExpbmVzICovCisJU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDIEwxIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDIFIxIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDIEwyIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDIFIyIiksCisKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklOMVAiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklOMU4iKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklOMlAiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklOMk4iKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklOM1AiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklOM04iKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklONFAiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIklONE4iKSwKKworCVNORF9TT0NfREFQTV9QR0EoIkRNSUMxIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJETUlDMiIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJETUlDIENMSyIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJc2V0X2RtaWNfY2xrLCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiRE1JQzEgUG93ZXIiLCBSVDU2NTlfRE1JQ19DVFJMXzEsCisJCVJUNTY1OV9ETUlDXzFfRU5fU0ZULCAwLCBzZXRfZG1pY19wb3dlciwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJETUlDMiBQb3dlciIsIFJUNTY1OV9ETUlDX0NUUkxfMSwKKwkJUlQ1NjU5X0RNSUNfMl9FTl9TRlQsIDAsIHNldF9kbWljX3Bvd2VyLCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCisJLyogQm9vc3QgKi8KKwlTTkRfU09DX0RBUE1fUEdBKCJCU1QxIiwgUlQ1NjU5X1BXUl9BTkxHXzIsCisJCVJUNTY1OV9QV1JfQlNUMV9QX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiQlNUMiIsIFJUNTY1OV9QV1JfQU5MR18yLAorCQlSVDU2NTlfUFdSX0JTVDJfUF9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIkJTVDMiLCBSVDU2NTlfUFdSX0FOTEdfMiwKKwkJUlQ1NjU5X1BXUl9CU1QzX1BfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJCU1Q0IiwgUlQ1NjU5X1BXUl9BTkxHXzIsCisJCVJUNTY1OV9QV1JfQlNUNF9QX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiQlNUMSBQb3dlciIsIFJUNTY1OV9QV1JfQU5MR18yLAorCQlSVDU2NTlfUFdSX0JTVDFfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJCU1QyIFBvd2VyIiwgUlQ1NjU5X1BXUl9BTkxHXzIsCisJCVJUNTY1OV9QV1JfQlNUMl9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkJTVDMgUG93ZXIiLCBSVDU2NTlfUFdSX0FOTEdfMiwKKwkJUlQ1NjU5X1BXUl9CU1QzX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiQlNUNCBQb3dlciIsIFJUNTY1OV9QV1JfQU5MR18yLAorCQlSVDU2NTlfUFdSX0JTVDRfQklULCAwLCBOVUxMLCAwKSwKKworCisJLyogSW5wdXQgVm9sdW1lICovCisJU05EX1NPQ19EQVBNX1BHQSgiSU5MIFZPTCIsIFJUNTY1OV9QV1JfVk9MLCBSVDU2NTlfUFdSX0lOX0xfQklULAorCQkwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJJTlIgVk9MIiwgUlQ1NjU5X1BXUl9WT0wsIFJUNTY1OV9QV1JfSU5fUl9CSVQsCisJCTAsIE5VTEwsIDApLAorCisJLyogUkVDIE1peGVyICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJSRUNNSVgxTCIsIFJUNTY1OV9QV1JfTUlYRVIsIFJUNTY1OV9QV1JfUk0xX0xfQklULAorCQkwLCBydDU2NTlfcmVjMV9sX21peCwgQVJSQVlfU0laRShydDU2NTlfcmVjMV9sX21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiUkVDTUlYMVIiLCBSVDU2NTlfUFdSX01JWEVSLCBSVDU2NTlfUFdSX1JNMV9SX0JJVCwKKwkJMCwgcnQ1NjU5X3JlYzFfcl9taXgsIEFSUkFZX1NJWkUocnQ1NjU5X3JlYzFfcl9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJFQ01JWDJMIiwgUlQ1NjU5X1BXUl9NSVhFUiwgUlQ1NjU5X1BXUl9STTJfTF9CSVQsCisJCTAsIHJ0NTY1OV9yZWMyX2xfbWl4LCBBUlJBWV9TSVpFKHJ0NTY1OV9yZWMyX2xfbWl4KSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJSRUNNSVgyUiIsIFJUNTY1OV9QV1JfTUlYRVIsIFJUNTY1OV9QV1JfUk0yX1JfQklULAorCQkwLCBydDU2NTlfcmVjMl9yX21peCwgQVJSQVlfU0laRShydDU2NTlfcmVjMl9yX21peCkpLAorCisJLyogQURDcyAqLworCVNORF9TT0NfREFQTV9BREMoIkFEQzEgTCIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiQURDMSBSIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJBREMyIEwiLCBOVUxMLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9BREMoIkFEQzIgUiIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMCwgMCksCisKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJBREMxIEwgUG93ZXIiLCBSVDU2NTlfUFdSX0RJR18xLAorCQlSVDU2NTlfUFdSX0FEQ19MMV9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkFEQzEgUiBQb3dlciIsIFJUNTY1OV9QV1JfRElHXzEsCisJCVJUNTY1OV9QV1JfQURDX1IxX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiQURDMiBMIFBvd2VyIiwgUlQ1NjU5X1BXUl9ESUdfMiwKKwkJUlQ1NjU5X1BXUl9BRENfTDJfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJBREMyIFIgUG93ZXIiLCBSVDU2NTlfUFdSX0RJR18yLAorCQlSVDU2NTlfUFdSX0FEQ19SMl9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkFEQzEgY2xvY2siLCBTTkRfU09DX05PUE0sIDAsIDAsIHNldF9hZGNfY2xrLAorCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiQURDMiBjbG9jayIsIFNORF9TT0NfTk9QTSwgMCwgMCwgc2V0X2FkY19jbGssCisJCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKworCS8qIEFEQyBNdXggKi8KKwlTTkRfU09DX0RBUE1fTVVYKCJTdGVyZW8xIERNSUMgTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZydDU2NTlfc3RvMV9kbWljX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiU3RlcmVvMSBETUlDIFIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X3N0bzFfZG1pY19tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIlN0ZXJlbzEgQURDIEwxIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJnJ0NTY1OV9zdG8xX2FkYzFfbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJTdGVyZW8xIEFEQyBSMSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZydDU2NTlfc3RvMV9hZGMxX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiU3RlcmVvMSBBREMgTDIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X3N0bzFfYWRjMl9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIlN0ZXJlbzEgQURDIFIyIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJnJ0NTY1OV9zdG8xX2FkYzJfbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJTdGVyZW8xIEFEQyBMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJnJ0NTY1OV9zdG8xX2FkY19tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIlN0ZXJlbzEgQURDIFIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X3N0bzFfYWRjX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiTW9ubyBBREMgTDIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X21vbm9fYWRjX2wyX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiTW9ubyBBREMgUjIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X21vbm9fYWRjX3IyX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiTW9ubyBBREMgTDEgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X21vbm9fYWRjX2wxX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiTW9ubyBBREMgUjEgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X21vbm9fYWRjX3IxX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiTW9ubyBETUlDIEwgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X21vbm9fZG1pY19sX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiTW9ubyBETUlDIFIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X21vbm9fZG1pY19yX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiTW9ubyBBREMgTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZydDU2NTlfbW9ub19hZGNfbF9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIk1vbm8gQURDIFIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X21vbm9fYWRjX3JfbXV4KSwKKwkvKiBBREMgTWl4ZXIgKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZKCJBREMgU3RlcmVvMSBGaWx0ZXIiLCBSVDU2NTlfUFdSX0RJR18yLAorCQlSVDU2NTlfUFdSX0FEQ19TMUZfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJBREMgU3RlcmVvMiBGaWx0ZXIiLCBSVDU2NTlfUFdSX0RJR18yLAorCQlSVDU2NTlfUFdSX0FEQ19TMkZfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlN0ZXJlbzEgQURDIE1JWEwiLCBTTkRfU09DX05PUE0sCisJCTAsIDAsIHJ0NTY1OV9zdG8xX2FkY19sX21peCwKKwkJQVJSQVlfU0laRShydDU2NTlfc3RvMV9hZGNfbF9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlN0ZXJlbzEgQURDIE1JWFIiLCBTTkRfU09DX05PUE0sCisJCTAsIDAsIHJ0NTY1OV9zdG8xX2FkY19yX21peCwKKwkJQVJSQVlfU0laRShydDU2NTlfc3RvMV9hZGNfcl9taXgpKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJBREMgTW9ubyBMZWZ0IEZpbHRlciIsIFJUNTY1OV9QV1JfRElHXzIsCisJCVJUNTY1OV9QV1JfQURDX01GX0xfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1vbm8gQURDIE1JWEwiLCBSVDU2NTlfTU9OT19BRENfRElHX1ZPTCwKKwkJUlQ1NjU5X0xfTVVURV9TRlQsIDEsIHJ0NTY1OV9tb25vX2FkY19sX21peCwKKwkJQVJSQVlfU0laRShydDU2NTlfbW9ub19hZGNfbF9taXgpKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJBREMgTW9ubyBSaWdodCBGaWx0ZXIiLCBSVDU2NTlfUFdSX0RJR18yLAorCQlSVDU2NTlfUFdSX0FEQ19NRl9SX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX01JWEVSKCJNb25vIEFEQyBNSVhSIiwgUlQ1NjU5X01PTk9fQURDX0RJR19WT0wsCisJCVJUNTY1OV9SX01VVEVfU0ZULCAxLCBydDU2NTlfbW9ub19hZGNfcl9taXgsCisJCUFSUkFZX1NJWkUocnQ1NjU5X21vbm9fYWRjX3JfbWl4KSksCisKKwkvKiBBREMgUEdBICovCisJU05EX1NPQ19EQVBNX1BHQSgiSUZfQURDMSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUZfQURDMiIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUZfQURDMyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYxX0FEQzEiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMV9BREMyIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJJRjFfQURDMyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYxX0FEQzQiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlN0ZXJlbzIgQURDIExSIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9QR0EoIlN0ZXJlbzEgQURDIFZvbHVtZSBMIiwgUlQ1NjU5X1NUTzFfQURDX0RJR19WT0wsCisJCVJUNTY1OV9MX01VVEVfU0ZULCAxLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJTdGVyZW8xIEFEQyBWb2x1bWUgUiIsIFJUNTY1OV9TVE8xX0FEQ19ESUdfVk9MLAorCQlSVDU2NTlfUl9NVVRFX1NGVCwgMSwgTlVMTCwgMCksCisKKwkvKiBEaWdpdGFsIEludGVyZmFjZSAqLworCVNORF9TT0NfREFQTV9TVVBQTFkoIkkyUzEiLCBSVDU2NTlfUFdSX0RJR18xLCBSVDU2NTlfUFdSX0kyUzFfQklULAorCQkwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJJRjEgREFDMSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYxIERBQzIiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMSBEQUMxIEwiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMSBEQUMxIFIiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMSBEQUMyIEwiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMSBEQUMyIFIiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMSBBREMiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMSBBREMgTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYxIEFEQyBSIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJJMlMyIiwgUlQ1NjU5X1BXUl9ESUdfMSwgUlQ1NjU5X1BXUl9JMlMyX0JJVCwgMCwKKwkJTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYyIERBQyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYyIERBQyBMIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJJRjIgREFDIFIiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMiBBREMiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMiBBREMxIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJJRjIgQURDMiIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiSTJTMyIsIFJUNTY1OV9QV1JfRElHXzEsIFJUNTY1OV9QV1JfSTJTM19CSVQsIDAsCisJCU5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMyBEQUMiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMyBEQUMgTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiSUYzIERBQyBSIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJJRjMgQURDIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJJRjMgQURDIEwiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIklGMyBBREMgUiIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKKwkvKiBEaWdpdGFsIEludGVyZmFjZSBTZWxlY3QgKi8KKwlTTkRfU09DX0RBUE1fUEdBKCJURE0gQUQxOkFEMjpEQUMiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlRETSBBRDI6REFDIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJURE0gRGF0YSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZydDU2NTlfcnhfYWRjX2RhY19tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIklGMiBBREMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X2lmMl9hZGNfaW5fbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJJRjMgQURDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJnJ0NTY1OV9pZjNfYWRjX2luX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiSUYxIDAxIEFEQyBTd2FwIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZydDU2NTlfaWYxXzAxX2FkY19zd2FwX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiSUYxIDIzIEFEQyBTd2FwIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZydDU2NTlfaWYxXzIzX2FkY19zd2FwX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiSUYxIDQ1IEFEQyBTd2FwIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZydDU2NTlfaWYxXzQ1X2FkY19zd2FwX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiSUYxIDY3IEFEQyBTd2FwIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZydDU2NTlfaWYxXzY3X2FkY19zd2FwX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiSUYyIERBQyBTd2FwIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZydDU2NTlfaWYyX2RhY19zd2FwX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiSUYyIEFEQyBTd2FwIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZydDU2NTlfaWYyX2FkY19zd2FwX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiSUYzIERBQyBTd2FwIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZydDU2NTlfaWYzX2RhY19zd2FwX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiSUYzIEFEQyBTd2FwIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSZydDU2NTlfaWYzX2FkY19zd2FwX211eCksCisKKwkvKiBBdWRpbyBJbnRlcmZhY2UgKi8KKwlTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxUlgiLCAiQUlGMSBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWCIsICJBSUYxIENhcHR1cmUiLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJSWCIsICJBSUYyIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMlRYIiwgIkFJRjIgQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGM1JYIiwgIkFJRjMgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYzVFgiLCAiQUlGMyBDYXB0dXJlIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKworCS8qIE91dHB1dCBTaWRlICovCisJLyogREFDIG1peGVyIGJlZm9yZSBzb3VuZCBlZmZlY3QgICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJEQUMxIE1JWEwiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJ0NTY1OV9kYWNfbF9taXgsIEFSUkFZX1NJWkUocnQ1NjU5X2RhY19sX21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiREFDMSBNSVhSIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQlydDU2NTlfZGFjX3JfbWl4LCBBUlJBWV9TSVpFKHJ0NTY1OV9kYWNfcl9taXgpKSwKKworCS8qIERBQyBjaGFubmVsIE11eCAqLworCVNORF9TT0NfREFQTV9NVVgoIkRBQyBMMSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZydDU2NTlfZGFjX2wxX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiREFDIFIxIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnJ0NTY1OV9kYWNfcjFfbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJEQUMgTDIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmcnQ1NjU5X2RhY19sMl9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIkRBQyBSMiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZydDU2NTlfZGFjX3IyX211eCksCisKKwlTTkRfU09DX0RBUE1fTVVYKCJEQUMgTDEgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X2FsZ19kYWNfbDFfbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJEQUMgUjEgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X2FsZ19kYWNfcjFfbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJEQUMgTDIgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X2FsZ19kYWNfbDJfbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJEQUMgUjIgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcnQ1NjU5X2FsZ19kYWNfcjJfbXV4KSwKKworCS8qIERBQyBNaXhlciAqLworCVNORF9TT0NfREFQTV9TVVBQTFkoIkRBQyBTdGVyZW8xIEZpbHRlciIsIFJUNTY1OV9QV1JfRElHXzIsCisJCVJUNTY1OV9QV1JfREFDX1MxRl9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkRBQyBNb25vIExlZnQgRmlsdGVyIiwgUlQ1NjU5X1BXUl9ESUdfMiwKKwkJUlQ1NjU5X1BXUl9EQUNfTUZfTF9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkRBQyBNb25vIFJpZ2h0IEZpbHRlciIsIFJUNTY1OV9QV1JfRElHXzIsCisJCVJUNTY1OV9QV1JfREFDX01GX1JfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlN0ZXJlbyBEQUMgTUlYTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJcnQ1NjU5X3N0b19kYWNfbF9taXgsIEFSUkFZX1NJWkUocnQ1NjU5X3N0b19kYWNfbF9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlN0ZXJlbyBEQUMgTUlYUiIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJcnQ1NjU5X3N0b19kYWNfcl9taXgsIEFSUkFZX1NJWkUocnQ1NjU5X3N0b19kYWNfcl9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1vbm8gREFDIE1JWEwiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJ0NTY1OV9tb25vX2RhY19sX21peCwgQVJSQVlfU0laRShydDU2NTlfbW9ub19kYWNfbF9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1vbm8gREFDIE1JWFIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJ0NTY1OV9tb25vX2RhY19yX21peCwgQVJSQVlfU0laRShydDU2NTlfbW9ub19kYWNfcl9taXgpKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJEQUMgTUlYTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJnJ0NTY1OV9kaWdfZGFjX21peGxfbXV4KSwKKwlTTkRfU09DX0RBUE1fTVVYKCJEQUMgTUlYUiIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJnJ0NTY1OV9kaWdfZGFjX21peHJfbXV4KSwKKworCS8qIERBQ3MgKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkRBQyBMMSBQb3dlciIsIDEsIFJUNTY1OV9QV1JfRElHXzEsCisJCVJUNTY1OV9QV1JfREFDX0wxX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUMgUjEgUG93ZXIiLCAxLCBSVDU2NTlfUFdSX0RJR18xLAorCQlSVDU2NTlfUFdSX0RBQ19SMV9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIkRBQyBMMSIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiREFDIFIxIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKworCVNORF9TT0NfREFQTV9TVVBQTFkoIkRBQyBMMiBQb3dlciIsIFJUNTY1OV9QV1JfRElHXzEsCisJCVJUNTY1OV9QV1JfREFDX0wyX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiREFDIFIyIFBvd2VyIiwgUlQ1NjU5X1BXUl9ESUdfMSwKKwkJUlQ1NjU5X1BXUl9EQUNfUjJfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMgTDIiLCBOVUxMLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIkRBQyBSMiIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiREFDX1JFRiIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKKwkvKiBPVVQgTWl4ZXIgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIlNQSyBNSVhMIiwgUlQ1NjU5X1BXUl9NSVhFUiwgUlQ1NjU5X1BXUl9TTV9MX0JJVCwKKwkJMCwgcnQ1NjU5X3Nwa19sX21peCwgQVJSQVlfU0laRShydDU2NTlfc3BrX2xfbWl4KSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJTUEsgTUlYUiIsIFJUNTY1OV9QV1JfTUlYRVIsIFJUNTY1OV9QV1JfU01fUl9CSVQsCisJCTAsIHJ0NTY1OV9zcGtfcl9taXgsIEFSUkFZX1NJWkUocnQ1NjU5X3Nwa19yX21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiTU9OT1ZPTCBNSVgiLCBSVDU2NTlfUFdSX01JWEVSLCBSVDU2NTlfUFdSX01NX0JJVCwKKwkJMCwgcnQ1NjU5X21vbm92b2xfbWl4LCBBUlJBWV9TSVpFKHJ0NTY1OV9tb25vdm9sX21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiT1VUIE1JWEwiLCBSVDU2NTlfUFdSX01JWEVSLCBSVDU2NTlfUFdSX09NX0xfQklULAorCQkwLCBydDU2NTlfb3V0X2xfbWl4LCBBUlJBWV9TSVpFKHJ0NTY1OV9vdXRfbF9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk9VVCBNSVhSIiwgUlQ1NjU5X1BXUl9NSVhFUiwgUlQ1NjU5X1BXUl9PTV9SX0JJVCwKKwkJMCwgcnQ1NjU5X291dF9yX21peCwgQVJSQVlfU0laRShydDU2NTlfb3V0X3JfbWl4KSksCisKKwkvKiBPdXRwdXQgVm9sdW1lICovCisJU05EX1NPQ19EQVBNX1NXSVRDSCgiU1BLVk9MIEwiLCBSVDU2NTlfUFdSX1ZPTCwgUlQ1NjU5X1BXUl9TVl9MX0JJVCwgMCwKKwkJJnNwa3ZvbF9sX3N3aXRjaCksCisJU05EX1NPQ19EQVBNX1NXSVRDSCgiU1BLVk9MIFIiLCBSVDU2NTlfUFdSX1ZPTCwgUlQ1NjU5X1BXUl9TVl9SX0JJVCwgMCwKKwkJJnNwa3ZvbF9yX3N3aXRjaCksCisJU05EX1NPQ19EQVBNX1NXSVRDSCgiTU9OT1ZPTCIsIFJUNTY1OV9QV1JfVk9MLCBSVDU2NTlfUFdSX01WX0JJVCwgMCwKKwkJJm1vbm92b2xfc3dpdGNoKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIKCJPVVRWT0wgTCIsIFJUNTY1OV9QV1JfVk9MLCBSVDU2NTlfUFdSX09WX0xfQklULCAwLAorCQkmb3V0dm9sX2xfc3dpdGNoKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIKCJPVVRWT0wgUiIsIFJUNTY1OV9QV1JfVk9MLCBSVDU2NTlfUFdSX09WX1JfQklULCAwLAorCQkmb3V0dm9sX3Jfc3dpdGNoKSwKKworCS8qIFNQTy9NT05PL0hQTy9MT1VUICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJTUE8gTCBNSVgiLCBTTkRfU09DX05PUE0sIDAsIDAsIHJ0NTY1OV9zcG9fbF9taXgsCisJCUFSUkFZX1NJWkUocnQ1NjU5X3Nwb19sX21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiU1BPIFIgTUlYIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBydDU2NTlfc3BvX3JfbWl4LAorCQlBUlJBWV9TSVpFKHJ0NTY1OV9zcG9fcl9taXgpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1vbm8gTUlYIiwgU05EX1NPQ19OT1BNLCAwLAkwLCBydDU2NTlfbW9ub19taXgsCisJCUFSUkFZX1NJWkUocnQ1NjU5X21vbm9fbWl4KSksCisJU05EX1NPQ19EQVBNX01JWEVSKCJMT1VUIEwgTUlYIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBydDU2NTlfbG91dF9sX21peCwKKwkJQVJSQVlfU0laRShydDU2NTlfbG91dF9sX21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiTE9VVCBSIE1JWCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgcnQ1NjU5X2xvdXRfcl9taXgsCisJCUFSUkFZX1NJWkUocnQ1NjU5X2xvdXRfcl9taXgpKSwKKworCVNORF9TT0NfREFQTV9QR0FfUygiU1BLIEFtcCIsIDEsIFJUNTY1OV9QV1JfRElHXzEsIFJUNTY1OV9QV1JfQ0xTX0RfQklULAorCQkwLCBydDU2NTlfc3BrX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTUQgfAorCQlTTkRfU09DX0RBUE1fUFJFX1BNVSksCisJU05EX1NPQ19EQVBNX1BHQV9TKCJNb25vIEFtcCIsIDEsIFJUNTY1OV9QV1JfQU5MR18xLCBSVDU2NTlfUFdSX01BX0JJVCwKKwkJMCwgcnQ1NjU5X21vbm9fZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCVNORF9TT0NfREFQTV9QUkVfUE1VKSwKKwlTTkRfU09DX0RBUE1fUEdBX1MoIkhQIEFtcCIsIDEsIFNORF9TT0NfTk9QTSwgMCwgMCwgcnQ1NjU5X2hwX2V2ZW50LAorCQlTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJU05EX1NPQ19EQVBNX1BHQSgiTE9VVCBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiQ2hhcmdlIFB1bXAiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCXJ0NTY1OV9jaGFyZ2VfcHVtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCisJU05EX1NPQ19EQVBNX1NXSVRDSCgiU1BPIFBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmc3BvX3N3aXRjaCksCisJU05EX1NPQ19EQVBNX1NXSVRDSCgiTW9ubyBQbGF5YmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJm1vbm9fc3dpdGNoKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIKCJIUE8gTCBQbGF5YmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJmhwb19sX3N3aXRjaCksCisJU05EX1NPQ19EQVBNX1NXSVRDSCgiSFBPIFIgUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZocG9fcl9zd2l0Y2gpLAorCVNORF9TT0NfREFQTV9TV0lUQ0goIkxPVVQgTCBQbGF5YmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJmxvdXRfbF9zd2l0Y2gpLAorCVNORF9TT0NfREFQTV9TV0lUQ0goIkxPVVQgUiBQbGF5YmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJmxvdXRfcl9zd2l0Y2gpLAorCVNORF9TT0NfREFQTV9TV0lUQ0goIlBETSBMIFBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmcGRtX2xfc3dpdGNoKSwKKwlTTkRfU09DX0RBUE1fU1dJVENIKCJQRE0gUiBQbGF5YmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJnBkbV9yX3N3aXRjaCksCisKKwkvKiBQRE0gKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZKCJQRE0gUG93ZXIiLCBSVDU2NTlfUFdSX0RJR18yLAorCQlSVDU2NTlfUFdSX1BETTFfQklULCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJQRE0gTCBNdXgiLCBSVDU2NTlfUERNX09VVF9DVFJMLAorCQlSVDU2NTlfTV9QRE0xX0xfU0ZULCAxLCAmcnQ1NjU5X3BkbV9sX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiUERNIFIgTXV4IiwgUlQ1NjU5X1BETV9PVVRfQ1RSTCwKKwkJUlQ1NjU5X01fUERNMV9SX1NGVCwgMSwgJnJ0NTY1OV9wZG1fcl9tdXgpLAorCisJLyogU1BESUYgKi8KKwlTTkRfU09DX0RBUE1fTVVYKCJTUERJRiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZydDU2NTlfc3BkaWZfbXV4KSwKKworCVNORF9TT0NfREFQTV9TVVBQTFkoIlNZUyBDTEsgREVUIiwgUlQ1NjU5X0NMS19ERVQsIDMsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIkNMS0RFVCIsIFJUNTY1OV9DTEtfREVULCAwLCAwLCBOVUxMLCAwKSwKKworCS8qIE91dHB1dCBMaW5lcyAqLworCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT0wiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9SIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiU1BPTCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlNQT1IiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUTCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkxPVVRSIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTU9OT09VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlBETUwiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJQRE1SIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiU1BESUYiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHJ0NTY1OV9kYXBtX3JvdXRlc1tdID0geworCS8qUExMKi8KKwl7ICJBREMgU3RlcmVvMSBGaWx0ZXIiLCBOVUxMLCAiUExMIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAorCXsgIkFEQyBTdGVyZW8yIEZpbHRlciIsIE5VTEwsICJQTEwiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCisJeyAiQURDIE1vbm8gTGVmdCBGaWx0ZXIiLCBOVUxMLCAiUExMIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAorCXsgIkFEQyBNb25vIFJpZ2h0IEZpbHRlciIsIE5VTEwsICJQTEwiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCisJeyAiREFDIFN0ZXJlbzEgRmlsdGVyIiwgTlVMTCwgIlBMTCIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKKwl7ICJEQUMgTW9ubyBMZWZ0IEZpbHRlciIsIE5VTEwsICJQTEwiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCisJeyAiREFDIE1vbm8gUmlnaHQgRmlsdGVyIiwgTlVMTCwgIlBMTCIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKKworCS8qQVNSQyovCisJeyAiQURDIFN0ZXJlbzEgRmlsdGVyIiwgTlVMTCwgIkFEQyBTVE8xIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiQURDIE1vbm8gTGVmdCBGaWx0ZXIiLCBOVUxMLCAiQURDIE1vbm8gTCBBU1JDIiwgaXNfdXNpbmdfYXNyYyB9LAorCXsgIkFEQyBNb25vIFJpZ2h0IEZpbHRlciIsIE5VTEwsICJBREMgTW9ubyBSIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiREFDIE1vbm8gTGVmdCBGaWx0ZXIiLCBOVUxMLCAiREFDIE1vbm8gTCBBU1JDIiwgaXNfdXNpbmdfYXNyYyB9LAorCXsgIkRBQyBNb25vIFJpZ2h0IEZpbHRlciIsIE5VTEwsICJEQUMgTW9ubyBSIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiREFDIFN0ZXJlbzEgRmlsdGVyIiwgTlVMTCwgIkRBQyBTVE8gQVNSQyIsIGlzX3VzaW5nX2FzcmMgfSwKKworCXsgIlNZUyBDTEsgREVUIiwgTlVMTCwgIkNMS0RFVCIgfSwKKworCXsgIkkyUzEiLCBOVUxMLCAiSTJTMSBBU1JDIiB9LAorCXsgIkkyUzIiLCBOVUxMLCAiSTJTMiBBU1JDIiB9LAorCXsgIkkyUzMiLCBOVUxMLCAiSTJTMyBBU1JDIiB9LAorCisJeyAiSU4xUCIsIE5VTEwsICJMRE8yIiB9LAorCXsgIklOMlAiLCBOVUxMLCAiTERPMiIgfSwKKwl7ICJJTjNQIiwgTlVMTCwgIkxETzIiIH0sCisJeyAiSU40UCIsIE5VTEwsICJMRE8yIiB9LAorCisJeyAiRE1JQzEiLCBOVUxMLCAiRE1JQyBMMSIgfSwKKwl7ICJETUlDMSIsIE5VTEwsICJETUlDIFIxIiB9LAorCXsgIkRNSUMyIiwgTlVMTCwgIkRNSUMgTDIiIH0sCisJeyAiRE1JQzIiLCBOVUxMLCAiRE1JQyBSMiIgfSwKKworCXsgIkJTVDEiLCBOVUxMLCAiSU4xUCIgfSwKKwl7ICJCU1QxIiwgTlVMTCwgIklOMU4iIH0sCisJeyAiQlNUMSIsIE5VTEwsICJCU1QxIFBvd2VyIiB9LAorCXsgIkJTVDIiLCBOVUxMLCAiSU4yUCIgfSwKKwl7ICJCU1QyIiwgTlVMTCwgIklOMk4iIH0sCisJeyAiQlNUMiIsIE5VTEwsICJCU1QyIFBvd2VyIiB9LAorCXsgIkJTVDMiLCBOVUxMLCAiSU4zUCIgfSwKKwl7ICJCU1QzIiwgTlVMTCwgIklOM04iIH0sCisJeyAiQlNUMyIsIE5VTEwsICJCU1QzIFBvd2VyIiB9LAorCXsgIkJTVDQiLCBOVUxMLCAiSU40UCIgfSwKKwl7ICJCU1Q0IiwgTlVMTCwgIklONE4iIH0sCisJeyAiQlNUNCIsIE5VTEwsICJCU1Q0IFBvd2VyIiB9LAorCisJeyAiSU5MIFZPTCIsIE5VTEwsICJJTjJQIiB9LAorCXsgIklOUiBWT0wiLCBOVUxMLCAiSU4yTiIgfSwKKworCXsgIlJFQ01JWDFMIiwgIlNQS1ZPTEwgU3dpdGNoIiwgIlNQS1ZPTCBMIiB9LAorCXsgIlJFQ01JWDFMIiwgIklOTCBTd2l0Y2giLCAiSU5MIFZPTCIgfSwKKwl7ICJSRUNNSVgxTCIsICJCU1Q0IFN3aXRjaCIsICJCU1Q0IiB9LAorCXsgIlJFQ01JWDFMIiwgIkJTVDMgU3dpdGNoIiwgIkJTVDMiIH0sCisJeyAiUkVDTUlYMUwiLCAiQlNUMiBTd2l0Y2giLCAiQlNUMiIgfSwKKwl7ICJSRUNNSVgxTCIsICJCU1QxIFN3aXRjaCIsICJCU1QxIiB9LAorCisJeyAiUkVDTUlYMVIiLCAiSFBPVk9MUiBTd2l0Y2giLCAiSFBPIFIgUGxheWJhY2siIH0sCisJeyAiUkVDTUlYMVIiLCAiSU5SIFN3aXRjaCIsICJJTlIgVk9MIiB9LAorCXsgIlJFQ01JWDFSIiwgIkJTVDQgU3dpdGNoIiwgIkJTVDQiIH0sCisJeyAiUkVDTUlYMVIiLCAiQlNUMyBTd2l0Y2giLCAiQlNUMyIgfSwKKwl7ICJSRUNNSVgxUiIsICJCU1QyIFN3aXRjaCIsICJCU1QyIiB9LAorCXsgIlJFQ01JWDFSIiwgIkJTVDEgU3dpdGNoIiwgIkJTVDEiIH0sCisKKwl7ICJSRUNNSVgyTCIsICJTUEtWT0xMIFN3aXRjaCIsICJTUEtWT0wgTCIgfSwKKwl7ICJSRUNNSVgyTCIsICJPVVRWT0xMIFN3aXRjaCIsICJPVVRWT0wgTCIgfSwKKwl7ICJSRUNNSVgyTCIsICJCU1Q0IFN3aXRjaCIsICJCU1Q0IiB9LAorCXsgIlJFQ01JWDJMIiwgIkJTVDMgU3dpdGNoIiwgIkJTVDMiIH0sCisJeyAiUkVDTUlYMkwiLCAiQlNUMiBTd2l0Y2giLCAiQlNUMiIgfSwKKwl7ICJSRUNNSVgyTCIsICJCU1QxIFN3aXRjaCIsICJCU1QxIiB9LAorCisJeyAiUkVDTUlYMlIiLCAiTU9OT1ZPTCBTd2l0Y2giLCAiTU9OT1ZPTCIgfSwKKwl7ICJSRUNNSVgyUiIsICJPVVRWT0xSIFN3aXRjaCIsICJPVVRWT0wgUiIgfSwKKwl7ICJSRUNNSVgyUiIsICJCU1Q0IFN3aXRjaCIsICJCU1Q0IiB9LAorCXsgIlJFQ01JWDJSIiwgIkJTVDMgU3dpdGNoIiwgIkJTVDMiIH0sCisJeyAiUkVDTUlYMlIiLCAiQlNUMiBTd2l0Y2giLCAiQlNUMiIgfSwKKwl7ICJSRUNNSVgyUiIsICJCU1QxIFN3aXRjaCIsICJCU1QxIiB9LAorCisJeyAiQURDMSBMIiwgTlVMTCwgIlJFQ01JWDFMIiB9LAorCXsgIkFEQzEgTCIsIE5VTEwsICJBREMxIEwgUG93ZXIiIH0sCisJeyAiQURDMSBMIiwgTlVMTCwgIkFEQzEgY2xvY2siIH0sCisJeyAiQURDMSBSIiwgTlVMTCwgIlJFQ01JWDFSIiB9LAorCXsgIkFEQzEgUiIsIE5VTEwsICJBREMxIFIgUG93ZXIiIH0sCisJeyAiQURDMSBSIiwgTlVMTCwgIkFEQzEgY2xvY2siIH0sCisKKwl7ICJBREMyIEwiLCBOVUxMLCAiUkVDTUlYMkwiIH0sCisJeyAiQURDMiBMIiwgTlVMTCwgIkFEQzIgTCBQb3dlciIgfSwKKwl7ICJBREMyIEwiLCBOVUxMLCAiQURDMiBjbG9jayIgfSwKKwl7ICJBREMyIFIiLCBOVUxMLCAiUkVDTUlYMlIiIH0sCisJeyAiQURDMiBSIiwgTlVMTCwgIkFEQzIgUiBQb3dlciIgfSwKKwl7ICJBREMyIFIiLCBOVUxMLCAiQURDMiBjbG9jayIgfSwKKworCXsgIkRNSUMgTDEiLCBOVUxMLCAiRE1JQyBDTEsiIH0sCisJeyAiRE1JQyBMMSIsIE5VTEwsICJETUlDMSBQb3dlciIgfSwKKwl7ICJETUlDIFIxIiwgTlVMTCwgIkRNSUMgQ0xLIiB9LAorCXsgIkRNSUMgUjEiLCBOVUxMLCAiRE1JQzEgUG93ZXIiIH0sCisJeyAiRE1JQyBMMiIsIE5VTEwsICJETUlDIENMSyIgfSwKKwl7ICJETUlDIEwyIiwgTlVMTCwgIkRNSUMyIFBvd2VyIiB9LAorCXsgIkRNSUMgUjIiLCBOVUxMLCAiRE1JQyBDTEsiIH0sCisJeyAiRE1JQyBSMiIsIE5VTEwsICJETUlDMiBQb3dlciIgfSwKKworCXsgIlN0ZXJlbzEgRE1JQyBMIE11eCIsICJETUlDMSIsICJETUlDIEwxIiB9LAorCXsgIlN0ZXJlbzEgRE1JQyBMIE11eCIsICJETUlDMiIsICJETUlDIEwyIiB9LAorCisJeyAiU3RlcmVvMSBETUlDIFIgTXV4IiwgIkRNSUMxIiwgIkRNSUMgUjEiIH0sCisJeyAiU3RlcmVvMSBETUlDIFIgTXV4IiwgIkRNSUMyIiwgIkRNSUMgUjIiIH0sCisKKwl7ICJNb25vIERNSUMgTCBNdXgiLCAiRE1JQzEgTCIsICJETUlDIEwxIiB9LAorCXsgIk1vbm8gRE1JQyBMIE11eCIsICJETUlDMiBMIiwgIkRNSUMgTDIiIH0sCisKKwl7ICJNb25vIERNSUMgUiBNdXgiLCAiRE1JQzEgUiIsICJETUlDIFIxIiB9LAorCXsgIk1vbm8gRE1JQyBSIE11eCIsICJETUlDMiBSIiwgIkRNSUMgUjIiIH0sCisKKwl7ICJTdGVyZW8xIEFEQyBMIE11eCIsICJBREMxIiwgIkFEQzEgTCIgfSwKKwl7ICJTdGVyZW8xIEFEQyBMIE11eCIsICJBREMyIiwgIkFEQzIgTCIgfSwKKwl7ICJTdGVyZW8xIEFEQyBSIE11eCIsICJBREMxIiwgIkFEQzEgUiIgfSwKKwl7ICJTdGVyZW8xIEFEQyBSIE11eCIsICJBREMyIiwgIkFEQzIgUiIgfSwKKworCXsgIlN0ZXJlbzEgQURDIEwxIE11eCIsICJBREMiLCAiU3RlcmVvMSBBREMgTCBNdXgiIH0sCisJeyAiU3RlcmVvMSBBREMgTDEgTXV4IiwgIkRBQyBNSVgiLCAiREFDIE1JWEwiIH0sCisJeyAiU3RlcmVvMSBBREMgTDIgTXV4IiwgIkRNSUMiLCAiU3RlcmVvMSBETUlDIEwgTXV4IiB9LAorCXsgIlN0ZXJlbzEgQURDIEwyIE11eCIsICJEQUMgTUlYIiwgIkRBQyBNSVhMIiB9LAorCisJeyAiU3RlcmVvMSBBREMgUjEgTXV4IiwgIkFEQyIsICJTdGVyZW8xIEFEQyBSIE11eCIgfSwKKwl7ICJTdGVyZW8xIEFEQyBSMSBNdXgiLCAiREFDIE1JWCIsICJEQUMgTUlYUiIgfSwKKwl7ICJTdGVyZW8xIEFEQyBSMiBNdXgiLCAiRE1JQyIsICJTdGVyZW8xIERNSUMgUiBNdXgiIH0sCisJeyAiU3RlcmVvMSBBREMgUjIgTXV4IiwgIkRBQyBNSVgiLCAiREFDIE1JWFIiIH0sCisKKwl7ICJNb25vIEFEQyBMIE11eCIsICJBREMxIEwiLCAiQURDMSBMIiB9LAorCXsgIk1vbm8gQURDIEwgTXV4IiwgIkFEQzEgUiIsICJBREMxIFIiIH0sCisJeyAiTW9ubyBBREMgTCBNdXgiLCAiQURDMiBMIiwgIkFEQzIgTCIgfSwKKwl7ICJNb25vIEFEQyBMIE11eCIsICJBREMyIFIiLCAiQURDMiBSIiB9LAorCisJeyAiTW9ubyBBREMgUiBNdXgiLCAiQURDMSBMIiwgIkFEQzEgTCIgfSwKKwl7ICJNb25vIEFEQyBSIE11eCIsICJBREMxIFIiLCAiQURDMSBSIiB9LAorCXsgIk1vbm8gQURDIFIgTXV4IiwgIkFEQzIgTCIsICJBREMyIEwiIH0sCisJeyAiTW9ubyBBREMgUiBNdXgiLCAiQURDMiBSIiwgIkFEQzIgUiIgfSwKKworCXsgIk1vbm8gQURDIEwyIE11eCIsICJETUlDIiwgIk1vbm8gRE1JQyBMIE11eCIgfSwKKwl7ICJNb25vIEFEQyBMMiBNdXgiLCAiTW9ubyBEQUMgTUlYTCIsICJNb25vIERBQyBNSVhMIiB9LAorCXsgIk1vbm8gQURDIEwxIE11eCIsICJNb25vIERBQyBNSVhMIiwgIk1vbm8gREFDIE1JWEwiIH0sCisJeyAiTW9ubyBBREMgTDEgTXV4IiwgIkFEQyIsICAiTW9ubyBBREMgTCBNdXgiIH0sCisKKwl7ICJNb25vIEFEQyBSMSBNdXgiLCAiTW9ubyBEQUMgTUlYUiIsICJNb25vIERBQyBNSVhSIiB9LAorCXsgIk1vbm8gQURDIFIxIE11eCIsICJBREMiLCAiTW9ubyBBREMgUiBNdXgiIH0sCisJeyAiTW9ubyBBREMgUjIgTXV4IiwgIkRNSUMiLCAiTW9ubyBETUlDIFIgTXV4IiB9LAorCXsgIk1vbm8gQURDIFIyIE11eCIsICJNb25vIERBQyBNSVhSIiwgIk1vbm8gREFDIE1JWFIiIH0sCisKKwl7ICJTdGVyZW8xIEFEQyBNSVhMIiwgIkFEQzEgU3dpdGNoIiwgIlN0ZXJlbzEgQURDIEwxIE11eCIgfSwKKwl7ICJTdGVyZW8xIEFEQyBNSVhMIiwgIkFEQzIgU3dpdGNoIiwgIlN0ZXJlbzEgQURDIEwyIE11eCIgfSwKKwl7ICJTdGVyZW8xIEFEQyBNSVhMIiwgTlVMTCwgIkFEQyBTdGVyZW8xIEZpbHRlciIgfSwKKworCXsgIlN0ZXJlbzEgQURDIE1JWFIiLCAiQURDMSBTd2l0Y2giLCAiU3RlcmVvMSBBREMgUjEgTXV4IiB9LAorCXsgIlN0ZXJlbzEgQURDIE1JWFIiLCAiQURDMiBTd2l0Y2giLCAiU3RlcmVvMSBBREMgUjIgTXV4IiB9LAorCXsgIlN0ZXJlbzEgQURDIE1JWFIiLCBOVUxMLCAiQURDIFN0ZXJlbzEgRmlsdGVyIiB9LAorCisJeyAiTW9ubyBBREMgTUlYTCIsICJBREMxIFN3aXRjaCIsICJNb25vIEFEQyBMMSBNdXgiIH0sCisJeyAiTW9ubyBBREMgTUlYTCIsICJBREMyIFN3aXRjaCIsICJNb25vIEFEQyBMMiBNdXgiIH0sCisJeyAiTW9ubyBBREMgTUlYTCIsIE5VTEwsICJBREMgTW9ubyBMZWZ0IEZpbHRlciIgfSwKKworCXsgIk1vbm8gQURDIE1JWFIiLCAiQURDMSBTd2l0Y2giLCAiTW9ubyBBREMgUjEgTXV4IiB9LAorCXsgIk1vbm8gQURDIE1JWFIiLCAiQURDMiBTd2l0Y2giLCAiTW9ubyBBREMgUjIgTXV4IiB9LAorCXsgIk1vbm8gQURDIE1JWFIiLCBOVUxMLCAiQURDIE1vbm8gUmlnaHQgRmlsdGVyIiB9LAorCisJeyAiU3RlcmVvMSBBREMgVm9sdW1lIEwiLCBOVUxMLCAiU3RlcmVvMSBBREMgTUlYTCIgfSwKKwl7ICJTdGVyZW8xIEFEQyBWb2x1bWUgUiIsIE5VTEwsICJTdGVyZW8xIEFEQyBNSVhSIiB9LAorCisJeyAiSUZfQURDMSIsIE5VTEwsICJTdGVyZW8xIEFEQyBWb2x1bWUgTCIgfSwKKwl7ICJJRl9BREMxIiwgTlVMTCwgIlN0ZXJlbzEgQURDIFZvbHVtZSBSIiB9LAorCXsgIklGX0FEQzIiLCBOVUxMLCAiTW9ubyBBREMgTUlYTCIgfSwKKwl7ICJJRl9BREMyIiwgTlVMTCwgIk1vbm8gQURDIE1JWFIiIH0sCisKKwl7ICJURE0gQUQxOkFEMjpEQUMiLCBOVUxMLCAiSUZfQURDMSIgfSwKKwl7ICJURE0gQUQxOkFEMjpEQUMiLCBOVUxMLCAiSUZfQURDMiIgfSwKKwl7ICJURE0gQUQxOkFEMjpEQUMiLCBOVUxMLCAiREFDX1JFRiIgfSwKKwl7ICJURE0gQUQyOkRBQyIsIE5VTEwsICJJRl9BREMyIiB9LAorCXsgIlRETSBBRDI6REFDIiwgTlVMTCwgIkRBQ19SRUYiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMTpBRDI6REFDOk5VTCIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMTpBRDI6TlVMOkRBQyIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMTpEQUM6QUQyOk5VTCIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMTpEQUM6TlVMOkFEMiIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMTpOVUw6REFDOkFEMiIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMTpOVUw6QUQyOkRBQyIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMjpBRDE6REFDOk5VTCIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMjpBRDE6TlVMOkRBQyIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMjpEQUM6QUQxOk5VTCIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMjpEQUM6TlVMOkFEMSIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMjpOVUw6REFDOkFEMSIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkFEMTpOVUw6QUQxOkRBQyIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkRBQzpBRDE6QUQyOk5VTCIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkRBQzpBRDE6TlVMOkFEMiIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkRBQzpBRDI6QUQxOk5VTCIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkRBQzpBRDI6TlVMOkFEMSIsICJURE0gQUQxOkFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIkRBQzpOVUw6REFDOkFEMiIsICJURE0gQUQyOkRBQyIgfSwKKwl7ICJURE0gRGF0YSBNdXgiLCAiREFDOk5VTDpBRDI6REFDIiwgIlRETSBBRDI6REFDIiB9LAorCXsgIlRETSBEYXRhIE11eCIsICJOVUw6QUQxOkFEMjpEQUMiLCAiVERNIEFEMTpBRDI6REFDIiB9LAorCXsgIlRETSBEYXRhIE11eCIsICJOVUw6QUQxOkRBQzpBRDIiLCAiVERNIEFEMTpBRDI6REFDIiB9LAorCXsgIlRETSBEYXRhIE11eCIsICJOVUw6QUQyOkFEMTpEQUMiLCAiVERNIEFEMTpBRDI6REFDIiB9LAorCXsgIlRETSBEYXRhIE11eCIsICJOVUw6QUQyOkRBQzpBRDEiLCAiVERNIEFEMTpBRDI6REFDIiB9LAorCXsgIlRETSBEYXRhIE11eCIsICJOVUw6REFDOkRBQzpBRDIiLCAiVERNIEFEMjpEQUMiIH0sCisJeyAiVERNIERhdGEgTXV4IiwgIk5VTDpEQUM6QUQyOkRBQyIsICJURE0gQUQyOkRBQyIgfSwKKwl7ICJJRjEgMDEgQURDIFN3YXAgTXV4IiwgIkwvUiIsICJURE0gRGF0YSBNdXgiIH0sCisJeyAiSUYxIDAxIEFEQyBTd2FwIE11eCIsICJSL0wiLCAiVERNIERhdGEgTXV4IiB9LAorCXsgIklGMSAwMSBBREMgU3dhcCBNdXgiLCAiTC9MIiwgIlRETSBEYXRhIE11eCIgfSwKKwl7ICJJRjEgMDEgQURDIFN3YXAgTXV4IiwgIlIvUiIsICJURE0gRGF0YSBNdXgiIH0sCisJeyAiSUYxIDIzIEFEQyBTd2FwIE11eCIsICJML1IiLCAiVERNIERhdGEgTXV4IiB9LAorCXsgIklGMSAyMyBBREMgU3dhcCBNdXgiLCAiUi9MIiwgIlRETSBEYXRhIE11eCIgfSwKKwl7ICJJRjEgMjMgQURDIFN3YXAgTXV4IiwgIkwvTCIsICJURE0gRGF0YSBNdXgiIH0sCisJeyAiSUYxIDIzIEFEQyBTd2FwIE11eCIsICJSL1IiLCAiVERNIERhdGEgTXV4IiB9LAorCXsgIklGMSA0NSBBREMgU3dhcCBNdXgiLCAiTC9SIiwgIlRETSBEYXRhIE11eCIgfSwKKwl7ICJJRjEgNDUgQURDIFN3YXAgTXV4IiwgIlIvTCIsICJURE0gRGF0YSBNdXgiIH0sCisJeyAiSUYxIDQ1IEFEQyBTd2FwIE11eCIsICJML0wiLCAiVERNIERhdGEgTXV4IiB9LAorCXsgIklGMSA0NSBBREMgU3dhcCBNdXgiLCAiUi9SIiwgIlRETSBEYXRhIE11eCIgfSwKKwl7ICJJRjEgNjcgQURDIFN3YXAgTXV4IiwgIkwvUiIsICJURE0gRGF0YSBNdXgiIH0sCisJeyAiSUYxIDY3IEFEQyBTd2FwIE11eCIsICJSL0wiLCAiVERNIERhdGEgTXV4IiB9LAorCXsgIklGMSA2NyBBREMgU3dhcCBNdXgiLCAiTC9MIiwgIlRETSBEYXRhIE11eCIgfSwKKwl7ICJJRjEgNjcgQURDIFN3YXAgTXV4IiwgIlIvUiIsICJURE0gRGF0YSBNdXgiIH0sCisJeyAiSUYxIEFEQyIsIE5VTEwsICJJRjEgMDEgQURDIFN3YXAgTXV4IiB9LAorCXsgIklGMSBBREMiLCBOVUxMLCAiSUYxIDIzIEFEQyBTd2FwIE11eCIgfSwKKwl7ICJJRjEgQURDIiwgTlVMTCwgIklGMSA0NSBBREMgU3dhcCBNdXgiIH0sCisJeyAiSUYxIEFEQyIsIE5VTEwsICJJRjEgNjcgQURDIFN3YXAgTXV4IiB9LAorCXsgIklGMSBBREMiLCBOVUxMLCAiSTJTMSIgfSwKKworCXsgIklGMiBBREMgTXV4IiwgIklGX0FEQzEiLCAiSUZfQURDMSIgfSwKKwl7ICJJRjIgQURDIE11eCIsICJJRl9BREMyIiwgIklGX0FEQzIiIH0sCisJeyAiSUYyIEFEQyBNdXgiLCAiSUZfQURDMyIsICJJRl9BREMzIiB9LAorCXsgIklGMiBBREMgTXV4IiwgIkRBQ19SRUYiLCAiREFDX1JFRiIgfSwKKwl7ICJJRjIgQURDIiwgTlVMTCwgIklGMiBBREMgTXV4In0sCisJeyAiSUYyIEFEQyIsIE5VTEwsICJJMlMyIiB9LAorCisJeyAiSUYzIEFEQyBNdXgiLCAiSUZfQURDMSIsICJJRl9BREMxIiB9LAorCXsgIklGMyBBREMgTXV4IiwgIklGX0FEQzIiLCAiSUZfQURDMiIgfSwKKwl7ICJJRjMgQURDIE11eCIsICJTdGVyZW8yX0FEQ19ML1IiLCAiU3RlcmVvMiBBREMgTFIiIH0sCisJeyAiSUYzIEFEQyBNdXgiLCAiREFDX1JFRiIsICJEQUNfUkVGIiB9LAorCXsgIklGMyBBREMiLCBOVUxMLCAiSUYzIEFEQyBNdXgifSwKKwl7ICJJRjMgQURDIiwgTlVMTCwgIkkyUzMiIH0sCisKKwl7ICJBSUYxVFgiLCBOVUxMLCAiSUYxIEFEQyIgfSwKKwl7ICJJRjIgQURDIFN3YXAgTXV4IiwgIkwvUiIsICJJRjIgQURDIiB9LAorCXsgIklGMiBBREMgU3dhcCBNdXgiLCAiUi9MIiwgIklGMiBBREMiIH0sCisJeyAiSUYyIEFEQyBTd2FwIE11eCIsICJML0wiLCAiSUYyIEFEQyIgfSwKKwl7ICJJRjIgQURDIFN3YXAgTXV4IiwgIlIvUiIsICJJRjIgQURDIiB9LAorCXsgIkFJRjJUWCIsIE5VTEwsICJJRjIgQURDIFN3YXAgTXV4IiB9LAorCXsgIklGMyBBREMgU3dhcCBNdXgiLCAiTC9SIiwgIklGMyBBREMiIH0sCisJeyAiSUYzIEFEQyBTd2FwIE11eCIsICJSL0wiLCAiSUYzIEFEQyIgfSwKKwl7ICJJRjMgQURDIFN3YXAgTXV4IiwgIkwvTCIsICJJRjMgQURDIiB9LAorCXsgIklGMyBBREMgU3dhcCBNdXgiLCAiUi9SIiwgIklGMyBBREMiIH0sCisJeyAiQUlGM1RYIiwgTlVMTCwgIklGMyBBREMgU3dhcCBNdXgiIH0sCisKKwl7ICJJRjEgREFDMSIsIE5VTEwsICJBSUYxUlgiIH0sCisJeyAiSUYxIERBQzIiLCBOVUxMLCAiQUlGMVJYIiB9LAorCXsgIklGMiBEQUMgU3dhcCBNdXgiLCAiTC9SIiwgIkFJRjJSWCIgfSwKKwl7ICJJRjIgREFDIFN3YXAgTXV4IiwgIlIvTCIsICJBSUYyUlgiIH0sCisJeyAiSUYyIERBQyBTd2FwIE11eCIsICJML0wiLCAiQUlGMlJYIiB9LAorCXsgIklGMiBEQUMgU3dhcCBNdXgiLCAiUi9SIiwgIkFJRjJSWCIgfSwKKwl7ICJJRjIgREFDIiwgTlVMTCwgIklGMiBEQUMgU3dhcCBNdXgiIH0sCisJeyAiSUYzIERBQyBTd2FwIE11eCIsICJML1IiLCAiQUlGM1JYIiB9LAorCXsgIklGMyBEQUMgU3dhcCBNdXgiLCAiUi9MIiwgIkFJRjNSWCIgfSwKKwl7ICJJRjMgREFDIFN3YXAgTXV4IiwgIkwvTCIsICJBSUYzUlgiIH0sCisJeyAiSUYzIERBQyBTd2FwIE11eCIsICJSL1IiLCAiQUlGM1JYIiB9LAorCXsgIklGMyBEQUMiLCBOVUxMLCAiSUYzIERBQyBTd2FwIE11eCIgfSwKKworCXsgIklGMSBEQUMxIiwgTlVMTCwgIkkyUzEiIH0sCisJeyAiSUYxIERBQzIiLCBOVUxMLCAiSTJTMSIgfSwKKwl7ICJJRjIgREFDIiwgTlVMTCwgIkkyUzIiIH0sCisJeyAiSUYzIERBQyIsIE5VTEwsICJJMlMzIiB9LAorCisJeyAiSUYxIERBQzIgTCIsIE5VTEwsICJJRjEgREFDMiIgfSwKKwl7ICJJRjEgREFDMiBSIiwgTlVMTCwgIklGMSBEQUMyIiB9LAorCXsgIklGMSBEQUMxIEwiLCBOVUxMLCAiSUYxIERBQzEiIH0sCisJeyAiSUYxIERBQzEgUiIsIE5VTEwsICJJRjEgREFDMSIgfSwKKwl7ICJJRjIgREFDIEwiLCBOVUxMLCAiSUYyIERBQyIgfSwKKwl7ICJJRjIgREFDIFIiLCBOVUxMLCAiSUYyIERBQyIgfSwKKwl7ICJJRjMgREFDIEwiLCBOVUxMLCAiSUYzIERBQyIgfSwKKwl7ICJJRjMgREFDIFIiLCBOVUxMLCAiSUYzIERBQyIgfSwKKworCXsgIkRBQyBMMSBNdXgiLCAiSUYxIERBQzEiLCAiSUYxIERBQzEgTCIgfSwKKwl7ICJEQUMgTDEgTXV4IiwgIklGMiBEQUMiLCAiSUYyIERBQyBMIiB9LAorCXsgIkRBQyBMMSBNdXgiLCAiSUYzIERBQyIsICJJRjMgREFDIEwiIH0sCisJeyAiREFDIEwxIE11eCIsIE5VTEwsICJEQUMgU3RlcmVvMSBGaWx0ZXIiIH0sCisKKwl7ICJEQUMgUjEgTXV4IiwgIklGMSBEQUMxIiwgIklGMSBEQUMxIFIiIH0sCisJeyAiREFDIFIxIE11eCIsICJJRjIgREFDIiwgIklGMiBEQUMgUiIgfSwKKwl7ICJEQUMgUjEgTXV4IiwgIklGMyBEQUMiLCAiSUYzIERBQyBSIiB9LAorCXsgIkRBQyBSMSBNdXgiLCBOVUxMLCAiREFDIFN0ZXJlbzEgRmlsdGVyIiB9LAorCisJeyAiREFDMSBNSVhMIiwgIlN0ZXJlbyBBREMgU3dpdGNoIiwgIlN0ZXJlbzEgQURDIFZvbHVtZSBMIiB9LAorCXsgIkRBQzEgTUlYTCIsICJEQUMxIFN3aXRjaCIsICJEQUMgTDEgTXV4IiB9LAorCXsgIkRBQzEgTUlYUiIsICJTdGVyZW8gQURDIFN3aXRjaCIsICJTdGVyZW8xIEFEQyBWb2x1bWUgUiIgfSwKKwl7ICJEQUMxIE1JWFIiLCAiREFDMSBTd2l0Y2giLCAiREFDIFIxIE11eCIgfSwKKworCXsgIkRBQ19SRUYiLCBOVUxMLCAiREFDMSBNSVhMIiB9LAorCXsgIkRBQ19SRUYiLCBOVUxMLCAiREFDMSBNSVhSIiB9LAorCisJeyAiREFDIEwyIE11eCIsICJJRjEgREFDMiIsICJJRjEgREFDMiBMIiB9LAorCXsgIkRBQyBMMiBNdXgiLCAiSUYyIERBQyIsICJJRjIgREFDIEwiIH0sCisJeyAiREFDIEwyIE11eCIsICJJRjMgREFDIiwgIklGMyBEQUMgTCIgfSwKKwl7ICJEQUMgTDIgTXV4IiwgIk1vbm8gQURDIE1JWCIsICJNb25vIEFEQyBNSVhMIiB9LAorCXsgIkRBQyBMMiBNdXgiLCBOVUxMLCAiREFDIE1vbm8gTGVmdCBGaWx0ZXIiIH0sCisKKwl7ICJEQUMgUjIgTXV4IiwgIklGMSBEQUMyIiwgIklGMSBEQUMyIFIiIH0sCisJeyAiREFDIFIyIE11eCIsICJJRjIgREFDIiwgIklGMiBEQUMgUiIgfSwKKwl7ICJEQUMgUjIgTXV4IiwgIklGMyBEQUMiLCAiSUYzIERBQyBSIiB9LAorCXsgIkRBQyBSMiBNdXgiLCAiTW9ubyBBREMgTUlYIiwgIk1vbm8gQURDIE1JWFIiIH0sCisJeyAiREFDIFIyIE11eCIsIE5VTEwsICJEQUMgTW9ubyBSaWdodCBGaWx0ZXIiIH0sCisKKwl7ICJTdGVyZW8gREFDIE1JWEwiLCAiREFDIEwxIFN3aXRjaCIsICJEQUMxIE1JWEwiIH0sCisJeyAiU3RlcmVvIERBQyBNSVhMIiwgIkRBQyBSMSBTd2l0Y2giLCAiREFDMSBNSVhSIiB9LAorCXsgIlN0ZXJlbyBEQUMgTUlYTCIsICJEQUMgTDIgU3dpdGNoIiwgIkRBQyBMMiBNdXgiIH0sCisJeyAiU3RlcmVvIERBQyBNSVhMIiwgIkRBQyBSMiBTd2l0Y2giLCAiREFDIFIyIE11eCIgfSwKKworCXsgIlN0ZXJlbyBEQUMgTUlYUiIsICJEQUMgUjEgU3dpdGNoIiwgIkRBQzEgTUlYUiIgfSwKKwl7ICJTdGVyZW8gREFDIE1JWFIiLCAiREFDIEwxIFN3aXRjaCIsICJEQUMxIE1JWEwiIH0sCisJeyAiU3RlcmVvIERBQyBNSVhSIiwgIkRBQyBMMiBTd2l0Y2giLCAiREFDIEwyIE11eCIgfSwKKwl7ICJTdGVyZW8gREFDIE1JWFIiLCAiREFDIFIyIFN3aXRjaCIsICJEQUMgUjIgTXV4IiB9LAorCisJeyAiTW9ubyBEQUMgTUlYTCIsICJEQUMgTDEgU3dpdGNoIiwgIkRBQzEgTUlYTCIgfSwKKwl7ICJNb25vIERBQyBNSVhMIiwgIkRBQyBSMSBTd2l0Y2giLCAiREFDMSBNSVhSIiB9LAorCXsgIk1vbm8gREFDIE1JWEwiLCAiREFDIEwyIFN3aXRjaCIsICJEQUMgTDIgTXV4IiB9LAorCXsgIk1vbm8gREFDIE1JWEwiLCAiREFDIFIyIFN3aXRjaCIsICJEQUMgUjIgTXV4IiB9LAorCXsgIk1vbm8gREFDIE1JWFIiLCAiREFDIEwxIFN3aXRjaCIsICJEQUMxIE1JWEwiIH0sCisJeyAiTW9ubyBEQUMgTUlYUiIsICJEQUMgUjEgU3dpdGNoIiwgIkRBQzEgTUlYUiIgfSwKKwl7ICJNb25vIERBQyBNSVhSIiwgIkRBQyBSMiBTd2l0Y2giLCAiREFDIFIyIE11eCIgfSwKKwl7ICJNb25vIERBQyBNSVhSIiwgIkRBQyBMMiBTd2l0Y2giLCAiREFDIEwyIE11eCIgfSwKKworCXsgIkRBQyBNSVhMIiwgIlN0ZXJlbyBEQUMgTWl4ZXIiLCAiU3RlcmVvIERBQyBNSVhMIiB9LAorCXsgIkRBQyBNSVhMIiwgIk1vbm8gREFDIE1peGVyIiwgIk1vbm8gREFDIE1JWEwiIH0sCisJeyAiREFDIE1JWFIiLCAiU3RlcmVvIERBQyBNaXhlciIsICJTdGVyZW8gREFDIE1JWFIiIH0sCisJeyAiREFDIE1JWFIiLCAiTW9ubyBEQUMgTWl4ZXIiLCAiTW9ubyBEQUMgTUlYUiIgfSwKKworCXsgIkRBQyBMMSBTb3VyY2UiLCBOVUxMLCAiREFDIEwxIFBvd2VyIiB9LAorCXsgIkRBQyBMMSBTb3VyY2UiLCAiREFDIiwgIkRBQzEgTUlYTCIgfSwKKwl7ICJEQUMgTDEgU291cmNlIiwgIlN0ZXJlbyBEQUMgTWl4ZXIiLCAiU3RlcmVvIERBQyBNSVhMIiB9LAorCXsgIkRBQyBSMSBTb3VyY2UiLCBOVUxMLCAiREFDIFIxIFBvd2VyIiB9LAorCXsgIkRBQyBSMSBTb3VyY2UiLCAiREFDIiwgIkRBQzEgTUlYUiIgfSwKKwl7ICJEQUMgUjEgU291cmNlIiwgIlN0ZXJlbyBEQUMgTWl4ZXIiLCAiU3RlcmVvIERBQyBNSVhSIiB9LAorCXsgIkRBQyBMMiBTb3VyY2UiLCAiU3RlcmVvIERBQyBNaXhlciIsICJTdGVyZW8gREFDIE1JWEwiIH0sCisJeyAiREFDIEwyIFNvdXJjZSIsICJNb25vIERBQyBNaXhlciIsICJNb25vIERBQyBNSVhMIiB9LAorCXsgIkRBQyBMMiBTb3VyY2UiLCBOVUxMLCAiREFDIEwyIFBvd2VyIiB9LAorCXsgIkRBQyBSMiBTb3VyY2UiLCAiU3RlcmVvIERBQyBNaXhlciIsICJTdGVyZW8gREFDIE1JWFIiIH0sCisJeyAiREFDIFIyIFNvdXJjZSIsICJNb25vIERBQyBNaXhlciIsICJNb25vIERBQyBNSVhSIiB9LAorCXsgIkRBQyBSMiBTb3VyY2UiLCBOVUxMLCAiREFDIFIyIFBvd2VyIiB9LAorCisJeyAiREFDIEwxIiwgTlVMTCwgIkRBQyBMMSBTb3VyY2UiIH0sCisJeyAiREFDIFIxIiwgTlVMTCwgIkRBQyBSMSBTb3VyY2UiIH0sCisJeyAiREFDIEwyIiwgTlVMTCwgIkRBQyBMMiBTb3VyY2UiIH0sCisJeyAiREFDIFIyIiwgTlVMTCwgIkRBQyBSMiBTb3VyY2UiIH0sCisKKwl7ICJTUEsgTUlYTCIsICJEQUMgTDIgU3dpdGNoIiwgIkRBQyBMMiIgfSwKKwl7ICJTUEsgTUlYTCIsICJCU1QxIFN3aXRjaCIsICJCU1QxIiB9LAorCXsgIlNQSyBNSVhMIiwgIklOTCBTd2l0Y2giLCAiSU5MIFZPTCIgfSwKKwl7ICJTUEsgTUlYTCIsICJJTlIgU3dpdGNoIiwgIklOUiBWT0wiIH0sCisJeyAiU1BLIE1JWEwiLCAiQlNUMyBTd2l0Y2giLCAiQlNUMyIgfSwKKwl7ICJTUEsgTUlYUiIsICJEQUMgUjIgU3dpdGNoIiwgIkRBQyBSMiIgfSwKKwl7ICJTUEsgTUlYUiIsICJCU1Q0IFN3aXRjaCIsICJCU1Q0IiB9LAorCXsgIlNQSyBNSVhSIiwgIklOTCBTd2l0Y2giLCAiSU5MIFZPTCIgfSwKKwl7ICJTUEsgTUlYUiIsICJJTlIgU3dpdGNoIiwgIklOUiBWT0wiIH0sCisJeyAiU1BLIE1JWFIiLCAiQlNUMyBTd2l0Y2giLCAiQlNUMyIgfSwKKworCXsgIk1PTk9WT0wgTUlYIiwgIkRBQyBMMiBTd2l0Y2giLCAiREFDIEwyIiB9LAorCXsgIk1PTk9WT0wgTUlYIiwgIkRBQyBSMiBTd2l0Y2giLCAiREFDIFIyIiB9LAorCXsgIk1PTk9WT0wgTUlYIiwgIkJTVDEgU3dpdGNoIiwgIkJTVDEiIH0sCisJeyAiTU9OT1ZPTCBNSVgiLCAiQlNUMiBTd2l0Y2giLCAiQlNUMiIgfSwKKwl7ICJNT05PVk9MIE1JWCIsICJCU1QzIFN3aXRjaCIsICJCU1QzIiB9LAorCisJeyAiT1VUIE1JWEwiLCAiREFDIEwyIFN3aXRjaCIsICJEQUMgTDIiIH0sCisJeyAiT1VUIE1JWEwiLCAiSU5MIFN3aXRjaCIsICJJTkwgVk9MIiB9LAorCXsgIk9VVCBNSVhMIiwgIkJTVDEgU3dpdGNoIiwgIkJTVDEiIH0sCisJeyAiT1VUIE1JWEwiLCAiQlNUMiBTd2l0Y2giLCAiQlNUMiIgfSwKKwl7ICJPVVQgTUlYTCIsICJCU1QzIFN3aXRjaCIsICJCU1QzIiB9LAorCXsgIk9VVCBNSVhSIiwgIkRBQyBSMiBTd2l0Y2giLCAiREFDIFIyIiB9LAorCXsgIk9VVCBNSVhSIiwgIklOUiBTd2l0Y2giLCAiSU5SIFZPTCIgfSwKKwl7ICJPVVQgTUlYUiIsICJCU1QyIFN3aXRjaCIsICJCU1QyIiB9LAorCXsgIk9VVCBNSVhSIiwgIkJTVDMgU3dpdGNoIiwgIkJTVDMiIH0sCisJeyAiT1VUIE1JWFIiLCAiQlNUNCBTd2l0Y2giLCAiQlNUNCIgfSwKKworCXsgIlNQS1ZPTCBMIiwgIlN3aXRjaCIsICJTUEsgTUlYTCIgfSwKKwl7ICJTUEtWT0wgUiIsICJTd2l0Y2giLCAiU1BLIE1JWFIiIH0sCisJeyAiU1BPIEwgTUlYIiwgIkRBQyBMMiBTd2l0Y2giLCAiREFDIEwyIiB9LAorCXsgIlNQTyBMIE1JWCIsICJTUEtWT0wgTCBTd2l0Y2giLCAiU1BLVk9MIEwiIH0sCisJeyAiU1BPIFIgTUlYIiwgIkRBQyBSMiBTd2l0Y2giLCAiREFDIFIyIiB9LAorCXsgIlNQTyBSIE1JWCIsICJTUEtWT0wgUiBTd2l0Y2giLCAiU1BLVk9MIFIiIH0sCisJeyAiU1BLIEFtcCIsIE5VTEwsICJTUE8gTCBNSVgiIH0sCisJeyAiU1BLIEFtcCIsIE5VTEwsICJTUE8gUiBNSVgiIH0sCisJeyAiU1BLIEFtcCIsIE5VTEwsICJTWVMgQ0xLIERFVCIgfSwKKwl7ICJTUE8gUGxheWJhY2siLCAiU3dpdGNoIiwgIlNQSyBBbXAiIH0sCisJeyAiU1BPTCIsIE5VTEwsICJTUE8gUGxheWJhY2siIH0sCisJeyAiU1BPUiIsIE5VTEwsICJTUE8gUGxheWJhY2siIH0sCisKKwl7ICJNT05PVk9MIiwgIlN3aXRjaCIsICJNT05PVk9MIE1JWCIgfSwKKwl7ICJNb25vIE1JWCIsICJEQUMgTDIgU3dpdGNoIiwgIkRBQyBMMiIgfSwKKwl7ICJNb25vIE1JWCIsICJNT05PVk9MIFN3aXRjaCIsICJNT05PVk9MIiB9LAorCXsgIk1vbm8gQW1wIiwgTlVMTCwgIk1vbm8gTUlYIiB9LAorCXsgIk1vbm8gQW1wIiwgTlVMTCwgIk1vbm8gVnJlZiIgfSwKKwl7ICJNb25vIEFtcCIsIE5VTEwsICJTWVMgQ0xLIERFVCIgfSwKKwl7ICJNb25vIFBsYXliYWNrIiwgIlN3aXRjaCIsICJNb25vIEFtcCIgfSwKKwl7ICJNT05PT1VUIiwgTlVMTCwgIk1vbm8gUGxheWJhY2siIH0sCisKKwl7ICJIUCBBbXAiLCBOVUxMLCAiREFDIEwxIiB9LAorCXsgIkhQIEFtcCIsIE5VTEwsICJEQUMgUjEiIH0sCisJeyAiSFAgQW1wIiwgTlVMTCwgIkNoYXJnZSBQdW1wIiB9LAorCXsgIkhQIEFtcCIsIE5VTEwsICJTWVMgQ0xLIERFVCIgfSwKKwl7ICJIUE8gTCBQbGF5YmFjayIsICJTd2l0Y2giLCAiSFAgQW1wIn0sCisJeyAiSFBPIFIgUGxheWJhY2siLCAiU3dpdGNoIiwgIkhQIEFtcCJ9LAorCXsgIkhQT0wiLCBOVUxMLCAiSFBPIEwgUGxheWJhY2siIH0sCisJeyAiSFBPUiIsIE5VTEwsICJIUE8gUiBQbGF5YmFjayIgfSwKKworCXsgIk9VVFZPTCBMIiwgIlN3aXRjaCIsICJPVVQgTUlYTCIgfSwKKwl7ICJPVVRWT0wgUiIsICJTd2l0Y2giLCAiT1VUIE1JWFIiIH0sCisJeyAiTE9VVCBMIE1JWCIsICJEQUMgTDIgU3dpdGNoIiwgIkRBQyBMMiIgfSwKKwl7ICJMT1VUIEwgTUlYIiwgIk9VVFZPTCBMIFN3aXRjaCIsICJPVVRWT0wgTCIgfSwKKwl7ICJMT1VUIFIgTUlYIiwgIkRBQyBSMiBTd2l0Y2giLCAiREFDIFIyIiB9LAorCXsgIkxPVVQgUiBNSVgiLCAiT1VUVk9MIFIgU3dpdGNoIiwgIk9VVFZPTCBSIiB9LAorCXsgIkxPVVQgQW1wIiwgTlVMTCwgIkxPVVQgTCBNSVgiIH0sCisJeyAiTE9VVCBBbXAiLCBOVUxMLCAiTE9VVCBSIE1JWCIgfSwKKwl7ICJMT1VUIEFtcCIsIE5VTEwsICJTWVMgQ0xLIERFVCIgfSwKKwl7ICJMT1VUIEwgUGxheWJhY2siLCAiU3dpdGNoIiwgIkxPVVQgQW1wIiB9LAorCXsgIkxPVVQgUiBQbGF5YmFjayIsICJTd2l0Y2giLCAiTE9VVCBBbXAiIH0sCisJeyAiTE9VVEwiLCBOVUxMLCAiTE9VVCBMIFBsYXliYWNrIiB9LAorCXsgIkxPVVRSIiwgTlVMTCwgIkxPVVQgUiBQbGF5YmFjayIgfSwKKworCXsgIlBETSBMIE11eCIsICJNb25vIERBQyIsICJNb25vIERBQyBNSVhMIiB9LAorCXsgIlBETSBMIE11eCIsICJTdGVyZW8gREFDIiwgIlN0ZXJlbyBEQUMgTUlYTCIgfSwKKwl7ICJQRE0gTCBNdXgiLCBOVUxMLCAiUERNIFBvd2VyIiB9LAorCXsgIlBETSBSIE11eCIsICJNb25vIERBQyIsICJNb25vIERBQyBNSVhSIiB9LAorCXsgIlBETSBSIE11eCIsICJTdGVyZW8gREFDIiwgIlN0ZXJlbyBEQUMgTUlYUiIgfSwKKwl7ICJQRE0gUiBNdXgiLCBOVUxMLCAiUERNIFBvd2VyIiB9LAorCXsgIlBETSBMIFBsYXliYWNrIiwgIlN3aXRjaCIsICJQRE0gTCBNdXgiIH0sCisJeyAiUERNIFIgUGxheWJhY2siLCAiU3dpdGNoIiwgIlBETSBSIE11eCIgfSwKKwl7ICJQRE1MIiwgTlVMTCwgIlBETSBMIFBsYXliYWNrIiB9LAorCXsgIlBETVIiLCBOVUxMLCAiUERNIFIgUGxheWJhY2siIH0sCisKKwl7ICJTUERJRiBNdXgiLCAiSUYzX0RBQyIsICJJRjMgREFDIiB9LAorCXsgIlNQRElGIE11eCIsICJJRjJfREFDIiwgIklGMiBEQUMiIH0sCisJeyAiU1BESUYgTXV4IiwgIklGMV9EQUMyIiwgIklGMSBEQUMyIiB9LAorCXsgIlNQRElGIE11eCIsICJJRjFfREFDMSIsICJJRjEgREFDMSIgfSwKKwl7ICJTUERJRiIsIE5VTEwsICJTUERJRiBNdXgiIH0sCit9OworCitzdGF0aWMgaW50IHJ0NTY1OV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHJ0NTY1OV9wcml2ICpydDU2NTkgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1bnNpZ25lZCBpbnQgdmFsX2xlbiA9IDAsIHZhbF9jbGssIG1hc2tfY2xrOworCWludCBwcmVfZGl2LCBmcmFtZV9zaXplOworCisJcnQ1NjU5LT5scmNrW2RhaS0+aWRdID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwlwcmVfZGl2ID0gcmw2MjMxX2dldF9jbGtfaW5mbyhydDU2NTktPnN5c2NsaywgcnQ1NjU5LT5scmNrW2RhaS0+aWRdKTsKKwlpZiAocHJlX2RpdiA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5zdXBwb3J0ZWQgY2xvY2sgc2V0dGluZyAlZCBmb3IgREFJICVkXG4iLAorCQkJcnQ1NjU5LT5scmNrW2RhaS0+aWRdLCBkYWktPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZyYW1lX3NpemUgPSBzbmRfc29jX3BhcmFtc190b19mcmFtZV9zaXplKHBhcmFtcyk7CisJaWYgKGZyYW1lX3NpemUgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVuc3VwcG9ydGVkIGZyYW1lIHNpemU6ICVkXG4iLCBmcmFtZV9zaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhkYWktPmRldiwgImxyY2sgaXMgJWRIeiBhbmQgcHJlX2RpdiBpcyAlZCBmb3IgaWlzICVkXG4iLAorCQkJCXJ0NTY1OS0+bHJja1tkYWktPmlkXSwgcHJlX2RpdiwgZGFpLT5pZCk7CisKKwlzd2l0Y2ggKHBhcmFtc193aWR0aChwYXJhbXMpKSB7CisJY2FzZSAxNjoKKwkJYnJlYWs7CisJY2FzZSAyMDoKKwkJdmFsX2xlbiB8PSBSVDU2NTlfSTJTX0RMXzIwOworCQlicmVhazsKKwljYXNlIDI0OgorCQl2YWxfbGVuIHw9IFJUNTY1OV9JMlNfRExfMjQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJdmFsX2xlbiB8PSBSVDU2NTlfSTJTX0RMXzg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgUlQ1NjU5X0FJRjE6CisJCW1hc2tfY2xrID0gUlQ1NjU5X0kyU19QRDFfTUFTSzsKKwkJdmFsX2NsayA9IHByZV9kaXYgPDwgUlQ1NjU5X0kyU19QRDFfU0ZUOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfSTJTMV9TRFAsCisJCQlSVDU2NTlfSTJTX0RMX01BU0ssIHZhbF9sZW4pOworCQlicmVhazsKKwljYXNlIFJUNTY1OV9BSUYyOgorCQltYXNrX2NsayA9IFJUNTY1OV9JMlNfUEQyX01BU0s7CisJCXZhbF9jbGsgPSBwcmVfZGl2IDw8IFJUNTY1OV9JMlNfUEQyX1NGVDsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0kyUzJfU0RQLAorCQkJUlQ1NjU5X0kyU19ETF9NQVNLLCB2YWxfbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBSVDU2NTlfQUlGMzoKKwkJbWFza19jbGsgPSBSVDU2NTlfSTJTX1BEM19NQVNLOworCQl2YWxfY2xrID0gcHJlX2RpdiA8PCBSVDU2NTlfSTJTX1BEM19TRlQ7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9JMlMzX1NEUCwKKwkJCVJUNTY1OV9JMlNfRExfTUFTSywgdmFsX2xlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgZGFpLT5pZDogJWRcbiIsIGRhaS0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfQUREQV9DTEtfMSwgbWFza19jbGssIHZhbF9jbGspOworCisJc3dpdGNoIChydDU2NTktPmxyY2tbZGFpLT5pZF0pIHsKKwljYXNlIDE5MjAwMDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0FEREFfQ0xLXzEsCisJCQlSVDU2NTlfREFDX09TUl9NQVNLLCBSVDU2NTlfREFDX09TUl8zMik7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9BRERBX0NMS18xLAorCQkJUlQ1NjU5X0RBQ19PU1JfTUFTSywgUlQ1NjU5X0RBQ19PU1JfNjQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfQUREQV9DTEtfMSwKKwkJCVJUNTY1OV9EQUNfT1NSX01BU0ssIFJUNTY1OV9EQUNfT1NSXzEyOCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0NTY1OV9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCBydDU2NTlfcHJpdiAqcnQ1NjU5ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdW5zaWduZWQgaW50IHJlZ192YWwgPSAwOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJcnQ1NjU5LT5tYXN0ZXJbZGFpLT5pZF0gPSAxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCXJlZ192YWwgfD0gUlQ1NjU5X0kyU19NU19TOworCQlydDU2NTktPm1hc3RlcltkYWktPmlkXSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQlyZWdfdmFsIHw9IFJUNTY1OV9JMlNfQlBfSU5WOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlyZWdfdmFsIHw9IFJUNTY1OV9JMlNfREZfTEVGVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJcmVnX3ZhbCB8PSBSVDU2NTlfSTJTX0RGX1BDTV9BOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlyZWdfdmFsIHw9IFJUNTY1OV9JMlNfREZfUENNX0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgUlQ1NjU5X0FJRjE6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9JMlMxX1NEUCwKKwkJCVJUNTY1OV9JMlNfTVNfTUFTSyB8IFJUNTY1OV9JMlNfQlBfTUFTSyB8CisJCQlSVDU2NTlfSTJTX0RGX01BU0ssIHJlZ192YWwpOworCQlicmVhazsKKwljYXNlIFJUNTY1OV9BSUYyOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfSTJTMl9TRFAsCisJCQlSVDU2NTlfSTJTX01TX01BU0sgfCBSVDU2NTlfSTJTX0JQX01BU0sgfAorCQkJUlQ1NjU5X0kyU19ERl9NQVNLLCByZWdfdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBSVDU2NTlfQUlGMzoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0kyUzNfU0RQLAorCQkJUlQ1NjU5X0kyU19NU19NQVNLIHwgUlQ1NjU5X0kyU19CUF9NQVNLIHwKKwkJCVJUNTY1OV9JMlNfREZfTUFTSywgcmVnX3ZhbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgZGFpLT5pZDogJWRcbiIsIGRhaS0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnQ1NjU5X3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQlpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCBydDU2NTlfcHJpdiAqcnQ1NjU5ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdW5zaWduZWQgaW50IHJlZ192YWwgPSAwOworCisJaWYgKGZyZXEgPT0gcnQ1NjU5LT5zeXNjbGsgJiYgY2xrX2lkID09IHJ0NTY1OS0+c3lzY2xrX3NyYykKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgUlQ1NjU5X1NDTEtfU19NQ0xLOgorCQlyZWdfdmFsIHw9IFJUNTY1OV9TQ0xLX1NSQ19NQ0xLOworCQlicmVhazsKKwljYXNlIFJUNTY1OV9TQ0xLX1NfUExMMToKKwkJcmVnX3ZhbCB8PSBSVDU2NTlfU0NMS19TUkNfUExMMTsKKwkJYnJlYWs7CisJY2FzZSBSVDU2NTlfU0NMS19TX1JDQ0xLOgorCQlyZWdfdmFsIHw9IFJUNTY1OV9TQ0xLX1NSQ19SQ0NMSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBjbG9jayBpZCAoJWQpXG4iLCBjbGtfaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0dMQl9DTEssCisJCVJUNTY1OV9TQ0xLX1NSQ19NQVNLLCByZWdfdmFsKTsKKwlydDU2NTktPnN5c2NsayA9IGZyZXE7CisJcnQ1NjU5LT5zeXNjbGtfc3JjID0gY2xrX2lkOworCisJZGV2X2RiZyhkYWktPmRldiwgIlN5c2NsayBpcyAlZEh6IGFuZCBjbG9jayBpZCBpcyAlZFxuIiwgZnJlcSwgY2xrX2lkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0NTY1OV9zZXRfZGFpX3BsbChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IHBsbF9pZCwgaW50IFNvdXJjZSwKKwkJCXVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgcnQ1NjU5X3ByaXYgKnJ0NTY1OSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBybDYyMzFfcGxsX2NvZGUgcGxsX2NvZGU7CisJaW50IHJldDsKKworCWlmIChTb3VyY2UgPT0gcnQ1NjU5LT5wbGxfc3JjICYmIGZyZXFfaW4gPT0gcnQ1NjU5LT5wbGxfaW4gJiYKKwkgICAgZnJlcV9vdXQgPT0gcnQ1NjU5LT5wbGxfb3V0KQorCQlyZXR1cm4gMDsKKworCWlmICghZnJlcV9pbiB8fCAhZnJlcV9vdXQpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiUExMIGRpc2FibGVkXG4iKTsKKworCQlydDU2NTktPnBsbF9pbiA9IDA7CisJCXJ0NTY1OS0+cGxsX291dCA9IDA7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9HTEJfQ0xLLAorCQkJUlQ1NjU5X1NDTEtfU1JDX01BU0ssIFJUNTY1OV9TQ0xLX1NSQ19NQ0xLKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChTb3VyY2UpIHsKKwljYXNlIFJUNTY1OV9QTEwxX1NfTUNMSzoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X0dMQl9DTEssCisJCQlSVDU2NTlfUExMMV9TUkNfTUFTSywgUlQ1NjU5X1BMTDFfU1JDX01DTEspOworCQlicmVhazsKKwljYXNlIFJUNTY1OV9QTEwxX1NfQkNMSzE6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9HTEJfQ0xLLAorCQkJCVJUNTY1OV9QTEwxX1NSQ19NQVNLLCBSVDU2NTlfUExMMV9TUkNfQkNMSzEpOworCQlicmVhazsKKwljYXNlIFJUNTY1OV9QTEwxX1NfQkNMSzI6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9HTEJfQ0xLLAorCQkJCVJUNTY1OV9QTEwxX1NSQ19NQVNLLCBSVDU2NTlfUExMMV9TUkNfQkNMSzIpOworCQlicmVhazsKKwljYXNlIFJUNTY1OV9QTEwxX1NfQkNMSzM6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9HTEJfQ0xLLAorCQkJCVJUNTY1OV9QTEwxX1NSQ19NQVNLLCBSVDU2NTlfUExMMV9TUkNfQkNMSzMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbmtub3duIFBMTCBTb3VyY2UgJWRcbiIsIFNvdXJjZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHJsNjIzMV9wbGxfY2FsYyhmcmVxX2luLCBmcmVxX291dCwgJnBsbF9jb2RlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbnN1cHBvcnQgaW5wdXQgY2xvY2sgJWRcbiIsIGZyZXFfaW4pOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgImJ5cGFzcz0lZCBtPSVkIG49JWQgaz0lZFxuIiwKKwkJcGxsX2NvZGUubV9icCwgKHBsbF9jb2RlLm1fYnAgPyAwIDogcGxsX2NvZGUubV9jb2RlKSwKKwkJcGxsX2NvZGUubl9jb2RlLCBwbGxfY29kZS5rX2NvZGUpOworCisJc25kX3NvY193cml0ZShjb2RlYywgUlQ1NjU5X1BMTF9DVFJMXzEsCisJCXBsbF9jb2RlLm5fY29kZSA8PCBSVDU2NTlfUExMX05fU0ZUIHwgcGxsX2NvZGUua19jb2RlKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NTlfUExMX0NUUkxfMiwKKwkJKHBsbF9jb2RlLm1fYnAgPyAwIDogcGxsX2NvZGUubV9jb2RlKSA8PCBSVDU2NTlfUExMX01fU0ZUIHwKKwkJcGxsX2NvZGUubV9icCA8PCBSVDU2NTlfUExMX01fQlBfU0ZUKTsKKworCXJ0NTY1OS0+cGxsX2luID0gZnJlcV9pbjsKKwlydDU2NTktPnBsbF9vdXQgPSBmcmVxX291dDsKKwlydDU2NTktPnBsbF9zcmMgPSBTb3VyY2U7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydDU2NTlfc2V0X3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgdHhfbWFzaywKKwkJCXVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlpZiAocnhfbWFzayB8fCB0eF9tYXNrKQorCQl2YWwgfD0gKDEgPDwgMTUpOworCisJc3dpdGNoIChzbG90cykgeworCWNhc2UgNDoKKwkJdmFsIHw9ICgxIDw8IDEwKTsKKwkJdmFsIHw9ICgxIDw8IDgpOworCQlicmVhazsKKwljYXNlIDY6CisJCXZhbCB8PSAoMiA8PCAxMCk7CisJCXZhbCB8PSAoMiA8PCA4KTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQl2YWwgfD0gKDMgPDwgMTApOworCQl2YWwgfD0gKDMgPDwgOCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChzbG90X3dpZHRoKSB7CisJY2FzZSAyMDoKKwkJdmFsIHw9ICgxIDw8IDYpOworCQl2YWwgfD0gKDEgPDwgNCk7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXZhbCB8PSAoMiA8PCA2KTsKKwkJdmFsIHw9ICgyIDw8IDQpOworCQlicmVhazsKKwljYXNlIDMyOgorCQl2YWwgfD0gKDMgPDwgNik7CisJCXZhbCB8PSAoMyA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjU5X1RETV9DVFJMXzEsIDB4OGZmMCwgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0NTY1OV9zZXRfYmNsa19yYXRpbyhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IHJhdGlvKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHJ0NTY1OV9wcml2ICpydDU2NTkgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzIHJhdGlvPSVkXG4iLCBfX2Z1bmNfXywgcmF0aW8pOworCisJcnQ1NjU5LT5iY2xrW2RhaS0+aWRdID0gcmF0aW87CisKKwlpZiAocmF0aW8gPT0gNjQpIHsKKwkJc3dpdGNoIChkYWktPmlkKSB7CisJCWNhc2UgUlQ1NjU5X0FJRjI6CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NTlfQUREQV9DTEtfMSwKKwkJCQlSVDU2NTlfSTJTX0JDTEtfTVMyX01BU0ssCisJCQkJUlQ1NjU5X0kyU19CQ0xLX01TMl82NCk7CisJCQlicmVhazsKKwkJY2FzZSBSVDU2NTlfQUlGMzoKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY1OV9BRERBX0NMS18xLAorCQkJCVJUNTY1OV9JMlNfQkNMS19NUzNfTUFTSywKKwkJCQlSVDU2NTlfSTJTX0JDTEtfTVMzXzY0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnQ1NjU5X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN0cnVjdCBydDU2NTlfcHJpdiAqcnQ1NjU5ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfRElHX01JU0MsCisJCQlSVDU2NTlfRElHX0dBVEVfQ1RSTCwgUlQ1NjU5X0RJR19HQVRFX0NUUkwpOworCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9QV1JfRElHXzEsCisJCQlSVDU2NTlfUFdSX0xETywJUlQ1NjU5X1BXUl9MRE8pOworCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9QV1JfQU5MR18xLAorCQkJUlQ1NjU5X1BXUl9NQiB8IFJUNTY1OV9QV1JfVlJFRjEgfCBSVDU2NTlfUFdSX1ZSRUYyLAorCQkJUlQ1NjU5X1BXUl9NQiB8IFJUNTY1OV9QV1JfVlJFRjEgfCBSVDU2NTlfUFdSX1ZSRUYyKTsKKwkJbXNsZWVwKDIwKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX0FOTEdfMSwKKwkJCVJUNTY1OV9QV1JfRlYxIHwgUlQ1NjU5X1BXUl9GVjIsCisJCQlSVDU2NTlfUFdSX0ZWMSB8IFJUNTY1OV9QV1JfRlYyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1BXUl9ESUdfMSwKKwkJCVJUNTY1OV9QV1JfTERPLCAwKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX0FOTEdfMSwKKwkJCVJUNTY1OV9QV1JfTUIgfCBSVDU2NTlfUFdSX1ZSRUYxIHwgUlQ1NjU5X1BXUl9WUkVGMgorCQkJfCBSVDU2NTlfUFdSX0ZWMSB8IFJUNTY1OV9QV1JfRlYyLAorCQkJUlQ1NjU5X1BXUl9NQiB8IFJUNTY1OV9QV1JfVlJFRjIpOworCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9ESUdfTUlTQywKKwkJCVJUNTY1OV9ESUdfR0FURV9DVFJMLCAwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydDU2NTlfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBydDU2NTlfcHJpdiAqcnQ1NjU5ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlydDU2NTktPmNvZGVjID0gY29kZWM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydDU2NTlfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgcnQ1NjU5X3ByaXYgKnJ0NTY1OSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUkVTRVQsIDApOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcnQ1NjU5X3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBydDU2NTlfcHJpdiAqcnQ1NjU5ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlyZWdjYWNoZV9jYWNoZV9vbmx5KHJ0NTY1OS0+cmVnbWFwLCB0cnVlKTsKKwlyZWdjYWNoZV9tYXJrX2RpcnR5KHJ0NTY1OS0+cmVnbWFwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydDU2NTlfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgcnQ1NjU5X3ByaXYgKnJ0NTY1OSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJcmVnY2FjaGVfY2FjaGVfb25seShydDU2NTktPnJlZ21hcCwgZmFsc2UpOworCXJlZ2NhY2hlX3N5bmMocnQ1NjU5LT5yZWdtYXApOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBydDU2NTlfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHJ0NTY1OV9yZXN1bWUgTlVMTAorI2VuZGlmCisKKyNkZWZpbmUgUlQ1NjU5X1NURVJFT19SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMAorI2RlZmluZSBSVDU2NTlfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBcCisJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TOCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcnQ1NjU5X2FpZl9kYWlfb3BzID0geworCS5od19wYXJhbXMgPSBydDU2NTlfaHdfcGFyYW1zLAorCS5zZXRfZm10ID0gcnQ1NjU5X3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrID0gcnQ1NjU5X3NldF9kYWlfc3lzY2xrLAorCS5zZXRfdGRtX3Nsb3QgPSBydDU2NTlfc2V0X3RkbV9zbG90LAorCS5zZXRfcGxsID0gcnQ1NjU5X3NldF9kYWlfcGxsLAorCS5zZXRfYmNsa19yYXRpbyA9IHJ0NTY1OV9zZXRfYmNsa19yYXRpbywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHJ0NTY1OV9kYWlbXSA9IHsKKwl7CisJCS5uYW1lID0gInJ0NTY1OS1haWYxIiwKKwkJLmlkID0gUlQ1NjU5X0FJRjEsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYxIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBSVDU2NTlfU1RFUkVPX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBSVDU2NTlfRk9STUFUUywKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMSBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBSVDU2NTlfU1RFUkVPX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBSVDU2NTlfRk9STUFUUywKKwkJfSwKKwkJLm9wcyA9ICZydDU2NTlfYWlmX2RhaV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gInJ0NTY1OS1haWYyIiwKKwkJLmlkID0gUlQ1NjU5X0FJRjIsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYyIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBSVDU2NTlfU1RFUkVPX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBSVDU2NTlfRk9STUFUUywKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMiBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBSVDU2NTlfU1RFUkVPX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBSVDU2NTlfRk9STUFUUywKKwkJfSwKKwkJLm9wcyA9ICZydDU2NTlfYWlmX2RhaV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gInJ0NTY1OS1haWYzIiwKKwkJLmlkID0gUlQ1NjU5X0FJRjMsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYzIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBSVDU2NTlfU1RFUkVPX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBSVDU2NTlfRk9STUFUUywKKwkJfSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMyBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBSVDU2NTlfU1RFUkVPX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBSVDU2NTlfRk9STUFUUywKKwkJfSwKKwkJLm9wcyA9ICZydDU2NTlfYWlmX2RhaV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9ydDU2NTkgPSB7CisJLnByb2JlID0gcnQ1NjU5X3Byb2JlLAorCS5yZW1vdmUgPSBydDU2NTlfcmVtb3ZlLAorCS5zdXNwZW5kID0gcnQ1NjU5X3N1c3BlbmQsCisJLnJlc3VtZSA9IHJ0NTY1OV9yZXN1bWUsCisJLnNldF9iaWFzX2xldmVsID0gcnQ1NjU5X3NldF9iaWFzX2xldmVsLAorCS5pZGxlX2JpYXNfb2ZmID0gdHJ1ZSwKKwkuY29udHJvbHMgPSBydDU2NTlfc25kX2NvbnRyb2xzLAorCS5udW1fY29udHJvbHMgPSBBUlJBWV9TSVpFKHJ0NTY1OV9zbmRfY29udHJvbHMpLAorCS5kYXBtX3dpZGdldHMgPSBydDU2NTlfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShydDU2NTlfZGFwbV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSBydDU2NTlfZGFwbV9yb3V0ZXMsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUocnQ1NjU5X2RhcG1fcm91dGVzKSwKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJ0NTY1OV9yZWdtYXAgPSB7CisJLnJlZ19iaXRzID0gMTYsCisJLnZhbF9iaXRzID0gMTYsCisJLm1heF9yZWdpc3RlciA9IDB4MDQwMCwKKwkudm9sYXRpbGVfcmVnID0gcnQ1NjU5X3ZvbGF0aWxlX3JlZ2lzdGVyLAorCS5yZWFkYWJsZV9yZWcgPSBydDU2NTlfcmVhZGFibGVfcmVnaXN0ZXIsCisJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRSRUUsCisJLnJlZ19kZWZhdWx0cyA9IHJ0NTY1OV9yZWcsCisJLm51bV9yZWdfZGVmYXVsdHMgPSBBUlJBWV9TSVpFKHJ0NTY1OV9yZWcpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHJ0NTY1OV9pMmNfaWRbXSA9IHsKKwl7ICJydDU2NTgiLCAwIH0sCisJeyAicnQ1NjU5IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBydDU2NTlfaTJjX2lkKTsKKworc3RhdGljIGludCBydDU2NTlfcGFyc2VfZHQoc3RydWN0IHJ0NTY1OV9wcml2ICpydDU2NTksIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlydDU2NTktPnBkYXRhLmluMV9kaWZmID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsCisJCQkJCSJyZWFsdGVrLGluMS1kaWZmZXJlbnRpYWwiKTsKKwlydDU2NTktPnBkYXRhLmluM19kaWZmID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsCisJCQkJCSJyZWFsdGVrLGluMy1kaWZmZXJlbnRpYWwiKTsKKwlydDU2NTktPnBkYXRhLmluNF9kaWZmID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsCisJCQkJCSJyZWFsdGVrLGluNC1kaWZmZXJlbnRpYWwiKTsKKworCisJZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgInJlYWx0ZWssZG1pYzEtZGF0YS1waW4iLAorCQkmcnQ1NjU5LT5wZGF0YS5kbWljMV9kYXRhX3Bpbik7CisJZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgInJlYWx0ZWssZG1pYzItZGF0YS1waW4iLAorCQkmcnQ1NjU5LT5wZGF0YS5kbWljMl9kYXRhX3Bpbik7CisJZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgInJlYWx0ZWssamQtc3JjIiwKKwkJJnJ0NTY1OS0+cGRhdGEuamRfc3JjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBydDU2NTlfY2FsaWJyYXRlKHN0cnVjdCBydDU2NTlfcHJpdiAqcnQ1NjU5KQoreworCWludCB2YWx1ZSwgY291bnQ7CisKKwkvKiBDYWxpYnJhdGUgSFBPIFN0YXJ0ICovCisJLyogRmluZSB0dW5lIEhQIFBlcmZvcm1hbmNlICovCisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfQklBU19DVVJfQ1RSTF84LCAweGE1MDIpOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0NIT1BfREFDLCAweDMwMzApOworCisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFJFX0RJVl8xLCAweGVmMDApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1BSRV9ESVZfMiwgMHhlZmZjKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9NSUNCSUFTXzIsIDB4MDI4MCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfRElHX01JU0MsIDB4MDAwMSk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfR0xCX0NMSywgMHg4MDAwKTsKKworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1BXUl9BTkxHXzEsIDB4YWE3ZSk7CisJbXNsZWVwKDYwKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9QV1JfQU5MR18xLCAweGZlN2UpOworCW1zbGVlcCg1MCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX0FOTEdfMywgMHgwMDA0KTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9QV1JfRElHXzIsIDB4MDQwMCk7CisJbXNsZWVwKDUwKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9QV1JfRElHXzEsIDB4MDA4MCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDAwNSk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfREVQT1BfMSwgMHgwMDA5KTsKKwltc2xlZXAoNTApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1BXUl9ESUdfMSwgMHgwZjgwKTsKKwltc2xlZXAoNTApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0hQX0NIQVJHRV9QVU1QXzEsIDB4MGUxNik7CisJbXNsZWVwKDUwKTsKKworCS8qIEVuYWxiZSBLIEFEQyBQb3dlciBBbmQgQ2xvY2sgKi8KKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9DQUxfUkVDLCAweDA1MDUpOworCW1zbGVlcCg1MCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX0FOTEdfMywgMHgwMTg0KTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9DQUxJQl9BRENfQ1RSTCwgMHgzYzA1KTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzIsIDB4MjBjMSk7CisKKwkvKiBLIEhlYWRwaG9uZSAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMiwgMHgyY2MxKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzEsIDB4NTEwMCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF83LCAweDAwMTQpOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMSwgMHhkMTAwKTsKKwltc2xlZXAoNjApOworCisJLyogTWFudWFsIEsgQURDIE9mZnNldCAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMiwgMHgyY2MxKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzEsIDB4NDkwMCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF83LCAweDAwMTYpOworCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMSwKKwkJMHg4MDAwLCAweDgwMDApOworCisJY291bnQgPSAwOworCXdoaWxlICh0cnVlKSB7CisJCXJlZ21hcF9yZWFkKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF8xLCAmdmFsdWUpOworCQlpZiAodmFsdWUgJiAweDgwMDApCisJCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwMDA1KTsKKwkJZWxzZQorCQkJYnJlYWs7CisKKwkJaWYgKGNvdW50ID4gMzApIHsKKwkJCWRldl9lcnIocnQ1NjU5LT5jb2RlYy0+ZGV2LAorCQkJCSJIUCBDYWxpYnJhdGlvbiAxIEZhaWx1cmVcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJY291bnQrKzsKKwl9CisKKwkvKiBNYW51YWwgSyBJbnRlcm5hbCBQYXRoIE9mZnNldCAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMiwgMHgyY2MxKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9IUF9WT0wsIDB4MDAwMCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF8xLCAweDQ1MDApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0hQX0NBTElCX0NUUkxfNywgMHgwMDFmKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzEsCisJCTB4ODAwMCwgMHg4MDAwKTsKKworCWNvdW50ID0gMDsKKwl3aGlsZSAodHJ1ZSkgeworCQlyZWdtYXBfcmVhZChydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMSwgJnZhbHVlKTsKKwkJaWYgKHZhbHVlICYgMHg4MDAwKQorCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDAwNSk7CisJCWVsc2UKKwkJCWJyZWFrOworCisJCWlmIChjb3VudCA+IDg1KSB7CisJCQlkZXZfZXJyKHJ0NTY1OS0+Y29kZWMtPmRldiwKKwkJCQkiSFAgQ2FsaWJyYXRpb24gMiBGYWlsdXJlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWNvdW50Kys7CisJfQorCisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF83LCAweDAwMDApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMiwgMHgyMGMwKTsKKwkvKiBDYWxpYnJhdGUgSFBPIEVuZCAqLworCisJLyogQ2FsaWJyYXRlIFNQTyBTdGFydCAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0NMQVNTRF8wLCAweDIwMjEpOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0NMQVNTRF9DVFJMXzEsIDB4MDI2MCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX01JWEVSLCAweDMwMDApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1BXUl9WT0wsIDB4YzAwMCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfQV9EQUNfTVVYLCAweDAwMGMpOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0RJR19NSVNDLCAweDgwMDApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1NQT19WT0wsIDB4MDgwOCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfU1BLX0xfTUlYRVIsIDB4MDAxZSk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfU1BLX1JfTUlYRVIsIDB4MDAxZSk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfQ0xBU1NEXzEsIDB4MDgwMyk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfQ0xBU1NEXzIsIDB4MDU1NCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfU1BPX0FNUF9HQUlOLCAweDExMDMpOworCisJLyogRW5hbGJlIEsgQURDIFBvd2VyIEFuZCBDbG9jayAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0NBTF9SRUMsIDB4MDkwOSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF8yLCAweDAwMDEsCisJCTB4MDAwMSk7CisKKwkvKiBTdGFydCBDYWxpYnJhdGlvbiAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1NQS19EQ19DQUlMQl9DVFJMXzMsIDB4MDAwMCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfQ0xBU1NEXzAsIDB4MDAyMSk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfU1BLX0RDX0NBSUxCX0NUUkxfMSwgMHgzZTgwKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9TUEtfRENfQ0FJTEJfQ1RSTF8xLAorCQkweDgwMDAsIDB4ODAwMCk7CisKKwljb3VudCA9IDA7CisJd2hpbGUgKHRydWUpIHsKKwkJcmVnbWFwX3JlYWQocnQ1NjU5LT5yZWdtYXAsCisJCQkJUlQ1NjU5X1NQS19EQ19DQUlMQl9DVFJMXzEsICZ2YWx1ZSk7CisJCWlmICh2YWx1ZSAmIDB4ODAwMCkKKwkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTAwMDUpOworCQllbHNlCisJCQlicmVhazsKKworCQlpZiAoY291bnQgPiAxMCkgeworCQkJZGV2X2VycihydDU2NTktPmNvZGVjLT5kZXYsCisJCQkJIlNQSyBDYWxpYnJhdGlvbiBGYWlsdXJlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWNvdW50Kys7CisJfQorCS8qIENhbGlicmF0ZSBTUE8gRW5kICovCisKKwkvKiBDYWxpYnJhdGUgTU9OTyBTdGFydCAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0RJR19NSVNDLCAweDAwMDApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X01PTk9NSVhfSU5fR0FJTiwgMHgwMjFmKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9NT05PX09VVCwgMHg0ODBhKTsKKwkvKiBNT05PIE5HMiBHQUlOIDVkQiAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X01PTk9fR0FJTiwgMHgwMDAzKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9NT05PX05HMl9DVFJMXzUsIDB4MDAwOSk7CisKKwkvKiBTdGFydCBDYWxpYnJhdGlvbiAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1NQS19EQ19DQUlMQl9DVFJMXzMsIDB4MDAwZik7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfQ1RSTF8xLCAweDFlMDApOworCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X01PTk9fQU1QX0NBTElCX0NUUkxfMSwKKwkJMHg4MDAwLCAweDgwMDApOworCisJY291bnQgPSAwOworCXdoaWxlICh0cnVlKSB7CisJCXJlZ21hcF9yZWFkKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfQ1RSTF8xLAorCQkJJnZhbHVlKTsKKwkJaWYgKHZhbHVlICYgMHg4MDAwKQorCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDAwNSk7CisJCWVsc2UKKwkJCWJyZWFrOworCisJCWlmIChjb3VudCA+IDM1KSB7CisJCQlkZXZfZXJyKHJ0NTY1OS0+Y29kZWMtPmRldiwKKwkJCQkiTW9ubyBDYWxpYnJhdGlvbiBGYWlsdXJlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWNvdW50Kys7CisJfQorCisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfU1BLX0RDX0NBSUxCX0NUUkxfMywgMHgwMDAzKTsKKwkvKiBDYWxpYnJhdGUgTU9OTyBFbmQgKi8KKworCS8qIFBvd2VyIE9mZiAqLworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0NBTF9SRUMsIDB4MDgwOCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX0FOTEdfMywgMHgwMDAwKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9DQUxJQl9BRENfQ1RSTCwgMHgyMDA1KTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzIsIDB4MjBjMCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfREVQT1BfMSwgMHgwMDAwKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9DTEFTU0RfMSwgMHgwMDExKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9DTEFTU0RfMiwgMHgwMTUwKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9QV1JfQU5MR18xLCAweGZlM2UpOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X01PTk9fT1VULCAweGM4MGEpOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X01PTk9fQU1QX0NBTElCX0NUUkxfMSwgMHgxZTA0KTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9QV1JfTUlYRVIsIDB4MDAwMCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX1ZPTCwgMHgwMDAwKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9QV1JfRElHXzEsIDB4MDAwMCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX0RJR18yLCAweDAwMDApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1BXUl9BTkxHXzEsIDB4MDAzZSk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfQ0xBU1NEX0NUUkxfMSwgMHgwMDYwKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9DTEFTU0RfMCwgMHgyMDIxKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9HTEJfQ0xLLCAweDAwMDApOworCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X01JQ0JJQVNfMiwgMHgwMDgwKTsKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9IUF9WT0wsIDB4ODA4MCk7CisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfSFBfQ0hBUkdFX1BVTVBfMSwgMHgwYzE2KTsKK30KKworc3RhdGljIGludCBydDU2NTlfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHJ0NTY1OV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJmkyYy0+ZGV2KTsKKwlzdHJ1Y3QgcnQ1NjU5X3ByaXYgKnJ0NTY1OTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCB2YWw7CisKKwlydDU2NTkgPSBkZXZtX2t6YWxsb2MoJmkyYy0+ZGV2LCBzaXplb2Yoc3RydWN0IHJ0NTY1OV9wcml2KSwKKwkJR0ZQX0tFUk5FTCk7CisKKwlpZiAocnQ1NjU5ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcnQ1NjU5LT5pMmMgPSBpMmM7CisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgcnQ1NjU5KTsKKworCWlmIChwZGF0YSkKKwkJcnQ1NjU5LT5wZGF0YSA9ICpwZGF0YTsKKwllbHNlCisJCXJ0NTY1OV9wYXJzZV9kdChydDU2NTksICZpMmMtPmRldik7CisKKwlydDU2NTktPmdwaW9kX2xkbzFfZW4gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgmaTJjLT5kZXYsICJsZG8xLWVuIiwKKwkJCQkJCQlHUElPRF9PVVRfSElHSCk7CisJaWYgKElTX0VSUihydDU2NTktPmdwaW9kX2xkbzFfZW4pKQorCQlkZXZfd2FybigmaTJjLT5kZXYsICJSZXF1ZXN0IGxkbzEtZW4gR1BJTyBmYWlsZWRcbiIpOworCisJcnQ1NjU5LT5ncGlvZF9yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKCZpMmMtPmRldiwgInJlc2V0IiwKKwkJCQkJCQlHUElPRF9PVVRfSElHSCk7CisKKwkvKiBTbGVlcCBmb3IgMzAwIG1zIG1pbml1bXVtICovCisJdXNsZWVwX3JhbmdlKDMwMDAwMCwgMzUwMDAwKTsKKworCXJ0NTY1OS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCAmcnQ1NjU5X3JlZ21hcCk7CisJaWYgKElTX0VSUihydDU2NTktPnJlZ21hcCkpIHsKKwkJcmV0ID0gUFRSX0VSUihydDU2NTktPnJlZ21hcCk7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlZ2lzdGVyIG1hcDogJWRcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZ21hcF9yZWFkKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfREVWSUNFX0lELCAmdmFsKTsKKwlpZiAodmFsICE9IERFVklDRV9JRCkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwKKwkJCSJEZXZpY2Ugd2l0aCBJRCByZWdpc3RlciAleCBpcyBub3QgcnQ1NjU5XG4iLCB2YWwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9SRVNFVCwgMCk7CisKKwlydDU2NTlfY2FsaWJyYXRlKHJ0NTY1OSk7CisKKwkvKiBsaW5lIGluIGRpZmYgbW9kZSovCisJaWYgKHJ0NTY1OS0+cGRhdGEuaW4xX2RpZmYpCisJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0lOMV9JTjIsCisJCQlSVDU2NTlfSU4xX0RGX01BU0ssIFJUNTY1OV9JTjFfREZfTUFTSyk7CisJaWYgKHJ0NTY1OS0+cGRhdGEuaW4zX2RpZmYpCisJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0lOM19JTjQsCisJCQlSVDU2NTlfSU4zX0RGX01BU0ssIFJUNTY1OV9JTjNfREZfTUFTSyk7CisJaWYgKHJ0NTY1OS0+cGRhdGEuaW40X2RpZmYpCisJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0lOM19JTjQsCisJCQlSVDU2NTlfSU40X0RGX01BU0ssIFJUNTY1OV9JTjRfREZfTUFTSyk7CisKKwkvKiBETUlDIHBpbiovCisJaWYgKHJ0NTY1OS0+cGRhdGEuZG1pYzFfZGF0YV9waW4gIT0gUlQ1NjU5X0RNSUMxX05VTEwgfHwKKwkJcnQ1NjU5LT5wZGF0YS5kbWljMl9kYXRhX3BpbiAhPSBSVDU2NTlfRE1JQzJfTlVMTCkgeworCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9HUElPX0NUUkxfMSwKKwkJCVJUNTY1OV9HUDJfUElOX01BU0ssIFJUNTY1OV9HUDJfUElOX0RNSUMxX1NDTCk7CisKKwkJc3dpdGNoIChydDU2NTktPnBkYXRhLmRtaWMxX2RhdGFfcGluKSB7CisJCWNhc2UgUlQ1NjU5X0RNSUMxX0RBVEFfSU4yTjoKKwkJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0RNSUNfQ1RSTF8xLAorCQkJCVJUNTY1OV9ETUlDXzFfRFBfTUFTSywgUlQ1NjU5X0RNSUNfMV9EUF9JTjJOKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlQ1NjU5X0RNSUMxX0RBVEFfR1BJTzU6CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsCisJCQkJUlQ1NjU5X0dQSU9fQ1RSTF8zLAorCQkJCVJUNTY1OV9JMlMyX1BJTl9NQVNLLAorCQkJCVJUNTY1OV9JMlMyX1BJTl9HUElPKTsKKwkJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0RNSUNfQ1RSTF8xLAorCQkJCVJUNTY1OV9ETUlDXzFfRFBfTUFTSywgUlQ1NjU5X0RNSUNfMV9EUF9HUElPNSk7CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9HUElPX0NUUkxfMSwKKwkJCQlSVDU2NTlfR1A1X1BJTl9NQVNLLCBSVDU2NTlfR1A1X1BJTl9ETUlDMV9TREEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVDU2NTlfRE1JQzFfREFUQV9HUElPOToKKwkJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0RNSUNfQ1RSTF8xLAorCQkJCVJUNTY1OV9ETUlDXzFfRFBfTUFTSywgUlQ1NjU5X0RNSUNfMV9EUF9HUElPOSk7CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9HUElPX0NUUkxfMSwKKwkJCQlSVDU2NTlfR1A5X1BJTl9NQVNLLCBSVDU2NTlfR1A5X1BJTl9ETUlDMV9TREEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVDU2NTlfRE1JQzFfREFUQV9HUElPMTE6CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9ETUlDX0NUUkxfMSwKKwkJCQlSVDU2NTlfRE1JQ18xX0RQX01BU0ssIFJUNTY1OV9ETUlDXzFfRFBfR1BJTzExKTsKKwkJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0dQSU9fQ1RSTF8xLAorCQkJCVJUNTY1OV9HUDExX1BJTl9NQVNLLAorCQkJCVJUNTY1OV9HUDExX1BJTl9ETUlDMV9TREEpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9kYmcoJmkyYy0+ZGV2LCAibm8gRE1JQzFcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKHJ0NTY1OS0+cGRhdGEuZG1pYzJfZGF0YV9waW4pIHsKKwkJY2FzZSBSVDU2NTlfRE1JQzJfREFUQV9JTjJQOgorCQkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY1OS0+cmVnbWFwLAorCQkJCVJUNTY1OV9ETUlDX0NUUkxfMSwKKwkJCQlSVDU2NTlfRE1JQ18yX0RQX01BU0ssCisJCQkJUlQ1NjU5X0RNSUNfMl9EUF9JTjJQKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlQ1NjU5X0RNSUMyX0RBVEFfR1BJTzY6CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsCisJCQkJUlQ1NjU5X0RNSUNfQ1RSTF8xLAorCQkJCVJUNTY1OV9ETUlDXzJfRFBfTUFTSywKKwkJCQlSVDU2NTlfRE1JQ18yX0RQX0dQSU82KTsKKwkJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwKKwkJCQlSVDU2NTlfR1BJT19DVFJMXzEsCisJCQkJUlQ1NjU5X0dQNl9QSU5fTUFTSywKKwkJCQlSVDU2NTlfR1A2X1BJTl9ETUlDMl9TREEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVDU2NTlfRE1JQzJfREFUQV9HUElPMTA6CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsCisJCQkJUlQ1NjU5X0RNSUNfQ1RSTF8xLAorCQkJCVJUNTY1OV9ETUlDXzJfRFBfTUFTSywKKwkJCQlSVDU2NTlfRE1JQ18yX0RQX0dQSU8xMCk7CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsCisJCQkJUlQ1NjU5X0dQSU9fQ1RSTF8xLAorCQkJCVJUNTY1OV9HUDEwX1BJTl9NQVNLLAorCQkJCVJUNTY1OV9HUDEwX1BJTl9ETUlDMl9TREEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVDU2NTlfRE1JQzJfREFUQV9HUElPMTI6CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsCisJCQkJUlQ1NjU5X0RNSUNfQ1RSTF8xLAorCQkJCVJUNTY1OV9ETUlDXzJfRFBfTUFTSywKKwkJCQlSVDU2NTlfRE1JQ18yX0RQX0dQSU8xMik7CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjU5LT5yZWdtYXAsCisJCQkJUlQ1NjU5X0dQSU9fQ1RSTF8xLAorCQkJCVJUNTY1OV9HUDEyX1BJTl9NQVNLLAorCQkJCVJUNTY1OV9HUDEyX1BJTl9ETUlDMl9TREEpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRldl9kYmcoJmkyYy0+ZGV2LCAibm8gRE1JQzJcbiIpOworCQkJYnJlYWs7CisKKwkJfQorCX0gZWxzZSB7CisJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0dQSU9fQ1RSTF8xLAorCQkJUlQ1NjU5X0dQMl9QSU5fTUFTSyB8IFJUNTY1OV9HUDVfUElOX01BU0sgfAorCQkJUlQ1NjU5X0dQOV9QSU5fTUFTSyB8IFJUNTY1OV9HUDExX1BJTl9NQVNLIHwKKwkJCVJUNTY1OV9HUDZfUElOX01BU0sgfCBSVDU2NTlfR1AxMF9QSU5fTUFTSyB8CisJCQlSVDU2NTlfR1AxMl9QSU5fTUFTSywKKwkJCVJUNTY1OV9HUDJfUElOX0dQSU8yIHwgUlQ1NjU5X0dQNV9QSU5fR1BJTzUgfAorCQkJUlQ1NjU5X0dQOV9QSU5fR1BJTzkgfCBSVDU2NTlfR1AxMV9QSU5fR1BJTzExIHwKKwkJCVJUNTY1OV9HUDZfUElOX0dQSU82IHwgUlQ1NjU5X0dQMTBfUElOX0dQSU8xMCB8CisJCQlSVDU2NTlfR1AxMl9QSU5fR1BJTzEyKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfRE1JQ19DVFJMXzEsCisJCQlSVDU2NTlfRE1JQ18xX0RQX01BU0sgfCBSVDU2NTlfRE1JQ18yX0RQX01BU0ssCisJCQlSVDU2NTlfRE1JQ18xX0RQX0lOMk4gfCBSVDU2NTlfRE1JQ18yX0RQX0lOMlApOworCX0KKworCXN3aXRjaCAocnQ1NjU5LT5wZGF0YS5qZF9zcmMpIHsKKwljYXNlIFJUNTY1OV9KRDM6CisJCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X0VKRF9DVFJMXzEsIDB4YTg4MCk7CisJCXJlZ21hcF93cml0ZShydDU2NTktPnJlZ21hcCwgUlQ1NjU5X1JDX0NMS19DVFJMLCAweDkwMDApOworCQlyZWdtYXBfd3JpdGUocnQ1NjU5LT5yZWdtYXAsIFJUNTY1OV9HUElPX0NUUkxfMSwgMHhjODAwKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX0FOTEdfMSwKKwkJCQlSVDU2NTlfUFdSX01CLCBSVDU2NTlfUFdSX01CKTsKKwkJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUFdSX0FOTEdfMiwgMHgwMDAxKTsKKwkJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfSVJRX0NUUkxfMiwgMHgwMDQwKTsKKwkJYnJlYWs7CisJY2FzZSBSVDU2NTlfSkRfTlVMTDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oJmkyYy0+ZGV2LCAiQ3VycmVudGx5LCBzdXBwb3J0IEpEMyBvbmx5XG4iKTsKKwkJYnJlYWs7CisJfQorCisJSU5JVF9ERUxBWUVEX1dPUksoJnJ0NTY1OS0+amFja19kZXRlY3Rfd29yaywgcnQ1NjU5X2phY2tfZGV0ZWN0X3dvcmspOworCisJaWYgKHJ0NTY1OS0+aTJjLT5pcnEpIHsKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocnQ1NjU5LT5pMmMtPmlycSwgTlVMTCwgcnQ1NjU5X2lycSwKKwkJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORworCQkJfCBJUlFGX09ORVNIT1QsICJydDU2NTkiLCBydDU2NTkpOworCQlpZiAocmV0KQorCQkJZGV2X2VycigmaTJjLT5kZXYsICJGYWlsZWQgdG8gcmVndWVzdCBJUlE6ICVkXG4iLCByZXQpOworCisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYsICZzb2NfY29kZWNfZGV2X3J0NTY1OSwKKwkJCXJ0NTY1OV9kYWksIEFSUkFZX1NJWkUocnQ1NjU5X2RhaSkpOworCisJaWYgKHJldCkgeworCQlpZiAocnQ1NjU5LT5pMmMtPmlycSkKKwkJCWZyZWVfaXJxKHJ0NTY1OS0+aTJjLT5pcnEsIHJ0NTY1OSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnQ1NjU5X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2KTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJ0NTY1OV9pMmNfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgcnQ1NjU5X3ByaXYgKnJ0NTY1OSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJcmVnbWFwX3dyaXRlKHJ0NTY1OS0+cmVnbWFwLCBSVDU2NTlfUkVTRVQsIDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydDU2NTlfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInJlYWx0ZWsscnQ1NjU4IiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInJlYWx0ZWsscnQ1NjU5IiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgcnQ1NjU5X2FjcGlfbWF0Y2hbXSA9IHsKKwkJeyAiMTBFQzU2NTgiLCAwfSwKKwkJeyAiMTBFQzU2NTkiLCAwfSwKKwkJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgcnQ1NjU5X2FjcGlfbWF0Y2gpOworCitzdHJ1Y3QgaTJjX2RyaXZlciBydDU2NTlfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJydDU2NTkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gcnQ1NjU5X29mX21hdGNoLAorCQkuYWNwaV9tYXRjaF90YWJsZSA9IEFDUElfUFRSKHJ0NTY1OV9hY3BpX21hdGNoKSwKKwl9LAorCS5wcm9iZSA9IHJ0NTY1OV9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IHJ0NTY1OV9pMmNfcmVtb3ZlLAorCS5zaHV0ZG93biA9IHJ0NTY1OV9pMmNfc2h1dGRvd24sCisJLmlkX3RhYmxlID0gcnQ1NjU5X2kyY19pZCwKK307Cittb2R1bGVfaTJjX2RyaXZlcihydDU2NTlfaTJjX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBSVDU2NTkgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJCYXJkIExpYW8gPGJhcmRsaWFvQHJlYWx0ZWsuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDU2NTkuaCBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjU5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYwN2VlOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjU5LmgKQEAgLTAsMCArMSwxODE5IEBACisvKgorICogcnQ1NjU5LmggIC0tICBSVDU2NTkvUlQ1NjU4IEFMU0EgU29DIGF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDE1IFJlYWx0ZWsgTWljcm9lbGVjdHJvbmljcworICogQXV0aG9yOiBCYXJkIExpYW8gPGJhcmRsaWFvQHJlYWx0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1JUNTY1OV9IX18KKyNkZWZpbmUgX19SVDU2NTlfSF9fCisKKyNpbmNsdWRlIDxzb3VuZC9ydDU2NTkuaD4KKworI2RlZmluZSBERVZJQ0VfSUQgMHg2MzExCisKKy8qIEluZm8gKi8KKyNkZWZpbmUgUlQ1NjU5X1JFU0VUCQkJCTB4MDAwMAorI2RlZmluZSBSVDU2NTlfVkVORE9SX0lECQkJMHgwMGZkCisjZGVmaW5lIFJUNTY1OV9WRU5ET1JfSURfMQkJCTB4MDBmZQorI2RlZmluZSBSVDU2NTlfREVWSUNFX0lECQkJMHgwMGZmCisvKiAgSS9PIC0gT3V0cHV0ICovCisjZGVmaW5lIFJUNTY1OV9TUE9fVk9MCQkJCTB4MDAwMQorI2RlZmluZSBSVDU2NTlfSFBfVk9MCQkJCTB4MDAwMgorI2RlZmluZSBSVDU2NTlfTE9VVAkJCQkweDAwMDMKKyNkZWZpbmUgUlQ1NjU5X01PTk9fT1VUCQkJCTB4MDAwNAorI2RlZmluZSBSVDU2NTlfSFBMX0dBSU4JCQkJMHgwMDA1CisjZGVmaW5lIFJUNTY1OV9IUFJfR0FJTgkJCQkweDAwMDYKKyNkZWZpbmUgUlQ1NjU5X01PTk9fR0FJTgkJCTB4MDAwNworI2RlZmluZSBSVDU2NTlfU1BESUZfQ1RSTF8xCQkJMHgwMDA4CisjZGVmaW5lIFJUNTY1OV9TUERJRl9DVFJMXzIJCQkweDAwMDkKKy8qIEkvTyAtIElucHV0ICovCisjZGVmaW5lIFJUNTY1OV9DQUxfQlNUX0NUUkwJCQkweDAwMGEKKyNkZWZpbmUgUlQ1NjU5X0lOMV9JTjIJCQkJMHgwMDBjCisjZGVmaW5lIFJUNTY1OV9JTjNfSU40CQkJCTB4MDAwZAorI2RlZmluZSBSVDU2NTlfSU5MMV9JTlIxX1ZPTAkJCTB4MDAwZgorLyogSS9PIC0gU3BlYWtlciAqLworI2RlZmluZSBSVDU2NTlfRUpEX0NUUkxfMQkJCTB4MDAxMAorI2RlZmluZSBSVDU2NTlfRUpEX0NUUkxfMgkJCTB4MDAxMQorI2RlZmluZSBSVDU2NTlfRUpEX0NUUkxfMwkJCTB4MDAxMgorI2RlZmluZSBSVDU2NTlfU0lMRU5DRV9DVFJMCQkJMHgwMDE1CisjZGVmaW5lIFJUNTY1OV9QU1ZfQ1RSTAkJCQkweDAwMTYKKy8qIEkvTyAtIFNpZGV0b25lICovCisjZGVmaW5lIFJUNTY1OV9TSURFVE9ORV9DVFJMCQkJMHgwMDE4CisvKiBJL08gLSBBREMvREFDL0RNSUMgKi8KKyNkZWZpbmUgUlQ1NjU5X0RBQzFfRElHX1ZPTAkJCTB4MDAxOQorI2RlZmluZSBSVDU2NTlfREFDMl9ESUdfVk9MCQkJMHgwMDFhCisjZGVmaW5lIFJUNTY1OV9EQUNfQ1RSTAkJCQkweDAwMWIKKyNkZWZpbmUgUlQ1NjU5X1NUTzFfQURDX0RJR19WT0wJCQkweDAwMWMKKyNkZWZpbmUgUlQ1NjU5X01PTk9fQURDX0RJR19WT0wJCQkweDAwMWQKKyNkZWZpbmUgUlQ1NjU5X1NUTzJfQURDX0RJR19WT0wJCQkweDAwMWUKKyNkZWZpbmUgUlQ1NjU5X1NUTzFfQk9PU1QJCQkweDAwMWYKKyNkZWZpbmUgUlQ1NjU5X01PTk9fQk9PU1QJCQkweDAwMjAKKyNkZWZpbmUgUlQ1NjU5X1NUTzJfQk9PU1QJCQkweDAwMjEKKyNkZWZpbmUgUlQ1NjU5X0hQX0lNUF9HQUlOXzEJCQkweDAwMjIKKyNkZWZpbmUgUlQ1NjU5X0hQX0lNUF9HQUlOXzIJCQkweDAwMjMKKy8qIE1peGVyIC0gRC1EICovCisjZGVmaW5lIFJUNTY1OV9TVE8xX0FEQ19NSVhFUgkJCTB4MDAyNgorI2RlZmluZSBSVDU2NTlfTU9OT19BRENfTUlYRVIJCQkweDAwMjcKKyNkZWZpbmUgUlQ1NjU5X0FEX0RBX01JWEVSCQkJMHgwMDI5CisjZGVmaW5lIFJUNTY1OV9TVE9fREFDX01JWEVSCQkJMHgwMDJhCisjZGVmaW5lIFJUNTY1OV9NT05PX0RBQ19NSVhFUgkJCTB4MDAyYgorI2RlZmluZSBSVDU2NTlfRElHX01JWEVSCQkJMHgwMDJjCisjZGVmaW5lIFJUNTY1OV9BX0RBQ19NVVgJCQkweDAwMmQKKyNkZWZpbmUgUlQ1NjU5X0RJR19JTkYyM19EQVRBCQkJMHgwMDJmCisvKiBNaXhlciAtIFBETSAqLworI2RlZmluZSBSVDU2NTlfUERNX09VVF9DVFJMCQkJMHgwMDMxCisjZGVmaW5lIFJUNTY1OV9QRE1fREFUQV9DVFJMXzEJCQkweDAwMzIKKyNkZWZpbmUgUlQ1NjU5X1BETV9EQVRBX0NUUkxfMgkJCTB4MDAzMworI2RlZmluZSBSVDU2NTlfUERNX0RBVEFfQ1RSTF8zCQkJMHgwMDM0CisjZGVmaW5lIFJUNTY1OV9QRE1fREFUQV9DVFJMXzQJCQkweDAwMzUKKyNkZWZpbmUgUlQ1NjU5X1NQRElGX0NUUkwJCQkweDAwMzYKKworLyogTWl4ZXIgLSBBREMgKi8KKyNkZWZpbmUgUlQ1NjU5X1JFQzFfR0FJTgkJCTB4MDAzYQorI2RlZmluZSBSVDU2NTlfUkVDMV9MMV9NSVhFUgkJCTB4MDAzYgorI2RlZmluZSBSVDU2NTlfUkVDMV9MMl9NSVhFUgkJCTB4MDAzYworI2RlZmluZSBSVDU2NTlfUkVDMV9SMV9NSVhFUgkJCTB4MDAzZAorI2RlZmluZSBSVDU2NTlfUkVDMV9SMl9NSVhFUgkJCTB4MDAzZQorI2RlZmluZSBSVDU2NTlfQ0FMX1JFQwkJCQkweDAwNDAKKyNkZWZpbmUgUlQ1NjU5X1JFQzJfTDFfTUlYRVIJCQkweDAwOWIKKyNkZWZpbmUgUlQ1NjU5X1JFQzJfTDJfTUlYRVIJCQkweDAwOWMKKyNkZWZpbmUgUlQ1NjU5X1JFQzJfUjFfTUlYRVIJCQkweDAwOWQKKyNkZWZpbmUgUlQ1NjU5X1JFQzJfUjJfTUlYRVIJCQkweDAwOWUKKyNkZWZpbmUgUlQ1NjU5X1JDX0NMS19DVFJMCQkJMHgwMDlmCisvKiBNaXhlciAtIERBQyAqLworI2RlZmluZSBSVDU2NTlfU1BLX0xfTUlYRVIJCQkweDAwNDYKKyNkZWZpbmUgUlQ1NjU5X1NQS19SX01JWEVSCQkJMHgwMDQ3CisjZGVmaW5lIFJUNTY1OV9TUE9fQU1QX0dBSU4JCQkweDAwNDgKKyNkZWZpbmUgUlQ1NjU5X0FMQ19CQUNLX0dBSU4JCQkweDAwNDkKKyNkZWZpbmUgUlQ1NjU5X01PTk9NSVhfR0FJTgkJCTB4MDA0YQorI2RlZmluZSBSVDU2NTlfTU9OT01JWF9JTl9HQUlOCQkJMHgwMDRiCisjZGVmaW5lIFJUNTY1OV9PVVRfTF9HQUlOCQkJMHgwMDRkCisjZGVmaW5lIFJUNTY1OV9PVVRfTF9NSVhFUgkJCTB4MDA0ZQorI2RlZmluZSBSVDU2NTlfT1VUX1JfR0FJTgkJCTB4MDA0ZgorI2RlZmluZSBSVDU2NTlfT1VUX1JfTUlYRVIJCQkweDAwNTAKKyNkZWZpbmUgUlQ1NjU5X0xPVVRfTUlYRVIJCQkweDAwNTIKKworI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzEJCTB4MDA1MworI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzIJCTB4MDA1NAorI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzMJCTB4MDA1NQorI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzQJCTB4MDA1NgorI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzUJCTB4MDA1NworI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzYJCTB4MDA1OAorI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzcJCTB4MDA1OQorI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzgJCTB4MDA1YQorI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzkJCTB4MDA1YgorI2RlZmluZSBSVDU2NTlfSEFQVElDX0dFTl9DVFJMXzEwCQkweDAwNWMKKyNkZWZpbmUgUlQ1NjU5X0hBUFRJQ19HRU5fQ1RSTF8xMQkJMHgwMDVkCisjZGVmaW5lIFJUNTY1OV9IQVBUSUNfTFBGX0NUUkxfMQkJMHgwMDVlCisjZGVmaW5lIFJUNTY1OV9IQVBUSUNfTFBGX0NUUkxfMgkJMHgwMDVmCisjZGVmaW5lIFJUNTY1OV9IQVBUSUNfTFBGX0NUUkxfMwkJMHgwMDYwCisvKiBQb3dlciAqLworI2RlZmluZSBSVDU2NTlfUFdSX0RJR18xCQkJMHgwMDYxCisjZGVmaW5lIFJUNTY1OV9QV1JfRElHXzIJCQkweDAwNjIKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BTkxHXzEJCQkweDAwNjMKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BTkxHXzIJCQkweDAwNjQKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BTkxHXzMJCQkweDAwNjUKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NSVhFUgkJCTB4MDA2NgorI2RlZmluZSBSVDU2NTlfUFdSX1ZPTAkJCQkweDAwNjcKKy8qIFByaXZhdGUgUmVnaXN0ZXIgQ29udHJvbCAqLworI2RlZmluZSBSVDU2NTlfUFJJVl9JTkRFWAkJCTB4MDA2YQorI2RlZmluZSBSVDU2NTlfQ0xLX0RFVAkJCQkweDAwNmIKKyNkZWZpbmUgUlQ1NjU5X1BSSVZfREFUQQkJCTB4MDA2YworLyogU3lzdGVtIENsb2NrIFByZSBEaXZpZGVyIEdhdGluZyBDb250cm9sICovCisjZGVmaW5lIFJUNTY1OV9QUkVfRElWXzEJCQkweDAwNmUKKyNkZWZpbmUgUlQ1NjU5X1BSRV9ESVZfMgkJCTB4MDA2ZgorLyogRm9ybWF0IC0gQURDL0RBQyAqLworI2RlZmluZSBSVDU2NTlfSTJTMV9TRFAJCQkJMHgwMDcwCisjZGVmaW5lIFJUNTY1OV9JMlMyX1NEUAkJCQkweDAwNzEKKyNkZWZpbmUgUlQ1NjU5X0kyUzNfU0RQCQkJCTB4MDA3MgorI2RlZmluZSBSVDU2NTlfQUREQV9DTEtfMQkJCTB4MDA3MworI2RlZmluZSBSVDU2NTlfQUREQV9DTEtfMgkJCTB4MDA3NAorI2RlZmluZSBSVDU2NTlfRE1JQ19DVFJMXzEJCQkweDAwNzUKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfQ1RSTF8yCQkJMHgwMDc2CisvKiBGb3JtYXQgLSBURE0gQ29udHJvbCAqLworI2RlZmluZSBSVDU2NTlfVERNX0NUUkxfMQkJCTB4MDA3NworI2RlZmluZSBSVDU2NTlfVERNX0NUUkxfMgkJCTB4MDA3OAorI2RlZmluZSBSVDU2NTlfVERNX0NUUkxfMwkJCTB4MDA3OQorI2RlZmluZSBSVDU2NTlfVERNX0NUUkxfNAkJCTB4MDA3YQorI2RlZmluZSBSVDU2NTlfVERNX0NUUkxfNQkJCTB4MDA3YgorCisvKiBGdW5jdGlvbiAtIEFuYWxvZyAqLworI2RlZmluZSBSVDU2NTlfR0xCX0NMSwkJCQkweDAwODAKKyNkZWZpbmUgUlQ1NjU5X1BMTF9DVFJMXzEJCQkweDAwODEKKyNkZWZpbmUgUlQ1NjU5X1BMTF9DVFJMXzIJCQkweDAwODIKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfMQkJCQkweDAwODMKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfMgkJCQkweDAwODQKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfMwkJCQkweDAwODUKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfNAkJCQkweDAwODYKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfNQkJCQkweDAwODcKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfNgkJCQkweDAwODgKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfNwkJCQkweDAwODkKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfOAkJCQkweDAwOGEKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfOQkJCQkweDAwOGIKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfMTAJCQkJMHgwMDhjCisjZGVmaW5lIFJUNTY1OV9ERVBPUF8xCQkJCTB4MDA4ZQorI2RlZmluZSBSVDU2NTlfREVQT1BfMgkJCQkweDAwOGYKKyNkZWZpbmUgUlQ1NjU5X0RFUE9QXzMJCQkJMHgwMDkwCisjZGVmaW5lIFJUNTY1OV9IUF9DSEFSR0VfUFVNUF8xCQkJMHgwMDkxCisjZGVmaW5lIFJUNTY1OV9IUF9DSEFSR0VfUFVNUF8yCQkJMHgwMDkyCisjZGVmaW5lIFJUNTY1OV9NSUNCSUFTXzEJCQkweDAwOTMKKyNkZWZpbmUgUlQ1NjU5X01JQ0JJQVNfMgkJCTB4MDA5NAorI2RlZmluZSBSVDU2NTlfQVNSQ18xMQkJCQkweDAwOTcKKyNkZWZpbmUgUlQ1NjU5X0FTUkNfMTIJCQkJMHgwMDk4CisjZGVmaW5lIFJUNTY1OV9BU1JDXzEzCQkJCTB4MDA5OQorI2RlZmluZSBSVDU2NTlfUkVDX00xX00yX0dBSU5fQ1RSTAkJMHgwMDlhCisjZGVmaW5lIFJUNTY1OV9DTEFTU0RfQ1RSTF8xCQkJMHgwMGEwCisjZGVmaW5lIFJUNTY1OV9DTEFTU0RfQ1RSTF8yCQkJMHgwMGExCisKKy8qIEZ1bmN0aW9uIC0gRGlnaXRhbCAqLworI2RlZmluZSBSVDU2NTlfQURDX0VRX0NUUkxfMQkJCTB4MDBhZQorI2RlZmluZSBSVDU2NTlfQURDX0VRX0NUUkxfMgkJCTB4MDBhZgorI2RlZmluZSBSVDU2NTlfREFDX0VRX0NUUkxfMQkJCTB4MDBiMAorI2RlZmluZSBSVDU2NTlfREFDX0VRX0NUUkxfMgkJCTB4MDBiMQorI2RlZmluZSBSVDU2NTlfREFDX0VRX0NUUkxfMwkJCTB4MDBiMgorCisjZGVmaW5lIFJUNTY1OV9JUlFfQ1RSTF8xCQkJMHgwMGI2CisjZGVmaW5lIFJUNTY1OV9JUlFfQ1RSTF8yCQkJMHgwMGI3CisjZGVmaW5lIFJUNTY1OV9JUlFfQ1RSTF8zCQkJMHgwMGI4CisjZGVmaW5lIFJUNTY1OV9JUlFfQ1RSTF80CQkJMHgwMGI5CisjZGVmaW5lIFJUNTY1OV9JUlFfQ1RSTF81CQkJMHgwMGJhCisjZGVmaW5lIFJUNTY1OV9JUlFfQ1RSTF82CQkJMHgwMGJiCisjZGVmaW5lIFJUNTY1OV9JTlRfU1RfMQkJCQkweDAwYmUKKyNkZWZpbmUgUlQ1NjU5X0lOVF9TVF8yCQkJCTB4MDBiZgorI2RlZmluZSBSVDU2NTlfR1BJT19DVFJMXzEJCQkweDAwYzAKKyNkZWZpbmUgUlQ1NjU5X0dQSU9fQ1RSTF8yCQkJMHgwMGMxCisjZGVmaW5lIFJUNTY1OV9HUElPX0NUUkxfMwkJCTB4MDBjMgorI2RlZmluZSBSVDU2NTlfR1BJT19DVFJMXzQJCQkweDAwYzMKKyNkZWZpbmUgUlQ1NjU5X0dQSU9fQ1RSTF81CQkJMHgwMGM0CisjZGVmaW5lIFJUNTY1OV9HUElPX1NUQQkJCQkweDAwYzUKKyNkZWZpbmUgUlQ1NjU5X1NJTkVfR0VOX0NUUkxfMQkJCTB4MDBjYgorI2RlZmluZSBSVDU2NTlfU0lORV9HRU5fQ1RSTF8yCQkJMHgwMGNjCisjZGVmaW5lIFJUNTY1OV9TSU5FX0dFTl9DVFJMXzMJCQkweDAwY2QKKyNkZWZpbmUgUlQ1NjU5X0hQX0FNUF9ERVRfQ1RSTF8xCQkweDAwZDYKKyNkZWZpbmUgUlQ1NjU5X0hQX0FNUF9ERVRfQ1RSTF8yCQkweDAwZDcKKyNkZWZpbmUgUlQ1NjU5X1NWX1pDRF8xCQkJCTB4MDBkOQorI2RlZmluZSBSVDU2NTlfU1ZfWkNEXzIJCQkJMHgwMGRhCisjZGVmaW5lIFJUNTY1OV9JTF9DTURfMQkJCQkweDAwZGIKKyNkZWZpbmUgUlQ1NjU5X0lMX0NNRF8yCQkJCTB4MDBkYworI2RlZmluZSBSVDU2NTlfSUxfQ01EXzMJCQkJMHgwMGRkCisjZGVmaW5lIFJUNTY1OV9JTF9DTURfNAkJCQkweDAwZGUKKyNkZWZpbmUgUlQ1NjU5XzRCVE5fSUxfQ01EXzEJCQkweDAwZGYKKyNkZWZpbmUgUlQ1NjU5XzRCVE5fSUxfQ01EXzIJCQkweDAwZTAKKyNkZWZpbmUgUlQ1NjU5XzRCVE5fSUxfQ01EXzMJCQkweDAwZTEKKyNkZWZpbmUgUlQ1NjU5X1BTVl9JTF9DTURfMQkJCTB4MDBlNAorI2RlZmluZSBSVDU2NTlfUFNWX0lMX0NNRF8yCQkJMHgwMGU1CisKKyNkZWZpbmUgUlQ1NjU5X0FEQ19TVE8xX0hQX0NUUkxfMQkJMHgwMGVhCisjZGVmaW5lIFJUNTY1OV9BRENfU1RPMV9IUF9DVFJMXzIJCTB4MDBlYgorI2RlZmluZSBSVDU2NTlfQURDX01PTk9fSFBfQ1RSTF8xCQkweDAwZWMKKyNkZWZpbmUgUlQ1NjU5X0FEQ19NT05PX0hQX0NUUkxfMgkJMHgwMGVkCisjZGVmaW5lIFJUNTY1OV9BSkQxX0NUUkwJCQkweDAwZjAKKyNkZWZpbmUgUlQ1NjU5X0FKRDJfQUpEM19DVFJMCQkJMHgwMGYxCisjZGVmaW5lIFJUNTY1OV9KRDFfVEhECQkJCTB4MDBmMgorI2RlZmluZSBSVDU2NTlfSkQyX1RIRAkJCQkweDAwZjMKKyNkZWZpbmUgUlQ1NjU5X0pEM19USEQJCQkJMHgwMGY0CisjZGVmaW5lIFJUNTY1OV9KRF9DVFJMXzEJCQkweDAwZjYKKyNkZWZpbmUgUlQ1NjU5X0pEX0NUUkxfMgkJCTB4MDBmNworI2RlZmluZSBSVDU2NTlfSkRfQ1RSTF8zCQkJMHgwMGY4CisjZGVmaW5lIFJUNTY1OV9KRF9DVFJMXzQJCQkweDAwZjkKKy8qIEdlbmVyYWwgQ29udHJvbCAqLworI2RlZmluZSBSVDU2NTlfRElHX01JU0MJCQkJMHgwMGZhCisjZGVmaW5lIFJUNTY1OV9EVU1NWV8yCQkJCTB4MDBmYgorI2RlZmluZSBSVDU2NTlfRFVNTVlfMwkJCQkweDAwZmMKKworI2RlZmluZSBSVDU2NTlfREFDX0FEQ19ESUdfVk9MCQkJMHgwMTAwCisjZGVmaW5lIFJUNTY1OV9CSUFTX0NVUl9DVFJMXzEJCQkweDAxMGEKKyNkZWZpbmUgUlQ1NjU5X0JJQVNfQ1VSX0NUUkxfMgkJCTB4MDEwYgorI2RlZmluZSBSVDU2NTlfQklBU19DVVJfQ1RSTF8zCQkJMHgwMTBjCisjZGVmaW5lIFJUNTY1OV9CSUFTX0NVUl9DVFJMXzQJCQkweDAxMGQKKyNkZWZpbmUgUlQ1NjU5X0JJQVNfQ1VSX0NUUkxfNQkJCTB4MDEwZQorI2RlZmluZSBSVDU2NTlfQklBU19DVVJfQ1RSTF82CQkJMHgwMTBmCisjZGVmaW5lIFJUNTY1OV9CSUFTX0NVUl9DVFJMXzcJCQkweDAxMTAKKyNkZWZpbmUgUlQ1NjU5X0JJQVNfQ1VSX0NUUkxfOAkJCTB4MDExMQorI2RlZmluZSBSVDU2NTlfQklBU19DVVJfQ1RSTF85CQkJMHgwMTEyCisjZGVmaW5lIFJUNTY1OV9CSUFTX0NVUl9DVFJMXzEwCQkJMHgwMTEzCisjZGVmaW5lIFJUNTY1OV9NRU1PUllfVEVTVAkJCTB4MDExNgorI2RlZmluZSBSVDU2NTlfVlJFRl9SRUNfT1BfRkJfQ0FQX0NUUkwJCTB4MDExNworI2RlZmluZSBSVDU2NTlfQ0xBU1NEXzAJCQkJMHgwMTFhCisjZGVmaW5lIFJUNTY1OV9DTEFTU0RfMQkJCQkweDAxMWIKKyNkZWZpbmUgUlQ1NjU5X0NMQVNTRF8yCQkJCTB4MDExYworI2RlZmluZSBSVDU2NTlfQ0xBU1NEXzMJCQkJMHgwMTFkCisjZGVmaW5lIFJUNTY1OV9DTEFTU0RfNAkJCQkweDAxMWUKKyNkZWZpbmUgUlQ1NjU5X0NMQVNTRF81CQkJCTB4MDExZgorI2RlZmluZSBSVDU2NTlfQ0xBU1NEXzYJCQkJMHgwMTIwCisjZGVmaW5lIFJUNTY1OV9DTEFTU0RfNwkJCQkweDAxMjEKKyNkZWZpbmUgUlQ1NjU5X0NMQVNTRF84CQkJCTB4MDEyMgorI2RlZmluZSBSVDU2NTlfQ0xBU1NEXzkJCQkJMHgwMTIzCisjZGVmaW5lIFJUNTY1OV9DTEFTU0RfMTAJCQkweDAxMjQKKyNkZWZpbmUgUlQ1NjU5X0NIQVJHRV9QVU1QXzEJCQkweDAxMjUKKyNkZWZpbmUgUlQ1NjU5X0NIQVJHRV9QVU1QXzIJCQkweDAxMjYKKyNkZWZpbmUgUlQ1NjU5X0RJR19JTl9DVFJMXzEJCQkweDAxMzIKKyNkZWZpbmUgUlQ1NjU5X0RJR19JTl9DVFJMXzIJCQkweDAxMzMKKyNkZWZpbmUgUlQ1NjU5X1BBRF9EUklWSU5HX0NUUkwJCQkweDAxMzcKKyNkZWZpbmUgUlQ1NjU5X1NPRlRfUkFNUF9ERVBPUAkJCTB4MDEzOAorI2RlZmluZSBSVDU2NTlfUExMCQkJCTB4MDEzOQorI2RlZmluZSBSVDU2NTlfQ0hPUF9EQUMJCQkJMHgwMTNhCisjZGVmaW5lIFJUNTY1OV9DSE9QX0FEQwkJCQkweDAxM2IKKyNkZWZpbmUgUlQ1NjU5X0NBTElCX0FEQ19DVFJMCQkJMHgwMTNjCisjZGVmaW5lIFJUNTY1OV9TT0ZUX1JBTVBfREVQT1BfREFDX0NMS19DVFJMCTB4MDEzZQorI2RlZmluZSBSVDU2NTlfVk9MX1RFU1QJCQkJMHgwMTNmCisjZGVmaW5lIFJUNTY1OV9URVNUX01PREVfQ1RSTF8xCQkJMHgwMTQ1CisjZGVmaW5lIFJUNTY1OV9URVNUX01PREVfQ1RSTF8yCQkJMHgwMTQ2CisjZGVmaW5lIFJUNTY1OV9URVNUX01PREVfQ1RSTF8zCQkJMHgwMTQ3CisjZGVmaW5lIFJUNTY1OV9URVNUX01PREVfQ1RSTF80CQkJMHgwMTQ4CisjZGVmaW5lIFJUNTY1OV9CQVNTQkFDS19DVFJMCQkJMHgwMTUwCisjZGVmaW5lIFJUNTY1OV9NUDNfUExVU19DVFJMXzEJCQkweDAxNTEKKyNkZWZpbmUgUlQ1NjU5X01QM19QTFVTX0NUUkxfMgkJCTB4MDE1MgorI2RlZmluZSBSVDU2NTlfTVAzX0hQRl9BMQkJCTB4MDE1MworI2RlZmluZSBSVDU2NTlfTVAzX0hQRl9BMgkJCTB4MDE1NAorI2RlZmluZSBSVDU2NTlfTVAzX0hQRl9IMAkJCTB4MDE1NQorI2RlZmluZSBSVDU2NTlfTVAzX0xQRl9IMAkJCTB4MDE1NgorI2RlZmluZSBSVDU2NTlfM0RfU1BLX0NUUkwJCQkweDAxNTcKKyNkZWZpbmUgUlQ1NjU5XzNEX1NQS19DT0VGXzEJCQkweDAxNTgKKyNkZWZpbmUgUlQ1NjU5XzNEX1NQS19DT0VGXzIJCQkweDAxNTkKKyNkZWZpbmUgUlQ1NjU5XzNEX1NQS19DT0VGXzMJCQkweDAxNWEKKyNkZWZpbmUgUlQ1NjU5XzNEX1NQS19DT0VGXzQJCQkweDAxNWIKKyNkZWZpbmUgUlQ1NjU5XzNEX1NQS19DT0VGXzUJCQkweDAxNWMKKyNkZWZpbmUgUlQ1NjU5XzNEX1NQS19DT0VGXzYJCQkweDAxNWQKKyNkZWZpbmUgUlQ1NjU5XzNEX1NQS19DT0VGXzcJCQkweDAxNWUKKyNkZWZpbmUgUlQ1NjU5X1NUT19ORzJfQ1RSTF8xCQkJMHgwMTYwCisjZGVmaW5lIFJUNTY1OV9TVE9fTkcyX0NUUkxfMgkJCTB4MDE2MQorI2RlZmluZSBSVDU2NTlfU1RPX05HMl9DVFJMXzMJCQkweDAxNjIKKyNkZWZpbmUgUlQ1NjU5X1NUT19ORzJfQ1RSTF80CQkJMHgwMTYzCisjZGVmaW5lIFJUNTY1OV9TVE9fTkcyX0NUUkxfNQkJCTB4MDE2NAorI2RlZmluZSBSVDU2NTlfU1RPX05HMl9DVFJMXzYJCQkweDAxNjUKKyNkZWZpbmUgUlQ1NjU5X1NUT19ORzJfQ1RSTF83CQkJMHgwMTY2CisjZGVmaW5lIFJUNTY1OV9TVE9fTkcyX0NUUkxfOAkJCTB4MDE2NworI2RlZmluZSBSVDU2NTlfTU9OT19ORzJfQ1RSTF8xCQkJMHgwMTcwCisjZGVmaW5lIFJUNTY1OV9NT05PX05HMl9DVFJMXzIJCQkweDAxNzEKKyNkZWZpbmUgUlQ1NjU5X01PTk9fTkcyX0NUUkxfMwkJCTB4MDE3MgorI2RlZmluZSBSVDU2NTlfTU9OT19ORzJfQ1RSTF80CQkJMHgwMTczCisjZGVmaW5lIFJUNTY1OV9NT05PX05HMl9DVFJMXzUJCQkweDAxNzQKKyNkZWZpbmUgUlQ1NjU5X01PTk9fTkcyX0NUUkxfNgkJCTB4MDE3NQorI2RlZmluZSBSVDU2NTlfTUlEX0hQX0FNUF9ERVQJCQkweDAxOTAKKyNkZWZpbmUgUlQ1NjU5X0xPV19IUF9BTVBfREVUCQkJMHgwMTkxCisjZGVmaW5lIFJUNTY1OV9MRE9fQ1RSTAkJCQkweDAxOTIKKyNkZWZpbmUgUlQ1NjU5X0hQX0RFQ1JPU1NfQ1RSTF8xCQkweDAxYjAKKyNkZWZpbmUgUlQ1NjU5X0hQX0RFQ1JPU1NfQ1RSTF8yCQkweDAxYjEKKyNkZWZpbmUgUlQ1NjU5X0hQX0RFQ1JPU1NfQ1RSTF8zCQkweDAxYjIKKyNkZWZpbmUgUlQ1NjU5X0hQX0RFQ1JPU1NfQ1RSTF80CQkweDAxYjMKKyNkZWZpbmUgUlQ1NjU5X0hQX0lNUF9TRU5TX0NUUkxfMQkJMHgwMWMwCisjZGVmaW5lIFJUNTY1OV9IUF9JTVBfU0VOU19DVFJMXzIJCTB4MDFjMQorI2RlZmluZSBSVDU2NTlfSFBfSU1QX1NFTlNfQ1RSTF8zCQkweDAxYzIKKyNkZWZpbmUgUlQ1NjU5X0hQX0lNUF9TRU5TX0NUUkxfNAkJMHgwMWMzCisjZGVmaW5lIFJUNTY1OV9IUF9JTVBfU0VOU19NQVBfMQkJMHgwMWM3CisjZGVmaW5lIFJUNTY1OV9IUF9JTVBfU0VOU19NQVBfMgkJMHgwMWM4CisjZGVmaW5lIFJUNTY1OV9IUF9JTVBfU0VOU19NQVBfMwkJMHgwMWM5CisjZGVmaW5lIFJUNTY1OV9IUF9JTVBfU0VOU19NQVBfNAkJMHgwMWNhCisjZGVmaW5lIFJUNTY1OV9IUF9JTVBfU0VOU19NQVBfNQkJMHgwMWNiCisjZGVmaW5lIFJUNTY1OV9IUF9JTVBfU0VOU19NQVBfNgkJMHgwMWNjCisjZGVmaW5lIFJUNTY1OV9IUF9JTVBfU0VOU19NQVBfNwkJMHgwMWNkCisjZGVmaW5lIFJUNTY1OV9IUF9JTVBfU0VOU19NQVBfOAkJMHgwMWNlCisjZGVmaW5lIFJUNTY1OV9IUF9MT0dJQ19DVFJMXzEJCQkweDAxZGEKKyNkZWZpbmUgUlQ1NjU5X0hQX0xPR0lDX0NUUkxfMgkJCTB4MDFkYgorI2RlZmluZSBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF8xCQkJMHgwMWRlCisjZGVmaW5lIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzIJCQkweDAxZGYKKyNkZWZpbmUgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMwkJCTB4MDFlMAorI2RlZmluZSBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF80CQkJMHgwMWUxCisjZGVmaW5lIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzUJCQkweDAxZTIKKyNkZWZpbmUgUlQ1NjU5X0hQX0NBTElCX0NUUkxfNgkJCTB4MDFlMworI2RlZmluZSBSVDU2NTlfSFBfQ0FMSUJfQ1RSTF83CQkJMHgwMWU0CisjZGVmaW5lIFJUNTY1OV9IUF9DQUxJQl9DVFJMXzkJCQkweDAxZTYKKyNkZWZpbmUgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMTAJCQkweDAxZTcKKyNkZWZpbmUgUlQ1NjU5X0hQX0NBTElCX0NUUkxfMTEJCQkweDAxZTgKKyNkZWZpbmUgUlQ1NjU5X0hQX0NBTElCX1NUQV8xCQkJMHgwMWVhCisjZGVmaW5lIFJUNTY1OV9IUF9DQUxJQl9TVEFfMgkJCTB4MDFlYgorI2RlZmluZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzMJCQkweDAxZWMKKyNkZWZpbmUgUlQ1NjU5X0hQX0NBTElCX1NUQV80CQkJMHgwMWVkCisjZGVmaW5lIFJUNTY1OV9IUF9DQUxJQl9TVEFfNQkJCTB4MDFlZQorI2RlZmluZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzYJCQkweDAxZWYKKyNkZWZpbmUgUlQ1NjU5X0hQX0NBTElCX1NUQV83CQkJMHgwMWYwCisjZGVmaW5lIFJUNTY1OV9IUF9DQUxJQl9TVEFfOAkJCTB4MDFmMQorI2RlZmluZSBSVDU2NTlfSFBfQ0FMSUJfU1RBXzkJCQkweDAxZjIKKyNkZWZpbmUgUlQ1NjU5X01PTk9fQU1QX0NBTElCX0NUUkxfMQkJMHgwMWY2CisjZGVmaW5lIFJUNTY1OV9NT05PX0FNUF9DQUxJQl9DVFJMXzIJCTB4MDFmNworI2RlZmluZSBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfQ1RSTF8zCQkweDAxZjgKKyNkZWZpbmUgUlQ1NjU5X01PTk9fQU1QX0NBTElCX0NUUkxfNAkJMHgwMWY5CisjZGVmaW5lIFJUNTY1OV9NT05PX0FNUF9DQUxJQl9DVFJMXzUJCTB4MDFmYQorI2RlZmluZSBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfU1RBXzEJCTB4MDFmYgorI2RlZmluZSBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfU1RBXzIJCTB4MDFmYworI2RlZmluZSBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfU1RBXzMJCTB4MDFmZAorI2RlZmluZSBSVDU2NTlfTU9OT19BTVBfQ0FMSUJfU1RBXzQJCTB4MDFmZQorI2RlZmluZSBSVDU2NTlfU1BLX1BXUl9MTVRfQ1RSTF8xCQkweDAyMDAKKyNkZWZpbmUgUlQ1NjU5X1NQS19QV1JfTE1UX0NUUkxfMgkJMHgwMjAxCisjZGVmaW5lIFJUNTY1OV9TUEtfUFdSX0xNVF9DVFJMXzMJCTB4MDIwMgorI2RlZmluZSBSVDU2NTlfU1BLX1BXUl9MTVRfU1RBXzEJCTB4MDIwMworI2RlZmluZSBSVDU2NTlfU1BLX1BXUl9MTVRfU1RBXzIJCTB4MDIwNAorI2RlZmluZSBSVDU2NTlfU1BLX1BXUl9MTVRfU1RBXzMJCTB4MDIwNQorI2RlZmluZSBSVDU2NTlfU1BLX1BXUl9MTVRfU1RBXzQJCTB4MDIwNgorI2RlZmluZSBSVDU2NTlfU1BLX1BXUl9MTVRfU1RBXzUJCTB4MDIwNworI2RlZmluZSBSVDU2NTlfU1BLX1BXUl9MTVRfU1RBXzYJCTB4MDIwOAorI2RlZmluZSBSVDU2NTlfRkxFWF9TUEtfQlNUX0NUUkxfMQkJMHgwMjU2CisjZGVmaW5lIFJUNTY1OV9GTEVYX1NQS19CU1RfQ1RSTF8yCQkweDAyNTcKKyNkZWZpbmUgUlQ1NjU5X0ZMRVhfU1BLX0JTVF9DVFJMXzMJCTB4MDI1OAorI2RlZmluZSBSVDU2NTlfRkxFWF9TUEtfQlNUX0NUUkxfNAkJMHgwMjU5CisjZGVmaW5lIFJUNTY1OV9TUEtfRVhfTE1UX0NUUkxfMQkJMHgwMjVhCisjZGVmaW5lIFJUNTY1OV9TUEtfRVhfTE1UX0NUUkxfMgkJMHgwMjViCisjZGVmaW5lIFJUNTY1OV9TUEtfRVhfTE1UX0NUUkxfMwkJMHgwMjVjCisjZGVmaW5lIFJUNTY1OV9TUEtfRVhfTE1UX0NUUkxfNAkJMHgwMjVkCisjZGVmaW5lIFJUNTY1OV9TUEtfRVhfTE1UX0NUUkxfNQkJMHgwMjVlCisjZGVmaW5lIFJUNTY1OV9TUEtfRVhfTE1UX0NUUkxfNgkJMHgwMjVmCisjZGVmaW5lIFJUNTY1OV9TUEtfRVhfTE1UX0NUUkxfNwkJMHgwMjYwCisjZGVmaW5lIFJUNTY1OV9BREpfSFBGX0NUUkxfMQkJCTB4MDI2MQorI2RlZmluZSBSVDU2NTlfQURKX0hQRl9DVFJMXzIJCQkweDAyNjIKKyNkZWZpbmUgUlQ1NjU5X1NQS19EQ19DQUlMQl9DVFJMXzEJCTB4MDI2NQorI2RlZmluZSBSVDU2NTlfU1BLX0RDX0NBSUxCX0NUUkxfMgkJMHgwMjY2CisjZGVmaW5lIFJUNTY1OV9TUEtfRENfQ0FJTEJfQ1RSTF8zCQkweDAyNjcKKyNkZWZpbmUgUlQ1NjU5X1NQS19EQ19DQUlMQl9DVFJMXzQJCTB4MDI2OAorI2RlZmluZSBSVDU2NTlfU1BLX0RDX0NBSUxCX0NUUkxfNQkJMHgwMjY5CisjZGVmaW5lIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzEJCTB4MDI2YQorI2RlZmluZSBSVDU2NTlfU1BLX0RDX0NBSUxCX1NUQV8yCQkweDAyNmIKKyNkZWZpbmUgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfMwkJMHgwMjZjCisjZGVmaW5lIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzQJCTB4MDI2ZAorI2RlZmluZSBSVDU2NTlfU1BLX0RDX0NBSUxCX1NUQV81CQkweDAyNmUKKyNkZWZpbmUgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfNgkJMHgwMjZmCisjZGVmaW5lIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzcJCTB4MDI3MAorI2RlZmluZSBSVDU2NTlfU1BLX0RDX0NBSUxCX1NUQV84CQkweDAyNzEKKyNkZWZpbmUgUlQ1NjU5X1NQS19EQ19DQUlMQl9TVEFfOQkJMHgwMjcyCisjZGVmaW5lIFJUNTY1OV9TUEtfRENfQ0FJTEJfU1RBXzEwCQkweDAyNzMKKyNkZWZpbmUgUlQ1NjU5X1NQS19WRERfU1RBXzEJCQkweDAyODAKKyNkZWZpbmUgUlQ1NjU5X1NQS19WRERfU1RBXzIJCQkweDAyODEKKyNkZWZpbmUgUlQ1NjU5X1NQS19EQ19ERVRfQ1RSTF8xCQkweDAyODIKKyNkZWZpbmUgUlQ1NjU5X1NQS19EQ19ERVRfQ1RSTF8yCQkweDAyODMKKyNkZWZpbmUgUlQ1NjU5X1NQS19EQ19ERVRfQ1RSTF8zCQkweDAyODQKKyNkZWZpbmUgUlQ1NjU5X1BVUkVfRENfREVUX0NUUkxfMQkJMHgwMjkwCisjZGVmaW5lIFJUNTY1OV9QVVJFX0RDX0RFVF9DVFJMXzIJCTB4MDI5MQorI2RlZmluZSBSVDU2NTlfRFVNTVlfNAkJCQkweDAyZmEKKyNkZWZpbmUgUlQ1NjU5X0RVTU1ZXzUJCQkJMHgwMmZiCisjZGVmaW5lIFJUNTY1OV9EVU1NWV82CQkJCTB4MDJmYworI2RlZmluZSBSVDU2NTlfRFJDMV9DVFJMXzEJCQkweDAzMDAKKyNkZWZpbmUgUlQ1NjU5X0RSQzFfQ1RSTF8yCQkJMHgwMzAxCisjZGVmaW5lIFJUNTY1OV9EUkMxX0NUUkxfMwkJCTB4MDMwMgorI2RlZmluZSBSVDU2NTlfRFJDMV9DVFJMXzQJCQkweDAzMDMKKyNkZWZpbmUgUlQ1NjU5X0RSQzFfQ1RSTF81CQkJMHgwMzA0CisjZGVmaW5lIFJUNTY1OV9EUkMxX0NUUkxfNgkJCTB4MDMwNQorI2RlZmluZSBSVDU2NTlfRFJDMV9IQVJEX0xNVF9DVFJMXzEJCTB4MDMwNgorI2RlZmluZSBSVDU2NTlfRFJDMV9IQVJEX0xNVF9DVFJMXzIJCTB4MDMwNworI2RlZmluZSBSVDU2NTlfRFJDMl9DVFJMXzEJCQkweDAzMDgKKyNkZWZpbmUgUlQ1NjU5X0RSQzJfQ1RSTF8yCQkJMHgwMzA5CisjZGVmaW5lIFJUNTY1OV9EUkMyX0NUUkxfMwkJCTB4MDMwYQorI2RlZmluZSBSVDU2NTlfRFJDMl9DVFJMXzQJCQkweDAzMGIKKyNkZWZpbmUgUlQ1NjU5X0RSQzJfQ1RSTF81CQkJMHgwMzBjCisjZGVmaW5lIFJUNTY1OV9EUkMyX0NUUkxfNgkJCTB4MDMwZAorI2RlZmluZSBSVDU2NTlfRFJDMl9IQVJEX0xNVF9DVFJMXzEJCTB4MDMwZQorI2RlZmluZSBSVDU2NTlfRFJDMl9IQVJEX0xNVF9DVFJMXzIJCTB4MDMwZgorI2RlZmluZSBSVDU2NTlfRFJDMV9QUklWXzEJCQkweDAzMTAKKyNkZWZpbmUgUlQ1NjU5X0RSQzFfUFJJVl8yCQkJMHgwMzExCisjZGVmaW5lIFJUNTY1OV9EUkMxX1BSSVZfMwkJCTB4MDMxMgorI2RlZmluZSBSVDU2NTlfRFJDMV9QUklWXzQJCQkweDAzMTMKKyNkZWZpbmUgUlQ1NjU5X0RSQzFfUFJJVl81CQkJMHgwMzE0CisjZGVmaW5lIFJUNTY1OV9EUkMxX1BSSVZfNgkJCTB4MDMxNQorI2RlZmluZSBSVDU2NTlfRFJDMV9QUklWXzcJCQkweDAzMTYKKyNkZWZpbmUgUlQ1NjU5X0RSQzJfUFJJVl8xCQkJMHgwMzE3CisjZGVmaW5lIFJUNTY1OV9EUkMyX1BSSVZfMgkJCTB4MDMxOAorI2RlZmluZSBSVDU2NTlfRFJDMl9QUklWXzMJCQkweDAzMTkKKyNkZWZpbmUgUlQ1NjU5X0RSQzJfUFJJVl80CQkJMHgwMzFhCisjZGVmaW5lIFJUNTY1OV9EUkMyX1BSSVZfNQkJCTB4MDMxYgorI2RlZmluZSBSVDU2NTlfRFJDMl9QUklWXzYJCQkweDAzMWMKKyNkZWZpbmUgUlQ1NjU5X0RSQzJfUFJJVl83CQkJMHgwMzFkCisjZGVmaW5lIFJUNTY1OV9NVUxUSV9EUkNfQ1RSTAkJCTB4MDMyMAorI2RlZmluZSBSVDU2NTlfQ1JPU1NfT1ZFUl8xCQkJMHgwMzIxCisjZGVmaW5lIFJUNTY1OV9DUk9TU19PVkVSXzIJCQkweDAzMjIKKyNkZWZpbmUgUlQ1NjU5X0NST1NTX09WRVJfMwkJCTB4MDMyMworI2RlZmluZSBSVDU2NTlfQ1JPU1NfT1ZFUl80CQkJMHgwMzI0CisjZGVmaW5lIFJUNTY1OV9DUk9TU19PVkVSXzUJCQkweDAzMjUKKyNkZWZpbmUgUlQ1NjU5X0NST1NTX09WRVJfNgkJCTB4MDMyNgorI2RlZmluZSBSVDU2NTlfQ1JPU1NfT1ZFUl83CQkJMHgwMzI3CisjZGVmaW5lIFJUNTY1OV9DUk9TU19PVkVSXzgJCQkweDAzMjgKKyNkZWZpbmUgUlQ1NjU5X0NST1NTX09WRVJfOQkJCTB4MDMyOQorI2RlZmluZSBSVDU2NTlfQ1JPU1NfT1ZFUl8xMAkJCTB4MDMyYQorI2RlZmluZSBSVDU2NTlfQUxDX1BHQV9DVFJMXzEJCQkweDAzMzAKKyNkZWZpbmUgUlQ1NjU5X0FMQ19QR0FfQ1RSTF8yCQkJMHgwMzMxCisjZGVmaW5lIFJUNTY1OV9BTENfUEdBX0NUUkxfMwkJCTB4MDMzMgorI2RlZmluZSBSVDU2NTlfQUxDX1BHQV9DVFJMXzQJCQkweDAzMzMKKyNkZWZpbmUgUlQ1NjU5X0FMQ19QR0FfQ1RSTF81CQkJMHgwMzM0CisjZGVmaW5lIFJUNTY1OV9BTENfUEdBX0NUUkxfNgkJCTB4MDMzNQorI2RlZmluZSBSVDU2NTlfQUxDX1BHQV9DVFJMXzcJCQkweDAzMzYKKyNkZWZpbmUgUlQ1NjU5X0FMQ19QR0FfQ1RSTF84CQkJMHgwMzM3CisjZGVmaW5lIFJUNTY1OV9BTENfUEdBX1NUQV8xCQkJMHgwMzM4CisjZGVmaW5lIFJUNTY1OV9BTENfUEdBX1NUQV8yCQkJMHgwMzM5CisjZGVmaW5lIFJUNTY1OV9BTENfUEdBX1NUQV8zCQkJMHgwMzNhCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9QUkVfVk9MCQkJMHgwMzQwCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9QUkVfVk9MCQkJMHgwMzQxCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9QT1NUX1ZPTAkJMHgwMzQyCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9QT1NUX1ZPTAkJMHgwMzQzCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9MUEYxX0ExCQkJMHgwMzQ0CisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9MUEYxX0gwCQkJMHgwMzQ1CisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9MUEYxX0ExCQkJMHgwMzQ2CisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9MUEYxX0gwCQkJMHgwMzQ3CisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9CUEYyX0ExCQkJMHgwMzQ4CisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9CUEYyX0EyCQkJMHgwMzQ5CisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9CUEYyX0gwCQkJMHgwMzRhCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9CUEYyX0ExCQkJMHgwMzRiCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9CUEYyX0EyCQkJMHgwMzRjCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9CUEYyX0gwCQkJMHgwMzRkCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9CUEYzX0ExCQkJMHgwMzRlCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9CUEYzX0EyCQkJMHgwMzRmCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9CUEYzX0gwCQkJMHgwMzUwCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9CUEYzX0ExCQkJMHgwMzUxCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9CUEYzX0EyCQkJMHgwMzUyCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9CUEYzX0gwCQkJMHgwMzUzCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9CUEY0X0ExCQkJMHgwMzU0CisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9CUEY0X0EyCQkJMHgwMzU1CisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9CUEY0X0gwCQkJMHgwMzU2CisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9CUEY0X0ExCQkJMHgwMzU3CisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9CUEY0X0EyCQkJMHgwMzU4CisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9CUEY0X0gwCQkJMHgwMzU5CisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9IUEYxX0ExCQkJMHgwMzVhCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9IUEYxX0gwCQkJMHgwMzViCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9IUEYxX0ExCQkJMHgwMzVjCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9IUEYxX0gwCQkJMHgwMzVkCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9IUEYyX0ExCQkJMHgwMzVlCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9IUEYyX0EyCQkJMHgwMzVmCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9FUV9IUEYyX0gwCQkJMHgwMzYwCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9IUEYyX0ExCQkJMHgwMzYxCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9IUEYyX0EyCQkJMHgwMzYyCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9FUV9IUEYyX0gwCQkJMHgwMzYzCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9CSV9FUV9CUEYxX0gwXzEJCTB4MDM2NAorI2RlZmluZSBSVDU2NTlfREFDX0xfQklfRVFfQlBGMV9IMF8yCQkweDAzNjUKKyNkZWZpbmUgUlQ1NjU5X0RBQ19MX0JJX0VRX0JQRjFfQjFfMQkJMHgwMzY2CisjZGVmaW5lIFJUNTY1OV9EQUNfTF9CSV9FUV9CUEYxX0IxXzIJCTB4MDM2NworI2RlZmluZSBSVDU2NTlfREFDX0xfQklfRVFfQlBGMV9CMl8xCQkweDAzNjgKKyNkZWZpbmUgUlQ1NjU5X0RBQ19MX0JJX0VRX0JQRjFfQjJfMgkJMHgwMzY5CisjZGVmaW5lIFJUNTY1OV9EQUNfTF9CSV9FUV9CUEYxX0ExXzEJCTB4MDM2YQorI2RlZmluZSBSVDU2NTlfREFDX0xfQklfRVFfQlBGMV9BMV8yCQkweDAzNmIKKyNkZWZpbmUgUlQ1NjU5X0RBQ19MX0JJX0VRX0JQRjFfQTJfMQkJMHgwMzZjCisjZGVmaW5lIFJUNTY1OV9EQUNfTF9CSV9FUV9CUEYxX0EyXzIJCTB4MDM2ZAorI2RlZmluZSBSVDU2NTlfREFDX1JfQklfRVFfQlBGMV9IMF8xCQkweDAzNmUKKyNkZWZpbmUgUlQ1NjU5X0RBQ19SX0JJX0VRX0JQRjFfSDBfMgkJMHgwMzZmCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9CSV9FUV9CUEYxX0IxXzEJCTB4MDM3MAorI2RlZmluZSBSVDU2NTlfREFDX1JfQklfRVFfQlBGMV9CMV8yCQkweDAzNzEKKyNkZWZpbmUgUlQ1NjU5X0RBQ19SX0JJX0VRX0JQRjFfQjJfMQkJMHgwMzcyCisjZGVmaW5lIFJUNTY1OV9EQUNfUl9CSV9FUV9CUEYxX0IyXzIJCTB4MDM3MworI2RlZmluZSBSVDU2NTlfREFDX1JfQklfRVFfQlBGMV9BMV8xCQkweDAzNzQKKyNkZWZpbmUgUlQ1NjU5X0RBQ19SX0JJX0VRX0JQRjFfQTFfMgkJMHgwMzc1CisjZGVmaW5lIFJUNTY1OV9EQUNfUl9CSV9FUV9CUEYxX0EyXzEJCTB4MDM3NgorI2RlZmluZSBSVDU2NTlfREFDX1JfQklfRVFfQlBGMV9BMl8yCQkweDAzNzcKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0xQRjFfQTEJCQkweDAzZDAKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0xQRjFfQTEJCQkweDAzZDEKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0xQRjFfSDAJCQkweDAzZDIKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0xQRjFfSDAJCQkweDAzZDMKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjFfQTEJCQkweDAzZDQKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjFfQTEJCQkweDAzZDUKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjFfQTIJCQkweDAzZDYKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjFfQTIJCQkweDAzZDcKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjFfSDAJCQkweDAzZDgKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjFfSDAJCQkweDAzZDkKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjJfQTEJCQkweDAzZGEKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjJfQTEJCQkweDAzZGIKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjJfQTIJCQkweDAzZGMKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjJfQTIJCQkweDAzZGQKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjJfSDAJCQkweDAzZGUKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjJfSDAJCQkweDAzZGYKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjNfQTEJCQkweDAzZTAKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjNfQTEJCQkweDAzZTEKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjNfQTIJCQkweDAzZTIKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjNfQTIJCQkweDAzZTMKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjNfSDAJCQkweDAzZTQKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjNfSDAJCQkweDAzZTUKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjRfQTEJCQkweDAzZTYKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjRfQTEJCQkweDAzZTcKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjRfQTIJCQkweDAzZTgKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjRfQTIJCQkweDAzZTkKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0JQRjRfSDAJCQkweDAzZWEKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0JQRjRfSDAJCQkweDAzZWIKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0hQRjFfQTEJCQkweDAzZWMKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0hQRjFfQTEJCQkweDAzZWQKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX0hQRjFfSDAJCQkweDAzZWUKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX0hQRjFfSDAJCQkweDAzZWYKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX1BSRV9WT0wJCQkweDAzZjAKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX1BSRV9WT0wJCQkweDAzZjEKKyNkZWZpbmUgUlQ1NjU5X0FEQ19MX0VRX1BPU1RfVk9MCQkweDAzZjIKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX0VRX1BPU1RfVk9MCQkweDAzZjMKKworCisKKy8qIGdsb2JhbCBkZWZpbml0aW9uICovCisjZGVmaW5lIFJUNTY1OV9MX01VVEUJCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X0xfTVVURV9TRlQJCQkxNQorI2RlZmluZSBSVDU2NTlfVk9MX0xfTVVURQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9WT0xfTF9TRlQJCQkxNAorI2RlZmluZSBSVDU2NTlfUl9NVVRFCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X1JfTVVURV9TRlQJCQk3CisjZGVmaW5lIFJUNTY1OV9WT0xfUl9NVVRFCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfVk9MX1JfU0ZUCQkJNgorI2RlZmluZSBSVDU2NTlfTF9WT0xfTUFTSwkJCSgweDNmIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9MX1ZPTF9TRlQJCQk4CisjZGVmaW5lIFJUNTY1OV9SX1ZPTF9NQVNLCQkJKDB4M2YpCisjZGVmaW5lIFJUNTY1OV9SX1ZPTF9TRlQJCQkwCisKKy8qSGVhZHBob25lIEFtcCBML1IgQW5hbG9nIEdhaW4gYW5kIERpZ2l0YWwgTkcyIEdhaW4gQ29udHJvbCAoMHgwMDA1IDB4MDAwNikqLworI2RlZmluZSBSVDU2NTlfR19IUAkJCQkoMHgxZiA8PCA4KQorI2RlZmluZSBSVDU2NTlfR19IUF9TRlQJCQkJOAorI2RlZmluZSBSVDU2NTlfR19TVE9fREFfRE1JWAkJCSgweDFmKQorI2RlZmluZSBSVDU2NTlfR19TVE9fREFfU0ZUCQkJMAorCisvKiBJTjEvSU4yIENvbnRyb2wgKDB4MDAwYykgKi8KKyNkZWZpbmUgUlQ1NjU5X0lOMV9ERl9NQVNLCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X0lOMV9ERgkJCQkxNQorI2RlZmluZSBSVDU2NTlfQlNUMV9NQVNLCQkJKDB4N2YgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0JTVDFfU0ZUCQkJCTgKKyNkZWZpbmUgUlQ1NjU5X0JTVDJfTUFTSwkJCSgweDdmKQorI2RlZmluZSBSVDU2NTlfQlNUMl9TRlQJCQkJMAorCisvKiBJTjMvSU40IENvbnRyb2wgKDB4MDAwZCkgKi8KKyNkZWZpbmUgUlQ1NjU5X0lOM19ERl9NQVNLCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X0lOM19ERgkJCQkxNQorI2RlZmluZSBSVDU2NTlfQlNUM19NQVNLCQkJKDB4N2YgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0JTVDNfU0ZUCQkJCTgKKyNkZWZpbmUgUlQ1NjU5X0lONF9ERl9NQVNLCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2NTlfSU40X0RGCQkJCTcKKyNkZWZpbmUgUlQ1NjU5X0JTVDRfTUFTSwkJCSgweDdmKQorI2RlZmluZSBSVDU2NTlfQlNUNF9TRlQJCQkJMAorCisvKiBJTkwgYW5kIElOUiBWb2x1bWUgQ29udHJvbCAoMHgwMDBmKSAqLworI2RlZmluZSBSVDU2NTlfSU5MX1ZPTF9NQVNLCQkJKDB4MWYgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0lOTF9WT0xfU0ZUCQkJOAorI2RlZmluZSBSVDU2NTlfSU5SX1ZPTF9NQVNLCQkJKDB4MWYpCisjZGVmaW5lIFJUNTY1OV9JTlJfVk9MX1NGVAkJCTAKKworLyogRW1iZWVkZWQgSmFjayBhbmQgVHlwZSBEZXRlY3Rpb24gQ29udHJvbCAxICgweDAwMTApICovCisjZGVmaW5lIFJUNTY1OV9FTUJfSkRfRU4JCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfRU1CX0pEX0VOX1NGVAkJCTE1CisjZGVmaW5lIFJUNTY1OV9KRF9NT0RFCQkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9KRF9NT0RFX1NGVAkJCTEzCisjZGVmaW5lIFJUNTY1OV9FWFRfSkRfRU4JCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2NTlfRVhUX0pEX0VOX1NGVAkJCTExCisjZGVmaW5lIFJUNTY1OV9FWFRfSkRfRElHCQkJKDB4MSA8PCA5KQorCisvKiBFbWJlZWRlZCBKYWNrIGFuZCBUeXBlIERldGVjdGlvbiBDb250cm9sIDIgKDB4MDAxMSkgKi8KKyNkZWZpbmUgUlQ1NjU5X0VYVF9KRF9TUkMJCQkoMHg3IDw8IDQpCisjZGVmaW5lIFJUNTY1OV9FWFRfSkRfU1JDX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X0VYVF9KRF9TUkNfR1BJT19KRDEJCSgweDAgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0VYVF9KRF9TUkNfR1BJT19KRDIJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0VYVF9KRF9TUkNfSkQxXzEJCQkoMHgyIDw8IDQpCisjZGVmaW5lIFJUNTY1OV9FWFRfSkRfU1JDX0pEMV8yCQkJKDB4MyA8PCA0KQorI2RlZmluZSBSVDU2NTlfRVhUX0pEX1NSQ19KRDIJCQkoMHg0IDw8IDQpCisjZGVmaW5lIFJUNTY1OV9FWFRfSkRfU1JDX0pEMwkJCSgweDUgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0VYVF9KRF9TUkNfTUFOVUFMCQkoMHg2IDw8IDQpCisKKy8qIFNsaWVuY2UgRGV0ZWN0aW9uIENvbnRyb2wgKDB4MDAxNSkgKi8KKyNkZWZpbmUgUlQ1NjU5X1NJTF9ERVRfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9TSUxfREVUX0RJUwkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9TSUxfREVUX0VOCQkJKDB4MSA8PCAxNSkKKworLyogU2lkZXRvbmUgQ29udHJvbCAoMHgwMDE4KSAqLworI2RlZmluZSBSVDU2NTlfU1RfU0VMX01BU0sJCQkoMHg3IDw8IDkpCisjZGVmaW5lIFJUNTY1OV9TVF9TRUxfU0ZUCQkJOQorI2RlZmluZSBSVDU2NTlfU1RfRU4JCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfU1RfRU5fU0ZUCQkJNgorCisvKiBEQUMxIERpZ2l0YWwgVm9sdW1lICgweDAwMTkpICovCisjZGVmaW5lIFJUNTY1OV9EQUNfTDFfVk9MX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBSVDU2NTlfREFDX0wxX1ZPTF9TRlQJCQk4CisjZGVmaW5lIFJUNTY1OV9EQUNfUjFfVk9MX01BU0sJCQkoMHhmZikKKyNkZWZpbmUgUlQ1NjU5X0RBQ19SMV9WT0xfU0ZUCQkJMAorCisvKiBEQUMyIERpZ2l0YWwgVm9sdW1lICgweDAwMWEpICovCisjZGVmaW5lIFJUNTY1OV9EQUNfTDJfVk9MX01BU0sJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBSVDU2NTlfREFDX0wyX1ZPTF9TRlQJCQk4CisjZGVmaW5lIFJUNTY1OV9EQUNfUjJfVk9MX01BU0sJCQkoMHhmZikKKyNkZWZpbmUgUlQ1NjU5X0RBQ19SMl9WT0xfU0ZUCQkJMAorCisvKiBEQUMyIENvbnRyb2wgKDB4MDAxYikgKi8KKyNkZWZpbmUgUlQ1NjU5X01fREFDMl9MX1ZPTAkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9NX0RBQzJfTF9WT0xfU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjU5X01fREFDMl9SX1ZPTAkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9NX0RBQzJfUl9WT0xfU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjU5X0RBQ19MMl9TRUxfTUFTSwkJCSgweDcgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0RBQ19MMl9TRUxfU0ZUCQkJNAorI2RlZmluZSBSVDU2NTlfREFDX1IyX1NFTF9NQVNLCQkJKDB4NyA8PCAwKQorI2RlZmluZSBSVDU2NTlfREFDX1IyX1NFTF9TRlQJCQkwCisKKy8qIEFEQyBEaWdpdGFsIFZvbHVtZSBDb250cm9sICgweDAwMWMpICovCisjZGVmaW5lIFJUNTY1OV9BRENfTF9WT0xfTUFTSwkJCSgweDdmIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9BRENfTF9WT0xfU0ZUCQkJOAorI2RlZmluZSBSVDU2NTlfQURDX1JfVk9MX01BU0sJCQkoMHg3ZikKKyNkZWZpbmUgUlQ1NjU5X0FEQ19SX1ZPTF9TRlQJCQkwCisKKy8qIE1vbm8gQURDIERpZ2l0YWwgVm9sdW1lIENvbnRyb2wgKDB4MDAxZCkgKi8KKyNkZWZpbmUgUlQ1NjU5X01PTk9fQURDX0xfVk9MX01BU0sJCSgweDdmIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9NT05PX0FEQ19MX1ZPTF9TRlQJCTgKKyNkZWZpbmUgUlQ1NjU5X01PTk9fQURDX1JfVk9MX01BU0sJCSgweDdmKQorI2RlZmluZSBSVDU2NTlfTU9OT19BRENfUl9WT0xfU0ZUCQkwCisKKy8qIFN0ZXJlbzEgQURDIEJvb3N0IEdhaW4gQ29udHJvbCAoMHgwMDFmKSAqLworI2RlZmluZSBSVDU2NTlfU1RPMV9BRENfTF9CU1RfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X1NUTzFfQURDX0xfQlNUX1NGVAkJMTQKKyNkZWZpbmUgUlQ1NjU5X1NUTzFfQURDX1JfQlNUX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9TVE8xX0FEQ19SX0JTVF9TRlQJCTEyCisKKy8qIE1vbm8gQURDIEJvb3N0IEdhaW4gQ29udHJvbCAoMHgwMDIwKSAqLworI2RlZmluZSBSVDU2NTlfTU9OT19BRENfTF9CU1RfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X01PTk9fQURDX0xfQlNUX1NGVAkJMTQKKyNkZWZpbmUgUlQ1NjU5X01PTk9fQURDX1JfQlNUX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9NT05PX0FEQ19SX0JTVF9TRlQJCTEyCisKKy8qIFN0ZXJlbzEgQURDIEJvb3N0IEdhaW4gQ29udHJvbCAoMHgwMDFmKSAqLworI2RlZmluZSBSVDU2NTlfU1RPMl9BRENfTF9CU1RfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X1NUTzJfQURDX0xfQlNUX1NGVAkJMTQKKyNkZWZpbmUgUlQ1NjU5X1NUTzJfQURDX1JfQlNUX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9TVE8yX0FEQ19SX0JTVF9TRlQJCTEyCisKKy8qIFN0ZXJlbyBBREMgTWl4ZXIgQ29udHJvbCAoMHgwMDI2KSAqLworI2RlZmluZSBSVDU2NTlfTV9TVE8xX0FEQ19MMQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9NX1NUTzFfQURDX0wxX1NGVAkJMTUKKyNkZWZpbmUgUlQ1NjU5X01fU1RPMV9BRENfTDIJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfTV9TVE8xX0FEQ19MMl9TRlQJCTE0CisjZGVmaW5lIFJUNTY1OV9TVE8xX0FEQzFfU1JDX01BU0sJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9TVE8xX0FEQzFfU1JDX1NGVAkJMTMKKyNkZWZpbmUgUlQ1NjU5X1NUTzFfQURDMV9TUkNfQURDCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2NTlfU1RPMV9BREMxX1NSQ19EQUNNSVgJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9TVE8xX0FEQ19TUkNfTUFTSwkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X1NUTzFfQURDX1NSQ19TRlQJCQkxMgorI2RlZmluZSBSVDU2NTlfU1RPMV9BRENfU1JDX0FEQzEJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9TVE8xX0FEQ19TUkNfQURDMgkJKDB4MCA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X1NUTzFfQURDMl9TUkNfTUFTSwkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X1NUTzFfQURDMl9TUkNfU0ZUCQkxMQorI2RlZmluZSBSVDU2NTlfU1RPMV9ETUlDX1NSQ19NQVNLCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9TVE8xX0RNSUNfU1JDX1NGVAkJOAorI2RlZmluZSBSVDU2NTlfU1RPMV9ETUlDX1NSQ19ETUlDMgkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2NTlfU1RPMV9ETUlDX1NSQ19ETUlDMQkJKDB4MCA8PCA4KQorI2RlZmluZSBSVDU2NTlfTV9TVE8xX0FEQ19SMQkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X01fU1RPMV9BRENfUjFfU0ZUCQk2CisjZGVmaW5lIFJUNTY1OV9NX1NUTzFfQURDX1IyCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfTV9TVE8xX0FEQ19SMl9TRlQJCTUKKworLyogTW9ubzEgQURDIE1peGVyIGNvbnRyb2wgKDB4MDAyNykgKi8KKyNkZWZpbmUgUlQ1NjU5X01fTU9OT19BRENfTDEJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfTV9NT05PX0FEQ19MMV9TRlQJCTE1CisjZGVmaW5lIFJUNTY1OV9NX01PTk9fQURDX0wyCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X01fTU9OT19BRENfTDJfU0ZUCQkxNAorI2RlZmluZSBSVDU2NTlfTU9OT19BRENfTDJfU1JDX01BU0sJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9NT05PX0FEQ19MMl9TUkNfU0ZUCQkxMgorI2RlZmluZSBSVDU2NTlfTU9OT19BRENfTDFfU1JDX01BU0sJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9NT05PX0FEQ19MMV9TUkNfU0ZUCQkxMQorI2RlZmluZSBSVDU2NTlfTU9OT19BRENfTF9TUkNfTUFTSwkJKDB4MyA8PCA5KQorI2RlZmluZSBSVDU2NTlfTU9OT19BRENfTF9TUkNfU0ZUCQk5CisjZGVmaW5lIFJUNTY1OV9NT05PX0RNSUNfTF9TUkNfTUFTSwkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2NTlfTU9OT19ETUlDX0xfU1JDX1NGVAkJOAorI2RlZmluZSBSVDU2NTlfTV9NT05PX0FEQ19SMQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X01fTU9OT19BRENfUjFfU0ZUCQk3CisjZGVmaW5lIFJUNTY1OV9NX01PTk9fQURDX1IyCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfTV9NT05PX0FEQ19SMl9TRlQJCTYKKyNkZWZpbmUgUlQ1NjU5X1NUTzJfQURDX1NSQ19NQVNLCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTY1OV9TVE8yX0FEQ19TUkNfU0ZUCQkJNQorI2RlZmluZSBSVDU2NTlfTU9OT19BRENfUjJfU1JDX01BU0sJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X01PTk9fQURDX1IyX1NSQ19TRlQJCTQKKyNkZWZpbmUgUlQ1NjU5X01PTk9fQURDX1IxX1NSQ19NQVNLCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTY1OV9NT05PX0FEQ19SMV9TUkNfU0ZUCQkzCisjZGVmaW5lIFJUNTY1OV9NT05PX0FEQ19SX1NSQ19NQVNLCQkoMHgzIDw8IDEpCisjZGVmaW5lIFJUNTY1OV9NT05PX0FEQ19SX1NSQ19TRlQJCTEKKyNkZWZpbmUgUlQ1NjU5X01PTk9fRE1JQ19SX1NSQ19NQVNLCQkweDEKKyNkZWZpbmUgUlQ1NjU5X01PTk9fRE1JQ19SX1NSQ19TRlQJCTAKKworLyogQURDIE1peGVyIHRvIERBQyBNaXhlciBDb250cm9sICgweDAwMjkpICovCisjZGVmaW5lIFJUNTY1OV9NX0FEQ01JWF9MCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X01fQURDTUlYX0xfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X01fREFDMV9MCQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9NX0RBQzFfTF9TRlQJCQkxNAorI2RlZmluZSBSVDU2NTlfREFDMV9SX1NFTF9NQVNLCQkJKDB4MyA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X0RBQzFfUl9TRUxfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjU5X0RBQzFfUl9TRUxfSUYxCQkJKDB4MCA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X0RBQzFfUl9TRUxfSUYyCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X0RBQzFfUl9TRUxfSUYzCQkJKDB4MiA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X0RBQzFfTF9TRUxfTUFTSwkJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0RBQzFfTF9TRUxfU0ZUCQkJOAorI2RlZmluZSBSVDU2NTlfREFDMV9MX1NFTF9JRjEJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9EQUMxX0xfU0VMX0lGMgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0RBQzFfTF9TRUxfSUYzCQkJKDB4MiA8PCA4KQorI2RlZmluZSBSVDU2NTlfTV9BRENNSVhfUgkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X01fQURDTUlYX1JfU0ZUCQkJNworI2RlZmluZSBSVDU2NTlfTV9EQUMxX1IJCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfTV9EQUMxX1JfU0ZUCQkJNgorCisvKiBTdGVyZW8gREFDIE1peGVyIENvbnRyb2wgKDB4MDAyYSkgKi8KKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wxX1NUT19MCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wxX1NUT19MX1NGVAkJMTUKKyNkZWZpbmUgUlQ1NjU5X0dfREFDX0wxX1NUT19MX01BU0sJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19MMV9TVE9fTF9TRlQJCTE0CisjZGVmaW5lIFJUNTY1OV9NX0RBQ19SMV9TVE9fTAkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19SMV9TVE9fTF9TRlQJCTEzCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19SMV9TVE9fTF9NQVNLCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfR19EQUNfUjFfU1RPX0xfU0ZUCQkxMgorI2RlZmluZSBSVDU2NTlfTV9EQUNfTDJfU1RPX0wJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2NTlfTV9EQUNfTDJfU1RPX0xfU0ZUCQkxMQorI2RlZmluZSBSVDU2NTlfR19EQUNfTDJfU1RPX0xfTUFTSwkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X0dfREFDX0wyX1NUT19MX1NGVAkJMTAKKyNkZWZpbmUgUlQ1NjU5X01fREFDX1IyX1NUT19MCQkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjJfU1RPX0xfU0ZUCQk5CisjZGVmaW5lIFJUNTY1OV9HX0RBQ19SMl9TVE9fTF9NQVNLCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19SMl9TVE9fTF9TRlQJCTgKKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wxX1NUT19SCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2NTlfTV9EQUNfTDFfU1RPX1JfU0ZUCQk3CisjZGVmaW5lIFJUNTY1OV9HX0RBQ19MMV9TVE9fUl9NQVNLCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19MMV9TVE9fUl9TRlQJCTYKKyNkZWZpbmUgUlQ1NjU5X01fREFDX1IxX1NUT19SCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjFfU1RPX1JfU0ZUCQk1CisjZGVmaW5lIFJUNTY1OV9HX0RBQ19SMV9TVE9fUl9NQVNLCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19SMV9TVE9fUl9TRlQJCTQKKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wyX1NUT19SCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2NTlfTV9EQUNfTDJfU1RPX1JfU0ZUCQkzCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19MMl9TVE9fUl9NQVNLCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19MMl9TVE9fUl9TRlQJCTIKKyNkZWZpbmUgUlQ1NjU5X01fREFDX1IyX1NUT19SCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjJfU1RPX1JfU0ZUCQkxCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19SMl9TVE9fUl9NQVNLCQkoMHgxKQorI2RlZmluZSBSVDU2NTlfR19EQUNfUjJfU1RPX1JfU0ZUCQkwCisKKy8qIE1vbm8gREFDIE1peGVyIENvbnRyb2wgKDB4MDAyYikgKi8KKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wxX01PTk9fTAkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19MMV9NT05PX0xfU0ZUCQkxNQorI2RlZmluZSBSVDU2NTlfR19EQUNfTDFfTU9OT19MX01BU0sJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19MMV9NT05PX0xfU0ZUCQkxNAorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjFfTU9OT19MCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X01fREFDX1IxX01PTk9fTF9TRlQJCTEzCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19SMV9NT05PX0xfTUFTSwkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0dfREFDX1IxX01PTk9fTF9TRlQJCTEyCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19MMl9NT05PX0wJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2NTlfTV9EQUNfTDJfTU9OT19MX1NGVAkJMTEKKyNkZWZpbmUgUlQ1NjU5X0dfREFDX0wyX01PTk9fTF9NQVNLCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfR19EQUNfTDJfTU9OT19MX1NGVAkJMTAKKyNkZWZpbmUgUlQ1NjU5X01fREFDX1IyX01PTk9fTAkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X01fREFDX1IyX01PTk9fTF9TRlQJCTkKKyNkZWZpbmUgUlQ1NjU5X0dfREFDX1IyX01PTk9fTF9NQVNLCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19SMl9NT05PX0xfU0ZUCQk4CisjZGVmaW5lIFJUNTY1OV9NX0RBQ19MMV9NT05PX1IJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19MMV9NT05PX1JfU0ZUCQk3CisjZGVmaW5lIFJUNTY1OV9HX0RBQ19MMV9NT05PX1JfTUFTSwkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfR19EQUNfTDFfTU9OT19SX1NGVAkJNgorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjFfTU9OT19SCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjFfTU9OT19SX1NGVAkJNQorI2RlZmluZSBSVDU2NTlfR19EQUNfUjFfTU9OT19SX01BU0sJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0dfREFDX1IxX01PTk9fUl9TRlQJCTQKKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wyX01PTk9fUgkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wyX01PTk9fUl9TRlQJCTMKKyNkZWZpbmUgUlQ1NjU5X0dfREFDX0wyX01PTk9fUl9NQVNLCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19MMl9NT05PX1JfU0ZUCQkyCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19SMl9NT05PX1IJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19SMl9NT05PX1JfU0ZUCQkxCisjZGVmaW5lIFJUNTY1OV9HX0RBQ19SMl9NT05PX1JfTUFTSwkJKDB4MSkKKyNkZWZpbmUgUlQ1NjU5X0dfREFDX1IyX01PTk9fUl9TRlQJCTAKKworLyogRGlnaXRhbCBNaXhlciBDb250cm9sICgweDAwMmMpICovCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19NSVhfTAkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X01fREFDX01JWF9MX1NGVAkJCTcKKyNkZWZpbmUgUlQ1NjU5X0RBQ19NSVhfTF9NQVNLCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfREFDX01JWF9MX1NGVAkJCTYKKyNkZWZpbmUgUlQ1NjU5X01fREFDX01JWF9SCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfTV9EQUNfTUlYX1JfU0ZUCQkJNQorI2RlZmluZSBSVDU2NTlfREFDX01JWF9SX01BU0sJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTY1OV9EQUNfTUlYX1JfU0ZUCQkJNAorCisvKiBBbmFsb2cgREFDIElucHV0IFNvdXJjZSBDb250cm9sICgweDAwMmQpICovCisjZGVmaW5lIFJUNTY1OV9BX0RBQ0wxX1NFTAkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X0FfREFDTDFfU0ZUCQkJMworI2RlZmluZSBSVDU2NTlfQV9EQUNSMV9TRUwJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9BX0RBQ1IxX1NGVAkJCTIKKyNkZWZpbmUgUlQ1NjU5X0FfREFDTDJfU0VMCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2NTlfQV9EQUNMMl9TRlQJCQkxCisjZGVmaW5lIFJUNTY1OV9BX0RBQ1IyX1NFTAkJCSgweDEgPDwgMCkKKyNkZWZpbmUgUlQ1NjU5X0FfREFDUjJfU0ZUCQkJMAorCisvKiBEaWdpdGFsIEludGVyZmFjZSBEYXRhIENvbnRyb2wgKDB4MDAyZikgKi8KKyNkZWZpbmUgUlQ1NjU5X0lGMl9BREMzX0lOX01BU0sJCQkoMHgzIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfSUYyX0FEQzNfSU5fU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjU5X0lGMl9BRENfSU5fTUFTSwkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9JRjJfQURDX0lOX1NGVAkJCTEyCisjZGVmaW5lIFJUNTY1OV9JRjJfREFDX1NFTF9NQVNLCQkJKDB4MyA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X0lGMl9EQUNfU0VMX1NGVAkJCTEwCisjZGVmaW5lIFJUNTY1OV9JRjJfQURDX1NFTF9NQVNLCQkJKDB4MyA8PCA4KQorI2RlZmluZSBSVDU2NTlfSUYyX0FEQ19TRUxfU0ZUCQkJOAorI2RlZmluZSBSVDU2NTlfSUYzX0RBQ19TRUxfTUFTSwkJCSgweDMgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X0lGM19EQUNfU0VMX1NGVAkJCTYKKyNkZWZpbmUgUlQ1NjU5X0lGM19BRENfU0VMX01BU0sJCQkoMHgzIDw8IDQpCisjZGVmaW5lIFJUNTY1OV9JRjNfQURDX1NFTF9TRlQJCQk0CisjZGVmaW5lIFJUNTY1OV9JRjNfQURDX0lOX01BU0sJCQkoMHgzIDw8IDApCisjZGVmaW5lIFJUNTY1OV9JRjNfQURDX0lOX1NGVAkJCTAKKworLyogUERNIE91dHB1dCBDb250cm9sICgweDAwMzEpICovCisjZGVmaW5lIFJUNTY1OV9QRE0xX0xfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9QRE0xX0xfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X01fUERNMV9MCQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9NX1BETTFfTF9TRlQJCQkxNAorI2RlZmluZSBSVDU2NTlfUERNMV9SX01BU0sJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2NTlfUERNMV9SX1NGVAkJCTEzCisjZGVmaW5lIFJUNTY1OV9NX1BETTFfUgkJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfTV9QRE0xX1JfU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjU5X1BETTJfQlVTWQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X1BETTFfQlVTWQkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X1BETV9QQVRURVJOCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfUERNX0dBSU4JCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfUERNX0RJVl9NQVNLCQkJKDB4MykKKworLypTL1BESUYgT3V0cHV0IENvbnRyb2wgKDB4MDAzNikgKi8KKyNkZWZpbmUgUlQ1NjU5X1NQRElGX1NFTF9NQVNLCQkJKDB4MyA8PCAwKQorI2RlZmluZSBSVDU2NTlfU1BESUZfU0VMX1NGVAkJCTAKKworLyogUkVDIExlZnQgTWl4ZXIgQ29udHJvbCAyICgweDAwM2MpICovCisjZGVmaW5lIFJUNTY1OV9NX0JTVDFfUk0xX0wJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDFfUk0xX0xfU0ZUCQkJNQorI2RlZmluZSBSVDU2NTlfTV9CU1QyX1JNMV9MCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfTV9CU1QyX1JNMV9MX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19STTFfTAkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19STTFfTF9TRlQJCQkzCisjZGVmaW5lIFJUNTY1OV9NX0JTVDRfUk0xX0wJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDRfUk0xX0xfU0ZUCQkJMgorI2RlZmluZSBSVDU2NTlfTV9JTkxfUk0xX0wJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTY1OV9NX0lOTF9STTFfTF9TRlQJCQkxCisjZGVmaW5lIFJUNTY1OV9NX1NQS1ZPTExfUk0xX0wJCQkoMHgxKQorI2RlZmluZSBSVDU2NTlfTV9TUEtWT0xMX1JNMV9MX1NGVAkJMAorCisvKiBSRUMgUmlnaHQgTWl4ZXIgQ29udHJvbCAyICgweDAwM2UpICovCisjZGVmaW5lIFJUNTY1OV9NX0JTVDFfUk0xX1IJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDFfUk0xX1JfU0ZUCQkJNQorI2RlZmluZSBSVDU2NTlfTV9CU1QyX1JNMV9SCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfTV9CU1QyX1JNMV9SX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19STTFfUgkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19STTFfUl9TRlQJCQkzCisjZGVmaW5lIFJUNTY1OV9NX0JTVDRfUk0xX1IJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDRfUk0xX1JfU0ZUCQkJMgorI2RlZmluZSBSVDU2NTlfTV9JTlJfUk0xX1IJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTY1OV9NX0lOUl9STTFfUl9TRlQJCQkxCisjZGVmaW5lIFJUNTY1OV9NX0hQT1ZPTFJfUk0xX1IJCQkoMHgxKQorI2RlZmluZSBSVDU2NTlfTV9IUE9WT0xSX1JNMV9SX1NGVAkJMAorCisvKiBTUEsgTGVmdCBNaXhlciBDb250cm9sICgweDAwNDYpICovCisjZGVmaW5lIFJUNTY1OV9NX0JTVDNfU01fTAkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19TTV9MX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X01fSU5fUl9TTV9MCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2NTlfTV9JTl9SX1NNX0xfU0ZUCQkJMworI2RlZmluZSBSVDU2NTlfTV9JTl9MX1NNX0wJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9NX0lOX0xfU01fTF9TRlQJCQkyCisjZGVmaW5lIFJUNTY1OV9NX0JTVDFfU01fTAkJCSgweDEgPDwgMSkKKyNkZWZpbmUgUlQ1NjU5X01fQlNUMV9TTV9MX1NGVAkJCTEKKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wyX1NNX0wJCQkoMHgxKQorI2RlZmluZSBSVDU2NTlfTV9EQUNfTDJfU01fTF9TRlQJCTAKKworLyogU1BLIFJpZ2h0IE1peGVyIENvbnRyb2wgKDB4MDA0NykgKi8KKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19TTV9SCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfTV9CU1QzX1NNX1JfU0ZUCQkJNAorI2RlZmluZSBSVDU2NTlfTV9JTl9SX1NNX1IJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTY1OV9NX0lOX1JfU01fUl9TRlQJCQkzCisjZGVmaW5lIFJUNTY1OV9NX0lOX0xfU01fUgkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjU5X01fSU5fTF9TTV9SX1NGVAkJCTIKKyNkZWZpbmUgUlQ1NjU5X01fQlNUNF9TTV9SCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2NTlfTV9CU1Q0X1NNX1JfU0ZUCQkJMQorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjJfU01fUgkJCSgweDEpCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19SMl9TTV9SX1NGVAkJMAorCisvKiBTUE8gQW1wIElucHV0IGFuZCBHYWluIENvbnRyb2wgKDB4MDA0OCkgKi8KKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wyX1NQS09NSVgJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2NTlfTV9EQUNfTDJfU1BLT01JWF9TRlQJCTEzCisjZGVmaW5lIFJUNTY1OV9NX1NQS1ZPTExfU1BLT01JWAkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X01fU1BLVk9MTF9TUEtPTUlYX1NGVAkJMTIKKyNkZWZpbmUgUlQ1NjU5X01fREFDX1IyX1NQS09NSVgJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19SMl9TUEtPTUlYX1NGVAkJOQorI2RlZmluZSBSVDU2NTlfTV9TUEtWT0xSX1NQS09NSVgJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X01fU1BLVk9MUl9TUEtPTUlYX1NGVAkJOAorCisvKiBNT05PTUlYIElucHV0IGFuZCBHYWluIENvbnRyb2wgKDB4MDA0YikgKi8KKyNkZWZpbmUgUlQ1NjU5X01fTU9OT1ZPTF9NQQkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X01fTU9OT1ZPTF9NQV9TRlQJCQk5CisjZGVmaW5lIFJUNTY1OV9NX0RBQ19MMl9NQQkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wyX01BX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19NTQkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19NTV9TRlQJCQk0CisjZGVmaW5lIFJUNTY1OV9NX0JTVDJfTU0JCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDJfTU1fU0ZUCQkJMworI2RlZmluZSBSVDU2NTlfTV9CU1QxX01NCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2NTlfTV9CU1QxX01NX1NGVAkJCTIKKyNkZWZpbmUgUlQ1NjU5X01fREFDX1IyX01NCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjJfTU1fU0ZUCQkJMQorI2RlZmluZSBSVDU2NTlfTV9EQUNfTDJfTU0JCQkoMHgxKQorI2RlZmluZSBSVDU2NTlfTV9EQUNfTDJfTU1fU0ZUCQkJMAorCisvKiBPdXRwdXQgTGVmdCBNaXhlciBDb250cm9sIDEgKDB4MDA0ZCkgKi8KKyNkZWZpbmUgUlQ1NjU5X0dfQlNUM19PTV9MX01BU0sJCQkoMHg3IDw8IDEyKQorI2RlZmluZSBSVDU2NTlfR19CU1QzX09NX0xfU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjU5X0dfQlNUMl9PTV9MX01BU0sJCQkoMHg3IDw8IDkpCisjZGVmaW5lIFJUNTY1OV9HX0JTVDJfT01fTF9TRlQJCQk5CisjZGVmaW5lIFJUNTY1OV9HX0JTVDFfT01fTF9NQVNLCQkJKDB4NyA8PCA2KQorI2RlZmluZSBSVDU2NTlfR19CU1QxX09NX0xfU0ZUCQkJNgorI2RlZmluZSBSVDU2NTlfR19JTl9MX09NX0xfTUFTSwkJCSgweDcgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X0dfSU5fTF9PTV9MX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjU5X0dfREFDX0wyX09NX0xfTUFTSwkJKDB4NyA8PCAwKQorI2RlZmluZSBSVDU2NTlfR19EQUNfTDJfT01fTF9TRlQJCTAKKworLyogT3V0cHV0IExlZnQgTWl4ZXIgSW5wdXQgQ29udHJvbCAoMHgwMDRlKSAqLworI2RlZmluZSBSVDU2NTlfTV9CU1QzX09NX0wJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDNfT01fTF9TRlQJCQk0CisjZGVmaW5lIFJUNTY1OV9NX0JTVDJfT01fTAkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X01fQlNUMl9PTV9MX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjU5X01fQlNUMV9PTV9MCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2NTlfTV9CU1QxX09NX0xfU0ZUCQkJMgorI2RlZmluZSBSVDU2NTlfTV9JTl9MX09NX0wJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTY1OV9NX0lOX0xfT01fTF9TRlQJCQkxCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19MMl9PTV9MCQkJKDB4MSkKKyNkZWZpbmUgUlQ1NjU5X01fREFDX0wyX09NX0xfU0ZUCQkwCisKKy8qIE91dHB1dCBSaWdodCBNaXhlciBJbnB1dCBDb250cm9sICgweDAwNTApICovCisjZGVmaW5lIFJUNTY1OV9NX0JTVDRfT01fUgkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X01fQlNUNF9PTV9SX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19PTV9SCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2NTlfTV9CU1QzX09NX1JfU0ZUCQkJMworI2RlZmluZSBSVDU2NTlfTV9CU1QyX09NX1IJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDJfT01fUl9TRlQJCQkyCisjZGVmaW5lIFJUNTY1OV9NX0lOX1JfT01fUgkJCSgweDEgPDwgMSkKKyNkZWZpbmUgUlQ1NjU5X01fSU5fUl9PTV9SX1NGVAkJCTEKKyNkZWZpbmUgUlQ1NjU5X01fREFDX1IyX09NX1IJCQkoMHgxKQorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjJfT01fUl9TRlQJCTAKKworLyogTE9VVCBNaXhlciBDb250cm9sICgweDAwNTIpICovCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19MMl9MTQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9NX0RBQ19MMl9MTV9TRlQJCQkxNQorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjJfTE0JCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfTV9EQUNfUjJfTE1fU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjU5X01fT1ZfTF9MTQkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9NX09WX0xfTE1fU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjU5X01fT1ZfUl9MTQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9NX09WX1JfTE1fU0ZUCQkJMTIKKworLyogUG93ZXIgTWFuYWdlbWVudCBmb3IgRGlnaXRhbCAxICgweDAwNjEpICovCisjZGVmaW5lIFJUNTY1OV9QV1JfSTJTMQkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfUFdSX0kyUzFfQklUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X1BXUl9JMlMyCQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9QV1JfSTJTMl9CSVQJCQkxNAorI2RlZmluZSBSVDU2NTlfUFdSX0kyUzMJCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X1BXUl9JMlMzX0JJVAkJCTEzCisjZGVmaW5lIFJUNTY1OV9QV1JfU1BESUYJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfUFdSX1NQRElGX0JJVAkJCTEyCisjZGVmaW5lIFJUNTY1OV9QV1JfREFDX0wxCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9EQUNfTDFfQklUCQkJMTEKKyNkZWZpbmUgUlQ1NjU5X1BXUl9EQUNfUjEJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfUFdSX0RBQ19SMV9CSVQJCQkxMAorI2RlZmluZSBSVDU2NTlfUFdSX0RBQ19MMgkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9EQUNfTDJfQklUCQkJOQorI2RlZmluZSBSVDU2NTlfUFdSX0RBQ19SMgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9EQUNfUjJfQklUCQkJOAorI2RlZmluZSBSVDU2NTlfUFdSX0xETwkJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9QV1JfTERPX0JJVAkJCTcKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BRENfTDEJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTY1OV9QV1JfQURDX0wxX0JJVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BRENfUjEJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTY1OV9QV1JfQURDX1IxX0JJVAkJCTMKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BRENfTDIJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9QV1JfQURDX0wyX0JJVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BRENfUjIJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTY1OV9QV1JfQURDX1IyX0JJVAkJCTEKKyNkZWZpbmUgUlQ1NjU5X1BXUl9DTFNfRAkJCSgweDEpCisjZGVmaW5lIFJUNTY1OV9QV1JfQ0xTX0RfQklUCQkJMAorCisvKiBQb3dlciBNYW5hZ2VtZW50IGZvciBEaWdpdGFsIDIgKDB4MDA2MikgKi8KKyNkZWZpbmUgUlQ1NjU5X1BXUl9BRENfUzFGCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BRENfUzFGX0JJVAkJCTE1CisjZGVmaW5lIFJUNTY1OV9QV1JfQURDX1MyRgkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9QV1JfQURDX1MyRl9CSVQJCQkxNAorI2RlZmluZSBSVDU2NTlfUFdSX0FEQ19NRl9MCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BRENfTUZfTF9CSVQJCQkxMworI2RlZmluZSBSVDU2NTlfUFdSX0FEQ19NRl9SCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X1BXUl9BRENfTUZfUl9CSVQJCQkxMgorI2RlZmluZSBSVDU2NTlfUFdSX0RBQ19TMUYJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfUFdSX0RBQ19TMUZfQklUCQkJMTAKKyNkZWZpbmUgUlQ1NjU5X1BXUl9EQUNfTUZfTAkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9EQUNfTUZfTF9CSVQJCQk5CisjZGVmaW5lIFJUNTY1OV9QV1JfREFDX01GX1IJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9QV1JfREFDX01GX1JfQklUCQkJOAorI2RlZmluZSBSVDU2NTlfUFdSX1BETTEJCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2NTlfUFdSX1BETTFfQklUCQkJNworCisvKiBQb3dlciBNYW5hZ2VtZW50IGZvciBBbmFsb2cgMSAoMHgwMDYzKSAqLworI2RlZmluZSBSVDU2NTlfUFdSX1ZSRUYxCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9WUkVGMV9CSVQJCQkxNQorI2RlZmluZSBSVDU2NTlfUFdSX0ZWMQkJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfUFdSX0ZWMV9CSVQJCQkxNAorI2RlZmluZSBSVDU2NTlfUFdSX1ZSRUYyCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X1BXUl9WUkVGMl9CSVQJCQkxMworI2RlZmluZSBSVDU2NTlfUFdSX0ZWMgkJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfUFdSX0ZWMl9CSVQJCQkxMgorI2RlZmluZSBSVDU2NTlfUFdSX1ZSRUYzCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9WUkVGM19CSVQJCQkxMQorI2RlZmluZSBSVDU2NTlfUFdSX0ZWMwkJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfUFdSX0ZWM19CSVQJCQkxMAorI2RlZmluZSBSVDU2NTlfUFdSX01CCQkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQl9CSVQJCQk5CisjZGVmaW5lIFJUNTY1OV9QV1JfTE0JCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2NTlfUFdSX0xNX0JJVAkJCTgKKyNkZWZpbmUgUlQ1NjU5X1BXUl9CRwkJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9QV1JfQkdfQklUCQkJNworI2RlZmluZSBSVDU2NTlfUFdSX01BCQkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQV9CSVQJCQk2CisjZGVmaW5lIFJUNTY1OV9QV1JfSEFfTAkJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTY1OV9QV1JfSEFfTF9CSVQJCQk1CisjZGVmaW5lIFJUNTY1OV9QV1JfSEFfUgkJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTY1OV9QV1JfSEFfUl9CSVQJCQk0CisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgZm9yIEFuYWxvZyAyICgweDAwNjQpICovCisjZGVmaW5lIFJUNTY1OV9QV1JfQlNUMQkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfUFdSX0JTVDFfQklUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X1BXUl9CU1QyCQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9QV1JfQlNUMl9CSVQJCQkxNAorI2RlZmluZSBSVDU2NTlfUFdSX0JTVDMJCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X1BXUl9CU1QzX0JJVAkJCTEzCisjZGVmaW5lIFJUNTY1OV9QV1JfQlNUNAkJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfUFdSX0JTVDRfQklUCQkJMTIKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQjEJCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQjFfQklUCQkJMTEKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQjIJCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQjJfQklUCQkJMTAKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQjMJCQkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2NTlfUFdSX01CM19CSVQJCQk5CisjZGVmaW5lIFJUNTY1OV9QV1JfQlNUMV9QCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfUFdSX0JTVDFfUF9CSVQJCQk2CisjZGVmaW5lIFJUNTY1OV9QV1JfQlNUMl9QCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfUFdSX0JTVDJfUF9CSVQJCQk1CisjZGVmaW5lIFJUNTY1OV9QV1JfQlNUM19QCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfUFdSX0JTVDNfUF9CSVQJCQk0CisjZGVmaW5lIFJUNTY1OV9QV1JfQlNUNF9QCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2NTlfUFdSX0JTVDRfUF9CSVQJCQkzCisjZGVmaW5lIFJUNTY1OV9QV1JfSkQxCQkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjU5X1BXUl9KRDFfQklUCQkJMgorI2RlZmluZSBSVDU2NTlfUFdSX0pEMgkJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTY1OV9QV1JfSkQyX0JJVAkJCTEKKyNkZWZpbmUgUlQ1NjU5X1BXUl9KRDMJCQkJKDB4MSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9KRDNfQklUCQkJMAorCisvKiBQb3dlciBNYW5hZ2VtZW50IGZvciBBbmFsb2cgMyAoMHgwMDY1KSAqLworI2RlZmluZSBSVDU2NTlfUFdSX0JTVF9MCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2NTlfUFdSX0JTVF9MX0JJVAkJCTgKKyNkZWZpbmUgUlQ1NjU5X1BXUl9CU1RfUgkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X1BXUl9CU1RfUl9CSVQJCQk3CisjZGVmaW5lIFJUNTY1OV9QV1JfUExMCQkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X1BXUl9QTExfQklUCQkJNgorI2RlZmluZSBSVDU2NTlfUFdSX0xETzUJCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfUFdSX0xETzVfQklUCQkJNQorI2RlZmluZSBSVDU2NTlfUFdSX0xETzQJCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfUFdSX0xETzRfQklUCQkJNAorI2RlZmluZSBSVDU2NTlfUFdSX0xETzMJCQkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2NTlfUFdSX0xETzNfQklUCQkJMworI2RlZmluZSBSVDU2NTlfUFdSX0xETzIJCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2NTlfUFdSX0xETzJfQklUCQkJMgorI2RlZmluZSBSVDU2NTlfUFdSX1NWRAkJCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTY1OV9QV1JfU1ZEX0JJVAkJCTEKKworLyogUG93ZXIgTWFuYWdlbWVudCBmb3IgTWl4ZXIgKDB4MDA2NikgKi8KKyNkZWZpbmUgUlQ1NjU5X1BXUl9PTV9MCQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9QV1JfT01fTF9CSVQJCQkxNQorI2RlZmluZSBSVDU2NTlfUFdSX09NX1IJCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9PTV9SX0JJVAkJCTE0CisjZGVmaW5lIFJUNTY1OV9QV1JfU01fTAkJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2NTlfUFdSX1NNX0xfQklUCQkJMTMKKyNkZWZpbmUgUlQ1NjU5X1BXUl9TTV9SCQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9QV1JfU01fUl9CSVQJCQkxMgorI2RlZmluZSBSVDU2NTlfUFdSX1JNMV9MCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9STTFfTF9CSVQJCQkxMQorI2RlZmluZSBSVDU2NTlfUFdSX1JNMV9SCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9STTFfUl9CSVQJCQkxMAorI2RlZmluZSBSVDU2NTlfUFdSX01NCQkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NTV9CSVQJCQk4CisjZGVmaW5lIFJUNTY1OV9QV1JfUk0yX0wJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTY1OV9QV1JfUk0yX0xfQklUCQkJMworI2RlZmluZSBSVDU2NTlfUFdSX1JNMl9SCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2NTlfUFdSX1JNMl9SX0JJVAkJCTIKKworLyogUG93ZXIgTWFuYWdlbWVudCBmb3IgVm9sdW1lICgweDAwNjcpICovCisjZGVmaW5lIFJUNTY1OV9QV1JfU1ZfTAkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfUFdSX1NWX0xfQklUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X1BXUl9TVl9SCQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9QV1JfU1ZfUl9CSVQJCQkxNAorI2RlZmluZSBSVDU2NTlfUFdSX09WX0wJCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X1BXUl9PVl9MX0JJVAkJCTEzCisjZGVmaW5lIFJUNTY1OV9QV1JfT1ZfUgkJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfUFdSX09WX1JfQklUCQkJMTIKKyNkZWZpbmUgUlQ1NjU5X1BXUl9JTl9MCQkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9JTl9MX0JJVAkJCTkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9JTl9SCQkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9JTl9SX0JJVAkJCTgKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NVgkJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9QV1JfTVZfQklUCQkJNworI2RlZmluZSBSVDU2NTlfUFdSX01JQ19ERVQJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTY1OV9QV1JfTUlDX0RFVF9CSVQJCQk1CisKKy8qIEkyUzEvMi8zIEF1ZGlvIFNlcmlhbCBEYXRhIFBvcnQgQ29udHJvbCAoMHgwMDcwIDB4MDA3MSAweDAwNzIpICovCisjZGVmaW5lIFJUNTY1OV9JMlNfTVNfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9JMlNfTVNfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X0kyU19NU19NCQkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9JMlNfTVNfUwkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfSTJTX09fQ1BfTUFTSwkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9JMlNfT19DUF9TRlQJCQkxMgorI2RlZmluZSBSVDU2NTlfSTJTX09fQ1BfT0ZGCQkJKDB4MCA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0kyU19PX0NQX1VfTEFXCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0kyU19PX0NQX0FfTEFXCQkJKDB4MiA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0kyU19JX0NQX01BU0sJCQkoMHgzIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfSTJTX0lfQ1BfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjU5X0kyU19JX0NQX09GRgkJCSgweDAgPDwgMTApCisjZGVmaW5lIFJUNTY1OV9JMlNfSV9DUF9VX0xBVwkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTY1OV9JMlNfSV9DUF9BX0xBVwkJCSgweDIgPDwgMTApCisjZGVmaW5lIFJUNTY1OV9JMlNfQlBfTUFTSwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19CUF9TRlQJCQk4CisjZGVmaW5lIFJUNTY1OV9JMlNfQlBfTk9SCQkJKDB4MCA8PCA4KQorI2RlZmluZSBSVDU2NTlfSTJTX0JQX0lOVgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19ETF9NQVNLCQkJKDB4MyA8PCA0KQorI2RlZmluZSBSVDU2NTlfSTJTX0RMX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X0kyU19ETF8xNgkJCSgweDAgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19ETF8yMAkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19ETF8yNAkJCSgweDIgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19ETF84CQkJCSgweDMgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19ERl9NQVNLCQkJKDB4NykKKyNkZWZpbmUgUlQ1NjU5X0kyU19ERl9TRlQJCQkwCisjZGVmaW5lIFJUNTY1OV9JMlNfREZfSTJTCQkJKDB4MCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19ERl9MRUZUCQkJKDB4MSkKKyNkZWZpbmUgUlQ1NjU5X0kyU19ERl9QQ01fQQkJCSgweDIpCisjZGVmaW5lIFJUNTY1OV9JMlNfREZfUENNX0IJCQkoMHgzKQorI2RlZmluZSBSVDU2NTlfSTJTX0RGX1BDTV9BX04JCQkoMHg2KQorI2RlZmluZSBSVDU2NTlfSTJTX0RGX1BDTV9CX04JCQkoMHg3KQorCisvKiBBREMvREFDIENsb2NrIENvbnRyb2wgMSAoMHgwMDczKSAqLworI2RlZmluZSBSVDU2NTlfSTJTX1BEMV9NQVNLCQkJKDB4NyA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDFfU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDFfMQkJCSgweDAgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9JMlNfUEQxXzIJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfSTJTX1BEMV8zCQkJKDB4MiA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDFfNAkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9JMlNfUEQxXzYJCQkoMHg0IDw8IDEyKQorI2RlZmluZSBSVDU2NTlfSTJTX1BEMV84CQkJKDB4NSA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDFfMTIJCQkoMHg2IDw8IDEyKQorI2RlZmluZSBSVDU2NTlfSTJTX1BEMV8xNgkJCSgweDcgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9JMlNfQkNMS19NUzJfTUFTSwkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X0kyU19CQ0xLX01TMl9TRlQJCQkxMQorI2RlZmluZSBSVDU2NTlfSTJTX0JDTEtfTVMyXzMyCQkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X0kyU19CQ0xLX01TMl82NAkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9JMlNfUEQyX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIFJUNTY1OV9JMlNfUEQyX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDJfMQkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDJfMgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDJfMwkJCSgweDIgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDJfNAkJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDJfNgkJCSgweDQgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDJfOAkJCSgweDUgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDJfMTIJCQkoMHg2IDw8IDgpCisjZGVmaW5lIFJUNTY1OV9JMlNfUEQyXzE2CQkJKDB4NyA8PCA4KQorI2RlZmluZSBSVDU2NTlfSTJTX0JDTEtfTVMzX01BU0sJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X0kyU19CQ0xLX01TM19TRlQJCQk3CisjZGVmaW5lIFJUNTY1OV9JMlNfQkNMS19NUzNfMzIJCQkoMHgwIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9JMlNfQkNMS19NUzNfNjQJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9JMlNfUEQzX01BU0sJCQkoMHg3IDw8IDQpCisjZGVmaW5lIFJUNTY1OV9JMlNfUEQzX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDNfMQkJCSgweDAgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDNfMgkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDNfMwkJCSgweDIgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDNfNAkJCSgweDMgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDNfNgkJCSgweDQgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDNfOAkJCSgweDUgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyU19QRDNfMTIJCQkoMHg2IDw8IDQpCisjZGVmaW5lIFJUNTY1OV9JMlNfUEQzXzE2CQkJKDB4NyA8PCA0KQorI2RlZmluZSBSVDU2NTlfREFDX09TUl9NQVNLCQkJKDB4MyA8PCAyKQorI2RlZmluZSBSVDU2NTlfREFDX09TUl9TRlQJCQkyCisjZGVmaW5lIFJUNTY1OV9EQUNfT1NSXzEyOAkJCSgweDAgPDwgMikKKyNkZWZpbmUgUlQ1NjU5X0RBQ19PU1JfNjQJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9EQUNfT1NSXzMyCQkJKDB4MiA8PCAyKQorI2RlZmluZSBSVDU2NTlfREFDX09TUl8xNgkJCSgweDMgPDwgMikKKyNkZWZpbmUgUlQ1NjU5X0FEQ19PU1JfTUFTSwkJCSgweDMpCisjZGVmaW5lIFJUNTY1OV9BRENfT1NSX1NGVAkJCTAKKyNkZWZpbmUgUlQ1NjU5X0FEQ19PU1JfMTI4CQkJKDB4MCkKKyNkZWZpbmUgUlQ1NjU5X0FEQ19PU1JfNjQJCQkoMHgxKQorI2RlZmluZSBSVDU2NTlfQURDX09TUl8zMgkJCSgweDIpCisjZGVmaW5lIFJUNTY1OV9BRENfT1NSXzE2CQkJKDB4MykKKworLyogRGlnaXRhbCBNaWNyb3Bob25lIENvbnRyb2wgKDB4MDA3NSkgKi8KKyNkZWZpbmUgUlQ1NjU5X0RNSUNfMV9FTl9NQVNLCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfMV9FTl9TRlQJCQkxNQorI2RlZmluZSBSVDU2NTlfRE1JQ18xX0RJUwkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9ETUlDXzFfRU4JCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfRE1JQ18yX0VOX01BU0sJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfRE1JQ18yX0VOX1NGVAkJCTE0CisjZGVmaW5lIFJUNTY1OV9ETUlDXzJfRElTCQkJKDB4MCA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfMl9FTgkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9ETUlDXzFMX0xIX01BU0sJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2NTlfRE1JQ18xTF9MSF9TRlQJCQkxMworI2RlZmluZSBSVDU2NTlfRE1JQ18xTF9MSF9SSVNJTkcJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9ETUlDXzFMX0xIX0ZBTExJTkcJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9ETUlDXzFSX0xIX01BU0sJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfRE1JQ18xUl9MSF9TRlQJCQkxMgorI2RlZmluZSBSVDU2NTlfRE1JQ18xUl9MSF9SSVNJTkcJCSgweDAgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9ETUlDXzFSX0xIX0ZBTExJTkcJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9ETUlDXzJfRFBfTUFTSwkJCSgweDMgPDwgMTApCisjZGVmaW5lIFJUNTY1OV9ETUlDXzJfRFBfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfMl9EUF9HUElPNgkJCSgweDAgPDwgMTApCisjZGVmaW5lIFJUNTY1OV9ETUlDXzJfRFBfR1BJTzEwCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfMl9EUF9HUElPMTIJCQkoMHgyIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfRE1JQ18yX0RQX0lOMlAJCQkoMHgzIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfRE1JQ19DTEtfTUFTSwkJCSgweDcgPDwgNSkKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfQ0xLX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfMV9EUF9NQVNLCQkJKDB4MyA8PCAwKQorI2RlZmluZSBSVDU2NTlfRE1JQ18xX0RQX1NGVAkJCTAKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfMV9EUF9HUElPNQkJCSgweDAgPDwgMCkKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfMV9EUF9HUElPOQkJCSgweDEgPDwgMCkKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfMV9EUF9HUElPMTEJCQkoMHgyIDw8IDApCisjZGVmaW5lIFJUNTY1OV9ETUlDXzFfRFBfSU4yTgkJCSgweDMgPDwgMCkKKworLyogVERNIGNvbnRyb2wgMSAoMHgwMDc4KSovCisjZGVmaW5lIFJUNTY1OV9EU19BRENfU0xPVDAxX1NGVAkJMTQKKyNkZWZpbmUgUlQ1NjU5X0RTX0FEQ19TTE9UMjNfU0ZUCQkxMgorI2RlZmluZSBSVDU2NTlfRFNfQURDX1NMT1Q0NV9TRlQJCTEwCisjZGVmaW5lIFJUNTY1OV9EU19BRENfU0xPVDY3X1NGVAkJOAorI2RlZmluZSBSVDU2NTlfQURDREFUX1NSQ19NQVNLCQkJMHgxZgorI2RlZmluZSBSVDU2NTlfQURDREFUX1NSQ19TRlQJCQkwCisKKy8qIEdsb2JhbCBDbG9jayBDb250cm9sICgweDAwODApICovCisjZGVmaW5lIFJUNTY1OV9TQ0xLX1NSQ19NQVNLCQkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X1NDTEtfU1JDX1NGVAkJCTE0CisjZGVmaW5lIFJUNTY1OV9TQ0xLX1NSQ19NQ0xLCQkJKDB4MCA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X1NDTEtfU1JDX1BMTDEJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfU0NMS19TUkNfUkNDTEsJCQkoMHgyIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfUExMMV9TUkNfTUFTSwkJCSgweDcgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9QTEwxX1NSQ19TRlQJCQkxMQorI2RlZmluZSBSVDU2NTlfUExMMV9TUkNfTUNMSwkJCSgweDAgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9QTEwxX1NSQ19CQ0xLMQkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9QTEwxX1NSQ19CQ0xLMgkJCSgweDIgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9QTEwxX1NSQ19CQ0xLMwkJCSgweDMgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9QTEwxX1BEX01BU0sJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTY1OV9QTEwxX1BEX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjU5X1BMTDFfUERfMQkJCSgweDAgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X1BMTDFfUERfMgkJCSgweDEgPDwgMykKKworI2RlZmluZSBSVDU2NTlfUExMX0lOUF9NQVgJCQk0MDAwMDAwMAorI2RlZmluZSBSVDU2NTlfUExMX0lOUF9NSU4JCQkyNTYwMDAKKy8qIFBMTCBNL04vSyBDb2RlIENvbnRyb2wgMSAoMHgwMDgxKSAqLworI2RlZmluZSBSVDU2NTlfUExMX05fTUFYCQkJMHgwMDFmZgorI2RlZmluZSBSVDU2NTlfUExMX05fTUFTSwkJCShSVDU2NTlfUExMX05fTUFYIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9QTExfTl9TRlQJCQk3CisjZGVmaW5lIFJUNTY1OV9QTExfS19NQVgJCQkweDAwMWYKKyNkZWZpbmUgUlQ1NjU5X1BMTF9LX01BU0sJCQkoUlQ1NjU5X1BMTF9LX01BWCkKKyNkZWZpbmUgUlQ1NjU5X1BMTF9LX1NGVAkJCTAKKworLyogUExMIE0vTi9LIENvZGUgQ29udHJvbCAyICgweDAwODIpICovCisjZGVmaW5lIFJUNTY1OV9QTExfTV9NQVgJCQkweDAwZgorI2RlZmluZSBSVDU2NTlfUExMX01fTUFTSwkJCShSVDU2NTlfUExMX01fTUFYIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfUExMX01fU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjU5X1BMTF9NX0JQCQkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9QTExfTV9CUF9TRlQJCQkxMQorCisvKiBQTEwgdHJhY2tpbmcgbW9kZSAxICgweDAwODMpICovCisjZGVmaW5lIFJUNTY1OV9JMlMzX0FTUkNfTUFTSwkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9JMlMzX0FTUkNfU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjU5X0kyUzJfQVNSQ19NQVNLCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0kyUzJfQVNSQ19TRlQJCQkxMgorI2RlZmluZSBSVDU2NTlfSTJTMV9BU1JDX01BU0sJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2NTlfSTJTMV9BU1JDX1NGVAkJCTExCisjZGVmaW5lIFJUNTY1OV9EQUNfU1RPX0FTUkNfTUFTSwkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X0RBQ19TVE9fQVNSQ19TRlQJCQkxMAorI2RlZmluZSBSVDU2NTlfREFDX01PTk9fTF9BU1JDX01BU0sJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X0RBQ19NT05PX0xfQVNSQ19TRlQJCTkKKyNkZWZpbmUgUlQ1NjU5X0RBQ19NT05PX1JfQVNSQ19NQVNLCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9EQUNfTU9OT19SX0FTUkNfU0ZUCQk4CisjZGVmaW5lIFJUNTY1OV9ETUlDX1NUTzFfQVNSQ19NQVNLCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9ETUlDX1NUTzFfQVNSQ19TRlQJCTcKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfTU9OT19MX0FTUkNfTUFTSwkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfRE1JQ19NT05PX0xfQVNSQ19TRlQJCTUKKyNkZWZpbmUgUlQ1NjU5X0RNSUNfTU9OT19SX0FTUkNfTUFTSwkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfRE1JQ19NT05PX1JfQVNSQ19TRlQJCTQKKyNkZWZpbmUgUlQ1NjU5X0FEQ19TVE8xX0FTUkNfTUFTSwkJKDB4MSA8PCAzKQorI2RlZmluZSBSVDU2NTlfQURDX1NUTzFfQVNSQ19TRlQJCTMKKyNkZWZpbmUgUlQ1NjU5X0FEQ19NT05PX0xfQVNSQ19NQVNLCQkoMHgxIDw8IDEpCisjZGVmaW5lIFJUNTY1OV9BRENfTU9OT19MX0FTUkNfU0ZUCQkxCisjZGVmaW5lIFJUNTY1OV9BRENfTU9OT19SX0FTUkNfTUFTSwkJKDB4MSkKKyNkZWZpbmUgUlQ1NjU5X0FEQ19NT05PX1JfQVNSQ19TRlQJCTAKKworLyogUExMIHRyYWNraW5nIG1vZGUgMiAoMHgwMDg0KSovCisjZGVmaW5lIFJUNTY1OV9EQV9TVE9fVF9NQVNLCQkJKDB4NyA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0RBX1NUT19UX1NGVAkJCTEyCisjZGVmaW5lIFJUNTY1OV9EQV9NT05PX0xfVF9NQVNLCQkJKDB4NyA8PCA4KQorI2RlZmluZSBSVDU2NTlfREFfTU9OT19MX1RfU0ZUCQkJOAorI2RlZmluZSBSVDU2NTlfREFfTU9OT19SX1RfTUFTSwkJCSgweDcgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0RBX01PTk9fUl9UX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X0FEX1NUTzFfVF9NQVNLCQkJKDB4NykKKyNkZWZpbmUgUlQ1NjU5X0FEX1NUTzFfVF9TRlQJCQkwCisKKy8qIFBMTCB0cmFja2luZyBtb2RlIDMgKDB4MDA4NSkqLworI2RlZmluZSBSVDU2NTlfQURfU1RPMl9UX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIFJUNTY1OV9BRF9TVE8yX1RfU0ZUCQkJOAorI2RlZmluZSBSVDU2NTlfQURfTU9OT19MX1RfTUFTSwkJCSgweDcgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0FEX01PTk9fTF9UX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X0FEX01PTk9fUl9UX01BU0sJCQkoMHg3KQorI2RlZmluZSBSVDU2NTlfQURfTU9OT19SX1RfU0ZUCQkJMAorCisvKiBBU1JDIENvbnRyb2wgNCAoMHgwMDg2KSAqLworI2RlZmluZSBSVDU2NTlfSTJTMV9SQVRFX01BU0sJCQkoMHhmIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfSTJTMV9SQVRFX1NGVAkJCTEyCisjZGVmaW5lIFJUNTY1OV9JMlMyX1JBVEVfTUFTSwkJCSgweGYgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0kyUzJfUkFURV9TRlQJCQk4CisjZGVmaW5lIFJUNTY1OV9JMlMzX1JBVEVfTUFTSwkJCSgweGYgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0kyUzNfUkFURV9TRlQJCQk0CisKKy8qIERlcG9wIE1vZGUgQ29udHJvbCAxICgweDhlKSAqLworI2RlZmluZSBSVDU2NTlfU01UX1RSSUdfTUFTSwkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9TTVRfVFJJR19TRlQJCQkxNQorI2RlZmluZSBSVDU2NTlfU01UX1RSSUdfRElTCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X1NNVF9UUklHX0VOCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X0hQX0xfU01UX01BU0sJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTY1OV9IUF9MX1NNVF9TRlQJCQk5CisjZGVmaW5lIFJUNTY1OV9IUF9MX1NNVF9ESVMJCQkoMHgwIDw8IDkpCisjZGVmaW5lIFJUNTY1OV9IUF9MX1NNVF9FTgkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X0hQX1JfU01UX01BU0sJCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9IUF9SX1NNVF9TRlQJCQk4CisjZGVmaW5lIFJUNTY1OV9IUF9SX1NNVF9ESVMJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9IUF9SX1NNVF9FTgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0hQX0NEX1BEX01BU0sJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9IUF9DRF9QRF9TRlQJCQk3CisjZGVmaW5lIFJUNTY1OV9IUF9DRF9QRF9ESVMJCQkoMHgwIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9IUF9DRF9QRF9FTgkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X1JTVE5fTUFTSwkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X1JTVE5fU0ZUCQkJCTYKKyNkZWZpbmUgUlQ1NjU5X1JTVE5fRElTCQkJCSgweDAgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X1JTVE5fRU4JCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfUlNUUF9NQVNLCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfUlNUUF9TRlQJCQkJNQorI2RlZmluZSBSVDU2NTlfUlNUUF9ESVMJCQkJKDB4MCA8PCA1KQorI2RlZmluZSBSVDU2NTlfUlNUUF9FTgkJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTY1OV9IUF9DT19NQVNLCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfSFBfQ09fU0ZUCQkJNAorI2RlZmluZSBSVDU2NTlfSFBfQ09fRElTCQkJKDB4MCA8PCA0KQorI2RlZmluZSBSVDU2NTlfSFBfQ09fRU4JCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfSFBfQ1BfTUFTSwkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X0hQX0NQX1NGVAkJCTMKKyNkZWZpbmUgUlQ1NjU5X0hQX0NQX1BECQkJCSgweDAgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X0hQX0NQX1BVCQkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X0hQX1NHX01BU0sJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9IUF9TR19TRlQJCQkyCisjZGVmaW5lIFJUNTY1OV9IUF9TR19ESVMJCQkoMHgwIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9IUF9TR19FTgkJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9IUF9EUF9NQVNLCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2NTlfSFBfRFBfU0ZUCQkJMQorI2RlZmluZSBSVDU2NTlfSFBfRFBfUEQJCQkJKDB4MCA8PCAxKQorI2RlZmluZSBSVDU2NTlfSFBfRFBfUFUJCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2NTlfSFBfQ0JfTUFTSwkJCSgweDEpCisjZGVmaW5lIFJUNTY1OV9IUF9DQl9TRlQJCQkwCisjZGVmaW5lIFJUNTY1OV9IUF9DQl9QRAkJCQkoMHgwKQorI2RlZmluZSBSVDU2NTlfSFBfQ0JfUFUJCQkJKDB4MSkKKworLyogRGVwb3AgTW9kZSBDb250cm9sIDIgKDB4OGYpICovCisjZGVmaW5lIFJUNTY1OV9ERVBPUF9NQVNLCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X0RFUE9QX1NGVAkJCTEzCisjZGVmaW5lIFJUNTY1OV9ERVBPUF9BVVRPCQkJKDB4MCA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X0RFUE9QX01BTgkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9SQU1QX01BU0sJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfUkFNUF9TRlQJCQkJMTIKKyNkZWZpbmUgUlQ1NjU5X1JBTVBfRElTCQkJCSgweDAgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9SQU1QX0VOCQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9CUFNfTUFTSwkJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2NTlfQlBTX1NGVAkJCQkxMQorI2RlZmluZSBSVDU2NTlfQlBTX0RJUwkJCQkoMHgwIDw8IDExKQorI2RlZmluZSBSVDU2NTlfQlBTX0VOCQkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9GQVNUX1VQRE5fTUFTSwkJCSgweDEgPDwgMTApCisjZGVmaW5lIFJUNTY1OV9GQVNUX1VQRE5fU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjU5X0ZBU1RfVVBETl9ESVMJCQkoMHgwIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfRkFTVF9VUEROX0VOCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X01SRVNfTUFTSwkJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X01SRVNfU0ZUCQkJCTgKKyNkZWZpbmUgUlQ1NjU5X01SRVNfMTVNTwkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X01SRVNfMjVNTwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X01SRVNfMzVNTwkJCSgweDIgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X01SRVNfNDVNTwkJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X1ZMT19NQVNLCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X1ZMT19TRlQJCQkJNworI2RlZmluZSBSVDU2NTlfVkxPXzNWCQkJCSgweDAgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X1ZMT18zMlYJCQkJKDB4MSA8PCA3KQorI2RlZmluZSBSVDU2NTlfRElHX0RQX01BU0sJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTY1OV9ESUdfRFBfU0ZUCQkJNgorI2RlZmluZSBSVDU2NTlfRElHX0RQX0RJUwkJCSgweDAgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X0RJR19EUF9FTgkJCSgweDEgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X0RQX1RIX01BU0sJCQkoMHgzIDw8IDQpCisjZGVmaW5lIFJUNTY1OV9EUF9USF9TRlQJCQk0CisKKy8qIERlcG9wIE1vZGUgQ29udHJvbCAzICgweDkwKSAqLworI2RlZmluZSBSVDU2NTlfQ1BfU1lTX01BU0sJCQkoMHg3IDw8IDEyKQorI2RlZmluZSBSVDU2NTlfQ1BfU1lTX1NGVAkJCTEyCisjZGVmaW5lIFJUNTY1OV9DUF9GUTFfTUFTSwkJCSgweDcgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0NQX0ZRMV9TRlQJCQk4CisjZGVmaW5lIFJUNTY1OV9DUF9GUTJfTUFTSwkJCSgweDcgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0NQX0ZRMl9TRlQJCQk0CisjZGVmaW5lIFJUNTY1OV9DUF9GUTNfTUFTSwkJCSgweDcpCisjZGVmaW5lIFJUNTY1OV9DUF9GUTNfU0ZUCQkJMAorI2RlZmluZSBSVDU2NTlfQ1BfRlFfMV81X0tIWgkJCTAKKyNkZWZpbmUgUlQ1NjU5X0NQX0ZRXzNfS0haCQkJMQorI2RlZmluZSBSVDU2NTlfQ1BfRlFfNl9LSFoJCQkyCisjZGVmaW5lIFJUNTY1OV9DUF9GUV8xMl9LSFoJCQkzCisjZGVmaW5lIFJUNTY1OV9DUF9GUV8yNF9LSFoJCQk0CisjZGVmaW5lIFJUNTY1OV9DUF9GUV80OF9LSFoJCQk1CisjZGVmaW5lIFJUNTY1OV9DUF9GUV85Nl9LSFoJCQk2CisjZGVmaW5lIFJUNTY1OV9DUF9GUV8xOTJfS0haCQkJNworCisvKiBIUE9VVCBjaGFyZ2UgcHVtcCAxICgweDAwOTEpICovCisjZGVmaW5lIFJUNTY1OV9PU1dfTF9NQVNLCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X09TV19MX1NGVAkJCTExCisjZGVmaW5lIFJUNTY1OV9PU1dfTF9ESVMJCQkoMHgwIDw8IDExKQorI2RlZmluZSBSVDU2NTlfT1NXX0xfRU4JCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X09TV19SX01BU0sJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfT1NXX1JfU0ZUCQkJMTAKKyNkZWZpbmUgUlQ1NjU5X09TV19SX0RJUwkJCSgweDAgPDwgMTApCisjZGVmaW5lIFJUNTY1OV9PU1dfUl9FTgkJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfUE1fSFBfTUFTSwkJCSgweDMgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X1BNX0hQX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjU5X1BNX0hQX0xWCQkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X1BNX0hQX01WCQkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X1BNX0hQX0hWCQkJCSgweDIgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0lCX0hQX01BU0sJCQkoMHgzIDw8IDYpCisjZGVmaW5lIFJUNTY1OV9JQl9IUF9TRlQJCQk2CisjZGVmaW5lIFJUNTY1OV9JQl9IUF8xMjVJTAkJCSgweDAgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X0lCX0hQXzI1SUwJCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTY1OV9JQl9IUF81SUwJCQkoMHgyIDw8IDYpCisjZGVmaW5lIFJUNTY1OV9JQl9IUF8xSUwJCQkoMHgzIDw8IDYpCisKKy8qIFBWIGRldGVjdGlvbiBhbmQgU1BLIGdhaW4gY29udHJvbCAoMHg5MikgKi8KKyNkZWZpbmUgUlQ1NjU5X1BWRERfREVUX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfUFZERF9ERVRfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X1BWRERfREVUX0RJUwkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9QVkREX0RFVF9FTgkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9TUEtfQUdfTUFTSwkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9TUEtfQUdfU0ZUCQkJMTQKKyNkZWZpbmUgUlQ1NjU5X1NQS19BR19ESVMJCQkoMHgwIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfU1BLX0FHX0VOCQkJKDB4MSA8PCAxNCkKKworLyogTWljYmlhcyBDb250cm9sICgweDkzKSAqLworI2RlZmluZSBSVDU2NTlfTUlDMV9CU19NQVNLCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X01JQzFfQlNfU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X01JQzFfQlNfOUFWCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X01JQzFfQlNfNzVBVgkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9NSUMyX0JTX01BU0sJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfTUlDMl9CU19TRlQJCQkxNAorI2RlZmluZSBSVDU2NTlfTUlDMl9CU185QVYJCQkoMHgwIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfTUlDMl9CU183NUFWCQkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X01JQzFfQ0xLX01BU0sJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2NTlfTUlDMV9DTEtfU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjU5X01JQzFfQ0xLX0RJUwkJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9NSUMxX0NMS19FTgkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9NSUMyX0NMS19NQVNLCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X01JQzJfQ0xLX1NGVAkJCTEyCisjZGVmaW5lIFJUNTY1OV9NSUMyX0NMS19ESVMJCQkoMHgwIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfTUlDMl9DTEtfRU4JCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfTUlDMV9PVkNEX01BU0sJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2NTlfTUlDMV9PVkNEX1NGVAkJCTExCisjZGVmaW5lIFJUNTY1OV9NSUMxX09WQ0RfRElTCQkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X01JQzFfT1ZDRF9FTgkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9NSUMxX09WVEhfTUFTSwkJCSgweDMgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X01JQzFfT1ZUSF9TRlQJCQk5CisjZGVmaW5lIFJUNTY1OV9NSUMxX09WVEhfNjAwVUEJCQkoMHgwIDw8IDkpCisjZGVmaW5lIFJUNTY1OV9NSUMxX09WVEhfMTUwMFVBCQkJKDB4MSA8PCA5KQorI2RlZmluZSBSVDU2NTlfTUlDMV9PVlRIXzIwMDBVQQkJCSgweDIgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X01JQzJfT1ZDRF9NQVNLCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2NTlfTUlDMl9PVkNEX1NGVAkJCTgKKyNkZWZpbmUgUlQ1NjU5X01JQzJfT1ZDRF9ESVMJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9NSUMyX09WQ0RfRU4JCQkoMHgxIDw8IDgpCisjZGVmaW5lIFJUNTY1OV9NSUMyX09WVEhfTUFTSwkJCSgweDMgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X01JQzJfT1ZUSF9TRlQJCQk2CisjZGVmaW5lIFJUNTY1OV9NSUMyX09WVEhfNjAwVUEJCQkoMHgwIDw8IDYpCisjZGVmaW5lIFJUNTY1OV9NSUMyX09WVEhfMTUwMFVBCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfTUlDMl9PVlRIXzIwMDBVQQkJCSgweDIgPDwgNikKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQl9NQVNLCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfUFdSX01CX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQl9QRAkJCSgweDAgPDwgNSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9NQl9QVQkJCSgweDEgPDwgNSkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9DTEsyNU1fTUFTSwkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9DTEsyNU1fU0ZUCQkJNAorI2RlZmluZSBSVDU2NTlfUFdSX0NMSzI1TV9QRAkJCSgweDAgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X1BXUl9DTEsyNU1fUFUJCQkoMHgxIDw8IDQpCisKKy8qIFJFQyBNaXhlciAyIExlZnQgQ29udHJvbCAyICgweDAwOWMpICovCisjZGVmaW5lIFJUNTY1OV9NX0JTVDFfUk0yX0wJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDFfUk0yX0xfU0ZUCQkJNQorI2RlZmluZSBSVDU2NTlfTV9CU1QyX1JNMl9MCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfTV9CU1QyX1JNMl9MX1NGVAkJCTQKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19STTJfTAkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X01fQlNUM19STTJfTF9TRlQJCQkzCisjZGVmaW5lIFJUNTY1OV9NX0JTVDRfUk0yX0wJCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDRfUk0yX0xfU0ZUCQkJMgorI2RlZmluZSBSVDU2NTlfTV9PVVRWT0xMX1JNMl9MCQkJKDB4MSA8PCAxKQorI2RlZmluZSBSVDU2NTlfTV9PVVRWT0xMX1JNMl9MX1NGVAkJMQorI2RlZmluZSBSVDU2NTlfTV9TUEtWT0xfUk0yX0wJCQkoMHgxKQorI2RlZmluZSBSVDU2NTlfTV9TUEtWT0xfUk0yX0xfU0ZUCQkwCisKKy8qIFJFQyBNaXhlciAyIFJpZ2h0IENvbnRyb2wgMiAoMHgwMDllKSAqLworI2RlZmluZSBSVDU2NTlfTV9CU1QxX1JNMl9SCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfTV9CU1QxX1JNMl9SX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjU5X01fQlNUMl9STTJfUgkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X01fQlNUMl9STTJfUl9TRlQJCQk0CisjZGVmaW5lIFJUNTY1OV9NX0JTVDNfUk0yX1IJCQkoMHgxIDw8IDMpCisjZGVmaW5lIFJUNTY1OV9NX0JTVDNfUk0yX1JfU0ZUCQkJMworI2RlZmluZSBSVDU2NTlfTV9CU1Q0X1JNMl9SCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2NTlfTV9CU1Q0X1JNMl9SX1NGVAkJCTIKKyNkZWZpbmUgUlQ1NjU5X01fT1VUVk9MUl9STTJfUgkJCSgweDEgPDwgMSkKKyNkZWZpbmUgUlQ1NjU5X01fT1VUVk9MUl9STTJfUl9TRlQJCTEKKyNkZWZpbmUgUlQ1NjU5X01fTU9OT1ZPTF9STTJfUgkJCSgweDEpCisjZGVmaW5lIFJUNTY1OV9NX01PTk9WT0xfUk0yX1JfU0ZUCQkwCisKKy8qIENsYXNzIEQgT3V0cHV0IENvbnRyb2wgKDB4MDBhMCkgKi8KKyNkZWZpbmUgUlQ1NjU5X1BPV19DTFNEX0RCX01BU0sJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTY1OV9QT1dfQ0xTRF9EQl9FTgkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X1BPV19DTFNEX0RCX0RJUwkJCSgweDAgPDwgOSkKKworLyogRVEgQ29udHJvbCAxICgweDAwYjApICovCisjZGVmaW5lIFJUNTY1OV9FUV9TUkNfREFDCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X0VRX1NSQ19BREMJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfRVFfVVBECQkJCSgweDEgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9FUV9VUERfQklUCQkJMTQKKyNkZWZpbmUgUlQ1NjU5X0VRX0NEX01BU0sJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2NTlfRVFfQ0RfU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjU5X0VRX0NEX0RJUwkJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9FUV9DRF9FTgkJCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2NTlfRVFfRElUSF9NQVNLCQkJKDB4MyA8PCA4KQorI2RlZmluZSBSVDU2NTlfRVFfRElUSF9TRlQJCQk4CisjZGVmaW5lIFJUNTY1OV9FUV9ESVRIX05PUgkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0VRX0RJVEhfTFNCCQkJKDB4MSA8PCA4KQorI2RlZmluZSBSVDU2NTlfRVFfRElUSF9MU0JfMQkJCSgweDIgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0VRX0RJVEhfTFNCXzIJCQkoMHgzIDw8IDgpCisKKy8qIElSUSBDb250cm9sIDEgKDB4MDBiNykgKi8KKyNkZWZpbmUgUlQ1NjU5X0pEMV8xX0VOX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfSkQxXzFfRU5fU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X0pEMV8xX0RJUwkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9KRDFfMV9FTgkJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfSkQxXzJfRU5fTUFTSwkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9KRDFfMl9FTl9TRlQJCQkxMgorI2RlZmluZSBSVDU2NTlfSkQxXzJfRElTCQkJKDB4MCA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0pEMV8yX0VOCQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9JTF9JUlFfTUFTSwkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X0lMX0lSUV9ESVMJCQkoMHgwIDw8IDMpCisjZGVmaW5lIFJUNTY1OV9JTF9JUlFfRU4JCQkoMHgxIDw8IDMpCisKKy8qIElSUSBDb250cm9sIDUgKDB4MDBiYSkgKi8KKyNkZWZpbmUgUlQ1NjU5X0lSUV9KRF9FTgkJCSgweDEgPDwgMykKKyNkZWZpbmUgUlQ1NjU5X0lSUV9KRF9FTl9TRlQJCQkzCisKKy8qIEdQSU8gQ29udHJvbCAxICgweDAwYzApICovCisjZGVmaW5lIFJUNTY1OV9HUDFfUElOX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfR1AxX1BJTl9TRlQJCQkxNQorI2RlZmluZSBSVDU2NTlfR1AxX1BJTl9HUElPMQkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9HUDFfUElOX0lSUQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9HUDJfUElOX01BU0sJCQkoMHgxIDw8IDE0KQorI2RlZmluZSBSVDU2NTlfR1AyX1BJTl9TRlQJCQkxNAorI2RlZmluZSBSVDU2NTlfR1AyX1BJTl9HUElPMgkJCSgweDAgPDwgMTQpCisjZGVmaW5lIFJUNTY1OV9HUDJfUElOX0RNSUMxX1NDTAkJKDB4MSA8PCAxNCkKKyNkZWZpbmUgUlQ1NjU5X0dQM19QSU5fTUFTSwkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9HUDNfUElOX1NGVAkJCTEzCisjZGVmaW5lIFJUNTY1OV9HUDNfUElOX0dQSU8zCQkJKDB4MCA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X0dQM19QSU5fUERNX1NDTAkJCSgweDEgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9HUDRfUElOX01BU0sJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfR1A0X1BJTl9TRlQJCQkxMgorI2RlZmluZSBSVDU2NTlfR1A0X1BJTl9HUElPNAkJCSgweDAgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9HUDRfUElOX1BETV9TREEJCQkoMHgxIDw8IDEyKQorI2RlZmluZSBSVDU2NTlfR1A1X1BJTl9NQVNLCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjU5X0dQNV9QSU5fU0ZUCQkJMTEKKyNkZWZpbmUgUlQ1NjU5X0dQNV9QSU5fR1BJTzUJCQkoMHgwIDw8IDExKQorI2RlZmluZSBSVDU2NTlfR1A1X1BJTl9ETUlDMV9TREEJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9HUDZfUElOX01BU0sJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfR1A2X1BJTl9TRlQJCQkxMAorI2RlZmluZSBSVDU2NTlfR1A2X1BJTl9HUElPNgkJCSgweDAgPDwgMTApCisjZGVmaW5lIFJUNTY1OV9HUDZfUElOX0RNSUMyX1NEQQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X0dQN19QSU5fTUFTSwkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X0dQN19QSU5fU0ZUCQkJOQorI2RlZmluZSBSVDU2NTlfR1A3X1BJTl9HUElPNwkJCSgweDAgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X0dQN19QSU5fUERNX1NDTAkJCSgweDEgPDwgOSkKKyNkZWZpbmUgUlQ1NjU5X0dQOF9QSU5fTUFTSwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0dQOF9QSU5fU0ZUCQkJOAorI2RlZmluZSBSVDU2NTlfR1A4X1BJTl9HUElPOAkJCSgweDAgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0dQOF9QSU5fUERNX1NEQQkJCSgweDEgPDwgOCkKKyNkZWZpbmUgUlQ1NjU5X0dQOV9QSU5fTUFTSwkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X0dQOV9QSU5fU0ZUCQkJNworI2RlZmluZSBSVDU2NTlfR1A5X1BJTl9HUElPOQkJCSgweDAgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X0dQOV9QSU5fRE1JQzFfU0RBCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9HUDEwX1BJTl9NQVNLCQkJKDB4MSA8PCA2KQorI2RlZmluZSBSVDU2NTlfR1AxMF9QSU5fU0ZUCQkJNgorI2RlZmluZSBSVDU2NTlfR1AxMF9QSU5fR1BJTzEwCQkJKDB4MCA8PCA2KQorI2RlZmluZSBSVDU2NTlfR1AxMF9QSU5fRE1JQzJfU0RBCQkoMHgxIDw8IDYpCisjZGVmaW5lIFJUNTY1OV9HUDExX1BJTl9NQVNLCQkJKDB4MSA8PCA1KQorI2RlZmluZSBSVDU2NTlfR1AxMV9QSU5fU0ZUCQkJNQorI2RlZmluZSBSVDU2NTlfR1AxMV9QSU5fR1BJTzExCQkJKDB4MCA8PCA1KQorI2RlZmluZSBSVDU2NTlfR1AxMV9QSU5fRE1JQzFfU0RBCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTY1OV9HUDEyX1BJTl9NQVNLCQkJKDB4MSA8PCA0KQorI2RlZmluZSBSVDU2NTlfR1AxMl9QSU5fU0ZUCQkJNAorI2RlZmluZSBSVDU2NTlfR1AxMl9QSU5fR1BJTzEyCQkJKDB4MCA8PCA0KQorI2RlZmluZSBSVDU2NTlfR1AxMl9QSU5fRE1JQzJfU0RBCQkoMHgxIDw8IDQpCisjZGVmaW5lIFJUNTY1OV9HUDEzX1BJTl9NQVNLCQkJKDB4MyA8PCAyKQorI2RlZmluZSBSVDU2NTlfR1AxM19QSU5fU0ZUCQkJMgorI2RlZmluZSBSVDU2NTlfR1AxM19QSU5fR1BJTzEzCQkJKDB4MCA8PCAyKQorI2RlZmluZSBSVDU2NTlfR1AxM19QSU5fU1BESUZfU0RBCQkoMHgxIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9HUDEzX1BJTl9ETUlDMl9TQ0wJCSgweDIgPDwgMikKKyNkZWZpbmUgUlQ1NjU5X0dQMTNfUElOX1BETV9TQ0wJCQkoMHgzIDw8IDIpCisjZGVmaW5lIFJUNTY1OV9HUDE1X1BJTl9NQVNLCQkJKDB4MykKKyNkZWZpbmUgUlQ1NjU5X0dQMTVfUElOX1NGVAkJCTAKKyNkZWZpbmUgUlQ1NjU5X0dQMTVfUElOX0dQSU8xNQkJCSgweDApCisjZGVmaW5lIFJUNTY1OV9HUDE1X1BJTl9ETUlDM19TQ0wJCSgweDEpCisjZGVmaW5lIFJUNTY1OV9HUDE1X1BJTl9QRE1fU0RBCQkJKDB4MikKKworLyogR1BJTyBDb250cm9sIDIgKDB4MDBjMSkqLworI2RlZmluZSBSVDU2NTlfR1AxX1BGX0lOCQkJKDB4MCA8PCAyKQorI2RlZmluZSBSVDU2NTlfR1AxX1BGX09VVAkJCSgweDEgPDwgMikKKyNkZWZpbmUgUlQ1NjU5X0dQMV9QRl9NQVNLCQkJKDB4MSA8PCAyKQorI2RlZmluZSBSVDU2NTlfR1AxX1BGX1NGVAkJCTIKKworLyogR1BJTyBDb250cm9sIDMgKDB4MDBjMikgKi8KKyNkZWZpbmUgUlQ1NjU5X0kyUzJfUElOX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfSTJTMl9QSU5fU0ZUCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X0kyUzJfUElOX0kyUwkJCSgweDAgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9JMlMyX1BJTl9HUElPCQkJKDB4MSA8PCAxNSkKKworLyogU29mdCB2b2x1bWUgYW5kIHplcm8gY3Jvc3MgY29udHJvbCAxICgweDAwZDkpICovCisjZGVmaW5lIFJUNTY1OV9TVl9NQVNLCQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9TVl9TRlQJCQkJMTUKKyNkZWZpbmUgUlQ1NjU5X1NWX0RJUwkJCQkoMHgwIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfU1ZfRU4JCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X09VVF9TVl9NQVNLCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X09VVF9TVl9TRlQJCQkxMworI2RlZmluZSBSVDU2NTlfT1VUX1NWX0RJUwkJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJUNTY1OV9PVVRfU1ZfRU4JCQkoMHgxIDw8IDEzKQorI2RlZmluZSBSVDU2NTlfSFBfU1ZfTUFTSwkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9IUF9TVl9TRlQJCQkxMgorI2RlZmluZSBSVDU2NTlfSFBfU1ZfRElTCQkJKDB4MCA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X0hQX1NWX0VOCQkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9aQ0RfRElHX01BU0sJCQkoMHgxIDw8IDExKQorI2RlZmluZSBSVDU2NTlfWkNEX0RJR19TRlQJCQkxMQorI2RlZmluZSBSVDU2NTlfWkNEX0RJR19ESVMJCQkoMHgwIDw8IDExKQorI2RlZmluZSBSVDU2NTlfWkNEX0RJR19FTgkJCSgweDEgPDwgMTEpCisjZGVmaW5lIFJUNTY1OV9aQ0RfTUFTSwkJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBSVDU2NTlfWkNEX1NGVAkJCQkxMAorI2RlZmluZSBSVDU2NTlfWkNEX1BECQkJCSgweDAgPDwgMTApCisjZGVmaW5lIFJUNTY1OV9aQ0RfUFUJCQkJKDB4MSA8PCAxMCkKKyNkZWZpbmUgUlQ1NjU5X1NWX0RMWV9NQVNLCQkJKDB4ZikKKyNkZWZpbmUgUlQ1NjU5X1NWX0RMWV9TRlQJCQkwCisKKy8qIFNvZnQgdm9sdW1lIGFuZCB6ZXJvIGNyb3NzIGNvbnRyb2wgMiAoMHgwMGRhKSAqLworI2RlZmluZSBSVDU2NTlfWkNEX0hQX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfWkNEX0hQX1NGVAkJCTE1CisjZGVmaW5lIFJUNTY1OV9aQ0RfSFBfRElTCQkJKDB4MCA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5X1pDRF9IUF9FTgkJCSgweDEgPDwgMTUpCisKKy8qIDQgQnV0dG9uIElubGluZSBDb21tYW5kIENvbnRyb2wgMiAoMHgwMGUwKSAqLworI2RlZmluZSBSVDU2NTlfNEJUTl9JTF9NQVNLCQkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgUlQ1NjU5XzRCVE5fSUxfRU4JCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfNEJUTl9JTF9ESVMJCQkoMHgwIDw8IDE1KQorCisvKiBBbmFsb2cgSkQgQ29udHJvbCAxICgweDAwZjApICovCisjZGVmaW5lIFJUNTY1OV9KRDFfTU9ERV9NQVNLCQkJKDB4MyA8PCAwKQorI2RlZmluZSBSVDU2NTlfSkQxX01PREVfMAkJCSgweDAgPDwgMCkKKyNkZWZpbmUgUlQ1NjU5X0pEMV9NT0RFXzEJCQkoMHgxIDw8IDApCisjZGVmaW5lIFJUNTY1OV9KRDFfTU9ERV8yCQkJKDB4MiA8PCAwKQorCisvKiBKYWNrIERldGVjdCBDb250cm9sIDMgKDB4MDBmOCkgKi8KKyNkZWZpbmUgUlQ1NjU5X0pEX1RSSV9IUE9fU0VMX01BU0sJCSgweDcpCisjZGVmaW5lIFJUNTY1OV9KRF9UUklfSFBPX1NFTF9TRlQJCSgwKQorI2RlZmluZSBSVDU2NTlfSkRfSFBPX0dQSU9fSkQxCQkJKDB4MCkKKyNkZWZpbmUgUlQ1NjU5X0pEX0hQT19KRDFfMQkJCSgweDEpCisjZGVmaW5lIFJUNTY1OV9KRF9IUE9fSkQxXzIJCQkoMHgyKQorI2RlZmluZSBSVDU2NTlfSkRfSFBPX0pEMgkJCSgweDMpCisjZGVmaW5lIFJUNTY1OV9KRF9IUE9fR1BJT19KRDIJCQkoMHg0KQorI2RlZmluZSBSVDU2NTlfSkRfSFBPX0pEMwkJCSgweDUpCisjZGVmaW5lIFJUNTY1OV9KRF9IUE9fSkRfRAkJCSgweDYpCisKKy8qIERpZ2l0YWwgTWlzYyBDb250cm9sICgweDAwZmEpICovCisjZGVmaW5lIFJUNTY1OV9BTV9NQVNLCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X0FNX0VOCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgUlQ1NjU5X0FNX0RJUwkJCQkoMHgxIDw8IDcpCisjZGVmaW5lIFJUNTY1OV9ESUdfR0FURV9DVFJMCQkJMHgxCisjZGVmaW5lIFJUNTY1OV9ESUdfR0FURV9DVFJMX1NGVAkJKDApCisKKy8qIENob3BwZXIgYW5kIENsb2NrIGNvbnRyb2wgZm9yIEFEQyAoMHgwMTFjKSovCisjZGVmaW5lIFJUNTY1OV9NX1JGX0RJR19NQVNLCQkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUlQ1NjU5X01fUkZfRElHX1NGVAkJCTEyCisjZGVmaW5lIFJUNTY1OV9NX1JJX0RJRwkJCQkoMHgxIDw8IDExKQorCisvKiBDaG9wcGVyIGFuZCBDbG9jayBjb250cm9sIGZvciBEQUMgKDB4MDEzYSkqLworI2RlZmluZSBSVDU2NTlfQ0tYRU5fREFDMV9NQVNLCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X0NLWEVOX0RBQzFfU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjU5X0NLR0VOX0RBQzFfTUFTSwkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9DS0dFTl9EQUMxX1NGVAkJCTEyCisjZGVmaW5lIFJUNTY1OV9DS1hFTl9EQUMyX01BU0sJCQkoMHgxIDw8IDUpCisjZGVmaW5lIFJUNTY1OV9DS1hFTl9EQUMyX1NGVAkJCTUKKyNkZWZpbmUgUlQ1NjU5X0NLR0VOX0RBQzJfTUFTSwkJCSgweDEgPDwgNCkKKyNkZWZpbmUgUlQ1NjU5X0NLR0VOX0RBQzJfU0ZUCQkJNAorCisvKiBDaG9wcGVyIGFuZCBDbG9jayBjb250cm9sIGZvciBBREMgKDB4MDEzYikqLworI2RlZmluZSBSVDU2NTlfQ0tYRU5fQURDQ19NQVNLCQkJKDB4MSA8PCAxMykKKyNkZWZpbmUgUlQ1NjU5X0NLWEVOX0FEQ0NfU0ZUCQkJMTMKKyNkZWZpbmUgUlQ1NjU5X0NLR0VOX0FEQ0NfTUFTSwkJCSgweDEgPDwgMTIpCisjZGVmaW5lIFJUNTY1OV9DS0dFTl9BRENDX1NGVAkJCTEyCisKKy8qIFRlc3QgTW9kZSBDb250cm9sIDEgKDB4MDE0NSkgKi8KKyNkZWZpbmUgUlQ1NjU5X0FEMkRBX0xCX01BU0sJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFJUNTY1OV9BRDJEQV9MQl9TRlQJCQk5CisKKy8qIFN0ZXJlbyBOb2lzZSBHYXRlIENvbnRyb2wgMSAoMHgwMTYwKSAqLworI2RlZmluZSBSVDU2NTlfTkcyX0VOX01BU0sJCQkoMHgxIDw8IDE1KQorI2RlZmluZSBSVDU2NTlfTkcyX0VOCQkJCSgweDEgPDwgMTUpCisjZGVmaW5lIFJUNTY1OV9ORzJfRElTCQkJCSgweDAgPDwgMTUpCisKKy8qIFN5c3RlbSBDbG9jayBTb3VyY2UgKi8KK2VudW0geworCVJUNTY1OV9TQ0xLX1NfTUNMSywKKwlSVDU2NTlfU0NMS19TX1BMTDEsCisJUlQ1NjU5X1NDTEtfU19SQ0NMSywKK307CisKKy8qIFBMTDEgU291cmNlICovCitlbnVtIHsKKwlSVDU2NTlfUExMMV9TX01DTEssCisJUlQ1NjU5X1BMTDFfU19CQ0xLMSwKKwlSVDU2NTlfUExMMV9TX0JDTEsyLAorCVJUNTY1OV9QTEwxX1NfQkNMSzMsCisJUlQ1NjU5X1BMTDFfU19CQ0xLNCwKK307CisKK2VudW0geworCVJUNTY1OV9BSUYxLAorCVJUNTY1OV9BSUYyLAorCVJUNTY1OV9BSUYzLAorCVJUNTY1OV9BSUY0LAorCVJUNTY1OV9BSUZTLAorfTsKKworc3RydWN0IHJ0NTY1OV9wbGxfY29kZSB7CisJYm9vbCBtX2JwOworCWludCBtX2NvZGU7CisJaW50IG5fY29kZTsKKwlpbnQga19jb2RlOworfTsKKworc3RydWN0IHJ0NTY1OV9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHJ0NTY1OV9wbGF0Zm9ybV9kYXRhIHBkYXRhOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kX2xkbzFfZW47CisJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2RfcmVzZXQ7CisJc3RydWN0IHNuZF9zb2NfamFjayAqaHNfamFjazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGphY2tfZGV0ZWN0X3dvcms7CisKKwlpbnQgc3lzY2xrOworCWludCBzeXNjbGtfc3JjOworCWludCBscmNrW1JUNTY1OV9BSUZTXTsKKwlpbnQgYmNsa1tSVDU2NTlfQUlGU107CisJaW50IG1hc3RlcltSVDU2NTlfQUlGU107CisJaW50IHZfaWQ7CisKKwlpbnQgcGxsX3NyYzsKKwlpbnQgcGxsX2luOworCWludCBwbGxfb3V0OworCisJaW50IGphY2tfdHlwZTsKKworfTsKKworaW50IHJ0NTY1OV9zZXRfamFja19kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCXN0cnVjdCBzbmRfc29jX2phY2sgKmhzX2phY2spOworCisjZW5kaWYgLyogX19SVDU2NTlfSF9fICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY3MC5oIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NzAuaAppbmRleCBkYzJiNDYyLi4zZjFiMGYxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY3MC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjcwLmgKQEAgLTk3MywxMiArOTczLDEyIEBACiAjZGVmaW5lIFJUNTY3MF9TQ0xLX1NSQ19NQ0xLCQkJKDB4MCA8PCAxNCkKICNkZWZpbmUgUlQ1NjcwX1NDTEtfU1JDX1BMTDEJCQkoMHgxIDw8IDE0KQogI2RlZmluZSBSVDU2NzBfU0NMS19TUkNfUkNDTEsJCQkoMHgyIDw8IDE0KSAvKiAxNU1IeiAqLwotI2RlZmluZSBSVDU2NzBfUExMMV9TUkNfTUFTSwkJCSgweDMgPDwgMTIpCi0jZGVmaW5lIFJUNTY3MF9QTEwxX1NSQ19TRlQJCQkxMgotI2RlZmluZSBSVDU2NzBfUExMMV9TUkNfTUNMSwkJCSgweDAgPDwgMTIpCi0jZGVmaW5lIFJUNTY3MF9QTEwxX1NSQ19CQ0xLMQkJCSgweDEgPDwgMTIpCi0jZGVmaW5lIFJUNTY3MF9QTEwxX1NSQ19CQ0xLMgkJCSgweDIgPDwgMTIpCi0jZGVmaW5lIFJUNTY3MF9QTEwxX1NSQ19CQ0xLMwkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFJUNTY3MF9QTEwxX1NSQ19NQVNLCQkJKDB4NyA8PCAxMSkKKyNkZWZpbmUgUlQ1NjcwX1BMTDFfU1JDX1NGVAkJCTExCisjZGVmaW5lIFJUNTY3MF9QTEwxX1NSQ19NQ0xLCQkJKDB4MCA8PCAxMSkKKyNkZWZpbmUgUlQ1NjcwX1BMTDFfU1JDX0JDTEsxCQkJKDB4MSA8PCAxMSkKKyNkZWZpbmUgUlQ1NjcwX1BMTDFfU1JDX0JDTEsyCQkJKDB4MiA8PCAxMSkKKyNkZWZpbmUgUlQ1NjcwX1BMTDFfU1JDX0JDTEszCQkJKDB4MyA8PCAxMSkKICNkZWZpbmUgUlQ1NjcwX1BMTDFfUERfTUFTSwkJCSgweDEgPDwgMykKICNkZWZpbmUgUlQ1NjcwX1BMTDFfUERfU0ZUCQkJMwogI2RlZmluZSBSVDU2NzBfUExMMV9QRF8xCQkJKDB4MCA8PCAzKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDU2NzcuYyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1Njc3LmMKaW5kZXggYjRjZDdlMy4uOTY3Njc4ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9ydDU2NzcuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY3Ny5jCkBAIC0yOTcsOCArMjk3LDYgQEAKIAljYXNlIFJUNTY3N19IQVBfR0VORV9DVFJMMjoKIAljYXNlIFJUNTY3N19QV1JfRFNQX1NUOgogCWNhc2UgUlQ1Njc3X1BSSVZfREFUQToKLQljYXNlIFJUNTY3N19QTEwxX0NUUkwyOgotCWNhc2UgUlQ1Njc3X1BMTDJfQ1RSTDI6CiAJY2FzZSBSVDU2NzdfQVNSQ18yMjoKIAljYXNlIFJUNTY3N19BU1JDXzIzOgogCWNhc2UgUlQ1Njc3X1ZBRF9DVFJMNToKQEAgLTEzODYsOTAgKzEzODQsOTAgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2Nzdfc3RvMV9kYWNfbF9taXhbXSA9IHsKLQlTT0NfREFQTV9TSU5HTEUoIlNUIEwgU3dpdGNoIiwgUlQ1Njc3X1NUTzFfREFDX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiU1QgTCBTd2l0Y2giLCBSVDU2NzdfU1RPMV9EQUNfTUlYRVIsCiAJCQlSVDU2NzdfTV9TVF9EQUMxX0xfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzEgTCBTd2l0Y2giLCBSVDU2NzdfU1RPMV9EQUNfTUlYRVIsCisJU09DX0RBUE1fU0lOR0xFX0FVVE9ESVNBQkxFKCJEQUMxIEwgU3dpdGNoIiwgUlQ1Njc3X1NUTzFfREFDX01JWEVSLAogCQkJUlQ1Njc3X01fREFDMV9MX1NUT19MX1NGVCwgMSwgMSksCi0JU09DX0RBUE1fU0lOR0xFKCJEQUMyIEwgU3dpdGNoIiwgUlQ1Njc3X1NUTzFfREFDX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDMiBMIFN3aXRjaCIsIFJUNTY3N19TVE8xX0RBQ19NSVhFUiwKIAkJCVJUNTY3N19NX0RBQzJfTF9TVE9fTF9TRlQsIDEsIDEpLAotCVNPQ19EQVBNX1NJTkdMRSgiREFDMSBSIFN3aXRjaCIsIFJUNTY3N19TVE8xX0RBQ19NSVhFUiwKKwlTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIkRBQzEgUiBTd2l0Y2giLCBSVDU2NzdfU1RPMV9EQUNfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUMxX1JfU1RPX0xfU0ZULCAxLCAxKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2Nzdfc3RvMV9kYWNfcl9taXhbXSA9IHsKLQlTT0NfREFQTV9TSU5HTEUoIlNUIFIgU3dpdGNoIiwgUlQ1Njc3X1NUTzFfREFDX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiU1QgUiBTd2l0Y2giLCBSVDU2NzdfU1RPMV9EQUNfTUlYRVIsCiAJCQlSVDU2NzdfTV9TVF9EQUMxX1JfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzEgUiBTd2l0Y2giLCBSVDU2NzdfU1RPMV9EQUNfTUlYRVIsCisJU09DX0RBUE1fU0lOR0xFX0FVVE9ESVNBQkxFKCJEQUMxIFIgU3dpdGNoIiwgUlQ1Njc3X1NUTzFfREFDX01JWEVSLAogCQkJUlQ1Njc3X01fREFDMV9SX1NUT19SX1NGVCwgMSwgMSksCi0JU09DX0RBUE1fU0lOR0xFKCJEQUMyIFIgU3dpdGNoIiwgUlQ1Njc3X1NUTzFfREFDX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDMiBSIFN3aXRjaCIsIFJUNTY3N19TVE8xX0RBQ19NSVhFUiwKIAkJCVJUNTY3N19NX0RBQzJfUl9TVE9fUl9TRlQsIDEsIDEpLAotCVNPQ19EQVBNX1NJTkdMRSgiREFDMSBMIFN3aXRjaCIsIFJUNTY3N19TVE8xX0RBQ19NSVhFUiwKKwlTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIkRBQzEgTCBTd2l0Y2giLCBSVDU2NzdfU1RPMV9EQUNfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUMxX0xfU1RPX1JfU0ZULCAxLCAxKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NzdfbW9ub19kYWNfbF9taXhbXSA9IHsKLQlTT0NfREFQTV9TSU5HTEUoIlNUIEwgU3dpdGNoIiwgUlQ1Njc3X01PTk9fREFDX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiU1QgTCBTd2l0Y2giLCBSVDU2NzdfTU9OT19EQUNfTUlYRVIsCiAJCQlSVDU2NzdfTV9TVF9EQUMyX0xfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzEgTCBTd2l0Y2giLCBSVDU2NzdfTU9OT19EQUNfTUlYRVIsCisJU09DX0RBUE1fU0lOR0xFX0FVVE9ESVNBQkxFKCJEQUMxIEwgU3dpdGNoIiwgUlQ1Njc3X01PTk9fREFDX01JWEVSLAogCQkJUlQ1Njc3X01fREFDMV9MX01PTk9fTF9TRlQsIDEsIDEpLAotCVNPQ19EQVBNX1NJTkdMRSgiREFDMiBMIFN3aXRjaCIsIFJUNTY3N19NT05PX0RBQ19NSVhFUiwKKwlTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIkRBQzIgTCBTd2l0Y2giLCBSVDU2NzdfTU9OT19EQUNfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUMyX0xfTU9OT19MX1NGVCwgMSwgMSksCi0JU09DX0RBUE1fU0lOR0xFKCJEQUMyIFIgU3dpdGNoIiwgUlQ1Njc3X01PTk9fREFDX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDMiBSIFN3aXRjaCIsIFJUNTY3N19NT05PX0RBQ19NSVhFUiwKIAkJCVJUNTY3N19NX0RBQzJfUl9NT05PX0xfU0ZULCAxLCAxKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NzdfbW9ub19kYWNfcl9taXhbXSA9IHsKLQlTT0NfREFQTV9TSU5HTEUoIlNUIFIgU3dpdGNoIiwgUlQ1Njc3X01PTk9fREFDX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiU1QgUiBTd2l0Y2giLCBSVDU2NzdfTU9OT19EQUNfTUlYRVIsCiAJCQlSVDU2NzdfTV9TVF9EQUMyX1JfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzEgUiBTd2l0Y2giLCBSVDU2NzdfTU9OT19EQUNfTUlYRVIsCisJU09DX0RBUE1fU0lOR0xFX0FVVE9ESVNBQkxFKCJEQUMxIFIgU3dpdGNoIiwgUlQ1Njc3X01PTk9fREFDX01JWEVSLAogCQkJUlQ1Njc3X01fREFDMV9SX01PTk9fUl9TRlQsIDEsIDEpLAotCVNPQ19EQVBNX1NJTkdMRSgiREFDMiBSIFN3aXRjaCIsIFJUNTY3N19NT05PX0RBQ19NSVhFUiwKKwlTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIkRBQzIgUiBTd2l0Y2giLCBSVDU2NzdfTU9OT19EQUNfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUMyX1JfTU9OT19SX1NGVCwgMSwgMSksCi0JU09DX0RBUE1fU0lOR0xFKCJEQUMyIEwgU3dpdGNoIiwgUlQ1Njc3X01PTk9fREFDX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDMiBMIFN3aXRjaCIsIFJUNTY3N19NT05PX0RBQ19NSVhFUiwKIAkJCVJUNTY3N19NX0RBQzJfTF9NT05PX1JfU0ZULCAxLCAxKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NzdfZGQxX2xfbWl4W10gPSB7Ci0JU09DX0RBUE1fU0lOR0xFKCJTdG8gREFDIE1peCBMIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCisJU09DX0RBUE1fU0lOR0xFX0FVVE9ESVNBQkxFKCJTdG8gREFDIE1peCBMIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCiAJCQlSVDU2NzdfTV9TVE9fTF9ERDFfTF9TRlQsIDEsIDEpLAotCVNPQ19EQVBNX1NJTkdMRSgiTW9ubyBEQUMgTWl4IEwgU3dpdGNoIiwgUlQ1Njc3X0REMV9NSVhFUiwKKwlTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIk1vbm8gREFDIE1peCBMIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCiAJCQlSVDU2NzdfTV9NT05PX0xfREQxX0xfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzMgTCBTd2l0Y2giLCBSVDU2NzdfREQxX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDMyBMIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUMzX0xfREQxX0xfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzMgUiBTd2l0Y2giLCBSVDU2NzdfREQxX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDMyBSIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUMzX1JfREQxX0xfU0ZULCAxLCAxKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NzdfZGQxX3JfbWl4W10gPSB7Ci0JU09DX0RBUE1fU0lOR0xFKCJTdG8gREFDIE1peCBSIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCisJU09DX0RBUE1fU0lOR0xFX0FVVE9ESVNBQkxFKCJTdG8gREFDIE1peCBSIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCiAJCQlSVDU2NzdfTV9TVE9fUl9ERDFfUl9TRlQsIDEsIDEpLAotCVNPQ19EQVBNX1NJTkdMRSgiTW9ubyBEQUMgTWl4IFIgU3dpdGNoIiwgUlQ1Njc3X0REMV9NSVhFUiwKKwlTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIk1vbm8gREFDIE1peCBSIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCiAJCQlSVDU2NzdfTV9NT05PX1JfREQxX1JfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzMgUiBTd2l0Y2giLCBSVDU2NzdfREQxX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDMyBSIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUMzX1JfREQxX1JfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzMgTCBTd2l0Y2giLCBSVDU2NzdfREQxX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDMyBMIFN3aXRjaCIsIFJUNTY3N19ERDFfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUMzX0xfREQxX1JfU0ZULCAxLCAxKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NzdfZGQyX2xfbWl4W10gPSB7Ci0JU09DX0RBUE1fU0lOR0xFKCJTdG8gREFDIE1peCBMIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCisJU09DX0RBUE1fU0lOR0xFX0FVVE9ESVNBQkxFKCJTdG8gREFDIE1peCBMIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCiAJCQlSVDU2NzdfTV9TVE9fTF9ERDJfTF9TRlQsIDEsIDEpLAotCVNPQ19EQVBNX1NJTkdMRSgiTW9ubyBEQUMgTWl4IEwgU3dpdGNoIiwgUlQ1Njc3X0REMl9NSVhFUiwKKwlTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIk1vbm8gREFDIE1peCBMIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCiAJCQlSVDU2NzdfTV9NT05PX0xfREQyX0xfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzQgTCBTd2l0Y2giLCBSVDU2NzdfREQyX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDNCBMIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUM0X0xfREQyX0xfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzQgUiBTd2l0Y2giLCBSVDU2NzdfREQyX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDNCBSIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUM0X1JfREQyX0xfU0ZULCAxLCAxKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NzdfZGQyX3JfbWl4W10gPSB7Ci0JU09DX0RBUE1fU0lOR0xFKCJTdG8gREFDIE1peCBSIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCisJU09DX0RBUE1fU0lOR0xFX0FVVE9ESVNBQkxFKCJTdG8gREFDIE1peCBSIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCiAJCQlSVDU2NzdfTV9TVE9fUl9ERDJfUl9TRlQsIDEsIDEpLAotCVNPQ19EQVBNX1NJTkdMRSgiTW9ubyBEQUMgTWl4IFIgU3dpdGNoIiwgUlQ1Njc3X0REMl9NSVhFUiwKKwlTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIk1vbm8gREFDIE1peCBSIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCiAJCQlSVDU2NzdfTV9NT05PX1JfREQyX1JfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzQgUiBTd2l0Y2giLCBSVDU2NzdfREQyX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDNCBSIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUM0X1JfREQyX1JfU0ZULCAxLCAxKSwKLQlTT0NfREFQTV9TSU5HTEUoIkRBQzQgTCBTd2l0Y2giLCBSVDU2NzdfREQyX01JWEVSLAorCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiREFDNCBMIFN3aXRjaCIsIFJUNTY3N19ERDJfTUlYRVIsCiAJCQlSVDU2NzdfTV9EQUM0X0xfREQyX1JfU0ZULCAxLCAxKSwKIH07CiAKQEAgLTI1OTYsNiArMjU5NCwyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJ0NTY3N19maWx0ZXJfcG93ZXJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCW1zbGVlcCg1MCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBydDU2NzdfZGFwbV93aWRnZXRzW10gPSB7CiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiUExMMSIsIFJUNTY3N19QV1JfQU5MRzIsIFJUNTY3N19QV1JfUExMMV9CSVQsCiAJCTAsIHJ0NTY3N19zZXRfcGxsMV9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfApAQCAtMzA3MiwxOSArMzA4NSwyNiBAQAogCiAJLyogREFDIE1peGVyICovCiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiZGFjIHN0ZXJlbzEgZmlsdGVyIiwgUlQ1Njc3X1BXUl9ESUcyLAotCQlSVDU2NzdfUFdSX0RBQ19TMUZfQklULCAwLCBOVUxMLCAwKSwKKwkJUlQ1Njc3X1BXUl9EQUNfUzFGX0JJVCwgMCwgcnQ1Njc3X2ZpbHRlcl9wb3dlcl9ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIAlTTkRfU09DX0RBUE1fU1VQUExZKCJkYWMgbW9ubzIgbGVmdCBmaWx0ZXIiLCBSVDU2NzdfUFdSX0RJRzIsCi0JCVJUNTY3N19QV1JfREFDX00yRl9MX0JJVCwgMCwgTlVMTCwgMCksCisJCVJUNTY3N19QV1JfREFDX00yRl9MX0JJVCwgMCwgcnQ1Njc3X2ZpbHRlcl9wb3dlcl9ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIAlTTkRfU09DX0RBUE1fU1VQUExZKCJkYWMgbW9ubzIgcmlnaHQgZmlsdGVyIiwgUlQ1Njc3X1BXUl9ESUcyLAotCQlSVDU2NzdfUFdSX0RBQ19NMkZfUl9CSVQsIDAsIE5VTEwsIDApLAorCQlSVDU2NzdfUFdSX0RBQ19NMkZfUl9CSVQsIDAsIHJ0NTY3N19maWx0ZXJfcG93ZXJfZXZlbnQsCisJCVNORF9TT0NfREFQTV9QT1NUX1BNVSksCiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiZGFjIG1vbm8zIGxlZnQgZmlsdGVyIiwgUlQ1Njc3X1BXUl9ESUcyLAotCQlSVDU2NzdfUFdSX0RBQ19NM0ZfTF9CSVQsIDAsIE5VTEwsIDApLAorCQlSVDU2NzdfUFdSX0RBQ19NM0ZfTF9CSVQsIDAsIHJ0NTY3N19maWx0ZXJfcG93ZXJfZXZlbnQsCisJCVNORF9TT0NfREFQTV9QT1NUX1BNVSksCiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiZGFjIG1vbm8zIHJpZ2h0IGZpbHRlciIsIFJUNTY3N19QV1JfRElHMiwKLQkJUlQ1Njc3X1BXUl9EQUNfTTNGX1JfQklULCAwLCBOVUxMLCAwKSwKKwkJUlQ1Njc3X1BXUl9EQUNfTTNGX1JfQklULCAwLCBydDU2NzdfZmlsdGVyX3Bvd2VyX2V2ZW50LAorCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogCVNORF9TT0NfREFQTV9TVVBQTFkoImRhYyBtb25vNCBsZWZ0IGZpbHRlciIsIFJUNTY3N19QV1JfRElHMiwKLQkJUlQ1Njc3X1BXUl9EQUNfTTRGX0xfQklULCAwLCBOVUxMLCAwKSwKKwkJUlQ1Njc3X1BXUl9EQUNfTTRGX0xfQklULCAwLCBydDU2NzdfZmlsdGVyX3Bvd2VyX2V2ZW50LAorCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogCVNORF9TT0NfREFQTV9TVVBQTFkoImRhYyBtb25vNCByaWdodCBmaWx0ZXIiLCBSVDU2NzdfUFdSX0RJRzIsCi0JCVJUNTY3N19QV1JfREFDX000Rl9SX0JJVCwgMCwgTlVMTCwgMCksCisJCVJUNTY3N19QV1JfREFDX000Rl9SX0JJVCwgMCwgcnQ1Njc3X2ZpbHRlcl9wb3dlcl9ldmVudCwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIAogCVNORF9TT0NfREFQTV9NSVhFUigiU3RlcmVvIERBQyBNSVhMIiwgU05EX1NPQ19OT1BNLCAwLCAwLAogCQlydDU2Nzdfc3RvMV9kYWNfbF9taXgsIEFSUkFZX1NJWkUocnQ1Njc3X3N0bzFfZGFjX2xfbWl4KSksCkBAIC00NzY2LDcgKzQ3ODYsNyBAQAogCiAJcmVnbWFwX3dyaXRlKHJ0NTY3Ny0+cmVnbWFwLCBSVDU2NzdfUkVTRVQsIDB4MTBlYyk7CiAJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHJ0NTY3Ny0+cG93X2xkbzIsIDApOwotCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChydDU2NzctPnJlc2V0X3BpbiwgMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHJ0NTY3Ny0+cmVzZXRfcGluLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDc4MSw3ICs0ODAxLDcgQEAKIAkJcmVnY2FjaGVfbWFya19kaXJ0eShydDU2NzctPnJlZ21hcCk7CiAKIAkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHJ0NTY3Ny0+cG93X2xkbzIsIDApOwotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocnQ1Njc3LT5yZXNldF9waW4sIDApOworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocnQ1Njc3LT5yZXNldF9waW4sIDEpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDc5Miw4ICs0ODEyLDExIEBACiAJc3RydWN0IHJ0NTY3N19wcml2ICpydDU2NzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCWlmICghcnQ1Njc3LT5kc3BfdmFkX2VuKSB7CisJCXJ0NTY3Ny0+cGxsX3NyYyA9IDA7CisJCXJ0NTY3Ny0+cGxsX2luID0gMDsKKwkJcnQ1Njc3LT5wbGxfb3V0ID0gMDsKIAkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHJ0NTY3Ny0+cG93X2xkbzIsIDEpOwotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocnQ1Njc3LT5yZXNldF9waW4sIDEpOworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocnQ1Njc3LT5yZXNldF9waW4sIDApOwogCQlpZiAocnQ1Njc3LT5wb3dfbGRvMiB8fCBydDU2NzctPnJlc2V0X3BpbikKIAkJCW1zbGVlcCgxMCk7CiAKQEAgLTUxMzgsNyArNTE2MSw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCXJ0NTY3Ny0+cmVzZXRfcGluID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoJmkyYy0+ZGV2LAotCQkJInJlYWx0ZWsscmVzZXQiLCBHUElPRF9PVVRfSElHSCk7CisJCQkicmVhbHRlayxyZXNldCIsIEdQSU9EX09VVF9MT1cpOwogCWlmIChJU19FUlIocnQ1Njc3LT5yZXNldF9waW4pKSB7CiAJCXJldCA9IFBUUl9FUlIocnQ1Njc3LT5yZXNldF9waW4pOwogCQlkZXZfZXJyKCZpMmMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IFJFU0VUOiAlZFxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuYwppbmRleCBmNTQwZjgyLi4wOGI0MDQ2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zZ3RsNTAwMC5jCkBAIC0xODksNiArMTg5LDcgQEAKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIsCiAJCQlTR1RMNTAwMF9WQUdfUE9XRVJVUCwgU0dUTDUwMDBfVkFHX1BPV0VSVVApOworCQltc2xlZXAoNDAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zc20yNTE4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI1MTguYwppbmRleCA4NmI4MWE2Li5lMmUwYmZhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI1MTguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI1MTguYwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJLmNvdW50ID0gQVJSQVlfU0laRShzc20yNTE4X3JhdGVzXzEyMjg4MDAwKSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3NtMjUxOF9sb29rdXBfbWNzKHN0cnVjdCBzc20yNTE4ICpzc20yNTE4LAorc3RhdGljIGludCBzc20yNTE4X2xvb2t1cF9tY3Moc3RydWN0IHNzbTI1MTggKnNzbTI1MTgsCiAJdW5zaWduZWQgaW50IHJhdGUpCiB7CiAJY29uc3QgdW5zaWduZWQgaW50ICpzeXNjbGtzID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jIGIvc291bmQvc29jL2NvZGVjcy90d2w2MDQwLmMKaW5kZXggNGNhZDg5Mi4uYmMzZGUyZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w2MDQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w2MDQwLmMKQEAgLTEwOTcsOCArMTA5Nyw3IEBACiB7CiAJc3RydWN0IHR3bDYwNDBfZGF0YSAqcHJpdjsKIAlzdHJ1Y3QgdHdsNjA0MCAqdHdsNjA0MCA9IGRldl9nZXRfZHJ2ZGF0YShjb2RlYy0+ZGV2LT5wYXJlbnQpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBjb250YWluZXJfb2YoY29kZWMtPmRldiwKLQkJCQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShjb2RlYy0+ZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCXByaXYgPSBkZXZtX2t6YWxsb2MoY29kZWMtPmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtNTExMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTUxMTAuYwppbmRleCBjMDRjMGJjLi42MDg4ZDMwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtNTExMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd201MTEwLmMKQEAgLTM2MCwxNSArMzYwLDEzIEBACiAKIHN0YXRpYyBpbnQgd201MTEwX2NsZWFyX3BnYV92b2x1bWUoc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEsIGludCBvdXRwdXQpCiB7Ci0Jc3RydWN0IHJlZ19zZXF1ZW5jZSBjbGVhcl9wZ2EgPSB7Ci0JCUFSSVpPTkFfT1VUUFVUX1BBVEhfQ09ORklHXzFMICsgb3V0cHV0ICogNCwgMHg4MAotCX07CisJdW5zaWduZWQgaW50IHJlZyA9IEFSSVpPTkFfT1VUUFVUX1BBVEhfQ09ORklHXzFMICsgb3V0cHV0ICogNDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcmVnbWFwX211bHRpX3JlZ193cml0ZV9ieXBhc3NlZChhcml6b25hLT5yZWdtYXAsICZjbGVhcl9wZ2EsIDEpOworCXJldCA9IHJlZ21hcF93cml0ZShhcml6b25hLT5yZWdtYXAsIHJlZywgMHg4MCk7CiAJaWYgKHJldCkKIAkJZGV2X2Vycihhcml6b25hLT5kZXYsICJGYWlsZWQgdG8gY2xlYXIgUEdBICgweCV4KTogJWRcbiIsCi0JCQljbGVhcl9wZ2EucmVnLCByZXQpOworCQkJcmVnLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQzOSwxOCArNDM3LDE3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19rY29udHJvbF9jb2RlYyhrY29udHJvbCk7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gc25kX3NvY19jb2RlY19nZXRfZGFwbShjb2RlYyk7Ci0Jc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQ7CiAJaW50IHJldDsKIAogCS8qCiAJICogUEdBIFZvbHVtZSBpcyBhbHNvIHVzZWQgYXMgcGFydCBvZiB0aGUgZW5hYmxlIHNlcXVlbmNlLCBzbwogCSAqIHVzYWdlIG9mIGl0IHNob3VsZCBiZSBhdm9pZGVkIHdoaWxzdCB0aGF0IGlzIHJ1bm5pbmcuCiAJICovCi0JbXV0ZXhfbG9ja19uZXN0ZWQoJmNhcmQtPmRhcG1fbXV0ZXgsIFNORF9TT0NfREFQTV9DTEFTU19SVU5USU1FKTsKKwlzbmRfc29jX2RhcG1fbXV0ZXhfbG9jayhkYXBtKTsKIAogCXJldCA9IHNuZF9zb2NfZ2V0X3ZvbHN3X3JhbmdlKGtjb250cm9sLCB1Y29udHJvbCk7CiAKLQltdXRleF91bmxvY2soJmNhcmQtPmRhcG1fbXV0ZXgpOworCXNuZF9zb2NfZGFwbV9tdXRleF91bmxvY2soZGFwbSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDYwLDE4ICs0NTcsMTcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2tjb250cm9sX2NvZGVjKGtjb250cm9sKTsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSBzbmRfc29jX2NvZGVjX2dldF9kYXBtKGNvZGVjKTsKLQlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gZGFwbS0+Y2FyZDsKIAlpbnQgcmV0OwogCiAJLyoKIAkgKiBQR0EgVm9sdW1lIGlzIGFsc28gdXNlZCBhcyBwYXJ0IG9mIHRoZSBlbmFibGUgc2VxdWVuY2UsIHNvCiAJICogdXNhZ2Ugb2YgaXQgc2hvdWxkIGJlIGF2b2lkZWQgd2hpbHN0IHRoYXQgaXMgcnVubmluZy4KIAkgKi8KLQltdXRleF9sb2NrX25lc3RlZCgmY2FyZC0+ZGFwbV9tdXRleCwgU05EX1NPQ19EQVBNX0NMQVNTX1JVTlRJTUUpOworCXNuZF9zb2NfZGFwbV9tdXRleF9sb2NrKGRhcG0pOwogCiAJcmV0ID0gc25kX3NvY19wdXRfdm9sc3dfcmFuZ2Uoa2NvbnRyb2wsIHVjb250cm9sKTsKIAotCW11dGV4X3VubG9jaygmY2FyZC0+ZGFwbV9tdXRleCk7CisJc25kX3NvY19kYXBtX211dGV4X3VubG9jayhkYXBtKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01NzUsNiArNTcxLDMzIEBACiAJU09DX1NJTkdMRShuYW1lICIgTkcgU1BLREFUMkwgU3dpdGNoIiwgYmFzZSwgMTAsIDEsIDApLCBcCiAJU09DX1NJTkdMRShuYW1lICIgTkcgU1BLREFUMlIgU3dpdGNoIiwgYmFzZSwgMTEsIDEsIDApCiAKKyNkZWZpbmUgV001MTEwX1JYQU5DX0lOUFVUX1JPVVRFUyh3aWRnZXQsIG5hbWUpIFwKKwl7IHdpZGdldCwgTlVMTCwgbmFtZSAiIE5HIE11eCIgfSwgXAorCXsgbmFtZSAiIE5HIEludGVybmFsIiwgTlVMTCwgIlJYQU5DIE5HIENsb2NrIiB9LCBcCisJeyBuYW1lICIgTkcgSW50ZXJuYWwiLCBOVUxMLCBuYW1lICIgQ2hhbm5lbCIgfSwgXAorCXsgbmFtZSAiIE5HIEV4dGVybmFsIiwgTlVMTCwgIlJYQU5DIE5HIEV4dGVybmFsIENsb2NrIiB9LCBcCisJeyBuYW1lICIgTkcgRXh0ZXJuYWwiLCBOVUxMLCBuYW1lICIgQ2hhbm5lbCIgfSwgXAorCXsgbmFtZSAiIE5HIE11eCIsICJOb25lIiwgbmFtZSAiIENoYW5uZWwiIH0sIFwKKwl7IG5hbWUgIiBORyBNdXgiLCAiSW50ZXJuYWwiLCBuYW1lICIgTkcgSW50ZXJuYWwiIH0sIFwKKwl7IG5hbWUgIiBORyBNdXgiLCAiRXh0ZXJuYWwiLCBuYW1lICIgTkcgRXh0ZXJuYWwiIH0sIFwKKwl7IG5hbWUgIiBDaGFubmVsIiwgIkxlZnQiLCBuYW1lICIgTGVmdCBJbnB1dCIgfSwgXAorCXsgbmFtZSAiIENoYW5uZWwiLCAiQ29tYmluZSIsIG5hbWUgIiBMZWZ0IElucHV0IiB9LCBcCisJeyBuYW1lICIgQ2hhbm5lbCIsICJSaWdodCIsIG5hbWUgIiBSaWdodCBJbnB1dCIgfSwgXAorCXsgbmFtZSAiIENoYW5uZWwiLCAiQ29tYmluZSIsIG5hbWUgIiBSaWdodCBJbnB1dCIgfSwgXAorCXsgbmFtZSAiIExlZnQgSW5wdXQiLCAiSU4xIiwgIklOMUwgUEdBIiB9LCBcCisJeyBuYW1lICIgUmlnaHQgSW5wdXQiLCAiSU4xIiwgIklOMVIgUEdBIiB9LCBcCisJeyBuYW1lICIgTGVmdCBJbnB1dCIsICJJTjIiLCAiSU4yTCBQR0EiIH0sIFwKKwl7IG5hbWUgIiBSaWdodCBJbnB1dCIsICJJTjIiLCAiSU4yUiBQR0EiIH0sIFwKKwl7IG5hbWUgIiBMZWZ0IElucHV0IiwgIklOMyIsICJJTjNMIFBHQSIgfSwgXAorCXsgbmFtZSAiIFJpZ2h0IElucHV0IiwgIklOMyIsICJJTjNSIFBHQSIgfSwgXAorCXsgbmFtZSAiIExlZnQgSW5wdXQiLCAiSU40IiwgIklONEwgUEdBIiB9LCBcCisJeyBuYW1lICIgUmlnaHQgSW5wdXQiLCAiSU40IiwgIklONFIgUEdBIiB9CisKKyNkZWZpbmUgV001MTEwX1JYQU5DX09VVFBVVF9ST1VURVMod2lkZ2V0LCBuYW1lKSBcCisJeyB3aWRnZXQsIE5VTEwsIG5hbWUgIiBBTkMgU291cmNlIiB9LCBcCisJeyBuYW1lICIgQU5DIFNvdXJjZSIsICJSWEFOQ0wiLCAiUlhBTkNMIiB9LCBcCisJeyBuYW1lICIgQU5DIFNvdXJjZSIsICJSWEFOQ1IiLCAiUlhBTkNSIiB9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTUxMTBfc25kX2NvbnRyb2xzW10gPSB7CiBTT0NfRU5VTSgiSU4xIE9TUiIsIGFyaXpvbmFfaW5fZG1pY19vc3JbMF0pLAogU09DX0VOVU0oIklOMiBPU1IiLCBhcml6b25hX2luX2RtaWNfb3NyWzFdKSwKQEAgLTYzOSw2ICs2NjIsMTUgQEAKIFNPQ19FTlVNKCJJbnB1dCBSYW1wIFVwIiwgYXJpem9uYV9pbl92aV9yYW1wKSwKIFNPQ19FTlVNKCJJbnB1dCBSYW1wIERvd24iLCBhcml6b25hX2luX3ZkX3JhbXApLAogCitTTkRfU09DX0JZVEVTKCJSWEFOQyBDb2VmZmljaWVudHMiLCBBUklaT05BX0FOQ19DT0VGRl9TVEFSVCwKKwkgICAgICBBUklaT05BX0FOQ19DT0VGRl9FTkQgLSBBUklaT05BX0FOQ19DT0VGRl9TVEFSVCArIDEpLAorU05EX1NPQ19CWVRFUygiUlhBTkNMIENvbmZpZyIsIEFSSVpPTkFfRkNMX0ZJTFRFUl9DT05UUk9MLCAxKSwKK1NORF9TT0NfQllURVMoIlJYQU5DTCBDb2VmZmljaWVudHMiLCBBUklaT05BX0ZDTF9DT0VGRl9TVEFSVCwKKwkgICAgICBBUklaT05BX0ZDTF9DT0VGRl9FTkQgLSBBUklaT05BX0ZDTF9DT0VGRl9TVEFSVCArIDEpLAorU05EX1NPQ19CWVRFUygiUlhBTkNSIENvbmZpZyIsIEFSSVpPTkFfRkNSX0ZJTFRFUl9DT05UUk9MLCAxKSwKK1NORF9TT0NfQllURVMoIlJYQU5DUiBDb2VmZmljaWVudHMiLCBBUklaT05BX0ZDUl9DT0VGRl9TVEFSVCwKKwkgICAgICBBUklaT05BX0ZDUl9DT0VGRl9FTkQgLSBBUklaT05BX0ZDUl9DT0VGRl9TVEFSVCArIDEpLAorCiBBUklaT05BX01JWEVSX0NPTlRST0xTKCJFUTEiLCBBUklaT05BX0VRMU1JWF9JTlBVVF8xX1NPVVJDRSksCiBBUklaT05BX01JWEVSX0NPTlRST0xTKCJFUTIiLCBBUklaT05BX0VRMk1JWF9JTlBVVF8xX1NPVVJDRSksCiBBUklaT05BX01JWEVSX0NPTlRST0xTKCJFUTMiLCBBUklaT05BX0VRM01JWF9JTlBVVF8xX1NPVVJDRSksCkBAIC05OTUsNiArMTAyNywzMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtNTExMF9hZWNfbG9vcGJhY2tfbXV4ID0KIAlTT0NfREFQTV9FTlVNKCJBRUMgTG9vcGJhY2siLCB3bTUxMTBfYWVjX2xvb3BiYWNrKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtNTExMF9hbmNfaW5wdXRfbXV4W10gPSB7CisJU09DX0RBUE1fRU5VTSgiUlhBTkNMIElucHV0IiwgYXJpem9uYV9hbmNfaW5wdXRfc3JjWzBdKSwKKwlTT0NfREFQTV9FTlVNKCJSWEFOQ0wgQ2hhbm5lbCIsIGFyaXpvbmFfYW5jX2lucHV0X3NyY1sxXSksCisJU09DX0RBUE1fRU5VTSgiUlhBTkNSIElucHV0IiwgYXJpem9uYV9hbmNfaW5wdXRfc3JjWzJdKSwKKwlTT0NfREFQTV9FTlVNKCJSWEFOQ1IgQ2hhbm5lbCIsIGFyaXpvbmFfYW5jX2lucHV0X3NyY1szXSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd201MTEwX2FuY19uZ19tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJYQU5DIE5HIFNvdXJjZSIsIGFyaXpvbmFfYW5jX25nX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd201MTEwX291dHB1dF9hbmNfc3JjW10gPSB7CisJU09DX0RBUE1fRU5VTSgiSFBPVVQxTCBBTkMgU291cmNlIiwgYXJpem9uYV9vdXRwdXRfYW5jX3NyY1swXSksCisJU09DX0RBUE1fRU5VTSgiSFBPVVQxUiBBTkMgU291cmNlIiwgYXJpem9uYV9vdXRwdXRfYW5jX3NyY1sxXSksCisJU09DX0RBUE1fRU5VTSgiSFBPVVQyTCBBTkMgU291cmNlIiwgYXJpem9uYV9vdXRwdXRfYW5jX3NyY1syXSksCisJU09DX0RBUE1fRU5VTSgiSFBPVVQyUiBBTkMgU291cmNlIiwgYXJpem9uYV9vdXRwdXRfYW5jX3NyY1szXSksCisJU09DX0RBUE1fRU5VTSgiSFBPVVQzTCBBTkMgU291cmNlIiwgYXJpem9uYV9vdXRwdXRfYW5jX3NyY1s0XSksCisJU09DX0RBUE1fRU5VTSgiSFBPVVQzUiBBTkMgU291cmNlIiwgYXJpem9uYV9vdXRwdXRfYW5jX3NyY1s1XSksCisJU09DX0RBUE1fRU5VTSgiU1BLT1VUTCBBTkMgU291cmNlIiwgYXJpem9uYV9vdXRwdXRfYW5jX3NyY1s2XSksCisJU09DX0RBUE1fRU5VTSgiU1BLT1VUUiBBTkMgU291cmNlIiwgYXJpem9uYV9vdXRwdXRfYW5jX3NyY1s3XSksCisJU09DX0RBUE1fRU5VTSgiU1BLREFUMUwgQU5DIFNvdXJjZSIsIGFyaXpvbmFfb3V0cHV0X2FuY19zcmNbOF0pLAorCVNPQ19EQVBNX0VOVU0oIlNQS0RBVDFSIEFOQyBTb3VyY2UiLCBhcml6b25hX291dHB1dF9hbmNfc3JjWzldKSwKKwlTT0NfREFQTV9FTlVNKCJTUEtEQVQyTCBBTkMgU291cmNlIiwgYXJpem9uYV9vdXRwdXRfYW5jX3NyY1sxMF0pLAorCVNPQ19EQVBNX0VOVU0oIlNQS0RBVDJSIEFOQyBTb3VyY2UiLCBhcml6b25hX291dHB1dF9hbmNfc3JjWzExXSksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd201MTEwX2RhcG1fd2lkZ2V0c1tdID0gewogU05EX1NPQ19EQVBNX1NVUFBMWSgiU1lTQ0xLIiwgQVJJWk9OQV9TWVNURU1fQ0xPQ0tfMSwgQVJJWk9OQV9TWVNDTEtfRU5BX1NISUZULAogCQkgICAgMCwgd201MTEwX3N5c2Nsa19ldiwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKQEAgLTExODUsNiArMTI0Miw2NSBAQAogCQkgICAgICAgQVJJWk9OQV9BRUNfTE9PUEJBQ0tfRU5BX1NISUZULCAwLAogCQkgICAgICAgJndtNTExMF9hZWNfbG9vcGJhY2tfbXV4KSwKIAorU05EX1NPQ19EQVBNX1NVUFBMWSgiUlhBTkMgTkcgRXh0ZXJuYWwgQ2xvY2siLCBTTkRfU09DX05PUE0sCisJCSAgIEFSSVpPTkFfRVhUX05HX1NFTF9TRVRfU0hJRlQsIDAsIGFyaXpvbmFfYW5jX2V2LAorCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCitTTkRfU09DX0RBUE1fUEdBKCJSWEFOQ0wgTkcgRXh0ZXJuYWwiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUlhBTkNSIE5HIEV4dGVybmFsIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiUlhBTkMgTkcgQ2xvY2siLCBTTkRfU09DX05PUE0sCisJCSAgIEFSSVpPTkFfQ0xLX05HX0VOQV9TRVRfU0hJRlQsIDAsIGFyaXpvbmFfYW5jX2V2LAorCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCitTTkRfU09DX0RBUE1fUEdBKCJSWEFOQ0wgTkcgSW50ZXJuYWwiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUlhBTkNSIE5HIEludGVybmFsIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiUlhBTkNMIExlZnQgSW5wdXQiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAmd201MTEwX2FuY19pbnB1dF9tdXhbMF0pLAorU05EX1NPQ19EQVBNX01VWCgiUlhBTkNMIFJpZ2h0IElucHV0IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJndtNTExMF9hbmNfaW5wdXRfbXV4WzBdKSwKK1NORF9TT0NfREFQTV9NVVgoIlJYQU5DTCBDaGFubmVsIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJndtNTExMF9hbmNfaW5wdXRfbXV4WzFdKSwKK1NORF9TT0NfREFQTV9NVVgoIlJYQU5DTCBORyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZ3bTUxMTBfYW5jX25nX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSWEFOQ1IgTGVmdCBJbnB1dCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICZ3bTUxMTBfYW5jX2lucHV0X211eFsyXSksCitTTkRfU09DX0RBUE1fTVVYKCJSWEFOQ1IgUmlnaHQgSW5wdXQiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAmd201MTEwX2FuY19pbnB1dF9tdXhbMl0pLAorU05EX1NPQ19EQVBNX01VWCgiUlhBTkNSIENoYW5uZWwiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAmd201MTEwX2FuY19pbnB1dF9tdXhbM10pLAorU05EX1NPQ19EQVBNX01VWCgiUlhBTkNSIE5HIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJndtNTExMF9hbmNfbmdfbXV4KSwKKworU05EX1NPQ19EQVBNX1BHQV9FKCJSWEFOQ0wiLCBTTkRfU09DX05PUE0sIEFSSVpPTkFfQ0xLX0xfRU5BX1NFVF9TSElGVCwKKwkJICAgMCwgTlVMTCwgMCwgYXJpem9uYV9hbmNfZXYsCisJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKK1NORF9TT0NfREFQTV9QR0FfRSgiUlhBTkNSIiwgU05EX1NPQ19OT1BNLCBBUklaT05BX0NMS19SX0VOQV9TRVRfU0hJRlQsCisJCSAgIDAsIE5VTEwsIDAsIGFyaXpvbmFfYW5jX2V2LAorCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKK1NORF9TT0NfREFQTV9NVVgoIkhQT1VUMUwgQU5DIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICZ3bTUxMTBfb3V0cHV0X2FuY19zcmNbMF0pLAorU05EX1NPQ19EQVBNX01VWCgiSFBPVVQxUiBBTkMgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJndtNTExMF9vdXRwdXRfYW5jX3NyY1sxXSksCitTTkRfU09DX0RBUE1fTVVYKCJIUE9VVDJMIEFOQyBTb3VyY2UiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAmd201MTEwX291dHB1dF9hbmNfc3JjWzJdKSwKK1NORF9TT0NfREFQTV9NVVgoIkhQT1VUMlIgQU5DIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICZ3bTUxMTBfb3V0cHV0X2FuY19zcmNbM10pLAorU05EX1NPQ19EQVBNX01VWCgiSFBPVVQzTCBBTkMgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJndtNTExMF9vdXRwdXRfYW5jX3NyY1s0XSksCitTTkRfU09DX0RBUE1fTVVYKCJIUE9VVDNSIEFOQyBTb3VyY2UiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAmd201MTEwX291dHB1dF9hbmNfc3JjWzVdKSwKK1NORF9TT0NfREFQTV9NVVgoIlNQS09VVEwgQU5DIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICZ3bTUxMTBfb3V0cHV0X2FuY19zcmNbNl0pLAorU05EX1NPQ19EQVBNX01VWCgiU1BLT1VUUiBBTkMgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJndtNTExMF9vdXRwdXRfYW5jX3NyY1s3XSksCitTTkRfU09DX0RBUE1fTVVYKCJTUEtEQVQxTCBBTkMgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJndtNTExMF9vdXRwdXRfYW5jX3NyY1s4XSksCitTTkRfU09DX0RBUE1fTVVYKCJTUEtEQVQxUiBBTkMgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJndtNTExMF9vdXRwdXRfYW5jX3NyY1s5XSksCitTTkRfU09DX0RBUE1fTVVYKCJTUEtEQVQyTCBBTkMgU291cmNlIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgJndtNTExMF9vdXRwdXRfYW5jX3NyY1sxMF0pLAorU05EX1NPQ19EQVBNX01VWCgiU1BLREFUMlIgQU5DIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICZ3bTUxMTBfb3V0cHV0X2FuY19zcmNbMTFdKSwKKwogU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWDEiLCBOVUxMLCAwLAogCQkgICAgIEFSSVpPTkFfQUlGMV9UWF9FTkFCTEVTLCBBUklaT05BX0FJRjFUWDFfRU5BX1NISUZULCAwKSwKIFNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFgyIiwgTlVMTCwgMCwKQEAgLTE2OTAsNiArMTgwNiw5IEBACiAJeyAiU2xpbTIgQ2FwdHVyZSIsIE5VTEwsICJTWVNDTEsiIH0sCiAJeyAiU2xpbTMgQ2FwdHVyZSIsIE5VTEwsICJTWVNDTEsiIH0sCiAKKwl7ICJWb2ljZSBDb250cm9sIERTUCIsIE5VTEwsICJEU1AzIiB9LAorCXsgIlZvaWNlIENvbnRyb2wgRFNQIiwgTlVMTCwgIlNZU0NMSyIgfSwKKwogCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMUwiIH0sCiAJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4xUiIgfSwKIApAQCAtMTgzOCw2ICsxOTU3LDIyIEBACiAJeyAiU1BLREFUMkwiLCBOVUxMLCAiT1VUNkwiIH0sCiAJeyAiU1BLREFUMlIiLCBOVUxMLCAiT1VUNlIiIH0sCiAKKwlXTTUxMTBfUlhBTkNfSU5QVVRfUk9VVEVTKCJSWEFOQ0wiLCAiUlhBTkNMIiksCisJV001MTEwX1JYQU5DX0lOUFVUX1JPVVRFUygiUlhBTkNSIiwgIlJYQU5DUiIpLAorCisJV001MTEwX1JYQU5DX09VVFBVVF9ST1VURVMoIk9VVDFMIiwgIkhQT1VUMUwiKSwKKwlXTTUxMTBfUlhBTkNfT1VUUFVUX1JPVVRFUygiT1VUMVIiLCAiSFBPVVQxUiIpLAorCVdNNTExMF9SWEFOQ19PVVRQVVRfUk9VVEVTKCJPVVQyTCIsICJIUE9VVDJMIiksCisJV001MTEwX1JYQU5DX09VVFBVVF9ST1VURVMoIk9VVDJSIiwgIkhQT1VUMlIiKSwKKwlXTTUxMTBfUlhBTkNfT1VUUFVUX1JPVVRFUygiT1VUM0wiLCAiSFBPVVQzTCIpLAorCVdNNTExMF9SWEFOQ19PVVRQVVRfUk9VVEVTKCJPVVQzUiIsICJIUE9VVDNSIiksCisJV001MTEwX1JYQU5DX09VVFBVVF9ST1VURVMoIk9VVDRMIiwgIlNQS09VVEwiKSwKKwlXTTUxMTBfUlhBTkNfT1VUUFVUX1JPVVRFUygiT1VUNFIiLCAiU1BLT1VUUiIpLAorCVdNNTExMF9SWEFOQ19PVVRQVVRfUk9VVEVTKCJPVVQ1TCIsICJTUEtEQVQxTCIpLAorCVdNNTExMF9SWEFOQ19PVVRQVVRfUk9VVEVTKCJPVVQ1UiIsICJTUEtEQVQxUiIpLAorCVdNNTExMF9SWEFOQ19PVVRQVVRfUk9VVEVTKCJPVVQ2TCIsICJTUEtEQVQyTCIpLAorCVdNNTExMF9SWEFOQ19PVVRQVVRfUk9VVEVTKCJPVVQ2UiIsICJTUEtEQVQyUiIpLAorCiAJeyAiTUlDU1VQUCIsIE5VTEwsICJTWVNDTEsiIH0sCiAKIAl7ICJEUkMxIFNpZ25hbCBBY3Rpdml0eSIsIE5VTEwsICJEUkMxTCIgfSwKQEAgLTE5OTYsMTIgKzIxMzEsNjUgQEAKIAkJIH0sCiAJCS5vcHMgPSAmYXJpem9uYV9zaW1wbGVfZGFpX29wcywKIAl9LAorCXsKKwkJLm5hbWUgPSAid201MTEwLWNwdS12b2ljZWN0cmwiLAorCQkuY2FwdHVyZSA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJWb2ljZSBDb250cm9sIENQVSIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAxLAorCQkJLnJhdGVzID0gV001MTEwX1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTUxMTBfRk9STUFUUywKKwkJfSwKKwkJLmNvbXByZXNzX25ldyA9IHNuZF9zb2NfbmV3X2NvbXByZXNzLAorCX0sCisJeworCQkubmFtZSA9ICJ3bTUxMTAtZHNwLXZvaWNlY3RybCIsCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIlZvaWNlIENvbnRyb2wgRFNQIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDEsCisJCQkucmF0ZXMgPSBXTTUxMTBfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNNTExMF9GT1JNQVRTLAorCQl9LAorCX0sCiB9OwogCitzdGF0aWMgaW50IHdtNTExMF9vcGVuKHN0cnVjdCBzbmRfY29tcHJfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB3bTUxMTBfcHJpdiAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEocnRkLT5jb2RlYyk7CisJc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEgPSBwcml2LT5jb3JlLmFyaXpvbmE7CisJaW50IG5fYWRzcDsKKworCWlmIChzdHJjbXAocnRkLT5jb2RlY19kYWktPm5hbWUsICJ3bTUxMTAtZHNwLXZvaWNlY3RybCIpID09IDApIHsKKwkJbl9hZHNwID0gMjsKKwl9IGVsc2UgeworCQlkZXZfZXJyKGFyaXpvbmEtPmRldiwKKwkJCSJObyBzdWl0YWJsZSBjb21wcmVzc2VkIHN0cmVhbSBmb3IgREFJICclcydcbiIsCisJCQlydGQtPmNvZGVjX2RhaS0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiB3bV9hZHNwX2NvbXByX29wZW4oJnByaXYtPmNvcmUuYWRzcFtuX2Fkc3BdLCBzdHJlYW0pOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgd201MTEwX2Fkc3AyX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3bTUxMTBfcHJpdiAqZmxvcmlkYSA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IHdtX2Fkc3BfY29tcHJfaGFuZGxlX2lycSgmZmxvcmlkYS0+Y29yZS5hZHNwWzJdKTsKKwlpZiAocmV0ID09IC1FTk9ERVYpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogc3RhdGljIGludCB3bTUxMTBfY29kZWNfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RhcG0oY29kZWMpOwogCXN0cnVjdCB3bTUxMTBfcHJpdiAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBhcml6b25hICphcml6b25hID0gcHJpdi0+Y29yZS5hcml6b25hOwogCWludCBpLCByZXQ7CiAKIAlwcml2LT5jb3JlLmFyaXpvbmEtPmRhcG0gPSBkYXBtOwpAQCAtMjAxMCw2ICsyMTk4LDE0IEBACiAJYXJpem9uYV9pbml0X2dwaW8oY29kZWMpOwogCWFyaXpvbmFfaW5pdF9tb25vKGNvZGVjKTsKIAorCXJldCA9IGFyaXpvbmFfcmVxdWVzdF9pcnEoYXJpem9uYSwgQVJJWk9OQV9JUlFfRFNQX0lSUTEsCisJCQkJICAiQURTUDIgQ29tcHJlc3NlZCBJUlEiLCB3bTUxMTBfYWRzcDJfaXJxLAorCQkJCSAgcHJpdik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IERTUCBJUlE6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBXTTUxMTBfTlVNX0FEU1A7ICsraSkgewogCQlyZXQgPSB3bV9hZHNwMl9jb2RlY19wcm9iZSgmcHJpdi0+Y29yZS5hZHNwW2ldLCBjb2RlYyk7CiAJCWlmIChyZXQpCkBAIC0yMDMwLDEyICsyMjI2LDE1IEBACiAJZm9yICgtLWk7IGkgPj0gMDsgLS1pKQogCQl3bV9hZHNwMl9jb2RlY19yZW1vdmUoJnByaXYtPmNvcmUuYWRzcFtpXSwgY29kZWMpOwogCisJYXJpem9uYV9mcmVlX2lycShhcml6b25hLCBBUklaT05BX0lSUV9EU1BfSVJRMSwgcHJpdik7CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHdtNTExMF9jb2RlY19yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB3bTUxMTBfcHJpdiAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBhcml6b25hICphcml6b25hID0gcHJpdi0+Y29yZS5hcml6b25hOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFdNNTExMF9OVU1fQURTUDsgKytpKQpAQCAtMjA0Myw2ICsyMjQyLDggQEAKIAogCXByaXYtPmNvcmUuYXJpem9uYS0+ZGFwbSA9IE5VTEw7CiAKKwlhcml6b25hX2ZyZWVfaXJxKGFyaXpvbmEsIEFSSVpPTkFfSVJRX0RTUF9JUlExLCBwcml2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMDg4LDYgKzIyODksMjAgQEAKIAkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRSh3bTUxMTBfZGFwbV9yb3V0ZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfY29tcHJfb3BzIHdtNTExMF9jb21wcl9vcHMgPSB7CisJLm9wZW4gPSB3bTUxMTBfb3BlbiwKKwkuZnJlZSA9IHdtX2Fkc3BfY29tcHJfZnJlZSwKKwkuc2V0X3BhcmFtcyA9IHdtX2Fkc3BfY29tcHJfc2V0X3BhcmFtcywKKwkuZ2V0X2NhcHMgPSB3bV9hZHNwX2NvbXByX2dldF9jYXBzLAorCS50cmlnZ2VyID0gd21fYWRzcF9jb21wcl90cmlnZ2VyLAorCS5wb2ludGVyID0gd21fYWRzcF9jb21wcl9wb2ludGVyLAorCS5jb3B5ID0gd21fYWRzcF9jb21wcl9jb3B5LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtX2RyaXZlciB3bTUxMTBfY29tcHJfcGxhdGZvcm0gPSB7CisJLmNvbXByX29wcyA9ICZ3bTUxMTBfY29tcHJfb3BzLAorfTsKKwogc3RhdGljIGludCB3bTUxMTBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgYXJpem9uYSAqYXJpem9uYSA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKQEAgLTIxNDgsOCArMjM2MywyMSBAQAogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCXBtX3J1bnRpbWVfaWRsZSgmcGRldi0+ZGV2KTsKIAotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZwZGV2LT5kZXYsICZzb2NfY29kZWNfZGV2X3dtNTExMCwKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYsICZ3bTUxMTBfY29tcHJfcGxhdGZvcm0pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBwbGF0Zm9ybTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmcGRldi0+ZGV2LCAmc29jX2NvZGVjX2Rldl93bTUxMTAsCiAJCQkJICAgICAgd201MTEwX2RhaSwgQVJSQVlfU0laRSh3bTUxMTBfZGFpKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOworCX0KKworZXJyb3I6CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB3bTUxMTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwppbmRleCBlNGNjNDFlLi4yZWQ2NDE5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKQEAgLTE4MDQsNyArMTgwNCw3IEBACiAKIAlyZWdtYXBfcmVhZCh3bTg5MDMtPnJlZ21hcCwgV004OTAzX0dQSU9fQ09OVFJPTF8xICsgb2Zmc2V0LCAmcmVnKTsKIAotCXJldHVybiAocmVnICYgV004OTAzX0dQMV9MVkxfTUFTSykgPj4gV004OTAzX0dQMV9MVkxfU0hJRlQ7CisJcmV0dXJuICEhKChyZWcgJiBXTTg5MDNfR1AxX0xWTF9NQVNLKSA+PiBXTTg5MDNfR1AxX0xWTF9TSElGVCk7CiB9CiAKIHN0YXRpYyBpbnQgd204OTAzX2dwaW9fZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKaW5kZXggMmFhMjNmMS4uODE3MmU0OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAljYXNlIFdNODkwNF9GTExfTkNPX1RFU1RfMToKIAkJcmV0dXJuIHRydWU7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBmYWxzZTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MC5jCmluZGV4IDA1NjM3NTMuLjUzODA3OTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiBTT0NfRE9VQkxFX1IoIkNhcHR1cmUgVm9sdW1lIFpDIFN3aXRjaCIsIFdNODk2MF9MSU5WT0wsIFdNODk2MF9SSU5WT0wsCiAJNiwgMSwgMCksCiBTT0NfRE9VQkxFX1IoIkNhcHR1cmUgU3dpdGNoIiwgV004OTYwX0xJTlZPTCwgV004OTYwX1JJTlZPTCwKLQk3LCAxLCAwKSwKKwk3LCAxLCAxKSwKIAogU09DX1NJTkdMRV9UTFYoIlJpZ2h0IElucHV0IEJvb3N0IE1peGVyIFJJTlBVVDMgVm9sdW1lIiwKIAkgICAgICAgV004OTYwX0lOQk1JWDEsIDQsIDcsIDAsIGxpbmVpbmJvb3N0X3RsdiksCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYwppbmRleCAzOWViZDdiLi45NDlmNjMyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCXsgMTUsIDB4NjI0MyB9LCAgIC8qIFIxNSAgICAtIFNvZnR3YXJlIFJlc2V0ICovCiAKIAl7IDE3LCAweDAwN0IgfSwgICAvKiBSMTcgICAgLSBBTEMxICovCi0KKwl7IDE4LCAweDAwMDAgfSwgICAvKiBSMTggICAgLSBBTEMyICovCiAJeyAxOSwgMHgxQzMyIH0sICAgLyogUjE5ICAgIC0gQUxDMyAqLwogCXsgMjAsIDB4MzIwMCB9LCAgIC8qIFIyMCAgICAtIE5vaXNlIEdhdGUgKi8KIAl7IDIxLCAweDAwQzAgfSwgICAvKiBSMjEgICAgLSBMZWZ0IEFEQyB2b2x1bWUgKi8KQEAgLTM2NSw4ICszNjUsOCBAQAogCXsgMTY5MjQsIDB4MDA1OSB9LCAgIC8qIFIxNjkyNCAtIEhEQkFTU19QR18xICovCiAJeyAxNjkyNSwgMHg5OTlBIH0sICAgLyogUjE2OTI1IC0gSERCQVNTX1BHXzAgKi8KIAotCXsgMTcwNDgsIDB4MDA4MyB9LCAgIC8qIFIxNzQwOCAtIEhQRl9DXzEgKi8KLQl7IDE3MDQ5LCAweDk4QUQgfSwgICAvKiBSMTc0MDkgLSBIUEZfQ18wICovCisJeyAxNzQwOCwgMHgwMDgzIH0sICAgLyogUjE3NDA4IC0gSFBGX0NfMSAqLworCXsgMTc0MDksIDB4OThBRCB9LCAgIC8qIFIxNzQwOSAtIEhQRl9DXzAgKi8KIAogCXsgMTc5MjAsIDB4MDA3RiB9LCAgIC8qIFIxNzkyMCAtIEFEQ0xfUkVUVU5FX0MxXzEgKi8KIAl7IDE3OTIxLCAweEZGRkYgfSwgICAvKiBSMTc5MjEgLSBBRENMX1JFVFVORV9DMV8wICovCkBAIC03OTQsNyArNzk0LDYgQEAKIAljYXNlIFdNODk2Ml9DTE9DS0lORzE6CiAJY2FzZSBXTTg5NjJfQ0xPQ0tJTkcyOgogCWNhc2UgV004OTYyX1NPRlRXQVJFX1JFU0VUOgotCWNhc2UgV004OTYyX0FMQzI6CiAJY2FzZSBXTTg5NjJfVEhFUk1BTF9TSFVURE9XTl9TVEFUVVM6CiAJY2FzZSBXTTg5NjJfQURESVRJT05BTF9DT05UUk9MXzQ6CiAJY2FzZSBXTTg5NjJfRENfU0VSVk9fNjoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCmluZGV4IDBhNjA2NzcuLmMyODRjN2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYwpAQCAtNTc0LDYgKzU3NCw3IEBACiAJLm1heF9yZWdpc3RlciA9IFdNODk3NF9NT05PTUlYLAogCS5yZWdfZGVmYXVsdHMgPSB3bTg5NzRfcmVnX2RlZmF1bHRzLAogCS5udW1fcmVnX2RlZmF1bHRzID0gQVJSQVlfU0laRSh3bTg5NzRfcmVnX2RlZmF1bHRzKSwKKwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX0ZMQVQsCiB9OwogCiBzdGF0aWMgaW50IHdtODk3NF9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCkBAIC02MzEsOSArNjMyLDE2IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODk3NF9pMmNfaWQpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB3bTg5NzRfb2ZfbWF0Y2hbXSA9IHsKKyAgICAgICB7IC5jb21wYXRpYmxlID0gIndsZix3bTg5NzQiLCB9LAorICAgICAgIHsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHdtODk3NF9vZl9tYXRjaCk7CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg5NzRfaTJjX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJ3bTg5NzQiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB3bTg5NzRfb2ZfbWF0Y2gsCiAJfSwKIAkucHJvYmUgPSAgICB3bTg5NzRfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSAgIHdtODk3NF9pMmNfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTguYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk4LmMKaW5kZXggODc4MmRmYi4uNzcxOWJjNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5OC5jCkBAIC0xOTksMjAgKzE5OSwyMCBAQAogCSJCIiwKIH07CiAKLXN0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTCh3bTg5OThfaW4xbXV4bF9lbnVtLAotCQkJCSAgQVJJWk9OQV9BRENfRElHSVRBTF9WT0xVTUVfMUwsCi0JCQkJICBBUklaT05BX0lOMUxfU1JDX1NISUZULAotCQkJCSAgd204OTk4X2lubXV4X3RleHRzKTsKK3N0YXRpYyBTT0NfRU5VTV9TSU5HTEVfREVDTCh3bTg5OThfaW4xbXV4bF9lbnVtLAorCQkJICAgIEFSSVpPTkFfQURDX0RJR0lUQUxfVk9MVU1FXzFMLAorCQkJICAgIEFSSVpPTkFfSU4xTF9TUkNfU0hJRlQsCisJCQkgICAgd204OTk4X2lubXV4X3RleHRzKTsKIAotc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKHdtODk5OF9pbjFtdXhyX2VudW0sCi0JCQkJICBBUklaT05BX0FEQ19ESUdJVEFMX1ZPTFVNRV8xUiwKLQkJCQkgIEFSSVpPTkFfSU4xUl9TUkNfU0hJRlQsCi0JCQkJICB3bTg5OThfaW5tdXhfdGV4dHMpOworc3RhdGljIFNPQ19FTlVNX1NJTkdMRV9ERUNMKHdtODk5OF9pbjFtdXhyX2VudW0sCisJCQkgICAgQVJJWk9OQV9BRENfRElHSVRBTF9WT0xVTUVfMVIsCisJCQkgICAgQVJJWk9OQV9JTjFSX1NSQ19TSElGVCwKKwkJCSAgICB3bTg5OThfaW5tdXhfdGV4dHMpOwogCi1zdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0wod204OTk4X2luMm11eF9lbnVtLAotCQkJCSAgQVJJWk9OQV9BRENfRElHSVRBTF9WT0xVTUVfMkwsCi0JCQkJICBBUklaT05BX0lOMkxfU1JDX1NISUZULAotCQkJCSAgd204OTk4X2lubXV4X3RleHRzKTsKK3N0YXRpYyBTT0NfRU5VTV9TSU5HTEVfREVDTCh3bTg5OThfaW4ybXV4X2VudW0sCisJCQkgICAgQVJJWk9OQV9BRENfRElHSVRBTF9WT0xVTUVfMkwsCisJCQkgICAgQVJJWk9OQV9JTjJMX1NSQ19TSElGVCwKKwkJCSAgICB3bTg5OThfaW5tdXhfdGV4dHMpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTk4X2luMW11eFsyXSA9IHsKIAlTT0NfREFQTV9FTlVNX0VYVCgiSU4xTCBNdXgiLCB3bTg5OThfaW4xbXV4bF9lbnVtLApAQCAtNTIyLDE3ICs1MjIsMTcgQEAKIAkwLCAxLCAyLCAzLCA0LCA2LCA3LCA4LCA5LAogfTsKIAotc3RhdGljIGNvbnN0IFNPQ19WQUxVRV9FTlVNX1NJTkdMRV9ERUNMKHdtODk5OF9hZWMxX2xvb3BiYWNrLAotCQkJCQlBUklaT05BX0RBQ19BRUNfQ09OVFJPTF8xLAotCQkJCQlBUklaT05BX0FFQ19MT09QQkFDS19TUkNfU0hJRlQsIDB4ZiwKLQkJCQkJd204OTk4X2FlY19sb29wYmFja190ZXh0cywKLQkJCQkJd204OTk4X2FlY19sb29wYmFja192YWx1ZXMpOworc3RhdGljIFNPQ19WQUxVRV9FTlVNX1NJTkdMRV9ERUNMKHdtODk5OF9hZWMxX2xvb3BiYWNrLAorCQkJCSAgQVJJWk9OQV9EQUNfQUVDX0NPTlRST0xfMSwKKwkJCQkgIEFSSVpPTkFfQUVDX0xPT1BCQUNLX1NSQ19TSElGVCwgMHhmLAorCQkJCSAgd204OTk4X2FlY19sb29wYmFja190ZXh0cywKKwkJCQkgIHdtODk5OF9hZWNfbG9vcGJhY2tfdmFsdWVzKTsKIAotc3RhdGljIGNvbnN0IFNPQ19WQUxVRV9FTlVNX1NJTkdMRV9ERUNMKHdtODk5OF9hZWMyX2xvb3BiYWNrLAotCQkJCQlBUklaT05BX0RBQ19BRUNfQ09OVFJPTF8yLAotCQkJCQlBUklaT05BX0FFQ19MT09QQkFDS19TUkNfU0hJRlQsIDB4ZiwKLQkJCQkJd204OTk4X2FlY19sb29wYmFja190ZXh0cywKLQkJCQkJd204OTk4X2FlY19sb29wYmFja192YWx1ZXMpOworc3RhdGljIFNPQ19WQUxVRV9FTlVNX1NJTkdMRV9ERUNMKHdtODk5OF9hZWMyX2xvb3BiYWNrLAorCQkJCSAgQVJJWk9OQV9EQUNfQUVDX0NPTlRST0xfMiwKKwkJCQkgIEFSSVpPTkFfQUVDX0xPT1BCQUNLX1NSQ19TSElGVCwgMHhmLAorCQkJCSAgd204OTk4X2FlY19sb29wYmFja190ZXh0cywKKwkJCQkgIHdtODk5OF9hZWNfbG9vcGJhY2tfdmFsdWVzKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5OF9hZWNfbG9vcGJhY2tfbXV4W10gPSB7CiAJU09DX0RBUE1fRU5VTSgiQUVDMSBMb29wYmFjayIsIHdtODk5OF9hZWMxX2xvb3BiYWNrKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCmluZGV4IDQwODNhNTEuLjc5ZTE0MzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgpAQCAtMzksMzQgKzQwLDYgQEAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWM5N19yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQl1bnNpZ25lZCBpbnQgcmVnKTsKLXN0YXRpYyBpbnQgYWM5N193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCk7Ci0KLS8qCi0gKiBXTTk3MTMgcmVnaXN0ZXIgY2FjaGUKLSAqIFJlZyAweDNjIGJpdCAxNSBpcyB1c2VkIGJ5IHRvdWNoIGRyaXZlci4KLSAqLwotc3RhdGljIGNvbnN0IHUxNiB3bTk3MTNfcmVnW10gPSB7Ci0JMHg2MTc0LCAweDgwODAsIDB4ODA4MCwgMHg4MDgwLAotCTB4Yzg4MCwgMHhlODA4LCAweGU4MDgsIDB4MDgwOCwKLQkweDAwZGEsIDB4ODAwMCwgMHhkNjAwLCAweGFhYTAsCi0JMHhhYWEwLCAweGFhYTAsIDB4MDAwMCwgMHgwMDAwLAotCTB4MGYwZiwgMHgwMDQwLCAweDAwMDAsIDB4N2YwMCwKLQkweDA0MDUsIDB4MDQxMCwgMHhiYjgwLCAweGJiODAsCi0JMHgwMDAwLCAweGJiODAsIDB4MDAwMCwgMHg0NTIzLAotCTB4MDAwMCwgMHgyMDAwLCAweDdlZmYsIDB4ZmZmZiwKLQkweDAwMDAsIDB4MDAwMCwgMHgwMDgwLCAweDAwMDAsCi0JMHgwMDAwLCAweDAwMDAsIDB4ZmZmZSwgMHhmZmZmLAotCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ZmZmZSwKLQkweDQwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCi0JMHhiMDMyLCAweDNlMDAsIDB4MDAwMCwgMHgwMDAwLAotCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKLQkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDYsCi0JMHgwMDAxLCAweDAwMDAsIDB4NTc0ZCwgMHg0YzEzLAotfTsKLQogI2RlZmluZSBIUExfTUlYRVIgMAogI2RlZmluZSBIUFJfTUlYRVIgMQogCkBAIC0yMjAsMTggKzE5MywxNSBAQAogCQkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKLQl1MTYgc3RhdHVzLCByYXRlOwogCiAJaWYgKFdBUk5fT04oZXZlbnQgIT0gU05EX1NPQ19EQVBNX1BSRV9QTUQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEdyYWNlZnVsbHkgc2h1dCBkb3duIHRoZSB2b2ljZSBpbnRlcmZhY2UuICovCi0Jc3RhdHVzID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCkgfCAweDEwMDA7Ci0JcmF0ZSA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUpICYgMHhGMEZGOwotCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByYXRlIHwgMHgwMjAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgMHgwZjAwLCAweDAyMDApOwogCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEpKTsKLQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmF0ZSB8IDB4MEYwMCk7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIHN0YXR1cyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIDB4MGYwMCwgMHgwZjAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgMHgxMDAwLCAweDEwMDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NzQsNDAgKzY0NCw5OCBAQAogCXsiQ2FwdHVyZSBNb25vIE11eCIsICJSaWdodCIsICJSaWdodCBDYXB0dXJlIFNvdXJjZSJ9LAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBhYzk3X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCXVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgYm9vbCB3bTk3MTNfcmVhZGFibGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKIHsKLQlzdHJ1Y3Qgd205NzEzX3ByaXYgKndtOTcxMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCi0JaWYgKHJlZyA9PSBBQzk3X1JFU0VUIHx8IHJlZyA9PSBBQzk3X0dQSU9fU1RBVFVTIHx8Ci0JCXJlZyA9PSBBQzk3X1ZFTkRPUl9JRDEgfHwgcmVnID09IEFDOTdfVkVORE9SX0lEMiB8fAotCQlyZWcgPT0gQUM5N19DRCkKLQkJcmV0dXJuIHNvY19hYzk3X29wcy0+cmVhZCh3bTk3MTMtPmFjOTcsIHJlZyk7Ci0JZWxzZSB7Ci0JCXJlZyA9IHJlZyA+PiAxOwotCi0JCWlmIChyZWcgPj0gKEFSUkFZX1NJWkUod205NzEzX3JlZykpKQotCQkJcmV0dXJuIC1FSU87Ci0KLQkJcmV0dXJuIGNhY2hlW3JlZ107CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFDOTdfUkVTRVQgLi4uIEFDOTdfUENNX1NVUlJfREFDX1JBVEU6CisJY2FzZSBBQzk3X1BDTV9MUl9BRENfUkFURToKKwljYXNlIEFDOTdfQ0VOVEVSX0xGRV9NQVNURVI6CisJY2FzZSBBQzk3X1NQRElGIC4uLiBBQzk3X0xJTkUxX0xFVkVMOgorCWNhc2UgQUM5N19HUElPX0NGRyAuLi4gMHg1YzoKKwljYXNlIEFDOTdfQ09ERUNfQ0xBU1NfUkVWIC4uLiBBQzk3X1BDSV9TSUQ6CisJY2FzZSAweDc0IC4uLiBBQzk3X1ZFTkRPUl9JRDI6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYWM5N193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JdW5zaWduZWQgaW50IHZhbCkKK3N0YXRpYyBib29sIHdtOTcxM193cml0ZWFibGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKIHsKLQlzdHJ1Y3Qgd205NzEzX3ByaXYgKndtOTcxMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCi0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0Jc29jX2FjOTdfb3BzLT53cml0ZSh3bTk3MTMtPmFjOTcsIHJlZywgdmFsKTsKLQlyZWcgPSByZWcgPj4gMTsKLQlpZiAocmVnIDwgKEFSUkFZX1NJWkUod205NzEzX3JlZykpKQotCQljYWNoZVtyZWddID0gdmFsOwotCi0JcmV0dXJuIDA7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFDOTdfVkVORE9SX0lEMToKKwljYXNlIEFDOTdfVkVORE9SX0lEMjoKKwkJcmV0dXJuIGZhbHNlOworCWRlZmF1bHQ6CisJCXJldHVybiB3bTk3MTNfcmVhZGFibGVfcmVnKGRldiwgcmVnKTsKKwl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2RlZmF1bHQgd205NzEzX3JlZ19kZWZhdWx0c1tdID0geworCXsgMHgwMiwgMHg4MDgwIH0sCS8qIFNwZWFrZXIgT3V0cHV0IFZvbHVtZSAqLworCXsgMHgwNCwgMHg4MDgwIH0sCS8qIEhlYWRwaG9uZSBPdXRwdXQgVm9sdW1lICovCisJeyAweDA2LCAweDgwODAgfSwJLyogT3V0My9PVVQ0IFZvbHVtZSAqLworCXsgMHgwOCwgMHhjODgwIH0sCS8qIE1vbm8gVm9sdW1lICovCisJeyAweDBhLCAweGU4MDggfSwJLyogTElORUlOIFZvbHVtZSAqLworCXsgMHgwYywgMHhlODA4IH0sCS8qIERBQyBQR0EgVm9sdW1lICovCisJeyAweDBlLCAweDA4MDggfSwJLyogTUlDIFBHQSBWb2x1bWUgKi8KKwl7IDB4MTAsIDB4MDBkYSB9LAkvKiBNSUMgUm91dGluZyBDb250cm9sICovCisJeyAweDEyLCAweDgwMDAgfSwJLyogUmVjb3JkIFBHQSBWb2x1bWUgKi8KKwl7IDB4MTQsIDB4ZDYwMCB9LAkvKiBSZWNvcmQgUm91dGluZyAqLworCXsgMHgxNiwgMHhhYWEwIH0sCS8qIFBDQkVFUCBWb2x1bWUgKi8KKwl7IDB4MTgsIDB4YWFhMCB9LAkvKiBWeERBQyBWb2x1bWUgKi8KKwl7IDB4MWEsIDB4YWFhMCB9LAkvKiBBVVhEQUMgVm9sdW1lICovCisJeyAweDFjLCAweDAwMDAgfSwJLyogT3V0cHV0IFBHQSBNdXggKi8KKwl7IDB4MWUsIDB4MDAwMCB9LAkvKiBEQUMgM0QgY29udHJvbCAqLworCXsgMHgyMCwgMHgwZjBmIH0sCS8qIERBQyBUb25lIENvbnRyb2wqLworCXsgMHgyMiwgMHgwMDQwIH0sCS8qIE1JQyBJbnB1dCBTZWxlY3QgJiBCaWFzICovCisJeyAweDI0LCAweDAwMDAgfSwJLyogT3V0cHV0IFZvbHVtZSBNYXBwaW5nICYgSmFjayAqLworCXsgMHgyNiwgMHg3ZjAwIH0sCS8qIFBvd2VyZG93biBDdHJsL1N0YXQqLworCXsgMHgyOCwgMHgwNDA1IH0sCS8qIEV4dGVuZGVkIEF1ZGlvIElEICovCisJeyAweDJhLCAweDA0MTAgfSwJLyogRXh0ZW5kZWQgQXVkaW8gU3RhcnQvQ3RybCAqLworCXsgMHgyYywgMHhiYjgwIH0sCS8qIEF1ZGlvIERBQ3MgU2FtcGxlIFJhdGUgKi8KKwl7IDB4MmUsIDB4YmI4MCB9LAkvKiBBVVhEQUMgU2FtcGxlIFJhdGUgKi8KKwl7IDB4MzIsIDB4YmI4MCB9LAkvKiBBdWRpbyBBRENzIFNhbXBsZSBSYXRlICovCisJeyAweDM2LCAweDQ1MjMgfSwJLyogUENNIGNvZGVjIGNvbnRyb2wgKi8KKwl7IDB4M2EsIDB4MjAwMCB9LAkvKiBTUERJRiBjb250cm9sICovCisJeyAweDNjLCAweGZkZmYgfSwJLyogUG93ZXJkb3duIDEgKi8KKwl7IDB4M2UsIDB4ZmZmZiB9LAkvKiBQb3dlcmRvd24gMiAqLworCXsgMHg0MCwgMHgwMDAwIH0sCS8qIEdlbmVyYWwgUHVycG9zZSAqLworCXsgMHg0MiwgMHgwMDAwIH0sCS8qIEZhc3QgUG93ZXItVXAgQ29udHJvbCAqLworCXsgMHg0NCwgMHgwMDgwIH0sCS8qIE1DTEsvUExMIENvbnRyb2wgKi8KKwl7IDB4NDYsIDB4MDAwMCB9LAkvKiBNQ0xLL1BMTCBDb250cm9sICovCisJeyAweDRjLCAweGZmZmUgfSwJLyogR1BJTyBQaW4gQ29uZmlndXJhdGlvbiAqLworCXsgMHg0ZSwgMHhmZmZmIH0sCS8qIEdQSU8gUGluIFBvbGFyaXR5IC8gVHlwZSAqLworCXsgMHg1MCwgMHgwMDAwIH0sCS8qIEdQSU8gUGluIFN0aWNreSAqLworCXsgMHg1MiwgMHgwMDAwIH0sCS8qIEdQSU8gUGluIFdha2UtVXAgKi8KKwkJCQkvKiBHUElPIFBpbiBTdGF0dXMgKi8KKwl7IDB4NTYsIDB4ZmZmZSB9LAkvKiBHUElPIFBpbiBTaGFyaW5nICovCisJeyAweDU4LCAweDQwMDAgfSwJLyogR1BJTyBQdWxsVXAvUHVsbERvd24gKi8KKwl7IDB4NWEsIDB4MDAwMCB9LAkvKiBBZGRpdGlvbmFsIEZ1bmN0aW9ucyAxICovCisJeyAweDVjLCAweDAwMDAgfSwJLyogQWRkaXRpb25hbCBGdW5jdGlvbnMgMiAqLworCXsgMHg2MCwgMHhiMDMyIH0sCS8qIEFMQyBDb250cm9sICovCisJeyAweDYyLCAweDNlMDAgfSwJLyogQUxDIC8gTm9pc2UgR2F0ZSBDb250cm9sICovCisJeyAweDY0LCAweDAwMDAgfSwJLyogQVVYREFDIGlucHV0IGNvbnRyb2wgKi8KKwl7IDB4NzQsIDB4MDAwMCB9LAkvKiBEaWdpdGlzZXIgUmVnIDEgKi8KKwl7IDB4NzYsIDB4MDAwNiB9LAkvKiBEaWdpdGlzZXIgUmVnIDIgKi8KKwl7IDB4NzgsIDB4MDAwMSB9LAkvKiBEaWdpdGlzZXIgUmVnIDMgKi8KKwl7IDB4N2EsIDB4MDAwMCB9LAkvKiBEaWdpdGlzZXIgUmVhZCBCYWNrICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgd205NzEzX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gMTYsCisJLnJlZ19zdHJpZGUgPSAyLAorCS52YWxfYml0cyA9IDE2LAorCS5tYXhfcmVnaXN0ZXIgPSAweDdlLAorCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfUkJUUkVFLAorCisJLnJlZ19kZWZhdWx0cyA9IHdtOTcxM19yZWdfZGVmYXVsdHMsCisJLm51bV9yZWdfZGVmYXVsdHMgPSBBUlJBWV9TSVpFKHdtOTcxM19yZWdfZGVmYXVsdHMpLAorCS52b2xhdGlsZV9yZWcgPSByZWdtYXBfYWM5N19kZWZhdWx0X3ZvbGF0aWxlLAorCS5yZWFkYWJsZV9yZWcgPSB3bTk3MTNfcmVhZGFibGVfcmVnLAorCS53cml0ZWFibGVfcmVnID0gd205NzEzX3dyaXRlYWJsZV9yZWcsCit9OworCiAvKiBQTEwgZGl2aXNvcnMgKi8KIHN0cnVjdCBfcGxsX2RpdiB7CiAJdTMyIGRpdnNlbDoxOwpAQCAtNzkzLDEwICs4MjEsOCBAQAogCS8qIHR1cm4gUExMIG9mZiA/ICovCiAJaWYgKGZyZXFfaW4gPT0gMCkgewogCQkvKiBkaXNhYmxlIFBMTCBwb3dlciBhbmQgc2VsZWN0IGV4dCBzb3VyY2UgKi8KLQkJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSk7Ci0JCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByZWcgfCAweDAwODApOwotCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfTUlEKTsKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIHJlZyB8IDB4MDIwMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCAweDAwODAsIDB4MDA4MCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFDOTdfRVhURU5ERURfTUlELCAweDAyMDAsIDB4MDIwMCk7CiAJCXdtOTcxMy0+cGxsX2luID0gMDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODA2LDcgKzgzMiw3IEBACiAJaWYgKHBsbF9kaXYuayA9PSAwKSB7CiAJCXJlZyA9IChwbGxfZGl2Lm4gPDwgMTIpIHwgKHBsbF9kaXYubGYgPDwgMTEpIHwKIAkJCShwbGxfZGl2LmRpdnNlbCA8PCA5KSB8IChwbGxfZGl2LmRpdmN0bCA8PCA4KTsKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19MSU5FMV9MRVZFTCwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19MSU5FMV9MRVZFTCwgcmVnKTsKIAl9IGVsc2UgewogCQkvKiB3cml0ZSB0aGUgZnJhY3Rpb25hbCBrIHRvIHRoZSByZWcgMHg0NiBwYWdlcyAqLwogCQlyZWcyID0gKHBsbF9kaXYubiA8PCAxMikgfCAocGxsX2Rpdi5sZiA8PCAxMSkgfCAoMSA8PCAxMCkgfApAQCAtODE0LDMzICs4NDAsMzEgQEAKIAogCQkvKiBLIFsyMToyMF0gKi8KIAkJcmVnID0gcmVnMiB8ICgweDUgPDwgNCkgfCAocGxsX2Rpdi5rID4+IDIwKTsKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19MSU5FMV9MRVZFTCwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19MSU5FMV9MRVZFTCwgcmVnKTsKIAogCQkvKiBLIFsxOToxNl0gKi8KIAkJcmVnID0gcmVnMiB8ICgweDQgPDwgNCkgfCAoKHBsbF9kaXYuayA+PiAxNikgJiAweGYpOwotCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0xJTkUxX0xFVkVMLCByZWcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0xJTkUxX0xFVkVMLCByZWcpOwogCiAJCS8qIEsgWzE1OjEyXSAqLwogCQlyZWcgPSByZWcyIHwgKDB4MyA8PCA0KSB8ICgocGxsX2Rpdi5rID4+IDEyKSAmIDB4Zik7Ci0JCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfTElORTFfTEVWRUwsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfTElORTFfTEVWRUwsIHJlZyk7CiAKIAkJLyogSyBbMTE6OF0gKi8KIAkJcmVnID0gcmVnMiB8ICgweDIgPDwgNCkgfCAoKHBsbF9kaXYuayA+PiA4KSAmIDB4Zik7Ci0JCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfTElORTFfTEVWRUwsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfTElORTFfTEVWRUwsIHJlZyk7CiAKIAkJLyogSyBbNzo0XSAqLwogCQlyZWcgPSByZWcyIHwgKDB4MSA8PCA0KSB8ICgocGxsX2Rpdi5rID4+IDQpICYgMHhmKTsKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19MSU5FMV9MRVZFTCwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19MSU5FMV9MRVZFTCwgcmVnKTsKIAogCQlyZWcgPSByZWcyIHwgKDB4MCA8PCA0KSB8IChwbGxfZGl2LmsgJiAweGYpOyAvKiBLIFszOjBdICovCi0JCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfTElORTFfTEVWRUwsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfTElORTFfTEVWRUwsIHJlZyk7CiAJfQogCiAJLyogdHVybiBQTEwgb24gYW5kIHNlbGVjdCBhcyBzb3VyY2UgKi8KLQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfTUlEKTsKLQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgcmVnICYgMHhmZGZmKTsKLQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFKTsKLQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmVnICYgMHhmZjdmKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgMHgwMjAwLCAweDAwMDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCAweDAwODAsIDB4MDAwMCk7CiAJd205NzEzLT5wbGxfaW4gPSBmcmVxX2luOwogCiAJLyogd2FpdCAxMG1zIEFDOTcgbGluayBmcmFtZXMgZm9yIHRoZSBsaW5rIHRvIHN0YWJpbGlzZSAqLwpAQCAtODYzLDEwICs4ODcsMTAgQEAKIAlpbnQgdHJpc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKLQl1MTYgcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0NFTlRFUl9MRkVfTUFTVEVSKSAmIDB4OWZmZjsKIAogCWlmICh0cmlzdGF0ZSkKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19DRU5URVJfTEZFX01BU1RFUiwgcmVnKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUM5N19DRU5URVJfTEZFX01BU1RFUiwKKwkJCQkgICAgMHg2MDAwLCAweDAwMDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NzksMzYgKzkwMywzMCBAQAogCQlpbnQgZGl2X2lkLCBpbnQgZGl2KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7Ci0JdTE2IHJlZzsKIAogCXN3aXRjaCAoZGl2X2lkKSB7CiAJY2FzZSBXTTk3MTNfUENNQ0xLX0RJVjoKLQkJcmVnID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSkgJiAweGYwZmY7Ci0JCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCByZWcgfCBkaXYpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgMHgwZjAwLCBkaXYpOwogCQlicmVhazsKIAljYXNlIFdNOTcxM19DTEtBX01VTFQ6Ci0JCXJlZyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUpICYgMHhmZmZkOwotCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0hBTkRTRVRfUkFURSwgcmVnIHwgZGl2KTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIDB4MDAwMiwgZGl2KTsKIAkJYnJlYWs7CiAJY2FzZSBXTTk3MTNfQ0xLQl9NVUxUOgotCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFKSAmIDB4ZmZmYjsKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIHJlZyB8IGRpdik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCAweDAwMDQsIGRpdik7CiAJCWJyZWFrOwogCWNhc2UgV005NzEzX0hJRklfRElWOgotCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFKSAmIDB4OGZmZjsKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19IQU5EU0VUX1JBVEUsIHJlZyB8IGRpdik7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFDOTdfSEFORFNFVF9SQVRFLCAweDcwMDAsIGRpdik7CiAJCWJyZWFrOwogCWNhc2UgV005NzEzX1BDTUJDTEtfRElWOgotCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfQ0VOVEVSX0xGRV9NQVNURVIpICYgMHhmMWZmOwotCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0NFTlRFUl9MRkVfTUFTVEVSLCByZWcgfCBkaXYpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBQzk3X0NFTlRFUl9MRkVfTUFTVEVSLCAweDBlMDAsIGRpdik7CiAJCWJyZWFrOwogCWNhc2UgV005NzEzX1BDTUNMS19QTExfRElWOgotCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfTElORTFfTEVWRUwpICYgMHhmZjgwOwotCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0xJTkUxX0xFVkVMLCByZWcgfCAweDYwIHwgZGl2KTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUM5N19MSU5FMV9MRVZFTCwKKwkJCQkgICAgMHgwMDdmLCBkaXYgfCAweDYwKTsKIAkJYnJlYWs7CiAJY2FzZSBXTTk3MTNfSElGSV9QTExfRElWOgotCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfTElORTFfTEVWRUwpICYgMHhmZjgwOwotCQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0xJTkUxX0xFVkVMLCByZWcgfCAweDcwIHwgZGl2KTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUM5N19MSU5FMV9MRVZFTCwKKwkJCQkgICAgMHgwMDdmLCBkaXYgfCAweDcwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05MjEsNyArOTM5LDcgQEAKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwotCXUxNiBncGlvID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHKSAmIDB4ZmZjNTsKKwl1MTYgZ3BpbyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUM5N19HUElPX0NGRykgJiAweGZmYzU7CiAJdTE2IHJlZyA9IDB4ODAwMDsKIAogCS8qIGNsb2NrIG1hc3RlcnMgKi8KQEAgLTk3NCw4ICs5OTIsOCBAQAogCQlicmVhazsKIAl9CiAKLQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHLCBncGlvKTsKLQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0NFTlRFUl9MRkVfTUFTVEVSLCByZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19DRkcsIGdwaW8pOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfQ0VOVEVSX0xGRV9NQVNURVIsIHJlZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk4NCwyNCArMTAwMiwyNCBAQAogCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0JdTE2IHJlZyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19DRU5URVJfTEZFX01BU1RFUikgJiAweGZmZjM7CiAKKwkvKiBlbmFibGUgUENNIGludGVyZmFjZSBpbiBtYXN0ZXIgbW9kZSAqLwogCXN3aXRjaCAocGFyYW1zX3dpZHRoKHBhcmFtcykpIHsKIAljYXNlIDE2OgogCQlicmVhazsKIAljYXNlIDIwOgotCQlyZWcgfD0gMHgwMDA0OworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBQzk3X0NFTlRFUl9MRkVfTUFTVEVSLAorCQkJCSAgICAweDAwMGMsIDB4MDAwNCk7CiAJCWJyZWFrOwogCWNhc2UgMjQ6Ci0JCXJlZyB8PSAweDAwMDg7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFDOTdfQ0VOVEVSX0xGRV9NQVNURVIsCisJCQkJICAgIDB4MDAwYywgMHgwMDA4KTsKIAkJYnJlYWs7CiAJY2FzZSAzMjoKLQkJcmVnIHw9IDB4MDAwYzsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUM5N19DRU5URVJfTEZFX01BU1RFUiwKKwkJCQkgICAgMHgwMDBjLCAweDAwMGMpOwogCQlicmVhazsKIAl9Ci0KLQkvKiBlbmFibGUgUENNIGludGVyZmFjZSBpbiBtYXN0ZXIgbW9kZSAqLwotCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfQ0VOVEVSX0xGRV9NQVNURVIsIHJlZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMTEsMTcgKzEwMjksMTUgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IHJlZzsKLQl1MTYgdnJhOwogCi0JdnJhID0gYWM5N19yZWFkKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUyk7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIHZyYSB8IDB4MSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIDB4MDAwMSwgMHgwMDAxKTsKIAogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlyZWcgPSBBQzk3X1BDTV9GUk9OVF9EQUNfUkFURTsKIAllbHNlCiAJCXJlZyA9IEFDOTdfUENNX0xSX0FEQ19SQVRFOwogCi0JcmV0dXJuIGFjOTdfd3JpdGUoY29kZWMsIHJlZywgcnVudGltZS0+cmF0ZSk7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgcnVudGltZS0+cmF0ZSk7CiB9CiAKIHN0YXRpYyBpbnQgYWM5N19hdXhfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTEwMjksMTcgKzEwNDUsMTQgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JdTE2IHZyYSwgeHNsZTsKIAotCXZyYSA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19FWFRFTkRFRF9TVEFUVVMpOwotCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfU1RBVFVTLCB2cmEgfCAweDEpOwotCXhzbGUgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfUENJX1NJRCk7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19QQ0lfU0lELCB4c2xlIHwgMHg4MDAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBQzk3X0VYVEVOREVEX1NUQVRVUywgMHgwMDAxLCAweDAwMDEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFDOTdfUENJX1NJRCwgMHg4MDAwLCAweDgwMDApOwogCiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtICE9IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIGFjOTdfd3JpdGUoY29kZWMsIEFDOTdfUENNX1NVUlJfREFDX1JBVEUsIHJ1bnRpbWUtPnJhdGUpOworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X1BDTV9TVVJSX0RBQ19SQVRFLCBydW50aW1lLT5yYXRlKTsKIH0KIAogI2RlZmluZSBXTTk3MTNfUkFURVMgKFNORFJWX1BDTV9SQVRFXzgwMDAgIHwJXApAQCAtMTEyOCwyNyArMTE0MSwyMyBAQAogc3RhdGljIGludCB3bTk3MTNfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQl1MTYgcmVnOwotCiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgogCQkvKiBlbmFibGUgdGhlcm1hbCBzaHV0ZG93biAqLwotCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfTUlEKSAmIDB4MWJmZjsKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIHJlZyk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFDOTdfRVhURU5ERURfTUlELCAweGU0MDAsIDB4MDAwMCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCS8qIGVuYWJsZSBtYXN0ZXIgYmlhcyBhbmQgdm1pZCAqLwotCQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfTUlEKSAmIDB4M2JmZjsKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIHJlZyk7Ci0JCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfUE9XRVJET1dOLCAweDAwMDApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgMHhjNDAwLCAweDAwMDApOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X1BPV0VSRE9XTiwgMHgwMDAwKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgogCQkvKiBkaXNhYmxlIGV2ZXJ5dGhpbmcgaW5jbHVkaW5nIEFDIGxpbmsgKi8KLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIDB4ZmZmZik7Ci0JCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfTVNUQVRVUywgMHhmZmZmKTsKLQkJYWM5N193cml0ZShjb2RlYywgQUM5N19QT1dFUkRPV04sIDB4ZmZmZik7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfRVhURU5ERURfTUlELCAweGZmZmYpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01TVEFUVVMsIDB4ZmZmZik7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfUE9XRVJET1dOLCAweGZmZmYpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMTU2LDE2ICsxMTY1LDE0IEBACiAKIHN0YXRpYyBpbnQgd205NzEzX3NvY19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQl1MTYgcmVnOwotCiAJLyogRGlzYWJsZSBldmVyeXRoaW5nIGV4Y2VwdCB0b3VjaHBhbmVsIC0gdGhhdCB3aWxsIGJlIGhhbmRsZWQKIAkgKiBieSB0aGUgdG91Y2ggZHJpdmVyIGFuZCBsZWZ0IGRpc2FibGVkIGlmIHRvdWNoIGlzIG5vdCBpbgogCSAqIHVzZS4gKi8KLQlyZWcgPSBhYzk3X3JlYWQoY29kZWMsIEFDOTdfRVhURU5ERURfTUlEKTsKLQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01JRCwgcmVnIHwgMHg3ZmZmKTsKLQlhYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01TVEFUVVMsIDB4ZmZmZik7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19QT1dFUkRPV04sIDB4NmYwMCk7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19QT1dFUkRPV04sIDB4ZmZmZik7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUM5N19FWFRFTkRFRF9NSUQsIDB4N2ZmZiwKKwkJCQkgMHg3ZmZmKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0VYVEVOREVEX01TVEFUVVMsIDB4ZmZmZik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19QT1dFUkRPV04sIDB4NmYwMCk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19QT1dFUkRPV04sIDB4ZmZmZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNzMsOCArMTE4MCw3IEBACiBzdGF0aWMgaW50IHdtOTcxM19zb2NfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgd205NzEzX3ByaXYgKndtOTcxMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCWludCBpLCByZXQ7Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaW50IHJldDsKIAogCXJldCA9IHNuZF9hYzk3X3Jlc2V0KHdtOTcxMy0+YWM5NywgdHJ1ZSwgV005NzEzX1ZFTkRPUl9JRCwKIAkJV005NzEzX1ZFTkRPUl9JRF9NQVNLKTsKQEAgLTExODksMTIgKzExOTUsOCBAQAogCiAJLyogb25seSBzeW5jaHJvbmlzZSB0aGUgY29kZWMgaWYgd2FybSByZXNldCBmYWlsZWQgKi8KIAlpZiAocmV0ID09IDApIHsKLQkJZm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUod205NzEzX3JlZykgPDwgMTsgaSArPSAyKSB7Ci0JCQlpZiAoaSA9PSBBQzk3X1BPV0VSRE9XTiB8fCBpID09IEFDOTdfRVhURU5ERURfTUlEIHx8Ci0JCQkJaSA9PSBBQzk3X0VYVEVOREVEX01TVEFUVVMgfHwgaSA+IDB4NjYpCi0JCQkJY29udGludWU7Ci0JCQlzb2NfYWM5N19vcHMtPndyaXRlKHdtOTcxMy0+YWM5NywgaSwgY2FjaGVbaT4+MV0pOwotCQl9CisJCXJlZ2NhY2hlX21hcmtfZGlydHkoY29kZWMtPmNvbXBvbmVudC5yZWdtYXApOworCQlzbmRfc29jX2NhY2hlX3N5bmMoY29kZWMpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMjAzLDE2ICsxMjA1LDIzIEBACiBzdGF0aWMgaW50IHdtOTcxM19zb2NfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB3bTk3MTNfcHJpdiAqd205NzEzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IHJlZzsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAKIAl3bTk3MTMtPmFjOTcgPSBzbmRfc29jX25ld19hYzk3X2NvZGVjKGNvZGVjLCBXTTk3MTNfVkVORE9SX0lELAogCQlXTTk3MTNfVkVORE9SX0lEX01BU0spOwogCWlmIChJU19FUlIod205NzEzLT5hYzk3KSkKIAkJcmV0dXJuIFBUUl9FUlIod205NzEzLT5hYzk3KTsKIAorCXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfYWM5Nyh3bTk3MTMtPmFjOTcsICZ3bTk3MTNfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihyZWdtYXApKSB7CisJCXNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKHdtOTcxMy0+YWM5Nyk7CisJCXJldHVybiBQVFJfRVJSKHJlZ21hcCk7CisJfQorCisJc25kX3NvY19jb2RlY19pbml0X3JlZ21hcChjb2RlYywgcmVnbWFwKTsKKwogCS8qIHVubXV0ZSB0aGUgYWRjIC0gbW92ZSB0byBrY29udHJvbCAqLwotCXJlZyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19DRCkgJiAweDdmZmY7Ci0JYWM5N193cml0ZShjb2RlYywgQUM5N19DRCwgcmVnKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBQzk3X0NELCAweDdmZmYsIDB4MDAwMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMjEsNiArMTIzMCw3IEBACiB7CiAJc3RydWN0IHdtOTcxM19wcml2ICp3bTk3MTMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAorCXNuZF9zb2NfY29kZWNfZXhpdF9yZWdtYXAoY29kZWMpOwogCXNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKHdtOTcxMy0+YWM5Nyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjMwLDEzICsxMjQwLDcgQEAKIAkucmVtb3ZlID0gCXdtOTcxM19zb2NfcmVtb3ZlLAogCS5zdXNwZW5kID0Jd205NzEzX3NvY19zdXNwZW5kLAogCS5yZXN1bWUgPSAJd205NzEzX3NvY19yZXN1bWUsCi0JLnJlYWQgPSBhYzk3X3JlYWQsCi0JLndyaXRlID0gYWM5N193cml0ZSwKIAkuc2V0X2JpYXNfbGV2ZWwgPSB3bTk3MTNfc2V0X2JpYXNfbGV2ZWwsCi0JLnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTk3MTNfcmVnKSwKLQkucmVnX3dvcmRfc2l6ZSA9IHNpemVvZih1MTYpLAotCS5yZWdfY2FjaGVfc3RlcCA9IDIsCi0JLnJlZ19jYWNoZV9kZWZhdWx0ID0gd205NzEzX3JlZywKIAogCS5jb250cm9scyA9IHdtOTcxM19zbmRfYWM5N19jb250cm9scywKIAkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRSh3bTk3MTNfc25kX2FjOTdfY29udHJvbHMpLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9hZHNwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2Fkc3AuYwppbmRleCAwYmI0MTVhLi4zMzgwNmQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2Fkc3AuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2Fkc3AuYwpAQCAtMjAxLDI3ICsyMDEsMTk0IEBACiAJfQogfQogCi0jZGVmaW5lIFdNX0FEU1BfTlVNX0ZXIDQKKyNkZWZpbmUgV01fQURTUF9GV19NQkNfVlNTICAwCisjZGVmaW5lIFdNX0FEU1BfRldfSElGSSAgICAgMQorI2RlZmluZSBXTV9BRFNQX0ZXX1RYICAgICAgIDIKKyNkZWZpbmUgV01fQURTUF9GV19UWF9TUEsgICAzCisjZGVmaW5lIFdNX0FEU1BfRldfUlggICAgICAgNAorI2RlZmluZSBXTV9BRFNQX0ZXX1JYX0FOQyAgIDUKKyNkZWZpbmUgV01fQURTUF9GV19DVFJMICAgICA2CisjZGVmaW5lIFdNX0FEU1BfRldfQVNSICAgICAgNworI2RlZmluZSBXTV9BRFNQX0ZXX1RSQUNFICAgIDgKKyNkZWZpbmUgV01fQURTUF9GV19TUEtfUFJPVCA5CisjZGVmaW5lIFdNX0FEU1BfRldfTUlTQyAgICAgMTAKIAotI2RlZmluZSBXTV9BRFNQX0ZXX01CQ19WU1MgMAotI2RlZmluZSBXTV9BRFNQX0ZXX1RYICAgICAgMQotI2RlZmluZSBXTV9BRFNQX0ZXX1RYX1NQSyAgMgotI2RlZmluZSBXTV9BRFNQX0ZXX1JYX0FOQyAgMworI2RlZmluZSBXTV9BRFNQX05VTV9GVyAgICAgIDExCiAKIHN0YXRpYyBjb25zdCBjaGFyICp3bV9hZHNwX2Z3X3RleHRbV01fQURTUF9OVU1fRlddID0gewotCVtXTV9BRFNQX0ZXX01CQ19WU1NdID0gIk1CQy9WU1MiLAotCVtXTV9BRFNQX0ZXX1RYXSA9ICAgICAgIlR4IiwKLQlbV01fQURTUF9GV19UWF9TUEtdID0gICJUeCBTcGVha2VyIiwKLQlbV01fQURTUF9GV19SWF9BTkNdID0gICJSeCBBTkMiLAorCVtXTV9BRFNQX0ZXX01CQ19WU1NdID0gICJNQkMvVlNTIiwKKwlbV01fQURTUF9GV19ISUZJXSA9ICAgICAiTWFzdGVySGlGaSIsCisJW1dNX0FEU1BfRldfVFhdID0gICAgICAgIlR4IiwKKwlbV01fQURTUF9GV19UWF9TUEtdID0gICAiVHggU3BlYWtlciIsCisJW1dNX0FEU1BfRldfUlhdID0gICAgICAgIlJ4IiwKKwlbV01fQURTUF9GV19SWF9BTkNdID0gICAiUnggQU5DIiwKKwlbV01fQURTUF9GV19DVFJMXSA9ICAgICAiVm9pY2UgQ3RybCIsCisJW1dNX0FEU1BfRldfQVNSXSA9ICAgICAgIkFTUiBBc3Npc3QiLAorCVtXTV9BRFNQX0ZXX1RSQUNFXSA9ICAgICJEYmcgVHJhY2UiLAorCVtXTV9BRFNQX0ZXX1NQS19QUk9UXSA9ICJQcm90ZWN0aW9uIiwKKwlbV01fQURTUF9GV19NSVNDXSA9ICAgICAiTWlzYyIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHsKK3N0cnVjdCB3bV9hZHNwX3N5c3RlbV9jb25maWdfeG1faGRyIHsKKwlfX2JlMzIgc3lzX2VuYWJsZTsKKwlfX2JlMzIgZndfaWQ7CisJX19iZTMyIGZ3X3JldjsKKwlfX2JlMzIgYm9vdF9zdGF0dXM7CisJX19iZTMyIHdhdGNoZG9nOworCV9fYmUzMiBkbWFfYnVmZmVyX3NpemU7CisJX19iZTMyIHJkbWFbNl07CisJX19iZTMyIHdkbWFbOF07CisJX19iZTMyIGJ1aWxkX2pvYl9uYW1lWzNdOworCV9fYmUzMiBidWlsZF9qb2JfbnVtYmVyOworfTsKKworc3RydWN0IHdtX2Fkc3BfYWxnX3htX3N0cnVjdCB7CisJX19iZTMyIG1hZ2ljOworCV9fYmUzMiBzbW9vdGhpbmc7CisJX19iZTMyIHRocmVzaG9sZDsKKwlfX2JlMzIgaG9zdF9idWZfcHRyOworCV9fYmUzMiBzdGFydF9zZXE7CisJX19iZTMyIGhpZ2hfd2F0ZXJfbWFyazsKKwlfX2JlMzIgbG93X3dhdGVyX21hcms7CisJX19iZTY0IHNtb290aGVkX3Bvd2VyOworfTsKKworc3RydWN0IHdtX2Fkc3BfYnVmZmVyIHsKKwlfX2JlMzIgWF9idWZfYmFzZTsJCS8qIFhNIGJhc2UgYWRkciBvZiBmaXJzdCBYIGFyZWEgKi8KKwlfX2JlMzIgWF9idWZfc2l6ZTsJCS8qIFNpemUgb2YgMXN0IFggYXJlYSBpbiB3b3JkcyAqLworCV9fYmUzMiBYX2J1Zl9iYXNlMjsJCS8qIFhNIGJhc2UgYWRkciBvZiAybmQgWCBhcmVhICovCisJX19iZTMyIFhfYnVmX2JyazsJCS8qIFRvdGFsIFggc2l6ZSBpbiB3b3JkcyAqLworCV9fYmUzMiBZX2J1Zl9iYXNlOwkJLyogWU0gYmFzZSBhZGRyIG9mIFkgYXJlYSAqLworCV9fYmUzMiB3cmFwOwkJCS8qIFRvdGFsIHNpemUgWCBhbmQgWSBpbiB3b3JkcyAqLworCV9fYmUzMiBoaWdoX3dhdGVyX21hcms7CQkvKiBQb2ludCBhdCB3aGljaCBJUlEgaXMgYXNzZXJ0ZWQgKi8KKwlfX2JlMzIgaXJxX2NvdW50OwkJLyogYml0cyAxLTMxIGNvdW50IElSUSBhc3NlcnRpb25zICovCisJX19iZTMyIGlycV9hY2s7CQkJLyogYWNrZWQgSVJRIGNvdW50LCBiaXQgMCBlbmFibGVzIElSUSAqLworCV9fYmUzMiBuZXh0X3dyaXRlX2luZGV4OwkvKiB3b3JkIGluZGV4IG9mIG5leHQgd3JpdGUgKi8KKwlfX2JlMzIgbmV4dF9yZWFkX2luZGV4OwkJLyogd29yZCBpbmRleCBvZiBuZXh0IHJlYWQgKi8KKwlfX2JlMzIgZXJyb3I7CQkJLyogZXJyb3IgaWYgYW55ICovCisJX19iZTMyIG9sZGVzdF9ibG9ja19pbmRleDsJLyogd29yZCBpbmRleCBvZiBvbGRlc3Qgc3Vydml2aW5nICovCisJX19iZTMyIHJlcXVlc3RlZF9yZXdpbmQ7CS8qIGhvdyBtYW55IGJsb2NrcyByZXdpbmQgd2FzIGRvbmUgKi8KKwlfX2JlMzIgcmVzZXJ2ZWRfc3BhY2U7CQkvKiBpbnRlcm5hbCAqLworCV9fYmUzMiBtaW5fZnJlZTsJCS8qIG1pbiBmcmVlIHNwYWNlIHNpbmNlIHN0cmVhbSBzdGFydCAqLworCV9fYmUzMiBibG9ja3Nfd3JpdHRlblsyXTsJLyogdG90YWwgYmxvY2tzIHdyaXR0ZW4gKDY0IGJpdCkgKi8KKwlfX2JlMzIgd29yZHNfd3JpdHRlblsyXTsJLyogdG90YWwgd29yZHMgd3JpdHRlbiAoNjQgYml0KSAqLworfTsKKworc3RydWN0IHdtX2Fkc3BfY29tcHJfYnVmIHsKKwlzdHJ1Y3Qgd21fYWRzcCAqZHNwOworCisJc3RydWN0IHdtX2Fkc3BfYnVmZmVyX3JlZ2lvbiAqcmVnaW9uczsKKwl1MzIgaG9zdF9idWZfcHRyOworCisJdTMyIGVycm9yOworCXUzMiBpcnFfY291bnQ7CisJaW50IHJlYWRfaW5kZXg7CisJaW50IGF2YWlsOworfTsKKworc3RydWN0IHdtX2Fkc3BfY29tcHIgeworCXN0cnVjdCB3bV9hZHNwICpkc3A7CisJc3RydWN0IHdtX2Fkc3BfY29tcHJfYnVmICpidWY7CisKKwlzdHJ1Y3Qgc25kX2NvbXByX3N0cmVhbSAqc3RyZWFtOworCXN0cnVjdCBzbmRfY29tcHJlc3NlZF9idWZmZXIgc2l6ZTsKKworCXUzMiAqcmF3X2J1ZjsKKwl1bnNpZ25lZCBpbnQgY29waWVkX3RvdGFsOworfTsKKworI2RlZmluZSBXTV9BRFNQX0RBVEFfV09SRF9TSVpFICAgICAgICAgMworCisjZGVmaW5lIFdNX0FEU1BfTUlOX0ZSQUdNRU5UUyAgICAgICAgICAxCisjZGVmaW5lIFdNX0FEU1BfTUFYX0ZSQUdNRU5UUyAgICAgICAgICAyNTYKKyNkZWZpbmUgV01fQURTUF9NSU5fRlJBR01FTlRfU0laRSAgICAgICg2NCAqIFdNX0FEU1BfREFUQV9XT1JEX1NJWkUpCisjZGVmaW5lIFdNX0FEU1BfTUFYX0ZSQUdNRU5UX1NJWkUgICAgICAoNDA5NiAqIFdNX0FEU1BfREFUQV9XT1JEX1NJWkUpCisKKyNkZWZpbmUgV01fQURTUF9BTEdfWE1fU1RSVUNUX01BR0lDICAgIDB4NDlhZWM3CisKKyNkZWZpbmUgSE9TVF9CVUZGRVJfRklFTEQoZmllbGQpIFwKKwkob2Zmc2V0b2Yoc3RydWN0IHdtX2Fkc3BfYnVmZmVyLCBmaWVsZCkgLyBzaXplb2YoX19iZTMyKSkKKworI2RlZmluZSBBTEdfWE1fRklFTEQoZmllbGQpIFwKKwkob2Zmc2V0b2Yoc3RydWN0IHdtX2Fkc3BfYWxnX3htX3N0cnVjdCwgZmllbGQpIC8gc2l6ZW9mKF9fYmUzMikpCisKK3N0YXRpYyBpbnQgd21fYWRzcF9idWZmZXJfaW5pdChzdHJ1Y3Qgd21fYWRzcCAqZHNwKTsKK3N0YXRpYyBpbnQgd21fYWRzcF9idWZmZXJfZnJlZShzdHJ1Y3Qgd21fYWRzcCAqZHNwKTsKKworc3RydWN0IHdtX2Fkc3BfYnVmZmVyX3JlZ2lvbiB7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgY3VtdWxhdGl2ZV9zaXplOworCXVuc2lnbmVkIGludCBtZW1fdHlwZTsKKwl1bnNpZ25lZCBpbnQgYmFzZV9hZGRyOworfTsKKworc3RydWN0IHdtX2Fkc3BfYnVmZmVyX3JlZ2lvbl9kZWYgeworCXVuc2lnbmVkIGludCBtZW1fdHlwZTsKKwl1bnNpZ25lZCBpbnQgYmFzZV9vZmZzZXQ7CisJdW5zaWduZWQgaW50IHNpemVfb2Zmc2V0OworfTsKKworc3RhdGljIHN0cnVjdCB3bV9hZHNwX2J1ZmZlcl9yZWdpb25fZGVmIGV6MmNvbnRyb2xfcmVnaW9uc1tdID0geworCXsKKwkJLm1lbV90eXBlID0gV01GV19BRFNQMl9YTSwKKwkJLmJhc2Vfb2Zmc2V0ID0gSE9TVF9CVUZGRVJfRklFTEQoWF9idWZfYmFzZSksCisJCS5zaXplX29mZnNldCA9IEhPU1RfQlVGRkVSX0ZJRUxEKFhfYnVmX3NpemUpLAorCX0sCisJeworCQkubWVtX3R5cGUgPSBXTUZXX0FEU1AyX1hNLAorCQkuYmFzZV9vZmZzZXQgPSBIT1NUX0JVRkZFUl9GSUVMRChYX2J1Zl9iYXNlMiksCisJCS5zaXplX29mZnNldCA9IEhPU1RfQlVGRkVSX0ZJRUxEKFhfYnVmX2JyayksCisJfSwKKwl7CisJCS5tZW1fdHlwZSA9IFdNRldfQURTUDJfWU0sCisJCS5iYXNlX29mZnNldCA9IEhPU1RfQlVGRkVSX0ZJRUxEKFlfYnVmX2Jhc2UpLAorCQkuc2l6ZV9vZmZzZXQgPSBIT1NUX0JVRkZFUl9GSUVMRCh3cmFwKSwKKwl9LAorfTsKKworc3RydWN0IHdtX2Fkc3BfZndfY2FwcyB7CisJdTMyIGlkOworCXN0cnVjdCBzbmRfY29kZWNfZGVzYyBkZXNjOworCWludCBudW1fcmVnaW9uczsKKwlzdHJ1Y3Qgd21fYWRzcF9idWZmZXJfcmVnaW9uX2RlZiAqcmVnaW9uX2RlZnM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHdtX2Fkc3BfZndfY2FwcyBlejJjb250cm9sX2NhcHNbXSA9IHsKKwl7CisJCS5pZCA9IFNORF9BVURJT0NPREVDX0JFU1BPS0UsCisJCS5kZXNjID0geworCQkJLm1heF9jaCA9IDEsCisJCQkuc2FtcGxlX3JhdGVzID0geyAxNjAwMCB9LAorCQkJLm51bV9zYW1wbGVfcmF0ZXMgPSAxLAorCQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJfSwKKwkJLm51bV9yZWdpb25zID0gQVJSQVlfU0laRShlejJjb250cm9sX3JlZ2lvbnMpLAorCQkucmVnaW9uX2RlZnMgPSBlejJjb250cm9sX3JlZ2lvbnMsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgKmZpbGU7CisJaW50IGNvbXByX2RpcmVjdGlvbjsKKwlpbnQgbnVtX2NhcHM7CisJY29uc3Qgc3RydWN0IHdtX2Fkc3BfZndfY2FwcyAqY2FwczsKIH0gd21fYWRzcF9md1tXTV9BRFNQX05VTV9GV10gPSB7Ci0JW1dNX0FEU1BfRldfTUJDX1ZTU10gPSB7IC5maWxlID0gIm1iYy12c3MiIH0sCi0JW1dNX0FEU1BfRldfVFhdID0gICAgICB7IC5maWxlID0gInR4IiB9LAotCVtXTV9BRFNQX0ZXX1RYX1NQS10gPSAgeyAuZmlsZSA9ICJ0eC1zcGsiIH0sCi0JW1dNX0FEU1BfRldfUlhfQU5DXSA9ICB7IC5maWxlID0gInJ4LWFuYyIgfSwKKwlbV01fQURTUF9GV19NQkNfVlNTXSA9ICB7IC5maWxlID0gIm1iYy12c3MiIH0sCisJW1dNX0FEU1BfRldfSElGSV0gPSAgICAgeyAuZmlsZSA9ICJoaWZpIiB9LAorCVtXTV9BRFNQX0ZXX1RYXSA9ICAgICAgIHsgLmZpbGUgPSAidHgiIH0sCisJW1dNX0FEU1BfRldfVFhfU1BLXSA9ICAgeyAuZmlsZSA9ICJ0eC1zcGsiIH0sCisJW1dNX0FEU1BfRldfUlhdID0gICAgICAgeyAuZmlsZSA9ICJyeCIgfSwKKwlbV01fQURTUF9GV19SWF9BTkNdID0gICB7IC5maWxlID0gInJ4LWFuYyIgfSwKKwlbV01fQURTUF9GV19DVFJMXSA9ICAgICB7CisJCS5maWxlID0gImN0cmwiLAorCQkuY29tcHJfZGlyZWN0aW9uID0gU05EX0NPTVBSRVNTX0NBUFRVUkUsCisJCS5udW1fY2FwcyA9IEFSUkFZX1NJWkUoZXoyY29udHJvbF9jYXBzKSwKKwkJLmNhcHMgPSBlejJjb250cm9sX2NhcHMsCisJfSwKKwlbV01fQURTUF9GV19BU1JdID0gICAgICB7IC5maWxlID0gImFzciIgfSwKKwlbV01fQURTUF9GV19UUkFDRV0gPSAgICB7IC5maWxlID0gInRyYWNlIiB9LAorCVtXTV9BRFNQX0ZXX1NQS19QUk9UXSA9IHsgLmZpbGUgPSAic3BrLXByb3QiIH0sCisJW1dNX0FEU1BfRldfTUlTQ10gPSAgICAgeyAuZmlsZSA9ICJtaXNjIiB9LAogfTsKIAogc3RydWN0IHdtX2NvZWZmX2N0bF9vcHMgewpAQCAtMjU0LDMwICs0MjEsMjQgQEAKIHsKIAljaGFyICp0bXAgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzXG4iLCBzKTsKIAotCW11dGV4X2xvY2soJmRzcC0+ZGVidWdmc19sb2NrKTsKIAlrZnJlZShkc3AtPndtZndfZmlsZV9uYW1lKTsKIAlkc3AtPndtZndfZmlsZV9uYW1lID0gdG1wOwotCW11dGV4X3VubG9jaygmZHNwLT5kZWJ1Z2ZzX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCB3bV9hZHNwX2RlYnVnZnNfc2F2ZV9iaW5uYW1lKHN0cnVjdCB3bV9hZHNwICpkc3AsIGNvbnN0IGNoYXIgKnMpCiB7CiAJY2hhciAqdG1wID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlc1xuIiwgcyk7CiAKLQltdXRleF9sb2NrKCZkc3AtPmRlYnVnZnNfbG9jayk7CiAJa2ZyZWUoZHNwLT5iaW5fZmlsZV9uYW1lKTsKIAlkc3AtPmJpbl9maWxlX25hbWUgPSB0bXA7Ci0JbXV0ZXhfdW5sb2NrKCZkc3AtPmRlYnVnZnNfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHdtX2Fkc3BfZGVidWdmc19jbGVhcihzdHJ1Y3Qgd21fYWRzcCAqZHNwKQogewotCW11dGV4X2xvY2soJmRzcC0+ZGVidWdmc19sb2NrKTsKIAlrZnJlZShkc3AtPndtZndfZmlsZV9uYW1lKTsKIAlrZnJlZShkc3AtPmJpbl9maWxlX25hbWUpOwogCWRzcC0+d21md19maWxlX25hbWUgPSBOVUxMOwogCWRzcC0+YmluX2ZpbGVfbmFtZSA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZkc3AtPmRlYnVnZnNfbG9jayk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHdtX2Fkc3BfZGVidWdmc193bWZ3X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0yODcsNyArNDQ4LDcgQEAKIAlzdHJ1Y3Qgd21fYWRzcCAqZHNwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXNzaXplX3QgcmV0OwogCi0JbXV0ZXhfbG9jaygmZHNwLT5kZWJ1Z2ZzX2xvY2spOworCW11dGV4X2xvY2soJmRzcC0+cHdyX2xvY2spOwogCiAJaWYgKCFkc3AtPndtZndfZmlsZV9uYW1lIHx8ICFkc3AtPnJ1bm5pbmcpCiAJCXJldCA9IDA7CkBAIC0yOTYsNyArNDU3LDcgQEAKIAkJCQkJICAgICAgZHNwLT53bWZ3X2ZpbGVfbmFtZSwKIAkJCQkJICAgICAgc3RybGVuKGRzcC0+d21md19maWxlX25hbWUpKTsKIAotCW11dGV4X3VubG9jaygmZHNwLT5kZWJ1Z2ZzX2xvY2spOworCW11dGV4X3VubG9jaygmZHNwLT5wd3JfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzA3LDcgKzQ2OCw3IEBACiAJc3RydWN0IHdtX2Fkc3AgKmRzcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzc2l6ZV90IHJldDsKIAotCW11dGV4X2xvY2soJmRzcC0+ZGVidWdmc19sb2NrKTsKKwltdXRleF9sb2NrKCZkc3AtPnB3cl9sb2NrKTsKIAogCWlmICghZHNwLT5iaW5fZmlsZV9uYW1lIHx8ICFkc3AtPnJ1bm5pbmcpCiAJCXJldCA9IDA7CkBAIC0zMTYsNyArNDc3LDcgQEAKIAkJCQkJICAgICAgZHNwLT5iaW5fZmlsZV9uYW1lLAogCQkJCQkgICAgICBzdHJsZW4oZHNwLT5iaW5fZmlsZV9uYW1lKSk7CiAKLQltdXRleF91bmxvY2soJmRzcC0+ZGVidWdmc19sb2NrKTsKKwltdXRleF91bmxvY2soJmRzcC0+cHdyX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQzNiw2ICs1OTcsNyBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2Nfa2NvbnRyb2xfY29kZWMoa2NvbnRyb2wpOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlzdHJ1Y3Qgd21fYWRzcCAqZHNwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHJldCA9IDA7CiAKIAlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPT0gZHNwW2UtPnNoaWZ0X2xdLmZ3KQogCQlyZXR1cm4gMDsKQEAgLTQ0MywxMiArNjA1LDE2IEBACiAJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID49IFdNX0FEU1BfTlVNX0ZXKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChkc3BbZS0+c2hpZnRfbF0ucnVubmluZykKLQkJcmV0dXJuIC1FQlVTWTsKKwltdXRleF9sb2NrKCZkc3BbZS0+c2hpZnRfbF0ucHdyX2xvY2spOwogCi0JZHNwW2UtPnNoaWZ0X2xdLmZ3ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJaWYgKGRzcFtlLT5zaGlmdF9sXS5ydW5uaW5nIHx8IGRzcFtlLT5zaGlmdF9sXS5jb21wcikKKwkJcmV0ID0gLUVCVVNZOworCWVsc2UKKwkJZHNwW2UtPnNoaWZ0X2xdLmZ3ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmRzcFtlLT5zaGlmdF9sXS5wd3JfbG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtX2Fkc3BfZndfZW51bVtdID0gewpAQCAtNTIzLDEwICs2ODksMTAgQEAKIAkJIGJlMTZfdG9fY3B1KHNjcmF0Y2hbM10pKTsKIH0KIAotc3RhdGljIGludCB3bV9jb2VmZl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorc3RhdGljIGludCB3bV9jb2VmZl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCiAJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdHJ1Y3Qgd21fY29lZmZfY3RsICpjdGwgPSAoc3RydWN0IHdtX2NvZWZmX2N0bCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXN0cnVjdCB3bV9jb2VmZl9jdGwgKmN0bCA9IChzdHJ1Y3Qgd21fY29lZmZfY3RsICopa2N0bC0+cHJpdmF0ZV92YWx1ZTsKIAogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CWVRFUzsKIAl1aW5mby0+Y291bnQgPSBjdGwtPmxlbjsKQEAgLTU3MiwxOSArNzM4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd21fY29lZmZfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorc3RhdGljIGludCB3bV9jb2VmZl9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKIAkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewotCXN0cnVjdCB3bV9jb2VmZl9jdGwgKmN0bCA9IChzdHJ1Y3Qgd21fY29lZmZfY3RsICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJc3RydWN0IHdtX2NvZWZmX2N0bCAqY3RsID0gKHN0cnVjdCB3bV9jb2VmZl9jdGwgKilrY3RsLT5wcml2YXRlX3ZhbHVlOwogCWNoYXIgKnAgPSB1Y29udHJvbC0+dmFsdWUuYnl0ZXMuZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmN0bC0+ZHNwLT5wd3JfbG9jayk7CiAKIAltZW1jcHkoY3RsLT5jYWNoZSwgcCwgY3RsLT5sZW4pOwogCiAJY3RsLT5zZXQgPSAxOwotCWlmICghY3RsLT5lbmFibGVkKQotCQlyZXR1cm4gMDsKKwlpZiAoY3RsLT5lbmFibGVkKQorCQlyZXQgPSB3bV9jb2VmZl93cml0ZV9jb250cm9sKGN0bCwgcCwgY3RsLT5sZW4pOwogCi0JcmV0dXJuIHdtX2NvZWZmX3dyaXRlX2NvbnRyb2woY3RsLCBwLCBjdGwtPmxlbik7CisJbXV0ZXhfdW5sb2NrKCZjdGwtPmRzcC0+cHdyX2xvY2spOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB3bV9jb2VmZl9yZWFkX2NvbnRyb2woc3RydWN0IHdtX2NvZWZmX2N0bCAqY3RsLApAQCAtNjI2LDIyICs3OTcsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bV9jb2VmZl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCitzdGF0aWMgaW50IHdtX2NvZWZmX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAogCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7Ci0Jc3RydWN0IHdtX2NvZWZmX2N0bCAqY3RsID0gKHN0cnVjdCB3bV9jb2VmZl9jdGwgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3Qgd21fY29lZmZfY3RsICpjdGwgPSAoc3RydWN0IHdtX2NvZWZmX2N0bCAqKWtjdGwtPnByaXZhdGVfdmFsdWU7CiAJY2hhciAqcCA9IHVjb250cm9sLT52YWx1ZS5ieXRlcy5kYXRhOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmY3RsLT5kc3AtPnB3cl9sb2NrKTsKIAogCWlmIChjdGwtPmZsYWdzICYgV01GV19DVExfRkxBR19WT0xBVElMRSkgewogCQlpZiAoY3RsLT5lbmFibGVkKQotCQkJcmV0dXJuIHdtX2NvZWZmX3JlYWRfY29udHJvbChjdGwsIHAsIGN0bC0+bGVuKTsKKwkJCXJldCA9IHdtX2NvZWZmX3JlYWRfY29udHJvbChjdGwsIHAsIGN0bC0+bGVuKTsKIAkJZWxzZQotCQkJcmV0dXJuIC1FUEVSTTsKKwkJCXJldCA9IC1FUEVSTTsKKwl9IGVsc2UgeworCQlpZiAoIWN0bC0+ZmxhZ3MgJiYgY3RsLT5lbmFibGVkKQorCQkJcmV0ID0gd21fY29lZmZfcmVhZF9jb250cm9sKGN0bCwgY3RsLT5jYWNoZSwgY3RsLT5sZW4pOworCisJCW1lbWNweShwLCBjdGwtPmNhY2hlLCBjdGwtPmxlbik7CiAJfQogCi0JbWVtY3B5KHAsIGN0bC0+Y2FjaGUsIGN0bC0+bGVuKTsKKwltdXRleF91bmxvY2soJmN0bC0+ZHNwLT5wd3JfbG9jayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdHJ1Y3Qgd21md19jdGxfd29yayB7CkBAIC04MDgsOCArOTg3LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjdGwsICZkc3AtPmN0bF9saXN0LAotCQkJICAgIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0bCwgJmRzcC0+Y3RsX2xpc3QsIGxpc3QpIHsKIAkJaWYgKCFzdHJjbXAoY3RsLT5uYW1lLCBuYW1lKSkgewogCQkJaWYgKCFjdGwtPmVuYWJsZWQpCiAJCQkJY3RsLT5lbmFibGVkID0gMTsKQEAgLTEwODgsNyArMTI2Niw3IEBACiAJCWdvdG8gb3V0X2Z3OwogCX0KIAotCWhlYWRlciA9ICh2b2lkKikmZmlybXdhcmUtPmRhdGFbMF07CisJaGVhZGVyID0gKHZvaWQgKikmZmlybXdhcmUtPmRhdGFbMF07CiAKIAlpZiAobWVtY21wKCZoZWFkZXItPm1hZ2ljWzBdLCAiV01GVyIsIDQpICE9IDApIHsKIAkJYWRzcF9lcnIoZHNwLCAiJXM6IGludmFsaWQgbWFnaWNcbiIsIGZpbGUpOwpAQCAtMTE2OCw3ICsxMzQ2LDcgQEAKIAkJb2Zmc2V0ID0gbGUzMl90b19jcHUocmVnaW9uLT5vZmZzZXQpICYgMHhmZmZmZmY7CiAJCXR5cGUgPSBiZTMyX3RvX2NwdShyZWdpb24tPnR5cGUpICYgMHhmZjsKIAkJbWVtID0gd21fYWRzcF9maW5kX3JlZ2lvbihkc3AsIHR5cGUpOwotCQkKKwogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBXTUZXX05BTUVfVEVYVDoKIAkJCXJlZ2lvbl9uYW1lID0gIkZpcm13YXJlIG5hbWUiOwpAQCAtMTMzMyw2ICsxNTExLDE5IEBACiAJcmV0dXJuIGFsZzsKIH0KIAorc3RhdGljIHN0cnVjdCB3bV9hZHNwX2FsZ19yZWdpb24gKgorCXdtX2Fkc3BfZmluZF9hbGdfcmVnaW9uKHN0cnVjdCB3bV9hZHNwICpkc3AsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgaWQpCit7CisJc3RydWN0IHdtX2Fkc3BfYWxnX3JlZ2lvbiAqYWxnX3JlZ2lvbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxnX3JlZ2lvbiwgJmRzcC0+YWxnX3JlZ2lvbnMsIGxpc3QpIHsKKwkJaWYgKGlkID09IGFsZ19yZWdpb24tPmFsZyAmJiB0eXBlID09IGFsZ19yZWdpb24tPnR5cGUpCisJCQlyZXR1cm4gYWxnX3JlZ2lvbjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHN0cnVjdCB3bV9hZHNwX2FsZ19yZWdpb24gKndtX2Fkc3BfY3JlYXRlX3JlZ2lvbihzdHJ1Y3Qgd21fYWRzcCAqZHNwLAogCQkJCQkJCWludCB0eXBlLCBfX2JlMzIgaWQsCiAJCQkJCQkJX19iZTMyIGJhc2UpCkBAIC0xNjI1LDcgKzE4MTYsNyBAQAogCQlnb3RvIG91dF9mdzsKIAl9CiAKLQloZHIgPSAodm9pZCopJmZpcm13YXJlLT5kYXRhWzBdOworCWhkciA9ICh2b2lkICopJmZpcm13YXJlLT5kYXRhWzBdOwogCWlmIChtZW1jbXAoaGRyLT5tYWdpYywgIldNRFIiLCA0KSAhPSAwKSB7CiAJCWFkc3BfZXJyKGRzcCwgIiVzOiBpbnZhbGlkIG1hZ2ljXG4iLCBmaWxlKTsKIAkJZ290byBvdXRfZnc7CkBAIC0xNjUxLDcgKzE4NDIsNyBAQAogCWJsb2NrcyA9IDA7CiAJd2hpbGUgKHBvcyA8IGZpcm13YXJlLT5zaXplICYmCiAJICAgICAgIHBvcyAtIGZpcm13YXJlLT5zaXplID4gc2l6ZW9mKCpibGspKSB7Ci0JCWJsayA9ICh2b2lkKikoJmZpcm13YXJlLT5kYXRhW3Bvc10pOworCQlibGsgPSAodm9pZCAqKSgmZmlybXdhcmUtPmRhdGFbcG9zXSk7CiAKIAkJdHlwZSA9IGxlMTZfdG9fY3B1KGJsay0+dHlwZSk7CiAJCW9mZnNldCA9IGxlMTZfdG9fY3B1KGJsay0+b2Zmc2V0KTsKQEAgLTE3MDUsMjIgKzE4OTYsMTYgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJcmVnID0gMDsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoYWxnX3JlZ2lvbiwKLQkJCQkJICAgICZkc3AtPmFsZ19yZWdpb25zLCBsaXN0KSB7Ci0JCQkJaWYgKGxlMzJfdG9fY3B1KGJsay0+aWQpID09IGFsZ19yZWdpb24tPmFsZyAmJgotCQkJCSAgICB0eXBlID09IGFsZ19yZWdpb24tPnR5cGUpIHsKLQkJCQkJcmVnID0gYWxnX3JlZ2lvbi0+YmFzZTsKLQkJCQkJcmVnID0gd21fYWRzcF9yZWdpb25fdG9fcmVnKG1lbSwKLQkJCQkJCQkJICAgIHJlZyk7Ci0JCQkJCXJlZyArPSBvZmZzZXQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKHJlZyA9PSAwKQorCQkJYWxnX3JlZ2lvbiA9IHdtX2Fkc3BfZmluZF9hbGdfcmVnaW9uKGRzcCwgdHlwZSwKKwkJCQkJCWxlMzJfdG9fY3B1KGJsay0+aWQpKTsKKwkJCWlmIChhbGdfcmVnaW9uKSB7CisJCQkJcmVnID0gYWxnX3JlZ2lvbi0+YmFzZTsKKwkJCQlyZWcgPSB3bV9hZHNwX3JlZ2lvbl90b19yZWcobWVtLCByZWcpOworCQkJCXJlZyArPSBvZmZzZXQ7CisJCQl9IGVsc2UgewogCQkJCWFkc3BfZXJyKGRzcCwgIk5vICV4IGZvciBhbGdvcml0aG0gJXhcbiIsCiAJCQkJCSB0eXBlLCBsZTMyX3RvX2NwdShibGstPmlkKSk7CisJCQl9CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMTc3OCw5ICsxOTYzLDggQEAKIHsKIAlJTklUX0xJU1RfSEVBRCgmZHNwLT5hbGdfcmVnaW9ucyk7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfRlMKLQltdXRleF9pbml0KCZkc3AtPmRlYnVnZnNfbG9jayk7Ci0jZW5kaWYKKwltdXRleF9pbml0KCZkc3AtPnB3cl9sb2NrKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwod21fYWRzcDFfaW5pdCk7CkBAIC0xNzk1LDEwICsxOTc5LDEyIEBACiAJc3RydWN0IHdtX2Fkc3BfYWxnX3JlZ2lvbiAqYWxnX3JlZ2lvbjsKIAlzdHJ1Y3Qgd21fY29lZmZfY3RsICpjdGw7CiAJaW50IHJldDsKLQlpbnQgdmFsOworCXVuc2lnbmVkIGludCB2YWw7CiAKIAlkc3AtPmNhcmQgPSBjb2RlYy0+Y29tcG9uZW50LmNhcmQ7CiAKKwltdXRleF9sb2NrKCZkc3AtPnB3cl9sb2NrKTsKKwogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzcC0+cmVnbWFwLCBkc3AtPmJhc2UgKyBBRFNQMV9DT05UUk9MXzMwLApAQCAtMTgwOCwxMiArMTk5NCwxMiBAQAogCQkgKiBGb3Igc2ltcGxpY2l0eSBzZXQgdGhlIERTUCBjbG9jayByYXRlIHRvIGJlIHRoZQogCQkgKiBTWVNDTEsgcmF0ZSByYXRoZXIgdGhhbiBtYWtpbmcgaXQgY29uZmlndXJhYmxlLgogCQkgKi8KLQkJaWYoZHNwLT5zeXNjbGtfcmVnKSB7CisJCWlmIChkc3AtPnN5c2Nsa19yZWcpIHsKIAkJCXJldCA9IHJlZ21hcF9yZWFkKGRzcC0+cmVnbWFwLCBkc3AtPnN5c2Nsa19yZWcsICZ2YWwpOwogCQkJaWYgKHJldCAhPSAwKSB7CiAJCQkJYWRzcF9lcnIoZHNwLCAiRmFpbGVkIHRvIHJlYWQgU1lTQ0xLIHN0YXRlOiAlZFxuIiwKIAkJCQlyZXQpOwotCQkJCXJldHVybiByZXQ7CisJCQkJZ290byBlcnJfbXV0ZXg7CiAJCQl9CiAKIAkJCXZhbCA9ICh2YWwgJiBkc3AtPnN5c2Nsa19tYXNrKQpAQCAtMTgyNSwzMSArMjAxMSwzMSBAQAogCQkJaWYgKHJldCAhPSAwKSB7CiAJCQkJYWRzcF9lcnIoZHNwLCAiRmFpbGVkIHRvIHNldCBjbG9jayByYXRlOiAlZFxuIiwKIAkJCQkJIHJldCk7Ci0JCQkJcmV0dXJuIHJldDsKKwkJCQlnb3RvIGVycl9tdXRleDsKIAkJCX0KIAkJfQogCiAJCXJldCA9IHdtX2Fkc3BfbG9hZChkc3ApOwogCQlpZiAocmV0ICE9IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2VuYTsKIAogCQlyZXQgPSB3bV9hZHNwMV9zZXR1cF9hbGdzKGRzcCk7CiAJCWlmIChyZXQgIT0gMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZW5hOwogCiAJCXJldCA9IHdtX2Fkc3BfbG9hZF9jb2VmZihkc3ApOwogCQlpZiAocmV0ICE9IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2VuYTsKIAogCQkvKiBJbml0aWFsaXplIGNhY2hlcyBmb3IgZW5hYmxlZCBhbmQgdW5zZXQgY29udHJvbHMgKi8KIAkJcmV0ID0gd21fY29lZmZfaW5pdF9jb250cm9sX2NhY2hlcyhkc3ApOwogCQlpZiAocmV0ICE9IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2VuYTsKIAogCQkvKiBTeW5jIHNldCBjb250cm9scyAqLwogCQlyZXQgPSB3bV9jb2VmZl9zeW5jX2NvbnRyb2xzKGRzcCk7CiAJCWlmIChyZXQgIT0gMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZW5hOwogCiAJCS8qIFN0YXJ0IHRoZSBjb3JlIHJ1bm5pbmcgKi8KIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzcC0+cmVnbWFwLCBkc3AtPmJhc2UgKyBBRFNQMV9DT05UUk9MXzMwLApAQCAtMTg4NCwxMSArMjA3MCwxNiBAQAogCQlicmVhazsKIAl9CiAKKwltdXRleF91bmxvY2soJmRzcC0+cHdyX2xvY2spOworCiAJcmV0dXJuIDA7CiAKLWVycjoKK2Vycl9lbmE6CiAJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzcC0+cmVnbWFwLCBkc3AtPmJhc2UgKyBBRFNQMV9DT05UUk9MXzMwLAogCQkJICAgQURTUDFfU1lTX0VOQSwgMCk7CitlcnJfbXV0ZXg6CisJbXV0ZXhfdW5sb2NrKCZkc3AtPnB3cl9sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh3bV9hZHNwMV9ldmVudCk7CkBAIC0xOTM0LDYgKzIxMjUsOCBAQAogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IHZhbDsKIAorCW11dGV4X2xvY2soJmRzcC0+cHdyX2xvY2spOworCiAJLyoKIAkgKiBGb3Igc2ltcGxpY2l0eSBzZXQgdGhlIERTUCBjbG9jayByYXRlIHRvIGJlIHRoZQogCSAqIFNZU0NMSyByYXRlIHJhdGhlciB0aGFuIG1ha2luZyBpdCBjb25maWd1cmFibGUuCkBAIC0xOTQxLDcgKzIxMzQsNyBAQAogCXJldCA9IHJlZ21hcF9yZWFkKGRzcC0+cmVnbWFwLCBBUklaT05BX1NZU1RFTV9DTE9DS18xLCAmdmFsKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJYWRzcF9lcnIoZHNwLCAiRmFpbGVkIHRvIHJlYWQgU1lTQ0xLIHN0YXRlOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuOworCQlnb3RvIGVycl9tdXRleDsKIAl9CiAJdmFsID0gKHZhbCAmIEFSSVpPTkFfU1lTQ0xLX0ZSRVFfTUFTSykKIAkJPj4gQVJJWk9OQV9TWVNDTEtfRlJFUV9TSElGVDsKQEAgLTE5NTEsNDIgKzIxNDQsNDYgQEAKIAkJCQkgICAgICAgQURTUDJfQ0xLX1NFTF9NQVNLLCB2YWwpOwogCWlmIChyZXQgIT0gMCkgewogCQlhZHNwX2Vycihkc3AsICJGYWlsZWQgdG8gc2V0IGNsb2NrIHJhdGU6ICVkXG4iLCByZXQpOwotCQlyZXR1cm47CisJCWdvdG8gZXJyX211dGV4OwogCX0KIAogCXJldCA9IHdtX2Fkc3AyX2VuYShkc3ApOwogCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuOworCQlnb3RvIGVycl9tdXRleDsKIAogCXJldCA9IHdtX2Fkc3BfbG9hZChkc3ApOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX2VuYTsKIAogCXJldCA9IHdtX2Fkc3AyX3NldHVwX2FsZ3MoZHNwKTsKIAlpZiAocmV0ICE9IDApCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9lbmE7CiAKIAlyZXQgPSB3bV9hZHNwX2xvYWRfY29lZmYoZHNwKTsKIAlpZiAocmV0ICE9IDApCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9lbmE7CiAKIAkvKiBJbml0aWFsaXplIGNhY2hlcyBmb3IgZW5hYmxlZCBhbmQgdW5zZXQgY29udHJvbHMgKi8KIAlyZXQgPSB3bV9jb2VmZl9pbml0X2NvbnRyb2xfY2FjaGVzKGRzcCk7CiAJaWYgKHJldCAhPSAwKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfZW5hOwogCiAJLyogU3luYyBzZXQgY29udHJvbHMgKi8KIAlyZXQgPSB3bV9jb2VmZl9zeW5jX2NvbnRyb2xzKGRzcCk7CiAJaWYgKHJldCAhPSAwKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfZW5hOwogCiAJZHNwLT5ydW5uaW5nID0gdHJ1ZTsKIAorCW11dGV4X3VubG9jaygmZHNwLT5wd3JfbG9jayk7CisKIAlyZXR1cm47CiAKLWVycjoKK2Vycl9lbmE6CiAJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzcC0+cmVnbWFwLCBkc3AtPmJhc2UgKyBBRFNQMl9DT05UUk9MLAogCQkJICAgQURTUDJfU1lTX0VOQSB8IEFEU1AyX0NPUkVfRU5BIHwgQURTUDJfU1RBUlQsIDApOworZXJyX211dGV4OgorCW11dGV4X3VubG9jaygmZHNwLT5wd3JfbG9jayk7CiB9CiAKIGludCB3bV9hZHNwMl9lYXJseV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKQEAgLTIwMzMsMTIgKzIyMzAsMTggQEAKIAkJCQkJIEFEU1AyX0NPUkVfRU5BIHwgQURTUDJfU1RBUlQpOwogCQlpZiAocmV0ICE9IDApCiAJCQlnb3RvIGVycjsKKworCQlpZiAod21fYWRzcF9md1tkc3AtPmZ3XS5udW1fY2FwcyAhPSAwKQorCQkJcmV0ID0gd21fYWRzcF9idWZmZXJfaW5pdChkc3ApOworCiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKIAkJLyogTG9nIGZpcm13YXJlIHN0YXRlLCBpdCBjYW4gYmUgdXNlZnVsIGZvciBhbmFseXNpcyAqLwogCQl3bV9hZHNwMl9zaG93X2Z3X3N0YXR1cyhkc3ApOwogCisJCW11dGV4X2xvY2soJmRzcC0+cHdyX2xvY2spOworCiAJCXdtX2Fkc3BfZGVidWdmc19jbGVhcihkc3ApOwogCiAJCWRzcC0+ZndfaWQgPSAwOwpAQCAtMjA2NSw2ICsyMjY4LDExIEBACiAJCQlrZnJlZShhbGdfcmVnaW9uKTsKIAkJfQogCisJCWlmICh3bV9hZHNwX2Z3W2RzcC0+ZnddLm51bV9jYXBzICE9IDApCisJCQl3bV9hZHNwX2J1ZmZlcl9mcmVlKGRzcCk7CisKKwkJbXV0ZXhfdW5sb2NrKCZkc3AtPnB3cl9sb2NrKTsKKwogCQlhZHNwX2RiZyhkc3AsICJTaHV0ZG93biBjb21wbGV0ZVxuIik7CiAJCWJyZWFrOwogCkBAIC0yMTE3LDExICsyMzI1LDcyNCBAQAogCUlOSVRfTElTVF9IRUFEKCZkc3AtPmN0bF9saXN0KTsKIAlJTklUX1dPUksoJmRzcC0+Ym9vdF93b3JrLCB3bV9hZHNwMl9ib290X3dvcmspOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0JbXV0ZXhfaW5pdCgmZHNwLT5kZWJ1Z2ZzX2xvY2spOwotI2VuZGlmCisJbXV0ZXhfaW5pdCgmZHNwLT5wd3JfbG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdtX2Fkc3AyX2luaXQpOwogCitpbnQgd21fYWRzcF9jb21wcl9vcGVuKHN0cnVjdCB3bV9hZHNwICpkc3AsIHN0cnVjdCBzbmRfY29tcHJfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IHdtX2Fkc3BfY29tcHIgKmNvbXByOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZHNwLT5wd3JfbG9jayk7CisKKwlpZiAod21fYWRzcF9md1tkc3AtPmZ3XS5udW1fY2FwcyA9PSAwKSB7CisJCWFkc3BfZXJyKGRzcCwgIkZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3NlZCBBUElcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWlmICh3bV9hZHNwX2Z3W2RzcC0+ZnddLmNvbXByX2RpcmVjdGlvbiAhPSBzdHJlYW0tPmRpcmVjdGlvbikgeworCQlhZHNwX2Vycihkc3AsICJGaXJtd2FyZSBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbSBkaXJlY3Rpb25cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZHNwLT5jb21wcikgeworCQkvKiBJdCBpcyBleHBlY3QgdGhpcyBsaW1pdGF0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgKi8KKwkJYWRzcF9lcnIoZHNwLCAiT25seSBhIHNpbmdsZSBzdHJlYW0gc3VwcG9ydGVkIHBlciBEU1BcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWNvbXByID0ga3phbGxvYyhzaXplb2YoKmNvbXByKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb21wcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljb21wci0+ZHNwID0gZHNwOworCWNvbXByLT5zdHJlYW0gPSBzdHJlYW07CisKKwlkc3AtPmNvbXByID0gY29tcHI7CisKKwlzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGNvbXByOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkc3AtPnB3cl9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bV9hZHNwX2NvbXByX29wZW4pOworCitpbnQgd21fYWRzcF9jb21wcl9mcmVlKHN0cnVjdCBzbmRfY29tcHJfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IHdtX2Fkc3BfY29tcHIgKmNvbXByID0gc3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtX2Fkc3AgKmRzcCA9IGNvbXByLT5kc3A7CisKKwltdXRleF9sb2NrKCZkc3AtPnB3cl9sb2NrKTsKKworCWRzcC0+Y29tcHIgPSBOVUxMOworCisJa2ZyZWUoY29tcHItPnJhd19idWYpOworCWtmcmVlKGNvbXByKTsKKworCW11dGV4X3VubG9jaygmZHNwLT5wd3JfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtX2Fkc3BfY29tcHJfZnJlZSk7CisKK3N0YXRpYyBpbnQgd21fYWRzcF9jb21wcl9jaGVja19wYXJhbXMoc3RydWN0IHNuZF9jb21wcl9zdHJlYW0gKnN0cmVhbSwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX2NvbXByX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCB3bV9hZHNwX2NvbXByICpjb21wciA9IHN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB3bV9hZHNwICpkc3AgPSBjb21wci0+ZHNwOworCWNvbnN0IHN0cnVjdCB3bV9hZHNwX2Z3X2NhcHMgKmNhcHM7CisJY29uc3Qgc3RydWN0IHNuZF9jb2RlY19kZXNjICpkZXNjOworCWludCBpLCBqOworCisJaWYgKHBhcmFtcy0+YnVmZmVyLmZyYWdtZW50X3NpemUgPCBXTV9BRFNQX01JTl9GUkFHTUVOVF9TSVpFIHx8CisJICAgIHBhcmFtcy0+YnVmZmVyLmZyYWdtZW50X3NpemUgPiBXTV9BRFNQX01BWF9GUkFHTUVOVF9TSVpFIHx8CisJICAgIHBhcmFtcy0+YnVmZmVyLmZyYWdtZW50cyA8IFdNX0FEU1BfTUlOX0ZSQUdNRU5UUyB8fAorCSAgICBwYXJhbXMtPmJ1ZmZlci5mcmFnbWVudHMgPiBXTV9BRFNQX01BWF9GUkFHTUVOVFMgfHwKKwkgICAgcGFyYW1zLT5idWZmZXIuZnJhZ21lbnRfc2l6ZSAlIFdNX0FEU1BfREFUQV9XT1JEX1NJWkUpIHsKKwkJYWRzcF9lcnIoZHNwLCAiSW52YWxpZCBidWZmZXIgZnJhZ3NpemU9JWQgZnJhZ21lbnRzPSVkXG4iLAorCQkJIHBhcmFtcy0+YnVmZmVyLmZyYWdtZW50X3NpemUsCisJCQkgcGFyYW1zLT5idWZmZXIuZnJhZ21lbnRzKTsKKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgd21fYWRzcF9md1tkc3AtPmZ3XS5udW1fY2FwczsgaSsrKSB7CisJCWNhcHMgPSAmd21fYWRzcF9md1tkc3AtPmZ3XS5jYXBzW2ldOworCQlkZXNjID0gJmNhcHMtPmRlc2M7CisKKwkJaWYgKGNhcHMtPmlkICE9IHBhcmFtcy0+Y29kZWMuaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RyZWFtLT5kaXJlY3Rpb24gPT0gU05EX0NPTVBSRVNTX1BMQVlCQUNLKSB7CisJCQlpZiAoZGVzYy0+bWF4X2NoIDwgcGFyYW1zLT5jb2RlYy5jaF9vdXQpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAoZGVzYy0+bWF4X2NoIDwgcGFyYW1zLT5jb2RlYy5jaF9pbikKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghKGRlc2MtPmZvcm1hdHMgJiAoMSA8PCBwYXJhbXMtPmNvZGVjLmZvcm1hdCkpKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IGRlc2MtPm51bV9zYW1wbGVfcmF0ZXM7ICsraikKKwkJCWlmIChkZXNjLT5zYW1wbGVfcmF0ZXNbal0gPT0gcGFyYW1zLT5jb2RlYy5zYW1wbGVfcmF0ZSkKKwkJCQlyZXR1cm4gMDsKKwl9CisKKwlhZHNwX2Vycihkc3AsICJJbnZhbGlkIHBhcmFtcyBpZD0ldSBjaD0ldSwldSByYXRlPSV1IGZtdD0ldVxuIiwKKwkJIHBhcmFtcy0+Y29kZWMuaWQsIHBhcmFtcy0+Y29kZWMuY2hfaW4sIHBhcmFtcy0+Y29kZWMuY2hfb3V0LAorCQkgcGFyYW1zLT5jb2RlYy5zYW1wbGVfcmF0ZSwgcGFyYW1zLT5jb2RlYy5mb3JtYXQpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB3bV9hZHNwX2NvbXByX2ZyYWdfd29yZHMoc3RydWN0IHdtX2Fkc3BfY29tcHIgKmNvbXByKQoreworCXJldHVybiBjb21wci0+c2l6ZS5mcmFnbWVudF9zaXplIC8gV01fQURTUF9EQVRBX1dPUkRfU0laRTsKK30KKworaW50IHdtX2Fkc3BfY29tcHJfc2V0X3BhcmFtcyhzdHJ1Y3Qgc25kX2NvbXByX3N0cmVhbSAqc3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX2NvbXByX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCB3bV9hZHNwX2NvbXByICpjb21wciA9IHN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBzaXplOworCWludCByZXQ7CisKKwlyZXQgPSB3bV9hZHNwX2NvbXByX2NoZWNrX3BhcmFtcyhzdHJlYW0sIHBhcmFtcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWNvbXByLT5zaXplID0gcGFyYW1zLT5idWZmZXI7CisKKwlhZHNwX2RiZyhjb21wci0+ZHNwLCAiZnJhZ21lbnRfc2l6ZT0lZCBmcmFnbWVudHM9JWRcbiIsCisJCSBjb21wci0+c2l6ZS5mcmFnbWVudF9zaXplLCBjb21wci0+c2l6ZS5mcmFnbWVudHMpOworCisJc2l6ZSA9IHdtX2Fkc3BfY29tcHJfZnJhZ193b3Jkcyhjb21wcikgKiBzaXplb2YoKmNvbXByLT5yYXdfYnVmKTsKKwljb21wci0+cmF3X2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0RNQSB8IEdGUF9LRVJORUwpOworCWlmICghY29tcHItPnJhd19idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bV9hZHNwX2NvbXByX3NldF9wYXJhbXMpOworCitpbnQgd21fYWRzcF9jb21wcl9nZXRfY2FwcyhzdHJ1Y3Qgc25kX2NvbXByX3N0cmVhbSAqc3RyZWFtLAorCQkJICAgc3RydWN0IHNuZF9jb21wcl9jYXBzICpjYXBzKQoreworCXN0cnVjdCB3bV9hZHNwX2NvbXByICpjb21wciA9IHN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCWludCBmdyA9IGNvbXByLT5kc3AtPmZ3OworCWludCBpOworCisJaWYgKHdtX2Fkc3BfZndbZnddLmNhcHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IHdtX2Fkc3BfZndbZnddLm51bV9jYXBzOyBpKyspCisJCQljYXBzLT5jb2RlY3NbaV0gPSB3bV9hZHNwX2Z3W2Z3XS5jYXBzW2ldLmlkOworCisJCWNhcHMtPm51bV9jb2RlY3MgPSBpOworCQljYXBzLT5kaXJlY3Rpb24gPSB3bV9hZHNwX2Z3W2Z3XS5jb21wcl9kaXJlY3Rpb247CisKKwkJY2Fwcy0+bWluX2ZyYWdtZW50X3NpemUgPSBXTV9BRFNQX01JTl9GUkFHTUVOVF9TSVpFOworCQljYXBzLT5tYXhfZnJhZ21lbnRfc2l6ZSA9IFdNX0FEU1BfTUFYX0ZSQUdNRU5UX1NJWkU7CisJCWNhcHMtPm1pbl9mcmFnbWVudHMgPSBXTV9BRFNQX01JTl9GUkFHTUVOVFM7CisJCWNhcHMtPm1heF9mcmFnbWVudHMgPSBXTV9BRFNQX01BWF9GUkFHTUVOVFM7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bV9hZHNwX2NvbXByX2dldF9jYXBzKTsKKworc3RhdGljIGludCB3bV9hZHNwX3JlYWRfZGF0YV9ibG9jayhzdHJ1Y3Qgd21fYWRzcCAqZHNwLCBpbnQgbWVtX3R5cGUsCisJCQkJICAgdW5zaWduZWQgaW50IG1lbV9hZGRyLAorCQkJCSAgIHVuc2lnbmVkIGludCBudW1fd29yZHMsIHUzMiAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd21fYWRzcF9yZWdpb24gY29uc3QgKm1lbSA9IHdtX2Fkc3BfZmluZF9yZWdpb24oZHNwLCBtZW1fdHlwZSk7CisJdW5zaWduZWQgaW50IGksIHJlZzsKKwlpbnQgcmV0OworCisJaWYgKCFtZW0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnID0gd21fYWRzcF9yZWdpb25fdG9fcmVnKG1lbSwgbWVtX2FkZHIpOworCisJcmV0ID0gcmVnbWFwX3Jhd19yZWFkKGRzcC0+cmVnbWFwLCByZWcsIGRhdGEsCisJCQkgICAgICBzaXplb2YoKmRhdGEpICogbnVtX3dvcmRzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fd29yZHM7ICsraSkKKwkJZGF0YVtpXSA9IGJlMzJfdG9fY3B1KGRhdGFbaV0pICYgMHgwMGZmZmZmZnU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgd21fYWRzcF9yZWFkX2RhdGFfd29yZChzdHJ1Y3Qgd21fYWRzcCAqZHNwLCBpbnQgbWVtX3R5cGUsCisJCQkJCSB1bnNpZ25lZCBpbnQgbWVtX2FkZHIsIHUzMiAqZGF0YSkKK3sKKwlyZXR1cm4gd21fYWRzcF9yZWFkX2RhdGFfYmxvY2soZHNwLCBtZW1fdHlwZSwgbWVtX2FkZHIsIDEsIGRhdGEpOworfQorCitzdGF0aWMgaW50IHdtX2Fkc3Bfd3JpdGVfZGF0YV93b3JkKHN0cnVjdCB3bV9hZHNwICpkc3AsIGludCBtZW1fdHlwZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbWVtX2FkZHIsIHUzMiBkYXRhKQoreworCXN0cnVjdCB3bV9hZHNwX3JlZ2lvbiBjb25zdCAqbWVtID0gd21fYWRzcF9maW5kX3JlZ2lvbihkc3AsIG1lbV90eXBlKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJaWYgKCFtZW0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnID0gd21fYWRzcF9yZWdpb25fdG9fcmVnKG1lbSwgbWVtX2FkZHIpOworCisJZGF0YSA9IGNwdV90b19iZTMyKGRhdGEgJiAweDAwZmZmZmZmdSk7CisKKwlyZXR1cm4gcmVnbWFwX3Jhd193cml0ZShkc3AtPnJlZ21hcCwgcmVnLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgd21fYWRzcF9idWZmZXJfcmVhZChzdHJ1Y3Qgd21fYWRzcF9jb21wcl9idWYgKmJ1ZiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmllbGRfb2Zmc2V0LCB1MzIgKmRhdGEpCit7CisJcmV0dXJuIHdtX2Fkc3BfcmVhZF9kYXRhX3dvcmQoYnVmLT5kc3AsIFdNRldfQURTUDJfWE0sCisJCQkJICAgICAgYnVmLT5ob3N0X2J1Zl9wdHIgKyBmaWVsZF9vZmZzZXQsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludCB3bV9hZHNwX2J1ZmZlcl93cml0ZShzdHJ1Y3Qgd21fYWRzcF9jb21wcl9idWYgKmJ1ZiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGZpZWxkX29mZnNldCwgdTMyIGRhdGEpCit7CisJcmV0dXJuIHdtX2Fkc3Bfd3JpdGVfZGF0YV93b3JkKGJ1Zi0+ZHNwLCBXTUZXX0FEU1AyX1hNLAorCQkJCSAgICAgICBidWYtPmhvc3RfYnVmX3B0ciArIGZpZWxkX29mZnNldCwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgd21fYWRzcF9idWZmZXJfbG9jYXRlKHN0cnVjdCB3bV9hZHNwX2NvbXByX2J1ZiAqYnVmKQoreworCXN0cnVjdCB3bV9hZHNwX2FsZ19yZWdpb24gKmFsZ19yZWdpb247CisJc3RydWN0IHdtX2Fkc3AgKmRzcCA9IGJ1Zi0+ZHNwOworCXUzMiB4bWFsZywgYWRkciwgbWFnaWM7CisJaW50IGksIHJldDsKKworCWFsZ19yZWdpb24gPSB3bV9hZHNwX2ZpbmRfYWxnX3JlZ2lvbihkc3AsIFdNRldfQURTUDJfWE0sIGRzcC0+ZndfaWQpOworCXhtYWxnID0gc2l6ZW9mKHN0cnVjdCB3bV9hZHNwX3N5c3RlbV9jb25maWdfeG1faGRyKSAvIHNpemVvZihfX2JlMzIpOworCisJYWRkciA9IGFsZ19yZWdpb24tPmJhc2UgKyB4bWFsZyArIEFMR19YTV9GSUVMRChtYWdpYyk7CisJcmV0ID0gd21fYWRzcF9yZWFkX2RhdGFfd29yZChkc3AsIFdNRldfQURTUDJfWE0sIGFkZHIsICZtYWdpYyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAobWFnaWMgIT0gV01fQURTUF9BTEdfWE1fU1RSVUNUX01BR0lDKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFkZHIgPSBhbGdfcmVnaW9uLT5iYXNlICsgeG1hbGcgKyBBTEdfWE1fRklFTEQoaG9zdF9idWZfcHRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgKytpKSB7CisJCXJldCA9IHdtX2Fkc3BfcmVhZF9kYXRhX3dvcmQoZHNwLCBXTUZXX0FEU1AyX1hNLCBhZGRyLAorCQkJCQkgICAgICZidWYtPmhvc3RfYnVmX3B0cik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoYnVmLT5ob3N0X2J1Zl9wdHIpCisJCQlicmVhazsKKworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJfQorCisJaWYgKCFidWYtPmhvc3RfYnVmX3B0cikKKwkJcmV0dXJuIC1FSU87CisKKwlhZHNwX2RiZyhkc3AsICJob3N0X2J1Zl9wdHI9JXhcbiIsIGJ1Zi0+aG9zdF9idWZfcHRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtX2Fkc3BfYnVmZmVyX3BvcHVsYXRlKHN0cnVjdCB3bV9hZHNwX2NvbXByX2J1ZiAqYnVmKQoreworCWNvbnN0IHN0cnVjdCB3bV9hZHNwX2Z3X2NhcHMgKmNhcHMgPSB3bV9hZHNwX2Z3W2J1Zi0+ZHNwLT5md10uY2FwczsKKwlzdHJ1Y3Qgd21fYWRzcF9idWZmZXJfcmVnaW9uICpyZWdpb247CisJdTMyIG9mZnNldCA9IDA7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjYXBzLT5udW1fcmVnaW9uczsgKytpKSB7CisJCXJlZ2lvbiA9ICZidWYtPnJlZ2lvbnNbaV07CisKKwkJcmVnaW9uLT5vZmZzZXQgPSBvZmZzZXQ7CisJCXJlZ2lvbi0+bWVtX3R5cGUgPSBjYXBzLT5yZWdpb25fZGVmc1tpXS5tZW1fdHlwZTsKKworCQlyZXQgPSB3bV9hZHNwX2J1ZmZlcl9yZWFkKGJ1ZiwgY2Fwcy0+cmVnaW9uX2RlZnNbaV0uYmFzZV9vZmZzZXQsCisJCQkJCSAgJnJlZ2lvbi0+YmFzZV9hZGRyKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHdtX2Fkc3BfYnVmZmVyX3JlYWQoYnVmLCBjYXBzLT5yZWdpb25fZGVmc1tpXS5zaXplX29mZnNldCwKKwkJCQkJICAmb2Zmc2V0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJlZ2lvbi0+Y3VtdWxhdGl2ZV9zaXplID0gb2Zmc2V0OworCisJCWFkc3BfZGJnKGJ1Zi0+ZHNwLAorCQkJICJyZWdpb249JWQgdHlwZT0lZCBiYXNlPSUwNHggb2ZmPSUwNHggc2l6ZT0lMDR4XG4iLAorCQkJIGksIHJlZ2lvbi0+bWVtX3R5cGUsIHJlZ2lvbi0+YmFzZV9hZGRyLAorCQkJIHJlZ2lvbi0+b2Zmc2V0LCByZWdpb24tPmN1bXVsYXRpdmVfc2l6ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd21fYWRzcF9idWZmZXJfaW5pdChzdHJ1Y3Qgd21fYWRzcCAqZHNwKQoreworCXN0cnVjdCB3bV9hZHNwX2NvbXByX2J1ZiAqYnVmOworCWludCByZXQ7CisKKwlidWYgPSBremFsbG9jKHNpemVvZigqYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJYnVmLT5kc3AgPSBkc3A7CisJYnVmLT5yZWFkX2luZGV4ID0gLTE7CisJYnVmLT5pcnFfY291bnQgPSAweEZGRkZGRkZGOworCisJcmV0ID0gd21fYWRzcF9idWZmZXJfbG9jYXRlKGJ1Zik7CisJaWYgKHJldCA8IDApIHsKKwkJYWRzcF9lcnIoZHNwLCAiRmFpbGVkIHRvIGFjcXVpcmUgaG9zdCBidWZmZXI6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9idWZmZXI7CisJfQorCisJYnVmLT5yZWdpb25zID0ga2NhbGxvYyh3bV9hZHNwX2Z3W2RzcC0+ZnddLmNhcHMtPm51bV9yZWdpb25zLAorCQkJICAgICAgIHNpemVvZigqYnVmLT5yZWdpb25zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPnJlZ2lvbnMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfYnVmZmVyOworCX0KKworCXJldCA9IHdtX2Fkc3BfYnVmZmVyX3BvcHVsYXRlKGJ1Zik7CisJaWYgKHJldCA8IDApIHsKKwkJYWRzcF9lcnIoZHNwLCAiRmFpbGVkIHRvIHBvcHVsYXRlIGhvc3QgYnVmZmVyOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVnaW9uczsKKwl9CisKKwlkc3AtPmJ1ZmZlciA9IGJ1ZjsKKworCXJldHVybiAwOworCitlcnJfcmVnaW9uczoKKwlrZnJlZShidWYtPnJlZ2lvbnMpOworZXJyX2J1ZmZlcjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd21fYWRzcF9idWZmZXJfZnJlZShzdHJ1Y3Qgd21fYWRzcCAqZHNwKQoreworCWlmIChkc3AtPmJ1ZmZlcikgeworCQlrZnJlZShkc3AtPmJ1ZmZlci0+cmVnaW9ucyk7CisJCWtmcmVlKGRzcC0+YnVmZmVyKTsKKworCQlkc3AtPmJ1ZmZlciA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdtX2Fkc3BfY29tcHJfYXR0YWNoZWQoc3RydWN0IHdtX2Fkc3BfY29tcHIgKmNvbXByKQoreworCXJldHVybiBjb21wci0+YnVmICE9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgd21fYWRzcF9jb21wcl9hdHRhY2goc3RydWN0IHdtX2Fkc3BfY29tcHIgKmNvbXByKQoreworCS8qCisJICogTm90ZSB0aGlzIHdpbGwgYmUgbW9yZSBjb21wbGV4IG9uY2UgZWFjaCBEU1AgY2FuIHN1cHBvcnQgbXVsdGlwbGUKKwkgKiBzdHJlYW1zCisJICovCisJaWYgKCFjb21wci0+ZHNwLT5idWZmZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJY29tcHItPmJ1ZiA9IGNvbXByLT5kc3AtPmJ1ZmZlcjsKKworCXJldHVybiAwOworfQorCitpbnQgd21fYWRzcF9jb21wcl90cmlnZ2VyKHN0cnVjdCBzbmRfY29tcHJfc3RyZWFtICpzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHdtX2Fkc3BfY29tcHIgKmNvbXByID0gc3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtX2Fkc3AgKmRzcCA9IGNvbXByLT5kc3A7CisJaW50IHJldCA9IDA7CisKKwlhZHNwX2RiZyhkc3AsICJUcmlnZ2VyOiAlZFxuIiwgY21kKTsKKworCW11dGV4X2xvY2soJmRzcC0+cHdyX2xvY2spOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlpZiAod21fYWRzcF9jb21wcl9hdHRhY2hlZChjb21wcikpCisJCQlicmVhazsKKworCQlyZXQgPSB3bV9hZHNwX2NvbXByX2F0dGFjaChjb21wcik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlhZHNwX2Vycihkc3AsICJGYWlsZWQgdG8gbGluayBidWZmZXIgYW5kIHN0cmVhbTogJWRcbiIsCisJCQkJIHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFRyaWdnZXIgdGhlIElSUSBhdCBvbmUgZnJhZ21lbnQgb2YgZGF0YSAqLworCQlyZXQgPSB3bV9hZHNwX2J1ZmZlcl93cml0ZShjb21wci0+YnVmLAorCQkJCQkgICBIT1NUX0JVRkZFUl9GSUVMRChoaWdoX3dhdGVyX21hcmspLAorCQkJCQkgICB3bV9hZHNwX2NvbXByX2ZyYWdfd29yZHMoY29tcHIpKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWFkc3BfZXJyKGRzcCwgIkZhaWxlZCB0byBzZXQgaGlnaCB3YXRlciBtYXJrOiAlZFxuIiwKKwkJCQkgcmV0KTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkc3AtPnB3cl9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bV9hZHNwX2NvbXByX3RyaWdnZXIpOworCitzdGF0aWMgaW5saW5lIGludCB3bV9hZHNwX2J1ZmZlcl9zaXplKHN0cnVjdCB3bV9hZHNwX2NvbXByX2J1ZiAqYnVmKQoreworCWludCBsYXN0X3JlZ2lvbiA9IHdtX2Fkc3BfZndbYnVmLT5kc3AtPmZ3XS5jYXBzLT5udW1fcmVnaW9ucyAtIDE7CisKKwlyZXR1cm4gYnVmLT5yZWdpb25zW2xhc3RfcmVnaW9uXS5jdW11bGF0aXZlX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgd21fYWRzcF9idWZmZXJfdXBkYXRlX2F2YWlsKHN0cnVjdCB3bV9hZHNwX2NvbXByX2J1ZiAqYnVmKQoreworCXUzMiBuZXh0X3JlYWRfaW5kZXgsIG5leHRfd3JpdGVfaW5kZXg7CisJaW50IHdyaXRlX2luZGV4LCByZWFkX2luZGV4LCBhdmFpbDsKKwlpbnQgcmV0OworCisJLyogT25seSBzeW5jIHJlYWQgaW5kZXggaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHJlYWQgYSB2YWxpZCBpbmRleCAqLworCWlmIChidWYtPnJlYWRfaW5kZXggPCAwKSB7CisJCXJldCA9IHdtX2Fkc3BfYnVmZmVyX3JlYWQoYnVmLAorCQkJCUhPU1RfQlVGRkVSX0ZJRUxEKG5leHRfcmVhZF9pbmRleCksCisJCQkJJm5leHRfcmVhZF9pbmRleCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZWFkX2luZGV4ID0gc2lnbl9leHRlbmQzMihuZXh0X3JlYWRfaW5kZXgsIDIzKTsKKworCQlpZiAocmVhZF9pbmRleCA8IDApIHsKKwkJCWFkc3BfZGJnKGJ1Zi0+ZHNwLCAiQXZhaWwgY2hlY2sgb24gdW5zdGFydGVkIHN0cmVhbVxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWJ1Zi0+cmVhZF9pbmRleCA9IHJlYWRfaW5kZXg7CisJfQorCisJcmV0ID0gd21fYWRzcF9idWZmZXJfcmVhZChidWYsIEhPU1RfQlVGRkVSX0ZJRUxEKG5leHRfd3JpdGVfaW5kZXgpLAorCQkJJm5leHRfd3JpdGVfaW5kZXgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJd3JpdGVfaW5kZXggPSBzaWduX2V4dGVuZDMyKG5leHRfd3JpdGVfaW5kZXgsIDIzKTsKKworCWF2YWlsID0gd3JpdGVfaW5kZXggLSBidWYtPnJlYWRfaW5kZXg7CisJaWYgKGF2YWlsIDwgMCkKKwkJYXZhaWwgKz0gd21fYWRzcF9idWZmZXJfc2l6ZShidWYpOworCisJYWRzcF9kYmcoYnVmLT5kc3AsICJyZWFkaW5kZXg9MHgleCwgd3JpdGVpbmRleD0weCV4LCBhdmFpbD0lZFxuIiwKKwkJIGJ1Zi0+cmVhZF9pbmRleCwgd3JpdGVfaW5kZXgsIGF2YWlsKTsKKworCWJ1Zi0+YXZhaWwgPSBhdmFpbDsKKworCXJldHVybiAwOworfQorCitpbnQgd21fYWRzcF9jb21wcl9oYW5kbGVfaXJxKHN0cnVjdCB3bV9hZHNwICpkc3ApCit7CisJc3RydWN0IHdtX2Fkc3BfY29tcHJfYnVmICpidWYgPSBkc3AtPmJ1ZmZlcjsKKwlzdHJ1Y3Qgd21fYWRzcF9jb21wciAqY29tcHIgPSBkc3AtPmNvbXByOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZHNwLT5wd3JfbG9jayk7CisKKwlpZiAoIWJ1ZikgeworCQlhZHNwX2Vycihkc3AsICJTcHVyaW91cyBidWZmZXIgSVJRXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJYWRzcF9kYmcoZHNwLCAiSGFuZGxpbmcgYnVmZmVyIElSUVxuIik7CisKKwlyZXQgPSB3bV9hZHNwX2J1ZmZlcl9yZWFkKGJ1ZiwgSE9TVF9CVUZGRVJfRklFTEQoZXJyb3IpLCAmYnVmLT5lcnJvcik7CisJaWYgKHJldCA8IDApIHsKKwkJYWRzcF9lcnIoZHNwLCAiRmFpbGVkIHRvIGNoZWNrIGJ1ZmZlciBlcnJvcjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoYnVmLT5lcnJvciAhPSAwKSB7CisJCWFkc3BfZXJyKGRzcCwgIkJ1ZmZlciBlcnJvciBvY2N1cnJlZDogJWRcbiIsIGJ1Zi0+ZXJyb3IpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bV9hZHNwX2J1ZmZlcl9yZWFkKGJ1ZiwgSE9TVF9CVUZGRVJfRklFTEQoaXJxX2NvdW50KSwKKwkJCQkgICZidWYtPmlycV9jb3VudCk7CisJaWYgKHJldCA8IDApIHsKKwkJYWRzcF9lcnIoZHNwLCAiRmFpbGVkIHRvIGdldCBpcnFfY291bnQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bV9hZHNwX2J1ZmZlcl91cGRhdGVfYXZhaWwoYnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQlhZHNwX2Vycihkc3AsICJFcnJvciByZWFkaW5nIGF2YWlsOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNvbXByLT5zdHJlYW0pCisJCXNuZF9jb21wcl9mcmFnbWVudF9lbGFwc2VkKGNvbXByLT5zdHJlYW0pOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkc3AtPnB3cl9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bV9hZHNwX2NvbXByX2hhbmRsZV9pcnEpOworCitzdGF0aWMgaW50IHdtX2Fkc3BfYnVmZmVyX3JlZW5hYmxlX2lycShzdHJ1Y3Qgd21fYWRzcF9jb21wcl9idWYgKmJ1ZikKK3sKKwlpZiAoYnVmLT5pcnFfY291bnQgJiAweDAxKQorCQlyZXR1cm4gMDsKKworCWFkc3BfZGJnKGJ1Zi0+ZHNwLCAiRW5hYmxlIElSUSgweCV4KSBmb3IgbmV4dCBmcmFnbWVudFxuIiwKKwkJIGJ1Zi0+aXJxX2NvdW50KTsKKworCWJ1Zi0+aXJxX2NvdW50IHw9IDB4MDE7CisKKwlyZXR1cm4gd21fYWRzcF9idWZmZXJfd3JpdGUoYnVmLCBIT1NUX0JVRkZFUl9GSUVMRChpcnFfYWNrKSwKKwkJCQkgICAgYnVmLT5pcnFfY291bnQpOworfQorCitpbnQgd21fYWRzcF9jb21wcl9wb2ludGVyKHN0cnVjdCBzbmRfY29tcHJfc3RyZWFtICpzdHJlYW0sCisJCQkgIHN0cnVjdCBzbmRfY29tcHJfdHN0YW1wICp0c3RhbXApCit7CisJc3RydWN0IHdtX2Fkc3BfY29tcHIgKmNvbXByID0gc3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtX2Fkc3BfY29tcHJfYnVmICpidWYgPSBjb21wci0+YnVmOworCXN0cnVjdCB3bV9hZHNwICpkc3AgPSBjb21wci0+ZHNwOworCWludCByZXQgPSAwOworCisJYWRzcF9kYmcoZHNwLCAiUG9pbnRlciByZXF1ZXN0XG4iKTsKKworCW11dGV4X2xvY2soJmRzcC0+cHdyX2xvY2spOworCisJaWYgKCFjb21wci0+YnVmKSB7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNvbXByLT5idWYtPmVycm9yKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWlmIChidWYtPmF2YWlsIDwgd21fYWRzcF9jb21wcl9mcmFnX3dvcmRzKGNvbXByKSkgeworCQlyZXQgPSB3bV9hZHNwX2J1ZmZlcl91cGRhdGVfYXZhaWwoYnVmKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWFkc3BfZXJyKGRzcCwgIkVycm9yIHJlYWRpbmcgYXZhaWw6ICVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSByZWFsbHkgaGF2ZSBsZXNzIHRoYW4gMSBmcmFnbWVudCBhdmFpbGFibGUgdGVsbCB0aGUKKwkJICogRFNQIHRvIGluZm9ybSB1cyBvbmNlIGEgd2hvbGUgZnJhZ21lbnQgaXMgYXZhaWxhYmxlLgorCQkgKi8KKwkJaWYgKGJ1Zi0+YXZhaWwgPCB3bV9hZHNwX2NvbXByX2ZyYWdfd29yZHMoY29tcHIpKSB7CisJCQlyZXQgPSB3bV9hZHNwX2J1ZmZlcl9yZWVuYWJsZV9pcnEoYnVmKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJYWRzcF9lcnIoZHNwLAorCQkJCQkgIkZhaWxlZCB0byByZS1lbmFibGUgYnVmZmVyIElSUTogJWRcbiIsCisJCQkJCSByZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJdHN0YW1wLT5jb3BpZWRfdG90YWwgPSBjb21wci0+Y29waWVkX3RvdGFsOworCXRzdGFtcC0+Y29waWVkX3RvdGFsICs9IGJ1Zi0+YXZhaWwgKiBXTV9BRFNQX0RBVEFfV09SRF9TSVpFOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkc3AtPnB3cl9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bV9hZHNwX2NvbXByX3BvaW50ZXIpOworCitzdGF0aWMgaW50IHdtX2Fkc3BfYnVmZmVyX2NhcHR1cmVfYmxvY2soc3RydWN0IHdtX2Fkc3BfY29tcHIgKmNvbXByLCBpbnQgdGFyZ2V0KQoreworCXN0cnVjdCB3bV9hZHNwX2NvbXByX2J1ZiAqYnVmID0gY29tcHItPmJ1ZjsKKwl1OCAqcGFja19pbiA9ICh1OCAqKWNvbXByLT5yYXdfYnVmOworCXU4ICpwYWNrX291dCA9ICh1OCAqKWNvbXByLT5yYXdfYnVmOworCXVuc2lnbmVkIGludCBhZHNwX2FkZHI7CisJaW50IG1lbV90eXBlLCBud29yZHMsIG1heF9yZWFkOworCWludCBpLCBqLCByZXQ7CisKKwkvKiBDYWxjdWxhdGUgcmVhZCBwYXJhbWV0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IHdtX2Fkc3BfZndbYnVmLT5kc3AtPmZ3XS5jYXBzLT5udW1fcmVnaW9uczsgKytpKQorCQlpZiAoYnVmLT5yZWFkX2luZGV4IDwgYnVmLT5yZWdpb25zW2ldLmN1bXVsYXRpdmVfc2l6ZSkKKwkJCWJyZWFrOworCisJaWYgKGkgPT0gd21fYWRzcF9md1tidWYtPmRzcC0+ZnddLmNhcHMtPm51bV9yZWdpb25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbV90eXBlID0gYnVmLT5yZWdpb25zW2ldLm1lbV90eXBlOworCWFkc3BfYWRkciA9IGJ1Zi0+cmVnaW9uc1tpXS5iYXNlX2FkZHIgKworCQkgICAgKGJ1Zi0+cmVhZF9pbmRleCAtIGJ1Zi0+cmVnaW9uc1tpXS5vZmZzZXQpOworCisJbWF4X3JlYWQgPSB3bV9hZHNwX2NvbXByX2ZyYWdfd29yZHMoY29tcHIpOworCW53b3JkcyA9IGJ1Zi0+cmVnaW9uc1tpXS5jdW11bGF0aXZlX3NpemUgLSBidWYtPnJlYWRfaW5kZXg7CisKKwlpZiAobndvcmRzID4gdGFyZ2V0KQorCQlud29yZHMgPSB0YXJnZXQ7CisJaWYgKG53b3JkcyA+IGJ1Zi0+YXZhaWwpCisJCW53b3JkcyA9IGJ1Zi0+YXZhaWw7CisJaWYgKG53b3JkcyA+IG1heF9yZWFkKQorCQlud29yZHMgPSBtYXhfcmVhZDsKKwlpZiAoIW53b3JkcykKKwkJcmV0dXJuIDA7CisKKwkvKiBSZWFkIGRhdGEgZnJvbSBEU1AgKi8KKwlyZXQgPSB3bV9hZHNwX3JlYWRfZGF0YV9ibG9jayhidWYtPmRzcCwgbWVtX3R5cGUsIGFkc3BfYWRkciwKKwkJCQkgICAgICBud29yZHMsIGNvbXByLT5yYXdfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJlbW92ZSB0aGUgcGFkZGluZyBieXRlcyBmcm9tIHRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgRFNQICovCisJZm9yIChpID0gMDsgaSA8IG53b3JkczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBXTV9BRFNQX0RBVEFfV09SRF9TSVpFOyBqKyspCisJCQkqcGFja19vdXQrKyA9ICpwYWNrX2luKys7CisKKwkJcGFja19pbiArPSBzaXplb2YoKihjb21wci0+cmF3X2J1ZikpIC0gV01fQURTUF9EQVRBX1dPUkRfU0laRTsKKwl9CisKKwkvKiB1cGRhdGUgcmVhZCBpbmRleCB0byBhY2NvdW50IGZvciB3b3JkcyByZWFkICovCisJYnVmLT5yZWFkX2luZGV4ICs9IG53b3JkczsKKwlpZiAoYnVmLT5yZWFkX2luZGV4ID09IHdtX2Fkc3BfYnVmZmVyX3NpemUoYnVmKSkKKwkJYnVmLT5yZWFkX2luZGV4ID0gMDsKKworCXJldCA9IHdtX2Fkc3BfYnVmZmVyX3dyaXRlKGJ1ZiwgSE9TVF9CVUZGRVJfRklFTEQobmV4dF9yZWFkX2luZGV4KSwKKwkJCQkgICBidWYtPnJlYWRfaW5kZXgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogdXBkYXRlIGF2YWlsIHRvIGFjY291bnQgZm9yIHdvcmRzIHJlYWQgKi8KKwlidWYtPmF2YWlsIC09IG53b3JkczsKKworCXJldHVybiBud29yZHM7Cit9CisKK3N0YXRpYyBpbnQgd21fYWRzcF9jb21wcl9yZWFkKHN0cnVjdCB3bV9hZHNwX2NvbXByICpjb21wciwKKwkJCSAgICAgIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgd21fYWRzcCAqZHNwID0gY29tcHItPmRzcDsKKwlpbnQgbnRvdGFsID0gMDsKKwlpbnQgbndvcmRzLCBuYnl0ZXM7CisKKwlhZHNwX2RiZyhkc3AsICJSZXF1ZXN0ZWQgcmVhZCBvZiAlenUgYnl0ZXNcbiIsIGNvdW50KTsKKworCWlmICghY29tcHItPmJ1ZikKKwkJcmV0dXJuIC1FTlhJTzsKKworCWlmIChjb21wci0+YnVmLT5lcnJvcikKKwkJcmV0dXJuIC1FSU87CisKKwljb3VudCAvPSBXTV9BRFNQX0RBVEFfV09SRF9TSVpFOworCisJZG8geworCQlud29yZHMgPSB3bV9hZHNwX2J1ZmZlcl9jYXB0dXJlX2Jsb2NrKGNvbXByLCBjb3VudCk7CisJCWlmIChud29yZHMgPCAwKSB7CisJCQlhZHNwX2Vycihkc3AsICJGYWlsZWQgdG8gY2FwdHVyZSBibG9jazogJWRcbiIsIG53b3Jkcyk7CisJCQlyZXR1cm4gbndvcmRzOworCQl9CisKKwkJbmJ5dGVzID0gbndvcmRzICogV01fQURTUF9EQVRBX1dPUkRfU0laRTsKKworCQlhZHNwX2RiZyhkc3AsICJSZWFkICVkIGJ5dGVzXG4iLCBuYnl0ZXMpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmICsgbnRvdGFsLCBjb21wci0+cmF3X2J1ZiwgbmJ5dGVzKSkgeworCQkJYWRzcF9lcnIoZHNwLCAiRmFpbGVkIHRvIGNvcHkgZGF0YSB0byB1c2VyOiAlZCwgJWRcbiIsCisJCQkJIG50b3RhbCwgbmJ5dGVzKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwkJY291bnQgLT0gbndvcmRzOworCQludG90YWwgKz0gbmJ5dGVzOworCX0gd2hpbGUgKG53b3JkcyA+IDAgJiYgY291bnQgPiAwKTsKKworCWNvbXByLT5jb3BpZWRfdG90YWwgKz0gbnRvdGFsOworCisJcmV0dXJuIG50b3RhbDsKK30KKworaW50IHdtX2Fkc3BfY29tcHJfY29weShzdHJ1Y3Qgc25kX2NvbXByX3N0cmVhbSAqc3RyZWFtLCBjaGFyIF9fdXNlciAqYnVmLAorCQkgICAgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB3bV9hZHNwX2NvbXByICpjb21wciA9IHN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB3bV9hZHNwICpkc3AgPSBjb21wci0+ZHNwOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkc3AtPnB3cl9sb2NrKTsKKworCWlmIChzdHJlYW0tPmRpcmVjdGlvbiA9PSBTTkRfQ09NUFJFU1NfQ0FQVFVSRSkKKwkJcmV0ID0gd21fYWRzcF9jb21wcl9yZWFkKGNvbXByLCBidWYsIGNvdW50KTsKKwllbHNlCisJCXJldCA9IC1FTk9UU1VQUDsKKworCW11dGV4X3VubG9jaygmZHNwLT5wd3JfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod21fYWRzcF9jb21wcl9jb3B5KTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9hZHNwLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtX2Fkc3AuaAppbmRleCAyZDExN2NmLi4xYTkyOGVjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2Fkc3AuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2Fkc3AuaApAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb21wcmVzc19kcml2ZXIuaD4KIAogI2luY2x1ZGUgIndtZncuaCIKIApAQCAtMzAsNiArMzEsOSBAQAogCXVuc2lnbmVkIGludCBiYXNlOwogfTsKIAorc3RydWN0IHdtX2Fkc3BfY29tcHI7CitzdHJ1Y3Qgd21fYWRzcF9jb21wcl9idWY7CisKIHN0cnVjdCB3bV9hZHNwIHsKIAljb25zdCBjaGFyICpwYXJ0OwogCWludCBudW07CkBAIC00NSw4ICs0OSw4IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFsZ19yZWdpb25zOwogCi0JaW50IGZ3X2lkOwotCWludCBmd19pZF92ZXJzaW9uOworCXVuc2lnbmVkIGludCBmd19pZDsKKwl1bnNpZ25lZCBpbnQgZndfaWRfdmVyc2lvbjsKIAogCWNvbnN0IHN0cnVjdCB3bV9hZHNwX3JlZ2lvbiAqbWVtOwogCWludCBudW1fbWVtczsKQEAgLTU5LDkgKzYzLDEzIEBACiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYm9vdF93b3JrOwogCisJc3RydWN0IHdtX2Fkc3BfY29tcHIgKmNvbXByOworCXN0cnVjdCB3bV9hZHNwX2NvbXByX2J1ZiAqYnVmZmVyOworCisJc3RydWN0IG11dGV4IHB3cl9sb2NrOworCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290OwotCXN0cnVjdCBtdXRleCBkZWJ1Z2ZzX2xvY2s7CiAJY2hhciAqd21md19maWxlX25hbWU7CiAJY2hhciAqYmluX2ZpbGVfbmFtZTsKICNlbmRpZgpAQCAtOTYsNCArMTA0LDE4IEBACiBpbnQgd21fYWRzcDJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpOwogCitleHRlcm4gaW50IHdtX2Fkc3BfY29tcHJfb3BlbihzdHJ1Y3Qgd21fYWRzcCAqZHNwLAorCQkJICAgICAgc3RydWN0IHNuZF9jb21wcl9zdHJlYW0gKnN0cmVhbSk7CitleHRlcm4gaW50IHdtX2Fkc3BfY29tcHJfZnJlZShzdHJ1Y3Qgc25kX2NvbXByX3N0cmVhbSAqc3RyZWFtKTsKK2V4dGVybiBpbnQgd21fYWRzcF9jb21wcl9zZXRfcGFyYW1zKHN0cnVjdCBzbmRfY29tcHJfc3RyZWFtICpzdHJlYW0sCisJCQkJICAgIHN0cnVjdCBzbmRfY29tcHJfcGFyYW1zICpwYXJhbXMpOworZXh0ZXJuIGludCB3bV9hZHNwX2NvbXByX2dldF9jYXBzKHN0cnVjdCBzbmRfY29tcHJfc3RyZWFtICpzdHJlYW0sCisJCQkJICBzdHJ1Y3Qgc25kX2NvbXByX2NhcHMgKmNhcHMpOworZXh0ZXJuIGludCB3bV9hZHNwX2NvbXByX3RyaWdnZXIoc3RydWN0IHNuZF9jb21wcl9zdHJlYW0gKnN0cmVhbSwgaW50IGNtZCk7CitleHRlcm4gaW50IHdtX2Fkc3BfY29tcHJfaGFuZGxlX2lycShzdHJ1Y3Qgd21fYWRzcCAqZHNwKTsKK2V4dGVybiBpbnQgd21fYWRzcF9jb21wcl9wb2ludGVyKHN0cnVjdCBzbmRfY29tcHJfc3RyZWFtICpzdHJlYW0sCisJCQkJIHN0cnVjdCBzbmRfY29tcHJfdHN0YW1wICp0c3RhbXApOworZXh0ZXJuIGludCB3bV9hZHNwX2NvbXByX2NvcHkoc3RydWN0IHNuZF9jb21wcl9zdHJlYW0gKnN0cmVhbSwKKwkJCSAgICAgIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCmluZGV4IDQ0OTVhNDAuLjJjY2I4YmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKQEAgLTIyMyw4ICsyMjMsOCBAQAogCiAJLyogd2FpdCBmb3IgWERBVEEgdG8gYmUgY2xlYXJlZCAqLwogCWNudCA9IDA7Ci0Jd2hpbGUgKCEobWNhc3BfZ2V0X3JlZyhtY2FzcCwgREFWSU5DSV9NQ0FTUF9UWFNUQVRfUkVHKSAmCi0JCSB+WFJEQVRBKSAmJiAoY250IDwgMTAwMDAwKSkKKwl3aGlsZSAoKG1jYXNwX2dldF9yZWcobWNhc3AsIERBVklOQ0lfTUNBU1BfVFhTVEFUX1JFRykgJiBYUkRBVEEpICYmCisJICAgICAgIChjbnQgPCAxMDAwMDApKQogCQljbnQrKzsKIAogCS8qIFJlbGVhc2UgVFggc3RhdGUgbWFjaGluZSAqLwpAQCAtNjgxLDggKzY4MSw4IEBACiAJfQogCiAJbWNhc3AtPnRkbV9zbG90cyA9IHNsb3RzOwotCW1jYXNwLT50ZG1fbWFza1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IHJ4X21hc2s7Ci0JbWNhc3AtPnRkbV9tYXNrW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0gPSB0eF9tYXNrOworCW1jYXNwLT50ZG1fbWFza1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IHR4X21hc2s7CisJbWNhc3AtPnRkbV9tYXNrW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0gPSByeF9tYXNrOwogCW1jYXNwLT5zbG90X3dpZHRoID0gc2xvdF93aWR0aDsKIAogCXJldHVybiBkYXZpbmNpX21jYXNwX3NldF9jaF9jb25zdHJhaW50cyhtY2FzcCk7CkBAIC05MDgsNiArOTA4LDE0IEBACiAJCW1jYXNwX3NldF9iaXRzKG1jYXNwLCBEQVZJTkNJX01DQVNQX1JYRk1UX1JFRywgYnVzZWwgfCBSWE9SRCk7CiAJCW1jYXNwX21vZF9iaXRzKG1jYXNwLCBEQVZJTkNJX01DQVNQX1JYRk1DVExfUkVHLAogCQkJICAgICAgIEZTUk1PRCh0b3RhbF9zbG90cyksIEZTUk1PRCgweDFGRikpOworCQkvKgorCQkgKiBJZiBNY0FTUCBpcyBzZXQgdG8gYmUgVFgvUlggc3luY2hyb25vdXMgYW5kIHRoZSBwbGF5YmFjayBpcworCQkgKiBub3QgcnVubmluZyBhbHJlYWR5IHdlIG5lZWQgdG8gY29uZmlndXJlIHRoZSBUWCBzbG90cyBpbgorCQkgKiBvcmRlciB0byBoYXZlIGNvcnJlY3QgRlNYIG9uIHRoZSBidXMKKwkJICovCisJCWlmIChtY2FzcF9pc19zeW5jaHJvbm91cyhtY2FzcCkgJiYgIW1jYXNwLT5jaGFubmVscykKKwkJCW1jYXNwX21vZF9iaXRzKG1jYXNwLCBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLAorCQkJCSAgICAgICBGU1hNT0QodG90YWxfc2xvdHMpLCBGU1hNT0QoMHgxRkYpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kd2MvZGVzaWdud2FyZV9pMnMuYyBiL3NvdW5kL3NvYy9kd2MvZGVzaWdud2FyZV9pMnMuYwppbmRleCA2ZTZhNzBjLi5jZTY2NGMyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZHdjL2Rlc2lnbndhcmVfaTJzLmMKKysrIGIvc291bmQvc29jL2R3Yy9kZXNpZ253YXJlX2kycy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxzb3VuZC9kZXNpZ253YXJlX2kycy5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTkzLDcgKzk0LDEyIEBACiAJc3RydWN0IGNsayAqY2xrOwogCWludCBhY3RpdmU7CiAJdW5zaWduZWQgaW50IGNhcGFiaWxpdHk7CisJdW5zaWduZWQgaW50IHF1aXJrczsKKwl1bnNpZ25lZCBpbnQgaTJzX3JlZ19jb21wMTsKKwl1bnNpZ25lZCBpbnQgaTJzX3JlZ19jb21wMjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdTMyIGNjcjsKKwl1MzIgeGZlcl9yZXNvbHV0aW9uOwogCiAJLyogZGF0YSByZWxhdGVkIHRvIERNQSB0cmFuc2ZlcnMgYi93IGkycyBhbmQgRE1BQyAqLwogCXVuaW9uIGR3X2kyc19zbmRfZG1hX2RhdGEgcGxheV9kbWFfZGF0YTsKQEAgLTIxMywzMSArMjE5LDU4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGR3X2kyc19jb25maWcoc3RydWN0IGR3X2kyc19kZXYgKmRldiwgaW50IHN0cmVhbSkKK3sKKwl1MzIgY2hfcmVnLCBpcnE7CisJc3RydWN0IGkyc19jbGtfY29uZmlnX2RhdGEgKmNvbmZpZyA9ICZkZXYtPmNvbmZpZzsKKworCisJaTJzX2Rpc2FibGVfY2hhbm5lbHMoZGV2LCBzdHJlYW0pOworCisJZm9yIChjaF9yZWcgPSAwOyBjaF9yZWcgPCAoY29uZmlnLT5jaGFuX25yIC8gMik7IGNoX3JlZysrKSB7CisJCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBUQ1IoY2hfcmVnKSwKKwkJCQkgICAgICBkZXYtPnhmZXJfcmVzb2x1dGlvbik7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFRGQ1IoY2hfcmVnKSwgMHgwMik7CisJCQlpcnEgPSBpMnNfcmVhZF9yZWcoZGV2LT5pMnNfYmFzZSwgSU1SKGNoX3JlZykpOworCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBJTVIoY2hfcmVnKSwgaXJxICYgfjB4MzApOworCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBURVIoY2hfcmVnKSwgMSk7CisJCX0gZWxzZSB7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFJDUihjaF9yZWcpLAorCQkJCSAgICAgIGRldi0+eGZlcl9yZXNvbHV0aW9uKTsKKwkJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgUkZDUihjaF9yZWcpLCAweDA3KTsKKwkJCWlycSA9IGkyc19yZWFkX3JlZyhkZXYtPmkyc19iYXNlLCBJTVIoY2hfcmVnKSk7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIElNUihjaF9yZWcpLCBpcnEgJiB+MHgwMyk7CisJCQlpMnNfd3JpdGVfcmVnKGRldi0+aTJzX2Jhc2UsIFJFUihjaF9yZWcpLCAxKTsKKwkJfQorCisJfQorfQorCiBzdGF0aWMgaW50IGR3X2kyc19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKIAlzdHJ1Y3QgZHdfaTJzX2RldiAqZGV2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKIAlzdHJ1Y3QgaTJzX2Nsa19jb25maWdfZGF0YSAqY29uZmlnID0gJmRldi0+Y29uZmlnOwotCXUzMiBjY3IsIHhmZXJfcmVzb2x1dGlvbiwgY2hfcmVnLCBpcnE7CiAJaW50IHJldDsKIAogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKIAkJY29uZmlnLT5kYXRhX3dpZHRoID0gMTY7Ci0JCWNjciA9IDB4MDA7Ci0JCXhmZXJfcmVzb2x1dGlvbiA9IDB4MDI7CisJCWRldi0+Y2NyID0gMHgwMDsKKwkJZGV2LT54ZmVyX3Jlc29sdXRpb24gPSAweDAyOwogCQlicmVhazsKIAogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CiAJCWNvbmZpZy0+ZGF0YV93aWR0aCA9IDI0OwotCQljY3IgPSAweDA4OwotCQl4ZmVyX3Jlc29sdXRpb24gPSAweDA0OworCQlkZXYtPmNjciA9IDB4MDg7CisJCWRldi0+eGZlcl9yZXNvbHV0aW9uID0gMHgwNDsKIAkJYnJlYWs7CiAKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgogCQljb25maWctPmRhdGFfd2lkdGggPSAzMjsKLQkJY2NyID0gMHgxMDsKLQkJeGZlcl9yZXNvbHV0aW9uID0gMHgwNTsKKwkJZGV2LT5jY3IgPSAweDEwOworCQlkZXYtPnhmZXJfcmVzb2x1dGlvbiA9IDB4MDU7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTI1OCwyNyArMjkxLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaTJzX2Rpc2FibGVfY2hhbm5lbHMoZGV2LCBzdWJzdHJlYW0tPnN0cmVhbSk7CisJZHdfaTJzX2NvbmZpZyhkZXYsIHN1YnN0cmVhbS0+c3RyZWFtKTsKIAotCWZvciAoY2hfcmVnID0gMDsgY2hfcmVnIDwgKGNvbmZpZy0+Y2hhbl9uciAvIDIpOyBjaF9yZWcrKykgewotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBUQ1IoY2hfcmVnKSwKLQkJCQkgICAgICB4ZmVyX3Jlc29sdXRpb24pOwotCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBURkNSKGNoX3JlZyksIDB4MDIpOwotCQkJaXJxID0gaTJzX3JlYWRfcmVnKGRldi0+aTJzX2Jhc2UsIElNUihjaF9yZWcpKTsKLQkJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgSU1SKGNoX3JlZyksIGlycSAmIH4weDMwKTsKLQkJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgVEVSKGNoX3JlZyksIDEpOwotCQl9IGVsc2UgewotCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBSQ1IoY2hfcmVnKSwKLQkJCQkgICAgICB4ZmVyX3Jlc29sdXRpb24pOwotCQkJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBSRkNSKGNoX3JlZyksIDB4MDcpOwotCQkJaXJxID0gaTJzX3JlYWRfcmVnKGRldi0+aTJzX2Jhc2UsIElNUihjaF9yZWcpKTsKLQkJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgSU1SKGNoX3JlZyksIGlycSAmIH4weDAzKTsKLQkJCWkyc193cml0ZV9yZWcoZGV2LT5pMnNfYmFzZSwgUkVSKGNoX3JlZyksIDEpOwotCQl9Ci0JfQotCi0JaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBDQ1IsIGNjcik7CisJaTJzX3dyaXRlX3JlZyhkZXYtPmkyc19iYXNlLCBDQ1IsIGRldi0+Y2NyKTsKIAogCWNvbmZpZy0+c2FtcGxlX3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwogCkBAIC0zOTQsNiArNDA5LDIzIEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGR3X2kyc19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkd19pMnNfZGV2ICpkd19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChkd19kZXYtPmNhcGFiaWxpdHkgJiBEV19JMlNfTUFTVEVSKQorCQljbGtfZGlzYWJsZShkd19kZXYtPmNsayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfaTJzX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHdfaTJzX2RldiAqZHdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoZHdfZGV2LT5jYXBhYmlsaXR5ICYgRFdfSTJTX01BU1RFUikKKwkJY2xrX2VuYWJsZShkd19kZXYtPmNsayk7CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgZHdfaTJzX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CkBAIC00MTAsNiArNDQyLDExIEBACiAKIAlpZiAoZGV2LT5jYXBhYmlsaXR5ICYgRFdfSTJTX01BU1RFUikKIAkJY2xrX2VuYWJsZShkZXYtPmNsayk7CisKKwlpZiAoZGFpLT5wbGF5YmFja19hY3RpdmUpCisJCWR3X2kyc19jb25maWcoZGV2LCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwlpZiAoZGFpLT5jYXB0dXJlX2FjdGl2ZSkKKwkJZHdfaTJzX2NvbmZpZyhkZXYsIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1OSwxMCArNDk2LDE0IEBACiAJICogUmVhZCBjb21wb25lbnQgcGFyYW1ldGVyIHJlZ2lzdGVycyB0byBleHRyYWN0CiAJICogdGhlIEkyUyBibG9jaydzIGNvbmZpZ3VyYXRpb24uCiAJICovCi0JdTMyIGNvbXAxID0gaTJzX3JlYWRfcmVnKGRldi0+aTJzX2Jhc2UsIEkyU19DT01QX1BBUkFNXzEpOwotCXUzMiBjb21wMiA9IGkyc19yZWFkX3JlZyhkZXYtPmkyc19iYXNlLCBJMlNfQ09NUF9QQVJBTV8yKTsKKwl1MzIgY29tcDEgPSBpMnNfcmVhZF9yZWcoZGV2LT5pMnNfYmFzZSwgZGV2LT5pMnNfcmVnX2NvbXAxKTsKKwl1MzIgY29tcDIgPSBpMnNfcmVhZF9yZWcoZGV2LT5pMnNfYmFzZSwgZGV2LT5pMnNfcmVnX2NvbXAyKTsKIAl1MzIgaWR4OwogCisJaWYgKGRldi0+Y2FwYWJpbGl0eSAmIERXQ19JMlNfUkVDT1JEICYmCisJCQlkZXYtPnF1aXJrcyAmIERXX0kyU19RVUlSS19DT01QX1BBUkFNMSkKKwkJY29tcDEgPSBjb21wMSAmIH5CSVQoNSk7CisKIAlpZiAoQ09NUDFfVFhfRU5BQkxFRChjb21wMSkpIHsKIAkJZGV2X2RiZyhkZXYtPmRldiwgIiBkZXNpZ253YXJlOiBwbGF5IHN1cHBvcnRlZFxuIik7CiAJCWlkeCA9IENPTVAxX1RYX1dPUkRTSVpFXzAoY29tcDEpOwpAQCAtNTAzLDcgKzU0NCw3IEBACiAJCQkJICAgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQkJICAgY29uc3Qgc3RydWN0IGkyc19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKLQl1MzIgY29tcDEgPSBpMnNfcmVhZF9yZWcoZGV2LT5pMnNfYmFzZSwgSTJTX0NPTVBfUEFSQU1fMSk7CisJdTMyIGNvbXAxID0gaTJzX3JlYWRfcmVnKGRldi0+aTJzX2Jhc2UsIGRldi0+aTJzX3JlZ19jb21wMSk7CiAJdTMyIGlkeCA9IENPTVAxX0FQQl9EQVRBX1dJRFRIKGNvbXAxKTsKIAlpbnQgcmV0OwogCkBAIC02MDcsNiArNjQ4LDE0IEBACiAJaWYgKHBkYXRhKSB7CiAJCWRldi0+Y2FwYWJpbGl0eSA9IHBkYXRhLT5jYXA7CiAJCWNsa19pZCA9IE5VTEw7CisJCWRldi0+cXVpcmtzID0gcGRhdGEtPnF1aXJrczsKKwkJaWYgKGRldi0+cXVpcmtzICYgRFdfSTJTX1FVSVJLX0NPTVBfUkVHX09GRlNFVCkgeworCQkJZGV2LT5pMnNfcmVnX2NvbXAxID0gcGRhdGEtPmkyc19yZWdfY29tcDE7CisJCQlkZXYtPmkyc19yZWdfY29tcDIgPSBwZGF0YS0+aTJzX3JlZ19jb21wMjsKKwkJfSBlbHNlIHsKKwkJCWRldi0+aTJzX3JlZ19jb21wMSA9IEkyU19DT01QX1BBUkFNXzE7CisJCQlkZXYtPmkyc19yZWdfY29tcDIgPSBJMlNfQ09NUF9QQVJBTV8yOworCQl9CiAJCXJldCA9IGR3X2NvbmZpZ3VyZV9kYWlfYnlfcGQoZGV2LCBkd19pMnNfZGFpLCByZXMsIHBkYXRhKTsKIAl9IGVsc2UgewogCQljbGtfaWQgPSAiaTJzY2xrIjsKQEAgLTY0OSw3ICs2OTgsNyBAQAogCQkJZ290byBlcnJfY2xrX2Rpc2FibGU7CiAJCX0KIAl9Ci0KKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAlyZXR1cm4gMDsKIAogZXJyX2Nsa19kaXNhYmxlOgpAQCAtNjY1LDYgKzcxNCw3IEBACiAJaWYgKGRldi0+Y2FwYWJpbGl0eSAmIERXX0kyU19NQVNURVIpCiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkZXYtPmNsayk7CiAKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY3NywxMiArNzI3LDE3IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkd19pMnNfb2ZfbWF0Y2gpOwogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBkd2NfcG1fb3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyhkd19pMnNfcnVudGltZV9zdXNwZW5kLCBkd19pMnNfcnVudGltZV9yZXN1bWUsIE5VTEwpCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19pMnNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBkd19pMnNfcHJvYmUsCiAJLnJlbW92ZQkJPSBkd19pMnNfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJkZXNpZ253YXJlLWkycyIsCiAJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihkd19pMnNfb2ZfbWF0Y2gpLAorCQkucG0gPSAmZHdjX3BtX29wcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9LY29uZmlnIGIvc291bmQvc29jL2ZzbC9LY29uZmlnCmluZGV4IDE5YzMwMmIuLjE0ZGZkZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvZnNsL0tjb25maWcKQEAgLTI4Myw2ICsyODMsOCBAQAogY29uZmlnIFNORF9TT0NfRlNMX0FTT0NfQ0FSRAogCXRyaXN0YXRlICJHZW5lcmljIEFTb0MgU291bmQgQ2FyZCB3aXRoIEFTUkMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9GICYmIEkyQworCSMgZW5mb3JjZSBTTkRfU09DX0ZTTF9BU09DX0NBUkQ9bSBpZiBTTkRfQUM5N19DT0RFQz1tOgorCWRlcGVuZHMgb24gU05EX0FDOTdfQ09ERUMgfHwgU05EX0FDOTdfQ09ERUM9bgogCXNlbGVjdCBTTkRfU09DX0lNWF9BVURNVVgKIAlzZWxlY3QgU05EX1NPQ19JTVhfUENNX0RNQQogCXNlbGVjdCBTTkRfU09DX0ZTTF9FU0FJCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbC1hc29jLWNhcmQuYyBiL3NvdW5kL3NvYy9mc2wvZnNsLWFzb2MtY2FyZC5jCmluZGV4IDFiMDVkMWMuLjU2MmIzYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsLWFzb2MtY2FyZC5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsLWFzb2MtY2FyZC5jCkBAIC0xMDcsNiArMTA3LDEzIEBACiAJeyJDUFUtQ2FwdHVyZSIsICBOVUxMLCAiQ2FwdHVyZSJ9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwX2FjOTdbXSA9IHsKKwl7IkFDOTcgUGxheWJhY2siLCAgTlVMTCwgIkFTUkMtUGxheWJhY2sifSwKKwl7IlBsYXliYWNrIiwgIE5VTEwsICJBQzk3IFBsYXliYWNrIn0sCisJeyJBU1JDLUNhcHR1cmUiLCAgTlVMTCwgIkFDOTcgQ2FwdHVyZSJ9LAorCXsiQUM5NyBDYXB0dXJlIiwgIE5VTEwsICJDYXB0dXJlIn0sCit9OworCiAvKiBBZGQgYWxsIHBvc3NpYmxlIHdpZGdldHMgaW50byBoZXJlIHdpdGhvdXQgYmVpbmcgcmVkdW5kYW50ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZnNsX2Fzb2NfY2FyZF9kYXBtX3dpZGdldHNbXSA9IHsKIAlTTkRfU09DX0RBUE1fTElORSgiTGluZSBPdXQgSmFjayIsIE5VTEwpLApAQCAtMjIyLDEyICsyMjksMTUgQEAKIAkJCQkJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CiAJc3RydWN0IGZzbF9hc29jX2NhcmRfcHJpdiAqcHJpdiA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGNhcmQtPnJ0ZFswXS5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKIAlzdHJ1Y3QgY29kZWNfcHJpdiAqY29kZWNfcHJpdiA9ICZwcml2LT5jb2RlY19wcml2OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNhcmQtPmRldjsKIAl1bnNpZ25lZCBpbnQgcGxsX291dDsKIAlpbnQgcmV0OwogCisJcnRkID0gc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoY2FyZCwgY2FyZC0+ZGFpX2xpbmtbMF0ubmFtZSk7CisJY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CiAJaWYgKGRhcG0tPmRldiAhPSBjb2RlY19kYWktPmRldikKIAkJcmV0dXJuIDA7CiAKQEAgLTQxNCwxNCArNDI0LDE2IEBACiBzdGF0aWMgaW50IGZzbF9hc29jX2NhcmRfbGF0ZV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBmc2xfYXNvY19jYXJkX3ByaXYgKnByaXYgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEoY2FyZCk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBjYXJkLT5ydGRbMF0uY29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBsaXN0X2ZpcnN0X2VudHJ5KAorCQkJJmNhcmQtPnJ0ZF9saXN0LCBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSwgbGlzdCk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKIAlzdHJ1Y3QgY29kZWNfcHJpdiAqY29kZWNfcHJpdiA9ICZwcml2LT5jb2RlY19wcml2OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNhcmQtPmRldjsKIAlpbnQgcmV0OwogCiAJaWYgKGZzbF9hc29jX2NhcmRfaXNfYWM5Nyhwcml2KSkgewogI2lmIElTX0VOQUJMRUQoQ09ORklHX1NORF9BQzk3X0NPREVDKQotCQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5ydGRbMF0uY29kZWM7CisJCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CiAJCXN0cnVjdCBzbmRfYWM5NyAqYWM5NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJCS8qCkBAIC01NzQsNyArNTg2LDggQEAKIAlwcml2LT5jYXJkLmRldiA9ICZwZGV2LT5kZXY7CiAJcHJpdi0+Y2FyZC5uYW1lID0gcHJpdi0+bmFtZTsKIAlwcml2LT5jYXJkLmRhaV9saW5rID0gcHJpdi0+ZGFpX2xpbms7Ci0JcHJpdi0+Y2FyZC5kYXBtX3JvdXRlcyA9IGF1ZGlvX21hcDsKKwlwcml2LT5jYXJkLmRhcG1fcm91dGVzID0gZnNsX2Fzb2NfY2FyZF9pc19hYzk3KHByaXYpID8KKwkJCQkgYXVkaW9fbWFwX2FjOTcgOiBhdWRpb19tYXA7CiAJcHJpdi0+Y2FyZC5sYXRlX3Byb2JlID0gZnNsX2Fzb2NfY2FyZF9sYXRlX3Byb2JlOwogCXByaXYtPmNhcmQubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShhdWRpb19tYXApOwogCXByaXYtPmNhcmQuZGFwbV93aWRnZXRzID0gZnNsX2Fzb2NfY2FyZF9kYXBtX3dpZGdldHM7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9hc3JjLmMgYi9zb3VuZC9zb2MvZnNsL2ZzbF9hc3JjLmMKaW5kZXggOWYwODdkNC4uYzFhMGUwMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfYXNyYy5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX2FzcmMuYwpAQCAtMzEsMjEgKzMxLDIxIEBACiAJZGV2X2RiZygmYXNyY19wcml2LT5wZGV2LT5kZXYsICJQYWlyICVjOiAiIGZtdCwgJ0EnICsgaW5kZXgsICMjX19WQV9BUkdTX18pCiAKIC8qIFNhbXBsZSByYXRlcyBhcmUgYWxpZ25lZCB3aXRoIHRoYXQgZGVmaW5lZCBpbiBwY20uaCBmaWxlICovCi1zdGF0aWMgY29uc3QgdTggcHJvY2Vzc19vcHRpb25bXVs4XVsyXSA9IHsKLQkvKiAzMmtIeiA0NC4xa0h6IDQ4a0h6ICAgNjRrSHogICA4OC4ya0h6IDk2a0h6ICAgMTc2a0h6ICAxOTJrSHogKi8KLQl7ezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sfSwJLyogNTUxMkh6ICovCi0Je3swLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LH0sCS8qIDhrSHogKi8KLQl7ezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sfSwJLyogMTEwMjVIeiAqLwotCXt7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSx9LAkvKiAxNmtIeiAqLwotCXt7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSx9LAkvKiAyMjA1MEh6ICovCi0Je3swLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LH0sCS8qIDMya0h6ICovCi0Je3swLCAyfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAwfSwgezAsIDB9LH0sCS8qIDQ0LjFrSHogKi8KLQl7ezAsIDJ9LCB7MCwgMn0sIHswLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDB9LCB7MCwgMH0sfSwJLyogNDhrSHogKi8KLQl7ezEsIDJ9LCB7MCwgMn0sIHswLCAyfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMH0sfSwJLyogNjRrSHogKi8KLQl7ezEsIDJ9LCB7MSwgMn0sIHsxLCAyfSwgezEsIDF9LCB7MSwgMX0sIHsxLCAxfSwgezEsIDF9LCB7MSwgMX0sfSwJLyogODguMmtIeiAqLwotCXt7MSwgMn0sIHsxLCAyfSwgezEsIDJ9LCB7MSwgMX0sIHsxLCAxfSwgezEsIDF9LCB7MSwgMX0sIHsxLCAxfSx9LAkvKiA5NmtIeiAqLwotCXt7MiwgMn0sIHsyLCAyfSwgezIsIDJ9LCB7MiwgMX0sIHsyLCAxfSwgezIsIDF9LCB7MiwgMX0sIHsyLCAxfSx9LAkvKiAxNzZrSHogKi8KLQl7ezIsIDJ9LCB7MiwgMn0sIHsyLCAyfSwgezIsIDF9LCB7MiwgMX0sIHsyLCAxfSwgezIsIDF9LCB7MiwgMX0sfSwJLyogMTkya0h6ICovCitzdGF0aWMgY29uc3QgdTggcHJvY2Vzc19vcHRpb25bXVsxMl1bMl0gPSB7CisJLyogOGtIeiAxMS4wMjVrSHogMTZrSHogMjIuMDVrSHogMzJrSHogNDQuMWtIeiA0OGtIeiAgIDY0a0h6ICAgODguMmtIeiA5NmtIeiAgIDE3NmtIeiAgMTkya0h6ICovCisJe3swLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sfSwJLyogNTUxMkh6ICovCisJe3swLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sfSwJLyogOGtIeiAqLworCXt7MCwgMn0sIHswLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LH0sCS8qIDExMDI1SHogKi8KKwl7ezEsIDJ9LCB7MCwgMn0sIHswLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSx9LAkvKiAxNmtIeiAqLworCXt7MSwgMn0sIHsxLCAyfSwgezAsIDJ9LCB7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAwfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSwgezAsIDB9LH0sCS8qIDIyMDUwSHogKi8KKwl7ezEsIDJ9LCB7MiwgMX0sIHsyLCAxfSwgezAsIDJ9LCB7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDB9LCB7MCwgMH0sIHswLCAwfSx9LAkvKiAzMmtIeiAqLworCXt7MiwgMn0sIHsyLCAyfSwgezIsIDF9LCB7MiwgMX0sIHswLCAyfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAwfSwgezAsIDB9LH0sCS8qIDQ0LjFrSHogKi8KKwl7ezIsIDJ9LCB7MiwgMn0sIHsyLCAxfSwgezIsIDF9LCB7MCwgMn0sIHswLCAyfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDF9LCB7MCwgMH0sIHswLCAwfSx9LAkvKiA0OGtIeiAqLworCXt7MiwgMn0sIHsyLCAyfSwgezIsIDJ9LCB7MiwgMX0sIHsxLCAyfSwgezAsIDJ9LCB7MCwgMn0sIHswLCAxfSwgezAsIDF9LCB7MCwgMX0sIHswLCAxfSwgezAsIDB9LH0sCS8qIDY0a0h6ICovCisJe3syLCAyfSwgezIsIDJ9LCB7MiwgMn0sIHsyLCAyfSwgezEsIDJ9LCB7MSwgMn0sIHsxLCAyfSwgezEsIDF9LCB7MSwgMX0sIHsxLCAxfSwgezEsIDF9LCB7MSwgMX0sfSwJLyogODguMmtIeiAqLworCXt7MiwgMn0sIHsyLCAyfSwgezIsIDJ9LCB7MiwgMn0sIHsxLCAyfSwgezEsIDJ9LCB7MSwgMn0sIHsxLCAxfSwgezEsIDF9LCB7MSwgMX0sIHsxLCAxfSwgezEsIDF9LH0sCS8qIDk2a0h6ICovCisJe3syLCAyfSwgezIsIDJ9LCB7MiwgMn0sIHsyLCAyfSwgezIsIDJ9LCB7MiwgMn0sIHsyLCAyfSwgezIsIDF9LCB7MiwgMX0sIHsyLCAxfSwgezIsIDF9LCB7MiwgMX0sfSwJLyogMTc2a0h6ICovCisJe3syLCAyfSwgezIsIDJ9LCB7MiwgMn0sIHsyLCAyfSwgezIsIDJ9LCB7MiwgMn0sIHsyLCAyfSwgezIsIDF9LCB7MiwgMX0sIHsyLCAxfSwgezIsIDF9LCB7MiwgMX0sfSwJLyogMTkya0h6ICovCiB9OwogCiAvKiBDb3JyZXNwb25kaW5nIHRvIHByb2Nlc3Nfb3B0aW9uICovCkBAIC01NSw3ICs1NSw3IEBACiB9OwogCiBzdGF0aWMgaW50IHN1cHBvcnRlZF9hc3JjX3JhdGVbXSA9IHsKLQkzMjAwMCwgNDQxMDAsIDQ4MDAwLCA2NDAwMCwgODgyMDAsIDk2MDAwLCAxNzY0MDAsIDE5MjAwMCwKKwk4MDAwLCAxMTAyNSwgMTYwMDAsIDIyMDUwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwLCA2NDAwMCwgODgyMDAsIDk2MDAwLCAxNzY0MDAsIDE5MjAwMCwKIH07CiAKIC8qKgpAQCAtMjg2LDYgKzI4NiwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoKG91dHJhdGUgPiA4MDAwICYmIG91dHJhdGUgPCAzMDAwMCkgJiYKKwkgICAgKG91dHJhdGUvaW5yYXRlID4gMjQgfHwgaW5yYXRlL291dHJhdGUgPiA4KSkgeworCQlwYWlyX2VycigiZXhjZWVkIHN1cHBvcnRlZCByYXRpbyByYW5nZSBbMS8yNCwgOF0gZm9yIFwKKwkJCQlpbnJhdGUvb3V0cmF0ZTogJWQvJWRcbiIsIGlucmF0ZSwgb3V0cmF0ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIFZhbGlkYXRlIGlucHV0IGFuZCBvdXRwdXQgY2xvY2sgc291cmNlcyAqLwogCWNsa19pbmRleFtJTl0gPSBjbGtfbWFwW0lOXVtjb25maWctPmluY2xrXTsKIAljbGtfaW5kZXhbT1VUXSA9IGNsa19tYXBbT1VUXVtjb25maWctPm91dGNsa107CkBAIC00NDcsNyArNDU0LDcgQEAKIAkJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBmc2xfYXNyYyAqYXNyY19wcml2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKLQlpbnQgd2lkdGggPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCWludCB3aWR0aCA9IHBhcmFtc193aWR0aChwYXJhbXMpOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IGZzbF9hc3JjX3BhaXIgKnBhaXIgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IGNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CkBAIC04NTksNiArODY2LDEwIEBACiAJCXJldHVybiBQVFJfRVJSKGFzcmNfcHJpdi0+aXBnX2Nsayk7CiAJfQogCisJYXNyY19wcml2LT5zcGJhX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAic3BiYSIpOworCWlmIChJU19FUlIoYXNyY19wcml2LT5zcGJhX2NsaykpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHNwYmEgY2xvY2tcbiIpOworCiAJZm9yIChpID0gMDsgaSA8IEFTUkNfQ0xLX01BWF9OVU07IGkrKykgewogCQlzcHJpbnRmKHRtcCwgImFzcmNrXyV4IiwgaSk7CiAJCWFzcmNfcHJpdi0+YXNyY2tfY2xrW2ldID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIHRtcCk7CkBAIC05MzksNiArOTUwLDExIEBACiAJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGFzcmNfcHJpdi0+aXBnX2Nsayk7CiAJaWYgKHJldCkKIAkJZ290byBkaXNhYmxlX21lbV9jbGs7CisJaWYgKCFJU19FUlIoYXNyY19wcml2LT5zcGJhX2NsaykpIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGFzcmNfcHJpdi0+c3BiYV9jbGspOworCQlpZiAocmV0KQorCQkJZ290byBkaXNhYmxlX2lwZ19jbGs7CisJfQogCWZvciAoaSA9IDA7IGkgPCBBU1JDX0NMS19NQVhfTlVNOyBpKyspIHsKIAkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGFzcmNfcHJpdi0+YXNyY2tfY2xrW2ldKTsKIAkJaWYgKHJldCkKQEAgLTk1MCw2ICs5NjYsOSBAQAogZGlzYWJsZV9hc3Jja19jbGs6CiAJZm9yIChpLS07IGkgPj0gMDsgaS0tKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoYXNyY19wcml2LT5hc3Jja19jbGtbaV0pOworCWlmICghSVNfRVJSKGFzcmNfcHJpdi0+c3BiYV9jbGspKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoYXNyY19wcml2LT5zcGJhX2Nsayk7CitkaXNhYmxlX2lwZ19jbGs6CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGFzcmNfcHJpdi0+aXBnX2Nsayk7CiBkaXNhYmxlX21lbV9jbGs6CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGFzcmNfcHJpdi0+bWVtX2Nsayk7CkBAIC05NjMsNiArOTgyLDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBU1JDX0NMS19NQVhfTlVNOyBpKyspCiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShhc3JjX3ByaXYtPmFzcmNrX2Nsa1tpXSk7CisJaWYgKCFJU19FUlIoYXNyY19wcml2LT5zcGJhX2NsaykpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShhc3JjX3ByaXYtPnNwYmFfY2xrKTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoYXNyY19wcml2LT5pcGdfY2xrKTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoYXNyY19wcml2LT5tZW1fY2xrKTsKIApAQCAtOTc1LDYgKzk5Niw5IEBACiB7CiAJc3RydWN0IGZzbF9hc3JjICphc3JjX3ByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAorCXJlZ21hcF9yZWFkKGFzcmNfcHJpdi0+cmVnbWFwLCBSRUdfQVNSQ0ZHLAorCQkgICAgJmFzcmNfcHJpdi0+cmVnY2FjaGVfY2ZnKTsKKwogCXJlZ2NhY2hlX2NhY2hlX29ubHkoYXNyY19wcml2LT5yZWdtYXAsIHRydWUpOwogCXJlZ2NhY2hlX21hcmtfZGlydHkoYXNyY19wcml2LT5yZWdtYXApOwogCkBAIC05OTUsNiArMTAxOSwxMCBAQAogCXJlZ2NhY2hlX2NhY2hlX29ubHkoYXNyY19wcml2LT5yZWdtYXAsIGZhbHNlKTsKIAlyZWdjYWNoZV9zeW5jKGFzcmNfcHJpdi0+cmVnbWFwKTsKIAorCXJlZ21hcF91cGRhdGVfYml0cyhhc3JjX3ByaXYtPnJlZ21hcCwgUkVHX0FTUkNGRywKKwkJCSAgIEFTUkNGR19ORFBSaV9BTExfTUFTSyB8IEFTUkNGR19QT1NUTU9EaV9BTExfTUFTSyB8CisJCQkgICBBU1JDRkdfUFJFTU9EaV9BTExfTUFTSywgYXNyY19wcml2LT5yZWdjYWNoZV9jZmcpOworCiAJLyogUmVzdGFydCBlbmFibGVkIHBhaXJzICovCiAJcmVnbWFwX3VwZGF0ZV9iaXRzKGFzcmNfcHJpdi0+cmVnbWFwLCBSRUdfQVNSQ1RSLAogCQkJICAgQVNSQ1RSX0FTUkNFaV9BTExfTUFTSywgYXNyY3RyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2FzcmMuaCBiL3NvdW5kL3NvYy9mc2wvZnNsX2FzcmMuaAppbmRleCA0YWVkNjNjLi4wZjE2M2FiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9hc3JjLmgKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfYXNyYy5oCkBAIC0xMzIsMTAgKzEzMiwxMyBAQAogI2RlZmluZSBBU1JDRkdfSU5JUlFpCQkJKDEgPDwgQVNSQ0ZHX0lOSVJRaV9TSElGVChpKSkKICNkZWZpbmUgQVNSQ0ZHX05EUFJpX1NISUZUKGkpCQkoMTggKyBpKQogI2RlZmluZSBBU1JDRkdfTkRQUmlfTUFTSyhpKQkJKDEgPDwgQVNSQ0ZHX05EUFJpX1NISUZUKGkpKQorI2RlZmluZSBBU1JDRkdfTkRQUmlfQUxMX1NISUZUCQkxOAorI2RlZmluZSBBU1JDRkdfTkRQUmlfQUxMX01BU0sJCSg3IDw8IEFTUkNGR19ORFBSaV9BTExfU0hJRlQpCiAjZGVmaW5lIEFTUkNGR19ORFBSaQkJCSgxIDw8IEFTUkNGR19ORFBSaV9TSElGVChpKSkKICNkZWZpbmUgQVNSQ0ZHX1BPU1RNT0RpX1NISUZUKGkpCSg4ICsgKGkgPDwgMikpCiAjZGVmaW5lIEFTUkNGR19QT1NUTU9EaV9XSURUSAkJMgogI2RlZmluZSBBU1JDRkdfUE9TVE1PRGlfTUFTSyhpKQkJKCgoMSA8PCBBU1JDRkdfUE9TVE1PRGlfV0lEVEgpIC0gMSkgPDwgQVNSQ0ZHX1BPU1RNT0RpX1NISUZUKGkpKQorI2RlZmluZSBBU1JDRkdfUE9TVE1PRGlfQUxMX01BU0sJKEFTUkNGR19QT1NUTU9EaV9NQVNLKDApIHwgQVNSQ0ZHX1BPU1RNT0RpX01BU0soMSkgfCBBU1JDRkdfUE9TVE1PRGlfTUFTSygyKSkKICNkZWZpbmUgQVNSQ0ZHX1BPU1RNT0QoaSwgdikJCSgodikgPDwgQVNSQ0ZHX1BPU1RNT0RpX1NISUZUKGkpKQogI2RlZmluZSBBU1JDRkdfUE9TVE1PRGlfVVAoaSkJCSgwIDw8IEFTUkNGR19QT1NUTU9EaV9TSElGVChpKSkKICNkZWZpbmUgQVNSQ0ZHX1BPU1RNT0RpX0RDT04oaSkJCSgxIDw8IEFTUkNGR19QT1NUTU9EaV9TSElGVChpKSkKQEAgLTE0Myw2ICsxNDYsNyBAQAogI2RlZmluZSBBU1JDRkdfUFJFTU9EaV9TSElGVChpKQkJKDYgKyAoaSA8PCAyKSkKICNkZWZpbmUgQVNSQ0ZHX1BSRU1PRGlfV0lEVEgJCTIKICNkZWZpbmUgQVNSQ0ZHX1BSRU1PRGlfTUFTSyhpKQkJKCgoMSA8PCBBU1JDRkdfUFJFTU9EaV9XSURUSCkgLSAxKSA8PCBBU1JDRkdfUFJFTU9EaV9TSElGVChpKSkKKyNkZWZpbmUgQVNSQ0ZHX1BSRU1PRGlfQUxMX01BU0sJCShBU1JDRkdfUFJFTU9EaV9NQVNLKDApIHwgQVNSQ0ZHX1BSRU1PRGlfTUFTSygxKSB8IEFTUkNGR19QUkVNT0RpX01BU0soMikpCiAjZGVmaW5lIEFTUkNGR19QUkVNT0QoaSwgdikJCSgodikgPDwgQVNSQ0ZHX1BSRU1PRGlfU0hJRlQoaSkpCiAjZGVmaW5lIEFTUkNGR19QUkVNT0RpX1VQKGkpCQkoMCA8PCBBU1JDRkdfUFJFTU9EaV9TSElGVChpKSkKICNkZWZpbmUgQVNSQ0ZHX1BSRU1PRGlfRENPTihpKQkJKDEgPDwgQVNSQ0ZHX1BSRU1PRGlfU0hJRlQoaSkpCkBAIC00MjYsNiArNDMwLDcgQEAKICAqIEBwYWRkcjogcGh5c2ljYWwgYWRkcmVzcyB0byB0aGUgYmFzZSBhZGRyZXNzIG9mIHJlZ2lzdGVycwogICogQG1lbV9jbGs6IGNsb2NrIHNvdXJjZSB0byBhY2Nlc3MgcmVnaXN0ZXIKICAqIEBpcGdfY2xrOiBjbG9jayBzb3VyY2UgdG8gZHJpdmUgcGVyaXBoZXJhbAorICogQHNwYmFfY2xrOiBTUEJBIGNsb2NrIChvcHRpb25hbCwgZGVwZW5kaW5nIG9uIFNvQyBkZXNpZ24pCiAgKiBAYXNyY2tfY2xrOiBjbG9jayBzb3VyY2VzIHRvIGRyaXZlciBBU1JDIGludGVybmFsIGxvZ2ljCiAgKiBAbG9jazogc3BpbiBsb2NrIGZvciByZXNvdXJjZSBwcm90ZWN0aW9uCiAgKiBAcGFpcjogcGFpciBwb2ludGVycwpAQCAtNDMzLDYgKzQzOCw3IEBACiAgKiBAY2hhbm5lbF9hdmFpbDogbm9uLW9jY3VwaWVkIGNoYW5uZWwgbnVtYmVycwogICogQGFzcmNfcmF0ZTogZGVmYXVsdCBzYW1wbGUgcmF0ZSBmb3IgQVNvQyBCYWNrLUVuZHMKICAqIEBhc3JjX3dpZHRoOiBkZWZhdWx0IHNhbXBsZSB3aWR0aCBmb3IgQVNvQyBCYWNrLUVuZHMKKyAqIEByZWdjYWNoZV9jZmc6IHN0b3JlIHJlZ2lzdGVyIHZhbHVlIG9mIFJFR19BU1JDRkcKICAqLwogc3RydWN0IGZzbF9hc3JjIHsKIAlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlfZG1hX2RhdGEgZG1hX3BhcmFtc19yeDsKQEAgLTQ0Miw2ICs0NDgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGFkZHI7CiAJc3RydWN0IGNsayAqbWVtX2NsazsKIAlzdHJ1Y3QgY2xrICppcGdfY2xrOworCXN0cnVjdCBjbGsgKnNwYmFfY2xrOwogCXN0cnVjdCBjbGsgKmFzcmNrX2Nsa1tBU1JDX0NMS19NQVhfTlVNXTsKIAlzcGlubG9ja190IGxvY2s7CiAKQEAgLTQ1MSw2ICs0NTgsOCBAQAogCiAJaW50IGFzcmNfcmF0ZTsKIAlpbnQgYXNyY193aWR0aDsKKworCXUzMiByZWdjYWNoZV9jZmc7CiB9OwogCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJpdmVyIGZzbF9hc3JjX3BsYXRmb3JtOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfZXNhaS5jIGIvc291bmQvc29jL2ZzbC9mc2xfZXNhaS5jCmluZGV4IDU5ZjIzNGUuLjI2YTkwZTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX2VzYWkuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9lc2FpLmMKQEAgLTM1LDYgKzM1LDcgQEAKICAqIEBjb3JlY2xrOiBjbG9jayBzb3VyY2UgdG8gYWNjZXNzIHJlZ2lzdGVyCiAgKiBAZXh0YWxjbGs6IGVzYWkgY2xvY2sgc291cmNlIHRvIGRlcml2ZSBIQ0ssIFNDSyBhbmQgRlMKICAqIEBmc3lzY2xrOiBzeXN0ZW0gY2xvY2sgc291cmNlIHRvIGRlcml2ZSBIQ0ssIFNDSyBhbmQgRlMKKyAqIEBzcGJhY2xrOiBTUEJBIGNsb2NrIChvcHRpb25hbCwgZGVwZW5kaW5nIG9uIFNvQyBkZXNpZ24pCiAgKiBAZmlmb19kZXB0aDogZGVwdGggb2YgdHgvcnggRklGTwogICogQHNsb3Rfd2lkdGg6IHdpZHRoIG9mIGVhY2ggREFJIHNsb3QKICAqIEBzbG90czogbnVtYmVyIG9mIHNsb3RzCkBAIC01NCw2ICs1NSw3IEBACiAJc3RydWN0IGNsayAqY29yZWNsazsKIAlzdHJ1Y3QgY2xrICpleHRhbGNsazsKIAlzdHJ1Y3QgY2xrICpmc3lzY2xrOworCXN0cnVjdCBjbGsgKnNwYmFjbGs7CiAJdTMyIGZpZm9fZGVwdGg7CiAJdTMyIHNsb3Rfd2lkdGg7CiAJdTMyIHNsb3RzOwpAQCAtNDY5LDYgKzQ3MSwxMSBAQAogCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShlc2FpX3ByaXYtPmNvcmVjbGspOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CisJaWYgKCFJU19FUlIoZXNhaV9wcml2LT5zcGJhY2xrKSkgeworCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZXNhaV9wcml2LT5zcGJhY2xrKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3NwYmFjbGs7CisJfQogCWlmICghSVNfRVJSKGVzYWlfcHJpdi0+ZXh0YWxjbGspKSB7CiAJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShlc2FpX3ByaXYtPmV4dGFsY2xrKTsKIAkJaWYgKHJldCkKQEAgLTQ5OSw2ICs1MDYsOSBAQAogCWlmICghSVNfRVJSKGVzYWlfcHJpdi0+ZXh0YWxjbGspKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZXNhaV9wcml2LT5leHRhbGNsayk7CiBlcnJfZXh0YWxjazoKKwlpZiAoIUlTX0VSUihlc2FpX3ByaXYtPnNwYmFjbGspKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZXNhaV9wcml2LT5zcGJhY2xrKTsKK2Vycl9zcGJhY2xrOgogCWNsa19kaXNhYmxlX3VucHJlcGFyZShlc2FpX3ByaXYtPmNvcmVjbGspOwogCiAJcmV0dXJuIHJldDsKQEAgLTUxMCw3ICs1MjAsNyBAQAogewogCXN0cnVjdCBmc2xfZXNhaSAqZXNhaV9wcml2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKIAlib29sIHR4ID0gc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQl1MzIgd2lkdGggPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCXUzMiB3aWR0aCA9IHBhcmFtc193aWR0aChwYXJhbXMpOwogCXUzMiBjaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOwogCXUzMiBwaW5zID0gRElWX1JPVU5EX1VQKGNoYW5uZWxzLCBlc2FpX3ByaXYtPnNsb3RzKTsKIAl1MzIgc2xvdF93aWR0aCA9IHdpZHRoOwpAQCAtNTY0LDYgKzU3NCw4IEBACiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShlc2FpX3ByaXYtPmZzeXNjbGspOwogCWlmICghSVNfRVJSKGVzYWlfcHJpdi0+ZXh0YWxjbGspKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZXNhaV9wcml2LT5leHRhbGNsayk7CisJaWYgKCFJU19FUlIoZXNhaV9wcml2LT5zcGJhY2xrKSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGVzYWlfcHJpdi0+c3BiYWNsayk7CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGVzYWlfcHJpdi0+Y29yZWNsayk7CiB9CiAKQEAgLTY1MywyMSArNjY1LDI4IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19kZWZhdWx0IGZzbF9lc2FpX3JlZ19kZWZhdWx0c1tdID0gewotCXsweDgsICAweDAwMDAwMDAwfSwKLQl7MHgxMCwgMHgwMDAwMDAwMH0sCi0JezB4MTgsIDB4MDAwMDAwMDB9LAotCXsweDk4LCAweDAwMDAwMDAwfSwKLQl7MHhkMCwgMHgwMDAwMDAwMH0sCi0JezB4ZDQsIDB4MDAwMDAwMDB9LAotCXsweGQ4LCAweDAwMDAwMDAwfSwKLQl7MHhkYywgMHgwMDAwMDAwMH0sCi0JezB4ZTAsIDB4MDAwMDAwMDB9LAotCXsweGU0LCAweDAwMDBmZmZmfSwKLQl7MHhlOCwgMHgwMDAwZmZmZn0sCi0JezB4ZWMsIDB4MDAwMGZmZmZ9LAotCXsweGYwLCAweDAwMDBmZmZmfSwKLQl7MHhmOCwgMHgwMDAwMDAwMH0sCi0JezB4ZmMsIDB4MDAwMDAwMDB9LAorCXtSRUdfRVNBSV9FVERSLAkgMHgwMDAwMDAwMH0sCisJe1JFR19FU0FJX0VDUiwJIDB4MDAwMDAwMDB9LAorCXtSRUdfRVNBSV9URkNSLAkgMHgwMDAwMDAwMH0sCisJe1JFR19FU0FJX1JGQ1IsCSAweDAwMDAwMDAwfSwKKwl7UkVHX0VTQUlfVFgwLAkgMHgwMDAwMDAwMH0sCisJe1JFR19FU0FJX1RYMSwJIDB4MDAwMDAwMDB9LAorCXtSRUdfRVNBSV9UWDIsCSAweDAwMDAwMDAwfSwKKwl7UkVHX0VTQUlfVFgzLAkgMHgwMDAwMDAwMH0sCisJe1JFR19FU0FJX1RYNCwJIDB4MDAwMDAwMDB9LAorCXtSRUdfRVNBSV9UWDUsCSAweDAwMDAwMDAwfSwKKwl7UkVHX0VTQUlfVFNSLAkgMHgwMDAwMDAwMH0sCisJe1JFR19FU0FJX1NBSUNSLCAweDAwMDAwMDAwfSwKKwl7UkVHX0VTQUlfVENSLAkgMHgwMDAwMDAwMH0sCisJe1JFR19FU0FJX1RDQ1IsCSAweDAwMDAwMDAwfSwKKwl7UkVHX0VTQUlfUkNSLAkgMHgwMDAwMDAwMH0sCisJe1JFR19FU0FJX1JDQ1IsCSAweDAwMDAwMDAwfSwKKwl7UkVHX0VTQUlfVFNNQSwgIDB4MDAwMGZmZmZ9LAorCXtSRUdfRVNBSV9UU01CLCAgMHgwMDAwZmZmZn0sCisJe1JFR19FU0FJX1JTTUEsICAweDAwMDBmZmZmfSwKKwl7UkVHX0VTQUlfUlNNQiwgIDB4MDAwMGZmZmZ9LAorCXtSRUdfRVNBSV9QUlJDLCAgMHgwMDAwMDAwMH0sCisJe1JFR19FU0FJX1BDUkMsICAweDAwMDAwMDAwfSwKIH07CiAKIHN0YXRpYyBib29sIGZzbF9lc2FpX3JlYWRhYmxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCkBAIC03MDUsMTcgKzcyNCwxMCBAQAogc3RhdGljIGJvb2wgZnNsX2VzYWlfdm9sYXRpbGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKIHsKIAlzd2l0Y2ggKHJlZykgewotCWNhc2UgUkVHX0VTQUlfRVREUjoKIAljYXNlIFJFR19FU0FJX0VSRFI6CiAJY2FzZSBSRUdfRVNBSV9FU1I6CiAJY2FzZSBSRUdfRVNBSV9URlNSOgogCWNhc2UgUkVHX0VTQUlfUkZTUjoKLQljYXNlIFJFR19FU0FJX1RYMDoKLQljYXNlIFJFR19FU0FJX1RYMToKLQljYXNlIFJFR19FU0FJX1RYMjoKLQljYXNlIFJFR19FU0FJX1RYMzoKLQljYXNlIFJFR19FU0FJX1RYNDoKLQljYXNlIFJFR19FU0FJX1RYNToKIAljYXNlIFJFR19FU0FJX1JYMDoKIAljYXNlIFJFR19FU0FJX1JYMToKIAljYXNlIFJFR19FU0FJX1JYMjoKQEAgLTgxOSw2ICs4MzEsMTEgQEAKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgZnN5cyBjbG9jazogJWxkXG4iLAogCQkJCVBUUl9FUlIoZXNhaV9wcml2LT5mc3lzY2xrKSk7CiAKKwllc2FpX3ByaXYtPnNwYmFjbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInNwYmEiKTsKKwlpZiAoSVNfRVJSKGVzYWlfcHJpdi0+c3BiYWNsaykpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHNwYmEgY2xvY2s6ICVsZFxuIiwKKwkJCQlQVFJfRVJSKGVzYWlfcHJpdi0+c3BiYWNsaykpOworCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoaXJxIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIG5vZGUgJXNcbiIsIHBkZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfc2FpLmMgYi9zb3VuZC9zb2MvZnNsL2ZzbF9zYWkuYwppbmRleCBhNDQzNWY1Li5mZWYyNjRkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9zYWkuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9zYWkuYwpAQCAtMTI2LDYgKzEyNiwxNyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBpbnQgZnNsX3NhaV9zZXRfZGFpX3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwgdTMyIHR4X21hc2ssCisJCQkJdTMyIHJ4X21hc2ssIGludCBzbG90cywgaW50IHNsb3Rfd2lkdGgpCit7CisJc3RydWN0IGZzbF9zYWkgKnNhaSA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOworCisJc2FpLT5zbG90cyA9IHNsb3RzOworCXNhaS0+c2xvdF93aWR0aCA9IHNsb3Rfd2lkdGg7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBmc2xfc2FpX3NldF9kYWlfc3lzY2xrX3RyKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKIAkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBmc2xfZGlyKQogewpAQCAtMzU0LDEzICszNjUsMjUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCh0eCAmJiBzYWktPnN5bmNocm9ub3VzW1RYXSkgfHwgKCF0eCAmJiAhc2FpLT5zeW5jaHJvbm91c1tSWF0pKSB7CisJLyoKKwkgKiAxKSBGb3IgQXN5bmNocm9ub3VzIG1vZGUsIHdlIG11c3Qgc2V0IFJDUjIgcmVnaXN0ZXIgZm9yIGNhcHR1cmUsIGFuZAorCSAqICAgIHNldCBUQ1IyIHJlZ2lzdGVyIGZvciBwbGF5YmFjay4KKwkgKiAyKSBGb3IgVHggc3luYyB3aXRoIFJ4IGNsb2NrLCB3ZSBtdXN0IHNldCBSQ1IyIHJlZ2lzdGVyIGZvciBwbGF5YmFjaworCSAqICAgIGFuZCBjYXB0dXJlLgorCSAqIDMpIEZvciBSeCBzeW5jIHdpdGggVHggY2xvY2ssIHdlIG11c3Qgc2V0IFRDUjIgcmVnaXN0ZXIgZm9yIHBsYXliYWNrCisJICogICAgYW5kIGNhcHR1cmUuCisJICogNCkgRm9yIFR4IGFuZCBSeCBhcmUgYm90aCBTeW5jaHJvbm91cyB3aXRoIGFub3RoZXIgU0FJLCB3ZSBqdXN0CisJICogICAgaWdub3JlIGl0LgorCSAqLworCWlmICgoc2FpLT5zeW5jaHJvbm91c1tUWF0gJiYgIXNhaS0+c3luY2hyb25vdXNbUlhdKSB8fAorCSAgICAoIXR4ICYmICFzYWktPnN5bmNocm9ub3VzW1JYXSkpIHsKIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKHNhaS0+cmVnbWFwLCBGU0xfU0FJX1JDUjIsCiAJCQkJICAgRlNMX1NBSV9DUjJfTVNFTF9NQVNLLAogCQkJCSAgIEZTTF9TQUlfQ1IyX01TRUwoc2FpLT5tY2xrX2lkW3R4XSkpOwogCQlyZWdtYXBfdXBkYXRlX2JpdHMoc2FpLT5yZWdtYXAsIEZTTF9TQUlfUkNSMiwKIAkJCQkgICBGU0xfU0FJX0NSMl9ESVZfTUFTSywgc2F2ZWRpdiAtIDEpOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmICgoc2FpLT5zeW5jaHJvbm91c1tSWF0gJiYgIXNhaS0+c3luY2hyb25vdXNbVFhdKSB8fAorCQkgICAodHggJiYgIXNhaS0+c3luY2hyb25vdXNbVFhdKSkgewogCQlyZWdtYXBfdXBkYXRlX2JpdHMoc2FpLT5yZWdtYXAsIEZTTF9TQUlfVENSMiwKIAkJCQkgICBGU0xfU0FJX0NSMl9NU0VMX01BU0ssCiAJCQkJICAgRlNMX1NBSV9DUjJfTVNFTChzYWktPm1jbGtfaWRbdHhdKSk7CkBAIC0zODEsMTMgKzQwNCwyMSBAQAogCXN0cnVjdCBmc2xfc2FpICpzYWkgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShjcHVfZGFpKTsKIAlib29sIHR4ID0gc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKIAl1bnNpZ25lZCBpbnQgY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKLQl1MzIgd29yZF93aWR0aCA9IHNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJdTMyIHdvcmRfd2lkdGggPSBwYXJhbXNfd2lkdGgocGFyYW1zKTsKIAl1MzIgdmFsX2NyNCA9IDAsIHZhbF9jcjUgPSAwOworCXUzMiBzbG90cyA9IChjaGFubmVscyA9PSAxKSA/IDIgOiBjaGFubmVsczsKKwl1MzIgc2xvdF93aWR0aCA9IHdvcmRfd2lkdGg7CiAJaW50IHJldDsKIAorCWlmIChzYWktPnNsb3RzKQorCQlzbG90cyA9IHNhaS0+c2xvdHM7CisKKwlpZiAoc2FpLT5zbG90X3dpZHRoKQorCQlzbG90X3dpZHRoID0gc2FpLT5zbG90X3dpZHRoOworCiAJaWYgKCFzYWktPmlzX3NsYXZlX21vZGUpIHsKIAkJcmV0ID0gZnNsX3NhaV9zZXRfYmNsayhjcHVfZGFpLCB0eCwKLQkJCTIgKiB3b3JkX3dpZHRoICogcGFyYW1zX3JhdGUocGFyYW1zKSk7CisJCQkJc2xvdHMgKiBzbG90X3dpZHRoICogcGFyYW1zX3JhdGUocGFyYW1zKSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC0zOTksMjEgKzQzMCw0OSBAQAogCiAJCQlzYWktPm1jbGtfc3RyZWFtcyB8PSBCSVQoc3Vic3RyZWFtLT5zdHJlYW0pOwogCQl9Ci0KIAl9CiAKIAlpZiAoIXNhaS0+aXNfZHNwX21vZGUpCi0JCXZhbF9jcjQgfD0gRlNMX1NBSV9DUjRfU1lXRCh3b3JkX3dpZHRoKTsKKwkJdmFsX2NyNCB8PSBGU0xfU0FJX0NSNF9TWVdEKHNsb3Rfd2lkdGgpOwogCi0JdmFsX2NyNSB8PSBGU0xfU0FJX0NSNV9XTlcod29yZF93aWR0aCk7Ci0JdmFsX2NyNSB8PSBGU0xfU0FJX0NSNV9XMFcod29yZF93aWR0aCk7CisJdmFsX2NyNSB8PSBGU0xfU0FJX0NSNV9XTlcoc2xvdF93aWR0aCk7CisJdmFsX2NyNSB8PSBGU0xfU0FJX0NSNV9XMFcoc2xvdF93aWR0aCk7CiAKIAlpZiAoc2FpLT5pc19sc2JfZmlyc3QpCiAJCXZhbF9jcjUgfD0gRlNMX1NBSV9DUjVfRkJUKDApOwogCWVsc2UKIAkJdmFsX2NyNSB8PSBGU0xfU0FJX0NSNV9GQlQod29yZF93aWR0aCAtIDEpOwogCi0JdmFsX2NyNCB8PSBGU0xfU0FJX0NSNF9GUlNaKGNoYW5uZWxzKTsKKwl2YWxfY3I0IHw9IEZTTF9TQUlfQ1I0X0ZSU1ooc2xvdHMpOworCisJLyoKKwkgKiBGb3IgU0FJIG1hc3RlciBtb2RlLCB3aGVuIFR4KFJ4KSBzeW5jIHdpdGggUngoVHgpIGNsb2NrLCBSeChUeCkgd2lsbAorCSAqIGdlbmVyYXRlIGJjbGsgYW5kIGZyYW1lIGNsb2NrIGZvciBUeChSeCksIHdlIHNob3VsZCBzZXQgUkNSNChUQ1I0KSwKKwkgKiBSQ1I1KFRDUjUpIGFuZCBSTVIoVE1SKSBmb3IgcGxheWJhY2soY2FwdHVyZSksIG9yIHRoZXJlIHdpbGwgYmUgc3luYworCSAqIGVycm9yLgorCSAqLworCisJaWYgKCFzYWktPmlzX3NsYXZlX21vZGUpIHsKKwkJaWYgKCFzYWktPnN5bmNocm9ub3VzW1RYXSAmJiBzYWktPnN5bmNocm9ub3VzW1JYXSAmJiAhdHgpIHsKKwkJCXJlZ21hcF91cGRhdGVfYml0cyhzYWktPnJlZ21hcCwgRlNMX1NBSV9UQ1I0LAorCQkJCUZTTF9TQUlfQ1I0X1NZV0RfTUFTSyB8IEZTTF9TQUlfQ1I0X0ZSU1pfTUFTSywKKwkJCQl2YWxfY3I0KTsKKwkJCXJlZ21hcF91cGRhdGVfYml0cyhzYWktPnJlZ21hcCwgRlNMX1NBSV9UQ1I1LAorCQkJCUZTTF9TQUlfQ1I1X1dOV19NQVNLIHwgRlNMX1NBSV9DUjVfVzBXX01BU0sgfAorCQkJCUZTTF9TQUlfQ1I1X0ZCVF9NQVNLLCB2YWxfY3I1KTsKKwkJCXJlZ21hcF93cml0ZShzYWktPnJlZ21hcCwgRlNMX1NBSV9UTVIsCisJCQkJfjBVTCAtICgoMSA8PCBjaGFubmVscykgLSAxKSk7CisJCX0gZWxzZSBpZiAoIXNhaS0+c3luY2hyb25vdXNbUlhdICYmIHNhaS0+c3luY2hyb25vdXNbVFhdICYmIHR4KSB7CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMoc2FpLT5yZWdtYXAsIEZTTF9TQUlfUkNSNCwKKwkJCQlGU0xfU0FJX0NSNF9TWVdEX01BU0sgfCBGU0xfU0FJX0NSNF9GUlNaX01BU0ssCisJCQkJdmFsX2NyNCk7CisJCQlyZWdtYXBfdXBkYXRlX2JpdHMoc2FpLT5yZWdtYXAsIEZTTF9TQUlfUkNSNSwKKwkJCQlGU0xfU0FJX0NSNV9XTldfTUFTSyB8IEZTTF9TQUlfQ1I1X1cwV19NQVNLIHwKKwkJCQlGU0xfU0FJX0NSNV9GQlRfTUFTSywgdmFsX2NyNSk7CisJCQlyZWdtYXBfd3JpdGUoc2FpLT5yZWdtYXAsIEZTTF9TQUlfUk1SLAorCQkJCX4wVUwgLSAoKDEgPDwgY2hhbm5lbHMpIC0gMSkpOworCQl9CisJfQogCiAJcmVnbWFwX3VwZGF0ZV9iaXRzKHNhaS0+cmVnbWFwLCBGU0xfU0FJX3hDUjQodHgpLAogCQkJICAgRlNMX1NBSV9DUjRfU1lXRF9NQVNLIHwgRlNMX1NBSV9DUjRfRlJTWl9NQVNLLApAQCAtNDU0LDcgKzUxMyw4IEBACiAJICogUnggc3luYyB3aXRoIFR4IGNsb2NrczogQ2xlYXIgU1lOQyBmb3IgVHgsIHNldCBpdCBmb3IgUnguCiAJICogVHggc3luYyB3aXRoIFJ4IGNsb2NrczogQ2xlYXIgU1lOQyBmb3IgUngsIHNldCBpdCBmb3IgVHguCiAJICovCi0JcmVnbWFwX3VwZGF0ZV9iaXRzKHNhaS0+cmVnbWFwLCBGU0xfU0FJX1RDUjIsIEZTTF9TQUlfQ1IyX1NZTkMsIDApOworCXJlZ21hcF91cGRhdGVfYml0cyhzYWktPnJlZ21hcCwgRlNMX1NBSV9UQ1IyLCBGU0xfU0FJX0NSMl9TWU5DLAorCQkgICAgICAgICAgIHNhaS0+c3luY2hyb25vdXNbVFhdID8gRlNMX1NBSV9DUjJfU1lOQyA6IDApOwogCXJlZ21hcF91cGRhdGVfYml0cyhzYWktPnJlZ21hcCwgRlNMX1NBSV9SQ1IyLCBGU0xfU0FJX0NSMl9TWU5DLAogCQkJICAgc2FpLT5zeW5jaHJvbm91c1tSWF0gPyBGU0xfU0FJX0NSMl9TWU5DIDogMCk7CiAKQEAgLTUwNCw2ICs1NjQsMjQgQEAKIAkJCQkJICAgRlNMX1NBSV9DU1JfRlIsIEZTTF9TQUlfQ1NSX0ZSKTsKIAkJCXJlZ21hcF91cGRhdGVfYml0cyhzYWktPnJlZ21hcCwgRlNMX1NBSV9SQ1NSLAogCQkJCQkgICBGU0xfU0FJX0NTUl9GUiwgRlNMX1NBSV9DU1JfRlIpOworCisJCQkvKgorCQkJICogRm9yIHNhaSBtYXN0ZXIgbW9kZSwgYWZ0ZXIgc2V2ZXJhbCBvcGVuL2Nsb3NlIHNhaSwKKwkJCSAqIHRoZXJlIHdpbGwgYmUgbm8gZnJhbWUgY2xvY2ssIGFuZCBjYW4ndCByZWNvdmVyCisJCQkgKiBhbnltb3JlLiBBZGQgc29mdHdhcmUgcmVzZXQgdG8gZml4IHRoaXMgaXNzdWUuCisJCQkgKiBUaGlzIGlzIGEgaGFyZHdhcmUgYnVnLCBhbmQgd2lsbCBiZSBmaXggaW4gdGhlCisJCQkgKiBuZXh0IHNhaSB2ZXJzaW9uLgorCQkJICovCisJCQlpZiAoIXNhaS0+aXNfc2xhdmVfbW9kZSkgeworCQkJCS8qIFNvZnR3YXJlIFJlc2V0IGZvciBib3RoIFR4IGFuZCBSeCAqLworCQkJCXJlZ21hcF93cml0ZShzYWktPnJlZ21hcCwKKwkJCQkJICAgICBGU0xfU0FJX1RDU1IsIEZTTF9TQUlfQ1NSX1NSKTsKKwkJCQlyZWdtYXBfd3JpdGUoc2FpLT5yZWdtYXAsCisJCQkJCSAgICAgRlNMX1NBSV9SQ1NSLCBGU0xfU0FJX0NTUl9TUik7CisJCQkJLyogQ2xlYXIgU1IgYml0IHRvIGZpbmlzaCB0aGUgcmVzZXQgKi8KKwkJCQlyZWdtYXBfd3JpdGUoc2FpLT5yZWdtYXAsIEZTTF9TQUlfVENTUiwgMCk7CisJCQkJcmVnbWFwX3dyaXRlKHNhaS0+cmVnbWFwLCBGU0xfU0FJX1JDU1IsIDApOworCQkJfQogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC01NTAsNiArNjI4LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGZzbF9zYWlfcGNtX2RhaV9vcHMgPSB7CiAJLnNldF9zeXNjbGsJPSBmc2xfc2FpX3NldF9kYWlfc3lzY2xrLAogCS5zZXRfZm10CT0gZnNsX3NhaV9zZXRfZGFpX2ZtdCwKKwkuc2V0X3RkbV9zbG90CT0gZnNsX3NhaV9zZXRfZGFpX3RkbV9zbG90LAogCS5od19wYXJhbXMJPSBmc2xfc2FpX2h3X3BhcmFtcywKIAkuaHdfZnJlZQk9IGZzbF9zYWlfaHdfZnJlZSwKIAkudHJpZ2dlcgk9IGZzbF9zYWlfdHJpZ2dlciwKQEAgLTYwOCw2ICs2ODcsMjIgQEAKIAkubmFtZSAgICAgICAgICAgPSAiZnNsLXNhaSIsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ19kZWZhdWx0IGZzbF9zYWlfcmVnX2RlZmF1bHRzW10gPSB7CisJe0ZTTF9TQUlfVENSMSwgMH0sCisJe0ZTTF9TQUlfVENSMiwgMH0sCisJe0ZTTF9TQUlfVENSMywgMH0sCisJe0ZTTF9TQUlfVENSNCwgMH0sCisJe0ZTTF9TQUlfVENSNSwgMH0sCisJe0ZTTF9TQUlfVERSLCAgMH0sCisJe0ZTTF9TQUlfVE1SLCAgMH0sCisJe0ZTTF9TQUlfUkNSMSwgMH0sCisJe0ZTTF9TQUlfUkNSMiwgMH0sCisJe0ZTTF9TQUlfUkNSMywgMH0sCisJe0ZTTF9TQUlfUkNSNCwgMH0sCisJe0ZTTF9TQUlfUkNSNSwgMH0sCisJe0ZTTF9TQUlfUk1SLCAgMH0sCit9OworCiBzdGF0aWMgYm9vbCBmc2xfc2FpX3JlYWRhYmxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJc3dpdGNoIChyZWcpIHsKQEAgLTY0MSwxMyArNzM2LDExIEBACiAJY2FzZSBGU0xfU0FJX1JDU1I6CiAJY2FzZSBGU0xfU0FJX1RGUjoKIAljYXNlIEZTTF9TQUlfUkZSOgotCWNhc2UgRlNMX1NBSV9URFI6CiAJY2FzZSBGU0xfU0FJX1JEUjoKIAkJcmV0dXJuIHRydWU7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQogfQogCiBzdGF0aWMgYm9vbCBmc2xfc2FpX3dyaXRlYWJsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQpAQCAtNjgwLDYgKzc3Myw4IEBACiAJLnZhbF9iaXRzID0gMzIsCiAKIAkubWF4X3JlZ2lzdGVyID0gRlNMX1NBSV9STVIsCisJLnJlZ19kZWZhdWx0cyA9IGZzbF9zYWlfcmVnX2RlZmF1bHRzLAorCS5udW1fcmVnX2RlZmF1bHRzID0gQVJSQVlfU0laRShmc2xfc2FpX3JlZ19kZWZhdWx0cyksCiAJLnJlYWRhYmxlX3JlZyA9IGZzbF9zYWlfcmVhZGFibGVfcmVnLAogCS52b2xhdGlsZV9yZWcgPSBmc2xfc2FpX3ZvbGF0aWxlX3JlZywKIAkud3JpdGVhYmxlX3JlZyA9IGZzbF9zYWlfd3JpdGVhYmxlX3JlZywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX3NhaS5oIGIvc291bmQvc29jL2ZzbC9mc2xfc2FpLmgKaW5kZXggYjk1ZmJjMy4uZDllZDdiZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfc2FpLmgKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfc2FpLmgKQEAgLTE0Myw2ICsxNDMsOSBAQAogCiAJdW5zaWduZWQgaW50IG1jbGtfaWRbMl07CiAJdW5zaWduZWQgaW50IG1jbGtfc3RyZWFtczsKKwl1bnNpZ25lZCBpbnQgc2xvdHM7CisJdW5zaWduZWQgaW50IHNsb3Rfd2lkdGg7CisKIAlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlfZG1hX2RhdGEgZG1hX3BhcmFtc19yeDsKIAlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlfZG1hX2RhdGEgZG1hX3BhcmFtc190eDsKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9zcGRpZi5jIGIvc291bmQvc29jL2ZzbC9mc2xfc3BkaWYuYwppbmRleCAzZDU5YmI2Li4xNTE4NDlmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9zcGRpZi5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NwZGlmLmMKQEAgLTg4LDYgKzg4LDcgQEAKICAqIEByeGNsazogcnggY2xvY2sgc291cmNlcyBmb3IgY2FwdHVyZQogICogQGNvcmVjbGs6IGNvcmUgY2xvY2sgZm9yIHJlZ2lzdGVyIGFjY2VzcyB2aWEgRE1BCiAgKiBAc3lzY2xrOiBzeXN0ZW0gY2xvY2sgZm9yIHJ4IGNsb2NrIHJhdGUgbWVhc3VyZW1lbnQKKyAqIEBzcGJhY2xrOiBTUEJBIGNsb2NrIChvcHRpb25hbCwgZGVwZW5kaW5nIG9uIFNvQyBkZXNpZ24pCiAgKiBAZG1hX3BhcmFtc190eDogRE1BIHBhcmFtZXRlcnMgZm9yIHRyYW5zbWl0IGNoYW5uZWwKICAqIEBkbWFfcGFyYW1zX3J4OiBETUEgcGFyYW1ldGVycyBmb3IgcmVjZWl2ZSBjaGFubmVsCiAgKi8KQEAgLTEwNiw2ICsxMDcsNyBAQAogCXN0cnVjdCBjbGsgKnJ4Y2xrOwogCXN0cnVjdCBjbGsgKmNvcmVjbGs7CiAJc3RydWN0IGNsayAqc3lzY2xrOworCXN0cnVjdCBjbGsgKnNwYmFjbGs7CiAJc3RydWN0IHNuZF9kbWFlbmdpbmVfZGFpX2RtYV9kYXRhIGRtYV9wYXJhbXNfdHg7CiAJc3RydWN0IHNuZF9kbWFlbmdpbmVfZGFpX2RtYV9kYXRhIGRtYV9wYXJhbXNfcng7CiAJLyogcmVnY2FjaGUgZm9yIFNSUEMgKi8KQEAgLTQ3NCw2ICs0NzYsMTQgQEAKIAkJCXJldHVybiByZXQ7CiAJCX0KIAorCQlpZiAoIUlTX0VSUihzcGRpZl9wcml2LT5zcGJhY2xrKSkgeworCQkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHNwZGlmX3ByaXYtPnNwYmFjbGspOworCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgc3BiYSBjbG9ja1xuIik7CisJCQkJZ290byBlcnJfc3BiYWNsazsKKwkJCX0KKwkJfQorCiAJCXJldCA9IHNwZGlmX3NvZnRyZXNldChzcGRpZl9wcml2KTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHNvZnQgcmVzZXRcbiIpOwpAQCAtNTE1LDYgKzUyNSw5IEBACiAJZm9yIChpLS07IGkgPj0gMDsgaS0tKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoc3BkaWZfcHJpdi0+dHhjbGtbaV0pOwogZXJyOgorCWlmICghSVNfRVJSKHNwZGlmX3ByaXYtPnNwYmFjbGspKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoc3BkaWZfcHJpdi0+c3BiYWNsayk7CitlcnJfc3BiYWNsazoKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoc3BkaWZfcHJpdi0+Y29yZWNsayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNTQ4LDYgKzU2MSw4IEBACiAJCXNwZGlmX2ludHJfc3RhdHVzX2NsZWFyKHNwZGlmX3ByaXYpOwogCQlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBSRUdfU1BESUZfU0NSLAogCQkJCVNDUl9MT1dfUE9XRVIsIFNDUl9MT1dfUE9XRVIpOworCQlpZiAoIUlTX0VSUihzcGRpZl9wcml2LT5zcGJhY2xrKSkKKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShzcGRpZl9wcml2LT5zcGJhY2xrKTsKIAkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNwZGlmX3ByaXYtPmNvcmVjbGspOwogCX0KIH0KQEAgLTEwMDYsMTIgKzEwMjEsMTQgQEAKIAogLyogRlNMIFNQRElGIFJFR01BUCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfZGVmYXVsdCBmc2xfc3BkaWZfcmVnX2RlZmF1bHRzW10gPSB7Ci0JezB4MCwgIDB4MDAwMDA0MDB9LAotCXsweDQsICAweDAwMDAwMDAwfSwKLQl7MHhjLCAgMHgwMDAwMDAwMH0sCi0JezB4MzQsIDB4MDAwMDAwMDB9LAotCXsweDM4LCAweDAwMDAwMDAwfSwKLQl7MHg1MCwgMHgwMDAyMGYwMH0sCisJe1JFR19TUERJRl9TQ1IsICAgIDB4MDAwMDA0MDB9LAorCXtSRUdfU1BESUZfU1JDRCwgICAweDAwMDAwMDAwfSwKKwl7UkVHX1NQRElGX1NJRSwJICAgMHgwMDAwMDAwMH0sCisJe1JFR19TUERJRl9TVEwsCSAgIDB4MDAwMDAwMDB9LAorCXtSRUdfU1BESUZfU1RSLAkgICAweDAwMDAwMDAwfSwKKwl7UkVHX1NQRElGX1NUQ1NDSCwgMHgwMDAwMDAwMH0sCisJe1JFR19TUERJRl9TVENTQ0wsIDB4MDAwMDAwMDB9LAorCXtSRUdfU1BESUZfU1RDLAkgICAweDAwMDIwZjAwfSwKIH07CiAKIHN0YXRpYyBib29sIGZzbF9zcGRpZl9yZWFkYWJsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQpAQCAtMTA0OSw4ICsxMDY2LDYgQEAKIAljYXNlIFJFR19TUERJRl9TUkNTTDoKIAljYXNlIFJFR19TUERJRl9TUlU6CiAJY2FzZSBSRUdfU1BESUZfU1JROgotCWNhc2UgUkVHX1NQRElGX1NUTDoKLQljYXNlIFJFR19TUERJRl9TVFI6CiAJY2FzZSBSRUdfU1BESUZfU1JGTToKIAkJcmV0dXJuIHRydWU7CiAJZGVmYXVsdDoKQEAgLTEyNjEsNiArMTI3NiwxMCBAQAogCQlyZXR1cm4gUFRSX0VSUihzcGRpZl9wcml2LT5jb3JlY2xrKTsKIAl9CiAKKwlzcGRpZl9wcml2LT5zcGJhY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJzcGJhIik7CisJaWYgKElTX0VSUihzcGRpZl9wcml2LT5zcGJhY2xrKSkKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vIHNwYmEgY2xvY2sgaW4gZGV2aWNldHJlZVxuIik7CisKIAkvKiBTZWxlY3QgY2xvY2sgc291cmNlIGZvciByeC90eCBjbG9jayAqLwogCXNwZGlmX3ByaXYtPnJ4Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJyeHR4MSIpOwogCWlmIChJU19FUlIoc3BkaWZfcHJpdi0+cnhjbGspKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9zc2kuYyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jCmluZGV4IDk1ZDIzOTIuLjQwZGZkOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jCkBAIC0xMTMsMTcgKzExMywxNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfZGVmYXVsdCBmc2xfc3NpX3JlZ19kZWZhdWx0c1tdID0gewotCXsweDEwLCAweDAwMDAwMDAwfSwKLQl7MHgxOCwgMHgwMDAwMzAwM30sCi0JezB4MWMsIDB4MDAwMDAyMDB9LAotCXsweDIwLCAweDAwMDAwMjAwfSwKLQl7MHgyNCwgMHgwMDA0MDAwMH0sCi0JezB4MjgsIDB4MDAwNDAwMDB9LAotCXsweDM4LCAweDAwMDAwMDAwfSwKLQl7MHg0OCwgMHgwMDAwMDAwMH0sCi0JezB4NGMsIDB4MDAwMDAwMDB9LAotCXsweDU0LCAweDAwMDAwMDAwfSwKLQl7MHg1OCwgMHgwMDAwMDAwMH0sCisJe0NDU1JfU1NJX1NDUiwgICAgIDB4MDAwMDAwMDB9LAorCXtDQ1NSX1NTSV9TSUVSLCAgICAweDAwMDAzMDAzfSwKKwl7Q0NTUl9TU0lfU1RDUiwgICAgMHgwMDAwMDIwMH0sCisJe0NDU1JfU1NJX1NSQ1IsICAgIDB4MDAwMDAyMDB9LAorCXtDQ1NSX1NTSV9TVENDUiwgICAweDAwMDQwMDAwfSwKKwl7Q0NTUl9TU0lfU1JDQ1IsICAgMHgwMDA0MDAwMH0sCisJe0NDU1JfU1NJX1NBQ05ULCAgIDB4MDAwMDAwMDB9LAorCXtDQ1NSX1NTSV9TVE1TSywgICAweDAwMDAwMDAwfSwKKwl7Q0NTUl9TU0lfU1JNU0ssICAgMHgwMDAwMDAwMH0sCisJe0NDU1JfU1NJX1NBQ0NFTiwgIDB4MDAwMDAwMDB9LAorCXtDQ1NSX1NTSV9TQUNDRElTLCAweDAwMDAwMDAwfSwKIH07CiAKIHN0YXRpYyBib29sIGZzbF9zc2lfcmVhZGFibGVfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKQEAgLTE0Niw2ICsxNDYsNyBAQAogCWNhc2UgQ0NTUl9TU0lfU1JYMToKIAljYXNlIENDU1JfU1NJX1NJU1I6CiAJY2FzZSBDQ1NSX1NTSV9TRkNTUjoKKwljYXNlIENDU1JfU1NJX1NBQ05UOgogCWNhc2UgQ0NTUl9TU0lfU0FDQUREOgogCWNhc2UgQ0NTUl9TU0lfU0FDREFUOgogCWNhc2UgQ0NTUl9TU0lfU0FUQUc6CkBAIC0xNTYsNiArMTU3LDIxIEBACiAJfQogfQogCitzdGF0aWMgYm9vbCBmc2xfc3NpX3ByZWNpb3VzX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIENDU1JfU1NJX1NSWDA6CisJY2FzZSBDQ1NSX1NTSV9TUlgxOgorCWNhc2UgQ0NTUl9TU0lfU0lTUjoKKwljYXNlIENDU1JfU1NJX1NBQ0FERDoKKwljYXNlIENDU1JfU1NJX1NBQ0RBVDoKKwljYXNlIENDU1JfU1NJX1NBVEFHOgorCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCiBzdGF0aWMgYm9vbCBmc2xfc3NpX3dyaXRlYWJsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXN3aXRjaCAocmVnKSB7CkBAIC0xNzgsNiArMTk0LDcgQEAKIAkubnVtX3JlZ19kZWZhdWx0cyA9IEFSUkFZX1NJWkUoZnNsX3NzaV9yZWdfZGVmYXVsdHMpLAogCS5yZWFkYWJsZV9yZWcgPSBmc2xfc3NpX3JlYWRhYmxlX3JlZywKIAkudm9sYXRpbGVfcmVnID0gZnNsX3NzaV92b2xhdGlsZV9yZWcsCisJLnByZWNpb3VzX3JlZyA9IGZzbF9zc2lfcHJlY2lvdXNfcmVnLAogCS53cml0ZWFibGVfcmVnID0gZnNsX3NzaV93cml0ZWFibGVfcmVnLAogCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfUkJUUkVFLAogfTsKQEAgLTIzOSw4ICsyNTYsOSBAQAogCXVuc2lnbmVkIGludCBiYXVkY2xrX3N0cmVhbXM7CiAJdW5zaWduZWQgaW50IGJpdGNsa19mcmVxOwogCi0JLypyZWdjYWNoZSBmb3IgU0ZDU1IqLworCS8qIHJlZ2NhY2hlIGZvciB2b2xhdGlsZSByZWdzICovCiAJdTMyIHJlZ2NhY2hlX3NmY3NyOworCXUzMiByZWdjYWNoZV9zYWNudDsKIAogCS8qIERNQSBwYXJhbXMgKi8KIAlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlfZG1hX2RhdGEgZG1hX3BhcmFtc190eDsKQEAgLTc2Nyw4ICs3ODUsNyBAQAogCXN0cnVjdCBmc2xfc3NpX3ByaXZhdGUgKnNzaV9wcml2YXRlID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoY3B1X2RhaSk7CiAJc3RydWN0IHJlZ21hcCAqcmVncyA9IHNzaV9wcml2YXRlLT5yZWdzOwogCXVuc2lnbmVkIGludCBjaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhod19wYXJhbXMpOwotCXVuc2lnbmVkIGludCBzYW1wbGVfc2l6ZSA9Ci0JCXNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKSk7CisJdW5zaWduZWQgaW50IHNhbXBsZV9zaXplID0gcGFyYW1zX3dpZHRoKGh3X3BhcmFtcyk7CiAJdTMyIHdsID0gQ0NTUl9TU0lfU3hDQ1JfV0woc2FtcGxlX3NpemUpOwogCWludCByZXQ7CiAJdTMyIHNjcl92YWw7CkBAIC0xNTg4LDYgKzE2MDUsOCBAQAogCiAJcmVnbWFwX3JlYWQocmVncywgQ0NTUl9TU0lfU0ZDU1IsCiAJCQkmc3NpX3ByaXZhdGUtPnJlZ2NhY2hlX3NmY3NyKTsKKwlyZWdtYXBfcmVhZChyZWdzLCBDQ1NSX1NTSV9TQUNOVCwKKwkJCSZzc2lfcHJpdmF0ZS0+cmVnY2FjaGVfc2FjbnQpOwogCiAJcmVnY2FjaGVfY2FjaGVfb25seShyZWdzLCB0cnVlKTsKIAlyZWdjYWNoZV9tYXJrX2RpcnR5KHJlZ3MpOwpAQCAtMTYwNiw2ICsxNjI1LDggQEAKIAkJCUNDU1JfU1NJX1NGQ1NSX1JGV00xX01BU0sgfCBDQ1NSX1NTSV9TRkNTUl9URldNMV9NQVNLIHwKIAkJCUNDU1JfU1NJX1NGQ1NSX1JGV00wX01BU0sgfCBDQ1NSX1NTSV9TRkNTUl9URldNMF9NQVNLLAogCQkJc3NpX3ByaXZhdGUtPnJlZ2NhY2hlX3NmY3NyKTsKKwlyZWdtYXBfd3JpdGUocmVncywgQ0NTUl9TU0lfU0FDTlQsCisJCQlzc2lfcHJpdmF0ZS0+cmVnY2FjaGVfc2FjbnQpOwogCiAJcmV0dXJuIHJlZ2NhY2hlX3N5bmMocmVncyk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2lteC1wY20tZG1hLmMgYi9zb3VuZC9zb2MvZnNsL2lteC1wY20tZG1hLmMKaW5kZXggMWZjMDFlZC4uZjNkM2QxZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9pbXgtcGNtLWRtYS5jCisrKyBiL3NvdW5kL3NvYy9mc2wvaW14LXBjbS1kbWEuYwpAQCAtNjIsNiArNjIsOCBAQAogCiAJY29uZmlnID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCiAJCQlzaXplb2Yoc3RydWN0IHNuZF9kbWFlbmdpbmVfcGNtX2NvbmZpZyksIEdGUF9LRVJORUwpOworCWlmICghY29uZmlnKQorCQlyZXR1cm4gLUVOT01FTTsKIAkqY29uZmlnID0gaW14X2RtYWVuZ2luZV9wY21fY29uZmlnOwogCWlmIChzaXplKQogCQljb25maWctPnByZWFsbG9jX2J1ZmZlcl9zaXplID0gc2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvaW14LXBjbS1maXEuYyBiL3NvdW5kL3NvYy9mc2wvaW14LXBjbS1maXEuYwppbmRleCA3YWJmNmEwLi40OWQ3NTEzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2lteC1wY20tZmlxLmMKKysrIGIvc291bmQvc29jL2ZzbC9pbXgtcGNtLWZpcS5jCkBAIC0yMjAsOSArMjIwLDkgQEAKIAlyZXQgPSBkbWFfbW1hcF93cml0ZWNvbWJpbmUoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldiwgdm1hLAogCQlydW50aW1lLT5kbWFfYXJlYSwgcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CiAKLQlwcl9kZWJ1ZygiJXM6IHJldDogJWQgJXAgMHglMDh4IDB4JTA4eFxuIiwgX19mdW5jX18sIHJldCwKKwlwcl9kZWJ1ZygiJXM6IHJldDogJWQgJXAgJXBhZCAweCUwOHhcbiIsIF9fZnVuY19fLCByZXQsCiAJCQlydW50aW1lLT5kbWFfYXJlYSwKLQkJCXJ1bnRpbWUtPmRtYV9hZGRyLAorCQkJJnJ1bnRpbWUtPmRtYV9hZGRyLAogCQkJcnVudGltZS0+ZG1hX2J5dGVzKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9pbXgtd204OTYyLmMgYi9zb3VuZC9zb2MvZnNsL2lteC13bTg5NjIuYwppbmRleCBiMzhiOThjLi4yMDFhNzBkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2lteC13bTg5NjIuYworKysgYi9zb3VuZC9zb2MvZnNsL2lteC13bTg5NjIuYwpAQCAtNjksMTMgKzY5LDE2IEBACiAJCQkJCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAkJCQkJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBjYXJkLT5ydGRbMF0uY29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CiAJc3RydWN0IGlteF9wcml2ICpwcml2ID0gJmNhcmRfcHJpdjsKIAlzdHJ1Y3QgaW14X3dtODk2Ml9kYXRhICpkYXRhID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKGNhcmQpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwcml2LT5wZGV2LT5kZXY7CiAJdW5zaWduZWQgaW50IHBsbF9vdXQ7CiAJaW50IHJldDsKIAorCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rWzBdLm5hbWUpOworCWNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwogCWlmIChkYXBtLT5kZXYgIT0gY29kZWNfZGFpLT5kZXYpCiAJCXJldHVybiAwOwogCkBAIC0xMzUsMTIgKzEzOCwxNSBAQAogCiBzdGF0aWMgaW50IGlteF93bTg5NjJfbGF0ZV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gY2FyZC0+cnRkWzBdLmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpOwogCXN0cnVjdCBpbXhfcHJpdiAqcHJpdiA9ICZjYXJkX3ByaXY7CiAJc3RydWN0IGlteF93bTg5NjJfZGF0YSAqZGF0YSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcHJpdi0+cGRldi0+ZGV2OwogCWludCByZXQ7CiAKKwlydGQgPSBzbmRfc29jX2dldF9wY21fcnVudGltZShjYXJkLCBjYXJkLT5kYWlfbGlua1swXS5uYW1lKTsKKwljb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004OTYyX1NZU0NMS19NQ0xLLAogCQkJZGF0YS0+Y2xrX2ZyZXF1ZW5jeSwgU05EX1NPQ19DTE9DS19JTik7CiAJaWYgKHJldCA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jIGIvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYwppbmRleCA2ZjIzNmYxLi5kZGY0OWYzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCisrKyBiL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKQEAgLTE4OSw4ICsxODksNyBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXYtPmRldi5wYXJlbnQ7CiAJLyogc3NpX3BkZXYgaXMgdGhlIHBsYXRmb3JtIGRldmljZSBmb3IgdGhlIFNTSSBub2RlIHRoYXQgcHJvYmVkIHVzICovCi0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc3NpX3BkZXYgPQotCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNzaV9wZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHNzaV9wZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvZGVjX25wID0gTlVMTDsKIAlzdHJ1Y3QgbXBjODYxMF9ocGNkX2RhdGEgKm1hY2hpbmVfZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvcDEwMjJfZHMuYyBiL3NvdW5kL3NvYy9mc2wvcDEwMjJfZHMuYwppbmRleCA3NDdhYWIwLi5hMWY3ODBlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL3AxMDIyX2RzLmMKKysrIGIvc291bmQvc29jL2ZzbC9wMTAyMl9kcy5jCkBAIC0xOTksOCArMTk5LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZGV2LT5kZXYucGFyZW50OwogCS8qIHNzaV9wZGV2IGlzIHRoZSBwbGF0Zm9ybSBkZXZpY2UgZm9yIHRoZSBTU0kgbm9kZSB0aGF0IHByb2JlZCB1cyAqLwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNzaV9wZGV2ID0KLQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzc2lfcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBzc2lfcGRldi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IGRldmljZV9ub2RlICpjb2RlY19ucCA9IE5VTEw7CiAJc3RydWN0IG1hY2hpbmVfZGF0YSAqbWRhdGE7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL3AxMDIyX3Jkay5jIGIvc291bmQvc29jL2ZzbC9wMTAyMl9yZGsuYwppbmRleCAxZGQ0OWU1Li5kNGQ4OGE4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL3AxMDIyX3Jkay5jCisrKyBiL3NvdW5kL3NvYy9mc2wvcDEwMjJfcmRrLmMKQEAgLTIwMyw4ICsyMDMsNyBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXYtPmRldi5wYXJlbnQ7CiAJLyogc3NpX3BkZXYgaXMgdGhlIHBsYXRmb3JtIGRldmljZSBmb3IgdGhlIFNTSSBub2RlIHRoYXQgcHJvYmVkIHVzICovCi0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc3NpX3BkZXYgPQotCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNzaV9wZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHNzaV9wZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvZGVjX25wID0gTlVMTDsKIAlzdHJ1Y3QgbWFjaGluZV9kYXRhICptZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9nZW5lcmljL3NpbXBsZS1jYXJkLmMgYi9zb3VuZC9zb2MvZ2VuZXJpYy9zaW1wbGUtY2FyZC5jCmluZGV4IDU0YzMzMjAuLjFkZWQ4ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9nZW5lcmljL3NpbXBsZS1jYXJkLmMKKysrIGIvc291bmQvc29jL2dlbmVyaWMvc2ltcGxlLWNhcmQuYwpAQCAtNDUsNyArNDUsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc2ltcGxlX2NhcmRfZGF0YSAqcHJpdiA9CXNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShydGQtPmNhcmQpOwogCXN0cnVjdCBzaW1wbGVfZGFpX3Byb3BzICpkYWlfcHJvcHMgPQotCQkmcHJpdi0+ZGFpX3Byb3BzW3J0ZCAtIHJ0ZC0+Y2FyZC0+cnRkXTsKKwkJJnByaXYtPmRhaV9wcm9wc1tydGQtPm51bV07CiAJaW50IHJldDsKIAogCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkYWlfcHJvcHMtPmNwdV9kYWkuY2xrKTsKQEAgLTY0LDcgKzY0LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNpbXBsZV9jYXJkX2RhdGEgKnByaXYgPQlzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEocnRkLT5jYXJkKTsKIAlzdHJ1Y3Qgc2ltcGxlX2RhaV9wcm9wcyAqZGFpX3Byb3BzID0KLQkJJnByaXYtPmRhaV9wcm9wc1tydGQgLSBydGQtPmNhcmQtPnJ0ZF07CisJCSZwcml2LT5kYWlfcHJvcHNbcnRkLT5udW1dOwogCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRhaV9wcm9wcy0+Y3B1X2RhaS5jbGspOwogCkBAIC03OCw4ICs3OCw3IEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CiAJc3RydWN0IHNpbXBsZV9jYXJkX2RhdGEgKnByaXYgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEocnRkLT5jYXJkKTsKLQlzdHJ1Y3Qgc2ltcGxlX2RhaV9wcm9wcyAqZGFpX3Byb3BzID0KLQkJJnByaXYtPmRhaV9wcm9wc1tydGQgLSBydGQtPmNhcmQtPnJ0ZF07CisJc3RydWN0IHNpbXBsZV9kYWlfcHJvcHMgKmRhaV9wcm9wcyA9ICZwcml2LT5kYWlfcHJvcHNbcnRkLT5udW1dOwogCXVuc2lnbmVkIGludCBtY2xrLCBtY2xrX2ZzID0gMDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTc0LDEwICsxNzMsOSBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWMgPSBydGQtPmNvZGVjX2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdSA9IHJ0ZC0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc2ltcGxlX2RhaV9wcm9wcyAqZGFpX3Byb3BzOwotCWludCBudW0sIHJldDsKKwlpbnQgcmV0OwogCi0JbnVtID0gcnRkIC0gcnRkLT5jYXJkLT5ydGQ7Ci0JZGFpX3Byb3BzID0gJnByaXYtPmRhaV9wcm9wc1tudW1dOworCWRhaV9wcm9wcyA9ICZwcml2LT5kYWlfcHJvcHNbcnRkLT5udW1dOwogCXJldCA9IF9fYXNvY19zaW1wbGVfY2FyZF9kYWlfaW5pdChjb2RlYywgJmRhaV9wcm9wcy0+Y29kZWNfZGFpKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbWcvS2NvbmZpZyBiL3NvdW5kL3NvYy9pbWcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdhOTUxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2ltZy9LY29uZmlnCkBAIC0wLDAgKzEsNTIgQEAKK2NvbmZpZyBTTkRfU09DX0lNRworCWJvb2wgIkF1ZGlvIHN1cHBvcnQgZm9yIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBkZXNpZ25zIgorCWhlbHAKKwkgIEF1ZGlvIHN1cHBvcnQgZm9yIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBhdWRpbyBoYXJkd2FyZQorCitjb25maWcgU05EX1NPQ19JTUdfSTJTX0lOCisJdHJpc3RhdGUgIkltYWdpbmF0aW9uIEkyUyBJbnB1dCBEZXZpY2UgRHJpdmVyIgorCWRlcGVuZHMgb24gU05EX1NPQ19JTUcKKwlzZWxlY3QgU05EX1NPQ19HRU5FUklDX0RNQUVOR0lORV9QQ00KKwloZWxwCisJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBJMlMgaW4gZHJpdmVyIGZvcgorCSAgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIEkyUyBpbiBkZXZpY2UuCisKK2NvbmZpZyBTTkRfU09DX0lNR19JMlNfT1VUCisJdHJpc3RhdGUgIkltYWdpbmF0aW9uIEkyUyBPdXRwdXQgRGV2aWNlIERyaXZlciIKKwlkZXBlbmRzIG9uIFNORF9TT0NfSU1HCisJc2VsZWN0IFNORF9TT0NfR0VORVJJQ19ETUFFTkdJTkVfUENNCisJaGVscAorCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgSTJTIG91dCBkcml2ZXIgZm9yCisJICBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgSTJTIG91dCBkZXZpY2UuCisKK2NvbmZpZyBTTkRfU09DX0lNR19QQVJBTExFTF9PVVQKKwl0cmlzdGF0ZSAiSW1hZ2luYXRpb24gUGFyYWxsZWwgT3V0cHV0IERldmljZSBEcml2ZXIiCisJZGVwZW5kcyBvbiBTTkRfU09DX0lNRworCXNlbGVjdCBTTkRfU09DX0dFTkVSSUNfRE1BRU5HSU5FX1BDTQorCWhlbHAKKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIHBhcmFsbGVsIG91dCBkcml2ZXIgZm9yCisJICBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgcGFyYWxsZWwgb3V0IGRldmljZS4KKworY29uZmlnIFNORF9TT0NfSU1HX1NQRElGX0lOCisJdHJpc3RhdGUgIkltYWdpbmF0aW9uIFNQRElGIElucHV0IERldmljZSBEcml2ZXIiCisJZGVwZW5kcyBvbiBTTkRfU09DX0lNRworCXNlbGVjdCBTTkRfU09DX0dFTkVSSUNfRE1BRU5HSU5FX1BDTQorCWhlbHAKKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNQRElGIGlucHV0IGRyaXZlciBmb3IKKwkgIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBTUERJRiBpbnB1dCBkZXZpY2UuCisKK2NvbmZpZyBTTkRfU09DX0lNR19TUERJRl9PVVQKKwl0cmlzdGF0ZSAiSW1hZ2luYXRpb24gU1BESUYgT3V0cHV0IERldmljZSBEcml2ZXIiCisJZGVwZW5kcyBvbiBTTkRfU09DX0lNRworCXNlbGVjdCBTTkRfU09DX0dFTkVSSUNfRE1BRU5HSU5FX1BDTQorCWhlbHAKKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNQRElGIG91dCBkcml2ZXIgZm9yCisJICBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgU1BESUYgb3V0IGRldmljZS4KKworCitjb25maWcgU05EX1NPQ19JTUdfUElTVEFDSElPX0lOVEVSTkFMX0RBQworCXRyaXN0YXRlICJTdXBwb3J0IGZvciBQaXN0YWNoaW8gU29DIEludGVybmFsIERBQyBEcml2ZXIiCisJZGVwZW5kcyBvbiBTTkRfU09DX0lNRworCWhlbHAKKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFBpc3RhY2hpbyBpbnRlcm5hbCBEQUMKKwkgIGRyaXZlciBmb3IgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIFBpc3RhY2hpbyBpbnRlcm5hbCBEQUMgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ltZy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9pbWcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwOGMxYwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbWcvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACitvYmotJChDT05GSUdfU05EX1NPQ19JTUdfSTJTX0lOKSArPSBpbWctaTJzLWluLm8KK29iai0kKENPTkZJR19TTkRfU09DX0lNR19JMlNfT1VUKSArPSBpbWctaTJzLW91dC5vCitvYmotJChDT05GSUdfU05EX1NPQ19JTUdfUEFSQUxMRUxfT1VUKSArPSBpbWctcGFyYWxsZWwtb3V0Lm8KK29iai0kKENPTkZJR19TTkRfU09DX0lNR19TUERJRl9JTikgKz0gaW1nLXNwZGlmLWluLm8KK29iai0kKENPTkZJR19TTkRfU09DX0lNR19TUERJRl9PVVQpICs9IGltZy1zcGRpZi1vdXQubworCitvYmotJChDT05GSUdfU05EX1NPQ19JTUdfUElTVEFDSElPX0lOVEVSTkFMX0RBQykgKz0gcGlzdGFjaGlvLWludGVybmFsLWRhYy5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW1nL2ltZy1pMnMtaW4uYyBiL3NvdW5kL3NvYy9pbWcvaW1nLWkycy1pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODkyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW1nL2ltZy1pMnMtaW4uYwpAQCAtMCwwICsxLDUxNiBAQAorLyoKKyAqIElNRyBJMlMgaW5wdXQgY29udHJvbGxlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBBdXRob3I6IERhbWllbiBIb3JzbGV5IDxEYW1pZW4uSG9yc2xleUBpbWd0ZWMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9kbWFlbmdpbmVfcGNtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2RlZmluZSBJTUdfSTJTX0lOX1JYX0ZJRk8JCQkweDAKKworI2RlZmluZSBJTUdfSTJTX0lOX0NUTAkJCQkweDQKKyNkZWZpbmUgSU1HX0kyU19JTl9DVExfQUNUSVZFX0NIQU5fTUFTSwkJMHhmZmZmZmZmYworI2RlZmluZSBJTUdfSTJTX0lOX0NUTF9BQ1RJVkVfQ0hfU0hJRlQJCTIKKyNkZWZpbmUgSU1HX0kyU19JTl9DVExfMTZQQUNLX01BU0sJCUJJVCgxKQorI2RlZmluZSBJTUdfSTJTX0lOX0NUTF9NRV9NQVNLCQkJQklUKDApCisKKyNkZWZpbmUgSU1HX0kyU19JTl9DSF9DVEwJCQkweDQKKyNkZWZpbmUgSU1HX0kyU19JTl9DSF9DVExfQ0NERUxfTUFTSwkJMHgzODAwMAorI2RlZmluZSBJTUdfSTJTX0lOX0NIX0NUTF9DQ0RFTF9TSElGVAkJMTUKKyNkZWZpbmUgSU1HX0kyU19JTl9DSF9DVExfRkVOX01BU0sJCUJJVCgxNCkKKyNkZWZpbmUgSU1HX0kyU19JTl9DSF9DVExfRk1PREVfTUFTSwkJQklUKDEzKQorI2RlZmluZSBJTUdfSTJTX0lOX0NIX0NUTF8xNlBBQ0tfTUFTSwkJQklUKDEyKQorI2RlZmluZSBJTUdfSTJTX0lOX0NIX0NUTF9KVVNUX01BU0sJCUJJVCgxMCkKKyNkZWZpbmUgSU1HX0kyU19JTl9DSF9DVExfUEFDS0hfTUFTSwkJQklUKDkpCisjZGVmaW5lIElNR19JMlNfSU5fQ0hfQ1RMX0NMS19UUkFOU19NQVNLCUJJVCg4KQorI2RlZmluZSBJTUdfSTJTX0lOX0NIX0NUTF9CTEtQX01BU0sJCUJJVCg3KQorI2RlZmluZSBJTUdfSTJTX0lOX0NIX0NUTF9GSUZPX0ZMVVNIX01BU0sJQklUKDYpCisjZGVmaW5lIElNR19JMlNfSU5fQ0hfQ1RMX0xSRF9NQVNLCQlCSVQoMykKKyNkZWZpbmUgSU1HX0kyU19JTl9DSF9DVExfRldfTUFTSwkJQklUKDIpCisjZGVmaW5lIElNR19JMlNfSU5fQ0hfQ1RMX1NXX01BU0sJCUJJVCgxKQorI2RlZmluZSBJTUdfSTJTX0lOX0NIX0NUTF9NRV9NQVNLCQlCSVQoMCkKKworI2RlZmluZSBJTUdfSTJTX0lOX0NIX1NUUklERQkJCTB4MjAKKworc3RydWN0IGltZ19pMnNfaW4geworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgY2xrICpjbGtfc3lzOworCXN0cnVjdCBzbmRfZG1hZW5naW5lX2RhaV9kbWFfZGF0YSBkbWFfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdW5zaWduZWQgaW50IG1heF9pMnNfY2hhbjsKKwl2b2lkIF9faW9tZW0gKmNoYW5uZWxfYmFzZTsKKwl1bnNpZ25lZCBpbnQgYWN0aXZlX2NoYW5uZWxzOworCXN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgZGFpX2RyaXZlcjsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWdfaTJzX2luX3dyaXRlbChzdHJ1Y3QgaW1nX2kyc19pbiAqaTJzLCB1MzIgdmFsLCB1MzIgcmVnKQoreworCXdyaXRlbCh2YWwsIGkycy0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGltZ19pMnNfaW5fcmVhZGwoc3RydWN0IGltZ19pMnNfaW4gKmkycywgdTMyIHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoaTJzLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19pMnNfaW5fY2hfd3JpdGVsKHN0cnVjdCBpbWdfaTJzX2luICppMnMsIHUzMiBjaGFuLAorCQkJCQl1MzIgdmFsLCB1MzIgcmVnKQoreworCXdyaXRlbCh2YWwsIGkycy0+Y2hhbm5lbF9iYXNlICsgKGNoYW4gKiBJTUdfSTJTX0lOX0NIX1NUUklERSkgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBpbWdfaTJzX2luX2NoX3JlYWRsKHN0cnVjdCBpbWdfaTJzX2luICppMnMsIHUzMiBjaGFuLAorCQkJCQl1MzIgcmVnKQoreworCXJldHVybiByZWFkbChpMnMtPmNoYW5uZWxfYmFzZSArIChjaGFuICogSU1HX0kyU19JTl9DSF9TVFJJREUpICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19pMnNfaW5fY2hfZGlzYWJsZShzdHJ1Y3QgaW1nX2kyc19pbiAqaTJzLCB1MzIgY2hhbikKK3sKKwl1MzIgcmVnOworCisJcmVnID0gaW1nX2kyc19pbl9jaF9yZWFkbChpMnMsIGNoYW4sIElNR19JMlNfSU5fQ0hfQ1RMKTsKKwlyZWcgJj0gfklNR19JMlNfSU5fQ0hfQ1RMX01FX01BU0s7CisJaW1nX2kyc19pbl9jaF93cml0ZWwoaTJzLCBjaGFuLCByZWcsIElNR19JMlNfSU5fQ0hfQ1RMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19pMnNfaW5fY2hfZW5hYmxlKHN0cnVjdCBpbWdfaTJzX2luICppMnMsIHUzMiBjaGFuKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBpbWdfaTJzX2luX2NoX3JlYWRsKGkycywgY2hhbiwgSU1HX0kyU19JTl9DSF9DVEwpOworCXJlZyB8PSBJTUdfSTJTX0lOX0NIX0NUTF9NRV9NQVNLOworCWltZ19pMnNfaW5fY2hfd3JpdGVsKGkycywgY2hhbiwgcmVnLCBJTUdfSTJTX0lOX0NIX0NUTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWdfaTJzX2luX2Rpc2FibGUoc3RydWN0IGltZ19pMnNfaW4gKmkycykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gaW1nX2kyc19pbl9yZWFkbChpMnMsIElNR19JMlNfSU5fQ1RMKTsKKwlyZWcgJj0gfklNR19JMlNfSU5fQ1RMX01FX01BU0s7CisJaW1nX2kyc19pbl93cml0ZWwoaTJzLCByZWcsIElNR19JMlNfSU5fQ1RMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19pMnNfaW5fZW5hYmxlKHN0cnVjdCBpbWdfaTJzX2luICppMnMpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IGltZ19pMnNfaW5fcmVhZGwoaTJzLCBJTUdfSTJTX0lOX0NUTCk7CisJcmVnIHw9IElNR19JMlNfSU5fQ1RMX01FX01BU0s7CisJaW1nX2kyc19pbl93cml0ZWwoaTJzLCByZWcsIElNR19JMlNfSU5fQ1RMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19pMnNfaW5fZmx1c2goc3RydWN0IGltZ19pMnNfaW4gKmkycykKK3sKKwlpbnQgaTsKKwl1MzIgcmVnOworCisJZm9yIChpID0gMDsgaSA8IGkycy0+YWN0aXZlX2NoYW5uZWxzOyBpKyspIHsKKwkJcmVnID0gaW1nX2kyc19pbl9jaF9yZWFkbChpMnMsIGksIElNR19JMlNfSU5fQ0hfQ1RMKTsKKwkJcmVnIHw9IElNR19JMlNfSU5fQ0hfQ1RMX0ZJRk9fRkxVU0hfTUFTSzsKKwkJaW1nX2kyc19pbl9jaF93cml0ZWwoaTJzLCBpLCByZWcsIElNR19JMlNfSU5fQ0hfQ1RMKTsKKwkJcmVnICY9IH5JTUdfSTJTX0lOX0NIX0NUTF9GSUZPX0ZMVVNIX01BU0s7CisJCWltZ19pMnNfaW5fY2hfd3JpdGVsKGkycywgaSwgcmVnLCBJTUdfSTJTX0lOX0NIX0NUTCk7CisJfQorfQorCitzdGF0aWMgaW50IGltZ19pMnNfaW5fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgaW1nX2kyc19pbiAqaTJzID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWltZ19pMnNfaW5fZW5hYmxlKGkycyk7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWltZ19pMnNfaW5fZGlzYWJsZShpMnMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfaTJzX2luX2NoZWNrX3JhdGUoc3RydWN0IGltZ19pMnNfaW4gKmkycywKKwkJdW5zaWduZWQgaW50IHNhbXBsZV9yYXRlLCB1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZSwKKwkJdW5zaWduZWQgaW50ICpiY2xrX2ZpbHRlcl9lbmFibGUsCisJCXVuc2lnbmVkIGludCAqYmNsa19maWx0ZXJfdmFsdWUpCit7CisJdW5zaWduZWQgaW50IGJjbGtfZnJlcSwgY3VyX2ZyZXE7CisKKwliY2xrX2ZyZXEgPSBzYW1wbGVfcmF0ZSAqIGZyYW1lX3NpemU7CisKKwljdXJfZnJlcSA9IGNsa19nZXRfcmF0ZShpMnMtPmNsa19zeXMpOworCisJaWYgKGN1cl9mcmVxID49IGJjbGtfZnJlcSAqIDgpIHsKKwkJKmJjbGtfZmlsdGVyX2VuYWJsZSA9IDE7CisJCSpiY2xrX2ZpbHRlcl92YWx1ZSA9IDA7CisJfSBlbHNlIGlmIChjdXJfZnJlcSA+PSBiY2xrX2ZyZXEgKiA3KSB7CisJCSpiY2xrX2ZpbHRlcl9lbmFibGUgPSAxOworCQkqYmNsa19maWx0ZXJfdmFsdWUgPSAxOworCX0gZWxzZSBpZiAoY3VyX2ZyZXEgPj0gYmNsa19mcmVxICogNikgeworCQkqYmNsa19maWx0ZXJfZW5hYmxlID0gMDsKKwkJKmJjbGtfZmlsdGVyX3ZhbHVlID0gMDsKKwl9IGVsc2UgeworCQlkZXZfZXJyKGkycy0+ZGV2LAorCQkJIlN5cyBjbG9jayByYXRlICV1IGluc3VmZmljaWVudCBmb3Igc2FtcGxlIHJhdGUgJXVcbiIsCisJCQljdXJfZnJlcSwgc2FtcGxlX3JhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfaTJzX2luX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGltZ19pMnNfaW4gKmkycyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJdW5zaWduZWQgaW50IHJhdGUsIGNoYW5uZWxzLCBpMnNfY2hhbm5lbHMsIGZyYW1lX3NpemU7CisJdW5zaWduZWQgaW50IGJjbGtfZmlsdGVyX2VuYWJsZSwgYmNsa19maWx0ZXJfdmFsdWU7CisJaW50IGksIHJldCA9IDA7CisJdTMyIHJlZywgY29udHJvbF9tYXNrLCBjaGFuX2NvbnRyb2xfbWFzazsKKwl1MzIgY29udHJvbF9zZXQgPSAwLCBjaGFuX2NvbnRyb2xfc2V0ID0gMDsKKwlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdDsKKworCXJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWZvcm1hdCA9IHBhcmFtc19mb3JtYXQocGFyYW1zKTsKKwljaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWkyc19jaGFubmVscyA9IGNoYW5uZWxzIC8gMjsKKworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJZnJhbWVfc2l6ZSA9IDY0OworCQljaGFuX2NvbnRyb2xfc2V0IHw9IElNR19JMlNfSU5fQ0hfQ1RMX1NXX01BU0s7CisJCWNoYW5fY29udHJvbF9zZXQgfD0gSU1HX0kyU19JTl9DSF9DVExfRldfTUFTSzsKKwkJY2hhbl9jb250cm9sX3NldCB8PSBJTUdfSTJTX0lOX0NIX0NUTF9QQUNLSF9NQVNLOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlmcmFtZV9zaXplID0gNjQ7CisJCWNoYW5fY29udHJvbF9zZXQgfD0gSU1HX0kyU19JTl9DSF9DVExfU1dfTUFTSzsKKwkJY2hhbl9jb250cm9sX3NldCB8PSBJTUdfSTJTX0lOX0NIX0NUTF9GV19NQVNLOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlmcmFtZV9zaXplID0gMzI7CisJCWNvbnRyb2xfc2V0IHw9IElNR19JMlNfSU5fQ1RMXzE2UEFDS19NQVNLOworCQljaGFuX2NvbnRyb2xfc2V0IHw9IElNR19JMlNfSU5fQ0hfQ1RMXzE2UEFDS19NQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKGNoYW5uZWxzIDwgMikgfHwKKwkgICAgKGNoYW5uZWxzID4gKGkycy0+bWF4X2kyc19jaGFuICogMikpIHx8CisJICAgIChjaGFubmVscyAlIDIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbnRyb2xfc2V0IHw9ICgoaTJzX2NoYW5uZWxzIC0gMSkgPDwgSU1HX0kyU19JTl9DVExfQUNUSVZFX0NIX1NISUZUKTsKKworCXJldCA9IGltZ19pMnNfaW5fY2hlY2tfcmF0ZShpMnMsIHJhdGUsIGZyYW1lX3NpemUsCisJCQkmYmNsa19maWx0ZXJfZW5hYmxlLCAmYmNsa19maWx0ZXJfdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGJjbGtfZmlsdGVyX2VuYWJsZSkKKwkJY2hhbl9jb250cm9sX3NldCB8PSBJTUdfSTJTX0lOX0NIX0NUTF9GRU5fTUFTSzsKKworCWlmIChiY2xrX2ZpbHRlcl92YWx1ZSkKKwkJY2hhbl9jb250cm9sX3NldCB8PSBJTUdfSTJTX0lOX0NIX0NUTF9GTU9ERV9NQVNLOworCisJY29udHJvbF9tYXNrID0gSU1HX0kyU19JTl9DVExfMTZQQUNLX01BU0sgfAorCQkgICAgICAgSU1HX0kyU19JTl9DVExfQUNUSVZFX0NIQU5fTUFTSzsKKworCWNoYW5fY29udHJvbF9tYXNrID0gSU1HX0kyU19JTl9DSF9DVExfMTZQQUNLX01BU0sgfAorCQkJICAgIElNR19JMlNfSU5fQ0hfQ1RMX0ZFTl9NQVNLIHwKKwkJCSAgICBJTUdfSTJTX0lOX0NIX0NUTF9GTU9ERV9NQVNLIHwKKwkJCSAgICBJTUdfSTJTX0lOX0NIX0NUTF9TV19NQVNLIHwKKwkJCSAgICBJTUdfSTJTX0lOX0NIX0NUTF9GV19NQVNLIHwKKwkJCSAgICBJTUdfSTJTX0lOX0NIX0NUTF9QQUNLSF9NQVNLOworCisJcmVnID0gaW1nX2kyc19pbl9yZWFkbChpMnMsIElNR19JMlNfSU5fQ1RMKTsKKwlyZWcgPSAocmVnICYgfmNvbnRyb2xfbWFzaykgfCBjb250cm9sX3NldDsKKwlpbWdfaTJzX2luX3dyaXRlbChpMnMsIHJlZywgSU1HX0kyU19JTl9DVEwpOworCisJZm9yIChpID0gMDsgaSA8IGkycy0+YWN0aXZlX2NoYW5uZWxzOyBpKyspCisJCWltZ19pMnNfaW5fY2hfZGlzYWJsZShpMnMsIGkpOworCisJZm9yIChpID0gMDsgaSA8IGkycy0+bWF4X2kyc19jaGFuOyBpKyspIHsKKwkJcmVnID0gaW1nX2kyc19pbl9jaF9yZWFkbChpMnMsIGksIElNR19JMlNfSU5fQ0hfQ1RMKTsKKwkJcmVnID0gKHJlZyAmIH5jaGFuX2NvbnRyb2xfbWFzaykgfCBjaGFuX2NvbnRyb2xfc2V0OworCQlpbWdfaTJzX2luX2NoX3dyaXRlbChpMnMsIGksIHJlZywgSU1HX0kyU19JTl9DSF9DVEwpOworCX0KKworCWkycy0+YWN0aXZlX2NoYW5uZWxzID0gaTJzX2NoYW5uZWxzOworCisJaW1nX2kyc19pbl9mbHVzaChpMnMpOworCisJZm9yIChpID0gMDsgaSA8IGkycy0+YWN0aXZlX2NoYW5uZWxzOyBpKyspCisJCWltZ19pMnNfaW5fY2hfZW5hYmxlKGkycywgaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfaTJzX2luX3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IGltZ19pMnNfaW4gKmkycyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJaW50IGk7CisJdTMyIGNoYW5fY29udHJvbF9tYXNrLCBscmRfc2V0ID0gMCwgYmxrcF9zZXQgPSAwLCBjaGFuX2NvbnRyb2xfc2V0ID0gMDsKKwl1MzIgcmVnOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWxyZF9zZXQgfD0gSU1HX0kyU19JTl9DSF9DVExfTFJEX01BU0s7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCWxyZF9zZXQgfD0gSU1HX0kyU19JTl9DSF9DVExfTFJEX01BU0s7CisJCWJsa3Bfc2V0IHw9IElNR19JMlNfSU5fQ0hfQ1RMX0JMS1BfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJYmxrcF9zZXQgfD0gSU1HX0kyU19JTl9DSF9DVExfQkxLUF9NQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWNoYW5fY29udHJvbF9zZXQgfD0gSU1HX0kyU19JTl9DSF9DVExfQ0xLX1RSQU5TX01BU0s7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGFuX2NvbnRyb2xfbWFzayA9IElNR19JMlNfSU5fQ0hfQ1RMX0NMS19UUkFOU19NQVNLOworCisJZm9yIChpID0gMDsgaSA8IGkycy0+YWN0aXZlX2NoYW5uZWxzOyBpKyspCisJCWltZ19pMnNfaW5fY2hfZGlzYWJsZShpMnMsIGkpOworCisJLyoKKwkgKiBCTEtQIGFuZCBMUkQgbXVzdCBiZSBzZXQgZHVyaW5nIHNlcGFyYXRlIHJlZ2lzdGVyIHdyaXRlcworCSAqLworCWZvciAoaSA9IDA7IGkgPCBpMnMtPm1heF9pMnNfY2hhbjsgaSsrKSB7CisJCXJlZyA9IGltZ19pMnNfaW5fY2hfcmVhZGwoaTJzLCBpLCBJTUdfSTJTX0lOX0NIX0NUTCk7CisJCXJlZyA9IChyZWcgJiB+Y2hhbl9jb250cm9sX21hc2spIHwgY2hhbl9jb250cm9sX3NldDsKKwkJaW1nX2kyc19pbl9jaF93cml0ZWwoaTJzLCBpLCByZWcsIElNR19JMlNfSU5fQ0hfQ1RMKTsKKwkJcmVnID0gKHJlZyAmIH5JTUdfSTJTX0lOX0NIX0NUTF9CTEtQX01BU0spIHwgYmxrcF9zZXQ7CisJCWltZ19pMnNfaW5fY2hfd3JpdGVsKGkycywgaSwgcmVnLCBJTUdfSTJTX0lOX0NIX0NUTCk7CisJCXJlZyA9IChyZWcgJiB+SU1HX0kyU19JTl9DSF9DVExfTFJEX01BU0spIHwgbHJkX3NldDsKKwkJaW1nX2kyc19pbl9jaF93cml0ZWwoaTJzLCBpLCByZWcsIElNR19JMlNfSU5fQ0hfQ1RMKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaTJzLT5hY3RpdmVfY2hhbm5lbHM7IGkrKykKKwkJaW1nX2kyc19pbl9jaF9lbmFibGUoaTJzLCBpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBpbWdfaTJzX2luX2RhaV9vcHMgPSB7CisJLnRyaWdnZXIgPSBpbWdfaTJzX2luX3RyaWdnZXIsCisJLmh3X3BhcmFtcyA9IGltZ19pMnNfaW5faHdfcGFyYW1zLAorCS5zZXRfZm10ID0gaW1nX2kyc19pbl9zZXRfZm10Cit9OworCitzdGF0aWMgaW50IGltZ19pMnNfaW5fZGFpX3Byb2JlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpbWdfaTJzX2luICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCisJc25kX3NvY19kYWlfaW5pdF9kbWFfZGF0YShkYWksIE5VTEwsICZpMnMtPmRtYV9kYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciBpbWdfaTJzX2luX2NvbXBvbmVudCA9IHsKKwkubmFtZSA9ICJpbWctaTJzLWluIgorfTsKKworc3RhdGljIGludCBpbWdfaTJzX2luX2RtYV9wcmVwYXJlX3NsYXZlX2NvbmZpZyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN0LAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqc2MpCit7CisJdW5zaWduZWQgaW50IGkyc19jaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpIC8gMjsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3QtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlfZG1hX2RhdGEgKmRtYV9kYXRhOworCWludCByZXQ7CisKKwlkbWFfZGF0YSA9IHNuZF9zb2NfZGFpX2dldF9kbWFfZGF0YShydGQtPmNwdV9kYWksIHN0KTsKKworCXJldCA9IHNuZF9od3BhcmFtc190b19kbWFfc2xhdmVfY29uZmlnKHN0LCBwYXJhbXMsIHNjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2MtPnNyY19hZGRyID0gZG1hX2RhdGEtPmFkZHI7CisJc2MtPnNyY19hZGRyX3dpZHRoID0gZG1hX2RhdGEtPmFkZHJfd2lkdGg7CisJc2MtPnNyY19tYXhidXJzdCA9IDQgKiBpMnNfY2hhbm5lbHM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfZG1hZW5naW5lX3BjbV9jb25maWcgaW1nX2kyc19pbl9kbWFfY29uZmlnID0geworCS5wcmVwYXJlX3NsYXZlX2NvbmZpZyA9IGltZ19pMnNfaW5fZG1hX3ByZXBhcmVfc2xhdmVfY29uZmlnCit9OworCitzdGF0aWMgaW50IGltZ19pMnNfaW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaW1nX2kyc19pbiAqaTJzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgcmV0LCBpOworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3Q7CisJdW5zaWduZWQgaW50IG1heF9pMnNfY2hhbl9wb3dfMjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCisJaTJzID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppMnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWkycykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMnMpOworCisJaTJzLT5kZXYgPSBkZXY7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGJhc2UpOworCisJaTJzLT5iYXNlID0gYmFzZTsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgImltZyxpMnMtY2hhbm5lbHMiLAorCQkJJmkycy0+bWF4X2kyc19jaGFuKSkgeworCQlkZXZfZXJyKGRldiwgIk5vIGltZyxpMnMtY2hhbm5lbHMgcHJvcGVydHlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltYXhfaTJzX2NoYW5fcG93XzIgPSAxIDw8IGdldF9jb3VudF9vcmRlcihpMnMtPm1heF9pMnNfY2hhbik7CisKKwlpMnMtPmNoYW5uZWxfYmFzZSA9IGJhc2UgKyAobWF4X2kyc19jaGFuX3Bvd18yICogMHgyMCk7CisKKwlpMnMtPmNsa19zeXMgPSBkZXZtX2Nsa19nZXQoZGV2LCAic3lzIik7CisJaWYgKElTX0VSUihpMnMtPmNsa19zeXMpKSB7CisJCWlmIChQVFJfRVJSKGkycy0+Y2xrX3N5cykgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFjcXVpcmUgY2xvY2sgJ3N5cydcbiIpOworCQlyZXR1cm4gUFRSX0VSUihpMnMtPmNsa19zeXMpOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpMnMtPmNsa19zeXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpMnMtPmFjdGl2ZV9jaGFubmVscyA9IDE7CisJaTJzLT5kbWFfZGF0YS5hZGRyID0gcmVzLT5zdGFydCArIElNR19JMlNfSU5fUlhfRklGTzsKKwlpMnMtPmRtYV9kYXRhLmFkZHJfd2lkdGggPSA0OworCisJaTJzLT5kYWlfZHJpdmVyLnByb2JlID0gaW1nX2kyc19pbl9kYWlfcHJvYmU7CisJaTJzLT5kYWlfZHJpdmVyLmNhcHR1cmUuY2hhbm5lbHNfbWluID0gMjsKKwlpMnMtPmRhaV9kcml2ZXIuY2FwdHVyZS5jaGFubmVsc19tYXggPSBpMnMtPm1heF9pMnNfY2hhbiAqIDI7CisJaTJzLT5kYWlfZHJpdmVyLmNhcHR1cmUucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMDsKKwlpMnMtPmRhaV9kcml2ZXIuY2FwdHVyZS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfAorCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFOworCWkycy0+ZGFpX2RyaXZlci5vcHMgPSAmaW1nX2kyc19pbl9kYWlfb3BzOworCisJcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJyc3QiKTsKKwlpZiAoSVNfRVJSKHJzdCkpIHsKKwkJaWYgKFBUUl9FUlIocnN0KSA9PSAtRVBST0JFX0RFRkVSKSB7CisJCQlyZXQgPSAtRVBST0JFX0RFRkVSOworCQkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisJCX0KKworCQlkZXZfZGJnKGRldiwgIk5vIHRvcCBsZXZlbCByZXNldCBmb3VuZFxuIik7CisKKwkJaW1nX2kyc19pbl9kaXNhYmxlKGkycyk7CisKKwkJZm9yIChpID0gMDsgaSA8IGkycy0+bWF4X2kyc19jaGFuOyBpKyspCisJCQlpbWdfaTJzX2luX2NoX2Rpc2FibGUoaTJzLCBpKTsKKwl9IGVsc2UgeworCQlyZXNldF9jb250cm9sX2Fzc2VydChyc3QpOworCQlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHJzdCk7CisJfQorCisJaW1nX2kyc19pbl93cml0ZWwoaTJzLCAwLCBJTUdfSTJTX0lOX0NUTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaTJzLT5tYXhfaTJzX2NoYW47IGkrKykKKwkJaW1nX2kyc19pbl9jaF93cml0ZWwoaTJzLCBpLAorCQkJKDQgPDwgSU1HX0kyU19JTl9DSF9DVExfQ0NERUxfU0hJRlQpIHwKKwkJCUlNR19JMlNfSU5fQ0hfQ1RMX0pVU1RfTUFTSyB8CisJCQlJTUdfSTJTX0lOX0NIX0NUTF9GV19NQVNLLCBJTUdfSTJTX0lOX0NIX0NUTCk7CisKKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KGRldiwgJmltZ19pMnNfaW5fY29tcG9uZW50LAorCQkJCQkJJmkycy0+ZGFpX2RyaXZlciwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisKKwlyZXQgPSBkZXZtX3NuZF9kbWFlbmdpbmVfcGNtX3JlZ2lzdGVyKGRldiwgJmltZ19pMnNfaW5fZG1hX2NvbmZpZywgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisKKwlyZXR1cm4gMDsKKworZXJyX2Nsa19kaXNhYmxlOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMnMtPmNsa19zeXMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbWdfaTJzX2luX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaW1nX2kyc19pbiAqaTJzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJzLT5jbGtfc3lzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbWdfaTJzX2luX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJpbWcsaTJzLWluIiB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW1nX2kyc19pbl9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGltZ19pMnNfaW5fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImltZy1pMnMtaW4iLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBpbWdfaTJzX2luX29mX21hdGNoCisJfSwKKwkucHJvYmUgPSBpbWdfaTJzX2luX3Byb2JlLAorCS5yZW1vdmUgPSBpbWdfaTJzX2luX2Rldl9yZW1vdmUKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGltZ19pMnNfaW5fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiRGFtaWVuIEhvcnNsZXkgPERhbWllbi5Ib3JzbGV5QGltZ3RlYy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklNRyBJMlMgSW5wdXQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW1nL2ltZy1pMnMtb3V0LmMgYi9zb3VuZC9zb2MvaW1nL2ltZy1pMnMtb3V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5OTcxMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbWcvaW1nLWkycy1vdXQuYwpAQCAtMCwwICsxLDU2NSBAQAorLyoKKyAqIElNRyBJMlMgb3V0cHV0IGNvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogQXV0aG9yOiBEYW1pZW4gSG9yc2xleSA8RGFtaWVuLkhvcnNsZXlAaW1ndGVjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2RtYWVuZ2luZV9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjZGVmaW5lIElNR19JMlNfT1VUX1RYX0ZJRk8JCQkweDAKKworI2RlZmluZSBJTUdfSTJTX09VVF9DVEwJCQkJMHg0CisjZGVmaW5lIElNR19JMlNfT1VUX0NUTF9EQVRBX0VOX01BU0sJCUJJVCgyNCkKKyNkZWZpbmUgSU1HX0kyU19PVVRfQ1RMX0FDVElWRV9DSEFOX01BU0sJMHhmZmUwMDAKKyNkZWZpbmUgSU1HX0kyU19PVVRfQ1RMX0FDVElWRV9DSEFOX1NISUZUCTEzCisjZGVmaW5lIElNR19JMlNfT1VUX0NUTF9GUk1fU0laRV9NQVNLCQlCSVQoOCkKKyNkZWZpbmUgSU1HX0kyU19PVVRfQ1RMX01BU1RFUl9NQVNLCQlCSVQoNikKKyNkZWZpbmUgSU1HX0kyU19PVVRfQ1RMX0NMS19NQVNLCQlCSVQoNSkKKyNkZWZpbmUgSU1HX0kyU19PVVRfQ1RMX0NMS19FTl9NQVNLCQlCSVQoNCkKKyNkZWZpbmUgSU1HX0kyU19PVVRfQ1RMX0ZSTV9DTEtfUE9MX01BU0sJQklUKDMpCisjZGVmaW5lIElNR19JMlNfT1VUX0NUTF9CQ0xLX1BPTF9NQVNLCQlCSVQoMikKKyNkZWZpbmUgSU1HX0kyU19PVVRfQ1RMX01FX01BU0sJCQlCSVQoMCkKKworI2RlZmluZSBJTUdfSTJTX09VVF9DSF9DVEwJCQkweDQKKyNkZWZpbmUgSU1HX0kyU19PVVRfQ0hBTl9DVExfQ0hfTUFTSwkJQklUKDExKQorI2RlZmluZSBJTUdfSTJTX09VVF9DSEFOX0NUTF9MVF9NQVNLCQlCSVQoMTApCisjZGVmaW5lIElNR19JMlNfT1VUX0NIQU5fQ1RMX0ZNVF9NQVNLCQkweGYwCisjZGVmaW5lIElNR19JMlNfT1VUX0NIQU5fQ1RMX0ZNVF9TSElGVAkJNAorI2RlZmluZSBJTUdfSTJTX09VVF9DSEFOX0NUTF9KVVNUX01BU0sJCUJJVCgzKQorI2RlZmluZSBJTUdfSTJTX09VVF9DSEFOX0NUTF9DTEtUX01BU0sJCUJJVCgxKQorI2RlZmluZSBJTUdfSTJTX09VVF9DSEFOX0NUTF9NRV9NQVNLCQlCSVQoMCkKKworI2RlZmluZSBJTUdfSTJTX09VVF9DSF9TVFJJREUJCQkweDIwCisKK3N0cnVjdCBpbWdfaTJzX291dCB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBjbGsgKmNsa19zeXM7CisJc3RydWN0IGNsayAqY2xrX3JlZjsKKwlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlfZG1hX2RhdGEgZG1hX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2OworCXVuc2lnbmVkIGludCBtYXhfaTJzX2NoYW47CisJdm9pZCBfX2lvbWVtICpjaGFubmVsX2Jhc2U7CisJYm9vbCBmb3JjZV9jbGtfYWN0aXZlOworCXVuc2lnbmVkIGludCBhY3RpdmVfY2hhbm5lbHM7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGRhaV9kcml2ZXI7Cit9OworCitzdGF0aWMgaW50IGltZ19pMnNfb3V0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpbWdfaTJzX291dCAqaTJzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIWkycy0+Zm9yY2VfY2xrX2FjdGl2ZSkKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkycy0+Y2xrX3JlZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfaTJzX291dF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpbWdfaTJzX291dCAqaTJzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCWlmICghaTJzLT5mb3JjZV9jbGtfYWN0aXZlKSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpMnMtPmNsa19yZWYpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgImNsa19lbmFibGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19pMnNfb3V0X3dyaXRlbChzdHJ1Y3QgaW1nX2kyc19vdXQgKmkycywgdTMyIHZhbCwKKwkJCQkJdTMyIHJlZykKK3sKKwl3cml0ZWwodmFsLCBpMnMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBpbWdfaTJzX291dF9yZWFkbChzdHJ1Y3QgaW1nX2kyc19vdXQgKmkycywgdTMyIHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoaTJzLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19pMnNfb3V0X2NoX3dyaXRlbChzdHJ1Y3QgaW1nX2kyc19vdXQgKmkycywKKwkJCQkJdTMyIGNoYW4sIHUzMiB2YWwsIHUzMiByZWcpCit7CisJd3JpdGVsKHZhbCwgaTJzLT5jaGFubmVsX2Jhc2UgKyAoY2hhbiAqIElNR19JMlNfT1VUX0NIX1NUUklERSkgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBpbWdfaTJzX291dF9jaF9yZWFkbChzdHJ1Y3QgaW1nX2kyc19vdXQgKmkycywgdTMyIGNoYW4sCisJCQkJCXUzMiByZWcpCit7CisJcmV0dXJuIHJlYWRsKGkycy0+Y2hhbm5lbF9iYXNlICsgKGNoYW4gKiBJTUdfSTJTX09VVF9DSF9TVFJJREUpICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19pMnNfb3V0X2NoX2Rpc2FibGUoc3RydWN0IGltZ19pMnNfb3V0ICppMnMsIHUzMiBjaGFuKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBpbWdfaTJzX291dF9jaF9yZWFkbChpMnMsIGNoYW4sIElNR19JMlNfT1VUX0NIX0NUTCk7CisJcmVnICY9IH5JTUdfSTJTX09VVF9DSEFOX0NUTF9NRV9NQVNLOworCWltZ19pMnNfb3V0X2NoX3dyaXRlbChpMnMsIGNoYW4sIHJlZywgSU1HX0kyU19PVVRfQ0hfQ1RMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19pMnNfb3V0X2NoX2VuYWJsZShzdHJ1Y3QgaW1nX2kyc19vdXQgKmkycywgdTMyIGNoYW4pCit7CisJdTMyIHJlZzsKKworCXJlZyA9IGltZ19pMnNfb3V0X2NoX3JlYWRsKGkycywgY2hhbiwgSU1HX0kyU19PVVRfQ0hfQ1RMKTsKKwlyZWcgfD0gSU1HX0kyU19PVVRfQ0hBTl9DVExfTUVfTUFTSzsKKwlpbWdfaTJzX291dF9jaF93cml0ZWwoaTJzLCBjaGFuLCByZWcsIElNR19JMlNfT1VUX0NIX0NUTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWdfaTJzX291dF9kaXNhYmxlKHN0cnVjdCBpbWdfaTJzX291dCAqaTJzKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBpbWdfaTJzX291dF9yZWFkbChpMnMsIElNR19JMlNfT1VUX0NUTCk7CisJcmVnICY9IH5JTUdfSTJTX09VVF9DVExfTUVfTUFTSzsKKwlpbWdfaTJzX291dF93cml0ZWwoaTJzLCByZWcsIElNR19JMlNfT1VUX0NUTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWdfaTJzX291dF9lbmFibGUoc3RydWN0IGltZ19pMnNfb3V0ICppMnMpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IGltZ19pMnNfb3V0X3JlYWRsKGkycywgSU1HX0kyU19PVVRfQ1RMKTsKKwlyZWcgfD0gSU1HX0kyU19PVVRfQ1RMX01FX01BU0s7CisJaW1nX2kyc19vdXRfd3JpdGVsKGkycywgcmVnLCBJTUdfSTJTX09VVF9DVEwpOworfQorCitzdGF0aWMgdm9pZCBpbWdfaTJzX291dF9yZXNldChzdHJ1Y3QgaW1nX2kyc19vdXQgKmkycykKK3sKKwlpbnQgaTsKKwl1MzIgY29yZV9jdGwsIGNoYW5fY3RsOworCisJY29yZV9jdGwgPSBpbWdfaTJzX291dF9yZWFkbChpMnMsIElNR19JMlNfT1VUX0NUTCkgJgorCQkJfklNR19JMlNfT1VUX0NUTF9NRV9NQVNLICYKKwkJCX5JTUdfSTJTX09VVF9DVExfREFUQV9FTl9NQVNLOworCisJaWYgKCFpMnMtPmZvcmNlX2Nsa19hY3RpdmUpCisJCWNvcmVfY3RsICY9IH5JTUdfSTJTX09VVF9DVExfQ0xLX0VOX01BU0s7CisKKwljaGFuX2N0bCA9IGltZ19pMnNfb3V0X2NoX3JlYWRsKGkycywgMCwgSU1HX0kyU19PVVRfQ0hfQ1RMKSAmCisJCQl+SU1HX0kyU19PVVRfQ0hBTl9DVExfTUVfTUFTSzsKKworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGkycy0+cnN0KTsKKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KGkycy0+cnN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBpMnMtPm1heF9pMnNfY2hhbjsgaSsrKQorCQlpbWdfaTJzX291dF9jaF93cml0ZWwoaTJzLCBpLCBjaGFuX2N0bCwgSU1HX0kyU19PVVRfQ0hfQ1RMKTsKKworCWZvciAoaSA9IDA7IGkgPCBpMnMtPmFjdGl2ZV9jaGFubmVsczsgaSsrKQorCQlpbWdfaTJzX291dF9jaF9lbmFibGUoaTJzLCBpKTsKKworCWltZ19pMnNfb3V0X3dyaXRlbChpMnMsIGNvcmVfY3RsLCBJTUdfSTJTX09VVF9DVEwpOworCWltZ19pMnNfb3V0X2VuYWJsZShpMnMpOworfQorCitzdGF0aWMgaW50IGltZ19pMnNfb3V0X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGltZ19pMnNfb3V0ICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCXUzMiByZWc7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlyZWcgPSBpbWdfaTJzX291dF9yZWFkbChpMnMsIElNR19JMlNfT1VUX0NUTCk7CisJCWlmICghaTJzLT5mb3JjZV9jbGtfYWN0aXZlKQorCQkJcmVnIHw9IElNR19JMlNfT1VUX0NUTF9DTEtfRU5fTUFTSzsKKwkJcmVnIHw9IElNR19JMlNfT1VUX0NUTF9EQVRBX0VOX01BU0s7CisJCWltZ19pMnNfb3V0X3dyaXRlbChpMnMsIHJlZywgSU1HX0kyU19PVVRfQ1RMKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWltZ19pMnNfb3V0X3Jlc2V0KGkycyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19pMnNfb3V0X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGltZ19pMnNfb3V0ICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCXVuc2lnbmVkIGludCBjaGFubmVscywgaTJzX2NoYW5uZWxzOworCWxvbmcgcHJlX2Rpdl9hLCBwcmVfZGl2X2IsIGRpZmZfYSwgZGlmZl9iLCByYXRlLCBjbGtfcmF0ZTsKKwlpbnQgaTsKKwl1MzIgcmVnLCBjb250cm9sX21hc2ssIGNvbnRyb2xfc2V0ID0gMDsKKwlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdDsKKworCXJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWZvcm1hdCA9IHBhcmFtc19mb3JtYXQocGFyYW1zKTsKKwljaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWkyc19jaGFubmVscyA9IGNoYW5uZWxzIC8gMjsKKworCWlmIChmb3JtYXQgIT0gU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChjaGFubmVscyA8IDIpIHx8CisJICAgIChjaGFubmVscyA+IChpMnMtPm1heF9pMnNfY2hhbiAqIDIpKSB8fAorCSAgICAoY2hhbm5lbHMgJSAyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmVfZGl2X2EgPSBjbGtfcm91bmRfcmF0ZShpMnMtPmNsa19yZWYsIHJhdGUgKiAyNTYpOworCWlmIChwcmVfZGl2X2EgPCAwKQorCQlyZXR1cm4gcHJlX2Rpdl9hOworCXByZV9kaXZfYiA9IGNsa19yb3VuZF9yYXRlKGkycy0+Y2xrX3JlZiwgcmF0ZSAqIDM4NCk7CisJaWYgKHByZV9kaXZfYiA8IDApCisJCXJldHVybiBwcmVfZGl2X2I7CisKKwlkaWZmX2EgPSBhYnMoKHByZV9kaXZfYSAvIDI1NikgLSByYXRlKTsKKwlkaWZmX2IgPSBhYnMoKHByZV9kaXZfYiAvIDM4NCkgLSByYXRlKTsKKworCS8qIElmIGRpZmZzIGFyZSBlcXVhbCwgdXNlIGxvd2VyIGNsb2NrIHJhdGUgKi8KKwlpZiAoZGlmZl9hID4gZGlmZl9iKQorCQljbGtfc2V0X3JhdGUoaTJzLT5jbGtfcmVmLCBwcmVfZGl2X2IpOworCWVsc2UKKwkJY2xrX3NldF9yYXRlKGkycy0+Y2xrX3JlZiwgcHJlX2Rpdl9hKTsKKworCS8qCisJICogQW5vdGhlciBkcml2ZXIgKGVnIGFsc2EgbWFjaGluZSBkcml2ZXIpIG1heSBoYXZlIHJlamVjdGVkIHRoZSBhYm92ZQorCSAqIGNoYW5nZS4gR2V0IHRoZSBjdXJyZW50IHJhdGUgYW5kIHNldCB0aGUgcmVnaXN0ZXIgYml0IGFjY29yZGluZyB0bworCSAqIHRoZSBuZXcgbWluaW11bSBkaWZmCisJICovCisJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoaTJzLT5jbGtfcmVmKTsKKworCWRpZmZfYSA9IGFicygoY2xrX3JhdGUgLyAyNTYpIC0gcmF0ZSk7CisJZGlmZl9iID0gYWJzKChjbGtfcmF0ZSAvIDM4NCkgLSByYXRlKTsKKworCWlmIChkaWZmX2EgPiBkaWZmX2IpCisJCWNvbnRyb2xfc2V0IHw9IElNR19JMlNfT1VUX0NUTF9DTEtfTUFTSzsKKworCWNvbnRyb2xfc2V0IHw9ICgoaTJzX2NoYW5uZWxzIC0gMSkgPDwKKwkJICAgICAgIElNR19JMlNfT1VUX0NUTF9BQ1RJVkVfQ0hBTl9TSElGVCkgJgorCQkgICAgICAgSU1HX0kyU19PVVRfQ1RMX0FDVElWRV9DSEFOX01BU0s7CisKKwljb250cm9sX21hc2sgPSBJTUdfSTJTX09VVF9DVExfQ0xLX01BU0sgfAorCQkgICAgICAgSU1HX0kyU19PVVRfQ1RMX0FDVElWRV9DSEFOX01BU0s7CisKKwlpbWdfaTJzX291dF9kaXNhYmxlKGkycyk7CisKKwlyZWcgPSBpbWdfaTJzX291dF9yZWFkbChpMnMsIElNR19JMlNfT1VUX0NUTCk7CisJcmVnID0gKHJlZyAmIH5jb250cm9sX21hc2spIHwgY29udHJvbF9zZXQ7CisJaW1nX2kyc19vdXRfd3JpdGVsKGkycywgcmVnLCBJTUdfSTJTX09VVF9DVEwpOworCisJZm9yIChpID0gMDsgaSA8IGkyc19jaGFubmVsczsgaSsrKQorCQlpbWdfaTJzX291dF9jaF9lbmFibGUoaTJzLCBpKTsKKworCWZvciAoOyBpIDwgaTJzLT5tYXhfaTJzX2NoYW47IGkrKykKKwkJaW1nX2kyc19vdXRfY2hfZGlzYWJsZShpMnMsIGkpOworCisJaW1nX2kyc19vdXRfZW5hYmxlKGkycyk7CisKKwlpMnMtPmFjdGl2ZV9jaGFubmVscyA9IGkyc19jaGFubmVsczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19pMnNfb3V0X3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IGltZ19pMnNfb3V0ICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCWludCBpOworCWJvb2wgZm9yY2VfY2xrX2FjdGl2ZTsKKwl1MzIgY2hhbl9jb250cm9sX21hc2ssIGNvbnRyb2xfbWFzaywgY2hhbl9jb250cm9sX3NldCA9IDA7CisJdTMyIHJlZywgY29udHJvbF9zZXQgPSAwOworCisJZm9yY2VfY2xrX2FjdGl2ZSA9ICgoZm10ICYgU05EX1NPQ19EQUlGTVRfQ0xPQ0tfTUFTSykgPT0KKwkJCVNORF9TT0NfREFJRk1UX0NPTlQpOworCisJaWYgKGZvcmNlX2Nsa19hY3RpdmUpCisJCWNvbnRyb2xfc2V0IHw9IElNR19JMlNfT1VUX0NUTF9DTEtfRU5fTUFTSzsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJY29udHJvbF9zZXQgfD0gSU1HX0kyU19PVVRfQ1RMX01BU1RFUl9NQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJY29udHJvbF9zZXQgfD0gSU1HX0kyU19PVVRfQ1RMX0JDTEtfUE9MX01BU0s7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWNvbnRyb2xfc2V0IHw9IElNR19JMlNfT1VUX0NUTF9CQ0xLX1BPTF9NQVNLOworCQljb250cm9sX3NldCB8PSBJTUdfSTJTX09VVF9DVExfRlJNX0NMS19QT0xfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJY29udHJvbF9zZXQgfD0gSU1HX0kyU19PVVRfQ1RMX0ZSTV9DTEtfUE9MX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJY2hhbl9jb250cm9sX3NldCB8PSBJTUdfSTJTX09VVF9DSEFOX0NUTF9DTEtUX01BU0s7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb250cm9sX21hc2sgPSBJTUdfSTJTX09VVF9DVExfQ0xLX0VOX01BU0sgfAorCQkgICAgICAgSU1HX0kyU19PVVRfQ1RMX01BU1RFUl9NQVNLIHwKKwkJICAgICAgIElNR19JMlNfT1VUX0NUTF9CQ0xLX1BPTF9NQVNLIHwKKwkJICAgICAgIElNR19JMlNfT1VUX0NUTF9GUk1fQ0xLX1BPTF9NQVNLOworCisJY2hhbl9jb250cm9sX21hc2sgPSBJTUdfSTJTX09VVF9DSEFOX0NUTF9DTEtUX01BU0s7CisKKwlpbWdfaTJzX291dF9kaXNhYmxlKGkycyk7CisKKwlyZWcgPSBpbWdfaTJzX291dF9yZWFkbChpMnMsIElNR19JMlNfT1VUX0NUTCk7CisJcmVnID0gKHJlZyAmIH5jb250cm9sX21hc2spIHwgY29udHJvbF9zZXQ7CisJaW1nX2kyc19vdXRfd3JpdGVsKGkycywgcmVnLCBJTUdfSTJTX09VVF9DVEwpOworCisJZm9yIChpID0gMDsgaSA8IGkycy0+YWN0aXZlX2NoYW5uZWxzOyBpKyspCisJCWltZ19pMnNfb3V0X2NoX2Rpc2FibGUoaTJzLCBpKTsKKworCWZvciAoaSA9IDA7IGkgPCBpMnMtPm1heF9pMnNfY2hhbjsgaSsrKSB7CisJCXJlZyA9IGltZ19pMnNfb3V0X2NoX3JlYWRsKGkycywgaSwgSU1HX0kyU19PVVRfQ0hfQ1RMKTsKKwkJcmVnID0gKHJlZyAmIH5jaGFuX2NvbnRyb2xfbWFzaykgfCBjaGFuX2NvbnRyb2xfc2V0OworCQlpbWdfaTJzX291dF9jaF93cml0ZWwoaTJzLCBpLCByZWcsIElNR19JMlNfT1VUX0NIX0NUTCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGkycy0+YWN0aXZlX2NoYW5uZWxzOyBpKyspCisJCWltZ19pMnNfb3V0X2NoX2VuYWJsZShpMnMsIGkpOworCisJaW1nX2kyc19vdXRfZW5hYmxlKGkycyk7CisKKwlpMnMtPmZvcmNlX2Nsa19hY3RpdmUgPSBmb3JjZV9jbGtfYWN0aXZlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGltZ19pMnNfb3V0X2RhaV9vcHMgPSB7CisJLnRyaWdnZXIgPSBpbWdfaTJzX291dF90cmlnZ2VyLAorCS5od19wYXJhbXMgPSBpbWdfaTJzX291dF9od19wYXJhbXMsCisJLnNldF9mbXQgPSBpbWdfaTJzX291dF9zZXRfZm10Cit9OworCitzdGF0aWMgaW50IGltZ19pMnNfb3V0X2RhaV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgaW1nX2kyc19vdXQgKmkycyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisKKwlzbmRfc29jX2RhaV9pbml0X2RtYV9kYXRhKGRhaSwgJmkycy0+ZG1hX2RhdGEsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIGltZ19pMnNfb3V0X2NvbXBvbmVudCA9IHsKKwkubmFtZSA9ICJpbWctaTJzLW91dCIKK307CisKK3N0YXRpYyBpbnQgaW1nX2kyc19vdXRfZG1hX3ByZXBhcmVfc2xhdmVfY29uZmlnKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3QsCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpzYykKK3sKKwl1bnNpZ25lZCBpbnQgaTJzX2NoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcykgLyAyOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfZG1hZW5naW5lX2RhaV9kbWFfZGF0YSAqZG1hX2RhdGE7CisJaW50IHJldDsKKworCWRtYV9kYXRhID0gc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKHJ0ZC0+Y3B1X2RhaSwgc3QpOworCisJcmV0ID0gc25kX2h3cGFyYW1zX3RvX2RtYV9zbGF2ZV9jb25maWcoc3QsIHBhcmFtcywgc2MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzYy0+ZHN0X2FkZHIgPSBkbWFfZGF0YS0+YWRkcjsKKwlzYy0+ZHN0X2FkZHJfd2lkdGggPSBkbWFfZGF0YS0+YWRkcl93aWR0aDsKKwlzYy0+ZHN0X21heGJ1cnN0ID0gNCAqIGkyc19jaGFubmVsczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9kbWFlbmdpbmVfcGNtX2NvbmZpZyBpbWdfaTJzX291dF9kbWFfY29uZmlnID0geworCS5wcmVwYXJlX3NsYXZlX2NvbmZpZyA9IGltZ19pMnNfb3V0X2RtYV9wcmVwYXJlX3NsYXZlX2NvbmZpZworfTsKKworc3RhdGljIGludCBpbWdfaTJzX291dF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpbWdfaTJzX291dCAqaTJzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgaSwgcmV0OworCXVuc2lnbmVkIGludCBtYXhfaTJzX2NoYW5fcG93XzI7CisJdTMyIHJlZzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCisJaTJzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaTJzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMnMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJzKTsKKworCWkycy0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGJhc2UpOworCisJaTJzLT5iYXNlID0gYmFzZTsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgImltZyxpMnMtY2hhbm5lbHMiLAorCQkJJmkycy0+bWF4X2kyc19jaGFuKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBpbWcsaTJzLWNoYW5uZWxzIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWF4X2kyc19jaGFuX3Bvd18yID0gMSA8PCBnZXRfY291bnRfb3JkZXIoaTJzLT5tYXhfaTJzX2NoYW4pOworCisJaTJzLT5jaGFubmVsX2Jhc2UgPSBiYXNlICsgKG1heF9pMnNfY2hhbl9wb3dfMiAqIDB4MjApOworCisJaTJzLT5yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KCZwZGV2LT5kZXYsICJyc3QiKTsKKwlpZiAoSVNfRVJSKGkycy0+cnN0KSkgeworCQlpZiAoUFRSX0VSUihpMnMtPnJzdCkgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHRvcCBsZXZlbCByZXNldCBmb3VuZFxuIik7CisJCXJldHVybiBQVFJfRVJSKGkycy0+cnN0KTsKKwl9CisKKwlpMnMtPmNsa19zeXMgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInN5cyIpOworCWlmIChJU19FUlIoaTJzLT5jbGtfc3lzKSkgeworCQlpZiAoUFRSX0VSUihpMnMtPmNsa19zeXMpICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhY3F1aXJlIGNsb2NrICdzeXMnXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaTJzLT5jbGtfc3lzKTsKKwl9CisKKwlpMnMtPmNsa19yZWYgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInJlZiIpOworCWlmIChJU19FUlIoaTJzLT5jbGtfcmVmKSkgeworCQlpZiAoUFRSX0VSUihpMnMtPmNsa19yZWYpICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhY3F1aXJlIGNsb2NrICdyZWYnXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaTJzLT5jbGtfcmVmKTsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaTJzLT5jbGtfc3lzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVnID0gSU1HX0kyU19PVVRfQ1RMX0ZSTV9TSVpFX01BU0s7CisJaW1nX2kyc19vdXRfd3JpdGVsKGkycywgcmVnLCBJTUdfSTJTX09VVF9DVEwpOworCisJcmVnID0gSU1HX0kyU19PVVRfQ0hBTl9DVExfSlVTVF9NQVNLIHwKKwkJSU1HX0kyU19PVVRfQ0hBTl9DVExfTFRfTUFTSyB8CisJCUlNR19JMlNfT1VUX0NIQU5fQ1RMX0NIX01BU0sgfAorCQkoOCA8PCBJTUdfSTJTX09VVF9DSEFOX0NUTF9GTVRfU0hJRlQpOworCisJZm9yIChpID0gMDsgaSA8IGkycy0+bWF4X2kyc19jaGFuOyBpKyspCisJCWltZ19pMnNfb3V0X2NoX3dyaXRlbChpMnMsIGksIHJlZywgSU1HX0kyU19PVVRfQ0hfQ1RMKTsKKworCWltZ19pMnNfb3V0X3Jlc2V0KGkycyk7CisKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKwlpZiAoIXBtX3J1bnRpbWVfZW5hYmxlZCgmcGRldi0+ZGV2KSkgeworCQlyZXQgPSBpbWdfaTJzX291dF9yZXN1bWUoJnBkZXYtPmRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9wbV9kaXNhYmxlOworCX0KKworCWkycy0+YWN0aXZlX2NoYW5uZWxzID0gMTsKKwlpMnMtPmRtYV9kYXRhLmFkZHIgPSByZXMtPnN0YXJ0ICsgSU1HX0kyU19PVVRfVFhfRklGTzsKKwlpMnMtPmRtYV9kYXRhLmFkZHJfd2lkdGggPSA0OworCWkycy0+ZG1hX2RhdGEubWF4YnVyc3QgPSA0OworCisJaTJzLT5kYWlfZHJpdmVyLnByb2JlID0gaW1nX2kyc19vdXRfZGFpX3Byb2JlOworCWkycy0+ZGFpX2RyaXZlci5wbGF5YmFjay5jaGFubmVsc19taW4gPSAyOworCWkycy0+ZGFpX2RyaXZlci5wbGF5YmFjay5jaGFubmVsc19tYXggPSBpMnMtPm1heF9pMnNfY2hhbiAqIDI7CisJaTJzLT5kYWlfZHJpdmVyLnBsYXliYWNrLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDA7CisJaTJzLT5kYWlfZHJpdmVyLnBsYXliYWNrLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRTsKKwlpMnMtPmRhaV9kcml2ZXIub3BzID0gJmltZ19pMnNfb3V0X2RhaV9vcHM7CisKKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZwZGV2LT5kZXYsCisJCQkmaW1nX2kyc19vdXRfY29tcG9uZW50LCAmaTJzLT5kYWlfZHJpdmVyLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9zdXNwZW5kOworCisJcmV0ID0gZGV2bV9zbmRfZG1hZW5naW5lX3BjbV9yZWdpc3RlcigmcGRldi0+ZGV2LAorCQkJJmltZ19pMnNfb3V0X2RtYV9jb25maWcsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3N1c3BlbmQ7CisKKwlyZXR1cm4gMDsKKworZXJyX3N1c3BlbmQ6CisJaWYgKCFwbV9ydW50aW1lX3N0YXR1c19zdXNwZW5kZWQoJnBkZXYtPmRldikpCisJCWltZ19pMnNfb3V0X3N1c3BlbmQoJnBkZXYtPmRldik7CitlcnJfcG1fZGlzYWJsZToKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkycy0+Y2xrX3N5cyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGltZ19pMnNfb3V0X2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaW1nX2kyc19vdXQgKmkycyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCWlmICghcG1fcnVudGltZV9zdGF0dXNfc3VzcGVuZGVkKCZwZGV2LT5kZXYpKQorCQlpbWdfaTJzX291dF9zdXNwZW5kKCZwZGV2LT5kZXYpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkycy0+Y2xrX3N5cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW1nX2kyc19vdXRfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImltZyxpMnMtb3V0IiB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW1nX2kyc19vdXRfb2ZfbWF0Y2gpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaW1nX2kyc19vdXRfcG1fb3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyhpbWdfaTJzX291dF9zdXNwZW5kLAorCQkJICAgaW1nX2kyc19vdXRfcmVzdW1lLCBOVUxMKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW1nX2kyc19vdXRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImltZy1pMnMtb3V0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gaW1nX2kyc19vdXRfb2ZfbWF0Y2gsCisJCS5wbSA9ICZpbWdfaTJzX291dF9wbV9vcHMKKwl9LAorCS5wcm9iZSA9IGltZ19pMnNfb3V0X3Byb2JlLAorCS5yZW1vdmUgPSBpbWdfaTJzX291dF9kZXZfcmVtb3ZlCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpbWdfaTJzX291dF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJEYW1pZW4gSG9yc2xleSA8RGFtaWVuLkhvcnNsZXlAaW1ndGVjLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSU1HIEkyUyBPdXRwdXQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW1nL2ltZy1wYXJhbGxlbC1vdXQuYyBiL3NvdW5kL3NvYy9pbWcvaW1nLXBhcmFsbGVsLW91dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNjEwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW1nL2ltZy1wYXJhbGxlbC1vdXQuYwpAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIElNRyBwYXJhbGxlbCBvdXRwdXQgY29udHJvbGxlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBBdXRob3I6IERhbWllbiBIb3JzbGV5IDxEYW1pZW4uSG9yc2xleUBpbWd0ZWMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvZG1hZW5naW5lX3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNkZWZpbmUgSU1HX1BSTF9PVVRfVFhfRklGTwkJMAorCisjZGVmaW5lIElNR19QUkxfT1VUX0NUTAkJCTB4NAorI2RlZmluZSBJTUdfUFJMX09VVF9DVExfQ0hfTUFTSwkJQklUKDQpCisjZGVmaW5lIElNR19QUkxfT1VUX0NUTF9QQUNLSF9NQVNLCUJJVCgzKQorI2RlZmluZSBJTUdfUFJMX09VVF9DVExfRURHRV9NQVNLCUJJVCgyKQorI2RlZmluZSBJTUdfUFJMX09VVF9DVExfTUVfTUFTSwkJQklUKDEpCisjZGVmaW5lIElNR19QUkxfT1VUX0NUTF9TUlNUX01BU0sJQklUKDApCisKK3N0cnVjdCBpbWdfcHJsX291dCB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBjbGsgKmNsa19zeXM7CisJc3RydWN0IGNsayAqY2xrX3JlZjsKKwlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlfZG1hX2RhdGEgZG1hX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCByZXNldF9jb250cm9sICpyc3Q7Cit9OworCitzdGF0aWMgaW50IGltZ19wcmxfb3V0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpbWdfcHJsX291dCAqcHJsID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJsLT5jbGtfcmVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19wcmxfb3V0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGltZ19wcmxfb3V0ICpwcmwgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBybC0+Y2xrX3JlZik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImNsa19lbmFibGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltZ19wcmxfb3V0X3dyaXRlbChzdHJ1Y3QgaW1nX3BybF9vdXQgKnBybCwKKwkJCQl1MzIgdmFsLCB1MzIgcmVnKQoreworCXdyaXRlbCh2YWwsIHBybC0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGltZ19wcmxfb3V0X3JlYWRsKHN0cnVjdCBpbWdfcHJsX291dCAqcHJsLCB1MzIgcmVnKQoreworCXJldHVybiByZWFkbChwcmwtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBpbWdfcHJsX291dF9yZXNldChzdHJ1Y3QgaW1nX3BybF9vdXQgKnBybCkKK3sKKwl1MzIgY3RsOworCisJY3RsID0gaW1nX3BybF9vdXRfcmVhZGwocHJsLCBJTUdfUFJMX09VVF9DVEwpICYKKwkJCX5JTUdfUFJMX09VVF9DVExfTUVfTUFTSzsKKworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBybC0+cnN0KTsKKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHBybC0+cnN0KTsKKworCWltZ19wcmxfb3V0X3dyaXRlbChwcmwsIGN0bCwgSU1HX1BSTF9PVVRfQ1RMKTsKK30KKworc3RhdGljIGludCBpbWdfcHJsX291dF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAorCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGltZ19wcmxfb3V0ICpwcmwgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCXUzMiByZWc7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlyZWcgPSBpbWdfcHJsX291dF9yZWFkbChwcmwsIElNR19QUkxfT1VUX0NUTCk7CisJCXJlZyB8PSBJTUdfUFJMX09VVF9DVExfTUVfTUFTSzsKKwkJaW1nX3BybF9vdXRfd3JpdGVsKHBybCwgcmVnLCBJTUdfUFJMX09VVF9DVEwpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJaW1nX3BybF9vdXRfcmVzZXQocHJsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3BybF9vdXRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgaW1nX3BybF9vdXQgKnBybCA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJdW5zaWduZWQgaW50IHJhdGUsIGNoYW5uZWxzOworCXUzMiByZWcsIGNvbnRyb2xfc2V0ID0gMDsKKwlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdDsKKworCXJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWZvcm1hdCA9IHBhcmFtc19mb3JtYXQocGFyYW1zKTsKKwljaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQljb250cm9sX3NldCB8PSBJTUdfUFJMX09VVF9DVExfUEFDS0hfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNoYW5uZWxzICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrX3NldF9yYXRlKHBybC0+Y2xrX3JlZiwgcmF0ZSAqIDI1Nik7CisKKwlyZWcgPSBpbWdfcHJsX291dF9yZWFkbChwcmwsIElNR19QUkxfT1VUX0NUTCk7CisJcmVnID0gKHJlZyAmIH5JTUdfUFJMX09VVF9DVExfUEFDS0hfTUFTSykgfCBjb250cm9sX3NldDsKKwlpbWdfcHJsX291dF93cml0ZWwocHJsLCByZWcsIElNR19QUkxfT1VUX0NUTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfcHJsX291dF9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBpbWdfcHJsX291dCAqcHJsID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKwl1MzIgcmVnLCBjb250cm9sX3NldCA9IDA7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJY29udHJvbF9zZXQgfD0gSU1HX1BSTF9PVVRfQ1RMX0VER0VfTUFTSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVnID0gaW1nX3BybF9vdXRfcmVhZGwocHJsLCBJTUdfUFJMX09VVF9DVEwpOworCXJlZyA9IChyZWcgJiB+SU1HX1BSTF9PVVRfQ1RMX0VER0VfTUFTSykgfCBjb250cm9sX3NldDsKKwlpbWdfcHJsX291dF93cml0ZWwocHJsLCByZWcsIElNR19QUkxfT1VUX0NUTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgaW1nX3BybF9vdXRfZGFpX29wcyA9IHsKKwkudHJpZ2dlciA9IGltZ19wcmxfb3V0X3RyaWdnZXIsCisJLmh3X3BhcmFtcyA9IGltZ19wcmxfb3V0X2h3X3BhcmFtcywKKwkuc2V0X2ZtdCA9IGltZ19wcmxfb3V0X3NldF9mbXQKK307CisKK3N0YXRpYyBpbnQgaW1nX3BybF9vdXRfZGFpX3Byb2JlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpbWdfcHJsX291dCAqcHJsID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKworCXNuZF9zb2NfZGFpX2luaXRfZG1hX2RhdGEoZGFpLCAmcHJsLT5kbWFfZGF0YSwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgaW1nX3BybF9vdXRfZGFpID0geworCS5wcm9iZSA9IGltZ19wcmxfb3V0X2RhaV9wcm9iZSwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRQorCX0sCisJLm9wcyA9ICZpbWdfcHJsX291dF9kYWlfb3BzCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciBpbWdfcHJsX291dF9jb21wb25lbnQgPSB7CisJLm5hbWUgPSAiaW1nLXBybC1vdXQiCit9OworCitzdGF0aWMgaW50IGltZ19wcmxfb3V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGltZ19wcmxfb3V0ICpwcmw7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCByZXQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKworCXBybCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBybCksIEdGUF9LRVJORUwpOworCWlmICghcHJsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBybCk7CisKKwlwcmwtPmRldiA9ICZwZGV2LT5kZXY7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlKTsKKworCXBybC0+YmFzZSA9IGJhc2U7CisKKwlwcmwtPnJzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoJnBkZXYtPmRldiwgInJzdCIpOworCWlmIChJU19FUlIocHJsLT5yc3QpKSB7CisJCWlmIChQVFJfRVJSKHBybC0+cnN0KSAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gdG9wIGxldmVsIHJlc2V0IGZvdW5kXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocHJsLT5yc3QpOworCX0KKworCXBybC0+Y2xrX3N5cyA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAic3lzIik7CisJaWYgKElTX0VSUihwcmwtPmNsa19zeXMpKSB7CisJCWlmIChQVFJfRVJSKHBybC0+Y2xrX3N5cykgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFjcXVpcmUgY2xvY2sgJ3N5cydcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwcmwtPmNsa19zeXMpOworCX0KKworCXBybC0+Y2xrX3JlZiA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicmVmIik7CisJaWYgKElTX0VSUihwcmwtPmNsa19yZWYpKSB7CisJCWlmIChQVFJfRVJSKHBybC0+Y2xrX3JlZikgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFjcXVpcmUgY2xvY2sgJ3JlZidcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwcmwtPmNsa19yZWYpOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcmwtPmNsa19zeXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpbWdfcHJsX291dF93cml0ZWwocHJsLCBJTUdfUFJMX09VVF9DVExfRURHRV9NQVNLLCBJTUdfUFJMX09VVF9DVEwpOworCWltZ19wcmxfb3V0X3Jlc2V0KHBybCk7CisKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKwlpZiAoIXBtX3J1bnRpbWVfZW5hYmxlZCgmcGRldi0+ZGV2KSkgeworCQlyZXQgPSBpbWdfcHJsX291dF9yZXN1bWUoJnBkZXYtPmRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9wbV9kaXNhYmxlOworCX0KKworCXBybC0+ZG1hX2RhdGEuYWRkciA9IHJlcy0+c3RhcnQgKyBJTUdfUFJMX09VVF9UWF9GSUZPOworCXBybC0+ZG1hX2RhdGEuYWRkcl93aWR0aCA9IDQ7CisJcHJsLT5kbWFfZGF0YS5tYXhidXJzdCA9IDQ7CisKKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZwZGV2LT5kZXYsCisJCQkmaW1nX3BybF9vdXRfY29tcG9uZW50LAorCQkJJmltZ19wcmxfb3V0X2RhaSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfc3VzcGVuZDsKKworCXJldCA9IGRldm1fc25kX2RtYWVuZ2luZV9wY21fcmVnaXN0ZXIoJnBkZXYtPmRldiwgTlVMTCwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfc3VzcGVuZDsKKworCXJldHVybiAwOworCitlcnJfc3VzcGVuZDoKKwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgmcGRldi0+ZGV2KSkKKwkJaW1nX3BybF9vdXRfc3VzcGVuZCgmcGRldi0+ZGV2KTsKK2Vycl9wbV9kaXNhYmxlOgorCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJsLT5jbGtfc3lzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3BybF9vdXRfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpbWdfcHJsX291dCAqcHJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJaWYgKCFwbV9ydW50aW1lX3N0YXR1c19zdXNwZW5kZWQoJnBkZXYtPmRldikpCisJCWltZ19wcmxfb3V0X3N1c3BlbmQoJnBkZXYtPmRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJsLT5jbGtfc3lzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbWdfcHJsX291dF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiaW1nLHBhcmFsbGVsLW91dCIgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGltZ19wcmxfb3V0X29mX21hdGNoKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGltZ19wcmxfb3V0X3BtX29wcyA9IHsKKwlTRVRfUlVOVElNRV9QTV9PUFMoaW1nX3BybF9vdXRfc3VzcGVuZCwKKwkJCSAgIGltZ19wcmxfb3V0X3Jlc3VtZSwgTlVMTCkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGltZ19wcmxfb3V0X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpbWctcGFyYWxsZWwtb3V0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gaW1nX3BybF9vdXRfb2ZfbWF0Y2gsCisJCS5wbSA9ICZpbWdfcHJsX291dF9wbV9vcHMKKwl9LAorCS5wcm9iZSA9IGltZ19wcmxfb3V0X3Byb2JlLAorCS5yZW1vdmUgPSBpbWdfcHJsX291dF9kZXZfcmVtb3ZlCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpbWdfcHJsX291dF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJEYW1pZW4gSG9yc2xleSA8RGFtaWVuLkhvcnNsZXlAaW1ndGVjLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSU1HIFBhcmFsbGVsIE91dHB1dCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbWcvaW1nLXNwZGlmLWluLmMgYi9zb3VuZC9zb2MvaW1nL2ltZy1zcGRpZi1pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOTk1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW1nL2ltZy1zcGRpZi1pbi5jCkBAIC0wLDAgKzEsODA2IEBACisvKgorICogSU1HIFNQRElGIGlucHV0IGNvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogQXV0aG9yOiBEYW1pZW4gSG9yc2xleSA8RGFtaWVuLkhvcnNsZXlAaW1ndGVjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvZG1hZW5naW5lX3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNkZWZpbmUgSU1HX1NQRElGX0lOX1JYX0ZJRk9fT0ZGU0VUCQkwCisKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0NUTAkJCTB4NAorI2RlZmluZSBJTUdfU1BESUZfSU5fQ1RMX0xPQ0tMT19NQVNLCQkweGZmCisjZGVmaW5lIElNR19TUERJRl9JTl9DVExfTE9DS0xPX1NISUZUCQkwCisjZGVmaW5lIElNR19TUERJRl9JTl9DVExfTE9DS0hJX01BU0sJCTB4ZmYwMAorI2RlZmluZSBJTUdfU1BESUZfSU5fQ1RMX0xPQ0tISV9TSElGVAkJOAorI2RlZmluZSBJTUdfU1BESUZfSU5fQ1RMX1RSS19NQVNLCQkweGZmMDAwMAorI2RlZmluZSBJTUdfU1BESUZfSU5fQ1RMX1RSS19TSElGVAkJMTYKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0NUTF9TUkRfTUFTSwkJMHg3MDAwMDAwMAorI2RlZmluZSBJTUdfU1BESUZfSU5fQ1RMX1NSRF9TSElGVAkJMjgKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0NUTF9TUlRfTUFTSwkJQklUKDMxKQorCisjZGVmaW5lIElNR19TUERJRl9JTl9TVEFUVVMJCQkweDgKKyNkZWZpbmUgSU1HX1NQRElGX0lOX1NUQVRVU19TQU1fTUFTSwkJMHg3MDAwCisjZGVmaW5lIElNR19TUERJRl9JTl9TVEFUVVNfU0FNX1NISUZUCQkxMgorI2RlZmluZSBJTUdfU1BESUZfSU5fU1RBVFVTX0xPQ0tfTUFTSwkJQklUKDE1KQorI2RlZmluZSBJTUdfU1BESUZfSU5fU1RBVFVTX0xPQ0tfU0hJRlQJCTE1CisKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0NMS0dFTgkJCTB4MWMKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0NMS0dFTl9OT01fTUFTSwkJMHgzZmYKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0NMS0dFTl9OT01fU0hJRlQJCTAKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0NMS0dFTl9ITERfTUFTSwkJMHgzZmYwMDAwCisjZGVmaW5lIElNR19TUERJRl9JTl9DTEtHRU5fSExEX1NISUZUCQkxNgorCisjZGVmaW5lIElNR19TUERJRl9JTl9DU0wJCQkweDIwCisKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0NTSAkJCTB4MjQKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0NTSF9NQVNLCQkJMHhmZgorI2RlZmluZSBJTUdfU1BESUZfSU5fQ1NIX1NISUZUCQkJMAorCisjZGVmaW5lIElNR19TUERJRl9JTl9TT0ZUX1JFU0VUCQkJMHgyOAorI2RlZmluZSBJTUdfU1BESUZfSU5fU09GVF9SRVNFVF9NQVNLCQlCSVQoMCkKKworI2RlZmluZSBJTUdfU1BESUZfSU5fQUNMS0dFTl9TVEFSVAkJMHgyYworI2RlZmluZSBJTUdfU1BESUZfSU5fQUNMS0dFTl9OT01fTUFTSwkJMHgzZmYKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0FDTEtHRU5fTk9NX1NISUZUCQkwCisjZGVmaW5lIElNR19TUERJRl9JTl9BQ0xLR0VOX0hMRF9NQVNLCQkweGZmYzAwCisjZGVmaW5lIElNR19TUERJRl9JTl9BQ0xLR0VOX0hMRF9TSElGVAkJMTAKKyNkZWZpbmUgSU1HX1NQRElGX0lOX0FDTEtHRU5fVFJLX01BU0sJCTB4ZmYwMDAwMAorI2RlZmluZSBJTUdfU1BESUZfSU5fQUNMS0dFTl9UUktfU0hJRlQJCTIwCisKKyNkZWZpbmUgSU1HX1NQRElGX0lOX05VTV9BQ0xLR0VOCQk0CisKK3N0cnVjdCBpbWdfc3BkaWZfaW4geworCXNwaW5sb2NrX3QgbG9jazsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IGNsayAqY2xrX3N5czsKKwlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlfZG1hX2RhdGEgZG1hX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2OworCXVuc2lnbmVkIGludCB0cms7CisJYm9vbCBtdWx0aV9mcmVxOworCWludCBsb2NrX2FjcXVpcmU7CisJaW50IGxvY2tfcmVsZWFzZTsKKwl1bnNpZ25lZCBpbnQgc2luZ2xlX2ZyZXE7CisJdW5zaWduZWQgaW50IG11bHRpX2ZyZXFzW0lNR19TUERJRl9JTl9OVU1fQUNMS0dFTl07CisJYm9vbCBhY3RpdmU7CisKKwkvKiBXcml0ZS1vbmx5IHJlZ2lzdGVycyAqLworCXVuc2lnbmVkIGludCBhY2xrZ2VuX3JlZ3NbSU1HX1NQRElGX0lOX05VTV9BQ0xLR0VOXTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWdfc3BkaWZfaW5fd3JpdGVsKHN0cnVjdCBpbWdfc3BkaWZfaW4gKnNwZGlmLAorCQkJCQl1MzIgdmFsLCB1MzIgcmVnKQoreworCXdyaXRlbCh2YWwsIHNwZGlmLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaW1nX3NwZGlmX2luX3JlYWRsKHN0cnVjdCBpbWdfc3BkaWZfaW4gKnNwZGlmLCB1MzIgcmVnKQoreworCXJldHVybiByZWFkbChzcGRpZi0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWdfc3BkaWZfaW5fYWNsa2dlbl93cml0ZWwoc3RydWN0IGltZ19zcGRpZl9pbiAqc3BkaWYsCisJCQkJCQl1MzIgaW5kZXgpCit7CisJaW1nX3NwZGlmX2luX3dyaXRlbChzcGRpZiwgc3BkaWYtPmFjbGtnZW5fcmVnc1tpbmRleF0sCisJCQlJTUdfU1BESUZfSU5fQUNMS0dFTl9TVEFSVCArIChpbmRleCAqIDB4NCkpOworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9pbl9jaGVja19tYXhfcmF0ZShzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiwKKwkJdW5zaWduZWQgaW50IHNhbXBsZV9yYXRlLCB1bnNpZ25lZCBsb25nICphY3R1YWxfZnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIG1pbl9mcmVxLCBmcmVxX3Q7CisKKwkvKiBDbG9jayByYXRlIG11c3QgYmUgYXQgbGVhc3QgMjR4IHRoZSBiaXQgcmF0ZSAqLworCW1pbl9mcmVxID0gc2FtcGxlX3JhdGUgKiAyICogMzIgKiAyNDsKKworCWZyZXFfdCA9IGNsa19nZXRfcmF0ZShzcGRpZi0+Y2xrX3N5cyk7CisKKwlpZiAoZnJlcV90IDwgbWluX2ZyZXEpCisJCXJldHVybiAtRUlOVkFMOworCisJKmFjdHVhbF9mcmVxID0gZnJlcV90OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX2RvX2Nsa2dlbl9jYWxjKHVuc2lnbmVkIGludCByYXRlLCB1bnNpZ25lZCBpbnQgKnBub20sCisJCXVuc2lnbmVkIGludCAqcGhsZCwgdW5zaWduZWQgbG9uZyBjbGtfcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgb3JpLCBub20sIGhsZDsKKworCS8qCisJICogQ2FsY3VsYXRlIG92ZXJzYW1wbGluZyByYXRpbywgbm9taW5hbCBwaGFzZSBpbmNyZW1lbnQgYW5kIGhvbGQKKwkgKiBpbmNyZW1lbnQgZm9yIHRoZSBnaXZlbiByYXRlIC8gZnJlcXVlbmN5CisJICovCisKKwlpZiAoIXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJb3JpID0gY2xrX3JhdGUgLyAocmF0ZSAqIDY0KTsKKworCWlmICghb3JpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5vbSA9ICg0MDk2IC8gb3JpKSArIDE7CisJZG8KKwkJaGxkID0gNDA5NiAtICgtLW5vbSAqIChvcmkgLSAxKSk7CisJd2hpbGUgKGhsZCA8IDEyMCk7CisKKwkqcG5vbSA9IG5vbTsKKwkqcGhsZCA9IGhsZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9pbl9kb19jbGtnZW5fc2luZ2xlKHN0cnVjdCBpbWdfc3BkaWZfaW4gKnNwZGlmLAorCQl1bnNpZ25lZCBpbnQgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbm9tLCBobGQ7CisJdW5zaWduZWQgbG9uZyBmbGFncywgY2xrX3JhdGU7CisJaW50IHJldCA9IDA7CisJdTMyIHJlZzsKKworCXJldCA9IGltZ19zcGRpZl9pbl9jaGVja19tYXhfcmF0ZShzcGRpZiwgcmF0ZSwgJmNsa19yYXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaW1nX3NwZGlmX2luX2RvX2Nsa2dlbl9jYWxjKHJhdGUsICZub20sICZobGQsIGNsa19yYXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVnID0gKG5vbSA8PCBJTUdfU1BESUZfSU5fQ0xLR0VOX05PTV9TSElGVCkgJgorCQlJTUdfU1BESUZfSU5fQ0xLR0VOX05PTV9NQVNLOworCXJlZyB8PSAoaGxkIDw8IElNR19TUERJRl9JTl9DTEtHRU5fSExEX1NISUZUKSAmCisJCUlNR19TUERJRl9JTl9DTEtHRU5fSExEX01BU0s7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChzcGRpZi0+YWN0aXZlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwZGlmLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW1nX3NwZGlmX2luX3dyaXRlbChzcGRpZiwgcmVnLCBJTUdfU1BESUZfSU5fQ0xLR0VOKTsKKworCXNwZGlmLT5zaW5nbGVfZnJlcSA9IHJhdGU7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX2RvX2Nsa2dlbl9tdWx0aShzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiwKKwkJdW5zaWduZWQgaW50IG11bHRpX2ZyZXFzW10pCit7CisJdW5zaWduZWQgaW50IG5vbSwgaGxkLCByYXRlLCBtYXhfcmF0ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFncywgY2xrX3JhdGU7CisJaW50IGksIHJldCA9IDA7CisJdTMyIHJlZywgdHJrX3JlZywgdGVtcF9yZWdzW0lNR19TUERJRl9JTl9OVU1fQUNMS0dFTl07CisKKwlmb3IgKGkgPSAwOyBpIDwgSU1HX1NQRElGX0lOX05VTV9BQ0xLR0VOOyBpKyspCisJCWlmIChtdWx0aV9mcmVxc1tpXSA+IG1heF9yYXRlKQorCQkJbWF4X3JhdGUgPSBtdWx0aV9mcmVxc1tpXTsKKworCXJldCA9IGltZ19zcGRpZl9pbl9jaGVja19tYXhfcmF0ZShzcGRpZiwgbWF4X3JhdGUsICZjbGtfcmF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBJTUdfU1BESUZfSU5fTlVNX0FDTEtHRU47IGkrKykgeworCQlyYXRlID0gbXVsdGlfZnJlcXNbaV07CisKKwkJcmV0ID0gaW1nX3NwZGlmX2luX2RvX2Nsa2dlbl9jYWxjKHJhdGUsICZub20sICZobGQsIGNsa19yYXRlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmVnID0gKG5vbSA8PCBJTUdfU1BESUZfSU5fQUNMS0dFTl9OT01fU0hJRlQpICYKKwkJCUlNR19TUERJRl9JTl9BQ0xLR0VOX05PTV9NQVNLOworCQlyZWcgfD0gKGhsZCA8PCBJTUdfU1BESUZfSU5fQUNMS0dFTl9ITERfU0hJRlQpICYKKwkJCUlNR19TUERJRl9JTl9BQ0xLR0VOX0hMRF9NQVNLOworCQl0ZW1wX3JlZ3NbaV0gPSByZWc7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwZGlmLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3BkaWYtPmFjdGl2ZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXRya19yZWcgPSBzcGRpZi0+dHJrIDw8IElNR19TUERJRl9JTl9BQ0xLR0VOX1RSS19TSElGVDsKKworCWZvciAoaSA9IDA7IGkgPCBJTUdfU1BESUZfSU5fTlVNX0FDTEtHRU47IGkrKykgeworCQlzcGRpZi0+YWNsa2dlbl9yZWdzW2ldID0gdGVtcF9yZWdzW2ldIHwgdHJrX3JlZzsKKwkJaW1nX3NwZGlmX2luX2FjbGtnZW5fd3JpdGVsKHNwZGlmLCBpKTsKKwl9CisKKwlzcGRpZi0+bXVsdGlfZnJlcSA9IHRydWU7CisJc3BkaWYtPm11bHRpX2ZyZXFzWzBdID0gbXVsdGlfZnJlcXNbMF07CisJc3BkaWYtPm11bHRpX2ZyZXFzWzFdID0gbXVsdGlfZnJlcXNbMV07CisJc3BkaWYtPm11bHRpX2ZyZXFzWzJdID0gbXVsdGlfZnJlcXNbMl07CisJc3BkaWYtPm11bHRpX2ZyZXFzWzNdID0gbXVsdGlfZnJlcXNbM107CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX2llYzk1OF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTg7CisJdWluZm8tPmNvdW50ID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9pbl9nZXRfc3RhdHVzX21hc2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzBdID0gMHhmZjsKKwl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1sxXSA9IDB4ZmY7CisJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMl0gPSAweGZmOworCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzNdID0gMHhmZjsKKwl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1s0XSA9IDB4ZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfc3BkaWZfaW5fZ2V0X3N0YXR1cyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOworCXUzMiByZWc7CisKKwlyZWcgPSBpbWdfc3BkaWZfaW5fcmVhZGwoc3BkaWYsIElNR19TUERJRl9JTl9DU0wpOworCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzBdID0gcmVnICYgMHhmZjsKKwl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1sxXSA9IChyZWcgPj4gOCkgJiAweGZmOworCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzJdID0gKHJlZyA+PiAxNikgJiAweGZmOworCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzNdID0gKHJlZyA+PiAyNCkgJiAweGZmOworCXJlZyA9IGltZ19zcGRpZl9pbl9yZWFkbChzcGRpZiwgSU1HX1NQRElGX0lOX0NTSCk7CisJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbNF0gPSAocmVnICYgSU1HX1NQRElGX0lOX0NTSF9NQVNLKQorCQk+PiBJTUdfU1BESUZfSU5fQ1NIX1NISUZUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX2luZm9fbXVsdGlfZnJlcShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSBJTUdfU1BESUZfSU5fTlVNX0FDTEtHRU47CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBMT05HX01BWDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9pbl9nZXRfbXVsdGlfZnJlcShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoc3BkaWYtPm11bHRpX2ZyZXEpIHsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzcGRpZi0+bXVsdGlfZnJlcXNbMF07CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gc3BkaWYtPm11bHRpX2ZyZXFzWzFdOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsyXSA9IHNwZGlmLT5tdWx0aV9mcmVxc1syXTsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbM10gPSBzcGRpZi0+bXVsdGlfZnJlcXNbM107CisJfSBlbHNlIHsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAwOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IDA7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzJdID0gMDsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbM10gPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX3NldF9tdWx0aV9mcmVxKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBpbWdfc3BkaWZfaW4gKnNwZGlmID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoY3B1X2RhaSk7CisJdW5zaWduZWQgaW50IG11bHRpX2ZyZXFzW0lNR19TUERJRl9JTl9OVU1fQUNMS0dFTl07CisJYm9vbCBtdWx0aV9mcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID09IDApICYmCisJCQkodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPT0gMCkgJiYKKwkJCSh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsyXSA9PSAwKSAmJgorCQkJKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzNdID09IDApKSB7CisJCW11bHRpX2ZyZXEgPSBmYWxzZTsKKwl9IGVsc2UgeworCQltdWx0aV9mcmVxc1swXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCQltdWx0aV9mcmVxc1sxXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOworCQltdWx0aV9mcmVxc1syXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzJdOworCQltdWx0aV9mcmVxc1szXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzNdOworCQltdWx0aV9mcmVxID0gdHJ1ZTsKKwl9CisKKwlpZiAobXVsdGlfZnJlcSkKKwkJcmV0dXJuIGltZ19zcGRpZl9pbl9kb19jbGtnZW5fbXVsdGkoc3BkaWYsIG11bHRpX2ZyZXFzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHNwZGlmLT5hY3RpdmUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGRpZi0+bXVsdGlfZnJlcSA9IGZhbHNlOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9pbl9pbmZvX2xvY2tfZnJlcShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gTE9OR19NQVg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfc3BkaWZfaW5fZ2V0X2xvY2tfZnJlcShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjKQoreworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOworCXUzMiByZWc7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCisJcmVnID0gaW1nX3NwZGlmX2luX3JlYWRsKHNwZGlmLCBJTUdfU1BESUZfSU5fU1RBVFVTKTsKKwlpZiAocmVnICYgSU1HX1NQRElGX0lOX1NUQVRVU19MT0NLX01BU0spIHsKKwkJaWYgKHNwZGlmLT5tdWx0aV9mcmVxKSB7CisJCQlpID0gKChyZWcgJiBJTUdfU1BESUZfSU5fU1RBVFVTX1NBTV9NQVNLKSA+PgorCQkJCQlJTUdfU1BESUZfSU5fU1RBVFVTX1NBTV9TSElGVCkgLSAxOworCQkJdWMtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzcGRpZi0+bXVsdGlfZnJlcXNbaV07CisJCX0gZWxzZSB7CisJCQl1Yy0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHNwZGlmLT5zaW5nbGVfZnJlcTsKKwkJfQorCX0gZWxzZSB7CisJCXVjLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX2luZm9fdHJrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAyNTU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfc3BkaWZfaW5fZ2V0X3RyayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzcGRpZi0+dHJrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX3NldF90cmsoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGltZ19zcGRpZl9pbiAqc3BkaWYgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShjcHVfZGFpKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCXUzMiByZWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChzcGRpZi0+YWN0aXZlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwZGlmLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3BkaWYtPnRyayA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJcmVnID0gaW1nX3NwZGlmX2luX3JlYWRsKHNwZGlmLCBJTUdfU1BESUZfSU5fQ1RMKTsKKwlyZWcgJj0gfklNR19TUERJRl9JTl9DVExfVFJLX01BU0s7CisJcmVnIHw9IHNwZGlmLT50cmsgPDwgSU1HX1NQRElGX0lOX0NUTF9UUktfU0hJRlQ7CisJaW1nX3NwZGlmX2luX3dyaXRlbChzcGRpZiwgcmVnLCBJTUdfU1BESUZfSU5fQ1RMKTsKKworCWZvciAoaSA9IDA7IGkgPCBJTUdfU1BESUZfSU5fTlVNX0FDTEtHRU47IGkrKykgeworCQlzcGRpZi0+YWNsa2dlbl9yZWdzW2ldID0gKHNwZGlmLT5hY2xrZ2VuX3JlZ3NbaV0gJgorCQkJfklNR19TUERJRl9JTl9BQ0xLR0VOX1RSS19NQVNLKSB8CisJCQkoc3BkaWYtPnRyayA8PCBJTUdfU1BESUZfSU5fQUNMS0dFTl9UUktfU0hJRlQpOworCisJCWltZ19zcGRpZl9pbl9hY2xrZ2VuX3dyaXRlbChzcGRpZiwgaSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9pbl9pbmZvX2xvY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAtMTI4OworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDEyNzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9pbl9nZXRfbG9ja19hY3F1aXJlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBpbWdfc3BkaWZfaW4gKnNwZGlmID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoY3B1X2RhaSk7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHNwZGlmLT5sb2NrX2FjcXVpcmU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfc3BkaWZfaW5fc2V0X2xvY2tfYWNxdWlyZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHNwZGlmLT5hY3RpdmUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGRpZi0+bG9ja19hY3F1aXJlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlyZWcgPSBpbWdfc3BkaWZfaW5fcmVhZGwoc3BkaWYsIElNR19TUERJRl9JTl9DVEwpOworCXJlZyAmPSB+SU1HX1NQRElGX0lOX0NUTF9MT0NLSElfTUFTSzsKKwlyZWcgfD0gKHNwZGlmLT5sb2NrX2FjcXVpcmUgPDwgSU1HX1NQRElGX0lOX0NUTF9MT0NLSElfU0hJRlQpICYKKwkJSU1HX1NQRElGX0lOX0NUTF9MT0NLSElfTUFTSzsKKwlpbWdfc3BkaWZfaW5fd3JpdGVsKHNwZGlmLCByZWcsIElNR19TUERJRl9JTl9DVEwpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9pbl9nZXRfbG9ja19yZWxlYXNlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBpbWdfc3BkaWZfaW4gKnNwZGlmID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoY3B1X2RhaSk7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHNwZGlmLT5sb2NrX3JlbGVhc2U7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfc3BkaWZfaW5fc2V0X2xvY2tfcmVsZWFzZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHNwZGlmLT5hY3RpdmUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGRpZi0+bG9ja19yZWxlYXNlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlyZWcgPSBpbWdfc3BkaWZfaW5fcmVhZGwoc3BkaWYsIElNR19TUERJRl9JTl9DVEwpOworCXJlZyAmPSB+SU1HX1NQRElGX0lOX0NUTF9MT0NLTE9fTUFTSzsKKwlyZWcgfD0gKHNwZGlmLT5sb2NrX3JlbGVhc2UgPDwgSU1HX1NQRElGX0lOX0NUTF9MT0NLTE9fU0hJRlQpICYKKwkJSU1HX1NQRElGX0lOX0NUTF9MT0NLTE9fTUFTSzsKKwlpbWdfc3BkaWZfaW5fd3JpdGVsKHNwZGlmLCByZWcsIElNR19TUERJRl9JTl9DVEwpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaW1nX3NwZGlmX2luX2NvbnRyb2xzW10gPSB7CisJeworCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsIENBUFRVUkUsIE1BU0spLAorCQkuaW5mbyA9IGltZ19zcGRpZl9pbl9pZWM5NThfaW5mbywKKwkJLmdldCA9IGltZ19zcGRpZl9pbl9nZXRfc3RhdHVzX21hc2sKKwl9LAorCXsKKwkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwKKwkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSwKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIiwgQ0FQVFVSRSwgREVGQVVMVCksCisJCS5pbmZvID0gaW1nX3NwZGlmX2luX2llYzk1OF9pbmZvLAorCQkuZ2V0ID0gaW1nX3NwZGlmX2luX2dldF9zdGF0dXMKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCQkubmFtZSA9ICJTUERJRiBJbiBNdWx0aSBGcmVxdWVuY3kgQWNxdWlyZSIsCisJCS5pbmZvID0gaW1nX3NwZGlmX2luX2luZm9fbXVsdGlfZnJlcSwKKwkJLmdldCA9IGltZ19zcGRpZl9pbl9nZXRfbXVsdGlfZnJlcSwKKwkJLnB1dCA9IGltZ19zcGRpZl9pbl9zZXRfbXVsdGlfZnJlcQorCX0sCisJeworCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfAorCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLAorCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCisJCS5uYW1lID0gIlNQRElGIEluIExvY2sgRnJlcXVlbmN5IiwKKwkJLmluZm8gPSBpbWdfc3BkaWZfaW5faW5mb19sb2NrX2ZyZXEsCisJCS5nZXQgPSBpbWdfc3BkaWZfaW5fZ2V0X2xvY2tfZnJlcQorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCisJCS5uYW1lID0gIlNQRElGIEluIExvY2sgVFJLIiwKKwkJLmluZm8gPSBpbWdfc3BkaWZfaW5faW5mb190cmssCisJCS5nZXQgPSBpbWdfc3BkaWZfaW5fZ2V0X3RyaywKKwkJLnB1dCA9IGltZ19zcGRpZl9pbl9zZXRfdHJrCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkJLm5hbWUgPSAiU1BESUYgSW4gTG9jayBBY3F1aXJlIFRocmVzaG9sZCIsCisJCS5pbmZvID0gaW1nX3NwZGlmX2luX2luZm9fbG9jaywKKwkJLmdldCA9IGltZ19zcGRpZl9pbl9nZXRfbG9ja19hY3F1aXJlLAorCQkucHV0ID0gaW1nX3NwZGlmX2luX3NldF9sb2NrX2FjcXVpcmUKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCQkubmFtZSA9ICJTUERJRiBJbiBMb2NrIFJlbGVhc2UgVGhyZXNob2xkIiwKKwkJLmluZm8gPSBpbWdfc3BkaWZfaW5faW5mb19sb2NrLAorCQkuZ2V0ID0gaW1nX3NwZGlmX2luX2dldF9sb2NrX3JlbGVhc2UsCisJCS5wdXQgPSBpbWdfc3BkaWZfaW5fc2V0X2xvY2tfcmVsZWFzZQorCX0KK307CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJaW50IHJldCA9IDA7CisJdTMyIHJlZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJcmVnID0gaW1nX3NwZGlmX2luX3JlYWRsKHNwZGlmLCBJTUdfU1BESUZfSU5fQ1RMKTsKKwkJaWYgKHNwZGlmLT5tdWx0aV9mcmVxKQorCQkJcmVnICY9IH5JTUdfU1BESUZfSU5fQ1RMX1NSRF9NQVNLOworCQllbHNlCisJCQlyZWcgfD0gKDFVTCA8PCBJTUdfU1BESUZfSU5fQ1RMX1NSRF9TSElGVCk7CisJCXJlZyB8PSBJTUdfU1BESUZfSU5fQ1RMX1NSVF9NQVNLOworCQlpbWdfc3BkaWZfaW5fd3JpdGVsKHNwZGlmLCByZWcsIElNR19TUERJRl9JTl9DVEwpOworCQlzcGRpZi0+YWN0aXZlID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCXJlZyA9IGltZ19zcGRpZl9pbl9yZWFkbChzcGRpZiwgSU1HX1NQRElGX0lOX0NUTCk7CisJCXJlZyAmPSB+SU1HX1NQRElGX0lOX0NUTF9TUlRfTUFTSzsKKwkJaW1nX3NwZGlmX2luX3dyaXRlbChzcGRpZiwgcmVnLCBJTUdfU1BESUZfSU5fQ1RMKTsKKwkJc3BkaWYtPmFjdGl2ZSA9IGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwZGlmLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9pbl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpbWdfc3BkaWZfaW4gKnNwZGlmID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKwl1bnNpZ25lZCBpbnQgcmF0ZSwgY2hhbm5lbHM7CisJc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQ7CisKKwlyYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwljaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWZvcm1hdCA9IHBhcmFtc19mb3JtYXQocGFyYW1zKTsKKworCWlmIChmb3JtYXQgIT0gU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNoYW5uZWxzICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGltZ19zcGRpZl9pbl9kb19jbGtnZW5fc2luZ2xlKHNwZGlmLCByYXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgaW1nX3NwZGlmX2luX2RhaV9vcHMgPSB7CisJLnRyaWdnZXIgPSBpbWdfc3BkaWZfaW5fdHJpZ2dlciwKKwkuaHdfcGFyYW1zID0gaW1nX3NwZGlmX2luX2h3X3BhcmFtcworfTsKKworc3RhdGljIGludCBpbWdfc3BkaWZfaW5fZGFpX3Byb2JlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpbWdfc3BkaWZfaW4gKnNwZGlmID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKworCXNuZF9zb2NfZGFpX2luaXRfZG1hX2RhdGEoZGFpLCBOVUxMLCAmc3BkaWYtPmRtYV9kYXRhKTsKKworCXNuZF9zb2NfYWRkX2RhaV9jb250cm9scyhkYWksIGltZ19zcGRpZl9pbl9jb250cm9scywKKwkJCUFSUkFZX1NJWkUoaW1nX3NwZGlmX2luX2NvbnRyb2xzKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgaW1nX3NwZGlmX2luX2RhaSA9IHsKKwkucHJvYmUgPSBpbWdfc3BkaWZfaW5fZGFpX3Byb2JlLAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFCisJfSwKKwkub3BzID0gJmltZ19zcGRpZl9pbl9kYWlfb3BzCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciBpbWdfc3BkaWZfaW5fY29tcG9uZW50ID0geworCS5uYW1lID0gImltZy1zcGRpZi1pbiIKK307CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGltZ19zcGRpZl9pbiAqc3BkaWY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCByZXQ7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdDsKKwl1MzIgcmVnOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisKKwlzcGRpZiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnNwZGlmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcGRpZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzcGRpZik7CisKKwlzcGRpZi0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGJhc2UpOworCisJc3BkaWYtPmJhc2UgPSBiYXNlOworCisJc3BkaWYtPmNsa19zeXMgPSBkZXZtX2Nsa19nZXQoZGV2LCAic3lzIik7CisJaWYgKElTX0VSUihzcGRpZi0+Y2xrX3N5cykpIHsKKwkJaWYgKFBUUl9FUlIoc3BkaWYtPmNsa19zeXMpICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhY3F1aXJlIGNsb2NrICdzeXMnXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoc3BkaWYtPmNsa19zeXMpOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShzcGRpZi0+Y2xrX3N5cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoJnBkZXYtPmRldiwgInJzdCIpOworCWlmIChJU19FUlIocnN0KSkgeworCQlpZiAoUFRSX0VSUihyc3QpID09IC1FUFJPQkVfREVGRVIpIHsKKwkJCXJldCA9IC1FUFJPQkVfREVGRVI7CisJCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKwkJfQorCQlkZXZfZGJnKGRldiwgIk5vIHRvcCBsZXZlbCByZXNldCBmb3VuZFxuIik7CisJCWltZ19zcGRpZl9pbl93cml0ZWwoc3BkaWYsIElNR19TUERJRl9JTl9TT0ZUX1JFU0VUX01BU0ssCisJCQkJSU1HX1NQRElGX0lOX1NPRlRfUkVTRVQpOworCQlpbWdfc3BkaWZfaW5fd3JpdGVsKHNwZGlmLCAwLCBJTUdfU1BESUZfSU5fU09GVF9SRVNFVCk7CisJfSBlbHNlIHsKKwkJcmVzZXRfY29udHJvbF9hc3NlcnQocnN0KTsKKwkJcmVzZXRfY29udHJvbF9kZWFzc2VydChyc3QpOworCX0KKworCXNwaW5fbG9ja19pbml0KCZzcGRpZi0+bG9jayk7CisKKwlzcGRpZi0+ZG1hX2RhdGEuYWRkciA9IHJlcy0+c3RhcnQgKyBJTUdfU1BESUZfSU5fUlhfRklGT19PRkZTRVQ7CisJc3BkaWYtPmRtYV9kYXRhLmFkZHJfd2lkdGggPSA0OworCXNwZGlmLT5kbWFfZGF0YS5tYXhidXJzdCA9IDQ7CisJc3BkaWYtPnRyayA9IDB4ODA7CisJc3BkaWYtPmxvY2tfYWNxdWlyZSA9IDQ7CisJc3BkaWYtPmxvY2tfcmVsZWFzZSA9IC0xMjg7CisKKwlyZWcgPSAoc3BkaWYtPmxvY2tfYWNxdWlyZSA8PCBJTUdfU1BESUZfSU5fQ1RMX0xPQ0tISV9TSElGVCkgJgorCQlJTUdfU1BESUZfSU5fQ1RMX0xPQ0tISV9NQVNLOworCXJlZyB8PSAoc3BkaWYtPmxvY2tfcmVsZWFzZSA8PCBJTUdfU1BESUZfSU5fQ1RMX0xPQ0tMT19TSElGVCkgJgorCQlJTUdfU1BESUZfSU5fQ1RMX0xPQ0tMT19NQVNLOworCXJlZyB8PSAoc3BkaWYtPnRyayA8PCBJTUdfU1BESUZfSU5fQ1RMX1RSS19TSElGVCkgJgorCQlJTUdfU1BESUZfSU5fQ1RMX1RSS19NQVNLOworCWltZ19zcGRpZl9pbl93cml0ZWwoc3BkaWYsIHJlZywgSU1HX1NQRElGX0lOX0NUTCk7CisKKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZwZGV2LT5kZXYsCisJCQkmaW1nX3NwZGlmX2luX2NvbXBvbmVudCwgJmltZ19zcGRpZl9pbl9kYWksIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOworCisJcmV0ID0gZGV2bV9zbmRfZG1hZW5naW5lX3BjbV9yZWdpc3RlcigmcGRldi0+ZGV2LCBOVUxMLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKKworCXJldHVybiAwOworCitlcnJfY2xrX2Rpc2FibGU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNwZGlmLT5jbGtfc3lzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX2luX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaW1nX3NwZGlmX2luICpzcGRpZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNwZGlmLT5jbGtfc3lzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbWdfc3BkaWZfaW5fb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImltZyxzcGRpZi1pbiIgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGltZ19zcGRpZl9pbl9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGltZ19zcGRpZl9pbl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiaW1nLXNwZGlmLWluIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gaW1nX3NwZGlmX2luX29mX21hdGNoCisJfSwKKwkucHJvYmUgPSBpbWdfc3BkaWZfaW5fcHJvYmUsCisJLnJlbW92ZSA9IGltZ19zcGRpZl9pbl9kZXZfcmVtb3ZlCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpbWdfc3BkaWZfaW5fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiRGFtaWVuIEhvcnNsZXkgPERhbWllbi5Ib3JzbGV5QGltZ3RlYy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklNRyBTUERJRiBJbnB1dCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbWcvaW1nLXNwZGlmLW91dC5jIGIvc291bmQvc29jL2ltZy9pbWctc3BkaWYtb3V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmOTNhNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbWcvaW1nLXNwZGlmLW91dC5jCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICogSU1HIFNQRElGIG91dHB1dCBjb250cm9sbGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIEF1dGhvcjogRGFtaWVuIEhvcnNsZXkgPERhbWllbi5Ib3JzbGV5QGltZ3RlYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9kbWFlbmdpbmVfcGNtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2RlZmluZSBJTUdfU1BESUZfT1VUX1RYX0ZJRk8JCTB4MAorCisjZGVmaW5lIElNR19TUERJRl9PVVRfQ1RMCQkweDQKKyNkZWZpbmUgSU1HX1NQRElGX09VVF9DVExfRlNfTUFTSwlCSVQoNCkKKyNkZWZpbmUgSU1HX1NQRElGX09VVF9DVExfQ0xLX01BU0sJQklUKDIpCisjZGVmaW5lIElNR19TUERJRl9PVVRfQ1RMX1NSVF9NQVNLCUJJVCgwKQorCisjZGVmaW5lIElNR19TUERJRl9PVVRfQ1NMCQkweDE0CisKKyNkZWZpbmUgSU1HX1NQRElGX09VVF9DU0hfVVYJCTB4MTgKKyNkZWZpbmUgSU1HX1NQRElGX09VVF9DU0hfVVZfQ1NIX1NISUZUCTAKKyNkZWZpbmUgSU1HX1NQRElGX09VVF9DU0hfVVZfQ1NIX01BU0sJMHhmZgorCitzdHJ1Y3QgaW1nX3NwZGlmX291dCB7CisJc3BpbmxvY2tfdCBsb2NrOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgY2xrICpjbGtfc3lzOworCXN0cnVjdCBjbGsgKmNsa19yZWY7CisJc3RydWN0IHNuZF9kbWFlbmdpbmVfZGFpX2RtYV9kYXRhIGRtYV9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0OworfTsKKworc3RhdGljIGludCBpbWdfc3BkaWZfb3V0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpbWdfc3BkaWZfb3V0ICpzcGRpZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNwZGlmLT5jbGtfcmVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9vdXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaW1nX3NwZGlmX291dCAqc3BkaWYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHNwZGlmLT5jbGtfcmVmKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiY2xrX2VuYWJsZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW1nX3NwZGlmX291dF93cml0ZWwoc3RydWN0IGltZ19zcGRpZl9vdXQgKnNwZGlmLCB1MzIgdmFsLAorCQkJCXUzMiByZWcpCit7CisJd3JpdGVsKHZhbCwgc3BkaWYtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBpbWdfc3BkaWZfb3V0X3JlYWRsKHN0cnVjdCBpbWdfc3BkaWZfb3V0ICpzcGRpZiwgdTMyIHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoc3BkaWYtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBpbWdfc3BkaWZfb3V0X3Jlc2V0KHN0cnVjdCBpbWdfc3BkaWZfb3V0ICpzcGRpZikKK3sKKwl1MzIgY3RsLCBzdGF0dXNfbG93LCBzdGF0dXNfaGlnaDsKKworCWN0bCA9IGltZ19zcGRpZl9vdXRfcmVhZGwoc3BkaWYsIElNR19TUERJRl9PVVRfQ1RMKSAmCisJCQl+SU1HX1NQRElGX09VVF9DVExfU1JUX01BU0s7CisJc3RhdHVzX2xvdyA9IGltZ19zcGRpZl9vdXRfcmVhZGwoc3BkaWYsIElNR19TUERJRl9PVVRfQ1NMKTsKKwlzdGF0dXNfaGlnaCA9IGltZ19zcGRpZl9vdXRfcmVhZGwoc3BkaWYsIElNR19TUERJRl9PVVRfQ1NIX1VWKTsKKworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHNwZGlmLT5yc3QpOworCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoc3BkaWYtPnJzdCk7CisKKwlpbWdfc3BkaWZfb3V0X3dyaXRlbChzcGRpZiwgY3RsLCBJTUdfU1BESUZfT1VUX0NUTCk7CisJaW1nX3NwZGlmX291dF93cml0ZWwoc3BkaWYsIHN0YXR1c19sb3csIElNR19TUERJRl9PVVRfQ1NMKTsKKwlpbWdfc3BkaWZfb3V0X3dyaXRlbChzcGRpZiwgc3RhdHVzX2hpZ2gsIElNR19TUERJRl9PVVRfQ1NIX1VWKTsKK30KKworc3RhdGljIGludCBpbWdfc3BkaWZfb3V0X2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lFQzk1ODsKKwl1aW5mby0+Y291bnQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX291dF9nZXRfc3RhdHVzX21hc2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzBdID0gMHhmZjsKKwl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1sxXSA9IDB4ZmY7CisJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMl0gPSAweGZmOworCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzNdID0gMHhmZjsKKwl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1s0XSA9IDB4ZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfc3BkaWZfb3V0X2dldF9zdGF0dXMoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGltZ19zcGRpZl9vdXQgKnNwZGlmID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoY3B1X2RhaSk7CisJdTMyIHJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwZGlmLT5sb2NrLCBmbGFncyk7CisKKwlyZWcgPSBpbWdfc3BkaWZfb3V0X3JlYWRsKHNwZGlmLCBJTUdfU1BESUZfT1VUX0NTTCk7CisJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMF0gPSByZWcgJiAweGZmOworCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzFdID0gKHJlZyA+PiA4KSAmIDB4ZmY7CisJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMl0gPSAocmVnID4+IDE2KSAmIDB4ZmY7CisJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbM10gPSAocmVnID4+IDI0KSAmIDB4ZmY7CisKKwlyZWcgPSBpbWdfc3BkaWZfb3V0X3JlYWRsKHNwZGlmLCBJTUdfU1BESUZfT1VUX0NTSF9VVik7CisJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbNF0gPQorCQkocmVnICYgSU1HX1NQRElGX09VVF9DU0hfVVZfQ1NIX01BU0spID4+CisJCUlNR19TUERJRl9PVVRfQ1NIX1VWX0NTSF9TSElGVDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwZGlmLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbWdfc3BkaWZfb3V0X3NldF9zdGF0dXMoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGltZ19zcGRpZl9vdXQgKnNwZGlmID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoY3B1X2RhaSk7CisJdTMyIHJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmVnID0gKCh1MzIpdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbM10gPDwgMjQpOworCXJlZyB8PSAoKHUzMil1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1syXSA8PCAxNik7CisJcmVnIHw9ICgodTMyKXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzFdIDw8IDgpOworCXJlZyB8PSAodTMyKXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzBdOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwZGlmLT5sb2NrLCBmbGFncyk7CisKKwlpbWdfc3BkaWZfb3V0X3dyaXRlbChzcGRpZiwgcmVnLCBJTUdfU1BESUZfT1VUX0NTTCk7CisKKwlyZWcgPSBpbWdfc3BkaWZfb3V0X3JlYWRsKHNwZGlmLCBJTUdfU1BESUZfT1VUX0NTSF9VVik7CisJcmVnICY9IH5JTUdfU1BESUZfT1VUX0NTSF9VVl9DU0hfTUFTSzsKKwlyZWcgfD0gKHUzMil1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1s0XSA8PAorCQkJSU1HX1NQRElGX09VVF9DU0hfVVZfQ1NIX1NISUZUOworCWltZ19zcGRpZl9vdXRfd3JpdGVsKHNwZGlmLCByZWcsIElNR19TUERJRl9PVVRfQ1NIX1VWKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwZGlmLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGltZ19zcGRpZl9vdXRfY29udHJvbHNbXSA9IHsKKwl7CisJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIiwgUExBWUJBQ0ssIE1BU0spLAorCQkuaW5mbyA9IGltZ19zcGRpZl9vdXRfaW5mbywKKwkJLmdldCA9IGltZ19zcGRpZl9vdXRfZ2V0X3N0YXR1c19tYXNrCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsIFBMQVlCQUNLLCBERUZBVUxUKSwKKwkJLmluZm8gPSBpbWdfc3BkaWZfb3V0X2luZm8sCisJCS5nZXQgPSBpbWdfc3BkaWZfb3V0X2dldF9zdGF0dXMsCisJCS5wdXQgPSBpbWdfc3BkaWZfb3V0X3NldF9zdGF0dXMKKwl9Cit9OworCitzdGF0aWMgaW50IGltZ19zcGRpZl9vdXRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpbWdfc3BkaWZfb3V0ICpzcGRpZiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJdTMyIHJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJcmVnID0gaW1nX3NwZGlmX291dF9yZWFkbChzcGRpZiwgSU1HX1NQRElGX09VVF9DVEwpOworCQlyZWcgfD0gSU1HX1NQRElGX09VVF9DVExfU1JUX01BU0s7CisJCWltZ19zcGRpZl9vdXRfd3JpdGVsKHNwZGlmLCByZWcsIElNR19TUERJRl9PVVRfQ1RMKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzcGRpZi0+bG9jaywgZmxhZ3MpOworCQlpbWdfc3BkaWZfb3V0X3Jlc2V0KHNwZGlmKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BkaWYtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW1nX3NwZGlmX291dF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBpbWdfc3BkaWZfb3V0ICpzcGRpZiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJdW5zaWduZWQgaW50IGNoYW5uZWxzOworCWxvbmcgcHJlX2Rpdl9hLCBwcmVfZGl2X2IsIGRpZmZfYSwgZGlmZl9iLCByYXRlLCBjbGtfcmF0ZTsKKwl1MzIgcmVnOworCXNuZF9wY21fZm9ybWF0X3QgZm9ybWF0OworCisJcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJZm9ybWF0ID0gcGFyYW1zX2Zvcm1hdChwYXJhbXMpOworCWNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisKKwlkZXZfZGJnKHNwZGlmLT5kZXYsICJod19wYXJhbXMgcmF0ZSAlbGQgY2hhbm5lbHMgJXUgZm9ybWF0ICV1XG4iLAorCQkJcmF0ZSwgY2hhbm5lbHMsIGZvcm1hdCk7CisKKwlpZiAoZm9ybWF0ICE9IFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjaGFubmVscyAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByZV9kaXZfYSA9IGNsa19yb3VuZF9yYXRlKHNwZGlmLT5jbGtfcmVmLCByYXRlICogMjU2KTsKKwlpZiAocHJlX2Rpdl9hIDwgMCkKKwkJcmV0dXJuIHByZV9kaXZfYTsKKwlwcmVfZGl2X2IgPSBjbGtfcm91bmRfcmF0ZShzcGRpZi0+Y2xrX3JlZiwgcmF0ZSAqIDM4NCk7CisJaWYgKHByZV9kaXZfYiA8IDApCisJCXJldHVybiBwcmVfZGl2X2I7CisKKwlkaWZmX2EgPSBhYnMoKHByZV9kaXZfYSAvIDI1NikgLSByYXRlKTsKKwlkaWZmX2IgPSBhYnMoKHByZV9kaXZfYiAvIDM4NCkgLSByYXRlKTsKKworCS8qIElmIGRpZmZzIGFyZSBlcXVhbCwgdXNlIGxvd2VyIGNsb2NrIHJhdGUgKi8KKwlpZiAoZGlmZl9hID4gZGlmZl9iKQorCQljbGtfc2V0X3JhdGUoc3BkaWYtPmNsa19yZWYsIHByZV9kaXZfYik7CisJZWxzZQorCQljbGtfc2V0X3JhdGUoc3BkaWYtPmNsa19yZWYsIHByZV9kaXZfYSk7CisKKwkvKgorCSAqIEFub3RoZXIgZHJpdmVyIChlZyBtYWNoaW5lIGRyaXZlcikgbWF5IGhhdmUgcmVqZWN0ZWQgdGhlIGFib3ZlCisJICogY2hhbmdlLiBHZXQgdGhlIGN1cnJlbnQgcmF0ZSBhbmQgc2V0IHRoZSByZWdpc3RlciBiaXQgYWNjb3JkaW5nIHRvCisJICogdGhlIG5ldyBtaW4gZGlmZgorCSAqLworCWNsa19yYXRlID0gY2xrX2dldF9yYXRlKHNwZGlmLT5jbGtfcmVmKTsKKworCWRpZmZfYSA9IGFicygoY2xrX3JhdGUgLyAyNTYpIC0gcmF0ZSk7CisJZGlmZl9iID0gYWJzKChjbGtfcmF0ZSAvIDM4NCkgLSByYXRlKTsKKworCXJlZyA9IGltZ19zcGRpZl9vdXRfcmVhZGwoc3BkaWYsIElNR19TUERJRl9PVVRfQ1RMKTsKKwlpZiAoZGlmZl9hIDw9IGRpZmZfYikKKwkJcmVnICY9IH5JTUdfU1BESUZfT1VUX0NUTF9DTEtfTUFTSzsKKwllbHNlCisJCXJlZyB8PSBJTUdfU1BESUZfT1VUX0NUTF9DTEtfTUFTSzsKKwlpbWdfc3BkaWZfb3V0X3dyaXRlbChzcGRpZiwgcmVnLCBJTUdfU1BESUZfT1VUX0NUTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgaW1nX3NwZGlmX291dF9kYWlfb3BzID0geworCS50cmlnZ2VyID0gaW1nX3NwZGlmX291dF90cmlnZ2VyLAorCS5od19wYXJhbXMgPSBpbWdfc3BkaWZfb3V0X2h3X3BhcmFtcworfTsKKworc3RhdGljIGludCBpbWdfc3BkaWZfb3V0X2RhaV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgaW1nX3NwZGlmX291dCAqc3BkaWYgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCisJc25kX3NvY19kYWlfaW5pdF9kbWFfZGF0YShkYWksICZzcGRpZi0+ZG1hX2RhdGEsIE5VTEwpOworCisJc25kX3NvY19hZGRfZGFpX2NvbnRyb2xzKGRhaSwgaW1nX3NwZGlmX291dF9jb250cm9scywKKwkJCUFSUkFZX1NJWkUoaW1nX3NwZGlmX291dF9jb250cm9scykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGltZ19zcGRpZl9vdXRfZGFpID0geworCS5wcm9iZSA9IGltZ19zcGRpZl9vdXRfZGFpX3Byb2JlLAorCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRQorCX0sCisJLm9wcyA9ICZpbWdfc3BkaWZfb3V0X2RhaV9vcHMKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIGltZ19zcGRpZl9vdXRfY29tcG9uZW50ID0geworCS5uYW1lID0gImltZy1zcGRpZi1vdXQiCit9OworCitzdGF0aWMgaW50IGltZ19zcGRpZl9vdXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaW1nX3NwZGlmX291dCAqc3BkaWY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCByZXQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKworCXNwZGlmID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqc3BkaWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNwZGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNwZGlmKTsKKworCXNwZGlmLT5kZXYgPSAmcGRldi0+ZGV2OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwliYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihiYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoYmFzZSk7CisKKwlzcGRpZi0+YmFzZSA9IGJhc2U7CisKKwlzcGRpZi0+cnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldCgmcGRldi0+ZGV2LCAicnN0Iik7CisJaWYgKElTX0VSUihzcGRpZi0+cnN0KSkgeworCQlpZiAoUFRSX0VSUihzcGRpZi0+cnN0KSAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gdG9wIGxldmVsIHJlc2V0IGZvdW5kXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoc3BkaWYtPnJzdCk7CisJfQorCisJc3BkaWYtPmNsa19zeXMgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInN5cyIpOworCWlmIChJU19FUlIoc3BkaWYtPmNsa19zeXMpKSB7CisJCWlmIChQVFJfRVJSKHNwZGlmLT5jbGtfc3lzKSAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWNxdWlyZSBjbG9jayAnc3lzJ1xuIik7CisJCXJldHVybiBQVFJfRVJSKHNwZGlmLT5jbGtfc3lzKTsKKwl9CisKKwlzcGRpZi0+Y2xrX3JlZiA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAicmVmIik7CisJaWYgKElTX0VSUihzcGRpZi0+Y2xrX3JlZikpIHsKKwkJaWYgKFBUUl9FUlIoc3BkaWYtPmNsa19yZWYpICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhY3F1aXJlIGNsb2NrICdyZWYnXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoc3BkaWYtPmNsa19yZWYpOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShzcGRpZi0+Y2xrX3N5cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWltZ19zcGRpZl9vdXRfd3JpdGVsKHNwZGlmLCBJTUdfU1BESUZfT1VUX0NUTF9GU19NQVNLLAorCQkJCUlNR19TUERJRl9PVVRfQ1RMKTsKKworCWltZ19zcGRpZl9vdXRfcmVzZXQoc3BkaWYpOworCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisJaWYgKCFwbV9ydW50aW1lX2VuYWJsZWQoJnBkZXYtPmRldikpIHsKKwkJcmV0ID0gaW1nX3NwZGlmX291dF9yZXN1bWUoJnBkZXYtPmRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9wbV9kaXNhYmxlOworCX0KKworCXNwaW5fbG9ja19pbml0KCZzcGRpZi0+bG9jayk7CisKKwlzcGRpZi0+ZG1hX2RhdGEuYWRkciA9IHJlcy0+c3RhcnQgKyBJTUdfU1BESUZfT1VUX1RYX0ZJRk87CisJc3BkaWYtPmRtYV9kYXRhLmFkZHJfd2lkdGggPSA0OworCXNwZGlmLT5kbWFfZGF0YS5tYXhidXJzdCA9IDQ7CisKKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZwZGV2LT5kZXYsCisJCQkmaW1nX3NwZGlmX291dF9jb21wb25lbnQsCisJCQkmaW1nX3NwZGlmX291dF9kYWksIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3N1c3BlbmQ7CisKKwlyZXQgPSBkZXZtX3NuZF9kbWFlbmdpbmVfcGNtX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIE5VTEwsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3N1c3BlbmQ7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJQcm9iZSBzdWNjZXNzZnVsXG4iKTsKKworCXJldHVybiAwOworCitlcnJfc3VzcGVuZDoKKwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgmcGRldi0+ZGV2KSkKKwkJaW1nX3NwZGlmX291dF9zdXNwZW5kKCZwZGV2LT5kZXYpOworZXJyX3BtX2Rpc2FibGU6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShzcGRpZi0+Y2xrX3N5cyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGltZ19zcGRpZl9vdXRfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpbWdfc3BkaWZfb3V0ICpzcGRpZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCWlmICghcG1fcnVudGltZV9zdGF0dXNfc3VzcGVuZGVkKCZwZGV2LT5kZXYpKQorCQlpbWdfc3BkaWZfb3V0X3N1c3BlbmQoJnBkZXYtPmRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoc3BkaWYtPmNsa19zeXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGltZ19zcGRpZl9vdXRfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImltZyxzcGRpZi1vdXQiIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpbWdfc3BkaWZfb3V0X29mX21hdGNoKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGltZ19zcGRpZl9vdXRfcG1fb3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyhpbWdfc3BkaWZfb3V0X3N1c3BlbmQsCisJCQkgICBpbWdfc3BkaWZfb3V0X3Jlc3VtZSwgTlVMTCkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGltZ19zcGRpZl9vdXRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImltZy1zcGRpZi1vdXQiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBpbWdfc3BkaWZfb3V0X29mX21hdGNoLAorCQkucG0gPSAmaW1nX3NwZGlmX291dF9wbV9vcHMKKwl9LAorCS5wcm9iZSA9IGltZ19zcGRpZl9vdXRfcHJvYmUsCisJLnJlbW92ZSA9IGltZ19zcGRpZl9vdXRfZGV2X3JlbW92ZQorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaW1nX3NwZGlmX291dF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJEYW1pZW4gSG9yc2xleSA8RGFtaWVuLkhvcnNsZXlAaW1ndGVjLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSU1HIFNQRElGIE91dHB1dCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbWcvcGlzdGFjaGlvLWludGVybmFsLWRhYy5jIGIvc291bmQvc29jL2ltZy9waXN0YWNoaW8taW50ZXJuYWwtZGFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyYTBmZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbWcvcGlzdGFjaGlvLWludGVybmFsLWRhYy5jCkBAIC0wLDAgKzEsMjg3IEBACisvKgorICogUGlzdGFjaGlvIGludGVybmFsIGRhYyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBBdXRob3I6IERhbWllbiBIb3JzbGV5IDxEYW1pZW4uSG9yc2xleUBpbWd0ZWMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjZGVmaW5lIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfQ1RSTAkJCTB4NDAKKyNkZWZpbmUgUElTVEFDSElPX0lOVEVSTkFMX0RBQ19DVFJMX1BXUl9TRUxfTUFTSwkweDIKKyNkZWZpbmUgUElTVEFDSElPX0lOVEVSTkFMX0RBQ19DVFJMX1BXUkROX01BU0sJCTB4MQorCisjZGVmaW5lIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfU1JTVAkJCTB4NDQKKyNkZWZpbmUgUElTVEFDSElPX0lOVEVSTkFMX0RBQ19TUlNUX01BU0sJCTB4MQorCisjZGVmaW5lIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfR1RJX0NUUkwJCQkweDQ4CisjZGVmaW5lIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfR1RJX0NUUkxfQUREUl9TSElGVAkwCisjZGVmaW5lIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfR1RJX0NUUkxfQUREUl9NQVNLCTB4RkZGCisjZGVmaW5lIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfR1RJX0NUUkxfV0VfTUFTSwkJMHgxMDAwCisjZGVmaW5lIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfR1RJX0NUUkxfV0RBVEFfU0hJRlQJMTMKKyNkZWZpbmUgUElTVEFDSElPX0lOVEVSTkFMX0RBQ19HVElfQ1RSTF9XREFUQV9NQVNLCTB4MUZFMDAwCisKKyNkZWZpbmUgUElTVEFDSElPX0lOVEVSTkFMX0RBQ19QV1IJCQkweDEKKyNkZWZpbmUgUElTVEFDSElPX0lOVEVSTkFMX0RBQ19QV1JfTUFTSwkJCTB4MQorCisjZGVmaW5lIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCAgXAorCQkJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3QgcGlzdGFjaGlvX2ludGVybmFsX2RhYyB7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCByZWd1bGF0b3IgKnN1cHBseTsKKwlib29sIG11dGU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcGlzdGFjaGlvX2ludGVybmFsX2RhY19zbmRfY29udHJvbHNbXSA9IHsKKwlTT0NfU0lOR0xFKCJQbGF5YmFjayBTd2l0Y2giLCBQSVNUQUNISU9fSU5URVJOQUxfREFDX0NUUkwsIDIsIDEsIDEpCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgcGlzdGFjaGlvX2ludGVybmFsX2RhY193aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0RBQygiREFDIiwgIlBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJBT1VUTCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkFPVVRSIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBwaXN0YWNoaW9faW50ZXJuYWxfZGFjX3JvdXRlc1tdID0geworCXsgIkFPVVRMIiwgTlVMTCwgIkRBQyIgfSwKKwl7ICJBT1VUUiIsIE5VTEwsICJEQUMiIH0sCit9OworCitzdGF0aWMgdm9pZCBwaXN0YWNoaW9faW50ZXJuYWxfZGFjX3JlZ193cml0ZWwoc3RydWN0IHJlZ21hcCAqdG9wX3JlZ3MsCisJCQkJCQl1MzIgdmFsLCB1MzIgcmVnKQoreworCXJlZ21hcF91cGRhdGVfYml0cyh0b3BfcmVncywgUElTVEFDSElPX0lOVEVSTkFMX0RBQ19HVElfQ1RSTCwKKwkJCVBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfR1RJX0NUUkxfQUREUl9NQVNLLAorCQkJcmVnIDw8IFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfR1RJX0NUUkxfQUREUl9TSElGVCk7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHModG9wX3JlZ3MsIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfR1RJX0NUUkwsCisJCQlQSVNUQUNISU9fSU5URVJOQUxfREFDX0dUSV9DVFJMX1dEQVRBX01BU0ssCisJCQl2YWwgPDwgUElTVEFDSElPX0lOVEVSTkFMX0RBQ19HVElfQ1RSTF9XREFUQV9TSElGVCk7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHModG9wX3JlZ3MsIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfR1RJX0NUUkwsCisJCQlQSVNUQUNISU9fSU5URVJOQUxfREFDX0dUSV9DVFJMX1dFX01BU0ssCisJCQlQSVNUQUNISU9fSU5URVJOQUxfREFDX0dUSV9DVFJMX1dFX01BU0spOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHRvcF9yZWdzLCBQSVNUQUNISU9fSU5URVJOQUxfREFDX0dUSV9DVFJMLAorCQkJUElTVEFDSElPX0lOVEVSTkFMX0RBQ19HVElfQ1RSTF9XRV9NQVNLLCAwKTsKK30KKworc3RhdGljIHZvaWQgcGlzdGFjaGlvX2ludGVybmFsX2RhY19wd3Jfb2ZmKHN0cnVjdCBwaXN0YWNoaW9faW50ZXJuYWxfZGFjICpkYWMpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRhYy0+cmVnbWFwLCBQSVNUQUNISU9fSU5URVJOQUxfREFDX0NUUkwsCisJCVBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfQ1RSTF9QV1JETl9NQVNLLAorCQlQSVNUQUNISU9fSU5URVJOQUxfREFDX0NUUkxfUFdSRE5fTUFTSyk7CisKKwlwaXN0YWNoaW9faW50ZXJuYWxfZGFjX3JlZ193cml0ZWwoZGFjLT5yZWdtYXAsIDAsCisJCQkJCVBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfUFdSKTsKK30KKworc3RhdGljIHZvaWQgcGlzdGFjaGlvX2ludGVybmFsX2RhY19wd3Jfb24oc3RydWN0IHBpc3RhY2hpb19pbnRlcm5hbF9kYWMgKmRhYykKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZGFjLT5yZWdtYXAsIFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfU1JTVCwKKwkJCVBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfU1JTVF9NQVNLLAorCQkJUElTVEFDSElPX0lOVEVSTkFMX0RBQ19TUlNUX01BU0spOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRhYy0+cmVnbWFwLCBQSVNUQUNISU9fSU5URVJOQUxfREFDX1NSU1QsCisJCQlQSVNUQUNISU9fSU5URVJOQUxfREFDX1NSU1RfTUFTSywgMCk7CisKKwlwaXN0YWNoaW9faW50ZXJuYWxfZGFjX3JlZ193cml0ZWwoZGFjLT5yZWdtYXAsCisJCQkJCVBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfUFdSX01BU0ssCisJCQkJCVBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfUFdSKTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhkYWMtPnJlZ21hcCwgUElTVEFDSElPX0lOVEVSTkFMX0RBQ19DVFJMLAorCQkJUElTVEFDSElPX0lOVEVSTkFMX0RBQ19DVFJMX1BXUkROX01BU0ssIDApOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBwaXN0YWNoaW9faW50ZXJuYWxfZGFjX2RhaXNbXSA9IHsKKwl7CisJCS5uYW1lID0gInBpc3RhY2hpb19pbnRlcm5hbF9kYWMiLAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCQkuZm9ybWF0cyA9IFBJU1RBQ0hJT19JTlRFUk5BTF9EQUNfRk9STUFUUywKKwkJfQorCX0sCit9OworCitzdGF0aWMgaW50IHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfY29kZWNfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBwaXN0YWNoaW9faW50ZXJuYWxfZGFjICpkYWMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXNuZF9zb2NfY29kZWNfaW5pdF9yZWdtYXAoY29kZWMsIGRhYy0+cmVnbWFwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfZHJpdmVyID0geworCS5wcm9iZSA9IHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfY29kZWNfcHJvYmUsCisJLmlkbGVfYmlhc19vZmYgPSB0cnVlLAorCS5jb250cm9scyA9IHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfc25kX2NvbnRyb2xzLAorCS5udW1fY29udHJvbHMgPSBBUlJBWV9TSVpFKHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfc25kX2NvbnRyb2xzKSwKKwkuZGFwbV93aWRnZXRzID0gcGlzdGFjaGlvX2ludGVybmFsX2RhY193aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShwaXN0YWNoaW9faW50ZXJuYWxfZGFjX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfcm91dGVzLAorCS5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfcm91dGVzKSwKK307CisKK3N0YXRpYyBpbnQgcGlzdGFjaGlvX2ludGVybmFsX2RhY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwaXN0YWNoaW9faW50ZXJuYWxfZGFjICpkYWM7CisJaW50IHJldCwgdm9sdGFnZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXUzMiByZWc7CisKKwlkYWMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRhYyksIEdGUF9LRVJORUwpOworCisJaWYgKCFkYWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGFjKTsKKworCWRhYy0+cmVnbWFwID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJCQkgICAgImltZyxjci10b3AiKTsKKwlpZiAoSVNfRVJSKGRhYy0+cmVnbWFwKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGFjLT5yZWdtYXApOworCisJZGFjLT5zdXBwbHkgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAiVkREIik7CisJaWYgKElTX0VSUihkYWMtPnN1cHBseSkpIHsKKwkJcmV0ID0gUFRSX0VSUihkYWMtPnN1cHBseSk7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFjcXVpcmUgc3VwcGx5ICdWREQtc3VwcGx5JzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShkYWMtPnN1cHBseSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgc3VwcGx5OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl2b2x0YWdlID0gcmVndWxhdG9yX2dldF92b2x0YWdlKGRhYy0+c3VwcGx5KTsKKworCXN3aXRjaCAodm9sdGFnZSkgeworCWNhc2UgMTgwMDAwMDoKKwkJcmVnID0gMDsKKwkJYnJlYWs7CisJY2FzZSAzMzAwMDAwOgorCQlyZWcgPSBQSVNUQUNISU9fSU5URVJOQUxfREFDX0NUUkxfUFdSX1NFTF9NQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgImludmFsaWQgdm9sdGFnZTogJWRcbiIsIHZvbHRhZ2UpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9yZWd1bGF0b3I7CisJfQorCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGRhYy0+cmVnbWFwLCBQSVNUQUNISU9fSU5URVJOQUxfREFDX0NUUkwsCisJCQlQSVNUQUNISU9fSU5URVJOQUxfREFDX0NUUkxfUFdSX1NFTF9NQVNLLCByZWcpOworCisJcGlzdGFjaGlvX2ludGVybmFsX2RhY19wd3Jfb2ZmKGRhYyk7CisJcGlzdGFjaGlvX2ludGVybmFsX2RhY19wd3Jfb24oZGFjKTsKKworCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisJcG1fcnVudGltZV9pZGxlKGRldik7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGRldiwgJnBpc3RhY2hpb19pbnRlcm5hbF9kYWNfZHJpdmVyLAorCQkJcGlzdGFjaGlvX2ludGVybmFsX2RhY19kYWlzLAorCQkJQVJSQVlfU0laRShwaXN0YWNoaW9faW50ZXJuYWxfZGFjX2RhaXMpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcHdyOworCX0KKworCXJldHVybiAwOworCitlcnJfcHdyOgorCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlwaXN0YWNoaW9faW50ZXJuYWxfZGFjX3B3cl9vZmYoZGFjKTsKK2Vycl9yZWd1bGF0b3I6CisJcmVndWxhdG9yX2Rpc2FibGUoZGFjLT5zdXBwbHkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwaXN0YWNoaW9faW50ZXJuYWxfZGFjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwaXN0YWNoaW9faW50ZXJuYWxfZGFjICpkYWMgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXBpc3RhY2hpb19pbnRlcm5hbF9kYWNfcHdyX29mZihkYWMpOworCXJlZ3VsYXRvcl9kaXNhYmxlKGRhYy0+c3VwcGx5KTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfcnRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGlzdGFjaGlvX2ludGVybmFsX2RhYyAqZGFjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZGFjLT5zdXBwbHkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIHN1cHBseTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcGlzdGFjaGlvX2ludGVybmFsX2RhY19wd3Jfb24oZGFjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfcnRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBpc3RhY2hpb19pbnRlcm5hbF9kYWMgKmRhYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcGlzdGFjaGlvX2ludGVybmFsX2RhY19wd3Jfb2ZmKGRhYyk7CisKKwlyZWd1bGF0b3JfZGlzYWJsZShkYWMtPnN1cHBseSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcGlzdGFjaGlvX2ludGVybmFsX2RhY19wbV9vcHMgPSB7CisJU0VUX1JVTlRJTUVfUE1fT1BTKHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfcnRfc3VzcGVuZCwKKwkJCXBpc3RhY2hpb19pbnRlcm5hbF9kYWNfcnRfcmVzdW1lLCBOVUxMKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGlzdGFjaGlvX2ludGVybmFsX2RhY19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiaW1nLHBpc3RhY2hpby1pbnRlcm5hbC1kYWMiIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwaXN0YWNoaW9faW50ZXJuYWxfZGFjX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGlzdGFjaGlvX2ludGVybmFsX2RhY19wbGF0X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpbWctcGlzdGFjaGlvLWludGVybmFsLWRhYyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfb2ZfbWF0Y2gsCisJCS5wbSA9ICZwaXN0YWNoaW9faW50ZXJuYWxfZGFjX3BtX29wcworCX0sCisJLnByb2JlID0gcGlzdGFjaGlvX2ludGVybmFsX2RhY19wcm9iZSwKKwkucmVtb3ZlID0gcGlzdGFjaGlvX2ludGVybmFsX2RhY19yZW1vdmUKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHBpc3RhY2hpb19pbnRlcm5hbF9kYWNfcGxhdF9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBpc3RhY2hpbyBJbnRlcm5hbCBEQUMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJEYW1pZW4gSG9yc2xleSA8RGFtaWVuLkhvcnNsZXlAaW1ndGVjLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9LY29uZmlnIGIvc291bmQvc29jL2ludGVsL0tjb25maWcKaW5kZXggN2I3NzhhYi4uODAzZjk1ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL0tjb25maWcKKysrIGIvc291bmQvc29jL2ludGVsL0tjb25maWcKQEAgLTI0LDYgKzI0LDcgQEAKIGNvbmZpZyBTTkRfU1NUX0lQQ19BQ1BJCiAJdHJpc3RhdGUKIAlzZWxlY3QgU05EX1NTVF9JUEMKKwlzZWxlY3QgU05EX1NPQ19JTlRFTF9TU1QKIAlkZXBlbmRzIG9uIEFDUEkKIAogY29uZmlnIFNORF9TT0NfSU5URUxfU1NUCkBAIC00Myw3ICs0NCw3IEBACiBjb25maWcgU05EX1NPQ19JTlRFTF9IQVNXRUxMX01BQ0gKIAl0cmlzdGF0ZSAiQVNvQyBBdWRpbyBEU1Agc3VwcG9ydCBmb3IgSW50ZWwgSGFzd2VsbCBMeW54cG9pbnQiCiAJZGVwZW5kcyBvbiBYODZfSU5URUxfTFBTUyAmJiBJMkMgJiYgSTJDX0RFU0lHTldBUkVfUExBVEZPUk0KLQlkZXBlbmRzIG9uIERXX0RNQUNfQ09SRQorCWRlcGVuZHMgb24gRFdfRE1BQ19DT1JFPXkKIAlzZWxlY3QgU05EX1NPQ19JTlRFTF9TU1QKIAlzZWxlY3QgU05EX1NPQ19JTlRFTF9IQVNXRUxMCiAJc2VsZWN0IFNORF9TT0NfUlQ1NjQwCkBAIC01NiwxOCArNTcsMTkgQEAKIGNvbmZpZyBTTkRfU09DX0lOVEVMX0JZVF9SVDU2NDBfTUFDSAogCXRyaXN0YXRlICJBU29DIEF1ZGlvIGRyaXZlciBmb3IgSW50ZWwgQmF5dHJhaWwgd2l0aCBSVDU2NDAgY29kZWMiCiAJZGVwZW5kcyBvbiBYODZfSU5URUxfTFBTUyAmJiBJMkMKLQlkZXBlbmRzIG9uIERXX0RNQUNfQ09SRQorCWRlcGVuZHMgb24gRFdfRE1BQ19DT1JFPXkgJiYgKFNORF9TT0NfSU5URUxfQllUQ1JfUlQ1NjQwX01BQ0ggPSBuKQogCXNlbGVjdCBTTkRfU09DX0lOVEVMX1NTVAogCXNlbGVjdCBTTkRfU09DX0lOVEVMX0JBWVRSQUlMCiAJc2VsZWN0IFNORF9TT0NfUlQ1NjQwCiAJaGVscAogCSAgVGhpcyBhZGRzIGF1ZGlvIGRyaXZlciBmb3IgSW50ZWwgQmF5dHJhaWwgcGxhdGZvcm0gYmFzZWQgYm9hcmRzCi0JICB3aXRoIHRoZSBSVDU2NDAgYXVkaW8gY29kZWMuCisJICB3aXRoIHRoZSBSVDU2NDAgYXVkaW8gY29kZWMuIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQsIHVzZQorCSAgU05EX1NPQ19JTlRFTF9CWVRDUl9SVDU2NDBfTUFDSCBpbnN0ZWFkIGZvciBiZXR0ZXIgZnVuY3Rpb25hbGl0eQogCiBjb25maWcgU05EX1NPQ19JTlRFTF9CWVRfTUFYOTgwOTBfTUFDSAogCXRyaXN0YXRlICJBU29DIEF1ZGlvIGRyaXZlciBmb3IgSW50ZWwgQmF5dHJhaWwgd2l0aCBNQVg5ODA5MCBjb2RlYyIKIAlkZXBlbmRzIG9uIFg4Nl9JTlRFTF9MUFNTICYmIEkyQwotCWRlcGVuZHMgb24gRFdfRE1BQ19DT1JFCisJZGVwZW5kcyBvbiBEV19ETUFDX0NPUkU9eQogCXNlbGVjdCBTTkRfU09DX0lOVEVMX1NTVAogCXNlbGVjdCBTTkRfU09DX0lOVEVMX0JBWVRSQUlMCiAJc2VsZWN0IFNORF9TT0NfTUFYOTgwOTAKQEAgLTc5LDcgKzgxLDcgQEAKIAl0cmlzdGF0ZSAiQVNvQyBBdWRpbyBEU1Agc3VwcG9ydCBmb3IgSW50ZWwgQnJvYWR3ZWxsIFdpbGRjYXRwb2ludCIKIAlkZXBlbmRzIG9uIFg4Nl9JTlRFTF9MUFNTICYmIEkyQyAmJiBEV19ETUFDICYmIFwKIAkJICAgSTJDX0RFU0lHTldBUkVfUExBVEZPUk0KLQlkZXBlbmRzIG9uIERXX0RNQUNfQ09SRQorCWRlcGVuZHMgb24gRFdfRE1BQ19DT1JFPXkKIAlzZWxlY3QgU05EX1NPQ19JTlRFTF9TU1QKIAlzZWxlY3QgU05EX1NPQ19JTlRFTF9IQVNXRUxMCiAJc2VsZWN0IFNORF9TT0NfUlQyODYKQEAgLTkwLDE0ICs5MiwyNiBAQAogCSAgSWYgdW5zdXJlIHNlbGVjdCAiTiIuCiAKIGNvbmZpZyBTTkRfU09DX0lOVEVMX0JZVENSX1JUNTY0MF9NQUNICi0JdHJpc3RhdGUgIkFTb0MgQXVkaW8gRFNQIFN1cHBvcnQgZm9yIE1JRCBCWVQgUGxhdGZvcm0iCisgICAgICAgIHRyaXN0YXRlICJBU29DIEF1ZGlvIGRyaXZlciBmb3IgSW50ZWwgQmF5dHJhaWwgYW5kIEJheXRyYWlsLUNSIHdpdGggUlQ1NjQwIGNvZGVjIgogCWRlcGVuZHMgb24gWDg2ICYmIEkyQwogCXNlbGVjdCBTTkRfU09DX1JUNTY0MAogCXNlbGVjdCBTTkRfU1NUX01GTERfUExBVEZPUk0KIAlzZWxlY3QgU05EX1NTVF9JUENfQUNQSQogCWhlbHAKLQkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBBU29DIG1hY2hpbmUgZHJpdmVyIGZvciBJbnRlbChSKSBNSUQgQmF5dHJhaWwgcGxhdGZvcm0KLSAgICAgICAgICB1c2VkIGFzIGFsc2EgZGV2aWNlIGluIGF1ZGlvIHN1YnN0ZW0gaW4gSW50ZWwoUikgTUlEIGRldmljZXMKKyAgICAgICAgICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgQVNvQyBtYWNoaW5lIGRyaXZlciBmb3IgSW50ZWwoUikgQmF5dHJhaWwgYW5kIEJheXRyYWlsLUNSCisgICAgICAgICAgcGxhdGZvcm1zIHdpdGggUlQ1NjQwIGF1ZGlvIGNvZGVjLgorICAgICAgICAgIFNheSBZIGlmIHlvdSBoYXZlIHN1Y2ggYSBkZXZpY2UKKyAgICAgICAgICBJZiB1bnN1cmUgc2VsZWN0ICJOIi4KKworY29uZmlnIFNORF9TT0NfSU5URUxfQllUQ1JfUlQ1NjUxX01BQ0gKKyAgICAgICAgdHJpc3RhdGUgIkFTb0MgQXVkaW8gZHJpdmVyIGZvciBJbnRlbCBCYXl0cmFpbCBhbmQgQmF5dHJhaWwtQ1Igd2l0aCBSVDU2NTEgY29kZWMiCisJZGVwZW5kcyBvbiBYODYgJiYgSTJDCisJc2VsZWN0IFNORF9TT0NfUlQ1NjUxCisJc2VsZWN0IFNORF9TU1RfTUZMRF9QTEFURk9STQorCXNlbGVjdCBTTkRfU1NUX0lQQ19BQ1BJCisJaGVscAorICAgICAgICAgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBBU29DIG1hY2hpbmUgZHJpdmVyIGZvciBJbnRlbChSKSBCYXl0cmFpbCBhbmQgQmF5dHJhaWwtQ1IKKyAgICAgICAgICBwbGF0Zm9ybXMgd2l0aCBSVDU2NTEgYXVkaW8gY29kZWMuCiAgICAgICAgICAgU2F5IFkgaWYgeW91IGhhdmUgc3VjaCBhIGRldmljZQogICAgICAgICAgIElmIHVuc3VyZSBzZWxlY3QgIk4iLgogCkBAIC0xNDQsNyArMTU4LDcgQEAKIAogY29uZmlnIFNORF9TT0NfSU5URUxfU0tMX1JUMjg2X01BQ0gKIAl0cmlzdGF0ZSAiQVNvQyBBdWRpbyBkcml2ZXIgZm9yIFNLTCB3aXRoIFJUMjg2IEkyUyBtb2RlIgotCWRlcGVuZHMgb24gWDg2ICYmIEFDUEkKKwlkZXBlbmRzIG9uIFg4NiAmJiBBQ1BJICYmIEkyQwogCXNlbGVjdCBTTkRfU09DX0lOVEVMX1NTVAogCXNlbGVjdCBTTkRfU09DX0lOVEVMX1NLWUxBS0UKIAlzZWxlY3QgU05EX1NPQ19SVDI4NgpAQCAtMTU0LDMgKzE2OCwzMSBAQAogCSAgIHdpdGggUlQyODYgSTJTIGF1ZGlvIGNvZGVjLgogCSAgIFNheSBZIGlmIHlvdSBoYXZlIHN1Y2ggYSBkZXZpY2UKIAkgICBJZiB1bnN1cmUgc2VsZWN0ICJOIi4KKworY29uZmlnIFNORF9TT0NfSU5URUxfU0tMX05BVTg4TDI1X1NTTTQ1NjdfTUFDSAorCXRyaXN0YXRlICJBU29DIEF1ZGlvIGRyaXZlciBmb3IgU0tMIHdpdGggTkFVODhMMjUgYW5kIFNTTTQ1NjcgaW4gSTJTIE1vZGUiCisJZGVwZW5kcyBvbiBYODZfSU5URUxfTFBTUyAmJiBJMkMKKwlzZWxlY3QgU05EX1NPQ19JTlRFTF9TU1QKKwlzZWxlY3QgU05EX1NPQ19JTlRFTF9TS1lMQUtFCisJc2VsZWN0IFNORF9TT0NfTkFVODgyNQorCXNlbGVjdCBTTkRfU09DX1NTTTQ1NjcKKwlzZWxlY3QgU05EX1NPQ19ETUlDCisJaGVscAorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIEFTb0MgT25ib2FyZCBDb2RlYyBJMlMgbWFjaGluZSBkcml2ZXIuIFRoaXMgd2lsbAorCSAgY3JlYXRlIGFuIGFsc2Egc291bmQgY2FyZCBmb3IgTkFVODhMMjUgKyBTU000NTY3LgorCSAgU2F5IFkgaWYgeW91IGhhdmUgc3VjaCBhIGRldmljZQorCSAgSWYgdW5zdXJlIHNlbGVjdCAiTiIuCisKK2NvbmZpZyBTTkRfU09DX0lOVEVMX1NLTF9OQVU4OEwyNV9NQVg5ODM1N0FfTUFDSAorCXRyaXN0YXRlICJBU29DIEF1ZGlvIGRyaXZlciBmb3IgU0tMIHdpdGggTkFVODhMMjUgYW5kIE1BWDk4MzU3QSBpbiBJMlMgTW9kZSIKKwlkZXBlbmRzIG9uIFg4Nl9JTlRFTF9MUFNTICYmIEkyQworCXNlbGVjdCBTTkRfU09DX0lOVEVMX1NTVAorCXNlbGVjdCBTTkRfU09DX0lOVEVMX1NLWUxBS0UKKwlzZWxlY3QgU05EX1NPQ19OQVU4ODI1CisJc2VsZWN0IFNORF9TT0NfTUFYOTgzNTdBCisJc2VsZWN0IFNORF9TT0NfRE1JQworCWhlbHAKKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBBU29DIE9uYm9hcmQgQ29kZWMgSTJTIG1hY2hpbmUgZHJpdmVyLiBUaGlzIHdpbGwKKwkgIGNyZWF0ZSBhbiBhbHNhIHNvdW5kIGNhcmQgZm9yIE5BVTg4TDI1ICsgTUFYOTgzNTdBLgorCSAgU2F5IFkgaWYgeW91IGhhdmUgc3VjaCBhIGRldmljZQorCSAgSWYgdW5zdXJlIHNlbGVjdCAiTiIuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvYXRvbS9zc3QtYXRvbS1jb250cm9scy5jIGIvc291bmQvc29jL2ludGVsL2F0b20vc3N0LWF0b20tY29udHJvbHMuYwppbmRleCBkNTUzODhlLi5iOTdlNmFkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYXRvbS9zc3QtYXRvbS1jb250cm9scy5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9hdG9tL3NzdC1hdG9tLWNvbnRyb2xzLmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU1NUX0dBSU5fTVVURToKLQkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBndi0+bXV0ZSA/IDEgOiAwOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGd2LT5tdXRlID8gMCA6IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBTU1RfR0FJTl9SQU1QX0RVUkFUSU9OOgpAQCAtNDc5LDcgKzQ3OSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTU1RfR0FJTl9NVVRFOgotCQlndi0+bXV0ZSA9ICEhdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJCWd2LT5tdXRlID0gIXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwogCQlkZXZfZGJnKGNtcG50LT5kZXYsICIlczogTXV0ZSAlZFxuIiwgbWMtPnBuYW1lLCBndi0+bXV0ZSk7CiAJCWJyZWFrOwogCkBAIC0xMTA5LDYgKzExMDksNyBAQAogCXsibWVkaWEwX2luIiwgTlVMTCwgIkNvbXByZXNzIFBsYXliYWNrIn0sCiAJeyJtZWRpYTFfaW4iLCBOVUxMLCAiSGVhZHNldCBQbGF5YmFjayJ9LAogCXsibWVkaWEyX2luIiwgTlVMTCwgInBjbTBfb3V0In0sCisJeyJtZWRpYTNfaW4iLCBOVUxMLCAiRGVlcGJ1ZmZlciBQbGF5YmFjayJ9LAogCiAJeyJtZWRpYTBfb3V0IG1peCAwIiwgIm1lZGlhMF9pbiBTd2l0Y2giLCAibWVkaWEwX2luIn0sCiAJeyJtZWRpYTBfb3V0IG1peCAwIiwgIm1lZGlhMV9pbiBTd2l0Y2giLCAibWVkaWExX2luIn0sCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvYXRvbS9zc3QtYXRvbS1jb250cm9scy5oIGIvc291bmQvc29jL2ludGVsL2F0b20vc3N0LWF0b20tY29udHJvbHMuaAppbmRleCA5M2RlODA0Li5lMDExMzExIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYXRvbS9zc3QtYXRvbS1jb250cm9scy5oCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9hdG9tL3NzdC1hdG9tLWNvbnRyb2xzLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogZW51bSB7CiAJTUVSUl9EUENNX0FVRElPID0gMCwKKwlNRVJSX0RQQ01fREVFUF9CVUZGRVIsCiAJTUVSUl9EUENNX0NPTVBSLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL2F0b20vc3N0LW1mbGQtcGxhdGZvcm0tcGNtLmMgYi9zb3VuZC9zb2MvaW50ZWwvYXRvbS9zc3QtbWZsZC1wbGF0Zm9ybS1wY20uYwppbmRleCAwNDg3Y2ZhLi41NWMzM2RjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYXRvbS9zc3QtbWZsZC1wbGF0Zm9ybS1wY20uYworKysgYi9zb3VuZC9zb2MvaW50ZWwvYXRvbS9zc3QtbWZsZC1wbGF0Zm9ybS1wY20uYwpAQCAtOTgsNiArOTgsNyBAQAogCXtNRVJSX0RQQ01fQVVESU8sIDAsIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssIFBJUEVfTUVESUExX0lOLCBTU1RfVEFTS19JRF9NRURJQSwgMH0sCiAJe01FUlJfRFBDTV9DT01QUiwgMCwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgUElQRV9NRURJQTBfSU4sIFNTVF9UQVNLX0lEX01FRElBLCAwfSwKIAl7TUVSUl9EUENNX0FVRElPLCAwLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsIFBJUEVfUENNMV9PVVQsIFNTVF9UQVNLX0lEX01FRElBLCAwfSwKKwl7TUVSUl9EUENNX0RFRVBfQlVGRkVSLCAwLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCBQSVBFX01FRElBM19JTiwgU1NUX1RBU0tfSURfTUVESUEsIDB9LAogfTsKIAogc3RhdGljIGludCBzc3RfbWVkaWFfZGlnaXRhbF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSwgaW50IHN0cmVhbSkKQEAgLTUwMCwxNCArNTAxLDI1IEBACiAJCS5jaGFubmVsc19taW4gPSBTU1RfU1RFUkVPLAogCQkuY2hhbm5lbHNfbWF4ID0gU1NUX1NURVJFTywKIAkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDB8U05EUlZfUENNX1JBVEVfNDgwMDAsCi0JCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSwKIAl9LAogCS5jYXB0dXJlID0gewogCQkuc3RyZWFtX25hbWUgPSAiSGVhZHNldCBDYXB0dXJlIiwKIAkJLmNoYW5uZWxzX21pbiA9IDEsCiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMHxTTkRSVl9QQ01fUkFURV80ODAwMCwKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAorCX0sCit9LAoreworCS5uYW1lID0gImRlZXBidWZmZXItY3B1LWRhaSIsCisJLm9wcyA9ICZzc3RfbWVkaWFfZGFpX29wcywKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJEZWVwYnVmZmVyIFBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IFNTVF9TVEVSRU8sCisJCS5jaGFubmVsc19tYXggPSBTU1RfU1RFUkVPLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMHxTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAogCX0sCiB9LAogewpAQCAtNTE2LDEwICs1MjgsNiBAQAogCS5vcHMgPSAmc3N0X2NvbXByX2RhaV9vcHMsCiAJLnBsYXliYWNrID0gewogCQkuc3RyZWFtX25hbWUgPSAiQ29tcHJlc3MgUGxheWJhY2siLAotCQkuY2hhbm5lbHNfbWluID0gU1NUX1NURVJFTywKLQkJLmNoYW5uZWxzX21heCA9IFNTVF9TVEVSRU8sCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAogCX0sCiB9LAogLyogQkUgQ1BVICBEYWlzICovCkBAIC03NjAsMTUgKzc2OCwxNSBAQAogc3RhdGljIGludCBzc3Rfc29jX3ByZXBhcmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzc3RfZGF0YSAqZHJ2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IGk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKIAogCS8qIHN1c3BlbmQgYWxsIHBjbXMgZmlyc3QgKi8KIAlzbmRfc29jX3N1c3BlbmQoZHJ2LT5zb2NfY2FyZC0+ZGV2KTsKIAlzbmRfc29jX3Bvd2Vyb2ZmKGRydi0+c29jX2NhcmQtPmRldik7CiAKIAkvKiBzZXQgdGhlIFNTUHMgdG8gaWRsZSAqLwotCWZvciAoaSA9IDA7IGkgPCBkcnYtPnNvY19jYXJkLT5udW1fcnRkOyBpKyspIHsKLQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBkcnYtPnNvY19jYXJkLT5ydGRbaV0uY3B1X2RhaTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZCwgJmRydi0+c29jX2NhcmQtPnJ0ZF9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gcnRkLT5jcHVfZGFpOwogCiAJCWlmIChkYWktPmFjdGl2ZSkgewogCQkJc2VuZF9zc3BfY21kKGRhaSwgZGFpLT5uYW1lLCAwKTsKQEAgLTc4MiwxMSArNzkwLDExIEBACiBzdGF0aWMgdm9pZCBzc3Rfc29jX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3N0X2RhdGEgKmRydiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CiAKIAkvKiByZXN0YXJ0IFNTUHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZHJ2LT5zb2NfY2FyZC0+bnVtX3J0ZDsgaSsrKSB7Ci0JCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gZHJ2LT5zb2NfY2FyZC0+cnRkW2ldLmNwdV9kYWk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZkcnYtPnNvY19jYXJkLT5ydGRfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAogCQlpZiAoZGFpLT5hY3RpdmUpIHsKIAkJCXNzdF9oYW5kbGVfdmJfdGltZXIoZGFpLCB0cnVlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9hdG9tL3NzdC9zc3RfYWNwaS5jIGIvc291bmQvc29jL2ludGVsL2F0b20vc3N0L3NzdF9hY3BpLmMKaW5kZXggYmIxOWI1OC4uNGZjZTAzZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL2F0b20vc3N0L3NzdF9hY3BpLmMKKysrIGIvc291bmQvc29jL2ludGVsL2F0b20vc3N0L3NzdF9hY3BpLmMKQEAgLTQwLDE4ICs0MCw5IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgIi4uL3NzdC1tZmxkLXBsYXRmb3JtLmgiCiAjaW5jbHVkZSAiLi4vLi4vY29tbW9uL3NzdC1kc3AuaCIKKyNpbmNsdWRlICIuLi8uLi9jb21tb24vc3N0LWFjcGkuaCIKICNpbmNsdWRlICJzc3QuaCIKIAotc3RydWN0IHNzdF9tYWNoaW5lcyB7Ci0JY2hhciAqY29kZWNfaWQ7Ci0JY2hhciBib2FyZFszMl07Ci0JY2hhciBtYWNoaW5lWzMyXTsKLQl2b2lkICgqbWFjaGluZV9xdWlyaykodm9pZCk7Ci0JY2hhciBmaXJtd2FyZVtGV19OQU1FX1NJWkVdOwotCXN0cnVjdCBzc3RfcGxhdGZvcm1faW5mbyAqcGRhdGE7Ci0KLX07Ci0KIC8qIExQRSB2aWV3cG9pbnQgYWRkcmVzc2VzICovCiAjZGVmaW5lIFNTVF9CWVRfSVJBTV9QSFlfU1RBUlQJMHhmZjJjMDAwMAogI2RlZmluZSBTU1RfQllUX0lSQU1fUEhZX0VORAkweGZmMmQ0MDAwCkBAIC0yMjMsMzcgKzIxNCwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYWNwaV9zdGF0dXMgc3N0X2FjcGlfbWFjaF9tYXRjaChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsZXZlbCwKLQkJCQkgICAgICAgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldCkKLXsKLQkqKGJvb2wgKiljb250ZXh0ID0gdHJ1ZTsKLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3N0X21hY2hpbmVzICpzc3RfYWNwaV9maW5kX21hY2hpbmUoCi0Jc3RydWN0IHNzdF9tYWNoaW5lcyAqbWFjaGluZXMpCi17Ci0Jc3RydWN0IHNzdF9tYWNoaW5lcyAqbWFjaDsKLQlib29sIGZvdW5kID0gZmFsc2U7Ci0KLQlmb3IgKG1hY2ggPSBtYWNoaW5lczsgbWFjaC0+Y29kZWNfaWQ7IG1hY2grKykKLQkJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9kZXZpY2VzKG1hY2gtPmNvZGVjX2lkLAotCQkJCQkJICBzc3RfYWNwaV9tYWNoX21hdGNoLAotCQkJCQkJICAmZm91bmQsIE5VTEwpKSAmJiBmb3VuZCkKLQkJCXJldHVybiBtYWNoOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbnQgc3N0X2FjcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCWludCByZXQgPSAwOwogCXN0cnVjdCBpbnRlbF9zc3RfZHJ2ICpjdHg7CiAJY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZDsKLQlzdHJ1Y3Qgc3N0X21hY2hpbmVzICptYWNoOworCXN0cnVjdCBzc3RfYWNwaV9tYWNoICptYWNoOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1kZXY7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXY7CisJc3RydWN0IHNzdF9wbGF0Zm9ybV9pbmZvICpwZGF0YTsKIAl1bnNpZ25lZCBpbnQgZGV2X2lkOwogCiAJaWQgPSBhY3BpX21hdGNoX2RldmljZShkZXYtPmRyaXZlci0+YWNwaV9tYXRjaF90YWJsZSwgZGV2KTsKQEAgLTI2MSwxMiArMjMxLDEzIEBACiAJCXJldHVybiAtRU5PREVWOwogCWRldl9kYmcoZGV2LCAiZm9yICVzIiwgaWQtPmlkKTsKIAotCW1hY2ggPSAoc3RydWN0IHNzdF9tYWNoaW5lcyAqKWlkLT5kcml2ZXJfZGF0YTsKKwltYWNoID0gKHN0cnVjdCBzc3RfYWNwaV9tYWNoICopaWQtPmRyaXZlcl9kYXRhOwogCW1hY2ggPSBzc3RfYWNwaV9maW5kX21hY2hpbmUobWFjaCk7CiAJaWYgKG1hY2ggPT0gTlVMTCkgewogCQlkZXZfZXJyKGRldiwgIk5vIG1hdGNoaW5nIG1hY2hpbmUgZHJpdmVyIGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCXBkYXRhID0gbWFjaC0+cGRhdGE7CiAKIAlyZXQgPSBrc3RydG91aW50KGlkLT5pZCwgMTYsICZkZXZfaWQpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0yNzYsMTYgKzI0NywyMyBAQAogCiAJZGV2X2RiZyhkZXYsICJBQ1BJIGRldmljZSBpZDogJXhcbiIsIGRldl9pZCk7CiAKLQlwbGF0X2RldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKGRldiwgbWFjaC0+cGRhdGEtPnBsYXRmb3JtLCAtMSwgTlVMTCwgMCk7CisJcGxhdF9kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShkZXYsIHBkYXRhLT5wbGF0Zm9ybSwgLTEsCisJCQkJCQlOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKHBsYXRfZGV2KSkgewotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgbWFjaGluZSBkZXZpY2U6ICVzXG4iLCBtYWNoLT5wZGF0YS0+cGxhdGZvcm0pOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgbWFjaGluZSBkZXZpY2U6ICVzXG4iLAorCQkJcGRhdGEtPnBsYXRmb3JtKTsKIAkJcmV0dXJuIFBUUl9FUlIocGxhdF9kZXYpOwogCX0KIAotCS8qIENyZWF0ZSBwbGF0Zm9ybSBkZXZpY2UgZm9yIHNzdCBtYWNoaW5lIGRyaXZlciAqLwotCW1kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShkZXYsIG1hY2gtPm1hY2hpbmUsIC0xLCBOVUxMLCAwKTsKKwkvKgorCSAqIENyZWF0ZSBwbGF0Zm9ybSBkZXZpY2UgZm9yIHNzdCBtYWNoaW5lIGRyaXZlciwKKwkgKiBwYXNzIG1hY2hpbmUgaW5mbyBhcyBwZGF0YQorCSAqLworCW1kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShkZXYsIG1hY2gtPmRydl9uYW1lLCAtMSwKKwkJCQkJKGNvbnN0IHZvaWQgKiltYWNoLCBzaXplb2YoKm1hY2gpKTsKIAlpZiAoSVNfRVJSKG1kZXYpKSB7Ci0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBtYWNoaW5lIGRldmljZTogJXNcbiIsIG1hY2gtPm1hY2hpbmUpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgbWFjaGluZSBkZXZpY2U6ICVzXG4iLAorCQkJbWFjaC0+ZHJ2X25hbWUpOwogCQlyZXR1cm4gUFRSX0VSUihtZGV2KTsKIAl9CiAKQEAgLTI5NCw4ICsyNzIsOCBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogRmlsbCBzc3QgcGxhdGZvcm0gZGF0YSAqLwotCWN0eC0+cGRhdGEgPSBtYWNoLT5wZGF0YTsKLQlzdHJjcHkoY3R4LT5maXJtd2FyZV9uYW1lLCBtYWNoLT5maXJtd2FyZSk7CisJY3R4LT5wZGF0YSA9IHBkYXRhOworCXN0cmNweShjdHgtPmZpcm13YXJlX25hbWUsIG1hY2gtPmZ3X2ZpbGVuYW1lKTsKIAogCXJldCA9IHNzdF9wbGF0Zm9ybV9nZXRfcmVzb3VyY2VzKGN0eCk7CiAJaWYgKHJldCkKQEAgLTM0MiwyMiArMzIwLDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3N0X21hY2hpbmVzIHNzdF9hY3BpX2J5dGNyW10gPSB7Ci0JeyIxMEVDNTY0MCIsICJUMTAwIiwgImJ5dHQxMDBfcnQ1NjQwIiwgTlVMTCwgImludGVsL2Z3X3NzdF8wZjI4LmJpbiIsCitzdGF0aWMgc3RydWN0IHNzdF9hY3BpX21hY2ggc3N0X2FjcGlfYnl0Y3JbXSA9IHsKKwl7IjEwRUM1NjQwIiwgImJ5dGNyX3J0NTY0MCIsICJpbnRlbC9md19zc3RfMGYyOC5iaW4iLCAiYnl0Y3JfcnQ1NjQwIiwgTlVMTCwKKwkJCQkJCSZieXRfcnZwX3BsYXRmb3JtX2RhdGEgfSwKKwl7IjEwRUM1NjQyIiwgImJ5dGNyX3J0NTY0MCIsICJpbnRlbC9md19zc3RfMGYyOC5iaW4iLCAiYnl0Y3JfcnQ1NjQwIiwgTlVMTCwKKwkJCQkJCSZieXRfcnZwX3BsYXRmb3JtX2RhdGEgfSwKKwl7IklOVENDRkZEIiwgImJ5dGNyX3J0NTY0MCIsICJpbnRlbC9md19zc3RfMGYyOC5iaW4iLCAiYnl0Y3JfcnQ1NjQwIiwgTlVMTCwKKwkJCQkJCSZieXRfcnZwX3BsYXRmb3JtX2RhdGEgfSwKKwl7IjEwRUM1NjUxIiwgImJ5dGNyX3J0NTY1MSIsICJpbnRlbC9md19zc3RfMGYyOC5iaW4iLCAiYnl0Y3JfcnQ1NjUxIiwgTlVMTCwKIAkJCQkJCSZieXRfcnZwX3BsYXRmb3JtX2RhdGEgfSwKIAl7fSwKIH07CiAKIC8qIENoZXJyeXZpZXctYmFzZWQgcGxhdGZvcm1zOiBDaGVycnlUcmFpbCBhbmQgQnJhc3dlbGwgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3N0X21hY2hpbmVzIHNzdF9hY3BpX2NodltdID0gewotCXsiMTBFQzU2NzAiLCAiY2h0LWJzdyIsICJjaHQtYnN3LXJ0NTY3MiIsIE5VTEwsICJpbnRlbC9md19zc3RfMjJhOC5iaW4iLAorc3RhdGljIHN0cnVjdCBzc3RfYWNwaV9tYWNoIHNzdF9hY3BpX2NodltdID0geworCXsiMTBFQzU2NzAiLCAiY2h0LWJzdy1ydDU2NzIiLCAiaW50ZWwvZndfc3N0XzIyYTguYmluIiwgImNodC1ic3ciLCBOVUxMLAogCQkJCQkJJmNodl9wbGF0Zm9ybV9kYXRhIH0sCi0JeyIxMEVDNTY0NSIsICJjaHQtYnN3IiwgImNodC1ic3ctcnQ1NjQ1IiwgTlVMTCwgImludGVsL2Z3X3NzdF8yMmE4LmJpbiIsCisJeyIxMEVDNTY0NSIsICJjaHQtYnN3LXJ0NTY0NSIsICJpbnRlbC9md19zc3RfMjJhOC5iaW4iLCAiY2h0LWJzdyIsIE5VTEwsCiAJCQkJCQkmY2h2X3BsYXRmb3JtX2RhdGEgfSwKLQl7IjEwRUM1NjUwIiwgImNodC1ic3ciLCAiY2h0LWJzdy1ydDU2NDUiLCBOVUxMLCAiaW50ZWwvZndfc3N0XzIyYTguYmluIiwKKwl7IjEwRUM1NjUwIiwgImNodC1ic3ctcnQ1NjQ1IiwgImludGVsL2Z3X3NzdF8yMmE4LmJpbiIsICJjaHQtYnN3IiwgTlVMTCwKIAkJCQkJCSZjaHZfcGxhdGZvcm1fZGF0YSB9LAotCXsiMTkzQzk4OTAiLCAiY2h0LWJzdyIsICJjaHQtYnN3LW1heDk4MDkwIiwgTlVMTCwKLQkiaW50ZWwvZndfc3N0XzIyYTguYmluIiwgJmNodl9wbGF0Zm9ybV9kYXRhIH0sCisJeyIxOTNDOTg5MCIsICJjaHQtYnN3LW1heDk4MDkwIiwgImludGVsL2Z3X3NzdF8yMmE4LmJpbiIsICJjaHQtYnN3IiwgTlVMTCwKKwkJCQkJCSZjaHZfcGxhdGZvcm1fZGF0YSB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL2F0b20vc3N0L3NzdF9zdHJlYW0uYyBiL3NvdW5kL3NvYy9pbnRlbC9hdG9tL3NzdC9zc3Rfc3RyZWFtLmMKaW5kZXggYTc0YzY0Yy4uNGNjYzgwZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL2F0b20vc3N0L3NzdF9zdHJlYW0uYworKysgYi9zb3VuZC9zb2MvaW50ZWwvYXRvbS9zc3Qvc3N0X3N0cmVhbS5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJCXN0cl9pZCwgcGlwZV9pZCk7CiAJcmV0ID0gc3N0X3ByZXBhcmVfYW5kX3Bvc3RfbXNnKHNzdF9kcnZfY3R4LCB0YXNrX2lkLCBJUENfQ01ELAogCQkJSVBDX0lBX0FMTE9DX1NUUkVBTV9NUkZMRCwgcGlwZV9pZCwgc2l6ZW9mKGFsbG9jX3BhcmFtKSwKLQkJCSZhbGxvY19wYXJhbSwgZGF0YSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOworCQkJJmFsbG9jX3BhcmFtLCAmZGF0YSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpOwogCiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihzc3RfZHJ2X2N0eC0+ZGV2LCAiRlcgYWxsb2MgZmFpbGVkIHJldCAlZFxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9iYXl0cmFpbC9zc3QtYmF5dHJhaWwtcGNtLmMgYi9zb3VuZC9zb2MvaW50ZWwvYmF5dHJhaWwvc3N0LWJheXRyYWlsLXBjbS5jCmluZGV4IDc5NTQ3YmUuLjQ3NjVhZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9iYXl0cmFpbC9zc3QtYmF5dHJhaWwtcGNtLmMKKysrIGIvc291bmQvc29jL2ludGVsL2JheXRyYWlsL3NzdC1iYXl0cmFpbC1wY20uYwpAQCAtMzc3LDYgKzM3Nyw4IEBACiAKIAlwcml2X2RhdGEgPSBkZXZtX2t6YWxsb2MocGxhdGZvcm0tPmRldiwgc2l6ZW9mKCpwcml2X2RhdGEpLAogCQkJCSBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJcHJpdl9kYXRhLT5ieXQgPSBwbGF0X2RhdGEtPmRzcDsKIAlzbmRfc29jX3BsYXRmb3JtX3NldF9kcnZkYXRhKHBsYXRmb3JtLCBwcml2X2RhdGEpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL01ha2VmaWxlIGIvc291bmQvc29jL2ludGVsL2JvYXJkcy9NYWtlZmlsZQppbmRleCAzNzFjNDU2Li4zMzEwYzBmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9ib2FyZHMvTWFrZWZpbGUKQEAgLTMsMTcgKzMsMjMgQEAKIHNuZC1zb2Mtc3N0LWJ5dC1tYXg5ODA5MC1tYWNoLW9ianMgOj0gYnl0LW1heDk4MDkwLm8KIHNuZC1zb2Mtc3N0LWJyb2Fkd2VsbC1vYmpzIDo9IGJyb2Fkd2VsbC5vCiBzbmQtc29jLXNzdC1ieXRjci1ydDU2NDAtb2JqcyA6PSBieXRjcl9ydDU2NDAubworc25kLXNvYy1zc3QtYnl0Y3ItcnQ1NjUxLW9ianMgOj0gYnl0Y3JfcnQ1NjUxLm8KIHNuZC1zb2Mtc3N0LWNodC1ic3ctcnQ1NjcyLW9ianMgOj0gY2h0X2Jzd19ydDU2NzIubwogc25kLXNvYy1zc3QtY2h0LWJzdy1ydDU2NDUtb2JqcyA6PSBjaHRfYnN3X3J0NTY0NS5vCiBzbmQtc29jLXNzdC1jaHQtYnN3LW1heDk4MDkwX3RpLW9ianMgOj0gY2h0X2Jzd19tYXg5ODA5MF90aS5vCiBzbmQtc29jLXNrbF9ydDI4Ni1vYmpzIDo9IHNrbF9ydDI4Ni5vCitzbmQtc2tsX25hdTg4bDI1X21heDk4MzU3YS1vYmpzIDo9IHNrbF9uYXU4OGwyNV9tYXg5ODM1N2Eubworc25kLXNvYy1za2xfbmF1ODhsMjVfc3NtNDU2Ny1vYmpzIDo9IHNrbF9uYXU4OGwyNV9zc200NTY3Lm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0NfSU5URUxfSEFTV0VMTF9NQUNIKSArPSBzbmQtc29jLXNzdC1oYXN3ZWxsLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX0JZVF9SVDU2NDBfTUFDSCkgKz0gc25kLXNvYy1zc3QtYnl0LXJ0NTY0MC1tYWNoLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX0JZVF9NQVg5ODA5MF9NQUNIKSArPSBzbmQtc29jLXNzdC1ieXQtbWF4OTgwOTAtbWFjaC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19JTlRFTF9CUk9BRFdFTExfTUFDSCkgKz0gc25kLXNvYy1zc3QtYnJvYWR3ZWxsLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX0JZVENSX1JUNTY0MF9NQUNIKSArPSBzbmQtc29jLXNzdC1ieXRjci1ydDU2NDAubworb2JqLSQoQ09ORklHX1NORF9TT0NfSU5URUxfQllUQ1JfUlQ1NjUxX01BQ0gpICs9IHNuZC1zb2Mtc3N0LWJ5dGNyLXJ0NTY1MS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19JTlRFTF9DSFRfQlNXX1JUNTY3Ml9NQUNIKSArPSBzbmQtc29jLXNzdC1jaHQtYnN3LXJ0NTY3Mi5vCiBvYmotJChDT05GSUdfU05EX1NPQ19JTlRFTF9DSFRfQlNXX1JUNTY0NV9NQUNIKSArPSBzbmQtc29jLXNzdC1jaHQtYnN3LXJ0NTY0NS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19JTlRFTF9DSFRfQlNXX01BWDk4MDkwX1RJX01BQ0gpICs9IHNuZC1zb2Mtc3N0LWNodC1ic3ctbWF4OTgwOTBfdGkubwogb2JqLSQoQ09ORklHX1NORF9TT0NfSU5URUxfU0tMX1JUMjg2X01BQ0gpICs9IHNuZC1zb2Mtc2tsX3J0Mjg2Lm8KK29iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX1NLTF9OQVU4OEwyNV9NQVg5ODM1N0FfTUFDSCkgKz0gc25kLXNrbF9uYXU4OGwyNV9tYXg5ODM1N2Eubworb2JqLSQoQ09ORklHX1NORF9TT0NfSU5URUxfU0tMX05BVTg4TDI1X1NTTTQ1NjdfTUFDSCkgKz0gc25kLXNvYy1za2xfbmF1ODhsMjVfc3NtNDU2Ny5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL2J5dGNyX3J0NTY0MC5jIGIvc291bmQvc29jL2ludGVsL2JvYXJkcy9ieXRjcl9ydDU2NDAuYwppbmRleCA3YTVjOWEzLi45YTE3NTJkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL2J5dGNyX3J0NTY0MC5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9ib2FyZHMvYnl0Y3JfcnQ1NjQwLmMKQEAgLTIwLDUxICsyMCw3NiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KICNpbmNsdWRlICIuLi8uLi9jb2RlY3MvcnQ1NjQwLmgiCiAjaW5jbHVkZSAiLi4vYXRvbS9zc3QtYXRvbS1jb250cm9scy5oIgorI2luY2x1ZGUgIi4uL2NvbW1vbi9zc3QtYWNwaS5oIgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYnl0X2RhcG1fd2lkZ2V0c1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGJ5dF9ydDU2NDBfd2lkZ2V0c1tdID0gewogCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIiwgTlVMTCksCiAJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKLQlTTkRfU09DX0RBUE1fTUlDKCJJbnQgTWljIiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX1NQSygiRXh0IFNwayIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkludGVybmFsIE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIlNwZWFrZXIiLCBOVUxMKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGJ5dF9hdWRpb19tYXBbXSA9IHsKLQl7IklOMlAiLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKLQl7IklOMk4iLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKLQl7IkhlYWRzZXQgTWljIiwgTlVMTCwgIk1JQ0JJQVMxIn0sCi0JeyJJTjFQIiwgTlVMTCwgIk1JQ0JJQVMxIn0sCi0JeyJMRE8yIiwgTlVMTCwgIkludCBNaWMifSwKLQl7IkhlYWRwaG9uZSIsIE5VTEwsICJIUE9MIn0sCi0JeyJIZWFkcGhvbmUiLCBOVUxMLCAiSFBPUiJ9LAotCXsiRXh0IFNwayIsIE5VTEwsICJTUE9MUCJ9LAotCXsiRXh0IFNwayIsIE5VTEwsICJTUE9MTiJ9LAotCXsiRXh0IFNwayIsIE5VTEwsICJTUE9SUCJ9LAotCXsiRXh0IFNwayIsIE5VTEwsICJTUE9STiJ9LAotCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBieXRfcnQ1NjQwX2F1ZGlvX21hcFtdID0gewogCXsiQUlGMSBQbGF5YmFjayIsIE5VTEwsICJzc3AyIFR4In0sCiAJeyJzc3AyIFR4IiwgTlVMTCwgImNvZGVjX291dDAifSwKIAl7InNzcDIgVHgiLCBOVUxMLCAiY29kZWNfb3V0MSJ9LAogCXsiY29kZWNfaW4wIiwgTlVMTCwgInNzcDIgUngifSwKIAl7ImNvZGVjX2luMSIsIE5VTEwsICJzc3AyIFJ4In0sCiAJeyJzc3AyIFJ4IiwgTlVMTCwgIkFJRjEgQ2FwdHVyZSJ9LAorCisJeyJIZWFkc2V0IE1pYyIsIE5VTEwsICJNSUNCSUFTMSJ9LAorCXsiSU4yUCIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCXsiSGVhZHBob25lIiwgTlVMTCwgIkhQT0wifSwKKwl7IkhlYWRwaG9uZSIsIE5VTEwsICJIUE9SIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIlNQT0xQIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIlNQT0xOIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIlNQT1JQIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIlNQT1JOIn0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYnl0X21jX2NvbnRyb2xzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBieXRfcnQ1NjQwX2ludG1pY19kbWljMV9tYXBbXSA9IHsKKwl7IkRNSUMxIiwgTlVMTCwgIkludGVybmFsIE1pYyJ9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYnl0X3J0NTY0MF9pbnRtaWNfZG1pYzJfbWFwW10gPSB7CisJeyJETUlDMiIsIE5VTEwsICJJbnRlcm5hbCBNaWMifSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGJ5dF9ydDU2NDBfaW50bWljX2luMV9tYXBbXSA9IHsKKwl7IkludGVybmFsIE1pYyIsIE5VTEwsICJNSUNCSUFTMSJ9LAorCXsiSU4xUCIsIE5VTEwsICJJbnRlcm5hbCBNaWMifSwKK307CisKK2VudW0geworCUJZVF9SVDU2NDBfRE1JQzFfTUFQLAorCUJZVF9SVDU2NDBfRE1JQzJfTUFQLAorCUJZVF9SVDU2NDBfSU4xX01BUCwKK307CisKKyNkZWZpbmUgQllUX1JUNTY0MF9NQVAocXVpcmspCSgocXVpcmspICYgMHhmZikKKyNkZWZpbmUgQllUX1JUNTY0MF9ETUlDX0VOCUJJVCgxNikKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYnl0X3J0NTY0MF9xdWlyayA9IEJZVF9SVDU2NDBfRE1JQzFfTUFQIHwKKwkJCQkJQllUX1JUNTY0MF9ETUlDX0VOOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYnl0X3J0NTY0MF9jb250cm9sc1tdID0gewogCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRwaG9uZSIpLAogCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRzZXQgTWljIiksCi0JU09DX0RBUE1fUElOX1NXSVRDSCgiSW50IE1pYyIpLAotCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkV4dCBTcGsiKSwKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJJbnRlcm5hbCBNaWMiKSwKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJTcGVha2VyIiksCiB9OwogCi1zdGF0aWMgaW50IGJ5dF9haWYxX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKK3N0YXRpYyBpbnQgYnl0X3J0NTY0MF9haWYxX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwpAQCAtOTIsNyArMTE3LDk1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtIGJ5dF9kYWlfcGFyYW1zID0geworc3RhdGljIGludCBieXRfcnQ1NjQwX3F1aXJrX2NiKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlieXRfcnQ1NjQwX3F1aXJrID0gKHVuc2lnbmVkIGxvbmcpaWQtPmRyaXZlcl9kYXRhOworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgYnl0X3J0NTY0MF9xdWlya190YWJsZVtdID0geworCXsKKwkJLmNhbGxiYWNrID0gYnl0X3J0NTY0MF9xdWlya19jYiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENPTVBVVEVSIElOQy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVDEwMFRBIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nICopQllUX1JUNTY0MF9JTjFfTUFQLAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBieXRfcnQ1NjQwX3F1aXJrX2NiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGxJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZlbnVlIDggUHJvIDU4MzAiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcgKikoQllUX1JUNTY0MF9ETUlDMl9NQVAgfAorCQkJCQkJIEJZVF9SVDU2NDBfRE1JQ19FTiksCisJfSwKKwl7CisJCS5jYWxsYmFjayA9IGJ5dF9ydDU2NDBfcXVpcmtfY2IsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkhQIEVsaXRlUGFkIDEwMDAgRzIiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcgKilCWVRfUlQ1NjQwX0lOMV9NQVAsCisJfSwKKwl7fQorfTsKKworc3RhdGljIGludCBieXRfcnQ1NjQwX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydW50aW1lLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gcnVudGltZS0+Y2FyZDsKKwljb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlICpjdXN0b21fbWFwOworCWludCBudW1fcm91dGVzOworCisJY2FyZC0+ZGFwbS5pZGxlX2JpYXNfb2ZmID0gdHJ1ZTsKKworCXJ0NTY0MF9zZWxfYXNyY19jbGtfc3JjKGNvZGVjLAorCQkJCVJUNTY0MF9EQV9TVEVSRU9fRklMVEVSIHwKKwkJCQlSVDU2NDBfQURfU1RFUkVPX0ZJTFRFUiwKKwkJCQlSVDU2NDBfQ0xLX1NFTF9BU1JDKTsKKworCXJldCA9IHNuZF9zb2NfYWRkX2NhcmRfY29udHJvbHMoY2FyZCwgYnl0X3J0NTY0MF9jb250cm9scywKKwkJCQkJQVJSQVlfU0laRShieXRfcnQ1NjQwX2NvbnRyb2xzKSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgInVuYWJsZSB0byBhZGQgY2FyZCBjb250cm9sc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZG1pX2NoZWNrX3N5c3RlbShieXRfcnQ1NjQwX3F1aXJrX3RhYmxlKTsKKwlzd2l0Y2ggKEJZVF9SVDU2NDBfTUFQKGJ5dF9ydDU2NDBfcXVpcmspKSB7CisJY2FzZSBCWVRfUlQ1NjQwX0lOMV9NQVA6CisJCWN1c3RvbV9tYXAgPSBieXRfcnQ1NjQwX2ludG1pY19pbjFfbWFwOworCQludW1fcm91dGVzID0gQVJSQVlfU0laRShieXRfcnQ1NjQwX2ludG1pY19pbjFfbWFwKTsKKwkJYnJlYWs7CisJY2FzZSBCWVRfUlQ1NjQwX0RNSUMyX01BUDoKKwkJY3VzdG9tX21hcCA9IGJ5dF9ydDU2NDBfaW50bWljX2RtaWMyX21hcDsKKwkJbnVtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYnl0X3J0NTY0MF9pbnRtaWNfZG1pYzJfbWFwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3VzdG9tX21hcCA9IGJ5dF9ydDU2NDBfaW50bWljX2RtaWMxX21hcDsKKwkJbnVtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYnl0X3J0NTY0MF9pbnRtaWNfZG1pYzFfbWFwKTsKKwl9CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcygmY2FyZC0+ZGFwbSwgY3VzdG9tX21hcCwgbnVtX3JvdXRlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChieXRfcnQ1NjQwX3F1aXJrICYgQllUX1JUNTY0MF9ETUlDX0VOKSB7CisJCXJldCA9IHJ0NTY0MF9kbWljX2VuYWJsZShjb2RlYywgMCwgMCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZCgmY2FyZC0+ZGFwbSwgIkhlYWRwaG9uZSIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZCgmY2FyZC0+ZGFwbSwgIlNwZWFrZXIiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtIGJ5dF9ydDU2NDBfZGFpX3BhcmFtcyA9IHsKIAkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAogCS5yYXRlX21pbiA9IDQ4MDAwLAogCS5yYXRlX21heCA9IDQ4MDAwLApAQCAtMTAwLDEzICsyMTMsMTQgQEAKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIH07CiAKLXN0YXRpYyBpbnQgYnl0X2NvZGVjX2ZpeHVwKHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCitzdGF0aWMgaW50IGJ5dF9ydDU2NDBfY29kZWNfZml4dXAoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCwKIAkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3Qgc25kX2ludGVydmFsICpyYXRlID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAogCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUpOwogCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmNoYW5uZWxzID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAogCQkJCQkJU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsKKwlpbnQgcmV0OwogCiAJLyogVGhlIERTUCB3aWxsIGNvdmVydCB0aGUgRkUgcmF0ZSB0byA0OGssIHN0ZXJlbywgMjRiaXRzICovCiAJcmF0ZS0+bWluID0gcmF0ZS0+bWF4ID0gNDgwMDA7CkBAIC0xMTQsMjQgKzIyOCw0NiBAQAogCiAJLyogc2V0IFNTUDIgdG8gMjQtYml0ICovCiAJcGFyYW1zX3NldF9mb3JtYXQocGFyYW1zLCBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSk7CisKKwkvKgorCSAqIERlZmF1bHQgbW9kZSBmb3IgU1NQIGNvbmZpZ3VyYXRpb24gaXMgVERNIDQgc2xvdCwgb3ZlcnJpZGUgY29uZmlnCisJICogd2l0aCBleHBsaWNpdCBzZXR0aW5nIHRvIEkyUyAyY2ggMjQtYml0LiBUaGUgd29yZCBsZW5ndGggaXMgc2V0IHdpdGgKKwkgKiBkYWlfc2V0X3RkbV9zbG90KCkgc2luY2UgdGhlcmUgaXMgbm8gb3RoZXIgQVBJIGV4cG9zZWQKKwkgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KHJ0ZC0+Y3B1X2RhaSwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0kyUyAgICAgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfSUYgICB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTCisJCQkJICApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIocnRkLT5kZXYsICJjYW4ndCBzZXQgZm9ybWF0IHRvIEkyUywgZXJyICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChydGQtPmNwdV9kYWksIDB4MywgMHgzLCAyLCAyNCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihydGQtPmRldiwgImNhbid0IHNldCBJMlMgY29uZmlnLCBlcnIgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnl0X2FpZjFfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgYnl0X3J0NTY0MF9haWYxX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJcmV0dXJuIHNuZF9wY21faHdfY29uc3RyYWludF9zaW5nbGUoc3Vic3RyZWFtLT5ydW50aW1lLAogCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsIDQ4MDAwKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBieXRfYWlmMV9vcHMgPSB7Ci0JLnN0YXJ0dXAgPSBieXRfYWlmMV9zdGFydHVwLAorc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBieXRfcnQ1NjQwX2FpZjFfb3BzID0geworCS5zdGFydHVwID0gYnl0X3J0NTY0MF9haWYxX3N0YXJ0dXAsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGJ5dF9iZV9zc3AyX29wcyA9IHsKLQkuaHdfcGFyYW1zID0gYnl0X2FpZjFfaHdfcGFyYW1zLAorc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBieXRfcnQ1NjQwX2JlX3NzcDJfb3BzID0geworCS5od19wYXJhbXMgPSBieXRfcnQ1NjQwX2FpZjFfaHdfcGFyYW1zLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGJ5dF9kYWlsaW5rW10gPSB7CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgYnl0X3J0NTY0MF9kYWlzW10gPSB7CiAJW01FUlJfRFBDTV9BVURJT10gPSB7CiAJCS5uYW1lID0gIkJheXRyYWlsIEF1ZGlvIFBvcnQiLAogCQkuc3RyZWFtX25hbWUgPSAiQmF5dHJhaWwgQXVkaW8iLApAQCAtMTQzLDcgKzI3OSwyMCBAQAogCQkuZHluYW1pYyA9IDEsCiAJCS5kcGNtX3BsYXliYWNrID0gMSwKIAkJLmRwY21fY2FwdHVyZSA9IDEsCi0JCS5vcHMgPSAmYnl0X2FpZjFfb3BzLAorCQkub3BzID0gJmJ5dF9ydDU2NDBfYWlmMV9vcHMsCisJfSwKKwlbTUVSUl9EUENNX0RFRVBfQlVGRkVSXSA9IHsKKwkJLm5hbWUgPSAiRGVlcC1CdWZmZXIgQXVkaW8gUG9ydCIsCisJCS5zdHJlYW1fbmFtZSA9ICJEZWVwLUJ1ZmZlciBBdWRpbyIsCisJCS5jcHVfZGFpX25hbWUgPSAiZGVlcGJ1ZmZlci1jcHUtZGFpIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gInNuZC1zb2MtZHVtbXktZGFpIiwKKwkJLmNvZGVjX25hbWUgPSAic25kLXNvYy1kdW1teSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gInNzdC1tZmxkLXBsYXRmb3JtIiwKKwkJLmlnbm9yZV9zdXNwZW5kID0gMSwKKwkJLm5vbmF0b21pYyA9IHRydWUsCisJCS5keW5hbWljID0gMSwKKwkJLmRwY21fcGxheWJhY2sgPSAxLAorCQkub3BzID0gJmJ5dF9ydDU2NDBfYWlmMV9vcHMsCiAJfSwKIAlbTUVSUl9EUENNX0NPTVBSXSA9IHsKIAkJLm5hbWUgPSAiQmF5dHJhaWwgQ29tcHJlc3NlZCBQb3J0IiwKQEAgLTE2MSw1OCArMzEwLDY5IEBACiAJCS5wbGF0Zm9ybV9uYW1lID0gInNzdC1tZmxkLXBsYXRmb3JtIiwKIAkJLm5vX3BjbSA9IDEsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJydDU2NDAtYWlmMSIsCi0JCS5jb2RlY19uYW1lID0gImkyYy0xMEVDNTY0MDowMCIsCisJCS5jb2RlY19uYW1lID0gImkyYy0xMEVDNTY0MDowMCIsIC8qIG92ZXJ3cml0dGVuIHdpdGggSElEICovCiAJCS5kYWlfZm10ID0gU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYKIAkJCQkJCXwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKLQkJLmJlX2h3X3BhcmFtc19maXh1cCA9IGJ5dF9jb2RlY19maXh1cCwKKwkJLmJlX2h3X3BhcmFtc19maXh1cCA9IGJ5dF9ydDU2NDBfY29kZWNfZml4dXAsCiAJCS5pZ25vcmVfc3VzcGVuZCA9IDEsCiAJCS5kcGNtX3BsYXliYWNrID0gMSwKIAkJLmRwY21fY2FwdHVyZSA9IDEsCi0JCS5vcHMgPSAmYnl0X2JlX3NzcDJfb3BzLAorCQkuaW5pdCA9IGJ5dF9ydDU2NDBfaW5pdCwKKwkJLm9wcyA9ICZieXRfcnQ1NjQwX2JlX3NzcDJfb3BzLAogCX0sCiB9OwogCiAvKiBTb0MgY2FyZCAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19jYXJkX2J5dCA9IHsKLQkubmFtZSA9ICJiYXl0cmFpbGNyYXVkaW8iLAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgYnl0X3J0NTY0MF9jYXJkID0geworCS5uYW1lID0gImJ5dGNyLXJ0NTY0MCIsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmRhaV9saW5rID0gYnl0X2RhaWxpbmssCi0JLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoYnl0X2RhaWxpbmspLAotCS5kYXBtX3dpZGdldHMgPSBieXRfZGFwbV93aWRnZXRzLAotCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShieXRfZGFwbV93aWRnZXRzKSwKLQkuZGFwbV9yb3V0ZXMgPSBieXRfYXVkaW9fbWFwLAotCS5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKGJ5dF9hdWRpb19tYXApLAotCS5jb250cm9scyA9IGJ5dF9tY19jb250cm9scywKLQkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRShieXRfbWNfY29udHJvbHMpLAorCS5kYWlfbGluayA9IGJ5dF9ydDU2NDBfZGFpcywKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShieXRfcnQ1NjQwX2RhaXMpLAorCS5kYXBtX3dpZGdldHMgPSBieXRfcnQ1NjQwX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKGJ5dF9ydDU2NDBfd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gYnl0X3J0NTY0MF9hdWRpb19tYXAsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYnl0X3J0NTY0MF9hdWRpb19tYXApLAorCS5mdWxseV9yb3V0ZWQgPSB0cnVlLAogfTsKIAotc3RhdGljIGludCBzbmRfYnl0X21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgY2hhciBieXRfcnQ1NjQwX2NvZGVjX25hbWVbMTZdOyAvKiBpMmMtPEhJRD46MDAgd2l0aCBISUQgYmVpbmcgOCBjaGFycyAqLworCitzdGF0aWMgaW50IHNuZF9ieXRfcnQ1NjQwX21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBzc3RfYWNwaV9tYWNoICptYWNoOwogCiAJLyogcmVnaXN0ZXIgdGhlIHNvYyBjYXJkICovCi0Jc25kX3NvY19jYXJkX2J5dC5kZXYgPSAmcGRldi0+ZGV2OworCWJ5dF9ydDU2NDBfY2FyZC5kZXYgPSAmcGRldi0+ZGV2OworCW1hY2ggPSBieXRfcnQ1NjQwX2NhcmQuZGV2LT5wbGF0Zm9ybV9kYXRhOwogCi0JcmV0X3ZhbCA9IGRldm1fc25kX3NvY19yZWdpc3Rlcl9jYXJkKCZwZGV2LT5kZXYsICZzbmRfc29jX2NhcmRfYnl0KTsKKwkvKiBmaXh1cCBjb2RlYyBuYW1lIGJhc2VkIG9uIEhJRCAqLworCXNucHJpbnRmKGJ5dF9ydDU2NDBfY29kZWNfbmFtZSwgc2l6ZW9mKGJ5dF9ydDU2NDBfY29kZWNfbmFtZSksCisJCSAiJXMlcyVzIiwgImkyYy0iLCBtYWNoLT5pZCwgIjowMCIpOworCWJ5dF9ydDU2NDBfZGFpc1tNRVJSX0RQQ01fQ09NUFIrMV0uY29kZWNfbmFtZSA9IGJ5dF9ydDU2NDBfY29kZWNfbmFtZTsKKworCXJldF92YWwgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY2FyZCgmcGRldi0+ZGV2LCAmYnl0X3J0NTY0MF9jYXJkKTsKKwogCWlmIChyZXRfdmFsKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImRldm1fc25kX3NvY19yZWdpc3Rlcl9jYXJkIGZhaWxlZCAlZFxuIiwgcmV0X3ZhbCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImRldm1fc25kX3NvY19yZWdpc3Rlcl9jYXJkIGZhaWxlZCAlZFxuIiwKKwkJCXJldF92YWwpOwogCQlyZXR1cm4gcmV0X3ZhbDsKIAl9Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgJnNuZF9zb2NfY2FyZF9ieXQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsICZieXRfcnQ1NjQwX2NhcmQpOwogCXJldHVybiByZXRfdmFsOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfYnl0X21jX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9ieXRfcnQ1NjQwX21jX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJieXR0MTAwX3J0NTY0MCIsCisJCS5uYW1lID0gImJ5dGNyX3J0NTY0MCIsCiAJCS5wbSA9ICZzbmRfc29jX3BtX29wcywKIAl9LAotCS5wcm9iZSA9IHNuZF9ieXRfbWNfcHJvYmUsCisJLnByb2JlID0gc25kX2J5dF9ydDU2NDBfbWNfcHJvYmUsCiB9OwogCi1tb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHNuZF9ieXRfbWNfZHJpdmVyKTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc25kX2J5dF9ydDU2NDBfbWNfZHJpdmVyKTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIEludGVsKFIpIEJheXRyYWlsIENSIE1hY2hpbmUgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTdWJocmFuc3UgUy4gUHJ1c3R5IDxzdWJocmFuc3Uucy5wcnVzdHlAaW50ZWwuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpieXR0MTAwX3J0NTY0MCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpieXRjcl9ydDU2NDAiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9ib2FyZHMvYnl0Y3JfcnQ1NjUxLmMgYi9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL2J5dGNyX3J0NTY1MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOTVjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL2J5dGNyX3J0NTY1MS5jCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogIGJ5dGNyX3J0NTY1MS5jIC0gQVNvYyBNYWNoaW5lIGRyaXZlciBmb3IgSW50ZWwgQnl0IENSIHBsYXRmb3JtCisgKiAgKGRlcml2ZWQgZnJvbSBieXRjcl9ydDU2NDAuYykKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnAKKyAqICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CisjaW5jbHVkZSAiLi4vLi4vY29kZWNzL3J0NTY1MS5oIgorI2luY2x1ZGUgIi4uL2F0b20vc3N0LWF0b20tY29udHJvbHMuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGJ5dF9ydDU2NTFfd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJJbnRlcm5hbCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBieXRfcnQ1NjUxX2F1ZGlvX21hcFtdID0geworCXsiQUlGMSBQbGF5YmFjayIsIE5VTEwsICJzc3AyIFR4In0sCisJeyJzc3AyIFR4IiwgTlVMTCwgImNvZGVjX291dDAifSwKKwl7InNzcDIgVHgiLCBOVUxMLCAiY29kZWNfb3V0MSJ9LAorCXsiY29kZWNfaW4wIiwgTlVMTCwgInNzcDIgUngifSwKKwl7ImNvZGVjX2luMSIsIE5VTEwsICJzc3AyIFJ4In0sCisJeyJzc3AyIFJ4IiwgTlVMTCwgIkFJRjEgQ2FwdHVyZSJ9LAorCisJeyJIZWFkc2V0IE1pYyIsIE5VTEwsICJtaWNiaWFzMSJ9LCAvKiBsb3dlcmNhc2UgZm9yIHJ0NTY1MSAqLworCXsiSU4yUCIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCXsiSGVhZHBob25lIiwgTlVMTCwgIkhQT0wifSwKKwl7IkhlYWRwaG9uZSIsIE5VTEwsICJIUE9SIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIkxPVVRMIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIkxPVVRSIn0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBieXRfcnQ1NjUxX2ludG1pY19kbWljMV9tYXBbXSA9IHsKKwl7IkRNSUMxIiwgTlVMTCwgIkludGVybmFsIE1pYyJ9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYnl0X3J0NTY1MV9pbnRtaWNfZG1pYzJfbWFwW10gPSB7CisJeyJETUlDMiIsIE5VTEwsICJJbnRlcm5hbCBNaWMifSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGJ5dF9ydDU2NTFfaW50bWljX2luMV9tYXBbXSA9IHsKKwl7IkludGVybmFsIE1pYyIsIE5VTEwsICJtaWNiaWFzMSJ9LAorCXsiSU4xUCIsIE5VTEwsICJJbnRlcm5hbCBNaWMifSwKK307CisKK2VudW0geworCUJZVF9SVDU2NTFfRE1JQzFfTUFQLAorCUJZVF9SVDU2NTFfRE1JQzJfTUFQLAorCUJZVF9SVDU2NTFfSU4xX01BUCwKK307CisKKyNkZWZpbmUgQllUX1JUNTY1MV9NQVAocXVpcmspCSgocXVpcmspICYgMHhmZikKKyNkZWZpbmUgQllUX1JUNTY1MV9ETUlDX0VOCUJJVCgxNikKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYnl0X3J0NTY1MV9xdWlyayA9IEJZVF9SVDU2NTFfRE1JQzFfTUFQIHwKKwkJCQkJQllUX1JUNTY1MV9ETUlDX0VOOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYnl0X3J0NTY1MV9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRwaG9uZSIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRzZXQgTWljIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiSW50ZXJuYWwgTWljIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiU3BlYWtlciIpLAorfTsKKworc3RhdGljIGludCBieXRfcnQ1NjUxX2FpZjFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwlpbnQgcmV0OworCisJc25kX3NvY19kYWlfc2V0X2JjbGtfcmF0aW8oY29kZWNfZGFpLCA1MCk7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgUlQ1NjUxX1NDTEtfU19QTEwxLAorCQkJCSAgICAgcGFyYW1zX3JhdGUocGFyYW1zKSAqIDUxMiwKKwkJCQkgICAgIFNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIocnRkLT5kZXYsICJjYW4ndCBzZXQgY29kZWMgY2xvY2sgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIDAsIFJUNTY1MV9QTEwxX1NfQkNMSzEsCisJCQkJICBwYXJhbXNfcmF0ZShwYXJhbXMpICogNTAsCisJCQkJICBwYXJhbXNfcmF0ZShwYXJhbXMpICogNTEyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHJ0ZC0+ZGV2LCAiY2FuJ3Qgc2V0IGNvZGVjIHBsbDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBieXRfcnQ1NjUxX3F1aXJrX3RhYmxlW10gPSB7CisJe30KK307CisKK3N0YXRpYyBpbnQgYnl0X3J0NTY1MV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHJ1bnRpbWUtPmNhcmQ7CisJY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSAqY3VzdG9tX21hcDsKKwlpbnQgbnVtX3JvdXRlczsKKworCWNhcmQtPmRhcG0uaWRsZV9iaWFzX29mZiA9IHRydWU7CisKKwlkbWlfY2hlY2tfc3lzdGVtKGJ5dF9ydDU2NTFfcXVpcmtfdGFibGUpOworCXN3aXRjaCAoQllUX1JUNTY1MV9NQVAoYnl0X3J0NTY1MV9xdWlyaykpIHsKKwljYXNlIEJZVF9SVDU2NTFfSU4xX01BUDoKKwkJY3VzdG9tX21hcCA9IGJ5dF9ydDU2NTFfaW50bWljX2luMV9tYXA7CisJCW51bV9yb3V0ZXMgPSBBUlJBWV9TSVpFKGJ5dF9ydDU2NTFfaW50bWljX2luMV9tYXApOworCQlicmVhazsKKwljYXNlIEJZVF9SVDU2NTFfRE1JQzJfTUFQOgorCQljdXN0b21fbWFwID0gYnl0X3J0NTY1MV9pbnRtaWNfZG1pYzJfbWFwOworCQludW1fcm91dGVzID0gQVJSQVlfU0laRShieXRfcnQ1NjUxX2ludG1pY19kbWljMl9tYXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljdXN0b21fbWFwID0gYnl0X3J0NTY1MV9pbnRtaWNfZG1pYzFfbWFwOworCQludW1fcm91dGVzID0gQVJSQVlfU0laRShieXRfcnQ1NjUxX2ludG1pY19kbWljMV9tYXApOworCX0KKworCXJldCA9IHNuZF9zb2NfYWRkX2NhcmRfY29udHJvbHMoY2FyZCwgYnl0X3J0NTY1MV9jb250cm9scywKKwkJCQkJQVJSQVlfU0laRShieXRfcnQ1NjUxX2NvbnRyb2xzKSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgInVuYWJsZSB0byBhZGQgY2FyZCBjb250cm9sc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZCgmY2FyZC0+ZGFwbSwgIkhlYWRwaG9uZSIpOworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZCgmY2FyZC0+ZGFwbSwgIlNwZWFrZXIiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtIGJ5dF9ydDU2NTFfZGFpX3BhcmFtcyA9IHsKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAorCS5yYXRlX21pbiA9IDQ4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorfTsKKworc3RhdGljIGludCBieXRfcnQ1NjUxX2NvZGVjX2ZpeHVwKHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqcmF0ZSA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywKKwkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKKwlzdHJ1Y3Qgc25kX2ludGVydmFsICpjaGFubmVscyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywKKwkJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisJaW50IHJldDsKKworCS8qIFRoZSBEU1Agd2lsbCBjb3ZlcnQgdGhlIEZFIHJhdGUgdG8gNDhrLCBzdGVyZW8sIDI0Yml0cyAqLworCXJhdGUtPm1pbiA9IHJhdGUtPm1heCA9IDQ4MDAwOworCWNoYW5uZWxzLT5taW4gPSBjaGFubmVscy0+bWF4ID0gMjsKKworCS8qIHNldCBTU1AyIHRvIDI0LWJpdCAqLworCXBhcmFtc19zZXRfZm9ybWF0KHBhcmFtcywgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUpOworCisJLyoKKwkgKiBEZWZhdWx0IG1vZGUgZm9yIFNTUCBjb25maWd1cmF0aW9uIGlzIFRETSA0IHNsb3QsIG92ZXJyaWRlIGNvbmZpZworCSAqIHdpdGggZXhwbGljaXQgc2V0dGluZyB0byBJMlMgMmNoIDI0LWJpdC4gVGhlIHdvcmQgbGVuZ3RoIGlzIHNldCB3aXRoCisJICogZGFpX3NldF90ZG1fc2xvdCgpIHNpbmNlIHRoZXJlIGlzIG5vIG90aGVyIEFQSSBleHBvc2VkCisJICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChydGQtPmNwdV9kYWksCisJCQkJICBTTkRfU09DX0RBSUZNVF9JMlMgICAgIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX05CX0lGICAgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUworCQkJCSAgKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIocnRkLT5kZXYsICJjYW4ndCBzZXQgZm9ybWF0IHRvIEkyUywgZXJyICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChydGQtPmNwdV9kYWksIDB4MywgMHgzLCAyLCAyNCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihydGQtPmRldiwgImNhbid0IHNldCBJMlMgY29uZmlnLCBlcnIgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNfNDgwMDBbXSA9IHsKKwk0ODAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgY29uc3RyYWludHNfNDgwMDAgPSB7CisJLmNvdW50ID0gQVJSQVlfU0laRShyYXRlc180ODAwMCksCisJLmxpc3QgID0gcmF0ZXNfNDgwMDAsCit9OworCitzdGF0aWMgaW50IGJ5dF9ydDU2NTFfYWlmMV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKKwkJCSZjb25zdHJhaW50c180ODAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgYnl0X3J0NTY1MV9haWYxX29wcyA9IHsKKwkuc3RhcnR1cCA9IGJ5dF9ydDU2NTFfYWlmMV9zdGFydHVwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBieXRfcnQ1NjUxX2JlX3NzcDJfb3BzID0geworCS5od19wYXJhbXMgPSBieXRfcnQ1NjUxX2FpZjFfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGJ5dF9ydDU2NTFfZGFpc1tdID0geworCVtNRVJSX0RQQ01fQVVESU9dID0geworCQkubmFtZSA9ICJBdWRpbyBQb3J0IiwKKwkJLnN0cmVhbV9uYW1lID0gIkF1ZGlvIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJtZWRpYS1jcHUtZGFpIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gInNuZC1zb2MtZHVtbXktZGFpIiwKKwkJLmNvZGVjX25hbWUgPSAic25kLXNvYy1kdW1teSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gInNzdC1tZmxkLXBsYXRmb3JtIiwKKwkJLmlnbm9yZV9zdXNwZW5kID0gMSwKKwkJLm5vbmF0b21pYyA9IHRydWUsCisJCS5keW5hbWljID0gMSwKKwkJLmRwY21fcGxheWJhY2sgPSAxLAorCQkuZHBjbV9jYXB0dXJlID0gMSwKKwkJLm9wcyA9ICZieXRfcnQ1NjUxX2FpZjFfb3BzLAorCX0sCisJW01FUlJfRFBDTV9ERUVQX0JVRkZFUl0gPSB7CisJCS5uYW1lID0gIkRlZXAtQnVmZmVyIEF1ZGlvIFBvcnQiLAorCQkuc3RyZWFtX25hbWUgPSAiRGVlcC1CdWZmZXIgQXVkaW8iLAorCQkuY3B1X2RhaV9uYW1lID0gImRlZXBidWZmZXItY3B1LWRhaSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJzbmQtc29jLWR1bW15LWRhaSIsCisJCS5jb2RlY19uYW1lID0gInNuZC1zb2MtZHVtbXkiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJzc3QtbWZsZC1wbGF0Zm9ybSIsCisJCS5pZ25vcmVfc3VzcGVuZCA9IDEsCisJCS5ub25hdG9taWMgPSB0cnVlLAorCQkuZHluYW1pYyA9IDEsCisJCS5kcGNtX3BsYXliYWNrID0gMSwKKwkJLm9wcyA9ICZieXRfcnQ1NjUxX2FpZjFfb3BzLAorCX0sCisJW01FUlJfRFBDTV9DT01QUl0gPSB7CisJCS5uYW1lID0gIkNvbXByZXNzZWQgUG9ydCIsCisJCS5zdHJlYW1fbmFtZSA9ICJDb21wcmVzcyIsCisJCS5jcHVfZGFpX25hbWUgPSAiY29tcHJlc3MtY3B1LWRhaSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJzbmQtc29jLWR1bW15LWRhaSIsCisJCS5jb2RlY19uYW1lID0gInNuZC1zb2MtZHVtbXkiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJzc3QtbWZsZC1wbGF0Zm9ybSIsCisJfSwKKwkvKiBDT0RFQzwtPkNPREVDIGxpbmsgKi8KKwkvKiBiYWNrIGVuZHMgKi8KKwl7CisJCS5uYW1lID0gIlNTUDItQ29kZWMiLAorCQkuYmVfaWQgPSAxLAorCQkuY3B1X2RhaV9uYW1lID0gInNzcDItcG9ydCIsCisJCS5wbGF0Zm9ybV9uYW1lID0gInNzdC1tZmxkLXBsYXRmb3JtIiwKKwkJLm5vX3BjbSA9IDEsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJydDU2NTEtYWlmMSIsCisJCS5jb2RlY19uYW1lID0gImkyYy0xMEVDNTY1MTowMCIsCisJCS5kYWlfZm10ID0gU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYKKwkJCQkJCXwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKKwkJLmJlX2h3X3BhcmFtc19maXh1cCA9IGJ5dF9ydDU2NTFfY29kZWNfZml4dXAsCisJCS5pZ25vcmVfc3VzcGVuZCA9IDEsCisJCS5ub25hdG9taWMgPSB0cnVlLAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJCS5kcGNtX2NhcHR1cmUgPSAxLAorCQkuaW5pdCA9IGJ5dF9ydDU2NTFfaW5pdCwKKwkJLm9wcyA9ICZieXRfcnQ1NjUxX2JlX3NzcDJfb3BzLAorCX0sCit9OworCisvKiBTb0MgY2FyZCAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgYnl0X3J0NTY1MV9jYXJkID0geworCS5uYW1lID0gImJ5dGNyLXJ0NTY1MSIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRhaV9saW5rID0gYnl0X3J0NTY1MV9kYWlzLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKGJ5dF9ydDU2NTFfZGFpcyksCisJLmRhcG1fd2lkZ2V0cyA9IGJ5dF9ydDU2NTFfd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUoYnl0X3J0NTY1MV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSBieXRfcnQ1NjUxX2F1ZGlvX21hcCwKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShieXRfcnQ1NjUxX2F1ZGlvX21hcCksCisJLmZ1bGx5X3JvdXRlZCA9IHRydWUsCit9OworCitzdGF0aWMgaW50IHNuZF9ieXRfcnQ1NjUxX21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldF92YWwgPSAwOworCisJLyogcmVnaXN0ZXIgdGhlIHNvYyBjYXJkICovCisJYnl0X3J0NTY1MV9jYXJkLmRldiA9ICZwZGV2LT5kZXY7CisKKwlyZXRfdmFsID0gZGV2bV9zbmRfc29jX3JlZ2lzdGVyX2NhcmQoJnBkZXYtPmRldiwgJmJ5dF9ydDU2NTFfY2FyZCk7CisKKwlpZiAocmV0X3ZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY2FyZCBmYWlsZWQgJWRcbiIsCisJCQlyZXRfdmFsKTsKKwkJcmV0dXJuIHJldF92YWw7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsICZieXRfcnQ1NjUxX2NhcmQpOworCXJldHVybiByZXRfdmFsOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfYnl0X3J0NTY1MV9tY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYnl0Y3JfcnQ1NjUxIiwKKwkJLnBtID0gJnNuZF9zb2NfcG1fb3BzLAorCX0sCisJLnByb2JlID0gc25kX2J5dF9ydDU2NTFfbWNfcHJvYmUsCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHNuZF9ieXRfcnQ1NjUxX21jX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBJbnRlbChSKSBCYXl0cmFpbCBDUiBNYWNoaW5lIGRyaXZlciBmb3IgUlQ1NjUxIik7CitNT0RVTEVfQVVUSE9SKCJQaWVycmUtTG91aXMgQm9zc2FydCA8cGllcnJlLWxvdWlzLmJvc3NhcnRAbGludXguaW50ZWwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpieXRjcl9ydDU2NTEiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9ib2FyZHMvY2h0X2Jzd19tYXg5ODA5MF90aS5jIGIvc291bmQvc29jL2ludGVsL2JvYXJkcy9jaHRfYnN3X21heDk4MDkwX3RpLmMKaW5kZXggNGUyZmNmMS4uOTA1ODhkNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL2JvYXJkcy9jaHRfYnN3X21heDk4MDkwX3RpLmMKKysrIGIvc291bmQvc29jL2ludGVsL2JvYXJkcy9jaHRfYnN3X21heDk4MDkwX3RpLmMKQEAgLTQxLDEyICs0MSw5IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNuZF9zb2NfZGFpICpjaHRfZ2V0X2NvZGVjX2RhaShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCWludCBpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7Ci0JCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7Ci0KLQkJcnRkID0gY2FyZC0+cnRkICsgaTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZCwgJmNhcmQtPnJ0ZF9saXN0LCBsaXN0KSB7CiAJCWlmICghc3RybmNtcChydGQtPmNvZGVjX2RhaS0+bmFtZSwgQ0hUX0NPREVDX0RBSSwKIAkJCSAgICAgc3RybGVuKENIVF9DT0RFQ19EQUkpKSkKIAkJCXJldHVybiBydGQtPmNvZGVjX2RhaTsKQEAgLTIzNSw2ICsyMzIsMTggQEAKIAkJLmRwY21fY2FwdHVyZSA9IDEsCiAJCS5vcHMgPSAmY2h0X2FpZjFfb3BzLAogCX0sCisJW01FUlJfRFBDTV9ERUVQX0JVRkZFUl0gPSB7CisJCS5uYW1lID0gIkRlZXAtQnVmZmVyIEF1ZGlvIFBvcnQiLAorCQkuc3RyZWFtX25hbWUgPSAiRGVlcC1CdWZmZXIgQXVkaW8iLAorCQkuY3B1X2RhaV9uYW1lID0gImRlZXBidWZmZXItY3B1LWRhaSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJzbmQtc29jLWR1bW15LWRhaSIsCisJCS5jb2RlY19uYW1lID0gInNuZC1zb2MtZHVtbXkiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJzc3QtbWZsZC1wbGF0Zm9ybSIsCisJCS5ub25hdG9taWMgPSB0cnVlLAorCQkuZHluYW1pYyA9IDEsCisJCS5kcGNtX3BsYXliYWNrID0gMSwKKwkJLm9wcyA9ICZjaHRfYWlmMV9vcHMsCisJfSwKIAlbTUVSUl9EUENNX0NPTVBSXSA9IHsKIAkJLm5hbWUgPSAiQ29tcHJlc3NlZCBQb3J0IiwKIAkJLnN0cmVhbV9uYW1lID0gIkNvbXByZXNzIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9ib2FyZHMvY2h0X2Jzd19ydDU2NDUuYyBiL3NvdW5kL3NvYy9pbnRlbC9ib2FyZHMvY2h0X2Jzd19ydDU2NDUuYwppbmRleCAzOGQ2NWEzLi4yZDNhZmRkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL2NodF9ic3dfcnQ1NjQ1LmMKKysrIGIvc291bmQvc29jL2ludGVsL2JvYXJkcy9jaHRfYnN3X3J0NTY0NS5jCkBAIC00NywxMiArNDcsOSBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzbmRfc29jX2RhaSAqY2h0X2dldF9jb2RlY19kYWkoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKLQlpbnQgaTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOwogCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykgewotCQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOwotCi0JCXJ0ZCA9IGNhcmQtPnJ0ZCArIGk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgewogCQlpZiAoIXN0cm5jbXAocnRkLT5jb2RlY19kYWktPm5hbWUsIENIVF9DT0RFQ19EQUksCiAJCQkgICAgIHN0cmxlbihDSFRfQ09ERUNfREFJKSkpCiAJCQlyZXR1cm4gcnRkLT5jb2RlY19kYWk7CkBAIC0yNjMsNiArMjYwLDE4IEBACiAJCS5kcGNtX2NhcHR1cmUgPSAxLAogCQkub3BzID0gJmNodF9haWYxX29wcywKIAl9LAorCVtNRVJSX0RQQ01fREVFUF9CVUZGRVJdID0geworCQkubmFtZSA9ICJEZWVwLUJ1ZmZlciBBdWRpbyBQb3J0IiwKKwkJLnN0cmVhbV9uYW1lID0gIkRlZXAtQnVmZmVyIEF1ZGlvIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJkZWVwYnVmZmVyLWNwdS1kYWkiLAorCQkuY29kZWNfZGFpX25hbWUgPSAic25kLXNvYy1kdW1teS1kYWkiLAorCQkuY29kZWNfbmFtZSA9ICJzbmQtc29jLWR1bW15IiwKKwkJLnBsYXRmb3JtX25hbWUgPSAic3N0LW1mbGQtcGxhdGZvcm0iLAorCQkubm9uYXRvbWljID0gdHJ1ZSwKKwkJLmR5bmFtaWMgPSAxLAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJCS5vcHMgPSAmY2h0X2FpZjFfb3BzLAorCX0sCiAJW01FUlJfRFBDTV9DT01QUl0gPSB7CiAJCS5uYW1lID0gIkNvbXByZXNzZWQgUG9ydCIsCiAJCS5zdHJlYW1fbmFtZSA9ICJDb21wcmVzcyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL2NodF9ic3dfcnQ1NjcyLmMgYi9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL2NodF9ic3dfcnQ1NjcyLmMKaW5kZXggNTYyMWNjZC4uMmU1MzQ3ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL2JvYXJkcy9jaHRfYnN3X3J0NTY3Mi5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9ib2FyZHMvY2h0X2Jzd19ydDU2NzIuYwpAQCAtNDYsMTIgKzQ2LDkgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmNodF9nZXRfY29kZWNfZGFpKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7Ci0JaW50IGk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKIAotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKLQkJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKLQotCQlydGQgPSBjYXJkLT5ydGQgKyBpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnRkLCAmY2FyZC0+cnRkX2xpc3QsIGxpc3QpIHsKIAkJaWYgKCFzdHJuY21wKHJ0ZC0+Y29kZWNfZGFpLT5uYW1lLCBDSFRfQ09ERUNfREFJLAogCQkJICAgICBzdHJsZW4oQ0hUX0NPREVDX0RBSSkpKQogCQkJcmV0dXJuIHJ0ZC0+Y29kZWNfZGFpOwpAQCAtMjUxLDYgKzI0OCwxOCBAQAogCQkuZHBjbV9jYXB0dXJlID0gMSwKIAkJLm9wcyA9ICZjaHRfYWlmMV9vcHMsCiAJfSwKKwlbTUVSUl9EUENNX0RFRVBfQlVGRkVSXSA9IHsKKwkJLm5hbWUgPSAiRGVlcC1CdWZmZXIgQXVkaW8gUG9ydCIsCisJCS5zdHJlYW1fbmFtZSA9ICJEZWVwLUJ1ZmZlciBBdWRpbyIsCisJCS5jcHVfZGFpX25hbWUgPSAiZGVlcGJ1ZmZlci1jcHUtZGFpIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gInNuZC1zb2MtZHVtbXktZGFpIiwKKwkJLmNvZGVjX25hbWUgPSAic25kLXNvYy1kdW1teSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gInNzdC1tZmxkLXBsYXRmb3JtIiwKKwkJLm5vbmF0b21pYyA9IHRydWUsCisJCS5keW5hbWljID0gMSwKKwkJLmRwY21fcGxheWJhY2sgPSAxLAorCQkub3BzID0gJmNodF9haWYxX29wcywKKwl9LAogCVtNRVJSX0RQQ01fQ09NUFJdID0gewogCQkubmFtZSA9ICJDb21wcmVzc2VkIFBvcnQiLAogCQkuc3RyZWFtX25hbWUgPSAiQ29tcHJlc3MiLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL2JvYXJkcy9za2xfbmF1ODhsMjVfbWF4OTgzNTdhLmMgYi9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL3NrbF9uYXU4OGwyNV9tYXg5ODM1N2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjdkYTljCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2ludGVsL2JvYXJkcy9za2xfbmF1ODhsMjVfbWF4OTgzNTdhLmMKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBJbnRlbCBTa3lsYWtlIEkyUyBNYWNoaW5lIERyaXZlciB3aXRoIE1BWElNOTgzNTdBCisgKiBhbmQgTkFVODhMMjUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSAiLi4vLi4vY29kZWNzL25hdTg4MjUuaCIKKworI2RlZmluZSBTS0xfTlVWT1RPTl9DT0RFQ19EQUkJIm5hdTg4MjUtaGlmaSIKKyNkZWZpbmUgU0tMX01BWElNX0NPREVDX0RBSSAiSGlGaSIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sgc2t5bGFrZV9oZWFkc2V0Oworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc2t5bGFrZV9hdWRpb19jYXJkOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbmRfc29jX2RhaSAqc2tsX2dldF9jb2RlY19kYWkoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgeworCisJCWlmICghc3RybmNtcChydGQtPmNvZGVjX2RhaS0+bmFtZSwgU0tMX05VVk9UT05fQ09ERUNfREFJLAorCQkJICAgICBzdHJsZW4oU0tMX05VVk9UT05fQ09ERUNfREFJKSkpCisJCQlyZXR1cm4gcnRkLT5jb2RlY19kYWk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGxhdGZvcm1fY2xvY2tfY29udHJvbChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgIGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHctPmRhcG07CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CisJaW50IHJldDsKKworCWNvZGVjX2RhaSA9IHNrbF9nZXRfY29kZWNfZGFpKGNhcmQpOworCWlmICghY29kZWNfZGFpKSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiQ29kZWMgZGFpIG5vdCBmb3VuZDsgVW5hYmxlIHRvIHNldCBwbGF0Zm9ybSBjbG9ja1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7CisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLAorCQkJCU5BVTg4MjVfQ0xLX01DTEssIDI0MDAwMDAwLCBTTkRfU09DX0NMT0NLX0lOKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY2FyZC0+ZGV2LCAic2V0IHN5c2NsayBlcnIgPSAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksCisJCQkJTkFVODgyNV9DTEtfSU5URVJOQUwsIDAsIFNORF9TT0NfQ0xPQ0tfSU4pOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjYXJkLT5kZXYsICJzZXQgc3lzY2xrIGVyciA9ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2t5bGFrZV9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRwaG9uZSBKYWNrIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiSGVhZHNldCBNaWMiKSwKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJTcGsiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBza3lsYWtlX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGsiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJTb0MgRE1JQyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TSU5LKCJXb1YgU2luayIpLAorCVNORF9TT0NfREFQTV9TUEsoIkRQIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiSERNSSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIlBsYXRmb3JtIENsb2NrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJcGxhdGZvcm1fY2xvY2tfY29udHJvbCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHNreWxha2VfbWFwW10gPSB7CisJLyogSFAgamFjayBjb25uZWN0b3JzIC0gdW5rbm93biBpZiB3ZSBoYXZlIGphY2sgZGV0ZWN0aW9uICovCisJeyAiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBPTCIgfSwKKwl7ICJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9SIiB9LAorCisJLyogc3BlYWtlciAqLworCXsgIlNwayIsIE5VTEwsICJTcGVha2VyIiB9LAorCisJLyogb3RoZXIgamFja3MgKi8KKwl7ICJNSUMiLCBOVUxMLCAiSGVhZHNldCBNaWMiIH0sCisJeyAiRE1pYyIsIE5VTEwsICJTb0MgRE1JQyIgfSwKKworCXsiV29WIFNpbmsiLCBOVUxMLCAiaHdkX2luIHNpbmsifSwKKwl7IkhETUkiLCBOVUxMLCAiaGlmNSBPdXRwdXQifSwKKwl7IkRQIiwgTlVMTCwgImhpZjYgT3V0cHV0In0sCisKKwkvKiBDT0RFQyBCRSBjb25uZWN0aW9ucyAqLworCXsgIkhpRmkgUGxheWJhY2siLCBOVUxMLCAic3NwMCBUeCIgfSwKKwl7ICJzc3AwIFR4IiwgTlVMTCwgImNvZGVjMF9vdXQiIH0sCisKKwl7ICJQbGF5YmFjayIsIE5VTEwsICJzc3AxIFR4IiB9LAorCXsgInNzcDEgVHgiLCBOVUxMLCAiY29kZWMxX291dCIgfSwKKworCXsgImNvZGVjMF9pbiIsIE5VTEwsICJzc3AxIFJ4IiB9LAorCXsgInNzcDEgUngiLCBOVUxMLCAiQ2FwdHVyZSIgfSwKKworCS8qIERNSUMgKi8KKwl7ICJkbWljMDFfaGlmaSIsIE5VTEwsICJETUlDMDEgUngiIH0sCisJeyAiRE1JQzAxIFJ4IiwgTlVMTCwgIkRNSUMgQUlGIiB9LAorCXsgImhpZmkxIiwgTlVMTCwgImlEaXNwIFR4In0sCisJeyAiaURpc3AgVHgiLCBOVUxMLCAiaURpc3Bfb3V0In0sCisJeyAiSGVhZHBob25lIEphY2siLCBOVUxMLCAiUGxhdGZvcm0gQ2xvY2siIH0sCisJeyAiSGVhZHNldCBNaWMiLCBOVUxMLCAiUGxhdGZvcm0gQ2xvY2siIH0sCit9OworCitzdGF0aWMgaW50IHNreWxha2Vfc3NwX2ZpeHVwKHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqcmF0ZSA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywKKwkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKKwlzdHJ1Y3Qgc25kX2ludGVydmFsICpjaGFubmVscyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywKKwkJCVNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisJc3RydWN0IHNuZF9tYXNrICpmbXQgPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CisKKwkvKiBUaGUgQURTUCB3aWxsIGNvdmVydCB0aGUgRkUgcmF0ZSB0byA0OGssIHN0ZXJlbyAqLworCXJhdGUtPm1pbiA9IHJhdGUtPm1heCA9IDQ4MDAwOworCWNoYW5uZWxzLT5taW4gPSBjaGFubmVscy0+bWF4ID0gMjsKKworCS8qIHNldCBTU1AwIHRvIDI0IGJpdCAqLworCXNuZF9tYXNrX25vbmUoZm10KTsKKwlzbmRfbWFza19zZXQoZm10LCBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza3lsYWtlX25hdTg4MjVfY29kZWNfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKKworCS8qCisJICogSGVhZHNldCBidXR0b25zIG1hcCB0byB0aGUgZ29vZ2xlIFJlZmVyZW5jZSBoZWFkc2V0LgorCSAqIFRoZXNlIGNhbiBiZSBjb25maWd1cmVkIGJ5IHVzZXJzcGFjZS4KKwkgKi8KKwlyZXQgPSBzbmRfc29jX2NhcmRfamFja19uZXcoJnNreWxha2VfYXVkaW9fY2FyZCwgIkhlYWRzZXQgSmFjayIsCisJCQlTTkRfSkFDS19IRUFEU0VUIHwgU05EX0pBQ0tfQlROXzAgfCBTTkRfSkFDS19CVE5fMSB8CisJCQlTTkRfSkFDS19CVE5fMiB8IFNORF9KQUNLX0JUTl8zLCAmc2t5bGFrZV9oZWFkc2V0LAorCQkJTlVMTCwgMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHJ0ZC0+ZGV2LCAiSGVhZHNldCBKYWNrIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwluYXU4ODI1X2VuYWJsZV9qYWNrX2RldGVjdChjb2RlYywgJnNreWxha2VfaGVhZHNldCk7CisKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoJnJ0ZC0+Y2FyZC0+ZGFwbSwgIlNvQyBETUlDIik7CisJc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKCZydGQtPmNhcmQtPmRhcG0sICJXb1YgU2luayIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBza3lsYWtlX25hdTg4MjVfZmVfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbTsKKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IHJ0ZC0+Y3B1X2RhaS0+Y29tcG9uZW50OworCisJZGFwbSA9IHNuZF9zb2NfY29tcG9uZW50X2dldF9kYXBtKGNvbXBvbmVudCk7CisJc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGRhcG0sICJSZWZlcmVuY2UgQ2FwdHVyZSIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9IHsKKwk0ODAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgY29uc3RyYWludHNfcmF0ZXMgPSB7CisJLmNvdW50ID0gQVJSQVlfU0laRShyYXRlcyksCisJLmxpc3QgID0gcmF0ZXMsCisJLm1hc2sgPSAwLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjaGFubmVsc1tdID0geworCTIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGNvbnN0cmFpbnRzX2NoYW5uZWxzID0geworCS5jb3VudCA9IEFSUkFZX1NJWkUoY2hhbm5lbHMpLAorCS5saXN0ID0gY2hhbm5lbHMsCisJLm1hc2sgPSAwLAorfTsKKworc3RhdGljIGludCBza2xfZmVfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJLyoKKwkgKiBPbiB0aGlzIHBsYXRmb3JtIGZvciBQQ00gZGV2aWNlIHdlIHN1cHBvcnQsCisJICogNDhLaHoKKwkgKiBzdGVyZW8KKwkgKiAxNiBiaXQgYXVkaW8KKwkgKi8KKworCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IDI7CisJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorCQkJCQkgICAmY29uc3RyYWludHNfY2hhbm5lbHMpOworCisJcnVudGltZS0+aHcuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFOworCXNuZF9wY21faHdfY29uc3RyYWludF9tc2JpdHMocnVudGltZSwgMCwgMTYsIDE2KTsKKworCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZjb25zdHJhaW50c19yYXRlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX29wcyBza3lsYWtlX25hdTg4MjVfZmVfb3BzID0geworCS5zdGFydHVwID0gc2tsX2ZlX3N0YXJ0dXAsCit9OworCitzdGF0aWMgaW50IHNreWxha2VfbmF1ODgyNV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLAorCQkJTkFVODgyNV9DTEtfTUNMSywgMjQwMDAwMDAsIFNORF9TT0NfQ0xPQ0tfSU4pOworCisJaWYgKHJldCA8IDApCisJCWRldl9lcnIocnRkLT5kZXYsICJzbmRfc29jX2RhaV9zZXRfc3lzY2xrIGVyciA9ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBza3lsYWtlX25hdTg4MjVfb3BzID0geworCS5od19wYXJhbXMgPSBza3lsYWtlX25hdTg4MjVfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIGludCBza3lsYWtlX2RtaWNfZml4dXAoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqY2hhbm5lbHMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsKKworCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSA9PSAyKQorCQljaGFubmVscy0+bWluID0gY2hhbm5lbHMtPm1heCA9IDI7CisJZWxzZQorCQljaGFubmVscy0+bWluID0gY2hhbm5lbHMtPm1heCA9IDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjaGFubmVsc19kbWljW10gPSB7CisJMiwgNCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgY29uc3RyYWludHNfZG1pY19jaGFubmVscyA9IHsKKwkuY291bnQgPSBBUlJBWV9TSVpFKGNoYW5uZWxzX2RtaWMpLAorCS5saXN0ID0gY2hhbm5lbHNfZG1pYywKKwkubWFzayA9IDAsCit9OworCitzdGF0aWMgaW50IHNreWxha2VfZG1pY19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSA0OworCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKwkJCSZjb25zdHJhaW50c19kbWljX2NoYW5uZWxzKTsKKworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgJmNvbnN0cmFpbnRzX3JhdGVzKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBza3lsYWtlX2RtaWNfb3BzID0geworCS5zdGFydHVwID0gc2t5bGFrZV9kbWljX3N0YXJ0dXAsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzXzE2MDAwW10gPSB7CisJMTYwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGNvbnN0cmFpbnRzXzE2MDAwID0geworCS5jb3VudCA9IEFSUkFZX1NJWkUocmF0ZXNfMTYwMDApLAorCS5saXN0ICA9IHJhdGVzXzE2MDAwLAorfTsKKworc3RhdGljIGludCBza3lsYWtlX3JlZmNhcF9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkJJmNvbnN0cmFpbnRzXzE2MDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBza3lsYXllX3JlZmNhcF9vcHMgPSB7CisJLnN0YXJ0dXAgPSBza3lsYWtlX3JlZmNhcF9zdGFydHVwLAorfTsKKworLyogc2t5bGFrZSBkaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBnbHVlIC0gY29ubmVjdHMgY29kZWMgPC0tPiBDUFUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBza3lsYWtlX2RhaXNbXSA9IHsKKwkvKiBGcm9udCBFbmQgREFJIGxpbmtzICovCisJeworCQkubmFtZSA9ICJTa2wgQXVkaW8gUG9ydCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBdWRpbyIsCisJCS5jcHVfZGFpX25hbWUgPSAiU3lzdGVtIFBpbiIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5keW5hbWljID0gMSwKKwkJLmNvZGVjX25hbWUgPSAic25kLXNvYy1kdW1teSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJzbmQtc29jLWR1bW15LWRhaSIsCisJCS5ub25hdG9taWMgPSAxLAorCQkuaW5pdCA9IHNreWxha2VfbmF1ODgyNV9mZV9pbml0LAorCQkudHJpZ2dlciA9IHsKKwkJCVNORF9TT0NfRFBDTV9UUklHR0VSX1BPU1QsIFNORF9TT0NfRFBDTV9UUklHR0VSX1BPU1R9LAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJCS5vcHMgPSAmc2t5bGFrZV9uYXU4ODI1X2ZlX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiU2tsIEF1ZGlvIENhcHR1cmUgUG9ydCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBdWRpbyBSZWNvcmQiLAorCQkuY3B1X2RhaV9uYW1lID0gIlN5c3RlbSBQaW4iLAorCQkucGxhdGZvcm1fbmFtZSA9ICIwMDAwOjAwOjFmLjMiLAorCQkuZHluYW1pYyA9IDEsCisJCS5jb2RlY19uYW1lID0gInNuZC1zb2MtZHVtbXkiLAorCQkuY29kZWNfZGFpX25hbWUgPSAic25kLXNvYy1kdW1teS1kYWkiLAorCQkubm9uYXRvbWljID0gMSwKKwkJLnRyaWdnZXIgPSB7CisJCQlTTkRfU09DX0RQQ01fVFJJR0dFUl9QT1NULCBTTkRfU09DX0RQQ01fVFJJR0dFUl9QT1NUfSwKKwkJLmRwY21fY2FwdHVyZSA9IDEsCisJCS5vcHMgPSAmc2t5bGFrZV9uYXU4ODI1X2ZlX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiU2tsIEF1ZGlvIFJlZmVyZW5jZSBjYXAiLAorCQkuc3RyZWFtX25hbWUgPSAiV2FrZSBvbiBWb2ljZSIsCisJCS5jcHVfZGFpX25hbWUgPSAiUmVmZXJlbmNlIFBpbiIsCisJCS5jb2RlY19uYW1lID0gInNuZC1zb2MtZHVtbXkiLAorCQkuY29kZWNfZGFpX25hbWUgPSAic25kLXNvYy1kdW1teS1kYWkiLAorCQkucGxhdGZvcm1fbmFtZSA9ICIwMDAwOjAwOjFmLjMiLAorCQkuaW5pdCA9IE5VTEwsCisJCS5kcGNtX2NhcHR1cmUgPSAxLAorCQkuaWdub3JlX3N1c3BlbmQgPSAxLAorCQkubm9uYXRvbWljID0gMSwKKwkJLmR5bmFtaWMgPSAxLAorCQkub3BzID0gJnNreWxheWVfcmVmY2FwX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiU2tsIEF1ZGlvIERNSUMgY2FwIiwKKwkJLnN0cmVhbV9uYW1lID0gImRtaWNjYXAiLAorCQkuY3B1X2RhaV9uYW1lID0gIkRNSUMgUGluIiwKKwkJLmNvZGVjX25hbWUgPSAic25kLXNvYy1kdW1teSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJzbmQtc29jLWR1bW15LWRhaSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5pbml0ID0gTlVMTCwKKwkJLmRwY21fY2FwdHVyZSA9IDEsCisJCS5ub25hdG9taWMgPSAxLAorCQkuZHluYW1pYyA9IDEsCisJCS5vcHMgPSAmc2t5bGFrZV9kbWljX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiU2tsIEhETUkgUG9ydCIsCisJCS5zdHJlYW1fbmFtZSA9ICJIZG1pIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJIRE1JIFBpbiIsCisJCS5jb2RlY19uYW1lID0gInNuZC1zb2MtZHVtbXkiLAorCQkuY29kZWNfZGFpX25hbWUgPSAic25kLXNvYy1kdW1teS1kYWkiLAorCQkucGxhdGZvcm1fbmFtZSA9ICIwMDAwOjAwOjFmLjMiLAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJCS5pbml0ID0gTlVMTCwKKwkJLm5vbmF0b21pYyA9IDEsCisJCS5keW5hbWljID0gMSwKKwl9LAorCisJLyogQmFjayBFbmQgREFJIGxpbmtzICovCisJeworCQkvKiBTU1AwIC0gQ29kZWMgKi8KKwkJLm5hbWUgPSAiU1NQMC1Db2RlYyIsCisJCS5iZV9pZCA9IDAsCisJCS5jcHVfZGFpX25hbWUgPSAiU1NQMCBQaW4iLAorCQkucGxhdGZvcm1fbmFtZSA9ICIwMDAwOjAwOjFmLjMiLAorCQkubm9fcGNtID0gMSwKKwkJLmNvZGVjX25hbWUgPSAiTVg5ODM1N0E6MDAiLAorCQkuY29kZWNfZGFpX25hbWUgPSBTS0xfTUFYSU1fQ09ERUNfREFJLAorCQkuZGFpX2ZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8CisJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTLAorCQkuaWdub3JlX3BtZG93bl90aW1lID0gMSwKKwkJLmJlX2h3X3BhcmFtc19maXh1cCA9IHNreWxha2Vfc3NwX2ZpeHVwLAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJfSwKKwl7CisJCS8qIFNTUDEgLSBDb2RlYyAqLworCQkubmFtZSA9ICJTU1AxLUNvZGVjIiwKKwkJLmJlX2lkID0gMCwKKwkJLmNwdV9kYWlfbmFtZSA9ICJTU1AxIFBpbiIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5ub19wY20gPSAxLAorCQkuY29kZWNfbmFtZSA9ICJpMmMtMTA1MDg4MjU6MDAiLAorCQkuY29kZWNfZGFpX25hbWUgPSBTS0xfTlVWT1RPTl9DT0RFQ19EQUksCisJCS5pbml0ID0gc2t5bGFrZV9uYXU4ODI1X2NvZGVjX2luaXQsCisJCS5kYWlfZm10ID0gU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKKwkJLmlnbm9yZV9wbWRvd25fdGltZSA9IDEsCisJCS5iZV9od19wYXJhbXNfZml4dXAgPSBza3lsYWtlX3NzcF9maXh1cCwKKwkJLm9wcyA9ICZza3lsYWtlX25hdTg4MjVfb3BzLAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJCS5kcGNtX2NhcHR1cmUgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJkbWljMDEiLAorCQkuYmVfaWQgPSAxLAorCQkuY3B1X2RhaV9uYW1lID0gIkRNSUMwMSBQaW4iLAorCQkuY29kZWNfbmFtZSA9ICJkbWljLWNvZGVjIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gImRtaWMtaGlmaSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5iZV9od19wYXJhbXNfZml4dXAgPSBza3lsYWtlX2RtaWNfZml4dXAsCisJCS5pZ25vcmVfc3VzcGVuZCA9IDEsCisJCS5kcGNtX2NhcHR1cmUgPSAxLAorCQkubm9fcGNtID0gMSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiaURpc3AiLAorCQkuYmVfaWQgPSAzLAorCQkuY3B1X2RhaV9uYW1lID0gImlEaXNwIFBpbiIsCisJCS5jb2RlY19uYW1lID0gImVoZGF1ZGlvMEQyIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gImludGVsLWhkbWktaGlmaTEiLAorCQkucGxhdGZvcm1fbmFtZSA9ICIwMDAwOjAwOjFmLjMiLAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJCS5ub19wY20gPSAxLAorCX0sCit9OworCisvKiBza3lsYWtlIGF1ZGlvIG1hY2hpbmUgZHJpdmVyIGZvciBTUFQgKyBOQVU4OEwyNSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc2t5bGFrZV9hdWRpb19jYXJkID0geworCS5uYW1lID0gInNrbG5hdTg4MjVtYXgiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kYWlfbGluayA9IHNreWxha2VfZGFpcywKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShza3lsYWtlX2RhaXMpLAorCS5jb250cm9scyA9IHNreWxha2VfY29udHJvbHMsCisJLm51bV9jb250cm9scyA9IEFSUkFZX1NJWkUoc2t5bGFrZV9jb250cm9scyksCisJLmRhcG1fd2lkZ2V0cyA9IHNreWxha2Vfd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUoc2t5bGFrZV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSBza3lsYWtlX21hcCwKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShza3lsYWtlX21hcCksCisJLmZ1bGx5X3JvdXRlZCA9IHRydWUsCit9OworCitzdGF0aWMgaW50IHNreWxha2VfYXVkaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlza3lsYWtlX2F1ZGlvX2NhcmQuZGV2ID0gJnBkZXYtPmRldjsKKworCXJldHVybiBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY2FyZCgmcGRldi0+ZGV2LCAmc2t5bGFrZV9hdWRpb19jYXJkKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2t5bGFrZV9hdWRpbyA9IHsKKwkucHJvYmUgPSBza3lsYWtlX2F1ZGlvX3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInNrbF9uYXU4OGwyNV9tYXg5ODM1N2FfaTJzIiwKKwkJLnBtID0gJnNuZF9zb2NfcG1fb3BzLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHNreWxha2VfYXVkaW8pCisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdWRpbyBNYWNoaW5lIGRyaXZlci1OQVU4OEwyNSAmIE1BWDk4MzU3QSBpbiBJMlMgbW9kZSIpOworTU9EVUxFX0FVVEhPUigiUm9oaXQgQWluYXB1cmUgPHJvaGl0Lm0uYWluYXB1cmVAaW50ZWwuY29tIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNrbF9uYXU4OGwyNV9tYXg5ODM1N2FfaTJzIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL3NrbF9uYXU4OGwyNV9zc200NTY3LmMgYi9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL3NrbF9uYXU4OGwyNV9zc200NTY3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA3MTgxMgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9ib2FyZHMvc2tsX25hdTg4bDI1X3NzbTQ1NjcuYwpAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIEludGVsIFNreWxha2UgSTJTIE1hY2hpbmUgRHJpdmVyIGZvciBOQVU4OEwyNStTU000NTY3CisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBNb2RpZmllZCBmcm9tOgorICogICBJbnRlbCBTa3lsYWtlIEkyUyBNYWNoaW5lIERyaXZlciBmb3IgTkFVODhMMjUgYW5kIFNTTTQ1NjcKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlICIuLi8uLi9jb2RlY3MvbmF1ODgyNS5oIgorCisjZGVmaW5lIFNLTF9OVVZPVE9OX0NPREVDX0RBSQkibmF1ODgyNS1oaWZpIgorI2RlZmluZSBTS0xfU1NNX0NPREVDX0RBSQkic3NtNDU2Ny1oaWZpIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayBza3lsYWtlX2hlYWRzZXQ7CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBza3lsYWtlX2F1ZGlvX2NhcmQ7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNuZF9zb2NfZGFpICpza2xfZ2V0X2NvZGVjX2RhaShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZCwgJmNhcmQtPnJ0ZF9saXN0LCBsaXN0KSB7CisKKwkJaWYgKCFzdHJuY21wKHJ0ZC0+Y29kZWNfZGFpLT5uYW1lLCBTS0xfTlVWT1RPTl9DT0RFQ19EQUksCisJCQkgICAgIHN0cmxlbihTS0xfTlVWT1RPTl9DT0RFQ19EQUkpKSkKKwkJCXJldHVybiBydGQtPmNvZGVjX2RhaTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNreWxha2VfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJIZWFkcGhvbmUgSmFjayIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRzZXQgTWljIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiTGVmdCBTcGVha2VyIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiUmlnaHQgU3BlYWtlciIpLAorfTsKKworc3RhdGljIGludCBwbGF0Zm9ybV9jbG9ja19jb250cm9sKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgIGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHctPmRhcG07CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRhcG0tPmNhcmQ7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CisJaW50IHJldDsKKworCWNvZGVjX2RhaSA9IHNrbF9nZXRfY29kZWNfZGFpKGNhcmQpOworCWlmICghY29kZWNfZGFpKSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiQ29kZWMgZGFpIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7CisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLAorCQkJCU5BVTg4MjVfQ0xLX01DTEssIDI0MDAwMDAwLCBTTkRfU09DX0NMT0NLX0lOKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY2FyZC0+ZGV2LCAic2V0IHN5c2NsayBlcnIgPSAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksCisJCQkJTkFVODgyNV9DTEtfSU5URVJOQUwsIDAsIFNORF9TT0NfQ0xPQ0tfSU4pOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjYXJkLT5kZXYsICJzZXQgc3lzY2xrIGVyciA9ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHNreWxha2Vfd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIkxlZnQgU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIlJpZ2h0IFNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJTb0MgRE1JQyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TSU5LKCJXb1YgU2luayIpLAorCVNORF9TT0NfREFQTV9TUEsoIkRQIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiSERNSSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TVVBQTFkoIlBsYXRmb3JtIENsb2NrIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJcGxhdGZvcm1fY2xvY2tfY29udHJvbCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHNreWxha2VfbWFwW10gPSB7CisJLyogSFAgamFjayBjb25uZWN0b3JzIC0gdW5rbm93biBpZiB3ZSBoYXZlIGphY2sgZGV0ZWN0aW9uICovCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9MIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9SIn0sCisKKwkvKiBzcGVha2VyICovCisJeyJMZWZ0IFNwZWFrZXIiLCBOVUxMLCAiTGVmdCBPVVQifSwKKwl7IlJpZ2h0IFNwZWFrZXIiLCBOVUxMLCAiUmlnaHQgT1VUIn0sCisKKwkvKiBvdGhlciBqYWNrcyAqLworCXsiTUlDIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCisJeyJETWljIiwgTlVMTCwgIlNvQyBETUlDIn0sCisKKwl7IldvViBTaW5rIiwgTlVMTCwgImh3ZF9pbiBzaW5rIn0sCisKKwl7IkhETUkiLCBOVUxMLCAiaGlmNSBPdXRwdXQifSwKKwl7IkRQIiwgTlVMTCwgImhpZjYgT3V0cHV0In0sCisJLyogQ09ERUMgQkUgY29ubmVjdGlvbnMgKi8KKwl7ICJMZWZ0IFBsYXliYWNrIiwgTlVMTCwgInNzcDAgVHgifSwKKwl7ICJSaWdodCBQbGF5YmFjayIsIE5VTEwsICJzc3AwIFR4In0sCisJeyAic3NwMCBUeCIsIE5VTEwsICJjb2RlYzBfb3V0In0sCisKKwl7ICJQbGF5YmFjayIsIE5VTEwsICJzc3AxIFR4In0sCisJeyAic3NwMSBUeCIsIE5VTEwsICJjb2RlYzFfb3V0In0sCisKKwl7ICJjb2RlYzBfaW4iLCBOVUxMLCAic3NwMSBSeCIgfSwKKwl7ICJzc3AxIFJ4IiwgTlVMTCwgIkNhcHR1cmUiIH0sCisKKwkvKiBETUlDICovCisJeyAiZG1pYzAxX2hpZmkiLCBOVUxMLCAiRE1JQzAxIFJ4IiB9LAorCXsgIkRNSUMwMSBSeCIsIE5VTEwsICJETUlDIEFJRiIgfSwKKwl7ICJoaWZpMSIsIE5VTEwsICJpRGlzcCBUeCJ9LAorCXsgImlEaXNwIFR4IiwgTlVMTCwgImlEaXNwX291dCJ9LAorCXsgIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIlBsYXRmb3JtIENsb2NrIiB9LAorCXsgIkhlYWRzZXQgTWljIiwgTlVMTCwgIlBsYXRmb3JtIENsb2NrIiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2NvbmYgc3NtNDU2N19jb2RlY19jb25mW10gPSB7CisJeworCQkuZGV2X25hbWUgPSAiaTJjLUlOVDM0M0I6MDAiLAorCQkubmFtZV9wcmVmaXggPSAiTGVmdCIsCisJfSwKKwl7CisJCS5kZXZfbmFtZSA9ICJpMmMtSU5UMzQzQjowMSIsCisJCS5uYW1lX3ByZWZpeCA9ICJSaWdodCIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGlua19jb21wb25lbnQgc3NtNDU2N19jb2RlY19jb21wb25lbnRzW10gPSB7CisJeyAvKiBMZWZ0ICovCisJCS5uYW1lID0gImkyYy1JTlQzNDNCOjAwIiwKKwkJLmRhaV9uYW1lID0gU0tMX1NTTV9DT0RFQ19EQUksCisJfSwKKwl7IC8qIFJpZ2h0ICovCisJCS5uYW1lID0gImkyYy1JTlQzNDNCOjAxIiwKKwkJLmRhaV9uYW1lID0gU0tMX1NTTV9DT0RFQ19EQUksCisJfSwKK307CisKK3N0YXRpYyBpbnQgc2t5bGFrZV9zc200NTY3X2NvZGVjX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKK3sKKwlpbnQgcmV0OworCisJLyogU2xvdCAxIGZvciBsZWZ0ICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3RkbV9zbG90KHJ0ZC0+Y29kZWNfZGFpc1swXSwgMHgwMSwgMHgwMSwgMiwgNDgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU2xvdCAyIGZvciByaWdodCAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChydGQtPmNvZGVjX2RhaXNbMV0sIDB4MDIsIDB4MDIsIDIsIDQ4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2t5bGFrZV9uYXU4ODI1X2NvZGVjX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7CisKKwkvKgorCSAqIDQgYnV0dG9ucyBoZXJlIG1hcCB0byB0aGUgZ29vZ2xlIFJlZmVyZW5jZSBoZWFkc2V0CisJICogVGhlIHVzZSBvZiB0aGVzZSBidXR0b25zIGNhbiBiZSBkZWNpZGVkIGJ5IHRoZSB1c2VyIHNwYWNlLgorCSAqLworCXJldCA9IHNuZF9zb2NfY2FyZF9qYWNrX25ldygmc2t5bGFrZV9hdWRpb19jYXJkLCAiSGVhZHNldCBKYWNrIiwKKwkJU05EX0pBQ0tfSEVBRFNFVCB8IFNORF9KQUNLX0JUTl8wIHwgU05EX0pBQ0tfQlROXzEgfAorCQlTTkRfSkFDS19CVE5fMiB8IFNORF9KQUNLX0JUTl8zLCAmc2t5bGFrZV9oZWFkc2V0LAorCQlOVUxMLCAwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocnRkLT5kZXYsICJIZWFkc2V0IEphY2sgY3JlYXRpb24gZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW5hdTg4MjVfZW5hYmxlX2phY2tfZGV0ZWN0KGNvZGVjLCAmc2t5bGFrZV9oZWFkc2V0KTsKKworCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZCgmcnRkLT5jYXJkLT5kYXBtLCAiU29DIERNSUMiKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoJnJ0ZC0+Y2FyZC0+ZGFwbSwgIldvViBTaW5rIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNreWxha2VfbmF1ODgyNV9mZV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtOworCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50ID0gcnRkLT5jcHVfZGFpLT5jb21wb25lbnQ7CisKKwlkYXBtID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RhcG0oY29tcG9uZW50KTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIlJlZmVyZW5jZSBDYXB0dXJlIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCByYXRlc1tdID0geworCTQ4MDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBjb25zdHJhaW50c19yYXRlcyA9IHsKKwkuY291bnQgPSBBUlJBWV9TSVpFKHJhdGVzKSwKKwkubGlzdCAgPSByYXRlcywKKwkubWFzayA9IDAsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGNoYW5uZWxzW10gPSB7CisJMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgY29uc3RyYWludHNfY2hhbm5lbHMgPSB7CisJLmNvdW50ID0gQVJSQVlfU0laRShjaGFubmVscyksCisJLmxpc3QgPSBjaGFubmVscywKKwkubWFzayA9IDAsCit9OworCitzdGF0aWMgaW50IHNrbF9mZV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwkvKgorCSAqIG9uIHRoaXMgcGxhdGZvcm0gZm9yIFBDTSBkZXZpY2Ugd2Ugc3VwcG9ydCwKKwkgKgk0OEtoegorCSAqCXN0ZXJlbworCSAqCTE2IGJpdCBhdWRpbworCSAqLworCisJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gMjsKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisJCQkJCSAgICZjb25zdHJhaW50c19jaGFubmVscyk7CisKKwlydW50aW1lLT5ody5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEU7CisJc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhydW50aW1lLCAwLCAxNiwgMTYpOworCisJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwKKwkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgJmNvbnN0cmFpbnRzX3JhdGVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2Nfb3BzIHNreWxha2VfbmF1ODgyNV9mZV9vcHMgPSB7CisJLnN0YXJ0dXAgPSBza2xfZmVfc3RhcnR1cCwKK307CisKK3N0YXRpYyBpbnQgc2t5bGFrZV9zc3BfZml4dXAoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCwKKwkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKnJhdGUgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSk7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqY2hhbm5lbHMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCXN0cnVjdCBzbmRfbWFzayAqZm10ID0gaHdfcGFyYW1fbWFzayhwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpOworCisJLyogVGhlIEFEU1Agd2lsbCBjb3ZlcnQgdGhlIEZFIHJhdGUgdG8gNDhrLCBzdGVyZW8gKi8KKwlyYXRlLT5taW4gPSByYXRlLT5tYXggPSA0ODAwMDsKKwljaGFubmVscy0+bWluID0gY2hhbm5lbHMtPm1heCA9IDI7CisKKwkvKiBzZXQgU1NQMCB0byAyNCBiaXQgKi8KKwlzbmRfbWFza19ub25lKGZtdCk7CisJc25kX21hc2tfc2V0KGZtdCwgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNreWxha2VfZG1pY19maXh1cChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkLAorCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqY2hhbm5lbHMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSA9PSAyKQorCQljaGFubmVscy0+bWluID0gY2hhbm5lbHMtPm1heCA9IDI7CisJZWxzZQorCQljaGFubmVscy0+bWluID0gY2hhbm5lbHMtPm1heCA9IDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza3lsYWtlX25hdTg4MjVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwKKwkJCU5BVTg4MjVfQ0xLX01DTEssIDI0MDAwMDAwLCBTTkRfU09DX0NMT0NLX0lOKTsKKworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKHJ0ZC0+ZGV2LCAic25kX3NvY19kYWlfc2V0X3N5c2NsayBlcnIgPSAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgc2t5bGFrZV9uYXU4ODI1X29wcyA9IHsKKwkuaHdfcGFyYW1zID0gc2t5bGFrZV9uYXU4ODI1X2h3X3BhcmFtcywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2hhbm5lbHNfZG1pY1tdID0geworCTIsIDQsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGNvbnN0cmFpbnRzX2RtaWNfY2hhbm5lbHMgPSB7CisJLmNvdW50ID0gQVJSQVlfU0laRShjaGFubmVsc19kbWljKSwKKwkubGlzdCA9IGNoYW5uZWxzX2RtaWMsCisJLm1hc2sgPSAwLAorfTsKKworc3RhdGljIGludCBza3lsYWtlX2RtaWNfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gNDsKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisJCQkmY29uc3RyYWludHNfZG1pY19jaGFubmVscyk7CisKKwlyZXR1cm4gc25kX3BjbV9od19jb25zdHJhaW50X2xpc3Qoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZjb25zdHJhaW50c19yYXRlcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgc2t5bGFrZV9kbWljX29wcyA9IHsKKwkuc3RhcnR1cCA9IHNreWxha2VfZG1pY19zdGFydHVwLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCByYXRlc18xNjAwMFtdID0geworCTE2MDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBjb25zdHJhaW50c18xNjAwMCA9IHsKKwkuY291bnQgPSBBUlJBWV9TSVpFKHJhdGVzXzE2MDAwKSwKKwkubGlzdCAgPSByYXRlc18xNjAwMCwKK307CisKK3N0YXRpYyBpbnQgc2t5bGFrZV9yZWZjYXBfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gc25kX3BjbV9od19jb25zdHJhaW50X2xpc3Qoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkmY29uc3RyYWludHNfMTYwMDApOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHNreWxheWVfcmVmY2FwX29wcyA9IHsKKwkuc3RhcnR1cCA9IHNreWxha2VfcmVmY2FwX3N0YXJ0dXAsCit9OworCisvKiBza3lsYWtlIGRpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlIGdsdWUgLSBjb25uZWN0cyBjb2RlYyA8LS0+IENQVSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNreWxha2VfZGFpc1tdID0geworCS8qIEZyb250IEVuZCBEQUkgbGlua3MgKi8KKwl7CisJCS5uYW1lID0gIlNrbCBBdWRpbyBQb3J0IiwKKwkJLnN0cmVhbV9uYW1lID0gIkF1ZGlvIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJTeXN0ZW0gUGluIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAiMDAwMDowMDoxZi4zIiwKKwkJLmR5bmFtaWMgPSAxLAorCQkuY29kZWNfbmFtZSA9ICJzbmQtc29jLWR1bW15IiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gInNuZC1zb2MtZHVtbXktZGFpIiwKKwkJLm5vbmF0b21pYyA9IDEsCisJCS5pbml0ID0gc2t5bGFrZV9uYXU4ODI1X2ZlX2luaXQsCisJCS50cmlnZ2VyID0geworCQkJU05EX1NPQ19EUENNX1RSSUdHRVJfUE9TVCwgU05EX1NPQ19EUENNX1RSSUdHRVJfUE9TVH0sCisJCS5kcGNtX3BsYXliYWNrID0gMSwKKwkJLm9wcyA9ICZza3lsYWtlX25hdTg4MjVfZmVfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJTa2wgQXVkaW8gQ2FwdHVyZSBQb3J0IiwKKwkJLnN0cmVhbV9uYW1lID0gIkF1ZGlvIFJlY29yZCIsCisJCS5jcHVfZGFpX25hbWUgPSAiU3lzdGVtIFBpbiIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5keW5hbWljID0gMSwKKwkJLmNvZGVjX25hbWUgPSAic25kLXNvYy1kdW1teSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJzbmQtc29jLWR1bW15LWRhaSIsCisJCS5ub25hdG9taWMgPSAxLAorCQkudHJpZ2dlciA9IHsKKwkJCVNORF9TT0NfRFBDTV9UUklHR0VSX1BPU1QsIFNORF9TT0NfRFBDTV9UUklHR0VSX1BPU1R9LAorCQkuZHBjbV9jYXB0dXJlID0gMSwKKwkJLm9wcyA9ICZza3lsYWtlX25hdTg4MjVfZmVfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJTa2wgQXVkaW8gUmVmZXJlbmNlIGNhcCIsCisJCS5zdHJlYW1fbmFtZSA9ICJXYWtlIG9uIFZvaWNlIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJSZWZlcmVuY2UgUGluIiwKKwkJLmNvZGVjX25hbWUgPSAic25kLXNvYy1kdW1teSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJzbmQtc29jLWR1bW15LWRhaSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5pbml0ID0gTlVMTCwKKwkJLmRwY21fY2FwdHVyZSA9IDEsCisJCS5pZ25vcmVfc3VzcGVuZCA9IDEsCisJCS5ub25hdG9taWMgPSAxLAorCQkuZHluYW1pYyA9IDEsCisJCS5vcHMgPSAmc2t5bGF5ZV9yZWZjYXBfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJTa2wgQXVkaW8gRE1JQyBjYXAiLAorCQkuc3RyZWFtX25hbWUgPSAiZG1pY2NhcCIsCisJCS5jcHVfZGFpX25hbWUgPSAiRE1JQyBQaW4iLAorCQkuY29kZWNfbmFtZSA9ICJzbmQtc29jLWR1bW15IiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gInNuZC1zb2MtZHVtbXktZGFpIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAiMDAwMDowMDoxZi4zIiwKKwkJLmluaXQgPSBOVUxMLAorCQkuZHBjbV9jYXB0dXJlID0gMSwKKwkJLm5vbmF0b21pYyA9IDEsCisJCS5keW5hbWljID0gMSwKKwkJLm9wcyA9ICZza3lsYWtlX2RtaWNfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJTa2wgSERNSSBQb3J0IiwKKwkJLnN0cmVhbV9uYW1lID0gIkhkbWkiLAorCQkuY3B1X2RhaV9uYW1lID0gIkhETUkgUGluIiwKKwkJLmNvZGVjX25hbWUgPSAic25kLXNvYy1kdW1teSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJzbmQtc29jLWR1bW15LWRhaSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5kcGNtX3BsYXliYWNrID0gMSwKKwkJLmluaXQgPSBOVUxMLAorCQkubm9uYXRvbWljID0gMSwKKwkJLmR5bmFtaWMgPSAxLAorCX0sCisKKwkvKiBCYWNrIEVuZCBEQUkgbGlua3MgKi8KKwl7CisJCS8qIFNTUDAgLSBDb2RlYyAqLworCQkubmFtZSA9ICJTU1AwLUNvZGVjIiwKKwkJLmJlX2lkID0gMCwKKwkJLmNwdV9kYWlfbmFtZSA9ICJTU1AwIFBpbiIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5ub19wY20gPSAxLAorCQkuY29kZWNzID0gc3NtNDU2N19jb2RlY19jb21wb25lbnRzLAorCQkubnVtX2NvZGVjcyA9IEFSUkFZX1NJWkUoc3NtNDU2N19jb2RlY19jb21wb25lbnRzKSwKKwkJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9EU1BfQSB8CisJCQlTTkRfU09DX0RBSUZNVF9JQl9ORiB8CisJCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTLAorCQkuaW5pdCA9IHNreWxha2Vfc3NtNDU2N19jb2RlY19pbml0LAorCQkuaWdub3JlX3BtZG93bl90aW1lID0gMSwKKwkJLmJlX2h3X3BhcmFtc19maXh1cCA9IHNreWxha2Vfc3NwX2ZpeHVwLAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJfSwKKwl7CisJCS8qIFNTUDEgLSBDb2RlYyAqLworCQkubmFtZSA9ICJTU1AxLUNvZGVjIiwKKwkJLmJlX2lkID0gMCwKKwkJLmNwdV9kYWlfbmFtZSA9ICJTU1AxIFBpbiIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5ub19wY20gPSAxLAorCQkuY29kZWNfbmFtZSA9ICJpMmMtMTA1MDg4MjU6MDAiLAorCQkuY29kZWNfZGFpX25hbWUgPSBTS0xfTlVWT1RPTl9DT0RFQ19EQUksCisJCS5pbml0ID0gc2t5bGFrZV9uYXU4ODI1X2NvZGVjX2luaXQsCisJCS5kYWlfZm10ID0gU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKKwkJLmlnbm9yZV9wbWRvd25fdGltZSA9IDEsCisJCS5iZV9od19wYXJhbXNfZml4dXAgPSBza3lsYWtlX3NzcF9maXh1cCwKKwkJLm9wcyA9ICZza3lsYWtlX25hdTg4MjVfb3BzLAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJCS5kcGNtX2NhcHR1cmUgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJkbWljMDEiLAorCQkuYmVfaWQgPSAxLAorCQkuY3B1X2RhaV9uYW1lID0gIkRNSUMwMSBQaW4iLAorCQkuY29kZWNfbmFtZSA9ICJkbWljLWNvZGVjIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gImRtaWMtaGlmaSIsCisJCS5wbGF0Zm9ybV9uYW1lID0gIjAwMDA6MDA6MWYuMyIsCisJCS5pZ25vcmVfc3VzcGVuZCA9IDEsCisJCS5iZV9od19wYXJhbXNfZml4dXAgPSBza3lsYWtlX2RtaWNfZml4dXAsCisJCS5kcGNtX2NhcHR1cmUgPSAxLAorCQkubm9fcGNtID0gMSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiaURpc3AiLAorCQkuYmVfaWQgPSAzLAorCQkuY3B1X2RhaV9uYW1lID0gImlEaXNwIFBpbiIsCisJCS5jb2RlY19uYW1lID0gImVoZGF1ZGlvMEQyIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gImludGVsLWhkbWktaGlmaTEiLAorCQkucGxhdGZvcm1fbmFtZSA9ICIwMDAwOjAwOjFmLjMiLAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJCS5ub19wY20gPSAxLAorCX0sCit9OworCisvKiBza3lsYWtlIGF1ZGlvIG1hY2hpbmUgZHJpdmVyIGZvciBTUFQgKyBOQVU4OEwyNSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc2t5bGFrZV9hdWRpb19jYXJkID0geworCS5uYW1lID0gInNrbG5hdTg4MjVhZGkiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kYWlfbGluayA9IHNreWxha2VfZGFpcywKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShza3lsYWtlX2RhaXMpLAorCS5jb250cm9scyA9IHNreWxha2VfY29udHJvbHMsCisJLm51bV9jb250cm9scyA9IEFSUkFZX1NJWkUoc2t5bGFrZV9jb250cm9scyksCisJLmRhcG1fd2lkZ2V0cyA9IHNreWxha2Vfd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUoc2t5bGFrZV93aWRnZXRzKSwKKwkuZGFwbV9yb3V0ZXMgPSBza3lsYWtlX21hcCwKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShza3lsYWtlX21hcCksCisJLmNvZGVjX2NvbmYgPSBzc200NTY3X2NvZGVjX2NvbmYsCisJLm51bV9jb25maWdzID0gQVJSQVlfU0laRShzc200NTY3X2NvZGVjX2NvbmYpLAorCS5mdWxseV9yb3V0ZWQgPSB0cnVlLAorfTsKKworc3RhdGljIGludCBza3lsYWtlX2F1ZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc2t5bGFrZV9hdWRpb19jYXJkLmRldiA9ICZwZGV2LT5kZXY7CisKKwlyZXR1cm4gZGV2bV9zbmRfc29jX3JlZ2lzdGVyX2NhcmQoJnBkZXYtPmRldiwgJnNreWxha2VfYXVkaW9fY2FyZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNreWxha2VfYXVkaW8gPSB7CisJLnByb2JlID0gc2t5bGFrZV9hdWRpb19wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJza2xfbmF1ODhsMjVfc3NtNDU2N19pMnMiLAorCQkucG0gPSAmc25kX3NvY19wbV9vcHMsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc2t5bGFrZV9hdWRpbykKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJDb25yYWQgQ29va2UgIDxjb25yYWQuY29va2VAaW50ZWwuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSGFyc2hhIFByaXlhIDxoYXJzaGFwcml5YS5uQGludGVsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIk5hdmVlbiBNIDxuYXZlZW4ubUBpbnRlbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJTYXRoeWEgUHJha2FzaCBNIFIgPHNhdGh5YS5wcmFrYXNoLm0uckBpbnRlbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJZb25nIFpoaSA8eW9uZy56aGlAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBBdWRpbyBNYWNoaW5lIGRyaXZlciBmb3IgU0tMIHdpdGggTkFVODhMMjUgYW5kIFNTTTQ1NjcgaW4gSTJTIE1vZGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c2tsX25hdTg4bDI1X3NzbTQ1NjdfaTJzIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL3NrbF9ydDI4Ni5jIGIvc291bmQvc29jL2ludGVsL2JvYXJkcy9za2xfcnQyODYuYwppbmRleCBhNzNhNDMxLi43Mzk2ZGRiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYm9hcmRzL3NrbF9ydDI4Ni5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9ib2FyZHMvc2tsX3J0Mjg2LmMKQEAgLTUyLDYgKzUyLDcgQEAKIAlTTkRfU09DX0RBUE1fTUlDKCJNaWMgSmFjayIsIE5VTEwpLAogCVNORF9TT0NfREFQTV9NSUMoIkRNSUMyIiwgTlVMTCksCiAJU05EX1NPQ19EQVBNX01JQygiU29DIERNSUMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU0lOSygiV29WIFNpbmsiKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHNreWxha2VfcnQyODZfbWFwW10gPSB7CkBAIC02Nyw3ICs2OCw5IEBACiAKIAkvKiBkaWdpdGFsIG1pY3MgKi8KIAl7IkRNSUMxIFBpbiIsIE5VTEwsICJETUlDMiJ9LAotCXsiRE1JQyBBSUYiLCBOVUxMLCAiU29DIERNSUMifSwKKwl7IkRNaWMiLCBOVUxMLCAiU29DIERNSUMifSwKKworCXsiV29WIFNpbmsiLCBOVUxMLCAiaHdkX2luIHNpbmsifSwKIAogCS8qIENPREVDIEJFIGNvbm5lY3Rpb25zICovCiAJeyAiQUlGMSBQbGF5YmFjayIsIE5VTEwsICJzc3AwIFR4In0sCkBAIC03OSwxMyArODIsMjQgQEAKIAl7ICJzc3AwIFJ4IiwgTlVMTCwgIkFJRjEgQ2FwdHVyZSIgfSwKIAogCXsgImRtaWMwMV9oaWZpIiwgTlVMTCwgIkRNSUMwMSBSeCIgfSwKLQl7ICJETUlDMDEgUngiLCBOVUxMLCAiQ2FwdHVyZSIgfSwKKwl7ICJETUlDMDEgUngiLCBOVUxMLCAiRE1JQyBBSUYiIH0sCiAKIAl7ICJoaWYxIiwgTlVMTCwgImlEaXNwIFR4In0sCiAJeyAiaURpc3AgVHgiLCBOVUxMLCAiaURpc3Bfb3V0In0sCiAKIH07CiAKK3N0YXRpYyBpbnQgc2t5bGFrZV9ydDI4Nl9mZV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtOworCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50ID0gcnRkLT5jcHVfZGFpLT5jb21wb25lbnQ7CisKKwlkYXBtID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RhcG0oY29tcG9uZW50KTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIlJlZmVyZW5jZSBDYXB0dXJlIik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBza3lsYWtlX3J0Mjg2X2NvZGVjX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwpAQCAtMTAxLDkgKzExNSw1OSBAQAogCiAJcnQyODZfbWljX2RldGVjdChjb2RlYywgJnNreWxha2VfaGVhZHNldCk7CiAKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoJnJ0ZC0+Y2FyZC0+ZGFwbSwgIlNvQyBETUlDIik7CisJc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKCZydGQtPmNhcmQtPmRhcG0sICJXb1YgU2luayIpOworCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9IHsKKwk0ODAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgY29uc3RyYWludHNfcmF0ZXMgPSB7CisJLmNvdW50ID0gQVJSQVlfU0laRShyYXRlcyksCisJLmxpc3QgID0gcmF0ZXMsCisJLm1hc2sgPSAwLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBjaGFubmVsc1tdID0geworCTIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGNvbnN0cmFpbnRzX2NoYW5uZWxzID0geworCS5jb3VudCA9IEFSUkFZX1NJWkUoY2hhbm5lbHMpLAorCS5saXN0ID0gY2hhbm5lbHMsCisJLm1hc2sgPSAwLAorfTsKKworc3RhdGljIGludCBza2xfZmVfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJLyoKKwkgKiBvbiB0aGlzIHBsYXRmb3JtIGZvciBQQ00gZGV2aWNlIHdlIHN1cHBvcnQsCisJICoJNDhLaHoKKwkgKglzdGVyZW8KKwkgKgkxNiBiaXQgYXVkaW8KKwkgKi8KKworCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IDI7CisJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorCQkJCQkgICAmY29uc3RyYWludHNfY2hhbm5lbHMpOworCisJcnVudGltZS0+aHcuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFOworCXNuZF9wY21faHdfY29uc3RyYWludF9tc2JpdHMocnVudGltZSwgMCwgMTYsIDE2KTsKKworCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsCisJCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZjb25zdHJhaW50c19yYXRlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX29wcyBza3lsYWtlX3J0Mjg2X2ZlX29wcyA9IHsKKwkuc3RhcnR1cCA9IHNrbF9mZV9zdGFydHVwLAorfTsKIAogc3RhdGljIGludCBza3lsYWtlX3NzcDBfZml4dXAoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCwKIAkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQpAQCAtMTEyLDEyICsxNzYsMTUgQEAKIAkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFKTsKIAlzdHJ1Y3Qgc25kX2ludGVydmFsICpjaGFubmVscyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywKIAkJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisJc3RydWN0IHNuZF9tYXNrICpmbXQgPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CiAKIAkvKiBUaGUgb3V0cHV0IGlzIDQ4S0h6LCBzdGVyZW8sIDE2Yml0cyAqLwogCXJhdGUtPm1pbiA9IHJhdGUtPm1heCA9IDQ4MDAwOwogCWNoYW5uZWxzLT5taW4gPSBjaGFubmVscy0+bWF4ID0gMjsKLQlwYXJhbXNfc2V0X2Zvcm1hdChwYXJhbXMsIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFKTsKIAorCS8qIHNldCBTU1AwIHRvIDI0IGJpdCAqLworCXNuZF9tYXNrX25vbmUoZm10KTsKKwlzbmRfbWFza19zZXQoZm10LCBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MCw2ICsyMDcsNDIgQEAKIAkuaHdfcGFyYW1zID0gc2t5bGFrZV9ydDI4Nl9od19wYXJhbXMsCiB9OwogCitzdGF0aWMgaW50IHNreWxha2VfZG1pY19maXh1cChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmNoYW5uZWxzID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAorCQkJCQkJU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsKKwljaGFubmVscy0+bWluID0gY2hhbm5lbHMtPm1heCA9IDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjaGFubmVsc19kbWljW10gPSB7CisJMiwgNCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgY29uc3RyYWludHNfZG1pY19jaGFubmVscyA9IHsKKwkuY291bnQgPSBBUlJBWV9TSVpFKGNoYW5uZWxzX2RtaWMpLAorCS5saXN0ID0gY2hhbm5lbHNfZG1pYywKKwkubWFzayA9IDAsCit9OworCitzdGF0aWMgaW50IHNreWxha2VfZG1pY19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSA0OworCXNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKwkJCQkJICAgJmNvbnN0cmFpbnRzX2RtaWNfY2hhbm5lbHMpOworCisJcmV0dXJuIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHN1YnN0cmVhbS0+cnVudGltZSwgMCwKKwkJCVNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAmY29uc3RyYWludHNfcmF0ZXMpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHNreWxha2VfZG1pY19vcHMgPSB7CisJLnN0YXJ0dXAgPSBza3lsYWtlX2RtaWNfc3RhcnR1cCwKK307CisKIC8qIHNreWxha2UgZGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2t5bGFrZV9ydDI4Nl9kYWlzW10gPSB7CiAJLyogRnJvbnQgRW5kIERBSSBsaW5rcyAqLwpAQCAtMTUyLDExICsyNTUsMTMgQEAKIAkJLmR5bmFtaWMgPSAxLAogCQkuY29kZWNfbmFtZSA9ICJzbmQtc29jLWR1bW15IiwKIAkJLmNvZGVjX2RhaV9uYW1lID0gInNuZC1zb2MtZHVtbXktZGFpIiwKKwkJLmluaXQgPSBza3lsYWtlX3J0Mjg2X2ZlX2luaXQsCiAJCS50cmlnZ2VyID0gewogCQkJU05EX1NPQ19EUENNX1RSSUdHRVJfUE9TVCwKIAkJCVNORF9TT0NfRFBDTV9UUklHR0VSX1BPU1QKIAkJfSwKIAkJLmRwY21fcGxheWJhY2sgPSAxLAorCQkub3BzID0gJnNreWxha2VfcnQyODZfZmVfb3BzLAogCX0sCiAJewogCQkubmFtZSA9ICJTa2wgQXVkaW8gQ2FwdHVyZSBQb3J0IiwKQEAgLTE3Miw2ICsyNzcsNyBAQAogCQkJU05EX1NPQ19EUENNX1RSSUdHRVJfUE9TVAogCQl9LAogCQkuZHBjbV9jYXB0dXJlID0gMSwKKwkJLm9wcyA9ICZza3lsYWtlX3J0Mjg2X2ZlX29wcywKIAl9LAogCXsKIAkJLm5hbWUgPSAiU2tsIEF1ZGlvIFJlZmVyZW5jZSBjYXAiLApAQCAtMTg2LDYgKzI5MiwxOSBAQAogCQkubm9uYXRvbWljID0gMSwKIAkJLmR5bmFtaWMgPSAxLAogCX0sCisJeworCQkubmFtZSA9ICJTa2wgQXVkaW8gRE1JQyBjYXAiLAorCQkuc3RyZWFtX25hbWUgPSAiZG1pY2NhcCIsCisJCS5jcHVfZGFpX25hbWUgPSAiRE1JQyBQaW4iLAorCQkuY29kZWNfbmFtZSA9ICJzbmQtc29jLWR1bW15IiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gInNuZC1zb2MtZHVtbXktZGFpIiwKKwkJLnBsYXRmb3JtX25hbWUgPSAiMDAwMDowMDoxZi4zIiwKKwkJLmluaXQgPSBOVUxMLAorCQkuZHBjbV9jYXB0dXJlID0gMSwKKwkJLm5vbmF0b21pYyA9IDEsCisJCS5keW5hbWljID0gMSwKKwkJLm9wcyA9ICZza3lsYWtlX2RtaWNfb3BzLAorCX0sCiAKIAkvKiBCYWNrIEVuZCBEQUkgbGlua3MgKi8KIAl7CkBAIC0yMDEsNyArMzIwLDYgQEAKIAkJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfAogCQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfAogCQkJU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKLQkJLmlnbm9yZV9zdXNwZW5kID0gMSwKIAkJLmlnbm9yZV9wbWRvd25fdGltZSA9IDEsCiAJCS5iZV9od19wYXJhbXNfZml4dXAgPSBza3lsYWtlX3NzcDBfZml4dXAsCiAJCS5vcHMgPSAmc2t5bGFrZV9ydDI4Nl9vcHMsCkBAIC0yMTUsNiArMzMzLDcgQEAKIAkJLmNvZGVjX25hbWUgPSAiZG1pYy1jb2RlYyIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJkbWljLWhpZmkiLAogCQkucGxhdGZvcm1fbmFtZSA9ICIwMDAwOjAwOjFmLjMiLAorCQkuYmVfaHdfcGFyYW1zX2ZpeHVwID0gc2t5bGFrZV9kbWljX2ZpeHVwLAogCQkuaWdub3JlX3N1c3BlbmQgPSAxLAogCQkuZHBjbV9jYXB0dXJlID0gMSwKIAkJLm5vX3BjbSA9IDEsCkBAIC0yNDcsNiArMzY2LDcgQEAKIAkucHJvYmUgPSBza3lsYWtlX2F1ZGlvX3Byb2JlLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInNrbF9hbGMyODZzX2kycyIsCisJCS5wbSA9ICZzbmRfc29jX3BtX29wcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL2NvbW1vbi9NYWtlZmlsZSBiL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vTWFrZWZpbGUKaW5kZXggZDkxMDU1OC4uNjY4ZmRlZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL2NvbW1vbi9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL01ha2VmaWxlCkBAIC0xLDExICsxLDEzIEBACiBzbmQtc29jLXNzdC1kc3Atb2JqcyA6PSBzc3QtZHNwLm8KLXNuZC1zb2Mtc3N0LWFjcGktb2JqcyA6PSBzc3QtYWNwaS5vCitpZm5lcSAoJChDT05GSUdfU05EX1NTVF9JUENfQUNQSSksKQorc25kLXNvYy1zc3QtYWNwaS1vYmpzIDo9IHNzdC1tYXRjaC1hY3BpLm8KK2Vsc2UKK3NuZC1zb2Mtc3N0LWFjcGktb2JqcyA6PSBzc3QtYWNwaS5vIHNzdC1tYXRjaC1hY3BpLm8KK2VuZGlmCisKIHNuZC1zb2Mtc3N0LWlwYy1vYmpzIDo9IHNzdC1pcGMubwogCi1pZm5lcSAoJChDT05GSUdfRFdfRE1BQ19DT1JFKSwpCi1zbmQtc29jLXNzdC1kc3Atb2JqcyArPSBzc3QtZmlybXdhcmUubwotZW5kaWYKK3NuZC1zb2Mtc3N0LWRzcC0kKENPTkZJR19EV19ETUFDX0NPUkUpICs9IHNzdC1maXJtd2FyZS5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX1NTVCkgKz0gc25kLXNvYy1zc3QtZHNwLm8gc25kLXNvYy1zc3QtaXBjLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX1NTVF9BQ1BJKSArPSBzbmQtc29jLXNzdC1hY3BpLm8KLQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL2NvbW1vbi9zc3QtYWNwaS5jIGIvc291bmQvc29jL2ludGVsL2NvbW1vbi9zc3QtYWNwaS5jCmluZGV4IDY3YjZkM2QuLjdhODVjNTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LWFjcGkuYworKysgYi9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL3NzdC1hY3BpLmMKQEAgLTIxLDIxICsyMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSAic3N0LWRzcC5oIgorI2luY2x1ZGUgInNzdC1hY3BpLmgiCiAKICNkZWZpbmUgU1NUX0xQVF9EU1BfRE1BX0FERFJfT0ZGU0VUCTB4MEYwMDAwCiAjZGVmaW5lIFNTVF9XUFRfRFNQX0RNQV9BRERSX09GRlNFVAkweDBGRTAwMAogI2RlZmluZSBTU1RfTFBUX0RTUF9ETUFfU0laRQkJKDEwMjQgLSAxKQogCi0vKiBEZXNjcmlwdG9yIGZvciBTU1QgQVNvQyBtYWNoaW5lIGRyaXZlciAqLwotc3RydWN0IHNzdF9hY3BpX21hY2ggewotCS8qIEFDUEkgSUQgZm9yIHRoZSBtYXRjaGluZyBtYWNoaW5lIGRyaXZlci4gQXVkaW8gY29kZWMgZm9yIGluc3RhbmNlICovCi0JY29uc3QgdTggaWRbQUNQSV9JRF9MRU5dOwotCS8qIG1hY2hpbmUgZHJpdmVyIG5hbWUgKi8KLQljb25zdCBjaGFyICpkcnZfbmFtZTsKLQkvKiBmaXJtd2FyZSBmaWxlIG5hbWUgKi8KLQljb25zdCBjaGFyICpmd19maWxlbmFtZTsKLX07Ci0KIC8qIERlc2NyaXB0b3IgZm9yIHNldHRpbmcgdXAgU1NUIHBsYXRmb3JtIGRhdGEgKi8KIHN0cnVjdCBzc3RfYWNwaV9kZXNjIHsKIAljb25zdCBjaGFyICpkcnZfbmFtZTsKQEAgLTg4LDI4ICs3OSw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgYWNwaV9zdGF0dXMgc3N0X2FjcGlfbWFjaF9tYXRjaChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsZXZlbCwKLQkJCQkgICAgICAgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldCkKLXsKLQkqKGJvb2wgKiljb250ZXh0ID0gdHJ1ZTsKLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3N0X2FjcGlfbWFjaCAqc3N0X2FjcGlfZmluZF9tYWNoaW5lKAotCXN0cnVjdCBzc3RfYWNwaV9tYWNoICptYWNoaW5lcykKLXsKLQlzdHJ1Y3Qgc3N0X2FjcGlfbWFjaCAqbWFjaDsKLQlib29sIGZvdW5kID0gZmFsc2U7Ci0KLQlmb3IgKG1hY2ggPSBtYWNoaW5lczsgbWFjaC0+aWRbMF07IG1hY2grKykKLQkJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9kZXZpY2VzKG1hY2gtPmlkLAotCQkJCQkJICBzc3RfYWNwaV9tYWNoX21hdGNoLAotCQkJCQkJICAmZm91bmQsIE5VTEwpKSAmJiBmb3VuZCkKLQkJCXJldHVybiBtYWNoOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbnQgc3N0X2FjcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAljb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmlkOwpAQCAtMjExLDcgKzE4MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3N0X2FjcGlfbWFjaCBoYXN3ZWxsX21hY2hpbmVzW10gPSB7Ci0JeyAiSU5UMzNDQSIsICJoYXN3ZWxsLWF1ZGlvIiwgImludGVsL0ludGNTU1QxLmJpbiIgfSwKKwl7ICJJTlQzM0NBIiwgImhhc3dlbGwtYXVkaW8iLCAiaW50ZWwvSW50Y1NTVDEuYmluIiwgTlVMTCwgTlVMTCwgTlVMTCB9LAogCXt9CiB9OwogCkBAIC0yMjksNyArMTk4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3N0X2FjcGlfbWFjaCBicm9hZHdlbGxfbWFjaGluZXNbXSA9IHsKLQl7ICJJTlQzNDNBIiwgImJyb2Fkd2VsbC1hdWRpbyIsICJpbnRlbC9JbnRjU1NUMi5iaW4iIH0sCisJeyAiSU5UMzQzQSIsICJicm9hZHdlbGwtYXVkaW8iLCAiaW50ZWwvSW50Y1NTVDIuYmluIiwgTlVMTCwgTlVMTCwgTlVMTCB9LAogCXt9CiB9OwogCkBAIC0yNDcsOCArMjE2LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3N0X2FjcGlfbWFjaCBiYXl0cmFpbF9tYWNoaW5lc1tdID0gewotCXsgIjEwRUM1NjQwIiwgImJ5dC1ydDU2NDAiLCAiaW50ZWwvZndfc3N0XzBmMjguYmluLTQ4a0h6X2kyc19tYXN0ZXIiIH0sCi0JeyAiMTkzQzk4OTAiLCAiYnl0LW1heDk4MDkwIiwgImludGVsL2Z3X3NzdF8wZjI4LmJpbi00OGtIel9pMnNfbWFzdGVyIiB9LAorCXsgIjEwRUM1NjQwIiwgImJ5dC1ydDU2NDAiLCAiaW50ZWwvZndfc3N0XzBmMjguYmluLTQ4a0h6X2kyc19tYXN0ZXIiLCBOVUxMLCBOVUxMLCBOVUxMIH0sCisJeyAiMTkzQzk4OTAiLCAiYnl0LW1heDk4MDkwIiwgImludGVsL2Z3X3NzdF8wZjI4LmJpbi00OGtIel9pMnNfbWFzdGVyIiwgTlVMTCwgTlVMTCwgTlVMTCB9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL3NzdC1hY3BpLmggYi9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL3NzdC1hY3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlM2I3YQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LWFjcGkuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTE1LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisKKy8qIGFjcGkgbWF0Y2ggKi8KK3N0cnVjdCBzc3RfYWNwaV9tYWNoICpzc3RfYWNwaV9maW5kX21hY2hpbmUoc3RydWN0IHNzdF9hY3BpX21hY2ggKm1hY2hpbmVzKTsKKworLyogRGVzY3JpcHRvciBmb3IgU1NUIEFTb0MgbWFjaGluZSBkcml2ZXIgKi8KK3N0cnVjdCBzc3RfYWNwaV9tYWNoIHsKKwkvKiBBQ1BJIElEIGZvciB0aGUgbWF0Y2hpbmcgbWFjaGluZSBkcml2ZXIuIEF1ZGlvIGNvZGVjIGZvciBpbnN0YW5jZSAqLworCWNvbnN0IHU4IGlkW0FDUElfSURfTEVOXTsKKwkvKiBtYWNoaW5lIGRyaXZlciBuYW1lICovCisJY29uc3QgY2hhciAqZHJ2X25hbWU7CisJLyogZmlybXdhcmUgZmlsZSBuYW1lICovCisJY29uc3QgY2hhciAqZndfZmlsZW5hbWU7CisKKwkvKiBib2FyZCBuYW1lICovCisJY29uc3QgY2hhciAqYm9hcmQ7CisJdm9pZCAoKm1hY2hpbmVfcXVpcmspKHZvaWQpOworCXZvaWQgKnBkYXRhOworfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LWRzcC1wcml2LmggYi9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL3NzdC1kc3AtcHJpdi5oCmluZGV4IDIxNTE2NTIuLjgxYWExZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LWRzcC1wcml2LmgKKysrIGIvc291bmQvc29jL2ludGVsL2NvbW1vbi9zc3QtZHNwLXByaXYuaApAQCAtMjQzLDcgKzI0Myw3IEBACiAJdTMyIHNpemU7CQkJLyogYmxvY2sgc2l6ZSAqLwogCXUzMiBpbmRleDsJCQkvKiBibG9jayBpbmRleCAwLi5OICovCiAJZW51bSBzc3RfbWVtX3R5cGUgdHlwZTsJCS8qIGJsb2NrIG1lbW9yeSB0eXBlIElSQU0vRFJBTSAqLwotCXN0cnVjdCBzc3RfYmxvY2tfb3BzICpvcHM7CS8qIGJsb2NrIG9wZXJhdGlvbnMsIGlmIGFueSAqLworCWNvbnN0IHN0cnVjdCBzc3RfYmxvY2tfb3BzICpvcHM7LyogYmxvY2sgb3BlcmF0aW9ucywgaWYgYW55ICovCiAKIAkvKiBibG9jayBzdGF0dXMgKi8KIAl1MzIgYnl0ZXNfdXNlZDsJCQkvKiBieXRlcyBpbiB1c2UgYnkgbW9kdWxlcyAqLwpAQCAtMzA4LDYgKzMwOCw4IEBACiAKIAkvKiBTS0wgZGF0YSAqLwogCisJY29uc3QgY2hhciAqZndfbmFtZTsKKwogCS8qIFRvIGFsbG9jYXRlIENMIGRtYSBidWZmZXJzICovCiAJc3RydWN0IHNrbF9kc3BfbG9hZGVyX29wcyBkc3Bfb3BzOwogCXN0cnVjdCBza2xfZHNwX2Z3X29wcyBmd19vcHM7CkBAIC0zNzYsOCArMzc4LDggQEAKIAogLyogUmVnaXN0ZXIgdGhlIERTUHMgbWVtb3J5IGJsb2NrcyAtIHdvdWxkIGJlIG5pY2UgdG8gcmVhZCBmcm9tIEFDUEkgKi8KIHN0cnVjdCBzc3RfbWVtX2Jsb2NrICpzc3RfbWVtX2Jsb2NrX3JlZ2lzdGVyKHN0cnVjdCBzc3RfZHNwICpkc3AsIHUzMiBvZmZzZXQsCi0JdTMyIHNpemUsIGVudW0gc3N0X21lbV90eXBlIHR5cGUsIHN0cnVjdCBzc3RfYmxvY2tfb3BzICpvcHMsIHUzMiBpbmRleCwKLQl2b2lkICpwcml2YXRlKTsKKwl1MzIgc2l6ZSwgZW51bSBzc3RfbWVtX3R5cGUgdHlwZSwgY29uc3Qgc3RydWN0IHNzdF9ibG9ja19vcHMgKm9wcywKKwl1MzIgaW5kZXgsIHZvaWQgKnByaXZhdGUpOwogdm9pZCBzc3RfbWVtX2Jsb2NrX3VucmVnaXN0ZXJfYWxsKHN0cnVjdCBzc3RfZHNwICpkc3ApOwogCiAvKiBDcmVhdGUvRnJlZSBETUEgcmVzb3VyY2VzICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL3NzdC1kc3AuYyBiL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LWRzcC5jCmluZGV4IGM5NDUyZTAuLmI1YmJkZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LWRzcC5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LWRzcC5jCkBAIC00MjAsNyArNDIwLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNzdF9kc3BfaW5ib3hfcmVhZCk7CiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19EV19ETUFDX0NPUkUpCisjaWZkZWYgQ09ORklHX0RXX0RNQUNfQ09SRQogc3RydWN0IHNzdF9kc3AgKnNzdF9kc3BfbmV3KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3Qgc3N0X2RzcF9kZXZpY2UgKnNzdF9kZXYsIHN0cnVjdCBzc3RfcGRhdGEgKnBkYXRhKQogewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL2NvbW1vbi9zc3QtZHNwLmggYi9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL3NzdC1kc3AuaAppbmRleCA4NTlmMGRlLi4wYjg0YzcxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL3NzdC1kc3AuaAorKysgYi9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL3NzdC1kc3AuaApAQCAtMjE2LDcgKzIxNiw3IEBACiAJdm9pZCAqZHNwOwogfTsKIAotI2lmIElTX0VOQUJMRUQoQ09ORklHX0RXX0RNQUNfQ09SRSkKKyNpZmRlZiBDT05GSUdfRFdfRE1BQ19DT1JFCiAvKiBJbml0aWFsaXphdGlvbiAqLwogc3RydWN0IHNzdF9kc3AgKnNzdF9kc3BfbmV3KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3Qgc3N0X2RzcF9kZXZpY2UgKnNzdF9kZXYsIHN0cnVjdCBzc3RfcGRhdGEgKnBkYXRhKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LWZpcm13YXJlLmMgYi9zb3VuZC9zb2MvaW50ZWwvY29tbW9uL3NzdC1maXJtd2FyZS5jCmluZGV4IDE2MzZhMWUuLmVmNDg4MWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LWZpcm13YXJlLmMKKysrIGIvc291bmQvc29jL2ludGVsL2NvbW1vbi9zc3QtZmlybXdhcmUuYwpAQCAtNTEsOCArNTEsMjIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNzdF9tZW1jcHkzMih2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRlc3QsIHZvaWQgKnNyYywgdTMyIGJ5dGVzKQogeworCXUzMiB0bXAgPSAwOworCWludCBpLCBtLCBuOworCWNvbnN0IHU4ICpzcmNfYnl0ZSA9IHNyYzsKKworCW0gPSBieXRlcyAvIDQ7CisJbiA9IGJ5dGVzICUgNDsKKwogCS8qIF9faW93cml0ZTMyX2NvcHkgdXNlIDMyYml0IHNpemUgdmFsdWVzIHNvIGRpdmlkZSBieSA0ICovCi0JX19pb3dyaXRlMzJfY29weSgodm9pZCAqKWRlc3QsIHNyYywgYnl0ZXMvNCk7CisJX19pb3dyaXRlMzJfY29weSgodm9pZCAqKWRlc3QsIHNyYywgbSk7CisKKwlpZiAobikgeworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJdG1wIHw9ICh1MzIpKihzcmNfYnl0ZSArIG0gKiA0ICsgaSkgPDwgKGkgKiA4KTsKKwkJX19pb3dyaXRlMzJfY29weSgodm9pZCAqKShkZXN0ICsgbSAqIDQpLCAmdG1wLCAxKTsKKwl9CisKIH0KIAogc3RhdGljIHZvaWQgc3N0X2RtYV90cmFuc2Zlcl9jb21wbGV0ZSh2b2lkICphcmcpCkBAIC0xMDE0LDggKzEwMjgsOCBAQAogCiAvKiByZWdpc3RlciBhIERTUCBtZW1vcnkgYmxvY2sgZm9yIHVzZSB3aXRoIEZXIGJhc2VkIG1vZHVsZXMgKi8KIHN0cnVjdCBzc3RfbWVtX2Jsb2NrICpzc3RfbWVtX2Jsb2NrX3JlZ2lzdGVyKHN0cnVjdCBzc3RfZHNwICpkc3AsIHUzMiBvZmZzZXQsCi0JdTMyIHNpemUsIGVudW0gc3N0X21lbV90eXBlIHR5cGUsIHN0cnVjdCBzc3RfYmxvY2tfb3BzICpvcHMsIHUzMiBpbmRleCwKLQl2b2lkICpwcml2YXRlKQorCXUzMiBzaXplLCBlbnVtIHNzdF9tZW1fdHlwZSB0eXBlLCBjb25zdCBzdHJ1Y3Qgc3N0X2Jsb2NrX29wcyAqb3BzLAorCXUzMiBpbmRleCwgdm9pZCAqcHJpdmF0ZSkKIHsKIAlzdHJ1Y3Qgc3N0X21lbV9ibG9jayAqYmxvY2s7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LW1hdGNoLWFjcGkuYyBiL3NvdW5kL3NvYy9pbnRlbC9jb21tb24vc3N0LW1hdGNoLWFjcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDA3N2UxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2ludGVsL2NvbW1vbi9zc3QtbWF0Y2gtYWNwaS5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBzc3RfbWF0Y2hfYXBjaS5jIC0gU1NUIChMUEUpIG1hdGNoIGZvciBBQ1BJIGVudW1lcmF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0xNSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgInNzdC1hY3BpLmgiCisKK3N0YXRpYyBhY3BpX3N0YXR1cyBzc3RfYWNwaV9tYWNoX21hdGNoKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGxldmVsLAorCQkJCSAgICAgICB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0KQoreworCSooYm9vbCAqKWNvbnRleHQgPSB0cnVlOworCXJldHVybiBBRV9PSzsKK30KKworc3RydWN0IHNzdF9hY3BpX21hY2ggKnNzdF9hY3BpX2ZpbmRfbWFjaGluZShzdHJ1Y3Qgc3N0X2FjcGlfbWFjaCAqbWFjaGluZXMpCit7CisJc3RydWN0IHNzdF9hY3BpX21hY2ggKm1hY2g7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJZm9yIChtYWNoID0gbWFjaGluZXM7IG1hY2gtPmlkWzBdOyBtYWNoKyspCisJCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfZGV2aWNlcyhtYWNoLT5pZCwKKwkJCQkJCSAgc3N0X2FjcGlfbWFjaF9tYXRjaCwKKwkJCQkJCSAgJmZvdW5kLCBOVUxMKSkgJiYgZm91bmQpCisJCQlyZXR1cm4gbWFjaDsKKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3N0X2FjcGlfZmluZF9tYWNoaW5lKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9oYXN3ZWxsL3NzdC1oYXN3ZWxsLWRzcC5jIGIvc291bmQvc29jL2ludGVsL2hhc3dlbGwvc3N0LWhhc3dlbGwtZHNwLmMKaW5kZXggN2Y5NDkyMC4uYjJiZWMzNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL2hhc3dlbGwvc3N0LWhhc3dlbGwtZHNwLmMKKysrIGIvc291bmQvc29jL2ludGVsL2hhc3dlbGwvc3N0LWhhc3dlbGwtZHNwLmMKQEAgLTYwNyw3ICs2MDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNzdF9ibG9ja19vcHMgc3N0X2hzd19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNzdF9ibG9ja19vcHMgc3N0X2hzd19vcHMgPSB7CiAJLmVuYWJsZSA9IGhzd19ibG9ja19lbmFibGUsCiAJLmRpc2FibGUgPSBoc3dfYmxvY2tfZGlzYWJsZSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvaGFzd2VsbC9zc3QtaGFzd2VsbC1pcGMuYyBiL3NvdW5kL3NvYy9pbnRlbC9oYXN3ZWxsL3NzdC1oYXN3ZWxsLWlwYy5jCmluZGV4IGIyN2YyNWYuLmFjNjBmMTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9oYXN3ZWxsL3NzdC1oYXN3ZWxsLWlwYy5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9oYXN3ZWxsL3NzdC1oYXN3ZWxsLWlwYy5jCkBAIC03NzgsNyArNzc4LDYgQEAKIAlzdHJ1Y3Qgc3N0X2hzdyAqaHN3ID0gc3N0X2RzcF9nZXRfdGhyZWFkX2NvbnRleHQoc3N0KTsKIAlzdHJ1Y3Qgc3N0X2dlbmVyaWNfaXBjICppcGMgPSAmaHN3LT5pcGM7CiAJdTMyIGlwY3gsIGlwY2Q7Ci0JaW50IGhhbmRsZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzc3QtPnNwaW5sb2NrLCBmbGFncyk7CkBAIC03OTAsMzQgKzc4OSwzMCBAQAogCWlmIChpcGN4ICYgU1NUX0lQQ1hfRE9ORSkgewogCiAJCS8qIEhhbmRsZSBJbW1lZGlhdGUgcmVwbHkgZnJvbSBEU1AgQ29yZSAqLwotCQloYW5kbGVkID0gaHN3X3Byb2Nlc3NfcmVwbHkoaHN3LCBpcGN4KTsKKwkJaHN3X3Byb2Nlc3NfcmVwbHkoaHN3LCBpcGN4KTsKIAotCQlpZiAoaGFuZGxlZCA+IDApIHsKLQkJCS8qIGNsZWFyIERPTkUgYml0IC0gdGVsbCBEU1Agd2UgaGF2ZSBjb21wbGV0ZWQgKi8KLQkJCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChzc3QsIFNTVF9JUENYLAotCQkJCVNTVF9JUENYX0RPTkUsIDApOworCQkvKiBjbGVhciBET05FIGJpdCAtIHRlbGwgRFNQIHdlIGhhdmUgY29tcGxldGVkICovCisJCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChzc3QsIFNTVF9JUENYLAorCQkJU1NUX0lQQ1hfRE9ORSwgMCk7CiAKLQkJCS8qIHVubWFzayBEb25lIGludGVycnVwdCAqLwotCQkJc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzX3VubG9ja2VkKHNzdCwgU1NUX0lNUlgsCi0JCQkJU1NUX0lNUlhfRE9ORSwgMCk7Ci0JCX0KKwkJLyogdW5tYXNrIERvbmUgaW50ZXJydXB0ICovCisJCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChzc3QsIFNTVF9JTVJYLAorCQkJU1NUX0lNUlhfRE9ORSwgMCk7CiAJfQogCiAJLyogbmV3IG1lc3NhZ2UgZnJvbSBEU1AgKi8KIAlpZiAoaXBjZCAmIFNTVF9JUENEX0JVU1kpIHsKIAogCQkvKiBIYW5kbGUgTm90aWZpY2F0aW9uIGFuZCBEZWxheWVkIHJlcGx5IGZyb20gRFNQIENvcmUgKi8KLQkJaGFuZGxlZCA9IGhzd19wcm9jZXNzX25vdGlmaWNhdGlvbihoc3cpOworCQloc3dfcHJvY2Vzc19ub3RpZmljYXRpb24oaHN3KTsKIAogCQkvKiBjbGVhciBCVVNZIGJpdCBhbmQgc2V0IERPTkUgYml0IC0gYWNjZXB0IG5ldyBtZXNzYWdlcyAqLwotCQlpZiAoaGFuZGxlZCA+IDApIHsKLQkJCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChzc3QsIFNTVF9JUENELAotCQkJCVNTVF9JUENEX0JVU1kgfCBTU1RfSVBDRF9ET05FLCBTU1RfSVBDRF9ET05FKTsKKwkJc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzX3VubG9ja2VkKHNzdCwgU1NUX0lQQ0QsCisJCQlTU1RfSVBDRF9CVVNZIHwgU1NUX0lQQ0RfRE9ORSwgU1NUX0lQQ0RfRE9ORSk7CiAKLQkJCS8qIHVubWFzayBidXN5IGludGVycnVwdCAqLwotCQkJc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzX3VubG9ja2VkKHNzdCwgU1NUX0lNUlgsCi0JCQkJU1NUX0lNUlhfQlVTWSwgMCk7Ci0JCX0KKwkJLyogdW5tYXNrIGJ1c3kgaW50ZXJydXB0ICovCisJCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChzc3QsIFNTVF9JTVJYLAorCQkJU1NUX0lNUlhfQlVTWSwgMCk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3N0LT5zcGlubG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLW1lc3NhZ2VzLmMgYi9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtbWVzc2FnZXMuYwppbmRleCA1MGExMDk1Li5kZTZkYWM0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtbWVzc2FnZXMuYworKysgYi9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtbWVzc2FnZXMuYwpAQCAtOTYsNyArOTYsNyBAQAogCX0KIAogCXJldCA9IHNrbF9zc3RfZHNwX2luaXQoYnVzLT5kZXYsIG1taW9fYmFzZSwgaXJxLAotCQkJbG9hZGVyX29wcywgJnNrbC0+c2tsX3NzdCk7CisJCQlza2wtPmZ3X25hbWUsIGxvYWRlcl9vcHMsICZza2wtPnNrbF9zc3QpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xODIsOTQgKzE4Miw2IEBACiAJfQogfQogCi1zdGF0aWMgdTMyIHNrbF9jcmVhdGVfY2hhbm5lbF9tYXAoZW51bSBza2xfY2hfY2ZnIGNoX2NmZykKLXsKLQl1MzIgY29uZmlnOwotCi0Jc3dpdGNoIChjaF9jZmcpIHsKLQljYXNlIFNLTF9DSF9DRkdfTU9OTzoKLQkJY29uZmlnID0gICgweEZGRkZGRkYwIHwgU0tMX0NIQU5ORUxfTEVGVCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTS0xfQ0hfQ0ZHX1NURVJFTzoKLQkJY29uZmlnID0gKDB4RkZGRkZGMDAgfCBTS0xfQ0hBTk5FTF9MRUZUCi0JCQl8IChTS0xfQ0hBTk5FTF9SSUdIVCA8PCA0KSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTS0xfQ0hfQ0ZHXzJfMToKLQkJY29uZmlnID0gKDB4RkZGRkYwMDAgfCBTS0xfQ0hBTk5FTF9MRUZUCi0JCQl8IChTS0xfQ0hBTk5FTF9SSUdIVCA8PCA0KQotCQkJfCAoU0tMX0NIQU5ORUxfTEZFIDw8IDgpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLTF9DSF9DRkdfM18wOgotCQljb25maWcgPSAgKDB4RkZGRkYwMDAgfCBTS0xfQ0hBTk5FTF9MRUZUCi0JCQl8IChTS0xfQ0hBTk5FTF9DRU5URVIgPDwgNCkKLQkJCXwgKFNLTF9DSEFOTkVMX1JJR0hUIDw8IDgpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLTF9DSF9DRkdfM18xOgotCQljb25maWcgPSAoMHhGRkZGMDAwMCB8IFNLTF9DSEFOTkVMX0xFRlQKLQkJCXwgKFNLTF9DSEFOTkVMX0NFTlRFUiA8PCA0KQotCQkJfCAoU0tMX0NIQU5ORUxfUklHSFQgPDwgOCkKLQkJCXwgKFNLTF9DSEFOTkVMX0xGRSA8PCAxMikpOwotCQlicmVhazsKLQotCWNhc2UgU0tMX0NIX0NGR19RVUFUUk86Ci0JCWNvbmZpZyA9ICgweEZGRkYwMDAwIHwgU0tMX0NIQU5ORUxfTEVGVAotCQkJfCAoU0tMX0NIQU5ORUxfUklHSFQgPDwgNCkKLQkJCXwgKFNLTF9DSEFOTkVMX0xFRlRfU1VSUk9VTkQgPDwgOCkKLQkJCXwgKFNLTF9DSEFOTkVMX1JJR0hUX1NVUlJPVU5EIDw8IDEyKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTS0xfQ0hfQ0ZHXzRfMDoKLQkJY29uZmlnID0gKDB4RkZGRjAwMDAgfCBTS0xfQ0hBTk5FTF9MRUZUCi0JCQl8IChTS0xfQ0hBTk5FTF9DRU5URVIgPDwgNCkKLQkJCXwgKFNLTF9DSEFOTkVMX1JJR0hUIDw8IDgpCi0JCQl8IChTS0xfQ0hBTk5FTF9DRU5URVJfU1VSUk9VTkQgPDwgMTIpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLTF9DSF9DRkdfNV8wOgotCQljb25maWcgPSAoMHhGRkYwMDAwMCB8IFNLTF9DSEFOTkVMX0xFRlQKLQkJCXwgKFNLTF9DSEFOTkVMX0NFTlRFUiA8PCA0KQotCQkJfCAoU0tMX0NIQU5ORUxfUklHSFQgPDwgOCkKLQkJCXwgKFNLTF9DSEFOTkVMX0xFRlRfU1VSUk9VTkQgPDwgMTIpCi0JCQl8IChTS0xfQ0hBTk5FTF9SSUdIVF9TVVJST1VORCA8PCAxNikpOwotCQlicmVhazsKLQotCWNhc2UgU0tMX0NIX0NGR181XzE6Ci0JCWNvbmZpZyA9ICgweEZGMDAwMDAwIHwgU0tMX0NIQU5ORUxfQ0VOVEVSCi0JCQl8IChTS0xfQ0hBTk5FTF9MRUZUIDw8IDQpCi0JCQl8IChTS0xfQ0hBTk5FTF9SSUdIVCA8PCA4KQotCQkJfCAoU0tMX0NIQU5ORUxfTEVGVF9TVVJST1VORCA8PCAxMikKLQkJCXwgKFNLTF9DSEFOTkVMX1JJR0hUX1NVUlJPVU5EIDw8IDE2KQotCQkJfCAoU0tMX0NIQU5ORUxfTEZFIDw8IDIwKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTS0xfQ0hfQ0ZHX0RVQUxfTU9OTzoKLQkJY29uZmlnID0gKDB4RkZGRkZGMDAgfCBTS0xfQ0hBTk5FTF9MRUZUCi0JCQl8IChTS0xfQ0hBTk5FTF9MRUZUIDw8IDQpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNLTF9DSF9DRkdfSTJTX0RVQUxfU1RFUkVPXzA6Ci0JCWNvbmZpZyA9ICgweEZGRkZGRjAwIHwgU0tMX0NIQU5ORUxfTEVGVAotCQkJfCAoU0tMX0NIQU5ORUxfUklHSFQgPDwgNCkpOwotCQlicmVhazsKLQotCWNhc2UgU0tMX0NIX0NGR19JMlNfRFVBTF9TVEVSRU9fMToKLQkJY29uZmlnID0gKDB4RkZGRjAwRkYgfCAoU0tMX0NIQU5ORUxfTEVGVCA8PCA4KQotCQkJfCAoU0tMX0NIQU5ORUxfUklHSFQgPDwgMTIpKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQljb25maWcgPSAgMHhGRkZGRkZGRjsKLQkJYnJlYWs7Ci0KLQl9Ci0KLQlyZXR1cm4gY29uZmlnOwotfQotCiAvKgogICogRWFjaCBtb2R1bGUgaW4gRFNQIGV4cGVjdHMgYSBiYXNlIG1vZHVsZSBjb25maWd1cmF0aW9uLCB3aGljaCBjb25zaXN0cyBvZgogICogUENNIGZvcm1hdCBpbmZvcm1hdGlvbiwgd2hpY2ggd2UgY2FsY3VsYXRlIGluIGRyaXZlciBhbmQgcmVzb3VyY2UgdmFsdWVzCkBAIC0yODAsNyArMTkyLDcgQEAKIAkJCXN0cnVjdCBza2xfbW9kdWxlX2NmZyAqbWNvbmZpZywKIAkJCXN0cnVjdCBza2xfYmFzZV9jZmcgKmJhc2VfY2ZnKQogewotCXN0cnVjdCBza2xfbW9kdWxlX2ZtdCAqZm9ybWF0ID0gJm1jb25maWctPmluX2ZtdDsKKwlzdHJ1Y3Qgc2tsX21vZHVsZV9mbXQgKmZvcm1hdCA9ICZtY29uZmlnLT5pbl9mbXRbMF07CiAKIAliYXNlX2NmZy0+YXVkaW9fZm10Lm51bWJlcl9vZl9jaGFubmVscyA9ICh1OClmb3JtYXQtPmNoYW5uZWxzOwogCkBAIC0yOTMsMTQgKzIwNSwxNCBAQAogCQkJZm9ybWF0LT5iaXRfZGVwdGgsIGZvcm1hdC0+dmFsaWRfYml0X2RlcHRoLAogCQkJZm9ybWF0LT5jaF9jZmcpOwogCi0JYmFzZV9jZmctPmF1ZGlvX2ZtdC5jaGFubmVsX21hcCA9IHNrbF9jcmVhdGVfY2hhbm5lbF9tYXAoCi0JCQkJCWJhc2VfY2ZnLT5hdWRpb19mbXQuY2hfY2ZnKTsKKwliYXNlX2NmZy0+YXVkaW9fZm10LmNoYW5uZWxfbWFwID0gZm9ybWF0LT5jaF9tYXA7CiAKLQliYXNlX2NmZy0+YXVkaW9fZm10LmludGVybGVhdmluZyA9IFNLTF9JTlRFUkxFQVZJTkdfUEVSX0NIQU5ORUw7CisJYmFzZV9jZmctPmF1ZGlvX2ZtdC5pbnRlcmxlYXZpbmcgPSBmb3JtYXQtPmludGVybGVhdmluZ19zdHlsZTsKIAogCWJhc2VfY2ZnLT5jcHMgPSBtY29uZmlnLT5tY3BzOwogCWJhc2VfY2ZnLT5pYnMgPSBtY29uZmlnLT5pYnM7CiAJYmFzZV9jZmctPm9icyA9IG1jb25maWctPm9iczsKKwliYXNlX2NmZy0+aXNfcGFnZXMgPSBtY29uZmlnLT5tZW1fcGFnZXM7CiB9CiAKIC8qCkBAIC0zOTksNyArMzExLDcgQEAKIAkJCXN0cnVjdCBza2xfbW9kdWxlX2NmZyAqbWNvbmZpZywKIAkJCXN0cnVjdCBza2xfYXVkaW9fZGF0YV9mb3JtYXQgKm91dF9mbXQpCiB7Ci0Jc3RydWN0IHNrbF9tb2R1bGVfZm10ICpmb3JtYXQgPSAmbWNvbmZpZy0+b3V0X2ZtdDsKKwlzdHJ1Y3Qgc2tsX21vZHVsZV9mbXQgKmZvcm1hdCA9ICZtY29uZmlnLT5vdXRfZm10WzBdOwogCiAJb3V0X2ZtdC0+bnVtYmVyX29mX2NoYW5uZWxzID0gKHU4KWZvcm1hdC0+Y2hhbm5lbHM7CiAJb3V0X2ZtdC0+c19mcmVxID0gZm9ybWF0LT5zX2ZyZXE7CkBAIC00MDcsOCArMzE5LDkgQEAKIAlvdXRfZm10LT52YWxpZF9iaXRfZGVwdGggPSBmb3JtYXQtPnZhbGlkX2JpdF9kZXB0aDsKIAlvdXRfZm10LT5jaF9jZmcgPSBmb3JtYXQtPmNoX2NmZzsKIAotCW91dF9mbXQtPmNoYW5uZWxfbWFwID0gc2tsX2NyZWF0ZV9jaGFubmVsX21hcChvdXRfZm10LT5jaF9jZmcpOwotCW91dF9mbXQtPmludGVybGVhdmluZyA9IFNLTF9JTlRFUkxFQVZJTkdfUEVSX0NIQU5ORUw7CisJb3V0X2ZtdC0+Y2hhbm5lbF9tYXAgPSBmb3JtYXQtPmNoX21hcDsKKwlvdXRfZm10LT5pbnRlcmxlYXZpbmcgPSBmb3JtYXQtPmludGVybGVhdmluZ19zdHlsZTsKKwlvdXRfZm10LT5zYW1wbGVfdHlwZSA9IGZvcm1hdC0+c2FtcGxlX3R5cGU7CiAKIAlkZXZfZGJnKGN0eC0+ZGV2LCAiY29waWVyIG91dCBmb3JtYXQgY2hhbj0lZCBmcmU9JWQgYml0ZGVwdGg9JWRcbiIsCiAJCW91dF9mbXQtPm51bWJlcl9vZl9jaGFubmVscywgZm9ybWF0LT5zX2ZyZXEsIGZvcm1hdC0+Yml0X2RlcHRoKTsKQEAgLTQyMyw3ICszMzYsNyBAQAogCQkJc3RydWN0IHNrbF9tb2R1bGVfY2ZnICptY29uZmlnLAogCQkJc3RydWN0IHNrbF9zcmNfbW9kdWxlX2NmZyAqc3JjX21jb25maWcpCiB7Ci0Jc3RydWN0IHNrbF9tb2R1bGVfZm10ICpmbXQgPSAmbWNvbmZpZy0+b3V0X2ZtdDsKKwlzdHJ1Y3Qgc2tsX21vZHVsZV9mbXQgKmZtdCA9ICZtY29uZmlnLT5vdXRfZm10WzBdOwogCiAJc2tsX3NldF9iYXNlX21vZHVsZV9mb3JtYXQoY3R4LCBtY29uZmlnLAogCQkoc3RydWN0IHNrbF9iYXNlX2NmZyAqKXNyY19tY29uZmlnKTsKQEAgLTQ0MCw3ICszNTMsNyBAQAogCQkJc3RydWN0IHNrbF9tb2R1bGVfY2ZnICptY29uZmlnLAogCQkJc3RydWN0IHNrbF91cF9kb3duX21peGVyX2NmZyAqbWl4ZXJfbWNvbmZpZykKIHsKLQlzdHJ1Y3Qgc2tsX21vZHVsZV9mbXQgKmZtdCA9ICZtY29uZmlnLT5vdXRfZm10OworCXN0cnVjdCBza2xfbW9kdWxlX2ZtdCAqZm10ID0gJm1jb25maWctPm91dF9mbXRbMF07CiAJaW50IGkgPSAwOwogCiAJc2tsX3NldF9iYXNlX21vZHVsZV9mb3JtYXQoY3R4LAltY29uZmlnLApAQCAtNDc1LDYgKzM4OCw0NyBAQAogCXNrbF9zZXR1cF9jcHJfZ2F0ZXdheV9jZmcoY3R4LCBtY29uZmlnLCBjcHJfbWNvbmZpZyk7CiB9CiAKKy8qCisgKiBBbGdvIG1vZHVsZSBhcmUgRFNQIHByZSBwcm9jZXNzaW5nIG1vZHVsZXMuIEFsZ28gbW9kdWxlIHRha2UgYmFzZSBtb2R1bGUKKyAqIGNvbmZpZ3VyYXRpb24gYW5kIHBhcmFtcworICovCisKK3N0YXRpYyB2b2lkIHNrbF9zZXRfYWxnb19mb3JtYXQoc3RydWN0IHNrbF9zc3QgKmN0eCwKKwkJCXN0cnVjdCBza2xfbW9kdWxlX2NmZyAqbWNvbmZpZywKKwkJCXN0cnVjdCBza2xfYWxnb19jZmcgKmFsZ29fbWNmZykKK3sKKwlzdHJ1Y3Qgc2tsX2Jhc2VfY2ZnICpiYXNlX2NmZyA9IChzdHJ1Y3Qgc2tsX2Jhc2VfY2ZnICopYWxnb19tY2ZnOworCisJc2tsX3NldF9iYXNlX21vZHVsZV9mb3JtYXQoY3R4LCBtY29uZmlnLCBiYXNlX2NmZyk7CisKKwlpZiAobWNvbmZpZy0+Zm9ybWF0c19jb25maWcuY2Fwc19zaXplID09IDApCisJCXJldHVybjsKKworCW1lbWNweShhbGdvX21jZmctPnBhcmFtcywKKwkJCW1jb25maWctPmZvcm1hdHNfY29uZmlnLmNhcHMsCisJCQltY29uZmlnLT5mb3JtYXRzX2NvbmZpZy5jYXBzX3NpemUpOworCit9CisKKy8qCisgKiBNaWMgc2VsZWN0IG1vZHVsZSBhbGxvd3Mgc2VsZWN0aW5nIG9uZSBvciBtYW55IGlucHV0IGNoYW5uZWxzLCB0aHVzCisgKiBhY3RpbmcgYXMgYSBkZW11eC4KKyAqCisgKiBNaWMgc2VsZWN0IG1vZHVsZSB0YWtlIGJhc2UgbW9kdWxlIGNvbmZpZ3VyYXRpb24gYW5kIG91dC1mb3JtYXQKKyAqIGNvbmZpZ3VyYXRpb24KKyAqLworc3RhdGljIHZvaWQgc2tsX3NldF9iYXNlX291dGZtdF9mb3JtYXQoc3RydWN0IHNrbF9zc3QgKmN0eCwKKwkJCXN0cnVjdCBza2xfbW9kdWxlX2NmZyAqbWNvbmZpZywKKwkJCXN0cnVjdCBza2xfYmFzZV9vdXRmbXRfY2ZnICpiYXNlX291dGZtdF9tY2ZnKQoreworCXN0cnVjdCBza2xfYXVkaW9fZGF0YV9mb3JtYXQgKm91dF9mbXQgPSAmYmFzZV9vdXRmbXRfbWNmZy0+b3V0X2ZtdDsKKwlzdHJ1Y3Qgc2tsX2Jhc2VfY2ZnICpiYXNlX2NmZyA9CisJCQkJKHN0cnVjdCBza2xfYmFzZV9jZmcgKiliYXNlX291dGZtdF9tY2ZnOworCisJc2tsX3NldF9iYXNlX21vZHVsZV9mb3JtYXQoY3R4LCBtY29uZmlnLCBiYXNlX2NmZyk7CisJc2tsX3NldHVwX291dF9mb3JtYXQoY3R4LCBtY29uZmlnLCBvdXRfZm10KTsKK30KKwogc3RhdGljIHUxNiBza2xfZ2V0X21vZHVsZV9wYXJhbV9zaXplKHN0cnVjdCBza2xfc3N0ICpjdHgsCiAJCQlzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1jb25maWcpCiB7CkBAIC00OTIsNiArNDQ2LDE0IEBACiAJY2FzZSBTS0xfTU9EVUxFX1RZUEVfVVBEV01JWDoKIAkJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2tsX3VwX2Rvd25fbWl4ZXJfY2ZnKTsKIAorCWNhc2UgU0tMX01PRFVMRV9UWVBFX0FMR086CisJCXBhcmFtX3NpemUgPSBzaXplb2Yoc3RydWN0IHNrbF9iYXNlX2NmZyk7CisJCXBhcmFtX3NpemUgKz0gbWNvbmZpZy0+Zm9ybWF0c19jb25maWcuY2Fwc19zaXplOworCQlyZXR1cm4gcGFyYW1fc2l6ZTsKKworCWNhc2UgU0tMX01PRFVMRV9UWVBFX0JBU0VfT1VURk1UOgorCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBza2xfYmFzZV9vdXRmbXRfY2ZnKTsKKwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIHJldHVybiBvbmx5IGJhc2UgY2ZnIHdoZW4gbm8gc3BlY2lmaWMgbW9kdWxlIHR5cGUgaXMKQEAgLTUzOCw2ICs1MDAsMTQgQEAKIAkJc2tsX3NldF91cGRvd25fbWl4ZXJfZm9ybWF0KGN0eCwgbW9kdWxlX2NvbmZpZywgKnBhcmFtX2RhdGEpOwogCQlicmVhazsKIAorCWNhc2UgU0tMX01PRFVMRV9UWVBFX0FMR086CisJCXNrbF9zZXRfYWxnb19mb3JtYXQoY3R4LCBtb2R1bGVfY29uZmlnLCAqcGFyYW1fZGF0YSk7CisJCWJyZWFrOworCisJY2FzZSBTS0xfTU9EVUxFX1RZUEVfQkFTRV9PVVRGTVQ6CisJCXNrbF9zZXRfYmFzZV9vdXRmbXRfZm9ybWF0KGN0eCwgbW9kdWxlX2NvbmZpZywgKnBhcmFtX2RhdGEpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXNrbF9zZXRfYmFzZV9tb2R1bGVfZm9ybWF0KGN0eCwgbW9kdWxlX2NvbmZpZywgKnBhcmFtX2RhdGEpOwogCQlicmVhazsKQEAgLTU3MSwxMCArNTQxLDEwIEBACiAgKiBJbiBzdGF0aWMsIHRoZSBwaW5faW5kZXggaXMgZml4ZWQgYmFzZWQgb24gbW9kdWxlX2lkIGFuZCBpbnN0YW5jZSBpZAogICovCiBzdGF0aWMgaW50IHNrbF9hbGxvY19xdWV1ZShzdHJ1Y3Qgc2tsX21vZHVsZV9waW4gKm1waW4sCi0JCQlzdHJ1Y3Qgc2tsX21vZHVsZV9pbnN0X2lkIGlkLCBpbnQgbWF4KQorCQkJc3RydWN0IHNrbF9tb2R1bGVfY2ZnICp0Z3RfY2ZnLCBpbnQgbWF4KQogewogCWludCBpOwotCisJc3RydWN0IHNrbF9tb2R1bGVfaW5zdF9pZCBpZCA9IHRndF9jZmctPmlkOwogCS8qCiAJICogaWYgcGluIGluIGR5bmFtaWMsIGZpbmQgZmlyc3QgZnJlZSBwaW4KIAkgKiBvdGhlcndpc2UgZmluZCBtYXRjaCBtb2R1bGUgYW5kIGluc3RhbmNlIGlkIHBpbiBhcyB0b3BvbG9neSB3aWxsCkBAIC01ODMsMTYgKzU1MywyMyBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgIHsKIAkJaWYgKG1waW5baV0uaXNfZHluYW1pYykgewotCQkJaWYgKCFtcGluW2ldLmluX3VzZSkgeworCQkJaWYgKCFtcGluW2ldLmluX3VzZSAmJgorCQkJCW1waW5baV0ucGluX3N0YXRlID09IFNLTF9QSU5fVU5CSU5EKSB7CisKIAkJCQltcGluW2ldLmluX3VzZSA9IHRydWU7CiAJCQkJbXBpbltpXS5pZC5tb2R1bGVfaWQgPSBpZC5tb2R1bGVfaWQ7CiAJCQkJbXBpbltpXS5pZC5pbnN0YW5jZV9pZCA9IGlkLmluc3RhbmNlX2lkOworCQkJCW1waW5baV0udGd0X21jZmcgPSB0Z3RfY2ZnOwogCQkJCXJldHVybiBpOwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKG1waW5baV0uaWQubW9kdWxlX2lkID09IGlkLm1vZHVsZV9pZCAmJgotCQkJCW1waW5baV0uaWQuaW5zdGFuY2VfaWQgPT0gaWQuaW5zdGFuY2VfaWQpCisJCQkJbXBpbltpXS5pZC5pbnN0YW5jZV9pZCA9PSBpZC5pbnN0YW5jZV9pZCAmJgorCQkJCW1waW5baV0ucGluX3N0YXRlID09IFNLTF9QSU5fVU5CSU5EKSB7CisKKwkJCQltcGluW2ldLnRndF9tY2ZnID0gdGd0X2NmZzsKIAkJCQlyZXR1cm4gaTsKKwkJCX0KIAkJfQogCX0KIApAQCAtNjA2LDYgKzU4MywyOCBAQAogCQltcGluW3FfaW5kZXhdLmlkLm1vZHVsZV9pZCA9IDA7CiAJCW1waW5bcV9pbmRleF0uaWQuaW5zdGFuY2VfaWQgPSAwOwogCX0KKwltcGluW3FfaW5kZXhdLnBpbl9zdGF0ZSA9IFNLTF9QSU5fVU5CSU5EOworCW1waW5bcV9pbmRleF0udGd0X21jZmcgPSBOVUxMOworfQorCisvKiBNb2R1bGUgc3RhdGUgd2lsbCBiZSBzZXQgdG8gdW5pbnQsIGlmIGFsbCB0aGUgb3V0IHBpbiBzdGF0ZSBpcyBVTkJJTkQgKi8KKworc3RhdGljIHZvaWQgc2tsX2NsZWFyX21vZHVsZV9zdGF0ZShzdHJ1Y3Qgc2tsX21vZHVsZV9waW4gKm1waW4sIGludCBtYXgsCisJCQkJCQlzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1jZmcpCit7CisJaW50IGk7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSAgeworCQlpZiAobXBpbltpXS5waW5fc3RhdGUgPT0gU0tMX1BJTl9VTkJJTkQpCisJCQljb250aW51ZTsKKwkJZm91bmQgPSB0cnVlOworCQlicmVhazsKKwl9CisKKwlpZiAoIWZvdW5kKQorCQltY2ZnLT5tX3N0YXRlID0gU0tMX01PRFVMRV9VTklOSVQ7CisJcmV0dXJuOwogfQogCiAvKgpAQCAtNjE1LDcgKzYxNCw3IEBACiAgKiBpbnZva2UgdGhlIERTUCBieSBzZW5kaW5nIElQQyBJTklUX0lOU1RBTkNFIHVzaW5nIGlwYyBoZWxwZXIKICAqLwogaW50IHNrbF9pbml0X21vZHVsZShzdHJ1Y3Qgc2tsX3NzdCAqY3R4LAotCQkJc3RydWN0IHNrbF9tb2R1bGVfY2ZnICptY29uZmlnLCBjaGFyICpwYXJhbSkKKwkJCXN0cnVjdCBza2xfbW9kdWxlX2NmZyAqbWNvbmZpZykKIHsKIAl1MTYgbW9kdWxlX2NvbmZpZ19zaXplID0gMDsKIAl2b2lkICpwYXJhbV9kYXRhID0gTlVMTDsKQEAgLTY4MiwzNyArNjgxLDMwIEBACiAJc3RydWN0IHNrbF9tb2R1bGVfaW5zdF9pZCBkc3RfaWQgPSBkc3RfbWNmZy0+aWQ7CiAJaW50IGluX21heCA9IGRzdF9tY2ZnLT5tYXhfaW5fcXVldWU7CiAJaW50IG91dF9tYXggPSBzcmNfbWNmZy0+bWF4X291dF9xdWV1ZTsKLQlpbnQgc3JjX2luZGV4LCBkc3RfaW5kZXg7CisJaW50IHNyY19pbmRleCwgZHN0X2luZGV4LCBzcmNfcGluX3N0YXRlLCBkc3RfcGluX3N0YXRlOwogCiAJc2tsX2R1bXBfYmluZF9pbmZvKGN0eCwgc3JjX21jZmcsIGRzdF9tY2ZnKTsKIAotCWlmIChzcmNfbWNmZy0+bV9zdGF0ZSAhPSBTS0xfTU9EVUxFX0JJTkRfRE9ORSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIGlmIGludHJhIG1vZHVsZSB1bmJpbmQsIGNoZWNrIGlmIGJvdGggbW9kdWxlcyBhcmUgQklORCwKLQkgKiB0aGVuIHNlbmQgdW5iaW5kCi0JICovCi0JaWYgKChzcmNfbWNmZy0+cGlwZS0+cHBsX2lkICE9IGRzdF9tY2ZnLT5waXBlLT5wcGxfaWQpICYmCi0JCQkJZHN0X21jZmctPm1fc3RhdGUgIT0gU0tMX01PRFVMRV9CSU5EX0RPTkUpCi0JCXJldHVybiAwOwotCWVsc2UgaWYgKHNyY19tY2ZnLT5tX3N0YXRlIDwgU0tMX01PRFVMRV9JTklUX0RPTkUgJiYKLQkJCQkgZHN0X21jZmctPm1fc3RhdGUgPCBTS0xfTU9EVUxFX0lOSVRfRE9ORSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBnZXQgc3JjIHF1ZXVlIGluZGV4ICovCiAJc3JjX2luZGV4ID0gc2tsX2dldF9xdWV1ZV9pbmRleChzcmNfbWNmZy0+bV9vdXRfcGluLCBkc3RfaWQsIG91dF9tYXgpOwogCWlmIChzcmNfaW5kZXggPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1zZy5zcmNfcXVldWUgPSBzcmNfbWNmZy0+bV9vdXRfcGluW3NyY19pbmRleF0ucGluX2luZGV4OworCW1zZy5zcmNfcXVldWUgPSBzcmNfaW5kZXg7CiAKIAkvKiBnZXQgZHN0IHF1ZXVlIGluZGV4ICovCiAJZHN0X2luZGV4ICA9IHNrbF9nZXRfcXVldWVfaW5kZXgoZHN0X21jZmctPm1faW5fcGluLCBzcmNfaWQsIGluX21heCk7CiAJaWYgKGRzdF9pbmRleCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXNnLmRzdF9xdWV1ZSA9IGRzdF9tY2ZnLT5tX2luX3Bpbltkc3RfaW5kZXhdLnBpbl9pbmRleDsKKwltc2cuZHN0X3F1ZXVlID0gZHN0X2luZGV4OworCisJc3JjX3Bpbl9zdGF0ZSA9IHNyY19tY2ZnLT5tX291dF9waW5bc3JjX2luZGV4XS5waW5fc3RhdGU7CisJZHN0X3Bpbl9zdGF0ZSA9IGRzdF9tY2ZnLT5tX2luX3Bpbltkc3RfaW5kZXhdLnBpbl9zdGF0ZTsKKworCWlmIChzcmNfcGluX3N0YXRlICE9IFNLTF9QSU5fQklORF9ET05FIHx8CisJCWRzdF9waW5fc3RhdGUgIT0gU0tMX1BJTl9CSU5EX0RPTkUpCisJCXJldHVybiAwOwogCiAJbXNnLm1vZHVsZV9pZCA9IHNyY19tY2ZnLT5pZC5tb2R1bGVfaWQ7CiAJbXNnLmluc3RhbmNlX2lkID0gc3JjX21jZmctPmlkLmluc3RhbmNlX2lkOwpAQCAtNzIyLDEwICs3MTQsMTUgQEAKIAogCXJldCA9IHNrbF9pcGNfYmluZF91bmJpbmQoJmN0eC0+aXBjLCAmbXNnKTsKIAlpZiAoIXJldCkgewotCQlzcmNfbWNmZy0+bV9zdGF0ZSA9IFNLTF9NT0RVTEVfVU5JTklUOwogCQkvKiBmcmVlIHF1ZXVlIG9ubHkgaWYgdW5iaW5kIGlzIHN1Y2Nlc3MgKi8KIAkJc2tsX2ZyZWVfcXVldWUoc3JjX21jZmctPm1fb3V0X3Bpbiwgc3JjX2luZGV4KTsKIAkJc2tsX2ZyZWVfcXVldWUoZHN0X21jZmctPm1faW5fcGluLCBkc3RfaW5kZXgpOworCisJCS8qCisJCSAqIGNoZWNrIG9ubHkgaWYgc3JjIG1vZHVsZSBiaW5kIHN0YXRlLCBiaW5kIGlzCisJCSAqIGFsd2F5cyBmcm9tIHNyYyAtPiBzaW5rCisJCSAqLworCQlza2xfY2xlYXJfbW9kdWxlX3N0YXRlKHNyY19tY2ZnLT5tX291dF9waW4sIG91dF9tYXgsIHNyY19tY2ZnKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzQ0LDggKzc0MSw2IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc2tsX2lwY19iaW5kX3VuYmluZF9tc2cgbXNnOwotCXN0cnVjdCBza2xfbW9kdWxlX2luc3RfaWQgc3JjX2lkID0gc3JjX21jZmctPmlkOwotCXN0cnVjdCBza2xfbW9kdWxlX2luc3RfaWQgZHN0X2lkID0gZHN0X21jZmctPmlkOwogCWludCBpbl9tYXggPSBkc3RfbWNmZy0+bWF4X2luX3F1ZXVlOwogCWludCBvdXRfbWF4ID0gc3JjX21jZmctPm1heF9vdXRfcXVldWU7CiAJaW50IHNyY19pbmRleCwgZHN0X2luZGV4OwpAQCAtNzU2LDE4ICs3NTEsMTggQEAKIAkJZHN0X21jZmctPm1fc3RhdGUgPCBTS0xfTU9EVUxFX0lOSVRfRE9ORSkKIAkJcmV0dXJuIDA7CiAKLQlzcmNfaW5kZXggPSBza2xfYWxsb2NfcXVldWUoc3JjX21jZmctPm1fb3V0X3BpbiwgZHN0X2lkLCBvdXRfbWF4KTsKKwlzcmNfaW5kZXggPSBza2xfYWxsb2NfcXVldWUoc3JjX21jZmctPm1fb3V0X3BpbiwgZHN0X21jZmcsIG91dF9tYXgpOwogCWlmIChzcmNfaW5kZXggPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1zZy5zcmNfcXVldWUgPSBzcmNfbWNmZy0+bV9vdXRfcGluW3NyY19pbmRleF0ucGluX2luZGV4OwotCWRzdF9pbmRleCA9IHNrbF9hbGxvY19xdWV1ZShkc3RfbWNmZy0+bV9pbl9waW4sIHNyY19pZCwgaW5fbWF4KTsKKwltc2cuc3JjX3F1ZXVlID0gc3JjX2luZGV4OworCWRzdF9pbmRleCA9IHNrbF9hbGxvY19xdWV1ZShkc3RfbWNmZy0+bV9pbl9waW4sIHNyY19tY2ZnLCBpbl9tYXgpOwogCWlmIChkc3RfaW5kZXggPCAwKSB7CiAJCXNrbF9mcmVlX3F1ZXVlKHNyY19tY2ZnLT5tX291dF9waW4sIHNyY19pbmRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1zZy5kc3RfcXVldWUgPSBkc3RfbWNmZy0+bV9pbl9waW5bZHN0X2luZGV4XS5waW5faW5kZXg7CisJbXNnLmRzdF9xdWV1ZSA9IGRzdF9pbmRleDsKIAogCWRldl9kYmcoY3R4LT5kZXYsICJzcmMgcXVldWUgPSAlZCBkc3QgcXVldWUgPSVkXG4iLAogCQkJIG1zZy5zcmNfcXVldWUsIG1zZy5kc3RfcXVldWUpOwpAQCAtNzgyLDYgKzc3Nyw4IEBACiAKIAlpZiAoIXJldCkgewogCQlzcmNfbWNmZy0+bV9zdGF0ZSA9IFNLTF9NT0RVTEVfQklORF9ET05FOworCQlzcmNfbWNmZy0+bV9vdXRfcGluW3NyY19pbmRleF0ucGluX3N0YXRlID0gU0tMX1BJTl9CSU5EX0RPTkU7CisJCWRzdF9tY2ZnLT5tX2luX3Bpbltkc3RfaW5kZXhdLnBpbl9zdGF0ZSA9IFNLTF9QSU5fQklORF9ET05FOwogCX0gZWxzZSB7CiAJCS8qIGVycm9yIGNhc2UgLCBpZiBJUEMgZmFpbHMsIGNsZWFyIHRoZSBxdWV1ZSBpbmRleCAqLwogCQlza2xfZnJlZV9xdWV1ZShzcmNfbWNmZy0+bV9vdXRfcGluLCBzcmNfaW5kZXgpOwpAQCAtODUyLDYgKzg0OSw4IEBACiAJCXJldCA9IHNrbF9pcGNfZGVsZXRlX3BpcGVsaW5lKCZjdHgtPmlwYywgcGlwZS0+cHBsX2lkKTsKIAkJaWYgKHJldCA8IDApCiAJCQlkZXZfZXJyKGN0eC0+ZGV2LCAiRmFpbGVkIHRvIGRlbGV0ZSBwaXBlbGluZVxuIik7CisKKwkJcGlwZS0+c3RhdGUgPSBTS0xfUElQRV9JTlZBTElEOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC05MTYsMyArOTE1LDMwIEBACiAKIAlyZXR1cm4gMDsKIH0KKworLyogQWxnbyBwYXJhbWV0ZXIgc2V0IGhlbHBlciBmdW5jdGlvbiAqLworaW50IHNrbF9zZXRfbW9kdWxlX3BhcmFtcyhzdHJ1Y3Qgc2tsX3NzdCAqY3R4LCB1MzIgKnBhcmFtcywgaW50IHNpemUsCisJCQkJdTMyIHBhcmFtX2lkLCBzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1jZmcpCit7CisJc3RydWN0IHNrbF9pcGNfbGFyZ2VfY29uZmlnX21zZyBtc2c7CisKKwltc2cubW9kdWxlX2lkID0gbWNmZy0+aWQubW9kdWxlX2lkOworCW1zZy5pbnN0YW5jZV9pZCA9IG1jZmctPmlkLmluc3RhbmNlX2lkOworCW1zZy5wYXJhbV9kYXRhX3NpemUgPSBzaXplOworCW1zZy5sYXJnZV9wYXJhbV9pZCA9IHBhcmFtX2lkOworCisJcmV0dXJuIHNrbF9pcGNfc2V0X2xhcmdlX2NvbmZpZygmY3R4LT5pcGMsICZtc2csIHBhcmFtcyk7Cit9CisKK2ludCBza2xfZ2V0X21vZHVsZV9wYXJhbXMoc3RydWN0IHNrbF9zc3QgKmN0eCwgdTMyICpwYXJhbXMsIGludCBzaXplLAorCQkJICB1MzIgcGFyYW1faWQsIHN0cnVjdCBza2xfbW9kdWxlX2NmZyAqbWNmZykKK3sKKwlzdHJ1Y3Qgc2tsX2lwY19sYXJnZV9jb25maWdfbXNnIG1zZzsKKworCW1zZy5tb2R1bGVfaWQgPSBtY2ZnLT5pZC5tb2R1bGVfaWQ7CisJbXNnLmluc3RhbmNlX2lkID0gbWNmZy0+aWQuaW5zdGFuY2VfaWQ7CisJbXNnLnBhcmFtX2RhdGFfc2l6ZSA9IHNpemU7CisJbXNnLmxhcmdlX3BhcmFtX2lkID0gcGFyYW1faWQ7CisKKwlyZXR1cm4gc2tsX2lwY19nZXRfbGFyZ2VfY29uZmlnKCZjdHgtPmlwYywgJm1zZywgcGFyYW1zKTsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC1uaGx0LmMgYi9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtbmhsdC5jCmluZGV4IGIwYzdiZDEuLjZlNGIyMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC1uaGx0LmMKKysrIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLW5obHQuYwpAQCAtNTUsNyArNTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5obHRfc3BlY2lmaWNfY2ZnICpza2xfZ2V0X3NwZWNpZmljX2NmZygKIAkJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbmhsdF9mbXQgKmZtdCwKLQkJdTggbm9fY2gsIHUzMiByYXRlLCB1MTYgYnBzKQorCQl1OCBub19jaCwgdTMyIHJhdGUsIHUxNiBicHMsIHU4IGxpbmt0eXBlKQogewogCXN0cnVjdCBuaGx0X3NwZWNpZmljX2NmZyAqc3BfY29uZmlnOwogCXN0cnVjdCB3YXZfZm10ICp3Zm10OwpAQCAtNjgsMTEgKzY4LDE3IEBACiAJCXdmbXQgPSAmZm10X2NvbmZpZy0+Zm10X2V4dC5mbXQ7CiAJCWRldl9kYmcoZGV2LCAiY2g9JWQgZm10PSVkIHNfcmF0ZT0lZFxuIiwgd2ZtdC0+Y2hhbm5lbHMsCiAJCQkgd2ZtdC0+Yml0c19wZXJfc2FtcGxlLCB3Zm10LT5zYW1wbGVzX3Blcl9zZWMpOwotCQlpZiAod2ZtdC0+Y2hhbm5lbHMgPT0gbm9fY2ggJiYgd2ZtdC0+c2FtcGxlc19wZXJfc2VjID09IHJhdGUgJiYKLQkJCQkJd2ZtdC0+Yml0c19wZXJfc2FtcGxlID09IGJwcykgeworCQlpZiAod2ZtdC0+Y2hhbm5lbHMgPT0gbm9fY2ggJiYgd2ZtdC0+Yml0c19wZXJfc2FtcGxlID09IGJwcykgeworCQkJLyoKKwkJCSAqIGlmIGxpbmsgdHlwZSBpcyBkbWljIGlnbm9yZSByYXRlIGNoZWNrIGFzIHRoZSBibG9iIGlzCisJCQkgKiBnZW5lcmljIGZvciBhbGwgcmF0ZXMKKwkJCSAqLwogCQkJc3BfY29uZmlnID0gJmZtdF9jb25maWctPmNvbmZpZzsKKwkJCWlmIChsaW5rdHlwZSA9PSBOSExUX0xJTktfRE1JQykKKwkJCQlyZXR1cm4gc3BfY29uZmlnOwogCi0JCQlyZXR1cm4gc3BfY29uZmlnOworCQkJaWYgKHdmbXQtPnNhbXBsZXNfcGVyX3NlYyA9PSByYXRlKQorCQkJCXJldHVybiBzcF9jb25maWc7CiAJCX0KIAogCQlmbXRfY29uZmlnID0gKHN0cnVjdCBuaGx0X2ZtdF9jZmcgKikoZm10X2NvbmZpZy0+Y29uZmlnLmNhcHMgKwpAQCAtMTE1LDcgKzEyMSw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gYnVzLT5kZXY7CiAJc3RydWN0IG5obHRfc3BlY2lmaWNfY2ZnICpzcF9jb25maWc7CiAJc3RydWN0IG5obHRfYWNwaV90YWJsZSAqbmhsdCA9IChzdHJ1Y3QgbmhsdF9hY3BpX3RhYmxlICopc2tsLT5uaGx0OwotCXUxNiBicHMgPSBudW1fY2ggKiBzX2ZtdDsKKwl1MTYgYnBzID0gKHNfZm10ID09IDE2KSA/IDE2IDogMzI7CiAJdTggajsKIAogCWR1bXBfY29uZmlnKGRldiwgaW5zdGFuY2UsIGxpbmtfdHlwZSwgc19mbXQsIG51bV9jaCwgc19yYXRlLCBkaXJuLCBicHMpOwpAQCAtMTI4LDcgKzEzNCw4IEBACiAJCWlmIChza2xfY2hlY2tfZXBfbWF0Y2goZGV2LCBlcG50LCBpbnN0YW5jZSwgbGlua190eXBlLCBkaXJuKSkgewogCQkJZm10ID0gKHN0cnVjdCBuaGx0X2ZtdCAqKShlcG50LT5jb25maWcuY2FwcyArCiAJCQkJCQkgZXBudC0+Y29uZmlnLnNpemUpOwotCQkJc3BfY29uZmlnID0gc2tsX2dldF9zcGVjaWZpY19jZmcoZGV2LCBmbXQsIG51bV9jaCwgc19yYXRlLCBicHMpOworCQkJc3BfY29uZmlnID0gc2tsX2dldF9zcGVjaWZpY19jZmcoZGV2LCBmbXQsIG51bV9jaCwKKwkJCQkJCQlzX3JhdGUsIGJwcywgbGlua190eXBlKTsKIAkJCWlmIChzcF9jb25maWcpCiAJCQkJcmV0dXJuIHNwX2NvbmZpZzsKIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXBjbS5jIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXBjbS5jCmluZGV4IGEyZjk0Y2UuLmYzNTUzMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC1wY20uYworKysgYi9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtcGNtLmMKQEAgLTI1LDkgKzI1LDEyIEBACiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSAic2tsLmgiCiAjaW5jbHVkZSAic2tsLXRvcG9sb2d5LmgiCisjaW5jbHVkZSAic2tsLXNzdC1kc3AuaCIKKyNpbmNsdWRlICJza2wtc3N0LWlwYy5oIgogCiAjZGVmaW5lIEhEQV9NT05PIDEKICNkZWZpbmUgSERBX1NURVJFTyAyCisjZGVmaW5lIEhEQV9RVUFEIDQKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGF6eF9wY21faHcgPSB7CiAJLmluZm8gPQkJCShTTkRSVl9QQ01fSU5GT19NTUFQIHwKQEAgLTM1LDE2ICszOCwyMCBAQAogCQkJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CiAJCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAogCQkJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCQkJIFNORFJWX1BDTV9JTkZPX1JFU1VNRSB8CiAJCQkJIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQgfAogCQkJCSBTTkRSVl9QQ01fSU5GT19IQVNfV0FMTF9DTE9DSyB8IC8qIGxlZ2FjeSAqLwogCQkJCSBTTkRSVl9QQ01fSU5GT19IQVNfTElOS19BVElNRSB8CiAJCQkJIFNORFJWX1BDTV9JTkZPX05PX1BFUklPRF9XQUtFVVApLAotCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV80ODAwMCwKLQkucmF0ZV9taW4gPQkJNDgwMDAsCisJLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFIHwKKwkJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSwKKwkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8CisJCQkJU05EUlZfUENNX1JBVEVfODAwMCwKKwkucmF0ZV9taW4gPQkJODAwMCwKIAkucmF0ZV9tYXggPQkJNDgwMDAsCi0JLmNoYW5uZWxzX21pbiA9CQkyLAotCS5jaGFubmVsc19tYXggPQkJMiwKKwkuY2hhbm5lbHNfbWluID0JCTEsCisJLmNoYW5uZWxzX21heCA9CQlIREFfUVVBRCwKIAkuYnVmZmVyX2J5dGVzX21heCA9CUFaWF9NQVhfQlVGX1NJWkUsCiAJLnBlcmlvZF9ieXRlc19taW4gPQkxMjgsCiAJLnBlcmlvZF9ieXRlc19tYXggPQlBWlhfTUFYX0JVRl9TSVpFIC8gMiwKQEAgLTEwNSw2ICsxMTIsMzEgQEAKIAkJcmV0dXJuIEhEQUNfRVhUX1NUUkVBTV9UWVBFX0NPVVBMRUQ7CiB9CiAKKy8qCisgKiBjaGVjayBpZiB0aGUgc3RyZWFtIG9wZW5lZCBpcyBtYXJrZWQgYXMgaWdub3JlX3N1c3BlbmQgYnkgbWFjaGluZSwgaWYgc28KKyAqIHRoZW4gZW5hYmxlIHN1c3BlbmRfYWN0aXZlIHJlZmNvdW50CisgKgorICogVGhlIGNvdW50IHN1cGVuZF9hY3RpdmUgZG9lcyBub3QgbmVlZCBsb2NrIGFzIGl0IGlzIHVzZWQgaW4gb3Blbi9jbG9zZQorICogYW5kIHN1c3BlbmQgY29udGV4dAorICovCitzdGF0aWMgdm9pZCBza2xfc2V0X3N1c3BlbmRfYWN0aXZlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBoZGFjX2V4dF9idXMgKmVidXMgPSBkZXZfZ2V0X2RydmRhdGEoZGFpLT5kZXYpOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OworCXN0cnVjdCBza2wgKnNrbCA9IGVidXNfdG9fc2tsKGVidXMpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXcgPSBkYWktPnBsYXliYWNrX3dpZGdldDsKKwllbHNlCisJCXcgPSBkYWktPmNhcHR1cmVfd2lkZ2V0OworCisJaWYgKHctPmlnbm9yZV9zdXNwZW5kICYmIGVuYWJsZSkKKwkJc2tsLT5zdXBlbmRfYWN0aXZlKys7CisJZWxzZSBpZiAody0+aWdub3JlX3N1c3BlbmQgJiYgIWVuYWJsZSkKKwkJc2tsLT5zdXBlbmRfYWN0aXZlLS07Cit9CisKIHN0YXRpYyBpbnQgc2tsX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKQEAgLTExMiwxMiArMTQ0LDggQEAKIAlzdHJ1Y3QgaGRhY19leHRfc3RyZWFtICpzdHJlYW07CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc2tsX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXM7Ci0JaW50IHJldDsKIAogCWRldl9kYmcoZGFpLT5kZXYsICIlczogJXNcbiIsIF9fZnVuY19fLCBkYWktPm5hbWUpOwotCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGFpLT5kZXYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwogCiAJc3RyZWFtID0gc25kX2hkYWNfZXh0X3N0cmVhbV9hc3NpZ24oZWJ1cywgc3Vic3RyZWFtLAogCQkJCQlza2xfZ2V0X2hvc3Rfc3RyZWFtX3R5cGUoZWJ1cykpOwpAQCAtMTQ2LDYgKzE3NCw3IEBACiAKIAlkZXZfZGJnKGRhaS0+ZGV2LCAic3RyZWFtIHRhZyBzZXQgaW4gZG1hIHBhcmFtcz0lZFxuIiwKIAkJCQkgZG1hX3BhcmFtcy0+c3RyZWFtX3RhZyk7CisJc2tsX3NldF9zdXNwZW5kX2FjdGl2ZShzdWJzdHJlYW0sIGRhaSwgdHJ1ZSk7CiAJc25kX3BjbV9zZXRfc3luYyhzdWJzdHJlYW0pOwogCiAJcmV0dXJuIDA7CkBAIC0xODUsMTAgKzIxNCw2IEBACiAJaW50IGVycjsKIAogCWRldl9kYmcoZGFpLT5kZXYsICIlczogJXNcbiIsIF9fZnVuY19fLCBkYWktPm5hbWUpOwotCWlmIChoZGFjX3N0cmVhbShzdHJlYW0pLT5wcmVwYXJlZCkgewotCQlkZXZfZGJnKGRhaS0+ZGV2LCAiYWxyZWFkeSBzdHJlYW0gaXMgcHJlcGFyZWQgLSByZXR1cm5pbmdcbiIpOwotCQlyZXR1cm4gMDsKLQl9CiAKIAlmb3JtYXRfdmFsID0gc2tsX2dldF9mb3JtYXQoc3Vic3RyZWFtLCBkYWkpOwogCWRldl9kYmcoZGFpLT5kZXYsICJzdHJlYW1fdGFnPSVkIGZvcm1hdHZhbHVlPSVkXG4iLApAQCAtMjUwLDYgKzI3NSw3IEBACiAJc3RydWN0IGhkYWNfZXh0X3N0cmVhbSAqc3RyZWFtID0gZ2V0X2hkYWNfZXh0X3N0cmVhbShzdWJzdHJlYW0pOwogCXN0cnVjdCBoZGFjX2V4dF9idXMgKmVidXMgPSBkZXZfZ2V0X2RydmRhdGEoZGFpLT5kZXYpOwogCXN0cnVjdCBza2xfZG1hX3BhcmFtcyAqZG1hX3BhcmFtcyA9IE5VTEw7CisJc3RydWN0IHNrbCAqc2tsID0gZWJ1c190b19za2woZWJ1cyk7CiAKIAlkZXZfZGJnKGRhaS0+ZGV2LCAiJXM6ICVzXG4iLCBfX2Z1bmNfXywgZGFpLT5uYW1lKTsKIApAQCAtMjYxLDkgKzI4NywxOCBAQAogCSAqIGRtYV9wYXJhbXMKIAkgKi8KIAlzbmRfc29jX2RhaV9zZXRfZG1hX2RhdGEoZGFpLCBzdWJzdHJlYW0sIE5VTEwpOworCXNrbF9zZXRfc3VzcGVuZF9hY3RpdmUoc3Vic3RyZWFtLCBkYWksIGZhbHNlKTsKIAotCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koZGFpLT5kZXYpOwotCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGRhaS0+ZGV2KTsKKwkvKgorCSAqIGNoZWNrIGlmIGNsb3NlIGlzIGZvciAiUmVmZXJlbmNlIFBpbiIgYW5kIHNldCBiYWNrIHRoZQorCSAqIENHQ1RMLk1JU0NCRENHRSBpZiBkaXNhYmxlZCBieSBkcml2ZXIKKwkgKi8KKwlpZiAoIXN0cm5jbXAoZGFpLT5uYW1lLCAiUmVmZXJlbmNlIFBpbiIsIDEzKSAmJgorCQkJc2tsLT5za2xfc3N0LT5taXNjYmRjZ19kaXNhYmxlZCkgeworCQlza2wtPnNrbF9zc3QtPmVuYWJsZV9taXNjYmRjZ2UoZGFpLT5kZXYsIHRydWUpOworCQlza2wtPnNrbF9zc3QtPm1pc2NiZGNnX2Rpc2FibGVkID0gZmFsc2U7CisJfQorCiAJa2ZyZWUoZG1hX3BhcmFtcyk7CiB9CiAKQEAgLTI5MSw3ICszMjYsNTMgQEAKIAlwX3BhcmFtcy5jaCA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOwogCXBfcGFyYW1zLnNfZnJlcSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CiAJcF9wYXJhbXMuc3RyZWFtID0gc3Vic3RyZWFtLT5zdHJlYW07Ci0Jc2tsX3RwbGdfYmVfdXBkYXRlX3BhcmFtcyhkYWksICZwX3BhcmFtcyk7CisKKwlyZXR1cm4gc2tsX3RwbGdfYmVfdXBkYXRlX3BhcmFtcyhkYWksICZwX3BhcmFtcyk7Cit9CisKK3N0YXRpYyBpbnQgc2tsX2RlY291cGxlZF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlpbnQgY21kKQoreworCXN0cnVjdCBoZGFjX2V4dF9idXMgKmVidXMgPSBnZXRfYnVzX2N0eChzdWJzdHJlYW0pOworCXN0cnVjdCBoZGFjX2J1cyAqYnVzID0gZWJ1c190b19oYnVzKGVidXMpOworCXN0cnVjdCBoZGFjX2V4dF9zdHJlYW0gKnN0cmVhbTsKKwlpbnQgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBjb29raWU7CisJc3RydWN0IGhkYWNfc3RyZWFtICpoc3RyOworCisJc3RyZWFtID0gZ2V0X2hkYWNfZXh0X3N0cmVhbShzdWJzdHJlYW0pOworCWhzdHIgPSBoZGFjX3N0cmVhbShzdHJlYW0pOworCisJaWYgKCFoc3RyLT5wcmVwYXJlZCkKKwkJcmV0dXJuIC1FUElQRTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCXN0YXJ0ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJc3RhcnQgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZidXMtPnJlZ19sb2NrLCBjb29raWUpOworCisJaWYgKHN0YXJ0KSB7CisJCXNuZF9oZGFjX3N0cmVhbV9zdGFydChoZGFjX3N0cmVhbShzdHJlYW0pLCB0cnVlKTsKKwkJc25kX2hkYWNfc3RyZWFtX3RpbWVjb3VudGVyX2luaXQoaHN0ciwgMCk7CisJfSBlbHNlIHsKKwkJc25kX2hkYWNfc3RyZWFtX3N0b3AoaGRhY19zdHJlYW0oc3RyZWFtKSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzLT5yZWdfbG9jaywgY29va2llKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAyLDIzICszODMsNzIgQEAKIAlzdHJ1Y3Qgc2tsICpza2wgPSBnZXRfc2tsX2N0eChkYWktPmRldik7CiAJc3RydWN0IHNrbF9zc3QgKmN0eCA9IHNrbC0+c2tsX3NzdDsKIAlzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1jb25maWc7CisJc3RydWN0IGhkYWNfZXh0X2J1cyAqZWJ1cyA9IGdldF9idXNfY3R4KHN1YnN0cmVhbSk7CisJc3RydWN0IGhkYWNfZXh0X3N0cmVhbSAqc3RyZWFtID0gZ2V0X2hkYWNfZXh0X3N0cmVhbShzdWJzdHJlYW0pOworCWludCByZXQ7CiAKIAltY29uZmlnID0gc2tsX3RwbGdfZmVfZ2V0X2Nwcl9tb2R1bGUoZGFpLCBzdWJzdHJlYW0tPnN0cmVhbSk7CiAJaWYgKCFtY29uZmlnKQogCQlyZXR1cm4gLUVJTzsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCQlza2xfcGNtX3ByZXBhcmUoc3Vic3RyZWFtLCBkYWkpOworCQkvKgorCQkgKiBlbmFibGUgRE1BIFJlc3VtZSBlbmFibGUgYml0IGZvciB0aGUgc3RyZWFtLCBzZXQgdGhlIGRwaWIKKwkJICogJiBscGliIHBvc2l0aW9uIHRvIHJlc3VuZSBiZWZvcmUgc3RhcnRpbmcgdGhlIERNQQorCQkgKi8KKwkJc25kX2hkYWNfZXh0X3N0cmVhbV9kcnNtX2VuYWJsZShlYnVzLCB0cnVlLAorCQkJCQloZGFjX3N0cmVhbShzdHJlYW0pLT5pbmRleCk7CisJCXNuZF9oZGFjX2V4dF9zdHJlYW1fc2V0X2RwaWJyKGVidXMsIHN0cmVhbSwgc3RyZWFtLT5kcGliKTsKKwkJc25kX2hkYWNfZXh0X3N0cmVhbV9zZXRfbHBpYihzdHJlYW0sIHN0cmVhbS0+bHBpYik7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJLyoKKwkJICogU3RhcnQgSE9TVCBETUEgYW5kIFN0YXJ0IEZFIFBpcGUuVGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdAorCQkgKiB0aGVyZSBhcmUgbm8gdW5kZXJydW4vb3ZlcnJ1biBpbiB0aGUgY2FzZSB3aGVuIHRoZSBGRQorCQkgKiBwaXBlbGluZSBpcyBzdGFydGVkIGJ1dCB0aGVyZSBpcyBhIGRlbGF5IGluIHN0YXJ0aW5nIHRoZQorCQkgKiBETUEgY2hhbm5lbCBvbiB0aGUgaG9zdC4KKwkJICovCisJCXNuZF9oZGFjX2V4dF9zdHJlYW1fZGVjb3VwbGUoZWJ1cywgc3RyZWFtLCB0cnVlKTsKKwkJcmV0ID0gc2tsX2RlY291cGxlZF90cmlnZ2VyKHN1YnN0cmVhbSwgY21kKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OwogCQlyZXR1cm4gc2tsX3J1bl9waXBlKGN0eCwgbWNvbmZpZy0+cGlwZSk7CisJCWJyZWFrOwogCiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKLQkJcmV0dXJuIHNrbF9zdG9wX3BpcGUoY3R4LCBtY29uZmlnLT5waXBlKTsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCS8qCisJCSAqIFN0b3AgRkUgUGlwZSBmaXJzdCBhbmQgc3RvcCBETUEuIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQKKwkJICogdGhlcmUgYXJlIG5vIHVuZGVycnVuL292ZXJydW4gaW4gdGhlIGNhc2UgaWYgdGhlcmUgaXMgYSBkZWxheQorCQkgKiBiZXR3ZWVuIHRoZSB0d28gb3BlcmF0aW9ucy4KKwkJICovCisJCXJldCA9IHNrbF9zdG9wX3BpcGUoY3R4LCBtY29uZmlnLT5waXBlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHNrbF9kZWNvdXBsZWRfdHJpZ2dlcihzdWJzdHJlYW0sIGNtZCk7CisJCWlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORCkgeworCQkJLyogc2F2ZSB0aGUgZHBpYiBhbmQgbHBpYiBwb3NpdGlvbnMgKi8KKwkJCXN0cmVhbS0+ZHBpYiA9IHJlYWRsKGVidXMtPmJ1cy5yZW1hcF9hZGRyICsKKwkJCQkJQVpYX1JFR19WU19TRFhEUElCX1hCQVNFICsKKwkJCQkJKEFaWF9SRUdfVlNfU0RYRFBJQl9YSU5URVJWQUwgKgorCQkJCQloZGFjX3N0cmVhbShzdHJlYW0pLT5pbmRleCkpOworCisJCQlzdHJlYW0tPmxwaWIgPSBzbmRfaGRhY19zdHJlYW1fZ2V0X3Bvc19scGliKAorCQkJCQkJCWhkYWNfc3RyZWFtKHN0cmVhbSkpOworCQkJc25kX2hkYWNfZXh0X3N0cmVhbV9kZWNvdXBsZShlYnVzLCBzdHJlYW0sIGZhbHNlKTsKKwkJfQorCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXJldHVybiAwOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBza2xfbGlua19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCkBAIC0zNTIsOSArNDgyLDcgQEAKIAlwX3BhcmFtcy5zdHJlYW0gPSBzdWJzdHJlYW0tPnN0cmVhbTsKIAlwX3BhcmFtcy5saW5rX2RtYV9pZCA9IGhkYWNfc3RyZWFtKGxpbmtfZGV2KS0+c3RyZWFtX3RhZyAtIDE7CiAKLQlza2xfdHBsZ19iZV91cGRhdGVfcGFyYW1zKGRhaSwgJnBfcGFyYW1zKTsKLQotCXJldHVybiAwOworCXJldHVybiBza2xfdHBsZ19iZV91cGRhdGVfcGFyYW1zKGRhaSwgJnBfcGFyYW1zKTsKIH0KIAogc3RhdGljIGludCBza2xfbGlua19wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTM2OSwxMSArNDk3LDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwogCXN0cnVjdCBoZGFjX2V4dF9saW5rICpsaW5rOwogCi0JaWYgKGxpbmtfZGV2LT5saW5rX3ByZXBhcmVkKSB7Ci0JCWRldl9kYmcoZGFpLT5kZXYsICJhbHJlYWR5IHN0cmVhbSBpcyBwcmVwYXJlZCAtIHJldHVybmluZ1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQogCWRtYV9wYXJhbXMgID0gKHN0cnVjdCBza2xfZG1hX3BhcmFtcyAqKQogCQkJc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKGNvZGVjX2RhaSwgc3Vic3RyZWFtKTsKIAlpZiAoZG1hX3BhcmFtcykKQEAgLTM4MSwxNCArNTA0LDE1IEBACiAJZGV2X2RiZyhkYWktPmRldiwgInN0cmVhbV90YWc9JWQgZm9ybWF0dmFsdWU9JWQgY29kZWNfZGFpX25hbWU9JXNcbiIsCiAJCQloZGFjX3N0cmVhbShsaW5rX2RldiktPnN0cmVhbV90YWcsIGZvcm1hdF92YWwsIGNvZGVjX2RhaS0+bmFtZSk7CiAKLQlzbmRfaGRhY19leHRfbGlua19zdHJlYW1fcmVzZXQobGlua19kZXYpOwotCi0Jc25kX2hkYWNfZXh0X2xpbmtfc3RyZWFtX3NldHVwKGxpbmtfZGV2LCBmb3JtYXRfdmFsKTsKLQogCWxpbmsgPSBzbmRfaGRhY19leHRfYnVzX2dldF9saW5rKGVidXMsIHJ0ZC0+Y29kZWMtPmNvbXBvbmVudC5uYW1lKTsKIAlpZiAoIWxpbmspCiAJCXJldHVybiAtRUlOVkFMOwogCisJc25kX2hkYWNfZXh0X2J1c19saW5rX3Bvd2VyX3VwKGxpbmspOworCXNuZF9oZGFjX2V4dF9saW5rX3N0cmVhbV9yZXNldChsaW5rX2Rldik7CisKKwlzbmRfaGRhY19leHRfbGlua19zdHJlYW1fc2V0dXAobGlua19kZXYsIGZvcm1hdF92YWwpOworCiAJc25kX2hkYWNfZXh0X2xpbmtfc2V0X3N0cmVhbV9pZChsaW5rLCBoZGFjX3N0cmVhbShsaW5rX2RldiktPnN0cmVhbV90YWcpOwogCWxpbmtfZGV2LT5saW5rX3ByZXBhcmVkID0gMTsKIApAQCAtNDAwLDEyICs1MjQsMTYgQEAKIHsKIAlzdHJ1Y3QgaGRhY19leHRfc3RyZWFtICpsaW5rX2RldiA9CiAJCQkJc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKGRhaSwgc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgaGRhY19leHRfYnVzICplYnVzID0gZ2V0X2J1c19jdHgoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgaGRhY19leHRfc3RyZWFtICpzdHJlYW0gPSBnZXRfaGRhY19leHRfc3RyZWFtKHN1YnN0cmVhbSk7CiAKIAlkZXZfZGJnKGRhaS0+ZGV2LCAiSW4gJXMgY21kPSVkXG4iLCBfX2Z1bmNfXywgY21kKTsKIAlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCQlza2xfbGlua19wY21fcHJlcGFyZShzdWJzdHJlYW0sIGRhaSk7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCXNuZF9oZGFjX2V4dF9zdHJlYW1fZGVjb3VwbGUoZWJ1cywgc3RyZWFtLCB0cnVlKTsKIAkJc25kX2hkYWNfZXh0X2xpbmtfc3RyZWFtX3N0YXJ0KGxpbmtfZGV2KTsKIAkJYnJlYWs7CiAKQEAgLTQxMyw2ICs1NDEsOCBAQAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJCXNuZF9oZGFjX2V4dF9saW5rX3N0cmVhbV9jbGVhcihsaW5rX2Rldik7CisJCWlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORCkKKwkJCXNuZF9oZGFjX2V4dF9zdHJlYW1fZGVjb3VwbGUoZWJ1cywgc3RyZWFtLCBmYWxzZSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTQ0MywxOSArNTczLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBza2xfYmVfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JcmV0dXJuIHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGFpLT5kZXYpOwotfQotCi1zdGF0aWMgdm9pZCBza2xfYmVfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koZGFpLT5kZXYpOwotCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGRhaS0+ZGV2KTsKLX0KLQogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc2tsX3BjbV9kYWlfb3BzID0gewogCS5zdGFydHVwID0gc2tsX3BjbV9vcGVuLAogCS5zaHV0ZG93biA9IHNrbF9wY21fY2xvc2UsCkBAIC00NjYsMjQgKzU4MywxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc2tsX2RtaWNfZGFpX29wcyA9IHsKLQkuc3RhcnR1cCA9IHNrbF9iZV9zdGFydHVwLAogCS5od19wYXJhbXMgPSBza2xfYmVfaHdfcGFyYW1zLAotCS5zaHV0ZG93biA9IHNrbF9iZV9zaHV0ZG93biwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHNrbF9iZV9zc3BfZGFpX29wcyA9IHsKLQkuc3RhcnR1cCA9IHNrbF9iZV9zdGFydHVwLAogCS5od19wYXJhbXMgPSBza2xfYmVfaHdfcGFyYW1zLAotCS5zaHV0ZG93biA9IHNrbF9iZV9zaHV0ZG93biwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHNrbF9saW5rX2RhaV9vcHMgPSB7Ci0JLnN0YXJ0dXAgPSBza2xfYmVfc3RhcnR1cCwKIAkucHJlcGFyZSA9IHNrbF9saW5rX3BjbV9wcmVwYXJlLAogCS5od19wYXJhbXMgPSBza2xfbGlua19od19wYXJhbXMsCiAJLmh3X2ZyZWUgPSBza2xfbGlua19od19mcmVlLAogCS50cmlnZ2VyID0gc2tsX2xpbmtfcGNtX3RyaWdnZXIsCi0JLnNodXRkb3duID0gc2tsX2JlX3NodXRkb3duLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgc2tsX3BsYXRmb3JtX2RhaVtdID0gewpAQCAtNTExLDcgKzYyMiw3IEBACiAJLmNhcHR1cmUgPSB7CiAJCS5zdHJlYW1fbmFtZSA9ICJSZWZlcmVuY2UgQ2FwdHVyZSIsCiAJCS5jaGFubmVsc19taW4gPSBIREFfTU9OTywKLQkJLmNoYW5uZWxzX21heCA9IEhEQV9TVEVSRU8sCisJCS5jaGFubmVsc19tYXggPSBIREFfUVVBRCwKIAkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCwKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAogCX0sCkBAIC01MzgsNiArNjQ5LDE4IEBACiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSwKIAl9LAogfSwKK3sKKwkubmFtZSA9ICJETUlDIFBpbiIsCisJLm9wcyA9ICZza2xfcGNtX2RhaV9vcHMsCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJETUlDIENhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gSERBX01PTk8sCisJCS5jaGFubmVsc19tYXggPSBIREFfUVVBRCwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAorCX0sCit9LAorCiAvKiBCRSBDUFUgIERhaXMgKi8KIHsKIAkubmFtZSA9ICJTU1AwIFBpbiIsCkBAIC01NTgsNiArNjgxLDI0IEBACiAJfSwKIH0sCiB7CisJLm5hbWUgPSAiU1NQMSBQaW4iLAorCS5vcHMgPSAmc2tsX2JlX3NzcF9kYWlfb3BzLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gInNzcDEgVHgiLAorCQkuY2hhbm5lbHNfbWluID0gSERBX1NURVJFTywKKwkJLmNoYW5uZWxzX21heCA9IEhEQV9TVEVSRU8sCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJzc3AxIFJ4IiwKKwkJLmNoYW5uZWxzX21pbiA9IEhEQV9TVEVSRU8sCisJCS5jaGFubmVsc19tYXggPSBIREFfU1RFUkVPLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorfSwKK3sKIAkubmFtZSA9ICJpRGlzcCBQaW4iLAogCS5vcHMgPSAmc2tsX2xpbmtfZGFpX29wcywKIAkucGxheWJhY2sgPSB7CkBAIC01NzMsOCArNzE0LDggQEAKIAkub3BzID0gJnNrbF9kbWljX2RhaV9vcHMsCiAJLmNhcHR1cmUgPSB7CiAJCS5zdHJlYW1fbmFtZSA9ICJETUlDMDEgUngiLAotCQkuY2hhbm5lbHNfbWluID0gSERBX1NURVJFTywKLQkJLmNoYW5uZWxzX21heCA9IEhEQV9TVEVSRU8sCisJCS5jaGFubmVsc19taW4gPSBIREFfTU9OTywKKwkJLmNoYW5uZWxzX21heCA9IEhEQV9RVUFELAogCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzE2MDAwLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUsCiAJfSwKQEAgLTY4OCw2NiArODI5LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2tsX2RlY291cGxlZF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQlpbnQgY21kKQotewotCXN0cnVjdCBoZGFjX2V4dF9idXMgKmVidXMgPSBnZXRfYnVzX2N0eChzdWJzdHJlYW0pOwotCXN0cnVjdCBoZGFjX2J1cyAqYnVzID0gZWJ1c190b19oYnVzKGVidXMpOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCXN0cnVjdCBoZGFjX2V4dF9zdHJlYW0gKnN0cmVhbTsKLQlpbnQgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBjb29raWU7Ci0Jc3RydWN0IGhkYWNfc3RyZWFtICpoc3RyOwotCi0JZGV2X2RiZyhidXMtPmRldiwgIkluICVzIGNtZD0lZCBzdHJlYW1uYW1lPSVzXG4iLCBfX2Z1bmNfXywgY21kLCBjcHVfZGFpLT5uYW1lKTsKLQotCXN0cmVhbSA9IGdldF9oZGFjX2V4dF9zdHJlYW0oc3Vic3RyZWFtKTsKLQloc3RyID0gaGRhY19zdHJlYW0oc3RyZWFtKTsKLQotCWlmICghaHN0ci0+cHJlcGFyZWQpCi0JCXJldHVybiAtRVBJUEU7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCQlzdGFydCA9IDE7Ci0JCWJyZWFrOwotCi0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JCXN0YXJ0ID0gMDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYnVzLT5yZWdfbG9jaywgY29va2llKTsKLQotCWlmIChzdGFydCkKLQkJc25kX2hkYWNfc3RyZWFtX3N0YXJ0KGhkYWNfc3RyZWFtKHN0cmVhbSksIHRydWUpOwotCWVsc2UKLQkJc25kX2hkYWNfc3RyZWFtX3N0b3AoaGRhY19zdHJlYW0oc3RyZWFtKSk7Ci0KLQlpZiAoc3RhcnQpCi0JCXNuZF9oZGFjX3N0cmVhbV90aW1lY291bnRlcl9pbml0KGhzdHIsIDApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVzLT5yZWdfbG9jaywgY29va2llKTsKLQotCXJldHVybiAwOwotfQogc3RhdGljIGludCBza2xfcGxhdGZvcm1fcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkJCWludCBjbWQpCiB7CiAJc3RydWN0IGhkYWNfZXh0X2J1cyAqZWJ1cyA9IGdldF9idXNfY3R4KHN1YnN0cmVhbSk7CiAKLQlpZiAoZWJ1cy0+cHBjYXApCi0JCXJldHVybiBza2xfZGVjb3VwbGVkX3RyaWdnZXIoc3Vic3RyZWFtLCBjbWQpOwotCWVsc2UKKwlpZiAoIWVidXMtPnBwY2FwKQogCQlyZXR1cm4gc2tsX2NvdXBsZWRfdHJpZ2dlcihzdWJzdHJlYW0sIGNtZCk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogY2FsY3VsYXRlIHJ1bnRpbWUgZGVsYXkgZnJvbSBMUElCICovCkBAIC03ODksNyArODc5LDcgQEAKIHsKIAlzdHJ1Y3QgaGRhY19zdHJlYW0gKmhzdHIgPSBoZGFjX3N0cmVhbShoc3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IGhzdHItPnN1YnN0cmVhbTsKLQlzdHJ1Y3QgaGRhY19leHRfYnVzICplYnVzID0gZ2V0X2J1c19jdHgoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgaGRhY19leHRfYnVzICplYnVzOwogCXVuc2lnbmVkIGludCBwb3M7CiAJaW50IGRlbGF5OwogCkBAIC04MDAsNiArODkwLDcgQEAKIAkJcG9zID0gMDsKIAogCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUpIHsKKwkJZWJ1cyA9IGdldF9idXNfY3R4KHN1YnN0cmVhbSk7CiAJCWRlbGF5ID0gc2tsX2dldF9kZWxheV9mcm9tX2xwaWIoZWJ1cywgaHN0cmVhbSwgcG9zKQogCQkJCQkJICsgY29kZWNfZGVsYXk7CiAJCXN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgKz0gZGVsYXk7CkBAIC05NDEsNyArMTAzMiw2IEBACiAJc3RydWN0IHNrbCAqc2tsID0gZWJ1c190b19za2woZWJ1cyk7CiAKIAlJTklUX0xJU1RfSEVBRCgmc2tsLT5wcGxfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnNrbC0+ZGFwbV9wYXRoX2xpc3QpOwogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybShkZXYsICZza2xfcGxhdGZvcm1fZHJ2KTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtc3N0LWNsZG1hLmMgYi9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtc3N0LWNsZG1hLmMKaW5kZXggNDQ3NDhiYS4uZGEyMzI5ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXNzdC1jbGRtYS5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC1zc3QtY2xkbWEuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSAiLi4vY29tbW9uL3NzdC1kc3AuaCIKICNpbmNsdWRlICIuLi9jb21tb24vc3N0LWRzcC1wcml2LmgiCiAKQEAgLTMzLDYgKzM0LDUzIEBACiAJCQlTS0xfQURTUF9SRUdfQURTUElDLCBTS0xfQURTUElDX0NMX0RNQSwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNrbF9jbGRtYV9zdHJlYW1fcnVuKHN0cnVjdCBzc3RfZHNwICAqY3R4LCBib29sIGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwlpbnQgdGltZW91dDsKKworCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChjdHgsCisJCQlTS0xfQURTUF9SRUdfQ0xfU0RfQ1RMLAorCQkJQ0xfU0RfQ1RMX1JVTl9NQVNLLCBDTF9TRF9DVExfUlVOKGVuYWJsZSkpOworCisJdWRlbGF5KDMpOworCXRpbWVvdXQgPSAzMDA7CisJZG8geworCQkvKiB3YWl0aW5nIGZvciBoYXJkd2FyZSB0byByZXBvcnQgdGhhdCB0aGUgc3RyZWFtIFJ1biBiaXQgc2V0ICovCisJCXZhbCA9IHNzdF9kc3Bfc2hpbV9yZWFkKGN0eCwgU0tMX0FEU1BfUkVHX0NMX1NEX0NUTCkgJgorCQkJQ0xfU0RfQ1RMX1JVTl9NQVNLOworCQlpZiAoZW5hYmxlICYmIHZhbCkKKwkJCWJyZWFrOworCQllbHNlIGlmICghZW5hYmxlICYmICF2YWwpCisJCQlicmVhazsKKwkJdWRlbGF5KDMpOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlpZiAodGltZW91dCA9PSAwKQorCQlkZXZfZXJyKGN0eC0+ZGV2LCAiRmFpbGVkIHRvIHNldCBSdW4gYml0PSVkIGVuYWJsZT0lZFxuIiwgdmFsLCBlbmFibGUpOworfQorCitzdGF0aWMgdm9pZCBza2xfY2xkbWFfc3RyZWFtX2NsZWFyKHN0cnVjdCBzc3RfZHNwICAqY3R4KQoreworCS8qIG1ha2Ugc3VyZSBSdW4gYml0IGlzIGNsZWFyZWQgYmVmb3JlIHNldHRpbmcgc3RyZWFtIHJlZ2lzdGVyICovCisJc2tsX2NsZG1hX3N0cmVhbV9ydW4oY3R4LCAwKTsKKworCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0cyhjdHgsIFNLTF9BRFNQX1JFR19DTF9TRF9DVEwsCisJCQkJQ0xfU0RfQ1RMX0lPQ0VfTUFTSywgQ0xfU0RfQ1RMX0lPQ0UoMCkpOworCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0cyhjdHgsIFNLTF9BRFNQX1JFR19DTF9TRF9DVEwsCisJCQkJQ0xfU0RfQ1RMX0ZFSUVfTUFTSywgQ0xfU0RfQ1RMX0ZFSUUoMCkpOworCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0cyhjdHgsIFNLTF9BRFNQX1JFR19DTF9TRF9DVEwsCisJCQkJQ0xfU0RfQ1RMX0RFSUVfTUFTSywgQ0xfU0RfQ1RMX0RFSUUoMCkpOworCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0cyhjdHgsIFNLTF9BRFNQX1JFR19DTF9TRF9DVEwsCisJCQkJQ0xfU0RfQ1RMX1NUUk1fTUFTSywgQ0xfU0RfQ1RMX1NUUk0oMCkpOworCisJc3N0X2RzcF9zaGltX3dyaXRlKGN0eCwgU0tMX0FEU1BfUkVHX0NMX1NEX0JETFBMLCBDTF9TRF9CRExQTEJBKDApKTsKKwlzc3RfZHNwX3NoaW1fd3JpdGUoY3R4LCBTS0xfQURTUF9SRUdfQ0xfU0RfQkRMUFUsIDApOworCisJc3N0X2RzcF9zaGltX3dyaXRlKGN0eCwgU0tMX0FEU1BfUkVHX0NMX1NEX0NCTCwgMCk7CisJc3N0X2RzcF9zaGltX3dyaXRlKGN0eCwgU0tMX0FEU1BfUkVHX0NMX1NEX0xWSSwgMCk7Cit9CisKIC8qIENvZGUgbG9hZGVyIGhlbHBlciBBUElzICovCiBzdGF0aWMgdm9pZCBza2xfY2xkbWFfc2V0dXBfYmRsZShzdHJ1Y3Qgc3N0X2RzcCAqY3R4LAogCQlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmRtYWJfZGF0YSwKQEAgLTY4LDYgKzExNiw3IEBACiAJCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYl9iZGwsIHVuc2lnbmVkIGludCBtYXhfc2l6ZSwKIAkJdTMyIGNvdW50KQogeworCXNrbF9jbGRtYV9zdHJlYW1fY2xlYXIoY3R4KTsKIAlzc3RfZHNwX3NoaW1fd3JpdGUoY3R4LCBTS0xfQURTUF9SRUdfQ0xfU0RfQkRMUEwsCiAJCQlDTF9TRF9CRExQTEJBKGRtYWJfYmRsLT5hZGRyKSk7CiAJc3N0X2RzcF9zaGltX3dyaXRlKGN0eCwgU0tMX0FEU1BfUkVHX0NMX1NEX0JETFBVLApAQCAtMTA3LDM2ICsxNTYsMTMgQEAKIAlzc3RfZHNwX3NoaW1fd3JpdGVfdW5sb2NrZWQoY3R4LCBTS0xfQURTUF9SRUdfQ0xfU1BCRklGT19TUElCLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgc2tsX2NsZG1hX3RyaWdnZXIoc3RydWN0IHNzdF9kc3AgICpjdHgsIGJvb2wgZW5hYmxlKQotewotCWlmIChlbmFibGUpCi0JCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChjdHgsCi0JCQlTS0xfQURTUF9SRUdfQ0xfU0RfQ1RMLAotCQkJQ0xfU0RfQ1RMX1JVTl9NQVNLLCBDTF9TRF9DVExfUlVOKDEpKTsKLQllbHNlCi0JCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChjdHgsCi0JCQlTS0xfQURTUF9SRUdfQ0xfU0RfQ1RMLAotCQkJQ0xfU0RfQ1RMX1JVTl9NQVNLLCBDTF9TRF9DVExfUlVOKDApKTsKLX0KLQogc3RhdGljIHZvaWQgc2tsX2NsZG1hX2NsZWFudXAoc3RydWN0IHNzdF9kc3AgICpjdHgpCiB7CiAJc2tsX2NsZG1hX2NsZWFudXBfc3BiKGN0eCk7CisJc2tsX2NsZG1hX3N0cmVhbV9jbGVhcihjdHgpOwogCi0Jc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzKGN0eCwgU0tMX0FEU1BfUkVHX0NMX1NEX0NUTCwKLQkJCQlDTF9TRF9DVExfSU9DRV9NQVNLLCBDTF9TRF9DVExfSU9DRSgwKSk7Ci0Jc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzKGN0eCwgU0tMX0FEU1BfUkVHX0NMX1NEX0NUTCwKLQkJCQlDTF9TRF9DVExfRkVJRV9NQVNLLCBDTF9TRF9DVExfRkVJRSgwKSk7Ci0Jc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzKGN0eCwgU0tMX0FEU1BfUkVHX0NMX1NEX0NUTCwKLQkJCQlDTF9TRF9DVExfREVJRV9NQVNLLCBDTF9TRF9DVExfREVJRSgwKSk7Ci0Jc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzKGN0eCwgU0tMX0FEU1BfUkVHX0NMX1NEX0NUTCwKLQkJCQlDTF9TRF9DVExfU1RSTV9NQVNLLCBDTF9TRF9DVExfU1RSTSgwKSk7Ci0KLQlzc3RfZHNwX3NoaW1fd3JpdGUoY3R4LCBTS0xfQURTUF9SRUdfQ0xfU0RfQkRMUEwsIENMX1NEX0JETFBMQkEoMCkpOwotCXNzdF9kc3Bfc2hpbV93cml0ZShjdHgsIFNLTF9BRFNQX1JFR19DTF9TRF9CRExQVSwgMCk7Ci0KLQlzc3RfZHNwX3NoaW1fd3JpdGUoY3R4LCBTS0xfQURTUF9SRUdfQ0xfU0RfQ0JMLCAwKTsKLQlzc3RfZHNwX3NoaW1fd3JpdGUoY3R4LCBTS0xfQURTUF9SRUdfQ0xfU0RfTFZJLCAwKTsKKwljdHgtPmRzcF9vcHMuZnJlZV9kbWFfYnVmKGN0eC0+ZGV2LCAmY3R4LT5jbF9kZXYuZG1hYl9kYXRhKTsKKwljdHgtPmRzcF9vcHMuZnJlZV9kbWFfYnVmKGN0eC0+ZGV2LCAmY3R4LT5jbF9kZXYuZG1hYl9iZGwpOwogfQogCiBzdGF0aWMgaW50IHNrbF9jbGRtYV93YWl0X2ludGVycnVwdGlibGUoc3RydWN0IHNzdF9kc3AgKmN0eCkKQEAgLTE2NCw3ICsxOTAsNyBAQAogCiBzdGF0aWMgdm9pZCBza2xfY2xkbWFfc3RvcChzdHJ1Y3Qgc3N0X2RzcCAqY3R4KQogewotCWN0eC0+Y2xfZGV2Lm9wcy5jbF90cmlnZ2VyKGN0eCwgZmFsc2UpOworCXNrbF9jbGRtYV9zdHJlYW1fcnVuKGN0eCwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBza2xfY2xkbWFfZmlsbF9idWZmZXIoc3RydWN0IHNzdF9kc3AgKmN0eCwgdW5zaWduZWQgaW50IHNpemUsCkBAIC0xNzUsNiArMjAxLDIxIEBACiAJCQljdHgtPmNsX2Rldi5kbWFfYnVmZmVyX29mZnNldCwgdHJpZ2dlcik7CiAJZGV2X2RiZyhjdHgtPmRldiwgInNwaWIgcG9zaXRpb246ICVkXG4iLCBjdHgtPmNsX2Rldi5jdXJyX3NwaWJfcG9zKTsKIAorCS8qCisJICogQ2hlY2sgaWYgdGhlIHNpemUgZXhjZWVkcyBidWZmZXIgYm91bmRhcnkuIElmIGl0IGV4Y2VlZHMKKwkgKiBtYXhfYnVmZmVyIHNpemUsIHRoZW4gY29weSB0aWxsIGJ1ZmZlciBzaXplIGFuZCB0aGVuIGNvcHkKKwkgKiByZW1haW5pbmcgYnVmZmVyIGZyb20gdGhlIHN0YXJ0IG9mIHJpbmcgYnVmZmVyLgorCSAqLworCWlmIChjdHgtPmNsX2Rldi5kbWFfYnVmZmVyX29mZnNldCArIHNpemUgPiBjdHgtPmNsX2Rldi5idWZzaXplKSB7CisJCXVuc2lnbmVkIGludCBzaXplX2IgPSBjdHgtPmNsX2Rldi5idWZzaXplIC0KKwkJCQkJY3R4LT5jbF9kZXYuZG1hX2J1ZmZlcl9vZmZzZXQ7CisJCW1lbWNweShjdHgtPmNsX2Rldi5kbWFiX2RhdGEuYXJlYSArIGN0eC0+Y2xfZGV2LmRtYV9idWZmZXJfb2Zmc2V0LAorCQkJY3Vycl9wb3MsIHNpemVfYik7CisJCXNpemUgLT0gc2l6ZV9iOworCQljdXJyX3BvcyArPSBzaXplX2I7CisJCWN0eC0+Y2xfZGV2LmRtYV9idWZmZXJfb2Zmc2V0ID0gMDsKKwl9CisKIAltZW1jcHkoY3R4LT5jbF9kZXYuZG1hYl9kYXRhLmFyZWEgKyBjdHgtPmNsX2Rldi5kbWFfYnVmZmVyX29mZnNldCwKIAkJCWN1cnJfcG9zLCBzaXplKTsKIApAQCAtMjkxLDcgKzMzMiw3IEBACiAJY3R4LT5jbF9kZXYub3BzLmNsX3NldHVwX2NvbnRyb2xsZXIgPSBza2xfY2xkbWFfc2V0dXBfY29udHJvbGxlcjsKIAljdHgtPmNsX2Rldi5vcHMuY2xfc2V0dXBfc3BiID0gc2tsX2NsZG1hX3NldHVwX3NwYjsKIAljdHgtPmNsX2Rldi5vcHMuY2xfY2xlYW51cF9zcGIgPSBza2xfY2xkbWFfY2xlYW51cF9zcGI7Ci0JY3R4LT5jbF9kZXYub3BzLmNsX3RyaWdnZXIgPSBza2xfY2xkbWFfdHJpZ2dlcjsKKwljdHgtPmNsX2Rldi5vcHMuY2xfdHJpZ2dlciA9IHNrbF9jbGRtYV9zdHJlYW1fcnVuOwogCWN0eC0+Y2xfZGV2Lm9wcy5jbF9jbGVhbnVwX2NvbnRyb2xsZXIgPSBza2xfY2xkbWFfY2xlYW51cDsKIAljdHgtPmNsX2Rldi5vcHMuY2xfY29weV90b19kbWFidWYgPSBza2xfY2xkbWFfY29weV90b19idWY7CiAJY3R4LT5jbF9kZXYub3BzLmNsX3N0b3BfZG1hID0gc2tsX2NsZG1hX3N0b3A7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtc3N0LWRzcC5oIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXNzdC1kc3AuaAppbmRleCA2YmZjZWY0Li5jYmI0MDc1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtc3N0LWRzcC5oCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC1zc3QtZHNwLmgKQEAgLTU4LDkgKzU4LDkgQEAKIAogI2RlZmluZSBTS0xfQURTUF9NTUlPX0xFTgkJMHgxMDAwMAogCi0jZGVmaW5lIFNLTF9BRFNQX1cwX1NUQVRfU1oJCTB4ODAwCisjZGVmaW5lIFNLTF9BRFNQX1cwX1NUQVRfU1oJCTB4MTAwMAogCi0jZGVmaW5lIFNLTF9BRFNQX1cwX1VQX1NaCQkweDgwMAorI2RlZmluZSBTS0xfQURTUF9XMF9VUF9TWgkJMHgxMDAwCiAKICNkZWZpbmUgU0tMX0FEU1BfVzFfU1oJCQkweDEwMDAKIApAQCAtMTE0LDYgKzExNCw5IEBACiAJaW50ICgqc2V0X3N0YXRlX0QwKShzdHJ1Y3Qgc3N0X2RzcCAqY3R4KTsKIAlpbnQgKCpzZXRfc3RhdGVfRDMpKHN0cnVjdCBzc3RfZHNwICpjdHgpOwogCXVuc2lnbmVkIGludCAoKmdldF9md19lcnJjb2RlKShzdHJ1Y3Qgc3N0X2RzcCAqY3R4KTsKKwlpbnQgKCpsb2FkX21vZCkoc3RydWN0IHNzdF9kc3AgKmN0eCwgdTE2IG1vZF9pZCwgY2hhciAqbW9kX25hbWUpOworCWludCAoKnVubG9hZF9tb2QpKHN0cnVjdCBzc3RfZHNwICpjdHgsIHUxNiBtb2RfaWQpOworCiB9OwogCiBzdHJ1Y3Qgc2tsX2RzcF9sb2FkZXJfb3BzIHsKQEAgLTEyMyw2ICsxMjYsMTcgQEAKIAkJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFiKTsKIH07CiAKK3N0cnVjdCBza2xfbG9hZF9tb2R1bGVfaW5mbyB7CisJdTE2IG1vZF9pZDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworfTsKKworc3RydWN0IHNrbF9tb2R1bGVfdGFibGUgeworCXN0cnVjdCBza2xfbG9hZF9tb2R1bGVfaW5mbyAqbW9kX2luZm87CisJdW5zaWduZWQgaW50IHVzYWdlX2NudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCiB2b2lkIHNrbF9jbGRtYV9wcm9jZXNzX2ludHIoc3RydWN0IHNzdF9kc3AgKmN0eCk7CiB2b2lkIHNrbF9jbGRtYV9pbnRfZGlzYWJsZShzdHJ1Y3Qgc3N0X2RzcCAqY3R4KTsKIGludCBza2xfY2xkbWFfcHJlcGFyZShzdHJ1Y3Qgc3N0X2RzcCAqY3R4KTsKQEAgLTEzOSw3ICsxNTMsOCBAQAogCiBpbnQgc2tsX2RzcF9ib290KHN0cnVjdCBzc3RfZHNwICpjdHgpOwogaW50IHNrbF9zc3RfZHNwX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKm1taW9fYmFzZSwgaW50IGlycSwKLQkJc3RydWN0IHNrbF9kc3BfbG9hZGVyX29wcyBkc3Bfb3BzLCBzdHJ1Y3Qgc2tsX3NzdCAqKmRzcCk7CisJCWNvbnN0IGNoYXIgKmZ3X25hbWUsIHN0cnVjdCBza2xfZHNwX2xvYWRlcl9vcHMgZHNwX29wcywKKwkJc3RydWN0IHNrbF9zc3QgKipkc3ApOwogdm9pZCBza2xfc3N0X2RzcF9jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNrbF9zc3QgKmN0eCk7CiAKICNlbmRpZiAvKl9fU0tMX1NTVF9EU1BfSF9fKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC1zc3QtaXBjLmMgYi9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtc3N0LWlwYy5jCmluZGV4IDMzNDVlYTAuLjU0MzQ2MDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC1zc3QtaXBjLmMKKysrIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXNzdC1pcGMuYwpAQCAtMTYsOCArMTYsMTAgQEAKIAogI2luY2x1ZGUgIi4uL2NvbW1vbi9zc3QtZHNwLmgiCiAjaW5jbHVkZSAiLi4vY29tbW9uL3NzdC1kc3AtcHJpdi5oIgorI2luY2x1ZGUgInNrbC5oIgogI2luY2x1ZGUgInNrbC1zc3QtZHNwLmgiCiAjaW5jbHVkZSAic2tsLXNzdC1pcGMuaCIKKyNpbmNsdWRlICJzb3VuZC9oZGF1ZGlvX2V4dC5oIgogCiAKICNkZWZpbmUgSVBDX0lYQ19TVEFUVVNfQklUUwkJMjQKQEAgLTEzMCw2ICsxMzIsMTEgQEAKICNkZWZpbmUgSVBDX1NSQ19RVUVVRV9NQVNLCQkweDcKICNkZWZpbmUgSVBDX1NSQ19RVUVVRSh4KQkJKCgoeCkgJiBJUENfU1JDX1FVRVVFX01BU0spIFwKIAkJCQkJPDwgSVBDX1NSQ19RVUVVRV9TSElGVCkKKy8qIExvYWQgTW9kdWxlIGNvdW50ICovCisjZGVmaW5lIElQQ19MT0FEX01PRFVMRV9TSElGVAkJMAorI2RlZmluZSBJUENfTE9BRF9NT0RVTEVfTUFTSwkJMHhGRgorI2RlZmluZSBJUENfTE9BRF9NT0RVTEVfQ05UKHgpCQkoKCh4KSAmIElQQ19MT0FEX01PRFVMRV9NQVNLKSBcCisJCQkJCTw8IElQQ19MT0FEX01PRFVMRV9TSElGVCkKIAogLyogU2F2ZSBwaXBlbGluZSBtZXNzZ2FlIGV4dGVuc2lvbiByZWdpc3RlciAqLwogI2RlZmluZSBJUENfRE1BX0lEX1NISUZUCQkwCkBAIC0zMTcsNiArMzI0LDE5IEBACiAJCQl3YWtlX3VwKCZza2wtPmJvb3Rfd2FpdCk7CiAJCQlicmVhazsKIAorCQljYXNlIElQQ19HTEJfTk9USUZZX1BIUkFTRV9ERVRFQ1RFRDoKKwkJCWRldl9kYmcoaXBjLT5kZXYsICIqKioqKiBQaHJhc2UgRGV0ZWN0ZWQgKioqKioqKioqKlxuIik7CisKKwkJCS8qCisJCQkgKiBQZXIgSFcgcmVjb21lbmRhdGlvbiwgQWZ0ZXIgcGhyYXNlIGRldGVjdGlvbiwKKwkJCSAqIGNsZWFyIHRoZSBDR0NUTC5NSVNDQkRDR0UuCisJCQkgKgorCQkJICogVGhpcyB3aWxsIGJlIHNldCBiYWNrIG9uIHN0cmVhbSBjbG9zdXJlCisJCQkgKi8KKwkJCXNrbC0+ZW5hYmxlX21pc2NiZGNnZShpcGMtPmRldiwgZmFsc2UpOworCQkJc2tsLT5taXNjYmRjZ19kaXNhYmxlZCA9IHRydWU7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJZGV2X2VycihpcGMtPmRldiwgImlwYzogVW5oYW5kbGVkIGVycm9yIG1zZz0leCIsCiAJCQkJCQloZWFkZXIucHJpbWFyeSk7CkBAIC0zNDQsNiArMzY0LDggQEAKIAlzd2l0Y2ggKHJlcGx5KSB7CiAJY2FzZSBJUENfR0xCX1JFUExZX1NVQ0NFU1M6CiAJCWRldl9pbmZvKGlwYy0+ZGV2LCAiaXBjIEZXIHJlcGx5ICV4OiBzdWNjZXNzXG4iLCBoZWFkZXIucHJpbWFyeSk7CisJCS8qIGNvcHkgdGhlIHJ4IGRhdGEgZnJvbSB0aGUgbWFpbGJveCAqLworCQlzc3RfZHNwX2luYm94X3JlYWQoaXBjLT5kc3AsIG1zZy0+cnhfZGF0YSwgbXNnLT5yeF9zaXplKTsKIAkJYnJlYWs7CiAKIAljYXNlIElQQ19HTEJfUkVQTFlfT1VUX09GX01FTU9SWToKQEAgLTY1MCw3ICs2NzIsNyBAQAogCWRldl9kYmcoaXBjLT5kZXYsICJJbiAlcyBwcmltYXJ5ID0leCBleHQ9JXhcbiIsIF9fZnVuY19fLAogCQkJIGhlYWRlci5wcmltYXJ5LCBoZWFkZXIuZXh0ZW5zaW9uKTsKIAlyZXQgPSBzc3RfaXBjX3R4X21lc3NhZ2Vfd2FpdChpcGMsICppcGNfaGVhZGVyLAotCQkJCWR4LCBzaXplb2YoZHgpLCBOVUxMLCAwKTsKKwkJCQlkeCwgc2l6ZW9mKCpkeCksIE5VTEwsIDApOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoaXBjLT5kZXYsICJpcGM6IHNldCBkeCBmYWlsZWQsIGVyciAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTcyOCw2ICs3NTAsNTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrbF9pcGNfYmluZF91bmJpbmQpOwogCisvKgorICogSW4gb3JkZXIgdG8gbG9hZCBhIG1vZHVsZSB3ZSBuZWVkIHRvIHNlbmQgSVBDIHRvIGluaXRpYXRlIHRoYXQuIERNQSB3aWxsCisgKiBwZXJmb3JtZWQgdG8gbG9hZCB0aGUgbW9kdWxlIG1lbW9yeS4gVGhlIEZXIHN1cHBvcnRzIG11bHRpcGxlIG1vZHVsZSBsb2FkCisgKiBhdCBzaW5nbGUgc2hvdCwgc28gd2UgY2FuIHNlbmQgSVBDIHdpdGggTiBtb2R1bGVzIHJlcHJlc2VudGVkIGJ5CisgKiBtb2R1bGVfY250CisgKi8KK2ludCBza2xfaXBjX2xvYWRfbW9kdWxlcyhzdHJ1Y3Qgc3N0X2dlbmVyaWNfaXBjICppcGMsCisJCQkJdTggbW9kdWxlX2NudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2tsX2lwY19oZWFkZXIgaGVhZGVyID0gezB9OworCXU2NCAqaXBjX2hlYWRlciA9ICh1NjQgKikoJmhlYWRlcik7CisJaW50IHJldDsKKworCWhlYWRlci5wcmltYXJ5ID0gSVBDX01TR19UQVJHRVQoSVBDX0ZXX0dFTl9NU0cpOworCWhlYWRlci5wcmltYXJ5IHw9IElQQ19NU0dfRElSKElQQ19NU0dfUkVRVUVTVCk7CisJaGVhZGVyLnByaW1hcnkgfD0gSVBDX0dMQl9UWVBFKElQQ19HTEJfTE9BRF9NVUxUSVBMRV9NT0RTKTsKKwloZWFkZXIucHJpbWFyeSB8PSBJUENfTE9BRF9NT0RVTEVfQ05UKG1vZHVsZV9jbnQpOworCisJcmV0ID0gc3N0X2lwY190eF9tZXNzYWdlX3dhaXQoaXBjLCAqaXBjX2hlYWRlciwgZGF0YSwKKwkJCQkoc2l6ZW9mKHUxNikgKiBtb2R1bGVfY250KSwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoaXBjLT5kZXYsICJpcGM6IGxvYWQgbW9kdWxlcyBmYWlsZWQgOiVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNrbF9pcGNfbG9hZF9tb2R1bGVzKTsKKworaW50IHNrbF9pcGNfdW5sb2FkX21vZHVsZXMoc3RydWN0IHNzdF9nZW5lcmljX2lwYyAqaXBjLCB1OCBtb2R1bGVfY250LAorCQkJCQkJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNrbF9pcGNfaGVhZGVyIGhlYWRlciA9IHswfTsKKwl1NjQgKmlwY19oZWFkZXIgPSAodTY0ICopKCZoZWFkZXIpOworCWludCByZXQ7CisKKwloZWFkZXIucHJpbWFyeSA9IElQQ19NU0dfVEFSR0VUKElQQ19GV19HRU5fTVNHKTsKKwloZWFkZXIucHJpbWFyeSB8PSBJUENfTVNHX0RJUihJUENfTVNHX1JFUVVFU1QpOworCWhlYWRlci5wcmltYXJ5IHw9IElQQ19HTEJfVFlQRShJUENfR0xCX1VOTE9BRF9NVUxUSVBMRV9NT0RTKTsKKwloZWFkZXIucHJpbWFyeSB8PSBJUENfTE9BRF9NT0RVTEVfQ05UKG1vZHVsZV9jbnQpOworCisJcmV0ID0gc3N0X2lwY190eF9tZXNzYWdlX3dhaXQoaXBjLCAqaXBjX2hlYWRlciwgZGF0YSwKKwkJCQkoc2l6ZW9mKHUxNikgKiBtb2R1bGVfY250KSwgTlVMTCwgMCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoaXBjLT5kZXYsICJpcGM6IHVubG9hZCBtb2R1bGVzIGZhaWxlZCA6JWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tsX2lwY191bmxvYWRfbW9kdWxlcyk7CisKIGludCBza2xfaXBjX3NldF9sYXJnZV9jb25maWcoc3RydWN0IHNzdF9nZW5lcmljX2lwYyAqaXBjLAogCQlzdHJ1Y3Qgc2tsX2lwY19sYXJnZV9jb25maWdfbXNnICptc2csIHUzMiAqcGFyYW0pCiB7CkBAIC03ODEsMyArODUxLDU0IEBACiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrbF9pcGNfc2V0X2xhcmdlX2NvbmZpZyk7CisKK2ludCBza2xfaXBjX2dldF9sYXJnZV9jb25maWcoc3RydWN0IHNzdF9nZW5lcmljX2lwYyAqaXBjLAorCQlzdHJ1Y3Qgc2tsX2lwY19sYXJnZV9jb25maWdfbXNnICptc2csIHUzMiAqcGFyYW0pCit7CisJc3RydWN0IHNrbF9pcGNfaGVhZGVyIGhlYWRlciA9IHswfTsKKwl1NjQgKmlwY19oZWFkZXIgPSAodTY0ICopKCZoZWFkZXIpOworCWludCByZXQgPSAwOworCXNpemVfdCBzel9yZW1haW5pbmcsIHJ4X3NpemUsIGRhdGFfb2Zmc2V0OworCisJaGVhZGVyLnByaW1hcnkgPSBJUENfTVNHX1RBUkdFVChJUENfTU9EX01TRyk7CisJaGVhZGVyLnByaW1hcnkgfD0gSVBDX01TR19ESVIoSVBDX01TR19SRVFVRVNUKTsKKwloZWFkZXIucHJpbWFyeSB8PSBJUENfR0xCX1RZUEUoSVBDX01PRF9MQVJHRV9DT05GSUdfR0VUKTsKKwloZWFkZXIucHJpbWFyeSB8PSBJUENfTU9EX0lOU1RBTkNFX0lEKG1zZy0+aW5zdGFuY2VfaWQpOworCWhlYWRlci5wcmltYXJ5IHw9IElQQ19NT0RfSUQobXNnLT5tb2R1bGVfaWQpOworCisJaGVhZGVyLmV4dGVuc2lvbiA9IElQQ19EQVRBX09GRlNFVF9TWihtc2ctPnBhcmFtX2RhdGFfc2l6ZSk7CisJaGVhZGVyLmV4dGVuc2lvbiB8PSBJUENfTEFSR0VfUEFSQU1fSUQobXNnLT5sYXJnZV9wYXJhbV9pZCk7CisJaGVhZGVyLmV4dGVuc2lvbiB8PSBJUENfRklOQUxfQkxPQ0soMSk7CisJaGVhZGVyLmV4dGVuc2lvbiB8PSBJUENfSU5JVElBTF9CTE9DSygxKTsKKworCXN6X3JlbWFpbmluZyA9IG1zZy0+cGFyYW1fZGF0YV9zaXplOworCWRhdGFfb2Zmc2V0ID0gMDsKKworCXdoaWxlIChzel9yZW1haW5pbmcgIT0gMCkgeworCQlyeF9zaXplID0gc3pfcmVtYWluaW5nID4gU0tMX0FEU1BfVzFfU1oKKwkJCQk/IFNLTF9BRFNQX1cxX1NaIDogc3pfcmVtYWluaW5nOworCQlpZiAocnhfc2l6ZSA9PSBzel9yZW1haW5pbmcpCisJCQloZWFkZXIuZXh0ZW5zaW9uIHw9IElQQ19GSU5BTF9CTE9DSygxKTsKKworCQlyZXQgPSBzc3RfaXBjX3R4X21lc3NhZ2Vfd2FpdChpcGMsICppcGNfaGVhZGVyLCBOVUxMLCAwLAorCQkJCQkgICAgICAoKGNoYXIgKilwYXJhbSkgKyBkYXRhX29mZnNldCwKKwkJCQkJICAgICAgbXNnLT5wYXJhbV9kYXRhX3NpemUpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihpcGMtPmRldiwKKwkJCQkiaXBjOiBnZXQgbGFyZ2UgY29uZmlnIGZhaWwsIGVycjogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXN6X3JlbWFpbmluZyAtPSByeF9zaXplOworCQlkYXRhX29mZnNldCA9IG1zZy0+cGFyYW1fZGF0YV9zaXplIC0gc3pfcmVtYWluaW5nOworCisJCS8qIGNsZWFyIHRoZSBmaWVsZHMgKi8KKwkJaGVhZGVyLmV4dGVuc2lvbiAmPSBJUENfSU5JVElBTF9CTE9DS19DTEVBUjsKKwkJaGVhZGVyLmV4dGVuc2lvbiAmPSBJUENfREFUQV9PRkZTRVRfU1pfQ0xFQVI7CisJCS8qIGZpbGwgdGhlIGZpZWxkcyAqLworCQloZWFkZXIuZXh0ZW5zaW9uIHw9IElQQ19JTklUSUFMX0JMT0NLKDEpOworCQloZWFkZXIuZXh0ZW5zaW9uIHw9IElQQ19EQVRBX09GRlNFVF9TWihkYXRhX29mZnNldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNrbF9pcGNfZ2V0X2xhcmdlX2NvbmZpZyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtc3N0LWlwYy5oIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXNzdC1pcGMuaAppbmRleCBmMWExNTRlLi5kNTlkMWJhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtc3N0LWlwYy5oCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC1zc3QtaXBjLmgKQEAgLTU1LDYgKzU1LDExIEBACiAKIAkvKiBJUEMgbWVzc2FnaW5nICovCiAJc3RydWN0IHNzdF9nZW5lcmljX2lwYyBpcGM7CisKKwkvKiBjYWxsYmFjayBmb3IgbWlzY2JkZ2UgKi8KKwl2b2lkICgqZW5hYmxlX21pc2NiZGNnZSkoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSk7CisJLypJcyBDR0NUTC5NSVNDQkRDR0UgZGlzYWJsZWQqLworCWJvb2wgbWlzY2JkY2dfZGlzYWJsZWQ7CiB9OwogCiBzdHJ1Y3Qgc2tsX2lwY19pbml0X2luc3RhbmNlX21zZyB7CkBAIC0xMDgsMTIgKzExMywyMSBAQAogaW50IHNrbF9pcGNfYmluZF91bmJpbmQoc3RydWN0IHNzdF9nZW5lcmljX2lwYyAqc3N0X2lwYywKIAkJc3RydWN0IHNrbF9pcGNfYmluZF91bmJpbmRfbXNnICptc2cpOwogCitpbnQgc2tsX2lwY19sb2FkX21vZHVsZXMoc3RydWN0IHNzdF9nZW5lcmljX2lwYyAqaXBjLAorCQkJCXU4IG1vZHVsZV9jbnQsIHZvaWQgKmRhdGEpOworCitpbnQgc2tsX2lwY191bmxvYWRfbW9kdWxlcyhzdHJ1Y3Qgc3N0X2dlbmVyaWNfaXBjICppcGMsCisJCQkJdTggbW9kdWxlX2NudCwgdm9pZCAqZGF0YSk7CisKIGludCBza2xfaXBjX3NldF9keChzdHJ1Y3Qgc3N0X2dlbmVyaWNfaXBjICppcGMsCiAJCXU4IGluc3RhbmNlX2lkLCB1MTYgbW9kdWxlX2lkLCBzdHJ1Y3Qgc2tsX2lwY19keHN0YXRlX2luZm8gKmR4KTsKIAogaW50IHNrbF9pcGNfc2V0X2xhcmdlX2NvbmZpZyhzdHJ1Y3Qgc3N0X2dlbmVyaWNfaXBjICppcGMsCiAJCXN0cnVjdCBza2xfaXBjX2xhcmdlX2NvbmZpZ19tc2cgKm1zZywgdTMyICpwYXJhbSk7CiAKK2ludCBza2xfaXBjX2dldF9sYXJnZV9jb25maWcoc3RydWN0IHNzdF9nZW5lcmljX2lwYyAqaXBjLAorCQlzdHJ1Y3Qgc2tsX2lwY19sYXJnZV9jb25maWdfbXNnICptc2csIHUzMiAqcGFyYW0pOworCiB2b2lkIHNrbF9pcGNfaW50X2VuYWJsZShzdHJ1Y3Qgc3N0X2RzcCAqZHNwKTsKIHZvaWQgc2tsX2lwY19vcF9pbnRfZW5hYmxlKHN0cnVjdCBzc3RfZHNwICpjdHgpOwogdm9pZCBza2xfaXBjX29wX2ludF9kaXNhYmxlKHN0cnVjdCBzc3RfZHNwICpjdHgpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXNzdC5jIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXNzdC5jCmluZGV4IDNiODNkYzkuLmUyNmY0NzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC1zc3QuYworKysgYi9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtc3N0LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgIi4uL2NvbW1vbi9zc3QtZHNwLmgiCiAjaW5jbHVkZSAiLi4vY29tbW9uL3NzdC1kc3AtcHJpdi5oIgogI2luY2x1ZGUgIi4uL2NvbW1vbi9zc3QtaXBjLmgiCkBAIC0zNyw2ICszOCw4IEBACiAjZGVmaW5lIFNLTF9JTlNUQU5DRV9JRAkJMAogI2RlZmluZSBTS0xfQkFTRV9GV19NT0RVTEVfSUQJMAogCisjZGVmaW5lIFNLTF9OVU1fTU9EVUxFUwkJMQorCiBzdGF0aWMgYm9vbCBza2xfY2hlY2tfZndfc3RhdHVzKHN0cnVjdCBzc3RfZHNwICpjdHgsIHUzMiBzdGF0dXMpCiB7CiAJdTMyIGN1cl9zdHM7CkBAIC03Nyw3ICs4MCw3IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2tsLT5ib290X3dhaXQpOwogCiAJaWYgKGN0eC0+ZncgPT0gTlVMTCkgewotCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZjdHgtPmZ3LCAiZHNwX2Z3X3JlbGVhc2UuYmluIiwgY3R4LT5kZXYpOworCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZjdHgtPmZ3LCBjdHgtPmZ3X25hbWUsIGN0eC0+ZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoY3R4LT5kZXYsICJSZXF1ZXN0IGZpcm13YXJlIGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJCXNrbF9kc3BfZGlzYWJsZV9jb3JlKGN0eCk7CkBAIC0xMTUsMjcgKzExOCwyOCBAQAogCQlkZXZfZXJyKGN0eC0+ZGV2LAogCQkJIlRpbWVvdXQgd2FpdGluZyBmb3IgUk9NIGluaXQgZG9uZSwgcmVnOjB4JXhcbiIsIHJlZyk7CiAJCXJldCA9IC1FSU87Ci0JCWdvdG8gc2tsX2xvYWRfYmFzZV9maXJtd2FyZV9mYWlsZWQ7CisJCWdvdG8gdHJhbnNmZXJfZmlybXdhcmVfZmFpbGVkOwogCX0KIAogCXJldCA9IHNrbF90cmFuc2Zlcl9maXJtd2FyZShjdHgsIGN0eC0+ZnctPmRhdGEsIGN0eC0+ZnctPnNpemUpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoY3R4LT5kZXYsICJUcmFuc2ZlciBmaXJtd2FyZSBmYWlsZWQlZFxuIiwgcmV0KTsKLQkJZ290byBza2xfbG9hZF9iYXNlX2Zpcm13YXJlX2ZhaWxlZDsKKwkJZ290byB0cmFuc2Zlcl9maXJtd2FyZV9mYWlsZWQ7CiAJfSBlbHNlIHsKIAkJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KHNrbC0+Ym9vdF93YWl0LCBza2wtPmJvb3RfY29tcGxldGUsCiAJCQkJCW1zZWNzX3RvX2ppZmZpZXMoU0tMX0lQQ19CT09UX01TRUNTKSk7CiAJCWlmIChyZXQgPT0gMCkgewogCQkJZGV2X2VycihjdHgtPmRldiwgIkRTUCBib290IGZhaWxlZCwgRlcgUmVhZHkgdGltZWQtb3V0XG4iKTsKIAkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIHNrbF9sb2FkX2Jhc2VfZmlybXdhcmVfZmFpbGVkOworCQkJZ290byB0cmFuc2Zlcl9maXJtd2FyZV9mYWlsZWQ7CiAJCX0KIAogCQlkZXZfZGJnKGN0eC0+ZGV2LCAiRG93bmxvYWQgZmlybXdhcmUgc3VjY2Vzc2Z1bCVkXG4iLCByZXQpOwogCQlza2xfZHNwX3NldF9zdGF0ZV9sb2NrZWQoY3R4LCBTS0xfRFNQX1JVTk5JTkcpOwogCX0KIAlyZXR1cm4gMDsKLQordHJhbnNmZXJfZmlybXdhcmVfZmFpbGVkOgorCWN0eC0+Y2xfZGV2Lm9wcy5jbF9jbGVhbnVwX2NvbnRyb2xsZXIoY3R4KTsKIHNrbF9sb2FkX2Jhc2VfZmlybXdhcmVfZmFpbGVkOgogCXNrbF9kc3BfZGlzYWJsZV9jb3JlKGN0eCk7CiAJcmVsZWFzZV9maXJtd2FyZShjdHgtPmZ3KTsKQEAgLTE3NSwxMCArMTc5LDE1IEBACiAJZHguY29yZV9tYXNrID0gU0tMX0RTUF9DT1JFMF9NQVNLOwogCWR4LmR4X21hc2sgPSBTS0xfSVBDX0QzX01BU0s7CiAJcmV0ID0gc2tsX2lwY19zZXRfZHgoJnNrbC0+aXBjLCBTS0xfSU5TVEFOQ0VfSUQsIFNLTF9CQVNFX0ZXX01PRFVMRV9JRCwgJmR4KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGN0eC0+ZGV2LCAiRmFpbGVkIHRvIHNldCBEU1AgdG8gRDMgc3RhdGVcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihjdHgtPmRldiwKKwkJCSJEMyByZXF1ZXN0IHRvIEZXIGZhaWxlZCwgY29udGludWluZyByZXNldDogJWQiLCByZXQpOworCisJLyogZGlzYWJsZSBJbnRlcnJ1cHQgKi8KKwljdHgtPmNsX2Rldi5vcHMuY2xfY2xlYW51cF9jb250cm9sbGVyKGN0eCk7CisJc2tsX2NsZG1hX2ludF9kaXNhYmxlKGN0eCk7CisJc2tsX2lwY19vcF9pbnRfZGlzYWJsZShjdHgpOworCXNrbF9pcGNfaW50X2Rpc2FibGUoY3R4KTsKIAogCXJldCA9IHNrbF9kc3BfZGlzYWJsZV9jb3JlKGN0eCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE4NywxMiArMTk2LDYgQEAKIAl9CiAJc2tsX2RzcF9zZXRfc3RhdGVfbG9ja2VkKGN0eCwgU0tMX0RTUF9SRVNFVCk7CiAKLQkvKiBkaXNhYmxlIEludGVycnVwdCAqLwotCWN0eC0+Y2xfZGV2Lm9wcy5jbF9jbGVhbnVwX2NvbnRyb2xsZXIoY3R4KTsKLQlza2xfY2xkbWFfaW50X2Rpc2FibGUoY3R4KTsKLQlza2xfaXBjX29wX2ludF9kaXNhYmxlKGN0eCk7Ci0Jc2tsX2lwY19pbnRfZGlzYWJsZShjdHgpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjAxLDExICsyMDQsMTgyIEBACiAJIHJldHVybiBzc3RfZHNwX3NoaW1fcmVhZChjdHgsIFNLTF9BRFNQX0VSUk9SX0NPREUpOwogfQogCisvKgorICogc2luY2UgZ2V0L3NldF9tb2R1bGUgYXJlIGNhbGxlZCBmcm9tIERBUE0gY29udGV4dCwKKyAqIHdlIGRvbid0IG5lZWQgbG9jayBmb3IgdXNhZ2UgY291bnQKKyAqLworc3RhdGljIGludCBza2xfZ2V0X21vZHVsZShzdHJ1Y3Qgc3N0X2RzcCAqY3R4LCB1MTYgbW9kX2lkKQoreworCXN0cnVjdCBza2xfbW9kdWxlX3RhYmxlICptb2R1bGU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZHVsZSwgJmN0eC0+bW9kdWxlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKG1vZHVsZS0+bW9kX2luZm8tPm1vZF9pZCA9PSBtb2RfaWQpCisJCQlyZXR1cm4gKyttb2R1bGUtPnVzYWdlX2NudDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBza2xfcHV0X21vZHVsZShzdHJ1Y3Qgc3N0X2RzcCAqY3R4LCB1MTYgbW9kX2lkKQoreworCXN0cnVjdCBza2xfbW9kdWxlX3RhYmxlICptb2R1bGU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZHVsZSwgJmN0eC0+bW9kdWxlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKG1vZHVsZS0+bW9kX2luZm8tPm1vZF9pZCA9PSBtb2RfaWQpCisJCQlyZXR1cm4gLS1tb2R1bGUtPnVzYWdlX2NudDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBza2xfbW9kdWxlX3RhYmxlICpza2xfZmlsbF9tb2R1bGVfdGFibGUoc3RydWN0IHNzdF9kc3AgKmN0eCwKKwkJCQkJCWNoYXIgKm1vZF9uYW1lLCBpbnQgbW9kX2lkKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJc3RydWN0IHNrbF9tb2R1bGVfdGFibGUgKnNrbF9tb2R1bGU7CisJdW5zaWduZWQgaW50IHNpemU7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBtb2RfbmFtZSwgY3R4LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY3R4LT5kZXYsICJSZXF1ZXN0IE1vZHVsZSAlcyBmYWlsZWQgOiVkXG4iLAorCQkJCQkJCW1vZF9uYW1lLCByZXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlza2xfbW9kdWxlID0gZGV2bV9remFsbG9jKGN0eC0+ZGV2LCBzaXplb2YoKnNrbF9tb2R1bGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2tsX21vZHVsZSA9PSBOVUxMKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzaXplID0gc2l6ZW9mKCpza2xfbW9kdWxlLT5tb2RfaW5mbyk7CisJc2tsX21vZHVsZS0+bW9kX2luZm8gPSBkZXZtX2t6YWxsb2MoY3R4LT5kZXYsIHNpemUsIEdGUF9LRVJORUwpOworCWlmIChza2xfbW9kdWxlLT5tb2RfaW5mbyA9PSBOVUxMKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlza2xfbW9kdWxlLT5tb2RfaW5mby0+bW9kX2lkID0gbW9kX2lkOworCXNrbF9tb2R1bGUtPm1vZF9pbmZvLT5mdyA9IGZ3OworCWxpc3RfYWRkKCZza2xfbW9kdWxlLT5saXN0LCAmY3R4LT5tb2R1bGVfbGlzdCk7CisKKwlyZXR1cm4gc2tsX21vZHVsZTsKK30KKworLyogZ2V0IGEgbW9kdWxlIGZyb20gaXQncyB1bmlxdWUgSUQgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2tsX21vZHVsZV90YWJsZSAqc2tsX21vZHVsZV9nZXRfZnJvbV9pZCgKKwkJCXN0cnVjdCBzc3RfZHNwICpjdHgsIHUxNiBtb2RfaWQpCit7CisJc3RydWN0IHNrbF9tb2R1bGVfdGFibGUgKm1vZHVsZTsKKworCWlmIChsaXN0X2VtcHR5KCZjdHgtPm1vZHVsZV9saXN0KSkgeworCQlkZXZfZXJyKGN0eC0+ZGV2LCAiTW9kdWxlIGxpc3QgaXMgZW1wdHlcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZHVsZSwgJmN0eC0+bW9kdWxlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKG1vZHVsZS0+bW9kX2luZm8tPm1vZF9pZCA9PSBtb2RfaWQpCisJCQlyZXR1cm4gbW9kdWxlOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHNrbF90cmFuc2Zlcl9tb2R1bGUoc3RydWN0IHNzdF9kc3AgKmN0eCwKKwkJCXN0cnVjdCBza2xfbG9hZF9tb2R1bGVfaW5mbyAqbW9kdWxlKQoreworCWludCByZXQ7CisJc3RydWN0IHNrbF9zc3QgKnNrbCA9IGN0eC0+dGhyZWFkX2NvbnRleHQ7CisKKwlyZXQgPSBjdHgtPmNsX2Rldi5vcHMuY2xfY29weV90b19kbWFidWYoY3R4LCBtb2R1bGUtPmZ3LT5kYXRhLAorCQkJCQkJCW1vZHVsZS0+ZnctPnNpemUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc2tsX2lwY19sb2FkX21vZHVsZXMoJnNrbC0+aXBjLCBTS0xfTlVNX01PRFVMRVMsCisJCQkJCQkodm9pZCAqKSZtb2R1bGUtPm1vZF9pZCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoY3R4LT5kZXYsICJGYWlsZWQgdG8gTG9hZCBtb2R1bGU6ICVkXG4iLCByZXQpOworCisJY3R4LT5jbF9kZXYub3BzLmNsX3N0b3BfZG1hKGN0eCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNrbF9sb2FkX21vZHVsZShzdHJ1Y3Qgc3N0X2RzcCAqY3R4LCB1MTYgbW9kX2lkLCBjaGFyICpndWlkKQoreworCXN0cnVjdCBza2xfbW9kdWxlX3RhYmxlICptb2R1bGVfZW50cnkgPSBOVUxMOworCWludCByZXQgPSAwOworCWNoYXIgbW9kX25hbWVbNjRdOyAvKiBndWlkIHN0ciA9IDMyIGNoYXJzICsgNCBoeXBoZW5zICovCisKKwlzbnByaW50Zihtb2RfbmFtZSwgc2l6ZW9mKG1vZF9uYW1lKSwgIiVzJXMlcyIsCisJCQkiaW50ZWwvZHNwX2Z3XyIsIGd1aWQsICIuYmluIik7CisKKwltb2R1bGVfZW50cnkgPSBza2xfbW9kdWxlX2dldF9mcm9tX2lkKGN0eCwgbW9kX2lkKTsKKwlpZiAobW9kdWxlX2VudHJ5ID09IE5VTEwpIHsKKwkJbW9kdWxlX2VudHJ5ID0gc2tsX2ZpbGxfbW9kdWxlX3RhYmxlKGN0eCwgbW9kX25hbWUsIG1vZF9pZCk7CisJCWlmIChtb2R1bGVfZW50cnkgPT0gTlVMTCkgeworCQkJZGV2X2VycihjdHgtPmRldiwgIkZhaWxlZCB0byBMb2FkIG1vZHVsZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmICghbW9kdWxlX2VudHJ5LT51c2FnZV9jbnQpIHsKKwkJcmV0ID0gc2tsX3RyYW5zZmVyX21vZHVsZShjdHgsIG1vZHVsZV9lbnRyeS0+bW9kX2luZm8pOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjdHgtPmRldiwgIkZhaWxlZCB0byBMb2FkIG1vZHVsZVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gc2tsX2dldF9tb2R1bGUoY3R4LCBtb2RfaWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBza2xfdW5sb2FkX21vZHVsZShzdHJ1Y3Qgc3N0X2RzcCAqY3R4LCB1MTYgbW9kX2lkKQoreworCWludCB1c2FnZV9jbnQ7CisJc3RydWN0IHNrbF9zc3QgKnNrbCA9IGN0eC0+dGhyZWFkX2NvbnRleHQ7CisJaW50IHJldCA9IDA7CisKKwl1c2FnZV9jbnQgPSBza2xfcHV0X21vZHVsZShjdHgsIG1vZF9pZCk7CisJaWYgKHVzYWdlX2NudCA8IDApIHsKKwkJZGV2X2VycihjdHgtPmRldiwgIk1vZHVsZSBiYWQgdXNhZ2UgY250ITolZFxuIiwgdXNhZ2VfY250KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldCA9IHNrbF9pcGNfdW5sb2FkX21vZHVsZXMoJnNrbC0+aXBjLAorCQkJU0tMX05VTV9NT0RVTEVTLCAmbW9kX2lkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGN0eC0+ZGV2LCAiRmFpbGVkIHRvIFVuTG9hZCBtb2R1bGVcbiIpOworCQlza2xfZ2V0X21vZHVsZShjdHgsIG1vZF9pZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2tsX2NsZWFyX21vZHVsZV90YWJsZShzdHJ1Y3Qgc3N0X2RzcCAqY3R4KQoreworCXN0cnVjdCBza2xfbW9kdWxlX3RhYmxlICptb2R1bGUsICp0bXA7CisKKwlpZiAobGlzdF9lbXB0eSgmY3R4LT5tb2R1bGVfbGlzdCkpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2R1bGUsIHRtcCwgJmN0eC0+bW9kdWxlX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJm1vZHVsZS0+bGlzdCk7CisJCXJlbGVhc2VfZmlybXdhcmUobW9kdWxlLT5tb2RfaW5mby0+ZncpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBza2xfZHNwX2Z3X29wcyBza2xfZndfb3BzID0gewogCS5zZXRfc3RhdGVfRDAgPSBza2xfc2V0X2RzcF9EMCwKIAkuc2V0X3N0YXRlX0QzID0gc2tsX3NldF9kc3BfRDMsCiAJLmxvYWRfZncgPSBza2xfbG9hZF9iYXNlX2Zpcm13YXJlLAogCS5nZXRfZndfZXJyY29kZSA9IHNrbF9nZXRfZXJyb3Jjb2RlLAorCS5sb2FkX21vZCA9IHNrbF9sb2FkX21vZHVsZSwKKwkudW5sb2FkX21vZCA9IHNrbF91bmxvYWRfbW9kdWxlLAogfTsKIAogc3RhdGljIHN0cnVjdCBzc3Rfb3BzIHNrbF9vcHMgPSB7CkBAIC0yMjMsNyArMzk3LDcgQEAKIH07CiAKIGludCBza2xfc3N0X2RzcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICptbWlvX2Jhc2UsIGludCBpcnEsCi0JCXN0cnVjdCBza2xfZHNwX2xvYWRlcl9vcHMgZHNwX29wcywgc3RydWN0IHNrbF9zc3QgKipkc3ApCisJCWNvbnN0IGNoYXIgKmZ3X25hbWUsIHN0cnVjdCBza2xfZHNwX2xvYWRlcl9vcHMgZHNwX29wcywgc3RydWN0IHNrbF9zc3QgKipkc3ApCiB7CiAJc3RydWN0IHNrbF9zc3QgKnNrbDsKIAlzdHJ1Y3Qgc3N0X2RzcCAqc3N0OwpAQCAtMjQ0LDExICs0MTgsMTMgQEAKIAogCXNzdCA9IHNrbC0+ZHNwOwogCisJc3N0LT5md19uYW1lID0gZndfbmFtZTsKIAlzc3QtPmFkZHIubHBlID0gbW1pb19iYXNlOwogCXNzdC0+YWRkci5zaGltID0gbW1pb19iYXNlOwogCXNzdF9kc3BfbWFpbGJveF9pbml0KHNzdCwgKFNLTF9BRFNQX1NSQU0wX0JBU0UgKyBTS0xfQURTUF9XMF9TVEFUX1NaKSwKIAkJCVNLTF9BRFNQX1cwX1VQX1NaLCBTS0xfQURTUF9TUkFNMV9CQVNFLCBTS0xfQURTUF9XMV9TWik7CiAKKwlJTklUX0xJU1RfSEVBRCgmc3N0LT5tb2R1bGVfbGlzdCk7CiAJc3N0LT5kc3Bfb3BzID0gZHNwX29wczsKIAlzc3QtPmZ3X29wcyA9IHNrbF9md19vcHM7CiAKQEAgLTI1OSwyMyArNDM1LDI0IEBACiAJcmV0ID0gc3N0LT5md19vcHMubG9hZF9mdyhzc3QpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiTG9hZCBiYXNlIGZ3IGZhaWxlZCA6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBjbGVhbnVwOwogCX0KIAogCWlmIChkc3ApCiAJCSpkc3AgPSBza2w7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogCi0Jc2tsX2lwY19mcmVlKCZza2wtPmlwYyk7CitjbGVhbnVwOgorCXNrbF9zc3RfZHNwX2NsZWFudXAoZGV2LCBza2wpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChza2xfc3N0X2RzcF9pbml0KTsKIAogdm9pZCBza2xfc3N0X2RzcF9jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNrbF9zc3QgKmN0eCkKIHsKKwlza2xfY2xlYXJfbW9kdWxlX3RhYmxlKGN0eC0+ZHNwKTsKIAlza2xfaXBjX2ZyZWUoJmN0eC0+aXBjKTsKLQljdHgtPmRzcC0+Y2xfZGV2Lm9wcy5jbF9jbGVhbnVwX2NvbnRyb2xsZXIoY3R4LT5kc3ApOwogCWN0eC0+ZHNwLT5vcHMtPmZyZWUoY3R4LT5kc3ApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tsX3NzdF9kc3BfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wtdG9wb2xvZ3kuYyBiL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC10b3BvbG9neS5jCmluZGV4IGE3ODU0YzguLjQ2MjQ1NTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC10b3BvbG9neS5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC10b3BvbG9neS5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAic2tsLXRvcG9sb2d5LmgiCiAjaW5jbHVkZSAic2tsLmgiCiAjaW5jbHVkZSAic2tsLXRwbGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiLi4vY29tbW9uL3NzdC1kc3AuaCIKKyNpbmNsdWRlICIuLi9jb21tb24vc3N0LWRzcC1wcml2LmgiCiAKICNkZWZpbmUgU0tMX0NIX0ZJWFVQX01BU0sJCSgxIDw8IDApCiAjZGVmaW5lIFNLTF9SQVRFX0ZJWFVQX01BU0sJCSgxIDw8IDEpCkBAIC0xMjksMTcgKzEzMSwxNSBAQAogewogCWRldl9kYmcoY3R4LT5kZXYsICJEdW1waW5nIGNvbmZpZ1xuIik7CiAJZGV2X2RiZyhjdHgtPmRldiwgIklucHV0IEZvcm1hdDpcbiIpOwotCWRldl9kYmcoY3R4LT5kZXYsICJjaGFubmVscyA9ICVkXG4iLCBtY2ZnLT5pbl9mbXQuY2hhbm5lbHMpOwotCWRldl9kYmcoY3R4LT5kZXYsICJzX2ZyZXEgPSAlZFxuIiwgbWNmZy0+aW5fZm10LnNfZnJlcSk7Ci0JZGV2X2RiZyhjdHgtPmRldiwgImNoX2NmZyA9ICVkXG4iLCBtY2ZnLT5pbl9mbXQuY2hfY2ZnKTsKLQlkZXZfZGJnKGN0eC0+ZGV2LCAidmFsaWQgYml0IGRlcHRoID0gJWRcbiIsCi0JCQltY2ZnLT5pbl9mbXQudmFsaWRfYml0X2RlcHRoKTsKKwlkZXZfZGJnKGN0eC0+ZGV2LCAiY2hhbm5lbHMgPSAlZFxuIiwgbWNmZy0+aW5fZm10WzBdLmNoYW5uZWxzKTsKKwlkZXZfZGJnKGN0eC0+ZGV2LCAic19mcmVxID0gJWRcbiIsIG1jZmctPmluX2ZtdFswXS5zX2ZyZXEpOworCWRldl9kYmcoY3R4LT5kZXYsICJjaF9jZmcgPSAlZFxuIiwgbWNmZy0+aW5fZm10WzBdLmNoX2NmZyk7CisJZGV2X2RiZyhjdHgtPmRldiwgInZhbGlkIGJpdCBkZXB0aCA9ICVkXG4iLCBtY2ZnLT5pbl9mbXRbMF0udmFsaWRfYml0X2RlcHRoKTsKIAlkZXZfZGJnKGN0eC0+ZGV2LCAiT3V0cHV0IEZvcm1hdDpcbiIpOwotCWRldl9kYmcoY3R4LT5kZXYsICJjaGFubmVscyA9ICVkXG4iLCBtY2ZnLT5vdXRfZm10LmNoYW5uZWxzKTsKLQlkZXZfZGJnKGN0eC0+ZGV2LCAic19mcmVxID0gJWRcbiIsIG1jZmctPm91dF9mbXQuc19mcmVxKTsKLQlkZXZfZGJnKGN0eC0+ZGV2LCAidmFsaWQgYml0IGRlcHRoID0gJWRcbiIsCi0JCQltY2ZnLT5vdXRfZm10LnZhbGlkX2JpdF9kZXB0aCk7Ci0JZGV2X2RiZyhjdHgtPmRldiwgImNoX2NmZyA9ICVkXG4iLCBtY2ZnLT5vdXRfZm10LmNoX2NmZyk7CisJZGV2X2RiZyhjdHgtPmRldiwgImNoYW5uZWxzID0gJWRcbiIsIG1jZmctPm91dF9mbXRbMF0uY2hhbm5lbHMpOworCWRldl9kYmcoY3R4LT5kZXYsICJzX2ZyZXEgPSAlZFxuIiwgbWNmZy0+b3V0X2ZtdFswXS5zX2ZyZXEpOworCWRldl9kYmcoY3R4LT5kZXYsICJ2YWxpZCBiaXQgZGVwdGggPSAlZFxuIiwgbWNmZy0+b3V0X2ZtdFswXS52YWxpZF9iaXRfZGVwdGgpOworCWRldl9kYmcoY3R4LT5kZXYsICJjaF9jZmcgPSAlZFxuIiwgbWNmZy0+b3V0X2ZtdFswXS5jaF9jZmcpOwogfQogCiBzdGF0aWMgdm9pZCBza2xfdHBsZ191cGRhdGVfcGFyYW1zKHN0cnVjdCBza2xfbW9kdWxlX2ZtdCAqZm10LApAQCAtMTQ5LDggKzE0OSwyNCBAQAogCQlmbXQtPnNfZnJlcSA9IHBhcmFtcy0+c19mcmVxOwogCWlmIChmaXh1cCAmIFNLTF9DSF9GSVhVUF9NQVNLKQogCQlmbXQtPmNoYW5uZWxzID0gcGFyYW1zLT5jaDsKLQlpZiAoZml4dXAgJiBTS0xfRk1UX0ZJWFVQX01BU0spCi0JCWZtdC0+dmFsaWRfYml0X2RlcHRoID0gcGFyYW1zLT5zX2ZtdDsKKwlpZiAoZml4dXAgJiBTS0xfRk1UX0ZJWFVQX01BU0spIHsKKwkJZm10LT52YWxpZF9iaXRfZGVwdGggPSBza2xfZ2V0X2JpdF9kZXB0aChwYXJhbXMtPnNfZm10KTsKKworCQkvKgorCQkgKiAxNiBiaXQgaXMgMTYgYml0IGNvbnRhaW5lciB3aGVyZWFzIDI0IGJpdCBpcyBpbiAzMiBiaXQKKwkJICogY29udGFpbmVyIHNvIHVwZGF0ZSBiaXQgZGVwdGggYWNjb3JkaW5nbHkKKwkJICovCisJCXN3aXRjaCAoZm10LT52YWxpZF9iaXRfZGVwdGgpIHsKKwkJY2FzZSBTS0xfREVQVEhfMTZCSVQ6CisJCQlmbXQtPmJpdF9kZXB0aCA9IGZtdC0+dmFsaWRfYml0X2RlcHRoOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWZtdC0+Yml0X2RlcHRoID0gU0tMX0RFUFRIXzMyQklUOworCQkJYnJlYWs7CisJCX0KKwl9CisKIH0KIAogLyoKQEAgLTE3MSw4ICsxODcsOSBAQAogCWludCBpbl9maXh1cCwgb3V0X2ZpeHVwOwogCXN0cnVjdCBza2xfbW9kdWxlX2ZtdCAqaW5fZm10LCAqb3V0X2ZtdDsKIAotCWluX2ZtdCA9ICZtX2NmZy0+aW5fZm10OwotCW91dF9mbXQgPSAmbV9jZmctPm91dF9mbXQ7CisJLyogRml4dXBzIHdpbGwgYmUgYXBwbGllZCB0byBwaW4gMCBvbmx5ICovCisJaW5fZm10ID0gJm1fY2ZnLT5pbl9mbXRbMF07CisJb3V0X2ZtdCA9ICZtX2NmZy0+b3V0X2ZtdFswXTsKIAogCWlmIChwYXJhbXMtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CiAJCWlmIChpc19mZSkgewpAQCAtMjA5LDE4ICsyMjYsMjUgQEAKIAkJCQlzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1jZmcpCiB7CiAJaW50IG11bHRpcGxpZXIgPSAxOworCXN0cnVjdCBza2xfbW9kdWxlX2ZtdCAqaW5fZm10LCAqb3V0X2ZtdDsKKworCisJLyogU2luY2UgZml4dXBzIGlzIGFwcGxpZWQgdG8gcGluIDAgb25seSwgaWJzLCBvYnMgbmVlZHMKKwkgKiBjaGFuZ2UgZm9yIHBpbiAwIG9ubHkKKwkgKi8KKwlpbl9mbXQgPSAmbWNmZy0+aW5fZm10WzBdOworCW91dF9mbXQgPSAmbWNmZy0+b3V0X2ZtdFswXTsKIAogCWlmIChtY2ZnLT5tX3R5cGUgPT0gU0tMX01PRFVMRV9UWVBFX1NSQ0lOVCkKIAkJbXVsdGlwbGllciA9IDU7Ci0KLQltY2ZnLT5pYnMgPSAobWNmZy0+aW5fZm10LnNfZnJlcSAvIDEwMDApICoKLQkJCQkobWNmZy0+aW5fZm10LmNoYW5uZWxzKSAqCi0JCQkJKG1jZmctPmluX2ZtdC5iaXRfZGVwdGggPj4gMykgKgorCW1jZmctPmlicyA9IChpbl9mbXQtPnNfZnJlcSAvIDEwMDApICoKKwkJCQkobWNmZy0+aW5fZm10LT5jaGFubmVscykgKgorCQkJCShtY2ZnLT5pbl9mbXQtPmJpdF9kZXB0aCA+PiAzKSAqCiAJCQkJbXVsdGlwbGllcjsKIAotCW1jZmctPm9icyA9IChtY2ZnLT5vdXRfZm10LnNfZnJlcSAvIDEwMDApICoKLQkJCQkobWNmZy0+b3V0X2ZtdC5jaGFubmVscykgKgotCQkJCShtY2ZnLT5vdXRfZm10LmJpdF9kZXB0aCA+PiAzKSAqCisJbWNmZy0+b2JzID0gKG1jZmctPm91dF9mbXQtPnNfZnJlcSAvIDEwMDApICoKKwkJCQkobWNmZy0+b3V0X2ZtdC0+Y2hhbm5lbHMpICoKKwkJCQkobWNmZy0+b3V0X2ZtdC0+Yml0X2RlcHRoID4+IDMpICoKIAkJCQltdWx0aXBsaWVyOwogfQogCkBAIC0yOTIsNiArMzE2LDgzIEBACiB9CiAKIC8qCisgKiBzb21lIG1vZHVsZXMgY2FuIGhhdmUgbXVsdGlwbGUgcGFyYW1zIHNldCBmcm9tIHVzZXIgY29udHJvbCBhbmQKKyAqIG5lZWQgdG8gYmUgc2V0IGFmdGVyIG1vZHVsZSBpcyBpbml0aWFsaXplZC4gSWYgc2V0X3BhcmFtIGZsYWcgaXMKKyAqIHNldCBtb2R1bGUgcGFyYW1zIHdpbGwgYmUgZG9uZSBhZnRlciBtb2R1bGUgaXMgaW5pdGlhbGlzZWQuCisgKi8KK3N0YXRpYyBpbnQgc2tsX3RwbGdfc2V0X21vZHVsZV9wYXJhbXMoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJCQlzdHJ1Y3Qgc2tsX3NzdCAqY3R4KQoreworCWludCBpLCByZXQ7CisJc3RydWN0IHNrbF9tb2R1bGVfY2ZnICptY29uZmlnID0gdy0+cHJpdjsKKwljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqazsKKwlzdHJ1Y3Qgc29jX2J5dGVzX2V4dCAqc2I7CisJc3RydWN0IHNrbF9hbGdvX2RhdGEgKmJjOworCXN0cnVjdCBza2xfc3BlY2lmaWNfY2ZnICpzcF9jZmc7CisKKwlpZiAobWNvbmZpZy0+Zm9ybWF0c19jb25maWcuY2Fwc19zaXplID4gMCAmJgorCQltY29uZmlnLT5mb3JtYXRzX2NvbmZpZy5zZXRfcGFyYW1zID09IFNLTF9QQVJBTV9TRVQpIHsKKwkJc3BfY2ZnID0gJm1jb25maWctPmZvcm1hdHNfY29uZmlnOworCQlyZXQgPSBza2xfc2V0X21vZHVsZV9wYXJhbXMoY3R4LCBzcF9jZmctPmNhcHMsCisJCQkJCXNwX2NmZy0+Y2Fwc19zaXplLAorCQkJCQlzcF9jZmctPnBhcmFtX2lkLCBtY29uZmlnKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCB3LT5udW1fa2NvbnRyb2xzOyBpKyspIHsKKwkJayA9ICZ3LT5rY29udHJvbF9uZXdzW2ldOworCQlpZiAoay0+YWNjZXNzICYgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSykgeworCQkJc2IgPSAodm9pZCAqKSBrLT5wcml2YXRlX3ZhbHVlOworCQkJYmMgPSAoc3RydWN0IHNrbF9hbGdvX2RhdGEgKilzYi0+ZG9iai5wcml2YXRlOworCisJCQlpZiAoYmMtPnNldF9wYXJhbXMgPT0gU0tMX1BBUkFNX1NFVCkgeworCQkJCXJldCA9IHNrbF9zZXRfbW9kdWxlX3BhcmFtcyhjdHgsCisJCQkJCQkodTMyICopYmMtPnBhcmFtcywgYmMtPm1heCwKKwkJCQkJCWJjLT5wYXJhbV9pZCwgbWNvbmZpZyk7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNvbWUgbW9kdWxlIHBhcmFtIGNhbiBzZXQgZnJvbSB1c2VyIGNvbnRyb2wgYW5kIHRoaXMgaXMgcmVxdWlyZWQgYXMKKyAqIHdoZW4gbW9kdWxlIGlzIGluaXRhaWx6ZWQuIGlmIG1vZHVsZSBwYXJhbSBpcyByZXF1aXJlZCBpbiBpbml0IGl0IGlzCisgKiBpZGVudGlmZWQgYnkgc2V0X3BhcmFtIGZsYWcuIGlmIHNldF9wYXJhbSBmbGFnIGlzIG5vdCBzZXQsIHRoZW4gdGhpcworICogcGFyYW1ldGVyIG5lZWRzIHRvIHNldCBhcyBwYXJ0IG9mIG1vZHVsZSBpbml0LgorICovCitzdGF0aWMgaW50IHNrbF90cGxnX3NldF9tb2R1bGVfaW5pdF9kYXRhKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQoreworCWNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprOworCXN0cnVjdCBzb2NfYnl0ZXNfZXh0ICpzYjsKKwlzdHJ1Y3Qgc2tsX2FsZ29fZGF0YSAqYmM7CisJc3RydWN0IHNrbF9tb2R1bGVfY2ZnICptY29uZmlnID0gdy0+cHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB3LT5udW1fa2NvbnRyb2xzOyBpKyspIHsKKwkJayA9ICZ3LT5rY29udHJvbF9uZXdzW2ldOworCQlpZiAoay0+YWNjZXNzICYgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSykgeworCQkJc2IgPSAoc3RydWN0IHNvY19ieXRlc19leHQgKilrLT5wcml2YXRlX3ZhbHVlOworCQkJYmMgPSAoc3RydWN0IHNrbF9hbGdvX2RhdGEgKilzYi0+ZG9iai5wcml2YXRlOworCisJCQlpZiAoYmMtPnNldF9wYXJhbXMgIT0gU0tMX1BBUkFNX0lOSVQpCisJCQkJY29udGludWU7CisKKwkJCW1jb25maWctPmZvcm1hdHNfY29uZmlnLmNhcHMgPSAodTMyICopJmJjLT5wYXJhbXM7CisJCQltY29uZmlnLT5mb3JtYXRzX2NvbmZpZy5jYXBzX3NpemUgPSBiYy0+bWF4OworCisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgogICogSW5zaWRlIGEgcGlwZSBpbnN0YW5jZSwgd2UgY2FuIGhhdmUgdmFyaW91cyBtb2R1bGVzLiBUaGVzZSBtb2R1bGVzIG5lZWQKICAqIHRvIGluc3RhbnRpYXRlZCBpbiBEU1AgYnkgaW52b2tpbmcgSU5JVF9NT0RVTEUgSVBDLCB3aGljaCBpcyBhY2hpZXZlZCBieQogICogc2tsX2luaXRfbW9kdWxlKCkgcm91dGluZSwgc28gaW52b2tlIHRoYXQgZm9yIGFsbCBtb2R1bGVzIGluIGEgcGlwZWxpbmUKQEAgLTMxMywxMiArNDE0LDI1IEBACiAJCWlmICghc2tsX3RwbGdfYWxsb2NfcGlwZV9tY3BzKHNrbCwgbWNvbmZpZykpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAorCQlpZiAobWNvbmZpZy0+aXNfbG9hZGFibGUgJiYgY3R4LT5kc3AtPmZ3X29wcy5sb2FkX21vZCkgeworCQkJcmV0ID0gY3R4LT5kc3AtPmZ3X29wcy5sb2FkX21vZChjdHgtPmRzcCwKKwkJCQltY29uZmlnLT5pZC5tb2R1bGVfaWQsIG1jb25maWctPmd1aWQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCS8qCiAJCSAqIGFwcGx5IGZpeC9jb252ZXJzaW9uIHRvIG1vZHVsZSBwYXJhbXMgYmFzZWQgb24KIAkJICogRkUvQkUgcGFyYW1zCiAJCSAqLwogCQlza2xfdHBsZ191cGRhdGVfbW9kdWxlX3BhcmFtcyh3LCBjdHgpOwotCQlyZXQgPSBza2xfaW5pdF9tb2R1bGUoY3R4LCBtY29uZmlnLCBOVUxMKTsKKworCQlza2xfdHBsZ19zZXRfbW9kdWxlX2luaXRfZGF0YSh3KTsKKwkJcmV0ID0gc2tsX2luaXRfbW9kdWxlKGN0eCwgbWNvbmZpZyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBza2xfdHBsZ19zZXRfbW9kdWxlX3BhcmFtcyh3LCBjdHgpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMzI2LDYgKzQ0MCwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNrbF90cGxnX3VubG9hZF9waXBlX21vZHVsZXMoc3RydWN0IHNrbF9zc3QgKmN0eCwKKwkgc3RydWN0IHNrbF9waXBlICpwaXBlKQoreworCXN0cnVjdCBza2xfcGlwZV9tb2R1bGUgKndfbW9kdWxlID0gTlVMTDsKKwlzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1jb25maWcgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3X21vZHVsZSwgJnBpcGUtPndfbGlzdCwgbm9kZSkgeworCQltY29uZmlnICA9IHdfbW9kdWxlLT53LT5wcml2OworCisJCWlmIChtY29uZmlnLT5pc19sb2FkYWJsZSAmJiBjdHgtPmRzcC0+Zndfb3BzLnVubG9hZF9tb2QpCisJCQlyZXR1cm4gY3R4LT5kc3AtPmZ3X29wcy51bmxvYWRfbW9kKGN0eC0+ZHNwLAorCQkJCQkJbWNvbmZpZy0+aWQubW9kdWxlX2lkKTsKKwl9CisKKwkvKiBubyBtb2R1bGVzIHRvIHVubG9hZCBpbiB0aGlzIHBhdGgsIHNvIHJldHVybiAqLworCXJldHVybiAwOworfQorCiAvKgogICogTWl4ZXIgbW9kdWxlIHJlcHJlc2VudHMgYSBwaXBlbGluZS4gU28gaW4gdGhlIFByZS1QTVUgZXZlbnQgb2YgbWl4ZXIgd2UKICAqIG5lZWQgY3JlYXRlIHRoZSBwaXBlbGluZS4gU28gd2UgZG8gZm9sbG93aW5nOgpAQCAtMzk3LDYgKzUyOSw1OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNrbF90cGxnX2JpbmRfc2lua3Moc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNrbCAqc2tsLAorCQkJCXN0cnVjdCBza2xfbW9kdWxlX2NmZyAqc3JjX21jb25maWcpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rID0gTlVMTCwgKm5leHRfc2luayA9IE5VTEw7CisJc3RydWN0IHNrbF9tb2R1bGVfY2ZnICpzaW5rX21jb25maWc7CisJc3RydWN0IHNrbF9zc3QgKmN0eCA9IHNrbC0+c2tsX3NzdDsKKwlpbnQgcmV0OworCisJc25kX3NvY19kYXBtX3dpZGdldF9mb3JfZWFjaF9zaW5rX3BhdGgodywgcCkgeworCQlpZiAoIXAtPmNvbm5lY3QpCisJCQljb250aW51ZTsKKworCQlkZXZfZGJnKGN0eC0+ZGV2LCAiJXM6IHNyYyB3aWRnZXQ9JXNcbiIsIF9fZnVuY19fLCB3LT5uYW1lKTsKKwkJZGV2X2RiZyhjdHgtPmRldiwgIiVzOiBzaW5rIHdpZGdldD0lc1xuIiwgX19mdW5jX18sIHAtPnNpbmstPm5hbWUpOworCisJCW5leHRfc2luayA9IHAtPnNpbms7CisJCS8qCisJCSAqIGhlcmUgd2Ugd2lsbCBjaGVjayB3aWRnZXRzIGluIHNpbmsgcGlwZWxpbmVzLCBzbyB0aGF0CisJCSAqIGNhbiBiZSBhbnkgd2lkZ2V0cyB0eXBlIGFuZCB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGlmCisJCSAqIHRoZXkgYXJlIG9uZXMgdXNlZCBmb3IgU0tMIHNvIGNoZWNrIHRoYXQgZmlyc3QKKwkJICovCisJCWlmICgocC0+c2luay0+cHJpdiAhPSBOVUxMKSAmJgorCQkJCQlpc19za2xfZHNwX3dpZGdldF90eXBlKHAtPnNpbmspKSB7CisKKwkJCXNpbmsgPSBwLT5zaW5rOworCQkJc2lua19tY29uZmlnID0gc2luay0+cHJpdjsKKworCQkJLyogQmluZCBzb3VyY2UgdG8gc2luaywgbWl4aW4gaXMgYWx3YXlzIHNvdXJjZSAqLworCQkJcmV0ID0gc2tsX2JpbmRfbW9kdWxlcyhjdHgsIHNyY19tY29uZmlnLCBzaW5rX21jb25maWcpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQkvKiBTdGFydCBzaW5rcyBwaXBlIGZpcnN0ICovCisJCQlpZiAoc2lua19tY29uZmlnLT5waXBlLT5zdGF0ZSAhPSBTS0xfUElQRV9TVEFSVEVEKSB7CisJCQkJaWYgKHNpbmtfbWNvbmZpZy0+cGlwZS0+Y29ubl90eXBlICE9CisJCQkJCQkJU0tMX1BJUEVfQ09OTl9UWVBFX0ZFKQorCQkJCQlyZXQgPSBza2xfcnVuX3BpcGUoY3R4LAorCQkJCQkJCXNpbmtfbWNvbmZpZy0+cGlwZSk7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCWlmICghc2luaykKKwkJcmV0dXJuIHNrbF90cGxnX2JpbmRfc2lua3MobmV4dF9zaW5rLCBza2wsIHNyY19tY29uZmlnKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogQSBQR0EgcmVwcmVzZW50cyBhIG1vZHVsZSBpbiBhIHBpcGVsaW5lLiBTbyBpbiB0aGUgUHJlLVBNVSBldmVudCBvZiBQR0EKICAqIHdlIG5lZWQgdG8gZG8gZm9sbG93aW5nOgpAQCAtNDA4LDc1ICs1OTIsNjIgQEAKICAqICAgLSBUaGVuIHJ1biBjdXJyZW50IHBpcGUKICAqLwogc3RhdGljIGludCBza2xfdHBsZ19wZ2FfZGFwbV9wcmVfcG11X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAotCQkJCQkJCXN0cnVjdCBza2wgKnNrbCkKKwkJCQkJCQkJc3RydWN0IHNrbCAqc2tsKQogewotCXN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcDsKLQlzdHJ1Y3Qgc2tsX2RhcG1fcGF0aF9saXN0ICpwYXRoX2xpc3Q7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNvdXJjZSwgKnNpbms7Ci0Jc3RydWN0IHNrbF9tb2R1bGVfY2ZnICpzcmNfbWNvbmZpZywgKnNpbmtfbWNvbmZpZzsKKwlzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKnNyY19tY29uZmlnOwogCXN0cnVjdCBza2xfc3N0ICpjdHggPSBza2wtPnNrbF9zc3Q7CiAJaW50IHJldCA9IDA7CiAKLQlzb3VyY2UgPSB3OwotCXNyY19tY29uZmlnID0gc291cmNlLT5wcml2OworCXNyY19tY29uZmlnID0gdy0+cHJpdjsKIAogCS8qCiAJICogZmluZCB3aGljaCBzaW5rIGl0IGlzIGNvbm5lY3RlZCB0bywgYmluZCB3aXRoIHRoZSBzaW5rLAogCSAqIGlmIHNpbmsgaXMgbm90IHN0YXJ0ZWQsIHN0YXJ0IHNpbmsgcGlwZSBmaXJzdCwgdGhlbiBzdGFydAogCSAqIHRoaXMgcGlwZQogCSAqLwotCXNuZF9zb2NfZGFwbV93aWRnZXRfZm9yX2VhY2hfc291cmNlX3BhdGgodywgcCkgewotCQlpZiAoIXAtPmNvbm5lY3QpCi0JCQljb250aW51ZTsKLQotCQlkZXZfZGJnKGN0eC0+ZGV2LCAiJXM6IHNyYyB3aWRnZXQ9JXNcbiIsIF9fZnVuY19fLCB3LT5uYW1lKTsKLQkJZGV2X2RiZyhjdHgtPmRldiwgIiVzOiBzaW5rIHdpZGdldD0lc1xuIiwgX19mdW5jX18sIHAtPnNpbmstPm5hbWUpOwotCi0JCS8qCi0JCSAqIGhlcmUgd2Ugd2lsbCBjaGVjayB3aWRnZXRzIGluIHNpbmsgcGlwZWxpbmVzLCBzbyB0aGF0Ci0JCSAqIGNhbiBiZSBhbnkgd2lkZ2V0cyB0eXBlIGFuZCB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGlmCi0JCSAqIHRoZXkgYXJlIG9uZXMgdXNlZCBmb3IgU0tMIHNvIGNoZWNrIHRoYXQgZmlyc3QKLQkJICovCi0JCWlmICgocC0+c2luay0+cHJpdiAhPSBOVUxMKSAmJgotCQkJCQlpc19za2xfZHNwX3dpZGdldF90eXBlKHAtPnNpbmspKSB7Ci0KLQkJCXNpbmsgPSBwLT5zaW5rOwotCQkJc3JjX21jb25maWcgPSBzb3VyY2UtPnByaXY7Ci0JCQlzaW5rX21jb25maWcgPSBzaW5rLT5wcml2OwotCi0JCQkvKiBCaW5kIHNvdXJjZSB0byBzaW5rLCBtaXhpbiBpcyBhbHdheXMgc291cmNlICovCi0JCQlyZXQgPSBza2xfYmluZF9tb2R1bGVzKGN0eCwgc3JjX21jb25maWcsIHNpbmtfbWNvbmZpZyk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0KLQkJCS8qIFN0YXJ0IHNpbmtzIHBpcGUgZmlyc3QgKi8KLQkJCWlmIChzaW5rX21jb25maWctPnBpcGUtPnN0YXRlICE9IFNLTF9QSVBFX1NUQVJURUQpIHsKLQkJCQlyZXQgPSBza2xfcnVuX3BpcGUoY3R4LCBzaW5rX21jb25maWctPnBpcGUpOwotCQkJCWlmIChyZXQpCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0KLQkJCXBhdGhfbGlzdCA9IGt6YWxsb2MoCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc2tsX2RhcG1fcGF0aF9saXN0KSwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQlpZiAocGF0aF9saXN0ID09IE5VTEwpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCS8qIEFkZCBjb25uZWN0ZWQgcGF0aCB0byBvbmUgZ2xvYmFsIGxpc3QgKi8KLQkJCXBhdGhfbGlzdC0+ZGFwbV9wYXRoID0gcDsKLQkJCWxpc3RfYWRkX3RhaWwoJnBhdGhfbGlzdC0+bm9kZSwgJnNrbC0+ZGFwbV9wYXRoX2xpc3QpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBTdGFydCBzb3VyY2UgcGlwZSBsYXN0IGFmdGVyIHN0YXJ0aW5nIGFsbCBzaW5rcyAqLwotCXJldCA9IHNrbF9ydW5fcGlwZShjdHgsIHNyY19tY29uZmlnLT5waXBlKTsKKwlyZXQgPSBza2xfdHBsZ19iaW5kX3NpbmtzKHcsIHNrbCwgc3JjX21jb25maWcpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKiBTdGFydCBzb3VyY2UgcGlwZSBsYXN0IGFmdGVyIHN0YXJ0aW5nIGFsbCBzaW5rcyAqLworCWlmIChzcmNfbWNvbmZpZy0+cGlwZS0+Y29ubl90eXBlICE9IFNLTF9QSVBFX0NPTk5fVFlQRV9GRSkKKwkJcmV0dXJuIHNrbF9ydW5fcGlwZShjdHgsIHNyY19tY29uZmlnLT5waXBlKTsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNrbF9nZXRfc3JjX2RzcF93aWRnZXQoCisJCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LCBzdHJ1Y3Qgc2tsICpza2wpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzcmNfdyA9IE5VTEw7CisJc3RydWN0IHNrbF9zc3QgKmN0eCA9IHNrbC0+c2tsX3NzdDsKKworCXNuZF9zb2NfZGFwbV93aWRnZXRfZm9yX2VhY2hfc291cmNlX3BhdGgodywgcCkgeworCQlzcmNfdyA9IHAtPnNvdXJjZTsKKwkJaWYgKCFwLT5jb25uZWN0KQorCQkJY29udGludWU7CisKKwkJZGV2X2RiZyhjdHgtPmRldiwgInNpbmsgd2lkZ2V0PSVzXG4iLCB3LT5uYW1lKTsKKwkJZGV2X2RiZyhjdHgtPmRldiwgInNyYyB3aWRnZXQ9JXNcbiIsIHAtPnNvdXJjZS0+bmFtZSk7CisKKwkJLyoKKwkJICogaGVyZSB3ZSB3aWxsIGNoZWNrIHdpZGdldHMgaW4gc2luayBwaXBlbGluZXMsIHNvIHRoYXQgY2FuCisJCSAqIGJlIGFueSB3aWRnZXRzIHR5cGUgYW5kIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaWYgdGhleSBhcmUKKwkJICogb25lcyB1c2VkIGZvciBTS0wgc28gY2hlY2sgdGhhdCBmaXJzdAorCQkgKi8KKwkJaWYgKChwLT5zb3VyY2UtPnByaXYgIT0gTlVMTCkgJiYKKwkJCQkJaXNfc2tsX2RzcF93aWRnZXRfdHlwZShwLT5zb3VyY2UpKSB7CisJCQlyZXR1cm4gcC0+c291cmNlOworCQl9CisJfQorCisJaWYgKHNyY193ICE9IE5VTEwpCisJCXJldHVybiBza2xfZ2V0X3NyY19kc3Bfd2lkZ2V0KHNyY193LCBza2wpOworCisJcmV0dXJuIE5VTEw7Cit9CisKIC8qCiAgKiBpbiB0aGUgUG9zdC1QTVUgZXZlbnQgb2YgbWl4ZXIgd2UgbmVlZCB0byBkbyBmb2xsb3dpbmc6CiAgKiAgIC0gQ2hlY2sgaWYgdGhpcyBwaXBlIGlzIHJ1bm5pbmcKQEAgLTQ5MCw3ICs2NjEsNiBAQAogCQkJCQkJCXN0cnVjdCBza2wgKnNrbCkKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnA7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNvdXJjZSwgKnNpbms7CiAJc3RydWN0IHNrbF9tb2R1bGVfY2ZnICpzcmNfbWNvbmZpZywgKnNpbmtfbWNvbmZpZzsKIAlzdHJ1Y3Qgc2tsX3NzdCAqY3R4ID0gc2tsLT5za2xfc3N0OwpAQCAtNTA0LDMyICs2NzQsMTggQEAKIAkgKiBvbmUgbW9yZSBzaW5rIGJlZm9yZSB0aGlzIHNpbmsgZ290IGNvbm5lY3RlZCwgU2luY2Ugc291cmNlIGlzCiAJICogc3RhcnRlZCwgYmluZCB0aGlzIHNpbmsgdG8gc291cmNlIGFuZCBzdGFydCB0aGlzIHBpcGUuCiAJICovCi0Jc25kX3NvY19kYXBtX3dpZGdldF9mb3JfZWFjaF9zaW5rX3BhdGgodywgcCkgewotCQlpZiAoIXAtPmNvbm5lY3QpCi0JCQljb250aW51ZTsKLQotCQlkZXZfZGJnKGN0eC0+ZGV2LCAic2luayB3aWRnZXQ9JXNcbiIsIHctPm5hbWUpOwotCQlkZXZfZGJnKGN0eC0+ZGV2LCAic3JjIHdpZGdldD0lc1xuIiwgcC0+c291cmNlLT5uYW1lKTsKKwlzb3VyY2UgPSBza2xfZ2V0X3NyY19kc3Bfd2lkZ2V0KHcsIHNrbCk7CisJaWYgKHNvdXJjZSAhPSBOVUxMKSB7CisJCXNyY19tY29uZmlnID0gc291cmNlLT5wcml2OworCQlzaW5rX21jb25maWcgPSBzaW5rLT5wcml2OworCQlzcmNfcGlwZV9zdGFydGVkID0gMTsKIAogCQkvKgotCQkgKiBoZXJlIHdlIHdpbGwgY2hlY2sgd2lkZ2V0cyBpbiBzaW5rIHBpcGVsaW5lcywgc28gdGhhdAotCQkgKiBjYW4gYmUgYW55IHdpZGdldHMgdHlwZSBhbmQgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpZgotCQkgKiB0aGV5IGFyZSBvbmVzIHVzZWQgZm9yIFNLTCBzbyBjaGVjayB0aGF0IGZpcnN0CisJCSAqIGNoZWNrIHBpcGUgc3RhdGUsIHRoZW4gbm8gbmVlZCB0byBiaW5kIG9yIHN0YXJ0IHRoZQorCQkgKiBwaXBlCiAJCSAqLwotCQlpZiAoKHAtPnNvdXJjZS0+cHJpdiAhPSBOVUxMKSAmJgotCQkJCQlpc19za2xfZHNwX3dpZGdldF90eXBlKHAtPnNvdXJjZSkpIHsKLQkJCXNvdXJjZSA9IHAtPnNvdXJjZTsKLQkJCXNyY19tY29uZmlnID0gc291cmNlLT5wcml2OwotCQkJc2lua19tY29uZmlnID0gc2luay0+cHJpdjsKLQkJCXNyY19waXBlX3N0YXJ0ZWQgPSAxOwotCi0JCQkvKgotCQkJICogY2hlY2sgcGlwZSBzdGF0ZSwgdGhlbiBubyBuZWVkIHRvIGJpbmQgb3Igc3RhcnQKLQkJCSAqIHRoZSBwaXBlCi0JCQkgKi8KLQkJCWlmIChzcmNfbWNvbmZpZy0+cGlwZS0+c3RhdGUgIT0gU0tMX1BJUEVfU1RBUlRFRCkKLQkJCQlzcmNfcGlwZV9zdGFydGVkID0gMDsKLQkJfQorCQlpZiAoc3JjX21jb25maWctPnBpcGUtPnN0YXRlICE9IFNLTF9QSVBFX1NUQVJURUQpCisJCQlzcmNfcGlwZV9zdGFydGVkID0gMDsKIAl9CiAKIAlpZiAoc3JjX3BpcGVfc3RhcnRlZCkgewpAQCAtNTM3LDcgKzY5Myw4IEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCXJldCA9IHNrbF9ydW5fcGlwZShjdHgsIHNpbmtfbWNvbmZpZy0+cGlwZSk7CisJCWlmIChzaW5rX21jb25maWctPnBpcGUtPmNvbm5fdHlwZSAhPSBTS0xfUElQRV9DT05OX1RZUEVfRkUpCisJCQlyZXQgPSBza2xfcnVuX3BpcGUoY3R4LCBzaW5rX21jb25maWctPnBpcGUpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC01NTIsNTQgKzcwOSwzNyBAQAogc3RhdGljIGludCBza2xfdHBsZ19taXhlcl9kYXBtX3ByZV9wbWRfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkJCQkJc3RydWN0IHNrbCAqc2tsKQogewotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsICpzaW5rOwogCXN0cnVjdCBza2xfbW9kdWxlX2NmZyAqc3JjX21jb25maWcsICpzaW5rX21jb25maWc7Ci0JaW50IHJldCA9IDAsIHBhdGhfZm91bmQgPSAwOwotCXN0cnVjdCBza2xfZGFwbV9wYXRoX2xpc3QgKnBhdGhfbGlzdCwgKnRtcF9saXN0OworCWludCByZXQgPSAwLCBpOwogCXN0cnVjdCBza2xfc3N0ICpjdHggPSBza2wtPnNrbF9zc3Q7CiAKLQlzaW5rID0gdzsKLQlzaW5rX21jb25maWcgPSBzaW5rLT5wcml2OworCXNpbmtfbWNvbmZpZyA9IHctPnByaXY7CiAKIAkvKiBTdG9wIHRoZSBwaXBlICovCiAJcmV0ID0gc2tsX3N0b3BfcGlwZShjdHgsIHNpbmtfbWNvbmZpZy0+cGlwZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qCi0JICogVGhpcyBsaXN0LCBkYXBtX3BhdGhfbGlzdCBoYW5kbGluZyBoZXJlIGRvZXMgbm90IG5lZWQgYW55IGxvY2tzCi0JICogYXMgd2UgYXJlIHVuZGVyIGRhcG0gbG9jayB3aGlsZSBoYW5kbGluZyB3aWRnZXQgZXZlbnRzLgotCSAqIExpc3QgY2FuIGJlIG1hbmlwdWxhdGVkIHNhZmVseSBvbmx5IHVuZGVyIGRhcG0gd2lkZ2V0cyBoYW5kbGVyCi0JICogcm91dGluZXMKLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGF0aF9saXN0LCB0bXBfbGlzdCwKLQkJCQkmc2tsLT5kYXBtX3BhdGhfbGlzdCwgbm9kZSkgewotCQlpZiAocGF0aF9saXN0LT5kYXBtX3BhdGgtPnNpbmsgPT0gc2luaykgewotCQkJZGV2X2RiZyhjdHgtPmRldiwgIlBhdGggZm91bmQgPSAlc1xuIiwKLQkJCQkJcGF0aF9saXN0LT5kYXBtX3BhdGgtPm5hbWUpOwotCQkJc291cmNlID0gcGF0aF9saXN0LT5kYXBtX3BhdGgtPnNvdXJjZTsKLQkJCXNyY19tY29uZmlnID0gc291cmNlLT5wcml2OwotCQkJcGF0aF9mb3VuZCA9IDE7CisJZm9yIChpID0gMDsgaSA8IHNpbmtfbWNvbmZpZy0+bWF4X2luX3F1ZXVlOyBpKyspIHsKKwkJaWYgKHNpbmtfbWNvbmZpZy0+bV9pbl9waW5baV0ucGluX3N0YXRlID09IFNLTF9QSU5fQklORF9ET05FKSB7CisJCQlzcmNfbWNvbmZpZyA9IHNpbmtfbWNvbmZpZy0+bV9pbl9waW5baV0udGd0X21jZmc7CisJCQlpZiAoIXNyY19tY29uZmlnKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIElmIHBhdGhfZm91bmQgPT0gMSwgdGhhdCBtZWFucyBwbWQgZm9yIHNvdXJjZQorCQkJICogcGlwZSBoYXMgbm90IG9jY3VycmVkLCBzb3VyY2UgaXMgY29ubmVjdGVkIHRvCisJCQkgKiBzb21lIG90aGVyIHNpbmsuIHNvIGl0cyByZXNwb25zaWJpbGl0eSBvZiBzaW5rCisJCQkgKiB0byB1bmJpbmQgaXRzZWxmIGZyb20gc291cmNlLgorCQkJICovCisJCQlyZXQgPSBza2xfc3RvcF9waXBlKGN0eCwgc3JjX21jb25maWctPnBpcGUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKIAotCQkJbGlzdF9kZWwoJnBhdGhfbGlzdC0+bm9kZSk7Ci0JCQlrZnJlZShwYXRoX2xpc3QpOwotCQkJYnJlYWs7CisJCQlyZXQgPSBza2xfdW5iaW5kX21vZHVsZXMoY3R4LAorCQkJCQkJc3JjX21jb25maWcsIHNpbmtfbWNvbmZpZyk7CiAJCX0KIAl9CiAKLQkvKgotCSAqIElmIHBhdGhfZm91bmQgPT0gMSwgdGhhdCBtZWFucyBwbWQgZm9yIHNvdXJjZSBwaXBlIGhhcwotCSAqIG5vdCBvY2N1cnJlZCwgc291cmNlIGlzIGNvbm5lY3RlZCB0byBzb21lIG90aGVyIHNpbmsuCi0JICogc28gaXRzIHJlc3BvbnNpYmlsaXR5IG9mIHNpbmsgdG8gdW5iaW5kIGl0c2VsZiBmcm9tIHNvdXJjZS4KLQkgKi8KLQlpZiAocGF0aF9mb3VuZCkgewotCQlyZXQgPSBza2xfc3RvcF9waXBlKGN0eCwgc3JjX21jb25maWctPnBpcGUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0ID0gc2tsX3VuYmluZF9tb2R1bGVzKGN0eCwgc3JjX21jb25maWcsIHNpbmtfbWNvbmZpZyk7Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjIyLDEwICs3NjIsMTIgQEAKIAlpbnQgcmV0ID0gMDsKIAogCXNrbF90cGxnX2ZyZWVfcGlwZV9tY3BzKHNrbCwgbWNvbmZpZyk7CisJc2tsX3RwbGdfZnJlZV9waXBlX21lbShza2wsIG1jb25maWcpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh3X21vZHVsZSwgJnNfcGlwZS0+d19saXN0LCBub2RlKSB7CiAJCWRzdF9tb2R1bGUgPSB3X21vZHVsZS0+dy0+cHJpdjsKIAorCQlza2xfdHBsZ19mcmVlX3BpcGVfbWNwcyhza2wsIGRzdF9tb2R1bGUpOwogCQlpZiAoc3JjX21vZHVsZSA9PSBOVUxMKSB7CiAJCQlzcmNfbW9kdWxlID0gZHN0X21vZHVsZTsKIAkJCWNvbnRpbnVlOwpAQCAtNjM5LDkgKzc4MSw4IEBACiAJfQogCiAJcmV0ID0gc2tsX2RlbGV0ZV9waXBlKGN0eCwgbWNvbmZpZy0+cGlwZSk7Ci0Jc2tsX3RwbGdfZnJlZV9waXBlX21lbShza2wsIG1jb25maWcpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2tsX3RwbGdfdW5sb2FkX3BpcGVfbW9kdWxlcyhjdHgsIHNfcGlwZSk7CiB9CiAKIC8qCkBAIC02NTMsNDcgKzc5NCwzNCBAQAogc3RhdGljIGludCBza2xfdHBsZ19wZ2FfZGFwbV9wb3N0X3BtZF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCQkJCQkJc3RydWN0IHNrbCAqc2tsKQogewotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsICpzaW5rOwogCXN0cnVjdCBza2xfbW9kdWxlX2NmZyAqc3JjX21jb25maWcsICpzaW5rX21jb25maWc7Ci0JaW50IHJldCA9IDAsIHBhdGhfZm91bmQgPSAwOwotCXN0cnVjdCBza2xfZGFwbV9wYXRoX2xpc3QgKnBhdGhfbGlzdCwgKnRtcF9wYXRoX2xpc3Q7CisJaW50IHJldCA9IDAsIGk7CiAJc3RydWN0IHNrbF9zc3QgKmN0eCA9IHNrbC0+c2tsX3NzdDsKIAotCXNvdXJjZSA9IHc7Ci0Jc3JjX21jb25maWcgPSBzb3VyY2UtPnByaXY7CisJc3JjX21jb25maWcgPSB3LT5wcml2OwogCi0Jc2tsX3RwbGdfZnJlZV9waXBlX21jcHMoc2tsLCBzcmNfbWNvbmZpZyk7CiAJLyogU3RvcCB0aGUgcGlwZSBzaW5jZSB0aGlzIGlzIGEgbWl4aW4gbW9kdWxlICovCiAJcmV0ID0gc2tsX3N0b3BfcGlwZShjdHgsIHNyY19tY29uZmlnLT5waXBlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhdGhfbGlzdCwgdG1wX3BhdGhfbGlzdCwgJnNrbC0+ZGFwbV9wYXRoX2xpc3QsIG5vZGUpIHsKLQkJaWYgKHBhdGhfbGlzdC0+ZGFwbV9wYXRoLT5zb3VyY2UgPT0gc291cmNlKSB7Ci0JCQlkZXZfZGJnKGN0eC0+ZGV2LCAiUGF0aCBmb3VuZCA9ICVzXG4iLAotCQkJCQlwYXRoX2xpc3QtPmRhcG1fcGF0aC0+bmFtZSk7Ci0JCQlzaW5rID0gcGF0aF9saXN0LT5kYXBtX3BhdGgtPnNpbms7Ci0JCQlzaW5rX21jb25maWcgPSBzaW5rLT5wcml2OwotCQkJcGF0aF9mb3VuZCA9IDE7Ci0KLQkJCWxpc3RfZGVsKCZwYXRoX2xpc3QtPm5vZGUpOwotCQkJa2ZyZWUocGF0aF9saXN0KTsKLQkJCWJyZWFrOworCWZvciAoaSA9IDA7IGkgPCBzcmNfbWNvbmZpZy0+bWF4X291dF9xdWV1ZTsgaSsrKSB7CisJCWlmIChzcmNfbWNvbmZpZy0+bV9vdXRfcGluW2ldLnBpbl9zdGF0ZSA9PSBTS0xfUElOX0JJTkRfRE9ORSkgeworCQkJc2lua19tY29uZmlnID0gc3JjX21jb25maWctPm1fb3V0X3BpbltpXS50Z3RfbWNmZzsKKwkJCWlmICghc2lua19tY29uZmlnKQorCQkJCWNvbnRpbnVlOworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSBjb25uZWN0ZXIgYW5kIGlmIHBhdGggaXMgZm91bmQgdGhhdCBtZWFucworCQkJICogdW5iaW5kIGJldHdlZW4gc291cmNlIGFuZCBzaW5rIGhhcyBub3QgaGFwcGVuZWQgeWV0CisJCQkgKi8KKwkJCXJldCA9IHNrbF9zdG9wX3BpcGUoY3R4LCBzaW5rX21jb25maWctPnBpcGUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCXJldCA9IHNrbF91bmJpbmRfbW9kdWxlcyhjdHgsIHNyY19tY29uZmlnLAorCQkJCQkJCXNpbmtfbWNvbmZpZyk7CiAJCX0KIAl9CiAKLQkvKgotCSAqIFRoaXMgaXMgYSBjb25uZWN0b3IgYW5kIGlmIHBhdGggaXMgZm91bmQgdGhhdCBtZWFucwotCSAqIHVuYmluZCBiZXR3ZWVuIHNvdXJjZSBhbmQgc2luayBoYXMgbm90IGhhcHBlbmVkIHlldAotCSAqLwotCWlmIChwYXRoX2ZvdW5kKSB7Ci0JCXJldCA9IHNrbF9zdG9wX3BpcGUoY3R4LCBzcmNfbWNvbmZpZy0+cGlwZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQlyZXQgPSBza2xfdW5iaW5kX21vZHVsZXMoY3R4LCBzcmNfbWNvbmZpZywgc2lua19tY29uZmlnKTsKLQl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NzQsNiArOTAyLDY3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2tsX3RwbGdfdGx2X2NvbnRyb2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJdW5zaWduZWQgaW50IF9fdXNlciAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IHNvY19ieXRlc19leHQgKnNiID0KKwkJCShzdHJ1Y3Qgc29jX2J5dGVzX2V4dCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXN0cnVjdCBza2xfYWxnb19kYXRhICpiYyA9IChzdHJ1Y3Qgc2tsX2FsZ29fZGF0YSAqKXNiLT5kb2JqLnByaXZhdGU7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncgPSBzbmRfc29jX2RhcG1fa2NvbnRyb2xfd2lkZ2V0KGtjb250cm9sKTsKKwlzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1jb25maWcgPSB3LT5wcml2OworCXN0cnVjdCBza2wgKnNrbCA9IGdldF9za2xfY3R4KHctPmRhcG0tPmRldik7CisKKwlpZiAody0+cG93ZXIpCisJCXNrbF9nZXRfbW9kdWxlX3BhcmFtcyhza2wtPnNrbF9zc3QsICh1MzIgKiliYy0+cGFyYW1zLAorCQkJCSAgICAgIGJjLT5tYXgsIGJjLT5wYXJhbV9pZCwgbWNvbmZpZyk7CisKKwlpZiAoYmMtPnBhcmFtcykgeworCQlpZiAoY29weV90b191c2VyKGRhdGEsICZiYy0+cGFyYW1faWQsIHNpemVvZih1MzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY29weV90b191c2VyKGRhdGEgKyAxLCAmc2l6ZSwgc2l6ZW9mKHUzMikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoZGF0YSArIDIsIGJjLT5wYXJhbXMsIHNpemUpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgU0tMX1BBUkFNX1ZFTkRPUl9JRCAweGZmCisKK3N0YXRpYyBpbnQgc2tsX3RwbGdfdGx2X2NvbnRyb2xfc2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJY29uc3QgdW5zaWduZWQgaW50IF9fdXNlciAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncgPSBzbmRfc29jX2RhcG1fa2NvbnRyb2xfd2lkZ2V0KGtjb250cm9sKTsKKwlzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1jb25maWcgPSB3LT5wcml2OworCXN0cnVjdCBzb2NfYnl0ZXNfZXh0ICpzYiA9CisJCQkoc3RydWN0IHNvY19ieXRlc19leHQgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3Qgc2tsX2FsZ29fZGF0YSAqYWMgPSAoc3RydWN0IHNrbF9hbGdvX2RhdGEgKilzYi0+ZG9iai5wcml2YXRlOworCXN0cnVjdCBza2wgKnNrbCA9IGdldF9za2xfY3R4KHctPmRhcG0tPmRldik7CisKKwlpZiAoYWMtPnBhcmFtcykgeworCQkvKgorCQkgKiBpZiB0aGUgcGFyYW1faXMgaXMgb2YgdHlwZSBWZW5kb3IsIGZpcm13YXJlIGV4cGVjdHMgYWN0dWFsCisJCSAqIHBhcmFtZXRlciBpZCBhbmQgc2l6ZSBmcm9tIHRoZSBjb250cm9sLgorCQkgKi8KKwkJaWYgKGFjLT5wYXJhbV9pZCA9PSBTS0xfUEFSQU1fVkVORE9SX0lEKSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoYWMtPnBhcmFtcywgZGF0YSwgc2l6ZSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0gZWxzZSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoYWMtPnBhcmFtcywKKwkJCQkJICAgZGF0YSArIDIgKiBzaXplb2YodTMyKSwgc2l6ZSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlpZiAody0+cG93ZXIpCisJCQlyZXR1cm4gc2tsX3NldF9tb2R1bGVfcGFyYW1zKHNrbC0+c2tsX3NzdCwKKwkJCQkJCSh1MzIgKilhYy0+cGFyYW1zLCBhYy0+bWF4LAorCQkJCQkJYWMtPnBhcmFtX2lkLCBtY29uZmlnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFRoZSBGRSBwYXJhbXMgYXJlIHBhc3NlZCBieSBod19wYXJhbXMgb2YgdGhlIERBSS4KICAqIE9uIGh3X3BhcmFtcywgdGhlIHBhcmFtcyBhcmUgc3RvcmVkIGluIEdhdGV3YXkgbW9kdWxlIG9mIHRoZSBGRSBhbmQgd2UKQEAgLTc5MCw5ICs5NzksOSBAQAogCW1lbWNweShwaXBlLT5wX3BhcmFtcywgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOwogCiAJaWYgKHBhcmFtcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCWZvcm1hdCA9ICZtY29uZmlnLT5pbl9mbXQ7CisJCWZvcm1hdCA9ICZtY29uZmlnLT5pbl9mbXRbMF07CiAJZWxzZQotCQlmb3JtYXQgPSAmbWNvbmZpZy0+b3V0X2ZtdDsKKwkJZm9ybWF0ID0gJm1jb25maWctPm91dF9mbXRbMF07CiAKIAkvKiBzZXQgdGhlIGh3X3BhcmFtcyAqLwogCWZvcm1hdC0+c19mcmVxID0gcGFyYW1zLT5zX2ZyZXE7CkBAIC04MDksNiArOTk4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNLTF9ERVBUSF8yNEJJVDoKKwljYXNlIFNLTF9ERVBUSF8zMkJJVDoKIAkJZm9ybWF0LT5iaXRfZGVwdGggPSBTS0xfREVQVEhfMzJCSVQ7CiAJCWJyZWFrOwogCkBAIC04NDYsNyArMTAzNiw3IEBACiAJCXcgPSBkYWktPnBsYXliYWNrX3dpZGdldDsKIAkJc25kX3NvY19kYXBtX3dpZGdldF9mb3JfZWFjaF9zaW5rX3BhdGgodywgcCkgewogCQkJaWYgKHAtPmNvbm5lY3QgJiYgcC0+c2luay0+cG93ZXIgJiYKLQkJCQkJaXNfc2tsX2RzcF93aWRnZXRfdHlwZShwLT5zaW5rKSkKKwkJCQkJIWlzX3NrbF9kc3Bfd2lkZ2V0X3R5cGUocC0+c2luaykpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChwLT5zaW5rLT5wcml2KSB7CkBAIC04NTksNyArMTA0OSw3IEBACiAJCXcgPSBkYWktPmNhcHR1cmVfd2lkZ2V0OwogCQlzbmRfc29jX2RhcG1fd2lkZ2V0X2Zvcl9lYWNoX3NvdXJjZV9wYXRoKHcsIHApIHsKIAkJCWlmIChwLT5jb25uZWN0ICYmIHAtPnNvdXJjZS0+cG93ZXIgJiYKLQkJCQkJaXNfc2tsX2RzcF93aWRnZXRfdHlwZShwLT5zb3VyY2UpKQorCQkJCQkhaXNfc2tsX2RzcF93aWRnZXRfdHlwZShwLT5zb3VyY2UpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAocC0+c291cmNlLT5wcml2KSB7CkBAIC05MjAsNiArMTExMCw5IEBACiAKIAltZW1jcHkocGlwZS0+cF9wYXJhbXMsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKIAorCWlmIChsaW5rX3R5cGUgPT0gTkhMVF9MSU5LX0hEQSkKKwkJcmV0dXJuIDA7CisKIAkvKiB1cGRhdGUgdGhlIGJsb2IgYmFzZWQgb24gdmlydHVhbCBidXNfaWQqLwogCWNmZyA9IHNrbF9nZXRfZXBfYmxvYihza2wsIG1jb25maWctPnZidXNfaWQsIGxpbmtfdHlwZSwKIAkJCQkJcGFyYW1zLT5zX2ZtdCwgcGFyYW1zLT5jaCwKQEAgLTk1MCwxOCArMTE0MywxMyBAQAogCQlpZiAocC0+Y29ubmVjdCAmJiBpc19za2xfZHNwX3dpZGdldF90eXBlKHAtPnNvdXJjZSkgJiYKIAkJCQkJCXAtPnNvdXJjZS0+cHJpdikgewogCi0JCQlpZiAoIXAtPnNvdXJjZS0+cG93ZXIpIHsKLQkJCQlyZXQgPSBza2xfdHBsZ19iZV9maWxsX3BpcGVfcGFyYW1zKAotCQkJCQkJZGFpLCBwLT5zb3VyY2UtPnByaXYsCi0JCQkJCQlwYXJhbXMpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJfQorCQkJcmV0ID0gc2tsX3RwbGdfYmVfZmlsbF9waXBlX3BhcmFtcyhkYWksCisJCQkJCQlwLT5zb3VyY2UtPnByaXYsIHBhcmFtcyk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9IGVsc2UgewotCQkJcmV0ID0gc2tsX3RwbGdfYmVfc2V0X3NyY19waXBlX3BhcmFtcygKLQkJCQkJCWRhaSwgcC0+c291cmNlLAlwYXJhbXMpOworCQkJcmV0ID0gc2tsX3RwbGdfYmVfc2V0X3NyY19waXBlX3BhcmFtcyhkYWksCisJCQkJCQlwLT5zb3VyY2UsIHBhcmFtcyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC05ODAsMTUgKzExNjgsMTAgQEAKIAkJaWYgKHAtPmNvbm5lY3QgJiYgaXNfc2tsX2RzcF93aWRnZXRfdHlwZShwLT5zaW5rKSAmJgogCQkJCQkJcC0+c2luay0+cHJpdikgewogCi0JCQlpZiAoIXAtPnNpbmstPnBvd2VyKSB7Ci0JCQkJcmV0ID0gc2tsX3RwbGdfYmVfZmlsbF9waXBlX3BhcmFtcygKLQkJCQkJCWRhaSwgcC0+c2luay0+cHJpdiwgcGFyYW1zKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0KLQorCQkJcmV0ID0gc2tsX3RwbGdfYmVfZmlsbF9waXBlX3BhcmFtcyhkYWksCisJCQkJCQlwLT5zaW5rLT5wcml2LCBwYXJhbXMpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKIAkJfSBlbHNlIHsKIAkJCXJldCA9IHNrbF90cGxnX2JlX3NldF9zaW5rX3BpcGVfcGFyYW1zKAogCQkJCQkJZGFpLCBwLT5zaW5rLCBwYXJhbXMpOwpAQCAtMTAzMCw2ICsxMjEzLDExIEBACiAJe1NLTF9QR0FfRVZFTlQsIHNrbF90cGxnX3BnYV9ldmVudH0sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfdHBsZ19ieXRlc19leHRfb3BzIHNrbF90bHZfb3BzW10gPSB7CisJe1NLTF9DT05UUk9MX1RZUEVfQllURV9UTFYsIHNrbF90cGxnX3Rsdl9jb250cm9sX2dldCwKKwkJCQkJc2tsX3RwbGdfdGx2X2NvbnRyb2xfc2V0fSwKK307CisKIC8qCiAgKiBUaGUgdG9wb2xvZ3kgYmluYXJ5IHBhc3NlcyB0aGUgcGluIGluZm8gZm9yIGEgbW9kdWxlIHNvIGluaXRpYWxpemUgdGhlIHBpbgogICogaW5mbyBwYXNzZWQgaW50byBtb2R1bGUgaW5zdGFuY2UKQEAgLTEwNDUsNiArMTIzMyw3IEBACiAJCW1fcGluW2ldLmlkLmluc3RhbmNlX2lkID0gZGZ3X3BpbltpXS5pbnN0YW5jZV9pZDsKIAkJbV9waW5baV0uaW5fdXNlID0gZmFsc2U7CiAJCW1fcGluW2ldLmlzX2R5bmFtaWMgPSBpc19keW5hbWljOworCQltX3BpbltpXS5waW5fc3RhdGUgPSBTS0xfUElOX1VOQklORDsKIAl9CiB9CiAKQEAgLTEwOTIsNiArMTI4MSwyNCBAQAogCXJldHVybiBwcGwtPnBpcGU7CiB9CiAKK3N0YXRpYyB2b2lkIHNrbF90cGxnX2ZpbGxfZm10KHN0cnVjdCBza2xfbW9kdWxlX2ZtdCAqZHN0X2ZtdCwKKwkJCQlzdHJ1Y3Qgc2tsX2Rmd19tb2R1bGVfZm10ICpzcmNfZm10LAorCQkJCWludCBwaW5zKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBpbnM7IGkrKykgeworCQlkc3RfZm10W2ldLmNoYW5uZWxzICA9IHNyY19mbXRbaV0uY2hhbm5lbHM7CisJCWRzdF9mbXRbaV0uc19mcmVxID0gc3JjX2ZtdFtpXS5mcmVxOworCQlkc3RfZm10W2ldLmJpdF9kZXB0aCA9IHNyY19mbXRbaV0uYml0X2RlcHRoOworCQlkc3RfZm10W2ldLnZhbGlkX2JpdF9kZXB0aCA9IHNyY19mbXRbaV0udmFsaWRfYml0X2RlcHRoOworCQlkc3RfZm10W2ldLmNoX2NmZyA9IHNyY19mbXRbaV0uY2hfY2ZnOworCQlkc3RfZm10W2ldLmNoX21hcCA9IHNyY19mbXRbaV0uY2hfbWFwOworCQlkc3RfZm10W2ldLmludGVybGVhdmluZ19zdHlsZSA9IHNyY19mbXRbaV0uaW50ZXJsZWF2aW5nX3N0eWxlOworCQlkc3RfZm10W2ldLnNhbXBsZV90eXBlID0gc3JjX2ZtdFtpXS5zYW1wbGVfdHlwZTsKKwl9Cit9CisKIC8qCiAgKiBUb3BvbG9neSBjb3JlIHdpZGdldCBsb2FkIGNhbGxiYWNrCiAgKgpAQCAtMTEzMCwyMiArMTMzNywxNiBAQAogCW1jb25maWctPm1heF9pbl9xdWV1ZSA9IGRmd19jb25maWctPm1heF9pbl9xdWV1ZTsKIAltY29uZmlnLT5tYXhfb3V0X3F1ZXVlID0gZGZ3X2NvbmZpZy0+bWF4X291dF9xdWV1ZTsKIAltY29uZmlnLT5pc19sb2FkYWJsZSA9IGRmd19jb25maWctPmlzX2xvYWRhYmxlOwotCW1jb25maWctPmluX2ZtdC5jaGFubmVscyA9IGRmd19jb25maWctPmluX2ZtdC5jaGFubmVsczsKLQltY29uZmlnLT5pbl9mbXQuc19mcmVxID0gZGZ3X2NvbmZpZy0+aW5fZm10LmZyZXE7Ci0JbWNvbmZpZy0+aW5fZm10LmJpdF9kZXB0aCA9IGRmd19jb25maWctPmluX2ZtdC5iaXRfZGVwdGg7Ci0JbWNvbmZpZy0+aW5fZm10LnZhbGlkX2JpdF9kZXB0aCA9Ci0JCQkJZGZ3X2NvbmZpZy0+aW5fZm10LnZhbGlkX2JpdF9kZXB0aDsKLQltY29uZmlnLT5pbl9mbXQuY2hfY2ZnID0gZGZ3X2NvbmZpZy0+aW5fZm10LmNoX2NmZzsKLQltY29uZmlnLT5vdXRfZm10LmNoYW5uZWxzID0gZGZ3X2NvbmZpZy0+b3V0X2ZtdC5jaGFubmVsczsKLQltY29uZmlnLT5vdXRfZm10LnNfZnJlcSA9IGRmd19jb25maWctPm91dF9mbXQuZnJlcTsKLQltY29uZmlnLT5vdXRfZm10LmJpdF9kZXB0aCA9IGRmd19jb25maWctPm91dF9mbXQuYml0X2RlcHRoOwotCW1jb25maWctPm91dF9mbXQudmFsaWRfYml0X2RlcHRoID0KLQkJCQlkZndfY29uZmlnLT5vdXRfZm10LnZhbGlkX2JpdF9kZXB0aDsKLQltY29uZmlnLT5vdXRfZm10LmNoX2NmZyA9IGRmd19jb25maWctPm91dF9mbXQuY2hfY2ZnOworCXNrbF90cGxnX2ZpbGxfZm10KG1jb25maWctPmluX2ZtdCwgZGZ3X2NvbmZpZy0+aW5fZm10LAorCQkJCQkJTU9EVUxFX01BWF9JTl9QSU5TKTsKKwlza2xfdHBsZ19maWxsX2ZtdChtY29uZmlnLT5vdXRfZm10LCBkZndfY29uZmlnLT5vdXRfZm10LAorCQkJCQkJTU9EVUxFX01BWF9PVVRfUElOUyk7CisKIAltY29uZmlnLT5wYXJhbXNfZml4dXAgPSBkZndfY29uZmlnLT5wYXJhbXNfZml4dXA7CiAJbWNvbmZpZy0+Y29udmVydGVyID0gZGZ3X2NvbmZpZy0+Y29udmVydGVyOwogCW1jb25maWctPm1fdHlwZSA9IGRmd19jb25maWctPm1vZHVsZV90eXBlOwogCW1jb25maWctPnZidXNfaWQgPSBkZndfY29uZmlnLT52YnVzX2lkOworCW1jb25maWctPm1lbV9wYWdlcyA9IGRmd19jb25maWctPm1lbV9wYWdlczsKIAogCXBpcGUgPSBza2xfdHBsZ19hZGRfcGlwZShidXMtPmRldiwgc2tsLCAmZGZ3X2NvbmZpZy0+cGlwZSk7CiAJaWYgKHBpcGUpCkBAIC0xMTU2LDEwICsxMzU3LDEzIEBACiAJbWNvbmZpZy0+dGltZV9zbG90ID0gZGZ3X2NvbmZpZy0+dGltZV9zbG90OwogCW1jb25maWctPmZvcm1hdHNfY29uZmlnLmNhcHNfc2l6ZSA9IGRmd19jb25maWctPmNhcHMuY2Fwc19zaXplOwogCi0JbWNvbmZpZy0+bV9pbl9waW4gPSBkZXZtX2t6YWxsb2MoYnVzLT5kZXYsCi0JCQkJKG1jb25maWctPm1heF9pbl9xdWV1ZSkgKgotCQkJCQlzaXplb2YoKm1jb25maWctPm1faW5fcGluKSwKLQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoZGZ3X2NvbmZpZy0+aXNfbG9hZGFibGUpCisJCW1lbWNweShtY29uZmlnLT5ndWlkLCBkZndfY29uZmlnLT51dWlkLAorCQkJCQlBUlJBWV9TSVpFKGRmd19jb25maWctPnV1aWQpKTsKKworCW1jb25maWctPm1faW5fcGluID0gZGV2bV9remFsbG9jKGJ1cy0+ZGV2LCAobWNvbmZpZy0+bWF4X2luX3F1ZXVlKSAqCisJCQkJCQlzaXplb2YoKm1jb25maWctPm1faW5fcGluKSwKKwkJCQkJCUdGUF9LRVJORUwpOwogCWlmICghbWNvbmZpZy0+bV9pbl9waW4pCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMTg4LDcgKzEzOTIsOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1lbWNweShtY29uZmlnLT5mb3JtYXRzX2NvbmZpZy5jYXBzLCBkZndfY29uZmlnLT5jYXBzLmNhcHMsCi0JCQkJCSBkZndfY29uZmlnLT5jYXBzLmNhcHNfc2l6ZSk7CisJCQkJCQkgZGZ3X2NvbmZpZy0+Y2Fwcy5jYXBzX3NpemUpOworCW1jb25maWctPmZvcm1hdHNfY29uZmlnLnBhcmFtX2lkID0gZGZ3X2NvbmZpZy0+Y2Fwcy5wYXJhbV9pZDsKKwltY29uZmlnLT5mb3JtYXRzX2NvbmZpZy5zZXRfcGFyYW1zID0gZGZ3X2NvbmZpZy0+Y2Fwcy5zZXRfcGFyYW1zOwogCiBiaW5kX2V2ZW50OgogCWlmICh0cGxnX3ctPmV2ZW50X3R5cGUgPT0gMCkgewpAQCAtMTIwOSw4ICsxNDE1LDcwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2tsX2luaXRfYWxnb19kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNvY19ieXRlc19leHQgKmJlLAorCQkJCQlzdHJ1Y3Qgc25kX3NvY190cGxnX2J5dGVzX2NvbnRyb2wgKmJjKQoreworCXN0cnVjdCBza2xfYWxnb19kYXRhICphYzsKKwlzdHJ1Y3Qgc2tsX2Rmd19hbGdvX2RhdGEgKmRmd19hYyA9CisJCQkJKHN0cnVjdCBza2xfZGZ3X2FsZ29fZGF0YSAqKWJjLT5wcml2LmRhdGE7CisKKwlhYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqYWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEZpbGwgcHJpdmF0ZSBkYXRhICovCisJYWMtPm1heCA9IGRmd19hYy0+bWF4OworCWFjLT5wYXJhbV9pZCA9IGRmd19hYy0+cGFyYW1faWQ7CisJYWMtPnNldF9wYXJhbXMgPSBkZndfYWMtPnNldF9wYXJhbXM7CisKKwlpZiAoYWMtPm1heCkgeworCQlhYy0+cGFyYW1zID0gKGNoYXIgKikgZGV2bV9remFsbG9jKGRldiwgYWMtPm1heCwgR0ZQX0tFUk5FTCk7CisJCWlmICghYWMtPnBhcmFtcykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWlmIChkZndfYWMtPnBhcmFtcykKKwkJCW1lbWNweShhYy0+cGFyYW1zLCBkZndfYWMtPnBhcmFtcywgYWMtPm1heCk7CisJfQorCisJYmUtPmRvYmoucHJpdmF0ZSAgPSBhYzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2xfdHBsZ19jb250cm9sX2xvYWQoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjbXBudCwKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa2N0bCwKKwkJCQlzdHJ1Y3Qgc25kX3NvY190cGxnX2N0bF9oZHIgKmhkcikKK3sKKwlzdHJ1Y3Qgc29jX2J5dGVzX2V4dCAqc2I7CisJc3RydWN0IHNuZF9zb2NfdHBsZ19ieXRlc19jb250cm9sICp0cGxnX2JjOworCXN0cnVjdCBoZGFjX2V4dF9idXMgKmVidXMgID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY21wbnQpOworCXN0cnVjdCBoZGFjX2J1cyAqYnVzID0gZWJ1c190b19oYnVzKGVidXMpOworCisJc3dpdGNoIChoZHItPm9wcy5pbmZvKSB7CisJY2FzZSBTTkRfU09DX1RQTEdfQ1RMX0JZVEVTOgorCQl0cGxnX2JjID0gY29udGFpbmVyX29mKGhkciwKKwkJCQlzdHJ1Y3Qgc25kX3NvY190cGxnX2J5dGVzX2NvbnRyb2wsIGhkcik7CisJCWlmIChrY3RsLT5hY2Nlc3MgJiBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NBTExCQUNLKSB7CisJCQlzYiA9IChzdHJ1Y3Qgc29jX2J5dGVzX2V4dCAqKWtjdGwtPnByaXZhdGVfdmFsdWU7CisJCQlpZiAodHBsZ19iYy0+cHJpdi5zaXplKQorCQkJCXJldHVybiBza2xfaW5pdF9hbGdvX2RhdGEoCisJCQkJCQlidXMtPmRldiwgc2IsIHRwbGdfYmMpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oYnVzLT5kZXYsICJDb250cm9sIGxvYWQgbm90IHN1cHBvcnRlZCAlZDolZDolZFxuIiwKKwkJCWhkci0+b3BzLmdldCwgaGRyLT5vcHMucHV0LCBoZHItPm9wcy5pbmZvKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY190cGxnX29wcyBza2xfdHBsZ19vcHMgID0gewogCS53aWRnZXRfbG9hZCA9IHNrbF90cGxnX3dpZGdldF9sb2FkLAorCS5jb250cm9sX2xvYWQgPSBza2xfdHBsZ19jb250cm9sX2xvYWQsCisJLmJ5dGVzX2V4dF9vcHMgPSBza2xfdGx2X29wcywKKwkuYnl0ZXNfZXh0X29wc19jb3VudCA9IEFSUkFZX1NJWkUoc2tsX3Rsdl9vcHMpLAogfTsKIAogLyogVGhpcyB3aWxsIGJlIHJlYWQgZnJvbSB0b3BvbG9neSBtYW5pZmVzdCwgY3VycmVudGx5IGRlZmluZWQgaGVyZSAqLwpAQCAtMTI0OCw1ICsxNTE2LDcgQEAKIAlza2wtPnJlc291cmNlLm1heF9tY3BzID0gU0tMX01BWF9NQ1BTOwogCXNrbC0+cmVzb3VyY2UubWF4X21lbSA9IFNLTF9GV19NQVhfTUVNOwogCisJc2tsLT50cGxnID0gZnc7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC10b3BvbG9neS5oIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXRvcG9sb2d5LmgKaW5kZXggNzYwNTNhOC4uOWFhMmEyYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXRvcG9sb2d5LmgKKysrIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXRvcG9sb2d5LmgKQEAgLTM2LDYgKzM2LDkgQEAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGNvZWZmaWNpZW50cyB1cCBkb3duIG1peGVyIG1vZHVsZSAqLwogI2RlZmluZSBVUF9ET1dOX01JWEVSX01BWF9DT0VGRgkJNgogCisjZGVmaW5lIE1PRFVMRV9NQVhfSU5fUElOUwk4CisjZGVmaW5lIE1PRFVMRV9NQVhfT1VUX1BJTlMJOAorCiBlbnVtIHNrbF9jaGFubmVsX2luZGV4IHsKIAlTS0xfQ0hBTk5FTF9MRUZUID0gMCwKIAlTS0xfQ0hBTk5FTF9SSUdIVCA9IDEsCkBAIC01NSwxMiArNTgsNiBAQAogCVNLTF9ERVBUSF9JTlZBTElECiB9OwogCi1lbnVtIHNrbF9pbnRlcmxlYXZpbmcgewotCS8qIFtzMV9jaDEuLi5zMV9jaE4sLi4uLHNNX2NoMS4uLnNNX2NoTl0gKi8KLQlTS0xfSU5URVJMRUFWSU5HX1BFUl9DSEFOTkVMID0gMCwKLQkvKiBbczFfY2gxLi4uc01fY2gxLC4uLixzMV9jaE4uLi5zTV9jaE5dICovCi0JU0tMX0lOVEVSTEVBVklOR19QRVJfU0FNUExFID0gMSwKLX07CiAKIGVudW0gc2tsX3NfZnJlcSB7CiAJU0tMX0ZTXzgwMDAgPSA4MDAwLApAQCAtMTQzLDYgKzE0MCwxNiBAQAogCXMzMiBjb2VmZltVUF9ET1dOX01JWEVSX01BWF9DT0VGRl07CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgc2tsX2FsZ29fY2ZnIHsKKwlzdHJ1Y3Qgc2tsX2Jhc2VfY2ZnICBiYXNlX2NmZzsKKwljaGFyIHBhcmFtc1swXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBza2xfYmFzZV9vdXRmbXRfY2ZnIHsKKwlzdHJ1Y3Qgc2tsX2Jhc2VfY2ZnIGJhc2VfY2ZnOworCXN0cnVjdCBza2xfYXVkaW9fZGF0YV9mb3JtYXQgb3V0X2ZtdDsKK30gX19wYWNrZWQ7CisKIGVudW0gc2tsX2RtYV90eXBlIHsKIAlTS0xfRE1BX0hEQV9IT1NUX09VVFBVVF9DTEFTUyA9IDAsCiAJU0tMX0RNQV9IREFfSE9TVF9JTlBVVF9DTEFTUyA9IDEsCkBAIC0xNzgsMjEgKzE4NSwzNCBAQAogCXUzMiBiaXRfZGVwdGg7CiAJdTMyIHZhbGlkX2JpdF9kZXB0aDsKIAl1MzIgY2hfY2ZnOworCXUzMiBpbnRlcmxlYXZpbmdfc3R5bGU7CisJdTMyIHNhbXBsZV90eXBlOworCXUzMiBjaF9tYXA7CiB9OwogCitzdHJ1Y3Qgc2tsX21vZHVsZV9jZmc7CisKIHN0cnVjdCBza2xfbW9kdWxlX2luc3RfaWQgewogCXUzMiBtb2R1bGVfaWQ7CiAJdTMyIGluc3RhbmNlX2lkOwogfTsKIAorZW51bSBza2xfbW9kdWxlX3Bpbl9zdGF0ZSB7CisJU0tMX1BJTl9VTkJJTkQgPSAwLAorCVNLTF9QSU5fQklORF9ET05FID0gMSwKK307CisKIHN0cnVjdCBza2xfbW9kdWxlX3BpbiB7CiAJc3RydWN0IHNrbF9tb2R1bGVfaW5zdF9pZCBpZDsKLQl1OCBwaW5faW5kZXg7CiAJYm9vbCBpc19keW5hbWljOwogCWJvb2wgaW5fdXNlOworCWVudW0gc2tsX21vZHVsZV9waW5fc3RhdGUgcGluX3N0YXRlOworCXN0cnVjdCBza2xfbW9kdWxlX2NmZyAqdGd0X21jZmc7CiB9OwogCiBzdHJ1Y3Qgc2tsX3NwZWNpZmljX2NmZyB7CisJdTMyIHNldF9wYXJhbXM7CisJdTMyIHBhcmFtX2lkOwogCXUzMiBjYXBzX3NpemU7CiAJdTMyICpjYXBzOwogfTsKQEAgLTIzOCw5ICsyNTgsMTMgQEAKIH07CiAKIHN0cnVjdCBza2xfbW9kdWxlX2NmZyB7CisJY2hhciBndWlkW1NLTF9VVUlEX1NUUl9TWl07CiAJc3RydWN0IHNrbF9tb2R1bGVfaW5zdF9pZCBpZDsKLQlzdHJ1Y3Qgc2tsX21vZHVsZV9mbXQgaW5fZm10OwotCXN0cnVjdCBza2xfbW9kdWxlX2ZtdCBvdXRfZm10OworCXU4IGRvbWFpbjsKKwlib29sIGhvbW9nZW5vdXNfaW5wdXRzOworCWJvb2wgaG9tb2dlbm91c19vdXRwdXRzOworCXN0cnVjdCBza2xfbW9kdWxlX2ZtdCBpbl9mbXRbTU9EVUxFX01BWF9JTl9QSU5TXTsKKwlzdHJ1Y3Qgc2tsX21vZHVsZV9mbXQgb3V0X2ZtdFtNT0RVTEVfTUFYX09VVF9QSU5TXTsKIAl1OCBtYXhfaW5fcXVldWU7CiAJdTggbWF4X291dF9xdWV1ZTsKIAl1OCBpbl9xdWV1ZV9tYXNrOwpAQCAtMjU4LDYgKzI4Miw3IEBACiAJdTMyIHBhcmFtc19maXh1cDsKIAl1MzIgY29udmVydGVyOwogCXUzMiB2YnVzX2lkOworCXUzMiBtZW1fcGFnZXM7CiAJc3RydWN0IHNrbF9tb2R1bGVfcGluICptX2luX3BpbjsKIAlzdHJ1Y3Qgc2tsX21vZHVsZV9waW4gKm1fb3V0X3BpbjsKIAllbnVtIHNrbF9tb2R1bGVfdHlwZSBtX3R5cGU7CkBAIC0yNjcsMTMgKzI5MiwxNSBAQAogCXN0cnVjdCBza2xfc3BlY2lmaWNfY2ZnIGZvcm1hdHNfY29uZmlnOwogfTsKIAotc3RydWN0IHNrbF9waXBlbGluZSB7Ci0Jc3RydWN0IHNrbF9waXBlICpwaXBlOwotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK3N0cnVjdCBza2xfYWxnb19kYXRhIHsKKwl1MzIgcGFyYW1faWQ7CisJdTMyIHNldF9wYXJhbXM7CisJdTMyIG1heDsKKwljaGFyICpwYXJhbXM7CiB9OwogCi1zdHJ1Y3Qgc2tsX2RhcG1fcGF0aF9saXN0IHsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKmRhcG1fcGF0aDsKK3N0cnVjdCBza2xfcGlwZWxpbmUgeworCXN0cnVjdCBza2xfcGlwZSAqcGlwZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiB9OwogCkBAIC0zMDUsOCArMzMyLDcgQEAKIAogaW50IHNrbF9zdG9wX3BpcGUoc3RydWN0IHNrbF9zc3QgKmN0eCwgc3RydWN0IHNrbF9waXBlICpwaXBlKTsKIAotaW50IHNrbF9pbml0X21vZHVsZShzdHJ1Y3Qgc2tsX3NzdCAqY3R4LCBzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1vZHVsZV9jb25maWcsCi0JY2hhciAqcGFyYW0pOworaW50IHNrbF9pbml0X21vZHVsZShzdHJ1Y3Qgc2tsX3NzdCAqY3R4LCBzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1vZHVsZV9jb25maWcpOwogCiBpbnQgc2tsX2JpbmRfbW9kdWxlcyhzdHJ1Y3Qgc2tsX3NzdCAqY3R4LCBzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcKIAkqc3JjX21vZHVsZSwgc3RydWN0IHNrbF9tb2R1bGVfY2ZnICpkc3RfbW9kdWxlKTsKQEAgLTMxNCw1ICszNDAsMTAgQEAKIGludCBza2xfdW5iaW5kX21vZHVsZXMoc3RydWN0IHNrbF9zc3QgKmN0eCwgc3RydWN0IHNrbF9tb2R1bGVfY2ZnCiAJKnNyY19tb2R1bGUsIHN0cnVjdCBza2xfbW9kdWxlX2NmZyAqZHN0X21vZHVsZSk7CiAKK2ludCBza2xfc2V0X21vZHVsZV9wYXJhbXMoc3RydWN0IHNrbF9zc3QgKmN0eCwgdTMyICpwYXJhbXMsIGludCBzaXplLAorCQkJdTMyIHBhcmFtX2lkLCBzdHJ1Y3Qgc2tsX21vZHVsZV9jZmcgKm1jZmcpOworaW50IHNrbF9nZXRfbW9kdWxlX3BhcmFtcyhzdHJ1Y3Qgc2tsX3NzdCAqY3R4LCB1MzIgKnBhcmFtcywgaW50IHNpemUsCisJCQkgIHUzMiBwYXJhbV9pZCwgc3RydWN0IHNrbF9tb2R1bGVfY2ZnICptY2ZnKTsKKwogZW51bSBza2xfYml0ZGVwdGggc2tsX2dldF9iaXRfZGVwdGgoaW50IHBhcmFtcyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC10cGxnLWludGVyZmFjZS5oIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXRwbGctaW50ZXJmYWNlLmgKaW5kZXggMmJjMzk2ZC4uYzlhZTAxMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXRwbGctaW50ZXJmYWNlLmgKKysrIGIvc291bmQvc29jL2ludGVsL3NreWxha2Uvc2tsLXRwbGctaW50ZXJmYWNlLmgKQEAgLTIzLDE1ICsyMywxMyBAQAogICogRGVmYXVsdCB0eXBlcyByYW5nZSBmcm9tIDB+MTIuIHR5cGUgY2FuIHJhbmdlIGZyb20gMCB0byAweGZmCiAgKiBTU1QgdHlwZXMgc3RhcnQgYXQgaGlnaGVyIHRvIGF2b2lkIGFueSBvdmVybGFwcGluZyBpbiBmdXR1cmUKICAqLwotI2RlZmluZSBTT0NfQ09OVFJPTF9UWVBFX0hEQV9TU1RfQUxHT19QQVJBTVMJMHgxMDAKLSNkZWZpbmUgU09DX0NPTlRST0xfVFlQRV9IREFfU1NUX01VWAkJMHgxMDEKLSNkZWZpbmUgU09DX0NPTlRST0xfVFlQRV9IREFfU1NUX01JWAkJMHgxMDEKLSNkZWZpbmUgU09DX0NPTlRST0xfVFlQRV9IREFfU1NUX0JZVEUJCTB4MTAzCisjZGVmaW5lIFNLTF9DT05UUk9MX1RZUEVfQllURV9UTFYJMHgxMDAKIAogI2RlZmluZSBIREFfU1NUX0NGR19NQVgJOTAwIC8qIHNpemUgb2YgY29waWVyIGNmZyovCiAjZGVmaW5lIE1BWF9JTl9RVUVVRSA4CiAjZGVmaW5lIE1BWF9PVVRfUVVFVUUgOAogCisjZGVmaW5lIFNLTF9VVUlEX1NUUl9TWiA0MAogLyogRXZlbnQgdHlwZXMgZ29lcyBoZXJlICovCiAvKiBSZXNlcnZlIGV2ZW50IHR5cGUgMCBmb3Igbm8gZXZlbnQgaGFuZGxlcnMgKi8KIGVudW0gc2tsX2V2ZW50X3R5cGVzIHsKQEAgLTcyLDYgKzcwLDcgQEAKIAlTS0xfQ0hfQ0ZHX0RVQUxfTU9OTyA9IDksCiAJU0tMX0NIX0NGR19JMlNfRFVBTF9TVEVSRU9fMCA9IDEwLAogCVNLTF9DSF9DRkdfSTJTX0RVQUxfU1RFUkVPXzEgPSAxMSwKKwlTS0xfQ0hfQ0ZHXzRfQ0hBTk5FTCA9IDEyLAogCVNLTF9DSF9DRkdfSU5WQUxJRAogfTsKIApAQCAtNzksNyArNzgsOSBAQAogCVNLTF9NT0RVTEVfVFlQRV9NSVhFUiA9IDAsCiAJU0tMX01PRFVMRV9UWVBFX0NPUElFUiwKIAlTS0xfTU9EVUxFX1RZUEVfVVBEV01JWCwKLQlTS0xfTU9EVUxFX1RZUEVfU1JDSU5UCisJU0tMX01PRFVMRV9UWVBFX1NSQ0lOVCwKKwlTS0xfTU9EVUxFX1RZUEVfQUxHTywKKwlTS0xfTU9EVUxFX1RZUEVfQkFTRV9PVVRGTVQKIH07CiAKIGVudW0gc2tsX2NvcmVfYWZmaW5pdHkgewpAQCAtMTEwLDYgKzExMSw0MiBAQAogCVNLTF9ERVZJQ0VfTk9ORQogfTsKIAorLyoqCisgKiBlbnVtIHNrbF9pbnRlcmxlYXZpbmcgLSBpbnRlcmxlYXZpbmcgc3R5bGUKKyAqCisgKiBAU0tMX0lOVEVSTEVBVklOR19QRVJfQ0hBTk5FTDogW3MxX2NoMS4uLnMxX2NoTiwuLi4sc01fY2gxLi4uc01fY2hOXQorICogQFNLTF9JTlRFUkxFQVZJTkdfUEVSX1NBTVBMRTogW3MxX2NoMS4uLnNNX2NoMSwuLi4sczFfY2hOLi4uc01fY2hOXQorICovCitlbnVtIHNrbF9pbnRlcmxlYXZpbmcgeworCVNLTF9JTlRFUkxFQVZJTkdfUEVSX0NIQU5ORUwgPSAwLAorCVNLTF9JTlRFUkxFQVZJTkdfUEVSX1NBTVBMRSA9IDEsCit9OworCitlbnVtIHNrbF9zYW1wbGVfdHlwZSB7CisJU0tMX1NBTVBMRV9UWVBFX0lOVF9NU0IgPSAwLAorCVNLTF9TQU1QTEVfVFlQRV9JTlRfTFNCID0gMSwKKwlTS0xfU0FNUExFX1RZUEVfSU5UX1NJR05FRCA9IDIsCisJU0tMX1NBTVBMRV9UWVBFX0lOVF9VTlNJR05FRCA9IDMsCisJU0tMX1NBTVBMRV9UWVBFX0ZMT0FUID0gNAorfTsKKworZW51bSBtb2R1bGVfcGluX3R5cGUgeworCS8qIEFsbCBwaW5zIG9mIHRoZSBtb2R1bGUgdGFrZXMgc2FtZSBQQ00gaW5wdXRzIG9yIG91dHB1dHMKKwkqIGUuZy4gbWl4b3V0CisJKi8KKwlTS0xfUElOX1RZUEVfSE9NT0dFTkVPVVMsCisJLyogQWxsIHBpbnMgb2YgdGhlIG1vZHVsZSB0YWtlcyBkaWZmZXJlbnQgUENNIGlucHV0cyBvciBvdXRwdXRzCisJKiBlLmcgbXV4CisJKi8KKwlTS0xfUElOX1RZUEVfSEVURVJPR0VORU9VUywKK307CisKK2VudW0gc2tsX21vZHVsZV9wYXJhbV90eXBlIHsKKwlTS0xfUEFSQU1fREVGQVVMVCA9IDAsCisJU0tMX1BBUkFNX0lOSVQsCisJU0tMX1BBUkFNX1NFVAorfTsKKwogc3RydWN0IHNrbF9kZndfbW9kdWxlX3BpbiB7CiAJdTE2IG1vZHVsZV9pZDsKIAl1MTYgaW5zdGFuY2VfaWQ7CkBAIC0xMjEsOSArMTU4LDE1IEBACiAJdTMyIGJpdF9kZXB0aDsKIAl1MzIgdmFsaWRfYml0X2RlcHRoOwogCXUzMiBjaF9jZmc7CisJdTMyIGludGVybGVhdmluZ19zdHlsZTsKKwl1MzIgc2FtcGxlX3R5cGU7CisJdTMyIGNoX21hcDsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBza2xfZGZ3X21vZHVsZV9jYXBzIHsKKwl1MzIgc2V0X3BhcmFtczoyOworCXUzMiByc3ZkOjMwOworCXUzMiBwYXJhbV9pZDsKIAl1MzIgY2Fwc19zaXplOwogCXUzMiBjYXBzW0hEQV9TU1RfQ0ZHX01BWF07CiB9OwpAQCAtMTMxLDQxICsxNzQsNTcgQEAKIHN0cnVjdCBza2xfZGZ3X3BpcGUgewogCXU4IHBpcGVfaWQ7CiAJdTggcGlwZV9wcmlvcml0eTsKLQl1MTYgY29ubl90eXBlOwotCXUzMiBtZW1vcnlfcGFnZXM7CisJdTE2IGNvbm5fdHlwZTo0OworCXUxNiByc3ZkOjQ7CisJdTE2IG1lbW9yeV9wYWdlczo4OwogfSBfX3BhY2tlZDsKIAogc3RydWN0IHNrbF9kZndfbW9kdWxlIHsKKwljaGFyIHV1aWRbU0tMX1VVSURfU1RSX1NaXTsKKwogCXUxNiBtb2R1bGVfaWQ7CiAJdTE2IGluc3RhbmNlX2lkOwogCXUzMiBtYXhfbWNwczsKLQl1OCBjb3JlX2lkOwotCXU4IG1heF9pbl9xdWV1ZTsKLQl1OCBtYXhfb3V0X3F1ZXVlOwotCXU4IGlzX2xvYWRhYmxlOwotCXU4IGNvbm5fdHlwZTsKLQl1OCBkZXZfdHlwZTsKLQl1OCBod19jb25uX3R5cGU7Ci0JdTggdGltZV9zbG90OworCXUzMiBtZW1fcGFnZXM7CiAJdTMyIG9iczsKIAl1MzIgaWJzOwotCXUzMiBwYXJhbXNfZml4dXA7Ci0JdTMyIGNvbnZlcnRlcjsKLQl1MzIgbW9kdWxlX3R5cGU7CiAJdTMyIHZidXNfaWQ7Ci0JdTggaXNfZHluYW1pY19pbl9waW47Ci0JdTggaXNfZHluYW1pY19vdXRfcGluOworCisJdTMyIG1heF9pbl9xdWV1ZTo4OworCXUzMiBtYXhfb3V0X3F1ZXVlOjg7CisJdTMyIHRpbWVfc2xvdDo4OworCXUzMiBjb3JlX2lkOjQ7CisJdTMyIHJzdmQxOjQ7CisKKwl1MzIgbW9kdWxlX3R5cGU6ODsKKwl1MzIgY29ubl90eXBlOjQ7CisJdTMyIGRldl90eXBlOjQ7CisJdTMyIGh3X2Nvbm5fdHlwZTo0OworCXUzMiByc3ZkMjoxMjsKKworCXUzMiBwYXJhbXNfZml4dXA6ODsKKwl1MzIgY29udmVydGVyOjg7CisJdTMyIGlucHV0X3Bpbl90eXBlOjE7CisJdTMyIG91dHB1dF9waW5fdHlwZToxOworCXUzMiBpc19keW5hbWljX2luX3BpbjoxOworCXUzMiBpc19keW5hbWljX291dF9waW46MTsKKwl1MzIgaXNfbG9hZGFibGU6MTsKKwl1MzIgcnN2ZDM6MTE7CisKIAlzdHJ1Y3Qgc2tsX2Rmd19waXBlIHBpcGU7Ci0Jc3RydWN0IHNrbF9kZndfbW9kdWxlX2ZtdCBpbl9mbXQ7Ci0Jc3RydWN0IHNrbF9kZndfbW9kdWxlX2ZtdCBvdXRfZm10OworCXN0cnVjdCBza2xfZGZ3X21vZHVsZV9mbXQgaW5fZm10W01BWF9JTl9RVUVVRV07CisJc3RydWN0IHNrbF9kZndfbW9kdWxlX2ZtdCBvdXRfZm10W01BWF9PVVRfUVVFVUVdOwogCXN0cnVjdCBza2xfZGZ3X21vZHVsZV9waW4gaW5fcGluW01BWF9JTl9RVUVVRV07CiAJc3RydWN0IHNrbF9kZndfbW9kdWxlX3BpbiBvdXRfcGluW01BWF9PVVRfUVVFVUVdOwogCXN0cnVjdCBza2xfZGZ3X21vZHVsZV9jYXBzIGNhcHM7CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3Qgc2tsX2Rmd19hbGdvX2RhdGEgeworCXUzMiBzZXRfcGFyYW1zOjI7CisJdTMyIHJzdmQ6MzA7CisJdTMyIHBhcmFtX2lkOwogCXUzMiBtYXg7Ci0JY2hhciAqcGFyYW1zOworCWNoYXIgcGFyYW1zWzBdOwogfSBfX3BhY2tlZDsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wuYyBiL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC5jCmluZGV4IDUzMTk1MjkuLjQ0M2ExNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC5jCkBAIC0yNSw4ICsyNSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgIi4uL2NvbW1vbi9zc3QtYWNwaS5oIgogI2luY2x1ZGUgInNrbC5oIgorI2luY2x1ZGUgInNrbC1zc3QtZHNwLmgiCisjaW5jbHVkZSAic2tsLXNzdC1pcGMuaCIKIAogLyoKICAqIGluaXRpYWxpemUgdGhlIFBDSSByZWdpc3RlcnMKQEAgLTU3LDYgKzYxLDQ5IEBACiAJc2tsX3VwZGF0ZV9wY2lfYnl0ZShza2wtPnBjaSwgQVpYX1BDSVJFR19UQ1NFTCwgMHgwNywgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIHVwZGF0ZV9wY2lfZHdvcmQoc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCXVuc2lnbmVkIGludCByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQoreworCXUzMiBkYXRhID0gMDsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2ksIHJlZywgJmRhdGEpOworCWRhdGEgJj0gfm1hc2s7CisJZGF0YSB8PSAodmFsICYgbWFzayk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2ksIHJlZywgZGF0YSk7Cit9CisKKy8qCisgKiBza2xfZW5hYmxlX21pc2NiZGNnZSAtIGVuYWJsZS9kc2lhYmxlIENHQ1RMLk1JU0NCRENHRSBiaXRzCisgKgorICogQGRldjogZGV2aWNlIHBvaW50ZXIKKyAqIEBlbmFibGU6IGVuYWJsZS9kaXNhYmxlIGZsYWcKKyAqLworc3RhdGljIHZvaWQgc2tsX2VuYWJsZV9taXNjYmRjZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOworCXUzMiB2YWw7CisKKwl2YWwgPSBlbmFibGUgPyBBWlhfQ0dDVExfTUlTQ0JEQ0dFX01BU0sgOiAwOworCisJdXBkYXRlX3BjaV9kd29yZChwY2ksIEFaWF9QQ0lSRUdfQ0dDVEwsIEFaWF9DR0NUTF9NSVNDQkRDR0VfTUFTSywgdmFsKTsKK30KKworLyoKKyAqIFdoaWxlIHBlcmZvcm1pbmcgcmVzZXQsIGNvbnRyb2xsZXIgbWF5IG5vdCBjb21lIGJhY2sgcHJvcGVybHkgY2F1c2luZworICogaXNzdWVzLCBzbyByZWNvbW1lbmRhdGlvbiBpcyB0byBzZXQgQ0dDVEwuTUlTQ0JEQ0dFIHRvIDAgdGhlbiBkbyByZXNldAorICogKGluaXQgY2hpcCkgYW5kIHRoZW4gYWdhaW4gc2V0IENHQ1RMLk1JU0NCRENHRSB0byAxCisgKi8KK3N0YXRpYyBpbnQgc2tsX2luaXRfY2hpcChzdHJ1Y3QgaGRhY19idXMgKmJ1cywgYm9vbCBmdWxsX3Jlc2V0KQoreworCWludCByZXQ7CisKKwlza2xfZW5hYmxlX21pc2NiZGNnZShidXMtPmRldiwgZmFsc2UpOworCXJldCA9IHNuZF9oZGFjX2J1c19pbml0X2NoaXAoYnVzLCBmdWxsX3Jlc2V0KTsKKwlza2xfZW5hYmxlX21pc2NiZGNnZShidXMtPmRldiwgdHJ1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKiBjYWxsZWQgZnJvbSBJUlEgKi8KIHN0YXRpYyB2b2lkIHNrbF9zdHJlYW1fdXBkYXRlKHN0cnVjdCBoZGFjX2J1cyAqYnVzLCBzdHJ1Y3QgaGRhY19zdHJlYW0gKmhzdHIpCiB7CkBAIC0xMjksNiArMTc2LDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgX3NrbF9zdXNwZW5kKHN0cnVjdCBoZGFjX2V4dF9idXMgKmVidXMpCit7CisJc3RydWN0IHNrbCAqc2tsID0gZWJ1c190b19za2woZWJ1cyk7CisJc3RydWN0IGhkYWNfYnVzICpidXMgPSBlYnVzX3RvX2hidXMoZWJ1cyk7CisJaW50IHJldDsKKworCXNuZF9oZGFjX2V4dF9idXNfbGlua19wb3dlcl9kb3duX2FsbChlYnVzKTsKKworCXJldCA9IHNrbF9zdXNwZW5kX2RzcChza2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc25kX2hkYWNfYnVzX3N0b3BfY2hpcChidXMpOworCXNrbF9lbmFibGVfbWlzY2JkY2dlKGJ1cy0+ZGV2LCBmYWxzZSk7CisJc25kX2hkYWNfYnVzX2VudGVyX2xpbmtfcmVzZXQoYnVzKTsKKwlza2xfZW5hYmxlX21pc2NiZGNnZShidXMtPmRldiwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfc2tsX3Jlc3VtZShzdHJ1Y3QgaGRhY19leHRfYnVzICplYnVzKQoreworCXN0cnVjdCBza2wgKnNrbCA9IGVidXNfdG9fc2tsKGVidXMpOworCXN0cnVjdCBoZGFjX2J1cyAqYnVzID0gZWJ1c190b19oYnVzKGVidXMpOworCisJc2tsX2luaXRfcGNpKHNrbCk7CisJc2tsX2luaXRfY2hpcChidXMsIHRydWUpOworCisJcmV0dXJuIHNrbF9yZXN1bWVfZHNwKHNrbCk7Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogLyoKICAqIHBvd2VyIG1hbmFnZW1lbnQKQEAgLTEzNywyNiArMjE3LDQ2IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3QgaGRhY19leHRfYnVzICplYnVzID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisJc3RydWN0IHNrbCAqc2tsICA9IGVidXNfdG9fc2tsKGVidXMpOwogCXN0cnVjdCBoZGFjX2J1cyAqYnVzID0gZWJ1c190b19oYnVzKGVidXMpOwogCi0Jc25kX2hkYWNfYnVzX3N0b3BfY2hpcChidXMpOwotCXNuZF9oZGFjX2J1c19lbnRlcl9saW5rX3Jlc2V0KGJ1cyk7Ci0KLQlyZXR1cm4gMDsKKwkvKgorCSAqIERvIG5vdCBzdXNwZW5kIGlmIHN0cmVhbXMgd2hpY2ggYXJlIG1hcmtlZCBpZ25vcmUgc3VzcGVuZCBhcmUKKwkgKiBydW5uaW5nLCB3ZSBuZWVkIHRvIHNhdmUgdGhlIHN0YXRlIGZvciB0aGVzZSBhbmQgY29udGludWUKKwkgKi8KKwlpZiAoc2tsLT5zdXBlbmRfYWN0aXZlKSB7CisJCXNuZF9oZGFjX2V4dF9idXNfbGlua19wb3dlcl9kb3duX2FsbChlYnVzKTsKKwkJZW5hYmxlX2lycV93YWtlKGJ1cy0+aXJxKTsKKwkJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiBfc2tsX3N1c3BlbmQoZWJ1cyk7CisJfQogfQogCiBzdGF0aWMgaW50IHNrbF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IGhkYWNfZXh0X2J1cyAqZWJ1cyA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCXN0cnVjdCBza2wgKnNrbCAgPSBlYnVzX3RvX3NrbChlYnVzKTsKIAlzdHJ1Y3QgaGRhY19idXMgKmJ1cyA9IGVidXNfdG9faGJ1cyhlYnVzKTsKLQlzdHJ1Y3Qgc2tsICpoZGEgPSBlYnVzX3RvX3NrbChlYnVzKTsKKwlpbnQgcmV0OwogCi0Jc2tsX2luaXRfcGNpKGhkYSk7CisJLyoKKwkgKiByZXN1bWUgb25seSB3aGVuIHdlIGFyZSBub3QgaW4gc3VzcGVuZCBhY3RpdmUsIG90aGVyd2lzZSBuZWVkIHRvCisJICogcmVzdG9yZSB0aGUgZGV2aWNlCisJICovCisJaWYgKHNrbC0+c3VwZW5kX2FjdGl2ZSkgeworCQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCQlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpOworCQlzbmRfaGRhY19leHRfYnVzX2xpbmtfcG93ZXJfdXBfYWxsKGVidXMpOworCQlkaXNhYmxlX2lycV93YWtlKGJ1cy0+aXJxKTsKKwl9IGVsc2UgeworCQlyZXQgPSBfc2tsX3Jlc3VtZShlYnVzKTsKKwl9CiAKLQlzbmRfaGRhY19idXNfaW5pdF9jaGlwKGJ1cywgMSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCkBAIC0xNjYsMjQgKzI2NiwxMCBAQAogCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IGhkYWNfZXh0X2J1cyAqZWJ1cyA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOwogCXN0cnVjdCBoZGFjX2J1cyAqYnVzID0gZWJ1c190b19oYnVzKGVidXMpOwotCXN0cnVjdCBza2wgKnNrbCA9IGVidXNfdG9fc2tsKGVidXMpOwotCWludCByZXQ7CiAKIAlkZXZfZGJnKGJ1cy0+ZGV2LCAiaW4gJXNcbiIsIF9fZnVuY19fKTsKIAotCS8qIGVuYWJsZSBjb250cm9sbGVyIHdha2UgdXAgZXZlbnQgKi8KLQlzbmRfaGRhY19jaGlwX3VwZGF0ZXcoYnVzLCBXQUtFRU4sIDAsIFNUQVRFU1RTX0lOVF9NQVNLKTsKLQotCXNuZF9oZGFjX2V4dF9idXNfbGlua19wb3dlcl9kb3duX2FsbChlYnVzKTsKLQotCXJldCA9IHNrbF9zdXNwZW5kX2RzcChza2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc25kX2hkYWNfYnVzX3N0b3BfY2hpcChidXMpOwotCXNuZF9oZGFjX2J1c19lbnRlcl9saW5rX3Jlc2V0KGJ1cyk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gX3NrbF9zdXNwZW5kKGVidXMpOwogfQogCiBzdGF0aWMgaW50IHNrbF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0xOTEsMjAgKzI3NywxMCBAQAogCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IGhkYWNfZXh0X2J1cyAqZWJ1cyA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOwogCXN0cnVjdCBoZGFjX2J1cyAqYnVzID0gZWJ1c190b19oYnVzKGVidXMpOwotCXN0cnVjdCBza2wgKnNrbCA9IGVidXNfdG9fc2tsKGVidXMpOwotCWludCBzdGF0dXM7CiAKIAlkZXZfZGJnKGJ1cy0+ZGV2LCAiaW4gJXNcbiIsIF9fZnVuY19fKTsKIAotCS8qIFJlYWQgU1RBVEVTVFMgYmVmb3JlIGNvbnRyb2xsZXIgcmVzZXQgKi8KLQlzdGF0dXMgPSBzbmRfaGRhY19jaGlwX3JlYWR3KGJ1cywgU1RBVEVTVFMpOwotCi0Jc2tsX2luaXRfcGNpKHNrbCk7Ci0Jc25kX2hkYWNfYnVzX2luaXRfY2hpcChidXMsIHRydWUpOwotCS8qIGRpc2FibGUgY29udHJvbGxlciBXYWtlIFVwIGV2ZW50ICovCi0Jc25kX2hkYWNfY2hpcF91cGRhdGV3KGJ1cywgV0FLRUVOLCBTVEFURVNUU19JTlRfTUFTSywgMCk7Ci0KLQlyZXR1cm4gc2tsX3Jlc3VtZV9kc3Aoc2tsKTsKKwlyZXR1cm4gX3NrbF9yZXN1bWUoZWJ1cyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKQEAgLTI0MSw2ICszMTcsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBza2xfbWFjaGluZV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHNrbCAqc2tsLCB2b2lkICpkcml2ZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgaGRhY19idXMgKmJ1cyA9IGVidXNfdG9faGJ1cygmc2tsLT5lYnVzKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBzc3RfYWNwaV9tYWNoICptYWNoID0gZHJpdmVyX2RhdGE7CisJaW50IHJldDsKKworCW1hY2ggPSBzc3RfYWNwaV9maW5kX21hY2hpbmUobWFjaCk7CisJaWYgKG1hY2ggPT0gTlVMTCkgeworCQlkZXZfZXJyKGJ1cy0+ZGV2LCAiTm8gbWF0Y2hpbmcgbWFjaGluZSBkcml2ZXIgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJc2tsLT5md19uYW1lID0gbWFjaC0+ZndfZmlsZW5hbWU7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG1hY2gtPmRydl9uYW1lLCAtMSk7CisJaWYgKHBkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKGJ1cy0+ZGV2LCAicGxhdGZvcm0gZGV2aWNlIGFsbG9jIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGJ1cy0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBtYWNoaW5lIGRldmljZVxuIik7CisJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCXJldHVybiAtRUlPOworCX0KKwlza2wtPmkyc19kZXYgPSBwZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNrbF9tYWNoaW5lX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBza2wgKnNrbCkKK3sKKwlpZiAoc2tsLT5pMnNfZGV2KQorCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihza2wtPmkyc19kZXYpOworfQorCiBzdGF0aWMgaW50IHNrbF9kbWljX2RldmljZV9yZWdpc3RlcihzdHJ1Y3Qgc2tsICpza2wpCiB7CiAJc3RydWN0IGhkYWNfYnVzICpidXMgPSBlYnVzX3RvX2hidXMoJnNrbC0+ZWJ1cyk7CkBAIC0zMjAsNyArNDMzLDcgQEAKIAkJCQkgKiBiYWNrIHRvIHRoZSBzYW5pdHkgc3RhdGUuCiAJCQkJICovCiAJCQkJc25kX2hkYWNfYnVzX3N0b3BfY2hpcChidXMpOwotCQkJCXNuZF9oZGFjX2J1c19pbml0X2NoaXAoYnVzLCB0cnVlKTsKKwkJCQlza2xfaW5pdF9jaGlwKGJ1cywgdHJ1ZSk7CiAJCQl9CiAJCX0KIAl9CkBAIC00MzAsMTIgKzU0MywxMSBAQAogCS8qIGluaXRpYWxpemUgY2hpcCAqLwogCXNrbF9pbml0X3BjaShza2wpOwogCi0Jc25kX2hkYWNfYnVzX2luaXRfY2hpcChidXMsIHRydWUpOworCXNrbF9pbml0X2NoaXAoYnVzLCB0cnVlKTsKIAogCS8qIGNvZGVjIGRldGVjdGlvbiAqLwogCWlmICghYnVzLT5jb2RlY19tYXNrKSB7Ci0JCWRldl9lcnIoYnVzLT5kZXYsICJubyBjb2RlY3MgZm91bmQhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWRldl9pbmZvKGJ1cy0+ZGV2LCAibm8gaGRhIGNvZGVjcyBmb3VuZCFcbiIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDcwLDExICs1ODIsMTggQEAKIAogCS8qIGNoZWNrIGlmIGRzcCBpcyB0aGVyZSAqLwogCWlmIChlYnVzLT5wcGNhcCkgeworCQllcnIgPSBza2xfbWFjaGluZV9kZXZpY2VfcmVnaXN0ZXIoc2tsLAorCQkJCSAgKHZvaWQgKilwY2lfaWQtPmRyaXZlcl9kYXRhKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dF9mcmVlOworCiAJCWVyciA9IHNrbF9pbml0X2RzcChza2wpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJZGV2X2RiZyhidXMtPmRldiwgImVycm9yIGZhaWxlZCB0byByZWdpc3RlciBkc3BcbiIpOwotCQkJZ290byBvdXRfZnJlZTsKKwkJCWdvdG8gb3V0X21hY2hfZnJlZTsKIAkJfQorCQlza2wtPnNrbF9zc3QtPmVuYWJsZV9taXNjYmRjZ2UgPSBza2xfZW5hYmxlX21pc2NiZGNnZTsKKwogCX0KIAlpZiAoZWJ1cy0+bWxjYXApCiAJCXNuZF9oZGFjX2V4dF9idXNfZ2V0X21sX2NhcGFiaWxpdGllcyhlYnVzKTsKQEAgLTUwOCw2ICs2MjcsOCBAQAogCXNrbF9kbWljX2RldmljZV91bnJlZ2lzdGVyKHNrbCk7CiBvdXRfZHNwX2ZyZWU6CiAJc2tsX2ZyZWVfZHNwKHNrbCk7CitvdXRfbWFjaF9mcmVlOgorCXNrbF9tYWNoaW5lX2RldmljZV91bnJlZ2lzdGVyKHNrbCk7CiBvdXRfZnJlZToKIAlza2wtPmluaXRfZmFpbGVkID0gMTsKIAlza2xfZnJlZShlYnVzKTsKQEAgLTUyMCwyMCArNjQxLDM0IEBACiAJc3RydWN0IGhkYWNfZXh0X2J1cyAqZWJ1cyA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOwogCXN0cnVjdCBza2wgKnNrbCA9IGVidXNfdG9fc2tsKGVidXMpOwogCisJaWYgKHNrbC0+dHBsZykKKwkJcmVsZWFzZV9maXJtd2FyZShza2wtPnRwbGcpOworCiAJaWYgKHBjaV9kZXZfcnVuX3dha2UocGNpKSkKIAkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJnBjaS0+ZGV2KTsKIAlwY2lfZGV2X3B1dChwY2kpOwogCXNrbF9wbGF0Zm9ybV91bnJlZ2lzdGVyKCZwY2ktPmRldik7CiAJc2tsX2ZyZWVfZHNwKHNrbCk7CisJc2tsX21hY2hpbmVfZGV2aWNlX3VucmVnaXN0ZXIoc2tsKTsKIAlza2xfZG1pY19kZXZpY2VfdW5yZWdpc3Rlcihza2wpOwogCXNrbF9mcmVlKGVidXMpOwogCWRldl9zZXRfZHJ2ZGF0YSgmcGNpLT5kZXYsIE5VTEwpOwogfQogCitzdGF0aWMgc3RydWN0IHNzdF9hY3BpX21hY2ggc3N0X3NrbF9kZXZkYXRhW10gPSB7CisJeyAiSU5UMzQzQSIsICJza2xfYWxjMjg2c19pMnMiLCAiaW50ZWwvZHNwX2Z3X3JlbGVhc2UuYmluIiwgTlVMTCwgTlVMTCwgTlVMTCB9LAorCXsgIklOVDM0M0IiLCAic2tsX25hdTg4bDI1X3NzbTQ1NjdfaTJzIiwgImludGVsL2RzcF9md19yZWxlYXNlLmJpbiIsCisJCQkJTlVMTCwgTlVMTCwgTlVMTCB9LAorCXsgIk1YOTgzNTdBIiwgInNrbF9uYXU4OGwyNV9tYXg5ODM1N2FfaTJzIiwgImludGVsL2RzcF9md19yZWxlYXNlLmJpbiIsCisJCQkJTlVMTCwgTlVMTCwgTlVMTCB9LAorCXt9Cit9OworCiAvKiBQQ0kgSURzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2tsX2lkc1tdID0gewogCS8qIFN1bnJpc2UgUG9pbnQtTFAgKi8KLQl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDlkNzApLCAwfSwKKwl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDlkNzApLAorCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykmc3N0X3NrbF9kZXZkYXRhfSwKIAl7IDAsIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2tsX2lkcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc2t5bGFrZS9za2wuaCBiL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC5oCmluZGV4IGRkMmU3OWEuLjhhMDhiYjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC5oCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9za3lsYWtlL3NrbC5oCkBAIC00OCw2ICs0OCw5IEBACiAjZGVmaW5lIEFaWF9SRUdfVlNfU0RYRUZJRk9TX1hCQVNFCTB4MTA5NAogI2RlZmluZSBBWlhfUkVHX1ZTX1NEWEVGSUZPU19YSU5URVJWQUwJMHgyMAogCisjZGVmaW5lIEFaWF9QQ0lSRUdfQ0dDVEwJCTB4NDgKKyNkZWZpbmUgQVpYX0NHQ1RMX01JU0NCRENHRV9NQVNLCSgxIDw8IDYpCisKIHN0cnVjdCBza2xfZHNwX3Jlc291cmNlIHsKIAl1MzIgbWF4X21jcHM7CiAJdTMyIG1heF9tZW07CkBAIC02MSw2ICs2NCw3IEBACiAKIAl1bnNpZ25lZCBpbnQgaW5pdF9mYWlsZWQ6MTsgLyogZGVsYXllZCBpbml0IGZhaWxlZCAqLwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRtaWNfZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmkyc19kZXY7CiAKIAl2b2lkICpuaGx0OyAvKiBuaGx0IHB0ciAqLwogCXN0cnVjdCBza2xfc3N0ICpza2xfc3N0OyAvKiBzc3Qgc2tsIGN0eCAqLwpAQCAtNjgsNiArNzIsMTAgQEAKIAlzdHJ1Y3Qgc2tsX2RzcF9yZXNvdXJjZSByZXNvdXJjZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBwbF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgZGFwbV9wYXRoX2xpc3Q7CisJY29uc3QgY2hhciAqZndfbmFtZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnRwbGc7CisKKwlpbnQgc3VwZW5kX2FjdGl2ZTsKIH07CiAKICNkZWZpbmUgc2tsX3RvX2VidXMocykJKCYocyktPmVidXMpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvbWVkaWF0ZWsvbXRrLWFmZS1jb21tb24uaCBiL3NvdW5kL3NvYy9tZWRpYXRlay9tdGstYWZlLWNvbW1vbi5oCmluZGV4IGNjNDM5M2MuLjliMWFmMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9tZWRpYXRlay9tdGstYWZlLWNvbW1vbi5oCisrKyBiL3NvdW5kL3NvYy9tZWRpYXRlay9tdGstYWZlLWNvbW1vbi5oCkBAIC05Miw3ICs5Miw2IEBACiBzdHJ1Y3QgbXRrX2FmZV9tZW1pZiB7CiAJdW5zaWduZWQgaW50IHBoeXNfYnVmX2FkZHI7CiAJaW50IGJ1ZmZlcl9zaXplOwotCXVuc2lnbmVkIGludCBod19wdHI7CQkvKiBQcmV2aW91cyBJUlEncyBIVyBwdHIgKi8KIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAljb25zdCBzdHJ1Y3QgbXRrX2FmZV9tZW1pZl9kYXRhICpkYXRhOwogCWNvbnN0IHN0cnVjdCBtdGtfYWZlX2lycV9kYXRhICppcnFkYXRhOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL21lZGlhdGVrL210ay1hZmUtcGNtLmMgYi9zb3VuZC9zb2MvbWVkaWF0ZWsvbXRrLWFmZS1wY20uYwppbmRleCBmNWJhZjNjLi4wOGFmOWY1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvbWVkaWF0ZWsvbXRrLWFmZS1wY20uYworKysgYi9zb3VuZC9zb2MvbWVkaWF0ZWsvbXRrLWFmZS1wY20uYwpAQCAtMTc1LDggKzE3NSwxNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbXRrX2FmZSAqYWZlID0gc25kX3NvY19wbGF0Zm9ybV9nZXRfZHJ2ZGF0YShydGQtPnBsYXRmb3JtKTsKIAlzdHJ1Y3QgbXRrX2FmZV9tZW1pZiAqbWVtaWYgPSAmYWZlLT5tZW1pZltydGQtPmNwdV9kYWktPmlkXTsKKwl1bnNpZ25lZCBpbnQgaHdfcHRyOworCWludCByZXQ7CiAKLQlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgbWVtaWYtPmh3X3B0cik7CisJcmV0ID0gcmVnbWFwX3JlYWQoYWZlLT5yZWdtYXAsIG1lbWlmLT5kYXRhLT5yZWdfb2ZzX2N1ciwgJmh3X3B0cik7CisJaWYgKHJldCB8fCBod19wdHIgPT0gMCkgeworCQlkZXZfZXJyKGFmZS0+ZGV2LCAiJXMgaHdfcHRyIGVyclxuIiwgX19mdW5jX18pOworCQlod19wdHIgPSBtZW1pZi0+cGh5c19idWZfYWRkcjsKKwl9CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCSAgICAgICBod19wdHIgLSBtZW1pZi0+cGh5c19idWZfYWRkcik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9vcHMgbXRrX2FmZV9wY21fb3BzID0gewpAQCAtMjk5LDggKzMwOCw2IEBACiAJCQlkZXZfZXJyKGFmZS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBtX2NrXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19UT1BfQ09OMCwKLQkJCQkgICBBVURfVENPTjBfUEROXzIyTSB8IEFVRF9UQ09OMF9QRE5fMjRNLCAwKTsKIAl9CiAKIAlpZiAoYl9jaykgewpAQCAtMzQwLDEyICszNDcsOCBAQAogc3RhdGljIHZvaWQgbXRrX2FmZV9kYWlzX2Rpc2FibGVfY2xrcyhzdHJ1Y3QgbXRrX2FmZSAqYWZlLAogCQkJCSAgICAgIHN0cnVjdCBjbGsgKm1fY2ssIHN0cnVjdCBjbGsgKmJfY2spCiB7Ci0JaWYgKG1fY2spIHsKLQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19UT1BfQ09OMCwKLQkJCQkgICBBVURfVENPTjBfUEROXzIyTSB8IEFVRF9UQ09OMF9QRE5fMjRNLAotCQkJCSAgIEFVRF9UQ09OMF9QRE5fMjJNIHwgQVVEX1RDT04wX1BETl8yNE0pOworCWlmIChtX2NrKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUobV9jayk7Ci0JfQogCWlmIChiX2NrKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoYl9jayk7CiB9CkBAIC0zNjAsNiArMzYzLDggQEAKIAkJcmV0dXJuIDA7CiAKIAltdGtfYWZlX2RhaXNfZW5hYmxlX2Nsa3MoYWZlLCBhZmUtPmNsb2Nrc1tNVEtfQ0xLX0kyUzFfTV0sIE5VTEwpOworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQVVESU9fVE9QX0NPTjAsCisJCQkgICBBVURfVENPTjBfUEROXzIyTSB8IEFVRF9UQ09OMF9QRE5fMjRNLCAwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzczLDEwICszNzgsMTAgQEAKIAkJcmV0dXJuOwogCiAJbXRrX2FmZV9zZXRfaTJzX2VuYWJsZShhZmUsIGZhbHNlKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEFVRElPX1RPUF9DT04wLAorCQkJICAgQVVEX1RDT04wX1BETl8yMk0gfCBBVURfVENPTjBfUEROXzI0TSwKKwkJCSAgIEFVRF9UQ09OMF9QRE5fMjJNIHwgQVVEX1RDT04wX1BETl8yNE0pOwogCW10a19hZmVfZGFpc19kaXNhYmxlX2Nsa3MoYWZlLCBhZmUtPmNsb2Nrc1tNVEtfQ0xLX0kyUzFfTV0sIE5VTEwpOwotCi0JLyogZGlzYWJsZSBBRkUgKi8KLQlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEFGRV9EQUNfQ09OMCwgMHgxLCAwKTsKIH0KIAogc3RhdGljIGludCBtdGtfYWZlX2kyc19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApAQCAtNDI1LDkgKzQzMCw2IEBACiAKIAltdGtfYWZlX2RhaXNfZGlzYWJsZV9jbGtzKGFmZSwgYWZlLT5jbG9ja3NbTVRLX0NMS19JMlMzX01dLAogCQkJCSAgYWZlLT5jbG9ja3NbTVRLX0NMS19JMlMzX0JdKTsKLQotCS8qIGRpc2FibGUgQUZFICovCi0JcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBRkVfREFDX0NPTjAsIDB4MSwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgbXRrX2FmZV9oZG1pX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCkBAIC02MDMsNyArNjA1LDYgQEAKIAogCW1lbWlmLT5waHlzX2J1Zl9hZGRyID0gc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkcjsKIAltZW1pZi0+YnVmZmVyX3NpemUgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlczsKLQltZW1pZi0+aHdfcHRyID0gMDsKIAogCS8qIHN0YXJ0ICovCiAJcmVnbWFwX3dyaXRlKGFmZS0+cmVnbWFwLApAQCAtNjcyLDE3ICs2NzMsNiBAQAogCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CiB9CiAKLXN0YXRpYyBpbnQgbXRrX2FmZV9kYWlzX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtdGtfYWZlICphZmUgPSBzbmRfc29jX3BsYXRmb3JtX2dldF9kcnZkYXRhKHJ0ZC0+cGxhdGZvcm0pOwotCi0JLyogZW5hYmxlIEFGRSAqLwotCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQUZFX0RBQ19DT04wLCAweDEsIDB4MSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbXRrX2FmZV9kYWlzX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCiAJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CkBAIC03MzgsNyArNzI4LDYgQEAKIAkJLyogYW5kIGNsZWFyIHBlbmRpbmcgSVJRICovCiAJCXJlZ21hcF93cml0ZShhZmUtPnJlZ21hcCwgQUZFX0lSUV9DTFIsCiAJCQkgICAgIDEgPDwgbWVtaWYtPmRhdGEtPmlycV9jbHJfc2hpZnQpOwotCQltZW1pZi0+aHdfcHRyID0gMDsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NTEsNyArNzQwLDYgQEAKIAkuc2h1dGRvd24JPSBtdGtfYWZlX2RhaXNfc2h1dGRvd24sCiAJLmh3X3BhcmFtcwk9IG10a19hZmVfZGFpc19od19wYXJhbXMsCiAJLmh3X2ZyZWUJPSBtdGtfYWZlX2RhaXNfaHdfZnJlZSwKLQkucHJlcGFyZQk9IG10a19hZmVfZGFpc19wcmVwYXJlLAogCS50cmlnZ2VyCT0gbXRrX2FmZV9kYWlzX3RyaWdnZXIsCiB9OwogCkBAIC0xMDgyLDcgKzEwNzAsNyBAQAogc3RhdGljIGlycXJldHVybl90IG10a19hZmVfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBtdGtfYWZlICphZmUgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgaW50IHJlZ192YWx1ZSwgaHdfcHRyOworCXVuc2lnbmVkIGludCByZWdfdmFsdWU7CiAJaW50IGksIHJldDsKIAogCXJldCA9IHJlZ21hcF9yZWFkKGFmZS0+cmVnbWFwLCBBRkVfSVJRX1NUQVRVUywgJnJlZ192YWx1ZSk7CkBAIC0xMDk4LDEzICsxMDg2LDYgQEAKIAkJaWYgKCEocmVnX3ZhbHVlICYgKDEgPDwgbWVtaWYtPmRhdGEtPmlycV9jbHJfc2hpZnQpKSkKIAkJCWNvbnRpbnVlOwogCi0JCXJldCA9IHJlZ21hcF9yZWFkKGFmZS0+cmVnbWFwLCBtZW1pZi0+ZGF0YS0+cmVnX29mc19jdXIsCi0JCQkJICAmaHdfcHRyKTsKLQkJaWYgKHJldCB8fCBod19wdHIgPT0gMCkgewotCQkJZGV2X2VycihhZmUtPmRldiwgIiVzIGh3X3B0ciBlcnJcbiIsIF9fZnVuY19fKTsKLQkJCWh3X3B0ciA9IG1lbWlmLT5waHlzX2J1Zl9hZGRyOwotCQl9Ci0JCW1lbWlmLT5od19wdHIgPSBod19wdHIgLSBtZW1pZi0+cGh5c19idWZfYWRkcjsKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChtZW1pZi0+c3Vic3RyZWFtKTsKIAl9CiAKQEAgLTExMTksNiArMTEwMCw5IEBACiB7CiAJc3RydWN0IG10a19hZmUgKmFmZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCisJLyogZGlzYWJsZSBBRkUgKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEFGRV9EQUNfQ09OMCwgMHgxLCAwKTsKKwogCS8qIGRpc2FibGUgQUZFIGNsayAqLwogCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQVVESU9fVE9QX0NPTjAsCiAJCQkgICBBVURfVENPTjBfUEROX0FGRSwgQVVEX1RDT04wX1BETl9BRkUpOwpAQCAtMTE2NSw2ICsxMTQ5LDkgQEAKIAogCS8qIHVubWFzayBhbGwgSVJRcyAqLwogCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQUZFX0lSUV9NQ1VfRU4sIDB4ZmYsIDB4ZmYpOworCisJLyogZW5hYmxlIEFGRSAqLworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQUZFX0RBQ19DT04wLCAweDEsIDB4MSk7CiAJcmV0dXJuIDA7CiAKIGVycl9iY2swOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1oZG1pLWF1ZGlvLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLWhkbWktYXVkaW8uYwppbmRleCA1ODRiMjM3Li5mODNjYzJiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLWhkbWktYXVkaW8uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLWhkbWktYXVkaW8uYwpAQCAtMzY4LDYgKzM2OCw4IEBACiAJY2FyZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljYXJkLT5kYWlfbGluayA9CiAJCWRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqKGNhcmQtPmRhaV9saW5rKSksIEdGUF9LRVJORUwpOworCWlmICghY2FyZC0+ZGFpX2xpbmspCisJCXJldHVybiAtRU5PTUVNOwogCWNhcmQtPmRhaV9saW5rLT5uYW1lID0gY2FyZC0+bmFtZTsKIAljYXJkLT5kYWlfbGluay0+c3RyZWFtX25hbWUgPSBjYXJkLT5uYW1lOwogCWNhcmQtPmRhaV9saW5rLT5jcHVfZGFpX25hbWUgPSBkZXZfbmFtZShhZC0+ZHNzZGV2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvYnJvd25zdG9uZS5jIGIvc291bmQvc29jL3B4YS9icm93bnN0b25lLmMKaW5kZXggNjE0N2U4Ni4uNDE2ZWE2NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9icm93bnN0b25lLmMKKysrIGIvc291bmQvc29jL3B4YS9icm93bnN0b25lLmMKQEAgLTYzLDggKzYzLDcgQEAKIAkJc3lzY2xrICAgID0gcGFyYW1zX3JhdGUocGFyYW1zKSAqIDUxMjsKIAkJc3NwYV9tY2xrID0gcGFyYW1zX3JhdGUocGFyYW1zKSAqIDY0OwogCX0KLQlzc3BhX2RpdiA9IGZyZXFfb3V0OwotCWRvX2Rpdihzc3BhX2Rpdiwgc3NwYV9tY2xrKTsKKwlzc3BhX2RpdiA9IGZyZXFfb3V0IC8gc3NwYV9tY2xrOwogCiAJc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBNTVBfU1NQQV9DTEtfQVVESU8sIGZyZXFfb3V0LCAwKTsKIAlzbmRfc29jX2RhaV9zZXRfcGxsKGNwdV9kYWksIE1NUF9TWVNDTEssIDAsIGZyZXFfb3V0LCBzeXNjbGspOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jIGIvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCmluZGV4IDI5YmM2MGU4Li41YzhmOWRiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKKysrIGIvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCkBAIC04MSw4ICs4MSwxMiBAQAogc3RhdGljIGludCByZWFyX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0LAogCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd2lkZ2V0LT5kYXBtLT5jYXJkLT5ydGRbMF0uY29kZWM7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHdpZGdldC0+ZGFwbS0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAorCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rWzBdLm5hbWUpOworCWNvZGVjID0gcnRkLT5jb2RlYzsKIAlyZXR1cm4gcmVhcl9hbXBfcG93ZXIoY29kZWMsIFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcWNvbS9scGFzcy1jcHUuYyBiL3NvdW5kL3NvYy9xY29tL2xwYXNzLWNwdS5jCmluZGV4IGU1MTAxZTAuLjAwYjZjOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9xY29tL2xwYXNzLWNwdS5jCisrKyBiL3NvdW5kL3NvYy9xY29tL2xwYXNzLWNwdS5jCkBAIC0zNTUsNiArMzU1LDcgQEAKIAkucmVhZGFibGVfcmVnID0gbHBhc3NfY3B1X3JlZ21hcF9yZWFkYWJsZSwKIAkudm9sYXRpbGVfcmVnID0gbHBhc3NfY3B1X3JlZ21hcF92b2xhdGlsZSwKIAkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX0ZMQVQsCisJLnZhbF9mb3JtYXRfZW5kaWFuID0gUkVHTUFQX0VORElBTl9MSVRUTEUsCiB9OwogCiBpbnQgYXNvY19xY29tX2xwYXNzX2NwdV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX3NwZGlmLmMgYi9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc3BkaWYuYwppbmRleCBhMzhhMzAyLi41YTgwNmRhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc3BkaWYuYworKysgYi9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc3BkaWYuYwpAQCAtMTUyLDggKzE1MiwxMCBAQAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKIAkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHNwZGlmLT5yZWdtYXAsIFNQRElGX0RNQUNSLAotCQkJCSAgIFNQRElGX0RNQUNSX1RERV9FTkFCTEUsCi0JCQkJICAgU1BESUZfRE1BQ1JfVERFX0VOQUJMRSk7CisJCQkJICAgU1BESUZfRE1BQ1JfVERFX0VOQUJMRSB8CisJCQkJICAgU1BESUZfRE1BQ1JfVERMX01BU0ssCisJCQkJICAgU1BESUZfRE1BQ1JfVERFX0VOQUJMRSB8CisJCQkJICAgU1BESUZfRE1BQ1JfVERMKDE2KSk7CiAKIAkJaWYgKHJldCAhPSAwKQogCQkJcmV0dXJuIHJldDsKQEAgLTI4MCw3ICsyODIsNyBAQAogCWludCByZXQ7CiAKIAltYXRjaCA9IG9mX21hdGNoX25vZGUocmtfc3BkaWZfbWF0Y2gsIG5wKTsKLQlpZiAoKGludCkgbWF0Y2gtPmRhdGEgPT0gUktfU1BESUZfUkszMjg4KSB7CisJaWYgKG1hdGNoLT5kYXRhID09ICh2b2lkICopUktfU1BESUZfUkszMjg4KSB7CiAJCXN0cnVjdCByZWdtYXAgKmdyZjsKIAogCQlncmYgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9ja2NoaXAsZ3JmIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfc3BkaWYuaCBiL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9zcGRpZi5oCmluZGV4IDA3Zjg2YTIuLjNlZjEyNzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9zcGRpZi5oCisrKyBiL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9zcGRpZi5oCkBAIC0yOCw5ICsyOCw5IEBACiAjZGVmaW5lIFNQRElGX0NGR1JfVkRXKHgpCSh4IDw8IFNQRElGX0NGR1JfVkRXX1NISUZUKQogI2RlZmluZSBTRFBJRl9DRkdSX1ZEV19NQVNLCSgweGYgPDwgU1BESUZfQ0ZHUl9WRFdfU0hJRlQpCiAKLSNkZWZpbmUgU1BESUZfQ0ZHUl9WRFdfMTYJU1BESUZfQ0ZHUl9WRFcoMHgwMCkKLSNkZWZpbmUgU1BESUZfQ0ZHUl9WRFdfMjAJU1BESUZfQ0ZHUl9WRFcoMHgwMSkKLSNkZWZpbmUgU1BESUZfQ0ZHUl9WRFdfMjQJU1BESUZfQ0ZHUl9WRFcoMHgxMCkKKyNkZWZpbmUgU1BESUZfQ0ZHUl9WRFdfMTYJU1BESUZfQ0ZHUl9WRFcoMHgwKQorI2RlZmluZSBTUERJRl9DRkdSX1ZEV18yMAlTUERJRl9DRkdSX1ZEVygweDEpCisjZGVmaW5lIFNQRElGX0NGR1JfVkRXXzI0CVNQRElGX0NGR1JfVkRXKDB4MikKIAogLyoKICAqIERNQUNSCkBAIC00Miw3ICs0Miw3IEBACiAKICNkZWZpbmUgU1BESUZfRE1BQ1JfVERMX1NISUZUCTAKICNkZWZpbmUgU1BESUZfRE1BQ1JfVERMKHgpCSgoeCkgPDwgU1BESUZfRE1BQ1JfVERMX1NISUZUKQotI2RlZmluZSBTUERJRl9ETUFDUl9URExfTUFTSwkoMHgxZiA8PCBTRFBJRl9ETUFDUl9URExfU0hJRlQpCisjZGVmaW5lIFNQRElGX0RNQUNSX1RETF9NQVNLCSgweDFmIDw8IFNQRElGX0RNQUNSX1RETF9TSElGVCkKIAogLyoKICAqIFhGRVIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL0tjb25maWcgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnCmluZGV4IDM3NDRjOWUuLjc4YmFhMjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL0tjb25maWcKKysrIGIvc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZwpAQCAtMSw4ICsxLDYgQEAKIGNvbmZpZyBTTkRfU09DX1NBTVNVTkcKIAl0cmlzdGF0ZSAiQVNvQyBzdXBwb3J0IGZvciBTYW1zdW5nIgogCWRlcGVuZHMgb24gKFBMQVRfU0FNU1VORyB8fCBBUkNIX0VYWU5PUykKLQlkZXBlbmRzIG9uIFMzQzY0WFhfUEwwODAgfHwgIUFSQ0hfUzNDNjRYWAotCWRlcGVuZHMgb24gUzNDMjRYWF9ETUFDIHx8ICFBUkNIX1MzQzI0WFgKIAlzZWxlY3QgU05EX1NPQ19HRU5FUklDX0RNQUVOR0lORV9QQ00KIAloZWxwCiAJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2FjOTcuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2FjOTcuYwppbmRleCBlNDE0NTUwLi40YTdhNTAzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9hYzk3LmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvYWM5Ny5jCkBAIC0zMjQsNyArMzI0LDcgQEAKIAogc3RhdGljIGludCBzM2NfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlcywgKmRtYXR4X3JlcywgKmRtYXJ4X3JlcywgKmRtYW1pY19yZXMsICppcnFfcmVzOworCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlcywgKmlycV9yZXM7CiAJc3RydWN0IHMzY19hdWRpb19wZGF0YSAqYWM5N19wZGF0YTsKIAlpbnQgcmV0OwogCkBAIC0zMzUsMjQgKzMzNSw2IEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIGF2YWlsYWJpbGl0eSBvZiBuZWNlc3NhcnkgcmVzb3VyY2UgKi8KLQlkbWF0eF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOwotCWlmICghZG1hdHhfcmVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgQUM5Ny1UWCBkbWEgcmVzb3VyY2VcbiIpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCWRtYXJ4X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7Ci0JaWYgKCFkbWFyeF9yZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBBQzk3LVJYIGRtYSByZXNvdXJjZVxuIik7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JZG1hbWljX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMik7Ci0JaWYgKCFkbWFtaWNfcmVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgQUM5Ny1NSUMgZG1hIHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KIAlpcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKIAlpZiAoIWlycV9yZXMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQUM5NyBJUlEgbm90IHByb3ZpZGVkIVxuIik7CkBAIC0zNjQsMTEgKzM0NiwxMSBAQAogCWlmIChJU19FUlIoczNjX2FjOTcucmVncykpCiAJCXJldHVybiBQVFJfRVJSKHMzY19hYzk3LnJlZ3MpOwogCi0JczNjX2FjOTdfcGNtX291dC5jaGFubmVsID0gZG1hdHhfcmVzLT5zdGFydDsKKwlzM2NfYWM5N19wY21fb3V0LnNsYXZlID0gYWM5N19wZGF0YS0+ZG1hX3BsYXliYWNrOwogCXMzY19hYzk3X3BjbV9vdXQuZG1hX2FkZHIgPSBtZW1fcmVzLT5zdGFydCArIFMzQ19BQzk3X1BDTV9EQVRBOwotCXMzY19hYzk3X3BjbV9pbi5jaGFubmVsID0gZG1hcnhfcmVzLT5zdGFydDsKKwlzM2NfYWM5N19wY21faW4uc2xhdmUgPSBhYzk3X3BkYXRhLT5kbWFfY2FwdHVyZTsKIAlzM2NfYWM5N19wY21faW4uZG1hX2FkZHIgPSBtZW1fcmVzLT5zdGFydCArIFMzQ19BQzk3X1BDTV9EQVRBOwotCXMzY19hYzk3X21pY19pbi5jaGFubmVsID0gZG1hbWljX3Jlcy0+c3RhcnQ7CisJczNjX2FjOTdfbWljX2luLnNsYXZlID0gYWM5N19wZGF0YS0+ZG1hX2NhcHR1cmVfbWljOwogCXMzY19hYzk3X21pY19pbi5kbWFfYWRkciA9IG1lbV9yZXMtPnN0YXJ0ICsgUzNDX0FDOTdfTUlDX0RBVEE7CiAKIAlpbml0X2NvbXBsZXRpb24oJnMzY19hYzk3LmRvbmUpOwpAQCAtNDA2LDcgKzM4OCw4IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI1OwogCi0JcmV0ID0gc2Ftc3VuZ19hc29jX2RtYV9wbGF0Zm9ybV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlyZXQgPSBzYW1zdW5nX2Fzb2NfZG1hX3BsYXRmb3JtX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCisJCQkJCQkgYWM5N19wZGF0YS0+ZG1hX2ZpbHRlcik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlZ2lzdGVyIERNQTogJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyNTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2JlbGxzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9iZWxscy5jCmluZGV4IGU1ZjA1ZTYuLjNkZDI0NmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2JlbGxzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvYmVsbHMuYwpAQCAtNTgsMTEgKzU4LDE2IEBACiAJCQkJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCQkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gY2FyZC0+cnRkW0RBSV9EU1BfQ09ERUNdLmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCXN0cnVjdCBiZWxsc19kcnZkYXRhICpiZWxscyA9IGNhcmQtPmRydmRhdGE7CiAJaW50IHJldDsKIAorCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rW0RBSV9EU1BfQ09ERUNdLm5hbWUpOworCWNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCWNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwogCWlmIChkYXBtLT5kZXYgIT0gY29kZWNfZGFpLT5kZXYpCiAJCXJldHVybiAwOwogCkBAIC05OSwxMSArMTA0LDE2IEBACiAJCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkJICAgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGNhcmQtPnJ0ZFtEQUlfRFNQX0NPREVDXS5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlzdHJ1Y3QgYmVsbHNfZHJ2ZGF0YSAqYmVsbHMgPSBjYXJkLT5kcnZkYXRhOwogCWludCByZXQ7CiAKKwlydGQgPSBzbmRfc29jX2dldF9wY21fcnVudGltZShjYXJkLCBjYXJkLT5kYWlfbGlua1tEQUlfRFNQX0NPREVDXS5uYW1lKTsKKwljb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwljb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisKIAlpZiAoZGFwbS0+ZGV2ICE9IGNvZGVjX2RhaS0+ZGV2KQogCQlyZXR1cm4gMDsKIApAQCAtMTM3LDE0ICsxNDcsMjIgQEAKIHN0YXRpYyBpbnQgYmVsbHNfbGF0ZV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBiZWxsc19kcnZkYXRhICpiZWxscyA9IGNhcmQtPmRydmRhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKndtMDAxMCA9IGNhcmQtPnJ0ZFtEQUlfQVBfRFNQXS5jb2RlYzsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5ydGRbREFJX0RTUF9DT0RFQ10uY29kZWM7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICphaWYxX2RhaSA9IGNhcmQtPnJ0ZFtEQUlfRFNQX0NPREVDXS5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd20wMDEwOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmFpZjFfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqYWlmMl9kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICphaWYzX2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKndtOTA4MV9kYWk7CiAJaW50IHJldDsKIAorCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rW0RBSV9BUF9EU1BdLm5hbWUpOworCXdtMDAxMCA9IHJ0ZC0+Y29kZWM7CisKKwlydGQgPSBzbmRfc29jX2dldF9wY21fcnVudGltZShjYXJkLCBjYXJkLT5kYWlfbGlua1tEQUlfRFNQX0NPREVDXS5uYW1lKTsKKwljb2RlYyA9IHJ0ZC0+Y29kZWM7CisJYWlmMV9kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwogCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X3N5c2Nsayhjb2RlYywgQVJJWk9OQV9DTEtfU1lTQ0xLLAogCQkJCSAgICAgICBBUklaT05BX0NMS19TUkNfRkxMMSwKIAkJCQkgICAgICAgYmVsbHMtPnN5c2Nsa19yYXRlLApAQCAtMTgxLDcgKzE5OSw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JYWlmMl9kYWkgPSBjYXJkLT5ydGRbREFJX0NPREVDX0NQXS5jcHVfZGFpOworCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rW0RBSV9DT0RFQ19DUF0ubmFtZSk7CisJYWlmMl9kYWkgPSBydGQtPmNwdV9kYWk7CiAKIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGFpZjJfZGFpLCBBUklaT05BX0NMS19BU1lOQ0NMSywgMCwgMCk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0xOTIsOCArMjExLDkgQEAKIAlpZiAoY2FyZC0+bnVtX3J0ZCA9PSBEQUlfQ09ERUNfU1VCKQogCQlyZXR1cm4gMDsKIAotCWFpZjNfZGFpID0gY2FyZC0+cnRkW0RBSV9DT0RFQ19TVUJdLmNwdV9kYWk7Ci0Jd205MDgxX2RhaSA9IGNhcmQtPnJ0ZFtEQUlfQ09ERUNfU1VCXS5jb2RlY19kYWk7CisJcnRkID0gc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoY2FyZCwgY2FyZC0+ZGFpX2xpbmtbREFJX0NPREVDX1NVQl0ubmFtZSk7CisJYWlmM19kYWkgPSBydGQtPmNwdV9kYWk7CisJd205MDgxX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwogCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhhaWYzX2RhaSwgQVJJWk9OQV9DTEtfU1lTQ0xLLCAwLCAwKTsKIAlpZiAocmV0ICE9IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2RtYS5oIGIvc291bmQvc29jL3NhbXN1bmcvZG1hLmgKaW5kZXggMGU4NWRjZi4uYTc2MTZjYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvZG1hLmgKKysrIGIvc291bmQvc29jL3NhbXN1bmcvZG1hLmgKQEAgLTEzLDkgKzEzLDEwIEBACiAjZGVmaW5lIF9TM0NfQVVESU9fSAogCiAjaW5jbHVkZSA8c291bmQvZG1hZW5naW5lX3BjbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogCiBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgewotCWludCBjaGFubmVsOwkJCQkvKiBDaGFubmVsIElEICovCisJdm9pZCAqc2xhdmU7CQkJCS8qIENoYW5uZWwgSUQgKi8KIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCWludCBkbWFfc2l6ZTsJCQkvKiBTaXplIG9mIHRoZSBETUEgdHJhbnNmZXIgKi8KIAljaGFyICpjaF9uYW1lOwpAQCAtMjUsNiArMjYsNyBAQAogdm9pZCBzYW1zdW5nX2Fzb2NfaW5pdF9kbWFfZGF0YShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKIAkJCQlzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgKnBsYXliYWNrLAogCQkJCXN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqY2FwdHVyZSk7Ci1pbnQgc2Ftc3VuZ19hc29jX2RtYV9wbGF0Zm9ybV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IHNhbXN1bmdfYXNvY19kbWFfcGxhdGZvcm1fcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBkbWFfZmlsdGVyX2ZuIGZuKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9kbWFlbmdpbmUuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2RtYWVuZ2luZS5jCmluZGV4IDUwNmY1YmYuLjA2MzEyNTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2RtYWVuZ2luZS5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2RtYWVuZ2luZS5jCkBAIC0yOCwxNyArMjgsOCBAQAogCiAjaW5jbHVkZSAiZG1hLmgiCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9TM0M2NFhYCi0jZGVmaW5lIGZpbHRlcl9mbiBwbDA4eF9maWx0ZXJfaWQKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfUzNDMjRYWCkKLSNkZWZpbmUgZmlsdGVyX2ZuIHMzYzI0eHhfZG1hX2ZpbHRlcgotI2Vsc2UKLSNkZWZpbmUgZmlsdGVyX2ZuIE5VTEwKLSNlbmRpZgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9kbWFlbmdpbmVfcGNtX2NvbmZpZyBzYW1zdW5nX2RtYWVuZ2luZV9wY21fY29uZmlnID0geworc3RhdGljIHN0cnVjdCBzbmRfZG1hZW5naW5lX3BjbV9jb25maWcgc2Ftc3VuZ19kbWFlbmdpbmVfcGNtX2NvbmZpZyA9IHsKIAkucHJlcGFyZV9zbGF2ZV9jb25maWcgPSBzbmRfZG1hZW5naW5lX3BjbV9wcmVwYXJlX3NsYXZlX2NvbmZpZywKLQkuY29tcGF0X2ZpbHRlcl9mbiA9IGZpbHRlcl9mbiwKIH07CiAKIHZvaWQgc2Ftc3VuZ19hc29jX2luaXRfZG1hX2RhdGEoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCkBAIC01MCwxNCArNDEsMTQgQEAKIAogCWlmIChwbGF5YmFjaykgewogCQlwbGF5YmFja19kYXRhID0gJnBsYXliYWNrLT5kbWFfZGF0YTsKLQkJcGxheWJhY2tfZGF0YS0+ZmlsdGVyX2RhdGEgPSAodm9pZCAqKXBsYXliYWNrLT5jaGFubmVsOworCQlwbGF5YmFja19kYXRhLT5maWx0ZXJfZGF0YSA9IHBsYXliYWNrLT5zbGF2ZTsKIAkJcGxheWJhY2tfZGF0YS0+Y2hhbl9uYW1lID0gcGxheWJhY2stPmNoX25hbWU7CiAJCXBsYXliYWNrX2RhdGEtPmFkZHIgPSBwbGF5YmFjay0+ZG1hX2FkZHI7CiAJCXBsYXliYWNrX2RhdGEtPmFkZHJfd2lkdGggPSBwbGF5YmFjay0+ZG1hX3NpemU7CiAJfQogCWlmIChjYXB0dXJlKSB7CiAJCWNhcHR1cmVfZGF0YSA9ICZjYXB0dXJlLT5kbWFfZGF0YTsKLQkJY2FwdHVyZV9kYXRhLT5maWx0ZXJfZGF0YSA9ICh2b2lkICopY2FwdHVyZS0+Y2hhbm5lbDsKKwkJY2FwdHVyZV9kYXRhLT5maWx0ZXJfZGF0YSA9IGNhcHR1cmUtPnNsYXZlOwogCQljYXB0dXJlX2RhdGEtPmNoYW5fbmFtZSA9IGNhcHR1cmUtPmNoX25hbWU7CiAJCWNhcHR1cmVfZGF0YS0+YWRkciA9IGNhcHR1cmUtPmRtYV9hZGRyOwogCQljYXB0dXJlX2RhdGEtPmFkZHJfd2lkdGggPSBjYXB0dXJlLT5kbWFfc2l6ZTsKQEAgLTY3LDggKzU4LDExIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzYW1zdW5nX2Fzb2NfaW5pdF9kbWFfZGF0YSk7CiAKLWludCBzYW1zdW5nX2Fzb2NfZG1hX3BsYXRmb3JtX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBzYW1zdW5nX2Fzb2NfZG1hX3BsYXRmb3JtX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgZG1hX2ZpbHRlcl9mbiBmaWx0ZXIpCiB7CisJc2Ftc3VuZ19kbWFlbmdpbmVfcGNtX2NvbmZpZy5jb21wYXRfZmlsdGVyX2ZuID0gZmlsdGVyOworCiAJcmV0dXJuIGRldm1fc25kX2RtYWVuZ2luZV9wY21fcmVnaXN0ZXIoZGV2LAogCQkJJnNhbXN1bmdfZG1hZW5naW5lX3BjbV9jb25maWcsCiAJCQlTTkRfRE1BRU5HSU5FX1BDTV9GTEFHX0NVU1RPTV9DSEFOTkVMX05BTUUgfApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvaTJzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9pMnMuYwppbmRleCBlYTRhYjM3Li44NGQ5ZTc3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9pMnMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9pMnMuYwpAQCAtODksNiArODksNyBAQAogCXN0cnVjdCBzM2NfZG1hX3BhcmFtcyBkbWFfcGxheWJhY2s7CiAJc3RydWN0IHMzY19kbWFfcGFyYW1zIGRtYV9jYXB0dXJlOwogCXN0cnVjdCBzM2NfZG1hX3BhcmFtcyBpZG1hX3BsYXliYWNrOworCWRtYV9maWx0ZXJfZm4gZmlsdGVyOwogCXUzMglxdWlya3M7CiAJdTMyCXN1c3BlbmRfaTJzbW9kOwogCXUzMglzdXNwZW5kX2kyc2NvbjsKQEAgLTEyNDQsNyArMTI0NSw4IEBACiAJCWlmIChyZXQgIT0gMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJcmV0dXJuIHNhbXN1bmdfYXNvY19kbWFfcGxhdGZvcm1fcmVnaXN0ZXIoJnBkZXYtPmRldik7CisJCXJldHVybiBzYW1zdW5nX2Fzb2NfZG1hX3BsYXRmb3JtX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCisJCQkJCQkJICBzZWNfZGFpLT5maWx0ZXIpOwogCX0KIAogCXByaV9kYWkgPSBpMnNfYWxsb2NfZGFpKHBkZXYsIGZhbHNlKTsKQEAgLTEyNTcsMjcgKzEyNTksMTUgQEAKIAlwcmlfZGFpLT5sb2NrID0gJnByaV9kYWktPnNwaW5sb2NrOwogCiAJaWYgKCFucCkgewotCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOwotCQlpZiAoIXJlcykgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJVbmFibGUgdG8gZ2V0IEkyUy1UWCBkbWEgcmVzb3VyY2VcbiIpOwotCQkJcmV0dXJuIC1FTlhJTzsKLQkJfQotCQlwcmlfZGFpLT5kbWFfcGxheWJhY2suY2hhbm5lbCA9IHJlcy0+c3RhcnQ7Ci0KLQkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAxKTsKLQkJaWYgKCFyZXMpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkiVW5hYmxlIHRvIGdldCBJMlMtUlggZG1hIHJlc291cmNlXG4iKTsKLQkJCXJldHVybiAtRU5YSU87Ci0JCX0KLQkJcHJpX2RhaS0+ZG1hX2NhcHR1cmUuY2hhbm5lbCA9IHJlcy0+c3RhcnQ7Ci0KIAkJaWYgKGkyc19wZGF0YSA9PSBOVUxMKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCB3b3JrIHdpdGhvdXQgczNjX2F1ZGlvX3BkYXRhXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKKwkJcHJpX2RhaS0+ZG1hX3BsYXliYWNrLnNsYXZlID0gaTJzX3BkYXRhLT5kbWFfcGxheWJhY2s7CisJCXByaV9kYWktPmRtYV9jYXB0dXJlLnNsYXZlID0gaTJzX3BkYXRhLT5kbWFfY2FwdHVyZTsKKwkJcHJpX2RhaS0+ZmlsdGVyID0gaTJzX3BkYXRhLT5kbWFfZmlsdGVyOworCiAJCWlmICgmaTJzX3BkYXRhLT50eXBlKQogCQkJaTJzX2NmZyA9ICZpMnNfcGRhdGEtPnR5cGUuaTJzOwogCkBAIC0xMzM5LDkgKzEzMjksOCBAQAogCQlzZWNfZGFpLT5kbWFfcGxheWJhY2suY2hfbmFtZSA9ICJ0eC1zZWMiOwogCiAJCWlmICghbnApIHsKLQkJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMik7Ci0JCQlpZiAocmVzKQotCQkJCXNlY19kYWktPmRtYV9wbGF5YmFjay5jaGFubmVsID0gcmVzLT5zdGFydDsKKwkJCXNlY19kYWktPmRtYV9wbGF5YmFjay5zbGF2ZSA9IGkyc19wZGF0YS0+ZG1hX3BsYXlfc2VjOworCQkJc2VjX2RhaS0+ZmlsdGVyID0gaTJzX3BkYXRhLT5kbWFfZmlsdGVyOwogCQl9CiAKIAkJc2VjX2RhaS0+ZG1hX3BsYXliYWNrLmRtYV9zaXplID0gNDsKQEAgLTEzNjQsNyArMTM1Myw3IEBACiAKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAotCXJldCA9IHNhbXN1bmdfYXNvY19kbWFfcGxhdGZvcm1fcmVnaXN0ZXIoJnBkZXYtPmRldik7CisJcmV0ID0gc2Ftc3VuZ19hc29jX2RtYV9wbGF0Zm9ybV9yZWdpc3RlcigmcGRldi0+ZGV2LCBwcmlfZGFpLT5maWx0ZXIpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvbGl0dGxlbWlsbC5jIGIvc291bmQvc29jL3NhbXN1bmcvbGl0dGxlbWlsbC5jCmluZGV4IDMxYTgyMGUuLjdjYjIwNGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2xpdHRsZW1pbGwuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9saXR0bGVtaWxsLmMKQEAgLTIzLDkgKzIzLDEzIEBACiAJCQkJCSAgc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCQkJCQkgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewotCXN0cnVjdCBzbmRfc29jX2RhaSAqYWlmMV9kYWkgPSBjYXJkLT5ydGRbMF0uY29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CisJc3RydWN0IHNuZF9zb2NfZGFpICphaWYxX2RhaTsKIAlpbnQgcmV0OwogCisJcnRkID0gc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoY2FyZCwgY2FyZC0+ZGFpX2xpbmtbMF0ubmFtZSk7CisJYWlmMV9kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwogCWlmIChkYXBtLT5kZXYgIT0gYWlmMV9kYWktPmRldikKIAkJcmV0dXJuIDA7CiAKQEAgLTY2LDkgKzcwLDEzIEBACiAJCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkJCSAgICAgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmFpZjFfZGFpID0gY2FyZC0+cnRkWzBdLmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOworCXN0cnVjdCBzbmRfc29jX2RhaSAqYWlmMV9kYWk7CiAJaW50IHJldDsKIAorCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rWzBdLm5hbWUpOworCWFpZjFfZGFpID0gcnRkLT5jb2RlY19kYWk7CisKIAlpZiAoZGFwbS0+ZGV2ICE9IGFpZjFfZGFpLT5kZXYpCiAJCXJldHVybiAwOwogCkBAIC0xNjgsOSArMTc2LDEzIEBACiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSB3LT5kYXBtLT5jYXJkOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqYWlmMl9kYWkgPSBjYXJkLT5ydGRbMV0uY3B1X2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOworCXN0cnVjdCBzbmRfc29jX2RhaSAqYWlmMl9kYWk7CiAJaW50IHJldDsKIAorCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rWzFdLm5hbWUpOworCWFpZjJfZGFpID0gcnRkLT5jcHVfZGFpOworCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CiAJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoYWlmMl9kYWksIFdNODk5NF9GTEwyLApAQCAtMjQ1LDExICsyNTcsMTkgQEAKIAogc3RhdGljIGludCBsaXR0bGVtaWxsX2xhdGVfcHJvYmUoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5ydGRbMF0uY29kZWM7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICphaWYxX2RhaSA9IGNhcmQtPnJ0ZFswXS5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICphaWYyX2RhaSA9IGNhcmQtPnJ0ZFsxXS5jcHVfZGFpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhaSAqYWlmMV9kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICphaWYyX2RhaTsKIAlpbnQgcmV0OwogCisJcnRkID0gc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoY2FyZCwgY2FyZC0+ZGFpX2xpbmtbMF0ubmFtZSk7CisJY29kZWMgPSBydGQtPmNvZGVjOworCWFpZjFfZGFpID0gcnRkLT5jb2RlY19kYWk7CisKKwlydGQgPSBzbmRfc29jX2dldF9wY21fcnVudGltZShjYXJkLCBjYXJkLT5kYWlfbGlua1sxXS5uYW1lKTsKKwlhaWYyX2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoYWlmMV9kYWksIFdNODk5NF9TWVNDTEtfTUNMSzIsCiAJCQkJICAgICAzMjc2OCwgU05EX1NPQ19DTE9DS19JTik7CiAJaWYgKHJldCA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9vZHJvaWR4Ml9tYXg5ODA5MC5jIGIvc291bmQvc29jL3NhbXN1bmcvb2Ryb2lkeDJfbWF4OTgwOTAuYwppbmRleCA1OTZmMTE4Li4wNDIxNzI3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9vZHJvaWR4Ml9tYXg5ODA5MC5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL29kcm9pZHgyX21heDk4MDkwLmMKQEAgLTI1LDEwICsyNSwxNSBAQAogCiBzdGF0aWMgaW50IG9kcm9pZHgyX2xhdGVfcHJvYmUoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGNhcmQtPnJ0ZFswXS5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gY2FyZC0+cnRkWzBdLmNwdV9kYWk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWk7CiAJaW50IHJldDsKIAorCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rWzBdLm5hbWUpOworCWNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCWNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CisKIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgTUFYOTgwOTBfTUNMSywKIAkJCQkJCVNORF9TT0NfQ0xPQ0tfSU4pOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5jCmluZGV4IGIzMjBhOWQuLjQ5OGY1NjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5jCkBAIC00ODYsOCArNDg2LDkgQEAKIHN0YXRpYyBpbnQgczNjX3BjbV9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgczNjX3BjbV9pbmZvICpwY207Ci0Jc3RydWN0IHJlc291cmNlICptZW1fcmVzLCAqZG1hdHhfcmVzLCAqZG1hcnhfcmVzOworCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlczsKIAlzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhICpwY21fcGRhdGE7CisJZG1hX2ZpbHRlcl9mbiBmaWx0ZXI7CiAJaW50IHJldDsKIAogCS8qIENoZWNrIGZvciB2YWxpZCBkZXZpY2UgaW5kZXggKi8KQEAgLTQ5OSwxOCArNTAwLDYgQEAKIAlwY21fcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCS8qIENoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YgbmVjZXNzYXJ5IHJlc291cmNlICovCi0JZG1hdHhfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKLQlpZiAoIWRtYXR4X3JlcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IFBDTS1UWCBkbWEgcmVzb3VyY2VcbiIpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCWRtYXJ4X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7Ci0JaWYgKCFkbWFyeF9yZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBQQ00tUlggZG1hIHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KIAltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIW1lbV9yZXMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCByZWdpc3RlciByZXNvdXJjZVxuIik7CkBAIC01NjgsOCArNTU3LDEyIEBACiAJczNjX3BjbV9zdGVyZW9fb3V0W3BkZXYtPmlkXS5kbWFfYWRkciA9IG1lbV9yZXMtPnN0YXJ0CiAJCQkJCQkJKyBTM0NfUENNX1RYRklGTzsKIAotCXMzY19wY21fc3RlcmVvX2luW3BkZXYtPmlkXS5jaGFubmVsID0gZG1hcnhfcmVzLT5zdGFydDsKLQlzM2NfcGNtX3N0ZXJlb19vdXRbcGRldi0+aWRdLmNoYW5uZWwgPSBkbWF0eF9yZXMtPnN0YXJ0OworCWZpbHRlciA9IE5VTEw7CisJaWYgKHBjbV9wZGF0YSkgeworCQlzM2NfcGNtX3N0ZXJlb19pbltwZGV2LT5pZF0uc2xhdmUgPSBwY21fcGRhdGEtPmRtYV9jYXB0dXJlOworCQlzM2NfcGNtX3N0ZXJlb19vdXRbcGRldi0+aWRdLnNsYXZlID0gcGNtX3BkYXRhLT5kbWFfcGxheWJhY2s7CisJCWZpbHRlciA9IHBjbV9wZGF0YS0+ZG1hX2ZpbHRlcjsKKwl9CiAKIAlwY20tPmRtYV9jYXB0dXJlID0gJnMzY19wY21fc3RlcmVvX2luW3BkZXYtPmlkXTsKIAlwY20tPmRtYV9wbGF5YmFjayA9ICZzM2NfcGNtX3N0ZXJlb19vdXRbcGRldi0+aWRdOwpAQCAtNTgzLDcgKzU3Niw3IEBACiAJCWdvdG8gZXJyNTsKIAl9CiAKLQlyZXQgPSBzYW1zdW5nX2Fzb2NfZG1hX3BsYXRmb3JtX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOworCXJldCA9IHNhbXN1bmdfYXNvY19kbWFfcGxhdGZvcm1fcmVnaXN0ZXIoJnBkZXYtPmRldiwgZmlsdGVyKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgcmVnaXN0ZXIgRE1BOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnI1OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjQxMi1pMnMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0MTItaTJzLmMKaW5kZXggMmI3NjZkMi4uMjA0MDI5ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjQxMi1pMnMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNDEyLWkycy5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8tc2Ftc3VuZy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KIApAQCAtMzMsMTQgKzMyLDE0IEBACiAjaW5jbHVkZSAicmVncy1pMnMtdjIuaCIKICNpbmNsdWRlICJzM2MyNDEyLWkycy5oIgogCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hc29jLXMzYy5oPgorCiBzdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzI0MTJfaTJzX3BjbV9zdGVyZW9fb3V0ID0gewotCS5jaGFubmVsCT0gRE1BQ0hfSTJTX09VVCwKIAkuY2hfbmFtZQk9ICJ0eCIsCiAJLmRtYV9zaXplCT0gNCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjMjQxMl9pMnNfcGNtX3N0ZXJlb19pbiA9IHsKLQkuY2hhbm5lbAk9IERNQUNIX0kyU19JTiwKIAkuY2hfbmFtZQk9ICJyeCIsCiAJLmRtYV9zaXplCT0gNCwKIH07CkBAIC0xNTIsNiArMTUxLDEyIEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHMzY19hdWRpb19wZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGEiKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXMzYzI0MTJfaTJzLnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKQEAgLTE1OSw3ICsxNjQsOSBAQAogCQlyZXR1cm4gUFRSX0VSUihzM2MyNDEyX2kycy5yZWdzKTsKIAogCXMzYzI0MTJfaTJzX3BjbV9zdGVyZW9fb3V0LmRtYV9hZGRyID0gcmVzLT5zdGFydCArIFMzQzI0MTJfSUlTVFhEOworCXMzYzI0MTJfaTJzX3BjbV9zdGVyZW9fb3V0LnNsYXZlID0gcGRhdGEtPmRtYV9wbGF5YmFjazsKIAlzM2MyNDEyX2kyc19wY21fc3RlcmVvX2luLmRtYV9hZGRyID0gcmVzLT5zdGFydCArIFMzQzI0MTJfSUlTUlhEOworCXMzYzI0MTJfaTJzX3BjbV9zdGVyZW9faW4uc2xhdmUgPSBwZGF0YS0+ZG1hX2NhcHR1cmU7CiAKIAlyZXQgPSBzM2NfaTJzdjJfcmVnaXN0ZXJfY29tcG9uZW50KCZwZGV2LT5kZXYsIC0xLAogCQkJCQkgICAmczNjMjQxMl9pMnNfY29tcG9uZW50LApAQCAtMTY5LDcgKzE3Niw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gc2Ftc3VuZ19hc29jX2RtYV9wbGF0Zm9ybV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlyZXQgPSBzYW1zdW5nX2Fzb2NfZG1hX3BsYXRmb3JtX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCisJCQkJCQkgcGRhdGEtPmRtYV9maWx0ZXIpOwogCWlmIChyZXQpCiAJCXByX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBETUE6ICVkXG4iLCByZXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4LWkycy5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eC1pMnMuYwppbmRleCA1YmY3MjM2Li5iM2E0NzVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHgtaTJzLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby1zYW1zdW5nLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogI2luY2x1ZGUgInJlZ3MtaWlzLmgiCkBAIC0zMSwxNCArMzAsMTQgQEAKICNpbmNsdWRlICJkbWEuaCIKICNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgogCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9hc29jLXMzYy5oPgorCiBzdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzI0eHhfaTJzX3BjbV9zdGVyZW9fb3V0ID0gewotCS5jaGFubmVsCT0gRE1BQ0hfSTJTX09VVCwKIAkuY2hfbmFtZQk9ICJ0eCIsCiAJLmRtYV9zaXplCT0gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjMjR4eF9pMnNfcGNtX3N0ZXJlb19pbiA9IHsKLQkuY2hhbm5lbAk9IERNQUNIX0kyU19JTiwKIAkuY2hfbmFtZQk9ICJyeCIsCiAJLmRtYV9zaXplCT0gMiwKIH07CkBAIC00NTQsNiArNDUzLDEyIEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHMzY19hdWRpb19wZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIHBsYXRmb3JtIGRhdGEiKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7CkBAIC00NjUsNyArNDcwLDkgQEAKIAkJcmV0dXJuIFBUUl9FUlIoczNjMjR4eF9pMnMucmVncyk7CiAKIAlzM2MyNHh4X2kyc19wY21fc3RlcmVvX291dC5kbWFfYWRkciA9IHJlcy0+c3RhcnQgKyBTM0MyNDEwX0lJU0ZJRk87CisJczNjMjR4eF9pMnNfcGNtX3N0ZXJlb19vdXQuc2xhdmUgPSBwZGF0YS0+ZG1hX3BsYXliYWNrOwogCXMzYzI0eHhfaTJzX3BjbV9zdGVyZW9faW4uZG1hX2FkZHIgPSByZXMtPnN0YXJ0ICsgUzNDMjQxMF9JSVNGSUZPOworCXMzYzI0eHhfaTJzX3BjbV9zdGVyZW9faW4uc2xhdmUgPSBwZGF0YS0+ZG1hX2NhcHR1cmU7CiAKIAlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZwZGV2LT5kZXYsCiAJCQkmczNjMjR4eF9pMnNfY29tcG9uZW50LCAmczNjMjR4eF9pMnNfZGFpLCAxKTsKQEAgLTQ3NCw3ICs0ODEsOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHNhbXN1bmdfYXNvY19kbWFfcGxhdGZvcm1fcmVnaXN0ZXIoJnBkZXYtPmRldik7CisJcmV0ID0gc2Ftc3VuZ19hc29jX2RtYV9wbGF0Zm9ybV9yZWdpc3RlcigmcGRldi0+ZGV2LAorCQkJCQkJIHBkYXRhLT5kbWFfZmlsdGVyKTsKIAlpZiAocmV0KQogCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciB0aGUgZG1hOiAlZFxuIiwgcmV0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvc25vdy5jIGIvc291bmQvc29jL3NhbXN1bmcvc25vdy5jCmluZGV4IDA3Y2UyY2YuLmQ4YWM5MDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL3Nub3cuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbm93LmMKQEAgLTM1LDEwICszNSwxNSBAQAogCiBzdGF0aWMgaW50IHNub3dfbGF0ZV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gY2FyZC0+cnRkWzBdLmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBjYXJkLT5ydGRbMF0uY3B1X2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaTsKIAlpbnQgcmV0OwogCisJcnRkID0gc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoY2FyZCwgY2FyZC0+ZGFpX2xpbmtbMF0ubmFtZSk7CisJY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CisJY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKKwogCS8qIFNldCB0aGUgTUNMSyByYXRlIGZvciB0aGUgY29kZWMgKi8KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwKIAkJCQkJRklOX1BMTF9SQVRFLCBTTkRfU09DX0NMT0NLX0lOKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3NwZGlmLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGRpZi5jCmluZGV4IDM2ZGJjMGU5Li40Njg3ZjUyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGRpZi5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NwZGlmLmMKQEAgLTM1OSwyMCArMzU5LDE1IEBACiBzdGF0aWMgaW50IHNwZGlmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHMzY19hdWRpb19wZGF0YSAqc3BkaWZfcGRhdGE7Ci0Jc3RydWN0IHJlc291cmNlICptZW1fcmVzLCAqZG1hX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7CiAJc3RydWN0IHNhbXN1bmdfc3BkaWZfaW5mbyAqc3BkaWY7CisJZG1hX2ZpbHRlcl9mbiBmaWx0ZXI7CiAJaW50IHJldDsKIAogCXNwZGlmX3BkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlkbWFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKLQlpZiAoIWRtYV9yZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBkbWEgcmVzb3VyY2UuXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KIAltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIW1lbV9yZXMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCByZWdpc3RlciByZXNvdXJjZS5cbiIpOwpAQCAtNDMyLDExICs0MjcsMTUgQEAKIAogCXNwZGlmX3N0ZXJlb19vdXQuZG1hX3NpemUgPSAyOwogCXNwZGlmX3N0ZXJlb19vdXQuZG1hX2FkZHIgPSBtZW1fcmVzLT5zdGFydCArIERBVEFfT1VUQlVGOwotCXNwZGlmX3N0ZXJlb19vdXQuY2hhbm5lbCA9IGRtYV9yZXMtPnN0YXJ0OworCWZpbHRlciA9IE5VTEw7CisJaWYgKHNwZGlmX3BkYXRhKSB7CisJCXNwZGlmX3N0ZXJlb19vdXQuc2xhdmUgPSBzcGRpZl9wZGF0YS0+ZG1hX3BsYXliYWNrOworCQlmaWx0ZXIgPSBzcGRpZl9wZGF0YS0+ZG1hX2ZpbHRlcjsKKwl9CiAKIAlzcGRpZi0+ZG1hX3BsYXliYWNrID0gJnNwZGlmX3N0ZXJlb19vdXQ7CiAKLQlyZXQgPSBzYW1zdW5nX2Fzb2NfZG1hX3BsYXRmb3JtX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOworCXJldCA9IHNhbXN1bmdfYXNvY19kbWFfcGxhdGZvcm1fcmVnaXN0ZXIoJnBkZXYtPmRldiwgZmlsdGVyKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBETUE6ICVkXG4iLCByZXQpOwogCQlnb3RvIGVycjQ7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGV5c2lkZS5jIGIvc291bmQvc29jL3NhbXN1bmcvc3BleXNpZGUuYwppbmRleCBkMWFlMjFjNS4uMDgzZWY1ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvc3BleXNpZGUuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGV5c2lkZS5jCkBAIC0yNSw5ICsyNSwxMyBAQAogCQkJCSAgIHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAkJCQkgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGNhcmQtPnJ0ZFsxXS5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCisJcnRkID0gc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoY2FyZCwgY2FyZC0+ZGFpX2xpbmtbMV0ubmFtZSk7CisJY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CisKIAlpZiAoZGFwbS0+ZGV2ICE9IGNvZGVjX2RhaS0+ZGV2KQogCQlyZXR1cm4gMDsKIApAQCAtNTcsOSArNjEsMTMgQEAKIAkJCQkJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCQkJCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGNhcmQtPnJ0ZFsxXS5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCisJcnRkID0gc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoY2FyZCwgY2FyZC0+ZGFpX2xpbmtbMV0ubmFtZSk7CisJY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CisKIAlpZiAoZGFwbS0+ZGV2ICE9IGNvZGVjX2RhaS0+ZGV2KQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvdG9iZXJtb3J5LmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy90b2Jlcm1vcnkuYwppbmRleCA4NWNjZmI3Li4zMzEwZWRhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy90b2Jlcm1vcnkuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy90b2Jlcm1vcnkuYwpAQCAtMjMsOSArMjMsMTMgQEAKIAkJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkJCSAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBjYXJkLT5ydGRbMF0uY29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CiAJaW50IHJldDsKIAorCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rWzBdLm5hbWUpOworCWNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCiAJaWYgKGRhcG0tPmRldiAhPSBjb2RlY19kYWktPmRldikKIAkJcmV0dXJuIDA7CiAKQEAgLTYyLDkgKzY2LDEzIEBACiAJCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkJCSAgICAgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGNhcmQtPnJ0ZFswXS5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKIAlpbnQgcmV0OwogCisJcnRkID0gc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoY2FyZCwgY2FyZC0+ZGFpX2xpbmtbMF0ubmFtZSk7CisJY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CisKIAlpZiAoZGFwbS0+ZGV2ICE9IGNvZGVjX2RhaS0+ZGV2KQogCQlyZXR1cm4gMDsKIApAQCAtMTcwLDEwICsxNzgsMTUgQEAKIAogc3RhdGljIGludCB0b2Jlcm1vcnlfbGF0ZV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNhcmQtPnJ0ZFswXS5jb2RlYzsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGNhcmQtPnJ0ZFswXS5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWk7CiAJaW50IHJldDsKIAorCXJ0ZCA9IHNuZF9zb2NfZ2V0X3BjbV9ydW50aW1lKGNhcmQsIGNhcmQtPmRhaV9saW5rWzBdLm5hbWUpOworCWNvZGVjID0gcnRkLT5jb2RlYzsKKwljb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg5NjJfU1lTQ0xLX01DTEssCiAJCQkJICAgICAzMjc2OCwgU05EX1NPQ19DTE9DS19JTik7CiAJaWYgKHJldCA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvS2NvbmZpZyBiL3NvdW5kL3NvYy9zaC9LY29uZmlnCmluZGV4IDIwNmQxZWQuLmM5OTAyYTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zaC9LY29uZmlnCkBAIC0zNiw3ICszNiw2IEBACiAKIGNvbmZpZyBTTkRfU09DX1JDQVIKIAl0cmlzdGF0ZSAiUi1DYXIgc2VyaWVzIFNSVS9TQ1UvU1NJVS9TU0kgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIERNQV9PRgogCWRlcGVuZHMgb24gQ09NTU9OX0NMSwogCXNlbGVjdCBTTkRfU0lNUExFX0NBUkQKIAlzZWxlY3QgUkVHTUFQX01NSU8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2kuYyBiL3NvdW5kL3NvYy9zaC9mc2kuYwppbmRleCAwMjE1Yzc4Li5lYWQ1MjAxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvZnNpLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS5jCkBAIC0xMzYyLDE1ICsxMzYyLDE4IEBACiAKIHN0YXRpYyBpbnQgZnNpX2RtYV9wcm9iZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgc3RydWN0IGZzaV9zdHJlYW0gKmlvLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JZG1hX2NhcF9tYXNrX3QgbWFzazsKIAlpbnQgaXNfcGxheSA9IGZzaV9zdHJlYW1faXNfcGxheShmc2ksIGlvKTsKIAorI2lmZGVmIENPTkZJR19TVVBFUkgKKwlkbWFfY2FwX21hc2tfdCBtYXNrOwogCWRtYV9jYXBfemVybyhtYXNrKTsKIAlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwogCi0JaW8tPmNoYW4gPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsX2NvbXBhdChtYXNrLAotCQkJCXNoZG1hX2NoYW5fZmlsdGVyLCAodm9pZCAqKWlvLT5kbWFfaWQsCi0JCQkJZGV2LCBpc19wbGF5ID8gInR4IiA6ICJyeCIpOworCWlvLT5jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBzaGRtYV9jaGFuX2ZpbHRlciwKKwkJCQkgICAgICAgKHZvaWQgKilpby0+ZG1hX2lkKTsKKyNlbHNlCisJaW8tPmNoYW4gPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsKGRldiwgaXNfcGxheSA/ICJ0eCIgOiAicngiKTsKKyNlbmRpZgogCWlmIChpby0+Y2hhbikgewogCQlzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBjZmcgPSB7fTsKIAkJaW50IHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9yY2FyL01ha2VmaWxlIGIvc291bmQvc29jL3NoL3JjYXIvTWFrZWZpbGUKaW5kZXggOGIyNTg1MC4uYTg5ZGRmNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3JjYXIvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL3NoL3JjYXIvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1zbmQtc29jLXJjYXItb2Jqcwk6PSBjb3JlLm8gZ2VuLm8gZG1hLm8gYWRnLm8gc3NpLm8gc3JjLm8gY3R1Lm8gbWl4Lm8gZHZjLm8KK3NuZC1zb2MtcmNhci1vYmpzCTo9IGNvcmUubyBnZW4ubyBkbWEubyBhZGcubyBzc2kubyBzc2l1Lm8gc3JjLm8gY3R1Lm8gbWl4Lm8gZHZjLm8gY21kLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1JDQVIpCSs9IHNuZC1zb2MtcmNhci5vCiAKIHNuZC1zb2MtcnNyYy1jYXJkLW9ianMJOj0gcnNyYy1jYXJkLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9yY2FyL2FkZy5jIGIvc291bmQvc29jL3NoL3JjYXIvYWRnLmMKaW5kZXggMmE1YjNhMi4uNmQzZWYzNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3JjYXIvYWRnLmMKKysrIGIvc291bmQvc29jL3NoL3JjYXIvYWRnLmMKQEAgLTY4LDggKzY4LDggQEAKIAogc3RhdGljIHUzMiByc25kX2FkZ19zc2lfd3NfdGltaW5nX2dlbjIoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCiB7Ci0Jc3RydWN0IHJzbmRfbW9kICptb2QgPSByc25kX2lvX3RvX21vZF9zc2koaW8pOwotCWludCBpZCA9IHJzbmRfbW9kX2lkKG1vZCk7CisJc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kID0gcnNuZF9pb190b19tb2Rfc3NpKGlvKTsKKwlpbnQgaWQgPSByc25kX21vZF9pZChzc2lfbW9kKTsKIAlpbnQgd3MgPSBpZDsKIAogCWlmIChyc25kX3NzaV9pc19waW5fc2hhcmluZyhpbykpIHsKQEAgLTkwLDEzICs5MCwxMyBAQAogCXJldHVybiAoMHg2ICsgd3MpIDw8IDg7CiB9CiAKLWludCByc25kX2FkZ19zZXRfY21kX3RpbXNlbF9nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kLAoraW50IHJzbmRfYWRnX3NldF9jbWRfdGltc2VsX2dlbjIoc3RydWN0IHJzbmRfbW9kICpjbWRfbW9kLAogCQkJCSBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbykKIHsKLQlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihtb2QpOworCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KGNtZF9tb2QpOwogCXN0cnVjdCByc25kX2FkZyAqYWRnID0gcnNuZF9wcml2X3RvX2FkZyhwcml2KTsKIAlzdHJ1Y3QgcnNuZF9tb2QgKmFkZ19tb2QgPSByc25kX21vZF9nZXQoYWRnKTsKLQlpbnQgaWQgPSByc25kX21vZF9pZChtb2QpOworCWludCBpZCA9IHJzbmRfbW9kX2lkKGNtZF9tb2QpOwogCWludCBzaGlmdCA9IChpZCAlIDIpID8gMTYgOiAwOwogCXUzMiBtYXNrLCB2YWw7CiAKQEAgLTI0Miw2OCArMjQyLDYgQEAKIAlyZXR1cm4gcnNuZF9hZGdfc2V0X3NyY190aW1zZWxfZ2VuMihzcmNfbW9kLCBpbywgdmFsKTsKIH0KIAotaW50IHJzbmRfYWRnX3NldF9jb252ZXJ0X2Nsa19nZW4xKHN0cnVjdCByc25kX3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCQkgIHVuc2lnbmVkIGludCBzcmNfcmF0ZSwKLQkJCQkgIHVuc2lnbmVkIGludCBkc3RfcmF0ZSkKLXsKLQlzdHJ1Y3QgcnNuZF9hZGcgKmFkZyA9IHJzbmRfcHJpdl90b19hZGcocHJpdik7Ci0Jc3RydWN0IHJzbmRfbW9kICphZGdfbW9kID0gcnNuZF9tb2RfZ2V0KGFkZyk7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKLQlpbnQgaWR4LCBzZWwsIGRpdiwgc2hpZnQ7Ci0JdTMyIG1hc2ssIHZhbDsKLQlpbnQgaWQgPSByc25kX21vZF9pZChtb2QpOwotCXVuc2lnbmVkIGludCBzZWxfcmF0ZSBbXSA9IHsKLQkJY2xrX2dldF9yYXRlKGFkZy0+Y2xrW0NMS0FdKSwJLyogMDAwOiBDTEtBICovCi0JCWNsa19nZXRfcmF0ZShhZGctPmNsa1tDTEtCXSksCS8qIDAwMTogQ0xLQiAqLwotCQljbGtfZ2V0X3JhdGUoYWRnLT5jbGtbQ0xLQ10pLAkvKiAwMTA6IENMS0MgKi8KLQkJMCwJCQkJLyogMDExOiBNTEJDTEsgKG5vdCB1c2VkKSAqLwotCQlhZGctPnJiZ2FfcmF0ZV9mb3JfNDQxa2h6LAkvKiAxMDA6IFJCR0EgKi8KLQkJYWRnLT5yYmdiX3JhdGVfZm9yXzQ4a2h6LAkvKiAxMDE6IFJCR0IgKi8KLQl9OwotCi0JLyogZmluZCBkaXYgKD0gMS8xMjgsIDEvMjU2LCAxLzUxMiwgMS8xMDI0LCAxLzIwNDggKi8KLQlmb3IgKHNlbCA9IDA7IHNlbCA8IEFSUkFZX1NJWkUoc2VsX3JhdGUpOyBzZWwrKykgewotCQlmb3IgKGRpdiAgPSAxMjgsCWlkeCA9IDA7Ci0JCSAgICAgZGl2IDw9IDIwNDg7Ci0JCSAgICAgZGl2ICo9IDIsCQlpZHgrKykgewotCQkJaWYgKHNyY19yYXRlID09IHNlbF9yYXRlW3NlbF0gLyBkaXYpIHsKLQkJCQl2YWwgPSAoaWR4IDw8IDQpIHwgc2VsOwotCQkJCWdvdG8gZmluZF9yYXRlOwotCQkJfQotCQl9Ci0JfQotCWRldl9lcnIoZGV2LCAiY2FuJ3QgZmluZCBjb252ZXJ0IHNyYyBjbGtcbiIpOwotCXJldHVybiAtRUlOVkFMOwotCi1maW5kX3JhdGU6Ci0Jc2hpZnQJPSAoaWQgJSA0KSAqIDg7Ci0JbWFzawk9IDB4RkYgPDwgc2hpZnQ7Ci0JdmFsCT0gdmFsIDw8IHNoaWZ0OwotCi0JZGV2X2RiZyhkZXYsICJhZGcgY29udmVydCBzcmMgY2xrID0gJTAyeFxuIiwgdmFsKTsKLQotCXN3aXRjaCAoaWQgLyA0KSB7Ci0JY2FzZSAwOgotCQlyc25kX21vZF9ic2V0KGFkZ19tb2QsIEFVRElPX0NMS19TRUwzLCBtYXNrLCB2YWwpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXJzbmRfbW9kX2JzZXQoYWRnX21vZCwgQVVESU9fQ0xLX1NFTDQsIG1hc2ssIHZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcnNuZF9tb2RfYnNldChhZGdfbW9kLCBBVURJT19DTEtfU0VMNSwgbWFzaywgdmFsKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiBHZW4xIGRvZXNuJ3QgbmVlZCBkc3RfcmF0ZSBzZXR0aW5ncywKLQkgKiBzaW5jZSBpdCB1c2VzIFNTSSBXUyBwaW4uCi0JICogc2VlIGFsc28gcnNuZF9zcmNfc2V0X3JvdXRlX2lmX2dlbjEoKQotCSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHJzbmRfYWRnX3NldF9zc2lfY2xrKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCwgdTMyIHZhbCkKIHsKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihzc2lfbW9kKTsKQEAgLTMzNywyMCArMjc1LDE2IEBACiAJfQogfQogCi1pbnQgcnNuZF9hZGdfc3NpX2Nsa19zdG9wKHN0cnVjdCByc25kX21vZCAqbW9kKQoraW50IHJzbmRfYWRnX3NzaV9jbGtfc3RvcChzdHJ1Y3QgcnNuZF9tb2QgKnNzaV9tb2QpCiB7Ci0JLyoKLQkgKiAibW9kIiA9ICJzc2kiIGhlcmUuCi0JICogd2UgY2FuIGdldCAic3NpIGlkIiBmcm9tIG1vZAotCSAqLwotCXJzbmRfYWRnX3NldF9zc2lfY2xrKG1vZCwgMCk7CisJcnNuZF9hZGdfc2V0X3NzaV9jbGsoc3NpX21vZCwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHJzbmRfYWRnX3NzaV9jbGtfdHJ5X3N0YXJ0KHN0cnVjdCByc25kX21vZCAqbW9kLCB1bnNpZ25lZCBpbnQgcmF0ZSkKK2ludCByc25kX2FkZ19zc2lfY2xrX3RyeV9zdGFydChzdHJ1Y3QgcnNuZF9tb2QgKnNzaV9tb2QsIHVuc2lnbmVkIGludCByYXRlKQogewotCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KG1vZCk7CisJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYoc3NpX21vZCk7CiAJc3RydWN0IHJzbmRfYWRnICphZGcgPSByc25kX3ByaXZfdG9fYWRnKHByaXYpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJc3RydWN0IGNsayAqY2xrOwpAQCAtMzk0LDE0ICszMjgsMTAgQEAKIAogZm91bmRfY2xvY2s6CiAKLQkvKgotCSAqIFRoaXMgIm1vZCIgPSAic3NpIiBoZXJlLgotCSAqIHdlIGNhbiBnZXQgInNzaSBpZCIgZnJvbSBtb2QKLQkgKi8KLQlyc25kX2FkZ19zZXRfc3NpX2Nsayhtb2QsIGRhdGEpOworCXJzbmRfYWRnX3NldF9zc2lfY2xrKHNzaV9tb2QsIGRhdGEpOwogCiAJZGV2X2RiZyhkZXYsICJBREc6ICVzWyVkXSBzZWxlY3RzIDB4JXggZm9yICVkXG4iLAotCQlyc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksCisJCXJzbmRfbW9kX25hbWUoc3NpX21vZCksIHJzbmRfbW9kX2lkKHNzaV9tb2QpLAogCQlkYXRhLCByYXRlKTsKIAogCXJldHVybiAwOwpAQCAtNDE4LDE1ICszNDgsMjAgQEAKIAkJW0NMS0NdCT0gImNsa19jIiwKIAkJW0NMS0ldCT0gImNsa19pIiwKIAl9OwotCWludCBpOworCWludCBpLCByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ0xLTUFYOyBpKyspIHsKIAkJY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgY2xrX25hbWVbaV0pOwogCQlhZGctPmNsa1tpXSA9IElTX0VSUihjbGspID8gTlVMTCA6IGNsazsKIAl9CiAKLQlmb3JfZWFjaF9yc25kX2NsayhjbGssIGFkZywgaSkKKwlmb3JfZWFjaF9yc25kX2NsayhjbGssIGFkZywgaSkgeworCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwkJaWYgKHJldCA8IDApCisJCQlkZXZfd2FybihkZXYsICJjYW4ndCB1c2UgY2xrICVkXG4iLCBpKTsKKwogCQlkZXZfZGJnKGRldiwgImNsayAlZCA6ICVwIDogJWxkXG4iLCBpLCBjbGssIGNsa19nZXRfcmF0ZShjbGspKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJzbmRfYWRnX2dldF9jbGtvdXQoc3RydWN0IHJzbmRfcHJpdiAqcHJpdiwKQEAgLTQzNyw3ICszNzIsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKIAl1MzIgY2tyLCByYmd4LCByYmdhLCByYmdiOwotCXUzMiByYXRlLCByZXFfcmF0ZSwgZGl2OworCXUzMiByYXRlLCByZXFfcmF0ZSA9IDAsIGRpdjsKIAl1aW50MzJfdCBjb3VudCA9IDA7CiAJdW5zaWduZWQgbG9uZyByZXFfNDhrSHpfcmF0ZSwgcmVxXzQ0MWtIel9yYXRlOwogCWludCBpOwpAQCAtNTcyLDkgKzUwNyw3IEBACiAJCWNrciwgcmJnYSwgcmJnYik7CiB9CiAKLWludCByc25kX2FkZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQoraW50IHJzbmRfYWRnX3Byb2JlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IHJzbmRfYWRnICphZGc7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKQEAgLTYwMCwzICs1MzMsMTQgQEAKIAogCXJldHVybiAwOwogfQorCit2b2lkIHJzbmRfYWRnX3JlbW92ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQoreworCXN0cnVjdCByc25kX2FkZyAqYWRnID0gcnNuZF9wcml2X3RvX2FkZyhwcml2KTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IGk7CisKKwlmb3JfZWFjaF9yc25kX2NsayhjbGssIGFkZywgaSkgeworCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvcmNhci9jbWQuYyBiL3NvdW5kL3NvYy9zaC9yY2FyL2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMWYwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2gvcmNhci9jbWQuYwpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIFJlbmVzYXMgUi1DYXIgQ01EIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxrdW5pbm9yaS5tb3JpbW90by5neEByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSAicnNuZC5oIgorCitzdHJ1Y3QgcnNuZF9jbWQgeworCXN0cnVjdCByc25kX21vZCBtb2Q7Cit9OworCisjZGVmaW5lIENNRF9OQU1FICJjbWQiCisKKyNkZWZpbmUgcnNuZF9jbWRfbnIocHJpdikgKChwcml2KS0+Y21kX25yKQorI2RlZmluZSBmb3JfZWFjaF9yc25kX2NtZChwb3MsIHByaXYsIGkpCQkJCQlcCisJZm9yICgoaSkgPSAwOwkJCQkJCQlcCisJICAgICAoKGkpIDwgcnNuZF9jbWRfbnIocHJpdikpICYmCQkJCVwKKwkJICAgICAoKHBvcykgPSAoc3RydWN0IHJzbmRfY21kICopKHByaXYpLT5jbWQgKyBpKTsJXAorCSAgICAgaSsrKQorCitzdGF0aWMgaW50IHJzbmRfY21kX2luaXQoc3RydWN0IHJzbmRfbW9kICptb2QsCisJCQkgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgcnNuZF9tb2QgKmR2YyA9IHJzbmRfaW9fdG9fbW9kX2R2Yyhpbyk7CisJc3RydWN0IHJzbmRfbW9kICptaXggPSByc25kX2lvX3RvX21vZF9taXgoaW8pOworCXN0cnVjdCByc25kX21vZCAqc3JjID0gcnNuZF9pb190b19tb2Rfc3JjKGlvKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOworCXUzMiBkYXRhOworCisJaWYgKCFtaXggJiYgIWR2YykKKwkJcmV0dXJuIDA7CisKKwlpZiAobWl4KSB7CisJCXN0cnVjdCByc25kX2RhaSAqcmRhaTsKKwkJaW50IGk7CisJCXUzMiBwYXRoW10gPSB7CisJCQlbMF0gPSAwLAorCQkJWzFdID0gMSA8PCAwLAorCQkJWzJdID0gMCwKKwkJCVszXSA9IDAsCisJCQlbNF0gPSAwLAorCQkJWzVdID0gMSA8PCA4CisJCX07CisKKwkJLyoKKwkJICogaXQgaXMgYXNzdW1pbmcgdGhhdCBpbnRlZ3JhdGVyIGlzIHdlbGwgdW5kZXJzdGFuZGluZyBhYm91dAorCQkgKiBkYXRhIHBhdGguIEhlcmUgZG9lc24ndCBjaGVjayBpbXBvc3NpYmxlIGNvbm5lY3Rpb24sCisJCSAqIGxpa2Ugc3JjMiArIHNyYzUKKwkJICovCisJCWRhdGEgPSAwOworCQlmb3JfZWFjaF9yc25kX2RhaShyZGFpLCBwcml2LCBpKSB7CisJCQlpbyA9ICZyZGFpLT5wbGF5YmFjazsKKwkJCWlmIChtaXggPT0gcnNuZF9pb190b19tb2RfbWl4KGlvKSkKKwkJCQlkYXRhIHw9IHBhdGhbcnNuZF9tb2RfaWQoc3JjKV07CisKKwkJCWlvID0gJnJkYWktPmNhcHR1cmU7CisJCQlpZiAobWl4ID09IHJzbmRfaW9fdG9fbW9kX21peChpbykpCisJCQkJZGF0YSB8PSBwYXRoW3JzbmRfbW9kX2lkKHNyYyldOworCQl9CisKKwl9IGVsc2UgeworCQl1MzIgcGF0aFtdID0geworCQkJWzBdID0gMHgzMDAwMCwKKwkJCVsxXSA9IDB4MzAwMDEsCisJCQlbMl0gPSAweDQwMDAwLAorCQkJWzNdID0gMHgxMDAwMCwKKwkJCVs0XSA9IDB4MjAwMDAsCisJCQlbNV0gPSAweDQwMTAwCisJCX07CisKKwkJZGF0YSA9IHBhdGhbcnNuZF9tb2RfaWQoc3JjKV07CisJfQorCisJZGV2X2RiZyhkZXYsICJjdHUvbWl4IHBhdGggPSAweCUwOHgiLCBkYXRhKTsKKworCXJzbmRfbW9kX3dyaXRlKG1vZCwgQ01EX1JPVVRFX1NMQ1QsIGRhdGEpOworCXJzbmRfbW9kX3dyaXRlKG1vZCwgQ01EX0JVU0lGX0RBTElHTiwgcnNuZF9nZXRfZGFsaWduKG1vZCwgaW8pKTsKKworCXJzbmRfYWRnX3NldF9jbWRfdGltc2VsX2dlbjIobW9kLCBpbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByc25kX2NtZF9zdGFydChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKKwkJCSAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBDTURfQ1RSTCwgMHgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByc25kX2NtZF9zdG9wKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBDTURfQ1RSTCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByc25kX21vZF9vcHMgcnNuZF9jbWRfb3BzID0geworCS5uYW1lCT0gQ01EX05BTUUsCisJLmluaXQJPSByc25kX2NtZF9pbml0LAorCS5zdGFydAk9IHJzbmRfY21kX3N0YXJ0LAorCS5zdG9wCT0gcnNuZF9jbWRfc3RvcCwKK307CisKK2ludCByc25kX2NtZF9hdHRhY2goc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIGludCBpZCkKK3sKKwlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9pb190b19wcml2KGlvKTsKKwlzdHJ1Y3QgcnNuZF9tb2QgKm1vZCA9IHJzbmRfY21kX21vZF9nZXQocHJpdiwgaWQpOworCisJcmV0dXJuIHJzbmRfZGFpX2Nvbm5lY3QobW9kLCBpbywgbW9kLT50eXBlKTsKK30KKworc3RydWN0IHJzbmRfbW9kICpyc25kX2NtZF9tb2RfZ2V0KHN0cnVjdCByc25kX3ByaXYgKnByaXYsIGludCBpZCkKK3sKKwlpZiAoV0FSTl9PTihpZCA8IDAgfHwgaWQgPj0gcnNuZF9jbWRfbnIocHJpdikpKQorCQlpZCA9IDA7CisKKwlyZXR1cm4gcnNuZF9tb2RfZ2V0KChzdHJ1Y3QgcnNuZF9jbWQgKikocHJpdi0+Y21kKSArIGlkKTsKK30KKworaW50IHJzbmRfY21kX3Byb2JlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKKwlzdHJ1Y3QgcnNuZF9jbWQgKmNtZDsKKwlpbnQgaSwgbnIsIHJldDsKKworCS8qIFRoaXMgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBHZW4xIGF0IHRoaXMgcG9pbnQgKi8KKwlpZiAocnNuZF9pc19nZW4xKHByaXYpKQorCQlyZXR1cm4gMDsKKworCS8qIHNhbWUgbnVtYmVyIGFzIERWQyAqLworCW5yID0gcHJpdi0+ZHZjX25yOworCWlmICghbnIpCisJCXJldHVybiAwOworCisJY21kID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjbWQpICogbnIsIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmNtZF9ucgk9IG5yOworCXByaXYtPmNtZAk9IGNtZDsKKworCWZvcl9lYWNoX3JzbmRfY21kKGNtZCwgcHJpdiwgaSkgeworCQlyZXQgPSByc25kX21vZF9pbml0KHByaXYsIHJzbmRfbW9kX2dldChjbWQpLAorCQkJCSAgICAmcnNuZF9jbWRfb3BzLCBOVUxMLCBSU05EX01PRF9DTUQsIGkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByc25kX2NtZF9yZW1vdmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgcnNuZF9jbWQgKmNtZDsKKwlpbnQgaTsKKworCWZvcl9lYWNoX3JzbmRfY21kKGNtZCwgcHJpdiwgaSkgeworCQlyc25kX21vZF9xdWl0KHJzbmRfbW9kX2dldChjbWQpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvcmNhci9jb3JlLmMgYi9zb3VuZC9zb2Mvc2gvcmNhci9jb3JlLmMKaW5kZXggZGVlZDQ4ZS4uMDJiNGIwOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3JjYXIvY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zaC9yY2FyL2NvcmUuYwpAQCAtOTksMzQgKzk5LDE3IEBACiAjZGVmaW5lIFJTTkRfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAogI2RlZmluZSBSU05EX0ZNVFMgKFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUpCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhIHJzbmRfb2ZfZGF0YV9nZW4xID0gewotCS5mbGFncyA9IFJTTkRfR0VOMSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhIHJzbmRfb2ZfZGF0YV9nZW4yID0gewotCS5mbGFncyA9IFJTTkRfR0VOMiwKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJzbmRfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gInJlbmVzYXMscmNhcl9zb3VuZC1nZW4xIiwgLmRhdGEgPSAmcnNuZF9vZl9kYXRhX2dlbjEgfSwKLQl7IC5jb21wYXRpYmxlID0gInJlbmVzYXMscmNhcl9zb3VuZC1nZW4yIiwgLmRhdGEgPSAmcnNuZF9vZl9kYXRhX2dlbjIgfSwKLQl7IC5jb21wYXRpYmxlID0gInJlbmVzYXMscmNhcl9zb3VuZC1nZW4zIiwgLmRhdGEgPSAmcnNuZF9vZl9kYXRhX2dlbjIgfSwgLyogZ2VuMiBjb21wYXRpYmxlICovCisJeyAuY29tcGF0aWJsZSA9ICJyZW5lc2FzLHJjYXJfc291bmQtZ2VuMSIsIC5kYXRhID0gKHZvaWQgKilSU05EX0dFTjEgfSwKKwl7IC5jb21wYXRpYmxlID0gInJlbmVzYXMscmNhcl9zb3VuZC1nZW4yIiwgLmRhdGEgPSAodm9pZCAqKVJTTkRfR0VOMiB9LAorCXsgLmNvbXBhdGlibGUgPSAicmVuZXNhcyxyY2FyX3NvdW5kLWdlbjMiLCAuZGF0YSA9ICh2b2lkICopUlNORF9HRU4yIH0sIC8qIGdlbjIgY29tcGF0aWJsZSAqLwogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJzbmRfb2ZfbWF0Y2gpOwogCiAvKgotICoJcnNuZF9wbGF0Zm9ybSBmdW5jdGlvbnMKKyAqCXJzbmRfbW9kIGZ1bmN0aW9ucwogICovCi0jZGVmaW5lIHJzbmRfcGxhdGZvcm1fY2FsbChwcml2LCBkYWksIGZ1bmMsIHBhcmFtLi4uKQlcCi0JKCEocHJpdi0+aW5mby0+ZnVuYykgPyAwIDoJCVwKLQkgcHJpdi0+aW5mby0+ZnVuYyhwYXJhbSkpCi0KLSNkZWZpbmUgcnNuZF9pc19lbmFibGVfcGF0aChpbywgbmFtZSkgXAotCSgoaW8pLT5pbmZvID8gKGlvKS0+aW5mby0+bmFtZSA6IE5VTEwpCi0jZGVmaW5lIHJzbmRfaW5mb19pZChwcml2LCBpbywgbmFtZSkgXAotCSgoaW8pLT5pbmZvLT5uYW1lIC0gcHJpdi0+aW5mby0+bmFtZSMjX2luZm8pCi0KIHZvaWQgcnNuZF9tb2RfbWFrZV9zdXJlKHN0cnVjdCByc25kX21vZCAqbW9kLCBlbnVtIHJzbmRfbW9kX3R5cGUgdHlwZSkKIHsKIAlpZiAobW9kLT50eXBlICE9IHR5cGUpIHsKQEAgLTEzOCw5ICsxMjEsNiBAQAogCX0KIH0KIAotLyoKLSAqCXJzbmRfbW9kIGZ1bmN0aW9ucwotICovCiBjaGFyICpyc25kX21vZF9uYW1lKHN0cnVjdCByc25kX21vZCAqbW9kKQogewogCWlmICghbW9kIHx8ICFtb2QtPm9wcykKQEAgLTE5MiwxOSArMTcyLDE2IEBACiAJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKIAlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbzsKIAlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWk7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKLQlmb3JfZWFjaF9yc25kX2RhaShyZGFpLCBwcml2LCBqKSB7CisJZm9yX2VhY2hfcnNuZF9kYWkocmRhaSwgcHJpdiwgaSkgeworCQlpbyA9ICZyZGFpLT5wbGF5YmFjazsKKwkJaWYgKG1vZCA9PSBpby0+bW9kW21vZC0+dHlwZV0pCisJCQljYWxsYmFjayhtb2QsIGlvKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgUlNORF9NT0RfTUFYOyBpKyspIHsKLQkJCWlvID0gJnJkYWktPnBsYXliYWNrOwotCQkJaWYgKG1vZCA9PSBpby0+bW9kW2ldKQotCQkJCWNhbGxiYWNrKG1vZCwgaW8pOwotCi0JCQlpbyA9ICZyZGFpLT5jYXB0dXJlOwotCQkJaWYgKG1vZCA9PSBpby0+bW9kW2ldKQotCQkJCWNhbGxiYWNrKG1vZCwgaW8pOwotCQl9CisJCWlvID0gJnJkYWktPmNhcHR1cmU7CisJCWlmIChtb2QgPT0gaW8tPm1vZFttb2QtPnR5cGVdKQorCQkJY2FsbGJhY2sobW9kLCBpbyk7CiAJfQogfQogCkBAIC0yMTQsNiArMTkxLDQzIEBACiAJcmV0dXJuICEhaW8tPnN1YnN0cmVhbTsKIH0KIAordm9pZCByc25kX3NldF9zbG90KHN0cnVjdCByc25kX2RhaSAqcmRhaSwKKwkJICAgaW50IHNsb3RzLCBpbnQgbnVtKQoreworCXJkYWktPnNsb3RzCT0gc2xvdHM7CisJcmRhaS0+c2xvdHNfbnVtCT0gbnVtOworfQorCitpbnQgcnNuZF9nZXRfc2xvdChzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbykKK3sKKwlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkgPSByc25kX2lvX3RvX3JkYWkoaW8pOworCisJcmV0dXJuIHJkYWktPnNsb3RzOworfQorCitpbnQgcnNuZF9nZXRfc2xvdF9udW0oc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCit7CisJc3RydWN0IHJzbmRfZGFpICpyZGFpID0gcnNuZF9pb190b19yZGFpKGlvKTsKKworCXJldHVybiByZGFpLT5zbG90c19udW07Cit9CisKK2ludCByc25kX2dldF9zbG90X3dpZHRoKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSByc25kX2lvX3RvX3J1bnRpbWUoaW8pOworCWludCBjaGFuID0gcnVudGltZS0+Y2hhbm5lbHM7CisKKwkvKiBNdWx0aSBjaGFubmVsIE1vZGUgKi8KKwlpZiAocnNuZF9zc2lfbXVsdGlfc2xhdmVzKGlvKSkKKwkJY2hhbiAvPSByc25kX2dldF9zbG90X251bShpbyk7CisKKwkvKiBURE0gRXh0ZW5kIE1vZGUgbmVlZHMgOGNoICovCisJaWYgKGNoYW4gPT0gNikKKwkJY2hhbiA9IDg7CisKKwlyZXR1cm4gY2hhbjsKK30KKwogLyoKICAqCUFESU5SIGZ1bmN0aW9uCiAgKi8KQEAgLTIyMiwyMSArMjM2LDE3IEBACiAJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcnNuZF9pb190b19ydW50aW1lKGlvKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwotCXUzMiBhZGluciA9IHJ1bnRpbWUtPmNoYW5uZWxzOwogCiAJc3dpdGNoIChydW50aW1lLT5zYW1wbGVfYml0cykgewogCWNhc2UgMTY6Ci0JCWFkaW5yIHw9ICg4IDw8IDE2KTsKLQkJYnJlYWs7CisJCXJldHVybiA4IDw8IDE2OwogCWNhc2UgMzI6Ci0JCWFkaW5yIHw9ICgwIDw8IDE2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X3dhcm4oZGV2LCAibm90IHN1cHBvcnRlZCBzYW1wbGUgYml0c1xuIik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gMCA8PCAxNjsKIAl9CiAKLQlyZXR1cm4gYWRpbnI7CisJZGV2X3dhcm4oZGV2LCAibm90IHN1cHBvcnRlZCBzYW1wbGUgYml0c1xuIik7CisKKwlyZXR1cm4gMDsKIH0KIAogdTMyIHJzbmRfZ2V0X2FkaW5yX2NoYW4oc3RydWN0IHJzbmRfbW9kICptb2QsIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQpAQCAtMjY3LDEzICsyNzcsMjIgQEAKICAqLwogdTMyIHJzbmRfZ2V0X2RhbGlnbihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCiB7Ci0Jc3RydWN0IHJzbmRfbW9kICpzcmMgPSByc25kX2lvX3RvX21vZF9zcmMoaW8pOwogCXN0cnVjdCByc25kX21vZCAqc3NpID0gcnNuZF9pb190b19tb2Rfc3NpKGlvKTsKLQlzdHJ1Y3QgcnNuZF9tb2QgKnRhcmdldCA9IHNyYyA/IHNyYyA6IHNzaTsKKwlzdHJ1Y3QgcnNuZF9tb2QgKnRhcmdldDsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcnNuZF9pb190b19ydW50aW1lKGlvKTsKIAl1MzIgdmFsID0gMHg3NjU0MzIxMDsKIAl1MzIgbWFzayA9IH4wOwogCisJaWYgKHJzbmRfaW9faXNfcGxheShpbykpIHsKKwkJc3RydWN0IHJzbmRfbW9kICpzcmMgPSByc25kX2lvX3RvX21vZF9zcmMoaW8pOworCisJCXRhcmdldCA9IHNyYyA/IHNyYyA6IHNzaTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcnNuZF9tb2QgKmNtZCA9IHJzbmRfaW9fdG9fbW9kX2NtZChpbyk7CisKKwkJdGFyZ2V0ID0gY21kID8gY21kIDogc3NpOworCX0KKwogCW1hc2sgPDw9IHJ1bnRpbWUtPmNoYW5uZWxzICogNDsKIAl2YWwgPSB2YWwgJiBtYXNrOwogCkBAIC0zMDAsMjAgKzMxOSwyMiBAQAogLyoKICAqCXJzbmRfZGFpIGZ1bmN0aW9ucwogICovCi0jZGVmaW5lIHJzbmRfbW9kX2NhbGwobW9kLCBpbywgZnVuYywgcGFyYW0uLi4pCQkJXAorI2RlZmluZSByc25kX21vZF9jYWxsKGlkeCwgaW8sIGZ1bmMsIHBhcmFtLi4uKQkJCVwKICh7CQkJCQkJCQlcCiAJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsJCVwKKwlzdHJ1Y3QgcnNuZF9tb2QgKm1vZCA9IChpbyktPm1vZFtpZHhdOwkJCVwKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwkJXAorCXUzMiAqc3RhdHVzID0gKGlvKS0+bW9kX3N0YXR1cyArIGlkeDsJCQlcCiAJdTMyIG1hc2sgPSAweEYgPDwgX19yc25kX21vZF9zaGlmdF8jI2Z1bmM7CQkJXAotCXU4IHZhbCAgPSAobW9kLT5zdGF0dXMgPj4gX19yc25kX21vZF9zaGlmdF8jI2Z1bmMpICYgMHhGOwlcCisJdTggdmFsICA9ICgqc3RhdHVzID4+IF9fcnNuZF9tb2Rfc2hpZnRfIyNmdW5jKSAmIDB4RjsJCVwKIAl1OCBhZGQgID0gKCh2YWwgKyBfX3JzbmRfbW9kX2FkZF8jI2Z1bmMpICYgMHhGKTsJCVwKIAlpbnQgcmV0ID0gMDsJCQkJCQkJXAogCWludCBjYWxsID0gKHZhbCA9PSBfX3JzbmRfbW9kX2NhbGxfIyNmdW5jKSAmJiAobW9kKS0+b3BzLT5mdW5jOwlcCi0JbW9kLT5zdGF0dXMgPSAobW9kLT5zdGF0dXMgJiB+bWFzaykgKwkJCQlcCisJKnN0YXR1cyA9ICgqc3RhdHVzICYgfm1hc2spICsJCQkJCVwKIAkJKGFkZCA8PCBfX3JzbmRfbW9kX3NoaWZ0XyMjZnVuYyk7CQkJXAogCWRldl9kYmcoZGV2LCAiJXNbJWRdXHQweCUwOHggJXNcbiIsCQkJCVwKIAkJcnNuZF9tb2RfbmFtZShtb2QpLCByc25kX21vZF9pZChtb2QpLAkJCVwKLQkJbW9kLT5zdGF0dXMsIGNhbGwgPyAjZnVuYyA6ICIiKTsJCQlcCisJCSpzdGF0dXMsIGNhbGwgPyAjZnVuYyA6ICIiKTsJCQkJXAogCWlmIChjYWxsKQkJCQkJCQlcCiAJCXJldCA9IChtb2QpLT5vcHMtPmZ1bmMobW9kLCBpbywgcGFyYW0pOwkJCVwKIAlyZXQ7CQkJCQkJCQlcCkBAIC0zMjcsMTMgKzM0OCwxNCBAQAogCQltb2QgPSAoaW8pLT5tb2RbaV07CQkJCVwKIAkJaWYgKCFtb2QpCQkJCQlcCiAJCQljb250aW51ZTsJCQkJXAotCQlyZXQgfD0gcnNuZF9tb2RfY2FsbChtb2QsIGlvLCBmbiwgcGFyYW0pOwlcCisJCXJldCB8PSByc25kX21vZF9jYWxsKGksIGlvLCBmbiwgcGFyYW0pOwkJXAogCX0JCQkJCQkJXAogCXJldDsJCQkJCQkJXAogfSkKIAotc3RhdGljIGludCByc25kX2RhaV9jb25uZWN0KHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQoraW50IHJzbmRfZGFpX2Nvbm5lY3Qoc3RydWN0IHJzbmRfbW9kICptb2QsCisJCSAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCSAgICAgZW51bSByc25kX21vZF90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHJzbmRfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0zNDEsMTAgKzM2MywxMyBAQAogCWlmICghbW9kKQogCQlyZXR1cm4gLUVJTzsKIAorCWlmIChpby0+bW9kW3R5cGVdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXByaXYgPSByc25kX21vZF90b19wcml2KG1vZCk7CiAJZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKIAotCWlvLT5tb2RbbW9kLT50eXBlXSA9IG1vZDsKKwlpby0+bW9kW3R5cGVdID0gbW9kOwogCiAJZGV2X2RiZyhkZXYsICIlc1slZF0gaXMgY29ubmVjdGVkIHRvIGlvICglcylcbiIsCiAJCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSwKQEAgLTM1NCw5ICszNzksMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgcnNuZF9kYWlfZGlzY29ubmVjdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCQlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbykKKwkJCQlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCQllbnVtIHJzbmRfbW9kX3R5cGUgdHlwZSkKIHsKLQlpby0+bW9kW21vZC0+dHlwZV0gPSBOVUxMOworCWlvLT5tb2RbdHlwZV0gPSBOVUxMOwogfQogCiBzdHJ1Y3QgcnNuZF9kYWkgKnJzbmRfcmRhaV9nZXQoc3RydWN0IHJzbmRfcHJpdiAqcHJpdiwgaW50IGlkKQpAQCAtNDY5LDcgKzQ5NSw2IEBACiAJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfZGFpX3RvX3ByaXYoZGFpKTsKIAlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkgPSByc25kX2RhaV90b19yZGFpKGRhaSk7CiAJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8gPSByc25kX3JkYWlfdG9faW8ocmRhaSwgc3Vic3RyZWFtKTsKLQlpbnQgc3NpX2lkID0gcnNuZF9tb2RfaWQocnNuZF9pb190b19tb2Rfc3NpKGlvKSk7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC00NzksMTAgKzUwNCw2IEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAkJcnNuZF9kYWlfc3RyZWFtX2luaXQoaW8sIHN1YnN0cmVhbSk7CiAKLQkJcmV0ID0gcnNuZF9wbGF0Zm9ybV9jYWxsKHByaXYsIGRhaSwgc3RhcnQsIHNzaV9pZCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBkYWlfdHJpZ2dlcl9lbmQ7Ci0KIAkJcmV0ID0gcnNuZF9kYWlfY2FsbChpbml0LCBpbywgcHJpdik7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBkYWlfdHJpZ2dlcl9lbmQ7CkBAIC00OTYsOCArNTE3LDYgQEAKIAogCQlyZXQgfD0gcnNuZF9kYWlfY2FsbChxdWl0LCBpbywgcHJpdik7CiAKLQkJcmV0IHw9IHJzbmRfcGxhdGZvcm1fY2FsbChwcml2LCBkYWksIHN0b3AsIHNzaV9pZCk7Ci0KIAkJcnNuZF9kYWlfc3RyZWFtX3F1aXQoaW8pOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNTY3LDMzMiArNTg2LDE1NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJzbmRfc29jX3NldF9kYWlfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkJICAgICB1MzIgdHhfbWFzaywgdTMyIHJ4X21hc2ssCisJCQkJICAgICBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQoreworCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX2RhaV90b19wcml2KGRhaSk7CisJc3RydWN0IHJzbmRfZGFpICpyZGFpID0gcnNuZF9kYWlfdG9fcmRhaShkYWkpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CisKKwlzd2l0Y2ggKHNsb3RzKSB7CisJY2FzZSA2OgorCQkvKiBURE0gRXh0ZW5kIE1vZGUgKi8KKwkJcnNuZF9zZXRfc2xvdChyZGFpLCBzbG90cywgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgVERNIHNsb3RzICglZClcbiIsIHNsb3RzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHJzbmRfc29jX2RhaV9vcHMgPSB7CiAJLnRyaWdnZXIJPSByc25kX3NvY19kYWlfdHJpZ2dlciwKIAkuc2V0X2ZtdAk9IHJzbmRfc29jX2RhaV9zZXRfZm10LAorCS5zZXRfdGRtX3Nsb3QJPSByc25kX3NvY19zZXRfZGFpX3RkbV9zbG90LAogfTsKIAotI2RlZmluZSByc25kX3BhdGhfYWRkKHByaXYsIGlvLCB0eXBlKQkJCQlcCi0oewkJCQkJCQkJXAotCXN0cnVjdCByc25kX21vZCAqbW9kOwkJCQkJXAotCWludCByZXQgPSAwOwkJCQkJCVwKLQlpbnQgaWQgPSAtMTsJCQkJCQlcCi0JCQkJCQkJCVwKLQlpZiAocnNuZF9pc19lbmFibGVfcGF0aChpbywgdHlwZSkpIHsJCQlcCi0JCWlkID0gcnNuZF9pbmZvX2lkKHByaXYsIGlvLCB0eXBlKTsJCVwKLQkJaWYgKGlkID49IDApIHsJCQkJCVwKLQkJCW1vZCA9IHJzbmRfIyN0eXBlIyNfbW9kX2dldChwcml2LCBpZCk7CVwKLQkJCXJldCA9IHJzbmRfZGFpX2Nvbm5lY3QobW9kLCBpbyk7CVwKLQkJfQkJCQkJCVwKLQl9CQkJCQkJCVwKLQlyZXQ7CQkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgcnNuZF9wYXRoX3JlbW92ZShwcml2LCBpbywgdHlwZSkJCQlcCi17CQkJCQkJCQlcCi0Jc3RydWN0IHJzbmRfbW9kICptb2Q7CQkJCQlcCi0JaW50IGlkID0gLTE7CQkJCQkJXAotCQkJCQkJCQlcCi0JaWYgKHJzbmRfaXNfZW5hYmxlX3BhdGgoaW8sIHR5cGUpKSB7CQkJXAotCQlpZCA9IHJzbmRfaW5mb19pZChwcml2LCBpbywgdHlwZSk7CQlcCi0JCWlmIChpZCA+PSAwKSB7CQkJCQlcCi0JCQltb2QgPSByc25kXyMjdHlwZSMjX21vZF9nZXQocHJpdiwgaWQpOwlcCi0JCQlyc25kX2RhaV9kaXNjb25uZWN0KG1vZCwgaW8pOwkJXAotCQl9CQkJCQkJXAotCX0JCQkJCQkJXAotfQotCi12b2lkIHJzbmRfcGF0aF9wYXJzZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LAotCQkgICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQordm9pZCByc25kX3BhcnNlX2Nvbm5lY3RfY29tbW9uKHN0cnVjdCByc25kX2RhaSAqcmRhaSwKKwkJc3RydWN0IHJzbmRfbW9kKiAoKm1vZF9nZXQpKHN0cnVjdCByc25kX3ByaXYgKnByaXYsIGludCBpZCksCisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJc3RydWN0IGRldmljZV9ub2RlICpwbGF5YmFjaywKKwkJc3RydWN0IGRldmljZV9ub2RlICpjYXB0dXJlKQogewotCXN0cnVjdCByc25kX21vZCAqZHZjID0gcnNuZF9pb190b19tb2RfZHZjKGlvKTsKLQlzdHJ1Y3QgcnNuZF9tb2QgKm1peCA9IHJzbmRfaW9fdG9fbW9kX21peChpbyk7Ci0Jc3RydWN0IHJzbmRfbW9kICpzcmMgPSByc25kX2lvX3RvX21vZF9zcmMoaW8pOwotCXN0cnVjdCByc25kX21vZCAqY21kOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7Ci0JdTMyIGRhdGE7CisJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfcmRhaV90b19wcml2KHJkYWkpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IHJzbmRfbW9kICptb2Q7CisJaW50IGk7CiAKLQkvKiBHZW4xIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLQlpZiAocnNuZF9pc19nZW4xKHByaXYpKQorCWlmICghbm9kZSkKIAkJcmV0dXJuOwogCi0JaWYgKCFtaXggJiYgIWR2YykKLQkJcmV0dXJuOwotCi0JaWYgKG1peCkgewotCQlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWk7Ci0JCWludCBpOwotCQl1MzIgcGF0aFtdID0gewotCQkJWzBdID0gMCwKLQkJCVsxXSA9IDEgPDwgMCwKLQkJCVsyXSA9IDAsCi0JCQlbM10gPSAwLAotCQkJWzRdID0gMCwKLQkJCVs1XSA9IDEgPDwgOAotCQl9OwotCi0JCS8qCi0JCSAqIGl0IGlzIGFzc3VtaW5nIHRoYXQgaW50ZWdyYXRlciBpcyB3ZWxsIHVuZGVyc3RhbmRpbmcgYWJvdXQKLQkJICogZGF0YSBwYXRoLiBIZXJlIGRvZXNuJ3QgY2hlY2sgaW1wb3NzaWJsZSBjb25uZWN0aW9uLAotCQkgKiBsaWtlIHNyYzIgKyBzcmM1Ci0JCSAqLwotCQlkYXRhID0gMDsKLQkJZm9yX2VhY2hfcnNuZF9kYWkocmRhaSwgcHJpdiwgaSkgewotCQkJaW8gPSAmcmRhaS0+cGxheWJhY2s7Ci0JCQlpZiAobWl4ID09IHJzbmRfaW9fdG9fbW9kX21peChpbykpCi0JCQkJZGF0YSB8PSBwYXRoW3JzbmRfbW9kX2lkKHNyYyldOwotCi0JCQlpbyA9ICZyZGFpLT5jYXB0dXJlOwotCQkJaWYgKG1peCA9PSByc25kX2lvX3RvX21vZF9taXgoaW8pKQotCQkJCWRhdGEgfD0gcGF0aFtyc25kX21vZF9pZChzcmMpXTsKLQkJfQotCi0JCS8qCi0JCSAqIFdlIGNhbid0IHVzZSBjdHUgPSByc25kX2lvX2N0dSgpIGhlcmUuCi0JCSAqIFNpbmNlLCBJRCBvZiBkdmMvbWl4IGFyZSAwIG9yIDEgKD0gc2FtZSBhcyBDTUQgbnVtYmVyKQotCQkgKiBidXQgY3R1IElEcyBhcmUgMCAtIDcgKD0gQ1RVMDAgLSBDVFUxMykKLQkJICovCi0JCWNtZCA9IG1peDsKLQl9IGVsc2UgewotCQl1MzIgcGF0aFtdID0gewotCQkJWzBdID0gMHgzMDAwMCwKLQkJCVsxXSA9IDB4MzAwMDEsCi0JCQlbMl0gPSAweDQwMDAwLAotCQkJWzNdID0gMHgxMDAwMCwKLQkJCVs0XSA9IDB4MjAwMDAsCi0JCQlbNV0gPSAweDQwMTAwCi0JCX07Ci0KLQkJZGF0YSA9IHBhdGhbcnNuZF9tb2RfaWQoc3JjKV07Ci0KLQkJY21kID0gZHZjOworCWkgPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgbnApIHsKKwkJbW9kID0gbW9kX2dldChwcml2LCBpKTsKKwkJaWYgKG5wID09IHBsYXliYWNrKQorCQkJcnNuZF9kYWlfY29ubmVjdChtb2QsICZyZGFpLT5wbGF5YmFjaywgbW9kLT50eXBlKTsKKwkJaWYgKG5wID09IGNhcHR1cmUpCisJCQlyc25kX2RhaV9jb25uZWN0KG1vZCwgJnJkYWktPmNhcHR1cmUsIG1vZC0+dHlwZSk7CisJCWkrKzsKIAl9CiAKLQlkZXZfZGJnKGRldiwgImN0dS9taXggcGF0aCA9IDB4JTA4eCIsIGRhdGEpOwotCi0JcnNuZF9tb2Rfd3JpdGUoY21kLCBDTURfUk9VVEVfU0xDVCwgZGF0YSk7Ci0KLQlyc25kX21vZF93cml0ZShjbWQsIENNRF9DVFJMLCAweDEwKTsKKwlvZl9ub2RlX3B1dChub2RlKTsKIH0KIAotc3RhdGljIGludCByc25kX3BhdGhfaW5pdChzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LAotCQkJICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCi0JCQkgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQorc3RhdGljIGludCByc25kX2RhaV9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFpX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpkYWlfbnA7CisJc3RydWN0IGRldmljZV9ub2RlICpwbGF5YmFjaywgKmNhcHR1cmU7CisJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW9fcGxheWJhY2s7CisJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW9fY2FwdHVyZTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpyZHJ2LCAqZHJ2OworCXN0cnVjdCByc25kX2RhaSAqcmRhaTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOworCWludCBuciwgZGFpX2ksIGlvX2k7CiAJaW50IHJldDsKIAotCS8qCi0JICogR2VuMSBpcyBjcmVhdGVkIGJ5IFNSVS9TU0ksIGFuZCB0aGlzIFNSVSBpcyBiYXNlIG1vZHVsZSBvZgotCSAqIEdlbjIncyBTQ1UvU1NJVS9TU0kuIChHZW4yIFNDVS9TU0lVIGNhbWUgZnJvbSBTUlUpCi0JICoKLQkgKiBFYXN5IGltYWdlIGlzLi4KLQkgKglHZW4xIFNSVSA9IEdlbjIgU0NVICsgU1NJVSArIGV0YwotCSAqCi0JICogR2VuMiBTQ1UgcGF0aCBpcyB2ZXJ5IGZsZXhpYmxlLCBidXQsIEdlbjEgU1JVIChTQ1UgcGFydHMpIGlzCi0JICogdXNpbmcgZml4ZWQgcGF0aC4KLQkgKi8KLQotCS8qIFNTSSAqLwotCXJldCA9IHJzbmRfcGF0aF9hZGQocHJpdiwgaW8sIHNzaSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBTUkMgKi8KLQlyZXQgPSByc25kX3BhdGhfYWRkKHByaXYsIGlvLCBzcmMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogQ1RVICovCi0JcmV0ID0gcnNuZF9wYXRoX2FkZChwcml2LCBpbywgY3R1KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIE1JWCAqLwotCXJldCA9IHJzbmRfcGF0aF9hZGQocHJpdiwgaW8sIG1peCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBEVkMgKi8KLQlyZXQgPSByc25kX3BhdGhfYWRkKHByaXYsIGlvLCBkdmMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgcnNuZF9vZl9wYXJzZV9kYWkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCByc25kX29mX2RhdGEgKm9mX2RhdGEsCi0JCQkgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFpX25vZGUsCSpkYWlfbnA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpzc2lfbm9kZSwJKnNzaV9ucDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNyY19ub2RlLAkqc3JjX25wOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3R1X25vZGUsCSpjdHVfbnA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICptaXhfbm9kZSwJKm1peF9ucDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmR2Y19ub2RlLAkqZHZjX25wOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGxheWJhY2ssICpjYXB0dXJlOwotCXN0cnVjdCByc25kX2RhaV9wbGF0Zm9ybV9pbmZvICpkYWlfaW5mbzsKLQlzdHJ1Y3QgcmNhcl9zbmRfaW5mbyAqaW5mbyA9IHJzbmRfcHJpdl90b19pbmZvKHByaXYpOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0JaW50IG5yLCBpOwotCWludCBkYWlfaSwgc3NpX2ksIHNyY19pLCBjdHVfaSwgbWl4X2ksIGR2Y19pOwotCi0JaWYgKCFvZl9kYXRhKQotCQlyZXR1cm47Ci0KLQlkYWlfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi0+b2Zfbm9kZSwgInJjYXJfc291bmQsZGFpIik7Ci0JaWYgKCFkYWlfbm9kZSkKLQkJcmV0dXJuOwotCisJZGFpX25vZGUgPSByc25kX2RhaV9vZl9ub2RlKHByaXYpOwogCW5yID0gb2ZfZ2V0X2NoaWxkX2NvdW50KGRhaV9ub2RlKTsKLQlpZiAoIW5yKQotCQlyZXR1cm47Ci0KLQlkYWlfaW5mbyA9IGRldm1fa3phbGxvYyhkZXYsCi0JCQkJc2l6ZW9mKHN0cnVjdCByc25kX2RhaV9wbGF0Zm9ybV9pbmZvKSAqIG5yLAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghZGFpX2luZm8pIHsKLQkJZGV2X2VycihkZXYsICJkYWkgaW5mbyBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJcmV0dXJuOworCWlmICghbnIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byByc25kX2RhaV9wcm9iZV9kb25lOwogCX0KIAotCWluZm8tPmRhaV9pbmZvX25yCT0gbnI7Ci0JaW5mby0+ZGFpX2luZm8JCT0gZGFpX2luZm87CisJcmRydiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcmRydikgKiBuciwgR0ZQX0tFUk5FTCk7CisJcmRhaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcmRhaSkgKiBuciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZHJ2IHx8ICFyZGFpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcnNuZF9kYWlfcHJvYmVfZG9uZTsKKwl9CiAKLQlzc2lfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi0+b2Zfbm9kZSwgInJjYXJfc291bmQsc3NpIik7Ci0Jc3JjX25vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtPm9mX25vZGUsICJyY2FyX3NvdW5kLHNyYyIpOwotCWN0dV9ub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LT5vZl9ub2RlLCAicmNhcl9zb3VuZCxjdHUiKTsKLQltaXhfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi0+b2Zfbm9kZSwgInJjYXJfc291bmQsbWl4Iik7Ci0JZHZjX25vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtPm9mX25vZGUsICJyY2FyX3NvdW5kLGR2YyIpOwotCi0jZGVmaW5lIG1vZF9wYXJzZShuYW1lKQkJCQkJCQlcCi1pZiAobmFtZSMjX25vZGUpIHsJCQkJCQkJXAotCXN0cnVjdCByc25kXyMjbmFtZSMjX3BsYXRmb3JtX2luZm8gKm5hbWUjI19pbmZvOwkJXAotCQkJCQkJCQkJXAotCW5hbWUjI19pID0gMDsJCQkJCQkJXAotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobmFtZSMjX25vZGUsIG5hbWUjI19ucCkgewkJXAotCQluYW1lIyNfaW5mbyA9IGluZm8tPm5hbWUjI19pbmZvICsgbmFtZSMjX2k7CQlcCi0JCQkJCQkJCQlcCi0JCWlmIChuYW1lIyNfbnAgPT0gcGxheWJhY2spCQkJCVwKLQkJCWRhaV9pbmZvLT5wbGF5YmFjay5uYW1lID0gbmFtZSMjX2luZm87CQlcCi0JCWlmIChuYW1lIyNfbnAgPT0gY2FwdHVyZSkJCQkJXAotCQkJZGFpX2luZm8tPmNhcHR1cmUubmFtZSA9IG5hbWUjI19pbmZvOwkJXAotCQkJCQkJCQkJXAotCQluYW1lIyNfaSsrOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi19CisJcHJpdi0+cmRhaV9ucgk9IG5yOworCXByaXYtPmRhaWRydgk9IHJkcnY7CisJcHJpdi0+cmRhaQk9IHJkYWk7CiAKIAkvKgogCSAqIHBhcnNlIGFsbCBkYWkKIAkgKi8KIAlkYWlfaSA9IDA7CiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkYWlfbm9kZSwgZGFpX25wKSB7Ci0JCWRhaV9pbmZvID0gaW5mby0+ZGFpX2luZm8gKyBkYWlfaTsKKwkJcmRhaQkJPSByc25kX3JkYWlfZ2V0KHByaXYsIGRhaV9pKTsKKwkJZHJ2CQk9IHJkcnYgKyBkYWlfaTsKKwkJaW9fcGxheWJhY2sJPSAmcmRhaS0+cGxheWJhY2s7CisJCWlvX2NhcHR1cmUJPSAmcmRhaS0+Y2FwdHVyZTsKIAotCQlmb3IgKGkgPSAwOzsgaSsrKSB7CisJCXNucHJpbnRmKHJkYWktPm5hbWUsIFJTTkRfREFJX05BTUVfU0laRSwgInJzbmQtZGFpLiVkIiwgZGFpX2kpOwogCi0JCQlwbGF5YmFjayA9IG9mX3BhcnNlX3BoYW5kbGUoZGFpX25wLCAicGxheWJhY2siLCBpKTsKLQkJCWNhcHR1cmUgID0gb2ZfcGFyc2VfcGhhbmRsZShkYWlfbnAsICJjYXB0dXJlIiwgaSk7CisJCXJkYWktPnByaXYJPSBwcml2OworCQlkcnYtPm5hbWUJPSByZGFpLT5uYW1lOworCQlkcnYtPm9wcwk9ICZyc25kX3NvY19kYWlfb3BzOworCisJCXNucHJpbnRmKHJkYWktPnBsYXliYWNrLm5hbWUsIFJTTkRfREFJX05BTUVfU0laRSwKKwkJCSAiREFJJWQgUGxheWJhY2siLCBkYWlfaSk7CisJCWRydi0+cGxheWJhY2sucmF0ZXMJCT0gUlNORF9SQVRFUzsKKwkJZHJ2LT5wbGF5YmFjay5mb3JtYXRzCQk9IFJTTkRfRk1UUzsKKwkJZHJ2LT5wbGF5YmFjay5jaGFubmVsc19taW4JPSAyOworCQlkcnYtPnBsYXliYWNrLmNoYW5uZWxzX21heAk9IDY7CisJCWRydi0+cGxheWJhY2suc3RyZWFtX25hbWUJPSByZGFpLT5wbGF5YmFjay5uYW1lOworCisJCXNucHJpbnRmKHJkYWktPmNhcHR1cmUubmFtZSwgUlNORF9EQUlfTkFNRV9TSVpFLAorCQkJICJEQUklZCBDYXB0dXJlIiwgZGFpX2kpOworCQlkcnYtPmNhcHR1cmUucmF0ZXMJCT0gUlNORF9SQVRFUzsKKwkJZHJ2LT5jYXB0dXJlLmZvcm1hdHMJCT0gUlNORF9GTVRTOworCQlkcnYtPmNhcHR1cmUuY2hhbm5lbHNfbWluCT0gMjsKKwkJZHJ2LT5jYXB0dXJlLmNoYW5uZWxzX21heAk9IDY7CisJCWRydi0+Y2FwdHVyZS5zdHJlYW1fbmFtZQk9IHJkYWktPmNhcHR1cmUubmFtZTsKKworCQlyZGFpLT5wbGF5YmFjay5yZGFpCQk9IHJkYWk7CisJCXJkYWktPmNhcHR1cmUucmRhaQkJPSByZGFpOworCQlyc25kX3NldF9zbG90KHJkYWksIDIsIDEpOyAvKiBkZWZhdWx0ICovCisKKwkJZm9yIChpb19pID0gMDs7IGlvX2krKykgeworCQkJcGxheWJhY2sgPSBvZl9wYXJzZV9waGFuZGxlKGRhaV9ucCwgInBsYXliYWNrIiwgaW9faSk7CisJCQljYXB0dXJlICA9IG9mX3BhcnNlX3BoYW5kbGUoZGFpX25wLCAiY2FwdHVyZSIsIGlvX2kpOwogCiAJCQlpZiAoIXBsYXliYWNrICYmICFjYXB0dXJlKQogCQkJCWJyZWFrOwogCi0JCQltb2RfcGFyc2Uoc3NpKTsKLQkJCW1vZF9wYXJzZShzcmMpOwotCQkJbW9kX3BhcnNlKGN0dSk7Ci0JCQltb2RfcGFyc2UobWl4KTsKLQkJCW1vZF9wYXJzZShkdmMpOworCQkJcnNuZF9wYXJzZV9jb25uZWN0X3NzaShyZGFpLCBwbGF5YmFjaywgY2FwdHVyZSk7CisJCQlyc25kX3BhcnNlX2Nvbm5lY3Rfc3JjKHJkYWksIHBsYXliYWNrLCBjYXB0dXJlKTsKKwkJCXJzbmRfcGFyc2VfY29ubmVjdF9jdHUocmRhaSwgcGxheWJhY2ssIGNhcHR1cmUpOworCQkJcnNuZF9wYXJzZV9jb25uZWN0X21peChyZGFpLCBwbGF5YmFjaywgY2FwdHVyZSk7CisJCQlyc25kX3BhcnNlX2Nvbm5lY3RfZHZjKHJkYWksIHBsYXliYWNrLCBjYXB0dXJlKTsKIAogCQkJb2Zfbm9kZV9wdXQocGxheWJhY2spOwogCQkJb2Zfbm9kZV9wdXQoY2FwdHVyZSk7CiAJCX0KIAogCQlkYWlfaSsrOwotCX0KLX0KIAotc3RhdGljIGludCByc25kX2RhaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkJICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCXN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgKmRydjsKLQlzdHJ1Y3QgcmNhcl9zbmRfaW5mbyAqaW5mbyA9IHJzbmRfcHJpdl90b19pbmZvKHByaXYpOwotCXN0cnVjdCByc25kX2RhaSAqcmRhaTsKLQlzdHJ1Y3QgcnNuZF9zc2lfcGxhdGZvcm1faW5mbyAqcG1vZCwgKmNtb2Q7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKLQlpbnQgZGFpX25yOwotCWludCBpOwotCi0JcnNuZF9vZl9wYXJzZV9kYWkocGRldiwgb2ZfZGF0YSwgcHJpdik7Ci0KLQlkYWlfbnIgPSBpbmZvLT5kYWlfaW5mb19ucjsKLQlpZiAoIWRhaV9ucikgewotCQlkZXZfZXJyKGRldiwgIm5vIGRhaVxuIik7Ci0JCXJldHVybiAtRUlPOworCQlkZXZfZGJnKGRldiwgIiVzICglcy8lcylcbiIsIHJkYWktPm5hbWUsCisJCQlyc25kX2lvX3RvX21vZF9zc2koaW9fcGxheWJhY2spID8gInBsYXkiICAgIDogIiAtLSAiLAorCQkJcnNuZF9pb190b19tb2Rfc3NpKGlvX2NhcHR1cmUpID8gImNhcHR1cmUiIDogIiAgLS0gICAiKTsKIAl9CiAKLQlkcnYgID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkcnYpICAqIGRhaV9uciwgR0ZQX0tFUk5FTCk7Ci0JcmRhaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcmRhaSkgKiBkYWlfbnIsIEdGUF9LRVJORUwpOwotCWlmICghZHJ2IHx8ICFyZGFpKSB7Ci0JCWRldl9lcnIoZGV2LCAiZGFpIGFsbG9jYXRlIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlyZXQgPSAwOwogCi0JcHJpdi0+cmRhaV9ucgk9IGRhaV9ucjsKLQlwcml2LT5kYWlkcnYJPSBkcnY7Ci0JcHJpdi0+cmRhaQk9IHJkYWk7Cityc25kX2RhaV9wcm9iZV9kb25lOgorCW9mX25vZGVfcHV0KGRhaV9ub2RlKTsKIAotCWZvciAoaSA9IDA7IGkgPCBkYWlfbnI7IGkrKykgewotCi0JCXBtb2QgPSBpbmZvLT5kYWlfaW5mb1tpXS5wbGF5YmFjay5zc2k7Ci0JCWNtb2QgPSBpbmZvLT5kYWlfaW5mb1tpXS5jYXB0dXJlLnNzaTsKLQotCQkvKgotCQkgKglpbml0IHJzbmRfZGFpCi0JCSAqLwotCQlzbnByaW50ZihyZGFpW2ldLm5hbWUsIFJTTkRfREFJX05BTUVfU0laRSwgInJzbmQtZGFpLiVkIiwgaSk7Ci0JCXJkYWlbaV0ucHJpdiA9IHByaXY7Ci0KLQkJLyoKLQkJICoJaW5pdCBzbmRfc29jX2RhaV9kcml2ZXIKLQkJICovCi0JCWRydltpXS5uYW1lCT0gcmRhaVtpXS5uYW1lOwotCQlkcnZbaV0ub3BzCT0gJnJzbmRfc29jX2RhaV9vcHM7Ci0JCWlmIChwbW9kKSB7Ci0JCQlzbnByaW50ZihyZGFpW2ldLnBsYXliYWNrLm5hbWUsIFJTTkRfREFJX05BTUVfU0laRSwKLQkJCQkgIkRBSSVkIFBsYXliYWNrIiwgaSk7Ci0KLQkJCWRydltpXS5wbGF5YmFjay5yYXRlcwkJPSBSU05EX1JBVEVTOwotCQkJZHJ2W2ldLnBsYXliYWNrLmZvcm1hdHMJCT0gUlNORF9GTVRTOwotCQkJZHJ2W2ldLnBsYXliYWNrLmNoYW5uZWxzX21pbgk9IDI7Ci0JCQlkcnZbaV0ucGxheWJhY2suY2hhbm5lbHNfbWF4CT0gMjsKLQkJCWRydltpXS5wbGF5YmFjay5zdHJlYW1fbmFtZQk9IHJkYWlbaV0ucGxheWJhY2submFtZTsKLQotCQkJcmRhaVtpXS5wbGF5YmFjay5pbmZvID0gJmluZm8tPmRhaV9pbmZvW2ldLnBsYXliYWNrOwotCQkJcmRhaVtpXS5wbGF5YmFjay5yZGFpID0gcmRhaSArIGk7Ci0JCQlyc25kX3BhdGhfaW5pdChwcml2LCAmcmRhaVtpXSwgJnJkYWlbaV0ucGxheWJhY2spOwotCQl9Ci0JCWlmIChjbW9kKSB7Ci0JCQlzbnByaW50ZihyZGFpW2ldLmNhcHR1cmUubmFtZSwgUlNORF9EQUlfTkFNRV9TSVpFLAotCQkJCSAiREFJJWQgQ2FwdHVyZSIsIGkpOwotCi0JCQlkcnZbaV0uY2FwdHVyZS5yYXRlcwkJPSBSU05EX1JBVEVTOwotCQkJZHJ2W2ldLmNhcHR1cmUuZm9ybWF0cwkJPSBSU05EX0ZNVFM7Ci0JCQlkcnZbaV0uY2FwdHVyZS5jaGFubmVsc19taW4JPSAyOwotCQkJZHJ2W2ldLmNhcHR1cmUuY2hhbm5lbHNfbWF4CT0gMjsKLQkJCWRydltpXS5jYXB0dXJlLnN0cmVhbV9uYW1lCT0gcmRhaVtpXS5jYXB0dXJlLm5hbWU7Ci0KLQkJCXJkYWlbaV0uY2FwdHVyZS5pbmZvID0gJmluZm8tPmRhaV9pbmZvW2ldLmNhcHR1cmU7Ci0JCQlyZGFpW2ldLmNhcHR1cmUucmRhaSA9IHJkYWkgKyBpOwotCQkJcnNuZF9wYXRoX2luaXQocHJpdiwgJnJkYWlbaV0sICZyZGFpW2ldLmNhcHR1cmUpOwotCQl9Ci0KLQkJZGV2X2RiZyhkZXYsICIlcyAoJXMvJXMpXG4iLCByZGFpW2ldLm5hbWUsCi0JCQlwbW9kID8gInBsYXkiICAgIDogIiAtLSAiLAotCQkJY21vZCA/ICJjYXB0dXJlIiA6ICIgIC0tICAgIik7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTEwMzMsMTQgKzg3NywxMyBAQAogCQkJICAgIHZvaWQgKCp1cGRhdGUpKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAogCQkJCQkgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY2FyZCAqc29jX2NhcmQgPSBydGQtPmNhcmQ7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcnRkLT5jYXJkLT5zbmRfY2FyZDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RybDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBrbmV3ID0gewogCQkuaWZhY2UJCT0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lCQk9IG5hbWUsCiAJCS5pbmZvCQk9IHJzbmRfa2N0cmxfaW5mbywKLQkJLmluZGV4CQk9IHJ0ZCAtIHNvY19jYXJkLT5ydGQsCisJCS5pbmRleAkJPSBydGQtPm51bSwKIAkJLmdldAkJPSByc25kX2tjdHJsX2dldCwKIAkJLnB1dAkJPSByc25kX2tjdHJsX3B1dCwKIAkJLnByaXZhdGVfdmFsdWUJPSAodW5zaWduZWQgbG9uZyljZmcsCkBAIC0xMDc3LDEwICs5MjAsMTQgQEAKIAkJICAgICB2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCQkgICAgc3RydWN0IHJzbmRfbW9kICptb2QpLAogCQkgICAgIHN0cnVjdCByc25kX2tjdHJsX2NmZ19tICpfY2ZnLAorCQkgICAgIGludCBjaF9zaXplLAogCQkgICAgIHUzMiBtYXgpCiB7CisJaWYgKGNoX3NpemUgPiBSU05EX0RWQ19DSEFOTkVMUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlfY2ZnLT5jZmcubWF4CT0gbWF4OwotCV9jZmctPmNmZy5zaXplCT0gUlNORF9EVkNfQ0hBTk5FTFM7CisJX2NmZy0+Y2ZnLnNpemUJPSBjaF9zaXplOwogCV9jZmctPmNmZy52YWwJPSBfY2ZnLT52YWw7CiAJcmV0dXJuIF9fcnNuZF9rY3RybF9uZXcobW9kLCBpbywgcnRkLCBuYW1lLCAmX2NmZy0+Y2ZnLCB1cGRhdGUpOwogfQpAQCAtMTE2MSw2ICsxMDA4LDkgQEAKIAogCXJldCA9IHJzbmRfZGFpX2NhbGwocHJvYmUsIGlvLCBwcml2KTsKIAlpZiAocmV0ID09IC1FQUdBSU4pIHsKKwkJc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kID0gcnNuZF9pb190b19tb2Rfc3NpKGlvKTsKKwkJaW50IGk7CisKIAkJLyoKIAkJICogRmFsbGJhY2sgdG8gUElPIG1vZGUKIAkJICovCkBAIC0xMTc1LDEwICsxMDI1LDEyIEBACiAJCXJzbmRfZGFpX2NhbGwocmVtb3ZlLCBpbywgcHJpdik7CiAKIAkJLyoKLQkJICogcmVtb3ZlIFNSQy9EVkMgZnJvbSBEQUksCisJCSAqIHJlbW92ZSBhbGwgbW9kIGZyb20gaW8KKwkJICogYW5kLCByZSBjb25uZWN0IHNzaQogCQkgKi8KLQkJcnNuZF9wYXRoX3JlbW92ZShwcml2LCBpbywgc3JjKTsKLQkJcnNuZF9wYXRoX3JlbW92ZShwcml2LCBpbywgZHZjKTsKKwkJZm9yIChpID0gMDsgaSA8IFJTTkRfTU9EX01BWDsgaSsrKQorCQkJcnNuZF9kYWlfZGlzY29ubmVjdCgoaW8pLT5tb2RbaV0sIGlvLCBpKTsKKwkJcnNuZF9kYWlfY29ubmVjdChzc2lfbW9kLCBpbywgUlNORF9NT0RfU1NJKTsKIAogCQkvKgogCQkgKiBmYWxsYmFjawpAQCAtMTIwMCwzMyArMTA1MiwyNSBAQAogICovCiBzdGF0aWMgaW50IHJzbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcmNhcl9zbmRfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IHJzbmRfZGFpICpyZGFpOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKHJzbmRfb2ZfbWF0Y2gsIGRldik7Ci0JY29uc3Qgc3RydWN0IHJzbmRfb2ZfZGF0YSAqb2ZfZGF0YTsKLQlpbnQgKCpwcm9iZV9mdW5jW10pKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkgICAgY29uc3Qgc3RydWN0IHJzbmRfb2ZfZGF0YSAqb2ZfZGF0YSwKLQkJCSAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KSA9IHsKKwlpbnQgKCpwcm9iZV9mdW5jW10pKHN0cnVjdCByc25kX3ByaXYgKnByaXYpID0gewogCQlyc25kX2dlbl9wcm9iZSwKIAkJcnNuZF9kbWFfcHJvYmUsCiAJCXJzbmRfc3NpX3Byb2JlLAorCQlyc25kX3NzaXVfcHJvYmUsCiAJCXJzbmRfc3JjX3Byb2JlLAogCQlyc25kX2N0dV9wcm9iZSwKIAkJcnNuZF9taXhfcHJvYmUsCiAJCXJzbmRfZHZjX3Byb2JlLAorCQlyc25kX2NtZF9wcm9iZSwKIAkJcnNuZF9hZGdfcHJvYmUsCiAJCXJzbmRfZGFpX3Byb2JlLAogCX07CiAJaW50IHJldCwgaTsKIAotCWluZm8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCByY2FyX3NuZF9pbmZvKSwKLQkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIWluZm8pCi0JCXJldHVybiAtRU5PTUVNOwotCW9mX2RhdGEgPSBvZl9pZC0+ZGF0YTsKLQogCS8qCiAJICoJaW5pdCBwcml2IGRhdGEKIAkgKi8KQEAgLTEyMzcsMTQgKzEwODEsMTQgQEAKIAl9CiAKIAlwcml2LT5wZGV2CT0gcGRldjsKLQlwcml2LT5pbmZvCT0gaW5mbzsKKwlwcml2LT5mbGFncwk9ICh1bnNpZ25lZCBsb25nKW9mX2lkLT5kYXRhOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKIAogCS8qCiAJICoJaW5pdCBlYWNoIG1vZHVsZQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2JlX2Z1bmMpOyBpKyspIHsKLQkJcmV0ID0gcHJvYmVfZnVuY1tpXShwZGV2LCBvZl9kYXRhLCBwcml2KTsKKwkJcmV0ID0gcHJvYmVfZnVuY1tpXShwcml2KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMTI5NywxMyArMTE0MSwxNSBAQAogewogCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAJc3RydWN0IHJzbmRfZGFpICpyZGFpOwotCXZvaWQgKCpyZW1vdmVfZnVuY1tdKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikgPSB7CisJdm9pZCAoKnJlbW92ZV9mdW5jW10pKHN0cnVjdCByc25kX3ByaXYgKnByaXYpID0gewogCQlyc25kX3NzaV9yZW1vdmUsCisJCXJzbmRfc3NpdV9yZW1vdmUsCiAJCXJzbmRfc3JjX3JlbW92ZSwKIAkJcnNuZF9jdHVfcmVtb3ZlLAogCQlyc25kX21peF9yZW1vdmUsCiAJCXJzbmRfZHZjX3JlbW92ZSwKKwkJcnNuZF9jbWRfcmVtb3ZlLAorCQlyc25kX2FkZ19yZW1vdmUsCiAJfTsKIAlpbnQgcmV0ID0gMCwgaTsKIApAQCAtMTMxNSw3ICsxMTYxLDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZW1vdmVfZnVuYyk7IGkrKykKLQkJcmVtb3ZlX2Z1bmNbaV0ocGRldiwgcHJpdik7CisJCXJlbW92ZV9mdW5jW2ldKHByaXYpOwogCiAJc25kX3NvY191bnJlZ2lzdGVyX2NvbXBvbmVudCgmcGRldi0+ZGV2KTsKIAlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvcmNhci9jdHUuYyBiL3NvdW5kL3NvYy9zaC9yY2FyL2N0dS5jCmluZGV4IDNjYjIxNGEuLmQ1M2EyMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9yY2FyL2N0dS5jCisrKyBiL3NvdW5kL3NvYy9zaC9yY2FyL2N0dS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjZGVmaW5lIENUVV9OQU1FICJjdHUiCiAKIHN0cnVjdCByc25kX2N0dSB7Ci0Jc3RydWN0IHJzbmRfY3R1X3BsYXRmb3JtX2luZm8gKmluZm87IC8qIHJjYXJfc25kLmggKi8KIAlzdHJ1Y3QgcnNuZF9tb2QgbW9kOwogfTsKIApAQCAtMjQsNiArMjMsNyBAQAogCQkgICAgICgocG9zKSA9IChzdHJ1Y3QgcnNuZF9jdHUgKikocHJpdiktPmN0dSArIGkpOwlcCiAJICAgICBpKyspCiAKKyNkZWZpbmUgcnNuZF9jdHVfZ2V0KHByaXYsIGlkKSAoKHN0cnVjdCByc25kX2N0dSAqKShwcml2LT5jdHUpICsgaWQpCiAjZGVmaW5lIHJzbmRfY3R1X2luaXRpYWxpemVfbG9jayhtb2QpCV9fcnNuZF9jdHVfaW5pdGlhbGl6ZV9sb2NrKG1vZCwgMSkKICNkZWZpbmUgcnNuZF9jdHVfaW5pdGlhbGl6ZV91bmxvY2sobW9kKQlfX3JzbmRfY3R1X2luaXRpYWxpemVfbG9jayhtb2QsIDApCiBzdGF0aWMgdm9pZCBfX3JzbmRfY3R1X2luaXRpYWxpemVfbG9jayhzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwgdTMyIGVuYWJsZSkKQEAgLTMxLDYgKzMxLDEzIEBACiAJcnNuZF9tb2Rfd3JpdGUobW9kLCBDVFVfQ1RVSVIsIGVuYWJsZSk7CiB9CiAKK3N0YXRpYyBpbnQgcnNuZF9jdHVfcHJvYmVfKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQoreworCXJldHVybiByc25kX2NtZF9hdHRhY2goaW8sIHJzbmRfbW9kX2lkKG1vZCkgLyA0KTsKK30KKwogc3RhdGljIGludCByc25kX2N0dV9pbml0KHN0cnVjdCByc25kX21vZCAqbW9kLAogCQkJIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAogCQkJIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCkBAIC01Nyw2ICs2NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcnNuZF9tb2Rfb3BzIHJzbmRfY3R1X29wcyA9IHsKIAkubmFtZQkJPSBDVFVfTkFNRSwKKwkucHJvYmUJCT0gcnNuZF9jdHVfcHJvYmVfLAogCS5pbml0CQk9IHJzbmRfY3R1X2luaXQsCiAJLnF1aXQJCT0gcnNuZF9jdHVfcXVpdCwKIH07CkBAIC02Niw1MSArNzQsMTMgQEAKIAlpZiAoV0FSTl9PTihpZCA8IDAgfHwgaWQgPj0gcnNuZF9jdHVfbnIocHJpdikpKQogCQlpZCA9IDA7CiAKLQlyZXR1cm4gcnNuZF9tb2RfZ2V0KChzdHJ1Y3QgcnNuZF9jdHUgKikocHJpdi0+Y3R1KSArIGlkKTsKKwlyZXR1cm4gcnNuZF9tb2RfZ2V0KHJzbmRfY3R1X2dldChwcml2LCBpZCkpOwogfQogCi1zdGF0aWMgdm9pZCByc25kX29mX3BhcnNlX2N0dShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICAgICAgY29uc3Qgc3RydWN0IHJzbmRfb2ZfZGF0YSAqb2ZfZGF0YSwKLQkJICAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCitpbnQgcnNuZF9jdHVfcHJvYmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Ci0Jc3RydWN0IHJzbmRfY3R1X3BsYXRmb3JtX2luZm8gKmN0dV9pbmZvOwotCXN0cnVjdCByY2FyX3NuZF9pbmZvICppbmZvID0gcnNuZF9wcml2X3RvX2luZm8ocHJpdik7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLQlpbnQgbnI7Ci0KLQlpZiAoIW9mX2RhdGEpCi0JCXJldHVybjsKLQotCW5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtPm9mX25vZGUsICJyY2FyX3NvdW5kLGN0dSIpOwotCWlmICghbm9kZSkKLQkJcmV0dXJuOwotCi0JbnIgPSBvZl9nZXRfY2hpbGRfY291bnQobm9kZSk7Ci0JaWYgKCFucikKLQkJZ290byByc25kX29mX3BhcnNlX2N0dV9lbmQ7Ci0KLQljdHVfaW5mbyA9IGRldm1fa3phbGxvYyhkZXYsCi0JCQkJc2l6ZW9mKHN0cnVjdCByc25kX2N0dV9wbGF0Zm9ybV9pbmZvKSAqIG5yLAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghY3R1X2luZm8pIHsKLQkJZGV2X2VycihkZXYsICJjdHUgaW5mbyBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJZ290byByc25kX29mX3BhcnNlX2N0dV9lbmQ7Ci0JfQotCi0JaW5mby0+Y3R1X2luZm8JCT0gY3R1X2luZm87Ci0JaW5mby0+Y3R1X2luZm9fbnIJPSBucjsKLQotcnNuZF9vZl9wYXJzZV9jdHVfZW5kOgotCW9mX25vZGVfcHV0KG5vZGUpOwotCi19Ci0KLWludCByc25kX2N0dV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCXN0cnVjdCByY2FyX3NuZF9pbmZvICppbmZvID0gcnNuZF9wcml2X3RvX2luZm8ocHJpdik7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwogCXN0cnVjdCByc25kX2N0dSAqY3R1OwogCXN0cnVjdCBjbGsgKmNsazsKQEAgLTEyMSwyMCArOTEsMzAgQEAKIAlpZiAocnNuZF9pc19nZW4xKHByaXYpKQogCQlyZXR1cm4gMDsKIAotCXJzbmRfb2ZfcGFyc2VfY3R1KHBkZXYsIG9mX2RhdGEsIHByaXYpOworCW5vZGUgPSByc25kX2N0dV9vZl9ub2RlKHByaXYpOworCWlmICghbm9kZSkKKwkJcmV0dXJuIDA7IC8qIG5vdCB1c2VkIGlzIG5vdCBlcnJvciAqLwogCi0JbnIgPSBpbmZvLT5jdHVfaW5mb19ucjsKLQlpZiAoIW5yKQotCQlyZXR1cm4gMDsKKwluciA9IG9mX2dldF9jaGlsZF9jb3VudChub2RlKTsKKwlpZiAoIW5yKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcnNuZF9jdHVfcHJvYmVfZG9uZTsKKwl9CiAKIAljdHUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0dSkgKiBuciwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHUpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghY3R1KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcnNuZF9jdHVfcHJvYmVfZG9uZTsKKwl9CiAKIAlwcml2LT5jdHVfbnIJPSBucjsKIAlwcml2LT5jdHUJPSBjdHU7CiAKLQlmb3JfZWFjaF9yc25kX2N0dShjdHUsIHByaXYsIGkpIHsKKwlpID0gMDsKKwlyZXQgPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgbnApIHsKKwkJY3R1ID0gcnNuZF9jdHVfZ2V0KHByaXYsIGkpOworCiAJCS8qCiAJCSAqIENUVTAwLCBDVFUwMSwgQ1RVMDIsIENUVTAzID0+IENUVTAKIAkJICogQ1RVMTAsIENUVTExLCBDVFUxMiwgQ1RVMTMgPT4gQ1RVMQpAQCAtMTQzLDIyICsxMjMsMjcgQEAKIAkJCSBDVFVfTkFNRSwgaSAvIDQpOwogCiAJCWNsayA9IGRldm1fY2xrX2dldChkZXYsIG5hbWUpOwotCQlpZiAoSVNfRVJSKGNsaykpCi0JCQlyZXR1cm4gUFRSX0VSUihjbGspOwotCi0JCWN0dS0+aW5mbyA9ICZpbmZvLT5jdHVfaW5mb1tpXTsKKwkJaWYgKElTX0VSUihjbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCQlnb3RvIHJzbmRfY3R1X3Byb2JlX2RvbmU7CisJCX0KIAogCQlyZXQgPSByc25kX21vZF9pbml0KHByaXYsIHJzbmRfbW9kX2dldChjdHUpLCAmcnNuZF9jdHVfb3BzLAogCQkJCSAgICBjbGssIFJTTkRfTU9EX0NUVSwgaSk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byByc25kX2N0dV9wcm9iZV9kb25lOworCisJCWkrKzsKIAl9CiAKLQlyZXR1cm4gMDsKKworcnNuZF9jdHVfcHJvYmVfZG9uZToKKwlvZl9ub2RlX3B1dChub2RlKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgcnNuZF9jdHVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCSAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKK3ZvaWQgcnNuZF9jdHVfcmVtb3ZlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IHJzbmRfY3R1ICpjdHU7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvcmNhci9kbWEuYyBiL3NvdW5kL3NvYy9zaC9yY2FyL2RtYS5jCmluZGV4IDVkMDg0ZDAuLjQxOGU2ZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9yY2FyL2RtYS5jCisrKyBiL3NvdW5kL3NvYy9zaC9yY2FyL2RtYS5jCkBAIC0yMiwyMSArMjIsMzYgQEAKIC8qIFBETUFDSENSICovCiAjZGVmaW5lIFBETUFDSENSX0RFCQkoMSA8PCAwKQogCisKK3N0cnVjdCByc25kX2RtYWVuIHsKKwlzdHJ1Y3QgZG1hX2NoYW4JCSpjaGFuOworfTsKKworc3RydWN0IHJzbmRfZG1hcHAgeworCWludAkJCWRtYXBwX2lkOworCXUzMgkJCWNoY3I7Cit9OworCitzdHJ1Y3QgcnNuZF9kbWEgeworCXN0cnVjdCByc25kX21vZAkJbW9kOworCWRtYV9hZGRyX3QJCXNyY19hZGRyOworCWRtYV9hZGRyX3QJCWRzdF9hZGRyOworCXVuaW9uIHsKKwkJc3RydWN0IHJzbmRfZG1hZW4gZW47CisJCXN0cnVjdCByc25kX2RtYXBwIHBwOworCX0gZG1hOworfTsKKwogc3RydWN0IHJzbmRfZG1hX2N0cmwgewogCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgZG1hZW5fbnVtOwogCWludCBkbWFwcF9udW07CiB9OwogCi1zdHJ1Y3QgcnNuZF9kbWFfb3BzIHsKLQljaGFyICpuYW1lOwotCXZvaWQgKCpzdGFydCkoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hKTsKLQl2b2lkICgqc3RvcCkoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hKTsKLQlpbnQgKCppbml0KShzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywgc3RydWN0IHJzbmRfZG1hICpkbWEsIGludCBpZCwKLQkJICAgIHN0cnVjdCByc25kX21vZCAqbW9kX2Zyb20sIHN0cnVjdCByc25kX21vZCAqbW9kX3RvKTsKLQl2b2lkICgqcXVpdCkoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hKTsKLX07Ci0KICNkZWZpbmUgcnNuZF9wcml2X3RvX2RtYWMocCkJKChzdHJ1Y3QgcnNuZF9kbWFfY3RybCAqKShwKS0+ZG1hKQorI2RlZmluZSByc25kX21vZF90b19kbWEoX21vZCkgY29udGFpbmVyX29mKChfbW9kKSwgc3RydWN0IHJzbmRfZG1hLCBtb2QpCisjZGVmaW5lIHJzbmRfZG1hX3RvX2RtYWVuKGRtYSkJKCYoZG1hKS0+ZG1hLmVuKQorI2RlZmluZSByc25kX2RtYV90b19kbWFwcChkbWEpCSgmKGRtYSktPmRtYS5wcCkKIAogLyoKICAqCQlBdWRpbyBETUFDCkBAIC03NywxOCArOTIsMjQgQEAKIAlyc25kX21vZF9pbnRlcnJ1cHQobW9kLCBfX3JzbmRfZG1hZW5fY29tcGxldGUpOwogfQogCi1zdGF0aWMgdm9pZCByc25kX2RtYWVuX3N0b3Aoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hKQorc3RhdGljIGludCByc25kX2RtYWVuX3N0b3Aoc3RydWN0IHJzbmRfbW9kICptb2QsCisJCQkgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCSAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7CisJc3RydWN0IHJzbmRfZG1hICpkbWEgPSByc25kX21vZF90b19kbWEobW9kKTsKIAlzdHJ1Y3QgcnNuZF9kbWFlbiAqZG1hZW4gPSByc25kX2RtYV90b19kbWFlbihkbWEpOwogCiAJZG1hZW5naW5lX3Rlcm1pbmF0ZV9hbGwoZG1hZW4tPmNoYW4pOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJzbmRfZG1hZW5fc3RhcnQoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hKQorc3RhdGljIGludCByc25kX2RtYWVuX3N0YXJ0KHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7CisJc3RydWN0IHJzbmRfZG1hICpkbWEgPSByc25kX21vZF90b19kbWEobW9kKTsKIAlzdHJ1Y3QgcnNuZF9kbWFlbiAqZG1hZW4gPSByc25kX2RtYV90b19kbWFlbihkbWEpOwotCXN0cnVjdCByc25kX21vZCAqbW9kID0gcnNuZF9kbWFfdG9fbW9kKGRtYSk7Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IGlvLT5zdWJzdHJlYW07CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CkBAIC0xMDMsMTggKzEyNCwyMCBAQAogCiAJaWYgKCFkZXNjKSB7CiAJCWRldl9lcnIoZGV2LCAiZG1hZW5naW5lX3ByZXBfc2xhdmVfc2coKSBmYWlsXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlkZXNjLT5jYWxsYmFjawkJPSByc25kX2RtYWVuX2NvbXBsZXRlOwotCWRlc2MtPmNhbGxiYWNrX3BhcmFtCT0gbW9kOworCWRlc2MtPmNhbGxiYWNrX3BhcmFtCT0gcnNuZF9tb2RfZ2V0KGRtYSk7CiAKIAlpZiAoZG1hZW5naW5lX3N1Ym1pdChkZXNjKSA8IDApIHsKIAkJZGV2X2VycihkZXYsICJkbWFlbmdpbmVfc3VibWl0KCkgZmFpbFxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoZG1hZW4tPmNoYW4pOworCisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBkbWFfY2hhbiAqcnNuZF9kbWFfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKQEAgLTE1MiwxMiArMTc1LDI5IEBACiAJCXJldHVybiByc25kX21vZF9kbWFfcmVxKGlvLCBtb2RfdG8pOwogfQogCi1zdGF0aWMgaW50IHJzbmRfZG1hZW5faW5pdChzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKK3N0YXRpYyBpbnQgcnNuZF9kbWFlbl9yZW1vdmUoc3RydWN0IHJzbmRfbW9kICptb2QsCisJCQkgICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCSAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHJzbmRfZG1hICpkbWEgPSByc25kX21vZF90b19kbWEobW9kKTsKKwlzdHJ1Y3QgcnNuZF9kbWFlbiAqZG1hZW4gPSByc25kX2RtYV90b19kbWFlbihkbWEpOworCisJaWYgKGRtYWVuLT5jaGFuKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGRtYWVuLT5jaGFuKTsKKworCWRtYWVuLT5jaGFuID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJzbmRfZG1hZW5fYXR0YWNoKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAogCQkJICAgc3RydWN0IHJzbmRfZG1hICpkbWEsIGludCBpZCwKIAkJCSAgIHN0cnVjdCByc25kX21vZCAqbW9kX2Zyb20sIHN0cnVjdCByc25kX21vZCAqbW9kX3RvKQogeworCXN0cnVjdCByc25kX21vZCAqbW9kID0gcnNuZF9tb2RfZ2V0KGRtYSk7CiAJc3RydWN0IHJzbmRfZG1hZW4gKmRtYWVuID0gcnNuZF9kbWFfdG9fZG1hZW4oZG1hKTsKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9pb190b19wcml2KGlvKTsKKwlzdHJ1Y3QgcnNuZF9kbWFfY3RybCAqZG1hYyA9IHJzbmRfcHJpdl90b19kbWFjKHByaXYpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgY2ZnID0ge307CiAJaW50IGlzX3BsYXkgPSByc25kX2lvX2lzX3BsYXkoaW8pOwpAQCAtMTkxLDE4ICsyMzEsMjAgQEAKIAljZmcuc3JjX2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKIAljZmcuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKIAotCWRldl9kYmcoZGV2LCAiJXMgJXBhZCAtPiAlcGFkXG4iLAotCQlkbWEtPm9wcy0+bmFtZSwKKwlkZXZfZGJnKGRldiwgIiVzWyVkXSAlcGFkIC0+ICVwYWRcbiIsCisJCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSwKIAkJJmNmZy5zcmNfYWRkciwgJmNmZy5kc3RfYWRkcik7CiAKIAlyZXQgPSBkbWFlbmdpbmVfc2xhdmVfY29uZmlnKGRtYWVuLT5jaGFuLCAmY2ZnKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byByc25kX2RtYV9pbml0X2VycjsKKwkJZ290byByc25kX2RtYV9hdHRhY2hfZXJyOworCisJZG1hYy0+ZG1hZW5fbnVtKys7CiAKIAlyZXR1cm4gMDsKIAotcnNuZF9kbWFfaW5pdF9lcnI6Ci0JcnNuZF9kbWFfcXVpdChpbywgZG1hKTsKK3JzbmRfZG1hX2F0dGFjaF9lcnI6CisJcnNuZF9kbWFlbl9yZW1vdmUobW9kLCBpbywgcHJpdik7CiByc25kX2RtYV9jaGFubmVsX2VycjoKIAogCS8qCkBAIC0yMTQsMjIgKzI1NiwxMSBAQAogCXJldHVybiAtRUFHQUlOOwogfQogCi1zdGF0aWMgdm9pZCByc25kX2RtYWVuX3F1aXQoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hKQotewotCXN0cnVjdCByc25kX2RtYWVuICpkbWFlbiA9IHJzbmRfZG1hX3RvX2RtYWVuKGRtYSk7Ci0KLQlpZiAoZG1hZW4tPmNoYW4pCi0JCWRtYV9yZWxlYXNlX2NoYW5uZWwoZG1hZW4tPmNoYW4pOwotCi0JZG1hZW4tPmNoYW4gPSBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IHJzbmRfZG1hX29wcyByc25kX2RtYWVuX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcnNuZF9tb2Rfb3BzIHJzbmRfZG1hZW5fb3BzID0gewogCS5uYW1lCT0gImF1ZG1hYyIsCiAJLnN0YXJ0CT0gcnNuZF9kbWFlbl9zdGFydCwKIAkuc3RvcAk9IHJzbmRfZG1hZW5fc3RvcCwKLQkuaW5pdAk9IHJzbmRfZG1hZW5faW5pdCwKLQkucXVpdAk9IHJzbmRfZG1hZW5fcXVpdCwKKwkucmVtb3ZlCT0gcnNuZF9kbWFlbl9yZW1vdmUsCiB9OwogCiAvKgpAQCAtMzA3LDcgKzMzOCw3IEBACiAJICgweDEwICogcnNuZF9kbWFfdG9fZG1hcHAoZG1hKS0+ZG1hcHBfaWQpKQogc3RhdGljIHZvaWQgcnNuZF9kbWFwcF93cml0ZShzdHJ1Y3QgcnNuZF9kbWEgKmRtYSwgdTMyIGRhdGEsIHUzMiByZWcpCiB7Ci0Jc3RydWN0IHJzbmRfbW9kICptb2QgPSByc25kX2RtYV90b19tb2QoZG1hKTsKKwlzdHJ1Y3QgcnNuZF9tb2QgKm1vZCA9IHJzbmRfbW9kX2dldChkbWEpOwogCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KG1vZCk7CiAJc3RydWN0IHJzbmRfZG1hX2N0cmwgKmRtYWMgPSByc25kX3ByaXZfdG9fZG1hYyhwcml2KTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwpAQCAtMzE5LDM4ICszNTAsNDggQEAKIAogc3RhdGljIHUzMiByc25kX2RtYXBwX3JlYWQoc3RydWN0IHJzbmRfZG1hICpkbWEsIHUzMiByZWcpCiB7Ci0Jc3RydWN0IHJzbmRfbW9kICptb2QgPSByc25kX2RtYV90b19tb2QoZG1hKTsKKwlzdHJ1Y3QgcnNuZF9tb2QgKm1vZCA9IHJzbmRfbW9kX2dldChkbWEpOwogCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KG1vZCk7CiAJc3RydWN0IHJzbmRfZG1hX2N0cmwgKmRtYWMgPSByc25kX3ByaXZfdG9fZG1hYyhwcml2KTsKIAogCXJldHVybiBpb3JlYWQzMihyc25kX2RtYXBwX2FkZHIoZG1hYywgZG1hLCByZWcpKTsKIH0KIAotc3RhdGljIHZvaWQgcnNuZF9kbWFwcF9zdG9wKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLCBzdHJ1Y3QgcnNuZF9kbWEgKmRtYSkKK3N0YXRpYyBpbnQgcnNuZF9kbWFwcF9zdG9wKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogeworCXN0cnVjdCByc25kX2RtYSAqZG1hID0gcnNuZF9tb2RfdG9fZG1hKG1vZCk7CiAJaW50IGk7CiAKIAlyc25kX2RtYXBwX3dyaXRlKGRtYSwgMCwgUERNQUNIQ1IpOwogCiAJZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykgewogCQlpZiAoMCA9PSByc25kX2RtYXBwX3JlYWQoZG1hLCBQRE1BQ0hDUikpCi0JCQlyZXR1cm47CisJCQlyZXR1cm4gMDsKIAkJdWRlbGF5KDEpOwogCX0KKworCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgdm9pZCByc25kX2RtYXBwX3N0YXJ0KHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLCBzdHJ1Y3QgcnNuZF9kbWEgKmRtYSkKK3N0YXRpYyBpbnQgcnNuZF9kbWFwcF9zdGFydChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKKwkJCSAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCSAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogeworCXN0cnVjdCByc25kX2RtYSAqZG1hID0gcnNuZF9tb2RfdG9fZG1hKG1vZCk7CiAJc3RydWN0IHJzbmRfZG1hcHAgKmRtYXBwID0gcnNuZF9kbWFfdG9fZG1hcHAoZG1hKTsKIAogCXJzbmRfZG1hcHBfd3JpdGUoZG1hLCBkbWEtPnNyY19hZGRyLAlQRE1BU0FSKTsKIAlyc25kX2RtYXBwX3dyaXRlKGRtYSwgZG1hLT5kc3RfYWRkciwJUERNQURBUik7CiAJcnNuZF9kbWFwcF93cml0ZShkbWEsIGRtYXBwLT5jaGNyLAlQRE1BQ0hDUik7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByc25kX2RtYXBwX2luaXQoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCi0JCQkgICBzdHJ1Y3QgcnNuZF9kbWEgKmRtYSwgaW50IGlkLAotCQkJICAgc3RydWN0IHJzbmRfbW9kICptb2RfZnJvbSwgc3RydWN0IHJzbmRfbW9kICptb2RfdG8pCitzdGF0aWMgaW50IHJzbmRfZG1hcHBfYXR0YWNoKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJICAgICBzdHJ1Y3QgcnNuZF9kbWEgKmRtYSwgaW50IGlkLAorCQkJICAgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZF9mcm9tLCBzdHJ1Y3QgcnNuZF9tb2QgKm1vZF90bykKIHsKIAlzdHJ1Y3QgcnNuZF9kbWFwcCAqZG1hcHAgPSByc25kX2RtYV90b19kbWFwcChkbWEpOwogCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX2lvX3RvX3ByaXYoaW8pOwpAQCAtMzYyLDE5ICs0MDMsMTYgQEAKIAogCWRtYWMtPmRtYXBwX251bSsrOwogCi0JcnNuZF9kbWFwcF9zdG9wKGlvLCBkbWEpOwotCiAJZGV2X2RiZyhkZXYsICJpZC9zcmMvZHN0L2NoY3IgPSAlZC8lcGFkLyVwYWQvJTA4eFxuIiwKIAkJZG1hcHAtPmRtYXBwX2lkLCAmZG1hLT5zcmNfYWRkciwgJmRtYS0+ZHN0X2FkZHIsIGRtYXBwLT5jaGNyKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHJzbmRfZG1hX29wcyByc25kX2RtYXBwX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcnNuZF9tb2Rfb3BzIHJzbmRfZG1hcHBfb3BzID0gewogCS5uYW1lCT0gImF1ZG1hYy1wcCIsCiAJLnN0YXJ0CT0gcnNuZF9kbWFwcF9zdGFydCwKIAkuc3RvcAk9IHJzbmRfZG1hcHBfc3RvcCwKLQkuaW5pdAk9IHJzbmRfZG1hcHBfaW5pdCwKIAkucXVpdAk9IHJzbmRfZG1hcHBfc3RvcCwKIH07CiAKQEAgLTQ5NywxMyArNTM1LDEyIEBACiB9CiAKICNkZWZpbmUgTU9EX01BWCAoUlNORF9NT0RfTUFYICsgMSkgLyogK01lbW9yeSAqLwotc3RhdGljIHZvaWQgcnNuZF9kbWFfb2ZfcGF0aChzdHJ1Y3QgcnNuZF9kbWEgKmRtYSwKK3N0YXRpYyB2b2lkIHJzbmRfZG1hX29mX3BhdGgoc3RydWN0IHJzbmRfbW9kICp0aGlzLAogCQkJICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCSAgICAgaW50IGlzX3BsYXksCiAJCQkgICAgIHN0cnVjdCByc25kX21vZCAqKm1vZF9mcm9tLAogCQkJICAgICBzdHJ1Y3QgcnNuZF9tb2QgKiptb2RfdG8pCiB7Ci0Jc3RydWN0IHJzbmRfbW9kICp0aGlzID0gcnNuZF9kbWFfdG9fbW9kKGRtYSk7CiAJc3RydWN0IHJzbmRfbW9kICpzc2kgPSByc25kX2lvX3RvX21vZF9zc2koaW8pOwogCXN0cnVjdCByc25kX21vZCAqc3JjID0gcnNuZF9pb190b19tb2Rfc3JjKGlvKTsKIAlzdHJ1Y3QgcnNuZF9tb2QgKmN0dSA9IHJzbmRfaW9fdG9fbW9kX2N0dShpbyk7CkBAIC01MTMsNyArNTUwLDcgQEAKIAlzdHJ1Y3QgcnNuZF9tb2QgKm1vZF9zdGFydCwgKm1vZF9lbmQ7CiAJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYodGhpcyk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKLQlpbnQgbnIsIGk7CisJaW50IG5yLCBpLCBpZHg7CiAKIAlpZiAoIXNzaSkKIAkJcmV0dXJuOwpAQCAtNTQyLDIzICs1NzksMjQgQEAKIAltb2Rfc3RhcnQJPSAoaXNfcGxheSkgPyBOVUxMIDogc3NpOwogCW1vZF9lbmQJCT0gKGlzX3BsYXkpID8gc3NpICA6IE5VTEw7CiAKLQltb2RbMF0gPSBtb2Rfc3RhcnQ7CisJaWR4ID0gMDsKKwltb2RbaWR4KytdID0gbW9kX3N0YXJ0OwogCWZvciAoaSA9IDE7IGkgPCBucjsgaSsrKSB7CiAJCWlmIChzcmMpIHsKLQkJCW1vZFtpXSA9IHNyYzsKKwkJCW1vZFtpZHgrK10gPSBzcmM7CiAJCQlzcmMgPSBOVUxMOwogCQl9IGVsc2UgaWYgKGN0dSkgewotCQkJbW9kW2ldID0gY3R1OworCQkJbW9kW2lkeCsrXSA9IGN0dTsKIAkJCWN0dSA9IE5VTEw7CiAJCX0gZWxzZSBpZiAobWl4KSB7Ci0JCQltb2RbaV0gPSBtaXg7CisJCQltb2RbaWR4KytdID0gbWl4OwogCQkJbWl4ID0gTlVMTDsKIAkJfSBlbHNlIGlmIChkdmMpIHsKLQkJCW1vZFtpXSA9IGR2YzsKKwkJCW1vZFtpZHgrK10gPSBkdmM7CiAJCQlkdmMgPSBOVUxMOwogCQl9CiAJfQotCW1vZFtpXSA9IG1vZF9lbmQ7CisJbW9kW2lkeF0gPSBtb2RfZW5kOwogCiAJLyoKIAkgKgkJfCBTU0kgfCBTUkMgfApAQCAtNTY3LDggKzYwNSw4IEBACiAJICogIWlzX3BsYXkJfCAgKiAgfCAgbyAgfAogCSAqLwogCWlmICgodGhpcyA9PSBzc2kpID09IChpc19wbGF5KSkgewotCQkqbW9kX2Zyb20JPSBtb2RbbnIgLSAxXTsKLQkJKm1vZF90bwkJPSBtb2RbbnJdOworCQkqbW9kX2Zyb20JPSBtb2RbaWR4IC0gMV07CisJCSptb2RfdG8JCT0gbW9kW2lkeF07CiAJfSBlbHNlIHsKIAkJKm1vZF9mcm9tCT0gbW9kWzBdOwogCQkqbW9kX3RvCQk9IG1vZFsxXTsKQEAgLTU3Niw3ICs2MTQsNyBAQAogCiAJZGV2X2RiZyhkZXYsICJtb2R1bGUgY29ubmVjdGlvbiAodGhpcyBpcyAlc1slZF0pXG4iLAogCQlyc25kX21vZF9uYW1lKHRoaXMpLCByc25kX21vZF9pZCh0aGlzKSk7Ci0JZm9yIChpID0gMDsgaSA8PSBucjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8PSBpZHg7IGkrKykgewogCQlkZXZfZGJnKGRldiwgIiAgJXNbJWRdJXNcbiIsCiAJCSAgICAgICByc25kX21vZF9uYW1lKG1vZFtpXSksIHJzbmRfbW9kX2lkKG1vZFtpXSksCiAJCSAgICAgICAobW9kW2ldID09ICptb2RfZnJvbSkgPyAiIGZyb20iIDoKQEAgLTU4NCwzNiArNjIyLDIyIEBACiAJfQogfQogCi12b2lkIHJzbmRfZG1hX3N0b3Aoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hKQorc3RydWN0IHJzbmRfbW9kICpyc25kX2RtYV9hdHRhY2goc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkJIHN0cnVjdCByc25kX21vZCAqbW9kLCBpbnQgaWQpCiB7Ci0JZG1hLT5vcHMtPnN0b3AoaW8sIGRtYSk7Ci19Ci0KLXZvaWQgcnNuZF9kbWFfc3RhcnQoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hKQotewotCWRtYS0+b3BzLT5zdGFydChpbywgZG1hKTsKLX0KLQotdm9pZCByc25kX2RtYV9xdWl0KHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLCBzdHJ1Y3QgcnNuZF9kbWEgKmRtYSkKLXsKLQlzdHJ1Y3QgcnNuZF9tb2QgKm1vZCA9IHJzbmRfZG1hX3RvX21vZChkbWEpOwotCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KG1vZCk7Ci0Jc3RydWN0IHJzbmRfZG1hX2N0cmwgKmRtYWMgPSByc25kX3ByaXZfdG9fZG1hYyhwcml2KTsKLQotCWlmICghZG1hYykKLQkJcmV0dXJuOwotCi0JZG1hLT5vcHMtPnF1aXQoaW8sIGRtYSk7Ci19Ci0KLWludCByc25kX2RtYV9pbml0KHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLCBzdHJ1Y3QgcnNuZF9kbWEgKmRtYSwgaW50IGlkKQoteworCXN0cnVjdCByc25kX21vZCAqZG1hX21vZDsKIAlzdHJ1Y3QgcnNuZF9tb2QgKm1vZF9mcm9tID0gTlVMTDsKIAlzdHJ1Y3QgcnNuZF9tb2QgKm1vZF90byA9IE5VTEw7CiAJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfaW9fdG9fcHJpdihpbyk7CiAJc3RydWN0IHJzbmRfZG1hX2N0cmwgKmRtYWMgPSByc25kX3ByaXZfdG9fZG1hYyhwcml2KTsKKwlzdHJ1Y3QgcnNuZF9kbWEgKmRtYTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOworCXN0cnVjdCByc25kX21vZF9vcHMgKm9wczsKKwllbnVtIHJzbmRfbW9kX3R5cGUgdHlwZTsKKwlpbnQgKCphdHRhY2gpKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLCBzdHJ1Y3QgcnNuZF9kbWEgKmRtYSwgaW50IGlkLAorCQkgICAgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZF9mcm9tLCBzdHJ1Y3QgcnNuZF9tb2QgKm1vZF90byk7CiAJaW50IGlzX3BsYXkgPSByc25kX2lvX2lzX3BsYXkoaW8pOworCWludCByZXQsIGRtYV9pZDsKIAogCS8qCiAJICogRE1BIGZhaWxlZC4gdHJ5IHRvIFBJTyBtb2RlCkBAIC02MjIsMzUgKzY0Niw2NCBAQAogCSAqCXJzbmRfcmRhaV9jb250aW51YW5jZV9wcm9iZSgpCiAJICovCiAJaWYgKCFkbWFjKQotCQlyZXR1cm4gLUVBR0FJTjsKKwkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CiAKLQlyc25kX2RtYV9vZl9wYXRoKGRtYSwgaW8sIGlzX3BsYXksICZtb2RfZnJvbSwgJm1vZF90byk7CisJZG1hID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkbWEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRtYSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyc25kX2RtYV9vZl9wYXRoKG1vZCwgaW8sIGlzX3BsYXksICZtb2RfZnJvbSwgJm1vZF90byk7CiAKIAlkbWEtPnNyY19hZGRyID0gcnNuZF9kbWFfYWRkcihpbywgbW9kX2Zyb20sIGlzX3BsYXksIDEpOwogCWRtYS0+ZHN0X2FkZHIgPSByc25kX2RtYV9hZGRyKGlvLCBtb2RfdG8sICAgaXNfcGxheSwgMCk7CiAKIAkvKiBmb3IgR2VuMiAqLwotCWlmIChtb2RfZnJvbSAmJiBtb2RfdG8pCi0JCWRtYS0+b3BzID0gJnJzbmRfZG1hcHBfb3BzOwotCWVsc2UKLQkJZG1hLT5vcHMgPSAmcnNuZF9kbWFlbl9vcHM7CisJaWYgKG1vZF9mcm9tICYmIG1vZF90bykgeworCQlvcHMJPSAmcnNuZF9kbWFwcF9vcHM7CisJCWF0dGFjaAk9IHJzbmRfZG1hcHBfYXR0YWNoOworCQlkbWFfaWQJPSBkbWFjLT5kbWFwcF9udW07CisJCXR5cGUJPSBSU05EX01PRF9BVURNQVBQOworCX0gZWxzZSB7CisJCW9wcwk9ICZyc25kX2RtYWVuX29wczsKKwkJYXR0YWNoCT0gcnNuZF9kbWFlbl9hdHRhY2g7CisJCWRtYV9pZAk9IGRtYWMtPmRtYWVuX251bTsKKwkJdHlwZQk9IFJTTkRfTU9EX0FVRE1BOworCX0KIAogCS8qIGZvciBHZW4xLCBvdmVyd3JpdGUgKi8KLQlpZiAocnNuZF9pc19nZW4xKHByaXYpKQotCQlkbWEtPm9wcyA9ICZyc25kX2RtYWVuX29wczsKKwlpZiAocnNuZF9pc19nZW4xKHByaXYpKSB7CisJCW9wcwk9ICZyc25kX2RtYWVuX29wczsKKwkJYXR0YWNoCT0gcnNuZF9kbWFlbl9hdHRhY2g7CisJCWRtYV9pZAk9IGRtYWMtPmRtYWVuX251bTsKKwkJdHlwZQk9IFJTTkRfTU9EX0FVRE1BOworCX0KIAotCWRldl9kYmcoZGV2LCAiJXMgJXNbJWRdIC0+ICVzWyVkXVxuIiwKLQkJZG1hLT5vcHMtPm5hbWUsCisJZG1hX21vZCA9IHJzbmRfbW9kX2dldChkbWEpOworCisJcmV0ID0gcnNuZF9tb2RfaW5pdChwcml2LCBkbWFfbW9kLAorCQkJICAgIG9wcywgTlVMTCwgdHlwZSwgZG1hX2lkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCWRldl9kYmcoZGV2LCAiJXNbJWRdICVzWyVkXSAtPiAlc1slZF1cbiIsCisJCXJzbmRfbW9kX25hbWUoZG1hX21vZCksIHJzbmRfbW9kX2lkKGRtYV9tb2QpLAogCQlyc25kX21vZF9uYW1lKG1vZF9mcm9tKSwgcnNuZF9tb2RfaWQobW9kX2Zyb20pLAogCQlyc25kX21vZF9uYW1lKG1vZF90byksICAgcnNuZF9tb2RfaWQobW9kX3RvKSk7CiAKLQlyZXR1cm4gZG1hLT5vcHMtPmluaXQoaW8sIGRtYSwgaWQsIG1vZF9mcm9tLCBtb2RfdG8pOworCXJldCA9IGF0dGFjaChpbywgZG1hLCBpZCwgbW9kX2Zyb20sIG1vZF90byk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlyZXQgPSByc25kX2RhaV9jb25uZWN0KGRtYV9tb2QsIGlvLCB0eXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCXJldHVybiByc25kX21vZF9nZXQoZG1hKTsKIH0KIAotaW50IHJzbmRfZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCSAgIGNvbnN0IHN0cnVjdCByc25kX29mX2RhdGEgKm9mX2RhdGEsCi0JCSAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCitpbnQgcnNuZF9kbWFfcHJvYmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcnNuZF9wcml2X3RvX3BkZXYocHJpdik7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKIAlzdHJ1Y3QgcnNuZF9kbWFfY3RybCAqZG1hYzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9yY2FyL2R2Yy5jIGIvc291bmQvc29jL3NoL3JjYXIvZHZjLmMKaW5kZXggNThmNjkwOS4uZDQ1ZmZlNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3JjYXIvZHZjLmMKKysrIGIvc291bmQvc29jL3NoL3JjYXIvZHZjLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNkZWZpbmUgRFZDX05BTUUgImR2YyIKIAogc3RydWN0IHJzbmRfZHZjIHsKLQlzdHJ1Y3QgcnNuZF9kdmNfcGxhdGZvcm1faW5mbyAqaW5mbzsgLyogcmNhcl9zbmQuaCAqLwogCXN0cnVjdCByc25kX21vZCBtb2Q7CiAJc3RydWN0IHJzbmRfa2N0cmxfY2ZnX20gdm9sdW1lOwogCXN0cnVjdCByc25kX2tjdHJsX2NmZ19tIG11dGU7CkBAIC0yNCw2ICsyMyw3IEBACiAJc3RydWN0IHJzbmRfa2N0cmxfY2ZnX3MgcmRvd247CS8qIFJhbXAgUmF0ZSBEb3duICovCiB9OwogCisjZGVmaW5lIHJzbmRfZHZjX2dldChwcml2LCBpZCkgKChzdHJ1Y3QgcnNuZF9kdmMgKikocHJpdi0+ZHZjKSArIGlkKQogI2RlZmluZSByc25kX2R2Y19ucihwcml2KSAoKHByaXYpLT5kdmNfbnIpCiAjZGVmaW5lIHJzbmRfZHZjX29mX25vZGUocHJpdikgXAogCW9mX2dldF9jaGlsZF9ieV9uYW1lKHJzbmRfcHJpdl90b19kZXYocHJpdiktPm9mX25vZGUsICJyY2FyX3NvdW5kLGR2YyIpCkBAIC02NCw3OSArNjQsMTQyIEBACiAJIjAuMTI1IGRCLzgxOTIgc3RlcHMiLAkgLyogMTAxMTEgKi8KIH07CiAKLXN0YXRpYyB2b2lkIHJzbmRfZHZjX3NvZnRfcmVzZXQoc3RydWN0IHJzbmRfbW9kICptb2QpCitzdGF0aWMgdm9pZCByc25kX2R2Y19hY3RpdmF0aW9uKHN0cnVjdCByc25kX21vZCAqbW9kKQogewogCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX1NXUlNSLCAwKTsKIAlyc25kX21vZF93cml0ZShtb2QsIERWQ19TV1JTUiwgMSk7CiB9CiAKLSNkZWZpbmUgcnNuZF9kdmNfaW5pdGlhbGl6ZV9sb2NrKG1vZCkJX19yc25kX2R2Y19pbml0aWFsaXplX2xvY2sobW9kLCAxKQotI2RlZmluZSByc25kX2R2Y19pbml0aWFsaXplX3VubG9jayhtb2QpCV9fcnNuZF9kdmNfaW5pdGlhbGl6ZV9sb2NrKG1vZCwgMCkKLXN0YXRpYyB2b2lkIF9fcnNuZF9kdmNfaW5pdGlhbGl6ZV9sb2NrKHN0cnVjdCByc25kX21vZCAqbW9kLCB1MzIgZW5hYmxlKQorc3RhdGljIHZvaWQgcnNuZF9kdmNfaGFsdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKIHsKLQlyc25kX21vZF93cml0ZShtb2QsIERWQ19EVlVJUiwgZW5hYmxlKTsKKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19EVlVJUiwgMSk7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBEVkNfU1dSU1IsIDApOwogfQogCi1zdGF0aWMgdm9pZCByc25kX2R2Y192b2x1bWVfdXBkYXRlKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAotCQkJCSAgIHN0cnVjdCByc25kX21vZCAqbW9kKQorI2RlZmluZSByc25kX2R2Y19nZXRfdnJwZHIoZHZjKSAoZHZjLT5ydXAudmFsIDw8IDggfCBkdmMtPnJkb3duLnZhbCkKKyNkZWZpbmUgcnNuZF9kdmNfZ2V0X3ZyZGJyKGR2YykgKDB4M2ZmIC0gKGR2Yy0+dm9sdW1lLnZhbFswXSA+PiAxMykpCisKK3N0YXRpYyB2b2lkIHJzbmRfZHZjX3ZvbHVtZV9wYXJhbWV0ZXIoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkJCSAgICAgIHN0cnVjdCByc25kX21vZCAqbW9kKQogewogCXN0cnVjdCByc25kX2R2YyAqZHZjID0gcnNuZF9tb2RfdG9fZHZjKG1vZCk7CiAJdTMyIHZhbFtSU05EX0RWQ19DSEFOTkVMU107Ci0JdTMyIGR2dWNyID0gMDsKLQl1MzIgbXV0ZSA9IDA7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZHZjLT5tdXRlLmNmZy5zaXplOyBpKyspCi0JCW11dGUgfD0gKCEhZHZjLT5tdXRlLmNmZy52YWxbaV0pIDw8IGk7CisJLyogRW5hYmxlIFJhbXAgKi8KKwlpZiAoZHZjLT5yZW4udmFsKQorCQlmb3IgKGkgPSAwOyBpIDwgUlNORF9EVkNfQ0hBTk5FTFM7IGkrKykKKwkJCXZhbFtpXSA9IGR2Yy0+dm9sdW1lLmNmZy5tYXg7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgUlNORF9EVkNfQ0hBTk5FTFM7IGkrKykKKwkJCXZhbFtpXSA9IGR2Yy0+dm9sdW1lLnZhbFtpXTsKIAotCS8qIERpc2FibGUgRFZDIFJlZ2lzdGVyIGFjY2VzcyAqLwotCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX0RWVUVSLCAwKTsKKwkvKiBFbmFibGUgRGlnaXRhbCBWb2x1bWUgKi8KKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0wwUiwgdmFsWzBdKTsKKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0wxUiwgdmFsWzFdKTsKKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0wyUiwgdmFsWzJdKTsKKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0wzUiwgdmFsWzNdKTsKKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0w0UiwgdmFsWzRdKTsKKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0w1UiwgdmFsWzVdKTsKKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0w2UiwgdmFsWzZdKTsKKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0w3UiwgdmFsWzddKTsKK30KKworc3RhdGljIHZvaWQgcnNuZF9kdmNfdm9sdW1lX2luaXQoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkJIHN0cnVjdCByc25kX21vZCAqbW9kKQoreworCXN0cnVjdCByc25kX2R2YyAqZHZjID0gcnNuZF9tb2RfdG9fZHZjKG1vZCk7CisJdTMyIGFkaW5yID0gMDsKKwl1MzIgZHZ1Y3IgPSAwOworCXUzMiB2cmN0ciA9IDA7CisJdTMyIHZycGRyID0gMDsKKwl1MzIgdnJkYnIgPSAwOworCisJYWRpbnIgPSByc25kX2dldF9hZGlucl9iaXQobW9kLCBpbykgfAorCQlyc25kX2dldF9hZGlucl9jaGFuKG1vZCwgaW8pOworCisJLyogRW5hYmxlIERpZ2l0YWwgVm9sdW1lLCBaZXJvIENyb3NzIE11dGUgTW9kZSAqLworCWR2dWNyIHw9IDB4MTAxOwogCiAJLyogRW5hYmxlIFJhbXAgKi8KIAlpZiAoZHZjLT5yZW4udmFsKSB7CiAJCWR2dWNyIHw9IDB4MTA7CiAKLQkJLyogRGlnaXRhbCBWb2x1bWUgTWF4ICovCi0JCWZvciAoaSA9IDA7IGkgPCBSU05EX0RWQ19DSEFOTkVMUzsgaSsrKQotCQkJdmFsW2ldID0gZHZjLT52b2x1bWUuY2ZnLm1heDsKLQotCQlyc25kX21vZF93cml0ZShtb2QsIERWQ19WUkNUUiwgMHhmZik7Ci0JCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX1ZSUERSLCBkdmMtPnJ1cC52YWwgPDwgOCB8Ci0JCQkJCSAgICAgICBkdmMtPnJkb3duLnZhbCk7CiAJCS8qCiAJCSAqIEZJWE1FICEhCiAJCSAqIHVzZSBzY2FsZS1kb3duZWQgRGlnaXRhbCBWb2x1bWUKIAkJICogYXMgVm9sdW1lIFJhbXAKIAkJICogN0YgRkZGRiAtPiAzRkYKIAkJICovCi0JCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX1ZSREJSLAotCQkJICAgICAgIDB4M2ZmIC0gKGR2Yy0+dm9sdW1lLnZhbFswXSA+PiAxMykpOwotCi0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IFJTTkRfRFZDX0NIQU5ORUxTOyBpKyspCi0JCQl2YWxbaV0gPSBkdmMtPnZvbHVtZS52YWxbaV07CisJCXZyY3RyID0gMHhmZjsKKwkJdnJwZHIgPSByc25kX2R2Y19nZXRfdnJwZHIoZHZjKTsKKwkJdnJkYnIgPSByc25kX2R2Y19nZXRfdnJkYnIoZHZjKTsKIAl9CiAKLQkvKiBFbmFibGUgRGlnaXRhbCBWb2x1bWUgKi8KLQlkdnVjciB8PSAweDEwMDsKLQlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0wwUiwgdmFsWzBdKTsKLQlyc25kX21vZF93cml0ZShtb2QsIERWQ19WT0wxUiwgdmFsWzFdKTsKKwkvKiBJbml0aWFsaXplIG9wZXJhdGlvbiAqLworCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX0RWVUlSLCAxKTsKIAotCS8qICBFbmFibGUgTXV0ZSAqLwotCWlmIChtdXRlKSB7Ci0JCWR2dWNyIHw9IDB4MTsKLQkJcnNuZF9tb2Rfd3JpdGUobW9kLCBEVkNfWkNNQ1IsIG11dGUpOwotCX0KLQorCS8qIEdlbmVyYWwgSW5mb3JtYXRpb24gKi8KKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19BRElOUiwgYWRpbnIpOwogCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX0RWVUNSLCBkdnVjcik7CiAKKwkvKiBWb2x1bWUgUmFtcCBQYXJhbWV0ZXIgKi8KKwlyc25kX21vZF93cml0ZShtb2QsIERWQ19WUkNUUiwgdnJjdHIpOworCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX1ZSUERSLCB2cnBkcik7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBEVkNfVlJEQlIsIHZyZGJyKTsKKworCS8qIERpZ2l0YWwgVm9sdW1lIEZ1bmN0aW9uIFBhcmFtZXRlciAqLworCXJzbmRfZHZjX3ZvbHVtZV9wYXJhbWV0ZXIoaW8sIG1vZCk7CisKKwkvKiBjYW5jZWwgb3BlcmF0aW9uICovCisJcnNuZF9tb2Rfd3JpdGUobW9kLCBEVkNfRFZVSVIsIDApOworfQorCitzdGF0aWMgdm9pZCByc25kX2R2Y192b2x1bWVfdXBkYXRlKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJCSAgIHN0cnVjdCByc25kX21vZCAqbW9kKQoreworCXN0cnVjdCByc25kX2R2YyAqZHZjID0gcnNuZF9tb2RfdG9fZHZjKG1vZCk7CisJdTMyIHpjbWNyID0gMDsKKwl1MzIgdnJwZHIgPSAwOworCXUzMiB2cmRiciA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHZjLT5tdXRlLmNmZy5zaXplOyBpKyspCisJCXpjbWNyIHw9ICghIWR2Yy0+bXV0ZS5jZmcudmFsW2ldKSA8PCBpOworCisJaWYgKGR2Yy0+cmVuLnZhbCkgeworCQl2cnBkciA9IHJzbmRfZHZjX2dldF92cnBkcihkdmMpOworCQl2cmRiciA9IHJzbmRfZHZjX2dldF92cmRicihkdmMpOworCX0KKworCS8qIERpc2FibGUgRFZDIFJlZ2lzdGVyIGFjY2VzcyAqLworCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX0RWVUVSLCAwKTsKKworCS8qIFplcm8gQ3Jvc3MgTXV0ZSBGdW5jdGlvbiAqLworCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX1pDTUNSLCB6Y21jcik7CisKKwkvKiBWb2x1bWUgUmFtcCBGdW5jdGlvbiAqLworCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX1ZSUERSLCB2cnBkcik7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBEVkNfVlJEQlIsIHZyZGJyKTsKKwkvKiBhZGQgRFZDX1ZSV1RSIGhlcmUgKi8KKworCS8qIERpZ2l0YWwgVm9sdW1lIEZ1bmN0aW9uIFBhcmFtZXRlciAqLworCXJzbmRfZHZjX3ZvbHVtZV9wYXJhbWV0ZXIoaW8sIG1vZCk7CisKIAkvKiBFbmFibGUgRFZDIFJlZ2lzdGVyIGFjY2VzcyAqLwogCXJzbmRfbW9kX3dyaXRlKG1vZCwgRFZDX0RWVUVSLCAxKTsKIH0KIAotc3RhdGljIGludCByc25kX2R2Y19yZW1vdmVfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCQlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKLQkJCQlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQorc3RhdGljIGludCByc25kX2R2Y19wcm9iZV8oc3RydWN0IHJzbmRfbW9kICptb2QsCisJCQkgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCSAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIHJzbmRfY21kX2F0dGFjaChpbywgcnNuZF9tb2RfaWQobW9kKSk7Cit9CisKK3N0YXRpYyBpbnQgcnNuZF9kdmNfcmVtb3ZlXyhzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKKwkJCSAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCSAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCByc25kX2R2YyAqZHZjID0gcnNuZF9tb2RfdG9fZHZjKG1vZCk7CiAKQEAgLTE1NSwxOSArMjE4LDEyIEBACiB7CiAJcnNuZF9tb2RfcG93ZXJfb24obW9kKTsKIAotCXJzbmRfZHZjX3NvZnRfcmVzZXQobW9kKTsKKwlyc25kX2R2Y19hY3RpdmF0aW9uKG1vZCk7CiAKLQlyc25kX2R2Y19pbml0aWFsaXplX2xvY2sobW9kKTsKKwlyc25kX2R2Y192b2x1bWVfaW5pdChpbywgbW9kKTsKIAotCXJzbmRfcGF0aF9wYXJzZShwcml2LCBpbyk7Ci0KLQlyc25kX21vZF93cml0ZShtb2QsIERWQ19BRElOUiwgcnNuZF9nZXRfYWRpbnJfYml0KG1vZCwgaW8pKTsKLQotCS8qIGNoMC9jaDEgVm9sdW1lICovCiAJcnNuZF9kdmNfdm9sdW1lX3VwZGF0ZShpbywgbW9kKTsKIAotCXJzbmRfYWRnX3NldF9jbWRfdGltc2VsX2dlbjIobW9kLCBpbyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc1LDM3ICsyMzEsMjAgQEAKIAkJCSBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCSBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogeworCXJzbmRfZHZjX2hhbHQobW9kKTsKKwogCXJzbmRfbW9kX3Bvd2VyX29mZihtb2QpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnNuZF9kdmNfc3RhcnQoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAotCQkJICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCXJzbmRfZHZjX2luaXRpYWxpemVfdW5sb2NrKG1vZCk7Ci0KLQlyc25kX21vZF93cml0ZShtb2QsIENNRF9DVFJMLCAweDEwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJzbmRfZHZjX3N0b3Aoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCi0JCQkgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKLXsKLQlyc25kX21vZF93cml0ZShtb2QsIENNRF9DVFJMLCAwKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHJzbmRfZHZjX3BjbV9uZXcoc3RydWN0IHJzbmRfbW9kICptb2QsCiAJCQkgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCiAJCQkgICAgc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3QgcnNuZF9kdmMgKmR2YyA9IHJzbmRfbW9kX3RvX2R2Yyhtb2QpOwogCWludCBpc19wbGF5ID0gcnNuZF9pb19pc19wbGF5KGlvKTsKKwlpbnQgc2xvdHMgPSByc25kX2dldF9zbG90KGlvKTsKIAlpbnQgcmV0OwogCiAJLyogVm9sdW1lICovCkBAIC0yMTMsNyArMjUyLDggQEAKIAkJCWlzX3BsYXkgPwogCQkJIkRWQyBPdXQgUGxheWJhY2sgVm9sdW1lIiA6ICJEVkMgSW4gQ2FwdHVyZSBWb2x1bWUiLAogCQkJcnNuZF9kdmNfdm9sdW1lX3VwZGF0ZSwKLQkJCSZkdmMtPnZvbHVtZSwgMHgwMDgwMDAwMCAtIDEpOworCQkJJmR2Yy0+dm9sdW1lLCBzbG90cywKKwkJCTB4MDA4MDAwMDAgLSAxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjIyLDcgKzI2Miw4IEBACiAJCQlpc19wbGF5ID8KIAkJCSJEVkMgT3V0IE11dGUgU3dpdGNoIiA6ICJEVkMgSW4gTXV0ZSBTd2l0Y2giLAogCQkJcnNuZF9kdmNfdm9sdW1lX3VwZGF0ZSwKLQkJCSZkdmMtPm11dGUsIDEpOworCQkJJmR2Yy0+bXV0ZSwgIHNsb3RzLAorCQkJMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTI2OSwxMSArMzEwLDEwIEBACiBzdGF0aWMgc3RydWN0IHJzbmRfbW9kX29wcyByc25kX2R2Y19vcHMgPSB7CiAJLm5hbWUJCT0gRFZDX05BTUUsCiAJLmRtYV9yZXEJPSByc25kX2R2Y19kbWFfcmVxLAotCS5yZW1vdmUJCT0gcnNuZF9kdmNfcmVtb3ZlX2dlbjIsCisJLnByb2JlCQk9IHJzbmRfZHZjX3Byb2JlXywKKwkucmVtb3ZlCQk9IHJzbmRfZHZjX3JlbW92ZV8sCiAJLmluaXQJCT0gcnNuZF9kdmNfaW5pdCwKIAkucXVpdAkJPSByc25kX2R2Y19xdWl0LAotCS5zdGFydAkJPSByc25kX2R2Y19zdGFydCwKLQkuc3RvcAkJPSByc25kX2R2Y19zdG9wLAogCS5wY21fbmV3CT0gcnNuZF9kdmNfcGNtX25ldywKIH07CiAKQEAgLTI4Miw1MCArMzIyLDEzIEBACiAJaWYgKFdBUk5fT04oaWQgPCAwIHx8IGlkID49IHJzbmRfZHZjX25yKHByaXYpKSkKIAkJaWQgPSAwOwogCi0JcmV0dXJuIHJzbmRfbW9kX2dldCgoc3RydWN0IHJzbmRfZHZjICopKHByaXYtPmR2YykgKyBpZCk7CisJcmV0dXJuIHJzbmRfbW9kX2dldChyc25kX2R2Y19nZXQocHJpdiwgaWQpKTsKIH0KIAotc3RhdGljIHZvaWQgcnNuZF9vZl9wYXJzZV9kdmMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCByc25kX29mX2RhdGEgKm9mX2RhdGEsCi0JCQkgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQoraW50IHJzbmRfZHZjX3Byb2JlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwotCXN0cnVjdCByc25kX2R2Y19wbGF0Zm9ybV9pbmZvICpkdmNfaW5mbzsKLQlzdHJ1Y3QgcmNhcl9zbmRfaW5mbyAqaW5mbyA9IHJzbmRfcHJpdl90b19pbmZvKHByaXYpOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0JaW50IG5yOwotCi0JaWYgKCFvZl9kYXRhKQotCQlyZXR1cm47Ci0KLQlub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LT5vZl9ub2RlLCAicmNhcl9zb3VuZCxkdmMiKTsKLQlpZiAoIW5vZGUpCi0JCXJldHVybjsKLQotCW5yID0gb2ZfZ2V0X2NoaWxkX2NvdW50KG5vZGUpOwotCWlmICghbnIpCi0JCWdvdG8gcnNuZF9vZl9wYXJzZV9kdmNfZW5kOwotCi0JZHZjX2luZm8gPSBkZXZtX2t6YWxsb2MoZGV2LAotCQkJCXNpemVvZihzdHJ1Y3QgcnNuZF9kdmNfcGxhdGZvcm1faW5mbykgKiBuciwKLQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWR2Y19pbmZvKSB7Ci0JCWRldl9lcnIoZGV2LCAiZHZjIGluZm8gYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCWdvdG8gcnNuZF9vZl9wYXJzZV9kdmNfZW5kOwotCX0KLQotCWluZm8tPmR2Y19pbmZvCQk9IGR2Y19pbmZvOwotCWluZm8tPmR2Y19pbmZvX25yCT0gbnI7Ci0KLXJzbmRfb2ZfcGFyc2VfZHZjX2VuZDoKLQlvZl9ub2RlX3B1dChub2RlKTsKLX0KLQotaW50IHJzbmRfZHZjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCSAgIGNvbnN0IHN0cnVjdCByc25kX29mX2RhdGEgKm9mX2RhdGEsCi0JCSAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IHJjYXJfc25kX2luZm8gKmluZm8gPSByc25kX3ByaXZfdG9faW5mbyhwcml2KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJc3RydWN0IHJzbmRfZHZjICpkdmM7CiAJc3RydWN0IGNsayAqY2xrOwpAQCAtMzM2LDQwICszMzksNTQgQEAKIAlpZiAocnNuZF9pc19nZW4xKHByaXYpKQogCQlyZXR1cm4gMDsKIAotCXJzbmRfb2ZfcGFyc2VfZHZjKHBkZXYsIG9mX2RhdGEsIHByaXYpOworCW5vZGUgPSByc25kX2R2Y19vZl9ub2RlKHByaXYpOworCWlmICghbm9kZSkKKwkJcmV0dXJuIDA7IC8qIG5vdCB1c2VkIGlzIG5vdCBlcnJvciAqLwogCi0JbnIgPSBpbmZvLT5kdmNfaW5mb19ucjsKLQlpZiAoIW5yKQotCQlyZXR1cm4gMDsKKwluciA9IG9mX2dldF9jaGlsZF9jb3VudChub2RlKTsKKwlpZiAoIW5yKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcnNuZF9kdmNfcHJvYmVfZG9uZTsKKwl9CiAKIAlkdmMJPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmR2YykgKiBuciwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkdmMpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghZHZjKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcnNuZF9kdmNfcHJvYmVfZG9uZTsKKwl9CiAKIAlwcml2LT5kdmNfbnIJPSBucjsKIAlwcml2LT5kdmMJPSBkdmM7CiAKLQlmb3JfZWFjaF9yc25kX2R2YyhkdmMsIHByaXYsIGkpIHsKKwlpID0gMDsKKwlyZXQgPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgbnApIHsKKwkJZHZjID0gcnNuZF9kdmNfZ2V0KHByaXYsIGkpOworCiAJCXNucHJpbnRmKG5hbWUsIFJTTkRfRFZDX05BTUVfU0laRSwgIiVzLiVkIiwKIAkJCSBEVkNfTkFNRSwgaSk7CiAKIAkJY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgbmFtZSk7Ci0JCWlmIChJU19FUlIoY2xrKSkKLQkJCXJldHVybiBQVFJfRVJSKGNsayk7Ci0KLQkJZHZjLT5pbmZvID0gJmluZm8tPmR2Y19pbmZvW2ldOworCQlpZiAoSVNfRVJSKGNsaykpIHsKKwkJCXJldCA9IFBUUl9FUlIoY2xrKTsKKwkJCWdvdG8gcnNuZF9kdmNfcHJvYmVfZG9uZTsKKwkJfQogCiAJCXJldCA9IHJzbmRfbW9kX2luaXQocHJpdiwgcnNuZF9tb2RfZ2V0KGR2YyksICZyc25kX2R2Y19vcHMsCiAJCQkgICAgICBjbGssIFJTTkRfTU9EX0RWQywgaSk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byByc25kX2R2Y19wcm9iZV9kb25lOworCisJCWkrKzsKIAl9CiAKLQlyZXR1cm4gMDsKK3JzbmRfZHZjX3Byb2JlX2RvbmU6CisJb2Zfbm9kZV9wdXQobm9kZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi12b2lkIHJzbmRfZHZjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit2b2lkIHJzbmRfZHZjX3JlbW92ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCByc25kX2R2YyAqZHZjOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3JjYXIvZ2VuLmMgYi9zb3VuZC9zb2Mvc2gvcmNhci9nZW4uYwppbmRleCA3NmRhNzYyLi5lYTI0MjQ3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvcmNhci9nZW4uYworKysgYi9zb3VuZC9zb2Mvc2gvcmNhci9nZW4uYwpAQCAtMzEsMjkgKzMxLDMzIEBACiAKIAkvKiBSU05EX1JFR19NQVggYmFzZSAqLwogCXN0cnVjdCByZWdtYXBfZmllbGQgKnJlZ3NbUlNORF9SRUdfTUFYXTsKKwljb25zdCBjaGFyICpyZWdfbmFtZVtSU05EX1JFR19NQVhdOwogfTsKIAogI2RlZmluZSByc25kX3ByaXZfdG9fZ2VuKHApCSgoc3RydWN0IHJzbmRfZ2VuICopKHApLT5nZW4pCisjZGVmaW5lIHJzbmRfcmVnX25hbWUoZ2VuLCBpZCkJKChnZW4pLT5yZWdfbmFtZVtpZF0pCiAKIHN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIHsKIAlpbnQgaWR4OwogCXVuc2lnbmVkIGludCByZWdfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBpZF9vZmZzZXQ7CisJY29uc3QgY2hhciAqcmVnX25hbWU7CiB9OwogCi0jZGVmaW5lIFJTTkRfUkVHX1NFVChpZCwgb2Zmc2V0LCBfaWRfb2Zmc2V0KQlcCisjZGVmaW5lIFJTTkRfUkVHX1NFVChpZCwgb2Zmc2V0LCBfaWRfb2Zmc2V0LCBuKQlcCiB7CQkJCQkJXAogCS5pZHggPSBpZCwJCQkJXAogCS5yZWdfb2Zmc2V0ID0gb2Zmc2V0LAkJCVwKIAkuaWRfb2Zmc2V0ID0gX2lkX29mZnNldCwJCVwKKwkucmVnX25hbWUgPSBuLAkJCQlcCiB9CiAvKiBzaW5nbGUgYWRkcmVzcyBtYXBwaW5nICovCiAjZGVmaW5lIFJTTkRfR0VOX1NfUkVHKGlkLCBvZmZzZXQpCVwKLQlSU05EX1JFR19TRVQoUlNORF9SRUdfIyNpZCwgb2Zmc2V0LCAwKQorCVJTTkRfUkVHX1NFVChSU05EX1JFR18jI2lkLCBvZmZzZXQsIDAsICNpZCkKIAogLyogbXVsdGkgYWRkcmVzcyBtYXBwaW5nICovCiAjZGVmaW5lIFJTTkRfR0VOX01fUkVHKGlkLCBvZmZzZXQsIF9pZF9vZmZzZXQpCVwKLQlSU05EX1JFR19TRVQoUlNORF9SRUdfIyNpZCwgb2Zmc2V0LCBfaWRfb2Zmc2V0KQorCVJTTkRfUkVHX1NFVChSU05EX1JFR18jI2lkLCBvZmZzZXQsIF9pZF9vZmZzZXQsICNpZCkKIAogLyoKICAqCQliYXNpYyBmdW5jdGlvbgpAQCAtODMsOCArODcsOSBAQAogCiAJcmVnbWFwX2ZpZWxkc19yZWFkKGdlbi0+cmVnc1tyZWddLCByc25kX21vZF9pZChtb2QpLCAmdmFsKTsKIAotCWRldl9kYmcoZGV2LCAiciAlc1slZF0gLSAlNGQgOiAlMDh4XG4iLAotCQlyc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksIHJlZywgdmFsKTsKKwlkZXZfZGJnKGRldiwgInIgJXNbJWRdIC0gJS0xOHMgKCU0ZCkgOiAlMDh4XG4iLAorCQlyc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksCisJCXJzbmRfcmVnX25hbWUoZ2VuLCByZWcpLCByZWcsIHZhbCk7CiAKIAlyZXR1cm4gdmFsOwogfQpAQCAtOTksMTAgKzEwNCwxMSBAQAogCWlmICghcnNuZF9pc19hY2Nlc3NpYmxlX3JlZyhwcml2LCBnZW4sIHJlZykpCiAJCXJldHVybjsKIAotCWRldl9kYmcoZGV2LCAidyAlc1slZF0gLSAlNGQgOiAlMDh4XG4iLAotCQlyc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksIHJlZywgZGF0YSk7Ci0KIAlyZWdtYXBfZmllbGRzX3dyaXRlKGdlbi0+cmVnc1tyZWddLCByc25kX21vZF9pZChtb2QpLCBkYXRhKTsKKworCWRldl9kYmcoZGV2LCAidyAlc1slZF0gLSAlLTE4cyAoJTRkKSA6ICUwOHhcbiIsCisJCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSwKKwkJcnNuZF9yZWdfbmFtZShnZW4sIHJlZyksIHJlZywgZGF0YSk7CiB9CiAKIHZvaWQgcnNuZF9mb3JjZV93cml0ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LApAQCAtMTE1LDEwICsxMjEsMTEgQEAKIAlpZiAoIXJzbmRfaXNfYWNjZXNzaWJsZV9yZWcocHJpdiwgZ2VuLCByZWcpKQogCQlyZXR1cm47CiAKLQlkZXZfZGJnKGRldiwgIncgJXNbJWRdIC0gJTRkIDogJTA4eFxuIiwKLQkJcnNuZF9tb2RfbmFtZShtb2QpLCByc25kX21vZF9pZChtb2QpLCByZWcsIGRhdGEpOwotCiAJcmVnbWFwX2ZpZWxkc19mb3JjZV93cml0ZShnZW4tPnJlZ3NbcmVnXSwgcnNuZF9tb2RfaWQobW9kKSwgZGF0YSk7CisKKwlkZXZfZGJnKGRldiwgIncgJXNbJWRdIC0gJS0xOHMgKCU0ZCkgOiAlMDh4XG4iLAorCQlyc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksCisJCXJzbmRfcmVnX25hbWUoZ2VuLCByZWcpLCByZWcsIGRhdGEpOwogfQogCiB2b2lkIHJzbmRfYnNldChzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LCBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKQEAgLTEzMCwxMSArMTM3LDEzIEBACiAJaWYgKCFyc25kX2lzX2FjY2Vzc2libGVfcmVnKHByaXYsIGdlbiwgcmVnKSkKIAkJcmV0dXJuOwogCi0JZGV2X2RiZyhkZXYsICJiICVzWyVkXSAtICU0ZCA6ICUwOHgvJTA4eFxuIiwKLQkJcnNuZF9tb2RfbmFtZShtb2QpLCByc25kX21vZF9pZChtb2QpLCByZWcsIGRhdGEsIG1hc2spOwotCiAJcmVnbWFwX2ZpZWxkc191cGRhdGVfYml0cyhnZW4tPnJlZ3NbcmVnXSwgcnNuZF9tb2RfaWQobW9kKSwKIAkJCQkgIG1hc2ssIGRhdGEpOworCisJZGV2X2RiZyhkZXYsICJiICVzWyVkXSAtICUtMThzICglNGQpIDogJTA4eC8lMDh4XG4iLAorCQlyc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksCisJCXJzbmRfcmVnX25hbWUoZ2VuLCByZWcpLCByZWcsIGRhdGEsIG1hc2spOworCiB9CiAKIHBoeXNfYWRkcl90IHJzbmRfZ2VuX2dldF9waHlfYWRkcihzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LCBpbnQgcmVnX2lkKQpAQCAtMTUwLDcgKzE1OSw3IEBACiAJCQkJIGludCBpZF9zaXplLAogCQkJCSBpbnQgcmVnX2lkLAogCQkJCSBjb25zdCBjaGFyICpuYW1lLAotCQkJCSBzdHJ1Y3QgcnNuZF9yZWdtYXBfZmllbGRfY29uZiAqY29uZiwKKwkJCQkgY29uc3Qgc3RydWN0IHJzbmRfcmVnbWFwX2ZpZWxkX2NvbmYgKmNvbmYsCiAJCQkJIGludCBjb25mX3NpemUpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHJzbmRfcHJpdl90b19wZGV2KHByaXYpOwpAQCAtMjAzLDYgKzIxMiw3IEBACiAKIAkJLyogUlNORF9SRUdfTUFYIGJhc2UgKi8KIAkJZ2VuLT5yZWdzW2NvbmZbaV0uaWR4XSA9IHJlZ3M7CisJCWdlbi0+cmVnX25hbWVbY29uZltpXS5pZHhdID0gY29uZltpXS5yZWdfbmFtZTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIxMSwzMSArMjIxLDM3IEBACiAvKgogICoJCUdlbjIKICAqLwotc3RhdGljIGludCByc25kX2dlbjJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCSAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IHJzbmRfZ2VuMl9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewotCXN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIGNvbmZfc3NpdVtdID0geworCWNvbnN0IHN0YXRpYyBzdHJ1Y3QgcnNuZF9yZWdtYXBfZmllbGRfY29uZiBjb25mX3NzaXVbXSA9IHsKIAkJUlNORF9HRU5fU19SRUcoU1NJX01PREUwLAkweDgwMCksCiAJCVJTTkRfR0VOX1NfUkVHKFNTSV9NT0RFMSwJMHg4MDQpLAorCQlSU05EX0dFTl9TX1JFRyhTU0lfTU9ERTIsCTB4ODA4KSwKKwkJUlNORF9HRU5fU19SRUcoU1NJX0NPTlRST0wsCTB4ODEwKSwKKwogCQkvKiBGSVhNRTogaXQgbmVlZHMgU1NJX01PREUyLzMgaW4gdGhlIGZ1dHVyZSAqLwogCQlSU05EX0dFTl9NX1JFRyhTU0lfQlVTSUZfTU9ERSwJMHgwLAkweDgwKSwKIAkJUlNORF9HRU5fTV9SRUcoU1NJX0JVU0lGX0FESU5SLAkweDQsCTB4ODApLAogCQlSU05EX0dFTl9NX1JFRyhTU0lfQlVTSUZfREFMSUdOLDB4OCwJMHg4MCksCisJCVJTTkRfR0VOX01fUkVHKFNTSV9NT0RFLAkweGMsCTB4ODApLAogCQlSU05EX0dFTl9NX1JFRyhTU0lfQ1RSTCwJMHgxMCwJMHg4MCksCiAJCVJTTkRfR0VOX01fUkVHKFNTSV9JTlRfRU5BQkxFLAkweDE4LAkweDgwKSwKIAl9OwotCXN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIGNvbmZfc2N1W10gPSB7Ci0JCVJTTkRfR0VOX01fUkVHKFNSQ19CVVNJRl9NT0RFLAkweDAsCTB4MjApLAorCisJY29uc3Qgc3RhdGljIHN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIGNvbmZfc2N1W10gPSB7CisJCVJTTkRfR0VOX01fUkVHKFNSQ19JX0JVU0lGX01PREUsMHgwLAkweDIwKSwKKwkJUlNORF9HRU5fTV9SRUcoU1JDX09fQlVTSUZfTU9ERSwweDQsCTB4MjApLAogCQlSU05EX0dFTl9NX1JFRyhTUkNfQlVTSUZfREFMSUdOLDB4OCwJMHgyMCksCiAJCVJTTkRfR0VOX01fUkVHKFNSQ19ST1VURV9NT0RFMCwJMHhjLAkweDIwKSwKIAkJUlNORF9HRU5fTV9SRUcoU1JDX0NUUkwsCTB4MTAsCTB4MjApLAogCQlSU05EX0dFTl9NX1JFRyhTUkNfSU5UX0VOQUJMRTAsCTB4MTgsCTB4MjApLAorCQlSU05EX0dFTl9NX1JFRyhDTURfQlVTSUZfREFMSUdOLDB4MTg4LAkweDIwKSwKIAkJUlNORF9HRU5fTV9SRUcoQ01EX1JPVVRFX1NMQ1QsCTB4MThjLAkweDIwKSwKIAkJUlNORF9HRU5fTV9SRUcoQ01EX0NUUkwsCTB4MTkwLAkweDIwKSwKIAkJUlNORF9HRU5fU19SRUcoU0NVX1NZU19TVEFUVVMwLAkweDFjOCksCiAJCVJTTkRfR0VOX1NfUkVHKFNDVV9TWVNfSU5UX0VOMCwJMHgxY2MpLAogCQlSU05EX0dFTl9TX1JFRyhTQ1VfU1lTX1NUQVRVUzEsCTB4MWQwKSwKLQkJUlNORF9HRU5fU19SRUcoU0NVX1NZU19JTlRfRU4xLAkweDFjNCksCisJCVJTTkRfR0VOX1NfUkVHKFNDVV9TWVNfSU5UX0VOMSwJMHgxZDQpLAogCQlSU05EX0dFTl9NX1JFRyhTUkNfU1dSU1IsCTB4MjAwLAkweDQwKSwKIAkJUlNORF9HRU5fTV9SRUcoU1JDX1NSQ0lSLAkweDIwNCwJMHg0MCksCiAJCVJTTkRfR0VOX01fUkVHKFNSQ19BRElOUiwJMHgyMTQsCTB4NDApLApAQCAtMjY2LDkgKzI4MiwxNSBAQAogCQlSU05EX0dFTl9NX1JFRyhEVkNfVlJEQlIsCTB4ZTIwLAkweDEwMCksCiAJCVJTTkRfR0VOX01fUkVHKERWQ19WT0wwUiwJMHhlMjgsCTB4MTAwKSwKIAkJUlNORF9HRU5fTV9SRUcoRFZDX1ZPTDFSLAkweGUyYywJMHgxMDApLAorCQlSU05EX0dFTl9NX1JFRyhEVkNfVk9MMlIsCTB4ZTMwLAkweDEwMCksCisJCVJTTkRfR0VOX01fUkVHKERWQ19WT0wzUiwJMHhlMzQsCTB4MTAwKSwKKwkJUlNORF9HRU5fTV9SRUcoRFZDX1ZPTDRSLAkweGUzOCwJMHgxMDApLAorCQlSU05EX0dFTl9NX1JFRyhEVkNfVk9MNVIsCTB4ZTNjLAkweDEwMCksCisJCVJTTkRfR0VOX01fUkVHKERWQ19WT0w2UiwJMHhlNDAsCTB4MTAwKSwKKwkJUlNORF9HRU5fTV9SRUcoRFZDX1ZPTDdSLAkweGU0NCwJMHgxMDApLAogCQlSU05EX0dFTl9NX1JFRyhEVkNfRFZVRVIsCTB4ZTQ4LAkweDEwMCksCiAJfTsKLQlzdHJ1Y3QgcnNuZF9yZWdtYXBfZmllbGRfY29uZiBjb25mX2FkZ1tdID0geworCWNvbnN0IHN0YXRpYyBzdHJ1Y3QgcnNuZF9yZWdtYXBfZmllbGRfY29uZiBjb25mX2FkZ1tdID0gewogCQlSU05EX0dFTl9TX1JFRyhCUlJBLAkJMHgwMCksCiAJCVJTTkRfR0VOX1NfUkVHKEJSUkIsCQkweDA0KSwKIAkJUlNORF9HRU5fU19SRUcoU1NJQ0tSLAkJMHgwOCksCkBAIC0yODgsNyArMzEwLDcgQEAKIAkJUlNORF9HRU5fU19SRUcoU1JDT1VUX1RJTVNFTDQsCTB4NTgpLAogCQlSU05EX0dFTl9TX1JFRyhDTURPVVRfVElNU0VMLAkweDVjKSwKIAl9OwotCXN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIGNvbmZfc3NpW10gPSB7CisJY29uc3Qgc3RhdGljIHN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIGNvbmZfc3NpW10gPSB7CiAJCVJTTkRfR0VOX01fUkVHKFNTSUNSLAkJMHgwMCwJMHg0MCksCiAJCVJTTkRfR0VOX01fUkVHKFNTSVNSLAkJMHgwNCwJMHg0MCksCiAJCVJTTkRfR0VOX01fUkVHKFNTSVREUiwJCTB4MDgsCTB4NDApLApAQCAtMzE3LDY1ICszMzksMzAgQEAKICAqCQlHZW4xCiAgKi8KIAotc3RhdGljIGludCByc25kX2dlbjFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCSAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IHJzbmRfZ2VuMV9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewotCXN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIGNvbmZfc3J1W10gPSB7Ci0JCVJTTkRfR0VOX1NfUkVHKFNSQ19ST1VURV9TRUwsCTB4MDApLAotCQlSU05EX0dFTl9TX1JFRyhTUkNfVE1HX1NFTDAsCTB4MDgpLAotCQlSU05EX0dFTl9TX1JFRyhTUkNfVE1HX1NFTDEsCTB4MGMpLAotCQlSU05EX0dFTl9TX1JFRyhTUkNfVE1HX1NFTDIsCTB4MTApLAotCQlSU05EX0dFTl9TX1JFRyhTUkNfUk9VVEVfQ1RSTCwJMHhjMCksCi0JCVJTTkRfR0VOX1NfUkVHKFNTSV9NT0RFMCwJMHhEMCksCi0JCVJTTkRfR0VOX1NfUkVHKFNTSV9NT0RFMSwJMHhENCksCi0JCVJTTkRfR0VOX01fUkVHKFNSQ19CVVNJRl9NT0RFLAkweDIwLAkweDQpLAotCQlSU05EX0dFTl9NX1JFRyhTUkNfUk9VVEVfTU9ERTAsCTB4NTAsCTB4OCksCi0JCVJTTkRfR0VOX01fUkVHKFNSQ19TV1JTUiwJMHgyMDAsCTB4NDApLAotCQlSU05EX0dFTl9NX1JFRyhTUkNfU1JDSVIsCTB4MjA0LAkweDQwKSwKLQkJUlNORF9HRU5fTV9SRUcoU1JDX0FESU5SLAkweDIxNCwJMHg0MCksCi0JCVJTTkRfR0VOX01fUkVHKFNSQ19JRlNDUiwJMHgyMWMsCTB4NDApLAotCQlSU05EX0dFTl9NX1JFRyhTUkNfSUZTVlIsCTB4MjIwLAkweDQwKSwKLQkJUlNORF9HRU5fTV9SRUcoU1JDX1NSQ0NSLAkweDIyNCwJMHg0MCksCi0JCVJTTkRfR0VOX01fUkVHKFNSQ19NTkZTUiwJMHgyMjgsCTB4NDApLAotCQkvKgotCQkgKiBBREQgVVMKLQkJICoKLQkJICogU1JDX1NUQVRVUwotCQkgKiBTUkNfSU5UX0VOCi0JCSAqIFNDVV9TWVNfU1RBVFVTMAotCQkgKiBTQ1VfU1lTX1NUQVRVUzEKLQkJICogU0NVX1NZU19JTlRfRU4wCi0JCSAqIFNDVV9TWVNfSU5UX0VOMQotCQkgKi8KLQl9OwotCXN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIGNvbmZfYWRnW10gPSB7CisJY29uc3Qgc3RhdGljIHN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIGNvbmZfYWRnW10gPSB7CiAJCVJTTkRfR0VOX1NfUkVHKEJSUkEsCQkweDAwKSwKIAkJUlNORF9HRU5fU19SRUcoQlJSQiwJCTB4MDQpLAogCQlSU05EX0dFTl9TX1JFRyhTU0lDS1IsCQkweDA4KSwKIAkJUlNORF9HRU5fU19SRUcoQVVESU9fQ0xLX1NFTDAsCTB4MGMpLAogCQlSU05EX0dFTl9TX1JFRyhBVURJT19DTEtfU0VMMSwJMHgxMCksCi0JCVJTTkRfR0VOX1NfUkVHKEFVRElPX0NMS19TRUwzLAkweDE4KSwKLQkJUlNORF9HRU5fU19SRUcoQVVESU9fQ0xLX1NFTDQsCTB4MWMpLAotCQlSU05EX0dFTl9TX1JFRyhBVURJT19DTEtfU0VMNSwJMHgyMCksCiAJfTsKLQlzdHJ1Y3QgcnNuZF9yZWdtYXBfZmllbGRfY29uZiBjb25mX3NzaVtdID0geworCWNvbnN0IHN0YXRpYyBzdHJ1Y3QgcnNuZF9yZWdtYXBfZmllbGRfY29uZiBjb25mX3NzaVtdID0gewogCQlSU05EX0dFTl9NX1JFRyhTU0lDUiwJCTB4MDAsCTB4NDApLAogCQlSU05EX0dFTl9NX1JFRyhTU0lTUiwJCTB4MDQsCTB4NDApLAogCQlSU05EX0dFTl9NX1JFRyhTU0lURFIsCQkweDA4LAkweDQwKSwKIAkJUlNORF9HRU5fTV9SRUcoU1NJUkRSLAkJMHgwYywJMHg0MCksCiAJCVJTTkRfR0VOX01fUkVHKFNTSVdTUiwJCTB4MjAsCTB4NDApLAogCX07Ci0JaW50IHJldF9zcnU7CiAJaW50IHJldF9hZGc7CiAJaW50IHJldF9zc2k7CiAKLQlyZXRfc3J1ICA9IHJzbmRfZ2VuX3JlZ21hcF9pbml0KHByaXYsIDksIFJTTkRfR0VOMV9TUlUsICJzcnUiLCBjb25mX3NydSk7CiAJcmV0X2FkZyAgPSByc25kX2dlbl9yZWdtYXBfaW5pdChwcml2LCA5LCBSU05EX0dFTjFfQURHLCAiYWRnIiwgY29uZl9hZGcpOwogCXJldF9zc2kgID0gcnNuZF9nZW5fcmVnbWFwX2luaXQocHJpdiwgOSwgUlNORF9HRU4xX1NTSSwgInNzaSIsIGNvbmZfc3NpKTsKLQlpZiAocmV0X3NydSAgPCAwIHx8Ci0JICAgIHJldF9hZGcgIDwgMCB8fAorCWlmIChyZXRfYWRnICA8IDAgfHwKIAkgICAgcmV0X3NzaSAgPCAwKQotCQlyZXR1cm4gcmV0X3NydSB8IHJldF9hZGcgfCByZXRfc3NpOworCQlyZXR1cm4gcmV0X2FkZyB8IHJldF9zc2k7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4MywyOCArMzcwLDEyIEBACiAvKgogICoJCUdlbgogICovCi1zdGF0aWMgdm9pZCByc25kX29mX3BhcnNlX2dlbihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJICAgICAgY29uc3Qgc3RydWN0IHJzbmRfb2ZfZGF0YSAqb2ZfZGF0YSwKLQkJCSAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IHJjYXJfc25kX2luZm8gKmluZm8gPSBwcml2LT5pbmZvOwotCi0JaWYgKCFvZl9kYXRhKQotCQlyZXR1cm47Ci0KLQlpbmZvLT5mbGFncyA9IG9mX2RhdGEtPmZsYWdzOwotfQotCi1pbnQgcnNuZF9nZW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJICAgY29uc3Qgc3RydWN0IHJzbmRfb2ZfZGF0YSAqb2ZfZGF0YSwKLQkJICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKK2ludCByc25kX2dlbl9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJc3RydWN0IHJzbmRfZ2VuICpnZW47CiAJaW50IHJldDsKIAotCXJzbmRfb2ZfcGFyc2VfZ2VuKHBkZXYsIG9mX2RhdGEsIHByaXYpOwotCiAJZ2VuID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpnZW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWdlbikgewogCQlkZXZfZXJyKGRldiwgIkdFTiBhbGxvY2F0ZSBmYWlsZWRcbiIpOwpAQCAtNDE1LDkgKzM4Niw5IEBACiAKIAlyZXQgPSAtRU5PREVWOwogCWlmIChyc25kX2lzX2dlbjEocHJpdikpCi0JCXJldCA9IHJzbmRfZ2VuMV9wcm9iZShwZGV2LCBwcml2KTsKKwkJcmV0ID0gcnNuZF9nZW4xX3Byb2JlKHByaXYpOwogCWVsc2UgaWYgKHJzbmRfaXNfZ2VuMihwcml2KSkKLQkJcmV0ID0gcnNuZF9nZW4yX3Byb2JlKHBkZXYsIHByaXYpOworCQlyZXQgPSByc25kX2dlbjJfcHJvYmUocHJpdik7CiAKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihkZXYsICJ1bmtub3duIGdlbmVyYXRpb24gUi1DYXIgc291bmQgZGV2aWNlXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9yY2FyL21peC5jIGIvc291bmQvc29jL3NoL3JjYXIvbWl4LmMKaW5kZXggOTUzZGQwYi4uNjU1NDJiNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3JjYXIvbWl4LmMKKysrIGIvc291bmQvc29jL3NoL3JjYXIvbWl4LmMKQEAgLTEzLDEwICsxMywxMCBAQAogI2RlZmluZSBNSVhfTkFNRSAibWl4IgogCiBzdHJ1Y3QgcnNuZF9taXggewotCXN0cnVjdCByc25kX21peF9wbGF0Zm9ybV9pbmZvICppbmZvOyAvKiByY2FyX3NuZC5oICovCiAJc3RydWN0IHJzbmRfbW9kIG1vZDsKIH07CiAKKyNkZWZpbmUgcnNuZF9taXhfZ2V0KHByaXYsIGlkKSAoKHN0cnVjdCByc25kX21peCAqKShwcml2LT5taXgpICsgaWQpCiAjZGVmaW5lIHJzbmRfbWl4X25yKHByaXYpICgocHJpdiktPm1peF9ucikKICNkZWZpbmUgZm9yX2VhY2hfcnNuZF9taXgocG9zLCBwcml2LCBpKQkJCQkJXAogCWZvciAoKGkpID0gMDsJCQkJCQkJXApAQCAtMjQsNTggKzI0LDc3IEBACiAJCSAgICAgKChwb3MpID0gKHN0cnVjdCByc25kX21peCAqKShwcml2KS0+bWl4ICsgaSk7CVwKIAkgICAgIGkrKykKIAotCi1zdGF0aWMgdm9pZCByc25kX21peF9zb2Z0X3Jlc2V0KHN0cnVjdCByc25kX21vZCAqbW9kKQorc3RhdGljIHZvaWQgcnNuZF9taXhfYWN0aXZhdGlvbihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKIHsKIAlyc25kX21vZF93cml0ZShtb2QsIE1JWF9TV1JTUiwgMCk7CiAJcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfU1dSU1IsIDEpOwogfQogCi0jZGVmaW5lIHJzbmRfbWl4X2luaXRpYWxpemVfbG9jayhtb2QpCV9fcnNuZF9taXhfaW5pdGlhbGl6ZV9sb2NrKG1vZCwgMSkKLSNkZWZpbmUgcnNuZF9taXhfaW5pdGlhbGl6ZV91bmxvY2sobW9kKQlfX3JzbmRfbWl4X2luaXRpYWxpemVfbG9jayhtb2QsIDApCi1zdGF0aWMgdm9pZCBfX3JzbmRfbWl4X2luaXRpYWxpemVfbG9jayhzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwgdTMyIGVuYWJsZSkKK3N0YXRpYyB2b2lkIHJzbmRfbWl4X2hhbHQoc3RydWN0IHJzbmRfbW9kICptb2QpCiB7Ci0JcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfTUlYSVIsIGVuYWJsZSk7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfTUlYSVIsIDEpOworCXJzbmRfbW9kX3dyaXRlKG1vZCwgTUlYX1NXUlNSLCAwKTsKK30KKworc3RhdGljIHZvaWQgcnNuZF9taXhfdm9sdW1lX3BhcmFtZXRlcihzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCQkgICAgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKK3sKKwlyc25kX21vZF93cml0ZShtb2QsIE1JWF9NREJBUiwgMCk7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfTURCQlIsIDApOworCXJzbmRfbW9kX3dyaXRlKG1vZCwgTUlYX01EQkNSLCAwKTsKKwlyc25kX21vZF93cml0ZShtb2QsIE1JWF9NREJEUiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJzbmRfbWl4X3ZvbHVtZV9pbml0KHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJCSBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKK3sKKwlyc25kX21vZF93cml0ZShtb2QsIE1JWF9NSVhJUiwgMSk7CisKKwkvKiBHZW5lcmFsIEluZm9ybWF0aW9uICovCisJcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfQURJTlIsIHJzbmRfZ2V0X2FkaW5yX2NoYW4obW9kLCBpbykpOworCisJLyogdm9sdW1lIHN0ZXAgKi8KKwlyc25kX21vZF93cml0ZShtb2QsIE1JWF9NSVhNUiwgMCk7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfTVZQRFIsIDApOworCisJLyogY29tbW9uIHZvbHVtZSBwYXJhbWV0ZXIgKi8KKwlyc25kX21peF92b2x1bWVfcGFyYW1ldGVyKGlvLCBtb2QpOworCisJcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfTUlYSVIsIDApOwogfQogCiBzdGF0aWMgdm9pZCByc25kX21peF92b2x1bWVfdXBkYXRlKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAogCQkJCSAgc3RydWN0IHJzbmRfbW9kICptb2QpCiB7Ci0KIAkvKiBEaXNhYmxlIE1JWCBkQiBzZXR0aW5nICovCiAJcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfTURCRVIsIDApOwogCi0JcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfTURCQVIsIDApOwotCXJzbmRfbW9kX3dyaXRlKG1vZCwgTUlYX01EQkJSLCAwKTsKLQlyc25kX21vZF93cml0ZShtb2QsIE1JWF9NREJDUiwgMCk7Ci0JcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfTURCRFIsIDApOworCS8qIGNvbW1vbiB2b2x1bWUgcGFyYW1ldGVyICovCisJcnNuZF9taXhfdm9sdW1lX3BhcmFtZXRlcihpbywgbW9kKTsKIAogCS8qIEVuYWJsZSBNSVggZEIgc2V0dGluZyAqLwogCXJzbmRfbW9kX3dyaXRlKG1vZCwgTUlYX01EQkVSLCAxKTsKIH0KIAorc3RhdGljIGludCByc25kX21peF9wcm9iZV8oc3RydWN0IHJzbmRfbW9kICptb2QsCisJCQkgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCSAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIHJzbmRfY21kX2F0dGFjaChpbywgcnNuZF9tb2RfaWQobW9kKSk7Cit9CisKIHN0YXRpYyBpbnQgcnNuZF9taXhfaW5pdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKIAkJCSBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCSBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXJzbmRfbW9kX3Bvd2VyX29uKG1vZCk7CiAKLQlyc25kX21peF9zb2Z0X3Jlc2V0KG1vZCk7CisJcnNuZF9taXhfYWN0aXZhdGlvbihtb2QpOwogCi0JcnNuZF9taXhfaW5pdGlhbGl6ZV9sb2NrKG1vZCk7Ci0KLQlyc25kX21vZF93cml0ZShtb2QsIE1JWF9BRElOUiwgcnNuZF9nZXRfYWRpbnJfY2hhbihtb2QsIGlvKSk7Ci0KLQlyc25kX3BhdGhfcGFyc2UocHJpdiwgaW8pOwotCi0JLyogdm9sdW1lIHN0ZXAgKi8KLQlyc25kX21vZF93cml0ZShtb2QsIE1JWF9NSVhNUiwgMCk7Ci0JcnNuZF9tb2Rfd3JpdGUobW9kLCBNSVhfTVZQRFIsIDApOworCXJzbmRfbWl4X3ZvbHVtZV9pbml0KGlvLCBtb2QpOwogCiAJcnNuZF9taXhfdm9sdW1lX3VwZGF0ZShpbywgbW9kKTsKIAotCXJzbmRfbWl4X2luaXRpYWxpemVfdW5sb2NrKG1vZCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODMsNiArMTAyLDggQEAKIAkJCSBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCSBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogeworCXJzbmRfbWl4X2hhbHQobW9kKTsKKwogCXJzbmRfbW9kX3Bvd2VyX29mZihtb2QpOwogCiAJcmV0dXJuIDA7CkBAIC05MCw2ICsxMTEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJzbmRfbW9kX29wcyByc25kX21peF9vcHMgPSB7CiAJLm5hbWUJCT0gTUlYX05BTUUsCisJLnByb2JlCQk9IHJzbmRfbWl4X3Byb2JlXywKIAkuaW5pdAkJPSByc25kX21peF9pbml0LAogCS5xdWl0CQk9IHJzbmRfbWl4X3F1aXQsCiB9OwpAQCAtOTksNTEgKzEyMSwxMyBAQAogCWlmIChXQVJOX09OKGlkIDwgMCB8fCBpZCA+PSByc25kX21peF9ucihwcml2KSkpCiAJCWlkID0gMDsKIAotCXJldHVybiByc25kX21vZF9nZXQoKHN0cnVjdCByc25kX21peCAqKShwcml2LT5taXgpICsgaWQpOworCXJldHVybiByc25kX21vZF9nZXQocnNuZF9taXhfZ2V0KHByaXYsIGlkKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJzbmRfb2ZfcGFyc2VfbWl4KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKK2ludCByc25kX21peF9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgcnNuZF9taXhfcGxhdGZvcm1faW5mbyAqbWl4X2luZm87Ci0Jc3RydWN0IHJjYXJfc25kX2luZm8gKmluZm8gPSByc25kX3ByaXZfdG9faW5mbyhwcml2KTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCWludCBucjsKLQotCWlmICghb2ZfZGF0YSkKLQkJcmV0dXJuOwotCi0Jbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi0+b2Zfbm9kZSwgInJjYXJfc291bmQsbWl4Iik7Ci0JaWYgKCFub2RlKQotCQlyZXR1cm47Ci0KLQluciA9IG9mX2dldF9jaGlsZF9jb3VudChub2RlKTsKLQlpZiAoIW5yKQotCQlnb3RvIHJzbmRfb2ZfcGFyc2VfbWl4X2VuZDsKLQotCW1peF9pbmZvID0gZGV2bV9remFsbG9jKGRldiwKLQkJCQlzaXplb2Yoc3RydWN0IHJzbmRfbWl4X3BsYXRmb3JtX2luZm8pICogbnIsCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtaXhfaW5mbykgewotCQlkZXZfZXJyKGRldiwgIm1peCBpbmZvIGFsbG9jYXRpb24gZXJyb3JcbiIpOwotCQlnb3RvIHJzbmRfb2ZfcGFyc2VfbWl4X2VuZDsKLQl9Ci0KLQlpbmZvLT5taXhfaW5mbwkJPSBtaXhfaW5mbzsKLQlpbmZvLT5taXhfaW5mb19ucgk9IG5yOwotCi1yc25kX29mX3BhcnNlX21peF9lbmQ6Ci0Jb2Zfbm9kZV9wdXQobm9kZSk7Ci0KLX0KLQotaW50IHJzbmRfbWl4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCSAgIGNvbnN0IHN0cnVjdCByc25kX29mX2RhdGEgKm9mX2RhdGEsCi0JCSAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IHJjYXJfc25kX2luZm8gKmluZm8gPSByc25kX3ByaXZfdG9faW5mbyhwcml2KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJc3RydWN0IHJzbmRfbWl4ICptaXg7CiAJc3RydWN0IGNsayAqY2xrOwpAQCAtMTU0LDQwICsxMzgsNTQgQEAKIAlpZiAocnNuZF9pc19nZW4xKHByaXYpKQogCQlyZXR1cm4gMDsKIAotCXJzbmRfb2ZfcGFyc2VfbWl4KHBkZXYsIG9mX2RhdGEsIHByaXYpOworCW5vZGUgPSByc25kX21peF9vZl9ub2RlKHByaXYpOworCWlmICghbm9kZSkKKwkJcmV0dXJuIDA7IC8qIG5vdCB1c2VkIGlzIG5vdCBlcnJvciAqLwogCi0JbnIgPSBpbmZvLT5taXhfaW5mb19ucjsKLQlpZiAoIW5yKQotCQlyZXR1cm4gMDsKKwluciA9IG9mX2dldF9jaGlsZF9jb3VudChub2RlKTsKKwlpZiAoIW5yKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcnNuZF9taXhfcHJvYmVfZG9uZTsKKwl9CiAKIAltaXgJPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1peCkgKiBuciwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtaXgpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghbWl4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcnNuZF9taXhfcHJvYmVfZG9uZTsKKwl9CiAKIAlwcml2LT5taXhfbnIJPSBucjsKIAlwcml2LT5taXgJPSBtaXg7CiAKLQlmb3JfZWFjaF9yc25kX21peChtaXgsIHByaXYsIGkpIHsKKwlpID0gMDsKKwlyZXQgPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgbnApIHsKKwkJbWl4ID0gcnNuZF9taXhfZ2V0KHByaXYsIGkpOworCiAJCXNucHJpbnRmKG5hbWUsIE1JWF9OQU1FX1NJWkUsICIlcy4lZCIsCiAJCQkgTUlYX05BTUUsIGkpOwogCiAJCWNsayA9IGRldm1fY2xrX2dldChkZXYsIG5hbWUpOwotCQlpZiAoSVNfRVJSKGNsaykpCi0JCQlyZXR1cm4gUFRSX0VSUihjbGspOwotCi0JCW1peC0+aW5mbyA9ICZpbmZvLT5taXhfaW5mb1tpXTsKKwkJaWYgKElTX0VSUihjbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCQlnb3RvIHJzbmRfbWl4X3Byb2JlX2RvbmU7CisJCX0KIAogCQlyZXQgPSByc25kX21vZF9pbml0KHByaXYsIHJzbmRfbW9kX2dldChtaXgpLCAmcnNuZF9taXhfb3BzLAogCQkJCSAgICBjbGssIFJTTkRfTU9EX01JWCwgaSk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byByc25kX21peF9wcm9iZV9kb25lOworCisJCWkrKzsKIAl9CiAKLQlyZXR1cm4gMDsKK3JzbmRfbWl4X3Byb2JlX2RvbmU6CisJb2Zfbm9kZV9wdXQobm9kZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi12b2lkIHJzbmRfbWl4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit2b2lkIHJzbmRfbWl4X3JlbW92ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCByc25kX21peCAqbWl4OwogCWludCBpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3JjYXIvcmNhcl9zbmQuaCBiL3NvdW5kL3NvYy9zaC9yY2FyL3JjYXJfc25kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZTMzZDMuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL3NoL3JjYXIvcmNhcl9zbmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogUmVuZXNhcyBSLUNhciBTUlUvU0NVL1NTSVUvU1NJIHN1cHBvcnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KLSAqIEt1bmlub3JpIE1vcmltb3RvIDxrdW5pbm9yaS5tb3JpbW90by5neEByZW5lc2FzLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgUkNBUl9TTkRfSAotI2RlZmluZSBSQ0FSX1NORF9ICi0KLQotI2RlZmluZSBSU05EX0dFTjFfU1JVCTAKLSNkZWZpbmUgUlNORF9HRU4xX0FERwkxCi0jZGVmaW5lIFJTTkRfR0VOMV9TU0kJMgotCi0jZGVmaW5lIFJTTkRfR0VOMl9TQ1UJMAotI2RlZmluZSBSU05EX0dFTjJfQURHCTEKLSNkZWZpbmUgUlNORF9HRU4yX1NTSVUJMgotI2RlZmluZSBSU05EX0dFTjJfU1NJCTMKLQotI2RlZmluZSBSU05EX0JBU0VfTUFYCTQKLQotLyoKLSAqIGZsYWdzCi0gKgotICogMHhBQjAwMDAwMAotICoKLSAqIEEgOiBjbG9jayBzaGFyaW5nIHNldHRpbmdzCi0gKiBCIDogU1NJIGRpcmVjdGlvbgotICovCi0jZGVmaW5lIFJTTkRfU1NJX0NMS19QSU5fU0hBUkUJCSgxIDw8IDMxKQotI2RlZmluZSBSU05EX1NTSV9OT19CVVNJRgkJKDEgPDwgMzApIC8qIFNTSStETUEgd2l0aG91dCBCVVNJRiAqLwotCi0jZGVmaW5lIFJTTkRfU1NJKF9kbWFfaWQsIF9pcnEsIF9mbGFncykJCVwKLXsgLmRtYV9pZCA9IF9kbWFfaWQsIC5pcnEgPSBfaXJxLCAuZmxhZ3MgPSBfZmxhZ3MgfQotI2RlZmluZSBSU05EX1NTSV9VTlVTRUQgXAoteyAuZG1hX2lkID0gLTEsIC5pcnEgPSAtMSwgLmZsYWdzID0gMCB9Ci0KLXN0cnVjdCByc25kX3NzaV9wbGF0Zm9ybV9pbmZvIHsKLQlpbnQgZG1hX2lkOwotCWludCBpcnE7Ci0JdTMyIGZsYWdzOwotfTsKLQotI2RlZmluZSBSU05EX1NSQyhyYXRlLCBfZG1hX2lkKQkJCQkJCVwKLXsgLmNvbnZlcnRfcmF0ZSA9IHJhdGUsIC5kbWFfaWQgPSBfZG1hX2lkLCB9Ci0jZGVmaW5lIFJTTkRfU1JDX1VOVVNFRAkJCQlcCi17IC5jb252ZXJ0X3JhdGUgPSAwLCAuZG1hX2lkID0gLTEsIH0KLQotc3RydWN0IHJzbmRfc3JjX3BsYXRmb3JtX2luZm8gewotCXUzMiBjb252ZXJ0X3JhdGU7IC8qIHNhbXBsaW5nIHJhdGUgY29udmVydCAqLwotCWludCBkbWFfaWQ7IC8qIGZvciBHZW4yIFNDVSAqLwotCWludCBpcnE7Ci19OwotCi0vKgotICogZmxhZ3MKLSAqLwotc3RydWN0IHJzbmRfY3R1X3BsYXRmb3JtX2luZm8gewotCXUzMiBmbGFnczsKLX07Ci0KLXN0cnVjdCByc25kX21peF9wbGF0Zm9ybV9pbmZvIHsKLQl1MzIgZmxhZ3M7Ci19OwotCi1zdHJ1Y3QgcnNuZF9kdmNfcGxhdGZvcm1faW5mbyB7Ci0JdTMyIGZsYWdzOwotfTsKLQotc3RydWN0IHJzbmRfZGFpX3BhdGhfaW5mbyB7Ci0Jc3RydWN0IHJzbmRfc3NpX3BsYXRmb3JtX2luZm8gKnNzaTsKLQlzdHJ1Y3QgcnNuZF9zcmNfcGxhdGZvcm1faW5mbyAqc3JjOwotCXN0cnVjdCByc25kX2N0dV9wbGF0Zm9ybV9pbmZvICpjdHU7Ci0Jc3RydWN0IHJzbmRfbWl4X3BsYXRmb3JtX2luZm8gKm1peDsKLQlzdHJ1Y3QgcnNuZF9kdmNfcGxhdGZvcm1faW5mbyAqZHZjOwotfTsKLQotc3RydWN0IHJzbmRfZGFpX3BsYXRmb3JtX2luZm8gewotCXN0cnVjdCByc25kX2RhaV9wYXRoX2luZm8gcGxheWJhY2s7Ci0Jc3RydWN0IHJzbmRfZGFpX3BhdGhfaW5mbyBjYXB0dXJlOwotfTsKLQotLyoKLSAqIGZsYWdzCi0gKgotICogMHgwMDAwMDAwQQotICoKLSAqIEEgOiBnZW5lcmF0aW9uCi0gKi8KLSNkZWZpbmUgUlNORF9HRU5fTUFTSwkoMHhGIDw8IDApCi0jZGVmaW5lIFJTTkRfR0VOMQkoMSA8PCAwKSAvKiBmaXhtZSAqLwotI2RlZmluZSBSU05EX0dFTjIJKDIgPDwgMCkgLyogZml4bWUgKi8KLQotc3RydWN0IHJjYXJfc25kX2luZm8gewotCXUzMiBmbGFnczsKLQlzdHJ1Y3QgcnNuZF9zc2lfcGxhdGZvcm1faW5mbyAqc3NpX2luZm87Ci0JaW50IHNzaV9pbmZvX25yOwotCXN0cnVjdCByc25kX3NyY19wbGF0Zm9ybV9pbmZvICpzcmNfaW5mbzsKLQlpbnQgc3JjX2luZm9fbnI7Ci0Jc3RydWN0IHJzbmRfY3R1X3BsYXRmb3JtX2luZm8gKmN0dV9pbmZvOwotCWludCBjdHVfaW5mb19ucjsKLQlzdHJ1Y3QgcnNuZF9taXhfcGxhdGZvcm1faW5mbyAqbWl4X2luZm87Ci0JaW50IG1peF9pbmZvX25yOwotCXN0cnVjdCByc25kX2R2Y19wbGF0Zm9ybV9pbmZvICpkdmNfaW5mbzsKLQlpbnQgZHZjX2luZm9fbnI7Ci0Jc3RydWN0IHJzbmRfZGFpX3BsYXRmb3JtX2luZm8gKmRhaV9pbmZvOwotCWludCBkYWlfaW5mb19ucjsKLQlpbnQgKCpzdGFydCkoaW50IGlkKTsKLQlpbnQgKCpzdG9wKShpbnQgaWQpOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvcmNhci9yc25kLmggYi9zb3VuZC9zb2Mvc2gvcmNhci9yc25kLmgKaW5kZXggMDg1MzI5OC4uMzE3ZGQ3OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3JjYXIvcnNuZC5oCisrKyBiL3NvdW5kL3NvYy9zaC9yY2FyL3JzbmQuaApAQCAtMjQsNyArMjQsMTYgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAKLSNpbmNsdWRlICJyY2FyX3NuZC5oIgorI2RlZmluZSBSU05EX0dFTjFfU1JVCTAKKyNkZWZpbmUgUlNORF9HRU4xX0FERwkxCisjZGVmaW5lIFJTTkRfR0VOMV9TU0kJMgorCisjZGVmaW5lIFJTTkRfR0VOMl9TQ1UJMAorI2RlZmluZSBSU05EX0dFTjJfQURHCTEKKyNkZWZpbmUgUlNORF9HRU4yX1NTSVUJMgorI2RlZmluZSBSU05EX0dFTjJfU1NJCTMKKworI2RlZmluZSBSU05EX0JBU0VfTUFYCTQKIAogLyoKICAqCXBzZXVkbyByZWdpc3RlcgpAQCAtMzQsMTAgKzQzLDE5IEBACiAgKiBzZWUgZ2VuMS9nZW4yIGZvciBkZXRhaWwKICAqLwogZW51bSByc25kX3JlZyB7Ci0JLyogU1JVL1NDVS9TU0lVICovCisJLyogU0NVIChTUkMvU1NJVS9NSVgvQ1RVL0RWQykgKi8KKwlSU05EX1JFR19TU0lfTU9ERSwJCS8qIEdlbjIgb25seSAqLwogCVJTTkRfUkVHX1NTSV9NT0RFMCwKIAlSU05EX1JFR19TU0lfTU9ERTEsCi0JUlNORF9SRUdfU1JDX0JVU0lGX01PREUsCisJUlNORF9SRUdfU1NJX01PREUyLAorCVJTTkRfUkVHX1NTSV9DT05UUk9MLAorCVJTTkRfUkVHX1NTSV9DVFJMLAkJLyogR2VuMiBvbmx5ICovCisJUlNORF9SRUdfU1NJX0JVU0lGX01PREUsCS8qIEdlbjIgb25seSAqLworCVJTTkRfUkVHX1NTSV9CVVNJRl9BRElOUiwJLyogR2VuMiBvbmx5ICovCisJUlNORF9SRUdfU1NJX0JVU0lGX0RBTElHTiwJLyogR2VuMiBvbmx5ICovCisJUlNORF9SRUdfU1NJX0lOVF9FTkFCTEUsCS8qIEdlbjIgb25seSAqLworCVJTTkRfUkVHX1NSQ19JX0JVU0lGX01PREUsCisJUlNORF9SRUdfU1JDX09fQlVTSUZfTU9ERSwKIAlSU05EX1JFR19TUkNfUk9VVEVfTU9ERTAsCiAJUlNORF9SRUdfU1JDX1NXUlNSLAogCVJTTkRfUkVHX1NSQ19TUkNJUiwKQEAgLTQ1LDkgKzYzLDI5IEBACiAJUlNORF9SRUdfU1JDX0lGU0NSLAogCVJTTkRfUkVHX1NSQ19JRlNWUiwKIAlSU05EX1JFR19TUkNfU1JDQ1IsCisJUlNORF9SRUdfU1JDX0NUUkwsCQkvKiBHZW4yIG9ubHkgKi8KKwlSU05EX1JFR19TUkNfQlNEU1IsCQkvKiBHZW4yIG9ubHkgKi8KKwlSU05EX1JFR19TUkNfQlNJU1IsCQkvKiBHZW4yIG9ubHkgKi8KKwlSU05EX1JFR19TUkNfSU5UX0VOQUJMRTAsCS8qIEdlbjIgb25seSAqLworCVJTTkRfUkVHX1NSQ19CVVNJRl9EQUxJR04sCS8qIEdlbjIgb25seSAqLworCVJTTkRfUkVHX1NSQ0lOX1RJTVNFTDAsCQkvKiBHZW4yIG9ubHkgKi8KKwlSU05EX1JFR19TUkNJTl9USU1TRUwxLAkJLyogR2VuMiBvbmx5ICovCisJUlNORF9SRUdfU1JDSU5fVElNU0VMMiwJCS8qIEdlbjIgb25seSAqLworCVJTTkRfUkVHX1NSQ0lOX1RJTVNFTDMsCQkvKiBHZW4yIG9ubHkgKi8KKwlSU05EX1JFR19TUkNJTl9USU1TRUw0LAkJLyogR2VuMiBvbmx5ICovCisJUlNORF9SRUdfU1JDT1VUX1RJTVNFTDAsCS8qIEdlbjIgb25seSAqLworCVJTTkRfUkVHX1NSQ09VVF9USU1TRUwxLAkvKiBHZW4yIG9ubHkgKi8KKwlSU05EX1JFR19TUkNPVVRfVElNU0VMMiwJLyogR2VuMiBvbmx5ICovCisJUlNORF9SRUdfU1JDT1VUX1RJTVNFTDMsCS8qIEdlbjIgb25seSAqLworCVJTTkRfUkVHX1NSQ09VVF9USU1TRUw0LAkvKiBHZW4yIG9ubHkgKi8KIAlSU05EX1JFR19TQ1VfU1lTX1NUQVRVUzAsCisJUlNORF9SRUdfU0NVX1NZU19TVEFUVVMxLAkvKiBHZW4yIG9ubHkgKi8KIAlSU05EX1JFR19TQ1VfU1lTX0lOVF9FTjAsCisJUlNORF9SRUdfU0NVX1NZU19JTlRfRU4xLAkvKiBHZW4yIG9ubHkgKi8KKwlSU05EX1JFR19DTURfQ1RSTCwJCS8qIEdlbjIgb25seSAqLworCVJTTkRfUkVHX0NNRF9CVVNJRl9EQUxJR04sCS8qIEdlbjIgb25seSAqLwogCVJTTkRfUkVHX0NNRF9ST1VURV9TTENULAorCVJTTkRfUkVHX0NNRE9VVF9USU1TRUwsCQkvKiBHZW4yIG9ubHkgKi8KIAlSU05EX1JFR19DVFVfQ1RVSVIsCiAJUlNORF9SRUdfQ1RVX0FESU5SLAogCVJTTkRfUkVHX01JWF9TV1JTUiwKQEAgLTY3LDE0ICsxMDUsMjUgQEAKIAlSU05EX1JFR19EVkNfWkNNQ1IsCiAJUlNORF9SRUdfRFZDX1ZPTDBSLAogCVJTTkRfUkVHX0RWQ19WT0wxUiwKKwlSU05EX1JFR19EVkNfVk9MMlIsCisJUlNORF9SRUdfRFZDX1ZPTDNSLAorCVJTTkRfUkVHX0RWQ19WT0w0UiwKKwlSU05EX1JFR19EVkNfVk9MNVIsCisJUlNORF9SRUdfRFZDX1ZPTDZSLAorCVJTTkRfUkVHX0RWQ19WT0w3UiwKIAlSU05EX1JFR19EVkNfRFZVRVIsCisJUlNORF9SRUdfRFZDX1ZSQ1RSLAkJLyogR2VuMiBvbmx5ICovCisJUlNORF9SRUdfRFZDX1ZSUERSLAkJLyogR2VuMiBvbmx5ICovCisJUlNORF9SRUdfRFZDX1ZSREJSLAkJLyogR2VuMiBvbmx5ICovCiAKIAkvKiBBREcgKi8KIAlSU05EX1JFR19CUlJBLAogCVJTTkRfUkVHX0JSUkIsCiAJUlNORF9SRUdfU1NJQ0tSLAorCVJTTkRfUkVHX0RJVl9FTiwJCS8qIEdlbjIgb25seSAqLwogCVJTTkRfUkVHX0FVRElPX0NMS19TRUwwLAogCVJTTkRfUkVHX0FVRElPX0NMS19TRUwxLAorCVJTTkRfUkVHX0FVRElPX0NMS19TRUwyLAkvKiBHZW4yIG9ubHkgKi8KIAogCS8qIFNTSSAqLwogCVJTTkRfUkVHX1NTSUNSLApAQCAtODMsODMgKzEzMiw5IEBACiAJUlNORF9SRUdfU1NJUkRSLAogCVJTTkRfUkVHX1NTSVdTUiwKIAotCS8qIFNIQVJFIHNlZSBiZWxvdyAqLwotCVJTTkRfUkVHX1NIQVJFMDEsCi0JUlNORF9SRUdfU0hBUkUwMiwKLQlSU05EX1JFR19TSEFSRTAzLAotCVJTTkRfUkVHX1NIQVJFMDQsCi0JUlNORF9SRUdfU0hBUkUwNSwKLQlSU05EX1JFR19TSEFSRTA2LAotCVJTTkRfUkVHX1NIQVJFMDcsCi0JUlNORF9SRUdfU0hBUkUwOCwKLQlSU05EX1JFR19TSEFSRTA5LAotCVJTTkRfUkVHX1NIQVJFMTAsCi0JUlNORF9SRUdfU0hBUkUxMSwKLQlSU05EX1JFR19TSEFSRTEyLAotCVJTTkRfUkVHX1NIQVJFMTMsCi0JUlNORF9SRUdfU0hBUkUxNCwKLQlSU05EX1JFR19TSEFSRTE1LAotCVJTTkRfUkVHX1NIQVJFMTYsCi0JUlNORF9SRUdfU0hBUkUxNywKLQlSU05EX1JFR19TSEFSRTE4LAotCVJTTkRfUkVHX1NIQVJFMTksCi0JUlNORF9SRUdfU0hBUkUyMCwKLQlSU05EX1JFR19TSEFSRTIxLAotCVJTTkRfUkVHX1NIQVJFMjIsCi0JUlNORF9SRUdfU0hBUkUyMywKLQlSU05EX1JFR19TSEFSRTI0LAotCVJTTkRfUkVHX1NIQVJFMjUsCi0JUlNORF9SRUdfU0hBUkUyNiwKLQlSU05EX1JFR19TSEFSRTI3LAotCVJTTkRfUkVHX1NIQVJFMjgsCi0JUlNORF9SRUdfU0hBUkUyOSwKLQogCVJTTkRfUkVHX01BWCwKIH07CiAKLS8qIEdlbjEgb25seSAqLwotI2RlZmluZSBSU05EX1JFR19TUkNfUk9VVEVfU0VMCQlSU05EX1JFR19TSEFSRTAxCi0jZGVmaW5lIFJTTkRfUkVHX1NSQ19UTUdfU0VMMAkJUlNORF9SRUdfU0hBUkUwMgotI2RlZmluZSBSU05EX1JFR19TUkNfVE1HX1NFTDEJCVJTTkRfUkVHX1NIQVJFMDMKLSNkZWZpbmUgUlNORF9SRUdfU1JDX1RNR19TRUwyCQlSU05EX1JFR19TSEFSRTA0Ci0jZGVmaW5lIFJTTkRfUkVHX1NSQ19ST1VURV9DVFJMCQlSU05EX1JFR19TSEFSRTA1Ci0jZGVmaW5lIFJTTkRfUkVHX1NSQ19NTkZTUgkJUlNORF9SRUdfU0hBUkUwNgotI2RlZmluZSBSU05EX1JFR19BVURJT19DTEtfU0VMMwkJUlNORF9SRUdfU0hBUkUwNwotI2RlZmluZSBSU05EX1JFR19BVURJT19DTEtfU0VMNAkJUlNORF9SRUdfU0hBUkUwOAotI2RlZmluZSBSU05EX1JFR19BVURJT19DTEtfU0VMNQkJUlNORF9SRUdfU0hBUkUwOQotCi0vKiBHZW4yIG9ubHkgKi8KLSNkZWZpbmUgUlNORF9SRUdfU1JDX0NUUkwJCVJTTkRfUkVHX1NIQVJFMDEKLSNkZWZpbmUgUlNORF9SRUdfU1NJX0NUUkwJCVJTTkRfUkVHX1NIQVJFMDIKLSNkZWZpbmUgUlNORF9SRUdfU1NJX0JVU0lGX01PREUJCVJTTkRfUkVHX1NIQVJFMDMKLSNkZWZpbmUgUlNORF9SRUdfU1NJX0JVU0lGX0FESU5SCVJTTkRfUkVHX1NIQVJFMDQKLSNkZWZpbmUgUlNORF9SRUdfU1NJX0lOVF9FTkFCTEUJCVJTTkRfUkVHX1NIQVJFMDUKLSNkZWZpbmUgUlNORF9SRUdfU1JDX0JTRFNSCQlSU05EX1JFR19TSEFSRTA2Ci0jZGVmaW5lIFJTTkRfUkVHX1NSQ19CU0lTUgkJUlNORF9SRUdfU0hBUkUwNwotI2RlZmluZSBSU05EX1JFR19ESVZfRU4JCQlSU05EX1JFR19TSEFSRTA4Ci0jZGVmaW5lIFJTTkRfUkVHX1NSQ0lOX1RJTVNFTDAJCVJTTkRfUkVHX1NIQVJFMDkKLSNkZWZpbmUgUlNORF9SRUdfU1JDSU5fVElNU0VMMQkJUlNORF9SRUdfU0hBUkUxMAotI2RlZmluZSBSU05EX1JFR19TUkNJTl9USU1TRUwyCQlSU05EX1JFR19TSEFSRTExCi0jZGVmaW5lIFJTTkRfUkVHX1NSQ0lOX1RJTVNFTDMJCVJTTkRfUkVHX1NIQVJFMTIKLSNkZWZpbmUgUlNORF9SRUdfU1JDSU5fVElNU0VMNAkJUlNORF9SRUdfU0hBUkUxMwotI2RlZmluZSBSU05EX1JFR19TUkNPVVRfVElNU0VMMAkJUlNORF9SRUdfU0hBUkUxNAotI2RlZmluZSBSU05EX1JFR19TUkNPVVRfVElNU0VMMQkJUlNORF9SRUdfU0hBUkUxNQotI2RlZmluZSBSU05EX1JFR19TUkNPVVRfVElNU0VMMgkJUlNORF9SRUdfU0hBUkUxNgotI2RlZmluZSBSU05EX1JFR19TUkNPVVRfVElNU0VMMwkJUlNORF9SRUdfU0hBUkUxNwotI2RlZmluZSBSU05EX1JFR19TUkNPVVRfVElNU0VMNAkJUlNORF9SRUdfU0hBUkUxOAotI2RlZmluZSBSU05EX1JFR19BVURJT19DTEtfU0VMMgkJUlNORF9SRUdfU0hBUkUxOQotI2RlZmluZSBSU05EX1JFR19DTURfQ1RSTAkJUlNORF9SRUdfU0hBUkUyMAotI2RlZmluZSBSU05EX1JFR19DTURPVVRfVElNU0VMCQlSU05EX1JFR19TSEFSRTIxCi0jZGVmaW5lIFJTTkRfUkVHX1NTSV9CVVNJRl9EQUxJR04JUlNORF9SRUdfU0hBUkUyMgotI2RlZmluZSBSU05EX1JFR19EVkNfVlJDVFIJCVJTTkRfUkVHX1NIQVJFMjMKLSNkZWZpbmUgUlNORF9SRUdfRFZDX1ZSUERSCQlSU05EX1JFR19TSEFSRTI0Ci0jZGVmaW5lIFJTTkRfUkVHX0RWQ19WUkRCUgkJUlNORF9SRUdfU0hBUkUyNQotI2RlZmluZSBSU05EX1JFR19TQ1VfU1lTX1NUQVRVUzEJUlNORF9SRUdfU0hBUkUyNgotI2RlZmluZSBSU05EX1JFR19TQ1VfU1lTX0lOVF9FTjEJUlNORF9SRUdfU0hBUkUyNwotI2RlZmluZSBSU05EX1JFR19TUkNfSU5UX0VOQUJMRTAJUlNORF9SRUdfU0hBUkUyOAotI2RlZmluZSBSU05EX1JFR19TUkNfQlVTSUZfREFMSUdOCVJTTkRfUkVHX1NIQVJFMjkKLQotc3RydWN0IHJzbmRfb2ZfZGF0YTsKIHN0cnVjdCByc25kX3ByaXY7CiBzdHJ1Y3QgcnNuZF9tb2Q7CiBzdHJ1Y3QgcnNuZF9kYWk7CkBAIC0xODcsNDMgKzE2MiwxMyBAQAogdTMyIHJzbmRfZ2V0X2FkaW5yX2JpdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pOwogdTMyIHJzbmRfZ2V0X2FkaW5yX2NoYW4oc3RydWN0IHJzbmRfbW9kICptb2QsIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKTsKIHUzMiByc25kX2dldF9kYWxpZ24oc3RydWN0IHJzbmRfbW9kICptb2QsIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKTsKLXZvaWQgcnNuZF9wYXRoX3BhcnNlKHN0cnVjdCByc25kX3ByaXYgKnByaXYsCi0JCSAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pOwogCiAvKgogICoJUi1DYXIgRE1BCiAgKi8KLXN0cnVjdCByc25kX2RtYTsKLQotc3RydWN0IHJzbmRfZG1hZW4gewotCXN0cnVjdCBkbWFfY2hhbgkJKmNoYW47Ci19OwotCi1zdHJ1Y3QgcnNuZF9kbWFwcCB7Ci0JaW50CQkJZG1hcHBfaWQ7Ci0JdTMyCQkJY2hjcjsKLX07Ci0KLXN0cnVjdCByc25kX2RtYSB7Ci0Jc3RydWN0IHJzbmRfZG1hX29wcwkqb3BzOwotCWRtYV9hZGRyX3QJCXNyY19hZGRyOwotCWRtYV9hZGRyX3QJCWRzdF9hZGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IHJzbmRfZG1hZW4gZW47Ci0JCXN0cnVjdCByc25kX2RtYXBwIHBwOwotCX0gZG1hOwotfTsKLSNkZWZpbmUgcnNuZF9kbWFfdG9fZG1hZW4oZG1hKQkoJihkbWEpLT5kbWEuZW4pCi0jZGVmaW5lIHJzbmRfZG1hX3RvX2RtYXBwKGRtYSkJKCYoZG1hKS0+ZG1hLnBwKQotI2RlZmluZSByc25kX2RtYV90b19tb2QoX2RtYSkgY29udGFpbmVyX29mKChfZG1hKSwgc3RydWN0IHJzbmRfbW9kLCBkbWEpCi0KLXZvaWQgcnNuZF9kbWFfc3RhcnQoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hKTsKLXZvaWQgcnNuZF9kbWFfc3RvcChzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywgc3RydWN0IHJzbmRfZG1hICpkbWEpOwotaW50IHJzbmRfZG1hX2luaXQoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX2RtYSAqZG1hLCBpbnQgaWQpOwotdm9pZCByc25kX2RtYV9xdWl0KHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLCBzdHJ1Y3QgcnNuZF9kbWEgKmRtYSk7Ci1pbnQgcnNuZF9kbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJICAgY29uc3Qgc3RydWN0IHJzbmRfb2ZfZGF0YSAqb2ZfZGF0YSwKLQkJICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CitzdHJ1Y3QgcnNuZF9tb2QgKnJzbmRfZG1hX2F0dGFjaChzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCSAgICAgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwgaW50IGlkKTsKK2ludCByc25kX2RtYV9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKIHN0cnVjdCBkbWFfY2hhbiAqcnNuZF9kbWFfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKIAkJCQkJICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwgY2hhciAqbmFtZSk7CiAKQEAgLTIzMSwxMSArMTc2LDE5IEBACiAgKglSLUNhciBzb3VuZCBtb2QKICAqLwogZW51bSByc25kX21vZF90eXBlIHsKLQlSU05EX01PRF9EVkMgPSAwLAorCVJTTkRfTU9EX0FVRE1BUFAsCisJUlNORF9NT0RfQVVETUEsCisJUlNORF9NT0RfRFZDLAogCVJTTkRfTU9EX01JWCwKIAlSU05EX01PRF9DVFUsCisJUlNORF9NT0RfQ01ELAogCVJTTkRfTU9EX1NSQywKKwlSU05EX01PRF9TU0lNMywJCS8qIFNTSSBtdWx0aSAzICovCisJUlNORF9NT0RfU1NJTTIsCQkvKiBTU0kgbXVsdGkgMiAqLworCVJTTkRfTU9EX1NTSU0xLAkJLyogU1NJIG11bHRpIDEgKi8KKwlSU05EX01PRF9TU0lQLAkJLyogU1NJIHBhcmVudCAqLwogCVJTTkRfTU9EX1NTSSwKKwlSU05EX01PRF9TU0lVLAogCVJTTkRfTU9EX01BWCwKIH07CiAKQEAgLTI3OCwxMCArMjMxLDggQEAKIAlpbnQgaWQ7CiAJZW51bSByc25kX21vZF90eXBlIHR5cGU7CiAJc3RydWN0IHJzbmRfbW9kX29wcyAqb3BzOwotCXN0cnVjdCByc25kX2RtYSBkbWE7CiAJc3RydWN0IHJzbmRfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgY2xrICpjbGs7Ci0JdTMyIHN0YXR1czsKIH07CiAvKgogICogc3RhdHVzCkBAIC0zMjgsNyArMjc5LDYgQEAKICNkZWZpbmUgX19yc25kX21vZF9jYWxsX2h3X3BhcmFtcwkwCiAKICNkZWZpbmUgcnNuZF9tb2RfdG9fcHJpdihtb2QpICgobW9kKS0+cHJpdikKLSNkZWZpbmUgcnNuZF9tb2RfdG9fZG1hKG1vZCkgKCYobW9kKS0+ZG1hKQogI2RlZmluZSByc25kX21vZF9pZChtb2QpICgobW9kKSA/IChtb2QpLT5pZCA6IC0xKQogI2RlZmluZSByc25kX21vZF9wb3dlcl9vbihtb2QpCWNsa19lbmFibGUoKG1vZCktPmNsaykKICNkZWZpbmUgcnNuZF9tb2RfcG93ZXJfb2ZmKG1vZCkJY2xrX2Rpc2FibGUoKG1vZCktPmNsaykKQEAgLTM0Nyw2ICsyOTcsMTcgQEAKIHZvaWQgcnNuZF9tb2RfaW50ZXJydXB0KHN0cnVjdCByc25kX21vZCAqbW9kLAogCQkJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKIAkJCQkJIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKSk7Cit2b2lkIHJzbmRfcGFyc2VfY29ubmVjdF9jb21tb24oc3RydWN0IHJzbmRfZGFpICpyZGFpLAorCQlzdHJ1Y3QgcnNuZF9tb2QqICgqbW9kX2dldCkoc3RydWN0IHJzbmRfcHJpdiAqcHJpdiwgaW50IGlkKSwKKwkJc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBsYXliYWNrLAorCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNhcHR1cmUpOworCit2b2lkIHJzbmRfc2V0X3Nsb3Qoc3RydWN0IHJzbmRfZGFpICpyZGFpLAorCQkgICBpbnQgc2xvdHMsIGludCBzbG90c190b3RhbCk7CitpbnQgcnNuZF9nZXRfc2xvdChzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbyk7CitpbnQgcnNuZF9nZXRfc2xvdF93aWR0aChzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbyk7CitpbnQgcnNuZF9nZXRfc2xvdF9udW0oc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pOwogCiAvKgogICoJUi1DYXIgc291bmQgREFJCkBAIC0zNTgsNiArMzE5LDcgQEAKIAlzdHJ1Y3QgcnNuZF9tb2QgKm1vZFtSU05EX01PRF9NQVhdOwogCXN0cnVjdCByc25kX2RhaV9wYXRoX2luZm8gKmluZm87IC8qIHJjYXJfc25kLmggKi8KIAlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWk7CisJdTMyIG1vZF9zdGF0dXNbUlNORF9NT0RfTUFYXTsKIAlpbnQgYnl0ZV9wb3M7CiAJaW50IHBlcmlvZF9wb3M7CiAJaW50IGJ5dGVfcGVyX3BlcmlvZDsKQEAgLTM2NSwxMCArMzI3LDEyIEBACiB9OwogI2RlZmluZSByc25kX2lvX3RvX21vZChpbywgaSkJKChpKSA8IFJTTkRfTU9EX01BWCA/IChpbyktPm1vZFsoaSldIDogTlVMTCkKICNkZWZpbmUgcnNuZF9pb190b19tb2Rfc3NpKGlvKQlyc25kX2lvX3RvX21vZCgoaW8pLCBSU05EX01PRF9TU0kpCisjZGVmaW5lIHJzbmRfaW9fdG9fbW9kX3NzaXAoaW8pCXJzbmRfaW9fdG9fbW9kKChpbyksIFJTTkRfTU9EX1NTSVApCiAjZGVmaW5lIHJzbmRfaW9fdG9fbW9kX3NyYyhpbykJcnNuZF9pb190b19tb2QoKGlvKSwgUlNORF9NT0RfU1JDKQogI2RlZmluZSByc25kX2lvX3RvX21vZF9jdHUoaW8pCXJzbmRfaW9fdG9fbW9kKChpbyksIFJTTkRfTU9EX0NUVSkKICNkZWZpbmUgcnNuZF9pb190b19tb2RfbWl4KGlvKQlyc25kX2lvX3RvX21vZCgoaW8pLCBSU05EX01PRF9NSVgpCiAjZGVmaW5lIHJzbmRfaW9fdG9fbW9kX2R2YyhpbykJcnNuZF9pb190b19tb2QoKGlvKSwgUlNORF9NT0RfRFZDKQorI2RlZmluZSByc25kX2lvX3RvX21vZF9jbWQoaW8pCXJzbmRfaW9fdG9fbW9kKChpbyksIFJTTkRfTU9EX0NNRCkKICNkZWZpbmUgcnNuZF9pb190b19yZGFpKGlvKQkoKGlvKS0+cmRhaSkKICNkZWZpbmUgcnNuZF9pb190b19wcml2KGlvKQkocnNuZF9yZGFpX3RvX3ByaXYocnNuZF9pb190b19yZGFpKGlvKSkpCiAjZGVmaW5lIHJzbmRfaW9faXNfcGxheShpbykJKCZyc25kX2lvX3RvX3JkYWkoaW8pLT5wbGF5YmFjayA9PSBpbykKQEAgLTM4Miw2ICszNDYsOSBAQAogCXN0cnVjdCByc25kX2RhaV9zdHJlYW0gY2FwdHVyZTsKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2OwogCisJaW50IHNsb3RzOworCWludCBzbG90c19udW07CisKIAl1bnNpZ25lZCBpbnQgY2xrX21hc3RlcjoxOwogCXVuc2lnbmVkIGludCBiaXRfY2xrX2ludjoxOwogCXVuc2lnbmVkIGludCBmcm1fY2xrX2ludjoxOwpAQCAtNDAzLDMzICszNzAsMjggQEAKIGJvb2wgcnNuZF9kYWlfcG9pbnRlcl91cGRhdGUoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIGludCBjbnQpOwogdm9pZCByc25kX2RhaV9wZXJpb2RfZWxhcHNlZChzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbyk7CiBpbnQgcnNuZF9kYWlfcG9pbnRlcl9vZmZzZXQoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIGludCBhZGRpdGlvbmFsKTsKK2ludCByc25kX2RhaV9jb25uZWN0KHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkgICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkgICAgIGVudW0gcnNuZF9tb2RfdHlwZSB0eXBlKTsKKyNkZWZpbmUgcnNuZF9kYWlfb2Zfbm9kZShwcml2KQkJCQkJCVwKKwlvZl9nZXRfY2hpbGRfYnlfbmFtZShyc25kX3ByaXZfdG9fZGV2KHByaXYpLT5vZl9ub2RlLCAicmNhcl9zb3VuZCxkYWkiKQogCiAvKgogICoJUi1DYXIgR2VuMS9HZW4yCiAgKi8KLWludCByc25kX2dlbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKK2ludCByc25kX2dlbl9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKIHZvaWQgX19pb21lbSAqcnNuZF9nZW5fcmVnX2dldChzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LAogCQkJICAgICAgIHN0cnVjdCByc25kX21vZCAqbW9kLAogCQkJICAgICAgIGVudW0gcnNuZF9yZWcgcmVnKTsKIHBoeXNfYWRkcl90IHJzbmRfZ2VuX2dldF9waHlfYWRkcihzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LCBpbnQgcmVnX2lkKTsKIAotI2RlZmluZSByc25kX2lzX2dlbjEocykJCSgoKHMpLT5pbmZvLT5mbGFncyAmIFJTTkRfR0VOX01BU0spID09IFJTTkRfR0VOMSkKLSNkZWZpbmUgcnNuZF9pc19nZW4yKHMpCQkoKChzKS0+aW5mby0+ZmxhZ3MgJiBSU05EX0dFTl9NQVNLKSA9PSBSU05EX0dFTjIpCi0KIC8qCiAgKglSLUNhciBBREcKICAqLwogaW50IHJzbmRfYWRnX3NzaV9jbGtfc3RvcChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCk7CiBpbnQgcnNuZF9hZGdfc3NpX2Nsa190cnlfc3RhcnQoc3RydWN0IHJzbmRfbW9kICptb2QsIHVuc2lnbmVkIGludCByYXRlKTsKLWludCByc25kX2FkZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKLWludCByc25kX2FkZ19zZXRfY29udmVydF9jbGtfZ2VuMShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LAotCQkJCSAgc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJICB1bnNpZ25lZCBpbnQgc3JjX3JhdGUsCi0JCQkJICB1bnNpZ25lZCBpbnQgZHN0X3JhdGUpOworaW50IHJzbmRfYWRnX3Byb2JlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpOwordm9pZCByc25kX2FkZ19yZW1vdmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CiBpbnQgcnNuZF9hZGdfc2V0X2NvbnZlcnRfY2xrX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCiAJCQkJICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCQkgIHVuc2lnbmVkIGludCBzcmNfcmF0ZSwKQEAgLTQ0MiwxNSArNDA0LDE0IEBACiAvKgogICoJUi1DYXIgc291bmQgcHJpdgogICovCi1zdHJ1Y3QgcnNuZF9vZl9kYXRhIHsKLQl1MzIgZmxhZ3M7Ci19OwotCiBzdHJ1Y3QgcnNuZF9wcml2IHsKIAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IHJjYXJfc25kX2luZm8gKmluZm87CiAJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZGVmaW5lIFJTTkRfR0VOX01BU0sJKDB4RiA8PCAwKQorI2RlZmluZSBSU05EX0dFTjEJKDEgPDwgMCkKKyNkZWZpbmUgUlNORF9HRU4yCSgyIDw8IDApCiAKIAkvKgogCSAqIGJlbG93IHZhbHVlIHdpbGwgYmUgZmlsbGVkIG9uIHJzbmRfZ2VuX3Byb2JlKCkKQEAgLTQ3NCw2ICs0MzUsMTIgQEAKIAlpbnQgc3NpX25yOwogCiAJLyoKKwkgKiBiZWxvdyB2YWx1ZSB3aWxsIGJlIGZpbGxlZCBvbiByc25kX3NzaXVfcHJvYmUoKQorCSAqLworCXZvaWQgKnNzaXU7CisJaW50IHNzaXVfbnI7CisKKwkvKgogCSAqIGJlbG93IHZhbHVlIHdpbGwgYmUgZmlsbGVkIG9uIHJzbmRfc3JjX3Byb2JlKCkKIAkgKi8KIAl2b2lkICpzcmM7CkBAIC00OTgsNiArNDY1LDEyIEBACiAJaW50IGR2Y19ucjsKIAogCS8qCisJICogYmVsb3cgdmFsdWUgd2lsbCBiZSBmaWxsZWQgb24gcnNuZF9jbWRfcHJvYmUoKQorCSAqLworCXZvaWQgKmNtZDsKKwlpbnQgY21kX25yOworCisJLyoKIAkgKiBiZWxvdyB2YWx1ZSB3aWxsIGJlIGZpbGxlZCBvbiByc25kX2RhaV9wcm9iZSgpCiAJICovCiAJc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciAqZGFpZHJ2OwpAQCAtNTA3LDcgKzQ4MCw5IEBACiAKICNkZWZpbmUgcnNuZF9wcml2X3RvX3BkZXYocHJpdikJKChwcml2KS0+cGRldikKICNkZWZpbmUgcnNuZF9wcml2X3RvX2Rldihwcml2KQkoJihyc25kX3ByaXZfdG9fcGRldihwcml2KS0+ZGV2KSkKLSNkZWZpbmUgcnNuZF9wcml2X3RvX2luZm8ocHJpdikJKChwcml2KS0+aW5mbykKKworI2RlZmluZSByc25kX2lzX2dlbjEocHJpdikJKCgocHJpdiktPmZsYWdzICYgUlNORF9HRU5fTUFTSykgPT0gUlNORF9HRU4xKQorI2RlZmluZSByc25kX2lzX2dlbjIocHJpdikJKCgocHJpdiktPmZsYWdzICYgUlNORF9HRU5fTUFTSykgPT0gUlNORF9HRU4yKQogCiAvKgogICoJcnNuZF9rY3RybApAQCAtNTIzLDcgKzQ5OCw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmw7CiB9OwogCi0jZGVmaW5lIFJTTkRfRFZDX0NIQU5ORUxTCTIKKyNkZWZpbmUgUlNORF9EVkNfQ0hBTk5FTFMJOAogc3RydWN0IHJzbmRfa2N0cmxfY2ZnX20gewogCXN0cnVjdCByc25kX2tjdHJsX2NmZyBjZmc7CiAJdTMyIHZhbFtSU05EX0RWQ19DSEFOTkVMU107CkBAIC01NDQsNiArNTE5LDcgQEAKIAkJICAgICB2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCQkgICAgc3RydWN0IHJzbmRfbW9kICptb2QpLAogCQkgICAgIHN0cnVjdCByc25kX2tjdHJsX2NmZ19tICpfY2ZnLAorCQkgICAgIGludCBjaF9zaXplLAogCQkgICAgIHUzMiBtYXgpOwogaW50IHJzbmRfa2N0cmxfbmV3X3Moc3RydWN0IHJzbmRfbW9kICptb2QsCiAJCSAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCkBAIC01NjYsNzAgKzU0Miw5MyBAQAogLyoKICAqCVItQ2FyIFNTSQogICovCi1pbnQgcnNuZF9zc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJICAgY29uc3Qgc3RydWN0IHJzbmRfb2ZfZGF0YSAqb2ZfZGF0YSwKLQkJICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7Ci12b2lkIHJzbmRfc3NpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpOworaW50IHJzbmRfc3NpX3Byb2JlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpOwordm9pZCByc25kX3NzaV9yZW1vdmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CiBzdHJ1Y3QgcnNuZF9tb2QgKnJzbmRfc3NpX21vZF9nZXQoc3RydWN0IHJzbmRfcHJpdiAqcHJpdiwgaW50IGlkKTsKIGludCByc25kX3NzaV9pc19kbWFfbW9kZShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCk7CiBpbnQgcnNuZF9zc2lfdXNlX2J1c2lmKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKTsKK3UzMiByc25kX3NzaV9tdWx0aV9zbGF2ZXMoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pOwogCiAjZGVmaW5lIHJzbmRfc3NpX2lzX3Bpbl9zaGFyaW5nKGlvKQlcCiAJX19yc25kX3NzaV9pc19waW5fc2hhcmluZyhyc25kX2lvX3RvX21vZF9zc2koaW8pKQogaW50IF9fcnNuZF9zc2lfaXNfcGluX3NoYXJpbmcoc3RydWN0IHJzbmRfbW9kICptb2QpOwogCisjZGVmaW5lIHJzbmRfc3NpX29mX25vZGUocHJpdikJCQkJCQlcCisJb2ZfZ2V0X2NoaWxkX2J5X25hbWUocnNuZF9wcml2X3RvX2Rldihwcml2KS0+b2Zfbm9kZSwgInJjYXJfc291bmQsc3NpIikKK3ZvaWQgcnNuZF9wYXJzZV9jb25uZWN0X3NzaShzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCisJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpwbGF5YmFjaywKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNhcHR1cmUpOworCisvKgorICoJUi1DYXIgU1NJVQorICovCitpbnQgcnNuZF9zc2l1X2F0dGFjaChzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJICAgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCk7CitpbnQgcnNuZF9zc2l1X3Byb2JlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpOwordm9pZCByc25kX3NzaXVfcmVtb3ZlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpOworCiAvKgogICoJUi1DYXIgU1JDCiAgKi8KLWludCByc25kX3NyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKLXZvaWQgcnNuZF9zcmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCSAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CitpbnQgcnNuZF9zcmNfcHJvYmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7Cit2b2lkIHJzbmRfc3JjX3JlbW92ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKIHN0cnVjdCByc25kX21vZCAqcnNuZF9zcmNfbW9kX2dldChzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LCBpbnQgaWQpOwogdW5zaWduZWQgaW50IHJzbmRfc3JjX2dldF9zc2lfcmF0ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LAogCQkJCSAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAogCQkJCSAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpOwotaW50IHJzbmRfc3JjX3NzaXVfc3RhcnQoc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kLAotCQkJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCi0JCQlpbnQgdXNlX2J1c2lmKTsKLWludCByc25kX3NyY19zc2l1X3N0b3Aoc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kLAotCQkgICAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pOwotaW50IHJzbmRfc3JjX3NzaV9pcnFfZW5hYmxlKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCk7Ci1pbnQgcnNuZF9zcmNfc3NpX2lycV9kaXNhYmxlKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCk7CisjZGVmaW5lIHJzbmRfc3JjX29mX25vZGUocHJpdikJCQkJCQlcCisJb2ZfZ2V0X2NoaWxkX2J5X25hbWUocnNuZF9wcml2X3RvX2Rldihwcml2KS0+b2Zfbm9kZSwgInJjYXJfc291bmQsc3JjIikKKyNkZWZpbmUgcnNuZF9wYXJzZV9jb25uZWN0X3NyYyhyZGFpLCBwbGF5YmFjaywgY2FwdHVyZSkJCQlcCisJcnNuZF9wYXJzZV9jb25uZWN0X2NvbW1vbihyZGFpLCByc25kX3NyY19tb2RfZ2V0LAkJXAorCQkJCSAgcnNuZF9zcmNfb2Zfbm9kZShyc25kX3JkYWlfdG9fcHJpdihyZGFpKSksIFwKKwkJCQkJCSAgIHBsYXliYWNrLCBjYXB0dXJlKQogCiAvKgogICoJUi1DYXIgQ1RVCiAgKi8KLWludCByc25kX2N0dV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKLQotdm9pZCByc25kX2N0dV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKK2ludCByc25kX2N0dV9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKK3ZvaWQgcnNuZF9jdHVfcmVtb3ZlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpOwogc3RydWN0IHJzbmRfbW9kICpyc25kX2N0dV9tb2RfZ2V0KHN0cnVjdCByc25kX3ByaXYgKnByaXYsIGludCBpZCk7CisjZGVmaW5lIHJzbmRfY3R1X29mX25vZGUocHJpdikJCQkJCQlcCisJb2ZfZ2V0X2NoaWxkX2J5X25hbWUocnNuZF9wcml2X3RvX2Rldihwcml2KS0+b2Zfbm9kZSwgInJjYXJfc291bmQsY3R1IikKKyNkZWZpbmUgcnNuZF9wYXJzZV9jb25uZWN0X2N0dShyZGFpLCBwbGF5YmFjaywgY2FwdHVyZSkJCQlcCisJcnNuZF9wYXJzZV9jb25uZWN0X2NvbW1vbihyZGFpLCByc25kX2N0dV9tb2RfZ2V0LAkJXAorCQkJCSAgcnNuZF9jdHVfb2Zfbm9kZShyc25kX3JkYWlfdG9fcHJpdihyZGFpKSksIFwKKwkJCQkJCSAgIHBsYXliYWNrLCBjYXB0dXJlKQogCiAvKgogICoJUi1DYXIgTUlYCiAgKi8KLWludCByc25kX21peF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKLQotdm9pZCByc25kX21peF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKK2ludCByc25kX21peF9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKK3ZvaWQgcnNuZF9taXhfcmVtb3ZlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpOwogc3RydWN0IHJzbmRfbW9kICpyc25kX21peF9tb2RfZ2V0KHN0cnVjdCByc25kX3ByaXYgKnByaXYsIGludCBpZCk7CisjZGVmaW5lIHJzbmRfbWl4X29mX25vZGUocHJpdikJCQkJCQlcCisJb2ZfZ2V0X2NoaWxkX2J5X25hbWUocnNuZF9wcml2X3RvX2Rldihwcml2KS0+b2Zfbm9kZSwgInJjYXJfc291bmQsbWl4IikKKyNkZWZpbmUgcnNuZF9wYXJzZV9jb25uZWN0X21peChyZGFpLCBwbGF5YmFjaywgY2FwdHVyZSkJCQlcCisJcnNuZF9wYXJzZV9jb25uZWN0X2NvbW1vbihyZGFpLCByc25kX21peF9tb2RfZ2V0LAkJXAorCQkJCSAgcnNuZF9taXhfb2Zfbm9kZShyc25kX3JkYWlfdG9fcHJpdihyZGFpKSksIFwKKwkJCQkJCSAgIHBsYXliYWNrLCBjYXB0dXJlKQogCiAvKgogICoJUi1DYXIgRFZDCiAgKi8KLWludCByc25kX2R2Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKLXZvaWQgcnNuZF9kdmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCSAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CitpbnQgcnNuZF9kdmNfcHJvYmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7Cit2b2lkIHJzbmRfZHZjX3JlbW92ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKIHN0cnVjdCByc25kX21vZCAqcnNuZF9kdmNfbW9kX2dldChzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LCBpbnQgaWQpOworI2RlZmluZSByc25kX2R2Y19vZl9ub2RlKHByaXYpCQkJCQkJXAorCW9mX2dldF9jaGlsZF9ieV9uYW1lKHJzbmRfcHJpdl90b19kZXYocHJpdiktPm9mX25vZGUsICJyY2FyX3NvdW5kLGR2YyIpCisjZGVmaW5lIHJzbmRfcGFyc2VfY29ubmVjdF9kdmMocmRhaSwgcGxheWJhY2ssIGNhcHR1cmUpCQkJXAorCXJzbmRfcGFyc2VfY29ubmVjdF9jb21tb24ocmRhaSwgcnNuZF9kdmNfbW9kX2dldCwJCVwKKwkJCQkgIHJzbmRfZHZjX29mX25vZGUocnNuZF9yZGFpX3RvX3ByaXYocmRhaSkpLCBcCisJCQkJCQkgICBwbGF5YmFjaywgY2FwdHVyZSkKKworLyoKKyAqCVItQ2FyIENNRAorICovCitpbnQgcnNuZF9jbWRfcHJvYmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7Cit2b2lkIHJzbmRfY21kX3JlbW92ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KTsKK2ludCByc25kX2NtZF9hdHRhY2goc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIGludCBpZCk7CitzdHJ1Y3QgcnNuZF9tb2QgKnJzbmRfY21kX21vZF9nZXQoc3RydWN0IHJzbmRfcHJpdiAqcHJpdiwgaW50IGlkKTsKIAogI2lmZGVmIERFQlVHCiB2b2lkIHJzbmRfbW9kX21ha2Vfc3VyZShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwgZW51bSByc25kX21vZF90eXBlIHR5cGUpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3JjYXIvcnNyYy1jYXJkLmMgYi9zb3VuZC9zb2Mvc2gvcmNhci9yc3JjLWNhcmQuYwppbmRleCBkNjFkYjljLi44YTM1N2ZkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvcmNhci9yc3JjLWNhcmQuYworKysgYi9zb3VuZC9zb2Mvc2gvcmNhci9yc3JjLWNhcmQuYwpAQCAtNDgsOCArNDgsMTEgQEAKIAogI2RlZmluZSBEQUlfTkFNRV9OVU0JMzIKIHN0cnVjdCByc3JjX2NhcmRfZGFpIHsKLQl1bnNpZ25lZCBpbnQgZm10OwogCXVuc2lnbmVkIGludCBzeXNjbGs7CisJdW5zaWduZWQgaW50IHR4X3Nsb3RfbWFzazsKKwl1bnNpZ25lZCBpbnQgcnhfc2xvdF9tYXNrOworCWludCBzbG90czsKKwlpbnQgc2xvdF93aWR0aDsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJY2hhciBkYWlfbmFtZVtEQUlfTkFNRV9OVU1dOwogfTsKQEAgLTc1LDcgKzc4LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHJzcmNfY2FyZF9wcml2ICpwcml2ID0Jc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHJ0ZC0+Y2FyZCk7CiAJc3RydWN0IHJzcmNfY2FyZF9kYWkgKmRhaV9wcm9wcyA9Ci0JCXJzcmNfcHJpdl90b19wcm9wcyhwcml2LCBydGQgLSBydGQtPmNhcmQtPnJ0ZCk7CisJCXJzcmNfcHJpdl90b19wcm9wcyhwcml2LCBydGQtPm51bSk7CiAKIAlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGRhaV9wcm9wcy0+Y2xrKTsKIH0KQEAgLTg1LDcgKzg4LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHJzcmNfY2FyZF9wcml2ICpwcml2ID0Jc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHJ0ZC0+Y2FyZCk7CiAJc3RydWN0IHJzcmNfY2FyZF9kYWkgKmRhaV9wcm9wcyA9Ci0JCXJzcmNfcHJpdl90b19wcm9wcyhwcml2LCBydGQgLSBydGQtPmNhcmQtPnJ0ZCk7CisJCXJzcmNfcHJpdl90b19wcm9wcyhwcml2LCBydGQtPm51bSk7CiAKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoZGFpX3Byb3BzLT5jbGspOwogfQpAQCAtMTAxLDcgKzEwNCw3IEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpkYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rOwogCXN0cnVjdCByc3JjX2NhcmRfZGFpICpkYWlfcHJvcHM7Ci0JaW50IG51bSA9IHJ0ZCAtIHJ0ZC0+Y2FyZC0+cnRkOworCWludCBudW0gPSBydGQtPm51bTsKIAlpbnQgcmV0OwogCiAJZGFpX2xpbmsJPSByc3JjX3ByaXZfdG9fbGluayhwcml2LCBudW0pOwpAQCAtMTEwLDE0ICsxMTMsNiBAQAogCQkJCXJ0ZC0+Y3B1X2RhaSA6CiAJCQkJcnRkLT5jb2RlY19kYWk7CiAKLQlpZiAoZGFpX3Byb3BzLT5mbXQpIHsKLQkJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChkYWksIGRhaV9wcm9wcy0+Zm10KTsKLQkJaWYgKHJldCAmJiByZXQgIT0gLUVOT1RTVVBQKSB7Ci0JCQlkZXZfZXJyKGRhaS0+ZGV2LCAic2V0X2ZtdCBlcnJvclxuIik7Ci0JCQlnb3RvIGVycjsKLQkJfQotCX0KLQogCWlmIChkYWlfcHJvcHMtPnN5c2NsaykgewogCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGRhaSwgMCwgZGFpX3Byb3BzLT5zeXNjbGssIDApOwogCQlpZiAocmV0ICYmIHJldCAhPSAtRU5PVFNVUFApIHsKQEAgLTEyNiw2ICsxMjEsMTggQEAKIAkJfQogCX0KIAorCWlmIChkYWlfcHJvcHMtPnNsb3RzKSB7CisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChkYWksCisJCQkJCSAgICAgICBkYWlfcHJvcHMtPnR4X3Nsb3RfbWFzaywKKwkJCQkJICAgICAgIGRhaV9wcm9wcy0+cnhfc2xvdF9tYXNrLAorCQkJCQkgICAgICAgZGFpX3Byb3BzLT5zbG90cywKKwkJCQkJICAgICAgIGRhaV9wcm9wcy0+c2xvdF93aWR0aCk7CisJCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9UU1VQUCkgeworCQkJZGV2X2VycihkYWktPmRldiwgInNldF90ZG1fc2xvdCBlcnJvclxuIik7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKwogCXJldCA9IDA7CiAKIGVycjoKQEAgLTE0OCwxNCArMTU1LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgcnNyY19jYXJkX3BhcnNlX2RhaWZtdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpjb2RlYywKIAkJCQkgIHN0cnVjdCByc3JjX2NhcmRfcHJpdiAqcHJpdiwKLQkJCQkgIGludCBpZHgsIGJvb2wgaXNfZmUpCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmssCisJCQkJICB1bnNpZ25lZCBpbnQgKnJldGZtdCkKIHsKLQlzdHJ1Y3QgcnNyY19jYXJkX2RhaSAqZGFpX3Byb3BzID0gcnNyY19wcml2X3RvX3Byb3BzKHByaXYsIGlkeCk7CiAJc3RydWN0IGRldmljZV9ub2RlICpiaXRjbGttYXN0ZXIgPSBOVUxMOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZnJhbWVtYXN0ZXIgPSBOVUxMOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29kZWMgPSBpc19mZSA/IE5VTEwgOiBucDsKIAl1bnNpZ25lZCBpbnQgZGFpZm10OwogCiAJZGFpZm10ID0gc25kX3NvY19vZl9wYXJzZV9kYWlmbXQobm9kZSwgTlVMTCwKQEAgLTE3MiwxMSArMTc4LDExIEBACiAJCWRhaWZtdCB8PSAoY29kZWMgPT0gZnJhbWVtYXN0ZXIpID8KIAkJCVNORF9TT0NfREFJRk1UX0NCU19DRk0gOiBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOwogCi0JZGFpX3Byb3BzLT5mbXQJPSBkYWlmbXQ7Ci0KIAlvZl9ub2RlX3B1dChiaXRjbGttYXN0ZXIpOwogCW9mX25vZGVfcHV0KGZyYW1lbWFzdGVyKTsKIAorCSpyZXRmbXQgPSBkYWlmbXQ7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4LDYgKzIwNCwxNSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKiBQYXJzZSBURE0gc2xvdCAqLworCXJldCA9IHNuZF9zb2Nfb2ZfcGFyc2VfdGRtX3Nsb3QobnAsCisJCQkJCSZkYWlfcHJvcHMtPnR4X3Nsb3RfbWFzaywKKwkJCQkJJmRhaV9wcm9wcy0+cnhfc2xvdF9tYXNrLAorCQkJCQkmZGFpX3Byb3BzLT5zbG90cywKKwkJCQkJJmRhaV9wcm9wcy0+c2xvdF93aWR0aCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWlmIChpc19mZSkgewogCQkvKiBCRSBpcyBkdW1teSAqLwogCQlkYWlfbGluay0+Y29kZWNfb2Zfbm9kZQkJPSBOVUxMOwpAQCAtMjA4LDcgKzIyMyw5IEBACiAJCWRhaV9saW5rLT5keW5hbWljCQk9IDE7CiAJCWRhaV9saW5rLT5kcGNtX21lcmdlZF9mb3JtYXQJPSAxOwogCQlkYWlfbGluay0+Y3B1X29mX25vZGUJCT0gYXJncy5ucDsKLQkJc25kX3NvY19vZl9nZXRfZGFpX25hbWUobnAsICZkYWlfbGluay0+Y3B1X2RhaV9uYW1lKTsKKwkJcmV0ID0gc25kX3NvY19vZl9nZXRfZGFpX25hbWUobnAsICZkYWlfbGluay0+Y3B1X2RhaV9uYW1lKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OwogCiAJCS8qIHNldCBkYWlfbmFtZSAqLwogCQlzbnByaW50ZihkYWlfcHJvcHMtPmRhaV9uYW1lLCBEQUlfTkFNRV9OVU0sICJmZS4lcyIsCkBAIC0yNDAsNyArMjU3LDkgQEAKIAkJZGFpX2xpbmstPm5vX3BjbQkJPSAxOwogCQlkYWlfbGluay0+YmVfaHdfcGFyYW1zX2ZpeHVwCT0gcnNyY19jYXJkX2JlX2h3X3BhcmFtc19maXh1cDsKIAkJZGFpX2xpbmstPmNvZGVjX29mX25vZGUJCT0gYXJncy5ucDsKLQkJc25kX3NvY19vZl9nZXRfZGFpX25hbWUobnAsICZkYWlfbGluay0+Y29kZWNfZGFpX25hbWUpOworCQlyZXQgPSBzbmRfc29jX29mX2dldF9kYWlfbmFtZShucCwgJmRhaV9saW5rLT5jb2RlY19kYWlfbmFtZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKIAogCQkvKiBhZGRpdGlvbmFsIG5hbWUgcHJlZml4ICovCiAJCWlmIChvZl9kYXRhKSB7CkBAIC0zMDUsMjMgKzMyNCwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJzcmNfY2FyZF9kYWlfbGlua19vZihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJIHN0cnVjdCByc3JjX2NhcmRfcHJpdiAqcHJpdiwKLQkJCQkgaW50IGlkeCkKK3N0YXRpYyBpbnQgcnNyY19jYXJkX2RhaV9zdWJfbGlua19vZihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCSAgICAgc3RydWN0IHJzcmNfY2FyZF9wcml2ICpwcml2LAorCQkJCSAgICAgaW50IGlkeCwgYm9vbCBpc19mZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc3JjX3ByaXZfdG9fZGV2KHByaXYpOworCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluayA9IHJzcmNfcHJpdl90b19saW5rKHByaXYsIGlkeCk7CiAJc3RydWN0IHJzcmNfY2FyZF9kYWkgKmRhaV9wcm9wcyA9IHJzcmNfcHJpdl90b19wcm9wcyhwcml2LCBpZHgpOwotCWJvb2wgaXNfZmUgPSBmYWxzZTsKIAlpbnQgcmV0OwogCi0JaWYgKDAgPT0gc3RyY21wKG5wLT5uYW1lLCAiY3B1IikpCi0JCWlzX2ZlID0gdHJ1ZTsKLQotCXJldCA9IHJzcmNfY2FyZF9wYXJzZV9kYWlmbXQobm9kZSwgbnAsIHByaXYsIGlkeCwgaXNfZmUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJcmV0ID0gcnNyY19jYXJkX3BhcnNlX2xpbmtzKG5wLCBwcml2LCBpZHgsIGlzX2ZlKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTMzMiwxMiArMzQ0LDU0IEBACiAKIAlkZXZfZGJnKGRldiwgIlx0JXMgLyAlMDR4IC8gJWRcbiIsCiAJCWRhaV9wcm9wcy0+ZGFpX25hbWUsCi0JCWRhaV9wcm9wcy0+Zm10LAorCQlkYWlfbGluay0+ZGFpX2ZtdCwKIAkJZGFpX3Byb3BzLT5zeXNjbGspOwogCiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCByc3JjX2NhcmRfZGFpX2xpbmtfb2Yoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCSBzdHJ1Y3QgcnNyY19jYXJkX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdW5zaWduZWQgaW50IGRhaWZtdCA9IDA7CisJaW50IHJldCwgaTsKKwlib29sIGlzX2ZlOworCisJLyogZmluZCAxc3QgY29kZWMgKi8KKwlpID0gMDsKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIG5wKSB7CisJCWRhaV9saW5rID0gcnNyY19wcml2X3RvX2xpbmsocHJpdiwgaSk7CisKKwkJaWYgKHN0cmNtcChucC0+bmFtZSwgImNvZGVjIikgPT0gMCkgeworCQkJcmV0ID0gcnNyY19jYXJkX3BhcnNlX2RhaWZtdChub2RlLCBucCwgcHJpdiwKKwkJCQkJCSAgICAgZGFpX2xpbmssICZkYWlmbXQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWJyZWFrOworCQl9CisJCWkrKzsKKwl9CisKKwlpID0gMDsKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIG5wKSB7CisJCWRhaV9saW5rID0gcnNyY19wcml2X3RvX2xpbmsocHJpdiwgaSk7CisJCWRhaV9saW5rLT5kYWlfZm10ID0gZGFpZm10OworCisJCWlzX2ZlID0gZmFsc2U7CisJCWlmIChzdHJjbXAobnAtPm5hbWUsICJjcHUiKSA9PSAwKQorCQkJaXNfZmUgPSB0cnVlOworCisJCXJldCA9IHJzcmNfY2FyZF9kYWlfc3ViX2xpbmtfb2Yobm9kZSwgbnAsIHByaXYsIGksIGlzX2ZlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlpKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcnNyY19jYXJkX3BhcnNlX29mKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKIAkJCSAgICAgIHN0cnVjdCByc3JjX2NhcmRfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTM0NSw5ICszOTksOCBAQAogCWNvbnN0IHN0cnVjdCByc3JjX2NhcmRfb2ZfZGF0YSAqb2ZfZGF0YSA9IHJzcmNfZGV2X3RvX29mX2RhdGEoZGV2KTsKIAlzdHJ1Y3QgcnNyY19jYXJkX2RhaSAqcHJvcHM7CiAJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmxpbmtzOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJaW50IHJldDsKLQlpbnQgaSwgbnVtOworCWludCBudW07CiAKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzg4LDEzICs0NDEsOSBAQAogCQlwcml2LT5zbmRfY2FyZC5uYW1lID8gcHJpdi0+c25kX2NhcmQubmFtZSA6ICIiLAogCQlwcml2LT5jb252ZXJ0X3JhdGUpOwogCi0JaSA9IDA7Ci0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShub2RlLCBucCkgewotCQlyZXQgPSByc3JjX2NhcmRfZGFpX2xpbmtfb2Yobm9kZSwgbnAsIHByaXYsIGkpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JCWkrKzsKLQl9CisJcmV0ID0gcnNyY19jYXJkX2RhaV9saW5rX29mKG5vZGUsIHByaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKCFwcml2LT5zbmRfY2FyZC5uYW1lKQogCQlwcml2LT5zbmRfY2FyZC5uYW1lID0gcHJpdi0+c25kX2NhcmQuZGFpX2xpbmstPm5hbWU7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvcmNhci9zcmMuYyBiL3NvdW5kL3NvYy9zaC9yY2FyL3NyYy5jCmluZGV4IDI2MWI1MDIuLjVlZGEwNTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9yY2FyL3NyYy5jCisrKyBiL3NvdW5kL3NvYy9zaC9yY2FyL3NyYy5jCkBAIC0yMCwyMCArMjAsMjEgQEAKICNkZWZpbmUgT1VGX1NSQyhpZCkJKCgxIDw8IChpZCArIDE2KSkgfCAoMSA8PCBpZCkpCiAKIHN0cnVjdCByc25kX3NyYyB7Ci0Jc3RydWN0IHJzbmRfc3JjX3BsYXRmb3JtX2luZm8gKmluZm87IC8qIHJjYXJfc25kLmggKi8KIAlzdHJ1Y3QgcnNuZF9tb2QgbW9kOworCXN0cnVjdCByc25kX21vZCAqZG1hOwogCXN0cnVjdCByc25kX2tjdHJsX2NmZ19zIHNlbjsgIC8qIHN5bmMgY29udmVydCBlbmFibGUgKi8KIAlzdHJ1Y3QgcnNuZF9rY3RybF9jZmdfcyBzeW5jOyAvKiBzeW5jIGNvbnZlcnQgKi8KIAl1MzIgY29udmVydF9yYXRlOyAvKiBzYW1wbGluZyByYXRlIGNvbnZlcnQgKi8KIAlpbnQgZXJyOworCWludCBpcnE7CiB9OwogCiAjZGVmaW5lIFJTTkRfU1JDX05BTUVfU0laRSAxNgogCisjZGVmaW5lIHJzbmRfc3JjX2dldChwcml2LCBpZCkgKChzdHJ1Y3QgcnNuZF9zcmMgKikocHJpdi0+c3JjKSArIGlkKQorI2RlZmluZSByc25kX3NyY190b19kbWEoc3JjKSAoKHNyYyktPmRtYSkKICNkZWZpbmUgcnNuZF9zcmNfbnIocHJpdikgKChwcml2KS0+c3JjX25yKQogI2RlZmluZSByc25kX2VuYWJsZV9zeW5jX2NvbnZlcnQoc3JjKSAoKHNyYyktPnNlbi52YWwpCi0jZGVmaW5lIHJzbmRfc3JjX29mX25vZGUocHJpdikgXAotCW9mX2dldF9jaGlsZF9ieV9uYW1lKHJzbmRfcHJpdl90b19kZXYocHJpdiktPm9mX25vZGUsICJyY2FyX3NvdW5kLHNyYyIpCiAKICNkZWZpbmUgcnNuZF9tb2RfdG9fc3JjKF9tb2QpCQkJCVwKIAljb250YWluZXJfb2YoKF9tb2QpLCBzdHJ1Y3QgcnNuZF9zcmMsIG1vZCkKQEAgLTY5LDY3ICs3MCwxNiBAQAogICogICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLXwKICAqLwogCi0vKgotICoJSG93IHRvIHVzZSBTUkMgYnlwYXNzIG1vZGUgZm9yIGRlYnVnZ2luZwotICoKLSAqIFNSQyBoYXMgYnlwYXNzIG1vZGUsIGFuZCBpdCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KLSAqIEluIEdlbjIgY2FzZSwKLSAqIFNSQ21fTU9ERSBjb250cm9scyB3aGV0aGVyIFNSQyBpcyB1c2VkIG9yIG5vdAotICogU1NJX01PREUwIGNvbnRyb2xzIHdoZXRoZXIgU1NJVSB3aGljaCByZWNlaXZlcyBTUkMgZGF0YQotICogaXMgdXNlZCBvciBub3QuCi0gKiBCb3RoIFNSQ21fTU9ERS9TU0lfTU9ERTAgc2V0dGluZ3MgYXJlIG5lZWRlZCBpZiB5b3UgdXNlIFNSQywKLSAqIGJ1dCBTUkMgYnlwYXNzIG1vZGUgbmVlZHMgU1NJX01PREUwIG9ubHkuCi0gKgotICogVGhpcyBkcml2ZXIgcmVxdWVzdAotICogc3RydWN0IHJzbmRfc3JjX3BsYXRmb3JtX2luZm8gewotICoJdTMyIGNvbnZlcnRfcmF0ZTsKLSAqCWludCBkbWFfaWQ7Ci0gKiB9Ci0gKgotICogcnNuZF9zcmNfY29udmVydF9yYXRlKCkgaW5kaWNhdGVzCi0gKiBhYm92ZSBjb252ZXJ0X3JhdGUsIGFuZCBpdCBjb250cm9scwotICogd2hldGhlciBTUkMgaXMgdXNlZCBvciBub3QuCi0gKgotICogZXgpIGRvZXNuJ3QgdXNlIFNSQwotICogc3RhdGljIHN0cnVjdCByc25kX2RhaV9wbGF0Zm9ybV9pbmZvIHJzbmRfZGFpID0gewotICoJLnBsYXliYWNrID0geyAuc3NpID0gJnJzbmRfc3NpWzBdLCB9LAotICogfTsKLSAqCi0gKiBleCkgdXNlcyBTUkMKLSAqIHN0YXRpYyBzdHJ1Y3QgcnNuZF9zcmNfcGxhdGZvcm1faW5mbyByc25kX3NyY1tdID0gewotICoJUlNORF9TQ1UoNDgwMDAsIDApLAotICoJLi4uCi0gKiB9OwotICogc3RhdGljIHN0cnVjdCByc25kX2RhaV9wbGF0Zm9ybV9pbmZvIHJzbmRfZGFpID0gewotICoJLnBsYXliYWNrID0geyAuc3NpID0gJnJzbmRfc3NpWzBdLCAuc3JjID0gJnJzbmRfc3JjWzBdIH0sCi0gKiB9OwotICoKLSAqIGV4KSB1c2VzIFNSQyBieXBhc3MgbW9kZQotICogc3RhdGljIHN0cnVjdCByc25kX3NyY19wbGF0Zm9ybV9pbmZvIHJzbmRfc3JjW10gPSB7Ci0gKglSU05EX1NDVSgwLCAwKSwKLSAqCS4uLgotICogfTsKLSAqIHN0YXRpYyBzdHJ1Y3QgcnNuZF9kYWlfcGxhdGZvcm1faW5mbyByc25kX2RhaSA9IHsKLSAqCS5wbGF5YmFjayA9IHsgLnNzaSA9ICZyc25kX3NzaVswXSwgLnNyYyA9ICZyc25kX3NyY1swXSB9LAotICogfTsKLSAqCi0gKi8KLQotLyoKLSAqCQlHZW4xL0dlbjIgY29tbW9uIGZ1bmN0aW9ucwotICovCi1zdGF0aWMgdm9pZCByc25kX3NyY19zb2Z0X3Jlc2V0KHN0cnVjdCByc25kX21vZCAqbW9kKQorc3RhdGljIHZvaWQgcnNuZF9zcmNfYWN0aXZhdGlvbihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKIHsKIAlyc25kX21vZF93cml0ZShtb2QsIFNSQ19TV1JTUiwgMCk7CiAJcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfU1dSU1IsIDEpOwogfQogCi0KLSNkZWZpbmUgcnNuZF9zcmNfaW5pdGlhbGl6ZV9sb2NrKG1vZCkJX19yc25kX3NyY19pbml0aWFsaXplX2xvY2sobW9kLCAxKQotI2RlZmluZSByc25kX3NyY19pbml0aWFsaXplX3VubG9jayhtb2QpCV9fcnNuZF9zcmNfaW5pdGlhbGl6ZV9sb2NrKG1vZCwgMCkKLXN0YXRpYyB2b2lkIF9fcnNuZF9zcmNfaW5pdGlhbGl6ZV9sb2NrKHN0cnVjdCByc25kX21vZCAqbW9kLCB1MzIgZW5hYmxlKQorc3RhdGljIHZvaWQgcnNuZF9zcmNfaGFsdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKIHsKLQlyc25kX21vZF93cml0ZShtb2QsIFNSQ19TUkNJUiwgZW5hYmxlKTsKKwlyc25kX21vZF93cml0ZShtb2QsIFNSQ19TUkNJUiwgMSk7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfU1dSU1IsIDApOwogfQogCiBzdGF0aWMgc3RydWN0IGRtYV9jaGFuICpyc25kX3NyY19kbWFfcmVxKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLApAQCAtMTQzLDk5ICs5Myw2IEBACiAJCQkJCWlzX3BsYXkgPyAicngiIDogInR4Iik7CiB9CiAKLWludCByc25kX3NyY19zc2l1X3N0YXJ0KHN0cnVjdCByc25kX21vZCAqc3NpX21vZCwKLQkJCXN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAotCQkJaW50IHVzZV9idXNpZikKLXsKLQlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkgPSByc25kX2lvX3RvX3JkYWkoaW8pOwotCWludCBzc2lfaWQgPSByc25kX21vZF9pZChzc2lfbW9kKTsKLQotCS8qCi0JICogU1NJX01PREUwCi0JICovCi0JcnNuZF9tb2RfYnNldChzc2lfbW9kLCBTU0lfTU9ERTAsICgxIDw8IHNzaV9pZCksCi0JCSAgICAgICF1c2VfYnVzaWYgPDwgc3NpX2lkKTsKLQotCS8qCi0JICogU1NJX01PREUxCi0JICovCi0JaWYgKHJzbmRfc3NpX2lzX3Bpbl9zaGFyaW5nKGlvKSkgewotCQlpbnQgc2hpZnQgPSAtMTsKLQkJc3dpdGNoIChzc2lfaWQpIHsKLQkJY2FzZSAxOgotCQkJc2hpZnQgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXNoaWZ0ID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlzaGlmdCA9IDE2OwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoc2hpZnQgPj0gMCkKLQkJCXJzbmRfbW9kX2JzZXQoc3NpX21vZCwgU1NJX01PREUxLAotCQkJCSAgICAgIDB4MyA8PCBzaGlmdCwKLQkJCQkgICAgICByc25kX3JkYWlfaXNfY2xrX21hc3RlcihyZGFpKSA/Ci0JCQkJICAgICAgMHgyIDw8IHNoaWZ0IDogMHgxIDw8IHNoaWZ0KTsKLQl9Ci0KLQkvKgotCSAqIERNQSBzZXR0aW5ncyBmb3IgU1NJVQotCSAqLwotCWlmICh1c2VfYnVzaWYpIHsKLQkJdTMyIHZhbCA9IHJzbmRfZ2V0X2RhbGlnbihzc2lfbW9kLCBpbyk7Ci0KLQkJcnNuZF9tb2Rfd3JpdGUoc3NpX21vZCwgU1NJX0JVU0lGX0FESU5SLAotCQkJICAgICAgIHJzbmRfZ2V0X2FkaW5yX2JpdChzc2lfbW9kLCBpbykpOwotCQlyc25kX21vZF93cml0ZShzc2lfbW9kLCBTU0lfQlVTSUZfTU9ERSwgIDEpOwotCQlyc25kX21vZF93cml0ZShzc2lfbW9kLCBTU0lfQ1RSTCwgMHgxKTsKLQotCQlyc25kX21vZF93cml0ZShzc2lfbW9kLCBTU0lfQlVTSUZfREFMSUdOLCB2YWwpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgcnNuZF9zcmNfc3NpdV9zdG9wKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCwKLQkJICAgICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQotewotCS8qCi0JICogRE1BIHNldHRpbmdzIGZvciBTU0lVCi0JICovCi0JcnNuZF9tb2Rfd3JpdGUoc3NpX21vZCwgU1NJX0NUUkwsIDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCByc25kX3NyY19zc2lfaXJxX2VuYWJsZShzdHJ1Y3QgcnNuZF9tb2QgKnNzaV9tb2QpCi17Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYoc3NpX21vZCk7Ci0KLQlpZiAocnNuZF9pc19nZW4xKHByaXYpKQotCQlyZXR1cm4gMDsKLQotCS8qIGVuYWJsZSBTU0kgaW50ZXJydXB0IGlmIEdlbjIgKi8KLQlyc25kX21vZF93cml0ZShzc2lfbW9kLCBTU0lfSU5UX0VOQUJMRSwKLQkJICAgICAgIHJzbmRfc3NpX2lzX2RtYV9tb2RlKHNzaV9tb2QpID8KLQkJICAgICAgIDB4MGUwMDAwMDAgOiAweDBmMDAwMDAwKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgcnNuZF9zcmNfc3NpX2lycV9kaXNhYmxlKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCkKLXsKLQlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihzc2lfbW9kKTsKLQotCWlmIChyc25kX2lzX2dlbjEocHJpdikpCi0JCXJldHVybiAwOwotCi0JLyogZGlzYWJsZSBTU0kgaW50ZXJydXB0IGlmIEdlbjIgKi8KLQlyc25kX21vZF93cml0ZShzc2lfbW9kLCBTU0lfSU5UX0VOQUJMRSwgMHgwMDAwMDAwMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHUzMiByc25kX3NyY19jb252ZXJ0X3JhdGUoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCiAJCQkJIHN0cnVjdCByc25kX3NyYyAqc3JjKQogewpAQCAtMjgzLDM0ICsxNDAsNiBAQAogCXJldHVybiByYXRlOwogfQogCi1zdGF0aWMgaW50IHJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGUoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcnNuZF9pb190b19ydW50aW1lKGlvKTsKLQlzdHJ1Y3QgcnNuZF9zcmMgKnNyYyA9IHJzbmRfbW9kX3RvX3NyYyhtb2QpOwotCXUzMiBjb252ZXJ0X3JhdGUgPSByc25kX3NyY19jb252ZXJ0X3JhdGUoaW8sIHNyYyk7Ci0JdTMyIGZzcmF0ZSA9IDA7Ci0KLQlpZiAoY29udmVydF9yYXRlKQotCQlmc3JhdGUgPSAweDA0MDAwMDAgLyBjb252ZXJ0X3JhdGUgKiBydW50aW1lLT5yYXRlOwotCi0JLyogU2V0IGNoYW5uZWwgbnVtYmVyIGFuZCBvdXRwdXQgYml0IGxlbmd0aCAqLwotCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1JDX0FESU5SLCByc25kX2dldF9hZGlucl9iaXQobW9kLCBpbykpOwotCi0JLyogRW5hYmxlIHRoZSBpbml0aWFsIHZhbHVlIG9mIElGUyAqLwotCWlmIChmc3JhdGUpIHsKLQkJcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfSUZTQ1IsIDEpOwotCi0JCS8qIFNldCBpbml0aWFsIHZhbHVlIG9mIElGUyAqLwotCQlyc25kX21vZF93cml0ZShtb2QsIFNSQ19JRlNWUiwgZnNyYXRlKTsKLQl9Ci0KLQkvKiB1c2UgRE1BIHRyYW5zZmVyICovCi0JcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfQlVTSUZfTU9ERSwgMSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCByc25kX3NyY19od19wYXJhbXMoc3RydWN0IHJzbmRfbW9kICptb2QsCiAJCQkgICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApAQCAtMzE5LDkgKzE0OCw2IEBACiAJc3RydWN0IHJzbmRfc3JjICpzcmMgPSByc25kX21vZF90b19zcmMobW9kKTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqZmUgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAotCS8qIGRlZmF1bHQgdmFsdWUgKG1haW5seSBmb3Igbm9uLURUKSAqLwotCXNyYy0+Y29udmVydF9yYXRlID0gc3JjLT5pbmZvLT5jb252ZXJ0X3JhdGU7Ci0KIAkvKgogCSAqIFNSQyBhc3N1bWVzIHRoYXQgaXQgaXMgdXNlZCB1bmRlciBEUENNIGlmIHVzZXIgd2FudCB0byB1c2UKIAkgKiBzYW1wbGluZyByYXRlIGNvbnZlcnQuIFRoZW4sIFNSQyBzaG91bGQgYmUgRkUuCkBAIC0zNDcsMjUwICsxNzMsMTEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnNuZF9zcmNfaW5pdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7Ci0KLQlyc25kX21vZF9wb3dlcl9vbihtb2QpOwotCi0JcnNuZF9zcmNfc29mdF9yZXNldChtb2QpOwotCi0JcnNuZF9zcmNfaW5pdGlhbGl6ZV9sb2NrKG1vZCk7Ci0KLQlzcmMtPmVyciA9IDA7Ci0KLQkvKiByZXNldCBzeW5jIGNvbnZlcnRfcmF0ZSAqLwotCXNyYy0+c3luYy52YWwgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNuZF9zcmNfcXVpdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKLQkJCSBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKLQotCXJzbmRfbW9kX3Bvd2VyX29mZihtb2QpOwotCi0JaWYgKHNyYy0+ZXJyKQotCQlkZXZfd2FybihkZXYsICIlc1slZF0gdW5kZXIvb3ZlciBmbG93IGVyciA9ICVkXG4iLAotCQkJIHJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSwgc3JjLT5lcnIpOwotCi0Jc3JjLT5jb252ZXJ0X3JhdGUgPSAwOwotCi0JLyogcmVzZXQgc3luYyBjb252ZXJ0X3JhdGUgKi8KLQlzcmMtPnN5bmMudmFsID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJzbmRfc3JjX3N0YXJ0KHN0cnVjdCByc25kX21vZCAqbW9kKQotewotCXJzbmRfc3JjX2luaXRpYWxpemVfdW5sb2NrKG1vZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByc25kX3NyY19zdG9wKHN0cnVjdCByc25kX21vZCAqbW9kKQotewotCS8qIG5vdGhpbmcgdG8gZG8gKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqCQlHZW4xIGZ1bmN0aW9ucwotICovCi1zdGF0aWMgaW50IHJzbmRfc3JjX3NldF9yb3V0ZV9nZW4xKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAotCQkJCSAgIHN0cnVjdCByc25kX21vZCAqbW9kKQotewotCXN0cnVjdCBzcmNfcm91dGVfY29uZmlnIHsKLQkJdTMyIG1hc2s7Ci0JCWludCBzaGlmdDsKLQl9IHJvdXRlc1tdID0gewotCQl7IDB4RiwgIDAsIH0sIC8qIDAgKi8KLQkJeyAweEYsICA0LCB9LCAvKiAxICovCi0JCXsgMHhGLCAgOCwgfSwgLyogMiAqLwotCQl7IDB4NywgMTIsIH0sIC8qIDMgKi8KLQkJeyAweDcsIDE2LCB9LCAvKiA0ICovCi0JCXsgMHg3LCAyMCwgfSwgLyogNSAqLwotCQl7IDB4NywgMjQsIH0sIC8qIDYgKi8KLQkJeyAweDMsIDI4LCB9LCAvKiA3ICovCi0JCXsgMHgzLCAzMCwgfSwgLyogOCAqLwotCX07Ci0JdTMyIG1hc2s7Ci0JdTMyIHZhbDsKLQlpbnQgaWQ7Ci0KLQlpZCA9IHJzbmRfbW9kX2lkKG1vZCk7Ci0JaWYgKGlkIDwgMCB8fCBpZCA+PSBBUlJBWV9TSVpFKHJvdXRlcykpCi0JCXJldHVybiAtRUlPOwotCi0JLyoKLQkgKiBTUkNfUk9VVEVfU0VMRUNUCi0JICovCi0JdmFsID0gcnNuZF9pb19pc19wbGF5KGlvKSA/IDB4MSA6IDB4MjsKLQl2YWwgPSB2YWwJCTw8IHJvdXRlc1tpZF0uc2hpZnQ7Ci0JbWFzayA9IHJvdXRlc1tpZF0ubWFzawk8PCByb3V0ZXNbaWRdLnNoaWZ0OwotCi0JcnNuZF9tb2RfYnNldChtb2QsIFNSQ19ST1VURV9TRUwsIG1hc2ssIHZhbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByc25kX3NyY19zZXRfY29udmVydF90aW1pbmdfZ2VuMShzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKLQkJCQkJICAgIHN0cnVjdCByc25kX21vZCAqbW9kKQorc3RhdGljIHZvaWQgcnNuZF9zcmNfc2V0X2NvbnZlcnRfcmF0ZShzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCQkgICAgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKIHsKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihtb2QpOwotCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcnNuZF9pb190b19ydW50aW1lKGlvKTsKLQl1MzIgY29udmVydF9yYXRlID0gcnNuZF9zcmNfY29udmVydF9yYXRlKGlvLCBzcmMpOwotCXUzMiBtYXNrOwotCXUzMiB2YWw7Ci0JaW50IHNoaWZ0OwotCWludCBpZCA9IHJzbmRfbW9kX2lkKG1vZCk7Ci0JaW50IHJldDsKLQotCS8qCi0JICogU1JDX1RJTUlOR19TRUxFQ1QKLQkgKi8KLQlzaGlmdAk9IChpZCAlIDQpICogODsKLQltYXNrCT0gMHgxRiA8PCBzaGlmdDsKLQotCS8qCi0JICogQURHIGlzIHVzZWQgYXMgc291cmNlIGNsb2NrIGlmIFNSQyB3YXMgdXNlZCwKLQkgKiB0aGVuLCBTU0kgV1MgaXMgdXNlZCBhcyBkZXN0aW5hdGlvbiBjbG9jay4KLQkgKiBTU0kgV1MgaXMgdXNlZCBhcyBzb3VyY2UgY2xvY2sgaWYgU1JDIGlzIG5vdCB1c2VkCi0JICogKHdoZW4gcGxheWJhY2ssIHNvdXJjZS9kZXN0aW5hdGlvbiBiZWNvbWUgcmV2ZXJzZSB3aGVuIGNhcHR1cmUpCi0JICovCi0JcmV0ID0gMDsKLQlpZiAoY29udmVydF9yYXRlKSB7Ci0JCS8qIHVzZSBBREcgKi8KLQkJdmFsID0gMDsKLQkJcmV0ID0gcnNuZF9hZGdfc2V0X2NvbnZlcnRfY2xrX2dlbjEocHJpdiwgbW9kLAotCQkJCQkJICAgIHJ1bnRpbWUtPnJhdGUsCi0JCQkJCQkgICAgY29udmVydF9yYXRlKTsKLQl9IGVsc2UgaWYgKDggPT0gaWQpIHsKLQkJLyogdXNlIFNTSSBXUywgYnV0IFNSVTggaXMgc3BlY2lhbCAqLwotCQl2YWwgPSBpZCA8PCBzaGlmdDsKLQl9IGVsc2UgewotCQkvKiB1c2UgU1NJIFdTICovCi0JCXZhbCA9IChpZCArIDEpIDw8IHNoaWZ0OwotCX0KLQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc3dpdGNoIChpZCAvIDQpIHsKLQljYXNlIDA6Ci0JCXJzbmRfbW9kX2JzZXQobW9kLCBTUkNfVE1HX1NFTDAsIG1hc2ssIHZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJcnNuZF9tb2RfYnNldChtb2QsIFNSQ19UTUdfU0VMMSwgbWFzaywgdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlyc25kX21vZF9ic2V0KG1vZCwgU1JDX1RNR19TRUwyLCBtYXNrLCB2YWwpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByc25kX3NyY19zZXRfY29udmVydF9yYXRlX2dlbjEoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJCSAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCi17CiAJc3RydWN0IHJzbmRfc3JjICpzcmMgPSByc25kX21vZF90b19zcmMobW9kKTsKLQlpbnQgcmV0OworCXUzMiBjb252ZXJ0X3JhdGUgPSByc25kX3NyY19jb252ZXJ0X3JhdGUoaW8sIHNyYyk7CisJdTMyIGlmc2NyLCBmc3JhdGUsIGFkaW5yOworCXUzMiBjciwgcm91dGU7CisJdTMyIGJzZHNyLCBic2lzcjsKKwl1aW50IHJhdGlvOwogCi0JcmV0ID0gcnNuZF9zcmNfc2V0X2NvbnZlcnRfcmF0ZShtb2QsIGlvKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwlpZiAoIXJ1bnRpbWUpCisJCXJldHVybjsKIAotCS8qIFNlbGVjdCBTUkMgbW9kZSAoZml4ZWQgdmFsdWUpICovCi0JcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfU1JDQ1IsIDB4MDAwMTAxMTApOworCS8qIDYgLSAxLzYgYXJlIHZlcnkgZW5vdWdoIHJhdGlvIGZvciBTUkNfQlNEU1IgKi8KKwlpZiAoIWNvbnZlcnRfcmF0ZSkKKwkJcmF0aW8gPSAwOworCWVsc2UgaWYgKGNvbnZlcnRfcmF0ZSA+IHJ1bnRpbWUtPnJhdGUpCisJCXJhdGlvID0gMTAwICogY29udmVydF9yYXRlIC8gcnVudGltZS0+cmF0ZTsKKwllbHNlCisJCXJhdGlvID0gMTAwICogcnVudGltZS0+cmF0ZSAvIGNvbnZlcnRfcmF0ZTsKIAotCS8qIFNldCB0aGUgcmVzdHJpY3Rpb24gdmFsdWUgb2YgdGhlIEZTIHJhdGlvICg5OCUpICovCi0JcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfTU5GU1IsCi0JCSAgICAgICByc25kX21vZF9yZWFkKG1vZCwgU1JDX0lGU1ZSKSAvIDEwMCAqIDk4KTsKKwlpZiAocmF0aW8gPiA2MDApIHsKKwkJZGV2X2VycihkZXYsICJGU08vRlNJIHJhdGlvIGVycm9yXG4iKTsKKwkJcmV0dXJuOworCX0KIAotCS8qIEdlbjEvR2VuMiBhcmUgbm90IGNvbXBhdGlibGUgKi8KLQlpZiAocnNuZF9zcmNfY29udmVydF9yYXRlKGlvLCBzcmMpKQotCQlyc25kX21vZF93cml0ZShtb2QsIFNSQ19ST1VURV9NT0RFMCwgMSk7CisJLyoKKwkgKglTUkNfQURJTlIKKwkgKi8KKwlhZGluciA9IHJzbmRfZ2V0X2FkaW5yX2JpdChtb2QsIGlvKSB8CisJCXJzbmRfZ2V0X2FkaW5yX2NoYW4obW9kLCBpbyk7CiAKLQkvKiBubyBTUkNfQkZTU1Igc2V0dGluZ3MsIHNpbmNlIFNSQ19TUkNDUjo6QlVGTUQgaXMgMCAqLworCS8qCisJICoJU1JDX0lGU0NSIC8gU1JDX0lGU1ZSCisJICovCisJaWZzY3IgPSAwOworCWZzcmF0ZSA9IDA7CisJaWYgKGNvbnZlcnRfcmF0ZSkgeworCQlpZnNjciA9IDE7CisJCWZzcmF0ZSA9IDB4MDQwMDAwMCAvIGNvbnZlcnRfcmF0ZSAqIHJ1bnRpbWUtPnJhdGU7CisJfQogCi0JcmV0dXJuIDA7CisJLyoKKwkgKglTUkNfU1JDQ1IgLyBTUkNfUk9VVEVfTU9ERTAKKwkgKi8KKwljcgk9IDB4MDAwMTExMTA7CisJcm91dGUJPSAweDA7CisJaWYgKGNvbnZlcnRfcmF0ZSkgeworCQlyb3V0ZQk9IDB4MTsKKworCQlpZiAocnNuZF9lbmFibGVfc3luY19jb252ZXJ0KHNyYykpIHsKKwkJCWNyIHw9IDB4MTsKKwkJCXJvdXRlIHw9IHJzbmRfaW9faXNfcGxheShpbykgPworCQkJCSgweDEgPDwgMjQpIDogKDB4MSA8PCAyNSk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNSQ19CU0RTUiAvIFNSQ19CU0lTUgorCSAqLworCXN3aXRjaCAocnNuZF9tb2RfaWQobW9kKSkgeworCWNhc2UgNToKKwljYXNlIDY6CisJY2FzZSA3OgorCWNhc2UgODoKKwkJYnNkc3IgPSAweDAyNDAwMDAwOyAvKiA2IC0gMS82ICovCisJCWJzaXNyID0gMHgwMDEwMDA2MDsgLyogNiAtIDEvNiAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlic2RzciA9IDB4MDE4MDAwMDA7IC8qIDYgLSAxLzYgKi8KKwkJYnNpc3IgPSAweDAwMTAwMDYwIDsvKiA2IC0gMS82ICovCisJCWJyZWFrOworCX0KKworCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1JDX1NSQ0lSLCAxKTsJLyogaW5pdGlhbGl6ZSAqLworCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1JDX0FESU5SLCBhZGlucik7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfSUZTQ1IsIGlmc2NyKTsKKwlyc25kX21vZF93cml0ZShtb2QsIFNSQ19JRlNWUiwgZnNyYXRlKTsKKwlyc25kX21vZF93cml0ZShtb2QsIFNSQ19TUkNDUiwgY3IpOworCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1JDX0JTRFNSLCBic2Rzcik7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfQlNJU1IsIGJzaXNyKTsKKwlyc25kX21vZF93cml0ZShtb2QsIFNSQ19TUkNJUiwgMCk7CS8qIGNhbmNlbCBpbml0aWFsaXplICovCisKKwlyc25kX21vZF93cml0ZShtb2QsIFNSQ19ST1VURV9NT0RFMCwgcm91dGUpOworCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1JDX0lfQlVTSUZfTU9ERSwgMSk7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfT19CVVNJRl9NT0RFLCAxKTsKKwlyc25kX21vZF93cml0ZShtb2QsIFNSQ19CVVNJRl9EQUxJR04sIHJzbmRfZ2V0X2RhbGlnbihtb2QsIGlvKSk7CisKKwlpZiAoY29udmVydF9yYXRlKQorCQlyc25kX2FkZ19zZXRfY29udmVydF9jbGtfZ2VuMihtb2QsIGlvLAorCQkJCQkgICAgICBydW50aW1lLT5yYXRlLAorCQkJCQkgICAgICBjb252ZXJ0X3JhdGUpOworCWVsc2UKKwkJcnNuZF9hZGdfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjIobW9kLCBpbyk7CiB9CiAKLXN0YXRpYyBpbnQgcnNuZF9zcmNfaW5pdF9nZW4xKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCi0JCQkgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByc25kX3NyY19pbml0KG1vZCwgcHJpdik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSByc25kX3NyY19zZXRfcm91dGVfZ2VuMShpbywgbW9kKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGVfZ2VuMShtb2QsIGlvKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHJzbmRfc3JjX3NldF9jb252ZXJ0X3RpbWluZ19nZW4xKGlvLCBtb2QpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNuZF9zcmNfc3RhcnRfZ2VuMShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSAgICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKLQkJCSAgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCWludCBpZCA9IHJzbmRfbW9kX2lkKG1vZCk7Ci0KLQlyc25kX21vZF9ic2V0KG1vZCwgU1JDX1JPVVRFX0NUUkwsICgxIDw8IGlkKSwgKDEgPDwgaWQpKTsKLQotCXJldHVybiByc25kX3NyY19zdGFydChtb2QpOwotfQotCi1zdGF0aWMgaW50IHJzbmRfc3JjX3N0b3BfZ2VuMShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSAgICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAotCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKLXsKLQlpbnQgaWQgPSByc25kX21vZF9pZChtb2QpOwotCi0JcnNuZF9tb2RfYnNldChtb2QsIFNSQ19ST1VURV9DVFJMLCAoMSA8PCBpZCksIDApOwotCi0JcmV0dXJuIHJzbmRfc3JjX3N0b3AobW9kKTsKLX0KLQotc3RhdGljIHN0cnVjdCByc25kX21vZF9vcHMgcnNuZF9zcmNfZ2VuMV9vcHMgPSB7Ci0JLm5hbWUJPSBTUkNfTkFNRSwKLQkuZG1hX3JlcSA9IHJzbmRfc3JjX2RtYV9yZXEsCi0JLmluaXQJPSByc25kX3NyY19pbml0X2dlbjEsCi0JLnF1aXQJPSByc25kX3NyY19xdWl0LAotCS5zdGFydAk9IHJzbmRfc3JjX3N0YXJ0X2dlbjEsCi0JLnN0b3AJPSByc25kX3NyY19zdG9wX2dlbjEsCi0JLmh3X3BhcmFtcyA9IHJzbmRfc3JjX2h3X3BhcmFtcywKLX07Ci0KLS8qCi0gKgkJR2VuMiBmdW5jdGlvbnMKLSAqLwotI2RlZmluZSByc25kX3NyY19pcnFfZW5hYmxlX2dlbjIobW9kKSAgcnNuZF9zcmNfaXJxX2N0cm9sX2dlbjIobW9kLCAxKQotI2RlZmluZSByc25kX3NyY19pcnFfZGlzYWJsZV9nZW4yKG1vZCkgcnNuZF9zcmNfaXJxX2N0cm9sX2dlbjIobW9kLCAwKQotc3RhdGljIHZvaWQgcnNuZF9zcmNfaXJxX2N0cm9sX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsIGludCBlbmFibGUpCisjZGVmaW5lIHJzbmRfc3JjX2lycV9lbmFibGUobW9kKSAgcnNuZF9zcmNfaXJxX2N0cm9sKG1vZCwgMSkKKyNkZWZpbmUgcnNuZF9zcmNfaXJxX2Rpc2FibGUobW9kKSByc25kX3NyY19pcnFfY3Ryb2wobW9kLCAwKQorc3RhdGljIHZvaWQgcnNuZF9zcmNfaXJxX2N0cm9sKHN0cnVjdCByc25kX21vZCAqbW9kLCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7CiAJdTMyIHN5c19pbnRfdmFsLCBpbnRfdmFsLCBzeXNfaW50X21hc2s7Ci0JaW50IGlycSA9IHNyYy0+aW5mby0+aXJxOworCWludCBpcnEgPSBzcmMtPmlycTsKIAlpbnQgaWQgPSByc25kX21vZF9pZChtb2QpOwogCiAJc3lzX2ludF92YWwgPQpAQCAtNjAwLDcgKzI4OCw3IEBACiAJLyoKIAkgKiBJUlEgaXMgbm90IHN1cHBvcnRlZCBvbiBub24tRFQKIAkgKiBzZWUKLQkgKglyc25kX3NyY19wcm9iZV9nZW4yKCkKKwkgKglyc25kX3NyY19wcm9iZV8oKQogCSAqLwogCWlmICgoaXJxIDw9IDApIHx8ICFlbmFibGUpIHsKIAkJc3lzX2ludF92YWwgPSAwOwpAQCAtNjIwLDcgKzMwOCw3IEBACiAJcnNuZF9tb2RfYnNldChtb2QsIFNDVV9TWVNfSU5UX0VOMSwgc3lzX2ludF9tYXNrLCBzeXNfaW50X3ZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJzbmRfc3JjX2Vycm9yX2NsZWFyX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QpCitzdGF0aWMgdm9pZCByc25kX3NyY19zdGF0dXNfY2xlYXIoc3RydWN0IHJzbmRfbW9kICptb2QpCiB7CiAJdTMyIHZhbCA9IE9VRl9TUkMocnNuZF9tb2RfaWQobW9kKSk7CiAKQEAgLTYyOCw3ICszMTYsNyBAQAogCXJzbmRfbW9kX2JzZXQobW9kLCBTQ1VfU1lTX1NUQVRVUzEsIHZhbCwgdmFsKTsKIH0KIAotc3RhdGljIGJvb2wgcnNuZF9zcmNfZXJyb3JfcmVjb3JkX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QpCitzdGF0aWMgYm9vbCByc25kX3NyY19yZWNvcmRfZXJyb3Ioc3RydWN0IHJzbmRfbW9kICptb2QpCiB7CiAJc3RydWN0IHJzbmRfc3JjICpzcmMgPSByc25kX21vZF90b19zcmMobW9kKTsKIAl1MzIgdmFsMCwgdmFsMTsKQEAgLTY1MiwyMiArMzQwLDE2IEBACiAJCXJldCA9IHRydWU7CiAJfQogCi0JLyogY2xlYXIgZXJyb3Igc3RhdGljICovCi0JcnNuZF9zcmNfZXJyb3JfY2xlYXJfZ2VuMihtb2QpOwotCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfcnNuZF9zcmNfc3RhcnRfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCQlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbykKK3N0YXRpYyBpbnQgcnNuZF9zcmNfc3RhcnQoc3RydWN0IHJzbmRfbW9kICptb2QsCisJCQkgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7CiAJdTMyIHZhbDsKIAotCXZhbCA9IHJzbmRfZ2V0X2RhbGlnbihtb2QsIGlvKTsKLQotCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1JDX0JVU0lGX0RBTElHTiwgdmFsKTsKLQogCS8qCiAJICogV09SS0FST1VORAogCSAqCkBAIC02NzgsMjUxICszNjAsMTU0IEBACiAKIAlyc25kX21vZF93cml0ZShtb2QsIFNSQ19DVFJMLCB2YWwpOwogCi0JcnNuZF9zcmNfZXJyb3JfY2xlYXJfZ2VuMihtb2QpOworCXJldHVybiAwOworfQogCi0JcnNuZF9zcmNfc3RhcnQobW9kKTsKLQotCXJzbmRfc3JjX2lycV9lbmFibGVfZ2VuMihtb2QpOworc3RhdGljIGludCByc25kX3NyY19zdG9wKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJLyoKKwkgKiBzdG9wIFNSQyBvdXRwdXQgb25seQorCSAqIHNlZSByc25kX3NyY19xdWl0CisJICovCisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfQ1RSTCwgMHgwMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfcnNuZF9zcmNfc3RvcF9nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kKQorc3RhdGljIGludCByc25kX3NyY19pbml0KHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7Ci0JcnNuZF9zcmNfaXJxX2Rpc2FibGVfZ2VuMihtb2QpOworCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7CiAKLQlyc25kX21vZF93cml0ZShtb2QsIFNSQ19DVFJMLCAwKTsKKwlyc25kX21vZF9wb3dlcl9vbihtb2QpOwogCi0JcnNuZF9zcmNfZXJyb3JfcmVjb3JkX2dlbjIobW9kKTsKKwlyc25kX3NyY19hY3RpdmF0aW9uKG1vZCk7CiAKLQlyZXR1cm4gcnNuZF9zcmNfc3RvcChtb2QpOworCXJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGUoaW8sIG1vZCk7CisKKwlyc25kX3NyY19zdGF0dXNfY2xlYXIobW9kKTsKKworCXJzbmRfc3JjX2lycV9lbmFibGUobW9kKTsKKworCXNyYy0+ZXJyID0gMDsKKworCS8qIHJlc2V0IHN5bmMgY29udmVydF9yYXRlICovCisJc3JjLT5zeW5jLnZhbCA9IDA7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19yc25kX3NyY19pbnRlcnJ1cHRfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCQkgICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbykKK3N0YXRpYyBpbnQgcnNuZF9zcmNfcXVpdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKKwkJCSBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCSBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQoreworCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKKworCXJzbmRfc3JjX2lycV9kaXNhYmxlKG1vZCk7CisKKwkvKiBzdG9wIGJvdGggb3V0L2luICovCisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfQ1RSTCwgMCk7CisKKwlyc25kX3NyY19oYWx0KG1vZCk7CisKKwlyc25kX21vZF9wb3dlcl9vZmYobW9kKTsKKworCWlmIChzcmMtPmVycikKKwkJZGV2X3dhcm4oZGV2LCAiJXNbJWRdIHVuZGVyL292ZXIgZmxvdyBlcnIgPSAlZFxuIiwKKwkJCSByc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksIHNyYy0+ZXJyKTsKKworCXNyYy0+Y29udmVydF9yYXRlID0gMDsKKworCS8qIHJlc2V0IHN5bmMgY29udmVydF9yYXRlICovCisJc3JjLT5zeW5jLnZhbCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19yc25kX3NyY19pbnRlcnJ1cHQoc3RydWN0IHJzbmRfbW9kICptb2QsCisJCQkJIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQogewogCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KG1vZCk7CisJc3RydWN0IHJzbmRfc3JjICpzcmMgPSByc25kX21vZF90b19zcmMobW9kKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwogCiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCS8qIGlnbm9yZSBhbGwgY2FzZXMgaWYgbm90IHdvcmtpbmcgKi8KIAlpZiAoIXJzbmRfaW9faXNfd29ya2luZyhpbykpCi0JCWdvdG8gcnNuZF9zcmNfaW50ZXJydXB0X2dlbjJfb3V0OworCQlnb3RvIHJzbmRfc3JjX2ludGVycnVwdF9vdXQ7CiAKLQlpZiAocnNuZF9zcmNfZXJyb3JfcmVjb3JkX2dlbjIobW9kKSkgewotCQlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihtb2QpOwotCQlzdHJ1Y3QgcnNuZF9zcmMgKnNyYyA9IHJzbmRfbW9kX3RvX3NyYyhtb2QpOwotCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOworCWlmIChyc25kX3NyY19yZWNvcmRfZXJyb3IobW9kKSkgewogCiAJCWRldl9kYmcoZGV2LCAiJXNbJWRdIHJlc3RhcnRcbiIsCiAJCQlyc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCkpOwogCi0JCV9yc25kX3NyY19zdG9wX2dlbjIobW9kKTsKLQkJaWYgKHNyYy0+ZXJyIDwgMTAyNCkKLQkJCV9yc25kX3NyY19zdGFydF9nZW4yKG1vZCwgaW8pOwotCQllbHNlCi0JCQlkZXZfd2FybihkZXYsICJubyBtb3JlIFNSQyByZXN0YXJ0XG4iKTsKKwkJcnNuZF9zcmNfc3RvcChtb2QsIGlvLCBwcml2KTsKKwkJcnNuZF9zcmNfc3RhcnQobW9kLCBpbywgcHJpdik7CiAJfQogCi1yc25kX3NyY19pbnRlcnJ1cHRfZ2VuMl9vdXQ6CisJaWYgKHNyYy0+ZXJyID4gMTAyNCkgeworCQlyc25kX3NyY19pcnFfZGlzYWJsZShtb2QpOworCisJCWRldl93YXJuKGRldiwgIm5vIG1vcmUgJXNbJWRdIHJlc3RhcnRcbiIsCisJCQkgcnNuZF9tb2RfbmFtZShtb2QpLCByc25kX21vZF9pZChtb2QpKTsKKwl9CisKKwlyc25kX3NyY19zdGF0dXNfY2xlYXIobW9kKTsKK3JzbmRfc3JjX2ludGVycnVwdF9vdXQ6CisKIAlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCByc25kX3NyY19pbnRlcnJ1cHRfZ2VuMihpbnQgaXJxLCB2b2lkICpkYXRhKQorc3RhdGljIGlycXJldHVybl90IHJzbmRfc3JjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCByc25kX21vZCAqbW9kID0gZGF0YTsKIAotCXJzbmRfbW9kX2ludGVycnVwdChtb2QsIF9fcnNuZF9zcmNfaW50ZXJydXB0X2dlbjIpOworCXJzbmRfbW9kX2ludGVycnVwdChtb2QsIF9fcnNuZF9zcmNfaW50ZXJydXB0KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCByc25kX3NyY19zZXRfY29udmVydF9yYXRlX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJCSAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCi17Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSByc25kX2lvX3RvX3J1bnRpbWUoaW8pOwotCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7Ci0JdTMyIGNvbnZlcnRfcmF0ZSA9IHJzbmRfc3JjX2NvbnZlcnRfcmF0ZShpbywgc3JjKTsKLQl1MzIgY3IsIHJvdXRlOwotCXVpbnQgcmF0aW87Ci0JaW50IHJldDsKLQotCS8qIDYgLSAxLzYgYXJlIHZlcnkgZW5vdWdoIHJhdGlvIGZvciBTUkNfQlNEU1IgKi8KLQlpZiAoIWNvbnZlcnRfcmF0ZSkKLQkJcmF0aW8gPSAwOwotCWVsc2UgaWYgKGNvbnZlcnRfcmF0ZSA+IHJ1bnRpbWUtPnJhdGUpCi0JCXJhdGlvID0gMTAwICogY29udmVydF9yYXRlIC8gcnVudGltZS0+cmF0ZTsKLQllbHNlCi0JCXJhdGlvID0gMTAwICogcnVudGltZS0+cmF0ZSAvIGNvbnZlcnRfcmF0ZTsKLQotCWlmIChyYXRpbyA+IDYwMCkgewotCQlkZXZfZXJyKGRldiwgIkZTTy9GU0kgcmF0aW8gZXJyb3JcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPSByc25kX3NyY19zZXRfY29udmVydF9yYXRlKG1vZCwgaW8pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JY3IJPSAweDAwMDExMTEwOwotCXJvdXRlCT0gMHgwOwotCWlmIChjb252ZXJ0X3JhdGUpIHsKLQkJcm91dGUJPSAweDE7Ci0KLQkJaWYgKHJzbmRfZW5hYmxlX3N5bmNfY29udmVydChzcmMpKSB7Ci0JCQljciB8PSAweDE7Ci0JCQlyb3V0ZSB8PSByc25kX2lvX2lzX3BsYXkoaW8pID8KLQkJCQkoMHgxIDw8IDI0KSA6ICgweDEgPDwgMjUpOwotCQl9Ci0JfQotCi0JcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfU1JDQ1IsIGNyKTsKLQlyc25kX21vZF93cml0ZShtb2QsIFNSQ19ST1VURV9NT0RFMCwgcm91dGUpOwotCi0Jc3dpdGNoIChyc25kX21vZF9pZChtb2QpKSB7Ci0JY2FzZSA1OgotCWNhc2UgNjoKLQljYXNlIDc6Ci0JY2FzZSA4OgotCQlyc25kX21vZF93cml0ZShtb2QsIFNSQ19CU0RTUiwgMHgwMjQwMDAwMCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1JDX0JTRFNSLCAweDAxODAwMDAwKTsKLQkJYnJlYWs7Ci0JfQotCi0JcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfQlNJU1IsIDB4MDAxMDAwNjApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNuZF9zcmNfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjIoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCi0JCQkJCSAgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcnNuZF9pb190b19ydW50aW1lKGlvKTsKLQlzdHJ1Y3QgcnNuZF9zcmMgKnNyYyA9IHJzbmRfbW9kX3RvX3NyYyhtb2QpOwotCXUzMiBjb252ZXJ0X3JhdGUgPSByc25kX3NyY19jb252ZXJ0X3JhdGUoaW8sIHNyYyk7Ci0JaW50IHJldDsKLQotCWlmIChjb252ZXJ0X3JhdGUpCi0JCXJldCA9IHJzbmRfYWRnX3NldF9jb252ZXJ0X2Nsa19nZW4yKG1vZCwgaW8sCi0JCQkJCQkgICAgcnVudGltZS0+cmF0ZSwKLQkJCQkJCSAgICBjb252ZXJ0X3JhdGUpOwotCWVsc2UKLQkJcmV0ID0gcnNuZF9hZGdfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjIobW9kLCBpbyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHJzbmRfc3JjX3Byb2JlX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgICAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCi0JCQkgICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgcnNuZF9zcmNfcHJvYmVfKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKLQlpbnQgaXJxID0gc3JjLT5pbmZvLT5pcnE7CisJaW50IGlycSA9IHNyYy0+aXJxOwogCWludCByZXQ7CiAKIAlpZiAoaXJxID4gMCkgewogCQkvKgogCQkgKiBJUlEgaXMgbm90IHN1cHBvcnRlZCBvbiBub24tRFQKIAkJICogc2VlCi0JCSAqCXJzbmRfc3JjX2lycV9lbmFibGVfZ2VuMigpCisJCSAqCXJzbmRfc3JjX2lycV9lbmFibGUoKQogCQkgKi8KIAkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwKLQkJCQkgICAgICAgcnNuZF9zcmNfaW50ZXJydXB0X2dlbjIsCisJCQkJICAgICAgIHJzbmRfc3JjX2ludGVycnVwdCwKIAkJCQkgICAgICAgSVJRRl9TSEFSRUQsCiAJCQkJICAgICAgIGRldl9uYW1lKGRldiksIG1vZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHJzbmRfZG1hX2luaXQoaW8sCi0JCQkgICAgcnNuZF9tb2RfdG9fZG1hKG1vZCksCi0JCQkgICAgc3JjLT5pbmZvLT5kbWFfaWQpOworCXNyYy0+ZG1hID0gcnNuZF9kbWFfYXR0YWNoKGlvLCBtb2QsIDApOworCWlmIChJU19FUlIoc3JjLT5kbWEpKQorCQlyZXR1cm4gUFRSX0VSUihzcmMtPmRtYSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHJzbmRfc3JjX3JlbW92ZV9nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJCXN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAotCQkJCXN0cnVjdCByc25kX3ByaXYgKnByaXYpCi17Ci0JcnNuZF9kbWFfcXVpdChpbywgcnNuZF9tb2RfdG9fZG1hKG1vZCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNuZF9zcmNfaW5pdF9nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCi0JCQkgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByc25kX3NyY19pbml0KG1vZCwgcHJpdik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSByc25kX3NyY19zZXRfY29udmVydF9yYXRlX2dlbjIobW9kLCBpbyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSByc25kX3NyY19zZXRfY29udmVydF90aW1pbmdfZ2VuMihpbywgbW9kKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJzbmRfc3JjX3N0YXJ0X2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgICAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCi0JCQkgICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKLXsKLQlyc25kX2RtYV9zdGFydChpbywgcnNuZF9tb2RfdG9fZG1hKG1vZCkpOwotCi0JcmV0dXJuIF9yc25kX3NyY19zdGFydF9nZW4yKG1vZCwgaW8pOwotfQotCi1zdGF0aWMgaW50IHJzbmRfc3JjX3N0b3BfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSAgICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAotCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gX3JzbmRfc3JjX3N0b3BfZ2VuMihtb2QpOwotCi0JcnNuZF9kbWFfc3RvcChpbywgcnNuZF9tb2RfdG9fZG1hKG1vZCkpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgcnNuZF9zcmNfcmVjb252ZXJ0X3VwZGF0ZShzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKLQkJCQkgICAgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcnNuZF9pb190b19ydW50aW1lKGlvKTsKLQlzdHJ1Y3QgcnNuZF9zcmMgKnNyYyA9IHJzbmRfbW9kX3RvX3NyYyhtb2QpOwotCXUzMiBjb252ZXJ0X3JhdGUgPSByc25kX3NyY19jb252ZXJ0X3JhdGUoaW8sIHNyYyk7Ci0JdTMyIGZzcmF0ZTsKLQotCWlmICghcnVudGltZSkKLQkJcmV0dXJuOwotCi0JaWYgKCFjb252ZXJ0X3JhdGUpCi0JCWNvbnZlcnRfcmF0ZSA9IHJ1bnRpbWUtPnJhdGU7Ci0KLQlmc3JhdGUgPSAweDA0MDAwMDAgLyBjb252ZXJ0X3JhdGUgKiBydW50aW1lLT5yYXRlOwotCi0JLyogdXBkYXRlIElGUyAqLwotCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1JDX0lGU1ZSLCBmc3JhdGUpOwotfQotCi1zdGF0aWMgaW50IHJzbmRfc3JjX3BjbV9uZXdfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKK3N0YXRpYyBpbnQgcnNuZF9zcmNfcGNtX25ldyhzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKIAkJCSAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCSAgICBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCByc25kX2RhaSAqcmRhaSA9IHJzbmRfaW9fdG9fcmRhaShpbyk7CisJc3RydWN0IHJzbmRfbW9kICpkdmMgPSByc25kX2lvX3RvX21vZF9kdmMoaW8pOwogCXN0cnVjdCByc25kX3NyYyAqc3JjID0gcnNuZF9tb2RfdG9fc3JjKG1vZCk7CiAJaW50IHJldDsKIApAQCAtOTM3LDEzICs1MjIsMTkgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKgorCSAqIFNSQyBJbiBkb2Vzbid0IHdvcmsgaWYgRFZDIHdhcyBlbmFibGVkCisJICovCisJaWYgKGR2YyAmJiAhcnNuZF9pb19pc19wbGF5KGlvKSkKKwkJcmV0dXJuIDA7CisKKwkvKgogCSAqIGVuYWJsZSBzeW5jIGNvbnZlcnQKIAkgKi8KIAlyZXQgPSByc25kX2tjdHJsX25ld19zKG1vZCwgaW8sIHJ0ZCwKIAkJCSAgICAgICByc25kX2lvX2lzX3BsYXkoaW8pID8KIAkJCSAgICAgICAiU1JDIE91dCBSYXRlIFN3aXRjaCIgOgogCQkJICAgICAgICJTUkMgSW4gUmF0ZSBTd2l0Y2giLAotCQkJICAgICAgIHJzbmRfc3JjX3JlY29udmVydF91cGRhdGUsCisJCQkgICAgICAgcnNuZF9zcmNfc2V0X2NvbnZlcnRfcmF0ZSwKIAkJCSAgICAgICAmc3JjLT5zZW4sIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtOTUyLDIzICs1NDMsMjIgQEAKIAkJCSAgICAgICByc25kX2lvX2lzX3BsYXkoaW8pID8KIAkJCSAgICAgICAiU1JDIE91dCBSYXRlIiA6CiAJCQkgICAgICAgIlNSQyBJbiBSYXRlIiwKLQkJCSAgICAgICByc25kX3NyY19yZWNvbnZlcnRfdXBkYXRlLAorCQkJICAgICAgIHJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGUsCiAJCQkgICAgICAgJnNyYy0+c3luYywgMTkyMDAwKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnNuZF9tb2Rfb3BzIHJzbmRfc3JjX2dlbjJfb3BzID0geworc3RhdGljIHN0cnVjdCByc25kX21vZF9vcHMgcnNuZF9zcmNfb3BzID0gewogCS5uYW1lCT0gU1JDX05BTUUsCiAJLmRtYV9yZXEgPSByc25kX3NyY19kbWFfcmVxLAotCS5wcm9iZQk9IHJzbmRfc3JjX3Byb2JlX2dlbjIsCi0JLnJlbW92ZQk9IHJzbmRfc3JjX3JlbW92ZV9nZW4yLAotCS5pbml0CT0gcnNuZF9zcmNfaW5pdF9nZW4yLAorCS5wcm9iZQk9IHJzbmRfc3JjX3Byb2JlXywKKwkuaW5pdAk9IHJzbmRfc3JjX2luaXQsCiAJLnF1aXQJPSByc25kX3NyY19xdWl0LAotCS5zdGFydAk9IHJzbmRfc3JjX3N0YXJ0X2dlbjIsCi0JLnN0b3AJPSByc25kX3NyY19zdG9wX2dlbjIsCisJLnN0YXJ0CT0gcnNuZF9zcmNfc3RhcnQsCisJLnN0b3AJPSByc25kX3NyY19zdG9wLAogCS5od19wYXJhbXMgPSByc25kX3NyY19od19wYXJhbXMsCi0JLnBjbV9uZXcgPSByc25kX3NyY19wY21fbmV3X2dlbjIsCisJLnBjbV9uZXcgPSByc25kX3NyY19wY21fbmV3LAogfTsKIAogc3RydWN0IHJzbmRfbW9kICpyc25kX3NyY19tb2RfZ2V0KHN0cnVjdCByc25kX3ByaXYgKnByaXYsIGludCBpZCkKQEAgLTk3NiwxMTMgKzU2Niw3OCBAQAogCWlmIChXQVJOX09OKGlkIDwgMCB8fCBpZCA+PSByc25kX3NyY19ucihwcml2KSkpCiAJCWlkID0gMDsKIAotCXJldHVybiByc25kX21vZF9nZXQoKHN0cnVjdCByc25kX3NyYyAqKShwcml2LT5zcmMpICsgaWQpOworCXJldHVybiByc25kX21vZF9nZXQocnNuZF9zcmNfZ2V0KHByaXYsIGlkKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJzbmRfb2ZfcGFyc2Vfc3JjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKK2ludCByc25kX3NyY19wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3JjX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0Jc3RydWN0IHJjYXJfc25kX2luZm8gKmluZm8gPSByc25kX3ByaXZfdG9faW5mbyhwcml2KTsKLQlzdHJ1Y3QgcnNuZF9zcmNfcGxhdGZvcm1faW5mbyAqc3JjX2luZm87Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLQlpbnQgbnIsIGk7Ci0KLQlpZiAoIW9mX2RhdGEpCi0JCXJldHVybjsKLQotCXNyY19ub2RlID0gcnNuZF9zcmNfb2Zfbm9kZShwcml2KTsKLQlpZiAoIXNyY19ub2RlKQotCQlyZXR1cm47Ci0KLQluciA9IG9mX2dldF9jaGlsZF9jb3VudChzcmNfbm9kZSk7Ci0JaWYgKCFucikKLQkJZ290byByc25kX29mX3BhcnNlX3NyY19lbmQ7Ci0KLQlzcmNfaW5mbyA9IGRldm1fa3phbGxvYyhkZXYsCi0JCQkJc2l6ZW9mKHN0cnVjdCByc25kX3NyY19wbGF0Zm9ybV9pbmZvKSAqIG5yLAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghc3JjX2luZm8pIHsKLQkJZGV2X2VycihkZXYsICJzcmMgaW5mbyBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJZ290byByc25kX29mX3BhcnNlX3NyY19lbmQ7Ci0JfQotCi0JaW5mby0+c3JjX2luZm8JCT0gc3JjX2luZm87Ci0JaW5mby0+c3JjX2luZm9fbnIJPSBucjsKLQotCWkgPSAwOwotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoc3JjX25vZGUsIG5wKSB7Ci0JCXNyY19pbmZvW2ldLmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKLQotCQlpKys7Ci0JfQotCi1yc25kX29mX3BhcnNlX3NyY19lbmQ6Ci0Jb2Zfbm9kZV9wdXQoc3JjX25vZGUpOwotfQotCi1pbnQgcnNuZF9zcmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJICAgY29uc3Qgc3RydWN0IHJzbmRfb2ZfZGF0YSAqb2ZfZGF0YSwKLQkJICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgcmNhcl9zbmRfaW5mbyAqaW5mbyA9IHJzbmRfcHJpdl90b19pbmZvKHByaXYpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJc3RydWN0IHJzbmRfc3JjICpzcmM7Ci0Jc3RydWN0IHJzbmRfbW9kX29wcyAqb3BzOwogCXN0cnVjdCBjbGsgKmNsazsKIAljaGFyIG5hbWVbUlNORF9TUkNfTkFNRV9TSVpFXTsKIAlpbnQgaSwgbnIsIHJldDsKIAotCW9wcyA9IE5VTEw7Ci0JaWYgKHJzbmRfaXNfZ2VuMShwcml2KSkgewotCQlvcHMgPSAmcnNuZF9zcmNfZ2VuMV9vcHM7Ci0JCWRldl93YXJuKGRldiwgIkdlbjEgc3VwcG9ydCB3aWxsIGJlIHJlbW92ZWQgc29vblxuIik7Ci0JfQotCWlmIChyc25kX2lzX2dlbjIocHJpdikpCi0JCW9wcyA9ICZyc25kX3NyY19nZW4yX29wczsKLQlpZiAoIW9wcykgewotCQlkZXZfZXJyKGRldiwgInVua25vd24gR2VuZXJhdGlvblxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJzbmRfb2ZfcGFyc2Vfc3JjKHBkZXYsIG9mX2RhdGEsIHByaXYpOwotCi0JLyoKLQkgKiBpbml0IFNSQwotCSAqLwotCW5yCT0gaW5mby0+c3JjX2luZm9fbnI7Ci0JaWYgKCFucikKKwkvKiBUaGlzIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgR2VuMSBhdCB0aGlzIHBvaW50ICovCisJaWYgKHJzbmRfaXNfZ2VuMShwcml2KSkKIAkJcmV0dXJuIDA7CiAKKwlub2RlID0gcnNuZF9zcmNfb2Zfbm9kZShwcml2KTsKKwlpZiAoIW5vZGUpCisJCXJldHVybiAwOyAvKiBub3QgdXNlZCBpcyBub3QgZXJyb3IgKi8KKworCW5yID0gb2ZfZ2V0X2NoaWxkX2NvdW50KG5vZGUpOworCWlmICghbnIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byByc25kX3NyY19wcm9iZV9kb25lOworCX0KKwogCXNyYwk9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqc3JjKSAqIG5yLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNyYykKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFzcmMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byByc25kX3NyY19wcm9iZV9kb25lOworCX0KIAogCXByaXYtPnNyY19ucgk9IG5yOwogCXByaXYtPnNyYwk9IHNyYzsKIAotCWZvcl9lYWNoX3JzbmRfc3JjKHNyYywgcHJpdiwgaSkgeworCWkgPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgbnApIHsKKwkJc3JjID0gcnNuZF9zcmNfZ2V0KHByaXYsIGkpOworCiAJCXNucHJpbnRmKG5hbWUsIFJTTkRfU1JDX05BTUVfU0laRSwgIiVzLiVkIiwKIAkJCSBTUkNfTkFNRSwgaSk7CiAKKwkJc3JjLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCWlmICghc3JjLT5pcnEpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHJzbmRfc3JjX3Byb2JlX2RvbmU7CisJCX0KKwogCQljbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBuYW1lKTsKLQkJaWYgKElTX0VSUihjbGspKQotCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwkJaWYgKElTX0VSUihjbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCQlnb3RvIHJzbmRfc3JjX3Byb2JlX2RvbmU7CisJCX0KIAotCQlzcmMtPmluZm8gPSAmaW5mby0+c3JjX2luZm9baV07Ci0KLQkJcmV0ID0gcnNuZF9tb2RfaW5pdChwcml2LCByc25kX21vZF9nZXQoc3JjKSwgb3BzLCBjbGssIFJTTkRfTU9EX1NSQywgaSk7CisJCXJldCA9IHJzbmRfbW9kX2luaXQocHJpdiwgcnNuZF9tb2RfZ2V0KHNyYyksCisJCQkJICAgICZyc25kX3NyY19vcHMsIGNsaywgUlNORF9NT0RfU1JDLCBpKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIHJzbmRfc3JjX3Byb2JlX2RvbmU7CisKKwkJaSsrOwogCX0KIAotCXJldHVybiAwOworCXJldCA9IDA7CisKK3JzbmRfc3JjX3Byb2JlX2RvbmU6CisJb2Zfbm9kZV9wdXQobm9kZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi12b2lkIHJzbmRfc3JjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit2b2lkIHJzbmRfc3JjX3JlbW92ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCByc25kX3NyYyAqc3JjOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3JjYXIvc3NpLmMgYi9zb3VuZC9zb2Mvc2gvcmNhci9zc2kuYwppbmRleCAxNDI3ZWMyLi43ZWU4OWRhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvcmNhci9zc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvcmNhci9zc2kuYwpAQCAtMjQsNyArMjQsOSBAQAogI2RlZmluZQlPSUVOCQkoMSA8PCAyNikJLyogT3ZlcmZsb3cgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZQlJSUVOCQkoMSA8PCAyNSkJLyogSWRsZSBNb2RlIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUJRElFTgkJKDEgPDwgMjQpCS8qIERhdGEgSW50ZXJydXB0IEVuYWJsZSAqLwotCisjZGVmaW5lCUNITkxfNAkJKDEgPDwgMjIpCS8qIENoYW5uZWxzICovCisjZGVmaW5lCUNITkxfNgkJKDIgPDwgMjIpCS8qIENoYW5uZWxzICovCisjZGVmaW5lCUNITkxfOAkJKDMgPDwgMjIpCS8qIENoYW5uZWxzICovCiAjZGVmaW5lCURXTF84CQkoMCA8PCAxOSkJLyogRGF0YSBXb3JkIExlbmd0aCAqLwogI2RlZmluZQlEV0xfMTYJCSgxIDw8IDE5KQkvKiBEYXRhIFdvcmQgTGVuZ3RoICovCiAjZGVmaW5lCURXTF8xOAkJKDIgPDwgMTkpCS8qIERhdGEgV29yZCBMZW5ndGggKi8KQEAgLTM5LDYgKzQxLDcgQEAKICNkZWZpbmUJU0NLUAkJKDEgPDwgMTMpCS8qIFNlcmlhbCBCaXQgQ2xvY2sgUG9sYXJpdHkgKi8KICNkZWZpbmUJU1dTUAkJKDEgPDwgMTIpCS8qIFNlcmlhbCBXUyBQb2xhcml0eSAqLwogI2RlZmluZQlTRFRBCQkoMSA8PCAxMCkJLyogU2VyaWFsIERhdGEgQWxpZ25tZW50ICovCisjZGVmaW5lCVBEVEEJCSgxIDw8ICA5KQkvKiBQYXJhbGxlbCBEYXRhIEFsaWdubWVudCAqLwogI2RlZmluZQlERUwJCSgxIDw8ICA4KQkvKiBTZXJpYWwgRGF0YSBEZWxheSAqLwogI2RlZmluZQlDS0RWKHYpCQkodiA8PCAgNCkJLyogU2VyaWFsIENsb2NrIERpdmlzaW9uIFJhdGlvICovCiAjZGVmaW5lCVRSTUQJCSgxIDw8ICAxKQkvKiBUcmFuc21pdC9SZWNlaXZlIE1vZGUgU2VsZWN0ICovCkBAIC01NiwzNSArNTksNDQgQEAKICAqIFNTSVdTUgogICovCiAjZGVmaW5lIENPTlQJCSgxIDw8IDgpCS8qIFdTIENvbnRpbnVlIEZ1bmN0aW9uICovCisjZGVmaW5lIFdTX01PREUJCSgxIDw8IDApCS8qIFdTIE1vZGUgKi8KIAogI2RlZmluZSBTU0lfTkFNRSAic3NpIgogCiBzdHJ1Y3QgcnNuZF9zc2kgewotCXN0cnVjdCByc25kX3NzaV9wbGF0Zm9ybV9pbmZvICppbmZvOyAvKiByY2FyX3NuZC5oICovCiAJc3RydWN0IHJzbmRfc3NpICpwYXJlbnQ7CiAJc3RydWN0IHJzbmRfbW9kIG1vZDsKKwlzdHJ1Y3QgcnNuZF9tb2QgKmRtYTsKIAorCXUzMiBmbGFnczsKIAl1MzIgY3Jfb3duOwogCXUzMiBjcl9jbGs7CisJdTMyIGNyX21vZGU7CisJdTMyIHdzcjsKIAlpbnQgY2hhbjsKKwlpbnQgcmF0ZTsKIAlpbnQgZXJyOworCWludCBpcnE7CiAJdW5zaWduZWQgaW50IHVzcmNudDsKIH07CiAKKy8qIGZsYWdzICovCisjZGVmaW5lIFJTTkRfU1NJX0NMS19QSU5fU0hBUkUJCSgxIDw8IDApCisjZGVmaW5lIFJTTkRfU1NJX05PX0JVU0lGCQkoMSA8PCAxKSAvKiBTU0krRE1BIHdpdGhvdXQgQlVTSUYgKi8KKwogI2RlZmluZSBmb3JfZWFjaF9yc25kX3NzaShwb3MsIHByaXYsIGkpCQkJCQlcCiAJZm9yIChpID0gMDsJCQkJCQkJXAogCSAgICAgKGkgPCByc25kX3NzaV9ucihwcml2KSkgJiYJCQkJCVwKIAkJKChwb3MpID0gKChzdHJ1Y3QgcnNuZF9zc2kgKikocHJpdiktPnNzaSArIGkpKTsJCVwKIAkgICAgIGkrKykKIAorI2RlZmluZSByc25kX3NzaV9nZXQocHJpdiwgaWQpICgoc3RydWN0IHJzbmRfc3NpICopKHByaXYtPnNzaSkgKyBpZCkKKyNkZWZpbmUgcnNuZF9zc2lfdG9fZG1hKG1vZCkgKChzc2kpLT5kbWEpCiAjZGVmaW5lIHJzbmRfc3NpX25yKHByaXYpICgocHJpdiktPnNzaV9ucikKICNkZWZpbmUgcnNuZF9tb2RfdG9fc3NpKF9tb2QpIGNvbnRhaW5lcl9vZigoX21vZCksIHN0cnVjdCByc25kX3NzaSwgbW9kKQotI2RlZmluZSByc25kX3NzaV9waW9fYXZhaWxhYmxlKHNzaSkgKChzc2kpLT5pbmZvLT5pcnEgPiAwKQotI2RlZmluZSByc25kX3NzaV9wYXJlbnQoc3NpKSAoKHNzaSktPnBhcmVudCkKLSNkZWZpbmUgcnNuZF9zc2lfbW9kZV9mbGFncyhwKSAoKHApLT5pbmZvLT5mbGFncykKLSNkZWZpbmUgcnNuZF9zc2lfZGFpX2lkKHNzaSkgKChzc2kpLT5pbmZvLT5kYWlfaWQpCi0jZGVmaW5lIHJzbmRfc3NpX29mX25vZGUocHJpdikgXAotCW9mX2dldF9jaGlsZF9ieV9uYW1lKHJzbmRfcHJpdl90b19kZXYocHJpdiktPm9mX25vZGUsICJyY2FyX3NvdW5kLHNzaSIpCisjZGVmaW5lIHJzbmRfc3NpX21vZGVfZmxhZ3MocCkgKChwKS0+ZmxhZ3MpCisjZGVmaW5lIHJzbmRfc3NpX2lzX3BhcmVudChzc2ksIGlvKSAoKHNzaSkgPT0gcnNuZF9pb190b19tb2Rfc3NpcChpbykpCisjZGVmaW5lIHJzbmRfc3NpX2lzX211bHRpX3NsYXZlKHNzaSwgaW8pICgobW9kKSAhPSByc25kX2lvX3RvX21vZF9zc2koaW8pKQogCiBpbnQgcnNuZF9zc2lfdXNlX2J1c2lmKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQogewpAQCAtMTAzLDYgKzExNSwxNiBAQAogCXJldHVybiB1c2VfYnVzaWY7CiB9CiAKK3N0YXRpYyB2b2lkIHJzbmRfc3NpX3N0YXR1c19jbGVhcihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKK3sKKwlyc25kX21vZF93cml0ZShtb2QsIFNTSVNSLCAwKTsKK30KKworc3RhdGljIHUzMiByc25kX3NzaV9zdGF0dXNfZ2V0KHN0cnVjdCByc25kX21vZCAqbW9kKQoreworCXJldHVybiByc25kX21vZF9yZWFkKG1vZCwgU1NJU1IpOworfQorCiBzdGF0aWMgdm9pZCByc25kX3NzaV9zdGF0dXNfY2hlY2soc3RydWN0IHJzbmRfbW9kICptb2QsCiAJCQkJICB1MzIgYml0KQogewpAQCAtMTEyLDcgKzEzNCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKSB7Ci0JCXN0YXR1cyA9IHJzbmRfbW9kX3JlYWQobW9kLCBTU0lTUik7CisJCXN0YXR1cyA9IHJzbmRfc3NpX3N0YXR1c19nZXQobW9kKTsKIAkJaWYgKHN0YXR1cyAmIGJpdCkKIAkJCXJldHVybjsKIApAQCAtMTIyLDEzICsxNDQsNzkgQEAKIAlkZXZfd2FybihkZXYsICJzdGF0dXMgY2hlY2sgZmFpbGVkXG4iKTsKIH0KIAorc3RhdGljIGludCByc25kX3NzaV9pcnFfZW5hYmxlKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCkKK3sKKwlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihzc2lfbW9kKTsKKworCWlmIChyc25kX2lzX2dlbjEocHJpdikpCisJCXJldHVybiAwOworCisJLyogZW5hYmxlIFNTSSBpbnRlcnJ1cHQgaWYgR2VuMiAqLworCXJzbmRfbW9kX3dyaXRlKHNzaV9tb2QsIFNTSV9JTlRfRU5BQkxFLAorCQkgICAgICAgcnNuZF9zc2lfaXNfZG1hX21vZGUoc3NpX21vZCkgPworCQkgICAgICAgMHgwZTAwMDAwMCA6IDB4MGYwMDAwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnNuZF9zc2lfaXJxX2Rpc2FibGUoc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kKQoreworCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KHNzaV9tb2QpOworCisJaWYgKHJzbmRfaXNfZ2VuMShwcml2KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBkaXNhYmxlIFNTSSBpbnRlcnJ1cHQgaWYgR2VuMiAqLworCXJzbmRfbW9kX3dyaXRlKHNzaV9tb2QsIFNTSV9JTlRfRU5BQkxFLCAweDAwMDAwMDAwKTsKKworCXJldHVybiAwOworfQorCit1MzIgcnNuZF9zc2lfbXVsdGlfc2xhdmVzKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQoreworCXN0cnVjdCByc25kX21vZCAqbW9kOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSByc25kX2lvX3RvX3J1bnRpbWUoaW8pOworCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX2lvX3RvX3ByaXYoaW8pOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CisJZW51bSByc25kX21vZF90eXBlIHR5cGVzW10gPSB7CisJCVJTTkRfTU9EX1NTSU0xLAorCQlSU05EX01PRF9TU0lNMiwKKwkJUlNORF9NT0RfU1NJTTMsCisJfTsKKwlpbnQgaSwgbWFzazsKKworCXN3aXRjaCAocnVudGltZS0+Y2hhbm5lbHMpIHsKKwljYXNlIDI6IC8qIE11bHRpIGNoYW5uZWwgaXMgbm90IG5lZWRlZCBmb3IgU3RlcmVvICovCisJCXJldHVybiAwOworCWNhc2UgNjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBjaGFubmVsXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbWFzayA9IDA7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHlwZXMpOyBpKyspIHsKKwkJbW9kID0gcnNuZF9pb190b19tb2QoaW8sIHR5cGVzW2ldKTsKKwkJaWYgKCFtb2QpCisJCQljb250aW51ZTsKKworCQltYXNrIHw9IDEgPDwgcnNuZF9tb2RfaWQobW9kKTsKKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKwogc3RhdGljIGludCByc25kX3NzaV9tYXN0ZXJfY2xrX3N0YXJ0KHN0cnVjdCByc25kX3NzaSAqc3NpLAogCQkJCSAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCiB7CiAJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfaW9fdG9fcHJpdihpbyk7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHJzbmRfaW9fdG9fcnVudGltZShpbyk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKKwlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkgPSByc25kX2lvX3RvX3JkYWkoaW8pOwogCXN0cnVjdCByc25kX21vZCAqbW9kID0gcnNuZF9tb2RfZ2V0KHNzaSk7CisJc3RydWN0IHJzbmRfbW9kICpzc2lfcGFyZW50X21vZCA9IHJzbmRfaW9fdG9fbW9kX3NzaXAoaW8pOworCWludCBzbG90cyA9IHJzbmRfZ2V0X3Nsb3Rfd2lkdGgoaW8pOwogCWludCBqLCByZXQ7CiAJaW50IHNzaV9jbGtfbXVsX3RhYmxlW10gPSB7CiAJCTEsIDIsIDQsIDgsIDE2LCA2LCAxMiwKQEAgLTEzNiw2ICsyMjQsMjQgQEAKIAl1bnNpZ25lZCBpbnQgbWFpbl9yYXRlOwogCXVuc2lnbmVkIGludCByYXRlID0gcnNuZF9zcmNfZ2V0X3NzaV9yYXRlKHByaXYsIGlvLCBydW50aW1lKTsKIAorCWlmICghcnNuZF9yZGFpX2lzX2Nsa19tYXN0ZXIocmRhaSkpCisJCXJldHVybiAwOworCisJaWYgKHNzaV9wYXJlbnRfbW9kICYmICFyc25kX3NzaV9pc19wYXJlbnQobW9kLCBpbykpCisJCXJldHVybiAwOworCisJaWYgKHJzbmRfc3NpX2lzX211bHRpX3NsYXZlKG1vZCwgaW8pKQorCQlyZXR1cm4gMDsKKworCWlmIChzc2ktPnVzcmNudCA+IDEpIHsKKwkJaWYgKHNzaS0+cmF0ZSAhPSByYXRlKSB7CisJCQlkZXZfZXJyKGRldiwgIlNTSSBwYXJlbnQvY2hpbGQgc2hvdWxkIHVzZSBzYW1lIHJhdGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIEZpbmQgYmVzdCBjbG9jaywgYW5kIHRyeSB0byBzdGFydCBBREcKIAkgKi8KQEAgLTE0MywxNSArMjQ5LDE4IEBACiAKIAkJLyoKIAkJICogdGhpcyBkcml2ZXIgaXMgYXNzdW1pbmcgdGhhdAotCQkgKiBzeXN0ZW0gd29yZCBpcyA2NGZzICg9IDIgeCAzMmJpdCkKKwkJICogc3lzdGVtIHdvcmQgaXMgMzJiaXQgeCBzbG90cwogCQkgKiBzZWUgcnNuZF9zc2lfaW5pdCgpCiAJCSAqLwotCQltYWluX3JhdGUgPSByYXRlICogMzIgKiAyICogc3NpX2Nsa19tdWxfdGFibGVbal07CisJCW1haW5fcmF0ZSA9IHJhdGUgKiAzMiAqIHNsb3RzICogc3NpX2Nsa19tdWxfdGFibGVbal07CiAKIAkJcmV0ID0gcnNuZF9hZGdfc3NpX2Nsa190cnlfc3RhcnQobW9kLCBtYWluX3JhdGUpOwogCQlpZiAoMCA9PSByZXQpIHsKIAkJCXNzaS0+Y3JfY2xrCT0gRk9SQ0UgfCBTV0xfMzIgfAogCQkJCVNDS0QgfCBTV1NEIHwgQ0tEVihqKTsKKwkJCXNzaS0+d3NyID0gQ09OVDsKKworCQkJc3NpLT5yYXRlID0gcmF0ZTsKIAogCQkJZGV2X2RiZyhkZXYsICIlc1slZF0gb3V0cHV0cyAldSBIelxuIiwKIAkJCQlyc25kX21vZF9uYW1lKG1vZCksCkBAIC0xNjUsMTEzICsyNzQsOTEgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIHZvaWQgcnNuZF9zc2lfbWFzdGVyX2Nsa19zdG9wKHN0cnVjdCByc25kX3NzaSAqc3NpKQorc3RhdGljIHZvaWQgcnNuZF9zc2lfbWFzdGVyX2Nsa19zdG9wKHN0cnVjdCByc25kX3NzaSAqc3NpLAorCQkJCSAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCiB7CisJc3RydWN0IHJzbmRfZGFpICpyZGFpID0gcnNuZF9pb190b19yZGFpKGlvKTsKIAlzdHJ1Y3QgcnNuZF9tb2QgKm1vZCA9IHJzbmRfbW9kX2dldChzc2kpOworCXN0cnVjdCByc25kX21vZCAqc3NpX3BhcmVudF9tb2QgPSByc25kX2lvX3RvX21vZF9zc2lwKGlvKTsKIAotCXNzaS0+Y3JfY2xrID0gMDsKKwlpZiAoIXJzbmRfcmRhaV9pc19jbGtfbWFzdGVyKHJkYWkpKQorCQlyZXR1cm47CisKKwlpZiAoc3NpX3BhcmVudF9tb2QgJiYgIXJzbmRfc3NpX2lzX3BhcmVudChtb2QsIGlvKSkKKwkJcmV0dXJuOworCisJaWYgKHNzaS0+dXNyY250ID4gMSkKKwkJcmV0dXJuOworCisJc3NpLT5jcl9jbGsJPSAwOworCXNzaS0+cmF0ZQk9IDA7CisKIAlyc25kX2FkZ19zc2lfY2xrX3N0b3AobW9kKTsKIH0KIAotc3RhdGljIHZvaWQgcnNuZF9zc2lfaHdfc3RhcnQoc3RydWN0IHJzbmRfc3NpICpzc2ksCi0JCQkgICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbykKK3N0YXRpYyBpbnQgcnNuZF9zc2lfY29uZmlnX2luaXQoc3RydWN0IHJzbmRfc3NpICpzc2ksCisJCQkJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCiB7Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfaW9fdG9fcHJpdihpbyk7CiAJc3RydWN0IHJzbmRfZGFpICpyZGFpID0gcnNuZF9pb190b19yZGFpKGlvKTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwotCXN0cnVjdCByc25kX21vZCAqbW9kID0gcnNuZF9tb2RfZ2V0KHNzaSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHJzbmRfaW9fdG9fcnVudGltZShpbyk7CisJdTMyIGNyX293bjsKIAl1MzIgY3JfbW9kZTsKLQl1MzIgY3I7CisJdTMyIHdzcjsKKwlpbnQgaXNfdGRtOwogCi0JaWYgKDAgPT0gc3NpLT51c3JjbnQpIHsKLQkJcnNuZF9tb2RfcG93ZXJfb24obW9kKTsKKwlpc190ZG0gPSAocnNuZF9nZXRfc2xvdF93aWR0aChpbykgPj0gNikgPyAxIDogMDsKIAotCQlpZiAocnNuZF9yZGFpX2lzX2Nsa19tYXN0ZXIocmRhaSkpIHsKLQkJCXN0cnVjdCByc25kX3NzaSAqc3NpX3BhcmVudCA9IHJzbmRfc3NpX3BhcmVudChzc2kpOworCS8qCisJICogYWx3YXlzIHVzZSAzMmJpdCBzeXN0ZW0gd29yZC4KKwkgKiBzZWUgYWxzbyByc25kX3NzaV9tYXN0ZXJfY2xrX2VuYWJsZSgpCisJICovCisJY3Jfb3duID0gRk9SQ0UgfCBTV0xfMzIgfCBQRFRBOwogCi0JCQlpZiAoc3NpX3BhcmVudCkKLQkJCQlyc25kX3NzaV9od19zdGFydChzc2lfcGFyZW50LCBpbyk7Ci0JCQllbHNlCi0JCQkJcnNuZF9zc2lfbWFzdGVyX2Nsa19zdGFydChzc2ksIGlvKTsKLQkJfQorCWlmIChyZGFpLT5iaXRfY2xrX2ludikKKwkJY3Jfb3duIHw9IFNDS1A7CisJaWYgKHJkYWktPmZybV9jbGtfaW52IF4gaXNfdGRtKQorCQljcl9vd24gfD0gU1dTUDsKKwlpZiAocmRhaS0+ZGF0YV9hbGlnbm1lbnQpCisJCWNyX293biB8PSBTRFRBOworCWlmIChyZGFpLT5zeXNfZGVsYXkpCisJCWNyX293biB8PSBERUw7CisJaWYgKHJzbmRfaW9faXNfcGxheShpbykpCisJCWNyX293biB8PSBUUk1EOworCisJc3dpdGNoIChydW50aW1lLT5zYW1wbGVfYml0cykgeworCWNhc2UgMTY6CisJCWNyX293biB8PSBEV0xfMTY7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWNyX293biB8PSBEV0xfMjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChyc25kX3NzaV9pc19kbWFfbW9kZShtb2QpKSB7CisJaWYgKHJzbmRfc3NpX2lzX2RtYV9tb2RlKHJzbmRfbW9kX2dldChzc2kpKSkgewogCQljcl9tb2RlID0gVUlFTiB8IE9JRU4gfAkvKiBvdmVyL3VuZGVyIHJ1biAqLwogCQkJICBETUVOOwkJLyogRE1BIDogZW5hYmxlIERNQSAqLwogCX0gZWxzZSB7CiAJCWNyX21vZGUgPSBESUVOOwkJLyogUElPIDogZW5hYmxlIERhdGEgaW50ZXJydXB0ICovCiAJfQogCi0JY3IgID0Jc3NpLT5jcl9vd24JfAotCQlzc2ktPmNyX2Nsawl8Ci0JCWNyX21vZGUJCXwKLQkJRU47Ci0KLQlyc25kX21vZF93cml0ZShtb2QsIFNTSUNSLCBjcik7Ci0KLQkvKiBlbmFibGUgV1MgY29udGludWUgKi8KLQlpZiAocnNuZF9yZGFpX2lzX2Nsa19tYXN0ZXIocmRhaSkpCi0JCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1NJV1NSLCBDT05UKTsKLQotCS8qIGNsZWFyIGVycm9yIHN0YXR1cyAqLwotCXJzbmRfbW9kX3dyaXRlKG1vZCwgU1NJU1IsIDApOwotCi0Jc3NpLT51c3JjbnQrKzsKLQotCWRldl9kYmcoZGV2LCAiJXNbJWRdIGh3IHN0YXJ0ZWRcbiIsCi0JCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJzbmRfc3NpX2h3X3N0b3Aoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIHN0cnVjdCByc25kX3NzaSAqc3NpKQotewotCXN0cnVjdCByc25kX21vZCAqbW9kID0gcnNuZF9tb2RfZ2V0KHNzaSk7Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKLQlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkgPSByc25kX2lvX3RvX3JkYWkoaW8pOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7Ci0JdTMyIGNyOwotCi0JaWYgKDAgPT0gc3NpLT51c3JjbnQpIHsKLQkJZGV2X2VycihkZXYsICIlcyBjYWxsZWQgd2l0aG91dCBzdGFydGluZ1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm47CisJLyoKKwkgKiBURE0gRXh0ZW5kIE1vZGUKKwkgKiBzZWUKKwkgKglyc25kX3NzaXVfaW5pdF9nZW4yKCkKKwkgKi8KKwl3c3IgPSBzc2ktPndzcjsKKwlpZiAoaXNfdGRtKSB7CisJCXdzcgl8PSBXU19NT0RFOworCQljcl9vd24JfD0gQ0hOTF84OwogCX0KIAotCXNzaS0+dXNyY250LS07CisJc3NpLT5jcl9vd24JPSBjcl9vd247CisJc3NpLT5jcl9tb2RlCT0gY3JfbW9kZTsKKwlzc2ktPndzcgk9IHdzcjsKIAotCWlmICgwID09IHNzaS0+dXNyY250KSB7Ci0JCS8qCi0JCSAqIGRpc2FibGUgYWxsIElSUSwKLQkJICogYW5kLCB3YWl0IGFsbCBkYXRhIHdhcyBzZW50Ci0JCSAqLwotCQljciAgPQlzc2ktPmNyX293bgl8Ci0JCQlzc2ktPmNyX2NsazsKLQotCQlyc25kX21vZF93cml0ZShtb2QsIFNTSUNSLCBjciB8IEVOKTsKLQkJcnNuZF9zc2lfc3RhdHVzX2NoZWNrKG1vZCwgRElSUSk7Ci0KLQkJLyoKLQkJICogZGlzYWJsZSBTU0ksCi0JCSAqIGFuZCwgd2FpdCBpZGxlIHN0YXRlCi0JCSAqLwotCQlyc25kX21vZF93cml0ZShtb2QsIFNTSUNSLCBjcik7CS8qIGRpc2FibGVkIGFsbCAqLwotCQlyc25kX3NzaV9zdGF0dXNfY2hlY2sobW9kLCBJSVJRKTsKLQotCQlpZiAocnNuZF9yZGFpX2lzX2Nsa19tYXN0ZXIocmRhaSkpIHsKLQkJCXN0cnVjdCByc25kX3NzaSAqc3NpX3BhcmVudCA9IHJzbmRfc3NpX3BhcmVudChzc2kpOwotCi0JCQlpZiAoc3NpX3BhcmVudCkKLQkJCQlyc25kX3NzaV9od19zdG9wKGlvLCBzc2lfcGFyZW50KTsKLQkJCWVsc2UKLQkJCQlyc25kX3NzaV9tYXN0ZXJfY2xrX3N0b3Aoc3NpKTsKLQkJfQotCi0JCXJzbmRfbW9kX3Bvd2VyX29mZihtb2QpOwotCi0JCXNzaS0+Y2hhbiA9IDA7Ci0JfQotCi0JZGV2X2RiZyhkZXYsICIlc1slZF0gaHcgc3RvcHBlZFxuIiwKLQkJcnNuZF9tb2RfbmFtZShtb2QpLCByc25kX21vZF9pZChtb2QpKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTI4Miw0OSArMzY5LDMwIEBACiAJCQkgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgcnNuZF9zc2kgKnNzaSA9IHJzbmRfbW9kX3RvX3NzaShtb2QpOwotCXN0cnVjdCByc25kX2RhaSAqcmRhaSA9IHJzbmRfaW9fdG9fcmRhaShpbyk7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHJzbmRfaW9fdG9fcnVudGltZShpbyk7Ci0JdTMyIGNyOworCWludCByZXQ7CiAKLQljciA9IEZPUkNFOworCXNzaS0+dXNyY250Kys7CiAKLQkvKgotCSAqIGFsd2F5cyB1c2UgMzJiaXQgc3lzdGVtIHdvcmQgZm9yIGVhc3kgY2xvY2sgY2FsY3VsYXRpb24uCi0JICogc2VlIGFsc28gcnNuZF9zc2lfbWFzdGVyX2Nsa19lbmFibGUoKQotCSAqLwotCWNyIHw9IFNXTF8zMjsKKwlyc25kX21vZF9wb3dlcl9vbihtb2QpOwogCi0JLyoKLQkgKiBpbml0IGNsb2NrIHNldHRpbmdzIGZvciBTU0lDUgotCSAqLwotCXN3aXRjaCAocnVudGltZS0+c2FtcGxlX2JpdHMpIHsKLQljYXNlIDE2OgotCQljciB8PSBEV0xfMTY7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWNyIHw9IERXTF8yNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU87Ci0JfQorCXJldCA9IHJzbmRfc3NpX21hc3Rlcl9jbGtfc3RhcnQoc3NpLCBpbyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKLQlpZiAocmRhaS0+Yml0X2Nsa19pbnYpCi0JCWNyIHw9IFNDS1A7Ci0JaWYgKHJkYWktPmZybV9jbGtfaW52KQotCQljciB8PSBTV1NQOwotCWlmIChyZGFpLT5kYXRhX2FsaWdubWVudCkKLQkJY3IgfD0gU0RUQTsKLQlpZiAocmRhaS0+c3lzX2RlbGF5KQotCQljciB8PSBERUw7Ci0JaWYgKHJzbmRfaW9faXNfcGxheShpbykpCi0JCWNyIHw9IFRSTUQ7CisJaWYgKHJzbmRfc3NpX2lzX3BhcmVudChtb2QsIGlvKSkKKwkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIHNldCBzc2kgcGFyYW1ldGVyCi0JICovCi0Jc3NpLT5jcl9vd24JPSBjcjsKKwlyZXQgPSByc25kX3NzaV9jb25maWdfaW5pdChzc2ksIGlvKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCXNzaS0+ZXJyCT0gLTE7IC8qIGlnbm9yZSAxc3QgZXJyb3IgKi8KIAorCS8qIGNsZWFyIGVycm9yIHN0YXR1cyAqLworCXJzbmRfc3NpX3N0YXR1c19jbGVhcihtb2QpOworCisJcnNuZF9zc2lfaXJxX2VuYWJsZShtb2QpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNSwxMiArNDAzLDI5IEBACiAJc3RydWN0IHJzbmRfc3NpICpzc2kgPSByc25kX21vZF90b19zc2kobW9kKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwogCi0JaWYgKHNzaS0+ZXJyID4gMCkKLQkJZGV2X3dhcm4oZGV2LCAiJXNbJWRdIHVuZGVyL292ZXIgZmxvdyBlcnIgPSAlZFxuIiwKLQkJCSByc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksIHNzaS0+ZXJyKTsKKwlpZiAoIXNzaS0+dXNyY250KSB7CisJCWRldl9lcnIoZGV2LCAiJXNbJWRdIHVzcmNudCBlcnJvclxuIiwKKwkJCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSk7CisJCXJldHVybiAtRUlPOworCX0KIAotCXNzaS0+Y3Jfb3duCT0gMDsKLQlzc2ktPmVycgk9IDA7CisJaWYgKCFyc25kX3NzaV9pc19wYXJlbnQobW9kLCBpbykpIHsKKwkJaWYgKHNzaS0+ZXJyID4gMCkKKwkJCWRldl93YXJuKGRldiwgIiVzWyVkXSB1bmRlci9vdmVyIGZsb3cgZXJyID0gJWRcbiIsCisJCQkJIHJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSwKKwkJCQkgc3NpLT5lcnIpOworCisJCXNzaS0+Y3Jfb3duCT0gMDsKKwkJc3NpLT5lcnIJPSAwOworCisJCXJzbmRfc3NpX2lycV9kaXNhYmxlKG1vZCk7CisJfQorCisJcnNuZF9zc2lfbWFzdGVyX2Nsa19zdG9wKHNzaSwgaW8pOworCisJcnNuZF9tb2RfcG93ZXJfb2ZmKG1vZCk7CisKKwlzc2ktPnVzcmNudC0tOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTEsMTQgKzQzNiwxMyBAQAogCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHJzbmRfc3NpICpzc2kgPSByc25kX21vZF90b19zc2kobW9kKTsKLQlzdHJ1Y3QgcnNuZF9zc2kgKnNzaV9wYXJlbnQgPSByc25kX3NzaV9wYXJlbnQoc3NpKTsKIAlpbnQgY2hhbiA9IHBhcmFtc19jaGFubmVscyhwYXJhbXMpOwogCiAJLyoKIAkgKiBBbHJlYWR5IHdvcmtpbmcuCiAJICogSXQgd2lsbCBoYXBwZW4gaWYgU1NJIGhhcyBwYXJlbnQvY2hpbGQgY29ubmVjdGlvbi4KIAkgKi8KLQlpZiAoc3NpLT51c3JjbnQpIHsKKwlpZiAoc3NpLT51c3JjbnQgPiAxKSB7CiAJCS8qCiAJCSAqIGl0IGlzIGVycm9yIGlmIGNoaWxkIDwtPiBwYXJlbnQgU1NJIHVzZXMKIAkJICogZGlmZmVyZW50IGNoYW5uZWxzLgpAQCAtMzY3LDM5ICs0NTEsODMgQEAKIAkJCXJldHVybiAtRUlPOwogCX0KIAotCS8qIEl0IHdpbGwgYmUgcmVtb3ZlZCBvbiByc25kX3NzaV9od19zdG9wICovCiAJc3NpLT5jaGFuID0gY2hhbjsKLQlpZiAoc3NpX3BhcmVudCkKLQkJcmV0dXJuIHJzbmRfc3NpX2h3X3BhcmFtcyhyc25kX21vZF9nZXQoc3NpX3BhcmVudCksIGlvLAotCQkJCQkgIHN1YnN0cmVhbSwgcGFyYW1zKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByc25kX3NzaV9yZWNvcmRfZXJyb3Ioc3RydWN0IHJzbmRfc3NpICpzc2ksIHUzMiBzdGF0dXMpCitzdGF0aWMgdTMyIHJzbmRfc3NpX3JlY29yZF9lcnJvcihzdHJ1Y3QgcnNuZF9zc2kgKnNzaSkKIHsKIAlzdHJ1Y3QgcnNuZF9tb2QgKm1vZCA9IHJzbmRfbW9kX2dldChzc2kpOworCXUzMiBzdGF0dXMgPSByc25kX3NzaV9zdGF0dXNfZ2V0KG1vZCk7CiAKIAkvKiB1bmRlci9vdmVyIGZsb3cgZXJyb3IgKi8KLQlpZiAoc3RhdHVzICYgKFVJUlEgfCBPSVJRKSkgeworCWlmIChzdGF0dXMgJiAoVUlSUSB8IE9JUlEpKQogCQlzc2ktPmVycisrOwogCi0JCS8qIGNsZWFyIGVycm9yIHN0YXR1cyAqLwotCQlyc25kX21vZF93cml0ZShtb2QsIFNTSVNSLCAwKTsKLQl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX3JzbmRfc3NpX3N0YXJ0KHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHJzbmRfc3NpICpzc2kgPSByc25kX21vZF90b19zc2kobW9kKTsKKwl1MzIgY3I7CisKKwljciAgPQlzc2ktPmNyX293bgl8CisJCXNzaS0+Y3JfY2xrCXwKKwkJc3NpLT5jcl9tb2RlOworCisJLyoKKwkgKiBFTiB3aWxsIGJlIHNldCB2aWEgU1NJVSA6OiBTU0lfQ09OVFJPTAorCSAqIGlmIE11bHRpIGNoYW5uZWwgbW9kZQorCSAqLworCWlmICghcnNuZF9zc2lfbXVsdGlfc2xhdmVzKGlvKSkKKwkJY3IgfD0gRU47CisKKwlyc25kX21vZF93cml0ZShtb2QsIFNTSUNSLCBjcik7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTU0lXU1IsIHNzaS0+d3NyKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJzbmRfc3NpX3N0YXJ0KHN0cnVjdCByc25kX21vZCAqbW9kLAogCQkJICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCSAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKKwkvKgorCSAqIG5vIGxpbWl0IHRvIHN0YXJ0CisJICogc2VlIGFsc28KKwkgKglyc25kX3NzaV9zdG9wCisJICoJcnNuZF9zc2lfaW50ZXJydXB0CisJICovCisJcmV0dXJuIF9fcnNuZF9zc2lfc3RhcnQobW9kLCBpbywgcHJpdik7Cit9CisKK3N0YXRpYyBpbnQgX19yc25kX3NzaV9zdG9wKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQorewogCXN0cnVjdCByc25kX3NzaSAqc3NpID0gcnNuZF9tb2RfdG9fc3NpKG1vZCk7CisJdTMyIGNyOwogCi0JcnNuZF9zcmNfc3NpdV9zdGFydChtb2QsIGlvLCByc25kX3NzaV91c2VfYnVzaWYoaW8pKTsKKwkvKgorCSAqIGRpc2FibGUgYWxsIElSUSwKKwkgKiBhbmQsIHdhaXQgYWxsIGRhdGEgd2FzIHNlbnQKKwkgKi8KKwljciAgPQlzc2ktPmNyX293bgl8CisJCXNzaS0+Y3JfY2xrOwogCi0JcnNuZF9zc2lfaHdfc3RhcnQoc3NpLCBpbyk7CisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTU0lDUiwgY3IgfCBFTik7CisJcnNuZF9zc2lfc3RhdHVzX2NoZWNrKG1vZCwgRElSUSk7CiAKLQlyc25kX3NyY19zc2lfaXJxX2VuYWJsZShtb2QpOworCS8qCisJICogZGlzYWJsZSBTU0ksCisJICogYW5kLCB3YWl0IGlkbGUgc3RhdGUKKwkgKi8KKwlyc25kX21vZF93cml0ZShtb2QsIFNTSUNSLCBjcik7CS8qIGRpc2FibGVkIGFsbCAqLworCXJzbmRfc3NpX3N0YXR1c19jaGVjayhtb2QsIElJUlEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTAsMTUgKzUzOCwxNiBAQAogewogCXN0cnVjdCByc25kX3NzaSAqc3NpID0gcnNuZF9tb2RfdG9fc3NpKG1vZCk7CiAKLQlyc25kX3NyY19zc2lfaXJxX2Rpc2FibGUobW9kKTsKKwkvKgorCSAqIGRvbid0IHN0b3AgaWYgbm90IGxhc3QgdXNlcgorCSAqIHNlZSBhbHNvCisJICoJcnNuZF9zc2lfc3RhcnQKKwkgKglyc25kX3NzaV9pbnRlcnJ1cHQKKwkgKi8KKwlpZiAoc3NpLT51c3JjbnQgPiAxKQorCQlyZXR1cm4gMDsKIAotCXJzbmRfc3NpX3JlY29yZF9lcnJvcihzc2ksIHJzbmRfbW9kX3JlYWQobW9kLCBTU0lTUikpOwotCi0JcnNuZF9zc2lfaHdfc3RvcChpbywgc3NpKTsKLQotCXJzbmRfc3JjX3NzaXVfc3RvcChtb2QsIGlvKTsKLQotCXJldHVybiAwOworCXJldHVybiBfX3JzbmRfc3NpX3N0b3AobW9kLCBpbywgcHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fcnNuZF9zc2lfaW50ZXJydXB0KHN0cnVjdCByc25kX21vZCAqbW9kLApAQCAtNDI2LDYgKzU1NSw3IEBACiB7CiAJc3RydWN0IHJzbmRfc3NpICpzc2kgPSByc25kX21vZF90b19zc2kobW9kKTsKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihtb2QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJaW50IGlzX2RtYSA9IHJzbmRfc3NpX2lzX2RtYV9tb2RlKG1vZCk7CiAJdTMyIHN0YXR1czsKIAlib29sIGVsYXBzZWQgPSBmYWxzZTsKQEAgLTQzNiw3ICs1NjYsNyBAQAogCWlmICghcnNuZF9pb19pc193b3JraW5nKGlvKSkKIAkJZ290byByc25kX3NzaV9pbnRlcnJ1cHRfb3V0OwogCi0Jc3RhdHVzID0gcnNuZF9tb2RfcmVhZChtb2QsIFNTSVNSKTsKKwlzdGF0dXMgPSByc25kX3NzaV9yZWNvcmRfZXJyb3Ioc3NpKTsKIAogCS8qIFBJTyBvbmx5ICovCiAJaWYgKCFpc19kbWEgJiYgKHN0YXR1cyAmIERJUlEpKSB7CkBAIC00NTksMjMgKzU4OSwyNCBAQAogCiAJLyogRE1BIG9ubHkgKi8KIAlpZiAoaXNfZG1hICYmIChzdGF0dXMgJiAoVUlSUSB8IE9JUlEpKSkgewotCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwotCiAJCS8qCiAJCSAqIHJlc3RhcnQgU1NJCiAJCSAqLwogCQlkZXZfZGJnKGRldiwgIiVzWyVkXSByZXN0YXJ0XG4iLAogCQkJcnNuZF9tb2RfbmFtZShtb2QpLCByc25kX21vZF9pZChtb2QpKTsKIAotCQlyc25kX3NzaV9zdG9wKG1vZCwgaW8sIHByaXYpOwotCQlpZiAoc3NpLT5lcnIgPCAxMDI0KQotCQkJcnNuZF9zc2lfc3RhcnQobW9kLCBpbywgcHJpdik7Ci0JCWVsc2UKLQkJCWRldl93YXJuKGRldiwgIm5vIG1vcmUgU1NJIHJlc3RhcnRcbiIpOworCQlfX3JzbmRfc3NpX3N0b3AobW9kLCBpbywgcHJpdik7CisJCV9fcnNuZF9zc2lfc3RhcnQobW9kLCBpbywgcHJpdik7CiAJfQogCi0JcnNuZF9zc2lfcmVjb3JkX2Vycm9yKHNzaSwgc3RhdHVzKTsKKwlpZiAoc3NpLT5lcnIgPiAxMDI0KSB7CisJCXJzbmRfc3NpX2lycV9kaXNhYmxlKG1vZCk7CiAKKwkJZGV2X3dhcm4oZGV2LCAibm8gbW9yZSAlc1slZF0gcmVzdGFydFxuIiwKKwkJCSByc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCkpOworCX0KKworCXJzbmRfc3NpX3N0YXR1c19jbGVhcihtb2QpOwogcnNuZF9zc2lfaW50ZXJydXB0X291dDoKIAlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CiAKQEAgLTQ5NSwxNSArNjI2LDQ5IEBACiAvKgogICoJCVNTSSBQSU8KICAqLwotc3RhdGljIGludCByc25kX3NzaV9waW9fcHJvYmUoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKLQkJCSAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCByc25kX3NzaV9wYXJlbnRfYXR0YWNoKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJCSAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJCSAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJaWYgKCFfX3JzbmRfc3NpX2lzX3Bpbl9zaGFyaW5nKG1vZCkpCisJCXJldHVybjsKKworCXN3aXRjaCAocnNuZF9tb2RfaWQobW9kKSkgeworCWNhc2UgMToKKwljYXNlIDI6CisJCXJzbmRfZGFpX2Nvbm5lY3QocnNuZF9zc2lfbW9kX2dldChwcml2LCAwKSwgaW8sIFJTTkRfTU9EX1NTSVApOworCQlicmVhazsKKwljYXNlIDQ6CisJCXJzbmRfZGFpX2Nvbm5lY3QocnNuZF9zc2lfbW9kX2dldChwcml2LCAzKSwgaW8sIFJTTkRfTU9EX1NTSVApOworCQlicmVhazsKKwljYXNlIDg6CisJCXJzbmRfZGFpX2Nvbm5lY3QocnNuZF9zc2lfbW9kX2dldChwcml2LCA3KSwgaW8sIFJTTkRfTU9EX1NTSVApOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcnNuZF9zc2lfY29tbW9uX3Byb2JlKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJCSBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCQkgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwogCXN0cnVjdCByc25kX3NzaSAqc3NpID0gcnNuZF9tb2RfdG9fc3NpKG1vZCk7CiAJaW50IHJldDsKIAotCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBzc2ktPmluZm8tPmlycSwKKwkvKgorCSAqIFNTSVAvU1NJVS9JUlEgYXJlIG5vdCBuZWVkZWQgb24KKwkgKiBTU0kgTXVsdGkgc2xhdmVzCisJICovCisJaWYgKHJzbmRfc3NpX2lzX211bHRpX3NsYXZlKG1vZCwgaW8pKQorCQlyZXR1cm4gMDsKKworCXJzbmRfc3NpX3BhcmVudF9hdHRhY2gobW9kLCBpbywgcHJpdik7CisKKwlyZXQgPSByc25kX3NzaXVfYXR0YWNoKGlvLCBtb2QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIHNzaS0+aXJxLAogCQkJICAgICAgIHJzbmRfc3NpX2ludGVycnVwdCwKIAkJCSAgICAgICBJUlFGX1NIQVJFRCwKIAkJCSAgICAgICBkZXZfbmFtZShkZXYpLCBtb2QpOwpAQCAtNTEzLDcgKzY3OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcnNuZF9tb2Rfb3BzIHJzbmRfc3NpX3Bpb19vcHMgPSB7CiAJLm5hbWUJPSBTU0lfTkFNRSwKLQkucHJvYmUJPSByc25kX3NzaV9waW9fcHJvYmUsCisJLnByb2JlCT0gcnNuZF9zc2lfY29tbW9uX3Byb2JlLAogCS5pbml0CT0gcnNuZF9zc2lfaW5pdCwKIAkucXVpdAk9IHJzbmRfc3NpX3F1aXQsCiAJLnN0YXJ0CT0gcnNuZF9zc2lfc3RhcnQsCkBAIC01MjYsMjAgKzY5MSwyMyBAQAogCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgcnNuZF9zc2kgKnNzaSA9IHJzbmRfbW9kX3RvX3NzaShtb2QpOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7Ci0JaW50IGRtYV9pZCA9IHNzaS0+aW5mby0+ZG1hX2lkOworCWludCBkbWFfaWQgPSAwOyAvKiBub3QgbmVlZGVkICovCiAJaW50IHJldDsKIAotCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBzc2ktPmluZm8tPmlycSwKLQkJCSAgICAgICByc25kX3NzaV9pbnRlcnJ1cHQsCi0JCQkgICAgICAgSVJRRl9TSEFSRUQsCi0JCQkgICAgICAgZGV2X25hbWUoZGV2KSwgbW9kKTsKKwkvKgorCSAqIFNTSVAvU1NJVS9JUlEvRE1BIGFyZSBub3QgbmVlZGVkIG9uCisJICogU1NJIE11bHRpIHNsYXZlcworCSAqLworCWlmIChyc25kX3NzaV9pc19tdWx0aV9zbGF2ZShtb2QsIGlvKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSByc25kX3NzaV9jb21tb25fcHJvYmUobW9kLCBpbywgcHJpdik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHJzbmRfZG1hX2luaXQoCi0JCWlvLCByc25kX21vZF90b19kbWEobW9kKSwKLQkJZG1hX2lkKTsKKwlzc2ktPmRtYSA9IHJzbmRfZG1hX2F0dGFjaChpbywgbW9kLCBkbWFfaWQpOworCWlmIChJU19FUlIoc3NpLT5kbWEpKQorCQlyZXR1cm4gUFRSX0VSUihzc2ktPmRtYSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTUwLDkgKzcxOCw3IEBACiB7CiAJc3RydWN0IHJzbmRfc3NpICpzc2kgPSByc25kX21vZF90b19zc2kobW9kKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwotCWludCBpcnEgPSBzc2ktPmluZm8tPmlycTsKLQotCXJzbmRfZG1hX3F1aXQoaW8sIHJzbmRfbW9kX3RvX2RtYShtb2QpKTsKKwlpbnQgaXJxID0gc3NpLT5pcnE7CiAKIAkvKiBQSU8gd2lsbCByZXF1ZXN0IElSUSBhZ2FpbiAqLwogCWRldm1fZnJlZV9pcnEoZGV2LCBpcnEsIG1vZCk7CkBAIC01ODEsMzIgKzc0Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnNuZF9zc2lfZG1hX3N0YXJ0KHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCi0JCQkgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCXN0cnVjdCByc25kX2RtYSAqZG1hID0gcnNuZF9tb2RfdG9fZG1hKG1vZCk7Ci0KLQlyc25kX2RtYV9zdGFydChpbywgZG1hKTsKLQotCXJzbmRfc3NpX3N0YXJ0KG1vZCwgaW8sIHByaXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnNuZF9zc2lfZG1hX3N0b3Aoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAotCQkJICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCXN0cnVjdCByc25kX2RtYSAqZG1hID0gcnNuZF9tb2RfdG9fZG1hKG1vZCk7Ci0KLQlyc25kX3NzaV9zdG9wKG1vZCwgaW8sIHByaXYpOwotCi0JcnNuZF9kbWFfc3RvcChpbywgZG1hKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGRtYV9jaGFuICpyc25kX3NzaV9kbWFfcmVxKHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAogCQkJCQkgc3RydWN0IHJzbmRfbW9kICptb2QpCiB7CkBAIC02MzAsOCArNzcwLDggQEAKIAkucmVtb3ZlCT0gcnNuZF9zc2lfZG1hX3JlbW92ZSwKIAkuaW5pdAk9IHJzbmRfc3NpX2luaXQsCiAJLnF1aXQJPSByc25kX3NzaV9xdWl0LAotCS5zdGFydAk9IHJzbmRfc3NpX2RtYV9zdGFydCwKLQkuc3RvcAk9IHJzbmRfc3NpX2RtYV9zdG9wLAorCS5zdGFydAk9IHJzbmRfc3NpX3N0YXJ0LAorCS5zdG9wCT0gcnNuZF9zc2lfc3RvcCwKIAkuZmFsbGJhY2sgPSByc25kX3NzaV9mYWxsYmFjaywKIAkuaHdfcGFyYW1zID0gcnNuZF9zc2lfaHdfcGFyYW1zLAogfTsKQEAgLTY1MiwxMiArNzkyLDYzIEBACiAvKgogICoJCXNzaSBtb2QgZnVuY3Rpb24KICAqLworc3RhdGljIHZvaWQgcnNuZF9zc2lfY29ubmVjdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKKwkJCSAgICAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCit7CisJc3RydWN0IHJzbmRfZGFpICpyZGFpID0gcnNuZF9pb190b19yZGFpKGlvKTsKKwllbnVtIHJzbmRfbW9kX3R5cGUgdHlwZXNbXSA9IHsKKwkJUlNORF9NT0RfU1NJLAorCQlSU05EX01PRF9TU0lNMSwKKwkJUlNORF9NT0RfU1NJTTIsCisJCVJTTkRfTU9EX1NTSU0zLAorCX07CisJZW51bSByc25kX21vZF90eXBlIHR5cGU7CisJaW50IGk7CisKKwkvKiB0cnkgU1NJIC0+IFNTSU0xIC0+IFNTSU0yIC0+IFNTSU0zICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHlwZXMpOyBpKyspIHsKKwkJdHlwZSA9IHR5cGVzW2ldOworCQlpZiAoIXJzbmRfaW9fdG9fbW9kKGlvLCB0eXBlKSkgeworCQkJcnNuZF9kYWlfY29ubmVjdChtb2QsIGlvLCB0eXBlKTsKKwkJCXJzbmRfc2V0X3Nsb3QocmRhaSwgMiAqIChpICsgMSksIChpICsgMSkpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCit2b2lkIHJzbmRfcGFyc2VfY29ubmVjdF9zc2koc3RydWN0IHJzbmRfZGFpICpyZGFpLAorCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGxheWJhY2ssCisJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpjYXB0dXJlKQoreworCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX3JkYWlfdG9fcHJpdihyZGFpKTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgcnNuZF9tb2QgKm1vZDsKKwlpbnQgaTsKKworCW5vZGUgPSByc25kX3NzaV9vZl9ub2RlKHByaXYpOworCWlmICghbm9kZSkKKwkJcmV0dXJuOworCisJaSA9IDA7CisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShub2RlLCBucCkgeworCQltb2QgPSByc25kX3NzaV9tb2RfZ2V0KHByaXYsIGkpOworCQlpZiAobnAgPT0gcGxheWJhY2spCisJCQlyc25kX3NzaV9jb25uZWN0KG1vZCwgJnJkYWktPnBsYXliYWNrKTsKKwkJaWYgKG5wID09IGNhcHR1cmUpCisJCQlyc25kX3NzaV9jb25uZWN0KG1vZCwgJnJkYWktPmNhcHR1cmUpOworCQlpKys7CisJfQorCisJb2Zfbm9kZV9wdXQobm9kZSk7Cit9CisKIHN0cnVjdCByc25kX21vZCAqcnNuZF9zc2lfbW9kX2dldChzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LCBpbnQgaWQpCiB7CiAJaWYgKFdBUk5fT04oaWQgPCAwIHx8IGlkID49IHJzbmRfc3NpX25yKHByaXYpKSkKIAkJaWQgPSAwOwogCi0JcmV0dXJuIHJzbmRfbW9kX2dldCgoc3RydWN0IHJzbmRfc3NpICopKHByaXYtPnNzaSkgKyBpZCk7CisJcmV0dXJuIHJzbmRfbW9kX2dldChyc25kX3NzaV9nZXQocHJpdiwgaWQpKTsKIH0KIAogaW50IF9fcnNuZF9zc2lfaXNfcGluX3NoYXJpbmcoc3RydWN0IHJzbmRfbW9kICptb2QpCkBAIC02NjcsOTUgKzg1OCwxMCBAQAogCXJldHVybiAhIShyc25kX3NzaV9tb2RlX2ZsYWdzKHNzaSkgJiBSU05EX1NTSV9DTEtfUElOX1NIQVJFKTsKIH0KIAotc3RhdGljIHZvaWQgcnNuZF9zc2lfcGFyZW50X3NldHVwKHN0cnVjdCByc25kX3ByaXYgKnByaXYsIHN0cnVjdCByc25kX3NzaSAqc3NpKQotewotCXN0cnVjdCByc25kX21vZCAqbW9kID0gcnNuZF9tb2RfZ2V0KHNzaSk7Ci0KLQlpZiAoIV9fcnNuZF9zc2lfaXNfcGluX3NoYXJpbmcobW9kKSkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChyc25kX21vZF9pZChtb2QpKSB7Ci0JY2FzZSAxOgotCWNhc2UgMjoKLQkJc3NpLT5wYXJlbnQgPSByc25kX21vZF90b19zc2kocnNuZF9zc2lfbW9kX2dldChwcml2LCAwKSk7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJc3NpLT5wYXJlbnQgPSByc25kX21vZF90b19zc2kocnNuZF9zc2lfbW9kX2dldChwcml2LCAzKSk7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJc3NpLT5wYXJlbnQgPSByc25kX21vZF90b19zc2kocnNuZF9zc2lfbW9kX2dldChwcml2LCA3KSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCByc25kX29mX3BhcnNlX3NzaShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJICAgICAgY29uc3Qgc3RydWN0IHJzbmRfb2ZfZGF0YSAqb2ZfZGF0YSwKLQkJCSAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCitpbnQgcnNuZF9zc2lfcHJvYmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQlzdHJ1Y3QgcnNuZF9zc2lfcGxhdGZvcm1faW5mbyAqc3NpX2luZm87Ci0Jc3RydWN0IHJjYXJfc25kX2luZm8gKmluZm8gPSByc25kX3ByaXZfdG9faW5mbyhwcml2KTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCWludCBuciwgaTsKLQotCW5vZGUgPSByc25kX3NzaV9vZl9ub2RlKHByaXYpOwotCWlmICghbm9kZSkKLQkJcmV0dXJuOwotCi0JbnIgPSBvZl9nZXRfY2hpbGRfY291bnQobm9kZSk7Ci0JaWYgKCFucikKLQkJZ290byByc25kX29mX3BhcnNlX3NzaV9lbmQ7Ci0KLQlzc2lfaW5mbyA9IGRldm1fa3phbGxvYyhkZXYsCi0JCQkJc2l6ZW9mKHN0cnVjdCByc25kX3NzaV9wbGF0Zm9ybV9pbmZvKSAqIG5yLAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghc3NpX2luZm8pIHsKLQkJZGV2X2VycihkZXYsICJzc2kgaW5mbyBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJZ290byByc25kX29mX3BhcnNlX3NzaV9lbmQ7Ci0JfQotCi0JaW5mby0+c3NpX2luZm8JCT0gc3NpX2luZm87Ci0JaW5mby0+c3NpX2luZm9fbnIJPSBucjsKLQotCWkgPSAtMTsKLQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIG5wKSB7Ci0JCWkrKzsKLQotCQlzc2lfaW5mbyA9IGluZm8tPnNzaV9pbmZvICsgaTsKLQotCQkvKgotCQkgKiBwaW4gc2V0dGluZ3MKLQkJICovCi0JCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzaGFyZWQtcGluIiwgTlVMTCkpCi0JCQlzc2lfaW5mby0+ZmxhZ3MgfD0gUlNORF9TU0lfQ0xLX1BJTl9TSEFSRTsKLQotCQkvKgotCQkgKiBpcnEKLQkJICovCi0JCXNzaV9pbmZvLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Ci0KLQkJLyoKLQkJICogRE1BCi0JCSAqLwotCQlzc2lfaW5mby0+ZG1hX2lkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGlvLXRyYW5zZmVyIiwgTlVMTCkgPwotCQkJMCA6IDE7Ci0KLQkJaWYgKG9mX2dldF9wcm9wZXJ0eShucCwgIm5vLWJ1c2lmIiwgTlVMTCkpCi0JCQlzc2lfaW5mby0+ZmxhZ3MgfD0gUlNORF9TU0lfTk9fQlVTSUY7Ci0JfQotCi1yc25kX29mX3BhcnNlX3NzaV9lbmQ6Ci0Jb2Zfbm9kZV9wdXQobm9kZSk7Ci19Ci0KLWludCByc25kX3NzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgcnNuZF9vZl9kYXRhICpvZl9kYXRhLAotCQkgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQotewotCXN0cnVjdCByY2FyX3NuZF9pbmZvICppbmZvID0gcnNuZF9wcml2X3RvX2luZm8ocHJpdik7Ci0Jc3RydWN0IHJzbmRfc3NpX3BsYXRmb3JtX2luZm8gKnBpbmZvOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJc3RydWN0IHJzbmRfbW9kX29wcyAqb3BzOwogCXN0cnVjdCBjbGsgKmNsazsKQEAgLTc2Myw1MCArODY5LDczIEBACiAJY2hhciBuYW1lW1JTTkRfU1NJX05BTUVfU0laRV07CiAJaW50IGksIG5yLCByZXQ7CiAKLQlyc25kX29mX3BhcnNlX3NzaShwZGV2LCBvZl9kYXRhLCBwcml2KTsKKwlub2RlID0gcnNuZF9zc2lfb2Zfbm9kZShwcml2KTsKKwlpZiAoIW5vZGUpCisJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKglpbml0IFNTSQotCSAqLwotCW5yCT0gaW5mby0+c3NpX2luZm9fbnI7CisJbnIgPSBvZl9nZXRfY2hpbGRfY291bnQobm9kZSk7CisJaWYgKCFucikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHJzbmRfc3NpX3Byb2JlX2RvbmU7CisJfQorCiAJc3NpCT0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzc2kpICogbnIsIEdGUF9LRVJORUwpOwotCWlmICghc3NpKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIXNzaSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHJzbmRfc3NpX3Byb2JlX2RvbmU7CisJfQogCiAJcHJpdi0+c3NpCT0gc3NpOwogCXByaXYtPnNzaV9ucgk9IG5yOwogCi0JZm9yX2VhY2hfcnNuZF9zc2koc3NpLCBwcml2LCBpKSB7Ci0JCXBpbmZvID0gJmluZm8tPnNzaV9pbmZvW2ldOworCWkgPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgbnApIHsKKwkJc3NpID0gcnNuZF9zc2lfZ2V0KHByaXYsIGkpOwogCiAJCXNucHJpbnRmKG5hbWUsIFJTTkRfU1NJX05BTUVfU0laRSwgIiVzLiVkIiwKIAkJCSBTU0lfTkFNRSwgaSk7CiAKIAkJY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgbmFtZSk7Ci0JCWlmIChJU19FUlIoY2xrKSkKLQkJCXJldHVybiBQVFJfRVJSKGNsayk7CisJCWlmIChJU19FUlIoY2xrKSkgeworCQkJcmV0ID0gUFRSX0VSUihjbGspOworCQkJZ290byByc25kX3NzaV9wcm9iZV9kb25lOworCQl9CiAKLQkJc3NpLT5pbmZvCT0gcGluZm87CisJCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzaGFyZWQtcGluIiwgTlVMTCkpCisJCQlzc2ktPmZsYWdzIHw9IFJTTkRfU1NJX0NMS19QSU5fU0hBUkU7CisKKwkJaWYgKG9mX2dldF9wcm9wZXJ0eShucCwgIm5vLWJ1c2lmIiwgTlVMTCkpCisJCQlzc2ktPmZsYWdzIHw9IFJTTkRfU1NJX05PX0JVU0lGOworCisJCXNzaS0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCQlpZiAoIXNzaS0+aXJxKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byByc25kX3NzaV9wcm9iZV9kb25lOworCQl9CiAKIAkJb3BzID0gJnJzbmRfc3NpX25vbl9vcHM7Ci0JCWlmIChwaW5mby0+ZG1hX2lkID4gMCkKLQkJCW9wcyA9ICZyc25kX3NzaV9kbWFfb3BzOwotCQllbHNlIGlmIChyc25kX3NzaV9waW9fYXZhaWxhYmxlKHNzaSkpCisJCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJwaW8tdHJhbnNmZXIiLCBOVUxMKSkKIAkJCW9wcyA9ICZyc25kX3NzaV9waW9fb3BzOworCQllbHNlCisJCQlvcHMgPSAmcnNuZF9zc2lfZG1hX29wczsKIAogCQlyZXQgPSByc25kX21vZF9pbml0KHByaXYsIHJzbmRfbW9kX2dldChzc2kpLCBvcHMsIGNsaywKIAkJCQkgICAgUlNORF9NT0RfU1NJLCBpKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIHJzbmRfc3NpX3Byb2JlX2RvbmU7CiAKLQkJcnNuZF9zc2lfcGFyZW50X3NldHVwKHByaXYsIHNzaSk7CisJCWkrKzsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworCityc25kX3NzaV9wcm9iZV9kb25lOgorCW9mX25vZGVfcHV0KG5vZGUpOworCisJcmV0dXJuIHJldDsKIH0KIAotdm9pZCByc25kX3NzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQordm9pZCByc25kX3NzaV9yZW1vdmUoc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgcnNuZF9zc2kgKnNzaTsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9yY2FyL3NzaXUuYyBiL3NvdW5kL3NvYy9zaC9yY2FyL3NzaXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQ3MjgyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NoL3JjYXIvc3NpdS5jCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogUmVuZXNhcyBSLUNhciBTU0lVIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlICJyc25kLmgiCisKKyNkZWZpbmUgU1NJVV9OQU1FICJzc2l1IgorCitzdHJ1Y3QgcnNuZF9zc2l1IHsKKwlzdHJ1Y3QgcnNuZF9tb2QgbW9kOworfTsKKworI2RlZmluZSByc25kX3NzaXVfbnIocHJpdikgKChwcml2KS0+c3NpdV9ucikKKyNkZWZpbmUgZm9yX2VhY2hfcnNuZF9zc2l1KHBvcywgcHJpdiwgaSkJCQkJXAorCWZvciAoaSA9IDA7CQkJCQkJCVwKKwkgICAgIChpIDwgcnNuZF9zc2l1X25yKHByaXYpKSAmJgkJCQlcCisJCSAgICAgKChwb3MpID0gKChzdHJ1Y3QgcnNuZF9zc2l1ICopKHByaXYpLT5zc2l1ICsgaSkpOwlcCisJICAgICBpKyspCisKK3N0YXRpYyBpbnQgcnNuZF9zc2l1X2luaXQoc3RydWN0IHJzbmRfbW9kICptb2QsCisJCQkgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQoreworCXN0cnVjdCByc25kX2RhaSAqcmRhaSA9IHJzbmRfaW9fdG9fcmRhaShpbyk7CisJdTMyIG11bHRpX3NzaV9zbGF2ZXMgPSByc25kX3NzaV9tdWx0aV9zbGF2ZXMoaW8pOworCWludCB1c2VfYnVzaWYgPSByc25kX3NzaV91c2VfYnVzaWYoaW8pOworCWludCBpZCA9IHJzbmRfbW9kX2lkKG1vZCk7CisJdTMyIG1hc2sxLCB2YWwxOworCXUzMiBtYXNrMiwgdmFsMjsKKworCS8qCisJICogU1NJX01PREUwCisJICovCisJcnNuZF9tb2RfYnNldChtb2QsIFNTSV9NT0RFMCwgKDEgPDwgaWQpLCAhdXNlX2J1c2lmIDw8IGlkKTsKKworCS8qCisJICogU1NJX01PREUxCisJICovCisJbWFzazEgPSAoMSA8PCA0KSB8ICgxIDw8IDIwKTsJLyogbWFzayBzeW5jIGJpdCAqLworCW1hc2syID0gKDEgPDwgNCk7CQkvKiBtYXNrIHN5bmMgYml0ICovCisJdmFsMSAgPSB2YWwyICA9IDA7CisJaWYgKHJzbmRfc3NpX2lzX3Bpbl9zaGFyaW5nKGlvKSkgeworCQlpbnQgc2hpZnQgPSAtMTsKKworCQlzd2l0Y2ggKGlkKSB7CisJCWNhc2UgMToKKwkJCXNoaWZ0ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzaGlmdCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJc2hpZnQgPSAxNjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQltYXNrMSB8PSAweDMgPDwgc2hpZnQ7CisJCXZhbDEgPSByc25kX3JkYWlfaXNfY2xrX21hc3RlcihyZGFpKSA/CisJCQkweDIgPDwgc2hpZnQgOiAweDEgPDwgc2hpZnQ7CisKKwl9IGVsc2UgaWYgKG11bHRpX3NzaV9zbGF2ZXMpIHsKKworCQltYXNrMiB8PSAweDAwMDAwMDA3OworCQltYXNrMSB8PSAweDAwMDAwMDBmOworCisJCXN3aXRjaCAobXVsdGlfc3NpX3NsYXZlcykgeworCQljYXNlIDB4MDIwNjogLyogU1NJMC8xLzIvOSAqLworCQkJdmFsMiA9ICgxIDw8IDQpIHwgLyogU1NJMDEyOSBzeW5jICovCisJCQkJKHJzbmRfcmRhaV9pc19jbGtfbWFzdGVyKHJkYWkpID8gMHgyIDogMHgxKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIDB4MDAwNjogLyogU1NJMC8xLzIgKi8KKwkJCXZhbDEgPSByc25kX3JkYWlfaXNfY2xrX21hc3RlcihyZGFpKSA/CisJCQkJMHhhIDogMHg1OworCisJCQlpZiAoIXZhbDIpICAvKiBTU0kwMTIgc3luYyAqLworCQkJCXZhbDEgfD0gKDEgPDwgNCk7CisJCX0KKwl9CisKKwlyc25kX21vZF9ic2V0KG1vZCwgU1NJX01PREUxLCBtYXNrMSwgdmFsMSk7CisJcnNuZF9tb2RfYnNldChtb2QsIFNTSV9NT0RFMiwgbWFzazIsIHZhbDIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnNuZF9tb2Rfb3BzIHJzbmRfc3NpdV9vcHNfZ2VuMSA9IHsKKwkubmFtZQk9IFNTSVVfTkFNRSwKKwkuaW5pdAk9IHJzbmRfc3NpdV9pbml0LAorfTsKKworc3RhdGljIGludCByc25kX3NzaXVfaW5pdF9nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJICAgICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAorCQkJICAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKworCXJldCA9IHJzbmRfc3NpdV9pbml0KG1vZCwgaW8sIHByaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJzbmRfZ2V0X3Nsb3Rfd2lkdGgoaW8pID49IDYpIHsKKwkJLyoKKwkJICogVERNIEV4dGVuZCBNb2RlCisJCSAqIHNlZQorCQkgKglyc25kX3NzaV9jb25maWdfaW5pdCgpCisJCSAqLworCQlyc25kX21vZF93cml0ZShtb2QsIFNTSV9NT0RFLCAweDEpOworCX0KKworCWlmIChyc25kX3NzaV91c2VfYnVzaWYoaW8pKSB7CisJCXUzMiB2YWwgPSByc25kX2dldF9kYWxpZ24obW9kLCBpbyk7CisKKwkJcnNuZF9tb2Rfd3JpdGUobW9kLCBTU0lfQlVTSUZfQURJTlIsCisJCQkgICAgICAgcnNuZF9nZXRfYWRpbnJfYml0KG1vZCwgaW8pIHwKKwkJCSAgICAgICByc25kX2dldF9hZGlucl9jaGFuKG1vZCwgaW8pKTsKKwkJcnNuZF9tb2Rfd3JpdGUobW9kLCBTU0lfQlVTSUZfTU9ERSwgIDEpOworCQlyc25kX21vZF93cml0ZShtb2QsIFNTSV9CVVNJRl9EQUxJR04sIHZhbCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnNuZF9zc2l1X3N0YXJ0X2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCisJCQkJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCQkJc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKK3sKKwlpZiAoIXJzbmRfc3NpX3VzZV9idXNpZihpbykpCisJCXJldHVybiAwOworCisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTU0lfQ1RSTCwgMHgxKTsKKworCWlmIChyc25kX3NzaV9tdWx0aV9zbGF2ZXMoaW8pKQorCQlyc25kX21vZF93cml0ZShtb2QsIFNTSV9DT05UUk9MLCAweDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnNuZF9zc2l1X3N0b3BfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKKwkJCSAgICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKKwkJCSAgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQoreworCWlmICghcnNuZF9zc2lfdXNlX2J1c2lmKGlvKSkKKwkJcmV0dXJuIDA7CisKKwlyc25kX21vZF93cml0ZShtb2QsIFNTSV9DVFJMLCAwKTsKKworCWlmIChyc25kX3NzaV9tdWx0aV9zbGF2ZXMoaW8pKQorCQlyc25kX21vZF93cml0ZShtb2QsIFNTSV9DT05UUk9MLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJzbmRfbW9kX29wcyByc25kX3NzaXVfb3BzX2dlbjIgPSB7CisJLm5hbWUJPSBTU0lVX05BTUUsCisJLmluaXQJPSByc25kX3NzaXVfaW5pdF9nZW4yLAorCS5zdGFydAk9IHJzbmRfc3NpdV9zdGFydF9nZW4yLAorCS5zdG9wCT0gcnNuZF9zc2l1X3N0b3BfZ2VuMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcnNuZF9tb2QgKnJzbmRfc3NpdV9tb2RfZ2V0KHN0cnVjdCByc25kX3ByaXYgKnByaXYsIGludCBpZCkKK3sKKwlpZiAoV0FSTl9PTihpZCA8IDAgfHwgaWQgPj0gcnNuZF9zc2l1X25yKHByaXYpKSkKKwkJaWQgPSAwOworCisJcmV0dXJuIHJzbmRfbW9kX2dldCgoc3RydWN0IHJzbmRfc3NpdSAqKShwcml2LT5zc2l1KSArIGlkKTsKK30KKworaW50IHJzbmRfc3NpdV9hdHRhY2goc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCisJCSAgICAgc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kKQoreworCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX2lvX3RvX3ByaXYoaW8pOworCXN0cnVjdCByc25kX21vZCAqbW9kID0gcnNuZF9zc2l1X21vZF9nZXQocHJpdiwgcnNuZF9tb2RfaWQoc3NpX21vZCkpOworCisJcnNuZF9tb2RfY29uZmlybV9zc2koc3NpX21vZCk7CisKKwlyZXR1cm4gcnNuZF9kYWlfY29ubmVjdChtb2QsIGlvLCBtb2QtPnR5cGUpOworfQorCitpbnQgcnNuZF9zc2l1X3Byb2JlKHN0cnVjdCByc25kX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKKwlzdHJ1Y3QgcnNuZF9zc2l1ICpzc2l1OworCXN0YXRpYyBzdHJ1Y3QgcnNuZF9tb2Rfb3BzICpvcHM7CisJaW50IGksIG5yLCByZXQ7CisKKwkvKiBzYW1lIG51bWJlciB0byBTU0kgKi8KKwlucgk9IHByaXYtPnNzaV9ucjsKKwlzc2l1CT0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzc2l1KSAqIG5yLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNzaXUpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+c3NpdQk9IHNzaXU7CisJcHJpdi0+c3NpdV9ucgk9IG5yOworCisJaWYgKHJzbmRfaXNfZ2VuMShwcml2KSkKKwkJb3BzID0gJnJzbmRfc3NpdV9vcHNfZ2VuMTsKKwllbHNlCisJCW9wcyA9ICZyc25kX3NzaXVfb3BzX2dlbjI7CisKKwlmb3JfZWFjaF9yc25kX3NzaXUoc3NpdSwgcHJpdiwgaSkgeworCQlyZXQgPSByc25kX21vZF9pbml0KHByaXYsIHJzbmRfbW9kX2dldChzc2l1KSwKKwkJCQkgICAgb3BzLCBOVUxMLCBSU05EX01PRF9TU0lVLCBpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnNuZF9zc2l1X3JlbW92ZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQoreworCXN0cnVjdCByc25kX3NzaXUgKnNzaXU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9yc25kX3NzaXUoc3NpdSwgcHJpdiwgaSkgeworCQlyc25kX21vZF9xdWl0KHJzbmRfbW9kX2dldChzc2l1KSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1hYzk3LmMgYi9zb3VuZC9zb2Mvc29jLWFjOTcuYwppbmRleCBkNDBlZmM5Li43MzNmNTEyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWFjOTcuYworKysgYi9zb3VuZC9zb2Mvc29jLWFjOTcuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpAQCAtMzgsNiArMzksMTQgQEAKIAlpbnQgZ3Bpb19yZXNldDsKIH07CiAKK3N0cnVjdCBzbmRfYWM5N19ncGlvX3ByaXYgeworI2lmZGVmIENPTkZJR19HUElPTElCCisJc3RydWN0IGdwaW9fY2hpcCBncGlvX2NoaXA7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgZ3Bpb3Nfc2V0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzIHNvY19hYzk3X2J1cyA9IHsKIAkub3BzID0gTlVMTCwgLyogR2V0cyBpbml0aWFsaXplZCBpbiBzbmRfc29jX3NldF9hYzk3X29wcygpICovCiB9OwpAQCAtNDcsNiArNTYsMTE3IEBACiAJa2ZyZWUodG9fYWM5N190KGRldikpOwogfQogCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNuZF9zb2NfY29kZWMgKmdwaW9fdG9fY29kZWMoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTdfZ3Bpb19wcml2ICpncGlvX3ByaXYgPQorCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHNuZF9hYzk3X2dwaW9fcHJpdiwgZ3Bpb19jaGlwKTsKKworCXJldHVybiBncGlvX3ByaXYtPmNvZGVjOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfYWM5N19ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCWlmIChvZmZzZXQgPj0gQUM5N19OVU1fR1BJT1MpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY19hYzk3X2dwaW9fZGlyZWN0aW9uX2luKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCSAgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGdwaW9fdG9fY29kZWMoY2hpcCk7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJzZXQgZ3BpbyAlZCB0byBvdXRwdXRcbiIsIG9mZnNldCk7CisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFDOTdfR1BJT19DRkcsCisJCQkJICAgMSA8PCBvZmZzZXQsIDEgPDwgb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBzbmRfc29jX2FjOTdfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGdwaW9fdG9fY29kZWMoY2hpcCk7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUM5N19HUElPX1NUQVRVUyk7CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiZ2V0IGdwaW8gJWQgOiAlZFxuIiwgb2Zmc2V0LAorCQlyZXQgPCAwID8gcmV0IDogcmV0ICYgKDEgPDwgb2Zmc2V0KSk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6ICEhKHJldCAmICgxIDw8IG9mZnNldCkpOworfQorCitzdGF0aWMgdm9pZCBzbmRfc29jX2FjOTdfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCSAgaW50IHZhbHVlKQoreworCXN0cnVjdCBzbmRfYWM5N19ncGlvX3ByaXYgKmdwaW9fcHJpdiA9CisJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgc25kX2FjOTdfZ3Bpb19wcml2LCBncGlvX2NoaXApOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGdwaW9fdG9fY29kZWMoY2hpcCk7CisKKwlncGlvX3ByaXYtPmdwaW9zX3NldCAmPSB+KDEgPDwgb2Zmc2V0KTsKKwlncGlvX3ByaXYtPmdwaW9zX3NldCB8PSAoISF2YWx1ZSkgPDwgb2Zmc2V0OworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19TVEFUVVMsIGdwaW9fcHJpdi0+Z3Bpb3Nfc2V0KTsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJzZXQgZ3BpbyAlZCB0byAlZFxuIiwgb2Zmc2V0LCAhIXZhbHVlKTsKK30KKworc3RhdGljIGludCBzbmRfc29jX2FjOTdfZ3Bpb19kaXJlY3Rpb25fb3V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBncGlvX3RvX2NvZGVjKGNoaXApOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAic2V0IGdwaW8gJWQgdG8gb3V0cHV0XG4iLCBvZmZzZXQpOworCXNuZF9zb2NfYWM5N19ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUM5N19HUElPX0NGRywgMSA8PCBvZmZzZXQsIDApOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBzbmRfc29jX2FjOTdfZ3Bpb19jaGlwID0geworCS5sYWJlbAkJCT0gInNuZF9zb2NfYWM5NyIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkucmVxdWVzdAkJPSBzbmRfc29jX2FjOTdfZ3Bpb19yZXF1ZXN0LAorCS5kaXJlY3Rpb25faW5wdXQJPSBzbmRfc29jX2FjOTdfZ3Bpb19kaXJlY3Rpb25faW4sCisJLmdldAkJCT0gc25kX3NvY19hYzk3X2dwaW9fZ2V0LAorCS5kaXJlY3Rpb25fb3V0cHV0CT0gc25kX3NvY19hYzk3X2dwaW9fZGlyZWN0aW9uX291dCwKKwkuc2V0CQkJPSBzbmRfc29jX2FjOTdfZ3Bpb19zZXQsCisJLmNhbl9zbGVlcAkJPSAxLAorfTsKKworc3RhdGljIGludCBzbmRfc29jX2FjOTdfaW5pdF9ncGlvKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJCQkgIHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX2FjOTdfZ3Bpb19wcml2ICpncGlvX3ByaXY7CisJaW50IHJldDsKKworCWdwaW9fcHJpdiA9IGRldm1fa3phbGxvYyhjb2RlYy0+ZGV2LCBzaXplb2YoKmdwaW9fcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghZ3Bpb19wcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKwlhYzk3LT5ncGlvX3ByaXYgPSBncGlvX3ByaXY7CisJZ3Bpb19wcml2LT5jb2RlYyA9IGNvZGVjOworCWdwaW9fcHJpdi0+Z3Bpb19jaGlwID0gc25kX3NvY19hYzk3X2dwaW9fY2hpcDsKKwlncGlvX3ByaXYtPmdwaW9fY2hpcC5uZ3BpbyA9IEFDOTdfTlVNX0dQSU9TOworCWdwaW9fcHJpdi0+Z3Bpb19jaGlwLmRldiA9IGNvZGVjLT5kZXY7CisJZ3Bpb19wcml2LT5ncGlvX2NoaXAuYmFzZSA9IC0xOworCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZncGlvX3ByaXYtPmdwaW9fY2hpcCk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gYWRkIEdQSU9zOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzbmRfc29jX2FjOTdfZnJlZV9ncGlvKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwlncGlvY2hpcF9yZW1vdmUoJmFjOTctPmdwaW9fcHJpdi0+Z3Bpb19jaGlwKTsKK30KKyNlbHNlCitzdGF0aWMgaW50IHNuZF9zb2NfYWM5N19pbml0X2dwaW8oc3RydWN0IHNuZF9hYzk3ICphYzk3LAorCQkJCSAgc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfc29jX2FjOTdfZnJlZV9ncGlvKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKK30KKyNlbmRpZgorCiAvKioKICAqIHNuZF9zb2NfYWxsb2NfYWM5N19jb2RlYygpIC0gQWxsb2NhdGUgbmV3IGEgQUMnOTcgZGV2aWNlCiAgKiBAY29kZWM6IFRoZSBDT0RFQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBBQyc5NyBkZXZpY2UKQEAgLTExOSw2ICsyMzksMTAgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9wdXRfZGV2aWNlOwogCisJcmV0ID0gc25kX3NvY19hYzk3X2luaXRfZ3BpbyhhYzk3LCBjb2RlYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcHV0X2RldmljZTsKKwogCXJldHVybiBhYzk3OwogCiBlcnJfcHV0X2RldmljZToKQEAgLTEzNSw2ICsyNTksNyBAQAogICovCiB2b2lkIHNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKKwlzbmRfc29jX2FjOTdfZnJlZV9ncGlvKGFjOTcpOwogCWRldmljZV9kZWwoJmFjOTctPmRldik7CiAJYWM5Ny0+YnVzID0gTlVMTDsKIAlwdXRfZGV2aWNlKCZhYzk3LT5kZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb21wcmVzcy5jIGIvc291bmQvc29jL3NvYy1jb21wcmVzcy5jCmluZGV4IDEyYTk4MjAuLmJiODJiYjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29tcHJlc3MuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvbXByZXNzLmMKQEAgLTYzMCw2ICs2MzAsNyBAQAogCXN0cnVjdCBzbmRfcGNtICpiZV9wY207CiAJY2hhciBuZXdfbmFtZVs2NF07CiAJaW50IHJldCA9IDAsIGRpcmVjdGlvbiA9IDA7CisJaW50IHBsYXliYWNrID0gMCwgY2FwdHVyZSA9IDA7CiAKIAlpZiAocnRkLT5udW1fY29kZWNzID4gMSkgewogCQlkZXZfZXJyKHJ0ZC0+Y2FyZC0+ZGV2LCAiTXVsdGljb2RlYyBub3Qgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIHN0cmVhbVxuIik7CkBAIC02NDEsMTEgKzY0MiwyNyBAQAogCQkJcnRkLT5kYWlfbGluay0+c3RyZWFtX25hbWUsIGNvZGVjX2RhaS0+bmFtZSwgbnVtKTsKIAogCWlmIChjb2RlY19kYWktPmRyaXZlci0+cGxheWJhY2suY2hhbm5lbHNfbWluKQotCQlkaXJlY3Rpb24gPSBTTkRfQ09NUFJFU1NfUExBWUJBQ0s7Ci0JZWxzZSBpZiAoY29kZWNfZGFpLT5kcml2ZXItPmNhcHR1cmUuY2hhbm5lbHNfbWluKQotCQlkaXJlY3Rpb24gPSBTTkRfQ09NUFJFU1NfQ0FQVFVSRTsKLQllbHNlCisJCXBsYXliYWNrID0gMTsKKwlpZiAoY29kZWNfZGFpLT5kcml2ZXItPmNhcHR1cmUuY2hhbm5lbHNfbWluKQorCQljYXB0dXJlID0gMTsKKworCWNhcHR1cmUgPSBjYXB0dXJlICYmIGNwdV9kYWktPmRyaXZlci0+Y2FwdHVyZS5jaGFubmVsc19taW47CisJcGxheWJhY2sgPSBwbGF5YmFjayAmJiBjcHVfZGFpLT5kcml2ZXItPnBsYXliYWNrLmNoYW5uZWxzX21pbjsKKworCS8qCisJICogQ29tcHJlc3MgZGV2aWNlcyBhcmUgdW5pZGlyZWN0aW9uYWwgc28gb25seSBvbmUgb2YgdGhlIGRpcmVjdGlvbnMKKwkgKiBzaG91bGQgYmUgc2V0LCBjaGVjayBmb3IgdGhhdCAoeG9yKQorCSAqLworCWlmIChwbGF5YmFjayArIGNhcHR1cmUgIT0gMSkgeworCQlkZXZfZXJyKHJ0ZC0+Y2FyZC0+ZGV2LCAiSW52YWxpZCBkaXJlY3Rpb24gZm9yIGNvbXByZXNzIFAgJWQsIEMgJWRcbiIsCisJCQkJcGxheWJhY2ssIGNhcHR1cmUpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZihwbGF5YmFjaykKKwkJZGlyZWN0aW9uID0gU05EX0NPTVBSRVNTX1BMQVlCQUNLOworCWVsc2UKKwkJZGlyZWN0aW9uID0gU05EX0NPTVBSRVNTX0NBUFRVUkU7CiAKIAljb21wciA9IGt6YWxsb2Moc2l6ZW9mKCpjb21wciksIEdGUF9LRVJORUwpOwogCWlmIChjb21wciA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IDI0YjA5NjAuLjc5MGVlMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC01MzcsMjYgKzUzNyw3NSBAQAogc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzbmRfc29jX2dldF9kYWlfc3Vic3RyZWFtKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCiAJCWNvbnN0IGNoYXIgKmRhaV9saW5rLCBpbnQgc3RyZWFtKQogewotCWludCBpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKLQkJaWYgKGNhcmQtPnJ0ZFtpXS5kYWlfbGluay0+bm9fcGNtICYmCi0JCQkhc3RyY21wKGNhcmQtPnJ0ZFtpXS5kYWlfbGluay0+bmFtZSwgZGFpX2xpbmspKQotCQkJcmV0dXJuIGNhcmQtPnJ0ZFtpXS5wY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgeworCQlpZiAocnRkLT5kYWlfbGluay0+bm9fcGNtICYmCisJCQkhc3RyY21wKHJ0ZC0+ZGFpX2xpbmstPm5hbWUsIGRhaV9saW5rKSkKKwkJCXJldHVybiBydGQtPnBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKIAl9CiAJZGV2X2RiZyhjYXJkLT5kZXYsICJBU29DOiBmYWlsZWQgdG8gZmluZCBkYWkgbGluayAlc1xuIiwgZGFpX2xpbmspOwogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19nZXRfZGFpX3N1YnN0cmVhbSk7CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqc29jX25ld19wY21fcnVudGltZSgKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmspCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKworCXJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFydGQpCisJCXJldHVybiBOVUxMOworCisJcnRkLT5jYXJkID0gY2FyZDsKKwlydGQtPmRhaV9saW5rID0gZGFpX2xpbms7CisJcnRkLT5jb2RlY19kYWlzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfZGFpICopICoKKwkJCQkJZGFpX2xpbmstPm51bV9jb2RlY3MsCisJCQkJCUdGUF9LRVJORUwpOworCWlmICghcnRkLT5jb2RlY19kYWlzKSB7CisJCWtmcmVlKHJ0ZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBydGQ7Cit9CisKK3N0YXRpYyB2b2lkIHNvY19mcmVlX3BjbV9ydW50aW1lKHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCit7CisJaWYgKHJ0ZCAmJiBydGQtPmNvZGVjX2RhaXMpCisJCWtmcmVlKHJ0ZC0+Y29kZWNfZGFpcyk7CisJa2ZyZWUocnRkKTsKK30KKworc3RhdGljIHZvaWQgc29jX2FkZF9wY21fcnVudGltZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCWxpc3RfYWRkX3RhaWwoJnJ0ZC0+bGlzdCwgJmNhcmQtPnJ0ZF9saXN0KTsKKwlydGQtPm51bSA9IGNhcmQtPm51bV9ydGQ7CisJY2FyZC0+bnVtX3J0ZCsrOworfQorCitzdGF0aWMgdm9pZCBzb2NfcmVtb3ZlX3BjbV9ydW50aW1lcyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsICpfcnRkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0ZCwgX3J0ZCwgJmNhcmQtPnJ0ZF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZydGQtPmxpc3QpOworCQlzb2NfZnJlZV9wY21fcnVudGltZShydGQpOworCX0KKworCWNhcmQtPm51bV9ydGQgPSAwOworfQorCiBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwKIAkJY29uc3QgY2hhciAqZGFpX2xpbmspCiB7Ci0JaW50IGk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKIAotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewotCQlpZiAoIXN0cmNtcChjYXJkLT5ydGRbaV0uZGFpX2xpbmstPm5hbWUsIGRhaV9saW5rKSkKLQkJCXJldHVybiAmY2FyZC0+cnRkW2ldOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnRkLCAmY2FyZC0+cnRkX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAocnRkLT5kYWlfbGluay0+bmFtZSwgZGFpX2xpbmspKQorCQkJcmV0dXJuIHJ0ZDsKIAl9CiAJZGV2X2RiZyhjYXJkLT5kZXYsICJBU29DOiBmYWlsZWQgdG8gZmluZCBydGQgJXNcbiIsIGRhaV9saW5rKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTU3OCw3ICs2MjcsOCBAQAogewogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0JaW50IGksIGo7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKwlpbnQgaTsKIAogCS8qIElmIHRoZSBjYXJkIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQgdGhlcmUgaXMgbm90aGluZyB0byBkbyAqLwogCWlmICghY2FyZC0+aW5zdGFudGlhdGVkKQpAQCAtNTk1LDEzICs2NDUsMTMgQEAKIAlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQtPnNuZF9jYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwogCiAJLyogbXV0ZSBhbnkgYWN0aXZlIERBQ3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgewogCi0JCWlmIChjYXJkLT5ydGRbaV0uZGFpX2xpbmstPmlnbm9yZV9zdXNwZW5kKQorCQlpZiAocnRkLT5kYWlfbGluay0+aWdub3JlX3N1c3BlbmQpCiAJCQljb250aW51ZTsKIAotCQlmb3IgKGogPSAwOyBqIDwgY2FyZC0+cnRkW2ldLm51bV9jb2RlY3M7IGorKykgewotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBjYXJkLT5ydGRbaV0uY29kZWNfZGFpc1tqXTsKKwkJZm9yIChpID0gMDsgaSA8IHJ0ZC0+bnVtX2NvZGVjczsgaSsrKSB7CisJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IHJ0ZC0+Y29kZWNfZGFpc1tpXTsKIAkJCXN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgKmRydiA9IGRhaS0+ZHJpdmVyOwogCiAJCQlpZiAoZHJ2LT5vcHMtPmRpZ2l0YWxfbXV0ZSAmJiBkYWktPnBsYXliYWNrX2FjdGl2ZSkKQEAgLTYxMCwyMCArNjYwLDIwIEBACiAJfQogCiAJLyogc3VzcGVuZCBhbGwgcGNtcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKLQkJaWYgKGNhcmQtPnJ0ZFtpXS5kYWlfbGluay0+aWdub3JlX3N1c3BlbmQpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgeworCQlpZiAocnRkLT5kYWlfbGluay0+aWdub3JlX3N1c3BlbmQpCiAJCQljb250aW51ZTsKIAotCQlzbmRfcGNtX3N1c3BlbmRfYWxsKGNhcmQtPnJ0ZFtpXS5wY20pOworCQlzbmRfcGNtX3N1c3BlbmRfYWxsKHJ0ZC0+cGNtKTsKIAl9CiAKIAlpZiAoY2FyZC0+c3VzcGVuZF9wcmUpCiAJCWNhcmQtPnN1c3BlbmRfcHJlKGNhcmQpOwogCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykgewotCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBjYXJkLT5ydGRbaV0uY3B1X2RhaTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZCwgJmNhcmQtPnJ0ZF9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAotCQlpZiAoY2FyZC0+cnRkW2ldLmRhaV9saW5rLT5pZ25vcmVfc3VzcGVuZCkKKwkJaWYgKHJ0ZC0+ZGFpX2xpbmstPmlnbm9yZV9zdXNwZW5kKQogCQkJY29udGludWU7CiAKIAkJaWYgKGNwdV9kYWktPmRyaXZlci0+c3VzcGVuZCAmJiAhY3B1X2RhaS0+ZHJpdmVyLT5idXNfY29udHJvbCkKQEAgLTYzMSwxOSArNjgxLDE5IEBACiAJfQogCiAJLyogY2xvc2UgYW55IHdhaXRpbmcgc3RyZWFtcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspCi0JCWZsdXNoX2RlbGF5ZWRfd29yaygmY2FyZC0+cnRkW2ldLmRlbGF5ZWRfd29yayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkKKwkJZmx1c2hfZGVsYXllZF93b3JrKCZydGQtPmRlbGF5ZWRfd29yayk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgewogCi0JCWlmIChjYXJkLT5ydGRbaV0uZGFpX2xpbmstPmlnbm9yZV9zdXNwZW5kKQorCQlpZiAocnRkLT5kYWlfbGluay0+aWdub3JlX3N1c3BlbmQpCiAJCQljb250aW51ZTsKIAotCQlzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KCZjYXJkLT5ydGRbaV0sCisJCXNuZF9zb2NfZGFwbV9zdHJlYW1fZXZlbnQocnRkLAogCQkJCQkgIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCiAJCQkJCSAgU05EX1NPQ19EQVBNX1NUUkVBTV9TVVNQRU5EKTsKIAotCQlzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KCZjYXJkLT5ydGRbaV0sCisJCXNuZF9zb2NfZGFwbV9zdHJlYW1fZXZlbnQocnRkLAogCQkJCQkgIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKIAkJCQkJICBTTkRfU09DX0RBUE1fU1RSRUFNX1NVU1BFTkQpOwogCX0KQEAgLTY5MCwxMCArNzQwLDEwIEBACiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7Ci0JCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IGNhcmQtPnJ0ZFtpXS5jcHVfZGFpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnRkLCAmY2FyZC0+cnRkX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwogCi0JCWlmIChjYXJkLT5ydGRbaV0uZGFpX2xpbmstPmlnbm9yZV9zdXNwZW5kKQorCQlpZiAocnRkLT5kYWlfbGluay0+aWdub3JlX3N1c3BlbmQpCiAJCQljb250aW51ZTsKIAogCQlpZiAoY3B1X2RhaS0+ZHJpdmVyLT5zdXNwZW5kICYmIGNwdV9kYWktPmRyaXZlci0+YnVzX2NvbnRyb2wpCkBAIC03MTcsOCArNzY3LDkgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0KIAkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc25kX3NvY19jYXJkLCBkZWZlcnJlZF9yZXN1bWVfd29yayk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKIAkvKiBvdXIgcG93ZXIgc3RhdGUgaXMgc3RpbGwgU05EUlZfQ1RMX1BPV0VSX0QzaG90IGZyb20gc3VzcGVuZCB0aW1lLAogCSAqIHNvIHVzZXJzcGFjZSBhcHBzIGFyZSBibG9ja2VkIGZyb20gdG91Y2hpbmcgdXMKQEAgLTczMywxMCArNzg0LDEwIEBACiAJCWNhcmQtPnJlc3VtZV9wcmUoY2FyZCk7CiAKIAkvKiByZXN1bWUgY29udHJvbCBidXMgREFJcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKLQkJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gY2FyZC0+cnRkW2ldLmNwdV9kYWk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CiAKLQkJaWYgKGNhcmQtPnJ0ZFtpXS5kYWlfbGluay0+aWdub3JlX3N1c3BlbmQpCisJCWlmIChydGQtPmRhaV9saW5rLT5pZ25vcmVfc3VzcGVuZCkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChjcHVfZGFpLT5kcml2ZXItPnJlc3VtZSAmJiBjcHVfZGFpLT5kcml2ZXItPmJ1c19jb250cm9sKQpAQCAtNzUxLDI4ICs4MDIsMjggQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZCwgJmNhcmQtPnJ0ZF9saXN0LCBsaXN0KSB7CiAKLQkJaWYgKGNhcmQtPnJ0ZFtpXS5kYWlfbGluay0+aWdub3JlX3N1c3BlbmQpCisJCWlmIChydGQtPmRhaV9saW5rLT5pZ25vcmVfc3VzcGVuZCkKIAkJCWNvbnRpbnVlOwogCi0JCXNuZF9zb2NfZGFwbV9zdHJlYW1fZXZlbnQoJmNhcmQtPnJ0ZFtpXSwKKwkJc25kX3NvY19kYXBtX3N0cmVhbV9ldmVudChydGQsCiAJCQkJCSAgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKIAkJCQkJICBTTkRfU09DX0RBUE1fU1RSRUFNX1JFU1VNRSk7CiAKLQkJc25kX3NvY19kYXBtX3N0cmVhbV9ldmVudCgmY2FyZC0+cnRkW2ldLAorCQlzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KHJ0ZCwKIAkJCQkJICBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCiAJCQkJCSAgU05EX1NPQ19EQVBNX1NUUkVBTV9SRVNVTUUpOwogCX0KIAogCS8qIHVubXV0ZSBhbnkgYWN0aXZlIERBQ3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgewogCi0JCWlmIChjYXJkLT5ydGRbaV0uZGFpX2xpbmstPmlnbm9yZV9zdXNwZW5kKQorCQlpZiAocnRkLT5kYWlfbGluay0+aWdub3JlX3N1c3BlbmQpCiAJCQljb250aW51ZTsKIAotCQlmb3IgKGogPSAwOyBqIDwgY2FyZC0+cnRkW2ldLm51bV9jb2RlY3M7IGorKykgewotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSBjYXJkLT5ydGRbaV0uY29kZWNfZGFpc1tqXTsKKwkJZm9yIChpID0gMDsgaSA8IHJ0ZC0+bnVtX2NvZGVjczsgaSsrKSB7CisJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IHJ0ZC0+Y29kZWNfZGFpc1tpXTsKIAkJCXN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgKmRydiA9IGRhaS0+ZHJpdmVyOwogCiAJCQlpZiAoZHJ2LT5vcHMtPmRpZ2l0YWxfbXV0ZSAmJiBkYWktPnBsYXliYWNrX2FjdGl2ZSkKQEAgLTc4MCwxMCArODMxLDEwIEBACiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7Ci0JCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IGNhcmQtPnJ0ZFtpXS5jcHVfZGFpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnRkLCAmY2FyZC0+cnRkX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwogCi0JCWlmIChjYXJkLT5ydGRbaV0uZGFpX2xpbmstPmlnbm9yZV9zdXNwZW5kKQorCQlpZiAocnRkLT5kYWlfbGluay0+aWdub3JlX3N1c3BlbmQpCiAJCQljb250aW51ZTsKIAogCQlpZiAoY3B1X2RhaS0+ZHJpdmVyLT5yZXN1bWUgJiYgIWNwdV9kYWktPmRyaXZlci0+YnVzX2NvbnRyb2wpCkBAIC03OTUsMTIgKzg0NiwxMiBAQAogCiAJZGV2X2RiZyhjYXJkLT5kZXYsICJBU29DOiByZXN1bWUgd29yayBjb21wbGV0ZWRcbiIpOwogCi0JLyogdXNlcnNwYWNlIGNhbiBhY2Nlc3MgdXMgbm93IHdlIGFyZSBiYWNrIGFzIHdlIHdlcmUgYmVmb3JlICovCi0Jc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLT5zbmRfY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKLQogCS8qIFJlY2hlY2sgYWxsIGVuZHBvaW50cyB0b28sIHRoZWlyIHN0YXRlIGlzIGFmZmVjdGVkIGJ5IHN1c3BlbmQgKi8KIAlkYXBtX21hcmtfZW5kcG9pbnRzX2RpcnR5KGNhcmQpOwogCXNuZF9zb2NfZGFwbV9zeW5jKCZjYXJkLT5kYXBtKTsKKworCS8qIHVzZXJzcGFjZSBjYW4gYWNjZXNzIHVzIG5vdyB3ZSBhcmUgYmFjayBhcyB3ZSB3ZXJlIGJlZm9yZSAqLworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZC0+c25kX2NhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CiB9CiAKIC8qIHBvd2VycyB1cCBhdWRpbyBzdWJzeXN0ZW0gYWZ0ZXIgYSBzdXNwZW5kICovCkBAIC04MDgsMTUgKzg1OSwxNCBAQAogewogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlib29sIGJ1c19jb250cm9sID0gZmFsc2U7Ci0JaW50IGk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKIAogCS8qIElmIHRoZSBjYXJkIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQgdGhlcmUgaXMgbm90aGluZyB0byBkbyAqLwogCWlmICghY2FyZC0+aW5zdGFudGlhdGVkKQogCQlyZXR1cm4gMDsKIAogCS8qIGFjdGl2YXRlIHBpbnMgZnJvbSBzbGVlcCBzdGF0ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKLQkJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9ICZjYXJkLT5ydGRbaV07CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgewogCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKipjb2RlY19kYWlzID0gcnRkLT5jb2RlY19kYWlzOwogCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CiAJCWludCBqOwpAQCAtODM3LDggKzg4Nyw4IEBACiAJICogaGF2ZSB0aGF0IHByb2JsZW0gYW5kIG1heSB0YWtlIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mIHRpbWUgdG8gcmVzdW1lCiAJICogZHVlIHRvIEkvTyBjb3N0cyBhbmQgYW50aS1wb3Agc28gaGFuZGxlIHRoZW0gb3V0IG9mIGxpbmUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykgewotCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBjYXJkLT5ydGRbaV0uY3B1X2RhaTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZCwgJmNhcmQtPnJ0ZF9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAkJYnVzX2NvbnRyb2wgfD0gY3B1X2RhaS0+ZHJpdmVyLT5idXNfY29udHJvbDsKIAl9CiAJaWYgKGJ1c19jb250cm9sKSB7CkBAIC05MTAsMTggKzk2MCw0MSBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IHNvY19iaW5kX2RhaV9saW5rKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGludCBudW0pCitzdGF0aWMgYm9vbCBzb2NfaXNfZGFpX2xpbmtfYm91bmQoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwKKwkJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rKQogewotCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluayA9ICZjYXJkLT5kYWlfbGlua1tudW1dOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSAmY2FyZC0+cnRkW251bV07CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocnRkLCAmY2FyZC0+cnRkX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJ0ZC0+ZGFpX2xpbmsgPT0gZGFpX2xpbmspCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgc29jX2JpbmRfZGFpX2xpbmsoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmspCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKIAlzdHJ1Y3Qgc25kX3NvY19kYWlfbGlua19jb21wb25lbnQgKmNvZGVjcyA9IGRhaV9saW5rLT5jb2RlY3M7CiAJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmtfY29tcG9uZW50IGNwdV9kYWlfY29tcG9uZW50OwotCXN0cnVjdCBzbmRfc29jX2RhaSAqKmNvZGVjX2RhaXMgPSBydGQtPmNvZGVjX2RhaXM7CisJc3RydWN0IHNuZF9zb2NfZGFpICoqY29kZWNfZGFpczsKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm07CiAJY29uc3QgY2hhciAqcGxhdGZvcm1fbmFtZTsKIAlpbnQgaTsKIAotCWRldl9kYmcoY2FyZC0+ZGV2LCAiQVNvQzogYmluZGluZyAlcyBhdCBpZHggJWRcbiIsIGRhaV9saW5rLT5uYW1lLCBudW0pOworCWRldl9kYmcoY2FyZC0+ZGV2LCAiQVNvQzogYmluZGluZyAlc1xuIiwgZGFpX2xpbmstPm5hbWUpOworCisJcnRkID0gc29jX25ld19wY21fcnVudGltZShjYXJkLCBkYWlfbGluayk7CisJaWYgKCFydGQpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHNvY19pc19kYWlfbGlua19ib3VuZChjYXJkLCBkYWlfbGluaykpIHsKKwkJZGV2X2RiZyhjYXJkLT5kZXYsICJBU29DOiBkYWkgbGluayAlcyBhbHJlYWR5IGJvdW5kXG4iLAorCQkJZGFpX2xpbmstPm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CiAKIAljcHVfZGFpX2NvbXBvbmVudC5uYW1lID0gZGFpX2xpbmstPmNwdV9uYW1lOwogCWNwdV9kYWlfY29tcG9uZW50Lm9mX25vZGUgPSBkYWlfbGluay0+Y3B1X29mX25vZGU7CkBAIC05MzAsMTggKzEwMDMsMTkgQEAKIAlpZiAoIXJ0ZC0+Y3B1X2RhaSkgewogCQlkZXZfZXJyKGNhcmQtPmRldiwgIkFTb0M6IENQVSBEQUkgJXMgbm90IHJlZ2lzdGVyZWRcbiIsCiAJCQlkYWlfbGluay0+Y3B1X2RhaV9uYW1lKTsKLQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJCWdvdG8gX2Vycl9kZWZlcjsKIAl9CiAKIAlydGQtPm51bV9jb2RlY3MgPSBkYWlfbGluay0+bnVtX2NvZGVjczsKIAogCS8qIEZpbmQgQ09ERUMgZnJvbSByZWdpc3RlcmVkIENPREVDcyAqLworCWNvZGVjX2RhaXMgPSBydGQtPmNvZGVjX2RhaXM7CiAJZm9yIChpID0gMDsgaSA8IHJ0ZC0+bnVtX2NvZGVjczsgaSsrKSB7CiAJCWNvZGVjX2RhaXNbaV0gPSBzbmRfc29jX2ZpbmRfZGFpKCZjb2RlY3NbaV0pOwogCQlpZiAoIWNvZGVjX2RhaXNbaV0pIHsKIAkJCWRldl9lcnIoY2FyZC0+ZGV2LCAiQVNvQzogQ09ERUMgREFJICVzIG5vdCByZWdpc3RlcmVkXG4iLAogCQkJCWNvZGVjc1tpXS5kYWlfbmFtZSk7Ci0JCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJCWdvdG8gX2Vycl9kZWZlcjsKIAkJfQogCX0KIApAQCAtOTczLDkgKzEwNDcsMTIgQEAKIAkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CiAJfQogCi0JY2FyZC0+bnVtX3J0ZCsrOwotCisJc29jX2FkZF9wY21fcnVudGltZShjYXJkLCBydGQpOwogCXJldHVybiAwOworCitfZXJyX2RlZmVyOgorCXNvY19mcmVlX3BjbV9ydW50aW1lKHJ0ZCk7CisJcmV0dXJuICAtRVBST0JFX0RFRkVSOwogfQogCiBzdGF0aWMgdm9pZCBzb2NfcmVtb3ZlX2NvbXBvbmVudChzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCkKQEAgLTEwMTQsOSArMTA5MSw5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzb2NfcmVtb3ZlX2xpbmtfZGFpcyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBpbnQgbnVtLCBpbnQgb3JkZXIpCitzdGF0aWMgdm9pZCBzb2NfcmVtb3ZlX2xpbmtfZGFpcyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkLCBpbnQgb3JkZXIpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9ICZjYXJkLT5ydGRbbnVtXTsKIAlpbnQgaTsKIAogCS8qIHVucmVnaXN0ZXIgdGhlIHJ0ZCBkZXZpY2UgKi8KQEAgLTEwMzIsMTAgKzExMDksOSBAQAogCXNvY19yZW1vdmVfZGFpKHJ0ZC0+Y3B1X2RhaSwgb3JkZXIpOwogfQogCi1zdGF0aWMgdm9pZCBzb2NfcmVtb3ZlX2xpbmtfY29tcG9uZW50cyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBpbnQgbnVtLAotCQkJCSAgICAgICBpbnQgb3JkZXIpCitzdGF0aWMgdm9pZCBzb2NfcmVtb3ZlX2xpbmtfY29tcG9uZW50cyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsIGludCBvcmRlcikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gJmNhcmQtPnJ0ZFtudW1dOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBydGQtPnBsYXRmb3JtOwogCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50OwpAQCAtMTA2MSwyMyArMTEzNywyMDAgQEAKIAogc3RhdGljIHZvaWQgc29jX3JlbW92ZV9kYWlfbGlua3Moc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKLQlpbnQgZGFpLCBvcmRlcjsKKwlpbnQgb3JkZXI7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqbGluaywgKl9saW5rOwogCiAJZm9yIChvcmRlciA9IFNORF9TT0NfQ09NUF9PUkRFUl9GSVJTVDsgb3JkZXIgPD0gU05EX1NPQ19DT01QX09SREVSX0xBU1Q7CiAJCQlvcmRlcisrKSB7Ci0JCWZvciAoZGFpID0gMDsgZGFpIDwgY2FyZC0+bnVtX3J0ZDsgZGFpKyspCi0JCQlzb2NfcmVtb3ZlX2xpbmtfZGFpcyhjYXJkLCBkYWksIG9yZGVyKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkKKwkJCXNvY19yZW1vdmVfbGlua19kYWlzKGNhcmQsIHJ0ZCwgb3JkZXIpOwogCX0KIAogCWZvciAob3JkZXIgPSBTTkRfU09DX0NPTVBfT1JERVJfRklSU1Q7IG9yZGVyIDw9IFNORF9TT0NfQ09NUF9PUkRFUl9MQVNUOwogCQkJb3JkZXIrKykgewotCQlmb3IgKGRhaSA9IDA7IGRhaSA8IGNhcmQtPm51bV9ydGQ7IGRhaSsrKQotCQkJc29jX3JlbW92ZV9saW5rX2NvbXBvbmVudHMoY2FyZCwgZGFpLCBvcmRlcik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocnRkLCAmY2FyZC0+cnRkX2xpc3QsIGxpc3QpCisJCQlzb2NfcmVtb3ZlX2xpbmtfY29tcG9uZW50cyhjYXJkLCBydGQsIG9yZGVyKTsKIAl9CiAKLQljYXJkLT5udW1fcnRkID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgX2xpbmssICZjYXJkLT5kYWlfbGlua19saXN0LCBsaXN0KSB7CisJCWlmIChsaW5rLT5kb2JqLnR5cGUgPT0gU05EX1NPQ19ET0JKX0RBSV9MSU5LKQorCQkJZGV2X3dhcm4oY2FyZC0+ZGV2LCAiVG9wb2xvZ3kgZm9yZ290IHRvIHJlbW92ZSBsaW5rICVzP1xuIiwKKwkJCQlsaW5rLT5uYW1lKTsKKworCQlsaXN0X2RlbCgmbGluay0+bGlzdCk7CisJCWNhcmQtPm51bV9kYWlfbGlua3MtLTsKKwl9CiB9CiAKK3N0YXRpYyBpbnQgc25kX3NvY19pbml0X211bHRpY29kZWMoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwKKwkJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmspCit7CisJLyogTGVnYWN5IGNvZGVjL2NvZGVjX2RhaSBsaW5rIGlzIGEgc2luZ2xlIGVudHJ5IGluIG11bHRpY29kZWMgKi8KKwlpZiAoZGFpX2xpbmstPmNvZGVjX25hbWUgfHwgZGFpX2xpbmstPmNvZGVjX29mX25vZGUgfHwKKwkgICAgZGFpX2xpbmstPmNvZGVjX2RhaV9uYW1lKSB7CisJCWRhaV9saW5rLT5udW1fY29kZWNzID0gMTsKKworCQlkYWlfbGluay0+Y29kZWNzID0gZGV2bV9remFsbG9jKGNhcmQtPmRldiwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9zb2NfZGFpX2xpbmtfY29tcG9uZW50KSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFkYWlfbGluay0+Y29kZWNzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZGFpX2xpbmstPmNvZGVjc1swXS5uYW1lID0gZGFpX2xpbmstPmNvZGVjX25hbWU7CisJCWRhaV9saW5rLT5jb2RlY3NbMF0ub2Zfbm9kZSA9IGRhaV9saW5rLT5jb2RlY19vZl9ub2RlOworCQlkYWlfbGluay0+Y29kZWNzWzBdLmRhaV9uYW1lID0gZGFpX2xpbmstPmNvZGVjX2RhaV9uYW1lOworCX0KKworCWlmICghZGFpX2xpbmstPmNvZGVjcykgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgIkFTb0M6IERBSSBsaW5rIGhhcyBubyBDT0RFQ3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2NfaW5pdF9kYWlfbGluayhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpsaW5rKQoreworCWludCBpLCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2luaXRfbXVsdGljb2RlYyhjYXJkLCBsaW5rKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiQVNvQzogZmFpbGVkIHRvIGluaXQgbXVsdGljb2RlY1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxpbmstPm51bV9jb2RlY3M7IGkrKykgeworCQkvKgorCQkgKiBDb2RlYyBtdXN0IGJlIHNwZWNpZmllZCBieSAxIG9mIG5hbWUgb3IgT0Ygbm9kZSwKKwkJICogbm90IGJvdGggb3IgbmVpdGhlci4KKwkJICovCisJCWlmICghIWxpbmstPmNvZGVjc1tpXS5uYW1lID09CisJCSAgICAhIWxpbmstPmNvZGVjc1tpXS5vZl9ub2RlKSB7CisJCQlkZXZfZXJyKGNhcmQtPmRldiwgIkFTb0M6IE5laXRoZXIvYm90aCBjb2RlYyBuYW1lL29mX25vZGUgYXJlIHNldCBmb3IgJXNcbiIsCisJCQkJbGluay0+bmFtZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBDb2RlYyBEQUkgbmFtZSBtdXN0IGJlIHNwZWNpZmllZCAqLworCQlpZiAoIWxpbmstPmNvZGVjc1tpXS5kYWlfbmFtZSkgeworCQkJZGV2X2VycihjYXJkLT5kZXYsICJBU29DOiBjb2RlY19kYWlfbmFtZSBub3Qgc2V0IGZvciAlc1xuIiwKKwkJCQlsaW5rLT5uYW1lKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyoKKwkgKiBQbGF0Zm9ybSBtYXkgYmUgc3BlY2lmaWVkIGJ5IGVpdGhlciBuYW1lIG9yIE9GIG5vZGUsIGJ1dAorCSAqIGNhbiBiZSBsZWZ0IHVuc3BlY2lmaWVkLCBhbmQgYSBkdW1teSBwbGF0Zm9ybSB3aWxsIGJlIHVzZWQuCisJICovCisJaWYgKGxpbmstPnBsYXRmb3JtX25hbWUgJiYgbGluay0+cGxhdGZvcm1fb2Zfbm9kZSkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwKKwkJCSJBU29DOiBCb3RoIHBsYXRmb3JtIG5hbWUvb2Zfbm9kZSBhcmUgc2V0IGZvciAlc1xuIiwKKwkJCWxpbmstPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIENQVSBkZXZpY2UgbWF5IGJlIHNwZWNpZmllZCBieSBlaXRoZXIgbmFtZSBvciBPRiBub2RlLCBidXQKKwkgKiBjYW4gYmUgbGVmdCB1bnNwZWNpZmllZCwgYW5kIHdpbGwgYmUgbWF0Y2hlZCBiYXNlZCBvbiBEQUkKKwkgKiBuYW1lIGFsb25lLi4KKwkgKi8KKwlpZiAobGluay0+Y3B1X25hbWUgJiYgbGluay0+Y3B1X29mX25vZGUpIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsCisJCQkiQVNvQzogTmVpdGhlci9ib3RoIGNwdSBuYW1lL29mX25vZGUgYXJlIHNldCBmb3IgJXNcbiIsCisJCQlsaW5rLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qCisJICogQXQgbGVhc3Qgb25lIG9mIENQVSBEQUkgbmFtZSBvciBDUFUgZGV2aWNlIG5hbWUvbm9kZSBtdXN0IGJlCisJICogc3BlY2lmaWVkCisJICovCisJaWYgKCFsaW5rLT5jcHVfZGFpX25hbWUgJiYKKwkgICAgIShsaW5rLT5jcHVfbmFtZSB8fCBsaW5rLT5jcHVfb2Zfbm9kZSkpIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsCisJCQkiQVNvQzogTmVpdGhlciBjcHVfZGFpX25hbWUgbm9yIGNwdV9uYW1lL29mX25vZGUgYXJlIHNldCBmb3IgJXNcbiIsCisJCQlsaW5rLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc25kX3NvY19hZGRfZGFpX2xpbmsgLSBBZGQgYSBEQUkgbGluayBkeW5hbWljYWxseQorICogQGNhcmQ6IFRoZSBBU29DIGNhcmQgdG8gd2hpY2ggdGhlIERBSSBsaW5rIGlzIGFkZGVkCisgKiBAZGFpX2xpbms6IFRoZSBuZXcgREFJIGxpbmsgdG8gYWRkCisgKgorICogVGhpcyBmdW5jdGlvbiBhZGRzIGEgREFJIGxpbmsgdG8gdGhlIEFTb0MgY2FyZCdzIGxpbmsgbGlzdC4KKyAqCisgKiBOb3RlOiBUb3BvbG9neSBjYW4gdXNlIHRoaXMgQVBJIHRvIGFkZCBEQUkgbGlua3Mgd2hlbiBwcm9iaW5nIHRoZQorICogdG9wb2xvZ3kgY29tcG9uZW50LiBBbmQgbWFjaGluZSBkcml2ZXJzIGNhbiBzdGlsbCBkZWZpbmUgc3RhdGljCisgKiBEQUkgbGlua3MgaW4gZGFpX2xpbmsgYXJyYXkuCisgKi8KK2ludCBzbmRfc29jX2FkZF9kYWlfbGluayhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmspCit7CisJaWYgKGRhaV9saW5rLT5kb2JqLnR5cGUKKwkgICAgJiYgZGFpX2xpbmstPmRvYmoudHlwZSAhPSBTTkRfU09DX0RPQkpfREFJX0xJTkspIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsICJJbnZhbGlkIGRhaSBsaW5rIHR5cGUgJWRcbiIsCisJCQlkYWlfbGluay0+ZG9iai50eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmY2xpZW50X211dGV4KTsKKwkvKiBOb3RpZnkgdGhlIG1hY2hpbmUgZHJpdmVyIGZvciBleHRyYSBpbml0aWFsaXphdGlvbgorCSAqIG9uIHRoZSBsaW5rIGNyZWF0ZWQgYnkgdG9wb2xvZ3kuCisJICovCisJaWYgKGRhaV9saW5rLT5kb2JqLnR5cGUgJiYgY2FyZC0+YWRkX2RhaV9saW5rKQorCQljYXJkLT5hZGRfZGFpX2xpbmsoY2FyZCwgZGFpX2xpbmspOworCisJbGlzdF9hZGRfdGFpbCgmZGFpX2xpbmstPmxpc3QsICZjYXJkLT5kYWlfbGlua19saXN0KTsKKwljYXJkLT5udW1fZGFpX2xpbmtzKys7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfYWRkX2RhaV9saW5rKTsKKworLyoqCisgKiBzbmRfc29jX3JlbW92ZV9kYWlfbGluayAtIFJlbW92ZSBhIERBSSBsaW5rIGZyb20gdGhlIGxpc3QKKyAqIEBjYXJkOiBUaGUgQVNvQyBjYXJkIHRoYXQgb3ducyB0aGUgbGluaworICogQGRhaV9saW5rOiBUaGUgREFJIGxpbmsgdG8gcmVtb3ZlCisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgREFJIGxpbmsgZnJvbSB0aGUgQVNvQyBjYXJkJ3MgbGluayBsaXN0LgorICoKKyAqIEZvciBEQUkgbGlua3MgcHJldmlvdXNseSBhZGRlZCBieSB0b3BvbG9neSwgdG9wb2xvZ3kgc2hvdWxkCisgKiByZW1vdmUgdGhlbSBieSB1c2luZyB0aGUgZG9iaiBlbWJlZGRlZCBpbiB0aGUgbGluay4KKyAqLwordm9pZCBzbmRfc29jX3JlbW92ZV9kYWlfbGluayhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmspCit7CisJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmxpbmssICpfbGluazsKKworCWlmIChkYWlfbGluay0+ZG9iai50eXBlCisJICAgICYmIGRhaV9saW5rLT5kb2JqLnR5cGUgIT0gU05EX1NPQ19ET0JKX0RBSV9MSU5LKSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiSW52YWxpZCBkYWkgbGluayB0eXBlICVkXG4iLAorCQkJZGFpX2xpbmstPmRvYmoudHlwZSk7CisJCXJldHVybjsKKwl9CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZjbGllbnRfbXV0ZXgpOworCS8qIE5vdGlmeSB0aGUgbWFjaGluZSBkcml2ZXIgZm9yIGV4dHJhIGRlc3RydWN0aW9uCisJICogb24gdGhlIGxpbmsgY3JlYXRlZCBieSB0b3BvbG9neS4KKwkgKi8KKwlpZiAoZGFpX2xpbmstPmRvYmoudHlwZSAmJiBjYXJkLT5yZW1vdmVfZGFpX2xpbmspCisJCWNhcmQtPnJlbW92ZV9kYWlfbGluayhjYXJkLCBkYWlfbGluayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgX2xpbmssICZjYXJkLT5kYWlfbGlua19saXN0LCBsaXN0KSB7CisJCWlmIChsaW5rID09IGRhaV9saW5rKSB7CisJCQlsaXN0X2RlbCgmbGluay0+bGlzdCk7CisJCQljYXJkLT5udW1fZGFpX2xpbmtzLS07CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX3JlbW92ZV9kYWlfbGluayk7CisKIHN0YXRpYyB2b2lkIHNvY19zZXRfbmFtZV9wcmVmaXgoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwKIAkJCQlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCkKIHsKQEAgLTExNjAsNiArMTQxMywxNiBAQAogCQkJY29tcG9uZW50LT5uYW1lKTsKIAl9CiAKKwkvKiBtYWNoaW5lIHNwZWNpZmljIGluaXQgKi8KKwlpZiAoY29tcG9uZW50LT5pbml0KSB7CisJCXJldCA9IGNvbXBvbmVudC0+aW5pdChjb21wb25lbnQpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2Vycihjb21wb25lbnQtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGRvIG1hY2hpbmUgc3BlY2lmaWMgaW5pdCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyX3Byb2JlOworCQl9CisJfQorCiAJaWYgKGNvbXBvbmVudC0+Y29udHJvbHMpCiAJCXNuZF9zb2NfYWRkX2NvbXBvbmVudF9jb250cm9scyhjb21wb25lbnQsIGNvbXBvbmVudC0+Y29udHJvbHMsCiAJCQkJICAgICBjb21wb25lbnQtPm51bV9jb250cm9scyk7CkBAIC0xMjIwLDEwICsxNDgzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc29jX3Byb2JlX2xpbmtfY29tcG9uZW50cyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBpbnQgbnVtLAorc3RhdGljIGludCBzb2NfcHJvYmVfbGlua19jb21wb25lbnRzKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCisJCQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkLAogCQkJCSAgICAgaW50IG9yZGVyKQogewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSAmY2FyZC0+cnRkW251bV07CiAJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtID0gcnRkLT5wbGF0Zm9ybTsKIAlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudDsKIAlpbnQgaSwgcmV0OwpAQCAtMTI4MywzNSArMTU0NiwzNSBAQAogewogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpwbGF5X3csICpjYXB0dXJlX3c7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmssICpzb3VyY2U7CiAJaW50IHJldDsKIAogCWlmIChydGQtPm51bV9jb2RlY3MgPiAxKQogCQlkZXZfd2FybihjYXJkLT5kZXYsICJBU29DOiBNdWx0aXBsZSBjb2RlY3Mgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOwogCiAJLyogbGluayB0aGUgREFJIHdpZGdldHMgKi8KLQlwbGF5X3cgPSBjb2RlY19kYWktPnBsYXliYWNrX3dpZGdldDsKLQljYXB0dXJlX3cgPSBjcHVfZGFpLT5jYXB0dXJlX3dpZGdldDsKLQlpZiAocGxheV93ICYmIGNhcHR1cmVfdykgeworCXNpbmsgPSBjb2RlY19kYWktPnBsYXliYWNrX3dpZGdldDsKKwlzb3VyY2UgPSBjcHVfZGFpLT5jYXB0dXJlX3dpZGdldDsKKwlpZiAoc2luayAmJiBzb3VyY2UpIHsKIAkJcmV0ID0gc25kX3NvY19kYXBtX25ld19wY20oY2FyZCwgZGFpX2xpbmstPnBhcmFtcywKLQkJCQkJICAgZGFpX2xpbmstPm51bV9wYXJhbXMsIGNhcHR1cmVfdywKLQkJCQkJICAgcGxheV93KTsKKwkJCQkJICAgZGFpX2xpbmstPm51bV9wYXJhbXMsCisJCQkJCSAgIHNvdXJjZSwgc2luayk7CiAJCWlmIChyZXQgIT0gMCkgewogCQkJZGV2X2VycihjYXJkLT5kZXYsICJBU29DOiBDYW4ndCBsaW5rICVzIHRvICVzOiAlZFxuIiwKLQkJCQlwbGF5X3ctPm5hbWUsIGNhcHR1cmVfdy0+bmFtZSwgcmV0KTsKKwkJCQlzaW5rLT5uYW1lLCBzb3VyY2UtPm5hbWUsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCi0JcGxheV93ID0gY3B1X2RhaS0+cGxheWJhY2tfd2lkZ2V0OwotCWNhcHR1cmVfdyA9IGNvZGVjX2RhaS0+Y2FwdHVyZV93aWRnZXQ7Ci0JaWYgKHBsYXlfdyAmJiBjYXB0dXJlX3cpIHsKKwlzaW5rID0gY3B1X2RhaS0+cGxheWJhY2tfd2lkZ2V0OworCXNvdXJjZSA9IGNvZGVjX2RhaS0+Y2FwdHVyZV93aWRnZXQ7CisJaWYgKHNpbmsgJiYgc291cmNlKSB7CiAJCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfcGNtKGNhcmQsIGRhaV9saW5rLT5wYXJhbXMsCi0JCQkJCSAgIGRhaV9saW5rLT5udW1fcGFyYW1zLCBjYXB0dXJlX3csCi0JCQkJCSAgIHBsYXlfdyk7CisJCQkJCSAgIGRhaV9saW5rLT5udW1fcGFyYW1zLAorCQkJCQkgICBzb3VyY2UsIHNpbmspOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCWRldl9lcnIoY2FyZC0+ZGV2LCAiQVNvQzogQ2FuJ3QgbGluayAlcyB0byAlczogJWRcbiIsCi0JCQkJcGxheV93LT5uYW1lLCBjYXB0dXJlX3ctPm5hbWUsIHJldCk7CisJCQkJc2luay0+bmFtZSwgc291cmNlLT5uYW1lLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTEzMTksMTUgKzE1ODIsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzb2NfcHJvYmVfbGlua19kYWlzKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGludCBudW0sIGludCBvcmRlcikKK3N0YXRpYyBpbnQgc29jX3Byb2JlX2xpbmtfZGFpcyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkLCBpbnQgb3JkZXIpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rID0gJmNhcmQtPmRhaV9saW5rW251bV07Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9ICZjYXJkLT5ydGRbbnVtXTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbmsgPSBydGQtPmRhaV9saW5rOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAlpbnQgaSwgcmV0OwogCiAJZGV2X2RiZyhjYXJkLT5kZXYsICJBU29DOiBwcm9iZSAlcyBkYWkgbGluayAlZCBsYXRlICVkXG4iLAotCQkJY2FyZC0+bmFtZSwgbnVtLCBvcmRlcik7CisJCQljYXJkLT5uYW1lLCBydGQtPm51bSwgb3JkZXIpOwogCiAJLyogc2V0IGRlZmF1bHQgcG93ZXIgb2ZmIHRpbWVvdXQgKi8KIAlydGQtPnBtZG93bl90aW1lID0gcG1kb3duX3RpbWU7CkBAIC0xMzcyLDcgKzE2MzUsNyBAQAogCiAJaWYgKGNwdV9kYWktPmRyaXZlci0+Y29tcHJlc3NfbmV3KSB7CiAJCS8qY3JlYXRlIGNvbXByZXNzX2RldmljZSIqLwotCQlyZXQgPSBjcHVfZGFpLT5kcml2ZXItPmNvbXByZXNzX25ldyhydGQsIG51bSk7CisJCXJldCA9IGNwdV9kYWktPmRyaXZlci0+Y29tcHJlc3NfbmV3KHJ0ZCwgcnRkLT5udW0pOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycihjYXJkLT5kZXYsICJBU29DOiBjYW4ndCBjcmVhdGUgY29tcHJlc3MgJXNcbiIsCiAJCQkJCSBkYWlfbGluay0+c3RyZWFtX25hbWUpOwpAQCAtMTM4Miw3ICsxNjQ1LDcgQEAKIAogCQlpZiAoIWRhaV9saW5rLT5wYXJhbXMpIHsKIAkJCS8qIGNyZWF0ZSB0aGUgcGNtICovCi0JCQlyZXQgPSBzb2NfbmV3X3BjbShydGQsIG51bSk7CisJCQlyZXQgPSBzb2NfbmV3X3BjbShydGQsIHJ0ZC0+bnVtKTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJZGV2X2VycihjYXJkLT5kZXYsICJBU29DOiBjYW4ndCBjcmVhdGUgcGNtICVzIDolZFxuIiwKIAkJCQkgICAgICAgZGFpX2xpbmstPnN0cmVhbV9uYW1lLCByZXQpOwpAQCAtMTQwNCw2NSArMTY2Nyw4MSBAQAogCiBzdGF0aWMgaW50IHNvY19iaW5kX2F1eF9kZXYoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwgaW50IG51bSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gJmNhcmQtPnJ0ZF9hdXhbbnVtXTsKIAlzdHJ1Y3Qgc25kX3NvY19hdXhfZGV2ICphdXhfZGV2ID0gJmNhcmQtPmF1eF9kZXZbbnVtXTsKLQljb25zdCBjaGFyICpuYW1lID0gYXV4X2Rldi0+Y29kZWNfbmFtZTsKKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudDsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29kZWNfb2Zfbm9kZTsKIAotCXJ0ZC0+Y29tcG9uZW50ID0gc29jX2ZpbmRfY29tcG9uZW50KGF1eF9kZXYtPmNvZGVjX29mX25vZGUsIG5hbWUpOwotCWlmICghcnRkLT5jb21wb25lbnQpIHsKLQkJaWYgKGF1eF9kZXYtPmNvZGVjX29mX25vZGUpCi0JCQluYW1lID0gb2Zfbm9kZV9mdWxsX25hbWUoYXV4X2Rldi0+Y29kZWNfb2Zfbm9kZSk7Ci0KLQkJZGV2X2VycihjYXJkLT5kZXYsICJBU29DOiAlcyBub3QgcmVnaXN0ZXJlZFxuIiwgbmFtZSk7Ci0JCXJldHVybiAtRVBST0JFX0RFRkVSOworCWlmIChhdXhfZGV2LT5jb2RlY19vZl9ub2RlIHx8IGF1eF9kZXYtPmNvZGVjX25hbWUpIHsKKwkJLyogY29kZWNzLCB1c3VhbGx5IGFuYWxvZyBkZXZpY2VzICovCisJCW5hbWUgPSBhdXhfZGV2LT5jb2RlY19uYW1lOworCQljb2RlY19vZl9ub2RlID0gYXV4X2Rldi0+Y29kZWNfb2Zfbm9kZTsKKwkJY29tcG9uZW50ID0gc29jX2ZpbmRfY29tcG9uZW50KGNvZGVjX29mX25vZGUsIG5hbWUpOworCQlpZiAoIWNvbXBvbmVudCkgeworCQkJaWYgKGNvZGVjX29mX25vZGUpCisJCQkJbmFtZSA9IG9mX25vZGVfZnVsbF9uYW1lKGNvZGVjX29mX25vZGUpOworCQkJZ290byBlcnJfZGVmZXI7CisJCX0KKwl9IGVsc2UgaWYgKGF1eF9kZXYtPm5hbWUpIHsKKwkJLyogZ2VuZXJpYyBjb21wb25lbnRzICovCisJCW5hbWUgPSBhdXhfZGV2LT5uYW1lOworCQljb21wb25lbnQgPSBzb2NfZmluZF9jb21wb25lbnQoTlVMTCwgbmFtZSk7CisJCWlmICghY29tcG9uZW50KQorCQkJZ290byBlcnJfZGVmZXI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsICJBU29DOiBJbnZhbGlkIGF1eGlsaWFyeSBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKgotCSAqIFNvbWUgcGxhY2VzIHN0aWxsIHJlZmVyZW5jZSBydGQtPmNvZGVjLCBzbyB3ZSBoYXZlIHRvIGtlZXAgdGhhdAotCSAqIGluaXRpYWxpemVkIGlmIHRoZSBjb21wb25lbnQgaXMgYSBDT0RFQy4gT25jZSBhbGwgdGhvc2UgcmVmZXJlbmNlcwotCSAqIGhhdmUgYmVlbiByZW1vdmVkLCB0aGlzIGNvZGUgY2FuIGJlIHJlbW92ZWQgYXMgd2VsbC4KLQkgKi8KLQkgcnRkLT5jb2RlYyA9IHJ0ZC0+Y29tcG9uZW50LT5jb2RlYzsKKwljb21wb25lbnQtPmluaXQgPSBhdXhfZGV2LT5pbml0OworCWxpc3RfYWRkKCZjb21wb25lbnQtPmxpc3RfYXV4LCAmY2FyZC0+YXV4X2NvbXBfbGlzdCk7CisJcmV0dXJuIDA7CisKK2Vycl9kZWZlcjoKKwlkZXZfZXJyKGNhcmQtPmRldiwgIkFTb0M6ICVzIG5vdCByZWdpc3RlcmVkXG4iLCBuYW1lKTsKKwlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKK30KKworc3RhdGljIGludCBzb2NfcHJvYmVfYXV4X2RldmljZXMoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXA7CisJaW50IG9yZGVyOworCWludCByZXQ7CisKKwlmb3IgKG9yZGVyID0gU05EX1NPQ19DT01QX09SREVSX0ZJUlNUOyBvcmRlciA8PSBTTkRfU09DX0NPTVBfT1JERVJfTEFTVDsKKwkJb3JkZXIrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbXAsICZjYXJkLT5hdXhfY29tcF9saXN0LCBsaXN0X2F1eCkgeworCQkJaWYgKGNvbXAtPmRyaXZlci0+cHJvYmVfb3JkZXIgPT0gb3JkZXIpIHsKKwkJCQlyZXQgPSBzb2NfcHJvYmVfY29tcG9uZW50KGNhcmQsCWNvbXApOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCWRldl9lcnIoY2FyZC0+ZGV2LAorCQkJCQkJIkFTb0M6IGZhaWxlZCB0byBwcm9iZSBhdXggY29tcG9uZW50ICVzICVkXG4iLAorCQkJCQkJY29tcC0+bmFtZSwgcmV0KTsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzb2NfcHJvYmVfYXV4X2RldihzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLCBpbnQgbnVtKQorc3RhdGljIHZvaWQgc29jX3JlbW92ZV9hdXhfZGV2aWNlcyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSAmY2FyZC0+cnRkX2F1eFtudW1dOwotCXN0cnVjdCBzbmRfc29jX2F1eF9kZXYgKmF1eF9kZXYgPSAmY2FyZC0+YXV4X2RldltudW1dOwotCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wLCAqX2NvbXA7CisJaW50IG9yZGVyOwogCi0JcmV0ID0gc29jX3Byb2JlX2NvbXBvbmVudChjYXJkLCBydGQtPmNvbXBvbmVudCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBkbyBtYWNoaW5lIHNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCi0JaWYgKGF1eF9kZXYtPmluaXQpIHsKLQkJcmV0ID0gYXV4X2Rldi0+aW5pdChydGQtPmNvbXBvbmVudCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKGNhcmQtPmRldiwgIkFTb0M6IGZhaWxlZCB0byBpbml0ICVzOiAlZFxuIiwKLQkJCQlhdXhfZGV2LT5uYW1lLCByZXQpOwotCQkJcmV0dXJuIHJldDsKKwlmb3IgKG9yZGVyID0gU05EX1NPQ19DT01QX09SREVSX0ZJUlNUOyBvcmRlciA8PSBTTkRfU09DX0NPTVBfT1JERVJfTEFTVDsKKwkJb3JkZXIrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29tcCwgX2NvbXAsCisJCQkmY2FyZC0+YXV4X2NvbXBfbGlzdCwgbGlzdF9hdXgpIHsKKwkJCWlmIChjb21wLT5kcml2ZXItPnJlbW92ZV9vcmRlciA9PSBvcmRlcikgeworCQkJCXNvY19yZW1vdmVfY29tcG9uZW50KGNvbXApOworCQkJCS8qIHJlbW92ZSBpdCBmcm9tIHRoZSBjYXJkJ3MgYXV4X2NvbXBfbGlzdCAqLworCQkJCWxpc3RfZGVsKCZjb21wLT5saXN0X2F1eCk7CisJCQl9CiAJCX0KIAl9Ci0KLQlyZXR1cm4gc29jX3Bvc3RfY29tcG9uZW50X2luaXQocnRkLCBhdXhfZGV2LT5uYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgc29jX3JlbW92ZV9hdXhfZGV2KHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGludCBudW0pCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9ICZjYXJkLT5ydGRfYXV4W251bV07Ci0Jc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBydGQtPmNvbXBvbmVudDsKLQotCS8qIHVucmVnaXN0ZXIgdGhlIHJ0ZCBkZXZpY2UgKi8KLQlpZiAocnRkLT5kZXZfcmVnaXN0ZXJlZCkgewotCQlkZXZpY2VfdW5yZWdpc3RlcihydGQtPmRldik7Ci0JCXJ0ZC0+ZGV2X3JlZ2lzdGVyZWQgPSAwOwotCX0KLQotCWlmIChjb21wb25lbnQpCi0JCXNvY19yZW1vdmVfY29tcG9uZW50KGNvbXBvbmVudCk7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3NvY19pbml0X2NvZGVjX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKQEAgLTE1NTIsNiArMTgzMSw4IEBACiBzdGF0aWMgaW50IHNuZF9zb2NfaW5zdGFudGlhdGVfY2FyZChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOworCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluazsKIAlpbnQgcmV0LCBpLCBvcmRlcjsKIAogCW11dGV4X2xvY2soJmNsaWVudF9tdXRleCk7CkBAIC0xNTU5LDcgKzE4NDAsNyBAQAogCiAJLyogYmluZCBEQUlzICovCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7Ci0JCXJldCA9IHNvY19iaW5kX2RhaV9saW5rKGNhcmQsIGkpOworCQlyZXQgPSBzb2NfYmluZF9kYWlfbGluayhjYXJkLCAmY2FyZC0+ZGFpX2xpbmtbaV0pOwogCQlpZiAocmV0ICE9IDApCiAJCQlnb3RvIGJhc2VfZXJyb3I7CiAJfQpAQCAtMTU3MSw2ICsxODUyLDEwIEBACiAJCQlnb3RvIGJhc2VfZXJyb3I7CiAJfQogCisJLyogYWRkIHByZWRlZmluZWQgREFJIGxpbmtzIHRvIHRoZSBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKQorCQlzbmRfc29jX2FkZF9kYWlfbGluayhjYXJkLCBjYXJkLT5kYWlfbGluaytpKTsKKwogCS8qIGluaXRpYWxpemUgdGhlIHJlZ2lzdGVyIGNhY2hlIGZvciBlYWNoIGF2YWlsYWJsZSBjb2RlYyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29kZWMsICZjb2RlY19saXN0LCBsaXN0KSB7CiAJCWlmIChjb2RlYy0+Y2FjaGVfaW5pdCkKQEAgLTE2MjQsOCArMTkwOSw4IEBACiAJLyogcHJvYmUgYWxsIGNvbXBvbmVudHMgdXNlZCBieSBEQUkgbGlua3Mgb24gdGhpcyBjYXJkICovCiAJZm9yIChvcmRlciA9IFNORF9TT0NfQ09NUF9PUkRFUl9GSVJTVDsgb3JkZXIgPD0gU05EX1NPQ19DT01QX09SREVSX0xBU1Q7CiAJCQlvcmRlcisrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewotCQkJcmV0ID0gc29jX3Byb2JlX2xpbmtfY29tcG9uZW50cyhjYXJkLCBpLCBvcmRlcik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocnRkLCAmY2FyZC0+cnRkX2xpc3QsIGxpc3QpIHsKKwkJCXJldCA9IHNvY19wcm9iZV9saW5rX2NvbXBvbmVudHMoY2FyZCwgcnRkLCBvcmRlcik7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWRldl9lcnIoY2FyZC0+ZGV2LAogCQkJCQkiQVNvQzogZmFpbGVkIHRvIGluc3RhbnRpYXRlIGNhcmQgJWRcbiIsCkBAIC0xNjM1LDExICsxOTIwLDMxIEBACiAJCX0KIAl9CiAKKwkvKiBwcm9iZSBhdXhpbGlhcnkgY29tcG9uZW50cyAqLworCXJldCA9IHNvY19wcm9iZV9hdXhfZGV2aWNlcyhjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwcm9iZV9kYWlfZXJyOworCisJLyogRmluZCBuZXcgREFJIGxpbmtzIGFkZGVkIGR1cmluZyBwcm9iaW5nIGNvbXBvbmVudHMgYW5kIGJpbmQgdGhlbS4KKwkgKiBDb21wb25lbnRzIHdpdGggdG9wb2xvZ3kgbWF5IGJyaW5nIG5ldyBEQUlzIGFuZCBEQUkgbGlua3MuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkYWlfbGluaywgJmNhcmQtPmRhaV9saW5rX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNvY19pc19kYWlfbGlua19ib3VuZChjYXJkLCBkYWlfbGluaykpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBzb2NfaW5pdF9kYWlfbGluayhjYXJkLCBkYWlfbGluayk7CisJCWlmIChyZXQpCisJCQlnb3RvIHByb2JlX2RhaV9lcnI7CisJCXJldCA9IHNvY19iaW5kX2RhaV9saW5rKGNhcmQsIGRhaV9saW5rKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gcHJvYmVfZGFpX2VycjsKKwl9CisKIAkvKiBwcm9iZSBhbGwgREFJIGxpbmtzIG9uIHRoaXMgY2FyZCAqLwogCWZvciAob3JkZXIgPSBTTkRfU09DX0NPTVBfT1JERVJfRklSU1Q7IG9yZGVyIDw9IFNORF9TT0NfQ09NUF9PUkRFUl9MQVNUOwogCQkJb3JkZXIrKykgewotCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2xpbmtzOyBpKyspIHsKLQkJCXJldCA9IHNvY19wcm9iZV9saW5rX2RhaXMoY2FyZCwgaSwgb3JkZXIpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZCwgJmNhcmQtPnJ0ZF9saXN0LCBsaXN0KSB7CisJCQlyZXQgPSBzb2NfcHJvYmVfbGlua19kYWlzKGNhcmQsIHJ0ZCwgb3JkZXIpOwogCQkJaWYgKHJldCA8IDApIHsKIAkJCQlkZXZfZXJyKGNhcmQtPmRldiwKIAkJCQkJIkFTb0M6IGZhaWxlZCB0byBpbnN0YW50aWF0ZSBjYXJkICVkXG4iLApAQCAtMTY0OSwxNiArMTk1NCw2IEBACiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX2F1eF9kZXZzOyBpKyspIHsKLQkJcmV0ID0gc29jX3Byb2JlX2F1eF9kZXYoY2FyZCwgaSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKGNhcmQtPmRldiwKLQkJCQkiQVNvQzogZmFpbGVkIHRvIGFkZCBhdXhpbGlhcnkgZGV2aWNlcyAlZFxuIiwKLQkJCQlyZXQpOwotCQkJZ290byBwcm9iZV9hdXhfZGV2X2VycjsKLQkJfQotCX0KLQogCXNuZF9zb2NfZGFwbV9saW5rX2RhaV93aWRnZXRzKGNhcmQpOwogCXNuZF9zb2NfZGFwbV9jb25uZWN0X2RhaV9saW5rX3dpZGdldHMoY2FyZCk7CiAKQEAgLTE3MTgsOCArMjAxMyw3IEBACiAJcmV0dXJuIDA7CiAKIHByb2JlX2F1eF9kZXZfZXJyOgotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fYXV4X2RldnM7IGkrKykKLQkJc29jX3JlbW92ZV9hdXhfZGV2KGNhcmQsIGkpOworCXNvY19yZW1vdmVfYXV4X2RldmljZXMoY2FyZCk7CiAKIHByb2JlX2RhaV9lcnI6CiAJc29jX3JlbW92ZV9kYWlfbGlua3MoY2FyZCk7CkBAIC0xNzMzLDYgKzIwMjcsNyBAQAogCXNuZF9jYXJkX2ZyZWUoY2FyZC0+c25kX2NhcmQpOwogCiBiYXNlX2Vycm9yOgorCXNvY19yZW1vdmVfcGNtX3J1bnRpbWVzKGNhcmQpOwogCW11dGV4X3VubG9jaygmY2FyZC0+bXV0ZXgpOwogCW11dGV4X3VubG9jaygmY2xpZW50X211dGV4KTsKIApAQCAtMTc2MywyMCArMjA1OCwxOCBAQAogCiBzdGF0aWMgaW50IHNvY19jbGVhbnVwX2NhcmRfcmVzb3VyY2VzKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7Ci0JaW50IGk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKIAogCS8qIG1ha2Ugc3VyZSBhbnkgZGVsYXllZCB3b3JrIHJ1bnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7Ci0JCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSAmY2FyZC0+cnRkW2ldOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnRkLCAmY2FyZC0+cnRkX2xpc3QsIGxpc3QpCiAJCWZsdXNoX2RlbGF5ZWRfd29yaygmcnRkLT5kZWxheWVkX3dvcmspOwotCX0KLQotCS8qIHJlbW92ZSBhdXhpbGlhcnkgZGV2aWNlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fYXV4X2RldnM7IGkrKykKLQkJc29jX3JlbW92ZV9hdXhfZGV2KGNhcmQsIGkpOwogCiAJLyogcmVtb3ZlIGFuZCBmcmVlIGVhY2ggREFJICovCiAJc29jX3JlbW92ZV9kYWlfbGlua3MoY2FyZCk7CisJc29jX3JlbW92ZV9wY21fcnVudGltZXMoY2FyZCk7CisKKwkvKiByZW1vdmUgYXV4aWxpYXJ5IGRldmljZXMgKi8KKwlzb2NfcmVtb3ZlX2F1eF9kZXZpY2VzKGNhcmQpOwogCiAJc29jX2NsZWFudXBfY2FyZF9kZWJ1Z2ZzKGNhcmQpOwogCkBAIC0xODAzLDI5ICsyMDk2LDI2IEBACiBpbnQgc25kX3NvY19wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBpOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CiAKIAlpZiAoIWNhcmQtPmluc3RhbnRpYXRlZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBGbHVzaCBvdXQgcG1kb3duX3RpbWUgd29yayAtIHdlIGFjdHVhbGx5IGRvIHdhbnQgdG8gcnVuIGl0CiAJICogbm93LCB3ZSdyZSBzaHV0dGluZyBkb3duIHNvIG5vIGltbWluZW50IHJlc3RhcnQuICovCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykgewotCQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gJmNhcmQtPnJ0ZFtpXTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0ZCwgJmNhcmQtPnJ0ZF9saXN0LCBsaXN0KQogCQlmbHVzaF9kZWxheWVkX3dvcmsoJnJ0ZC0+ZGVsYXllZF93b3JrKTsKLQl9CiAKIAlzbmRfc29jX2RhcG1fc2h1dGRvd24oY2FyZCk7CiAKIAkvKiBkZWFjdGl2YXRlIHBpbnMgdG8gc2xlZXAgc3RhdGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7Ci0JCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSAmY2FyZC0+cnRkW2ldOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnRkLCAmY2FyZC0+cnRkX2xpc3QsIGxpc3QpIHsKIAkJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCQlpbnQgajsKKwkJaW50IGk7CiAKIAkJcGluY3RybF9wbV9zZWxlY3Rfc2xlZXBfc3RhdGUoY3B1X2RhaS0+ZGV2KTsKLQkJZm9yIChqID0gMDsgaiA8IHJ0ZC0+bnVtX2NvZGVjczsgaisrKSB7Ci0JCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpc1tqXTsKKwkJZm9yIChpID0gMDsgaSA8IHJ0ZC0+bnVtX2NvZGVjczsgaSsrKSB7CisJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpc1tpXTsKIAkJCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKGNvZGVjX2RhaS0+ZGV2KTsKIAkJfQogCX0KQEAgLTIzMDEsMzMgKzI1OTEsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYWlfZGlnaXRhbF9tdXRlKTsKIAotc3RhdGljIGludCBzbmRfc29jX2luaXRfbXVsdGljb2RlYyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAotCQkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluaykKLXsKLQkvKiBMZWdhY3kgY29kZWMvY29kZWNfZGFpIGxpbmsgaXMgYSBzaW5nbGUgZW50cnkgaW4gbXVsdGljb2RlYyAqLwotCWlmIChkYWlfbGluay0+Y29kZWNfbmFtZSB8fCBkYWlfbGluay0+Y29kZWNfb2Zfbm9kZSB8fAotCSAgICBkYWlfbGluay0+Y29kZWNfZGFpX25hbWUpIHsKLQkJZGFpX2xpbmstPm51bV9jb2RlY3MgPSAxOwotCi0JCWRhaV9saW5rLT5jb2RlY3MgPSBkZXZtX2t6YWxsb2MoY2FyZC0+ZGV2LAotCQkJCXNpemVvZihzdHJ1Y3Qgc25kX3NvY19kYWlfbGlua19jb21wb25lbnQpLAotCQkJCUdGUF9LRVJORUwpOwotCQlpZiAoIWRhaV9saW5rLT5jb2RlY3MpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlkYWlfbGluay0+Y29kZWNzWzBdLm5hbWUgPSBkYWlfbGluay0+Y29kZWNfbmFtZTsKLQkJZGFpX2xpbmstPmNvZGVjc1swXS5vZl9ub2RlID0gZGFpX2xpbmstPmNvZGVjX29mX25vZGU7Ci0JCWRhaV9saW5rLT5jb2RlY3NbMF0uZGFpX25hbWUgPSBkYWlfbGluay0+Y29kZWNfZGFpX25hbWU7Ci0JfQotCi0JaWYgKCFkYWlfbGluay0+Y29kZWNzKSB7Ci0JCWRldl9lcnIoY2FyZC0+ZGV2LCAiQVNvQzogREFJIGxpbmsgaGFzIG5vIENPREVDc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKioKICAqIHNuZF9zb2NfcmVnaXN0ZXJfY2FyZCAtIFJlZ2lzdGVyIGEgY2FyZCB3aXRoIHRoZSBBU29DIGNvcmUKICAqCkBAIC0yMzM2LDcgKzI1OTksOCBAQAogICovCiBpbnQgc25kX3NvY19yZWdpc3Rlcl9jYXJkKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7Ci0JaW50IGksIGosIHJldDsKKwlpbnQgaSwgcmV0OworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQ7CiAKIAlpZiAoIWNhcmQtPm5hbWUgfHwgIWNhcmQtPmRldikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzQ0LDkyICsyNjA4LDIzIEBACiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpsaW5rID0gJmNhcmQtPmRhaV9saW5rW2ldOwogCi0JCXJldCA9IHNuZF9zb2NfaW5pdF9tdWx0aWNvZGVjKGNhcmQsIGxpbmspOworCQlyZXQgPSBzb2NfaW5pdF9kYWlfbGluayhjYXJkLCBsaW5rKTsKIAkJaWYgKHJldCkgewotCQkJZGV2X2VycihjYXJkLT5kZXYsICJBU29DOiBmYWlsZWQgdG8gaW5pdCBtdWx0aWNvZGVjXG4iKTsKKwkJCWRldl9lcnIoY2FyZC0+ZGV2LCAiQVNvQzogZmFpbGVkIHRvIGluaXQgbGluayAlc1xuIiwKKwkJCQlsaW5rLT5uYW1lKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQotCQlmb3IgKGogPSAwOyBqIDwgbGluay0+bnVtX2NvZGVjczsgaisrKSB7Ci0JCQkvKgotCQkJICogQ29kZWMgbXVzdCBiZSBzcGVjaWZpZWQgYnkgMSBvZiBuYW1lIG9yIE9GIG5vZGUsCi0JCQkgKiBub3QgYm90aCBvciBuZWl0aGVyLgotCQkJICovCi0JCQlpZiAoISFsaW5rLT5jb2RlY3Nbal0ubmFtZSA9PQotCQkJICAgICEhbGluay0+Y29kZWNzW2pdLm9mX25vZGUpIHsKLQkJCQlkZXZfZXJyKGNhcmQtPmRldiwgIkFTb0M6IE5laXRoZXIvYm90aCBjb2RlYyBuYW1lL29mX25vZGUgYXJlIHNldCBmb3IgJXNcbiIsCi0JCQkJCWxpbmstPm5hbWUpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJLyogQ29kZWMgREFJIG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQgKi8KLQkJCWlmICghbGluay0+Y29kZWNzW2pdLmRhaV9uYW1lKSB7Ci0JCQkJZGV2X2VycihjYXJkLT5kZXYsICJBU29DOiBjb2RlY19kYWlfbmFtZSBub3Qgc2V0IGZvciAlc1xuIiwKLQkJCQkJbGluay0+bmFtZSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQotCQkvKgotCQkgKiBQbGF0Zm9ybSBtYXkgYmUgc3BlY2lmaWVkIGJ5IGVpdGhlciBuYW1lIG9yIE9GIG5vZGUsIGJ1dAotCQkgKiBjYW4gYmUgbGVmdCB1bnNwZWNpZmllZCwgYW5kIGEgZHVtbXkgcGxhdGZvcm0gd2lsbCBiZSB1c2VkLgotCQkgKi8KLQkJaWYgKGxpbmstPnBsYXRmb3JtX25hbWUgJiYgbGluay0+cGxhdGZvcm1fb2Zfbm9kZSkgewotCQkJZGV2X2VycihjYXJkLT5kZXYsCi0JCQkJIkFTb0M6IEJvdGggcGxhdGZvcm0gbmFtZS9vZl9ub2RlIGFyZSBzZXQgZm9yICVzXG4iLAotCQkJCWxpbmstPm5hbWUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkgKiBDUFUgZGV2aWNlIG1heSBiZSBzcGVjaWZpZWQgYnkgZWl0aGVyIG5hbWUgb3IgT0Ygbm9kZSwgYnV0Ci0JCSAqIGNhbiBiZSBsZWZ0IHVuc3BlY2lmaWVkLCBhbmQgd2lsbCBiZSBtYXRjaGVkIGJhc2VkIG9uIERBSQotCQkgKiBuYW1lIGFsb25lLi4KLQkJICovCi0JCWlmIChsaW5rLT5jcHVfbmFtZSAmJiBsaW5rLT5jcHVfb2Zfbm9kZSkgewotCQkJZGV2X2VycihjYXJkLT5kZXYsCi0JCQkJIkFTb0M6IE5laXRoZXIvYm90aCBjcHUgbmFtZS9vZl9ub2RlIGFyZSBzZXQgZm9yICVzXG4iLAotCQkJCWxpbmstPm5hbWUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJLyoKLQkJICogQXQgbGVhc3Qgb25lIG9mIENQVSBEQUkgbmFtZSBvciBDUFUgZGV2aWNlIG5hbWUvbm9kZSBtdXN0IGJlCi0JCSAqIHNwZWNpZmllZAotCQkgKi8KLQkJaWYgKCFsaW5rLT5jcHVfZGFpX25hbWUgJiYKLQkJICAgICEobGluay0+Y3B1X25hbWUgfHwgbGluay0+Y3B1X29mX25vZGUpKSB7Ci0JCQlkZXZfZXJyKGNhcmQtPmRldiwKLQkJCQkiQVNvQzogTmVpdGhlciBjcHVfZGFpX25hbWUgbm9yIGNwdV9uYW1lL29mX25vZGUgYXJlIHNldCBmb3IgJXNcbiIsCi0JCQkJbGluay0+bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YShjYXJkLT5kZXYsIGNhcmQpOwogCiAJc25kX3NvY19pbml0aWFsaXplX2NhcmRfbGlzdHMoY2FyZCk7CiAKLQljYXJkLT5ydGQgPSBkZXZtX2t6YWxsb2MoY2FyZC0+ZGV2LAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUpICoKLQkJCQkgKGNhcmQtPm51bV9saW5rcyArIGNhcmQtPm51bV9hdXhfZGV2cyksCi0JCQkJIEdGUF9LRVJORUwpOwotCWlmIChjYXJkLT5ydGQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmRhaV9saW5rX2xpc3QpOworCWNhcmQtPm51bV9kYWlfbGlua3MgPSAwOworCisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnJ0ZF9saXN0KTsKIAljYXJkLT5udW1fcnRkID0gMDsKLQljYXJkLT5ydGRfYXV4ID0gJmNhcmQtPnJ0ZFtjYXJkLT5udW1fbGlua3NdOwotCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7Ci0JCWNhcmQtPnJ0ZFtpXS5jYXJkID0gY2FyZDsKLQkJY2FyZC0+cnRkW2ldLmRhaV9saW5rID0gJmNhcmQtPmRhaV9saW5rW2ldOwotCQljYXJkLT5ydGRbaV0uY29kZWNfZGFpcyA9IGRldm1fa3phbGxvYyhjYXJkLT5kZXYsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc25kX3NvY19kYWkgKikgKgotCQkJCQkoY2FyZC0+cnRkW2ldLmRhaV9saW5rLT5udW1fY29kZWNzKSwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCWlmIChjYXJkLT5ydGRbaV0uY29kZWNfZGFpcyA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9hdXhfZGV2czsgaSsrKQotCQljYXJkLT5ydGRfYXV4W2ldLmNhcmQgPSBjYXJkOwogCiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmRhcG1fZGlydHkpOwogCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5kb2JqX2xpc3QpOwpAQCAtMjQ0Miw4ICsyNjM3LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIGRlYWN0aXZhdGUgcGlucyB0byBzbGVlcCBzdGF0ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKLQkJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9ICZjYXJkLT5ydGRbaV07CisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgIHsKIAkJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwogCQlpbnQgajsKIApAQCAtMjU1OCw2ICsyNzUyLDU2IEBACiAJfQogfQogCisvKiBDcmVhdGUgYSBEQUkgYW5kIGFkZCBpdCB0byB0aGUgY29tcG9uZW50J3MgREFJIGxpc3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWkgKnNvY19hZGRfZGFpKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50LAorCXN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgKmRhaV9kcnYsCisJYm9vbCBsZWdhY3lfZGFpX25hbWluZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb21wb25lbnQtPmRldjsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaTsKKworCWRldl9kYmcoZGV2LCAiQVNvQzogZHluYW1pY2FsbHkgcmVnaXN0ZXIgREFJICVzXG4iLCBkZXZfbmFtZShkZXYpKTsKKworCWRhaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2RhaSksIEdGUF9LRVJORUwpOworCWlmIChkYWkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIEJhY2sgaW4gdGhlIG9sZCBkYXlzIHdoZW4gd2Ugc3RpbGwgaGFkIGNvbXBvbmVudC1sZXNzIERBSXMsCisJICogaW5zdGVhZCBvZiBoYXZpbmcgYSBzdGF0aWMgbmFtZSwgY29tcG9uZW50LWxlc3MgREFJcyB3b3VsZAorCSAqIGluaGVyaXQgdGhlIG5hbWUgb2YgdGhlIHBhcmVudCBkZXZpY2Ugc28gaXQgaXMgcG9zc2libGUgdG8KKwkgKiByZWdpc3RlciBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIERBSS4gV2Ugc3RpbGwgbmVlZCB0byBrZWVwCisJICogdGhlIHNhbWUgbmFtaW5nIHN0eWxlIGV2ZW4gdGhvdWdoIHRob3NlIERBSXMgYXJlIG5vdAorCSAqIGNvbXBvbmVudC1sZXNzIGFueW1vcmUuCisJICovCisJaWYgKGxlZ2FjeV9kYWlfbmFtaW5nICYmCisJICAgKGRhaV9kcnYtPmlkID09IDAgfHwgZGFpX2Rydi0+bmFtZSA9PSBOVUxMKSkgeworCQlkYWktPm5hbWUgPSBmbXRfc2luZ2xlX25hbWUoZGV2LCAmZGFpLT5pZCk7CisJfSBlbHNlIHsKKwkJZGFpLT5uYW1lID0gZm10X211bHRpcGxlX25hbWUoZGV2LCBkYWlfZHJ2KTsKKwkJaWYgKGRhaV9kcnYtPmlkKQorCQkJZGFpLT5pZCA9IGRhaV9kcnYtPmlkOworCQllbHNlCisJCQlkYWktPmlkID0gY29tcG9uZW50LT5udW1fZGFpOworCX0KKwlpZiAoZGFpLT5uYW1lID09IE5VTEwpIHsKKwkJa2ZyZWUoZGFpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZGFpLT5jb21wb25lbnQgPSBjb21wb25lbnQ7CisJZGFpLT5kZXYgPSBkZXY7CisJZGFpLT5kcml2ZXIgPSBkYWlfZHJ2OworCWlmICghZGFpLT5kcml2ZXItPm9wcykKKwkJZGFpLT5kcml2ZXItPm9wcyA9ICZudWxsX2RhaV9vcHM7CisKKwlsaXN0X2FkZCgmZGFpLT5saXN0LCAmY29tcG9uZW50LT5kYWlfbGlzdCk7CisJY29tcG9uZW50LT5udW1fZGFpKys7CisKKwlkZXZfZGJnKGRldiwgIkFTb0M6IFJlZ2lzdGVyZWQgREFJICclcydcbiIsIGRhaS0+bmFtZSk7CisJcmV0dXJuIGRhaTsKK30KKwogLyoqCiAgKiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMgLSBSZWdpc3RlciBhIERBSSB3aXRoIHRoZSBBU29DIGNvcmUKICAqCkBAIC0yNTc5LDQ5ICsyODIzLDE1IEBACiAJZGV2X2RiZyhkZXYsICJBU29DOiBkYWkgcmVnaXN0ZXIgJXMgIyVadVxuIiwgZGV2X25hbWUoZGV2KSwgY291bnQpOwogCiAJY29tcG9uZW50LT5kYWlfZHJ2ID0gZGFpX2RydjsKLQljb21wb25lbnQtPm51bV9kYWkgPSBjb3VudDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAKLQkJZGFpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfZGFpKSwgR0ZQX0tFUk5FTCk7CisJCWRhaSA9IHNvY19hZGRfZGFpKGNvbXBvbmVudCwgZGFpX2RydiArIGksCisJCQkJY291bnQgPT0gMSAmJiBsZWdhY3lfZGFpX25hbWluZyk7CiAJCWlmIChkYWkgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyOwogCQl9Ci0KLQkJLyoKLQkJICogQmFjayBpbiB0aGUgb2xkIGRheXMgd2hlbiB3ZSBzdGlsbCBoYWQgY29tcG9uZW50LWxlc3MgREFJcywKLQkJICogaW5zdGVhZCBvZiBoYXZpbmcgYSBzdGF0aWMgbmFtZSwgY29tcG9uZW50LWxlc3MgREFJcyB3b3VsZAotCQkgKiBpbmhlcml0IHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQgZGV2aWNlIHNvIGl0IGlzIHBvc3NpYmxlIHRvCi0JCSAqIHJlZ2lzdGVyIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgREFJLiBXZSBzdGlsbCBuZWVkIHRvIGtlZXAKLQkJICogdGhlIHNhbWUgbmFtaW5nIHN0eWxlIGV2ZW4gdGhvdWdoIHRob3NlIERBSXMgYXJlIG5vdAotCQkgKiBjb21wb25lbnQtbGVzcyBhbnltb3JlLgotCQkgKi8KLQkJaWYgKGNvdW50ID09IDEgJiYgbGVnYWN5X2RhaV9uYW1pbmcgJiYKLQkJCShkYWlfZHJ2W2ldLmlkID09IDAgfHwgZGFpX2RydltpXS5uYW1lID09IE5VTEwpKSB7Ci0JCQlkYWktPm5hbWUgPSBmbXRfc2luZ2xlX25hbWUoZGV2LCAmZGFpLT5pZCk7Ci0JCX0gZWxzZSB7Ci0JCQlkYWktPm5hbWUgPSBmbXRfbXVsdGlwbGVfbmFtZShkZXYsICZkYWlfZHJ2W2ldKTsKLQkJCWlmIChkYWlfZHJ2W2ldLmlkKQotCQkJCWRhaS0+aWQgPSBkYWlfZHJ2W2ldLmlkOwotCQkJZWxzZQotCQkJCWRhaS0+aWQgPSBpOwotCQl9Ci0JCWlmIChkYWktPm5hbWUgPT0gTlVMTCkgewotCQkJa2ZyZWUoZGFpKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycjsKLQkJfQotCi0JCWRhaS0+Y29tcG9uZW50ID0gY29tcG9uZW50OwotCQlkYWktPmRldiA9IGRldjsKLQkJZGFpLT5kcml2ZXIgPSAmZGFpX2RydltpXTsKLQkJaWYgKCFkYWktPmRyaXZlci0+b3BzKQotCQkJZGFpLT5kcml2ZXItPm9wcyA9ICZudWxsX2RhaV9vcHM7Ci0KLQkJbGlzdF9hZGQoJmRhaS0+bGlzdCwgJmNvbXBvbmVudC0+ZGFpX2xpc3QpOwotCi0JCWRldl9kYmcoZGV2LCAiQVNvQzogUmVnaXN0ZXJlZCBEQUkgJyVzJ1xuIiwgZGFpLT5uYW1lKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI2MzIsNiArMjg0Miw0OCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogc25kX3NvY19yZWdpc3Rlcl9kYWkgLSBSZWdpc3RlciBhIERBSSBkeW5hbWljYWxseSAmIGNyZWF0ZSBpdHMgd2lkZ2V0cworICoKKyAqIEBjb21wb25lbnQ6IFRoZSBjb21wb25lbnQgdGhlIERBSXMgYXJlIHJlZ2lzdGVyZWQgZm9yCisgKiBAZGFpX2RydjogREFJIGRyaXZlciB0byB1c2UgZm9yIHRoZSBEQUkKKyAqCisgKiBUb3BvbG9neSBjYW4gdXNlIHRoaXMgQVBJIHRvIHJlZ2lzdGVyIERBSXMgd2hlbiBwcm9iaW5nIGEgY29tcG9uZW50LgorICogVGhlc2UgREFJcydzIHdpZGdldHMgd2lsbCBiZSBmcmVlZCBpbiB0aGUgY2FyZCBjbGVhbnVwIGFuZCB0aGUgREFJcworICogd2lsbCBiZSBmcmVlZCBpbiB0aGUgY29tcG9uZW50IGNsZWFudXAuCisgKi8KK2ludCBzbmRfc29jX3JlZ2lzdGVyX2RhaShzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCwKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpkYWlfZHJ2KQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9CisJCXNuZF9zb2NfY29tcG9uZW50X2dldF9kYXBtKGNvbXBvbmVudCk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWk7CisJaW50IHJldDsKKworCWlmIChkYWlfZHJ2LT5kb2JqLnR5cGUgIT0gU05EX1NPQ19ET0JKX1BDTSkgeworCQlkZXZfZXJyKGNvbXBvbmVudC0+ZGV2LCAiSW52YWxpZCBkYWkgdHlwZSAlZFxuIiwKKwkJCWRhaV9kcnYtPmRvYmoudHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmNsaWVudF9tdXRleCk7CisJZGFpID0gc29jX2FkZF9kYWkoY29tcG9uZW50LCBkYWlfZHJ2LCBmYWxzZSk7CisJaWYgKCFkYWkpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogQ3JlYXRlIHRoZSBEQUkgd2lkZ2V0cyBoZXJlLiBBZnRlciBhZGRpbmcgREFJcywgdG9wb2xvZ3kgbWF5CisJICogYWxzbyBhZGQgcm91dGVzIHRoYXQgbmVlZCB0aGVzZSB3aWRnZXRzIGFzIHNvdXJjZSBvciBzaW5rLgorCSAqLworCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfZGFpX3dpZGdldHMoZGFwbSwgZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb21wb25lbnQtPmRldiwKKwkJCSJGYWlsZWQgdG8gY3JlYXRlIERBSSB3aWRnZXRzICVkXG4iLCByZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX3JlZ2lzdGVyX2RhaSk7CisKIHN0YXRpYyB2b2lkIHNuZF9zb2NfY29tcG9uZW50X3NlcV9ub3RpZmllcihzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJZW51bSBzbmRfc29jX2RhcG1fdHlwZSB0eXBlLCBpbnQgc3Vic2VxKQogewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCAwMTZlYmExLi41YTI4MTJmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtMTMwMCw3ICsxMzAwLDcgQEAKIAogc3RhdGljIGludCBkYXBtX2Fsd2F5c19vbl9jaGVja19wb3dlcihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKIHsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gdy0+Y29ubmVjdGVkOwogfQogCiBzdGF0aWMgaW50IGRhcG1fc2VxX2NvbXBhcmUoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmEsCkBAIC0yMjkzLDYgKzIyOTMsMTIgQEAKIAlrZnJlZSh3KTsKIH0KIAordm9pZCBzbmRfc29jX2RhcG1fcmVzZXRfY2FjaGUoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKQoreworCWRhcG0tPnBhdGhfc2lua19jYWNoZS53aWRnZXQgPSBOVUxMOworCWRhcG0tPnBhdGhfc291cmNlX2NhY2hlLndpZGdldCA9IE5VTEw7Cit9CisKIC8qIGZyZWUgYWxsIGRhcG0gd2lkZ2V0cyBhbmQgcmVzb3VyY2VzICovCiBzdGF0aWMgdm9pZCBkYXBtX2ZyZWVfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCiB7CkBAIC0yMzAzLDYgKzIzMDksNyBAQAogCQkJY29udGludWU7CiAJCXNuZF9zb2NfZGFwbV9mcmVlX3dpZGdldCh3KTsKIAl9CisJc25kX3NvY19kYXBtX3Jlc2V0X2NhY2hlKGRhcG0pOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmRhcG1fZmluZF93aWRnZXQoCkBAIC0zMzUxLDYgKzMzNTgsMTEgQEAKIAkJdy0+aXNfZXAgPSBTTkRfU09DX0RBUE1fRVBfU09VUkNFOwogCQl3LT5wb3dlcl9jaGVjayA9IGRhcG1fYWx3YXlzX29uX2NoZWNrX3Bvd2VyOwogCQlicmVhazsKKwljYXNlIHNuZF9zb2NfZGFwbV9zaW5rOgorCQl3LT5pc19lcCA9IFNORF9TT0NfREFQTV9FUF9TSU5LOworCQl3LT5wb3dlcl9jaGVjayA9IGRhcG1fYWx3YXlzX29uX2NoZWNrX3Bvd2VyOworCQlicmVhazsKKwogCWNhc2Ugc25kX3NvY19kYXBtX211eDoKIAljYXNlIHNuZF9zb2NfZGFwbV9kZW11eDoKIAljYXNlIHNuZF9zb2NfZGFwbV9zd2l0Y2g6CkBAIC0zODkzLDEzICszOTA1LDEwIEBACiAKIHZvaWQgc25kX3NvY19kYXBtX2Nvbm5lY3RfZGFpX2xpbmtfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBjYXJkLT5ydGQ7Ci0JaW50IGk7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKIAogCS8qIGZvciBlYWNoIEJFIERBSSBsaW5rLi4uICovCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9ydGQ7IGkrKykgewotCQlydGQgPSAmY2FyZC0+cnRkW2ldOwotCisJbGlzdF9mb3JfZWFjaF9lbnRyeShydGQsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgIHsKIAkJLyoKIAkJICogZHluYW1pYyBGRSBsaW5rcyBoYXZlIG5vIGZpeGVkIERBSSBtYXBwaW5nLgogCQkgKiBDT0RFQzwtPkNPREVDIGxpbmtzIGhhdmUgbm8gZGlyZWN0IGNvbm5lY3Rpb24uCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLW9wcy5jIGIvc291bmQvc29jL3NvYy1vcHMuYwppbmRleCBlY2QzOGU1Li5hNTEzYTM0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLW9wcy5jCisrKyBiL3NvdW5kL3NvYy9zb2Mtb3BzLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogLyoqCiAgKiBzbmRfc29jX3B1dF92b2xzd19zeCAtIGRvdWJsZSBtaXhlciBzZXQgY2FsbGJhY2sKICAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAotICogQHVpbmZvOiBjb250cm9sIGVsZW1lbnQgaW5mb3JtYXRpb24KKyAqIEB1Y29udHJvbDogY29udHJvbCBlbGVtZW50IGluZm9ybWF0aW9uCiAgKgogICogQ2FsbGJhY2sgdG8gc2V0IHRoZSB2YWx1ZSBvZiBhIGRvdWJsZSBtaXhlciBjb250cm9sIHRoYXQgc3BhbnMgMiByZWdpc3RlcnMuCiAgKgpAQCAtNzc5LDExICs3NzksMTEgQEAKIAlzd2l0Y2ggKG9wX2ZsYWcpIHsKIAljYXNlIFNORFJWX0NUTF9UTFZfT1BfUkVBRDoKIAkJaWYgKHBhcmFtcy0+Z2V0KQotCQkJcmV0ID0gcGFyYW1zLT5nZXQodGx2LCBjb3VudCk7CisJCQlyZXQgPSBwYXJhbXMtPmdldChrY29udHJvbCwgdGx2LCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfQ1RMX1RMVl9PUF9XUklURToKIAkJaWYgKHBhcmFtcy0+cHV0KQotCQkJcmV0ID0gcGFyYW1zLT5wdXQodGx2LCBjb3VudCk7CisJCQlyZXQgPSBwYXJhbXMtPnB1dChrY29udHJvbCwgdGx2LCBjb3VudCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1wY20uYyBiL3NvdW5kL3NvYy9zb2MtcGNtLmMKaW5kZXggYzg2ZGM5Ni4uZTg5OGI0MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1wY20uYworKysgYi9zb3VuZC9zb2Mvc29jLXBjbS5jCkBAIC01OTksMTAgKzU5OSwxNSBAQAogb3V0OgogCW11dGV4X3VubG9jaygmcnRkLT5wY21fbXV0ZXgpOwogCi0JcG1fcnVudGltZV9wdXQocGxhdGZvcm0tPmRldik7Ci0JZm9yIChpID0gMDsgaSA8IHJ0ZC0+bnVtX2NvZGVjczsgaSsrKQotCQlwbV9ydW50aW1lX3B1dChydGQtPmNvZGVjX2RhaXNbaV0tPmRldik7Ci0JcG1fcnVudGltZV9wdXQoY3B1X2RhaS0+ZGV2KTsKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHBsYXRmb3JtLT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHBsYXRmb3JtLT5kZXYpOworCWZvciAoaSA9IDA7IGkgPCBydGQtPm51bV9jb2RlY3M7IGkrKykgeworCQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHJ0ZC0+Y29kZWNfZGFpc1tpXS0+ZGV2KTsKKwkJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQocnRkLT5jb2RlY19kYWlzW2ldLT5kZXYpOworCX0KKworCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koY3B1X2RhaS0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChjcHVfZGFpLT5kZXYpOwogCWZvciAoaSA9IDA7IGkgPCBydGQtPm51bV9jb2RlY3M7IGkrKykgewogCQlpZiAoIXJ0ZC0+Y29kZWNfZGFpc1tpXS0+YWN0aXZlKQogCQkJcGluY3RybF9wbV9zZWxlY3Rfc2xlZXBfc3RhdGUocnRkLT5jb2RlY19kYWlzW2ldLT5kZXYpOwpAQCAtNzA2LDEwICs3MTEsMTcgQEAKIAogCW11dGV4X3VubG9jaygmcnRkLT5wY21fbXV0ZXgpOwogCi0JcG1fcnVudGltZV9wdXQocGxhdGZvcm0tPmRldik7Ci0JZm9yIChpID0gMDsgaSA8IHJ0ZC0+bnVtX2NvZGVjczsgaSsrKQotCQlwbV9ydW50aW1lX3B1dChydGQtPmNvZGVjX2RhaXNbaV0tPmRldik7Ci0JcG1fcnVudGltZV9wdXQoY3B1X2RhaS0+ZGV2KTsKKwlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHBsYXRmb3JtLT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHBsYXRmb3JtLT5kZXYpOworCisJZm9yIChpID0gMDsgaSA8IHJ0ZC0+bnVtX2NvZGVjczsgaSsrKSB7CisJCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3kocnRkLT5jb2RlY19kYWlzW2ldLT5kZXYpOworCQlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChydGQtPmNvZGVjX2RhaXNbaV0tPmRldik7CisJfQorCisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShjcHVfZGFpLT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGNwdV9kYWktPmRldik7CisKIAlmb3IgKGkgPSAwOyBpIDwgcnRkLT5udW1fY29kZWNzOyBpKyspIHsKIAkJaWYgKCFydGQtPmNvZGVjX2RhaXNbaV0tPmFjdGl2ZSkKIAkJCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKHJ0ZC0+Y29kZWNfZGFpc1tpXS0+ZGV2KTsKQEAgLTEyMTMsMTEgKzEyMjUsMTAgQEAKIAkJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCwgaW50IHN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqYmU7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKIAlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7Ci0JCQliZSA9ICZjYXJkLT5ydGRbaV07CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYmUsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgewogCiAJCQlpZiAoIWJlLT5kYWlfbGluay0+bm9fcGNtKQogCQkJCWNvbnRpbnVlOwpAQCAtMTIyNSwxNiArMTIzNiwxNSBAQAogCQkJaWYgKGJlLT5jcHVfZGFpLT5wbGF5YmFja193aWRnZXQgPT0gd2lkZ2V0KQogCQkJCXJldHVybiBiZTsKIAotCQkJZm9yIChqID0gMDsgaiA8IGJlLT5udW1fY29kZWNzOyBqKyspIHsKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGJlLT5jb2RlY19kYWlzW2pdOworCQkJZm9yIChpID0gMDsgaSA8IGJlLT5udW1fY29kZWNzOyBpKyspIHsKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGJlLT5jb2RlY19kYWlzW2ldOwogCQkJCWlmIChkYWktPnBsYXliYWNrX3dpZGdldCA9PSB3aWRnZXQpCiAJCQkJCXJldHVybiBiZTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CiAKLQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7Ci0JCQliZSA9ICZjYXJkLT5ydGRbaV07CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYmUsICZjYXJkLT5ydGRfbGlzdCwgbGlzdCkgewogCiAJCQlpZiAoIWJlLT5kYWlfbGluay0+bm9fcGNtKQogCQkJCWNvbnRpbnVlOwpAQCAtMTI0Miw4ICsxMjUyLDggQEAKIAkJCWlmIChiZS0+Y3B1X2RhaS0+Y2FwdHVyZV93aWRnZXQgPT0gd2lkZ2V0KQogCQkJCXJldHVybiBiZTsKIAotCQkJZm9yIChqID0gMDsgaiA8IGJlLT5udW1fY29kZWNzOyBqKyspIHsKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGJlLT5jb2RlY19kYWlzW2pdOworCQkJZm9yIChpID0gMDsgaSA8IGJlLT5udW1fY29kZWNzOyBpKyspIHsKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGJlLT5jb2RlY19kYWlzW2ldOwogCQkJCWlmIChkYWktPmNhcHR1cmVfd2lkZ2V0ID09IHdpZGdldCkKIAkJCQkJcmV0dXJuIGJlOwogCQkJfQpAQCAtMTYxNiw2ICsxNjI2LDU2IEBACiAJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwogfQogCitzdGF0aWMgaW50IGRwY21fYXBwbHlfc3ltbWV0cnkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpmZV9zdWJzdHJlYW0sCisJCQkgICAgICAgaW50IHN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kcGNtICpkcGNtOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpmZSA9IGZlX3N1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqZmVfY3B1X2RhaSA9IGZlLT5jcHVfZGFpOworCWludCBlcnI7CisKKwkvKiBhcHBseSBzeW1tZXRyeSBmb3IgRkUgKi8KKwlpZiAoc29jX3BjbV9oYXNfc3ltbWV0cnkoZmVfc3Vic3RyZWFtKSkKKwkJZmVfc3Vic3RyZWFtLT5ydW50aW1lLT5ody5pbmZvIHw9IFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWDsKKworCS8qIFN5bW1ldHJ5IG9ubHkgYXBwbGllcyBpZiB3ZSd2ZSBnb3QgYW4gYWN0aXZlIHN0cmVhbS4gKi8KKwlpZiAoZmVfY3B1X2RhaS0+YWN0aXZlKSB7CisJCWVyciA9IHNvY19wY21fYXBwbHlfc3ltbWV0cnkoZmVfc3Vic3RyZWFtLCBmZV9jcHVfZGFpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGFwcGx5IHN5bW1ldHJ5IGZvciBCRSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHBjbSwgJmZlLT5kcGNtW3N0cmVhbV0uYmVfY2xpZW50cywgbGlzdF9iZSkgeworCQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqYmUgPSBkcGNtLT5iZTsKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpiZV9zdWJzdHJlYW0gPQorCQkJc25kX3NvY19kcGNtX2dldF9zdWJzdHJlYW0oYmUsIHN0cmVhbSk7CisJCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBiZV9zdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwkJaW50IGk7CisKKwkJaWYgKHNvY19wY21faGFzX3N5bW1ldHJ5KGJlX3N1YnN0cmVhbSkpCisJCQliZV9zdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmluZm8gfD0gU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYOworCisJCS8qIFN5bW1ldHJ5IG9ubHkgYXBwbGllcyBpZiB3ZSd2ZSBnb3QgYW4gYWN0aXZlIHN0cmVhbS4gKi8KKwkJaWYgKHJ0ZC0+Y3B1X2RhaS0+YWN0aXZlKSB7CisJCQllcnIgPSBzb2NfcGNtX2FwcGx5X3N5bW1ldHJ5KGJlX3N1YnN0cmVhbSwgcnRkLT5jcHVfZGFpKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcnRkLT5udW1fY29kZWNzOyBpKyspIHsKKwkJCWlmIChydGQtPmNvZGVjX2RhaXNbaV0tPmFjdGl2ZSkgeworCQkJCWVyciA9IHNvY19wY21fYXBwbHlfc3ltbWV0cnkoYmVfc3Vic3RyZWFtLAorCQkJCQkJCSAgICAgcnRkLT5jb2RlY19kYWlzW2ldKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRwY21fZmVfZGFpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpmZV9zdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKmZlID0gZmVfc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CkBAIC0xNjQ0LDYgKzE3MDQsMTMgQEAKIAlkcGNtX3NldF9mZV9ydW50aW1lKGZlX3N1YnN0cmVhbSk7CiAJc25kX3BjbV9saW1pdF9od19yYXRlcyhydW50aW1lKTsKIAorCXJldCA9IGRwY21fYXBwbHlfc3ltbWV0cnkoZmVfc3Vic3RyZWFtLCBzdHJlYW0pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZmUtPmRldiwgIkFTb0M6IGZhaWxlZCB0byBhcHBseSBkcGNtIHN5bW1ldHJ5ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byB1bndpbmQ7CisJfQorCiAJZHBjbV9zZXRfZmVfdXBkYXRlX3N0YXRlKGZlLCBzdHJlYW0sIFNORF9TT0NfRFBDTV9VUERBVEVfTk8pOwogCXJldHVybiAwOwogCkBAIC0yMTE1LDcgKzIxODIsOCBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKChiZS0+ZHBjbVtzdHJlYW1dLnN0YXRlICE9IFNORF9TT0NfRFBDTV9TVEFURV9IV19QQVJBTVMpICYmCi0JCSAgICAoYmUtPmRwY21bc3RyZWFtXS5zdGF0ZSAhPSBTTkRfU09DX0RQQ01fU1RBVEVfU1RPUCkpCisJCSAgICAoYmUtPmRwY21bc3RyZWFtXS5zdGF0ZSAhPSBTTkRfU09DX0RQQ01fU1RBVEVfU1RPUCkgJiYKKwkJICAgIChiZS0+ZHBjbVtzdHJlYW1dLnN0YXRlICE9IFNORF9TT0NfRFBDTV9TVEFURV9TVVNQRU5EKSkKIAkJCWNvbnRpbnVlOwogCiAJCWRldl9kYmcoYmUtPmRldiwgIkFTb0M6IHByZXBhcmUgQkUgJXNcbiIsCkBAIC0yMzQzLDEyICsyNDExLDEyIEBACiAgKi8KIGludCBzb2NfZHBjbV9ydW50aW1lX3VwZGF0ZShzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCWludCBpLCBvbGQsIG5ldywgcGF0aHM7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKmZlOworCWludCBvbGQsIG5ldywgcGF0aHM7CiAKIAltdXRleF9sb2NrX25lc3RlZCgmY2FyZC0+bXV0ZXgsIFNORF9TT0NfQ0FSRF9DTEFTU19SVU5USU1FKTsKLQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+bnVtX3J0ZDsgaSsrKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmZSwgJmNhcmQtPnJ0ZF9saXN0LCBsaXN0KSB7CiAJCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0X2xpc3QgKmxpc3Q7Ci0JCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpmZSA9ICZjYXJkLT5ydGRbaV07CiAKIAkJLyogbWFrZSBzdXJlIGxpbmsgaXMgRkUgKi8KIAkJaWYgKCFmZS0+ZGFpX2xpbmstPmR5bmFtaWMpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLXRvcG9sb2d5LmMgYi9zb3VuZC9zb2Mvc29jLXRvcG9sb2d5LmMKaW5kZXggOGQ3ZWM4MC4uNjk2M2JhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy10b3BvbG9neS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtdG9wb2xvZ3kuYwpAQCAtNTMxLDcgKzUzMSw3IEBACiAJCS8qIFRMViBieXRlcyBjb250cm9scyBuZWVkIHN0YW5kYXJkIGtjb250cm9sIGluZm8gaGFuZGxlciwKIAkJICogVExWIGNhbGxiYWNrIGFuZCBleHRlbmRlZCBwdXQvZ2V0IGhhbmRsZXJzLgogCQkgKi8KLQkJay0+aW5mbyA9IHNuZF9zb2NfYnl0ZXNfaW5mbzsKKwkJay0+aW5mbyA9IHNuZF9zb2NfYnl0ZXNfaW5mb19leHQ7CiAJCWstPnRsdi5jID0gc25kX3NvY19ieXRlc190bHZfY2FsbGJhY2s7CiAKIAkJZXh0X29wcyA9IHRwbGctPmJ5dGVzX2V4dF9vcHM7CkBAIC0xODA1LDYgKzE4MDUsNyBAQAogCQlzbmRfc29jX3RwbGdfd2lkZ2V0X3JlbW92ZSh3KTsKIAkJc25kX3NvY19kYXBtX2ZyZWVfd2lkZ2V0KHcpOwogCX0KKwlzbmRfc29jX2RhcG1fcmVzZXRfY2FjaGUoZGFwbSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX3RwbGdfd2lkZ2V0X3JlbW92ZV9hbGwpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc3RpL3VuaXBlcmlmX3BsYXllci5jIGIvc291bmQvc29jL3N0aS91bmlwZXJpZl9wbGF5ZXIuYwppbmRleCA4NDNmMDM3Li43YWNhNmI5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc3RpL3VuaXBlcmlmX3BsYXllci5jCisrKyBiL3NvdW5kL3NvYy9zdGkvdW5pcGVyaWZfcGxheWVyLmMKQEAgLTI1MSw4ICsyNTEsNyBAQAogCSAqIHNldCBvbmUuCiAJICovCiAJbXV0ZXhfbG9jaygmcGxheWVyLT5jdHJsX2xvY2spOwotCWlmIChydW50aW1lICYmIChwbGF5ZXItPnN0cmVhbV9zZXR0aW5ncy5pZWM5NTguc3RhdHVzWzNdCi0JCQkJCT09IElFQzk1OF9BRVMzX0NPTl9GU19OT1RJRCkpIHsKKwlpZiAocnVudGltZSkgewogCQlzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAkJY2FzZSAyMjA1MDoKIAkJCXBsYXllci0+c3RyZWFtX3NldHRpbmdzLmllYzk1OC5zdGF0dXNbM10gPQpAQCAtNjY5LDYgKzY2OCw3IEBACiB7CiAJc3RydWN0IHN0aV91bmlwZXJpcGhfZGF0YSAqcHJpdiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CiAJc3RydWN0IHVuaXBlcmlmICpwbGF5ZXIgPSBwcml2LT5kYWlfZGF0YS51bmk7CisJcGxheWVyLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CiAKIAlwbGF5ZXItPmNsa19hZGogPSAwOwogCkBAIC05NTAsNiArOTUwLDggQEAKIAlpZiAocGxheWVyLT5zdGF0ZSAhPSBVTklQRVJJRl9TVEFURV9TVE9QUEVEKQogCQkvKiBTdG9wIHRoZSBwbGF5ZXIgKi8KIAkJdW5pX3BsYXllcl9zdG9wKHBsYXllcik7CisKKwlwbGF5ZXItPnN1YnN0cmVhbSA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgdW5pX3BsYXllcl9wYXJzZV9kdF9jbGtfZ2x1ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LApAQCAtOTg5LDcgKzk5MSw3IEBACiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwbm9kZSwgInZlcnNpb24iLCAmcGxheWVyLT52ZXIpIHx8CisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBub2RlLCAic3QsdmVyc2lvbiIsICZwbGF5ZXItPnZlcikgfHwKIAkgICAgcGxheWVyLT52ZXIgPT0gU05EX1NUX1VOSVBFUklGX1ZFUlNJT05fVU5LTk9XTikgewogCQlkZXZfZXJyKGRldiwgIlVua25vd24gdW5pcGVyaXBoZXJhbCB2ZXJzaW9uICIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk5OCwxMyArMTAwMCwxMyBAQAogCWlmIChwbGF5ZXItPnZlciA+PSBTTkRfU1RfVU5JUEVSSUZfVkVSU0lPTl9VTklfUExSX1RPUF8xXzApCiAJCWluZm8tPnVuZGVyZmxvd19lbmFibGVkID0gMTsKIAotCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwbm9kZSwgInVuaXBlcmlwaC1pZCIsICZpbmZvLT5pZCkpIHsKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocG5vZGUsICJzdCx1bmlwZXJpcGgtaWQiLCAmaW5mby0+aWQpKSB7CiAJCWRldl9lcnIoZGV2LCAidW5pcGVyaXBoZXJhbCBpZCBub3QgZGVmaW5lZCIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBSZWFkIHRoZSBkZXZpY2UgbW9kZSBwcm9wZXJ0eSAqLwotCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhwbm9kZSwgIm1vZGUiLCAmbW9kZSkpIHsKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcocG5vZGUsICJzdCxtb2RlIiwgJm1vZGUpKSB7CiAJCWRldl9lcnIoZGV2LCAidW5pcGVyaXBoZXJhbCBtb2RlIG5vdCBkZWZpbmVkIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zdGkvdW5pcGVyaWZfcmVhZGVyLmMgYi9zb3VuZC9zb2Mvc3RpL3VuaXBlcmlmX3JlYWRlci5jCmluZGV4IGY3OTEyMzkuLjhhMGViMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zdGkvdW5pcGVyaWZfcmVhZGVyLmMKKysrIGIvc291bmQvc29jL3N0aS91bmlwZXJpZl9yZWFkZXIuYwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAidmVyc2lvbiIsICZyZWFkZXItPnZlcikgfHwKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInN0LHZlcnNpb24iLCAmcmVhZGVyLT52ZXIpIHx8CiAJICAgIHJlYWRlci0+dmVyID09IFNORF9TVF9VTklQRVJJRl9WRVJTSU9OX1VOS05PV04pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5rbm93biB1bmlwZXJpcGhlcmFsIHZlcnNpb24gIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzQ2LDcgKzM0Niw2IEBACiAJcmVhZGVyLT5odyA9ICZ1bmlfcmVhZGVyX3BjbV9odzsKIAlyZWFkZXItPmRhaV9vcHMgPSAmdW5pX3JlYWRlcl9kYWlfb3BzOwogCi0JZGV2X2VycihyZWFkZXItPmRldiwgIiVzOiBlbnRlclxuIiwgX19mdW5jX18pOwogCXJldCA9IHVuaV9yZWFkZXJfcGFyc2VfZHQocGRldiwgcmVhZGVyKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKHJlYWRlci0+ZGV2LCAiRmFpbGVkIHRvIHBhcnNlIERldmljZVRyZWUiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zdW54aS9zdW40aS1jb2RlYy5jIGIvc291bmQvc29jL3N1bnhpL3N1bjRpLWNvZGVjLmMKaW5kZXggYmNiZjRkYS4uNDRmMTcwYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3N1bnhpL3N1bjRpLWNvZGVjLmMKKysrIGIvc291bmQvc29jL3N1bnhpL3N1bjRpLWNvZGVjLmMKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgMjAxNCBFbWlsaW8gTMOzcGV6IDxlbWlsaW9AZWxvcGV6LmNvbS5hcj4KICAqIENvcHlyaWdodCAyMDE0IEpvbiBTbWlybCA8am9uc21pcmxAZ21haWwuY29tPgogICogQ29weXJpZ2h0IDIwMTUgTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CisgKiBDb3B5cmlnaHQgMjAxNSBBZGFtIFNhbXBzb24gPGF0c0BvZmZvZy5vcmc+CiAgKgogICogQmFzZWQgb24gdGhlIEFsbHdpbm5lciBTREsgZHJpdmVyLCByZWxlYXNlZCB1bmRlciB0aGUgR1BMLgogICoKQEAgLTI3LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtNjksNiArNzEsNyBAQAogCiAvKiBDb2RlYyBBREMgcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0IGZpZWxkcyAqLwogI2RlZmluZSBTVU40SV9DT0RFQ19BRENfRklGT0MJCQkoMHgxYykKKyNkZWZpbmUgU1VONElfQ09ERUNfQURDX0ZJRk9DX0FEQ19GUwkJCSgyOSkKICNkZWZpbmUgU1VONElfQ09ERUNfQURDX0ZJRk9DX0VOX0FECQkJKDI4KQogI2RlZmluZSBTVU40SV9DT0RFQ19BRENfRklGT0NfUlhfRklGT19NT0RFCQkoMjQpCiAjZGVmaW5lIFNVTjRJX0NPREVDX0FEQ19GSUZPQ19SWF9UUklHX0xFVkVMCQkoOCkKQEAgLTEwMSwxNyArMTA0LDE0IEBACiAJc3RydWN0IHJlZ21hcAkqcmVnbWFwOwogCXN0cnVjdCBjbGsJKmNsa19hcGI7CiAJc3RydWN0IGNsawkqY2xrX21vZHVsZTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX3BhOwogCisJc3RydWN0IHNuZF9kbWFlbmdpbmVfZGFpX2RtYV9kYXRhCWNhcHR1cmVfZG1hX2RhdGE7CiAJc3RydWN0IHNuZF9kbWFlbmdpbmVfZGFpX2RtYV9kYXRhCXBsYXliYWNrX2RtYV9kYXRhOwogfTsKIAogc3RhdGljIHZvaWQgc3VuNGlfY29kZWNfc3RhcnRfcGxheWJhY2soc3RydWN0IHN1bjRpX2NvZGVjICpzY29kZWMpCiB7Ci0JLyoKLQkgKiBGSVhNRTogYWNjb3JkaW5nIHRvIHRoZSBCU1AsIHdlIG1pZ2h0IG5lZWQgdG8gZHJpdmUgYSBQQQotCSAqICAgICAgICBHUElPIGhpZ2ggaGVyZSBvbiBzb21lIGJvYXJkcwotCSAqLwotCiAJLyogRmx1c2ggVFggRklGTyAqLwogCXJlZ21hcF91cGRhdGVfYml0cyhzY29kZWMtPnJlZ21hcCwgU1VONElfQ09ERUNfREFDX0ZJRk9DLAogCQkJICAgQklUKFNVTjRJX0NPREVDX0RBQ19GSUZPQ19GSUZPX0ZMVVNIKSwKQEAgLTEyNSwzNyArMTI1LDUwIEBACiAKIHN0YXRpYyB2b2lkIHN1bjRpX2NvZGVjX3N0b3BfcGxheWJhY2soc3RydWN0IHN1bjRpX2NvZGVjICpzY29kZWMpCiB7Ci0JLyoKLQkgKiBGSVhNRTogYWNjb3JkaW5nIHRvIHRoZSBCU1AsIHdlIG1pZ2h0IG5lZWQgdG8gZHJpdmUgYSBQQQotCSAqICAgICAgICBHUElPIGxvdyBoZXJlIG9uIHNvbWUgYm9hcmRzCi0JICovCi0KIAkvKiBEaXNhYmxlIERBQyBEUlEgKi8KIAlyZWdtYXBfdXBkYXRlX2JpdHMoc2NvZGVjLT5yZWdtYXAsIFNVTjRJX0NPREVDX0RBQ19GSUZPQywKIAkJCSAgIEJJVChTVU40SV9DT0RFQ19EQUNfRklGT0NfREFDX0RSUV9FTiksCiAJCQkgICAwKTsKIH0KIAorc3RhdGljIHZvaWQgc3VuNGlfY29kZWNfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc3VuNGlfY29kZWMgKnNjb2RlYykKK3sKKwkvKiBFbmFibGUgQURDIERSUSAqLworCXJlZ21hcF91cGRhdGVfYml0cyhzY29kZWMtPnJlZ21hcCwgU1VONElfQ09ERUNfQURDX0ZJRk9DLAorCQkJICAgQklUKFNVTjRJX0NPREVDX0FEQ19GSUZPQ19BRENfRFJRX0VOKSwKKwkJCSAgIEJJVChTVU40SV9DT0RFQ19BRENfRklGT0NfQURDX0RSUV9FTikpOworfQorCitzdGF0aWMgdm9pZCBzdW40aV9jb2RlY19zdG9wX2NhcHR1cmUoc3RydWN0IHN1bjRpX2NvZGVjICpzY29kZWMpCit7CisJLyogRGlzYWJsZSBBREMgRFJRICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHNjb2RlYy0+cmVnbWFwLCBTVU40SV9DT0RFQ19BRENfRklGT0MsCisJCQkgICBCSVQoU1VONElfQ09ERUNfQURDX0ZJRk9DX0FEQ19EUlFfRU4pLCAwKTsKK30KKwogc3RhdGljIGludCBzdW40aV9jb2RlY190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAogCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc3VuNGlfY29kZWMgKnNjb2RlYyA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShydGQtPmNhcmQpOwogCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtICE9IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlzdW40aV9jb2RlY19zdGFydF9wbGF5YmFjayhzY29kZWMpOworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXN1bjRpX2NvZGVjX3N0YXJ0X3BsYXliYWNrKHNjb2RlYyk7CisJCWVsc2UKKwkJCXN1bjRpX2NvZGVjX3N0YXJ0X2NhcHR1cmUoc2NvZGVjKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJc3VuNGlfY29kZWNfc3RvcF9wbGF5YmFjayhzY29kZWMpOworCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXN1bjRpX2NvZGVjX3N0b3BfcGxheWJhY2soc2NvZGVjKTsKKwkJZWxzZQorCQkJc3VuNGlfY29kZWNfc3RvcF9jYXB0dXJlKHNjb2RlYyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTE2NSwxNiArMTc4LDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3VuNGlfY29kZWNfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3N0YXRpYyBpbnQgc3VuNGlfY29kZWNfcHJlcGFyZV9jYXB0dXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHN1bjRpX2NvZGVjICpzY29kZWMgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEocnRkLT5jYXJkKTsKKworCisJLyogRmx1c2ggUlggRklGTyAqLworCXJlZ21hcF91cGRhdGVfYml0cyhzY29kZWMtPnJlZ21hcCwgU1VONElfQ09ERUNfQURDX0ZJRk9DLAorCQkJICAgQklUKFNVTjRJX0NPREVDX0FEQ19GSUZPQ19GSUZPX0ZMVVNIKSwKKwkJCSAgIEJJVChTVU40SV9DT0RFQ19BRENfRklGT0NfRklGT19GTFVTSCkpOworCisKKwkvKiBTZXQgUlggRklGTyB0cmlnZ2VyIGxldmVsICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHNjb2RlYy0+cmVnbWFwLCBTVU40SV9DT0RFQ19BRENfRklGT0MsCisJCQkgICAweGYgPDwgU1VONElfQ09ERUNfQURDX0ZJRk9DX1JYX1RSSUdfTEVWRUwsCisJCQkgICAweDcgPDwgU1VONElfQ09ERUNfQURDX0ZJRk9DX1JYX1RSSUdfTEVWRUwpOworCisJLyoKKwkgKiBGSVhNRTogVW5kb2N1bWVudGVkIGluIHRoZSBkYXRhc2hlZXQsIGJ1dAorCSAqICAgICAgICBBbGx3aW5uZXIncyBjb2RlIG1lbnRpb25zIHRoYXQgaXQgaXMgcmVsYXRlZAorCSAqICAgICAgICByZWxhdGVkIHRvIG1pY3JvcGhvbmUgZ2FpbgorCSAqLworCXJlZ21hcF91cGRhdGVfYml0cyhzY29kZWMtPnJlZ21hcCwgU1VONElfQ09ERUNfQURDX0FDVEwsCisJCQkgICAweDMgPDwgMjUsCisJCQkgICAweDEgPDwgMjUpOworCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHNjb2RlYy0+ZGV2LT5vZl9ub2RlLAorCQkJCSAgICAiYWxsd2lubmVyLHN1bjdpLWEyMC1jb2RlYyIpKQorCQkvKiBGSVhNRTogVW5kb2N1bWVudGVkIGJpdHMgKi8KKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHNjb2RlYy0+cmVnbWFwLCBTVU40SV9DT0RFQ19EQUNfVFVORSwKKwkJCQkgICAweDMgPDwgOCwKKwkJCQkgICAweDEgPDwgOCk7CisKKwkvKiBGaWxsIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyB3aXRoIHZhbGlkIGRhdGEgTVNCICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHNjb2RlYy0+cmVnbWFwLCBTVU40SV9DT0RFQ19BRENfRklGT0MsCisJCQkgICBCSVQoU1VONElfQ09ERUNfQURDX0ZJRk9DX1JYX0ZJRk9fTU9ERSksCisJCQkgICBCSVQoU1VONElfQ09ERUNfQURDX0ZJRk9DX1JYX0ZJRk9fTU9ERSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3VuNGlfY29kZWNfcHJlcGFyZV9wbGF5YmFjayhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzdW40aV9jb2RlYyAqc2NvZGVjID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHJ0ZC0+Y2FyZCk7CiAJdTMyIHZhbDsKIAotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSAhPSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlyZXR1cm4gLUVOT1RTVVBQOwotCiAJLyogRmx1c2ggdGhlIFRYIEZJRk8gKi8KIAlyZWdtYXBfdXBkYXRlX2JpdHMoc2NvZGVjLT5yZWdtYXAsIFNVTjRJX0NPREVDX0RBQ19GSUZPQywKIAkJCSAgIEJJVChTVU40SV9DT0RFQ19EQUNfRklGT0NfRklGT19GTFVTSCksCkBAIC0yMDIsNiArMjU0LDE1IEBACiAJCQkgICAwKTsKIAogCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBzdW40aV9jb2RlY19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlyZXR1cm4gc3VuNGlfY29kZWNfcHJlcGFyZV9wbGF5YmFjayhzdWJzdHJlYW0sIGRhaSk7CisKKwlyZXR1cm4gc3VuNGlfY29kZWNfcHJlcGFyZV9jYXB0dXJlKHN1YnN0cmVhbSwgZGFpKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VuNGlfY29kZWNfZ2V0X21vZF9mcmVxKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQpAQCAtMjc2LDMxICszMzcsMzMgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc3VuNGlfY29kZWNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKLQkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCitzdGF0aWMgaW50IHN1bjRpX2NvZGVjX2h3X3BhcmFtc19jYXB0dXJlKHN0cnVjdCBzdW40aV9jb2RlYyAqc2NvZGVjLAorCQkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJCSB1bnNpZ25lZCBpbnQgaHdyYXRlKQogewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc3VuNGlfY29kZWMgKnNjb2RlYyA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShydGQtPmNhcmQpOwotCXVuc2lnbmVkIGxvbmcgY2xrX2ZyZXE7Ci0JaW50IHJldCwgaHdyYXRlOworCS8qIFNldCBBREMgc2FtcGxlIHJhdGUgKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoc2NvZGVjLT5yZWdtYXAsIFNVTjRJX0NPREVDX0FEQ19GSUZPQywKKwkJCSAgIDcgPDwgU1VONElfQ09ERUNfQURDX0ZJRk9DX0FEQ19GUywKKwkJCSAgIGh3cmF0ZSA8PCBTVU40SV9DT0RFQ19BRENfRklGT0NfQURDX0ZTKTsKKworCS8qIFNldCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHdlIHdhbnQgdG8gdXNlICovCisJaWYgKHBhcmFtc19jaGFubmVscyhwYXJhbXMpID09IDEpCisJCXJlZ21hcF91cGRhdGVfYml0cyhzY29kZWMtPnJlZ21hcCwgU1VONElfQ09ERUNfQURDX0ZJRk9DLAorCQkJCSAgIEJJVChTVU40SV9DT0RFQ19BRENfRklGT0NfTU9OT19FTiksCisJCQkJICAgQklUKFNVTjRJX0NPREVDX0FEQ19GSUZPQ19NT05PX0VOKSk7CisJZWxzZQorCQlyZWdtYXBfdXBkYXRlX2JpdHMoc2NvZGVjLT5yZWdtYXAsIFNVTjRJX0NPREVDX0FEQ19GSUZPQywKKwkJCQkgICBCSVQoU1VONElfQ09ERUNfQURDX0ZJRk9DX01PTk9fRU4pLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1bjRpX2NvZGVjX2h3X3BhcmFtc19wbGF5YmFjayhzdHJ1Y3Qgc3VuNGlfY29kZWMgKnNjb2RlYywKKwkJCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkJICB1bnNpZ25lZCBpbnQgaHdyYXRlKQorewogCXUzMiB2YWw7CiAKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gIT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQotCWNsa19mcmVxID0gc3VuNGlfY29kZWNfZ2V0X21vZF9mcmVxKHBhcmFtcyk7Ci0JaWYgKCFjbGtfZnJlcSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBjbGtfc2V0X3JhdGUoc2NvZGVjLT5jbGtfbW9kdWxlLCBjbGtfZnJlcSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWh3cmF0ZSA9IHN1bjRpX2NvZGVjX2dldF9od19yYXRlKHBhcmFtcyk7Ci0JaWYgKGh3cmF0ZSA8IDApCi0JCXJldHVybiBod3JhdGU7Ci0KIAkvKiBTZXQgREFDIHNhbXBsZSByYXRlICovCiAJcmVnbWFwX3VwZGF0ZV9iaXRzKHNjb2RlYy0+cmVnbWFwLCBTVU40SV9DT0RFQ19EQUNfRklGT0MsCiAJCQkgICA3IDw8IFNVTjRJX0NPREVDX0RBQ19GSUZPQ19EQUNfRlMsCkBAIC0zNDQsNiArNDA3LDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3VuNGlfY29kZWNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzdW40aV9jb2RlYyAqc2NvZGVjID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHJ0ZC0+Y2FyZCk7CisJdW5zaWduZWQgbG9uZyBjbGtfZnJlcTsKKwlpbnQgcmV0LCBod3JhdGU7CisKKwljbGtfZnJlcSA9IHN1bjRpX2NvZGVjX2dldF9tb2RfZnJlcShwYXJhbXMpOworCWlmICghY2xrX2ZyZXEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gY2xrX3NldF9yYXRlKHNjb2RlYy0+Y2xrX21vZHVsZSwgY2xrX2ZyZXEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlod3JhdGUgPSBzdW40aV9jb2RlY19nZXRfaHdfcmF0ZShwYXJhbXMpOworCWlmIChod3JhdGUgPCAwKQorCQlyZXR1cm4gaHdyYXRlOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXJldHVybiBzdW40aV9jb2RlY19od19wYXJhbXNfcGxheWJhY2soc2NvZGVjLCBwYXJhbXMsCisJCQkJCQkgICAgICBod3JhdGUpOworCisJcmV0dXJuIHN1bjRpX2NvZGVjX2h3X3BhcmFtc19jYXB0dXJlKHNjb2RlYywgcGFyYW1zLAorCQkJCQkgICAgIGh3cmF0ZSk7Cit9CisKIHN0YXRpYyBpbnQgc3VuNGlfY29kZWNfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKQEAgLTM5NCw2ICs0ODYsMjAgQEAKIAkJCQkgIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAogCQkuc2lnX2JpdHMJPSAyNCwKIAl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUJPSAiQ29kZWMgQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4JPSAxLAorCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwkJLnJhdGVfbWluCT0gODAwMCwKKwkJLnJhdGVfbWF4CT0gMTkyMDAwLAorCQkucmF0ZXMJCT0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCB8CisJCQkJICBTTkRSVl9QQ01fUkFURV85NjAwMCB8CisJCQkJICBTTkRSVl9QQ01fUkFURV8xOTIwMDAgfAorCQkJCSAgU05EUlZfUENNX1JBVEVfS05PVCwKKwkJLmZvcm1hdHMJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQkJICBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkJLnNpZ19iaXRzCT0gMjQsCisJfSwKIH07CiAKIC8qKiogQ29kZWMgKioqLwpAQCAtNDA0LDcgKzUxMCw3IEBACiBzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoc3VuNGlfY29kZWNfcGFfdm9sdW1lX3NjYWxlLCAtNjMwMCwgMTAwLCAxKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN1bjRpX2NvZGVjX3dpZGdldHNbXSA9IHsKLQlTT0NfU0lOR0xFX1RMVigiUEEgVm9sdW1lIiwgU1VONElfQ09ERUNfREFDX0FDVEwsCisJU09DX1NJTkdMRV9UTFYoIlBvd2VyIEFtcGxpZmllciBWb2x1bWUiLCBTVU40SV9DT0RFQ19EQUNfQUNUTCwKIAkJICAgICAgIFNVTjRJX0NPREVDX0RBQ19BQ1RMX1BBX1ZPTCwgMHgzRiwgMCwKIAkJICAgICAgIHN1bjRpX2NvZGVjX3BhX3ZvbHVtZV9zY2FsZSksCiB9OwpAQCAtNDI4LDEyICs1MzQsMjMgQEAKIAkJCVNVTjRJX0NPREVDX0RBQ19BQ1RMX01JWFBBUywgMSwgMCksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgc3VuNGlfY29kZWNfZGFwbV93aWRnZXRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgc3VuNGlfY29kZWNfY29kZWNfZGFwbV93aWRnZXRzW10gPSB7CisJLyogRGlnaXRhbCBwYXJ0cyBvZiB0aGUgQURDcyAqLworCVNORF9TT0NfREFQTV9TVVBQTFkoIkFEQyIsIFNVTjRJX0NPREVDX0FEQ19GSUZPQywKKwkJCSAgICBTVU40SV9DT0RFQ19BRENfRklGT0NfRU5fQUQsIDAsCisJCQkgICAgTlVMTCwgMCksCisKIAkvKiBEaWdpdGFsIHBhcnRzIG9mIHRoZSBEQUNzICovCiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiREFDIiwgU1VONElfQ09ERUNfREFDX0RQQywKIAkJCSAgICBTVU40SV9DT0RFQ19EQUNfRFBDX0VOX0RBLCAwLAogCQkJICAgIE5VTEwsIDApLAogCisJLyogQW5hbG9nIHBhcnRzIG9mIHRoZSBBRENzICovCisJU05EX1NPQ19EQVBNX0FEQygiTGVmdCBBREMiLCAiQ29kZWMgQ2FwdHVyZSIsIFNVTjRJX0NPREVDX0FEQ19BQ1RMLAorCQkJIFNVTjRJX0NPREVDX0FEQ19BQ1RMX0FEQ19MX0VOLCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJSaWdodCBBREMiLCAiQ29kZWMgQ2FwdHVyZSIsIFNVTjRJX0NPREVDX0FEQ19BQ1RMLAorCQkJIFNVTjRJX0NPREVDX0FEQ19BQ1RMX0FEQ19SX0VOLCAwKSwKKwogCS8qIEFuYWxvZyBwYXJ0cyBvZiB0aGUgREFDcyAqLwogCVNORF9TT0NfREFQTV9EQUMoIkxlZnQgREFDIiwgIkNvZGVjIFBsYXliYWNrIiwgU1VONElfQ09ERUNfREFDX0FDVEwsCiAJCQkgU1VONElfQ09ERUNfREFDX0FDVExfREFDQUVOTCwgMCksCkBAIC00NTIsMjMgKzU2OSwzNSBAQAogCVNORF9TT0NfREFQTV9TVVBQTFkoIk1peGVyIEVuYWJsZSIsIFNVTjRJX0NPREVDX0RBQ19BQ1RMLAogCQkJICAgIFNVTjRJX0NPREVDX0RBQ19BQ1RMX01JWEVOLCAwLCBOVUxMLCAwKSwKIAotCS8qIFByZS1BbXBsaWZpZXIgKi8KLQlTTkRfU09DX0RBUE1fTUlYRVIoIlByZS1BbXBsaWZpZXIiLCBTVU40SV9DT0RFQ19BRENfQUNUTCwKKwkvKiBWTUlDICovCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiVk1JQyIsIFNVTjRJX0NPREVDX0FEQ19BQ1RMLAorCQkJICAgIFNVTjRJX0NPREVDX0FEQ19BQ1RMX1ZNSUNFTiwgMCwgTlVMTCwgMCksCisKKwkvKiBNaWMgUHJlLUFtcGxpZmllcnMgKi8KKwlTTkRfU09DX0RBUE1fUEdBKCJNSUMxIFByZS1BbXBsaWZpZXIiLCBTVU40SV9DT0RFQ19BRENfQUNUTCwKKwkJCSBTVU40SV9DT0RFQ19BRENfQUNUTF9QUkVHMUVOLCAwLCBOVUxMLCAwKSwKKworCS8qIFBvd2VyIEFtcGxpZmllciAqLworCVNORF9TT0NfREFQTV9NSVhFUigiUG93ZXIgQW1wbGlmaWVyIiwgU1VONElfQ09ERUNfQURDX0FDVEwsCiAJCQkgICBTVU40SV9DT0RFQ19BRENfQUNUTF9QQV9FTiwgMCwKIAkJCSAgIHN1bjRpX2NvZGVjX3BhX21peGVyX2NvbnRyb2xzLAogCQkJICAgQVJSQVlfU0laRShzdW40aV9jb2RlY19wYV9taXhlcl9jb250cm9scykpLAotCVNORF9TT0NfREFQTV9TV0lUQ0goIlByZS1BbXBsaWZpZXIgTXV0ZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwlTTkRfU09DX0RBUE1fU1dJVENIKCJQb3dlciBBbXBsaWZpZXIgTXV0ZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJCSAgICAmc3VuNGlfY29kZWNfcGFfbXV0ZSksCiAKKwlTTkRfU09DX0RBUE1fSU5QVVQoIk1pYzEiKSwKKwogCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQIFJpZ2h0IiksCiAJU05EX1NPQ19EQVBNX09VVFBVVCgiSFAgTGVmdCIpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgc3VuNGlfY29kZWNfZGFwbV9yb3V0ZXNbXSA9IHsKLQkvKiBMZWZ0IERBQyBSb3V0ZXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHN1bjRpX2NvZGVjX2NvZGVjX2RhcG1fcm91dGVzW10gPSB7CisJLyogTGVmdCBBREMgLyBEQUMgUm91dGVzICovCisJeyAiTGVmdCBBREMiLCBOVUxMLCAiQURDIiB9LAogCXsgIkxlZnQgREFDIiwgTlVMTCwgIkRBQyIgfSwKIAotCS8qIFJpZ2h0IERBQyBSb3V0ZXMgKi8KKwkvKiBSaWdodCBBREMgLyBEQUMgUm91dGVzICovCisJeyAiUmlnaHQgQURDIiwgTlVMTCwgIkFEQyIgfSwKIAl7ICJSaWdodCBEQUMiLCBOVUxMLCAiREFDIiB9LAogCiAJLyogUmlnaHQgTWl4ZXIgUm91dGVzICovCkBAIC00ODAsMjUgKzYwOSwzMSBAQAogCXsgIkxlZnQgTWl4ZXIiLCBOVUxMLCAiTWl4ZXIgRW5hYmxlIiB9LAogCXsgIkxlZnQgTWl4ZXIiLCAiTGVmdCBEQUMgUGxheWJhY2sgU3dpdGNoIiwgIkxlZnQgREFDIiB9LAogCi0JLyogUHJlLUFtcGxpZmllciBNaXhlciBSb3V0ZXMgKi8KLQl7ICJQcmUtQW1wbGlmaWVyIiwgIk1peGVyIFBsYXliYWNrIFN3aXRjaCIsICJMZWZ0IE1peGVyIiB9LAotCXsgIlByZS1BbXBsaWZpZXIiLCAiTWl4ZXIgUGxheWJhY2sgU3dpdGNoIiwgIlJpZ2h0IE1peGVyIiB9LAotCXsgIlByZS1BbXBsaWZpZXIiLCAiREFDIFBsYXliYWNrIFN3aXRjaCIsICJMZWZ0IERBQyIgfSwKLQl7ICJQcmUtQW1wbGlmaWVyIiwgIkRBQyBQbGF5YmFjayBTd2l0Y2giLCAiUmlnaHQgREFDIiB9LAorCS8qIFBvd2VyIEFtcGxpZmllciBSb3V0ZXMgKi8KKwl7ICJQb3dlciBBbXBsaWZpZXIiLCAiTWl4ZXIgUGxheWJhY2sgU3dpdGNoIiwgIkxlZnQgTWl4ZXIiIH0sCisJeyAiUG93ZXIgQW1wbGlmaWVyIiwgIk1peGVyIFBsYXliYWNrIFN3aXRjaCIsICJSaWdodCBNaXhlciIgfSwKKwl7ICJQb3dlciBBbXBsaWZpZXIiLCAiREFDIFBsYXliYWNrIFN3aXRjaCIsICJMZWZ0IERBQyIgfSwKKwl7ICJQb3dlciBBbXBsaWZpZXIiLCAiREFDIFBsYXliYWNrIFN3aXRjaCIsICJSaWdodCBEQUMiIH0sCiAKLQkvKiBQQSAtPiBIUCBwYXRoICovCi0JeyAiUHJlLUFtcGxpZmllciBNdXRlIiwgIlN3aXRjaCIsICJQcmUtQW1wbGlmaWVyIiB9LAotCXsgIkhQIFJpZ2h0IiwgTlVMTCwgIlByZS1BbXBsaWZpZXIgTXV0ZSIgfSwKLQl7ICJIUCBMZWZ0IiwgTlVMTCwgIlByZS1BbXBsaWZpZXIgTXV0ZSIgfSwKKwkvKiBIZWFkcGhvbmUgT3V0cHV0IFJvdXRlcyAqLworCXsgIlBvd2VyIEFtcGxpZmllciBNdXRlIiwgIlN3aXRjaCIsICJQb3dlciBBbXBsaWZpZXIiIH0sCisJeyAiSFAgUmlnaHQiLCBOVUxMLCAiUG93ZXIgQW1wbGlmaWVyIE11dGUiIH0sCisJeyAiSFAgTGVmdCIsIE5VTEwsICJQb3dlciBBbXBsaWZpZXIgTXV0ZSIgfSwKKworCS8qIE1pYzEgUm91dGVzICovCisJeyAiTGVmdCBBREMiLCBOVUxMLCAiTUlDMSBQcmUtQW1wbGlmaWVyIiB9LAorCXsgIlJpZ2h0IEFEQyIsIE5VTEwsICJNSUMxIFByZS1BbXBsaWZpZXIiIH0sCisJeyAiTUlDMSBQcmUtQW1wbGlmaWVyIiwgTlVMTCwgIk1pYzEifSwKKwl7ICJNaWMxIiwgTlVMTCwgIlZNSUMiIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHN1bjRpX2NvZGVjX2NvZGVjID0gewogCS5jb250cm9scwkJPSBzdW40aV9jb2RlY193aWRnZXRzLAogCS5udW1fY29udHJvbHMJCT0gQVJSQVlfU0laRShzdW40aV9jb2RlY193aWRnZXRzKSwKLQkuZGFwbV93aWRnZXRzCQk9IHN1bjRpX2NvZGVjX2RhcG1fd2lkZ2V0cywKLQkubnVtX2RhcG1fd2lkZ2V0cwk9IEFSUkFZX1NJWkUoc3VuNGlfY29kZWNfZGFwbV93aWRnZXRzKSwKLQkuZGFwbV9yb3V0ZXMJCT0gc3VuNGlfY29kZWNfZGFwbV9yb3V0ZXMsCi0JLm51bV9kYXBtX3JvdXRlcwk9IEFSUkFZX1NJWkUoc3VuNGlfY29kZWNfZGFwbV9yb3V0ZXMpLAorCS5kYXBtX3dpZGdldHMJCT0gc3VuNGlfY29kZWNfY29kZWNfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzCT0gQVJSQVlfU0laRShzdW40aV9jb2RlY19jb2RlY19kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcwkJPSBzdW40aV9jb2RlY19jb2RlY19kYXBtX3JvdXRlcywKKwkubnVtX2RhcG1fcm91dGVzCT0gQVJSQVlfU0laRShzdW40aV9jb2RlY19jb2RlY19kYXBtX3JvdXRlcyksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciBzdW40aV9jb2RlY19jb21wb25lbnQgPSB7CkBAIC01MTUsNyArNjUwLDcgQEAKIAlzdHJ1Y3Qgc3VuNGlfY29kZWMgKnNjb2RlYyA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKIAogCXNuZF9zb2NfZGFpX2luaXRfZG1hX2RhdGEoZGFpLCAmc2NvZGVjLT5wbGF5YmFja19kbWFfZGF0YSwKLQkJCQkgIE5VTEwpOworCQkJCSAgJnNjb2RlYy0+Y2FwdHVyZV9kbWFfZGF0YSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUzMSw2ICs2NjYsMTQgQEAKIAkJLmZvcm1hdHMJPSBTVU40SV9DT0RFQ19GT1JNQVRTLAogCQkuc2lnX2JpdHMJPSAyNCwKIAl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUJPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4JPSAxLAorCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwkJLnJhdGVzIAkJPSBTVU40SV9DT0RFQ19SQVRFUywKKwkJLmZvcm1hdHMgCT0gU1VONElfQ09ERUNfRk9STUFUUywKKwkJLnNpZ19iaXRzCT0gMjQsCisJIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgc3VuNGlfY29kZWNfcmVnbWFwX2NvbmZpZyA9IHsKQEAgLTU2OCw2ICs3MTEsMjcgQEAKIAlyZXR1cm4gbGluazsKIH07CiAKK3N0YXRpYyBpbnQgc3VuNGlfY29kZWNfc3BrX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHN1bjRpX2NvZGVjICpzY29kZWMgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEody0+ZGFwbS0+Y2FyZCk7CisKKwlpZiAoc2NvZGVjLT5ncGlvX3BhKQorCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoc2NvZGVjLT5ncGlvX3BhLAorCQkJCQkgISFTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgc3VuNGlfY29kZWNfY2FyZF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgc3VuNGlfY29kZWNfc3BrX2V2ZW50KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHN1bjRpX2NvZGVjX2NhcmRfZGFwbV9yb3V0ZXNbXSA9IHsKKwl7ICJTcGVha2VyIiwgTlVMTCwgIkhQIFJpZ2h0IiB9LAorCXsgIlNwZWFrZXIiLCBOVUxMLCAiSFAgTGVmdCIgfSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkICpzdW40aV9jb2RlY19jcmVhdGVfY2FyZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZDsKQEAgLTU4Miw2ICs3NDYsMTAgQEAKIAogCWNhcmQtPmRldgkJPSBkZXY7CiAJY2FyZC0+bmFtZQkJPSAic3VuNGktY29kZWMiOworCWNhcmQtPmRhcG1fd2lkZ2V0cwk9IHN1bjRpX2NvZGVjX2NhcmRfZGFwbV93aWRnZXRzOworCWNhcmQtPm51bV9kYXBtX3dpZGdldHMJPSBBUlJBWV9TSVpFKHN1bjRpX2NvZGVjX2NhcmRfZGFwbV93aWRnZXRzKTsKKwljYXJkLT5kYXBtX3JvdXRlcwk9IHN1bjRpX2NvZGVjX2NhcmRfZGFwbV9yb3V0ZXM7CisJY2FyZC0+bnVtX2RhcG1fcm91dGVzCT0gQVJSQVlfU0laRShzdW40aV9jb2RlY19jYXJkX2RhcG1fcm91dGVzKTsKIAogCXJldHVybiBjYXJkOwogfTsKQEAgLTYzMywxMSArODAxLDI1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXNjb2RlYy0+Z3Bpb19wYSA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKCZwZGV2LT5kZXYsICJhbGx3aW5uZXIscGEiLAorCQkJCQkJICBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKHNjb2RlYy0+Z3Bpb19wYSkpIHsKKwkJcmV0ID0gUFRSX0VSUihzY29kZWMtPmdwaW9fcGEpOworCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IHBhIGdwaW86ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwogCS8qIERNQSBjb25maWd1cmF0aW9uIGZvciBUWCBGSUZPICovCiAJc2NvZGVjLT5wbGF5YmFja19kbWFfZGF0YS5hZGRyID0gcmVzLT5zdGFydCArIFNVTjRJX0NPREVDX0RBQ19UWERBVEE7CiAJc2NvZGVjLT5wbGF5YmFja19kbWFfZGF0YS5tYXhidXJzdCA9IDQ7CiAJc2NvZGVjLT5wbGF5YmFja19kbWFfZGF0YS5hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVM7CiAKKwkvKiBETUEgY29uZmlndXJhdGlvbiBmb3IgUlggRklGTyAqLworCXNjb2RlYy0+Y2FwdHVyZV9kbWFfZGF0YS5hZGRyID0gcmVzLT5zdGFydCArIFNVTjRJX0NPREVDX0FEQ19SWERBVEE7CisJc2NvZGVjLT5jYXB0dXJlX2RtYV9kYXRhLm1heGJ1cnN0ID0gNDsKKwlzY29kZWMtPmNhcHR1cmVfZG1hX2RhdGEuYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOworCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmcGRldi0+ZGV2LCAmc3VuNGlfY29kZWNfY29kZWMsCiAJCQkJICAgICAmc3VuNGlfY29kZWNfZGFpLCAxKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvdGVncmEvdGVncmFfYWxjNTYzMi5jIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX2FsYzU2MzIuYwppbmRleCBiYTI3MmUyLi5kZWI1OTdmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvdGVncmEvdGVncmFfYWxjNTYzMi5jCisrKyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9hbGM1NjMyLmMKQEAgLTEwMSwxMiArMTAxLDE2IEBACiAKIHN0YXRpYyBpbnQgdGVncmFfYWxjNTYzMl9hc29jX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCB0ZWdyYV9hbGM1NjMyICptYWNoaW5lID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHJ0ZC0+Y2FyZCk7CiAKLQlzbmRfc29jX2NhcmRfamFja19uZXcocnRkLT5jYXJkLCAiSGVhZHNldCBKYWNrIiwgU05EX0pBQ0tfSEVBRFNFVCwKLQkJCSAgICAgICZ0ZWdyYV9hbGM1NjMyX2hzX2phY2ssCi0JCQkgICAgICB0ZWdyYV9hbGM1NjMyX2hzX2phY2tfcGlucywKLQkJCSAgICAgIEFSUkFZX1NJWkUodGVncmFfYWxjNTYzMl9oc19qYWNrX3BpbnMpKTsKKwlyZXQgPSBzbmRfc29jX2NhcmRfamFja19uZXcocnRkLT5jYXJkLCAiSGVhZHNldCBKYWNrIiwKKwkJCQkgICAgU05EX0pBQ0tfSEVBRFNFVCwKKwkJCQkgICAgJnRlZ3JhX2FsYzU2MzJfaHNfamFjaywKKwkJCQkgICAgdGVncmFfYWxjNTYzMl9oc19qYWNrX3BpbnMsCisJCQkJICAgIEFSUkFZX1NJWkUodGVncmFfYWxjNTYzMl9oc19qYWNrX3BpbnMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKGdwaW9faXNfdmFsaWQobWFjaGluZS0+Z3Bpb19ocF9kZXQpKSB7CiAJCXRlZ3JhX2FsYzU2MzJfaHBfamFja19ncGlvLmdwaW8gPSBtYWNoaW5lLT5ncGlvX2hwX2RldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV93bTg5MDMuYyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV93bTg5MDMuYwppbmRleCAyMTYwNDAwLi5lNDg1Mjc4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvdGVncmEvdGVncmFfd204OTAzLmMKKysrIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX3dtODkwMy5jCkBAIC0xOTksNyArMTk5LDggQEAKIAogc3RhdGljIGludCB0ZWdyYV93bTg5MDNfcmVtb3ZlKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9ICYoY2FyZC0+cnRkWzBdKTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0KKwkJc25kX3NvY19nZXRfcGNtX3J1bnRpbWUoY2FyZCwgY2FyZC0+ZGFpX2xpbmtbMF0ubmFtZSk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXN0cnVjdCB0ZWdyYV93bTg5MDMgKm1hY2hpbmUgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWlkaS5jIGIvc291bmQvdXNiL21pZGkuYwppbmRleCA3NjYxNjE2Li41YjRjNThjIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWlkaS5jCisrKyBiL3NvdW5kL3VzYi9taWRpLmMKQEAgLTE3NCw2ICsxNzQsOCBAQAogCQl1OCBydW5uaW5nX3N0YXR1c19sZW5ndGg7CiAJfSBwb3J0c1sweDEwXTsKIAl1OCBzZWVuX2Y1OworCWJvb2wgaW5fc3lzZXg7CisJdTggbGFzdF9jaW47CiAJdTggZXJyb3JfcmVzdWJtaXQ7CiAJaW50IGN1cnJlbnRfcG9ydDsKIH07CkBAIC00NjgsNiArNDcwLDM5IEBACiB9CiAKIC8qCisgKiBRaW5IZW5nIENIMzQ1IGlzIGJ1Z2d5OiBldmVyeSBzZWNvbmQgcGFja2V0IGluc2lkZSBhIFN5c0V4IGhhcyBub3QgQ0lOIDQKKyAqIGJ1dCB0aGUgcHJldmlvdXNseSBzZWVuIENJTiwgYnV0IHN0aWxsIHdpdGggdGhyZWUgZGF0YSBieXRlcy4KKyAqLworc3RhdGljIHZvaWQgY2gzNDVfYnJva2VuX3N5c2V4X2lucHV0KHN0cnVjdCBzbmRfdXNiX21pZGlfaW5fZW5kcG9pbnQgKmVwLAorCQkJCSAgICAgdWludDhfdCAqYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY2luLCBsZW5ndGg7CisKKwlmb3IgKGkgPSAwOyBpICsgMyA8IGJ1ZmZlcl9sZW5ndGg7IGkgKz0gNCkgeworCQlpZiAoYnVmZmVyW2ldID09IDAgJiYgaSA+IDApCisJCQlicmVhazsKKwkJY2luID0gYnVmZmVyW2ldICYgMHgwZjsKKwkJaWYgKGVwLT5pbl9zeXNleCAmJgorCQkgICAgY2luID09IGVwLT5sYXN0X2NpbiAmJgorCQkgICAgKGJ1ZmZlcltpICsgMSArIChjaW4gPT0gMHg2KV0gJiAweDgwKSA9PSAwKQorCQkJY2luID0gMHg0OworI2lmIDAKKwkJaWYgKGJ1ZmZlcltpICsgMV0gPT0gMHg5MCkgeworCQkJLyoKKwkJCSAqIEVpdGhlciBhIGNvcnJ1cHRlZCBydW5uaW5nIHN0YXR1cyBvciBhIHJlYWwgbm90ZS1vbgorCQkJICogbWVzc2FnZTsgaW1wb3NzaWJsZSB0byBkZXRlY3QgcmVsaWFibHkuCisJCQkgKi8KKwkJfQorI2VuZGlmCisJCWxlbmd0aCA9IHNuZF91c2JtaWRpX2Npbl9sZW5ndGhbY2luXTsKKwkJc25kX3VzYm1pZGlfaW5wdXRfZGF0YShlcCwgMCwgJmJ1ZmZlcltpICsgMV0sIGxlbmd0aCk7CisJCWVwLT5pbl9zeXNleCA9IGNpbiA9PSAweDQ7CisJCWlmICghZXAtPmluX3N5c2V4KQorCQkJZXAtPmxhc3RfY2luID0gY2luOworCX0KK30KKworLyoKICAqIENNRSBwcm90b2NvbDogbGlrZSB0aGUgc3RhbmRhcmQgcHJvdG9jb2wsIGJ1dCBTeXNFeCBjb21tYW5kcyBhcmUgc2VudCBhcyBhCiAgKiBzaW5nbGUgVVNCIHBhY2tldCBwcmVjZWRlZCBieSBhIDB4MEYgYnl0ZS4KICAqLwpAQCAtNjYwLDYgKzY5NSwxMiBAQAogCS5vdXRwdXRfcGFja2V0ID0gc25kX3VzYm1pZGlfb3V0cHV0X3N0YW5kYXJkX3BhY2tldCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdXNiX3Byb3RvY29sX29wcyBzbmRfdXNibWlkaV9jaDM0NV9icm9rZW5fc3lzZXhfb3BzID0geworCS5pbnB1dCA9IGNoMzQ1X2Jyb2tlbl9zeXNleF9pbnB1dCwKKwkub3V0cHV0ID0gc25kX3VzYm1pZGlfc3RhbmRhcmRfb3V0cHV0LAorCS5vdXRwdXRfcGFja2V0ID0gc25kX3VzYm1pZGlfb3V0cHV0X3N0YW5kYXJkX3BhY2tldCwKK307CisKIC8qCiAgKiBBS0FJIE1QRDE2IHByb3RvY29sOgogICoKQEAgLTEzNDEsNiArMTM4Miw3IEBACiAJCSAqIFZhcmlvdXMgY2hpcHMgZGVjbGFyZSBhIHBhY2tldCBzaXplIGxhcmdlciB0aGFuIDQgYnl0ZXMsIGJ1dAogCQkgKiBkbyBub3QgYWN0dWFsbHkgd29yayB3aXRoIGxhcmdlciBwYWNrZXRzOgogCQkgKi8KKwljYXNlIFVTQl9JRCgweDBhNjcsIDB4NTAxMSk6IC8qIE1lZGVsaSBERDMwNSAqLwogCWNhc2UgVVNCX0lEKDB4MGE5MiwgMHgxMDIwKTogLyogRVNJIE00VSAqLwogCWNhc2UgVVNCX0lEKDB4MTQzMCwgMHg0NzRiKTogLyogUmVkT2N0YW5lIEdIIE1JREkgSU5URVJGQUNFICovCiAJY2FzZSBVU0JfSUQoMHgxNWNhLCAweDAxMDEpOiAvKiBUZXh0ZWNoIFVTQiBNaWRpIENhYmxlICovCkBAIC0yMzc4LDYgKzI0MjAsMTAgQEAKIAogCQllcnIgPSBzbmRfdXNibWlkaV9kZXRlY3RfcGVyX3BvcnRfZW5kcG9pbnRzKHVtaWRpLCBlbmRwb2ludHMpOwogCQlicmVhazsKKwljYXNlIFFVSVJLX01JRElfQ0gzNDU6CisJCXVtaWRpLT51c2JfcHJvdG9jb2xfb3BzID0gJnNuZF91c2JtaWRpX2NoMzQ1X2Jyb2tlbl9zeXNleF9vcHM7CisJCWVyciA9IHNuZF91c2JtaWRpX2RldGVjdF9wZXJfcG9ydF9lbmRwb2ludHModW1pZGksIGVuZHBvaW50cyk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJnVtaWRpLT5kZXYtPmRldiwgImludmFsaWQgcXVpcmsgdHlwZSAlZFxuIiwKIAkJCXF1aXJrLT50eXBlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlci5jIGIvc291bmQvdXNiL21peGVyLmMKaW5kZXggZjQ5NGRjZS4uNGY4NTc1NyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21peGVyLmMKKysrIGIvc291bmQvdXNiL21peGVyLmMKQEAgLTEzNTQsNiArMTM1NCw4IEBACiAJCX0KIAl9CiAKKwlzbmRfdXNiX21peGVyX2Z1X2FwcGx5X3F1aXJrKHN0YXRlLT5taXhlciwgY3ZhbCwgdW5pdGlkLCBrY3RsKTsKKwogCXJhbmdlID0gKGN2YWwtPm1heCAtIGN2YWwtPm1pbikgLyBjdmFsLT5yZXM7CiAJLyoKIAkgKiBBcmUgdGhlcmUgZGV2aWNlcyB3aXRoIHZvbHVtZSByYW5nZSBtb3JlIHRoYW4gMjU1PyBJIHVzZSBhIGJpdCBtb3JlCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWl4ZXJfbWFwcy5jIGIvc291bmQvdXNiL21peGVyX21hcHMuYwppbmRleCA2YTgwM2VmLi5kZGNhNjU0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWl4ZXJfbWFwcy5jCisrKyBiL3NvdW5kL3VzYi9taXhlcl9tYXBzLmMKQEAgLTM0OCwxMyArMzQ4LDYgQEAKIAl7IDAgfQkvKiB0ZXJtaW5hdG9yICovCiB9OwogCi0vKiBEcmFnb25mbHkgREFDIDEuMiwgdGhlIGRCIGNvbnZlcnNpb24gZmFjdG9yIGlzIDEgaW5zdGVhZCBvZiAyNTYgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNibWl4X2RCX21hcCBkcmFnb25mbHlfMV8yX2RCID0gezAsIDUwMDB9Owotc3RhdGljIHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgZHJhZ29uZmx5XzFfMl9tYXBbXSA9IHsKLQl7IDcsIE5VTEwsIC5kQiA9ICZkcmFnb25mbHlfMV8yX2RCIH0sCi0JeyAwIH0JLyogdGVybWluYXRvciAqLwotfTsKLQogLyoKICAqIENvbnRyb2wgbWFwIGVudHJpZXMKICAqLwpAQCAtNDcwLDExICs0NjMsNiBAQAogCQkuaWQgPSBVU0JfSUQoMHgwNWE3LCAweDEwMjApLAogCQkubWFwID0gYm9zZV9jb21wYW5pb241X21hcCwKIAl9LAotCXsKLQkJLyogRHJhZ29uZmx5IERBQyAxLjIgKi8KLQkJLmlkID0gVVNCX0lEKDB4MjFiNCwgMHgwMDgxKSwKLQkJLm1hcCA9IGRyYWdvbmZseV8xXzJfbWFwLAotCX0sCiAJeyAwIH0gLyogdGVybWluYXRvciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyX3F1aXJrcy5jIGIvc291bmQvdXNiL21peGVyX3F1aXJrcy5jCmluZGV4IGZlOTExODQuLjBjZTg4OGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuYworKysgYi9zb3VuZC91c2IvbWl4ZXJfcXVpcmtzLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvaHdkZXAuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlICJ1c2JhdWRpby5oIgogI2luY2x1ZGUgIm1peGVyLmgiCkBAIC0xODI1LDMgKzE4MjYsMzkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNuZF9kcmFnb25mbHlfcXVpcmtfZGJfc2NhbGUoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyLAorCQkJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCkKK3sKKwkvKiBBcHByb3hpbWF0aW9uIHVzaW5nIDEwIHJhbmdlcyBiYXNlZCBvbiBvdXRwdXQgbWVhc3VyZW1lbnQgb24gaHcgdjEuMi4KKwkgKiBUaGlzIHNlZW1zIGNsb3NlIHRvIHRoZSBjdWJpYyBtYXBwaW5nIGUuZy4gYWxzYW1peGVyIHVzZXMuICovCisJc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1JBTkdFKHNjYWxlLAorCQkgMCwgIDEsIFRMVl9EQl9NSU5NQVhfSVRFTSgtNTMwMCwgLTQ5NzApLAorCQkgMiwgIDUsIFRMVl9EQl9NSU5NQVhfSVRFTSgtNDcxMCwgLTQxNjApLAorCQkgNiwgIDcsIFRMVl9EQl9NSU5NQVhfSVRFTSgtMzg4NCwgLTM3MTApLAorCQkgOCwgMTQsIFRMVl9EQl9NSU5NQVhfSVRFTSgtMzQ0MywgLTI1NjApLAorCQkxNSwgMTYsIFRMVl9EQl9NSU5NQVhfSVRFTSgtMjQ3NSwgLTIzMjQpLAorCQkxNywgMTksIFRMVl9EQl9NSU5NQVhfSVRFTSgtMjIyOCwgLTIwMzEpLAorCQkyMCwgMjYsIFRMVl9EQl9NSU5NQVhfSVRFTSgtMTkxMCwgLTEzOTMpLAorCQkyNywgMzEsIFRMVl9EQl9NSU5NQVhfSVRFTSgtMTMyMiwgLTEwMzIpLAorCQkzMiwgNDAsIFRMVl9EQl9NSU5NQVhfSVRFTSgtOTY4LCAtNDkwKSwKKwkJNDEsIDUwLCBUTFZfREJfTUlOTUFYX0lURU0oLTQ0MSwgMCksCisJKTsKKworCXVzYl9hdWRpb19pbmZvKG1peGVyLT5jaGlwLCAiYXBwbHlpbmcgRHJhZ29uRmx5IGRCIHNjYWxlIHF1aXJrXG4iKTsKKwlrY3RsLT50bHYucCA9IHNjYWxlOworCWtjdGwtPnZkWzBdLmFjY2VzcyB8PSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQ7CisJa2N0bC0+dmRbMF0uYWNjZXNzICY9IH5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NBTExCQUNLOworfQorCit2b2lkIHNuZF91c2JfbWl4ZXJfZnVfYXBwbHlfcXVpcmsoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyLAorCQkJCSAgc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCB1bml0aWQsCisJCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsKQoreworCXN3aXRjaCAobWl4ZXItPmNoaXAtPnVzYl9pZCkgeworCWNhc2UgVVNCX0lEKDB4MjFiNCwgMHgwMDgxKTogLyogQXVkaW9RdWVzdCBEcmFnb25GbHkgKi8KKwkJaWYgKHVuaXRpZCA9PSA3ICYmIGN2YWwtPm1pbiA9PSAwICYmIGN2YWwtPm1heCA9PSA1MCkKKwkJCXNuZF9kcmFnb25mbHlfcXVpcmtfZGJfc2NhbGUobWl4ZXIsIGtjdGwpOworCQlicmVhazsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuaCBiL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuaAppbmRleCBiZGJmYWIwLi4xNzdjMzI5IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWl4ZXJfcXVpcmtzLmgKKysrIGIvc291bmQvdXNiL21peGVyX3F1aXJrcy5oCkBAIC05LDUgKzksOSBAQAogdm9pZCBzbmRfdXNiX21peGVyX3JjX21lbW9yeV9jaGFuZ2Uoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyLAogCQkJCSAgICBpbnQgdW5pdGlkKTsKIAordm9pZCBzbmRfdXNiX21peGVyX2Z1X2FwcGx5X3F1aXJrKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciwKKwkJCQkgIHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgdW5pdGlkLAorCQkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCk7CisKICNlbmRpZiAvKiBTTkRfVVNCX01JWEVSX1FVSVJLU19IICovCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaCBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaAppbmRleCAxYTFlMmU0Li5jNjBhNzc2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKKysrIGIvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCkBAIC0yODI5LDYgKzI4MjksMTcgQEAKIAkuaWRQcm9kdWN0ID0gMHgxMDIwLAogfSwKIAorLyogUWluSGVuZyBkZXZpY2VzICovCit7CisJVVNCX0RFVklDRSgweDFhODYsIDB4NzUyZCksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIlFpbkhlbmciLAorCQkucHJvZHVjdF9uYW1lID0gIkNIMzQ1IiwKKwkJLmlmbnVtID0gMSwKKwkJLnR5cGUgPSBRVUlSS19NSURJX0NIMzQ1CisJfQorfSwKKwogLyogS2VpdGhNY01pbGxlbiBTdHJpbmdwb3J0ICovCiB7CiAJVVNCX0RFVklDRSgweDFmMzgsIDB4MDAwMSksCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLmMgYi9zb3VuZC91c2IvcXVpcmtzLmMKaW5kZXggNWNhODBlNy4uYjZjMGM4ZSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy5jCisrKyBiL3NvdW5kL3VzYi9xdWlya3MuYwpAQCAtNTM4LDYgKzUzOCw3IEBACiAJCVtRVUlSS19NSURJX0NNRV0gPSBjcmVhdGVfYW55X21pZGlfcXVpcmssCiAJCVtRVUlSS19NSURJX0FLQUldID0gY3JlYXRlX2FueV9taWRpX3F1aXJrLAogCQlbUVVJUktfTUlESV9GVERJXSA9IGNyZWF0ZV9hbnlfbWlkaV9xdWlyaywKKwkJW1FVSVJLX01JRElfQ0gzNDVdID0gY3JlYXRlX2FueV9taWRpX3F1aXJrLAogCQlbUVVJUktfQVVESU9fU1RBTkRBUkRfSU5URVJGQUNFXSA9IGNyZWF0ZV9zdGFuZGFyZF9hdWRpb19xdWlyaywKIAkJW1FVSVJLX0FVRElPX0ZJWEVEX0VORFBPSU5UXSA9IGNyZWF0ZV9maXhlZF9zdHJlYW1fcXVpcmssCiAJCVtRVUlSS19BVURJT19FRElST0xfVUFYWF0gPSBjcmVhdGVfdWF4eF9xdWlyaywKQEAgLTExMjQsNiArMTEyNSw3IEBACiAJY2FzZSBVU0JfSUQoMHgwNDVFLCAweDA3NzkpOiAvKiBNUyBMaWZlY2FtIEhELTMwMDAgKi8KIAljYXNlIFVTQl9JRCgweDA0RDgsIDB4RkVFQSk6IC8qIEJlbmNobWFyayBEQUMxIFByZSAqLwogCWNhc2UgVVNCX0lEKDB4MDc0RCwgMHgzNTUzKTogLyogT3V0bGF3IFJSMjE1MCAoTWljcm9uYXMgVUFDMzU1M0IpICovCisJY2FzZSBVU0JfSUQoMHgyMUI0LCAweDAwODEpOiAvKiBBdWRpb1F1ZXN0IERyYWdvbkZseSAqLwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmggYi9zb3VuZC91c2IvdXNiYXVkaW8uaAppbmRleCAxNWExMjcxLi5iNjY1ZDg1IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uaAorKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uaApAQCAtOTUsNiArOTUsNyBAQAogCVFVSVJLX01JRElfQUtBSSwKIAlRVUlSS19NSURJX1VTMTIyTCwKIAlRVUlSS19NSURJX0ZUREksCisJUVVJUktfTUlESV9DSDM0NSwKIAlRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0UsCiAJUVVJUktfQVVESU9fRklYRURfRU5EUE9JTlQsCiAJUVVJUktfQVVESU9fRURJUk9MX1VBWFgsCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZSBiL3Rvb2xzL01ha2VmaWxlCmluZGV4IGQ2ZjMwN2QuLjdkYzgyMGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL01ha2VmaWxlCisrKyBiL3Rvb2xzL01ha2VmaWxlCkBAIC0zMiw2ICszMiwxMCBAQAogCUBlY2hvICcgIGZyb20gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gYnVpbGQgYW5kIGluc3RhbGwgb25lIG9mJwogCUBlY2hvICcgIHRoZSB0b29scyBhYm92ZScKIAlAZWNobyAnJworCUBlY2hvICcgICQkIG1ha2UgdG9vbHMvYWxsJworCUBlY2hvICcnCisJQGVjaG8gJyAgYnVpbGRzIGFsbCB0b29scy4nCisJQGVjaG8gJycKIAlAZWNobyAnICAkJCBtYWtlIHRvb2xzL2luc3RhbGwnCiAJQGVjaG8gJycKIAlAZWNobyAnICBpbnN0YWxscyBhbGwgdG9vbHMuJwpAQCAtNzcsNiArODEsMTEgQEAKIGZyZWVmYWxsOiBGT1JDRQogCSQoY2FsbCBkZXNjZW5kLGxhcHRvcC8kQCkKIAorYWxsOiBhY3BpIGNncm91cCBjcHVwb3dlciBodiBmaXJld2lyZSBsZ3Vlc3QgXAorCQlwZXJmIHNlbGZ0ZXN0cyB0dXJib3N0YXQgdXNiIFwKKwkJdmlydGlvIHZtIG5ldCB4ODZfZW5lcmd5X3BlcmZfcG9saWN5IFwKKwkJdG1vbiBmcmVlZmFsbAorCiBhY3BpX2luc3RhbGw6CiAJJChjYWxsIGRlc2NlbmQscG93ZXIvJChAOl9pbnN0YWxsPSksaW5zdGFsbCkKIApAQCAtMTAxLDcgKzExMCw3IEBACiBpbnN0YWxsOiBhY3BpX2luc3RhbGwgY2dyb3VwX2luc3RhbGwgY3B1cG93ZXJfaW5zdGFsbCBodl9pbnN0YWxsIGZpcmV3aXJlX2luc3RhbGwgbGd1ZXN0X2luc3RhbGwgXAogCQlwZXJmX2luc3RhbGwgc2VsZnRlc3RzX2luc3RhbGwgdHVyYm9zdGF0X2luc3RhbGwgdXNiX2luc3RhbGwgXAogCQl2aXJ0aW9faW5zdGFsbCB2bV9pbnN0YWxsIG5ldF9pbnN0YWxsIHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3lfaW5zdGFsbCBcCi0JCXRtb24gZnJlZWZhbGxfaW5zdGFsbAorCQl0bW9uX2luc3RhbGwgZnJlZWZhbGxfaW5zdGFsbAogCiBhY3BpX2NsZWFuOgogCSQoY2FsbCBkZXNjZW5kLHBvd2VyL2FjcGksY2xlYW4pCmRpZmYgLS1naXQgYS90b29scy9uZXQvTWFrZWZpbGUgYi90b29scy9uZXQvTWFrZWZpbGUKaW5kZXggZWU1NzdlYS4uZGRmODg4MCAxMDA2NDQKLS0tIGEvdG9vbHMvbmV0L01ha2VmaWxlCisrKyBiL3Rvb2xzL25ldC9NYWtlZmlsZQpAQCAtNCw2ICs0LDkgQEAKIExFWCA9IGZsZXgKIFlBQ0MgPSBiaXNvbgogCitDRkxBR1MgKz0gLVdhbGwgLU8yCitDRkxBR1MgKz0gLURfX0VYUE9SVEVEX0hFQURFUlNfXyAtSS4uLy4uL2luY2x1ZGUvdWFwaSAtSS4uLy4uL2luY2x1ZGUKKwogJS55YWNjLmM6ICUueQogCSQoWUFDQykgLW8gJEAgLWQgJDwKIApAQCAtMTIsMTUgKzE1LDEzIEBACiAKIGFsbCA6IGJwZl9qaXRfZGlzYXNtIGJwZl9kYmcgYnBmX2FzbQogCi1icGZfaml0X2Rpc2FzbSA6IENGTEFHUyA9IC1XYWxsIC1PMiAtRFBBQ0tBR0U9J2JwZl9qaXRfZGlzYXNtJworYnBmX2ppdF9kaXNhc20gOiBDRkxBR1MgKz0gLURQQUNLQUdFPSdicGZfaml0X2Rpc2FzbScKIGJwZl9qaXRfZGlzYXNtIDogTERMSUJTID0gLWxvcGNvZGVzIC1sYmZkIC1sZGwKIGJwZl9qaXRfZGlzYXNtIDogYnBmX2ppdF9kaXNhc20ubwogCi1icGZfZGJnIDogQ0ZMQUdTID0gLVdhbGwgLU8yCiBicGZfZGJnIDogTERMSUJTID0gLWxyZWFkbGluZQogYnBmX2RiZyA6IGJwZl9kYmcubwogCi1icGZfYXNtIDogQ0ZMQUdTID0gLVdhbGwgLU8yIC1JLgogYnBmX2FzbSA6IExETElCUyA9CiBicGZfYXNtIDogYnBmX2FzbS5vIGJwZl9leHAueWFjYy5vIGJwZl9leHAubGV4Lm8KIGJwZl9leHAubGV4Lm8gOiBicGZfZXhwLnlhY2MuYwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jCmluZGV4IDBhOTQ1ZDIuLjk5ZDEyN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1pbmplY3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4taW5qZWN0LmMKQEAgLTY3NSw2ICs2NzUsNyBAQAogCQkJLmZvcmsJCT0gcGVyZl9ldmVudF9fcmVwaXBlLAogCQkJLmV4aXQJCT0gcGVyZl9ldmVudF9fcmVwaXBlLAogCQkJLmxvc3QJCT0gcGVyZl9ldmVudF9fcmVwaXBlLAorCQkJLmxvc3Rfc2FtcGxlcwk9IHBlcmZfZXZlbnRfX3JlcGlwZSwKIAkJCS5hdXgJCT0gcGVyZl9ldmVudF9fcmVwaXBlLAogCQkJLml0cmFjZV9zdGFydAk9IHBlcmZfZXZlbnRfX3JlcGlwZSwKIAkJCS5jb250ZXh0X3N3aXRjaAk9IHBlcmZfZXZlbnRfX3JlcGlwZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCAyODUzYWQyLi5mMjU2ZmFjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC00NCw3ICs0NCw3IEBACiBzdHJ1Y3QgcmVwb3J0IHsKIAlzdHJ1Y3QgcGVyZl90b29sCXRvb2w7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbgkqc2Vzc2lvbjsKLQlib29sCQkJZm9yY2UsIHVzZV90dWksIHVzZV9ndGssIHVzZV9zdGRpbzsKKwlib29sCQkJdXNlX3R1aSwgdXNlX2d0aywgdXNlX3N0ZGlvOwogCWJvb2wJCQloaWRlX3VucmVzb2x2ZWQ7CiAJYm9vbAkJCWRvbnRfdXNlX2NhbGxjaGFpbnM7CiAJYm9vbAkJCXNob3dfZnVsbF9pbmZvOwpAQCAtNjc4LDcgKzY3OCw3IEBACiAJCSAgICJmaWxlIiwgInZtbGludXggcGF0aG5hbWUiKSwKIAlPUFRfU1RSSU5HKDAsICJrYWxsc3ltcyIsICZzeW1ib2xfY29uZi5rYWxsc3ltc19uYW1lLAogCQkgICAiZmlsZSIsICJrYWxsc3ltcyBwYXRobmFtZSIpLAotCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJnJlcG9ydC5mb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLAorCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJnN5bWJvbF9jb25mLmZvcmNlLCAiZG9uJ3QgY29tcGxhaW4sIGRvIGl0IiksCiAJT1BUX0JPT0xFQU4oJ20nLCAibW9kdWxlcyIsICZzeW1ib2xfY29uZi51c2VfbW9kdWxlcywKIAkJICAgICJsb2FkIG1vZHVsZSBzeW1ib2xzIC0gV0FSTklORzogdXNlIG9ubHkgd2l0aCAtayBhbmQgTElWRSBrZXJuZWwiKSwKIAlPUFRfQk9PTEVBTignbicsICJzaG93LW5yLXNhbXBsZXMiLCAmc3ltYm9sX2NvbmYuc2hvd19ucl9zYW1wbGVzLApAQCAtODMyLDcgKzgzMiw3IEBACiAJfQogCiAJZmlsZS5wYXRoICA9IGlucHV0X25hbWU7Ci0JZmlsZS5mb3JjZSA9IHJlcG9ydC5mb3JjZTsKKwlmaWxlLmZvcmNlID0gc3ltYm9sX2NvbmYuZm9yY2U7CiAKIHJlcGVhdDoKIAlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoJmZpbGUsIGZhbHNlLCAmcmVwb3J0LnRvb2wpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jIGIvdG9vbHMvcGVyZi91aS9icm93c2Vycy9oaXN0cy5jCmluZGV4IGU1YWZiODkuLmZhOWViOTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvaGlzdHMuYworKysgYi90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMKQEAgLTE0MzAsNyArMTQzMCw2IEBACiAKIHN0cnVjdCBwb3B1cF9hY3Rpb24gewogCXN0cnVjdCB0aHJlYWQgCQkqdGhyZWFkOwotCXN0cnVjdCBkc28JCSpkc287CiAJc3RydWN0IG1hcF9zeW1ib2wgCW1zOwogCWludAkJCXNvY2tldDsKIApAQCAtMTU2NSw3ICsxNTY0LDYgQEAKIAkJcmV0dXJuIDA7CiAKIAlhY3QtPm1zLm1hcCA9IG1hcDsKLQlhY3QtPmRzbyA9IG1hcC0+ZHNvOwogCWFjdC0+Zm4gPSBkb196b29tX2RzbzsKIAlyZXR1cm4gMTsKIH0KQEAgLTE4MjcsNyArMTgyNSw2IEBACiAKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBOVUxMOwotCQlzdHJ1Y3QgZHNvICpkc28gPSBOVUxMOwogCQlzdHJ1Y3QgbWFwICptYXAgPSBOVUxMOwogCQlpbnQgY2hvaWNlID0gMDsKIAkJaW50IHNvY2tlZF9pZCA9IC0xOwpAQCAtMTgzOSw4ICsxODM2LDYgQEAKIAkJaWYgKGJyb3dzZXItPmhlX3NlbGVjdGlvbiAhPSBOVUxMKSB7CiAJCQl0aHJlYWQgPSBoaXN0X2Jyb3dzZXJfX3NlbGVjdGVkX3RocmVhZChicm93c2VyKTsKIAkJCW1hcCA9IGJyb3dzZXItPnNlbGVjdGlvbi0+bWFwOwotCQkJaWYgKG1hcCkKLQkJCQlkc28gPSBtYXAtPmRzbzsKIAkJCXNvY2tlZF9pZCA9IGJyb3dzZXItPmhlX3NlbGVjdGlvbi0+c29ja2V0OwogCQl9CiAJCXN3aXRjaCAoa2V5KSB7CkBAIC0xODc0LDcgKzE4NjksNyBAQAogCQkJaGlzdF9icm93c2VyX19kdW1wKGJyb3dzZXIpOwogCQkJY29udGludWU7CiAJCWNhc2UgJ2QnOgotCQkJYWN0aW9ucy0+ZHNvID0gZHNvOworCQkJYWN0aW9ucy0+bXMubWFwID0gbWFwOwogCQkJZG9fem9vbV9kc28oYnJvd3NlciwgYWN0aW9ucyk7CiAJCQljb250aW51ZTsKIAkJY2FzZSAnVic6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jCmluZGV4IGQ5MDk0NTkuLjIxN2I1YTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jCkBAIC03Niw2ICs3Niw3IEBACiAJLmV4aXQJPSBwZXJmX2V2ZW50X19leGl0X2RlbF90aHJlYWQsCiAJLmF0dHIJCSA9IHBlcmZfZXZlbnRfX3Byb2Nlc3NfYXR0ciwKIAkuYnVpbGRfaWQJID0gcGVyZl9ldmVudF9fcHJvY2Vzc19idWlsZF9pZCwKKwkub3JkZXJlZF9ldmVudHMJID0gdHJ1ZSwKIH07CiAKIGludCBidWlsZF9pZF9fc3ByaW50Zihjb25zdCB1OCAqYnVpbGRfaWQsIGludCBsZW4sIGNoYXIgKmJmKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Rzby5jIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5jCmluZGV4IDdjMGMwODMuLjQyNWRmNWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uYworKysgYi90b29scy9wZXJmL3V0aWwvZHNvLmMKQEAgLTkzMyw2ICs5MzMsNyBAQAogCQkvKiBBZGQgbmV3IG5vZGUgYW5kIHJlYmFsYW5jZSB0cmVlICovCiAJCXJiX2xpbmtfbm9kZSgmZHNvLT5yYl9ub2RlLCBwYXJlbnQsIHApOwogCQlyYl9pbnNlcnRfY29sb3IoJmRzby0+cmJfbm9kZSwgcm9vdCk7CisJCWRzby0+cm9vdCA9IHJvb3Q7CiAJfQogCXJldHVybiBOVUxMOwogfQpAQCAtOTQ1LDE1ICs5NDYsMzAgQEAKIAogdm9pZCBkc29fX3NldF9sb25nX25hbWUoc3RydWN0IGRzbyAqZHNvLCBjb25zdCBjaGFyICpuYW1lLCBib29sIG5hbWVfYWxsb2NhdGVkKQogeworCXN0cnVjdCByYl9yb290ICpyb290ID0gZHNvLT5yb290OworCiAJaWYgKG5hbWUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJaWYgKGRzby0+bG9uZ19uYW1lX2FsbG9jYXRlZCkKIAkJZnJlZSgoY2hhciAqKWRzby0+bG9uZ19uYW1lKTsKIAorCWlmIChyb290KSB7CisJCXJiX2VyYXNlKCZkc28tPnJiX25vZGUsIHJvb3QpOworCQkvKgorCQkgKiBfX2Rzb19fZmluZGxpbmtfYnlfbG9uZ25hbWUoKSBpc24ndCBndWFyYW50ZWVkIHRvIGFkZCBpdAorCQkgKiBiYWNrLCBzbyBhIGNsZWFuIHJlbW92YWwgaXMgcmVxdWlyZWQgaGVyZS4KKwkJICovCisJCVJCX0NMRUFSX05PREUoJmRzby0+cmJfbm9kZSk7CisJCWRzby0+cm9vdCA9IE5VTEw7CisJfQorCiAJZHNvLT5sb25nX25hbWUJCSA9IG5hbWU7CiAJZHNvLT5sb25nX25hbWVfbGVuCSA9IHN0cmxlbihuYW1lKTsKIAlkc28tPmxvbmdfbmFtZV9hbGxvY2F0ZWQgPSBuYW1lX2FsbG9jYXRlZDsKKworCWlmIChyb290KQorCQlfX2Rzb19fZmluZGxpbmtfYnlfbG9uZ25hbWUocm9vdCwgZHNvLCBOVUxMKTsKIH0KIAogdm9pZCBkc29fX3NldF9zaG9ydF9uYW1lKHN0cnVjdCBkc28gKmRzbywgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBuYW1lX2FsbG9jYXRlZCkKQEAgLTEwNDYsNiArMTA2Miw3IEBACiAJCWRzby0+a2VybmVsID0gRFNPX1RZUEVfVVNFUjsKIAkJZHNvLT5uZWVkc19zd2FwID0gRFNPX1NXQVBfX1VOU0VUOwogCQlSQl9DTEVBUl9OT0RFKCZkc28tPnJiX25vZGUpOworCQlkc28tPnJvb3QgPSBOVUxMOwogCQlJTklUX0xJU1RfSEVBRCgmZHNvLT5ub2RlKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmRzby0+ZGF0YS5vcGVuX2VudHJ5KTsKIAkJcHRocmVhZF9tdXRleF9pbml0KCZkc28tPmxvY2ssIE5VTEwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Rzby5oIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5oCmluZGV4IGZjOGRiOWMuLjQ1ZWM0ZDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uaAorKysgYi90b29scy9wZXJmL3V0aWwvZHNvLmgKQEAgLTEzNSw2ICsxMzUsNyBAQAogCXB0aHJlYWRfbXV0ZXhfdAkgbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJc3RydWN0IHJiX25vZGUJIHJiX25vZGU7CS8qIHJidHJlZSBub2RlIHNvcnRlZCBieSBsb25nIG5hbWUgKi8KKwlzdHJ1Y3QgcmJfcm9vdAkgKnJvb3Q7CQkvKiByb290IG9mIHJidHJlZSB0aGF0IHJiX25vZGUgaXMgaW4gKi8KIAlzdHJ1Y3QgcmJfcm9vdAkgc3ltYm9sc1tNQVBfX05SX1RZUEVTXTsKIAlzdHJ1Y3QgcmJfcm9vdAkgc3ltYm9sX25hbWVzW01BUF9fTlJfVFlQRVNdOwogCXN0cnVjdCB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbWFjaGluZS5jIGIvdG9vbHMvcGVyZi91dGlsL21hY2hpbmUuYwppbmRleCA1ZWY5MGJlLi44YjMwM2ZmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFjaGluZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tYWNoaW5lLmMKQEAgLTkxLDYgKzkxLDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZkc29zLT5oZWFkLCBub2RlKSB7CiAJCVJCX0NMRUFSX05PREUoJnBvcy0+cmJfbm9kZSk7CisJCXBvcy0+cm9vdCA9IE5VTEw7CiAJCWxpc3RfZGVsX2luaXQoJnBvcy0+bm9kZSk7CiAJCWRzb19fcHV0KHBvcyk7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCmluZGV4IGJkOGYwM2QuLjA1MDEyYmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKQEAgLTExODMsNyArMTE4Myw3IEBACiAJCQljb250YWluZXJfb2YocGYsIHN0cnVjdCB0cmFjZV9ldmVudF9maW5kZXIsIHBmKTsKIAlzdHJ1Y3QgcGVyZl9wcm9iZV9wb2ludCAqcHAgPSAmcGYtPnBldi0+cG9pbnQ7CiAJc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICp0ZXY7Ci0Jc3RydWN0IHBlcmZfcHJvYmVfYXJnICphcmdzOworCXN0cnVjdCBwZXJmX3Byb2JlX2FyZyAqYXJncyA9IE5VTEw7CiAJaW50IHJldCwgaTsKIAogCS8qIENoZWNrIG51bWJlciBvZiB0ZXZzICovCkBAIC0xMTk4LDE5ICsxMTk4LDIzIEBACiAJcmV0ID0gY29udmVydF90b190cmFjZV9wb2ludCgmcGYtPnNwX2RpZSwgdGYtPm1vZCwgcGYtPmFkZHIsCiAJCQkJICAgICBwcC0+cmV0cHJvYmUsIHBwLT5mdW5jdGlvbiwgJnRldi0+cG9pbnQpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVuZDsKIAogCXRldi0+cG9pbnQucmVhbG5hbWUgPSBzdHJkdXAoZHdhcmZfZGllbmFtZShzY19kaWUpKTsKLQlpZiAoIXRldi0+cG9pbnQucmVhbG5hbWUpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghdGV2LT5wb2ludC5yZWFsbmFtZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVuZDsKKwl9CiAKIAlwcl9kZWJ1ZygiUHJvYmUgcG9pbnQgZm91bmQ6ICVzKyVsdVxuIiwgdGV2LT5wb2ludC5zeW1ib2wsCiAJCSB0ZXYtPnBvaW50Lm9mZnNldCk7CiAKIAkvKiBFeHBhbmQgc3BlY2lhbCBwcm9iZSBhcmd1bWVudCBpZiBleGlzdCAqLwogCWFyZ3MgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZXJmX3Byb2JlX2FyZykgKiBNQVhfUFJPQkVfQVJHUyk7Ci0JaWYgKGFyZ3MgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGFyZ3MgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVuZDsKKwl9CiAKIAlyZXQgPSBleHBhbmRfcHJvYmVfYXJncyhzY19kaWUsIHBmLCBhcmdzKTsKIAlpZiAocmV0IDwgMCkKQEAgLTEyMzQsNiArMTIzOCwxMCBAQAogCX0KIAogZW5kOgorCWlmIChyZXQpIHsKKwkJY2xlYXJfcHJvYmVfdHJhY2VfZXZlbnQodGV2KTsKKwkJdGYtPm50ZXZzLS07CisJfQogCWZyZWUoYXJncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyNDYsNyArMTI1NCw3IEBACiAJc3RydWN0IHRyYWNlX2V2ZW50X2ZpbmRlciB0ZiA9IHsKIAkJCS5wZiA9IHsucGV2ID0gcGV2LCAuY2FsbGJhY2sgPSBhZGRfcHJvYmVfdHJhY2VfZXZlbnR9LAogCQkJLm1heF90ZXZzID0gcHJvYmVfY29uZi5tYXhfcHJvYmVzLCAubW9kID0gZGJnLT5tb2R9OwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCS8qIEFsbG9jYXRlIHJlc3VsdCB0ZXZzIGFycmF5ICovCiAJKnRldnMgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCkgKiB0Zi5tYXhfdGV2cyk7CkBAIC0xMjU4LDYgKzEyNjYsOCBAQAogCiAJcmV0ID0gZGVidWdpbmZvX19maW5kX3Byb2JlcyhkYmcsICZ0Zi5wZik7CiAJaWYgKHJldCA8IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IHRmLm50ZXZzOyBpKyspCisJCQljbGVhcl9wcm9iZV90cmFjZV9ldmVudCgmdGYudGV2c1tpXSk7CiAJCXpmcmVlKHRldnMpOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCBiNGNjNzY2Li5jZDA4MDI3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC02NTQsMTkgKzY1NCwyNCBAQAogCXN0cnVjdCBtYXBfZ3JvdXBzICprbWFwcyA9IG1hcF9fa21hcHMobWFwKTsKIAlzdHJ1Y3QgbWFwICpjdXJyX21hcDsKIAlzdHJ1Y3Qgc3ltYm9sICpwb3M7Ci0JaW50IGNvdW50ID0gMCwgbW92ZWQgPSAwOworCWludCBjb3VudCA9IDA7CisJc3RydWN0IHJiX3Jvb3Qgb2xkX3Jvb3QgPSBkc28tPnN5bWJvbHNbbWFwLT50eXBlXTsKIAlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZkc28tPnN5bWJvbHNbbWFwLT50eXBlXTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHJvb3QpOwogCiAJaWYgKCFrbWFwcykKIAkJcmV0dXJuIC0xOwogCisJKnJvb3QgPSBSQl9ST09UOworCiAJd2hpbGUgKG5leHQpIHsKIAkJY2hhciAqbW9kdWxlOwogCiAJCXBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwogCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKIAorCQlyYl9lcmFzZV9pbml0KCZwb3MtPnJiX25vZGUsICZvbGRfcm9vdCk7CisKIAkJbW9kdWxlID0gc3RyY2hyKHBvcy0+bmFtZSwgJ1x0Jyk7CiAJCWlmIChtb2R1bGUpCiAJCQkqbW9kdWxlID0gJ1wwJzsKQEAgLTY3NCwyOCArNjc5LDIxIEBACiAJCWN1cnJfbWFwID0gbWFwX2dyb3Vwc19fZmluZChrbWFwcywgbWFwLT50eXBlLCBwb3MtPnN0YXJ0KTsKIAogCQlpZiAoIWN1cnJfbWFwIHx8IChmaWx0ZXIgJiYgZmlsdGVyKGN1cnJfbWFwLCBwb3MpKSkgewotCQkJcmJfZXJhc2VfaW5pdCgmcG9zLT5yYl9ub2RlLCByb290KTsKIAkJCXN5bWJvbF9fZGVsZXRlKHBvcyk7Ci0JCX0gZWxzZSB7Ci0JCQlwb3MtPnN0YXJ0IC09IGN1cnJfbWFwLT5zdGFydCAtIGN1cnJfbWFwLT5wZ29mZjsKLQkJCWlmIChwb3MtPmVuZCkKLQkJCQlwb3MtPmVuZCAtPSBjdXJyX21hcC0+c3RhcnQgLSBjdXJyX21hcC0+cGdvZmY7Ci0JCQlpZiAoY3Vycl9tYXAtPmRzbyAhPSBtYXAtPmRzbykgewotCQkJCXJiX2VyYXNlX2luaXQoJnBvcy0+cmJfbm9kZSwgcm9vdCk7Ci0JCQkJc3ltYm9sc19faW5zZXJ0KAotCQkJCQkmY3Vycl9tYXAtPmRzby0+c3ltYm9sc1tjdXJyX21hcC0+dHlwZV0sCi0JCQkJCXBvcyk7Ci0JCQkJKyttb3ZlZDsKLQkJCX0gZWxzZSB7Ci0JCQkJKytjb3VudDsKLQkJCX0KKwkJCWNvbnRpbnVlOwogCQl9CisKKwkJcG9zLT5zdGFydCAtPSBjdXJyX21hcC0+c3RhcnQgLSBjdXJyX21hcC0+cGdvZmY7CisJCWlmIChwb3MtPmVuZCkKKwkJCXBvcy0+ZW5kIC09IGN1cnJfbWFwLT5zdGFydCAtIGN1cnJfbWFwLT5wZ29mZjsKKwkJc3ltYm9sc19faW5zZXJ0KCZjdXJyX21hcC0+ZHNvLT5zeW1ib2xzW2N1cnJfbWFwLT50eXBlXSwgcG9zKTsKKwkJKytjb3VudDsKIAl9CiAKIAkvKiBTeW1ib2xzIGhhdmUgYmVlbiBhZGp1c3RlZCAqLwogCWRzby0+YWRqdXN0X3N5bWJvbHMgPSAxOwogCi0JcmV0dXJuIGNvdW50ICsgbW92ZWQ7CisJcmV0dXJuIGNvdW50OwogfQogCiAvKgpAQCAtMTQzOCw5ICsxNDM2LDkgQEAKIAkJaWYgKGxzdGF0KGRzby0+bmFtZSwgJnN0KSA8IDApCiAJCQlnb3RvIG91dDsKIAotCQlpZiAoc3Quc3RfdWlkICYmIChzdC5zdF91aWQgIT0gZ2V0ZXVpZCgpKSkgeworCQlpZiAoIXN5bWJvbF9jb25mLmZvcmNlICYmIHN0LnN0X3VpZCAmJiAoc3Quc3RfdWlkICE9IGdldGV1aWQoKSkpIHsKIAkJCXByX3dhcm5pbmcoIkZpbGUgJXMgbm90IG93bmVkIGJ5IGN1cnJlbnQgdXNlciBvciByb290LCAiCi0JCQkJImlnbm9yaW5nIGl0LlxuIiwgZHNvLT5uYW1lKTsKKwkJCQkgICAiaWdub3JpbmcgaXQgKHVzZSAtZiB0byBvdmVycmlkZSkuXG4iLCBkc28tPm5hbWUpOwogCQkJZ290byBvdXQ7CiAJCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCmluZGV4IDQwMDczYzYuLmRjZDc4NmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKQEAgLTg0LDYgKzg0LDcgQEAKIAl1bnNpZ25lZCBzaG9ydAlwcml2X3NpemU7CiAJdW5zaWduZWQgc2hvcnQJbnJfZXZlbnRzOwogCWJvb2wJCXRyeV92bWxpbnV4X3BhdGgsCisJCQlmb3JjZSwKIAkJCWlnbm9yZV92bWxpbnV4LAogCQkJaWdub3JlX3ZtbGludXhfYnVpbGRpZCwKIAkJCXNob3dfa2VybmVsX3BhdGgsCmRpZmYgLS1naXQgYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuYwppbmRleCBkOGU0YjIwLi4wZGFjN2UwIDEwMDY0NAotLS0gYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCisrKyBiL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMKQEAgLTExNzMsOSArMTE3Myw5IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIG1zcjsKIAl1bnNpZ25lZCBpbnQgcmF0aW87CiAKLQlnZXRfbXNyKGJhc2VfY3B1LCBNU1JfTkhNX1BMQVRGT1JNX0lORk8sICZtc3IpOworCWdldF9tc3IoYmFzZV9jcHUsIE1TUl9QTEFURk9STV9JTkZPLCAmbXNyKTsKIAotCWZwcmludGYoc3RkZXJyLCAiY3B1JWQ6IE1TUl9OSE1fUExBVEZPUk1fSU5GTzogMHglMDhsbHhcbiIsIGJhc2VfY3B1LCBtc3IpOworCWZwcmludGYoc3RkZXJyLCAiY3B1JWQ6IE1TUl9QTEFURk9STV9JTkZPOiAweCUwOGxseFxuIiwgYmFzZV9jcHUsIG1zcik7CiAKIAlyYXRpbyA9IChtc3IgPj4gNDApICYgMHhGRjsKIAlmcHJpbnRmKHN0ZGVyciwgIiVkICogJS4wZiA9ICUuMGYgTUh6IG1heCBlZmZpY2llbmN5IGZyZXF1ZW5jeVxuIiwKQEAgLTE4MDcsNyArMTgwNyw3IEBACiAgKgogICogTVNSX1NNSV9DT1VOVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM0CiAgKgotICogTVNSX05ITV9QTEFURk9STV9JTkZPICAgICAgICAgICAweDAwMDAwMGNlCisgKiBNU1JfUExBVEZPUk1fSU5GTyAgICAgICAgICAgICAgIDB4MDAwMDAwY2UKICAqIE1TUl9OSE1fU05CX1BLR19DU1RfQ0ZHX0NUTCAgICAgMHgwMDAwMDBlMgogICoKICAqIE1TUl9QS0dfQzNfUkVTSURFTkNZICAgICAgICAgICAgMHgwMDAwMDNmOApAQCAtMTg3Niw3ICsxODc2LDcgQEAKIAlnZXRfbXNyKGJhc2VfY3B1LCBNU1JfTkhNX1NOQl9QS0dfQ1NUX0NGR19DVEwsICZtc3IpOwogCXBrZ19jc3RhdGVfbGltaXQgPSBwa2dfY3N0YXRlX2xpbWl0c1ttc3IgJiAweEZdOwogCi0JZ2V0X21zcihiYXNlX2NwdSwgTVNSX05ITV9QTEFURk9STV9JTkZPLCAmbXNyKTsKKwlnZXRfbXNyKGJhc2VfY3B1LCBNU1JfUExBVEZPUk1fSU5GTywgJm1zcik7CiAJYmFzZV9yYXRpbyA9IChtc3IgPj4gOCkgJiAweEZGOwogCiAJYmFzZV9oeiA9IGJhc2VfcmF0aW8gKiBiY2xrICogMTAwMDAwMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdC5jIGIvdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0LmMKaW5kZXggNDBhYjQ0Ny4uNTFjZjgyNSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0LmMKKysrIGIvdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0LmMKQEAgLTQyMCw4ICs0MjAsNyBAQAogCiBzdGF0aWMgaW50IG5maXRfdGVzdDBfYWxsb2Moc3RydWN0IG5maXRfdGVzdCAqdCkKIHsKLQlzaXplX3QgbmZpdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX25maXQpCi0JCQkrIHNpemVvZihzdHJ1Y3QgYWNwaV9uZml0X3N5c3RlbV9hZGRyZXNzKSAqIE5VTV9TUEEKKwlzaXplX3QgbmZpdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBhY3BpX25maXRfc3lzdGVtX2FkZHJlc3MpICogTlVNX1NQQQogCQkJKyBzaXplb2Yoc3RydWN0IGFjcGlfbmZpdF9tZW1vcnlfbWFwKSAqIE5VTV9NRU0KIAkJCSsgc2l6ZW9mKHN0cnVjdCBhY3BpX25maXRfY29udHJvbF9yZWdpb24pICogTlVNX0RDUgogCQkJKyBzaXplb2Yoc3RydWN0IGFjcGlfbmZpdF9kYXRhX3JlZ2lvbikgKiBOVU1fQkRXCkBAIC00NzEsOCArNDcwLDcgQEAKIAogc3RhdGljIGludCBuZml0X3Rlc3QxX2FsbG9jKHN0cnVjdCBuZml0X3Rlc3QgKnQpCiB7Ci0Jc2l6ZV90IG5maXRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9uZml0KQotCQkrIHNpemVvZihzdHJ1Y3QgYWNwaV9uZml0X3N5c3RlbV9hZGRyZXNzKQorCXNpemVfdCBuZml0X3NpemUgPSBzaXplb2Yoc3RydWN0IGFjcGlfbmZpdF9zeXN0ZW1fYWRkcmVzcykKIAkJKyBzaXplb2Yoc3RydWN0IGFjcGlfbmZpdF9tZW1vcnlfbWFwKQogCQkrIHNpemVvZihzdHJ1Y3QgYWNwaV9uZml0X2NvbnRyb2xfcmVnaW9uKTsKIApAQCAtNDg4LDM5ICs0ODYsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbmZpdF90ZXN0X2luaXRfaGVhZGVyKHN0cnVjdCBhY3BpX3RhYmxlX25maXQgKm5maXQsIHNpemVfdCBzaXplKQotewotCW1lbWNweShuZml0LT5oZWFkZXIuc2lnbmF0dXJlLCBBQ1BJX1NJR19ORklULCA0KTsKLQluZml0LT5oZWFkZXIubGVuZ3RoID0gc2l6ZTsKLQluZml0LT5oZWFkZXIucmV2aXNpb24gPSAxOwotCW1lbWNweShuZml0LT5oZWFkZXIub2VtX2lkLCAiTElCTkQiLCA2KTsKLQltZW1jcHkobmZpdC0+aGVhZGVyLm9lbV90YWJsZV9pZCwgIlRFU1QiLCA1KTsKLQluZml0LT5oZWFkZXIub2VtX3JldmlzaW9uID0gMTsKLQltZW1jcHkobmZpdC0+aGVhZGVyLmFzbF9jb21waWxlcl9pZCwgIlRTVCIsIDQpOwotCW5maXQtPmhlYWRlci5hc2xfY29tcGlsZXJfcmV2aXNpb24gPSAxOwotfQotCiBzdGF0aWMgdm9pZCBuZml0X3Rlc3QwX3NldHVwKHN0cnVjdCBuZml0X3Rlc3QgKnQpCiB7CiAJc3RydWN0IG52ZGltbV9idXNfZGVzY3JpcHRvciAqbmRfZGVzYzsKIAlzdHJ1Y3QgYWNwaV9uZml0X2Rlc2MgKmFjcGlfZGVzYzsKIAlzdHJ1Y3QgYWNwaV9uZml0X21lbW9yeV9tYXAgKm1lbWRldjsKIAl2b2lkICpuZml0X2J1ZiA9IHQtPm5maXRfYnVmOwotCXNpemVfdCBzaXplID0gdC0+bmZpdF9zaXplOwogCXN0cnVjdCBhY3BpX25maXRfc3lzdGVtX2FkZHJlc3MgKnNwYTsKIAlzdHJ1Y3QgYWNwaV9uZml0X2NvbnRyb2xfcmVnaW9uICpkY3I7CiAJc3RydWN0IGFjcGlfbmZpdF9kYXRhX3JlZ2lvbiAqYmR3OwogCXN0cnVjdCBhY3BpX25maXRfZmx1c2hfYWRkcmVzcyAqZmx1c2g7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAotCW5maXRfdGVzdF9pbml0X2hlYWRlcihuZml0X2J1Ziwgc2l6ZSk7Ci0KIAkvKgogCSAqIHNwYTAgKGludGVybGVhdmUgZmlyc3QgaGFsZiBvZiBkaW1tMCBhbmQgZGltbTEsIG5vdGUgc3RvcmFnZQogCSAqIGRvZXMgbm90IGFjdHVhbGx5IGFsaWFzIHRoZSByZWxhdGVkIGJsb2NrLWRhdGEtd2luZG93CiAJICogcmVnaW9ucykKIAkgKi8KLQlzcGEgPSBuZml0X2J1ZiArIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9uZml0KTsKKwlzcGEgPSBuZml0X2J1ZjsKIAlzcGEtPmhlYWRlci50eXBlID0gQUNQSV9ORklUX1RZUEVfU1lTVEVNX0FERFJFU1M7CiAJc3BhLT5oZWFkZXIubGVuZ3RoID0gc2l6ZW9mKCpzcGEpOwogCW1lbWNweShzcGEtPnJhbmdlX2d1aWQsIHRvX25maXRfdXVpZChORklUX1NQQV9QTSksIDE2KTsKQEAgLTUzMyw3ICs1MTYsNyBAQAogCSAqIGRvZXMgbm90IGFjdHVhbGx5IGFsaWFzIHRoZSByZWxhdGVkIGJsb2NrLWRhdGEtd2luZG93CiAJICogcmVnaW9ucykKIAkgKi8KLQlzcGEgPSBuZml0X2J1ZiArIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9uZml0KSArIHNpemVvZigqc3BhKTsKKwlzcGEgPSBuZml0X2J1ZiArIHNpemVvZigqc3BhKTsKIAlzcGEtPmhlYWRlci50eXBlID0gQUNQSV9ORklUX1RZUEVfU1lTVEVNX0FERFJFU1M7CiAJc3BhLT5oZWFkZXIubGVuZ3RoID0gc2l6ZW9mKCpzcGEpOwogCW1lbWNweShzcGEtPnJhbmdlX2d1aWQsIHRvX25maXRfdXVpZChORklUX1NQQV9QTSksIDE2KTsKQEAgLTU0Miw3ICs1MjUsNyBAQAogCXNwYS0+bGVuZ3RoID0gU1BBMV9TSVpFOwogCiAJLyogc3BhMiAoZGNyMCkgZGltbTAgKi8KLQlzcGEgPSBuZml0X2J1ZiArIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9uZml0KSArIHNpemVvZigqc3BhKSAqIDI7CisJc3BhID0gbmZpdF9idWYgKyBzaXplb2YoKnNwYSkgKiAyOwogCXNwYS0+aGVhZGVyLnR5cGUgPSBBQ1BJX05GSVRfVFlQRV9TWVNURU1fQUREUkVTUzsKIAlzcGEtPmhlYWRlci5sZW5ndGggPSBzaXplb2YoKnNwYSk7CiAJbWVtY3B5KHNwYS0+cmFuZ2VfZ3VpZCwgdG9fbmZpdF91dWlkKE5GSVRfU1BBX0RDUiksIDE2KTsKQEAgLTU1MSw3ICs1MzQsNyBAQAogCXNwYS0+bGVuZ3RoID0gRENSX1NJWkU7CiAKIAkvKiBzcGEzIChkY3IxKSBkaW1tMSAqLwotCXNwYSA9IG5maXRfYnVmICsgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX25maXQpICsgc2l6ZW9mKCpzcGEpICogMzsKKwlzcGEgPSBuZml0X2J1ZiArIHNpemVvZigqc3BhKSAqIDM7CiAJc3BhLT5oZWFkZXIudHlwZSA9IEFDUElfTkZJVF9UWVBFX1NZU1RFTV9BRERSRVNTOwogCXNwYS0+aGVhZGVyLmxlbmd0aCA9IHNpemVvZigqc3BhKTsKIAltZW1jcHkoc3BhLT5yYW5nZV9ndWlkLCB0b19uZml0X3V1aWQoTkZJVF9TUEFfRENSKSwgMTYpOwpAQCAtNTYwLDcgKzU0Myw3IEBACiAJc3BhLT5sZW5ndGggPSBEQ1JfU0laRTsKIAogCS8qIHNwYTQgKGRjcjIpIGRpbW0yICovCi0Jc3BhID0gbmZpdF9idWYgKyBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfbmZpdCkgKyBzaXplb2YoKnNwYSkgKiA0OworCXNwYSA9IG5maXRfYnVmICsgc2l6ZW9mKCpzcGEpICogNDsKIAlzcGEtPmhlYWRlci50eXBlID0gQUNQSV9ORklUX1RZUEVfU1lTVEVNX0FERFJFU1M7CiAJc3BhLT5oZWFkZXIubGVuZ3RoID0gc2l6ZW9mKCpzcGEpOwogCW1lbWNweShzcGEtPnJhbmdlX2d1aWQsIHRvX25maXRfdXVpZChORklUX1NQQV9EQ1IpLCAxNik7CkBAIC01NjksNyArNTUyLDcgQEAKIAlzcGEtPmxlbmd0aCA9IERDUl9TSVpFOwogCiAJLyogc3BhNSAoZGNyMykgZGltbTMgKi8KLQlzcGEgPSBuZml0X2J1ZiArIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9uZml0KSArIHNpemVvZigqc3BhKSAqIDU7CisJc3BhID0gbmZpdF9idWYgKyBzaXplb2YoKnNwYSkgKiA1OwogCXNwYS0+aGVhZGVyLnR5cGUgPSBBQ1BJX05GSVRfVFlQRV9TWVNURU1fQUREUkVTUzsKIAlzcGEtPmhlYWRlci5sZW5ndGggPSBzaXplb2YoKnNwYSk7CiAJbWVtY3B5KHNwYS0+cmFuZ2VfZ3VpZCwgdG9fbmZpdF91dWlkKE5GSVRfU1BBX0RDUiksIDE2KTsKQEAgLTU3OCw3ICs1NjEsNyBAQAogCXNwYS0+bGVuZ3RoID0gRENSX1NJWkU7CiAKIAkvKiBzcGE2IChiZHcgZm9yIGRjcjApIGRpbW0wICovCi0Jc3BhID0gbmZpdF9idWYgKyBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfbmZpdCkgKyBzaXplb2YoKnNwYSkgKiA2OworCXNwYSA9IG5maXRfYnVmICsgc2l6ZW9mKCpzcGEpICogNjsKIAlzcGEtPmhlYWRlci50eXBlID0gQUNQSV9ORklUX1RZUEVfU1lTVEVNX0FERFJFU1M7CiAJc3BhLT5oZWFkZXIubGVuZ3RoID0gc2l6ZW9mKCpzcGEpOwogCW1lbWNweShzcGEtPnJhbmdlX2d1aWQsIHRvX25maXRfdXVpZChORklUX1NQQV9CRFcpLCAxNik7CkBAIC01ODcsNyArNTcwLDcgQEAKIAlzcGEtPmxlbmd0aCA9IERJTU1fU0laRTsKIAogCS8qIHNwYTcgKGJkdyBmb3IgZGNyMSkgZGltbTEgKi8KLQlzcGEgPSBuZml0X2J1ZiArIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9uZml0KSArIHNpemVvZigqc3BhKSAqIDc7CisJc3BhID0gbmZpdF9idWYgKyBzaXplb2YoKnNwYSkgKiA3OwogCXNwYS0+aGVhZGVyLnR5cGUgPSBBQ1BJX05GSVRfVFlQRV9TWVNURU1fQUREUkVTUzsKIAlzcGEtPmhlYWRlci5sZW5ndGggPSBzaXplb2YoKnNwYSk7CiAJbWVtY3B5KHNwYS0+cmFuZ2VfZ3VpZCwgdG9fbmZpdF91dWlkKE5GSVRfU1BBX0JEVyksIDE2KTsKQEAgLTU5Niw3ICs1NzksNyBAQAogCXNwYS0+bGVuZ3RoID0gRElNTV9TSVpFOwogCiAJLyogc3BhOCAoYmR3IGZvciBkY3IyKSBkaW1tMiAqLwotCXNwYSA9IG5maXRfYnVmICsgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX25maXQpICsgc2l6ZW9mKCpzcGEpICogODsKKwlzcGEgPSBuZml0X2J1ZiArIHNpemVvZigqc3BhKSAqIDg7CiAJc3BhLT5oZWFkZXIudHlwZSA9IEFDUElfTkZJVF9UWVBFX1NZU1RFTV9BRERSRVNTOwogCXNwYS0+aGVhZGVyLmxlbmd0aCA9IHNpemVvZigqc3BhKTsKIAltZW1jcHkoc3BhLT5yYW5nZV9ndWlkLCB0b19uZml0X3V1aWQoTkZJVF9TUEFfQkRXKSwgMTYpOwpAQCAtNjA1LDcgKzU4OCw3IEBACiAJc3BhLT5sZW5ndGggPSBESU1NX1NJWkU7CiAKIAkvKiBzcGE5IChiZHcgZm9yIGRjcjMpIGRpbW0zICovCi0Jc3BhID0gbmZpdF9idWYgKyBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfbmZpdCkgKyBzaXplb2YoKnNwYSkgKiA5OworCXNwYSA9IG5maXRfYnVmICsgc2l6ZW9mKCpzcGEpICogOTsKIAlzcGEtPmhlYWRlci50eXBlID0gQUNQSV9ORklUX1RZUEVfU1lTVEVNX0FERFJFU1M7CiAJc3BhLT5oZWFkZXIubGVuZ3RoID0gc2l6ZW9mKCpzcGEpOwogCW1lbWNweShzcGEtPnJhbmdlX2d1aWQsIHRvX25maXRfdXVpZChORklUX1NQQV9CRFcpLCAxNik7CkBAIC02MTMsNyArNTk2LDcgQEAKIAlzcGEtPmFkZHJlc3MgPSB0LT5kaW1tX2RtYVszXTsKIAlzcGEtPmxlbmd0aCA9IERJTU1fU0laRTsKIAotCW9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9uZml0KSArIHNpemVvZigqc3BhKSAqIDEwOworCW9mZnNldCA9IHNpemVvZigqc3BhKSAqIDEwOwogCS8qIG1lbS1yZWdpb24wIChzcGEwLCBkaW1tMCkgKi8KIAltZW1kZXYgPSBuZml0X2J1ZiArIG9mZnNldDsKIAltZW1kZXYtPmhlYWRlci50eXBlID0gQUNQSV9ORklUX1RZUEVfTUVNT1JZX01BUDsKQEAgLTExMDAsMTUgKzEwODMsMTMgQEAKIAogc3RhdGljIHZvaWQgbmZpdF90ZXN0MV9zZXR1cChzdHJ1Y3QgbmZpdF90ZXN0ICp0KQogewotCXNpemVfdCBzaXplID0gdC0+bmZpdF9zaXplLCBvZmZzZXQ7CisJc2l6ZV90IG9mZnNldDsKIAl2b2lkICpuZml0X2J1ZiA9IHQtPm5maXRfYnVmOwogCXN0cnVjdCBhY3BpX25maXRfbWVtb3J5X21hcCAqbWVtZGV2OwogCXN0cnVjdCBhY3BpX25maXRfY29udHJvbF9yZWdpb24gKmRjcjsKIAlzdHJ1Y3QgYWNwaV9uZml0X3N5c3RlbV9hZGRyZXNzICpzcGE7CiAKLQluZml0X3Rlc3RfaW5pdF9oZWFkZXIobmZpdF9idWYsIHNpemUpOwotCi0Jb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX25maXQpOworCW9mZnNldCA9IDA7CiAJLyogc3BhMCAoZmxhdCByYW5nZSB3aXRoIG5vIGJkdyBhbGlhc2luZykgKi8KIAlzcGEgPSBuZml0X2J1ZiArIG9mZnNldDsKIAlzcGEtPmhlYWRlci50eXBlID0gQUNQSV9ORklUX1RZUEVfU1lTVEVNX0FERFJFU1M7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdXRleC9SRUFETUUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9mdXRleC9SRUFETUUKaW5kZXggMzIyNGEwNC4uMDU1OGJiOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZnV0ZXgvUkVBRE1FCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Z1dGV4L1JFQURNRQpAQCAtMjcsNyArMjcsNyBAQAogbyBXaGVyZSBwb3NzaWJsZSwgYW55IGhlbHBlciBmdW5jdGlvbnMgb3Igb3RoZXIgcGFja2FnZS13aWRlIGNvZGUgc2hhbGwgYmUKICAgaW1wbGVtZW50ZWQgaW4gaGVhZGVyIGZpbGVzLCBhdm9pZGluZyB0aGUgbmVlZCB0byBjb21waWxlIGludGVybWVkaWF0ZSBvYmplY3QKICAgZmlsZXMuCi1vIEV4dGVybmFsIGRlcGVuZGVuZGVuY2llcyBzaGFsbCByZW1haW4gYXMgbWluaW1hbCBhcyBwb3NzaWJsZS4gQ3VycmVudGx5IGdjYworbyBFeHRlcm5hbCBkZXBlbmRlbmNpZXMgc2hhbGwgcmVtYWluIGFzIG1pbmltYWwgYXMgcG9zc2libGUuIEN1cnJlbnRseSBnY2MKICAgYW5kIGdsaWJjIGFyZSB0aGUgb25seSBkZXBlbmRlbmNpZXMuCiBvIFRlc3RzIHJldHVybiAwIGZvciBzdWNjZXNzIGFuZCA8IDAgZm9yIGZhaWx1cmUuCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NlY2NvbXAvc2VjY29tcF9icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NlY2NvbXAvc2VjY29tcF9icGYuYwppbmRleCBlMzhjYzU0Li44ODJmZTgzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zZWNjb21wL3NlY2NvbXBfYnBmLmMKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2VjY29tcC9zZWNjb21wX2JwZi5jCkBAIC00OTIsNiArNDkyLDkgQEAKIAlwaWRfdCBwYXJlbnQgPSBnZXRwcGlkKCk7CiAJaW50IGZkOwogCXZvaWQgKm1hcDEsICptYXAyOworCWludCBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisKKwlBU1NFUlRfTFQoMCwgcGFnZV9zaXplKTsKIAogCXJldCA9IHByY3RsKFBSX1NFVF9OT19ORVdfUFJJVlMsIDEsIDAsIDAsIDApOwogCUFTU0VSVF9FUSgwLCByZXQpOwpAQCAtNTA0LDE2ICs1MDcsMTYgQEAKIAogCUVYUEVDVF9FUShwYXJlbnQsIHN5c2NhbGwoX19OUl9nZXRwcGlkKSk7CiAJbWFwMSA9ICh2b2lkICopc3lzY2FsbChzeXNubywKLQkJTlVMTCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgUEFHRV9TSVpFKTsKKwkJTlVMTCwgcGFnZV9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgcGFnZV9zaXplKTsKIAlFWFBFQ1RfTkUoTUFQX0ZBSUxFRCwgbWFwMSk7CiAJLyogbW1hcDIoKSBzaG91bGQgbmV2ZXIgcmV0dXJuLiAqLwogCW1hcDIgPSAodm9pZCAqKXN5c2NhbGwoc3lzbm8sCi0JCSBOVUxMLCBQQUdFX1NJWkUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAweDBDMEZGRUUpOworCQkgTlVMTCwgcGFnZV9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMHgwQzBGRkVFKTsKIAlFWFBFQ1RfRVEoTUFQX0ZBSUxFRCwgbWFwMik7CiAKIAkvKiBUaGUgdGVzdCBmYWlsZWQsIHNvIGNsZWFuIHVwIHRoZSByZXNvdXJjZXMuICovCi0JbXVubWFwKG1hcDEsIFBBR0VfU0laRSk7Ci0JbXVubWFwKG1hcDIsIFBBR0VfU0laRSk7CisJbXVubWFwKG1hcDEsIHBhZ2Vfc2l6ZSk7CisJbXVubWFwKG1hcDIsIHBhZ2Vfc2l6ZSk7CiAJY2xvc2UoZmQpOwogfQogCmRpZmYgLS1naXQgYS90b29scy92aXJ0aW8vbGludXgva2VybmVsLmggYi90b29scy92aXJ0aW8vbGludXgva2VybmVsLmgKaW5kZXggMGEzZGE2NC4uNGRiN2Q1NiAxMDA2NDQKLS0tIGEvdG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oCisrKyBiL3Rvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaApAQCAtMTEwLDQgKzExMCwxMCBAQAogCSh2b2lkKSAoJl9taW4xID09ICZfbWluMik7CQlcCiAJX21pbjEgPCBfbWluMiA/IF9taW4xIDogX21pbjI7IH0pCiAKKy8qIFRPRE86IGVtcHR5IHN0dWJzIGZvciBub3cuIEJyb2tlbiBidXQgZW5vdWdoIGZvciB2aXJ0aW9fcmluZy5jICovCisjZGVmaW5lIGxpc3RfYWRkX3RhaWwoYSwgYikgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGxpc3RfZGVsKGEpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGIsIGMpIHdoaWxlICgwKQorLyogZW5kIG9mIHN0dWJzICovCisKICNlbmRpZiAvKiBLRVJORUxfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdmlydGlvL2xpbnV4L3ZpcnRpby5oIGIvdG9vbHMvdmlydGlvL2xpbnV4L3ZpcnRpby5oCmluZGV4IGEzZTA3MDEuLmVlMTI1ZTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3ZpcnRpby9saW51eC92aXJ0aW8uaAorKysgYi90b29scy92aXJ0aW8vbGludXgvdmlydGlvLmgKQEAgLTMsMTIgKzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKLS8qIFRPRE86IGVtcHR5IHN0dWJzIGZvciBub3cuIEJyb2tlbiBidXQgZW5vdWdoIGZvciB2aXJ0aW9fcmluZy5jICovCi0jZGVmaW5lIGxpc3RfYWRkX3RhaWwoYSwgYikgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIGxpc3RfZGVsKGEpIGRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsIGIsIGMpIHdoaWxlICgwKQotLyogZW5kIG9mIHN0dWJzICovCi0KIHN0cnVjdCB2aXJ0aW9fZGV2aWNlIHsKIAl2b2lkICpkZXY7CiAJdTY0IGZlYXR1cmVzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdmlydGlvL2xpbnV4L3ZpcnRpb19jb25maWcuaCBiL3Rvb2xzL3ZpcnRpby9saW51eC92aXJ0aW9fY29uZmlnLmgKaW5kZXggODA2ZDY4My4uNTdhNjk2NCAxMDA2NDQKLS0tIGEvdG9vbHMvdmlydGlvL2xpbnV4L3ZpcnRpb19jb25maWcuaAorKysgYi90b29scy92aXJ0aW8vbGludXgvdmlydGlvX2NvbmZpZy5oCkBAIC00MCwzMyArNDAsMzkgQEAKICNkZWZpbmUgdmlydGlvX2hhc19mZWF0dXJlKGRldiwgZmVhdHVyZSkgXAogCShfX3ZpcnRpb190ZXN0X2JpdCgoZGV2KSwgZmVhdHVyZSkpCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCB2aXJ0aW9faXNfbGl0dGxlX2VuZGlhbihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3sKKwlyZXR1cm4gdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19GX1ZFUlNJT05fMSkgfHwKKwkJdmlydGlvX2xlZ2FjeV9pc19saXR0bGVfZW5kaWFuKCk7Cit9CisKKy8qIE1lbW9yeSBhY2Nlc3NvcnMgKi8KIHN0YXRpYyBpbmxpbmUgdTE2IHZpcnRpbzE2X3RvX2NwdShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgX192aXJ0aW8xNiB2YWwpCiB7Ci0JcmV0dXJuIF9fdmlydGlvMTZfdG9fY3B1KHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fRl9WRVJTSU9OXzEpLCB2YWwpOworCXJldHVybiBfX3ZpcnRpbzE2X3RvX2NwdSh2aXJ0aW9faXNfbGl0dGxlX2VuZGlhbih2ZGV2KSwgdmFsKTsKIH0KIAogc3RhdGljIGlubGluZSBfX3ZpcnRpbzE2IGNwdV90b192aXJ0aW8xNihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdTE2IHZhbCkKIHsKLQlyZXR1cm4gX19jcHVfdG9fdmlydGlvMTYodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19GX1ZFUlNJT05fMSksIHZhbCk7CisJcmV0dXJuIF9fY3B1X3RvX3ZpcnRpbzE2KHZpcnRpb19pc19saXR0bGVfZW5kaWFuKHZkZXYpLCB2YWwpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiB2aXJ0aW8zMl90b19jcHUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIF9fdmlydGlvMzIgdmFsKQogewotCXJldHVybiBfX3ZpcnRpbzMyX3RvX2NwdSh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0ZfVkVSU0lPTl8xKSwgdmFsKTsKKwlyZXR1cm4gX192aXJ0aW8zMl90b19jcHUodmlydGlvX2lzX2xpdHRsZV9lbmRpYW4odmRldiksIHZhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgX192aXJ0aW8zMiBjcHVfdG9fdmlydGlvMzIoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHUzMiB2YWwpCiB7Ci0JcmV0dXJuIF9fY3B1X3RvX3ZpcnRpbzMyKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fRl9WRVJTSU9OXzEpLCB2YWwpOworCXJldHVybiBfX2NwdV90b192aXJ0aW8zMih2aXJ0aW9faXNfbGl0dGxlX2VuZGlhbih2ZGV2KSwgdmFsKTsKIH0KIAogc3RhdGljIGlubGluZSB1NjQgdmlydGlvNjRfdG9fY3B1KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBfX3ZpcnRpbzY0IHZhbCkKIHsKLQlyZXR1cm4gX192aXJ0aW82NF90b19jcHUodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19GX1ZFUlNJT05fMSksIHZhbCk7CisJcmV0dXJuIF9fdmlydGlvNjRfdG9fY3B1KHZpcnRpb19pc19saXR0bGVfZW5kaWFuKHZkZXYpLCB2YWwpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fdmlydGlvNjQgY3B1X3RvX3ZpcnRpbzY0KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCB1NjQgdmFsKQogewotCXJldHVybiBfX2NwdV90b192aXJ0aW82NCh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0ZfVkVSU0lPTl8xKSwgdmFsKTsKKwlyZXR1cm4gX19jcHVfdG9fdmlydGlvNjQodmlydGlvX2lzX2xpdHRsZV9lbmRpYW4odmRldiksIHZhbCk7CiB9Ci0KZGlmZiAtLWdpdCBhL3Rvb2xzL3ZtL3BhZ2UtdHlwZXMuYyBiL3Rvb2xzL3ZtL3BhZ2UtdHlwZXMuYwppbmRleCBiY2Y1ZWM3Li41YTYwMTYyIDEwMDY0NAotLS0gYS90b29scy92bS9wYWdlLXR5cGVzLmMKKysrIGIvdG9vbHMvdm0vcGFnZS10eXBlcy5jCkBAIC0xMjgsNiArMTI4LDcgQEAKIAlbS1BGX1RIUF0JCT0gInQ6dGhwIiwKIAlbS1BGX0JBTExPT05dCQk9ICJvOmJhbGxvb24iLAogCVtLUEZfWkVST19QQUdFXQkJPSAiejp6ZXJvX3BhZ2UiLAorCVtLUEZfSURMRV0gICAgICAgICAgICAgID0gImk6aWRsZV9wYWdlIiwKIAogCVtLUEZfUkVTRVJWRURdCQk9ICJyOnJlc2VydmVkIiwKIAlbS1BGX01MT0NLRURdCQk9ICJtOm1sb2NrZWQiLApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vYXJtL2FyY2hfdGltZXIuYyBiL3ZpcnQva3ZtL2FybS9hcmNoX3RpbWVyLmMKaW5kZXggMjFhMGFiMi4uNjliY2ExOCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vYXJtL2FyY2hfdGltZXIuYworKysgYi92aXJ0L2t2bS9hcm0vYXJjaF90aW1lci5jCkBAIC0yMjEsMTcgKzIyMSwyMyBAQAogCWt2bV90aW1lcl91cGRhdGVfc3RhdGUodmNwdSk7CiAKIAkvKgotCSAqIElmIHdlIGVudGVyIHRoZSBndWVzdCB3aXRoIHRoZSB2aXJ0dWFsIGlucHV0IGxldmVsIHRvIHRoZSBWR0lDCi0JICogYXNzZXJ0ZWQsIHRoZW4gd2UgaGF2ZSBhbHJlYWR5IHRvbGQgdGhlIFZHSUMgd2hhdCB3ZSBuZWVkIHRvLCBhbmQKLQkgKiB3ZSBkb24ndCBuZWVkIHRvIGV4aXQgZnJvbSB0aGUgZ3Vlc3QgdW50aWwgdGhlIGd1ZXN0IGRlYWN0aXZhdGVzCi0JICogdGhlIGFscmVhZHkgaW5qZWN0ZWQgaW50ZXJydXB0LCBzbyB0aGVyZWZvcmUgd2Ugc2hvdWxkIHNldCB0aGUKLQkgKiBoYXJkd2FyZSBhY3RpdmUgc3RhdGUgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBleGl0cyBmcm9tIHRoZSBndWVzdC4KLQkgKgotCSAqIENvbnZlcnNlbHksIGlmIHRoZSB2aXJ0dWFsIGlucHV0IGxldmVsIGlzIGRlYXNzZXJ0ZWQsIHRoZW4gYWx3YXlzCi0JICogY2xlYXIgdGhlIGhhcmR3YXJlIGFjdGl2ZSBzdGF0ZSB0byBlbnN1cmUgdGhhdCBoYXJkd2FyZSBpbnRlcnJ1cHRzCi0JICogZnJvbSB0aGUgdGltZXIgdHJpZ2dlcnMgYSBndWVzdCBleGl0LgotCSAqLwotCWlmICh0aW1lci0+aXJxLmxldmVsKQorCSogSWYgd2UgZW50ZXIgdGhlIGd1ZXN0IHdpdGggdGhlIHZpcnR1YWwgaW5wdXQgbGV2ZWwgdG8gdGhlIFZHSUMKKwkqIGFzc2VydGVkLCB0aGVuIHdlIGhhdmUgYWxyZWFkeSB0b2xkIHRoZSBWR0lDIHdoYXQgd2UgbmVlZCB0bywgYW5kCisJKiB3ZSBkb24ndCBuZWVkIHRvIGV4aXQgZnJvbSB0aGUgZ3Vlc3QgdW50aWwgdGhlIGd1ZXN0IGRlYWN0aXZhdGVzCisJKiB0aGUgYWxyZWFkeSBpbmplY3RlZCBpbnRlcnJ1cHQsIHNvIHRoZXJlZm9yZSB3ZSBzaG91bGQgc2V0IHRoZQorCSogaGFyZHdhcmUgYWN0aXZlIHN0YXRlIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgZXhpdHMgZnJvbSB0aGUgZ3Vlc3QuCisJKgorCSogQWxzbywgaWYgd2UgZW50ZXIgdGhlIGd1ZXN0IHdpdGggdGhlIHZpcnR1YWwgdGltZXIgaW50ZXJydXB0IGFjdGl2ZSwKKwkqIHRoZW4gaXQgbXVzdCBiZSBhY3RpdmUgb24gdGhlIHBoeXNpY2FsIGRpc3RyaWJ1dG9yLCBiZWNhdXNlIHdlIHNldAorCSogdGhlIEhXIGJpdCBhbmQgdGhlIGd1ZXN0IG11c3QgYmUgYWJsZSB0byBkZWFjdGl2YXRlIHRoZSB2aXJ0dWFsIGFuZAorCSogcGh5c2ljYWwgaW50ZXJydXB0IGF0IHRoZSBzYW1lIHRpbWUuCisJKgorCSogQ29udmVyc2VseSwgaWYgdGhlIHZpcnR1YWwgaW5wdXQgbGV2ZWwgaXMgZGVhc3NlcnRlZCBhbmQgdGhlIHZpcnR1YWwKKwkqIGludGVycnVwdCBpcyBub3QgYWN0aXZlLCB0aGVuIGFsd2F5cyBjbGVhciB0aGUgaGFyZHdhcmUgYWN0aXZlIHN0YXRlCisJKiB0byBlbnN1cmUgdGhhdCBoYXJkd2FyZSBpbnRlcnJ1cHRzIGZyb20gdGhlIHRpbWVyIHRyaWdnZXJzIGEgZ3Vlc3QKKwkqIGV4aXQuCisJKi8KKwlpZiAodGltZXItPmlycS5sZXZlbCB8fCBrdm1fdmdpY19tYXBfaXNfYWN0aXZlKHZjcHUsIHRpbWVyLT5tYXApKQogCQlwaHlzX2FjdGl2ZSA9IHRydWU7CiAJZWxzZQogCQlwaHlzX2FjdGl2ZSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vYXJtL3ZnaWMuYyBiL3ZpcnQva3ZtL2FybS92Z2ljLmMKaW5kZXggNTMzNTM4My4uN2EyZjQ0OSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vYXJtL3ZnaWMuYworKysgYi92aXJ0L2t2bS9hcm0vdmdpYy5jCkBAIC0xMDk2LDYgKzEwOTYsMjcgQEAKIAl2Z2ljX3NldF9scih2Y3B1LCBscl9uciwgdmxyKTsKIH0KIAorc3RhdGljIGJvb2wgZGlzdF9hY3RpdmVfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgdmdpY19kaXN0ICpkaXN0ID0gJnZjcHUtPmt2bS0+YXJjaC52Z2ljOworCisJcmV0dXJuIHRlc3RfYml0KHZjcHUtPnZjcHVfaWQsIGRpc3QtPmlycV9hY3RpdmVfb25fY3B1KTsKK30KKworYm9vbCBrdm1fdmdpY19tYXBfaXNfYWN0aXZlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGlycV9waHlzX21hcCAqbWFwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHZjcHUtPmFyY2gudmdpY19jcHUubnJfbHI7IGkrKykgeworCQlzdHJ1Y3QgdmdpY19sciB2bHIgPSB2Z2ljX2dldF9scih2Y3B1LCBpKTsKKworCQlpZiAodmxyLmlycSA9PSBtYXAtPnZpcnRfaXJxICYmIHZsci5zdGF0ZSAmIExSX1NUQVRFX0FDVElWRSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiB2Z2ljX2lycV9pc19hY3RpdmUodmNwdSwgbWFwLT52aXJ0X2lycSk7Cit9CisKIC8qCiAgKiBBbiBpbnRlcnJ1cHQgbWF5IGhhdmUgYmVlbiBkaXNhYmxlZCBhZnRlciBiZWluZyBtYWRlIHBlbmRpbmcgb24gdGhlCiAgKiBDUFUgaW50ZXJmYWNlICh0aGUgY2xhc3NpYyBjYXNlIGlzIGEgdGltZXIgcnVubmluZyB3aGlsZSB3ZSdyZQpAQCAtMTI0OCw3ICsxMjY5LDcgQEAKIAkgKiBtYXkgaGF2ZSBiZWVuIHNlcnZpY2VkIGZyb20gYW5vdGhlciB2Y3B1LiBJbiBhbGwgY2FzZXMsCiAJICogbW92ZSBhbG9uZy4KIAkgKi8KLQlpZiAoIWt2bV92Z2ljX3ZjcHVfcGVuZGluZ19pcnEodmNwdSkgJiYgIWt2bV92Z2ljX3ZjcHVfYWN0aXZlX2lycSh2Y3B1KSkKKwlpZiAoIWt2bV92Z2ljX3ZjcHVfcGVuZGluZ19pcnEodmNwdSkgJiYgIWRpc3RfYWN0aXZlX2lycSh2Y3B1KSkKIAkJZ290byBlcGlsb2c7CiAKIAkvKiBTR0lzICovCkBAIC0xMzk2LDI1ICsxNDE3LDEzIEBACiBzdGF0aWMgYm9vbCB2Z2ljX3N5bmNfaHdpcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbHIsIHN0cnVjdCB2Z2ljX2xyIHZscikKIHsKIAlzdHJ1Y3QgdmdpY19kaXN0ICpkaXN0ID0gJnZjcHUtPmt2bS0+YXJjaC52Z2ljOwotCXN0cnVjdCBpcnFfcGh5c19tYXAgKm1hcDsKLQlib29sIHBoeXNfYWN0aXZlOwogCWJvb2wgbGV2ZWxfcGVuZGluZzsKLQlpbnQgcmV0OwogCiAJaWYgKCEodmxyLnN0YXRlICYgTFJfSFcpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQltYXAgPSB2Z2ljX2lycV9tYXBfc2VhcmNoKHZjcHUsIHZsci5pcnEpOwotCUJVR19PTighbWFwKTsKLQotCXJldCA9IGlycV9nZXRfaXJxY2hpcF9zdGF0ZShtYXAtPmlycSwKLQkJCQkgICAgSVJRQ0hJUF9TVEFURV9BQ1RJVkUsCi0JCQkJICAgICZwaHlzX2FjdGl2ZSk7Ci0KLQlXQVJOX09OKHJldCk7Ci0KLQlpZiAocGh5c19hY3RpdmUpCi0JCXJldHVybiAwOworCWlmICh2bHIuc3RhdGUgJiBMUl9TVEFURV9BQ1RJVkUpCisJCXJldHVybiBmYWxzZTsKIAogCXNwaW5fbG9jaygmZGlzdC0+bG9jayk7CiAJbGV2ZWxfcGVuZGluZyA9IHByb2Nlc3NfcXVldWVkX2lycSh2Y3B1LCBsciwgdmxyKTsKQEAgLTE0NzksMTcgKzE0ODgsNiBAQAogCXJldHVybiB0ZXN0X2JpdCh2Y3B1LT52Y3B1X2lkLCBkaXN0LT5pcnFfcGVuZGluZ19vbl9jcHUpOwogfQogCi1pbnQga3ZtX3ZnaWNfdmNwdV9hY3RpdmVfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3QgdmdpY19kaXN0ICpkaXN0ID0gJnZjcHUtPmt2bS0+YXJjaC52Z2ljOwotCi0JaWYgKCFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LT5rdm0pKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB0ZXN0X2JpdCh2Y3B1LT52Y3B1X2lkLCBkaXN0LT5pcnFfYWN0aXZlX29uX2NwdSk7Ci19Ci0KLQogdm9pZCB2Z2ljX2tpY2tfdmNwdXMoc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsK