ZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlody5oIGIvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWh3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4YWNkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYXRhcmlody5oCkBAIC0wLDAgKzEsODA4IEBACisvKgorKiogbGludXgvYXRhcmlody5oIC0tIFRoaXMgaGVhZGVyIGRlZmluZXMgc29tZSBtYWNyb3MgYW5kIHBvaW50ZXJzIGZvcgorKiogICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpb3VzIEF0YXJpIGN1c3RvbSBoYXJkd2FyZSByZWdpc3RlcnMuCisqKgorKiogQ29weXJpZ2h0IDE5OTQgYnkgQmqUcm4gQnJhdWVsCisqKgorKiogNS8xLzk0IFJvbWFuIEhvZGVrOgorKiogICBBZGRlZCBkZWZpbml0aW9ucyBmb3IgVFQgc3BlY2lmaWMgY2hpcHMuCisqKgorKiogMTk5Ni0wOS0xMyBsYXJzIGJyaW5raG9mZiA8ZjkzbGFickBkZC5jaGFsbWVycy5zZT46CisqKiAgIEZpbmFsbHkgYWRkZWQgZGVmaW5pdGlvbnMgZm9yIHRoZSBtYXRyaXgvY29kZWMgYW5kIHRoZSBEU1A1NjAwMSBob3N0CisqKiAgIGludGVyZmFjZS4KKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKi8KKworI2lmbmRlZiBfTElOVVhfQVRBUklIV19IXworI2RlZmluZSBfTElOVVhfQVRBUklIV19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vcmF3X2lvLmg+CisKK2V4dGVybiB1X2xvbmcgYXRhcmlfbWNoX2Nvb2tpZTsKK2V4dGVybiB1X2xvbmcgYXRhcmlfbWNoX3R5cGU7CitleHRlcm4gdV9sb25nIGF0YXJpX3N3aXRjaGVzOworZXh0ZXJuIGludCBhdGFyaV9ydGNfeWVhcl9vZmZzZXQ7CitleHRlcm4gaW50IGF0YXJpX2RvbnRfdG91Y2hfZmxvcHB5X3NlbGVjdDsKKworLyogY29udmVuaWVuY2UgbWFjcm9zIGZvciB0ZXN0aW5nIG1hY2hpbmUgdHlwZSAqLworI2RlZmluZSBNQUNIX0lTX1NUCSgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgPT0gQVRBUklfTUNIX1NUKQorI2RlZmluZSBNQUNIX0lTX1NURQkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9TVEUgJiYgXAorCQkJIChhdGFyaV9tY2hfY29va2llICYgMHhmZmZmKSA9PSAwKQorI2RlZmluZSBNQUNIX0lTX01TVEUJKChhdGFyaV9tY2hfY29va2llID4+IDE2KSA9PSBBVEFSSV9NQ0hfU1RFICYmIFwKKwkJCSAoYXRhcmlfbWNoX2Nvb2tpZSAmIDB4ZmZmZikgPT0gMHgxMCkKKyNkZWZpbmUgTUFDSF9JU19UVAkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9UVCkKKyNkZWZpbmUgTUFDSF9JU19GQUxDT04JKChhdGFyaV9tY2hfY29va2llID4+IDE2KSA9PSBBVEFSSV9NQ0hfRkFMQ09OKQorI2RlZmluZSBNQUNIX0lTX01FRFVTQQkoYXRhcmlfbWNoX3R5cGUgPT0gQVRBUklfTUFDSF9NRURVU0EpCisjZGVmaW5lIE1BQ0hfSVNfSEFERVMJKGF0YXJpX21jaF90eXBlID09IEFUQVJJX01BQ0hfSEFERVMpCisjZGVmaW5lIE1BQ0hfSVNfQUI0MAkoYXRhcmlfbWNoX3R5cGUgPT0gQVRBUklfTUFDSF9BQjQwKQorCisvKiB2YWx1ZXMgZm9yIGF0YXJpX3N3aXRjaGVzICovCisjZGVmaW5lIEFUQVJJX1NXSVRDSF9JS0JECTB4MDEKKyNkZWZpbmUgQVRBUklfU1dJVENIX01JREkJMHgwMgorI2RlZmluZSBBVEFSSV9TV0lUQ0hfU05ENgkweDA0CisjZGVmaW5lIEFUQVJJX1NXSVRDSF9TTkQ3CTB4MDgKKyNkZWZpbmUgQVRBUklfU1dJVENIX09WU0NfU0hJRlQJMTYKKyNkZWZpbmUgQVRBUklfU1dJVENIX09WU0NfSUtCRAkoQVRBUklfU1dJVENIX0lLQkQgPDwgQVRBUklfU1dJVENIX09WU0NfU0hJRlQpCisjZGVmaW5lIEFUQVJJX1NXSVRDSF9PVlNDX01JREkJKEFUQVJJX1NXSVRDSF9NSURJIDw8IEFUQVJJX1NXSVRDSF9PVlNDX1NISUZUKQorI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19TTkQ2CShBVEFSSV9TV0lUQ0hfU05ENiA8PCBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVCkKKyNkZWZpbmUgQVRBUklfU1dJVENIX09WU0NfU05ENwkoQVRBUklfU1dJVENIX1NORDcgPDwgQVRBUklfU1dJVENIX09WU0NfU0hJRlQpCisjZGVmaW5lIEFUQVJJX1NXSVRDSF9PVlNDX01BU0sJMHhmZmZmMDAwMAorCisvKgorICogRGVmaW5lIHNldmVyYWwgSGFyZHdhcmUtQ2hpcHMgZm9yIGluZGljYXRpb24gc28gdGhhdCBmb3IgdGhlIEFUQVJJIHdlIGRvCisgKiBubyBsb25nZXIgZGVjaWRlIHdoZXRoZXIgaXQgaXMgYSBGYWxjb24gb3Igb3RoZXIgbWFjaGluZSAuIEl0J3MganVzdAorICogaW1wb3J0YW50IHdoYXQgaGFyZHdhcmUgdGhlIG1hY2hpbmUgdXNlcworICovCisKKy8qICsrcm9tYW4gMDgvMDgvOTU6IHJld3JpdHRlbiBmcm9tIE9SaW5nIGNvbnN0YW50cyB0byBhIEMgYml0ZmllbGQgKi8KKworI2RlZmluZSBBVEFSSUhXX0RFQ0xBUkUobmFtZSkJdW5zaWduZWQgbmFtZSA6IDEKKyNkZWZpbmUgQVRBUklIV19TRVQobmFtZSkJKGF0YXJpX2h3X3ByZXNlbnQubmFtZSA9IDEpCisjZGVmaW5lIEFUQVJJSFdfUFJFU0VOVChuYW1lKQkoYXRhcmlfaHdfcHJlc2VudC5uYW1lKQorCitzdHJ1Y3QgYXRhcmlfaHdfcHJlc2VudCB7CisgICAgLyogdmlkZW8gaGFyZHdhcmUgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU1RORF9TSElGVEVSKTsJLyogU1QtU2hpZnRlciAtIG5vIGJhc2UgbG93ICEgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoRVhURF9TSElGVEVSKTsJLyogU1RlLVNoaWZ0ZXIgLSAyNCBiaXQgYWRkcmVzcyAqLworICAgIEFUQVJJSFdfREVDTEFSRShUVF9TSElGVEVSKTsJLyogVFQtU2hpZnRlciAqLworICAgIEFUQVJJSFdfREVDTEFSRShWSURFTF9TSElGVEVSKTsJLyogRmFsY29uLVNoaWZ0ZXIgKi8KKyAgICAvKiBzb3VuZCBoYXJkd2FyZSAqLworICAgIEFUQVJJSFdfREVDTEFSRShZTV8yMTQ5KTsJCS8qIFlhbWFoYSBZTSAyMTQ5ICovCisgICAgQVRBUklIV19ERUNMQVJFKFBDTV84QklUKTsJCS8qIFBDTS1Tb3VuZCBpbiBTVGUtQVRBUkkgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoQ09ERUMpOwkJLyogQ09ERUMgU291bmQgKEZhbGNvbikgKi8KKyAgICAvKiBkaXNrIHN0b3JhZ2UgaW50ZXJmYWNlcyAqLworICAgIEFUQVJJSFdfREVDTEFSRShUVF9TQ1NJKTsJCS8qIERpcmVjdGx5IG1hcHBlZCBOQ1I1MzgwICovCisgICAgQVRBUklIV19ERUNMQVJFKFNUX1NDU0kpOwkJLyogTkNSNTM4MCB2aWEgU1QtRE1BIChGYWxjb24pICovCisgICAgQVRBUklIV19ERUNMQVJFKEFDU0kpOwkJLyogU3RhbmRhcmQgQUNTSSBsaWtlIGluIFNUcyAqLworICAgIEFUQVJJSFdfREVDTEFSRShJREUpOwkJLyogSURFIEludGVyZmFjZSAqLworICAgIEFUQVJJSFdfREVDTEFSRShGRENTUEVFRCk7CQkvKiA4LzE2IE1IeiBzd2l0Y2ggZm9yIEZEQyAqLworICAgIC8qIG90aGVyIEkvTyBoYXJkd2FyZSAqLworICAgIEFUQVJJSFdfREVDTEFSRShTVF9NRlApOwkJLyogVGhlIFNULU1GUCAodGhlcmUgc2hvdWxkIGJlIG5vIEF0YXJpCisJCQkJCSAgIHdpdGhvdXQgaXQuLi4gYnV0IHdobyBrbm93cz8pICovCisgICAgQVRBUklIV19ERUNMQVJFKFRUX01GUCk7CQkvKiAybmQgTUZQICovCisgICAgQVRBUklIV19ERUNMQVJFKFNDQyk7CQkvKiBTZXJpYWwgQ29tbXVuaWNhdGlvbnMgQ29udHIuICovCisgICAgQVRBUklIV19ERUNMQVJFKFNUX0VTQ0MpOwkJLyogU0NDIFo4MzIzMCBpbiBhbiBTVCAqLworICAgIEFUQVJJSFdfREVDTEFSRShBTkFMT0dfSk9ZKTsJLyogUGFkZGxlIEludGVyZmFjZSBmb3IgU1RlCisJCQkJCSAgIGFuZCBGYWxjb24gKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoTUlDUk9XSVJFKTsJCS8qIE1pY3Jvd2lyZSBJbnRlcmZhY2UgKi8KKyAgICAvKiBETUEgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU1RORF9ETUEpOwkJLyogMjQgQml0IGxpbWl0ZWQgU1QtRE1BICovCisgICAgQVRBUklIV19ERUNMQVJFKEVYVERfRE1BKTsJCS8qIDMyIEJpdCBTVC1ETUEgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoU0NTSV9ETUEpOwkJLyogRE1BIGZvciB0aGUgTkNSNTM4MCAqLworICAgIEFUQVJJSFdfREVDTEFSRShTQ0NfRE1BKTsJCS8qIERNQSBmb3IgdGhlIFNDQyAqLworICAgIC8qIHJlYWwgdGltZSBjbG9ja3MgKi8KKyAgICBBVEFSSUhXX0RFQ0xBUkUoVFRfQ0xLKTsJCS8qIFRUIGNvbXBhdGlibGUgY2xvY2sgY2hpcCAqLworICAgIEFUQVJJSFdfREVDTEFSRShNU1RFX0NMSyk7CQkvKiBNZWdhIFNUKEUpIGNsb2NrIGNoaXAgKi8KKyAgICAvKiBzdXBwb3J0aW5nIGhhcmR3YXJlICovCisgICAgQVRBUklIV19ERUNMQVJFKFNDVSk7CQkvKiBTeXN0ZW0gQ29udHJvbCBVbml0ICovCisgICAgQVRBUklIV19ERUNMQVJFKEJMSVRURVIpOwkJLyogQmxpdHRlciAqLworICAgIEFUQVJJSFdfREVDTEFSRShWTUUpOwkJLyogVk1FIEJ1cyAqLworICAgIEFUQVJJSFdfREVDTEFSRShEU1A1NkspOwkJLyogRFNQNTZrIHByb2Nlc3NvciBpbiBGYWxjb24gKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgYXRhcmlfaHdfcHJlc2VudCBhdGFyaV9od19wcmVzZW50OworCisKKy8qIFJlYWRpbmcgdGhlIE1GUCBwb3J0IHJlZ2lzdGVyIGdpdmVzIGEgbWFjaGluZSBpbmRlcGVuZGVudCBkZWxheSwgc2luY2UgdGhlCisgKiBNRlAgYWx3YXlzIGhhcyBhIDggTUh6IGNsb2NrLiBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIHRoZSB2YXJ5aW5nIGxlbmd0aAorICogb2Ygbm9wcyBvbiB2YXJpb3VzIG1hY2hpbmVzLiBTb21lYm9keSBjbGFpbWVkIHRoYXQgdGhlIHRzdGIgdGFrZXMgNjAwIG5zLgorICovCisjZGVmaW5lCU1GUERFTEFZKCkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICggInRzdGIgJTAiIDogOiAibSIgKG1mcC5wYXJfZHRfcmVnKSA6ICJjYyIgKTsKKworLyogRG8gY2FjaGUgcHVzaC9pbnZhbGlkYXRlIGZvciBETUEgcmVhZC93cml0ZS4gVGhpcyBmdW5jdGlvbiBvYmV5cyB0aGUKKyAqIHNub29waW5nIG9uIHNvbWUgbWFjaGluZXMgKE1lZHVzYSkgYW5kIHByb2Nlc3NvcnM6IFRoZSBNZWR1c2EgaXRzZWxmIGNhbgorICogc25vb3AsIGJ1dCBvbmx5IHRoZSAnMDQwIGNhbiBzb3VyY2UgZGF0YSBmcm9tIGl0cyBjYWNoZSB0byBETUEgd3JpdGVzIGkuZS4sCisgKiByZWFkcyBmcm9tIG1lbW9yeSkuIEJvdGggJzA0MCBhbmQgJzA2MCBpbnZhbGlkYXRlIGNhY2hlIGVudHJpZXMgb24gc25vb3BlZAorICogRE1BIHJlYWRzIChpLmUuLCB3cml0ZXMgdG8gbWVtb3J5KS4KKyAqLworCisKKyNkZWZpbmUgYXRhcmlfcmVhZGIgICByYXdfaW5iCisjZGVmaW5lIGF0YXJpX3dyaXRlYiAgcmF3X291dGIKKworI2RlZmluZSBhdGFyaV9pbmJfcCAgIHJhd19pbmIKKyNkZWZpbmUgYXRhcmlfb3V0Yl9wICByYXdfb3V0YgorCisKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9jYWNoZV9tYWludGVuYW5jZSggdW5zaWduZWQgbG9uZyBwYWRkciwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJICBpbnQgd3JpdGVmbGFnICkKKworeworCWlmICh3cml0ZWZsYWcpIHsKKwkJaWYgKCFNQUNIX0lTX01FRFVTQSB8fCBDUFVfSVNfMDYwKQorCQkJY2FjaGVfcHVzaCggcGFkZHIsIGxlbiApOworCX0KKwllbHNlIHsKKwkJaWYgKCFNQUNIX0lTX01FRFVTQSkKKwkJCWNhY2hlX2NsZWFyKCBwYWRkciwgbGVuICk7CisJfQorfQorCisKKy8qCisqKiBTaGlmdGVyCisgKi8KKyNkZWZpbmUgU1RfTE9XICAwCisjZGVmaW5lIFNUX01JRCAgMQorI2RlZmluZSBTVF9ISUdIIDIKKyNkZWZpbmUgVFRfTE9XICA3CisjZGVmaW5lIFRUX01JRCAgNAorI2RlZmluZSBUVF9ISUdIIDYKKworI2RlZmluZSBTSEZfQkFTICgweGZmZmY4MjAwKQorc3RydWN0IFNISUZURVIKKyB7CisJdV9jaGFyIHBhZDE7CisJdV9jaGFyIGJhc19oaTsKKwl1X2NoYXIgcGFkMjsKKwl1X2NoYXIgYmFzX21kOworCXVfY2hhciBwYWQzOworCXVfY2hhciB2b2xhdGlsZSB2Y291bnRoaTsKKwl1X2NoYXIgcGFkNDsKKwl1X2NoYXIgdm9sYXRpbGUgdmNvdW50bWlkOworCXVfY2hhciBwYWQ1OworCXVfY2hhciB2b2xhdGlsZSB2Y291bnRsb3c7CisJdV9jaGFyIHZvbGF0aWxlIHN5bmNtb2RlOworCXVfY2hhciBwYWQ2OworCXVfY2hhciBwYWQ3OworCXVfY2hhciBiYXNfbG87CisgfTsKKyMgZGVmaW5lIHNoaWZ0ZXIgKCgqKHZvbGF0aWxlIHN0cnVjdCBTSElGVEVSICopU0hGX0JBUykpCisKKyNkZWZpbmUgU0hGX0ZCQVMgKDB4ZmZmZjgyMGUpCitzdHJ1Y3QgU0hJRlRFUl9GMDMwCisgeworICB1X3Nob3J0IG9mZl9uZXh0OworICB1X3Nob3J0IHNjbl93aWR0aDsKKyB9OworIyBkZWZpbmUgc2hpZnRlcl9mMDMwICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0hJRlRFUl9GMDMwICopU0hGX0ZCQVMpKQorCisKKyNkZWZpbmUJU0hGX1RCQVMgKDB4ZmZmZjgyMDApCitzdHJ1Y3QgU0hJRlRFUl9UVCB7CisJdV9jaGFyCWNoYXJfZHVtbXkwOworCXVfY2hhcgliYXNfaGk7CQkJLyogdmlkZW8gbWVtIGJhc2UgYWRkciwgaGlnaCBhbmQgbWlkIGJ5dGUgKi8KKwl1X2NoYXIJY2hhcl9kdW1teTE7CisJdV9jaGFyCWJhc19tZDsKKwl1X2NoYXIJY2hhcl9kdW1teTI7CisJdV9jaGFyCXZjb3VudF9oaTsJCS8qIHBvaW50ZXIgdG8gY3VycmVudGx5IGRpc3BsYXllZCBieXRlICovCisJdV9jaGFyCWNoYXJfZHVtbXkzOworCXVfY2hhcgl2Y291bnRfbWQ7CisJdV9jaGFyCWNoYXJfZHVtbXk0OworCXVfY2hhcgl2Y291bnRfbG87CisJdV9zaG9ydAlzdF9zeW5jOwkJLyogU1QgY29tcGF0aWJsZSBzeW5jIG1vZGUgcmVnaXN0ZXIsIHVudXNlZCAqLworCXVfY2hhcgljaGFyX2R1bW15NTsKKwl1X2NoYXIJYmFzX2xvOwkJCS8qIHZpZGVvIG1lbSBhZGRyLCBsb3cgYnl0ZSAqLworCXVfY2hhcgljaGFyX2R1bW15NlsyKzMqMTZdOworCS8qICRmZmZmODI0MDogKi8KKwl1X3Nob3J0CWNvbG9yX3JlZ1sxNl07CS8qIDE2IGNvbG9yIHJlZ2lzdGVycyAqLworCXVfY2hhcglzdF9zaGlmdG1vZGU7CS8qIFNUIGNvbXBhdGlibGUgc2hpZnQgbW9kZSByZWdpc3RlciwgdW51c2VkICovCisJdV9jaGFyICBjaGFyX2R1bW15NzsKKwl1X3Nob3J0IHR0X3NoaWZ0bW9kZTsJLyogVFQgc2hpZnQgbW9kZSByZWdpc3RlciAqLworCisKK307CisjZGVmaW5lCXNoaWZ0ZXJfdHQJKCgqKHZvbGF0aWxlIHN0cnVjdCBTSElGVEVSX1RUICopU0hGX1RCQVMpKQorCisvKiB2YWx1ZXMgZm9yIHNoaWZ0ZXJfdHQtPnR0X3NoaWZ0bW9kZSAqLworI2RlZmluZQlUVF9TSElGVEVSX1NUTE9XCQkweDAwMDAKKyNkZWZpbmUJVFRfU0hJRlRFUl9TVE1JRAkJMHgwMTAwCisjZGVmaW5lCVRUX1NISUZURVJfU1RISUdICQkweDAyMDAKKyNkZWZpbmUJVFRfU0hJRlRFUl9UVExPVwkJMHgwNzAwCisjZGVmaW5lCVRUX1NISUZURVJfVFRNSUQJCTB4MDQwMAorI2RlZmluZQlUVF9TSElGVEVSX1RUSElHSAkJMHgwNjAwCisjZGVmaW5lCVRUX1NISUZURVJfTU9ERU1BU0sJMHgwNzAwCisjZGVmaW5lIFRUX1NISUZURVJfTlVNTU9ERQkweDAwMDgKKyNkZWZpbmUJVFRfU0hJRlRFUl9QQUxFVFRFX01BU0sJMHgwMDBmCisjZGVmaW5lCVRUX1NISUZURVJfR1JBWU1PREUJCTB4MTAwMAorCisvKiAyNTYgVFQgcGFsZXR0ZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUJVFRfUEFMRVRURV9CQVNFCSgweGZmZmY4NDAwKQorI2RlZmluZQl0dF9wYWxldHRlCSgodm9sYXRpbGUgdV9zaG9ydCAqKVRUX1BBTEVUVEVfQkFTRSkKKworI2RlZmluZQlUVF9QQUxFVFRFX1JFRF9NQVNLCQkweDBmMDAKKyNkZWZpbmUJVFRfUEFMRVRURV9HUkVFTl9NQVNLCTB4MDBmMAorI2RlZmluZQlUVF9QQUxFVFRFX0JMVUVfTUFTSwkweDAwMGYKKworLyoKKyoqIEZhbGNvbjAzMCBWSURFTCBWaWRlbyBDb250cm9sbGVyCisqKiBmb3IgZGVzY3JpcHRpb24gc2VlIEZpbGUgJ2xpbnV4XHRvb2xzXGF0YXJpXGhhcmR3YXJlLnR4dAorICovCisjZGVmaW5lIGYwMzBfY29sICgodV9sb25nICopCQkweGZmZmY5ODAwKQorI2RlZmluZSBmMDMwX3hyZWcgKCh1X3Nob3J0KikJCTB4ZmZmZjgyODIpCisjZGVmaW5lIGYwMzBfeXJlZyAoKHVfc2hvcnQqKQkJMHhmZmZmODJhMikKKyNkZWZpbmUgZjAzMF9jcmVnICgodV9zaG9ydCopCQkweGZmZmY4MmMwKQorI2RlZmluZSBmMDMwX3NyZWcgKCh1X3Nob3J0KikJCTB4ZmZmZjgyNjApCisjZGVmaW5lIGYwMzBfbXJlZyAoKHVfc2hvcnQqKQkJMHhmZmZmODIwYSkKKyNkZWZpbmUgZjAzMF9saW5ld2lkdGggKCh1X3Nob3J0KikgICAgICAweGZmZmY4MjBlKQorI2RlZmluZSBmMDMwX2hzY3JvbGwgKCh1X2NoYXIqKQkJMHhmZmZmODI2NSkKKworI2RlZmluZSBWSURFTF9CQVMgKDB4ZmZmZjgyNjApCitzdHJ1Y3QgVklERUwgeworCXVfc2hvcnQgc3Rfc2hpZnQ7CisJdV9zaG9ydCBwYWQxOworCXVfY2hhciAgeG9mZnNldF9zOworCXVfY2hhciAgeG9mZnNldDsKKwl1X3Nob3J0IGZfc2hpZnQ7CisJdV9jaGFyICBwYWQyWzB4MWFdOworCXVfc2hvcnQgaGh0OworCXVfc2hvcnQgaGJiOworCXVfc2hvcnQgaGJlOworCXVfc2hvcnQgaGRiOworCXVfc2hvcnQgaGRlOworCXVfc2hvcnQgaHNzOworCXVfY2hhciAgcGFkM1sweDE0XTsKKwl1X3Nob3J0IHZmdDsKKwl1X3Nob3J0IHZiYjsKKwl1X3Nob3J0IHZiZTsKKwl1X3Nob3J0IHZkYjsKKwl1X3Nob3J0IHZkZTsKKwl1X3Nob3J0IHZzczsKKwl1X2NoYXIgIHBhZDRbMHgxMl07CisJdV9zaG9ydCBjb250cm9sOworCXVfc2hvcnQgbW9kZTsKK307CisjZGVmaW5lCXZpZGVsCSgoKih2b2xhdGlsZSBzdHJ1Y3QgVklERUwgKilWSURFTF9CQVMpKQorCisvKgorKiogRE1BL1dEMTc3MiBEaXNrIENvbnRyb2xsZXIKKyAqLworCisjZGVmaW5lIEZXRF9CQVMgKDB4ZmZmZjg2MDQpCitzdHJ1Y3QgRE1BX1dECisgeworICB1X3Nob3J0IGZkY19hY2Nlc19zZWNjb3VudDsKKyAgdV9zaG9ydCBkbWFfbW9kZV9zdGF0dXM7CisgIHVfY2hhciBkbWFfdmhpOwkvKiBTb21lIGV4dGVuZGVkIFNULURNQXMgY2FuIGhhbmRsZSAzMiBiaXQgYWRkcmVzc2VzICovCisgIHVfY2hhciBkbWFfaGk7CisgIHVfY2hhciBjaGFyX2R1bW15MjsKKyAgdV9jaGFyIGRtYV9tZDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkzOworICB1X2NoYXIgZG1hX2xvOworICB1X3Nob3J0IGZkY19zcGVlZDsKKyB9OworIyBkZWZpbmUgZG1hX3dkICgoKih2b2xhdGlsZSBzdHJ1Y3QgRE1BX1dEICopRldEX0JBUykpCisvKiBhbGlhcyAqLworI2RlZmluZQlzdF9kbWEgZG1hX3dkCisvKiBUaGUgdHdvIGhpZ2hlc3QgYnl0ZXMgb2YgYW4gZXh0ZW5kZWQgRE1BIGFzIGEgc2hvcnQ7IHRoaXMgaXMgYSBtdXN0CisgKiBmb3IgdGhlIE1lZHVzYS4KKyAqLworI2RlZmluZSBzdF9kbWFfZXh0X2RtYWhpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKTB4ZmZmZjg2MDgpKQorCisvKgorKiogWU0yMTQ5IFNvdW5kIENoaXAKKyoqIGFjY2VzcyBpbiBieXRlcworICovCisKKyNkZWZpbmUgWU1fQkFTICgweGZmZmY4ODAwKQorc3RydWN0IFNPVU5EX1lNCisgeworICB1X2NoYXIgcmRfZGF0YV9yZWdfc2VsOworICB1X2NoYXIgY2hhcl9kdW1teTE7CisgIHVfY2hhciB3ZF9kYXRhOworIH07CisjZGVmaW5lIHNvdW5kX3ltICgoKih2b2xhdGlsZSBzdHJ1Y3QgU09VTkRfWU0gKilZTV9CQVMpKQorCisvKiBUVCBTQ1NJIERNQSAqLworCisjZGVmaW5lCVRUX1NDU0lfRE1BX0JBUwkoMHhmZmZmODcwMCkKK3N0cnVjdCBUVF9ETUEgeworCXVfY2hhcgljaGFyX2R1bW15MDsKKwl1X2NoYXIJZG1hX2FkZHJfaGk7CisJdV9jaGFyCWNoYXJfZHVtbXkxOworCXVfY2hhcglkbWFfYWRkcl9obWQ7CisJdV9jaGFyCWNoYXJfZHVtbXkyOworCXVfY2hhcglkbWFfYWRkcl9sbWQ7CisJdV9jaGFyCWNoYXJfZHVtbXkzOworCXVfY2hhcglkbWFfYWRkcl9sbzsKKwl1X2NoYXIJY2hhcl9kdW1teTQ7CisJdV9jaGFyCWRtYV9jbnRfaGk7CisJdV9jaGFyCWNoYXJfZHVtbXk1OworCXVfY2hhcglkbWFfY250X2htZDsKKwl1X2NoYXIJY2hhcl9kdW1teTY7CisJdV9jaGFyCWRtYV9jbnRfbG1kOworCXVfY2hhcgljaGFyX2R1bW15NzsKKwl1X2NoYXIJZG1hX2NudF9sbzsKKwl1X2xvbmcJZG1hX3Jlc3RkYXRhOworCXVfc2hvcnQJZG1hX2N0cmw7Cit9OworI2RlZmluZQl0dF9zY3NpX2RtYQkoKCoodm9sYXRpbGUgc3RydWN0IFRUX0RNQSAqKVRUX1NDU0lfRE1BX0JBUykpCisKKy8qIFRUIFNDU0kgQ29udHJvbGxlciA1MzgwICovCisKKyNkZWZpbmUJVFRfNTM4MF9CQVMJKDB4ZmZmZjg3ODEpCitzdHJ1Y3QgVFRfNTM4MCB7CisJdV9jaGFyCXNjc2lfZGF0YTsKKwl1X2NoYXIJY2hhcl9kdW1teTE7CisJdV9jaGFyCXNjc2lfaWNyOworCXVfY2hhcgljaGFyX2R1bW15MjsKKwl1X2NoYXIJc2NzaV9tb2RlOworCXVfY2hhcgljaGFyX2R1bW15MzsKKwl1X2NoYXIJc2NzaV90Y3I7CisJdV9jaGFyCWNoYXJfZHVtbXk0OworCXVfY2hhcglzY3NpX2lkc3RhdDsKKwl1X2NoYXIJY2hhcl9kdW1teTU7CisJdV9jaGFyCXNjc2lfZG1hc3RhdDsKKwl1X2NoYXIJY2hhcl9kdW1teTY7CisJdV9jaGFyCXNjc2lfdGFyZ3JjdjsKKwl1X2NoYXIJY2hhcl9kdW1teTc7CisJdV9jaGFyCXNjc2lfaW5pcmN2OworfTsKKyNkZWZpbmUJdHRfc2NzaQkJCSgoKih2b2xhdGlsZSBzdHJ1Y3QgVFRfNTM4MCAqKVRUXzUzODBfQkFTKSkKKyNkZWZpbmUJdHRfc2NzaV9yZWdwCSgodm9sYXRpbGUgY2hhciAqKVRUXzUzODBfQkFTKQorCisKKy8qCisqKiBGYWxjb24gRE1BIFNvdW5kIFN1YnN5c3RlbQorICovCisKKyNkZWZpbmUgTUFUUklYX0JBU0UgKDB4ZmZmZjg5MzApCitzdHJ1Y3QgTUFUUklYCit7CisgIHVfc2hvcnQgc291cmNlOworICB1X3Nob3J0IGRlc3RpbmF0aW9uOworICB1X2NoYXIgZXh0ZXJuYWxfZnJlcXVlbmN5X2RpdmlkZXI7CisgIHVfY2hhciBpbnRlcm5hbF9mcmVxdWVuY3lfZGl2aWRlcjsKK307CisjZGVmaW5lIGZhbGNvbl9tYXRyaXggKCoodm9sYXRpbGUgc3RydWN0IE1BVFJJWCAqKU1BVFJJWF9CQVNFKQorCisjZGVmaW5lIENPREVDX0JBU0UgKDB4ZmZmZjg5MzYpCitzdHJ1Y3QgQ09ERUMKK3sKKyAgdV9jaGFyIHRyYWNrczsKKyAgdV9jaGFyIGlucHV0X3NvdXJjZTsKKyNkZWZpbmUgQ09ERUNfU09VUkNFX0FEQyAgICAgICAgMQorI2RlZmluZSBDT0RFQ19TT1VSQ0VfTUFUUklYICAgICAyCisgIHVfY2hhciBhZGNfc291cmNlOworI2RlZmluZSBBRENfU09VUkNFX1JJR0hUX1BTRyAgICAxCisjZGVmaW5lIEFEQ19TT1VSQ0VfTEVGVF9QU0cgICAgIDIKKyAgdV9jaGFyIGdhaW47CisjZGVmaW5lIENPREVDX0dBSU5fUklHSFQgICAgICAgIDB4MGYKKyNkZWZpbmUgQ09ERUNfR0FJTl9MRUZUICAgICAgICAgMHhmMAorICB1X2NoYXIgYXR0ZW51YXRpb247CisjZGVmaW5lIENPREVDX0FUVEVOVUFUSU9OX1JJR0hUIDB4MGYKKyNkZWZpbmUgQ09ERUNfQVRURU5VQVRJT05fTEVGVCAgMHhmMAorICB1X2NoYXIgdW51c2VkMTsKKyAgdV9jaGFyIHN0YXR1czsKKyNkZWZpbmUgQ09ERUNfT1ZFUkZMT1dfUklHSFQgICAgMQorI2RlZmluZSBDT0RFQ19PVkVSRkxPV19MRUZUICAgICAyCisgIHVfY2hhciB1bnVzZWQyLCB1bnVzZWQzLCB1bnVzZWQ0LCB1bnVzZWQ1OworICB1X2NoYXIgZ3Bpb19kaXJlY3Rpb25zOworI2RlZmluZSBHUElPX0lOICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdQSU9fT1VUICAgICAgICAgICAgICAgIDEKKyAgdV9jaGFyIHVudXNlZDY7CisgIHVfY2hhciBncGlvX2RhdGE7Cit9OworI2RlZmluZSBmYWxjb25fY29kZWMgKCoodm9sYXRpbGUgc3RydWN0IENPREVDICopQ09ERUNfQkFTRSkKKworLyoKKyoqIEZhbGNvbiBCbGl0dGVyCisqLworCisjZGVmaW5lIEJMVF9CQVMgKDB4ZmZmZjhhMDApCisKK3N0cnVjdCBCTElUVEVSCisgeworICB1X3Nob3J0IGhhbGZ0b25lWzE2XTsKKyAgdV9zaG9ydCBzcmNfeF9pbmM7CisgIHVfc2hvcnQgc3JjX3lfaW5jOworICB1X2xvbmcgc3JjX2FkZHJlc3M7CisgIHVfc2hvcnQgZW5kbWFzazE7CisgIHVfc2hvcnQgZW5kbWFzazI7CisgIHVfc2hvcnQgZW5kbWFzazM7CisgIHVfc2hvcnQgZHN0X3hfaW5jOworICB1X3Nob3J0IGRzdF95X2luYzsKKyAgdV9sb25nIGRzdF9hZGRyZXNzOworICB1X3Nob3J0IHdkX3Blcl9saW5lOworICB1X3Nob3J0IGxuX3Blcl9iYjsKKyAgdV9zaG9ydCBobGZfb3BfcmVnOworICB1X3Nob3J0IGxvZ19vcF9yZWc7CisgIHVfc2hvcnQgbGluX25tX3JlZzsKKyAgdV9zaG9ydCBza2V3X3JlZzsKKyB9OworIyBkZWZpbmUgYmxpdHRlciAoKCoodm9sYXRpbGUgc3RydWN0IEJMSVRURVIgKilCTFRfQkFTKSkKKworCisvKgorKiogU0NDIFo4NTMwCisgKi8KKworI2RlZmluZSBTQ0NfQkFTICgweGZmZmY4YzgxKQorc3RydWN0IFNDQworIHsKKyAgdV9jaGFyIGNoYV9hX2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MTsKKyAgdV9jaGFyIGNoYV9hX2RhdGE7CisgIHVfY2hhciBjaGFyX2R1bW15MjsKKyAgdV9jaGFyIGNoYV9iX2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MzsKKyAgdV9jaGFyIGNoYV9iX2RhdGE7CisgfTsKKyMgZGVmaW5lIHNjYyAoKCoodm9sYXRpbGUgc3RydWN0IFNDQyopU0NDX0JBUykpCisKKy8qIFRoZSBFU0NDIChaODUyMzApIGluIGFuIEF0YXJpIFNULiBUaGUgY2hhbm5lbHMgYXJlIHJldmVyc2VkISAqLworIyBkZWZpbmUgc3RfZXNjYyAoKCoodm9sYXRpbGUgc3RydWN0IFNDQyopMHhmZmZmZmEzMSkpCisjIGRlZmluZSBzdF9lc2NjX2RzciAoKCoodm9sYXRpbGUgY2hhciAqKTB4ZmZmZmZhMzkpKQorCisvKiBUVCBTQ0MgRE1BIENvbnRyb2xsZXIgKHNhbWUgY2hpcCBhcyBTQ1NJIERNQSkgKi8KKworI2RlZmluZQlUVF9TQ0NfRE1BX0JBUwkoMHhmZmZmOGMwMCkKKyNkZWZpbmUJdHRfc2NjX2RtYQkoKCoodm9sYXRpbGUgc3RydWN0IFRUX0RNQSAqKVRUX1NDQ19ETUFfQkFTKSkKKworLyoKKyoqIFZJREVMIFBhbGV0dGUgUmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIEZQTF9CQVMgKDB4ZmZmZjk4MDApCitzdHJ1Y3QgVklERUxfUEFMRVRURQorIHsKKyAgdV9sb25nIHJlZ1syNTZdOworIH07CisjIGRlZmluZSB2aWRlbF9wYWxldHRlICgoKih2b2xhdGlsZSBzdHJ1Y3QgVklERUxfUEFMRVRURSopRlBMX0JBUykpCisKKworLyoKKyoqIEZhbGNvbiBEU1AgSG9zdCBJbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIERTUDU2S19IT1NUX0lOVEVSRkFDRV9CQVNFICgweGZmZmZhMjAwKQorc3RydWN0IERTUDU2S19IT1NUX0lOVEVSRkFDRSB7CisgIHVfY2hhciBpY3I7CisjZGVmaW5lIERTUDU2S19JQ1JfUlJFUQkweDAxCisjZGVmaW5lIERTUDU2S19JQ1JfVFJFUQkweDAyCisjZGVmaW5lIERTUDU2S19JQ1JfSEYwCTB4MDgKKyNkZWZpbmUgRFNQNTZLX0lDUl9IRjEJMHgxMAorI2RlZmluZSBEU1A1NktfSUNSX0hNMAkweDIwCisjZGVmaW5lIERTUDU2S19JQ1JfSE0xCTB4NDAKKyNkZWZpbmUgRFNQNTZLX0lDUl9JTklUCTB4ODAKKworICB1X2NoYXIgY3ZyOworI2RlZmluZSBEU1A1NktfQ1ZSX0hWX01BU0sgMHgxZgorI2RlZmluZSBEU1A1NktfQ1ZSX0hDCTB4ODAKKworICB1X2NoYXIgaXNyOworI2RlZmluZSBEU1A1NktfSVNSX1JYREYJMHgwMQorI2RlZmluZSBEU1A1NktfSVNSX1RYREUJMHgwMgorI2RlZmluZSBEU1A1NktfSVNSX1RSRFkJMHgwNAorI2RlZmluZSBEU1A1NktfSVNSX0hGMgkweDA4CisjZGVmaW5lIERTUDU2S19JU1JfSEYzCTB4MTAKKyNkZWZpbmUgRFNQNTZLX0lTUl9ETUEJMHg0MAorI2RlZmluZSBEU1A1NktfSVNSX0hSRVEJMHg4MAorCisgIHVfY2hhciBpdnI7CisKKyAgdW5pb24geworICAgIHVfY2hhciBiWzRdOworICAgIHVfc2hvcnQgd1syXTsKKyAgICB1X2xvbmcgbDsKKyAgfSBkYXRhOworfTsKKyNkZWZpbmUgZHNwNTZrX2hvc3RfaW50ZXJmYWNlICgoKih2b2xhdGlsZSBzdHJ1Y3QgRFNQNTZLX0hPU1RfSU5URVJGQUNFICopRFNQNTZLX0hPU1RfSU5URVJGQUNFX0JBU0UpKQorCisvKgorKiogTUZQIDY4OTAxCisgKi8KKworI2RlZmluZSBNRlBfQkFTICgweGZmZmZmYTAxKQorc3RydWN0IE1GUAorIHsKKyAgdV9jaGFyIHBhcl9kdF9yZWc7CisgIHVfY2hhciBjaGFyX2R1bW15MTsKKyAgdV9jaGFyIGFjdGl2ZV9lZGdlOworICB1X2NoYXIgY2hhcl9kdW1teTI7CisgIHVfY2hhciBkYXRhX2RpcjsKKyAgdV9jaGFyIGNoYXJfZHVtbXkzOworICB1X2NoYXIgaW50X2VuX2E7CisgIHVfY2hhciBjaGFyX2R1bW15NDsKKyAgdV9jaGFyIGludF9lbl9iOworICB1X2NoYXIgY2hhcl9kdW1teTU7CisgIHVfY2hhciBpbnRfcG5fYTsKKyAgdV9jaGFyIGNoYXJfZHVtbXk2OworICB1X2NoYXIgaW50X3BuX2I7CisgIHVfY2hhciBjaGFyX2R1bW15NzsKKyAgdV9jaGFyIGludF9zdl9hOworICB1X2NoYXIgY2hhcl9kdW1teTg7CisgIHVfY2hhciBpbnRfc3ZfYjsKKyAgdV9jaGFyIGNoYXJfZHVtbXk5OworICB1X2NoYXIgaW50X21rX2E7CisgIHVfY2hhciBjaGFyX2R1bW15MTA7CisgIHVfY2hhciBpbnRfbWtfYjsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxMTsKKyAgdV9jaGFyIHZlY19hZHI7CisgIHVfY2hhciBjaGFyX2R1bW15MTI7CisgIHVfY2hhciB0aW1fY3RfYTsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxMzsKKyAgdV9jaGFyIHRpbV9jdF9iOworICB1X2NoYXIgY2hhcl9kdW1teTE0OworICB1X2NoYXIgdGltX2N0X2NkOworICB1X2NoYXIgY2hhcl9kdW1teTE1OworICB1X2NoYXIgdGltX2R0X2E7CisgIHVfY2hhciBjaGFyX2R1bW15MTY7CisgIHVfY2hhciB0aW1fZHRfYjsKKyAgdV9jaGFyIGNoYXJfZHVtbXkxNzsKKyAgdV9jaGFyIHRpbV9kdF9jOworICB1X2NoYXIgY2hhcl9kdW1teTE4OworICB1X2NoYXIgdGltX2R0X2Q7CisgIHVfY2hhciBjaGFyX2R1bW15MTk7CisgIHVfY2hhciBzeW5jX2NoYXI7CisgIHVfY2hhciBjaGFyX2R1bW15MjA7CisgIHVfY2hhciB1c2FydF9jdHI7CisgIHVfY2hhciBjaGFyX2R1bW15MjE7CisgIHVfY2hhciByY3Zfc3RhdDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkyMjsKKyAgdV9jaGFyIHRybl9zdGF0OworICB1X2NoYXIgY2hhcl9kdW1teTIzOworICB1X2NoYXIgdXNhcnRfZHRhOworIH07CisjIGRlZmluZSBtZnAgKCgqKHZvbGF0aWxlIHN0cnVjdCBNRlAqKU1GUF9CQVMpKQorCisvKiBUVCdzIHNlY29uZCBNRlAgKi8KKworI2RlZmluZQlUVF9NRlBfQkFTCSgweGZmZmZmYTgxKQorIyBkZWZpbmUgdHRfbWZwICgoKih2b2xhdGlsZSBzdHJ1Y3QgTUZQKilUVF9NRlBfQkFTKSkKKworCisvKiBUVCBTeXN0ZW0gQ29udHJvbCBVbml0ICovCisKKyNkZWZpbmUJVFRfU0NVX0JBUwkoMHhmZmZmOGUwMSkKK3N0cnVjdCBUVF9TQ1UgeworCXVfY2hhcglzeXNfbWFzazsKKwl1X2NoYXIJY2hhcl9kdW1teTE7CisJdV9jaGFyCXN5c19zdGF0OworCXVfY2hhcgljaGFyX2R1bW15MjsKKwl1X2NoYXIJc29mdGludDsKKwl1X2NoYXIJY2hhcl9kdW1teTM7CisJdV9jaGFyCXZtZWludDsKKwl1X2NoYXIJY2hhcl9kdW1teTQ7CisJdV9jaGFyCWdwX3JlZzE7CisJdV9jaGFyCWNoYXJfZHVtbXk1OworCXVfY2hhcglncF9yZWcyOworCXVfY2hhcgljaGFyX2R1bW15NjsKKwl1X2NoYXIJdm1lX21hc2s7CisJdV9jaGFyCWNoYXJfZHVtbXk3OworCXVfY2hhcgl2bWVfc3RhdDsKK307CisjZGVmaW5lCXR0X3NjdQkoKCoodm9sYXRpbGUgc3RydWN0IFRUX1NDVSAqKVRUX1NDVV9CQVMpKQorCisvKiBUVCByZWFsIHRpbWUgY2xvY2sgKi8KKworI2RlZmluZQlUVF9SVENfQkFTCSgweGZmZmY4OTYxKQorc3RydWN0IFRUX1JUQyB7CisJdV9jaGFyCXJlZ3NlbDsKKwl1X2NoYXIJZHVtbXk7CisJdV9jaGFyCWRhdGE7Cit9OworI2RlZmluZQl0dF9ydGMJKCgqKHZvbGF0aWxlIHN0cnVjdCBUVF9SVEMgKilUVF9SVENfQkFTKSkKKworCisvKgorKiogQUNJQSA2ODUwCisgKi8KKy8qIGNvbnN0YW50cyBmb3IgdGhlIEFDSUEgcmVnaXN0ZXJzICovCisKKy8qIGJhdWRyYXRlIHNlbGVjdGlvbiBhbmQgcmVzZXQgKEJhdWRyYXRlID0gY2xvY2svZmFjdG9yKSAqLworI2RlZmluZSBBQ0lBX0RJVjEgIDAKKyNkZWZpbmUgQUNJQV9ESVYxNiAxCisjZGVmaW5lIEFDSUFfRElWNjQgMgorI2RlZmluZSBBQ0lBX1JFU0VUIDMKKworLyogY2hhcmFjdGVyIGZvcm1hdCAqLworI2RlZmluZSBBQ0lBX0Q3RTJTICgwPDwyKQkvKiA3IGRhdGEsIGV2ZW4gcGFyaXR5LCAyIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EN08yUyAoMTw8MikJLyogNyBkYXRhLCBvZGQgcGFyaXR5LCAyIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EN0UxUyAoMjw8MikJLyogNyBkYXRhLCBldmVuIHBhcml0eSwgMSBzdG9wICovCisjZGVmaW5lIEFDSUFfRDdPMVMgKDM8PDIpCS8qIDcgZGF0YSwgb2RkIHBhcml0eSwgMSBzdG9wICovCisjZGVmaW5lIEFDSUFfRDhOMlMgKDQ8PDIpCS8qIDggZGF0YSwgbm8gcGFyaXR5LCAyIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EOE4xUyAoNTw8MikJLyogOCBkYXRhLCBubyBwYXJpdHksIDEgc3RvcCAqLworI2RlZmluZSBBQ0lBX0Q4RTFTICg2PDwyKQkvKiA4IGRhdGEsIGV2ZW4gcGFyaXR5LCAxIHN0b3AgKi8KKyNkZWZpbmUgQUNJQV9EOE8xUyAoNzw8MikJLyogOCBkYXRhLCBvZGQgcGFyaXR5LCAxIHN0b3AgKi8KKworLyogdHJhbnNtaXQgY29udHJvbCAqLworI2RlZmluZSBBQ0lBX1JMVElEICgwPDw1KQkvKiBSVFMgbG93LCBUeElOVCBkaXNhYmxlZCAqLworI2RlZmluZSBBQ0lBX1JMVElFICgxPDw1KQkvKiBSVFMgbG93LCBUeElOVCBlbmFibGVkICovCisjZGVmaW5lIEFDSUFfUkhUSUQgKDI8PDUpCS8qIFJUUyBoaWdoLCBUeElOVCBkaXNhYmxlZCAqLworI2RlZmluZSBBQ0lBX1JMVElEU0IgKDM8PDUpCS8qIFJUUyBsb3csIFR4SU5UIGRpc2FibGVkLCBzZW5kIGJyZWFrICovCisKKy8qIHJlY2VpdmUgY29udHJvbCAqLworI2RlZmluZSBBQ0lBX1JJRCAoMDw8NykJCS8qIFJ4SU5UIGRpc2FibGVkICovCisjZGVmaW5lIEFDSUFfUklFICgxPDw3KQkJLyogUnhJTlQgZW5hYmxlZCAqLworCisvKiBzdGF0dXMgZmllbGRzIG9mIHRoZSBBQ0lBICovCisjZGVmaW5lIEFDSUFfUkRSRiAxCQkvKiBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgRnVsbCAqLworI2RlZmluZSBBQ0lBX1REUkUgKDE8PDEpCS8qIFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkgKi8KKyNkZWZpbmUgQUNJQV9EQ0QgICgxPDwyKQkvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCisjZGVmaW5lIEFDSUFfQ1RTICAoMTw8MykJLyogQ2xlYXIgVG8gU2VuZCAqLworI2RlZmluZSBBQ0lBX0ZFICAgKDE8PDQpCS8qIEZyYW1pbmcgRXJyb3IgKi8KKyNkZWZpbmUgQUNJQV9PVlJOICgxPDw1KQkvKiBSZWNlaXZlciBPdmVycnVuICovCisjZGVmaW5lIEFDSUFfUEUgICAoMTw8NikJLyogUGFyaXR5IEVycm9yICovCisjZGVmaW5lIEFDSUFfSVJRICAoMTw8NykJLyogSW50ZXJydXB0IFJlcXVlc3QgKi8KKworI2RlZmluZSBBQ0lBX0JBUyAoMHhmZmZmZmMwMCkKK3N0cnVjdCBBQ0lBCisgeworICB1X2NoYXIga2V5X2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MTsKKyAgdV9jaGFyIGtleV9kYXRhOworICB1X2NoYXIgY2hhcl9kdW1teTI7CisgIHVfY2hhciBtaWRfY3RybDsKKyAgdV9jaGFyIGNoYXJfZHVtbXkzOworICB1X2NoYXIgbWlkX2RhdGE7CisgfTsKKyMgZGVmaW5lIGFjaWEgKCgqKHZvbGF0aWxlIHN0cnVjdCBBQ0lBKilBQ0lBX0JBUykpCisKKyNkZWZpbmUJVFRfRE1BU05EX0JBUyAoMHhmZmZmODkwMCkKK3N0cnVjdCBUVF9ETUFTTkQgeworCXVfY2hhcglpbnRfY3RybDsJLyogRmFsY29uOiBJbnRlcnJ1cHQgY29udHJvbCAqLworCXVfY2hhcgljdHJsOworCXVfY2hhcglwYWQyOworCXVfY2hhcgliYXNfaGk7CisJdV9jaGFyCXBhZDM7CisJdV9jaGFyCWJhc19taWQ7CisJdV9jaGFyCXBhZDQ7CisJdV9jaGFyCWJhc19sb3c7CisJdV9jaGFyCXBhZDU7CisJdV9jaGFyCWFkZHJfaGk7CisJdV9jaGFyCXBhZDY7CisJdV9jaGFyCWFkZHJfbWlkOworCXVfY2hhcglwYWQ3OworCXVfY2hhcglhZGRyX2xvdzsKKwl1X2NoYXIJcGFkODsKKwl1X2NoYXIJZW5kX2hpOworCXVfY2hhcglwYWQ5OworCXVfY2hhcgllbmRfbWlkOworCXVfY2hhcglwYWQxMDsKKwl1X2NoYXIJZW5kX2xvdzsKKwl1X2NoYXIJcGFkMTFbMTJdOworCXVfY2hhcgl0cmFja19zZWxlY3Q7CS8qIEZhbGNvbiAqLworCXVfY2hhcgltb2RlOworCXVfY2hhcglwYWQxMlsxNF07CisJLyogRmFsY29uIG9ubHk6ICovCisJdV9zaG9ydAljYmFyX3NyYzsKKwl1X3Nob3J0IGNiYXJfZHN0OworCXVfY2hhcglleHRfZGl2OworCXVfY2hhcglpbnRfZGl2OworCXVfY2hhcglyZWNfdHJhY2tfc2VsZWN0OworCXVfY2hhcglkYWNfc3JjOworCXVfY2hhcglhZGNfc3JjOworCXVfY2hhcglpbnB1dF9nYWluOworCXVfc2hvcnQJb3V0cHV0X2F0dGVuOworfTsKKyMgZGVmaW5lIHR0X2RtYXNuZCAoKCoodm9sYXRpbGUgc3RydWN0IFRUX0RNQVNORCAqKVRUX0RNQVNORF9CQVMpKQorCisjZGVmaW5lIERNQVNORF9NRlBfSU5UX1JFUExBWSAgICAgMHgwMQorI2RlZmluZSBETUFTTkRfTUZQX0lOVF9SRUNPUkQgICAgIDB4MDIKKyNkZWZpbmUgRE1BU05EX1RJTUVSQV9JTlRfUkVQTEFZICAweDA0CisjZGVmaW5lIERNQVNORF9USU1FUkFfSU5UX1JFQ09SRCAgMHgwOAorCisjZGVmaW5lCURNQVNORF9DVFJMX09GRgkJICAweDAwCisjZGVmaW5lCURNQVNORF9DVFJMX09OCQkgIDB4MDEKKyNkZWZpbmUJRE1BU05EX0NUUkxfUkVQRUFUCSAgMHgwMgorI2RlZmluZSBETUFTTkRfQ1RSTF9SRUNPUkRfT04gICAgIDB4MTAKKyNkZWZpbmUgRE1BU05EX0NUUkxfUkVDT1JEX09GRiAgICAweDAwCisjZGVmaW5lIERNQVNORF9DVFJMX1JFQ09SRF9SRVBFQVQgMHgyMAorI2RlZmluZSBETUFTTkRfQ1RSTF9TRUxFQ1RfUkVQTEFZIDB4MDAKKyNkZWZpbmUgRE1BU05EX0NUUkxfU0VMRUNUX1JFQ09SRCAweDgwCisjZGVmaW5lCURNQVNORF9NT0RFX01PTk8JICAweDgwCisjZGVmaW5lCURNQVNORF9NT0RFX1NURVJFTwkgIDB4MDAKKyNkZWZpbmUgRE1BU05EX01PREVfOEJJVAkgIDB4MDAKKyNkZWZpbmUgRE1BU05EX01PREVfMTZCSVQJICAweDQwCS8qIEZhbGNvbiBvbmx5ICovCisjZGVmaW5lCURNQVNORF9NT0RFXzZLSFoJICAweDAwCS8qIEZhbGNvbjogbXV0ZSAqLworI2RlZmluZQlETUFTTkRfTU9ERV8xMktIWgkgIDB4MDEKKyNkZWZpbmUJRE1BU05EX01PREVfMjVLSFoJICAweDAyCisjZGVmaW5lCURNQVNORF9NT0RFXzUwS0haCSAgMHgwMworCisKKyNkZWZpbmUgRE1BU05EU2V0QmFzZShidWZzdGFydCkJCQkJCQlcCisgICAgZG8gewkJCQkJCQkJXAorCXR0X2RtYXNuZC5iYXNfaGkgID0gKHVuc2lnbmVkIGNoYXIpKCgoYnVmc3RhcnQpICYgMHhmZjAwMDApID4+IDE2KTsgXAorCXR0X2RtYXNuZC5iYXNfbWlkID0gKHVuc2lnbmVkIGNoYXIpKCgoYnVmc3RhcnQpICYgMHgwMGZmMDApID4+IDgpOyBcCisJdHRfZG1hc25kLmJhc19sb3cgPSAodW5zaWduZWQgY2hhcikgKChidWZzdGFydCkgJiAweDAwMDBmZik7IFwKKyAgICB9IHdoaWxlKCAwICkKKworI2RlZmluZSBETUFTTkRHZXRBZHIoKSAoKHR0X2RtYXNuZC5hZGRyX2hpIDw8IDE2KSArCVwKKwkJCSh0dF9kbWFzbmQuYWRkcl9taWQgPDwgOCkgKwlcCisJCQkodHRfZG1hc25kLmFkZHJfbG93KSkKKworI2RlZmluZSBETUFTTkRTZXRFbmQoYnVmZW5kKQkJCQlcCisgICAgZG8gewkJCQkJCVwKKwl0dF9kbWFzbmQuZW5kX2hpICA9ICh1bnNpZ25lZCBjaGFyKSgoKGJ1ZmVuZCkgJiAweGZmMDAwMCkgPj4gMTYpOyBcCisJdHRfZG1hc25kLmVuZF9taWQgPSAodW5zaWduZWQgY2hhcikoKChidWZlbmQpICYgMHgwMGZmMDApID4+IDgpOyBcCisJdHRfZG1hc25kLmVuZF9sb3cgPSAodW5zaWduZWQgY2hhcikgKChidWZlbmQpICYgMHgwMDAwZmYpOyBcCisgICAgfSB3aGlsZSggMCApCisKKworI2RlZmluZQlUVF9NSUNST1dJUkVfQkFTCSgweGZmZmY4OTIyKQorc3RydWN0IFRUX01JQ1JPV0lSRSB7CisJdV9zaG9ydAlkYXRhOworCXVfc2hvcnQJbWFzazsKK307CisjIGRlZmluZSB0dF9taWNyb3dpcmUgKCgqKHZvbGF0aWxlIHN0cnVjdCBUVF9NSUNST1dJUkUgKilUVF9NSUNST1dJUkVfQkFTKSkKKworI2RlZmluZQlNV19MTTE5OTJfQUREUgkJMHgwNDAwCisKKyNkZWZpbmUJTVdfTE0xOTkyX1ZPTFVNRShkQikJXAorICAgICgweDBjMCB8ICgoZEIpIDwgLTgwID8gMCA6IChkQikgPiAwID8gNDAgOiAoKChkQikgKyA4MCkgLyAyKSkpCisjZGVmaW5lCU1XX0xNMTk5Ml9CQUxMRUZUKGRCKQlcCisgICAgKDB4MTQwIHwgKChkQikgPCAtNDAgPyAwIDogKGRCKSA+IDAgPyAyMCA6ICgoKGRCKSArIDQwKSAvIDIpKSkKKyNkZWZpbmUJTVdfTE0xOTkyX0JBTFJJR0hUKGRCKQlcCisgICAgKDB4MTAwIHwgKChkQikgPCAtNDAgPyAwIDogKGRCKSA+IDAgPyAyMCA6ICgoKGRCKSArIDQwKSAvIDIpKSkKKyNkZWZpbmUJTVdfTE0xOTkyX1RSRUJMRShkQikJXAorICAgICgweDA4MCB8ICgoZEIpIDwgLTEyID8gMCA6IChkQikgPiAxMiA/IDEyIDogKCgoZEIpIC8gMikgKyA2KSkpCisjZGVmaW5lCU1XX0xNMTk5Ml9CQVNTKGRCKQlcCisgICAgKDB4MDQwIHwgKChkQikgPCAtMTIgPyAwIDogKGRCKSA+IDEyID8gMTIgOiAoKChkQikgLyAyKSArIDYpKSkKKworI2RlZmluZQlNV19MTTE5OTJfUFNHX0xPVwkweDAwMAorI2RlZmluZQlNV19MTTE5OTJfUFNHX0hJR0gJMHgwMDEKKyNkZWZpbmUJTVdfTE0xOTkyX1BTR19PRkYJMHgwMDIKKworI2RlZmluZSBNU1RFX1JUQ19CQVMJKDB4ZmZmZmZjMjEpCisKK3N0cnVjdCBNU1RFX1JUQyB7CisJdV9jaGFyIHNlY19vbmVzOworCXVfY2hhciBkdW1teTE7CisJdV9jaGFyIHNlY190ZW5zOworCXVfY2hhciBkdW1teTI7CisJdV9jaGFyIG1pbl9vbmVzOworCXVfY2hhciBkdW1teTM7CisJdV9jaGFyIG1pbl90ZW5zOworCXVfY2hhciBkdW1teTQ7CisJdV9jaGFyIGhyX29uZXM7CisJdV9jaGFyIGR1bW15NTsKKwl1X2NoYXIgaHJfdGVuczsKKwl1X2NoYXIgZHVtbXk2OworCXVfY2hhciB3ZWVrZGF5OworCXVfY2hhciBkdW1teTc7CisJdV9jaGFyIGRheV9vbmVzOworCXVfY2hhciBkdW1teTg7CisJdV9jaGFyIGRheV90ZW5zOworCXVfY2hhciBkdW1teTk7CisJdV9jaGFyIG1vbl9vbmVzOworCXVfY2hhciBkdW1teTEwOworCXVfY2hhciBtb25fdGVuczsKKwl1X2NoYXIgZHVtbXkxMTsKKwl1X2NoYXIgeWVhcl9vbmVzOworCXVfY2hhciBkdW1teTEyOworCXVfY2hhciB5ZWFyX3RlbnM7CisJdV9jaGFyIGR1bW15MTM7CisJdV9jaGFyIG1vZGU7CisJdV9jaGFyIGR1bW15MTQ7CisJdV9jaGFyIHRlc3Q7CisJdV9jaGFyIGR1bW15MTU7CisJdV9jaGFyIHJlc2V0OworfTsKKworI2RlZmluZSBtc3RlX3J0YyAoKCoodm9sYXRpbGUgc3RydWN0IE1TVEVfUlRDICopTVNURV9SVENfQkFTKSkKKworI2VuZGlmIC8qIGxpbnV4L2F0YXJpaHcuaCAqLworCg==